ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDBiZjMxZWEuLjliZjcxNGEgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTE5NCwxNSArMTE5NCw5IEBACiBTOiBVU0EKIAogTjogVHJpc3RhbiBHcmVhdmVzCi1FOiBUcmlzdGFuLkdyZWF2ZXNAaWNsLmNvbQotRTogdG1nMjk2QGVjcy5zb3Rvbi5hYy51awotVzogaHR0cDovL3d3dy5lY3Muc290b24uYWMudWsvfnRtZzI5NgorRTogdHJpc3RhbkBleHRyaWNhdGUub3JnCitXOiBodHRwOi8vd3d3LmV4dHJpY2F0ZS5vcmcvCiBEOiBNaXNjZWxsYW5lb3VzIGlwdjQgc3lzY3RsIHBhdGNoZXMKLVM6IDE1IExpdHRsZSBNZWFkCi1TOiBEZW5tZWFkCi1TOiBIYW1wc2hpcmUKLVM6IFBPNyA2SFMKLVM6IFVuaXRlZCBLaW5nZG9tCiAKIE46IE1pY2hhZWwgQS4gR3JpZmZpdGgKIEU6IGdyaWZAY3MudWNyLmVkdQpAQCAtMzI0NywxNCArMzI0MSw5IEBACiBTOiBCZWF2ZXJ0b24sIE9yZWdvbiA5NzAwNQogUzogVVNBCiAKLU46IE1hcmNlbG8gVy4gVG9zYXR0aQotRTogbWFyY2Vsby50b3NhdHRpQGN5Y2xhZGVzLmNvbQotRDogTWlzY2VsbGFuZW91cyBrZXJuZWwgaGFja2VyCitOOiBNYXJjZWxvIFRvc2F0dGkKK0U6IG1hcmNlbG9Aa3ZhY2sub3JnCiBEOiB2Mi40IGtlcm5lbCBtYWludGFpbmVyCi1EOiBDdXJyZW50IHBjMzAwL2N5Y2xhZGVzIG1haW50YWluZXIKLVM6IEN5Y2xhZGVzIENvcnBvcmF0aW9uCi1TOiBBdiBDcmlzdG92YW8gQ29sb21ibywgNDYyLiBGbG9yZXN0YS4KLVM6IFBvcnRvIEFsZWdyZQogUzogQnJhemlsCiAKIE46IFN0ZWZhbiBUcmFieQpAQCAtMzM4Miw3ICszMzcxLDcgQEAKIAogTjogR2VlcnQgVXl0dGVyaG9ldmVuCiBFOiBnZWVydEBsaW51eC1tNjhrLm9yZwotVzogaHR0cDovL2hvbWUudHZkLmJlL2NyMjY4NjQvCitXOiBodHRwOi8vdXNlcnMudGVsZW5ldC5iZS9nZWVydHUvCiBQOiAxMDI0Lzg2MjY3OEE2IEM1MUQgMzYxQyAwQkQxIDRDOTAgQjI3NSAgQzU1MyA2RUVBIDExQkEgODYyNiA3OEE2CiBEOiBtNjhrL0FtaWdhIGFuZCBQUEMvQ0hSUCBMb25ndHJhaWwgY29vcmRpbmF0b3IKIEQ6IEZyYW1lIGJ1ZmZlciBkZXZpY2UgYW5kIFhGNjhfRkJEZXYgbWFpbnRhaW5lcgpAQCAtMzM5Miw4ICszMzgxLDggQEAKIEQ6IEF0YXJpIEZhbGNvbiBjaGlwc2V0IElERQogRDogQW1pZ2EgR2F5bGUgY2hpcHNldCBJREUKIEQ6IG1pcHNlbCBORUMgRERCIFZyYy01MDc0Ci1TOiBFbWllbCBWbGllYmVyZ2hsYWFuIDJBLzIxCi1TOiBCLTMwMTAgS2Vzc2VsLUxvCitTOiBIYXRlcmJlZWtzdHJhYXQgNTVCCitTOiBCLTMyMDAgQWFyc2Nob3QKIFM6IEJlbGdpdW0KIAogTjogQ2hyaXMgVmFuY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CmluZGV4IDFhZjBmMmQuLjJmZmIwZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dApAQCAtMzMsNyArMzMsOSBAQAogCiBDb25zaXN0ZW50IG1lbW9yeSBpcyBtZW1vcnkgZm9yIHdoaWNoIGEgd3JpdGUgYnkgZWl0aGVyIHRoZSBkZXZpY2Ugb3IKIHRoZSBwcm9jZXNzb3IgY2FuIGltbWVkaWF0ZWx5IGJlIHJlYWQgYnkgdGhlIHByb2Nlc3NvciBvciBkZXZpY2UKLXdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4KK3dpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4gIChZb3UgbWF5IGhvd2V2ZXIgbmVlZAordG8gbWFrZSBzdXJlIHRvIGZsdXNoIHRoZSBwcm9jZXNzb3IncyB3cml0ZSBidWZmZXJzIGJlZm9yZSB0ZWxsaW5nCitkZXZpY2VzIHRvIHJlYWQgdGhhdCBtZW1vcnkuKQogCiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgcmVnaW9uIG9mIDxzaXplPiBieXRlcyBvZiBjb25zaXN0ZW50IG1lbW9yeS4KIGl0IGFsc28gcmV0dXJucyBhIDxkbWFfaGFuZGxlPiB3aGljaCBtYXkgYmUgY2FzdCB0byBhbiB1bnNpZ25lZApAQCAtMzA0LDEyICszMDYsMTIgQEAKIGNvdWxkIG5vdCBiZSBjcmVhdGVkIGFuZCB0aGUgZHJpdmVyIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiAoZWcKIHJlZHVjZSBjdXJyZW50IERNQSBtYXBwaW5nIHVzYWdlIG9yIGRlbGF5IGFuZCB0cnkgYWdhaW4gbGF0ZXIpLgogCi1pbnQKLWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotaW50Ci1wY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCisJaW50CisJZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCWludAorCXBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCiAKIE1hcHMgYSBzY2F0dGVyIGdhdGhlciBsaXN0IGZyb20gdGhlIGJsb2NrIGxheWVyLgogCkBAIC0zMjcsMTIgKzMyOSwzMyBAQAogYWJvcnRpbmcgdGhlIHJlcXVlc3Qgb3IgZXZlbiBvb3BzaW5nIGlzIGJldHRlciB0aGFuIGRvaW5nIG5vdGhpbmcgYW5kCiBjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtLgogCi12b2lkCi1kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXZvaWQKLXBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCitXaXRoIHNjYXR0ZXJsaXN0cywgeW91IHVzZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgbGlrZSB0aGlzOgorCisJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCWZvciAoaSA9IDAsIHNnID0gc2dsaXN0OyBpIDwgY291bnQ7IGkrKywgc2crKykgeworCQlod19hZGRyZXNzW2ldID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQlod19sZW5baV0gPSBzZ19kbWFfbGVuKHNnKTsKKwl9CisKK3doZXJlIG5lbnRzIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2dsaXN0LgorCitUaGUgaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byBtZXJnZSBzZXZlcmFsIGNvbnNlY3V0aXZlIHNnbGlzdCBlbnRyaWVzCitpbnRvIG9uZSAoZS5nLiB3aXRoIGFuIElPTU1VLCBvciBpZiBzZXZlcmFsIHBhZ2VzIGp1c3QgaGFwcGVuIHRvIGJlCitwaHlzaWNhbGx5IGNvbnRpZ3VvdXMpIGFuZCByZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNnIGVudHJpZXMgaXQKK21hcHBlZCB0aGVtIHRvLiBPbiBmYWlsdXJlIDAsIGlzIHJldHVybmVkLgorCitUaGVuIHlvdSBzaG91bGQgbG9vcCBjb3VudCB0aW1lcyAobm90ZTogdGhpcyBjYW4gYmUgbGVzcyB0aGFuIG5lbnRzIHRpbWVzKQorYW5kIHVzZSBzZ19kbWFfYWRkcmVzcygpIGFuZCBzZ19kbWFfbGVuKCkgbWFjcm9zIHdoZXJlIHlvdSBwcmV2aW91c2x5CithY2Nlc3NlZCBzZy0+YWRkcmVzcyBhbmQgc2ctPmxlbmd0aCBhcyBzaG93biBhYm92ZS4KKworCXZvaWQKKwlkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCXZvaWQKKwlwY2lfdW5tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCiAKIHVubWFwIHRoZSBwcmV2aW91c2x5IG1hcHBlZCBzY2F0dGVyL2dhdGhlciBsaXN0LiAgQWxsIHRoZSBwYXJhbWV0ZXJzCiBtdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIGFuZCBwYXNzZWQgaW4gdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKaW5kZXggZWU0YmI3My4uN2M3MTc2OTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0CkBAIC01OCwxMSArNTgsMTUgQEAKIHNvbWV0aGluZyBsaWtlIF9fdmEoKS4gIFsgRURJVDogVXBkYXRlIHRoaXMgd2hlbiB3ZSBpbnRlZ3JhdGUKIEdlcmQgS25vcnIncyBnZW5lcmljIGNvZGUgd2hpY2ggZG9lcyB0aGlzLiBdCiAKLVRoaXMgcnVsZSBhbHNvIG1lYW5zIHRoYXQgeW91IG1heSBub3QgdXNlIGtlcm5lbCBpbWFnZSBhZGRyZXNzZXMKLShpZS4gaXRlbXMgaW4gdGhlIGtlcm5lbCdzIGRhdGEvdGV4dC9ic3Mgc2VnbWVudCwgb3IgeW91ciBkcml2ZXIncykKLW5vciBtYXkgeW91IHVzZSBrZXJuZWwgc3RhY2sgYWRkcmVzc2VzIGZvciBETUEuICBCb3RoIG9mIHRoZXNlIGl0ZW1zCi1taWdodCBiZSBtYXBwZWQgc29tZXdoZXJlIGVudGlyZWx5IGRpZmZlcmVudCB0aGFuIHRoZSByZXN0IG9mIHBoeXNpY2FsCi1tZW1vcnkuCitUaGlzIHJ1bGUgYWxzbyBtZWFucyB0aGF0IHlvdSBtYXkgdXNlIG5laXRoZXIga2VybmVsIGltYWdlIGFkZHJlc3NlcworKGl0ZW1zIGluIGRhdGEvdGV4dC9ic3Mgc2VnbWVudHMpLCBub3IgbW9kdWxlIGltYWdlIGFkZHJlc3Nlcywgbm9yCitzdGFjayBhZGRyZXNzZXMgZm9yIERNQS4gIFRoZXNlIGNvdWxkIGFsbCBiZSBtYXBwZWQgc29tZXdoZXJlIGVudGlyZWx5CitkaWZmZXJlbnQgdGhhbiB0aGUgcmVzdCBvZiBwaHlzaWNhbCBtZW1vcnkuICBFdmVuIGlmIHRob3NlIGNsYXNzZXMgb2YKK21lbW9yeSBjb3VsZCBwaHlzaWNhbGx5IHdvcmsgd2l0aCBETUEsIHlvdSdkIG5lZWQgdG8gZW5zdXJlIHRoZSBJL08KK2J1ZmZlcnMgd2VyZSBjYWNoZWxpbmUtYWxpZ25lZC4gIFdpdGhvdXQgdGhhdCwgeW91J2Qgc2VlIGNhY2hlbGluZQorc2hhcmluZyBwcm9ibGVtcyAoZGF0YSBjb3JydXB0aW9uKSBvbiBDUFVzIHdpdGggRE1BLWluY29oZXJlbnQgY2FjaGVzLgorKFRoZSBDUFUgY291bGQgd3JpdGUgdG8gb25lIHdvcmQsIERNQSB3b3VsZCB3cml0ZSB0byBhIGRpZmZlcmVudCBvbmUKK2luIHRoZSBzYW1lIGNhY2hlIGxpbmUsIGFuZCBvbmUgb2YgdGhlbSBjb3VsZCBiZSBvdmVyd3JpdHRlbi4pCiAKIEFsc28sIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90IHRha2UgdGhlIHJldHVybiBvZiBhIGttYXAoKQogY2FsbCBhbmQgRE1BIHRvL2Zyb20gdGhhdC4gIFRoaXMgaXMgc2ltaWxhciB0byB2bWFsbG9jKCkuCkBAIC0xOTQsNyArMTk4LDcgQEAKIEZpbmFsbHksIGlmIHlvdXIgZGV2aWNlIGNhbiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBvZgogYWRkcmVzcyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcgeW91IG1pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgogCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgMHgwMGZmZmZmZikpIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMjRCSVRfTUFTSykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIm15ZGV2OiAyNC1iaXQgRE1BIGFkZHJlc3Npbmcgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGlnbm9yZV90aGlzX2RldmljZTsKQEAgLTIxMiw3ICsyMTYsNyBAQAogZnVuY3Rpb25zKSBhbmQgdGhlIHZhcmlvdXMgZGlmZmVyZW50IGZ1bmN0aW9ucyBoYXZlIF9kaWZmZXJlbnRfCiBETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9ucywgeW91IG1heSB3aXNoIHRvIHByb2JlIGVhY2ggbWFzayBhbmQKIG9ubHkgcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eSB3aGljaCB0aGUgbWFjaGluZSBjYW4gaGFuZGxlLiAgSXQKLWlzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpIGJlIGZvciB0aGUgCitpcyBpbXBvcnRhbnQgdGhhdCB0aGUgbGFzdCBjYWxsIHRvIHBjaV9zZXRfZG1hX21hc2soKSBiZSBmb3IgdGhlCiBtb3N0IHNwZWNpZmljIG1hc2suCiAKIEhlcmUgaXMgcHNldWRvLWNvZGUgc2hvd2luZyBob3cgdGhpcyBtaWdodCBiZSBkb25lOgpAQCAtMjg0LDYgKzI4OCwxMSBAQAogCiAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gZ2V0IGNvcnJlY3QgYmVoYXZpb3Igb24gYWxsIHBsYXRmb3Jtcy4KIAorCSAgICAgQWxzbywgb24gc29tZSBwbGF0Zm9ybXMgeW91ciBkcml2ZXIgbWF5IG5lZWQgdG8gZmx1c2ggQ1BVIHdyaXRlCisJICAgICBidWZmZXJzIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIGl0IG5lZWRzIHRvIGZsdXNoIHdyaXRlIGJ1ZmZlcnMKKwkgICAgIGZvdW5kIGluIFBDSSBicmlkZ2VzIChzdWNoIGFzIGJ5IHJlYWRpbmcgYSByZWdpc3RlcidzIHZhbHVlCisJICAgICBhZnRlciB3cml0aW5nIGl0KS4KKwogLSBTdHJlYW1pbmcgRE1BIG1hcHBpbmdzIHdoaWNoIGFyZSB1c3VhbGx5IG1hcHBlZCBmb3Igb25lIERNQSB0cmFuc2ZlciwKICAgdW5tYXBwZWQgcmlnaHQgYWZ0ZXIgaXQgKHVubGVzcyB5b3UgdXNlIHBjaV9kbWFfc3luY18qIGJlbG93KSBhbmQgZm9yIHdoaWNoCiAgIGhhcmR3YXJlIGNhbiBvcHRpbWl6ZSBmb3Igc2VxdWVudGlhbCBhY2Nlc3Nlcy4KQEAgLTMwMyw2ICszMTIsOSBAQAogCiBOZWl0aGVyIHR5cGUgb2YgRE1BIG1hcHBpbmcgaGFzIGFsaWdubWVudCByZXN0cmljdGlvbnMgdGhhdCBjb21lCiBmcm9tIFBDSSwgYWx0aG91Z2ggc29tZSBkZXZpY2VzIG1heSBoYXZlIHN1Y2ggcmVzdHJpY3Rpb25zLgorQWxzbywgc3lzdGVtcyB3aXRoIGNhY2hlcyB0aGF0IGFyZW4ndCBETUEtY29oZXJlbnQgd2lsbCB3b3JrIGJldHRlcgord2hlbiB0aGUgdW5kZXJseWluZyBidWZmZXJzIGRvbid0IHNoYXJlIGNhY2hlIGxpbmVzIHdpdGggb3RoZXIgZGF0YS4KKwogCiAJCSBVc2luZyBDb25zaXN0ZW50IERNQSBtYXBwaW5ncy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IDdkODdkZDcuLjVhMjg4MmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIFRoaXMgbWFrZWZpbGUgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUga2VybmVsIGRvY3VtZW50YXRpb24sCiAjIHByaW1hcmlseSBiYXNlZCBvbiBpbi1saW5lIGNvbW1lbnRzIGluIHZhcmlvdXMgc291cmNlIGZpbGVzLgogIyBTZWUgRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0IGZvciBpbnN0cnVjdGlvbiBpbiBob3cKLSMgdG8gZHVjdW1lbnQgdGhlIFNSQyAtIGFuZCBob3cgdG8gcmVhZCBpdC4KKyMgdG8gZG9jdW1lbnQgdGhlIFNSQyAtIGFuZCBob3cgdG8gcmVhZCBpdC4KICMgVG8gYWRkIGEgbmV3IGJvb2sgdGhlIG9ubHkgc3RlcCByZXF1aXJlZCBpcyB0byBhZGQgdGhlIGJvb2sgdG8gdGhlCiAjIGxpc3Qgb2YgRE9DQk9PS1MuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCmluZGV4IDhjOWM2NzAuLmNhMDJlMDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbApAQCAtMzIyLDcgKzMyMiw2IEBACiAgIDxjaGFwdGVyIGlkPSJzeXNmcyI+CiAgICAgIDx0aXRsZT5UaGUgRmlsZXN5c3RlbSBmb3IgRXhwb3J0aW5nIEtlcm5lbCBPYmplY3RzPC90aXRsZT4KICFFZnMvc3lzZnMvZmlsZS5jCi0hRWZzL3N5c2ZzL2Rpci5jCiAhRWZzL3N5c2ZzL3N5bWxpbmsuYwogIUVmcy9zeXNmcy9iaW4uYwogICA8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKaW5kZXggNWJjYmI2ZS4uZjg2OWIwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbApAQCAtNzA1LDcgKzcwNSw3IEBACiAKIAk8c2VjdDE+PHRpdGxlPmF0YV9zY3NpX2Vycm9yKCk8L3RpdGxlPgogCTxwYXJhPgotCWF0YV9zY3NpX2Vycm9yKCkgaXMgdGhlIGN1cnJlbnQgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQorCWF0YV9zY3NpX2Vycm9yKCkgaXMgdGhlIGN1cnJlbnQgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCiAJZm9yIGxpYmF0YS4gIEFzIGRpc2N1c3NlZCBhYm92ZSwgdGhpcyB3aWxsIGJlIGVudGVyZWQgaW4gdHdvCiAJY2FzZXMgLSB0aW1lb3V0IGFuZCBBVEFQSSBlcnJvciBjb21wbGV0aW9uLiAgVGhpcyBmdW5jdGlvbgogCWNhbGxzIGxvdyBsZXZlbCBsaWJhdGEgZHJpdmVyJ3MgZW5nX3RpbWVvdXQoKSBjYWxsYmFjaywgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwppbmRleCA2YzllNzQ2Li45MTVhZThjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vSE9XVE8KQEAgLTYwMyw3ICs2MDMsOCBAQAogCiAKIC0tLS0tLS0tLS0KLVRoYW5rcyB0byBQYW9sbyBDaWFycm9jY2hpIHdobyBhbGxvd2VkIHRoZSAiRGV2ZWxvcG1lbnQgUHJvY2VzcyIgc2VjdGlvbgorVGhhbmtzIHRvIFBhb2xvIENpYXJyb2NjaGkgd2hvIGFsbG93ZWQgdGhlICJEZXZlbG9wbWVudCBQcm9jZXNzIgorKGh0dHA6Ly9saW51eC50YXIuYnovYXJ0aWNsZXMvMi42LWRldmVsb3BtZW50X3Byb2Nlc3MpIHNlY3Rpb24KIHRvIGJlIGJhc2VkIG9uIHRleHQgaGUgaGFkIHdyaXR0ZW4sIGFuZCB0byBSYW5keSBEdW5sYXAgYW5kIEdlcnJpdAogSHVpemVuZ2EgZm9yIHNvbWUgb2YgdGhlIGxpc3Qgb2YgdGhpbmdzIHlvdSBzaG91bGQgYW5kIHNob3VsZCBub3Qgc2F5LgogQWxzbyB0aGFua3MgdG8gUGF0IE1vY2hlbCwgSGFubmEgTGluZGVyLCBSYW5keSBEdW5sYXAsIEtheSBTaWV2ZXJzLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hY3BpLWhvdGtleS50eHQgYi9Eb2N1bWVudGF0aW9uL2FjcGktaG90a2V5LnR4dAppbmRleCA3NDRmMWFlLi4zODA0MGZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FjcGktaG90a2V5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FjcGktaG90a2V5LnR4dApAQCAtMzAsNyArMzAsNyBAQAogZWNobyAiZXZlbnRfbnVtOmV2ZW50X3R5cGU6ZXZlbnRfYXJndW1lbnQiID4gCiAJL3Byb2MvYWNwaS9ob3RrZXkvYWN0aW9uLgogVGhlIHJlc3VsdCBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgYW1sIG1ldGhvZCBpcyAKLWF0dGFjaGVkIHRvIC9wcm9jL2FjcGkvaG90a2V5L3BvbGxfbWV0aG9kLCB3aGljaCBpcyBkbnlhbWljYWxseQorYXR0YWNoZWQgdG8gL3Byb2MvYWNwaS9ob3RrZXkvcG9sbF9tZXRob2QsIHdoaWNoIGlzIGR5bmFtaWNhbGx5CiBjcmVhdGVkLiAgUGxlYXNlIHVzZSBjb21tYW5kICJjYXQgL3Byb2MvYWNwaS9ob3RrZXkvcG9sbGluZ19tZXRob2QiIAogdG8gcmV0cmlldmUgaXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmExMzBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0FzIG9mIHRoZSBMaW51eCAyLjYuMTAga2VybmVsLCBpdCBpcyBub3cgcG9zc2libGUgdG8gY2hhbmdlIHRoZQorSU8gc2NoZWR1bGVyIGZvciBhIGdpdmVuIGJsb2NrIGRldmljZSBvbiB0aGUgZmx5ICh0aHVzIG1ha2luZyBpdCBwb3NzaWJsZSwKK2ZvciBpbnN0YW5jZSwgdG8gc2V0IHRoZSBDRlEgc2NoZWR1bGVyIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQsIGJ1dAorc2V0IGEgc3BlY2lmaWMgZGV2aWNlIHRvIHVzZSB0aGUgYW50aWNpcGF0b3J5IG9yIG5vb3Agc2NoZWR1bGVycyAtIHdoaWNoCitjYW4gaW1wcm92ZSB0aGF0IGRldmljZSdzIHRocm91Z2hwdXQpLgorCitUbyBzZXQgYSBzcGVjaWZpYyBzY2hlZHVsZXIsIHNpbXBseSBkbyB0aGlzOgorCitlY2hvIFNDSEVETkFNRSA+IC9zeXMvYmxvY2svREVWL3F1ZXVlL3NjaGVkdWxlcgorCit3aGVyZSBTQ0hFRE5BTUUgaXMgdGhlIG5hbWUgb2YgYSBkZWZpbmVkIElPIHNjaGVkdWxlciwgYW5kIERFViBpcyB0aGUKK2RldmljZSBuYW1lIChoZGEsIGhkYiwgc2dhLCBvciB3aGF0ZXZlciB5b3UgaGFwcGVuIHRvIGhhdmUpLgorCitUaGUgbGlzdCBvZiBkZWZpbmVkIHNjaGVkdWxlcnMgY2FuIGJlIGZvdW5kIGJ5IHNpbXBseSBkb2luZworYSAiY2F0IC9zeXMvYmxvY2svREVWL3F1ZXVlL3NjaGVkdWxlciIgLSB0aGUgbGlzdCBvZiB2YWxpZCBuYW1lcword2lsbCBiZSBkaXNwbGF5ZWQsIHdpdGggdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzY2hlZHVsZXIgaW4gYnJhY2tldHM6CisKKyMgY2F0IC9zeXMvYmxvY2svaGRhL3F1ZXVlL3NjaGVkdWxlcgorbm9vcCBhbnRpY2lwYXRvcnkgZGVhZGxpbmUgW2NmcV0KKyMgZWNobyBhbnRpY2lwYXRvcnkgPiAvc3lzL2Jsb2NrL2hkYS9xdWV1ZS9zY2hlZHVsZXIKKyMgY2F0IC9zeXMvYmxvY2svaGRhL3F1ZXVlL3NjaGVkdWxlcgorbm9vcCBbYW50aWNpcGF0b3J5XSBkZWFkbGluZSBjZnEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQKaW5kZXggNTAwOTgwNS4uZmZkYjUzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQKQEAgLTUzLDQgKzUzLDQgQEAKICogaHR0cDovL2xpc3RzLmxpbnV4Lm9yZy51ay9tYWlsbWFuL2xpc3RpbmZvL2NwdWZyZXEKIAogQ2xvY2sgYW5kIHZvbHRhZ2Ugc2NhbGluZyBmb3IgdGhlIFNBLTExMDA6Ci0qIGh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sL3Byb2plY3RzL3NjYWxpbmcKKyogaHR0cDovL3d3dy5sYXJ0bWFrZXIubmwvcHJvamVjdHMvc2NhbGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKaW5kZXggM2M0MDZhYy4uYjM2OWE4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0xNzIxLDExICsxNzIxLDYgQEAKIAkJVGhlc2UgZGV2aWNlcyBzdXBwb3J0IHRoZSBzYW1lIEFQSSBhcyB0aGUgZ2VuZXJpYyBTQ1NJCiAJCWRldmljZXMuCiAKLSA5NyBibG9jawlQYWNrZXQgd3JpdGluZyBmb3IgQ0QvRFZEIGRldmljZXMKLQkJICAwID0gL2Rldi9wa3RjZHZkMAlGaXJzdCBwYWNrZXQtd3JpdGluZyBtb2R1bGUKLQkJICAxID0gL2Rldi9wa3RjZHZkMQlTZWNvbmQgcGFja2V0LXdyaXRpbmcgbW9kdWxlCi0JCSAgICAuLi4KLQogIDk4IGNoYXIJQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIChjb21lZGkpCiAJCSAgMCA9IC9kZXYvY29tZWRpMAlGaXJzdCBjb21lZGkgZGV2aWNlCiAJCSAgMSA9IC9kZXYvY29tZWRpMQlTZWNvbmQgY29tZWRpIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggMTVmYzhmYi4uNDgyMDM2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yNTksOSArMjU5LDkgQEAKIH0KIAogc3ViIG54dDIwMDIgewotICAgIG15ICRzb3VyY2VmaWxlID0gIkJyb2FkYmFuZDRQQ180XzJfMTEuemlwIjsKKyAgICBteSAkc291cmNlZmlsZSA9ICJUZWNobmlzYXRfRFZCLVBDXzRfNF9DT01QQUNULnppcCI7CiAgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmJidGkudXMvZG93bmxvYWQvd2luZG93cy8kc291cmNlZmlsZSI7Ci0gICAgbXkgJGhhc2ggPSAiYzZkMmVhNDdhOGY0NTZkODg3YWRhMGNmYjcxOGZmMmEiOworICAgIG15ICRoYXNoID0gIjQ3NmJlZmFlOGM3YzFiYjk2NDg5NTQwNjBiMWVlYzFmIjsKICAgICBteSAkb3V0ZmlsZSA9ICJkdmItZmUtbnh0MjAwMi5mdyI7CiAgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKIApAQCAtMjY5LDggKzI2OSw4IEBACiAKICAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CiAgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOwotICAgIHZlcmlmeSgiJHRtcGRpci9Ta3lORVRVLnN5cyIsICRoYXNoKTsKLSAgICBleHRyYWN0KCIkdG1wZGlyL1NreU5FVFUuc3lzIiwgMzc1ODMyLCA1OTA4LCAkb3V0ZmlsZSk7CisgICAgdmVyaWZ5KCIkdG1wZGlyL1NreU5FVC5zeXMiLCAkaGFzaCk7CisgICAgZXh0cmFjdCgiJHRtcGRpci9Ta3lORVQuc3lzIiwgMzMxNjI0LCA1OTA4LCAkb3V0ZmlsZSk7CiAKICAgICAkb3V0ZmlsZTsKIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA1OWQwYzc0Li40M2FiMTE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yNSw4ICsyNSw5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0Oglkcml2ZXJzIGRlcGVuZGluZyBvbiBPQlNPTEVURV9PU1NfRFJJVkVSCi1XaGVuOglKYW51YXJ5IDIwMDYKK1doYXQ6CWRyaXZlcnMgdGhhdCB3ZXJlIGRlcGVuZGluZyBvbiBPQlNPTEVURV9PU1NfRFJJVkVSCisgICAgICAgIChjb25maWcgb3B0aW9ucyBhbHJlYWR5IHJlbW92ZWQpCitXaGVuOgliZWZvcmUgMi42LjE5CiBXaHk6CU9TUyBkcml2ZXJzIHdpdGggQUxTQSByZXBsYWNlbWVudHMKIFdobzoJQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgogCkBAIC01Niw2ICs1NywxNSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJc2JwMjogbW9kdWxlIHBhcmFtZXRlciAiZm9yY2VfaW5xdWlyeV9oYWNrIgorV2hlbjoJSnVseSAyMDA2CitXaHk6CVN1cGVyY2VkZWQgYnkgcGFyYW1ldGVyICJ3b3JrYXJvdW5kcyIuIEJvdGggcGFyYW1ldGVycyBhcmUgbWVhbnQgdG8gYmUKKwl1c2VkIGFkLWhvYyBhbmQgZm9yIHNpbmdsZSBkZXZpY2VzIG9ubHksIGkuZS4gbm90IGluIG1vZHByb2JlLmNvbmYsCisJdGhlcmVmb3JlIHRoZSBpbXBhY3Qgb2YgdGhpcyBmZWF0dXJlIHJlcGxhY2VtZW50IHNob3VsZCBiZSBsb3cuCitXaG86CVN0ZWZhbiBSaWNodGVyIDxzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCB2aWRlb19kZWNvZGVyLmggZnJvbSBWaWRlbyBkZXZpY2VzLgogV2hlbjoJSnVseSAyMDA2CiBXaHk6CVY0TDEgQVAxIHdhcyByZXBsYWNlZCBieSBWNEwyIEFQSS4gZHVyaW5nIG1pZ3JhdGlvbiBmcm9tIDIuNCB0byAyLjYKQEAgLTcxLDE0ICs4MSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglyZW1vdmUgRVhQT1JUX1NZTUJPTChwYW5pY190aW1lb3V0KQotV2hlbjoJQXByaWwgMjAwNgotRmlsZXM6CWtlcm5lbC9wYW5pYy5jCi1XaHk6CU5vIG1vZHVsYXIgdXNhZ2UgaW4gdGhlIGtlcm5lbC4KLVdobzoJQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJcmVtb3ZlIEVYUE9SVF9TWU1CT0woaW5zZXJ0X3Jlc291cmNlKQogV2hlbjoJQXByaWwgMjAwNgogRmlsZXM6CWtlcm5lbC9yZXNvdXJjZS5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IGM4YmNlODIuLjg5YjFkMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC0yNDYsNiArMjQ2LDcgQEAKIGRldmljZXMvCiBmaXJtd2FyZS8KIG5ldC8KK2ZzLwogCiBkZXZpY2VzLyBjb250YWlucyBhIGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gb2YgdGhlIGRldmljZSB0cmVlLiBJdCBtYXBzCiBkaXJlY3RseSB0byB0aGUgaW50ZXJuYWwga2VybmVsIGRldmljZSB0cmVlLCB3aGljaCBpcyBhIGhpZXJhcmNoeSBvZgpAQCAtMjY0LDYgKzI2NSwxMCBAQAogZm9yIGRldmljZXMgb24gdGhhdCBwYXJ0aWN1bGFyIGJ1cyAodGhpcyBhc3N1bWVzIHRoYXQgZHJpdmVycyBkbyBub3QKIHNwYW4gbXVsdGlwbGUgYnVzIHR5cGVzKS4KIAorZnMvIGNvbnRhaW5zIGEgZGlyZWN0b3J5IGZvciBzb21lIGZpbGVzeXN0ZW1zLiAgQ3VycmVudGx5IGVhY2gKK2ZpbGVzeXN0ZW0gd2FudGluZyB0byBleHBvcnQgYXR0cmlidXRlcyBtdXN0IGNyZWF0ZSBpdHMgb3duIGhpZXJhcmNoeQorYmVsb3cgZnMvIChzZWUgLi9mdXNlLnR4dCBmb3IgYW4gZXhhbXBsZSkuCisKIAogTW9yZSBpbmZvcm1hdGlvbiBjYW4gZHJpdmVyLW1vZGVsIHNwZWNpZmljIGZlYXR1cmVzIGNhbiBiZSBmb3VuZCBpbgogRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAppbmRleCBhZGFhODk5Li4zYTJlNTUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC02OTQsNyArNjk0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBkZXNjcmliZXMgaG93IHRoZSBWRlMgY2FuIG1hbmlwdWxhdGUgYW4gb3BlbiBmaWxlLiBBcyBvZiBrZXJuZWwKLTIuNi4xMywgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgorMi42LjE3LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6CiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgewogCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKQEAgLTcyMyw2ICs3MjMsMTAgQEAKIAlpbnQgKCpjaGVja19mbGFncykoaW50KTsKIAlpbnQgKCpkaXJfbm90aWZ5KShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCWludCAoKmZsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXNzaXplX3QgKCpzcGxpY2Vfd3JpdGUpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCAKK2ludCk7CisJc3NpemVfdCAoKnNwbGljZV9yZWFkKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgIAoraW50KTsKIH07CiAKIEFnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcwpAQCAtNzkwLDYgKzc5NCwxMiBAQAogCiAgIGZsb2NrOiBjYWxsZWQgYnkgdGhlIGZsb2NrKDIpIHN5c3RlbSBjYWxsCiAKKyAgc3BsaWNlX3dyaXRlOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGEgcGlwZSB0byBhIGZpbGUuIFRoaXMKKwkJbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHNwbGljZSgyKSBzeXN0ZW0gY2FsbAorCisgIHNwbGljZV9yZWFkOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBzcGxpY2UgZGF0YSBmcm9tIGZpbGUgdG8gYSBwaXBlLiBUaGlzCisJICAgICAgIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBzcGxpY2UoMikgc3lzdGVtIGNhbGwKKwogTm90ZSB0aGF0IHRoZSBmaWxlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBzcGVjaWZpYwogZmlsZXN5c3RlbSBpbiB3aGljaCB0aGUgaW5vZGUgcmVzaWRlcy4gV2hlbiBvcGVuaW5nIGEgZGV2aWNlIG5vZGUKIChjaGFyYWN0ZXIgb3IgYmxvY2sgc3BlY2lhbCkgbW9zdCBmaWxlc3lzdGVtcyB3aWxsIGNhbGwgc3BlY2lhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQppbmRleCA0M2U4MzZjLi5lOWNjOGJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQpAQCAtMTA1LDIwICsxMDUsMyBAQAogICAgb24gdGhlIHNldHVwLCBzbyBJIHRoaW5rIHRoYXQgdGhlIGNob2ljZSBvbiB3aGF0IGZpcm13YXJlIHRvIG1ha2UKICAgIHBlcnNpc3RlbnQgc2hvdWxkIGJlIGxlZnQgdG8gdXNlcnNwYWNlLgogCi0gLSBXaHkgcmVnaXN0ZXJfZmlybXdhcmUoKStfX2luaXQgY2FuIGJlIHVzZWZ1bDoKLSAJLSBGb3IgYm9vdCBkZXZpY2VzIG5lZWRpbmcgZmlybXdhcmUuCi0JLSBUbyBtYWtlIHRoZSB0cmFuc2l0aW9uIGVhc2llcjoKLQkJVGhlIGZpcm13YXJlIGNhbiBiZSBkZWNsYXJlZCBfX2luaXQgYW5kIHJlZ2lzdGVyX2Zpcm13YXJlKCkKLQkJY2FsbGVkIG9uIG1vZHVsZV9pbml0LiBUaGVuIHRoZSBmaXJtd2FyZSBpcyB3YXJyYW50ZWQgdG8gYmUKLQkJdGhlcmUgZXZlbiBpZiAiZmlybXdhcmUgaG90cGx1ZyB1c2Vyc3BhY2UiIGlzIG5vdCB0aGVyZSB5ZXQgb3IKLQkJaXQgZG9lc24ndCB5ZXQgcHJvdmlkZSB0aGUgbmVlZGVkIGZpcm13YXJlLgotCQlPbmNlIHRoZSBmaXJtd2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGluIHVzZXJzcGFjZSwgaXQgY2FuIGJlCi0JCXJlbW92ZWQgZnJvbSB0aGUga2VybmVsLiBPciBtYWRlIG9wdGlvbmFsIChDT05GSUdfLipfRklSTVdBUkUpLgotCi0JSW4gZWl0aGVyIGNhc2UsIGlmIGZpcm13YXJlIGhvdHBsdWcgc3VwcG9ydCBpcyB0aGVyZSwgaXQgY2FuIG1vdmUgdGhlCi0JZmlybXdhcmUgb3V0IG9mIGtlcm5lbCBtZW1vcnkgaW50byB0aGUgcmVhbCBmaWxlc3lzdGVtIGZvciBsYXRlcgotCXVzYWdlLgotCi0JTm90ZTogSWYgcGVyc2lzdGVuY2UgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIGluaXRyYW1mcywKLQlyZWdpc3Rlcl9maXJtd2FyZSgpIG1heSBub3QgYmUgYXBwcm9wcmlhdGUuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKaW5kZXggYWQzZWRhYi4uODdmZWNjZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKQEAgLTUsOCArNSw2IEBACiAgKgogICogU2FtcGxlIGNvZGUgb24gaG93IHRvIHVzZSByZXF1ZXN0X2Zpcm13YXJlKCkgZnJvbSBkcml2ZXJzLgogICoKLSAqIE5vdGUgdGhhdCByZWdpc3Rlcl9maXJtd2FyZSgpIGlzIGN1cnJlbnRseSB1c2VsZXNzLgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNywxMSArMTUsNiBAQAogCiAjaW5jbHVkZSAibGludXgvZmlybXdhcmUuaCIKIAotI2RlZmluZSBXRV9DQU5fTkVFRF9GSVJNV0FSRV9CRUZPUkVfVVNFUlNQQUNFX0lTX0FWQUlMQUJMRQotI2lmZGVmIFdFX0NBTl9ORUVEX0ZJUk1XQVJFX0JFRk9SRV9VU0VSU1BBQ0VfSVNfQVZBSUxBQkxFCi1jaGFyIF9faW5pdCBpbmtlcm5lbF9maXJtd2FyZVtdID0gImxldCdzIHNheSB0aGF0IHRoaXMgaXMgZmlybXdhcmVcbiI7Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBkZXZpY2UgZ2hvc3RfZGV2aWNlID0gewogCS5idXNfaWQgICAgPSAiZ2hvc3QwIiwKIH07CkBAIC0xMDQsMTAgKzk3LDYgQEAKIAogc3RhdGljIGludCBzYW1wbGVfaW5pdCh2b2lkKQogewotI2lmZGVmIFdFX0NBTl9ORUVEX0ZJUk1XQVJFX0JFRk9SRV9VU0VSU1BBQ0VfSVNfQVZBSUxBQkxFCi0JcmVnaXN0ZXJfZmlybXdhcmUoInNhbXBsZV9kcml2ZXJfZnciLCBpbmtlcm5lbF9maXJtd2FyZSwKLQkJCSAgc2l6ZW9mKGlua2VybmVsX2Zpcm13YXJlKSk7Ci0jZW5kaWYKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmZ2hvc3RfZGV2aWNlKTsKIAkvKiBzaW5jZSB0aGVyZSBpcyBubyByZWFsIGhhcmR3YXJlIGluc2VydGlvbiBJIGp1c3QgY2FsbCB0aGUKIAkgKiBzYW1wbGUgcHJvYmUgZnVuY3Rpb25zIGhlcmUgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYva2VybmVsLUFCSS50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2tlcm5lbC1BQkkudHh0CmluZGV4IDBlZDliMGEuLjhiMGE1ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYva2VybmVsLUFCSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9rZXJuZWwtQUJJLnR4dApAQCAtMSwxNyArMSwxOSBAQAotCQkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkJCQkgSU5URVJOQUwgS0VSTkVMIEFCSSBGT1IgRlItViBBUkNICi0JCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQlJTlRFUk5BTCBLRVJORUwgQUJJIEZPUiBGUi1WIEFSQ0gKKwkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgaW50ZXJuYWwgRlJWIGtlcm5lbCBBQkkgaXMgbm90IHF1aXRlIHRoZSBzYW1lIGFzIHRoZSB1c2Vyc3BhY2UgQUJJLiBBIG51bWJlciBvZiB0aGUgcmVnaXN0ZXJzCi1hcmUgdXNlZCBmb3Igc3BlY2lhbCBwdXJwb3NlZCwgYW5kIHRoZSBBQkkgaXMgbm90IGNvbnNpc3RlbnQgYmV0d2VlbiBtb2R1bGVzIHZzIGNvcmUsIGFuZCBNTVUgdnMKLW5vLU1NVS4KK1RoZSBpbnRlcm5hbCBGUlYga2VybmVsIEFCSSBpcyBub3QgcXVpdGUgdGhlIHNhbWUgYXMgdGhlIHVzZXJzcGFjZSBBQkkuIEEKK251bWJlciBvZiB0aGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciBzcGVjaWFsIHB1cnBvc2VkLCBhbmQgdGhlIEFCSSBpcyBub3QKK2NvbnNpc3RlbnQgYmV0d2VlbiBtb2R1bGVzIHZzIGNvcmUsIGFuZCBNTVUgdnMgbm8tTU1VLgogCi1UaGlzIHBhcnRseSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgRlJWIENQVXMgZG8gbm90IGhhdmUgYSBzZXBhcmF0ZSBzdXBlcnZpc29yIHN0YWNrIHBvaW50ZXIsIGFuZAotbW9zdCBvZiB0aGVtIGRvIG5vdCBoYXZlIGFueSBzY3JhdGNoIHJlZ2lzdGVycywgdGh1cyByZXF1aXJpbmcgYXQgbGVhc3Qgb25lIGdlbmVyYWwgcHVycG9zZQotcmVnaXN0ZXIgdG8gYmUgY2xvYmJlcmVkIGluIHN1Y2ggYW4gZXZlbnQuIEFsc28sIHdpdGhpbiB0aGUga2VybmVsIGNvcmUsIGl0IGlzIHBvc3NpYmxlIHRvIHNpbXBseQotanVtcCBvciBjYWxsIGRpcmVjdGx5IGJldHdlZW4gZnVuY3Rpb25zIHVzaW5nIGEgcmVsYXRpdmUgb2Zmc2V0LiBUaGlzIGNhbm5vdCBiZSBleHRlbmRlZCB0byBtb2R1bGVzCi1mb3IgdGhlIGRpc3BsYWNlbWVudCBpcyBsaWtlbHkgdG8gYmUgdG9vIGZhci4gVGh1cyBpbiBtb2R1bGVzIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gY2FsbAotbXVzdCBiZSBjYWxjdWxhdGVkIGluIGEgcmVnaXN0ZXIgYW5kIHRoZW4gdXNlZCwgcmVxdWlyaW5nIHR3byBleHRyYSBpbnN0cnVjdGlvbnMuCitUaGlzIHBhcnRseSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgRlJWIENQVXMgZG8gbm90IGhhdmUgYSBzZXBhcmF0ZQorc3VwZXJ2aXNvciBzdGFjayBwb2ludGVyLCBhbmQgbW9zdCBvZiB0aGVtIGRvIG5vdCBoYXZlIGFueSBzY3JhdGNoCityZWdpc3RlcnMsIHRodXMgcmVxdWlyaW5nIGF0IGxlYXN0IG9uZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgdG8gYmUKK2Nsb2JiZXJlZCBpbiBzdWNoIGFuIGV2ZW50LiBBbHNvLCB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlLCBpdCBpcyBwb3NzaWJsZSB0bworc2ltcGx5IGp1bXAgb3IgY2FsbCBkaXJlY3RseSBiZXR3ZWVuIGZ1bmN0aW9ucyB1c2luZyBhIHJlbGF0aXZlIG9mZnNldC4KK1RoaXMgY2Fubm90IGJlIGV4dGVuZGVkIHRvIG1vZHVsZXMgZm9yIHRoZSBkaXNwbGFjZW1lbnQgaXMgbGlrZWx5IHRvIGJlIHRvbworZmFyLiBUaHVzIGluIG1vZHVsZXMgdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiB0byBjYWxsIG11c3QgYmUgY2FsY3VsYXRlZAoraW4gYSByZWdpc3RlciBhbmQgdGhlbiB1c2VkLCByZXF1aXJpbmcgdHdvIGV4dHJhIGluc3RydWN0aW9ucy4KIAogVGhpcyBkb2N1bWVudCBoYXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKIApAQCAtMzksNyArNDEsOCBAQAogQ1BVIE9QRVJBVElORyBNT0RFUwogPT09PT09PT09PT09PT09PT09PQogCi1UaGUgRlItViBDUFUgaGFzIHRocmVlIGJhc2ljIG9wZXJhdGluZyBtb2Rlcy4gSW4gb3JkZXIgb2YgaW5jcmVhc2luZyBjYXBhYmlsaXR5OgorVGhlIEZSLVYgQ1BVIGhhcyB0aHJlZSBiYXNpYyBvcGVyYXRpbmcgbW9kZXMuIEluIG9yZGVyIG9mIGluY3JlYXNpbmcKK2NhcGFiaWxpdHk6CiAKICAgKDEpIFVzZXIgbW9kZS4KIApAQCAtNDcsNDIgKzUwLDQ2IEBACiAKICAgKDIpIEtlcm5lbCBtb2RlLgogCi0gICAgICBOb3JtYWwga2VybmVsIG1vZGUuIFRoZXJlIGFyZSBtYW55IGFkZGl0aW9uYWwgY29udHJvbCByZWdpc3RlcnMgYXZhaWxhYmxlIHRoYXQgbWF5IGJlCi0gICAgICBhY2Nlc3NlZCBpbiB0aGlzIG1vZGUsIGluIGFkZGl0aW9uIHRvIGFsbCB0aGUgc3R1ZmYgYXZhaWxhYmxlIHRvIHVzZXIgbW9kZS4gVGhpcyBoYXMgdHdvCi0gICAgICBzdWJtb2RlczoKKyAgICAgIE5vcm1hbCBrZXJuZWwgbW9kZS4gVGhlcmUgYXJlIG1hbnkgYWRkaXRpb25hbCBjb250cm9sIHJlZ2lzdGVycworICAgICAgYXZhaWxhYmxlIHRoYXQgbWF5IGJlIGFjY2Vzc2VkIGluIHRoaXMgbW9kZSwgaW4gYWRkaXRpb24gdG8gYWxsIHRoZQorICAgICAgc3R1ZmYgYXZhaWxhYmxlIHRvIHVzZXIgbW9kZS4gVGhpcyBoYXMgdHdvIHN1Ym1vZGVzOgogCiAgICAgICAoYSkgRXhjZXB0aW9ucyBlbmFibGVkIChQU1IuVCA9PSAxKS4KIAotICAgICAgCSAgRXhjZXB0aW9ucyB3aWxsIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgbm9ybWFsIGtlcm5lbCBtb2RlIGhhbmRsZXIuIE9uIGVudHJ5IHRvIHRoZQotICAgICAgCSAgaGFuZGxlciwgdGhlIFBTUi5UIGJpdCB3aWxsIGJlIGNsZWFyZWQuCisJICBFeGNlcHRpb25zIHdpbGwgaW52b2tlIHRoZSBhcHByb3ByaWF0ZSBub3JtYWwga2VybmVsIG1vZGUKKwkgIGhhbmRsZXIuIE9uIGVudHJ5IHRvIHRoZSBoYW5kbGVyLCB0aGUgUFNSLlQgYml0IHdpbGwgYmUgY2xlYXJlZC4KIAogICAgICAgKGIpIEV4Y2VwdGlvbnMgZGlzYWJsZWQgKFBTUi5UID09IDApLgogCi0gICAgICAJICBObyBleGNlcHRpb25zIG9yIGludGVycnVwdHMgbWF5IGhhcHBlbi4gQW55IG1hbmRhdG9yeSBleGNlcHRpb25zIHdpbGwgY2F1c2UgdGhlIENQVSB0bwotICAgICAgCSAgaGFsdCB1bmxlc3MgdGhlIENQVSBpcyB0b2xkIHRvIGp1bXAgaW50byBkZWJ1ZyBtb2RlIGluc3RlYWQuCisJICBObyBleGNlcHRpb25zIG9yIGludGVycnVwdHMgbWF5IGhhcHBlbi4gQW55IG1hbmRhdG9yeSBleGNlcHRpb25zCisJICB3aWxsIGNhdXNlIHRoZSBDUFUgdG8gaGFsdCB1bmxlc3MgdGhlIENQVSBpcyB0b2xkIHRvIGp1bXAgaW50bworCSAgZGVidWcgbW9kZSBpbnN0ZWFkLgogCiAgICgzKSBEZWJ1ZyBtb2RlLgogCi0gICAgICBObyBleGNlcHRpb25zIG1heSBoYXBwZW4gaW4gdGhpcyBtb2RlLiBNZW1vcnkgcHJvdGVjdGlvbiBhbmQgbWFuYWdlbWVudCBleGNlcHRpb25zIHdpbGwgYmUKLSAgICAgIGZsYWdnZWQgZm9yIGxhdGVyIGNvbnNpZGVyYXRpb24sIGJ1dCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgd29uJ3QgYmUgaW52b2tlZC4gRGVidWdnaW5nIHRyYXBzCi0gICAgICBzdWNoIGFzIGhhcmR3YXJlIGJyZWFrcG9pbnRzIGFuZCB3YXRjaHBvaW50cyB3aWxsIGJlIGlnbm9yZWQuIFRoaXMgbW9kZSBpcyBlbnRlcmVkIG9ubHkgYnkKLSAgICAgIGRlYnVnZ2luZyBldmVudHMgb2J0YWluZWQgZnJvbSB0aGUgb3RoZXIgdHdvIG1vZGVzLgorICAgICAgTm8gZXhjZXB0aW9ucyBtYXkgaGFwcGVuIGluIHRoaXMgbW9kZS4gTWVtb3J5IHByb3RlY3Rpb24gYW5kCisgICAgICBtYW5hZ2VtZW50IGV4Y2VwdGlvbnMgd2lsbCBiZSBmbGFnZ2VkIGZvciBsYXRlciBjb25zaWRlcmF0aW9uLCBidXQKKyAgICAgIHRoZSBleGNlcHRpb24gaGFuZGxlciB3b24ndCBiZSBpbnZva2VkLiBEZWJ1Z2dpbmcgdHJhcHMgc3VjaCBhcworICAgICAgaGFyZHdhcmUgYnJlYWtwb2ludHMgYW5kIHdhdGNocG9pbnRzIHdpbGwgYmUgaWdub3JlZC4gVGhpcyBtb2RlIGlzCisgICAgICBlbnRlcmVkIG9ubHkgYnkgZGVidWdnaW5nIGV2ZW50cyBvYnRhaW5lZCBmcm9tIHRoZSBvdGhlciB0d28gbW9kZXMuCiAKLSAgICAgIEFsbCBrZXJuZWwgbW9kZSByZWdpc3RlcnMgbWF5IGJlIGFjY2Vzc2VkLCBwbHVzIGEgZmV3IGV4dHJhIGRlYnVnZ2luZyBzcGVjaWZpYyByZWdpc3RlcnMuCisgICAgICBBbGwga2VybmVsIG1vZGUgcmVnaXN0ZXJzIG1heSBiZSBhY2Nlc3NlZCwgcGx1cyBhIGZldyBleHRyYSBkZWJ1Z2dpbmcKKyAgICAgIHNwZWNpZmljIHJlZ2lzdGVycy4KIAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIElOVEVSTkFMIEtFUk5FTC1NT0RFIFJFR0lTVEVSIEFCSQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIGFyZSBhIG51bWJlciBvZiBwZXJtYW5lbnQgcmVnaXN0ZXIgYXNzaWdubWVudHMgdGhhdCBhcmUgc2V0IHVwIGJ5IGVudHJ5LlMgaW4gdGhlIGV4Y2VwdGlvbgotcHJvbG9ndWUuIE5vdGUgdGhhdCB0aGVyZSBpcyBhIGNvbXBsZXRlIHNldCBvZiBleGNlcHRpb24gcHJvbG9ndWVzIGZvciBlYWNoIG9mIHVzZXItPmtlcm5lbAotdHJhbnNpdGlvbiBhbmQga2VybmVsLT5rZXJuZWwgdHJhbnNpdGlvbi4gVGhlcmUgYXJlIGFsc28gdXNlci0+ZGVidWcgYW5kIGtlcm5lbC0+ZGVidWcgbW9kZQotdHJhbnNpdGlvbiBwcm9sb2d1ZXMuCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGVybWFuZW50IHJlZ2lzdGVyIGFzc2lnbm1lbnRzIHRoYXQgYXJlIHNldCB1cCBieQorZW50cnkuUyBpbiB0aGUgZXhjZXB0aW9uIHByb2xvZ3VlLiBOb3RlIHRoYXQgdGhlcmUgaXMgYSBjb21wbGV0ZSBzZXQgb2YKK2V4Y2VwdGlvbiBwcm9sb2d1ZXMgZm9yIGVhY2ggb2YgdXNlci0+a2VybmVsIHRyYW5zaXRpb24gYW5kIGtlcm5lbC0+a2VybmVsCit0cmFuc2l0aW9uLiBUaGVyZSBhcmUgYWxzbyB1c2VyLT5kZWJ1ZyBhbmQga2VybmVsLT5kZWJ1ZyBtb2RlIHRyYW5zaXRpb24KK3Byb2xvZ3Vlcy4KIAogCiAJUkVHSVNURVIJRkxBVk9VUglVU0UKLQk9PT09PT09PT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJPT09PT09PT09PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCUdSMQkJCVN1cGVydmlzb3Igc3RhY2sgcG9pbnRlcgogCUdSMTUJCQlDdXJyZW50IHRocmVhZCBpbmZvIHBvaW50ZXIKIAlHUjE2CQkJR1AtUmVsIGJhc2UgcmVnaXN0ZXIgZm9yIHNtYWxsIGRhdGEKQEAgLTkyLDEwICs5OSwxMiBAQAogCUdSMzEJCU5PTU1VCURlc3Ryb3llZCBieSBkZWJ1ZyBtb2RlIGVudHJ5CiAJR1IzMQkJTU1VCURlc3Ryb3llZCBieSBUTEIgbWlzcyBrZXJuZWwgbW9kZSBlbnRyeQogCUNDUi5JQ0MyCQlWaXJ0dWFsIGludGVycnVwdCBkaXNhYmxlbWVudCB0cmFja2luZwotCUNDQ1IuQ0MzCQlDbGVhcmVkIGJ5IGV4Y2VwdGlvbiBwcm9sb2d1ZSAoYXRvbWljIG9wIGVtdWxhdGlvbikKKwlDQ0NSLkNDMwkJQ2xlYXJlZCBieSBleGNlcHRpb24gcHJvbG9ndWUgCisJCQkJKGF0b21pYyBvcCBlbXVsYXRpb24pCiAJU0NSMAkJTU1VCVNlZSBtbXUtbGF5b3V0LnR4dC4KIAlTQ1IxCQlNTVUJU2VlIG1tdS1sYXlvdXQudHh0LgotCVNDUjIJCU1NVQlTYXZlIGZvciBFQVIwIChkZXN0cm95ZWQgYnkgaWNhY2hlIGluc25zIGluIGRlYnVnIG1vZGUpCisJU0NSMgkJTU1VCVNhdmUgZm9yIEVBUjAgKGRlc3Ryb3llZCBieSBpY2FjaGUgaW5zbnMgCisJCQkJCSAgICAgICBpbiBkZWJ1ZyBtb2RlKQogCVNDUjMJCU1NVQlTYXZlIGZvciBHUjMxIGR1cmluZyBkZWJ1ZyBleGNlcHRpb25zCiAJREFNUi9JQU1SCU5PTU1VCUZpeGVkIG1lbW9yeSBwcm90ZWN0aW9uIGxheW91dC4KIAlEQU1SL0lBTVIJTU1VCVNlZSBtbXUtbGF5b3V0LnR4dC4KQEAgLTEwNCwxOCArMTEzLDIxIEBACiBDZXJ0YWluIHJlZ2lzdGVycyBhcmUgYWxzbyB1c2VkIG9yIG1vZGlmaWVkIGFjcm9zcyBmdW5jdGlvbiBjYWxsczoKIAogCVJFR0lTVEVSCUNBTEwJCQkJUkVUVVJOCi0JPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT0KIAlHUjAJCUZpeGVkIFplcm8JCQktCiAJR1IyCQlGdW5jdGlvbiBjYWxsIGZyYW1lIHBvaW50ZXIKIAlHUjMJCVNwZWNpYWwJCQkJUHJlc2VydmVkCiAJR1IzLUdSNwkJLQkJCQlDbG9iYmVyZWQKLQlHUjgJCUZ1bmN0aW9uIGNhbGwgYXJnICMxCQlSZXR1cm4gdmFsdWUgKG9yIGNsb2JiZXJlZCkKLQlHUjkJCUZ1bmN0aW9uIGNhbGwgYXJnICMyCQlSZXR1cm4gdmFsdWUgTVNXIChvciBjbG9iYmVyZWQpCisJR1I4CQlGdW5jdGlvbiBjYWxsIGFyZyAjMQkJUmV0dXJuIHZhbHVlIAorCQkJCQkJCShvciBjbG9iYmVyZWQpCisJR1I5CQlGdW5jdGlvbiBjYWxsIGFyZyAjMgkJUmV0dXJuIHZhbHVlIE1TVyAKKwkJCQkJCQkob3IgY2xvYmJlcmVkKQogCUdSMTAtR1IxMwlGdW5jdGlvbiBjYWxsIGFyZyAjMy0jNgkJQ2xvYmJlcmVkCiAJR1IxNAkJLQkJCQlDbG9iYmVyZWQKIAlHUjE1LUdSMTYJU3BlY2lhbAkJCQlQcmVzZXJ2ZWQKIAlHUjE3LUdSMjcJLQkJCQlQcmVzZXJ2ZWQKLQlHUjI4LUdSMzEJU3BlY2lhbAkJCQlPbmx5IGFjY2Vzc2VkIGV4cGxpY2l0bHkKKwlHUjI4LUdSMzEJU3BlY2lhbAkJCQlPbmx5IGFjY2Vzc2VkIAorCQkJCQkJCWV4cGxpY2l0bHkKIAlMUgkJUmV0dXJuIGFkZHJlc3MgYWZ0ZXIgQ0FMTAlDbG9iYmVyZWQKIAlDQ1IvQ0NDUgktCQkJCU1vc3RseSBDbG9iYmVyZWQKIApAQCAtMTI0LDQ2ICsxMzYsNTMgQEAKIElOVEVSTkFMIERFQlVHLU1PREUgUkVHSVNURVIgQUJJCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBrZXJuZWwtbW9kZSByZWdpc3RlciBBQkkgZm9yIGZ1bmN0aW9ucyBjYWxscy4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpbgotZGVidWctbW9kZSB0aGVyZSdzIGEgZGlmZmVyZW50IHN0YWNrIGFuZCBhIGRpZmZlcmVudCBleGNlcHRpb24gZnJhbWUuIEFsbW9zdCBhbGwgdGhlIGdsb2JhbAotcmVnaXN0ZXJzIGZyb20ga2VybmVsLW1vZGUgKGluY2x1ZGluZyB0aGUgc3RhY2sgcG9pbnRlcikgbWF5IGJlIGNoYW5nZWQuCitUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBrZXJuZWwtbW9kZSByZWdpc3RlciBBQkkgZm9yIGZ1bmN0aW9ucyBjYWxscy4gVGhlCitkaWZmZXJlbmNlIGlzIHRoYXQgaW4gZGVidWctbW9kZSB0aGVyZSdzIGEgZGlmZmVyZW50IHN0YWNrIGFuZCBhIGRpZmZlcmVudAorZXhjZXB0aW9uIGZyYW1lLiBBbG1vc3QgYWxsIHRoZSBnbG9iYWwgcmVnaXN0ZXJzIGZyb20ga2VybmVsLW1vZGUKKyhpbmNsdWRpbmcgdGhlIHN0YWNrIHBvaW50ZXIpIG1heSBiZSBjaGFuZ2VkLgogCiAJUkVHSVNURVIJRkxBVk9VUglVU0UKLQk9PT09PT09PT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJPT09PT09PT09PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCUdSMQkJCURlYnVnIHN0YWNrIHBvaW50ZXIKIAlHUjE2CQkJR1AtUmVsIGJhc2UgcmVnaXN0ZXIgZm9yIHNtYWxsIGRhdGEKLQlHUjMxCQkJQ3VycmVudCBkZWJ1ZyBleGNlcHRpb24gZnJhbWUgcG9pbnRlciAoX19kZWJ1Z19mcmFtZSkKKwlHUjMxCQkJQ3VycmVudCBkZWJ1ZyBleGNlcHRpb24gZnJhbWUgcG9pbnRlciAKKwkJCQkoX19kZWJ1Z19mcmFtZSkKIAlTQ1IzCQlNTVUJU2F2ZWQgdmFsdWUgb2YgR1IzMQogCiAKLU5vdGUgdGhhdCBkZWJ1ZyBtb2RlIGlzIGFibGUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIGtlcm5lbCdzIGVtdWxhdGVkIGF0b21pYyBvcHMsIHNvIGl0IG11c3QgYmUKLWV4Y2VlZGluZ2x5IGNhcmVmdWwgbm90IHRvIGRvIGFueSB0aGF0IHdvdWxkIGludGVyYWN0IHdpdGggdGhlIG1haW4ga2VybmVsIGluIHRoaXMgcmVnYXJkLiBIZW5jZQotdGhlIGRlYnVnIG1vZGUgY29kZSAoZ2Ric3R1YikgaXMgYWxtb3N0IGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQuIFRoZSBvbmx5IGV4dGVybmFsIGNvZGUgdXNlZCBpcwotdGhlIHNwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KK05vdGUgdGhhdCBkZWJ1ZyBtb2RlIGlzIGFibGUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIGtlcm5lbCdzIGVtdWxhdGVkIGF0b21pYworb3BzLCBzbyBpdCBtdXN0IGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgbm90IHRvIGRvIGFueSB0aGF0IHdvdWxkIGludGVyYWN0Cit3aXRoIHRoZSBtYWluIGtlcm5lbCBpbiB0aGlzIHJlZ2FyZC4gSGVuY2UgdGhlIGRlYnVnIG1vZGUgY29kZSAoZ2Ric3R1YikgaXMKK2FsbW9zdCBjb21wbGV0ZWx5IHNlbGYtY29udGFpbmVkLiBUaGUgb25seSBleHRlcm5hbCBjb2RlIHVzZWQgaXMgdGhlCitzcHJpbnRmIGZhbWlseSBvZiBmdW5jdGlvbnMuCiAKLUZ1dGhlcm1vcmUsIGJyZWFrLlMgaXMgc28gY29tcGxpY2F0ZWQgYmVjYXVzZSBzaW5nbGUtc3RlcCBtb2RlIGRvZXMgbm90IHN3aXRjaCBvZmYgb24gZW50cnkgdG8gYW4KLWV4Y2VwdGlvbi4gVGhhdCBtZWFucyB1bmxlc3MgbWFudWFsbHkgZGlzYWJsZWQsIHNpbmdsZS1zdGVwcGluZyB3aWxsIGJsaXRoZWx5IGdvIG9uIHN0ZXBwaW5nIGludG8KLXRoaW5ncyBsaWtlIGludGVycnVwdHMuIFNlZSBnZGJzdHViLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK0Z1dGhlcm1vcmUsIGJyZWFrLlMgaXMgc28gY29tcGxpY2F0ZWQgYmVjYXVzZSBzaW5nbGUtc3RlcCBtb2RlIGRvZXMgbm90Citzd2l0Y2ggb2ZmIG9uIGVudHJ5IHRvIGFuIGV4Y2VwdGlvbi4gVGhhdCBtZWFucyB1bmxlc3MgbWFudWFsbHkgZGlzYWJsZWQsCitzaW5nbGUtc3RlcHBpbmcgd2lsbCBibGl0aGVseSBnbyBvbiBzdGVwcGluZyBpbnRvIHRoaW5ncyBsaWtlIGludGVycnVwdHMuCitTZWUgZ2Ric3R1Yi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT0KIFZJUlRVQUwgSU5URVJSVVBUIEhBTkRMSU5HCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1CZWNhdXNlIGFjY2Vzc2VzIHRvIHRoZSBQU1IgaXMgc28gc2xvdywgYW5kIHRvIGRpc2FibGUgaW50ZXJydXB0cyB3ZSBoYXZlIHRvIGFjY2VzcyBpdCB0d2ljZSAob25jZQotdG8gcmVhZCBhbmQgb25jZSB0byB3cml0ZSksIHdlIGRvbid0IGFjdHVhbGx5IGRpc2FibGUgaW50ZXJydXB0cyBhdCBhbGwgaWYgd2UgZG9uJ3QgaGF2ZSB0by4gV2hhdAotd2UgZG8gaW5zdGVhZCBpcyB1c2UgdGhlIElDQzIgY29uZGl0aW9uIGNvZGUgZmxhZ3MgdG8gbm90ZSB2aXJ0dWFsIGRpc2FibGVtZW50LCBzdWNoIHRoYXQgaWYgd2UKLXRoZW4gZG8gdGFrZSBhbiBpbnRlcnJ1cHQsIHdlIG5vdGUgdGhlIGZsYWcsIHJlYWxseSBkaXNhYmxlIGludGVycnVwdHMsIHNldCBhbm90aGVyIGZsYWcgYW5kIHJlc3VtZQotZXhlY3V0aW9uIGF0IHRoZSBwb2ludCB0aGUgaW50ZXJydXB0IGhhcHBlbmVkLiBTZXR0aW5nIGNvbmRpdGlvbiBmbGFncyBhcyBhIHNpZGUgZWZmZWN0IG9mIGFuCi1hcml0aG1ldGljIG9yIGxvZ2ljYWwgaW5zdHJ1Y3Rpb24gaXMgcmVhbGx5IGZhc3QuIFRoaXMgdXNlIG9mIHRoZSBJQ0MyIG9ubHkgb2NjdXJzIHdpdGhpbiB0aGUKK0JlY2F1c2UgYWNjZXNzZXMgdG8gdGhlIFBTUiBpcyBzbyBzbG93LCBhbmQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIHdlIGhhdmUKK3RvIGFjY2VzcyBpdCB0d2ljZSAob25jZSB0byByZWFkIGFuZCBvbmNlIHRvIHdyaXRlKSwgd2UgZG9uJ3QgYWN0dWFsbHkKK2Rpc2FibGUgaW50ZXJydXB0cyBhdCBhbGwgaWYgd2UgZG9uJ3QgaGF2ZSB0by4gV2hhdCB3ZSBkbyBpbnN0ZWFkIGlzIHVzZQordGhlIElDQzIgY29uZGl0aW9uIGNvZGUgZmxhZ3MgdG8gbm90ZSB2aXJ0dWFsIGRpc2FibGVtZW50LCBzdWNoIHRoYXQgaWYgd2UKK3RoZW4gZG8gdGFrZSBhbiBpbnRlcnJ1cHQsIHdlIG5vdGUgdGhlIGZsYWcsIHJlYWxseSBkaXNhYmxlIGludGVycnVwdHMsIHNldAorYW5vdGhlciBmbGFnIGFuZCByZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCB0aGUgaW50ZXJydXB0IGhhcHBlbmVkLgorU2V0dGluZyBjb25kaXRpb24gZmxhZ3MgYXMgYSBzaWRlIGVmZmVjdCBvZiBhbiBhcml0aG1ldGljIG9yIGxvZ2ljYWwKK2luc3RydWN0aW9uIGlzIHJlYWxseSBmYXN0LiBUaGlzIHVzZSBvZiB0aGUgSUNDMiBvbmx5IG9jY3VycyB3aXRoaW4gdGhlCiBrZXJuZWwgLSBpdCBkb2VzIG5vdCBhZmZlY3QgdXNlcnNwYWNlLgogCiBUaGUgZmxhZ3Mgd2UgdXNlIGFyZToKIAogICgqKSBDQ1IuSUNDMi5aIFtaZXJvIGZsYWddCiAKLSAgICAgU2V0IHRvIHZpcnR1YWxseSBkaXNhYmxlIGludGVycnVwdHMsIGNsZWFyIHdoZW4gaW50ZXJydXB0cyBhcmUgdmlydHVhbGx5IGVuYWJsZWQuIENhbiBiZQotICAgICBtb2RpZmllZCBieSBsb2dpY2FsIGluc3RydWN0aW9ucyB3aXRob3V0IGFmZmVjdGluZyB0aGUgQ2FycnkgZmxhZy4KKyAgICAgU2V0IHRvIHZpcnR1YWxseSBkaXNhYmxlIGludGVycnVwdHMsIGNsZWFyIHdoZW4gaW50ZXJydXB0cyBhcmUKKyAgICAgdmlydHVhbGx5IGVuYWJsZWQuIENhbiBiZSBtb2RpZmllZCBieSBsb2dpY2FsIGluc3RydWN0aW9ucyB3aXRob3V0CisgICAgIGFmZmVjdGluZyB0aGUgQ2FycnkgZmxhZy4KIAogICgqKSBDQ1IuSUNDMi5DIFtDYXJyeSBmbGFnXQogCkBAIC0xNzYsOCArMTk1LDkgQEAKIAogCUlDQzIuWiBpcyAwLCBJQ0MyLkMgaXMgMS4KIAotICgyKSBBbiBpbnRlcnJ1cHQgb2NjdXJzLiBUaGUgZXhjZXB0aW9uIHByb2xvZ3VlIGV4YW1pbmVzIElDQzIuWiBhbmQgZGV0ZXJtaW5lcyB0aGF0IG5vdGhpbmcgbmVlZHMKLSAgICAgZG9pbmcuIFRoaXMgaXMgZG9uZSBzaW1wbHkgd2l0aCBhbiB1bmxpa2VseSBCRVEgaW5zdHJ1Y3Rpb24uCisgKDIpIEFuIGludGVycnVwdCBvY2N1cnMuIFRoZSBleGNlcHRpb24gcHJvbG9ndWUgZXhhbWluZXMgSUNDMi5aIGFuZAorICAgICBkZXRlcm1pbmVzIHRoYXQgbm90aGluZyBuZWVkcyBkb2luZy4gVGhpcyBpcyBkb25lIHNpbXBseSB3aXRoIGFuCisgICAgIHVubGlrZWx5IEJFUSBpbnN0cnVjdGlvbi4KIAogICgzKSBUaGUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKGxvY2FsX2lycV9kaXNhYmxlKQogCkBAIC0xODcsNDggKzIwNyw1NiBAQAogCiAJSUNDMi5aIHdvdWxkIGJlIHNldCB0byAwLgogCi0gICAgIEEgVElISSAjMiBpbnN0cnVjdGlvbiAodHJhcCAjMiBpZiBjb25kaXRpb24gSEkgLSBaPT0wICYmIEM9PTApIHdvdWxkIGJlIHVzZWQgdG8gdHJhcCBpZgotICAgICBpbnRlcnJ1cHRzIHdlcmUgbm93IHZpcnR1YWxseSBlbmFibGVkLCBidXQgcGh5c2ljYWxseSBkaXNhYmxlZCAtIHdoaWNoIHRoZXkncmUgbm90LCBzbyB0aGUKLSAgICAgdHJhcCBpc24ndCB0YWtlbi4gVGhlIGtlcm5lbCB3b3VsZCB0aGVuIGJlIGJhY2sgdG8gc3RhdGUgKDEpLgorICAgICBBIFRJSEkgIzIgaW5zdHJ1Y3Rpb24gKHRyYXAgIzIgaWYgY29uZGl0aW9uIEhJIC0gWj09MCAmJiBDPT0wKSB3b3VsZAorICAgICBiZSB1c2VkIHRvIHRyYXAgaWYgaW50ZXJydXB0cyB3ZXJlIG5vdyB2aXJ0dWFsbHkgZW5hYmxlZCwgYnV0CisgICAgIHBoeXNpY2FsbHkgZGlzYWJsZWQgLSB3aGljaCB0aGV5J3JlIG5vdCwgc28gdGhlIHRyYXAgaXNuJ3QgdGFrZW4uIFRoZQorICAgICBrZXJuZWwgd291bGQgdGhlbiBiZSBiYWNrIHRvIHN0YXRlICgxKS4KIAotICg1KSBBbiBpbnRlcnJ1cHQgb2NjdXJzLiBUaGUgZXhjZXB0aW9uIHByb2xvZ3VlIGV4YW1pbmVzIElDQzIuWiBhbmQgZGV0ZXJtaW5lcyB0aGF0IHRoZSBpbnRlcnJ1cHQKLSAgICAgc2hvdWxkbid0IGFjdHVhbGx5IGhhdmUgaGFwcGVuZWQuIEl0IGp1bXBzIGFzaWRlLCBhbmQgdGhlcmUgZGlzYWJsZWQgaW50ZXJydXB0cyBieSBzZXR0aW5nCi0gICAgIFBTUi5QSUwgdG8gMTQgYW5kIHRoZW4gaXQgY2xlYXJzIElDQzIuQy4KKyAoNSkgQW4gaW50ZXJydXB0IG9jY3Vycy4gVGhlIGV4Y2VwdGlvbiBwcm9sb2d1ZSBleGFtaW5lcyBJQ0MyLlogYW5kCisgICAgIGRldGVybWluZXMgdGhhdCB0aGUgaW50ZXJydXB0IHNob3VsZG4ndCBhY3R1YWxseSBoYXZlIGhhcHBlbmVkLiBJdAorICAgICBqdW1wcyBhc2lkZSwgYW5kIHRoZXJlIGRpc2FibGVkIGludGVycnVwdHMgYnkgc2V0dGluZyBQU1IuUElMIHRvIDE0CisgICAgIGFuZCB0aGVuIGl0IGNsZWFycyBJQ0MyLkMuCiAKICAoNikgSWYgaW50ZXJydXB0cyB3ZXJlIHRoZW4gc2F2ZWQgYW5kIGRpc2FibGVkIGFnYWluIChsb2NhbF9pcnFfc2F2ZSk6CiAKLQlJQ0MyLlogd291bGQgYmUgc2hpZnRlZCBpbnRvIHRoZSBzYXZlIHZhcmlhYmxlIGFuZCBtYXNrZWQgb2ZmIChnaXZpbmcgYSAxKS4KKwlJQ0MyLlogd291bGQgYmUgc2hpZnRlZCBpbnRvIHRoZSBzYXZlIHZhcmlhYmxlIGFuZCBtYXNrZWQgb2ZmIAorCShnaXZpbmcgYSAxKS4KIAotCUlDQzIuWiB3b3VsZCB0aGVuIGJlIHNldCB0byAxICh0aHVzIHVuY2hhbmdlZCksIGFuZCBJQ0MyLkMgd291bGQgYmUgdW5hZmZlY3RlZCAoaWU6IDApLgorCUlDQzIuWiB3b3VsZCB0aGVuIGJlIHNldCB0byAxICh0aHVzIHVuY2hhbmdlZCksIGFuZCBJQ0MyLkMgd291bGQgYmUKKwl1bmFmZmVjdGVkIChpZTogMCkuCiAKICAoNykgSWYgaW50ZXJydXB0cyB3ZXJlIHRoZW4gcmVzdG9yZWQgZnJvbSBzdGF0ZSAoNikgKGxvY2FsX2lycV9yZXN0b3JlKToKIAotCUlDQzIuWiB3b3VsZCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIHJlc3VsdCBvZiBYT1InaW5nIHRoZSBzYXZlZCB2YWx1ZSAoaWU6IDEpIHdpdGggMSwgd2hpY2gKLQlnaXZlcyBhIHJlc3VsdCBvZiAwIC0gdGh1cyBsZWF2aW5nIElDQzIuWiBzZXQuCisJSUNDMi5aIHdvdWxkIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IG9mIFhPUidpbmcgdGhlIHNhdmVkCisJdmFsdWUgKGllOiAxKSB3aXRoIDEsIHdoaWNoIGdpdmVzIGEgcmVzdWx0IG9mIDAgLSB0aHVzIGxlYXZpbmcKKwlJQ0MyLlogc2V0LgogCiAJSUNDMi5DIHdvdWxkIHJlbWFpbiB1bmFmZmVjdGVkIChpZTogMCkuCiAKLSAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIHdvdWxkIGJlIHVzZWQgdG8gYWdhaW4gYXNzYXkgdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCB0aGlzIHdvdWxkIGRvCi0gICAgIG5vdGhpbmcgYXMgWj09MS4KKyAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIHdvdWxkIGJlIHVzZWQgdG8gYWdhaW4gYXNzYXkgdGhlIGN1cnJlbnQgc3RhdGUsCisgICAgIGJ1dCB0aGlzIHdvdWxkIGRvIG5vdGhpbmcgYXMgWj09MS4KIAogICg4KSBJZiBpbnRlcnJ1cHRzIHdlcmUgdGhlbiBlbmFibGVkIChsb2NhbF9pcnFfZW5hYmxlKToKIAotCUlDQzIuWiB3b3VsZCBiZSBjbGVhcmVkLiBJQ0MyLkMgd291bGQgYmUgbGVmdCB1bmFmZmVjdGVkLiBCb3RoIGZsYWdzIHdvdWxkIG5vdyBiZSAwLgorCUlDQzIuWiB3b3VsZCBiZSBjbGVhcmVkLiBJQ0MyLkMgd291bGQgYmUgbGVmdCB1bmFmZmVjdGVkLiBCb3RoCisJZmxhZ3Mgd291bGQgbm93IGJlIDAuCiAKLSAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIGFnYWluIGlzc3VlZCB0byBhc3NheSB0aGUgY3VycmVudCBzdGF0ZSB3b3VsZCB0aGVuIHRyYXAgYXMgYm90aCBaPT0wCi0gICAgIFtpbnRlcnJ1cHRzIHZpcnR1YWxseSBlbmFibGVkXSBhbmQgQz09MCBbaW50ZXJydXB0cyByZWFsbHkgZGlzYWJsZWRdIHdvdWxkIHRoZW4gYmUgdHJ1ZS4KKyAgICAgQSBUSUhJICMyIGluc3RydWN0aW9uIGFnYWluIGlzc3VlZCB0byBhc3NheSB0aGUgY3VycmVudCBzdGF0ZSB3b3VsZAorICAgICB0aGVuIHRyYXAgYXMgYm90aCBaPT0wIFtpbnRlcnJ1cHRzIHZpcnR1YWxseSBlbmFibGVkXSBhbmQgQz09MAorICAgICBbaW50ZXJydXB0cyByZWFsbHkgZGlzYWJsZWRdIHdvdWxkIHRoZW4gYmUgdHJ1ZS4KIAotICg5KSBUaGUgdHJhcCAjMiBoYW5kbGVyIHdvdWxkIHNpbXBseSBlbmFibGUgaGFyZHdhcmUgaW50ZXJydXB0cyAoc2V0IFBTUi5QSUwgdG8gMCksIHNldCBJQ0MyLkMgdG8KLSAgICAgMSBhbmQgcmV0dXJuLgorICg5KSBUaGUgdHJhcCAjMiBoYW5kbGVyIHdvdWxkIHNpbXBseSBlbmFibGUgaGFyZHdhcmUgaW50ZXJydXB0cyAKKyAgICAgKHNldCBQU1IuUElMIHRvIDApLCBzZXQgSUNDMi5DIHRvIDEgYW5kIHJldHVybi4KIAogKDEwKSBJbW1lZGlhdGVseSB1cG9uIHJldHVybmluZywgdGhlIHBlbmRpbmcgaW50ZXJydXB0IHdvdWxkIGJlIHRha2VuLgogCi0oMTEpIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3b3VsZCB0YWtlIHRoZSBwYXRoIG9mIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlIGludGVycnVwdCAoSUNDMi5aIGlzCi0gICAgIGNsZWFyLCBCRVEgZmFpbHMgYXMgcGVyIHN0ZXAgKDIpKS4KKygxMSkgVGhlIGludGVycnVwdCBoYW5kbGVyIHdvdWxkIHRha2UgdGhlIHBhdGggb2YgYWN0dWFsbHkgcHJvY2Vzc2luZyB0aGUKKyAgICAgaW50ZXJydXB0IChJQ0MyLlogaXMgY2xlYXIsIEJFUSBmYWlscyBhcyBwZXIgc3RlcCAoMikpLgogCi0oMTIpIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3b3VsZCB0aGVuIHNldCBJQ0MyLkMgdG8gMSBzaW5jZSBoYXJkd2FyZSBpbnRlcnJ1cHRzIGFyZSBkZWZpbml0ZWx5Ci0gICAgIGVuYWJsZWQgLSBvciBlbHNlIHRoZSBrZXJuZWwgd291bGRuJ3QgYmUgaGVyZS4KKygxMikgVGhlIGludGVycnVwdCBoYW5kbGVyIHdvdWxkIHRoZW4gc2V0IElDQzIuQyB0byAxIHNpbmNlIGhhcmR3YXJlCisgICAgIGludGVycnVwdHMgYXJlIGRlZmluaXRlbHkgZW5hYmxlZCAtIG9yIGVsc2UgdGhlIGtlcm5lbCB3b3VsZG4ndCBiZSBoZXJlLgogCiAoMTMpIE9uIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhpbmdzIHdvdWxkIGJlIGJhY2sgdG8gc3RhdGUgKDEpLgogCi1UaGlzIHRyYXAgKCMyKSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBrZXJuZWwgbW9kZS4gSW4gdXNlciBtb2RlIGl0IHdpbGwgcmVzdWx0IGluIFNJR0lMTC4KK1RoaXMgdHJhcCAoIzIpIGlzIG9ubHkgYXZhaWxhYmxlIGluIGtlcm5lbCBtb2RlLiBJbiB1c2VyIG1vZGUgaXQgd2lsbAorcmVzdWx0IGluIFNJR0lMTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydAppbmRleCBkOWYyM2MwLi43N2I5OTVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0CkBAIC0xMiwxOCArMTIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICB0ZWxldGV4dCBhZGFwdGVycykKIAogSXQgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKLSAqIFBoaWxpcHMgYWRhcHRlcgotICogaG9tZSBicmV3IHRlbGV0ZXh0IGFkYXB0ZXIKLSAqIFZlbGxlbWFuIEs4MDAwIGFkYXB0ZXIKLSAqIEVMViBhZGFwdGVyCi0gKiBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkcyAoQURNMTAyNSwgQURNMTAzMCwgQURNMTAzMSwgQURNMTAzMikKLSAqIEJhcmNvIExQVC0+RFZJIChLNTgwMDIzNikgYWRhcHRlcgorICogKHR5cGU9MCkgUGhpbGlwcyBhZGFwdGVyCisgKiAodHlwZT0xKSBob21lIGJyZXcgdGVsZXRleHQgYWRhcHRlcgorICogKHR5cGU9MikgVmVsbGVtYW4gSzgwMDAgYWRhcHRlcgorICogKHR5cGU9MykgRUxWIGFkYXB0ZXIKKyAqICh0eXBlPTQpIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgZXZhbHVhdGlvbiBib2FyZAorICogKHR5cGU9NSkgQW5hbG9nIERldmljZXMgZXZhbHVhdGlvbiBib2FyZHM6IEFETTEwMjUsIEFETTEwMzAsIEFETTEwMzEKKyAqICh0eXBlPTYpIEJhcmNvIExQVC0+RFZJIChLNTgwMDIzNikgYWRhcHRlcgogCiBUaGVzZSBkZXZpY2VzIHVzZSBkaWZmZXJlbnQgcGlub3V0IGNvbmZpZ3VyYXRpb25zLCBzbyB5b3UgaGF2ZSB0byB0ZWxsCiB0aGUgZHJpdmVyIHdoYXQgeW91IGhhdmUsIHVzaW5nIHRoZSB0eXBlIG1vZHVsZSBwYXJhbWV0ZXIuIFRoZXJlIGlzIG5vCiB3YXkgdG8gYXV0b2RldGVjdCB0aGUgZGV2aWNlcy4gU3VwcG9ydCBmb3IgZGlmZmVyZW50IHBpbm91dCBjb25maWd1cmF0aW9ucwogY2FuIGJlIGVhc2lseSBhZGRlZCB3aGVuIG5lZWRlZC4KIAorRWFybGllciBrZXJuZWxzIGRlZmF1bHRlZCB0byB0eXBlPTAgKFBoaWxpcHMpLiAgQnV0IG5vdywgaWYgdGhlIHR5cGUKK3BhcmFtZXRlciBpcyBtaXNzaW5nLCB0aGUgZHJpdmVyIHdpbGwgc2ltcGx5IGZhaWwgdG8gaW5pdGlhbGl6ZS4KKwogCiBCdWlsZGluZyB5b3VyIG93biBhZGFwdGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dAppbmRleCA4OGEwMTFjLi5kNTM3YzQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKQEAgLTM2LDEyICszNiwxMiBAQAogCiAgIEFsbCBORVMgYW5kIFNORVMgdXNlIHRoZSBzYW1lIHN5bmNocm9ub3VzIHNlcmlhbCBwcm90b2NvbCwgY2xvY2tlZCBmcm9tCiB0aGUgY29tcHV0ZXIncyBzaWRlIChhbmQgdGh1cyB0aW1pbmcgaW5zZW5zaXRpdmUpLiBUbyBhbGxvdyB1cCB0byA1IE5FUwotYW5kL29yIFNORVMgZ2FtZXBhZHMgY29ubmVjdGVkIHRvIHRoZSBwYXJhbGxlbCBwb3J0IGF0IG9uY2UsIHRoZSBvdXRwdXQKLWxpbmVzIG9mIHRoZSBwYXJhbGxlbCBwb3J0IGFyZSBzaGFyZWQsIHdoaWxlIG9uZSBvZiA1IGF2YWlsYWJsZSBpbnB1dCBsaW5lcwotaXMgYXNzaWduZWQgdG8gZWFjaCBnYW1lcGFkLgorYW5kL29yIFNORVMgZ2FtZXBhZHMgYW5kL29yIFNORVMgbWljZSBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQgYXQgb25jZSwKK3RoZSBvdXRwdXQgbGluZXMgb2YgdGhlIHBhcmFsbGVsIHBvcnQgYXJlIHNoYXJlZCwgd2hpbGUgb25lIG9mIDUgYXZhaWxhYmxlCitpbnB1dCBsaW5lcyBpcyBhc3NpZ25lZCB0byBlYWNoIGdhbWVwYWQuCiAKICAgVGhpcyBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5IHRoZSBnYW1lY29uLmMgZHJpdmVyLCBzbyB0aGF0J3MgdGhlIG9uZQoteW91J2xsIHVzZSBmb3IgTkVTIGFuZCBTTkVTIGdhbWVwYWRzLgoreW91J2xsIHVzZSBmb3IgTkVTLCBTTkVTIGdhbWVwYWRzIGFuZCBTTkVTIG1pY2UuCiAKICAgVGhlIG1haW4gcHJvYmxlbSB3aXRoIFBDIHBhcmFsbGVsIHBvcnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlICs1ViBwb3dlcgogc291cmNlIG9uIGFueSBvZiB0aGVpciBwaW5zLiBTbywgaWYgeW91IHdhbnQgYSByZWxpYWJsZSBzb3VyY2Ugb2YgcG93ZXIKQEAgLTEwNiw3ICsxMDYsNyBAQAogZWl0aGVyIGEgTkVTIG9yIE5FUyBjbG9uZSBhbmQgd2lsbCB3b3JrIHdpdGggdGhpcyBjb25uZWN0aW9uLiBTTkVTIGdhbWVwYWRzCiBhbHNvIHVzZSA1IHdpcmVzLCBidXQgaGF2ZSBtb3JlIGJ1dHRvbnMuIFRoZXkgd2lsbCB3b3JrIGFzIHdlbGwsIG9mIGNvdXJzZS4KIAotUGlub3V0IGZvciBORVMgZ2FtZXBhZHMgICAgICAgICAgICAgICAgIFBpbm91dCBmb3IgU05FUyBnYW1lcGFkcworUGlub3V0IGZvciBORVMgZ2FtZXBhZHMgICAgICAgICAgICAgICAgIFBpbm91dCBmb3IgU05FUyBnYW1lcGFkcyBhbmQgbWljZQogCiAJICAgKy0tLS0+IFBvd2VyICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKIAkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgfCBvICBvICBvICBvIHwgIHggIHggIG8gIHwgMQpAQCAtNDU0LDYgKzQ1NCw3IEBACiAJICA2ICB8IE42NCBwYWQKIAkgIDcgIHwgU29ueSBQU1ggY29udHJvbGxlcgogCSAgOCAgfCBTb255IFBTWCBERFIgY29udHJvbGxlcgorCSAgOSAgfCBTTkVTIG1vdXNlCiAKICAgVGhlIGV4YWN0IHR5cGUgb2YgdGhlIFBTWCBjb250cm9sbGVyIHR5cGUgaXMgYXV0b3Byb2JlZCB3aGVuIHVzZWQgc28KIGhvdCBzd2FwcGluZyBzaG91bGQgd29yayAoYnV0IGlzIG5vdCByZWNvbWVuZGVkKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldCBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE2NGRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0CkBAIC0wLDAgKzEsMjg2IEBACitHaWdhU2V0IDMwN3ggRGV2aWNlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gICBSZXF1aXJlbWVudHMKKyAgICAgLS0tLS0tLS0tLS0tCisxLjEuIEhhcmR3YXJlCisgICAgIC0tLS0tLS0tCisgICAgIFRoaXMgcmVsZWFzZSBzdXBwb3J0cyB0aGUgY29ubmVjdGlvbiBvZiB0aGUgR2lnYXNldCAzMDd4LzQxN3ggZmFtaWx5IG9mCisgICAgIElTRE4gREVDVCBiYXNlcyB2aWEgR2lnYXNldCBNMTAxIERhdGEsIEdpZ2FzZXQgTTEwNSBEYXRhIG9yIGRpcmVjdCBVU0IKKyAgICAgY29ubmVjdGlvbi4gVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSByZXBvcnRlZCB0byBiZSBjb21wYXRpYmxlOgorICAgICAzMDd4LzQxN3g6CisgICAgICAgIEdpZ2FzZXQgU1gyNTVpc2RuCisgICAgICAgIEdpZ2FzZXQgU1gzNTNpc2RuCisgICAgICAgIFNpbnVzIDQ1IFtBQl0gaXNkbiAoRGV1dHNjaGUgVGVsZWtvbSkKKyAgICAgICAgU2ludXMgNzIxWC9YQQorICAgICAgICBWb3ggQ2hpY2FnbyAzOTAgSVNETiAoS1BOIFRlbGVjb20pCisgICAgIE0xMDE6CisgICAgICAgIFNpbnVzIDQ1IERhdGEgMSAoVGVsZWtvbSkKKyAgICAgTTEwNToKKyAgICAgICAgR2lnYXNldCBVU0IgQWRhcHRlciBERUNUCisgICAgICAgIFNpbnVzIDQ1IERhdGEgMiAoVGVsZWtvbSkKKyAgICAgICAgU2ludXMgNzIxIGRhdGEKKyAgICAgICAgQ2hpY2FnbyAzOTAgVVNCIChLUE4pCisgICAgIFNlZSBhbHNvIGh0dHA6Ly93d3cuZXJiemUuaW5mby9zaW51c19naWdhc2V0Lmh0bSBhbmQKKyAgICAgICAgICAgICAgaHR0cDovL2dpZ2FzZXQzMDd4LnNvdXJjZWZvcmdlLm5ldC8KKworICAgICBXZSBoYWQgYWxzbyByZXBvcnRzIGZyb20gdXNlcnMgb2YgR2lnYXNldCBNMTA1IHdobyBjb3VsZCB1c2UgdGhlIGRyaXZlcnMKKyAgICAgd2l0aCBTWCAxMDAgYW5kIENYIDEwMCBJU0ROIGJhc2VzIChvbmx5IGluIHVuaW1vZGVtIG1vZGUsIHNlZSBzZWN0aW9uIDIuNC4pCisgICAgIElmIHlvdSBoYXZlIGFub3RoZXIgZGV2aWNlIHRoYXQgd29ya3Mgd2l0aCBvdXIgZHJpdmVyLCBwbGVhc2UgbGV0IHVzIGtub3cuCisgICAgIEZvciBleGFtcGxlLCBHaWdhc2V0IFNYMjA1aXNkbi9TaW51cyA3MjEgWCBTRSBhbmQgR2lnYXNldCBTWDMwM2lzZG4gYmFzZXMKKyAgICAgYXJlIGp1c3QgdmVyc2lvbnMgd2l0aG91dCBhbnN3ZXJpbmcgbWFjaGluZSBvZiBtb2RlbHMga25vd24gdG8gd29yaywgc28KKyAgICAgdGhleSBzaG91bGQgd29yayBqdXN0IGFzIHdlbGw7IGJ1dCBzbyBmYXIgd2UgYXJlIGxhY2tpbmcgcG9zaXRpdmUgcmVwb3J0cworICAgICBvbiB0aGVzZS4KKworICAgICBDaGFuY2VzIG9mIGdldHRpbmcgYW4gVVNCIGRldmljZSB0byB3b3JrIGFyZSBnb29kIGlmIHRoZSBvdXRwdXQgb2YKKyAgICAgICAgbHN1c2IKKyAgICAgYXQgdGhlIGNvbW1hbmQgbGluZSBjb250YWlucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgSUQgMDY4MTowMDAxCisgICAgICAgIElEIDA2ODE6MDAwMgorICAgICAgICBJRCAwNjgxOjAwMDkKKyAgICAgICAgSUQgMDY4MTowMDIxCisgICAgICAgIElEIDA2ODE6MDAyMgorCisxLjIuIFNvZnR3YXJlCisgICAgIC0tLS0tLS0tCisgICAgIFRoZSBkcml2ZXIgd29ya3Mgd2l0aCBJU0RONGxpbnV4IGFuZCBzbyBjYW4gYmUgdXNlZCB3aXRoIGFueSBzb2Z0d2FyZQorICAgICB3aGljaCBpcyBhYmxlIHRvIHVzZSBJU0RONGxpbnV4IGZvciBJU0ROIGNvbm5lY3Rpb25zICh2b2ljZSBvciBkYXRhKS4KKyAgICAgQ0FQSTRMaW51eCBzdXBwb3J0IGlzIHBsYW5uZWQgYnV0IG5vdCB5ZXQgYXZhaWxhYmxlLgorCisgICAgIFRoZXJlIGFyZSBzb21lIHVzZXIgc3BhY2UgdG9vbHMgYXZhaWxhYmxlIGF0CisgICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2lnYXNldDMwN3gvCisgICAgIHdoaWNoIHByb3ZpZGUgYWNjZXNzIHRvIGFkZGl0aW9uYWwgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9ucyBsaWtlIFNNUywKKyAgICAgcGhvbmVib29rIG9yIGNhbGwgam91cm5hbC4KKworCisyLiAgIEhvdyB0byB1c2UgdGhlIGRyaXZlcgorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuMS4gTW9kdWxlcworICAgICAtLS0tLS0tCisgICAgIFRvIGdldCB0aGUgZGV2aWNlIHdvcmtpbmcsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIHByb3BlciBrZXJuZWwgbW9kdWxlLiBZb3UKKyAgICAgY2FuIGRvIHRoaXMgdXNpbmcKKyAgICAgICAgIG1vZHByb2JlIG1vZHVsZW5hbWUKKyAgICAgd2hlcmUgbW9kdWxlbmFtZSBpcyB1c2JfZ2lnYXNldCAoTTEwNSkgb3IgYmFzX2dpZ2FzZXQgKGRpcmVjdCBVU0IKKyAgICAgY29ubmVjdGlvbiB0byB0aGUgYmFzZSkuCisKKzIuMi4gRGV2aWNlIG5vZGVzIGZvciB1c2VyIHNwYWNlIHByb2dyYW1zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBUaGUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHVzZXIgc3BhY2UgKGVnLiBieSB0aGUgdXNlciBzcGFjZSB0b29scworICAgICBtZW50aW9uZWQgaW4gMS4yLikgdGhyb3VnaCB0aGUgZGV2aWNlIG5vZGVzOgorCisgICAgIC0gL2Rldi90dHlHVTAgZm9yIE0xMDUgKFVTQiBkYXRhIGJveGVzKQorICAgICAtIC9kZXYvdHR5R0IwIGZvciB0aGUgYmFzZSBkcml2ZXIgKGRpcmVjdCBVU0IgY29ubmVjdGlvbikKKworICAgICBZb3UgY2FuIGFsc28gc2VsZWN0IGEgImRlZmF1bHQgZGV2aWNlIiB3aGljaCBpcyB1c2VkIGJ5IHRoZSBmcm9udGVuZHMgd2hlbgorICAgICBubyBkZXZpY2Ugbm9kZSBpcyBnaXZlbiBhcyBwYXJhbWV0ZXIsIGJ5IGNyZWF0aW5nIGEgc3ltbGluayAvZGV2L3R0eUcgdG8KKyAgICAgb25lIG9mIHRoZW0sIGVnLjoKKworICAgICAgICBsbiAtcyAvZGV2L3R0eUdCMCAvZGV2L3R0eUcKKworMi4zLiBJU0RONGxpbnV4CisgICAgIC0tLS0tLS0tLS0KKyAgICAgVGhpcyBpcyB0aGUgIm5vcm1hbCIgbW9kZSBvZiBvcGVyYXRpb24uIEFmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZSB5b3UgY2FuCisgICAgIHNldCB1cCB0aGUgSVNETiBzeXN0ZW0ganVzdCBhcyB5b3UnZCBkbyB3aXRoIGFueSBJU0ROIGNhcmQuCisgICAgIFlvdXIgZGlzdHJpYnV0aW9uIHNob3VsZCBwcm92aWRlIHNvbWUgY29uZmlndXJhdGlvbiB1dGlsaXR5LgorICAgICBJZiBub3QsIHlvdSBjYW4gdXNlIHNvbWUgSE9XVE9zIGxpa2UKKyAgICAgICAgIGh0dHA6Ly93d3cubGludXhoYXZlbi5kZS9kbGhwL0hPV1RPL0RFLUlTRE4tSE9XVE8tNS5odG1sCisgICAgIElmIHRoaXMgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHlvdSBoYXZlIHNvbWUgcmVjZW50IGRldmljZSBsaWtlIFNYMTAwIHdoZXJlCisgICAgIGRlYnVnIG91dHB1dCAoc2VlIHNlY3Rpb24gMy4yLikgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhpcyB3aGVuIGRpYWxpbmcKKyAgICAgICAgIENNRCBSZWNlaXZlZDogRVJST1IKKyAgICAgICAgIEF2YWlsYWJsZSBQYXJhbXM6IDAKKyAgICAgICAgIENvbm5lY3Rpb24gU3RhdGU6IDAsIFJlc3BvbnNlOiAtMQorICAgICAgICAgZ2lnYXNldF9wcm9jZXNzX3Jlc3BvbnNlOiByZXNwX2NvZGUgLTEgaW4gQ29uU3RhdGUgMCAhCisgICAgICAgICBUaW1lb3V0IG9jY3VycmVkCisgICAgIHlvdSBtaWdodCBuZWVkIHRvIHVzZSB1bmltb2RlbSBtb2RlOgorCisyLjQuIFVuaW1vZGVtIG1vZGUKKyAgICAgLS0tLS0tLS0tLS0tLQorICAgICBUaGlzIGlzIG5lZWRlZCBmb3Igc29tZSBkZXZpY2VzIFtlLmcuIFNYMTAwXSBhcyB0aGV5IGhhdmUgcHJvYmxlbXMgd2l0aAorICAgICB0aGUgIm5vcm1hbCIgY29tbWFuZHMuCisKKyAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb21tYW5kIGxpbmUgdG9vbCBnaWdhY29udHIsIHlvdSBjYW4gZW50ZXIKKyAgICAgdW5pbW9kZW0gbW9kZSB1c2luZworICAgICAgICAgZ2lnYWNvbnRyIC0tbW9kZSB1bmltb2RlbQorICAgICBZb3UgY2FuIHN3aXRjaCBiYWNrIHVzaW5nCisgICAgICAgICBnaWdhY29udHIgLS1tb2RlIGlzZG4KKworICAgICBZb3UgY2FuIGFsc28gbG9hZCB0aGUgZHJpdmVyIHVzaW5nIGUuZy4KKyAgICAgICAgIG1vZHByb2JlIHVzYl9naWdhc2V0IHN0YXJ0bW9kZT0wCisgICAgIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIHN0YXJ0aW5nIGluICJpc2RuNGxpbnV4IG1vZGUiLgorCisgICAgIEluIHRoaXMgbW9kZSB0aGUgZGV2aWNlIHdvcmtzIGxpa2UgYSBtb2RlbSBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydAorICAgICAodGhlIC9kZXYvdHR5R1UwLCAuLi4gbWVudGlvbmVkIGFib3ZlKSB3aGljaCB1bmRlcnN0YW5kcyB0aGUgY29tbWFuZHMKKyAgICAgICAgIEFUWiAgICAgICAgICAgICAgICAgaW5pdCwgcmVzZXQKKyAgICAgICAgICAgICA9PiBPSyBvciBFUlJPUgorICAgICAgICAgQVRECisgICAgICAgICBBVERUICAgICAgICAgICAgICAgIGRpYWwKKyAgICAgICAgICAgICA9PiBPSywgQ09OTkVDVCwKKyAgICAgICAgICAgICAgICBCVVNZLAorICAgICAgICAgICAgICAgIE5PIERJQUwgVE9ORSwKKyAgICAgICAgICAgICAgICBOTyBDQVJSSUVSLAorICAgICAgICAgICAgICAgIE5PIEFOU1dFUgorICAgICAgICAgPHBhdXNlPisrKzxwYXVzZT4gICBjaGFuZ2UgdG8gY29tbWFuZCBtb2RlIHdoZW4gY29ubmVjdGVkCisgICAgICAgICBBVEggICAgICAgICAgICAgICAgIGhhbmd1cAorCisgICAgIFlvdSBjYW4gdXNlIHNvbWUgY29uZmlndXJhdGlvbiB0b29sIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHRvIGNvbmZpZ3VyZSB0aGlzCisgICAgICJtb2RlbSIgb3IgY29uZmlndXJlIHBwcGQvd3ZkaWFsIG1hbnVhbGx5LiBUaGVyZSBhcmUgc29tZSBleGFtcGxlIHBwcAorICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjaGF0IHNjcmlwdHMgaW4gdGhlIGdpZ2FzZXQtVkVSU0lPTi9wcHAgZGlyZWN0b3J5LgorICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBVU0IgZHJpdmVycyBhcmUgbm90IGFibGUgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAgY29udHJvbCBsaW5lcyAodGhlIE0xMDUgZHJpdmVyIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBzb21lIHVuZG9jdW1lbnRlZAorICAgICBjb250cm9sIHJlcXVlc3RzLCBpZiB5b3UgcmVhbGx5IG5lZWQgdGhlIGNvbnRyb2wgbGluZXMsIHRob3VnaCkuIFRoaXMgbWVhbnMKKyAgICAgeW91IG11c3QgdXNlICJTdHVwaWQgTW9kZSIgaWYgeW91IGFyZSB1c2luZyB3dmRpYWwgb3IgeW91IHNob3VsZCB1c2UgdGhlCisgICAgIG5vY3J0c2N0cyBvcHRpb24gb2YgcHBwZC4KKyAgICAgWW91IG11c3QgYWxzbyBhc3N1cmUgdGhhdCB0aGUgcHBwX2FzeW5jIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCB0aGUgcGFyYW1ldGVyCisgICAgIGZsYWdfdGltZT0wLiBZb3UgY2FuIGRvIHRoaXMgZS5nLiBieSBhZGRpbmcgYSBsaW5lIGxpa2UKKworICAgICAgICBvcHRpb25zIHBwcF9hc3luYyBmbGFnX3RpbWU9MAorCisgICAgIHRvIC9ldGMvbW9kcHJvYmUuY29uZi4gSWYgeW91ciBkaXN0cmlidXRpb24gaGFzIHNvbWUgbG9jYWwgbW9kdWxlCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCwKKyAgICAgdXNpbmcgdGhhdCBzaG91bGQgYmUgcHJlZmVycmVkLgorCisyLjUuIENhbGwtSUQgKENJRCkgbW9kZQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQ2FsbC1JRHMgYXJlIG51bWJlcnMgdXNlZCB0byB0YWcgY29tbWFuZHMgdG8sIGFuZCByZXNwb25zZXMgZnJvbSwgdGhlCisgICAgIEdpZ2FzZXQgYmFzZSBpbiBvcmRlciB0byBzdXBwb3J0IHRoZSBzaW11bHRhbmVvdXMgaGFuZGxpbmcgb2YgbXVsdGlwbGUKKyAgICAgSVNETiBjYWxscy4gVGhlaXIgdXNlIGNhbiBiZSBlbmFibGVkICgiQ0lEIG1vZGUiKSBvciBkaXNhYmxlZCAoIlVuaW1vZGVtCisgICAgIG1vZGUiKS4gV2l0aG91dCBDYWxsLUlEcyAoaW4gVW5pbW9kZW0gbW9kZSksIG9ubHkgYSB2ZXJ5IGxpbWl0ZWQgc2V0IG9mCisgICAgIGZ1bmN0aW9ucyBpcyBhdmFpbGFibGUuIEl0IGFsbG93cyBvdXRnb2luZyBkYXRhIGNvbm5lY3Rpb25zIG9ubHksIGJ1dAorICAgICBkb2VzIG5vdCBzaWduYWwgaW5jb21pbmcgY2FsbHMgb3Igb3RoZXIgYmFzZSBldmVudHMuCisKKyAgICAgREVDVCBjb3JkbGVzcyBkYXRhIGRldmljZXMgKE0xMHgpIHBlcm1hbmVudGx5IG9jY3VweSB0aGUgY29yZGxlc3MKKyAgICAgY29ubmVjdGlvbiB0byB0aGUgYmFzZSB3aGlsZSBDYWxsLUlEcyBhcmUgYWN0aXZhdGVkLiBBcyB0aGUgR2lnYXNldAorICAgICBiYXNlcyBvbmx5IHN1cHBvcnQgb25lIERFQ1QgZGF0YSBjb25uZWN0aW9uIGF0IGEgdGltZSwgdGhpcyBwcmV2ZW50cworICAgICBvdGhlciBERUNUIGNvcmRsZXNzIGRhdGEgZGV2aWNlcyBmcm9tIGFjY2Vzc2luZyB0aGUgYmFzZS4KKworICAgICBEdXJpbmcgYWN0aXZlIG9wZXJhdGlvbiwgdGhlIGRyaXZlciBzd2l0Y2hlcyB0byB0aGUgbmVjZXNzYXJ5IG1vZGUKKyAgICAgYXV0b21hdGljYWxseS4gSG93ZXZlciwgZm9yIHRoZSByZWFzb25zIGFib3ZlLCB0aGUgbW9kZSBjaG9zZW4gd2hlbgorICAgICB0aGUgZGV2aWNlIGlzIG5vdCBpbiB1c2UgKGlkbGUpIGNhbiBiZSBzZWxlY3RlZCBieSB0aGUgdXNlci4KKyAgICAgLSBJZiB5b3Ugd2FudCB0byByZWNlaXZlIGluY29taW5nIGNhbGxzLCB5b3UgY2FuIHVzZSB0aGUgZGVmYXVsdAorICAgICAgIHNldHRpbmdzIChDSUQgbW9kZSkuCisgICAgIC0gSWYgeW91IGhhdmUgc2V2ZXJhbCBERUNUIGRhdGEgZGV2aWNlcyAoTTEweCkgd2hpY2ggeW91IHdhbnQgdG8gdXNlCisgICAgICAgaW4gdHVybiwgc2VsZWN0IFVuaW1vZGVtIG1vZGUgYnkgcGFzc2luZyB0aGUgcGFyYW1ldGVyICJjaWRtb2RlPTAiIHRvCisgICAgICAgdGhlIGRyaXZlciAoIm1vZHByb2JlIHVzYl9naWdhc2V0IGNpZG1vZGU9MCIgb3IgbW9kcHJvYmUuY29uZikuCisKKyAgICAgSWYgeW91IHdhbnQgYm90aCBvZiB0aGVzZSBhdCBvbmNlLCB5b3UgYXJlIG91dCBvZiBsdWNrLgorCisgICAgIFlvdSBjYW4gYWxzbyB1c2UgL3N5cy9tb2R1bGUvPG5hbWU+L3BhcmFtZXRlcnMvY2lkbW9kZSBmb3IgY2hhbmdpbmcKKyAgICAgdGhlIENJRCBtb2RlIHNldHRpbmcgKDxuYW1lPiBpcyB1c2JfZ2lnYXNldCBvciBiYXNfZ2lnYXNldCkuCisKKworMy4gICBUcm91Ymxlc2hvb3RpbmcKKyAgICAgLS0tLS0tLS0tLS0tLS0tCiszLjEuIFNvbHV0aW9ucyB0byBmcmVxdWVudGx5IHJlcG9ydGVkIHByb2JsZW1zCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdSBoYXZlIGEgc2xvdyBwcm92aWRlciBhbmQgaXNkbjRsaW51eCBnaXZlcyB1cCBkaWFsaW5nIHRvbyBlYXJseS4KKyAgICAgU29sdXRpb246CisgICAgICAgIExvYWQgdGhlIGlzZG4gbW9kdWxlIHVzaW5nIHRoZSBkaWFsdGltZW91dCBvcHRpb24uIFlvdSBjYW4gZG8gdGhpcyBlLmcuCisgICAgICAgIGJ5IGFkZGluZyBhIGxpbmUgbGlrZQorCisgICAgICAgICAgIG9wdGlvbnMgaXNkbiBkaWFsdGltZW91dD0xNQorCisgICAgICAgIHRvIC9ldGMvbW9kcHJvYmUuY29uZi4gSWYgeW91ciBkaXN0cmlidXRpb24gaGFzIHNvbWUgbG9jYWwgbW9kdWxlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCwKKyAgICAgICAgdXNpbmcgdGhhdCBzaG91bGQgYmUgcHJlZmVycmVkLgorCisgICAgIFByb2JsZW06CisgICAgICAgIFlvdXIgaXNkbiBzY3JpcHQgYWJvcnRzIHdpdGggYSBtZXNzYWdlIGFib3V0IGlzZG5sb2cuCisgICAgIFNvbHV0aW9uOgorICAgICAgICBUcnkgZGVhY3RpdmF0aW5nIChvciBjb21tZW50aW5nIG91dCkgaXNkbmxvZy4gVGhpcyBkcml2ZXIgZG9lcyBub3QKKyAgICAgICAgc3VwcG9ydCBpdC4KKworICAgICBQcm9ibGVtOgorICAgICAgICBZb3UgaGF2ZSB0d28gb3IgbW9yZSBERUNUIGRhdGEgYWRhcHRlcnMgKE0xMDEvTTEwNSkgYW5kIG9ubHkgdGhlCisgICAgICAgIGZpcnN0IG9uZSB5b3UgdHVybiBvbiB3b3Jrcy4KKyAgICAgU29sdXRpb246CisgICAgICAgIFNlbGVjdCBVbmltb2RlbSBtb2RlIGZvciBhbGwgREVDVCBkYXRhIGFkYXB0ZXJzLiAoc2VlIHNlY3Rpb24gMi40LikKKworMy4yLiBUZWxsaW5nIHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSAiR2lnYXNldCBkZWJ1Z2dpbmciIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIG9wdGlvbiAoQ09ORklHX0dJR0FTRVRfREVCVUcpIGdpdmVzIGl0IHRoZSBhYmlsaXR5IHRvIHByb2R1Y2UgYWRkaXRpb25hbAorICAgICBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhlIGRyaXZlciBwcm9kdWNlcyBieQorICAgICB3cml0aW5nIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHRvIC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZywgZS5nLgorICAgICAgICBlY2hvIDAgPiAvc3lzL21vZHVsZS9naWdhc2V0L3BhcmFtZXRlcnMvZGVidWcKKyAgICAgc3dpdGNoZXMgb2ZmIGRlYnVnZ2luZyBvdXRwdXQgY29tcGxldGVseSwKKyAgICAgICAgZWNobyAweDEwYTAyMCA+IC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZworICAgICBlbmFibGVzIHRoZSBzdGFuZGFyZCBzZXQgb2YgZGVidWdnaW5nIG91dHB1dCBtZXNzYWdlcy4gVGhlc2UgdmFsdWVzIGFyZQorICAgICBiaXQgcGF0dGVybnMgd2hlcmUgZXZlcnkgYml0IGNvbnRyb2xzIGEgY2VydGFpbiB0eXBlIG9mIGRlYnVnZ2luZyBvdXRwdXQuCisgICAgIFNlZSB0aGUgY29uc3RhbnRzIERFQlVHXyogaW4gdGhlIHNvdXJjZSBmaWxlIGdpZ2FzZXQuaCBmb3IgZGV0YWlscy4KKworICAgICBUaGUgaW5pdGlhbCB2YWx1ZSBjYW4gYmUgc2V0IHVzaW5nIHRoZSBkZWJ1ZyBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIHRoZQorICAgICBtb2R1bGUgImdpZ2FzZXQiLCBlLmcuIGJ5IGFkZGluZyBhIGxpbmUKKyAgICAgICAgb3B0aW9ucyBnaWdhc2V0IGRlYnVnPTAKKyAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLCAuLi4KKworICAgICBHZW5lcmF0ZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZAorICAgICAtIGFzIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgZG1lc2cKKyAgICAgLSBpbiBzeXN0ZW0gbG9nIGZpbGVzIHdyaXR0ZW4gYnkgeW91ciBzeXNsb2cgZGFlbW9uLCB1c3VhbGx5CisgICAgICAgaW4gL3Zhci9sb2cvLCBlLmcuIC92YXIvbG9nL21lc3NhZ2VzLgorCiszLjMuIFJlcG9ydGluZyBwcm9ibGVtcyBhbmQgYnVncworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgSWYgeW91IGNhbid0IHNvbHZlIHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciBvbiB5b3VyIG93biwgZmVlbCBmcmVlIHRvCisgICAgIHVzZSBvbmUgb2YgdGhlIGZvcnVtcywgYnVnIHRyYWNrZXJzLCBvciBtYWlsaW5nIGxpc3RzIG9uCisgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4CisgICAgIG9yIHdyaXRlIGFuIGVsZWN0cm9uaWMgbWFpbCB0byB0aGUgbWFpbnRhaW5lcnMuCisKKyAgICAgVHJ5IHRvIHByb3ZpZGUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSwgc3VjaCBhcworICAgICAtIGRpc3RyaWJ1dGlvbgorICAgICAtIGtlcm5lbCB2ZXJzaW9uICh1bmFtZSAtcikKKyAgICAgLSBnY2MgdmVyc2lvbiAoZ2NjIC0tdmVyc2lvbikKKyAgICAgLSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgKHVuYW1lIC1tLCAuLi4pCisgICAgIC0gdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiBvZiB5b3VyIGRldmljZSAoYmFzZSBhbmQgd2lyZWxlc3MgbW9kdWxlLAorICAgICAgIGlmIGFueSkKKyAgICAgLSBvdXRwdXQgb2YgImxzdXNiIC12IiAoaWYgdXNpbmcgYW4gVVNCIGRldmljZSkKKyAgICAgLSBlcnJvciBtZXNzYWdlcworICAgICAtIHJlbGV2YW50IHN5c3RlbSBsb2cgbWVzc2FnZXMgKGl0IHdvdWxkIGhlbHAgaWYgeW91IGFjdGl2YXRlIGRlYnVnCisgICAgICAgb3V0cHV0IGFzIGRlc2NyaWJlZCBpbiAzLjIuKQorCisgICAgIEZvciBoZWxwIHdpdGggZ2VuZXJhbCBjb25maWd1cmF0aW9uIHByb2JsZW1zIG5vdCBzcGVjaWZpYyB0byBvdXIgZHJpdmVyLAorICAgICBzdWNoIGFzIGlzZG40bGludXggYW5kIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpc3N1ZXMsIHBsZWFzZSByZWZlciB0byB0aGUKKyAgICAgYXBwcm9wcmlhdGUgZm9ydW1zIGFuZCBuZXdzZ3JvdXBzLgorCiszLjQuIFJlcG9ydGluZyBwcm9ibGVtIHNvbHV0aW9ucworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgSWYgeW91IHNvbHZlZCBhIHByb2JsZW0gd2l0aCBvdXIgZHJpdmVycywgd3JvdGUgc3RhcnR1cCBzY3JpcHRzIGZvciB5b3VyCisgICAgIGRpc3RyaWJ1dGlvbiwgLi4uIGZlZWwgZnJlZSB0byBjb250YWN0IHVzICh1c2luZyBvbmUgb2YgdGhlIHBsYWNlcworICAgICBtZW50aW9uZWQgaW4gMy4zLikuIFdlJ2QgbGlrZSB0byBhZGQgc2NyaXB0cywgaGludHMsIGRvY3VtZW50YXRpb24KKyAgICAgdG8gdGhlIGRyaXZlciBhbmQvb3IgdGhlIHByb2plY3Qgd2ViIHBhZ2UuCisKKworNC4gICBMaW5rcywgb3RoZXIgc29mdHdhcmUKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIC0gU291cmNlZm9yZ2UgcHJvamVjdCBkZXZlbG9waW5nIHRoaXMgZHJpdmVyIGFuZCBhc3NvY2lhdGVkIHRvb2xzCisgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dpZ2FzZXQzMDd4CisgICAgIC0gWWFob28hIEdyb3VwIG9uIHRoZSBTaWVtZW5zIEdpZ2FzZXQgZmFtaWx5IG9mIGRldmljZXMKKyAgICAgICAgIGh0dHA6Ly9kZS5ncm91cHMueWFob28uY29tL2dyb3VwL1NpZW1lbnMtR2lnYXNldAorICAgICAtIFNpZW1lbnMgR2lnYXNldC9ULVNpbnVzIGNvbXBhdGliaWxpdHkgdGFibGUKKyAgICAgICAgIGh0dHA6Ly93d3cuZXJiemUuaW5mby9zaW51c19naWdhc2V0Lmh0bQorCisKKzUuICAgQ3JlZGl0cworICAgICAtLS0tLS0tCisgICAgIFRoYW5rcyB0bworCisgICAgIEthcnN0ZW4gS2VpbAorICAgICAgICBmb3IgaGlzIGhlbHAgd2l0aCBpc2RuNGxpbnV4CisgICAgIERldGkgRmxpZWdsCisgICAgICAgIGZvciBoaXMgYmFzZSBkcml2ZXIgY29kZQorICAgICBEZW5uaXMgRGlldHJpY2gKKyAgICAgICAgZm9yIGhpcyBrZXJuZWwgMi42IHBhdGNoZXMKKyAgICAgQW5kcmVhcyBSdW1tZWwKKyAgICAgICAgZm9yIGhpcyB3b3JrIGFuZCBsb2dzIHRvIGdldCB1bmltb2RlbSBtb2RlIHdvcmtpbmcKKyAgICAgQW5kcmVhcyBEZWdlcnQKKyAgICAgICAgZm9yIGhpcyBsb2dzIGFuZCBwYXRjaGVzIHRvIGdldCBjeCAxMDAgd29ya2luZworICAgICBEaWV0cmljaCBGZWlzdAorICAgICAgICBmb3IgaGlzIGdlbmVyb3VzIGRvbmF0aW9uIG9mIG9uZSBNMTA1IGFuZCB0d28gTTEwMSBjb3JkbGVzcyBhZGFwdGVycworICAgICBDaHJpc3RvcGggU2Nod2VlcnMKKyAgICAgICAgZm9yIGhpcyBnZW5lcm91cyBkb25hdGlvbiBvZiBhIE0zNCBkZXZpY2UKKworICAgICBhbmQgYWxsIHRoZSBvdGhlciBwZW9wbGUgd2hvIHNlbnQgbG9ncyBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKaW5kZXggZmNjY2YyNC4uNjFmYzA3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKQEAgLTQ0LDcgKzQ0LDcgQEAKIG9mIG1vZHVsZXMuIFRoZSBhdXRob3Igb2YgYW4gZXh0ZXJuYWwgbW9kdWxlcyBzaG91bGQgc3VwcGx5CiBhIG1ha2VmaWxlIHRoYXQgaGlkZXMgbW9zdCBvZiB0aGUgY29tcGxleGl0eSBzbyBvbmUgb25seSBoYXMgdG8gdHlwZQogJ21ha2UnIHRvIGJ1aWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KLWNoYXB0ZXIgpC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KK2NoYXB0ZXIgNCwgIkNyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZSIuCiAKIAogPT09IDIuIEhvdyB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGY4Y2I1NWMuLmIzYTYxODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xLDQgKzEsNCBAQAotRmVicnVhcnkgMjAwMyAgICAgICAgICAgICBLZXJuZWwgUGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgIHYyLjUuNTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsIFBhcmFtZXRlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIGZvbGxvd2luZyBpcyBhIGNvbnNvbGlkYXRlZCBsaXN0IG9mIHRoZSBrZXJuZWwgcGFyYW1ldGVycyBhcyBpbXBsZW1lbnRlZApAQCAtMTcsOSArMTcsMTcgQEAKIAogCXVzYmNvcmUuYmxpbmtlbmxpZ2h0cz0xCiAKLVRoZSB0ZXh0IGluIHNxdWFyZSBicmFja2V0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhlCi1yZXN0cmljdGlvbnMgb24gdGhlIGtlcm5lbCBmb3IgdGhlIHNhaWQga2VybmVsIHBhcmFtZXRlciB0byBiZSB2YWxpZC4gVGhlCi1yZXN0cmljdGlvbnMgcmVmZXJyZWQgdG8gYXJlIHRoYXQgdGhlIHJlbGV2YW50IG9wdGlvbiBpcyB2YWxpZCBpZjoKK1RoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBlbnRpcmVseSB1cCB0byBkYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBUaGUgY29tbWFuZAorIm1vZGluZm8gLXAgJHttb2R1bGVuYW1lfSIgc2hvd3MgYSBjdXJyZW50IGxpc3Qgb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBsb2FkYWJsZQorbW9kdWxlLiBMb2FkYWJsZSBtb2R1bGVzLCBhZnRlciBiZWluZyBsb2FkZWQgaW50byB0aGUgcnVubmluZyBrZXJuZWwsIGFsc28KK3JldmVhbCB0aGVpciBwYXJhbWV0ZXJzIGluIC9zeXMvbW9kdWxlLyR7bW9kdWxlbmFtZX0vcGFyYW1ldGVycy8uIFNvbWUgb2YgdGhlc2UKK3BhcmFtZXRlcnMgbWF5IGJlIGNoYW5nZWQgYXQgcnVudGltZSBieSB0aGUgY29tbWFuZAorImVjaG8gLW4gJHt2YWx1ZX0gPiAvc3lzL21vZHVsZS8ke21vZHVsZW5hbWV9L3BhcmFtZXRlcnMvJHtwYXJtfSIuCisKK1RoZSBwYXJhbWV0ZXJzIGxpc3RlZCBiZWxvdyBhcmUgb25seSB2YWxpZCBpZiBjZXJ0YWluIGtlcm5lbCBidWlsZCBvcHRpb25zIHdlcmUKK2VuYWJsZWQgYW5kIGlmIHJlc3BlY3RpdmUgaGFyZHdhcmUgaXMgcHJlc2VudC4gVGhlIHRleHQgaW4gc3F1YXJlIGJyYWNrZXRzIGF0Cit0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZGVzY3JpcHRpb24gc3RhdGVzIHRoZSByZXN0cmljdGlvbnMgd2l0aGluIHdoaWNoIGEKK3BhcmFtZXRlciBpcyBhcHBsaWNhYmxlOgogCiAJQUNQSQlBQ1BJIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlBTFNBCUFMU0Egc291bmQgc3VwcG9ydCBpcyBlbmFibGVkLgpAQCAtMTA0NiwxMCArMTA1NCwxMCBAQAogCW5vbHRsYnMJCVtQUENdIERvIG5vdCB1c2UgbGFyZ2UgcGFnZS90bGIgZW50cmllcyBmb3Iga2VybmVsCiAJCQlsb3dtZW0gbWFwcGluZyBvbiBQUEM0MHguCiAKLQlub21jZQkJW0lBLTMyXSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbgotCiAJbm9tY2EJCVtJQS02NF0gRGlzYWJsZSBtYWNoaW5lIGNoZWNrIGFib3J0IGhhbmRsaW5nCiAKKwlub21jZQkJW0lBLTMyXSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbgorCiAJbm9yZXNpZHVhbAlbUFBDXSBEb24ndCB1c2UgcmVzaWR1YWwgZGF0YSBvbiBQUmVQIG1hY2hpbmVzLgogCiAJbm9yZXN1bWUJW1NXU1VTUF0gRGlzYWJsZXMgcmVzdW1lIGFuZCByZXN0b3JlcyBvcmlnaW5hbCBzd2FwCkBAIC0xNjgyLDIwICsxNjkwLDYgQEAKIAogCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1DaGFuZ2Vsb2c6Ci0KLTIwMDAtMDYtPz8JTXIuIFVua25vd24KLQlUaGUgbGFzdCBrbm93biB1cGRhdGUgKGZvciAyLjQuMCkgLSB0aGUgY2hhbmdlbG9nIHdhcyBub3Qga2VwdCBiZWZvcmUuCi0KLTIwMDItMTEtMjQJUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KLQkJUmFuZHkgRHVubGFwIDxyYW5keS5kdW5sYXBAdmVyaXpvbi5uZXQ+Ci0JVXBkYXRlIGZvciAyLjUuNDksIGRlc2NyaXB0aW9uIGZvciBtb3N0IG9mIHRoZSBvcHRpb25zIGludHJvZHVjZWQsCi0JcmVmZXJlbmNlcyB0byBvdGhlciBkb2N1bWVudGF0aW9uIChDIGZpbGVzLCBSRUFETUVzLCAuLiksIGFkZGVkIFMzOTAsCi0JUFBDLCBTUEFSQywgTVRELCBBTFNBIGFuZCBPU1MgY2F0ZWdvcnkuIE1pbm9yIGNvcnJlY3Rpb25zIGFuZAotCXJlZm9ybWF0dGluZy4KLQotMjAwNS0xMC0xOQlSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgotCUxvdHMgb2YgdHlwb3MsIHdoaXRlc3BhY2UsIHNvbWUgcmVmb3JtYXR0aW5nLgogCiBUT0RPOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CmluZGV4IGIxOGUyMTYuLjU2OTZlODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CkBAIC05MTksMTEgKzkxOSwxMSBAQAogICAgIGludCBzZXR0bGVfdGltZSA9IDYwOwogCiAgICAgLyogUGFyc2UgdGhlIHNpbXBsZSBjb21tYW5kLWxpbmUgKi8KLSAgICBpZiAoYWMgPT0gMikKLQlkaXNrID0gYXZbMV07Ci0gICAgZWxzZSBpZiAoYWMgPT0gNCkgewotCXNldHRsZV90aW1lID0gYXRvaShhdlsyXSk7Ci0JZGlzayA9IGF2WzNdOworICAgIGlmIChhcmdjID09IDIpCisJZGlzayA9IGFyZ3ZbMV07CisgICAgZWxzZSBpZiAoYXJnYyA9PSA0KSB7CisJc2V0dGxlX3RpbWUgPSBhdG9pKGFyZ3ZbMl0pOworCWRpc2sgPSBhcmd2WzNdOwogICAgIH0gZWxzZQogCXVzYWdlKCk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAppbmRleCBmODU1MDMxLi40NzEwODQ1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dApAQCAtMTksNiArMTksNyBAQAogICAgICAtIENvbnRyb2wgZGVwZW5kZW5jaWVzLgogICAgICAtIFNNUCBiYXJyaWVyIHBhaXJpbmcuCiAgICAgIC0gRXhhbXBsZXMgb2YgbWVtb3J5IGJhcnJpZXIgc2VxdWVuY2VzLgorICAgICAtIFJlYWQgbWVtb3J5IGJhcnJpZXJzIHZzIGxvYWQgc3BlY3VsYXRpb24uCiAKICAoKikgRXhwbGljaXQga2VybmVsIGJhcnJpZXJzLgogCkBAIC0yNDgsNyArMjQ5LDcgQEAKICAgICAgd2UgbWF5IGdldCBlaXRoZXIgb2Y6CiAKIAlTVE9SRSAqQSA9IFg7IFkgPSBMT0FEICpBOwotCVNUT1JFICpBID0gWTsKKwlTVE9SRSAqQSA9IFkgPSBYOwogCiAKID09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM0NCw5ICszNDUsMTIgQEAKIAogICg0KSBHZW5lcmFsIG1lbW9yeSBiYXJyaWVycy4KIAotICAgICBBIGdlbmVyYWwgbWVtb3J5IGJhcnJpZXIgaXMgYSBjb21iaW5hdGlvbiBvZiBib3RoIGEgcmVhZCBtZW1vcnkgYmFycmllcgotICAgICBhbmQgYSB3cml0ZSBtZW1vcnkgYmFycmllci4gIEl0IGlzIGEgcGFydGlhbCBvcmRlcmluZyBvdmVyIGJvdGggbG9hZHMgYW5kCi0gICAgIHN0b3Jlcy4KKyAgICAgQSBnZW5lcmFsIG1lbW9yeSBiYXJyaWVyIGdpdmVzIGEgZ3VhcmFudGVlIHRoYXQgYWxsIHRoZSBMT0FEIGFuZCBTVE9SRQorICAgICBvcGVyYXRpb25zIHNwZWNpZmllZCBiZWZvcmUgdGhlIGJhcnJpZXIgd2lsbCBhcHBlYXIgdG8gaGFwcGVuIGJlZm9yZSBhbGwKKyAgICAgdGhlIExPQUQgYW5kIFNUT1JFIG9wZXJhdGlvbnMgc3BlY2lmaWVkIGFmdGVyIHRoZSBiYXJyaWVyIHdpdGggcmVzcGVjdCB0bworICAgICB0aGUgb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLgorCisgICAgIEEgZ2VuZXJhbCBtZW1vcnkgYmFycmllciBpcyBhIHBhcnRpYWwgb3JkZXJpbmcgb3ZlciBib3RoIGxvYWRzIGFuZCBzdG9yZXMuCiAKICAgICAgR2VuZXJhbCBtZW1vcnkgYmFycmllcnMgaW1wbHkgYm90aCByZWFkIGFuZCB3cml0ZSBtZW1vcnkgYmFycmllcnMsIGFuZCBzbwogICAgICBjYW4gc3Vic3RpdHV0ZSBmb3IgZWl0aGVyLgpAQCAtNTQ2LDkgKzU1MCw5IEBACiAJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQogCWEgPSAxOwogCTx3cml0ZSBiYXJyaWVyPgotCWIgPSAyOwkJeCA9IGE7CisJYiA9IDI7CQl4ID0gYjsKIAkJCTxyZWFkIGJhcnJpZXI+Ci0JCQl5ID0gYjsKKwkJCXkgPSBhOwogCiBPcjoKIApAQCAtNTYzLDYgKzU2NywxOCBAQAogQmFzaWNhbGx5LCB0aGUgcmVhZCBiYXJyaWVyIGFsd2F5cyBoYXMgdG8gYmUgdGhlcmUsIGV2ZW4gdGhvdWdoIGl0IGNhbiBiZSBvZgogdGhlICJ3ZWFrZXIiIHR5cGUuCiAKK1shXSBOb3RlIHRoYXQgdGhlIHN0b3JlcyBiZWZvcmUgdGhlIHdyaXRlIGJhcnJpZXIgd291bGQgbm9ybWFsbHkgYmUgZXhwZWN0ZWQgdG8KK21hdGNoIHRoZSBsb2FkcyBhZnRlciB0aGUgcmVhZCBiYXJyaWVyIG9yIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyLCBhbmQgdmljZQordmVyc2E6CisKKwlDUFUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVSAyCisJPT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT0KKwlhID0gMTsgICAgICAgICAgIH0tLS0tICAgLS0tPnsgIHYgPSBjCisJYiA9IDI7ICAgICAgICAgICB9ICAgIFwgLyAgICB7ICB3ID0gZAorCTx3cml0ZSBiYXJyaWVyPiAgICAgICAgXCAgICAgICAgPHJlYWQgYmFycmllcj4KKwljID0gMzsgICAgICAgICAgIH0gICAgLyBcICAgIHsgIHggPSBhOworCWQgPSA0OyAgICAgICAgICAgfS0tLS0gICAtLS0+eyAgeSA9IGI7CisKIAogRVhBTVBMRVMgT0YgTUVNT1JZIEJBUlJJRVIgU0VRVUVOQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYwMCw4ICs2MTYsOCBAQAogCXwgICAgICAgfCAgICAgICArLS0tLS0tKwogCSstLS0tLS0tKyAgICAgICA6ICAgICAgOgogCSAgICAgICAgICAgICAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgIHwgU2VxdWVuY2UgaW4gd2hpY2ggc3RvcmVzIGNvbW1pdHRlZCB0byBtZW1vcnkgc3lzdGVtCi0JICAgICAgICAgICAgICAgICAgIHwgYnkgQ1BVIDEKKwkgICAgICAgICAgICAgICAgICAgfCBTZXF1ZW5jZSBpbiB3aGljaCBzdG9yZXMgYXJlIGNvbW1pdHRlZCB0byB0aGUKKwkgICAgICAgICAgICAgICAgICAgfCBtZW1vcnkgc3lzdGVtIGJ5IENQVSAxCiAJICAgICAgICAgICAgICAgICAgIFYKIAogCkBAIC02MTAsNiArNjI2LDcgQEAKIAogCUNQVSAxCQkJQ1BVIDIKIAk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEIgPSA3OyBYID0gOTsgWSA9IDg7IEMgPSAmWSB9CiAJU1RPUkUgQSA9IDEKIAlTVE9SRSBCID0gMgogCTx3cml0ZSBiYXJyaWVyPgpAQCAtNjUxLDcgKzY2OCwyMCBAQAogKHdoaWNoIHdvdWxkIGJlIEIpIGNvbWluZyBhZnRlciB0aGUgdGhlIExPQUQgb2YgQy4KIAogSWYsIGhvd2V2ZXIsIGEgZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXIgd2VyZSB0byBiZSBwbGFjZWQgYmV0d2VlbiB0aGUgbG9hZCBvZiBDCi1hbmQgdGhlIGxvYWQgb2YgKkMgKGllOiBCKSBvbiBDUFUgMiwgdGhlbiB0aGUgZm9sbG93aW5nIHdpbGwgb2NjdXI6CithbmQgdGhlIGxvYWQgb2YgKkMgKGllOiBCKSBvbiBDUFUgMjoKKworCUNQVSAxCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEIgPSA3OyBYID0gOTsgWSA9IDg7IEMgPSAmWSB9CisJU1RPUkUgQSA9IDEKKwlTVE9SRSBCID0gMgorCTx3cml0ZSBiYXJyaWVyPgorCVNUT1JFIEMgPSAmQgkJTE9BRCBYCisJU1RPUkUgRCA9IDQJCUxPQUQgQyAoZ2V0cyAmQikKKwkJCQk8ZGF0YSBkZXBlbmRlbmN5IGJhcnJpZXI+CisJCQkJTE9BRCAqQyAocmVhZHMgQikKKwordGhlbiB0aGUgZm9sbG93aW5nIHdpbGwgb2NjdXI6CiAKIAkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CiAJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKwpAQCAtNjY5LDE0ICs2OTksMTIgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICA6ICAgICAgIDogICAgICAgfCBDUFUgMiB8CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgfCBYLT45ICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tPnwgQi0+MiAgfCAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCSAgICAgTWFrZXMgc3VyZSBhbGwgZWZmZWN0cyAtLS0+ICAgIGRkZGRkZGRkZGRkZGRkZGRkICAgfCAgICAgICB8Ci0JICAgICBwcmlvciB0byB0aGUgc3RvcmUgb2YgQyAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgIGFyZSBwZXJjZXB0aWJsZSB0byAgICAgICAgICAgICAgICAgfCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgc3VjY2Vzc2l2ZSBsb2FkcyAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgWC0+OSAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgTWFrZXMgc3VyZSBhbGwgZWZmZWN0cyAtLS0+ICAgXCAgIGRkZGRkZGRkZGRkZGRkZGRkICAgfCAgICAgICB8CisJICBwcmlvciB0byB0aGUgc3RvcmUgb2YgQyAgICAgICAgXCAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIGFyZSBwZXJjZXB0aWJsZSB0byAgICAgICAgICAgICAgLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgc3Vic2VxdWVudCBsb2FkcyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKIAogCkBAIC02ODUsNzMgKzcxMywyMzkgQEAKIAogCUNQVSAxCQkJQ1BVIDIKIAk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEEgPSAwLCBCID0gOSB9CiAJU1RPUkUgQT0xCi0JU1RPUkUgQj0yCi0JU1RPUkUgQz0zCiAJPHdyaXRlIGJhcnJpZXI+Ci0JU1RPUkUgRD00Ci0JU1RPUkUgRT01Ci0JCQkJTE9BRCBBCisJU1RPUkUgQj0yCiAJCQkJTE9BRCBCCi0JCQkJTE9BRCBDCi0JCQkJTE9BRCBECi0JCQkJTE9BRCBFCisJCQkJTE9BRCBBCiAKIFdpdGhvdXQgaW50ZXJ2ZW50aW9uLCBDUFUgMiBtYXkgdGhlbiBjaG9vc2UgdG8gcGVyY2VpdmUgdGhlIGV2ZW50cyBvbiBDUFUgMSBpbgogc29tZSBlZmZlY3RpdmVseSByYW5kb20gb3JkZXIsIGRlc3BpdGUgdGhlIHdyaXRlIGJhcnJpZXIgaXNzdWVkIGJ5IENQVSAxOgogCi0JKy0tLS0tLS0rICAgICAgIDogICAgICA6Ci0JfCAgICAgICB8ICAgICAgICstLS0tLS0rCi0JfCAgICAgICB8LS0tLS0tPnwgQz0zICB8IH0KLQl8ICAgICAgIHwgIDogICAgKy0tLS0tLSsgfQotCXwgICAgICAgfCAgOiAgICB8IEE9MSAgfCB9Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0KLQl8IENQVSAxIHwgIDogICAgfCBCPTIgIHwgfS0tLQotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyB9ICAgXAotCXwgICAgICAgfCAgIHd3d3d3d3d3d3d3d3d9ICAgIFwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgfSAgICAgXCAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCi0JfCAgICAgICB8ICA6ICAgIHwgRT01ICB8IH0gICAgICBcICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyB9ICAgICAgIFwgICAgICB7IHwgQy0+MyAgfC0tLS0tLT58ICAgICAgIHwKLQl8ICAgICAgIHwtLS0tLS0+fCBEPTQgIHwgfSAgICAgICAgXCAgICAgeyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICBcICAgIHsgfCBFLT41ICB8ICAgIDogIHwgICAgICAgfAotCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgIFwgICB7ICstLS0tLS0tKyAgICA6ICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlciAgLS0+eyB8IEEtPjEgIHwgICAgOiAgfCBDUFUgMiB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIENQVSAxICAgIHsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIENQVSAyICAgICB7IHwgRC0+NCAgfCAgICA6ICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBBPTEgIHwtLS0tLS0gICAgICAtLS0+fCBBLT4wICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgXCAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICBcICAgIC0tLT58IEItPjkgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgIHwgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tICAgICB8ICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgIFwgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgIFwgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgQS0+MCAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgIDogICAgICAgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0+fCBBLT4xICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDoKIAogCi1JZiwgaG93ZXZlciwgYSByZWFkIGJhcnJpZXIgd2VyZSB0byBiZSBwbGFjZWQgYmV0d2VlbiB0aGUgbG9hZCBvZiBDIGFuZCB0aGUKLWxvYWQgb2YgRCBvbiBDUFUgMiwgdGhlbiB0aGUgcGFydGlhbCBvcmRlcmluZyBpbXBvc2VkIGJ5IENQVSAxIHdpbGwgYmUKLXBlcmNlaXZlZCBjb3JyZWN0bHkgYnkgQ1BVIDIuCitJZiwgaG93ZXZlciwgYSByZWFkIGJhcnJpZXIgd2VyZSB0byBiZSBwbGFjZWQgYmV0d2VlbiB0aGUgbG9hZCBvZiBFIGFuZCB0aGUKK2xvYWQgb2YgQSBvbiBDUFUgMjoKIAotCSstLS0tLS0tKyAgICAgICA6ICAgICAgOgotCXwgICAgICAgfCAgICAgICArLS0tLS0tKwotCXwgICAgICAgfC0tLS0tLT58IEM9MyAgfCB9Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0KLQl8ICAgICAgIHwgIDogICAgfCBBPTEgIHwgfS0tLQotCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyB9ICAgXAotCXwgQ1BVIDEgfCAgOiAgICB8IEI9MiAgfCB9ICAgIFwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgXAotCXwgICAgICAgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICAgXAotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgIFwgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKLQl8ICAgICAgIHwgIDogICAgfCBFPTUgIHwgfSAgICAgICAgXCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0tLS0gICAgICBcICAgIHsgfCBDLT4zICB8LS0tLS0tPnwgICAgICAgfAotCXwgICAgICAgfC0tLS0tLT58IEQ9NCAgfCB9ICAgXCAgICAgIFwgICB7ICstLS0tLS0tKyAgICA6ICB8ICAgICAgIHwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgLS0+eyB8IEItPjIgIHwgICAgOiAgfCAgICAgICB8Ci0JKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgIFwgICAgICAgIHsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICB7IHwgQS0+MSAgfCAgICA6ICB8IENQVSAyIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgQXQgdGhpcyBwb2ludCB0aGUgcmVhZCAtLS0tPiAgIFwgICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAotCSAgIGJhcnJpZXIgY2F1c2VzIGFsbCBlZmZlY3RzICAgICAgXCAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICBwcmlvciB0byB0aGUgc3RvcmFnZSBvZiBDICAgICAgICBcICAgeyB8IEUtPjUgIHwgICAgOiAgfCAgICAgICB8Ci0JICAgdG8gYmUgcGVyY2VwdGlibGUgdG8gQ1BVIDIgICAgICAgIC0tPnsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHwgRC0+NCAgfC0tLS0tLT58ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCUNQVSAxCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEEgPSAwLCBCID0gOSB9CisJU1RPUkUgQT0xCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgQj0yCisJCQkJTE9BRCBCCisJCQkJPHJlYWQgYmFycmllcj4KKwkJCQlMT0FEIEEKKwordGhlbiB0aGUgcGFydGlhbCBvcmRlcmluZyBpbXBvc2VkIGJ5IENQVSAxIHdpbGwgYmUgcGVyY2VpdmVkIGNvcnJlY3RseSBieSBDUFUKKzI6CisKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEE9MSAgfC0tLS0tLSAgICAgIC0tLT58IEEtPjAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgICAgKy0tLS0tLS0rCisJfCBDUFUgMSB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIFwgICAgLS0tPnwgQi0+OSAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgfCAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBCPTIgIHwtLS0gICAgIHwgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgXCAgICB8ICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgXCAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICBBdCB0aGlzIHBvaW50IHRoZSByZWFkIC0tLS0+ICAgXCAgcnJycnJycnJycnJycnJycnIgICB8ICAgICAgIHwKKwkgIGJhcnJpZXIgY2F1c2VzIGFsbCBlZmZlY3RzICAgICAgXCAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgcHJpb3IgdG8gdGhlIHN0b3JhZ2Ugb2YgQiAgICAgICAgLS0tLT58IEEtPjEgIHwtLS0tLS0+fCAgICAgICB8CisJICB0byBiZSBwZXJjZXB0aWJsZSB0byBDUFUgMiAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK1RvIGlsbHVzdHJhdGUgdGhpcyBtb3JlIGNvbXBsZXRlbHksIGNvbnNpZGVyIHdoYXQgY291bGQgaGFwcGVuIGlmIHRoZSBjb2RlCitjb250YWluZWQgYSBsb2FkIG9mIEEgZWl0aGVyIHNpZGUgb2YgdGhlIHJlYWQgYmFycmllcjoKKworCUNQVSAxCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEEgPSAwLCBCID0gOSB9CisJU1RPUkUgQT0xCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgQj0yCisJCQkJTE9BRCBCCisJCQkJTE9BRCBBIFtmaXJzdCBsb2FkIG9mIEFdCisJCQkJPHJlYWQgYmFycmllcj4KKwkJCQlMT0FEIEEgW3NlY29uZCBsb2FkIG9mIEFdCisKK0V2ZW4gdGhvdWdoIHRoZSB0d28gbG9hZHMgb2YgQSBib3RoIG9jY3VyIGFmdGVyIHRoZSBsb2FkIG9mIEIsIHRoZXkgbWF5IGJvdGgKK2NvbWUgdXAgd2l0aCBkaWZmZXJlbnQgdmFsdWVzOgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBBPTEgIHwtLS0tLS0gICAgICAtLS0+fCBBLT4wICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgXCAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICBcICAgIC0tLT58IEItPjkgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgIHwgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tICAgICB8ICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgIFwgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgIFwgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgQS0+MCAgfC0tLS0tLT58IDFzdCAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgQXQgdGhpcyBwb2ludCB0aGUgcmVhZCAtLS0tPiAgIFwgIHJycnJycnJycnJycnJycnJyICAgfCAgICAgICB8CisJICBiYXJyaWVyIGNhdXNlcyBhbGwgZWZmZWN0cyAgICAgIFwgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIHByaW9yIHRvIHRoZSBzdG9yYWdlIG9mIEIgICAgICAgIC0tLS0+fCBBLT4xICB8LS0tLS0tPnwgMm5kICAgfAorCSAgdG8gYmUgcGVyY2VwdGlibGUgdG8gQ1BVIDIgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitCdXQgaXQgbWF5IGJlIHRoYXQgdGhlIHVwZGF0ZSB0byBBIGZyb20gQ1BVIDEgYmVjb21lcyBwZXJjZXB0aWJsZSB0byBDUFUgMgorYmVmb3JlIHRoZSByZWFkIGJhcnJpZXIgY29tcGxldGVzIGFueXdheToKKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQT0xICB8LS0tLS0tICAgICAgLS0tPnwgQS0+MCAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgIFwgICAgICAgICArLS0tLS0tLSsKKwl8IENQVSAxIHwgICB3d3d3d3d3d3d3d3d3d3d3ICAgXCAgICAtLS0+fCBCLT45ICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICB8ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEI9MiAgfC0tLSAgICAgfCAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICBcICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICBcICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT58IEEtPjEgIHwtLS0tLS0+fCAxc3QgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQS0+MSAgfC0tLS0tLT58IDJuZCAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisKKworVGhlIGd1YXJhbnRlZSBpcyB0aGF0IHRoZSBzZWNvbmQgbG9hZCB3aWxsIGFsd2F5cyBjb21lIHVwIHdpdGggQSA9PSAxIGlmIHRoZQorbG9hZCBvZiBCIGNhbWUgdXAgd2l0aCBCID09IDIuICBObyBzdWNoIGd1YXJhbnRlZSBleGlzdHMgZm9yIHRoZSBmaXJzdCBsb2FkIG9mCitBOyB0aGF0IG1heSBjb21lIHVwIHdpdGggZWl0aGVyIEEgPT0gMCBvciBBID09IDEuCisKKworUkVBRCBNRU1PUlkgQkFSUklFUlMgVlMgTE9BRCBTUEVDVUxBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IENQVXMgc3BlY3VsYXRlIHdpdGggbG9hZHM6IHRoYXQgaXMgdGhleSBzZWUgdGhhdCB0aGV5IHdpbGwgbmVlZCB0byBsb2FkIGFuCitpdGVtIGZyb20gbWVtb3J5LCBhbmQgdGhleSBmaW5kIGEgdGltZSB3aGVyZSB0aGV5J3JlIG5vdCB1c2luZyB0aGUgYnVzIGZvciBhbnkKK290aGVyIGxvYWRzLCBhbmQgc28gZG8gdGhlIGxvYWQgaW4gYWR2YW5jZSAtIGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZW4ndCBhY3R1YWxseQorZ290IHRvIHRoYXQgcG9pbnQgaW4gdGhlIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBmbG93IHlldC4gIFRoaXMgcGVybWl0cyB0aGUKK2FjdHVhbCBsb2FkIGluc3RydWN0aW9uIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlIGltbWVkaWF0ZWx5IGJlY2F1c2UgdGhlIENQVQorYWxyZWFkeSBoYXMgdGhlIHZhbHVlIHRvIGhhbmQuCisKK0l0IG1heSB0dXJuIG91dCB0aGF0IHRoZSBDUFUgZGlkbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhbHVlIC0gcGVyaGFwcyBiZWNhdXNlIGEKK2JyYW5jaCBjaXJjdW12ZW50ZWQgdGhlIGxvYWQgLSBpbiB3aGljaCBjYXNlIGl0IGNhbiBkaXNjYXJkIHRoZSB2YWx1ZSBvciBqdXN0CitjYWNoZSBpdCBmb3IgbGF0ZXIgdXNlLgorCitDb25zaWRlcjoKKworCUNQVSAxCSAgIAkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCSAJICAgCQlMT0FEIEIKKwkgCSAgIAkJRElWSURFCQl9IERpdmlkZSBpbnN0cnVjdGlvbnMgZ2VuZXJhbGx5CisJIAkgICAJCURJVklERQkJfSB0YWtlIGEgbG9uZyB0aW1lIHRvIHBlcmZvcm0KKwkgCSAgIAkJTE9BRCBBCisKK1doaWNoIG1pZ2h0IGFwcGVhciBhcyB0aGlzOgorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIENQVSBiZWluZyBidXN5IGRvaW5nIGEgLS0tPiAgICAgLS0tPnwgQS0+MCAgfH5+fn4gICB8ICAgICAgIHwKKwlkaXZpc2lvbiBzcGVjdWxhdGVzIG9uIHRoZSAgICAgICAgICAgICAgKy0tLS0tLS0rICAgfiAgIHwgICAgICAgfAorCUxPQUQgb2YgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCU9uY2UgdGhlIGRpdmlzaW9ucyBhcmUgY29tcGxldGUgLS0+ICAgICA6ICAgICAgIDogICB+LS0+fCAgICAgICB8CisJdGhlIENQVSBjYW4gdGhlbiBwZXJmb3JtIHRoZSAgICAgICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwlMT0FEIHdpdGggaW1tZWRpYXRlIGVmZmVjdCAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK1BsYWNpbmcgYSByZWFkIGJhcnJpZXIgb3IgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciBqdXN0IGJlZm9yZSB0aGUgc2Vjb25kCitsb2FkOgorCisJQ1BVIDEJICAgCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJIAkgICAJCUxPQUQgQgorCSAJICAgCQlESVZJREUKKwkgCSAgIAkJRElWSURFCisJCQkJPHJlYWQgYmFycmllcj4KKwkgCSAgIAkJTE9BRCBBCisKK3dpbGwgZm9yY2UgYW55IHZhbHVlIHNwZWN1bGF0aXZlbHkgb2J0YWluZWQgdG8gYmUgcmVjb25zaWRlcmVkIHRvIGFuIGV4dGVudAorZGVwZW5kZW50IG9uIHRoZSB0eXBlIG9mIGJhcnJpZXIgdXNlZC4gIElmIHRoZXJlIHdhcyBubyBjaGFuZ2UgbWFkZSB0byB0aGUKK3NwZWN1bGF0ZWQgbWVtb3J5IGxvY2F0aW9uLCB0aGVuIHRoZSBzcGVjdWxhdGVkIHZhbHVlIHdpbGwganVzdCBiZSB1c2VkOgorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIENQVSBiZWluZyBidXN5IGRvaW5nIGEgLS0tPiAgICAgLS0tPnwgQS0+MCAgfH5+fn4gICB8ICAgICAgIHwKKwlkaXZpc2lvbiBzcGVjdWxhdGVzIG9uIHRoZSAgICAgICAgICAgICAgKy0tLS0tLS0rICAgfiAgIHwgICAgICAgfAorCUxPQUQgb2YgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJycnJycnJycnJycnJycn4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+LS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK2J1dCBpZiB0aGVyZSB3YXMgYW4gdXBkYXRlIG9yIGFuIGludmFsaWRhdGlvbiBmcm9tIGFub3RoZXIgQ1BVIHBlbmRpbmcsIHRoZW4KK3RoZSBzcGVjdWxhdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgdGhlIHZhbHVlIHJlbG9hZGVkOgorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIENQVSBiZWluZyBidXN5IGRvaW5nIGEgLS0tPiAgICAgLS0tPnwgQS0+MCAgfH5+fn4gICB8ICAgICAgIHwKKwlkaXZpc2lvbiBzcGVjdWxhdGVzIG9uIHRoZSAgICAgICAgICAgICAgKy0tLS0tLS0rICAgfiAgIHwgICAgICAgfAorCUxPQUQgb2YgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJycnJycnJycnJycnJycnIgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCVRoZSBzcGVjdWxhdGlvbiBpcyBkaXNjYXJkZWQgLS0tPiAgIC0tLT58IEEtPjEgIHwtLS0tLS0+fCAgICAgICB8CisJYW5kIGFuIHVwZGF0ZWQgdmFsdWUgaXMgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwlyZXRyaWV2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKwogCiAKID09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtODI5LDggKzEwMjMsOCBAQAogICgqKSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIAogICAgICBUaGVzZSBhcmUgZm9yIHVzZSB3aXRoIGF0b21pYyBhZGQsIHN1YnRyYWN0LCBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudAotICAgICBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIGZvciByZWZlcmVuY2UgY291bnRpbmcuICBUaGVzZSBmdW5jdGlvbnMKLSAgICAgZG8gbm90IGltcGx5IG1lbW9yeSBiYXJyaWVycy4KKyAgICAgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgcmV0dXJuIGEgdmFsdWUsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIGZvciByZWZlcmVuY2UKKyAgICAgY291bnRpbmcuICBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IGltcGx5IG1lbW9yeSBiYXJyaWVycy4KIAogICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBhIHBpZWNlIG9mIGNvZGUgdGhhdCBtYXJrcyBhbiBvYmplY3QgYXMgYmVpbmcgZGVhZAogICAgICBhbmQgdGhlbiBkZWNyZW1lbnRzIHRoZSBvYmplY3QncyByZWZlcmVuY2UgY291bnQ6CkBAIC04ODcsNyArMTA4MSw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFNvbWUgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbGludXgga2VybmVsIGltcGx5IG1lbW9yeSBiYXJyaWVycywgYW1vbmdzdAotd2hpY2ggYXJlIGxvY2tpbmcsIHNjaGVkdWxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KK3doaWNoIGFyZSBsb2NraW5nIGFuZCBzY2hlZHVsaW5nIGZ1bmN0aW9ucy4KIAogVGhpcyBzcGVjaWZpY2F0aW9uIGlzIGEgX21pbmltdW1fIGd1YXJhbnRlZTsgYW55IHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG1heQogcHJvdmlkZSBtb3JlIHN1YnN0YW50aWFsIGd1YXJhbnRlZXMsIGJ1dCB0aGVzZSBtYXkgbm90IGJlIHJlbGllZCB1cG9uIG91dHNpZGUKQEAgLTk1Miw2ICsxMTQ2LDIwIEBACiAgICAgYmFycmllcnMgaXMgdGhhdCB0aGUgZWZmZWN0cyBpbnN0cnVjdGlvbnMgb3V0c2lkZSBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gbWF5CiAgICAgc2VlcCBpbnRvIHRoZSBpbnNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uCiAKK0EgTE9DSyBmb2xsb3dlZCBieSBhbiBVTkxPQ0sgbWF5IG5vdCBiZSBhc3N1bWVkIHRvIGJlIGZ1bGwgbWVtb3J5IGJhcnJpZXIKK2JlY2F1c2UgaXQgaXMgcG9zc2libGUgZm9yIGFuIGFjY2VzcyBwcmVjZWRpbmcgdGhlIExPQ0sgdG8gaGFwcGVuIGFmdGVyIHRoZQorTE9DSywgYW5kIGFuIGFjY2VzcyBmb2xsb3dpbmcgdGhlIFVOTE9DSyB0byBoYXBwZW4gYmVmb3JlIHRoZSBVTkxPQ0ssIGFuZCB0aGUKK3R3byBhY2Nlc3NlcyBjYW4gdGhlbXNlbHZlcyB0aGVuIGNyb3NzOgorCisJKkEgPSBhOworCUxPQ0sKKwlVTkxPQ0sKKwkqQiA9IGI7CisKK21heSBvY2N1ciBhczoKKworCUxPQ0ssIFNUT1JFICpCLCBTVE9SRSAqQSwgVU5MT0NLCisKIExvY2tzIGFuZCBzZW1hcGhvcmVzIG1heSBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlIG9mIG9yZGVyaW5nIG9uIFVQIGNvbXBpbGVkCiBzeXN0ZW1zLCBhbmQgc28gY2Fubm90IGJlIGNvdW50ZWQgb24gaW4gc3VjaCBhIHNpdHVhdGlvbiB0byBhY3R1YWxseSBhY2hpZXZlCiBhbnl0aGluZyBhdCBhbGwgLSBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBJL08gYWNjZXNzZXMgLSB1bmxlc3MgY29tYmluZWQKQEAgLTEwMDIsOCArMTIxMCw2IEBACiAKICAoKikgc2NoZWR1bGUoKSBhbmQgc2ltaWxhciBpbXBseSBmdWxsIG1lbW9yeSBiYXJyaWVycy4KIAotICgqKSBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgaW1wbHkgZnVsbCBtZW1vcnkgYmFycmllcnMuCi0KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBJTlRFUi1DUFUgTE9DS0lORyBCQVJSSUVSIEVGRkVDVFMKQEAgLTEwMTcsNyArMTIyMyw3IEBACiBMT0NLUyBWUyBNRU1PUlkgQUNDRVNTRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db25zaWRlciB0aGUgZm9sbG93aW5nOiB0aGUgc3lzdGVtIGhhcyBhIHBhaXIgb2Ygc3BpbmxvY2tzIChOKSBhbmQgKFEpLCBhbmQKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmc6IHRoZSBzeXN0ZW0gaGFzIGEgcGFpciBvZiBzcGlubG9ja3MgKE0pIGFuZCAoUSksIGFuZAogdGhyZWUgQ1BVczsgdGhlbiBzaG91bGQgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHMgb2NjdXI6CiAKIAlDUFUgMQkJCQlDUFUgMgpAQCAtMTI2MywxNSArMTQ2OSwxNyBAQAogQVRPTUlDIE9QRVJBVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLVRob3VnaCB0aGV5IGFyZSB0ZWNobmljYWxseSBpbnRlcnByb2Nlc3NvciBpbnRlcmFjdGlvbiBjb25zaWRlcmF0aW9ucywgYXRvbWljCi1vcGVyYXRpb25zIGFyZSBub3RlZCBzcGVjaWFsbHkgYXMgdGhleSBkbyBfbm90XyBnZW5lcmFsbHkgaW1wbHkgbWVtb3J5Ci1iYXJyaWVycy4gIFRoZSBwb3NzaWJsZSBvZmZlbmRlcnMgaW5jbHVkZToKK1doaWxzdCB0aGV5IGFyZSB0ZWNobmljYWxseSBpbnRlcnByb2Nlc3NvciBpbnRlcmFjdGlvbiBjb25zaWRlcmF0aW9ucywgYXRvbWljCitvcGVyYXRpb25zIGFyZSBub3RlZCBzcGVjaWFsbHkgYXMgc29tZSBvZiB0aGVtIGltcGx5IGZ1bGwgbWVtb3J5IGJhcnJpZXJzIGFuZAorc29tZSBkb24ndCwgYnV0IHRoZXkncmUgdmVyeSBoZWF2aWx5IHJlbGllZCBvbiBhcyBhIGdyb3VwIHRocm91Z2hvdXQgdGhlCitrZXJuZWwuCisKK0FueSBhdG9taWMgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgc29tZSBzdGF0ZSBpbiBtZW1vcnkgYW5kIHJldHVybnMgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBzdGF0ZSAob2xkIG9yIG5ldykgaW1wbGllcyBhbiBTTVAtY29uZGl0aW9uYWwgZ2VuZXJhbCBtZW1vcnkgYmFycmllcgorKHNtcF9tYigpKSBvbiBlYWNoIHNpZGUgb2YgdGhlIGFjdHVhbCBvcGVyYXRpb24uICBUaGVzZSBpbmNsdWRlOgogCiAJeGNoZygpOwogCWNtcHhjaGcoKTsKLQl0ZXN0X2FuZF9zZXRfYml0KCk7Ci0JdGVzdF9hbmRfY2xlYXJfYml0KCk7Ci0JdGVzdF9hbmRfY2hhbmdlX2JpdCgpOwogCWF0b21pY19jbXB4Y2hnKCk7CiAJYXRvbWljX2luY19yZXR1cm4oKTsKIAlhdG9taWNfZGVjX3JldHVybigpOwpAQCAtMTI4MiwyMSArMTQ5MCwzMSBAQAogCWF0b21pY19zdWJfYW5kX3Rlc3QoKTsKIAlhdG9taWNfYWRkX25lZ2F0aXZlKCk7CiAJYXRvbWljX2FkZF91bmxlc3MoKTsKKwl0ZXN0X2FuZF9zZXRfYml0KCk7CisJdGVzdF9hbmRfY2xlYXJfYml0KCk7CisJdGVzdF9hbmRfY2hhbmdlX2JpdCgpOwogCi1UaGVzZSBtYXkgYmUgdXNlZCBmb3Igc3VjaCB0aGluZ3MgYXMgaW1wbGVtZW50aW5nIExPQ0sgb3BlcmF0aW9ucyBvciBjb250cm9sbGluZwotdGhlIGxpZmV0aW1lIG9mIG9iamVjdHMgYnkgZGVjcmVhc2luZyB0aGVpciByZWZlcmVuY2UgY291bnRzLiAgSW4gc3VjaCBjYXNlcwotdGhleSBuZWVkIHByZWNlZGluZyBtZW1vcnkgYmFycmllcnMuCitUaGVzZSBhcmUgdXNlZCBmb3Igc3VjaCB0aGluZ3MgYXMgaW1wbGVtZW50aW5nIExPQ0stY2xhc3MgYW5kIFVOTE9DSy1jbGFzcworb3BlcmF0aW9ucyBhbmQgYWRqdXN0aW5nIHJlZmVyZW5jZSBjb3VudGVycyB0b3dhcmRzIG9iamVjdCBkZXN0cnVjdGlvbiwgYW5kIGFzCitzdWNoIHRoZSBpbXBsaWNpdCBtZW1vcnkgYmFycmllciBlZmZlY3RzIGFyZSBuZWNlc3NhcnkuCiAKLVRoZSBmb2xsb3dpbmcgbWF5IGFsc28gYmUgcG9zc2libGUgb2ZmZW5kZXJzIGFzIHRoZXkgbWF5IGJlIHVzZWQgYXMgVU5MT0NLCi1vcGVyYXRpb25zLgogCitUaGUgZm9sbG93aW5nIG9wZXJhdGlvbiBhcmUgcG90ZW50aWFsIHByb2JsZW1zIGFzIHRoZXkgZG8gX25vdF8gaW1wbHkgbWVtb3J5CitiYXJyaWVycywgYnV0IG1pZ2h0IGJlIHVzZWQgZm9yIGltcGxlbWVudGluZyBzdWNoIHRoaW5ncyBhcyBVTkxPQ0stY2xhc3MKK29wZXJhdGlvbnM6CisKKwlhdG9taWNfc2V0KCk7CiAJc2V0X2JpdCgpOwogCWNsZWFyX2JpdCgpOwogCWNoYW5nZV9iaXQoKTsKLQlhdG9taWNfc2V0KCk7CisKK1dpdGggdGhlc2UgdGhlIGFwcHJvcHJpYXRlIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVyIHNob3VsZCBiZSB1c2VkIGlmIG5lY2Vzc2FyeQorKHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGZvciBpbnN0YW5jZSkuCiAKIAotVGhlIGZvbGxvd2luZyBhcmUgYSBsaXR0bGUgdHJpY2t5OgorVGhlIGZvbGxvd2luZyBhbHNvIGRvIF9ub3RfIGltcGx5IG1lbW9yeSBiYXJyaWVycywgYW5kIHNvIG1heSByZXF1aXJlIGV4cGxpY2l0CittZW1vcnkgYmFycmllcnMgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIChzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgZm9yCitpbnN0YW5jZSkpOgogCiAJYXRvbWljX2FkZCgpOwogCWF0b21pY19zdWIoKTsKQEAgLTEzMTcsMTAgKzE1MzUsMTIgQEAKIAogCiBCYXNpY2FsbHksIGVhY2ggdXNhZ2UgY2FzZSBoYXMgdG8gYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgYXMgdG8gd2hldGhlciBtZW1vcnkKLWJhcnJpZXJzIGFyZSBuZWVkZWQgb3Igbm90LiAgVGhlIHNpbXBsZXN0IHJ1bGUgaXMgcHJvYmFibHk6IGlmIHRoZSBhdG9taWMKLW9wZXJhdGlvbiBpcyBwcm90ZWN0ZWQgYnkgYSBsb2NrLCB0aGVuIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBiYXJyaWVyIHVubGVzcwotdGhlcmUncyBhbm90aGVyIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gd2l0aCByZXNwZWN0IHRvIHdoaWNoIGFuCi1vcmRlcmluZyBtdXN0IGJlIG1haW50YWluZWQuCitiYXJyaWVycyBhcmUgbmVlZGVkIG9yIG5vdC4KKworWyFdIE5vdGUgdGhhdCBzcGVjaWFsIG1lbW9yeSBiYXJyaWVyIHByaW1pdGl2ZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlc2UKK3NpdHVhdGlvbnMgYmVjYXVzZSBvbiBzb21lIENQVXMgdGhlIGF0b21pYyBpbnN0cnVjdGlvbnMgdXNlZCBpbXBseSBmdWxsIG1lbW9yeQorYmFycmllcnMsIGFuZCBzbyBiYXJyaWVyIGluc3RydWN0aW9ucyBhcmUgc3VwZXJmbHVvdXMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVtLAorYW5kIGluIHN1Y2ggY2FzZXMgdGhlIHNwZWNpYWwgYmFycmllciBwcmltaXRpdmVzIHdpbGwgYmUgbm8tb3BzLgogCiBTZWUgRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIApAQCAtMTY1MCw3ICsxODcwLDcgQEAKIAlzbXBfd21iKCk7CiAJPEE6bW9kaWZ5IHY9Mj4JPEM6YnVzeT4KIAkJCTxDOnF1ZXVlIHY9Mj4KLQlwID0gJmI7CQlxID0gcDsKKwlwID0gJnY7CQlxID0gcDsKIAkJCTxEOnJlcXVlc3QgcD4KIAk8Qjptb2RpZnkgcD0mdj4JPEQ6Y29tbWl0IHA9JnY+CiAJCSAgCTxEOnJlYWQgcD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbXRyci50eHQgYi9Eb2N1bWVudGF0aW9uL210cnIudHh0CmluZGV4IGI3OGFmMWMuLmMzOWFjMzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbXRyci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dApAQCAtMTM4LDE5ICsxMzgsMjkgQEAKIAogKi8KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2RlZmluZSBNVFJSX05FRURfU1RSSU5HUwogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAKICNkZWZpbmUgVFJVRSAxCiAjZGVmaW5lIEZBTFNFIDAKICNkZWZpbmUgRVJSU1RSSU5HIHN0cmVycm9yIChlcnJubykKIAorc3RhdGljIGNoYXIgKm10cnJfc3RyaW5nc1tNVFJSX05VTV9UWVBFU10gPQoreworICAgICJ1bmNhY2hhYmxlIiwgICAgICAgICAgICAgICAvKiAwICovCisgICAgIndyaXRlLWNvbWJpbmluZyIsICAgICAgICAgIC8qIDEgKi8KKyAgICAiPyIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLworICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAzICovCisgICAgIndyaXRlLXRocm91Z2giLCAgICAgICAgICAgIC8qIDQgKi8KKyAgICAid3JpdGUtcHJvdGVjdCIsICAgICAgICAgICAgLyogNSAqLworICAgICJ3cml0ZS1iYWNrIiwgICAgICAgICAgICAgICAvKiA2ICovCit9OwogCiBpbnQgbWFpbiAoKQogewpAQCAtMjMyLDEzICsyNDIsMjIgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIE1UUlJfTkVFRF9TVFJJTkdTCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KIAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUgRkFMU0UgMAogI2RlZmluZSBFUlJTVFJJTkcgc3RyZXJyb3IgKGVycm5vKQogCitzdGF0aWMgY2hhciAqbXRycl9zdHJpbmdzW01UUlJfTlVNX1RZUEVTXSA9Cit7CisgICAgInVuY2FjaGFibGUiLCAgICAgICAgICAgICAgIC8qIDAgKi8KKyAgICAid3JpdGUtY29tYmluaW5nIiwgICAgICAgICAgLyogMSAqLworICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAid3JpdGUtdGhyb3VnaCIsICAgICAgICAgICAgLyogNCAqLworICAgICJ3cml0ZS1wcm90ZWN0IiwgICAgICAgICAgICAvKiA1ICovCisgICAgIndyaXRlLWJhY2siLCAgICAgICAgICAgICAgIC8qIDYgKi8KK307CiAKIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb3BlcnN0YXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb3BlcnN0YXRlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyMWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vcGVyc3RhdGVzLnR4dApAQCAtMCwwICsxLDE2MSBAQAorCisxLiBJbnRyb2R1Y3Rpb24KKworTGludXggZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGFkbWluaXN0cmF0aXZlIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSBvZiBhbgoraW50ZXJmYWNlLiBBZG1pbmluc3RyYXRpdmUgc3RhdGUgaXMgdGhlIHJlc3VsdCBvZiAiaXAgbGluayBzZXQgZGV2Cis8ZGV2PiB1cCBvciBkb3duIiBhbmQgcmVmbGVjdHMgd2hldGhlciB0aGUgYWRtaW5pc3RyYXRvciB3YW50cyB0byB1c2UKK3RoZSBkZXZpY2UgZm9yIHRyYWZmaWMuCisKK0hvd2V2ZXIsIGFuIGludGVyZmFjZSBpcyBub3QgdXNhYmxlIGp1c3QgYmVjYXVzZSB0aGUgYWRtaW4gZW5hYmxlZCBpdAorLSBldGhlcm5ldCByZXF1aXJlcyB0byBiZSBwbHVnZ2VkIGludG8gdGhlIHN3aXRjaCBhbmQsIGRlcGVuZGluZyBvbgorYSBzaXRlJ3MgbmV0d29ya2luZyBwb2xpY3kgYW5kIGNvbmZpZ3VyYXRpb24sIGFuIDgwMi4xWCBhdXRoZW50aWNhdGlvbgordG8gYmUgcGVyZm9ybWVkIGJlZm9yZSB1c2VyIGRhdGEgY2FuIGJlIHRyYW5zZmVycmVkLiBPcGVyYXRpb25hbCBzdGF0ZQorc2hvd3MgdGhlIGFiaWxpdHkgb2YgYW4gaW50ZXJmYWNlIHRvIHRyYW5zbWl0IHRoaXMgdXNlciBkYXRhLgorCitUaGFua3MgdG8gODAyLjFYLCB1c2Vyc3BhY2UgbXVzdCBiZSBncmFudGVkIHRoZSBwb3NzaWJpbGl0eSB0bworaW5mbHVlbmNlIG9wZXJhdGlvbmFsIHN0YXRlLiBUbyBhY2NvbW1vZGF0ZSB0aGlzLCBvcGVyYXRpb25hbCBzdGF0ZSBpcworc3BsaXQgaW50byB0d28gcGFydHM6IFR3byBmbGFncyB0aGF0IGNhbiBiZSBzZXQgYnkgdGhlIGRyaXZlciBvbmx5LCBhbmQKK2EgUkZDMjg2MyBjb21wYXRpYmxlIHN0YXRlIHRoYXQgaXMgZGVyaXZlZCBmcm9tIHRoZXNlIGZsYWdzLCBhIHBvbGljeSwKK2FuZCBjaGFuZ2VhYmxlIGZyb20gdXNlcnNwYWNlIHVuZGVyIGNlcnRhaW4gcnVsZXMuCisKKworMi4gUXVlcnlpbmcgZnJvbSB1c2Vyc3BhY2UKKworQm90aCBhZG1pbiBhbmQgb3BlcmF0aW9uYWwgc3RhdGUgY2FuIGJlIHF1ZXJpZWQgdmlhIHRoZSBuZXRsaW5rCitvcGVyYXRpb24gUlRNX0dFVExJTksuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3Vic2NyaWJlIHRvIFJUTUdSUF9MSU5LCit0byBiZSBub3RpZmllZCBvZiB1cGRhdGVzLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2V0dGluZyBmcm9tIHVzZXJzcGFjZS4KKworVGhlc2UgdmFsdWVzIGNvbnRhaW4gaW50ZXJmYWNlIHN0YXRlOgorCitpZmluZm9tc2c6OmlmX2ZsYWdzICYgSUZGX1VQOgorIEludGVyZmFjZSBpcyBhZG1pbiB1cAoraWZpbmZvbXNnOjppZl9mbGFncyAmIElGRl9SVU5OSU5HOgorIEludGVyZmFjZSBpcyBpbiBSRkMyODYzIG9wZXJhdGlvbmFsIHN0YXRlIFVQIG9yIFVOS05PV04uIFRoaXMgaXMgZm9yCisgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgcm91dGluZyBkYWVtb25zLCBkaGNwIGNsaWVudHMgY2FuIHVzZSB0aGlzCisgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IHNob3VsZCB1c2UgdGhlIGludGVyZmFjZS4KK2lmaW5mb21zZzo6aWZfZmxhZ3MgJiBJRkZfTE9XRVJfVVA6CisgRHJpdmVyIGhhcyBzaWduYWxlZCBuZXRpZl9jYXJyaWVyX29uKCkKK2lmaW5mb21zZzo6aWZfZmxhZ3MgJiBJRkZfRE9STUFOVDoKKyBEcml2ZXIgaGFzIHNpZ25hbGVkIG5ldGlmX2Rvcm1hbnRfb24oKQorCitUaGVzZSBpbnRlcmZhY2UgZmxhZ3MgY2FuIGFsc28gYmUgcXVlcmllZCB3aXRob3V0IG5ldGxpbmsgdXNpbmcgdGhlCitTSU9DR0lGRkxBR1MgaW9jdGwuCisKK1RMViBJRkxBX09QRVJTVEFURQorCitjb250YWlucyBSRkMyODYzIHN0YXRlIG9mIHRoZSBpbnRlcmZhY2UgaW4gbnVtZXJpYyByZXByZXNlbnRhdGlvbjoKKworSUZfT1BFUl9VTktOT1dOICgwKToKKyBJbnRlcmZhY2UgaXMgaW4gdW5rbm93biBzdGF0ZSwgbmVpdGhlciBkcml2ZXIgbm9yIHVzZXJzcGFjZSBoYXMgc2V0Cisgb3BlcmF0aW9uYWwgc3RhdGUuIEludGVyZmFjZSBtdXN0IGJlIGNvbnNpZGVyZWQgZm9yIHVzZXIgZGF0YSBhcworIHNldHRpbmcgb3BlcmF0aW9uYWwgc3RhdGUgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGluIGV2ZXJ5IGRyaXZlci4KK0lGX09QRVJfTk9UUFJFU0VOVCAoMSk6CisgVW51c2VkIGluIGN1cnJlbnQga2VybmVsIChub3RwcmVzZW50IGludGVyZmFjZXMgbm9ybWFsbHkgZGlzYXBwZWFyKSwKKyBqdXN0IGEgbnVtZXJpY2FsIHBsYWNlaG9sZGVyLgorSUZfT1BFUl9ET1dOICgyKToKKyBJbnRlcmZhY2UgaXMgdW5hYmxlIHRvIHRyYW5zZmVyIGRhdGEgb24gTDEsIGYuZS4gZXRoZXJuZXQgaXMgbm90CisgcGx1Z2dlZCBvciBpbnRlcmZhY2UgaXMgQURNSU4gZG93bi4KK0lGX09QRVJfTE9XRVJMQVlFUkRPV04gKDMpOgorIEludGVyZmFjZXMgc3RhY2tlZCBvbiBhbiBpbnRlcmZhY2UgdGhhdCBpcyBJRl9PUEVSX0RPV04gc2hvdyB0aGlzCisgc3RhdGUgKGYuZS4gVkxBTikuCitJRl9PUEVSX1RFU1RJTkcgKDQpOgorIFVudXNlZCBpbiBjdXJyZW50IGtlcm5lbC4KK0lGX09QRVJfRE9STUFOVCAoNSk6CisgSW50ZXJmYWNlIGlzIEwxIHVwLCBidXQgd2FpdGluZyBmb3IgYW4gZXh0ZXJuYWwgZXZlbnQsIGYuZS4gZm9yIGEKKyBwcm90b2NvbCB0byBlc3RhYmxpc2guICg4MDIuMVgpCitJRl9PUEVSX1VQICg2KToKKyBJbnRlcmZhY2UgaXMgb3BlcmF0aW9uYWwgdXAgYW5kIGNhbiBiZSB1c2VkLgorCitUaGlzIFRMViBjYW4gYWxzbyBiZSBxdWVyaWVkIHZpYSBzeXNmcy4KKworVExWIElGTEFfTElOS01PREUKKworY29udGFpbnMgbGluayBwb2xpY3kuIFRoaXMgaXMgbmVlZGVkIGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24KK2Rlc2NyaWJlZCBiZWxvdy4KKworVGhpcyBUTFYgY2FuIGFsc28gYmUgcXVlcmllZCB2aWEgc3lzZnMuCisKKworMy4gS2VybmVsIGRyaXZlciBBUEkKKworS2VybmVsIGRyaXZlcnMgaGF2ZSBhY2Nlc3MgdG8gdHdvIGZsYWdzIHRoYXQgbWFwIHRvIElGRl9MT1dFUl9VUCBhbmQKK0lGRl9ET1JNQU5ULiBUaGVzZSBmbGFncyBjYW4gYmUgc2V0IGZyb20gZXZlcnl3aGVyZSwgZXZlbiBmcm9tCitpbnRlcnJ1cHRzLiBJdCBpcyBndWFyYW50ZWVkIHRoYXQgb25seSB0aGUgZHJpdmVyIGhhcyB3cml0ZSBhY2Nlc3MsCitob3dldmVyLCBpZiBkaWZmZXJlbnQgbGF5ZXJzIG9mIHRoZSBkcml2ZXIgbWFuaXB1bGF0ZSB0aGUgc2FtZSBmbGFnLAordGhlIGRyaXZlciBoYXMgdG8gcHJvdmlkZSB0aGUgc3luY2hyb25pc2F0aW9uIG5lZWRlZC4KKworX19MSU5LX1NUQVRFX05PQ0FSUklFUiwgbWFwcyB0byAhSUZGX0xPV0VSX1VQOgorCitUaGUgZHJpdmVyIHVzZXMgbmV0aWZfY2Fycmllcl9vbigpIHRvIGNsZWFyIGFuZCBuZXRpZl9jYXJyaWVyX29mZigpIHRvCitzZXQgdGhpcyBmbGFnLiBPbiBuZXRpZl9jYXJyaWVyX29mZigpLCB0aGUgc2NoZWR1bGVyIHN0b3BzIHNlbmRpbmcKK3BhY2tldHMuIFRoZSBuYW1lICdjYXJyaWVyJyBhbmQgdGhlIGludmVyc2lvbiBhcmUgaGlzdG9yaWNhbCwgdGhpbmsgb2YKK2l0IGFzIGxvd2VyIGxheWVyLgorCituZXRpZl9jYXJyaWVyX29rKCkgY2FuIGJlIHVzZWQgdG8gcXVlcnkgdGhhdCBiaXQuCisKK19fTElOS19TVEFURV9ET1JNQU5ULCBtYXBzIHRvIElGRl9ET1JNQU5UOgorCitTZXQgYnkgdGhlIGRyaXZlciB0byBleHByZXNzIHRoYXQgdGhlIGRldmljZSBjYW5ub3QgeWV0IGJlIHVzZWQKK2JlY2F1c2Ugc29tZSBkcml2ZXIgY29udHJvbGxlZCBwcm90b2NvbCBlc3RhYmxpc2htZW50IGhhcyB0bworY29tcGxldGUuIENvcnJlc3BvbmRpbmcgZnVuY3Rpb25zIGFyZSBuZXRpZl9kb3JtYW50X29uKCkgdG8gc2V0IHRoZQorZmxhZywgbmV0aWZfZG9ybWFudF9vZmYoKSB0byBjbGVhciBpdCBhbmQgbmV0aWZfZG9ybWFudCgpIHRvIHF1ZXJ5LgorCitPbiBkZXZpY2UgYWxsb2NhdGlvbiwgbmV0d29ya2luZyBjb3JlIHNldHMgdGhlIGZsYWdzIGVxdWl2YWxlbnQgdG8KK25ldGlmX2NhcnJpZXJfb2soKSBhbmQgIW5ldGlmX2Rvcm1hbnQoKS4KKworCitXaGVuZXZlciB0aGUgZHJpdmVyIENIQU5HRVMgb25lIG9mIHRoZXNlIGZsYWdzLCBhIHdvcmtxdWV1ZSBldmVudCBpcworc2NoZWR1bGVkIHRvIHRyYW5zbGF0ZSB0aGUgZmxhZyBjb21iaW5hdGlvbiB0byBJRkxBX09QRVJTVEFURSBhcworZm9sbG93czoKKworIW5ldGlmX2NhcnJpZXJfb2soKToKKyBJRl9PUEVSX0xPV0VSTEFZRVJET1dOIGlmIHRoZSBpbnRlcmZhY2UgaXMgc3RhY2tlZCwgSUZfT1BFUl9ET1dOCisgb3RoZXJ3aXNlLiBLZXJuZWwgY2FuIHJlY29nbmlzZSBzdGFja2VkIGludGVyZmFjZXMgYmVjYXVzZSB0aGVpcgorIGlmaW5kZXggIT0gaWZsaW5rLgorCituZXRpZl9jYXJyaWVyX29rKCkgJiYgbmV0aWZfZG9ybWFudCgpOgorIElGX09QRVJfRE9STUFOVAorCituZXRpZl9jYXJyaWVyX29rKCkgJiYgIW5ldGlmX2Rvcm1hbnQoKToKKyBJRl9PUEVSX1VQIGlmIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBpcyBkaXNhYmxlZC4gT3RoZXJ3aXNlCisgSUZfT1BFUl9ET1JNQU5UIHdpdGggdGhlIHBvc3NpYmlsaXR5IGZvciB1c2Vyc3BhY2UgdG8gaW5pdGlhdGUgdGhlCisgSUZfT1BFUl9VUCB0cmFuc2l0aW9uIGFmdGVyd2FyZHMuCisKKworNC4gU2V0dGluZyBmcm9tIHVzZXJzcGFjZQorCitBcHBsaWNhdGlvbnMgaGF2ZSB0byB1c2UgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIHRvIGluZmx1ZW5jZSB0aGUKK1JGQzI4NjMgb3BlcmF0aW9uYWwgc3RhdGUgb2YgYW4gaW50ZXJmYWNlLiBTZXR0aW5nIElGTEFfTElOS01PREUgdG8gMQordmlhIFJUTV9TRVRMSU5LIGluc3RydWN0cyB0aGUga2VybmVsIHRoYXQgYW4gaW50ZXJmYWNlIHNob3VsZCBnbyB0bworSUZfT1BFUl9ET1JNQU5UIGluc3RlYWQgb2YgSUZfT1BFUl9VUCB3aGVuIHRoZSBjb21iaW5hdGlvbgorbmV0aWZfY2Fycmllcl9vaygpICYmICFuZXRpZl9kb3JtYW50KCkgaXMgc2V0IGJ5IHRoZQorZHJpdmVyLiBBZnRlcndhcmRzLCB0aGUgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGNhbiBzZXQgSUZMQV9PUEVSU1RBVEUKK3RvIElGX09QRVJfRE9STUFOVCBvciBJRl9PUEVSX1VQIGFzIGxvbmcgYXMgdGhlIGRyaXZlciBkb2VzIG5vdCBzZXQKK25ldGlmX2NhcnJpZXJfb2ZmKCkgb3IgbmV0aWZfZG9ybWFudF9vbigpLiBDaGFuZ2VzIG1hZGUgYnkgdXNlcnNwYWNlCithcmUgbXVsdGljYXN0ZWQgb24gdGhlIG5ldGxpbmsgZ3JvdXAgUlRNR1JQX0xJTksuCisKK1NvIGJhc2ljYWxseSBhIDgwMi4xWCBzdXBwbGljYW50IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgbGlrZSB0aGlzOgorCistc3Vic2NyaWJlIHRvIFJUTUdSUF9MSU5LCistc2V0IElGTEFfTElOS01PREUgdG8gMSB2aWEgUlRNX1NFVExJTksKKy1xdWVyeSBSVE1fR0VUTElOSyBvbmNlIHRvIGdldCBpbml0aWFsIHN0YXRlCistaWYgaW5pdGlhbCBmbGFncyBhcmUgbm90IChJRkZfTE9XRVJfVVAgJiYgIUlGRl9ET1JNQU5UKSwgd2FpdCB1bnRpbAorIG5ldGxpbmsgbXVsdGljYXN0IHNpZ25hbHMgdGhpcyBzdGF0ZQorLWRvIDgwMi4xWCwgZXZlbnR1YWxseSBhYm9ydCBpZiBmbGFncyBnbyBkb3duIGFnYWluCistc2VuZCBSVE1fU0VUTElOSyB0byBzZXQgb3BlcnN0YXRlIHRvIElGX09QRVJfVVAgaWYgYXV0aGVudGljYXRpb24KKyBzdWNjZWVkcywgSUZfT1BFUl9ET1JNQU5UIG90aGVyd2lzZQorLXNlZSBob3cgb3BlcnN0YXRlIGFuZCBJRkZfUlVOTklORyBpcyBlY2hvZWQgdmlhIG5ldGxpbmsgbXVsdGljYXN0Cistc2V0IGludGVyZmFjZSBiYWNrIHRvIElGX09QRVJfRE9STUFOVCBpZiA4MDIuMVggcmVhdXRoZW50aWNhdGlvbgorIGZhaWxzCistcmVzdGFydCBpZiBrZXJuZWwgY2hhbmdlcyBJRkZfTE9XRVJfVVAgb3IgSUZGX0RPUk1BTlQgZmxhZworCitpZiBzdXBwbGljYW50IGdvZXMgZG93biwgYnJpbmcgYmFjayBJRkxBX0xJTktNT0RFIHRvIDAgYW5kCitJRkxBX09QRVJTVEFURSB0byBhIHNhbmUgdmFsdWUuCisKK0Egcm91dGluZyBkYWVtb24gb3IgZGhjcCBjbGllbnQganVzdCBuZWVkcyB0byBjYXJlIGZvciBJRkZfUlVOTklORyBvcgord2FpdGluZyBmb3Igb3BlcnN0YXRlIHRvIGdvIElGX09QRVJfVVAvSUZfT1BFUl9VTktOT1dOIGJlZm9yZQorY29uc2lkZXJpbmcgdGhlIGludGVyZmFjZSAvIHF1ZXJ5aW5nIGEgREhDUCBhZGRyZXNzLgorCisKK0ZvciB0ZWNobmljYWwgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyBwbGVhc2UgZS1tYWlsIHRvIFN0ZWZhbiBSb21wZgorKHN0ZWZhbiBhdCBsb3Bsb2YuZGUpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKaW5kZXggNGZjOGU5OC4uYWFmOTlkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CkBAIC0yNTQsNyArMjU0LDcgQEAKIAogCTxibG9jayBudW1iZXI+ICogPGJsb2NrIHNpemU+IC8gPGZyYW1lIHNpemU+CiAKLVN1cG9zc2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLCB3aGljaCBhcHBseSBmb3IgMi42IGtlcm5lbCBhbmQgYW4KK1N1cHBvc2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLCB3aGljaCBhcHBseSBmb3IgMi42IGtlcm5lbCBhbmQgYW4KIGkzODYgYXJjaGl0ZWN0dXJlOgogCiAJPHNpemUtbWF4PiA9IDEzMTA3MiBieXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dAppbmRleCBlYzNkMTA5Li43Njc1MGZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dApAQCAtMTM4LDcgKzEzOCw3IEBACiBldGhlcm5ldCBmcmFtZXMgd2hlbiB1c2luZyB0YXAuCiAKIDUuIFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBCUEYgYW5kIFRVTi9UQVAgZHJpdmVyPwotQkZQIGlzIGFuIGFkdmFuY2VkIHBhY2tldCBmaWx0ZXIuIEl0IGNhbiBiZSBhdHRhY2hlZCB0byBleGlzdGluZworQlBGIGlzIGFuIGFkdmFuY2VkIHBhY2tldCBmaWx0ZXIuIEl0IGNhbiBiZSBhdHRhY2hlZCB0byBleGlzdGluZwogbmV0d29yayBpbnRlcmZhY2UuIEl0IGRvZXMgbm90IHByb3ZpZGUgYSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlLgogQSBUVU4vVEFQIGRyaXZlciBkb2VzIHByb3ZpZGUgYSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIGFuZCBpdCBpcyBwb3NzaWJsZQogdG8gYXR0YWNoIEJQRiB0byB0aGlzIGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtX3N5bmMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm1fc3luYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlNjI2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtX3N5bmMudHh0CkBAIC0wLDAgKzEsMTY2IEBACisKK1RoZSBzeW5jIHBhdGNoZXMgd29yayBpcyBiYXNlZCBvbiBpbml0aWFsIHBhdGNoZXMgZnJvbQorS3Jpc3p0aWFuIDxoaWRkZW5AYmFsYWJpdC5odT4gYW5kIG90aGVycyBhbmQgYWRkaXRpb25hbCBwYXRjaGVzCitmcm9tIEphbWFsIDxoYWRpQGN5YmVydXMuY2E+LgorCitUaGUgZW5kIGdvYWwgZm9yIHN5bmNpbmcgaXMgdG8gYmUgYWJsZSB0byBpbnNlcnQgYXR0cmlidXRlcyArIGdlbmVyYXRlCitldmVudHMgc28gdGhhdCB0aGUgYW4gU0EgY2FuIGJlIHNhZmVseSBtb3ZlZCBmcm9tIG9uZSBtYWNoaW5lIHRvIGFub3RoZXIKK2ZvciBIQSBwdXJwb3Nlcy4KK1RoZSBpZGVhIGlzIHRvIHN5bmNocm9uaXplIHRoZSBTQSBzbyB0aGF0IHRoZSB0YWtlb3ZlciBtYWNoaW5lIGNhbiBkbwordGhlIHByb2Nlc3Npbmcgb2YgdGhlIFNBIGFzIGFjY3VyYXRlIGFzIHBvc3NpYmxlIGlmIGl0IGhhcyBhY2Nlc3MgdG8gaXQuCisKK1dlIGFscmVhZHkgaGF2ZSB0aGUgYWJpbGl0eSB0byBnZW5lcmF0ZSBTQSBhZGQvZGVsL3VwZCBldmVudHMuCitUaGVzZSBwYXRjaGVzIGFkZCBhYmlsaXR5IHRvIHN5bmMgYW5kIGhhdmUgYWNjdXJhdGUgbGlmZXRpbWUgYnl0ZSAodG8KK2Vuc3VyZSBwcm9wZXIgZGVjYXkgb2YgU0FzKSBhbmQgcmVwbGF5IGNvdW50ZXJzIHRvIGF2b2lkIHJlcGxheSBhdHRhY2tzCit3aXRoIGFzIG1pbmltYWwgbG9zcyBhdCBmYWlsb3ZlciB0aW1lLgorVGhpcyB3YXkgYSBiYWNrdXAgc3RheXMgYXMgY2xvc2VseSB1cHRvZGF0ZSBhcyBhbiBhY3RpdmUgbWVtYmVyLgorCitCZWNhdXNlIHRoZSBhYm92ZSBpdGVtcyBjaGFuZ2UgZm9yIGV2ZXJ5IHBhY2tldCB0aGUgU0EgcmVjZWl2ZXMsCitpdCBpcyBwb3NzaWJsZSBmb3IgYSBsb3Qgb2YgdGhlIGV2ZW50cyB0byBiZSBnZW5lcmF0ZWQuCitGb3IgdGhpcyByZWFzb24sIHdlIGFsc28gYWRkIGEgbmFnbGUtbGlrZSBhbGdvcml0aG0gdG8gcmVzdHJpY3QKK3RoZSBldmVudHMuIGkuZSB3ZSBhcmUgZ29pbmcgdG8gc2V0IHRocmVzaG9sZHMgdG8gc2F5ICJsZXQgbWUKK2tub3cgaWYgdGhlIHJlcGxheSBzZXF1ZW5jZSB0aHJlc2hvbGQgaXMgcmVhY2hlZCBvciAxMCBzZWNzIGhhdmUgcGFzc2VkIgorVGhlc2UgdGhyZXNob2xkcyBhcmUgc2V0IHN5c3RlbS13aWRlIHZpYSBzeXNjdGxzIG9yIGNhbiBiZSB1cGRhdGVkCitwZXIgU0EuCisKK1RoZSBpZGVudGlmaWVkIGl0ZW1zIHRoYXQgbmVlZCB0byBiZSBzeW5jaHJvbml6ZWQgYXJlOgorLSB0aGUgbGlmZXRpbWUgYnl0ZSBjb3VudGVyCitub3RlIHRoYXQ6IGxpZmV0aW1lIHRpbWUgbGltaXQgaXMgbm90IGltcG9ydGFudCBpZiB5b3UgYXNzdW1lIHRoZSBmYWlsb3ZlcgorbWFjaGluZSBpcyBrbm93biBhaGVhZCBvZiB0aW1lIHNpbmNlIHRoZSBkZWNheSBvZiB0aGUgdGltZSBjb3VudGRvd24KK2lzIG5vdCBkcml2ZW4gYnkgcGFja2V0IGFycml2YWwuCistIHRoZSByZXBsYXkgc2VxdWVuY2UgZm9yIGJvdGggaW5ib3VuZCBhbmQgb3V0Ym91bmQKKworMSkgTWVzc2FnZSBTdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbmxtc2doZHI6YWV2ZW50X2lkOm9wdGlvbmFsLVRMVnMuCisKK1RoZSBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgYXJlOgorCitYRlJNX01TR19ORVdBRSBhbmQgWEZSTV9NU0dfR0VUQUUuCisKK0EgWEZSTV9NU0dfR0VUQUUgZG9lcyBub3QgaGF2ZSBUTFZzLgorQSBYRlJNX01TR19ORVdBRSB3aWxsIGhhdmUgYXQgbGVhc3QgdHdvIFRMVnMgKGFzIGlzCitkaXNjdXNzZWQgZnVydGhlciBiZWxvdykuCisKK2FldmVudF9pZCBzdHJ1Y3R1cmUgbG9va3MgbGlrZToKKworICAgc3RydWN0IHhmcm1fYWV2ZW50X2lkIHsKKyAgICAgICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgICAgICAgICAgIHNhX2lkOworICAgICAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisgICB9OworCit4ZnJtX3VzZXJzYV9pZCBpbiB0aGlzIG1lc3NhZ2UgbGF5b3V0IGlkZW50aWZpZXMgdGhlIFNBLgorCitmbGFncyBhcmUgdXNlZCB0byBpbmRpY2F0ZSBkaWZmZXJlbnQgdGhpbmdzLiBUaGUgcG9zc2libGUKK2ZsYWdzIGFyZToKKyAgICAgICAgWEZSTV9BRV9SVEhSPTEsIC8qIHJlcGxheSB0aHJlc2hvbGQqLworICAgICAgICBYRlJNX0FFX1JWQUw9MiwgLyogcmVwbGF5IHZhbHVlICovCisgICAgICAgIFhGUk1fQUVfTFZBTD00LCAvKiBsaWZldGltZSB2YWx1ZSAqLworICAgICAgICBYRlJNX0FFX0VUSFI9OCwgLyogZXhwaXJ5IHRpbWVyIHRocmVzaG9sZCAqLworICAgICAgICBYRlJNX0FFX0NSPTE2LCAvKiBFdmVudCBjYXVzZSBpcyByZXBsYXkgdXBkYXRlICovCisgICAgICAgIFhGUk1fQUVfQ0U9MzIsIC8qIEV2ZW50IGNhdXNlIGlzIHRpbWVyIGV4cGlyeSAqLworICAgICAgICBYRlJNX0FFX0NVPTY0LCAvKiBFdmVudCBjYXVzZSBpcyBwb2xpY3kgdXBkYXRlICovCisKK0hvdyB0aGVzZSBmbGFncyBhcmUgdXNlZCBpcyBkZXBlbmRlbnQgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUKK21lc3NhZ2UgKGtlcm5lbDwtPnVzZXIpIGFzIHdlbGwgdGhlIGNhdXNlIChjb25maWcsIHF1ZXJ5IG9yIGV2ZW50KS4KK1RoaXMgaXMgZGVzY3JpYmVkIGJlbG93IGluIHRoZSBkaWZmZXJlbnQgbWVzc2FnZXMuCisKK1RoZSBwaWQgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseSBpbiBuZXRsaW5rIHRvIHJlY29nbml6ZSBkaXJlY3Rpb24KKygwIHRvIHRoZSBrZXJuZWwgYW5kIHBpZCA9IHByb2Nlc3NpZCB0aGF0IGNyZWF0ZWQgdGhlIGV2ZW50Cit3aGVuIGdvaW5nIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UpCisKK0EgcHJvZ3JhbSBuZWVkcyB0byBzdWJzY3JpYmUgdG8gbXVsdGljYXN0IGdyb3VwIFhGUk1OTEdSUF9BRVZFTlRTCit0byBnZXQgbm90aWZpZWQgb2YgdGhlc2UgZXZlbnRzLgorCisyKSBUTFZTIHJlZmxlY3QgdGhlIGRpZmZlcmVudCBwYXJhbWV0ZXJzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYSkgYnl0ZSB2YWx1ZSAoWEZSTUFfTFRJTUVfVkFMKQorVGhpcyBUTFYgY2FycmllcyB0aGUgcnVubmluZy9jdXJyZW50IGNvdW50ZXIgZm9yIGJ5dGUgbGlmZXRpbWUgc2luY2UKK2xhc3QgZXZlbnQuCisKK2IpcmVwbGF5IHZhbHVlIChYRlJNQV9SRVBMQVlfVkFMKQorVGhpcyBUTFYgY2FycmllcyB0aGUgcnVubmluZy9jdXJyZW50IGNvdW50ZXIgZm9yIHJlcGxheSBzZXF1ZW5jZSBzaW5jZQorbGFzdCBldmVudC4KKworYylyZXBsYXkgdGhyZXNob2xkIChYRlJNQV9SRVBMQVlfVEhSRVNIKQorVGhpcyBUTFYgY2FycmllcyB0aGUgdGhyZXNob2xkIGJlaW5nIHVzZWQgYnkgdGhlIGtlcm5lbCB0byB0cmlnZ2VyIGV2ZW50cword2hlbiB0aGUgcmVwbGF5IHNlcXVlbmNlIGlzIGV4Y2VlZGVkLgorCitkKSBleHBpcnkgdGltZXIgKFhGUk1BX0VUSU1FUl9USFJFU0gpCitUaGlzIGlzIGEgdGltZXIgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHdoaWNoIGlzIHVzZWQgYXMgdGhlIG5hZ2xlCit2YWx1ZSB0byByYXRlIGxpbWl0IHRoZSBldmVudHMuCisKKzMpIERlZmF1bHQgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBwYXJhbWV0ZXJzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0IHRoZXNlIGV2ZW50cyBzaG91bGQgYmUgdHVybmVkIG9mZiB1bmxlc3MgdGhlcmUgaXMKK2F0IGxlYXN0IG9uZSBsaXN0ZW5lciByZWdpc3RlcmVkIHRvIGxpc3RlbiB0byB0aGUgbXVsdGljYXN0Citncm91cCBYRlJNTkxHUlBfQUVWRU5UUy4KKworUHJvZ3JhbXMgaW5zdGFsbGluZyBTQXMgd2lsbCBuZWVkIHRvIHNwZWNpZnkgdGhlIHR3byB0aHJlc2hvbGRzLCBob3dldmVyLAoraW4gb3JkZXIgdG8gbm90IGNoYW5nZSBleGlzdGluZyBhcHBsaWNhdGlvbnMgc3VjaCBhcyByYWNvb24KK3dlIGFsc28gcHJvdmlkZSBkZWZhdWx0IHRocmVzaG9sZCB2YWx1ZXMgZm9yIHRoZXNlIGRpZmZlcmVudCBwYXJhbWV0ZXJzCitpbiBjYXNlIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQuCisKK3RoZSB0d28gc3lzY3Rscy9wcm9jIGVudHJpZXMgYXJlOgorYSkgL3Byb2Mvc3lzL25ldC9jb3JlL3N5c2N0bF94ZnJtX2FldmVudF9ldGltZQordXNlZCB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgWEZSTUFfRVRJTUVSX1RIUkVTSCBpbiBpbmNyZW1lbnRhbAordW5pdHMgb2YgdGltZSBvZiAxMDBtcy4gVGhlIGRlZmF1bHQgaXMgMTAgKDEgc2Vjb25kKQorCitiKSAvcHJvYy9zeXMvbmV0L2NvcmUvc3lzY3RsX3hmcm1fYWV2ZW50X3JzZXF0aAordXNlZCB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBYRlJNQV9SRVBMQVlfVEhSRVNIIHBhcmFtZXRlcgoraW4gaW5jcmVtZW50YWwgcGFja2V0IGNvdW50LiBUaGUgZGVmYXVsdCBpcyB0d28gcGFja2V0cy4KKworNCkgTWVzc2FnZSB0eXBlcworLS0tLS0tLS0tLS0tLS0tLQorCithKSBYRlJNX01TR19HRVRBRSBpc3N1ZWQgYnkgdXNlci0tPmtlcm5lbC4KK1hGUk1fTVNHX0dFVEFFIGRvZXMgbm90IGNhcnJ5IGFueSBUTFZzLgorVGhlIHJlc3BvbnNlIGlzIGEgWEZSTV9NU0dfTkVXQUUgd2hpY2ggaXMgZm9ybWF0dGVkIGJhc2VkIG9uIHdoYXQKK1hGUk1fTVNHX0dFVEFFIHF1ZXJpZWQgZm9yLgorVGhlIHJlc3BvbnNlIHdpbGwgYWx3YXlzIGhhdmUgWEZSTUFfTFRJTUVfVkFMIGFuZCBYRlJNQV9SRVBMQVlfVkFMIFRMVnMuCisqaWYgWEZSTV9BRV9SVEhSIGZsYWcgaXMgc2V0LCB0aGVuIFhGUk1BX1JFUExBWV9USFJFU0ggaXMgYWxzbyByZXRyaWV2ZWQKKyppZiBYRlJNX0FFX0VUSFIgZmxhZyBpcyBzZXQsIHRoZW4gWEZSTUFfRVRJTUVSX1RIUkVTSCBpcyBhbHNvIHJldHJpZXZlZAorCitiKSBYRlJNX01TR19ORVdBRSBpcyBpc3N1ZWQgYnkgZWl0aGVyIHVzZXIgc3BhY2UgdG8gY29uZmlndXJlCitvciBrZXJuZWwgdG8gYW5ub3VuY2UgZXZlbnRzIG9yIHJlc3BvbmQgdG8gYSBYRlJNX01TR19HRVRBRS4KKworaSkgdXNlciAtLT4ga2VybmVsIHRvIGNvbmZpZ3VyZSBhIHNwZWNpZmljIFNBLgorYW55IG9mIHRoZSB2YWx1ZXMgb3IgdGhyZXNob2xkIHBhcmFtZXRlcnMgY2FuIGJlIHVwZGF0ZWQgYnkgcGFzc2luZyB0aGUKK2FwcHJvcHJpYXRlIFRMVi4KK0EgcmVzcG9uc2UgaXMgaXNzdWVkIGJhY2sgdG8gdGhlIHNlbmRlciBpbiB1c2VyIHNwYWNlIHRvIGluZGljYXRlIHN1Y2Nlc3MKK29yIGZhaWx1cmUuCitJbiB0aGUgY2FzZSBvZiBzdWNjZXNzLCBhZGRpdGlvbmFsbHkgYW4gZXZlbnQgd2l0aAorWEZSTV9NU0dfTkVXQUUgaXMgYWxzbyBpc3N1ZWQgdG8gYW55IGxpc3RlbmVycyBhcyBkZXNjcmliZWQgaW4gaWlpKS4KKworaWkpIGtlcm5lbC0+dXNlciBkaXJlY3Rpb24gYXMgYSByZXNwb25zZSB0byBYRlJNX01TR19HRVRBRQorVGhlIHJlc3BvbnNlIHdpbGwgYWx3YXlzIGhhdmUgWEZSTUFfTFRJTUVfVkFMIGFuZCBYRlJNQV9SRVBMQVlfVkFMIFRMVnMuCitUaGUgdGhyZXNob2xkIFRMVnMgd2lsbCBiZSBpbmNsdWRlZCBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZCBpbgordGhlIFhGUk1fTVNHX0dFVEFFIG1lc3NhZ2UuCisKK2lpaSkga2VybmVsLT51c2VyIHRvIHJlcG9ydCBhcyBldmVudCBpZiBzb21lb25lIHNldHMgYW55IHZhbHVlcyBvcgordGhyZXNob2xkcyBmb3IgYW4gU0EgdXNpbmcgWEZSTV9NU0dfTkVXQUUgKGFzIGRlc2NyaWJlZCBpbiAjaSBhYm92ZSkuCitJbiBzdWNoIGEgY2FzZSBYRlJNX0FFX0NVIGZsYWcgaXMgc2V0IHRvIGluZm9ybSB0aGUgdXNlciB0aGF0Cit0aGUgY2hhbmdlIGhhcHBlbmVkIGFzIGEgcmVzdWx0IG9mIGFuIHVwZGF0ZS4KK1RoZSBtZXNzYWdlIHdpbGwgYWx3YXlzIGhhdmUgWEZSTUFfTFRJTUVfVkFMIGFuZCBYRlJNQV9SRVBMQVlfVkFMIFRMVnMuCisKK2l2KSBrZXJuZWwtPnVzZXIgdG8gcmVwb3J0IGV2ZW50IHdoZW4gcmVwbGF5IHRocmVzaG9sZCBvciBhIHRpbWVvdXQKK2lzIGV4Y2VlZGVkLgorSW4gc3VjaCBhIGNhc2UgZWl0aGVyIFhGUk1fQUVfQ1IgKHJlcGxheSBleGNlZWRlZCkgb3IgWEZSTV9BRV9DRSAodGltZW91dAoraGFwcGVuZWQpIGlzIHNldCB0byBpbmZvcm0gdGhlIHVzZXIgd2hhdCBoYXBwZW5lZC4KK05vdGUgdGhlIHR3byBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorVGhlIG1lc3NhZ2Ugd2lsbCBhbHdheXMgaGF2ZSBYRlJNQV9MVElNRV9WQUwgYW5kIFhGUk1BX1JFUExBWV9WQUwgVExWcy4KKworRXhjZXB0aW9ucyB0byB0aHJlc2hvbGQgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIGFuIFNBIHRoYXQgaXMgZ2V0dGluZyBoaXQgYnkgdHJhZmZpYyBpbiBidXJzdHMgc3VjaCB0aGF0Cit0aGVyZSBpcyBhIHBlcmlvZCB3aGVyZSB0aGUgdGltZXIgdGhyZXNob2xkIGV4cGlyZXMgd2l0aCBubyBwYWNrZXRzCitzZWVuLCB0aGVuIGFuIG9kZCBiZWhhdmlvciBpcyBzZWVuIGFzIGZvbGxvd3M6CitUaGUgZmlyc3QgcGFja2V0IGFycml2YWwgYWZ0ZXIgYSB0aW1lciBleHBpcnkgd2lsbCB0cmlnZ2VyIGEgdGltZW91dAorYWV2ZW50OyBpLmUgd2UgZG9udCB3YWl0IGZvciBhIHRpbWVvdXQgcGVyaW9kIG9yIGEgcGFja2V0IHRocmVzaG9sZAordG8gYmUgcmVhY2hlZC4gVGhpcyBpcyBkb25lIGZvciBzaW1wbGljaXR5IGFuZCBlZmZpY2llbmN5IHJlYXNvbnMuCisKKy1KSFMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vcGNpLnR4dAppbmRleCA3MTEyMTBiLi42NmJiYmYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY2kudHh0CkBAIC0yNTksNyArMjU5LDE3IEBACiB0byBiZSBoYW5kbGVkIGJ5IHBsYXRmb3JtIGFuZCBnZW5lcmljIGNvZGUsIG5vdCBpbmRpdmlkdWFsIGRyaXZlcnMuCiAKIAotOC4gT2Jzb2xldGUgZnVuY3Rpb25zCis4LiBWZW5kb3IgYW5kIGRldmljZSBpZGVudGlmaWNhdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRm9yIHRoZSBmdXR1cmUsIGxldCdzIGF2b2lkIGFkZGluZyBkZXZpY2UgaWRzIHRvIGluY2x1ZGUvbGludXgvcGNpX2lkcy5oLgorCitQQ0lfVkVORE9SX0lEX3h4eCBmb3IgdmVuZG9ycywgYW5kIGEgaGV4IGNvbnN0YW50IGZvciBkZXZpY2UgaWRzLgorCitSYXRpb25hbGU6ICBQQ0lfVkVORE9SX0lEX3h4eCBjb25zdGFudHMgYXJlIHJlLXVzZWQsIGJ1dCBkZXZpY2UgaWRzIGFyZSBub3QuCisgICAgRnVydGhlciwgZGV2aWNlIGlkcyBhcmUgYXJiaXRyYXJ5IGhleCBudW1iZXJzLCBub3JtYWxseSB1c2VkIG9ubHkgaW4gYQorICAgIHNpbmdsZSBsb2NhdGlvbiwgdGhlIHBjaV9kZXZpY2VfaWQgdGFibGUuCisKKzkuIE9ic29sZXRlIGZ1bmN0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiBUaGVyZSBhcmUgc2V2ZXJhbCBmdW5jdGlvbnMgd2hpY2ggeW91IG1pZ2h0IGNvbWUgYWNyb3NzIHdoZW4gdHJ5aW5nIHRvCiBwb3J0IGFuIG9sZCBkcml2ZXIgdG8gdGhlIG5ldyBQQ0kgaW50ZXJmYWNlLiAgVGhleSBhcmUgbm8gbG9uZ2VyIHByZXNlbnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dCBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dAppbmRleCA5NzQyMGYwLi40NzM5YzVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CkBAIC0xLDUgKzEsMTEgQEAKIFRoaXMgZmlsZSBkZXRhaWxzIGNoYW5nZXMgaW4gMi42IHdoaWNoIGFmZmVjdCBQQ01DSUEgY2FyZCBkcml2ZXIgYXV0aG9yczoKIAorKiBOZXcgcmVsZWFzZSBoZWxwZXIgKGFzIG9mIDIuNi4xNykKKyAgIEluc3RlYWQgb2YgY2FsbGluZyBwY21jaWFfcmVsZWFzZV97Y29uZmlndXJhdGlvbixpbyxpcnEsd2lufSwgYWxsIHRoYXQncworICAgbmVjZXNzYXJ5IG5vdyBpcyBjYWxsaW5nIHBjbWNpYV9kaXNhYmxlX2RldmljZS4gQXMgdGhlcmUgaXMgbm8gdmFsaWQKKyAgIHJlYXNvbiBsZWZ0IHRvIGNhbGwgcGNtY2lhX3JlbGVhc2VfaW8gYW5kIHBjbWNpYV9yZWxlYXNlX2lycSwgdGhlCisgICBleHBvcnRzIGZvciB0aGVtIHdlcmUgcmVtb3ZlZC4KKwogKiBVbmlmeSBkZXRhY2ggYW5kIFJFTU9WQUwgZXZlbnQgY29kZSwgYXMgd2VsbCBhcyBhdHRhY2ggYW5kIElOU0VSVElPTgogICBjb2RlIChhcyBvZiAyLjYuMTYpCiAgICAgICAgdm9pZCAoKnJlbW92ZSkgICAgICAgICAgKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dAppbmRleCBkMThhNTdkLi40M2E4ODlmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dApAQCAtMTQwLDcgKzE0MCw3IEBACiBJQk0gVFAgVDQyCQkJczNfYmlvcyAoMikKIElCTSBUaGlua1BhZCBUNDJwICgyMzczLUdURykJczNfYmlvcyAoMikKIElCTSBUUCBYMjAJCQk/Pz8gKCopCi1JQk0gVFAgWDMwCQkJczNfYmlvcyAoMikKK0lCTSBUUCBYMzAJCQlzM19iaW9zLCBzM19tb2RlICg0KQogSUJNIFRQIFgzMSAvIFR5cGUgMjY3Mi1YWEggICAgICBub25lICgxKSwgdXNlIHJhZGVvbnRvb2wgKGh0dHA6Ly9mZGQuY29tL3NvZnR3YXJlL3JhZGVvbi8pIHRvIHR1cm4gb2ZmIGJhY2tsaWdodC4KIElCTSBUUCBYMzIJCQlub25lICgxKSwgYnV0IGJhY2tsaWdodCBpcyBvbiBhbmQgdmlkZW8gaXMgdHJhc2hlZCBhZnRlciBsb25nIHN1c3BlbmQuIHMzX2Jpb3MsczNfbW9kZSAoNCkgd29ya3MgdG9vLiBQZXJoYXBzIHRoYXQgZ2V0cyBiZXR0ZXIgcmVzdWx0cz8KIElCTSBUaGlua3BhZCBYNDAgVHlwZSAyMzcxLTdKRyAgczNfYmlvcyxzM19tb2RlICg0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZCBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKaW5kZXggMDlmNjMwMC4uYzE3MzgwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0xLDMgKzEsMjggQEAKK1JlbGVhc2UgRGF0ZQk6IE1vbiBBcHIgMTEgMTI6Mjc6MjIgRVNUIDIwMDYgLSBTZW9rbWFubiBKdSA8c2p1QGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uIDogMi4yMC40LjggKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjYgKGNtbSBtb2R1bGUpCitPbGRlciBWZXJzaW9uCTogMi4yMC40LjcgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjYgKGNtbSBtb2R1bGUpCisKKzEuCUZpeGVkIGEgYnVnIGluIG1lZ2FyYWlkX3Jlc2V0X2hhbmRsZXIoKS4KKwlDdXN0b21lciByZXBvcnRlZCAiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlCisJYXQgdmlydHVhbCBhZGRyZXNzIDAwMDAwMDAwIiB3aGVuIHN5c3RlbSBnb2VzIHRvIHJlc2V0IGNvbmRpdGlvbgorCWZvciBzb21lIHJlYXNvbi4gSXQgaGFwcGVuZWQgcmFuZG9tbHkuCisJUm9vdCBDYXVzZTogaW4gdGhlIG1lZ2FyYWlkX3Jlc2V0X2hhbmRsZXIoKSwgdGhlcmUgaXMgcG9zc2liaWxpdHkgbm90CisJcmV0dXJuaW5nIHBlbmRpbmcgcGFja2V0cyBpbiB0aGUgcGVuZF9saXN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZQorCXBlbmRpbmcgcGFja2V0cy4KKwlGaXg6IE1hZGUgdGhlIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHNvIHRoYXQgaXQgd2lsbCByZXR1cm4gYWxsIHBhY2tldHMKKwlpbiB0aGUgcGVuZF9saXN0LgorCisyLglBZGRlZCBjaGFuZ2UgcmVxdWVzdC4KKwlBcyBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIFVSTCwgcm1iKCkgb25seSBkaWRuJ3QgaGVscCB0aGUKKwlwcm9ibGVtLiBJIGhhZCB0byBpbmNyZWFzZSB0aGUgbG9vcCBjb3VudGVyIHRvIDB4RkZGRkZGLiAoNiBGJ3MpCisJaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1saW51eC1zY3NpJm09MTEwOTcxMDYwNTAyNDk3Jnc9MgorCisJSSBhdHRhY2hlZCBhIHBhdGNoIGZvciB5b3VyIHJlZmVyZW5jZSwgdG9vLgorCUNvdWxkIHlvdSBjaGVjayBhbmQgZ2V0IHRoaXMgZml4IGluIHlvdXIgZHJpdmVyPworCisJQmVzdCBSZWdhcmRzLAorCUp1bidpY2hpIE5vbXVyYQorCiBSZWxlYXNlIERhdGUJOiBGcmkgTm92IDExIDEyOjI3OjIyIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KIEN1cnJlbnQgVmVyc2lvbiA6IDIuMjAuNC43IChzY3NpIG1vZHVsZSksIDIuMjAuMi42IChjbW0gbW9kdWxlKQogT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC42IChzY3NpIG1vZHVsZSksIDIuMjAuMi42IChjbW0gbW9kdWxlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CmluZGV4IDMzMWFmZDcuLmNlNzY3YjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKQEAgLTE5LDkgKzE5LDkgQEAKIAlbMi0xLTFdIE92ZXJ2aWV3CiAJWzItMS0yXSBGbG93IG9mIHNjbWRzIHRocm91Z2ggRUgKIAlbMi0xLTNdIEZsb3cgb2YgY29udHJvbAotICAgIFsyLTJdIEVIIHRocm91Z2ggaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKQotCVsyLTItMV0gUHJlIGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCi0JWzItMi0yXSBQb3N0IGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCisgICAgWzItMl0gRUggdGhyb3VnaCB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKKwlbMi0yLTFdIFByZSB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCisJWzItMi0yXSBQb3N0IHRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKIAlbMi0yLTNdIFRoaW5ncyB0byBjb25zaWRlcgogCiAKQEAgLTQxMyw5ICs0MTMsOSBAQAogCSAgICBsYXllciBvZiBmYWlsdXJlIG9mIHRoZSBzY21kcy4KIAogCi1bMi0yXSBFSCB0aHJvdWdoIGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkKK1syLTJdIEVIIHRocm91Z2ggdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpCiAKLSBob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIGlzIGludm9rZWQgaW4gdGhlIHBsYWNlIG9mCisgdHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIGlzIGludm9rZWQgaW4gdGhlIHBsYWNlIG9mCiBzY3NpX3VuamFtX2hvc3QoKSBhbmQgaXQgaXMgcmVzcG9uc2libGUgZm9yIHdob2xlIHJlY292ZXJ5IHByb2Nlc3MuCiBPbiBjb21wbGV0aW9uLCB0aGUgaGFuZGxlciBzaG91bGQgaGF2ZSBtYWRlIGxvd2VyIGxheWVycyBmb3JnZXQgYWJvdXQKIGFsbCBmYWlsZWQgc2NtZHMgYW5kIGVpdGhlciByZWFkeSBmb3IgbmV3IGNvbW1hbmRzIG9yIG9mZmxpbmUuICBBbHNvLApAQCAtNDI0LDcgKzQyNCw3IEBACiBleGNlcHQgZm9yICMxIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWhfc3RyYXRlZ3lfaGFuZGxlcigpLgogCiAKLVsyLTItMV0gUHJlIGhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCitbMi0yLTFdIFByZSB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCiAKICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHRydWUgb24gZW50cnkgdG8gdGhlIGhhbmRsZXIuCiAKQEAgLTQzNyw3ICs0MzcsNyBAQAogIC0gc2hvc3QtPmhvc3RfZmFpbGVkID09IHNob3N0LT5ob3N0X2J1c3kKIAogCi1bMi0yLTJdIFBvc3QgaG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSBTQ1NJIG1pZGxheWVyIGNvbmRpdGlvbnMKK1syLTItMl0gUG9zdCB0cmFuc3BvcnR0LT5laF9zdHJhdGVneV9oYW5kbGVyKCkgU0NTSSBtaWRsYXllciBjb25kaXRpb25zCiAKICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlIG9uIGV4aXQgZnJvbSB0aGUgaGFuZGxlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CmluZGV4IDhiYmFlM2UuLjc1YTUzNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKQEAgLTgwNCw3ICs4MDQsNiBAQAogICAgZWhfYnVzX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGJ1cyByZXNldAogICAgZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGRldmljZSByZXNldAogICAgZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgaG9zdCAoaG9zdCBidXMgYWRhcHRlcikKLSAgIGVoX3N0cmF0ZWd5X2hhbmRsZXIgLSBkcml2ZXIgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIHNjc2lfdW5qYW1faG9zdCgpCiAgICBpbmZvIC0gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGhvc3QKICAgIGlvY3RsIC0gZHJpdmVyIGNhbiByZXNwb25kIHRvIGlvY3RscwogICAgcHJvY19pbmZvIC0gc3VwcG9ydHMgL3Byb2Mvc2NzaS97ZHJpdmVyX25hbWV9L3tob3N0X25vfQpAQCAtOTcwLDI0ICs5NjksNiBAQAogCiAKIC8qKgotICogICAgICBlaF9zdHJhdGVneV9oYW5kbGVyIC0gZHJpdmVyIHN1cHBsaWVkIGFsdGVybmF0ZSB0byBzY3NpX3VuamFtX2hvc3QoKQotICogICAgICBAc2hwOiBob3N0IG9uIHdoaWNoIGVycm9yIGhhcyBvY2N1cnJlZAotICoKLSAqICAgICAgUmV0dXJucyBUUlVFIGlmIGhvc3QgdW5qYW1tZWQsIGVsc2UgRkFMU0UuCi0gKgotICogICAgICBMb2Nrczogbm9uZQotICoKLSAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCi0gKgotICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBMTEQgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIAotICogICAgICBzY3NpX3VuamFtX2hvc3QoKSBmb3VuZCBpbiBzY3NpX2Vycm9yLmMKLSAqCi0gKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECi0gKiovCi0gICAgIGludCBlaF9zdHJhdGVneV9oYW5kbGVyKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCi0KLQotLyoqCiAgKiAgICAgIGluZm8gLSBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gaG9zdDogZHJpdmVyIG5hbWUgcGx1cyBkYXRhCiAgKiAgICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBnaXZlbiBob3N0CiAgKiAgICAgIEBzaHA6IGhvc3QgdG8gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKaW5kZXggNDJlZjk5Ny4uODhhZDYxNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCisrKyBiL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgpAQCAtMywxNCArMywxMSBAQAogCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0gICAkSWQ6IGRyaXZlcix2IDEuMTAgMjAwMi8wNy8yMiAxNToyNzozMCBybWsgRXhwICQKLQotCiBUaGlzIGRvY3VtZW50IGlzIG1lYW50IGFzIGEgYnJpZWYgb3ZlcnZpZXcgb2Ygc29tZSBhc3BlY3RzIG9mIHRoZSBuZXcgc2VyaWFsCiBkcml2ZXIuICBJdCBpcyBub3QgY29tcGxldGUsIGFueSBxdWVzdGlvbnMgeW91IGhhdmUgc2hvdWxkIGJlIGRpcmVjdGVkIHRvCiA8cm1rQGFybS5saW51eC5vcmcudWs+CiAKLVRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIHdpdGhpbiBzZXJpYWxfYW1iYS5jLgorVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBjb250YWluZWQgd2l0aGluIGFtYmFfcGwwMTEuYy4KIAogCiAKQEAgLTMxLDYgKzI4LDExIEBACiB0aGUgY29ycmVjdCBwb3J0IHN0cnVjdHVyZSAodmlhIHVhcnRfZ2V0X2NvbnNvbGUpIGFuZCBkZWNvZGluZyBjb21tYW5kIGxpbmUKIGFyZ3VtZW50cyAodWFydF9wYXJzZV9vcHRpb25zKS4KIAorVGhlcmUgaXMgYWxzbyBhIGhlbHBlciBmdW5jdGlvbiAodWFydF93cml0ZV9jb25zb2xlKSB3aGljaCBwZXJmb3JtcyBhCitjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHdyaXRlLCB0cmFuc2xhdGluZyBuZXdsaW5lcyB0byBDUkxGIHNlcXVlbmNlcy4KK0RyaXZlciB3cml0ZXJzIGFyZSByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcKK3RoZWlyIG93biB2ZXJzaW9uLgorCiAKIExvY2tpbmcKIC0tLS0tLS0KQEAgLTg2LDYgKzg4LDcgQEAKIAkJLSBUSU9DTV9EVFIJRFRSIHNpZ25hbC4KIAkJLSBUSU9DTV9PVVQxCU9VVDEgc2lnbmFsLgogCQktIFRJT0NNX09VVDIJT1VUMiBzaWduYWwuCisJCS0gVElPQ01fTE9PUAlTZXQgdGhlIHBvcnQgaW50byBsb29wYmFjayBtb2RlLgogCUlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0LCB0aGUgc2lnbmFsIHNob3VsZCBiZSBkcml2ZW4KIAlhY3RpdmUuICBJZiB0aGUgYml0IGlzIGNsZWFyLCB0aGUgc2lnbmFsIHNob3VsZCBiZSBkcml2ZW4KIAlpbmFjdGl2ZS4KQEAgLTE0MSw2ICsxNDQsMTAgQEAKICAgZW5hYmxlX21zKHBvcnQpCiAJRW5hYmxlIHRoZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cy4KIAorCVRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuICBNb2RlbSBzdGF0dXMKKwlpbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHRoZSBzaHV0ZG93biBtZXRob2QgaXMKKwljYWxsZWQuCisKIAlMb2NraW5nOiBwb3J0LT5sb2NrIHRha2VuLgogCUludGVycnVwdHM6IGxvY2FsbHkgZGlzYWJsZWQuCiAJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCkBAIC0xNjAsNiArMTY3LDggQEAKIAlzdGF0ZS4gIEVuYWJsZSB0aGUgcG9ydCBmb3IgcmVjZXB0aW9uLiAgSXQgc2hvdWxkIG5vdCBhY3RpdmF0ZQogCVJUUyBub3IgRFRSOyB0aGlzIHdpbGwgYmUgZG9uZSB2aWEgYSBzZXBhcmF0ZSBjYWxsIHRvIHNldF9tY3RybC4KIAorCVRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgcG9ydCBpcyBpbml0aWFsbHkgb3BlbmVkLgorCiAJTG9ja2luZzogcG9ydF9zZW0gdGFrZW4uCiAJSW50ZXJydXB0czogZ2xvYmFsbHkgZGlzYWJsZWQuCiAKQEAgLTE2OSw2ICsxNzgsMTEgQEAKIAlSVFMgbm9yIERUUjsgdGhpcyB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgdmlhIGEgc2VwYXJhdGUKIAljYWxsIHRvIHNldF9tY3RybC4KIAorCURyaXZlcnMgbXVzdCBub3QgYWNjZXNzIHBvcnQtPmluZm8gb25jZSB0aGlzIGNhbGwgaGFzIGNvbXBsZXRlZC4KKworCVRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB1c2VycyBvZgorCXRoaXMgcG9ydC4KKwogCUxvY2tpbmc6IHBvcnRfc2VtIHRha2VuLgogCUludGVycnVwdHM6IGNhbGxlciBkZXBlbmRlbnQuCiAKQEAgLTIwMCwxMiArMjE0LDEzIEBACiAJVGhlIGludGVyYWN0aW9uIG9mIHRoZSBpZmxhZyBiaXRzIGlzIGFzIGZvbGxvd3MgKHBhcml0eSBlcnJvcgogCWdpdmVuIGFzIGFuIGV4YW1wbGUpOgogCVBhcml0eSBlcnJvcglJTlBDSwlJR05QQVIKLQlOb25lCQluL2EJbi9hCWNoYXJhY3RlciByZWNlaXZlZAotCVllcwkJbi9hCTAJY2hhcmFjdGVyIGRpc2NhcmRlZAotCVllcwkJMAkxCWNoYXJhY3RlciByZWNlaXZlZCwgbWFya2VkIGFzCisJbi9hCQkwCW4vYQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcwogCQkJCQlUVFlfTk9STUFMCi0JWWVzCQkxCTEJY2hhcmFjdGVyIHJlY2VpdmVkLCBtYXJrZWQgYXMKKwlOb25lCQkxCW4vYQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcworCQkJCQlUVFlfTk9STUFMCisJWWVzCQkxCTAJY2hhcmFjdGVyIHJlY2VpdmVkLCBtYXJrZWQgYXMKIAkJCQkJVFRZX1BBUklUWQorCVllcwkJMQkxCWNoYXJhY3RlciBkaXNjYXJkZWQKIAogCU90aGVyIGZsYWdzIG1heSBiZSB1c2VkIChlZywgeG9uL3hvZmYgY2hhcmFjdGVycykgaWYgeW91cgogCWhhcmR3YXJlIHN1cHBvcnRzIGhhcmR3YXJlICJzb2Z0IiBmbG93IGNvbnRyb2wuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFkZWY2MDQuLjBlZTJjN2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC0xMjAsNiArMTIwLDM0IEBACiAgICAgZW5hYmxlICAJLSBlbmFibGUgY2FyZAogCQktIERlZmF1bHQ6IGVuYWJsZWQsIGZvciBQQ0kgYW5kIElTQSBQblAgY2FyZHMKIAorICBNb2R1bGUgc25kLWFkbGliCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQWRMaWIgRk0gY2FyZHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBPUEwgY2hpcAorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuIEl0IGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlLCBzbworICAgIHRoZSBwb3J0IG11c3QgYmUgc3BlY2lmaWVkLiBGb3IgYWN0dWFsIEFkTGliIEZNIGNhcmRzIGl0IHdpbGwgYmUgMHgzODguCisgICAgTm90ZSB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBoYXZlIFBDTSBzdXBwb3J0IGFuZCBubyBtaXhlcjsgb25seSBGTQorICAgIHN5bnRoZXNpcy4KKworICAgIE1ha2Ugc3VyZSB5b3UgaGF2ZSAic2JpbG9hZCIgZnJvbSB0aGUgYWxzYS10b29scyBwYWNrYWdlIGF2YWlsYWJsZSBhbmQsCisgICAgYWZ0ZXIgbG9hZGluZyB0aGUgbW9kdWxlLCBmaW5kIG91dCB0aGUgYXNzaWduZWQgQUxTQSBzZXF1ZW5jZXIgcG9ydAorICAgIG51bWJlciB0aHJvdWdoICJzYmlsb2FkIC1sIi4gRXhhbXBsZSBvdXRwdXQ6CisKKyAgICAgIFBvcnQgICAgIENsaWVudCBuYW1lICAgICAgICAgICAgICAgICAgICAgICBQb3J0IG5hbWUKKyAgICAgIDY0OjAgICAgIE9QTDIgRk0gc3ludGggICAgICAgICAgICAgICAgICAgICBPUEwyIEZNIFBvcnQKKworICAgIExvYWQgdGhlIHN0ZC5zYiBhbmQgZHJ1bXMuc2IgcGF0Y2hlcyBhbHNvIHN1cHBsaWVkIGJ5IHNiaWxvYWQ6CisKKyAgICAgIHNiaWxvYWQgLXAgNjQ6MCBzdGQuc2IgZHJ1bXMuc2IKKworICAgIElmIHlvdSB1c2UgdGhpcyBkcml2ZXIgdG8gZHJpdmUgYW4gT1BMMywgeW91IGNhbiB1c2Ugc3RkLm8zIGFuZCBkcnVtcy5vMworICAgIGluc3RlYWQuIFRvIGhhdmUgdGhlIGNhcmQgcHJvZHVjZSBzb3VuZCwgdXNlIGFwbGF5bWlkaSBmcm9tIGFsc2EtdXRpbHM6CisKKyAgICAgIGFwbGF5bWlkaSAtcCA2NDowIGZvby5taWQKKwogICBNb2R1bGUgc25kLWFkMTgxNmEKICAgLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE5MCw2ICsyMTgsMTUgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KIAorICBNb2R1bGUgc25kLWFsczMwMAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciAgQXZhbmNlIExvZ2ljIEFMUzMwMCBhbmQgQUxTMzAwKworCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKICAgTW9kdWxlIHNuZC1hbHM0MDAwCiAgIC0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03MDEsNiArNzM4LDcgQEAKIAkgIHVuaXdpbGwJMy1qYWNrCiAJICBGMTczNAkJMi1qYWNrCiAJICBsZwkJTEcgbGFwdG9wIChtMSBleHByZXNzIGR1YWwpCisJICBsZy1sdwkJTEcgTFcyMCBsYXB0b3AKIAkgIHRlc3QJCWZvciB0ZXN0aW5nL2RlYnVnZ2luZyBwdXJwb3NlLCBhbG1vc3QgYWxsIGNvbnRyb2xzIGNhbiBiZQogCQkJYWRqdXN0ZWQuICBBcHBlYXJpbmcgb25seSB3aGVuIGNvbXBpbGVkIHdpdGgKIAkJCSRDT05GSUdfU05EX0RFQlVHPXkKQEAgLTEwMTMsNiArMTA1MSwyMyBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgIE1vZHVsZSBzbmQtbWlybworICAtLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgTWlybyBzb3VuZGNhcmRzOiBtaXJvU09VTkQgUENNIDEgcHJvLCAKKwkJCQltaXJvU09VTkQgUENNIDEyLAorCQkJCW1pcm9TT1VORCBQQ00gMjAgUmFkaW8uCisKKyAgICBwb3J0CS0gUG9ydCAjICgweDUzMCwweDYwNCwweGU4MCwweGY0MCkKKyAgICBpcnEJCS0gSVJRICMgKDUsNyw5LDEwLDExKQorICAgIGRtYTEJLSAxc3QgZG1hICMgKDAsMSwzKQorICAgIGRtYTIJLSAybmQgZG1hICMgKDAsMSkKKyAgICBtcHVfcG9ydAktIE1QVS00MDEgcG9ydCAjICgweDMwMCwweDMxMCwweDMyMCwweDMzMCkKKyAgICBtcHVfaXJxCS0gTVBVLTQwMSBpcnEgIyAoNSw3LDksMTApCisgICAgZm1fcG9ydAktIEZNIFBvcnQgIyAoMHgzODgpCisgICAgd3NzCQktIGVuYWJsZSBXU1MgbW9kZQorICAgIGlkZQkJLSBlbmFibGUgb25ib2FyZCBpZGUgc3VwcG9ydAorCiAgIE1vZHVsZSBzbmQtbWl4YXJ0CiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyMDIsNiArMTI1NywyMCBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgIE1vZHVsZSBzbmQtcmlwdGlkZQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQ29uZXhhbnQgUmlwdGlkZSBjaGlwCisKKyAgICAgIGpveXN0aWNrX3BvcnQJLSBKb3lzdGljayBwb3J0ICMgKGRlZmF1bHQ6IDB4MjAwKQorICAgICAgbXB1X3BvcnQJCS0gTVBVNDAxIHBvcnQgIyAoZGVmYXVsdDogMHgzMzApCisgICAgICBvcGwzX3BvcnQJCS0gT1BMMyBwb3J0ICMgKGRlZmF1bHQ6IDB4Mzg4KQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorICAgIFlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIGZpcm13YXJlIGZpbGUgInJpcHRpZGUuaGV4IiB0byB0aGUgc3RhbmRhcmQKKyAgICBmaXJtd2FyZSBwYXRoIChlLmcuIC9saWIvZmlybXdhcmUpLgorCiAgIE1vZHVsZSBzbmQtcm1lMzIKICAgLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQXVkaW9waGlsZS1Vc2IudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlvcGhpbGUtVXNiLnR4dAppbmRleCA0NjkyYzhlLi5iNTM1YzJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQXVkaW9waGlsZS1Vc2IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpb3BoaWxlLVVzYi50eHQKQEAgLTEsNCArMSw0IEBACi0JR3VpZGUgdG8gdXNpbmcgTS1BdWRpbyBBdWRpb3BoaWxlIFVTQiB3aXRoIEFMU0EgYW5kIEphY2sJdjEuMgorCUd1aWRlIHRvIHVzaW5nIE0tQXVkaW8gQXVkaW9waGlsZSBVU0Igd2l0aCBBTFNBIGFuZCBKYWNrCXYxLjMKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAJICAgIFRoaWJhdWx0IExlIE1ldXIgPFRoaWJhdWx0LkxlTWV1ckBzdXBlbGVjLmZyPgpAQCAtMjIsMTYgKzIyLDE2IEBACiAgKiBNaWRpIEluIChNaSkKICAqIE1pZGkgT3V0IChNbykKIAotVGhlIGludGVybmFsIERBQy9BREMgaGFzIHRoZSBmb2xsb3dpbmcgY2FyYWN0ZXJpc3RpY3M6CitUaGUgaW50ZXJuYWwgREFDL0FEQyBoYXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3M6CiAqIHNhbXBsZSBkZXB0aCBvZiAxNiBvciAyNCBiaXRzCiAqIHNhbXBsZSByYXRlIGZyb20gOGtIeiB0byA5NmtIegotKiBUd28gcG9ydHMgY2FuJ3QgdXNlIGRpZmZlcmVudCBzYW1wbGUgZGVwdGhzIGF0IHRoZSBzYW1lIHRpbWUuTW9yZW92ZXIsIHRoZSAKKyogVHdvIHBvcnRzIGNhbid0IHVzZSBkaWZmZXJlbnQgc2FtcGxlIGRlcHRocyBhdCB0aGUgc2FtZSB0aW1lLiBNb3Jlb3ZlciwgdGhlIAogQXVkaW9waGlsZSBVU0IgZG9jdW1lbnRhdGlvbiBnaXZlcyB0aGUgZm9sbG93aW5nIFdhcm5pbmc6ICJQbGVhc2UgZXhpdCBhbnkgCiBhdWRpbyBhcHBsaWNhdGlvbiBydW5uaW5nIGJlZm9yZSBzd2l0Y2hpbmcgYmV0d2VlbiBiaXQgZGVwdGhzIgogCiBEdWUgdG8gdGhlIFVTQiAxLjEgYmFuZHdpZHRoIGxpbWl0YXRpb24sIGEgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJmYWNlcyBjYW4gYmUgCiBhY3RpdmF0ZWQgYXQgdGhlIHNhbWUgdGltZSBkZXBlbmRpbmcgb24gdGhlIGF1ZGlvIG1vZGUgc2VsZWN0ZWQ6Ci0gKiAxNi1iaXQvNDhrSHogPT0+IDQgY2hhbm5lbHMgaW4vIDQgY2hhbm5lbHMgb3V0CisgKiAxNi1iaXQvNDhrSHogPT0+IDQgY2hhbm5lbHMgaW4vNCBjaGFubmVscyBvdXQKICAgIC0gQWkrQW8rRGkrRG8KICAqIDI0LWJpdC80OGtIeiA9PT4gNCBjaGFubmVscyBpbi8yIGNoYW5uZWxzIG91dCwgCiAgICAgICAgICAgICAgICAgICAgIG9yIDIgY2hhbm5lbHMgaW4vNCBjaGFubmVscyBvdXQKQEAgLTQxLDggKzQxLDggQEAKIAogSW1wb3J0YW50IGZhY3RzIGFib3V0IHRoZSBEaWdpdGFsIGludGVyZmFjZToKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGUgRG8gcG9ydCBhZGRpdGlvbm5hbHkgc3VwcG9ydHMgc3Vycm91bmQtZW5jb2RlZCBBQy0zIGFuZCBEVFMgcGFzc3Rocm91Z2gsIAotdGhvdWdoIEkgaGF2ZW4ndCB0ZXN0ZWQgaXQgdW5kZXIgbGludXgKKyAqIFRoZSBEbyBwb3J0IGFkZGl0aW9uYWxseSBzdXBwb3J0cyBzdXJyb3VuZC1lbmNvZGVkIEFDLTMgYW5kIERUUyBwYXNzdGhyb3VnaCwgCit0aG91Z2ggSSBoYXZlbid0IHRlc3RlZCBpdCB1bmRlciBMaW51eAogICAgLSBOb3RlIHRoYXQgaW4gdGhpcyBzZXR1cCBvbmx5IHRoZSBEbyBpbnRlcmZhY2UgY2FuIGJlIGVuYWJsZWQKICAqIEFwYXJ0IGZyb20gcmVjb3JkaW5nIGFuIGF1ZGlvIGRpZ2l0YWwgc3RyZWFtLCBlbmFibGluZyB0aGUgRGkgcG9ydCBpcyBhIHdheSAKIHRvIHN5bmNocm9uaXplIHRoZSBkZXZpY2UgdG8gYW4gZXh0ZXJuYWwgc2FtcGxlIGNsb2NrCkBAIC02MCwyNCArNjAsMjMgQEAKIFRoZSBBdWRpb3BoaWxlIFVTQiBNSURJIHBvcnRzIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdXBwb3J0ZWQgb25jZSB0aGUgCiBmb2xsb3dpbmcgbW9kdWxlcyBoYXZlIGJlZW4gbG9hZGVkOgogICogc25kLXVzYi1hdWRpbwotICogc25kLXNlcQogICogc25kLXNlcS1taWRpCiAKLU5vIGFkZGl0aW9ubmFsIHNldHRpbmcgaXMgcmVxdWlyZWQuCitObyBhZGRpdGlvbmFsIHNldHRpbmcgaXMgcmVxdWlyZWQuCiAKIDIuMiAtIEF1ZGlvIHBvcnRzCiAtLS0tLS0tLS0tLS0tLS0tLQogCiBBdWRpbyBmdW5jdGlvbnMgb2YgdGhlIEF1ZGlvcGhpbGUgVVNCIGRldmljZSBhcmUgaGFuZGxlZCBieSB0aGUgc25kLXVzYi1hdWRpbyAKIG1vZHVsZS4gVGhpcyBtb2R1bGUgY2FuIHdvcmsgaW4gYSBkZWZhdWx0IG1vZGUgKHdpdGhvdXQgYW55IGRldmljZS1zcGVjaWZpYyAKLXBhcmFtZXRlciksIG9yIGluIGFuIGFkdmFuY2VkIG1vZGUgd2l0aCB0aGUgZGV2aWNlLXNwZWNpZmljIHBhcmFtZXRlciBjYWxsZWQgCitwYXJhbWV0ZXIpLCBvciBpbiBhbiAiYWR2YW5jZWQiIG1vZGUgd2l0aCB0aGUgZGV2aWNlLXNwZWNpZmljIHBhcmFtZXRlciBjYWxsZWQgCiAiZGV2aWNlX3NldHVwIi4KIAogMi4yLjEgLSBEZWZhdWx0IEFsc2EgZHJpdmVyIG1vZGUKIAotVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBzbmQtdXNiLWF1ZGlvIGRyaXZlciBpcyB0byBwYXJzZSB0aGUgZGV2aWNlIAorVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHNuZC11c2ItYXVkaW8gZHJpdmVyIGlzIHRvIHBhcnNlIHRoZSBkZXZpY2UgCiBjYXBhYmlsaXRpZXMgYXQgc3RhcnR1cCBhbmQgZW5hYmxlIGFsbCBmdW5jdGlvbnMgaW5zaWRlIHRoZSBkZXZpY2UgKGluY2x1ZGluZyAKLWFsbCBwb3J0cyBhdCBhbnkgc2FtcGxlIHJhdGVzIGFuZCBhbnkgc2FtcGxlIGRlcHRocyBzdXBwb3J0ZWQpLiBUaGlzIGFwcHJvYWNoIAorYWxsIHBvcnRzIGF0IGFueSBzdXBwb3J0ZWQgc2FtcGxlIHJhdGVzIGFuZCBzYW1wbGUgZGVwdGhzKS4gVGhpcyBhcHByb2FjaCAKIGhhcyB0aGUgYWR2YW50YWdlIHRvIGxldCB0aGUgZHJpdmVyIGVhc2lseSBzd2l0Y2ggZnJvbSBzYW1wbGUgcmF0ZXMvZGVwdGhzIAogYXV0b21hdGljYWxseSBhY2NvcmRpbmcgdG8gdGhlIG5lZWQgb2YgdGhlIGFwcGxpY2F0aW9uIGNsYWltaW5nIHRoZSBkZXZpY2UuCiAKQEAgLTExNCw5ICsxMTMsOSBAQAogRm9yIHBlb3BsZSBoYXZpbmcgdGhpcyBwcm9ibGVtLCB0aGUgc25kLXVzYi1hdWRpbyBtb2R1bGUgaGFzIGEgbmV3IG1vZHVsZSAKIHBhcmFtZXRlciBjYWxsZWQgImRldmljZV9zZXR1cCIuCiAKLTIuMi4yLjEgLSBJbml0aWFsaXppbmcgdGhlIHdvcmtpbmcgbW9kZSBvZiB0aGUgQXVkaW9oaWxlIFVTQgorMi4yLjIuMSAtIEluaXRpYWxpemluZyB0aGUgd29ya2luZyBtb2RlIG9mIHRoZSBBdWRpb3BoaWxlIFVTQgogCi1BcyBmYXIgYXMgdGhlIEF1ZGlvaGlsZSBVU0IgZGV2aWNlIGlzIGNvbmNlcm5lZCwgdGhpcyB2YWx1ZSBsZXQgdGhlIHVzZXIgCitBcyBmYXIgYXMgdGhlIEF1ZGlvcGhpbGUgVVNCIGRldmljZSBpcyBjb25jZXJuZWQsIHRoaXMgdmFsdWUgbGV0IHRoZSB1c2VyIAogc3BlY2lmeToKICAqIHRoZSBzYW1wbGUgZGVwdGgKICAqIHRoZSBzYW1wbGUgcmF0ZQpAQCAtMTc0LDIwICsxNzMsMjAgQEAKIAogSU1QT1JUQU5UIE5PVEUgV0hFTiBTV0lUQ0hJTkcgQ09ORklHVVJBVElPTjoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFlvdSBtYXkgbmVlZCB0byBfZmlyc3RfIGludGlhbGl6ZSB0aGUgbW9kdWxlIHdpdGggdGhlIGNvcnJlY3QgZGV2aWNlX3NldHVwIAorICogWW91IG1heSBuZWVkIHRvIF9maXJzdF8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIHdpdGggdGhlIGNvcnJlY3QgZGV2aWNlX3NldHVwIAogICAgcGFyYW1ldGVyIGFuZCBfb25seV9hZnRlcl8gdHVybiBvbiB0aGUgQXVkaW9waGlsZSBVU0IgZGV2aWNlCiAgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aGVuIHN3aXRjaGluZyB0aGUgc2FtcGxlIGRlcHRoOgotICAgLSBmaXJzdCB0cnVuIG9mZiB0aGUgZGV2aWNlCi0gICAtIGRlLXJlZ2lzdGVyIHRoZSBzbmQtdXNiLWF1ZGlvIG1vZHVsZQotICAgLSBjaGFuZ2UgdGhlIGRldmljZV9zZXR1cCBwYXJhbWV0ZXIgKGJ5IGVpdGhlciBtYW51YWxseSByZXByb2JpbmcgdGhlIG1vZHVsZSAKLSAgICAgb3IgY2hhbmdpbmcgbW9kcHJvYmUuY29uZikKKyAgIC0gZmlyc3QgdHVybiBvZmYgdGhlIGRldmljZQorICAgLSBkZS1yZWdpc3RlciB0aGUgc25kLXVzYi1hdWRpbyBtb2R1bGUgKG1vZHByb2JlIC1yKQorICAgLSBjaGFuZ2UgdGhlIGRldmljZV9zZXR1cCBwYXJhbWV0ZXIgYnkgY2hhbmdpbmcgdGhlIGRldmljZV9zZXR1cAorICAgICBvcHRpb24gaW4gL2V0Yy9tb2Rwcm9iZS5jb25mIAogICAgLSB0dXJuIG9uIHRoZSBkZXZpY2UKIAogMi4yLjIuMyAtIEF1ZGlvcGhpbGUgVVNCJ3MgZGV2aWNlX3NldHVwIHN0cnVjdHVyZQogCiBJZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2Vfc2V0dXAgbWFnaWMgbnVtYmVycyBmb3IgdGhlIEF1ZGlvcGhpbGUgCiBVU0IsIHlvdSBuZWVkIHNvbWUgdmVyeSBiYXNpYyB1bmRlcnN0YW5kaW5nIG9mIGJpbmFyeSBjb21wdXRhdGlvbi4gSG93ZXZlciwgCi10aGlzIGlzIG5vdCByZXF1aXJlZCB0byB1c2UgdGhlIHBhcmFtZXRlciBhbmQgeW91IG1heSBza2lwIHRoaSBzZWN0aW9uLgordGhpcyBpcyBub3QgcmVxdWlyZWQgdG8gdXNlIHRoZSBwYXJhbWV0ZXIgYW5kIHlvdSBtYXkgc2tpcCB0aGlzIHNlY3Rpb24uCiAKIFRoZSBkZXZpY2Vfc2V0dXAgaXMgb25lIGJ5dGUgbG9uZyBhbmQgaXRzIHN0cnVjdHVyZSBpcyB0aGUgZm9sbG93aW5nOgogCkBAIC0yMzEsMTEgKzIzMCwxMSBAQAogCiAyLjIuMyAtICBVU0IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhpcyBkZXZpY2UKIAotWW91IG1heSBzYWZlbHkgc2tpcCB0aGlzIHNlY3Rpb24gaWYgeW91J3JlIG5vdCBpbnRlcnJlc3RlZCBpbiBkcml2ZXIgCitZb3UgbWF5IHNhZmVseSBza2lwIHRoaXMgc2VjdGlvbiBpZiB5b3UncmUgbm90IGludGVyZXN0ZWQgaW4gZHJpdmVyIAogZGV2ZWxvcG1lbnQuCiAKLVRoaXMgc2VjdGlvbiBkZXNjcmliZXMgc29tZSBpbnRlcm5hbHMgYXNwZWN0IG9mIHRoZSBkZXZpY2UgYW5kIHN1bW1hcml6ZSB0aGUgCi1kYXRhIEkgZ290IGJ5IHVzYi1zbm9vcGluZyB0aGUgd2luZG93cyBhbmQgbGludXggZHJpdmVycy4KK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgc29tZSBpbnRlcm5hbCBhc3BlY3RzIG9mIHRoZSBkZXZpY2UgYW5kIHN1bW1hcml6ZSB0aGUgCitkYXRhIEkgZ290IGJ5IHVzYi1zbm9vcGluZyB0aGUgd2luZG93cyBhbmQgTGludXggZHJpdmVycy4KIAogVGhlIE0tQXVkaW8gQXVkaW9waGlsZSBVU0IgaGFzIDcgVVNCIEludGVyZmFjZXM6CiBhICJVU0IgaW50ZXJmYWNlIjoKQEAgLTI3Nyw5ICsyNzYsOSBAQAogICAtIDE2LWJpdCBkZXB0aCwgOC00OGtIeiBzYW1wbGUgbW9kZQogICAtIFN5bmNoIHBsYXliYWNrIChEbyksIGF1ZGlvIGZvcm1hdCB0eXBlIElJSSBJRUMxOTM3X0FDLTMKIAotSW4gb3JkZXIgdG8gZW5zdXJlIGEgY29ycmVjdCBpbnRpYWxpemF0aW9uIG9mIHRoZSBkZXZpY2UsIHRoZSBkcml2ZXIgCitJbiBvcmRlciB0byBlbnN1cmUgYSBjb3JyZWN0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBkZXZpY2UsIHRoZSBkcml2ZXIgCiBfbXVzdF9rbm93XyBob3cgdGhlIGRldmljZSB3aWxsIGJlIHVzZWQ6Ci0gKiBpZiBEVFMgaXMgY2hvb3Nlbiwgb25seSBJbnRlcmZhY2UgMiB3aXRoIEFsdFNldCBuYi42IG11c3QgYmUKKyAqIGlmIERUUyBpcyBjaG9zZW4sIG9ubHkgSW50ZXJmYWNlIDIgd2l0aCBBbHRTZXQgbmIuNiBtdXN0IGJlCiAgICByZWdpc3RlcmVkCiAgKiBpZiA5NktIeiBvbmx5IEFsdFNldHMgbmIuMSBvZiBlYWNoIGludGVyZmFjZSBtdXN0IGJlIHNlbGVjdGVkCiAgKiBpZiBzYW1wbGVzIGFyZSB1c2luZyAyNGJpdHMvNDhLSHogdGhlbiBBbHRTZXQgMiBtdXN0IG1lIHVzZWQgaWYKQEAgLTI5MCw3ICsyODksNyBAQAogICAgaXMgbm90IGNvbm5lY3RlZAogCiBXaGVuIGRldmljZV9zZXR1cCBpcyBnaXZlbiBhcyBhIHBhcmFtZXRlciB0byB0aGUgc25kLXVzYi1hdWRpbyBtb2R1bGUsIHRoZSAKLXBhcnNlX2F1ZGlvX2VucG9pbnQgZnVuY3Rpb24gdXNlcyBhIHF1aXJrIGNhbGxlZCAKK3BhcnNlX2F1ZGlvX2VuZHBvaW50cyBmdW5jdGlvbiB1c2VzIGEgcXVpcmsgY2FsbGVkIAogImF1ZGlvcGhpbGVfc2tpcF9zZXR0aW5nX3F1aXJrIiBpbiBvcmRlciB0byBwcmV2ZW50IEFsdFNldHRpbmdzIG5vdCAKIGNvcnJlc3BvbmRpbmcgdG8gZGV2aWNlX3NldHVwIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBpbiB0aGUgZHJpdmVyLgogCkBAIC0zMTcsOSArMzE2LDggQEAKIHVzaW5nIHRoZSAiZGVmYXVsdCIgQUxTQSBkZXZpY2UuIFRoaXMgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBpdCBjb3VsZCBiZS4gCiBDb25zaWRlciB1c2luZyBhIGhhcmR3YXJlIGRldmljZSBpbnN0ZWFkIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwbHVnIGxheWVyLiIKIAotCiAzLjIgLSBQYXRjaGluZyBhbHNhIHRvIHVzZSBkaXJlY3QgcGNtIGRldmljZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEEgcGF0Y2ggZm9yIEphY2sgYnkgQW5kcmVhcyBTdGVpbm1ldHogYWRkcyBzdXBwb3J0IGZvciBCaWcgRW5kaWFuIGRldmljZXMuIAogSG93ZXZlciBpdCBoYXMgbm90IGJlZW4gaW5jbHVkZWQgaW4gdGhlIENWUyB0cmVlLgogCkBAIC0zMzEsMyArMzI5LDMyIEBACiBsaW5lOgogICAlIGphY2tkIC1SIC1kYWxzYSAtUGh3OjEsMCAtcjQ4MDAwIC1wMTI4IC1uMiAtRCAtQ2h3OjEsMQogCiszLjIgLSBHZXR0aW5nIDIgaW5wdXQgYW5kL29yIG91dHB1dCBpbnRlcmZhY2VzIGluIEphY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgc3RhcnRpbmcgdGhlIEphY2sgc2VydmVyIHRoaXMgd2F5IHdpbGwgb25seSBlbmFibGUgMSBzdGVyZW8KK2lucHV0IChEaSBvciBBaSkgYW5kIDEgc3RlcmVvIG91dHB1dCAoQW8gb3IgRG8pLgorCitUaGlzIGlzIGR1ZSB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyogSmFjayBjYW4gb25seSBvcGVuIG9uZSBjYXB0dXJlIGRldmljZSBhbmQgb25lIHBsYXliYWNrIGRldmljZSBhdCBhIHRpbWUKKyogVGhlIEF1ZGlvcGhpbGUgVVNCIGlzIHNlZW4gYXMgMiAob3IgdGhyZWUpIEFsc2EgZGV2aWNlczogaHc6MSwwLCBodzoxLDEKKyAgKGFuZCBvcHRpb25hbGx5IGh3OjEsMikKK0lmIHlvdSB3YW50IHRvIGdldCBBaStEaSBhbmQvb3IgQW8rRG8gc3VwcG9ydCB3aXRoIEphY2ssIHlvdSB3b3VsZCBuZWVkIHRvCitjb21iaW5lIHRoZSBBbHNhIGRldmljZXMgaW50byBvbmUgbG9naWNhbCAiY29tcGxleCIgZGV2aWNlLgorCitJZiB5b3Ugd2FudCB0byBnaXZlIGl0IGEgdHJ5LCBJIHJlY29tbWVuZCByZWFkaW5nIHRoZSBpbmZvcm1hdGlvbiBmcm9tCit0aGlzIHBhZ2U6IGh0dHA6Ly93d3cuc291bmQtbWFuLmNvLnVrL2xpbnV4YXVkaW8vaWNlMTcxMm11bHRpLmh0bWwKK0l0IGlzIHJlbGF0ZWQgdG8gYW5vdGhlciBkZXZpY2UgKGljZTE3MTIpIGJ1dCBjYW4gYmUgYWRhcHRlZCB0byBzdWl0Cit0aGUgQXVkaW9waGlsZSBVU0IuCisKK0VuYWJsaW5nIG11bHRpcGxlIEF1ZGlvcGhpbGUgVVNCIGludGVyZmFjZXMgZm9yIEphY2tkIHdpbGwgY2VydGFpbmx5IHJlcXVpcmU6CisqIHBhdGNoaW5nIEphY2sgd2l0aCB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgIkJpZyBFbmRpYW4iIHBhdGNoCisqIHBhdGNoaW5nIEphY2tkIHdpdGggdGhlIE1NQVBfQ09NUExFWCBwYXRjaCAoc2VlIHRoZSBpY2UxNzEyIHBhZ2UpCisqIHBhdGNoaW5nIHRoZSBhbHNhLWxpYi9zcmMvcGNtL3BjbV9tdWx0aS5jIGZpbGUgKHNlZSB0aGUgaWNlMTcxMiBwYWdlKQorKiBkZWZpbmUgYSBtdWx0aSBkZXZpY2UgKGNvbWJpbmF0aW9uIG9mIGh3OjEsMCBhbmQgaHc6MSwxKSBpbiB5b3VyIC5hc291bmRyYworICBmaWxlIAorKiBzdGFydCBqYWNrZCB3aXRoIHRoaXMgZGV2aWNlCisKK0kgaGFkIG5vIHN1Y2Nlc3MgaW4gdGVzdGluZyB0aGlzIGZvciBub3csIGJ1dCB0aGlzIG1heSBiZSBkdWUgdG8gbXkgT1MKK2NvbmZpZ3VyYXRpb24uIElmIHlvdSBoYXZlIGFueSBzdWNjZXNzIHdpdGggdGhpcyBraW5kIG9mIHNldHVwLCBwbGVhc2UKK2Ryb3AgbWUgYW4gZW1haWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKaW5kZXggNmZlZWY5ZS4uMWZhZjc2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtMTEyMyw4ICsxMTIzLDggQEAKICAgICAgICAgICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgLyogY2hlY2sgUENJIGF2YWlsYWJpbGl0eSAoMjhiaXQgRE1BKSAqLwotICAgICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwIHx8Ci0gICAgICAgICAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCkgeworICAgICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAorICAgICAgICAgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CiAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7CiAgICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87CkBAIC0xMTcyLDcgKzExNzIsNyBAQAogICB9ICAgICAgICAKIAogICAvKiBQQ0kgSURzICovCi0gIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdID0geworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogICAgICAgICAgIHsgUENJX1ZFTkRPUl9JRF9GT08sIFBDSV9ERVZJQ0VfSURfQkFSLAogICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKICAgICAgICAgICAuLi4uCkBAIC0xMjE2LDcgKzEyMTYsNyBAQAogICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBQQ0kgcmVzb3VyY2VzIGlzIGRvbmUgaW4gdGhlCiAgICAgICA8ZnVuY3Rpb24+cHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCBhbmQgdXN1YWxseSBhbiBleHRyYQogICAgICAgPGZ1bmN0aW9uPnh4eF9jcmVhdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHdyaXR0ZW4gZm9yIHRoaXMKLSAgICAgIHB1cnBvc2UuIAorICAgICAgcHVycG9zZS4KICAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+CkBAIC0xMjI1LDcgKzEyMjUsNyBAQAogICAgICAgYWxsb2NhdGluZyByZXNvdXJjZXMuIEFsc28sIHlvdSBuZWVkIHRvIHNldCB0aGUgcHJvcGVyIFBDSSBETUEKICAgICAgIG1hc2sgdG8gbGltaXQgdGhlIGFjY2Vzc2VkIGkvbyByYW5nZS4gSW4gc29tZSBjYXNlcywgeW91IG1pZ2h0CiAgICAgICBuZWVkIHRvIGNhbGwgPGZ1bmN0aW9uPnBjaV9zZXRfbWFzdGVyKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwKLSAgICAgIHRvby4gCisgICAgICB0b28uCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtMTIzNiw4ICsxMjM2LDggQEAKIDwhW0NEQVRBWwogICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKICAgICAgICAgICByZXR1cm4gZXJyOwotICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAotICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAorICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgewogICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZXJyb3IgdG8gc2V0IDI4Yml0IG1hc2sgRE1BXG4iKTsKICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKICAgICAgICAgICByZXR1cm4gLUVOWElPOwpAQCAtMTI1NiwxMyArMTI1NiwxMyBAQAogICAgICAgZnVuY3Rpb25zLiBVbmxpa2UgQUxTQSB2ZXIuMC41LnguLCB0aGVyZSBhcmUgbm8gaGVscGVycyBmb3IKICAgICAgIHRoYXQuIEFuZCB0aGVzZSByZXNvdXJjZXMgbXVzdCBiZSByZWxlYXNlZCBpbiB0aGUgZGVzdHJ1Y3RvcgogICAgICAgZnVuY3Rpb24gKHNlZSBiZWxvdykuIEFsc28sIG9uIEFMU0EgMC45LngsIHlvdSBkb24ndCBuZWVkIHRvCi0gICAgICBhbGxvY2F0ZSAocHNldWRvLSlETUEgZm9yIFBDSSBsaWtlIEFMU0EgMC41LnguIAorICAgICAgYWxsb2NhdGUgKHBzZXVkby0pRE1BIGZvciBQQ0kgbGlrZSBBTFNBIDAuNS54LgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KICAgICAgICAgTm93IGFzc3VtZSB0aGF0IHRoaXMgUENJIGRldmljZSBoYXMgYW4gSS9PIHBvcnQgd2l0aCA4IGJ5dGVzCiAgICAgICAgIGFuZCBhbiBpbnRlcnJ1cHQuIFRoZW4gc3RydWN0IDxzdHJ1Y3RuYW1lPm15Y2hpcDwvc3RydWN0bmFtZT4gd2lsbCBoYXZlIHRoZQotICAgICAgICBmb2xsb3dpbmcgZmllbGRzOiAKKyAgICAgICAgZm9sbG93aW5nIGZpZWxkczoKIAogICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgogICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KQEAgLTE1NjUsNyArMTU2NSw3IEBACiAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CiAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogPCFbQ0RBVEFbCi0gIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdID0geworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogICAgICAgICAgIHsgUENJX1ZFTkRPUl9JRF9GT08sIFBDSV9ERVZJQ0VfSURfQkFSLAogICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKICAgICAgICAgICAuLi4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHggYi9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0NWYzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eApAQCAtMCwwICsxLDIzNCBAQAor77u/UFhBMnh4IFNQSSBvbiBTU1AgZHJpdmVyIEhPV1RPCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgYSBtaW5pIGhvd3RvIG9uIHRoZSBweGEyeHhfc3BpIGRyaXZlci4gIFRoZSBkcml2ZXIgdHVybnMgYSBQWEEyeHgKK3N5bmNocm9ub3VzIHNlcmlhbCBwb3J0IGludG8gYSBTUEkgbWFzdGVyIGNvbnRyb2xsZXIKKyhzZWUgRG9jdW1lbnRhdGlvbi9zcGkvc3BpX3N1bW1hcnkpLiBUaGUgZHJpdmVyIGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzCisKKy0gU3VwcG9ydCBmb3IgYW55IFBYQTJ4eCBTU1AKKy0gU1NQIFBJTyBhbmQgU1NQIERNQSBkYXRhIHRyYW5zZmVycy4KKy0gRXh0ZXJuYWwgYW5kIEludGVybmFsIChTU1BGUk0pIGNoaXAgc2VsZWN0cy4KKy0gUGVyIHNsYXZlIGRldmljZSAoY2hpcCkgY29uZmlndXJhdGlvbi4KKy0gRnVsbCBzdXNwZW5kLCBmcmVlemUsIHJlc3VtZSBzdXBwb3J0LgorCitUaGUgZHJpdmVyIGlzIGJ1aWx0IGFyb3VuZCBhICJzcGlfbWVzc2FnZSIgZmlmbyBzZXJ2aWNlZCBieSB3b3JrcXVldWUgYW5kIGEKK3Rhc2tsZXQuIFRoZSB3b3JrcXVldWUsICJwdW1wX21lc3NhZ2VzIiwgZHJpdmVzIG1lc3NhZ2UgZmlmbyBhbmQgdGhlIHRhc2tsZXQKKyhwdW1wX3RyYW5zZmVyKSBpcyByZXNwb25zaWJsZSBmb3IgcXVldWluZyBTUEkgdHJhbnNhY3Rpb25zIGFuZCBzZXR0aW5nIHVwIGFuZAorbGF1bmNoaW5nIHRoZSBkbWEvaW50ZXJydXB0IGRyaXZlbiB0cmFuc2ZlcnMuCisKK0RlY2xhcmluZyBQWEEyeHggTWFzdGVyIENvbnRyb2xsZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVHlwaWNhbGx5IGEgU1BJIG1hc3RlciBpcyBkZWZpbmVkIGluIHRoZSBhcmNoLy4uLi9tYWNoLSovYm9hcmQtKi5jIGFzIGEKKyJwbGF0Zm9ybSBkZXZpY2UiLiAgVGhlIG1hc3RlciBjb25maWd1cmF0aW9uIGlzIHBhc3NlZCB0byB0aGUgZHJpdmVyIHZpYSBhIHRhYmxlCitmb3VuZCBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oOgorCitzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgeworCWVudW0gcHhhX3NzcF90eXBlIHNzcF90eXBlOworCXUzMiBjbG9ja19lbmFibGU7CisJdTE2IG51bV9jaGlwc2VsZWN0OworCXU4IGVuYWJsZV9kbWE7Cit9OworCitUaGUgInB4YTJ4eF9zcGlfbWFzdGVyLnNzcF90eXBlIiBmaWVsZCBtdXN0IGhhdmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDMgYW5kCitpbmZvcm1zIHRoZSBkcml2ZXIgd2hpY2ggZmVhdHVyZXMgYSBwYXJ0aWN1bGFyIFNTUCBzdXBwb3J0cy4KKworVGhlICJweGEyeHhfc3BpX21hc3Rlci5jbG9ja19lbmFibGUiIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlCitjb3JyZXNwb25kaW5nIFNTUCBwZXJpcGhlcmFsIGJsb2NrIGluIHRoZSAiQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIChDS0VOIikuIFNlZQordGhlICJQWEEyeHggRGV2ZWxvcGVyIE1hbnVhbCIgc2VjdGlvbiAiQ2xvY2tzIGFuZCBQb3dlciBNYW5hZ2VtZW50Ii4KKworVGhlICJweGEyeHhfc3BpX21hc3Rlci5udW1fY2hpcHNlbGVjdCIgZmllbGQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgorc2xhdmUgZGV2aWNlIChjaGlwcykgYXR0YWNoZWQgdG8gdGhpcyBTUEkgbWFzdGVyLgorCitUaGUgInB4YTJ4eF9zcGlfbWFzdGVyLmVuYWJsZV9kbWEiIGZpZWxkIGluZm9ybXMgdGhlIGRyaXZlciB0aGF0IFNTUCBETUEgc2hvdWxkCitiZSB1c2VkLiAgVGhpcyBjYXVzZWQgdGhlIGRyaXZlciB0byBhY3F1aXJlIHR3byBETUEgY2hhbm5lbHM6IHJ4X2NoYW5uZWwgYW5kCit0eF9jaGFubmVsLiAgVGhlIHJ4X2NoYW5uZWwgaGFzIGEgaGlnaGVyIERNQSBzZXJ2aWNlIHByaW9yaXR5IHRoZSB0eF9jaGFubmVsLgorU2VlIHRoZSAiUFhBMnh4IERldmVsb3BlciBNYW51YWwiIHNlY3Rpb24gIkRNQSBDb250cm9sbGVyIi4KKworTlNTUCBNQVNURVIgU0FNUExFCistLS0tLS0tLS0tLS0tLS0tLS0KK0JlbG93IGlzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlIFBYQTI1NSBOU1NQLgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9zcGlfbnNzcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IF9fUFJFRyhTU0NSMF9QKDIpKSwgLyogU3RhcnQgYWRkcmVzcyBvZiBOU1NQICovCisJCS5lbmQJPSBfX1BSRUcoU1NDUjBfUCgyKSkgKyAweDJjLCAvKiBSYW5nZSBvZiByZWdpc3RlcnMgKi8KKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9OU1NQLCAvKiBOU1NQIElSUSAqLworCQkuZW5kCT0gSVJRX05TU1AsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9uc3NwX21hc3Rlcl9pbmZvID0geworCS5zc3BfdHlwZSA9IFBYQTI1eF9OU1NQLCAvKiBUeXBlIG9mIFNTUCAqLworCS5jbG9ja19lbmFibGUgPSBDS0VOOV9OU1NQLCAvKiBOU1NQIFBlcmlwaGVyYWwgY2xvY2sgKi8KKwkubnVtX2NoaXBzZWxlY3QgPSAxLCAvKiBNYXRjaGVzIHRoZSBudW1iZXIgb2YgY2hpcHMgYXR0YWNoZWQgdG8gTlNTUCAqLworCS5lbmFibGVfZG1hID0gMSwgLyogRW5hYmxlcyBOU1NQIERNQSAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX3NwaV9uc3NwID0geworCS5uYW1lID0gInB4YTJ4eC1zcGkiLCAvKiBNVVNUIEJFIFRISVMgVkFMVUUsIHNvIGRldmljZSBtYXRjaCBkcml2ZXIgKi8KKwkuaWQgPSAyLCAvKiBCdXMgbnVtYmVyLCBNVVNUIE1BVENIIFNTUCBudW1iZXIgMS4ubiAqLworCS5yZXNvdXJjZSA9IHB4YV9zcGlfbnNzcF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHB4YV9zcGlfbnNzcF9yZXNvdXJjZXMpLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnB4YV9uc3NwX21hc3Rlcl9pbmZvLCAvKiBQYXNzZWQgdG8gZHJpdmVyICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmcHhhX3NwaV9uc3NwLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJvYXJkX2luaXQodm9pZCkKK3sKKwkodm9pZClwbGF0Zm9ybV9hZGRfZGV2aWNlKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitEZWNsYXJpbmcgU2xhdmUgRGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1R5cGljYWxseSBlYWNoIFNQSSBzbGF2ZSAoY2hpcCkgaXMgZGVmaW5lZCBpbiB0aGUgYXJjaC8uLi4vbWFjaC0qL2JvYXJkLSouYwordXNpbmcgdGhlICJzcGlfYm9hcmRfaW5mbyIgc3RydWN0dXJlIGZvdW5kIGluICJsaW51eC9zcGkvc3BpLmgiLiBTZWUKKyJEb2N1bWVudGF0aW9uL3NwaS9zcGlfc3VtbWFyeSIgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKK0VhY2ggc2xhdmUgZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBQWEEgbXVzdCBwcm92aWRlIHNsYXZlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KK2luZm9ybWF0aW9uIHZpYSB0aGUgc3RydWN0dXJlICJweGEyeHhfc3BpX2NoaXAiIGZvdW5kIGluCisiaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTJ4eF9zcGkuaCIuICBUaGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIKK3dpbGwgdXNlcyB0aGUgY29uZmlndXJhdGlvbiB3aGVuZXZlciB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBzbGF2ZQorZGV2aWNlLgorCitzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIHsKKwl1OCB0eF90aHJlc2hvbGQ7CisJdTggcnhfdGhyZXNob2xkOworCXU4IGRtYV9idXJzdF9zaXplOworCXUzMiB0aW1lb3V0X21pY3Jvc2VjczsKKwl1OCBlbmFibGVfbG9vcGJhY2s7CisJdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKK307CisKK1RoZSAicHhhMnh4X3NwaV9jaGlwLnR4X3RocmVzaG9sZCIgYW5kICJweGEyeHhfc3BpX2NoaXAucnhfdGhyZXNob2xkIiBmaWVsZHMgYXJlCit1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgU1NQIGhhcmR3YXJlIGZpZm8uICBUaGVzZSBmaWVsZHMgYXJlIGNyaXRpY2FsIHRvIHRoZQorcGVyZm9ybWFuY2Ugb2YgcHhhMnh4X3NwaSBkcml2ZXIgYW5kIG1pc2NvbmZpZ3VyYXRpb24gd2lsbCByZXN1bHQgaW4gcngKK2ZpZm8gb3ZlcnJ1bnMgKGVzcGVjaWFsbHkgaW4gUElPIG1vZGUgdHJhbnNmZXJzKS4gR29vZCBkZWZhdWx0IHZhbHVlcyBhcmUKKworCS50eF90aHJlc2hvbGQgPSAxMiwKKwkucnhfdGhyZXNob2xkID0gNCwKKworVGhlICJweGEyeHhfc3BpX2NoaXAuZG1hX2J1cnN0X3NpemUiIGZpZWxkIGlzIHVzZWQgdG8gY29uZmlndXJlIFBYQTJ4eCBETUEKK2VuZ2luZSBhbmQgaXMgcmVsYXRlZCB0aGUgInNwaV9kZXZpY2UuYml0c19wZXJfd29yZCIgZmllbGQuICBSZWFkIGFuZCB1bmRlcnN0YW5kCit0aGUgUFhBMnh4ICJEZXZlbG9wZXIgTWFudWFsIiBzZWN0aW9ucyBvbiB0aGUgRE1BIGNvbnRyb2xsZXIgYW5kIFNTUCBDb250cm9sbGVycwordG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZhbHVlLiBBbiBTU1AgY29uZmlndXJlZCBmb3IgYnl0ZS13aWRlIHRyYW5zZmVycyB3b3VsZAordXNlIGEgdmFsdWUgb2YgOC4KKworVGhlICJweGEyeHhfc3BpX2NoaXAudGltZW91dF9taWNyb3NlY3MiIGZpZWxkcyBpcyB1c2VkIHRvIGVmZmljaWVudGx5IGhhbmRsZQordHJhaWxpbmcgYnl0ZXMgaW4gdGhlIFNTUCByZWNlaXZlciBmaWZvLiAgVGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMKK2RlcGVuZGVudCBvbiB0aGUgU1BJIGJ1cyBzcGVlZCAoInNwaV9ib2FyZF9pbmZvLm1heF9zcGVlZF9oeiIpIGFuZCB0aGUgc3BlY2lmaWMKK3NsYXZlIGRldmljZS4gIFBsZWFzZSBub3RlIHRoZSB0aGUgUFhBMnh4IFNTUCAxIGRvZXMgbm90IHN1cHBvcnQgdHJhaWxpbmcgYnl0ZQordGltZW91dHMgYW5kIG11c3QgYnVzeS13YWl0IGFueSB0cmFpbGluZyBieXRlcy4KKworVGhlICJweGEyeHhfc3BpX2NoaXAuZW5hYmxlX2xvb3BiYWNrIiBmaWVsZCBpcyB1c2VkIHRvIHBsYWNlIHRoZSBTU1AgcG9ydGluZworaW50byBpbnRlcm5hbCBsb29wYmFjayBtb2RlLiAgSW4gdGhpcyBtb2RlIHRoZSBTU1AgY29udHJvbGxlciBpbnRlcm5hbGx5Citjb25uZWN0cyB0aGUgU1NQVFggcGluIHRoZSB0aGUgU1NQUlggcGluLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGluaXRpYWwgc2V0dXAKK3Rlc3RpbmcuCisKK1RoZSAicHhhMnh4X3NwaV9jaGlwLmNzX2NvbnRyb2wiIGZpZWxkIGlzIHVzZWQgdG8gcG9pbnQgdG8gYSBib2FyZCBzcGVjaWZpYworZnVuY3Rpb24gZm9yIGFzc2VydGluZy9kZWFzc2VydGluZyBhIHNsYXZlIGRldmljZSBjaGlwIHNlbGVjdC4gIElmIHRoZSBmaWVsZCBpcworTlVMTCwgdGhlIHB4YTJ4eF9zcGkgbWFzdGVyIGNvbnRyb2xsZXIgZHJpdmVyIGFzc3VtZXMgdGhhdCB0aGUgU1NQIHBvcnQgaXMKK2NvbmZpZ3VyZWQgdG8gdXNlIFNTUEZSTSBpbnN0ZWFkLgorCitOU1NQIFNBTFZFIFNBTVBMRQorLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBweGEyeHhfc3BpX2NoaXAgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUgcHhhMnh4X3NwaSBkcml2ZXIgaW4gdGhlCisic3BpX2JvYXJkX2luZm8uY29udHJvbGxlcl9kYXRhIiBmaWVsZC4gQmVsb3cgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiB1c2luZwordGhlIFBYQTI1NSBOU1NQLgorCisvKiBDaGlwIFNlbGVjdCBjb250cm9sIGZvciB0aGUgQ1M4NDE1QSBTUEkgc2xhdmUgZGV2aWNlICovCitzdGF0aWMgdm9pZCBjczg0MTVhX2NzX2NvbnRyb2wodTMyIGNvbW1hbmQpCit7CisJaWYgKGNvbW1hbmQgJiBQWEEyWFhfQ1NfQVNTRVJUKQorCQlHUENSKDIpID0gR1BJT19iaXQoMik7CisJZWxzZQorCQlHUFNSKDIpID0gR1BJT19iaXQoMik7Cit9CisKKy8qIENoaXAgU2VsZWN0IGNvbnRyb2wgZm9yIHRoZSBDUzg0MDVBIFNQSSBzbGF2ZSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGNzODQwNWFfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKK3sKKwlpZiAoY29tbWFuZCAmIFBYQTJYWF9DU19BU1NFUlQpCisJCUdQQ1IoMykgPSBHUElPX2JpdCgzKTsKKwllbHNlCisJCUdQU1IoMykgPSBHUElPX2JpdCgzKTsKK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAgY3M4NDE1YV9jaGlwX2luZm8gPSB7CisJLnR4X3RocmVzaG9sZCA9IDEyLCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KKwkucnhfdGhyZXNob2xkID0gNCwgLyogU1NQIGhhcmR3YXJkIEZJRk8gdGhyZXNob2xkICovCisJLmRtYV9idXJzdF9zaXplID0gOCwgLyogQnl0ZSB3aWRlIHRyYW5zZmVycyB1c2VkIHNvIDggYnl0ZSBidXJzdHMgKi8KKwkudGltZW91dF9taWNyb3NlY3MgPSA2NCwgLyogV2FpdCBhdCBsZWFzdCA2NHVzZWMgdG8gaGFuZGxlIHRyYWlsaW5nICovCisJLmNzX2NvbnRyb2wgPSBjczg0MTVhX2NzX2NvbnRyb2wsIC8qIFVzZSBleHRlcm5hbCBjaGlwIHNlbGVjdCAqLworfTsKKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAgY3M4NDA1YV9jaGlwX2luZm8gPSB7CisJLnR4X3RocmVzaG9sZCA9IDEyLCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KKwkucnhfdGhyZXNob2xkID0gNCwgLyogU1NQIGhhcmR3YXJkIEZJRk8gdGhyZXNob2xkICovCisJLmRtYV9idXJzdF9zaXplID0gOCwgLyogQnl0ZSB3aWRlIHRyYW5zZmVycyB1c2VkIHNvIDggYnl0ZSBidXJzdHMgKi8KKwkudGltZW91dF9taWNyb3NlY3MgPSA2NCwgLyogV2FpdCBhdCBsZWFzdCA2NHVzZWMgdG8gaGFuZGxlIHRyYWlsaW5nICovCisJLmNzX2NvbnRyb2wgPSBjczg0MDVhX2NzX2NvbnRyb2wsIC8qIFVzZSBleHRlcm5hbCBjaGlwIHNlbGVjdCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzdHJlZXRyYWNlcl9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAiY3M4NDE1YSIsIC8qIE5hbWUgb2Ygc3BpX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8KKwkJLm1heF9zcGVlZF9oeiA9IDM2ODY0MDAsIC8qIFJ1biBTU1AgYXMgZmFzdCBhIHBvc3NiaWxlICovCisJCS5idXNfbnVtID0gMiwgLyogRnJhbWV3b3JrIGJ1cyBudW1iZXIgKi8KKwkJLmNoaXBfc2VsZWN0ID0gMCwgLyogRnJhbWV3b3JrIGNoaXAgc2VsZWN0ICovCisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTDsgLyogTm8gc3BpX2RyaXZlciBzcGVjaWZpYyBjb25maWcgKi8KKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZjczg0MTVhX2NoaXBfaW5mbywgLyogTWFzdGVyIGNoaXAgY29uZmlnICovCisJCS5pcnEgPSBTVFJFRVRSQUNFUl9BUENJX0lSUSwgLyogU2xhdmUgZGV2aWNlIGludGVycnVwdCAqLworCX0sCisJeworCQkubW9kYWxpYXMgPSAiY3M4NDA1YSIsIC8qIE5hbWUgb2Ygc3BpX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8KKwkJLm1heF9zcGVlZF9oeiA9IDM2ODY0MDAsIC8qIFJ1biBTU1AgYXMgZmFzdCBhIHBvc3NiaWxlICovCisJCS5idXNfbnVtID0gMiwgLyogRnJhbWV3b3JrIGJ1cyBudW1iZXIgKi8KKwkJLmNoaXBfc2VsZWN0ID0gMSwgLyogRnJhbWV3b3JrIGNoaXAgc2VsZWN0ICovCisJCS5jb250cm9sbGVyX2RhdGEgPSAmY3M4NDA1YV9jaGlwX2luZm8sIC8qIE1hc3RlciBjaGlwIGNvbmZpZyAqLworCQkuaXJxID0gU1RSRUVUUkFDRVJfQVBDSV9JUlEsIC8qIFNsYXZlIGRldmljZSBpbnRlcnJ1cHQgKi8KKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHN0cmVldHJhY2VyX2luaXQodm9pZCkKK3sKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzdHJlZXRyYWNlcl9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHN0cmVldHJhY2VyX3NwaV9ib2FyZF9pbmZvKSk7Cit9CisKKworRE1BIGFuZCBQSU8gSS9PIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcHhhMnh4X3NwaSBkcml2ZXIgc3VwcG9ydCBib3RoIERNQSBhbmQgaW50ZXJydXB0IGRyaXZlbiBQSU8gbWVzc2FnZQordHJhbnNmZXJzLiAgVGhlIGRyaXZlciBkZWZhdWx0cyB0byBQSU8gbW9kZSBhbmQgRE1BIHRyYW5zZmVycyBtdXN0IGVuYWJsZWQgYnkKK3NldHRpbmcgdGhlICJlbmFibGVfZG1hIiBmbGFnIGluIHRoZSAicHhhMnh4X3NwaV9tYXN0ZXIiIHN0cnVjdHVyZSBhbmQgYW5kCitlbnN1cmluZyB0aGF0IHRoZSAicHhhMnh4X3NwaV9jaGlwLmRtYV9idXJzdF9zaXplIiBmaWVsZCBpcyBub24temVyby4gIFRoZSBETUEKK21vZGUgc3VwcG9ydCBib3RoIGNvaGVyZW50IGFuZCBzdHJlYW0gYmFzZWQgRE1BIG1hcHBpbmdzLgorCitUaGUgZm9sbG93aW5nIGxvZ2ljIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIEkvTyB0byBiZSB1c2VkIG9uCithIHBlciAic3BpX3RyYW5zZmVyIiBiYXNpczoKKworaWYgIWVuYWJsZV9kbWEgb3IgZG1hX2J1cnN0X3NpemUgPT0gMCB0aGVuCisJYWx3YXlzIHVzZSBQSU8gdHJhbnNmZXJzCisKK2lmIHNwaV9tZXNzYWdlLmlzX2RtYV9tYXBwZWQgYW5kIHJ4X2RtYV9idWYgIT0gMCBhbmQgdHhfZG1hX2J1ZiAhPSAwIHRoZW4KKwl1c2UgY29oZXJlbnQgRE1BIG1vZGUKKworaWYgcnhfYnVmIGFuZCB0eF9idWYgYXJlIGFsaWduZWQgb24gOCBieXRlIGJvdW5kYXJ5IHRoZW4KKwl1c2Ugc3RyZWFtaW5nIERNQSBtb2RlCisKK290aGVyd2lzZQorCXVzZSBQSU8gdHJhbnNmZXIKKworVEhBTktTIFRPCistLS0tLS0tLS0KKworRGF2aWQgQnJvd25lbGwgYW5kIG90aGVycyBmb3IgbWVudG9yaW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQppbmRleCBhNWZmYmEzLi4wNjg3MzJkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkKQEAgLTQxNCw3ICs0MTQsMzMgQEAKIFRoZSBkcml2ZXIgd2lsbCBpbml0aWFsaXplIHRoZSBmaWVsZHMgb2YgdGhhdCBzcGlfbWFzdGVyLCBpbmNsdWRpbmcgdGhlCiBidXMgbnVtYmVyIChtYXliZSB0aGUgc2FtZSBhcyB0aGUgcGxhdGZvcm0gZGV2aWNlIElEKSBhbmQgdGhyZWUgbWV0aG9kcwogdXNlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBTUEkgY29yZSBhbmQgU1BJIHByb3RvY29sIGRyaXZlcnMuICBJdCB3aWxsCi1hbHNvIGluaXRpYWxpemUgaXRzIG93biBpbnRlcm5hbCBzdGF0ZS4KK2Fsc28gaW5pdGlhbGl6ZSBpdHMgb3duIGludGVybmFsIHN0YXRlLiAgKFNlZSBiZWxvdyBhYm91dCBidXMgbnVtYmVyaW5nCithbmQgdGhvc2UgbWV0aG9kcy4pCisKK0FmdGVyIHlvdSBpbml0aWFsaXplIHRoZSBzcGlfbWFzdGVyLCB0aGVuIHVzZSBzcGlfcmVnaXN0ZXJfbWFzdGVyKCkgdG8KK3B1Ymxpc2ggaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gIEF0IHRoYXQgdGltZSwgZGV2aWNlIG5vZGVzIGZvcgordGhlIGNvbnRyb2xsZXIgYW5kIGFueSBwcmVkZWNsYXJlZCBzcGkgZGV2aWNlcyB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlLAorYW5kIHRoZSBkcml2ZXIgbW9kZWwgY29yZSB3aWxsIHRha2UgY2FyZSBvZiBiaW5kaW5nIHRoZW0gdG8gZHJpdmVycy4KKworSWYgeW91IG5lZWQgdG8gcmVtb3ZlIHlvdXIgU1BJIGNvbnRyb2xsZXIgZHJpdmVyLCBzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoKQord2lsbCByZXZlcnNlIHRoZSBlZmZlY3Qgb2Ygc3BpX3JlZ2lzdGVyX21hc3RlcigpLgorCisKK0JVUyBOVU1CRVJJTkcKKworQnVzIG51bWJlcmluZyBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoYXQncyBob3cgTGludXggaWRlbnRpZmllcyBhIGdpdmVuCitTUEkgYnVzIChzaGFyZWQgU0NLLCBNT1NJLCBNSVNPKS4gIFZhbGlkIGJ1cyBudW1iZXJzIHN0YXJ0IGF0IHplcm8uICBPbgorU09DIHN5c3RlbXMsIHRoZSBidXMgbnVtYmVycyBzaG91bGQgbWF0Y2ggdGhlIG51bWJlcnMgZGVmaW5lZCBieSB0aGUgY2hpcAorbWFudWZhY3R1cmVyLiAgRm9yIGV4YW1wbGUsIGhhcmR3YXJlIGNvbnRyb2xsZXIgU1BJMiB3b3VsZCBiZSBidXMgbnVtYmVyIDIsCithbmQgc3BpX2JvYXJkX2luZm8gZm9yIGRldmljZXMgY29ubmVjdGVkIHRvIGl0IHdvdWxkIHVzZSB0aGF0IG51bWJlci4KKworSWYgeW91IGRvbid0IGhhdmUgc3VjaCBoYXJkd2FyZS1hc3NpZ25lZCBidXMgbnVtYmVyLCBhbmQgZm9yIHNvbWUgcmVhc29uCit5b3UgY2FuJ3QganVzdCBhc3NpZ24gdGhlbSwgdGhlbiBwcm92aWRlIGEgbmVnYXRpdmUgYnVzIG51bWJlci4gIFRoYXQgd2lsbAordGhlbiBiZSByZXBsYWNlZCBieSBhIGR5bmFtaWNhbGx5IGFzc2lnbmVkIG51bWJlci4gWW91J2QgdGhlbiBuZWVkIHRvIHRyZWF0Cit0aGlzIGFzIGEgbm9uLXN0YXRpYyBjb25maWd1cmF0aW9uIChzZWUgYWJvdmUpLgorCisKK1NQSSBNQVNURVIgTUVUSE9EUwogCiAgICAgbWFzdGVyLT5zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogCVRoaXMgc2V0cyB1cCB0aGUgZGV2aWNlIGNsb2NrIHJhdGUsIFNQSSBtb2RlLCBhbmQgd29yZCBzaXplcy4KQEAgLTQzMSw2ICs0NTcsOSBAQAogCXN0YXRlIGl0IGR5bmFtaWNhbGx5IGFzc29jaWF0ZXMgd2l0aCB0aGF0IGRldmljZS4gIElmIHlvdSBkbyB0aGF0LAogCWJlIHN1cmUgdG8gcHJvdmlkZSB0aGUgY2xlYW51cCgpIG1ldGhvZCB0byBmcmVlIHRoYXQgc3RhdGUuCiAKKworU1BJIE1FU1NBR0UgUVVFVUUKKwogVGhlIGJ1bGsgb2YgdGhlIGRyaXZlciB3aWxsIGJlIG1hbmFnaW5nIHRoZSBJL08gcXVldWUgZmVkIGJ5IHRyYW5zZmVyKCkuCiAKIFRoYXQgcXVldWUgY291bGQgYmUgcHVyZWx5IGNvbmNlcHR1YWwuICBGb3IgZXhhbXBsZSwgYSBkcml2ZXIgdXNlZCBvbmx5CkBAIC00NDAsNiArNDY5LDkgQEAKIG9mdGVuIERNQSAoZXNwZWNpYWxseSBpZiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGluIFNQSSBmbGFzaCksIGFuZAogZXhlY3V0aW9uIGNvbnRleHRzIGxpa2UgSVJRIGhhbmRsZXJzLCB0YXNrbGV0cywgb3Igd29ya3F1ZXVlcyAoc3VjaAogYXMga2V2ZW50ZCkuICBZb3VyIGRyaXZlciBjYW4gYmUgYXMgZmFuY3ksIG9yIGFzIHNpbXBsZSwgYXMgeW91IG5lZWQuCitTdWNoIGEgdHJhbnNmZXIoKSBtZXRob2Qgd291bGQgbm9ybWFsbHkganVzdCBhZGQgdGhlIG1lc3NhZ2UgdG8gYQorcXVldWUsIGFuZCB0aGVuIHN0YXJ0IHNvbWUgYXN5bmNocm9ub3VzIHRyYW5zZmVyIGVuZ2luZSAodW5sZXNzIGl0J3MKK2FscmVhZHkgcnVubmluZykuCiAKIAogVEhBTktTIFRPCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggOGM3MTk1NC4uYmNhNTA5MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtNTIsNyArNTIsNyBAQAogIDUxIC0+IFByb1ZpZGVvIFBWOTUyICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE1NDA6OTUyNF0KICA1MiAtPiBBdmVyTWVkaWEgQXZlclRWLzMwNSAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjIxMDhdCiAgNTMgLT4gQVNVUyBUVi1GTSA3MTM1ICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODQ1XQotIDU0IC0+IExpZmVWaWV3IEZseVRWIFBsYXRpbnVtIEZNICAgICAgICAgICAgICAgWzUxNjg6MDIxNCwxNDg5OjAyMTRdCisgNTQgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gRk0gLyBHb2xkICAgICAgICBbNTE2ODowMjE0LDE0ODk6MDIxNCw1MTY4OjAzMDRdCiAgNTUgLT4gTGlmZVZpZXcgRmx5RFZCLVQgRFVPICAgICAgICAgICAgICAgICAgICBbNTE2ODowMzA2XQogIDU2IC0+IEF2ZXJtZWRpYSBBVmVyVFYgMzA3ICAgICAgICAgICAgICAgICAgICAgWzE0NjE6YTcwYV0KICA1NyAtPiBBdmVybWVkaWEgQVZlclRWIEdPIDAwNyBGTSAgICAgICAgICAgICAgIFsxNDYxOmYzMWZdCkBAIC04NCw3ICs4NCw3IEBACiAgODMgLT4gVGVycmF0ZWMgQ2luZXJneSAyNTAgUENJIFRWICAgICAgICAgICAgICBbMTUzYjoxMTYwXQogIDg0IC0+IExpZmVWaWV3IEZseURWQiBUcmlvICAgICAgICAgICAgICAgICAgICAgWzUxNjg6MDMxOV0KICA4NSAtPiBBdmVyVFYgRFZCLVQgNzc3ICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjJjMDVdCi0gODYgLT4gTGlmZVZpZXcgRmx5RFZCLVQgICAgICAgICAgICAgICAgICAgICAgICBbNTE2ODowMzAxXQorIDg2IC0+IExpZmVWaWV3IEZseURWQi1UIC8gR2VuaXVzIFZpZGVvV29uZGVyIERWQi1UIFs1MTY4OjAzMDEsMTQ4OTowMzAxXQogIDg3IC0+IEFEUyBJbnN0YW50IFRWIER1byBDYXJkYnVzIFBUVjMzMSAgICAgICAgWzAzMzE6MTQyMV0KICA4OCAtPiBUZXZpb24vS1dvcmxkIERWQi1UIDIyMFJGICAgICAgICAgICAgICAgIFsxN2RlOjcyMDFdCiAgODkgLT4gRUxTQSBFWC1WSVNJT04gNzAwVFYgICAgICAgICAgICAgICAgICAgICBbMTA0ODoyMjZjXQpAQCAtOTIsMyArOTIsNCBAQAogIDkxIC0+IEFWZXJNZWRpYSBBMTY5IEIgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6NzM2MF0KICA5MiAtPiBBVmVyTWVkaWEgQTE2OSBCMSAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjYzNjBdCiAgOTMgLT4gTWVkaW9uIDcxMzQgQnJpZGdlICMyICAgICAgICAgICAgICAgICAgICBbMTZiZTowMDA1XQorIDk0IC0+IExpZmVWaWV3IEZseURWQi1UIEh5YnJpZCBDYXJkYnVzICAgICAgICAgWzUxNjg6MzMwNiw1MTY4OjM1MDJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9ldDYxeDI1MS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2V0NjF4MjUxLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2IvZXQ2MXgyNTEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2V0NjF4MjUxLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvaWJtY2FtLnR4dApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2libWNhbS50eHQKaW5kZXggYzI1MDAzNi4uNGE0MGEyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2libWNhbS50eHQKQEAgLTEyMiw3ICsxMjIsNyBAQAogLSBBIExpbnV4IGJveCB3aXRoIFVTQiBzdXBwb3J0ICgyLjMvMi40OyAyLjIgdy9iYWNrcG9ydCBtYXkgd29yaykKIAogLSBBIFZpZGVvNExpbnV4IGNvbXBhdGlibGUgZnJhbWUgZ3JhYmJlciBwcm9ncmFtIHN1Y2ggYXMgeGF3dHYuCi0gIAorCiBIT1cgVE8gQ09NUElMRSBUSEUgRFJJVkVSOgogCiBZb3UgbmVlZCB0byBjb21waWxlIHRoZSBkcml2ZXIgb25seSBpZiB5b3UgYXJlIGEgZGV2ZWxvcGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L292NTExLnR4dApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0CmluZGV4IGE3ZmMwNDMuLjE0Mjc0MWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL292NTExLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L292NTExLnR4dApAQCAtOSw3ICs5LDcgQEAKIAogVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIE9WNTExLCBhIFVTQi1vbmx5IGNoaXAgdXNlZCBpbiBtYW55ICJ3ZWJjYW0iIGRldmljZXMuCiBBbnkgY2FtZXJhIHVzaW5nIHRoZSBPVjUxMS9PVjUxMSsgYW5kIHRoZSBPVjY2MjAvT1Y3NjEwLzIwLzIwQUUgc2hvdWxkIHdvcmsuCi1WaWRlbyBjYXB0dXJlIGRldmljZXMgdGhhdCB1c2UgdGhlIFBoaWxpcHMgU0FBNzExMUEgZGVjb2RlciBhbHNvIHdvcmsuIEl0IAorVmlkZW8gY2FwdHVyZSBkZXZpY2VzIHRoYXQgdXNlIHRoZSBQaGlsaXBzIFNBQTcxMTFBIGRlY29kZXIgYWxzbyB3b3JrLiBJdAogc3VwcG9ydHMgc3RyZWFtaW5nIGFuZCBjYXB0dXJlIG9mIGNvbG9yIG9yIG1vbm9jaHJvbWUgdmlkZW8gdmlhIHRoZSBWaWRlbzRMaW51eAogQVBJLiBNb3N0IFY0TCBhcHBzIGFyZSBjb21wYXRpYmxlIHdpdGggaXQuIE1vc3QgcmVzb2x1dGlvbnMgd2l0aCBhIHdpZHRoIGFuZAogaGVpZ2h0IHRoYXQgYXJlIGEgbXVsdGlwbGUgb2YgOCBhcmUgc3VwcG9ydGVkLgpAQCAtNTIsMTUgKzUyLDE1IEBACiAKIAljaG1vZCA2NjYgL2Rldi92aWRlbwogCWNobW9kIDY2NiAvZGV2L3ZpZGVvMCAoaWYgbmVjZXNzYXJ5KQotCQorCiBOb3cgeW91IGFyZSByZWFkeSB0byBydW4gYSB2aWRlbyBhcHAhIEJvdGggdmlkY2F0IGFuZCB4YXd0diB3b3JrIHdlbGwgZm9yIG1lCiBhdCA2NDB4NDgwLgotCQorCiBbVXNpbmcgdmlkY2F0Ol0KIAogCXZpZGNhdCAtcyA2NDB4NDgwIC1wIGMgPiB0ZXN0LmpwZwogCXh2aWV3IHRlc3QuanBnCi0JCisKIFtVc2luZyB4YXd0djpdCiAKIEZyb20gdGhlIG1haW4geGF3dHYgZGlyZWN0b3J5OgpAQCAtNzAsNyArNzAsNyBAQAogCW1ha2UKIAltYWtlIGluc3RhbGwKIAotTm93IHlvdSBzaG91bGQgYmUgYWJsZSB0byBydW4geGF3dHYuIFJpZ2h0IGNsaWNrIGZvciB0aGUgb3B0aW9ucyBkaWFsb2cuIAorTm93IHlvdSBzaG91bGQgYmUgYWJsZSB0byBydW4geGF3dHYuIFJpZ2h0IGNsaWNrIGZvciB0aGUgb3B0aW9ucyBkaWFsb2cuCiAKIE1PRFVMRSBQQVJBTUVURVJTOgogCkBAIC0yODYsNCArMjg2LDMgQEAKIGFuZCB0aGUgVVNCIHN0YWNrLiBUaGFua3MgdG8gQnJldCBXYWxsYWNoIGZvciBnZXR0aW5nIGNhbWVyYSByZWcgSU8sIElTT0MsIGFuZAogaW1hZ2UgY2FwdHVyZSB3b3JraW5nLiBUaGFua3MgdG8gT3Jpb24gU2t5IExhd2xvciwgS2V2aW4gTW9vcmUsIGFuZCBDbGF1ZGlvCiBNYXRzdW9rYSBmb3IgdGhlaXIgd29yayBhcyB3ZWxsLgotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NlNDAxLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2Ivc2U0MDEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NlNDAxLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NuOWMxMDIudHh0CnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NuOWMxMDIudHh0CmluZGV4IGI5NTdiZWEuLjE0MjkyMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQKQEAgLTE3NCw3ICsxNzQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIHZpZGVvX25yCiBUeXBlOiAgICAgICAgICAgc2hvcnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDY0KQotU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPiAKK1N5bnRheDogICAgICAgICA8LTF8blssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBTcGVjaWZ5IFY0TDIgbWlub3IgbW9kZSBudW1iZXI6CiAgICAgICAgICAgICAgICAgLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgbiA9IHVzZSBtaW5vciBudW1iZXIgbgpAQCAtMTg3LDcgKzE4Nyw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgZm9yY2VfbXVubWFwCiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gNjQpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBGb3JjZSB0aGUgYXBwbGljYXRpb24gdG8gdW5tYXAgcHJldmlvdXNseSBtYXBwZWQgYnVmZmVyIG1lbW9yeQogICAgICAgICAgICAgICAgIGJlZm9yZSBjYWxsaW5nIGFueSBWSURJT0NfU19DUk9QIG9yIFZJRElPQ19TX0ZNVCBpb2N0bCdzLiBOb3QKICAgICAgICAgICAgICAgICBhbGwgdGhlIGFwcGxpY2F0aW9ucyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gVGhpcyBwYXJhbWV0ZXIgaXMKQEAgLTIwNiw3ICsyMDYsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIGRlYnVnCiBUeXBlOiAgICAgICAgICAgdXNob3J0Ci1TeW50YXg6ICAgICAgICAgPG4+IAorU3ludGF4OiAgICAgICAgIDxuPgogRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6CiAgICAgICAgICAgICAgICAgMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpCiAgICAgICAgICAgICAgICAgMSA9IGNyaXRpY2FsIGVycm9ycwpAQCAtMjY3LDcgKzI2Nyw3IEBACiBmcmFtZSBoZWFkZXIgb2YgdGhlIG1vc3QgcmVjZW50IHJlcXVlc3RlZCBhbmQgY2FwdHVyZWQgdmlkZW8gZnJhbWUuIFRoZSBoZWFkZXIKIGlzIGFsd2F5cyAxOC1ieXRlcyBsb25nIGFuZCBpcyBhcHBlbmRlZCB0byBldmVyeSB2aWRlbyBmcmFtZSBieSB0aGUgU045QzEweAogY29udHJvbGxlcnMuIEFzIGFuIGV4YW1wbGUsIHRoaXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCBieSB0aGUgdXNlcgotYXBwbGljYXRpb24gZm9yIGltcGxlbWVudGluZyBhdXRvLWV4cG9zdXJlIGZlYXR1cmVzIHZpYSBzb2Z0d2FyZS4gCithcHBsaWNhdGlvbiBmb3IgaW1wbGVtZW50aW5nIGF1dG8tZXhwb3N1cmUgZmVhdHVyZXMgdmlhIHNvZnR3YXJlLgogCiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgZnJhbWUgaGVhZGVyOgogCkBAIC00NDEsNyArNDQxLDcgQEAKIHZhbHVlIGFuZCBpcyBkaXNwb3NlZCBpbiBtZW1vcnkgYWNjb3JkaW5nIHRvIHRoZSBwYXR0ZXJuIHNob3duIGJlbG93OgogCiBCWzBdICAgR1sxXSAgICBCWzJdICAgIEdbM10gICAgLi4uICAgQlttLTJdICAgICAgICAgR1ttLTFdCi1HW21dICAgUlttKzFdICBHW20rMl0gIFJbbSsyXSAgLi4uICAgR1sybS0yXSAgICAgICAgUlsybS0xXSAKK0dbbV0gICBSW20rMV0gIEdbbSsyXSAgUlttKzJdICAuLi4gICBHWzJtLTJdICAgICAgICBSWzJtLTFdCiAuLi4KIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWyhuLTEpKG0tMildICBHWyhuLTEpKG0tMSldCiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1tuKG0tMildICAgICAgUltuKG0tMSldCkBAIC00NzIsMTIgKzQ3MiwxMiBAQAogVGhlIGFsZ29yaXRobSBwdXJlbHkgZGVzY3JpYmVzIHRoZSBjb252ZXJzaW9uIGZyb20gY29tcHJlc3NlZCBCYXllciBjb2RlIHVzZWQKIGluIHRoZSBTTjlDMTB4IGNoaXBzIHRvIHVuY29tcHJlc3NlZCBCYXllci4gQWRkaXRpb25hbCBzdGVwcyBhcmUgcmVxdWlyZWQgdG8KIGNvbnZlcnQgdGhpcyB0byBhIGNvbG9yIGltYWdlIChpLmUuIGEgY29sb3IgaW50ZXJwb2xhdGlvbiBhbGdvcml0aG0pLgotIAorCiBUaGUgZm9sbG93aW5nIEh1ZmZtYW4gY29kZXMgaGF2ZSBiZWVuIGZvdW5kOgotMDogKzAgKHJlbGF0aXZlIHRvIHJlZmVyZW5jZSBwaXhlbCB2YWx1ZSkgCiswOiArMCAocmVsYXRpdmUgdG8gcmVmZXJlbmNlIHBpeGVsIHZhbHVlKQogMTAwOiArNAogMTAxOiAtND8KLTExMTB4eHh4OiBzZXQgYWJzb2x1dGUgdmFsdWUgdG8geHh4eC4wMDAwIAorMTExMHh4eHg6IHNldCBhYnNvbHV0ZSB2YWx1ZSB0byB4eHh4LjAwMDAKIDExMDE6ICsxMQogMTExMTogLTExCiAxMTAwMTogKzIwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9zdHY2ODAudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zdHY2ODAudHh0CnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdXNiL3N0djY4MC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvc3R2NjgwLnR4dAppbmRleCA2NDQ4MDQxLi40Zjg5NDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9zdHY2ODAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc3R2NjgwLnR4dApAQCAtNSwxNSArNSwxNSBAQAogCiBJTlRST0RVQ1RJT046CiAKLVNUTWljcm9lbGVjdHJvbmljcyBwcm9kdWNlcyB0aGUgU1RWMDY4MEIgY2hpcCwgd2hpY2ggY29tZXMgaW4gdHdvIAotdHlwZXMsIC0wMDEgYW5kIC0wMDMuIFRoZSAtMDAzIHZlcnNpb24gYWxsb3dzIHRoZSByZWNvcmRpbmcgYW5kIGRvd25sb2FkaW5nIAotb2Ygc291bmQgY2xpcHMgZnJvbSB0aGUgY2FtZXJhLCBhbmQgYWxsb3dzIGEgZmxhc2ggYXR0YWNobWVudC4gT3RoZXJ3aXNlLCAKLWl0IHVzZXMgdGhlIHNhbWUgY29tbWFuZHMgYXMgdGhlIC0wMDEgdmVyc2lvbi4gQm90aCB2ZXJzaW9ucyBzdXBwb3J0IGEgCi12YXJpZXR5IG9mIFNEUkFNIHNpemVzIGFuZCBzZW5zb3JzLCBhbGxvd2luZyBmb3IgYSBtYXhpbXVtIG9mIDI2IFZHQSBvciAyMCAKLUNJRiBwaWN0dXJlcy4gVGhlIFNUVjA2ODAgc3VwcG9ydHMgZWl0aGVyIGEgc2VyaWFsIG9yIGEgdXNiIGludGVyZmFjZSwgYW5kIAorU1RNaWNyb2VsZWN0cm9uaWNzIHByb2R1Y2VzIHRoZSBTVFYwNjgwQiBjaGlwLCB3aGljaCBjb21lcyBpbiB0d28KK3R5cGVzLCAtMDAxIGFuZCAtMDAzLiBUaGUgLTAwMyB2ZXJzaW9uIGFsbG93cyB0aGUgcmVjb3JkaW5nIGFuZCBkb3dubG9hZGluZworb2Ygc291bmQgY2xpcHMgZnJvbSB0aGUgY2FtZXJhLCBhbmQgYWxsb3dzIGEgZmxhc2ggYXR0YWNobWVudC4gT3RoZXJ3aXNlLAoraXQgdXNlcyB0aGUgc2FtZSBjb21tYW5kcyBhcyB0aGUgLTAwMSB2ZXJzaW9uLiBCb3RoIHZlcnNpb25zIHN1cHBvcnQgYQordmFyaWV0eSBvZiBTRFJBTSBzaXplcyBhbmQgc2Vuc29ycywgYWxsb3dpbmcgZm9yIGEgbWF4aW11bSBvZiAyNiBWR0Egb3IgMjAKK0NJRiBwaWN0dXJlcy4gVGhlIFNUVjA2ODAgc3VwcG9ydHMgZWl0aGVyIGEgc2VyaWFsIG9yIGEgdXNiIGludGVyZmFjZSwgYW5kCiB2aWRlbyBpcyBwb3NzaWJsZSB0aHJvdWdoIHRoZSB1c2IgaW50ZXJmYWNlLgogCi1UaGUgZm9sbG93aW5nIGNhbWVyYXMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlciwgYWx0aG91Z2ggYW55IAorVGhlIGZvbGxvd2luZyBjYW1lcmFzIGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhpcyBkcml2ZXIsIGFsdGhvdWdoIGFueQogY2FtZXJhIHdpdGggVmVuZG9yL1Byb2R1Y3QgY29kZXMgb2YgMDU1My8wMjAyIHNob3VsZCB3b3JrOgogCiBBaXB0ZWsgUGVuY2FtICh2YXJpb3VzIG1vZGVscykKQEAgLTM0LDE1ICszNCwxNSBAQAogTU9EVUxFIE9QVElPTlM6CiAKIFdoZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91IGNhbiBzZXQgYSAic3dhcFJHQj0xIgotb3B0aW9uLCBpZiBuZWNlc3NhcnksIGZvciB0aG9zZSBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIGl0IAotKHN1Y2ggYXMgeGF3dHYpLiBIb3dldmVyLCB0aGUgZHJpdmVyIHNob3VsZCBkZXRlY3QgYW5kIHNldCB0aGlzIAorb3B0aW9uLCBpZiBuZWNlc3NhcnksIGZvciB0aG9zZSBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIGl0Cisoc3VjaCBhcyB4YXd0dikuIEhvd2V2ZXIsIHRoZSBkcml2ZXIgc2hvdWxkIGRldGVjdCBhbmQgc2V0IHRoaXMKIGF1dG9tYXRpY2FsbHksIHNvIHRoaXMgb3B0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgdXNlZC4KIAogCiBLTk9XTiBQUk9CTEVNUzoKIAotVGhlIGRyaXZlciBzZWVtcyB0byB3b3JrIGJldHRlciB3aXRoIHRoZSB1c2Itb2hjaSB0aGFuIHRoZSB1c2ItdWhjaSBob3N0IAotY29udHJvbGxlciBkcml2ZXIuIAorVGhlIGRyaXZlciBzZWVtcyB0byB3b3JrIGJldHRlciB3aXRoIHRoZSB1c2Itb2hjaSB0aGFuIHRoZSB1c2ItdWhjaSBob3N0Citjb250cm9sbGVyIGRyaXZlci4KIAogSEVMUDoKIApAQCAtNTAsNiArNTAsNCBAQAogaHR0cDovL3BlcnNvbmFsLmNsdC5iZWxsc291dGgubmV0L35ranNpc3NvbiBvciBhdAogaHR0cDovL3N0djA2ODAtdXNiLnNvdXJjZWZvcmdlLm5ldAogCi1BbnkgcXVlc3Rpb25zIHRvIG1lIGNhbiBiZSBzZW5kIHRvOiAga2pzaXNzb25AYmVsbHNvdXRoLm5ldAotCi0KK0FueSBxdWVzdGlvbnMgdG8gbWUgY2FuIGJlIHNlbmQgdG86ICBranNpc3NvbkBiZWxsc291dGgubmV0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY4Y2YudHh0CnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdXNiL3c5OTY4Y2YudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY4Y2YudHh0CmluZGV4IDlkNDZjZDAuLjNiNzA0ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3c5OTY4Y2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQKQEAgLTEsNSArMSw1IEBACiAKLSAgICAgICAgICAgICAgICAgICBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcCAKKyAgICAgICAgICAgICAgICAgICBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcAogICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIGZvciBMaW51eCAyLjYgKGJhc2ljIHZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTE1LDcgKzExNSw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09CiBGb3IgaXQgdG8gd29yayBwcm9wZXJseSwgdGhlIGRyaXZlciBuZWVkcyBrZXJuZWwgc3VwcG9ydCBmb3IgVmlkZW80TGludXgsIFVTQgogYW5kIEkyQywgYW5kIHRoZSAib3ZjYW1jaGlwIiBtb2R1bGUgZm9yIHRoZSBpbWFnZSBzZW5zb3IuIE1ha2Ugc3VyZSB5b3UgYXJlIG5vdAotYWN0dWFsbHkgdXNpbmcgYW55IGV4dGVybmFsICJvdmNhbWNoaXAiIG1vZHVsZSwgZ2l2ZW4gdGhhdCB0aGUgVzk5Nls4N11DRiAKK2FjdHVhbGx5IHVzaW5nIGFueSBleHRlcm5hbCAib3ZjYW1jaGlwIiBtb2R1bGUsIGdpdmVuIHRoYXQgdGhlIFc5OTZbODddQ0YKIGRyaXZlciBkZXBlbmRzIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgcHJlc2VudCBpbiB0aGUgb2ZmaWNpYWwga2VybmVscy4KIAogVGhlIGZvbGxvd2luZyBvcHRpb25zIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgYmUgZW5hYmxlZCBhbmQKQEAgLTE5NywxNiArMTk3LDE2IEBACiAgICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSAnb3ZjYW1jaGlwJyBtb2R1bGUgdG8gYmUgbG9hZGVkIGFuZCBmb3IKICAgICAgICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgcHJlc2VudC4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU5hbWU6ICAgICAgICAgICBzaW1jYW1zIAotVHlwZTogICAgICAgICAgIGludCAKLVN5bnRheDogICAgICAgICA8bj4gCitOYW1lOiAgICAgICAgICAgc2ltY2FtcworVHlwZTogICAgICAgICAgIGludAorU3ludGF4OiAgICAgICAgIDxuPgogRGVzY3JpcHRpb246ICAgIE51bWJlciBvZiBjYW1lcmFzIGFsbG93ZWQgdG8gc3RyZWFtIHNpbXVsdGFuZW91c2x5LgogICAgICAgICAgICAgICAgIG4gbWF5IHZhcnkgZnJvbSAwIHRvIDMyLgogRGVmYXVsdDogICAgICAgIDMyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgdmlkZW9fbnIKIFR5cGU6ICAgICAgICAgICBpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQotU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPiAKK1N5bnRheDogICAgICAgICA8LTF8blssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBTcGVjaWZ5IFY0TCBtaW5vciBtb2RlIG51bWJlci4KICAgICAgICAgICAgICAgICAtMSA9IHVzZSBuZXh0IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICBuID0gdXNlIG1pbm9yIG51bWJlciBuCkBAIC0yMTksNyArMjE5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBwYWNrZXRfc2l6ZQogVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPG5bLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPgogRGVzY3JpcHRpb246ICAgIFNwZWNpZnkgdGhlIG1heGltdW0gZGF0YSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgZm9yIGFsdGVybmF0ZQogICAgICAgICAgICAgICAgIHNldHRpbmdzLCBmb3IgZWFjaCBkZXZpY2UuIG4gaXMgc2NhbGVkIGJldHdlZW4gNjMgYW5kIDEwMjMuCiBEZWZhdWx0OiAgICAgICAgMTAyMwpAQCAtMjM0LDcgKzIzNCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgZG91YmxlX2J1ZmZlcgogVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQotU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLgogICAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSBlbmFibGVkIGlmIHlvdSB3YW50IHNtb290aCB2aWRlbyBvdXRwdXQ6IGlmIHlvdQogICAgICAgICAgICAgICAgIG9idGFpbiBvdXQgb2Ygc3luYy4gdmlkZW8sIGRpc2FibGUgaXQsIG9yIHRyeSB0bwpAQCAtMjQzLDEzICsyNDMsMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBjbGFtcGluZwogVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQotU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgVmlkZW8gZGF0YSBjbGFtcGluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLgogRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBmaWx0ZXJfdHlwZQogVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MXwyWywuLi5dPiAKK1N5bnRheDogICAgICAgICA8MHwxfDJbLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgVmlkZW8gZmlsdGVyIHR5cGUuCiAgICAgICAgICAgICAgICAgMCBub25lLCAxICgxLTItMSkgMy10YXAgZmlsdGVyLCAyICgyLTMtNi0zLTIpIDUtdGFwIGZpbHRlci4KICAgICAgICAgICAgICAgICBUaGUgZmlsdGVyIGlzIHVzZWQgdG8gcmVkdWNlIG5vaXNlIGFuZCBhbGlhc2luZyBhcnRpZmFjdHMKQEAgLTI1OCwxMyArMjU4LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgbGFyZ2V2aWV3CiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KIERlc2NyaXB0aW9uOiAgICBMYXJnZSB2aWV3OiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCiBEZWZhdWx0OiAgICAgICAgMSBmb3IgZXZlcnkgZGV2aWNlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIHVwc2NhbGluZwogVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQotU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgU29mdHdhcmUgc2NhbGluZyAoZm9yIG5vbi1jb21wcmVzc2VkIHZpZGVvIG9ubHkpOgogICAgICAgICAgICAgICAgIDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KICAgICAgICAgICAgICAgICBEaXNhYmxlIGl0IGlmIHlvdSBoYXZlIGEgc2xvdyBDUFUgb3IgeW91IGRvbid0IGhhdmUgZW5vdWdoCkBAIC0zNDEsOCArMzQxLDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBiYW5kaW5nZmlsdGVyCiBUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCi1EZXNjcmlwdGlvbjogICAgQmFuZGluZyBmaWx0ZXIgdG8gcmVkdWNlIGVmZmVjdHMgb2YgZmx1b3Jlc2NlbnQgCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBCYW5kaW5nIGZpbHRlciB0byByZWR1Y2UgZWZmZWN0cyBvZiBmbHVvcmVzY2VudAogICAgICAgICAgICAgICAgIGxpZ2h0aW5nOgogICAgICAgICAgICAgICAgIDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KICAgICAgICAgICAgICAgICBUaGlzIGZpbHRlciB0cmllcyB0byByZWR1Y2UgdGhlIHBhdHRlcm4gb2YgaG9yaXpvbnRhbApAQCAtMzc0LDcgKzM3NCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgbW9ub2Nocm9tZQogVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQotU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgVGhlIGltYWdlIHNlbnNvciBpcyBtb25vY2hyb21lOgogICAgICAgICAgICAgICAgIDAgPSBubywgMSA9IHllcwogRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KQEAgLTQwMCwxOSArNDAwLDE5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgY29udHJhc3QKIFR5cGU6ICAgICAgICAgICBsb25nIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKLVN5bnRheDogICAgICAgICA8blssLi4uXT4gCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CiBEZXNjcmlwdGlvbjogICAgU2V0IHBpY3R1cmUgY29udHJhc3QgKDAtNjU1MzUpLgogRGVmYXVsdDogICAgICAgIDUwMDAwIGZvciBldmVyeSBkZXZpY2UuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgd2hpdGVuZXNzCiBUeXBlOiAgICAgICAgICAgbG9uZyBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCi1TeW50YXg6ICAgICAgICAgPG5bLC4uLl0+IAorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPgogRGVzY3JpcHRpb246ICAgIFNldCBwaWN0dXJlIHdoaXRlbmVzcyAoMC02NTUzNSkuCiBEZWZhdWx0OiAgICAgICAgMzI3NjggZm9yIGV2ZXJ5IGRldmljZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBkZWJ1ZwogVHlwZTogICAgICAgICAgIGludAotU3ludGF4OiAgICAgICAgIDxuPiAKK1N5bnRheDogICAgICAgICA8bj4KIERlc2NyaXB0aW9uOiAgICBEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbGV2ZWwsIGZyb20gMCB0byA2OgogICAgICAgICAgICAgICAgIDAgPSBub25lICh1c2UgY2FyZWZ1bGx5KQogICAgICAgICAgICAgICAgIDEgPSBjcml0aWNhbCBlcnJvcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3pjMDMwMS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pjMDMwMS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdXNiL3pjMDMwMS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAppbmRleCAxYWQ5YWYxLi42ODcxMDRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dApAQCAtMjcsMTIgKzI3LDIxIEBACiB0aGUgY29uZmlndXJlZCBodWdlcGFnZSBzaXplIC0gdGhpcyBpcyBuZWVkZWQgZm9yIGdlbmVyYXRpbmcgdGhlIHByb3BlcgogYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGFib3ZlIHN5c3RlbSBjYWxscy4KIAotVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaGF2ZSBvdXRwdXQgbGlrZToKK1RoZSBvdXRwdXQgb2YgImNhdCAvcHJvYy9tZW1pbmZvIiB3aWxsIGhhdmUgbGluZXMgbGlrZToKIAogLi4uLi4KIEh1Z2VQYWdlc19Ub3RhbDogeHh4CiBIdWdlUGFnZXNfRnJlZTogIHl5eQotSHVnZXBhZ2VzaXplOiAgICB6enogS0IKK0h1Z2VQYWdlc19Sc3ZkOiAgd3d3CitIdWdlcGFnZXNpemU6ICAgIHp6eiBrQgorCit3aGVyZToKK0h1Z2VQYWdlc19Ub3RhbCBpcyB0aGUgc2l6ZSBvZiB0aGUgcG9vbCBvZiBodWdlcGFnZXMuCitIdWdlUGFnZXNfRnJlZSBpcyB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlcyBpbiB0aGUgcG9vbCB0aGF0IGFyZSBub3QgeWV0CithbGxvY2F0ZWQuCitIdWdlUGFnZXNfUnN2ZCBpcyBzaG9ydCBmb3IgInJlc2VydmVkLCIgYW5kIGlzIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzCitmb3Igd2hpY2ggYSBjb21taXRtZW50IHRvIGFsbG9jYXRlIGZyb20gdGhlIHBvb2wgaGFzIGJlZW4gbWFkZSwgYnV0IG5vCithbGxvY2F0aW9uIGhhcyB5ZXQgYmVlbiBtYWRlLiBJdCdzIHZhZ3VlbHkgYW5hbG9nb3VzIHRvIG92ZXJjb21taXQuCiAKIC9wcm9jL2ZpbGVzeXN0ZW1zIHNob3VsZCBhbHNvIHNob3cgYSBmaWxlc3lzdGVtIG9mIHR5cGUgImh1Z2V0bGJmcyIgY29uZmlndXJlZAogaW4gdGhlIGtlcm5lbC4KQEAgLTQyLDExICs1MSwxMSBAQAogcHJlLWNvbmZpZ3VyZWQpIGh1Z2VwYWdlcy4KIFRoZSBhbGxvY2F0aW9uIChvciBkZWFsbG9jYXRpb24pIG9mIGh1Z2V0bGIgcGFnZXMgaXMgcG9zc2libGUgb25seSBpZiB0aGVyZSBhcmUKIGVub3VnaCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgZnJlZSBwYWdlcyBpbiBzeXN0ZW0gKGZyZWVpbmcgb2YgaHVnZXBhZ2VzIGlzCi1wb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZSBlbm91Z2ggaHVnZXRsYiBwYWdlcyBmcmVlIHRoYXQgY2FuIGJlIHRyYW5zZmVyZWQKK3Bvc3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlIGVub3VnaCBodWdldGxiIHBhZ2VzIGZyZWUgdGhhdCBjYW4gYmUgdHJhbnNmZXJyZWQKIGJhY2sgdG8gcmVndWxhciBtZW1vcnkgcG9vbCkuCiAKLVBhZ2VzIHRoYXQgYXJlIHVzZWQgYXMgaHVnZXRsYiBwYWdlcyBhcmUgcmVzZXJ2ZWQgaW5zaWRlIHRoZSBrZXJuZWwgYW5kIGNhbgotbm90IGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgorUGFnZXMgdGhhdCBhcmUgdXNlZCBhcyBodWdldGxiIHBhZ2VzIGFyZSByZXNlcnZlZCBpbnNpZGUgdGhlIGtlcm5lbCBhbmQgY2Fubm90CitiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KIAogT25jZSB0aGUga2VybmVsIHdpdGggSHVnZXRsYiBwYWdlIHN1cHBvcnQgaXMgYnVpbHQgYW5kIHJ1bm5pbmcsIGEgdXNlciBjYW4KIHVzZSBlaXRoZXIgdGhlIG1tYXAgc3lzdGVtIGNhbGwgb3Igc2hhcmVkIG1lbW9yeSBzeXN0ZW0gY2FsbHMgdG8gc3RhcnQgdXNpbmcKQEAgLTYwLDcgKzY5LDcgQEAKIFRoaXMgY29tbWFuZCB3aWxsIHRyeSB0byBjb25maWd1cmUgMjAgaHVnZXBhZ2VzIGluIHRoZSBzeXN0ZW0uICBUaGUgc3VjY2Vzcwogb3IgZmFpbHVyZSBvZiBhbGxvY2F0aW9uIGRlcGVuZHMgb24gdGhlIGFtb3VudCBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKIG1lbW9yeSB0aGF0IGlzIHByZXNldCBpbiBzeXN0ZW0gYXQgdGhpcyB0aW1lLiAgU3lzdGVtIGFkbWluaXN0cmF0b3JzIG1heSB3YW50Ci10byBwdXQgdGhpcyBjb21tYW5kIGluIG9uZSBvZiB0aGUgbG9jYWwgcmMgaW5pdCBmaWxlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUKK3RvIHB1dCB0aGlzIGNvbW1hbmQgaW4gb25lIG9mIHRoZSBsb2NhbCByYyBpbml0IGZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUKIGtlcm5lbCB0byByZXF1ZXN0IGh1Z2UgcGFnZXMgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcyAod2hlbiB0aGUgcG9zc2liaWxpdHkKIG9mIGdldHRpbmcgcGh5c2ljYWwgY29udGlndW91cyBwYWdlcyBpcyBzdGlsbCB2ZXJ5IGhpZ2gpLgogCkBAIC03OCw4ICs4Nyw4IEBACiBtb2RlIG9mIHJvb3Qgb2YgZmlsZSBzeXN0ZW0gdG8gdmFsdWUgJiAwNzc3LiAgVGhpcyB2YWx1ZSBpcyBnaXZlbiBpbiBvY3RhbC4KIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIDA3NTUgaXMgcGlja2VkLiBUaGUgc2l6ZSBvcHRpb24gc2V0cyB0aGUgbWF4aW11bSB2YWx1ZSBvZgogbWVtb3J5IChodWdlIHBhZ2VzKSBhbGxvd2VkIGZvciB0aGF0IGZpbGVzeXN0ZW0gKC9tbnQvaHVnZSkuIFRoZSBzaXplIGlzCi1yb3VuZGVkIGRvd24gdG8gSFBBR0VfU0laRS4gIFRoZSBvcHRpb24gbnJfaW5vZGUgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YKLWlub2RlcyB0aGF0IC9tbnQvaHVnZSBjYW4gdXNlLiAgSWYgdGhlIHNpemUgb3IgbnJfaW5vZGUgb3B0aW9ucyBhcmUgbm90Cityb3VuZGVkIGRvd24gdG8gSFBBR0VfU0laRS4gIFRoZSBvcHRpb24gbnJfaW5vZGVzIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mCitpbm9kZXMgdGhhdCAvbW50L2h1Z2UgY2FuIHVzZS4gIElmIHRoZSBzaXplIG9yIG5yX2lub2RlcyBvcHRpb25zIGFyZSBub3QKIHByb3ZpZGVkIG9uIGNvbW1hbmQgbGluZSB0aGVuIG5vIGxpbWl0cyBhcmUgc2V0LiAgRm9yIHNpemUgYW5kIG5yX2lub2Rlcwogb3B0aW9ucywgeW91IGNhbiB1c2UgW0d8Z10vW018bV0vW0t8a10gdG8gcmVwcmVzZW50IGdpZ2EvbWVnYS9raWxvLiBGb3IKIGV4YW1wbGUsIHNpemU9MksgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgc2l6ZT0yMDQ4LiBBbiBleGFtcGxlIGlzIGdpdmVuIGF0CkBAIC04OCw3ICs5Nyw3IEBACiByZWFkIGFuZCB3cml0ZSBzeXN0ZW0gY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZmlsZXMgdGhhdCByZXNpZGUgb24gaHVnZXRsYgogZmlsZSBzeXN0ZW1zLgogCi1BIHJlZ3VsYXIgY2hvd24sIGNoZ3JwIGFuZCBjaG1vZCBjb21tYW5kcyAod2l0aCByaWdodCBwZXJtaXNzaW9ucykgY291bGQgYmUKK1JlZ3VsYXIgY2hvd24sIGNoZ3JwLCBhbmQgY2htb2QgY29tbWFuZHMgKHdpdGggcmlnaHQgcGVybWlzc2lvbnMpIGNvdWxkIGJlCiB1c2VkIHRvIGNoYW5nZSB0aGUgZmlsZSBhdHRyaWJ1dGVzIG9uIGh1Z2V0bGJmcy4KIAogQWxzbywgaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBubyBzdWNoIG1vdW50IGNvbW1hbmQgaXMgcmVxdWlyZWQgaWYgdGhlCkBAIC05Niw4ICsxMDUsOCBAQAogd2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc2hvdWxkIGJlIGEgbWVtYmVyIG9mCiBhIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0byBjb25maWd1cmUgdGhhdCBnaWQgaW50bwogL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yIHNhbWUgb3IgZGlmZmVyZW50Ci1hcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscy4gIFRob3VnaCB0aGUKLW1vdW50IG9mIGZpbGVzeXN0ZW0gd2lsbCBiZSByZXF1aXJlZCBmb3IgdXNpbmcgbW1hcHMuCithcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscywgdGhvdWdoIHRoZQorbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwIGNhbGxzLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dAppbmRleCBjNWJlYjU0Li4yMWVkNTExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0CkBAIC0zNiw2ICszNiw5IEBACiBzb21lIGRhdGEgdG8gdGhlIGRldmljZS4gIFNvIGEgdmVyeSBzaW1wbGUgd2F0Y2hkb2cgZGFlbW9uIHdvdWxkIGxvb2sKIGxpa2UgdGhpczoKIAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIHsKIAlpbnQgZmQ9b3BlbigiL2Rldi93YXRjaGRvZyIsT19XUk9OTFkpOwogCWlmIChmZD09LTEpIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CmluZGV4IDE5MjEzNTMuLmYyY2Q2ZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMTUxLDYgKzE1MSwxMSBAQAogCiAgIG51bWE9ZmFrZT1YICAgRmFrZSBYIG5vZGVzIGFuZCBpZ25vcmUgTlVNQSBzZXR1cCBvZiB0aGUgYWN0dWFsIG1hY2hpbmUuCiAKKyAgbnVtYT1ob3RhZGQ9cGVyY2VudAorCQlPbmx5IGFsbG93IGhvdGFkZCBtZW1vcnkgdG8gcHJlYWxsb2NhdGUgcGFnZSBzdHJ1Y3R1cmVzIHVwdG8KKwkJcGVyY2VudCBvZiBhbHJlYWR5IGF2YWlsYWJsZSBtZW1vcnkuCisJCW51bWE9aG90YWRkPTAgd2lsbCBkaXNhYmxlIGhvdGFkZCBtZW1vcnkuCisKIEFDUEkKIAogICBhY3BpPW9mZglEb24ndCBlbmFibGUgQUNQSQpkaWZmIC0tZ2l0IGEvS2J1aWxkIGIvS2J1aWxkCmluZGV4IDk1ZDZhMDAuLjJkNGY5NWUgMTAwNjQ0Ci0tLSBhL0tidWlsZAorKysgYi9LYnVpbGQKQEAgLTE4LDcgKzE4LDcgQEAKIAkiL14tPi97czpeLT5cKFteIF0qXCkgW1wkJCNdKlwoW14gXSpcKSBcKC4qXCk6I2RlZmluZSBcMSBcMiAvKiBcMyAqLzo7IHM6LT46OjsgcDt9IgogZW5kZWYKICMgT3ZlcnJpZGUgZGVmYXVsdCByZWdleHAgZm9yIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMKLXNlZC0kKENPTkZJR19NSVBTKSA6PSAiL15AQEAvcy8vL3AiCitzZWQtJChDT05GSUdfTUlQUykgOj0gIi9eQEBAL3tzL15AQEAvLzsgcy8gXCMuKlwkJC8vOyBwO30iCiAKIHF1aWV0X2NtZF9vZmZzZXRzID0gR0VOICAgICAkQAogZGVmaW5lIGNtZF9vZmZzZXRzCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGM5NDY1ODEuLmMzYzU4NDIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00MCwxMSArNDAsMjAgQEAKIAlQTEVBU0UgZG9jdW1lbnQga25vd24gYnVncy4gSWYgaXQgZG9lc24ndCB3b3JrIGZvciBldmVyeXRoaW5nCiAJb3IgZG9lcyBzb21ldGhpbmcgdmVyeSBvZGQgb25jZSBhIG1vbnRoIGRvY3VtZW50IGl0LgogCisJUExFQVNFIHJlbWVtYmVyIHRoYXQgc3VibWlzc2lvbnMgbXVzdCBiZSBtYWRlIHVuZGVyIHRoZSB0ZXJtcworCW9mIHRoZSBPU0RMIGNlcnRpZmljYXRlIG9mIGNvbnRyaWJ1dGlvbgorCShodHRwOi8vd3d3Lm9zZGwub3JnL25ld3Nyb29tL3ByZXNzX3JlbGVhc2VzLzIwMDQvMjAwNF8wNV8yNF9kY28uaHRtbCkKKwlhbmQgc2hvdWxkIGluY2x1ZGUgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lLgorCiA2LglNYWtlIHN1cmUgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIHNlbmQgYW55IGNoYW5nZXMgeW91IG1ha2UuIElmIHlvdQogCWRvIGNoYW5nZXMgYXQgd29yayB5b3UgbWF5IGZpbmQgeW91ciBlbXBsb3llciBvd25zIHRoZSBwYXRjaAogCW5vdCB5b3UuCiAKLTcuCUhhcHB5IGhhY2tpbmcuCis3LglXaGVuIHNlbmRpbmcgc2VjdXJpdHkgcmVsYXRlZCBjaGFuZ2VzIG9yIHJlcG9ydHMgdG8gYSBtYWludGFpbmVyCisJcGxlYXNlIENjOiBzZWN1cml0eUBrZXJuZWwub3JnLCBlc3BlY2lhbGx5IGlmIHRoZSBtYWludGFpbmVyCisJZG9lcyBub3QgcmVzcG9uZC4KKworOC4JSGFwcHkgaGFja2luZy4KIAogIAkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDExLDYgKzQyMCw3IEBACiBQOglSYWxmIEJhZWNobGUKIE06CXJhbGZAbGludXgtbWlwcy5vcmcKIEw6CWxpbnV4LWhhbXNAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3LmxpbnV4LWF4MjUub3JnLwogUzoJTWFpbnRhaW5lZAogCiBCQVlDT00vSERMQ0RSViBEUklWRVJTIEZPUiBBWC4yNQpAQCAtNDIwLDYgKzQzMCwxNCBAQAogVzoJaHR0cDovL3d3dy5iYXljb20ub3JnL350b20vaGFtL2hhbS5odG1sCiBTOglNYWludGFpbmVkCiAKK0JDTTQzWFggV0lSRUxFU1MgRFJJVkVSCitQOglNaWNoYWVsIEJ1ZXNjaAorTToJbWJAYnUzc2NoLmRlCitQOglTdGVmYW5vIEJyaXZpbworTToJc3QzQHJpc2V1cC5uZXQKK1c6CWh0dHA6Ly9iY200M3h4LmJlcmxpb3MuZGUvCitTOglNYWludGFpbmVkCisKIEJFRlMgRklMRSBTWVNURU0KIFA6CVNlcmdleSBTLiBLb3N0eWxpb3YKIE06CXJhdGhhbWFoYXRhQHBocDQucnUKQEAgLTU0Nyw3ICs1NjUsMTkgQEAKIFA6CUFybmQgQmVyZ21hbm4KIE06CWFybmRAYXJuZGIuZGUKIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCi1XOglodHRwOi8vbGludXhwcGM2NC5vcmcKK1c6CWh0dHA6Ly93d3cucGVuZ3VpbnBwYy5vcmcvcHBjNjQvCitTOglTdXBwb3J0ZWQKKworQlJPQURDT00gQk5YMiBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgorUDoJTWljaGFlbCBDaGFuCitNOgltY2hhbkBicm9hZGNvbS5jb20KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorCitCUk9BRENPTSBURzMgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVIKK1A6CU1pY2hhZWwgQ2hhbgorTToJbWNoYW5AYnJvYWRjb20uY29tCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIAogQlRUViBWSURFTzRMSU5VWCBEUklWRVIKQEAgLTk2MCw3ICs5OTAsNyBAQAogRVhUMyBGSUxFIFNZU1RFTQogUDoJU3RlcGhlbiBUd2VlZGllLCBBbmRyZXcgTW9ydG9uCiBNOglzY3RAcmVkaGF0LmNvbSwgYWtwbUBvc2RsLm9yZywgYWRpbGdlckBjbHVzdGVyZnMuY29tCi1MOglleHQzLXVzZXJzQHJlZGhhdC5jb20KK0w6CWV4dDItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKIEY3MTgwNUYgSEFSRFdBUkUgTU9OSVRPUklORyBEUklWRVIKQEAgLTE0NTEsNiArMTQ4MSwxOSBAQAogTToJampjaWFybGFAcmFpei51bmN1LmVkdS5hcgogUzoJTWFpbnRhaW5lZAogCitJUEFUSCBEUklWRVI6CitQOglCcnlhbiBPJ1N1bGxpdmFuCitNOglzdXBwb3J0QHBhdGhzY2FsZS5jb20KK0w6CW9wZW5pYi1nZW5lcmFsQG9wZW5pYi5vcmcKK1M6CVN1cHBvcnRlZAorCitJUE1JIFNVQlNZU1RFTQorUDoJQ29yZXkgTWlueWFyZAorTToJbWlueWFyZEBhY20ub3JnCitMOglvcGVuaXBtaS1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CitXOglodHRwOi8vb3BlbmlwbWkuc291cmNlZm9yZ2UubmV0LworUzoJU3VwcG9ydGVkCisKIElQWCBORVRXT1JLIExBWUVSCiBQOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KIE06CWFjbWVAY29uZWN0aXZhLmNvbS5icgpAQCAtMTQ1OCwxMCArMTUwMSwxMSBAQAogUzoJTWFpbnRhaW5lZAogCiBJUkRBIFNVQlNZU1RFTQotUDoJSmVhbiBUb3VycmlsaGVzCitQOglTYW11ZWwgT3J0aXoKK006CXNhbXVlbEBzb3J0aXoub3JnCiBMOglpcmRhLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8KLVM6CU9kZCBGaXhlcworUzoJTWFpbnRhaW5lZAogCiBJU0FQTlAKIFA6CUphcm9zbGF2IEt5c2VsYQpAQCAtMTUwNywxMiArMTU1MSwyOCBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zaGFnZ3kvamZzLTIuNi5naXQKIFM6CVN1cHBvcnRlZAogCitKT1VSTkFMTElORyBMQVlFUiBGT1IgQkxPQ0sgREVWSUNTIChKQkQpCitQOglTdGVwaGVuIFR3ZWVkaWUsIEFuZHJldyBNb3J0b24KK006CXNjdEByZWRoYXQuY29tLCBha3BtQG9zZGwub3JnCitMOglleHQyLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBLQ09ORklHCiBQOglSb21hbiBaaXBwZWwKIE06CXppcHBlbEBsaW51eC1tNjhrLm9yZwogTDoJa2J1aWxkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitLRFVNUAorUDoJVml2ZWsgR295YWwKK006CXZnb3lhbEBpbi5pYm0uY29tCitQOglIYXJlbiBNeW5lbmkKK006CWhiYWJ1QHVzLmlibS5jb20KK0w6CWZhc3Rib290QGxpc3RzLm9zZGwub3JnCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9rZHVtcC8KK1M6CU1haW50YWluZWQKKwogS0VSTkVMIEFVVE9NT1VOVEVSIChBVVRPRlMpCiBQOglILiBQZXRlciBBbnZpbgogTToJaHBhQHp5dG9yLmNvbQpAQCAtMTU1MCw5ICsxNjEwLDcgQEAKIAogS0VYRUMKIFA6CUVyaWMgQmllZGVybWFuCi1QOglSYW5keSBEdW5sYXAKIE06CWViaWVkZXJtQHhtaXNzaW9uLmNvbQotTToJcmR1bmxhcEB4ZW5vdGltZS5uZXQKIFc6CWh0dHA6Ly93d3cueG1pc3Npb24uY29tL35lYmllZGVybS9maWxlcy9rZXhlYy8KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWZhc3Rib290QG9zZGwub3JnCkBAIC0xNTgyLDYgKzE2NDAsMTEgQEAKIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK0xFRCBTVUJTWVNURU0KK1A6CVJpY2hhcmQgUHVyZGllCitNOglycHVyZGllQHJwc3lzLm5ldAorUzoJTWFpbnRhaW5lZAorCiBMRUdPIFVTQiBUb3dlciBkcml2ZXIKIFA6CUp1ZXJnZW4gU3R1YmVyCiBNOglzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKQEAgLTE2NDEsNyArMTcwNCw3IEBACiAKIExJTlVYIEZPUiBQT1dFUlBDIEVNQkVEREVEIFBQQzhYWAogUDoJTWFyY2VsbyBUb3NhdHRpCi1NOgltYXJjZWxvLnRvc2F0dGlAY3ljbGFkZXMuY29tCitNOgltYXJjZWxvQGt2YWNrLm9yZwogVzoJaHR0cDovL3d3dy5wZW5ndWlucHBjLm9yZy8KIEw6CWxpbnV4cHBjLWVtYmVkZGVkQG96bGFicy5vcmcKIFM6CU1haW50YWluZWQKQEAgLTE2NjUsNyArMTcyOCw3IEBACiBQOglBbnRvbiBCbGFuY2hhcmQKIE06CWFudG9uQHNhbWJhLm9yZwogTToJYW50b25AYXUuaWJtLmNvbQotVzoJaHR0cDovL2xpbnV4cHBjNjQub3JnCitXOglodHRwOi8vd3d3LnBlbmd1aW5wcGMub3JnL3BwYzY0LwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKIFM6CVN1cHBvcnRlZAogCkBAIC0xODI2LDYgKzE4ODksMTEgQEAKIFc6CWh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2tlcm5lbC1wYXRjaGVzLmh0bWwKIFM6CU1haW50YWluZWQKIAorTVVMVElNRURJQSBDQVJEIFNVQlNZU1RFTQorUDoJUnVzc2VsbCBLaW5nCitNOglybWsrbW1jQGFybS5saW51eC5vcmcudWsKK1M6CU1haW50YWluZWQKKwogTVVMVElTT1VORCBTT1VORCBEUklWRVIKIFA6CUFuZHJldyBWZWxpYXRoCiBNOglhbmRyZXd0dkB1c2EubmV0CkBAIC0xODQ4LDYgKzE5MTYsMTIgQEAKIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK05FVEVNIE5FVFdPUksgRU1VTEFUT1IKK1A6CVN0ZXBoZW4gSGVtbWluZ2VyCitNOglzaGVtbWluZ2VyQG9zZGwub3JnCitMOgluZXRlbUBvc2RsLm9yZworUzoJTWFpbnRhaW5lZAorCiBORVRGSUxURVIvSVBUQUJMRVMvSVBDSEFJTlMKIFA6CVJ1c3R5IFJ1c3NlbGwKIFA6CU1hcmMgQm91Y2hlcgpAQCAtMTg2NSw2ICsxOTM5LDcgQEAKIFA6CVJhbGYgQmFlY2hsZQogTToJcmFsZkBsaW51eC1taXBzLm9yZwogTDoJbGludXgtaGFtc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGludXgtYXgyNS5vcmcvCiBTOglNYWludGFpbmVkCiAKIE5FVFdPUksgQkxPQ0sgREVWSUNFCkBAIC0yMDUyLDggKzIxMjcsMTIgQEAKIE06CW1hdHRoZXdAd2lsLmN4CiBQOglHcmFudCBHcnVuZGxlcgogTToJZ3J1bmRsZXJAcGFyaXNjLWxpbnV4Lm9yZworUDoJS3lsZSBNY01hcnRpbgorTToJa3lsZUBwYXJpc2MtbGludXgub3JnCiBMOglwYXJpc2MtbGludXhAcGFyaXNjLWxpbnV4Lm9yZwogVzoJaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnLworVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9reWxlL3BhcmlzYy0yLjYuZ2l0CitUOgljdnMgY3ZzLnBhcmlzYy1saW51eC5vcmc6L3Zhci9jdnMvbGludXgtMi42CiBTOglNYWludGFpbmVkCiAKIFBDSSBFUlJPUiBSRUNPVkVSWQpAQCAtMjI1Niw2ICsyMzM1LDcgQEAKIFA6CVJhbGYgQmFlY2hsZQogTToJcmFsZkBsaW51eC1taXBzLm9yZwogTDoJbGludXgtaGFtc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGludXgtYXgyNS5vcmcvCiBTOglNYWludGFpbmVkCiAKIFJJU0NPTTggRFJJVkVSCkBAIC0yNDg2LDYgKzI1NjYsMTIgQEAKIEw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwogUzoJTWFpbnRhaW5lZAogCitTUEkgU1VCU1lTVEVNCitQOglEYXZpZCBCcm93bmVsbAorTToJZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorTDoJc3BpLWRldmVsLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitTOglNYWludGFpbmVkCisKIFRQTSBERVZJQ0UgRFJJVkVSCiBQOglLeWxlbmUgSGFsbAogTToJa2poYWxsQHVzLmlibS5jb20KQEAgLTMwNTQsMTMgKzMxNDAsNiBAQAogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJT2RkIEZpeGVzCiAKLVdBTiBST1VURVIgJiBTQU5HT01BIFdBTlBJUEUgRFJJVkVSUyAmIEFQSSAoWC4yNSwgRlJBTUUgUkVMQVksIFBQUCwgQ0lTQ08gSERMQykKLVA6CU5lbmFkIENvcmJpYwotTToJbmNvcmJpY0BzYW5nb21hLmNvbQotTToJZG1Ac2FuZ29tYS5jb20KLVc6CWh0dHA6Ly93d3cuc2FuZ29tYS5jb20KLVM6CVN1cHBvcnRlZAotCiBXQVRDSERPRyBERVZJQ0UgRFJJVkVSUwogUDoJV2ltIFZhbiBTZWJyb2VjawogTToJd2ltQGlndWFuYS5iZQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBhZjYyMTBkLi5hM2E3YmFhIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw4ICsxLDggQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgotU1VCTEVWRUwgPSAxNgotRVhUUkFWRVJTSU9OID0KLU5BTUU9U2xpZGluZyBTbm93IExlb3BhcmQKK1NVQkxFVkVMID0gMTcKK0VYVFJBVkVSU0lPTiA9LXJjNgorTkFNRT1DcmF6ZWQgU25vdy1XZWFzZWwKIAogIyAqRE9DVU1FTlRBVElPTioKICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgpAQCAtMzQ0LDE2ICszNDQsMTQgQEAKIHNjcmlwdHMvYmFzaWMvJTogc2NyaXB0c19iYXNpYyA7CiAKIFBIT05ZICs9IG91dHB1dG1ha2VmaWxlCi0jIG91dHB1dG1ha2VmaWxlIGdlbmVyYXRlIGEgTWFrZWZpbGUgdG8gYmUgcGxhY2VkIGluIG91dHB1dCBkaXJlY3RvcnksIGlmCi0jIHVzaW5nIGEgc2VwZXJhdGUgb3V0cHV0IGRpcmVjdG9yeS4gVGhpcyBhbGxvd3MgY29udmluaWVudCB1c2UKLSMgb2YgbWFrZSBpbiBvdXRwdXQgZGlyZWN0b3J5CisjIG91dHB1dG1ha2VmaWxlIGdlbmVyYXRlcyBhIE1ha2VmaWxlIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5LCBpZiB1c2luZyBhCisjIHNlcGFyYXRlIG91dHB1dCBkaXJlY3RvcnkuIFRoaXMgYWxsb3dzIGNvbnZlbmllbnQgdXNlIG9mIG1ha2UgaW4gdGhlCisjIG91dHB1dCBkaXJlY3RvcnkuCiBvdXRwdXRtYWtlZmlsZToKLQkkKFEpaWYgdGVzdCAhICQoc3JjdHJlZSkgLWVmICQob2JqdHJlZSk7IHRoZW4gXAotCSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbWttYWtlZmlsZSAgICAgICAgICAgICAgXAotCSAgICAkKHNyY3RyZWUpICQob2JqdHJlZSkgJChWRVJTSU9OKSAkKFBBVENITEVWRUwpICAgICAgICAgXAotCSAgICA+ICQob2JqdHJlZSkvTWFrZWZpbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICBlY2hvICcgIEdFTiAgICAkKG9ianRyZWUpL01ha2VmaWxlJzsgICAgICAgICAgICAgICAgICAgXAotCWZpCitpZm5lcSAoJChLQlVJTERfU1JDKSwpCisJJChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbWttYWtlZmlsZSBcCisJICAgICQoc3JjdHJlZSkgJChvYmp0cmVlKSAkKFZFUlNJT04pICQoUEFUQ0hMRVZFTCkKK2VuZGlmCiAKICMgVG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBpbmNsdWRlIC5jb25maWcgZm9yIGFueSBvZiB0aGUgKmNvbmZpZyB0YXJnZXRzCiAjIGNhdGNoIHRoZW0gZWFybHksIGFuZCBoYW5kIHRoZW0gb3ZlciB0byBzY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTc5Niw4ICs3OTQsOCBAQAogcHJlcGFyZTE6IHByZXBhcmUyIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIGluY2x1ZGUvYXNtIFwKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlL2NvbmZpZy9NQVJLRVIKIGlmbmVxICgkKEtCVUlMRF9NT0RVTEVTKSwpCi0JJChRKXJtIC1yZiAkKE1PRFZFUkRJUikKIAkkKFEpbWtkaXIgLXAgJChNT0RWRVJESVIpCisJJChRKXJtIC1mICQoTU9EVkVSRElSKS8qCiBlbmRpZgogCiBhcmNocHJlcGFyZTogcHJlcGFyZTEgc2NyaXB0c19iYXNpYwpAQCAtMTA4Niw4ICsxMDg0LDggQEAKIEtCVUlMRF9NT0RVTEVTIDo9IDEKIFBIT05ZICs9IGNybW9kdmVyZGlyCiBjcm1vZHZlcmRpcjoKLQkkKFEpcm0gLXJmICQoTU9EVkVSRElSKQogCSQoUSlta2RpciAtcCAkKE1PRFZFUkRJUikKKwkkKFEpcm0gLWYgJChNT0RWRVJESVIpLyoKIAogUEhPTlkgKz0gJChvYmp0cmVlKS9Nb2R1bGUuc3ltdmVycwogJChvYmp0cmVlKS9Nb2R1bGUuc3ltdmVyczoKQEAgLTExMTIsNyArMTExMCw2IEBACiBpbnN0YWxsLWRpciA6PSAkKGlmICQoSU5TVEFMTF9NT0RfRElSKSwkKElOU1RBTExfTU9EX0RJUiksZXh0cmEpCiBQSE9OWSArPSBfZW1vZGluc3RfCiBfZW1vZGluc3RfOgotCSQoUSlybSAtcmYgJChNT0RMSUIpLyQoaW5zdGFsbC1kaXIpCiAJJChRKW1rZGlyIC1wICQoTU9ETElCKS8kKGluc3RhbGwtZGlyKQogCSQoUSkkKE1BS0UpIC1yUiAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kaW5zdAogCkBAIC0xMjc1LDQwICsxMjcyLDQzIEBACiAKICMgU2luZ2xlIHRhcmdldHMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoZSBkaXJlY3RvcnkgcGFydCBpcyB0YWtlbiBmcm9tIGZpcnN0IHByZXJlcXVpc2l0ZSwgc28gdGhpcwotIyB3b3JrcyBldmVuIHdpdGggZXh0ZXJuYWwgbW9kdWxlcwotJS5zOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5pOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5vOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChkaXIgJDwpICQoZGlyICQ8KSQobm90ZGlyICRAKQotJS5sc3Q6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLnM6ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCi0lLm86ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGRpciAkPCkgJChkaXIgJDwpJChub3RkaXIgJEApCisjIFNpbmdsZSB0YXJnZXRzIGFyZSBjb21wYXRpYmxlIHdpdGg6CisjIC0gYnVpbGQgd2hpdGggbWl4ZWQgc291cmNlIGFuZCBvdXRwdXQKKyMgLSBidWlsZCB3aXRoIHNlcGFyYXRlIG91dHB1dCBkaXIgJ21ha2UgTz0uLi4nCisjIC0gZXh0ZXJuYWwgbW9kdWxlcworIworIyAgdGFyZ2V0LWRpciA9PiB3aGVyZSB0byBzdG9yZSBvdXRwdXRmaWxlCisjICBidWlsZC1kaXIgID0+IGRpcmVjdG9yeSBpbiBrZXJuZWwgc291cmNlIHRyZWUgdG8gdXNlCiAKLSMgRm9yIGV4dGVybmFsIG1vZHVsZXMgd2Ugc2hhbGwgaW5jbHVkZSBhbnkgZGlyZWN0b3J5IG9mIHRoZSB0YXJnZXQsCi0jIGJ1dCB1c3VhbCBjYXNlIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBwYXJ0LgotIyBtYWtlIE09YHB3ZGAgbW9kdWxlLm8gICAgID0+ICQoZGlyICRAKT0uLwotIyBtYWtlIE09YHB3ZGAgZm9vL21vZHVsZS5vID0+ICQoZGlyICRAKT1mb28vCi0jIG1ha2UgTT1gcHdkYCAvICAgICAgICAgICAgPT4gJChkaXIgJEApPS8KLSAKIGlmZXEgKCQoS0JVSUxEX0VYVE1PRCksKQotICAgICAgICB0YXJnZXQtZGlyID0gJChARCkKKyAgICAgICAgYnVpbGQtZGlyICA9ICQocGF0c3Vic3QgJS8sJSwkKGRpciAkQCkpCisgICAgICAgIHRhcmdldC1kaXIgPSAkKGRpciAkQCkKIGVsc2UKICAgICAgICAgemFwLXNsYXNoPSQoZmlsdGVyLW91dCAuLCQocGF0c3Vic3QgJS8sJSwkKGRpciAkQCkpKQotICAgICAgICB0YXJnZXQtZGlyID0gJChLQlVJTERfRVhUTU9EKSQoaWYgJCh6YXAtc2xhc2gpLC8kKHphcC1zbGFzaCkpCisgICAgICAgIGJ1aWxkLWRpciAgPSAkKEtCVUlMRF9FWFRNT0QpJChpZiAkKHphcC1zbGFzaCksLyQoemFwLXNsYXNoKSkKKyAgICAgICAgdGFyZ2V0LWRpciA9ICQoaWYgJChLQlVJTERfRVhUTU9EKSwkKGRpciAkPCksJChkaXIgJEApKQogZW5kaWYKIAotLyAlLzogICAgICBzY3JpcHRzIHByZXBhcmUgRk9SQ0UKKyUuczogJS5jIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLmk6ICUuYyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorJS5vOiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUubHN0OiAlLmMgcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChidWlsZC1kaXIpICQodGFyZ2V0LWRpcikkKG5vdGRpciAkQCkKKyUuczogJS5TIHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKHRhcmdldC1kaXIpJChub3RkaXIgJEApCislLm86ICUuUyBwcmVwYXJlIHNjcmlwdHMgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJCh0YXJnZXQtZGlyKSQobm90ZGlyICRAKQorCisjIE1vZHVsZXMKKy8gJS86IHByZXBhcmUgc2NyaXB0cyBGT1JDRQogCSQoUSkkKE1BS0UpIEtCVUlMRF9NT0RVTEVTPSQoaWYgJChDT05GSUdfTU9EVUxFUyksMSkgXAotCSQoYnVpbGQpPSQodGFyZ2V0LWRpcikKLSUua286IHNjcmlwdHMgRk9SQ0UKKwkkKGJ1aWxkKT0kKGJ1aWxkLWRpcikKKyUua286IHByZXBhcmUgc2NyaXB0cyBGT1JDRQogCSQoUSkkKE1BS0UpIEtCVUlMRF9NT0RVTEVTPSQoaWYgJChDT05GSUdfTU9EVUxFUyksMSkgICBcCi0JJChidWlsZCk9JCh0YXJnZXQtZGlyKSAkKEA6LmtvPS5vKQorCSQoYnVpbGQpPSQoYnVpbGQtZGlyKSAkKEA6LmtvPS5vKQogCSQoUSkkKE1BS0UpIC1yUiAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAogCiAjIEZJWE1FIFNob3VsZCBnbyBpbnRvIGEgbWFrZS5saWIgb3Igc29tZXRoaW5nIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDA1ZTA1NTUuLjNlMjY0NzIgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTE2NSwxMCArMTY1LDMxIEBACiAJIm1ha2UgeGNvbmZpZyIgICAgIFggd2luZG93cyAoUXQpIGJhc2VkIGNvbmZpZ3VyYXRpb24gdG9vbC4KIAkibWFrZSBnY29uZmlnIiAgICAgWCB3aW5kb3dzIChHdGspIGJhc2VkIGNvbmZpZ3VyYXRpb24gdG9vbC4KIAkibWFrZSBvbGRjb25maWciICAgRGVmYXVsdCBhbGwgcXVlc3Rpb25zIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZgotCQkJICAgeW91ciBleGlzdGluZyAuLy5jb25maWcgZmlsZS4KKwkJCSAgIHlvdXIgZXhpc3RpbmcgLi8uY29uZmlnIGZpbGUgYW5kIGFza2luZyBhYm91dAorCQkJICAgbmV3IGNvbmZpZyBzeW1ib2xzLgogCSJtYWtlIHNpbGVudG9sZGNvbmZpZyIKIAkJCSAgIExpa2UgYWJvdmUsIGJ1dCBhdm9pZHMgY2x1dHRlcmluZyB0aGUgc2NyZWVuCiAJCQkgICB3aXRoIHF1ZXN0aW9ucyBhbHJlYWR5IGFuc3dlcmVkLgorCSJtYWtlIGRlZmNvbmZpZyIgICBDcmVhdGUgYSAuLy5jb25maWcgZmlsZSBieSB1c2luZyB0aGUgZGVmYXVsdAorCQkJICAgc3ltYm9sIHZhbHVlcyBmcm9tIGFyY2gvJEFSQ0gvZGVmY29uZmlnLgorCSJtYWtlIGFsbHllc2NvbmZpZyIKKwkJCSAgIENyZWF0ZSBhIC4vLmNvbmZpZyBmaWxlIGJ5IHNldHRpbmcgc3ltYm9sCisJCQkgICB2YWx1ZXMgdG8gJ3knIGFzIG11Y2ggYXMgcG9zc2libGUuCisJIm1ha2UgYWxsbW9kY29uZmlnIgorCQkJICAgQ3JlYXRlIGEgLi8uY29uZmlnIGZpbGUgYnkgc2V0dGluZyBzeW1ib2wKKwkJCSAgIHZhbHVlcyB0byAnbScgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkibWFrZSBhbGxub2NvbmZpZyIgQ3JlYXRlIGEgLi8uY29uZmlnIGZpbGUgYnkgc2V0dGluZyBzeW1ib2wKKwkJCSAgIHZhbHVlcyB0byAnbicgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkibWFrZSByYW5kY29uZmlnIiAgQ3JlYXRlIGEgLi8uY29uZmlnIGZpbGUgYnkgc2V0dGluZyBzeW1ib2wKKwkJCSAgIHZhbHVlcyB0byByYW5kb20gdmFsdWVzLgorCisgICBUaGUgYWxseWVzY29uZmlnL2FsbG1vZGNvbmZpZy9hbGxub2NvbmZpZy9yYW5kY29uZmlnIHZhcmlhbnRzIGNhbgorICAgYWxzbyB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEtDT05GSUdfQUxMQ09ORklHIHRvIHNwZWNpZnkgYQorICAgZmlsZW5hbWUgdGhhdCBjb250YWlucyBjb25maWcgb3B0aW9ucyB0aGF0IHRoZSB1c2VyIHJlcXVpcmVzIHRvIGJlCisgICBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZS4gIElmIEtDT05GSUdfQUxMQ09ORklHPWZpbGVuYW1lIGlzIG5vdCB1c2VkLAorICAgIm1ha2UgKmNvbmZpZyIgY2hlY2tzIGZvciBhIGZpbGUgbmFtZWQgImFsbHt5ZXMvbW9kL25vL3JhbmRvbX0uY29uZmlnIgorICAgZm9yIHN5bWJvbCB2YWx1ZXMgdGhhdCBhcmUgdG8gYmUgZm9yY2VkLiAgSWYgdGhpcyBmaWxlIGlzIG5vdCBmb3VuZCwKKyAgIGl0IGNoZWNrcyBmb3IgYSBmaWxlIG5hbWVkICJhbGwuY29uZmlnIiB0byBjb250YWluIGZvcmNlZCB2YWx1ZXMuCiAgICAKIAlOT1RFUyBvbiAibWFrZSBjb25maWciOgogCS0gaGF2aW5nIHVubmVjZXNzYXJ5IGRyaXZlcnMgd2lsbCBtYWtlIHRoZSBrZXJuZWwgYmlnZ2VyLCBhbmQgY2FuCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggOWJlZjYxYi4uMjEzYzc4NSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCi0JZGVmYXVsdCB5IGlmICFBTFBIQV9FVjYgJiYgIUFMUEhBX0VWNjcKKwlkZWZhdWx0IHkgaWYgIUFMUEhBX0VWNjcKIAogY29uZmlnIEFMUEhBX0FWQU5USQogCWJvb2wKQEAgLTU0OSw2ICs1NDksMTEgQEAKIAkgIEFjY2VzcykuICBUaGlzIG9wdGlvbiBpcyBmb3IgY29uZmlndXJpbmcgaGlnaC1lbmQgbXVsdGlwcm9jZXNzb3IKIAkgIHNlcnZlciBtYWNoaW5lcy4gIElmIGluIGRvdWJ0LCBzYXkgTi4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNyIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogIyBMQVJHRV9WTUFMTE9DIGlzIHJhY3ksIGlmIHlvdSAqcmVhbGx5KiBuZWVkIGl0IHRoZW4gZml4IGl0IGZpcnN0CiBjb25maWcgQUxQSEFfTEFSR0VfVk1BTExPQwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCmluZGV4IDlkNjE4NmQuLjJiMjQ1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYwpAQCAtNzYsNyArNzYsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RybmNhdCk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0wobWVtY21wKTsKQEAgLTE4Myw3ICsxODIsNiBAQAogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7CiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdSk7CiBFWFBPUlRfU1lNQk9MKF9hdG9taWNfZGVjX2FuZF9sb2NrKTsKLUVYUE9SVF9TWU1CT0woY3B1X3ByZXNlbnRfbWFzayk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDk5MjRmZDAuLmM3NjBhODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAlpZiAoY3B1aWQgIT0gYm9vdF9jcHVpZCkgewogCQlmbGFncyB8PSAweDAwMDQwMDAwVUw7IC8qICJyZW1haW4gaGFsdGVkIiAqLwogCQkqcGZsYWdzID0gZmxhZ3M7Ci0JCWNsZWFyX2JpdChjcHVpZCwgJmNwdV9wcmVzZW50X21hc2spOworCQljcHVfY2xlYXIoY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7CiAJCWhhbHQoKTsKIAl9CiAjZW5kaWYKQEAgLTEyMCw4ICsxMjAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFdhaXQgZm9yIHRoZSBzZWNvbmRhcmllcyB0byBoYWx0LiAqLwotCWNwdV9jbGVhcihib290X2NwdWlkLCBjcHVfcG9zc2libGVfbWFwKTsKLQl3aGlsZSAoY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCkpCisJY3B1X2NsZWFyKGJvb3RfY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7CisJd2hpbGUgKGNwdXNfd2VpZ2h0KGNwdV9wcmVzZW50X21hcCkpCiAJCWJhcnJpZXIoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwppbmRleCBkZDg3Njk2Li41NThiODMzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKQEAgLTI0LDEwICsyNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfQUxQSEFfTENBIGV0YyAqLwogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtNDcwLDYgKzQ3MiwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdAorcmVnaXN0ZXJfY3B1cyh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdSAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZWdpc3Rlcl9jcHUocCwgaSwgTlVMTCk7CisJfQorCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHJlZ2lzdGVyX2NwdXMpOworCiB2b2lkIF9faW5pdAogc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewpAQCAtMTQ3OCwzICsxNDk2LDIwIEBACiAjZW5kaWYKICAgICAgICAgcmV0dXJuIE5PVElGWV9ET05FOwogfQorCitzdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jCmluZGV4IDAyYzJkYjAuLjRkYzI3M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jCkBAIC02OCw3ICs2OCw2IEBACiBzdGF0aWMgaW50IHNtcF9zZWNvbmRhcnlfYWxpdmUgX19pbml0ZGF0YSA9IDA7CiAKIC8qIFdoaWNoIGNwdXMgaWRzIGNhbWUgb25saW5lLiAgKi8KLWNwdW1hc2tfdCBjcHVfcHJlc2VudF9tYXNrOwogY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwogCiBFWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKQEAgLTQzOSw3ICs0MzgsNyBAQAogCQkJaWYgKChjcHUtPmZsYWdzICYgMHgxY2MpID09IDB4MWNjKSB7CiAJCQkJc21wX251bV9wcm9iZWQrKzsKIAkJCQkvKiBBc3N1bWUgaGVyZSB0aGF0ICJ3aGFtaSIgPT0gaW5kZXggKi8KLQkJCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworCQkJCWNwdV9zZXQoaSwgY3B1X3ByZXNlbnRfbWFwKTsKIAkJCQljcHUtPnBhbF9yZXZpc2lvbiA9IGJvb3RfY3B1X3BhbHJldjsKIAkJCX0KIApAQCAtNDUwLDEyICs0NDksMTAgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXNtcF9udW1fcHJvYmVkID0gMTsKLQkJY3B1X3NldChib290X2NwdWlkLCBjcHVfcG9zc2libGVfbWFwKTsKIAl9Ci0JY3B1X3ByZXNlbnRfbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGJvb3RfY3B1aWQpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU01QOiAlZCBDUFVzIHByb2JlZCAtLSBjcHVfcHJlc2VudF9tYXNrID0gJWx4XG4iLAotCSAgICAgICBzbXBfbnVtX3Byb2JlZCwgY3B1X3Bvc3NpYmxlX21hcC5iaXRzWzBdKTsKKwlwcmludGsoS0VSTl9JTkZPICJTTVA6ICVkIENQVXMgcHJvYmVkIC0tIGNwdV9wcmVzZW50X21hcCA9ICVseFxuIiwKKwkgICAgICAgc21wX251bV9wcm9iZWQsIGNwdV9wcmVzZW50X21hcC5iaXRzWzBdKTsKIH0KIAogLyoKQEAgLTQ3NCw3ICs0NzEsNyBAQAogCiAJLyogTm90aGluZyB0byBkbyBvbiBhIFVQIGJveCwgb3Igd2hlbiB0b2xkIG5vdCB0by4gICovCiAJaWYgKHNtcF9udW1fcHJvYmVkID09IDEgfHwgbWF4X2NwdXMgPT0gMCkgewotCQljcHVfcHJlc2VudF9tYXNrID0gY3B1bWFza19vZl9jcHUoYm9vdF9jcHVpZCk7CisJCWNwdV9wcmVzZW50X21hcCA9IGNwdW1hc2tfb2ZfY3B1KGJvb3RfY3B1aWQpOwogCQlwcmludGsoS0VSTl9JTkZPICJTTVAgbW9kZSBkZWFjdGl2YXRlZC5cbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNDg3LDExICs0ODQsNiBAQAogdm9pZCBfX2RldmluaXQKIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7Ci0JLyoKLQkgKiBNYXJrIHRoZSBib290IGNwdSAoY3VycmVudCBjcHUpIGFzIGJvdGggcHJlc2VudCBhbmQgb25saW5lCi0JICovIAotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfcHJlc2VudF9tYXNrKTsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwogfQogCiBpbnQgX19kZXZpbml0CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jCmluZGV4IDVmODQ0MTcuLjI1NTFmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jCkBAIC02Niw3ICs2Niw3IEBACiAJcmVnaXN0ZXIgaW50IGJjcHUgPSBib290X2NwdWlkOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWNwdW1hc2tfdCBjcG0gPSBjcHVfcHJlc2VudF9tYXNrOworCWNwdW1hc2tfdCBjcG0gPSBjcHVfcHJlc2VudF9tYXA7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZGltMCwgKmRpbTEsICpkaW0yLCAqZGltMzsKIAl1bnNpZ25lZCBsb25nIG1hc2swLCBtYXNrMSwgbWFzazIsIG1hc2szLCBkdW1teTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvc3RybmNweS5TIGIvYXJjaC9hbHBoYS9saWIvc3RybmNweS5TCmluZGV4IDMzODU1MWMuLmJiZGVmMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbGliL3N0cm5jcHkuUworKysgYi9hcmNoL2FscGhhL2xpYi9zdHJuY3B5LlMKQEAgLTQzLDggKzQzLDggQEAKIAogCS5hbGlnbgk0CiAkbXVsdGl3b3JkOgotCXN1YnEJJDI0LCAxLCAkMgkjIGNsZWFyIHRoZSBmaW5hbCBiaXRzIGluIHRoZSBwcmV2IHdvcmQKLQlvcgkkMiwgJDI0LCAkMgorCXN1YnEJJDI3LCAxLCAkMgkjIGNsZWFyIHRoZSBmaW5hbCBiaXRzIGluIHRoZSBwcmV2IHdvcmQKKwlvcgkkMiwgJDI3LCAkMgogCXphcG5vdAkkMSwgJDIsICQxCiAJc3VicQkkMTgsIDEsICQxOAogCkBAIC03MCw4ICs3MCw4IEBACiAJYm5lCSQxOCwgMGIKIAogMToJbGRxX3UJJDEsIDAoJDE2KQkjIGNsZWFyIHRoZSBsZWFkaW5nIGJpdHMgaW4gdGhlIGZpbmFsIHdvcmQKLQlzdWJxCSQyNywgMSwgJDIKLQlvcgkkMiwgJDI3LCAkMgorCXN1YnEJJDI0LCAxLCAkMgorCW9yCSQyLCAkMjQsICQyCiAKIAl6YXAJJDEsICQyLCAkMQogCXN0cV91CSQxLCAwKCQxNikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGRjNWE5MzMuLjA4YjdjYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTUwLDggKzE1MCw2IEBACiAKIGNvbmZpZyBBUkNIX0lYUDRYWAogCWJvb2wgIklYUDR4eC1iYXNlZCIKLQlzZWxlY3QgRE1BQk9VTkNFCi0Jc2VsZWN0IFBDSQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSVhQNFhYIChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgogCkBAIC01MTIsNiArNTEwLDEyIEBACiAJICBvciBoYXZlIGh1Z2UgaG9sZXMgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgZm9yIG90aGVyIHJlYXNvbnMuCiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9udW1hPiBmb3IgbW9yZS4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNCIgaWYgQVJDSF9MSDdBNDBYCisJZGVmYXVsdCAiMiIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgTEVEUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKaW5kZXggNWQzYWNmZi4uZDIyZjM4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCkBAIC0xMDEsNyArMTAxLDcgQEAKIAloZWxwCiAJICBDaG9pY2UgZm9yIFVBUlQgZm9yIGtlcm5lbCBsb3ctbGV2ZWwgdXNpbmcgUzNDMjQxMCBVQVJUUywKIAkgIHNob3VsZCBiZSBiZXR3ZWVuIHplcm8gYW5kIHR3by4gVGhlIHBvcnQgbXVzdCBoYXZlIGJlZW4KLQkgIGluaXRhbGlzZWQgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCisJICBpbml0aWFsaXNlZCBieSB0aGUgYm9vdC1sb2FkZXIgYmVmb3JlIHVzZS4KIAogCSAgVGhlIHVuY29tcHJlc3NvciBjb2RlIHBvcnQgY29uZmlndXJhdGlvbiBpcyBub3cgaGFuZGxlZAogCSAgYnkgQ09ORklHX1MzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JULgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA5NWE5NjI3Li42ZjhlODRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtNjYsNyArNjYsNyBAQAogdHVuZS0kKENPTkZJR19DUFVfVjYpCQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWFybTExMzZqLXMsLW10dW5lPXN0cm9uZ2FybSkKIAogaWZlcSAoJChDT05GSUdfQUVBQkkpLHkpCi1DRkxBR1NfQUJJCTo9LW1hYmk9YWFwY3MgLW1uby10aHVtYi1pbnRlcndvcmsKK0NGTEFHU19BQkkJOj0tbWFiaT1hYXBjcy1saW51eCAtbW5vLXRodW1iLWludGVyd29yawogZWxzZQogQ0ZMQUdTX0FCSQk6PSQoY2FsbCBjYy1vcHRpb24sLW1hcGNzLTMyLC1tYWJpPWFwY3MtZ251KSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAwYWYzNzcyLi5hY2UzZmI1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0zOCwxMCArMzgsMTAgQEAKIAkJaWYgKC0taSA8IDApCiAJCQlyZXR1cm47CiAKLQkJYXNtKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMwLCAwIiA6ICI9ciIgKHN0YXR1cykpOworCQlhc20gdm9sYXRpbGUgKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMwLCAwIiA6ICI9ciIgKHN0YXR1cykpOwogCX0gd2hpbGUgKHN0YXR1cyAmIDIpOwogCi0JYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiIChjaCkpOworCWFzbSgibWNyIHAxNCwgMCwgJTAsIGMxLCBjMCwgMCIgOiA6ICJyIiAoY2gpKTsKIH0KIAogI2RlZmluZSBwdXRjKGNoKQlpY2VkY2NfcHV0YyhjaCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCBlZWQ2MTYxLi4xNTNhMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgX3N0YXJ0ID0gLjsKICAgICAqKC5zdGFydCkKICAgICAqKC50ZXh0KQorICAgICooLnRleHQuKikKICAgICAqKC5maXh1cCkKICAgICAqKC5nbnUud2FybmluZykKICAgICAqKC5yb2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IDVlODMwZjQuLjMxNGViZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xOCw2ICsxOCwxOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgogCisvKiBQQ01DSUEgdG8gU2Nvb3AgbGlua2FnZQorCisgICBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBsaW5rIG11bHRpcGxlIHNjb29wIGRldmljZXMgaW50byBvbmUKKyAgIHNpbmdsZSBlbnRpdHkgZm9yIHRoZSBweGEyeHhfcGNtY2lhIGRldmljZSBzbyB0aGlzIHN0cnVjdHVyZQorICAgaXMgdXNlZCB3aGljaCBpcyBzZXR1cCBieSB0aGUgcGxhdGZvcm0gY29kZS4KKworICAgVGhpcyBmaWxlIGlzIG5ldmVyIG1vZHVsYXIgc28gdGhpcyBzeW1ib2wgaXMgYWx3YXlzCisgICBhY2Nlc3NpbGUgdG8gdGhlIGJvYXJkIHN1cHBvcnQgZmlsZXMuCisqLworc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fc2Nvb3BfY29uZmlnKTsKKwogI2RlZmluZSBTQ09PUF9SRUcoZCxhZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikoZCArKGFkcikpKQogCiBzdHJ1Y3QgIHNjb29wX2RldiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKaW5kZXggMWZlNzNkMS4uOWUxYzFjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZwpAQCAtMzc5LDcgKzM3OSw3IEBACiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSD15Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQ9eQorIyBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQgaXMgbm90IHNldAogCiAjCiAjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwppbmRleCBiN2Q5MzRjLi42ZTA4MDVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCkBAIC0zNzAsNyArMzcwLDcgQEAKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIPXkKLUNPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRD15CisjIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCmluZGV4IGM5YWE4NzguLjA3NGM0N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKQEAgLTEsMjEgKzEsMjEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzMKLSMgU3VuIE9jdCAgOSAxNjo1NToxNCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIEZyaSBBcHIgMTQgMTk6MDk6NTIgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCkBAIC0yMyw0NSArMjMsNTggQEAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfRE9VQkxFRkFVTFQ9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfQkFTRV9TTUFMTD0xCitDT05GSUdfU0xPQj15CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CiAjCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC03MCwxMSArODMsMTMgQEAKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldApAQCAtODQsOSArOTksMTEgQEAKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKIAogIwogIyBTQTExeDAgSW1wbGVtZW50YXRpb25zCkBAIC0xMjgsMjAgKzE0NSwzMiBAQAogIyBCdXMgc3VwcG9ydAogIwogQ09ORklHX0lTQT15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUFfREVCVUc9eQorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDSUMgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9TQTExMDA9eQogCiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19OT0RFU19TSElGVD0yCiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CkBAIC0xNTAsNiArMTc5LDcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKQEAgLTE1OCw3ICsxODgsNyBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCBjb25zb2xlPXR0eTEgbm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyICAgZGVidWciCitDT05GSUdfQ01ETElORT0ibm9pbml0cmQgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIGZiY29uPXJvdGF0ZToxIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAKICMKQEAgLTE4MSwxNCArMjExLDE2IEBACiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9BT1VUPW0KLUNPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogQ09ORklHX1BNPXkKK0NPTkZJR19QTV9MRUdBQ1k9eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0FQTT15CiAKICMKQEAgLTE5OSw2ICsyMzEsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTIxMSwxNiArMjQ0LDE5IEBACiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yMzIsNiArMjY4LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNDQsOCArMjg1LDExIEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTI2NSwxMCArMzA5LDE1IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKICMKIENPTkZJR19NVEQ9eQpAQCAtMjg3LDMyICszMzYsNDkgQEAKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCiAjCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JND15CiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAogQ09ORklHX01URF9PQlNPTEVURV9DSElQUz15CiBDT05GSUdfTVREX1NIQVJQPXkKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NBMTEwMD15CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC0zMjEsNyArMzg3LDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC0zMzcsNiArNDAyLDExIEBACiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAogIwogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CkBAIC0zNDksNyArNDE5LDYgQEAKICMKICMgQmxvY2sgZGV2aWNlcwogIwotIyBDT05GSUdfQkxLX0RFVl9YRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldApAQCAtMzU5LDIwICs0MjgsMzUgQEAKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CitDT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydApAQCAtNDAyLDYgKzQ4NiwzOSBAQAogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCitDT05GSUdfUFBQPXkKKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPXkKKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKQEAgLTQyNCw3ICs1NDEsNyBAQAogQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTI0MAogQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9ZPTMyMAogQ09ORklHX0lOUFVUX0VWREVWPXkKLUNPTkZJR19JTlBVVF9FVkJVRz15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKQEAgLTQzOCw3ICs1NTUsMTEgQEAKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNDYxLDcgKzU4MiwxNiBAQAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX0NTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKQEAgLTQ4Myw5NCArNjEzLDQ4IEBACiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCiAjCisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydAogIwotQ09ORklHX0kyQz1tCi0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCi0jIEkyQyBBbGdvcml0aG1zCisjIFNQSSBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX0FMR09CSVQ9bQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19JMkNfRUxFS1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwotQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtNTc5LDQyICs2NjMsMzMgQEAKICMKICMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCiAjCi0jIENPTkZJR19NQ1BfU0ExMVgwIGlzIG5vdCBzZXQKK0NPTkZJR19NQ1A9eQorQ09ORklHX01DUF9TQTExWDA9eQorQ09ORklHX01DUF9VQ0IxMjAwPXkKK0NPTkZJR19NQ1BfVUNCMTIwMF9UUz15CisKKyMKKyMgTEVEIGRldmljZXMKKyMKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0xPQ09NTz15CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwotQ09ORklHX1ZJREVPX0RFVj1tCi0KLSMKLSMgVmlkZW8gRm9yIExpbnV4Ci0jCi0KLSMKLSMgVmlkZW8gQWRhcHRlcnMKLSMKLSMgQ09ORklHX1ZJREVPX1BNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAotIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAotCi0jCi0jIFJhZGlvIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19SQURJT19DQURFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19SVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fUlRSQUNLMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19BWlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fR0VNVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX01BRVNUUk8gaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fU0YxNkZNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19TRjE2Rk1SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19URVJSQVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19UUlVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19UWVBIT09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1pPTFRSSVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC02MjgsOCArNzAzLDggQEAKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci1DT05GSUdfRkJfU09GVF9DVVJTT1I9eQogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU0ExMTAwPXkKQEAgLTY0MywxNCArNzE4LDE1IEBACiAjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiBDT05GSUdfRk9OVFM9eQotQ09ORklHX0ZPTlRfOHg4PXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfTUlOSV80eDY9eQogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CkBAIC02NTksNyArNzM1LDExIEBACiAjIExvZ28gY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0RFVklDRT15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CitDT05GSUdfTENEX0RFVklDRT15CiAKICMKICMgU291bmQKQEAgLTY3MSwyMCArNzUxLDE3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKLUNPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCiAjIE1NQy9TRCBDYXJkIHN1cHBvcnQKQEAgLTY5MiwyMyArNzY5LDI0IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUMl9GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtNzI1LDcgKzgwMyw3IEBACiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19GQVRfRlM9eQotQ09ORklHX01TRE9TX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKQEAgLTczOSw3ICs4MTcsNyBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzU1LDExICs4MzMsMTIgQEAKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CkBAIC03ODksNyArODY4LDcgQEAKICMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKQEAgLTgxMyw3ICs4OTIsNyBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTgyNiw3ICs5MDUsNyBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKICMgUHJvZmlsaW5nIHN1cHBvcnQKQEAgLTgzNywyMCArOTE2LDIzIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQpAQCAtODc0LDcgKzk1Niw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCmluZGV4IDhkY2M4ZTguLmI2OWU4OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKQEAgLTEsMTIgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNgotIyBNb24gTWFyIDIwIDE0OjU0OjUxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgV2VkIEFwciAxOSAyMToyMTowMSAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC0yOCw2ICszMCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNDMsMTAgKzQ2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNTksNyArNTgsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTY3LDYgKzY1LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTk0LDYgKzkzLDcgQEAKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CkBAIC0xMTIsNyArMTEyLDYgQEAKICMKICMgQ2lycnVzIEVQOTN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCiAjCi1DT05GSUdfQ1JVTkNIPXkKIAogIwogIyBFUDkzeHggUGxhdGZvcm1zCkBAIC0yMzIsMTIgKzIzMSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0zNDYsNyArMzQ4LDYgQEAKICMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiBDT05GSUdfTVREX0NGSV9TVEFBPXkKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC0zNzEsNyArMzcyLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00MTIsNyArNDEyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKQEAgLTU3NiwxMyArNTc2LDEzIEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19FUDkzWFhfV0FUQ0hET0c9eQogCiAjCiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKQEAgLTYyNiw5ICs2MjYsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfREVCVUdfQ09SRT15CiBDT05GSUdfSTJDX0RFQlVHX0FMR089eQogQ09ORklHX0kyQ19ERUJVR19CVVM9eQpAQCAtNjkwLDcgKzY4OCwxNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCiAjCiAKICMKQEAgLTcwMiw2ICs3MDksNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzE4LDYgKzcyNiw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogCkBAIC03NzYsMTUgKzc4NSw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC04MTMsNiArODEzLDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldApAQCAtODI1LDYgKzgyNiw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CkBAIC04NjUsNiArODY3LDMyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQ4VDg2PXkKK0NPTkZJR19SVENfRFJWX0VQOTNYWD15CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTEyLDcgKzk0MCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0NCw2ICsxMDcxLDcgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TTEFCPXkKKyMgQ09ORklHX0RFQlVHX1NMQUJfTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldApAQCAtMTA1Myw2ICsxMDgxLDcgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZwppbmRleCA3YjAyY2EwLi5lNmYzZTQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKQEAgLTEsMTggKzEsMTkgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgV2VkIEZlYiAgOCAwNDo0OToxMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIFdlZCBBcHIgMTkgMjE6MTI6NDkgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNDQsMTAgKzQ2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNjAsNyArNTgsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjgsNiArNjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODksMTEgKzg3LDEzIEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSVhQMjAwMD15CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CkBAIC0xMjMsNiArMTIzLDcgQEAKIENPTkZJR19BUkNIX0lYRFAyWDAwPXkKIENPTkZJR19BUkNIX0lYRFAyNDAxPXkKIENPTkZJR19BUkNIX0lYRFAyODAxPXkKK0NPTkZJR19NQUNIX0lYRFAyOFg1PXkKIENPTkZJR19BUkNIX0lYRFAyWDAxPXkKICMgQ09ORklHX0lYUDIwMDBfU1VQUE9SVF9CUk9LRU5fUENJX0lPIGlzIG5vdCBzZXQKIApAQCAtMTQ3LDcgKzE0OCw2IEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYwLDYgKzE2MCw3IEBACiAjCiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAorQ09ORklHX0haPTEwMAogIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIxMyw2ICsyMTQsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTIzMiwxMiArMjM0LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM0Nyw3ICszNTIsNiBAQAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC0zNjYsNyArMzcwLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC02MTQsOCArNjE3LDkgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0zCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYyMyw2ICs2MjcsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTY1MCw3ICs2NTUsNiBAQAogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldApAQCAtNjk2LDcgKzcwMCw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTcxNSw5ICs3MTgsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNzMwLDYgKzczMSwxMSBAQAogIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwogQ09ORklHX0hXTU9OPXkKQEAgLTc0Miw2ICs3NDgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKQEAgLTc3Niw3ICs3ODMsMTYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycwogIwogCiAjCkBAIC04MDQsNiArODIwLDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtODIxLDYgKzgzOCwxMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04NzAsNyArODkzLDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05NzIsNiArOTk0LDcgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwppbmRleCAxYTI3NTFlLi45Y2U4OThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKQEAgLTEsMTIgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNgotIyBUdWUgTWFyIDIxIDAzOjI3OjIwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgV2VkIEFwciAxOSAyMToxMzo1MCAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC0yOCw2ICszMCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfVUlEMTY9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTQzLDEwICs0Niw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTU5LDcgKzU4LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTY3LDYgKzY1LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE0Myw3ICsxNDIsNiBAQAogIyBCdXMgc3VwcG9ydAogIwogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMCwxMiArMjI4LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM2NSw3ICszNjYsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNyw3ICs1MjcsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNzM1LDYgKzczNCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzc2LDcgKzc3Niw2IEBACiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQEAgLTgyMSw3ICs4MjAsNiBAQAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CkBAIC04NDAsOSArODM4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTkwNyw3ICs5MDMsMTYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycwogIwogCiAjCkBAIC05MTksNiArOTI0LDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkzNSw2ICs5NDEsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEwMDAsOSArMTAwNyw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTEwMTcsMTUgKzEwMjIsNiBAQAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtMTA3Niw2ICsxMDcyLDEyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExMjcsNyArMTEyOSw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI2OCw2ICsxMjY5LDcgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKaW5kZXggMjY4N2EyMi4uOTZiN2E3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwpAQCAtMSw1MCArMSw1NSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgTW9uIE1hciAyOCAwMDoyMDo1MCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMzCisjIE1vbiBNYXkgIDggMjA6MTU6NTcgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC01MiwyMyArNTcsNDIgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKIAogIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCiAjIFN5c3RlbSBUeXBlCiAjCiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldApAQCAtNzgsMTQgKzEwMiwxNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9WRVJTQVRJTEU9eQorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKIAogIwogIyBWZXJzYXRpbGUgcGxhdGZvcm0gdHlwZQogIwogQ09ORklHX0FSQ0hfVkVSU0FUSUxFX1BCPXkKLSMgQ09ORklHX01BQ0hfVkVSU0FUSUxFX0FCIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1ZFUlNBVElMRV9BQj15CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTEwNiwxMiArMTMzLDE0IEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVklDPXkKIENPTkZJR19JQ1NUMzA3PXkKIAogIwogIyBCdXMgc3VwcG9ydAogIwogQ09ORklHX0FSTV9BTUJBPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTIyLDYgKzE1MSwxOCBAQAogIyBLZXJuZWwgRmVhdHVyZXMKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgogQ09ORklHX0xFRFM9eQogQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKQEAgLTE0NSw3ICsxODYsNyBAQAogQ09ORklHX0ZQRV9OV0ZQRT15CiAjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAogIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKK0NPTkZJR19WRlA9eQogCiAjCiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwpAQCAtMTU5LDkgKzIwMCw5MiBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15CitDT05GSUdfUE1fTEVHQUNZPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCkBAIC0xNzQsNiArMjk4LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogQ09ORklHX01URD15CkBAIC0xOTIsNiArMzIxLDcgQEAKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC0yMTQsNiArMzQ0LDcgQEAKIENPTkZJR19NVERfQ0ZJX0kyPXkKICMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKICMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CkBAIC0yMjEsNyArMzUyLDcgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC0yMjksNyArMzYwLDcgQEAKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1I9eQotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwpAQCAtMjM3LDcgKzM2OCw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtMjUzLDYgKzM4MywxMSBAQAogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAogCiAjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIwogIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKICMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldApAQCAtMjY0LDcgKzM5OSw2IEBACiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CkBAIC0yNzIsMjEgKzQwNiwxMyBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKIAogIwpAQCAtMjk3LDYgKzQyMyw3IEBACiAjCiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydApAQCAtMzA3LDcxICs0MzQsOCBAQAogIwogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC0zNzksMTEgKzQ0MywxNyBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC00MTAsNiArNDgwLDggQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtNDU5LDcgKzUzMSw2IEBACiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCkBAIC00NzQsMTcgKzU0NSwxNiBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPW0KIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9NVUxUSVBPUlQ9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15CiAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ09SRT15CkBAIC01MDMsMjAgKzU3MywxOSBAQAogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNTM0LDYwICs2MDMsNjAgQEAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfU0VOU09SPW0KLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19FRVBST009bQogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTYwNCwyNyArNjczLDMxIEBACiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVJNQ0xDRD15CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKICMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKIENPTkZJR19GT05UX0FDT1JOXzh4OD15CiAjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogCiAjCiAjIExvZ28gY29uZmlndXJhdGlvbgpAQCAtNjQ3LDEyICs3MjAsMTggQEAKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgR2VuZXJpYyBkZXZpY2VzCiAjCitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorQ09ORklHX1NORF9BQzk3X0JVUz1tCiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKQEAgLTY2MSw2ICs3NDAsNyBAQAogIwogIyBBTFNBIEFSTSBkZXZpY2VzCiAjCitDT05GSUdfU05EX0FSTUFBQ0k9bQogCiAjCiAjIE9wZW4gU291bmQgU3lzdGVtCkBAIC02NzIsOSArNzUyLDE0IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtNjg4LDI1ICs3NzMsMzEgQEAKIENPTkZJR19NTUNfQVJNTU1DST1tCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15CiBDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03MjksMTEgKzgyMCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NDgsOCArODM4LDggQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpAQCAtNzY2LDE2ICs4NTYsMTkgQEAKICMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CkBAIC03ODQsNiArODc3LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC04MDMsNiArODk3LDcgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtODU4LDE4ICs5NTMsMjQgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKICMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19FUlJPUlM9eQpAQCAtODk1LDYgKzk5Niw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDJjZTBlM2EuLmE2MDFiOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKICAgb2JqLXkJCSs9IGlvLm8KIGVuZGlmCiAKLWhlYWQteQkJCTo9IGhlYWQubworaGVhZC15CQkJOj0gaGVhZCQoTU1VRVhUKS5vCiBvYmotJChDT05GSUdfREVCVUdfTEwpCSs9IGRlYnVnLm8KIAogZXh0cmEteSA6PSAkKGhlYWQteSkgaW5pdF90YXNrLm8gdm1saW51eC5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKaW5kZXggMTU3NDk0MS4uYzQ5YjVkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTEwMCwyMyArMTAwLDExIEBACiAjZW5kaWYKIAogCS8qIHN0cmluZyAvIG1lbSBmdW5jdGlvbnMgKi8KLUVYUE9SVF9TWU1CT0woc3RyY3B5KTsKLUVYUE9SVF9TWU1CT0woc3RybmNweSk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwotRVhQT1JUX1NZTUJPTChzdHJjbXApOwotRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7Ci1FWFBPUlRfU1lNQk9MKG1lbXNjYW4pOwogRVhQT1JUX1NZTUJPTChtZW1jaHIpOwogRVhQT1JUX1NZTUJPTChfX21lbXplcm8pOwogCkBAIC0xOTAsOCArMTc4LDYgQEAKIAogCS8qIHN5c2NhbGxzICovCiBFWFBPUlRfU1lNQk9MKHN5c193cml0ZSk7Ci1FWFBPUlRfU1lNQk9MKHN5c19yZWFkKTsKIEVYUE9SVF9TWU1CT0woc3lzX2xzZWVrKTsKLUVYUE9SVF9TWU1CT0woc3lzX29wZW4pOwogRVhQT1JUX1NZTUJPTChzeXNfZXhpdCk7CiBFWFBPUlRfU1lNQk9MKHN5c193YWl0NCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGIzMjRkY2EuLjM5NmVmYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC05NSw1ICs5NSwxMyBAQAogICBERUZJTkUoU1lTX0VSUk9SMCwJCTB4OWYwMDAwKTsKICAgQkxBTksoKTsKICAgREVGSU5FKFNJWkVPRl9NQUNISU5FX0RFU0MsCXNpemVvZihzdHJ1Y3QgbWFjaGluZV9kZXNjKSk7CisgIERFRklORShNQUNISU5GT19UWVBFLAkJb2Zmc2V0b2Yoc3RydWN0IG1hY2hpbmVfZGVzYywgbnIpKTsKKyAgREVGSU5FKE1BQ0hJTkZPX05BTUUsCQlvZmZzZXRvZihzdHJ1Y3QgbWFjaGluZV9kZXNjLCBuYW1lKSk7CisgIERFRklORShNQUNISU5GT19QSFlTSU8sCW9mZnNldG9mKHN0cnVjdCBtYWNoaW5lX2Rlc2MsIHBoeXNfaW8pKTsKKyAgREVGSU5FKE1BQ0hJTkZPX1BHT0ZGSU8sCW9mZnNldG9mKHN0cnVjdCBtYWNoaW5lX2Rlc2MsIGlvX3BnX29mZnN0KSk7CisgIEJMQU5LKCk7CisgIERFRklORShQUk9DX0lORk9fU1osCQlzaXplb2Yoc3RydWN0IHByb2NfaW5mb19saXN0KSk7CisgIERFRklORShQUk9DSU5GT19JTklURlVOQywJb2Zmc2V0b2Yoc3RydWN0IHByb2NfaW5mb19saXN0LCBfX2NwdV9mbHVzaCkpOworICBERUZJTkUoUFJPQ0lORk9fTU1VRkxBR1MsCW9mZnNldG9mKHN0cnVjdCBwcm9jX2luZm9fbGlzdCwgX19jcHVfbW11X2ZsYWdzKSk7CiAgIHJldHVybiAwOyAKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMgYi9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCmluZGV4IDAzNTMyNzYuLjBhM2U5YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYwpAQCAtMTQzLDEyICsxNDMsMjMgQEAKIAkucmVzaWR1ZQk9IGlzYV9nZXRfZG1hX3Jlc2lkdWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRtYV9yZXNvdXJjZXNbXSA9IHsKLQl7ICJkbWExIiwJCTB4MDAwMCwgMHgwMDBmIH0sCi0JeyAiZG1hIGxvdyBwYWdlIiwgCTB4MDA4MCwgMHgwMDhmIH0sCi0JeyAiZG1hMiIsCQkweDAwYzAsIDB4MDBkZiB9LAotCXsgImRtYSBoaWdoIHBhZ2UiLAkweDA0ODAsIDB4MDQ4ZiB9Ci19Oworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbWFfcmVzb3VyY2VzW10gPSB7IHsKKwkubmFtZQk9ICJkbWExIiwKKwkuc3RhcnQJPSAweDAwMDAsCisJLmVuZAk9IDB4MDAwZgorfSwgeworCS5uYW1lCT0gImRtYSBsb3cgcGFnZSIsCisJLnN0YXJ0CT0gMHgwMDgwLAorCS5lbmQgCT0gMHgwMDhmCit9LCB7CisJLm5hbWUJPSAiZG1hMiIsCisJLnN0YXJ0CT0gMHgwMGMwLAorCS5lbmQJPSAweDAwZGYKK30sIHsKKwkubmFtZQk9ICJkbWEgaGlnaCBwYWdlIiwKKwkuc3RhcnQJPSAweDA0ODAsCisJLmVuZAk9IDB4MDQ4ZgorfSB9OwogCiB2b2lkIF9faW5pdCBpc2FfaW5pdF9kbWEoZG1hX3QgKmRtYSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCmluZGV4IGIwOTNhYjguLmFkZjYyZTVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKQEAgLTIwLDExICsyMCwxMCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNkZWZpbmUgUFJPQ0lORk9fSU5JVEZVTkMgICAgICAgMTIKLQogLyoKICAqIEtlcm5lbCBzdGFydHVwIGVudHJ5IHBvaW50LgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03OSw1ICs3OCw2IEBACiAKIAltb3YJcGMsIHIxMwkJCQlAIGNsZWFyIHRoZSBCU1MgYW5kIGp1bXAKIAkJCQkJCUAgdG8gc3RhcnRfa2VybmVsCisJLmx0b3JnCiAKICNpbmNsdWRlICJoZWFkLWNvbW1vbi5TIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKaW5kZXggMDRiNjZhOS4uMDRmNzM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCkBAIC0yNCwxNCArMjQsNiBAQAogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2RlZmluZSBQUk9DSU5GT19NTVVGTEFHUwk4Ci0jZGVmaW5lIFBST0NJTkZPX0lOSVRGVU5DCTEyCi0KLSNkZWZpbmUgTUFDSElORk9fVFlQRQkJMAotI2RlZmluZSBNQUNISU5GT19QSFlTSU8JCTQKLSNkZWZpbmUgTUFDSElORk9fUEdPRkZJTwk4Ci0jZGVmaW5lIE1BQ0hJTkZPX05BTUUJCTEyCi0KICNkZWZpbmUgS0VSTkVMX1JBTV9BRERSCShQQUdFX09GRlNFVCArIFRFWFRfT0ZGU0VUKQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMWZmNzVjZS4uN2RmNmUxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNjQsOCArMjY0LDEyIEBACiAvKgogICogVGFzayBzdHJ1Y3R1cmUgYW5kIGtlcm5lbCBzdGFjayBhbGxvY2F0aW9uLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqdGhyZWFkX2luZm9faGVhZDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfdGhyZWFkX2luZm87CitzdHJ1Y3QgdGhyZWFkX2luZm9fbGlzdCB7CisJdW5zaWduZWQgbG9uZyAqaGVhZDsKKwl1bnNpZ25lZCBpbnQgbnI7Cit9OworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRocmVhZF9pbmZvX2xpc3QsIHRocmVhZF9pbmZvX2xpc3QpID0geyBOVUxMLCAwIH07CiAKICNkZWZpbmUgRVhUUkFfVEFTS19TVFJVQ1QJNAogCkBAIC0yNzQsMTIgKzI3OCwxNSBAQAogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKIAogCWlmIChFWFRSQV9UQVNLX1NUUlVDVCkgewotCQl1bnNpZ25lZCBsb25nICpwID0gdGhyZWFkX2luZm9faGVhZDsKKwkJc3RydWN0IHRocmVhZF9pbmZvX2xpc3QgKnRoID0gJmdldF9jcHVfdmFyKHRocmVhZF9pbmZvX2xpc3QpOworCQl1bnNpZ25lZCBsb25nICpwID0gdGgtPmhlYWQ7CiAKIAkJaWYgKHApIHsKLQkJCXRocmVhZF9pbmZvX2hlYWQgPSAodW5zaWduZWQgbG9uZyAqKXBbMF07Ci0JCQlucl90aHJlYWRfaW5mbyAtPSAxOworCQkJdGgtPmhlYWQgPSAodW5zaWduZWQgbG9uZyAqKXBbMF07CisJCQl0aC0+bnIgLT0gMTsKIAkJfQorCQlwdXRfY3B1X3Zhcih0aHJlYWRfaW5mb19saXN0KTsKKwogCQl0aHJlYWQgPSAoc3RydWN0IHRocmVhZF9pbmZvICopcDsKIAl9CiAKQEAgLTMwMCwxMyArMzA3LDE5IEBACiAKIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKIHsKLQlpZiAoRVhUUkFfVEFTS19TVFJVQ1QgJiYgbnJfdGhyZWFkX2luZm8gPCBFWFRSQV9UQVNLX1NUUlVDVCkgewotCQl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKil0aHJlYWQ7Ci0JCXBbMF0gPSAodW5zaWduZWQgbG9uZyl0aHJlYWRfaW5mb19oZWFkOwotCQl0aHJlYWRfaW5mb19oZWFkID0gcDsKLQkJbnJfdGhyZWFkX2luZm8gKz0gMTsKLQl9IGVsc2UKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl0aHJlYWQsIFRIUkVBRF9TSVpFX09SREVSKTsKKwlpZiAoRVhUUkFfVEFTS19TVFJVQ1QpIHsKKwkJc3RydWN0IHRocmVhZF9pbmZvX2xpc3QgKnRoID0gJmdldF9jcHVfdmFyKHRocmVhZF9pbmZvX2xpc3QpOworCQlpZiAodGgtPm5yIDwgRVhUUkFfVEFTS19TVFJVQ1QpIHsKKwkJCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKXRocmVhZDsKKwkJCXBbMF0gPSAodW5zaWduZWQgbG9uZyl0aC0+aGVhZDsKKwkJCXRoLT5oZWFkID0gcDsKKwkJCXRoLT5uciArPSAxOworCQkJcHV0X2NwdV92YXIodGhyZWFkX2luZm9fbGlzdCk7CisJCQlyZXR1cm47CisJCX0KKwkJcHV0X2NwdV92YXIodGhyZWFkX2luZm9fbGlzdCk7CisJfQorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdGhyZWFkLCBUSFJFQURfU0laRV9PUkRFUik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IGI3Y2QyODAuLjlmYzlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0yNTIsNiArMjUyLDkgQEAKIAkJCWR1bXBfY2FjaGUoImNhY2hlIiwgY3B1LCBDQUNIRV9JU0laRShpbmZvKSk7CiAJCX0KIAl9CisKKwlpZiAoYXJjaF9pc19jb2hlcmVudCgpKQorCQlwcmludGsoIkNhY2hlIGNvaGVyZW5jeSBlbmFibGVkXG4iKTsKIH0KIAogaW50IGNwdV9hcmNoaXRlY3R1cmUodm9pZCkKQEAgLTMxOSw2ICszMjIsMTIgQEAKIAlzcHJpbnRmKHN5c3RlbV91dHNuYW1lLm1hY2hpbmUsICIlcyVjIiwgbGlzdC0+YXJjaF9uYW1lLCBFTkRJQU5ORVNTKTsKIAlzcHJpbnRmKGVsZl9wbGF0Zm9ybSwgIiVzJWMiLCBsaXN0LT5lbGZfbmFtZSwgRU5ESUFOTkVTUyk7CiAJZWxmX2h3Y2FwID0gbGlzdC0+ZWxmX2h3Y2FwOworI2lmbmRlZiBDT05GSUdfQVJNX1RIVU1CCisJZWxmX2h3Y2FwICY9IH5IV0NBUF9USFVNQjsKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfVkZQCisJZWxmX2h3Y2FwICY9IH5IV0NBUF9WRlA7CisjZW5kaWYKIAogCWNwdV9wcm9jX2luaXQoKTsKIH0KQEAgLTM5OCw3ICs0MDcsNyBAQAogfQogX19lYXJseV9wYXJhbSgiaW5pdHJkPSIsIGVhcmx5X2luaXRyZCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1fYWRkX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJLyoKIAkgKiBFbnN1cmUgdGhhdCBzdGFydC9zaXplIGFyZSBhbGlnbmVkIHRvIGEgcGFnZSBib3VuZGFyeS4KQEAgLTQzNiw3ICs0NDUsNyBAQAogCWlmICgqKnAgPT0gJ0AnKQogCQlzdGFydCA9IG1lbXBhcnNlKCpwICsgMSwgcCk7CiAKLQlhZGRfbWVtb3J5KHN0YXJ0LCBzaXplKTsKKwlhcm1fYWRkX21lbW9yeShzdGFydCwgc2l6ZSk7CiB9CiBfX2Vhcmx5X3BhcmFtKCJtZW09IiwgZWFybHlfbWVtKTsKIApAQCAtNTc4LDcgKzU4Nyw3IEBACiAJCQl0YWctPnUubWVtLnN0YXJ0LCB0YWctPnUubWVtLnNpemUgLyAxMDI0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWFkZF9tZW1vcnkodGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplKTsKKwlhcm1fYWRkX21lbW9yeSh0YWctPnUubWVtLnN0YXJ0LCB0YWctPnUubWVtLnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC03OTgsNyArODA3LDcgQEAKIHsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQlyZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RhdGEsIGNwdSkuY3B1LCBjcHUsIE5VTEwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMgYi9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKaW5kZXggM2JkYzhjNi4uMTYxNTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JhY2t0cmFjZS5TCisrKyBiL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUwpAQCAtMTIyLDcgKzEyMiw3IEBACiAjZGVmaW5lIHJlZyAgIHI1CiAjZGVmaW5lIHN0YWNrIHI2CiAKLS5MZHVtcHN0bToJc3RtZmQJc3AhLCB7aW5zdHIsIHJlZywgc3RhY2ssIHI3LCBscn0KKy5MZHVtcHN0bToJc3RtZmQJc3AhLCB7aW5zdHIsIHJlZywgc3RhY2ssIHI3LCByOCwgbHJ9CiAJCW1vdglzdGFjaywgcjAKIAkJbW92CWluc3RyLCByMQogCQltb3YJcmVnLCAjOQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCWFkcm5lCXIwLCAuTGNyCiAJCWJsbmUJcHJpbnRrCiAJCW1vdglyMCwgc3RhY2sKLQkJTE9BRFJFR1MoZmQsIHNwISwge2luc3RyLCByZWcsIHN0YWNrLCByNywgcGN9KQorCQlMT0FEUkVHUyhmZCwgc3AhLCB7aW5zdHIsIHJlZywgc3RhY2ssIHI3LCByOCwgcGN9KQogCiAuTGZwOgkJLmFzY2l6CSIgciVkID0gJTA4WCVjIgogLkxjcjoJCS5hc2NpegkiXG4iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZGl2NjQuUyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCmluZGV4IGVjOWExY2QuLjU4ZWVmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9kaXY2NC5TCisrKyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCkBAIC0xODksMTIgKzE4OSwxMiBAQAogCW1vdmVxCXBjLCBscgogCiAJQCBEaXZpc2lvbiBieSAwOgotCXN0cglsciwgW3NwLCAjLTRdIQorCXN0cglsciwgW3NwLCAjLThdIQogCWJsCV9fZGl2MAogCiAJQCBhcyB3cm9uZyBhcyBpdCBjb3VsZCBiZS4uLgogCW1vdgl5bCwgIzAKIAltb3YJeWgsICMwCiAJbW92CXhoLCAjMAotCWxkcglwYywgW3NwXSwgIzQKKwlsZHIJcGMsIFtzcF0sICM4CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvYWFlZDIwMDAuYyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvYWFlZDIwMDAuYwppbmRleCBkYzVmYThlLi44M2Y1N2RhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2FhZWQyMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9hYWVkMjAwMC5jCkBAIC03OSw3ICs3OSwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFhZWQyMDAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotICB7IEVYVF9HUElPX1ZCQVNFLCBFWFRfR1BJT19QQkFTRSwgRVhUX0dQSU9fTEVOR1RILCBNVF9ERVZJQ0UgfSwgLyogRXh0IEdQSU8gKi8KKwl7CisJCS52aXJ0dWFsCT0gRVhUX0dQSU9fVkJBU0UsCisJCS5wZm4gICAgICAgICAgICA9IF9fcGh5c190b19wZm4oRVhUX0dQSU9fUEJBU0UpLAorCQkubGVuZ3RoICAgICAgICAgPSBFWFRfR1BJT19MRU5HVEgsCisJCS50eXBlICAgICAgICAgICA9IE1UX0RFVklDRQorCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgYWFlZDIwMDBfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jCmluZGV4IGRjZTQ4MTUuLjY1YmU1ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTAsMTIgKzQ5LDEyIEBACiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHN0YW5kYXJkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBWSU9fQVBCX0JBU0UsCi0JCS5waHlzaWNhbAk9IF9fcGh5c190b19wZm4oUElPX0FQQl9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBJT19BUEJfQkFTRSksCiAJCS5sZW5ndGgJCT0gSU9fQVBCX0xFTkdUSCwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZJT19BSEJfQkFTRSwKLQkJLnBoeXNpY2FsCT0gX19waHlzX3RvX3BmbihQSU9fQUhCX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUElPX0FIQl9CQVNFKSwKIAkJLmxlbmd0aAkJPSBJT19BSEJfTEVOR1RILAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5oCmluZGV4IGI2MDI5YTkuLjU5NTAxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5oCkBAIC05LDYgKzksNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KIAogc3RydWN0IHN5c190aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZQppbmRleCA3NWU2ZWUzLi5lZjg4YzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlCkBAIC0xNiwxMSArMTYsMTIgQEAKICNvYmotJChDT05GSUdfTUFDSF9LQjkyMDApCSs9IGJvYXJkLWtiOTIwMi5vCiAKICMgTEVEcyBzdXBwb3J0Ci0jbGVkLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLKQkrPSBsZWRzLm8KLSNsZWQtJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGxlZHMubwotI2xlZC0kKENPTkZJR19NQUNIX0NTQjMzNykJKz0gbGVkcy5vCi0jbGVkLSQoQ09ORklHX01BQ0hfQ1NCNjM3KQkrPSBsZWRzLm8KK2xlZC0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDBESykJKz0gbGVkcy5vCitsZWQtJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGxlZHMubworbGVkLSQoQ09ORklHX01BQ0hfQ1NCMzM3KQkrPSBsZWRzLm8KK2xlZC0kKENPTkZJR19NQUNIX0NTQjYzNykJKz0gbGVkcy5vCiAjbGVkLSQoQ09ORklHX01BQ0hfS0I5MjAwKQkrPSBsZWRzLm8KKyNsZWQtJChDT05GSUdfTUFDSF9LQUZBKQkrPSBsZWRzLm8KIG9iai0kKENPTkZJR19MRURTKSArPSAkKGxlZC15KQogCiAjIFZHQSBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMKaW5kZXggNTQwMjJlNS4uZjQ1MTA0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2IzMzcuYwpAQCAtNjcsNiArNjcsOSBAQAogCS8qIEluaXRpYWxpemUgY2xvY2tzOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KIAlhdDkxX2Nsb2NrX2luaXQoMzY4NjQwMCk7CiAKKwkvKiBTZXR1cCB0aGUgTEVEcyAqLworCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BCMiwgQVQ5MV9QSU5fUEIyKTsKKwogI2lmZGVmIENPTkZJR19TRVJJQUxfQVQ5MQogCWF0OTFfY29uc29sZV9wb3J0ID0gQ1NCMzM3X1NFUklBTF9DT05TT0xFOwogCW1lbWNweShhdDkxX3NlcmlhbF9tYXAsIHNlcmlhbCwgc2l6ZW9mKHNlcmlhbCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jCmluZGV4IDgxOTVmOWQuLmYyYzJkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2I2MzcuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiNjM3LmMKQEAgLTY3LDYgKzY3LDkgQEAKIAkvKiBJbml0aWFsaXplIGNsb2NrczogMy42ODY0IE1IeiBjcnlzdGFsICovCiAJYXQ5MV9jbG9ja19pbml0KDM2ODY0MDApOwogCisJLyogU2V0dXAgdGhlIExFRHMgKi8KKwlhdDkxX2luaXRfbGVkcyhBVDkxX1BJTl9QQjIsIEFUOTFfUElOX1BCMik7CisKICNpZmRlZiBDT05GSUdfU0VSSUFMX0FUOTEKIAlhdDkxX2NvbnNvbGVfcG9ydCA9IENTQjYzN19TRVJJQUxfQ09OU09MRTsKIAltZW1jcHkoYXQ5MV9zZXJpYWxfbWFwLCBzZXJpYWwsIHNpemVvZihzZXJpYWwpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1kay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKaW5kZXggOGE3ODMzNi4uMmQ3MjAwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKQEAgLTcwLDYgKzcwLDkgQEAKIAkvKiBJbml0aWFsaXplIGNsb2NrczogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MV9jbG9ja19pbml0KDE4NDMyMDAwKTsKIAorCS8qIFNldHVwIHRoZSBMRURzICovCisJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIyLCBBVDkxX1BJTl9QQjIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF9BVDkxCiAJYXQ5MV9jb25zb2xlX3BvcnQgPSBES19TRVJJQUxfQ09OU09MRTsKIAltZW1jcHkoYXQ5MV9zZXJpYWxfbWFwLCBzZXJpYWwsIHNpemVvZihzZXJpYWwpKTsKQEAgLTExOCw5ICsxMjEsMTQgQEAKIAlhdDkxX2FkZF9kZXZpY2VfdWRjKCZka191ZGNfZGF0YSk7CiAJLyogQ29tcGFjdCBGbGFzaCAqLwogCWF0OTFfYWRkX2RldmljZV9jZigmZGtfY2ZfZGF0YSk7CisjaWZkZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECisJLyogRGF0YUZsYXNoIGNhcmQgKi8KKwlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjcsIDApOworI2Vsc2UKIAkvKiBNTUMgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjcsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuIGRlZmF1bHQ6IE1NQyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCNywgMSk7CS8qIHRoaXMgTU1DIGNhcmQgc2xvdCBjYW4gb3B0aW9uYWxseSB1c2UgU1BJIHNpZ25hbGluZyAoQ1MzKS4gKi8KIAlhdDkxX2FkZF9kZXZpY2VfbW1jKCZka19tbWNfZGF0YSk7CisjZW5kaWYKIAkvKiBWR0EgKi8KIC8vCWRrX2FkZF9kZXZpY2VfdmlkZW8oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKaW5kZXggZmQwNzUyZS4uODBkOTBmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKQEAgLTcwLDYgKzcwLDkgQEAKIAkvKiBJbml0aWFsaXplIGNsb2NrczogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MV9jbG9ja19pbml0KDE4NDMyMDAwKTsKIAorCS8qIFNldHVwIHRoZSBMRURzICovCisJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIxLCBBVDkxX1BJTl9QQjIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF9BVDkxCiAJYXQ5MV9jb25zb2xlX3BvcnQgPSBFS19TRVJJQUxfQ09OU09MRTsKIAltZW1jcHkoYXQ5MV9zZXJpYWxfbWFwLCBzZXJpYWwsIHNpemVvZihzZXJpYWwpKTsKQEAgLTExMSw5ICsxMTQsMTQgQEAKIAlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKIAkvKiBVU0IgRGV2aWNlICovCiAJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOworI2lmZGVmIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRAorCS8qIERhdGFGbGFzaCBjYXJkICovCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIyMiwgMCk7CisjZWxzZQogCS8qIE1NQyAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuIGRlZmF1bHQ6IE1NQyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuICovCiAJYXQ5MV9hZGRfZGV2aWNlX21tYygmZWtfbW1jX2RhdGEpOworI2VuZGlmCiAJLyogVkdBICovCiAvLwlla19hZGRfZGV2aWNlX3ZpZGVvKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwppbmRleCA1N2VlZGQ1Li5iZmU0N2JkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CiBzdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZGF0YTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxcm05MjAwX3VzYmhfcmVzb3VyY2VbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV91c2JoX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBBVDkxX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MV9VSFBfQkFTRSArIFNaXzFNIC0xLAorCQkuZW5kCT0gQVQ5MV9VSFBfQkFTRSArIFNaXzFNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC00OSw4ICs0OSw4IEBACiAJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKIAkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gYXQ5MXJtOTIwMF91c2JoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxcm05MjAwX3VzYmhfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGF0OTFfdXNiaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV91c2JoX3Jlc291cmNlKSwKIH07CiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKQEAgLTEyMSw2ICsxMjEsMTkgQEAKIHN0YXRpYyB1NjQgZXRoX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgZXRoX2RhdGE7CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9ldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX0JBU0VfRU1BQywKKwkJLmVuZAk9IEFUOTFfQkFTRV9FTUFDICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfRU1BQywKKwkJLmVuZAk9IEFUOTFfSURfRU1BQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfZXRoX2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV9ldGhlciIsCiAJLmlkCQk9IC0xLApAQCAtMTI5LDcgKzE0Miw4IEBACiAJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKIAkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZXRoX2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCisJLnJlc291cmNlCT0gYXQ5MV9ldGhfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX2V0aF9yZXNvdXJjZXMpLAogfTsKIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKQEAgLTE4MCwxMyArMTk0LDIzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZl9kYXRhOwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFfY2ZfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX0NGX0JBU0UsCisJCS8qIHRpZXMgdXAgQ1M0LCBDUzUsIGFuZCBDUzYgKi8KKwkJLmVuZAk9IEFUOTFfQ0ZfQkFTRSArICgweDMwMDAwMDAwIC0gMSksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklULAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2NmX2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV9jZiIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewogCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjZl9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAwLAorCS5yZXNvdXJjZQk9IGF0OTFfY2ZfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX2NmX3Jlc291cmNlcyksCiB9OwogCiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKQEAgLTIyNCwxNSArMjQ4LDIwIEBACiBzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9tbWNfcmVzb3VyY2VzW10gPSB7Ci0JeworCVswXSA9IHsKIAkJLnN0YXJ0CT0gQVQ5MV9CQVNFX01DSSwKIAkJLmVuZAk9IEFUOTFfQkFTRV9NQ0kgKyBTWl8xNksgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9CisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfTUNJLAorCQkuZW5kCT0gQVQ5MV9JRF9NQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX21tY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFybTkyMDBfbWNpIiwKKwkubmFtZQkJPSAiYXQ5MV9tY2kiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKIAkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLApAQCAtMjkwLDQgKzMxOSwxMjMgQEAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBOQU5EIC8gU21hcnRNZWRpYQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUOTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBhdDkxX25hbmRfZGF0YSBuYW5kX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9uYW5kX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQVQ5MV9TTUFSVE1FRElBX0JBU0UsCisJCS5lbmQJPSBBVDkxX1NNQVJUTUVESUFfQkFTRSArIFNaXzhNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYXQ5MV9uYW5kX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV9uYW5kX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwkvKiBlbmFibGUgcGluICovCisJaWYgKGRhdGEtPmVuYWJsZV9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOworCisJLyogcmVhZHkvYnVzeSBwaW4gKi8KKwlpZiAoZGF0YS0+cmR5X3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKKworCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLworCWlmIChkYXRhLT5kZXRfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJCS8qIFNNT0UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkJLyogU01XRSAqLworCisJbmFuZF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX25hbmRfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRXSSAoaTJjKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3R3aV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyh2b2lkKQoreworCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkJLyogVFdEICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNSwgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAwKTsJCS8qIFRXQ0sgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI2LCAxKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90d2lfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJUQworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUOTFfUlRDKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX1JUQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3J0Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfcnRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9ydGNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExFRHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTKQordTggYXQ5MV9sZWRzX2NwdTsKK3U4IGF0OTFfbGVkc190aW1lcjsKKwordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKQoreworCWF0OTFfbGVkc19jcHUgICA9IGNwdV9sZWQ7CisJYXQ5MV9sZWRzX3RpbWVyID0gdGltZXJfbGVkOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKSB7fQorI2VuZGlmCisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTUwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvbGVkcy5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogTEVEIGRyaXZlciBmb3IgQXRtZWwgQVQ5MS1iYXNlZCBib2FyZHMuCisgKgorICogIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZSAoUHR5KSBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9sZWRfb24odW5zaWduZWQgaW50IGxlZCkKK3sKKwlhdDkxX3NldF9ncGlvX3ZhbHVlKGxlZCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX2xlZF9vZmYodW5zaWduZWQgaW50IGxlZCkKK3sKKwlhdDkxX3NldF9ncGlvX3ZhbHVlKGxlZCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX2xlZF90b2dnbGUodW5zaWduZWQgaW50IGxlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlzX29mZiA9IGF0OTFfZ2V0X2dwaW9fdmFsdWUobGVkKTsKKwlpZiAoaXNfb2ZmKQorCQlhdDkxX2xlZF9vbihsZWQpOworCWVsc2UKKwkJYXQ5MV9sZWRfb2ZmKGxlZCk7Cit9CisKKworLyoKKyAqIEhhbmRsZSBMRUQgZXZlbnRzLgorICovCitzdGF0aWMgdm9pZCBhdDkxX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2goZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CQkvKiBTeXN0ZW0gc3RhcnR1cCAqLworCQlhdDkxX2xlZF9vbihhdDkxX2xlZHNfY3B1KTsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9zdG9wOgkJLyogU3lzdGVtIHN0b3AgLyBzdXNwZW5kICovCisJCWF0OTFfbGVkX29mZihhdDkxX2xlZHNfY3B1KTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgkJLyogRXZlcnkgNTAgdGltZXIgdGlja3MgKi8KKwkJYXQ5MV9sZWRfdG9nZ2xlKGF0OTFfbGVkc190aW1lcik7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwljYXNlIGxlZF9pZGxlX3N0YXJ0OgkvKiBFbnRlcmluZyBpZGxlIHN0YXRlICovCisJCWF0OTFfbGVkX29mZihhdDkxX2xlZHNfY3B1KTsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoJLyogRXhpdCBpZGxlIHN0YXRlICovCisJCWF0OTFfbGVkX29uKGF0OTFfbGVkc19jcHUpOworCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQoreworCWlmICghYXQ5MV9sZWRzX3RpbWVyIHx8ICFhdDkxX2xlZHNfY3B1KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEVuYWJsZSBQSU8gdG8gYWNjZXNzIHRoZSBMRURzICovCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoYXQ5MV9sZWRzX3RpbWVyLCAxKTsKKwlhdDkxX3NldF9ncGlvX291dHB1dChhdDkxX2xlZHNfY3B1LCAxKTsKKworCWxlZHNfZXZlbnQgPSBhdDkxX2xlZHNfZXZlbnQ7CisKKwlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwobGVkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCAyZDg5MmU0Li5kY2Q0MTc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC00MjQsNiArNDI0LDE0IEBACiAJLnBlcmlwaGlkCT0gMHgwMDA0MTAxMCwKIH07CiAKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X3J0Y19kZXZpY2UgPSB7CisgICAgICAgLm5hbWUgICAgICAgICAgID0gImVwOTN4eC1ydGMiLAorICAgICAgIC5pZCAgICAgICAgICAgICA9IC0xLAorICAgICAgIC5udW1fcmVzb3VyY2VzICA9IDAsCit9OworCisKIHZvaWQgX19pbml0IGVwOTN4eF9pbml0X2RldmljZXModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdjsKQEAgLTQzOSw0ICs0NDcsNiBAQAogCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKCZ1YXJ0MV9kZXZpY2UsICZpb21lbV9yZXNvdXJjZSk7CiAJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJnVhcnQyX2RldmljZSwgJmlvbWVtX3Jlc291cmNlKTsKIAlhbWJhX2RldmljZV9yZWdpc3RlcigmdWFydDNfZGV2aWNlLCAmaW9tZW1fcmVzb3VyY2UpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfcnRjX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCmluZGV4IDc3N2U3NWQuLmUyNDU2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L200OHQ4Ni5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zOSw2ICs0MSwxNiBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFM3MlhYX09QVElPTlMyX1BIWVNfQkFTRSksCiAJCS5sZW5ndGgJCT0gVFM3MlhYX09QVElPTlMyX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gVFM3MlhYX1JUQ19JTkRFWF9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfUlRDX0lOREVYX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gVFM3MlhYX1JUQ19JTkRFWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IFRTNzJYWF9SVENfREFUQV9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfUlRDX0RBVEFfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBUUzcyWFhfUlRDX0RBVEFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0KIH07CiAKQEAgLTk5LDExICsxMTEsMzggQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHRzNzJ4eF9ydGNfcmVhZGJ5dGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlYihhZGRyLCBUUzcyWFhfUlRDX0lOREVYX1ZJUlRfQkFTRSk7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFRTNzJYWF9SVENfREFUQV9WSVJUX0JBU0UpOworfQorCitzdGF0aWMgdm9pZCB0czcyeHhfcnRjX3dyaXRlYnl0ZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGViKGFkZHIsIFRTNzJYWF9SVENfSU5ERVhfVklSVF9CQVNFKTsKKwlfX3Jhd193cml0ZWIodmFsdWUsIFRTNzJYWF9SVENfREFUQV9WSVJUX0JBU0UpOworfQorCitzdGF0aWMgc3RydWN0IG00OHQ4Nl9vcHMgdHM3Mnh4X3J0Y19vcHMgPSB7CisJLnJlYWRieXRlCQk9IHRzNzJ4eF9ydGNfcmVhZGJ5dGUsCisJLndyaXRlYnl0ZQkJPSB0czcyeHhfcnRjX3dyaXRlYnl0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzJ4eF9ydGNfZGV2aWNlID0geworCS5uYW1lCQkJPSAicnRjLW00OHQ4NiIsCisJLmlkCQkJPSAtMSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ0czcyeHhfcnRjX29wcywKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgdHM3Mnh4X2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKIAlpZiAoYm9hcmRfaXNfdHM3MjAwKCkpCiAJCXBoeXNtYXBfY29uZmlndXJlKFRTNzJYWF9OT1JfUEhZU19CQVNFLCAweDAxMDAwMDAwLCAxLCBOVUxMKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzJ4eF9ydGNfZGV2aWNlKTsKIH0KIAogTUFDSElORV9TVEFSVChUUzcyWFgsICJUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyeHggU0JDIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKaW5kZXggNzFhNTllMS4uNGNhNTFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKQEAgLTcsMTEgKzcsMTggQEAKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqICAwMy8wMy8yMDA0IFNhc2NoYSBIYXVlciA8c2FzY2hhQHNhc2NoYWhhdWVyLmRlPgorICogIDIwMDQtMDMtMDMgU2FzY2hhIEhhdWVyIDxzYXNjaGFAc2FzY2hhaGF1ZXIuZGU+CiAgKiAgICAgICAgICAgICBpbml0aWFsIHZlcnNpb24gaGVhdmlseSBpbnNwaXJlZCBieQogICogICAgICAgICAgICAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKyAqCisgKiAgMjAwNS0wNC0xNyBQYXZlbCBQaXNhIDxwaXNhQGNtcC5mZWxrLmN2dXQuY3o+CisgKiAgICAgICAgICAgICBDaGFuZ2VkIHRvIHN1cHBvcnQgc2NhdHRlciBnYXRoZXIgRE1BCisgKiAgICAgICAgICAgICBieSB0YWtpbmcgUnVzc2VsbCdzIGNvZGUgZnJvbSBSaXNjUEMKKyAqCiAgKi8KIAorI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMiw2OSArMjksMzY4IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtZG1hLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgewotCWNoYXIgKm5hbWU7Ci0Jdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwotCXZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLQl2b2lkICpkYXRhOwotfSBkbWFfY2hhbm5lbHNbMTFdOworc3RydWN0IGlteF9kbWFfY2hhbm5lbCBpbXhfZG1hX2NoYW5uZWxzW0lNWF9ETUFfQ0hBTk5FTFNdOwogCi0vKiBzZXQgZXJyX2hhbmRsZXIgdG8gTlVMTCB0byBoYXZlIHRoZSBzdGFuZGFyZCBpbmZvLW9ubHkgZXJyb3IgaGFuZGxlciAqLwotaW50Ci1pbXhfcmVxdWVzdF9kbWEoY2hhciAqbmFtZSwgaW14X2RtYV9wcmlvIHByaW8sCi0JCXZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKLQkJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB2b2lkICpkYXRhKQorLyoKKyAqIGlteF9kbWFfc2dfbmV4dCAtIHByZXBhcmUgbmV4dCBjaHVuayBmb3Igc2NhdHRlci1nYXRoZXIgRE1BIGVtdWxhdGlvbgorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBsYXN0Y291bnQ6IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBkdXJpbmcgbGFzdCB0cmFuc2ZlcgorICoKKyAqIEZ1bmN0aW9ucyBwcmVwYXJlcyBETUEgY29udHJvbGxlciBmb3IgbmV4dCBzZyBkYXRhIGNodW5rIHRyYW5zZmVyLgorICogVGhlIEBsYXN0Y291bnQgYXJndW1lbnQgaW5mb3JtcyBmdW5jdGlvbiBhYm91dCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQKKyAqIGR1cmluZyBsYXN0IGJsb2NrLiBaZXJvIHZhbHVlIGNhbiBiZSB1c2VkIGZvciBAbGFzdGNvdW50IHRvIHNldHVwIERNQQorICogZm9yIHRoZSBmaXJzdCBjaHVuay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW14X2RtYV9zZ19uZXh0KGlteF9kbWFjaF90IGRtYV9jaCwgdW5zaWduZWQgaW50IGxhc3Rjb3VudCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpLCBmb3VuZCA9IDA7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKwl1bnNpZ25lZCBpbnQgbmV4dGNvdW50OworCXVuc2lnbmVkIGludCBuZXh0YWRkcjsKIAotCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoIW5hbWUgfHwgIWlycV9oYW5kbGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkbWFfY2gpOworCQlyZXR1cm4gMDsKKwl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaW14ZG1hLT5yZXNieXRlcyAtPSBsYXN0Y291bnQ7CiAKLQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KLQlmb3IgKGkgPSBwcmlvOyBpIDwgcHJpbyArIChwcmlvID09IERNQV9QUklPX0xPVykgPyA4IDogNDsgaSsrKSB7Ci0JCWlmICghZG1hX2NoYW5uZWxzW2ldLm5hbWUpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOworCWlmICghaW14ZG1hLT5zZykgeworCQlwcl9kZWJ1ZygiaW14ZG1hJWQ6IG5vIHNnIGRhdGFcbiIsIGRtYV9jaCk7CisJCXJldHVybiAwOworCX0KKworCWlteGRtYS0+c2diYyArPSBsYXN0Y291bnQ7CisJaWYgKChpbXhkbWEtPnNnYmMgPj0gaW14ZG1hLT5zZy0+bGVuZ3RoKSB8fCAhaW14ZG1hLT5yZXNieXRlcykgeworCQlpZiAoKGlteGRtYS0+c2djb3VudCA8PSAxKSB8fCAhaW14ZG1hLT5yZXNieXRlcykgeworCQkJcHJfZGVidWcoImlteGRtYSVkOiBzZyB0cmFuc2ZlciBsaW1pdCByZWFjaGVkXG4iLAorCQkJCSBkbWFfY2gpOworCQkJaW14ZG1hLT5zZ2NvdW50PTA7CisJCQlpbXhkbWEtPnNnID0gTlVMTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaW14ZG1hLT5zZ2NvdW50LS07CisJCQlpbXhkbWEtPnNnKys7CisJCQlpbXhkbWEtPnNnYmMgPSAwOwogCQl9CiAJfQorCW5leHRjb3VudCA9IGlteGRtYS0+c2ctPmxlbmd0aCAtIGlteGRtYS0+c2diYzsKKwluZXh0YWRkciA9IGlteGRtYS0+c2ctPmRtYV9hZGRyZXNzICsgaW14ZG1hLT5zZ2JjOwogCi0JaWYgKCFmb3VuZCkgewotCQkvKiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgaGllciBwcmlvcml0aWVzICovCi0JCWZvciAoaSA9IHByaW8gLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKCFkbWFfY2hhbm5lbHNbaV0ubmFtZSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwlpZihpbXhkbWEtPnJlc2J5dGVzIDwgbmV4dGNvdW50KQorCQluZXh0Y291bnQgPSBpbXhkbWEtPnJlc2J5dGVzOwogCi0JaWYgKGZvdW5kKSB7Ci0JCURJTVIgJj0gfigxIDw8IGkpOwotCQlkbWFfY2hhbm5lbHNbaV0ubmFtZSA9IG5hbWU7Ci0JCWRtYV9jaGFubmVsc1tpXS5pcnFfaGFuZGxlciA9IGlycV9oYW5kbGVyOwotCQlkbWFfY2hhbm5lbHNbaV0uZXJyX2hhbmRsZXIgPSBlcnJfaGFuZGxlcjsKLQkJZG1hX2NoYW5uZWxzW2ldLmRhdGEgPSBkYXRhOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIG1vcmUgYXZhaWxhYmxlIERNQSBjaGFubmVscyBmb3IgJXNcbiIsCi0JCSAgICAgICBuYW1lKTsKLQkJaSA9IC1FTk9ERVY7Ci0JfQorCWlmICgoaW14ZG1hLT5kbWFfbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpCisJCURBUihkbWFfY2gpID0gbmV4dGFkZHI7CisJZWxzZQorCQlTQVIoZG1hX2NoKSA9IG5leHRhZGRyOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBpOworCUNOVFIoZG1hX2NoKSA9IG5leHRjb3VudDsKKwlwcl9kZWJ1ZygiaW14ZG1hJWQ6IG5leHQgc2cgY2h1bmsgZHN0IDB4JTA4eCwgc3JjIDB4JTA4eCwgc2l6ZSAweCUwOHhcbiIsCisJCSBkbWFfY2gsIERBUihkbWFfY2gpLCBTQVIoZG1hX2NoKSwgQ05UUihkbWFfY2gpKTsKKworCXJldHVybiBuZXh0Y291bnQ7CiB9CiAKLXZvaWQKLWlteF9mcmVlX2RtYShpbnQgZG1hX2NoKQorLyoKKyAqIGlteF9kbWFfc2V0dXBfc2dfYmFzZSAtIHNjYXR0ZXItZ2F0aGVyIERNQSBlbXVsYXRpb24KKyAqIEBkbWFfY2g6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKiBAc2c6IHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QvdmVjdG9yCisgKiBAc2djb3VudDogc2NhdHRlci1nYXRoZXIgbGlzdCBodW5ncyBjb3VudAorICoKKyAqIEZ1bmN0aW9ucyBzZXRzIHVwIGkuTVggRE1BIHN0YXRlIGZvciBlbXVsYXRlZCBzY2F0dGVyLWdhdGhlciB0cmFuc2ZlcgorICogYW5kIHNldHMgdXAgY2hhbm5lbCByZWdpc3RlcnMgdG8gYmUgcmVhZHkgZm9yIHRoZSBmaXJzdCBjaHVuaworICovCitzdGF0aWMgaW50CitpbXhfZG1hX3NldHVwX3NnX2Jhc2UoaW14X2RtYWNoX3QgZG1hX2NoLAorCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCkKK3sKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tkbWFfY2hdOworCisJaW14ZG1hLT5zZyA9IHNnOworCWlteGRtYS0+c2djb3VudCA9IHNnY291bnQ7CisJaW14ZG1hLT5zZ2JjID0gMDsKKwlyZXR1cm4gaW14X2RtYV9zZ19uZXh0KGRtYV9jaCwgMCk7Cit9CisKKy8qKgorICogaW14X2RtYV9zZXR1cF9zaW5nbGUgLSBzZXR1cCBpLk1YIERNQSBjaGFubmVsIGZvciBsaW5lYXIgbWVtb3J5IHRvL2Zyb20gZGV2aWNlIHRyYW5zZmVyCisgKiBAZG1hX2NoOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICogQGRtYV9hZGRyZXNzOiB0aGUgRE1BL3BoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBsaW5lYXIgZGF0YSBibG9jaworICoJCXRvIHRyYW5zZmVyCisgKiBAZG1hX2xlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2NrIGluIGJ5dGVzCisgKiBAZGV2X2FkZHI6IHBoeXNpY2FsIGRldmljZSBwb3J0IGFkZHJlc3MKKyAqIEBkbWFtb2RlOiBETUEgdHJhbnNmZXIgbW9kZSwgJURNQV9NT0RFX1JFQUQgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBtZW1vcnkKKyAqICAgICAgICAgICBvciAlRE1BX01PREVfV1JJVEUgZnJvbSBtZW1vcnkgdG8gdGhlIGRldmljZQorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXR1cHMgRE1BIGNoYW5uZWwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgZm9yIHRyYW5zZmVyCisgKiBzcGVjaWZpZWQgYnkgcHJvdmlkZWQgcGFyYW1ldGVycy4gVGhlIHNjYXR0ZXItZ2F0aGVyIGVtdWxhdGlvbiBpcyBkaXNhYmxlZCwKKyAqIGJlY2F1c2UgbGluZWFyIGRhdGEgYmxvY2sKKyAqIGZvcm0gdGhlIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaXMgdHJhbnNmZXJlZC4KKyAqIFJldHVybiB2YWx1ZTogaWYgaW5jb3JyZWN0IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIC0lRUlOVkFMLgorICoJCVplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCisgKi8KK2ludAoraW14X2RtYV9zZXR1cF9zaW5nbGUoaW14X2RtYWNoX3QgZG1hX2NoLCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCQkgICAgIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsCisJCSAgICAgZG1hbW9kZV90IGRtYW1vZGUpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKworCWlteGRtYS0+c2cgPSBOVUxMOworCWlteGRtYS0+c2djb3VudCA9IDA7CisJaW14ZG1hLT5kbWFfbW9kZSA9IGRtYW1vZGU7CisJaW14ZG1hLT5yZXNieXRlcyA9IGRtYV9sZW5ndGg7CisKKwlpZiAoIWRtYV9hZGRyZXNzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2luZ2xlIG51bGwgYWRkcmVzc1xuIiwKKwkJICAgICAgIGRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZG1hX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSB6ZXJvIGxlbmd0aFxuIiwKKwkJICAgICAgIGRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1JFQUQpIHsKKwkJcHJfZGVidWcoImlteGRtYSVkOiBteF9kbWFfc2V0dXBfc2luZ2xlMmRldiBkbWFfYWRkcmVzc2c9MHglMDh4IGRtYV9sZW5ndGg9JWQgZGV2X2FkZHI9MHglMDh4IGZvciByZWFkXG4iLAorCQkJZG1hX2NoLCAodW5zaWduZWQgaW50KWRtYV9hZGRyZXNzLCBkbWFfbGVuZ3RoLAorCQkJZGV2X2FkZHIpOworCQlTQVIoZG1hX2NoKSA9IGRldl9hZGRyOworCQlEQVIoZG1hX2NoKSA9ICh1bnNpZ25lZCBpbnQpZG1hX2FkZHJlc3M7CisJfSBlbHNlIGlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1dSSVRFKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogbXhfZG1hX3NldHVwX3NpbmdsZTJkZXYgZG1hX2FkZHJlc3NnPTB4JTA4eCBkbWFfbGVuZ3RoPSVkIGRldl9hZGRyPTB4JTA4eCBmb3Igd3JpdGVcbiIsCisJCQlkbWFfY2gsICh1bnNpZ25lZCBpbnQpZG1hX2FkZHJlc3MsIGRtYV9sZW5ndGgsCisJCQlkZXZfYWRkcik7CisJCVNBUihkbWFfY2gpID0gKHVuc2lnbmVkIGludClkbWFfYWRkcmVzczsKKwkJREFSKGRtYV9jaCkgPSBkZXZfYWRkcjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NpbmdsZSBiYWQgZG1hbW9kZVxuIiwKKwkJICAgICAgIGRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCUNOVFIoZG1hX2NoKSA9IGRtYV9sZW5ndGg7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbXhfZG1hX3NldHVwX3NnIC0gc2V0dXAgaS5NWCBETUEgY2hhbm5lbCBTRyBsaXN0IHRvL2Zyb20gZGV2aWNlIHRyYW5zZmVyCisgKiBAZG1hX2NoOiBpLk1YIERNQSBjaGFubmVsIG51bWJlcgorICogQHNnOiBwb2ludGVyIHRvIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0L3ZlY3RvcgorICogQHNnY291bnQ6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgaHVuZ3MgY291bnQKKyAqIEBkbWFfbGVuZ3RoOiB0b3RhbCBsZW5ndGggb2YgdGhlIHRyYW5zZmVyIHJlcXVlc3QgaW4gYnl0ZXMKKyAqIEBkZXZfYWRkcjogcGh5c2ljYWwgZGV2aWNlIHBvcnQgYWRkcmVzcworICogQGRtYW1vZGU6IERNQSB0cmFuc2ZlciBtb2RlLCAlRE1BX01PREVfUkVBRCBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIG1lbW9yeQorICogICAgICAgICAgIG9yICVETUFfTU9ERV9XUklURSBmcm9tIG1lbW9yeSB0byB0aGUgZGV2aWNlCisgKgorICogVGhlIGZ1bmN0aW9uIHNldHVwcyBETUEgY2hhbm5lbCBzdGF0ZSBhbmQgcmVnaXN0ZXJzIHRvIGJlIHJlYWR5IGZvciB0cmFuc2ZlcgorICogc3BlY2lmaWVkIGJ5IHByb3ZpZGVkIHBhcmFtZXRlcnMuIFRoZSBzY2F0dGVyLWdhdGhlciBlbXVsYXRpb24gaXMgc2V0IHVwCisgKiBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMuCisgKgorICogVGhlIGZ1bGwgcHJlcGFyYXRpb24gb2YgdGhlIHRyYW5zZmVyIHJlcXVpcmVzIHNldHVwIG9mIG1vcmUgcmVnaXN0ZXIKKyAqIGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGlteF9kbWFfZW5hYmxlKCkgY2FuIGJlIGNhbGxlZC4KKyAqCisgKiAlQkxSKGRtYV9jaCkgaG9sZHMgdHJhbnNmZXIgYnVyc3QgbGVuZ3RoIGluIGJ5dGVzLCAwIG1lYW5zIDY0IGJ5dGVzCisgKgorICogJVJTU1IoZG1hX2NoKSBoYXMgdG8gYmUgc2V0IHRvIHRoZSBETUEgcmVxdWVzdCBsaW5lIHNvdXJjZSAlRE1BX1JFUV94eHgKKyAqCisgKiAlQ0NSKGRtYV9jaCkgaGFzIHRvIHNwZWNpZnkgdHJhbnNmZXIgcGFyYW1ldGVycywgdGhlIG5leHQgc2V0dGluZ3MgaXMgdHlwaWNhbAorICogZm9yIGxpbmVhciBvciBzaW1wbGUgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXJzIGlmICVETUFfTU9ERV9SRUFEIGlzIHNwZWNpZmllZAorICoKKyAqICVDQ1JfRE1PRF9MSU5FQVIgfCAlQ0NSX0RTSVpfMzIgfCAlQ0NSX1NNT0RfRklGTyB8ICVDQ1JfU1NJWl94CisgKgorICogVGhlIHR5cGljYWwgc2V0dXAgZm9yICVETUFfTU9ERV9XUklURSBpcyBzcGVjaWZpZWQgYnkgbmV4dCBvcHRpb25zIGNvbWJpbmF0aW9uCisgKgorICogJUNDUl9TTU9EX0xJTkVBUiB8ICVDQ1JfU1NJWl8zMiB8ICVDQ1JfRE1PRF9GSUZPIHwgJUNDUl9EU0laX3gKKyAqCisgKiBCZSBjYXJlZnVsbCB0aGVyZSBhbmQgZG8gbm90IG1pc3Rha2VubHkgbWl4IHNvdXJjZSBhbmQgdGFyZ2V0IGRldmljZQorICogcG9ydCBzaXplcyBjb25zdGFudHMsIHRoZXkgYXJlIHJlYWxseSBkaWZmZXJlbnQ6CisgKiAlQ0NSX1NTSVpfOCwgJUNDUl9TU0laXzE2LCAlQ0NSX1NTSVpfMzIsCisgKiAlQ0NSX0RTSVpfOCwgJUNDUl9EU0laXzE2LCAlQ0NSX0RTSVpfMzIKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGlmIGluY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCAtJUVJTlZBTC4KKyAqIFplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCisgKi8KK2ludAoraW14X2RtYV9zZXR1cF9zZyhpbXhfZG1hY2hfdCBkbWFfY2gsCisJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCwgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsCisJCSB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGRtYW1vZGVfdCBkbWFtb2RlKQoreworCWludCByZXM7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKworCWlteGRtYS0+c2cgPSBOVUxMOworCWlteGRtYS0+c2djb3VudCA9IDA7CisJaW14ZG1hLT5kbWFfbW9kZSA9IGRtYW1vZGU7CisJaW14ZG1hLT5yZXNieXRlcyA9IGRtYV9sZW5ndGg7CisKKwlpZiAoIXNnIHx8ICFzZ2NvdW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2cgZXB0eSBzZyBsaXN0XG4iLAorCQkgICAgICAgZG1hX2NoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzZy0+bGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2cgemVybyBsZW5ndGhcbiIsCisJCSAgICAgICBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGRtYW1vZGUgJiBETUFfTU9ERV9NQVNLKSA9PSBETUFfTU9ERV9SRUFEKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogbXhfZG1hX3NldHVwX3NnMmRldiBzZz0lcCBzZ2NvdW50PSVkIHRvdGFsIGxlbmd0aD0lZCBkZXZfYWRkcj0weCUwOHggZm9yIHJlYWRcbiIsCisJCQlkbWFfY2gsIHNnLCBzZ2NvdW50LCBkbWFfbGVuZ3RoLCBkZXZfYWRkcik7CisJCVNBUihkbWFfY2gpID0gZGV2X2FkZHI7CisJfSBlbHNlIGlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1dSSVRFKSB7CisJCXByX2RlYnVnKCJpbXhkbWElZDogbXhfZG1hX3NldHVwX3NnMmRldiBzZz0lcCBzZ2NvdW50PSVkIHRvdGFsIGxlbmd0aD0lZCBkZXZfYWRkcj0weCUwOHggZm9yIHdyaXRlXG4iLAorCQkJZG1hX2NoLCBzZywgc2djb3VudCwgZG1hX2xlbmd0aCwgZGV2X2FkZHIpOworCQlEQVIoZG1hX2NoKSA9IGRldl9hZGRyOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2cgYmFkIGRtYW1vZGVcbiIsCisJCSAgICAgICBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSBpbXhfZG1hX3NldHVwX3NnX2Jhc2UoZG1hX2NoLCBzZywgc2djb3VudCk7CisJaWYgKHJlcyA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IG5vIHNnIGNodW5rIHJlYWR5XG4iLCBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbXhfZG1hX3NldHVwX2hhbmRsZXJzIC0gc2V0dXAgaS5NWCBETUEgY2hhbm5lbCBlbmQgYW5kIGVycm9yIG5vdGlmaWNhdGlvbiBoYW5kbGVycworICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBpcnFfaGFuZGxlcjogdGhlIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgdHJhbnNmZXIKKyAqCQllbmRzIHN1Y2Nlc3NmdWxseQorICogQGVycl9oYW5kbGVyOiB0aGUgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gY2FsbGVkIGlmIHRoZSBwcmVtYXR1cmUKKyAqCQllbmQgY2F1c2VkIGJ5IGVycm9yIG9jY3VycworICogQGRhdGE6IHVzZXIgc3BlY2lmaWVkIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlcnMKKyAqLworaW50CitpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGlteF9kbWFjaF90IGRtYV9jaCwKKwkJICAgICAgIHZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgICAgIHZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbZG1hX2NoXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFpbXhkbWEtPm5hbWUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vdCBhbGxvY2F0ZWQgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZG1hX2NoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCURJU1IgPSAoMSA8PCBkbWFfY2gpOworCWlteGRtYS0+aXJxX2hhbmRsZXIgPSBpcnFfaGFuZGxlcjsKKwlpbXhkbWEtPmVycl9oYW5kbGVyID0gZXJyX2hhbmRsZXI7CisJaW14ZG1hLT5kYXRhID0gZGF0YTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW14X2RtYV9lbmFibGUgLSBmdW5jdGlvbiB0byBzdGFydCBpLk1YIERNQSBjaGFubmVsIG9wZXJhdGlvbgorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqCisgKiBUaGUgY2hhbm5lbCBoYXMgdG8gYmUgYWxsb2NhdGVkIGJ5IGRyaXZlciB0aHJvdWdoIGlteF9kbWFfcmVxdWVzdCgpCisgKiBvciBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbygpIGZ1bmN0aW9uLgorICogVGhlIHRyYW5zZmVyIHBhcmFtZXRlcnMgaGFzIHRvIGJlIHNldCB0byB0aGUgY2hhbm5lbCByZWdpc3RlcnMgdGhyb3VnaAorICogY2FsbCBvZiB0aGUgaW14X2RtYV9zZXR1cF9zaW5nbGUoKSBvciBpbXhfZG1hX3NldHVwX3NnKCkgZnVuY3Rpb24KKyAqIGFuZCByZWdpc3RlcnMgJUJMUihkbWFfY2gpLCAlUlNTUihkbWFfY2gpIGFuZCAlQ0NSKGRtYV9jaCkgaGFzIHRvCisgKiBiZSBzZXQgcHJpb3IgdGhpcyBmdW5jdGlvbiBjYWxsIGJ5IHRoZSBjaGFubmVsIHVzZXIuCisgKi8KK3ZvaWQgaW14X2RtYV9lbmFibGUoaW14X2RtYWNoX3QgZG1hX2NoKQoreworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJpbXhkbWElZDogaW14X2RtYV9lbmFibGVcbiIsIGRtYV9jaCk7CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2FsbGVkIGZvciAgbm90IGFsbG9jYXRlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkbWFfY2gpOworCQlyZXR1cm47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCURJU1IgPSAoMSA8PCBkbWFfY2gpOworCURJTVIgJj0gfigxIDw8IGRtYV9jaCk7CisJQ0NSKGRtYV9jaCkgfD0gQ0NSX0NFTjsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICogaW14X2RtYV9kaXNhYmxlIC0gc3RvcCwgZmluaXNoIGkuTVggRE1BIGNoYW5uZWwgb3BlcmF0aW4KKyAqIEBkbWFfY2g6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKi8KK3ZvaWQgaW14X2RtYV9kaXNhYmxlKGlteF9kbWFjaF90IGRtYV9jaCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lKSB7CisJcHJfZGVidWcoImlteGRtYSVkOiBpbXhfZG1hX2Rpc2FibGVcbiIsIGRtYV9jaCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRElNUiB8PSAoMSA8PCBkbWFfY2gpOworCUNDUihkbWFfY2gpICY9IH5DQ1JfQ0VOOworCURJU1IgPSAoMSA8PCBkbWFfY2gpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoqCisgKiBpbXhfZG1hX3JlcXVlc3QgLSByZXF1ZXN0L2FsbG9jYXRlIHNwZWNpZmllZCBjaGFubmVsIG51bWJlcgorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBuYW1lOiB0aGUgZHJpdmVyL2NhbGxlciBvd24gbm9uLSVOVUxMIGlkZW50aWZpY2F0aW9uCisgKi8KK2ludCBpbXhfZG1hX3JlcXVlc3QoaW14X2RtYWNoX3QgZG1hX2NoLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRtYV9jaCA+PSBJTVhfRE1BX0NIQU5ORUxTKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjYWxsZWQgZm9yICBub24tZXhpc3RlZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkbWFfY2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKGlteGRtYS0+bmFtZSkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlteGRtYS0+bmFtZSA9IG5hbWU7CisJaW14ZG1hLT5pcnFfaGFuZGxlciA9IE5VTEw7CisJaW14ZG1hLT5lcnJfaGFuZGxlciA9IE5VTEw7CisJaW14ZG1hLT5kYXRhID0gTlVMTDsKKwlpbXhkbWEtPnNnID0gTlVMTDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW14X2RtYV9mcmVlIC0gcmVsZWFzZSBwcmV2aW91c2x5IGFjcXVpcmVkIGNoYW5uZWwKKyAqIEBkbWFfY2g6IGkuTVggRE1BIGNoYW5uZWwgbnVtYmVyCisgKi8KK3ZvaWQgaW14X2RtYV9mcmVlKGlteF9kbWFjaF90IGRtYV9jaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CisKKwlpZiAoIWlteGRtYS0+bmFtZSkgewogCQlwcmludGsoS0VSTl9DUklUCiAJCSAgICAgICAiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXywgZG1hX2NoKTsKQEAgLTkyLDI3ICszOTgsODQgQEAKIAl9CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JRElNUiAmPSB+KDEgPDwgZG1hX2NoKTsKLQlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlESU1SIHw9ICgxIDw8IGRtYV9jaCk7CisJQ0NSKGRtYV9jaCkgJj0gfkNDUl9DRU47CisJaW14ZG1hLT5uYW1lID0gTlVMTDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdAotZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisvKioKKyAqIGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvIC0gZmluZCBhbmQgcmVxdWVzdCBzb21lIG9mIGZyZWUgY2hhbm5lbHMgYmVzdCBzdWl0aW5nIHJlcXVlc3RlZCBwcmlvcml0eQorICogQGRtYV9jaDogaS5NWCBETUEgY2hhbm5lbCBudW1iZXIKKyAqIEBuYW1lOiB0aGUgZHJpdmVyL2NhbGxlciBvd24gbm9uLSVOVUxMIGlkZW50aWZpY2F0aW9uCisgKiBAcHJpbzogb25lIG9mIHRoZSBoYXJkd2FyZSBkaXN0aW5ndWlzaGVkIHByaW9yaXR5IGxldmVsOgorICogICAgICAgICVETUFfUFJJT19ISUdILCAlRE1BX1BSSU9fTUVESVVNLCAlRE1BX1BSSU9fTE9XCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGZyZWUgY2hhbm5lbCBpbiB0aGUgc3BlY2lmaWVkIHByaW9yaXR5IGdyb3VwCisgKiBpZiB0aGUgcHJpb3JpdHkgY2Fubm90IGJlIGFjaGlldmVkIGl0IHRyaWVzIHRvIGxvb2sgZm9yIGZyZWUgY2hhbm5lbAorICogaW4gdGhlIGhpZ2hlciBhbmQgdGhlbiBldmVuIGxvd2VyIHByaW9yaXR5IGdyb3Vwcy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IElmIHRoZXJlIGlzIG5vIGZyZWUgY2hhbm5lbCB0byBhbGxvY2F0ZSwgLSVFTk9ERVYgaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICAgIFplcm8gdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3NmdWwgY2hhbm5lbCBhbGxvY2F0aW9uLgorICovCitpbnQKK2lteF9kbWFfcmVxdWVzdF9ieV9wcmlvKGlteF9kbWFjaF90ICogcGRtYV9jaCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWlteF9kbWFfcHJpbyBwcmlvKQoreworCWludCBpOworCWludCBiZXN0OworCisJc3dpdGNoIChwcmlvKSB7CisJY2FzZSAoRE1BX1BSSU9fSElHSCk6CisJCWJlc3QgPSA4OworCQlicmVhazsKKwljYXNlIChETUFfUFJJT19NRURJVU0pOgorCQliZXN0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSAoRE1BX1BSSU9fTE9XKToKKwlkZWZhdWx0OgorCQliZXN0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gYmVzdDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAoIWlteF9kbWFfcmVxdWVzdChpLCBuYW1lKSkgeworCQkJKnBkbWFfY2ggPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmb3IgKGkgPSBiZXN0IC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKCFpbXhfZG1hX3JlcXVlc3QoaSwgbmFtZSkpIHsKKwkJCSpwZG1hX2NoID0gaTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBETUEgY2hhbm5lbCBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGksIGRpc3IgPSBESVNSOwotCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICpjaGFubmVsOwogCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IERCVE9TUiB8IERSVE9TUiB8IERTRVNSIHwgREJPU1I7CiAKIAlESVNSID0gZGlzcjsKLQlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewotCQljaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgSU1YX0RNQV9DSEFOTkVMUzsgaSsrKSB7CisJCWNoYW5uZWwgPSAmaW14X2RtYV9jaGFubmVsc1tpXTsKIAotCQlpZiAoIChlcnJfbWFzayAmIDE8PGkpICYmIGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+ZXJyX2hhbmRsZXIpIHsKKwkJaWYgKChlcnJfbWFzayAmIDEgPDwgaSkgJiYgY2hhbm5lbC0+bmFtZQorCQkgICAgJiYgY2hhbm5lbC0+ZXJyX2hhbmRsZXIpIHsKIAkJCWNoYW5uZWwtPmVycl9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEsIHJlZ3MpOwogCQkJY29udGludWU7CiAJCX0KIAorCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKKwogCQlpZiAoREJUT1NSICYgKDEgPDwgaSkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiQnVyc3QgdGltZW91dCBvbiBjaGFubmVsICVkICglcylcbiIsCkBAIC0xNDEsMTcgKzUwNCwyNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlycXJldHVybl90Ci1kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaSwgZGlzciA9IERJU1I7CiAKKwlwcl9kZWJ1ZygiaW14ZG1hOiBkbWFfaXJxX2hhbmRsZXIgY2FsbGVkLCBkaXNyPTB4JTA4eFxuIiwKKwkJICAgICBkaXNyKTsKKwogCURJU1IgPSBkaXNyOwotCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlpZiAoZGlzciAmICgxIDw8IGkpKSB7Ci0JCQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSAmZG1hX2NoYW5uZWxzW2ldOwotCQkJaWYgKGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+aXJxX2hhbmRsZXIpIHsKLQkJCQljaGFubmVsLT5pcnFfaGFuZGxlcihpLCBjaGFubmVsLT5kYXRhLCByZWdzKTsKKwkJCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSAmaW14X2RtYV9jaGFubmVsc1tpXTsKKwkJCWlmIChjaGFubmVsLT5uYW1lKSB7CisJCQkJaWYgKGlteF9kbWFfc2dfbmV4dChpLCBDTlRSKGkpKSkgeworCQkJCQlDQ1IoaSkgJj0gfkNDUl9DRU47CisJCQkJCW1iKCk7CisJCQkJCUNDUihpKSB8PSBDQ1JfQ0VOOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChjaGFubmVsLT5pcnFfaGFuZGxlcikKKwkJCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksCisJCQkJCQkJY2hhbm5lbC0+ZGF0YSwgcmVncyk7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgpAQCAtMTY1LDEwICs1MzgsMTAgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1pbXhfZG1hX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlteF9kbWFfaW5pdCh2b2lkKQogewogCWludCByZXQ7CisJaW50IGk7CiAKIAkvKiByZXNldCBETUEgbW9kdWxlICovCiAJRENSID0gRENSX0RSU1Q7CkBAIC0xODksMTUgKzU2MiwyNyBAQAogCURDUiA9IERDUl9ERU47CiAKIAkvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLwotCURJU1IgPSAweDNmZjsKKwlESVNSID0gKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxOwogCiAJLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlESU1SID0gMDsKKwlESU1SID0gKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxOworCisJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKKwkJaW14X2RtYV9jaGFubmVsc1tpXS5kbWFfbnVtID0gaTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiBhcmNoX2luaXRjYWxsKGlteF9kbWFfaW5pdCk7CiAKLUVYUE9SVF9TWU1CT0woaW14X3JlcXVlc3RfZG1hKTsKLUVYUE9SVF9TWU1CT0woaW14X2ZyZWVfZG1hKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9zaW5nbGUpOworRVhQT1JUX1NZTUJPTChpbXhfZG1hX3NldHVwX3NnKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9zZXR1cF9oYW5kbGVycyk7CitFWFBPUlRfU1lNQk9MKGlteF9kbWFfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9kaXNhYmxlKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9mcmVlKTsKK0VYUE9SVF9TWU1CT0woaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8pOworRVhQT1JUX1NZTUJPTChpbXhfZG1hX2NoYW5uZWxzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwppbmRleCAzNzYxM2FkNi4uMTJlYTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KIAogdm9pZCBpbXhfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCiB7CkBAIC0xNzUsNjIgKzE3NiwyNCBAQAogCX0sCiB9OwogCitzdGF0aWMgdTY0IGlteG1tbWNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X21tY19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImlteC1tbWMiLAogCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmaW14bW1tY19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF9tbWNfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBpbXhfbW1jX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwMDIwNjAwMCwKLQkJLmVuZAk9IDB4MDAyMDYwRkYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9SWCksCi0JCS5lbmQJPSAoVUFSVDFfTUlOVF9SWCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9UWCksCi0JCS5lbmQJPSAoVUFSVDFfTUlOVF9UWCksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpbXgtdWFydCIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0MV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGlteF91YXJ0MV9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF91YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IDB4MDAyMDcwMDAsCi0JCS5lbmQJPSAweDAwMjA3MEZGLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfUlgpLAotCQkuZW5kCT0gKFVBUlQyX01JTlRfUlgpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfVFgpLAotCQkuZW5kCT0gKFVBUlQyX01JTlRfVFgpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VhcnQyX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaW14LXVhcnQiLAotCS5pZAkJPSAxLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhfdWFydDJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBpbXhfdWFydDJfcmVzb3VyY2VzLAotfTsKK3ZvaWQgX19pbml0IGlteF9zZXRfbW1jX2luZm8oc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhICppbmZvKQoreworCWlteF9tbWNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKK30KK0VYUE9SVF9TWU1CT0woaW14X3NldF9tbWNfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvIGlteF9mYl9pbmZvOwogCkBAIC0yNzAsOCArMjMzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaW14X21tY19kZXZpY2UsCiAJJmlteGZiX2RldmljZSwKLQkmaW14X3VhcnQxX2RldmljZSwKLQkmaW14X3VhcnQyX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9pcnEuYwppbmRleCBlZWI4YTZkLi5hNWRlNWYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pcnEuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiBpbXhfZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJREVCVUdfSVJRKCIlczogaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7Ci0JSVNSKElSUV9UT19SRUcoaXJxKSkgfD0gMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMik7CisJSVNSKElSUV9UT19SRUcoaXJxKSkgPSAxIDw8ICgoaXJxIC0gSVJRX0dQSU9BKDApKSAlIDMyKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L214MWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKaW5kZXggOGFiMWIwNC4uZGE4OTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbXgxYWRzLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC00NywxNiArNDksMTA2IEBACiAJLnJlc291cmNlCT0gY3M4OXgwX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHgwMDIwNjAwMCwKKwkJLmVuZAk9IDB4MDAyMDYwRkYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9SWCksCisJCS5lbmQJPSAoVUFSVDFfTUlOVF9SWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSAoVUFSVDFfTUlOVF9UWCksCisJCS5lbmQJPSAoVUFSVDFfTUlOVF9UWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXgtdWFydCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0MV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlteF91YXJ0MV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdWFydF9wZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF91YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MDAyMDcwMDAsCisJCS5lbmQJPSAweDAwMjA3MEZGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfUlgpLAorCQkuZW5kCT0gKFVBUlQyX01JTlRfUlgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gKFVBUlQyX01JTlRfVFgpLAorCQkuZW5kCT0gKFVBUlQyX01JTlRfVFgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VhcnQyX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW14LXVhcnQiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhfdWFydDJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbXhfdWFydDJfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnVhcnRfcGRhdGEsCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZjczg5eDBfZGV2aWNlLAorCSZpbXhfdWFydDFfZGV2aWNlLAorCSZpbXhfdWFydDJfZGV2aWNlLAogfTsKIAorI2lmZGVmIENPTkZJR19NTUNfSU1YCitzdGF0aWMgaW50IG14MWFkc19tbWNfY2FyZF9wcmVzZW50KHZvaWQpCit7CisJLyogTU1DL1NEIENhcmQgRGV0ZWN0IGlzIFBCIDIwIG9uIE1YMUFEUyBWMS4wLjcgKi8KKwlyZXR1cm4gKFNTUigxKSAmICgxIDw8IDIwKSA/IDAgOiAxKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBteDFhZHNfbW1jX2luZm8gPSB7CisgICAgICAgLmNhcmRfcHJlc2VudCA9IG14MWFkc19tbWNfY2FyZF9wcmVzZW50LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQKIG14MWFkc19pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0xFRFMKIAlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDIpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX01NQ19JTVgKKwkvKiBTRC9NTUMgY2FyZCBkZXRlY3QgKi8KKwlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCBHUElPX0dJVVMgfCBHUElPX0lOIHwgMjApOworCWlteF9zZXRfbW1jX2luZm8oJm14MWFkc19tbWNfaW5mbyk7CisjZW5kaWYKKworCWlteF9ncGlvX21vZGUoUEM5X1BGX1VBUlQxX0NUUyk7CisJaW14X2dwaW9fbW9kZShQQzEwX1BGX1VBUlQxX1JUUyk7CisJaW14X2dwaW9fbW9kZShQQzExX1BGX1VBUlQxX1RYRCk7CisJaW14X2dwaW9fbW9kZShQQzEyX1BGX1VBUlQxX1JYRCk7CisKKwlpbXhfZ3Bpb19tb2RlKFBCMjhfUEZfVUFSVDJfQ1RTKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMjlfUEZfVUFSVDJfUlRTKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMzBfUEZfVUFSVDJfVFhEKTsKKwlpbXhfZ3Bpb19tb2RlKFBCMzFfUEZfVUFSVDJfUlhEKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCkBAIC02OSw3ICsxNjEsNyBAQAogTUFDSElORV9TVEFSVChNWDFBRFMsICJNb3Rvcm9sYSBNWDFBRFMiKQogCS8qIE1haW50YWluZXI6IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggKi8KIAkucGh5c19pbwk9IDB4MDAyMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGUwMjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmlvX3BnX29mZnN0CT0gKCgweGUwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHgwODAwMDEwMCwKIAkubWFwX2lvCQk9IG14MWFkc19tYXBfaW8sCiAJLmluaXRfaXJxCT0gaW14X2luaXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggYTA3MjRmMi4uOWY1NWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0yMzIsOCArMjMyLDYgQEAKIAlmb3IgKGkgPSBJUlFfUElDX1NUQVJUOyBpIDw9IElSUV9QSUNfRU5EOyBpKyspIHsKIAkJaWYgKGkgPT0gMTEpCiAJCQlpID0gMjI7Ci0JCWlmIChpID09IElSUV9DUF9DUFBMRElOVCkKLQkJCWkrKzsKIAkJaWYgKGkgPT0gMjkpCiAJCQlicmVhazsKIAkJc2V0X2lycV9jaGlwKGksICZwaWNfY2hpcCk7CkBAIC0yNTksOCArMjU3LDcgQEAKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQogCi0Jc2V0X2lycV9oYW5kbGVyKElSUV9DUF9DUFBMRElOVCwgc2ljX2hhbmRsZV9pcnEpOwotCXBpY191bm1hc2tfaXJxKElSUV9DUF9DUFBMRElOVCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0NQX0NQUExESU5ULCBzaWNfaGFuZGxlX2lycSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2NvcmUuYwppbmRleCAwOTJlZTEyLi5hZmZkMWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9jb3JlLmMKQEAgLTE3OCw4ICsxNzgsMTIgQEAKIAogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludHJfcmVnID0gSVhQMjNYWF9JTlRSX0VOMSArIChpcnEgLyAzMik7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW50cl9yZWc7CiAKKwlpZiAoaXJxID49IDU2KQorCQlpcnEgKz0gODsKKworCWludHJfcmVnID0gSVhQMjNYWF9JTlRSX0VOMSArIChpcnEgLyAzMik7CiAJKmludHJfcmVnICY9IH4oMSA8PCAoaXJxICUgMzIpKTsKIH0KIApAQCAtMTk5LDE3ICsyMDMsMjUgQEAKICAqLwogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfbGV2ZWxfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW50cl9yZWcgPSBJWFAyM1hYX0lOVFJfRU4xICsgKGlycSAvIDMyKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbnRyX3JlZzsKIAogCWl4cDIzeHhfaXJxX2FjayhpcnEpOwogCisJaWYgKGlycSA+PSA1NikKKwkJaXJxICs9IDg7CisKKwlpbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOwogCSppbnRyX3JlZyB8PSAoMSA8PCAoaXJxICUgMzIpKTsKIH0KIAogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfZWRnZV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludHJfcmVnOwogCisJaWYgKGlycSA+PSA1NikKKwkJaXJxICs9IDg7CisKKwlpbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOwogCSppbnRyX3JlZyB8PSAoMSA8PCAoaXJxICUgMzIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2VzcHJlc3NvLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYwppbmRleCAyMzI3Yzk3Li5iZjY4OGMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYwpAQCAtNDQsNiArNDQsMTUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KIAorc3RhdGljIGludCBfX2luaXQgZXNwcmVzc29fcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19lc3ByZXNzbygpKQorCQlpeHAyM3h4X3BjaV9zbGF2ZV9pbml0KCk7CisKKwlyZXR1cm4gMDsKK307CitzdWJzeXNfaW5pdGNhbGwoZXNwcmVzc29fcGNpX2luaXQpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgZXNwcmVzc29faW5pdCh2b2lkKQogewogCXBoeXNtYXBfY29uZmlndXJlKDB4OTAwMDAwMDAsIDB4MDIwMDAwMDAsIDIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jCmluZGV4IDUzMzBhZDcuLmFjNzJmOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcGNpLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBpeHAyM3h4X3BjaV9wcmVpbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaXhwMjN4eF9wY2lfY29tbW9uX2luaXQodm9pZCkKIHsKICNpZmRlZiBfX0FSTUVCX18KIAkqSVhQMjNYWF9QQ0lfQ09OVFJPTCB8PSAweDIwMDAwOwkvKiBzZXQgSS9PIHN3YXBwaW5nICovCkBAIC0yMTksNyArMjE5LDE4IEBACiAJCSpJWFAyM1hYX1BDSV9DUFBfQUREUl9CSVRTICY9IH4oMSA8PCAxKTsKIAl9IGVsc2UgewogCQkqSVhQMjNYWF9QQ0lfQ1BQX0FERFJfQklUUyB8PSAoMSA8PCAxKTsKKworCQkvKgorCQkgKiBFbmFibGUgY29oZXJlbmN5IG9uIEEyIHNpbGljb24uCisJCSAqLworCQlpZiAoYXJjaF9pc19jb2hlcmVudCgpKQorCQkJKklYUDIzWFhfQ1BQMlhTSV9DVVJSX1hGRVJfUkVHMyAmPSB+SVhQMjNYWF9DUFAyWFNJX0NPSF9PRkY7CiAJfQorfQorCit2b2lkIF9faW5pdCBpeHAyM3h4X3BjaV9wcmVpbml0KHZvaWQpCit7CisJaXhwMjN4eF9wY2lfY29tbW9uX2luaXQoKTsKIAogCWhvb2tfZmF1bHRfY29kZSgxNis2LCBpeHAyM3h4X3BjaV9hYm9ydF9oYW5kbGVyLCBTSUdCVVMsCiAJCQkiUENJIGNvbmZpZyBjeWNsZSB0byBub24tZXhpc3RlbnQgZGV2aWNlIik7CkBAIC0yNzMsMyArMjg0LDggQEAKIAogCXJldHVybiAxOwogfQorCit2b2lkIGl4cDIzeHhfcGNpX3NsYXZlX2luaXQodm9pZCkKK3sKKwlpeHAyM3h4X3BjaV9jb21tb25faW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKaW5kZXggNWJmNTBhMi4uM2IyM2Y0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiBjb25maWcgTUFDSF9OU0xVMgogCWJvb2wKIAlwcm9tcHQgIkxpbmtzeXMgTlNMVTIiCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IExpbmtzeXMncwogCSAgTlNMVTIgTkFTIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKQEAgLTE4LDYgKzE5LDcgQEAKIAogY29uZmlnIEFSQ0hfQVZJTEEKIAlib29sICJBdmlsYSIKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEdhdGV3b3JrcwogCSAgQXZpbGEgTmV0d29yayBQbGF0Zm9ybS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKQEAgLTI1LDYgKzI3LDcgQEAKIAogY29uZmlnIEFSQ0hfQURJX0NPWU9URQogCWJvb2wgIkNveW90ZSIKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEFESSAKIAkgIEVuZ2luZWVyaW5nIENveW90ZSBHYXRld2F5IFJlZmVyZW5jZSBQbGF0Zm9ybS4gRm9yIG1vcmUKQEAgLTMyLDYgKzM1LDcgQEAKIAogY29uZmlnIEFSQ0hfSVhEUDQyNQogCWJvb2wgIklYRFA0MjUiCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IEludGVsJ3MgCiAJICBJWERQNDI1IERldmVsb3BtZW50IFBsYXRmb3JtIChBbHNvIGtub3duIGFzIFJpY2hmaWVsZCkuICAKQEAgLTM5LDYgKzQzLDcgQEAKIAogY29uZmlnIE1BQ0hfSVhEUEc0MjUKIAlib29sICJJWERQRzQyNSIKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgSW50ZWwncwogCSAgSVhEUEc0MjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKEFsc28ga25vd24gYXMgTW9udGFqYWRlKS4KQEAgLTQ2LDYgKzUxLDcgQEAKIAogY29uZmlnIE1BQ0hfSVhEUDQ2NQogCWJvb2wgIklYRFA0NjUiCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IEludGVsJ3MKIAkgIElYRFA0NjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKEFsc28ga25vd24gYXMgQk1QKS4KQEAgLTcyLDYgKzc4LDcgQEAKIGNvbmZpZyBNQUNIX05BUzEwMEQKIAlib29sCiAJcHJvbXB0ICJOQVMxMDBEIgorCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBJb21lZ2EncwogCSAgTkFTIDEwMGQgZGV2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHBsYXRmb3JtLApAQCAtOTYsNiArMTAzLDcgQEAKIGNvbmZpZyBNQUNIX0dUV1g1NzE1CiAJYm9vbCAiR2VtdGVrIFdYNTcxNSAoTGlua3N5cyBXUlY1NEcpIgogCWRlcGVuZHMgb24gQVJDSF9JWFA0WFgKKwlzZWxlY3QgUENJCiAJaGVscAogCQlUaGlzIGJvYXJkIGlzIGN1cnJlbnRseSBpbnNpZGUgdGhlIExpbmtzeXMgV1JWNTRHIEdhdGV3YXlzLgogCkBAIC0xMTAsMTEgKzExOCwxNiBAQAogCQkiSGlnaCBTcGVlZCIgVUFSVCBpcyBuL2MgKGFzIGZhciBhcyBJIGNhbiB0ZWxsKQogCQkyMCBQaW4gQVJNL1hzY2FsZSBKVEFHIGludGVyZmFjZSBvbiBKMgogCi0KIGNvbW1lbnQgIklYUDR4eCBPcHRpb25zIgogCitjb25maWcgRE1BQk9VTkNFCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUENJCisKIGNvbmZpZyBJWFA0WFhfSU5ESVJFQ1RfUENJCiAJYm9vbCAiVXNlIGluZGlyZWN0IFBDSSBtZW1vcnkgYWNjZXNzIgorCWRlcGVuZHMgb24gUENJCiAJaGVscAogICAgICAgICAgIElYUDR4eCBwcm92aWRlcyB0d28gbWV0aG9kcyBvZiBhY2Nlc3NpbmcgUENJIG1lbW9yeSBzcGFjZToKIApAQCAtMTI4LDcgKzE0MSw3IEBACiAgICAgICAgICAgMikgSWYgPiA2NE1CIG9mIG1lbW9yeSBzcGFjZSBpcyByZXF1aXJlZCwgdGhlIElYUDR4eCBjYW4gYmUgCiAJICAgICBjb25maWd1cmVkIHRvIHVzZSBpbmRpcmVjdCByZWdpc3RlcnMgdG8gYWNjZXNzIFBDSSBUaGlzIGFsbG93cyAKIAkgICAgIGZvciB1cCB0byAxMjhNQiAoMHg0ODAwMDAwMCB0byAweDRmZmZmZmZmKSBvZiBtZW1vcnkgb24gdGhlIGJ1cy4gCi0JICAgICBUaGUgZGlzYWR2YW50YWRnZSBvZiB0aGlzIGlzIHRoYXQgZXZlcnkgUENJIGFjY2VzcyByZXF1aXJlcyAKKwkgICAgIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IGV2ZXJ5IFBDSSBhY2Nlc3MgcmVxdWlyZXMgCiAJICAgICB0aHJlZSBsb2NhbCByZWdpc3RlciBhY2Nlc3NlcyBwbHVzIGEgc3BpbmxvY2ssIGJ1dCBpbiBzb21lIAogCSAgICAgY2FzZXMgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBhY2NlcHRhYmxlLiBJbiBhZGRpdGlvbiwgeW91IGNhbm5vdCAKIAkgICAgIG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzIGNhc2UgZHVlIHRvIHRoZSBpbmRpcmVjdCBuYXR1cmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKaW5kZXggMDQ3MTA0NC4uNWE0YWFhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTIsOCArMiw5IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1vYmoteQkrPSBjb21tb24ubyBjb21tb24tcGNpLm8gCitvYmoteQkrPSBjb21tb24ubwogCitvYmotJChDT05GSUdfUENJKQkJKz0gY29tbW9uLXBjaS5vCiBvYmotJChDT05GSUdfQVJDSF9JWERQNFhYKQkrPSBpeGRwNDI1LXBjaS5vIGl4ZHA0MjUtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfSVhEUEc0MjUpCSs9IGl4ZHBnNDI1LXBjaS5vIGNveW90ZS1zZXR1cC5vCiBvYmotJChDT05GSUdfQVJDSF9BRElfQ09ZT1RFKQkrPSBjb3lvdGUtcGNpLm8gY295b3RlLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggYTA4ODhlMS4uMDBiNzYxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTkxLDcgKzkxLDcgQEAKIC8qCiAgKiBJUlEgLT4gR1BJTyBtYXBwaW5nIHRhYmxlCiAgKi8KLXN0YXRpYyBjaGFyIGlycTJncGlvWzMyXSA9IHsKK3N0YXRpYyBzaWduZWQgY2hhciBpcnEyZ3Bpb1szMl0gPSB7CiAJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgIDAsICAxLAogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAktMSwgLTEsIC0xLCAgMiwgIDMsICA0LCAgNSwgIDYsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggODZhMGYwZC4uZjhkNzE2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtNjksMTIgKzY5LDYgQEAKIAkgIFN1cHBvcnQgZm9yIFZvaWNlYmx1ZSBHU00vVm9JUCBnYXRld2F5LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlCiAJICBzdWNoIGEgYm9hcmQuCiAKLWNvbmZpZyBNQUNIX05FVFNUQVIKLQlib29sICJOZXRTdGFyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNVhYCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgTmV0U3RhciBQQlguIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLgotCiBjb25maWcgTUFDSF9PTUFQX1BBTE1URQogCWJvb2wgIlBhbG0gVHVuZ3N0ZW4gRSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWApAQCAtODUsNiArNzksMjAgQEAKICAgICAgICAgICBpbmZvcm1hdGlvbnMuCiAgICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoIGEgUERBLCBzYXkgTk8gb3RoZXJ3aXNlLgogCitjb25maWcgTUFDSF9OT0tJQTc3MAorCWJvb2wgIk5va2lhIDc3MCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBOb2tpYSA3NzAgSW50ZXJuZXQgVGFibGV0LiBTYXkgWSBoZXJlIGlmIHlvdQorCSAgaGF2ZSBzdWNoIGEgZGV2aWNlLgorCitjb25maWcgTUFDSF9BTVNfREVMVEEKKwlib29sICJBbXN0cmFkIEUzIChEZWx0YSkiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1WFgKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgQW1zdHJhZCBFMyAoY29kZW5hbWUgRGVsdGEpIHZpZGVvcGhvbmUuIFNheSBZIGhlcmUKKwkgIGlmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UuCisKIGNvbmZpZyBNQUNIX09NQVBfR0VORVJJQwogCWJvb2wgIkdlbmVyaWMgT01BUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IGIwYjAwMTUuLjllYTcxOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtMyw3ICszLDEzIEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlvLm8gaWQubyBjbG9jay5vIGlycS5vIHRpbWUubyBtdXgubyBzZXJpYWwubyBkZXZpY2VzLm8KK29iai15IDo9IGlvLm8gaWQubyBjbG9jay5vIGlycS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubworCitvYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lLm8KKworIyBQb3dlciBNYW5hZ2VtZW50CitvYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubworCiBsZWQteSA6PSBsZWRzLm8KIAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CkBAIC0xNCw4ICsyMCw5IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQX09TSykJCSs9IGJvYXJkLW9zay5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0gzKQkJKz0gYm9hcmQtaDMubwogb2JqLSQoQ09ORklHX01BQ0hfVk9JQ0VCTFVFKQkJKz0gYm9hcmQtdm9pY2VibHVlLm8KLW9iai0kKENPTkZJR19NQUNIX05FVFNUQVIpCQkrPSBib2FyZC1uZXRzdGFyLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfUEFMTVRFKQkJKz0gYm9hcmQtcGFsbXRlLm8KK29iai0kKENPTkZJR19NQUNIX05PS0lBNzcwKQkJKz0gYm9hcmQtbm9raWE3NzAubworb2JqLSQoQ09ORklHX01BQ0hfQU1TX0RFTFRBKQkJKz0gYm9hcmQtYW1zLWRlbHRhLm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9PTUFQMTVYWCkseSkKICMgSW5ub3ZhdG9yLTE1MTAgRlBHQQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3OGYwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisgKgorICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKKyAqCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0cyBmb3IgdGhlIEFtc3RyYWQgRTMgKGNvZGVuYW1lIERlbHRhKSB2aWRlb3Bob25lCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQtYW1zLWRlbHRhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisKK3N0YXRpYyB1OCBhbXNfZGVsdGFfbGF0Y2gxX3JlZzsKK3N0YXRpYyB1MTYgYW1zX2RlbHRhX2xhdGNoMl9yZWc7CisKK3ZvaWQgYW1zX2RlbHRhX2xhdGNoMV93cml0ZSh1OCBtYXNrLCB1OCB2YWx1ZSkKK3sKKwlhbXNfZGVsdGFfbGF0Y2gxX3JlZyAmPSB+bWFzazsKKwlhbXNfZGVsdGFfbGF0Y2gxX3JlZyB8PSB2YWx1ZTsKKwkqKHZvbGF0aWxlIF9fdTggKikgQU1TX0RFTFRBX0xBVENIMV9WSVJUID0gYW1zX2RlbHRhX2xhdGNoMV9yZWc7Cit9CisKK3ZvaWQgYW1zX2RlbHRhX2xhdGNoMl93cml0ZSh1MTYgbWFzaywgdTE2IHZhbHVlKQoreworCWFtc19kZWx0YV9sYXRjaDJfcmVnICY9IH5tYXNrOworCWFtc19kZWx0YV9sYXRjaDJfcmVnIHw9IHZhbHVlOworCSoodm9sYXRpbGUgX191MTYgKikgQU1TX0RFTFRBX0xBVENIMl9WSVJUID0gYW1zX2RlbHRhX2xhdGNoMl9yZWc7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMV9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFtc19kZWx0YV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvLyBBTVNfREVMVEFfTEFUQ0gxCisJeworCQkudmlydHVhbAk9IEFNU19ERUxUQV9MQVRDSDFfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFNU19ERUxUQV9MQVRDSDFfUEhZUyksCisJCS5sZW5ndGgJCT0gMHgwMTAwMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwkvLyBBTVNfREVMVEFfTEFUQ0gyCisJeworCQkudmlydHVhbAk9IEFNU19ERUxUQV9MQVRDSDJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFNU19ERUxUQV9MQVRDSDJfUEhZUyksCisJCS5sZW5ndGgJCT0gMHgwMTAwMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwkvLyBBTVNfREVMVEFfTU9ERU0KKwl7CisJCS52aXJ0dWFsCT0gQU1TX0RFTFRBX01PREVNX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTVNfREVMVEFfTU9ERU1fUEhZUyksCisJCS5sZW5ndGgJCT0gMHgwMTAwMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGFtc19kZWx0YV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGFtc19kZWx0YV9jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZhbXNfZGVsdGFfdWFydF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfaW5pdCh2b2lkKQoreworCWlvdGFibGVfaW5pdChhbXNfZGVsdGFfaW9fZGVzYywgQVJSQVlfU0laRShhbXNfZGVsdGFfaW9fZGVzYykpOworCisJb21hcF9ib2FyZF9jb25maWcgPSBhbXNfZGVsdGFfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGFtc19kZWx0YV9jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCS8qIENsZWFyIGxhdGNoMiAoTkFORCwgTENELCBtb2RlbSBlbmFibGUpICovCisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZSh+MCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfbWFwX2lvKHZvaWQpCit7CisJb21hcDFfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKEFNU19ERUxUQSwgIkFtc3RyYWQgRTMgKERlbHRhKSIpCisJLyogTWFpbnRhaW5lcjogSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+ICovCisJLnBoeXNfaW8JPSAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCisJLm1hcF9pbwkJPSBhbXNfZGVsdGFfbWFwX2lvLAorCS5pbml0X2lycQk9IGFtc19kZWx0YV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gYW1zX2RlbHRhX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKKworRVhQT1JUX1NZTUJPTChhbXNfZGVsdGFfbGF0Y2gxX3dyaXRlKTsKK0VYUE9SVF9TWU1CT0woYW1zX2RlbHRhX2xhdGNoMl93cml0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IGExNzdlNzguLjMzZDAxYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC04OCw3ICs4OCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggODlmMGNjNy4uY2QzYTA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtMjQsNyArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM1LDEyICszNyw1NSBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAtYWxzYS5oPgogCiBleHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOwogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDJfcGFydGl0aW9uc1tdID0geworc3RhdGljIGludCBoMl9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0xFRlQpLAorCUtFWSgwLCAxLCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBLRVlfMyksCisJS0VZKDAsIDMsIEtFWV9GMTApLAorCUtFWSgwLCA0LCBLRVlfRjUpLAorCUtFWSgwLCA1LCBLRVlfOSksCisJS0VZKDEsIDAsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMSwgS0VZX1VQKSwKKwlLRVkoMSwgMiwgS0VZXzIpLAorCUtFWSgxLCAzLCBLRVlfRjkpLAorCUtFWSgxLCA0LCBLRVlfRjcpLAorCUtFWSgxLCA1LCBLRVlfMCksCisJS0VZKDIsIDAsIEtFWV9FTlRFUiksCisJS0VZKDIsIDEsIEtFWV82KSwKKwlLRVkoMiwgMiwgS0VZXzEpLAorCUtFWSgyLCAzLCBLRVlfRjIpLAorCUtFWSgyLCA0LCBLRVlfRjYpLAorCUtFWSgyLCA1LCBLRVlfSE9NRSksCisJS0VZKDMsIDAsIEtFWV84KSwKKwlLRVkoMywgMSwgS0VZXzUpLAorCUtFWSgzLCAyLCBLRVlfRjEyKSwKKwlLRVkoMywgMywgS0VZX0YzKSwKKwlLRVkoMywgNCwgS0VZX0Y4KSwKKwlLRVkoMywgNSwgS0VZX0VORCksCisJS0VZKDQsIDAsIEtFWV83KSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfRjExKSwKKwlLRVkoNCwgMywgS0VZX0YxKSwKKwlLRVkoNCwgNCwgS0VZX0Y0KSwKKwlLRVkoNCwgNSwgS0VZX0VTQyksCisJS0VZKDUsIDAsIEtFWV9GMTMpLAorCUtFWSg1LCAxLCBLRVlfRjE0KSwKKwlLRVkoNSwgMiwgS0VZX0YxNSksCisJS0VZKDUsIDMsIEtFWV9GMTYpLAorCUtFWSg1LCA0LCBLRVlfU0xFRVApLAorCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoMl9ub3JfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CiAJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLApAQCAtNzEsMjYgKzExNiwyNiBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoMl9mbGFzaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGgyX25vcl9kYXRhID0gewogCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAogCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBoMl9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDJfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IGgyX25vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDJfbm9yX3BhcnRpdGlvbnMpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoMl9mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDJfbm9yX3Jlc291cmNlID0gewogCS8qIFRoaXMgaXMgb24gQ1MzLCB3aGVyZXZlciBpdCdzIG1hcHBlZCAqLwogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2ZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX25vcl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmgyX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmgyX25vcl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZoMl9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmaDJfbm9yX3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoMl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CkBAIC0xMTMsOSArMTU4LDExOSBAQAogCS5yZXNvdXJjZQk9IGgyX3NtYzkxeF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGgyX2twX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gSU5UX0tFWUJPQVJELAorCQkuZW5kCT0gSU5UX0tFWUJPQVJELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgaDJfa3BfZGF0YSA9IHsKKwkucm93cwk9IDgsCisJLmNvbHMJPSA4LAorCS5rZXltYXAgPSBoMl9rZXltYXAsCisJLnJlcAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoMl9rcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAta2V5cGFkIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmgyX2twX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaDJfa3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoMl9rcF9yZXNvdXJjZXMsCit9OworCisjZGVmaW5lIEgyX0lSREFfRklSU0VMX0dQSU9fUElOCTE3CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0lSX01PRFVMRSkKK3N0YXRpYyBpbnQgaDJfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgJiBJUl9TSVJNT0RFKQorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sIDApOworCWVsc2UgICAgLyogTUlSL0ZJUiAqLworCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sIDEpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBvbWFwX2lyZGFfY29uZmlnIGgyX2lyZGFfZGF0YSA9IHsKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX01JUk1PREUgfCBJUl9GSVJNT0RFLAorCS5yeF9jaGFubmVsCQk9IE9NQVBfRE1BX1VBUlQzX1JYLAorCS50eF9jaGFubmVsCQk9IE9NQVBfRE1BX1VBUlQzX1RYLAorCS5kZXN0X3N0YXJ0CQk9IFVBUlQzX1RIUiwKKwkuc3JjX3N0YXJ0CQk9IFVBUlQzX1JIUiwKKwkudHhfdHJpZ2dlcgkJPSAwLAorCS5yeF90cmlnZ2VyCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGgyX2lyZGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRfVUFSVDMsCisJCS5lbmQJPSBJTlRfVUFSVDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDJfaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBpcmRhIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaDJfaXJkYV9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGgyX2lyZGFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoMl9pcmRhX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxjZF9oMiIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgbWNic3BfcmVncyA9IHsKKwkuc3BjcjIgPSBGUkVFIHwgRlJTVCB8IEdSU1QgfCBYUlNUIHwgWElOVE0oMyksCisJLnNwY3IxID0gUklOVE0oMykgfCBSUlNULAorCS5yY3IyICA9IFJQSEFTRSB8IFJGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKyAgICAgICAgICAgICAgICBSV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNikgfCBSREFURExZKDEpLAorCS5yY3IxICA9IFJGUkxFTjEoT01BUF9NQ0JTUF9XT1JEXzgpIHwgUldETEVOMShPTUFQX01DQlNQX1dPUkRfMTYpLAorCS54Y3IyICA9IFhQSEFTRSB8IFhGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKyAgICAgICAgICAgICAgICBYV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNikgfCBYREFURExZKDEpIHwgWEZJRywKKwkueGNyMSAgPSBYRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFhXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkuc3JncjEgPSBGV0lEKDE1KSwKKwkuc3JncjIgPSBHU1lOQyB8IENMS1NQIHwgRlNHTSB8IEZQRVIoMzEpLAorCisJLnBjcjAgID0gQ0xLWE0gfCBDTEtSTSB8IEZTWFAgfCBGU1JQIHwgQ0xLWFAgfCBDTEtSUCwKKwkvLy5wY3IwID0gQ0xLWFAgfCBDTEtSUCwgICAgICAgIC8qIG1jYnNwOiBzbGF2ZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Fsc2FfY29kZWNfY29uZmlnIGFsc2FfY29uZmlnID0geworCS5uYW1lICAgICAgICAgICAgICAgICAgID0gIkgyIFRTQzIxMDEiLAorCS5tY2JzcF9yZWdzX2Fsc2EgICAgICAgID0gJm1jYnNwX3JlZ3MsCisJLmNvZGVjX2NvbmZpZ3VyZV9kZXYgICAgPSBOVUxMLCAvLyB0c2MyMTAxX2NvbmZpZ3VyZSwKKwkuY29kZWNfc2V0X3NhbXBsZXJhdGUgICA9IE5VTEwsIC8vIHRzYzIxMDFfc2V0X3NhbXBsZXJhdGUsCisJLmNvZGVjX2Nsb2NrX3NldHVwICAgICAgPSBOVUxMLCAvLyB0c2MyMTAxX2Nsb2NrX3NldHVwLAorCS5jb2RlY19jbG9ja19vbiAgICAgICAgID0gTlVMTCwgLy8gdHNjMjEwMV9jbG9ja19vbiwKKwkuY29kZWNfY2xvY2tfb2ZmICAgICAgICA9IE5VTEwsIC8vIHRzYzIxMDFfY2xvY2tfb2ZmLAorCS5nZXRfZGVmYXVsdF9zYW1wbGVyYXRlID0gTlVMTCwgLy8gdHNjMjEwMV9nZXRfZGVmYXVsdF9zYW1wbGVyYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDJfbWNic3AxX2RldmljZSA9IHsKKwkubmFtZQk9ICJvbWFwX2Fsc2FfbWNic3AiLAorCS5pZAk9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYWxzYV9jb25maWcsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmaDJfZmxhc2hfZGV2aWNlLAorCSZoMl9ub3JfZGV2aWNlLAogCSZoMl9zbWM5MXhfZGV2aWNlLAorCSZoMl9pcmRhX2RldmljZSwKKwkmaDJfa3BfZGV2aWNlLAorCSZoMl9sY2RfZGV2aWNlLAorCSZoMl9tY2JzcDFfZGV2aWNlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGgyX2luaXRfc21jOTF4KHZvaWQpCkBAIC0xNjQsNyArMzE5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGgyX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJoMiIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCkBAIC0xNzcsMTYgKzMzMSwzNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfaW5pdCh2b2lkKQogewotCS8qIE5PVEU6IHJldkMgYm9hcmRzIHN1cHBvcnQgTkFORC1ib290LCB3aGljaCBjYW4gcHV0IE5PUiBvbiBDUzJCCi0JICogYW5kIE5BTkQgKGVpdGhlciAxNmJpdCBvciA4Yml0KSBvbiBDUzMuCisJLyogSGVyZSB3ZSBhc3N1bWUgdGhlIE5PUiBib290IGNvbmZpZzogIE5PUiBvbiBDUzMgKHBvc3NpYmx5IHN3YXBwZWQKKwkgKiB0byBhZGRyZXNzIDAgYnkgYSBkaXAgc3dpdGNoKSwgTkFORCBvbiBDUzJCLiAgVGhlIE5BTkQgZHJpdmVyIHdpbGwKKwkgKiBub3RpY2Ugd2hldGhlciBhIE5BTkQgY2hpcCBpcyBlbmFibGVkIGF0IHByb2JlIHRpbWUuCisJICoKKwkgKiBGSVhNRSByZXZDIGJvYXJkcyAoYW5kIEgzKSBzdXBwb3J0IE5BTkQtYm9vdCwgd2l0aCBhIGRpcCBzd2l0Y2ggdG8KKwkgKiBwdXQgTk9SIG9uIENTMkIgYW5kIE5BTkQgKHdoaWNoIG9uIEgyIG1heSBiZSAxNmJpdCkgb24gQ1MzLiAgVHJ5CisJICogZGV0ZWN0aW5nIHRoYXQgaW4gY29kZSBoZXJlLCB0byBhdm9pZCBwcm9iaW5nIGV2ZXJ5IHBvc3NpYmxlIGZsYXNoCisJICogY29uZmlndXJhdGlvbi4uLgogCSAqLwotCWgyX2ZsYXNoX3Jlc291cmNlLmVuZCA9IGgyX2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gb21hcF9jczNfcGh5cygpOwotCWgyX2ZsYXNoX3Jlc291cmNlLmVuZCArPSBTWl8zMk0gLSAxOworCWgyX25vcl9yZXNvdXJjZS5lbmQgPSBoMl9ub3JfcmVzb3VyY2Uuc3RhcnQgPSBvbWFwX2NzM19waHlzKCk7CisJaDJfbm9yX3Jlc291cmNlLmVuZCArPSBTWl8zMk0gLSAxOworCisJb21hcF9jZmdfcmVnKEwzXzE2MTBfRkxBU0hfQ1MyQl9PRSk7CisJb21hcF9jZmdfcmVnKE04XzE2MTBfRkxBU0hfQ1MyQl9XRSk7CiAKIAkvKiBNTUM6ICBjYXJkIGRldGVjdCBhbmQgV1AgKi8KIAkvLyBvbWFwX2NmZ19yZWcoVTE5X0FSTUlPMSk7CQkvKiBDRCAqLwogCW9tYXBfY2ZnX3JlZyhCQUxMT1VUX1Y4X0FSTUlPMyk7CS8qIFdQICovCiAKKwkvKiBJcmRhICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9JUikgfHwgZGVmaW5lZChDT05GSUdfT01BUF9JUl9NT0RVTEUpCisJb21hcF93cml0ZWwob21hcF9yZWFkbChGVU5DX01VWF9DVFJMX0EpIHwgNywgRlVOQ19NVVhfQ1RSTF9BKTsKKwlpZiAoIShvbWFwX3JlcXVlc3RfZ3BpbyhIMl9JUkRBX0ZJUlNFTF9HUElPX1BJTikpKSB7CisJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKEgyX0lSREFfRklSU0VMX0dQSU9fUElOLCAwKTsKKwkJaDJfaXJkYV9kYXRhLnRyYW5zY2VpdmVyX21vZGUgPSBoMl90cmFuc2NlaXZlcl9tb2RlOworCX0KKyNlbmRpZgorCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDJfZGV2aWNlcywgQVJSQVlfU0laRShoMl9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDJfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCBkOWYzODYyLi40YjhkMGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC0yMSw4ICsyMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTMzLDE1ICszNiw1OSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9leHBhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAogZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsKIAotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzX3BhcnRpdGlvbnNbXSA9IHsKK3N0YXRpYyBpbnQgaDNfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfRjEwKSwKKwlLRVkoMCwgNCwgS0VZX0Y1KSwKKwlLRVkoMCwgNSwgS0VZXzkpLAorCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDEsIDEsIEtFWV9VUCksCisJS0VZKDEsIDIsIEtFWV8yKSwKKwlLRVkoMSwgMywgS0VZX0Y5KSwKKwlLRVkoMSwgNCwgS0VZX0Y3KSwKKwlLRVkoMSwgNSwgS0VZXzApLAorCUtFWSgyLCAwLCBLRVlfRU5URVIpLAorCUtFWSgyLCAxLCBLRVlfNiksCisJS0VZKDIsIDIsIEtFWV8xKSwKKwlLRVkoMiwgMywgS0VZX0YyKSwKKwlLRVkoMiwgNCwgS0VZX0Y2KSwKKwlLRVkoMiwgNSwgS0VZX0hPTUUpLAorCUtFWSgzLCAwLCBLRVlfOCksCisJS0VZKDMsIDEsIEtFWV81KSwKKwlLRVkoMywgMiwgS0VZX0YxMiksCisJS0VZKDMsIDMsIEtFWV9GMyksCisJS0VZKDMsIDQsIEtFWV9GOCksCisJS0VZKDMsIDUsIEtFWV9FTkQpLAorCUtFWSg0LCAwLCBLRVlfNyksCisJS0VZKDQsIDEsIEtFWV80KSwKKwlLRVkoNCwgMiwgS0VZX0YxMSksCisJS0VZKDQsIDMsIEtFWV9GMSksCisJS0VZKDQsIDQsIEtFWV9GNCksCisJS0VZKDQsIDUsIEtFWV9FU0MpLAorCUtFWSg1LCAwLCBLRVlfRjEzKSwKKwlLRVkoNSwgMSwgS0VZX0YxNCksCisJS0VZKDUsIDIsIEtFWV9GMTUpLAorCUtFWSg1LCAzLCBLRVlfRjE2KSwKKwlLRVkoNSwgNCwgS0VZX1NMRUVQKSwKKwkwCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CiAJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLApAQCAtNzIsMjYgKzExOSw4MCBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoM19mbGFzaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5vcl9kYXRhID0gewogCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAogCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBoM19wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDNfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IG5vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX3BhcnRpdGlvbnMpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoM19mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX3Jlc291cmNlID0gewogCS8qIFRoaXMgaXMgb24gQ1MzLCB3aGVyZXZlciBpdCdzIG1hcHBlZCAqLwogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmgzX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZoM19mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbm9yX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5hbmRfcGFydGl0aW9uc1tdID0geworI2lmIDAKKwkvKiBSRVZJU0lUOiBlbmFibGUgdGhlc2UgcGFydGl0aW9ucyBpZiB5b3UgbWFrZSBOQU5EIEJPT1Qgd29yayAqLworCXsKKwkJLm5hbWUJCT0gInhsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDY0ICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMjU2ICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gInBhcmFtcyIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAxOTIgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDIgKiBTWl8xTSwKKwl9LAorI2VuZGlmCisJeworCQkubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sCit9OworCisvKiBkaXAgc3dpdGNoZXMgY29udHJvbCBOQU5EIGNoaXAgYWNjZXNzOiAgOCBiaXQsIDE2IGJpdCwgb3IgbmVpdGhlciAqLworc3RhdGljIHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9kYXRhID0geworCS5vcHRpb25zCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCisJLnBhcnRzCQk9IG5hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5hbmRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBuYW5kIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZuYW5kX3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CkBAIC0xMzgsMTAgKzIzOSwxMzYgQEAKIAkucmVzb3VyY2UgICAgICAgPSBpbnRsYXRfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoM19rcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKKwkJLmVuZAk9IElOVF9LRVlCT0FSRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGgzX2twX2RhdGEgPSB7CisJLnJvd3MJPSA4LAorCS5jb2xzCT0gOCwKKwkua2V5bWFwID0gaDNfa2V5bWFwLAorCS5yZXAJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDNfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZoM19rcF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGgzX2twX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDNfa3BfcmVzb3VyY2VzLAorfTsKKworCisvKiBTZWxlY3QgYmV0d2VlbiB0aGUgSXJEQSBhbmQgYUdQUyBtb2R1bGUKKyAqLworc3RhdGljIGludCBoM19zZWxlY3RfaXJkYShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDI2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIGZyb20gSS9PIEVYUEFOREVSIFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogJ1A2JyBlbmFibGUvZGlzYWJsZSBJUkRBX1RYIGFuZCBJUkRBX1JYICovCisJaWYgKHN0YXRlICYgSVJfU0VMKSB7IC8qIElyREEgKi8KKwkJaWYgKChlcnIgPSB3cml0ZV9ncGlvX2V4cGEoZXhwYSB8IDB4NDAsIDB4MjYpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIHRvIEkvTyBFWFBBTkRFUiBcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoZXJyID0gd3JpdGVfZ3Bpb19leHBhKGV4cGEgJiB+MHg0MCwgMHgyNikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgdG8gSS9PIEVYUEFOREVSIFxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90cmFuc19tb2RlKHZvaWQgKmRhdGEpCit7CisJaW50ICptb2RlID0gZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDI3KSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgZnJvbSBJL08gZXhwYW5kZXJcbiIpOworCX0KKworCWV4cGEgJj0gfjB4MDM7CisKKwlpZiAoKm1vZGUgJiBJUl9TSVJNT0RFKSB7CisJCWV4cGEgfD0gMHgwMTsKKwl9IGVsc2UgeyAvKiBNSVIvRklSICovCisJCWV4cGEgfD0gMHgwMzsKKwl9CisKKwlpZiAoKGVyciA9IHdyaXRlX2dwaW9fZXhwYShleHBhLCAweDI3KSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgdG8gSS9PIGV4cGFuZGVyXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaDNfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCXN0cnVjdCBvbWFwX2lyZGFfY29uZmlnICppcmRhX2NvbmZpZyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmlyZGFfY29uZmlnLT5ncGlvX2V4cGEpOworCVBSRVBBUkVfV09SSygmaXJkYV9jb25maWctPmdwaW9fZXhwYSwgc2V0X3RyYW5zX21vZGUsICZtb2RlKTsKKwlzY2hlZHVsZV93b3JrKCZpcmRhX2NvbmZpZy0+Z3Bpb19leHBhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfaXJkYV9jb25maWcgaDNfaXJkYV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfTUlSTU9ERSB8IElSX0ZJUk1PREUsCisJLnRyYW5zY2VpdmVyX21vZGUJPSBoM190cmFuc2NlaXZlcl9tb2RlLAorCS5zZWxlY3RfaXJkYQkgCT0gaDNfc2VsZWN0X2lyZGEsCisJLnJ4X2NoYW5uZWwJCT0gT01BUF9ETUFfVUFSVDNfUlgsCisJLnR4X2NoYW5uZWwJCT0gT01BUF9ETUFfVUFSVDNfVFgsCisJLmRlc3Rfc3RhcnQJCT0gVUFSVDNfVEhSLAorCS5zcmNfc3RhcnQJCT0gVUFSVDNfUkhSLAorCS50eF90cmlnZ2VyCQk9IDAsCisJLnJ4X3RyaWdnZXIJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDNfaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9VQVJUMywKKwkJLmVuZAk9IElOVF9VQVJUMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgzX2lyZGFfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwaXJkYSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmgzX2lyZGFfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoM19pcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDNfaXJkYV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoM19sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2RfaDMiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZmxhc2hfZGV2aWNlLAorCSZub3JfZGV2aWNlLAorCSZuYW5kX2RldmljZSwKICAgICAgICAgJnNtYzkxeF9kZXZpY2UsCiAJJmludGxhdF9kZXZpY2UsCisJJmgzX2lyZGFfZGV2aWNlLAorCSZoM19rcF9kZXZpY2UsCisJJmgzX2xjZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBoM191c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CkBAIC0xNzEsNyArMzk4LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGgzX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJoMyIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCkBAIC0xODIsMTEgKzQwOCwzNiBAQAogCXsgT01BUF9UQUdfTENELAkJJmgzX2xjZF9jb25maWcgfSwKIH07CiAKKyNkZWZpbmUgSDNfTkFORF9SQl9HUElPX1BJTgkxMAorCitzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKEgzX05BTkRfUkJfR1BJT19QSU4pOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfaW5pdCh2b2lkKQogewotCWgzX2ZsYXNoX3Jlc291cmNlLmVuZCA9IGgzX2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gb21hcF9jczNfcGh5cygpOwotCWgzX2ZsYXNoX3Jlc291cmNlLmVuZCArPSBPTUFQX0NTM19TSVpFIC0gMTsKLQkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJLyogSGVyZSB3ZSBhc3N1bWUgdGhlIE5PUiBib290IGNvbmZpZzogIE5PUiBvbiBDUzMgKHBvc3NpYmx5IHN3YXBwZWQKKwkgKiB0byBhZGRyZXNzIDAgYnkgYSBkaXAgc3dpdGNoKSwgTkFORCBvbiBDUzJCLiAgVGhlIE5BTkQgZHJpdmVyIHdpbGwKKwkgKiBub3RpY2Ugd2hldGhlciBhIE5BTkQgY2hpcCBpcyBlbmFibGVkIGF0IHByb2JlIHRpbWUuCisJICoKKwkgKiBIMyBzdXBwb3J0IE5BTkQtYm9vdCwgd2l0aCBhIGRpcCBzd2l0Y2ggdG8gcHV0IE5PUiBvbiBDUzJCIGFuZCBOQU5ECisJICogKHdoaWNoIG9uIEgyIG1heSBiZSAxNmJpdCkgb24gQ1MzLiAgVHJ5IGRldGVjdGluZyB0aGF0IGluIGNvZGUgaGVyZSwKKwkgKiB0byBhdm9pZCBwcm9iaW5nIGV2ZXJ5IHBvc3NpYmxlIGZsYXNoIGNvbmZpZ3VyYXRpb24uLi4KKwkgKi8KKwlub3JfcmVzb3VyY2UuZW5kID0gbm9yX3Jlc291cmNlLnN0YXJ0ID0gb21hcF9jczNfcGh5cygpOworCW5vcl9yZXNvdXJjZS5lbmQgKz0gU1pfMzJNIC0gMTsKKworCW5hbmRfcmVzb3VyY2UuZW5kID0gbmFuZF9yZXNvdXJjZS5zdGFydCA9IE9NQVBfQ1MyQl9QSFlTOworCW5hbmRfcmVzb3VyY2UuZW5kICs9IFNaXzRLIC0gMTsKKwlpZiAoIShvbWFwX3JlcXVlc3RfZ3BpbyhIM19OQU5EX1JCX0dQSU9fUElOKSkpCisJCW5hbmRfZGF0YS5kZXZfcmVhZHkgPSBuYW5kX2Rldl9yZWFkeTsKKworCS8qIEdQSU8xMCBGdW5jX01VWF9DVFJMIHJlZyBiaXQgMjk6MjcsIENvbmZpZ3VyZSBWMiB0byBtb2RlMSBhcyBHUElPICovCisJLyogR1BJTzEwIHB1bGx1cC9kb3duIHJlZ2lzdGVyLCBFbmFibGUgcHVsbHVwIG9uIEdQSU8xMCAqLworCW9tYXBfY2ZnX3JlZyhWMl8xNzEwX0dQSU8xMCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGgzX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoM19jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCmluZGV4IGEwNGU0MzMuLmU5MGMxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zNCw4ICszNSwyMiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2tleXBhZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCitzdGF0aWMgaW50IGlubm92YXRvcl9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0YxKSwKKwlLRVkoMCwgMywgS0VZX0RPV04pLAorCUtFWSgxLCAxLCBLRVlfRjIpLAorCUtFWSgxLCAyLCBLRVlfUklHSFQpLAorCUtFWSgyLCAwLCBLRVlfRjMpLAorCUtFWSgyLCAxLCBLRVlfRjQpLAorCUtFWSgyLCAyLCBLRVlfVVApLAorCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgzLCAzLCBLRVlfTEVGVCksCisJMAorfTsKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlubm92YXRvcl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTk3LDYgKzExMiwzMSBAQAogCS5yZXNvdXJjZQk9ICZpbm5vdmF0b3JfZmxhc2hfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlubm92YXRvcl9rcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKKwkJLmVuZAk9IElOVF9LRVlCT0FSRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGlubm92YXRvcl9rcF9kYXRhID0geworCS5yb3dzCT0gOCwKKwkuY29scwk9IDgsCisJLmtleW1hcCA9IGlubm92YXRvcl9rZXltYXAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3Jfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpbm5vdmF0b3Jfa3BfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbm5vdmF0b3Jfa3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBpbm5vdmF0b3Jfa3BfcmVzb3VyY2VzLAorfTsKKworCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAogLyogT25seSBGUEdBIG5lZWRzIHRvIGJlIG1hcHBlZCBoZXJlLiBBbGwgb3RoZXJzIGFyZSBkb25lIHdpdGggaW9yZW1hcCAqLwpAQCAtMTI5LDkgKzE2OSwxNiBAQAogCS5yZXNvdXJjZQk9IGlubm92YXRvcjE1MTBfc21jOTF4X3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlubm92YXRvcjE1MTBfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGNkX2lubjE1MTAiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbm5vdmF0b3IxNTEwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZpbm5vdmF0b3JfZmxhc2hfZGV2aWNlLAogCSZpbm5vdmF0b3IxNTEwX3NtYzkxeF9kZXZpY2UsCisJJmlubm92YXRvcl9rcF9kZXZpY2UsCisJJmlubm92YXRvcjE1MTBfbGNkX2RldmljZSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwpAQCAtMTU4LDkgKzIwNSwxNiBAQAogCS5yZXNvdXJjZQk9IGlubm92YXRvcjE2MTBfc21jOTF4X3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlubm92YXRvcjE2MTBfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW5uMTYxMF9sY2QiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbm5vdmF0b3IxNjEwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZpbm5vdmF0b3JfZmxhc2hfZGV2aWNlLAogCSZpbm5vdmF0b3IxNjEwX3NtYzkxeF9kZXZpY2UsCisJJmlubm92YXRvcl9rcF9kZXZpY2UsCisJJmlubm92YXRvcjE2MTBfbGNkX2RldmljZSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLwpAQCAtMjA2LDcgKzI2MCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNTEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJpbm4xNTEwIiwKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CiAjZW5kaWYKQEAgLTIyOCw3ICsyODEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLnBhbmVsX25hbWUJPSAiaW5uMTYxMCIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5ldHN0YXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTIwZTYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCAyTiBUZWxla29tdW5pa2FjZSwgTGFkaXNsYXYgTWljaGwgPG1pY2hsQDJuLmN6PgotICoKLSAqIENvZGUgZm9yIE5ldHN0YXIgT01BUCBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBvbWFwX2luaXRfdGltZSh2b2lkKTsKLWV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmV0c3Rhcl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBPTUFQX0NTMV9QSFlTICsgMHgzMDAsCi0JCS5lbmQJPSBPTUFQX0NTMV9QSFlTICsgMHgzMDAgKyAxNiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoOCksCi0JCS5lbmQJPSBPTUFQX0dQSU9fSVJRKDgpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV0c3Rhcl9zbWM5MXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MXgiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuZXRzdGFyX3NtYzkxeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG5ldHN0YXJfc21jOTF4X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuZXRzdGFyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZuZXRzdGFyX3NtYzkxeF9kZXZpY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgbmV0c3Rhcl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBuZXRzdGFyX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVUFSVCwJJm5ldHN0YXJfdWFydF9jb25maWcgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBuZXRzdGFyX2luaXRfaXJxKHZvaWQpCi17Ci0Jb21hcDFfaW5pdF9jb21tb25faHcoKTsKLQlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfaW5pdCh2b2lkKQotewotCS8qIGdyZWVuIExFRCAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDQpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDQsIDApOwotCS8qIHNtYzkxeCByZXNldCAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDcpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDcsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg3LCAxKTsKLQl1ZGVsYXkoMik7CS8qIHdhaXQgYXQgbGVhc3QgMTAwbnMgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNywgMCk7Ci0JbWRlbGF5KDUwKTsJLyogNTBtcyB1bnRpbCBQSFkgcmVhZHkgKi8KLQkvKiBzbWM5MXggaW50ZXJydXB0IHBpbiAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDgpOwotCi0Jb21hcF9yZXF1ZXN0X2dwaW8oMTIpOwotCW9tYXBfcmVxdWVzdF9ncGlvKDEzKTsKLQlvbWFwX3JlcXVlc3RfZ3BpbygxNCk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oMTUpOwotCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDEyKSwgSVJRVF9GQUxMSU5HKTsKLQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUSgxMyksIElSUVRfRkFMTElORyk7Ci0Jc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoMTQpLCBJUlFUX0ZBTExJTkcpOwotCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDE1KSwgSVJRVF9GQUxMSU5HKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG5ldHN0YXJfZGV2aWNlcywgQVJSQVlfU0laRShuZXRzdGFyX2RldmljZXMpKTsKLQotCS8qIFN3aXRjaCBvbiBncmVlbiBMRUQgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNCwgMCk7Ci0JLyogU3dpdGNoIG9mZiByZWQgTEVEICovCi0Jb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX1BNUik7CS8qIERpc2FibGUgY2xvY2sgKi8KLQlvbWFwX3dyaXRlYigweDgwLCBPTUFQX0xQRzFfTENSKTsKLQotCW9tYXBfYm9hcmRfY29uZmlnID0gbmV0c3Rhcl9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobmV0c3Rhcl9jb25maWcpOwotCW9tYXBfc2VyaWFsX2luaXQoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDFfbWFwX2NvbW1vbl9pbygpOwotfQotCi0jZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQotI2RlZmluZSBNQUNISU5FX1JFQk9PVElORwkyCi0jZGVmaW5lIE1BQ0hJTkVfUkVCT09UCQk0Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYWNoaW5lX3N0YXRlOwotCi1zdGF0aWMgaW50IHBhbmljX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKLQkgdm9pZCAqcHRyKQotewotCWlmICh0ZXN0X2FuZF9zZXRfYml0KE1BQ0hJTkVfUEFOSUNFRCwgJm1hY2hpbmVfc3RhdGUpKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQkvKiBTd2l0Y2ggb2ZmIGdyZWVuIExFRCAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg0LCAxKTsKLQkvKiBGbGFzaCByZWQgTEVEICovCi0Jb21hcF93cml0ZWIoMHg3OCwgT01BUF9MUEcxX0xDUik7Ci0Jb21hcF93cml0ZWIoMHgwMSwgT01BUF9MUEcxX1BNUik7CS8qIEVuYWJsZSBjbG9jayAqLwotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX2Jsb2NrID0gewotCS5ub3RpZmllcl9jYWxsCT0gcGFuaWNfZXZlbnQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBuZXRzdGFyX2xhdGVfaW5pdCh2b2lkKQotewotCS8qIFRPRE86IFNldHVwIGZyb250IHBhbmVsIHN3aXRjaCBoZXJlICovCi0KLQkvKiBTZXR1cCBwYW5pYyBub3RpZmllciAqLwotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljX2Jsb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1wb3N0Y29yZV9pbml0Y2FsbChuZXRzdGFyX2xhdGVfaW5pdCk7Ci0KLU1BQ0hJTkVfU1RBUlQoTkVUU1RBUiwgIk5ldFN0YXIgT01BUDU5MTAiKQotCS8qIE1haW50YWluZXI6IExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4gKi8KLQkucGh5c19pbwk9IDB4ZmZmMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGZlZjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKLQkubWFwX2lvCQk9IG5ldHN0YXJfbWFwX2lvLAotCS5pbml0X2lycQk9IG5ldHN0YXJfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG5ldHN0YXJfaW5pdCwKLQkudGltZXIJCT0gJm9tYXBfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjk4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKKyAqCisgKiBNb2RpZmllZCBmcm9tIGJvYXJkLWdlbmVyaWMuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2tleXBhZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9haWMyMy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBPbiBOb2tpYSA3NzAsIHRoZSBTbGVlcFggc2lnbmFsIGlzIG1hc2tlZCB3aXRoIGFuCisJICogTVBVSU8gbGluZSBieSBkZWZhdWx0LiAgSXQgaGFzIHRvIGJlIHVubWFza2VkIGZvciBpdAorCSAqIHRvIGJlY29tZSBmdW5jdGlvbmFsICovCisKKwkvKiBTbGVlcFggbWFzayBkaXJlY3Rpb24gKi8KKwlvbWFwX3dyaXRldygob21hcF9yZWFkdygweGZmZmI1MDA4KSAmIH4yKSwgMHhmZmZiNTAwOCk7CisJLyogVW5tYXNrIFNsZWVwWCBzaWduYWwgKi8KKwlvbWFwX3dyaXRldygob21hcF9yZWFkdygweGZmZmI1MDA0KSAmIH4yKSwgMHhmZmZiNTAwNCk7CisKKwlvbWFwMV9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIGludCBub2tpYTc3MF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMSwgR1JPVVBfMCB8IEtFWV9VUCksCisJS0VZKDAsIDIsIEdST1VQXzEgfCBLRVlfRjUpLAorCUtFWSgxLCAwLCBHUk9VUF8wIHwgS0VZX0xFRlQpLAorCUtFWSgxLCAxLCBHUk9VUF8wIHwgS0VZX0VOVEVSKSwKKwlLRVkoMSwgMiwgR1JPVVBfMCB8IEtFWV9SSUdIVCksCisJS0VZKDIsIDAsIEdST1VQXzEgfCBLRVlfRVNDKSwKKwlLRVkoMiwgMSwgR1JPVVBfMCB8IEtFWV9ET1dOKSwKKwlLRVkoMiwgMiwgR1JPVVBfMSB8IEtFWV9GNCksCisJS0VZKDMsIDAsIEdST1VQXzIgfCBLRVlfRjcpLAorCUtFWSgzLCAxLCBHUk9VUF8yIHwgS0VZX0Y4KSwKKwlLRVkoMywgMiwgR1JPVVBfMiB8IEtFWV9GNiksCisJMAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub2tpYTc3MF9rcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKKwkJLmVuZAk9IElOVF9LRVlCT0FSRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIG5va2lhNzcwX2twX2RhdGEgPSB7CisJLnJvd3MgICA9IDgsCisJLmNvbHMgICA9IDgsCisJLmtleW1hcCA9IG5va2lhNzcwX2tleW1hcAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9raWE3NzBfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZub2tpYTc3MF9rcF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5va2lhNzcwX2twX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbm9raWE3NzBfa3BfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm5va2lhNzcwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworICAgICAgICAmbm9raWE3NzBfa3BfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgbm9raWE3NzBfYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgPSB7CisJLnhfbWF4CQk9IDB4MGZmZiwKKwkueV9tYXgJCT0gMHgwZmZmLAorCS54X3BsYXRlX29obXMJPSAxODAsCisJLnByZXNzdXJlX21heAk9IDI1NSwKKwkuZGVib3VuY2VfbWF4CT0gMTAsCisJLmRlYm91bmNlX3RvbAk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG5va2lhNzcwX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5tb2RhbGlhcyAgICAgICA9ICJsY2RfbHBoODkyMyIsCisJCS5idXNfbnVtICAgICAgICA9IDIsCisJCS5jaGlwX3NlbGVjdCAgICA9IDMsCisJCS5tYXhfc3BlZWRfaHogICA9IDEyMDAwMDAwLAorCX0sCisJWzFdID0geworCQkubW9kYWxpYXMgICAgICAgPSAiYWRzNzg0NiIsCisJCS5idXNfbnVtICAgICAgICA9IDIsCisJCS5jaGlwX3NlbGVjdCAgICA9IDAsCisJCS5tYXhfc3BlZWRfaHogICA9IDI1MDAwMDAsCisJCS5pcnEJCT0gT01BUF9HUElPX0lSUSgxNSksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5va2lhNzcwX2Fkczc4NDZfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworCisvKiBhc3N1bWUgbm8gTWluaS1BQiBwb3J0ICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIG5va2lhNzcwX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkub3RnCQk9IDEsCisJLnJlZ2lzdGVyX2hvc3QJPSAxLAorCS5yZWdpc3Rlcl9kZXYJPSAxLAorCS5obWNfbW9kZQk9IDE2LAorCS5waW5zWzBdCT0gNiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIG5va2lhNzcwX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jWzBdID0geworCQkuZW5hYmxlZAk9IDAsCisJCS53aXJlNAkJPSAwLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKKwkubW1jWzFdID0geworCQkuZW5hYmxlZAk9IDAsCisJCS53aXJlNAkJPSAwLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG5va2lhNzcwX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLAkJTlVMTCB9LAorCXsgT01BUF9UQUdfTU1DLAkJJm5va2lhNzcwX21tY19jb25maWcgfSwKK307CisKKy8qCisgKiBhdWRpbyBwb3dlciBjb250cm9sCisgKi8KKyNkZWZpbmUJSEVBRFBIT05FX0dQSU8JCTE0CisjZGVmaW5lCUFNUExJRklFUl9DVFJMX0dQSU8JNTgKKworc3RhdGljIHN0cnVjdCBjbGsgKmRzcHhvcl9jazsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGF1ZGlvX3B3cl9zZW0pOworLyoKKyAqIGF1ZGlvX3B3cl9zdGF0ZQorICogKy0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfC0xfGRvd24JCQl8cG93ZXItdXAgcmVxdWVzdCAtPiAwCQkJfAorICogKy0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAwfHVwCQkJfHBvd2VyLWRvd24oMSkgcmVxdWVzdCAtPiAxCQl8CisgKiB8ICB8CQkJCXxwb3dlci1kb3duKDIpIHJlcXVlc3QgLT4gKGlnbm9yZSkJfAorICogKy0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAxfHVwLAkJCXxwb3dlci11cCByZXF1ZXN0IC0+IDAJCQl8CisgKiB8ICB8cmVjZWl2ZWQgZG93bigxKSByZXF1ZXN0CXxwb3dlci1kb3duKDIpIHJlcXVlc3QgLT4gLTEJCXwKKyAqICstLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworc3RhdGljIGludCBhdWRpb19wd3Jfc3RhdGUgPSAtMTsKKworLyoKKyAqIGF1ZGlvX3B3cl91cCAvIGRvd24gc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBhdWRpb19wd3Jfc2VtCisgKi8KK3N0YXRpYyB2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl91cCh2b2lkKQoreworCWNsa19lbmFibGUoZHNweG9yX2NrKTsKKworCS8qIFR1cm4gb24gY29kZWMgKi8KKwl0bHYzMjBhaWMyM19wb3dlcl91cCgpOworCisJaWYgKG9tYXBfZ2V0X2dwaW9fZGF0YWluKEhFQURQSE9ORV9HUElPKSkKKwkJLyogSFAgbm90IGNvbm5lY3RlZCwgdHVybiBvbiBhbXBsaWZpZXIgKi8KKwkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFNUExJRklFUl9DVFJMX0dQSU8sIDEpOworCWVsc2UKKwkJLyogSFAgY29ubmVjdGVkLCBkbyBub3QgdHVybiBvbiBhbXBsaWZpZXIgKi8KKwkJcHJpbnRrKCJIUCBjb25uZWN0ZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBjb2RlY19kZWxheWVkX3Bvd2VyX2Rvd24odm9pZCAqYXJnKQoreworCWRvd24oJmF1ZGlvX3B3cl9zZW0pOworCWlmIChhdWRpb19wd3Jfc3RhdGUgPT0gLTEpCisJCXRsdjMyMGFpYzIzX3Bvd2VyX2Rvd24oKTsKKwljbGtfZGlzYWJsZShkc3B4b3JfY2spOworCXVwKCZhdWRpb19wd3Jfc2VtKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhjb2RlY19wb3dlcl9kb3duX3dvcmssIGNvZGVjX2RlbGF5ZWRfcG93ZXJfZG93biwgTlVMTCk7CisKK3N0YXRpYyB2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl9kb3duKHZvaWQpCit7CisJLyogVHVybiBvZmYgYW1wbGlmaWVyICovCisJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFNUExJRklFUl9DVFJMX0dQSU8sIDApOworCisJLyogVHVybiBvZmYgY29kZWM6IHNjaGVkdWxlIGRlbGF5ZWQgd29yayAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWNfcG93ZXJfZG93bl93b3JrLCBIWiAvIDIwKTsJLyogNTBtcyAqLworfQorCit2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl91cF9yZXF1ZXN0KGludCBzdGFnZSkKK3sKKwlkb3duKCZhdWRpb19wd3Jfc2VtKTsKKwlpZiAoYXVkaW9fcHdyX3N0YXRlID09IC0xKQorCQlub2tpYTc3MF9hdWRpb19wd3JfdXAoKTsKKwkvKiBmb3JjZSBhdWRpb19wd3Jfc3RhdGUgPSAwLCBldmVuIGlmIGl0IHdhcyAxLiAqLworCWF1ZGlvX3B3cl9zdGF0ZSA9IDA7CisJdXAoJmF1ZGlvX3B3cl9zZW0pOworfQorCit2b2lkIG5va2lhNzcwX2F1ZGlvX3B3cl9kb3duX3JlcXVlc3QoaW50IHN0YWdlKQoreworCWRvd24oJmF1ZGlvX3B3cl9zZW0pOworCXN3aXRjaCAoc3RhZ2UpIHsKKwljYXNlIDE6CisJCWlmIChhdWRpb19wd3Jfc3RhdGUgPT0gMCkKKwkJCWF1ZGlvX3B3cl9zdGF0ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGF1ZGlvX3B3cl9zdGF0ZSA9PSAxKSB7CisJCQlub2tpYTc3MF9hdWRpb19wd3JfZG93bigpOworCQkJYXVkaW9fcHdyX3N0YXRlID0gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCXVwKCZhdWRpb19wd3Jfc2VtKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfaW5pdCh2b2lkKQoreworCW5va2lhNzcwX2NvbmZpZ1swXS5kYXRhID0gJm5va2lhNzcwX3VzYl9jb25maWc7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhub2tpYTc3MF9kZXZpY2VzLCBBUlJBWV9TSVpFKG5va2lhNzcwX2RldmljZXMpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhub2tpYTc3MF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKG5va2lhNzcwX3NwaV9ib2FyZF9pbmZvKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBub2tpYTc3MF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobm9raWE3NzBfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF9kc3BfYXVkaW9fcHdyX3VwX3JlcXVlc3QgPSBub2tpYTc3MF9hdWRpb19wd3JfdXBfcmVxdWVzdDsKKwlvbWFwX2RzcF9hdWRpb19wd3JfZG93bl9yZXF1ZXN0ID0gbm9raWE3NzBfYXVkaW9fcHdyX2Rvd25fcmVxdWVzdDsKKwlkc3B4b3JfY2sgPSBjbGtfZ2V0KDAsICJkc3B4b3JfY2siKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfbWFwX2lvKHZvaWQpCit7CisJb21hcDFfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE5PS0lBNzcwLCAiTm9raWEgNzcwIikKKwkucGh5c19pbwk9IDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGZlZjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfbm9raWE3NzBfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfbm9raWE3NzBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfbm9raWE3NzBfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggNTQzZmExMy4uMTE2MDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTQ0LDcgKzQ1LDI0IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAtYWxzYS5oPgorCitzdGF0aWMgaW50IG9za19rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0YxKSwKKwlLRVkoMCwgMywgS0VZX1VQKSwKKwlLRVkoMSwgMSwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMSwgMiwgS0VZX0xFRlQpLAorCUtFWSgyLCAwLCBLRVlfU1BBQ0UpLAorCUtFWSgyLCAxLCBLRVlfRVNDKSwKKwlLRVkoMiwgMiwgS0VZX0RPV04pLAorCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgzLCAzLCBLRVlfUklHSFQpLAorCTAKK307CisKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9za19wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwpAQCAtMTMzLDkgKzE1MSw2OSBAQAogCS5yZXNvdXJjZQk9IG9zazU5MTJfY2ZfcmVzb3VyY2VzLAogfTsKIAorI2RlZmluZSBERUZBVUxUX0JJVFBFUlNBTVBMRSAxNgorCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyBtY2JzcF9yZWdzID0geworCS5zcGNyMiA9IEZSRUUgfCBGUlNUIHwgR1JTVCB8IFhSU1QgfCBYSU5UTSgzKSwKKwkuc3BjcjEgPSBSSU5UTSgzKSB8IFJSU1QsCisJLnJjcjIgPSBSUEhBU0UgfCBSRlJMRU4yKE9NQVBfTUNCU1BfV09SRF84KSB8CisJICAgIFJXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KSB8IFJEQVRETFkoMCksCisJLnJjcjEgPSBSRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFJXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkueGNyMiA9IFhQSEFTRSB8IFhGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKwkgICAgWFdETEVOMihPTUFQX01DQlNQX1dPUkRfMTYpIHwgWERBVERMWSgwKSB8IFhGSUcsCisJLnhjcjEgPSBYRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFhXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkuc3JncjEgPSBGV0lEKERFRkFVTFRfQklUUEVSU0FNUExFIC0gMSksCisJLnNyZ3IyID0gR1NZTkMgfCBDTEtTUCB8IEZTR00gfCBGUEVSKERFRkFVTFRfQklUUEVSU0FNUExFICogMiAtIDEpLAorCS8qLnBjcjAgPSBGU1hNIHwgRlNSTSB8IENMS1hNIHwgQ0xLUk0gfCBDTEtYUCB8IENMS1JQLCovIC8qIG1jYnNwOiBtYXN0ZXIgKi8KKwkucGNyMCA9IENMS1hQIHwgQ0xLUlAsICAvKiBtY2JzcDogc2xhdmUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9hbHNhX2NvZGVjX2NvbmZpZyBhbHNhX2NvbmZpZyA9IHsKKwkubmFtZQkJCT0gIk9TSyBBSUMyMyIsCisJLm1jYnNwX3JlZ3NfYWxzYQk9ICZtY2JzcF9yZWdzLAorCS5jb2RlY19jb25maWd1cmVfZGV2CT0gTlVMTCwgLy8gYWljMjNfY29uZmlndXJlLAorCS5jb2RlY19zZXRfc2FtcGxlcmF0ZQk9IE5VTEwsIC8vIGFpYzIzX3NldF9zYW1wbGVyYXRlLAorCS5jb2RlY19jbG9ja19zZXR1cAk9IE5VTEwsIC8vIGFpYzIzX2Nsb2NrX3NldHVwLAorCS5jb2RlY19jbG9ja19vbgkJPSBOVUxMLCAvLyBhaWMyM19jbG9ja19vbiwKKwkuY29kZWNfY2xvY2tfb2ZmCT0gTlVMTCwgLy8gYWljMjNfY2xvY2tfb2ZmLAorCS5nZXRfZGVmYXVsdF9zYW1wbGVyYXRlCT0gTlVMTCwgLy8gYWljMjNfZ2V0X2RlZmF1bHRfc2FtcGxlcmF0ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9zazU5MTJfbWNic3AxX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcF9tY2JzcCIsCi0JLmlkCQk9IDEsCisJLm5hbWUJPSAib21hcF9hbHNhX21jYnNwIiwKKyAJLmlkCT0gMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZhbHNhX2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvc2s1OTEyX2twX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gSU5UX0tFWUJPQVJELAorCQkuZW5kCT0gSU5UX0tFWUJPQVJELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgb3NrX2twX2RhdGEgPSB7CisJLnJvd3MJPSA4LAorCS5jb2xzCT0gOCwKKwkua2V5bWFwID0gb3NrX2tleW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9zazU5MTJfa3BfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvc2tfa3BfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvc2s1OTEyX2twX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb3NrNTkxMl9rcF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2s1OTEyX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxjZF9vc2siLAorCS5pZAkJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvc2s1OTEyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMTQzLDYgKzIyMSw4IEBACiAJJm9zazU5MTJfc21jOTF4X2RldmljZSwKIAkmb3NrNTkxMl9jZl9kZXZpY2UsCiAJJm9zazU5MTJfbWNic3AxX2RldmljZSwKKwkmb3NrNTkxMl9rcF9kZXZpY2UsCisJJm9zazU5MTJfbGNkX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvc2tfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTE5Nyw3ICsyNzcsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb3NrX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJvc2siLAogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIApAQCAtMjU1LDggKzMzNCwxOCBAQAogc3RhdGljIHZvaWQgX19pbml0IG9za19taXN0cmFsX2luaXQodm9pZCkgeyB9CiAjZW5kaWYKIAorI2RlZmluZSBFTUlGU19DUzNfVkFMCSgweDg4MDEzMTQxKQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NrX2luaXQodm9pZCkKIHsKKwkvKiBXb3JrYXJvdW5kIGZvciB3cm9uZyBDUzMgKE5PUiBmbGFzaCkgdGltaW5nCisJICogVGhlcmUgYXJlIHNvbWUgVS1Cb290IHZlcnNpb25zIG91dCB0aGVyZSB3aGljaCBjb25maWd1cmUKKwkgKiB3cm9uZyBDUzMgbWVtb3J5IHRpbWluZ3MuIFRoaXMgbWFpbmx5IGxlYWRzIHRvIENSQworCSAqIG9yIHNpbWlsaWFyIGVycm9ycyBpZiB5b3UgdXNlIE5PUiBmbGFzaCAoZS5nLiB3aXRoIEpGRlMyKQorCSAqLworCWlmIChFTUlGU19DQ1MoMykgIT0gRU1JRlNfQ1MzX1ZBTCkKKwkJRU1JRlNfQ0NTKDMpID0gRU1JRlNfQ1MzX1ZBTDsKKwogCW9za19mbGFzaF9yZXNvdXJjZS5lbmQgPSBvc2tfZmxhc2hfcmVzb3VyY2Uuc3RhcnQgPSBvbWFwX2NzM19waHlzKCk7CiAJb3NrX2ZsYXNoX3Jlc291cmNlLmVuZCArPSBTWl8zMk0gLSAxOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG9zazU5MTJfZGV2aWNlcywgQVJSQVlfU0laRShvc2s1OTEyX2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IGU0ODhmNzIuLjRiYzhhNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtMzgsNiArMzgsMTUgQEAKIAlvbWFwX2luaXRfaXJxKCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10ZV9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2RfcGFsbXRlIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnBhbG10ZV9sY2RfZGV2aWNlLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGFsbXRlX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKIAkucmVnaXN0ZXJfZGV2CT0gMSwKIAkuaG1jX21vZGUJPSAwLApAQCAtNTUsNyArNjQsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGFsbXRlX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJwYWxtdGUiLAogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIApAQCAtNjksNiArNzcsOCBAQAogewogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXRlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShwYWxtdGVfY29uZmlnKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCmluZGV4IDM5MTNhM2MuLjY0YjQ1ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKQEAgLTE2LDcgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0yOCw5ICszMCw0NCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9mcGdhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KIAorc3RhdGljIGludCBwMl9rZXltYXBbXSA9IHsKKwlLRVkoMCwwLEtFWV9VUCksCisJS0VZKDAsMSxLRVlfUklHSFQpLAorCUtFWSgwLDIsS0VZX0xFRlQpLAorCUtFWSgwLDMsS0VZX0RPV04pLAorCUtFWSgwLDQsS0VZX0NFTlRFUiksCisJS0VZKDAsNSxLRVlfMF81KSwKKwlLRVkoMSwwLEtFWV9TT0ZUMiksCisJS0VZKDEsMSxLRVlfU0VORCksCisJS0VZKDEsMixLRVlfRU5EKSwKKwlLRVkoMSwzLEtFWV9WT0xVTUVET1dOKSwKKwlLRVkoMSw0LEtFWV9WT0xVTUVVUCksCisJS0VZKDEsNSxLRVlfUkVDT1JEKSwKKwlLRVkoMiwwLEtFWV9TT0ZUMSksCisJS0VZKDIsMSxLRVlfMyksCisJS0VZKDIsMixLRVlfNiksCisJS0VZKDIsMyxLRVlfOSksCisJS0VZKDIsNCxLRVlfU0hBUlApLAorCUtFWSgyLDUsS0VZXzJfNSksCisJS0VZKDMsMCxLRVlfQkFDSyksCisJS0VZKDMsMSxLRVlfMiksCisJS0VZKDMsMixLRVlfNSksCisJS0VZKDMsMyxLRVlfOCksCisJS0VZKDMsNCxLRVlfMCksCisJS0VZKDMsNSxLRVlfSEVBRFNFVEhPT0spLAorCUtFWSg0LDAsS0VZX0hPTUUpLAorCUtFWSg0LDEsS0VZXzEpLAorCUtFWSg0LDIsS0VZXzQpLAorCUtFWSg0LDMsS0VZXzcpLAorCUtFWSg0LDQsS0VZX1NUQVIpLAorCUtFWSg0LDUsS0VZX1BPV0VSKSwKKwkwCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IEgyUDJfREJHX0ZQR0FfRVRIUl9TVEFSVCwJLyogUGh5c2ljYWwgKi8KQEAgLTQ0LDcgKzgxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHAyX3BhcnRpdGlvbnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CiAJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLApAQCAtNzUsMjcgKzExMiw0NyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcDJfZmxhc2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKIAkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKIAkud2lkdGgJCT0gMiwKLQkucGFydHMJCT0gcDJfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHAyX3BhcnRpdGlvbnMpLAorCS5wYXJ0cwkJPSBub3JfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5vcl9wYXJ0aXRpb25zKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcDJfZmxhc2hfcmVzb3VyY2UgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gT01BUF9DUzBfUEhZUywKIAkuZW5kCQk9IE9NQVBfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHAyX2ZsYXNoX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnAyX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZwMl9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbm9yX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9kYXRhID0geworCS5vcHRpb25zCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE9NQVBfQ1MzX1BIWVMsCisJLmVuZAkJPSBPTUFQX0NTM19QSFlTICsgU1pfNEsgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwbmFuZCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmbmFuZF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CkBAIC0xMDUsMTcgKzE2Miw1NSBAQAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnAyX2ZsYXNoX2RldmljZSwKLQkmc21jOTF4X2RldmljZSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3BfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRfNzMwX01QVUlPX0tFWVBBRCwKKwkJLmVuZAk9IElOVF83MzBfTVBVSU9fS0VZUEFELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEga3BfZGF0YSA9IHsKKwkucm93cwk9IDgsCisJLmNvbHMJPSA4LAorCS5rZXltYXAgPSBwMl9rZXltYXAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAta2V5cGFkIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmtwX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoa3BfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBrcF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2RfcDIiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbm9yX2RldmljZSwKKwkmbmFuZF9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCisJJmtwX2RldmljZSwKKwkmbGNkX2RldmljZSwKK307CisKKyNkZWZpbmUgUDJfTkFORF9SQl9HUElPX1BJTgk2MgorCitzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBuYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKFAyX05BTkRfUkJfR1BJT19QSU4pOworfQorCiBzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgcGVyc2V1czJfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKIAkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHBlcnNldXMyX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkucGFuZWxfbmFtZQk9ICJwMiIsCiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCkBAIC0xMjYsNyArMjIxLDEzIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BlcnNldXMyX2luaXQodm9pZCkKIHsKLQkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJaWYgKCEob21hcF9yZXF1ZXN0X2dwaW8oUDJfTkFORF9SQl9HUElPX1BJTikpKQorCQluYW5kX2RhdGEuZGV2X3JlYWR5ID0gbmFuZF9kZXZfcmVhZHk7CisKKwlvbWFwX2NmZ19yZWcoTDNfMTYxMF9GTEFTSF9DUzJCX09FKTsKKwlvbWFwX2NmZ19yZWcoTThfMTYxMF9GTEFTSF9DUzJCX1dFKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwZXJzZXVzMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUocGVyc2V1czJfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDUyZTRhOWQuLjQ0N2E1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTU1LDkgKzE1NSw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB2b2ljZWJsdWVfY29uZmlnW10gPSB7Ci0JeyBPTUFQX1RBR19VU0IsICZ2b2ljZWJsdWVfdXNiX2NvbmZpZyB9LAotCXsgT01BUF9UQUdfTU1DLCAmdm9pY2VibHVlX21tY19jb25maWcgfSwKLQl7IE9NQVBfVEFHX1VBUlQsCSZ2b2ljZWJsdWVfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VTQiwgICZ2b2ljZWJsdWVfdXNiX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLCAgJnZvaWNlYmx1ZV9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19VQVJULCAmdm9pY2VibHVlX3VhcnRfY29uZmlnIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXRfaXJxKHZvaWQpCkBAIC0yMzUsNyArMjM1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHZvaWNlYmx1ZV9zZXR1cCh2b2lkKQogewogCS8qIFNldHVwIHBhbmljIG5vdGlmaWVyICovCi0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOworCW5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKaW5kZXggNzUxMTBiYS4uNjE5ZGIxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJICovCiAJZm9yIChkc29yID0gMjsgZHNvciA8IDk2OyArK2Rzb3IpIHsKIAkJaWYgKChkc29yICYgMSkgJiYgZHNvciA+IDgpCi0JCSAgCWNvbnRpbnVlOworCQkJY29udGludWU7CiAJCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKIAkJCWJyZWFrOwogCX0KQEAgLTY4Nyw2ICs2ODcsMTEgQEAKIAkJCWNsa19yZWdpc3RlcigqY2xrcCk7CiAJCQljb250aW51ZTsKIAkJfQorCisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAzMTApICYmIGNwdV9pc19vbWFwMzEwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQogCX0KIAogCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7CkBAIC03ODQsNyArNzg5LDcgQEAKIAljbGtfZW5hYmxlKCZhcm14b3JfY2suY2xrKTsKIAljbGtfZW5hYmxlKCZhcm10aW1fY2suY2xrKTsgLyogVGhpcyBzaG91bGQgYmUgZG9uZSBieSB0aW1lciBjb2RlICovCiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQljbGtfZW5hYmxlKCZhcm1fZ3Bpb19jayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAppbmRleCA0ZjE4ZDFiLi5iN2M2ODgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkubmFtZQkJPSAiY2tfcmVmIiwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAorCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAogCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJLm5hbWUJCT0gImNrX2RwbGwxIiwKIAkucGFyZW50CQk9ICZja19yZWYsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKIAkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKQEAgLTE4Myw3ICsxODMsOCBAQAogCS5uYW1lCQk9ICJhcm1fY2siLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkgIEFMV0FZU19FTkFCTEVELAogCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKQEAgLTE5NSw3ICsxOTYsOCBAQAogCQkubmFtZQkJPSAiYXJtcGVyX2NrIiwKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIFJBVEVfQ0tDVEwgfCBDTE9DS19JRExFX0NPTlRST0wsCisJCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9DS0NUTCB8CisJCQkJICBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAogCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULApAQCAtMjA5LDcgKzIxMSw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKIAkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjIsNyArMjI0LDcgQEAKIAkJLm5hbWUJCT0gImFybXhvcl9jayIsCiAJCS5wYXJlbnQJCT0gJmNrX3JlZiwKIAkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKIAkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCiAJCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM3LDcgKzIzOSw3IEBACiAJCS5uYW1lCQk9ICJhcm10aW1fY2siLAogCQkucGFyZW50CQk9ICZja19yZWYsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjUyLDcgKzI1NCw3IEBACiAJCS5uYW1lCQk9ICJhcm13ZHRfY2siLAogCQkucGFyZW50CQk9ICZja19yZWYsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX1dEVENLLAogCQkucmVjYWxjCQk9ICZvbWFwMV93YXRjaGRvZ19yZWNhbGMsCkBAIC0zNDQsOSArMzQ2LDkgQEAKIAkJLm5hbWUJCT0gInRjX2NrIiwKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVA3MzAgfCBSQVRFX0NLQ1RMIHwKLQkJCQkgIFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVEIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVA3MzAgfCBDTE9DS19JTl9PTUFQMzEwIHwKKwkJCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCSAgQUxXQVlTX0VOQUJMRUQgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5yYXRlX29mZnNldAk9IENLQ1RMX1RDRElWX09GRlNFVCwKIAkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAogCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCkBAIC0zNTgsNyArMzYwLDggQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0gewogCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8CisJCQkgIEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKIAkgKgpAQCAtMzcyLDcgKzM3NSw4IEBACiAJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KIAkubmFtZQkJPSAidGlicF9jayIsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAorCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKIAkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLApAQCAtNDE3LDcgKzQyMSw3IEBACiAJLm5hbWUJCT0gImRtYV9jayIsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKIAkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLApAQCAtNDM3LDcgKzQ0MSw3IEBACiAJCS5uYW1lCQk9ICJhcGlfY2siLAogCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCiAJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAogCQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtNDUxLDcgKzQ1NSw4IEBACiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImxiX2NrIiwKIAkJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JRExFX0NPTlRST0wsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAogCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKIAkJLmVuYWJsZV9iaXQJPSBFTl9MQkNLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtNDk1LDggKzUwMCw4IEBACiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImxjZF9jayIsCiAJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0NLQ1RMIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8CisJCQkJICBSQVRFX0NLQ1RMIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAogCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKIAkJLmVuYWJsZV9iaXQJPSBFTl9MQ0RDSywKIAkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKQEAgLTUxMiw4ICs1MTcsOSBAQAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKKwkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IEFMV0FZU19FTkFCTEVEIHwKKwkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAogCS5lbmFibGVfYml0CT0gMjksCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKQEAgLTU0NCw4ICs1NTAsOCBAQAogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAotCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDMwLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCkBAIC01NTksOCArNTY1LDkgQEAKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgRU5BQkxFX1JFR18zMkJJVCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVEIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8CisJCQkgIEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCB8CisJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCkBAIC01OTAsNyArNTk3LDcgQEAKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA2MDAwMDAwLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilVTFBEX0NMT0NLX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBVU0JfTUNMS19FTl9CSVQsCiAJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLApAQCAtNjAxLDcgKzYwOCw3IEBACiAJLm5hbWUJCT0gInVzYl9oaGNfY2siLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKIAkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAogCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLApAQCAtNjM3LDcgKzY0NCw5IEBACiAJLm5hbWUJCT0gIm1jbGsiLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IFJBVEVfRklYRUQsCisgCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVELAorIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCisgCS5lbmFibGVfYml0CT0gNiwKIAkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCiAJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CkBAIC02NTksNyArNjY4LDcgQEAKIAkubmFtZQkJPSAiYmNsayIsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9GSVhFRCwKIAkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCiAJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CkBAIC02NzgsMTIgKzY4NywxNCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jMV9jayIsCisJLm5hbWUJCT0gIm1tY19jayIsCisJLmlkCQk9IDEsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8CisJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKIAkuZW5hYmxlX2JpdAk9IDIzLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKQEAgLTY5MSw3ICs3MDIsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMl9jayA9IHsKLQkubmFtZQkJPSAibW1jMl9jayIsCisJLm5hbWUJCT0gIm1tY19jayIsCisJLmlkCQk9IDIsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKQEAgLTcwNiw3ICs3MTgsNyBAQAogc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CiAJLm5hbWUJCT0gIm1wdSIsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCisJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLApAQCAtNzE1LDYgKzcyNywyMCBAQAogCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCisvKiB2aXJ0dWFsIGZ1bmN0aW9uYWwgY2xvY2sgZG9tYWluIGZvciBJMkMuIEp1c3QgZm9yIG1ha2luZyBzdXJlIHRoYXQgQVJNWE9SX0NLCityZW1haW5zIGFjdGl2ZSBkdXJpbmcgTVBVIGlkbGUgd2hlbmV2ZXIgdGhpcyBpcyBlbmFibGVkICovCitzdGF0aWMgc3RydWN0IGNsayBpMmNfZmNrID0geworCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkuaWQJCT0gMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFZJUlRVQUxfQ0xPQ0sgfCBDTE9DS19OT19JRExFX1BBUkVOVCB8CisJCQkgIEFMV0FZU19FTkFCTEVELAorCS5wYXJlbnQJCT0gJmFybXhvcl9jay5jbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKIAkvKiBub24tVUxQRCBjbG9ja3MgKi8KIAkmY2tfcmVmLApAQCAtNzYzLDYgKzc4OSw3IEBACiAJJm1tYzJfY2ssCiAJLyogVmlydHVhbCBjbG9ja3MgKi8KIAkmdmlydHVhbF9ja19tcHUsCisJJmkyY19mY2ssCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggZWNiYzQ3NS4uODQ3MzI5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTI1LDEwICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCi1leHRlcm4gdm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KICNpZglkZWZpbmVkKENPTkZJR19PTUFQMTYxMF9JUikgfHwgZGVmaW5lZChDT05GSUdfT01BUDE2MU9fSVJfTU9EVUxFKQogCiBzdGF0aWMgdTY0IGlyZGFfZG1hbWFzayA9IDB4ZmZmZmZmZmY7CkBAIC0zNyw3ICszMyw2IEBACiAJLm5hbWUgPSAib21hcDE2MTAtaXIiLAogCS5pZCA9IC0xLAogCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKIAkJLmRtYV9tYXNrCT0gJmlyZGFfZG1hbWFzaywKIAl9LAogfTsKQEAgLTg0LDkgKzc5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfcnRjX2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAib21hcF9ydGMiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnRjX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKIH07CkBAIC05OSw2ICs5MSw0MiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ydGModm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCisKKyNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlYTAwMCkKKyNkZWZpbmUgT01BUDFfU1RJX0NIQU5ORUxfQkFTRQkoT01BUDFfU1RJX0JBU0UgKyAweDQwMCkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdGlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDFfU1RJX0JBU0UsCisJCS5lbmQJCT0gT01BUDFfU1RJX0JBU0UgKyBTWl8xSyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAxX1NUSV9DSEFOTkVMX0JBU0UsCisJCS5lbmQJCT0gT01BUDFfU1RJX0NIQU5ORUxfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSU5UXzE2MTBfU1RJLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic3RpIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN0aV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHN0aV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3N0aSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3RpX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9zdGkodm9pZCkge30KKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMjksNiArMTU3LDcgQEAKIAkgKi8KIAlvbWFwX2luaXRfaXJkYSgpOwogCW9tYXBfaW5pdF9ydGMoKTsKKwlvbWFwX2luaXRfc3RpKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYwppbmRleCA4MmQ1NTZiLi5iZTNhMmE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwZmIuaD4KIAogZXh0ZXJuIGludCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CkBAIC0xMTAsNyArMTExLDcgQEAKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CiAJfQogI2VuZGlmCkBAIC0xMjEsNiArMTIyLDcgQEAKICNlbmRpZgogCiAJb21hcF9zcmFtX2luaXQoKTsKKwlvbWFwZmJfcmVzZXJ2ZV9tZW0oKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IGVkNjVhN2QuLmEwNDMxYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwpAQCAtNjAsNyArNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgd2FrZV9lbmFibGU7CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlycV9iYW5rX2NvdW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX2JhbmtfY291bnQ7CiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2JhbmsgKmlycV9iYW5rczsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXJxX2JhbmtfcmVhZGwoaW50IGJhbmssIGludCBvZmZzZXQpCkBAIC0xNDIsMjggKzE0MiwyOCBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXA3MzBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmOGUyMmYgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZGI5YzFmMiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmOGUyMmYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZkYjljMWYyIH0sCiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgxMDAsCS50cmlnZ2VyX21hcCA9IDB4ODAwMDQwZjMgfSwKIH07CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZmJmZmZlZCB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZmYmZmZmVkIH0sCiB9Owogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXAzMTBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmYWVmYzMgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHg2NWIzYzA2MSB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmYWVmYzMgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweDY1YjNjMDYxIH0sCiB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE2MTBfaXJxX2JhbmtzW10gPSB7Ci0JeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWZlOGYgfSwKLQl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZGI3YzFmZCB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWZlOGYgfSwKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGZkYjdjMWZkIH0sCiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFICsgMHgxMDAsCS50cmlnZ2VyX21hcCA9IDB4ZmZmZmI3ZmYgfSwKIAl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UgKyAweDIwMCwJLnRyaWdnZXJfbWFwID0gMHhmZmZmZmZmZiB9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IGQ0YjhkNjIuLjEwZmUwYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtMzUsMTYgKzM1LDIwIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiBzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwNzMwX3BpbnNbXSA9IHsKLU1VWF9DRkdfNzMwKCJFMl83MzBfS0JSMCIsCTEyLCAgIDIxLCAgICAwLAkgIDAsICAgMjAsICAgMSwJICBOQSwJIDAsICAwKQotTVVYX0NGR183MzAoIko3XzczMF9LQlIxIiwJMTIsICAgMjUsICAgIDAsCSAgMCwgICAyNCwgICAxLAkgIE5BLAkgMCwgIDApCi1NVVhfQ0ZHXzczMCgiRTFfNzMwX0tCUjIiLAkxMiwgICAyOSwgICAgMCwJICAwLCAgIDI4LCAgIDEsCSAgTkEsCSAwLCAgMCkKLU1VWF9DRkdfNzMwKCJGM183MzBfS0JSMyIsCTEzLCAgICAxLCAgICAwLAkgIDAsICAgMCwgICAgMSwJICBOQSwJIDAsICAwKQotTVVYX0NGR183MzAoIkQyXzczMF9LQlI0IiwJMTMsICAgIDUsICAgIDAsCSAgMCwgICA0LCAgICAxLAkgIE5BLAkgMCwgIDApCi1NVVhfQ0ZHXzczMCgiQzJfNzMwX0tCQzAiLAkxMywgICAgOSwgICAgMCwJICAwLAk4LCAgIDEsCSAgTkEsCSAwLCAgMCkKLU1VWF9DRkdfNzMwKCJEM183MzBfS0JDMSIsCTEzLCAgIDEzLCAgICAwLAkgIDAsICAgMTIsICAgMSwJICBOQSwJIDAsICAwKQotTVVYX0NGR183MzAoIkU0XzczMF9LQkMyIiwJMTMsICAgMTcsICAgIDAsCSAgMCwgICAxNiwgICAxLAkgIE5BLAkgMCwgIDApCi1NVVhfQ0ZHXzczMCgiRjRfNzMwX0tCQzMiLAkxMywgICAyMSwgICAgMCwJICAwLCAgIDIwLCAgIDEsCSAgTkEsCSAwLCAgMCkKLU1VWF9DRkdfNzMwKCJFM183MzBfS0JDNCIsCTEzLCAgIDI1LCAgICAwLAkgIDAsICAgMjQsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkUyXzczMF9LQlIwIiwgICAgICAgIDEyLCAgIDIxLCAgICAwLCAgIDIwLCAgIDEsIDApCitNVVhfQ0ZHXzczMCgiSjdfNzMwX0tCUjEiLCAgICAgICAgMTIsICAgMjUsICAgIDAsICAgMjQsICAgMSwgMCkKK01VWF9DRkdfNzMwKCJFMV83MzBfS0JSMiIsICAgICAgICAxMiwgICAyOSwgICAgMCwgICAyOCwgICAxLCAwKQorTVVYX0NGR183MzAoIkYzXzczMF9LQlIzIiwgICAgICAgIDEzLCAgICAxLCAgICAwLCAgICAwLCAgIDEsIDApCitNVVhfQ0ZHXzczMCgiRDJfNzMwX0tCUjQiLCAgICAgICAgMTMsICAgIDUsICAgIDAsICAgIDQsICAgMSwgMCkKK01VWF9DRkdfNzMwKCJDMl83MzBfS0JDMCIsICAgICAgICAxMywgICAgOSwgICAgMCwgICAgOCwgICAxLCAwKQorTVVYX0NGR183MzAoIkQzXzczMF9LQkMxIiwgICAgICAgIDEzLCAgIDEzLCAgICAwLCAgIDEyLCAgIDEsIDApCitNVVhfQ0ZHXzczMCgiRTRfNzMwX0tCQzIiLCAgICAgICAgMTMsICAgMTcsICAgIDAsICAgMTYsICAgMSwgMCkKK01VWF9DRkdfNzMwKCJGNF83MzBfS0JDMyIsICAgICAgICAxMywgICAyMSwgICAgMCwgICAyMCwgICAxLCAwKQorTVVYX0NGR183MzAoIkUzXzczMF9LQkM0IiwgICAgICAgIDEzLCAgIDI1LCAgICAwLCAgIDI0LCAgIDEsIDApCisKK01VWF9DRkdfNzMwKCJBQTE3XzczMF9VU0JfRE0iLCAgICAgMiwgICAyMSwgICAgMCwgICAyMCwgICAwLCAwKQorTVVYX0NGR183MzAoIlcxNl83MzBfVVNCX1BVX0VOIiwgICAyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCitNVVhfQ0ZHXzczMCgiVzE3XzczMF9VU0JfVkJVU0kiLCAgIDIsICAgMjksICAgIDAsICAgMjgsICAgMCwgMCkKIH07CiAjZW5kaWYKIApAQCAtNzMsOCArNzcsOCBAQAogTVVYX0NGRygiWTE1XzE2MTBfVUFSVDNfUlRTIiwJIEEsICAgIDAsICAgIDEsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQogCiAvKiBQV1QgJiBQV0wsIGNvbmZsaWN0cyB3aXRoIFVBUlQzICovCi1NVVhfQ0ZHKCJQV1QiLAkJIAkgNiwgICAgMCwgICAgMiwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJQV0wiLAkJIAkgNiwgICAgMywgICAgMSwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJQV1QiLAkJCSA2LCAgICAwLCAgICAyLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlBXTCIsCQkJIDYsICAgIDMsICAgIDEsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQogCiAvKiBVU0IgaW50ZXJuYWwgbWFzdGVyIGdlbmVyaWMgKi8KIE1VWF9DRkcoIlIxOF9VU0JfVkJVUyIsCQkgNywgICAgOSwgICAgMiwJICAxLCAgMTEsICAgMCwJIE5BLAkgMCwgIDEpCkBAIC0xNTEsNyArMTU1LDcgQEAKIAogLyogTWlzYyBiYWxsb3V0cyAqLwogTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKK01VWF9DRkcoIk4yMF9IRFEiLAkJIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKIAogLyogT01BUC0xNjEwIE1NQzIgKi8KIE1VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjZiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKQEAgLTAsMCArMSw3NzAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKKyAqCisgKiBPTUFQIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBPcmlnaW5hbCBjb2RlIGZvciB0aGUgU0ExMXgwOgorICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgorICoKKyAqIE1vZGlmaWVkIGZvciB0aGUgUFhBMjUwIGJ5IE5pY29sYXMgUGl0cmU6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBNb2RpZmllZCBmb3IgdGhlIE9NQVAxNTEwIGJ5IERhdmlkIFNpbmdsZXRvbjoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIENsZWFudXAgMjAwNCBmb3IgT01BUDE1MTAvMTYxMCBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbXRpbWVyLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZHNwX3NsZWVwX3NhdmVbRFNQX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdWxwZF9zbGVlcF9zYXZlW1VMUERfU0xFRVBfU0FWRV9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGludCBtcHVpMTYxMF9zbGVlcF9zYXZlW01QVUkxNjEwX1NMRUVQX1NBVkVfU0laRV07CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBlbmFibGVfZHluX3NsZWVwID0gMTsKKworc3RhdGljIHNzaXplX3Qgb21hcF9wbV9zbGVlcF93aGlsZV9pZGxlX3Nob3coc3RydWN0IHN1YnN5c3RlbSAqIHN1YnN5cywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVodVxuIiwgZW5hYmxlX2R5bl9zbGVlcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9tYXBfcG1fc2xlZXBfd2hpbGVfaWRsZV9zdG9yZShzdHJ1Y3Qgc3Vic3lzdGVtICogc3Vic3lzLAorCQkJCQkgICAgICBjb25zdCBjaGFyICogYnVmLAorCQkJCQkgICAgICBzaXplX3QgbikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZ2YWx1ZSkgIT0gMSB8fAorCSAgICAodmFsdWUgIT0gMCAmJiB2YWx1ZSAhPSAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgImlkbGVfc2xlZXBfc3RvcmU6IEludmFsaWQgdmFsdWVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZW5hYmxlX2R5bl9zbGVlcCA9IHZhbHVlOworCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgc2xlZXBfd2hpbGVfaWRsZV9hdHRyID0geworCS5hdHRyICAgPSB7CisJCS5uYW1lID0gX19zdHJpbmdpZnkoc2xlZXBfd2hpbGVfaWRsZSksCisJCS5tb2RlID0gMDY0NCwKKwl9LAorCS5zaG93ICAgPSBvbWFwX3BtX3NsZWVwX3doaWxlX2lkbGVfc2hvdywKKwkuc3RvcmUgID0gb21hcF9wbV9zbGVlcF93aGlsZV9pZGxlX3N0b3JlLAorfTsKKworZXh0ZXJuIHN0cnVjdCBzdWJzeXN0ZW0gcG93ZXJfc3Vic3lzOworc3RhdGljIHZvaWQgKCpvbWFwX3NyYW1faWRsZSkodm9pZCkgPSBOVUxMOworc3RhdGljIHZvaWQgKCpvbWFwX3NyYW1fc3VzcGVuZCkodW5zaWduZWQgbG9uZyByMCwgdW5zaWduZWQgbG9uZyByMSkgPSBOVUxMOworCisvKgorICogTGV0J3MgcG93ZXIgZG93biBvbiBpZGxlLCBidXQgb25seSBpZiB3ZSBhcmUgcmVhbGx5CisgKiBpZGxlLCBiZWNhdXNlIG9uY2Ugd2Ugc3RhcnQgZG93biB0aGUgcGF0aCBvZgorICogZ29pbmcgaWRsZSB3ZSBjb250aW51ZSB0byBkbyBpZGxlIGV2ZW4gaWYgd2UgZ2V0CisgKiBhIGNsb2NrIHRpY2sgaW50ZXJydXB0IC4gLgorICovCit2b2lkIG9tYXBfcG1faWRsZSh2b2lkKQoreworCWV4dGVybiBfX3UzMiBhcm1faWRsZWN0MV9tYXNrOworCV9fdTMyIHVzZV9pZGxlY3QxID0gYXJtX2lkbGVjdDFfbWFzazsKKyNpZm5kZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisJaW50IGRvX3NsZWVwOworI2VuZGlmCisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2ZpcV9lbmFibGUoKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBTaW5jZSBhbiBpbnRlcnJ1cHQgbWF5IHNldCB1cCBhIHRpbWVyLCB3ZSBkb24ndCB3YW50IHRvCisJICogcmVwcm9ncmFtIHRoZSBoYXJkd2FyZSB0aW1lciB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4KKwkgKiBSZS1lbmFibGUgaW50ZXJydXB0cyBvbmx5IGFmdGVyIHJldHVybmluZyBmcm9tIGlkbGUuCisJICovCisJdGltZXJfZHluX3JlcHJvZ3JhbSgpOworCisjaWZkZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisjd2FybmluZyBFbmFibGUgMzJrSHogT1MgdGltZXIgaW4gb3JkZXIgdG8gYWxsb3cgc2xlZXAgc3RhdGVzIGluIGlkbGUKKwl1c2VfaWRsZWN0MSA9IHVzZV9pZGxlY3QxICYgfigxIDw8IDkpOworI2Vsc2UKKworCWRvX3NsZWVwID0gMDsKKwl3aGlsZSAoZW5hYmxlX2R5bl9zbGVlcCkgeworCisjaWZkZWYgQ09ORklHX0NCVVNfVEFIVk9fVVNCCisJCWV4dGVybiBpbnQgdmJ1c19hY3RpdmU7CisJCS8qIENsb2NrIHJlcXVpcmVtZW50cz8gKi8KKwkJaWYgKHZidXNfYWN0aXZlKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJZG9fc2xlZXAgPSAxOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBDT05GSUdfT01BUF9ETV9USU1FUgorCXVzZV9pZGxlY3QxID0gb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2sodXNlX2lkbGVjdDEpOworI2VuZGlmCisKKwlpZiAob21hcF9kbWFfcnVubmluZygpKSB7CisJCXVzZV9pZGxlY3QxICY9IH4oMSA8PCA2KTsKKwkJaWYgKG9tYXBfbGNkX2RtYV9leHRfcnVubmluZygpKQorCQkJdXNlX2lkbGVjdDEgJj0gfigxIDw8IDEyKTsKKwl9CisKKwkvKiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhlIGRvX3NsZWVwIHZhcmlhYmxlIGFuZCBtdWx0aXBsZQorCSAqIHRlc3RzIGFib3ZlIGFzIHNvb24gYXMgZHJpdmVycywgdGltZXIgYW5kIERNQSBjb2RlIGhhdmUgYmVlbiBmaXhlZC4KKwkgKiBFdmVuIHRoZSBzbGVlcCBibG9jayBjb3VudCBzaG91bGQgYmVjb21lIG9ic29sZXRlLiAqLworCWlmICgodXNlX2lkbGVjdDEgIT0gfjApIHx8ICFkb19zbGVlcCkgeworCisJCV9fdTMyIHNhdmVkX2lkbGVjdDEgPSBvbWFwX3JlYWRsKEFSTV9JRExFQ1QxKTsKKwkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQkJdXNlX2lkbGVjdDEgJj0gT01BUDE1MTBfQklHX1NMRUVQX1JFUVVFU1Q7CisJCWVsc2UKKwkJCXVzZV9pZGxlY3QxICY9IE9NQVAxNjEwX0lETEVDVDFfU0xFRVBfVkFMOworCQlvbWFwX3dyaXRlbCh1c2VfaWRsZWN0MSwgQVJNX0lETEVDVDEpOworCQlfX2FzbV9fIHZvbGF0aWxlICgibWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNCIpOworCQlvbWFwX3dyaXRlbChzYXZlZF9pZGxlY3QxLCBBUk1fSURMRUNUMSk7CisKKwkJbG9jYWxfZmlxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisJb21hcF9zcmFtX3N1c3BlbmQob21hcF9yZWFkbChBUk1fSURMRUNUMSksCisJCQkgIG9tYXBfcmVhZGwoQVJNX0lETEVDVDIpKTsKKyNlbmRpZgorCisJbG9jYWxfZmlxX2VuYWJsZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworLyoKKyAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIHdha2V1cCBldmVudCBpcyBib2FyZCBzcGVjaWZpYy4gRm9yIHRoZQorICogbW9tZW50IHdlIHB1dCBpdCBpbnRvIHRoaXMgaGVscGVyIGZ1bmN0aW9uLiBMYXRlciBpdCBtYXkgbW92ZQorICogdG8gYm9hcmQgc3BlY2lmaWMgZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfcG1fd2FrZXVwX3NldHVwKHZvaWQpCit7CisJdTMyIGxldmVsMV93YWtlID0gMDsKKwl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKTsKKworCS8qCisJICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEdQSU8gYmFuayAxLCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKKwkgKiBhbmQgdGhlIEwyIHdha2V1cCBpbnRlcnJ1cHRzOiBrZXlwYWQgYW5kIFVBUlQyLiBOb3RlIHRoYXQgdGhlCisJICogZHJpdmVycyBtdXN0IHN0aWxsIHNlcGFyYXRlbHkgY2FsbCBvbWFwX3NldF9ncGlvX3dha2V1cCgpIHRvCisJICogd2FrZSB1cCB0byBhIEdQSU8gaW50ZXJydXB0LgorCSAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfNzMwX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfNzMwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSkgfAorCQkJT01BUF9JUlFfQklUKElOVF8xNTEwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSkgfAorCQkJT01BUF9JUlFfQklUKElOVF8xNjEwX0lIMl9JUlEpOworCisJb21hcF93cml0ZWwofmxldmVsMV93YWtlLCBPTUFQX0lIMV9NSVIpOworCisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7CisJCW9tYXBfd3JpdGVsKH4oT01BUF9JUlFfQklUKElOVF83MzBfV0FLRV9VUF9SRVEpIHwKKwkJCQlPTUFQX0lSUV9CSVQoSU5UXzczMF9NUFVJT19LRVlQQUQpKSwKKwkJCQlPTUFQX0lIMl8xX01JUik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlsZXZlbDJfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UX0tFWUJPQVJEKTsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCAgT01BUF9JSDJfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCWxldmVsMl93YWtlIHw9IE9NQVBfSVJRX0JJVChJTlRfS0VZQk9BUkQpOworCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsIE9NQVBfSUgyXzBfTUlSKTsKKworCQkvKiBJTlRfMTYxMF9XQUtFX1VQX1JFUSBpcyBuZWVkZWQgZm9yIEdQSU8gd2FrZXVwLi4uICovCisJCW9tYXBfd3JpdGVsKH5PTUFQX0lSUV9CSVQoSU5UXzE2MTBfV0FLRV9VUF9SRVEpLAorCQkJICAgIE9NQVBfSUgyXzFfTUlSKTsKKwkJb21hcF93cml0ZWwofjB4MCwgT01BUF9JSDJfMl9NSVIpOworCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8zX01JUik7CisJfQorCisJLyogIE5ldyBJUlEgYWdyZWVtZW50LCByZWNhbGN1bGF0ZSBpbiBjYXNjYWRlIG9yZGVyICovCisJb21hcF93cml0ZWwoMSwgT01BUF9JSDJfQ09OVFJPTCk7CisJb21hcF93cml0ZWwoMSwgT01BUF9JSDFfQ09OVFJPTCk7Cit9CisKKyNkZWZpbmUgRU5fRFNQQ0sJMTMJLyogQVJNX0NLQ1RMICovCisjZGVmaW5lIEVOX0FQSUNLCTYJLyogQVJNX0lETEVDVDIgKi8KKyNkZWZpbmUgRFNQX0VOCQkxCS8qIEFSTV9SU1RDVDEgKi8KKwordm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFyZzAgPSAwLCBhcmcxID0gMDsKKworCXByaW50aygiUE06IE9NQVAleCBpcyB0cnlpbmcgdG8gZW50ZXIgZGVlcCBzbGVlcC4uLlxuIiwgc3lzdGVtX3Jldik7CisKKwlvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoMSk7CisKKwlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKSB7CisJCS8qIFN0b3AgTEVEMSAoRDkpIGJsaW5rICovCisJCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgT0ZGKTsKKwl9CisKKwlvbWFwX3dyaXRldygweGZmZmYsIFVMUERfU09GVF9ESVNBQkxFX1JFUV9SRUcpOworCisJLyoKKwkgKiBTdGVwIDE6IHR1cm4gb2ZmIGludGVycnVwdHMgKEZJWE1FOiBOT1RFOiBhbHJlYWR5IGRpc2FibGVkKQorCSAqLworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCisJLyoKKwkgKiBTdGVwIDI6IHNhdmUgcmVnaXN0ZXJzCisJICoKKwkgKiBUaGUgb21hcCBpcyBhIHN0cmFuZ2UvYmVhdXRpZnVsIGRldmljZS4gVGhlIGNhY2hlcywgbWVtb3J5CisJICogYW5kIHJlZ2lzdGVyIHN0YXRlIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIHBvd2VyIHNhdmVzLgorCSAqIFdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB2ZXJ5IGxpdHRsZSByZWdpc3RlciBzdGF0ZSB0bworCSAqIGlkbGUgdGhlIG9tYXAuCisgICAgICAgICAqCisJICogU2F2ZSBpbnRlcnJ1cHQsIE1QVUksIEFSTSBhbmQgVVBMRCBjb250cm9sIHJlZ2lzdGVycy4KKwkgKi8KKworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCU1QVUkxNTEwX1NBVkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMl9NSVIpOworCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJMTUxMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCU1QVUkxNjEwX1NBVkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8wX01JUik7CisJCU1QVUkxNjEwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJMTYxMF9TQVZFKE9NQVBfSUgyXzJfTUlSKTsKKwkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8zX01JUik7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE2MTBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCX0KKworCUFSTV9TQVZFKEFSTV9DS0NUTCk7CisJQVJNX1NBVkUoQVJNX0lETEVDVDEpOworCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKKwlpZiAoIShjcHVfaXNfb21hcDE1eHgoKSkpCisJCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKKwlBUk1fU0FWRShBUk1fRVdVUENUKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKKwlBUk1fU0FWRShBUk1fU1lTU1QpOworCVVMUERfU0FWRShVTFBEX0NMT0NLX0NUUkwpOworCVVMUERfU0FWRShVTFBEX1NUQVRVU19SRVEpOworCisJLyogKFN0ZXAgMyByZW1vdmVkIC0gd2Ugbm93IGFsbG93IGRlZXAgc2xlZXAgYnkgZGVmYXVsdCkgKi8KKworCS8qCisJICogU3RlcCA0OiBPTUFQIERTUCBTaHV0ZG93bgorCSAqLworCisJLyogc3RvcCBEU1AgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9SU1RDVDEpICYgfigxIDw8IERTUF9FTiksIEFSTV9SU1RDVDEpOworCisJLyogc2h1dCBkb3duIGRzcF9jayAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIH4oMSA8PCBFTl9EU1BDSyksIEFSTV9DS0NUTCk7CisKKwkvKiB0ZW1wb3JhcmlseSBlbmFibGluZyBhcGlfY2sgdG8gYWNjZXNzIERTUCByZWdpc3RlcnMgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9JRExFQ1QyKSB8IDEgPDwgRU5fQVBJQ0ssIEFSTV9JRExFQ1QyKTsKKworCS8qIHNhdmUgRFNQIHJlZ2lzdGVycyAqLworCURTUF9TQVZFKERTUF9JRExFQ1QyKTsKKworCS8qIFN0b3AgYWxsIERTUCBkb21haW4gY2xvY2tzICovCisJX19yYXdfd3JpdGV3KDAsIERTUF9JRExFQ1QyKTsKKworCS8qCisJICogU3RlcCA1OiBXYWtldXAgRXZlbnQgU2V0dXAKKwkgKi8KKworCW9tYXBfcG1fd2FrZXVwX3NldHVwKCk7CisKKwkvKgorCSAqIFN0ZXAgNjogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KKwkgKi8KKworCS8qIGRpc2FibGUgQVJNIHdhdGNoZG9nICovCisJb21hcF93cml0ZWwoMHgwMEY1LCBPTUFQX1dEVF9USU1FUl9NT0RFKTsKKwlvbWFwX3dyaXRlbCgweDAwQTAsIE9NQVBfV0RUX1RJTUVSX01PREUpOworCisJLyoKKwkgKiBTdGVwIDZiOiBBUk0gYW5kIFRyYWZmaWMgY29udHJvbGxlciBzaHV0ZG93bgorCSAqCisJICogU3RlcCA2IGNvbnRpbnVlcyBoZXJlLiBQcmVwYXJlIGp1bXAgdG8gcG93ZXIgbWFuYWdlbWVudAorCSAqIGFzc2VtYmx5IGNvZGUgaW4gaW50ZXJuYWwgU1JBTS4KKwkgKgorCSAqIFNpbmNlIHRoZSBvbWFwX2NwdV9zdXNwZW5kIHJvdXRpbmUgaGFzIGJlZW4gY29waWVkIHRvCisJICogU1JBTSwgd2UnbGwgZG8gYW4gaW5kaXJlY3QgcHJvY2VkdXJlIGNhbGwgdG8gaXQgYW5kIHBhc3MgdGhlCisJICogY29udGVudHMgb2YgYXJtX2lkbGVjdDEgYW5kIGFybV9pZGxlY3QyIHNvIGl0IGNhbiByZXN0b3JlCisJICogdGhlbSB3aGVuIGl0IHdha2VzIHVwIGFuZCBpdCB3aWxsIHJldHVybi4KKwkgKi8KKworCWFyZzAgPSBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMV07CisJYXJnMSA9IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX0FSTV9JRExFQ1QyXTsKKworCS8qCisJICogU3RlcCA2YzogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KKwkgKgorCSAqIEp1bXAgdG8gYXNzZW1ibHkgY29kZS4gVGhlIHByb2Nlc3NvciB3aWxsIHN0YXkgdGhlcmUKKwkgKiB1bnRpbCB3YWtlIHVwLgorCSAqLworICAgICAgICBvbWFwX3NyYW1fc3VzcGVuZChhcmcwLCBhcmcxKTsKKworCS8qCisJICogSWYgd2UgYXJlIGhlcmUsIHByb2Nlc3NvciBpcyB3b2tlbiB1cCEKKwkgKi8KKworCS8qCisJICogUmVzdG9yZSBEU1AgY2xvY2tzCisJICovCisKKwkvKiBhZ2FpbiB0ZW1wb3JhcmlseSBlbmFibGluZyBhcGlfY2sgdG8gYWNjZXNzIERTUCByZWdpc3RlcnMgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9JRExFQ1QyKSB8IDEgPDwgRU5fQVBJQ0ssIEFSTV9JRExFQ1QyKTsKKworCS8qIFJlc3RvcmUgRFNQIGRvbWFpbiBjbG9ja3MgKi8KKwlEU1BfUkVTVE9SRShEU1BfSURMRUNUMik7CisKKwkvKgorCSAqIFJlc3RvcmUgQVJNIHN0YXRlLCBleGNlcHQgQVJNX0lETEVDVDEvMiB3aGljaCBvbWFwX2NwdV9zdXNwZW5kIGRpZAorCSAqLworCisJaWYgKCEoY3B1X2lzX29tYXAxNXh4KCkpKQorCQlBUk1fUkVTVE9SRShBUk1fSURMRUNUMyk7CisJQVJNX1JFU1RPUkUoQVJNX0NLQ1RMKTsKKwlBUk1fUkVTVE9SRShBUk1fRVdVUENUKTsKKwlBUk1fUkVTVE9SRShBUk1fUlNUQ1QxKTsKKwlBUk1fUkVTVE9SRShBUk1fUlNUQ1QyKTsKKwlBUk1fUkVTVE9SRShBUk1fU1lTU1QpOworCVVMUERfUkVTVE9SRShVTFBEX0NMT0NLX0NUUkwpOworCVVMUERfUkVTVE9SRShVTFBEX1NUQVRVU19SRVEpOworCisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJTVBVSTczMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUk3MzBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgyXzBfTUlSKTsKKwkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgyXzFfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNTEwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE1MTBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJMTUxMF9SRVNUT1JFKE9NQVBfSUgxX01JUik7CisJCU1QVUkxNTEwX1JFU1RPUkUoT01BUF9JSDJfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCU1QVUkxNjEwX1JFU1RPUkUoTVBVSV9DVFJMKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNjEwX1JFU1RPUkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNjEwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCisJCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8wX01JUik7CisJCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJMTYxMF9SRVNUT1JFKE9NQVBfSUgyXzJfTUlSKTsKKwkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8zX01JUik7CisJfQorCisJb21hcF93cml0ZXcoMCwgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRyk7CisKKwkvKgorCSAqIFJlZW5hYmxlIGludGVycnVwdHMKKwkgKi8KKworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9maXFfZW5hYmxlKCk7CisKKwlvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoMCk7CisKKwlwcmludGsoIlBNOiBPTUFQJXggaXMgcmUtc3RhcnRpbmcgZnJvbSBkZWVwIHNsZWVwLi4uXG4iLCBzeXN0ZW1fcmV2KTsKKworCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKKwkJLyogTGV0IExFRDEgKEQ5KSBibGluayBhZ2FpbiAqLworCQl0cHM2NTAxMF9zZXRfbGVkKExFRDEsIEJMSU5LKTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorc3RhdGljIGludCBnX3JlYWRfY29tcGxldGVkOworCisvKgorICogUmVhZCBzeXN0ZW0gUE0gcmVnaXN0ZXJzIGZvciBkZWJ1Z2dpbmcKKyAqLworc3RhdGljIGludCBvbWFwX3BtX3JlYWRfcHJvYygKKwljaGFyICpwYWdlX2J1ZmZlciwKKwljaGFyICoqbXlfZmlyc3RfYnl0ZSwKKwlvZmZfdCB2aXJ0dWFsX3N0YXJ0LAorCWludCBsZW5ndGgsCisJaW50ICplb2YsCisJdm9pZCAqZGF0YSkKK3sKKwlpbnQgbXlfYnVmZmVyX29mZnNldCA9IDA7CisJY2hhciAqIGNvbnN0IG15X2Jhc2UgPSBwYWdlX2J1ZmZlcjsKKworCUFSTV9TQVZFKEFSTV9DS0NUTCk7CisJQVJNX1NBVkUoQVJNX0lETEVDVDEpOworCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKKwlpZiAoIShjcHVfaXNfb21hcDE1eHgoKSkpCisJCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKKwlBUk1fU0FWRShBUk1fRVdVUENUKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKKwlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKKwlBUk1fU0FWRShBUk1fU1lTU1QpOworCisJVUxQRF9TQVZFKFVMUERfSVRfU1RBVFVTKTsKKwlVTFBEX1NBVkUoVUxQRF9DTE9DS19DVFJMKTsKKwlVTFBEX1NBVkUoVUxQRF9TT0ZUX1JFUSk7CisJVUxQRF9TQVZFKFVMUERfU1RBVFVTX1JFUSk7CisJVUxQRF9TQVZFKFVMUERfRFBMTF9DVFJMKTsKKwlVTFBEX1NBVkUoVUxQRF9QT1dFUl9DVFJMKTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShNUFVJX0NUUkwpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKKwkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUkxNTEwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTE1MTBfU0FWRShFTUlGU19DT05GSUcpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJTVBVSTE2MTBfU0FWRShNUFVJX0NUUkwpOworCQlNUFVJMTYxMF9TQVZFKE1QVUlfRFNQX1NUQVRVUyk7CisJCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJMTYxMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJMTYxMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisJCU1QVUkxNjEwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwl9CisKKwlpZiAodmlydHVhbF9zdGFydCA9PSAwKSB7CisJCWdfcmVhZF9jb21wbGV0ZWQgPSAwOworCisJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJICAgIkFSTV9DS0NUTF9SRUc6ICAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9JRExFQ1QxX1JFRzogICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9JRExFQ1QyX1JFRzogICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9JRExFQ1QzX1JFRzoJICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9FV1VQQ1RfUkVHOiAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9SU1RDVDFfUkVHOiAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9SU1RDVDJfUkVHOiAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIkFSTV9TWVNTVF9SRUc6ICAgICAgICAgICAgMHglLTh4ICAgICBcbiIKKwkJICAgIlVMUERfSVRfU1RBVFVTX1JFRzogICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfQ0xPQ0tfQ1RSTF9SRUc6ICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfU09GVF9SRVFfUkVHOiAgICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfRFBMTF9DVFJMX1JFRzogICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfU1RBVFVTX1JFUV9SRUc6ICAgICAgMHglLTR4ICAgICBcbiIKKwkJICAgIlVMUERfUE9XRVJfQ1RSTF9SRUc6ICAgICAgMHglLTR4ICAgICBcbiIsCisJCSAgIEFSTV9TSE9XKEFSTV9DS0NUTCksCisJCSAgIEFSTV9TSE9XKEFSTV9JRExFQ1QxKSwKKwkJICAgQVJNX1NIT1coQVJNX0lETEVDVDIpLAorCQkgICBBUk1fU0hPVyhBUk1fSURMRUNUMyksCisJCSAgIEFSTV9TSE9XKEFSTV9FV1VQQ1QpLAorCQkgICBBUk1fU0hPVyhBUk1fUlNUQ1QxKSwKKwkJICAgQVJNX1NIT1coQVJNX1JTVENUMiksCisJCSAgIEFSTV9TSE9XKEFSTV9TWVNTVCksCisJCSAgIFVMUERfU0hPVyhVTFBEX0lUX1NUQVRVUyksCisJCSAgIFVMUERfU0hPVyhVTFBEX0NMT0NLX0NUUkwpLAorCQkgICBVTFBEX1NIT1coVUxQRF9TT0ZUX1JFUSksCisJCSAgIFVMUERfU0hPVyhVTFBEX0RQTExfQ1RSTCksCisJCSAgIFVMUERfU0hPVyhVTFBEX1NUQVRVU19SRVEpLAorCQkgICBVTFBEX1NIT1coVUxQRF9QT1dFUl9DVFJMKSk7CisKKwkJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJNzMwX0NUUkxfUkVHCSAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfU0RSQU1fQ09ORklHX1JFRzogICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKKwkJCSAgIE1QVUk3MzBfU0hPVyhNUFVJX0NUUkwpLAorCQkJICAgTVBVSTczMF9TSE9XKE1QVUlfRFNQX1NUQVRVUyksCisJCQkgICBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAorCQkJICAgTVBVSTczMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAorCQkJICAgTVBVSTczMF9TSE9XKEVNSUZGX1NEUkFNX0NPTkZJRyksCisJCQkgICBNUFVJNzMwX1NIT1coRU1JRlNfQ09ORklHKSk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJMTUxMF9DVFJMX1JFRyAgICAgICAgICAgICAweCUtOHggXG4iCisJCQkgICAiTVBVSTE1MTBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNTEwX0RTUF9CT09UX0NPTkZJR19SRUc6IDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTUxMF9EU1BfQVBJX0NPTkZJR19SRUc6ICAweCUtOHggXG4iCisJCQkgICAiTVBVSTE1MTBfU0RSQU1fQ09ORklHX1JFRzogICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNTEwX0VNSUZTX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIsCisJCQkgICBNUFVJMTUxMF9TSE9XKE1QVUlfQ1RSTCksCisJCQkgICBNUFVJMTUxMF9TSE9XKE1QVUlfRFNQX1NUQVRVUyksCisJCQkgICBNUFVJMTUxMF9TSE9XKE1QVUlfRFNQX0JPT1RfQ09ORklHKSwKKwkJCSAgIE1QVUkxNTEwX1NIT1coTVBVSV9EU1BfQVBJX0NPTkZJRyksCisJCQkgICBNUFVJMTUxMF9TSE9XKEVNSUZGX1NEUkFNX0NPTkZJRyksCisJCQkgICBNUFVJMTUxMF9TSE9XKEVNSUZTX0NPTkZJRykpOworCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCisJCQkgICAiTVBVSTE2MTBfQ1RSTF9SRUcgICAgICAgICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNjEwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTYxMF9EU1BfQk9PVF9DT05GSUdfUkVHOiAweCUtOHggXG4iCisJCQkgICAiTVBVSTE2MTBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgorCQkJICAgIk1QVUkxNjEwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJMTYxMF9FTUlGU19DT05GSUdfUkVHOiAgICAweCUtOHggXG4iLAorCQkJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0NUUkwpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0RTUF9CT09UX0NPTkZJRyksCisJCQkgICBNUFVJMTYxMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAorCQkJICAgTVBVSTE2MTBfU0hPVyhFTUlGU19DT05GSUcpKTsKKwkJfQorCisJCWdfcmVhZF9jb21wbGV0ZWQrKzsKKwl9IGVsc2UgaWYgKGdfcmVhZF9jb21wbGV0ZWQgPj0gMSkgeworCQkgKmVvZiA9IDE7CisJCSByZXR1cm4gMDsKKwl9CisJZ19yZWFkX2NvbXBsZXRlZCsrOworCisJKm15X2ZpcnN0X2J5dGUgPSBwYWdlX2J1ZmZlcjsKKwlyZXR1cm4gIG15X2J1ZmZlcl9vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfcG1faW5pdF9wcm9jKHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZHJpdmVyL29tYXBfcG0iLAorCQkJCSAgICAgICBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCQkgICAgICAgb21hcF9wbV9yZWFkX3Byb2MsIE5VTEwpOworfQorCisjZW5kaWYgLyogREVCVUcgJiYgQ09ORklHX1BST0NfRlMgKi8KKworc3RhdGljIHZvaWQgKCpzYXZlZF9pZGxlKSh2b2lkKSA9IE5VTEw7CisKKy8qCisgKglvbWFwX3BtX3ByZXBhcmUgLSBEbyBwcmVsaW1pbmFyeSBzdXNwZW5kIHdvcmsuCisgKglAc3RhdGU6CQlzdXNwZW5kIHN0YXRlIHdlJ3JlIGVudGVyaW5nLgorICoKKyAqLworc3RhdGljIGludCBvbWFwX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBXZSBjYW5ub3Qgc2xlZXAgaW4gaWRsZSB1bnRpbCB3ZSBoYXZlIHJlc3VtZWQgKi8KKwlzYXZlZF9pZGxlID0gcG1faWRsZTsKKwlwbV9pZGxlID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKworLyoKKyAqCW9tYXBfcG1fZW50ZXIgLSBBY3R1YWxseSBlbnRlciBhIHNsZWVwIHN0YXRlLgorICoJQHN0YXRlOgkJU3RhdGUgd2UncmUgZW50ZXJpbmcuCisgKgorICovCisKK3N0YXRpYyBpbnQgb21hcF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkKKwl7CisJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJb21hcF9wbV9zdXNwZW5kKCk7CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqCW9tYXBfcG1fZmluaXNoIC0gRmluaXNoIHVwIHN1c3BlbmQgc2VxdWVuY2UuCisgKglAc3RhdGU6CQlTdGF0ZSB3ZSdyZSBjb21pbmcgb3V0IG9mLgorICoKKyAqCVRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIHdha2UgYmFjayB1cCAob3IgaWYgZW50ZXJpbmcgdGhlIHNsZWVwIHN0YXRlCisgKglmYWlsZWQpLgorICovCisKK3N0YXRpYyBpbnQgb21hcF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXBtX2lkbGUgPSBzYXZlZF9pZGxlOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCAgb21hcF93YWtldXBfaW50ZXJydXB0KGludCAgaXJxLCB2b2lkICogIGRldiwKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICogIHJlZ3MpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwX3dha2V1cF9pcnEgPSB7CisJLm5hbWUJCT0gInBlcmlwaGVyYWwgd2FrZXVwIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcF93YWtldXBfaW50ZXJydXB0Cit9OworCisKKworc3RhdGljIHN0cnVjdCBwbV9vcHMgb21hcF9wbV9vcHMgPXsKKwkucG1fZGlza19tb2RlCT0gMCwKKwkucHJlcGFyZQk9IG9tYXBfcG1fcHJlcGFyZSwKKwkuZW50ZXIJCT0gb21hcF9wbV9lbnRlciwKKwkuZmluaXNoCQk9IG9tYXBfcG1fZmluaXNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9wbV9pbml0KHZvaWQpCit7CisJcHJpbnRrKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQLlxuIik7CisKKwkvKgorCSAqIFdlIGNvcHkgdGhlIGFzc2VtYmxlciBzbGVlcC93YWtldXAgcm91dGluZXMgdG8gU1JBTS4KKwkgKiBUaGVzZSByb3V0aW5lcyBuZWVkIHRvIGJlIGluIFNSQU0gYXMgdGhhdCdzIHRoZSBvbmx5CisJICogbWVtb3J5IHRoZSBNUFUgY2FuIHNlZSB3aGVuIGl0IHdha2VzIHVwLgorCSAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZCwKKwkJCQkJCW9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXA3MzBfY3B1X3N1c3BlbmQsCisJCQkJCQkgICBvbWFwNzMwX2NwdV9zdXNwZW5kX3N6KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQsCisJCQkJCQlvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDE1MTBfY3B1X3N1c3BlbmQsCisJCQkJCQkgICBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkJCQkJb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNjEwX2NwdV9zdXNwZW5kLAorCQkJCQkJICAgb21hcDE2MTBfY3B1X3N1c3BlbmRfc3opOworCX0KKworCWlmIChvbWFwX3NyYW1faWRsZSA9PSBOVUxMIHx8IG9tYXBfc3JhbV9zdXNwZW5kID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQTSBub3QgaW5pdGlhbGl6ZWQ6IE1pc3NpbmcgU1JBTSBzdXBwb3J0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlzZXR1cF9pcnEoSU5UXzczMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisKKwkvKiBQcm9ncmFtIG5ldyBwb3dlciByYW1wLXVwIHRpbWUKKwkgKiAoMCBmb3IgbW9zdCBib2FyZHMgc2luY2Ugd2UgZG9uJ3QgbG93ZXIgdm9sdGFnZSB3aGVuIGluIGRlZXAgc2xlZXApCisJICovCisJb21hcF93cml0ZXcoVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zX1ZBTCwgVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zKTsKKworCS8qIFNldHVwIFVMUEQgUE9XRVJfQ1RSTF9SRUcgLSBlbnRlciBkZWVwIHNsZWVwIHdoZW5ldmVyIHBvc3NpYmxlICovCisJb21hcF93cml0ZXcoVUxQRF9QT1dFUl9DVFJMX1JFR19WQUwsIFVMUERfUE9XRVJfQ1RSTCk7CisKKwkvKiBDb25maWd1cmUgSURMRUNUMyAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlvbWFwX3dyaXRlbChPTUFQNzMwX0lETEVDVDNfVkFMLCBPTUFQNzMwX0lETEVDVDMpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7CisKKwlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CisKKyNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorCW9tYXBfcG1faW5pdF9wcm9jKCk7CisjZW5kaWYKKworCXN1YnN5c19jcmVhdGVfZmlsZSgmcG93ZXJfc3Vic3lzLCAmc2xlZXBfd2hpbGVfaWRsZV9hdHRyKTsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KKwkJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCX0KKworCXJldHVybiAwOworfQorX19pbml0Y2FsbChvbWFwX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKaW5kZXggZTkyNGUwYy4uOWI0Y2Q2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2NrID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDJfY2sgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0M19jayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2NrOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0Ml9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDNfY2s7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9tYXBfc2VyaWFsX2luKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCiAJCQkJCSAgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zbGVlcC5TCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKaW5kZXggNGNkN2QyOS4uZTU4Mjk1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zbGVlcC5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKICAqCiAgKiBMb3ctbGV2ZWwgT01BUDczMC8xNTEwLzE2MTAgc2xlZXAvd2FrZVVwIHN1cHBvcnQKICAqCkBAIC0zODMsNjAgKzM4MywxMzMgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAogCW5vcAogCi0JQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBUcmFmZmljIENvbnRyb2xsZXIKKwlAIExvYWQgYmFzZSBhZGRyZXNzIG9mIFRyYWZmaWMgQ29udHJvbGxlcgogCW1vdglyNiwgI1RDTUlGX0FTTV9CQVNFICYgMHhmZjAwMDAwMAogCW9ycglyNiwgcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4MDBmZjAwMDAKIAlvcnIJcjYsIHI2LCAjVENNSUZfQVNNX0JBU0UgJiAweDAwMDBmZjAwCiAKLQlAIHByZXBhcmUgdG8gcHV0IFNEUkFNIGludG8gc2VsZi1yZWZyZXNoIG1hbnVhbGx5CisJQCBQcmVwYXJlIHRvIHB1dCBTRFJBTSBpbnRvIHNlbGYtcmVmcmVzaCBtYW51YWxseQogCWxkcglyNywgW3I2LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQogCW9ycglyOSwgcjcsICNTRUxGX1JFRlJFU0hfTU9ERSAmIDB4ZmYwMDAwMDAKIAlvcnIJcjksIHI5LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweDAwMDAwMGZmCiAJc3RyCXI5LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQlAIHByZXBhcmUgdG8gcHV0IEVNSUZTIHRvIFNsZWVwCisJQCBQcmVwYXJlIHRvIHB1dCBFTUlGUyB0byBTbGVlcAogCWxkcglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQogCW9ycglyOSwgcjgsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCiAJc3RyCXI5LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCUAgTG9hZCBiYXNlIGFkZHJlc3Mgb2YgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyCiAJbW92CXI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4ZmYwMDAwMDAKIAlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDBmZjAwMDAKIAlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDAwMGZmMDAKIAotCUAgdHVybiBvZmYgY2xvY2sgZG9tYWlucwotCUAgZG8gbm90IGRpc2FibGUgUEVSQ0sgKDB4MDQpCisJQCBUdXJuIG9mZiBjbG9jayBkb21haW5zCisJQCBEbyBub3QgZGlzYWJsZSBQRVJDSyAoMHgwNCkKIAltb3YJcjUsICNPTUFQMTYxMF9JRExFQ1QyX1NMRUVQX1ZBTCAmIDB4ZmYKIAlvcnIJcjUsIHI1LCAjT01BUDE2MTBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKIAlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAotCUAgcmVxdWVzdCBBUk0gaWRsZQorCUAgUmVxdWVzdCBBUk0gaWRsZQogCW1vdglyMywgI09NQVAxNjEwX0lETEVDVDFfU0xFRVBfVkFMICYgMHhmZgogCW9ycglyMywgcjMsICNPTUFQMTYxMF9JRExFQ1QxX1NMRUVQX1ZBTCAmIDB4ZmYwMAogCXN0cmgJcjMsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQogCi0JQCBkaXNhYmxlIGluc3RydWN0aW9uIGNhY2hlCi0JbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMAotCWJpYwlyMiwgcjksICMweDEwMDAKLQltY3IJcDE1LCAwLCByMiwgYzEsIGMwLCAwCi0Jbm9wCi0KIC8qCiAgKiBMZXQncyB3YWl0IGZvciB0aGUgbmV4dCB3YWtlIHVwIGV2ZW50IHRvIHdha2UgdXMgdXAuIHIwIGNhbid0IGJlCiAgKiB1c2VkIGhlcmUgYmVjYXVzZSByMCBob2xkcyBBUk1fSURMRUNUMQogICovCiAJbW92CXIyLCAjMAogCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJCUAgd2FpdCBmb3IgaW50ZXJydXB0CisKKwlAIEVycmF0YSAoSEVMM1NVNDY3LCBzZWN0aW9uIDEuNC40KSBzcGVjaWZpZXMgbm9wLWluc3RydWN0aW9ucworCUAgYWNjb3JkaW5nIHRvIHRoaXMgZm9ybXVsYToKKwlAIDIgKyAoNCpEUExMX01VTFQpL0RQTExfRElWL0FSTURJVgorCUAgTWF4IERQTExfTVVMVCA9IDE4CisJQCBEUExMX0RJViA9IDEKKwlAIEFSTURJViA9IDEKKwlAID0+IDc0IG5vcC1pbnN0cnVjdGlvbnMKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AJQDEwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCUAyMAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAlAMzAKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AJQDQwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCUA1MAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAlANjAKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AJQDcwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCUA3NAogLyoKICAqIG9tYXAxNjEwX2NwdV9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCiAgKgogICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCiAgKiBzdGFjay4KICAqLwotCUAgcmUtZW5hYmxlIEljYWNoZQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAKLQotCUAgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKwlAIFJlc3RvcmUgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KIAlzdHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KIAlzdHJoCXIwLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KIApAQCAtNDQ0LDcgKzUxNyw3IEBACiAJc3RyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAJc3RyCXI4LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCiAKLQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJQCBSZXN0b3JlIHJlZ3MgYW5kIHJldHVybgogCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30KIAogRU5UUlkob21hcDE2MTBfY3B1X3N1c3BlbmRfc3opCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IGNkYmY0ZDcuLmE4NWZlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC01MSw4ICs1MSw2IEBACiAKIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKIAotI2lmZGVmIENPTkZJR19PTUFQX01QVV9USU1FUgotCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNUFUgdGltZXIKQEAgLTIyMiwxOTUgKzIyMCw2IEBACiAKIAlyZXR1cm4gY3ljbGVzXzJfbnModGlja3M2NCk7CiB9Ci0jZW5kaWYJLyogQ09ORklHX09NQVBfTVBVX1RJTUVSICovCi0KLSNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi0jZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNVhYIQotI2VuZGlmCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDMyS0h6IE9TIHRpbWVyCi0gKgotICogVGhpcyBjdXJyZW50bHkgd29ya3Mgb25seSBvbiAxNnh4LCBhcyAxNTEwIGRvZXMgbm90IGhhdmUgdGhlIGNvbnRpbnVvdXMKLSAqIDMyS0h6IHN5bmNocm9ub3VzIHRpbWVyLiBUaGUgMzJLSHogc3luY2hyb25vdXMgdGltZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrCi0gKiBvZiB0aW1lIGluIGFkZGl0aW9uIHRvIHRoZSAzMktIeiBPUyB0aW1lci4gVXNpbmcgb25seSB0aGUgMzJLSHogT1MgdGltZXIKLSAqIG9uIDE1MTAgd291bGQgYmUgcG9zc2libGUsIGJ1dCB0aGUgdGltZXIgd291bGQgbm90IGJlIGFzIGFjY3VyYXRlIGFzCi0gKiB3aXRoIHRoZSAzMktIeiBzeW5jaHJvbml6ZWQgdGltZXIuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBPTUFQXzMyS19USU1FUl9CQVNFCQkweGZmZmI5MDAwCi0jZGVmaW5lIE9NQVBfMzJLX1RJTUVSX0NSCQkweDA4Ci0jZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RWUgkJMHgwMAotI2RlZmluZSBPTUFQXzMyS19USU1FUl9UQ1IJCTB4MDQKLQotI2RlZmluZSBPTUFQXzMyS19USUNLU19QRVJfSFoJCSgzMjc2OCAvIEhaKQotCi0vKgotICogVFJNIHNheXMgMSAvIEhaID0gKCBUVlIgKyAxKSAvIDMyNzY4LCBzbyBUUlYgPSAoMzI3NjggLyBIWikgLSAxCi0gKiBzbyB3aXRoIEhaID0gMTAwLCBUVlIgPSAzMjcuNjguCi0gKi8KLSNkZWZpbmUgT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QJKCgzMjc2OCAvIEhaKSAtIDEpCi0jZGVmaW5lIFRJTUVSXzMyS19TWU5DSFJPTklaRUQJCTB4ZmZmYmM0MTAKLQotI2RlZmluZSBKSUZGSUVTX1RPX0hXX1RJQ0tTKG5yX2ppZmZpZXMsIGNsb2NrX3JhdGUpCQkJXAotCQkJCSgoKG5yX2ppZmZpZXMpICogKGNsb2NrX3JhdGUpKSAvIEhaKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfd3JpdGUoaW50IHZhbCwgaW50IHJlZykKLXsKLQlvbWFwX3dyaXRldyh2YWwsIHJlZyArIE9NQVBfMzJLX1RJTUVSX0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfcmVhZChpbnQgcmVnKQotewotCXJldHVybiBvbWFwX3JlYWRsKHJlZyArIE9NQVBfMzJLX1RJTUVSX0JBU0UpICYgMHhmZmZmZmY7Ci19Ci0KLS8qCi0gKiBUaGUgMzJLSHogc3luY2hyb25pemVkIHRpbWVyIGlzIGFuIGFkZGl0aW9uYWwgdGltZXIgb24gMTZ4eC4KLSAqIEl0IGlzIGFsd2F5cyBydW5uaW5nLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfc3luY190aW1lcl9yZWFkKHZvaWQpCi17Ci0JcmV0dXJuIG9tYXBfcmVhZGwoVElNRVJfMzJLX1NZTkNIUk9OSVpFRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQotewotCW9tYXBfMzJrX3RpbWVyX3dyaXRlKGxvYWRfdmFsLCBPTUFQXzMyS19USU1FUl9UVlIpOwotCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MGYsIE9NQVBfMzJLX1RJTUVSX0NSKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKLXsKLQlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVBfMzJLX1RJTUVSX0NSKTsKLX0KLQotLyoKLSAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgdXNlYy4gTm90ZSB0aGF0IHRoaXMgd2lsbCBvdmVyZmxvdyBmb3IgbGFyZ2VyIHZhbHVlcy4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX3RpY2tzX3RvX3VzZWNzKHVuc2lnbmVkIGxvbmcgdGlja3NfMzJrKQotewotCXJldHVybiAodGlja3NfMzJrICogNSo1KjUqNSo1KjUpID4+IDk7Ci19Ci0KLS8qCi0gKiBSb3VuZHMgZG93biB0byBuZWFyZXN0IG5zZWMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nCi1vbWFwXzMya190aWNrc190b19uc2Vjcyh1bnNpZ25lZCBsb25nIHRpY2tzXzMyaykKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgdGlja3NfMzJrICogMTAwMCAqIDUqNSo1KjUqNSo1ID4+IDk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX2xhc3RfdGljayA9IDA7Ci0KLS8qCi0gKiBSZXR1cm5zIGVsYXBzZWQgdXNlY3Mgc2luY2UgbGFzdCAzMmsgdGltZXIgaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX3RpbWVyX2dldHRpbWVvZmZzZXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOwotCXJldHVybiBvbWFwXzMya190aWNrc190b191c2Vjcyhub3cgLSBvbWFwXzMya19sYXN0X3RpY2spOwotfQotCi0vKgotICogUmV0dXJucyBjdXJyZW50IHRpbWUgZnJvbSBib290IGluIG5zZWNzLiBJdCdzIE9LIGZvciB0aGlzIHRvIHdyYXAKLSAqIGFyb3VuZCBmb3Igbm93LCBhcyBpdCdzIGp1c3QgYSByZWxhdGl2ZSB0aW1lIHN0YW1wLgotICovCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gb21hcF8zMmtfdGlja3NfdG9fbnNlY3Mob21hcF8zMmtfc3luY190aW1lcl9yZWFkKCkpOwotfQotCi0vKgotICogVGltZXIgaW50ZXJydXB0IGZvciAzMktIeiB0aW1lci4gV2hlbiBkeW5hbWljIHRpY2sgaXMgZW5hYmxlZCwgdGhpcwotICogZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBpbnRlcnJ1cHRzIHRvIHJlbW92ZSBsYXRlbmN5Ci0gKiBpc3N1ZXMgd2l0aCBkeW5hbWljIHRpY2suIEluIHRoZSBkeW5hbWljIHRpY2sgY2FzZSwgd2UgbmVlZCB0byBsb2NrCi0gKiB3aXRoIGlycXNhdmUuCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAotCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIG5vdzsKLQotCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCW5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOwotCi0Jd2hpbGUgKG5vdyAtIG9tYXBfMzJrX2xhc3RfdGljayA+PSBPTUFQXzMyS19USUNLU19QRVJfSFopIHsKLQkJb21hcF8zMmtfbGFzdF90aWNrICs9IE9NQVBfMzJLX1RJQ0tTX1BFUl9IWjsKLQkJdGltZXJfdGljayhyZWdzKTsKLQl9Ci0KLQkvKiBSZXN0YXJ0IHRpbWVyIHNvIHdlIGRvbid0IGRyaWZ0IG9mZiBkdWUgdG8gbW9kdWxvIG9yIGR5bmFtaWMgdGljay4KLQkgKiBCeSBkZWZhdWx0IHdlIHByb2dyYW0gdGhlIG5leHQgdGltZXIgdG8gYmUgY29udGludW91cyB0byBhdm9pZAotCSAqIGxhdGVuY2llcyBkdXJpbmcgaGlnaCBzeXN0ZW0gbG9hZC4gRHVyaW5nIGR5bmFtaWMgdGljayBvcGVyYXRpb24gdGhlCi0JICogY29udGludW91cyB0aW1lciBjYW4gYmUgb3ZlcnJpZGRlbiBmcm9tIHBtX2lkbGUgdG8gYmUgbG9uZ2VyLgotCSAqLwotCW9tYXBfMzJrX3RpbWVyX3N0YXJ0KG9tYXBfMzJrX2xhc3RfdGljayArIE9NQVBfMzJLX1RJQ0tTX1BFUl9IWiAtIG5vdyk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotI2lmZGVmIENPTkZJR19OT19JRExFX0haCi0vKgotICogUHJvZ3JhbXMgdGhlIG5leHQgdGltZXIgaW50ZXJydXB0IG5lZWRlZC4gQ2FsbGVkIHdoZW4gZHluYW1pYyB0aWNrIGlzCi0gKiBlbmFibGVkLCBhbmQgdG8gcmVwcm9ncmFtIHRoZSB0aWNrcyB0byBza2lwIGZyb20gcG1faWRsZS4gTm90ZSB0aGF0Ci0gKiB3ZSBjYW4ga2VlcCB0aGUgdGltZXIgY29udGludW91cywgYW5kIGRvbid0IG5lZWQgdG8gc2V0IGl0IHRvIHJ1biBpbgotICogb25lLXNob3QgbW9kZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSB0aW1lciB3aWxsIGdldCByZXByb2dyYW1tZWQgYWdhaW4KLSAqIGFmdGVyIG5leHQgaW50ZXJydXB0LgotICovCi12b2lkIG9tYXBfMzJrX3RpbWVyX3JlcHJvZ3JhbSh1bnNpZ25lZCBsb25nIG5leHRfdGljaykKLXsKLQlvbWFwXzMya190aW1lcl9zdGFydChKSUZGSUVTX1RPX0hXX1RJQ0tTKG5leHRfdGljaywgMzI3NjgpICsgMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfMzJrX3RpbWVyX2lycTsKLWV4dGVybiBzdHJ1Y3QgdGltZXJfdXBkYXRlX2hhbmRsZXIgdGltZXJfdXBkYXRlOwotCi1zdGF0aWMgaW50IG9tYXBfMzJrX3RpbWVyX2VuYWJsZV9keW5fdGljayh2b2lkKQotewotCS8qIE5vIG5lZWQgdG8gcmVwcm9ncmFtIHRpbWVyLCBqdXN0IHVzZSB0aGUgbmV4dCBpbnRlcnJ1cHQgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvbWFwXzMya190aW1lcl9kaXNhYmxlX2R5bl90aWNrKHZvaWQpCi17Ci0Jb21hcF8zMmtfdGltZXJfc3RhcnQoT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGR5bl90aWNrX3RpbWVyIG9tYXBfZHluX3RpY2tfdGltZXIgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwXzMya190aW1lcl9lbmFibGVfZHluX3RpY2ssCi0JLmRpc2FibGUJPSBvbWFwXzMya190aW1lcl9kaXNhYmxlX2R5bl90aWNrLAotCS5yZXByb2dyYW0JPSBvbWFwXzMya190aW1lcl9yZXByb2dyYW0sCi0JLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCi19OwotI2VuZGlmCS8qIENPTkZJR19OT19JRExFX0haICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfMzJrX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiMzJLSHogdGltZXIiLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKLQkuaGFuZGxlcgk9IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdCwKLX07Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBvbWFwX2luaXRfMzJrX3RpbWVyKHZvaWQpCi17Ci0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotCW9tYXBfdGltZXIuZHluX3RpY2sgPSAmb21hcF9keW5fdGlja190aW1lcjsKLSNlbmRpZgotCi0Jc2V0dXBfaXJxKElOVF9PU19USU1FUiwgJm9tYXBfMzJrX3RpbWVyX2lycSk7Ci0Jb21hcF90aW1lci5vZmZzZXQgID0gb21hcF8zMmtfdGltZXJfZ2V0dGltZW9mZnNldDsKLQlvbWFwXzMya19sYXN0X3RpY2sgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKLQlvbWFwXzMya190aW1lcl9zdGFydChPTUFQXzMyS19USU1FUl9USUNLX1BFUklPRCk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX09NQVBfMzJLX1RJTUVSICovCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxOSwxMyArMjI4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKQogCW9tYXBfaW5pdF9tcHVfdGltZXIoKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQotCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKLSNlbHNlCi0jZXJyb3IgTm8gc3lzdGVtIHRpbWVyIHNlbGVjdGVkIGluIEtjb25maWchCi0jZW5kaWYKIH0KIAogc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDU3ODg4MDkuLjUzN2RkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTIwLDMgKzIwLDYgQEAKIAlib29sICJPTUFQIDI0MjAgSDQgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKIAorY29uZmlnIE1BQ0hfT01BUF9BUE9MTE9OCisJYm9vbCAiT01BUCAyNDIwIEFwb2xsb24gYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IDQyMDQxMTYuLjExMWVhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMywxMSArMywxNSBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIGNsb2NrLm8gbXV4Lm8gZGV2aWNlcy5vIHNlcmlhbC5vCitvYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIG1lbW9yeS5vIHByY20ubyBjbG9jay5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubwogCiBvYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lci1ncC5vCiAKKyMgUG93ZXIgTWFuYWdlbWVudAorb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KKwogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04pCQkrPSBib2FyZC1hcG9sbG9uLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZiYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvYm9hcmQtYXBvbGxvbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQXV0aG9yOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwL29tYXAyL2JvYXJkLWg0LmMKKyAqCisgKiBDb2RlIGZvciBhcG9sbG9uIE9NQVAyIGJvYXJkLiBTaG91bGQgd29yayBvbiBtYW55IE9NQVAyIHN5c3RlbXMgd2hlcmUKKyAqIHRoZSBib290bG9hZGVyIHBhc3NlcyB0aGUgYm9hcmQtc3BlY2lmaWMgZGF0YSB0byB0aGUga2VybmVsLgorICogRG8gbm90IHB1dCBhbnkgYm9hcmQgc3BlY2lmaWMgY29kZSB0byB0aGlzIGZpbGU7IGNyZWF0ZSBhIG5ldyBtYWNoaW5lCisgKiB0eXBlIGlmIHlvdSBuZWVkIGN1c3RvbSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvb25lbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisjaW5jbHVkZSAicHJjbS1yZWdzLmgiCisKKy8qIExFRCAmIFN3aXRjaCBtYWNyb3MgKi8KKyNkZWZpbmUgTEVEMF9HUElPMTMJCTEzCisjZGVmaW5lIExFRDFfR1BJTzE0CQkxNAorI2RlZmluZSBMRUQyX0dQSU8xNQkJMTUKKyNkZWZpbmUgU1dfRU5URVJfR1BJTzE2CQkxNgorI2RlZmluZSBTV19VUF9HUElPMTcJCTE3CisjZGVmaW5lIFNXX0RPV05fR1BJTzU4CQk1OAorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYXBvbGxvbl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiWC1Mb2FkZXIgKyBVLUJvb3QiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzEyOEssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInBhcmFtcyIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8xMjhLLAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzJNLAorCX0sCisJeworCQkubmFtZQkJPSAicm9vdGZzIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzE2TSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImZpbGVzeXN0ZW0wMCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8zMk0sCisJfSwKKwl7CisJCS5uYW1lCQk9ICJmaWxlc3lzdGVtMDEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGFwb2xsb25fZmxhc2hfZGF0YSA9IHsKKwkucGFydHMJCT0gYXBvbGxvbl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoYXBvbGxvbl9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXBvbGxvbl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gQVBPTExPTl9DUzBfQkFTRSwKKwkuZW5kCQk9IEFQT0xMT05fQ1MwX0JBU0UgKyBTWl8xMjhLLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFwb2xsb25fb25lbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9uZW5hbmQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYXBvbGxvbl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKCZhcG9sbG9uX2ZsYXNoX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSAmYXBvbGxvbl9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXBvbGxvbl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBUE9MTE9OX0VUSFJfU1RBUlQsCQkvKiBQaHlzaWNhbCAqLworCQkuZW5kCT0gQVBPTExPTl9FVEhSX1NUQVJUICsgMHhmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoQVBPTExPTl9FVEhSX0dQSU9fSVJRKSwKKwkJLmVuZAk9IE9NQVBfR1BJT19JUlEoQVBPTExPTl9FVEhSX0dQSU9fSVJRKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFwb2xsb25fc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFwb2xsb25fc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gYXBvbGxvbl9zbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXBvbGxvbl9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJhcG9sbG9uX2xjZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFwb2xsb25fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmFwb2xsb25fb25lbmFuZF9kZXZpY2UsCisJJmFwb2xsb25fc21jOTF4X2RldmljZSwKKwkmYXBvbGxvbl9sY2RfZGV2aWNlLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBhcG9sbG9uX2luaXRfc21jOTF4KHZvaWQpCit7CisJLyogTWFrZSBzdXJlIENTMSB0aW1pbmdzIGFyZSBjb3JyZWN0ICovCisJR1BNQ19DT05GSUcxXzEgPSAweDAwMDExMjAzOworCUdQTUNfQ09ORklHMl8xID0gMHgwMDFmMWYwMTsKKwlHUE1DX0NPTkZJRzNfMSA9IDB4MDAwODA4MDM7CisJR1BNQ19DT05GSUc0XzEgPSAweDFjMDkxYzA5OworCUdQTUNfQ09ORklHNV8xID0gMHgwNDFmMWYxZjsKKwlHUE1DX0NPTkZJRzZfMSA9IDB4MDAwMDA0YzQ7CisJR1BNQ19DT05GSUc3XzEgPSAweDAwMDAwZjQwIHwgKEFQT0xMT05fQ1MxX0JBU0UgPj4gMjQpOworCXVkZWxheSgxMDApOworCisJb21hcF9jZmdfcmVnKFc0X18yNFhYX0dQSU83NCk7CisJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKEFQT0xMT05fRVRIUl9HUElPX0lSUSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MXggSVJRXG4iLAorCQkJQVBPTExPTl9FVEhSX0dQSU9fSVJRKTsKKwkJcmV0dXJuOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihBUE9MTE9OX0VUSFJfR1BJT19JUlEsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKKwlhcG9sbG9uX2luaXRfc21jOTF4KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBhcG9sbG9uX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoMSA8PCAwKSB8ICgwIDw8IDEpIHwgKDAgPDwgMiksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBhcG9sbG9uX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jIFswXSA9IHsKKwkJLmVuYWJsZWQgCT0gMCwKKwkJLndpcmU0CQk9IDAsCisJCS53cF9waW4JCT0gLTEsCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgYXBvbGxvbl9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhcG9sbG9uX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJmFwb2xsb25fdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJCSZhcG9sbG9uX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZhcG9sbG9uX2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcG9sbG9uX2xlZF9pbml0KHZvaWQpCit7CisJLyogTEVEMCAtIEFBMTAgKi8KKwlvbWFwX2NmZ19yZWcoQUExMF8yNDJYX0dQSU8xMyk7CisJb21hcF9yZXF1ZXN0X2dwaW8oTEVEMF9HUElPMTMpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKExFRDBfR1BJTzEzLCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMF9HUElPMTMsIDApOworCS8qIExFRDEgIC0gQUE2ICovCisJb21hcF9jZmdfcmVnKEFBNl8yNDJYX0dQSU8xNCk7CisJb21hcF9yZXF1ZXN0X2dwaW8oTEVEMV9HUElPMTQpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKExFRDFfR1BJTzE0LCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMV9HUElPMTQsIDApOworCS8qIExFRDIgIC0gQUE0ICovCisJb21hcF9jZmdfcmVnKEFBNF8yNDJYX0dQSU8xNSk7CisJb21hcF9yZXF1ZXN0X2dwaW8oTEVEMl9HUElPMTUpOworCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKExFRDJfR1BJTzE1LCAwKTsKKwlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMl9HUElPMTUsIDApOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXBvbGxvbl9zd19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaWdub3JlZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBsZWQwLCBsZWQxLCBsZWQyOworCisJaWYgKGlycSA9PSBPTUFQX0dQSU9fSVJRKFNXX0VOVEVSX0dQSU8xNikpCisJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChMRUQwX0dQSU8xMywgbGVkMCBePSAxKTsKKwllbHNlIGlmIChpcnEgPT0gT01BUF9HUElPX0lSUShTV19VUF9HUElPMTcpKQorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMV9HUElPMTQsIGxlZDEgXj0gMSk7CisJZWxzZSBpZiAoaXJxID09IE9NQVBfR1BJT19JUlEoU1dfRE9XTl9HUElPNTgpKQorCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoTEVEMl9HUElPMTUsIGxlZDIgXj0gMSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcG9sbG9uX3N3X2luaXQodm9pZCkKK3sKKwkvKiBFbnRlciBTVyAtIFkxMSAqLworCW9tYXBfY2ZnX3JlZyhZMTFfMjQyWF9HUElPMTYpOworCW9tYXBfcmVxdWVzdF9ncGlvKFNXX0VOVEVSX0dQSU8xNik7CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oU1dfRU5URVJfR1BJTzE2LCAxKTsKKwkvKiBVcCBTVyAtIEFBMTIgKi8KKwlvbWFwX2NmZ19yZWcoQUExMl8yNDJYX0dQSU8xNyk7CisJb21hcF9yZXF1ZXN0X2dwaW8oU1dfVVBfR1BJTzE3KTsKKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihTV19VUF9HUElPMTcsIDEpOworCS8qIERvd24gU1cgLSBBQTggKi8KKwlvbWFwX2NmZ19yZWcoQUE4XzI0MlhfR1BJTzU4KTsKKwlvbWFwX3JlcXVlc3RfZ3BpbyhTV19ET1dOX0dQSU81OCk7CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oU1dfRE9XTl9HUElPNTgsIDEpOworCisJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoU1dfRU5URVJfR1BJTzE2KSwgSVJRVF9SSVNJTkcpOworCWlmIChyZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKFNXX0VOVEVSX0dQSU8xNiksICZhcG9sbG9uX3N3X2ludGVycnVwdCwKKwkJCQlTQV9TSElSUSwgImVudGVyIHN3IiwKKwkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQorCQlyZXR1cm47CisJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoU1dfVVBfR1BJTzE3KSwgSVJRVF9SSVNJTkcpOworCWlmIChyZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKFNXX1VQX0dQSU8xNyksICZhcG9sbG9uX3N3X2ludGVycnVwdCwKKwkJCQlTQV9TSElSUSwgInVwIHN3IiwKKwkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQorCQlyZXR1cm47CisJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoU1dfRE9XTl9HUElPNTgpLCBJUlFUX1JJU0lORyk7CisJaWYgKHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEoU1dfRE9XTl9HUElPNTgpLCAmYXBvbGxvbl9zd19pbnRlcnJ1cHQsCisJCQkJU0FfU0hJUlEsICJkb3duIHN3IiwKKwkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25faW5pdCh2b2lkKQoreworCWFwb2xsb25fbGVkX2luaXQoKTsKKwlhcG9sbG9uX3N3X2luaXQoKTsKKworCS8qIFJFVklTSVQ6IHdoZXJlJ3MgdGhlIGNvcnJlY3QgcGxhY2UgKi8KKwlvbWFwX2NmZ19yZWcoVzE5XzI0WFhfU1lTX05JUlEpOworCisJLyoKKyAJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhcG9sbG9uX2RldmljZXMsIEFSUkFZX1NJWkUoYXBvbGxvbl9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBhcG9sbG9uX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShhcG9sbG9uX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX21hcF9pbyh2b2lkKQoreworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0FQT0xMT04sICJPTUFQMjR4eCBBcG9sbG9uIikKKwkvKiBNYWludGFpbmVyOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPiAqLworCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9hcG9sbG9uX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2Fwb2xsb25faW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfYXBvbGxvbl9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKaW5kZXggYTMwMGQ2My4uNDkzM2ZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0yNSwxNSArMjcsNTcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9leHBhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZW5lbGF1cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgInByY20tcmVncy5oIgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm93X2dwaW9zWzZdID0geyA4OCwgODksIDEyNCwgMTEsIDYsIDk2IH07CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbF9ncGlvc1s3XSA9IHsgOTAsIDkxLCAxMDAsIDM2LCAxMiwgOTcsIDk4IH07CisKK3N0YXRpYyBpbnQgaDRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZX0EpLAorCUtFWSgwLCAzLCBLRVlfQiksCisJS0VZKDAsIDQsIEtFWV9DKSwKKwlLRVkoMSwgMCwgS0VZX0RPV04pLAorCUtFWSgxLCAxLCBLRVlfVVApLAorCUtFWSgxLCAyLCBLRVlfRSksCisJS0VZKDEsIDMsIEtFWV9GKSwKKwlLRVkoMSwgNCwgS0VZX0cpLAorCUtFWSgyLCAwLCBLRVlfRU5URVIpLAorCUtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDIsIDIsIEtFWV9KKSwKKwlLRVkoMiwgMywgS0VZX0spLAorCUtFWSgyLCA0LCBLRVlfMyksCisJS0VZKDMsIDAsIEtFWV9NKSwKKwlLRVkoMywgMSwgS0VZX04pLAorCUtFWSgzLCAyLCBLRVlfTyksCisJS0VZKDMsIDMsIEtFWV9QKSwKKwlLRVkoMywgNCwgS0VZX1EpLAorCUtFWSg0LCAwLCBLRVlfUiksCisJS0VZKDQsIDEsIEtFWV80KSwKKwlLRVkoNCwgMiwgS0VZX1QpLAorCUtFWSg0LCAzLCBLRVlfVSksCisJS0VZKDQsIDQsIEtFWV9FTlRFUiksCisJS0VZKDUsIDAsIEtFWV9WKSwKKwlLRVkoNSwgMSwgS0VZX1cpLAorCUtFWSg1LCAyLCBLRVlfTCksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX0VOVEVSKSwKKwkwCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDRfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0xMDgsOSArMTUyLDEyMyBAQAogCS5yZXNvdXJjZQk9IGg0X3NtYzkxeF9yZXNvdXJjZXMsCiB9OwogCisvKiBTZWxlY3QgYmV0d2VlbiB0aGUgSXJEQSBhbmQgYUdQUyBtb2R1bGUKKyAqLworc3RhdGljIGludCBoNF9zZWxlY3RfaXJkYShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDIxKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIGZyb20gSS9PIGV4cGFuZGVyXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiAnUDYnIGVuYWJsZS9kaXNhYmxlIElSREFfVFggYW5kIElSREFfUlggKi8KKwlpZiAoc3RhdGUgJiBJUl9TRUwpIHsJLyogSXJEYSAqLworCQlpZiAoKGVyciA9IHdyaXRlX2dwaW9fZXhwYShleHBhIHwgMHgwMSwgMHgyMSkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgdG8gSS9PIGV4cGFuZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGVyciA9IHdyaXRlX2dwaW9fZXhwYShleHBhICYgfjB4MDEsIDB4MjEpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIHRvIEkvTyBleHBhbmRlclxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90cmFuc19tb2RlKHZvaWQgKmRhdGEpCit7CisJaW50ICptb2RlID0gZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGV4cGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGVyciA9IHJlYWRfZ3Bpb19leHBhKCZleHBhLCAweDIwKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgZnJvbSBJL08gZXhwYW5kZXJcbiIpOworCX0KKworCWV4cGEgJj0gfjB4MDE7CisKKwlpZiAoISgqbW9kZSAmIElSX1NJUk1PREUpKSB7IC8qIE1JUi9GSVIgKi8KKwkJZXhwYSB8PSAweDAxOworCX0KKworCWlmICgoZXJyID0gd3JpdGVfZ3Bpb19leHBhKGV4cGEsIDB4MjApKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyB0byBJL08gZXhwYW5kZXJcbiIpOworCX0KK30KKworc3RhdGljIGludCBoNF90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJc3RydWN0IG9tYXBfaXJkYV9jb25maWcgKmlyZGFfY29uZmlnID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXJkYV9jb25maWctPmdwaW9fZXhwYSk7CisJUFJFUEFSRV9XT1JLKCZpcmRhX2NvbmZpZy0+Z3Bpb19leHBhLCBzZXRfdHJhbnNfbW9kZSwgJm1vZGUpOworCXNjaGVkdWxlX3dvcmsoJmlyZGFfY29uZmlnLT5ncGlvX2V4cGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcmRhX2NvbmZpZyBoNF9pcmRhX2RhdGEgPSB7CisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9NSVJNT0RFIHwgSVJfRklSTU9ERSwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IGg0X3RyYW5zY2VpdmVyX21vZGUsCisJLnNlbGVjdF9pcmRhCSAJPSBoNF9zZWxlY3RfaXJkYSwKKwkucnhfY2hhbm5lbAkJPSBPTUFQMjRYWF9ETUFfVUFSVDNfUlgsCisJLnR4X2NoYW5uZWwJCT0gT01BUDI0WFhfRE1BX1VBUlQzX1RYLAorCS5kZXN0X3N0YXJ0CQk9IE9NQVBfVUFSVDNfQkFTRSwKKwkuc3JjX3N0YXJ0CQk9IE9NQVBfVUFSVDNfQkFTRSwKKwkudHhfdHJpZ2dlcgkJPSBPTUFQMjRYWF9ETUFfVUFSVDNfVFgsCisJLnJ4X3RyaWdnZXIJCT0gT01BUDI0WFhfRE1BX1VBUlQzX1JYLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNF9pcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gSU5UXzI0WFhfVUFSVDNfSVJRLAorCQkuZW5kCT0gSU5UXzI0WFhfVUFSVDNfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBpcmRhIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmg0X2lyZGFfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSBoNF9pcmRhX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGg0X2twX2RhdGEgPSB7CisJLnJvd3MJCT0gNiwKKwkuY29scwkJPSA3LAorCS5rZXltYXAgCT0gaDRfa2V5bWFwLAorCS5yZXAJCT0gMSwKKwkucm93X2dwaW9zIAk9IHJvd19ncGlvcywKKwkuY29sX2dwaW9zIAk9IGNvbF9ncGlvcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X2twX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaDRfa3BfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGNkX2g0IiwKKwkuaWQJCT0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmg0X3NtYzkxeF9kZXZpY2UsCiAJJmg0X2ZsYXNoX2RldmljZSwKKwkmaDRfaXJkYV9kZXZpY2UsCisJJmg0X2twX2RldmljZSwKKwkmaDRfbGNkX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaDRfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTE1Nyw3ICszMTUsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaDRfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5wYW5lbF9uYW1lCT0gImg0IiwKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CiAKQEAgLTE3NCw2ICszMzEsMTkgQEAKIAkgKiBZb3UgaGF2ZSB0byBtdXggdGhlbSBvZmYgaW4gZGV2aWNlIGRyaXZlcnMgbGF0ZXIgb24KIAkgKiBpZiBub3QgbmVlZGVkLgogCSAqLworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfSVIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfSVJfTU9EVUxFKQorCW9tYXBfY2ZnX3JlZyhLMTVfMjRYWF9VQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKEsxNF8yNFhYX1VBUlQzX1JYKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfT01BUF9NT0RVTEUpCisJaWYgKG9tYXBfaGFzX21lbmVsYXVzKCkpIHsKKwkJcm93X2dwaW9zWzVdID0gMDsKKwkJY29sX2dwaW9zWzJdID0gMTU7CisJCWNvbF9ncGlvc1s2XSA9IDE4OworCX0KKyNlbmRpZgorCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDRfZGV2aWNlcywgQVJSQVlfU0laRShoNF9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoNF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDRfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwppbmRleCAxODBmNjc1Li43MmViNGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCkBAIC0yOCwxNCArMjgsMTQgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KIAorI2luY2x1ZGUgInByY20tcmVncy5oIgorI2luY2x1ZGUgIm1lbW9yeS5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKIC8vI2RlZmluZSBET1dOX1ZBUklBQkxFX0RQTEwgMQkJCS8qIEV4cGVyaW1lbnRhbCAqLwogCiBzdGF0aWMgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0Owotc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKIHN0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU0LDExICs1NCwxMyBAQAogCiBzdGF0aWMgdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqIHRjbGspCiB7Ci0JaW50IGRwbGxfY2xrLCBkcGxsX211bHQsIGRwbGxfZGl2LCBhbXVsdDsKKwlsb25nIGxvbmcgZHBsbF9jbGs7CisJaW50IGRwbGxfbXVsdCwgZHBsbF9kaXYsIGFtdWx0OwogCiAJZHBsbF9tdWx0ID0gKENNX0NMS1NFTDFfUExMID4+IDEyKSAmIDB4MDNmZjsJLyogMTAgYml0cyAqLwogCWRwbGxfZGl2ID0gKENNX0NMS1NFTDFfUExMID4+IDgpICYgMHgwZjsJLyogNCBiaXRzICovCi0JZHBsbF9jbGsgPSAodGNsay0+cGFyZW50LT5yYXRlICogZHBsbF9tdWx0KSAvIChkcGxsX2RpdiArIDEpOworCWRwbGxfY2xrID0gKGxvbmcgbG9uZyl0Y2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQ7CisJZG9fZGl2KGRwbGxfY2xrLCBkcGxsX2RpdiArIDEpOwogCWFtdWx0ID0gQ01fQ0xLU0VMMl9QTEwgJiAweDM7CiAJZHBsbF9jbGsgKj0gYW11bHQ7CiAKQEAgLTM4NSw3NSArMzg3LDIzIEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9pbml0X21lbW9yeV9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBkbGxfY250OwotCXUzMiBmYXN0X2RsbCA9IDA7Ci0KLQltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChTRFJDX01SXzAgJiAweDMpID09IDB4MSk7IC8qIEREUiA9IDEsIFNEUiA9IDAgKi8KLQotCS8qIDI0MjIgZXMyLjA1IGFuZCBiZXlvbmQgaGFzIGEgc2luZ2xlIFNJUCBERFIgaW5zdGVhZCBvZiAyIGxpa2Ugb3RoZXJzLgotCSAqIEluIHRoZSBjYXNlIG9mIDI0MjIsIGl0cyBvayB0byB1c2UgQ1MxIGluc3RlYWQgb2YgQ1MwLgotCSAqLwotCi0jaWYgMAkvKiBGSVhNRTogRW5hYmxlIGFmdGVyIDI0eHggY3B1IGRldGVjdGlvbiB3b3JrcyAqLwotCWN0eXBlID0gZ2V0X2NwdV90eXBlKCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQyMigpKQotCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMTsKLQllbHNlCi0jZW5kaWYKLQkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDA7Ci0KLQlpZiAobWVtX3RpbWluZ3MubV90eXBlICE9IE1fRERSKQotCQlyZXR1cm47Ci0KLQkvKiBXaXRoIEREUiB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbG93IGZyZXF1ZW5jeSBETEwgdmFsdWUgKi8KLQlpZiAoKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgKDEgPDwgMikpID09IE1fTE9DS19DVFJMKSkKLQkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX1VOTE9DSzsKLQllbHNlCi0JCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9MT0NLOwotCi0JaWYgKG1lbV90aW1pbmdzLmJhc2VfY3MgPT0gMCkgewotCQlmYXN0X2RsbCA9IFNEUkNfRExMQV9DVFJMOwotCQlkbGxfY250ID0gU0RSQ19ETExBX1NUQVRVUyAmIDB4ZmYwMDsKLQl9IGVsc2UgewotCQlmYXN0X2RsbCA9IFNEUkNfRExMQl9DVFJMOwotCQlkbGxfY250ID0gU0RSQ19ETExCX1NUQVRVUyAmIDB4ZmYwMDsKLQl9Ci0JaWYgKGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpIHsKLQkJZmFzdF9kbGwgJj0gfjB4ZmYwMDsKLQkJZmFzdF9kbGwgfD0gZGxsX2NudDsJCS8qIEN1cnJlbnQgbG9jayBtb2RlICovCi0JfQotCW1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgPSBmYXN0X2RsbDsKLQotCS8qIE5vIGRpc3J1cHRpb25zLCBERFIgd2lsbCBiZSBvZmZsaW5lICYgQy1BQkkgbm90IGZvbGxvd2VkICovCi0Jb21hcDJfc3JhbV9kZHJfaW5pdCgmbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKLQkJCSAgICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAotCQkJICAgIG1lbV90aW1pbmdzLmJhc2VfY3MsCi0JCQkgICAgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7Ci0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCAmPSAweGZmMDA7CS8qIEtlZXAgbG9jayB2YWx1ZSAqLwotCi0JLyogVHVybiBzdGF0dXMgaW50byB1bmxvY2sgY3RybCAqLwotCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0KLQkJKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgMHhGKSB8ICgxIDw8IDIpKTsKLQotCS8qIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYW55dGhpbmcgYmVsb3cgMTMzTWh6ICovCi0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PSAoMSA8PCAxKTsKLX0KLQogc3RhdGljIHUzMiBvbWFwMl9yZXByb2dyYW1fc2RyYyh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKIHsKKwl1MzIgc2xvd19kbGxfY3RybCwgZmFzdF9kbGxfY3RybCwgbV90eXBlOwogCXUzMiBwcmV2ID0gY3Vycl9wZXJmX2xldmVsLCBmbGFnczsKIAogCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCiAJCXJldHVybiBwcmV2OwogCisJbV90eXBlID0gb21hcDJfbWVtb3J5X2dldF90eXBlKCk7CisJc2xvd19kbGxfY3RybCA9IG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCgpOworCWZhc3RfZGxsX2N0cmwgPSBvbWFwMl9tZW1vcnlfZ2V0X2Zhc3RfZGxsX2N0cmwoKTsKKwogCWlmIChsZXZlbCA9PSBQUkNNX0hBTEZfU1BFRUQpIHsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlQUkNNX1ZPTFRTRVRVUCA9IDB4ZmZmZjsKIAkJb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyhQUkNNX0hBTEZfU1BFRUQsCi0JCQkJCSAgbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKLQkJCQkJICBtZW1fdGltaW5ncy5tX3R5cGUpOworCQkJCQkgIHNsb3dfZGxsX2N0cmwsIG1fdHlwZSk7CiAJCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fSEFMRl9TUEVFRDsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KQEAgLTQ2MSw4ICs0MTEsNyBAQAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCVBSQ01fVk9MVFNFVFVQID0gMHhmZmZmOwogCQlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwKLQkJCQkJICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAotCQkJCQkgIG1lbV90aW1pbmdzLm1fdHlwZSk7CisJCQkJCSAgZmFzdF9kbGxfY3RybCwgbV90eXBlKTsKIAkJY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQpAQCAtNjUwLDcgKzU5OSw3IEBACiAJCWNhc2UgMTM6CQkJCS8qIGRzczIgKi8KIAkJCW1hc2sgPSAweDE7IGJyZWFrOwogCQljYXNlIDI1OgkJCQkvKiB1c2IgKi8KLQkJCW1hc2sgPSAweGY7IGJyZWFrOworCQkJbWFzayA9IDB4NzsgYnJlYWs7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAppbmRleCA2Y2FiMjBiLi42Yzc4ZDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC0zMywyMCArMzMsNiBAQAogI2RlZmluZSBSQVRFX0lOXzI0MlgJKDEgPDwgMCkKICNkZWZpbmUgUkFURV9JTl8yNDNYCSgxIDw8IDEpCiAKLS8qIE1lbW9yeSB0aW1pbmdzICovCi0jZGVmaW5lIE1fRERSCQkxCi0jZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCi0jZGVmaW5lIE1fVU5MT0NLCTAKLSNkZWZpbmUgTV9MT0NLCQkxCi0KLXN0cnVjdCBtZW1vcnlfdGltaW5ncyB7Ci0JdTMyIG1fdHlwZTsJCS8qIGRkciA9IDEsIHNkciA9IDAgKi8KLQl1MzIgZGxsX21vZGU7CQkvKiB1c2UgbG9jayBtb2RlID0gMSwgdW5sb2NrIG1vZGUgPSAwICovCi0JdTMyIHNsb3dfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIHNsb3cgc3BlZWQgKi8KLQl1MzIgZmFzdF9kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3IgZmFzdCBzcGVlZCAqLwotCXUzMiBiYXNlX2NzOwkJLyogYmFzZSBjaGlwIHNlbGVjdCB0byB1c2UgZm9yIGNhbGN1bGF0aW9ucyAqLwotfTsKLQogLyogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KICAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSxDTV9DTEtTRUxfRFNQCiAgKiBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCkBAIC03MzEsNiArNzE3LDE2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CisJLm5hbWUJCT0gImVtdWxfY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtFTVVMX0NUUkwsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorCit9OworCiAvKgogICogTVBVIGNsb2NrIGRvbWFpbgogICoJQ2xvY2tzOgpAQCAtMTcwMiw3ICsxNjk4LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewotCS5uYW1lCQk9ICJpMmMyX2ljayIsCisJLm5hbWUJCT0gImkyY19pY2siLAorCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCkBAIC0xNzExLDcgKzE3MDgsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyYzJfZmNrIiwKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKQEAgLTE3MjksNyArMTcyNyw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKLQkubmFtZQkJPSAiaTJjMV9pY2siLAorCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLApAQCAtMTczOCw3ICsxNzM3LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0gewotCS5uYW1lCQk9ICJpMmMxX2ZjayIsCisJLm5hbWUJCT0gImkyY19mY2siLAorCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCkBAIC0xOTcxLDYgKzE5NzEsNyBAQAogCSZ3ZHQxX29zY19jaywKIAkmc3lzX2Nsa291dCwKIAkmc3lzX2Nsa291dDIsCisJJmVtdWxfY2ssCiAJLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KIAkmbXB1X2NrLAogCS8qIGRzcCBkb21haW4gY2xvY2tzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IDcxODFlZGIuLmZiN2Y5MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC0yNSwxMCArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAotZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCiAKICNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCkBAIC00OSw5ICs0NSw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UyID0gewogICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAogICAgICAgICAuaWQgICAgICAgICAgICAgPSAyLAotICAgICAgICAuZGV2ID0gewotICAgICAgICAgICAgICAgIC5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCi0gICAgICAgIH0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMyKSwKIAkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMiwKIH07CkBAIC03NCw2ICs2Nyw0NCBAQAogCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfU1RJKQorCisjZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQlJT19BRERSRVNTKDB4NDgwNjgwMDApCisjZGVmaW5lIE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UJMHg1NDAwMDAwMAorI2RlZmluZSBPTUFQMl9TVElfSVJRCQk0CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9CQVNFLAorCQkuZW5kCQk9IE9NQVAyX1NUSV9CQVNFICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UsCisJCS5lbmQJCT0gT01BUDJfU1RJX0NIQU5ORUxfQkFTRSArIFNaXzY0SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGlfZGV2aWNlID0geworCS5uYW1lCQk9ICJzdGkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3RpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc3RpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3RpKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzdGlfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3N0aSh2b2lkKSB7fQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQpAQCAtODIsNiArMTEzLDcgQEAKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwogCW9tYXBfaW5pdF9pMmMoKTsKKwlvbWFwX2luaXRfc3RpKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA4ZWE2N2JmLi43ZDU3MTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0xNiw5ICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcGZiLmg+CiAKIGV4dGVybiB2b2lkIG9tYXBfc3JhbV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKQEAgLTQzLDExICs0NywyNCBAQAogCX0KIH07CiAKLXZvaWQgX19pbml0IG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKQordm9pZCBfX2luaXQgb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKQogewogCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKworCS8qIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCisJICogbWRlc2MtPm1hcF9pbygpLCBidXQgd2UgbXVzdCBhbHNvIGRvIGl0IGhlcmUgYmVjYXVzZSBvZiB0aGUgQ1BVCisJICogcmV2aXNpb24gY2hlY2sgYmVsb3cuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCiAJb21hcDJfY2hlY2tfcmV2aXNpb24oKTsKIAlvbWFwX3NyYW1faW5pdCgpOworCW9tYXBmYl9yZXNlcnZlX21lbSgpOworfQorCit2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKQorewogCW9tYXAyX211eF9pbml0KCk7CiAJb21hcDJfY2xrX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTI1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYworICoKKyAqIE1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisKKyNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKKyNpbmNsdWRlICJtZW1vcnkuaCIKKworc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKKwordTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKQoreworCXJldHVybiBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsOworfQorCit1MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpCit7CisJcmV0dXJuIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmw7Cit9CisKK3UzMiBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gbWVtX3RpbWluZ3MubV90eXBlOworfQorCit2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CisJdTMyIGZhc3RfZGxsID0gMDsKKworCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKFNEUkNfTVJfMCAmIDB4MykgPT0gMHgxKTsgLyogRERSID0gMSwgU0RSID0gMCAqLworCisJLyogMjQyMiBlczIuMDUgYW5kIGJleW9uZCBoYXMgYSBzaW5nbGUgU0lQIEREUiBpbnN0ZWFkIG9mIDIgbGlrZSBvdGhlcnMuCisJICogSW4gdGhlIGNhc2Ugb2YgMjQyMiwgaXRzIG9rIHRvIHVzZSBDUzEgaW5zdGVhZCBvZiBDUzAuCisJICovCisJaWYgKGNwdV9pc19vbWFwMjQyMigpKQorCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMTsKKwllbHNlCisJCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAwOworCisJaWYgKG1lbV90aW1pbmdzLm1fdHlwZSAhPSBNX0REUikKKwkJcmV0dXJuOworCisJLyogV2l0aCBERFIgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGxvdyBmcmVxdWVuY3kgRExMIHZhbHVlICovCisJaWYgKCgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmICgxIDw8IDIpKSA9PSBNX0xPQ0tfQ1RSTCkpCisJCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9VTkxPQ0s7CisJZWxzZQorCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fTE9DSzsKKworCWlmIChtZW1fdGltaW5ncy5iYXNlX2NzID09IDApIHsKKwkJZmFzdF9kbGwgPSBTRFJDX0RMTEFfQ1RSTDsKKwkJZGxsX2NudCA9IFNEUkNfRExMQV9TVEFUVVMgJiAweGZmMDA7CisJfSBlbHNlIHsKKwkJZmFzdF9kbGwgPSBTRFJDX0RMTEJfQ1RSTDsKKwkJZGxsX2NudCA9IFNEUkNfRExMQl9TVEFUVVMgJiAweGZmMDA7CisJfQorCWlmIChmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKSB7CisJCWZhc3RfZGxsICY9IH4weGZmMDA7CisJCWZhc3RfZGxsIHw9IGRsbF9jbnQ7CQkvKiBDdXJyZW50IGxvY2sgbW9kZSAqLworCX0KKwkvKiBzZXQgZmFzdCB0aW1pbmdzIHdpdGggRExMIGZpbHRlciBkaXNhYmxlZCAqLworCW1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgPSAoZmFzdF9kbGwgfCAoMyA8PCA4KSk7CisKKwkvKiBObyBkaXNydXB0aW9ucywgRERSIHdpbGwgYmUgb2ZmbGluZSAmIEMtQUJJIG5vdCBmb2xsb3dlZCAqLworCW9tYXAyX3NyYW1fZGRyX2luaXQoJm1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwsCisJCQkgICAgbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCwKKwkJCSAgICBtZW1fdGltaW5ncy5iYXNlX2NzLAorCQkJICAgIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgJj0gMHhmZjAwOwkvKiBLZWVwIGxvY2sgdmFsdWUgKi8KKworCS8qIFR1cm4gc3RhdHVzIGludG8gdW5sb2NrIGN0cmwgKi8KKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9CisJCSgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmIDB4RikgfCAoMSA8PCAyKSk7CisKKwkvKiA5MCBkZWdyZWUgcGhhc2UgZm9yIGFueXRoaW5nIGJlbG93IDEzM01oeiArIGRpc2FibGUgRExMIGZpbHRlciAqLworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0gKCgxIDw8IDEpIHwgKDMgPDwgOCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxMmVlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKKyAqCisgKiBJbnRlcmZhY2UgZm9yIG1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKiBNZW1vcnkgdGltaW5ncyAqLworI2RlZmluZSBNX0REUgkJMQorI2RlZmluZSBNX0xPQ0tfQ1RSTAkoMSA8PCAyKQorI2RlZmluZSBNX1VOTE9DSwkwCisjZGVmaW5lIE1fTE9DSwkJMQorCitzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgeworCXUzMiBtX3R5cGU7CQkvKiBkZHIgPSAxLCBzZHIgPSAwICovCisJdTMyIGRsbF9tb2RlOwkJLyogdXNlIGxvY2sgbW9kZSA9IDEsIHVubG9jayBtb2RlID0gMCAqLworCXUzMiBzbG93X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBzbG93IHNwZWVkICovCisJdTMyIGZhc3RfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIGZhc3Qgc3BlZWQgKi8KKwl1MzIgYmFzZV9jczsJCS8qIGJhc2UgY2hpcCBzZWxlY3QgdG8gdXNlIGZvciBjYWxjdWxhdGlvbnMgKi8KK307CisKK2V4dGVybiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7CitleHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKTsKK2V4dGVybiB1MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpOworZXh0ZXJuIHUzMiBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBlYTQ2NTQ4Li4xMTk3ZGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTUwLDkgKzUwLDU0IEBACiAvKiBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KIE1VWF9DRkdfMjRYWCgiVzE5XzI0WFhfU1lTX05JUlEiLAkweDEyYywJMCwJMSwJMSwJMSkKIAorLyogMjR4eCBjbG9ja3MgKi8KK01VWF9DRkdfMjRYWCgiVzE0XzI0WFhfU1lTX0NMS09VVCIsCTB4MTM3LAkwLAkxLAkxLAkxKQorCisvKiAyNHh4IE1jQlNQICovCitNVVhfQ0ZHXzI0WFgoIlkxNV8yNFhYX01DQlNQMl9DTEtYIiwJMHgxMjQsCTEsCTEsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlIxNF8yNFhYX01DQlNQMl9GU1giLAkweDEyNSwJMSwJMSwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVzE1XzI0WFhfTUNCU1AyX0RSIiwJMHgxMjYsCTEsCTEsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlYxNV8yNFhYX01DQlNQMl9EWCIsCTB4MTI3LAkxLAkxLAkwLAkxKQorCiAvKiAyNHh4IEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiTTIxXzI0MlhfR1BJTzExIiwJIDB4MGM5LCAgMywgICAgICAxLCAgICAgIDEsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUExMF8yNDJYX0dQSU8xMyIsCTB4MGU1LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUE2XzI0MlhfR1BJTzE0IiwJIDB4MGU2LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUE0XzI0MlhfR1BJTzE1IiwJIDB4MGU3LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiWTExXzI0MlhfR1BJTzE2IiwJIDB4MGU4LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUExMl8yNDJYX0dQSU8xNyIsCTB4MGU5LCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiQUE4XzI0MlhfR1BJTzU4IiwJIDB4MGVhLCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKIE1VWF9DRkdfMjRYWCgiWTIwXzI0WFhfR1BJTzYwIiwJCTB4MTJjLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJXNF9fMjRYWF9HUElPNzQiLAkgMHgwZjIsICAzLCAgICAgIDAsICAgICAgMCwgICAgICAxKQogTVVYX0NGR18yNFhYKCJNMTVfMjRYWF9HUElPOTIiLAkJMHgxMGEsCTMsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlYxNF8yNFhYX0dQSU8xMTciLAkweDEyOCwJMywJMSwJMCwJMSkKKworLyogVFNDIElSUSAqLworTVVYX0NGR18yNFhYKCJQMjBfMjRYWF9UU0NfSVJRIiwJMHgxMDgsCTAsCTAsCTAsCTEpCisKKy8qIFVBUlQzICAqLworTVVYX0NGR18yNFhYKCJLMTVfMjRYWF9VQVJUM19UWCIsCTB4MTE4LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJLMTRfMjRYWF9VQVJUM19SWCIsCTB4MTE5LAkwLAkwLAkwLAkxKQorCisvKiBLZXlwYWQgR1BJTyovCitNVVhfQ0ZHXzI0WFgoIlQxOV8yNFhYX0tCUjAiLAkJMHgxMDYsCTMsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIlIxOV8yNFhYX0tCUjEiLAkJMHgxMDcsCTMsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIlYxOF8yNFhYX0tCUjIiLAkJMHgxMzksCTMsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIk0yMV8yNFhYX0tCUjMiLAkJMHhjOSwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiRTVfXzI0WFhfS0JSNCIsCQkweDEzOCwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiTTE4XzI0WFhfS0JSNSIsCQkweDEwZSwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiUjIwXzI0WFhfS0JDMCIsCQkweDEwOCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiTTE0XzI0WFhfS0JDMSIsCQkweDEwOSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSDE5XzI0WFhfS0JDMiIsCQkweDExNCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVjE3XzI0WFhfS0JDMyIsCQkweDEzNSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiUDIxXzI0WFhfS0JDNCIsCQkweGNhLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJMMTRfMjRYWF9LQkM1IiwJCTB4MTBmLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJOMTlfMjRYWF9LQkM2IiwJCTB4MTEwLAkzLAkwLAkwLAkxKQorCisvKiAyNHh4IE1lbmVsYXVzIEtleXBhZCBHUElPICovCitNVVhfQ0ZHXzI0WFgoIkIzX18yNFhYX0tCUjUiLAkJMHgzMCwJMywJMSwJMSwJMSkKK01VWF9DRkdfMjRYWCgiQUE0XzI0WFhfS0JDMiIsCQkweGU3LAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJCMTNfMjRYWF9LQkM2IiwJCTB4MTEwLAkzLAkwLAkwLAkxKQogCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyMTY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworICoKKyAqIE9NQVAyIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogQmFzZWQgb24gcG0uYyBmb3Igb21hcDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworc3RhdGljIHN0cnVjdCBjbGsgKnZjbGs7CitzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1faWRsZSkodm9pZCk7CitzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1fc3VzcGVuZCkoaW50IGRsbGN0cmwsIGludCBjcHVfcmV2KTsKK3N0YXRpYyB2b2lkICgqc2F2ZWRfaWRsZSkodm9pZCk7CisKK3ZvaWQgb21hcDJfcG1faWRsZSh2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfZmlxX2Rpc2FibGUoKTsKKwlpZiAobmVlZF9yZXNjaGVkKCkpIHsKKwkJbG9jYWxfZmlxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIGFuIGludGVycnVwdCBtYXkgc2V0IHVwIGEgdGltZXIsIHdlIGRvbid0IHdhbnQgdG8KKwkgKiByZXByb2dyYW0gdGhlIGhhcmR3YXJlIHRpbWVyIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgorCSAqIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gaWRsZS4KKwkgKi8KKwl0aW1lcl9keW5fcmVwcm9ncmFtKCk7CisKKwlvbWFwMl9zcmFtX2lkbGUoKTsKKwlsb2NhbF9maXFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IG9tYXAyX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBXZSBjYW5ub3Qgc2xlZXAgaW4gaWRsZSB1bnRpbCB3ZSBoYXZlIHJlc3VtZWQgKi8KKwlzYXZlZF9pZGxlID0gcG1faWRsZTsKKwlwbV9pZGxlID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpCisJeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCS8qIEZJWE1FOiBBZGQgc3VzcGVuZCAqLworCQlicmVhazsKKworCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlwbV9pZGxlID0gc2F2ZWRfaWRsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbV9vcHMgb21hcF9wbV9vcHMgPSB7CisJLnBtX2Rpc2tfbW9kZQk9IDAsCisJLnByZXBhcmUJPSBvbWFwMl9wbV9wcmVwYXJlLAorCS5lbnRlcgkJPSBvbWFwMl9wbV9lbnRlciwKKwkuZmluaXNoCQk9IG9tYXAyX3BtX2ZpbmlzaCwKK307CisKK2ludCBfX2luaXQgb21hcDJfcG1faW5pdCh2b2lkKQoreworCXByaW50aygiUG93ZXIgTWFuYWdlbWVudCBmb3IgVEkgT01BUC5cbiIpOworCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlpZiAoSVNfRVJSKHZjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBQTSB2Y2xrXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyoKKwkgKiBXZSBjb3B5IHRoZSBhc3NlbWJsZXIgc2xlZXAvd2FrZXVwIHJvdXRpbmVzIHRvIFNSQU0uCisJICogVGhlc2Ugcm91dGluZXMgbmVlZCB0byBiZSBpbiBTUkFNIGFzIHRoYXQncyB0aGUgb25seQorCSAqIG1lbW9yeSB0aGUgTVBVIGNhbiBzZWUgd2hlbiBpdCB3YWtlcyB1cC4KKwkgKi8KKwlvbWFwMl9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCwKKwkJCQkJIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKKworCW9tYXAyX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAyNHh4X2NwdV9zdXNwZW5kLAorCQkJCQkgICAgb21hcDI0eHhfY3B1X3N1c3BlbmRfc3opOworCisJcG1fc2V0X29wcygmb21hcF9wbV9vcHMpOworCXBtX2lkbGUgPSBvbWFwMl9wbV9pZGxlOworCisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwob21hcDJfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1yZWdzLmgKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1yZWdzLmgKaW5kZXggMmViODliOS4uMjJhYzdiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZ3MuaApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBwcmNtLmggLSBBY2Nlc3MgZGVmaW5hdGlvbnMgZm9yIHVzZSBpbiBPTUFQMjRYWCBjbG9jayBhbmQgcG93ZXIgbWFuYWdlbWVudAorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZy5oCisgKgorICogT01BUDI0WFggUG93ZXIgUmVzZXQgYW5kIENsb2NrIE1hbmFnZW1lbnQgKFBSQ00pIHJlZ2lzdGVycwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgogICoKQEAgLTE4LDggKzIwLDggQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICi0jZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSQ01fSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJDTV9ICiAKIC8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCiAjZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCkBAIC0xNTksNTQgKzE2MSw2MyBAQAogI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQogI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQogI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9NRE0JCVBSQ01fUkVHMzIoMHhDMzApCiAjZGVmaW5lIENNX0NMS1NFTF9NRE0JCVBSQ01fUkVHMzIoMHhDNDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9NRE0JUFJDTV9SRUczMigweEM0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9NRE0JCVBSQ01fUkVHMzIoMHhDNTApCisjZGVmaW5lIFJNX1JTVFNUX01ETQkJUFJDTV9SRUczMigweEM1OCkKKyNkZWZpbmUgUE1fV0tFTl9NRE0JCVBSQ01fUkVHMzIoMHhDQTApCisjZGVmaW5lIFBNX1dLU1RfTURNCQlQUkNNX1JFRzMyKDB4Q0IwKQorI2RlZmluZSBQTV9XS0RFUF9NRE0JCVBSQ01fUkVHMzIoMHhDQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX01ETQkJUFJDTV9SRUczMigweENFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX01ETQkJUFJDTV9SRUczMigweENFNCkKIAotLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCi0jZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfTDRfSU9fQkFTRQkweDQ4MDAwMDAwCisKKyNkZWZpbmUgRElTUF9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NTAwMDApCiAjZGVmaW5lIERJU1BfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKERJU1BfQkFTRSArIChvZmZzZXQpKQogCi0jZGVmaW5lIEdQTUNfQkFTRQkJKE9NQVAyNFhYX0dQTUNfQkFTRSkKLSNkZWZpbmUgR1BNQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BNQ19CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIE9NQVAyNFhYX0dQTUNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHhhMDAwKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihPTUFQMjRYWF9HUE1DX0JBU0UgKyAob2Zmc2V0KSkKIAotI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorLyogRklYTUU6IE1vdmUgdGhlc2UgdG8gdGltZXIgY29kZSAqLworI2RlZmluZSBHUFQxX0JBU0UJCSgweDQ4MDI4MDAwKQogI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKIAogLyogTWlzYyBzeXNjb25maWcgKi8KICNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQotI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgU1BJX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg5ODAwMCkKICNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKLSNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisjZGVmaW5lIE1DU1BJMl9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MjAwMCArIDB4MTApCisjZGVmaW5lIE1DU1BJM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHhiODAxMCkKIAotLy8jZGVmaW5lIERTUF9NTVVfU1lTQ09ORklHCTB4NUEwMDAwMTAKLSNkZWZpbmUgQ0FNRVJBX01NVV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyQzEwKQotLy8jZGVmaW5lIElWQV9NTVVfU1lTQ09ORklHCTB4NUQwMDAwMTAKLS8vI2RlZmluZSBEU1BfRE1BX1NZU0NPTkZJRwkweDAwRkNDMDJDCi0jZGVmaW5lIENBTUVSQV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MjgyQykKLSNkZWZpbmUgU1lTVEVNX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHg2MDJDKQorI2RlZmluZSBDQU1FUkFfTU1VX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSArIDB4MkMxMCkKKyNkZWZpbmUgQ0FNRVJBX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UgKyAweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFICsgMHg2MDJDKQogI2RlZmluZSBHUE1DX1NZU0NPTkZJRwkJR1BNQ19SRUczMigweDAxMCkKLSNkZWZpbmUgTUFJTEJPWEVTX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5NDAxMCkKLSNkZWZpbmUgVUFSVDFfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QTA1NCkKLSNkZWZpbmUgVUFSVDJfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QzA1NCkKLSNkZWZpbmUgVUFSVDNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2RTA1NCkKLS8vI2RlZmluZSBJVkFfU1lTQ09ORklHCQkweDVDMDYwMDEwCi0jZGVmaW5lIFNEUkNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDEwKQotI2RlZmluZSBTTVNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NNU19CQVNFKzB4MTApCi0jZGVmaW5lIFNTSV9TWVNDT05GSUcJCV9fUkVHMzIoRElTUF9CQVNFKzB4ODAxMCkKLS8vI2RlZmluZSBWTFlOUV9TWVNDT05GSUcJMHg2N0ZGRkUxMAorI2RlZmluZSBNQUlMQk9YRVNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg2QTA1NCkKKyNkZWZpbmUgVUFSVDJfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDZDMDU0KQorI2RlZmluZSBVQVJUM19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NkUwNTQpCisjZGVmaW5lIFNEUkNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVAyNFhYX1NNU19CQVNFCShMM18yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIFNNU19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU01TX0JBU0UgKyAweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSArIDB4ODAxMCkKIAogLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHgyQTAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDc4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ0CQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg3QzAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUNgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDdFMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ3CQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg4MjAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUOQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDg0MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDg4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDhBMDAwKQogCisvKiBGSVhNRTogTW92ZSB0aGVzZSB0byB0aW1lciBjb2RlICovCiAjZGVmaW5lIEdQVElNRVIxX1NZU0NPTkZJRwlHUFQxX1JFRzMyKDB4MDEwKQogI2RlZmluZSBHUFRJTUVSMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQyICsgMHgxMCkKICNkZWZpbmUgR1BUSU1FUjNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMyArIDB4MTApCkBAIC0yMjAsMTIgKzIzMSwxOCBAQAogI2RlZmluZSBHUFRJTUVSMTFfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTEgKyAweDEwKQogI2RlZmluZSBHUFRJTUVSMTJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTIgKyAweDEwKQogCi0jZGVmaW5lIEdQSU9YX0JBU0UoWCkJCShPTUFQMjRYWF9HUElPX0JBU0UrKDB4MjAwMCooKFgpLTEpKSkKKy8qIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIGdwaW8gY29kZSAqLworI2RlZmluZSBPTUFQMjRYWF9HUElPX0JBU0UJMHg0ODAxODAwMAorI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFICsgKDB4MjAwMCAqICgoWCkgLSAxKSkpCiAKLSNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQotI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCi0jZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKLSNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorI2RlZmluZSBHUElPMV9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMSkgKyAweDEwKSkKKyNkZWZpbmUgR1BJTzJfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDIpICsgMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSArIDB4MTApKQorI2RlZmluZSBHUElPNF9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoNCkgKyAweDEwKSkKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0M1gpCisjZGVmaW5lIEdQSU81X1NZU0NPTkZJRwkJX19SRUczMigoT01BUDI0WFhfR1BJTzVfQkFTRSArIDB4MTApKQorI2VuZGlmCiAKIC8qIEdQIFRJTUVSIDEgKi8KICNkZWZpbmUgR1BUSU1FUjFfVElTVEFUCQlHUFQxX1JFRzMyKDB4MDE0KQpAQCAtMjQzLDE1ICsyNjAsMTUgQEAKICNkZWZpbmUgR1BUSU1FUjFfVENBUjIJCUdQVDFfUkVHMzIoMHgwNDQpCiAKIC8qIHJrdyAtLSBiYXNlIGZpeCB1cCBwbGVhc2UuLi4gKi8KLSNkZWZpbmUgR1BUSU1FUjNfVElTUgkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMTgpCisjZGVmaW5lIEdQVElNRVIzX1RJU1IJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NzgwMTgpCiAKIC8qIFNEUkMgKi8KLSNkZWZpbmUgU0RSQ19ETExBX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDYwKQotI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY0KQotI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjgpCi0jZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNkMpCi0jZGVmaW5lIFNEUkNfUE9XRVIJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDcwKQotI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDg0KQorI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2MCkKKyNkZWZpbmUgU0RSQ19ETExBX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDY0KQorI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDZDKQorI2RlZmluZSBTRFJDX1BPV0VSCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDcwKQorI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwODQpCiAKIC8qIEdQSU8gMSAqLwogI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCkBAIC0yNzgsNiArMjk1LDggQEAKICNkZWZpbmUgR1BJTzJfREFUQUlOCQlHUElPMl9SRUczMigweDAzOCkKICNkZWZpbmUgR1BJTzJfT0UJCUdQSU8yX1JFRzMyKDB4MDM0KQogI2RlZmluZSBHUElPMl9EQVRBT1VUCQlHUElPMl9SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzJfREVCT1VOQ0VOQUJMRQlHUElPMl9SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzJfREVCT1VOQ0lOR1RJTUUJR1BJTzJfUkVHMzIoMHgwNTQpCiAKIC8qIEdQSU8gMyAqLwogI2RlZmluZSBHUElPM19CQVNFCQlHUElPWF9CQVNFKDMpCkBAIC0yOTQsNiArMzEzLDggQEAKICNkZWZpbmUgR1BJTzNfREFUQU9VVAkJR1BJTzNfUkVHMzIoMHgwM0MpCiAjZGVmaW5lIEdQSU8zX0RFQk9VTkNFTkFCTEUJR1BJTzNfUkVHMzIoMHgwNTApCiAjZGVmaW5lIEdQSU8zX0RFQk9VTkNJTkdUSU1FCUdQSU8zX1JFRzMyKDB4MDU0KQorI2RlZmluZSBHUElPM19ERUJPVU5DRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPM19ERUJPVU5DSU5HVElNRQlHUElPM19SRUczMigweDA1NCkKIAogLyogR1BJTyA0ICovCiAjZGVmaW5lIEdQSU80X0JBU0UJCUdQSU9YX0JBU0UoNCkKQEAgLTMxMSwxMCArMzMyLDI2IEBACiAjZGVmaW5lIEdQSU80X0RFQk9VTkNFTkFCTEUJR1BJTzRfUkVHMzIoMHgwNTApCiAjZGVmaW5lIEdQSU80X0RFQk9VTkNJTkdUSU1FCUdQSU80X1JFRzMyKDB4MDU0KQogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzWCkKKy8qIEdQSU8gNSAqLworI2RlZmluZSBHUElPNV9SRUczMihvZmZzZXQpCV9fUkVHMzIoKE9NQVAyNFhYX0dQSU81X0JBU0UgKyAob2Zmc2V0KSkpCisjZGVmaW5lIEdQSU81X0lSUUVOQUJMRTEJR1BJTzVfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU81X0lSUVNUQVRVUzEJR1BJTzVfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU81X0lSUUVOQUJMRTIJR1BJTzVfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU81X0lSUVNUQVRVUzIJR1BJTzVfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU81X1dBS0VVUEVOQUJMRQlHUElPNV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzVfUklTSU5HREVURUNUCUdQSU81X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNV9GQUxMSU5HREVURUNUCUdQSU81X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNV9EQVRBSU4JCUdQSU81X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNV9PRQkJR1BJTzVfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU81X0RBVEFPVVQJCUdQSU81X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNV9ERUJPVU5DRU5BQkxFCUdQSU81X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNV9ERUJPVU5DSU5HVElNRQlHUElPNV9SRUczMigweDA1NCkKKyNlbmRpZgogCiAvKiBJTyBDT05GSUcgKi8KLSNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQotI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgT01BUDI0WFhfQ1RSTF9CQVNFCQkoTDRfMjRYWF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJCV9fUkVHMzIoT01BUDI0WFhfQ1RSTF9CQVNFICsgKG9mZnNldCkpCiAKICNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMglDT05UUk9MX1JFRzMyKDB4MTA0KQogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVQJQ09OVFJPTF9SRUczMigweDEzNCkKQEAgLTMyMiwxNSArMzU5LDE4IEBACiAjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgJQ09OVFJPTF9SRUczMigweDEwQykKICNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNAlDT05UUk9MX1JFRzMyKDB4MDkwKQogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q1CQlDT05UUk9MX1JFRzMyKDB4MEI4KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQkvKiAyNDIwICovCiAjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQogI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfTklSUVcwCUNPTlRST0xfUkVHMzIoMHgwQkMpCS8qIDI0MzAgKi8KKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NTSTFfRkxBR19UWAlDT05UUk9MX1JFRzMyKDB4MTA4KQkvKiAyNDMwICovCiAKIC8qIENPTlRST0wgKi8KICNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorI2RlZmluZSBDT05UUk9MX0RFVkNPTkYxCUNPTlRST0xfUkVHMzIoMHgyRTgpCiAKIC8qIElOVEVSUlVQVCBDT05UUk9MTEVSICovCi0jZGVmaW5lIElOVENfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHhmZTAwMCkKKyNkZWZpbmUgSU5UQ19CQVNFCQkoKEw0XzI0WFhfQkFTRSkgKyAweGZlMDAwKQogI2RlZmluZSBJTlRDX1JFRzMyKG9mZnNldCkJX19SRUczMihJTlRDX0JBU0UgKyAob2Zmc2V0KSkKIAogI2RlZmluZSBJTlRDMV9VX0JBU0UJCUlOVENfUkVHMzIoMHgwMDApCkBAIC0zNDgsMTAgKzM4OCwxMiBAQAogI2RlZmluZSBJTlRDX0lTUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwRDQpCiAjZGVmaW5lIElOVENfU0lSX0lSUQkJSU5UQ19SRUczMigweDA0MCkKICNkZWZpbmUgSU5UQ19DT05UUk9MCQlJTlRDX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQorI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQkvKiBQUkNNIG9uIE1QVSBQSUMgKi8KKyNkZWZpbmUgSU5UQ19JTFIzMAkJSU5UQ19SRUczMigweDE3OCkKKyNkZWZpbmUgSU5UQ19JTFIzMQkJSU5UQ19SRUczMigweDE3QykKICNkZWZpbmUgSU5UQ19JTFIzMgkJSU5UQ19SRUczMigweDE4MCkKLSNkZWZpbmUgSU5UQ19JTFIzNwkJSU5UQ19SRUczMigweDE5NCkKLSNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCS8qIEdQSU80IG9uIE1QVSBQSUMgKi8KKyNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCS8qIEdQVDEgb24gTVBVIFBJQyAqLwogCiAvKiBSQU0gRklSRVdBTEwgKi8KICNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCkBAIC0zNzMsNiArNDE1LDI0IEBACiAjZGVmaW5lIEdQTUNfQ09ORklHNl8wCQlHUE1DX1JFRzMyKDB4MDc0KQogI2RlZmluZSBHUE1DX0NPTkZJRzdfMAkJR1BNQ19SRUczMigweDA3OCkKIAorLyogR1BNQyBDUzEgKi8KKyNkZWZpbmUgR1BNQ19DT05GSUcxXzEJCUdQTUNfUkVHMzIoMHgwOTApCisjZGVmaW5lIEdQTUNfQ09ORklHMl8xCQlHUE1DX1JFRzMyKDB4MDk0KQorI2RlZmluZSBHUE1DX0NPTkZJRzNfMQkJR1BNQ19SRUczMigweDA5OCkKKyNkZWZpbmUgR1BNQ19DT05GSUc0XzEJCUdQTUNfUkVHMzIoMHgwOUMpCisjZGVmaW5lIEdQTUNfQ09ORklHNV8xCQlHUE1DX1JFRzMyKDB4MGEwKQorI2RlZmluZSBHUE1DX0NPTkZJRzZfMQkJR1BNQ19SRUczMigweDBhNCkKKyNkZWZpbmUgR1BNQ19DT05GSUc3XzEJCUdQTUNfUkVHMzIoMHgwYTgpCisKKy8qIEdQTUMgQ1MzICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8zCQlHUE1DX1JFRzMyKDB4MEYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMwkJR1BNQ19SRUczMigweDBGNCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzMJCUdQTUNfUkVHMzIoMHgwRjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8zCQlHUE1DX1JFRzMyKDB4MEZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMwkJR1BNQ19SRUczMigweDEwMCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzMJCUdQTUNfUkVHMzIoMHgxMDQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18zCQlHUE1DX1JFRzMyKDB4MTA4KQorCiAvKiBEU1MgKi8KICNkZWZpbmUgRFNTX0NPTlRST0wJCURJU1BfUkVHMzIoMHgwNDApCiAjZGVmaW5lIERJU1BDX0NPTlRST0wJCURJU1BfUkVHMzIoMHg0NDApCkBAIC00MDUsMTEgKzQ2NSwxNSBAQAogI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMglESVNQX1JFRzMyKDB4NUQ4KQogI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwlESVNQX1JFRzMyKDB4NURDKQogCi0vKiBXYWtlIHVwIGRlZmluZSBmb3IgYm9hcmQgKi8KLSNkZWZpbmUgR1BJTzk3CQkJKDEgPDwgMSkKLSNkZWZpbmUgR1BJTzg4CQkJKDEgPDwgMjQpCisvKiBIU1VTQiBTdXNwZW5kICovCisjZGVmaW5lIEhTVVNCX0NUUkwJCV9fUkVHOCgweDQ4MEFDMDAxKQorI2RlZmluZSBVU0JPVEdfUE9XRVIJCV9fUkVHMzIoMHg0ODBBQzAwMCkKIAotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KKy8qIEhTIE1NQyAqLworI2RlZmluZSBNTUNIUzFfU1lTQ09ORklHCV9fUkVHMzIoMHg0ODA5QzAxMCkKKyNkZWZpbmUgTU1DSFMyX1NZU0NPTkZJRwlfX1JFRzMyKDB4NDgwYjQwMTApCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxFUl9fICovCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYwpAQCAtMCwwICsxLDQwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKKyAqCisgKiBPTUFQIDI0eHggUG93ZXIgUmVzZXQgYW5kIENsb2NrIE1hbmFnZW1lbnQgKFBSQ00pIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CisgKgorICogU29tZSBwaWVjZXMgb2YgY29kZSBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSAicHJjbS1yZWdzLmgiCisKK3UzMiBvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCkKK3sKKwlyZXR1cm4gUk1fUlNUU1RfV0tVUCAmIDB4N2Y7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyk7CisKKy8qIFJlc2V0cyBjbG9jayByYXRlcyBhbmQgcmVib290cyB0aGUgc3lzdGVtLiBPbmx5IGNhbGxlZCBmcm9tIHN5c3RlbS5oICovCit2b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl1MzIgcmF0ZTsKKwlzdHJ1Y3QgY2xrICp2Y2xrLCAqc2NsazsKKworCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7CisJc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisJY2xrX3NldF9yYXRlKHZjbGssIHJhdGUpOwkvKiBnbyB0byBieXBhc3MgZm9yIE9NQVAgbGltaXRhdGlvbiAqLworCVJNX1JTVENUUkxfV0tVUCB8PSAyOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjk5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgL1BVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCisjZGVmaW5lIEFfMzJLU1lOQ19DUl9WCQlJT19BRERSRVNTKE9NQVBfVElNRVIzMktfQkFTRSsweDEwKQorI2RlZmluZSBBX1BSQ01fVk9MVENUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDUwKQorI2RlZmluZSBBX1BSQ01fQ0xLQ0ZHX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDgwKQorI2RlZmluZSBBX0NNX0NMS0VOX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKzB4NTAwKQorI2RlZmluZSBBX0NNX0lETEVTVF9DS0dFTl9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKzB4NTIwKQorI2RlZmluZSBBX0NNX0NMS1NFTDFfUExMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UrMHg1NDApCisjZGVmaW5lIEFfQ01fQ0xLU0VMMl9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDU0NCkKKworI2RlZmluZSBBX1NEUkNfRExMQV9DVFJMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UrMHg2MCkKKyNkZWZpbmUJQV9TRFJDX1BPV0VSX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFKzB4NzApCisjZGVmaW5lIEFfU0RSQ19SRlJfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFKzB4QTQpCisjZGVmaW5lIEFfU0RSQzBfVgkJKDB4QzAwMDAwMDApCisjZGVmaW5lIEFfU0RSQ19NQU5VQUxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UrMHhBOCkKKworCS50ZXh0CisKKy8qCisgKiBGb3JjZXMgT01BUCBpbnRvIGlkbGUgc3RhdGUKKyAqCisgKiBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBqdXN0IGV4ZWN1dGVzIHRoZSBXRkkKKyAqIGZvciBub3JtYWwgaWRsZXMuCisgKgorICogTm90ZTogVGhpcyBjb2RlIGdldCdzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGF0IGJvb3QuIFdoZW4gdGhlIE9NQVAKKyAqCSB3YWtlcyB1cCBpdCBjb250aW51ZXMgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCBpdCB3ZW50IHRvIHNsZWVwLgorICovCitFTlRSWShvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyMCwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIwLCAjMAkJCUAgY2xlYXIgZm9yIG1jciBzZXR1cAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlsZG1mZAlzcCEsIHtyMCwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0VOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZAorCisvKgorICogb21hcDI0MnhfY3B1X3N1c3BlbmQoKSAtIEZvcmNlcyBPTUFQIGludG8gZGVlcCBzbGVlcCBzdGF0ZSBieSBjb21wbGV0aW5nCisgKiBTRFJDIHNodXRkb3duIHRoZW4gQVJNIHNodXRkb3duLiAgVXBvbiB3YWtlIE1QVSBpcyBiYWNrIG9uIHNvIGp1c3QgcmVzdG9yZQorICogU0RSQy4KKyAqCisgKiBJbnB1dDoKKyAqIFIwIDoJRExMIGN0cmwgdmFsdWUgcHJlLVNsZWVwCisgKiBSMSA6IFByb2Nlc3NvcitSZXZpc2lvbgorICoJMjQyMDogMHgyMSA9IDI0MnhFUzEsIDB4MjYgPSAyNDJ4RVMyLjIKKyAqCTI0MzA6IDB4MzEgPSAyNDMwRVMxLCAweDMyID0gMjQzMEVTMgorICoKKyAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgorICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCisgKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KKyAqIGlmIGluIHVubG9ja2VkIG1vZGUuCisgKgorICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKKyAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegorICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCisgKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCisgKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCisgKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKKyAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KKyAqCisgKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKyAqIGF0IHdha2UKKyAqLworRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAorCW5vcAorCW5vcAorCWxkcglyMywgQV9TRFJDX1BPV0VSCUAgYWRkciBvZiBzZHJjIHBvd2VyCisJbGRyCXI0LCBbcjNdCQlAIHZhbHVlIG9mIHNkcmMgcG93ZXIKKwlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQorCXN0cglyNCwgW3IzXQkJQCBtYWtlIGl0IHNvCisJbW92CXIyLCAjMAorCW5vcAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlub3AKK2xvb3A6CisJc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAorCWJuZQlsb29wCisKKwkvKiBUaGUgRFBMTCBoYXMgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCisJYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCisJc3RyCXI0LCBbcjNdCQlAIHB1dCB2bGF1ZSBiYWNrLgorCWxkcglyNCwgQV9TRFJDMAkJQCBtYWtlIGEgY2xvY2sgaGFwcGVuCisJbGRyCXI0LCBbcjRdCisJbm9wCQkJCUAgc3RhcnQgYXV0byByZWZyZXNoIG9ubHkgYWZ0ZXIgY2xrIG9rCisJbW92cwlyMCwgcjAJCQlAIHNlZSBpZiBERFIgb3IgU0RSCisJbGRybmUJcjEsIEFfU0RSQ19ETExBX0NUUkxfUwlAIGdldCBhZGRyIG9mIERMTCBjdHJsCisJc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExBIHRvIGZvcmNlIERMTCByZWxvYWQKKwlhZGRuZQlyMSwgcjEsICMweDgJCUAgbW92ZSB0byBETExCCisJc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExCIHRvIGZvcmNlIERMTCByZWxvYWQKKworCW1vdglyNSwgIzB4MTAwMAorbG9vcDI6CisJc3VicwlyNSwgcjUsICMweDEKKwlibmUJbG9vcDIKKwkvKiByZXN1bWUqLworCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCitBX1NEUkNfUE9XRVI6CisJLndvcmQgQV9TRFJDX1BPV0VSX1YKK0FfU0RSQzA6CisJLndvcmQgQV9TRFJDMF9WCitBX0NNX0NMS1NFTDJfUExMX1M6CisJLndvcmQgQV9DTV9DTEtTRUwyX1BMTF9WCitBX0NNX0NMS0VOX1BMTDoKKwkud29yZCBBX0NNX0NMS0VOX1BMTF9WCitBX1NEUkNfRExMQV9DVFJMX1M6CisJLndvcmQgQV9TRFJDX0RMTEFfQ1RSTF9WCitBX1NEUkNfTUFOVUFMX1M6CisJLndvcmQgQV9TRFJDX01BTlVBTF9WCisKK0VOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9jcHVfc3VzcGVuZAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCmluZGV4IDJhODY5ZTIuLmQyNjFlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvc3JhbS5TCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uUwogICoKICAqIE9tYXAyIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KICAqCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKyNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKIAogI2RlZmluZSBUSU1FUl8zMktTWU5DVF9DUl9WCUlPX0FERFJFU1MoT01BUDI0WFhfMzJLU1lOQ1RfQkFTRSArIDB4MDEwKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCmluZGV4IGIzNzFkNzIuLjhhMjVhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCkBAIC0xOTYsMTIgKzE5Niw5IEBACiAJaW50IHJldDsKIAogCS8qIENoaXAgU2VsZWN0IC0gRGlzYWJsZSBBbGwgKi8KLQlHUERSKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKSB8PSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7IC8qIG91dHB1dCAqLwotCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOyAgLyogSGlnaCAtIERpc2FibGUgTENEIENvbnRyb2wvVGltaW5nIEdlbiAqLwotCUdQRFIoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSB8PSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX21heDExMTEpOyAvKiBvdXRwdXQgKi8KLQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSkgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX21heDExMTEpOyAgLyogSGlnaCAtIERpc2FibGUgTUFYMTExMSovCi0JR1BEUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpIHw9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0Nik7ICAvKiBvdXRwdXQgKi8KLQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOyAgIC8qIEhpZ2ggLSBEaXNhYmxlIEFEUzc4NDYqLworCXB4YV9ncGlvX21vZGUoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24gIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisgICAgICAgIHB4YV9ncGlvX21vZGUoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisgICAgICAgIHB4YV9ncGlvX21vZGUoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2IHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CiAKIAlyZXQgPSBzc3BfaW5pdCgmY29yZ2lfc3NwX2Rldiwgc3NwX21hY2hpbmZvLT5wb3J0LCAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYwppbmRleCA0NTgxMTJiLi43ZDhjODU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYwpAQCAtNDUsMjMgKzQ1LDE2IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KLQlmb3IgKGkgPSBwcmlvOyBpIDwgcHJpbyArIFBYQV9ETUFfTkJDSChwcmlvKTsgaSsrKSB7Ci0JCWlmICghZG1hX2NoYW5uZWxzW2ldLm5hbWUpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQkvKiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgaGllciBwcmlvcml0aWVzICovCi0JCWZvciAoaSA9IHByaW8tMTsgaSA+PSAwOyBpLS0pIHsKKwlkbyB7CisJCS8qIHRyeSBncmFiYmluZyBhIERNQSBjaGFubmVsIHdpdGggdGhlIHJlcXVlc3RlZCBwcmlvcml0eSAqLworCQlweGFfZm9yX2VhY2hfZG1hX3ByaW8gKGksIHByaW8pIHsKIAkJCWlmICghZG1hX2NoYW5uZWxzW2ldLm5hbWUpIHsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQl9CisJCS8qIGlmIHJlcXVlc3RlZCBwcmlvIGdyb3VwIGlzIGZ1bGwsIHRyeSBhIGhpZXIgcHJpb3JpdHkgKi8KKwl9IHdoaWxlICghZm91bmQgJiYgcHJpby0tKTsKIAogCWlmIChmb3VuZCkgewogCQlEQ1NSKGkpID0gRENTUl9TVEFSVElOVFJ8RENTUl9FTkRJTlRSfERDU1JfQlVTRVJSOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwppbmRleCA5ODM1NmY4Li5iMzA3ZjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtOTUsNyArOTUsMTAgQEAKIAlmb3IoaXJxID0gTUFJTlNUT05FX0lSUSgwKTsgaXJxIDw9IE1BSU5TVE9ORV9JUlEoMTUpOyBpcnErKykgewogCQlzZXRfaXJxX2NoaXAoaXJxLCAmbWFpbnN0b25lX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJaWYgKGlycSA9PSBNQUlOU1RPTkVfSVJRKDEwKSB8fCBpcnEgPT0gTUFJTlNUT05FX0lSUSgxNCkpCisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUgfCBJUlFGX05PQVVUT0VOKTsKKwkJZWxzZQorCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKIAl9CiAJc2V0X2lycV9mbGFncyhNQUlOU1RPTkVfSVJRKDgpLCAwKTsKIAlzZXRfaXJxX2ZsYWdzKE1BSU5TVE9ORV9JUlEoMTIpLCAwKTsKQEAgLTQ5MCw2ICs0OTMsNyBAQAogTUFDSElORV9TVEFSVChNQUlOU1RPTkUsICJJbnRlbCBIQ0REQkJWQTAgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKGFrYSBNYWluc3RvbmUpIikKIAkvKiBNYWludGFpbmVyOiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKi8KIAkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwJLyogQkxPQiBib290IHBhcmFtZXRlciBzZXR0aW5nICovCiAJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLm1hcF9pbwkJPSBtYWluc3RvbmVfbWFwX2lvLAogCS5pbml0X2lycQk9IG1haW5zdG9uZV9pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggYjQ1NTYwYS4uYTA0MjQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTMwNyw2ICszMDcsMTAgQEAKIAkJc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsIHN0cnVjdCBtZW1pbmZvICptaSkKIHsKIAlzaGFycHNsX3NhdmVfcGFyYW0oKTsKKwltaS0+bnJfYmFua3M9MTsKKwltaS0+YmFua1swXS5zdGFydCA9IDB4YTAwMDAwMDA7CisJbWktPmJhbmtbMF0ubm9kZSA9IDA7CisJbWktPmJhbmtbMF0uc2l6ZSA9ICgzMioxMDI0KjEwMjQpOwogfQogCiBNQUNISU5FX1NUQVJUKFBPT0RMRSwgIlNIQVJQIFBvb2RsZSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCAxOWIzNzJkLi40NGJjYjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTM3MSw2ICszNzEsNyBAQAogc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewogCS5wb3J0X21vZGUJPSBQTU1fTlBTX01PREUsCiAJLmluaXQJCT0gc3BpdHpfb2hjaV9pbml0LAorCS5wb3dlcl9idWRnZXQJPSAxNTAsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCBkNGE1ODZlLi42OTNmYjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0xMzcsOCArMTM3LDExIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1JFQUxWSUVXX01QQ09SRQorCXVuc2lnbmVkIGludCBwbGRjdHJsOwogCXdyaXRlbCgweDAwMDBhMDVmLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spKTsKLQl3cml0ZWwoMHgwMDgwMDNjMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIDB4ZDgpOworCXBsZGN0cmwgPSByZWFkbChfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpCSsgMHhkOCk7CisJcGxkY3RybCB8PSAweDAwODAwMDAwOwkvKiBOZXcgaXJxIG1vZGUgKi8KKwl3cml0ZWwocGxkY3RybCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIDB4ZDgpOwogCXdyaXRlbCgweDAwMDAwMDAwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spKTsKICNlbmRpZgogCWdpY19kaXN0X2luaXQoX19pb19hZGRyZXNzKFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggZWQwN2M0MS4uOTcwZjk4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTUwLDkgKzUwLDE1IEBACiAKIAkgIDxodHRwOi8vem9vLndlaW5pZ2VsLnNlL24zMD4uCiAKK2NvbmZpZyBNQUNIX1NNREsKKwlib29sCisJaGVscAorCSAgQ29tbW9uIG1hY2hpbmUgY29kZSBmb3IgU01ESzI0MTAgYW5kIFNNREsyNDQwCisKIGNvbmZpZyBBUkNIX1NNREsyNDEwCiAJYm9vbCAiU01ESzI0MTAvQTlNMjQxMCIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKKwlzZWxlY3QgTUFDSF9TTURLCiAJaGVscAogCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU01ESzI0MTAgb3IgdGhlIGRlcml2ZWQgbW9kdWxlIEE5TTI0MTAKICAgICAgICAgICAgPGh0dHA6Ly93d3cuZnNmb3J0aC5kZT4KQEAgLTYwLDYgKzY2LDcgQEAKIGNvbmZpZyBBUkNIX1MzQzI0NDAKIAlib29sICJTTURLMjQ0MCIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKKwlzZWxlY3QgTUFDSF9TTURLCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQ0MC4KIApAQCAtMTYzLDcgKzE3MCw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgUE0KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHZlcmJvc2UgZGVidWdnaW5nIGZyb20gdGhlIFBNIFN1c3BlbmQgYW5kCi0JICBSZXN1bWUgY29kZS4gU2VlIGBEb2N1bWVudGF0aW9uL2FybS9TYW1zaW5nLVMzQzI0WFgvU3VzcGVuZC50eHRgCisJICBSZXN1bWUgY29kZS4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dD4KIAkgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiBjb25maWcgUzNDMjQxMF9QTV9DSEVDSwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCmluZGV4IDFiM2I0NzYuLjNlNTcxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKQEAgLTQ4LDMgKzQ4LDUgQEAKIG9iai0kKENPTkZJR19NQUNIX1JYMzcxNSkJKz0gbWFjaC1yeDM3MTUubwogb2JqLSQoQ09ORklHX01BQ0hfT1RPTSkJCSs9IG1hY2gtb3RvbS5vCiBvYmotJChDT05GSUdfTUFDSF9ORVhDT0RFUl8yNDQwKSArPSBtYWNoLW5leGNvZGVyLm8KKworb2JqLSQoQ09ORklHX01BQ0hfU01ESykJCSs9IGNvbW1vbi1zbWRrLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCmluZGV4IGZlYzAyYzkuLjZkZTcxM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAogCS8qIGlmIHdlIHN0YXJ0ZWQgdGhlIFVQTEwsIHRoZW4gYWxsb3cgdG8gc2V0dGxlICovCiAKLQlpZiAoZW5hYmxlICYmICEob3JpZyAmIFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRikpCisJaWYgKGVuYWJsZSAmJiAob3JpZyAmIFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRikpCiAJCXVkZWxheSgyMDApOwogCiAJcmV0dXJuIDA7CkBAIC0zNjcsNiArMzY3LDggQEAKIAkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9VUExMOwogCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2YpCiAJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRkNMSzsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0hDTEs7CiAJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKIAkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9QQ0xLOwogCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQwICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMCkKQEAgLTM3Niw2ICszNzgsOCBAQAogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwljbGstPnBhcmVudCA9IHBhcmVudDsKKwogCWlmIChjbGsgPT0gJnMzYzI0eHhfZGNsazApCiAJCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0s7CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDA4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYwpAQCAtMCwwICsxLDEzNSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQ29tbW9uIGNvZGUgZm9yIFNNREsyNDEwIGFuZCBTTURLMjQ0MCBib2FyZHMKKyAqCisgKiBodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vc21kazI0NDAvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL25hbmQuaD4KKworI2luY2x1ZGUgImNvbW1vbi1zbWRrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgInBtLmgiCisKKy8qIE5BTkQgcGFyaXRpdG9uIGZyb20gMi40LjE4LXN3bDUgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNtZGtfZGVmYXVsdF9uYW5kX3BhcnRbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkJvb3QgQWdlbnQiLAorCQkuc2l6ZQk9IFNaXzE2SywKKwkJLm9mZnNldAk9IDAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gIlMzQzI0MTAgZmxhc2ggcGFydGl0aW9uIDEiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUJPSBTWl8yTSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAiUzNDMjQxMCBmbGFzaCBwYXJ0aXRpb24gMiIsCisJCS5vZmZzZXQgPSBTWl80TSwKKwkJLnNpemUJPSBTWl80TSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUJPSAiUzNDMjQxMCBmbGFzaCBwYXJ0aXRpb24gMyIsCisJCS5vZmZzZXQJPSBTWl84TSwKKwkJLnNpemUJPSBTWl8yTSwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUJPSAiUzNDMjQxMCBmbGFzaCBwYXJ0aXRpb24gNCIsCisJCS5vZmZzZXQgPSBTWl8xTSAqIDEwLAorCQkuc2l6ZQk9IFNaXzRNLAorCX0sCisJWzVdID0geworCQkubmFtZQk9ICJTM0MyNDEwIGZsYXNoIHBhcnRpdGlvbiA1IiwKKwkJLm9mZnNldAk9IFNaXzFNICogMTQsCisJCS5zaXplCT0gU1pfMU0gKiAxMCwKKwl9LAorCVs2XSA9IHsKKwkJLm5hbWUJPSAiUzNDMjQxMCBmbGFzaCBwYXJ0aXRpb24gNiIsCisJCS5vZmZzZXQJPSBTWl8xTSAqIDI0LAorCQkuc2l6ZQk9IFNaXzFNICogMjQsCisJfSwKKwlbN10gPSB7CisJCS5uYW1lCT0gIlMzQzI0MTAgZmxhc2ggcGFydGl0aW9uIDciLAorCQkub2Zmc2V0ID0gU1pfMU0gKiA0OCwKKwkJLnNpemUJPSBTWl8xNk0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0IHNtZGtfbmFuZF9zZXRzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAiTkFORCIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShzbWRrX2RlZmF1bHRfbmFuZF9wYXJ0KSwKKwkJLnBhcnRpdGlvbnMJPSBzbWRrX2RlZmF1bHRfbmFuZF9wYXJ0LAorCX0sCit9OworCisvKiBjaG9vc2UgYSBzZXQgb2YgdGltaW5ncyB3aGljaCBzaG91bGQgc3VpdCBtb3N0IDUxMk1iaXQKKyAqIGNoaXBzIGFuZCBiZXlvbmQuCisqLworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBzbWRrX25hbmRfaW5mbyA9IHsKKwkudGFjbHMJCT0gMjAsCisJLnR3cnBoMAkJPSA2MCwKKwkudHdycGgxCQk9IDIwLAorCS5ucl9zZXRzCT0gQVJSQVlfU0laRShzbWRrX25hbmRfc2V0cyksCisJLnNldHMJCT0gc21ka19uYW5kX3NldHMsCit9OworCisvKiBkZXZpY2VzIHdlIGluaXRpYWxpc2UgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgX19pbml0ZGF0YSAqc21ka19kZXZzW10gPSB7CisJJnMzY19kZXZpY2VfbmFuZCwKK307CisKK3ZvaWQgX19pbml0IHNtZGtfbWFjaGluZV9pbml0KHZvaWQpCit7CisJLyogQ29uZmlndXJlIHRoZSBMRURzIChldmVuIGlmIHdlIGhhdmUgbm8gTEVEIHN1cHBvcnQpKi8KKworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY0LCBTM0MyNDEwX0dQRjRfT1VUUCk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjUsIFMzQzI0MTBfR1BGNV9PVVRQKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNiwgUzNDMjQxMF9HUEY2X09VVFApOworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY3LCBTM0MyNDEwX0dQRjdfT1VUUCk7CisKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNCwgMSk7CisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjUsIDEpOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY2LCAxKTsKKwlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNywgMSk7CisKKwlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmc21ka19uYW5kX2luZm87CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrX2RldnMsIEFSUkFZX1NJWkUoc21ka19kZXZzKSk7CisKKwlzM2MyNDEwX3BtX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzYTNiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIENvbW1vbiBjb2RlIGZvciBTTURLMjQxMCBhbmQgU01ESzI0NDAgYm9hcmRzCisgKgorICogaHR0cDovL3d3dy5mbHVmZi5vcmcvYmVuL3NtZGsyNDQwLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitleHRlcm4gdm9pZCBzbWRrX21hY2hpbmVfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKaW5kZXggM2UzMjdiOC4uY2M5N2ZiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKQEAgLTIzMiw4ICsyMzIsOCBAQAogCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBhbnViaXNfbmFuZF9pbmZvID0gewogCS50YWNscwkJPSAyNSwKLQkudHdycGgwCQk9IDgwLAotCS50d3JwaDEJCT0gODAsCisJLnR3cnBoMAkJPSA1NSwKKwkudHdycGgxCQk9IDQwLAogCS5ucl9zZXRzCT0gQVJSQVlfU0laRShhbnViaXNfbmFuZF9zZXRzKSwKIAkuc2V0cwkJPSBhbnViaXNfbmFuZF9zZXRzLAogCS5zZWxlY3RfY2hpcAk9IGFudWJpc19uYW5kX3NlbGVjdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMKaW5kZXggMDI2MGVkNS4uMzA2YWZjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMKQEAgLTMyLDYgKzMyLDExIEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KIAorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC00Niw2ICs1MSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1sY2QuaD4KIAorI2luY2x1ZGUgPGFzbS9hcmNoL25hbmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTE3MCwxMiArMTc2LDM5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByeDM3MTVfbmFuZF9wYXJ0W10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAiV2hvbGUgRmxhc2giLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgcngzNzE1X25hbmRfc2V0c1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gIkludGVybmFsIiwKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKHJ4MzcxNV9uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IHJ4MzcxNV9uYW5kX3BhcnQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIHJ4MzcxNV9uYW5kX2luZm8gPSB7CisJLnRhY2xzCQk9IDI1LAorCS50d3JwaDAJCT0gNTAsCisJLnR3cnBoMQkJPSAxNSwKKwkubnJfc2V0cwk9IEFSUkFZX1NJWkUocngzNzE1X25hbmRfc2V0cyksCisJLnNldHMJCT0gcngzNzE1X25hbmRfc2V0cywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyeDM3MTVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2VfdXNiLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfaTJjLAogCSZzM2NfZGV2aWNlX2lpcywKKwkmczNjX2RldmljZV9uYW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIHJ4MzcxNV9ib2FyZCBfX2luaXRkYXRhID0gewpAQCAtMTg1LDYgKzIxOCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCByeDM3MTVfbWFwX2lvKHZvaWQpCiB7CisJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJnJ4MzcxNV9uYW5kX2luZm87CisKIAlzM2MyNHh4X2luaXRfaW8ocngzNzE1X2lvZGVzYywgQVJSQVlfU0laRShyeDM3MTVfaW9kZXNjKSk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygxNjkzNDAwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKHJ4MzcxNV91YXJ0Y2ZncywgQVJSQVlfU0laRShyeDM3MTVfdWFydGNmZ3MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IDFlNzZlMWYuLjJkYjkzMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtMjgsNyArMjgsOCBAQAogICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCi0gKiAyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKKyAqIDIwLVNlcC0yMDA1IEJKRCAgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKKyAqIDAxLUFwci0yMDA2IEJKRCAgIE1vdmVkIGluaXQgY29kZSB0byBjb21tb24gc21kawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNTQsNiArNTUsOCBAQAogI2luY2x1ZGUgImRldnMuaCIKICNpbmNsdWRlICJjcHUuaCIKIAorI2luY2x1ZGUgImNvbW1vbi1zbWRrLmgiCisKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0MTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKICAgLyogbm90aGluZyBoZXJlIHlldCAqLwogfTsKQEAgLTEwNywxMSArMTEwLDYgQEAKIAlzM2MyNHh4X3NldF9ib2FyZCgmc21kazI0MTBfYm9hcmQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTBfaW5pdF9pcnEodm9pZCkKLXsKLQlzM2MyNHh4X2luaXRfaXJxKCk7Ci19Ci0KIE1BQ0hJTkVfU1RBUlQoU01ESzI0MTAsICJTTURLMjQxMCIpIC8qIEBUT0RPOiByZXF1ZXN0IGEgbmV3IGlkZW50aWZpZXIgYW5kIHN3aXRjaAogCQkJCSAgICAqIHRvIFNNREsyNDEwICovCiAJLyogTWFpbnRhaW5lcjogSm9uYXMgRGlldHNjaGUgKi8KQEAgLTExOSw3ICsxMTcsOCBAQAogCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0MyNFhYX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBzbWRrMjQxMF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gc21kazI0MTBfaW5pdF9pcnEsCisJLmluaXRfaXJxCT0gczNjMjR4eF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gc21ka19tYWNoaW5lX2luaXQsCiAJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAogTUFDSElORV9FTkQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggZjQzMTU3Mi4uNWZmZmQxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCkBAIC01Myw3ICs1Myw4IEBACiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJkZXZzLmgiCiAjaW5jbHVkZSAiY3B1LmgiCi0jaW5jbHVkZSAicG0uaCIKKworI2luY2x1ZGUgImNvbW1vbi1zbWRrLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0NDBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJU0EgSU8gU3BhY2UgbWFwIChtZW1vcnkgc3BhY2Ugc2VsZWN0ZWQgYnkgQTI0KSAqLwpAQCAtMTk3LDIxICsxOTgsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDBfbWFjaGluZV9pbml0KHZvaWQpCiB7Ci0JLyogQ29uZmlndXJlIHRoZSBMRURzIChldmVuIGlmIHdlIGhhdmUgbm8gTEVEIHN1cHBvcnQpKi8KLQotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY0LCBTM0MyNDEwX0dQRjRfT1VUUCk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjUsIFMzQzI0MTBfR1BGNV9PVVRQKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BGNiwgUzNDMjQxMF9HUEY2X09VVFApOwotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEY3LCBTM0MyNDEwX0dQRjdfT1VUUCk7Ci0KLQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNCwgMCk7Ci0JczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjUsIDApOwotCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY2LCAwKTsKLQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGNywgMCk7Ci0KIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmc21kazI0NDBfbGNkX2NmZyk7CiAKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzbWRrX21hY2hpbmVfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKFMzQzI0NDAsICJTTURLMjQ0MCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYwppbmRleCA1N2ExNTk3Li5kN2EzMGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCiAJCWNsa2Rpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwogCQljbGtkaXZuIHw9IFMzQzI0NDBfQ0xLRElWTl9VQ0xLOwotCQlfX3Jhd193cml0ZWwoY2FtZGl2biwgUzNDMjQxMF9DTEtESVZOKTsKKwkJX19yYXdfd3JpdGVsKGNsa2Rpdm4sIFMzQzI0MTBfQ0xLRElWTik7CiAKIAkJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggODMyZmI4Ni4uNzNkZTJlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTU5LDggKzU5LDcgQEAKIAltcmMJcDE1LCAwLCByNSwgYzEzLCBjMCwgMAlAIFBJRAogCW1yYwlwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKIAltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyZXNzCi0JbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMAlAIGF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCi0JbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltcmMJcDE1LCAwLCByOCwgYzEsIGMwLCAwCUAgY29udHJvbCByZWdpc3RlcgogCiAJc3RtaWEJcjAsIHsgcjQgLSByMTMgfQogCkBAIC0xNjUsNyArMTY0LDYgQEAKIAltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMAkJQCBQSUQKIAltY3IJcDE1LCAwLCByNiwgYzMsIGMwLCAwCQlAIERvbWFpbiBJRAogCW1jcglwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZQotCW1jcglwMTUsIDAsIHI4LCBjMSwgYzEsIDAJCUAgYXV4aWxsaWFyeSBjb250cm9sCiAKICNpZmRlZiBDT05GSUdfREVCVUdfUkVTVU1FCiAJbW92CXIzLCAjJ1InCkBAIC0xNzMsNyArMTcxLDcgQEAKICNlbmRpZgogCiAJbGRyCXIyLCA9cmVzdW1lX3dpdGhfbW11Ci0JbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgZXRjCisJbWNyCXAxNSwgMCwgcjgsIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgZXRjCiAJbm9wCQkJCQlAIHNlY29uZC10by1sYXN0IGJlZm9yZSBtbXUKIAltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCAxMDI0NTQwLi42NzZiNWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtMTEsNyArMTEsOCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogQ2hhbmdlTG9nOgotICogIDAzLTA2LTIwMDQgSm9obiBMZW56IDxqZWxlbnpAd2lzYy5lZHU+CisgKiAgMjAwNiBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiAgMDMtMDYtMjAwNCBKb2huIExlbnogPGxlbnpAY3Mud2lzYy5lZHU+CiAgKiAgMDYtMDQtMjAwMiBDaHJpcyBMYXJzb24gPGtlcmdvdGhAZGlnaXRhbG5lbWVzaXMubmV0PgogICogIDA0LTE2LTIwMDEgTGluZW8gSmFwYW4sSW5jLiAuLi4KICAqLwpAQCAtODcsMTIgKzg4LDc1IEBACiAJLnNjbGtfcmF0ZSAgICAgID0gMTE5ODEwMDAsCiB9OwogCisjaWZkZWYgQ09ORklHX1NIQVJQX0xPQ09NTworLyoKKyAqIGxvdy1sZXZlbCBVQVJUIGZlYXR1cmVzLgorICovCitzdGF0aWMgc3RydWN0IGxvY29tb19kZXYgKnVhcnRfZGV2ID0gTlVMTDsKKworc3RhdGljIHZvaWQgY29sbGllX3VhcnRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworIAlpZiAoIXVhcnRfZGV2KSByZXR1cm47CisKKyAJaWYgKG1jdHJsICYgVElPQ01fUlRTKQorCQlsb2NvbW9fZ3Bpb193cml0ZSh1YXJ0X2RldiwgTE9DT01PX0dQSU9fUlRTLCAwKTsKKyAJZWxzZQorCQlsb2NvbW9fZ3Bpb193cml0ZSh1YXJ0X2RldiwgTE9DT01PX0dQSU9fUlRTLCAxKTsKKworIAlpZiAobWN0cmwgJiBUSU9DTV9EVFIpCisJCWxvY29tb19ncGlvX3dyaXRlKHVhcnRfZGV2LCBMT0NPTU9fR1BJT19EVFIsIDApOworIAllbHNlCisJCWxvY29tb19ncGlvX3dyaXRlKHVhcnRfZGV2LCBMT0NPTU9fR1BJT19EVFIsIDEpOworfQorCitzdGF0aWMgdV9pbnQgY29sbGllX3VhcnRfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaW50IHJldCA9IFRJT0NNX0NEOworCXVuc2lnbmVkIGludCByOworCWlmICghdWFydF9kZXYpIHJldHVybiByZXQ7CisKKwlyID0gbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQodWFydF9kZXYsIExPQ09NT19HUElPX0NUUyAmIExPQ09NT19HUElPX0RTUik7CisJaWYgKHIgJiBMT0NPTU9fR1BJT19DVFMpCisJCXJldCB8PSBUSU9DTV9DVFM7CisJaWYgKHIgJiBMT0NPTU9fR1BJT19EU1IpCisJCXJldCB8PSBUSU9DTV9EU1I7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgc3RydWN0IHNhMTEwMF9wb3J0X2ZucyBjb2xsaWVfcG9ydF9mbnMgX19pbml0ZGF0YSA9IHsKIAkuc2V0X21jdHJsCT0gY29sbGllX3VhcnRfc2V0X21jdHJsLAogCS5nZXRfbWN0cmwJPSBjb2xsaWVfdWFydF9nZXRfbWN0cmwsCiB9OwogCitzdGF0aWMgaW50IGNvbGxpZV91YXJ0X3Byb2JlKHN0cnVjdCBsb2NvbW9fZGV2ICpkZXYpCit7CisJdWFydF9kZXYgPSBkZXY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29sbGllX3VhcnRfcmVtb3ZlKHN0cnVjdCBsb2NvbW9fZGV2ICpkZXYpCit7CisJdWFydF9kZXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxvY29tb19kcml2ZXIgY29sbGllX3VhcnRfZHJpdmVyID0geworCS5kcnYgPSB7CisJCS5uYW1lID0gImNvbGxpZV91YXJ0IiwKKwl9LAorCS5kZXZpZAk9IExPQ09NT19ERVZJRF9VQVJULAorCS5wcm9iZQk9IGNvbGxpZV91YXJ0X3Byb2JlLAorCS5yZW1vdmUJPSBjb2xsaWVfdWFydF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjb2xsaWVfdWFydF9pbml0KHZvaWQpIHsKKwlyZXR1cm4gbG9jb21vX2RyaXZlcl9yZWdpc3RlcigmY29sbGllX3VhcnRfZHJpdmVyKTsKK30KK2RldmljZV9pbml0Y2FsbChjb2xsaWVfdWFydF9pbml0KTsKKworI2VuZGlmCisKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsb2NvbW9fcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewpAQCAtMjE4LDYgKzI4MiwxMiBAQAogewogCXNhMTEwMF9tYXBfaW8oKTsKIAlpb3RhYmxlX2luaXQoY29sbGllX2lvX2Rlc2MsIEFSUkFZX1NJWkUoY29sbGllX2lvX2Rlc2MpKTsKKworI2lmZGVmIENPTkZJR19TSEFSUF9MT0NPTU8KKwlzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoJmNvbGxpZV9wb3J0X2Zucyk7CisjZW5kaWYKKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgwLCAzKTsKKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgxLCAxKTsKIH0KIAogTUFDSElORV9TVEFSVChDT0xMSUUsICJTaGFycC1Db2xsaWUiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pcnEuYwppbmRleCBjMTMxYTUyLi5iM2E1NjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pcnEuYwpAQCAtMTk5LDEwICsxOTksMjYgQEAKIAlJQ01SIHw9ICgxIDw8IGlycSk7CiB9CiAKKy8qCisgKiBBcGFydCBmb3JtIEdQSU9zLCBvbmx5IHRoZSBSVEMgYWxhcm0gY2FuIGJlIGEgd2FrZXVwIGV2ZW50LgorICovCitzdGF0aWMgaW50IHNhMTEwMF9zZXRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCit7CisJaWYgKGlycSA9PSBJUlFfUlRDQWxybSkgeworCQlpZiAob24pCisJCQlQV0VSIHw9IFBXRVJfUlRDOworCQllbHNlCisJCQlQV0VSICY9IH5QV0VSX1JUQzsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgc3RydWN0IGlycWNoaXAgc2ExMTAwX25vcm1hbF9jaGlwID0gewogCS5hY2sJCT0gc2ExMTAwX21hc2tfaXJxLAogCS5tYXNrCQk9IHNhMTEwMF9tYXNrX2lycSwKIAkudW5tYXNrCQk9IHNhMTEwMF91bm1hc2tfaXJxLAorCS5zZXRfd2FrZQk9IHNhMTEwMF9zZXRfd2FrZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKaW5kZXggOWUwMmJjMy4uYWY2ZDI3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCkBAIC01OSw2ICs1OSwxNCBAQAogCQlpZiAoaXJyICYgKElSUl9FVEhFUk5FVCB8IElSUl9VU0FSKSkgewogCQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwogCisJCQkvKgorCQkJICogQWNrIHRoZSBpbnRlcnJ1cHQgbm93IHRvIHByZXZlbnQgcmUtZW50ZXJpbmcKKwkJCSAqIHRoaXMgbmVwb25zZXQgaGFuZGxlci4gIEFnYWluLCB0aGlzIGlzIHNhZmUKKwkJCSAqIHNpbmNlIHdlJ2xsIGNoZWNrIHRoZSBJUlIgcmVnaXN0ZXIgcHJpb3IgdG8KKwkJCSAqIGxlYXZpbmcuCisJCQkgKi8KKwkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCiAJCQlpZiAoaXJyICYgSVJSX0VUSEVSTkVUKSB7CiAJCQkJZCA9IGlycV9kZXNjICsgSVJRX05FUE9OU0VUX1NNQzkxOTY7CiAJCQkJZGVzY19oYW5kbGVfaXJxKElSUV9ORVBPTlNFVF9TTUM5MTk2LCBkLCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCA3OTk2OTdkLi5jZWJkNDhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0xMTIsMTAgKzExMiw5IEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQl2aWNfaW5pdChWQV9WSUNfQkFTRSwgSVJRX1ZJQ19TVEFSVCwgfigxIDw8IDMxKSk7CisJdmljX2luaXQoVkFfVklDX0JBU0UsIElSUV9WSUNfU1RBUlQsIH4wKTsKIAotCXNldF9pcnFfaGFuZGxlcihJUlFfVklDU09VUkNFMzEsIHNpY19oYW5kbGVfaXJxKTsKLQllbmFibGVfaXJxKElSUV9WSUNTT1VSQ0UzMSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1ZJQ1NPVVJDRTMxLCBzaWNfaGFuZGxlX2lycSk7CiAKIAkvKiBEbyBzZWNvbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KIAl3cml0ZWwofjAsIFZBX1NJQ19CQVNFICsgU0lDX0lSUV9FTkFCTEVfQ0xFQVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDVjNDA1NWIuLjU0ZTNjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTQ2LDYgKzQ2LDExIEBACiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCShDQUNIRV9EU0laRSAqIDQpCiAKKwkuZGF0YQorZmx1c2hfYmFzZToKKwkubG9uZwlGTFVTSF9CQVNFCisJLnRleHQKKwogLyoKICAqCWZsdXNoX3VzZXJfY2FjaGVfYWxsKCkKICAqCkBAIC02MywxMSArNjgsMjEgQEAKIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKIF9fZmx1c2hfd2hvbGVfY2FjaGU6Ci0JbW92CXIwLCAjRkxVU0hfQkFTRQotCWFkZAlyMSwgcjAsICNDQUNIRV9EU0laRQotMToJbGRyCXIyLCBbcjBdLCAjMzIKLQljbXAJcjAsIHIxCisJbGRyCXIzLCA9Zmx1c2hfYmFzZQorCWxkcglyMSwgW3IzLCAjMF0KKwllb3IJcjEsIHIxLCAjQ0FDSEVfRFNJWkUKKwlzdHIJcjEsIFtyMywgIzBdCisJYWRkCXIyLCByMSwgI0NBQ0hFX0RTSVpFCisxOglsZHIJcjMsIFtyMV0sICMzMgorCWNtcAlyMSwgcjIKIAlibG8JMWIKKyNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQorCWFkZAlyMiwgcjIsICNGTFVTSF9CQVNFX01JTklDQUNIRSAtIEZMVVNIX0JBU0UKKwlzdWIJcjEsIHIyLCAjNTEyCQkJQCBvbmx5IDUxMiBieXRlcworMToJbGRyCXIzLCBbcjFdLCAjMzIKKwljbXAJcjEsIHIyCisJYmxvCTFiCisjZW5kaWYKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKIAltb3YJcGMsIGxyCiAKQEAgLTgyLDYgKzk3LDcgQEAKICAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCiAgKi8KIEVOVFJZKHY0d2JfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJaXAsICMwCiAJc3ViCXIzLCByMSwgcjAJCQlAIGNhbGN1bGF0ZSB0b3RhbCBzaXplCiAJdHN0CXIyLCAjVk1fRVhFQwkJCUAgZXhlY3V0YWJsZSByZWdpb24/CiAJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jIGIvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCmluZGV4IDhhMWJmY2QuLjUwZTZiNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CkBAIC0yNzIsNiArMjczLDE3IEBACiB2b2lkICoKIGRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsIGdmcF90IGdmcCkKIHsKKwlpZiAoYXJjaF9pc19jb2hlcmVudCgpKSB7CisJCXZvaWQgKnZpcnQ7CisKKwkJdmlydCA9IGttYWxsb2Moc2l6ZSwgZ2ZwKTsKKwkJaWYgKCF2aXJ0KQorCQkJcmV0dXJuIE5VTEw7CisJCSpoYW5kbGUgPSAgdmlydF90b19kbWEoZGV2LCB2aXJ0KTsKKworCQlyZXR1cm4gdmlydDsKKwl9CisKIAlyZXR1cm4gX19kbWFfYWxsb2MoZGV2LCBzaXplLCBoYW5kbGUsIGdmcCwKIAkJCSAgIHBncHJvdF9ub25jYWNoZWQocGdwcm90X2tlcm5lbCkpOwogfQpAQCAtMzUwLDYgKzM2MiwxMSBAQAogCiAJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwogCisJaWYgKGFyY2hfaXNfY29oZXJlbnQoKSkgeworCQlrZnJlZShjcHVfYWRkcik7CisJCXJldHVybjsKKwl9CisKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA4ODI3OTEyLi45ZWExZjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTQ1NSwxNCArNDU2LDE0IEBACiAjaWZkZWYgRkxVU0hfQkFTRQogCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKEZMVVNIX0JBU0VfUEhZUyk7CiAJbWFwLnZpcnR1YWwgPSBGTFVTSF9CQVNFOwotCW1hcC5sZW5ndGggPSBQR0RJUl9TSVpFOworCW1hcC5sZW5ndGggPSBTWl8xTTsKIAltYXAudHlwZSA9IE1UX0NBQ0hFQ0xFQU47CiAJY3JlYXRlX21hcHBpbmcoJm1hcCk7CiAjZW5kaWYKICNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQotCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKEZMVVNIX0JBU0VfUEhZUyArIFBHRElSX1NJWkUpOworCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKEZMVVNIX0JBU0VfUEhZUyArIFNaXzFNKTsKIAltYXAudmlydHVhbCA9IEZMVVNIX0JBU0VfTUlOSUNBQ0hFOwotCW1hcC5sZW5ndGggPSBQR0RJUl9TSVpFOworCW1hcC5sZW5ndGggPSBTWl8xTTsKIAltYXAudHlwZSA9IE1UX01JTklDTEVBTjsKIAljcmVhdGVfbWFwcGluZygmbWFwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCmluZGV4IDI1ZTBjYTNlLi5jMWY3MTgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICAJCXJldHVybiBOVUxMOwogIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKICAJaWYgKHJlbWFwX2FyZWFfcGFnZXMoYWRkciwgcGZuLCBzaXplLCBmbGFncykpIHsKLSAJCXZmcmVlKCh2b2lkICopYWRkcik7CisgCQl2dW5tYXAoKHZvaWQgKilhZGRyKTsKICAJCXJldHVybiBOVUxMOwogIAl9CiAgCXJldHVybiAodm9pZCBfX2lvbWVtICopIChvZmZzZXQgKyAoY2hhciAqKWFkZHIpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKLQl2ZnJlZSgodm9pZCAqKSAoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcpIGFkZHIpKTsKKwl2dW5tYXAoKHZvaWQgKikoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcpYWRkcikpOwogfQogRVhQT1JUX1NZTUJPTChfX2lvdW5tYXApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbS1hcm12LmMgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKaW5kZXggNWU1ZDA1Yi4uOTUyNzNkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW0tYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL21tLWFybXYuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJCWVjY19tYXNrID0gMDsKIAl9CiAKLQlpZiAoY3B1X2FyY2ggPD0gQ1BVX0FSQ0hfQVJNdjVURUopIHsKKwlpZiAoY3B1X2FyY2ggPD0gQ1BVX0FSQ0hfQVJNdjVURUogJiYgIWNwdV9pc194c2NhbGUoKSkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1fdHlwZXMpOyBpKyspIHsKIAkJCWlmIChtZW1fdHlwZXNbaV0ucHJvdF9sMSkKIAkJCQltZW1fdHlwZXNbaV0ucHJvdF9sMSB8PSBQTURfQklUNDsKQEAgLTM4OSw2ICszODksMTcgQEAKIAlrZXJuX3BncHJvdCA9IHVzZXJfcGdwcm90ID0gY3AtPnB0ZTsKIAogCS8qCisJICogRW5hYmxlIENQVS1zcGVjaWZpYyBjb2hlcmVuY3kgaWYgc3VwcG9ydGVkLgorCSAqIChPbmx5IGF2YWlsYWJsZSBvbiBYU0MzIGF0IHRoZSBtb21lbnQuKQorCSAqLworCWlmIChhcmNoX2lzX2NvaGVyZW50KCkpIHsKKwkJaWYgKGNwdV9pc194c2MzKCkpIHsKKwkJCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9TOworCQkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9wdGUgfD0gTF9QVEVfQ09IRVJFTlQ7CisJCX0KKwl9CisKKwkvKgogCSAqIEFSTXY2IGFuZCBhYm92ZSBoYXZlIGV4dGVuZGVkIHBhZ2UgdGFibGVzLgogCSAqLwogCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NiAmJiAoY3IgJiBDUl9YUCkpIHsKQEAgLTYyMCw3ICs2MzEsNyBAQAogCQlwZ2QgPSBpbml0X21tLnBnZDsKIAogCWJhc2VfcG1kdmFsID0gUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfU0VDVF9BUF9SRUFEIHwgUE1EX1RZUEVfU0VDVDsKLQlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpIDw9IENQVV9BUkNIX0FSTXY1VEVKKQorCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPD0gQ1BVX0FSQ0hfQVJNdjVURUogJiYgIWNwdV9pc194c2NhbGUoKSkKIAkJYmFzZV9wbWR2YWwgfD0gUE1EX0JJVDQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRklSU1RfVVNFUl9QR0RfTlIgKyBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IGM5MTZhNmNhLi5hMmRkNWFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCkBAIC0yNiwyMiArMjYsNyBAQAogICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQogICovCiAjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCi0jZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAogCi0JLm1hY3JvIGZsdXNoXzExMF9kY2FjaGUJcmQsIHJhLCByZQotCWxkcglccmQsID1mbHVzaF9iYXNlCi0JbGRyCVxyYSwgW1xyZF0KLQllb3IJXHJhLCBccmEsICNGTFVTSF9PRkZTRVQKLQlzdHIJXHJhLCBbXHJkXQotCWFkZAlccmUsIFxyYSwgIzE2Mzg0CQlAIG9ubHkgbmVjZXNzYXJ5IGZvciAxNmsKLTEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMWIKLQkuZW5kbQotCi0JLmRhdGEKLWZsdXNoX2Jhc2U6Ci0JLmxvbmcJRkxVU0hfQkFTRQogCS50ZXh0CiAKIC8qCkBAIC0xNDUsMTMgKzEzMCwxMSBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9zYTExMF9zd2l0Y2hfbW0pCi0JZmx1c2hfMTEwX2RjYWNoZQlyMywgaXAsIHIxCi0JbW92CXIxLCAjMAotCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlzdHIJbHIsIFtzcCwgIy00XSEKKwlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCUAgY2xlYXJzIElQCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCi0JbW92CXBjLCBscgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbGRyCXBjLCBbc3BdLCAjNAogCiAvKgogICogY3B1X3NhMTEwX3NldF9wdGUocHRlcCwgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNDFmMjFmMi4uNzc3YWQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0zMCwzMCArMzAsNiBAQAogICogdGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZQogICovCiAjZGVmaW5lIERDQUNIRUxJTkVTSVpFCTMyCi0jZGVmaW5lIEZMVVNIX09GRlNFVAkzMjc2OAotCi0JLm1hY3JvIGZsdXNoXzExMDBfZGNhY2hlIHJkLCByYSwgcmUKLQlsZHIJXHJkLCA9Zmx1c2hfYmFzZQotCWxkcglccmEsIFtccmRdCi0JZW9yCVxyYSwgXHJhLCAjRkxVU0hfT0ZGU0VUCi0Jc3RyCVxyYSwgW1xyZF0KLQlhZGQJXHJlLCBccmEsICM4MTkyCQkJQCBvbmx5IG5lY2Vzc2FyeSBmb3IgOGsKLTEwMDE6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMWIKLSNpZmRlZiBGTFVTSF9CQVNFX01JTklDQUNIRQotCWFkZAlccmEsIFxyYSwgI0ZMVVNIX0JBU0VfTUlOSUNBQ0hFIC0gRkxVU0hfQkFTRQotCWFkZAlccmUsIFxyYSwgIzUxMgkJCUAgb25seSA1MTIgYnl0ZXMKLTEwMDI6CWxkcglccmQsIFtccmFdLCAjRENBQ0hFTElORVNJWkUKLQl0ZXEJXHJlLCBccmEKLQlibmUJMTAwMmIKLSNlbmRpZgotCS5lbmRtCi0KLQkuZGF0YQotZmx1c2hfYmFzZToKLQkubG9uZwlGTFVTSF9CQVNFCi0JLnRleHQKIAogCV9fSU5JVAogCkBAIC03OSw5ICs1NSw4IEBACiAJc3RtZmQJc3AhLCB7bHJ9CiAJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKIAltc3IJY3Bzcl9jLCBpcAotCWZsdXNoXzExMDBfZGNhY2hlIHIwLCByMSwgcjIJCUAgY2xlYW4gY2FjaGVzCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCisJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1jcglwMTUsIDAsIGlwLCBjMTUsIGMyLCAyCQlAIERpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgIzB4MTAwMAkJCUAgLi4uaS4uLi4uLi4uLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMGUJCQlAIC4uLi4uLi4uLi4uLndjYS4KQEAgLTE2NywxNCArMTQyLDEyIEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X3NhMTEwMF9zd2l0Y2hfbW0pCi0JZmx1c2hfMTEwMF9kY2FjaGUgcjMsIGlwLCByMQotCW1vdglpcCwgIzAKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCXN0cglsciwgW3NwLCAjLTRdIQorCWJsCXY0d2JfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhcnMgSVAKIAltY3IJcDE1LCAwLCBpcCwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1vdglwYywgbHIKKwlsZHIJcGMsIFtzcF0sICM0CiAKIC8qCiAgKiBjcHVfc2ExMTAwX3NldF9wdGUocHRlcCwgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCBiOWRmY2U1Li44ZDMyZTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtMzcxLDcgKzM3MSw3IEBACiBFTlRSWShjcHVfeHNjM19zZXRfcHRlKQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAotCWJpYwlyMiwgcjEsICMweGZmMAorCWJpYwlyMiwgcjEsICMweGRmMAkJCUAgS2VlcCBDLCBCLCBjb2hlcmVuY3kgYml0cwogCW9ycglyMiwgcjIsICNQVEVfVFlQRV9FWFQJCUAgZXh0ZW5kZWQgcGFnZQogCiAJZW9yCXIzLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKQEAgLTQyNywxMiArNDI3LDEzIEBACiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIHNldCBhdXhpbGlhcnkgY29udHJvbCByZWcKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCi0JYmljCXIwLCByMCwgIzB4MDIwMAkJCUAgLi4uLiAuLlIuIC4uLi4gLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMDIJCQlAIC4uLi4gLi4uLiAuLi4uIC4uQS4KIAlvcnIJcjAsIHIwLCAjMHgwMDA1CQkJQCAuLi4uIC4uLi4gLi4uLiAuQy5NCiAjaWYgQlRCX0VOQUJMRQorCWJpYwlyMCwgcjAsICMweDAyMDAJCQlAIC4uLi4gLi5SLiAuLi4uIC4uLi4KIAlvcnIJcjAsIHIwLCAjMHgzOTAwCQkJQCAuLlZJIFouLlMgLi4uLiAuLi4uCiAjZWxzZQorCWJpYwlyMCwgcjAsICMweDBhMDAJCQlAIC4uLi4gWi5SLiAuLi4uIC4uLi4KIAlvcnIJcjAsIHIwLCAjMHgzMTAwCQkJQCAuLlZJIC4uLlMgLi4uLiAuLi4uCiAjZW5kaWYKICNpZiBMMl9DQUNIRV9FTkFCTEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggMDg4N2JiMi4uZWM0OTQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTcwLDEzICs3MCwxMyBAQAogCiBjb25maWcgT01BUF8zMktfVElNRVIKIAlib29sICJVc2UgMzJLSHogdGltZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFgKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBPTUFQIDMyS0h6IHRpbWVyLgogCSAgVGhpcyB0aW1lciBzYXZlcyBwb3dlciBjb21wYXJlZCB0byB0aGUgT01BUF9NUFVfVElNRVIsIGFuZCBoYXMKIAkgIHN1cHBvcnQgZm9yIG5vIHRpY2sgZHVyaW5nIGlkbGUuIFRoZSAzMktIeiB0aW1lciBwcm92aWRlcyBsZXNzCiAJICBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiBPTUFQX01QVV9USU1FUi4gVGhlIDMyS0h6IHRpbWVyIGlzCi0JICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAtMTZ4eC4KKwkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUDE2WFggYW5kIDI0WFguCiAKIGVuZGNob2ljZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggOWNjZjE5NC4uMjg5NmI0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtMywxNiArMywxNiBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vCitvYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vIGZiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KIAorb2JqLSQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQkrPSB0aW1lcjMyay5vCisKICMgT0NQSSBpbnRlcmNvbm5lY3Qgc3VwcG9ydCBmb3IgMTcxMCwgMTYxMCBhbmQgNTkxMgogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDE2WFgpICs9IG9jcGkubwogCi0jIFBvd2VyIE1hbmFnZW1lbnQKLW9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUSkgKz0gY3B1LW9tYXAubwogb2JqLSQoQ09ORklHX09NQVBfRE1fVElNRVIpICs9IGRtdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCAzYzJiZmMwLi4zMmVjMDRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CkBAIC0zNywxNyArMzgsMzggQEAKICAqIFN0YW5kYXJkIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvY2xrLmgKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBSZXR1cm5zIGEgY2xvY2suIE5vdGUgdGhhdCB3ZSBmaXJzdCB0cnkgdG8gdXNlIGRldmljZSBpZCBvbiB0aGUgYnVzCisgKiBhbmQgY2xvY2sgbmFtZS4gSWYgdGhpcyBmYWlscywgd2UgdHJ5IHRvIHVzZSBjbG9jayBuYW1lIG9ubHkuCisgKi8KIHN0cnVjdCBjbGsgKiBjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisJaW50IGlkbm87CisKKwlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQorCQlpZG5vID0gLTE7CisJZWxzZQorCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwogCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAocC0+aWQgPT0gaWRubyAmJgorCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKIAkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKIAkJCWNsayA9IHA7CiAJCQlicmVhazsKIAkJfQogCX0KKworZm91bmQ6CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCiAJcmV0dXJuIGNsazsKQEAgLTU5LDYgKzgxLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX2VuYWJsZSkKIAkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX2VuYWJsZShjbGspOwpAQCAtNzIsNiArOTcsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX2Rpc2FibGUpCiAJCWFyY2hfY2xvY2stPmNsa19kaXNhYmxlKGNsayk7CkBAIC04NCw2ICsxMTIsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiAwOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCXJldCA9IGNsay0+dXNlY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CkBAIC05Nyw2ICsxMjgsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm4gMDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBjbGstPnJhdGU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CkBAIC0xMjEsNiArMTU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgcmV0ID0gMDsKIAorCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIHJldDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX3JvdW5kX3JhdGUpCiAJCXJldCA9IGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CkBAIC0xMzMsNyArMTcwLDEwIEBACiBpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19zZXRfcmF0ZSkKQEAgLTE0Nyw3ICsxODcsMTAgQEAKIGludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspIHx8IHBhcmVudCA9PSBOVUxMIHx8IElTX0VSUihwYXJlbnQpKQorCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKQEAgLTE2Myw2ICsyMDYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNsayAqIHJldCA9IE5VTEw7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiByZXQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KQogCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudChjbGspOwpAQCAtMTk5LDYgKzI0NSw5IEBACiAvKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgKi8KIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm47CisKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKIH0KIApAQCAtMjA3LDYgKzI1Niw5IEBACiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAorCWlmICh0Y2xrID09IE5VTEwgfHwgSVNfRVJSKHRjbGspKQorCQlyZXR1cm47CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKIAkJaWYgKGxpa2VseShjbGtwLT5wYXJlbnQgIT0gdGNsaykpCiAJCQljb250aW51ZTsKQEAgLTIxNyw2ICsyNjksOSBAQAogCiBpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKIHsKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIAlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKIAlpZiAoY2xrLT5pbml0KQpAQCAtMjI5LDYgKzI4NCw5IEBACiAKIHZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQogeworCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIAlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKIAltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CkBAIC0yMzksNiArMjk3LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUpCiAJCWFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUoY2xrKTsKQEAgLTI1MCw2ICszMTEsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX2FsbG93X2lkbGUpCiAJCWFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKGNsayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA5ZGNjZTkwLi41ZDVkNmViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTI0LDE0ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0KLQotdm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLSAgICAgICAgLyogTm90aGluZyAqLwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgPGFzbS9hcmNoL21lbmVsYXVzLmg+CiAKICNpZiAJZGVmaW5lZChDT05GSUdfSTJDX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0kyQ19PTUFQX01PRFVMRSkKIApAQCAtNTgsOSArNTEsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMSA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKICAgICAgICAgLmlkICAgICAgICAgICAgID0gMSwKLSAgICAgICAgLmRldiA9IHsKLSAgICAgICAgICAgICAgICAucmVsZWFzZSAgICAgICAgPSBvbWFwX25vcF9yZWxlYXNlLAotICAgICAgICB9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzMSksCiAJLnJlc291cmNlCT0gaTJjX3Jlc291cmNlczEsCiB9OwpAQCAtOTgsNiArODgsNjIgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmCWRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVBfTU9EVUxFKQorCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfa3Aodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkgfHwgbWFjaGluZV9pc19vbWFwX2gzKCkpIHsKKwkJb21hcF9jZmdfcmVnKEYxOF8xNjEwX0tCQzApOworCQlvbWFwX2NmZ19yZWcoRDIwXzE2MTBfS0JDMSk7CisJCW9tYXBfY2ZnX3JlZyhEMTlfMTYxMF9LQkMyKTsKKwkJb21hcF9jZmdfcmVnKEUxOF8xNjEwX0tCQzMpOworCQlvbWFwX2NmZ19yZWcoQzIxXzE2MTBfS0JDNCk7CisKKwkJb21hcF9jZmdfcmVnKEcxOF8xNjEwX0tCUjApOworCQlvbWFwX2NmZ19yZWcoRjE5XzE2MTBfS0JSMSk7CisJCW9tYXBfY2ZnX3JlZyhIMTRfMTYxMF9LQlIyKTsKKwkJb21hcF9jZmdfcmVnKEUyMF8xNjEwX0tCUjMpOworCQlvbWFwX2NmZ19yZWcoRTE5XzE2MTBfS0JSNCk7CisJCW9tYXBfY2ZnX3JlZyhOMTlfMTYxMF9LQlI1KTsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKSB7CisJCW9tYXBfY2ZnX3JlZyhFMl83MzBfS0JSMCk7CisJCW9tYXBfY2ZnX3JlZyhKN183MzBfS0JSMSk7CisJCW9tYXBfY2ZnX3JlZyhFMV83MzBfS0JSMik7CisJCW9tYXBfY2ZnX3JlZyhGM183MzBfS0JSMyk7CisJCW9tYXBfY2ZnX3JlZyhEMl83MzBfS0JSNCk7CisKKwkJb21hcF9jZmdfcmVnKEMyXzczMF9LQkMwKTsKKwkJb21hcF9jZmdfcmVnKEQzXzczMF9LQkMxKTsKKwkJb21hcF9jZmdfcmVnKEU0XzczMF9LQkMyKTsKKwkJb21hcF9jZmdfcmVnKEY0XzczMF9LQkMzKTsKKwkJb21hcF9jZmdfcmVnKEUzXzczMF9LQkM0KTsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhUMTlfMjRYWF9LQlIwKTsKKwkJb21hcF9jZmdfcmVnKFIxOV8yNFhYX0tCUjEpOworCQlvbWFwX2NmZ19yZWcoVjE4XzI0WFhfS0JSMik7CisJCW9tYXBfY2ZnX3JlZyhNMjFfMjRYWF9LQlIzKTsKKwkJb21hcF9jZmdfcmVnKEU1X18yNFhYX0tCUjQpOworCQlpZiAob21hcF9oYXNfbWVuZWxhdXMoKSkgeworCQkJb21hcF9jZmdfcmVnKEIzX18yNFhYX0tCUjUpOworCQkJb21hcF9jZmdfcmVnKEFBNF8yNFhYX0tCQzIpOworCQkJb21hcF9jZmdfcmVnKEIxM18yNFhYX0tCQzYpOworCQl9IGVsc2UgeworCQkJb21hcF9jZmdfcmVnKE0xOF8yNFhYX0tCUjUpOworCQkJb21hcF9jZmdfcmVnKEgxOV8yNFhYX0tCQzIpOworCQkJb21hcF9jZmdfcmVnKE4xOV8yNFhYX0tCQzYpOworCQl9CisJCW9tYXBfY2ZnX3JlZyhSMjBfMjRYWF9LQkMwKTsKKwkJb21hcF9jZmdfcmVnKE0xNF8yNFhYX0tCQzEpOworCQlvbWFwX2NmZ19yZWcoVjE3XzI0WFhfS0JDMyk7CisJCW9tYXBfY2ZnX3JlZyhQMjFfMjRYWF9LQkM0KTsKKwkJb21hcF9jZmdfcmVnKEwxNF8yNFhYX0tCQzUpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2twKHZvaWQpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmCWRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCiAKQEAgLTEzMCw3ICsxNzYsNiBAQAogCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAogCS5pZAkJPSAxLAogCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKIAkJLmRtYV9tYXNrCT0gJm1tYzFfZG1hbWFzaywKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMV9jb25mLAogCX0sCkBAIC0xNjAsNyArMjA1LDYgQEAKIAkubmFtZQkJPSAibW1jaS1vbWFwIiwKIAkuaWQJCT0gMiwKIAkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCiAJCS5kbWFfbWFzawk9ICZtbWMyX2RtYW1hc2ssCiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzJfY29uZiwKIAl9LApAQCAtMjQwLDYgKzI4NCw1MiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tbWModm9pZCkge30KICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBOdW1iZXJpbmcgZm9yIHRoZSBTUEktY2FwYWJsZSBjb250cm9sbGVycyB3aGVuIHVzZWQgZm9yIFNQSToKKyAqIHNwaQkJPSAxCisgKiB1d2lyZQk9IDIKKyAqIG1tYzEuLjIJPSAzLi40CisgKiBtY2JzcDEuLjMJPSA1Li43CisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9PTUFQX1VXSVJFKSB8fCBkZWZpbmVkKENPTkZJR19TUElfT01BUF9VV0lSRV9NT0RVTEUpCisKKyNkZWZpbmUJT01BUF9VV0lSRV9CQVNFCQkweGZmZmIzMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXdpcmVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUF9VV0lSRV9CQVNFLAorCQkuZW5kCQk9IE9NQVBfVVdJUkVfQkFTRSArIDB4MjAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF91d2lyZV9kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF91d2lyZSIsCisJLmlkCSAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXdpcmVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1d2lyZV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfdXdpcmUodm9pZCkKK3sKKwkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnOyBub3QgYWxsIGJvYXJkcyB3aWxsIGJlIGhvb2tpbmcKKwkgKiB1cCBkZXZpY2VzIHRvIHRoZSBtaWNyb3dpcmUgY29udHJvbGxlciwgYW5kIG11bHRpLWJvYXJkIGNvbmZpZ3MKKwkgKiBtZWFuIHRoYXQgQ09ORklHX1NQSV9PTUFQX1VXSVJFIG1heSBiZSBjb25maWd1cmVkIGFueXdheS4uLgorCSAqLworCisJLyogYm9hcmQtc3BlY2lmaWMgY29kZSBtdXN0IGNvbmZpZ3VyZSBjaGlwc2VsZWN0cyAob25seSBhIGZldworCSAqIGFyZSBub3JtYWxseSB1c2VkKSBhbmQgU0NMSy9TREkvU0RPIChlYWNoIGhhcyB0d28gY2hvaWNlcykuCisJICovCisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF91d2lyZV9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfdXdpcmUodm9pZCkge30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9XQVRDSERPR19NT0RVTEUpCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWApAQCAtMjU5LDkgKzM0OSw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF93ZHQiLAogCS5pZAkgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCiB9OwpAQCAtMjk1LDkgKzM4Miw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7CiAJLm5hbWUJICAgPSAib21hcF9ybmciLAogCS5pZAkgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCiB9OwpAQCAtMzEwLDQwICszOTQsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ybmcodm9pZCkge30KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUF9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG9tYXBfZmJfY29uZjsKLQotc3RhdGljIHU2NCBvbWFwX2ZiX2RtYV9tYXNrID0gfih1MzIpMDsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9mYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmYiIsCi0JLmlkCQk9IC0xLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JCS5kbWFfbWFzawkJPSAmb21hcF9mYl9kbWFfbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfih1MzIpMCwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gJm9tYXBfZmJfY29uZiwKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gMCwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZmIodm9pZCkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOwotCi0JY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19MQ0QsIHN0cnVjdCBvbWFwX2xjZF9jb25maWcpOwotCWlmIChjb25mICE9IE5VTEwpCi0JCW9tYXBfZmJfY29uZiA9ICpjb25mOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9mYl9kZXZpY2UpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2ZiKHZvaWQpIHt9Ci0KLSNlbmRpZgotCiAvKgogICogVGhpcyBnZXRzIGNhbGxlZCBhZnRlciBib2FyZC1zcGVjaWZpYyBJTklUX01BQ0hJTkUsIGFuZCBpbml0aWFsaXplcyBtb3N0CiAgKiBvbi1jaGlwIHBlcmlwaGVyYWxzIGFjY2Vzc2libGUgb24gdGhpcyBib2FyZCAoZXhjZXB0IGZvciBmZXcgbGlrZSBVU0IpOgpAQCAtMzY5LDkgKzQxOSwxMCBAQAogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCi0Jb21hcF9pbml0X2ZiKCk7CiAJb21hcF9pbml0X2kyYygpOworCW9tYXBfaW5pdF9rcCgpOwogCW9tYXBfaW5pdF9tbWMoKTsKKwlvbWFwX2luaXRfdXdpcmUoKTsKIAlvbWFwX2luaXRfd2R0KCk7CiAJb21hcF9pbml0X3JuZygpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYTRlNWFjNy4uNWRhYzQyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTI1OCw2ICsxMjU4LDExIEBACiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKIH0KIAoraW50IG9tYXBfbGNkX2RtYV9leHRfcnVubmluZyh2b2lkKQoreworCXJldHVybiBsY2RfZG1hLmV4dF9jdHJsICYmIGxjZF9kbWEuYWN0aXZlOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCkBAIC0xMzg5LDYgKzEzOTQsNyBAQAogRVhQT1JUX1NZTUJPTChvbWFwX2VuYWJsZV9sY2RfZG1hKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zZXR1cF9sY2RfZG1hKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2xjZF9kbWEpOworRVhQT1JUX1NZTUJPTChvbWFwX2xjZF9kbWFfZXh0X3J1bm5pbmcpOwogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9zaW5nbGVfdHJhbnNmZXIpOwogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2V4dF9jb250cm9sbGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCmluZGV4IDM4ZDdlYmYuLmViYTNjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwpAQCAtOTcsNiArOTcsMzIgQEAKIH0KIAogCisvKioKKyAqIG9tYXBfZG1fdGltZXJfbW9kaWZ5X2lkbGVjdF9tYXNrIC0gQ2hlY2sgaWYgYW55IHJ1bm5pbmcgdGltZXJzIHVzZSBBUk1YT1IKKyAqIEBpbnB1dG1hc2s6IGN1cnJlbnQgdmFsdWUgb2YgaWRsZWN0IG1hc2sKKyAqLworX191MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2soX191MzIgaW5wdXRtYXNrKQoreworCWludCBuOworCisJLyogSWYgQVJNWE9SIGNhbm5vdCBiZSBpZGxlZCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgdW5uZWNlc3NhcnkgKi8KKwlpZiAoIShpbnB1dG1hc2sgJiAoMSA8PCAxKSkpCisJCXJldHVybiBpbnB1dG1hc2s7CisKKwkvKiBJZiBhbnkgYWN0aXZlIHRpbWVyIGlzIHVzaW5nIEFSTVhPUiByZXR1cm4gbW9kaWZpZWQgbWFzayAqLworCWZvciAobiA9IDA7IGRtX3RpbWVyc1tuXS5iYXNlOyArK24pCisJCWlmIChvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKCZkbV90aW1lcnNbbl0sIE9NQVBfVElNRVJfQ1RSTF9SRUcpJgorCQkgICAgT01BUF9USU1FUl9DVFJMX1NUKSB7CisJCQlpZiAoKChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSk+PihuKjIpKSAmIDB4MDMpID09IDApCisJCQkJaW5wdXRtYXNrICY9IH4oMSA8PCAxKTsKKwkJCWVsc2UKKwkJCQlpbnB1dG1hc2sgJj0gfigxIDw8IDIpOworCQl9CisKKwlyZXR1cm4gaW5wdXRtYXNrOworfQorCisKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfc291cmNlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHNvdXJjZSkKIHsKIAlpbnQgbiA9ICh0aW1lciAtIGRtX3RpbWVycykgPDwgMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9mYi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ZTliOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9mYi5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXBmYi5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUF9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcGZiX3BsYXRmb3JtX2RhdGEgb21hcGZiX2NvbmZpZzsKKworc3RhdGljIHU2NCBvbWFwX2ZiX2RtYV9tYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9mYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBmYiIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmb21hcF9mYl9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfih1MzIpMCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJm9tYXBmYl9jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDAsCit9OworCisvKiBjYWxsZWQgZnJvbSBtYXBfaW8gKi8KK3ZvaWQgb21hcGZiX3Jlc2VydmVfbWVtKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnICpmYm1lbV9jb25mOworCisJb21hcGZiX2NvbmZpZy5mYm1lbS5mYl9zcmFtX3N0YXJ0ID0gb21hcF9mYl9zcmFtX3N0YXJ0OworCW9tYXBmYl9jb25maWcuZmJtZW0uZmJfc3JhbV9zaXplID0gb21hcF9mYl9zcmFtX3NpemU7CisKKwlmYm1lbV9jb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0ZCTUVNLCBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcpOworCisJaWYgKGZibWVtX2NvbmYgIT0gTlVMTCkgeworCQkvKiBpbmRpY2F0ZSB0aGF0IHRoZSBib290bG9hZGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlCisJCSAqIGZiIGRldmljZSwgc28gd2UnbGwgc2tpcCB0aGF0IHBhcnQgaW4gdGhlIGZiIGRyaXZlcgorCQkgKi8KKwkJb21hcGZiX2NvbmZpZy5mYm1lbS5mYl9zZHJhbV9zdGFydCA9IGZibWVtX2NvbmYtPmZiX3NkcmFtX3N0YXJ0OworCQlvbWFwZmJfY29uZmlnLmZibWVtLmZiX3NkcmFtX3NpemUgPSBmYm1lbV9jb25mLT5mYl9zZHJhbV9zaXplOworCQlpZiAoZmJtZW1fY29uZi0+ZmJfc2RyYW1fc2l6ZSkgeworCQkJcHJfaW5mbygiUmVzZXJ2aW5nICV1IGJ5dGVzIFNEUkFNIGZvciBmcmFtZSBidWZmZXJcbiIsCisJCQkJZmJtZW1fY29uZi0+ZmJfc2RyYW1fc2l6ZSk7CisJCQlyZXNlcnZlX2Jvb3RtZW0oZmJtZW1fY29uZi0+ZmJfc2RyYW1fc3RhcnQsCisJCQkJCWZibWVtX2NvbmYtPmZiX3NkcmFtX3NpemUpOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwX2luaXRfZmIodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOworCisJY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19MQ0QsIHN0cnVjdCBvbWFwX2xjZF9jb25maWcpOworCWlmIChjb25mID09IE5VTEwpCisJCXJldHVybiAwOworCisJb21hcGZiX2NvbmZpZy5sY2QgPSAqY29uZjsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfZmJfZGV2aWNlKTsKK30KKworYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZmIpOworCisjZWxzZQorCit2b2lkIG9tYXBmYl9yZXNlcnZlX21lbSh2b2lkKSB7fQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBiNGQ1YjllLi5kM2M4ZWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19iYW5rICpnZXRfZ3Bpb19iYW5rKGludCBncGlvKQogewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCWlmIChPTUFQX0dQSU9fSVNfTVBVSU8oZ3BpbykpCiAJCQlyZXR1cm4gJmdwaW9fYmFua1swXTsKIAkJcmV0dXJuICZncGlvX2JhbmtbMV07CkBAIC0yMjMsNyArMjIzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmIGdwaW8gPCAxNikKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgJiYgZ3BpbyA8IDE2KQogCQlyZXR1cm4gMDsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCkBAIC00MDIsMTMgKzQwMiwxMyBAQAogCXUzMiBncGlvX2JpdCA9IDEgPDwgZ3BpbzsKIAogCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwLCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUVRfTE9XKTsKKwkJdHJpZ2dlciAmIF9fSVJRVF9MT1dMVkwpOwogCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxLCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUVRfSElHSCk7CisJCXRyaWdnZXIgJiBfX0lSUVRfSElHSExWTCk7CiAJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QsIGdwaW9fYml0LAotCQl0cmlnZ2VyICYgSVJRVF9SSVNJTkcpOworCQl0cmlnZ2VyICYgX19JUlFUX1JJU0VER0UpOwogCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCwgZ3Bpb19iaXQsCi0JCXRyaWdnZXIgJiBJUlFUX0ZBTExJTkcpOworCQl0cmlnZ2VyICYgX19JUlFUX0ZBTEVER0UpOwogCS8qIEZJWE1FOiBQb3NzaWJseSBkbyAnc2V0X2lycV9oYW5kbGVyKGosIGRvX2xldmVsX0lSUSknIGlmIG9ubHkgbGV2ZWwKIAkgKiB0cmlnZ2VyaW5nIHJlcXVlc3RlZC4gKi8KIH0KQEAgLTQyMiw5ICs0MjIsOSBAQAogCWNhc2UgTUVUSE9EX01QVUlPOgogCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX0lOVF9FREdFOwogCQlsID0gX19yYXdfcmVhZGwocmVnKTsKLQkJaWYgKHRyaWdnZXIgPT0gSVJRVF9SSVNJTkcpCisJCWlmICh0cmlnZ2VyICYgX19JUlFUX1JJU0VER0UpCiAJCQlsIHw9IDEgPDwgZ3BpbzsKLQkJZWxzZSBpZiAodHJpZ2dlciA9PSBJUlFUX0ZBTExJTkcpCisJCWVsc2UgaWYgKHRyaWdnZXIgJiBfX0lSUVRfRkFMRURHRSkKIAkJCWwgJj0gfigxIDw8IGdwaW8pOwogCQllbHNlCiAJCQlnb3RvIGJhZDsKQEAgLTQzMiw5ICs0MzIsOSBAQAogCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKIAkJcmVnICs9IE9NQVAxNTEwX0dQSU9fSU5UX0NPTlRST0w7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCQlpZiAodHJpZ2dlciA9PSBJUlFUX1JJU0lORykKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfUklTRURHRSkKIAkJCWwgfD0gMSA8PCBncGlvOwotCQllbHNlIGlmICh0cmlnZ2VyID09IElSUVRfRkFMTElORykKKwkJZWxzZSBpZiAodHJpZ2dlciAmIF9fSVJRVF9GQUxFREdFKQogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWVsc2UKIAkJCWdvdG8gYmFkOwpAQCAtNDQ2LDIwICs0NDYsMjEgQEAKIAkJCXJlZyArPSBPTUFQMTYxMF9HUElPX0VER0VfQ1RSTDE7CiAJCWdwaW8gJj0gMHgwNzsKIAkJLyogV2UgYWxsb3cgb25seSBlZGdlIHRyaWdnZXJpbmcsIGkuZS4gdHdvIGxvd2VzdCBiaXRzICovCi0JCWlmICh0cmlnZ2VyICYgfklSUVRfQk9USEVER0UpCisJCWlmICh0cmlnZ2VyICYgKF9fSVJRVF9MT1dMVkwgfCBfX0lSUVRfSElHSExWTCkpCiAJCQlCVUcoKTsKLQkJLyogTk9URToga25vd3MgX19JUlFUX3tGQUwsUklTfUVER0UgbWF0Y2ggT01BUCBoYXJkd2FyZSAqLwotCQl0cmlnZ2VyICY9IDB4MDM7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwogCQlsICY9IH4oMyA8PCAoZ3BpbyA8PCAxKSk7Ci0JCWwgfD0gdHJpZ2dlciA8PCAoZ3BpbyA8PCAxKTsKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfUklTRURHRSkKKwkJCWwgfD0gMiA8PCAoZ3BpbyA8PCAxKTsKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfRkFMRURHRSkKKwkJCWwgfD0gMSA8PCAoZ3BpbyA8PCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBNRVRIT0RfR1BJT183MzA6CiAJCXJlZyArPSBPTUFQNzMwX0dQSU9fSU5UX0NPTlRST0w7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCQlpZiAodHJpZ2dlciA9PSBJUlFUX1JJU0lORykKKwkJaWYgKHRyaWdnZXIgJiBfX0lSUVRfUklTRURHRSkKIAkJCWwgfD0gMSA8PCBncGlvOwotCQllbHNlIGlmICh0cmlnZ2VyID09IElSUVRfRkFMTElORykKKwkJZWxzZSBpZiAodHJpZ2dlciAmIF9fSVJRVF9GQUxFREdFKQogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWVsc2UKIAkJCWdvdG8gYmFkOwpAQCAtNDkxLDcgKzQ5Miw5IEBACiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0eXBlICYgKF9fSVJRVF9MT1dMVkx8X19JUlFUX0hJR0hMVkx8SVJRVF9QUk9CRSkpCisJaWYgKHR5cGUgJiBJUlFUX1BST0JFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICh0eXBlICYgKF9fSVJRVF9MT1dMVkx8X19JUlFUX0hJR0hMVkwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKQEAgLTc1NSwxMyArNzU4LDMyIEBACiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMTsKICNlbmRpZgotCiAJd2hpbGUoMSkgewotCQlpc3IgPSBfX3Jhd19yZWFkbChpc3JfcmVnKTsKLQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyLCAwKTsKLQkJX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3IpOwotCQlfZW5hYmxlX2dwaW9faXJxYmFuayhiYW5rLCBpc3IsIDEpOwotCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJdTMyIGlzcl9zYXZlZCwgbGV2ZWxfbWFzayA9IDA7CisKKwkJaXNyX3NhdmVkID0gaXNyID0gX19yYXdfcmVhZGwoaXNyX3JlZyk7CisKKwkJaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX01QVUlPKSkKKwkJCWlzciAmPSAweDAwMDBmZmZmOworCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWxldmVsX21hc2sgPQorCQkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCkgfAorCQkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7CisKKwkJLyogY2xlYXIgZWRnZSBzZW5zaXRpdmUgaW50ZXJydXB0cyBiZWZvcmUgaGFuZGxlcihzKSBhcmUKKwkJY2FsbGVkIHNvIHRoYXQgd2UgZG9uJ3QgbWlzcyBhbnkgaW50ZXJydXB0IG9jY3VycmVkIHdoaWxlCisJCWV4ZWN1dGluZyB0aGVtICovCisJCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIH5sZXZlbF9tYXNrLCAwKTsKKwkJX2NsZWFyX2dwaW9faXJxYmFuayhiYW5rLCBpc3Jfc2F2ZWQgJiB+bGV2ZWxfbWFzayk7CisJCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIH5sZXZlbF9tYXNrLCAxKTsKKworCQkvKiBpZiB0aGVyZSBpcyBvbmx5IGVkZ2Ugc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdHMKKwkJY29uZmlndXJlZCwgd2UgY291bGQgdW5tYXNrIEdQSU8gYmFuayBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgKi8KKwkJaWYgKCFsZXZlbF9tYXNrKQorCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiAKIAkJaWYgKCFpc3IpCiAJCQlicmVhazsKQEAgLTc3NCw2ICs3OTYsMjAgQEAKIAkJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOwogCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKIAkJfQorCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkJLyogY2xlYXIgbGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdHMgYWZ0ZXIgaGFuZGxlcihzKSAqLworCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMCk7CisJCQlfY2xlYXJfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIGxldmVsX21hc2spOworCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMSk7CisJCX0KKworCQkvKiBpZiBiYW5rIGhhcyBhbnkgbGV2ZWwgc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdAorCQljb25maWd1cmVkLCB3ZSBtdXN0IHVubWFzayB0aGUgYmFuayBpbnRlcnJ1cHQgb25seSBhZnRlcgorCQloYW5kbGVyKHMpIGFyZSBleGVjdXRlZCBpbiBvcmRlciB0byBhdm9pZCBzcHVyaW91cyBiYW5rCisJCWludGVycnVwdCAqLworCQlpZiAobGV2ZWxfbWFzaykKKwkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCX0KIH0KIApAQCAtODQ4LDcgKzg4NCw3IEBACiAKIAlpbml0aWFsaXplZCA9IDE7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJZ3Bpb19pY2sgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZ3Bpb19jayIpOwogCQlpZiAoSVNfRVJSKGdwaW9faWNrKSkKIAkJCXByaW50aygiQ291bGQgbm90IGdldCBhcm1fZ3Bpb19ja1xuIik7CkBAIC04NjksNyArOTA1LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMTUxMCBHUElPIGhhcmR3YXJlXG4iKTsKIAkJZ3Bpb19iYW5rX2NvdW50ID0gMjsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE1MTA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IDFjZDJjYWMuLjE5NmFhYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaWZkZWYgQ09ORklHX01DQlNQX0RFQlVHCiAjZGVmaW5lIERCRyh4Li4uKQlwcmludGsoeCkKICNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERCRyh4Li4uKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdHJ1Y3Qgb21hcF9tY2JzcCB7CkBAIC00NCw2ICs0NCw3IEBACiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCAgICAgICByeF93b3JkX2xlbmd0aDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoICAgICAgIHR4X3dvcmRfbGVuZ3RoOwogCisJb21hcF9tY2JzcF9pb190eXBlX3QgICAgICAgICBpb190eXBlOyAvKiBJUlEgb3IgcG9sbCAqLwogCS8qIElSUSBiYXNlZCBUWC9SWCAqLwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfaXJxOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgdHhfaXJxOwpAQCAtNjQsMTAgKzY1LDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3AgbWNic3BbT01BUF9NQVhfTUNCU1BfQ09VTlRdOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiBzdGF0aWMgc3RydWN0IGNsayAqbWNic3BfZHNwX2NrID0gMDsKIHN0YXRpYyBzdHJ1Y3QgY2xrICptY2JzcF9hcGlfY2sgPSAwOwogc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwX2RzcHhvcl9jayA9IDA7Ci0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AxX2ljayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AxX2ZjayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AyX2ljayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqbWNic3AyX2ZjayA9IDA7CitzdGF0aWMgc3RydWN0IGNsayAqc3lzX2NrID0gMDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpzeXNfY2xrb3V0ID0gMDsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBvbWFwX21jYnNwX2R1bXBfcmVnKHU4IGlkKQogewpAQCAtODgsNyArOTgsNiBAQAogCURCRygiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogfQogCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21jYnNwX3R4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKiBtY2JzcF90eCA9IChzdHJ1Y3Qgb21hcF9tY2JzcCAqKShkZXZfaWQpOwpAQCAtMTA5LDcgKzExOCw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0KIHN0YXRpYyB2b2lkIG9tYXBfbWNic3BfdHhfZG1hX2NhbGxiYWNrKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKiBtY2JzcF9kbWFfdHggPSAoc3RydWN0IG9tYXBfbWNic3AgKikoZGF0YSk7CkBAIC0xNzYsNyArMTg0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwgaWQgKyAxKTsKIAkJCXJldHVybiAtMTsKQEAgLTE4Nyw5ICsxOTUsMTAgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kc3BfcmVxdWVzdCh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgewogCQljbGtfZW5hYmxlKG1jYnNwX2RzcF9jayk7CiAJCWNsa19lbmFibGUobWNic3BfYXBpX2NrKTsKIApAQCAtMjA3LDEyICsyMTYsNDkgQEAKIAogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kc3BfZnJlZSh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgewogCQljbGtfZGlzYWJsZShtY2JzcF9kc3B4b3JfY2spOwogCQljbGtfZGlzYWJsZShtY2JzcF9kc3BfY2spOwogCQljbGtfZGlzYWJsZShtY2JzcF9hcGlfY2spOwogCX0KIH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKK3N0YXRpYyB2b2lkIG9tYXAyX21jYnNwMl9tdXhfc2V0dXAodm9pZCkKK3sKKwlvbWFwX2NmZ19yZWcoWTE1XzI0WFhfTUNCU1AyX0NMS1gpOworCW9tYXBfY2ZnX3JlZyhSMTRfMjRYWF9NQ0JTUDJfRlNYKTsKKwlvbWFwX2NmZ19yZWcoVzE1XzI0WFhfTUNCU1AyX0RSKTsKKwlvbWFwX2NmZ19yZWcoVjE1XzI0WFhfTUNCU1AyX0RYKTsKKwlvbWFwX2NmZ19yZWcoVjE0XzI0WFhfR1BJTzExNyk7CisJb21hcF9jZmdfcmVnKFcxNF8yNFhYX1NZU19DTEtPVVQpOworfQorI2VuZGlmCisKKy8qCisgKiBXZSBjYW4gY2hvb3NlIGJldHdlZW4gSVJRIGJhc2VkIG9yIHBvbGxlZCBJTy4KKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jYnNwX3JlcXVlc3QoKS4KKyAqLworaW50IG9tYXBfbWNic3Bfc2V0X2lvX3R5cGUodW5zaWduZWQgaW50IGlkLCBvbWFwX21jYnNwX2lvX3R5cGVfdCBpb190eXBlKQoreworCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisKKwlpZiAoIW1jYnNwW2lkXS5mcmVlKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwgaWQgKyAxKTsKKwkJc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWNic3BbaWRdLmlvX3R5cGUgPSBpb190eXBlOworCisJc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKworCXJldHVybiAwOworfQogCiBpbnQgb21hcF9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCkKIHsKQEAgLTIyMSwxMiArMjY3LDI2IEBACiAJaWYgKG9tYXBfbWNic3BfY2hlY2soaWQpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCS8qCiAJICogT24gMTUxMCwgMTYxMCBhbmQgMTcxMCwgTWNCU1AxIGFuZCBNY0JTUDMKIAkgKiBhcmUgRFNQIHB1YmxpYyBwZXJpcGhlcmFscy4KIAkgKi8KIAlpZiAoaWQgPT0gT01BUF9NQ0JTUDEgfHwgaWQgPT0gT01BUF9NQ0JTUDMpCiAJCW9tYXBfbWNic3BfZHNwX3JlcXVlc3QoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGlkID09IE9NQVBfTUNCU1AxKSB7CisJCQljbGtfZW5hYmxlKG1jYnNwMV9pY2spOworCQkJY2xrX2VuYWJsZShtY2JzcDFfZmNrKTsKKwkJfSBlbHNlIHsKKwkJCWNsa19lbmFibGUobWNic3AyX2ljayk7CisJCQljbGtfZW5hYmxlKG1jYnNwMl9mY2spOworCQl9CisJfQorI2VuZGlmCiAKIAlzcGluX2xvY2soJm1jYnNwW2lkXS5sb2NrKTsKIAlpZiAoIW1jYnNwW2lkXS5mcmVlKSB7CkBAIC0yMzgsMzAgKzI5OCwzMyBAQAogCW1jYnNwW2lkXS5mcmVlID0gMDsKIAlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOwogCi0JLyogV2UgbmVlZCB0byBnZXQgSVJRcyBoZXJlICovCi0JZXJyID0gcmVxdWVzdF9pcnEobWNic3BbaWRdLnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwgMCwKLQkJCSAgIk1jQlNQIiwKLQkJCSAgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQLU1jQlNQOiBVbmFibGUgdG8gcmVxdWVzdCBUWCBJUlEgJWQgZm9yIE1jQlNQJWRcbiIsCi0JCSAgICAgICBtY2JzcFtpZF0udHhfaXJxLCBtY2JzcFtpZF0uaWQpOwotCQlyZXR1cm4gZXJyOworCWlmIChtY2JzcFtpZF0uaW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCQkvKiBXZSBuZWVkIHRvIGdldCBJUlFzIGhlcmUgKi8KKwkJZXJyID0gcmVxdWVzdF9pcnEobWNic3BbaWRdLnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwgMCwKKwkJCQkgICJNY0JTUCIsCisJCQkJICAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCQlpZiAoZXJyICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkIGZvciBNY0JTUCVkXG4iLAorCQkJICAgICAgIG1jYnNwW2lkXS50eF9pcnEsIG1jYnNwW2lkXS5pZCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7CisKKworCQllcnIgPSByZXF1ZXN0X2lycShtY2JzcFtpZF0ucnhfaXJxLCBvbWFwX21jYnNwX3J4X2lycV9oYW5kbGVyLCAwLAorCQkJCSAgIk1jQlNQIiwKKwkJCQkgICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWlmIChlcnIgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQLU1jQlNQOiBVbmFibGUgdG8gcmVxdWVzdCBSWCBJUlEgJWQgZm9yIE1jQlNQJWRcbiIsCisJCQkgICAgICAgbWNic3BbaWRdLnJ4X2lycSwgbWNic3BbaWRdLmlkKTsKKwkJCWZyZWVfaXJxKG1jYnNwW2lkXS50eF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2lycV9jb21wbGV0aW9uKSk7CiAJfQogCi0JaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7Ci0KLQotCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS5yeF9pcnEsIG9tYXBfbWNic3BfcnhfaXJxX2hhbmRsZXIsIDAsCi0JCQkgICJNY0JTUCIsCi0JCQkgICh2b2lkICopICgmbWNic3BbaWRdKSk7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogVW5hYmxlIHRvIHJlcXVlc3QgUlggSVJRICVkIGZvciBNY0JTUCVkXG4iLAotCQkgICAgICAgbWNic3BbaWRdLnJ4X2lycSwgbWNic3BbaWRdLmlkKTsKLQkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfaXJxX2NvbXBsZXRpb24pKTsKIAlyZXR1cm4gMDsKIAogfQpAQCAtMjcxLDggKzMzNCwyNCBAQAogCWlmIChvbWFwX21jYnNwX2NoZWNrKGlkKSA8IDApCiAJCXJldHVybjsKIAotCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykKLQkJb21hcF9tY2JzcF9kc3BfZnJlZSgpOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykKKwkJCW9tYXBfbWNic3BfZHNwX2ZyZWUoKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChpZCA9PSBPTUFQX01DQlNQMSkgeworCQkJY2xrX2Rpc2FibGUobWNic3AxX2ljayk7CisJCQljbGtfZGlzYWJsZShtY2JzcDFfZmNrKTsKKwkJfSBlbHNlIHsKKwkJCWNsa19kaXNhYmxlKG1jYnNwMl9pY2spOworCQkJY2xrX2Rpc2FibGUobWNic3AyX2Zjayk7CisJCX0KKwl9CisjZW5kaWYKIAogCXNwaW5fbG9jaygmbWNic3BbaWRdLmxvY2spOwogCWlmIChtY2JzcFtpZF0uZnJlZSkgewpAQCAtMjg0LDkgKzM2MywxMSBAQAogCW1jYnNwW2lkXS5mcmVlID0gMTsKIAlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOwogCi0JLyogRnJlZSBJUlFzICovCi0JZnJlZV9pcnEobWNic3BbaWRdLnJ4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQlmcmVlX2lycShtY2JzcFtpZF0udHhfaXJxLCAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCWlmIChtY2JzcFtpZF0uaW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCQkvKiBGcmVlIElSUXMgKi8KKwkJZnJlZV9pcnEobWNic3BbaWRdLnJ4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwl9CiB9CiAKIC8qCkBAIC00NjEsNiArNTQyLDExNSBAQAogfQogCiAKK2ludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfeG1pdF93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgd29yZCkKK3sKKwl1MzIgaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggdHhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aCByeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwl1MTYgc3BjcjIsIHNwY3IxLCBhdHRlbXB0cyA9IDAsIHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CisKKwlpZiAodHhfd29yZF9sZW5ndGggIT0gcnhfd29yZF9sZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmlyc3Qgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlIHJlYWR5ICovCisJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCXdoaWxlICghKHNwY3IyICYgWFJEWSkpIHsKKwkJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKKwkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHRyYW5zbWl0dGVyICovCisJCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBzcGNyMiAmICh+WFJTVCkpOworCQkJdWRlbGF5KDEwKTsKKwkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CisJCQl1ZGVsYXkoMTApOworCQkJcHJpbnRrKCJNY0JTUCB0cmFuc21pdHRlciBub3QgcmVhZHlcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwkvKiBOb3cgd2UgY2FuIHB1c2ggdGhlIGRhdGEgKi8KKwlpZiAodHhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCisJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMiwgd29yZCA+PiAxNik7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIxLCB3b3JkICYgMHhmZmZmKTsKKworCS8qIFdlIHdhaXQgZm9yIHRoZSByZWNlaXZlciB0byBiZSByZWFkeSAqLworCXNwY3IxID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKKwl3aGlsZSAoIShzcGNyMSAmIFJSRFkpKSB7CisJCXNwY3IxID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKKwkJaWYgKGF0dGVtcHRzKysgPiAxMDAwKSB7CisJCQkvKiBXZSBtdXN0IHJlc2V0IHRoZSByZWNlaXZlciAqLworCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgJiAoflJSU1QpKTsKKwkJCXVkZWxheSgxMCk7CisJCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCBzcGNyMSB8IFJSU1QpOworCQkJdWRlbGF5KDEwKTsKKwkJCXByaW50aygiTWNCU1AgcmVjZWl2ZXIgbm90IHJlYWR5XG4iKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCisJLyogUmVjZWl2ZXIgaXMgcmVhZHksIGxldCdzIHJlYWQgdGhlIGR1bW15IGRhdGEgKi8KKwlpZiAocnhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCisJCXdvcmRfbXNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjIpOworCXdvcmRfbHNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfcmVjdl93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgKiB3b3JkKQoreworCXUzMiBpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2UsIGNsb2NrX3dvcmQgPSAwOworCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggdHhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7CisJb21hcF9tY2JzcF93b3JkX2xlbmd0aCByeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwl1MTYgc3BjcjIsIHNwY3IxLCBhdHRlbXB0cyA9IDAsIHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CisKKwlpZiAodHhfd29yZF9sZW5ndGggIT0gcnhfd29yZF9sZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmlyc3Qgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlIHJlYWR5ICovCisJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCXdoaWxlICghKHNwY3IyICYgWFJEWSkpIHsKKwkJc3BjcjIgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOworCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKKwkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHRyYW5zbWl0dGVyICovCisJCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBzcGNyMiAmICh+WFJTVCkpOworCQkJdWRlbGF5KDEwKTsKKwkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CisJCQl1ZGVsYXkoMTApOworCQkJcHJpbnRrKCJNY0JTUCB0cmFuc21pdHRlciBub3QgcmVhZHlcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwkvKiBXZSBmaXJzdCBuZWVkIHRvIGVuYWJsZSB0aGUgYnVzIGNsb2NrICovCisJaWYgKHR4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQorCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjIsIGNsb2NrX3dvcmQgPj4gMTYpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMSwgY2xvY2tfd29yZCAmIDB4ZmZmZik7CisKKwkvKiBXZSB3YWl0IGZvciB0aGUgcmVjZWl2ZXIgdG8gYmUgcmVhZHkgKi8KKwlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJd2hpbGUgKCEoc3BjcjEgJiBSUkRZKSkgeworCQlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJCWlmIChhdHRlbXB0cysrID4gMTAwMCkgeworCQkJLyogV2UgbXVzdCByZXNldCB0aGUgcmVjZWl2ZXIgKi8KKwkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxICYgKH5SUlNUKSk7CisJCQl1ZGVsYXkoMTApOworCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgfCBSUlNUKTsKKwkJCXVkZWxheSgxMCk7CisJCQlwcmludGsoIk1jQlNQIHJlY2VpdmVyIG5vdCByZWFkeVxuIik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKworCS8qIFJlY2VpdmVyIGlzIHJlYWR5LCB0aGVyZSBpcyBzb21ldGhpbmcgZm9yIHVzICovCisJaWYgKHJ4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQorCQl3b3JkX21zYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIyKTsKKwl3b3JkX2xzYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIxKTsKKworCXdvcmRbMF0gPSAod29yZF9sc2IgfCAod29yZF9tc2IgPDwgMTYpKTsKKworCXJldHVybiAwOworfQorCisKIC8qCiAgKiBTaW1wbGUgRE1BIGJhc2VkIGJ1ZmZlciByeC90eCByb3V0aW5lcy4KICAqIE5vdGhpbmcgZmFuY3ksIGp1c3QgYSBzaW5nbGUgYnVmZmVyIHR4L3J4IHRocm91Z2ggRE1BLgpAQCAtNDcxLDYgKzY2MSw5IEBACiBpbnQgb21hcF9tY2JzcF94bWl0X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogCWludCBkbWFfdHhfY2g7CisJaW50IHNyY19wb3J0ID0gMDsKKwlpbnQgZGVzdF9wb3J0ID0gMDsKKwlpbnQgc3luY19kZXYgPSAwOwogCiAJaWYgKG9tYXBfbWNic3BfY2hlY2soaWQpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODcsMjAgKzY4MCwyNyBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2RtYV9jb21wbGV0aW9uKSk7CiAKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CisJCWRlc3RfcG9ydCA9IE9NQVBfRE1BX1BPUlRfRU1JRkY7CisJfQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJc3luY19kZXYgPSBtY2JzcFtpZF0uZG1hX3R4X3N5bmM7CisKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAogCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAotCQkJCSAgICAgMCwgMCk7CisJIHN5bmNfZGV2LCAwKTsKIAogCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKLQkJCQkgT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCSBzcmNfcG9ydCwKIAkJCQkgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCiAJCQkJIG1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKIAkJCQkgMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKLQkJCQlPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQkJCWRlc3RfcG9ydCwKIAkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQlidWZmZXIsCiAJCQkJMCwgMCk7CkBAIC01MTQsNiArNzE0LDkgQEAKIGludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJaW50IGRtYV9yeF9jaDsKKwlpbnQgc3JjX3BvcnQgPSAwOworCWludCBkZXN0X3BvcnQgPSAwOworCWludCBzeW5jX2RldiA9IDA7CiAKIAlpZiAob21hcF9tY2JzcF9jaGVjayhpZCkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUzMCwyMCArNzMzLDI3IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKIAorCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlzcmNfcG9ydCA9IE9NQVBfRE1BX1BPUlRfVElQQjsKKwkJZGVzdF9wb3J0ID0gT01BUF9ETUFfUE9SVF9FTUlGRjsKKwl9CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlzeW5jX2RldiA9IG1jYnNwW2lkXS5kbWFfcnhfc3luYzsKKwogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCiAJCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCi0JCQkJICAgICAwLCAwKTsKKwkgc3luY19kZXYsIDApOwogCiAJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCi0JCQkJT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCXNyY19wb3J0LAogCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAogCQkJCW1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSwKIAkJCQkwLCAwKTsKIAogCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKLQkJCQkgT01BUF9ETUFfUE9SVF9FTUlGRiwKKwkJCQkgZGVzdF9wb3J0LAogCQkJCSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQkgYnVmZmVyLAogCQkJCSAwLCAwKTsKQEAgLTY4OCw2ICs4OTgsMjMgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfaW5mbyBtY2JzcF8yNHh4W10gPSB7CisJWzBdID0geyAudmlydF9iYXNlID0gSU9fQUREUkVTUyhPTUFQMjRYWF9NQ0JTUDFfQkFTRSksCisJCS5kbWFfcnhfc3luYyA9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgsCisJCS5kbWFfdHhfc3luYyA9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsCisJCS5yeF9pcnEgPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAorCQkudHhfaXJxID0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKKwkJfSwKKwlbMV0gPSB7IC52aXJ0X2Jhc2UgPSBJT19BRERSRVNTKE9NQVAyNFhYX01DQlNQMl9CQVNFKSwKKwkJLmRtYV9yeF9zeW5jID0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKKwkJLmRtYV90eF9zeW5jID0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKKwkJLnJ4X2lycSA9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCisJCS50eF9pcnEgPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYLAorCQl9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX21jYnNwX2luaXQodm9pZCkKIHsKIAlpbnQgbWNic3BfY291bnQgPSAwLCBpOwpAQCAtNjk1LDYgKzkyMiw3IEBACiAKIAlwcmludGsoIkluaXRpYWxpemluZyBPTUFQIE1jQlNQIHN5c3RlbVxuIik7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCW1jYnNwX2RzcF9jayA9IGNsa19nZXQoMCwgImRzcF9jayIpOwogCWlmIChJU19FUlIobWNic3BfZHNwX2NrKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBkc3BfY2sgaGFuZGxlLlxuIik7CkBAIC03MTAsNiArOTM4LDI5IEBACiAJCXByaW50ayhLRVJOX0VSUiAibWNic3A6IGNvdWxkIG5vdCBhY3F1aXJlIGRzcHhvcl9jayBoYW5kbGUuXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIobWNic3BfZHNweG9yX2NrKTsKIAl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCW1jYnNwMV9pY2sgPSBjbGtfZ2V0KDAsICJtY2JzcDFfaWNrIik7CisJaWYgKElTX0VSUihtY2JzcDFfaWNrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBtY2JzcDFfaWNrIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gUFRSX0VSUihtY2JzcDFfaWNrKTsKKwl9CisJbWNic3AxX2ZjayA9IGNsa19nZXQoMCwgIm1jYnNwMV9mY2siKTsKKwlpZiAoSVNfRVJSKG1jYnNwMV9mY2spKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWNic3A6IGNvdWxkIG5vdCBhY3F1aXJlIG1jYnNwMV9mY2sgaGFuZGxlLlxuIik7CisJCXJldHVybiBQVFJfRVJSKG1jYnNwMV9mY2spOworCX0KKwltY2JzcDJfaWNrID0gY2xrX2dldCgwLCAibWNic3AyX2ljayIpOworCWlmIChJU19FUlIobWNic3AyX2ljaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtY2JzcDogY291bGQgbm90IGFjcXVpcmUgbWNic3AyX2ljayBoYW5kbGUuXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobWNic3AyX2ljayk7CisJfQorCW1jYnNwMl9mY2sgPSBjbGtfZ2V0KDAsICJtY2JzcDJfZmNrIik7CisJaWYgKElTX0VSUihtY2JzcDJfZmNrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1jYnNwOiBjb3VsZCBub3QgYWNxdWlyZSBtY2JzcDJfZmNrIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gUFRSX0VSUihtY2JzcDJfZmNrKTsKKwl9CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewpAQCAtNzE4LDcgKzk2OSw3IEBACiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJbWNic3BfaW5mbyA9IG1jYnNwXzE1MTA7CiAJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF8xNTEwKTsKIAl9CkBAIC03MjksNiArOTgwLDE5IEBACiAJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF8xNjEwKTsKIAl9CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQltY2JzcF9pbmZvID0gbWNic3BfMjR4eDsKKwkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzI0eHgpOworCisJCS8qIFJFVklTSVQ6IHdoZXJlJ3MgdGhlIHJpZ2h0IHBsYWNlPyAqLworCQlvbWFwMl9tY2JzcDJfbXV4X3NldHVwKCk7CisJCXN5c19jayA9IGNsa19nZXQoMCwgInN5c19jayIpOworCQlzeXNfY2xrb3V0ID0gY2xrX2dldCgwLCAic3lzX2Nsa291dCIpOworCQljbGtfc2V0X3BhcmVudChzeXNfY2xrb3V0LCBzeXNfY2spOworCQljbGtfZW5hYmxlKHN5c19jbGtvdXQpOworCX0KKyNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9NQ0JTUF9DT1VOVCA7IGkrKykgewogCQlpZiAoaSA+PSBtY2JzcF9jb3VudCkgewogCQkJbWNic3BbaV0uaW9fYmFzZSA9IDA7CkBAIC03NDEsNiArMTAwNSw3IEBACiAJCW1jYnNwW2ldLmRtYV9yeF9sY2ggPSAtMTsKIAogCQltY2JzcFtpXS5pb19iYXNlID0gbWNic3BfaW5mb1tpXS52aXJ0X2Jhc2U7CisJCW1jYnNwW2ldLmlvX3R5cGUgPSBPTUFQX01DQlNQX0lSUV9JTzsgLyogRGVmYXVsdCBJL08gaXMgSVJRIGJhc2VkICovCiAJCW1jYnNwW2ldLnR4X2lycSA9IG1jYnNwX2luZm9baV0udHhfaXJxOwogCQltY2JzcFtpXS5yeF9pcnEgPSBtY2JzcF9pbmZvW2ldLnJ4X2lycTsKIAkJbWNic3BbaV0uZG1hX3J4X3N5bmMgPSBtY2JzcF9pbmZvW2ldLmRtYV9yeF9zeW5jOwpAQCAtNzUxLDExICsxMDE2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLQogYXJjaF9pbml0Y2FsbChvbWFwX21jYnNwX2luaXQpOwogCiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfY29uZmlnKTsKIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfaW9fdHlwZSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc3RhcnQpOwogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3N0b3ApOwpAQCAtNzYzLDQgKzEwMjgsNiBAQAogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3JlY3Zfd29yZCk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfeG1pdF9idWZmZXIpOwogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zcGlfbWFzdGVyX3htaXRfd29yZF9wb2xsKTsKK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zcGlfbWFzdGVyX3JlY3Zfd29yZF9wb2xsKTsKIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfc3BpX21vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMKaW5kZXggNWNjNjc3NS4uMzc3OTJkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCkBAIC02Miw5ICs2Miw2IEBACiAJaWYgKCFjcHVfaXNfb21hcDE2eHgoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUncyBjbG9jayBmb3IgT0NQSSAqLwotCWNsa19lbmFibGUob2NwaV9jayk7Ci0KIAkvKiBFbmFibGUgYWNjZXNzIGZvciBPSENJIGluIE9DUEkgKi8KIAl2YWwgPSBvbWFwX3JlYWRsKE9DUElfUFJPVCk7CiAJdmFsICY9IH4weGZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwppbmRleCAwOTNlZmQ3Li4xYTI0ZTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggZWU4Mjc2My4uYjdiZjA5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0xNiwyNCArMTYsOTQgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCiAjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKICNkZWZpbmUgT01BUDFfU1JBTV9QQQkJMHgyMDAwMDAwMAogI2RlZmluZSBPTUFQMV9TUkFNX1ZBCQkweGQwMDAwMDAwCiAjZGVmaW5lIE9NQVAyX1NSQU1fUEEJCTB4NDAyMDAwMDAKKyNkZWZpbmUgT01BUDJfU1JBTV9QVUJfUEEJMHg0MDIwZjgwMAogI2RlZmluZSBPTUFQMl9TUkFNX1ZBCQkweGQwMDAwMDAwCisjZGVmaW5lIE9NQVAyX1NSQU1fUFVCX1ZBCTB4ZDAwMDA4MDAKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjZGVmaW5lIFNSQU1fQk9PVExPQURFUl9TWgkweDAwCisjZWxzZQogI2RlZmluZSBTUkFNX0JPT1RMT0FERVJfU1oJMHg4MAorI2VuZGlmCisKKyNkZWZpbmUgVkFfUkVRSU5GT1BFUk0wCQlJT19BRERSRVNTKDB4NjgwMDUwNDgpCisjZGVmaW5lIFZBX1JFQURQRVJNMAkJSU9fQUREUkVTUygweDY4MDA1MDUwKQorI2RlZmluZSBWQV9XUklURVBFUk0wCQlJT19BRERSRVNTKDB4NjgwMDUwNTgpCisjZGVmaW5lIFZBX0NPTlRST0xfU1RBVAkJSU9fQUREUkVTUygweDQ4MDAwMkY4KQorI2RlZmluZSBHUF9ERVZJQ0UJCTB4MzAwCisjZGVmaW5lIFRZUEVfTUFTSwkJMHg3MDAKKworI2RlZmluZSBST1VORF9ET1dOKHZhbHVlLGJvdW5kYXJ5KQkoKHZhbHVlKSAmICh+KChib3VuZGFyeSktMSkpKQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX3NyYW1fYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9zaXplOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX2NlaWw7CiAKK3Vuc2lnbmVkIGxvbmcgb21hcF9mYl9zcmFtX3N0YXJ0OwordW5zaWduZWQgbG9uZyBvbWFwX2ZiX3NyYW1fc2l6ZTsKKworLyogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgUkFNRlMgZmlyZXdhbGwgc2V0dXAsIHRoZSBwdWJsaWMgdXNhYmxlIGFtb3VudCBvZgorICogU1JBTSB2YXJpZXMuICBUaGUgZGVmYXVsdCBhY2Nlc3NhYmxlIHNpemUgZm9yIGFsbCBkZXZpY2UgdHlwZXMgaXMgMmsuIEEgR1AKKyAqIGRldmljZSBhbGxvd3MgQVJNMTEgYnV0IG5vdCBvdGhlciBpbml0YXRvcnMgZm9yIGZ1bGwgc2l6ZS4gVGhpcworICogZnVuY3Rpb25hbGl0eSBzZWVtcyBvayB1bnRpbCBzb21lIG5pY2Ugc2VjdXJpdHkgQVBJIGhhcHBlbnMuCisgKi8KK3N0YXRpYyBpbnQgaXNfc3JhbV9sb2NrZWQodm9pZCkKK3sKKwlpbnQgdHlwZSA9IDA7CisKKwlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCisJCXR5cGUgPSBfX3Jhd19yZWFkbChWQV9DT05UUk9MX1NUQVQpICYgVFlQRV9NQVNLOworCisJaWYgKHR5cGUgPT0gR1BfREVWSUNFKSB7CisJCS8qIFJBTUZXOiBSL1cgYWNjZXNzIHRvIGFsbCBpbml0YXRvcnMgZm9yIGFsbCBxdWFsaWZpZXIgc2V0cyAqLworCQlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKKwkJCV9fcmF3X3dyaXRlbCgweEZGLCBWQV9SRVFJTkZPUEVSTTApOyAvKiBhbGwgcS12ZWN0cyAqLworCQkJX19yYXdfd3JpdGVsKDB4Q0ZERSwgVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KKwkJCV9fcmF3X3dyaXRlbCgweENGREUsIFZBX1dSSVRFUEVSTTApOyAvKiBhbGwgaS13cml0ZSAqLworCQl9CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsgLyogYXNzdW1lIGxvY2tlZCB3aXRoIG5vIFBQQSBvciBzZWN1cml0eSBkcml2ZXIgKi8KK30KKwordm9pZCBnZXRfZmJfc3JhbV9jb25mKHVuc2lnbmVkIGxvbmcgc3RhcnRfYXZhaWwsIHVuc2lnbmVkIHNpemVfYXZhaWwsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWNvbnN0IHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyAqZmJtZW1fY29uZjsKKworCWZibWVtX2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfRkJNRU0sIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyk7CisJaWYgKGZibWVtX2NvbmYgIT0gTlVMTCkgeworCQkqc3RhcnQgPSBmYm1lbV9jb25mLT5mYl9zcmFtX3N0YXJ0OworCQkqc2l6ZSA9IGZibWVtX2NvbmYtPmZiX3NyYW1fc2l6ZTsKKwl9IGVsc2UgeworCQkqc2l6ZSA9IDA7CisJCSpzdGFydCA9IDA7CisJfQorCisJaWYgKCpzaXplICYmICgKKwkgICAgKnN0YXJ0IDwgc3RhcnRfYXZhaWwgfHwKKwkgICAgKnN0YXJ0ICsgKnNpemUgPiBzdGFydF9hdmFpbCArIHNpemVfYXZhaWwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBGQiBTUkFNIGNvbmZpZ3VyYXRpb25cbiIpOworCQkqc3RhcnQgPSBzdGFydF9hdmFpbDsKKwkJKnNpemUgPSBzaXplX2F2YWlsOworCX0KKworCWlmICgqc2l6ZSkKKwkJcHJfaW5mbygiUmVzZXJ2aW5nICVsdSBieXRlcyBTUkFNIGZvciBmcmFtZSBidWZmZXJcbiIsICpzaXplKTsKK30KKwogLyoKICAqIFRoZSBhbW91bnQgb2YgU1JBTSBkZXBlbmRzIG9uIHRoZSBjb3JlIHR5cGUuCiAgKiBOb3RlIHRoYXQgd2UgY2Fubm90IHRyeSB0byB0ZXN0IGZvciBTUkFNIGhlcmUgYmVjYXVzZSB3cml0ZXMKQEAgLTQyLDI2ICsxMTIsNDUgQEAKICAqLwogdm9pZCBfX2luaXQgb21hcF9kZXRlY3Rfc3JhbSh2b2lkKQogewotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJdW5zaWduZWQgbG9uZyBzcmFtX3N0YXJ0OworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChpc19zcmFtX2xvY2tlZCgpKSB7CisJCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAyX1NSQU1fUFVCX1ZBOworCQkJc3JhbV9zdGFydCA9IE9NQVAyX1NSQU1fUFVCX1BBOworCQkJb21hcF9zcmFtX3NpemUgPSAweDgwMDsgLyogMksgKi8KKwkJfSBlbHNlIHsKKwkJCW9tYXBfc3JhbV9iYXNlID0gT01BUDJfU1JBTV9WQTsKKwkJCXNyYW1fc3RhcnQgPSBPTUFQMl9TUkFNX1BBOworCQkJaWYgKGNwdV9pc19vbWFwMjQyeCgpKQorCQkJCW9tYXBfc3JhbV9zaXplID0gMHhhMDAwMDsgLyogNjQwSyAqLworCQkJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDN4KCkpCisJCQkJb21hcF9zcmFtX3NpemUgPSAweDEwMDAwOyAvKiA2NEsgKi8KKwkJfQorCX0gZWxzZSB7CiAJCW9tYXBfc3JhbV9iYXNlID0gT01BUDFfU1JBTV9WQTsKLQllbHNlCi0JCW9tYXBfc3JhbV9iYXNlID0gT01BUDJfU1JBTV9WQTsKKwkJc3JhbV9zdGFydCA9IE9NQVAxX1NSQU1fUEE7CiAKLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwkvKiAyMDBLICovCi0JZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHgzMDAwMDsJLyogMTkySyAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTYxMCgpIHx8IGNwdV9pc19vbWFwMTYyMSgpIHx8IGNwdV9pc19vbWFwMTcxMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsJLyogMTZLICovCi0JZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHgzZTgwMDsJLyogMjUwSyAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQyMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4YTAwMTQ7CS8qIDY0MEsgKi8KLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGV0ZWN0IFNSQU0gc2l6ZVxuIik7Ci0JCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOworCQlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsJLyogMjAwSyAqLworCQllbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJCW9tYXBfc3JhbV9zaXplID0gMHgzMDAwMDsJLyogMTkySyAqLworCQllbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE2MjEoKSB8fAorCQkgICAgIGNwdV9pc19vbWFwMTcxMCgpKQorCQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CS8qIDE2SyAqLworCQllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKKwkJCW9tYXBfc3JhbV9zaXplID0gMHgzZTgwMDsJLyogMjUwSyAqLworCQllbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGRldGVjdCBTUkFNIHNpemVcbiIpOworCQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CisJCX0KIAl9Ci0KKwlnZXRfZmJfc3JhbV9jb25mKHNyYW1fc3RhcnQgKyBTUkFNX0JPT1RMT0FERVJfU1osCisJCQkgb21hcF9zcmFtX3NpemUgLSBTUkFNX0JPT1RMT0FERVJfU1osCisJCQkgJm9tYXBfZmJfc3JhbV9zdGFydCwgJm9tYXBfZmJfc3JhbV9zaXplKTsKKwlpZiAob21hcF9mYl9zcmFtX3NpemUpCisJCW9tYXBfc3JhbV9zaXplIC09IHNyYW1fc3RhcnQgKyBvbWFwX3NyYW1fc2l6ZSAtCisJCQkJICBvbWFwX2ZiX3NyYW1fc3RhcnQ7CiAJb21hcF9zcmFtX2NlaWwgPSBvbWFwX3NyYW1fYmFzZSArIG9tYXBfc3JhbV9zaXplOwogfQogCkBAIC04MCwxMiArMTY5LDIwIEBACiAgKi8KIHZvaWQgX19pbml0IG9tYXBfbWFwX3NyYW0odm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKIAlpZiAob21hcF9zcmFtX3NpemUgPT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnZpcnR1YWwgPSBPTUFQMl9TUkFNX1ZBOwotCQlvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4gPSBfX3BoeXNfdG9fcGZuKE9NQVAyX1NSQU1fUEEpOworCisJCWlmIChpc19zcmFtX2xvY2tlZCgpKQorCQkJYmFzZSA9IE9NQVAyX1NSQU1fUFVCX1BBOworCQllbHNlCisJCQliYXNlID0gT01BUDJfU1JBTV9QQTsKKwkJYmFzZSA9IFJPVU5EX0RPV04oYmFzZSwgUEFHRV9TSVpFKTsKKwkJb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuID0gX19waHlzX3RvX3BmbihiYXNlKTsKIAl9CiAKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSAob21hcF9zcmFtX3NpemUgKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOwpAQCAtOTMsNyArMTkwLDggQEAKIAlpb3RhYmxlX2luaXQob21hcF9zcmFtX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcF9zcmFtX2lvX2Rlc2MpKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlNSQU06IE1hcHBlZCBwYSAweCUwOGx4IHRvIHZhIDB4JTA4bHggc2l6ZTogMHglbHhcbiIsCi0JICAgICAgIG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiwgb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKKwlfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCisJb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKIAkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKIAogCS8qCkBAIC0xMTgsOCArMjE2LDkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisKIAlvbWFwX3NyYW1fY2VpbCAtPSBzaXplOwotCW9tYXBfc3JhbV9jZWlsICY9IH4weDM7CisJb21hcF9zcmFtX2NlaWwgPSBST1VORF9ET1dOKG9tYXBfc3JhbV9jZWlsLCBzaXplb2Yodm9pZCAqKSk7CiAJbWVtY3B5KCh2b2lkICopb21hcF9zcmFtX2NlaWwsIHN0YXJ0LCBzaXplKTsKIAogCXJldHVybiAodm9pZCAqKW9tYXBfc3JhbV9jZWlsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE5NDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYworICoKKyAqIE9NQVAgMzJLIFRpbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGFydGlhbCB0aW1lciByZXdyaXRlIGFuZCBhZGRpdGlvbmFsIGR5bmFtaWMgdGljayB0aW1lciBzdXBwb3J0IGJ5CisgKiBUb255IExpbmRnZW4gPHRvbnlAYXRvbWlkZS5jb20+IGFuZAorICogVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKgorICogTVBVIHRpbWVyIGNvZGUgYmFzZWQgb24gdGhlIG9sZGVyIE1QVSB0aW1lciBjb2RlIGZvciBPTUFQCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUmlkZ2VSdW4sIEluYy4KKyAqIEF1dGhvcjogR3JlZyBMb25ub24gPGdsb25ub25AcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3N0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMzJLSHogT1MgdGltZXIKKyAqCisgKiBUaGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IG9uIDE2eHgsIGFzIDE1MTAgZG9lcyBub3QgaGF2ZSB0aGUgY29udGludW91cworICogMzJLSHogc3luY2hyb25vdXMgdGltZXIuIFRoZSAzMktIeiBzeW5jaHJvbm91cyB0aW1lciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sKKyAqIG9mIHRpbWUgaW4gYWRkaXRpb24gdG8gdGhlIDMyS0h6IE9TIHRpbWVyLiBVc2luZyBvbmx5IHRoZSAzMktIeiBPUyB0aW1lcgorICogb24gMTUxMCB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IHRoZSB0aW1lciB3b3VsZCBub3QgYmUgYXMgYWNjdXJhdGUgYXMKKyAqIHdpdGggdGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweDQ4MDA0MDEwCisjZWxzZQorI2Vycm9yIE9NQVAgMzJLSHogdGltZXIgZG9lcyBub3QgY3VycmVudGx5IHdvcmsgb24gMTVYWCEKKyNlbmRpZgorCisvKiAxNnh4IHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0JBU0UJCTB4ZmZmYjkwMDAKKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0NSCQkweDA4CisjZGVmaW5lIE9NQVAxXzMyS19USU1FUl9UVlIJCTB4MDAKKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX1RDUgkJMHgwNAorCisvKiAyNHh4IHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUDJfR1BfVElNRVJfQkFTRQkJMHg0ODAyODAwMAorI2RlZmluZSBDTV9DTEtTRUxfV0tVUAkJCTB4NDgwMDg0NDAKKyNkZWZpbmUgR1BfVElNRVJfVElEUgkJCTB4MDAKKyNkZWZpbmUgR1BfVElNRVJfVElTUgkJCTB4MTgKKyNkZWZpbmUgR1BfVElNRVJfVElFUgkJCTB4MWMKKyNkZWZpbmUgR1BfVElNRVJfVENMUgkJCTB4MjQKKyNkZWZpbmUgR1BfVElNRVJfVENSUgkJCTB4MjgKKyNkZWZpbmUgR1BfVElNRVJfVExEUgkJCTB4MmMKKyNkZWZpbmUgR1BfVElNRVJfVFRHUgkJCTB4MzAKKyNkZWZpbmUgR1BfVElNRVJfVFNJQ1IJCQkweDQwCisKKyNkZWZpbmUgT01BUF8zMktfVElDS1NfUEVSX0haCQkoMzI3NjggLyBIWikKKworLyoKKyAqIFRSTSBzYXlzIDEgLyBIWiA9ICggVFZSICsgMSkgLyAzMjc2OCwgc28gVFJWID0gKDMyNzY4IC8gSFopIC0gMQorICogc28gd2l0aCBIWiA9IDEyOCwgVFZSID0gMjU1LgorICovCisjZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RJQ0tfUEVSSU9ECSgoMzI3NjggLyBIWikgLSAxKQorCisjZGVmaW5lIEpJRkZJRVNfVE9fSFdfVElDS1MobnJfamlmZmllcywgY2xvY2tfcmF0ZSkJCQlcCisJCQkJKCgobnJfamlmZmllcykgKiAoY2xvY2tfcmF0ZSkpIC8gSFopCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl93cml0ZShpbnQgdmFsLCBpbnQgcmVnKQoreworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJb21hcF93cml0ZXcodmFsLCBPTUFQMV8zMktfVElNRVJfQkFTRSArIHJlZyk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXBfd3JpdGVsKHZhbCwgT01BUDJfR1BfVElNRVJfQkFTRSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aW1lcl9yZWFkKGludCByZWcpCit7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlyZXR1cm4gb21hcF9yZWFkbChPTUFQMV8zMktfVElNRVJfQkFTRSArIHJlZykgJiAweGZmZmZmZjsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDJfR1BfVElNRVJfQkFTRSArIHJlZyk7Cit9CisKKy8qCisgKiBUaGUgMzJLSHogc3luY2hyb25pemVkIHRpbWVyIGlzIGFuIGFkZGl0aW9uYWwgdGltZXIgb24gMTZ4eC4KKyAqIEl0IGlzIGFsd2F5cyBydW5uaW5nLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfc3luY190aW1lcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfcmVhZGwoVElNRVJfMzJLX1NZTkNIUk9OSVpFRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQoreworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlvbWFwXzMya190aW1lcl93cml0ZShsb2FkX3ZhbCwgT01BUDFfMzJLX1RJTUVSX1RWUik7CisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MGYsIE9NQVAxXzMyS19USU1FUl9DUik7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbCwgR1BfVElNRVJfVENSUik7CisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKCgxIDw8IDEpLCBHUF9USU1FUl9USUVSKTsKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoKDEgPDwgMSkgfCAxLCBHUF9USU1FUl9UQ0xSKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdG9wKHZvaWQpCit7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVAxXzMyS19USU1FUl9DUik7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MCwgR1BfVElNRVJfVENMUik7Cit9CisKKy8qCisgKiBSb3VuZHMgZG93biB0byBuZWFyZXN0IHVzZWMuIE5vdGUgdGhhdCB0aGlzIHdpbGwgb3ZlcmZsb3cgZm9yIGxhcmdlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aWNrc190b191c2Vjcyh1bnNpZ25lZCBsb25nIHRpY2tzXzMyaykKK3sKKwlyZXR1cm4gKHRpY2tzXzMyayAqIDUqNSo1KjUqNSo1KSA+PiA5OworfQorCisvKgorICogUm91bmRzIGRvd24gdG8gbmVhcmVzdCBuc2VjLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZworb21hcF8zMmtfdGlja3NfdG9fbnNlY3ModW5zaWduZWQgbG9uZyB0aWNrc18zMmspCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpY2tzXzMyayAqIDEwMDAgKiA1KjUqNSo1KjUqNSA+PiA5OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwXzMya19sYXN0X3RpY2sgPSAwOworCisvKgorICogUmV0dXJucyBlbGFwc2VkIHVzZWNzIHNpbmNlIGxhc3QgMzJrIHRpbWVyIGludGVycnVwdAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aW1lcl9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKKwlyZXR1cm4gb21hcF8zMmtfdGlja3NfdG9fdXNlY3Mobm93IC0gb21hcF8zMmtfbGFzdF90aWNrKTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCB0aW1lIGZyb20gYm9vdCBpbiBuc2Vjcy4gSXQncyBPSyBmb3IgdGhpcyB0byB3cmFwCisgKiBhcm91bmQgZm9yIG5vdywgYXMgaXQncyBqdXN0IGEgcmVsYXRpdmUgdGltZSBzdGFtcC4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpKTsKK30KKworLyoKKyAqIFRpbWVyIGludGVycnVwdCBmb3IgMzJLSHogdGltZXIuIFdoZW4gZHluYW1pYyB0aWNrIGlzIGVuYWJsZWQsIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGZyb20gb3RoZXIgaW50ZXJydXB0cyB0byByZW1vdmUgbGF0ZW5jeQorICogaXNzdWVzIHdpdGggZHluYW1pYyB0aWNrLiBJbiB0aGUgZHluYW1pYyB0aWNrIGNhc2UsIHdlIG5lZWQgdG8gbG9jaworICogd2l0aCBpcnFzYXZlLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF8zMmtfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1MzIgc3RhdHVzID0gb21hcF8zMmtfdGltZXJfcmVhZChHUF9USU1FUl9USVNSKTsKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoc3RhdHVzLCBHUF9USU1FUl9USVNSKTsKKwl9CisKKwlub3cgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKKworCXdoaWxlIChub3cgLSBvbWFwXzMya19sYXN0X3RpY2sgPj0gT01BUF8zMktfVElDS1NfUEVSX0haKSB7CisJCW9tYXBfMzJrX2xhc3RfdGljayArPSBPTUFQXzMyS19USUNLU19QRVJfSFo7CisJCXRpbWVyX3RpY2socmVncyk7CisJfQorCisJLyogUmVzdGFydCB0aW1lciBzbyB3ZSBkb24ndCBkcmlmdCBvZmYgZHVlIHRvIG1vZHVsbyBvciBkeW5hbWljIHRpY2suCisJICogQnkgZGVmYXVsdCB3ZSBwcm9ncmFtIHRoZSBuZXh0IHRpbWVyIHRvIGJlIGNvbnRpbnVvdXMgdG8gYXZvaWQKKwkgKiBsYXRlbmNpZXMgZHVyaW5nIGhpZ2ggc3lzdGVtIGxvYWQuIER1cmluZyBkeW5hbWljIHRpY2sgb3BlcmF0aW9uIHRoZQorCSAqIGNvbnRpbnVvdXMgdGltZXIgY2FuIGJlIG92ZXJyaWRkZW4gZnJvbSBwbV9pZGxlIHRvIGJlIGxvbmdlci4KKwkgKi8KKwlvbWFwXzMya190aW1lcl9zdGFydChvbWFwXzMya19sYXN0X3RpY2sgKyBPTUFQXzMyS19USUNLU19QRVJfSFogLSBub3cpOworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorLyoKKyAqIFByb2dyYW1zIHRoZSBuZXh0IHRpbWVyIGludGVycnVwdCBuZWVkZWQuIENhbGxlZCB3aGVuIGR5bmFtaWMgdGljayBpcworICogZW5hYmxlZCwgYW5kIHRvIHJlcHJvZ3JhbSB0aGUgdGlja3MgdG8gc2tpcCBmcm9tIHBtX2lkbGUuIE5vdGUgdGhhdAorICogd2UgY2FuIGtlZXAgdGhlIHRpbWVyIGNvbnRpbnVvdXMsIGFuZCBkb24ndCBuZWVkIHRvIHNldCBpdCB0byBydW4gaW4KKyAqIG9uZS1zaG90IG1vZGUuIFRoaXMgaXMgYmVjYXVzZSB0aGUgdGltZXIgd2lsbCBnZXQgcmVwcm9ncmFtbWVkIGFnYWluCisgKiBhZnRlciBuZXh0IGludGVycnVwdC4KKyAqLwordm9pZCBvbWFwXzMya190aW1lcl9yZXByb2dyYW0odW5zaWduZWQgbG9uZyBuZXh0X3RpY2spCit7CisJb21hcF8zMmtfdGltZXJfc3RhcnQoSklGRklFU19UT19IV19USUNLUyhuZXh0X3RpY2ssIDMyNzY4KSArIDEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnE7CitleHRlcm4gc3RydWN0IHRpbWVyX3VwZGF0ZV9oYW5kbGVyIHRpbWVyX3VwZGF0ZTsKKworc3RhdGljIGludCBvbWFwXzMya190aW1lcl9lbmFibGVfZHluX3RpY2sodm9pZCkKK3sKKwkvKiBObyBuZWVkIHRvIHJlcHJvZ3JhbSB0aW1lciwganVzdCB1c2UgdGhlIG5leHQgaW50ZXJydXB0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF8zMmtfdGltZXJfZGlzYWJsZV9keW5fdGljayh2b2lkKQoreworCW9tYXBfMzJrX3RpbWVyX3N0YXJ0KE9NQVBfMzJLX1RJTUVSX1RJQ0tfUEVSSU9EKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkeW5fdGlja190aW1lciBvbWFwX2R5bl90aWNrX3RpbWVyID0geworCS5lbmFibGUJCT0gb21hcF8zMmtfdGltZXJfZW5hYmxlX2R5bl90aWNrLAorCS5kaXNhYmxlCT0gb21hcF8zMmtfdGltZXJfZGlzYWJsZV9keW5fdGljaywKKwkucmVwcm9ncmFtCT0gb21hcF8zMmtfdGltZXJfcmVwcm9ncmFtLAorCS5oYW5kbGVyCT0gb21hcF8zMmtfdGltZXJfaW50ZXJydXB0LAorfTsKKyNlbmRpZgkvKiBDT05GSUdfTk9fSURMRV9IWiAqLworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIjMyS0h6IHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqIGdwdDFfaWNrOworc3RhdGljIHN0cnVjdCBjbGsgKiBncHQxX2ZjazsKKworc3RhdGljIF9faW5pdCB2b2lkIG9tYXBfaW5pdF8zMmtfdGltZXIodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorCW9tYXBfdGltZXIuZHluX3RpY2sgPSAmb21hcF9keW5fdGlja190aW1lcjsKKyNlbmRpZgorCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlzZXR1cF9pcnEoSU5UX09TX1RJTUVSLCAmb21hcF8zMmtfdGltZXJfaXJxKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXNldHVwX2lycSgzNywgJm9tYXBfMzJrX3RpbWVyX2lycSk7CisJb21hcF90aW1lci5vZmZzZXQgID0gb21hcF8zMmtfdGltZXJfZ2V0dGltZW9mZnNldDsKKwlvbWFwXzMya19sYXN0X3RpY2sgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKKworCS8qIFJFVklTSVQ6IENoZWNrIDI0eHggVElPQ1BfQ0ZHIHNldHRpbmdzIGFmdGVyIGlkbGUgd29ya3MgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoMCwgR1BfVElNRVJfVENMUik7CisJCW9tYXBfd3JpdGVsKDAsIENNX0NMS1NFTF9XS1VQKTsJCS8qIDMyS0h6IGNsb2NrIHNvdXJjZSAqLworCisJCWdwdDFfaWNrID0gY2xrX2dldChOVUxMLCAiZ3B0MV9pY2siKTsKKwkJaWYgKElTX0VSUihncHQxX2ljaykpCisJCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgZ3B0MV9pY2tcbiIpOworCQllbHNlCisJCQljbGtfZW5hYmxlKGdwdDFfaWNrKTsKKworCQlncHQxX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwdDFfZmNrIik7CisJCWlmIChJU19FUlIoZ3B0MV9mY2spKQorCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IGdwdDFfZmNrXG4iKTsKKwkJZWxzZQorCQkJY2xrX2VuYWJsZShncHQxX2Zjayk7CisKKwkJbWRlbGF5KDEwMCk7CQkvKiBXYWl0IGZvciBjbG9ja3MgdG8gc3RhYmlsaXplICovCisKKwkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHg3LCBHUF9USU1FUl9USVNSKTsKKwl9CisKKwlvbWFwXzMya190aW1lcl9zdGFydChPTUFQXzMyS19USU1FUl9USUNLX1BFUklPRCk7Cit9CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRpbWVyIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfdGltZXJfaW5pdCh2b2lkKQoreworCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKK30KKworc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0geworCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IE5VTEwsCQkvKiBJbml0aWFsaXplZCBsYXRlciAqLworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDhhYjUzMDAuLjZkN2RlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IE1vbiBGZWIgMjAgMTA6MTg6MDIgMjAwNgorIyBMYXN0IHVwZGF0ZTogTW9uIE1heSA4IDIwOjExOjA1IDIwMDYKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtNTY2LDggKzU2Niw4IEBACiBlbnNfY211CQkJTUFDSF9FTlNfQ01VCQlFTlNfQ01VCQkJNTUwCiBtbTZfc2RiCQkJTUFDSF9NTTZfU0RCCQlNTTZfU0RCCQkJNTUxCiBzYXR1cm4JCQlNQUNIX1NBVFVSTgkJU0FUVVJOCQkJNTUyCi1hcmdvbnBsdXNldmIJCU1BQ0hfQVJHT05QTFVTRVZCCUFSR09OUExVU0VWQgkJNTUzCi1zY21hMTFldmIJCU1BQ0hfU0NNQTExRVZCCQlTQ01BMTFFVkIJCTU1NAoraTMwMDMwZXZiCQlNQUNIX0FSR09OUExVU0VWQglBUkdPTlBMVVNFVkIJCTU1MworbXhjMjc1MzBldmIJCU1BQ0hfU0NNQTExRVZCCQlTQ01BMTFFVkIJCTU1NAogc21kazI4MDAJCU1BQ0hfU01ESzI4MDAJCVNNREsyODAwCQk1NTUKIG10d2lsc29uCQlNQUNIX01UV0lMU09OCQlNVFdJTFNPTgkJNTU2CiB6aXRpCQkJTUFDSF9aSVRJCQlaSVRJCQkJNTU3CkBAIC02NDcsNyArNjQ3LDcgQEAKIG14MmphenoJCQlNQUNIX01YMkpBWloJCU1YMkpBWloJCQk2MzEKIG11bHRpaW8JCQlNQUNIX01VTFRJSU8JCU1VTFRJSU8JCQk2MzIKIGhyZGlzcGxheQkJTUFDSF9IUkRJU1BMQVkJCUhSRElTUExBWQkJNjMzCi1zY21hMTFiYgkJTUFDSF9TQ01BMTFCQgkJU0NNQTExQkIJCTYzNAorbXhjMjc1MzBhZHMJCU1BQ0hfU0NNQTExQkIJCVNDTUExMUJCCQk2MzQKIHRyaXplcHMzCQlNQUNIX1RSSVpFUFMzCQlUUklaRVBTMwkJNjM1CiB6ZWZlZXJkemEJCU1BQ0hfWkVGRUVSRFpBCQlaRUZFRVJEWkEJCTYzNgogemVmZWVyZHpiCQlNQUNIX1pFRkVFUkRaQgkJWkVGRUVSRFpCCQk2MzcKQEAgLTcyMSw3ICs3MjEsNyBAQAogZ2VtCQkJTUFDSF9HRU0JCUdFTQkJCTcwNwogaTg1OAkJCU1BQ0hfSTg1OAkJSTg1OAkJCTcwOAogaHgyNzUwCQkJTUFDSF9IWDI3NTAJCUhYMjc1MAkJCTcwOQotemV1c2V2YgkJCU1BQ0hfWkVVU0VWQgkJWkVVU0VWQgkJCTcxMAorbXhjOTExMzFldmIJCU1BQ0hfWkVVU0VWQgkJWkVVU0VWQgkJCTcxMAogcDcwMAkJCU1BQ0hfUDcwMAkJUDcwMAkJCTcxMQogY3BlCQkJTUFDSF9DUEUJCUNQRQkJCTcxMgogc3BpdHoJCQlNQUNIX1NQSVRaCQlTUElUWgkJCTcxMwpAQCAtODAyLDcgKzgwMiw3IEBACiByZWE5MjAwCQkJTUFDSF9SRUE5MjAwCQlSRUE5MjAwCQkJNzg4CiBhY3RzX3B1bmVfc2ExMTEwCU1BQ0hfQUNUU19QVU5FX1NBMTExMAlBQ1RTX1BVTkVfU0ExMTEwCTc4OQogaXhwNDI1CQkJTUFDSF9JWFA0MjUJCUlYUDQyNQkJCTc5MAotYXJnb25wbHVzb2R5c3NleQlNQUNIX0FSR09OUExVU09EWVNTRVkJQVJHT05QTFVTT0RZU1NFWQk3OTEKK2kzMDAzMGFkcwkJTUFDSF9BUkdPTlBMVVNPRFlTU0VZCUFSR09OUExVU09EWVNTRVkJNzkxCiBwZXJjaAkJCU1BQ0hfUEVSQ0gJCVBFUkNICQkJNzkyCiBlaXMwNXIxCQkJTUFDSF9FSVMwNVIxCQlFSVMwNVIxCQkJNzkzCiBwZXBwZXJwYWQJCU1BQ0hfUEVQUEVSUEFECQlQRVBQRVJQQUQJCTc5NApAQCAtODI3LDcgKzgyNyw3IEBACiB1YzU0NzFkc3AJCU1BQ0hfVUM1NDcxRFNQCQlVQzU0NzFEU1AJCTgxMwogc2o1NDcxZW5nCQlNQUNIX1NKNTQ3MUVORwkJU0o1NDcxRU5HCQk4MTQKIG5vbmUJCQlNQUNIX0NNUFhBMjZYCQlDTVBYQTI2WAkJODE1Ci1uYwkJCU1BQ0hfTkMJCQlOQwkJCTgxNgorbmMxCQkJTUFDSF9OQwkJCU5DCQkJODE2CiBvbWFwX3BhbG10ZQkJTUFDSF9PTUFQX1BBTE1URQlPTUFQX1BBTE1URQkJODE3CiBhamF4NTJ4CQkJTUFDSF9BSkFYNTJYCQlBSkFYNTJYCQkJODE4CiBzaXJpdXN0YXIJCU1BQ0hfU0lSSVVTVEFSCQlTSVJJVVNUQVIJCTgxOQpAQCAtOTMwLDcgKzkzMCw3IEBACiB4c2NhbGVfcGFsbXR0NQkJTUFDSF9YU0NBTEVfUEFMTVRUNQlYU0NBTEVfUEFMTVRUNQkJOTE3CiB4c2NhbGVfcGFsbXRjCQlNQUNIX09NQVBfUEFMTVRDCU9NQVBfUEFMTVRDCQk5MTgKIG9tYXBfYXBvbGxvbgkJTUFDSF9PTUFQX0FQT0xMT04JT01BUF9BUE9MTE9OCQk5MTkKLWFyZ29ubHZldmIJCU1BQ0hfQVJHT05MVkVWQgkJQVJHT05MVkVWQgkJOTIwCitteGMzMDAzMGV2YgkJTUFDSF9BUkdPTkxWRVZCCQlBUkdPTkxWRVZCCQk5MjAKIHJlYV8yZAkJCU1BQ0hfUkVBXzJECQlSRUFfMkQJCQk5MjEKIGV0aTNlNTI0CQlNQUNIX1RJM0U1MjQJCVRJM0U1MjQJCQk5MjIKIGF0ZWI5MjAwCQlNQUNIX0FURUI5MjAwCQlBVEVCOTIwMAkJOTIzCkBAIC05NjUsNyArOTY1LDc4IEBACiByeDE5NTAJCQlNQUNIX1JYMTk1MAkJUlgxOTUwCQkJOTUyCiB0c2NfdmVudXMJCU1BQ0hfVFNDX1ZFTlVTCQlUU0NfVkVOVVMJCTk1MwogZHMxMDFqCQkJTUFDSF9EUzEwMUoJCURTMTAxSgkJCTk1NAotbXhjMzAwXzMwYWRzCQlNQUNIX01YQzMwMDMwQURTCU1YQzMwMDMwQURTCQk5NTUKK214YzMwMDMwYWRzCQlNQUNIX01YQzMwMDMwQURTCU1YQzMwMDMwQURTCQk5NTUKIGZ1aml0c3Vfd2ltYXhzb2MJTUFDSF9GVUpJVFNVX1dJTUFYU09DCUZVSklUU1VfV0lNQVhTT0MJOTU2CiBkdWFscGNtb2RlbQkJTUFDSF9EVUFMUENNT0RFTQlEVUFMUENNT0RFTQkJOTU3CiBnZXNiYzkzMTIJCU1BQ0hfR0VTQkM5MzEyCQlHRVNCQzkzMTIJCTk1OAoraHRjYXBhY2hlCQlNQUNIX0hUQ0FQQUNIRQkJSFRDQVBBQ0hFCQk5NTkKK2l4ZHA0MzUJCQlNQUNIX0lYRFA0MzUJCUlYRFA0MzUJCQk5NjAKK2NhdHByb3Z0MTAwCQlNQUNIX0NBVFBST1ZUMTAwCUNBVFBST1ZUMTAwCQk5NjEKK3BpY290dXgxeHgJCU1BQ0hfUElDT1RVWDFYWAkJUElDT1RVWDFYWAkJOTYyCitwaWNvdHV4Mnh4CQlNQUNIX1BJQ09UVVgyWFgJCVBJQ09UVVgyWFgJCTk2MworZHNtZzYwMAkJCU1BQ0hfRFNNRzYwMAkJRFNNRzYwMAkJCTk2NAorZW1wYzIJCQlNQUNIX0VNUEMyCQlFTVBDMgkJCTk2NQordmVudHVyYQkJCU1BQ0hfVkVOVFVSQQkJVkVOVFVSQQkJCTk2NgorcGhpZGdldF9zYmMJCU1BQ0hfUEhJREdFVF9TQkMJUEhJREdFVF9TQkMJCTk2NworaWozawkJCU1BQ0hfSUozSwkJSUozSwkJCTk2OAorcGlzZ2FoCQkJTUFDSF9QSVNHQUgJCVBJU0dBSAkJCTk2OQorb21hcF9mc2FtcGxlCQlNQUNIX09NQVBfRlNBTVBMRQlPTUFQX0ZTQU1QTEUJCTk3MAorc2c3MjAJCQlNQUNIX1NHNzIwCQlTRzcyMAkJCTk3MQorcmVkZm94CQkJTUFDSF9SRURGT1gJCVJFREZPWAkJCTk3MgorbXlzaF9lcDkzMTVfMQkJTUFDSF9NWVNIX0VQOTMxNV8xCU1ZU0hfRVA5MzE1XzEJCTk3MwordHBmMTA2CQkJTUFDSF9UUEYxMDYJCVRQRjEwNgkJCTk3NAorYXQ5MXJtOTIwMGtnCQlNQUNIX0FUOTFSTTkyMDBLRwlBVDkxUk05MjAwS0cJCTk3NQorcmFjZW10MgkJCU1BQ0hfU0xFREIJCVNMRURCCQkJOTc2CitvbnRyYWNrCQkJTUFDSF9PTlRSQUNLCQlPTlRSQUNLCQkJOTc3CitwbTEyMDAJCQlNQUNIX1BNMTIwMAkJUE0xMjAwCQkJOTc4Citlc3MyNDU2MgkJTUFDSF9FU1MyNFhYWAkJRVNTMjRYWFgJCTk3OQorY29yZW1wNwkJCU1BQ0hfQ09SRU1QNwkJQ09SRU1QNwkJCTk4MAorbmV4Y29kZXJfNjQ0NgkJTUFDSF9ORVhDT0RFUl82NDQ2CU5FWENPREVSXzY0NDYJCTk4MQorc3R2YzgzODAJCU1BQ0hfU1RWQzgzODAJCVNUVkM4MzgwCQk5ODIKK3Rla2x5bngJCQlNQUNIX1RFS0xZTlgJCVRFS0xZTlgJCQk5ODMKK2NhcmJvbmFkbwkJTUFDSF9DQVJCT05BRE8JCUNBUkJPTkFETwkJOTg0CitzeXNtb3NfbXA3MzAJCU1BQ0hfU1lTTU9TX01QNzMwCVNZU01PU19NUDczMAkJOTg1CitzbmFwcGVyX2NsMTUJCU1BQ0hfU05BUFBFUl9DTDE1CVNOQVBQRVJfQ0wxNQkJOTg2CitwZ2lnaW0JCQlNQUNIX1BHSUdJTQkJUEdJR0lNCQkJOTg3CitwdHg5MTYwcDIJCU1BQ0hfUFRYOTE2MFAyCQlQVFg5MTYwUDIJCTk4OAorZGNvcmUxCQkJTUFDSF9EQ09SRTEJCURDT1JFMQkJCTk4OQordmljdG9ycHhhCQlNQUNIX1ZJQ1RPUlBYQQkJVklDVE9SUFhBCQk5OTAKK214MmR0YgkJCU1BQ0hfTVgyRFRCCQlNWDJEVEIJCQk5OTEKK3B4YV9pcmV4X2VyMDEwMAkJTUFDSF9QWEFfSVJFWF9FUjAxMDAJUFhBX0lSRVhfRVIwMTAwCQk5OTIKK29tYXBfcGFsbXo3MQkJTUFDSF9PTUFQX1BBTE1aNzEJT01BUF9QQUxNWjcxCQk5OTMKK2JhcnRlY19kZWcJCU1BQ0hfQkFSVEVDX0RFRwkJQkFSVEVDX0RFRwkJOTk0CitodzUwMjUxCQkJTUFDSF9IVzUwMjUxCQlIVzUwMjUxCQkJOTk1CitpYm94CQkJTUFDSF9JQk9YCQlJQk9YCQkJOTk2CithdGxhc2xoN2E0MDQJCU1BQ0hfQVRMQVNMSDdBNDA0CUFUTEFTTEg3QTQwNAkJOTk3CitwdDIwMjYJCQlNQUNIX1BUMjAyNgkJUFQyMDI2CQkJOTk4CitodGNhbHBpbmUJCU1BQ0hfSFRDQUxQSU5FCQlIVENBTFBJTkUJCTk5OQorYmFydGVjX3Z0dQkJTUFDSF9CQVJURUNfVlRVCQlCQVJURUNfVlRVCQkxMDAwCit2Y29yZWlpCQkJTUFDSF9WQ09SRUlJCQlWQ09SRUlJCQkJMTAwMQorcGRuYjMJCQlNQUNIX1BETkIzCQlQRE5CMwkJCTEwMDIKK2h0Y2JlZXRsZXMJCU1BQ0hfSFRDQkVFVExFUwkJSFRDQkVFVExFUwkJMTAwMworczNjNjQwMAkJCU1BQ0hfUzNDNjQwMAkJUzNDNjQwMAkJCTEwMDQKK3MzYzI0NDMJCQlNQUNIX1MzQzI0NDMJCVMzQzI0NDMJCQkxMDA1CitvbWFwX2xkawkJTUFDSF9PTUFQX0xESwkJT01BUF9MREsJCTEwMDYKK3NtZGsyNDYwCQlNQUNIX1NNREsyNDYwCQlTTURLMjQ2MAkJMTAwNworc21kazI0NDAJCU1BQ0hfU01ESzI0NDAJCVNNREsyNDQwCQkxMDA4CitzbWRrMjQxMgkJTUFDSF9TTURLMjQxMgkJU01ESzI0MTIJCTEwMDkKK3dlYmJveAkJCU1BQ0hfV0VCQk9YCQlXRUJCT1gJCQkxMDEwCitjd3duZHAJCQlNQUNIX0NXV05EUAkJQ1dXTkRQCQkJMTAxMQorZHJhZ29uCQkJTUFDSF9EUkFHT04JCURSQUdPTgkJCTEwMTIKK29wZW5kb19jcHVfYm9hcmQJTUFDSF9PUEVORE9fQ1BVX0JPQVJECU9QRU5ET19DUFVfQk9BUkQJMTAxMworY2NtMjIwMAkJCU1BQ0hfQ0NNMjIwMAkJQ0NNMjIwMAkJCTEwMTQKK2V0d2FybQkJCU1BQ0hfRVRXQVJNCQlFVFdBUk0JCQkxMDE1CittOTMwMzAJCQlNQUNIX005MzAzMAkJTTkzMDMwCQkJMTAxNgorY2M3dQkJCU1BQ0hfQ0M3VQkJQ0M3VQkJCTEwMTcKK210dF9yYW5nZXIJCU1BQ0hfTVRUX1JBTkdFUgkJTVRUX1JBTkdFUgkJMTAxOAorbmV4dXMJCQlNQUNIX05FWFVTCQlORVhVUwkJCTEwMTkKK2Rlc21hbgkJCU1BQ0hfREVTTUFOCQlERVNNQU4JCQkxMDIwCitia2RlMzAzCQkJTUFDSF9CS0RFMzAzCQlCS0RFMzAzCQkJMTAyMQorc21kazI0MTMJCU1BQ0hfU01ESzI0MTMJCVNNREsyNDEzCQkxMDIyCithbWxfbTcyMDAJCU1BQ0hfQU1MX003MjAwCQlBTUxfTTcyMDAJCTEwMjMKK2FtbF9tNTkwMAkJTUFDSF9BTUxfTTU5MDAJCUFNTF9NNTkwMAkJMTAyNAorc2c2NDAJCQlNQUNIX1NHNjQwCQlTRzY0MAkJCTEwMjUKK2VkZzc5NTI0CQlNQUNIX0VERzc5NTI0CQlFREc3OTUyNAkJMTAyNgorYWkyNDEwCQkJTUFDSF9BSTI0MTAJCUFJMjQxMAkJCTEwMjcKK2l4cDQ2NQkJCU1BQ0hfSVhQNDY1CQlJWFA0NjUJCQkxMDI4CitiYWxsb29uMwkJTUFDSF9CQUxMT09OMwkJQkFMTE9PTjMJCTEwMjkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwppbmRleCA5YjM2N2E2Li4wMDkwMzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJCSBkZCwgZCwgZXhjZXB0aW9ucyk7CiAJCXZmcF9wdXRfZG91YmxlKGRkLCBkKTsKIAl9Ci0JcmV0dXJuIGV4Y2VwdGlvbnMgJiB+VkZQX05BTl9GTEFHOworCXJldHVybiBleGNlcHRpb25zOwogfQogCiAvKgpAQCAtNTg4LDYgKzU4OCw3IEBACiAJc3RydWN0IHZmcF9kb3VibGUgdmRtOwogCXUzMiBkLCBleGNlcHRpb25zID0gMDsKIAlpbnQgcm1vZGUgPSBmcHNjciAmIEZQU0NSX1JNT0RFX01BU0s7CisJaW50IHRtOwogCiAJdmZwX2RvdWJsZV91bnBhY2soJnZkbSwgdmZwX2dldF9kb3VibGUoZG0pKTsKIAl2ZnBfZG91YmxlX2R1bXAoIlZETSIsICZ2ZG0pOwpAQCAtNTk1LDEwICs1OTYsMTQgQEAKIAkvKgogCSAqIERvIHdlIGhhdmUgZGVub3JtYWxpc2VkIG51bWJlcj8KIAkgKi8KLQlpZiAodmZwX2RvdWJsZV90eXBlKCZ2ZG0pICYgVkZQX0RFTk9STUFMKQorCXRtID0gdmZwX2RvdWJsZV90eXBlKCZ2ZG0pOworCWlmICh0bSAmIFZGUF9ERU5PUk1BTCkKIAkJZXhjZXB0aW9ucyB8PSBGUFNDUl9JREM7CiAKLQlpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgeworCWlmICh0bSAmIFZGUF9OQU4pIHsKKwkJZCA9IDA7CisJCWV4Y2VwdGlvbnMgfD0gRlBTQ1JfSU9DOworCX0gZWxzZSBpZiAodmRtLmV4cG9uZW50ID49IDEwMjMgKyAzMikgewogCQlkID0gMHg3ZmZmZmZmZjsKIAkJaWYgKHZkbS5zaWduKQogCQkJZCA9IH5kOwpAQCAtMTEyMiw5ICsxMTI3LDkgQEAKIHsKIAl1MzIgb3AgPSBpbnN0ICYgRk9QX01BU0s7CiAJdTMyIGV4Y2VwdGlvbnMgPSAwOwotCXVuc2lnbmVkIGludCBkZCA9IHZmcF9nZXRfc2QoaW5zdCk7Ci0JdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9zbihpbnN0KTsKLQl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X3NtKGluc3QpOworCXVuc2lnbmVkIGludCBkZCA9IHZmcF9nZXRfZGQoaW5zdCk7CisJdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9kbihpbnN0KTsKKwl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X2RtKGluc3QpOwogCXVuc2lnbmVkIGludCB2ZWNpdHIsIHZlY2xlbiwgdmVjc3RyaWRlOwogCXUzMiAoKmZvcCkoaW50LCBpbnQsIHMzMiwgdTMyKTsKIApAQCAtMTE0MSw3ICsxMTQ2LDcgQEAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW2RuXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOworCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/IGZvcF9leHRmbnNbRkVYVF9UT19JRFgoaW5zdCldIDogZm9wX2Zuc1tGT1BfVE9fSURYKG9wKV07CiAJaWYgKCFmb3ApCiAJCWdvdG8gaW52YWxpZDsKIApAQCAtMTE0OSwxNyArMTE1NCwxMyBAQAogCQl1MzIgZXhjZXB0OwogCiAJCWlmIChvcCA9PSBGT1BfRVhUKQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKGQldS4ldSkgPSBvcFsldV0gKGQldS4ldSlcbiIsCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1KSA9IG9wWyV1XSAoZCV1KVxuIiwKIAkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsCi0JCQkJIGRkID4+IDEsIGRkICYgMSwgZG4sCi0JCQkJIGRtID4+IDEsIGRtICYgMSk7CisJCQkJIGRkLCBkbiwgZG0pOwogCQllbHNlCi0JCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoZCV1LiV1KSA9IChkJXUuJXUpIG9wWyV1XSAoZCV1LiV1KVxuIiwKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gKGQldSkgb3BbJXVdIChkJXUpXG4iLAogCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGQgPj4gMSwgZGQgJiAxLAotCQkJCSBkbiA+PiAxLCBkbiAmIDEsCi0JCQkJIEZPUF9UT19JRFgob3ApLAotCQkJCSBkbSA+PiAxLCBkbSAmIDEpOworCQkJCSBkZCwgZG4sIEZPUF9UT19JRFgob3ApLCBkbSk7CiAKIAkJZXhjZXB0ID0gZm9wKGRkLCBkbiwgZG0sIGZwc2NyKTsKIAkJcHJfZGVidWcoIlZGUDogaXRyJWQ6IGV4Y2VwdGlvbnM9JTA4eFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBody5TIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKaW5kZXggYjdlZDU3ZS4uYTNmNjViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGh3LlMKQEAgLTE4OSwxMSArMTg5LDEwIEBACiAKIAkuZ2xvYmwJdmZwX2dldF9kb3VibGUKIHZmcF9nZXRfZG91YmxlOgotCW1vdglyMCwgcjAsIGxzciAjMQogCWFkZAlwYywgcGMsIHIwLCBsc2wgIzMKIAltb3YJcjAsIHIwCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JbXJyYwlwMTAsIDEsIHIwLCByMSwgY1xkcglAIGZtcnJkCXIwLCByMSwgZFxkcgorCW1ycmMJcDExLCAxLCByMCwgcjEsIGNcZHIJQCBmbXJyZAlyMCwgcjEsIGRcZHIKIAltb3YJcGMsIGxyCiAJLmVuZHIKIApAQCAtMjA0LDEwICsyMDMsOSBAQAogCiAJLmdsb2JsCXZmcF9wdXRfZG91YmxlCiB2ZnBfcHV0X2RvdWJsZToKLQltb3YJcjAsIHIwLCBsc3IgIzEKIAlhZGQJcGMsIHBjLCByMCwgbHNsICMzCiAJbW92CXIwLCByMAogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1jcnIJcDEwLCAxLCByMSwgcjIsIGNcZHIJQCBmbXJyZAlyMSwgcjIsIGRcZHIKKwltY3JyCXAxMSwgMSwgcjEsIHIyLCBjXGRyCUAgZm1kcnIJcjEsIHIyLCBkXGRyCiAJbW92CXBjLCBscgogCS5lbmRyCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggMjJmM2RhNC4uMDM0ODZiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCSAqIGVtdWxhdGUgaXQuCiAJCSAqLwogCX0KLQlyZXR1cm4gZXhjZXB0aW9uczsKKwlyZXR1cm4gZXhjZXB0aW9ucyAmIH5WRlBfTkFOX0ZMQUc7CiB9CiAKIC8qCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKi8KIAliYXJyaWVyKCk7CiAJdHJpZ2dlciA9IGZtcngoRlBJTlNUMik7Ci0JZnBzY3IgPSBmbXJ4KEZQU0NSKTsKKwlvcmlnX2Zwc2NyID0gZnBzY3IgPSBmbXJ4KEZQU0NSKTsKIAogIGVtdWxhdGU6CiAJZXhjZXB0aW9ucyA9IHZmcF9lbXVsYXRlX2luc3RydWN0aW9uKHRyaWdnZXIsIGZwc2NyLCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYwppbmRleCAxNGRkNjk2Li5kYWUyYzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJdmZwX3B1dF9mbG9hdChzZCwgZCk7CiAJfQogCi0JcmV0dXJuIGV4Y2VwdGlvbnMgJiB+VkZQX05BTl9GTEFHOworCXJldHVybiBleGNlcHRpb25zOwogfQogCiAvKgpAQCAtNjMyLDYgKzYzMiw3IEBACiAJc3RydWN0IHZmcF9zaW5nbGUgdnNtOwogCXUzMiBkLCBleGNlcHRpb25zID0gMDsKIAlpbnQgcm1vZGUgPSBmcHNjciAmIEZQU0NSX1JNT0RFX01BU0s7CisJaW50IHRtOwogCiAJdmZwX3NpbmdsZV91bnBhY2soJnZzbSwgbSk7CiAJdmZwX3NpbmdsZV9kdW1wKCJWU00iLCAmdnNtKTsKQEAgLTYzOSwxMCArNjQwLDE0IEBACiAJLyoKIAkgKiBEbyB3ZSBoYXZlIGEgZGVub3JtYWxpc2VkIG51bWJlcj8KIAkgKi8KKwl0bSA9IHZmcF9zaW5nbGVfdHlwZSgmdnNtKTsKIAlpZiAodmZwX3NpbmdsZV90eXBlKCZ2c20pICYgVkZQX0RFTk9STUFMKQogCQlleGNlcHRpb25zIHw9IEZQU0NSX0lEQzsKIAotCWlmICh2c20uZXhwb25lbnQgPj0gMTI3ICsgMzIpIHsKKwlpZiAodG0gJiBWRlBfTkFOKSB7CisJCWQgPSAwOworCQlleGNlcHRpb25zIHw9IEZQU0NSX0lPQzsKKwl9IGVsc2UgaWYgKHZzbS5leHBvbmVudCA+PSAxMjcgKyAzMikgewogCQkvKgogCQkgKiBtID49IDJeMzEtMl43OiBpbnZhbGlkCiAJCSAqLwpAQCAtMTE4OCw3ICsxMTkzLDcgQEAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW3NuXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOworCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/IGZvcF9leHRmbnNbRkVYVF9UT19JRFgoaW5zdCldIDogZm9wX2Zuc1tGT1BfVE9fSURYKG9wKV07CiAJaWYgKCFmb3ApCiAJCWdvdG8gaW52YWxpZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKaW5kZXggYTZhMWIzMy4uOWQ2NmMyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9hcm1rc3ltcy5jCkBAIC0xNTIsNyArMTUyLDYgQEAKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMgYi9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCmluZGV4IGRlMzk3MjUuLmQ1Nzg1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYwpAQCAtMzksNyArMzksNiBAQAogLyogU3RyaW5nIGZ1bmN0aW9ucyAqLwogRVhQT1JUX1NZTUJPTChtZW1jbXApOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNweSk7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCmluZGV4IDFkMjFjOGQuLmE5YjU5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCkBAIC0xMTcwLDEyICsxMTcwLDYgQEAKICMgc3lzY2FsbCB2ZWN0b3IgdGFibGUKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSNpZmRlZiBDT05GSUdfTU1VCi0jZGVmaW5lIF9fTU1VKFgpIFgKLSNlbHNlCi0jZGVmaW5lIF9fTU1VKFgpIHN5c19uaV9zeXNjYWxsCi0jZW5kaWYKLQogCS5zZWN0aW9uIC5yb2RhdGEKIEFMSUdOCiAJLmdsb2JsCQlzeXNfY2FsbF90YWJsZQpAQCAtMTMwNSw3ICsxMjk5LDcgQEAKIAkubG9uZyBzeXNfbmV3dW5hbWUKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgImNhY2hlZmx1c2giICovCiAJLmxvbmcgc3lzX2FkanRpbWV4Ci0JLmxvbmcgX19NTVUoc3lzX21wcm90ZWN0KSAvKiAxMjUgKi8KKwkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCiAJLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjcmVhdGVfbW9kdWxlIiAqLwogCS5sb25nIHN5c19pbml0X21vZHVsZQpAQCAtMTMyNCwxNiArMTMxOCwxNiBAQAogCS5sb25nIHN5c19nZXRkZW50cwogCS5sb25nIHN5c19zZWxlY3QKIAkubG9uZyBzeXNfZmxvY2sKLQkubG9uZyBfX01NVShzeXNfbXN5bmMpCisJLmxvbmcgc3lzX21zeW5jCiAJLmxvbmcgc3lzX3JlYWR2CQkvKiAxNDUgKi8KIAkubG9uZyBzeXNfd3JpdGV2CiAJLmxvbmcgc3lzX2dldHNpZAogCS5sb25nIHN5c19mZGF0YXN5bmMKIAkubG9uZyBzeXNfc3lzY3RsCi0JLmxvbmcgX19NTVUoc3lzX21sb2NrKQkJLyogMTUwICovCi0JLmxvbmcgX19NTVUoc3lzX211bmxvY2spCi0JLmxvbmcgX19NTVUoc3lzX21sb2NrYWxsKQotCS5sb25nIF9fTU1VKHN5c19tdW5sb2NrYWxsKQorCS5sb25nIHN5c19tbG9jawkJLyogMTUwICovCisJLmxvbmcgc3lzX211bmxvY2sKKwkubG9uZyBzeXNfbWxvY2thbGwKKwkubG9uZyBzeXNfbXVubG9ja2FsbAogCS5sb25nIHN5c19zY2hlZF9zZXRwYXJhbQogCS5sb25nIHN5c19zY2hlZF9nZXRwYXJhbSAgIC8qIDE1NSAqLwogCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKQEAgLTEzNDMsNyArMTMzNyw3IEBACiAJLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLwogCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKIAkubG9uZyBzeXNfbmFub3NsZWVwCi0JLmxvbmcgX19NTVUoc3lzX21yZW1hcCkKKwkubG9uZyBzeXNfbXJlbWFwCiAJLmxvbmcgc3lzX3NldHJlc3VpZDE2CiAJLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIGZvciB2bTg2ICovCkBAIC0xMzk4LDggKzEzOTIsOCBAQAogCS5sb25nIHN5c19zZXRmc3VpZAkJLyogMjE1ICovCiAJLmxvbmcgc3lzX3NldGZzZ2lkCiAJLmxvbmcgc3lzX3Bpdm90X3Jvb3QKLQkubG9uZyBfX01NVShzeXNfbWluY29yZSkKLQkubG9uZyBfX01NVShzeXNfbWFkdmlzZSkKKwkubG9uZyBzeXNfbWluY29yZQorCS5sb25nIHN5c19tYWR2aXNlCiAJLmxvbmcgc3lzX2dldGRlbnRzNjQJLyogMjIwICovCiAJLmxvbmcgc3lzX2ZjbnRsNjQKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3IgVFVYICovCkBAIC0xNDM3LDcgKzE0MzEsNyBAQAogCS5sb25nIHN5c19lcG9sbF9jcmVhdGUKIAkubG9uZyBzeXNfZXBvbGxfY3RsCS8qIDI1NSAqLwogCS5sb25nIHN5c19lcG9sbF93YWl0Ci0gCS5sb25nIF9fTU1VKHN5c19yZW1hcF9maWxlX3BhZ2VzKQorIAkubG9uZyBzeXNfcmVtYXBfZmlsZV9wYWdlcwogIAkubG9uZyBzeXNfc2V0X3RpZF9hZGRyZXNzCiAgCS5sb25nIHN5c190aW1lcl9jcmVhdGUKICAJLmxvbmcgc3lzX3RpbWVyX3NldHRpbWUJCS8qIDI2MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jIGIvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCmluZGV4IDA3YzhmZmEuLjBmMjczYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKQEAgLTI3LDcgKzI3LDYgQEAKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiAKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCmluZGV4IGI2Y2Q3OGMuLmY4ZDZkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYwpAQCAtMjUsNyArMjUsNiBAQAogLyogcGxhdGZvcm0gZGVwZW5kZW50IHN1cHBvcnQgKi8KIAogRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcgYi9hcmNoL2kzODYvS2NvbmZpZwppbmRleCBmMTdiZDFkLi44ZGZhMzA1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZworKysgYi9hcmNoL2kzODYvS2NvbmZpZwpAQCAtNTMsNiArNTMsMzUgQEAKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitjb25maWcgU01QCisJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQorCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgorCSAgeW91IGhhdmUgYSBzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIENQVSwgc2F5IFkuCisKKwkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIHNpbmdsZSBhbmQgbXVsdGlwcm9jZXNzb3IKKwkgIG1hY2hpbmVzLCBidXQgd2lsbCB1c2Ugb25seSBvbmUgQ1BVIG9mIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZS4gSWYKKwkgIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIG1hbnksIGJ1dCBub3QgYWxsLAorCSAgc2luZ2xlcHJvY2Vzc29yIG1hY2hpbmVzLiBPbiBhIHNpbmdsZXByb2Nlc3NvciBtYWNoaW5lLCB0aGUga2VybmVsCisJICB3aWxsIHJ1biBmYXN0ZXIgaWYgeW91IHNheSBOIGhlcmUuCisKKwkgIE5vdGUgdGhhdCBpZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY2hvb3NlIGFyY2hpdGVjdHVyZSAiNTg2IiBvcgorCSAgIlBlbnRpdW0iIHVuZGVyICJQcm9jZXNzb3IgZmFtaWx5IiwgdGhlIGtlcm5lbCB3aWxsIG5vdCB3b3JrIG9uIDQ4NgorCSAgYXJjaGl0ZWN0dXJlcy4gU2ltaWxhcmx5LCBtdWx0aXByb2Nlc3NvciBrZXJuZWxzIGZvciB0aGUgIlBQcm8iCisJICBhcmNoaXRlY3R1cmUgbWF5IG5vdCB3b3JrIG9uIGFsbCBQZW50aXVtIGJhc2VkIGJvYXJkcy4KKworCSAgUGVvcGxlIHVzaW5nIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzIHdobyBzYXkgWSBoZXJlIHNob3VsZCBhbHNvIHNheQorCSAgWSB0byAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiLCBiZWxvdy4gVGhlICJBZHZhbmNlZCBQb3dlcgorCSAgTWFuYWdlbWVudCIgY29kZSB3aWxsIGJlIGRpc2FibGVkIGlmIHlvdSBzYXkgWSBoZXJlLgorCisJICBTZWUgYWxzbyB0aGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zbXAudHh0PiwKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dD4sCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQ+IGFuZCB0aGUgU01QLUhPV1RPIGF2YWlsYWJsZSBhdAorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KKwogY2hvaWNlCiAJcHJvbXB0ICJTdWJhcmNoaXRlY3R1cmUgVHlwZSIKIAlkZWZhdWx0IFg4Nl9QQwpAQCAtMTc4LDM1ICsyMDcsNiBAQAogCWRlcGVuZHMgb24gSFBFVF9USU1FUiAmJiBSVEM9eQogCWRlZmF1bHQgeQogCi1jb25maWcgU01QCi0JYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQotCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgotCSAgeW91IGhhdmUgYSBzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIENQVSwgc2F5IFkuCi0KLQkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIHNpbmdsZSBhbmQgbXVsdGlwcm9jZXNzb3IKLQkgIG1hY2hpbmVzLCBidXQgd2lsbCB1c2Ugb25seSBvbmUgQ1BVIG9mIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZS4gSWYKLQkgIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgcnVuIG9uIG1hbnksIGJ1dCBub3QgYWxsLAotCSAgc2luZ2xlcHJvY2Vzc29yIG1hY2hpbmVzLiBPbiBhIHNpbmdsZXByb2Nlc3NvciBtYWNoaW5lLCB0aGUga2VybmVsCi0JICB3aWxsIHJ1biBmYXN0ZXIgaWYgeW91IHNheSBOIGhlcmUuCi0KLQkgIE5vdGUgdGhhdCBpZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY2hvb3NlIGFyY2hpdGVjdHVyZSAiNTg2IiBvcgotCSAgIlBlbnRpdW0iIHVuZGVyICJQcm9jZXNzb3IgZmFtaWx5IiwgdGhlIGtlcm5lbCB3aWxsIG5vdCB3b3JrIG9uIDQ4NgotCSAgYXJjaGl0ZWN0dXJlcy4gU2ltaWxhcmx5LCBtdWx0aXByb2Nlc3NvciBrZXJuZWxzIGZvciB0aGUgIlBQcm8iCi0JICBhcmNoaXRlY3R1cmUgbWF5IG5vdCB3b3JrIG9uIGFsbCBQZW50aXVtIGJhc2VkIGJvYXJkcy4KLQotCSAgUGVvcGxlIHVzaW5nIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzIHdobyBzYXkgWSBoZXJlIHNob3VsZCBhbHNvIHNheQotCSAgWSB0byAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiLCBiZWxvdy4gVGhlICJBZHZhbmNlZCBQb3dlcgotCSAgTWFuYWdlbWVudCIgY29kZSB3aWxsIGJlIGRpc2FibGVkIGlmIHlvdSBzYXkgWSBoZXJlLgotCi0JICBTZWUgYWxzbyB0aGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zbXAudHh0PiwKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dD4sCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQ+IGFuZCB0aGUgU01QLUhPV1RPIGF2YWlsYWJsZSBhdAotCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogY29uZmlnIE5SX0NQVVMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItMjU1KSIKIAlyYW5nZSAyIDI1NQpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAKIGNob2ljZQogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICFYODZfUEFFCi0JcHJvbXB0ICJNZW1vcnkgc3BsaXQiCisJcHJvbXB0ICJNZW1vcnkgc3BsaXQiIGlmIEVNQkVEREVECiAJZGVmYXVsdCBWTVNQTElUXzNHCiAJaGVscAogCSAgU2VsZWN0IHRoZSBkZXNpcmVkIHNwbGl0IGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIG1lbW9yeS4KQEAgLTUyMiw2ICs1MjIsMTIgQEAKIGNvbW1lbnQgIk5VTUEgKFN1bW1pdCkgcmVxdWlyZXMgU01QLCA2NEdCIGhpZ2htZW0gc3VwcG9ydCwgQUNQSSIKIAlkZXBlbmRzIG9uIFg4Nl9TVU1NSVQgJiYgKCFISUdITUVNNjRHIHx8ICFBQ1BJKQogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICI0IiBpZiBYODZfTlVNQVEKKwlkZWZhdWx0ICIzIgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBjb25maWcgSEFWRV9BUkNIX0JPT1RNRU1fTk9ERQogCWJvb2wKIAlkZXBlbmRzIG9uIE5VTUEKQEAgLTc1MCwyMSArNzU2LDEyIEBACiAKIGNvbmZpZyBIT1RQTFVHX0NQVQogCWJvb2wgIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVcyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNNUCAmJiBIT1RQTFVHICYmIEVYUEVSSU1FTlRBTCAmJiAhWDg2X1ZPWUFHRVIgJiYgIVg4Nl9QQworCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgRVhQRVJJTUVOVEFMICYmICFYODZfVk9ZQUdFUgogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gZXhwZXJpbWVudCB3aXRoIHR1cm5pbmcgQ1BVcyBvZmYgYW5kIG9uLiAgQ1BVcwotCSAgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS4KKwkgIFNheSBZIGhlcmUgdG8gZXhwZXJpbWVudCB3aXRoIHR1cm5pbmcgQ1BVcyBvZmYgYW5kIG9uLCBhbmQgdG8KKwkgIGVuYWJsZSBzdXNwZW5kIG9uIFNNUCBzeXN0ZW1zLiBDUFVzIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2gKKwkgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1LgogCi0JICBTYXkgTi4KLQotY29uZmlnIERPVUJMRUZBVUxUCi0JZGVmYXVsdCB5Ci0JYm9vbCAiRW5hYmxlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIiBpZiBFTUJFRERFRAotCWhlbHAKLSAgICAgICAgICBUaGlzIG9wdGlvbiBhbGxvd3MgdHJhcHBpbmcgb2YgcmFyZSBkb3VibGVmYXVsdCBleGNlcHRpb25zIHRoYXQKLSAgICAgICAgICB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYSBzeXN0ZW0gdG8gc2lsZW50bHkgcmVib290LiBEaXNhYmxpbmcgdGhpcwotICAgICAgICAgIG9wdGlvbiBzYXZlcyBhYm91dCA0ayBhbmQgbWlnaHQgY2F1c2UgeW91IG11Y2ggYWRkaXRpb25hbCBncmV5Ci0gICAgICAgICAgaGFpci4KIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZy5jcHUgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKaW5kZXggNzk2MDNiMy4uZWIxMzA0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKQEAgLTMxMSw1ICszMTEsNSBAQAogCiBjb25maWcgWDg2X1RTQwogCWJvb2wKLQlkZXBlbmRzIG9uIChNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMSkgJiYgIVg4Nl9OVU1BUQorCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxIHx8IE1HRU9ERV9MWCkgJiYgIVg4Nl9OVU1BUQogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcuZGVidWcgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwppbmRleCA2ZTk3ZGY2Li5jOTIxOTFiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwpAQCAtODEsNCArODEsMTMgQEAKIAlkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDICYmICFYODZfVklTV1MKIAlkZWZhdWx0IHkKIAorY29uZmlnIERPVUJMRUZBVUxUCisJZGVmYXVsdCB5CisJYm9vbCAiRW5hYmxlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIiBpZiBFTUJFRERFRAorCWhlbHAKKyAgICAgICAgICBUaGlzIG9wdGlvbiBhbGxvd3MgdHJhcHBpbmcgb2YgcmFyZSBkb3VibGVmYXVsdCBleGNlcHRpb25zIHRoYXQKKyAgICAgICAgICB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYSBzeXN0ZW0gdG8gc2lsZW50bHkgcmVib290LiBEaXNhYmxpbmcgdGhpcworICAgICAgICAgIG9wdGlvbiBzYXZlcyBhYm91dCA0ayBhbmQgbWlnaHQgY2F1c2UgeW91IG11Y2ggYWRkaXRpb25hbCBncmV5CisgICAgICAgICAgaGFpci4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUyBiL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKaW5kZXggMDAwMGEyNi4uYzkzNDNjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUwpAQCAtOTcsNiArOTcsNyBAQAogI2RlZmluZSBQQVJBTV9WRVNBUE1fT0ZGCTB4MzAKICNkZWZpbmUgUEFSQU1fTEZCX1BBR0VTCQkweDMyCiAjZGVmaW5lIFBBUkFNX1ZFU0FfQVRUUklCCTB4MzQKKyNkZWZpbmUgUEFSQU1fQ0FQQUJJTElUSUVTCTB4MzYKIAogLyogRGVmaW5lIERPX1NUT1JFIGFjY29yZGluZyB0byBDT05GSUdfVklERU9fUkVUQUlOICovCiAjaWZkZWYgQ09ORklHX1ZJREVPX1JFVEFJTgpAQCAtMjMzLDYgKzIzNCwxMCBAQAogCW1vdncJMTgoJWRpKSwgJWF4CiAJbW92bAklZWF4LCAlZnM6KFBBUkFNX0xGQl9TSVpFKQogCisjIHN0b3JlIG1vZGUgY2FwYWJpbGl0aWVzCisJbW92bCAxMCglZGkpLCAlZWF4CisJbW92bCAlZWF4LCAlZnM6KFBBUkFNX0NBUEFCSUxJVElFUykKKwogIyBzd2l0Y2hpbmcgdGhlIERBQyB0byA4LWJpdCBpcyBmb3IgPD0gOCBicHAgb25seQogCW1vdncJJWZzOihQQVJBTV9MRkJfREVQVEgpLCAlYXgKIAljbXB3CSQ4LCAlYXgKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCmluZGV4IDViOWVkMjEuLjk2ZmI4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogb2JqLXkJOj0gcHJvY2Vzcy5vIHNlbWFwaG9yZS5vIHNpZ25hbC5vIGVudHJ5Lm8gdHJhcHMubyBpcnEubyBcCiAJCXB0cmFjZS5vIHRpbWUubyBpb3BvcnQubyBsZHQubyBzZXR1cC5vIGk4MjU5Lm8gc3lzX2kzODYubyBcCi0JCXBjaS1kbWEubyBpMzg2X2tzeW1zLm8gaTM4Ny5vIGRtaV9zY2FuLm8gYm9vdGZsYWcubyBcCisJCXBjaS1kbWEubyBpMzg2X2tzeW1zLm8gaTM4Ny5vIGJvb3RmbGFnLm8gXAogCQlxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8gYWx0ZXJuYXRpdmUubwogCiBvYmoteQkJCQkrPSBjcHUvCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCAwMzMwNjYxLi43ZmY2ZjlkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTYyMSw5ICs2MjEsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX2ZhZHQodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0Jc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICpmYWR0ID0gTlVMTDsKKwlzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpmYWR0ID0gTlVMTDsKIAotCWZhZHQgPSAoc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICopX19hY3BpX21hcF90YWJsZShwaHlzLCBzaXplKTsKKwlmYWR0ID0gKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgKilfX2FjcGlfbWFwX3RhYmxlKHBoeXMsIHNpemUpOwogCWlmICghZmFkdCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVW5hYmxlIHRvIG1hcCBGQURUXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC02OTMsNiArNjkzLDkgQEAKIHsKIAlpbnQgY291bnQ7CiAKKwlpZiAoIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKiAKIAkgKiBOb3RlIHRoYXQgdGhlIExBUElDIGFkZHJlc3MgaXMgb2J0YWluZWQgZnJvbSB0aGUgTUFEVCAoMzItYml0IHZhbHVlKQogCSAqIGFuZCAob3B0aW9uYWxseSkgb3ZlcnJpZGVuIGJ5IGEgTEFQSUNfQUREUl9PVlIgZW50cnkgKDY0LWJpdCB2YWx1ZSkuCkBAIC03NTEsNiArNzU0LDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCiAJLyoKIAkgKiBpZiAibm9hcGljIiBib290IG9wdGlvbiwgZG9uJ3QgbG9vayBmb3IgSU8tQVBJQ3MKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jCmluZGV4IDJlM2I2NDMuLjE2NDlhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYwpAQCAtNSwxNyArNSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAorI2lmZGVmIENPTkZJR19BQ1BJCisKK3N0YXRpYyBpbnQgbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgbnZpZGlhX2hwZXRfY2hlY2sodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAxOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2JyaWRnZShpbnQgdmVuZG9yLCBpbnQgZGV2aWNlKQogewogI2lmZGVmIENPTkZJR19BQ1BJCi0JLyogQWNjb3JkaW5nIHRvIE52aWRpYSBhbGwgdGltZXIgb3ZlcnJpZGVzIGFyZSBib2d1cy4gSnVzdCBpZ25vcmUKLQkgICB0aGVtIGFsbC4gKi8KKwkvKiBBY2NvcmRpbmcgdG8gTnZpZGlhIGFsbCB0aW1lciBvdmVycmlkZXMgYXJlIGJvZ3VzIHVubGVzcyBIUEVUCisJICAgaXMgZW5hYmxlZC4gKi8KIAlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlZJRElBKSB7Ci0JCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7CisJCW52aWRpYV9ocGV0X2RldGVjdGVkID0gMDsKKwkJYWNwaV90YWJsZV9wYXJzZShBQ1BJX0hQRVQsIG52aWRpYV9ocGV0X2NoZWNrKTsKKwkJaWYgKG52aWRpYV9ocGV0X2RldGVjdGVkID09IDApIHsKKwkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7CisJCX0KIAl9CiAjZW5kaWYKIAlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJICYmIHRpbWVyX292ZXJfODI1NCA9PSAxKSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCmluZGV4IDYyNzNiZjcuLjNkNGIyZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCkBAIC02Miw2ICs2MiwxOCBAQAogCiBzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpOwogCitpbnQgbW9kZXJuX2FwaWModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbHZyLCB2ZXJzaW9uOworCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkJYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQorCQlyZXR1cm4gMTsKKwlsdnIgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCXZlcnNpb24gPSBHRVRfQVBJQ19WRVJTSU9OKGx2cik7CisJcmV0dXJuIHZlcnNpb24gPj0gMHgxNDsKK30KKwogLyoKICAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgogICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCkBAIC0xMTksMTAgKzEzMSw3IEBACiAKIGludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGx2ciwgdmVyc2lvbjsKLQlsdnIgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCXZlcnNpb24gPSBHRVRfQVBJQ19WRVJTSU9OKGx2cik7Ci0JaWYgKCFBUElDX0lOVEVHUkFURUQodmVyc2lvbikgfHwgdmVyc2lvbiA+PSAweDE0KQorCWlmIChtb2Rlcm5fYXBpYygpKQogCQlyZXR1cm4gMHhmZjsKIAllbHNlCiAJCXJldHVybiAweGY7CkBAIC0zNDksOSArMzU4LDkgQEAKIAogdm9pZCBfX2luaXQgc3luY19BcmJfSURzKHZvaWQpCiB7Ci0JLyogVW5zdXBwb3J0ZWQgb24gUDQgLSBzZWUgSW50ZWwgRGV2LiBNYW51YWwgVm9sLiAzLCBDaC4gOC42LjEgKi8KLQl1bnNpZ25lZCBpbnQgdmVyID0gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKLQlpZiAodmVyID49IDB4MTQpCS8qIFA0IG9yIGhpZ2hlciAqLworCS8qIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xCisJICAgQW5kIG5vdCBuZWVkZWQgb24gQU1EICovCisJaWYgKG1vZGVybl9hcGljKCkpCiAJCXJldHVybjsKIAkvKgogCSAqIFdhaXQgZm9yIGlkbGUuCkBAIC03NDgsMTAgKzc1Nyw2IEBACiAJCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKIAllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBzdHIpID09IDApCiAJCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBWZXJib3NpdHkgbGV2ZWwgJXMgbm90IHJlY29nbmlzZWQiCi0JCQkJIiB1c2UgYXBpYz12ZXJib3NlIG9yIGFwaWM9ZGVidWdcbiIsIHN0cik7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtMTMzNiw2ICsxMzQxLDE0IEBACiAKIAljb25uZWN0X2JzcF9BUElDKCk7CiAKKwkvKgorCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCisJICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCisJICovCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOworI2VuZGlmCiAJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKIAogCXNldHVwX2xvY2FsX0FQSUMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IGRhMzBhMzcuLmRmMGUxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCWlmIChlcnJvciA9PSBBUE1fTk9UX0VOR0FHRUQgJiYgc3RhdGUgIT0gQVBNX1NUQVRFX1JFQURZKSB7CisJaWYgKGVycm9yID09IEFQTV9OT1RfRU5HQUdFRCkgewogCQlzdGF0aWMgaW50IHRyaWVkOwogCQlpbnQgZW5nX2Vycm9yOwogCQlpZiAodHJpZWQrKyA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDA4MTBmODFmLi43ODZkMWE1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMjA3LDEzICsyMDcsMTMgQEAKIAkJc2V0X2JpdChYODZfRkVBVFVSRV9LNywgYy0+eDg2X2NhcGFiaWxpdHkpOyAKIAkJYnJlYWs7CiAJfQorCWlmIChjLT54ODYgPj0gNikKKwkJc2V0X2JpdChYODZfRkVBVFVSRV9GWFNBVkVfTEVBSywgYy0+eDg2X2NhcGFiaWxpdHkpOwogCiAJZGlzcGxheV9jYWNoZWluZm8oYyk7CiAKIAlpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDgpIHsKIAkJYy0+eDg2X21heF9jb3JlcyA9IChjcHVpZF9lY3goMHg4MDAwMDAwOCkgJiAweGZmKSArIDE7Ci0JCWlmIChjLT54ODZfbWF4X2NvcmVzICYgKGMtPng4Nl9tYXhfY29yZXMgLSAxKSkKLQkJCWMtPng4Nl9tYXhfY29yZXMgPSAxOwogCX0KIAogCWlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNykgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDcxMmEyNmIuLjcxZmZmYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogI2RlZmluZSBQRlggInBvd2Vybm93LWs4OiAiCiAjZGVmaW5lIEJGWCBQRlggIkJJT1MgZXJyb3I6ICIKLSNkZWZpbmUgVkVSU0lPTiAidmVyc2lvbiAxLjYwLjEiCisjZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMS42MC4yIgogI2luY2x1ZGUgInBvd2Vybm93LWs4LmgiCiAKIC8qIHNlcmlhbGl6ZSBmcmVxIGNoYW5nZXMgICovCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKnBvd2Vybm93X2RhdGFbTlJfQ1BVU107CiAKICNpZm5kZWYgQ09ORklHX1NNUAotc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbMV0gPSB7IENQVV9NQVNLX0FMTCB9Oworc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbMV07CiAjZW5kaWYKIAogLyogUmV0dXJuIGEgZnJlcXVlbmN5IGluIE1IeiwgZ2l2ZW4gYW4gaW5wdXQgZmlkICovCkBAIC05MDUsMTEgKzkwNSwxNyBAQAogewogCWNwdW1hc2tfdCBvbGRtYXNrID0gQ1BVX01BU0tfQUxMOwogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcG93ZXJub3dfZGF0YVtwb2wtPmNwdV07Ci0JdTMyIGNoZWNrZmlkID0gZGF0YS0+Y3VycmZpZDsKLQl1MzIgY2hlY2t2aWQgPSBkYXRhLT5jdXJydmlkOworCXUzMiBjaGVja2ZpZDsKKwl1MzIgY2hlY2t2aWQ7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlOwogCWludCByZXQgPSAtRUlPOwogCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNoZWNrZmlkID0gZGF0YS0+Y3VycmZpZDsKKwljaGVja3ZpZCA9IGRhdGEtPmN1cnJ2aWQ7CisKIAkvKiBvbmx5IHJ1biBvbiBzcGVjaWZpYyBDUFUgZnJvbSBoZXJlIG9uICovCiAJb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHBvbC0+Y3B1KSk7CkBAIC05NjksNiArOTc1LDkgQEAKIHsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBvd2Vybm93X2RhdGFbcG9sLT5jcHVdOwogCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9sLCBkYXRhLT5wb3dlcm5vd190YWJsZSk7CiB9CiAKQEAgLTk3Nyw3ICs5ODYsNyBAQAogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrID0gQ1BVX01BU0tfQUxMOwotCWludCByYywgaTsKKwlpbnQgcmM7CiAKIAlpZiAoIWNwdV9vbmxpbmUocG9sLT5jcHUpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwNjMsOCArMTA3Miw3IEBACiAJcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkgICAgICAgZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfY29yZV9tYXBbcG9sLT5jcHVdKQotCQlwb3dlcm5vd19kYXRhW2ldID0gZGF0YTsKKwlwb3dlcm5vd19kYXRhW3BvbC0+Y3B1XSA9IGRhdGE7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCA5ZGY4N2IwLi5jODU0N2E2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBjYWNoZWluZm9fY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBjYWNoZWluZm9fY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCAwMDYxNDFkLi4xZDlhNGFiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjcHVpZF9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQorc3RhdGljIGludCBjcHVpZF9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKaW5kZXggZTNjNWZjYTAuLjJiMGNmY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAkgKiBmb3IgdGhlIGRhdGEgSSBwYXNzLCBhbmQgSSBuZWVkIHRhZ3MKIAkgKiBvbiB0aGUgZGF0YSB0byBpbmRpY2F0ZSB3aGF0IGluZm9ybWF0aW9uIEkgaGF2ZQogCSAqIHNxdWlycmVsbGVkIGF3YXkuICBFTEYgbm90ZXMgaGFwcGVuIHRvIHByb3ZpZGUKLQkgKiBhbGwgb2YgdGhhdCB0aGF0IG5vIG5lZWQgdG8gaW52ZW50IHNvbWV0aGluZyBuZXcuCisJICogYWxsIG9mIHRoYXQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW52ZW50IHNvbWV0aGluZyBuZXcuCiAJICovCiAJYnVmID0gKHUzMiopcGVyX2NwdV9wdHIoY3Jhc2hfbm90ZXMsIGNwdSk7CiAJaWYgKCFidWYpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCmluZGV4IDA1NTMyNTAuLjAzNmE5ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jCkBAIC0xOSw3ICsxOSw2IEBACiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfNCk7CiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfOCk7CiAKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IGY4ZjEzMmEuLmQ3MGYyYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yMjM4LDYgKzIyMzgsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CiAKK2ludCB0aW1lcl91c2VzX2lvYXBpY19waW5fMDsKKwogLyoKICAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKICAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQpAQCAtMjI3NCw2ICsyMjc2LDkgQEAKIAlwaW4yICA9IGlvYXBpY19pODI1OS5waW47CiAJYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKIAorCWlmIChwaW4xID09IDApCisJCXRpbWVyX3VzZXNfaW9hcGljX3Bpbl8wID0gMTsKKwogCXByaW50ayhLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggYXBpYzE9JWQgcGluMT0lZCBhcGljMj0lZCBwaW4yPSVkXG4iLAogCQl2ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZjE5NzY4Ny4uMzg4MDZmNCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQzLDcgKzQzLDcgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmVfY3RsYmxrLCBrcHJvYmVfY3RsYmxrKTsKIAogLyogaW5zZXJ0IGEgam1wIGNvZGUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfam1wX29wKHZvaWQgKmZyb20sIHZvaWQgKnRvKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF9qbXBfb3Aodm9pZCAqZnJvbSwgdm9pZCAqdG8pCiB7CiAJc3RydWN0IF9fYXJjaF9qbXBfb3AgewogCQljaGFyIG9wOwpAQCAtNTcsNyArNTcsNyBAQAogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgb3Bjb2RlcyBjYW4gYmUgYm9vc3RlZC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2FuX2Jvb3N0KGtwcm9iZV9vcGNvZGVfdCBvcGNvZGUpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBjYW5fYm9vc3Qoa3Byb2JlX29wY29kZV90IG9wY29kZSkKIHsKIAlzd2l0Y2ggKG9wY29kZSAmIDB4ZjAgKSB7CiAJY2FzZSAweDcwOgpAQCAtODgsNyArODgsNyBAQAogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgb3Bjb2RlIG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgZmxhZy4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90IG9wY29kZSkKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGlzX0lGX21vZGlmaWVyKGtwcm9iZV9vcGNvZGVfdCBvcGNvZGUpCiB7CiAJc3dpdGNoIChvcGNvZGUpIHsKIAljYXNlIDB4ZmE6CQkvKiBjbGkgKi8KQEAgLTEzOCw3ICsxMzgsNyBAQAogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCWtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfZWZsYWdzID0ga2NiLT5rcHJvYmVfc2F2ZWRfZWZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCWtjYi0+a3Byb2JlX3NhdmVkX2VmbGFncyA9IGtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfZWZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQlrY2ItPmtwcm9iZV9zYXZlZF9lZmxhZ3MgJj0gfklGX01BU0s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXJlZ3MtPmVmbGFncyB8PSBURl9NQVNLOwogCXJlZ3MtPmVmbGFncyAmPSB+SUZfTUFTSzsKQEAgLTI0MiwxMCArMjQyLDYgQEAKIAkJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9SRUVOVEVSOwogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocmVncy0+ZWZsYWdzICYgVk1fTUFTSykgewotCQkJLyogV2UgYXJlIGluIHZpcnR1YWwtODA4NiBtb2RlLiBSZXR1cm4gMCAqLwotCQkJCWdvdG8gbm9fa3Byb2JlOwotCQkJfQogCQkJaWYgKCphZGRyICE9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKIAkJCS8qIFRoZSBicmVha3BvaW50IGluc3RydWN0aW9uIHdhcyByZW1vdmVkIGJ5CiAJCQkgKiBhbm90aGVyIGNwdSByaWdodCBhZnRlciB3ZSBoaXQsIG5vIGZ1cnRoZXIKQEAgLTI2NSwxMSArMjYxLDYgQEAKIAogCXAgPSBnZXRfa3Byb2JlKGFkZHIpOwogCWlmICghcCkgewotCQlpZiAocmVncy0+ZWZsYWdzICYgVk1fTUFTSykgewotCQkJLyogV2UgYXJlIGluIHZpcnR1YWwtODA4NiBtb2RlLiBSZXR1cm4gMCAqLwotCQkJZ290byBub19rcHJvYmU7Ci0JCX0KLQogCQlpZiAoKmFkZHIgIT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgewogCQkJLyoKIAkJCSAqIFRoZSBicmVha3BvaW50IGluc3RydWN0aW9uIHdhcyByZW1vdmVkIHJpZ2h0CkBAIC00NTIsMTAgKzQ0MywxMSBAQAogCQkqdG9zICY9IH4oVEZfTUFTSyB8IElGX01BU0spOwogCQkqdG9zIHw9IGtjYi0+a3Byb2JlX29sZF9lZmxhZ3M7CiAJCWJyZWFrOwotCWNhc2UgMHhjMzoJCS8qIHJldC9scmV0ICovCi0JY2FzZSAweGNiOgotCWNhc2UgMHhjMjoKKwljYXNlIDB4YzI6CQkvKiBpcmV0L3JldC9scmV0ICovCisJY2FzZSAweGMzOgogCWNhc2UgMHhjYToKKwljYXNlIDB4Y2I6CisJY2FzZSAweGNmOgogCWNhc2UgMHhlYToJCS8qIGptcCBhYnNvbHV0ZSAtLSBlaXAgaXMgY29ycmVjdCAqLwogCQkvKiBlaXAgaXMgYWxyZWFkeSBhZGp1c3RlZCwgbm8gbW9yZSBjaGFuZ2VzIHJlcXVpcmVkICovCiAJCXAtPmFpbnNuLmJvb3N0YWJsZSA9IDE7CkBAIC00NjMsMTAgKzQ1NSwxMyBAQAogCWNhc2UgMHhlODoJCS8qIGNhbGwgcmVsYXRpdmUgLSBGaXggcmV0dXJuIGFkZHIgKi8KIAkJKnRvcyA9IG9yaWdfZWlwICsgKCp0b3MgLSBjb3B5X2VpcCk7CiAJCWJyZWFrOworCWNhc2UgMHg5YToJCS8qIGNhbGwgYWJzb2x1dGUgLS0gc2FtZSBhcyBjYWxsIGFic29sdXRlLCBpbmRpcmVjdCAqLworCQkqdG9zID0gb3JpZ19laXAgKyAoKnRvcyAtIGNvcHlfZWlwKTsKKwkJZ290byBub19jaGFuZ2U7CiAJY2FzZSAweGZmOgogCQlpZiAoKHAtPmFpbnNuLmluc25bMV0gJiAweDMwKSA9PSAweDEwKSB7Ci0JCQkvKiBjYWxsIGFic29sdXRlLCBpbmRpcmVjdCAqLwogCQkJLyoKKwkJCSAqIGNhbGwgYWJzb2x1dGUsIGluZGlyZWN0CiAJCQkgKiBGaXggcmV0dXJuIGFkZHI7IGVpcCBpcyBjb3JyZWN0LgogCQkJICogQnV0IHRoaXMgaXMgbm90IGJvb3N0YWJsZQogCQkJICovCkBAIC01MDcsNyArNTAyLDcgQEAKICAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkIG9uIGVudHJ5IGFzIHRyYXAxIGlzIGFuIGludGVycnVwdCBnYXRlIGFuZCB0aGV5CiAgKiByZW1haW4gZGlzYWJsZWQgdGhvcm91Z2hvdXQgdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcG9zdF9rcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKQEAgLTU0Myw3ICs1MzgsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDhkOGFhOWQuLjZiMTM5MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0zOCwxMiArMzgsNiBAQAogaW50IHNtcF9mb3VuZF9jb25maWc7CiB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBtYXhjcHVzID0gTlJfQ1BVUzsKIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotI2RlZmluZSBDUFVfSE9UUExVR19FTkFCTEVECSgxKQotI2Vsc2UKLSNkZWZpbmUgQ1BVX0hPVFBMVUdfRU5BQkxFRAkoMCkKLSNlbmRpZgotCiAvKgogICogVmFyaW91cyBMaW51eC1pbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgY3JlYXRlZCBmcm9tIHRoZQogICogTVAtdGFibGUuCkBAIC0xMTAsMjEgKzEwNCw2IEBACiBzdGF0aWMgaW50IG1wY19yZWNvcmQ7IAogc3RhdGljIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbl90YWJsZVtNQVhfTVBDX0VOVFJZXSBfX2luaXRkYXRhOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotc3RhdGljIGludCBNUF92YWxpZF9hcGljaWQoaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCi17Ci0JcmV0dXJuIGh3ZWlnaHRfbG9uZyhhcGljaWQgJiAweGYpID09IDEgJiYgKGFwaWNpZCA+PiA0KSAhPSAweGY7Ci19Ci0jZWxzZQotc3RhdGljIGludCBNUF92YWxpZF9hcGljaWQoaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCi17Ci0JaWYgKHZlcnNpb24gPj0gMHgxNCkKLQkJcmV0dXJuIGFwaWNpZCA8IDB4ZmY7Ci0JZWxzZQotCQlyZXR1cm4gYXBpY2lkIDwgMHhmOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBNUF9wcm9jZXNzb3JfaW5mbyAoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptKQogewogIAlpbnQgdmVyLCBhcGljaWQ7CkBAIC0xOTAsMTIgKzE2OSw2IEBACiAKIAl2ZXIgPSBtLT5tcGNfYXBpY3ZlcjsKIAotCWlmICghTVBfdmFsaWRfYXBpY2lkKGFwaWNpZCwgdmVyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQcm9jZXNzb3IgIyVkIElOVkFMSUQuIChNYXggSUQ6ICVkKS5cbiIsCi0JCQltLT5tcGNfYXBpY2lkLCBNQVhfQVBJQ1MpOwotCQlyZXR1cm47Ci0JfQotCiAJLyoKIAkgKiBWYWxpZGF0ZSB2ZXJzaW9uCiAJICovCkBAIC0yMjUsNyArMTk4LDE0IEBACiAJY3B1X3NldChudW1fcHJvY2Vzc29ycywgY3B1X3Bvc3NpYmxlX21hcCk7CiAJbnVtX3Byb2Nlc3NvcnMrKzsKIAotCWlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IChudW1fcHJvY2Vzc29ycyA+IDgpKSB7CisJLyoKKwkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQorCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCisJICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KKwkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCisJICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+CisJICovCisJaWYgKG51bV9wcm9jZXNzb3JzID4gOCkgewogCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CiAJCQlpZiAoIUFQSUNfWEFQSUModmVyKSkgewpAQCAtMjQ5LDYgKzIyOSwxMyBAQAogCiAJbXBjX29lbV9idXNfaW5mbyhtLCBzdHIsIHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdKTsKIAorCWlmIChtLT5tcGNfYnVzaWQgPj0gTUFYX01QX0JVU1NFUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJNUCB0YWJsZSBidXNpZCB2YWx1ZSAoJWQpIGZvciBidXN0eXBlICVzICIKKwkJCSIgaXMgdG9vIGxhcmdlLCBtYXguIHN1cHBvcnRlZCBpcyAlZFxuIiwKKwkJCW0tPm1wY19idXNpZCwgc3RyLCBNQVhfTVBfQlVTU0VTIC0gMSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoc3RybmNtcChzdHIsIEJVU1RZUEVfSVNBLCBzaXplb2YoQlVTVFlQRV9JU0EpLTEpID09IDApIHsKIAkJbXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19JU0E7CiAJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgQlVTVFlQRV9FSVNBLCBzaXplb2YoQlVTVFlQRV9FSVNBKS0xKSA9PSAwKSB7CkBAIC0xMTQzLDcgKzExMzAsMTcgQEAKIAkJICovCiAJCWludCBpcnEgPSBnc2k7CiAJCWlmIChnc2kgPCBNQVhfR1NJX05VTSkgewotCQkJaWYgKGdzaSA+IDE1KQorCQkJLyoKKwkJCSAqIFJldGFpbiB0aGUgVklBIGNoaXBzZXQgd29yay1hcm91bmQgKGdzaSA+IDE1KSwgYnV0CisJCQkgKiBhdm9pZCBhIHByb2JsZW0gd2hlcmUgdGhlIDgyNTQgdGltZXIgKElSUTApIGlzIHNldHVwCisJCQkgKiB2aWEgYW4gb3ZlcnJpZGUgKHNvIGl0J3Mgbm90IG9uIHBpbiAwIG9mIHRoZSBpb2FwaWMpLAorCQkJICogYW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBwaW4gMCBpbnRlcnJ1cHQgaXMgYSBQQ0kKKwkJCSAqIHR5cGUuICBUaGUgZ3NpID4gMTUgdGVzdCBjb3VsZCBjYXVzZSB0aGVzZSB0d28gcGlucworCQkJICogdG8gYmUgc2hhcmVkIGFzIElSUTAsIGFuZCB0aGV5IGFyZSBub3Qgc2hhcmVhYmxlLgorCQkJICogU28gdGVzdCBmb3IgdGhpcyBjb25kaXRpb24sIGFuZCBpZiBuZWNlc3NhcnksIGF2b2lkCisJCQkgKiB0aGUgcGluIGNvbGxpc2lvbi4KKwkJCSAqLworCQkJaWYgKGdzaSA+IDE1IHx8IChnc2kgPT0gMCAmJiAhdGltZXJfdXNlc19pb2FwaWNfcGluXzApKQogCQkJCWdzaSA9IHBjaV9pcnErKzsKIAkJCS8qCiAJCQkgKiBEb24ndCBhc3NpZ24gSVJRIHVzZWQgYnkgQUNQSSBTQ0kKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMgYi9hcmNoL2kzODYva2VybmVsL21zci5jCmluZGV4IDFkMGE1NWUuLjdhMzI4MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgbXNyX2NsYXNzX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCitzdGF0aWMgaW50IG1zcl9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA1MDY0NjJlLi5mZDdlYWY3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTY3MSw3ICs2NzEsNyBAQAogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7CiAJCWlmIChlbnRyeWV4aXQpCi0JCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgQVVESVRTQ19SRVNVTFQocmVncy0+ZWF4KSwKKwkJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5lYXgpLAogCQkJCQkJcmVncy0+ZWF4KTsKIAkJLyogRGVidWcgdHJhcHMsIHdoZW4gdXNpbmcgUFRSQUNFX1NJTkdMRVNURVAsIG11c3QgYmUgc2VudCBvbmx5CiAJCSAqIG9uIHRoZSBzeXNjYWxsIGV4aXQgcGF0aC4gTm9ybWFsbHksIHdoZW4gVElGX1NZU0NBTExfQVVESVQgaXMKQEAgLTcyMCwxNCArNzIwLDEzIEBACiAJcmV0ID0gaXNfc3lzZW11Owogb3V0OgogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIEFVRElUX0FSQ0hfSTM4NiwgcmVncy0+b3JpZ19lYXgsCisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoQVVESVRfQVJDSF9JMzg2LCByZWdzLT5vcmlnX2VheCwKIAkJCQkgICAgcmVncy0+ZWJ4LCByZWdzLT5lY3gsIHJlZ3MtPmVkeCwgcmVncy0+ZXNpKTsKIAlpZiAocmV0ID09IDApCiAJCXJldHVybiAwOwogCiAJcmVncy0+b3JpZ19lYXggPSAtMTsgLyogZm9yY2Ugc2tpcCBvZiBzeXNjYWxsIHJlc3RhcnRpbmcgKi8KIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5lYXgpLAotCQkJCXJlZ3MtPmVheCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5lYXgpLCByZWdzLT5lYXgpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwppbmRleCAxMGUyMWE0Li45OWFhYjQxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwpAQCAtNTEsNyArNTEsNSBAQAogCiAJCWN1ci0+cmVib290X2ZpeHVwKGRldik7CiAJfQotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gcmVib290IGZpeHVwIGZvdW5kIGZvciB5b3VyIGhhcmR3YXJlXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDhjMDg2NjAuLmRkNmIwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvbWNhLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KQEAgLTk2Miw2ICs5NjMsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorIC8qCisgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGVudGlyZSByYW5nZSA8c3RhcnQsZW5kPiBpcyBtYXBwZWQgd2l0aCB0eXBlLgorICAqCisgICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICAqIG5vdC1vdmVybGFwcGluZywgd2hpY2ggaXMgdGhlIGNhc2UKKyAgKi8KK2ludCBfX2luaXQKK2U4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHMsIHVuc2lnbmVkIGxvbmcgZSwgdW5zaWduZWQgdHlwZSkKK3sKKwl1NjQgc3RhcnQgPSBzOworCXU2NCBlbmQgPSBlOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CisJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOworCQlpZiAodHlwZSAmJiBlaS0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisJCS8qIGlzIHRoZSByZWdpb24gKHBhcnQpIGluIG92ZXJsYXAgd2l0aCB0aGUgY3VycmVudCByZWdpb24gPyovCisJCWlmIChlaS0+YWRkciA+PSBlbmQgfHwgZWktPmFkZHIgKyBlaS0+c2l6ZSA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQkvKiBpZiB0aGUgcmVnaW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHN0YXJ0LGVuZD4gd2UgbW92ZQorCQkgKiBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24gc2luY2UgaXQncyBvayB1bnRpbCB0aGVyZQorCQkgKi8KKwkJaWYgKGVpLT5hZGRyIDw9IHN0YXJ0KQorCQkJc3RhcnQgPSBlaS0+YWRkciArIGVpLT5zaXplOworCQkvKiBpZiBzdGFydCBpcyBub3cgYXQgb3IgYmV5b25kIGVuZCwgd2UncmUgZG9uZSwgZnVsbAorCQkgKiBjb3ZlcmFnZSAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJcmV0dXJuIDE7IC8qIHdlJ3JlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBGaW5kIHRoZSBoaWdoZXN0IHBhZ2UgZnJhbWUgbnVtYmVyIHdlIGhhdmUgYXZhaWxhYmxlCiAgKi8KQEAgLTEyODcsNiArMTMyMCw4IEBACiAJcHJvYmVfcm9tcygpOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCQlpZiAoZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUgPiAweDEwMDAwMDAwMFVMTCkKKwkJCWNvbnRpbnVlOwogCQlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfQVRPTUlDKTsKIAkJc3dpdGNoIChlODIwLm1hcFtpXS50eXBlKSB7CiAJCWNhc2UgRTgyMF9SQU06CXJlcy0+bmFtZSA9ICJTeXN0ZW0gUkFNIjsgYnJlYWs7CkBAIC0xMzE2LDggKzEzNTEsOCBAQAogLyoKICAqIFJlcXVlc3QgYWRkcmVzcyBzcGFjZSBmb3IgYWxsIHN0YW5kYXJkIHJlc291cmNlcwogICoKLSAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHBjaWJpb3NfYXNzaWduX3Jlc291cmNlcygpLCB3aGljaCBpcyBhbHNvCi0gKiBhbiBmc19pbml0Y2FsbCwgYnV0IGlzIGxpbmtlZCBpbiBsYXRlciAoaW4gYXJjaC9pMzg2L3BjaS9pMzg2LmMpLgorICogVGhpcyBpcyBjYWxsZWQganVzdCBiZWZvcmUgcGNpYmlvc19pbml0KCksIHdoaWNoIGlzIGFsc28gYQorICogc3Vic3lzX2luaXRjYWxsLCBidXQgaXMgbGlua2VkIGluIGxhdGVyIChpbiBhcmNoL2kzODYvcGNpL2NvbW1vbi5jKS4KICAqLwogc3RhdGljIGludCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZCkKIHsKQEAgLTEzMzgsNyArMTM3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWZzX2luaXRjYWxsKHJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKTsKK3N1YnN5c19pbml0Y2FsbChyZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcyk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9tZW1vcnkodm9pZCkKIHsKQEAgLTE1MTIsMTUgKzE1NDcsMTggQEAKIAlpZiAoZWZpX2VuYWJsZWQpCiAJCWVmaV9tYXBfbWVtbWFwKCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQljaGVja19hY3BpX3BjaSgpOwkvKiBDaGVja3MgbW9yZSB0aGFuIGp1c3QgQUNQSSBhY3R1YWxseSAqLwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQUNQSQogCS8qCiAJICogUGFyc2UgdGhlIEFDUEkgdGFibGVzIGZvciBwb3NzaWJsZSBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb24uCiAJICovCiAJYWNwaV9ib290X3RhYmxlX2luaXQoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJY2hlY2tfYWNwaV9wY2koKTsJLyogQ2hlY2tzIG1vcmUgdGhhbiBqdXN0IEFDUEkgYWN0dWFsbHkgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FDUEkKIAlhY3BpX2Jvb3RfaW5pdCgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19YODZfUEMpCkBAIC0xNTQ3LDYgKzE1ODUsMjMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7CisKICNpbmNsdWRlICJzZXR1cF9hcmNoX3Bvc3QuaCIKIC8qCiAgKiBMb2NhbCBWYXJpYWJsZXM6CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGE2OTY5OTAuLjgyNWIyYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0zMTMsNyArMzEzLDkgQEAKIAkJCWlmICh0c2NfdmFsdWVzW2ldIDwgYXZnKQogCQkJCXJlYWxkZWx0YSA9IC1yZWFsZGVsdGE7CiAKLQkJCXByaW50ayhLRVJOX0lORk8gIkNQVSMlZCBoYWQgJWxkIHVzZWNzIFRTQyBza2V3LCBmaXhlZCBpdCB1cC5cbiIsIGksIHJlYWxkZWx0YSk7CisJCQlpZiAocmVhbGRlbHRhID4gMCkKKwkJCQlwcmludGsoS0VSTl9JTkZPICJDUFUjJWQgaGFkICVsZCB1c2VjcyBUU0MgIgorCQkJCQkic2tldywgZml4ZWQgaXQgdXAuXG4iLCBpLCByZWFsZGVsdGEpOwogCQl9CiAKIAkJc3VtICs9IGRlbHRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCA0ZjU4YjljLi5hZjU2OTg3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMzE0LDMgKzMxNCw1IEBACiAJLmxvbmcgc3lzX2dldF9yb2J1c3RfbGlzdAogCS5sb25nIHN5c19zcGxpY2UKIAkubG9uZyBzeXNfc3luY19maWxlX3JhbmdlCisJLmxvbmcgc3lzX3RlZQkJCS8qIDMxNSAqLworCS5sb25nIHN5c192bXNwbGljZQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl90c2MuYwppbmRleCA1ZTQxZWUyLi5mMTE4N2RkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl90c2MuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl90c2MuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOwogCi0JaWYgKHZhbCAhPSBDUFVGUkVRX1JFU1VNRUNIQU5HRSkKKwlpZiAodmFsICE9IENQVUZSRVFfUkVTVU1FQ0hBTkdFICYmIHZhbCAhPSBDUFVGUkVRX1NVU1BFTkRDSEFOR0UpCiAJCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAlpZiAoIXJlZl9mcmVxKSB7CiAJCWlmICghZnJlcS0+b2xkKXsKQEAgLTMxMiw3ICszMTIsNyBAQAogCX0KIAogZW5kOgotCWlmICh2YWwgIT0gQ1BVRlJFUV9SRVNVTUVDSEFOR0UpCisJaWYgKHZhbCAhPSBDUFVGUkVRX1JFU1VNRUNIQU5HRSAmJiB2YWwgIT0gQ1BVRlJFUV9TVVNQRU5EQ0hBTkdFKQogCQl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCmluZGV4IGUzODUyNzkuLjBlNDk4MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKQEAgLTEzMCw5ICsxMzAsOCBAQAogCXByaW50X3N5bWJvbCgiJXMiLCBhZGRyKTsKIAogCXByaW50ZWQgPSAocHJpbnRlZCArIDEpICUgQ09ORklHX1NUQUNLX0JBQ0tUUkFDRV9DT0xTOwotCiAJaWYgKHByaW50ZWQpCi0JCXByaW50aygiICAiKTsKKwkJcHJpbnRrKCIgIik7CiAJZWxzZQogCQlwcmludGsoIlxuIik7CiAKQEAgLTIxMiw3ICsyMTEsNiBAQAogCX0KIAogCXN0YWNrID0gZXNwOwotCXByaW50ayhsb2dfbHZsKTsKIAlmb3IoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgewogCQlpZiAoa3N0YWNrX2VuZChzdGFjaykpCiAJCQlicmVhazsKQEAgLTM2NSw2ICszNjMsOSBAQAogCiAJaWYgKCsrZGllLmxvY2tfb3duZXJfZGVwdGggPCAzKSB7CiAJCWludCBubCA9IDA7CisJCXVuc2lnbmVkIGxvbmcgZXNwOworCQl1bnNpZ25lZCBzaG9ydCBzczsKKwogCQloYW5kbGVfQlVHKHJlZ3MpOwogCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsjJWRdXG4iLCBzdHIsIGVyciAmIDB4ZmZmZiwgKytkaWVfY291bnRlcik7CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKQEAgLTM4Nyw4ICszODgsMTkgQEAKIAkJCXByaW50aygiXG4iKTsKIAkJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLAogCQkJCQljdXJyZW50LT50aHJlYWQudHJhcF9ubywgU0lHU0VHVikgIT0KLQkJCQlOT1RJRllfU1RPUCkKKwkJCQlOT1RJRllfU1RPUCkgewogCQkJc2hvd19yZWdpc3RlcnMocmVncyk7CisJCQkvKiBFeGVjdXRpdmUgc3VtbWFyeSBpbiBjYXNlIHRoZSBvb3BzIHNjcm9sbGVkIGF3YXkgKi8KKwkJCWVzcCA9ICh1bnNpZ25lZCBsb25nKSAoJnJlZ3MtPmVzcCk7CisJCQlzYXZlc2VnbWVudChzcywgc3MpOworCQkJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQkJCWVzcCA9IHJlZ3MtPmVzcDsKKwkJCQlzcyA9IHJlZ3MtPnhzcyAmIDB4ZmZmZjsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0VNRVJHICJFSVA6IFs8JTA4bHg+XSAiLCByZWdzLT5laXApOworCQkJcHJpbnRfc3ltYm9sKCIlcyIsIHJlZ3MtPmVpcCk7CisJCQlwcmludGsoIiBTUzpFU1AgJTA0eDolMDhseFxuIiwgc3MsIGVzcCk7CisJCX0KIAkJZWxzZQogCQkJcmVncyA9IE5VTEw7CiAgIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdm04Ni5jIGIvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKaW5kZXggYWVlMTRmYS4uMDBlMDExOCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCiAJLypjYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdCBzaW5jZSB3ZSBkbyBub3QgZXhpdCB2aWEgdGhlIG5vcm1hbCBwYXRocyAqLwogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKLQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIEFVRElUU0NfUkVTVUxUKGVheCksIGVheCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChlYXgpLCBlYXgpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJtb3ZsICUwLCUlZXNwXG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwppbmRleCBjZWE1YjNjLi5kNTVmYTdiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCkBAIC05Myw5ICs5MywxMSBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07ICsraSkgeyAKIAkJaWYgKGFwaWNfcHJvYmVbaV0tPm1wc19vZW1fY2hlY2sobXBjLG9lbSxwcm9kdWN0aWQpKSB7IAotCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBBUElDIGRyaXZlciBgJXMnLlxuIiwgCi0JCQkgICAgICAgZ2VuYXBpYy0+bmFtZSk7CisJCQlpZiAoIWNtZGxpbmVfYXBpYykgeworCQkJCWdlbmFwaWMgPSBhcGljX3Byb2JlW2ldOworCQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAorCQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKKwkJCX0KIAkJCXJldHVybiAxOwogCQl9IAogCX0gCkBAIC0xMDcsOSArMTA5LDExIEBACiAJaW50IGk7CiAJZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7IAogCQlpZiAoYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjayhvZW1faWQsIG9lbV90YWJsZV9pZCkpIHsgCi0JCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLCAKLQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKKwkJCWlmICghY21kbGluZV9hcGljKSB7CisJCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gQVBJQyBkcml2ZXIgYCVzJy5cbiIsCisJCQkJICAgICAgIGdlbmFwaWMtPm5hbWUpOworCQkJfQogCQkJcmV0dXJuIDE7CiAJCX0gCiAJfSAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYwppbmRleCAyMzk2N2ZlLi4xMGQyMWRmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCkBAIC0xMDYsMTUgKzEwNiwyMCBAQAogCiAvKiB0aGUgSS9PIHBvcnQgYXNzaWdubWVudHMgZm9yIHRoZSBWSUMgYW5kIFFJQyAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2aWNfcmVzID0gewotCSJWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIiwgMHhGQzAwLCAweEZDNkYgfTsKKwkubmFtZQk9ICJWb3lhZ2VyIEludGVycnVwdCBDb250cm9sbGVyIiwKKwkuc3RhcnQJPSAweEZDMDAsCisJLmVuZAk9IDB4RkM2RgorfTsKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcWljX3JlcyA9IHsKLQkiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsIDB4RkM3MCwgMHhGQ0ZGIH07CisJLm5hbWUJPSAiUXVhZCBJbnRlcnJ1cHQgQ29udHJvbGxlciIsCisJLnN0YXJ0CT0gMHhGQzcwLAorCS5lbmQJPSAweEZDRkYKK307CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYWNrIGEgZGF0YSBiaXQgc3RyZWFtIGluc2lkZSBhIG1lc3NhZ2UuCiAgKiBJdCB3cml0ZXMgbnVtX2JpdHMgb2YgdGhlIGRhdGEgYnVmZmVyIGluIG1zZyBzdGFydGluZyBhdCBzdGFydF9iaXQuCiAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhbnkgdW51c2VkIGJpdCBpbiB0aGUgZGF0YSBzdHJlYW0KICAqIGlzIHNldCB0byB6ZXJvIHNvIHRoYXQgdGhlIG9ycyB3aWxsIHdvcmsgY29ycmVjdGx5ICovCi0jZGVmaW5lIEJJVFNfUEVSX0JZVEUgOAogc3RhdGljIHZvaWQKIGNhdF9wYWNrKF9fdTggKm1zZywgY29uc3QgX191MTYgc3RhcnRfYml0LCBfX3U4ICpkYXRhLCBjb25zdCBfX3UxNiBudW1fYml0cykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pbml0LmMgYi9hcmNoL2kzODYvbW0vaW5pdC5jCmluZGV4IDlmNjZhYzUuLjNkZjEzNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC9pMzg2L21tL2luaXQuYwpAQCAtNjUxLDYgKzY1MSw3IEBACiAgKiBTcGVjaWZpY2FsbHksIGluIHRoZSBjYXNlIG9mIHg4Niwgd2Ugd2lsbCBhbHdheXMgYWRkCiAgKiBtZW1vcnkgdG8gdGhlIGhpZ2htZW0gZm9yIG5vdy4KICAqLworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogaW50IGFkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKQEAgLTY2Nyw2ICs2NjgsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogI2VuZGlmCisjZW5kaWYKIAoga21lbV9jYWNoZV90ICpwZ2RfY2FjaGU7CiBrbWVtX2NhY2hlX3QgKnBtZF9jYWNoZTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IDFhMjA3NmMuLmVjMGZkM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMzMyLDEwICszMzIsMTEgQEAKIHsKIAlfX3U4IGNwdV9tb2RlbCA9IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsOwogCi0JaWYgKGNwdV9tb2RlbCA+IDB4ZCkKKwlpZiAoY3B1X21vZGVsID09IDE0KQorCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlIjsKKwllbHNlIGlmIChjcHVfbW9kZWwgPiAweGQpCiAJCXJldHVybiAwOwotCi0JaWYgKGNwdV9tb2RlbCA9PSA5KSB7CisJZWxzZSBpZiAoY3B1X21vZGVsID09IDkpIHsKIAkJKmNwdV90eXBlID0gImkzODYvcDZfbW9iaWxlIjsKIAl9IGVsc2UgaWYgKGNwdV9tb2RlbCA+IDUpIHsKIAkJKmNwdV90eXBlID0gImkzODYvcGlpaSI7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2RpcmVjdC5jIGIvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYwppbmRleCA5OTAxMmI5Li41ZDgxZmI1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2RpcmVjdC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZGlyZWN0LmMKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIC8qCkBAIC0xOCw4ICsxOSwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIXZhbHVlIHx8IChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpCisJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpIHsKKwkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKIApAQCAtOTEsOCArOTQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkZXYsIGZuOwogCi0JaWYgKCF2YWx1ZSB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKQorCWlmICgoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiAyNTUpKSB7CisJCSp2YWx1ZSA9IC0xOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlkZXYgPSBQQ0lfU0xPVChkZXZmbik7CiAJZm4gPSBQQ0lfRlVOQyhkZXZmbik7CkBAIC0xODgsNiArMTkzLDEwIEBACiAKIAlpZiAocGNpX3Byb2JlICYgUENJX05PX0NIRUNLUykKIAkJcmV0dXJuIDE7CisJLyogQXNzdW1lIFR5cGUgMSB3b3JrcyBmb3IgbmV3ZXIgc3lzdGVtcy4KKwkgICBUaGlzIGhhbmRsZXMgbWFjaGluZXMgdGhhdCBkb24ndCBoYXZlIGFueXRoaW5nIG9uIFBDSSBCdXMgMC4gKi8KKwlpZiAoZG1pX2dldF95ZWFyKERNSV9CSU9TX0RBVEUpID49IDIwMDEpCisJCXJldHVybiAxOwogCiAJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMHgxMDA7IGRldmZuKyspIHsKIAkJaWYgKG8tPnJlYWQoMCwgMCwgZGV2Zm4sIFBDSV9DTEFTU19ERVZJQ0UsIDIsICZ4KSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMgYi9hcmNoL2kzODYvcGNpL2lycS5jCmluZGV4IDNjYTU5Y2EuLjA2ZGFiMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwpAQCAtNTg4LDcgKzU4OCw5IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTY6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODY6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMxOgorCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzM0E6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1OgorCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzNzoKIAkJLyogRklYTUU6IGFkZCBuZXcgb25lcyBmb3IgODIzMy81ICovCiAJCXItPm5hbWUgPSAiVklBIjsKIAkJci0+Z2V0ID0gcGlycV92aWFfZ2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCmluZGV4IDYxMzc4OTAuLjZiMWVhMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKQEAgLTEyLDE0ICsxMiwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlICJwY2kuaCIKIAorI2RlZmluZSBNTUNPTkZJR19BUEVSX1NJWkUgKDI1NioxMDI0KjEwMjQpCisKKy8qIEFzc3VtZSBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMgaGF2ZSBjb3JyZWN0IE1DRkcgKi8KKyNkZWZpbmUgTUFYX0NIRUNLX0JVUyAxNgorCiAjZGVmaW5lIG1tY2ZnX3ZpcnRfYWRkciAoKHZvaWQgX19pb21lbSAqKSBmaXhfdG9fdmlydChGSVhfUENJRV9NQ0ZHKSkKIAogLyogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbGFzdCBNTUNPTkZJRyBkZXZpY2UgYWNjZXNzZWQgKi8KIHN0YXRpYyB1MzIgbW1jZmdfbGFzdF9hY2Nlc3NlZF9kZXZpY2U7CiAKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgMzIpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCBNQVhfQ0hFQ0tfQlVTKjMyKTsKIAogLyoKICAqIEZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHdpdGggTU1DT05GSUcgYWNjZXNzZXMKQEAgLTI5LDggKzM1LDggQEAKIAlpbnQgY2ZnX251bSA9IC0xOwogCXN0cnVjdCBhY3BpX3RhYmxlX21jZmdfY29uZmlnICpjZmc7CiAKLQlpZiAoc2VnID09IDAgJiYgYnVzID09IDAgJiYKLQkgICAgdGVzdF9iaXQoUENJX1NMT1QoZGV2Zm4pLCBmYWxsYmFja19zbG90cykpCisJaWYgKHNlZyA9PSAwICYmIGJ1cyA8IE1BWF9DSEVDS19CVVMgJiYKKwkgICAgdGVzdF9iaXQoUENJX1NMT1QoZGV2Zm4pICsgMzIqYnVzLCBmYWxsYmFja19zbG90cykpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKDEpIHsKQEAgLTc0LDggKzgwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgYmFzZTsKIAotCWlmICghdmFsdWUgfHwgKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpCisJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDQwOTUpKSB7CisJCSp2YWx1ZSA9IC0xOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAliYXNlID0gZ2V0X2Jhc2VfYWRkcihzZWcsIGJ1cywgZGV2Zm4pOwogCWlmICghYmFzZSkKQEAgLTE0NiwyOSArMTU0LDM0IEBACiAgICBOb3JtYWxseSB0aGlzIGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIE1DRkcgYnkgbm90IGxpc3RpbmcgdGhlbQogICAgYW5kIGFzc2lnbmluZyBzdWl0YWJsZSBfU0VHcywgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgaW4gc29tZSBCSU9TLgogICAgSW5zdGVhZCB0cnkgdG8gZGlzY292ZXIgYWxsIGRldmljZXMgb24gYnVzIDAgdGhhdCBhcmUgdW5yZWFjaGFibGUgdXNpbmcgTU0KLSAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4KLSAgIFdlIG9ubHkgZG8gdGhpcyBmb3IgYnVzIDAvc2VnIDAgKi8KKyAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4gKi8KIHN0YXRpYyBfX2luaXQgdm9pZCB1bnJlYWNoYWJsZV9kZXZpY2VzKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIGs7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiB2YWwxOwotCQl1MzIgYWRkcjsKKwlmb3IgKGsgPSAwOyBrIDwgTUFYX0NIRUNLX0JVUzsgaysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQl1MzIgdmFsMTsKKwkJCXUzMiBhZGRyOwogCi0JCXBjaV9jb25mMV9yZWFkKDAsIDAsIFBDSV9ERVZGTihpLCAwKSwgMCwgNCwgJnZhbDEpOwotCQlpZiAodmFsMSA9PSAweGZmZmZmZmZmKQotCQkJY29udGludWU7CisJCQlwY2lfY29uZjFfcmVhZCgwLCBrLCBQQ0lfREVWRk4oaSwgMCksIDAsIDQsICZ2YWwxKTsKKwkJCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCisJCQkJY29udGludWU7CiAKLQkJLyogTG9ja2luZyBwcm9iYWJseSBub3QgbmVlZGVkLCBidXQgc2FmZXIgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOwotCQlhZGRyID0gZ2V0X2Jhc2VfYWRkcigwLCAwLCBQQ0lfREVWRk4oaSwgMCkpOwotCQlpZiAoYWRkciAhPSAwKQotCQkJcGNpX2V4cF9zZXRfZGV2X2Jhc2UoYWRkciwgMCwgUENJX0RFVkZOKGksIDApKTsKLQkJaWYgKGFkZHIgPT0gMCB8fCByZWFkbCgodTMyIF9faW9tZW0gKiltbWNmZ192aXJ0X2FkZHIpICE9IHZhbDEpCi0JCQlzZXRfYml0KGksIGZhbGxiYWNrX3Nsb3RzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7CisJCQkvKiBMb2NraW5nIHByb2JhYmx5IG5vdCBuZWVkZWQsIGJ1dCBzYWZlciAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCQkJYWRkciA9IGdldF9iYXNlX2FkZHIoMCwgaywgUENJX0RFVkZOKGksIDApKTsKKwkJCWlmIChhZGRyICE9IDApCisJCQkJcGNpX2V4cF9zZXRfZGV2X2Jhc2UoYWRkciwgaywgUENJX0RFVkZOKGksIDApKTsKKwkJCWlmIChhZGRyID09IDAgfHwKKwkJCSAgICByZWFkbCgodTMyIF9faW9tZW0gKiltbWNmZ192aXJ0X2FkZHIpICE9IHZhbDEpIHsKKwkJCQlzZXRfYml0KGksIGZhbGxiYWNrX3Nsb3RzKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJQQ0k6IE5vIG1tY29uZmlnIHBvc3NpYmxlIG9uICV4OiV4XG4iLCBrLCBpKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCQl9CiAJfQogfQogCkBAIC0xODMsNiArMTk2LDE0IEBACiAJICAgIChwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcyA9PSAwKSkKIAkJcmV0dXJuOwogCisJaWYgKCFlODIwX2FsbF9tYXBwZWQocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MsCisJCQlwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcyArIE1NQ09ORklHX0FQRVJfU0laRSwKKwkJCUU4MjBfUkVTRVJWRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBCSU9TIEJ1ZzogTUNGRyBhcmVhIGlzIG5vdCBFODIwLXJlc2VydmVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IE5vdCB1c2luZyBNTUNPTkZJRy5cbiIpOworCQlyZXR1cm47CisJfQorCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVc2luZyBNTUNPTkZJR1xuIik7CiAJcmF3X3BjaV9vcHMgPSAmcGNpX21tY2ZnOwogCXBjaV9wcm9iZSA9IChwY2lfcHJvYmUgJiB+UENJX1BST0JFX01BU0spIHwgUENJX1BST0JFX01NQ09ORjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wb3dlci9jcHUuYyBiL2FyY2gvaTM4Ni9wb3dlci9jcHUuYwppbmRleCA1MGEwYmVmLi43OWIyMzcwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC9pMzg2L3Bvd2VyL2NwdS5jCkBAIC05Miw3ICs5Miw3IEBACiAJd3JpdGVfY3I0KGN0eHQtPmNyNCk7CiAJd3JpdGVfY3IzKGN0eHQtPmNyMyk7CiAJd3JpdGVfY3IyKGN0eHQtPmNyMik7Ci0Jd3JpdGVfY3IyKGN0eHQtPmNyMCk7CisJd3JpdGVfY3IwKGN0eHQtPmNyMCk7CiAKIAkvKgogCSAqIG5vdyByZXN0b3JlIHRoZSBkZXNjcmlwdG9yIHRhYmxlcyB0byB0aGVpciBwcm9wZXIgdmFsdWVzCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IGVkZmZlMjUuLmYwMjUyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC03Nyw2ICs3Nyw3IEBACiBjb25maWcgSUE2NF9HRU5FUklDCiAJYm9vbCAiZ2VuZXJpYyIKIAlzZWxlY3QgQUNQSQorCXNlbGVjdCBQQ0kKIAlzZWxlY3QgTlVNQQogCXNlbGVjdCBBQ1BJX05VTUEKIAloZWxwCkBAIC0yNjAsMTUgKzI2MSw2IEBACiAJICB0aGFuIDY0IHdpbGwgY2F1c2UgdGhlIHVzZSBvZiBhIENQVSBtYXNrIGFycmF5LCBjYXVzaW5nIGEgc21hbGwKIAkgIHBlcmZvcm1hbmNlIGhpdC4KIAotY29uZmlnIElBNjRfTlJfTk9ERVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIE5PREVzICgyNTYtMTAyNCkiIGlmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQotCXJhbmdlIDI1NiAxMDI0Ci0JZGVwZW5kcyBvbiBJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDCi0JZGVmYXVsdCAiMjU2IgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW4geW91ciBTU0kgc3lzdGVtLgotCSAgSWYgaW4gZG91YnQsIHVzZSB0aGUgZGVmYXVsdC4KLQogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU01QICYmIEVYUEVSSU1FTlRBTApAQCAtMzUyLDYgKzM0NCwxNiBAQAogCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGlzIGZvciBjb25maWd1cmluZyBoaWdoLWVuZCBtdWx0aXByb2Nlc3NvcgogCSAgc2VydmVyIHN5c3RlbXMuICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludCAiTWF4IG51bSBub2RlcyBzaGlmdCgzLTEwKSIKKwlyYW5nZSAzIDEwCisJZGVmYXVsdCAiOCIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIHlvdXIgU1NJIHN5c3RlbS4KKwkgIE1BWF9OVU1OT0RFUyB3aWxsIGJlIDJeKFRoaXMgdmFsdWUpLgorCSAgSWYgaW4gZG91YnQsIHVzZSB0aGUgZGVmYXVsdC4KKwogIyBWSVJUVUFMX01FTV9NQVAgYW5kIEZMQVRfTk9ERV9NRU1fTUFQIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KICMgVklSVFVBTF9NRU1fTUFQIGhhcyBiZWVuIHJldGFpbmVkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCiBjb25maWcgVklSVFVBTF9NRU1fTUFQCkBAIC00MTIsNiArNDE0LDggQEAKIGNvbmZpZyBTR0lfU04KIAlkZWZfYm9vbCB5IGlmIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQogCitzb3VyY2UgImRyaXZlcnMvc24vS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2Zpcm13YXJlL0tjb25maWciCiAKIHNvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZwppbmRleCBhNzE4MDM0Li45ZWEzNTM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1Ci0jIE1vbiBGZWIgMjcgMTY6MDY6MzggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMworIyBUaHUgQXByIDI3IDExOjQ4OjIzIDIwMDYKICMKIAogIwpAQCAtMjQsNiArMjQsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldApAQCAtMzgsMTAgKzM5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtNTMsNyArNTAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjIsNiArNTgsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODQsOCArODEsMTAgQEAKIENPTkZJR19NTVU9eQogQ09ORklHX1NXSU9UTEI9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQorQ09ORklHX0RNST15CiBDT05GSUdfRUZJPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQpAQCAtMTE2LDcgKzExNSw2IEBACiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0xMDI0Ci1DT05GSUdfSUE2NF9OUl9OT0RFUz0yNTYKICMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BSRUVNUFQ9eQpAQCAtMTM2LDYgKzEzNCw3IEBACiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9ERUZBVUxUPXkKIENPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD0xMAogQ09ORklHX1ZJUlRVQUxfTUVNX01BUD15CiBDT05GSUdfSE9MRVNfSU5fWk9ORT15CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQpAQCAtMTg3LDcgKzE4Niw2IEBACiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CiAjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMxLDYgKzIyOSw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz1tCiBDT05GSUdfSU5FVF9UQ1BfRElBRz1tCkBAIC0yMzgsOSArMjM3LDExIEBACiBDT05GSUdfVENQX0NPTkdfQklDPXkKIENPTkZJR19JUFY2PW0KICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC00NjgsOSArNDY5LDE0IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MD15Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEFfRkM9eQorQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRT15CisjIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAorQ09ORklHX1NDU0lfUUxBMjJYWD15CitDT05GSUdfU0NTSV9RTEEyMzAwPXkKK0NPTkZJR19TQ1NJX1FMQTIzMjI9eQorIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC00ODYsNiArNDkyLDcgQEAKIENPTkZJR19NRF9SQUlEMT15CiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ1PXkKKyMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAogIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD15CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldApAQCAtNjk0LDYgKzcwMSw3IEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogQ09ORklHX0FHUD15CisjIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKIENPTkZJR19BR1BfU0dJX1RJT0NBPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj1tCkBAIC03MzUsMTAgKzc0Myw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc1MSw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03NTcsNiArNzYyLDcgQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAKICMKQEAgLTc2OSw2ICs3NzUsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTgyOSw5ICs4MzYsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC04NDYsMTUgKzg1MSw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC05MDUsMTUgKzkwMSwyOSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiBDT05GSUdfSU5GSU5JQkFORD1tCiAjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KLSMgQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfU1JQPW0KIAogIwpAQCAtOTIzLDEwICs5MzMsMTUgQEAKIENPTkZJR19TR0lfSU9DMz15CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTk5Nyw3ICsxMDEyLDYgQEAKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMTQ1LDcgKzExNTksNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCBiZGNjZDBiLi5kZDRhMmY3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTE5OTksNyArMTk5OSw3IEBACiAJCWlmICghaW92cF9zaGlmdCkKIAkJCWlvdnBfc2hpZnQgPSBtaW4oUEFHRV9TSElGVCwgMTYpOwogCX0KLQlBQ1BJX01FTV9GUkVFKGRldl9pbmZvKTsKKwlrZnJlZShkZXZfaW5mbyk7CiAKIAkvKgogCSAqIGRlZmF1bHQgYW55dGhpbmcgbm90IGNhdWdodCBhYm92ZSBvciBzcGVjaWZpZWQgb24gY21kbGluZSB0byA0awpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwppbmRleCA0ZTdhNmExLi5kYTAzYzA2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwpAQCAtMzUsNiArMzUsOSBAQAogCiBzdGF0aWMgdm9pZCBlbGYzMl9zZXRfcGVyc29uYWxpdHkgKHZvaWQpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZSAoKHVudXNlZCkpCityYW5kb21pemVfc3RhY2tfdG9wKHVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wKTsKKwogI2RlZmluZSBzZXR1cF9hcmdfcGFnZXMoYnBybSx0b3MsZXhlYykJCWlhMzJfc2V0dXBfYXJnX3BhZ2VzKGJwcm0sZXhlYykKICNkZWZpbmUgZWxmX21hcAkJCQllbGYzMl9tYXAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCmluZGV4IDk1ZmUwNDQuLmEzMmNkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUworKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKQEAgLTMzNCw3ICszMzQsNyBAQAogCWRhdGE4IHN5c19zZXRkb21haW5uYW1lCiAJZGF0YTggc3lzMzJfbmV3dW5hbWUKIAlkYXRhOCBzeXMzMl9tb2RpZnlfbGR0Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogYWRqdGltZXggKi8KKwlkYXRhOCBjb21wYXRfc3lzX2FkanRpbWV4CiAJZGF0YTggc3lzMzJfbXByb3RlY3QJICAvKiAxMjUgKi8KIAlkYXRhOCBjb21wYXRfc3lzX3NpZ3Byb2NtYXNrCiAJZGF0YTggc3lzX25pX3N5c2NhbGwJLyogY3JlYXRlX21vZHVsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNTllODcxZC4uMDlhMGRiYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogb2JqLXkgOj0gYWNwaS5vIGVudHJ5Lm8gZWZpLm8gZWZpX3N0dWIubyBnYXRlLWRhdGEubyBmc3lzLm8gaWE2NF9rc3ltcy5vIGlycS5vIGlycV9pYTY0Lm8JXAogCSBpcnFfbHNhcGljLm8gaXZ0Lm8gbWFjaHZlYy5vIHBhbC5vIHBhdGNoLm8gcHJvY2Vzcy5vIHBlcmZtb24ubyBwdHJhY2UubyBzYWwubwkJXAogCSBzYWxpbmZvLm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWwubyBzeXNfaWE2NC5vIHRpbWUubyB0cmFwcy5vIHVuYWxpZ25lZC5vIFwKLQkgdW53aW5kLm8gbWNhLm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8gZG1pX3NjYW4ubworCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubwogCiBvYmotJChDT05GSUdfSUE2NF9CUkxfRU1VKQkrPSBicmxfZW11Lm8KIG9iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpCSs9IGFjcGktZXh0Lm8KQEAgLTMwLDcgKzMwLDYgQEAKIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vIGpwcm9iZXMubwogb2JqLSQoQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SKQkrPSB1bmNhY2hlZC5vCiBtY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCi1kbWlfc2Nhbi15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvZG1pX3NjYW4ubwogCiAjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KIHRhcmdldHMgKz0gZ2F0ZS5zbyBnYXRlLXN5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCmluZGV4IDRhNTU3NGYuLmZmZjgyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMKQEAgLTEsMTA1ICsxLDEwNCBAQAogLyoKLSAqIGFyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworICogKGMpIENvcHlyaWdodCAyMDAzLCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkCi0gKiBDb3B5cmlnaHQgKEMpIEFsZXggV2lsbGlhbXNvbgotICogQ29weXJpZ2h0IChDKSBCam9ybiBIZWxnYWFzCi0gKgotICogVmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gQUNQSS4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGktZXh0Lmg+CiAKLXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yIHsKLQl1OCBndWlkX2lkOwotCWVmaV9ndWlkX3QgZ3VpZDsKKy8qCisgKiBEZXZpY2UgQ1NScyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gUENJIGNvbmZpZyBzcGFjZSBzaG91bGQgYmUgZGVzY3JpYmVkCisgKiB2aWEgQUNQSS4gIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgZG9uZSB3aXRoIEFkZHJlc3MgU3BhY2UgRGVzY3JpcHRvcnMKKyAqIG1hcmtlZCBhcyAiY29uc3VtZXItb25seSwiIGJ1dCBvbGQgdmVyc2lvbnMgb2YgV2luZG93cyBhbmQgTGludXggaWdub3JlCisgKiB0aGUgcHJvZHVjZXIvY29uc3VtZXIgZmxhZywgc28gSFAgaW52ZW50ZWQgYSB2ZW5kb3ItZGVmaW5lZCByZXNvdXJjZSB0bworICogZGVzY3JpYmUgdGhlIGxvY2F0aW9uIGFuZCBzaXplIG9mIENTUiBzcGFjZS4KKyAqLworCitzdHJ1Y3QgYWNwaV92ZW5kb3JfdXVpZCBocF9jY3NyX3V1aWQgPSB7CisJLnN1YnR5cGUgPSAyLAorCS5kYXRhID0geyAweGY5LCAweGFkLCAweGU5LCAweDY5LCAweDRmLCAweDkyLCAweDVmLCAweGFiLCAweGY2LCAweDRhLAorCSAgICAweDI0LCAweGQyLCAweDAxLCAweDM3LCAweDBlLCAweGFkIH0sCiB9OwogCi1zdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyB7Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3I7Ci0JdTggKmRhdGE7Ci0JdTMyIGxlbmd0aDsKLX07Ci0KLWFjcGlfc3RhdHVzCi1hY3BpX3ZlbmRvcl9yZXNvdXJjZV9tYXRjaChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IGFjcGlfdmVuZG9yX2luZm8gKmluZm8gPSAoc3RydWN0IGFjcGlfdmVuZG9yX2luZm8gKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX3ZlbmRvciAqdmVuZG9yOwotCXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yICpkZXNjcmlwdG9yOwotCXUzMiBieXRlX2xlbmd0aDsKLQotCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfVkVORE9SKQotCQlyZXR1cm4gQUVfT0s7Ci0KLQl2ZW5kb3IgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yICopJnJlc291cmNlLT5kYXRhOwotCWRlc2NyaXB0b3IgPSAoc3RydWN0IGFjcGlfdmVuZG9yX2Rlc2NyaXB0b3IgKil2ZW5kb3ItPmJ5dGVfZGF0YTsKLQlpZiAodmVuZG9yLT5ieXRlX2xlbmd0aCA8PSBzaXplb2YoKmluZm8tPmRlc2NyaXB0b3IpIHx8Ci0JICAgIGRlc2NyaXB0b3ItPmd1aWRfaWQgIT0gaW5mby0+ZGVzY3JpcHRvci0+Z3VpZF9pZCB8fAotCSAgICBlZmlfZ3VpZGNtcChkZXNjcmlwdG9yLT5ndWlkLCBpbmZvLT5kZXNjcmlwdG9yLT5ndWlkKSkKLQkJcmV0dXJuIEFFX09LOwotCi0JYnl0ZV9sZW5ndGggPSB2ZW5kb3ItPmJ5dGVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yKTsKLQlpbmZvLT5kYXRhID0gYWNwaV9vc19hbGxvY2F0ZShieXRlX2xlbmd0aCk7Ci0JaWYgKCFpbmZvLT5kYXRhKQotCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwotCi0JbWVtY3B5KGluZm8tPmRhdGEsCi0JICAgICAgIHZlbmRvci0+Ynl0ZV9kYXRhICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yKSwKLQkgICAgICAgYnl0ZV9sZW5ndGgpOwotCWluZm8tPmxlbmd0aCA9IGJ5dGVfbGVuZ3RoOwotCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKLX0KLQotYWNwaV9zdGF0dXMKLWFjcGlfZmluZF92ZW5kb3JfcmVzb3VyY2UoYWNwaV9oYW5kbGUgb2JqLCBzdHJ1Y3QgYWNwaV92ZW5kb3JfZGVzY3JpcHRvciAqIGlkLAotCQkJICB1OCAqKiBkYXRhLCB1MzIgKiBieXRlX2xlbmd0aCkKLXsKLQlzdHJ1Y3QgYWNwaV92ZW5kb3JfaW5mbyBpbmZvOwotCi0JaW5mby5kZXNjcmlwdG9yID0gaWQ7Ci0JaW5mby5kYXRhID0gTlVMTDsKLQotCWFjcGlfd2Fsa19yZXNvdXJjZXMob2JqLCBNRVRIT0RfTkFNRV9fQ1JTLCBhY3BpX3ZlbmRvcl9yZXNvdXJjZV9tYXRjaCwKLQkJCSAgICAmaW5mbyk7Ci0JaWYgKCFpbmZvLmRhdGEpCi0JCXJldHVybiBBRV9OT1RfRk9VTkQ7Ci0KLQkqZGF0YSA9IGluZm8uZGF0YTsKLQkqYnl0ZV9sZW5ndGggPSBpbmZvLmxlbmd0aDsKLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0cnVjdCBhY3BpX3ZlbmRvcl9kZXNjcmlwdG9yIGhwX2Njc3JfZGVzY3JpcHRvciA9IHsKLQkuZ3VpZF9pZCA9IDIsCi0JLmd1aWQgPQotCSAgICBFRklfR1VJRCgweDY5ZTlhZGY5LCAweDkyNGYsIDB4YWI1ZiwgMHhmNiwgMHg0YSwgMHgyNCwgMHhkMiwgMHgwMSwKLQkJICAgICAweDM3LCAweDBlLCAweGFkKQotfTsKLQotYWNwaV9zdGF0dXMgaHBfYWNwaV9jc3Jfc3BhY2UoYWNwaV9oYW5kbGUgb2JqLCB1NjQgKiBjc3JfYmFzZSwgdTY0ICogY3NyX2xlbmd0aCkKK3N0YXRpYyBhY3BpX3N0YXR1cyBocF9jY3NyX2xvY2F0ZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqYmFzZSwgdTY0ICpsZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXU4ICpkYXRhOwotCXUzMiBsZW5ndGg7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfdmVuZG9yX3R5cGVkICp2ZW5kb3I7CiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2ZpbmRfdmVuZG9yX3Jlc291cmNlKG9iaiwgJmhwX2Njc3JfZGVzY3JpcHRvciwgJmRhdGEsICZsZW5ndGgpOworCXN0YXR1cyA9IGFjcGlfZ2V0X3ZlbmRvcl9yZXNvdXJjZShvYmosIE1FVEhPRF9OQU1FX19DUlMsICZocF9jY3NyX3V1aWQsCisJCSZidWZmZXIpOwogCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8IGxlbmd0aCAhPSAxNikKKwlyZXNvdXJjZSA9IGJ1ZmZlci5wb2ludGVyOworCXZlbmRvciA9ICZyZXNvdXJjZS0+ZGF0YS52ZW5kb3JfdHlwZWQ7CisKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgdmVuZG9yLT5ieXRlX2xlbmd0aCA8IDE2KSB7CisJCXN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShiYXNlLCB2ZW5kb3ItPmJ5dGVfZGF0YSwgc2l6ZW9mKCpiYXNlKSk7CisJbWVtY3B5KGxlbmd0aCwgdmVuZG9yLT5ieXRlX2RhdGEgKyA4LCBzaXplb2YoKmxlbmd0aCkpOworCisgIGV4aXQ6CisJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdHJ1Y3QgY3NyX3NwYWNlIHsKKwl1NjQJYmFzZTsKKwl1NjQJbGVuZ3RoOworfTsKKworc3RhdGljIGFjcGlfc3RhdHVzIGZpbmRfY3NyX3NwYWNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3NyX3NwYWNlICpzcGFjZSA9IGRhdGE7CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0IGFkZHI7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzb3VyY2UsICZhZGRyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYKKwkgICAgYWRkci5yZXNvdXJjZV90eXBlID09IEFDUElfTUVNT1JZX1JBTkdFICYmCisJICAgIGFkZHIuYWRkcmVzc19sZW5ndGggJiYKKwkgICAgYWRkci5wcm9kdWNlcl9jb25zdW1lciA9PSBBQ1BJX0NPTlNVTUVSKSB7CisJCXNwYWNlLT5iYXNlID0gYWRkci5taW5pbXVtOworCQlzcGFjZS0+bGVuZ3RoID0gYWRkci5hZGRyZXNzX2xlbmd0aDsKKwkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworCX0KKwlyZXR1cm4gQUVfT0s7CQkvKiBrZWVwIGxvb2tpbmcgKi8KK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGhwX2Nyc19sb2NhdGUoYWNwaV9oYW5kbGUgb2JqLCB1NjQgKmJhc2UsIHU2NCAqbGVuZ3RoKQoreworCXN0cnVjdCBjc3Jfc3BhY2Ugc3BhY2UgPSB7IDAsIDAgfTsKKworCWFjcGlfd2Fsa19yZXNvdXJjZXMob2JqLCBNRVRIT0RfTkFNRV9fQ1JTLCBmaW5kX2Nzcl9zcGFjZSwgJnNwYWNlKTsKKwlpZiAoIXNwYWNlLmxlbmd0aCkKIAkJcmV0dXJuIEFFX05PVF9GT1VORDsKIAotCW1lbWNweShjc3JfYmFzZSwgZGF0YSwgc2l6ZW9mKCpjc3JfYmFzZSkpOwotCW1lbWNweShjc3JfbGVuZ3RoLCBkYXRhICsgOCwgc2l6ZW9mKCpjc3JfbGVuZ3RoKSk7Ci0JYWNwaV9vc19mcmVlKGRhdGEpOwotCisJKmJhc2UgPSBzcGFjZS5iYXNlOworCSpsZW5ndGggPSBzcGFjZS5sZW5ndGg7CiAJcmV0dXJuIEFFX09LOwogfQogCithY3BpX3N0YXR1cyBocF9hY3BpX2Nzcl9zcGFjZShhY3BpX2hhbmRsZSBvYmosIHU2NCAqY3NyX2Jhc2UsIHU2NCAqY3NyX2xlbmd0aCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBocF9jY3NyX2xvY2F0ZShvYmosIGNzcl9iYXNlLCBjc3JfbGVuZ3RoKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gaHBfY3JzX2xvY2F0ZShvYmosIGNzcl9iYXNlLCBjc3JfbGVuZ3RoKTsKK30KIEVYUE9SVF9TWU1CT0woaHBfYWNwaV9jc3Jfc3BhY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDc1MGU4ZTcuLmJjYjgwY2E1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC0xNjA2LDUgKzE2MDYsMTAgQEAKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJCS8vIDEyOTUgcmVzZXJ2ZWQgZm9yIHBwb2xsCiAJZGF0YTggc3lzX3Vuc2hhcmUKIAlkYXRhOCBzeXNfc3BsaWNlCisJZGF0YTggc3lzX3NldF9yb2J1c3RfbGlzdAorCWRhdGE4IHN5c19nZXRfcm9idXN0X2xpc3QKKwlkYXRhOCBzeXNfc3luY19maWxlX3JhbmdlCQkvLyAxMzAwCisJZGF0YTggc3lzX3RlZQorCWRhdGE4IHN5c192bXNwbGljZQogCiAJLm9yZyBzeXNfY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMJLy8gZ3VhcmQgYWdhaW5zdCBmYWlsdXJlcyB0byBpbmNyZWFzZSBOUl9zeXNjYWxscwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwppbmRleCA3OTU2ZWI5Li5kNThjMWM1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJaWE2NF92ZWN0b3IgdmVjID0gaXJxX3RvX3ZlY3RvcihpcnEpOwogCXN0cnVjdCBpb3NhcGljX3J0ZV9pbmZvICpydGU7CiAKLQltb3ZlX2lycShpcnEpOworCW1vdmVfbmF0aXZlX2lycShpcnEpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocnRlLCAmaW9zYXBpY19pbnRyX2luZm9bdmVjXS5ydGVzLCBydGVfbGlzdCkKIAkJaW9zYXBpY19lb2kocnRlLT5hZGRyLCB2ZWMpOwogfQpAQCAtNDU4LDcgKzQ1OCw3IEBACiB7CiAJaXJxX2Rlc2NfdCAqaWRlc2MgPSBpcnFfZGVzY3AoaXJxKTsKIAotCW1vdmVfaXJxKGlycSk7CisJbW92ZV9uYXRpdmVfaXJxKGlycSk7CiAJLyoKIAkgKiBPbmNlIHdlIGhhdmUgcmVjb3JkZWQgSVJRX1BFTkRJTkcgYWxyZWFkeSwgd2UgY2FuIG1hc2sgdGhlCiAJICogaW50ZXJydXB0IGZvciByZWFsLiBUaGlzIHByZXZlbnRzIElSUSBzdG9ybXMgZnJvbSB1bmhhbmRsZWQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCmluZGV4IDVjZTkwOGUuLjljNzJlYTNmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKQEAgLTEwMSw3ICsxMDEsNiBAQAogCiAJaWYgKGlycSA8IE5SX0lSUVMpIHsKIAkJaXJxX2FmZmluaXR5W2lycV0gPSBtYXNrOwotCQlzZXRfaXJxX2luZm8oaXJxLCBtYXNrKTsKIAkJaXJxX3JlZGlyW2lycV0gPSAoY2hhcikgKHJlZGlyICYgMHhmZik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA3ODk4ODFjLi5mOTAzOWY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJdXBkYXRlX2twcm9iZV9pbnN0X2ZsYWcodGVtcGxhdGUsIHNsb3QsIG1ham9yX29wY29kZSwga3Byb2JlX2luc3QsIHApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2twcm9iZV9pbnN0KGJ1bmRsZV90ICpidW5kbGUsIHVpbnQgc2xvdCwKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBnZXRfa3Byb2JlX2luc3QoYnVuZGxlX3QgKmJ1bmRsZSwgdWludCBzbG90LAogCSAgICAgICAJdW5zaWduZWQgbG9uZyAqa3Byb2JlX2luc3QsIHVpbnQgKm1ham9yX29wY29kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGtwcm9iZV9pbnN0X3AwLCBrcHJvYmVfaW5zdF9wMTsKQEAgLTI3OCw3ICsyNzgsNyBAQAogfQogCiAvKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBhZGRyIGlzIGluIHRoZSBJbnRlcnJ1cHQgVmVjdG9yIFRhYmxlICovCi1zdGF0aWMgaW5saW5lIGludCBpbl9pdnRfZnVuY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGluX2l2dF9mdW5jdGlvbnModW5zaWduZWQgbG9uZyBhZGRyKQogewogCXJldHVybiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfX3N0YXJ0X2l2dF90ZXh0CiAJCSYmIGFkZHIgPCAodW5zaWduZWQgbG9uZylfX2VuZF9pdnRfdGV4dCk7CkBAIC0zMDgsMTkgKzMwOCwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLAogCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCA4OTYzMTcxLi42YTA4ODA2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTU4MSwxMCArNTgxLDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIG5kID0KKwkJeyAuc29zID0gTlVMTCwgLm1vbmFyY2hfY3B1ID0gJm1vbmFyY2hfY3B1IH07CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTU5NCw3ICs1OTYsNyBAQAogCSAqLwogCWlhNjRfc2FsX21jX3JlbmRleigpOwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTYwMiw3ICs2MDQsNyBAQAogCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KIAotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTk2MSw3ICs5NjMsNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1pYTY0X3dhaXRfZm9yX3NsYXZlcyhpbnQgbW9uYXJjaCkKK2lhNjRfd2FpdF9mb3Jfc2xhdmVzKGludCBtb25hcmNoLCBjb25zdCBjaGFyICp0eXBlKQogewogCWludCBjLCB3YWl0ID0gMCwgbWlzc2luZyA9IDA7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CkBAIC05ODcsNyArOTg5LDcgQEAKIAl9CiAJaWYgKCFtaXNzaW5nKQogCQlnb3RvIGFsbF9pbjsKLQlwcmludGsoS0VSTl9JTkZPICJPUyBNQ0Egc2xhdmUgZGlkIG5vdCByZW5kZXp2b3VzIG9uIGNwdSIpOworCXByaW50ayhLRVJOX0lORk8gIk9TICVzIHNsYXZlIGRpZCBub3QgcmVuZGV6dm91cyBvbiBjcHUiLCB0eXBlKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGMpIHsKIAkJaWYgKGMgPT0gbW9uYXJjaCkKIAkJCWNvbnRpbnVlOwpAQCAtOTk4LDcgKzEwMDAsNyBAQAogCXJldHVybjsKIAogYWxsX2luOgotCXByaW50ayhLRVJOX0lORk8gIkFsbCBPUyBNQ0Egc2xhdmVzIGhhdmUgcmVhY2hlZCByZW5kZXp2b3VzXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJBbGwgT1MgJXMgc2xhdmVzIGhhdmUgcmVhY2hlZCByZW5kZXp2b3VzXG4iLCB0eXBlKTsKIAlyZXR1cm47CiB9CiAKQEAgLTEwMjMsNiArMTAyNSw4IEBACiAJCSZzb3MtPnByb2Nfc3RhdGVfcGFyYW07CiAJaW50IHJlY292ZXIsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQ7CisJc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgbmQgPQorCQl7IC5zb3MgPSBzb3MsIC5tb25hcmNoX2NwdSA9ICZtb25hcmNoX2NwdSB9OwogCiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CS8qIEZJWE1FOiBtYWtlIHByaW50ayBOTUkvTUNBL0lOSVQgc2FmZSAqLwogCWNvbnNvbGVfbG9nbGV2ZWwgPSAxNTsJLyogbWFrZSBzdXJlIHByaW50a3MgbWFrZSBpdCB0byBjb25zb2xlICovCkBAIC0xMDMxLDEwICsxMDM1LDEwIEBACiAKIAlwcmV2aW91c19jdXJyZW50ID0gaWE2NF9tY2FfbW9kaWZ5X29yaWdpbmFsX3N0YWNrKHJlZ3MsIHN3LCBzb3MsICJNQ0EiKTsKIAltb25hcmNoX2NwdSA9IGNwdTsKLQlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfRU5URVIsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9FTlRFUiwgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7Ci0JaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1KTsKKwlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUsICJNQ0EiKTsKIAogCS8qIFdha2V1cCBhbGwgdGhlIHByb2Nlc3NvcnMgd2hpY2ggYXJlIHNwaW5uaW5nIGluIHRoZSByZW5kZXp2b3VzIGxvb3AuCiAJICogVGhleSB3aWxsIGxlYXZlIFNBTCwgdGhlbiBzcGluIGluIHRoZSBPUyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKQEAgLTEwNDMsNyArMTA0Nyw3IEBACiAJICogc3Bpbm5pbmcgaW4gU0FMIGRvZXMgbm90IHdvcmsuCiAJICovCiAJaWE2NF9tY2Ffd2FrZXVwX2FsbCgpOwotCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9QUk9DRVNTLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKQEAgLTEwNjQsNyArMTA2OCw3IEBACiAJCWlhNjRfc2FsX2NsZWFyX3N0YXRlX2luZm8oU0FMX0lORk9fVFlQRV9NQ0EpOwogCQlzb3MtPm9zX3N0YXR1cyA9IElBNjRfTUNBX0NPUlJFQ1RFRDsKIAl9Ci0JaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0xFQVZFLCAiTUNBIiwgcmVncywgMCwgMCwgcmVjb3ZlcikKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfTEVBVkUsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIHJlY292ZXIpCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC0xMzUxLDEwICsxMzU1LDE0IEBACiAJc3RhdGljIGF0b21pY190IG1vbmFyY2hzOwogCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIG5kID0KKwkJeyAuc29zID0gc29zLCAubW9uYXJjaF9jcHUgPSAmbW9uYXJjaF9jcHUgfTsKIAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KIAljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLwogCisJKHZvaWQpIG5vdGlmeV9kaWUoRElFX0lOSVRfRU5URVIsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKTsKKwogCXByaW50ayhLRVJOX0lORk8gIkVudGVyZWQgT1MgSU5JVCBoYW5kbGVyLiBQU1A9JWx4IGNwdT0lZCBtb25hcmNoPSVsZFxuIiwKIAkJc29zLT5wcm9jX3N0YXRlX3BhcmFtLCBjcHUsIHNvcy0+bW9uYXJjaCk7CiAJc2FsaW5mb19sb2dfd2FrZXVwKFNBTF9JTkZPX1RZUEVfSU5JVCwgTlVMTCwgMCwgMCk7CkBAIC0xMzkwLDE1ICsxMzk4LDE1IEBACiAJCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0lOSVQ7CiAJCXdoaWxlIChtb25hcmNoX2NwdSA9PSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggZW50ZXJzICovCi0JCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKLQkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9QUk9DRVNTLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJd2hpbGUgKG1vbmFyY2hfY3B1ICE9IC0xKQogCQkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KLQkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfTEVBVkUsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfTEVBVkUsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJCT09IE5PVElGWV9TVE9QKQogCQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCQlwcmludGsoIlNsYXZlIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwpAQCAtMTQwOSw3ICsxNDE3LDcgQEAKIAl9CiAKIAltb25hcmNoX2NwdSA9IGNwdTsKLQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCkBAIC0xNDIxLDE1ICsxNDI5LDE1IEBACiAJICovCiAJcHJpbnRrKCJEZWxheWluZyBmb3IgNSBzZWNvbmRzLi4uXG4iKTsKIAl1ZGVsYXkoNSoxMDAwMDAwKTsKLQlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUpOworCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSwgIklOSVQiKTsKIAkvKiBJZiBub2JvZHkgaW50ZXJjZXB0cyBESUVfSU5JVF9NT05BUkNIX1BST0NFU1MgdGhlbiB3ZSBkcm9wIHRocm91Z2gKIAkgKiB0byBkZWZhdWx0X21vbmFyY2hfaW5pdF9wcm9jZXNzKCkgYWJvdmUgYW5kIGp1c3QgcHJpbnQgYWxsIHRoZQogCSAqIHRhc2tzLgogCSAqLwotCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwotCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfTEVBVkUsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJcHJpbnRrKCJcbklOSVQgZHVtcCBjb21wbGV0ZS4gIE1vbmFyY2ggb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CkBAIC0xNjMxLDYgKzE2MzksNyBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiSW5jcmVhc2luZyBNQ0EgcmVuZGV6dm91cyB0aW1lb3V0IGZyb20gIgogCQkJCSIlbGQgdG8gJWxkIG1pbGxpc2Vjb25kc1xuIiwgdGltZW91dCwgaXNydi52MCk7CiAJCQl0aW1lb3V0ID0gaXNydi52MDsKKwkJCSh2b2lkKSBub3RpZnlfZGllKERJRV9NQ0FfTkVXX1RJTUVPVVQsICJNQ0EiLCBOVUxMLCB0aW1lb3V0LCAwLCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlbmRlenZvdXMgaW50ZXJydXB0ICIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKaW5kZXggNjBhNDY0Yi4uNmRmZjAyNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKQEAgLTgyNyw3ICs4MjcsNyBAQAogCWxkOCByOT1bdGVtcDJdLDE2CS8vIHNhbF9ncAogCTs7CiAJbGQ4IHIyMj1bdGVtcDFdLDE2CS8vIHBhbF9taW5fc3RhdGUsIHZpcnR1YWwKLQlsZDggcjIxPVt0ZW1wMl0sMTYJLy8gcHJldl9JQTY0X0tSX0NVUlJFTlQKKwlsZDggcjEzPVt0ZW1wMl0sMTYJLy8gcHJldl9JQTY0X0tSX0NVUlJFTlQKIAk7OwogCWxkOCByMTY9W3RlbXAxXSwxNgkvLyBwcmV2X0lBNjRfS1JfQ1VSUkVOVF9TVEFDSwogCWxkOCByMjA9W3RlbXAyXSwxNgkvLyBwcmV2X3Rhc2sKQEAgLTg0OCw3ICs4NDgsNyBAQAogCW1vdiBjci5paW09dGVtcDMKIAltb3YgY3IuaWhhPXRlbXA0CiAJZGVwIHIyMj0wLHIyMiw2MiwxCS8vIHBhbF9taW5fc3RhdGUsIHBoeXNpY2FsLCB1bmNhY2hlZAotCW1vdiBJQTY0X0tSKENVUlJFTlQpPXIyMQorCW1vdiBJQTY0X0tSKENVUlJFTlQpPXIxMwogCWxkOCByOD1bdGVtcDFdCQkvLyBvc19zdGF0dXMKIAlsZDggcjEwPVt0ZW1wMl0JCS8vIGNvbnRleHQKIApAQCAtODU2LDcgKzg1Niw3IEBACiAJICogYXZvaWQgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgYWxnb3JpdGhtIGluIGlhNjRfc3dpdGNoX3RvKCksIGp1c3QKIAkgKiBwdXJnZSBhbnkgZXhpc3RpbmcgQ1VSUkVOVF9TVEFDSyBtYXBwaW5nIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmUuCiAJICoKLQkgKiByMTYgY29udGFpbnMgcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0ssIHIyMSBjb250YWlucworCSAqIHIxNiBjb250YWlucyBwcmV2X0lBNjRfS1JfQ1VSUkVOVF9TVEFDSywgcjEzIGNvbnRhaW5zCiAJICogcHJldl9JQTY0X0tSX0NVUlJFTlQsIHRoZXNlIHZhbHVlcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgYnkgdGhlIEMKIAkgKiBjb2RlLiAgRG8gbm90IHVzZSByOCwgcjksIHIxMCwgcjIyLCB0aGV5IGNvbnRhaW4gdmFsdWVzIHJlYWR5IGZvcgogCSAqIHRoZSByZXR1cm4gdG8gU0FMLgpAQCAtODczLDcgKzg3Myw3IEBACiAJOzsKIAlzcmx6LmQKIAotCWV4dHIudSByMTk9cjIxLDYxLDMJCQkvLyByMjEgPSBwcmV2X0lBNjRfS1JfQ1VSUkVOVAorCWV4dHIudSByMTk9cjEzLDYxLDMJCQkvLyByMTMgPSBwcmV2X0lBNjRfS1JfQ1VSUkVOVAogCXNobCByMjA9cjE2LElBNjRfR1JBTlVMRV9TSElGVAkJLy8gcjE2ID0gcHJldl9JQTY0X0tSX0NVUlJFTlRfU1RBQ0sKIAltb3ZsIHIyMT1QQUdFX0tFUk5FTAkJCS8vIHBhZ2UgcHJvcGVydGllcwogCTs7CkBAIC04ODMsNyArODgzLDcgQEAKIChwNikJYnIuc3BudCAxZgkJCQkvLyB0aGUgZHJlYWRlZCBjcHUgMCBpZGxlIHRhc2sgaW4gcmVnaW9uIDU6KAogCTs7CiAJbW92IGNyLml0aXI9cjE4Ci0JbW92IGNyLmlmYT1yMjEKKwltb3YgY3IuaWZhPXIxMwogCW1vdiByMjA9SUE2NF9UUl9DVVJSRU5UX1NUQUNLCiAJOzsKIAlpdHIuZCBkdHJbcjIwXT1yMjEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKaW5kZXggMzdjODhlYi4uY2E2NjY2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKQEAgLTYyLDYgKzYyLDExIEBACiAJSVNPTEFURV9OT05FCiB9IGlzb2xhdGVfc3RhdHVzX3Q7CiAKK3R5cGVkZWYgZW51bSB7CisJTUNBX05PVF9SRUNPVkVSRUQgPSAwLAorCU1DQV9SRUNPVkVSRUQJICA9IDEKK30gcmVjb3Zlcnlfc3RhdHVzX3Q7CisKIC8qCiAgKiAgVGhpcyBwb29sIGtlZXBzIHBvaW50ZXJzIHRvIHRoZSBzZWN0aW9uIHBhcnQgb2YgU0FMIGVycm9yIHJlY29yZAogICovCkBAIC03MSw2ICs3NiwxOCBAQAogCWludAkgICAgIG1heF9pZHg7IC8qIE1heGltdW0gaW5kZXggb2Ygc2VjdGlvbiBwb2ludGVyIGxpc3QgcG9vbCAqLwogfSBzbGlkeF9wb29sOwogCitzdGF0aWMgaW50CitmYXRhbF9tY2EoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIE1DQV9OT1RfUkVDT1ZFUkVEOworfQorCiAvKioKICAqIG1jYV9wYWdlX2lzb2xhdGUgLSBpc29sYXRlIGEgcG9pc29uZWQgcGFnZSBpbiBvcmRlciBub3QgdG8gdXNlIGl0IGxhdGVyCiAgKiBAcGFkZHI6CXBvaXNvbmVkIG1lbW9yeSBsb2NhdGlvbgpAQCAtNDI0LDcgKzQ0MSw3IEBACiAKIAkvKiBJcyB0YXJnZXQgYWRkcmVzcyB2YWxpZD8gKi8KIAlpZiAoIXBiY2ktPnR2KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IHRhcmdldCBhZGRyZXNzIG5vdCB2YWxpZFxuIik7CiAKIAkvKgogCSAqIGNwdSByZWFkIG9yIG1lbW9yeS1tYXBwZWQgaW8gcmVhZApAQCAtNDQyLDcgKzQ1OSw3IEBACiAKIAkvKiBJcyBtaW5zdGF0ZSB2YWxpZD8gKi8KIAlpZiAoIXBlaWR4X2JvdHRvbShwZWlkeCkgfHwgIShwZWlkeF9ib3R0b20ocGVpZHgpLT52YWxpZC5taW5zdGF0ZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogbWluc3RhdGUgbm90IHZhbGlkXG4iKTsKIAlwc3IxID0oc3RydWN0IGlhNjRfcHNyICopJihwZWlkeF9taW5zdGF0ZV9hcmVhKHBlaWR4KS0+cG1zYV9pcHNyKTsKIAlwc3IyID0oc3RydWN0IGlhNjRfcHNyICopJihwZWlkeF9taW5zdGF0ZV9hcmVhKHBlaWR4KS0+cG1zYV94cHNyKTsKIApAQCAtNDc2LDEyICs0OTMsMTMgQEAKIAkJCXBzcjItPmJuICA9IDE7CiAJCQlwc3IyLT5pICA9IDA7CiAKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIE1DQV9SRUNPVkVSRUQ7CiAJCX0KIAogCX0KIAotCXJldHVybiAwOworCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBrZXJuZWwgY29udGV4dCBub3QgcmVjb3ZlcmVkLCIKKwkJCSAgIiBpaXAgMHglbHhcbiIsIHBtc2EtPnBtc2FfaWlwKTsKIH0KIAogLyoqCkBAIC01NjcsMTMgKzU4NSwxMyBAQAogCSAqIFRoZSBtYWNoaW5lIGNoZWNrIGlzIGNvcnJlY3RlZC4KIAkgKi8KIAlpZiAocHNwLT5jbSA9PSAxKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE1DQV9SRUNPVkVSRUQ7CiAKIAkvKgogCSAqIFRoZSBlcnJvciB3YXMgbm90IGNvbnRhaW5lZC4gIFNvZnR3YXJlIG11c3QgYmUgcmVzZXQuCiAJICovCiAJaWYgKHBzcC0+dXMgfHwgcHNwLT5jaSA9PSAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IGVycm9yIG5vdCBjb250YWluZWRcbiIpOwogCiAJLyoKIAkgKiBUaGUgY2FjaGUgY2hlY2sgYW5kIGJ1cyBjaGVjayBiaXRzIGhhdmUgZm91ciBwb3NzaWJsZSBzdGF0ZXMKQEAgLTU4NCwyMCArNjAyLDIyIEBACiAJICogICAgMSAgMQlNZW1vcnkgZXJyb3IsIGF0dGVtcHQgcmVjb3ZlcnkKIAkgKi8KIAlpZiAocHNwLT5iYyA9PSAwIHx8IHBiY2kgPT0gTlVMTCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBObyBidXMgY2hlY2tcbiIpOwogCiAJLyoKIAkgKiBTb3JyeSwgd2UgY2Fubm90IGhhbmRsZSBzbyBtYW55LgogCSAqLwogCWlmIChwZWlkeF9idXNfY2hlY2tfbnVtKHBlaWR4KSA+IDEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogVG9vIG1hbnkgYnVzIGNoZWNrc1xuIik7CiAJLyoKIAkgKiBXZWxsLCBoZXJlIGlzIG9ubHkgb25lIGJ1cyBlcnJvci4KIAkgKi8KLQlpZiAocGJjaS0+aWIgfHwgcGJjaS0+Y2MpCi0JCXJldHVybiAwOworCWlmIChwYmNpLT5pYikKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IEludGVybmFsIEJ1cyBlcnJvclxuIik7CisJaWYgKHBiY2ktPmNjKQorCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogQ2FjaGUtY2FjaGUgZXJyb3JcbiIpOwogCWlmIChwYmNpLT5lYiAmJiBwYmNpLT5ic2kgPiAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IEV4dGVybmFsIGJ1cyBjaGVjayBmYXRhbCBzdGF0dXNcbiIpOwogCiAJLyoKIAkgKiBUaGlzIGlzIGEgbG9jYWwgTUNBIGFuZCBlc3RpbWF0ZWQgYXMgcmVjb3ZlcmJsZSBleHRlcm5hbCBidXMgZXJyb3IuCkBAIC02MDksNyArNjI5LDcgQEAKIAkvKgogCSAqIE9uIGFjY291bnQgb2Ygc3RyYW5nZSBTQUwgZXJyb3IgcmVjb3JkLCB3ZSBjYW5ub3QgcmVjb3Zlci4KIAkgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogU3RyYW5nZSBTQUwgcmVjb3JkXG4iKTsKIH0KIAogLyoqCkBAIC02MzgsMTIgKzY1OCwxMCBAQAogCiAJIC8qIE5vdywgT1MgY2FuIHJlY292ZXIgd2hlbiB0aGVyZSBpcyBvbmUgcHJvY2Vzc29yIGVycm9yIHNlY3Rpb24gKi8KIAlpZiAobl9wcm9jX2VyciA+IDEpCi0JCXJldHVybiAwOwotCWVsc2UgaWYgKG5fcHJvY19lcnIgPT0gMCkgeworCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogVG9vIE1hbnkgRXJyb3JzXG4iKTsKKwllbHNlIGlmIChuX3Byb2NfZXJyID09IDApCiAJCS8qIFdlaXJkIFNBTCByZWNvcmQgLi4uIFdlIG5lZWQgbm90IHRvIHJlY292ZXIgKi8KLQotCQlyZXR1cm4gMTsKLQl9CisJCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBXZWlyZCBTQUwgcmVjb3JkXG4iKTsKIAogCS8qIE1ha2UgaW5kZXggb2YgcHJvY2Vzc29yIGVycm9yIHNlY3Rpb24gKi8KIAltY2FfbWFrZV9wZWlkeCgoc2FsX2xvZ19wcm9jZXNzb3JfaW5mb190KikKQEAgLTY1NCw3ICs2NzIsNyBAQAogCiAJLyogQ2hlY2sgd2hldGhlciBNQ0EgaXMgZ2xvYmFsIG9yIG5vdCAqLwogCWlmIChpc19tY2FfZ2xvYmFsKCZwZWlkeCwgJnBiY2ksIHNvcykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogZ2xvYmFsIE1DQVxuIik7CiAJCiAJLyogVHJ5IHRvIHJlY292ZXIgYSBwcm9jZXNzb3IgZXJyb3IgKi8KIAlyZXR1cm4gcmVjb3Zlcl9mcm9tX3Byb2Nlc3Nvcl9lcnJvcihwbGF0Zm9ybV9lcnIsICZzbGlkeCwgJnBlaWR4LApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggN2EyZjBhNy4uM2EzMGNmYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC05NDcsNyArOTQ3LDcgQEAKIHBlcmNwdV9tb2Rjb3B5ICh2b2lkICpwY3B1ZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCW1lbWNweShwY3B1ZHN0ICsgX19wZXJfY3B1X29mZnNldFtpXSwgc3JjLCBzaXplKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCmluZGV4IDYzODZmNjMuLjg1OWZiMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCkBAIC05NTksNyArOTU5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhbGluZm9fY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBwYWxpbmZvX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkJCQkJCXZvaWQgKmhjcHUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA5ODg3Yzg3Li5lNjFlMTVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE2NDQsNyArMTY0NCw3IEBACiAJCQlhcmNoID0gQVVESVRfQVJDSF9JQTY0OwogCQl9CiAKLQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCBhcmNoLCBzeXNjYWxsLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKKwkJYXVkaXRfc3lzY2FsbF9lbnRyeShhcmNoLCBzeXNjYWxsLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKIAl9CiAKIH0KQEAgLTE2NjIsNyArMTY2Miw3IEBACiAKIAkJaWYgKHN1Y2Nlc3MgIT0gQVVESVRTQ19TVUNDRVNTKQogCQkJcmVzdWx0ID0gLXJlc3VsdDsKLQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIHN1Y2Nlc3MsIHJlc3VsdCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChzdWNjZXNzLCByZXN1bHQpOwogCX0KIAogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMgYi9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYwppbmRleCA5ZDVhODIzLi42NjNhMTg2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYwpAQCAtNTcyLDcgKzU3Miw3IEBACiB9OwogCiAjaWZkZWYJQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgaW50IF9fZGV2aW5pdAorc3RhdGljIGludAogc2FsaW5mb19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGksIGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggYjQ3NDc2ZC4uNGYzYTE2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMzA1LDEzICszMDUsMTAgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNwdV9jYWNoZV9zeXNmc19leGl0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JaWYgKGFsbF9jcHVfY2FjaGVfaW5mb1tjcHVdLmNhY2hlX2xlYXZlcykgewotCQlrZnJlZShhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5jYWNoZV9sZWF2ZXMpOwotCQlhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5jYWNoZV9sZWF2ZXMgPSBOVUxMOwotCX0KKwlrZnJlZShhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5jYWNoZV9sZWF2ZXMpOworCWFsbF9jcHVfY2FjaGVfaW5mb1tjcHVdLmNhY2hlX2xlYXZlcyA9IE5VTEw7CiAJYWxsX2NwdV9jYWNoZV9pbmZvW2NwdV0ubnVtX2NhY2hlX2xlYXZlcyA9IDA7CiAJbWVtc2V0KCZhbGxfY3B1X2NhY2hlX2luZm9bY3B1XS5rb2JqLCAwLCBzaXplb2Yoc3RydWN0IGtvYmplY3QpKTsKLQogCXJldHVybjsKIH0KIApAQCAtNDI5LDcgKzQyNiw3IEBACiAgKiBXaGVuIGEgY3B1IGlzIGhvdC1wbHVnZ2VkLCBkbyBhIGNoZWNrIGFuZCBpbml0aWF0ZQogICogY2FjaGUga29iamVjdCBpZiBuZWNlc3NhcnkKICAqLwotc3RhdGljIGludCBfX2NwdWluaXQgY2FjaGVfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBjYWNoZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9tZW1jcHlfbWNrLlMgYi9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUwppbmRleCA0NmM5MzMxLi45ZTUzNGQ1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUworKysgYi9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUwpAQCAtNiw3ICs2LDkgQEAKICAqCWluMToJc291cmNlIGFkZHJlc3MKICAqCWluMjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKICAqIE91dHB1dDoKLSAqIAkwIGlmIHN1Y2Nlc3MsIG9yIG51bWJlciBvZiBieXRlIE5PVCBjb3BpZWQgaWYgZXJyb3Igb2NjdXJyZWQuCisgKglmb3IgbWVtY3B5OiAgICByZXR1cm4gZGVzdAorICogCWZvciBjb3B5X3VzZXI6IHJldHVybiAwIGlmIHN1Y2Nlc3MsCisgKgkJICAgICAgIG9yIG51bWJlciBvZiBieXRlIE5PVCBjb3BpZWQgaWYgZXJyb3Igb2NjdXJyZWQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnAuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgS2VuIENoZW4gPGtlbm5ldGgudy5jaGVuQGludGVsLmNvbT4KQEAgLTczLDYgKzc1LDcgQEAKIAlhbmQJcjI4PTB4NyxpbjAKIAlhbmQJcjI5PTB4NyxpbjEKIAltb3YJZjY9ZjAKKwltb3YJcmV0dmFsPWluMAogCWJyLmNvbmQuc3B0ayAuY29tbW9uX2NvZGUKIAk7OwogRU5EKG1lbWNweSkKQEAgLTg0LDcgKzg3LDcgQEAKIAltb3YJZjY9ZjEKIAltb3YJc2F2ZWRfaW4wPWluMAkvLyBzYXZlIGRlc3QgcG9pbnRlcgogCW1vdglzYXZlZF9pbjE9aW4xCS8vIHNhdmUgc3JjIHBvaW50ZXIKLQltb3YJc2F2ZWRfaW4yPWluMgkvLyBzYXZlIGxlbgorCW1vdglyZXR2YWw9cjAJLy8gaW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUKIAk7OwogLmNvbW1vbl9jb2RlOgogCWNtcC5ndAlwMTUscDA9OCxpbjIJLy8gY2hlY2sgZm9yIHNtYWxsIHNpemUKQEAgLTkyLDcgKzk1LDcgQEAKIAljbXAubmUJcDE0LHAwPTAscjI5CS8vIGNoZWNrIHNyYyBhbGlnbm1lbnQKIAlhZGQJc3JjMD0wLGluMQogCXN1YglyMzA9OCxyMjgJLy8gZm9yIC5hbGlnbl9kZXN0Ci0JbW92CXJldHZhbD1yMAkvLyBpbml0aWFsaXplIHJldHVybiB2YWx1ZQorCW1vdglzYXZlZF9pbjI9aW4yCS8vIHNhdmUgbGVuCiAJOzsKIAlhZGQJZHN0MD0wLGluMAogCWFkZAlkc3QxPTEsaW4wCS8vIGRlc3Qgb2RkIGluZGV4CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggZWM5ZWViOC4uYjZiY2M5ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtNTE5LDYgKzUxOSw2OCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF92YWxpZF9wZm5fZm9yX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBpKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MsIGhvbGVfbmV4dF9wZm47CisJdW5zaWduZWQgbG9uZyBzdG9wX2FkZHJlc3M7CisKKwllbmRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSAmdm1lbV9tYXBbcGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgaV07CisJZW5kX2FkZHJlc3MgPSBQQUdFX0FMSUdOKGVuZF9hZGRyZXNzKTsKKworCXN0b3BfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSAmdm1lbV9tYXBbCisJCXBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXNdOworCisJZG8geworCQlwZ2RfdCAqcGdkOworCQlwdWRfdCAqcHVkOworCQlwbWRfdCAqcG1kOworCQlwdGVfdCAqcHRlOworCisJCXBnZCA9IHBnZF9vZmZzZXRfayhlbmRfYWRkcmVzcyk7CisJCWlmIChwZ2Rfbm9uZSgqcGdkKSkgeworCQkJZW5kX2FkZHJlc3MgKz0gUEdESVJfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHVkID0gcHVkX29mZnNldChwZ2QsIGVuZF9hZGRyZXNzKTsKKwkJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCQllbmRfYWRkcmVzcyArPSBQVURfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcG1kID0gcG1kX29mZnNldChwdWQsIGVuZF9hZGRyZXNzKTsKKwkJaWYgKHBtZF9ub25lKCpwbWQpKSB7CisJCQllbmRfYWRkcmVzcyArPSBQTURfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBlbmRfYWRkcmVzcyk7CityZXRyeV9wdGU6CisJCWlmIChwdGVfbm9uZSgqcHRlKSkgeworCQkJZW5kX2FkZHJlc3MgKz0gUEFHRV9TSVpFOworCQkJcHRlKys7CisJCQlpZiAoKGVuZF9hZGRyZXNzIDwgc3RvcF9hZGRyZXNzKSAmJgorCQkJICAgIChlbmRfYWRkcmVzcyAhPSBBTElHTihlbmRfYWRkcmVzcywgMVVMIDw8IFBNRF9TSElGVCkpKQorCQkJCWdvdG8gcmV0cnlfcHRlOworCQkJY29udGludWU7CisJCX0KKwkJLyogRm91bmQgbmV4dCB2YWxpZCB2bWVtX21hcCBwYWdlICovCisJCWJyZWFrOworCX0gd2hpbGUgKGVuZF9hZGRyZXNzIDwgc3RvcF9hZGRyZXNzKTsKKworCWVuZF9hZGRyZXNzID0gbWluKGVuZF9hZGRyZXNzLCBzdG9wX2FkZHJlc3MpOworCWVuZF9hZGRyZXNzID0gZW5kX2FkZHJlc3MgLSAodW5zaWduZWQgbG9uZykgdm1lbV9tYXAgKyBzaXplb2Yoc3RydWN0IHBhZ2UpIC0gMTsKKwlob2xlX25leHRfcGZuID0gZW5kX2FkZHJlc3MgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOworCXJldHVybiBob2xlX25leHRfcGZuIC0gcGdkYXQtPm5vZGVfc3RhcnRfcGZuOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF92YWxpZF9wZm5fZm9yX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBpKQoreworCXJldHVybiBpICsgMTsKK30KKyNlbmRpZgorCiAvKioKICAqIHNob3dfbWVtIC0gZ2l2ZSBzaG9ydCBzdW1tYXJ5IG9mIG1lbW9yeSBzdGF0cwogICoKQEAgLTU0Nyw4ICs2MDksMTAgQEAKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJaWYgKHBmbl92YWxpZChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpKSkKIAkJCQlwYWdlID0gcGZuX3RvX3BhZ2UocGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgaSk7Ci0JCQllbHNlCisJCQllbHNlIHsKKwkJCQlpID0gZmluZF9uZXh0X3ZhbGlkX3Bmbl9mb3JfcGdkYXQocGdkYXQsIGkpIC0gMTsKIAkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJcmVzZXJ2ZWQrKzsKIAkJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IGFmN2ViMDguLmQ5OGVjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC02MCw2ICs2MCw5IEBACiAJc3RydWN0IHNpZ2luZm8gc2k7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCisJLyogbW1hcF9zZW0gaXMgcGVyZm9ybWFuY2UgY3JpdGljYWwuLi4uICovCisJcHJlZmV0Y2h3KCZtbS0+bW1hcF9zZW0pOworCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQgb3IgaGF2ZSBubyB1c2VyIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0Li4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDliYTMyYjIuLmFiODI5YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKLQogLyoKICAqIExvdy1sZXZlbCBTQUwtYmFzZWQgUENJIGNvbmZpZ3VyYXRpb24gYWNjZXNzIGZ1bmN0aW9ucy4gTm90ZSB0aGF0IFNBTAogICogY2FsbHMgYXJlIGFscmVhZHkgc2VyaWFsaXplZCAodmlhIHNhbF9sb2NrKSwgc28gd2UgZG9uJ3QgbmVlZCBhbm90aGVyCkBAIC03MDcsNyArNzA2LDcgQEAKICAqCiAgKiBTaW1wbHkgd3JpdGVzIEBzaXplIGJ5dGVzIG9mIEB2YWwgdG8gQHBvcnQuCiAgKi8KLWludCBpYTY0X3BjaV9sZWdhY3lfd3JpdGUoc3RydWN0IHBjaV9kZXYgKmJ1cywgdTE2IHBvcnQsIHUzMiB2YWwsIHU4IHNpemUpCitpbnQgaWE2NF9wY2lfbGVnYWN5X3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHUxNiBwb3J0LCB1MzIgdmFsLCB1OCBzaXplKQogewogCWludCByZXQgPSBzaXplOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCmluZGV4IGQ5MTdhZmEuLjczOWM5NDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCkBAIC0yODQsNiArMjg0LDggQEAKIAkvKiBmaW5kIG5lYXJlc3Qgbm9kZSB3aXRoIGNwdXMgYW5kIG5lYXJlc3QgbWVtb3J5ICovCiAJZm9yIChyb3V0ZXI9TlVMTCwgaj0wOyBqIDwgb3AtPnBvcnRzOyBqKyspIHsKIAkJZGVzdCA9IHNuX2h3cGVyZl9maW5kb2JqX2lkKG9iamJ1Ziwgbm9iaiwgcHRkYXRhW2pdLmNvbm5faWQpOworCQlpZiAoZGVzdCAmJiBTTl9IV1BFUkZfSVNfUk9VVEVSKGRlc3QpKQorCQkJcm91dGVyID0gZGVzdDsKIAkJaWYgKCFkZXN0IHx8IFNOX0hXUEVSRl9GT1JFSUdOKGRlc3QpIHx8CiAJCSAgICAhU05fSFdQRVJGX0lTX05PREUoZGVzdCkgfHwgU05fSFdQRVJGX0lTX0lPTk9ERShkZXN0KSkgewogCQkJY29udGludWU7CkBAIC0yOTksOCArMzAxLDYgQEAKIAkJCQkqbmVhcl9tZW1fbm9kZSA9IGM7CiAJCQlmb3VuZF9tZW0rKzsKIAkJfQotCQlpZiAoU05fSFdQRVJGX0lTX1JPVVRFUihkZXN0KSkKLQkJCXJvdXRlciA9IGRlc3Q7CiAJfQogCiAJaWYgKHJvdXRlciAmJiAoIWZvdW5kX2NwdSB8fCAhZm91bmRfbWVtKSkgewpAQCAtNDkzLDcgKzQ5Myw3IEBACiAJCSAqIG51bWFsaW5rIHBvcnRzCiAJCSAqLwogCQlzeiA9IG9iai0+cG9ydHMgKiBzaXplb2Yoc3RydWN0IHNuX2h3cGVyZl9wb3J0X2luZm8pOwotCQlpZiAoKHB0ZGF0YSA9IHZtYWxsb2Moc3opKSA9PSBOVUxMKQorCQlpZiAoKHB0ZGF0YSA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWUgPSBpYTY0X3NuX2h3cGVyZl9vcChzbl9od3BlcmZfbWFzdGVyX25hc2lkLAogCQkJCSAgICAgIFNOX0hXUEVSRl9FTlVNX1BPUlRTLCBvYmotPmlkLCBzeiwKQEAgLTU0MSw3ICs1NDEsNyBAQAogCQkJCShTTl9IV1BFUkZfSVNfTkwzUk9VVEVSKG9iaikgfHwKIAkJCQlTTl9IV1BFUkZfSVNfTkwzUk9VVEVSKHApKSA/ICAiTExQMyIgOiAiTExQNCIpOwogCQl9Ci0JCXZmcmVlKHB0ZGF0YSk7CisJCWtmcmVlKHB0ZGF0YSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKaW5kZXggZDBhYmRkZC4uODI1NWE5YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwpAQCAtMTgzMSw3ICsxODMxLDcgQEAKIHsKIAlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOwogCWVudW0geHBjX3JldHZhbCByZXQgPSB4cGNVbmtub3duUmVhc29uOwotCXN0cnVjdCB4cGNfbXNnICptc2c7CisJc3RydWN0IHhwY19tc2cgKm1zZyA9IE5VTEw7CiAKIAogCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKaW5kZXggOTQyMTE0Mi4uMmE4OWNmYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKQEAgLTEzNiw5ICsxMzYsNyBAQAogCQl9CiAKIAkJaWYgKEwxX0NBQ0hFX0FMSUdOKGxlbikgPiBidWZfbGVuKSB7Ci0JCQlpZiAoYnVmX2Jhc2UgIT0gTlVMTCkgewotCQkJCWtmcmVlKGJ1Zl9iYXNlKTsKLQkJCX0KKwkJCWtmcmVlKGJ1Zl9iYXNlKTsKIAkJCWJ1Zl9sZW4gPSBMMV9DQUNIRV9BTElHTihsZW4pOwogCQkJYnVmID0gKHU2NCkgeHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoYnVmX2xlbiwKIAkJCQkJCQlHRlBfS0VSTkVMLCAmYnVmX2Jhc2UpOwpAQCAtMTU5LDkgKzE1Nyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoYnVmX2Jhc2UgIT0gTlVMTCkgewotCQlrZnJlZShidWZfYmFzZSk7Ci0JfQorCWtmcmVlKGJ1Zl9iYXNlKTsKIAogCWlmIChzdGF0dXMgIT0gU0FMUkVUX09LKSB7CiAJCXJwX3BhID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwppbmRleCBmYTA3M2NjLi44MzMyOTU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCkBAIC02ODIsOSArNjgyLDYgQEAKIAlpbnQgYXRlX2luZGV4LCBsYXN0X2F0ZSwgcHM7CiAJc3RydWN0IHRpb2NlICpjZV9tbXI7CiAKLQlpZiAoIVRJT0NFX00zMl9BRERSKGJhc2UpKQotCQlyZXR1cm47Ci0KIAljZV9tbXIgPSAoc3RydWN0IHRpb2NlICopY2Vfa2Vybi0+Y2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZTsKIAlwcyA9IGNlX2tlcm4tPmNlX2F0ZTMyNDBfcGFnZXNpemU7CiAJYXRlX2luZGV4ID0gQVRFX1BBR0UoYmFzZSwgcHMpOwpAQCAtNjkzLDYgKzY5MCw5IEBACiAJaWYgKGF0ZV9pbmRleCA8IDY0KQogCQlhdGVfaW5kZXggPSA2NDsKIAorCWlmIChsYXN0X2F0ZSA+PSBUSU9DRV9OVU1fTTMyNDBfQVRFUykKKwkJbGFzdF9hdGUgPSBUSU9DRV9OVU1fTTMyNDBfQVRFUyAtIDE7CisKIAl3aGlsZSAoYXRlX2luZGV4IDw9IGxhc3RfYXRlKSB7CiAJCXU2NCBhdGU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggMDVjODY0Yy4uNDFmZDQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTI4NSw2ICsyODUsMTEgQEAKIAlkZXBlbmRzIG9uIFNNUCAmJiBCUk9LRU4KIAlkZWZhdWx0IG4KIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiMSIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogIyB0dXJuaW5nIHRoaXMgb24gd2FzdGVzIGEgYnVuY2ggb2Ygc3BhY2UuCiAjIFN1bW1pdCBuZWVkcyBpdCBvbmx5IHdoZW4gTlVNQSBpcyBvbgogY29uZmlnIEJPT1RfSU9SRU1BUApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDM4NzFiNjUuLjkyMGJiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFN0YWNrIGxheW91dCBpbiAncmV0X2Zyb21fc3lzdGVtX2NhbGwnOgogICogCXB0cmFjZSBuZWVkcyB0byBoYXZlIGFsbCByZWdzIG9uIHRoZSBzdGFjay4KICAqCWlmIHRoZSBvcmRlciBoZXJlIGlzIGNoYW5nZWQsIGl0IG5lZWRzIHRvIGJlCi0gKgl1cGRhdGVkIGluIGZvcmsuYzpjb3B5X3Byb2Nlc3MsIHNpZ25hbC5jOmRvX3NpZ25hbCwKKyAqCXVwZGF0ZWQgaW4gZm9yay5jOmNvcHlfdGhyZWFkLCBzaWduYWwuYzpkb19zaWduYWwsCiAgKglwdHJhY2UuYyBhbmQgcHRyYWNlLmgKICAqCiAgKiBNMzJSeC9NMzJSMgkJCQlNMzJSCkBAIC00MSwxOCArNDEsMTcgQEAKICAqICAgICAgIEAoMHgzOCxzcCkgLSBzeXNjYWxsX25yCWRpdHRvCiAgKiAgICAgICBAKDB4M2Msc3ApIC0gYWNjMGgJCUAoMHgzYyxzcCkgLSBhY2NoCiAgKiAgICAgICBAKDB4NDAsc3ApIC0gYWNjMGwJCUAoMHg0MCxzcCkgLSBhY2NsCi0gKiAgICAgICBAKDB4NDQsc3ApIC0gYWNjMWgJCUAoMHg0NCxzcCkgLSBwc3cKLSAqICAgICAgIEAoMHg0OCxzcCkgLSBhY2MxbAkJQCgweDQ4LHNwKSAtIGJwYwotICogICAgICAgQCgweDRjLHNwKSAtIHBzdwkJQCgweDRjLHNwKSAtIGJicHN3Ci0gKiAgICAgICBAKDB4NTAsc3ApIC0gYnBjCQlAKDB4NTAsc3ApIC0gYmJwYwotICogICAgICAgQCgweDU0LHNwKSAtIGJicHN3CQlAKDB4NTQsc3ApIC0gc3B1IChjcjMpCi0gKiAgICAgICBAKDB4NTgsc3ApIC0gYmJwYwkJQCgweDU4LHNwKSAtIGZwIChyMTMpCi0gKiAgICAgICBAKDB4NWMsc3ApIC0gc3B1IChjcjMpCQlAKDB4NWMsc3ApIC0gbHIgKHIxNCkKLSAqICAgICAgIEAoMHg2MCxzcCkgLSBmcCAocjEzKQkJQCgweDYwLHNwKSAtIHNwaSAoY3IxMikKLSAqICAgICAgIEAoMHg2NCxzcCkgLSBsciAocjE0KQkJQCgweDY0LHNwKSAtIG9yaWdfcjAKLSAqICAgICAgIEAoMHg2OCxzcCkgLSBzcGkgKGNyMikKLSAqICAgICAgIEAoMHg2YyxzcCkgLSBvcmlnX3IwCi0gKgorICogICAgICAgQCgweDQ0LHNwKSAtIGFjYzFoCQlAKDB4NDQsc3ApIC0gZHVtbXlfYWNjMWgKKyAqICAgICAgIEAoMHg0OCxzcCkgLSBhY2MxbAkJQCgweDQ4LHNwKSAtIGR1bW15X2FjYzFsCisgKiAgICAgICBAKDB4NGMsc3ApIC0gcHN3CQlkaXR0bworICogICAgICAgQCgweDUwLHNwKSAtIGJwYwkJZGl0dG8KKyAqICAgICAgIEAoMHg1NCxzcCkgLSBiYnBzdwkJZGl0dG8KKyAqICAgICAgIEAoMHg1OCxzcCkgLSBiYnBjCQlkaXR0bworICogICAgICAgQCgweDVjLHNwKSAtIHNwdSAoY3IzKQkJZGl0dG8KKyAqICAgICAgIEAoMHg2MCxzcCkgLSBmcCAocjEzKQkJZGl0dG8KKyAqICAgICAgIEAoMHg2NCxzcCkgLSBsciAocjE0KQkJZGl0dG8KKyAqICAgICAgIEAoMHg2OCxzcCkgLSBzcGkgKGNyMikJCWRpdHRvCisgKiAgICAgICBAKDB4NmMsc3ApIC0gb3JpZ19yMAkJZGl0dG8KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xMDIsNiArMTAxLDEyIEBACiAjZGVmaW5lIEFDQzBMKHJlZykJCUAoMHg0MCxyZWcpCiAjZGVmaW5lIEFDQzFIKHJlZykJCUAoMHg0NCxyZWcpCiAjZGVmaW5lIEFDQzFMKHJlZykJCUAoMHg0OCxyZWcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQorI2RlZmluZSBBQ0NIKHJlZykJCUAoMHgzQyxyZWcpCisjZGVmaW5lIEFDQ0wocmVnKQkJQCgweDQwLHJlZykKKyNlbHNlCisjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgorI2VuZGlmCiAjZGVmaW5lIFBTVyhyZWcpCQlAKDB4NEMscmVnKQogI2RlZmluZSBCUEMocmVnKQkJQCgweDUwLHJlZykKICNkZWZpbmUgQkJQU1cocmVnKQkJQCgweDU0LHJlZykKQEAgLTExMSwyMSArMTE2LDYgQEAKICNkZWZpbmUgTFIocmVnKQkJCUAoMHg2NCxyZWcpCiAjZGVmaW5lIFNQKHJlZykJCQlAKDB4NjgscmVnKQogI2RlZmluZSBPUklHX1IwKHJlZykJCUAoMHg2QyxyZWcpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQotI2RlZmluZSBBQ0NIKHJlZykJCUAoMHgzQyxyZWcpCi0jZGVmaW5lIEFDQ0wocmVnKQkJQCgweDQwLHJlZykKLSNkZWZpbmUgUFNXKHJlZykJCUAoMHg0NCxyZWcpCi0jZGVmaW5lIEJQQyhyZWcpCQlAKDB4NDgscmVnKQotI2RlZmluZSBCQlBTVyhyZWcpCQlAKDB4NEMscmVnKQotI2RlZmluZSBCQlBDKHJlZykJCUAoMHg1MCxyZWcpCi0jZGVmaW5lIFNQVShyZWcpCQlAKDB4NTQscmVnKQotI2RlZmluZSBGUChyZWcpCQkJQCgweDU4LHJlZykgIC8qIEZQID0gUjEzICovCi0jZGVmaW5lIExSKHJlZykJCQlAKDB4NUMscmVnKQotI2RlZmluZSBTUChyZWcpCQkJQCgweDYwLHJlZykKLSNkZWZpbmUgT1JJR19SMChyZWcpCQlAKDB4NjQscmVnKQotI2Vsc2UKLSNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCi0jZW5kaWYKIAogQ0ZfTUFTSwkJPSAweDAwMDAwMDAxCiBURl9NQVNLCQk9IDB4MDAwMDAxMDAKQEAgLTE0Miw3ICsxMzIsNyBAQAogI2VuZGlmCiAKIEVOVFJZKHJldF9mcm9tX2ZvcmspCi0JbGQJcjAsIEBzcCsKKwlwb3AJcjAKIAlibAlzY2hlZHVsZV90YWlsCiAJR0VUX1RIUkVBRF9JTkZPKHI4KQogCWJyYQlzeXNjYWxsX2V4aXQKQEAgLTIzMSw3ICsyMjEsNyBAQAogCVJFU1RPUkVfQUxMCiAKIAkjIHBlcmZvcm0gd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgaW1tZWRpYXRlbHkgYmVmb3JlIHJlc3VtcHRpb24KLQkjIHI5IDogZnJhZ3MKKwkjIHI5IDogZmxhZ3MKIAlBTElHTgogd29ya19wZW5kaW5nOgogCWFuZDMJcjQsIHI5LCAjX1RJRl9ORUVEX1JFU0NIRUQKQEAgLTMyMCw3ICszMTAsNyBAQAogOyAgICBHRVRfSUNVX1NUQVRVUzsKIAlzZXRoCXIwLCAjc2hpZ2goTTMyUl9JQ1VfSVNUU19BRERSKQogCWxkCXIwLCBAKGxvdyhNMzJSX0lDVV9JU1RTX0FERFIpLHIwKQotCXN0CXIwLCBALXNwCisJcHVzaAlyMAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAkvKgogCSAqIElmIElSUSA9PSAwICAgICAgLS0+IE5vdGhpbmcgdG8gZG8sICBOb3Qgd3JpdGUgSU1BU0sKQEAgLTU1Nyw3ICs1NDcsNyBAQAogI2VuZGlmICAvKiBDT05GSUdfUExBVF9NMzIxMDRVVCAqLwogCWJsCWRvX0lSUQogI2VuZGlmICAvKiBDT05GSUdfU01QICovCi0JbGQJcjE0LCBAc3ArCisJcG9wCXIxNAogCXNldGgJcjAsICNzaGlnaChNMzJSX0lDVV9JTUFTS19BRERSKQogCXN0CXIxNCwgQChsb3coTTMyUl9JQ1VfSU1BU0tfQUREUikscjApCiAjZWxzZQpAQCAtMTAxNSw0ICsxMDA1LDMgQEAKIAkubG9uZyBzeXNfd2FpdGlkCiAKIHN5c2NhbGxfdGFibGVfc2l6ZT0oLi1zeXNfY2FsbF90YWJsZSkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwppbmRleCBiZThiNzExLi5jNTAzMzBmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYworKysgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwpAQCAtMjMsOSArMjMsNiBAQAogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwotRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKLUVYUE9SVF9TWU1CT0woZGlzYWJsZV9pcnEpOwotRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycV9ub3N5bmMpOwogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIEVYUE9SVF9TWU1CT0woX19kb3duKTsKIEVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwpAQCAtMzgsMTMgKzM1LDYgQEAKIEVYUE9SVF9TWU1CT0woX19kZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKIAotRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzEpOwotRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzIpOwotRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzQpOwotCi1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwotCiBFWFBPUlRfU1lNQk9MKHN0cm5jcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3VzZXIpOwpAQCAtNTksMTEgKzQ5LDggQEAKIEVYUE9SVF9TWU1CT0woZGNhY2hlX2R1bW15KTsKICNlbmRpZgogRVhQT1JUX1NZTUJPTChjcHVfZGF0YSk7Ci1FWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKLUVYUE9SVF9TWU1CT0woY3B1X2NhbGxvdXRfbWFwKTsKIAogLyogR2xvYmFsIFNNUCBzdHVmZiAqLwotRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9pcnEpOwogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7CiAKIC8qIFRMQiBmbHVzaGluZyAqLwpAQCAtODMsMjcgKzcwLDExIEBACiBFWFBPUlRfU1lNQk9MKF9fbXVsZGkzKTsKIAogLyogbWVtb3J5IGFuZCBzdHJpbmcgb3BlcmF0aW9ucyAqLwotRVhQT1JUX1NZTUJPTChtZW1jaHIpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwotLyogRVhQT1JUX1NZTUJPTChtZW1jcHlfZnJvbWlvKTsgLy8gbm90IGltcGxlbWVudCB5ZXQgKi8KLS8qIEVYUE9SVF9TWU1CT0wobWVtY3B5X3RvaW8pOyAvLyBub3QgaW1wbGVtZW50IHlldCAqLwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwotLyogRVhQT1JUX1NZTUJPTChtZW1zZXRfaW8pOyAvLyBub3QgaW1wbGVtZW50IHlldCAqLwotRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0wobWVtY21wKTsKLUVYUE9SVF9TWU1CT0wobWVtc2Nhbik7CiBFWFBPUlRfU1lNQk9MKGNvcHlfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3BhZ2UpOwotCi1FWFBPUlRfU1lNQk9MKHN0cmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNweSk7CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwotRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jcHkpOwogCiBFWFBPUlRfU1lNQk9MKF9pbmIpOwogRVhQT1JUX1NZTUJPTChfaW53KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWRmYzdlYS4uMDY1ZjVlNyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExNiw2ICsxMTYsMTAgQEAKIAogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqX191bnVzZWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTMpCisJb3V0dygxLCAodW5zaWduZWQgbG9uZylQTERfUkVCT09UKTsKKyNlbmRpZgorCiAJcHJpbnRrKCJQbGVhc2UgcHVzaCByZXNldCBidXR0b24hXG4iKTsKIAl3aGlsZSAoMSkKIAkJY3B1X3JlbGF4KCk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwLmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKaW5kZXggMGQ3ODk0Mi4uM2NkM2MyOSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXAuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMTksOCArMjIwLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNldHVwX21lbW9yeSh2b2lkKTsKICNlbmRpZgkvKiBDT05GSUdfRElTQ09OVElHTUVNICovCiAKLSNkZWZpbmUgTTMyUl9QQ0NfUENBVENSCTB4MDBlZjcwMTQJLyogd2lsbCBtb3ZlIHRvIG0zMnIuaCAqLwotCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJUk9PVF9ERVYgPSBvbGRfZGVjb2RlX2RldihPUklHX1JPT1RfREVWKTsKQEAgLTI2OSwxNSArMjY4LDE0IEBACiAJcGFnaW5nX2luaXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcHUgY3B1W05SX0NQVVNdOworc3RhdGljIHN0cnVjdCBjcHUgY3B1X2RldmljZXNbTlJfQ1BVU107CiAKIHN0YXRpYyBpbnQgX19pbml0IHRvcG9sb2d5X2luaXQodm9pZCkKIHsKLQlpbnQgY3B1X2lkOworCWludCBpOwogCi0JZm9yIChjcHVfaWQgPSAwOyBjcHVfaWQgPCBOUl9DUFVTOyBjcHVfaWQrKykKLQkJaWYgKGNwdV9wb3NzaWJsZShjcHVfaWQpKQotCQkJcmVnaXN0ZXJfY3B1KCZjcHVbY3B1X2lkXSwgY3B1X2lkLCBOVUxMKTsKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShpKQorCQlyZWdpc3Rlcl9jcHUoJmNwdV9kZXZpY2VzW2ldLCBpLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKaW5kZXggY2IzMzA5Ny4uNjQ5OGVlNyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCkBAIC0xMTgsNiArMTE4LDggQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCiAJQ09QWShhY2NoKTsKIAlDT1BZKGFjY2wpOworCUNPUFkoZHVtbXlfYWNjMWgpOworCUNPUFkoZHVtbXlfYWNjMWwpOwogI2Vsc2UKICNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCiAjZW5kaWYKQEAgLTIwMyw2ICsyMDUsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKIAlDT1BZKGFjY2gpOwogCUNPUFkoYWNjbCk7CisJQ09QWShkdW1teV9hY2MxaCk7CisJQ09QWShkdW1teV9hY2MxbCk7CiAjZWxzZQogI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCBkN2VjMTZlLi44NDBiNDM0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtMzksOCArMzksMTAgQEAKICAqCQlNYXJ0aW4gSi4gQmxpZ2gJOiAJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGktcXVhZCBzeXN0ZW1zCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC03MiwxMSArNzQsMTUgQEAKIAogLyogQml0bWFzayBvZiBjdXJyZW50bHkgb25saW5lIENQVXMgKi8KIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKK0VYUE9SVF9TWU1CT0woY3B1X29ubGluZV9tYXApOwogCiBjcHVtYXNrX3QgY3B1X2Jvb3RvdXRfbWFwOwogY3B1bWFza190IGNwdV9ib290aW5fbWFwOwotY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CitjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOworRVhQT1JUX1NZTUJPTChjcHVfY2FsbG91dF9tYXApOworY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXAgPSBDUFVfTUFTS19BTEw7CitFWFBPUlRfU1lNQk9MKGNwdV9wb3NzaWJsZV9tYXApOwogCiAvKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgY3B1aW5mb19tMzJyIGNwdV9kYXRhW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CkBAIC0xMTAsNyArMTE2LDYgQEAKIAogdm9pZCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKTsKIHZvaWQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgc21wX3R1bmVfc2NoZWR1bGluZyh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfaXBpX2xvY2sodm9pZCk7CiBzdGF0aWMgdm9pZCBkb19ib290X2NwdShpbnQpOwogaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCk7CkBAIC0xNzcsNiArMTgyLDkgQEAKIAl9CiAJZm9yIChwaHlzX2lkID0gMCA7IHBoeXNfaWQgPCBucl9jcHUgOyBwaHlzX2lkKyspCiAJCXBoeXNpZF9zZXQocGh5c19pZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwljcHVfcHJlc2VudF9tYXAgPSBjcHVfcG9zc2libGVfbWFwOworI2VuZGlmCiAKIAlzaG93X21wX2luZm8obnJfY3B1KTsKIApAQCAtMTg2LDcgKzE5NCw2IEBACiAJICogU2V0dXAgYm9vdCBDUFUgaW5mb3JtYXRpb24KIAkgKi8KIAlzbXBfc3RvcmVfY3B1X2luZm8oMCk7IC8qIEZpbmFsIGZ1bGwgdmVyc2lvbiBvZiB0aGUgZGF0YSAqLwotCXNtcF90dW5lX3NjaGVkdWxpbmcoKTsKIAogCS8qCiAJICogSWYgU01QIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlbiByZWFsbHkgZGlzYWJsZSBpdCEKQEAgLTIzMCwxMSArMjM3LDYgQEAKIAlEcHJpbnRrKCJCb290IGRvbmUuXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCkKLXsKLQkvKiBOb3RoaW5nIHRvIGRvLiAqLwotfQotCiAvKgogICogaW5pdF9pcGlfbG9jayA6IEluaXRpYWxpemUgSVBJIGxvY2tzLgogICovCkBAIC02MjksNCArNjMxLDMgQEAKIAlwaHlzaWRfMl9jcHVbcGh5c19pZF0gPSAtMTsKIAljcHVfMl9waHlzaWRbY3B1X2lkXSA9IC0xOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL01ha2VmaWxlIGIvYXJjaC9tMzJyL2xpYi9NYWtlZmlsZQppbmRleCBlNjMyZDEwLi5kMTZiNGU0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvbTMyci9saWIvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBNMzJSLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteSAgOj0gY2hlY2tzdW0ubyBhc2h4ZGkzLm8gbWVtc2V0Lm8gbWVtY3B5Lm8gZ2V0dXNlci5vIFwKLQkgIHB1dHVzZXIubyBkZWxheS5vIHN0cmxlbi5vIHVzZXJjb3B5Lm8gY3N1bV9wYXJ0aWFsX2NvcHkubworbGliLXkgIDo9IGNoZWNrc3VtLm8gYXNoeGRpMy5vIG1lbXNldC5vIG1lbWNweS5vIFwKKwkgIGRlbGF5Lm8gc3RybGVuLm8gdXNlcmNvcHkubyBjc3VtX3BhcnRpYWxfY29weS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvZ2V0dXNlci5TIGIvYXJjaC9tMzJyL2xpYi9nZXR1c2VyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YTBkYjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tMzJyL2xpYi9nZXR1c2VyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogX19nZXRfdXNlciBmdW5jdGlvbnMuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxIEhpcm9rYXp1IFRha2F0YQotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgbm9uLXN0YW5kYXJkIGNhbGwgaW50ZXJmYWNlCi0gKiB0byBtYWtlIHRoZW0gbW9yZSBlZmZpY2llbnQsIGVzcGVjaWFsbHkgYXMgdGhleQotICogcmV0dXJuIGFuIGVycm9yIHZhbHVlIGluIGFkZGl0aW9uIHRvIHRoZSAicmVhbCIKLSAqIHJldHVybiB2YWx1ZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLS8qCi0gKiBfX2dldF91c2VyX1gKLSAqCi0gKiBJbnB1dHM6CXIwIGNvbnRhaW5zIHRoZSBhZGRyZXNzCi0gKgotICogT3V0cHV0czoJcjAgaXMgZXJyb3IgY29kZSAoMCBvciAtRUZBVUxUKQotICoJCXIxIGNvbnRhaW5zIHplcm8tZXh0ZW5kZWQgdmFsdWUKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBtb2RpZnkgYW55IG90aGVyIHJlZ2lzdGVycywKLSAqIGFzIHRoZXkgZ2V0IGNhbGxlZCBmcm9tIHdpdGhpbiBpbmxpbmUgYXNzZW1ibHkuCi0gKi8KLQotI2lmZGVmIENPTkZJR19JU0FfRFVBTF9JU1NVRQotCi0JLnRleHQKLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl8xCi1fX2dldF91c2VyXzE6Ci0xOglsZHViCXIxLCBAcjAJCSAgICB8fAlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMgotX19nZXRfdXNlcl8yOgotMjoJbGR1aAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzQKLV9fZ2V0X3VzZXJfNDoKLTM6CWxkCXIxLCBAcjAJCSAgICB8fAlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfZ2V0X3VzZXI6Ci0JbGRpCXIxLCAjMAkJICAgIHx8CWxkaQlyMCwgIy0xNAotCWptcAlyMTQKLQotI2Vsc2UgLyogbm90IENPTkZJR19JU0FfRFVBTF9JU1NVRSAqLwotCi0JLnRleHQKLQkuYmFsaWduIDQKLQkuZ2xvYmwgX19nZXRfdXNlcl8xCi1fX2dldF91c2VyXzE6Ci0xOglsZHViCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fZ2V0X3VzZXJfMgotX19nZXRfdXNlcl8yOgotMjoJbGR1aAlyMSwgQHIwCi0JbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX2dldF91c2VyXzQKLV9fZ2V0X3VzZXJfNDoKLTM6CWxkCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfZ2V0X3VzZXI6Ci0JbGRpCXIxLCAjMAotCWxkaQlyMCwgIy0xNAotCWptcAlyMTQKLQotI2VuZGlmIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KLQotLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkubG9uZyAxYixiYWRfZ2V0X3VzZXIKLQkubG9uZyAyYixiYWRfZ2V0X3VzZXIKLQkubG9uZyAzYixiYWRfZ2V0X3VzZXIKLS5wcmV2aW91cwotCi0JLmVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9wdXR1c2VyLlMgYi9hcmNoL20zMnIvbGliL3B1dHVzZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4MTU0Yy4uMDAwMDAwMAotLS0gYS9hcmNoL20zMnIvbGliL3B1dHVzZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBfX3B1dF91c2VyIGZ1bmN0aW9ucy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTggTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMjAwMSBIaXJva2F6dSBUYWthdGEKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsIGludGVyZmFjZQotICogdG8gbWFrZSB0aGVtIG1vcmUgZWZmaWNpZW50LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotLyoKLSAqIF9fcHV0X3VzZXJfWAotICoKLSAqIElucHV0czoJcjAgY29udGFpbnMgdGhlIGFkZHJlc3MKLSAqCQlyMSBjb250YWlucyB0aGUgdmFsdWUKLSAqCi0gKiBPdXRwdXRzOglyMCBpcyBlcnJvciBjb2RlICgwIG9yIC1FRkFVTFQpCi0gKgkJcjEgaXMgY29ycnVwdGVkICh3aWxsIGNvbnRhaW4gImN1cnJlbnRfdGFzayIpLgotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IG1vZGlmeSBhbnkgb3RoZXIgcmVnaXN0ZXJzLAotICogYXMgdGhleSBnZXQgY2FsbGVkIGZyb20gd2l0aGluIGlubGluZSBhc3NlbWJseS4KLSAqLwotCi0jaWZkZWYgQ09ORklHX0lTQV9EVUFMX0lTU1VFCi0KLQkudGV4dAotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzEKLV9fcHV0X3VzZXJfMToKLTE6CXN0YglyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzIKLV9fcHV0X3VzZXJfMjoKLTI6CXN0aAlyMSwgQHIwCQkgICAgfHwJbGRpCXIwLCAjMAotCWptcAlyMTQKLQotCS5iYWxpZ24gNAotCS5nbG9ibCBfX3B1dF91c2VyXzQKLV9fcHV0X3VzZXJfNDoKLTM6CXN0CXIxLCBAcjAJCSAgICB8fAlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi1iYWRfcHV0X3VzZXI6Ci0JbGRpCXIwLCAjLTE0CSAgICB8fAlqbXAJcjE0Ci0KLSNlbHNlIC8qIG5vdCBDT05GSUdfSVNBX0RVQUxfSVNTVUUgKi8KLQotCS50ZXh0Ci0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fcHV0X3VzZXJfMQotX19wdXRfdXNlcl8xOgotMToJc3RiCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fcHV0X3VzZXJfMgotX19wdXRfdXNlcl8yOgotMjoJc3RoCXIxLCBAcjAKLQlsZGkJcjAsICMwCi0Jam1wCXIxNAotCi0JLmJhbGlnbiA0Ci0JLmdsb2JsIF9fcHV0X3VzZXJfNAotX19wdXRfdXNlcl80OgotMzoJc3QJcjEsIEByMAotCWxkaQlyMCwgIzAKLQlqbXAJcjE0Ci0KLWJhZF9wdXRfdXNlcjoKLQlsZGkJcjAsICMtMTQKLQlqbXAJcjE0Ci0KLSNlbmRpZiAvKiBub3QgQ09ORklHX0lTQV9EVUFMX0lTU1VFICovCi0KLS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmxvbmcgMWIsYmFkX3B1dF91c2VyCi0JLmxvbmcgMmIsYmFkX3B1dF91c2VyCi0JLmxvbmcgM2IsYmFkX3B1dF91c2VyCi0ucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggYzMzMTk1MS4uNWI3OTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTU3LDcgKzU3LDYgQEAKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJzdHIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYwppbmRleCBmOWI0ZWExLi40MzIwZDVkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTI2LDcgKzI2LDYgQEAKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiBFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggNTA4MGVhMS4uZThmZjA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAlkZWZhdWx0IFNHSV9JUDIyCiAKIGNvbmZpZyBNSVBTX01UWDEKLQlib29sICJTdXBwb3J0IGZvciA0RyBTeXN0ZW1zIE1UWC0xIGJvYXJkIgorCWJvb2wgIjRHIFN5c3RlbXMgTVRYLTEgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNPQ19BVTE1MDAKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTUlQU19DT0JBTFQKLQlib29sICJTdXBwb3J0IGZvciBDb2JhbHQgU2VydmVyIgorCWJvb2wgIkNvYmFsdCBTZXJ2ZXIiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IEk4MjU5CkBAIC0xMzIsNyArMTMyLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIE1BQ0hfREVDU1RBVElPTgotCWJvb2wgIlN1cHBvcnQgZm9yIERFQ3N0YXRpb25zIgorCWJvb2wgIkRFQ3N0YXRpb25zIgogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBFQVJMWV9QUklOVEsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCSAgb3RoZXJ3aXNlIGNob29zZSBSMzAwMC4KIAogY29uZmlnIE1JUFNfRVY2NDEyMAotCWJvb2wgIlN1cHBvcnQgZm9yIEdhbGlsZW8gRVY2NDEyMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIkdhbGlsZW8gRVY2NDEyMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkgIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1JUFNfRVY5NjEwMAotCWJvb2wgIlN1cHBvcnQgZm9yIEdhbGlsZW8gRVY5NjEwMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIkdhbGlsZW8gRVY5NjEwMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkgIGhlcmUgaWYgeW91IHdpc2ggdG8gYnVpbGQgYSBrZXJuZWwgZm9yIHRoaXMgcGxhdGZvcm0uCiAKIGNvbmZpZyBNSVBTX0lWUgotCWJvb2wgIlN1cHBvcnQgZm9yIEdsb2Jlc3BhbiBJVlIgYm9hcmQiCisJYm9vbCAiR2xvYmVzcGFuIElWUiBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVRFX0JPQVJEX0dFTgpAQCAtMjExLDcgKzIxMSw3IEBACiAJICBidWlsZCBhIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1JUFNfSVRFODE3MgotCWJvb2wgIlN1cHBvcnQgZm9yIElURSA4MTcyRyBib2FyZCIKKwlib29sICJJVEUgODE3MkcgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElURV9CT0FSRF9HRU4KQEAgLTIyOCwxMSArMjI4LDEyIEBACiAJICBhIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1BQ0hfSkFaWgotCWJvb2wgIlN1cHBvcnQgZm9yIHRoZSBKYXp6IGZhbWlseSBvZiBtYWNoaW5lcyIKKwlib29sICJKYXp6IGZhbWlseSBvZiBtYWNoaW5lcyIKIAlzZWxlY3QgQVJDCiAJc2VsZWN0IEFSQzMyCiAJc2VsZWN0IEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQQorCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKIAlzZWxlY3QgU1lTX0hBU19DUFVfUjRYMDAKQEAgLTI0NSw3ICsyNDYsNyBAQAogCSBPbGl2ZXR0aSBNNzAwLTEwIHdvcmtzdGF0aW9ucy4KIAogY29uZmlnIExBU0FUCi0JYm9vbCAiU3VwcG9ydCBmb3IgTEFTQVQgTmV0d29ya3MgcGxhdGZvcm1zIgorCWJvb2wgIkxBU0FUIE5ldHdvcmtzIHBsYXRmb3JtcyIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgTUlQU19HVDY0MTIwCkBAIC0yNTcsNyArMjU4LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIE1JUFNfQVRMQVMKLQlib29sICJTdXBwb3J0IGZvciBNSVBTIEF0bGFzIGJvYXJkIgorCWJvb2wgIk1JUFMgQXRsYXMgYm9hcmQiCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKQEAgLTI4Miw3ICsyODMsNyBAQAogCSAgYm9hcmQuCiAKIGNvbmZpZyBNSVBTX01BTFRBCi0JYm9vbCAiU3VwcG9ydCBmb3IgTUlQUyBNYWx0YSBib2FyZCIKKwlib29sICJNSVBTIE1hbHRhIGJvYXJkIgogCXNlbGVjdCBBUkNIX01BWV9IQVZFX1BDX0ZEQwogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCkBAIC0zMTAsNyArMzExLDcgQEAKIAkgIGJvYXJkLgogCiBjb25maWcgTUlQU19TRUFECi0JYm9vbCAiU3VwcG9ydCBmb3IgTUlQUyBTRUFEIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIk1JUFMgU0VBRCBib2FyZCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVApAQCAtMzI3LDcgKzMyOCw3IEBACiAJICBib2FyZC4KIAogY29uZmlnIE1JUFNfU0lNCi0JYm9vbCAnU3VwcG9ydCBmb3IgTUlQUyBzaW11bGF0b3IgKE1JUFNzaW0pJworCWJvb2wgJ01JUFMgc2ltdWxhdG9yIChNSVBTc2ltKScKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCkBAIC0zNDAsNyArMzQxLDcgQEAKIAkgIGVtdWxhdG9yLgogCiBjb25maWcgTU9NRU5DT19KQUdVQVJfQVRYCi0JYm9vbCAiU3VwcG9ydCBmb3IgTW9tZW50dW0gSmFndWFyIGJvYXJkIgorCWJvb2wgIk1vbWVudHVtIEphZ3VhciBib2FyZCIKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQpAQCAtMzYwLDcgKzM2MSw3IEBACiAJICBNb21lbnR1bSBDb21wdXRlciA8aHR0cDovL3d3dy5tb21lbmNvLmNvbS8+LgogCiBjb25maWcgTU9NRU5DT19PQ0VMT1QKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBPY2Vsb3QgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gT2NlbG90IGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCkBAIC0zNzcsNyArMzc4LDcgQEAKIAkgIE1vbWVudHVtIENvbXB1dGVyIDxodHRwOi8vd3d3Lm1vbWVuY28uY29tLz4uCiAKIGNvbmZpZyBNT01FTkNPX09DRUxPVF8zCi0JYm9vbCAiU3VwcG9ydCBmb3IgTW9tZW50dW0gT2NlbG90LTMgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gT2NlbG90LTMgYm9hcmQiCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKQEAgLTM5Niw3ICszOTcsNyBAQAogCSAgUE1DLVNpZXJyYSBSbTc5MDAwIGNvcmUuCiAKIGNvbmZpZyBNT01FTkNPX09DRUxPVF9DCi0JYm9vbCAiU3VwcG9ydCBmb3IgTW9tZW50dW0gT2NlbG90LUMgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gT2NlbG90LUMgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKQEAgLTQxMyw3ICs0MTQsNyBAQAogCSAgTW9tZW50dW0gQ29tcHV0ZXIgPGh0dHA6Ly93d3cubW9tZW5jby5jb20vPi4KIAogY29uZmlnIE1PTUVOQ09fT0NFTE9UX0cKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBPY2Vsb3QtRyBib2FyZCIKKwlib29sICJNb21lbnR1bSBPY2Vsb3QtRyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQpAQCAtNDMwLDIzICs0MzEsMjMgQEAKIAkgIE1vbWVudHVtIENvbXB1dGVyIDxodHRwOi8vd3d3Lm1vbWVuY28uY29tLz4uCiAKIGNvbmZpZyBNSVBTX1hYUzE1MDAKLQlib29sICJTdXBwb3J0IGZvciBNeUNhYmxlIFhYUzE1MDAgYm9hcmQiCisJYm9vbCAiTXlDYWJsZSBYWFMxNTAwIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgUE5YODU1MF9WMlBDSQotCWJvb2wgIlN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YODU1MCBiYXNlZCBWaXBlcjItUENJIGJvYXJkIgorCWJvb2wgIlBoaWxpcHMgUE5YODU1MCBiYXNlZCBWaXBlcjItUENJIGJvYXJkIgogCXNlbGVjdCBQTlg4NTUwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBQTlg4NTUwX0pCUwotCWJvb2wgIlN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YODU1MCBiYXNlZCBKQlMgYm9hcmQiCisJYm9vbCAiUGhpbGlwcyBQTlg4NTUwIGJhc2VkIEpCUyBib2FyZCIKIAlzZWxlY3QgUE5YODU1MAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgRERCNTA3NAotCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBEREIgVnJjLTUwNzQgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiTkVDIEREQiBWcmMtNTA3NCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBEREI1WFhYX0NPTU1PTgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKQEAgLTQ2NCw3ICs0NjUsNyBAQAogCSAgZXZhbHVhdGlvbiBib2FyZC4KIAogY29uZmlnIEREQjU0NzYKLQlib29sICJTdXBwb3J0IGZvciBORUMgRERCIFZyYy01NDc2IgorCWJvb2wgIk5FQyBEREIgVnJjLTU0NzYiCiAJc2VsZWN0IEREQjVYWFhfQ09NTU9OCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApAQCAtNDg1LDcgKzQ4Niw3IEBACiAJICBJREUgY29udHJvbGxlciwgUFMyIGtleWJvYXJkLCBQUzIgbW91c2UsIGV0Yy4KIAogY29uZmlnIEREQjU0NzcKLQlib29sICJTdXBwb3J0IGZvciBORUMgRERCIFZyYy01NDc3IgorCWJvb2wgIk5FQyBEREIgVnJjLTU0NzciCiAJc2VsZWN0IEREQjVYWFhfQ09NTU9OCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC01MDMsMTMgKzUwNCwxMyBAQAogCSAgZXRoZXIgcG9ydCBVU0IsIEFDOTcsIFBDSSwgZXRjLgogCiBjb25maWcgTUFDSF9WUjQxWFgKLQlib29sICJTdXBwb3J0IGZvciBORUMgVlI0MTAwIHNlcmllcyBiYXNlZCBtYWNoaW5lcyIKKwlib29sICJORUMgVlI0MVhYLWJhc2VkIG1hY2hpbmVzIgogCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAogCiBjb25maWcgUE1DX1lPU0VNSVRFCi0JYm9vbCAiU3VwcG9ydCBmb3IgUE1DLVNpZXJyYSBZb3NlbWl0ZSBldmFsIGJvYXJkIgorCWJvb2wgIlBNQy1TaWVycmEgWW9zZW1pdGUgZXZhbCBib2FyZCIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQpAQCAtNTI2LDEwICs1MjcsMTEgQEAKIAkgIG1hbnVmYWN0dXJlZCBieSBQTUMtU2llcnJhLgogCiBjb25maWcgUUVNVQotCWJvb2wgIlN1cHBvcnQgZm9yIFFlbXUiCisJYm9vbCAiUWVtdSIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQQogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVAorCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKIAlzZWxlY3QgU1dBUF9JT19TUEFDRQpAQCAtNTQ1LDcgKzU0Nyw3IEBACiAJICBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5saW51eC1taXBzLm9yZy93aWtpL1FlbXUuCiAKIGNvbmZpZyBTR0lfSVAyMgotCWJvb2wgIlN1cHBvcnQgZm9yIFNHSSBJUDIyIChJbmR5L0luZGlnbzIpIgorCWJvb2wgIlNHSSBJUDIyIChJbmR5L0luZGlnbzIpIgogCXNlbGVjdCBBUkMKIAlzZWxlY3QgQVJDMzIKIAlzZWxlY3QgQk9PVF9FTEYzMgpAQCAtNTY1LDcgKzU2Nyw3IEBACiAJICB0aGF0IHJ1bnMgb24gdGhlc2UsIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBTR0lfSVAyNwotCWJvb2wgIlN1cHBvcnQgZm9yIFNHSSBJUDI3IChPcmlnaW4yMDAvMjAwMCkiCisJYm9vbCAiU0dJIElQMjcgKE9yaWdpbjIwMC8yMDAwKSIKIAlzZWxlY3QgQVJDCiAJc2VsZWN0IEFSQzY0CiAJc2VsZWN0IEJPT1RfRUxGNjQKQEAgLTU4MSw3ICs1ODMsNyBAQAogCSAgaGVyZS4KIAogY29uZmlnIFNHSV9JUDMyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0dJIElQMzIgKE8yKSAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJTR0kgSVAzMiAoTzIpIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgpAQCAtNjAyLDcgKzYwNCw3IEBACiAJICBJZiB5b3Ugd2FudCB0aGlzIGtlcm5lbCB0byBydW4gb24gU0dJIE8yIHdvcmtzdGF0aW9uLCBzYXkgWSBoZXJlLgogCiBjb25maWcgU0lCWVRFX0JJR1NVUgotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTQ4MEItQmlnU3VyIgorCWJvb2wgIlNpYnl0ZSBCQ005MTQ4MEItQmlnU3VyIgogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVAogCXNlbGVjdCBQQ0lfRE9NQUlOUwpAQCAtNjEzLDcgKzYxNSw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfU1dBUk0KLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBBLVNXQVJNIgorCWJvb2wgIlNpYnl0ZSBCQ005MTI1MEEtU1dBUk0iCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IFNJQllURV9TQjEyNTAKQEAgLTYyNCw3ICs2MjYsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX1NFTlRPU0EKLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBFLVNlbnRvc2EiCisJYm9vbCAiU2lieXRlIEJDTTkxMjUwRS1TZW50b3NhIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCkBAIC02MzUsNyArNjM3LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFNJQllURV9SSE9ORQotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTEyNUUtUmhvbmUiCisJYm9vbCAiU2lieXRlIEJDTTkxMTI1RS1SaG9uZSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVApAQCAtNjQ2LDcgKzY0OCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfQ0FSTUVMCi0JYm9vbCAiU3VwcG9ydCBmb3IgU2lieXRlIEJDTTkxMTIweC1DYXJtZWwiCisJYm9vbCAiU2lieXRlIEJDTTkxMTIweC1DYXJtZWwiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY1Nyw3ICs2NTksNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX1BUU1dBUk0KLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBQVC1QVFNXQVJNIgorCWJvb2wgIlNpYnl0ZSBCQ005MTI1MFBULVBUU1dBUk0iCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY2OSw3ICs2NzEsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX0xJVFRMRVNVUgotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTI1MEMyLUxpdHRsZVN1ciIKKwlib29sICJTaWJ5dGUgQkNNOTEyNTBDMi1MaXR0bGVTdXIiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY4MSw3ICs2ODMsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX0NSSElORQotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTEyMEMtQ1JoaW5lIgorCWJvb2wgIlNpYnl0ZSBCQ005MTEyMEMtQ1JoaW5lIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCkBAIC02OTIsNyArNjk0LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFNJQllURV9DUkhPTkUKLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTExMjVDLUNSaG9uZSIKKwlib29sICJTaWJ5dGUgQkNNOTExMjVDLUNSaG9uZSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVApAQCAtNzA0LDcgKzcwNiw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTTklfUk0yMDBfUENJCi0JYm9vbCAiU3VwcG9ydCBmb3IgU05JIFJNMjAwIFBDSSIKKwlib29sICJTTkkgUk0yMDAgUENJIgogCXNlbGVjdCBBUkMKIAlzZWxlY3QgQVJDMzIKIAlzZWxlY3QgQVJDSF9NQVlfSEFWRV9QQ19GREMKQEAgLTcxNCw2ICs3MTYsNyBAQAogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVAogCXNlbGVjdCBIV19IQVNfRUlTQQogCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IEk4MjUzCiAJc2VsZWN0IEk4MjU5CiAJc2VsZWN0IElTQQogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNFgwMApAQCAtNzI5LDcgKzczMiw3IEBACiAJICBzdXBwb3J0IHRoaXMgbWFjaGluZSB0eXBlLgogCiBjb25maWcgVE9TSElCQV9KTVIzOTI3Ci0JYm9vbCAiU3VwcG9ydCBmb3IgVG9zaGliYSBKTVItVFgzOTI3IGJvYXJkIgorCWJvb2wgIlRvc2hpYmEgSk1SLVRYMzkyNyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgTUlQU19UWDM5MjcKQEAgLTc0MCw3ICs3NDMsNyBAQAogCXNlbGVjdCBUT1NISUJBX0JPQVJEUwogCiBjb25maWcgVE9TSElCQV9SQlRYNDkyNwotCWJvb2wgIlN1cHBvcnQgZm9yIFRvc2hpYmEgVEJUWDQ5WzIzXTcgYm9hcmQiCisJYm9vbCAiVG9zaGliYSBUQlRYNDlbMjNdNyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhBU19UWFg5X1NFUklBTAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC03NTcsNyArNzYwLDcgQEAKIAkgIHN1cHBvcnQgdGhpcyBtYWNoaW5lIHR5cGUKIAogY29uZmlnIFRPU0hJQkFfUkJUWDQ5MzgKLQlib29sICJTdXBwb3J0IGZvciBUb3NoaWJhIFJCVFg0OTM4IGJvYXJkIgorCWJvb2wgIlRvc2hpYmEgUkJUWDQ5MzggYm9hcmQiCiAJc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBHRU5FUklDX0lTQV9ETUEKQEAgLTgxMyw2ICs4MTYsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKKwlib29sCisJZGVmYXVsdCB5CisKICMKICMgU2VsZWN0IHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdXNlciBzZWxlY3Rpb25zLgogIwpAQCAtMTA2MCw2ICsxMDY3LDcgQEAKIGNvbmZpZyBDUFVfTUlQUzMyX1IxCiAJYm9vbCAiTUlQUzMyIFJlbGVhc2UgMSIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX01JUFMzMl9SMQorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU19ISUdITUVNCkBAIC0xMDc3LDYgKzEwODUsNyBAQAogY29uZmlnIENQVV9NSVBTMzJfUjIKIAlib29sICJNSVBTMzIgUmVsZWFzZSAyIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTUlQUzMyX1IyCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KQEAgLTEwOTAsNiArMTA5OSw3IEBACiBjb25maWcgQ1BVX01JUFM2NF9SMQogCWJvb2wgIk1JUFM2NCBSZWxlYXNlIDEiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9NSVBTNjRfUjEKKwlzZWxlY3QgQ1BVX0hBU19MTFNDCiAJc2VsZWN0IENQVV9IQVNfUFJFRkVUQ0gKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCkBAIC0xMTA4LDYgKzExMTgsNyBAQAogY29uZmlnIENQVV9NSVBTNjRfUjIKIAlib29sICJNSVBTNjQgUmVsZWFzZSAyIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTUlQUzY0X1IyCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTEyMiw2ICsxMTMzLDcgQEAKIGNvbmZpZyBDUFVfUjMwMDAKIAlib29sICJSMzAwMCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1IzMDAwCisJc2VsZWN0IENQVV9IQVNfV0IKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfSElHSE1FTQogCWhlbHAKQEAgLTExNTEsNiArMTE2Myw3IEBACiBjb25maWcgQ1BVX1I0MzAwCiAJYm9vbCAiUjQzMDAiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SNDMwMAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJaGVscApAQCAtMTE1OSw2ICsxMTcyLDcgQEAKIGNvbmZpZyBDUFVfUjRYMDAKIAlib29sICJSNHgwMCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1I0WDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAloZWxwCkBAIC0xMTY4LDYgKzExODIsNyBAQAogY29uZmlnIENQVV9UWDQ5WFgKIAlib29sICJSNDlYWCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1RYNDlYWAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKQEAgLTExNzUsNiArMTE5MCw3IEBACiBjb25maWcgQ1BVX1I1MDAwCiAJYm9vbCAiUjUwMDAiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SNTAwMAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJaGVscApAQCAtMTE4MywxMiArMTE5OSwxNCBAQAogY29uZmlnIENQVV9SNTQzMgogCWJvb2wgIlI1NDMyIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUjU0MzIKKwlzZWxlY3QgQ1BVX0hBU19MTFNDCiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCiBjb25maWcgQ1BVX1I2MDAwCiAJYm9vbCAiUjYwMDAiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1BVX0hBU19MTFNDCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SNjAwMAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJaGVscApAQCAtMTE5OCw2ICsxMjE2LDcgQEAKIGNvbmZpZyBDUFVfTkVWQURBCiAJYm9vbCAiUk01Mnh4IgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTkVWQURBCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAloZWxwCkBAIC0xMjA3LDYgKzEyMjYsNyBAQAogCWJvb2wgIlI4MDAwIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9SODAwMAorCXNlbGVjdCBDUFVfSEFTX0xMU0MKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJaGVscApAQCAtMTIxNiw2ICsxMjM2LDcgQEAKIGNvbmZpZyBDUFVfUjEwMDAwCiAJYm9vbCAiUjEwMDAwIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUjEwMDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTIyNiw2ICsxMjQ3LDcgQEAKIGNvbmZpZyBDUFVfUk03MDAwCiAJYm9vbCAiUk03MDAwIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUk03MDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTIzNCw2ICsxMjU2LDcgQEAKIGNvbmZpZyBDUFVfUk05MDAwCiAJYm9vbCAiUk05MDAwIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfUk05MDAwCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTApAQCAtMTI0Miw2ICsxMjY1LDcgQEAKIGNvbmZpZyBDUFVfU0IxCiAJYm9vbCAiU0IxIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfU0IxCisJc2VsZWN0IENQVV9IQVNfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KQEAgLTEzODcsMTMgKzE0MTEsMTIgQEAKIAogY29uZmlnIFBBR0VfU0laRV8xNktCCiAJYm9vbCAiMTZrQiIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAhQ1BVX1IzMDAwICYmICFDUFVfVFgzOVhYCisJZGVwZW5kcyBvbiAhQ1BVX1IzMDAwICYmICFDUFVfVFgzOVhYCiAJaGVscAogCSAgVXNpbmcgMTZrQiBwYWdlIHNpemUgd2lsbCByZXN1bHQgaW4gaGlnaGVyIHBlcmZvcm1hbmNlIGtlcm5lbCBhdAogCSAgdGhlIHByaWNlIG9mIGhpZ2hlciBtZW1vcnkgY29uc3VtcHRpb24uICBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb24KLQkgIGFsbCBub24tUjMwMDAgZmFtaWx5IHByb2Nlc3Nvci4gIE5vdCB0aGF0IGF0IHRoZSB0aW1lIG9mIHRoaXMKLQkgIHdyaXRpbmcgdGhpcyBvcHRpb24gaXMgc3RpbGwgaGlnaCBleHBlcmltZW50YWw7IHRoZXJlIGFyZSBhbHNvCi0JICBpc3N1ZXMgd2l0aCBjb21wYXRpYmlsaXR5IG9mIHVzZXIgYXBwbGljYXRpb25zLgorCSAgYWxsIG5vbi1SMzAwMCBmYW1pbHkgcHJvY2Vzc29ycy4gIE5vdGUgdGhhdCB5b3Ugd2lsbCBuZWVkIGEgc3VpdGFibGUKKwkgIExpbnV4IGRpc3RyaWJ1dGlvbiB0byBzdXBwb3J0IHRoaXMuCiAKIGNvbmZpZyBQQUdFX1NJWkVfNjRLQgogCWJvb2wgIjY0a0IiCkBAIC0xNDAyLDggKzE0MjUsNyBAQAogCSAgVXNpbmcgNjRrQiBwYWdlIHNpemUgd2lsbCByZXN1bHQgaW4gaGlnaGVyIHBlcmZvcm1hbmNlIGtlcm5lbCBhdAogCSAgdGhlIHByaWNlIG9mIGhpZ2hlciBtZW1vcnkgY29uc3VtcHRpb24uICBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb24KIAkgIGFsbCBub24tUjMwMDAgZmFtaWx5IHByb2Nlc3Nvci4gIE5vdCB0aGF0IGF0IHRoZSB0aW1lIG9mIHRoaXMKLQkgIHdyaXRpbmcgdGhpcyBvcHRpb24gaXMgc3RpbGwgaGlnaCBleHBlcmltZW50YWw7IHRoZXJlIGFyZSBhbHNvCi0JICBpc3N1ZXMgd2l0aCBjb21wYXRpYmlsaXR5IG9mIHVzZXIgYXBwbGljYXRpb25zLgorCSAgd3JpdGluZyB0aGlzIG9wdGlvbiBpcyBzdGlsbCBoaWdoIGV4cGVyaW1lbnRhbC4KIAogZW5kY2hvaWNlCiAKQEAgLTE0NDAsNiArMTQ2MiwxMiBAQAogCXByb21wdCAiTUlQUyBNVCBvcHRpb25zIgogCWRlcGVuZHMgb24gTUlQU19NVAogCitjb25maWcgTUlQU19NVF9TTVRDCisJYm9vbCAiU01UQzogVXNlIGFsbCBUQ3Mgb24gYWxsIFZQRXMgZm9yIFNNUCIKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKKwlzZWxlY3QgQ1BVX01JUFNSMl9TUlMKKwlzZWxlY3QgU01QCisKIGNvbmZpZyBNSVBTX01UX1NNUAogCWJvb2wgIlVzZSAxIFRDIG9uIGVhY2ggYXZhaWxhYmxlIFZQRSBmb3IgU01QIgogCXNlbGVjdCBTTVAKQEAgLTE0NTMsNiArMTQ4MSwxMSBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIE1JUFNfTVRfRlBBRkYKKwlib29sICJEeW5hbWljIEZQVSBhZmZpbml0eSBmb3IgRlAtaW50ZW5zaXZlIHRocmVhZHMiCisJZGVwZW5kcyBvbiBNSVBTX01UCisJZGVmYXVsdCB5CisKIGNvbmZpZyBNSVBTX1ZQRV9MT0FERVJfVE9NCiAJYm9vbCAiTG9hZCBWUEUgcHJvZ3JhbSBpbnRvIG1lbW9yeSBoaWRkZW4gZnJvbSBsaW51eCIKIAlkZXBlbmRzIG9uIE1JUFNfVlBFX0xPQURFUgpAQCAtMTQ2OSw2ICsxNTAyLDE2IEBACiAJZGVwZW5kcyBvbiBNSVBTX1ZQRV9MT0FERVIKIAloZWxwCiAKK2NvbmZpZyBNSVBTX0FQU1BfS1NQRAorCWJvb2wgIkVuYWJsZSBLU1BEIgorCWRlcGVuZHMgb24gTUlQU19WUEVfQVBTUF9BUEkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBLU1BEIGlzIGEga2VybmVsIGRhZW1vbiB0aGF0IGFjY2VwdHMgc3lzY2FsbCByZXF1ZXN0cyBmcm9tIHRoZSBTUAorCSAgc2lkZSwgYWN0aW9ucyB0aGVtIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJdCBhbHNvIGhhbmRsZXMgdGhlCisJICAiZXhpdCIgc3lzY2FsbCBub3RpZnlpbmcgb3RoZXIga2VybmVsIG1vZHVsZXMgdGhlIFNQIHByb2dyYW0gaXMKKwkgIGV4aXRpbmcuICBZb3UgcHJvYmFibHkgd2FudCB0byBzYXkgeWVzIGhlcmUuCisKIGNvbmZpZyBTQjFfUEFTU18xX1dPUktBUk9VTkRTCiAJYm9vbAogCWRlcGVuZHMgb24gQ1BVX1NCMV9QQVNTXzEKQEAgLTE0ODgsMzggKzE1MzEsMTUgQEAKIAlib29sICJTdXBwb3J0IGZvciA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSIKIAlkZXBlbmRzIG9uIChDUFVfUjRYMDAgfHwgQ1BVX1I1MDAwIHx8IENQVV9STTcwMDAgfHwgQ1BVX1JNOTAwMCB8fCBDUFVfUjEwMDAwIHx8IENQVV9TQjEgfHwgQ1BVX01JUFMzMiB8fCBDUFVfTUlQUzY0KSAmJiAzMkJJVAogCi1jb25maWcgQ1BVX0FEVkFOQ0VECi0JYm9vbCAiT3ZlcnJpZGUgQ1BVIE9wdGlvbnMiCi0JZGVwZW5kcyBvbiAzMkJJVAotCWhlbHAKLQkgIFNheWluZyB5ZXMgaGVyZSBhbGxvd3MgeW91IHRvIHNlbGVjdCBzdXBwb3J0IGZvciB2YXJpb3VzIGZlYXR1cmVzCi0JICB5b3VyIENQVSBtYXkgb3IgbWF5IG5vdCBoYXZlLiAgTW9zdCBwZW9wbGUgc2hvdWxkIHNheSBOIGhlcmUuCi0KIGNvbmZpZyBDUFVfSEFTX0xMU0MKLQlib29sICJsbC9zYyBJbnN0cnVjdGlvbnMgYXZhaWxhYmxlIiBpZiBDUFVfQURWQU5DRUQKLQlkZWZhdWx0IHkgaWYgIUNQVV9BRFZBTkNFRCAmJiAhQ1BVX1IzMDAwICYmICFDUFVfVlI0MVhYICYmICFDUFVfVFgzOVhYCi0JaGVscAotCSAgTUlQUyBSNDAwMCBzZXJpZXMgYW5kIGxhdGVyIHByb3ZpZGUgdGhlIExvYWQgTGlua2VkIChsbCkKLQkgIGFuZCBTdG9yZSBDb25kaXRpb25hbCAoc2MpIGluc3RydWN0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBpcwotCSAgYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3LmdvLWVjcy5jb20vbWlwcy9taXB0ZWsxLmh0bT4uCi0KLQkgIFNheSBZIGhlcmUgaWYgeW91ciBDUFUgaGFzIHRoZSBsbCBhbmQgc2MgaW5zdHJ1Y3Rpb25zLiAgU2F5IFkgaGVyZQotCSAgZm9yIGJldHRlciBwZXJmb3JtYW5jZSwgTiBpZiB5b3UgZG9uJ3Qga25vdy4gIFlvdSBtdXN0IHNheSBZIGhlcmUKLQkgIGZvciBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcy4KKwlib29sCiAKIGNvbmZpZyBDUFVfSEFTX1dCCi0JYm9vbCAiV3JpdGViYWNrIEJ1ZmZlciBhdmFpbGFibGUiIGlmIENQVV9BRFZBTkNFRAotCWRlZmF1bHQgeSBpZiAhQ1BVX0FEVkFOQ0VEICYmIENQVV9SMzAwMCAmJiBNQUNIX0RFQ1NUQVRJT04KLQloZWxwCi0JICBTYXkgTiBoZXJlIGZvciBzbGlnaHRseSBiZXR0ZXIgcGVyZm9ybWFuY2UuICBZb3UgbXVzdCBzYXkgWSBoZXJlIGZvcgotCSAgbWFjaGluZXMgd2hpY2ggcmVxdWlyZSBmbHVzaGluZyBvZiB3cml0ZSBidWZmZXJzIGluIHNvZnR3YXJlLiAgU2F5aW5nCi0JICBZIGlzIHRoZSBzYWZlIG9wdGlvbjsgTiBtYXkgcmVzdWx0IGluIGtlcm5lbCBtYWxmdW5jdGlvbiBhbmQgY3Jhc2hlcy4KLQotbWVudSAiTUlQU1IyIEludGVycnVwdCBoYW5kbGluZyIKLQlkZXBlbmRzIG9uIENQVV9NSVBTUjIgJiYgQ1BVX0FEVkFOQ0VECisJYm9vbAogCiBjb25maWcgQ1BVX01JUFNSMl9JUlFfVkkKIAlib29sICJWZWN0b3JlZCBpbnRlcnJ1cHQgbW9kZSIKKwlkZXBlbmRzIG9uIENQVV9NSVBTUjIKIAloZWxwCiAJICAgVmVjdG9yZWQgaW50ZXJydXB0IG1vZGUgYWxsb3dpbmcgZmFzdGVyIGRpc3BhdGNoaW5nIG9mIGludGVycnVwdHMuCiAJICAgVGhlIGJvYXJkIHN1cHBvcnQgY29kZSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMKQEAgLTE1MjksNiArMTU0OSw3IEBACiAKIGNvbmZpZyBDUFVfTUlQU1IyX0lSUV9FSQogCWJvb2wgIkV4dGVybmFsIGludGVycnVwdCBjb250cm9sbGVyIG1vZGUiCisJZGVwZW5kcyBvbiBDUFVfTUlQU1IyCiAJaGVscAogCSAgIEV4dGVuZGVkIGludGVycnVwdCBtb2RlIHRha2VzIGFkdmFudGFnZSBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQKIAkgICBjb250cm9sbGVyIHRvIGFsbG93IGZhc3QgZGlzcGF0Y2hpbmcgZnJvbSBtYW55IHBvc3NpYmxlIGludGVycnVwdApAQCAtMTU0Miw3ICsxNTYzLDYgQEAKIAkgICBBbGxvdyB0aGUga2VybmVsIHRvIHVzZSBzaGFkb3cgcmVnaXN0ZXIgc2V0cyBmb3IgZmFzdCBpbnRlcnJ1cHRzLgogCSAgIEludGVycnVwdCBoYW5kbGVycyBtdXN0IGJlIHNwZWNpYWxseSB3cml0dGVuIHRvIHVzZSBzaGFkb3cgc2V0cy4KIAkgICBTYXkgTiB1bmxlc3MgeW91IGtub3cgdGhhdCBzaGFkb3cgcmVnaXN0ZXIgc2V0IHVwcG9ydCBpcyBuZWVkZWQuCi1lbmRtZW51CiAKIGNvbmZpZyBDUFVfSEFTX1NZTkMKIAlib29sCkBAIC0xNTg3LDExICsxNjA3LDE2IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIU5VTUEKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNiIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgU01QCiAJYm9vbCAiTXVsdGktUHJvY2Vzc2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1JNOTAwMCB8fCAoKFNJQllURV9CQ00xeDgwIHx8IFNJQllURV9CQ00xeDU1IHx8IFNJQllURV9TQjEyNTAgfHwgUUVNVSkgJiYgIVNJQllURV9TVEFOREFMT05FKSB8fCBTR0lfSVAyNyB8fCBNSVBTX01UX1NNUAorCWRlcGVuZHMgb24gQ1BVX1JNOTAwMCB8fCAoKFNJQllURV9CQ00xeDgwIHx8IFNJQllURV9CQ00xeDU1IHx8IFNJQllURV9TQjEyNTAgfHwgUUVNVSkgJiYgIVNJQllURV9TVEFOREFMT05FKSB8fCBTR0lfSVAyNyB8fCBNSVBTX01UX1NNUCB8fCBNSVBTX01UX1NNVEMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtMTcyMSw2ICsxNzQ2LDkgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBJODI1MworCWJvb2wKKwogc291cmNlICJkcml2ZXJzL3BjbWNpYS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggZDNjNWNjMy4uNTE1ZjllNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTYsNyArNiwxMyBAQAogCWJvb2wgIkFyZSB5b3UgdXNpbmcgYSBjcm9zc2NvbXBpbGVyIgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBjb21waWxpbmcgdGhlIGtlcm5lbCBvbiBhIGRpZmZlcmVudAotCSAgYXJjaGl0ZWN0dXJlIHRoYW4gdGhlIG9uZSBpdCBpcyBpbnRlbmRlZCB0byBydW4gb24uCisJICBhcmNoaXRlY3R1cmUgdGhhbiB0aGUgb25lIGl0IGlzIGludGVuZGVkIHRvIHJ1biBvbi4gIFRoaXMgaXMganVzdCBhCisJICBjb252ZW5pZW5jZSBvcHRpb24gd2hpY2ggd2lsbCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvcgorCSAgdGhlIENST1NTX0NPTVBJTEUgbWFrZSB2YXJpYWJsZSB3aGljaCBvdGhlcndpc2UgaGFzIHRvIGJlIHBhc3NlZCBvbgorCSAgdGhlIGNvbW1hbmQgbGluZSBmcm9tIG1pcHMtbGludXgtLCBtaXBzZWwtbGludXgtLCBtaXBzNjQtbGludXgtIGFuZAorCSAgbWlwczY0ZWwtbGludXgtIGFzIGFwcHJvcHJpYXRlIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb24uCisJICBZb3Ugd2lsbCBoYXZlIHRvIHBhc3MgdGhlIHZhbHVlIGZvciBDUk9TU19DT01QSUxFIG1hbnVhbGx5IGlmIHRoZQorCSAgbmFtZSBwcmVmaXggZm9yIHlvdXIgdG9vbHMgaXMgZGlmZmVyZW50LgogCiBjb25maWcgQ01ETElORQogCXN0cmluZyAiRGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggOWE2OWUwZi4uMTMzOTAwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTA1LDE4ICsxMDUsMTggQEAKIGNmbGFncy0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSAtbWFyY2g9cjQxMDAgLVdhLC0tdHJhcAogY2ZsYWdzLSQoQ09ORklHX0NQVV9SNFgwMCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKIGNmbGFncy0kKENPTkZJR19DUFVfVFg0OVhYKQkrPSAtbWFyY2g9cjQ2MDAgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMiwtbWlwczIgLW10dW5lPXI0NjAwKSBcCitjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczMyLC1taXBzMzIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzIgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMnIyLC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzMyX1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzMzJyMiwtbWlwczMycjIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMikgXAogCQkJLVdhLC1taXBzMzJyMiAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0LC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IxKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjQsLW1pcHM2NCAtVV9NSVBTX0lTQSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzY0KSBcCiAJCQktV2EsLW1pcHM2NCAtV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0cjIsLW1pcHMyIC1tdHVuZT1yNDYwMCApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjRyMiwtbWlwczY0cjIgLVVfTUlQU19JU0EgLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM2NCkgXAogCQkJLVdhLC1taXBzNjRyMiAtV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1I1MDAwKQkrPSAtbWFyY2g9cjUwMDAgLVdhLC0tdHJhcAotY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXI1NDAwLC1tYXJjaD1yNTAwMCkgXAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cjU0MDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCi1jZmxhZ3MtJChDT05GSUdfQ1BVX05FVkFEQSkJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXJtNTIwMCwtbWFyY2g9cjUwMDApIFwKK2NmbGFncy0kKENPTkZJR19DUFVfTkVWQURBKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1ybTUyMDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1JNNzAwMCkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cm03MDAwLC1tYXJjaD1yNTAwMCkgXAogCQkJLVdhLC0tdHJhcApAQCAtNjE1LDcgKzYxNSwxMCBAQAogaWZkZWYgQ09ORklHX01JUFMKIENIRUNLRkxBR1MgKz0gJChzaGVsbCAkKENDKSAkKENGTEFHUykgLWRNIC1FIC14YyAvZGV2L251bGwgfCBcCiAJZWdyZXAgLXZ3ICdfX0dOVUNfKE1BSk9SfE1JTk9SfFBBVENITEVWRUwpX18nIHwgXAotCXNlZCAtZSAncy9eXCNkZWZpbmUgLy1ELycgLWUgJ3MvIC89Ii8nIC1lICdzLyQkLyIvJykKKwlzZWQgLWUgJ3MvXlwjZGVmaW5lIC8tRC8nIC1lICJzLyAvPScvIiAtZSAicy8kJC8nLyIpCitpZmRlZiBDT05GSUdfNjRCSVQKK0NIRUNLRkxBR1MJCSs9IC1tNjQKK2VuZGlmCiBlbmRpZgogCiBPQkpDT1BZRkxBR1MJCSs9IC0tcmVtb3ZlLXNlY3Rpb249LnJlZ2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUKaW5kZXggYTFlZGZkMS4uYmY2ODJmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBBdTEwMDAgQ1BVLCBnZW5lcmljIGZpbGVzLgogIwogCi1vYmoteSArPSBwcm9tLm8gaW50LWhhbmRsZXIubyBpcnEubyBwdXRzLm8gdGltZS5vIHJlc2V0Lm8gXAorb2JqLXkgKz0gcHJvbS5vIGlycS5vIHB1dHMubyB0aW1lLm8gcmVzZXQubyBcCiAJYXUxeHh4X2lycW1hcC5vIGNsb2Nrcy5vIHBsYXRmb3JtLm8gcG93ZXIubyBzZXR1cC5vIFwKIAlzbGVlcGVyLm8gY3B1dGFibGUubyBkbWEubyBkYmRtYS5vIGdwaW8ubwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0Y2E4OC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBwcG9wb3ZAbXZpc3RhLmNvbQotICoKLSAqIEludGVycnVwdCBkaXNwYXRjaGVyIGZvciBBdTEwMDAgYm9hcmRzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQlpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mCXRoZSBHTlUgR2VuZXJhbAkgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCS50ZXh0Ci0JLnNldAltYWNybwotCS5zZXQJbm9hdAotCS5hbGlnbgk1Ci0KLU5FU1RFRChhdTEwMDBfSVJRLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQkJCQkjIEltcG9ydGFudDogbWFyayBLRVJORUwgbW9kZSAhCi0KLQltZmMwCXQwLENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JbWZjMAl0MSxDUDBfU1RBVFVTCQkjIGdldCBlbmFibGVkIGludGVycnVwdHMKLQlhbmQJdDAsdDEJCQkjIGlzb2xhdGUgYWxsb3dlZCBvbmVzCi0KLQlhbmRpCXQwLDB4ZmYwMAkJIyBpc29sYXRlIHBlbmRpbmcgYml0cwotCWJlcXoJdDAsIDNmCQkJIyBzcHVyaW91cyBpbnRlcnJ1cHQKLQotCWFuZGkJYTAsIHQwLCBDQVVTRUZfSVA3Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCW1vdmUJYTAsIHNwCi0JamFsCW1pcHNfdGltZXJfaW50ZXJydXB0Ci0JaglyZXRfZnJvbV9pcnEKLQotMToKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQMgkjIEludGVycnVwdCBDb250cm9sbGVyIDAsIFJlcXVlc3QgMAotCWJlcQlhMCwgemVybywgMmYKLQltb3ZlCWEwLHNwCi0JamFsCWludGMwX3JlcTBfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotMjoKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQMwkjIEludGVycnVwdCBDb250cm9sbGVyIDAsIFJlcXVlc3QgMQotCWJlcQlhMCwgemVybywgM2YKLQltb3ZlCWEwLHNwCi0JamFsCWludGMwX3JlcTFfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotMzoKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQNAkjIEludGVycnVwdCBDb250cm9sbGVyIDEsIFJlcXVlc3QgMAotCWJlcQlhMCwgemVybywgNGYKLQltb3ZlCWEwLHNwCi0JamFsCWludGMxX3JlcTBfaXJxZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotNDoKLQlhbmRpCWEwLCB0MCwgQ0FVU0VGX0lQNQkjIEludGVycnVwdCBDb250cm9sbGVyIDEsIFJlcXVlc3QgMQotCWJlcQlhMCwgemVybywgNWYKLQltb3ZlCWEwLCBzcAotCWphbAlpbnRjMV9yZXExX2lycWRpc3BhdGNoCi0JaglyZXRfZnJvbV9pcnEKLQotNToKLQltb3ZlCWEwLCBzcAotCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci1FTkQoYXUxMDAwX0lSUSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKaW5kZXggMTMzOWEwOS4uYWZlMDVlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKQEAgLTY2LDkgKzY2LDkgQEAKICNkZWZpbmUgRVhUX0lOVEMxX1JFUTEgNSAvKiBJUCA1ICovCiAjZGVmaW5lIE1JUFNfVElNRVJfSVAgIDcgLyogSVAgNyAqLwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGF1MTAwMF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfZGVidWdfdHJhcHModm9pZCk7CiBleHRlcm4gaXJxX2NwdXN0YXRfdCBpcnFfc3RhdCBbTlJfQ1BVU107CitleHRlcm4gdm9pZCBtaXBzX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIHN0YXRpYyB2b2lkIHNldHVwX2xvY2FsX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgdHlwZSwgaW50IGludF9yZXEpOwogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKQEAgLTQ0Niw3ICs0NDYsNiBAQAogCWV4dGVybiBpbnQgYXUxeHh4X2ljMF9ucl9pcnFzOwogCiAJY3AwX3N0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgYXUxMDAwX0lSUSk7CiAKIAkvKiBJbml0aWFsaXplIGludGVycnVwdCBjb250cm9sbGVycyB0byBhIHNhZmUgc3RhdGUuCiAJKi8KQEAgLTY2MSwzICs2NjAsMjEgQEAKIAlhdV93cml0ZWwoc2xlZXBfaW50Y3RsX21hc2tbMF0sIElDMF9NQVNLU0VUKTsgYXVfc3luYygpOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpICYgU1QwX0lNOworCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KQorCQltaXBzX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikKKwkJaW50YzBfcmVxMF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykKKwkJaW50YzBfcmVxMV9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJaW50YzFfcmVxMF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICAmIENBVVNFRl9JUDUpCisJCWludGMxX3JlcTFfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wcm9tLmMKaW5kZXggOWMxNzFhZi4uYWU3ZDhjNTdiZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Byb20uYwpAQCAtMSwxMCArMSw5IEBACiAvKgogICoKICAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICogICAgUFJPTSBsaWJyYXJ5IGluaXRpYWxpc2F0aW9uIGNvZGUsIGFzc3VtaW5nIGEgdmVyc2lvbiBvZgotICogICAgcG1vbiBpcyB0aGUgYm9vdCBjb2RlLgorICogICAgUFJPTSBsaWJyYXJ5IGluaXRpYWxpc2F0aW9uIGNvZGUsIGFzc3VtaW5nIFlBTU9OIGlzIHRoZSBib290IGxvYWRlci4KICAqCi0gKiBDb3B5cmlnaHQgMjAwMCwyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCiAgKgpAQCAtNDksOSArNDgsOSBAQAogCiB0eXBlZGVmIHN0cnVjdAogewotICAgIGNoYXIgKm5hbWU7Ci0vKiAgICBjaGFyICp2YWw7ICovCi19dF9lbnZfdmFyOworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsOworfSB0X2Vudl92YXI7CiAKIAogY2hhciAqIHByb21fZ2V0Y21kbGluZSh2b2lkKQpAQCAtODUsMjEgKzg0LDE2IEBACiB7CiAJLyoKIAkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQkgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiB0aGUgZm9ybSBvZiAibWVtc2l6ZT02NCIuCiAJICovCiAKIAl0X2Vudl92YXIgKmVudiA9ICh0X2Vudl92YXIgKilwcm9tX2VudnA7Ci0JaW50IGk7CiAKLQlpID0gc3RybGVuKGVudm5hbWUpOwotCi0Jd2hpbGUoZW52LT5uYW1lKSB7Ci0JCWlmKHN0cm5jbXAoZW52bmFtZSwgZW52LT5uYW1lLCBpKSA9PSAwKSB7Ci0JCQlyZXR1cm4oZW52LT5uYW1lICsgc3RybGVuKGVudm5hbWUpICsgMSk7Ci0JCX0KKwl3aGlsZSAoZW52LT5uYW1lKSB7CisJCWlmIChzdHJjbXAoZW52bmFtZSwgZW52LT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuIGVudi0+dmFsOwogCQllbnYrKzsKIAl9Ci0JcmV0dXJuKE5VTEwpOworCXJldHVybiBOVUxMOwogfQogCiBpbmxpbmUgdW5zaWduZWQgY2hhciBzdHIyaGV4bnVtKHVuc2lnbmVkIGNoYXIgYykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NsZWVwZXIuUyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NsZWVwZXIuUwppbmRleCA0NGRhYzNiLi42ODNkOWRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zbGVlcGVyLlMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2xlZXBlci5TCkBAIC0xMTIsNiArMTEyLDExIEBACiAJbXRjMAlrMCwgQ1AwX1BBR0VNQVNLCiAJbHcJazAsIDB4MTQoc3ApCiAJbXRjMAlrMCwgQ1AwX0NPTkZJRworCisJLyogV2UgbmVlZCB0byBjYXRjaCB0aGUgZWFscnkgQWxjaGVteSBTT0NzIHdpdGgKKwkgKiB0aGUgd3JpdGUtb25seSBDb25maWdbT0RdIGJpdCBhbmQgc2V0IGl0IGJhY2sgdG8gb25lLi4uCisJICovCisJamFsCWF1MXgwMF9maXh1cF9jb25maWdfb2QKIAlsdwkkMSwgUFRfUjEoc3ApCiAJbHcJJDIsIFBUX1IyKHNwKQogCWx3CSQzLCBQVF9SMyhzcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwppbmRleCBmODVmMTUyLi5mNzRkNjZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIAogbnVsbDoKIAlhY2tfcjRrdGltZXIoMCk7CisJaXJxX2V4aXQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKaW5kZXggNzIwZTc1Ny4uMjI1YWM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIENvYmFsdCBtaWNybyBzeXN0ZW1zIGZhbWlseSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCiAKLW9iai15CSA6PSBpcnEubyBpbnQtaGFuZGxlci5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIDo9IGlycS5vIHJlc2V0Lm8gc2V0dXAubwogCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBjb25zb2xlLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2NvYmFsdC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVkNWUzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgYnkgTGlhbSBEYXZpZXMgKGxkYXZpZXNAYWdpbGUudHYpCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtY29iYWx0L2NvYmFsdC5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JCS50ZXh0Ci0JCS5hbGlnbgk1Ci0JCU5FU1RFRChjb2JhbHRfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCi0JCVBUUl9MQQlyYSwgcmV0X2Zyb21faXJxCi0JCW1vdmUJYTAsIHNwCi0JCWoJY29iYWx0X2lycQotCi0JCUVORChjb2JhbHRfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMgYi9hcmNoL21pcHMvY29iYWx0L2lycS5jCmluZGV4IGY5YTEwODguLjBiNzVmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9pcnEuYwpAQCAtMjAsOCArMjAsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtY29iYWx0L2NvYmFsdC5oPgogCi1leHRlcm4gdm9pZCBjb2JhbHRfaGFuZGxlX2ludCh2b2lkKTsKLQogLyoKICAqIFdlIGhhdmUgdHdvIHR5cGVzIG9mIGludGVycnVwdHMgdGhhdCB3ZSBoYW5kbGUsIG9uZXMgdGhhdCBjb21lIGluIHRocm91Z2gKICAqIHRoZSBDUFUgaW50ZXJydXB0IGxpbmVzLCBhbmQgb25lcyB0aGF0IGNvbWUgaW4gb24gdGhlIHZpYSBjaGlwLiBUaGUgQ1BVCkBAIC03OSw3ICs3Nyw3IEBACiAJCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi1hc21saW5rYWdlIHZvaWQgY29iYWx0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBwZW5kaW5nOwogCkBAIC0xMjIsOCArMTIwLDYgQEAKIAkgKi8KIAlHQUxJTEVPX09VVEwoMCwgR1RfSU5UUk1BU0tfT0ZTKTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIGNvYmFsdF9oYW5kbGVfaW50KTsKLQogCWluaXRfaTgyNTlfaXJxcygpOwkJCQkvKiAgMCAuLi4gMTUgKi8KIAltaXBzX2NwdV9pcnFfaW5pdChDT0JBTFRfQ1BVX0lSUSk7CQkvKiAxNiAuLi4gMjMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IDllMWFlOTUuLjRiMDgwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6Mzk6NTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUwOjU1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMjcsMTEgKzEyOSwxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xNDksNyArMTUxLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTY1LDYgKzE2Niw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3OCwxMCArMTgwLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTkzLDcgKzE5MSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTIwMiw2ICsxOTksOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMjEsNyArMjIwLDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjQ5LDYgKzI0Nyw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjgxLDYgKzI4MCw3IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTMyMiw5ICszMjIsMTIgQEAKIENPTkZJR19JUF9WU19GVFA9bQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzQ4LDExICszNTEsMTQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkBAIC0zNzYsMjAgKzM4MiwxOSBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfSDMyMz1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTQwNyw2ICs0MTIsNyBAQAogQ09ORklHX0lQX05GX05BVF9URlRQPW0KIENPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9OQVRfUFBUUD1tCitDT05GSUdfSVBfTkZfTkFUX0gzMjM9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC00MjcsMTIgKzQzMywxMCBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDc4LDYgKzQ4MiwxMSBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCkBAIC00OTIsMTEgKzUwMSw2IEBACiBDT05GSUdfSVBERFBfREVDQVA9eQogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01NTYsNiArNTYwLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC02OTQsOSArNzAxLDggQEAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNzE1LDYgKzcyMSw3IEBACiBDT05GSUdfTURfUkFJRDE9bQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQogQ09ORklHX01EX1JBSUQ2PW0KIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCkBAIC05MjEsNiArOTI4LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPW0KIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC05MzAsNiArOTM4LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC05ODgsMTAgKzk5Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDI3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzOSwxNSArMTA0NSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExMjAsNyArMTE0NCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE0MCw3ICsxMTYzLDYgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTEyMzIsNiArMTI1NCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggMzI5ODQxMC4uZDg1Y2RhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjM5OjUzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MDo1NSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTgwLDYgKzgwLDggQEAKICMgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfVEJQUk9GIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQpAQCAtMTU0LDcgKzE1Niw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNzIsNiArMTczLDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTg2LDEwICsxODgsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0yMDEsNyArMTk5LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMjEwLDYgKzIwNyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzAsNyArMjI4LDYgQEAKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX1BDSV9ERUJVRz15CiBDT05GSUdfTU1VPXkKIApAQCAtMjQ5LDYgKzI0Niw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQlVJTERfRUxGNjQ9eQogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yNjMsNiArMjYxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yODQsMTIgKzI4MywxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzAxLDYgKzMwMywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzEwLDExICszMTcsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM3Nyw3ICszNzksNyBAQAogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC01NzUsNiArNTc3LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjM3LDcgKzY0MCw2IEBACiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0lCWVRFPXkKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTY1Niw5ICs2NTgsNyBAQAogQ09ORklHX1NFTlNPUlNfUENGODU3ND15CiBDT05GSUdfU0VOU09SU19QQ0E5NTM5PXkKIENPTkZJR19TRU5TT1JTX1BDRjg1OTE9eQotQ09ORklHX1NFTlNPUlNfUlRDODU2ND15CiBDT05GSUdfU0VOU09SU19NQVg2ODc1PXkKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CkBAIC02ODYsMTAgKzY4Niw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzE0LDYgKzcxMCw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTczMSwxNSArNzI4LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzg1LDcgKzgwMCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKaW5kZXggNmMyOTYxYS4uY2EwYWYxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIFR1ZSBBcHIgMjUgMDA6MDg6MDYgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC03Miw2ICs3Miw4IEBACiBDT05GSUdfUENJX1ZSNDFYWD15CiAjIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC05MCw3ICs5Miw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwMywxOCArMTA1LDIxIEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTEzNSw3ICsxNDAsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTEsNiArMTU1LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjQsMTAgKzE2OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE3OSw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODcsNiArMTg3LDkgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA2LDcgKzIwOSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTIyNCw2ICsyMjYsNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjMzLDYgKzIzNiw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjU1LDEyICsyNTksMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3Miw2ICsyNzksMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4MSwxMSArMjkzLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDIsMTAgKzMwOSw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNDgsMTAgKzM1MiwxMiBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTU3OCw2ICs1ODQsMTEgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjAxLDYgKzYxMiw3IEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjM2LDEwICs2NDgsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY3MCw2ICs2NzgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02ODcsMTUgKzY5Niw1MCBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9WUjQxWFg9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcxMiw3ICs3NTYsNyBAQAogQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9bQogCkBAIC03MzUsMTAgKzc3OSw5IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MDUsNDQgKzg0OCwyMCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VlIwLDM4NDAwIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC04NTIsOCArODcxLDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IDgzMzZiMjEuLjdkMjY5ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02Myw3ICs2MywxMCBAQAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTMsNyArMTE2LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzUsNyArMTM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUxLDYgKzE1Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NCwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgyLDYgKzE4MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjksNiArMjI4LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI0NywxMiArMjQ3LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNjQsNiArMjY3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNzMsMTEgKzI4MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMjk4LDYgKzMwMSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQzLDcgKzM0OSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTkzLDYgKzU5OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNjAyLDYgKzYwOSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjYwLDEwICs2NjgsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY5NCw2ICs2OTgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MTEsMTUgKzcxNiwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc2NSw3ICs3ODgsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyOCw2ICs4NTAsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDdmMDcxNDAuLjU3OWI2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Myw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY3LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgxLDcgKzE3OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5MCw2ICsxODcsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yNDUsNiArMjQ0LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI2Nyw3ICsyNjcsOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI3OCw2ICsyNzksOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yOTQsMTAgKzI5NywxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMjEsNiArMzI3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMzAsMTEgKzM0MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzU2LDYgKzM2Miw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDEyLDcgKzQyMSw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQzNCw3ICs0NDIsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3MSw3ICs0NzgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03MjIsMTAgKzcyOSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzU2LDYgKzc1OSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzczLDE0ICs3NzcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODM2LDcgKzg1OCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk0NSw2ICs5NjYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IDk4NTkwY2EuLmU1ZWI1MzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1NyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTggMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Myw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY3LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgxLDcgKzE3OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5MCw2ICsxODcsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzQsNiArMjMzLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI1Niw3ICsyNTYsOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI2Nyw2ICsyNjgsOCBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yODMsMTAgKzI4NiwxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMTAsNiArMzE2LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMTksMTEgKzMzMCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzQ1LDYgKzM1MSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDAxLDcgKzQxMCw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQyMyw3ICs0MzEsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2MCw3ICs0NjcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC02OTAsMTAgKzY5Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzExLDYgKzcxNCw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtNzU1LDYgKzc1OSw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzcyLDE0ICs3NzcsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODM1LDcgKzg1OCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk0NCw2ICs5NjYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IDkyODg4NDcuLmE0M2ZiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1OCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTggMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKQEAgLTExNCwxMSArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1NCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Miw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTEsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjQ0LDYgKzI0Myw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNjMsNyArMjYzLDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yNzQsNiArMjc1LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjg4LDEwICsyOTEsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzE1LDYgKzMyMSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzI0LDExICszMzUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTQwMyw3ICs0MDksNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC00MjUsNyArNDMwLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC03NjMsMTAgKzc2Nyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzg0LDYgKzc4NCw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtNzk0LDYgKzc5NSw3IEBACiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CiAKQEAgLTgxNiw2ICs4MTgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04MzIsNiArODM1LDcgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiAKQEAgLTg0NCwxNCArODQ4LDMyIEBACiBDT05GSUdfTU1DX0FVMVg9eQogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkxMyw3ICs5MzUsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjcsNiArMTA0OCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9Im1lbT00OE0iCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IDVhNDE1YjEuLmFkNjMyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1OSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTkgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNiwxMSArMTE4LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzgsNyArMTQwLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU0LDYgKzE1NSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDcgKzE4MSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5Miw2ICsxODksOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTEsNyArMjEwLDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjUzLDYgKzI1MSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNzUsNyArMjc0LDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yODYsNiArMjg2LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMzAyLDEwICszMDQsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzI5LDYgKzMzNCwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzM4LDExICszNDgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM2NCw2ICszNjksOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyMCw3ICs0MjgsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldApAQCAtNDQzLDcgKzQ1MCw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg2LDcgKzQ5Miw3IEBACiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03MTQsNiArNzIwLDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC03MjUsNiArNzMyLDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03OTAsMTAgKzc5OCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODAyLDYgKzgwNiw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04MjUsOSArODMwLDExIEBACiBDT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtODQ2LDYgKzg1Myw3IEBACiAjIFBDSSBkZXZpY2VzCiAjCiAjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs4ODUsNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtOTA1LDM0ICs5MTQsMjIgQEAKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15Ci1DT05GSUdfT0JTT0xFVEVfT1NTX0RSSVZFUj15CiAjIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DTVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVMxMzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0VTMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FU1NTT0xPMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NQUVTVFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRVNUUk8zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0lDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FVMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FMSTU0NTUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRk9SVEUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUk1FOTZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtOTU4LDcgKzk1NSw2IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKQEAgLTk4NSw5ICs5ODEsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1lFQUxJTks9bQogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTAwMSwxNSArOTk1LDYgQEAKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMDU5LDE1ICsxMDQ0LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTEyMyw3ICsxMTI2LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIzMiw2ICsxMjM0LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwppbmRleCA4ZGMxZjE4Li44MTMwZTIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTUsMTEgKzExNywxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTM3LDcgKzEzOSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1Myw2ICsxNTQsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Miw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTEsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjEwLDcgKzIwOSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI1Miw2ICsyNTAsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjc0LDcgKzI3Myw4IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjg1LDYgKzI4NSw4IEBACiAjCiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTMwMSwxMCArMzAzLDEzIEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTMyOCw2ICszMzMsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTMzNywxMSArMzQ3LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzY4LDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MTksNyArNDI3LDYgQEAKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldApAQCAtNDQyLDcgKzQ0OSw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg5LDcgKzQ5NSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNzU0LDYgKzc2MCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtNzY1LDYgKzc3Miw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODMwLDEwICs4MzgsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTg1OCw2ICs4NjIsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04NzUsMTUgKzg4MCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkzOSw3ICs5NjIsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMDQ4LDYgKzEwNzAsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKaW5kZXggOGZhZTYzZS4uOGQ4OGFjMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTQsNyArMTE2LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzYsNyArMTM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDYgKzE4MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwMiw3ICsyMDEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19JU0E9eQogQ09ORklHX01NVT15CiAKQEAgLTIzMSw2ICsyMjksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjUyLDEyICsyNTEsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI2OSw2ICsyNzEsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI3OCwxMSArMjg1LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDMsNiArMzA1LDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPXkKKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNDgsNyArMzUzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9eQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NzEsNiArNTc2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC01ODAsNiArNTg2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MzgsMTAgKzY0NSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjU5LDYgKzY2Miw3IEBACiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC02NzAsNyArNjc0LDYgQEAKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKQEAgLTcwOCw2ICs3MTEsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MjUsMTUgKzcyOSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc3Niw3ICs3OTgsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTg0MCw2ICs4NjEsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJpcD1hbnkiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKaW5kZXggYTBmY2Q0NC4uOGM5MTFiNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjUsNiArNjUsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfRERCNTQ3N19CVVNfRlJFUVVFTkNZPTAKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTQsNyArMTE2LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzYsNyArMTM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUyLDYgKzE1Miw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgzLDYgKzE4MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwMiw3ICsyMDEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzAsNiArMjI4LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI1MSwxMiArMjUwLDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNjgsNiArMjcwLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNzcsMTEgKzI4NCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzAyLDYgKzMwNCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQ2LDcgKzM1MSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTU2LDYgKzU2MSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTY1LDYgKzU3MSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjIzLDEwICs2MzAsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY1Nyw2ICs2NjAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02NzQsMTUgKzY3OCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcyNSw3ICs3NDcsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Miw2ICs4MTMsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJpcD1hbnkiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKaW5kZXggNWExODFlYS4uZDgzODQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjAxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsMTEgKzYzLDEzIEBACiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CkBAIC0xMTMsNyArMTE1LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1dCPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzUsNyArMTM2LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUxLDYgKzE1MSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NSwxMCArMTY2LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgwLDcgKzE3Nyw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTg5LDYgKzE4NSw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIzMywxMSArMjMxLDEwIEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yNTQsMTIgKzI1MSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjcxLDYgKzI3MSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjgwLDExICsyODUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwNSw2ICszMDUsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0NSw3ICszNDgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC01NjcsMTAgKzU3MCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTg4LDYgKzU4Nyw3IEBACiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldApAQCAtNjE3LDYgKzYxNyw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02MzMsMTQgKzYzNCwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02ODYsNyArNzA1LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzA1LDcgKzcyMyw2IEBACiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfVUZTX0ZTPXkKLUNPTkZJR19VRlNfRlNfV1JJVEU9eQogCiAjCiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZwppbmRleCA4ZmJmYzA2Li4wNzYwZjQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MDQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBUdWUgQXByIDI1IDAwOjA4OjIwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNzAsNiArNzAsOCBAQAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTg4LDcgKzkwLDcgQEAKICMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1ZSNDFYWD15CiAjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldApAQCAtMTAxLDE4ICsxMDMsMjEgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCiAjCiAjIEtlcm5lbCB0eXBlCiAjCi0jIENPTkZJR18zMkJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQogIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQpAQCAtMTMzLDcgKzEzOCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE0NCwxMSArMTQ4LDEwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2MiwxMCArMTY1LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTc3LDcgKzE3Niw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE4NSw2ICsxODMsOSBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTksODUgKzIyMCwxMiBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgTmV0d29ya2luZwogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzEzLDcgKzI0MSw2IEBACiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKICMKLUNPTkZJR19DT05ORUNUT1I9bQogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTMzNSwxMSArMjYyLDExIEBACiAjCiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT1tCiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CkBAIC0zOTgsODEgKzMyNSw4IEBACiAjCiAKICMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19QSFlMSUI9bQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCiAjIElTRE4gc3Vic3lzdGVtCiAjCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBUZWxlcGhvbnkgU3VwcG9ydApAQCAtNTA4LDExICszNjIsNyBAQAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTUzMSw2ICszODEsMTAgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU2NSw2ICs0MTksNyBAQAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKK0NPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjAwLDEwICs0NTUsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTYxMSw3ICs0NjIsNiBAQAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTYzNSw2ICs0ODUsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNjUxLDE0ICs1MDIsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNjY5LDEzICs1MzgsMTIgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19GVVNFX0ZTPW0KIApAQCAtNjk4LDEwICs1NjYsOSBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzIyLDI5ICs1ODksNiBAQAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIAogIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz1tCi0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTc2Nyw0NCArNjExLDIwIEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5VlIwLDE5MjAwIG1lbT04TSIKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtODE0LDggKzYzNCw2IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9bQotQ09ORklHX0NSQzMyPW0KLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCmluZGV4IGYyZDQzYmUuLjcwNjdmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjA1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowMiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY1LDYgKzY1LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogIyBDT05GSUdfRVZCX1BDSTEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNiw3ICsxMTgsNiBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzgsNyArMTM5LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU0LDYgKzE1NCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY4LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgyLDcgKzE3OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtMTkxLDYgKzE4Nyw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIxMCw3ICsyMDgsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzgsNiArMjM1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQpAQCAtMjU4LDEyICsyNTYsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NSw2ICsyNzYsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4NCwxMSArMjkwLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDksNiArMzEwLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNTIsNyArMzU2LDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NTAsNiArNTU0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC01NTksNiArNTY0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MTcsMTAgKzYyMyw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjUxLDYgKzY1Myw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY2OCwxNSArNjcxLDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzE5LDcgKzc0MCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzgzLDYgKzgwMyw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xOTIuMTY4LjEuMTovbW50L2Rpc2syL2ZzLmdhbCBpcD0xOTIuMTY4LjEuMjExOjE5Mi4xNjguMS4xOjo6Z3Q6OiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZwppbmRleCBhYzU4NDFjLi4wMGI1NmVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDowNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MDMgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExOSw3ICsxMjEsNiBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDIsNyArMTQzLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU4LDYgKzE1OCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MSwxMCArMTcyLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg2LDcgKzE4Myw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtMTk1LDYgKzE5MSw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0MCw2ICsyMzgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNjAsMTIgKzI1OSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc3LDYgKzI3OSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg2LDExICsyOTMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMSw2ICszMTMsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0OSw3ICszNTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC01NjcsMTAgKzU3Miw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjAxLDYgKzYwMiw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC02MTcsMTQgKzYxOSwzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02NjcsNyArNjg3LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC03MzEsNiArNzUwLDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCmluZGV4IDQyZDVjZDcuLjYwN2UyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjM5OjUxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MDo1NCAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19BUkM9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CkBAIC0xMjEsNyArMTIzLDYgQEAKIENPTkZJR19JUDIyX0NQVV9TQ0FDSEU9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xNDMsNyArMTQ0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTYwLDYgKzE2MCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTczLDEwICsxNzQsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODgsNyArMTg1LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTk3LDYgKzE5Myw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0Miw2ICsyNDAsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI2NCw2ICsyNjMsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0zMDUsOSArMzA1LDEyIEBACiBDT05GSUdfSVBfVlNfRlRQPW0KIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTMzMCwxMSArMzMzLDE0IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzU3LDIwICszNjMsMTkgQEAKIENPTkZJR19JUF9ORl9URlRQPW0KIENPTkZJR19JUF9ORl9BTUFOREE9bQogQ09ORklHX0lQX05GX1BQVFA9bQorQ09ORklHX0lQX05GX0gzMjM9bQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCkBAIC0zODgsNiArMzkzLDcgQEAKIENPTkZJR19JUF9ORl9OQVRfVEZUUD1tCiBDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfTkFUX1BQVFA9bQorQ09ORklHX0lQX05GX05BVF9IMzIzPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtNDA4LDEyICs0MTQsMTAgQEAKIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCi1DT05GSUdfSVA2X05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KQEAgLTQzNSw2ICs0MzksMTEgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTQ0NCwxMSArNDUzLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogQ09ORklHX05FVF9ESVZFUlQ9eQogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtNTA4LDYgKzUxMiw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNTQ2LDcgKzU1Myw3IEBACiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTgxMiwxMCArODE5LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04NTcsNiArODYwLDcgQEAKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTg3MywxNCArODc3LDMyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPW0KQEAgLTk0NCw3ICs5NjYsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2Myw3ICs5ODQsNiBAQAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogQ09ORklHX1VGU19GUz1tCi0jIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCkBAIC0xMDc4LDYgKzEwOTgsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggOGM0MDU5MC4uZjcyNGI0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM0Ci0jIFR1ZSBGZWIgMjEgMTM6NDQ6MzEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNzAsNiArNzAsOCBAQAogIyBDT05GSUdfUkVQTElDQVRFX0tURVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFUExJQ0FURV9FWEhBTkRMRVJTIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0FSQz15CiBDT05GSUdfRE1BX0lQMjc9eQpAQCAtMTIzLDYgKzEyNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19OT0RFU19TSElGVD02CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CkBAIC0xNjIsNiArMTY1LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzUsMTAgKzE3OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE5MCw3ICsxOTAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5OSw2ICsxOTgsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE5LDcgKzIxOSw2IEBACiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMzcsNiArMjM2LDcgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0VMRjY0IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQpAQCAtMjc0LDEyICsyNzQsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM2Myw2ICszNjYsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQwNyw3ICs0MTMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTQ3Myw3ICs0NzksNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTQ5MSw2ICs0OTYsNyBAQAogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ1PXkKK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtNjU0LDYgKzY2MCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKQEAgLTcyNywxMCArNzM0LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NTUsNiArNzU4LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzcyLDE3ICs3NzYsMzEgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKKyMgUmVhbCBUaW1lIENsb2NrCiAjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtODQwLDcgKzg1OCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTIyLDYgKzkzOSw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCA3ZmRjYWY1Li44ZjExZDM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDowOSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MDUgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19ETUFfSVAzMj15CkBAIC0xNDIsNyArMTQ0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU5LDYgKzE2MCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MiwxMCArMTc0LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg5LDYgKzE4Nyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDgsNyArMjA3LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjI2LDYgKzIyNCw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfQlVJTERfRUxGNjQgaXMgbm90IHNldAogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yNDAsNiArMjM5LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yNjEsMTIgKzI2MSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc4LDYgKzI4MSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg3LDExICsyOTUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMiw2ICszMTUsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9eQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM1Nyw3ICszNjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD15CiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTQyOCw3ICs0MzQsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNjE1LDYgKzYyMCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNjI0LDYgKzYzMCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjgyLDEwICs2ODksNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTcxNiw2ICs3MTksNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MzMsMTUgKzczNywzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc4NCw3ICs4MDYsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04NjEsNiArODgyLDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZwppbmRleCBjNzE2OTk2Li43NTdhZGYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjUsNiArNjUsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19JVDgxNzJfUkVWQyBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTE1LDcgKzExNyw2IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTM3LDcgKzEzOCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1NCw2ICsxNTQsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjcsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Myw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTIsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjM3LDYgKzIzNSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjU4LDEyICsyNTcsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NSw2ICsyNzcsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4NCwxMSArMjkxLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDksNiArMzExLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zODcsNyArMzkyLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00MjQsNyArNDI4LDcgQEAKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNjY2LDEwICs2NzAsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTcwNCw3ICs3MDQsNiBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX09CU09MRVRFX09TU19EUklWRVIgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX0lUODE3Mj15CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKQEAgLTcxNCw2ICs3MTMsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNzMwLDE0ICs3MzAsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzgwLDcgKzc5OCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ2LDYgKzg2Myw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcKaW5kZXggYTgzNzZkMS4uMDIxNzYxYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjExIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowNiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTEyLDcgKzExNCw2IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTM0LDcgKzEzNSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1MSw2ICsxNTEsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjQsMTAgKzE2NSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE3OSw3ICsxNzYsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODgsNiArMTg0LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA3LDcgKzIwNSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTIzNSw2ICsyMzIsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI1NiwxMiArMjU0LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNzMsNiArMjc0LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yODIsMTEgKzI4OCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzA3LDYgKzMwOCw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzUwLDcgKzM1NCw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTY1LDYgKzU2OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTc0LDYgKzU3OSw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjMxLDEwICs2MzcsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2NjcsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02ODIsMTUgKzY4NSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTczMyw3ICs3NTQsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Nyw2ICs4MTcsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKaW5kZXggMzE2MDE1My4uMDhmNmMzMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA2IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjUsNiArNjUsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfSkFHVUFSX0RNQUxPVz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTIyLDcgKzEyNCw2IEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTE0NCw3ICsxNDUsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKICMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2MCw2ICsxNjAsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0xNzIsMTAgKzE3Myw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Niw3ICsxODMsNiBAQAogIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTUsNiArMTkxLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE0LDcgKzIxMiw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI0MSw2ICsyMzgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNjAsMTYgKzI1OCwxOSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtMzM4LDEwICszMzksOSBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCkBAIC00MjMsNiArNDIzLDcgQEAKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk8xMDA9eQogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CkBAIC00NDYsNiArNDQ3LDcgQEAKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTUxNCw2ICs1MTYsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTUyMyw2ICs1MjYsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU3OSwxMCArNTgzLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02MDcsNiArNjA3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI0LDEyICs2MjUsMjkgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKICMKIAogIwpAQCAtNjcyLDcgKzY5MCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03MTgsNiArNzM1LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCmluZGV4IDUzZmJlZjEuLjM4YjFlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjEzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MTowNyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTExLDcgKzExMyw2IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzMsNyArMTM0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTQ5LDYgKzE0OSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2MiwxMCArMTYzLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgwLDYgKzE3Nyw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE5OSw3ICsxOTgsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yMjcsNiArMjI1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI0OCwxMiArMjQ3LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNjUsNiArMjY3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNzQsMTEgKzI4MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMjk5LDYgKzMwMSw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz15CisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQzLDcgKzM0OCw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTUxLDcgKzU1NiwxMiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9UWFg5PXkKIENPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQorIyBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVFhYOV9TVERTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTklYOThfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MTAsMTAgKzYyMCw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjMxLDYgKzYzNyw3IEBACiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC02NDIsNyArNjQ5LDYgQEAKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKQEAgLTY3OSw2ICs2ODUsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02OTYsMTUgKzcwMywzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldApAQCAtNzQ1LDcgKzc3MCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODA5LDYgKzgzMyw4IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCmluZGV4IGVmMGZhOWYuLjRkMjU5OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA3IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjgsNiArNjgsOCBAQAogQ09ORklHX0RTMTYwMz15CiBDT05GSUdfTEFTQVRfU1lTQ1RMPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTksNyArMTIxLDYgQEAKIENPTkZJR19SNTAwMF9DUFVfU0NBQ0hFPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQxLDcgKzE0Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1Nyw2ICsxNTcsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzAsMTAgKzE3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Niw3ICsxODMsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTUsNiArMTkxLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjE0LDcgKzIxMiw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI0Miw2ICsyMzksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNTksMTIgKzI1NywxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc2LDYgKzI3NywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg1LDExICsyOTEsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMCw2ICszMTEsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM2Niw3ICszNzAsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC0zODksNyArMzkyLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00MzAsNyArNDMyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC02NzIsNiArNjc0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC02ODEsNiArNjg0LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03MzksMTAgKzc0Myw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNzczLDYgKzc3Myw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTc5MCwxNSArNzkxLDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODQ3LDcgKzg2Niw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTE0LDYgKzkzMiw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCmluZGV4IDM2N2QyNzkuLjk3N2Y1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA4IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQpAQCAtMTI4LDE2ICsxMzAsMjEgQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UPXkKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19WUEVfTE9BREVSPXkKK0NPTkZJR19NSVBTX01UX0ZQQUZGPXkKIENPTkZJR19NSVBTX1ZQRV9MT0FERVJfVE9NPXkKIENPTkZJR19NSVBTX1ZQRV9BUFNQX0FQST15CitDT05GSUdfTUlQU19BUFNQX0tTUEQ9eQogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKKyMgQ09ORklHX0NQVV9NSVBTUjJfSVJRX1ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTUjJfSVJRX0VJIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTU1LDcgKzE2Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE3MSw2ICsxNzcsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xODQsMTAgKzE5MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE5OSw3ICsyMDIsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0yMDgsNiArMjEwLDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjI3LDcgKzIzMSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI1NSw2ICsyNTgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI4Nyw2ICsyOTEsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0zMjgsOSArMzMzLDEyIEBACiBDT05GSUdfSVBfVlNfRlRQPW0KIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTM1NCwxMSArMzYyLDE0IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkBAIC0zODIsMjAgKzM5MywxOSBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfSDMyMz1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTQxMyw2ICs0MjMsNyBAQAogQ09ORklHX0lQX05GX05BVF9URlRQPW0KIENPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9OQVRfUFBUUD1tCitDT05GSUdfSVBfTkZfTkFUX0gzMjM9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC00MzMsMTIgKzQ0NCwxMCBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDg0LDYgKzQ5MywxMSBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCkBAIC00OTgsMTEgKzUxMiw2IEBACiBDT05GSUdfSVBERFBfREVDQVA9eQogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01NjIsNiArNTcxLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC03MzQsNyArNzQ2LDYgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTc1Myw2ICs3NjQsNyBAQAogQ09ORklHX01EX1JBSUQxPW0KIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtOTU2LDYgKzk2OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtOTY1LDYgKzk3OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtMTAyMiwxMCArMTAzNiw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtMTA1Niw2ICsxMDY2LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3MywxNSArMTA4NCwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExNTQsNyArMTE4Myw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3NCw3ICsxMjAyLDYgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTEyNjYsNiArMTI5Myw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwppbmRleCBmZTc4OTYxNy4uMDA1NjBlMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTYgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjA5IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTQsMTYgKzExNiwxOSBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVQ9eQorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX1ZQRV9MT0FERVI9eQorQ09ORklHX01JUFNfTVRfRlBBRkY9eQogQ09ORklHX01JUFNfVlBFX0xPQURFUl9UT009eQogQ09ORklHX01JUFNfVlBFX0FQU1BfQVBJPXkKK0NPTkZJR19NSVBTX0FQU1BfS1NQRD15CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xNDEsNyArMTQ2LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU3LDYgKzE2MSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMTcxLDEwICsxNzYsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xODYsNyArMTg3LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQpAQCAtMTk1LDYgKzE5NSw3IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzgsNiArMjM5LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yNjgsMTIgKzI3MCwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yOTAsNiArMjk1LDExIEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yOTksMTEgKzMwOSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRElWRVJUPXkKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD15CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIApAQCAtNTMyLDcgKzUzNyw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTEKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTk2LDEwICs2MDEsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTYyNCw2ICs2MjUsNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNjQwLDE0ICs2NDIsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNjkwLDggKzcxMCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCmluZGV4IGU0NjIwZTcuLjI4NmEwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoxNyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MDkgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC03Miw2ICs3Miw4IEBACiBDT05GSUdfUENJX1ZSNDFYWD15CiBDT05GSUdfVlJDNDE3Mz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtOTAsNyArOTIsNyBAQAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfVlI0MVhYPXkKICMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CkBAIC0xMDMsMTggKzEwNSwyMSBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKICMKICMgS2VybmVsIHR5cGUKICMKLSMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CiAjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xMzUsNyArMTQwLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUxLDYgKzE1NSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NCwxMCArMTY5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTc5LDcgKzE4MCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE4Nyw2ICsxODcsOSBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDYsNyArMjA5LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjI1LDYgKzIyNyw3IEBACiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9WUkM0MTczIGlzIG5vdCBzZXQKIAogIwogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CkBAIC0yMzYsNiArMjM5LDcgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTI0NSw2ICsyNDksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTI2NCwxMiArMjY5LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yODEsNiArMjg5LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yOTAsMTEgKzMwMyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzE2LDYgKzMyNCw5IEBACiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzYwLDcgKzM3MSw3IEBACiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIApAQCAtNDc1LDYgKzQ4Niw3IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogQ09ORklHX05FVF9SQURJTz15CisjIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQpAQCAtNTEzLDYgKzUyNSw3IEBACiAjCiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000M1hYIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfV0lSRUxFU1M9eQogCiAjCkBAIC02MDQsNiArNjE3LDggQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MzQsNiArNjQ5LDcgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY2OSwxMCArNjg1LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02ODEsNiArNjkzLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTcwMyw2ICs3MTYsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTc1Niw5ICs3NzAsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC03NzIsMTUgKzc4NCw2IEBACiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtODMyLDE1ICs4MzUsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04ODMsNyArOTA0LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05NDYsNiArOTY2LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVZSMCwxOTIwMCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCmluZGV4IDkyNWQ4YWQuLjFjZTQzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjEwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMjAsNyArMTIyLDYgQEAKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQ0LDcgKzE0NSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2MSw2ICsxNjEsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3NCwxMCArMTc1LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg5LDcgKzE4Niw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtMTk4LDYgKzE5NCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIxNyw3ICsyMTUsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yNDUsNiArMjQyLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI2Niw2ICsyNjQsNyBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMjc4LDkgKzI3NywxMiBAQAogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CkBAIC0yOTksMTAgKzMwMSwxMyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCkBAIC0zMzIsNiArMzM3LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zNDEsMTEgKzM1MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzY3LDYgKzM3Miw5IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDExLDcgKzQxOSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKQEAgLTQ3NSw3ICs0ODMsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNjkwLDYgKzY5Nyw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNjk5LDYgKzcwNyw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNzU2LDEwICs3NjUsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTc3Nyw2ICs3ODIsNyBAQAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKQEAgLTc4OCw3ICs3OTQsNiBAQAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldApAQCAtODMyLDYgKzgzNyw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTg0OSwxNSArODU1LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTE0LDcgKzkzOCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjUsNiArMTA0OCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImlwPWFueSByb290PW5mcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCmluZGV4IGVlMWNmOWIuLjhhNmFhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MTkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjEwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMzksNyArMTQxLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU1LDYgKzE1Niw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2OCwxMCArMTcwLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg1LDYgKzE4Myw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDQsNyArMjAzLDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjIyLDYgKzIyMCw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19NSVBTMzJfTzMyPXkKQEAgLTIzNiw2ICsyMzUsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNTYsMTIgKzI1NiwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjczLDYgKzI3NiwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjgyLDExICsyOTAsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwNyw2ICszMTAsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9eQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM1MSw3ICszNTcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD15CiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTU0Miw2ICs1NDgsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTU1MSw2ICs1NTgsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYwOSwxMCArNjE3LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02NDMsNiArNjQ3LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjYwLDE1ICs2NjUsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC03MTEsNyArNzM0LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC03NzgsNiArODAwLDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwppbmRleCBkODBmZjI3Li5mOWVlMzVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MjAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjExIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMjEsNyArMTIzLDYgQEAKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQ0LDcgKzE0NSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2MCw2ICsxNjAsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzMsMTAgKzE3NCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE5MSw2ICsxODgsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzYsNiArMjM1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQpAQCAtMjU2LDEyICsyNTYsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3Myw2ICsyNzYsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4MiwxMSArMjkwLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDcsNiArMzEwLDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPXkKKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNDYsNyArMzUyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTYzLDEwICs1NjksNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTU5Nyw2ICs1OTksNyBAQAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwpAQCAtNjEzLDE0ICs2MTYsMzIgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNjYzLDcgKzY4NCw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzMwLDYgKzc1MCw4IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCmluZGV4IGMwZjUwOGQuLmI0OGJkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MjEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjExIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xNDIsNyArMTQ0LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTU4LDYgKzE1OSw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MSwxMCArMTczLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg4LDYgKzE4Niw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMDcsNyArMjA2LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjI1LDYgKzIyMyw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19NSVBTMzJfTzMyPXkKQEAgLTIzOSw2ICsyMzgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CkBAIC0yNTksMTIgKzI1OSwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc2LDYgKzI3OSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg1LDExICsyOTMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxMCw2ICszMTMsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9eQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM1NCw3ICszNjAsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD15CiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKQEAgLTU0NSw2ICs1NTEsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTU1NCw2ICs1NjEsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYxMiwxMCArNjIwLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02NDYsNiArNjUwLDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjYzLDE1ICs2NjgsMzMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC03MTQsNyArNzM3LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC03ODEsNiArODAzLDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCAxOTRiM2M3Li4wMWFhYzQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MjIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjEyIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTYsMTEgKzExOCwxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTM4LDcgKzE0MCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1NCw2ICsxNTUsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjcsMTAgKzE2OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Myw3ICsxODEsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTIsNiArMTg5LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjQ3LDYgKzI0Niw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNjksNyArMjY5LDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yODAsNiArMjgxLDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjk2LDEwICsyOTksMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzIzLDYgKzMyOSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzMyLDExICszNDMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM1OCw2ICszNjQsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQxNCw3ICs0MjMsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC00MzYsNyArNDQ0LDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00NzMsNyArNDgwLDcgQEAKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNzE2LDEwICs3MjMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTc1MCw2ICs3NTMsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTc2NywxNCArNzcxLDMyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTgzMCw3ICs4NTIsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05MzksNiArOTYwLDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCA4OTg1NzI1Li4zOThjM2MyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MjQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjEzIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTUsMTEgKzExNywxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTM3LDcgKzEzOSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1Myw2ICsxNTQsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE2OCw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4Miw3ICsxODAsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xOTEsNiArMTg4LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjEwLDcgKzIwOSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI1Myw2ICsyNTEsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjc1LDcgKzI3NCw4IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjg2LDYgKzI4Niw4IEBACiAjCiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTMwMiwxMCArMzA0LDEzIEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTMyOSw2ICszMzQsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTMzOCwxMSArMzQ4LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zNjQsNiArMzY5LDkgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MjAsNyArNDI4LDYgQEAKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfQU1EU1REX1JFVFJZPTAKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldApAQCAtNDQzLDcgKzQ1MCw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg1LDcgKzQ5MSw3IEBACiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNzUwLDYgKzc1Niw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtNzYxLDYgKzc2OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODI2LDEwICs4MzQsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTg1NCw2ICs4NTgsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC04NzEsMTUgKzg3NiwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkzNSw3ICs5NTgsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMDQ0LDYgKzEwNjYsNyBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IGFkYmY5OTcuLmVhMjgyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyNSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTMgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNSwxMSArMTE3LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzcsNyArMTM5LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1NCw3IEBACiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NiwxMCArMTY4LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgyLDcgKzE4MCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5MSw2ICsxODgsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTAsNyArMjA5LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjUzLDYgKzI1MSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNzUsNyArMjc0LDggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yODYsNiArMjg2LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMzAyLDEwICszMDQsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzI5LDYgKzMzNCwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzM4LDExICszNDgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM2NCw2ICszNjksOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyMCw3ICs0MjgsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC00NDMsNyArNDUwLDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC00ODUsNyArNDkxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03NDIsNiArNzQ4LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC03NTMsNiArNzYwLDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC04MTgsMTAgKzgyNiw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODQ2LDYgKzg1MCw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTg2MywxNSArODY4LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTI3LDcgKzk1MCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzYsNiArMTA1OCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCmluZGV4IGI1ZGI3MDAuLjRjNTdlNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MjYgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjE0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjQsNiArNjQsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMTQsMTEgKzExNiwxMSBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzYsNyArMTM4LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTUzLDYgKzE1NCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjcsMTAgKzE2OSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4MSw3ICsxNzksNiBAQAogIwogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtMTkwLDYgKzE4Nyw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIwOSw3ICsyMDgsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCkBAIC0yMzgsNiArMjM2LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI1NywxMiArMjU2LDE1IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NCw2ICsyNzYsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4MywxMSArMjkwLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC00NjksNyArNDcxLDYgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTY3MSw2ICs2NzIsNyBAQAogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCiAjIENPTkZJR19TRVJJQUxfSVAzMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTcyMyw2ICs3MjUsNyBAQAogIwogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKQEAgLTczMCwxMCArNzMzLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NDIsNiArNzQxLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTc2NCw2ICs3NjQsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTgyNyw5ICs4MjgsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC04NDQsMTUgKzg0Myw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC05MDIsMTUgKzg5MiwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTk1Niw3ICs5NjQsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjcsNiArMTA3NCw3IEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0xBQj15CisjIENPTkZJR19ERUJVR19TTEFCX0xFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZwppbmRleCA0MTg3Mjg3Li4zYzhmMzUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDoyOCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTQgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKQEAgLTExNCwxMiArMTE2LDExIEBACiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0FEVkFOQ0VEPXkKIENPTkZJR19DUFVfSEFTX0xMU0M9eQotIyBDT05GSUdfQ1BVX0hBU19XQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTEzNyw3ICsxMzgsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTQsNiArMTU0LDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY4LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTgxLDcgKzE3OCw2IEBACiAjCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CkBAIC0xOTAsNiArMTg2LDggQEAKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA5LDcgKzIwNyw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjM3LDYgKzIzNCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNTYsNiArMjU0LDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTI2OCw5ICsyNjcsMTIgQEAKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMjg3LDEwICsyODksMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQpAQCAtMzIwLDYgKzMyNCwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzI5LDExICszMzgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTUyMSw3ICs1MjUsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNzU3LDYgKzc2MCw3IEBACiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKICMgQ09ORklHX1NFUklBTF9JUDMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODE2LDcgKzgyMCw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTgzNSw5ICs4MzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtODY3LDYgKzg2OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldApAQCAtOTAxLDEwICs5MDMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTkxMyw2ICs5MTEsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtOTIyLDYgKzkyMSw3IEBACiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC05MzMsNyArOTMzLDYgQEAKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKQEAgLTk3MCw2ICs5NjksNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEwMzAsOSArMTAzMCw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTEwNDcsMTUgKzEwNDUsNiBAQAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtMTEwNiwxNSArMTA5NSwzMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExNzEsNyArMTE3OCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI4MCw2ICsxMjg2LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCmluZGV4IDMxZjVhZmEuLjRiY2MwMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMgotIyBTdW4gRmViIDEyIDE5OjE4OjU1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToxNSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CkBAIC0xMTUsMTYgKzExNywxNyBAQAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTE0Nyw2ICsxNTAsNyBAQAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtMTU5LDEwICsxNjMsNiBAQAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogQ09ORklHX1RJTllfU0hNRU09eQogQ09ORklHX0JBU0VfU01BTEw9MQpAQCAtMTc3LDYgKzE3Nyw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE5Niw2ICsxOTgsNyBAQAogIwogQ09ORklHX0lTQT15CiBDT05GSUdfTU1VPXkKK0NPTkZJR19JODI1Mz15CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMjQxLDEyICsyNDQsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC01MzAsMTAgKzUzNiw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTUyLDYgKzU1NCw3IEBACiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogCkBAIC01NjUsNiArNTY4LDcgQEAKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTU4MSwxNSArNTg1LDI4IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIyBSZWFsIFRpbWUgQ2xvY2sKICMKIAogIwpAQCAtNjMyLDcgKzY0OSw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPXkKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC02ODAsNiArNjk2LDggQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwppbmRleCBiMTI2Zjc2Li4zZDQ0MTkzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MzAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBNb24gQXByIDI0IDE0OjUxOjE2IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNzEsNiArNzEsOCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9OQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzhfTVBMRVhfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMjEsMTAgKzEyMyw5IEBACiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotQ09ORklHX0NQVV9BRFZBTkNFRD15CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKLUNPTkZJR19DUFVfSEFTX1dCPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTE0NSw3ICsxNDYsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNjIsNiArMTYyLDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNzUsMTAgKzE3Niw2IEBACiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xOTAsNyArMTg3LDYgQEAKICMKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTE5OSw2ICsxOTUsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMTgsNyArMjE2LDYgQEAKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQotIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19JU0E9eQogQ09ORklHX01NVT15CiAKQEAgLTI0Nyw2ICsyNDQsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjY3LDYgKzI2NSw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yNzksOSArMjc4LDEyIEBACiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTMwMCwxMCArMzAyLDEyIEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTMzMyw2ICszMzcsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTM0MiwxMSArMzUxLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzczLDkgQEAKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MjUsNyArNDMyLDYgQEAKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURF9SRVRSWT0wCiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NTMsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTcwMiw2ICs3MDcsNyBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKIENPTkZJR19ORVRfUkFESU89eQorIyBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyBpcyBub3Qgc2V0CiAKICMKICMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKQEAgLTcxNSw2ICs3MjEsOCBAQAogIwogIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSVBXMjIwMD1tCisjIENPTkZJR19JUFcyMjAwX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSVBXX1FPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFcyMjAwX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CkBAIC03MjQsNiArNzMyLDcgQEAKICMKICMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQzWFggaXMgbm90IHNldAogQ09ORklHX05FVF9XSVJFTEVTUz15CiAKICMKQEAgLTgyMSw3ICs4MzAsMTIgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfVFhYOT15CiBDT05GSUdfSEFTX1RYWDlfU0VSSUFMPXkKKyMgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTg3NCw2ICs4ODgsNyBAQAogIwogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKQEAgLTg4MSwxMCArODk2LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04OTMsNiArOTA0LDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkwMiw2ICs5MTQsNyBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC05MTMsNyArOTI2LDYgQEAKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogQ09ORklHX0ZCX0FUWT15CkBAIC05MzQsNiArOTQ2LDcgQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKQEAgLTk1NCw2ICs5NjcsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEwMDMsOSArMTAxNyw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWUVBTElOSz1tCiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC0xMDE5LDE1ICsxMDMxLDYgQEAKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMDc4LDE1ICsxMDgxLDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTE0OCw3ICsxMTY5LDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI2Niw2ICsxMjg2LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggNDYzZWQzZC4uZWRmYjk2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDozMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTE6MTYgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CkBAIC0xMjIsNyArMTI0LDYgQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQ1LDcgKzE0Niw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2Myw2ICsxNjMsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3NiwxMCArMTc3LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTkxLDcgKzE4OCw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtMjAwLDYgKzE5Niw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIyMCwxMCArMjE4LDEwIEBACiBDT05GSUdfSFdfSEFTX0VJU0E9eQogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKIENPTkZJR19JU0E9eQogIyBDT05GSUdfRUlTQSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKK0NPTkZJR19JODI1Mz15CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMjUwLDYgKzI0OCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD1tCiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjcyLDYgKzI3MSw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMjg0LDkgKzI4NCwxMiBAQAogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzA5LDExICszMTIsMTQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkBAIC0zMzcsMjAgKzM0MywxOSBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiBDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfSDMyMz1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KQEAgLTM2OCw2ICszNzMsNyBAQAogQ09ORklHX0lQX05GX05BVF9URlRQPW0KIENPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9OQVRfUFBUUD1tCitDT05GSUdfSVBfTkZfTkFUX0gzMjM9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC0zODgsMTIgKzM5NCwxMCBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDM5LDIxICs0NDMsMjIgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci1DT05GSUdfQlJJREdFPW0KLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotQ09ORklHX0RFQ05FVD1tCi0jIENPTkZJR19ERUNORVRfUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKIAogIwogIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0U9bQorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CitDT05GSUdfREVDTkVUPW0KKyMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTUzMyw2ICs1MzgsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTYyMCw2ICs2MjgsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPW0KIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC03MDAsMTIgKzcwOSwxMSBAQAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgogQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldApAQCAtNzMxLDYgKzczOSw3IEBACiBDT05GSUdfTURfUkFJRDE9bQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQogIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KQEAgLTk2NSw2ICs5NzQsNyBAQAogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPW0KK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9bQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CkBAIC05NzcsNiArOTg3LDcgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogQ09ORklHX1NFUklBTF9DT1JFPW0KKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTEwMjcsMTIgKzEwMzgsMTkgQEAKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogQ09ORklHX1cxPW0KLUNPTkZJR19XMV9NQVRST1g9bQotQ09ORklHX1cxX0RTOTQ5MD1tCi0jIENPTkZJR19XMV9EUzk0OTBfQlJJREdFIGlzIG5vdCBzZXQKLUNPTkZJR19XMV9USEVSTT1tCi1DT05GSUdfVzFfU01FTT1tCi0jIENPTkZJR19XMV9EUzI0MzMgaXMgbm90IHNldAorCisjCisjIDEtd2lyZSBCdXMgTWFzdGVycworIworIyBDT05GSUdfVzFfTUFTVEVSX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfRFM5NDkwIGlzIG5vdCBzZXQKKworIworIyAxLXdpcmUgU2xhdmVzCisjCisjIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC0xMDQ1LDEwICsxMDYzLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC0xMDU3LDYgKzEwNzEsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorQ09ORklHX1VTQl9EQUJVU0I9bQogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTEwNjcsNiArMTA4Miw3IEBACiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogCkBAIC0xMDgwLDYgKzEwOTYsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTExNTEsOSArMTE2OCw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfS0JUQUI9bQogQ09ORklHX1VTQl9QT1dFUk1BVEU9bQotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotQ09ORklHX1VTQl9FR0FMQVg9bQorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWUVBTElOSz1tCiBDT05GSUdfVVNCX1hQQUQ9bQogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTE2OCwxNSArMTE4Myw2IEBACiBDT05GSUdfVVNCX01JQ1JPVEVLPW0KIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi1DT05GSUdfVVNCX0RBQlVTQj1tCi0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKIENPTkZJR19VU0JfQ0FUQz1tCkBAIC0xMjEzLDYgKzEyMTksNyBAQAogQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCiBDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9bQogQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCiBDT05GSUdfVVNCX1NFUklBTF9JUj1tCkBAIC0xMjM3LDYgKzEyNDQsNyBAQAogQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCiBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KIENPTkZJR19VU0JfU0VSSUFMX0hQNFg9bQogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCkBAIC0xMjgxLDE1ICsxMjg5LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9bQpAQCAtMTM1OCw3ICsxMzg0LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC0xMzc5LDcgKzE0MDQsNiBAQAogQ09ORklHX1FOWDRGU19GUz1tCiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTE1MDAsNiArMTUyNCw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKaW5kZXggZGE2OGMzZi4uZTM4OGEzZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjMyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToxNyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTgxLDYgKzgxLDggQEAKICMgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfVEJQUk9GIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQpAQCAtMTU4LDcgKzE2MCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNzUsNiArMTc2LDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE4OCwxMCArMTkwLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMjAzLDcgKzIwMSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTIxMiw2ICsyMDksNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjMxLDcgKzIyOSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX01NVT15CiAKICMKQEAgLTI0OSw2ICsyNDYsNyBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQlVJTERfRUxGNjQgaXMgbm90IHNldAogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yNjMsNiArMjYxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yODQsMTIgKzI4MywxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzAxLDYgKzMwMywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzEwLDExICszMTcsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMzNSw2ICszMzcsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTU4OSw2ICs1OTQsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02NDcsMTAgKzY1Myw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjc1LDYgKzY3Nyw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY5MiwxNSArNjk1LDMzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzQ2LDcgKzc2Nyw2IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODEyLDYgKzgzMiw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKICMgQ09ORklHX1NCMVhYWF9DT1JFTElTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcKaW5kZXggOWE5MzZkNy4uNmI4YTZhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjMzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToxNyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY0LDYgKzY0LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQpAQCAtMTE4LDExICsxMjAsMTEgQEAKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTQwLDcgKzE0Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1NCw2ICsxNTUsNyBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE2NywxMCArMTY5LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg1LDYgKzE4Myw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI5NiwxMiArMjk2LDYgQEAKICMKIAogIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCiAjIElTRE4gc3Vic3lzdGVtCiAjCiAKQEAgLTM5NywxMCArMzkxLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC00MjQsNiArNDE0LDcgQEAKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTQ0MCwxNCArNDMxLDMyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTQ4OSw3ICs0OTgsNiBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTU0Myw2ICs1NTEsOCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCmluZGV4IGMyZGVlMGQuLmRiYTBiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTo0MDozNCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIFR1ZSBBcHIgMjUgMDA6MDg6NDEgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02OCwxMiArNjgsMTQgQEAKICMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAogQ09ORklHX1RBTkJBQ19UQjAyMlg9eQogQ09ORklHX1RBTkJBQ19UQjAyMjY9eQotQ09ORklHX1RBTkJBQ19UQjAyODc9eQorIyBDT05GSUdfVEFOQkFDX1RCMDI4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1ZSNDFYWD15CiAjIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC05Miw3ICs5NCw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwNSwxOCArMTA3LDIxIEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTEzNyw3ICsxNDIsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTMsNiArMTU3LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4MSw3ICsxODIsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODksNiArMTg5LDkgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA4LDcgKzIxMSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjI2LDYgKzIyOCw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yMzUsMTEgKzIzOCwxMCBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjYzLDEyICsyNjUsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI4MCw2ICsyODUsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4OSwxMSArMjk5LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMTAsMTAgKzMxNSw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNTgsMTEgKzM2MCwxMiBAQAogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTM5NywxNCArNDAwLDE0IEBACiAjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKLUNPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIwotQ09ORklHX0lTQ1NJX1RDUD1tCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDI0LDcgKzQyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CkBAIC01MDcsOCArNTA5LDggQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk8xMDA9eQotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CkBAIC02MjUsNiArNjI3LDExIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1ZSNDFYWD15CitDT05GSUdfU0VSSUFMX1ZSNDFYWF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTY4NSwxMCArNjkyLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02OTcsNiArNzAwLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTcxOSw2ICs3MjMsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTc1Niw3ICs3NjEsNyBAQAogIwogIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCi1DT05GSUdfVVNCX1NUT1JBR0U9bQorQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CkBAIC03ODMsOSArNzg4LDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtODAwLDE1ICs4MDMsNiBAQAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtODE2LDcgKzgxMCw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTg2MCwxNSArODU0LDUwIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1ZSNDFYWD15CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTExLDcgKzk0MCw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTk1Miw5ICs5ODAsNyBAQAogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLUNPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDkzMiIKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKQEAgLTk3MCw0NiArOTk2LDcgQEAKICMKICMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKICMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCiAjIFByb2ZpbGluZyBzdXBwb3J0CkBAIC0xMDIzLDQ0ICsxMDEwLDIwIEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlWUjAsMTE1MjAwIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC0xMDY5LDkgKzEwMzIsOCBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCi1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCi1DT05GSUdfQ1JDMzI9bQotQ09ORklHX0xJQkNSQzMyQz1tCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZwppbmRleCBiZTk5MjYxLi41YTkyNGMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCi0jIEZyaSBKYW4gMjcgMTU6NDA6MzUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBUdWUgQXByIDI1IDAwOjA4OjU5IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjgsMTIgKzY4LDE0IEBACiAjIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKIENPTkZJR19UQU5CQUNfVEIwMjJYPXkKICMgQ09ORklHX1RBTkJBQ19UQjAyMjYgaXMgbm90IHNldAotQ09ORklHX1RBTkJBQ19UQjAyODc9eQorIyBDT05GSUdfVEFOQkFDX1RCMDI4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1ZSNDFYWD15CiAjIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC05Miw3ICs5NCw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwNSwxOCArMTA3LDIxIEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTEzNyw3ICsxNDIsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTMsNiArMTU3LDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjYsMTAgKzE3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE4MSw3ICsxODIsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODksNiArMTg5LDkgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjA4LDcgKzIxMSw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjI2LDYgKzIyOCw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yMzUsMTEgKzIzOCwxMCBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjY0LDEyICsyNjYsMTUgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI4MSw2ICsyODYsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI5MCwxMSArMzAwLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMTEsMTAgKzMxNiw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zMjUsMTIgKzMyNywxMiBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKICMKLUNPTkZJR19DT05ORUNUT1I9bQorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCkBAIC0zNjMsMTAgKzM2NSw4IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydApAQCAtNDQzLDMwICs0NDMsNyBAQAogIwogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotQ09ORklHX0VFUFJPMTAwPXkKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLUNPTkZJR184MTM5VE9PPXkKLUNPTkZJR184MTM5VE9PX1BJTz15Ci0jIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAotIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfTEFOX1NBQTk3MzAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTQ4Myw3ICs0NjAsNiBAQAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIApAQCAtNTEwLDE5ICs0ODYsOCBAQAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci1DT05GSUdfUFBQX0ZJTFRFUj15Ci1DT05GSUdfUFBQX0FTWU5DPW0KLUNPTkZJR19QUFBfU1lOQ19UVFk9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KLUNPTkZJR19QUFBfQlNEQ09NUD1tCi1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KLUNPTkZJR19TTElQPW0KLUNPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSVBfU01BUlQ9eQotQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKQEAgLTU4Myw2ICs1NDgsMTEgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjA3LDYgKzU3Nyw3IEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQyLDEwICs2MTMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY1NCw2ICs2MjEsNyBAQAogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNjc2LDYgKzY0NCw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9bQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtNzMxLDkgKzcwMCw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTc0NywxNSArNzE0LDYgQEAKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC04MDcsNDYgKzc2NSw2NSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9WUjQxWFg9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9bQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZTX0ZTPW0KLSMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19YRlNfRlM9eQotQ09ORklHX1hGU19FWFBPUlQ9eQotQ09ORklHX1hGU19RVU9UQT15Ci0jIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX1hGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9bQogQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX1FVT1RBQ1RMPXkKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15CkBAIC04NTUsMjAgKzgzMiwxNCBAQAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfSVNPOTY2MF9GUz15Ci1DT05GSUdfSk9MSUVUPXkKLUNPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CiAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwotQ09ORklHX0ZBVF9GUz1tCi1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODgwLDcgKzg1MSw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci1DT05GSUdfUkVMQVlGU19GUz1tCiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTkyMSw5ICs4OTEsNyBAQAogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLUNPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDkzMiIKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKQEAgLTkzOSw0NiArOTA3LDcgQEAKICMKICMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKICMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCiAjIFByb2ZpbGluZyBzdXBwb3J0CkBAIC05OTIsNDQgKzkyMSwyMCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5VlIwLDExNTIwMCBpcD1hbnkgcm9vdD0vZGV2L25mcyIKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtMTAzOCw5ICs5NDMsOCBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCi1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPW0KKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjE1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTEzMiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMgorIyBUdWUgQXByIDI1IDAwOjA5OjE3IDIwMDYKKyMKK0NPTkZJR19NSVBTPXkKKworIworIyBNYWNoaW5lIHNlbGVjdGlvbgorIworIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0MgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAorIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9WUjQxWFg9eQorIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FFTVUgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU0lPX0U1NSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fV09SS1BBRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKK0NPTkZJR19UQU5CQUNfVEIwMjJYPXkKKyMgQ09ORklHX1RBTkJBQ19UQjAyMjYgaXMgbm90IHNldAorQ09ORklHX1RBTkJBQ19UQjAyODc9eQorIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CisjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAorQ09ORklHX1BDSV9WUjQxWFg9eQorIyBDT05GSUdfVlJDNDE3MyBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CitDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19JUlFfQ1BVPXkKK0NPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKKworIworIyBDUFUgc2VsZWN0aW9uCisjCisjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfVlI0MVhYPXkKKyMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCitDT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCitDT05GSUdfSFdfSEFTX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19NTVU9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorCisjCisjIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wKKyMKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPW0KK0NPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCitDT05GSUdfVENQX0NPTkdfSFRDUD1tCisjIENPTkZJR19UQ1BfQ09OR19IU1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19IWUJMQSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19WRUdBUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TSUlNQUdFPXkKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCitDT05GSUdfSUVFRTEzOTQ9bQorCisjCisjIFN1YnN5c3RlbSBPcHRpb25zCisjCisjIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFMTM5NF9FWFRSQV9DT05GSUdfUk9NUz15CitDT05GSUdfSUVFRTEzOTRfQ09ORklHX1JPTV9JUDEzOTQ9eQorIyBDT05GSUdfSUVFRTEzOTRfRVhQT1JUX0ZVTExfQVBJIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIFRleGFzIEluc3RydW1lbnRzIFBDSUx5bnggcmVxdWlyZXMgSTJDCisjCitDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9bQorCisjCisjIFByb3RvY29sIERyaXZlcnMKKyMKK0NPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X1NCUDI9bQorIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9SQVdJTz1tCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CitDT05GSUdfUjgxNjk9eQorIyBDT05GSUdfUjgxNjlfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfVEFOQkFDX1RCMDIxOSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorQ09ORklHX0dQSU9fVlI0MVhYPXkKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorQ09ORklHX0ZCX1NNSVZHWD15CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPW0KKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD1tCisjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfWEZTX0ZTPXkKK0NPTkZJR19YRlNfUVVPVEE9eQorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9bQorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVZSMCwxMTUyMDAgaXA9YW55IHJvb3Q9L2Rldi9uZnMiCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCmluZGV4IDcxMzJlMjkuLmFjNzc2NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjM2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgVHVlIEFwciAyNSAwMDowOTozMyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTcwLDYgKzcwLDggQEAKICMgQ09ORklHX1ZJQ1RPUl9NUEMzMFggaXMgbm90IHNldAogIyBDT05GSUdfWkFPX0NBUENFTExBIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC04OCw3ICs5MCw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorQ09ORklHX0NQVV9WUjQxWFg9eQogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwMSwxOCArMTAzLDIxIEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTEzMyw3ICsxMzgsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNDksNiArMTUzLDcgQEAKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC0xNjIsMTAgKzE2Nyw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE3Nyw3ICsxNzgsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC0xODUsNiArMTg1LDkgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjIwLDYgKzIyMyw3IEBACiAjIENPTkZJR19JODIzNjUgaXMgbm90IHNldAogIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBX1BST0JFPXkKK0NPTkZJR19QQ01DSUFfVlJDNDE3MT15CiAKICMKICMgUENJIEhvdHBsdWcgU3VwcG9ydApAQCAtMjMwLDYgKzIzNCw3IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yMzksNiArMjQ0LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yNTgsMTIgKzI2NCwxNSBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc1LDYgKzI4NCwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMjg0LDExICsyOTgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwNSwxMCArMzE0LDggQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzQ3LDEwICszNTQsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPW0KIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydApAQCAtNDY4LDcgKzQ3NywzOCBAQAogIwogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1JBRElPPXkKKyMgQ09ORklHX05FVF9XSVJFTEVTU19SVE5FVExJTksgaXMgbm90IHNldAorCisjCisjIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCisjCisjIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XQVZFTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX0hFUk1FUz1tCisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0CisjCitDT05GSUdfUENNQ0lBX0hFUk1FUz1tCisjIENPTkZJR19QQ01DSUFfU1BFQ1RSVU0gaXMgbm90IHNldAorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1dJUkVMRVNTPXkKIAogIwogIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNTEyLDEwICs1NTIsNyBAQAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldApAQCAtNTMzLDExICs1NzAsNyBAQAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Niw2ICs1ODksMTAgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYPXkKK0NPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU2OCwyMCArNjA1LDcgQEAKICMKICMgV2F0Y2hkb2cgQ2FyZHMKICMKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFQgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CkBAIC01OTcsNiArNjIxLDcgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTYzMiwxMCArNjU3LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC02NjcsNiArNjg4LDcgQEAKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKQEAgLTY4MywxNCArNzA1LDMyIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcxMCw3ICs3NTAsNyBAQAogQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9bQogCkBAIC03MzMsMTAgKzc3Myw5IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MDIsNDQgKzg0MSwyMCBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVZSMCwxOTIwMCBtZW09MTZNIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC04NDksOCArODY0LDYgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwppbmRleCA2NzQ1Nzg1Li5iNTJkNzA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQotIyBGcmkgSmFuIDI3IDE1OjQwOjM3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKKyMgTW9uIEFwciAyNCAxNDo1MToyMCAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTY1LDYgKzY1LDggQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogIyBDT05GSUdfSFlQRVJUUkFOU1BPUlQgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMTYsNyArMTE4LDYgQEAKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQwLDcgKzE0MSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE1Nyw2ICsxNTcsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTE3MCwxMCArMTcxLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg0LDcgKzE4MSw2IEBACiAjCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtMTk0LDYgKzE5MCw4IEBACiAjIEJsb2NrIGxheWVyCiAjCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIxMyw3ICsyMTEsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIApAQCAtMjQxLDYgKzIzOCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD1tCiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjYxLDE2ICsyNTksMTkgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKQEAgLTM0MCwxMCArMzQxLDkgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIwpAQCAtNDMzLDYgKzQzMyw3IEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNDk3LDYgKzQ5OCw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNTA2LDYgKzUwOCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNTYzLDEwICs1NjYsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs1OTAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02MDgsMTIgKzYwOCwyOSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jawogIwogCiAjCkBAIC02NTYsNyArNjczLDYgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLUNPTkZJR19SRUxBWUZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L01ha2VmaWxlIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZQppbmRleCA0ODgyMDZiLi4zMDRjMDIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvTWFrZWZpbGUKQEAgLTMsNiArMyw2IEBACiAjIHVuZGVyIExpbnV4LgogIwogCi1vYmoteQkJCSs9IHNldHVwLm8gaXJxLm8gaW50LWhhbmRsZXIubyBuaWxlNF9waWMubworb2JqLXkJCQkrPSBzZXR1cC5vIGlycS5vIG5pbGU0X3BpYy5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4NjQ0MS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqICBhcmNoL21pcHMvZGRiNTA3NC9pbnQtaGFuZGxlci5TIC0tIE5FQyBEREIgVnJjLTUwNzQgaW50ZXJydXB0IGhhbmRsZXIKLSAqCi0gKiAgQmFzZWQgb24gYXJjaC9taXBzL3NnaS9rZXJuZWwvaW5keUlSUS5TCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qIEEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKLSAqCi0gKiAxKSBXZSBoYW5kbGUgb25lIGludGVycnVwdCBhbmQgcmV0dXJuLCBzaXR0aW5nIGluIGEgbG9vcCBhbmQgbW92aW5nIGFjcm9zcwotICogICAgYWxsIHRoZSBwZW5kaW5nIElSUSBiaXRzIGluIHRoZSBjYXVzZSByZWdpc3RlciBpcyBfTk9UXyB0aGUgYW5zd2VyLCB0aGUKLSAqICAgIGNvbW1vbiBjYXNlIGlzIG9uZSBwZW5kaW5nIElSUSBzbyBvcHRpbWl6ZSBpbiB0aGF0IGRpcmVjdGlvbi4KLSAqCi0gKiAyKSBXZSBuZWVkIG5vdCBjaGVjayBhZ2FpbnN0IGJpdHMgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBJUlEgbWFzaywgdGhhdAotICogICAgd291bGQgbWFrZSB0aGlzIHJvdXRpbmUgc2xvdyBhcyBoZWxsLgotICoKLSAqIDMpIExpbnV4IG9ubHkgdGhpbmtzIGluIHRlcm1zIG9mIGFsbCBJUlFzIG9uIG9yIGFsbCBJUlFzIG9mZiwgbm90aGluZyBpbgotICogICAgYmV0d2VlbiBsaWtlIEJTRCBzcGwoKSBicmFpbi1kYW1hZ2UuCi0gKgotICogRnVydGhlcm1vcmUsIHRoZSBJUlFzIG9uIHRoZSBJTkRZIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMKLSAqIHdoaWNoIHdlIGRvbid0IHVzZSBhdCBhbGwpIGxpa2U6Ci0gKgotICoJTUlQUyBJUlEJU291cmNlCi0gKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KLSAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDIgICAgICAgIExvY2FsIElSUSBsZXZlbCB6ZXJvCi0gKiAgICAgICAgICAgICAzICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgb25lCi0gKiAgICAgICAgICAgICA0ICAgICAgICA4MjU0IFRpbWVyIHplcm8KLSAqICAgICAgICAgICAgIDUgICAgICAgIDgyNTQgVGltZXIgb25lCi0gKiAgICAgICAgICAgICA2ICAgICAgICBCdXMgRXJyb3IKLSAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCi0gKgotICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgotICoKLSAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCi0gKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSB6ZXJvCi0gKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSBvbmUKLSAqICAgICAgICAgICAgICAgICAgQnVzIEVycm9yCi0gKiAgICAgICAgICAgICAgICAgIDgyNTQgVGltZXIgemVybwotICogTG93ZXN0ICAtLS0tICAgICA4MjU0IFRpbWVyIG9uZQotICoKLSAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQotICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgotICovCi0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQlORVNURUQoZGRiSVJRLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCS5zZXQJYXQKLQltZmMwCXMwLCBDUDBfQ0FVU0UJCSMgZ2V0IGlycSBtYXNrCi0KLSNpZiAxCi0JbWZjMAl0MixDUDBfU1RBVFVTCQkjIGdldCBlbmFibGVkIGludGVycnVwdHMKLQlhbmQJczAsdDIJCQkjIGlzb2xhdGUgYWxsb3dlZCBvbmVzCi0jZW5kaWYKLQkvKiBGaXJzdCB3ZSBjaGVjayBmb3IgcjRrIGNvdW50ZXIvdGltZXIgSVJRLiAqLwotCWFuZGkJYTAsIHMwLCBDQVVTRUZfSVAyCSMgZGVsYXkgc2xvdCwgY2hlY2sgbG9jYWwgbGV2ZWwgemVybwotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIENBVVNFRl9JUDMJIyBkZWxheSBzbG90LCBjaGVjayBsb2NhbCBsZXZlbCBvbmUKLQotCS8qIFdoZWVlLCBsb2NhbCBsZXZlbCB6ZXJvIGludGVycnVwdC4gKi8KLQlqYWwJZGRiX2xvY2FsMF9pcnFkaXNwYXRjaAotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotCi0xOgotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIENBVVNFRl9JUDYJIyBkZWxheSBzbG90LCBjaGVjayBidXMgZXJyb3IKLQotCS8qIFdoZWVlLCBsb2NhbCBsZXZlbCBvbmUgaW50ZXJydXB0LiAqLwotCW1vdmUJYTAsIHNwCi0JamFsCWRkYl9sb2NhbDFfaXJxZGlzcGF0Y2gKLQkgbm9wCi0KLQlqCXJldF9mcm9tX2lycQotCSBub3AKLQotMToKLQliZXEJYTAsIHplcm8sIDFmCi0JIG5vcAotCi0JLyogV2hlZWUsIGFuIGFzeW5jaHJvbm91cyBidXMgZXJyb3IuLi4gKi8KLQltb3ZlCWEwLCBzcAotCWphbAlkZGJfYnVzZXJyb3JfaXJxCi0JIG5vcAotCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0KLTE6Ci0JLyogSGVyZSBieSBtaXN0YWtlPyAgVGhpcyBpcyBwb3NzaWJsZSwgd2hhdCBjYW4gaGFwcGVuCi0JICogaXMgdGhhdCBieSB0aGUgdGltZSB3ZSB0YWtlIHRoZSBleGNlcHRpb24gdGhlIElSUQotCSAqIHBpbiBnb2VzIGxvdywgc28ganVzdCBsZWF2ZSBpZiB0aGlzIGlzIHRoZSBjYXNlLgotCSAqLwotCWFuZGkJYTAsIHMwLCAoQ0FVU0VGX0lQNCB8IENBVVNFRl9JUDUpCi0JYmVxCWEwLCB6ZXJvLCAxZgotCi0JLyogTXVzdCBiZSBvbmUgb2YgdGhlIDgyNTQgdGltZXJzLi4uICovCi0JbW92ZQlhMCwgc3AKLQlqYWwJZGRiXzgyNTR0aW1lcl9pcnEKLQkgbm9wCi0xOgotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCUVORChkZGJJUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2lycS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9pcnEuYwppbmRleCA0NTA4OGExLi42MGMwODdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2lycS5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1MDc0Lmg+CiAKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZGJJUlEodm9pZCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIiwgTlVMTCwgTlVMTCB9OwogCiAjZGVmaW5lIE0xNTQzX1BOUF9DT05GSUcJMHgwM2YwCS8qIFBuUCBDb25maWcgUG9ydCAqLwpAQCAtOTAsNyArODgsNyBAQAogCiB9CiAKLXZvaWQgZGRiX2xvY2FsMF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGRkYl9sb2NhbDBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTMyIG1hc2s7CiAJaW50IG5pbGU0X2lycTsKQEAgLTExOCwyOSArMTE2LDQxIEBACiAJCX0KIH0KIAotdm9pZCBkZGJfbG9jYWwxX2lycWRpc3BhdGNoKHZvaWQpCitzdGF0aWMgdm9pZCBkZGJfbG9jYWwxX2lycWRpc3BhdGNoKHZvaWQpCiB7CiAJcHJpbnRrKCJkZGJfbG9jYWwxX2lycWRpc3BhdGNoIGNhbGxlZFxuIik7CiB9CiAKLXZvaWQgZGRiX2J1c2Vycm9yX2lycSh2b2lkKQorc3RhdGljIHZvaWQgZGRiX2J1c2Vycm9yX2lycSh2b2lkKQogewogCXByaW50aygiZGRiX2J1c2Vycm9yX2lycSBjYWxsZWRcbiIpOwogfQogCi12b2lkIGRkYl84MjU0dGltZXJfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBkZGJfODI1NHRpbWVyX2lycSh2b2lkKQogewogCXByaW50aygiZGRiXzgyNTR0aW1lcl9pcnEgY2FsbGVkXG4iKTsKIH0KIAorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikKKwkJZGRiX2xvY2FsMF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykKKwkJZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCgpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQlkZGJfYnVzZXJyb3JfaXJxKCk7CisJZWxzZSBpZiAocGVuZGluZyAmIChDQVVTRUZfSVA0IHwgQ0FVU0VGX0lQNSkpCisJCWRkYl84MjU0dGltZXJfaXJxKCk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAkvKiBzZXR1cCBjYXNjYWRlIGludGVycnVwdHMgKi8KIAlzZXR1cF9pcnEoTklMRTRfSVJRX0JBU0UgICsgTklMRTRfSU5UX0lOVEUsICZpcnFfY2FzY2FkZSk7CiAJc2V0dXBfaXJxKENQVV9JUlFfQkFTRSArIENQVV9OSUxFNF9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwogCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgZGRiSVJRKTsKLQogCW5pbGU0X2lycV9zZXR1cChOSUxFNF9JUlFfQkFTRSk7CiAJbTE1NDNfaXJxX3NldHVwKCk7CiAJaW5pdF9pODI1OV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9NYWtlZmlsZQppbmRleCA2MWVlYzM2Li5hYjAzMTJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjIHVuZGVyIExpbnV4LgogIwogCi1vYmoteQkJCSs9IHNldHVwLm8gaXJxLm8gaW50LWhhbmRsZXIubyBuaWxlNF9waWMubyB2cmM1NDc2X2lycS5vCitvYmoteQkJCSs9IHNldHVwLm8gaXJxLm8gbmlsZTRfcGljLm8gdnJjNTQ3Nl9pcnEubwogb2JqLSQoQ09ORklHX0tHREIpCSs9IGRiZ19pby5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvZGJnX2lvLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2RiZ19pby5jCmluZGV4IDg1ZTllNTAuLmYyMjk2YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9kYmdfaW8uYwpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KICAgICAgICAgVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLSAgICAgICAgLyogc2V0IHVwIGJ1YWQgcmF0ZSAqLworICAgICAgICAvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICB1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmMyOTJlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3IgZGRiNTQ3NgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTQ3Ni5oPgotCi0vKgotICogZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZCAtCi0gKiBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiBUaGVuIGNoZWNrIGZvciBzZXJpYWwgSVJRIGFuZCBmYWxsIHRocm91Z2guCi0gKi8KLQkuYWxpZ24JNQotCU5FU1RFRChkZGI1NDc2X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0JLnNldAlhdAotCS5zZXQJbm9yZW9yZGVyCi0JbWZjMAl0MCwgQ1AwX0NBVVNFCi0JbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JYW5kCXQwLCB0MgotCi0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNyAgICAgLyogY3B1IHRpbWVyICovCi0gICAgICAgIGJuZXogICAgdDEsIGxsX2NwdV9pcDcKLSAgICAgICAgYW5kaSAgICB0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIHZyYzU0NzYgJiBpODI1OSAqLwotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXAyCi0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQMwotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXAzCi0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNAotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA0Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNQotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA1Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQNgotICAgICAgICBibmV6ICAgIHQxLCBsbF9jcHVfaXA2Ci0gICAgICAgIGFuZGkgICAgdDEsIHQwLCBTVEFUVVNGX0lQMCAgICAgLyogc29mdHdhcmUgaW50IDAgKi8KLSAgICAgICAgYm5leiAgICB0MSwgbGxfY3B1X2lwMAotICAgICAgICBhbmRpICAgIHQxLCB0MCwgU1RBVFVTRl9JUDEgICAgIC8qIHNvZnR3YXJlIGludCAxICovCi0gICAgICAgIGJuZXogICAgdDEsIGxsX2NwdV9pcDEKLSAgICAgICAgbm9wCi0KLQkuc2V0CXJlb3JkZXIKLQotCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkvLyBqCXNwdXJpb3VzX2ludGVycnVwdAotCW1vdmUgCWEwLCBzcAotCWphbAl2cmM1NDc2X2lycV9kaXNwYXRjaAotCWoJcmV0X2Zyb21faXJxCi0Jbm9wCi0KLQkuYWxpZ24JNQotCi1sbF9jcHVfaXAwOgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyAwCi0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwMToKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgMQotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDI6CQkvKiBqdW1wIHRvIHNlY29uZC1sZXZlbCBkaXNwYXRjaGluZyAqLwotCW1vdmUJYTAsIHNwCi0JamFsCXZyYzU0NzZfaXJxX2Rpc3BhdGNoCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwMzoKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgMwotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDQ6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDQKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXA1OgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyA1Ci0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1X2lwNjoKLQlsaQlhMCwgQ1BVX0lSUV9CQVNFICsgNgotCW1vdmUJYTEsIHNwCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KLWxsX2NwdV9pcDc6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDcKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi0JRU5EKGRkYjU0NzZfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jCmluZGV4IDUzODhiNTguLjc1ODNhMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvaXJxLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pcnEuYwpAQCAtMTEwLDExICsxMTAsMzYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIiwgTlVMTCwgTlVMTCB9Owogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Vycm9yID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJlcnJvciIsIE5VTEwsIE5VTEwgfTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZGI1NDc2X2hhbmRsZV9pbnQodm9pZCk7CiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICppcnFhY3Rpb24pOwogZXh0ZXJuIHZvaWQgbWlwc19jcHVfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKIGV4dGVybiB2b2lkIHZyYzU0NzZfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKIAorZXh0ZXJuIHZvaWQgdnJjNTQ3Nl9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJdnJjNTQ3Nl9pcnFfZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNCwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyAxLCByZWdzKTsKKworCXZyYzU0NzZfaXJxX2Rpc3BhdGNoKHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi8KQEAgLTEzNyw3ICsxNjIsNCBAQAogCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfTEJSVCwgJmlycV9lcnJvcik7CiAJc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9QQ0lTLCAmaXJxX2Vycm9yKTsKIAlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX1BDSSwgJmlycV9lcnJvcik7Ci0KLQkvKiBzZXR1cCB0aGUgZ3JhbmRwYSBpbnRyIHZlY3RvciAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGRkYjU0NzZfaGFuZGxlX2ludCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3ZyYzU0NzZfaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3ZyYzU0NzZfaXJxLmMKaW5kZXggZjY2ZmU1Yi4uYTNjNWU3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni92cmM1NDc2X2lycS5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvdnJjNTQ3Nl9pcnEuYwpAQCAtNzcsMTEgKzc3LDkgQEAKIH0KIAogCi1hc21saW5rYWdlIHZvaWQKK3ZvaWQKIHZyYzU0NzZfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWV4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdCh2b2lkKTsKLQogCXUzMiBtYXNrOwogCWludCBuaWxlNF9pcnE7CiAKQEAgLTEwNyw1ICsxMDUsNSBAQAogCQkJcmV0dXJuOwogCQl9CiAJfQotCXNwdXJpb3VzX2ludGVycnVwdCgpOworCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvTWFrZWZpbGUgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L01ha2VmaWxlCmluZGV4IGI3OWI0M2MuLmVhNjg4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE5FQyBEREItVnJjNTQ3NyBib2FyZAogIwogCi1vYmoteQkgCQkrPSBpbnQtaGFuZGxlci5vIGlycS5vIGlycV81NDc3Lm8gc2V0dXAubyBsY2Q0NDc4MC5vCitvYmoteQkgCQkrPSBpcnEubyBpcnFfNTQ3Ny5vIHNldHVwLm8gbGNkNDQ3ODAubwogCiBvYmotJChDT05GSUdfUlVOVElNRV9ERUJVRykgCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYl9pby5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNTAyYTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIGRkYjU0NzcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1NDc3Lmg+Ci0KLS8qCi0gKiBmaXJzdCBsZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3Igb2NlbG90IGJvYXJkIC0KLSAqIFdlIGNoZWNrIGZvciB0aGUgdGltZXIgZmlyc3QsIHRoZW4gY2hlY2sgUENJIGludHMgQSBhbmQgRC4KLSAqIFRoZW4gY2hlY2sgZm9yIHNlcmlhbCBJUlEgYW5kIGZhbGwgdGhyb3VnaC4KLSAqLwotCS5hbGlnbgk1Ci0JTkVTVEVEKGRkYjU0NzdfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JLnNldAlub3Jlb3JkZXIKLQltZmMwCXQwLCBDUDBfQ0FVU0UKLQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQlhbmQJdDAsIHQyCi0KLQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyICovCi0JYm5legl0MSwgbGxfY3B1dGltZXJfaXJxCi0JYW5kaQl0MSwgdDAsIChTVEFUVVNGX0lQMiB8IFNUQVRVU0ZfSVAzIHwgU1RBVFVTRl9JUDQgfCBTVEFUVVNGX0lQNSB8IFNUQVRVU0ZfSVA2ICkKLQlibmV6CXQxLCBsbF92cmM1NDc3X2lycQotCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiBzb2Z0d2FyZSBpbnQgMCAqLwotCWJuZXoJdDEsIGxsX2NwdV9pcDAKLQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEJLyogc29mdHdhcmUgaW50IDEgKi8KLQlibmV6CXQxLCBsbF9jcHVfaXAxCi0Jbm9wCi0JLnNldAlyZW9yZGVyCi0KLQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JaglzcHVyaW91c19pbnRlcnJ1cHQKLQlub3AKLQlFTkQoZGRiNTQ3N19oYW5kbGVfaW50KQotCi0JLmFsaWduCTUKLQotbGxfdnJjNTQ3N19pcnE6Ci0JbW92ZQlhMCwgc3AKLQlqYWwJdnJjNTQ3N19pcnFfZGlzcGF0Y2gKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDcKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi0KLWxsX2NwdV9pcDA6Ci0JbGkJYTAsIENQVV9JUlFfQkFTRSArIDAKLQltb3ZlCWExLCBzcAotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHVfaXAxOgotCWxpCWEwLCBDUFVfSVJRX0JBU0UgKyAxCi0JbW92ZQlhMSwgc3AKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jCmluZGV4IDlmZmUxYTkxLi5kZTQzM2NmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnEuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jCkBAIC03NSw3ICs3NSw2IEBACiAKIGV4dGVybiB2b2lkIHZyYzU0NzdfaXJxX2luaXQodTMyIGJhc2UpOwogZXh0ZXJuIHZvaWQgbWlwc19jcHVfaXJxX2luaXQodTMyIGJhc2UpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZGI1NDc3X2hhbmRsZV9pbnQodm9pZCk7CiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICppcnFhY3Rpb24pOwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUiLCBOVUxMLCBOVUxMIH07CiAKQEAgLTEzNSw5ICsxMzQsNiBAQAogCS8qIHNldHVwIGNhc2NhZGUgaW50ZXJydXB0cyAqLwogCXNldHVwX2lycShWUkM1NDc3X0lSUV9CQVNFICsgVlJDNTQ3N19JODI1OV9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwogCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyBDUFVfVlJDNTQ3N19DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwotCi0JLyogaG9vayB1cCB0aGUgZmlyc3QtbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBkZGI1NDc3X2hhbmRsZV9pbnQpOwogfQogCiB1OCBpODI1OV9pbnRlcnJ1cHRfYWNrKHZvaWQpCkBAIC0xNTksNyArMTU1LDcgQEAKICAqIHRoZSBmaXJzdCBsZXZlbCBpbnQtaGFuZGxlciB3aWxsIGp1bXAgaGVyZSBpZiBpdCBpcyBhIHZyYzU0NzcgaXJxCiAgKi8KICNkZWZpbmUJTlVNXzU0NzdfSVJRUwkzMgotYXNtbGlua2FnZSB2b2lkCitzdGF0aWMgdm9pZAogdnJjNTQ3N19pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTMyIGludFN0YXR1czsKQEAgLTE5NywzICsxOTMsMjEgQEAKIAkJfQogCX0KIH0KKworI2RlZmluZSBWUjU0NzdJTlRTIChTVEFUVVNGX0lQMnxTVEFUVVNGX0lQM3xTVEFUVVNGX0lQNHxTVEFUVVNGX0lQNXxTVEFUVVNGX0lQNikKKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA3LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgVlI1NDc3SU5UUykKKwkJdnJjNTQ3N19pcnFfZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoQ1BVX0lSUV9CQVNFLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyAxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcva2dkYl9pby5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMKaW5kZXggMWQxOGQ1OS4uMzg1YmJkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAgICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0gICAgICAgIC8qIHNldCB1cCBidWFkIHJhdGUgKi8KKyAgICAgICAgLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogICAgICAgICB7CiAgICAgICAgICAgICAgICAgdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvYm9vdC9kZWNzdGF0aW9uLmMgYi9hcmNoL21pcHMvZGVjL2Jvb3QvZGVjc3RhdGlvbi5jCmluZGV4IDU2ZmQ0MjcuLjRkYjhiYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvYm9vdC9kZWNzdGF0aW9uLmMKKysrIGIvYXJjaC9taXBzL2RlYy9ib290L2RlY3N0YXRpb24uYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBhcmNoL21pcHMvZGVjL2RlY3N0YXRpb24uYwogICovCisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNkZWZpbmUgUkVMT0MKICNkZWZpbmUgSU5JVFJECkBAIC0yNCw3ICsyNSw3IEBACiAjZGVmaW5lIElOSVRSRF9TVEFSVCAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDIxOCkpCiAjZGVmaW5lIElOSVRSRF9TSVpFICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MjFjKSkKIAotZXh0ZXJuIGludCBfZnRleHQsIF9lbmQ7CQkvKiBiZWdpbiBhbmQgZW5kIG9mIGtlcm5lbCBpbWFnZSAqLworZXh0ZXJuIGludCBfZnRleHQ7CQkJLyogYmVnaW4gYW5kIGVuZCBvZiBrZXJuZWwgaW1hZ2UgKi8KIGV4dGVybiB2b2lkIGtlcm5lbF9lbnRyeShpbnQsIGNoYXIgKiosIHVuc2lnbmVkIGxvbmcsIGludCAqKTsKIAogdm9pZCAqIG1lbWNweSh2b2lkICogZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvZGVjL2ludC1oYW5kbGVyLlMKaW5kZXggNDFmYTM3Mi4uZThlYzkzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9pbnQtaGFuZGxlci5TCisrKyBiL2FyY2gvbWlwcy9kZWMvaW50LWhhbmRsZXIuUwpAQCAtMzYsNyArMzYsNyBAQAogCQkudGV4dAogCQkuc2V0CW5vcmVvcmRlcgogLyoKLSAqIGRlY3N0YXRpb25faGFuZGxlX2ludDogSW50ZXJydXB0IGhhbmRsZXIgZm9yIERFQ3N0YXRpb25zCisgKiBwbGF0X2lycV9kaXNwYXRjaDogSW50ZXJydXB0IGhhbmRsZXIgZm9yIERFQ3N0YXRpb25zCiAgKgogICogV2UgZm9sbG93IHRoZSBtb2RlbCBpbiB0aGUgSW5keSBpbnRlcnJ1cHQgY29kZSBieSBEYXZpZCBNaWxsZXIsIHdoZXJlIGhlCiAgKiBzYXlzOiBhIGxvdCBvZiBjb21wbGljYXRpb24gaGVyZSBpcyB0YWtlbiBhd2F5IGJlY2F1c2U6CkBAIC0xMjUsMTEgKzEyNSw3IEBACiAgKiBqdXN0IHRha2UgYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgogICovCiAJCS5hbGlnbgk1Ci0JCU5FU1RFRChkZWNzdGF0aW9uX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHJhKQotCQkuc2V0CW5vYXQKLQkJU0FWRV9BTEwKLQkJQ0xJCQkJCSMgVEVTVDogaW50ZXJydXB0cyBzaG91bGQgYmUgb2ZmCi0JCS5zZXQJYXQKKwkJTkVTVEVEKHBsYXRfaXJxX2Rpc3BhdGNoLCBQVF9TSVpFLCByYSkKIAkJLnNldAlub3Jlb3JkZXIKIAogCQkvKgpAQCAtMjgyLDkgKzI3OCwxMSBAQAogI2VuZGlmCiAKIHNwdXJpb3VzOgotCQlqCXNwdXJpb3VzX2ludGVycnVwdAorCQlqYWwJc3B1cmlvdXNfaW50ZXJydXB0CiAJCSBub3AKLQkJRU5EKGRlY3N0YXRpb25faGFuZGxlX2ludCkKKwkJaglyZXRfZnJvbV9pcnEKKwkJIG5vcAorCQlFTkQocGxhdF9pcnFfZGlzcGF0Y2gpCiAKIC8qCiAgKiBHZW5lcmljIHVuaW1wbGVtZW50ZWQgaW50ZXJydXB0IHJvdXRpbmVzIC0tIGNwdV9tYXNrX25yX3RibApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9zZXR1cC5jIGIvYXJjaC9taXBzL2RlYy9zZXR1cC5jCmluZGV4IDdjMWNhOGY2Li5hZDVkNDM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2RlYy9zZXR1cC5jCkBAIC00OCw4ICs0OCw2IEBACiBleHRlcm4gdm9pZCBkZWNfbWFjaGluZV9wb3dlcl9vZmYodm9pZCk7CiBleHRlcm4gaXJxcmV0dXJuX3QgZGVjX2ludHJfaGFsdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkZWNzdGF0aW9uX2hhbmRsZV9pbnQodm9pZCk7Ci0KIHVuc2lnbmVkIGxvbmcgZGVjX2tuX3Nsb3RfYmFzZSwgZGVjX2tuX3Nsb3Rfc2l6ZTsKIAogRVhQT1JUX1NZTUJPTChkZWNfa25fc2xvdF9iYXNlKTsKQEAgLTc0NCw3ICs3NDIsNiBAQAogCQlwYW5pYygiRG9uJ3Qga25vdyBob3cgdG8gc2V0IHRoaXMgdXAhIik7CiAJCWJyZWFrOwogCX0KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBkZWNzdGF0aW9uX2hhbmRsZV9pbnQpOwogCiAJLyogRnJlZSB0aGUgRlBVIGludGVycnVwdCBpZiB0aGUgZXhjZXB0aW9uIGlzIHByZXNlbnQuICovCiAJaWYgKCFjcHVfaGFzX25vZnB1ZXgpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWZjb25maWcgYi9hcmNoL21pcHMvZGVmY29uZmlnCmluZGV4IDQyZDVjZDcuLjYwN2UyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKLSMgRnJpIEphbiAyNyAxNTozOTo1MSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMyCisjIE1vbiBBcHIgMjQgMTQ6NTA6NTQgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC02NCw2ICs2NCw4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQpAQCAtMTIxLDcgKzEyMyw2IEBACiBDT05GSUdfSVAyMl9DUFVfU0NBQ0hFPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQzLDcgKzE0NCw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTE2MCw2ICsxNjAsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE3MywxMCArMTc0LDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTg4LDcgKzE4NSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTE5Nyw2ICsxOTMsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yNDIsNiArMjQwLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yNjQsNiArMjYzLDcgQEAKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMzA1LDkgKzMwNSwxMiBAQAogQ09ORklHX0lQX1ZTX0ZUUD1tCiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX05FVEZJTFRFUj15CkBAIC0zMzAsMTEgKzMzMywxNCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTM1NywyMCArMzYzLDE5IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KIENPTkZJR19JUF9ORl9QUFRQPW0KK0NPTkZJR19JUF9ORl9IMzIzPW0KIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQpAQCAtMzg4LDYgKzM5Myw3IEBACiBDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQogQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQogQ09ORklHX0lQX05GX05BVF9QUFRQPW0KK0NPTkZJR19JUF9ORl9OQVRfSDMyMz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTQwOCwxMiArNDE0LDEwIEBACiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0FIPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCkBAIC00MzUsNiArNDM5LDExIEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC00NDQsMTEgKzQ1Myw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRElWRVJUPXkKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTUwOCw2ICs1MTIsOSBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTU0Niw3ICs1NTMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC04MTIsMTAgKzgxOSw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODU3LDYgKzg2MCw3IEBACiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCkBAIC04NzMsMTQgKzg3NywzMiBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz1tCkBAIC05NDQsNyArOTY2LDYgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX1JFTEFZRlNfRlM9bQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC05NjMsNyArOTg0LDYgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwpAQCAtMTA3OCw2ICsxMDk4LDcgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL01ha2VmaWxlCmluZGV4IDU4YzAyZjkuLmNkODY4ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL01ha2VmaWxlCkBAIC02LDQgKzYsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEdhbGlsZW8gRVY5NjEwMCBib2FyZC4KICMKIAotb2JqLXkJCSs9IGluaXQubyBpcnEubyBwdXRzLm8gcmVzZXQubyB0aW1lLm8gaW50LWhhbmRsZXIubyBzZXR1cC5vCitvYmoteQkJKz0gaW5pdC5vIGlycS5vIHB1dHMubyByZXNldC5vIHRpbWUubyBzZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY0ZDEwYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCS5zZXQJbm9hdAotCS5hbGlnbgk1Ci0KLU5FU1RFRChldjk2MTAwSVJRLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQkJCQkjIEltcG9ydGFudDogbWFyayBLRVJORUwgbW9kZSAhCi0KLQltZmMwCXQwLCBDUDBfQ0FVU0UJCSMgZ2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCW1mYzAJdDEsIENQMF9TVEFUVVMJCSMgZ2V0IGVuYWJsZWQgaW50ZXJydXB0cwotCWFuZAl0MCwgdDEJCQkjIGlzb2xhdGUgYWxsb3dlZCBvbmVzCi0KLQkjIEZJWCBNRSBhZGQgUjcwMDAgZXh0ZW5zaW9ucwotCWFuZGkJdDAsMHhmZjAwCQkjIGlzb2xhdGUgcGVuZGluZyBiaXRzCi0JYW5kaQlhMCwgdDAsIENBVVNFRl9JUDcKLQliZXEJYTAsIHplcm8sIDFmCi0JbW92ZQlhMCwgc3AKLQlqYWwJbWlwc190aW1lcl9pbnRlcnJ1cHQKLQlqCXJldF9mcm9tX2lycQotCi0xOgliZXF6CXQwLCAzZgkJCSMgc3B1cmlvdXMgaW50ZXJydXB0Ci0KLQltb3ZlCWEwLCB0MAotCW1vdmUJYTEsIHNwCi0JamFsCWV2OTYxMDBfY3B1X2lycQotCWoJcmV0X2Zyb21faXJxCi0KLTM6CWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JRU5EKGV2OTYxMDBJUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pcnEuYyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2lycS5jCmluZGV4IDk3YmYwOTQuLmVlNWQ2NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2lycS5jCkBAIC00MCw4ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBldjk2MTAwSVJRKHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmZno4KHVuc2lnbmVkIGludCB3b3JkKQogewogCXVuc2lnbmVkIGxvbmcgazsKQEAgLTU0LDEzICs1MiwyNiBAQAogCXJldHVybiBrOwogfQogCi1hc21saW5rYWdlIHZvaWQgZXY5NjEwMF9jcHVfaXJxKHVuc2lnbmVkIGludCBwZW5kaW4pCitleHRlcm4gdm9pZCBtaXBzX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBldjk2MTAwX2NwdV9pcnEodW5zaWduZWQgaW50IHBlbmRpbmcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWRvX0lSUShmZno4KHBlbmRpbmcgPj4gOCksIHJlZ3MpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KQorCQltaXBzX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nKQorCQlldjk2MTAwX2NwdV9pcnEocGVuZGluZywgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBldjk2MTAwSVJRKTsKIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvTWFrZWZpbGUgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL01ha2VmaWxlCmluZGV4IGViZTkxYzUuLmIyYzUzYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9NYWtlZmlsZQpAQCAtNiw2ICs2LDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBHYWxpbGVvIEVWNjQxMjAgYm9hcmQuCiAjCiAKLW9iai15CSs9IGludC1oYW5kbGVyLm8gaXJxLm8gcHJvbWNvbi5vIHJlc2V0Lm8gc2VyaWFsR1QubyBzZXR1cC5vCitvYmoteQkrPSBpcnEubyBwcm9tY29uLm8gcmVzZXQubyBzZXJpYWxHVC5vIHNldHVwLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTI0MzVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogaW50LWhhbmRsZXIuUwotICoKLSAqIEJhc2VkIG9uIHRoZSBjb2JhbHQgaGFuZGxlci4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qCi0gKiBnYWxpbGVvX2hhbmRsZV9pbnQgLQotICogICAgICBXZSBjaGVjayBmb3IgdGhlIHRpbWVyIGZpcnN0LCB0aGVuIGNoZWNrIFBDSSBpbnRzIEEgYW5kIEQuCi0gKiAgICAgIFRoZW4gY2hlY2sgZm9yIHNlcmlhbCBJUlEgYW5kIGZhbGwgdGhyb3VnaC4KLSAqLwotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLQkJLnNldAlub2F0Ci0JCU5FU1RFRChnYWxpbGVvX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLENQMF9DQVVTRQotCQltZmMwCXQyLENQMF9TVEFUVVMKLQotCQlhbmQJdDAsdDIKLQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVA0IC8qIGludDIgaGFyZHdhcmUgbGluZSAodGltZXIpICovCi0JCWJuZXoJdDEsbGxfZ3Q2NDEyMF9pcnEKLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQMiAvKiBpbnQwIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSxsbF9wY2lfaW50QQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVA1IC8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLGxsX3BjaV9pbnRECi0JCWFuZGkJdDEsdDAsU1RBVFVTRl9JUDYgLyogaW50NCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsbGxfc2VyaWFsX2lycQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVA3IC8qIGNvbXBhcmUgaW50ICovCi0JCWJuZXoJdDEsbGxfY29tcGFyZV9pcnEKLQkJbm9wCi0KLSAgICAvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQoZ2FsaWxlb19oYW5kbGVfaW50KQotCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9ndDY0MTIwX2lycToKLQkJbGkJYTAsNAotCQltb3ZlCWExLHNwCi0JCWphbAlkb19JUlEKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfY29tcGFyZV9pcnE6Ci0JCWxpIAlhMCw3Ci0JCW1vdmUJYTEsc3AKLQkJamFsCWRvX0lSUQotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLQkJLmFsaWduCTUKLQkJLnNldAlyZW9yZGVyCi1sbF9wY2lfaW50QToKLQkJbW92ZQlhMCxzcAotCQlqYWwJcGNpX2ludEEKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0jaWYgMAotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX3BjaV9pbnRCOgotCQltb3ZlIAlhMCxzcAotCQlqYWwJcGNpX2ludEIKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfcGNpX2ludEM6Ci0JCW1vdmUgCWEwLHNwCi0JCWphbAlwY2lfaW50QwotCQlub3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0jZW5kaWYKLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLWxsX3BjaV9pbnREOgotCQltb3ZlIAlhMCxzcAotCQlqYWwJcGNpX2ludEQKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfc2VyaWFsX2lycToKLQkJbGkJYTAsNgotCQltb3ZlCWExLHNwCi0JCWphbAlkb19JUlEKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pcnEuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaXJxLmMKaW5kZXggM2IxODYxNS4uNDZjNDY4YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pcnEuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2lycS5jCkBAIC00NiwxNCArNDYsMjIgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KIAotYXNtbGlua2FnZSBpbmxpbmUgdm9pZCBwY2lfaW50QShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlkb19JUlEoR1RfSU5UQSwgcmVncyk7Ci19CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOwogCi1hc21saW5rYWdlIGlubGluZSB2b2lkIHBjaV9pbnREKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWRvX0lSUShHVF9JTlRELCByZWdzKTsKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQkJLyogaW50MiBoYXJkd2FyZSBsaW5lICh0aW1lcikgKi8KKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikJCS8qIGludDAgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoR1RfSU5UQSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQkJLyogaW50MyBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUShHVF9JTlRELCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCQkvKiBpbnQ0IGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykJCS8qIGNvbXBhcmUgaW50ICovCisJCWRvX0lSUSg3LCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9ldjY0MTIwX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQpAQCAtMTA5LDE2ICsxMTcsMTEgQEAKIAogdm9pZCBndDY0MTIwX2lycV9zZXR1cCh2b2lkKQogewotCWV4dGVybiBhc21saW5rYWdlIHZvaWQgZ2FsaWxlb19oYW5kbGVfaW50KHZvaWQpOwotCiAJLyoKIAkgKiBDbGVhciBhbGwgb2YgdGhlIGludGVycnVwdHMgd2hpbGUgd2UgY2hhbmdlIHRoZSBhYmxlIGFyb3VuZCBhIGJpdC4KIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAotCS8qIFNldHMgdGhlIGV4Y2VwdGlvbl9oYW5kbGVyIGFycmF5LiAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGdhbGlsZW9faGFuZGxlX2ludCk7Ci0KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2VyaWFsR1QuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2VyaWFsR1QuYwppbmRleCAxNmUzNGE1Li44ZjBkODM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NlcmlhbEdULmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXJpYWxHVC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKICNlbHNlCiAJLyoKIAkgKiBOb3RlOiBTZXQgYmF1ZCByYXRlLCBoYXJkY29kZWQgaGVyZSBmb3IgcmF0ZSBvZiAxMTUyMDAKLQkgKiBzaW5jZSBiZWNhbWUgdW5zdXJlIG9mIGFib3ZlICJidWFkIHJhdGUiIGFsZ29yaXRobSAoPz8pLgorCSAqIHNpbmNlIGJlY2FtZSB1bnN1cmUgb2YgYWJvdmUgImJhdWQgcmF0ZSIgYWxnb3JpdGhtICg/PykuCiAJICovCiAJb3V0cmVnKGNoYW5uZWwsIExDUiwgMHg4Myk7CiAJb3V0cmVnKGNoYW5uZWwsIERMTSwgMHgwMCk7CS8vIFNlZSBub3RlIGFib3ZlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L01ha2VmaWxlCmluZGV4IDdiNTljNjUuLjZmNzA4ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgTW9tZW50dW0ncyBPY2Vsb3QgYm9hcmQuCiAjCiAKLW9iai15CSAJCSs9IGludC1oYW5kbGVyLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIAkJKz0gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubwogCiBvYmotJChDT05GSUdfS0dEQikJKz0gZGJnX2lvLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9kYmdfaW8uYwppbmRleCA4NzIwYmNjLi5mMGE2YTM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9kYmdfaW8uYwpAQCAtNzMsNyArNzMsNyBAQAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCVVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0JLyogc2V0IHVwIGJ1YWQgcmF0ZSAqLworCS8qIHNldCB1cCBiYXVkIHJhdGUgKi8KIAl7CiAJCXVpbnQzMiBkaXZpc29yOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4YWNlZi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBvY2Vsb3QgYm9hcmQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qCi0gKiBmaXJzdCBsZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3Igb2NlbG90IGJvYXJkIC0KLSAqIFdlIGNoZWNrIGZvciB0aGUgdGltZXIgZmlyc3QsIHRoZW4gY2hlY2sgUENJIGludHMgQSBhbmQgRC4KLSAqIFRoZW4gY2hlY2sgZm9yIHNlcmlhbCBJUlEgYW5kIGZhbGwgdGhyb3VnaC4KLSAqLwotCQkuYWxpZ24JNQotCQlORVNURUQob2NlbG90X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCwgdDIKLQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wcmlfZW5ldF9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMwkvKiBpbnQxIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfc2VjX2VuZXRfaXJxCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDQJLyogaW50MiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3VhcnQxX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA1CS8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9nYWxpbGVvX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotICAgICAgICAgICAgICAgIC8qIG5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQljZmMwCXQxLCBDUDBfUzFfSU5UQ09OVFJPTAotCi0JCS8qIHNoaWZ0IHRoZSBtYXNrIDggYml0cyBsZWZ0IHRvIGxpbmUgdXAgdGhlIGJpdHMgKi8KLQkJIHNsbAl0MiwgdDEsIDgKLQotCQkgYW5kCXQwLCB0MgotCQkgc3JsCXQwLCB0MCwgMTYKLQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA4CS8qIGludDYgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wbWMxX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA5CS8qIGludDcgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9wbWMyX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxMAkvKiBpbnQ4IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfY3BjaV9hYmNkX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxMQkvKiBpbnQ5IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfdWFydDJfaXJxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKG9jZWxvdF9oYW5kbGVfaW50KQotCi0JCS5hbGlnbgk1Ci1sbF9wcmlfZW5ldF9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfc2VjX2VuZXRfaXJxOgotCQlsaQlhMCwgMwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnQxX2lycToKLQkJbGkJYTAsIDQKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcGNpX2lycToKLQkJbGkJYTAsIDUKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9nYWxpbGVvX2lycToKLQkJbGkJYTAsIDYKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JCWxpCWEwLCA3Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcG1jMV9pcnE6Ci0JCWxpCWEwLCA4Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcG1jMl9pcnE6Ci0JCWxpCWEwLCA5Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3BjaV9hYmNkX2lycToKLQkJbGkJYTAsIDEwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfdWFydDJfaXJxOgotCQlsaQlhMCwgMTEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvaXJxLmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pcnEuYwppbmRleCA0ZjEwOGRhLi44ODVmNjdmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pcnEuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9pcnEuYwpAQCAtNDgsNyArNDgsMzggQEAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgb2NlbG90X2hhbmRsZV9pbnQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikJCS8qIGludDAgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoMiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQkJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUSgzLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDQpCQkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKi8KKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkJCS8qIGludDMgaGFyZHdhcmUgbGluZSAqLworCQlkb19JUlEoNSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQkJLyogaW50NCBoYXJkd2FyZSBsaW5lICovCisJCWRvX0lSUSg2LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCQkvKiBjcHUgdGltZXIgKi8KKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgeworCQkvKgorCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cworCQkgKi8KKwkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OworCisJCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCQkvKiBpbnQ2IGhhcmR3YXJlIGxpbmUgKi8KKwkJCWRvX0lSUSg4LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA5KQkJLyogaW50NyBoYXJkd2FyZSBsaW5lICovCisJCQlkb19JUlEoOSwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMTApCS8qIGludDggaGFyZHdhcmUgbGluZSAqLworCQkJZG9fSVJRKDEwLCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxMSkJLyogaW50OSBoYXJkd2FyZSBsaW5lICovCisJCQlkb19JUlEoMTEsIHJlZ3MpOworCX0KK30KIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewpAQCAtNTksOSArOTAsNiBAQAogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0pOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQkvKiBTZXRzIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBvY2Vsb3RfaGFuZGxlX2ludCk7Ci0KIAltaXBzX2NwdV9pcnFfaW5pdCgwKTsKIAlybTdrX2NwdV9pcnFfaW5pdCg4KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL01ha2VmaWxlCmluZGV4IDBlNzg1M2YuLjYzNDMxNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBJVEUgODE3MiAocWVkLTRuLXMwMWIpIGJvYXJkLCBnZW5lcmljIGZpbGVzLgogIwogCi1vYmoteQkJCSs9IGl0ODE3Ml9zZXR1cC5vIGlycS5vIGludC1oYW5kbGVyLm8gcG1vbl9wcm9tLm8gXAorb2JqLXkJCQkrPSBpdDgxNzJfc2V0dXAubyBpcnEubyBwbW9uX3Byb20ubyBcCiAJCQkgICB0aW1lLm8gbHBjLm8gcHV0cy5vIHJlc2V0Lm8KIAogb2JqLSQoQ09ORklHX0lUODE3Ml9DSVIpKz0gaXQ4MTcyX2Npci5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYwppbmRleCBjNGY4NTMwZi4uNmE3Y2NhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jCkBAIC03Miw3ICs3Miw3IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLQkvKiBzZXQgdXAgYnVhZCByYXRlICovCisJLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogCXsKIAkJdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5MGQ4YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuc2V0ICAgIG1hY3JvCi0JLnNldCAgICBub2F0Ci0JLmFsaWduCTUKLQotTkVTVEVEKGl0ODE3Ml9JUlEsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCQkJCSMgSW1wb3J0YW50OiBtYXJrIEtFUk5FTCBtb2RlICEKLQotICAgICAgICAvKiBXZSdyZSB3b3JraW5nIHdpdGggJ3Jlb3JkZXInIHNldCBhdCB0aGlzIHBvaW50LiAqLwotCS8qCi0JICogR2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCSAqLwotCi0JbWZjMAl0MCxDUDBfQ0FVU0UJCSMgZ2V0IHBlbmRpbmcgaW50ZXJydXB0cwotCW1mYzAJdDEsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JYW5kCXQwLHQxCQkJIyBpc29sYXRlIGFsbG93ZWQgb25lcwotCi0JYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLSAgICAgICAgYmVxeiAgICB0MCwgM2YgICAgICAgICAgICAgICAgICAjIHNwdXJpb3VzIGludGVycnVwdAotCi0gICAgICAgIGFuZGkgICAgYTAsIHQwLCBDQVVTRUZfSVA3Ci0gICAgICAgIGJlcSAgICAgYTAsIHplcm8sIDFmCi0KLSAgICAgICAgbGkJYTAsIDEyNwkJCSMgTUlQU19DUFVfVElNRVJfSVJRID0gKE5SX0lSUVMtMSkKLSAgICAgICAgbW92ZSAgICBhMSwgc3AKLSAgICAgICAgamFsICAgICBsbF90aW1lcl9pbnRlcnJ1cHQKLQlqCXJldF9mcm9tX2lycQotICAgICAgICBub3AKLQotMToKLSAgICAgICAgYW5kaSAgICBhMCwgdDAsIENBVVNFRl9JUDIgICAgICAjIHRoZSBvbmx5IGludCB3ZSBleHBlY3QgYXQgdGhpcyB0aW1lCi0gICAgICAgIGJlcSAgICAgYTAsIHplcm8sIDNmCi0JbW92ZQlhMCxzcAotCWphbAlpdDgxNzJfaHcwX2lycWRpc3BhdGNoCi0KLQltZmMwCXQwLENQMF9TVEFUVVMJCSMgZGlzYWJsZSBpbnRlcnJ1cHRzCi0Jb3JpCXQwLDEKLQl4b3JpCXQwLDEKLQltdGMwCXQwLENQMF9TVEFUVVMKLSAgICAgICAgbm9wCi0gICAgICAgIG5vcAotICAgICAgICBub3AKLQotCWxhICAgICAgYTEsIHJldF9mcm9tX2lycQotCWpyCWExCi0gICAgICAgIG5vcAotCi0zOgotCW1vdmUgYTAsIHNwCi0JamFsCW1pcHNfc3B1cmlvdXNfaW50ZXJydXB0Ci0gICAgICAgIG5vcAotCWxhICAgICAgYTEsIHJldF9mcm9tX2lycQotCWpyCWExCi0gICAgICAgIG5vcAotCi1FTkQoaXQ4MTcyX0lSUSkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXJxLmMKaW5kZXggZTY3Zjk2MS4uNzdiZTcyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2lycS5jCkBAIC02MiwxMiArNjIsOCBAQAogCiAjZGVmaW5lIEFMTElOVFNfTk9USU1FUiAoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyB8IElFX0lSUTQpCiAKLXZvaWQgZGlzYWJsZV9pdDgxNzJfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpOwotdm9pZCBlbmFibGVfaXQ4MTcyX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKTsKLQogZXh0ZXJuIHZvaWQgc2V0X2RlYnVnX3RyYXBzKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWlwc190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpdDgxNzJfSVJRKHZvaWQpOwogCiBzdHJ1Y3QgaXQ4MTcyX2ludGNfcmVncyB2b2xhdGlsZSAqaXQ4MTcyX2h3MF9pY3JlZ3MgPQogCShzdHJ1Y3QgaXQ4MTcyX2ludGNfcmVncyB2b2xhdGlsZSAqKShLU0VHMUFERFIoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfSU5UQ19CQVNFKSk7CkBAIC0xODEsOCArMTc3LDYgQEAKIAlpbnQgaTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgICAgICBzZXRfZXhjZXB0X3ZlY3RvcigwLCBpdDgxNzJfSVJRKTsKLQogCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlpdDgxNzJfaHcwX2ljcmVncy0+bGJfbWFzayAgPSAweGZmZmY7CiAJaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19tYXNrID0gMHhmZmZmOwpAQCAtMjgyLDYgKzI3NiwxOCBAQAogCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKCFwZW5kaW5nKQorCQltaXBzX3NwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJbGxfdGltZXJfaW50ZXJydXB0KDEyNywgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWl0ODE3Ml9odzBfaXJxZGlzcGF0Y2gocmVncyk7Cit9CisKIHZvaWQgc2hvd19wZW5kaW5nX2lycXModm9pZCkKIHsKIAlmcHV0cygiaW50c3RhdHVzOiAgIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3RpbWUuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IGI3OTgxN2IuLmRlZTQ5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvdGltZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9pdnIvaW5pdC5jCmluZGV4IGI3NzRkYjAuLjA1Y2Y5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMKKysrIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL2luaXQuYwpAQCAtMzQsMTMgKzM0LDEzIEBACiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KICNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9kYmcuaD4KIAogaW50IHByb21fYXJnYzsKIGNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwogCi1leHRlcm4gY2hhciBfZW5kOwogZXh0ZXJuIHZvaWQgIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBwcm9tX2dldF9tZW1zaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGl0ODE3Ml9pbml0X3JhbV9yZXNvdXJjZSh1bnNpZ25lZCBsb25nIG1lbXNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jCmluZGV4IGU4ZWM4YmUuLmVhMmE3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL3FlZC00bi1zMDFiL2luaXQuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9pbml0LmMKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+CiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfZGJnLmg+CiAKIGludCBwcm9tX2FyZ2M7CiBjaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKIAotZXh0ZXJuIGNoYXIgX2VuZDsKIGV4dGVybiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9nZXRfbWVtc2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBpdDgxNzJfaW5pdF9yYW1fcmVzb3VyY2UodW5zaWduZWQgbG9uZyBtZW1zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L01ha2VmaWxlIGIvYXJjaC9taXBzL2phenovTWFrZWZpbGUKaW5kZXggODU3NDkyNC4uMDJiZDM5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2phenovTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgSmF6eiBmYW1pbHkgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgCTo9IGludC1oYW5kbGVyLm8gaXJxLm8gamF6emRtYS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIAk6PSBpcnEubyBqYXp6ZG1hLm8gcmVzZXQubyBzZXR1cC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvamF6ei9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzc1MmM2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCBieSBSYWxmIEJhZWNobGUgYW5kIEFuZHJlYXMgQnVzc2UKLSAqCi0gKiBKYXp6IGZhbWlseSBzcGVjaWZpYyBpbnRlcnJ1cHQgc3R1ZmYKLSAqCi0gKiBUbyBkbzogT24gSmF6eiBtYWNoaW5lcyB3ZSByZW1hcCBzb21lIG5vbi1JU0EgaW50ZXJydXB0cyB0byBJU0EKLSAqICAgICAgICBpbnRlcnJ1cHRzLiAgVGhlc2UgaW50ZXJydXB0cyBzaG91bGQgdXNlIHRoZWlyIG93biB2ZWN0b3JzLgotICogICAgICAgIFNxdWVlemUgdGhlIGxhc3QgY3ljbGVzIG91dCBvZiB0aGUgaGFuZGxlcnMuICBPbmx5IGEgZGVhZAotICogICAgICAgIGN5Y2xlIGlzIGEgZ29vZCBjeWNsZS4KLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vamF6ei5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogamF6el9oYW5kbGVfaW50OiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIEFDRVIgUGljYS02MSBib2FyZHMKLSAqLwotCQkuc2V0CW5vcmVvcmRlcgotCi0JCU5FU1RFRChqYXp6X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHJhKQotCQkuc2V0CW5vYXQKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQkvKgotCQkgKiBHZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JCSAqLwotCQltZmMwCXQwLENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JCW1mYzAJdDEsQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JCWFuZAl0MCx0MQkJCSMgaXNvbGF0ZSBhbGxvd2VkIG9uZXMKLQkJYW5kaQl0MCwweGZmMDAJCSMgaXNvbGF0ZSBwZW5kaW5nIGJpdHMKLQkJYmVxegl0MCwzZgotCQlzbGwJdDAsMTYJCQkjIGRlbGF5IHNsb3QKLQotCQkvKgotCQkgKiBGaW5kIGlycSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkKLQkJICogRklYTUU6IFRoaXMgaXMgc2xvdyAtIHVzZSBiaW5hcnkgc2VhcmNoCi0JCSAqLwotCQlsYQl0MSxsbF92ZWN0b3JzCi0xOgkJYmx0egl0MCwyZgkJCSMgZm91bmQgcGVuZGluZyBpcnEKLQkJc2xsCXQwLDEKLQkJYgkxYgotCQlzdWJ1CXQxLFBUUlNJWkUJCSMgZGVsYXkgc2xvdAotCi0JCS8qCi0JCSAqIERvIHRoZSBsb3ctbGV2ZWwgc3R1ZmYKLQkJICovCi0yOgkJbHcJdDAsKHQxKQotCQlqcgl0MAotCQlub3AJCQkJIyBkZWxheSBzbG90Ci0JCUVORChqYXp6X2hhbmRsZV9pbnQpCi0KLWxsX3N3MDoJCWxpCXMxLH5JRV9TVzAKLQkJbWZjMAl0MCxDUDBfQ0FVU0UKLQkJYW5kCXQwLHMxCi0JCW10YzAJdDAsQ1AwX0NBVVNFCi0JCVBBTklDKCJVbmltcGxlbWVudGVkIHN3MCBoYW5kbGVyIikKLQotbGxfc3cxOgkJbGkJczEsfklFX1NXMQotCQltZmMwCXQwLENQMF9DQVVTRQotCQlhbmQJdDAsczEKLQkJbXRjMAl0MCxDUDBfQ0FVU0UKLQkJUEFOSUMoIlVuaW1wbGVtZW50ZWQgc3cxIGhhbmRsZXIiKQotCi1sbF9sb2NhbF9kbWE6CWxpCXMxLH5JRV9JUlEwCi0JCVBBTklDKCJVbmltcGxlbWVudGVkIGxvY2FsX2RtYSBoYW5kbGVyIikKLQotbGxfbG9jYWxfZGV2OglsYnUJdDAsSkFaWl9JT19JUlFfU09VUkNFCi0jaWYgUFRSU0laRSA9PSA4CS8qIFRydWUgNjQgYml0IGtlcm5lbCAqLwotCQlkc2xsCXQwLDEKLSNlbmRpZgotCQkuc2V0CXJlb3JkZXIKLQkJTE9OR19MCXQwLGxvY2FsX3ZlY3Rvcih0MCkKLQkJanIJdDAKLQkJLnNldAlub3Jlb3JkZXIKLQotLyoKLSAqIFRoZSBicmFpbmRlYWQgUElDQSBoYXJkd2FyZSBnaXZlcyB1cyBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggaWYgd2UgcmVhbGx5Ci0gKiByZWNlaXZlZCBpbnRlcnJ1cHQgNyBmcm9tIHRoZSAoRSlJU0EgYnVzIG9yIGlmIHdlIGp1c3QgcmVjZWl2ZWQgYW4KLSAqIGludGVycnVwdCB3aXRoIG5vIGZpbmRhYmxlIGNhdXNlLiAgVGhpcyBzb21ldGltZXMgaGFwcGVucyB3aXRoIGJyYWluZGVhZAotICogY2FyZHMuICBPaCB3ZWxsIC0gZm9yIGFsbCB0aGUgSmF6eiBib3hlcyBzbG90cyBhcmUgbW9yZSBvciBsZXNzIGp1c3QKLSAqIHdoaXN0bGVzIGFuZCBiZWxscyBhbmQgd2UncmUgYXdhcmUgb2YgdGhlIHByb2JsZW0uCi0gKi8KLWxsX2lzYV9pcnE6CWx3CWEwLCBKQVpaX0VJU0FfSVJRX0FDSwotCi0JCWphbAlkb19JUlEKLQkJIG1vdmUJYTEsc3AKLQotCQlqCXJldF9mcm9tX2lycQotCQlub3AKLQotLyoKLSAqIEhtbS4uLiAgVGhpcyBpcyBub3QganVzdCBhIHBsYWluIFBDIGNsb25lIHNvIHRoZSBxdWVzdGlvbiBpcwotICogd2hpY2ggZGV2aWNlcyBvbiBKYXp6IG1hY2hpbmVzIGNhbiBnZW5lcmF0ZSBhbiAoRSlJU0EgTk1JPwotICogKFdyaXRpbmcgdG8gbm9uZXhpc3RlbnQgbWVtb3J5PykKLSAqLwotbGxfaXNhX25taToJbGkJczEsfklFX0lSUTMKLQkJUEFOSUMoIlVuaW1wbGVtZW50ZWQgaXNhX25taSBoYW5kbGVyIikKLQotLyoKLSAqIFRpbWVyIElSUSAtIHJlbWFwcGVkIHRvIGJlIG1vcmUgc2ltaWxhciB0byBhbiBJQk0gY29tcGF0aWJsZS4KLSAqCi0gKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIGhhbmRsZWQgc3BlY2lhbGx5IHRvIGVuc3VyZSB0aGF0IHRoZSBqaWZmaWVzCi0gKiB2YXJpYWJsZSBpcyB1cGRhdGVkIGF0IGFsbCB0aW1lcy4gIFNwZWNpZmljYWxseSwgdGhlIHRpbWVyIGludGVycnVwdCBpcwotICoganVzdCBsaWtlIHRoZSBjb21wbGV0ZSBoYW5kbGVycyBleGNlcHQgdGhhdCBpdCBpcyBpbnZva2VkIHdpdGggaW50ZXJydXB0cwotICogZGlzYWJsZWQgYW5kIHNob3VsZCBuZXZlciByZS1lbmFibGUgdGhlbS4gIElmIG90aGVyIGludGVycnVwdHMgd2VyZQotICogYWxsb3dlZCB0byBiZSBwcm9jZXNzZWQgd2hpbGUgdGhlIHRpbWVyIGludGVycnVwdCBpcyBhY3RpdmUsIHRoZW4gdGhlCi0gKiBvdGhlciBpbnRlcnJ1cHRzIHdvdWxkIGhhdmUgdG8gYXZvaWQgdXNpbmcgdGhlIGppZmZpZXMgdmFyaWFibGUgZm9yIGRlbGF5Ci0gKiBhbmQgaW50ZXJ2YWwgdGltaW5nIG9wZXJhdGlvbnMgdG8gYXZvaWQgaGFuZ2luZyB0aGUgc3lzdGVtLgotICovCi1sbF90aW1lcjoJbHcJemVybyxKQVpaX1RJTUVSX1JFR0lTVEVSICMgdGltZXIgaXJxIGNsZWFyZWQgb24gcmVhZAotCQlsaQlzMSx+SUVfSVJRNAotCi0JCWxpCWEwLCBKQVpaX1RJTUVSX0lSUQotCQlqYWwJZG9fSVJRCi0JCSBtb3ZlCWExLHNwCi0KLQkJbWZjMAl0MCxDUDBfU1RBVFVTCQkjIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbgotCQlvcmkJdDAsMQotCQl4b3JpCXQwLDEKLQkJbXRjMAl0MCxDUDBfU1RBVFVTCi0KLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKgotICogQ1BVIGNvdW50L2NvbXBhcmUgSVJRICh1bnVzZWQpCi0gKi8KLWxsX2NvdW50OglqCXJldF9mcm9tX2lycQotCQkgbXRjMAl6ZXJvLENQMF9DT01QQVJFCi0KLSNpZiAwCi0vKgotICogQ2FsbCB0aGUgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdAotICogKEN1cnJlbnRseSB1bnVzZWQpCi0gKi8KLWNhbGxfcmVhbDoJLyoKLQkJICogdGVtcG9yYXJpbHkgZGlzYWJsZSBpbnRlcnJ1cHQKLQkJICovCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCQlhbmQJdDIsczEKLQkJbXRjMAl0MixDUDBfU1RBVFVTCi0JCW5vcglzMSx6ZXJvLHMxCi0JCWphbAlkb19JUlEKLQotCQkvKgotCQkgKiByZWVuYWJsZSBpbnRlcnJ1cHQKLQkJICovCi0JCW1mYzAJdDIsQ1AwX1NUQVRVUwotCQlvcgl0MixzMQotCQltdGMwCXQyLENQMF9TVEFUVVMKLQkJaglyZXRfZnJvbV9pcnEKLSNlbmRpZgotCi0JCS5kYXRhCi0JCVBUUglsbF9zdzAJCQkjIFNXMAotCQlQVFIJbGxfc3cxCQkJIyBTVzEKLQkJUFRSCWxsX2xvY2FsX2RtYQkJIyBMb2NhbCBETUEKLQkJUFRSCWxsX2xvY2FsX2RldgkJIyBMb2NhbCBkZXZpY2VzCi0JCVBUUglsbF9pc2FfaXJxCQkjIElTQSBJUlEKLQkJUFRSCWxsX2lzYV9ubWkJCSMgSVNBIE5NSQotCQlQVFIJbGxfdGltZXIJCSMgVGltZXIKLWxsX3ZlY3RvcnM6CVBUUglsbF9jb3VudAkJIyBDb3VudC9Db21wYXJlIElSUQotCi0JCS8qCi0JCSAqIEludGVycnVwdCBoYW5kbGVycyBmb3IgbG9jYWwgZGV2aWNlcy4KLQkJICovCi0JCS50ZXh0Ci0JCS5zZXQJcmVvcmRlcgotbG9jX25vX2lycToJUEFOSUMoIlVuaW1wbGVtZW50ZWQgbG9jX25vX2lycSBoYW5kbGVyIikKLS8qCi0gKiBQYXJhbGxlbCBwb3J0IElSUQotICovCi1sb2NfcGFyYWxsZWw6CWxpCXMxLH5KQVpaX0lFX1BBUkFMTEVMCi0JCWxpCWEwLEpBWlpfUEFSQUxMRUxfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIEZsb3BweSBJUlEKLSAqLwotbG9jX2Zsb3BweToJbGkJczEsfkpBWlpfSUVfRkxPUFBZCi0JCWxpCWEwLEpBWlpfRkxPUFBZX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBTb3VuZCBJUlEKLSAqLwotbG9jX3NvdW5kOglQQU5JQygiVW5pbXBsZW1lbnRlZCBsb2Nfc291bmQgaGFuZGxlciIpCi1sb2NfdmlkZW86CVBBTklDKCJVbmltcGxlbWVudGVkIGxvY192aWRlbyBoYW5kbGVyIikKLQotLyoKLSAqIEV0aGVybmV0IGludGVycnVwdCBoYW5kbGVyCi0gKi8KLWxvY19ldGhlcm5ldDogCWxpCXMxLH5KQVpaX0lFX0VUSEVSTkVUCi0JCWxpCWEwLEpBWlpfRVRIRVJORVRfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIFNDU0kgaW50ZXJydXB0IGhhbmRsZXIKLSAqLwotbG9jX3Njc2k6CWxpCXMxLH5KQVpaX0lFX1NDU0kKLQkJbGkJYTAsSkFaWl9TQ1NJX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBLZXlib2FyZCBpbnRlcnJ1cHQgaGFuZGxlcgotICovCi1sb2Nfa2V5Ym9hcmQ6CWxpCXMxLH5KQVpaX0lFX0tFWUJPQVJECi0JCWxpCWEwLEpBWlpfS0VZQk9BUkRfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIE1vdXNlIGludGVycnVwdCBoYW5kbGVyCi0gKi8KLWxvY19tb3VzZToJbGkJczEsfkpBWlpfSUVfTU9VU0UKLQkJbGkJYTAsSkFaWl9NT1VTRV9JUlEKLQkJYglsb2NfY2FsbAotCi0vKgotICogU2VyaWFsIHBvcnQgMSBJUlEKLSAqLwotbG9jX3NlcmlhbDE6CWxpCXMxLH5KQVpaX0lFX1NFUklBTDEKLQkJbGkJYTAsSkFaWl9TRVJJQUwxX0lSUQotCQliCWxvY19jYWxsCi0KLS8qCi0gKiBTZXJpYWwgcG9ydCAyIElSUQotICovCi1sb2Nfc2VyaWFsMjoJbGkJczEsfkpBWlpfSUVfU0VSSUFMMgotCQlsaQlhMCxKQVpaX1NFUklBTDJfSVJRCi0JCWIJbG9jX2NhbGwKLQotLyoKLSAqIENhbGwgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciBhbiBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IGEKLSAqIGxvY2FsIGRldmljZS4KLSAqLwotbG9jX2NhbGw6CS8qCi0JCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgaW50ZXJydXB0IHNvdXJjZQotCQkgKi8KLQkJbGh1CXQyLEpBWlpfSU9fSVJRX0VOQUJMRQotCQlhbmQJdDIsczEKLQkJc2gJdDIsSkFaWl9JT19JUlFfRU5BQkxFCi0KLQkJbm9yCXMxLHplcm8sczEKLQkJamFsCWRvX0lSUQotCi0JCS8qCi0JCSAqIFJlZW5hYmxlIGludGVycnVwdAotCQkgKi8KLQkJbGh1CXQyLEpBWlpfSU9fSVJRX0VOQUJMRQotCQlvcgl0MixzMQotCQlzaAl0MixKQVpaX0lPX0lSUV9FTkFCTEUKLQotCQlqCXJldF9mcm9tX2lycQotCi0vKgotICogIkp1bXAgZXh0ZW5kZXIiIHRvIHJlYWNoIHNwdXJpb3VzX2ludGVycnVwdAotICovCi0zOgkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQotLyoKLSAqIFZlY3RvcnMgZm9yIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IGxvY2FsIGRldmljZXMKLSAqLwotCQkuZGF0YQotbG9jYWxfdmVjdG9yOglQVFIJbG9jX25vX2lycQotCQlQVFIJbG9jX3BhcmFsbGVsCi0JCVBUUglsb2NfZmxvcHB5Ci0JCVBUUglsb2Nfc291bmQKLQkJUFRSCWxvY192aWRlbwotCQlQVFIJbG9jX2V0aGVybmV0Ci0JCVBUUglsb2Nfc2NzaQotCQlQVFIJbG9jX2tleWJvYXJkCi0JCVBUUglsb2NfbW91c2UKLQkJUFRSCWxvY19zZXJpYWwxCi0JCVBUUglsb2Nfc2VyaWFsMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovaXJxLmMgYi9hcmNoL21pcHMvamF6ei9pcnEuYwppbmRleCBiMzA5YjFiLi5iZWNjOWFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9pcnEuYworKysgYi9hcmNoL21pcHMvamF6ei9pcnEuYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9qYXp6Lmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgamF6el9oYW5kbGVfaW50KHZvaWQpOwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHI0MDMwX2xvY2spOwogCiBzdGF0aWMgdm9pZCBlbmFibGVfcjQwMzBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC05MCwxMCArODgsODIgQEAKICAqLwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCXNldF9leGNlcHRfdmVjdG9yKDAsIGphenpfaGFuZGxlX2ludCk7Ci0KIAlpbml0X2k4MjU5X2lycXMoKTsJCQkvKiBJbnRlZ3JhdGVkIGk4MjU5ICAqLwogCWluaXRfcjQwMzBfaW50cygpOwogCiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTQgfCBJRV9JUlEzIHwgSUVfSVJRMiB8IElFX0lSUTEpOwogfQorCitzdGF0aWMgdm9pZCBsb2NfY2FsbCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG1hc2spCit7CisJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLAorCSAgICAgICAgICAgICAgICAgIHI0MDMwX3JlYWRfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFKSAmIG1hc2spOworCWRvX0lSUShpcnEsIHJlZ3MpOworCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwKKwkgICAgICAgICAgICAgICAgICByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSkgfCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgbGxfbG9jYWxfZGV2KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN3aXRjaCAocjQwMzBfcmVhZF9yZWczMihKQVpaX0lPX0lSUV9TT1VSQ0UpKSB7CisJY2FzZSAwOgorCQlwYW5pYygiVW5pbXBsZW1lbnRlZCBsb2Nfbm9faXJxIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlsb2NfY2FsbChKQVpaX1BBUkFMTEVMX0lSUSwgcmVncywgSkFaWl9JRV9QQVJBTExFTCk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJbG9jX2NhbGwoSkFaWl9QQVJBTExFTF9JUlEsIHJlZ3MsIEpBWlpfSUVfRkxPUFBZKTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgbG9jX3NvdW5kIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgbG9jX3ZpZGVvIGhhbmRsZXIiKTsKKwkJYnJlYWs7CisJY2FzZSAyMDoKKwkJbG9jX2NhbGwoSkFaWl9FVEhFUk5FVF9JUlEsIHJlZ3MsIEpBWlpfSUVfRVRIRVJORVQpOworCQlicmVhazsKKwljYXNlIDI0OgorCQlsb2NfY2FsbChKQVpaX1NDU0lfSVJRLCByZWdzLCBKQVpaX0lFX1NDU0kpOworCQlicmVhazsKKwljYXNlIDI4OgorCQlsb2NfY2FsbChKQVpaX0tFWUJPQVJEX0lSUSwgcmVncywgSkFaWl9JRV9LRVlCT0FSRCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWxvY19jYWxsKEpBWlpfTU9VU0VfSVJRLCByZWdzLCBKQVpaX0lFX01PVVNFKTsKKwkJYnJlYWs7CisJY2FzZSAzNjoKKwkJbG9jX2NhbGwoSkFaWl9TRVJJQUwxX0lSUSwgcmVncywgSkFaWl9JRV9TRVJJQUwxKTsKKwkJYnJlYWs7CisJY2FzZSA0MDoKKwkJbG9jX2NhbGwoSkFaWl9TRVJJQUwyX0lSUSwgcmVncywgSkFaWl9JRV9TRVJJQUwyKTsKKwkJYnJlYWs7CisJfQorfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCisJaWYgKHBlbmRpbmcgJiBJRV9JUlE1KQorCQl3cml0ZV9jMF9jb21wYXJlKDApOworCWVsc2UgaWYgKHBlbmRpbmcgJiBJRV9JUlE0KSB7CisJCXI0MDMwX3JlYWRfcmVnMzIoSkFaWl9USU1FUl9SRUdJU1RFUik7CisJCWRvX0lSUShKQVpaX1RJTUVSX0lSUSwgcmVncyk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgSUVfSVJRMykKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgSVNBIE5NSSBoYW5kbGVyIik7CisJZWxzZSBpZiAocGVuZGluZyAmIElFX0lSUTIpCisJCWRvX0lSUShyNDAzMF9yZWFkX3JlZzMyKEpBWlpfRUlTQV9JUlFfQUNLKSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIElFX0lSUTEpIHsKKwkJbGxfbG9jYWxfZGV2KHJlZ3MpOworCX0gZWxzZSBpZiAodW5saWtlbHkocGVuZGluZyAmIElFX0lSUTApKQorCQlwYW5pYygiVW5pbXBsZW1lbnRlZCBsb2NhbF9kbWEgaGFuZGxlciIpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBJRV9TVzEpIHsKKwkJY2xlYXJfYzBfY2F1c2UoSUVfU1cxKTsKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgc3cxIGhhbmRsZXIiKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBJRV9TVzApIHsKKwkJY2xlYXJfYzBfY2F1c2UoSUVfU1cwKTsKKwkJcGFuaWMoIlVuaW1wbGVtZW50ZWQgc3cwIGhhbmRsZXIiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9jb21tb24vcnRjX2RzMTc0Mi5jIGIvYXJjaC9taXBzL2ptcjM5MjcvY29tbW9uL3J0Y19kczE3NDIuYwppbmRleCBhNmJkM2Y0Li5lNjU2MTM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvam1yMzkyNy9jb21tb24vcnRjX2RzMTc0Mi5jCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L2NvbW1vbi9ydGNfZHMxNzQyLmMKQEAgLTYwLDE1ICs2MCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlDTU9TX1dSSVRFKFJUQ19SRUFELCBSVENfQ09OVFJPTCk7Ci0Jc2Vjb25kID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7Ci0JbWludXRlID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX01JTlVURVMpKTsKLQlob3VyID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX0hPVVJTKSk7Ci0JZGF5ID0gQkNEMkJJTihDTU9TX1JFQUQoUlRDX0RBVEUpKTsKLQltb250aCA9IEJDRDJCSU4oQ01PU19SRUFEKFJUQ19NT05USCkpOwotCXllYXIgPSBCQ0QyQklOKENNT1NfUkVBRChSVENfWUVBUikpOwotCWNlbnR1cnkgPSBCQ0QyQklOKENNT1NfUkVBRChSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLKTsKLQlDTU9TX1dSSVRFKDAsIFJUQ19DT05UUk9MKTsKKwlydGNfd3JpdGUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKKwlzZWNvbmQgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19TRUNPTkRTKSAmIFJUQ19TRUNPTkRTX01BU0spOworCW1pbnV0ZSA9IEJDRDJCSU4ocnRjX3JlYWQoUlRDX01JTlVURVMpKTsKKwlob3VyID0gQkNEMkJJTihydGNfcmVhZChSVENfSE9VUlMpKTsKKwlkYXkgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19EQVRFKSk7CisJbW9udGggPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19NT05USCkpOworCXllYXIgPSBCQ0QyQklOKHJ0Y19yZWFkKFJUQ19ZRUFSKSk7CisJY2VudHVyeSA9IEJDRDJCSU4ocnRjX3JlYWQoUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSyk7CisJcnRjX3dyaXRlKDAsIFJUQ19DT05UUk9MKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJeWVhciArPSBjZW50dXJ5ICogMTAwOwpAQCAtODcsMTYgKzg3LDE2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCUNNT1NfV1JJVEUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKLQljbW9zX3NlY29uZCA9ICh1OCkoQ01PU19SRUFEKFJUQ19TRUNPTkRTKSAmIFJUQ19TRUNPTkRTX01BU0spOwotCWNtb3NfbWludXRlID0gKHU4KUNNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JY21vc19ob3VyID0gKHU4KUNNT1NfUkVBRChSVENfSE9VUlMpOwotCWNtb3NfZGF5ID0gKHU4KUNNT1NfUkVBRChSVENfREFURSk7Ci0JY21vc19tb250aCA9ICh1OClDTU9TX1JFQUQoUlRDX01PTlRIKTsKLQljbW9zX3llYXIgPSAodTgpQ01PU19SRUFEKFJUQ19ZRUFSKTsKLQljbW9zX2NlbnR1cnkgPSBDTU9TX1JFQUQoUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKKwlydGNfd3JpdGUoUlRDX1JFQUQsIFJUQ19DT05UUk9MKTsKKwljbW9zX3NlY29uZCA9ICh1OCkocnRjX3JlYWQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7CisJY21vc19taW51dGUgPSAodTgpcnRjX3JlYWQoUlRDX01JTlVURVMpOworCWNtb3NfaG91ciA9ICh1OClydGNfcmVhZChSVENfSE9VUlMpOworCWNtb3NfZGF5ID0gKHU4KXJ0Y19yZWFkKFJUQ19EQVRFKTsKKwljbW9zX21vbnRoID0gKHU4KXJ0Y19yZWFkKFJUQ19NT05USCk7CisJY21vc195ZWFyID0gKHU4KXJ0Y19yZWFkKFJUQ19ZRUFSKTsKKwljbW9zX2NlbnR1cnkgPSBydGNfcmVhZChSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLOwogCi0JQ01PU19XUklURShSVENfV1JJVEUsIFJUQ19DT05UUk9MKTsKKwlydGNfd3JpdGUoUlRDX1dSSVRFLCBSVENfQ09OVFJPTCk7CiAKIAkvKiBjb252ZXJ0ICovCiAJdG9fdG0odCwgJnRtKTsKQEAgLTEwNCwxOCArMTA0LDE4IEBACiAJLyogY2hlY2sgZWFjaCBmaWVsZCBvbmUgYnkgb25lICovCiAJeWVhciA9IEJJTjJCQ0QodG0udG1feWVhciAtIEVQT0NIKTsKIAlpZiAoeWVhciAhPSBjbW9zX3llYXIpIHsKLQkJQ01PU19XUklURSh5ZWFyLFJUQ19ZRUFSKTsKKwkJcnRjX3dyaXRlKHllYXIsUlRDX1lFQVIpOwogCX0KIAogCW1vbnRoID0gQklOMkJDRCh0bS50bV9tb24pOwogCWlmIChtb250aCAhPSAoY21vc19tb250aCAmIDB4MWYpKSB7Ci0JCUNNT1NfV1JJVEUoKG1vbnRoICYgMHgxZikgfCAoY21vc19tb250aCAmIH4weDFmKSxSVENfTU9OVEgpOworCQlydGNfd3JpdGUoKG1vbnRoICYgMHgxZikgfCAoY21vc19tb250aCAmIH4weDFmKSxSVENfTU9OVEgpOwogCX0KIAogCWRheSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CiAJaWYgKGRheSAhPSBjbW9zX2RheSkgewogCi0JCUNNT1NfV1JJVEUoZGF5LCBSVENfREFURSk7CisJCXJ0Y193cml0ZShkYXksIFJUQ19EQVRFKTsKIAl9CiAKIAlpZiAoY21vc19ob3VyICYgMHg0MCkgewpAQCAtMTMwLDIwICsxMzAsMjAgQEAKIAkJLyogMjQgaG91ciBmb3JtYXQgKi8KIAkJaG91ciA9IEJJTjJCQ0QodG0udG1faG91cikgJiAweDNmOwogCX0KLQlpZiAoaG91ciAhPSBjbW9zX2hvdXIpIENNT1NfV1JJVEUoaG91ciwgUlRDX0hPVVJTKTsKKwlpZiAoaG91ciAhPSBjbW9zX2hvdXIpIHJ0Y193cml0ZShob3VyLCBSVENfSE9VUlMpOwogCiAJbWludXRlID0gQklOMkJDRCh0bS50bV9taW4pOwogCWlmIChtaW51dGUgIT0gIGNtb3NfbWludXRlKSB7Ci0JCUNNT1NfV1JJVEUobWludXRlLCBSVENfTUlOVVRFUyk7CisJCXJ0Y193cml0ZShtaW51dGUsIFJUQ19NSU5VVEVTKTsKIAl9CiAKIAlzZWNvbmQgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CiAJaWYgKHNlY29uZCAhPSAgY21vc19zZWNvbmQpIHsKLQkJQ01PU19XUklURShzZWNvbmQgJiBSVENfU0VDT05EU19NQVNLLFJUQ19TRUNPTkRTKTsKKwkJcnRjX3dyaXRlKHNlY29uZCAmIFJUQ19TRUNPTkRTX01BU0ssUlRDX1NFQ09ORFMpOwogCX0KIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIGFkZHJlc3MuLi4gKi8KLQlDTU9TX1dSSVRFKGNtb3NfY2VudHVyeSwgUlRDX0NPTlRST0wpOworCXJ0Y193cml0ZShjbW9zX2NlbnR1cnksIFJUQ19DT05UUk9MKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xNjMsOSArMTYzLDkgQEAKIAlydGNfbWlwc19zZXRfdGltZSA9IHJ0Y19kczE3NDJfc2V0X3RpbWU7CiAKIAkvKiBjbGVhciBvc2NpbGxhdG9yIHN0b3AgYml0ICovCi0JQ01PU19XUklURShSVENfUkVBRCwgUlRDX0NPTlRST0wpOwotCWNtb3Nfc2Vjb25kID0gKHU4KShDTU9TX1JFQUQoUlRDX1NFQ09ORFMpICYgUlRDX1NFQ09ORFNfTUFTSyk7Ci0JQ01PU19XUklURShSVENfV1JJVEUsIFJUQ19DT05UUk9MKTsKLQlDTU9TX1dSSVRFKGNtb3Nfc2Vjb25kLCBSVENfU0VDT05EUyk7IC8qIGNsZWFyIG1zYiAqLwotCUNNT1NfV1JJVEUoMCwgUlRDX0NPTlRST0wpOworCXJ0Y193cml0ZShSVENfUkVBRCwgUlRDX0NPTlRST0wpOworCWNtb3Nfc2Vjb25kID0gKHU4KShydGNfcmVhZChSVENfU0VDT05EUykgJiBSVENfU0VDT05EU19NQVNLKTsKKwlydGNfd3JpdGUoUlRDX1dSSVRFLCBSVENfQ09OVFJPTCk7CisJcnRjX3dyaXRlKGNtb3Nfc2Vjb25kLCBSVENfU0VDT05EUyk7IC8qIGNsZWFyIG1zYiAqLworCXJ0Y193cml0ZSgwLCBSVENfQ09OVFJPTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvTWFrZWZpbGUKaW5kZXggNzViZjQxOC4uYmFmNTA3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIFRPU0hJQkEgSk1SLVRYMzkyNyBib2FyZAogIwogCi1vYmoteQkgCQkJKz0gaW5pdC5vIGludC1oYW5kbGVyLm8gaXJxLm8gc2V0dXAubworb2JqLXkJIAkJCSs9IGluaXQubyBpcnEubyBzZXR1cC5vCiBvYmotJChDT05GSUdfUlVOVElNRV9ERUJVRykgCSs9IGRlYnVnLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYl9pby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NWJiZjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICBhaGVubmVzc3lAbXZpc3RhLmNvbQotICoKLSAqIEJhc2VkIG9uIGFyY2gvbWlwcy90c2RiL2tlcm5lbC9pbnQtaGFuZGxlci5TCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgVG9zaGliYSBDb3Jwb3JhdGlvbgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KLQotCS8qIEEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKLQkgKgotCSAqIDEpIFdlIGhhbmRsZSBvbmUgaW50ZXJydXB0IGFuZCByZXR1cm4sIHNpdHRpbmcgaW4gYSBsb29wCi0JICogICAgYW5kIG1vdmluZyBhY3Jvc3MgYWxsIHRoZSBwZW5kaW5nIElSUSBiaXRzIGluIHRoZSBjYXVzZQotCSAqICAgIHJlZ2lzdGVyIGlzIF9OT1RfIHRoZSBhbnN3ZXIsIHRoZSBjb21tb24gY2FzZSBpcyBvbmUKLQkgKiAgICBwZW5kaW5nIElSUSBzbyBvcHRpbWl6ZSBpbiB0aGF0IGRpcmVjdGlvbi4KLQkgKgotCSAqIDIpIFdlIG5lZWQgbm90IGNoZWNrIGFnYWluc3QgYml0cyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyCi0JICogICAgSVJRIG1hc2ssIHRoYXQgd291bGQgbWFrZSB0aGlzIHJvdXRpbmUgc2xvdyBhcyBoZWxsLgotCSAqCi0JICogMykgTGludXggb25seSB0aGlua3MgaW4gdGVybXMgb2YgYWxsIElSUXMgb24gb3IgYWxsIElSUXMKLQkgKiAgICBvZmYsIG5vdGhpbmcgaW4gYmV0d2VlbiBsaWtlIEJTRCBzcGwoKSBicmFpbi1kYW1hZ2UuCi0JICoKLQkgKi8KLQotLyogRmx1c2ggd3JpdGUgYnVmZmVyIChuZWVkZWQ/KQotICogTk9URTogVFgzOXh4IHBlcmZvcm1zICJub24tYmxvY2tpbmcgbG9hZCIsIHNvIGV4cGxpY2l0bHkgdXNlIHRoZSB0YXJnZXQKLSAqIHJlZ2lzdGVyIG9mIExCVSB0byBmbHVzaCBpbW1lZGlhdGVseS4KLSAqLwotI2RlZmluZSBGTFVTSF9XQih0bXApCVwKLQlsYQl0bXAsIEpNUjM5MjdfSU9DX1JFVl9BRERSOyBcCi0JbGJ1CXRtcCwgKHRtcCk7IFwKLQltb3ZlCXRtcCwgemVybzsKLQotCS50ZXh0Ci0JLnNldAlub3Jlb3JkZXIKLQkuc2V0CW5vYXQKLQkuYWxpZ24JNQotCU5FU1RFRChqbXIzOTI3X0lSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JamFsCWptcjM5MjdfaXJjX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCi0JRkxVU0hfV0IodDApCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0JRU5EKGptcjM5MjdfSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2lycS5jCmluZGV4IDI4MTA3MjcuLjExMzA0ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pcnEuYworKysgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMKQEAgLTc3LDggKzc3LDYgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGptcjM5MjdfSVJRKHZvaWQpOwotCiAjZGVmaW5lIGlyY19kbGV2ZWwJMAogI2RlZmluZSBpcmNfZWxldmVsCTEKIApAQCAtMjYyLDcgKzI2MCw3IEBACiAJICAgICAgIHJlZ3MtPmNwMF9jYXVzZSwgcmVncy0+Y3AwX2VwYywgcmVncy0+cmVnc1szMV0pOwogfQogCi12b2lkIGptcjM5MjdfaXJjX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnE7CiAKQEAgLTM5OCw4ICszOTYsNiBAQAogCiAJam1yMzkyN19pcnFfaW5pdChOUl9JU0FfSVJRUyk7CiAKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBqbXIzOTI3X0lSUSk7Ci0KIAkvKiBzZXR1cCBpcnEgc3BhY2UgKi8KIAlhZGRfdGJfaXJxX3NwYWNlKCZqbXIzOTI3X2lzYWNfaXJxc3BhY2UpOwogCWFkZF90Yl9pcnFfc3BhY2UoJmptcjM5MjdfaW9jX2lycXNwYWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IGYzNmM0ZjIuLjM0ZThhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzQsOCArMzQsMTEgQEAKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiAKLW9iai0kKENPTkZJR19NSVBTX01UX1NNUCkJKz0gc21wX210Lm8KK29iai0kKENPTkZJR19NSVBTX01UKQkJKz0gbWlwcy1tdC5vCitvYmotJChDT05GSUdfTUlQU19NVF9TTVRDKQkrPSBzbXRjLm8gc210Yy1hc20ubyBzbXRjLXByb2Mubworb2JqLSQoQ09ORklHX01JUFNfTVRfU01QKQkrPSBzbXAtbXQubwogCitvYmotJChDT05GSUdfTUlQU19BUFNQX0tTUEQpCSs9IGtzcGQubwogb2JqLSQoQ09ORklHX01JUFNfVlBFX0xPQURFUikJKz0gdnBlLm8KIG9iai0kKENPTkZJR19NSVBTX1ZQRV9BUFNQX0FQSSkJKz0gcnRseC5vCiAKQEAgLTU5LDYgKzYyLDggQEAKIAogb2JqLSQoQ09ORklHXzY0QklUKQkJKz0gY3B1LWJ1Z3M2NC5vCiAKK29iai0kKENPTkZJR19JODI1MykJCSs9IGk4MjUzLm8KKwogQ0ZMQUdTX2NwdS1idWdzNjQubwk9ICQoc2hlbGwgaWYgJChDQykgJChDRkxBR1MpIC1XYSwtbWRhZGRpIC1jIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvICItREhBVkVfQVNfU0VUX0RBRERJIjsgZmkpCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBjYTZiMDNjLi4wZmFjZmFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC02OSw2ICs2OSw5IEBACiAJb2Zmc2V0KCIjZGVmaW5lIFBUX0JWQUREUiAiLCBzdHJ1Y3QgcHRfcmVncywgY3AwX2JhZHZhZGRyKTsKIAlvZmZzZXQoIiNkZWZpbmUgUFRfU1RBVFVTICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfc3RhdHVzKTsKIAlvZmZzZXQoIiNkZWZpbmUgUFRfQ0FVU0UgICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfY2F1c2UpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlvZmZzZXQoIiNkZWZpbmUgUFRfVENTVEFUVVMgICIsIHN0cnVjdCBwdF9yZWdzLCBjcDBfdGNzdGF0dXMpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlzaXplKCIjZGVmaW5lIFBUX1NJWkUgICAiLCBzdHJ1Y3QgcHRfcmVncyk7CiAJbGluZWZlZWQ7CiB9CkBAIC0yNjksOCArMjcyLDggQEAKIAl0ZXh0KCIvKiBMaW51eCBzaWdjb250ZXh0IG9mZnNldHMuICovIik7CiAJb2Zmc2V0KCIjZGVmaW5lIFNDX1JFR1MgICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX3JlZ3MpOwogCW9mZnNldCgiI2RlZmluZSBTQ19GUFJFR1MgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19mcHJlZ3MpOwotCW9mZnNldCgiI2RlZmluZSBTQ19NREhJICAgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19oaSk7Ci0Jb2Zmc2V0KCIjZGVmaW5lIFNDX01ETE8gICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX2xvKTsKKwlvZmZzZXQoIiNkZWZpbmUgU0NfTURISSAgICAgICAiLCBzdHJ1Y3Qgc2lnY29udGV4dCwgc2NfbWRoaSk7CisJb2Zmc2V0KCIjZGVmaW5lIFNDX01ETE8gICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX21kbG8pOwogCW9mZnNldCgiI2RlZmluZSBTQ19QQyAgICAgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19wYyk7CiAJb2Zmc2V0KCIjZGVmaW5lIFNDX0ZQQ19DU1IgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX2ZwY19jc3IpOwogCWxpbmVmZWVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYyBiL2FyY2gvbWlwcy9rZXJuZWwvYnJhbmNoLmMKaW5kZXggMzc0ZGU4MzkuLmI2MjMyZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvYnJhbmNoLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCWJpdCA9IChpbnNuLmlfZm9ybWF0LnJ0ID4+IDIpOwogCQliaXQgKz0gKGJpdCAhPSAwKTsKIAkJYml0ICs9IDIzOwotCQlzd2l0Y2ggKGluc24uaV9mb3JtYXQucnQpIHsKKwkJc3dpdGNoIChpbnNuLmlfZm9ybWF0LnJ0ICYgMykgewogCQljYXNlIDA6CS8qIGJjMWYgKi8KIAkJY2FzZSAyOgkvKiBiYzFmbCAqLwogCQkJaWYgKH5mY3IzMSAmICgxIDw8IGJpdCkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1idWdzNjQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jCmluZGV4IDQ3YTA4N2IuLmQyNjg4MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJImRhZGRpCSUwLCAlMSwgJTNcblx0IgogCQkiLnNldAlwb3AiCiAJCTogIj1yIiAodiksICI9JnIiICh0bXApCi0JCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWEpLCAiSSIgKDB4MTIzNCkpOworCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhVUwpLCAiSSIgKDB4MTIzNCkpOwogCXNldF9leGNlcHRfdmVjdG9yKDEyLCBoYW5kbGVyKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKQEAgLTIyNCw3ICsyMjQsNyBAQAogCQkiZHNybAklMSwgJTEsIDFcblx0IgogCQkiZGFkZGkJJTAsICUxLCAlMyIKIAkJOiAiPXIiICh2KSwgIj0mciIgKHRtcCkKLQkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YSksICJJIiAoMHgxMjM0KSk7CisJCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWFVTCksICJJIiAoMHgxMjM0KSk7CiAJc2V0X2V4Y2VwdF92ZWN0b3IoMTIsIGhhbmRsZXIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMjgwLDcgKzI4MCw3IEBACiAJCSJkYWRkdQklMSwgJTJcblx0IgogCQkiLnNldAlwb3AiCiAJCTogIj0mciIgKHYpLCAiPSZyIiAodyksICI9JnIiICh0bXApCi0JCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWEpLCAiSSIgKDB4MTIzNCkpOworCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhVUwpLCAiSSIgKDB4MTIzNCkpOwogCiAJaWYgKHYgPT0gdykgewogCQlwcmludGsoIm5vLlxuIik7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJImFkZGl1CSUxLCAkMCwgJTRcblx0IgogCQkiZGFkZHUJJTEsICUyIgogCQk6ICI9JnIiICh2KSwgIj0mciIgKHcpLCAiPSZyIiAodG1wKQotCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhKSwgIkkiICgweDEyMzQpKTsKKwkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YVVMKSwgIkkiICgweDEyMzQpKTsKIAogCWlmICh2ID09IHcpIHsKIAkJcHJpbnRrKCJ5ZXMuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IDU4YjNiMTQuLjhjMmMzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTIxLDYgKzEyMSw3IEBACiAJY2FzZSBDUFVfMjRLOgogCWNhc2UgQ1BVXzI1S0Y6CiAJY2FzZSBDUFVfMzRLOgorCWNhc2UgQ1BVXzc0SzoKICAJY2FzZSBDUFVfUFI0NDUwOgogCQljcHVfd2FpdCA9IHI0a193YWl0OwogCQlwcmludGsoIiBhdmFpbGFibGUuXG4iKTsKQEAgLTQzMiw2ICs0MzMsMTUgQEAKIAkJICAgICAgICAgICAgIE1JUFNfQ1BVX0xMU0M7CiAJCWMtPnRsYnNpemUgPSA2NDsKIAkJYnJlYWs7CisJY2FzZSBQUklEX0lNUF9SMTQwMDA6CisJCWMtPmNwdXR5cGUgPSBDUFVfUjE0MDAwOworCQljLT5pc2FfbGV2ZWwgPSBNSVBTX0NQVV9JU0FfSVY7CisJCWMtPm9wdGlvbnMgPSBNSVBTX0NQVV9UTEIgfCBNSVBTX0NQVV80S19DQUNIRSB8IE1JUFNfQ1BVXzRLRVggfAorCQkgICAgICAgICAgICAgTUlQU19DUFVfRlBVIHwgTUlQU19DUFVfMzJGUFIgfAorCQkJICAgICBNSVBTX0NQVV9DT1VOVEVSIHwgTUlQU19DUFVfV0FUQ0ggfAorCQkgICAgICAgICAgICAgTUlQU19DUFVfTExTQzsKKwkJYy0+dGxic2l6ZSA9IDY0OworCQlicmVhazsKIAl9CiB9CiAKQEAgLTU5Myw2ICs2MDMsOSBAQAogCWNhc2UgUFJJRF9JTVBfMzRLOgogCQljLT5jcHV0eXBlID0gQ1BVXzM0SzsKIAkJYnJlYWs7CisJY2FzZSBQUklEX0lNUF83NEs6CisJCWMtPmNwdXR5cGUgPSBDUFVfNzRLOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTY0Miw3ICs2NTUsNyBAQAogCWNhc2UgUFJJRF9JTVBfU0IxOgogCQljLT5jcHV0eXBlID0gQ1BVX1NCMTsKIAkJLyogRlBVIGluIHBhc3MxIGlzIGtub3duIHRvIGhhdmUgaXNzdWVzLiAqLwotCQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYpIDwgMHgyMCkKKwkJaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmKSA8IDB4MDIpCiAJCQljLT5vcHRpb25zICY9IH4oTUlQU19DUFVfRlBVIHwgTUlQU19DUFVfMzJGUFIpOwogCQlicmVhazsKIAljYXNlIFBSSURfSU1QX1NCMUE6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMgYi9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKaW5kZXggODNjODdmZS4uYTljNmRlMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUwpAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGFzbS9pc2FkZXAuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vd2FyLmg+CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJLm1hY3JvCXByZWVtcHRfc3RvcApAQCAtNzUsNiArNzgsMzcgQEAKIAlibmV6CXQwLCBzeXNjYWxsX2V4aXRfd29yawogCiBGRVhQT1JUKHJlc3RvcmVfYWxsKQkJCSMgcmVzdG9yZSBmdWxsIGZyYW1lCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworLyogRGV0ZWN0IGFuZCBleGVjdXRlIGRlZmVycmVkIElQSSAiaW50ZXJydXB0cyIgKi8KKwltb3ZlCWEwLHNwCisJamFsCWRlZmVycmVkX3NtdGNfaXBpCisvKiBSZS1hcm0gYW55IHRlbXBvcmFyaWx5IG1hc2tlZCBpbnRlcnJ1cHRzIG5vdCBleHBsaWNpdGx5ICJhY2tlZCIgKi8KKwltZmMwCXYwLCBDUDBfVENTVEFUVVMKKwlvcmkJdjEsIHYwLCBUQ1NUQVRVU19JWE1UCisJbXRjMAl2MSwgQ1AwX1RDU1RBVFVTCisJYW5kaQl2MCwgVENTVEFUVVNfSVhNVAorCWVoYgorCW1mYzAJdDAsIENQMF9UQ0NPTlRFWFQKKwlETVQJOQkJCQkjIGRtdCB0MQorCWphbAltaXBzX2loYgorCW1mYzAJdDIsIENQMF9TVEFUVVMKKwlhbmRpCXQzLCB0MCwgMHhmZjAwCisJb3IJdDIsIHQyLCB0MworCW10YzAJdDIsIENQMF9TVEFUVVMKKwllaGIKKwlhbmRpCXQxLCB0MSwgVlBFQ09OVFJPTF9URQorCWJlcXoJdDEsIDFmCisJRU1UCisxOgorCW1mYzAJdjEsIENQMF9UQ1NUQVRVUworCS8qIFdlIHNldCBJWE1UIGFib3ZlLCBYT1Igc2hvdWxkIGNsZWFyIGl0IGhlcmUgKi8KKwl4b3JpCXYxLCB2MSwgVENTVEFUVVNfSVhNVAorCW9yCXYxLCB2MCwgdjEKKwltdGMwCXYxLCBDUDBfVENTVEFUVVMKKwllaGIKKwl4b3IJdDAsIHQwLCB0MworCW10YzAJdDAsIENQMF9UQ0NPTlRFWFQKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJLnNldAlub2F0CiAJUkVTVE9SRV9URU1QCiAJUkVTVE9SRV9BVApAQCAtMTIwLDI4ICsxNTQsMTcgQEAKIAlqYWwJZG9fc3lzY2FsbF90cmFjZQogCWIJcmVzdW1lX3VzZXJzcGFjZQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19NVCkKKwogLyoKLSAqIENvbW1vbiBzcHVyaW91cyBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqIE1JUFMzMlIyIEluc3RydWN0aW9uIEhhemFyZCBCYXJyaWVyIC0gbXVzdCBiZSBjYWxsZWQKKyAqCisgKiBGb3IgQyBjb2RlIHVzZSB0aGUgaW5saW5lIHZlcnNpb24gbmFtZWQgaW5zdHJ1Y3Rpb25faGF6YXJkKCkuCiAgKi8KLUxFQUYoc3B1cmlvdXNfaW50ZXJydXB0KQotCS8qCi0JICogU29tZW9uZSB0cmllZCB0byBmb29sIHVzIGJ5IHNlbmRpbmcgYW4gaW50ZXJydXB0IGJ1dCB3ZQotCSAqIGNvdWxkbid0IGZpbmQgYSBjYXVzZSBmb3IgaXQuCi0JICovCi0JUFRSX0xBCXQxLCBpcnFfZXJyX2NvdW50Ci0jaWZkZWYgQ09ORklHX1NNUAotMToJbGwgICAgICB0MCwgKHQxKQotCWFkZGl1ICAgdDAsIDEKLQlzYyAgICAgIHQwLCAodDEpCi0jaWYgUjEwMDAwX0xMU0NfV0FSCi0JYmVxemwJdDAsIDFiCi0jZWxzZQotCWJlcXoJdDAsIDFiCi0jZW5kaWYKLSNlbHNlCi0JbHcgICAgICB0MCwgKHQxKQotCWFkZGl1ICAgdDAsIDEKLQlzdyAgICAgIHQwLCAodDEpCi0jZW5kaWYKLQlqCXJldF9mcm9tX2lycQotCUVORChzcHVyaW91c19pbnRlcnJ1cHQpCitMRUFGKG1pcHNfaWhiKQorCS5zZXQJbWlwczMycjIKKwlqci5oYglyYQorCW5vcAorCUVORChtaXBzX2loYikKKworI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyIG9yIENPTkZJR19NSVBTX01UICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLWxvdy5TCmluZGV4IDIzNWFkOWYuLjVmZDdhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLWxvdy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLWxvdy5TCkBAIC01NCw5ICs1NCwxMSBAQAogCQkgKi8KIAkJbWZjMAlrMCwgQ1AwX0NBVVNFCiAJCWFuZGkJazAsIGswLCAweDdjCi0JCWFkZAlrMSwgazEsIGswCi0JCVBUUl9MCWswLCBzYXZlZF92ZWN0b3JzKGsxKQotCQlqcglrMAorI2lmZGVmIENPTkZJR182NEJJVAorCQlkc2xsCWswLCBrMCwgMQorI2VuZGlmCisJCVBUUl9MCWsxLCBzYXZlZF92ZWN0b3JzKGswKQorCQlqcglrMQogCQlub3AKIDE6CiAJCW1vdmUJazAsIHNwCkBAIC0yODMsMTEgKzI4NSwzMyBAQAogICovCiAKIDM6CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKiBSZWFkLW1vZGlmeSB3cml0ZSBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMgKi8KKwkJbWZjMAl0MiwgQ1AwX1RDU1RBVFVTCisJCW9yaQl0MSwgdDIsIFRDU1RBVFVTX0lYTVQKKwkJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJCWFuZGkJdDIsIHQyLCBUQ1NUQVRVU19JWE1UCisJCWVoYgorCQlETVQJOQkJCQkjIGRtdAl0MQorCQlqYWwJbWlwc19paGIKKwkJbm9wCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQltZmMwCXQwLCBDUDBfU1RBVFVTCiAJCW9yaQl0MCwgMHgxZgogCQl4b3JpCXQwLCAweDFmCiAJCW10YzAJdDAsIENQMF9TVEFUVVMKLQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyAgICAgICAgCWFuZGkgICAgdDEsIHQxLCBWUEVDT05UUk9MX1RFCisgICAgICAgIAliZXF6ICAgIHQxLCA5ZgorCQlub3AKKyAgICAgICAgCUVNVAkJCQkJIyBlbXQKKzk6CisJCW1mYzAJdDEsIENQMF9UQ1NUQVRVUworCQl4b3JpCXQxLCB0MSwgVENTVEFUVVNfSVhNVAorCQlvcgl0MSwgdDEsIHQyCisJCW10YzAJdDEsIENQMF9UQ1NUQVRVUworCQllaGIKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCUxPTkdfTAl2MCwgR0RCX0ZSX1NUQVRVUyhzcCkKIAkJTE9OR19MCXYxLCBHREJfRlJfRVBDKHNwKQogCQltdGMwCXYwLCBDUDBfU1RBVFVTCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2dkYi1zdHViLmMgYi9hcmNoL21pcHMva2VybmVsL2dkYi1zdHViLmMKaW5kZXggZDRmODhlMC4uNmVjYmRjMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9nZGItc3R1Yi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAvKgogICogZXh0ZXJuYWwgbG93LWxldmVsIHN1cHBvcnQgcm91dGluZXMKQEAgLTY2OSw2ICs2NzAsNjQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKKy8qCisgKiBHREIgc3R1YiBuZWVkcyB0byBjYWxsIGtnZGJfd2FpdCBvbiBhbGwgcHJvY2Vzc29yIHdpdGggaW50ZXJydXB0cworICogZGlzYWJsZWQsIHNvIGl0IHVzZXMgaXQncyBvd24gc3BlY2lhbCB2YXJpYW50LgorICovCitzdGF0aWMgaW50IGtnZGJfc21wX2NhbGxfa2dkYl93YWl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7CisJaW50IGksIGNwdXMgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogQ2FuIGRpZSBzcGVjdGFjdWxhcmx5IGlmIHRoaXMgQ1BVIGlzbid0IHlldCBtYXJrZWQgb25saW5lCisJICovCisJQlVHX09OKCFjcHVfb25saW5lKGNwdSkpOworCisJaWYgKCFjcHVzKQorCQlyZXR1cm4gMDsKKworCWlmIChzcGluX2lzX2xvY2tlZCgmc21wX2NhbGxfbG9jaykpIHsKKwkJLyoKKwkJICogU29tZSBvdGhlciBwcm9jZXNzb3IgaXMgdHJ5aW5nIHRvIG1ha2UgdXMgZG8gc29tZXRoaW5nCisJCSAqIGJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gcmVzcG9uZC4uLiBnaXZlIHVwCisJCSAqLworCQlyZXR1cm4gLTE7CisJCX0KKworCS8qCisJICogV2Ugd2lsbCBjb250aW51ZSBoZXJlLCBhY2NlcHRpbmcgdGhlIGZhY3QgdGhhdAorCSAqIHRoZSBrZXJuZWwgbWF5IGRlYWRsb2NrIGlmIGFub3RoZXIgQ1BVIGF0dGVtcHRzCisJICogdG8gY2FsbCBzbXBfY2FsbF9mdW5jdGlvbiBub3cuLi4KKwkgKi8KKworCWRhdGEuZnVuYyA9IGtnZGJfd2FpdDsKKwlkYXRhLmluZm8gPSBOVUxMOworCWF0b21pY19zZXQoJmRhdGEuc3RhcnRlZCwgMCk7CisJZGF0YS53YWl0ID0gMDsKKworCXNwaW5fbG9jaygmc21wX2NhbGxfbG9jayk7CisJY2FsbF9kYXRhID0gJmRhdGE7CisJbWIoKTsKKworCS8qIFNlbmQgYSBtZXNzYWdlIHRvIGFsbCBvdGhlciBDUFVzIGFuZCB3YWl0IGZvciB0aGVtIHRvIHJlc3BvbmQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQorCQlpZiAoY3B1X29ubGluZShpKSAmJiBpICE9IGNwdSkKKwkJCWNvcmVfc2VuZF9pcGkoaSwgU01QX0NBTExfRlVOQ1RJT04pOworCisJLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKwkvKiBGSVhNRTogbG9jay11cCBkZXRlY3Rpb24sIGJhY2t0cmFjZSBvbiBsb2NrLXVwICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLnN0YXJ0ZWQpICE9IGNwdXMpCisJCWJhcnJpZXIoKTsKKworCWNhbGxfZGF0YSA9IE5VTEw7CisJc3Bpbl91bmxvY2soJnNtcF9jYWxsX2xvY2spOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgY29tbWFuZCBwcm9jZXNzaW5nIGZvciBpbnRlcmZhY2luZyB0byBnZGIuICBJdApAQCAtNzE4LDcgKzc3Nyw3IEBACiAJLyoKIAkgKiBmb3JjZSBvdGhlciBjcHVzIHRvIGVudGVyIGtnZGIKIAkgKi8KLQlzbXBfY2FsbF9mdW5jdGlvbihrZ2RiX3dhaXQsIE5VTEwsIDAsIDApOworCWtnZGJfc21wX2NhbGxfa2dkYl93YWl0KCk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGJyZWFrcG9pbnQoKSBpbmNyZW1lbnQgdGhlIFBDCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMgYi9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMKaW5kZXggMTNmMjJkMS4uZmY3YWYzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9nZW5leC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVvcHMuaD4KICNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2ZwcmVnZGVmLmg+CkBAIC0xMjIsNiArMTIzLDIwIEBACiAJLnNldAlwb3AKIAlFTkQoZXhjZXB0X3ZlYzNfcjQwMDApCiAKKwlfX0ZJTklUCisKKwkuYWxpZ24gIDUKK05FU1RFRChoYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKKwlTQVZFX0FMTAorCUNMSQorCisJUFRSX0xBCXJhLCByZXRfZnJvbV9pcnEKKwltb3ZlCWEwLCBzcAorCWoJcGxhdF9pcnFfZGlzcGF0Y2gKKwlFTkQoaGFuZGxlX2ludCkKKworCV9fSU5JVAorCiAvKgogICogU3BlY2lhbCBpbnRlcnJ1cHQgdmVjdG9yIGZvciBNSVBTNjQgSVNBICYgZW1iZWRkZWQgTUlQUyBwcm9jZXNzb3JzLgogICogVGhpcyBpcyBhIGRlZGljYXRlZCBpbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3RvciB3aGljaCByZWR1Y2VzIHRoZQpAQCAtMTU3LDYgKzE3MiwxNSBAQAogCVNBVkVfQVQKIAkuc2V0CXB1c2gKIAkuc2V0CW5vcmVvcmRlcgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFRvIGtlZXAgZnJvbSBibGluZGx5IGJsb2NraW5nICphbGwqIGludGVycnVwdHMKKwkgKiBkdXJpbmcgc2VydmljZSBieSBTTVRDIGtlcm5lbCwgd2UgYWxzbyB3YW50IHRvCisJICogcGFzcyB0aGUgSU0gdmFsdWUgdG8gYmUgY2xlYXJlZC4KKwkgKi8KK0VYUE9SVChleGNlcHRfdmVjX3ZpX21vcmkpCisJb3JpCWEwLCAkMCwgMAorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIEVYUE9SVChleGNlcHRfdmVjX3ZpX2x1aSkKIAlsdWkJdjAsIDAJCS8qIFBhdGNoZWQgKi8KIAlqCWV4Y2VwdF92ZWNfdmlfaGFuZGxlcgpAQCAtMTczLDYgKzE5NywyNSBAQAogTkVTVEVEKGV4Y2VwdF92ZWNfdmlfaGFuZGxlciwgMCwgc3ApCiAJU0FWRV9URU1QCiAJU0FWRV9TVEFUSUMKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBTTVRDIGhhcyBhbiBpbnRlcmVzdGluZyBwcm9ibGVtIHRoYXQgaW50ZXJydXB0cyBhcmUgbGV2ZWwtdHJpZ2dlcmVkLAorCSAqIGFuZCB0aGUgQ0xJIG1hY3JvIHdpbGwgY2xlYXIgRVhMLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgZHVwbGljYXRlCisJICogaW50ZXJydXB0IHNlcnZpY2UgaW52b2NhdGlvbi4gU28gd2UgbmVlZCB0byBjbGVhciB0aGUgYXNzb2NpYXRlZAorCSAqIElNIGJpdCBvZiBTdGF0dXMgcHJpb3IgdG8gZG9pbmcgQ0xJLCBhbmQgcmVzdG9yZSBpdCBhZnRlciB0aGUKKwkgKiBzZXJ2aWNlIHJvdXRpbmUgaGFzIGJlZW4gaW52b2tlZCAtIHdlIG11c3QgYXNzdW1lIHRoYXQgdGhlCisJICogc2VydmljZSByb3V0aW5lIHdpbGwgaGF2ZSBjbGVhcmVkIHRoZSBzdGF0ZSwgYW5kIGFueSBhY3RpdmUKKwkgKiBsZXZlbCByZXByZXNlbnRzIGEgbmV3IG9yIG90aGVyd2lzZWQgdW5zZXJ2aWNlZCBldmVudC4uLgorCSAqLworCW1mYzAJdDEsIENQMF9TVEFUVVMKKwlhbmQJdDAsIGEwLCB0MQorCW1mYzAJdDIsIENQMF9UQ0NPTlRFWFQKKwlvcgl0MCwgdDAsIHQyCisJbXRjMAl0MCwgQ1AwX1RDQ09OVEVYVAorCXhvcgl0MSwgdDEsIHQwCisJbXRjMAl0MSwgQ1AwX1NUQVRVUworCWVoYgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlDTEkKIAltb3ZlCWEwLCBzcAogCWphbHIJdjAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKaW5kZXggMmU5MTIyYS4uYmRmNmY2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CkBAIC04MiwxMiArODMsMzMgQEAKIAkgKi8KIAkubWFjcm8Jc2V0dXBfYzBfc3RhdHVzIHNldCBjbHIKIAkuc2V0CXB1c2gKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBGb3IgU01UQywgd2UgbmVlZCB0byBzZXQgcHJpdmlsZWdlIGFuZCBkaXNhYmxlIGludGVycnVwdHMgb25seSBmb3IKKwkgKiB0aGUgY3VycmVudCBUQywgdXNpbmcgdGhlIFRDU3RhdHVzIHJlZ2lzdGVyLgorCSAqLworCW1mYzAJdDAsIENQMF9UQ1NUQVRVUworCS8qIEZvcnR1bmF0ZWx5IENVIDAgaXMgaW4gdGhlIHNhbWUgcGxhY2UgaW4gYm90aCByZWdpc3RlcnMgKi8KKwkvKiBTZXQgVENVMCwgVE1YLCBUS1NVIChmb3IgbGF0ZXIgaW52ZXJzaW9uKSBhbmQgSVhNVCAqLworCWxpCXQxLCBTVDBfQ1UwIHwgMHgwODAwMWMwMAorCW9yCXQwLCB0MQorCS8qIENsZWFyIFRLU1UsIGxlYXZlIElYTVQgKi8KKwl4b3JpCXQwLCAweDAwMDAxODAwCisJbXRjMAl0MCwgQ1AwX1RDU1RBVFVTCisJZWhiCisJLyogV2UgbmVlZCB0byBsZWF2ZSB0aGUgZ2xvYmFsIElFIGJpdCBzZXQsIGJ1dCBjbGVhciBFWEwuLi4qLworCW1mYzAJdDAsIENQMF9TVEFUVVMKKwlvcgl0MCwgU1QwX0NVMCB8IFNUMF9FWEwgfCBTVDBfRVJMIHwgXHNldCB8IFxjbHIKKwl4b3IJdDAsIFNUMF9FWEwgfCBTVDBfRVJMIHwgXGNscgorCW10YzAJdDAsIENQMF9TVEFUVVMKKyNlbHNlCiAJbWZjMAl0MCwgQ1AwX1NUQVRVUwogCW9yCXQwLCBTVDBfQ1UwfFxzZXR8MHgxZnxcY2xyCiAJeG9yCXQwLCAweDFmfFxjbHIKIAltdGMwCXQwLCBDUDBfU1RBVFVTCiAJLnNldAlub3Jlb3JkZXIKIAlzbGwJemVybywzCQkJCSMgZWhiCisjZW5kaWYKIAkuc2V0CXBvcAogCS5lbmRtCiAKQEAgLTEzNCw2ICsxNTYsMjQgQEAKIAogCUFSQzY0X1RXSURETEVfUEMKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIEluIFNNVEMga2VybmVsLCAiQ0xJIiBpcyB0aHJlYWQtc3BlY2lmaWMsIGluIFRDU3RhdHVzLgorCSAqIFdlIHN0aWxsIG5lZWQgdG8gZW5hYmxlIGludGVycnVwdHMgZ2xvYmFsbHkgaW4gU3RhdHVzLAorCSAqIGFuZCBjbGVhciBFWEwvRVJMLgorCSAqCisJICogVENDb250ZXh0IGlzIHVzZWQgdG8gdHJhY2sgaW50ZXJydXB0IGxldmVscyB1bmRlcgorCSAqIHNlcnZpY2UgaW4gU01UQyBrZXJuZWwuIENsZWFyIGZvciBib290IFRDIGJlZm9yZQorCSAqIGFsbG93aW5nIGFueSBpbnRlcnJ1cHRzLgorCSAqLworCW10YzAJemVybywgQ1AwX1RDQ09OVEVYVAorCisJbWZjMAl0MCwgQ1AwX1NUQVRVUworCW9yaQl0MCwgdDAsIDB4ZmYxZgorCXhvcmkJdDAsIHQwLCAweDAwMWUKKwltdGMwCXQwLCBDUDBfU1RBVFVTCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCiAJUFRSX0xBCQl0MCwgX19ic3Nfc3RhcnQJCSMgY2xlYXIgLmJzcwogCUxPTkdfUwkJemVybywgKHQwKQogCVBUUl9MQQkJdDEsIF9fYnNzX3N0b3AgLSBMT05HU0laRQpAQCAtMTY2LDggKzIwNiwyNSBAQAogICogZnVuY3Rpb24gYWZ0ZXIgc2V0dGluZyB1cCB0aGUgc3RhY2sgYW5kIGdwIHJlZ2lzdGVycy4KICAqLwogTkVTVEVEKHNtcF9ib290c3RyYXAsIDE2LCBzcCkKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBSZWFkLW1vZGlmeS13cml0ZXMgb2YgU3RhdHVzIG11c3QgYmUgYXRvbWljLCBhbmQgdGhpcworCSAqIGlzIG9uZSBjYXNlIHdoZXJlIENMSSBpcyBpbnZva2VkIHdpdGhvdXQgRVhMIGJlaW5nCisJICogbmVjZXNzYXJpbHkgc2V0LiBUaGUgQ0xJIGFuZCBzZXR1cF9jMF9zdGF0dXMgd2lsbAorCSAqIGluIGZhY3QgYmUgcmVkdW5kYW50IGZvciBhbGwgYnV0IHRoZSBmaXJzdCBUQyBvZgorCSAqIGVhY2ggVlBFIGJlaW5nIGJvb3RlZC4KKwkgKi8KKwlETVQJMTAJIyBkbXQgdDIgLyogdDAsIHQxIGFyZSB1c2VkIGJ5IENMSSBhbmQgc2V0dXBfYzBfc3RhdHVzKCkgKi8KKwlqYWwJbWlwc19paGIKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJc2V0dXBfYzBfc3RhdHVzX3NlYwogCXNtcF9zbGF2ZV9zZXR1cAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlhbmRpCXQyLCB0MiwgVlBFQ09OVFJPTF9URQorCWJlcXoJdDIsIDJmCisJRU1UCQkjIGVtdAorMjoKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJaglzdGFydF9zZWNvbmRhcnkKIAlFTkQoc21wX2Jvb3RzdHJhcCkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1ZGY2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEltcGxlbWVudHMgZGV2aWNlIGluZm9ybWF0aW9uIGZvciBpODI1MyB0aW1lciBjaGlwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworc3RhdGljIF9faW5pdCBpbnQgYWRkX3Bjc3Brcih2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCWludCByZXQ7CisKKwlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicGNzcGtyIiwgLTEpOworCWlmICghcGQpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CisKKwlyZXR1cm4gcmV0OworfQorZGV2aWNlX2luaXRjYWxsKGFkZF9wY3Nwa3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCmluZGV4IGI5NzRhYzkuLjIxMjViYTVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCkBAIC0xODcsNiArMTg3LDEwIEBACiAJCW91dGIoY2FjaGVkXzIxLDB4MjEpOwogCQlvdXRiKDB4NjAraXJxLDB4MjApOwkvKiAnU3BlY2lmaWMgRU9JJyB0byBtYXN0ZXIgKi8KIAl9CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworICAgICAgICBpZiAoaXJxX2h3bWFza1tpcnFdICYgU1QwX0lNKQorICAgICAgICAJc2V0X2MwX3N0YXR1cyhpcnFfaHdtYXNrW2lycV0gJiBTVDBfSU0pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKaW5kZXggM2Y2NTNjNy4uOTdlYmRjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCkBAIC03Niw2ICs3NiwxMSBAQAogCW1hc2tfbXNjX2lycShpcnEpOwogCWlmICghY3B1X2hhc192ZWljKQogCQlNU0NJQ19XUklURShNU0MwMV9JQ19FT0ksIDApOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKiBUaGlzIGFjdHVhbGx5IG5lZWRzIHRvIGJlIGEgY2FsbCBpbnRvIHBsYXRmb3JtIGNvZGUgKi8KKwlpZiAoaXJxX2h3bWFza1tpcnFdICYgU1QwX0lNKQorCQlzZXRfYzBfc3RhdHVzKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfQogCiAvKgpAQCAtOTIsNiArOTcsMTAgQEAKIAkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK2lycSo4LCByIHwgfk1TQzAxX0lDX1NVUF9FREdFX0JJVCk7CiAJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtpcnEqOCwgcik7CiAJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlpZiAoaXJxX2h3bWFza1tpcnFdICYgU1QwX0lNKQorCQlzZXRfYzBfc3RhdHVzKGlycV9od21hc2tbaXJxXSAmIFNUMF9JTSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKaW5kZXggM2RkNzZiMy4uM2RjZTc0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCkBAIC0zOCw2ICszOCwxNSBAQAogCiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworLyoKKyAqIFNNVEMgS2VybmVsIG5lZWRzIHRvIG1hbmlwdWxhdGUgbG93LWxldmVsIENQVSBpbnRlcnJ1cHQgbWFzaworICogaW4gZG9fSVJRLiBUaGVzZSBhcmUgcGFzc2VkIGluIHNldHVwX2lycV9zbXRjKCkgYW5kIHN0b3JlZAorICogaW4gdGhpcyB0YWJsZS4KKyAqLwordW5zaWduZWQgbG9uZyBpcnFfaHdtYXNrW05SX0lSUVNdOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogI3VuZGVmIGRvX0lSUQogCiAvKgpAQCAtNDksNiArNTgsNyBAQAogewogCWlycV9lbnRlcigpOwogCisJX19ET19JUlFfU01UQ19IT09LKCk7CiAJX19kb19JUlEoaXJxLCByZWdzKTsKIAogCWlycV9leGl0KCk7CkBAIC0xMDEsNiArMTExLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBzcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJYXRvbWljX2luYygmaXJxX2Vycl9jb3VudCk7Cit9CisKICNpZmRlZiBDT05GSUdfS0dEQgogZXh0ZXJuIHZvaWQgYnJlYWtwb2ludCh2b2lkKTsKIGV4dGVybiB2b2lkIHNldF9kZWJ1Z190cmFwcyh2b2lkKTsKQEAgLTEyNCw2ICsxMzksOSBAQAogCQlpcnFfZGVzY1tpXS5kZXB0aCAgID0gMTsKIAkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZub19pcnFfdHlwZTsKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9kZXNjW2ldLmxvY2spOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJaXJxX2h3bWFza1tpXSA9IDA7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCX0KIAogCWFyY2hfaW5pdF9pcnEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jIGIvYXJjaC9taXBzL2tlcm5lbC9rc3BkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2YTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxhc20vdnBlLmg+CisjaW5jbHVkZSA8YXNtL3J0bHguaD4KKyNpbmNsdWRlIDxhc20va3NwZC5oPgorCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZSA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9raHo7CisKK3N0cnVjdCBtdHNwX3N5c2NhbGwgeworCWludCBjbWQ7CisJdW5zaWduZWQgY2hhciBhYmk7CisJdW5zaWduZWQgY2hhciBzaXplOworfTsKKworc3RydWN0IG10c3Bfc3lzY2FsbF9yZXQgeworCWludCByZXR2YWw7CisJaW50IGVycm5vOworfTsKKworc3RydWN0IG10c3Bfc3lzY2FsbF9nZW5lcmljIHsKKwlpbnQgYXJnMDsKKwlpbnQgYXJnMTsKKwlpbnQgYXJnMjsKKwlpbnQgYXJnMzsKKwlpbnQgYXJnNDsKKwlpbnQgYXJnNTsKKwlpbnQgYXJnNjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGtzcGRfbm90aWZ5bGlzdDsKK3N0YXRpYyBpbnQgc3Bfc3RvcHBpbmcgPSAwOworCisvKiB0aGVzZSBzaG91bGQgbWF0Y2ggd2l0aCB0aG9zZSBpbiB0aGUgU0RFIGtpdCAqLworI2RlZmluZSBNVFNQX1NZU0NBTExfQkFTRQkwCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9FWElUCShNVFNQX1NZU0NBTExfQkFTRSArIDApCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9PUEVOCShNVFNQX1NZU0NBTExfQkFTRSArIDEpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9SRUFECShNVFNQX1NZU0NBTExfQkFTRSArIDIpCisjZGVmaW5lIE1UU1BfU1lTQ0FMTF9XUklURQkoTVRTUF9TWVNDQUxMX0JBU0UgKyAzKQorI2RlZmluZSBNVFNQX1NZU0NBTExfQ0xPU0UJKE1UU1BfU1lTQ0FMTF9CQVNFICsgNCkKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0xTRUVLMzIJKE1UU1BfU1lTQ0FMTF9CQVNFICsgNSkKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0lTQVRUWQkoTVRTUF9TWVNDQUxMX0JBU0UgKyA2KQorI2RlZmluZSBNVFNQX1NZU0NBTExfR0VUVElNRQkoTVRTUF9TWVNDQUxMX0JBU0UgKyA3KQorI2RlZmluZSBNVFNQX1NZU0NBTExfUElQRUZSRVEJKE1UU1BfU1lTQ0FMTF9CQVNFICsgOCkKKyNkZWZpbmUgTVRTUF9TWVNDQUxMX0dFVFRPRAkoTVRTUF9TWVNDQUxMX0JBU0UgKyA5KQorCisjZGVmaW5lIE1UU1BfT19SRE9OTFkJCTB4MDAwMAorI2RlZmluZSBNVFNQX09fV1JPTkxZCQkweDAwMDEKKyNkZWZpbmUgTVRTUF9PX1JEV1IJCTB4MDAwMgorI2RlZmluZSBNVFNQX09fTk9OQkxPQ0sJCTB4MDAwNAorI2RlZmluZSBNVFNQX09fQVBQRU5ECQkweDAwMDgKKyNkZWZpbmUgTVRTUF9PX1NITE9DSwkJMHgwMDEwCisjZGVmaW5lIE1UU1BfT19FWExPQ0sJCTB4MDAyMAorI2RlZmluZSBNVFNQX09fQVNZTkMJCTB4MDA0MAorI2RlZmluZSBNVFNQX09fRlNZTkMJCU9fU1lOQworI2RlZmluZSBNVFNQX09fTk9GT0xMT1cJCTB4MDEwMAorI2RlZmluZSBNVFNQX09fU1lOQwkJMHgwMDgwCisjZGVmaW5lIE1UU1BfT19DUkVBVAkJMHgwMjAwCisjZGVmaW5lIE1UU1BfT19UUlVOQwkJMHgwNDAwCisjZGVmaW5lIE1UU1BfT19FWENMCQkweDA4MDAKKyNkZWZpbmUgTVRTUF9PX0JJTkFSWQkJMHg4MDAwCisKKyNkZWZpbmUgU1BfVlBFIDEKKworc3RydWN0IGFwc3BfdGFibGUgIHsKKwlpbnQgc3A7CisJaW50IGFwOworfTsKKworLyogd2UgbWlnaHQgd2FudCB0byBkbyB0aGUgbW9kZSBmbGFncyB0b28gKi8KK3N0cnVjdCBhcHNwX3RhYmxlIG9wZW5fZmxhZ3NfdGFibGVbXSA9IHsKKwl7IE1UU1BfT19SRFdSLCBPX1JEV1IgfSwKKwl7IE1UU1BfT19XUk9OTFksIE9fV1JPTkxZIH0sCisJeyBNVFNQX09fQ1JFQVQsIE9fQ1JFQVQgfSwKKwl7IE1UU1BfT19UUlVOQywgT19UUlVOQyB9LAorCXsgTVRTUF9PX05PTkJMT0NLLCBPX05PTkJMT0NLIH0sCisJeyBNVFNQX09fQVBQRU5ELCBPX0FQUEVORCB9LAorCXsgTVRTUF9PX05PRk9MTE9XLCBPX05PRk9MTE9XIH0KK307CisKK3N0cnVjdCBhcHNwX3RhYmxlIHN5c2NhbGxfY29tbWFuZF90YWJsZVtdID0geworCXsgTVRTUF9TWVNDQUxMX09QRU4sIF9fTlJfb3BlbiB9LAorCXsgTVRTUF9TWVNDQUxMX0NMT1NFLCBfX05SX2Nsb3NlIH0sCisJeyBNVFNQX1NZU0NBTExfUkVBRCwgX19OUl9yZWFkIH0sCisJeyBNVFNQX1NZU0NBTExfV1JJVEUsIF9fTlJfd3JpdGUgfSwKKwl7IE1UU1BfU1lTQ0FMTF9MU0VFSzMyLCBfX05SX2xzZWVrIH0KK307CisKK3N0YXRpYyBpbnQgc3Bfc3lzY2FsbChpbnQgbnVtLCBpbnQgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKK3sKKwlyZWdpc3RlciBsb25nIGludCBfbnVtICBfX2FzbV9fICgiJDIiKSA9IG51bTsKKwlyZWdpc3RlciBsb25nIGludCBfYXJnMCAgX19hc21fXyAoIiQ0IikgPSBhcmcwOworCXJlZ2lzdGVyIGxvbmcgaW50IF9hcmcxICBfX2FzbV9fICgiJDUiKSA9IGFyZzE7CisJcmVnaXN0ZXIgbG9uZyBpbnQgX2FyZzIgIF9fYXNtX18gKCIkNiIpID0gYXJnMjsKKwlyZWdpc3RlciBsb25nIGludCBfYXJnMyAgX19hc21fXyAoIiQ3IikgPSBhcmczOworCisJbW1fc2VnbWVudF90IG9sZF9mczsKKworCW9sZF9mcyA9IGdldF9mcygpOworIAlzZXRfZnMoS0VSTkVMX0RTKTsKKworICAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIAkiCXN5c2NhbGwJCQkJCVxuIgorIAk6ICI9ciIgKF9udW0pLCAiPXIiIChfYXJnMykKKyAJOiAiciIgKF9udW0pLCAiciIgKF9hcmcwKSwgInIiIChfYXJnMSksICJyIiAoX2FyZzIpLCAiciIgKF9hcmczKSk7CisKKwlzZXRfZnMob2xkX2ZzKTsKKworCS8qICRhMyBpcyBlcnJvciBmbGFnICovCisJaWYgKF9hcmczKQorCQlyZXR1cm4gLV9udW07CisKKwlyZXR1cm4gX251bTsKK30KKworc3RhdGljIGludCB0cmFuc2xhdGVfc3lzY2FsbF9jb21tYW5kKGludCBjbWQpCit7CisJaW50IGk7CisJaW50IHJldCA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3lzY2FsbF9jb21tYW5kX3RhYmxlKTsgaSsrKSB7CisJCWlmICgoY21kID09IHN5c2NhbGxfY29tbWFuZF90YWJsZVtpXS5zcCkpCisJCQlyZXR1cm4gc3lzY2FsbF9jb21tYW5kX3RhYmxlW2ldLmFwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHJhbnNsYXRlX29wZW5fZmxhZ3MoaW50IGZsYWdzKQoreworCWludCBpOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yob3Blbl9mbGFnc190YWJsZSkgLyBzaXplb2Yoc3RydWN0IGFwc3BfdGFibGUpKTsKKwkgICAgIGkrKykgeworCQlpZiggKGZsYWdzICYgb3Blbl9mbGFnc190YWJsZVtpXS5zcCkgKSB7CisJCQlyZXQgfD0gb3Blbl9mbGFnc190YWJsZVtpXS5hcDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgc3Bfc2V0ZnN1aWRnaWQoIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQoreworCWN1cnJlbnQtPmZzdWlkID0gdWlkOworCWN1cnJlbnQtPmZzZ2lkID0gZ2lkOworCisJa2V5X2ZzdWlkX2NoYW5nZWQoY3VycmVudCk7CisJa2V5X2ZzZ2lkX2NoYW5nZWQoY3VycmVudCk7Cit9CisKKy8qCisgKiBFeHBlY3RzIGEgcmVxdWVzdCB0byBiZSBvbiB0aGUgc3lzaW8gY2hhbm5lbC4gUmVhZHMgaXQuICBEZWNpZGVzIHdoZXRoZXIKKyAqIGl0cyBhIGxpbnV4IHN5c2NhbGwgYW5kIHJ1bnMgaXQsIG9yIHdoYXRldmVyLiAgUHV0cyB0aGUgcmV0dXJuIGNvZGUgYmFjaworICogaW50byB0aGUgcmVxdWVzdCBhbmQgc2VuZHMgdGhlIHdob2xlIHRoaW5nIGJhY2suCisgKi8KK3ZvaWQgc3Bfd29ya19oYW5kbGVfcmVxdWVzdCh2b2lkKQoreworCXN0cnVjdCBtdHNwX3N5c2NhbGwgc2M7CisJc3RydWN0IG10c3Bfc3lzY2FsbF9nZW5lcmljIGdlbmVyaWM7CisJc3RydWN0IG10c3Bfc3lzY2FsbF9yZXQgcmV0OworCXN0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMgKm47CisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RydWN0IHRpbWV6b25lIHR6OworCWludCBjbWQ7CisKKwljaGFyICp2Y3dkOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisJaW50IHNpemU7CisKKwlyZXQucmV0dmFsID0gLTE7CisKKwlpZiAoIXJ0bHhfcmVhZChSVExYX0NIQU5ORUxfU1lTSU8sICZzYywgc2l6ZW9mKHN0cnVjdCBtdHNwX3N5c2NhbGwpLCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkV4cGVjdGVkIHJlcXVlc3QgYnV0IG5vdGhpbmcgdG8gcmVhZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzaXplID0gc2Muc2l6ZTsKKworCWlmIChzaXplKSB7CisJCWlmICghcnRseF9yZWFkKFJUTFhfQ0hBTk5FTF9TWVNJTywgJmdlbmVyaWMsIHNpemUsIDApKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkV4cGVjdGVkIHJlcXVlc3QgYnV0IG5vdGhpbmcgdG8gcmVhZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBSdW4gdGhlIHN5c2NhbGwgYXQgdGhlIHByaXZpbGVkZ2Ugb2YgdGhlIHVzZXIgd2hvIGxvYWRlZCB0aGUKKwkgICBTUCBwcm9ncmFtICovCisKKwlpZiAodnBlX2dldHVpZChTUF9WUEUpKQorCQlzcF9zZXRmc3VpZGdpZCggdnBlX2dldHVpZChTUF9WUEUpLCB2cGVfZ2V0Z2lkKFNQX1ZQRSkpOworCisJc3dpdGNoIChzYy5jbWQpIHsKKwkvKiBuZWVkcyB0aGUgZmxhZ3MgYXJndW1lbnQgdHJhbnNsYXRpbmcgZnJvbSBTREUga2l0IHRvCisJICAgbGludXggKi8KKyAJY2FzZSBNVFNQX1NZU0NBTExfUElQRUZSRVE6CisgCQlyZXQucmV0dmFsID0gY3B1X2toeiAqIDEwMDA7CisgCQlyZXQuZXJybm8gPSAwOworIAkJYnJlYWs7CisKKyAJY2FzZSBNVFNQX1NZU0NBTExfR0VUVE9EOgorIAkJbWVtc2V0KCZ0eiwgMCwgc2l6ZW9mKHR6KSk7CisgCQlpZiAoKHJldC5yZXR2YWwgPSBzcF9zeXNjYWxsKF9fTlJfZ2V0dGltZW9mZGF5LCAoaW50KSZ0diwKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkmdHosIDAsMCkpID09IDApCisJCXJldC5yZXR2YWwgPSB0di50dl9zZWM7CisKKwkJcmV0LmVycm5vID0gZXJybm87CisJCWJyZWFrOworCisgCWNhc2UgTVRTUF9TWVNDQUxMX0VYSVQ6CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobiwgJmtzcGRfbm90aWZ5bGlzdCwgbGlzdCkKKyAJCQluLT5rc3BkX3NwX2V4aXQoU1BfVlBFKTsKKwkJc3Bfc3RvcHBpbmcgPSAxOworCisJCXByaW50ayhLRVJOX0RFQlVHICJLU1BEIGdvdCBleGl0IHN5c2NhbGwgZnJvbSBTUCBleGl0Y29kZSAlZFxuIiwKKwkJICAgICAgIGdlbmVyaWMuYXJnMCk7CisgCQlicmVhazsKKworIAljYXNlIE1UU1BfU1lTQ0FMTF9PUEVOOgorIAkJZ2VuZXJpYy5hcmcxID0gdHJhbnNsYXRlX29wZW5fZmxhZ3MoZ2VuZXJpYy5hcmcxKTsKKworIAkJdmN3ZCA9IHZwZV9nZXRjd2QoU1BfVlBFKTsKKworIAkJLyogY2hhbmdlIHRvIHRoZSBjd2Qgb2YgdGhlIHByb2Nlc3MgdGhhdCBsb2FkZWQgdGhlIFNQIHByb2dyYW0gKi8KKwkJb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCQlzeXNfY2hkaXIodmN3ZCk7CisJCXNldF9mcyhvbGRfZnMpOworCisgCQlzYy5jbWQgPSBfX05SX29wZW47CisKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKyAgCWRlZmF1bHQ6CisgCQlpZiAoKHNjLmNtZCA+PSBfX05SX0xpbnV4KSAmJgorCQkgICAgKHNjLmNtZCA8PSAoX19OUl9MaW51eCArICBfX05SX0xpbnV4X3N5c2NhbGxzKSkgKQorCQkJY21kID0gc2MuY21kOworCQllbHNlCisJCQljbWQgPSB0cmFuc2xhdGVfc3lzY2FsbF9jb21tYW5kKHNjLmNtZCk7CisKKwkJaWYgKGNtZCA+PSAwKSB7CisJCQlyZXQucmV0dmFsID0gc3Bfc3lzY2FsbChjbWQsIGdlbmVyaWMuYXJnMCwgZ2VuZXJpYy5hcmcxLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpYy5hcmcyLCBnZW5lcmljLmFyZzMpOworCQkJcmV0LmVycm5vID0gZXJybm87CisJCX0gZWxzZQorIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiS1NQRDogVW5rbm93biBTUCBzeXNjYWxsIG51bWJlciAlZFxuIiwgc2MuY21kKTsKKwkJYnJlYWs7CisgCX0gLyogc3dpdGNoICovCisKKwlpZiAodnBlX2dldHVpZChTUF9WUEUpKQorCQlzcF9zZXRmc3VpZGdpZCggMCwgMCk7CisKKwlpZiAoKHJ0bHhfd3JpdGUoUlRMWF9DSEFOTkVMX1NZU0lPLCAmcmV0LCBzaXplb2Yoc3RydWN0IG10c3Bfc3lzY2FsbF9yZXQpLCAwKSkKKwkgICAgPCBzaXplb2Yoc3RydWN0IG10c3Bfc3lzY2FsbF9yZXQpKQorCQlwcmludGsoIktTUEQ6IHNwX3dvcmtfaGFuZGxlX3JlcXVlc3QgZmFpbGVkIHRvIHNlbmQgdG8gU1BcbiIpOworfQorCitzdGF0aWMgdm9pZCBzcF9jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMgPSBjdXJyZW50LT5maWxlczsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgZmR0YWJsZSAqZmR0OworCisJaiA9IDA7CisKKwkvKgorCSAqIEl0IGlzIHNhZmUgdG8gZGVyZWZlcmVuY2UgdGhlIGZkIHRhYmxlIHdpdGhvdXQgUkNVIG9yCisJICogLT5maWxlX2xvY2sKKwkgKi8KKwlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGxvbmcgc2V0OworCQlpID0gaiAqIF9fTkZEQklUUzsKKwkJaWYgKGkgPj0gZmR0LT5tYXhfZmRzZXQgfHwgaSA+PSBmZHQtPm1heF9mZHMpCisJCQlicmVhazsKKwkJc2V0ID0gZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHNbaisrXTsKKwkJd2hpbGUgKHNldCkgeworCQkJaWYgKHNldCAmIDEpIHsKKwkJCQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSB4Y2hnKCZmZHQtPmZkW2ldLCBOVUxMKTsKKwkJCQlpZiAoZmlsZSkKKwkJCQkJZmlscF9jbG9zZShmaWxlLCBmaWxlcyk7CisJCQl9CisJCQlpKys7CisJCQlzZXQgPj49IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hhbm5lbF9vcGVuID0gMDsKKworLyogdGhlIHdvcmsgaGFuZGxlciAqLworc3RhdGljIHZvaWQgc3Bfd29yayh2b2lkICpkYXRhKQoreworCWlmICghY2hhbm5lbF9vcGVuKSB7CisJCWlmKCBydGx4X29wZW4oUlRMWF9DSEFOTkVMX1NZU0lPLCAxKSAhPSAwKSB7CisJCQlwcmludGsoIktTUEQ6IHVuYWJsZSB0byBvcGVuIHNwIGNoYW5uZWxcbiIpOworCQkJc3Bfc3RvcHBpbmcgPSAxOworCQl9IGVsc2UgeworCQkJY2hhbm5lbF9vcGVuKys7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiS1NQRDogU1AgY2hhbm5lbCBvcGVuZWRcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJLyogd2FpdCBmb3Igc29tZSBkYXRhLCBhbGxvdyBpdCB0byBzbGVlcCAqLworCQlydGx4X3JlYWRfcG9sbChSVExYX0NIQU5ORUxfU1lTSU8sIDEpOworCisJCS8qIENoZWNrIHdlIGhhdmVuJ3QgYmVlbiB3b2tlbiBiZWNhdXNlIHdlIGFyZSBzdG9wcGluZyAqLworCQlpZiAoIXNwX3N0b3BwaW5nKQorCQkJc3Bfd29ya19oYW5kbGVfcmVxdWVzdCgpOworCX0KKworCWlmICghc3Bfc3RvcHBpbmcpCisJCXF1ZXVlX3dvcmsod29ya3F1ZXVlLCAmd29yayk7CisJZWxzZQorCQlzcF9jbGVhbnVwKCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0d29yayhpbnQgdnBlKQoreworCXNwX3N0b3BwaW5nID0gY2hhbm5lbF9vcGVuID0gMDsKKworCWlmICh3b3JrcXVldWUgPT0gTlVMTCkgeworCQlpZiAoKHdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrc3BkIikpID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHN0YXJ0IGtzcGRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJSU5JVF9XT1JLKCZ3b3JrLCBzcF93b3JrLCBOVUxMKTsKKwkJcXVldWVfd29yayh3b3JrcXVldWUsICZ3b3JrKTsKKwl9IGVsc2UKKwkJcXVldWVfd29yayh3b3JrcXVldWUsICZ3b3JrKTsKKworfQorCitzdGF0aWMgdm9pZCBzdG9wd29yayhpbnQgdnBlKQoreworCXNwX3N0b3BwaW5nID0gMTsKKworCXByaW50ayhLRVJOX0RFQlVHICJLU1BEOiBTUCBzdG9wcGluZ1xuIik7Cit9CisKK3ZvaWQga3NwZF9ub3RpZnkoc3RydWN0IGtzcGRfbm90aWZpY2F0aW9ucyAqbm90aWZ5KQoreworCWxpc3RfYWRkKCZub3RpZnktPmxpc3QsICZrc3BkX25vdGlmeWxpc3QpOworfQorCitzdGF0aWMgc3RydWN0IHZwZV9ub3RpZmljYXRpb25zIG5vdGlmeTsKK3N0YXRpYyBpbnQga3NwZF9tb2R1bGVfaW5pdCh2b2lkKQoreworCUlOSVRfTElTVF9IRUFEKCZrc3BkX25vdGlmeWxpc3QpOworCisJbm90aWZ5LnN0YXJ0ID0gc3RhcnR3b3JrOworCW5vdGlmeS5zdG9wID0gc3RvcHdvcms7CisJdnBlX25vdGlmeShTUF9WUEUsICZub3RpZnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtzcGRfbW9kdWxlX2V4aXQodm9pZCkKK3sKKworfQorCittb2R1bGVfaW5pdChrc3BkX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGtzcGRfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1JUFMgS1NQRCIpOworTU9EVUxFX0FVVEhPUigiRWxpemFiZXRoIE9sZGhhbSwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggM2Y0MGMzNy4uYTdkMmJiMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTM1Niw3MyArMzU2LDEzIEBACiBhc21saW5rYWdlIHNzaXplX3Qgc3lzMzJfcHJlYWQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCSAgICAgICBzaXplX3QgY291bnQsIHUzMiB1bnVzZWQsIHU2NCBhNCwgdTY0IGE1KQogewotCXNzaXplX3QgcmV0OwotCXN0cnVjdCBmaWxlICogZmlsZTsKLQlzc2l6ZV90ICgqcmVhZCkoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Ci0JbG9mZl90IHBvczsKLQotCXJldCA9IC1FQkFERjsKLQlmaWxlID0gZmdldChmZCk7Ci0JaWYgKCFmaWxlKQotCQlnb3RvIGJhZF9maWxlOwotCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQlnb3RvIG91dDsKLQlwb3MgPSBtZXJnZV82NChhNCwgYTUpOwotCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsICZwb3MsIGNvdW50KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gLUVJTlZBTDsKLQlpZiAoIWZpbGUtPmZfb3AgfHwgIShyZWFkID0gZmlsZS0+Zl9vcC0+cmVhZCkpCi0JCWdvdG8gb3V0OwotCWlmIChwb3MgPCAwKQotCQlnb3RvIG91dDsKLQlyZXQgPSAtRVNQSVBFOwotCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1BSRUFEKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gcmVhZChmaWxlLCBidWYsIGNvdW50LCAmcG9zKTsKLQlpZiAocmV0ID4gMCkKLQkJZG5vdGlmeV9wYXJlbnQoZmlsZS0+Zl9kZW50cnksIEROX0FDQ0VTUyk7Ci1vdXQ6Ci0JZnB1dChmaWxlKTsKLWJhZF9maWxlOgotCXJldHVybiByZXQ7CisJcmV0dXJuIHN5c19wcmVhZDY0KGZkLCBidWYsIGNvdW50LCBtZXJnZV82NChhNCwgYTUpKTsKIH0KIAogYXNtbGlua2FnZSBzc2l6ZV90IHN5czMyX3B3cml0ZSh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAogCQkJICAgICAgICBzaXplX3QgY291bnQsIHUzMiB1bnVzZWQsIHU2NCBhNCwgdTY0IGE1KQogewotCXNzaXplX3QgcmV0OwotCXN0cnVjdCBmaWxlICogZmlsZTsKLQlzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwotCWxvZmZfdCBwb3M7Ci0KLQlyZXQgPSAtRUJBREY7Ci0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBiYWRfZmlsZTsKLQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCi0JCWdvdG8gb3V0OwotCXBvcyA9IG1lcmdlXzY0KGE0LCBhNSk7Ci0JcmV0ID0gcndfdmVyaWZ5X2FyZWEoV1JJVEUsIGZpbGUsICZwb3MsIGNvdW50KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gLUVJTlZBTDsKLQlpZiAoIWZpbGUtPmZfb3AgfHwgISh3cml0ZSA9IGZpbGUtPmZfb3AtPndyaXRlKSkKLQkJZ290byBvdXQ7Ci0JaWYgKHBvcyA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gLUVTUElQRTsKLQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9QV1JJVEUpKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHdyaXRlKGZpbGUsIGJ1ZiwgY291bnQsICZwb3MpOwotCWlmIChyZXQgPiAwKQotCQlkbm90aWZ5X3BhcmVudChmaWxlLT5mX2RlbnRyeSwgRE5fTU9ESUZZKTsKLW91dDoKLQlmcHV0KGZpbGUpOwotYmFkX2ZpbGU6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3lzX3B3cml0ZTY0KGZkLCBidWYsIGNvdW50LCBtZXJnZV82NChhNCwgYTUpKTsKIH0KIAogYXNtbGlua2FnZSBpbnQgc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsKGNvbXBhdF9waWRfdCBwaWQsCkBAIC0xMTgyLDYgKzExMjIsMTYgQEAKIAlyZXR1cm4gc3lzX3JlYWRhaGVhZChmZCwgbWVyZ2VfNjQoYTIsIGEzKSwgY291bnQpOwogfQogCithc21saW5rYWdlIGxvbmcgc3lzMzJfc3luY19maWxlX3JhbmdlKGludCBmZCwgaW50IF9fcGFkLAorCXVuc2lnbmVkIGxvbmcgYTIsIHVuc2lnbmVkIGxvbmcgYTMsCisJdW5zaWduZWQgbG9uZyBhNCwgdW5zaWduZWQgbG9uZyBhNSwKKwlpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19zeW5jX2ZpbGVfcmFuZ2UoZmQsCisJCQltZXJnZV82NChhMiwgYTMpLCBtZXJnZV82NChhNCwgYTUpLAorCQkJZmxhZ3MpOworfQorCiAvKiBBcmd1bWVudCBsaXN0IHNpemVzIGZvciBzeXNfc29ja2V0Y2FsbCAqLwogI2RlZmluZSBBTCh4KSAoKHgpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzb2NrZXRjYWxsX25hcmdzWzE4XT17QUwoMCksQUwoMyksQUwoMyksQUwoMyksQUwoMiksQUwoMyksCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21pcHMtbXQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwcy1tdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjM3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL21pcHMtbXQuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqIEdlbmVyYWwgTUlQUyBNVCBzdXBwb3J0IHJvdXRpbmVzLCB1c2FibGUgaW4gQVAvU1AsIFNNVlAsIG9yIFNNVEMga2VybmVscworICogQ29weXJpZ2h0IChDKSAyMDA1IE1pcHMgVGVjaG5vbG9naWVzLCBJbmMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcjRrY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisvKgorICogQ1BVIG1hc2sgdXNlZCB0byBzZXQgcHJvY2VzcyBhZmZpbml0eSBmb3IgTVQgVlBFcy9UQ3Mgd2l0aCBGUFVzCisgKi8KKworY3B1bWFza190IG10X2ZwdV9jcHVtYXNrOworCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKwordW5zaWduZWQgbG9uZyBtdF9mcGVtdWxfdGhyZXNob2xkID0gMDsKKworLyoKKyAqIFJlcGxhY2VtZW50IGZ1bmN0aW9ucyBmb3IgdGhlIHN5c19zY2hlZF9zZXRhZmZpbml0eSgpIGFuZAorICogc3lzX3NjaGVkX2dldGFmZmluaXR5KCkgc3lzdGVtIGNhbGxzLCBzbyB0aGF0IHdlIGNhbiBpbnRlZ3JhdGUKKyAqIEZQVSBhZmZpbml0eSB3aXRoIHRoZSB1c2VyJ3MgcmVxdWVzdGVkIHByb2Nlc3NvciBhZmZpbml0eS4KKyAqIFRoaXMgY29kZSBpcyA5OCUgaWRlbnRpY2FsIHdpdGggdGhlIHN5c19zY2hlZF9zZXRhZmZpbml0eSgpCisgKiBhbmQgc3lzX3NjaGVkX2dldGFmZmluaXR5KCkgc3lzdGVtIGNhbGxzLCBhbmQgc2hvdWxkIGJlCisgKiB1cGRhdGVkIHdoZW4ga2VybmVsL3NjaGVkLmMgY2hhbmdlcy4KKyAqLworCisvKgorICogZmluZF9wcm9jZXNzX2J5X3BpZCAtIGZpbmQgYSBwcm9jZXNzIHdpdGggYSBtYXRjaGluZyBQSUQgdmFsdWUuCisgKiB1c2VkIGluIHN5c19zY2hlZF9zZXQvZ2V0YWZmaW5pdHkoKSBpbiBrZXJuZWwvc2NoZWQuYywgc28KKyAqIGNsb25lZCBoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHRhc2tfdCAqZmluZF9wcm9jZXNzX2J5X3BpZChwaWRfdCBwaWQpCit7CisJcmV0dXJuIHBpZCA/IGZpbmRfdGFza19ieV9waWQocGlkKSA6IGN1cnJlbnQ7Cit9CisKKworLyoKKyAqIG1pcHNtdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHkgLSBzZXQgdGhlIGNwdSBhZmZpbml0eSBvZiBhIHByb2Nlc3MKKyAqLworYXNtbGlua2FnZSBsb25nIG1pcHNtdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICp1c2VyX21hc2tfcHRyKQoreworCWNwdW1hc2tfdCBuZXdfbWFzazsKKwljcHVtYXNrX3QgZWZmZWN0aXZlX21hc2s7CisJaW50IHJldHZhbDsKKwl0YXNrX3QgKnA7CisKKwlpZiAobGVuIDwgc2l6ZW9mKG5ld19tYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19tYXNrLCB1c2VyX21hc2tfcHRyLCBzaXplb2YobmV3X21hc2spKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX2NwdV9ob3RwbHVnKCk7CisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CisJaWYgKCFwKSB7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJLyoKKwkgKiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIHNldF9jcHVzX2FsbG93ZWQgd2l0aCB0aGUKKwkgKiB0YXNrbGlzdF9sb2NrIGhlbGQuICBXZSB3aWxsIGJ1bXAgdGhlIHRhc2tfc3RydWN0J3MKKwkgKiB1c2FnZSBjb3VudCBhbmQgZHJvcCB0YXNrbGlzdF9sb2NrIGJlZm9yZSBpbnZva2luZworCSAqIHNldF9jcHVzX2FsbG93ZWQuCisJICovCisJZ2V0X3Rhc2tfc3RydWN0KHApOworCisJcmV0dmFsID0gLUVQRVJNOworCWlmICgoY3VycmVudC0+ZXVpZCAhPSBwLT5ldWlkKSAmJiAoY3VycmVudC0+ZXVpZCAhPSBwLT51aWQpICYmCisJCQkhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIFJlY29yZCBuZXcgdXNlci1zcGVjaWZpZWQgQ1BVIHNldCBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLworCXAtPnRocmVhZC51c2VyX2NwdXNfYWxsb3dlZCA9IG5ld19tYXNrOworCisJLyogVW5sb2NrIHRoZSB0YXNrIGxpc3QgKi8KKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisKKwkvKiBDb21wdXRlIG5ldyBnbG9iYWwgYWxsb3dlZCBDUFUgc2V0IGlmIG5lY2Vzc2FyeSAqLworCWlmKCAocC0+dGhyZWFkLm1mbGFncyAmIE1GX0ZQVUJPVU5EKQorCSYmIGNwdXNfaW50ZXJzZWN0cyhuZXdfbWFzaywgbXRfZnB1X2NwdW1hc2spKSB7CisJCWNwdXNfYW5kKGVmZmVjdGl2ZV9tYXNrLCBuZXdfbWFzaywgbXRfZnB1X2NwdW1hc2spOworCQlyZXR2YWwgPSBzZXRfY3B1c19hbGxvd2VkKHAsIGVmZmVjdGl2ZV9tYXNrKTsKKwl9IGVsc2UgeworCQlwLT50aHJlYWQubWZsYWdzICY9IH5NRl9GUFVCT1VORDsKKwkJcmV0dmFsID0gc2V0X2NwdXNfYWxsb3dlZChwLCBuZXdfbWFzayk7CisJfQorCisKK291dF91bmxvY2s6CisJcHV0X3Rhc2tfc3RydWN0KHApOworCXVubG9ja19jcHVfaG90cGx1ZygpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBtaXBzbXRfc3lzX3NjaGVkX2dldGFmZmluaXR5IC0gZ2V0IHRoZSBjcHUgYWZmaW5pdHkgb2YgYSBwcm9jZXNzCisgKi8KK2FzbWxpbmthZ2UgbG9uZyBtaXBzbXRfc3lzX3NjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqdXNlcl9tYXNrX3B0cikKK3sKKwl1bnNpZ25lZCBpbnQgcmVhbF9sZW47CisJY3B1bWFza190IG1hc2s7CisJaW50IHJldHZhbDsKKwl0YXNrX3QgKnA7CisKKwlyZWFsX2xlbiA9IHNpemVvZihtYXNrKTsKKwlpZiAobGVuIDwgcmVhbF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbG9ja19jcHVfaG90cGx1ZygpOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlyZXR2YWwgPSAtRVNSQ0g7CisJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKKwlpZiAoIXApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldHZhbCA9IDA7CisKKwljcHVzX2FuZChtYXNrLCBwLT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQsIGNwdV9wb3NzaWJsZV9tYXApOworCitvdXRfdW5sb2NrOgorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChjb3B5X3RvX3VzZXIodXNlcl9tYXNrX3B0ciwgJm1hc2ssIHJlYWxfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIHJlYWxfbGVuOworfQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKworLyoKKyAqIER1bXAgbmV3IE1JUFMgTVQgc3RhdGUgZm9yIHRoZSBjb3JlLiBEb2VzIG5vdCBsZWF2ZSBUQ3MgaGFsdGVkLgorICogVGFrZXMgYW4gYXJndW1lbnQgd2hpY2ggdGFrZW4gdG8gYmUgYSBwcmUtY2FsbCBNVlBDb250cm9sIHZhbHVlLgorICovCisKK3ZvaWQgbWlwc19tdF9yZWdkdW1wKHVuc2lnbmVkIGxvbmcgbXZwY3RsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2cGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbXZwY29uZjA7CisJaW50IG52cGU7CisJaW50IG50YzsKKwlpbnQgaTsKKwlpbnQgdGM7CisJdW5zaWduZWQgbG9uZyBoYWx0dmFsOworCXVuc2lnbmVkIGxvbmcgdGNzdGF0dmFsOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl2b2lkIHNtdGNfc29mdF9kdW1wKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19NSVBUX01UX1NNVEMgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2cGZsYWdzID0gZHZwZSgpOworCXByaW50aygiPT09IE1JUFMgTVQgU3RhdGUgRHVtcCA9PT1cbiIpOworCXByaW50aygiLS0gR2xvYmFsIFN0YXRlIC0tXG4iKTsKKwlwcmludGsoIiAgIE1WUENvbnRyb2wgUGFzc2VkOiAlMDhseFxuIiwgbXZwY3RsKTsKKwlwcmludGsoIiAgIE1WUENvbnRyb2wgUmVhZDogJTA4bHhcbiIsIHZwZmxhZ3MpOworCXByaW50aygiICAgTVZQQ29uZjAgOiAlMDhseFxuIiwgKG12cGNvbmYwID0gcmVhZF9jMF9tdnBjb25mMCgpKSk7CisJbnZwZSA9ICgobXZwY29uZjAgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSArIDE7CisJbnRjID0gKChtdnBjb25mMCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDE7CisJcHJpbnRrKCItLSBwZXItVlBFIFN0YXRlIC0tXG4iKTsKKwlmb3IoaSA9IDA7IGkgPCBudnBlOyBpKyspIHsKKwkgICAgZm9yKHRjID0gMDsgdGMgPCBudGM7IHRjKyspIHsKKwkJCXNldHRjKHRjKTsKKwkJaWYoKHJlYWRfdGNfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVlBFKSA9PSBpKSB7CisJCSAgICBwcmludGsoIiAgVlBFICVkXG4iLCBpKTsKKwkJICAgIHByaW50aygiICAgVlBFQ29udHJvbCA6ICUwOGx4XG4iLCByZWFkX3ZwZV9jMF92cGVjb250cm9sKCkpOworCQkgICAgcHJpbnRrKCIgICBWUEVDb25mMCA6ICUwOGx4XG4iLCByZWFkX3ZwZV9jMF92cGVjb25mMCgpKTsKKwkJICAgIHByaW50aygiICAgVlBFJWQuU3RhdHVzIDogJTA4bHhcbiIsCisJCQkJaSwgcmVhZF92cGVfYzBfc3RhdHVzKCkpOworCQkgICAgcHJpbnRrKCIgICBWUEUlZC5FUEMgOiAlMDhseFxuIiwgaSwgcmVhZF92cGVfYzBfZXBjKCkpOworCQkgICAgcHJpbnRrKCIgICBWUEUlZC5DYXVzZSA6ICUwOGx4XG4iLCBpLCByZWFkX3ZwZV9jMF9jYXVzZSgpKTsKKwkJICAgIHByaW50aygiICAgVlBFJWQuQ29uZmlnNyA6ICUwOGx4XG4iLAorCQkJCWksIHJlYWRfdnBlX2MwX2NvbmZpZzcoKSk7CisJCSAgICBicmVhazsgLyogTmV4dCBWUEUgKi8KKwkJfQorCSAgICB9CisJfQorCXByaW50aygiLS0gcGVyLVRDIFN0YXRlIC0tXG4iKTsKKwlmb3IodGMgPSAwOyB0YyA8IG50YzsgdGMrKykgeworCQlzZXR0Yyh0Yyk7CisJCWlmKHJlYWRfdGNfYzBfdGNiaW5kKCkgPT0gcmVhZF9jMF90Y2JpbmQoKSkgeworCQkJLyogQXJlIHdlIGR1bXBpbmcgb3Vyc2VsZj8gICovCisJCQloYWx0dmFsID0gMDsgLyogVGhlbiB3ZSdyZSBub3QgaGFsdGVkLCBhbmQgbXVzdG4ndCBiZSAqLworCQkJdGNzdGF0dmFsID0gZmxhZ3M7IC8qIEFuZCBwcmUtZHVtcCBUQ1N0YXR1cyBpcyBmbGFncyAqLworCQkJcHJpbnRrKCIgIFRDICVkIChjdXJyZW50IFRDIHdpdGggVlBFIEVQQyBhYm92ZSlcbiIsIHRjKTsKKwkJfSBlbHNlIHsKKwkJCWhhbHR2YWwgPSByZWFkX3RjX2MwX3RjaGFsdCgpOworCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDEpOworCQkJdGNzdGF0dmFsID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCQkJcHJpbnRrKCIgIFRDICVkXG4iLCB0Yyk7CisJCX0KKwkJcHJpbnRrKCIgICBUQ1N0YXR1cyA6ICUwOGx4XG4iLCB0Y3N0YXR2YWwpOworCQlwcmludGsoIiAgIFRDQmluZCA6ICUwOGx4XG4iLCByZWFkX3RjX2MwX3RjYmluZCgpKTsKKwkJcHJpbnRrKCIgICBUQ1Jlc3RhcnQgOiAlMDhseFxuIiwgcmVhZF90Y19jMF90Y3Jlc3RhcnQoKSk7CisJCXByaW50aygiICAgVENIYWx0IDogJTA4bHhcbiIsIGhhbHR2YWwpOworCQlwcmludGsoIiAgIFRDQ29udGV4dCA6ICUwOGx4XG4iLCByZWFkX3RjX2MwX3RjY29udGV4dCgpKTsKKwkJaWYgKCFoYWx0dmFsKQorCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJc210Y19zb2Z0X2R1bXAoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQVF9NVF9TTVRDICovCisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCWV2cGUodnBmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG10X29wdF9ub3JwcyA9IDA7CitzdGF0aWMgaW50IG10X29wdF9ycHNjdGwgPSAtMTsKK3N0YXRpYyBpbnQgbXRfb3B0X25ibHN1ID0gLTE7CitzdGF0aWMgaW50IG10X29wdF9mb3JjZWNvbmZpZzcgPSAwOworc3RhdGljIGludCBtdF9vcHRfY29uZmlnNyA9IC0xOworCitzdGF0aWMgaW50IF9faW5pdCBycHNfZGlzYWJsZShjaGFyICpzKQoreworCW10X29wdF9ub3JwcyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub3JwcyIsIHJwc19kaXNhYmxlKTsKKworc3RhdGljIGludCBfX2luaXQgcnBzY3RsX3NldChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXRfb3B0X3Jwc2N0bCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJycHNjdGw9IiwgcnBzY3RsX3NldCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5ibHN1X3NldChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXRfb3B0X25ibHN1KTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5ibHN1PSIsIG5ibHN1X3NldCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNvbmZpZzdfc2V0KGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZtdF9vcHRfY29uZmlnNyk7CisJbXRfb3B0X2ZvcmNlY29uZmlnNyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJjb25maWc3PSIsIGNvbmZpZzdfc2V0KTsKKworLyogRXhwZXJpbWVudGFsIGNhY2hlIGZsdXNoIGNvbnRyb2wgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBnbyBhd2F5IHNvbWUgZGF5ICovCitpbnQgbXRfcHJvdGlmbHVzaCA9IDA7CitpbnQgbXRfcHJvdGRmbHVzaCA9IDA7CitpbnQgbXRfbl9pZmx1c2hlcyA9IDE7CitpbnQgbXRfbl9kZmx1c2hlcyA9IDE7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldF9wcm90aWZsdXNoKGNoYXIgKnMpCit7CisJbXRfcHJvdGlmbHVzaCA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJwcm90aWZsdXNoIiwgc2V0X3Byb3RpZmx1c2gpOworCitzdGF0aWMgaW50IF9faW5pdCBzZXRfcHJvdGRmbHVzaChjaGFyICpzKQoreworCW10X3Byb3RkZmx1c2ggPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgicHJvdGRmbHVzaCIsIHNldF9wcm90ZGZsdXNoKTsKKworc3RhdGljIGludCBfX2luaXQgbmlmbHVzaChjaGFyICpzKQoreworCWdldF9vcHRpb24oJnMsICZtdF9uX2lmbHVzaGVzKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5pZmx1c2g9IiwgbmlmbHVzaCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5kZmx1c2goY2hhciAqcykKK3sKKwlnZXRfb3B0aW9uKCZzLCAmbXRfbl9kZmx1c2hlcyk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJuZGZsdXNoPSIsIG5kZmx1c2gpOworI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCitzdGF0aWMgaW50IGZwYWZmX3RocmVzaG9sZCA9IC0xOworCitzdGF0aWMgaW50IF9faW5pdCBmcGFmZl90aHJlc2goY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJmZwYWZmX3RocmVzaG9sZCk7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImZwYWZmPSIsIGZwYWZmX3RocmVzaCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBpdGNfYmFzZSA9IDA7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldF9pdGNfYmFzZShjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmaXRjX2Jhc2UpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJpdGNiYXNlPSIsIHNldF9pdGNfYmFzZSk7CisKK3ZvaWQgbWlwc19tdF9zZXRfY3B1b3B0aW9ucyh2b2lkKQoreworCXVuc2lnbmVkIGludCBvY29uZmlnNyA9IHJlYWRfYzBfY29uZmlnNygpOworCXVuc2lnbmVkIGludCBuY29uZmlnNyA9IG9jb25maWc3OworCisJaWYgKG10X29wdF9ub3JwcykgeworCQlwcmludGsoIlwibm9ycHNcIiBvcHRpb24gZGVwcmVjdGF0ZWQ6IHVzZSBcInJwc2N0bD1cIlxuIik7CisJfQorCWlmIChtdF9vcHRfcnBzY3RsID49IDApIHsKKwkJcHJpbnRrKCIzNEsgcmV0dXJuIHByZWRpY3Rpb24gc3RhY2sgb3ZlcnJpZGUgc2V0IHRvICVkLlxuIiwKKwkJCW10X29wdF9ycHNjdGwpOworCQlpZiAobXRfb3B0X3Jwc2N0bCkKKwkJCW5jb25maWc3IHw9ICgxIDw8IDIpOworCQllbHNlCisJCQluY29uZmlnNyAmPSB+KDEgPDwgMik7CisJfQorCWlmIChtdF9vcHRfbmJsc3UgPj0gMCkgeworCQlwcmludGsoIjM0SyBBTFUvTFNVIHN5bmMgb3ZlcnJpZGUgc2V0IHRvICVkLlxuIiwgbXRfb3B0X25ibHN1KTsKKwkJaWYgKG10X29wdF9uYmxzdSkKKwkJCW5jb25maWc3IHw9ICgxIDw8IDUpOworCQllbHNlCisJCQluY29uZmlnNyAmPSB+KDEgPDwgNSk7CisJfQorCWlmIChtdF9vcHRfZm9yY2Vjb25maWc3KSB7CisJCXByaW50aygiQ1AwLkNvbmZpZzcgZm9yY2VkIHRvIDB4JTA4eC5cbiIsIG10X29wdF9jb25maWc3KTsKKwkJbmNvbmZpZzcgPSBtdF9vcHRfY29uZmlnNzsKKwl9CisJaWYgKG9jb25maWc3ICE9IG5jb25maWc3KSB7CisJCV9fYXNtX18gX192b2xhdGlsZSgic3luYyIpOworCQl3cml0ZV9jMF9jb25maWc3KG5jb25maWc3KTsKKwkJZWhiICgpOworCQlwcmludGsoIkNvbmZpZzc6IDB4JTA4eFxuIiwgcmVhZF9jMF9jb25maWc3KCkpOworCX0KKworCS8qIFJlcG9ydCBDYWNoZSBtYW5hZ2VtZW50IGRlYnVnIG9wdGlvbnMgKi8KKwlpZiAobXRfcHJvdGlmbHVzaCkKKwkJcHJpbnRrKCJJLWNhY2hlIGZsdXNoZXMgc2luZ2xlLXRocmVhZGVkXG4iKTsKKwlpZiAobXRfcHJvdGRmbHVzaCkKKwkJcHJpbnRrKCJELWNhY2hlIGZsdXNoZXMgc2luZ2xlLXRocmVhZGVkXG4iKTsKKwlpZiAobXRfbl9pZmx1c2hlcyAhPSAxKQorCQlwcmludGsoIkktQ2FjaGUgRmx1c2hlcyBSZXBlYXRlZCAlZCB0aW1lc1xuIiwgbXRfbl9pZmx1c2hlcyk7CisJaWYgKG10X25fZGZsdXNoZXMgIT0gMSkKKwkJcHJpbnRrKCJELUNhY2hlIEZsdXNoZXMgUmVwZWF0ZWQgJWQgdGltZXNcbiIsIG10X25fZGZsdXNoZXMpOworCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKiBGUFUgVXNlIEZhY3RvciBlbXBpcmljYWxseSBkZXJpdmVkIGZyb20gZXhwZXJpbWVudHMgb24gMzRLICovCisjZGVmaW5lIEZQVVNFRkFDVE9SIDMzMworCisJaWYgKGZwYWZmX3RocmVzaG9sZCA+PSAwKSB7CisJCW10X2ZwZW11bF90aHJlc2hvbGQgPSBmcGFmZl90aHJlc2hvbGQ7CisJfSBlbHNlIHsKKwkJbXRfZnBlbXVsX3RocmVzaG9sZCA9CisJCQkoRlBVU0VGQUNUT1IgKiAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopKSkgLyBIWjsKKwl9CisJcHJpbnRrKCJGUFUgQWZmaW5pdHkgc2V0IGFmdGVyICVsZCBlbXVsYXRpb25zXG4iLAorCQkJbXRfZnBlbXVsX3RocmVzaG9sZCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKworCWlmIChpdGNfYmFzZSAhPSAwKSB7CisJCS8qCisJCSAqIENvbmZpZ3VyZSBJVEMgbWFwcGluZy4gIFRoaXMgY29kZSBpcyB2ZXJ5CisJCSAqIHNwZWNpZmljIHRvIHRoZSAzNEsgY29yZSBmYW1pbHksIHdoaWNoIHVzZXMKKwkJICogYSBzcGVjaWFsIG1vZGUgYml0ICgiSVRDIikgaW4gdGhlIEVyckN0bAorCQkgKiByZWdpc3RlciB0byBlbmFibGUgYWNjZXNzIHRvIElUQyBjb250cm9sCisJCSAqIHJlZ2lzdGVycyB2aWEgY2FjaGUgInRhZyIgb3BlcmF0aW9ucy4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgZWN0bHZhbDsKKwkJdW5zaWduZWQgbG9uZyBpdGNibGtncm47CisKKwkJLyogRXJyQ3RsIHJlZ2lzdGVyIGlzIGtub3duIGFzICJlY2MiIHRvIExpbnV4ICovCisJCWVjdGx2YWwgPSByZWFkX2MwX2VjYygpOworCQl3cml0ZV9jMF9lY2MoZWN0bHZhbCB8ICgweDEgPDwgMjYpKTsKKwkJZWhiKCk7CisjZGVmaW5lIElOREVYXzAgKDB4ODAwMDAwMDApCisjZGVmaW5lIElOREVYXzggKDB4ODAwMDAwMDgpCisJCS8qIFJlYWQgImNhY2hlIHRhZyIgZm9yIERjYWNoZSBwc2V1ZG8taW5kZXggOCAqLworCQljYWNoZV9vcChJbmRleF9Mb2FkX1RhZ19ELCBJTkRFWF84KTsKKwkJZWhiKCk7CisJCWl0Y2Jsa2dybiA9IHJlYWRfYzBfZHRhZ2xvKCk7CisJCWl0Y2Jsa2dybiAmPSAweGZmZmUwMDAwOworCQkvKiBTZXQgZm9yIDEyOCBieXRlIHBpdGNoIG9mIElUQyBjZWxscyAqLworCQlpdGNibGtncm4gfD0gMHgwMDAwMGMwMDsKKwkJLyogU3RhZ2UgaW4gVGFnIHJlZ2lzdGVyICovCisJCXdyaXRlX2MwX2R0YWdsbyhpdGNibGtncm4pOworCQllaGIoKTsKKwkJLyogV3JpdGUgb3V0IHRvIElUVSB3aXRoIENBQ0hFIG9wICovCisJCWNhY2hlX29wKEluZGV4X1N0b3JlX1RhZ19ELCBJTkRFWF84KTsKKwkJLyogTm93IHNldCBiYXNlIGFkZHJlc3MsIGFuZCB0dXJuIElUQyBvbiB3aXRoIDB4MSBiaXQgKi8KKwkJd3JpdGVfYzBfZHRhZ2xvKChpdGNfYmFzZSAmIDB4ZmZmZmZjMDApIHwgMHgxICk7CisJCWVoYigpOworCQkvKiBXcml0ZSBvdXQgdG8gSVRVIHdpdGggQ0FDSEUgb3AgKi8KKwkJY2FjaGVfb3AoSW5kZXhfU3RvcmVfVGFnX0QsIElOREVYXzApOworCQl3cml0ZV9jMF9lY2MoZWN0bHZhbCk7CisJCWVoYigpOworCQlwcmludGsoIk1hcHBlZCAlbGQgSVRDIGNlbGxzIHN0YXJ0aW5nIGF0IDB4JTA4eFxuIiwKKwkJCSgoaXRjYmxrZ3JuICYgMHg3ZmUwMDAwMCkgPj4gMjApLCBpdGNfYmFzZSk7CisJfQorfQorCisvKgorICogRnVuY3Rpb24gdG8gcHJvdGVjdCBjYWNoZSBmbHVzaGVzIGZyb20gY29uY3VycmVudCBleGVjdXRpb24KKyAqIGRlcGVuZHMgb24gTVAgc29mdHdhcmUgbW9kZWwgY2hvc2VuLgorICovCisKK3ZvaWQgbXRfY2ZsdXNoX2xvY2tkb3duKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXZvaWQgc210Y19jZmx1c2hfbG9ja2Rvd24odm9pZCk7CisKKwlzbXRjX2NmbHVzaF9sb2NrZG93bigpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwkvKiBGSUxMIElOIFZTTVAgYW5kIEFQL1NQIFZFUlNJT05TIEhFUkUgKi8KK30KKwordm9pZCBtdF9jZmx1c2hfcmVsZWFzZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl2b2lkIHNtdGNfY2ZsdXNoX3JlbGVhc2Uodm9pZCk7CisKKwlzbXRjX2NmbHVzaF9yZWxlYXNlKCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCS8qIEZJTEwgSU4gVlNNUCBhbmQgQVAvU1AgVkVSU0lPTlMgSEVSRSAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwppbmRleCA4NmU0MmM2Li4wYTcxYTRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYworKysgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwpAQCAtMjgsMjIgKzI4LDkgQEAKIC8qCiAgKiBTdHJpbmcgZnVuY3Rpb25zCiAgKi8KLUVYUE9SVF9TWU1CT0wobWVtY2hyKTsKLUVYUE9SVF9TWU1CT0wobWVtY21wKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNocik7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi1FWFBPUlRfU1lNQk9MKHN0cm5jbXApOwotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwotRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogCiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCkBAIC02Miw2ICs0OSwzIEBACiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CiAKIEVYUE9SVF9TWU1CT0woaW52YWxpZF9wdGVfdGFibGUpOwotI2lmZGVmIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRQotRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfbWFzayk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL21pcHMva2VybmVsL21vZHVsZS5jCmluZGV4IGU1NGE3ZjQuLmQ3YmYwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjg4LDYgKzI4OCw5IEBACiAJCXN5bSA9IChFbGZfU3ltICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcgogCQkJKyBFTEZfTUlQU19SX1NZTShyZWxbaV0pOwogCQlpZiAoIXN5bS0+c3RfdmFsdWUpIHsKKwkJCS8qIElnbm9yZSB1bnJlc29sdmVkIHdlYWsgc3ltYm9sICovCisJCQlpZiAoRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKSA9PSBTVEJfV0VBSykKKwkJCQljb250aW51ZTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIHN5bWJvbCAlc1xuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKIAkJCXJldHVybiAtRU5PRU5UOwpAQCAtMzI1LDYgKzMyOCw5IEBACiAJCXN5bSA9IChFbGZfU3ltICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcgogCQkJKyBFTEZfTUlQU19SX1NZTShyZWxbaV0pOwogCQlpZiAoIXN5bS0+c3RfdmFsdWUpIHsKKwkJCS8qIElnbm9yZSB1bnJlc29sdmVkIHdlYWsgc3ltYm9sICovCisJCQlpZiAoRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKSA9PSBTVEJfV0VBSykKKwkJCQljb250aW51ZTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIHN5bWJvbCAlc1xuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKIAkJCXJldHVybiAtRU5PRU5UOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2MuYwppbmRleCA4NGFiOTU5Li45ZGVmNTU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2MuYwpAQCAtNDIsNiArNDIsNyBAQAogCVtDUFVfUjgwMDBdCT0gIlI4MDAwIiwKIAlbQ1BVX1IxMDAwMF0JPSAiUjEwMDAwIiwKIAlbQ1BVX1IxMjAwMF0JPSAiUjEyMDAwIiwKKwlbQ1BVX1IxNDAwMF0JPSAiUjE0MDAwIiwKIAlbQ1BVX1I0MzAwXQk9ICJSNDMwMCIsCiAJW0NQVV9SNDY1MF0JPSAiUjQ2NTAiLAogCVtDUFVfUjQ3MDBdCT0gIlI0NzAwIiwKQEAgLTc0LDYgKzc1LDcgQEAKIAlbQ1BVXzI0S10JPSAiTUlQUyAyNEsiLAogCVtDUFVfMjVLRl0JPSAiTUlQUyAyNUtmIiwKIAlbQ1BVXzM0S10JPSAiTUlQUyAzNEsiLAorCVtDUFVfNzRLXQk9ICJNSVBTIDc0SyIsCiAJW0NQVV9WUjQxMTFdCT0gIk5FQyBWUjQxMTEiLAogCVtDUFVfVlI0MTIxXQk9ICJORUMgVlI0MTIxIiwKIAlbQ1BVX1ZSNDEyMl0JPSAiTkVDIFZSNDEyMiIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGM2NmRiNWUuLjE5OWEwNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00MSw2ICs0MSwxMCBAQAogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vaXNhZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KK2V4dGVybiB2b2lkIHNtdGNfaWRsZV9sb29wX2hvb2sodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAvKgogICogVGhlIGlkbGUgdGhyZWFkLiBUaGVyZSdzIG5vIHVzZWZ1bCB3b3JrIHRvIGJlIGRvbmUsIHNvIGp1c3QgdHJ5IHRvIGNvbnNlcnZlCkBAIC01MSw5ICs1NSwxMyBAQAogewogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAJd2hpbGUgKDEpIHsKLQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCXNtdGNfaWRsZV9sb29wX2hvb2soKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCQlpZiAoY3B1X3dhaXQpCiAJCQkJKCpjcHVfd2FpdCkoKTsKKwkJfQogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtMTc3LDYgKzE4NSwxNyBAQAogCWNoaWxkcmVncy0+Y3AwX3N0YXR1cyAmPSB+KFNUMF9DVTJ8U1QwX0NVMSk7CiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9VU0VERlBVKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisJLyoKKwkgKiBGUFUgYWZmaW5pdHkgc3VwcG9ydCBpcyBjbGVhbmVyIGlmIHdlIHRyYWNrIHRoZQorCSAqIHVzZXItdmlzaWJsZSBDUFUgYWZmaW5pdHkgZnJvbSB0aGUgdmVyeSBiZWdpbm5pbmcuCisJICogVGhlIGdlbmVyaWMgY3B1c19hbGxvd2VkIG1hc2sgd2lsbCBhbHJlYWR5IGhhdmUKKwkgKiBiZWVuIGNvcGllZCBmcm9tIHRoZSBwYXJlbnQgYmVmb3JlIGNvcHlfdGhyZWFkCisJICogaXMgaW52b2tlZC4KKwkgKi8KKwlwLT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQgPSBwLT5jcHVzX2FsbG93ZWQ7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKwogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKIAkJdGktPnRwX3ZhbHVlID0gcmVncy0+cmVnc1s3XTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZjgzOGIzNi4uOWI0NzMzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0yNDgsMTAgKzI0OCwyMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0VJUjogewkvKiBpbXBsZW1lbnRhdGlvbiAvIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAkJCXVuc2lnbmVkIGludCBmbGFnczsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQl1bnNpZ25lZCBpbnQgaXJxZmxhZ3M7CisJCQl1bnNpZ25lZCBpbnQgbXRmbGFnczsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAkJCWlmICghY3B1X2hhc19mcHUpCiAJCQkJYnJlYWs7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQkvKiBSZWFkLW1vZGlmeS13cml0ZSBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMgKi8KKwkJCWxvY2FsX2lycV9zYXZlKGlycWZsYWdzKTsKKwkJCW10ZmxhZ3MgPSBkbXQoKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQkJaWYgKGNwdV9oYXNfbWlwc210KSB7CiAJCQkJdW5zaWduZWQgaW50IHZwZmxhZ3MgPSBkdnBlKCk7CkBAIC0yNjYsNiArMjc2LDEwIEBACiAJCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNmYzFcdCUwLCQwIjogIj1yIiAodG1wKSk7CiAJCQkJd3JpdGVfYzBfc3RhdHVzKGZsYWdzKTsKIAkJCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCQllbXQobXRmbGFncyk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFmbGFncyk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NjksNyArNDgzLDcgQEAKIGFzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KQogewogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiBlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5yZWdzWzJdKSwKKwkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPnJlZ3NbMl0pLAogCQkgICAgICAgICAgICAgICAgICAgcmVncy0+cmVnc1syXSk7CiAKIAlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKQEAgLTQ5Myw3ICs1MDcsNyBAQAogCX0KICBvdXQ6CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpICYmICFlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgYXVkaXRfYXJjaCgpLCByZWdzLT5yZWdzWzJdLAorCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGF1ZGl0X2FyY2goKSwgcmVncy0+cmVnc1syXSwKIAkJCQkgICAgcmVncy0+cmVnc1s0XSwgcmVncy0+cmVnc1s1XSwKIAkJCQkgICAgcmVncy0+cmVnc1s2XSwgcmVncy0+cmVnc1s3XSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKaW5kZXggMGQ1Y2Y5Ny4uODcwNGRjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYwpAQCAtMTczLDEyICsxNzMsMjIgQEAKIAkJCWJyZWFrOwogCQljYXNlIEZQQ19FSVI6IHsJLyogaW1wbGVtZW50YXRpb24gLyB2ZXJzaW9uIHJlZ2lzdGVyICovCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkJdW5zaWduZWQgaW50IGlycWZsYWdzOworCQkJdW5zaWduZWQgaW50IG10ZmxhZ3M7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJCQlpZiAoIWNwdV9oYXNfZnB1KSB7CiAJCQkJdG1wID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCS8qIFJlYWQtbW9kaWZ5LXdyaXRlIG9mIFN0YXR1cyBtdXN0IGJlIGF0b21pYyAqLworCQkJbG9jYWxfaXJxX3NhdmUoaXJxZmxhZ3MpOworCQkJbXRmbGFncyA9IGRtdCgpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogCQkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCQlpZiAoY3B1X2hhc19taXBzbXQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgdnBmbGFncyA9IGR2cGUoKTsKQEAgLTE5Myw2ICsyMDMsMTAgQEAKIAkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2ZjMVx0JTAsJDAiOiAiPXIiICh0bXApKTsKIAkJCQl3cml0ZV9jMF9zdGF0dXMoZmxhZ3MpOwogCQkJfQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJCWVtdChtdGZsYWdzKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGlycWZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKaW5kZXggZDJhZmJkMS4uMGIxYjU0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKQEAgLTg4LDcgKzg4LDE4IEBACiAKIAlQVFJfQURESVUJdDAsICQyOCwgX1RIUkVBRF9TSVpFIC0gMzIKIAlzZXRfc2F2ZWRfc3AJdDAsIHQxLCB0MgotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qIFJlYWQtbW9kaWZ5LXdyaXRlcyBvZiBTdGF0dXMgbXVzdCBiZSBhdG9taWMgb24gYSBWUEUgKi8KKwltZmMwCXQyLCBDUDBfVENTVEFUVVMKKwlvcmkJdDEsIHQyLCBUQ1NUQVRVU19JWE1UCisJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJYW5kaQl0MiwgdDIsIFRDU1RBVFVTX0lYTVQKKwllaGIKKwlETVQJOAkJCQkjIGRtdAl0MAorCW1vdmUJdDEscmEKKwlqYWwJbWlwc19paGIKKwltb3ZlCXJhLHQxCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCW1mYzAJdDEsIENQMF9TVEFUVVMJCS8qIERvIHdlIHJlYWxseSBuZWVkIHRoaXM/ICovCiAJbGkJYTMsIDB4ZmYwMQogCWFuZAl0MSwgYTMKQEAgLTk3LDYgKzEwOCwxOCBAQAogCWFuZAlhMiwgYTMKIAlvcglhMiwgdDEKIAltdGMwCWEyLCBDUDBfU1RBVFVTCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCWVoYgorCWFuZGkJdDAsIHQwLCBWUEVDT05UUk9MX1RFCisJYmVxegl0MCwgMWYKKwllbXQKKzE6CisJbWZjMAl0MSwgQ1AwX1RDU1RBVFVTCisJeG9yaQl0MSwgdDEsIFRDU1RBVFVTX0lYTVQKKwlvcgl0MSwgdDEsIHQyCisJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCisJZWhiCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCW1vdmUJdjAsIGEwCiAJanIJcmEKIAlFTkQocmVzdW1lKQpAQCAtMTMxLDEwICsxNTQsMTkgQEAKICNkZWZpbmUgRlBVX0RFRkFVTFQgIDB4MDAwMDAwMDAKIAogTEVBRihfaW5pdF9mcHUpCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qIFJhdGhlciB0aGFuIG1hbmlwdWxhdGUgcGVyLVZQRSBTdGF0dXMsIHNldCBwZXItVEMgYml0IGluIFRDU3RhdHVzICovCisJbWZjMAl0MCwgQ1AwX1RDU1RBVFVTCisJLyogQml0IHBvc2l0aW9uIGlzIHRoZSBzYW1lIGZvciBTdGF0dXMsIFRDU3RhdHVzICovCisJbGkJdDEsIFNUMF9DVTEKKwlvcgl0MCwgdDEKKwltdGMwCXQwLCBDUDBfVENTVEFUVVMKKyNlbHNlIC8qIE5vcm1hbCBNSVBTIENVMSBlbmFibGUgKi8KIAltZmMwCXQwLCBDUDBfU1RBVFVTCiAJbGkJdDEsIFNUMF9DVTEKIAlvcgl0MCwgdDEKIAltdGMwCXQwLCBDUDBfU1RBVFVTCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCWZwdV9lbmFibGVfaGF6YXJkCiAKIAlsaQl0MSwgRlBVX0RFRkFVTFQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggOTg2YTljZi4uY2FmNzc3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTIxLDQ1ICsyMSw0NCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS92cGUuaD4KICNpbmNsdWRlIDxhc20vcnRseC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgUlRMWF9UQVJHX1ZQRSAxCiAKIHN0YXRpYyBzdHJ1Y3QgcnRseF9pbmZvICpydGx4Owogc3RhdGljIGludCBtYWpvcjsKIHN0YXRpYyBjaGFyIG1vZHVsZV9uYW1lW10gPSAicnRseCI7Ci1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnE7Ci1zdGF0aWMgaW50IGlycV9udW07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNwYWNlZnJlZShpbnQgcmVhZCwgaW50IHdyaXRlLCBpbnQgc2l6ZSkKLXsKLQlpZiAocmVhZCA9PSB3cml0ZSkgewotCQkvKgotCQkgKiBuZXZlciBmaWxsIHRoZSBidWZmZXIgY29tcGxldGVseSwgc28gaW5kZXhlcyBhcmUgYWx3YXlzCi0JCSAqIGVxdWFsIGlmIGVtcHR5IGFuZCBvbmx5IGVtcHR5LCBvciAhZXF1YWwgaWYgZGF0YSBhdmFpbGFibGUKLQkJICovCi0JCXJldHVybiBzaXplIC0gMTsKLQl9Ci0KLQlyZXR1cm4gKChyZWFkICsgc2l6ZSAtIHdyaXRlKSAlIHNpemUpIC0gMTsKLX0KIAogc3RhdGljIHN0cnVjdCBjaGFuX3dhaXRxdWV1ZXMgewogCXdhaXRfcXVldWVfaGVhZF90IHJ0X3F1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90IGx4X3F1ZXVlOworCWludCBpbl9vcGVuOwogfSBjaGFubmVsX3dxc1tSVExYX0NIQU5ORUxTXTsKIAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxOworc3RhdGljIGludCBpcnFfbnVtOworc3RhdGljIHN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyBub3RpZnk7CitzdGF0aWMgaW50IHNwX3N0b3BwaW5nID0gMDsKKwogZXh0ZXJuIHZvaWQgKnZwZV9nZXRfc2hhcmVkKGludCBpbmRleCk7CiAKIHN0YXRpYyB2b2lkIHJ0bHhfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC02NywxNzQgKzY2LDI5OCBAQAogCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfUlRMWF9JUlEsIHJlZ3MpOwogfQogCisKKy8qIEludGVycnVwdCBoYW5kbGVyIG1heSBiZSBjYWxsZWQgYmVmb3JlIHJ0bHhfaW5pdCBoYXMgb3RoZXJ3aXNlIGhhZAorICAgYSBjaGFuY2UgdG8gcnVuLgorKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBydGx4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykgewotCQlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuID0gJnJ0bHgtPmNoYW5uZWxbaV07Ci0KLQkJaWYgKGNoYW4tPmx4X3JlYWQgIT0gY2hhbi0+bHhfd3JpdGUpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKKwkJCXdha2VfdXAoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKKwkJCXdha2VfdXAoJmNoYW5uZWxfd3FzW2ldLnJ0X3F1ZXVlKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIGNhbGwgd2hlbiB3ZSBoYXZlIHRoZSBhZGRyZXNzIG9mIHRoZSBzaGFyZWQgc3RydWN0dXJlIGZyb20gdGhlIFNQIHNpZGUuICovCi1zdGF0aWMgaW50IHJ0bHhfaW5pdChzdHJ1Y3QgcnRseF9pbmZvICpydGx4aSkKK3N0YXRpYyBfX2F0dHJpYnV0ZV91c2VkX18gdm9pZCBkdW1wX3J0bHgodm9pZCkKIHsKIAlpbnQgaTsKIAorCXByaW50aygiaWQgMHglbHggc3RhdGUgJWRcbiIsIHJ0bHgtPmlkLCBydGx4LT5zdGF0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMWF9DSEFOTkVMUzsgaSsrKSB7CisJCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpXTsKKworCQlwcmludGsoIiBydF9zdGF0ZSAlZCBseF9zdGF0ZSAlZCBidWZmZXJfc2l6ZSAlZFxuIiwKKwkJICAgICAgIGNoYW4tPnJ0X3N0YXRlLCBjaGFuLT5seF9zdGF0ZSwgY2hhbi0+YnVmZmVyX3NpemUpOworCisJCXByaW50aygiIHJ0X3JlYWQgJWQgcnRfd3JpdGUgJWRcbiIsCisJCSAgICAgICBjaGFuLT5ydF9yZWFkLCBjaGFuLT5ydF93cml0ZSk7CisKKwkJcHJpbnRrKCIgbHhfcmVhZCAlZCBseF93cml0ZSAlZFxuIiwKKwkJICAgICAgIGNoYW4tPmx4X3JlYWQsIGNoYW4tPmx4X3dyaXRlKTsKKworCQlwcmludGsoIiBydF9idWZmZXIgPCVzPlxuIiwgY2hhbi0+cnRfYnVmZmVyKTsKKwkJcHJpbnRrKCIgbHhfYnVmZmVyIDwlcz5cbiIsIGNoYW4tPmx4X2J1ZmZlcik7CisJfQorfQorCisvKiBjYWxsIHdoZW4gd2UgaGF2ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIHN0cnVjdHVyZSBmcm9tIHRoZSBTUCBzaWRlLiAqLworc3RhdGljIGludCBydGx4X2luaXQoc3RydWN0IHJ0bHhfaW5mbyAqcnRseGkpCit7CiAJaWYgKHJ0bHhpLT5pZCAhPSBSVExYX0lEKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vIHZhbGlkIFJUTFggaWQgYXQgMHglcFxuIiwgcnRseGkpOworCQlwcmludGsoS0VSTl9FUlIgIm5vIHZhbGlkIFJUTFggaWQgYXQgMHglcCAweCV4XG4iLCBydGx4aSwgcnRseGktPmlkKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAotCS8qIGluaXRpYWxpc2UgdGhlIHdhaXQgcXVldWVzICovCi0JZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykgewotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFubmVsX3dxc1tpXS5ydF9xdWV1ZSk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKLQl9Ci0KLQkvKiBzZXQgdXAgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLwotCW1lbXNldCgmaXJxLCAwLCBzaXplb2Yoc3RydWN0IGlycWFjdGlvbikpOwotCi0JaWYgKGNwdV9oYXNfdmludCkKLQkJc2V0X3ZpX2hhbmRsZXIoTUlQU19DUFVfUlRMWF9JUlEsIHJ0bHhfZGlzcGF0Y2gpOwotCi0JaXJxX251bSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9SVExYX0lSUTsKLQlpcnEuaGFuZGxlciA9IHJ0bHhfaW50ZXJydXB0OwotCWlycS5mbGFncyA9IFNBX0lOVEVSUlVQVDsKLQlpcnEubmFtZSA9ICJSVExYIjsKLQlpcnEuZGV2X2lkID0gcnRseDsKLQlzZXR1cF9pcnEoaXJxX251bSwgJmlycSk7Ci0KIAlydGx4ID0gcnRseGk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogb25seSBhbGxvdyBvbmUgb3BlbiBwcm9jZXNzIGF0IGEgdGltZSB0byBvcGVuIGVhY2ggY2hhbm5lbCAqLwotc3RhdGljIGludCBydGx4X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCisvKiBub3RpZmljYXRpb25zICovCitzdGF0aWMgdm9pZCBzdGFydGluZyhpbnQgdnBlKQogewotCWludCBtaW5vciwgcmV0OwotCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW47CisJaW50IGk7CisJc3Bfc3RvcHBpbmcgPSAwOwogCi0JLyogYXNzdW1lIG9ubHkgMSBkZXZpY2UgYXQgdGhlIG1vLiAqLwotCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CisJLyogZm9yY2UgYSByZWxvYWQgb2YgcnRseCAqLworCXJ0bHg9TlVMTDsKKworCS8qIHdha2UgdXAgYW55IHNsZWVwaW5nIHJ0bHhfb3BlbidzICovCisJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGFubmVsX3dxc1tpXS5seF9xdWV1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BwaW5nKGludCB2cGUpCit7CisJaW50IGk7CisKKwlzcF9zdG9wcGluZyA9IDE7CisJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGFubmVsX3dxc1tpXS5seF9xdWV1ZSk7Cit9CisKKworaW50IHJ0bHhfb3BlbihpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuOworCXZvbGF0aWxlIHN0cnVjdCBydGx4X2luZm8gKipwOworCisJaWYgKGluZGV4ID49IFJUTFhfQ0hBTk5FTFMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJ0bHhfb3BlbiBpbmRleCBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJ0bHhfb3BlbiBjaGFubmVsICVkIGFscmVhZHkgb3BlbmVkXG4iLCBpbmRleCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4rKzsKIAogCWlmIChydGx4ID09IE5VTEwpIHsKLQkJc3RydWN0IHJ0bHhfaW5mbyAqKnA7CiAJCWlmKCAocCA9IHZwZV9nZXRfc2hhcmVkKFJUTFhfVEFSR19WUEUpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInZwZV9nZXRfc2hhcmVkIGlzIE5VTEwuICIKLQkJCSAgICAgICAiSGFzIGFuIFNQIHByb2dyYW0gYmVlbiBsb2FkZWQ/XG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKGNhbl9zbGVlcCkgeworCQkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJCQkJLyogZ28gdG8gc2xlZXAgKi8KKwkJCQlhZGRfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCXdoaWxlICgocCA9IHZwZV9nZXRfc2hhcmVkKFJUTFhfVEFSR19WUEUpKSA9PSBOVUxMKSB7CisJCQkJCXNjaGVkdWxlKCk7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJfQorCisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisKKwkJCQkvKiBiYWNrIHJ1bm5pbmcgKi8KKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKCBLRVJOX0RFQlVHICJObyBTUCBwcm9ncmFtIGxvYWRlZCwgYW5kIGRldmljZSAiCisJCQkJCSJvcGVuZWQgd2l0aCBPX05PTkJMT0NLXG4iKTsKKwkJCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQl9CiAJCX0KIAogCQlpZiAoKnAgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ2cGVfc2hhcmVkICVwICVwXG4iLCBwLCAqcCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWlmIChjYW5fc2xlZXApIHsKKwkJCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCQkJCS8qIGdvIHRvIHNsZWVwICovCisJCQkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW2luZGV4XS5seF9xdWV1ZSwgJndhaXQpOworCisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl3aGlsZSAoKnAgPT0gTlVMTCkgeworCQkJCQlzY2hlZHVsZSgpOworCisJCQkJCS8qIHJlc2V0IHRhc2sgc3RhdGUgdG8gaW50ZXJydXB0YWJsZSBvdGhlcndpc2UKKwkJCQkJICAgd2UnbGwgd2hpenogcm91bmQgaGVyZSBsaWtlIGEgdmVyeSBmYXN0IGxvb3B5CisJCQkJCSAgIHRoaW5nLiBzY2hlZHVsZSgpIGFwcGVhcnMgdG8gcmV0dXJuIHdpdGggc3RhdGUKKwkJCQkJICAgc2V0IHRvIFRBU0tfUlVOTklORy4KKworCQkJCQkgICBJZiB0aGUgbG9hZGVkIFNQIHByb2dyYW0sIGZvciB3aGF0ZXZlciByZWFzb24sCisJCQkJCSAgIGRvZXNuJ3Qgc2V0IHVwIHRoZSBzaGFyZWQgc3RydWN0dXJlICpwIHdpbGwgbmV2ZXIKKwkJCQkJICAgYmVjb21lIHRydWUuIFNvIHdob2V2ZXIgY29ubmVjdGVkIHRvIGVpdGhlciAvZGV2L3J0PworCQkJCQkgICBvciBpZiBpdCB3YXMga3NwZCwgd2lsbCB0aGVuIHRha2UgdXAgcmF0aGVyIGEgbG90IG9mCisJCQkJCSAgIHByb2Nlc3NvciBjeWNsZXMuCisJCQkJCSovCisKKwkJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl9CisKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKworCQkJCS8qIGJhY2sgcnVubmluZyAqLworCQkJfQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCIgKnZwZV9nZXRfc2hhcmVkIGlzIE5VTEwuICIKKwkJCQkgICAgICAgIkhhcyBhbiBTUCBwcm9ncmFtIGJlZW4gbG9hZGVkP1xuIik7CisJCQkJY2hhbm5lbF93cXNbaW5kZXhdLmluX29wZW4gPSAwOworCQkJCXJldHVybiAtRU5PU1lTOworCQkJfQogCQl9CiAKLQkJaWYgKChyZXQgPSBydGx4X2luaXQoKnApKSA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlpZiAoKHVuc2lnbmVkIGludCkqcCA8IEtTRUcwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2cGVfZ2V0X3NoYXJlZCByZXR1cm5lZCBhbiBpbnZhbGlkIHBvaW50ZXIgIgorCQkJICAgICAgICJtYXliZSBhbiBlcnJvciBjb2RlICVkXG4iLCAoaW50KSpwKTsKKyAJCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisgCQlpZiAoKHJldCA9IHJ0bHhfaW5pdCgqcCkpIDwgMCkgeworIAkJCWNoYW5uZWxfd3FzW2luZGV4XS5pbl9vcGVuID0gMDsKKyAgCQkJcmV0dXJuIHJldDsKKyAJCX0KIAl9CiAKLQljaGFuID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOworCWNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChSVExYX1NUQVRFX09QRU5FRCwgJmNoYW4tPmx4X3N0YXRlKSkKLQkJcmV0dXJuIC1FQlVTWTsKKyAJaWYgKGNoYW4tPmx4X3N0YXRlID09IFJUTFhfU1RBVEVfT1BFTkVEKSB7CisgCQljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CisgIAkJcmV0dXJuIC1FQlVTWTsKKyAJfQogCisgIAljaGFuLT5seF9zdGF0ZSA9IFJUTFhfU1RBVEVfT1BFTkVEOworIAljaGFubmVsX3dxc1tpbmRleF0uaW5fb3BlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRseF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoraW50IHJ0bHhfcmVsZWFzZShpbnQgaW5kZXgpCiB7Ci0JaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7Ci0KLQljbGVhcl9iaXQoUlRMWF9TVEFURV9PUEVORUQsICZydGx4LT5jaGFubmVsW21pbm9yXS5seF9zdGF0ZSk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQorCXJ0bHgtPmNoYW5uZWxbaW5kZXhdLmx4X3N0YXRlID0gUlRMWF9TVEFURV9VTlVTRUQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnRseF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKK3Vuc2lnbmVkIGludCBydGx4X3JlYWRfcG9sbChpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApCiB7Ci0JaW50IG1pbm9yOwotCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLQlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuOworIAlzdHJ1Y3QgcnRseF9jaGFubmVsICpjaGFuOwogCi0JbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLQljaGFuID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOworIAlpZiAocnRseCA9PSBOVUxMKQorIAkJcmV0dXJuIDA7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgd2FpdCk7Ci0JcG9sbF93YWl0KGZpbGUsICZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsIHdhaXQpOworIAljaGFuID0gJnJ0bHgtPmNoYW5uZWxbaW5kZXhdOwogCiAJLyogZGF0YSBhdmFpbGFibGUgdG8gcmVhZD8gKi8KLQlpZiAoY2hhbi0+bHhfcmVhZCAhPSBjaGFuLT5seF93cml0ZSkKLQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmIChjaGFuLT5seF9yZWFkID09IGNoYW4tPmx4X3dyaXRlKSB7CisJCWlmIChjYW5fc2xlZXApIHsKKwkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JLyogc3BhY2UgdG8gd3JpdGUgKi8KLQlpZiAoc3BhY2VmcmVlKGNoYW4tPnJ0X3JlYWQsIGNoYW4tPnJ0X3dyaXRlLCBjaGFuLT5idWZmZXJfc2l6ZSkpCi0JCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJCQkvKiBnbyB0byBzbGVlcCAqLworCQkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW2luZGV4XS5seF9xdWV1ZSwgJndhaXQpOwogCi0JcmV0dXJuIG1hc2s7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJd2hpbGUgKGNoYW4tPmx4X3JlYWQgPT0gY2hhbi0+bHhfd3JpdGUpIHsKKwkJCQlzY2hlZHVsZSgpOworCisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQkJCWlmIChzcF9zdG9wcGluZykgeworCQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbaW5kZXhdLmx4X3F1ZXVlLCAmd2FpdCk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1tpbmRleF0ubHhfcXVldWUsICZ3YWl0KTsKKworCQkJLyogYmFjayBydW5uaW5nICovCisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIChjaGFuLT5seF93cml0ZSArIGNoYW4tPmJ1ZmZlcl9zaXplIC0gY2hhbi0+bHhfcmVhZCkKKwkgICAgICAgJSBjaGFuLT5idWZmZXJfc2l6ZTsKIH0KIAotc3RhdGljIHNzaXplX3QgcnRseF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LAotCQkJIGxvZmZfdCAqIHBwb3MpCitzdGF0aWMgaW5saW5lIGludCB3cml0ZV9zcGFjZWZyZWUoaW50IHJlYWQsIGludCB3cml0ZSwgaW50IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmYWlsZWQ7Ci0Jc2l6ZV90IGZsID0gMEw7Ci0JaW50IG1pbm9yOwotCXN0cnVjdCBydGx4X2NoYW5uZWwgKmx4OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLQlseCA9ICZydGx4LT5jaGFubmVsW21pbm9yXTsKLQotCS8qIGRhdGEgYXZhaWxhYmxlPyAqLwotCWlmIChseC0+bHhfd3JpdGUgPT0gbHgtPmx4X3JlYWQpIHsKLQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQkJcmV0dXJuIDA7CS8qIC1FQUdBSU4gbWFrZXMgY2F0IHdoaW5nZSAqLwotCi0JCS8qIGdvIHRvIHNsZWVwICovCi0JCWFkZF93YWl0X3F1ZXVlKCZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQl3aGlsZSAobHgtPmx4X3dyaXRlID09IGx4LT5seF9yZWFkKQotCQkJc2NoZWR1bGUoKTsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hhbm5lbF93cXNbbWlub3JdLmx4X3F1ZXVlLCAmd2FpdCk7Ci0KLQkJLyogYmFjayBydW5uaW5nICovCisJaWYgKHJlYWQgPT0gd3JpdGUpIHsKKwkJLyoKKwkJICogTmV2ZXIgZmlsbCB0aGUgYnVmZmVyIGNvbXBsZXRlbHksIHNvIGluZGV4ZXMgYXJlIGFsd2F5cworCQkgKiBlcXVhbCBpZiBlbXB0eSBhbmQgb25seSBlbXB0eSwgb3IgIWVxdWFsIGlmIGRhdGEgYXZhaWxhYmxlCisJCSAqLworCQlyZXR1cm4gc2l6ZSAtIDE7CiAJfQogCisJcmV0dXJuICgocmVhZCArIHNpemUgLSB3cml0ZSkgJSBzaXplKSAtIDE7Cit9CisKK3Vuc2lnbmVkIGludCBydGx4X3dyaXRlX3BvbGwoaW50IGluZGV4KQoreworCXN0cnVjdCBydGx4X2NoYW5uZWwgKmNoYW4gPSAmcnRseC0+Y2hhbm5lbFtpbmRleF07CisJcmV0dXJuIHdyaXRlX3NwYWNlZnJlZShjaGFuLT5ydF9yZWFkLCBjaGFuLT5ydF93cml0ZSwgY2hhbi0+YnVmZmVyX3NpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV90byh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGNvdW50LCBpbnQgdXNlcikKK3sKKwlpZiAodXNlcikKKwkJY29weV90b191c2VyKGRzdCwgc3JjLCBjb3VudCk7CisJZWxzZQorCQltZW1jcHkoZHN0LCBzcmMsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZnJvbSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGNvdW50LCBpbnQgdXNlcikKK3sKKwlpZiAodXNlcikKKwkJY29weV9mcm9tX3VzZXIoZHN0LCBzcmMsIGNvdW50KTsKKwllbHNlCisJCW1lbWNweShkc3QsIHNyYywgY291bnQpOworfQorCitzc2l6ZV90IHJ0bHhfcmVhZChpbnQgaW5kZXgsIHZvaWQgKmJ1ZmYsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpCit7CisJc2l6ZV90IGZsID0gMEw7CisJc3RydWN0IHJ0bHhfY2hhbm5lbCAqbHg7CisKKwlpZiAocnRseCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWx4ID0gJnJ0bHgtPmNoYW5uZWxbaW5kZXhdOworCiAJLyogZmluZCBvdXQgaG93IG11Y2ggaW4gdG90YWwgKi8KIAljb3VudCA9IG1pbihjb3VudCwKLQkJICAgIChzaXplX3QpKGx4LT5seF93cml0ZSArIGx4LT5idWZmZXJfc2l6ZSAtIGx4LT5seF9yZWFkKSAlIGx4LT5idWZmZXJfc2l6ZSk7CisJCSAgICAgKHNpemVfdCkobHgtPmx4X3dyaXRlICsgbHgtPmJ1ZmZlcl9zaXplIC0gbHgtPmx4X3JlYWQpCisJCSAgICAgJSBseC0+YnVmZmVyX3NpemUpOwogCiAJLyogdGhlbiBob3cgbXVjaCBmcm9tIHRoZSByZWFkIHBvaW50ZXIgb253YXJkcyAqLwotCWZsID0gbWluKGNvdW50LCAoc2l6ZV90KWx4LT5idWZmZXJfc2l6ZSAtIGx4LT5seF9yZWFkKTsKKwlmbCA9IG1pbiggY291bnQsIChzaXplX3QpbHgtPmJ1ZmZlcl9zaXplIC0gbHgtPmx4X3JlYWQpOwogCi0JZmFpbGVkID0gY29weV90b191c2VyIChidWZmZXIsICZseC0+bHhfYnVmZmVyW2x4LT5seF9yZWFkXSwgZmwpOwotCWlmIChmYWlsZWQpIHsKLQkJY291bnQgPSBmbCAtIGZhaWxlZDsKLQkJZ290byBvdXQ7Ci0JfQorCWNvcHlfdG8oYnVmZiwgJmx4LT5seF9idWZmZXJbbHgtPmx4X3JlYWRdLCBmbCwgdXNlcik7CiAKIAkvKiBhbmQgaWYgdGhlcmUgaXMgYW55dGhpbmcgbGVmdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQlpZiAoY291bnQgLSBmbCkgewotCQlmYWlsZWQgPSBjb3B5X3RvX3VzZXIgKGJ1ZmZlciArIGZsLCBseC0+bHhfYnVmZmVyLCBjb3VudCAtIGZsKTsKLQkJaWYgKGZhaWxlZCkgewotCQkJY291bnQgLT0gZmFpbGVkOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJaWYgKCBjb3VudCAtIGZsICkKKwkJY29weV90byAoYnVmZiArIGZsLCBseC0+bHhfYnVmZmVyLCBjb3VudCAtIGZsLCB1c2VyKTsKIAotb3V0OgogCS8qIHVwZGF0ZSB0aGUgaW5kZXggKi8KIAlseC0+bHhfcmVhZCArPSBjb3VudDsKIAlseC0+bHhfcmVhZCAlPSBseC0+YnVmZmVyX3NpemU7CkBAIC0yNDIsMjAgKzM2NSwxMDAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHJ0bHhfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCitzc2l6ZV90IHJ0bHhfd3JpdGUoaW50IGluZGV4LCB2b2lkICpidWZmZXIsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmYWlsZWQ7Ci0JaW50IG1pbm9yOwogCXN0cnVjdCBydGx4X2NoYW5uZWwgKnJ0OwogCXNpemVfdCBmbDsKKworCWlmIChydGx4ID09IE5VTEwpCisJCXJldHVybigtRU5PU1lTKTsKKworCXJ0ID0gJnJ0bHgtPmNoYW5uZWxbaW5kZXhdOworCisJLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KKwljb3VudCA9IG1pbihjb3VudCwKKwkJICAgIChzaXplX3Qpd3JpdGVfc3BhY2VmcmVlKHJ0LT5ydF9yZWFkLCBydC0+cnRfd3JpdGUsCisJCQkJCSAgICBydC0+YnVmZmVyX3NpemUpKTsKKworCS8qIGZpcnN0IGJpdCBmcm9tIHdyaXRlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBvciBjb3VudCAqLworCWZsID0gbWluKGNvdW50LCAoc2l6ZV90KSBydC0+YnVmZmVyX3NpemUgLSBydC0+cnRfd3JpdGUpOworCisJY29weV9mcm9tICgmcnQtPnJ0X2J1ZmZlcltydC0+cnRfd3JpdGVdLCBidWZmZXIsIGZsLCB1c2VyKTsKKworCS8qIGlmIHRoZXJlJ3MgYW55IGxlZnQgY29weSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KKwlpZiggY291bnQgLSBmbCApCisJCWNvcHlfZnJvbSAocnQtPnJ0X2J1ZmZlciwgYnVmZmVyICsgZmwsIGNvdW50IC0gZmwsIHVzZXIpOworCisJcnQtPnJ0X3dyaXRlICs9IGNvdW50OworCXJ0LT5ydF93cml0ZSAlPSBydC0+YnVmZmVyX3NpemU7CisKKwlyZXR1cm4oY291bnQpOworfQorCisKK3N0YXRpYyBpbnQgZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlyZXR1cm4gcnRseF9vcGVuKG1pbm9yLCAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpOworfQorCitzdGF0aWMgaW50IGZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJcmV0dXJuIHJ0bHhfcmVsZWFzZShtaW5vcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwlpbnQgbWlub3I7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCisJcG9sbF93YWl0KGZpbGUsICZjaGFubmVsX3dxc1ttaW5vcl0ucnRfcXVldWUsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmY2hhbm5lbF93cXNbbWlub3JdLmx4X3F1ZXVlLCB3YWl0KTsKKworCWlmIChydGx4ID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogZGF0YSBhdmFpbGFibGUgdG8gcmVhZD8gKi8KKwlpZiAocnRseF9yZWFkX3BvbGwobWlub3IsIDApKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwkvKiBzcGFjZSB0byB3cml0ZSAqLworCWlmIChydGx4X3dyaXRlX3BvbGwobWlub3IpKQorCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCSBsb2ZmX3QgKiBwcG9zKQoreworCWludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisKKwkvKiBkYXRhIGF2YWlsYWJsZT8gKi8KKwlpZiAoIXJ0bHhfcmVhZF9wb2xsKG1pbm9yLCAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpKSB7CisJCXJldHVybiAwOwkvLyAtRUFHQUlOIG1ha2VzIGNhdCB3aGluZ2UKKwl9CisKKwlyZXR1cm4gcnRseF9yZWFkKG1pbm9yLCBidWZmZXIsIGNvdW50LCAxKTsKK30KKworc3RhdGljIHNzaXplX3QgZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlpbnQgbWlub3I7CisJc3RydWN0IHJ0bHhfY2hhbm5lbCAqcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKLQltaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOworCW1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlydCA9ICZydGx4LT5jaGFubmVsW21pbm9yXTsKIAogCS8qIGFueSBzcGFjZSBsZWZ0Li4uICovCi0JaWYgKCFzcGFjZWZyZWUocnQtPnJ0X3JlYWQsIHJ0LT5ydF93cml0ZSwgcnQtPmJ1ZmZlcl9zaXplKSkgeworCWlmICghcnRseF93cml0ZV9wb2xsKG1pbm9yKSkgewogCiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtMjYzLDYxICs0NjYsNjQgQEAKIAkJYWRkX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCXdoaWxlICghc3BhY2VmcmVlKHJ0LT5ydF9yZWFkLCBydC0+cnRfd3JpdGUsIHJ0LT5idWZmZXJfc2l6ZSkpCisJCXdoaWxlICghcnRseF93cml0ZV9wb2xsKG1pbm9yKSkKIAkJCXNjaGVkdWxlKCk7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgJndhaXQpOwogCX0KIAotCS8qIHRvdGFsIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCi0JY291bnQgPSBtaW4oY291bnQsIChzaXplX3Qpc3BhY2VmcmVlKHJ0LT5ydF9yZWFkLCBydC0+cnRfd3JpdGUsIHJ0LT5idWZmZXJfc2l6ZSkgKTsKLQotCS8qIGZpcnN0IGJpdCBmcm9tIHdyaXRlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBvciBjb3VudCAqLwotCWZsID0gbWluKGNvdW50LCAoc2l6ZV90KSBydC0+YnVmZmVyX3NpemUgLSBydC0+cnRfd3JpdGUpOwotCi0JZmFpbGVkID0gY29weV9mcm9tX3VzZXIoJnJ0LT5ydF9idWZmZXJbcnQtPnJ0X3dyaXRlXSwgYnVmZmVyLCBmbCk7Ci0JaWYgKGZhaWxlZCkgewotCQljb3VudCA9IGZsIC0gZmFpbGVkOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBpZiB0aGVyZSdzIGFueSBsZWZ0IGNvcHkgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCi0JaWYgKGNvdW50IC0gZmwpIHsKLQkJZmFpbGVkID0gY29weV9mcm9tX3VzZXIocnQtPnJ0X2J1ZmZlciwgYnVmZmVyICsgZmwsIGNvdW50IC0gZmwpOwotCQlpZiAoZmFpbGVkKSB7Ci0JCQljb3VudCAtPSBmYWlsZWQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotb3V0OgotCXJ0LT5ydF93cml0ZSArPSBjb3VudDsKLQlydC0+cnRfd3JpdGUgJT0gcnQtPmJ1ZmZlcl9zaXplOwotCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBydGx4X3dyaXRlKG1pbm9yLCAodm9pZCAqKWJ1ZmZlciwgY291bnQsIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGx4X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHJ0bHhfb3BlbiwKLQkucmVsZWFzZQk9IHJ0bHhfcmVsZWFzZSwKLQkud3JpdGUJCT0gcnRseF93cml0ZSwKLQkucmVhZAkJPSBydGx4X3JlYWQsCi0JLnBvbGwJCT0gcnRseF9wb2xsCisJLm93bmVyID0gICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgIGZpbGVfb3BlbiwKKwkucmVsZWFzZSA9IGZpbGVfcmVsZWFzZSwKKwkud3JpdGUgPSAgIGZpbGVfd3JpdGUsCisJLnJlYWQgPSAgICBmaWxlX3JlYWQsCisJLnBvbGwgPSAgICBmaWxlX3BvbGwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHJ0bHhfaXJxID0geworCS5oYW5kbGVyCT0gcnRseF9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkubmFtZQkJPSAiUlRMWCIsCit9OworCitzdGF0aWMgaW50IHJ0bHhfaXJxX251bSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9SVExYX0lSUTsKKwogc3RhdGljIGNoYXIgcmVnaXN0ZXJfY2hyZGV2X2ZhaWxlZFtdIF9faW5pdGRhdGEgPQogCUtFUk5fRVJSICJydGx4X21vZHVsZV9pbml0OiB1bmFibGUgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iOwogCi1zdGF0aWMgaW50IF9faW5pdCBydGx4X21vZHVsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IHJ0bHhfbW9kdWxlX2luaXQodm9pZCkKIHsKKwlpbnQgaTsKKwogCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIG1vZHVsZV9uYW1lLCAmcnRseF9mb3BzKTsKIAlpZiAobWFqb3IgPCAwKSB7CiAJCXByaW50ayhyZWdpc3Rlcl9jaHJkZXZfZmFpbGVkKTsKIAkJcmV0dXJuIG1ham9yOwogCX0KIAorCS8qIGluaXRpYWxpc2UgdGhlIHdhaXQgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IFJUTFhfQ0hBTk5FTFM7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFubmVsX3dxc1tpXS5ydF9xdWV1ZSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWxfd3FzW2ldLmx4X3F1ZXVlKTsKKwkJY2hhbm5lbF93cXNbaV0uaW5fb3BlbiA9IDA7CisJfQorCisJLyogc2V0IHVwIG5vdGlmaWVycyAqLworCW5vdGlmeS5zdGFydCA9IHN0YXJ0aW5nOworCW5vdGlmeS5zdG9wID0gc3RvcHBpbmc7CisJdnBlX25vdGlmeShSVExYX1RBUkdfVlBFLCAmbm90aWZ5KTsKKworCWlmIChjcHVfaGFzX3ZpbnQpCisJCXNldF92aV9oYW5kbGVyKE1JUFNfQ1BVX1JUTFhfSVJRLCBydGx4X2Rpc3BhdGNoKTsKKworCXJ0bHhfaXJxLmRldl9pZCA9IHJ0bHg7CisJc2V0dXBfaXJxKHJ0bHhfaXJxX251bSwgJnJ0bHhfaXJxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzAsNSArNTM2LDUgQEAKIG1vZHVsZV9leGl0KHJ0bHhfbW9kdWxlX2V4aXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1JUFMgUlRMWCIpOwotTU9EVUxFX0FVVEhPUigiRWxpemFiZXRoIENsYXJrZSwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4iKTsKK01PRFVMRV9BVVRIT1IoIkVsaXphYmV0aCBPbGRoYW0sIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggMmYyZGM1NC4uYTBhYzBlNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNTY5LDggKzU2OSwxOSBAQAogCXN5cwlzeXNfdGtpbGwJCTIKIAlzeXMJc3lzX3NlbmRmaWxlNjQJCTUKIAlzeXMJc3lzX2Z1dGV4CQk2CisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKgorCSAqIEZvciBGUFUgYWZmaW5pdHkgc2NoZWR1bGluZyBvbiBNSVBTIE1UIHByb2Nlc3NvcnMsIHdlIG5lZWQgdG8KKwkgKiBpbnRlcmNlcHQgc3lzX3NjaGVkX3h4eGFmZmluaXR5KCkgY2FsbHMgdW50aWwgd2UgZ2V0IGEgcHJvcGVyIGhvb2sKKwkgKiBpbiBrZXJuZWwvc2NoZWQuYy4gIENvbnNpZGVyZWQgb25seSB0ZW1wb3Jhcnkgd2Ugb25seSBzdXBwb3J0IHRoZXNlCisJICogaG9va3MgZm9yIHRoZSAzMi1iaXQga2VybmVsIC0gdGhlcmUgaXMgbm8gTUlQUzY0IE1UIHByb2Nlc3NvciBhdG0uCisJICovCisJc3lzCW1pcHNtdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHkJMworCXN5cwltaXBzbXRfc3lzX3NjaGVkX2dldGFmZmluaXR5CTMKKyNlbHNlCiAJc3lzCXN5c19zY2hlZF9zZXRhZmZpbml0eQkzCiAJc3lzCXN5c19zY2hlZF9nZXRhZmZpbml0eQkzCS8qIDQyNDAgKi8KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogCXN5cwlzeXNfaW9fc2V0dXAJCTIKIAlzeXMJc3lzX2lvX2Rlc3Ryb3kJCTEKIAlzeXMJc3lzX2lvX2dldGV2ZW50cwk1CkBAIC02MzQsNiArNjQ1LDggQEAKIAlzeXMJc3lzX3BzZWxlY3Q2CQk2CiAJc3lzCXN5c19wcG9sbAkJNQogCXN5cwlzeXNfdW5zaGFyZQkJMQorCXN5cwlzeXNfc3BsaWNlCQk0CisJc3lzCXN5c19zeW5jX2ZpbGVfcmFuZ2UJNwkvKiA0MzA1ICovCiAJLmVuZG0KIAogCS8qIFdlIHByZS1jb21wdXRlIHRoZSBudW1iZXIgb2YgX2luc3RydWN0aW9uXyBieXRlcyBuZWVkZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggOThiZjI1ZC4uOWJhNzUwOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKQEAgLTQ2MCwzICs0NjAsNSBAQAogCVBUUglzeXNfcHNlbGVjdDYJCQkvKiA1MjYwICovCiAJUFRSCXN5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQorCVBUUglzeXNfc3BsaWNlCisJUFRSCXN5c19zeW5jX2ZpbGVfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCAwNWEyYzA1Li45NDJhY2EyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0zODYsMyArMzg2LDUgQEAKIAlQVFIJc3lzX3BzZWxlY3Q2CiAJUFRSCXN5c19wcG9sbAkJCS8qIDYyNjUgKi8KIAlQVFIJc3lzX3Vuc2hhcmUKKwlQVFIJc3lzX3NwbGljZQorCVBUUglzeXNfc3luY19maWxlX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggMTljNGNhNC4uOGVmYjIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJUFRSCXN5c19mb3JrCiAJUFRSCXN5c19yZWFkCiAJUFRSCXN5c193cml0ZQotCVBUUglzeXNfb3BlbgkJCS8qIDQwMDUgKi8KKwlQVFIJY29tcGF0X3N5c19vcGVuCQkJLyogNDAwNSAqLwogCVBUUglzeXNfY2xvc2UKIAlQVFIJc3lzX3dhaXRwaWQKIAlQVFIJc3lzX2NyZWF0CkBAIC01MDgsNCArNTA4LDYgQEAKIAlQVFIJc3lzX3BzZWxlY3Q2CiAJUFRSCXN5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQorCVBUUglzeXNfc3BsaWNlCisJUFRSCXN5czMyX3N5bmNfZmlsZV9yYW5nZQkJLyogNDMwNSAqLwogCS5zaXplCXN5c19jYWxsX3RhYmxlLC4tc3lzX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwppbmRleCBkY2JmZDI3Li4zOTdhNzBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkvKiBIQUNLOiBHdWVzcyBpZiB0aGUgc2lnbiBleHRlbnNpb24gd2FzIGZvcmdvdHRlbiAqLwogCWlmIChzdGFydCA+IDB4MDAwMDAwMDA4MDAwMDAwMCAmJiBzdGFydCA8IDB4MDAwMDAwMDBmZmZmZmZmZikKLQkJc3RhcnQgfD0gMHhmZmZmZmZmZjAwMDAwMDAwOworCQlzdGFydCB8PSAweGZmZmZmZmZmMDAwMDAwMDBVTDsKICNlbmRpZgogCiAJZW5kID0gc3RhcnQgKyBzaXplOwpAQCAtMzU1LDggKzM1NSw2IEBACiAJfQogI2VuZGlmCiAKLQltZW1vcnlfcHJlc2VudCgwLCBmaXJzdF91c2FibGVfcGZuLCBtYXhfbG93X3Bmbik7Ci0KIAkvKiBJbml0aWFsaXplIHRoZSBib290LXRpbWUgYWxsb2NhdG9yIHdpdGggbG93IG1lbW9yeSBvbmx5LiAgKi8KIAlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oZmlyc3RfdXNhYmxlX3BmbiwgbWF4X2xvd19wZm4pOwogCkBAIC00MTAsNiArNDA4LDcgQEAKIAogCQkvKiBSZWdpc3RlciBsb3dtZW0gcmFuZ2VzICovCiAJCWZyZWVfYm9vdG1lbShQRk5fUEhZUyhjdXJyX3BmbiksIFBGTl9QSFlTKHNpemUpKTsKKwkJbWVtb3J5X3ByZXNlbnQoMCwgY3Vycl9wZm4sIGN1cnJfcGZuICsgc2l6ZSAtIDEpOwogCX0KIAogCS8qIFJlc2VydmUgdGhlIGJvb3RtYXAgbWVtb3J5LiAgKi8KQEAgLTQxOSwxNyArNDE4LDIwIEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKIAlpZiAoaW5pdHJkX3N0YXJ0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUgPSAoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfZW5kKSAtICgodW5zaWduZWQgY2hhciAqKWluaXRyZF9zdGFydCk7CisJCXVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUgPSAoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfZW5kKSAtCisJCQkoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfc3RhcnQpOworCQljb25zdCBpbnQgd2lkdGggPSBzaXplb2YobG9uZykgKiAyOworCiAJCXByaW50aygiSW5pdGlhbCByYW1kaXNrIGF0OiAweCVwICglbHUgYnl0ZXMpXG4iLAogCQkgICAgICAgKHZvaWQgKilpbml0cmRfc3RhcnQsIGluaXRyZF9zaXplKTsKIAogCQlpZiAoQ1BIWVNBRERSKGluaXRyZF9lbmQpID4gUEZOX1BIWVMobWF4X2xvd19wZm4pKSB7CiAJCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKIAkJCSAgICAgICAiKDB4JTAqTHggPiAweCUwKkx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLQkJCSAgICAgICBzaXplb2YobG9uZykgKiAyLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpQ1BIWVNBRERSKGluaXRyZF9lbmQpLAotCQkJICAgICAgIHNpemVvZihsb25nKSAqIDIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylQRk5fUEhZUyhtYXhfbG93X3BmbikpOworCQkJICAgICAgIHdpZHRoLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIENQSFlTQUREUihpbml0cmRfZW5kKSwKKwkJCSAgICAgICB3aWR0aCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBQRk5fUEhZUyhtYXhfbG93X3BmbikpOwogCQkJaW5pdHJkX3N0YXJ0ID0gaW5pdHJkX2VuZCA9IDA7CiAJCQlpbml0cmRfcmVzZXJ2ZV9ib290bWVtID0gMDsKIAkJfQpAQCAtNTI5LDcgKzUzMSwxMCBAQAogCiBpbnQgX19pbml0IGZwdV9kaXNhYmxlKGNoYXIgKnMpCiB7Ci0JY3B1X2RhdGFbMF0ub3B0aW9ucyAmPSB+TUlQU19DUFVfRlBVOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKKwkJY3B1X2RhdGFbaV0ub3B0aW9ucyAmPSB+TUlQU19DUFVfRlBVOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaCBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCmluZGV4IDNjYTc4NjIuLmNlNmNiOTE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaAorKysgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaApAQCAtMzEsNyArMzEsNiBAQAogCXNhdmVfZ3BfcmVnKDMxKTsKICN1bmRlZiBzYXZlX2dwX3JlZwogCi0jaWZkZWYgQ09ORklHXzMyQklUCiAJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+aGksICZzYy0+c2NfbWRoaSk7CiAJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+bG8sICZzYy0+c2NfbWRsbyk7CiAJaWYgKGNwdV9oYXNfZHNwKSB7CkBAIC00MywyMCArNDIsNiBAQAogCQllcnIgfD0gX19wdXRfdXNlcihtZmxvMygpLCAmc2MtPnNjX2xvMyk7CiAJCWVyciB8PSBfX3B1dF91c2VyKHJkZHNwKERTUF9NQVNLKSwgJnNjLT5zY19kc3ApOwogCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR182NEJJVAotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmhpLCAmc2MtPnNjX2hpWzBdKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5sbywgJnNjLT5zY19sb1swXSk7Ci0JaWYgKGNwdV9oYXNfZHNwKSB7Ci0JCWVyciB8PSBfX3B1dF91c2VyKG1maGkxKCksICZzYy0+c2NfaGlbMV0pOwotCQllcnIgfD0gX19wdXRfdXNlcihtZmxvMSgpLCAmc2MtPnNjX2xvWzFdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIobWZoaTIoKSwgJnNjLT5zY19oaVsyXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKG1mbG8yKCksICZzYy0+c2NfbG9bMl0pOwotCQllcnIgfD0gX19wdXRfdXNlcihtZmhpMygpLCAmc2MtPnNjX2hpWzNdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIobWZsbzMoKSwgJnNjLT5zY19sb1szXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKHJkZHNwKERTUF9NQVNLKSwgJnNjLT5zY19kc3ApOwotCX0KLSNlbmRpZgogCiAJZXJyIHw9IF9fcHV0X3VzZXIoISF1c2VkX21hdGgoKSwgJnNjLT5zY191c2VkX21hdGgpOwogCkBAIC05Miw3ICs3Nyw2IEBACiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCiAJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+Y3AwX2VwYywgJnNjLT5zY19wYyk7Ci0jaWZkZWYgQ09ORklHXzMyQklUCiAJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+aGksICZzYy0+c2NfbWRoaSk7CiAJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+bG8sICZzYy0+c2NfbWRsbyk7CiAJaWYgKGNwdV9oYXNfZHNwKSB7CkBAIC0xMDQsMjAgKzg4LDYgQEAKIAkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19sbzMpOyBtdGxvMyh0cmVnKTsKIAkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19kc3ApOyB3cmRzcCh0cmVnLCBEU1BfTUFTSyk7CiAJfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+aGksICZzYy0+c2NfaGlbMF0pOwotCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmxvLCAmc2MtPnNjX2xvWzBdKTsKLQlpZiAoY3B1X2hhc19kc3ApIHsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19oaVsxXSk7IG10aGkxKHRyZWcpOwotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2xvWzFdKTsgbXRoaTEodHJlZyk7Ci0JCWVyciB8PSBfX2dldF91c2VyKHRyZWcsICZzYy0+c2NfaGlbMl0pOyBtdGhpMih0cmVnKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19sb1syXSk7IG10aGkyKHRyZWcpOwotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2hpWzNdKTsgbXRoaTModHJlZyk7Ci0JCWVyciB8PSBfX2dldF91c2VyKHRyZWcsICZzYy0+c2NfbG9bM10pOyBtdGhpMyh0cmVnKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19kc3ApOyB3cmRzcCh0cmVnLCBEU1BfTUFTSyk7Ci0JfQotI2VuZGlmCiAKICNkZWZpbmUgcmVzdG9yZV9ncF9yZWcoaSkgZG8gewkJCQkJCVwKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5yZWdzW2ldLCAmc2MtPnNjX3JlZ3NbaV0pOwkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXBfbXQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL2tlcm5lbC9zbXBfbXQuYwpyZW5hbWUgdG8gYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwppbmRleCA5OTNiOGJmLi41Nzc3MDkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcF9tdC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKQEAgLTEsOCArMSw0IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBFbGl6YWJldGggQ2xhcmtlIChiZXRoQG1pcHMuY29tKQotICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC0xNiw2ICsxMiwxMCBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMDUsIDA2IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKiAgICBFbGl6YWJldGggQ2xhcmtlIChiZXRoQG1pcHMuY29tKQorICogICAgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMzMsOCArMzQsOCBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tYWx0YWludC5oPgorI2luY2x1ZGUgPGFzbS9taXBzX210Lmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21hbHRhaW50Lmg+ICAvKiBUaGlzIGlzIGYqY2tpbmcgd3JvbmcgKi8KIAogI2RlZmluZSBNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlEgMAogI2RlZmluZSBNSVBTX0NQVV9JUElfQ0FMTF9JUlEgMQpAQCAtNjYsNiArNjcsNyBAQAogCWlmICghY3B1X2hhc19taXBzbXQpCiAJCXJldHVybjsKIAorCS8qIEVuYWJsZSBWUEMgKi8KIAlzZXRfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CiAKIAliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CkBAIC0xMDYsMTIgKzEwOCwxMiBAQAogCiBzdGF0aWMgdm9pZCBpcGlfcmVzY2hlZF9kaXNwYXRjaCAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JZG9fSVJRKE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUSwgcmVncyk7CisJZG9fSVJRKE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlEsIHJlZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcGlfY2FsbF9kaXNwYXRjaCAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JZG9fSVJRKE1JUFNfQ1BVX0lQSV9DQUxMX0lSUSwgcmVncyk7CisJZG9fSVJRKE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTX0NQVV9JUElfQ0FMTF9JUlEsIHJlZ3MpOwogfQogCiBpcnFyZXR1cm5fdCBpcGlfcmVzY2hlZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTE0OCw2ICsxNTAsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgaSwgbnVtOwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKiBJZiB3ZSBoYXZlIGFuIEZQVSwgZW5yb2xsIG91cnNlbHZlcyBpbiB0aGUgRlBVLWZ1bGwgbWFzayAqLworCWlmIChjcHVfaGFzX2ZwdSkKKwkJY3B1X3NldCgwLCBtdF9mcHVfY3B1bWFzayk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KIAlpZiAoIWNwdV9oYXNfbWlwc210KQogCQlyZXR1cm47CiAKQEAgLTE1NSw2ICsxNjIsOCBAQAogCWR2cGUoKTsKIAlkbXQoKTsKIAorCW1pcHNfbXRfc2V0X2NwdW9wdGlvbnMoKTsKKwogCS8qIFB1dCBNVlBFJ3MgaW50byAnY29uZmlndXJhdGlvbiBzdGF0ZScgKi8KIAlzZXRfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CiAKQEAgLTE4OSwxMSArMTk4LDEzIEBACiAKIAkJCWlmIChpICE9IDApIHsKIAkJCQl3cml0ZV92cGVfYzBfc3RhdHVzKChyZWFkX2MwX3N0YXR1cygpICYgfihTVDBfSU0gfCBTVDBfSUUgfCBTVDBfS1NVKSkgfCBTVDBfQ1UwKTsKLQkJCQl3cml0ZV92cGVfYzBfY2F1c2UocmVhZF92cGVfYzBfY2F1c2UoKSAmIH5DQVVTRUZfSVApOwogCiAJCQkJLyogc2V0IGNvbmZpZyB0byBiZSB0aGUgc2FtZSBhcyB2cGUwLCBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZyAqLwogCQkJCXdyaXRlX3ZwZV9jMF9jb25maWcoIHJlYWRfYzBfY29uZmlnKCkpOwogCisJCQkJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzb2Z0d2FyZSBpbnRlcnJ1cHRzIHBlbmRpbmcgKi8KKwkJCQl3cml0ZV92cGVfYzBfY2F1c2UocmVhZF92cGVfYzBfY2F1c2UoKSAmIH4oQ19TVzF8Q19TVzApKTsKKwogCQkJCS8qIFByb3BhZ2F0ZSBDb25maWc3ICovCiAJCQkJd3JpdGVfdnBlX2MwX2NvbmZpZzcocmVhZF9jMF9jb25maWc3KCkpOwogCQkJfQpAQCAtMjMzLDE2ICsyNDQsMTYgQEAKIAkvKiBXZSdsbCB3YWl0IHVudGlsIHN0YXJ0aW5nIHRoZSBzZWNvbmRhcmllcyBiZWZvcmUgc3RhcnRpbmcgTVZQRSAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRGV0ZWN0ZWQgJWkgYXZhaWxhYmxlIHNlY29uZGFyeSBDUFUocylcbiIsIG51bSk7Cit9CiAKK3ZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKIAkvKiBzZXQgdXAgaXBpIGludGVycnVwdHMgKi8KIAlpZiAoY3B1X2hhc192aW50KSB7CiAJCXNldF92aV9oYW5kbGVyIChNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlEsIGlwaV9yZXNjaGVkX2Rpc3BhdGNoKTsKIAkJc2V0X3ZpX2hhbmRsZXIgKE1JUFNfQ1BVX0lQSV9DQUxMX0lSUSwgaXBpX2NhbGxfZGlzcGF0Y2gpOwogCX0KLX0KIAotdm9pZCBfX2luaXQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQotewogCWNwdV9pcGlfcmVzY2hlZF9pcnEgPSBNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfSVBJX1JFU0NIRURfSVJROwogCWNwdV9pcGlfY2FsbF9pcnEgPSBNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU19DUFVfSVBJX0NBTExfSVJROwogCkBAIC0yODcsNyArMjk4LDggQEAKIAkvKiBnbG9iYWwgcG9pbnRlciAqLwogCXdyaXRlX3RjX2dwcl9ncCgodW5zaWduZWQgbG9uZylncCk7CiAKLQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZ3AsICh1bnNpZ25lZCBsb25nKShncCArIDEpKTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZ3AsCisJICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShncCArIHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pKSk7CiAKIAkvKiBmaW5hbGx5IG91dCBvZiBjb25maWd1cmF0aW9uIGFuZCBpbnRvIGNoYW9zICovCiAJY2xlYXJfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CkBAIC0zMDUsNiArMzE3LDEyIEBACiB7CiAJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkgKyAoOCogbWlwc19ocHRfZnJlcXVlbmN5L0haKSk7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorCS8qIElmIHdlIGhhdmUgYW4gRlBVLCBlbnJvbGwgb3Vyc2VsdmVzIGluIHRoZSBGUFUtZnVsbCBtYXNrICovCisJaWYgKGNwdV9oYXNfZnB1KQorCQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbXRfZnB1X2NwdW1hc2spOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX0ZQQUZGICovCisKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IDc4ZDE3MWIuLjI5OGY4MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsJCS8qIEJpdG1hc2sgb2YgYXZhaWxhYmxlIENQVXMgKi8KIHZvbGF0aWxlIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsJLyogQml0bWFzayBvZiBzdGFydGVkIHNlY29uZGFyaWVzICovCiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CQkvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBvbmxpbmUgQ1BVcyAqLwpAQCAtODUsNiArODksMTAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCS8qIE9ubHkgZG8gY3B1X3Byb2JlIGZvciBmaXJzdCBUQyBvZiBDUFUgKi8KKwlpZiAoKHJlYWRfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVEMpID09IDApCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCWNwdV9wcm9iZSgpOwogCWNwdV9yZXBvcnQoKTsKIAlwZXJfY3B1X3RyYXBfaW5pdCgpOwpAQCAtMTc5LDExICsxODcsMTMgQEAKIAlpZiAod2FpdCkKIAkJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKQogCQkJYmFycmllcigpOworCWNhbGxfZGF0YSA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJnNtcF9jYWxsX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKKwogdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCkKIHsKIAl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pID0gY2FsbF9kYXRhLT5mdW5jOwpAQCAtMjM3LDYgKzI0Nyw5IEBACiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSAwOwogCXNtcF90dW5lX3NjaGVkdWxpbmcoKTsKIAlwbGF0X3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisjaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWNwdV9wcmVzZW50X21hcCA9IGNwdV9wb3NzaWJsZV9tYXA7CisjZW5kaWYKIH0KIAogLyogcHJlbG9hZCBTTVAgc3RhdGUgZm9yIGJvb3QgY3B1ICovCkBAIC00MzIsNyArNDQ1LDcgQEAKIAlpbnQgY3B1OwogCWludCByZXQ7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CiAJCXJldCA9IHJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGV2aWNlcywgY3B1KSwgY3B1LCBOVUxMKTsKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInRvcG9sb2d5X2luaXQ6IHJlZ2lzdGVyX2NwdSAlZCAiCkBAIC00NDYsNSArNDU5LDMgQEAKIAogRVhQT1JUX1NZTUJPTChmbHVzaF90bGJfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9vbmUpOwotRVhQT1JUX1NZTUJPTChjcHVfZGF0YSk7Ci1FWFBPUlRfU1lNQk9MKHN5bmNocm9uaXplX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkNjUxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIEFzc2VtYmx5IExhbmd1YWdlIEZ1bmN0aW9ucyBmb3IgTUlQUyBNVCBTTVRDIHN1cHBvcnQKKyAqLworCisvKgorICogVGhpcyBmaWxlIHNob3VsZCBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb25seSBpZiBDT05GSUdfTUlQU19NVF9TTVRDIGlzIHNldC4gKi8KKworI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+CisKKy8qCisgKiAiU29mdHdhcmUgSW50ZXJydXB0IiBsaW5rYWdlLgorICoKKyAqIFRoaXMgaXMgaW52b2tlZCB3aGVuIGFuICJJbnRlcnJ1cHQiIGlzIHNlbnQgZnJvbSBvbmUgVEMgdG8gYW5vdGhlciwKKyAqIHdoZXJlIHRoZSBUQyB0byBiZSBpbnRlcnJ1cHRlZCBpcyBoYWx0ZWQsIGhhcyBpdCdzIFJlc3RhcnQgYWRkcmVzcworICogYW5kIFN0YXR1cyB2YWx1ZXMgc2F2ZWQgYnkgdGhlICJyZW1vdGUgY29udHJvbCIgdGhyZWFkLCB0aGVuIG1vZGlmaWVkCisgKiB0byBjYXVzZSBleGVjdXRpb24gdG8gYmVnaW4gaGVyZSwgaW4ga2VuZWwgbW9kZS4gVGhpcyBjb2RlIHRoZW4KKyAqIGRpc2d1aXNlcyB0aGUgVEMgc3RhdGUgYXMgdGhhdCBvZiBhbiBleGNlcHRpb24gYW5kIHRyYW5zZmVycworICogY29udHJvbCB0byB0aGUgZ2VuZXJhbCBleGNlcHRpb24gb3IgdmVjdG9yZWQgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KKwkuc2V0IG5vcmVvcmRlcgorCisvKgorVGhlIF9fc210Y19pcGlfdmVjdG9yIHdvdWxkIHVzZSBrMCBhbmQgazEgYXMgdGVtcG9yYXJpZXMgYW5kCisxKSBTZXQgRVhMICh0aGlzIGlzIHBlci1WUEUsIHNvIHRoaXMgY2FuJ3QgYmUgZG9uZSBieSBwcm94eSEpCisyKSBSZXN0b3JlIHRoZSBLL0NVIGFuZCBJWE1UIGJpdHMgdG8gdGhlIHByZSAiZXhjZXB0aW9uIiBzdGF0ZQorICAgKEVYTCBtZWFucyBubyBpbnRlcnJ1cHRzIGFuZCBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBtYXApLgorMykgU2V0IEVQQyB0byBiZSB0aGUgc2F2ZWQgdmFsdWUgb2YgVENSZXN0YXJ0LgorNCkgSnVtcCB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgZW50cnkgcG9pbnQgcGFzc2VkIGJ5IHRoZSBzZW5kZXIuCisKK0NBTiBXRSBQUk9WRSBUSEFUIFdFIFdPTidUIERPIFRISVMgSUYgSU5UUyBESVNBQkxFRD8/CisqLworCisvKgorICogUmV2aWxlZCBhbmQgc2xhbmRlcmVkIHZpc2lvbjogU2V0IEVYTCBhbmQgcmVzdG9yZSBLL0NVL0lYTVQKKyAqIHN0YXRlIG9mIHByZS1oYWx0IHRocmVhZCwgdGhlbiBzYXZlIGV2ZXJ5dGhpbmcgYW5kIGNhbGwKKyAqIHRob3VnaHQgc29tZSBmdW5jdGlvbiBwb2ludGVyIHRvIGltYWdpbmFyeV9leGNlcHRpb24sIHdoaWNoCisgKiB3aWxsIHBhcnNlIGEgcmVnaXN0ZXIgdmFsdWUgb3IgbWVtb3J5IG1lc3NhZ2UgcXVldWUgdG8KKyAqIGRlbGl2ZXIgdGhpbmdzIGxpa2UgaW50ZXJwcm9jZXNzb3IgaW50ZXJydXB0cy4gT24gcmV0dXJuCisgKiBmcm9tIHRoYXQgZnVuY3Rpb24sIGp1bXAgdG8gdGhlIGdsb2JhbCByZXRfZnJvbV9pcnEgY29kZQorICogdG8gaW52b2tlIHRoZSBzY2hlZHVsZXIgYW5kIHJldHVybiBhcyBhcHByb3ByaWF0ZS4KKyAqLworCisjZGVmaW5lIFBUX1BBRFNMT1Q0IChQVF9SMC04KQorI2RlZmluZSBQVF9QQURTTE9UNSAoUFRfUjAtNCkKKworCS50ZXh0CisJLmFsaWduIDUKK0ZFWFBPUlQoX19zbXRjX2lwaV92ZWN0b3IpCisJLnNldAlub2F0CisJLyogRGlzYWJsZSB0aHJlYWQgc2NoZWR1bGluZyB0byBtYWtlIFN0YXR1cyB1cGRhdGUgYXRvbWljICovCisJRE1UCTI3CQkJCQkjIGRtdAlrMQorCWVoYgorCS8qIFNldCBFWEwgKi8KKwltZmMwCWswLENQMF9TVEFUVVMKKwlvcmkJazAsazAsU1QwX0VYTAorCW10YzAJazAsQ1AwX1NUQVRVUworCWVoYgorCS8qIFRocmVhZCBzY2hlZHVsaW5nIG5vdyBpbmhpYml0ZWQgYnkgRVhMLiBSZXN0b3JlIFRFIHN0YXRlLiAqLworCWFuZGkJazEsazEsVlBFQ09OVFJPTF9URQorCWJlcXoJazEsMWYKKwllbXQKKzE6CisJLyoKKwkgKiBUaGUgSVBJIHNlbmRlciBoYXMgcHV0IHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIGFudGljaXBhdGVkCisJICoga2VybmVsIHN0YWNrIGZyYW1lLiAgSWYgd2Ugd2VyZSBpbiB1c2VyIG1vZGUsIHRoaXMgd2lsbCBiZQorCSAqIGJ1aWx0IGFib3ZlIHRoZSBzYXZlZCBrZXJuZWwgU1AuICBJZiB3ZSB3ZXJlIGFscmVhZHkgaW4gdGhlCisJICoga2VybmVsLCBpdCB3aWxsIGJlIGJ1aWx0IGFib3ZlIHRoZSBjdXJyZW50IENQVSBTUC4KKwkgKgorCSAqIFdlcmUgd2UgaW4ga2VybmVsIG1vZGUsIGFzIGluZGljYXRlZCBieSBDVTA/CisJICovCisJc2xsCWsxLGswLDMKKwkuc2V0IG5vcmVvcmRlcgorCWJsdHoJazEsMmYKKwltb3ZlCWsxLHNwCisJLnNldCByZW9yZGVyCisJLyoKKwkgKiBJZiBwcmV2aW91c2x5IGluIHVzZXIgbW9kZSwgc2V0IENVMCBhbmQgdXNlIGtlcm5lbCBzdGFjay4KKwkgKi8KKwlsaQlrMSxTVDBfQ1UwCisJb3IJazEsazEsazAKKwltdGMwCWsxLENQMF9TVEFUVVMKKwllaGIKKwlnZXRfc2F2ZWRfc3AKKwkvKiBJbnRlcnJ1cHRpbmcgVEMgd2lsbCBoYXZlIHByZS1zZXQgdmFsdWVzIGluIHNsb3RzIGluIHRoZSBuZXcgZnJhbWUgKi8KKzI6CXN1YnUJazEsazEsUFRfU0laRQorCS8qIExvYWQgVENTdGF0dXMgVmFsdWUgKi8KKwlsdwlrMCxQVF9UQ1NUQVRVUyhrMSkKKwkvKiBXcml0ZSBpdCB0byBUQ1N0YXR1cyB0byByZXN0b3JlIENVL0tTVS9JWE1UIHN0YXRlICovCisJbXRjMAlrMCwkMiwxCisJZWhiCisJbHcJazAsUFRfRVBDKGsxKQorCW10YzAJazAsQ1AwX0VQQworCS8qIFNhdmUgYWxsIHdpbGwgcmVkdW5kYW50bHkgcmVjb21wdXRlIHRoZSBTUCwgYnV0IHVzZSBpdCBmb3Igbm93ICovCisJU0FWRV9BTEwKKwlDTEkKKwltb3ZlCWEwLHNwCisJLyogRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBwYXNzZWQgc3RhY2sgcGFkIHNsb3QgNSAqLworCWx3CXQwLFBUX1BBRFNMT1Q1KHNwKQorCS8qIEFyZ3VtZW50IGZyb20gc2VuZGVyIHBhc3NlZCBpbiBzdGFjayBwYWQgc2xvdCA0ICovCisJbHcJYTEsUFRfUEFEU0xPVDQoc3ApCisJamFscgl0MAorCW5vcAorCWoJcmV0X2Zyb21faXJxCisJbm9wCisKKy8qCisgKiBDYWxsZWQgZnJvbSBpZGxlIGxvb3AgdG8gcHJvdm9rZSBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBJUElzCisgKiBGaXJzdCBJUEkgbWVzc2FnZSBpbiBxdWV1ZSBwYXNzZWQgYXMgYXJndW1lbnQuCisgKi8KKworTEVBRihzZWxmX2lwaSkKKwkvKiBCZWZvcmUgYW55dGhpbmcgZWxzZSwgYmxvY2sgaW50ZXJydXB0cyAqLworCW1mYzAJdDAsQ1AwX1RDU1RBVFVTCisJb3JpCXQxLHQwLFRDU1RBVFVTX0lYTVQKKwltdGMwCXQxLENQMF9UQ1NUQVRVUworCWVoYgorCS8qIFdlIGtub3cgd2UncmUgaW4ga2VybmVsIG1vZGUsIHNvIHByZXBhcmUgc3RhY2sgZnJhbWUgKi8KKwlzdWJ1CXQxLHNwLFBUX1NJWkUKKwlzdwlyYSxQVF9FUEModDEpCisJc3cJYTAsUFRfUEFEU0xPVDQodDEpCisJbGEJdDIsaXBpX2RlY29kZQorCXN3CXQyLFBUX1BBRFNMT1Q1KHQxKQorCS8qIFNhdmUgcHJlLWRpc2FibGUgdmFsdWUgb2YgVENTdGF0dXMgKi8KKwlzdwl0MCxQVF9UQ1NUQVRVUyh0MSkKKwlqCV9fc210Y19pcGlfdmVjdG9yCisJbm9wCitFTkQoc2VsZl9pcGkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMtcHJvYy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLXByb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM3MDk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLXByb2MuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogL3Byb2MgaG9va3MgZm9yIFNNVEMga2VybmVsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWlwcyBUZWNobm9sb2dpZXMsIEluYworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgPGFzbS9zbXRjX3Byb2MuaD4KKworLyoKKyAqIC9wcm9jIGRpYWdub3N0aWMgYW5kIHN0YXRpc3RpY3MgaG9va3MKKyAqLworCisvKgorICogU3RhdGlzdGljcyBnYXRoZXJlZAorICovCit1bnNpZ25lZCBsb25nIHNlbGZpcGlzW05SX0NQVVNdOworCitzdHJ1Y3Qgc210Y19jcHVfcHJvYyBzbXRjX2NwdV9zdGF0c1tOUl9DUFVTXTsKKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc210Y19zdGF0czsKKworYXRvbWljX3Qgc210Y19mcHVfcmVjb3ZlcmllczsKKworc3RhdGljIGludCBwcm9jX3JlYWRfc210YyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgdG90YWxlbiA9IDA7CisJaW50IGxlbjsKKwlpbnQgaTsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBlYmFzZTsKKworCWxlbiA9IHNwcmludGYocGFnZSwgIlNNVEMgU3RhdHVzIFdvcmQ6IDB4JTA4eFxuIiwgc210Y19zdGF0dXMpOworCXRvdGFsZW4gKz0gbGVuOworCXBhZ2UgKz0gbGVuOworCWxlbiA9IHNwcmludGYocGFnZSwgIkNvbmZpZzc6IDB4JTA4eFxuIiwgcmVhZF9jMF9jb25maWc3KCkpOworCXRvdGFsZW4gKz0gbGVuOworCXBhZ2UgKz0gbGVuOworCWxlbiA9IHNwcmludGYocGFnZSwgIkVCQVNFOiAweCUwOGx4XG4iLCBlYmFzZSk7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJbGVuID0gc3ByaW50ZihwYWdlLCAiQ291bnRlciBJbnRlcnJ1cHRzIHRha2VuIHBlciBDUFUgKFRDKVxuIik7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJbGVuID0gc3ByaW50ZihwYWdlLCAiJWQ6ICVsZFxuIiwgaSwgc210Y19jcHVfc3RhdHNbaV0udGltZXJpbnRzKTsKKwkJdG90YWxlbiArPSBsZW47CisJCXBhZ2UgKz0gbGVuOworCX0KKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICJTZWxmLUlQSXMgYnkgQ1BVOlxuIik7CisJdG90YWxlbiArPSBsZW47CisJcGFnZSArPSBsZW47CisJZm9yKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCWxlbiA9IHNwcmludGYocGFnZSwgIiVkOiAlbGRcbiIsIGksIHNtdGNfY3B1X3N0YXRzW2ldLnNlbGZpcGlzKTsKKwkJdG90YWxlbiArPSBsZW47CisJCXBhZ2UgKz0gbGVuOworCX0KKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlZCBSZWNvdmVyaWVzIG9mIFwic3RvbGVuXCIgRlBVXG4iLAorCSAgICAgICAgICAgICAgYXRvbWljX3JlYWQoJnNtdGNfZnB1X3JlY292ZXJpZXMpKTsKKwl0b3RhbGVuICs9IGxlbjsKKwlwYWdlICs9IGxlbjsKKworCXJldHVybiB0b3RhbGVuOworfQorCit2b2lkIGluaXRfc210Y19zdGF0cyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8TlJfQ1BVUzsgaSsrKSB7CisJCXNtdGNfY3B1X3N0YXRzW2ldLnRpbWVyaW50cyA9IDA7CisJCXNtdGNfY3B1X3N0YXRzW2ldLnNlbGZpcGlzID0gMDsKKwl9CisKKwlhdG9taWNfc2V0KCZzbXRjX2ZwdV9yZWNvdmVyaWVzLCAwKTsKKworCXNtdGNfc3RhdHMgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzbXRjIiwgMDQ0NCwgTlVMTCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX3JlYWRfc210YywgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOGU1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtMCwwICsxLDEzMjIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNCBNaXBzIFRlY2hub2xvZ2llcywgSW5jICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3NtdGMuaD4KKyNpbmNsdWRlIDxhc20vc210Y19pcGkuaD4KKyNpbmNsdWRlIDxhc20vc210Y19wcm9jLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgc2hvdWxkIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvbmx5IGlmIENPTkZJR19NSVBTX01UX1NNVEMgaXMgc2V0LgorICovCisKKy8qCisgKiBNSVBTQ1BVX0lOVF9CQVNFIGlzIGlkZW50aWNhbGx5IGRlZmluZWQgaW4gYm90aAorICogYXNtLW1pcHMvbWlwcy1ib2FyZHMvbWFsdGFpbnQuaCBhbmQgYXNtLW1pcHMvbWlwcy1ib2FyZHMvc2ltaW50LmgsCisgKiBidXQgYXMgeWV0IHRoZXJlJ3Mgbm8gcHJvcGVybHkgb3JnYW5pemVkIGluY2x1ZGUgc3RydWN0dXJlIHRoYXQKKyAqIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0ICppbnQuaCBmaWxlIHdpbGwgYmUgaW5jbHVkZWQgZm9yIGEKKyAqIGdpdmVuIHBsYXRmb3JtIGJ1aWxkLgorICovCisKKyNkZWZpbmUgTUlQU0NQVV9JTlRfQkFTRQkxNgorCisjZGVmaW5lIE1JUFNfQ1BVX0lQSV9JUlEJMQorCisjZGVmaW5lIExPQ0tfTVRfUFJBKCkgXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorCW10ZmxhZ3MgPSBkbXQoKQorCisjZGVmaW5lIFVOTE9DS19NVF9QUkEoKSBcCisJZW10KG10ZmxhZ3MpOyBcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisKKyNkZWZpbmUgTE9DS19DT1JFX1BSQSgpIFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKwltdGZsYWdzID0gZHZwZSgpCisKKyNkZWZpbmUgVU5MT0NLX0NPUkVfUFJBKCkgXAorCWV2cGUobXRmbGFncyk7IFwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKKworLyoKKyAqIERhdGEgc3RydWN0dXJlcyBwdXJlbHkgYXNzb2NpYXRlZCB3aXRoIFNNVEMgcGFyYWxsZWxpc20KKyAqLworCisKKy8qCisgKiBUYWJsZSBmb3IgdHJhY2tpbmcgQVNJRHMgd2hvc2UgbGlmZXRpbWUgaXMgcHJvbG9uZ2VkLgorICovCisKK2FzaWR1c2Ugc210Y19saXZlX2FzaWRbTUFYX1NNVENfVExCU11bTUFYX1NNVENfQVNJRFNdOworCisvKgorICogQ2xvY2sgaW50ZXJydXB0ICJsYXRjaCIgYnVmZmVycywgcGVyICJDUFUiCisgKi8KKwordW5zaWduZWQgaW50IGlwaV90aW1lcl9sYXRjaFtOUl9DUFVTXTsKKworLyoKKyAqIE51bWJlciBvZiBJbnRlclByb2Nlc3NvciBJbnRlcnVwdCAoSVBJKSBtZXNzYWdlIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAqLworCisjZGVmaW5lIElQSUJVRl9QRVJfQ1BVIDQKKworc3RydWN0IHNtdGNfaXBpX3EgSVBJUVtOUl9DUFVTXTsKK3N0cnVjdCBzbXRjX2lwaV9xIGZyZWVJUElxOworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCisKK3ZvaWQgaXBpX2RlY29kZShzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3Qgc210Y19pcGkgKik7Cit2b2lkIHBvc3RfZGlyZWN0X2lwaShpbnQgY3B1LCBzdHJ1Y3Qgc210Y19pcGkgKnBpcGkpOwordm9pZCBzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cyh2b2lkKTsKK3ZvaWQgaW5pdF9zbXRjX3N0YXRzKHZvaWQpOworCisvKiBHbG9iYWwgU01UQyBTdGF0dXMgKi8KKwordW5zaWduZWQgaW50IHNtdGNfc3RhdHVzID0gMDsKKworLyogQm9vdCBjb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbiBvdmVycmlkZXMgKi8KKworc3RhdGljIGludCB2cGVsaW1pdCA9IDA7CitzdGF0aWMgaW50IHRjbGltaXQgPSAwOworc3RhdGljIGludCBpcGlidWZmZXJzID0gMDsKK3N0YXRpYyBpbnQgbm9zdGxiID0gMDsKK3N0YXRpYyBpbnQgYXNpZG1hc2sgPSAwOwordW5zaWduZWQgbG9uZyBzbXRjX2FzaWRfbWFzayA9IDB4ZmY7CisKK3N0YXRpYyBpbnQgX19pbml0IG1heHZwZXMoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJnZwZWxpbWl0KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWF4dGNzKGNoYXIgKnN0cikKK3sKKwlnZXRfb3B0aW9uKCZzdHIsICZ0Y2xpbWl0KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgaXBpYnVmcyhjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmaXBpYnVmZmVycyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHN0bGJfZGlzYWJsZShjaGFyICpzKQoreworCW5vc3RsYiA9IDE7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFzaWRtYXNrX3NldChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmYXNpZG1hc2spOworCXN3aXRjaChhc2lkbWFzaykgeworCWNhc2UgMHgxOgorCWNhc2UgMHgzOgorCWNhc2UgMHg3OgorCWNhc2UgMHhmOgorCWNhc2UgMHgxZjoKKwljYXNlIDB4M2Y6CisJY2FzZSAweDdmOgorCWNhc2UgMHhmZjoKKwkJc210Y19hc2lkX21hc2sgPSAodW5zaWduZWQgbG9uZylhc2lkbWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJJTExFR0FMIEFTSUQgbWFzayAweCV4IGZyb20gY29tbWFuZCBsaW5lXG4iLCBhc2lkbWFzayk7CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJtYXh2cGVzPSIsIG1heHZwZXMpOworX19zZXR1cCgibWF4dGNzPSIsIG1heHRjcyk7CitfX3NldHVwKCJpcGlidWZzPSIsIGlwaWJ1ZnMpOworX19zZXR1cCgibm9zdGxiIiwgc3RsYl9kaXNhYmxlKTsKK19fc2V0dXAoImFzaWRtYXNrPSIsIGFzaWRtYXNrX3NldCk7CisKKy8qIEVuYWJsZSBhZGRpdGlvbmFsIGRlYnVnIGNoZWNrcyBiZWZvcmUgZ29pbmcgaW50byBDUFUgaWRsZSBsb29wICovCisjZGVmaW5lIFNNVENfSURMRV9IT09LX0RFQlVHCisKKyNpZmRlZiBTTVRDX0lETEVfSE9PS19ERUJVRworCitzdGF0aWMgaW50IGhhbmdfdHJpZyA9IDA7CisKK3N0YXRpYyBpbnQgX19pbml0IGhhbmd0cmlnX2VuYWJsZShjaGFyICpzKQoreworCWhhbmdfdHJpZyA9IDE7CisJcmV0dXJuIDE7Cit9CisKKworX19zZXR1cCgiaGFuZ3RyaWciLCBoYW5ndHJpZ19lbmFibGUpOworCisjZGVmaW5lIERFRkFVTFRfQkxPQ0tFRF9JUElfTElNSVQgMzIKKworc3RhdGljIGludCB0aW1lcnFfbGltaXQgPSBERUZBVUxUX0JMT0NLRURfSVBJX0xJTUlUOworCitzdGF0aWMgaW50IF9faW5pdCB0aW50cShjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmdGltZXJxX2xpbWl0KTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgidGludHE9IiwgdGludHEpOworCitpbnQgaW1zdHVja2NvdW50WzJdWzhdOworLyogdnBlbWFzayByZXByZXNlbnRzIElNL0lFIGJpdHMgb2YgcGVyLVZQRSBTdGF0dXMgcmVnaXN0ZXJzLCBsb3ctdG8taGlnaCAqLworaW50IHZwZW1hc2tbMl1bOF0gPSB7ezAsMSwxLDAsMCwwLDAsMX0sezAsMSwwLDAsMCwwLDAsMX19OworaW50IHRjbm9wcm9nW05SX0NQVVNdOworc3RhdGljIGF0b21pY190IGlkbGVfaG9va19pbml0aWFsaXplZCA9IHswfTsKK3N0YXRpYyBpbnQgY2xvY2tfaGFuZ19yZXBvcnRlZFtOUl9DUFVTXTsKKworI2VuZGlmIC8qIFNNVENfSURMRV9IT09LX0RFQlVHICovCisKKy8qIEluaXRpYWxpemUgc2hhcmVkIFRMQiAtIHRoZSBzaG91bGQgcHJvYmFibHkgbWlncmF0ZSB0byBzbXRjX3NldHVwX2NwdXMoKSAqLworCit2b2lkIF9faW5pdCBzYW5pdGl6ZV90bGJfZW50cmllcyh2b2lkKQoreworCXByaW50aygiRGVwcmVjYXRlZCBzYW5pdGl6ZV90bGJfZW50cmllcygpIGludm9rZWRcbiIpOworfQorCisKKy8qCisgKiBDb25maWd1cmUgc2hhcmVkIFRMQiAtIFZQQyBjb25maWd1cmF0aW9uIGJpdCBtdXN0IGJlIHNldCBieSBjYWxsZXIKKyAqLworCit2b2lkIHNtdGNfY29uZmlndXJlX3RsYih2b2lkKQoreworCWludCBpLHRsYnNpeix2cGVzOworCXVuc2lnbmVkIGxvbmcgbXZwY29uZjA7CisJdW5zaWduZWQgbG9uZyBjb25maWcxdmFsOworCisJLyogU2V0IHVwIEFTSUQgcHJlc2VydmF0aW9uIHRhYmxlICovCisJZm9yICh2cGVzPTA7IHZwZXM8TUFYX1NNVENfVExCUzsgdnBlcysrKSB7CisJICAgIGZvcihpID0gMDsgaSA8IE1BWF9TTVRDX0FTSURTOyBpKyspIHsKKwkJc210Y19saXZlX2FzaWRbdnBlc11baV0gPSAwOworCSAgICB9CisJfQorCW12cGNvbmYwID0gcmVhZF9jMF9tdnBjb25mMCgpOworCisJaWYgKCh2cGVzID0gKChtdnBjb25mMCAmIE1WUENPTkYwX1BWUEUpCisJCQk+PiBNVlBDT05GMF9QVlBFX1NISUZUKSArIDEpID4gMSkgeworCSAgICAvKiBJZiB3ZSBoYXZlIG11bHRpcGxlIFZQRXMsIHRyeSB0byBzaGFyZSB0aGUgVExCICovCisJICAgIGlmICgobXZwY29uZjAgJiBNVlBDT05GMF9UTEJTKSAmJiAhbm9zdGxiKSB7CisJCS8qCisJCSAqIElmIFRMQiBzaXppbmcgaXMgcHJvZ3JhbW1hYmxlLCBzaGFyZWQgVExCCisJCSAqIHNpemUgaXMgdGhlIHRvdGFsIGF2YWlsYWJsZSBjb21wbGVtZW50LgorCQkgKiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gdGFrZSB0aGUgc3VtIG9mIGFsbAorCQkgKiBzdGF0aWMgVlBFIFRMQiBlbnRyaWVzLgorCQkgKi8KKwkJaWYgKCh0bGJzaXogPSAoKG12cGNvbmYwICYgTVZQQ09ORjBfUFRMQkUpCisJCQkJPj4gTVZQQ09ORjBfUFRMQkVfU0hJRlQpKSA9PSAwKSB7CisJCSAgICAvKgorCQkgICAgICogSWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIFZQRSwgdGhlcmUgaGFkIGJldHRlcgorCQkgICAgICogYmUgbW9yZSB0aGFuIG9uZSBUQywgYmVjYXVzZSB3ZSBuZWVkIG9uZSB0byBiaW5kCisJCSAgICAgKiB0byBlYWNoIFZQRSBpbiB0dXJuIHRvIGJlIGFibGUgdG8gcmVhZAorCQkgICAgICogaXRzIGNvbmZpZ3VyYXRpb24gc3RhdGUhCisJCSAgICAgKi8KKwkJICAgIHNldHRjKDEpOworCQkgICAgLyogU3RvcCB0aGUgVEMgZnJvbSBkb2luZyBhbnl0aGluZyBmb29saXNoICovCisJCSAgICB3cml0ZV90Y19jMF90Y2hhbHQoVENIQUxUX0gpOworCQkgICAgbWlwc19paGIoKTsKKwkJICAgIC8qIE5vIG5lZWQgdG8gdW4tSGFsdCAtIHRoYXQgaGFwcGVucyBsYXRlciBhbnl3YXkgKi8KKwkJICAgIGZvciAoaT0wOyBpIDwgdnBlczsgaSsrKSB7CisJCSAgICAJd3JpdGVfdGNfYzBfdGNiaW5kKGkpOworCQkJLyoKKwkJCSAqIFRvIGJlIDEwMCUgc3VyZSB3ZSdyZSByZWFsbHkgZ2V0dGluZyB0aGUgcmlnaHQKKwkJCSAqIGluZm9ybWF0aW9uLCB3ZSBleGl0IHRoZSBjb25maWd1cmF0aW9uIHN0YXRlCisJCQkgKiBhbmQgZG8gYW4gSUhCIGFmdGVyIGVhY2ggcmViaW5kaW5nLgorCQkJICovCisJCQl3cml0ZV9jMF9tdnBjb250cm9sKAorCQkJCXJlYWRfYzBfbXZwY29udHJvbCgpICYgfiBNVlBDT05UUk9MX1ZQQyApOworCQkJbWlwc19paGIoKTsKKwkJCS8qCisJCQkgKiBPbmx5IGNvdW50IGlmIHRoZSBNTVUgVHlwZSBpbmRpY2F0ZWQgaXMgVExCCisJCQkgKi8KKwkJCWlmKCgocmVhZF92cGVfYzBfY29uZmlnKCkgJiBNSVBTX0NPTkZfTVQpID4+IDcpID09IDEpIHsKKwkJCQljb25maWcxdmFsID0gcmVhZF92cGVfYzBfY29uZmlnMSgpOworCQkJCXRsYnNpeiArPSAoKGNvbmZpZzF2YWwgPj4gMjUpICYgMHgzZikgKyAxOworCQkJfQorCisJCQkvKiBQdXQgY29yZSBiYWNrIGluIGNvbmZpZ3VyYXRpb24gc3RhdGUgKi8KKwkJCXdyaXRlX2MwX212cGNvbnRyb2woCisJCQkJcmVhZF9jMF9tdnBjb250cm9sKCkgfCBNVlBDT05UUk9MX1ZQQyApOworCQkJbWlwc19paGIoKTsKKwkJICAgIH0KKwkJfQorCQl3cml0ZV9jMF9tdnBjb250cm9sKHJlYWRfYzBfbXZwY29udHJvbCgpIHwgTVZQQ09OVFJPTF9TVExCKTsKKworCQkvKgorCQkgKiBTZXR1cCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZSBzb2Z0d2FyZSB0b3RhbCwKKwkJICogcmF0aGVyIHRoYW4gcmVhZCB0aGUgcGVyLVZQRSBDb25maWcxIHZhbHVlLiBUaGUgdmFsdWVzCisJCSAqIGZvciAiQ1BVIDAiIGdldHMgY29waWVkIHRvIGFsbCB0aGUgb3RoZXIgQ1BVcyBhcyBwYXJ0CisJCSAqIG9mIHRoZWlyIGluaXRpYWxpemF0aW9uIGluIHNtdGNfY3B1X3NldHVwKCkuCisJCSAqLworCisJCXRsYnNpeiA9IHRsYnNpeiAmIDB4M2Y7CS8qIE1JUFMzMiBsaW1pdHMgVExCIGluZGljZXMgdG8gNjQgKi8KKwkJY3B1X2RhdGFbMF0udGxic2l6ZSA9IHRsYnNpejsKKwkJc210Y19zdGF0dXMgfD0gU01UQ19UTEJfU0hBUkVEOworCisJCXByaW50aygiVExCIG9mICVkIGVudHJ5IHBhaXJzIHNoYXJlZCBieSAlZCBWUEVzXG4iLAorCQkJdGxic2l6LCB2cGVzKTsKKwkgICAgfSBlbHNlIHsKKwkJcHJpbnRrKCJXQVJOSU5HOiBUTEIgTm90IFNoYXJhYmxlIG9uIFNNVEMgQm9vdCFcbiIpOworCSAgICB9CisJfQorfQorCisKKy8qCisgKiBJbmNyZW1lbnRhbGx5IGJ1aWxkIHRoZSBDUFUgbWFwIG91dCBvZiBjb25zdGl0dWVudCBNSVBTIE1UIGNvcmVzLAorICogdXNpbmcgdGhlIHNwZWNpZmllZCBhdmFpbGFibGUgVlBFcyBhbmQgVENzLiAgUGxhZm9ybSBjb2RlIG5lZWRzCisgKiB0byBlbnN1cmUgdGhhdCBlYWNoIE1JUFMgTVQgY29yZSBpbnZva2VzIHRoaXMgcm91dGluZSBvbiByZXNldCwKKyAqIG9uZSBhdCBhIHRpbWUoISkuCisgKgorICogVGhpcyB2ZXJzaW9uIG9mIHRoZSBidWlsZF9jcHVfbWFwIGFuZCBwcmVwYXJlX2NwdXMgcm91dGluZXMgYXNzdW1lcworICogdGhhdCAqYWxsKiBUQ3Mgb2YgYSBNSVBTIE1UIGNvcmUgd2lsbCBiZSB1c2VkIGZvciBMaW51eCwgYW5kIHRoYXQKKyAqIHRoZXkgd2lsbCBiZSBzcHJlYWQgYWNyb3NzICphbGwqIGF2YWlsYWJsZSBWUEVzICh0byBtaW5pbWlzZSB0aGUKKyAqIGxvc3Mgb2YgZWZmaWNpZW5jeSBkdWUgdG8gZXhjZXB0aW9uIHNlcnZpY2Ugc2VyaWFsaXphdGlvbikuCisgKiBBbiBpbXByb3ZlZCB2ZXJzaW9uIHdvdWxkIHBpY2sgdXAgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQKKyAqIHBvc3NpYmx5IGxlYXZlIHNvbWUgVENzL1ZQRXMgYXMgInNsYXZlIiBwcm9jZXNzb3JzLgorICoKKyAqIFVzZSBjMF9NVlBDb25mMCB0byBmaW5kIG91dCBob3cgbWFueSBUQ3MgYXJlIGF2YWlsYWJsZSwgc2V0dGluZyB1cAorICogcGh5c19jcHVfcHJlc2VudF9tYXAgYW5kIHRoZSBsb2dpY2FsL3BoeXNpY2FsIG1hcHBpbmdzLgorICovCisKK2ludCBfX2luaXQgbWlwc210X2J1aWxkX2NwdV9tYXAoaW50IHN0YXJ0X2NwdV9zbG90KQoreworCWludCBpLCBudGNzOworCisJLyoKKwkgKiBUaGUgQ1BVIG1hcCBpc24ndCBhY3R1YWxseSB1c2VkIGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LAorCSAqIHNvIGl0J3Mgbm90IGNsZWFyIHdoYXQgZWxzZSB3ZSBzaG91bGQgZG8gYXBhcnQgZnJvbSBzZXQKKwkgKiBldmVyeXRoaW5nIHVwIHNvIHRoYXQgImxvZ2ljYWwiID0gInBoeXNpY2FsIi4KKwkgKi8KKwludGNzID0gKChyZWFkX2MwX212cGNvbmYwKCkgJiBNVlBDT05GMF9QVEMpID4+IE1WUENPTkYwX1BUQ19TSElGVCkgKyAxOworCWZvciAoaT1zdGFydF9jcHVfc2xvdDsgaTxOUl9DUFVTICYmIGk8bnRjczsgaSsrKSB7CisJCWNwdV9zZXQoaSwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCQlfX2NwdV9udW1iZXJfbWFwW2ldID0gaTsKKwkJX19jcHVfbG9naWNhbF9tYXBbaV0gPSBpOworCX0KKwkvKiBJbml0aWFsaXplIG1hcCBvZiBDUFVzIHdpdGggRlBVcyAqLworCWNwdXNfY2xlYXIobXRfZnB1X2NwdW1hc2spOworCisJLyogT25lIG9mIHRob3NlIFRDJ3MgaXMgdGhlIG9uZSBib290aW5nLCBhbmQgbm90IGEgc2Vjb25kYXJ5Li4uICovCisJcHJpbnRrKCIlaSBhdmFpbGFibGUgc2Vjb25kYXJ5IENQVSBUQyhzKVxuIiwgaSAtIDEpOworCisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiBDb21tb24gc2V0dXAgYmVmb3JlIGFueSBzZWNvbmRhcmllcyBhcmUgc3RhcnRlZAorICogTWFrZSBzdXJlIGFsbCBDUFUncyBhcmUgaW4gYSBzZW5zaWJsZSBzdGF0ZSBiZWZvcmUgd2UgYm9vdCBhbnkgb2YgdGhlCisgKiBzZWNvbmRhcmllcy4KKyAqCisgKiBGb3IgTUlQUyBNVCAiU01UQyIgb3BlcmF0aW9uLCB3ZSBzZXQgdXAgYWxsIFRDcywgc3ByZWFkIGFzIGV2ZW5seQorICogYXMgcG9zc2libGUgYWNyb3NzIHRoZSBhdmFpbGFibGUgVlBFcy4KKyAqLworCitzdGF0aWMgdm9pZCBzbXRjX3RjX3NldHVwKGludCB2cGUsIGludCB0YywgaW50IGNwdSkKK3sKKwlzZXR0Yyh0Yyk7CisJd3JpdGVfdGNfYzBfdGNoYWx0KFRDSEFMVF9IKTsKKwltaXBzX2loYigpOworCXdyaXRlX3RjX2MwX3Rjc3RhdHVzKChyZWFkX3RjX2MwX3Rjc3RhdHVzKCkKKwkJCSYgfihUQ1NUQVRVU19US1NVIHwgVENTVEFUVVNfREEgfCBUQ1NUQVRVU19JWE1UKSkKKwkJCXwgVENTVEFUVVNfQSk7CisJd3JpdGVfdGNfYzBfdGNjb250ZXh0KDApOworCS8qIEJpbmQgdGMgdG8gdnBlICovCisJd3JpdGVfdGNfYzBfdGNiaW5kKHZwZSk7CisJLyogSW4gZ2VuZXJhbCwgYWxsIFRDcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjcHVfZGF0YSBpbmRpY2F0aW9ucyAqLworCW1lbWNweSgmY3B1X2RhdGFbY3B1XSwgJmNwdV9kYXRhWzBdLCBzaXplb2Yoc3RydWN0IGNwdWluZm9fbWlwcykpOworCS8qIEZvciAzNEtmLCBzdGFydCB3aXRoIFRDL0NQVSAwIGFzIHNvbGUgb3duZXIgb2Ygc2luZ2xlIEZQVSBjb250ZXh0ICovCisJaWYgKGNwdV9kYXRhWzBdLmNwdXR5cGUgPT0gQ1BVXzM0SykKKwkJY3B1X2RhdGFbY3B1XS5vcHRpb25zICY9IH5NSVBTX0NQVV9GUFU7CisJY3B1X2RhdGFbY3B1XS52cGVfaWQgPSB2cGU7CisJY3B1X2RhdGFbY3B1XS50Y19pZCA9IHRjOworfQorCisKK3ZvaWQgbWlwc210X3ByZXBhcmVfY3B1cyh2b2lkKQoreworCWludCBpLCB2cGUsIHRjLCBudGMsIG52cGUsIHRjcGVydnBlLCBzbG9wLCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgbmlwaTsKKwlzdHJ1Y3Qgc210Y19pcGkgKnBpcGk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgc28gd2UgY2FuIGRpc2FibGUgTVQgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJLyogZGlzYWJsZSBNVCBzbyB3ZSBjYW4gY29uZmlndXJlICovCisJZHZwZSgpOworCWRtdCgpOworCisJZnJlZUlQSXEubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworCS8qCisJICogV2UgcHJvYmFibHkgZG9uJ3QgaGF2ZSBhcyBtYW55IFZQRXMgYXMgd2UgZG8gU01QICJDUFVzIiwKKwkgKiBidXQgaXQncyBwb3NzaWJsZSAtIGFuZCBpbiBhbnkgY2FzZSB3ZSdsbCBuZXZlciB1c2UgbW9yZSEKKwkgKi8KKwlmb3IgKGk9MDsgaTxOUl9DUFVTOyBpKyspIHsKKwkJSVBJUVtpXS5oZWFkID0gSVBJUVtpXS50YWlsID0gTlVMTDsKKwkJSVBJUVtpXS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCQlJUElRW2ldLmRlcHRoID0gMDsKKwkJaXBpX3RpbWVyX2xhdGNoW2ldID0gMDsKKwl9CisKKwkvKiBjcHVfZGF0YSBpbmRleCBzdGFydHMgYXQgemVybyAqLworCWNwdSA9IDA7CisJY3B1X2RhdGFbY3B1XS52cGVfaWQgPSAwOworCWNwdV9kYXRhW2NwdV0udGNfaWQgPSAwOworCWNwdSsrOworCisJLyogUmVwb3J0IG9uIGJvb3QtdGltZSBvcHRpb25zICovCisJbWlwc19tdF9zZXRfY3B1b3B0aW9ucyAoKTsKKwlpZiAodnBlbGltaXQgPiAwKQorCQlwcmludGsoIkxpbWl0IG9mICVkIFZQRXMgc2V0XG4iLCB2cGVsaW1pdCk7CisJaWYgKHRjbGltaXQgPiAwKQorCQlwcmludGsoIkxpbWl0IG9mICVkIFRDcyBzZXRcbiIsIHRjbGltaXQpOworCWlmIChub3N0bGIpIHsKKwkJcHJpbnRrKCJTaGFyZWQgVExCIFVzZSBJbmhpYml0ZWQgLSBVTlNBRkUgZm9yIE11bHRpLVZQRSBPcGVyYXRpb25cbiIpOworCX0KKwlpZiAoYXNpZG1hc2spCisJCXByaW50aygiQVNJRCBtYXNrIHZhbHVlIG92ZXJyaWRlIHRvIDB4JXhcbiIsIGFzaWRtYXNrKTsKKworCS8qIFRlbXBvcmFyeSAqLworI2lmZGVmIFNNVENfSURMRV9IT09LX0RFQlVHCisJaWYgKGhhbmdfdHJpZykKKwkJcHJpbnRrKCJMb2dpYyBBbmFseXNlciBUcmlnZ2VyIG9uIHN1c3BlY3RlZCBUQyBoYW5nXG4iKTsKKyNlbmRpZiAvKiBTTVRDX0lETEVfSE9PS19ERUJVRyAqLworCisJLyogUHV0IE1WUEUncyBpbnRvICdjb25maWd1cmF0aW9uIHN0YXRlJyAqLworCXdyaXRlX2MwX212cGNvbnRyb2woIHJlYWRfYzBfbXZwY29udHJvbCgpIHwgTVZQQ09OVFJPTF9WUEMgKTsKKworCXZhbCA9IHJlYWRfYzBfbXZwY29uZjAoKTsKKwludnBlID0gKCh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSArIDE7CisJaWYgKHZwZWxpbWl0ID4gMCAmJiBudnBlID4gdnBlbGltaXQpCisJCW52cGUgPSB2cGVsaW1pdDsKKwludGMgPSAoKHZhbCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDE7CisJaWYgKG50YyA+IE5SX0NQVVMpCisJCW50YyA9IE5SX0NQVVM7CisJaWYgKHRjbGltaXQgPiAwICYmIG50YyA+IHRjbGltaXQpCisJCW50YyA9IHRjbGltaXQ7CisJdGNwZXJ2cGUgPSBudGMgLyBudnBlOworCXNsb3AgPSBudGMgJSBudnBlOwkvKiBSZXNpZHVhbCBUQ3MsIDwgTlZQRSAqLworCisJLyogU2V0IHVwIHNoYXJlZCBUTEIgKi8KKwlzbXRjX2NvbmZpZ3VyZV90bGIoKTsKKworCWZvciAodGMgPSAwLCB2cGUgPSAwIDsgKHZwZSA8IG52cGUpICYmICh0YyA8IG50YykgOyB2cGUrKykgeworCQkvKgorCQkgKiBTZXQgdGhlIE1WUCBiaXRzLgorCQkgKi8KKwkJc2V0dGModGMpOworCQl3cml0ZV92cGVfYzBfdnBlY29uZjAocmVhZF92cGVfYzBfdnBlY29uZjAoKSB8IFZQRUNPTkYwX01WUCk7CisJCWlmICh2cGUgIT0gMCkKKwkJCXByaW50aygiLCAiKTsKKwkJcHJpbnRrKCJWUEUgJWQ6IFRDIiwgdnBlKTsKKwkJZm9yIChpID0gMDsgaSA8IHRjcGVydnBlOyBpKyspIHsKKwkJCS8qCisJCQkgKiBUQyAwIGlzIGJvdW5kIHRvIFZQRSAwIGF0IHJlc2V0LAorCQkJICogYW5kIGlzIHByZXN1bWFibHkgZXhlY3V0aW5nIHRoaXMKKwkJCSAqIGNvZGUuICBMZWF2ZSBpdCBhbG9uZSEKKwkJCSAqLworCQkJaWYgKHRjICE9IDApIHsKKwkJCQlzbXRjX3RjX3NldHVwKHZwZSx0YywgY3B1KTsKKwkJCQljcHUrKzsKKwkJCX0KKwkJCXByaW50aygiICVkIiwgdGMpOworCQkJdGMrKzsKKwkJfQorCQlpZiAoc2xvcCkgeworCQkJaWYgKHRjICE9IDApIHsKKwkJCQlzbXRjX3RjX3NldHVwKHZwZSx0YywgY3B1KTsKKwkJCQljcHUrKzsKKwkJCX0KKwkJCXByaW50aygiICVkIiwgdGMpOworCQkJdGMrKzsKKwkJCXNsb3AtLTsKKwkJfQorCQlpZiAodnBlICE9IDApIHsKKwkJCS8qCisJCQkgKiBDbGVhciBhbnkgc3RhbGUgc29mdHdhcmUgaW50ZXJydXB0cyBmcm9tIFZQRSdzIENhdXNlCisJCQkgKi8KKwkJCXdyaXRlX3ZwZV9jMF9jYXVzZSgwKTsKKworCQkJLyoKKwkJCSAqIENsZWFyIEVSTC9FWEwgb2YgVlBFcyBvdGhlciB0aGFuIDAKKwkJCSAqIGFuZCBzZXQgcmVzdHJpY3RlZCBpbnRlcnJ1cHQgZW5hYmxlL21hc2suCisJCQkgKi8KKwkJCXdyaXRlX3ZwZV9jMF9zdGF0dXMoKHJlYWRfdnBlX2MwX3N0YXR1cygpCisJCQkJJiB+KFNUMF9CRVYgfCBTVDBfRVJMIHwgU1QwX0VYTCB8IFNUMF9JTSkpCisJCQkJfCAoU1RBVFVTRl9JUDAgfCBTVEFUVVNGX0lQMSB8IFNUQVRVU0ZfSVA3CisJCQkJfCBTVDBfSUUpKTsKKwkJCS8qCisJCQkgKiBzZXQgY29uZmlnIHRvIGJlIHRoZSBzYW1lIGFzIHZwZTAsCisJCQkgKiAgcGFydGljdWxhcmx5IGtzZWcwIGNvaGVyZW5jeSBhbGcKKwkJCSAqLworCQkJd3JpdGVfdnBlX2MwX2NvbmZpZyhyZWFkX2MwX2NvbmZpZygpKTsKKwkJCS8qIENsZWFyIGFueSBwZW5kaW5nIHRpbWVyIGludGVycnVwdCAqLworCQkJd3JpdGVfdnBlX2MwX2NvbXBhcmUoMCk7CisJCQkvKiBQcm9wYWdhdGUgQ29uZmlnNyAqLworCQkJd3JpdGVfdnBlX2MwX2NvbmZpZzcocmVhZF9jMF9jb25maWc3KCkpOworCQl9CisJCS8qIGVuYWJsZSBtdWx0aS10aHJlYWRpbmcgd2l0aGluIFZQRSAqLworCQl3cml0ZV92cGVfYzBfdnBlY29udHJvbChyZWFkX3ZwZV9jMF92cGVjb250cm9sKCkgfCBWUEVDT05UUk9MX1RFKTsKKwkJLyogZW5hYmxlIHRoZSBWUEUgKi8KKwkJd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkgfCBWUEVDT05GMF9WUEEpOworCX0KKworCS8qCisJICogUHVsbCBhbnkgcGh5c2ljYWxseSBwcmVzZW50IGJ1dCB1bnVzZWQgVENzIG91dCBvZiBjaXJjdWxhdGlvbi4KKwkgKi8KKwl3aGlsZSAodGMgPCAoKCh2YWwgJiBNVlBDT05GMF9QVEMpID4+IE1WUENPTkYwX1BUQ19TSElGVCkgKyAxKSkgeworCQljcHVfY2xlYXIodGMsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwkJY3B1X2NsZWFyKHRjLCBjcHVfcHJlc2VudF9tYXApOworCQl0YysrOworCX0KKworCS8qIHJlbGVhc2UgY29uZmlnIHN0YXRlICovCisJd3JpdGVfYzBfbXZwY29udHJvbCggcmVhZF9jMF9tdnBjb250cm9sKCkgJiB+IE1WUENPTlRST0xfVlBDICk7CisKKwlwcmludGsoIlxuIik7CisKKwkvKiBTZXQgdXAgY29wcm9jZXNzb3IgYWZmaW5pdHkgQ1BVIG1hc2socykgKi8KKworCWZvciAodGMgPSAwOyB0YyA8IG50YzsgdGMrKykgeworCQlpZihjcHVfZGF0YVt0Y10ub3B0aW9ucyAmIE1JUFNfQ1BVX0ZQVSkKKwkJCWNwdV9zZXQodGMsIG10X2ZwdV9jcHVtYXNrKTsKKwl9CisKKwkvKiBzZXQgdXAgaXBpIGludGVycnVwdHMuLi4gKi8KKworCS8qIElmIHdlIGhhdmUgbXVsdGlwbGUgVlBFcyBydW5uaW5nLCBzZXQgdXAgdGhlIGNyb3NzLVZQRSBpbnRlcnJ1cHQgKi8KKworCWlmIChudnBlID4gMSkKKwkJc2V0dXBfY3Jvc3NfdnBlX2ludGVycnVwdHMoKTsKKworCS8qIFNldCB1cCBxdWV1ZSBvZiBmcmVlIElQSSAibWVzc2FnZXMiLiAqLworCW5pcGkgPSBOUl9DUFVTICogSVBJQlVGX1BFUl9DUFU7CisJaWYgKGlwaWJ1ZmZlcnMgPiAwKQorCQluaXBpID0gaXBpYnVmZmVyczsKKworCXBpcGkgPSBrbWFsbG9jKG5pcGkgKnNpemVvZihzdHJ1Y3Qgc210Y19pcGkpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGlwaSA9PSBOVUxMKQorCQlwYW5pYygia21hbGxvYyBvZiBJUEkgbWVzc2FnZSBidWZmZXJzIGZhaWxlZFxuIik7CisJZWxzZQorCQlwcmludGsoIklQSSBidWZmZXIgcG9vbCBvZiAlZCBidWZmZXJzXG4iLCBuaXBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmlwaTsgaSsrKSB7CisJCXNtdGNfaXBpX25xKCZmcmVlSVBJcSwgcGlwaSk7CisJCXBpcGkrKzsKKwl9CisKKwkvKiBBcm0gbXVsdGl0aHJlYWRpbmcgYW5kIGVuYWJsZSBvdGhlciBWUEVzIC0gYnV0IGFsbCBUQ3MgYXJlIEhhbHRlZCAqLworCWVtdChFTVRfRU5BQkxFKTsKKwlldnBlKEVWUEVfRU5BQkxFKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJLyogSW5pdGlhbGl6ZSBTTVRDIC9wcm9jIHN0YXRpc3RpY3MvZGlhZ25vc3RpY3MgKi8KKwlpbml0X3NtdGNfc3RhdHMoKTsKK30KKworCisvKgorICogU2V0dXAgdGhlIFBDLCBTUCwgYW5kIEdQIG9mIGEgc2Vjb25kYXJ5IHByb2Nlc3NvciBhbmQgc3RhcnQgaXQKKyAqIHJ1bm5pbmchCisgKiBzbXBfYm9vdHN0cmFwIGlzIHRoZSBwbGFjZSB0byByZXN1bWUgZnJvbQorICogX19LU1RLX1RPUyhpZGxlKSBpcyBhcHBhcmVudGx5IHRoZSBzdGFjayBwb2ludGVyCisgKiAodW5zaWduZWQgbG9uZylpZGxlLT50aHJlYWRfaW5mbyB0aGUgZ3AKKyAqCisgKi8KK3ZvaWQgc210Y19ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJZXh0ZXJuIHUzMiBrZXJuZWxzcFtOUl9DUFVTXTsKKwlsb25nIGZsYWdzOworCWludCBtdGZsYWdzOworCisJTE9DS19NVF9QUkEoKTsKKwlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgIT0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS52cGVfaWQpIHsKKwkJZHZwZSgpOworCX0KKwlzZXR0YyhjcHVfZGF0YVtjcHVdLnRjX2lkKTsKKworCS8qIHBjICovCisJd3JpdGVfdGNfYzBfdGNyZXN0YXJ0KCh1bnNpZ25lZCBsb25nKSZzbXBfYm9vdHN0cmFwKTsKKworCS8qIHN0YWNrIHBvaW50ZXIgKi8KKwlrZXJuZWxzcFtjcHVdID0gX19LU1RLX1RPUyhpZGxlKTsKKwl3cml0ZV90Y19ncHJfc3AoX19LU1RLX1RPUyhpZGxlKSk7CisKKwkvKiBnbG9iYWwgcG9pbnRlciAqLworCXdyaXRlX3RjX2dwcl9ncCgodW5zaWduZWQgbG9uZylpZGxlLT50aHJlYWRfaW5mbyk7CisKKwlzbXRjX3N0YXR1cyB8PSBTTVRDX01UQ19BQ1RJVkU7CisJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZCkgeworCQlldnBlKEVWUEVfRU5BQkxFKTsKKwl9CisJVU5MT0NLX01UX1BSQSgpOworfQorCit2b2lkIHNtdGNfaW5pdF9zZWNvbmRhcnkodm9pZCkKK3sKKwkvKgorCSAqIFN0YXJ0IHRpbWVyIG9uIHNlY29uZGFyeSBWUEVzIGlmIG5lY2Vzc2FyeS4KKwkgKiBtaXBzX3RpbWVyX3NldHVwIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBpbnZva2VkIGJ5IGluaXQvbWFpbgorCSAqIG9uICJib290IiBUQy4gIExpa2UgcGVyX2NwdV90cmFwX2luaXQoKSBoYWNrLCB0aGlzIGFzc3VtZXMgdGhhdAorCSAqIFNNVEMgaW5pdCBjb2RlIGFzc2lnbnMgVENzIGNvbnNkZWN1dGl2ZWx5IGFuZCBpbiBhc2NlbmRpbmcgb3JkZXIKKwkgKiB0byBhY3Jvc3MgYXZhaWxhYmxlIFZQRXMuCisJICovCisJaWYoKChyZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlRDKSAhPSAwKQorCSYmICgocmVhZF9jMF90Y2JpbmQoKSAmIFRDQklORF9DVVJWUEUpCisJICAgICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKSAtIDFdLnZwZV9pZCkpeworCQl3cml0ZV9jMF9jb21wYXJlIChyZWFkX2MwX2NvdW50KCkgKyBtaXBzX2hwdF9mcmVxdWVuY3kvSFopOworCX0KKworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKwordm9pZCBzbXRjX3NtcF9maW5pc2godm9pZCkKK3sKKwlwcmludGsoIlRDICVkIGdvaW5nIG9uLWxpbmUgYXMgQ1BVICVkXG4iLAorCQljcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnRjX2lkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCit2b2lkIHNtdGNfY3B1c19kb25lKHZvaWQpCit7Cit9CisKKy8qCisgKiBTdXBwb3J0IGZvciBTTVRDLW9wdGltaXplZCBkcml2ZXIgSVJRIHJlZ2lzdHJhdGlvbgorICovCisKKy8qCisgKiBTTVRDIEtlcm5lbCBuZWVkcyB0byBtYW5pcHVsYXRlIGxvdy1sZXZlbCBDUFUgaW50ZXJydXB0IG1hc2sKKyAqIGluIGRvX0lSUS4gVGhlc2UgYXJlIHBhc3NlZCBpbiBzZXR1cF9pcnFfc210YygpIGFuZCBzdG9yZWQKKyAqIGluIHRoaXMgdGFibGUuCisgKi8KKworaW50IHNldHVwX2lycV9zbXRjKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKiBuZXcsCisJCQl1bnNpZ25lZCBsb25nIGh3bWFzaykKK3sKKwlpcnFfaHdtYXNrW2lycV0gPSBod21hc2s7CisKKwlyZXR1cm4gc2V0dXBfaXJxKGlycSwgbmV3KTsKK30KKworLyoKKyAqIElQSSBtb2RlbCBmb3IgU01UQyBpcyB0cmlja3ksIGJlY2F1c2UgaW50ZXJydXB0cyBhcmVuJ3QgVEMtc3BlY2lmaWMuCisgKiBXaXRoaW4gYSBWUEUgb25lIFRDIGNhbiBpbnRlcnJ1cHQgYW5vdGhlciBieSBkaWZmZXJlbnQgYXBwcm9hY2hlcy4KKyAqIFRoZSBlYXNpZXN0IHRvIGdldCByaWdodCB3b3VsZCBwcm9iYWJseSBiZSB0byBtYWtlIGFsbCBUQ3MgZXhjZXB0CisgKiB0aGUgdGFyZ2V0IElYTVQgYW5kIHNldCBhIHNvZnR3YXJlIGludGVycnVwdCwgYnV0IGFuIElYTVQtYmFzZWQKKyAqIHNjaGVtZSByZXF1aXJlcyB0aGF0IGEgaGFuZGxlciBtdXN0IHJ1biBiZWZvcmUgYSBuZXcgSVBJIGNvdWxkCisgKiBiZSBzZW50LCB3aGljaCB3b3VsZCBicmVhayB0aGUgImJyb2FkY2FzdCIgbG9vcHMgaW4gTUlQUyBNVC4KKyAqIEEgbW9yZSBnb256byBhcHByb2FjaCB3aXRoaW4gYSBWUEUgaXMgdG8gaGFsdCB0aGUgVEMsIGV4dHJhY3QKKyAqIGl0cyBSZXN0YXJ0LCBTdGF0dXMsIGFuZCBhIGNvdXBsZSBvZiBHUFJzLCBhbmQgcHJvZ3JhbSB0aGUgUmVzdGFydAorICogYWRkcmVzcyB0byBlbXVsYXRlIGFuIGludGVycnVwdC4KKyAqCisgKiBXaXRoaW4gYSBWUEUsIG9uZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlIHRhcmdldCBUQyBpc24ndCBpbgorICogYSBjcml0aWNhbCBFWEwgc3RhdGUgd2hlbiBoYWx0ZWQsIHNpbmNlIHRoZSB3cml0ZSB0byB0aGUgSGFsdAorICogcmVnaXN0ZXIgY291bGQgbm90IGhhdmUgaXNzdWVkIG9uIHRoZSB3cml0aW5nIHRocmVhZCBpZiB0aGUKKyAqIGhhbHRpbmcgdGhyZWFkIGhhZCBFWEwgc2V0LiBTbyBrMCBhbmQgazEgb2YgdGhlIHRhcmdldCBUQworICogY2FuIGJlIHVzZWQgYnkgdGhlIGluamVjdGlvbiBjb2RlLiAgQWNyb3NzIFZQRXMsIG9uZSBjYW4ndAorICogYmUgY2VydGFpbiB0aGF0IHRoZSB0YXJnZXQgVEMgaXNuJ3QgaW4gYSBjcml0aWNhbCBleGNlcHRpb24KKyAqIHN0YXRlLiBTbyB3ZSB0cnkgYSB0d28tc3RlcCBwcm9jZXNzIG9mIHNlbmRpbmcgYSBzb2Z0d2FyZQorICogaW50ZXJydXB0IHRvIHRoZSB0YXJnZXQgVlBFLCB3aGljaCBlaXRoZXIgaGFuZGxlcyB0aGUgZXZlbnQKKyAqIGl0c2VsZiAoaWYgaXQgd2FzIHRoZSB0YXJnZXQpIG9yIGluamVjdHMgdGhlIGV2ZW50IHdpdGhpbgorICogdGhlIFZQRS4KKyAqLworCit2b2lkIHNtdGNfaXBpX3FkdW1wKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUyA7aSsrKSB7CisJCXByaW50aygiSVBJUVslZF06IGhlYWQgPSAweCV4LCB0YWlsID0gMHgleCwgZGVwdGggPSAlZFxuIiwKKwkJCWksICh1bnNpZ25lZClJUElRW2ldLmhlYWQsICh1bnNpZ25lZClJUElRW2ldLnRhaWwsCisJCQlJUElRW2ldLmRlcHRoKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgc3RhbmRhcmQgYXRvbWljLmggcHJpbWl0aXZlcyBkb24ndCBxdWl0ZSBkbyB3aGF0IHdlIHdhbnQKKyAqIGhlcmU6IFdlIG5lZWQgYW4gYXRvbWljIGFkZC1hbmQtcmV0dXJuLXByZXZpb3VzLXZhbHVlICh3aGljaAorICogY291bGQgYmUgZG9uZSB3aXRoIGF0b21pY19hZGRfcmV0dXJuIGFuZCBhIGRlY3JlbWVudCkgYW5kIGFuCisgKiBhdG9taWMgc2V0L3plcm8tYW5kLXJldHVybi1wcmV2aW91cy12YWx1ZSAod2hpY2ggY2FuJ3QgcmVhbGx5CisgKiBiZSBkb25lIHdpdGggdGhlIGF0b21pYy5oIHByaW1pdGl2ZXMpLiBBbmQgc2luY2UgdGhpcyBpcworICogTUlQUyBNVCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmUgTEwvU0MuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfcG9zdGluY3JlbWVudCh1bnNpZ25lZCBpbnQgKnB2KQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxsCSUwLCAlMgkJCQkJXG4iCisJIglhZGR1CSUxLCAlMCwgMQkJCQlcbiIKKwkiCXNjCSUxLCAlMgkJCQkJXG4iCisJIgliZXF6CSUxLCAxYgkJCQkJXG4iCisJIglzeW5jCQkJCQkJXG4iCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iICgqcHYpCisJOiAibSIgKCpwdikKKwk6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIE5vIGxvbmdlciB1c2VkIGluIElQSSBkaXNwYXRjaCwgYnV0IHJldGFpbmVkIGZvciBmdXR1cmUgcmVjeWNsaW5nICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfcG9zdGNsZWFyKHVuc2lnbmVkIGludCAqcHYpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGwJJTAsICUyCQkJCQlcbiIKKwkiCW9yCSUxLCAkMCwgJDAJCQkJXG4iCisJIglzYwklMSwgJTIJCQkJCVxuIgorCSIJYmVxegklMSwgMWIJCQkJCVxuIgorCSIJc3luYwkJCQkJCVxuIgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAoKnB2KQorCTogIm0iICgqcHYpCisJOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQgc210Y19zZW5kX2lwaShpbnQgY3B1LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKwlpbnQgdGNzdGF0dXM7CisJc3RydWN0IHNtdGNfaXBpICpwaXBpOworCWxvbmcgZmxhZ3M7CisJaW50IG10ZmxhZ3M7CisKKwlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQlwcmludGsoIkNhbm5vdCBTZW5kIElQSSB0byBzZWxmIVxuIik7CisJCXJldHVybjsKKwl9CisJLyogU2V0IHVwIGEgZGVzY3JpcHRvciwgdG8gYmUgZGVsaXZlcmVkIGVpdGhlciBwcm9tcHRseSBvciBxdWV1ZWQgKi8KKwlwaXBpID0gc210Y19pcGlfZHEoJmZyZWVJUElxKTsKKwlpZiAocGlwaSA9PSBOVUxMKSB7CisJCWJ1c3Rfc3BpbmxvY2tzKDEpOworCQltaXBzX210X3JlZ2R1bXAoZHZwZSgpKTsKKwkJcGFuaWMoIklQSSBNc2cuIEJ1ZmZlcnMgRGVwbGV0ZWRcbiIpOworCX0KKwlwaXBpLT50eXBlID0gdHlwZTsKKwlwaXBpLT5hcmcgPSAodm9pZCAqKWFjdGlvbjsKKwlwaXBpLT5kZXN0ID0gY3B1OworCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZCkgeworCQkvKiBJZiBub3Qgb24gc2FtZSBWUEUsIGVucXVldWUgYW5kIHNlbmQgY3Jvc3MtVlBFIGludGVydXB0ICovCisJCXNtdGNfaXBpX25xKCZJUElRW2NwdV0sIHBpcGkpOworCQlMT0NLX0NPUkVfUFJBKCk7CisJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCQl3cml0ZV92cGVfYzBfY2F1c2UocmVhZF92cGVfYzBfY2F1c2UoKSB8IENfU1cxKTsKKwkJVU5MT0NLX0NPUkVfUFJBKCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTm90IHN1ZmZpY2llbnQgdG8gZG8gYSBMT0NLX01UX1BSQSAoZG10KSBoZXJlLAorCQkgKiBzaW5jZSBBU0lEIHNob290ZG93biBvbiB0aGUgb3RoZXIgVlBFIG1heQorCQkgKiBjb2xsaWRlIHdpdGggdGhpcyBvcGVyYXRpb24uCisJCSAqLworCQlMT0NLX0NPUkVfUFJBKCk7CisJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCQkvKiBIYWx0IHRoZSB0YXJnZXRlZCBUQyAqLworCQl3cml0ZV90Y19jMF90Y2hhbHQoVENIQUxUX0gpOworCQltaXBzX2loYigpOworCisJCS8qCisJIAkgKiBJbnNwZWN0IFRDU3RhdHVzIC0gaWYgSVhNVCBpcyBzZXQsIHdlIGhhdmUgdG8gcXVldWUKKwkJICogYSBtZXNzYWdlLiBPdGhlcndpc2UsIHdlIHNldCB1cCB0aGUgImludGVycnVwdCIKKwkJICogb2YgdGhlIG90aGVyIFRDCisJIAkgKi8KKwkJdGNzdGF0dXMgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CisKKwkJaWYgKCh0Y3N0YXR1cyAmIFRDU1RBVFVTX0lYTVQpICE9IDApIHsKKwkJCS8qCisJCQkgKiBTcGluLXdhaXRpbmcgaGVyZSBjYW4gZGVhZGxvY2ssCisJCQkgKiBzbyB3ZSBxdWV1ZSB0aGUgbWVzc2FnZSBmb3IgdGhlIHRhcmdldCBUQy4KKwkJCSAqLworCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOworCQkJVU5MT0NLX0NPUkVfUFJBKCk7CisJCQkvKiBUcnkgdG8gcmVkdWNlIHJlZHVuZGFudCB0aW1lciBpbnRlcnJ1cHQgbWVzc2FnZXMgKi8KKwkJCWlmKHR5cGUgPT0gU01UQ19DTE9DS19USUNLKSB7CisJCQkgICAgaWYoYXRvbWljX3Bvc3RpbmNyZW1lbnQoJmlwaV90aW1lcl9sYXRjaFtjcHVdKSE9MCkgeworCQkJCXNtdGNfaXBpX25xKCZmcmVlSVBJcSwgcGlwaSk7CisJCQkJcmV0dXJuOworCQkJICAgIH0KKwkJCX0KKwkJCXNtdGNfaXBpX25xKCZJUElRW2NwdV0sIHBpcGkpOworCQl9IGVsc2UgeworCQkJcG9zdF9kaXJlY3RfaXBpKGNwdSwgcGlwaSk7CisJCQl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CisJCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFNlbmQgSVBJIG1lc3NhZ2UgdG8gSGFsdGVkIFRDLCBUYXJnVEMvVGFyZ1ZQRSBhbHJlYWR5IGhhdmluZyBiZWVuIHNldAorICovCit2b2lkIHBvc3RfZGlyZWN0X2lwaShpbnQgY3B1LCBzdHJ1Y3Qgc210Y19pcGkgKnBpcGkpCit7CisJc3RydWN0IHB0X3JlZ3MgKmtzdGFjazsKKwl1bnNpZ25lZCBsb25nIHRjc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgdGNyZXN0YXJ0OworCWV4dGVybiB1MzIga2VybmVsc3BbTlJfQ1BVU107CisJZXh0ZXJuIHZvaWQgX19zbXRjX2lwaV92ZWN0b3Iodm9pZCk7CisKKwkvKiBFeHRyYWN0IFN0YXR1cywgRVBDIGZyb20gaGFsdGVkIFRDICovCisJdGNzdGF0dXMgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CisJdGNyZXN0YXJ0ID0gcmVhZF90Y19jMF90Y3Jlc3RhcnQoKTsKKwkvKiBJZiBUQ1Jlc3RhcnQgaW5kaWNhdGVzIGEgV0FJVCBpbnN0cnVjdGlvbiwgYWR2YW5jZSB0aGUgUEMgKi8KKwlpZiAoKHRjcmVzdGFydCAmIDB4ODAwMDAwMDApCisJICAgICYmICgoKih1bnNpZ25lZCBpbnQgKil0Y3Jlc3RhcnQgJiAweGZlMDAwMDNmKSA9PSAweDQyMDAwMDIwKSkgeworCQl0Y3Jlc3RhcnQgKz0gNDsKKwl9CisJLyoKKwkgKiBTYXZlIG9uIFRDJ3MgZnV0dXJlIGtlcm5lbCBzdGFjaworCSAqCisJICogQ1UgYml0IG9mIFN0YXR1cyBpcyBpbmRpY2F0b3IgdGhhdCBUQyB3YXMKKwkgKiBhbHJlYWR5IHJ1bm5pbmcgb24gYSBrZXJuZWwgc3RhY2suLi4KKwkgKi8KKwlpZih0Y3N0YXR1cyAmIFNUMF9DVTApICB7CisJCS8qIE5vdGUgdGhhdCB0aGlzICItIDEiIGlzIHBvaW50ZXIgYXJpdGhtZXRpYyAqLworCQlrc3RhY2sgPSAoKHN0cnVjdCBwdF9yZWdzICopcmVhZF90Y19ncHJfc3AoKSkgLSAxOworCX0gZWxzZSB7CisJCWtzdGFjayA9ICgoc3RydWN0IHB0X3JlZ3MgKilrZXJuZWxzcFtjcHVdKSAtIDE7CisJfQorCisJa3N0YWNrLT5jcDBfZXBjID0gKGxvbmcpdGNyZXN0YXJ0OworCS8qIFNhdmUgVENTdGF0dXMgKi8KKwlrc3RhY2stPmNwMF90Y3N0YXR1cyA9IHRjc3RhdHVzOworCS8qIFBhc3MgdG9rZW4gb2Ygb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCBrZXJuZWwgc3RhY2sgcGFkIGFyZWEgKi8KKwlrc3RhY2stPnBhZDBbNF0gPSAodW5zaWduZWQgbG9uZylwaXBpOworCS8qIFBhc3MgYWRkcmVzcyBvZiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgbGlrZXdpc2UgKi8KKwlrc3RhY2stPnBhZDBbNV0gPSAodW5zaWduZWQgbG9uZykmaXBpX2RlY29kZTsKKwkvKiBTZXQgaW50ZXJydXB0IGV4ZW1wdCBhbmQga2VybmVsIG1vZGUgKi8KKwl0Y3N0YXR1cyB8PSBUQ1NUQVRVU19JWE1UOworCXRjc3RhdHVzICY9IH5UQ1NUQVRVU19US1NVOworCXdyaXRlX3RjX2MwX3Rjc3RhdHVzKHRjc3RhdHVzKTsKKwllaGIoKTsKKwkvKiBTZXQgVEMgUmVzdGFydCBhZGRyZXNzIHRvIGJlIFNNVEMgSVBJIHZlY3RvciAqLworCXdyaXRlX3RjX2MwX3RjcmVzdGFydChfX3NtdGNfaXBpX3ZlY3Rvcik7Cit9CisKK3ZvaWQgaXBpX3Jlc2NoZWRfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIFJldHVybiBmcm9tIGludGVycnVwdCBzaG91bGQgYmUgZW5vdWdoIHRvIGNhdXNlIHNjaGVkdWxlciBjaGVjayAqLworfQorCisKK3ZvaWQgaXBpX2NhbGxfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIEludm9rZSBnZW5lcmljIGZ1bmN0aW9uIGludm9jYXRpb24gY29kZSBpbiBzbXAuYyAqLworCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworfQorCit2b2lkIGlwaV9kZWNvZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzbXRjX2lwaSAqcGlwaSkKK3sKKwl2b2lkICphcmdfY29weSA9IHBpcGktPmFyZzsKKwlpbnQgdHlwZV9jb3B5ID0gcGlwaS0+dHlwZTsKKwlpbnQgZGVzdF9jb3B5ID0gcGlwaS0+ZGVzdDsKKworCXNtdGNfaXBpX25xKCZmcmVlSVBJcSwgcGlwaSk7CisJc3dpdGNoICh0eXBlX2NvcHkpIHsKKwkJY2FzZSBTTVRDX0NMT0NLX1RJQ0s6CisJCQkvKiBJbnZva2UgQ2xvY2sgIkludGVycnVwdCIgKi8KKwkJCWlwaV90aW1lcl9sYXRjaFtkZXN0X2NvcHldID0gMDsKKyNpZmRlZiBTTVRDX0lETEVfSE9PS19ERUJVRworCQkJY2xvY2tfaGFuZ19yZXBvcnRlZFtkZXN0X2NvcHldID0gMDsKKyNlbmRpZiAvKiBTTVRDX0lETEVfSE9PS19ERUJVRyAqLworCQkJbG9jYWxfdGltZXJfaW50ZXJydXB0KDAsIE5VTEwsIHJlZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgTElOVVhfU01QX0lQSToKKwkJCXN3aXRjaCAoKGludClhcmdfY29weSkgeworCQkJY2FzZSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRjoKKwkJCQlpcGlfcmVzY2hlZF9pbnRlcnJ1cHQocmVncyk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNNUF9DQUxMX0ZVTkNUSU9OOgorCQkJCWlwaV9jYWxsX2ludGVycnVwdChyZWdzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKCJJbXBvc3NpYmxlIFNNVEMgSVBJIEFyZ3VtZW50IDB4JXhcbiIsCisJCQkJCShpbnQpYXJnX2NvcHkpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIkltcG9zc2libGUgU01UQyBJUEkgVHlwZSAweCV4XG4iLCB0eXBlX2NvcHkpOworCQkJYnJlYWs7CisJfQorfQorCit2b2lkIGRlZmVycmVkX3NtdGNfaXBpKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzbXRjX2lwaSAqcGlwaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworLyogREVCVUcgKi8KKwlpbnQgcSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogVGVzdCBpcyBub3QgYXRvbWljLCBidXQgbXVjaCBmYXN0ZXIgdGhhbiBhIGRlcXVldWUsCisJICogYW5kIHRoZSB2YXN0IG1ham9yaXR5IG9mIGludm9jYXRpb25zIHdpbGwgaGF2ZSBhIG51bGwgcXVldWUuCisJICovCisJaWYoSVBJUVtxXS5oZWFkICE9IE5VTEwpIHsKKwkJd2hpbGUoKHBpcGkgPSBzbXRjX2lwaV9kcSgmSVBJUVtxXSkpICE9IE5VTEwpIHsKKwkJCS8qIGlwaV9kZWNvZGUoKSBzaG91bGQgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBvZmYgKi8KKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWlwaV9kZWNvZGUocmVncywgcGlwaSk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTZW5kIGNsb2NrIHRpY2sgdG8gYWxsIFRDcyBleGNlcHQgdGhlIG9uZSBleGVjdXRpbmcgdGhlIGZ1bnRpb24KKyAqLworCit2b2lkIHNtdGNfdGltZXJfYnJvYWRjYXN0KGludCB2cGUpCit7CisJaW50IGNwdTsKKwlpbnQgbXlUQyA9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udGNfaWQ7CisJaW50IG15VlBFID0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS52cGVfaWQ7CisKKwlzbXRjX2NwdV9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldLnRpbWVyaW50cysrOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkID09IG15VlBFICYmCisJCSAgICBjcHVfZGF0YVtjcHVdLnRjX2lkICE9IG15VEMpCisJCQlzbXRjX3NlbmRfaXBpKGNwdSwgU01UQ19DTE9DS19USUNLLCAwKTsKKwl9Cit9CisKKy8qCisgKiBDcm9zcy1WUEUgaW50ZXJydXB0cyBpbiB0aGUgU01UQyBwcm90b3R5cGUgdXNlICJzb2Z0d2FyZSBpbnRlcnJ1cHRzIgorICogc2V0IHZpYSBjcm9zcy1WUEUgTVRUUiBtYW5pcHVsYXRpb24gb2YgdGhlIENhdXNlIHJlZ2lzdGVyLiBJdCB3b3VsZCBiZQorICogaW4gc29tZSByZWdhcmRzIHByZWZlcmFibGUgdG8gaGF2ZSBleHRlcm5hbCBsb2dpYyBmb3IgImRvb3JiZWxsIiBoYXJkd2FyZQorICogaW50ZXJydXB0cy4KKyAqLworCitzdGF0aWMgaW50IGNwdV9pcGlfaXJxID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9JUlE7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZG0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBteV92cGUgPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZDsKKwlpbnQgbXlfdGMgPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnRjX2lkOworCWludCBjcHU7CisJc3RydWN0IHNtdGNfaXBpICpwaXBpOworCXVuc2lnbmVkIGxvbmcgdGNzdGF0dXM7CisJaW50IHNlbnQ7CisJbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbXRmbGFnczsKKwl1bnNpZ25lZCBpbnQgdnBmbGFnczsKKworCS8qCisJICogU28gbG9uZyBhcyBjcm9zcy1WUEUgaW50ZXJydXB0cyBhcmUgZG9uZSB2aWEKKwkgKiBNRlRSL01UVFIgcmVhZC1tb2RpZnktd3JpdGVzIG9mIENhdXNlLCB3ZSBuZWVkCisJICogdG8gc3RvcCBvdGhlciBWUEVzIHdoZW5ldmVyIHRoZSBsb2NhbCBWUEUgZG9lcworCSAqIGFueXRoaW5nIHNpbWlsYXIuCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXZwZmxhZ3MgPSBkdnBlKCk7CisJY2xlYXJfYzBfY2F1c2UoMHgxMDAgPDwgTUlQU19DUFVfSVBJX0lSUSk7CisJc2V0X2MwX3N0YXR1cygweDEwMCA8PCBNSVBTX0NQVV9JUElfSVJRKTsKKwlpcnFfZW5hYmxlX2hhemFyZCgpOworCWV2cGUodnBmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyoKKwkgKiBDcm9zcy1WUEUgSW50ZXJydXB0IGhhbmRsZXI6IFRyeSB0byBkaXJlY3RseSBkZWxpdmVyIElQSXMKKwkgKiBxdWV1ZWQgZm9yIFRDcyBvbiB0aGlzIFZQRSBvdGhlciB0aGFuIHRoZSBjdXJyZW50IG9uZS4KKwkgKiBSZXR1cm4tZnJvbS1pbnRlcnJ1cHQgc2hvdWxkIGNhdXNlIHVzIHRvIGRyYWluIHRoZSBxdWV1ZQorCSAqIGZvciB0aGUgY3VycmVudCBUQywgc28gd2Ugb3VnaHQgbm90IHRvIGhhdmUgdG8gZG8gaXQgZXhwbGljaXRseSBoZXJlLgorCSAqLworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IG15X3ZwZSkKKwkJCWNvbnRpbnVlOworCisJCXBpcGkgPSBzbXRjX2lwaV9kcSgmSVBJUVtjcHVdKTsKKwkJaWYgKHBpcGkgIT0gTlVMTCkgeworCQkJaWYgKGNwdV9kYXRhW2NwdV0udGNfaWQgIT0gbXlfdGMpIHsKKwkJCQlzZW50ID0gMDsKKwkJCQlMT0NLX01UX1BSQSgpOworCQkJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOworCQkJCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCQkJbWlwc19paGIoKTsKKwkJCQl0Y3N0YXR1cyA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKwkJCQlpZiAoKHRjc3RhdHVzICYgVENTVEFUVVNfSVhNVCkgPT0gMCkgeworCQkJCQlwb3N0X2RpcmVjdF9pcGkoY3B1LCBwaXBpKTsKKwkJCQkJc2VudCA9IDE7CisJCQkJfQorCQkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKKwkJCQlVTkxPQ0tfTVRfUFJBKCk7CisJCQkJaWYgKCFzZW50KSB7CisJCQkJCXNtdGNfaXBpX3JlcSgmSVBJUVtjcHVdLCBwaXBpKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogaXBpX2RlY29kZSgpIHNob3VsZCBiZSBjYWxsZWQKKwkJCQkgKiB3aXRoIGludGVycnVwdHMgb2ZmCisJCQkJICovCisJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJCWlwaV9kZWNvZGUocmVncywgcGlwaSk7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBpcGlfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRvX0lSUShjcHVfaXBpX2lycSwgcmVncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9pcGk7CisKK3ZvaWQgc2V0dXBfY3Jvc3NfdnBlX2ludGVycnVwdHModm9pZCkKK3sKKwlpZiAoIWNwdV9oYXNfdmludCkKKwkJcGFuaWMoIlNNVEMgS2VybmVsIHJlcXVpcmVzIFZlY3RvcmVkIEludGVydXB0IHN1cHBvcnQiKTsKKworCXNldF92aV9oYW5kbGVyKE1JUFNfQ1BVX0lQSV9JUlEsIGlwaV9pcnFfZGlzcGF0Y2gpOworCisJaXJxX2lwaS5oYW5kbGVyID0gaXBpX2ludGVycnVwdDsKKwlpcnFfaXBpLmZsYWdzID0gU0FfSU5URVJSVVBUOworCWlycV9pcGkubmFtZSA9ICJTTVRDX0lQSSI7CisKKwlzZXR1cF9pcnFfc210YyhjcHVfaXBpX2lycSwgJmlycV9pcGksICgweDEwMCA8PCBNSVBTX0NQVV9JUElfSVJRKSk7CisKKwlpcnFfZGVzY1tjcHVfaXBpX2lycV0uc3RhdHVzIHw9IElSUV9QRVJfQ1BVOworfQorCisvKgorICogU01UQy1zcGVjaWZpYyBoYWNrcyBpbnZva2VkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwuCisgKi8KKwordm9pZCBzbXRjX2lkbGVfbG9vcF9ob29rKHZvaWQpCit7CisjaWZkZWYgU01UQ19JRExFX0hPT0tfREVCVUcKKwlpbnQgaW07CisJaW50IGZsYWdzOworCWludCBtdGZsYWdzOworCWludCBiaXQ7CisJaW50IHZwZTsKKwlpbnQgdGM7CisJaW50IGhvb2tfbnRjczsKKwkvKgorCSAqIHByaW50ayB3aXRoaW4gRE1ULXByb3RlY3RlZCByZWdpb25zIGNhbiBkZWFkbG9jaywKKwkgKiBzbyBidWZmZXIgZGlhZ25vc3RpYyBtZXNzYWdlcyBmb3IgbGF0ZXIgb3V0cHV0LgorCSAqLworCWNoYXIgKnBkYl9tc2c7CisJY2hhciBpZF9ob19kYl9tc2dbNzY4XTsgLyogd29yc3QtY2FzZSB1c2Ugc2hvdWxkIGJlIGxlc3MgdGhhbiA3MDAgKi8KKworCWlmIChhdG9taWNfcmVhZCgmaWRsZV9ob29rX2luaXRpYWxpemVkKSA9PSAwKSB7IC8qIGZhc3QgdGVzdCAqLworCQlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmlkbGVfaG9va19pbml0aWFsaXplZCkgPT0gMSkgeworCQkJaW50IG12cGNvbmYwOworCQkJLyogVGVkaW91cyBzdHVmZiB0byBqdXN0IGRvIG9uY2UgKi8KKwkJCW12cGNvbmYwID0gcmVhZF9jMF9tdnBjb25mMCgpOworCQkJaG9va19udGNzID0gKChtdnBjb25mMCAmIE1WUENPTkYwX1BUQykgPj4gTVZQQ09ORjBfUFRDX1NISUZUKSArIDE7CisJCQlpZiAoaG9va19udGNzID4gTlJfQ1BVUykKKwkJCQlob29rX250Y3MgPSBOUl9DUFVTOworCQkJZm9yICh0YyA9IDA7IHRjIDwgaG9va19udGNzOyB0YysrKSB7CisJCQkJdGNub3Byb2dbdGNdID0gMDsKKwkJCQljbG9ja19oYW5nX3JlcG9ydGVkW3RjXSA9IDA7CisJICAgIAkJfQorCQkJZm9yICh2cGUgPSAwOyB2cGUgPCAyOyB2cGUrKykKKwkJCQlmb3IgKGltID0gMDsgaW0gPCA4OyBpbSsrKQorCQkJCQlpbXN0dWNrY291bnRbdnBlXVtpbV0gPSAwOworCQkJcHJpbnRrKCJJZGxlIGxvb3AgdGVzdCBob29rIGluaXRpYWxpemVkIGZvciAlZCBUQ3NcbiIsIGhvb2tfbnRjcyk7CisJCQlhdG9taWNfc2V0KCZpZGxlX2hvb2tfaW5pdGlhbGl6ZWQsIDEwMDApOworCQl9IGVsc2UgeworCQkJLyogU29tZW9uZSBlbHNlIGlzIGluaXRpYWxpemluZyBpbiBwYXJhbGxlbCAtIGxldCAnZW0gZmluaXNoICovCisJCQl3aGlsZSAoYXRvbWljX3JlYWQoJmlkbGVfaG9va19pbml0aWFsaXplZCkgPCAxMDAwKQorCQkJCTsKKwkJfQorCX0KKworCS8qIEhhdmUgd2Ugc3R1cGlkbHkgbGVmdCBJWE1UIHNldCBzb21ld2hlcmU/ICovCisJaWYgKHJlYWRfYzBfdGNzdGF0dXMoKSAmIDB4NDAwKSB7CisJCXdyaXRlX2MwX3Rjc3RhdHVzKHJlYWRfYzBfdGNzdGF0dXMoKSAmIH4weDQwMCk7CisJCWVoYigpOworCQlwcmludGsoIkRhbmdsaW5nIElYTVQgaW4gY3B1X2lkbGUoKVxuIik7CisJfQorCisJLyogSGF2ZSB3ZSBzdHVwaWRseSBsZWZ0IGFuIElNIGJpdCB0dXJuZWQgb2ZmPyAqLworI2RlZmluZSBJTV9MSU1JVCAyMDAwCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW10ZmxhZ3MgPSBkbXQoKTsKKwlwZGJfbXNnID0gJmlkX2hvX2RiX21zZ1swXTsKKwlpbSA9IHJlYWRfYzBfc3RhdHVzKCk7CisJdnBlID0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS52cGVfaWQ7CisJZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKykgeworCQkvKgorCQkgKiBJbiBjdXJyZW50IHByb3RvdHlwZSwgSS9PIGludGVycnVwdHMKKwkJICogYXJlIG1hc2tlZCBmb3IgVlBFID4gMAorCQkgKi8KKwkJaWYgKHZwZW1hc2tbdnBlXVtiaXRdKSB7CisJCQlpZiAoIShpbSAmICgweDEwMCA8PCBiaXQpKSkKKwkJCQlpbXN0dWNrY291bnRbdnBlXVtiaXRdKys7CisJCQllbHNlCisJCQkJaW1zdHVja2NvdW50W3ZwZV1bYml0XSA9IDA7CisJCQlpZiAoaW1zdHVja2NvdW50W3ZwZV1bYml0XSA+IElNX0xJTUlUKSB7CisJCQkJc2V0X2MwX3N0YXR1cygweDEwMCA8PCBiaXQpOworCQkJCWVoYigpOworCQkJCWltc3R1Y2tjb3VudFt2cGVdW2JpdF0gPSAwOworCQkJCXBkYl9tc2cgKz0gc3ByaW50ZihwZGJfbXNnLAorCQkJCQkiRGFuZ2xpbmcgSU0gJWQgZml4ZWQgZm9yIFZQRSAlZFxuIiwgYml0LAorCQkJCQl2cGUpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBsaW1pdCBvdXRzdGFuZGluZyB0aW1lciBJUElzLCBjaGVjayBmb3IgaHVuZyBUQworCSAqLworCWZvciAodGMgPSAwOyB0YyA8IE5SX0NQVVM7IHRjKyspIHsKKwkJLyogRG9uJ3QgY2hlY2sgb3Vyc2VsZiAtIHdlJ2xsIGRlcXVldWUgSVBJcyBqdXN0IGJlbG93ICovCisJCWlmICgodGMgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSAmJgorCQkgICAgaXBpX3RpbWVyX2xhdGNoW3RjXSA+IHRpbWVycV9saW1pdCkgeworCQkgICAgaWYgKGNsb2NrX2hhbmdfcmVwb3J0ZWRbdGNdID09IDApIHsKKwkJCXBkYl9tc2cgKz0gc3ByaW50ZihwZGJfbXNnLAorCQkJCSJUQyAlZCBsb29rcyBodW5nIHdpdGggdGltZXIgbGF0Y2ggYXQgJWRcbiIsCisJCQkJdGMsIGlwaV90aW1lcl9sYXRjaFt0Y10pOworCQkJY2xvY2tfaGFuZ19yZXBvcnRlZFt0Y10rKzsKKwkJCX0KKwkJfQorCX0KKwllbXQobXRmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmIChwZGJfbXNnICE9ICZpZF9ob19kYl9tc2dbMF0pCisJCXByaW50aygiQ1BVJWQ6ICVzIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZF9ob19kYl9tc2cpOworI2VuZGlmIC8qIFNNVENfSURMRV9IT09LX0RFQlVHICovCisJLyoKKwkgKiBUbyB0aGUgZXh0ZW50IHRoYXQgd2UndmUgZXZlciB0dXJuZWQgaW50ZXJydXB0cyBvZmYsCisJICogd2UgbWF5IGhhdmUgYWNjdW11bGF0ZWQgZGVmZXJyZWQgSVBJcy4gIFRoaXMgaXMgc3VidGxlLgorCSAqIElmIHdlIHVzZSB0aGUgc210Y19pcGlfcWRlcHRoKCkgbWFjcm8sIHdlJ2xsIGdldCBhbgorCSAqIGV4YWN0IG51bWJlciAtIGJ1dCB3ZSdsbCBhbHNvIGRpc2FibGUgaW50ZXJydXB0cworCSAqIGFuZCBjcmVhdGUgYSB3aW5kb3cgb2YgZmFpbHVyZSB3aGVyZSBhIG5ldyBJUEkgZ2V0cworCSAqIHF1ZXVlZCBhZnRlciB3ZSB0ZXN0IHRoZSBkZXB0aCBidXQgYmVmb3JlIHdlIHJlLWVuYWJsZQorCSAqIGludGVycnVwdHMuIFNvIGxvbmcgYXMgSVhNVCBuZXZlciBnZXRzIHNldCwgaG93ZXZlciwKKwkgKiB3ZSBzaG91bGQgYmUgT0s6ICBJZiB3ZSBwaWNrIHVwIHNvbWV0aGluZyBhbmQgZGlzcGF0Y2gKKwkgKiBpdCBoZXJlLCB0aGF0J3MgZ3JlYXQuIElmIHdlIHNlZSBub3RoaW5nLCBidXQgY29uY3VycmVudAorCSAqIHdpdGggdGhpcyBvcGVyYXRpb24sIGFub3RoZXIgVEMgc2VuZHMgdXMgYW4gSVBJLCBJWE1UCisJICogaXMgY2xlYXIsIGFuZCB3ZSdsbCBoYW5kbGUgaXQgYXMgYSByZWFsIHBzZXVkby1pbnRlcnJ1cHQKKwkgKiBhbmQgbm90IGEgcHNldWRvLXBzZXVkbyBpbnRlcnJ1cHQuCisJICovCisJaWYgKElQSVFbc21wX3Byb2Nlc3Nvcl9pZCgpXS5kZXB0aCA+IDApIHsKKwkJc3RydWN0IHNtdGNfaXBpICpwaXBpOworCQlleHRlcm4gdm9pZCBzZWxmX2lwaShzdHJ1Y3Qgc210Y19pcGkgKik7CisKKwkJaWYgKChwaXBpID0gc210Y19pcGlfZHEoJklQSVFbc21wX3Byb2Nlc3Nvcl9pZCgpXSkpICE9IE5VTEwpIHsKKwkJCXNlbGZfaXBpKHBpcGkpOworCQkJc210Y19jcHVfc3RhdHNbc21wX3Byb2Nlc3Nvcl9pZCgpXS5zZWxmaXBpcysrOworCQl9CisJfQorfQorCit2b2lkIHNtdGNfc29mdF9kdW1wKHZvaWQpCit7CisJaW50IGk7CisKKwlwcmludGsoIkNvdW50ZXIgSW50ZXJydXB0cyB0YWtlbiBwZXIgQ1BVIChUQylcbiIpOworCWZvciAoaT0wOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCXByaW50aygiJWQ6ICVsZFxuIiwgaSwgc210Y19jcHVfc3RhdHNbaV0udGltZXJpbnRzKTsKKwl9CisJcHJpbnRrKCJTZWxmLUlQSSBpbnZvY2F0aW9uczpcbiIpOworCWZvciAoaT0wOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCXByaW50aygiJWQ6ICVsZFxuIiwgaSwgc210Y19jcHVfc3RhdHNbaV0uc2VsZmlwaXMpOworCX0KKwlzbXRjX2lwaV9xZHVtcCgpOworCXByaW50aygiVGltZXIgSVBJIEJhY2tsb2dzOlxuIik7CisJZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJcHJpbnRrKCIlZDogJWRcbiIsIGksIGlwaV90aW1lcl9sYXRjaFtpXSk7CisJfQorCXByaW50aygiJWQgUmVjb3ZlcmllcyBvZiBcInN0b2xlblwiIEZQVVxuIiwKKwkgICAgICAgYXRvbWljX3JlYWQoJnNtdGNfZnB1X3JlY292ZXJpZXMpKTsKK30KKworCisvKgorICogVExCIG1hbmFnZW1lbnQgcm91dGluZXMgc3BlY2lhbCB0byBTTVRDCisgKi8KKwordm9pZCBzbXRjX2dldF9uZXdfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG10ZmxhZ3MsIHRjc3RhdCwgcHJldmhhbHQsIGFzaWQ7CisJaW50IHRsYiwgaTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIHVzZSBhIHNwaW5sb2NrIGhlcmUsCisJICogYnV0IHRoaXMgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBUTEIgZmx1c2ggcm91dGluZXMKKwkgKiB0aGF0IHByb3RlY3QgdGhlbXNlbHZlcyB3aXRoIERWUEUsIHNvIGlmIGEgbG9jayBpcworICAgICAgICAgKiBoZWxkIGJ5IGFub3RoZXIgVEMsIGl0J2xsIG5ldmVyIGJlIGZyZWVkLgorCSAqCisJICogRFZQRS9ETVQgbXVzdCBub3QgYmUgZG9uZSB3aXRoIGludGVycnVwdHMgZW5hYmxlZCwKKwkgKiBzbyBldmVuIHNvIG1vc3QgY2FsbGVycyB3aWxsIGFscmVhZHkgaGF2ZSBkaXNhYmxlZAorCSAqIHRoZW0sIGxldCdzIGJlIHJlYWxseSBjYXJlZnVsLi4uCisJICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSB7CisJCW10ZmxhZ3MgPSBkdnBlKCk7CisJCXRsYiA9IDA7CisJfSBlbHNlIHsKKwkJbXRmbGFncyA9IGRtdCgpOworCQl0bGIgPSBjcHVfZGF0YVtjcHVdLnZwZV9pZDsKKwl9CisJYXNpZCA9IGFzaWRfY2FjaGUoY3B1KTsKKworCWRvIHsKKwkJaWYgKCEoKGFzaWQgKz0gQVNJRF9JTkMpICYgQVNJRF9NQVNLKSApIHsKKwkJCWlmIChjcHVfaGFzX3Z0YWdfaWNhY2hlKQorCQkJCWZsdXNoX2ljYWNoZV9hbGwoKTsKKwkJCS8qIFRyYXZlcnNlIGFsbCBvbmxpbmUgQ1BVcyAoaGFjayByZXF1aXJlcyBjb250aWdvdXMgcmFuZ2UpICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX29ubGluZV9jcHVzKCk7IGkrKykgeworCQkJCS8qCisJCQkJICogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBvdXIgb3duIENQVSwgbm9yIHRob3NlIG9mCisJCQkJICogQ1BVcyB3aG8gZG9uJ3Qgc2hhcmUgb3VyIFRMQi4KKwkJCQkgKi8KKwkJCQlpZiAoKGkgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSAmJgorCQkJCSAgICAoKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSB8fAorCQkJCSAgICAgKGNwdV9kYXRhW2ldLnZwZV9pZCA9PSBjcHVfZGF0YVtjcHVdLnZwZV9pZCkpKSB7CisJCQkJCXNldHRjKGNwdV9kYXRhW2ldLnRjX2lkKTsKKwkJCQkJcHJldmhhbHQgPSByZWFkX3RjX2MwX3RjaGFsdCgpICYgVENIQUxUX0g7CisJCQkJCWlmICghcHJldmhhbHQpIHsKKwkJCQkJCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCQkJCQltaXBzX2loYigpOworCQkJCQl9CisJCQkJCXRjc3RhdCA9IHJlYWRfdGNfYzBfdGNzdGF0dXMoKTsKKwkJCQkJc210Y19saXZlX2FzaWRbdGxiXVsodGNzdGF0ICYgQVNJRF9NQVNLKV0gfD0gKGFzaWR1c2UpKDB4MSA8PCBpKTsKKwkJCQkJaWYgKCFwcmV2aGFsdCkKKwkJCQkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWFzaWQpCQkvKiBmaXggdmVyc2lvbiBpZiBuZWVkZWQgKi8KKwkJCQlhc2lkID0gQVNJRF9GSVJTVF9WRVJTSU9OOworCQkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwkvKiBzdGFydCBuZXcgYXNpZCBjeWNsZSAqLworCQl9CisJfSB3aGlsZSAoc210Y19saXZlX2FzaWRbdGxiXVsoYXNpZCAmIEFTSURfTUFTSyldKTsKKworCS8qCisJICogU01UQyBzaGFyZXMgdGhlIFRMQiB3aXRoaW4gVlBFcyBhbmQgcG9zc2libHkgYWNyb3NzIGFsbCBWUEVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7CisJCWlmICgoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpIHx8CisJCSAgICAoY3B1X2RhdGFbaV0udnBlX2lkID09IGNwdV9kYXRhW2NwdV0udnBlX2lkKSkKKwkJCWNwdV9jb250ZXh0KGksIG1tKSA9IGFzaWRfY2FjaGUoaSkgPSBhc2lkOworCX0KKworCWlmIChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkKKwkJZXZwZShtdGZsYWdzKTsKKwllbHNlCisJCWVtdChtdGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBJbnZva2VkIGZyb20gbWFjcm9zIGRlZmluZWQgaW4gbW11X2NvbnRleHQuaAorICogd2hpY2ggbXVzdCBhbHJlYWR5IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cworICogYW5kIGRvbmUgYSBEVlBFIG9yIERNVCBhcyBhcHByb3ByaWF0ZS4KKyAqLworCit2b2lkIHNtdGNfZmx1c2hfdGxiX2FzaWQodW5zaWduZWQgbG9uZyBhc2lkKQoreworCWludCBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIGVoaTsKKworCWVudHJ5ID0gcmVhZF9jMF93aXJlZCgpOworCisJLyogVHJhdmVyc2UgYWxsIG5vbi13aXJlZCBlbnRyaWVzICovCisJd2hpbGUgKGVudHJ5IDwgY3VycmVudF9jcHVfZGF0YS50bGJzaXplKSB7CisJCXdyaXRlX2MwX2luZGV4KGVudHJ5KTsKKwkJZWhiKCk7CisJCXRsYl9yZWFkKCk7CisJCWVoYigpOworCQllaGkgPSByZWFkX2MwX2VudHJ5aGkoKTsKKwkJaWYoKGVoaSAmIEFTSURfTUFTSykgPT0gYXNpZCkgeworCQkgICAgLyoKKwkJICAgICAqIEludmFsaWRhdGUgb25seSBlbnRyaWVzIHdpdGggc3BlY2lmaWVkIEFTSUQsCisJCSAgICAgKiBtYWtpaW5nIHN1cmUgYWxsIGVudHJpZXMgZGlmZmVyLgorCQkgICAgICovCisJCSAgICB3cml0ZV9jMF9lbnRyeWhpKENLU0VHMCArIChlbnRyeSA8PCAoUEFHRV9TSElGVCArIDEpKSk7CisJCSAgICB3cml0ZV9jMF9lbnRyeWxvMCgwKTsKKwkJICAgIHdyaXRlX2MwX2VudHJ5bG8xKDApOworCQkgICAgbXRjMF90bGJ3X2hhemFyZCgpOworCQkgICAgdGxiX3dyaXRlX2luZGV4ZWQoKTsKKwkJfQorCQllbnRyeSsrOworCX0KKwl3cml0ZV9jMF9pbmRleChQQVJLRURfSU5ERVgpOworCXRsYndfdXNlX2hhemFyZCgpOworfQorCisvKgorICogU3VwcG9ydCBmb3Igc2luZ2xlLXRocmVhZGluZyBjYWNoZSBmbHVzaCBvcGVyYXRpb25zLgorICovCisKK2ludCBoYWx0X3N0YXRlX3NhdmVbTlJfQ1BVU107CisKKy8qCisgKiBUbyByZWFsbHksIHJlYWxseSBiZSBzdXJlIHRoYXQgbm90aGluZyBpcyBiZWluZyBkb25lCisgKiBieSBvdGhlciBUQ3MsIGhhbHQgdGhlbSBhbGwuICBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0CisgKiBhIERWUEUgaGFzIGFscmVhZHkgYmVlbiBkb25lLCBzbyB3aGlsZSB0aGVpciBIYWx0ZWQKKyAqIHN0YXRlIGlzIHRoZW9yZXRpY2FsbHkgYXJjaGl0ZWN0dXJhbGx5IHVuc3RhYmxlLCBpbgorICogcHJhY3RpY2UsIGl0J3Mgbm90IGdvaW5nIHRvIGNoYW5nZSB3aGlsZSB3ZSdyZSBsb29raW5nCisgKiBhdCBpdC4KKyAqLworCit2b2lkIHNtdGNfY2ZsdXNoX2xvY2tkb3duKHZvaWQpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCQlzZXR0YyhjcHVfZGF0YVtjcHVdLnRjX2lkKTsKKwkJCWhhbHRfc3RhdGVfc2F2ZVtjcHVdID0gcmVhZF90Y19jMF90Y2hhbHQoKTsKKwkJCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisJCX0KKwl9CisJbWlwc19paGIoKTsKK30KKworLyogSXQgd291bGQgYmUgY2hlYXRpbmcgdG8gY2hhbmdlIHRoZSBjcHVfb25saW5lIHN0YXRlcyBkdXJpbmcgYSBmbHVzaCEgKi8KKwordm9pZCBzbXRjX2NmbHVzaF9yZWxlYXNlKHZvaWQpCit7CisJaW50IGNwdTsKKworCS8qCisJICogU3RhcnQgd2l0aCBhIGhhemFyZCBiYXJyaWVyIHRvIGVuc3VyZQorCSAqIHRoYXQgYWxsIENBQ0hFIG9wcyBoYXZlIHBsYXllZCB0aHJvdWdoLgorCSAqLworCW1pcHNfaWhiKCk7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CisJCQl3cml0ZV90Y19jMF90Y2hhbHQoaGFsdF9zdGF0ZV9zYXZlW2NwdV0pOworCQl9CisJfQorCW1pcHNfaWhiKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCmluZGV4IDJhZWFhMmYuLjVlOGExOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCkBAIC0yNzYsMzEgKzI3Niw5IEBACiAKIGFzbWxpbmthZ2UgaW50IF9zeXNfc3lzbWlwcyhpbnQgY21kLCBsb25nIGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKIHsKLQlpbnQJdG1wLCBsZW47Ci0JY2hhcglfX3VzZXIgKm5hbWU7CisJaW50CXRtcDsKIAogCXN3aXRjaChjbWQpIHsKLQljYXNlIFNFVE5BTUU6IHsKLQkJY2hhciBub2RlbmFtZVtfX05FV19VVFNfTEVOICsgMV07Ci0KLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQluYW1lID0gKGNoYXIgX191c2VyICopIGFyZzE7Ci0KLQkJbGVuID0gc3RybmNweV9mcm9tX3VzZXIobm9kZW5hbWUsIG5hbWUsIF9fTkVXX1VUU19MRU4pOwotCQlpZiAobGVuIDwgMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWRvd25fd3JpdGUoJnV0c19zZW0pOwotCQlzdHJuY3B5KHN5c3RlbV91dHNuYW1lLm5vZGVuYW1lLCBub2RlbmFtZSwgbGVuKTsKLQkJbm9kZW5hbWVbX19ORVdfVVRTX0xFTl0gPSAnXDAnOwotCQlzdHJsY3B5KHN5c3RlbV91dHNuYW1lLm5vZGVuYW1lLCBub2RlbmFtZSwKLQkJICAgICAgICBzaXplb2Yoc3lzdGVtX3V0c25hbWUubm9kZW5hbWUpKTsKLQkJdXBfd3JpdGUoJnV0c19zZW0pOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAljYXNlIE1JUFNfQVRPTUlDX1NFVDoKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiSG93IGRpZCBJIGdldCBoZXJlP1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzEzLDkgKzI5MSw2IEBACiAJY2FzZSBGTFVTSF9DQUNIRToKIAkJX19mbHVzaF9jYWNoZV9hbGwoKTsKIAkJcmV0dXJuIDA7Ci0KLQljYXNlIE1JUFNfUkROVlJBTToKLQkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCmluZGV4IDVlNTFhMmQuLjEzZmY0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCkBAIC0xMTYsOCArMTE2LDcgQEAKIAl3cml0ZV9jMF9jb21wYXJlKGV4cGlyZWxvKTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIG1pc3NlZCBhbnkgdGltZXIgaW50ZXJydXB0cy4gICovCi0JY291bnQgPSByZWFkX2MwX2NvdW50KCk7Ci0JaWYgKChjb3VudCAtIGV4cGlyZWxvKSA8IDB4N2ZmZmZmZmYpIHsKKwl3aGlsZSAoKChjb3VudCA9IHJlYWRfYzBfY291bnQoKSkgLSBleHBpcmVsbykgPCAweDdmZmZmZmZmKSB7CiAJCS8qIG1pc3NlZF90aW1lcl9jb3VudCsrOyAqLwogCQlleHBpcmVsbyA9IGNvdW50ICsgY3ljbGVzX3Blcl9qaWZmeTsKIAkJd3JpdGVfYzBfY29tcGFyZShleHBpcmVsbyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggYmVkMGViNi4uYTc1NjRiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGFzbS93YXRjaC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCitleHRlcm4gYXNtbGlua2FnZSB2b2lkIGhhbmRsZV9pbnQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGhhbmRsZV90bGJtKHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfdGxibCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX3RsYnModm9pZCk7CkBAIC0yNzksOSArMjgwLDE2IEBACiBOT1JFVF9UWVBFIHZvaWQgQVRUUklCX05PUkVUIGRpZShjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CiAJc3RhdGljIGludCBkaWVfY291bnRlcjsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdW5zaWduZWQgbG9uZyBkdnByZXQgPSBkdnBlKCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWJ1c3Rfc3BpbmxvY2tzKDEpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwltaXBzX210X3JlZ2R1bXAoZHZwcmV0KTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJcHJpbnRrKCIlc1sjJWRdOlxuIiwgc3RyLCArK2RpZV9jb3VudGVyKTsKIAlzaG93X3JlZ2lzdGVycyhyZWdzKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKQEAgLTc1MCwxMiArNzU4LDQzIEBACiAJCQkJCQkmY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0KTsKIAkJCWlmIChzaWcpCiAJCQkJZm9yY2Vfc2lnKHNpZywgY3VycmVudCk7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkJCWVsc2UgeworCQkJLyoKKwkJCSAqIE1JUFMgTVQgcHJvY2Vzc29ycyBtYXkgaGF2ZSBmZXdlciBGUFUgY29udGV4dHMKKwkJCSAqIHRoYW4gQ1BVIHRocmVhZHMuIElmIHdlJ3ZlIGVtdWxhdGVkIG1vcmUgdGhhbgorCQkJICogc29tZSB0aHJlc2hvbGQgbnVtYmVyIG9mIGluc3RydWN0aW9ucywgZm9yY2UKKwkJCSAqIG1pZ3JhdGlvbiB0byBhICJDUFUiIHRoYXQgaGFzIEZQIHN1cHBvcnQuCisJCQkgKi8KKwkJCSBpZihtdF9mcGVtdWxfdGhyZXNob2xkID4gMAorCQkJICYmICgoY3VycmVudC0+dGhyZWFkLmVtdWxhdGVkX2ZwKysKKwkJCSAgICA+IG10X2ZwZW11bF90aHJlc2hvbGQpKSkgeworCQkJICAvKgorCQkJICAgKiBJZiB0aGVyZSdzIG5vIEZQVSBwcmVzZW50LCBvciBpZiB0aGUKKwkJCSAgICogYXBwbGljYXRpb24gaGFzIGFscmVhZHkgcmVzdHJpY3RlZAorCQkJICAgKiB0aGUgYWxsb3dlZCBzZXQgdG8gZXhjbHVkZSBhbnkgQ1BVcworCQkJICAgKiB3aXRoIEZQVXMsIHdlJ2xsIHNraXAgdGhlIHByb2NlZHVyZS4KKwkJCSAgICovCisJCQkgIGlmIChjcHVzX2ludGVyc2VjdHMoY3VycmVudC0+Y3B1c19hbGxvd2VkLAorCQkJICAJCQltdF9mcHVfY3B1bWFzaykpIHsKKwkJCSAgICBjcHVtYXNrX3QgdG1hc2s7CisKKwkJCSAgICBjcHVzX2FuZCh0bWFzaywKKwkJCQkJY3VycmVudC0+dGhyZWFkLnVzZXJfY3B1c19hbGxvd2VkLAorCQkJCQltdF9mcHVfY3B1bWFzayk7CisJCQkgICAgc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCB0bWFzayk7CisJCQkgICAgY3VycmVudC0+dGhyZWFkLm1mbGFncyB8PSBNRl9GUFVCT1VORDsKKwkJCSAgfQorCQkJIH0KKwkJCX0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogCQl9CiAKIAkJcmV0dXJuOwogCiAJY2FzZSAyOgogCWNhc2UgMzoKKwkJZGllX2lmX2tlcm5lbCgiZG9fY3B1IGludm9rZWQgZnJvbSBrZXJuZWwgY29udGV4dCEiLCByZWdzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC03ODAsMTkgKzgxOSw2NCBAQAogCiBhc21saW5rYWdlIHZvaWQgZG9fbWNoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWNvbnN0IGludCBmaWVsZCA9IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJaW50IG11bHRpX21hdGNoID0gcmVncy0+Y3AwX3N0YXR1cyAmIFNUMF9UUzsKKwogCXNob3dfcmVncyhyZWdzKTsKLQlkdW1wX3RsYl9hbGwoKTsKKworCWlmIChtdWx0aV9tYXRjaCkgeworCQlwcmludGsoIkluZGV4ICAgOiAlMHhcbiIsIHJlYWRfYzBfaW5kZXgoKSk7CisJCXByaW50aygiUGFnZW1hc2s6ICUweFxuIiwgcmVhZF9jMF9wYWdlbWFzaygpKTsKKwkJcHJpbnRrKCJFbnRyeUhpIDogJTAqbHhcbiIsIGZpZWxkLCByZWFkX2MwX2VudHJ5aGkoKSk7CisJCXByaW50aygiRW50cnlMbzA6ICUwKmx4XG4iLCBmaWVsZCwgcmVhZF9jMF9lbnRyeWxvMCgpKTsKKwkJcHJpbnRrKCJFbnRyeUxvMTogJTAqbHhcbiIsIGZpZWxkLCByZWFkX2MwX2VudHJ5bG8xKCkpOworCQlwcmludGsoIlxuIik7CisJCWR1bXBfdGxiX2FsbCgpOworCX0KKworCXNob3dfY29kZSgodW5zaWduZWQgaW50ICopIHJlZ3MtPmNwMF9lcGMpOworCiAJLyoKIAkgKiBTb21lIGNoaXBzIG1heSBoYXZlIG90aGVyIGNhdXNlcyBvZiBtYWNoaW5lIGNoZWNrIChlLmcuIFNCMQogCSAqIGdyYWR1YXRpb24gdGltZXIpCiAJICovCiAJcGFuaWMoIkNhdWdodCBNYWNoaW5lIENoZWNrIGV4Y2VwdGlvbiAtICVzY2F1c2VkIGJ5IG11bHRpcGxlICIKIAkgICAgICAibWF0Y2hpbmcgZW50cmllcyBpbiB0aGUgVExCLiIsCi0JICAgICAgKHJlZ3MtPmNwMF9zdGF0dXMgJiBTVDBfVFMpID8gIiIgOiAibm90ICIpOworCSAgICAgIChtdWx0aV9tYXRjaCkgPyAiIiA6ICJub3QgIik7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19tdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlpbnQgc3ViY29kZTsKKworCWRpZV9pZl9rZXJuZWwoIk1JUFMgTVQgVGhyZWFkIGV4Y2VwdGlvbiBpbiBrZXJuZWwiLCByZWdzKTsKKworCXN1YmNvZGUgPSAocmVhZF92cGVfYzBfdnBlY29udHJvbCgpICYgVlBFQ09OVFJPTF9FWENQVCkKKwkJCT4+IFZQRUNPTlRST0xfRVhDUFRfU0hJRlQ7CisJc3dpdGNoIChzdWJjb2RlKSB7CisJY2FzZSAwOgorCQlwcmludGsoS0VSTl9FUlIgIlRocmVhZCBVbmRlcmZsb3dcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByaW50ayhLRVJOX0VSUiAiVGhyZWFkIE92ZXJmbG93XG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgWUlFTEQgUXVhbGlmaWVyXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcmludGsoS0VSTl9FUlIgIkdhdGluZyBTdG9yYWdlIEV4Y2VwdGlvblxuIik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcHJpbnRrKEtFUk5fRVJSICJZSUVMRCBTY2hlZHVsZXIgRXhjZXB0aW9uXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlwcmludGsoS0VSTl9FUlIgIkdhdGluZyBTdG9yYWdlIFNjaGVkdWxpZXIgRXhjZXB0aW9uXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIqKiogVU5LTk9XTiBUSFJFQUQgRVhDRVBUSU9OICVkICoqKlxuIiwKKwkJCXN1YmNvZGUpOworCQlicmVhazsKKwl9CiAJZGllX2lmX2tlcm5lbCgiTUlQUyBNVCBUaHJlYWQgZXhjZXB0aW9uIGluIGtlcm5lbCIsIHJlZ3MpOwogCiAJZm9yY2Vfc2lnKFNJR0lMTCwgY3VycmVudCk7CkBAIC04MzMsNiArOTE3LDcgQEAKIHsKIAlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgewogCWNhc2UgQ1BVXzI0SzoKKwljYXNlIENQVV8zNEs6CiAJY2FzZSBDUFVfNUtDOgogCQl3cml0ZV9jMF9lY2MoMHg4MDAwMDAwMCk7CiAJCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsKQEAgLTkyOCw3ICsxMDEzLDE1IEBACiAgKi8KIHZvaWQgbm1pX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIGR2cHJldCA9IGR2cGUoKTsKKwlidXN0X3NwaW5sb2NrcygxKTsKIAlwcmludGsoIk5NSSB0YWtlbiEhISFcbiIpOworCW1pcHNfbXRfcmVnZHVtcChkdnByZXQpOworI2Vsc2UKKwlidXN0X3NwaW5sb2NrcygxKTsKKwlwcmludGsoIk5NSSB0YWtlbiEhISFcbiIpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlkaWUoIk5NSSIsIHJlZ3MpOwogCXdoaWxlKDEpIDsKIH0KQEAgLTk2MCwyNyArMTA1MywyOSBAQAogCiAjaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKIC8qCi0gKiBTaGFkb3cgcmVnaXN0ZXIgYWxsb2NhdGlvbgorICogTUlQU1IyIHNoYWRvdyByZWdpc3RlciBzZXQgYWxsb2NhdGlvbgogICogRklYTUU6IFNNUC4uLgogICovCiAKLS8qIE1JUFNSMiBzaGFkb3cgcmVnaXN0ZXIgc2V0cyAqLwotc3RydWN0IHNoYWRvd19yZWdpc3RlcnMgewotCXNwaW5sb2NrX3Qgc3JfbG9jazsJLyogICovCi0JaW50IHNyX3N1cHBvcnRlZDsJLyogTnVtYmVyIG9mIHNoYWRvdyByZWdpc3RlciBzZXRzIHN1cHBvcnRlZCAqLwotCWludCBzcl9hbGxvY2F0ZWQ7CS8qIEJpdG1hcCBvZiBhbGxvY2F0ZWQgc2hhZG93IHJlZ2lzdGVycyAqLworc3RhdGljIHN0cnVjdCBzaGFkb3dfcmVnaXN0ZXJzIHsKKwkvKgorCSAqIE51bWJlciBvZiBzaGFkb3cgcmVnaXN0ZXIgc2V0cyBzdXBwb3J0ZWQKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHNyX3N1cHBvcnRlZDsKKwkvKgorCSAqIEJpdG1hcCBvZiBhbGxvY2F0ZWQgc2hhZG93IHJlZ2lzdGVycworCSAqLworCXVuc2lnbmVkIGxvbmcgc3JfYWxsb2NhdGVkOwogfSBzaGFkb3dfcmVnaXN0ZXJzOwogCi12b2lkIG1pcHNfc3JzX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIG1pcHNfc3JzX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMl9TUlMKIAlzaGFkb3dfcmVnaXN0ZXJzLnNyX3N1cHBvcnRlZCA9ICgocmVhZF9jMF9zcnNjdGwoKSA+PiAyNikgJiAweDBmKSArIDE7Ci0JcHJpbnRrICgiJWQgTUlQU1IyIHJlZ2lzdGVyIHNldHMgYXZhaWxhYmxlXG4iLCBzaGFkb3dfcmVnaXN0ZXJzLnNyX3N1cHBvcnRlZCk7Ci0jZWxzZQotCXNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICIlZCBNSVBTUjIgcmVnaXN0ZXIgc2V0cyBhdmFpbGFibGVcbiIsCisJICAgICAgIHNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkKTsKICNlbmRpZgogCXNoYWRvd19yZWdpc3RlcnMuc3JfYWxsb2NhdGVkID0gMTsJLyogU2V0IDAgdXNlZCBieSBrZXJuZWwgKi8KLQlzcGluX2xvY2tfaW5pdCgmc2hhZG93X3JlZ2lzdGVycy5zcl9sb2NrKTsKIH0KIAogaW50IG1pcHNfc3JzX21heCh2b2lkKQpAQCAtOTg4LDM4ICsxMDgzLDMwIEBACiAJcmV0dXJuIHNoYWRvd19yZWdpc3RlcnMuc3Jfc3VwcG9ydGVkOwogfQogCi1pbnQgbWlwc19zcnNfYWxsb2MgKHZvaWQpCitpbnQgbWlwc19zcnNfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3Qgc2hhZG93X3JlZ2lzdGVycyAqc3IgPSAmc2hhZG93X3JlZ2lzdGVyczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKK2FnYWluOgorCXNldCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJnNyLT5zcl9hbGxvY2F0ZWQsIHNyLT5zcl9zdXBwb3J0ZWQpOworCWlmIChzZXQgPj0gc3ItPnNyX3N1cHBvcnRlZCkKKwkJcmV0dXJuIC0xOwogCi0JZm9yIChzZXQgPSAwOyBzZXQgPCBzci0+c3Jfc3VwcG9ydGVkOyBzZXQrKykgewotCQlpZiAoKHNyLT5zcl9hbGxvY2F0ZWQgJiAoMSA8PCBzZXQpKSA9PSAwKSB7Ci0JCQlzci0+c3JfYWxsb2NhdGVkIHw9IDEgPDwgc2V0OwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiBzZXQ7Ci0JCX0KLQl9CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoc2V0LCAmc3ItPnNyX2FsbG9jYXRlZCkpCisJCWdvdG8gYWdhaW47CiAKLQkvKiBOb25lIGF2YWlsYWJsZSAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNyLT5zcl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIC0xOworCXJldHVybiBzZXQ7CiB9CiAKLXZvaWQgbWlwc19zcnNfZnJlZSAoaW50IHNldCkKK3ZvaWQgbWlwc19zcnNfZnJlZShpbnQgc2V0KQogewogCXN0cnVjdCBzaGFkb3dfcmVnaXN0ZXJzICpzciA9ICZzaGFkb3dfcmVnaXN0ZXJzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3ItPnNyX2xvY2ssIGZsYWdzKTsKLQlzci0+c3JfYWxsb2NhdGVkICY9IH4oMSA8PCBzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNyLT5zcl9sb2NrLCBmbGFncyk7CisJY2xlYXJfYml0KHNldCwgJnNyLT5zcl9hbGxvY2F0ZWQpOwogfQogCi12b2lkICpzZXRfdmlfc3JzX2hhbmRsZXIgKGludCBuLCB2b2lkICphZGRyLCBpbnQgc3JzKQorc3RhdGljIHZvaWQgKnNldF92aV9zcnNfaGFuZGxlcihpbnQgbiwgdm9pZCAqYWRkciwgaW50IHNycykKIHsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZXI7CiAJdW5zaWduZWQgbG9uZyBvbGRfaGFuZGxlciA9IHZpX2hhbmRsZXJzW25dOwpAQCAtMTAzMiw4ICsxMTE5LDcgQEAKIAlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCWhhbmRsZXIgPSAodW5zaWduZWQgbG9uZykgZG9fZGVmYXVsdF92aTsKIAkJc3JzID0gMDsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQloYW5kbGVyID0gKHVuc2lnbmVkIGxvbmcpIGFkZHI7CiAJdmlfaGFuZGxlcnNbbl0gPSAodW5zaWduZWQgbG9uZykgYWRkcjsKIApAQCAtMTA0NSw4ICsxMTMxLDcgQEAKIAlpZiAoY3B1X2hhc192ZWljKSB7CiAJCWlmIChib2FyZF9iaW5kX2VpY19pbnRlcnJ1cHQpCiAJCQlib2FyZF9iaW5kX2VpY19pbnRlcnJ1cHQgKG4sIHNycyk7Ci0JfQotCWVsc2UgaWYgKGNwdV9oYXNfdmludCkgeworCX0gZWxzZSBpZiAoY3B1X2hhc192aW50KSB7CiAJCS8qIFNSU01hcCBpcyBvbmx5IGRlZmluZWQgaWYgc2hhZG93IHNldHMgYXJlIGltcGxlbWVudGVkICovCiAJCWlmIChtaXBzX3Nyc19tYXgoKSA+IDEpCiAJCQljaGFuZ2VfYzBfc3JzbWFwICgweGYgPDwgbio0LCBzcnMgPDwgbio0KTsKQEAgLTEwNjAsNiArMTE0NSwxNSBAQAogCiAJCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfdmksIGV4Y2VwdF92ZWNfdmlfbHVpOwogCQlleHRlcm4gY2hhciBleGNlcHRfdmVjX3ZpX29yaSwgZXhjZXB0X3ZlY192aV9lbmQ7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHByb3ZpZGUgdGhlIFNNVEMgdmVjdG9yZWQgaW50ZXJydXB0IGhhbmRsZXIKKwkJICogbm90IG9ubHkgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFuZGxlciwgYnV0IHdpdGggdGhlCisJCSAqIFN0YXR1cy5JTSBiaXQgdG8gYmUgbWFza2VkIGJlZm9yZSBnb2luZyB0aGVyZS4KKwkJICovCisJCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfdmlfbW9yaTsKKwkJY29uc3QgaW50IG1vcmlfb2Zmc2V0ID0gJmV4Y2VwdF92ZWNfdmlfbW9yaSAtICZleGNlcHRfdmVjX3ZpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJY29uc3QgaW50IGhhbmRsZXJfbGVuID0gJmV4Y2VwdF92ZWNfdmlfZW5kIC0gJmV4Y2VwdF92ZWNfdmk7CiAJCWNvbnN0IGludCBsdWlfb2Zmc2V0ID0gJmV4Y2VwdF92ZWNfdmlfbHVpIC0gJmV4Y2VwdF92ZWNfdmk7CiAJCWNvbnN0IGludCBvcmlfb2Zmc2V0ID0gJmV4Y2VwdF92ZWNfdmlfb3JpIC0gJmV4Y2VwdF92ZWNfdmk7CkBAIC0xMDczLDYgKzExNjcsMTIgQEAKIAkJfQogCiAJCW1lbWNweSAoYiwgJmV4Y2VwdF92ZWNfdmksIGhhbmRsZXJfbGVuKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCWlmIChuID4gNykKKwkJCXByaW50aygiVmVjdG9yIGluZGV4ICVkIGV4Y2VlZHMgU01UQyBtYXhpbXVtXG4iLCBuKTsKKwkJdyA9ICh1MzIgKikoYiArIG1vcmlfb2Zmc2V0KTsKKwkJKncgPSAoKncgJiAweGZmZmYwMDAwKSB8ICgweDEwMCA8PCBuKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCXcgPSAodTMyICopKGIgKyBsdWlfb2Zmc2V0KTsKIAkJKncgPSAoKncgJiAweGZmZmYwMDAwKSB8ICgoKHUzMiloYW5kbGVyID4+IDE2KSAmIDB4ZmZmZik7CiAJCXcgPSAodTMyICopKGIgKyBvcmlfb2Zmc2V0KTsKQEAgLTEwOTUsOSArMTE5NSw5IEBACiAJcmV0dXJuICh2b2lkICopb2xkX2hhbmRsZXI7CiB9CiAKLXZvaWQgKnNldF92aV9oYW5kbGVyIChpbnQgbiwgdm9pZCAqYWRkcikKK3ZvaWQgKnNldF92aV9oYW5kbGVyKGludCBuLCB2b2lkICphZGRyKQogewotCXJldHVybiBzZXRfdmlfc3JzX2hhbmRsZXIgKG4sIGFkZHIsIDApOworCXJldHVybiBzZXRfdmlfc3JzX2hhbmRsZXIobiwgYWRkciwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMTExMyw4ICsxMjEzLDI5IEBACiBleHRlcm4gYXNtbGlua2FnZSBpbnQgZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpOwogZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgKnNjKTsKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgc21wX3NhdmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpCit7CisJcmV0dXJuIGNwdV9oYXNfZnB1CisJICAgICAgID8gX3NhdmVfZnBfY29udGV4dChzYykKKwkgICAgICAgOiBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0KHNjKTsKK30KKworc3RhdGljIGludCBzbXBfcmVzdG9yZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0ICpzYykKK3sKKwlyZXR1cm4gY3B1X2hhc19mcHUKKwkgICAgICAgPyBfcmVzdG9yZV9mcF9jb250ZXh0KHNjKQorCSAgICAgICA6IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc2MpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxfaW5pdCh2b2lkKQogeworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBGb3Igbm93IGp1c3QgZG8gdGhlIGNwdV9oYXNfZnB1IGNoZWNrIHdoZW4gdGhlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCAqLworCXNhdmVfZnBfY29udGV4dCA9IHNtcF9zYXZlX2ZwX2NvbnRleHQ7CisJcmVzdG9yZV9mcF9jb250ZXh0ID0gc21wX3Jlc3RvcmVfZnBfY29udGV4dDsKKyNlbHNlCiAJaWYgKGNwdV9oYXNfZnB1KSB7CiAJCXNhdmVfZnBfY29udGV4dCA9IF9zYXZlX2ZwX2NvbnRleHQ7CiAJCXJlc3RvcmVfZnBfY29udGV4dCA9IF9yZXN0b3JlX2ZwX2NvbnRleHQ7CkBAIC0xMTIyLDYgKzEyNDMsNyBAQAogCQlzYXZlX2ZwX2NvbnRleHQgPSBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0OwogCQlyZXN0b3JlX2ZwX2NvbnRleHQgPSBmcHVfZW11bGF0b3JfcmVzdG9yZV9jb250ZXh0OwogCX0KKyNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX01JUFMzMl9DT01QQVQKQEAgLTExNTgsNiArMTI4MCwyMCBAQAogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgaW50IHN0YXR1c19zZXQgPSBTVDBfQ1UwOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlpbnQgc2Vjb25kYXJ5VEMgPSAwOworCWludCBib290VEMgPSAoY3B1ID09IDApOworCisJLyoKKwkgKiBPbmx5IGRvIHBlcl9jcHVfdHJhcF9pbml0KCkgZm9yIGZpcnN0IFRDIG9mIEVhY2ggVlBFLgorCSAqIE5vdGUgdGhhdCB0aGlzIGhhY2sgYXNzdW1lcyB0aGF0IHRoZSBTTVRDIGluaXQgY29kZQorCSAqIGFzc2lnbnMgVENzIGNvbnNlY3V0aXZlbHkgYW5kIGluIGFzY2VuZGluZyBvcmRlci4KKwkgKi8KKworCWlmICgoKHJlYWRfYzBfdGNiaW5kKCkgJiBUQ0JJTkRfQ1VSVEMpICE9IDApICYmCisJICAgICgocmVhZF9jMF90Y2JpbmQoKSAmIFRDQklORF9DVVJWUEUpID09IGNwdV9kYXRhW2NwdSAtIDFdLnZwZV9pZCkpCisJCXNlY29uZGFyeVRDID0gMTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAkvKgogCSAqIERpc2FibGUgY29wcm9jZXNzb3JzIGFuZCBzZWxlY3QgMzItYml0IG9yIDY0LWJpdCBhZGRyZXNzaW5nCkBAIC0xMTgwLDYgKzEzMTYsMTAgQEAKIAl3cml0ZV9jMF9od3JlbmEgKDB4MDAwMDAwMGYpOyAvKiBBbGxvdyByZGh3ciB0byBhbGwgcmVnaXN0ZXJzICovCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlpZiAoIXNlY29uZGFyeVRDKSB7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCiAJLyoKIAkgKiBJbnRlcnJ1cHQgaGFuZGxpbmcuCiAJICovCkBAIC0xMTk2LDYgKzEzMzYsOSBAQAogCQl9IGVsc2UKIAkJCXNldF9jMF9jYXVzZShDQVVTRUZfSVYpOwogCX0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJfQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCWNwdV9kYXRhW2NwdV0uYXNpZF9jYWNoZSA9IEFTSURfRklSU1RfVkVSU0lPTjsKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVAoKTsKQEAgLTEyMDUsOCArMTM0OCwxNCBAQAogCUJVR19PTihjdXJyZW50LT5tbSk7CiAJZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIGN1cnJlbnQpOwogCi0JY3B1X2NhY2hlX2luaXQoKTsKLQl0bGJfaW5pdCgpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlpZiAoYm9vdFRDKSB7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCQljcHVfY2FjaGVfaW5pdCgpOworCQl0bGJfaW5pdCgpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl9CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfQogCiAvKiBJbnN0YWxsIENQVSBleGNlcHRpb24gaGFuZGxlciAqLwpAQCAtMTI3OCw3ICsxNDI3LDcgQEAKIAlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgewogCQlpbnQgbnZlYyA9IGNwdV9oYXNfdmVpYyA/IDY0IDogODsKIAkJZm9yIChpID0gMDsgaSA8IG52ZWM7IGkrKykKLQkJCXNldF92aV9oYW5kbGVyIChpLCBOVUxMKTsKKwkJCXNldF92aV9oYW5kbGVyKGksIE5VTEwpOwogCX0KIAllbHNlIGlmIChjcHVfaGFzX2RpdmVjKQogCQlzZXRfaGFuZGxlcigweDIwMCwgJmV4Y2VwdF92ZWM0LCAweDgpOwpAQCAtMTI5Nyw2ICsxNDQ2LDcgQEAKIAlpZiAoYm9hcmRfYmVfaW5pdCkKIAkJYm9hcmRfYmVfaW5pdCgpOwogCisJc2V0X2V4Y2VwdF92ZWN0b3IoMCwgaGFuZGxlX2ludCk7CiAJc2V0X2V4Y2VwdF92ZWN0b3IoMSwgaGFuZGxlX3RsYm0pOwogCXNldF9leGNlcHRfdmVjdG9yKDIsIGhhbmRsZV90bGJsKTsKIAlzZXRfZXhjZXB0X3ZlY3RvcigzLCBoYW5kbGVfdGxicyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMmFkMGNlZC4uYjg0ZDFmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogCi0jdW5kZWYgbWlwcwkJLyogQ1BQIHJlYWxseSBzdWNrcyBmb3IgdGhpcyBqb2IgICovCisjdW5kZWYgbWlwcwogI2RlZmluZSBtaXBzIG1pcHMKIE9VVFBVVF9BUkNIKG1pcHMpCiBFTlRSWShrZXJuZWxfZW50cnkpCkBAIC0xNTEsMjMgKzE1MSwxMyBAQAogCiAgIC8qIFRoaXMgaXMgdGhlIE1JUFMgc3BlY2lmaWMgbWRlYnVnIHNlY3Rpb24uICAqLwogICAubWRlYnVnIDogeyAqKC5tZGVidWcpIH0KLSAgLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgRUxGIGJhY2tlbmRzIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCi0gICAgIGNvbnZlcnRlZCB0byB0aGUgbmV3IHN0eWxlIGxpbmtlci4gICovCi0gIC5zdGFiIDAgOiB7ICooLnN0YWIpIH0KLSAgLnN0YWJzdHIgMCA6IHsgKiguc3RhYnN0cikgfQotICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KLSAgICAgU3ltYm9scyBpbiB0aGUgLmRlYnVnIERXQVJGIHNlY3Rpb24gYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gICAgIHNlY3Rpb24gc28gd2UgYmVnaW4gLmRlYnVnIGF0IDAuICBJdCdzIG5vdCBjbGVhciB5ZXQgd2hhdCBuZWVkcyB0byBoYXBwZW4KLSAgICAgZm9yIHRoZSBvdGhlcnMuICAgKi8KLSAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9Ci0gIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9Ci0gIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9Ci0gIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQotICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQotICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorCisgIFNUQUJTX0RFQlVHCisKKyAgRFdBUkZfREVCVUcKKwogICAvKiBUaGVzZSBtdXN0IGFwcGVhciByZWdhcmRsZXNzIG9mICAuICAqLwogICAuZ3B0YWIuc2RhdGEgOiB7ICooLmdwdGFiLmRhdGEpICooLmdwdGFiLnNkYXRhKSB9CiAgIC5ncHRhYi5zYnNzIDogeyAqKC5ncHRhYi5ic3MpICooLmdwdGFiLnNic3MpIH0KLSAgLmNvbW1lbnQgOiB7ICooLmNvbW1lbnQpIH0KICAgLm5vdGUgOiB7ICooLm5vdGUpIH0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IGFlODNiNzUuLjg1ZDdkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMTMsNyArMTMsNiBAQAogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgogICovCiAKIC8qCkBAIC0yNywxMSArMjYsOCBAQAogICoKICAqIFRvIGxvYWQgYW5kIHJ1biwgc2ltcGx5IGNhdCBhIFNQICdwcm9ncmFtIGZpbGUnIHRvIC9kZXYvdnBlMS4KICAqIGkuZSBjYXQgc3BhcHAgPi9kZXYvdnBlMS4KLSAqCi0gKiBZb3UnbGwgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgZGV2aWNlIGZpbGVzLgotICogbWtub2QgL2Rldi92cGUwIGMgNjMgMAotICogbWtub2QgL2Rldi92cGUxIGMgNjMgMQogICovCisKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU1LDYgKzUxLDggQEAKICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdnBlLmg+CisjaW5jbHVkZSA8YXNtL2tzcGQuaD4KIAogdHlwZWRlZiB2b2lkICp2cGVfaGFuZGxlOwogCkBAIC02OCw2ICs2NiwxMSBAQAogc3RhdGljIGNoYXIgbW9kdWxlX25hbWVbXSA9ICJ2cGUiOwogc3RhdGljIGludCBtYWpvcjsKIAorI2lmZGVmIENPTkZJR19NSVBTX0FQU1BfS1NQRAorIHN0YXRpYyBzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zIGtzcGRfZXZlbnRzOworc3RhdGljIGludCBrc3BkX2V2ZW50c19yZXFkID0gMDsKKyNlbmRpZgorCiAvKiBncmFiIHRoZSBsaWtlbHkgYW1vdW50IG9mIG1lbW9yeSB3ZSB3aWxsIG5lZWQuICovCiAjaWZkZWYgQ09ORklHX01JUFNfVlBFX0xPQURFUl9UT00KICNkZWZpbmUgUF9TSVpFICgyICogMTAyNCAqIDEwMjQpCkBAIC03Niw3ICs3OSwxMCBAQAogI2RlZmluZSBQX1NJWkUgKDI1NiAqIDEwMjQpCiAjZW5kaWYKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c2ljYWxfbWVtc2l6ZTsKKwogI2RlZmluZSBNQVhfVlBFUyAxNgorI2RlZmluZSBWUEVfUEFUSF9NQVggMjU2CiAKIGVudW0gdnBlX3N0YXRlIHsKIAlWUEVfU1RBVEVfVU5VU0VEID0gMCwKQEAgLTEwMiw2ICsxMDgsOCBAQAogCXVuc2lnbmVkIGxvbmcgbGVuOwogCWNoYXIgKnBidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBwbGVuOworCXVuc2lnbmVkIGludCB1aWQsIGdpZDsKKwljaGFyIGN3ZFtWUEVfUEFUSF9NQVhdOwogCiAJdW5zaWduZWQgbG9uZyBfX3N0YXJ0OwogCkBAIC0xMTMsNiArMTIxLDkgQEAKIAogCS8qIHNoYXJlZCBzeW1ib2wgYWRkcmVzcyAqLwogCXZvaWQgKnNoYXJlZF9wdHI7CisKKwkvKiB0aGUgbGlzdCBvZiB3aG8gd2FudHMgdG8ga25vdyB3aGVuIHNvbWV0aGluZyBtYWpvciBoYXBwZW5zICovCisJc3RydWN0IGxpc3RfaGVhZCBub3RpZnk7CiB9OwogCiBzdHJ1Y3QgdGMgewpAQCAtMTM4LDcgKzE0OSw3IEBACiB9IHZwZWNvbnRyb2w7CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHJvZ21lbSh2b2lkICpwdHIpOwotc3RhdGljIHZvaWQgZHVtcF92cGUoc3RydWN0IHZwZSAqIHYpOworLyogc3RhdGljIF9fYXR0cmlidXRlX3VzZWRfXyB2b2lkIGR1bXBfdnBlKHN0cnVjdCB2cGUgKiB2KTsgKi8KIGV4dGVybiB2b2lkIHNhdmVfZ3BfYWRkcmVzcyh1bnNpZ25lZCBpbnQgc2VjYmFzZSwgdW5zaWduZWQgaW50IHJlbCk7CiAKIC8qIGdldCB0aGUgdnBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1pbm9yICovCkBAIC0xNDYsMTIgKzE1NywxNCBAQAogewogCXN0cnVjdCB2cGUgKnY7CiAKKwlpZiAoIWNwdV9oYXNfbWlwc210KQorCQlyZXR1cm4gTlVMTDsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkodiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHYtPm1pbm9yID09IG1pbm9yKQogCQkJcmV0dXJuIHY7CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgIlZQRTogZ2V0X3ZwZSBtaW5vciAlZCBub3QgZm91bmRcbiIsIG1pbm9yKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTY1LDggKzE3OCw2IEBACiAJCQlyZXR1cm4gdDsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiVlBFOiBnZXRfdGMgaW5kZXggJWQgbm90IGZvdW5kXG4iLCBpbmRleCk7Ci0KIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTc5LDggKzE5MCw2IEBACiAJCQlyZXR1cm4gdDsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiVlBFOiBBbGwgVEMncyBhcmUgaW4gdXNlXG4iKTsKLQogCXJldHVybiBOVUxMOwogfQogCkBAIC0xOTAsMTMgKzE5OSwxMyBAQAogCXN0cnVjdCB2cGUgKnY7CiAKIAlpZiAoKHYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBhbGxvY192cGUgbm8gbWVtXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJnYtPnRjKTsKIAlsaXN0X2FkZF90YWlsKCZ2LT5saXN0LCAmdnBlY29udHJvbC52cGVfbGlzdCk7CiAKKwlJTklUX0xJU1RfSEVBRCgmdi0+bm90aWZ5KTsKIAl2LT5taW5vciA9IG1pbm9yOwogCXJldHVybiB2OwogfQpAQCAtMjA3LDcgKzIxNiw2IEBACiAJc3RydWN0IHRjICp0OwogCiAJaWYgKCh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBhbGxvY190YyBubyBtZW1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTIzNiwyMCArMjQ0LDE2IEBACiAJcHJpbnRrKCJjb25maWczIDB4JWx4IE1UICVsZFxuIiwgdmFsLAogCSAgICAgICAodmFsICYgQ09ORklHM19NVCkgPj4gQ09ORklHM19NVF9TSElGVCk7CiAKLQl2YWwgPSByZWFkX2MwX212cGNvbmYwKCk7Ci0JcHJpbnRrKCJtdnBjb25mMCAweCVseCwgUFZQRSAlbGQgUFRDICVsZCBNICVsZFxuIiwgdmFsLAotCSAgICAgICAodmFsICYgTVZQQ09ORjBfUFZQRSkgPj4gTVZQQ09ORjBfUFZQRV9TSElGVCwKLQkgICAgICAgdmFsICYgTVZQQ09ORjBfUFRDLCAodmFsICYgTVZQQ09ORjBfTSkgPj4gTVZQQ09ORjBfTV9TSElGVCk7Ci0KIAl2YWwgPSByZWFkX2MwX212cGNvbnRyb2woKTsKIAlwcmludGsoIk1WUENvbnRyb2wgMHglbHgsIFNUTEIgJWxkIFZQQyAlbGQgRVZQICVsZFxuIiwgdmFsLAogCSAgICAgICAodmFsICYgTVZQQ09OVFJPTF9TVExCKSA+PiBNVlBDT05UUk9MX1NUTEJfU0hJRlQsCiAJICAgICAgICh2YWwgJiBNVlBDT05UUk9MX1ZQQykgPj4gTVZQQ09OVFJPTF9WUENfU0hJRlQsCiAJICAgICAgICh2YWwgJiBNVlBDT05UUk9MX0VWUCkpOwogCi0JdmFsID0gcmVhZF9jMF92cGVjb25mMCgpOwotCXByaW50aygiVlBFQ29uZjAgMHglbHggTVZQICVsZFxuIiwgdmFsLAotCSAgICAgICAodmFsICYgVlBFQ09ORjBfTVZQKSA+PiBWUEVDT05GMF9NVlBfU0hJRlQpOworCXZhbCA9IHJlYWRfYzBfbXZwY29uZjAoKTsKKwlwcmludGsoIm12cGNvbmYwIDB4JWx4LCBQVlBFICVsZCBQVEMgJWxkIE0gJWxkXG4iLCB2YWwsCisJICAgICAgICh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZULAorCSAgICAgICB2YWwgJiBNVlBDT05GMF9QVEMsICh2YWwgJiBNVlBDT05GMF9NKSA+PiBNVlBDT05GMF9NX1NISUZUKTsKIH0KIAogLyogRmluZCBzb21lIFZQRSBwcm9ncmFtIHNwYWNlICAqLwpAQCAtMzU0LDkgKzM1OCw5IEBACiAJfQogCiAJaWYoIChyZWwgPiAzMjc2OCkgfHwgKHJlbCA8IC0zMjc2OCkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImFwcGx5X3JfbWlwc19ncHJlbDE2OiByZWxhdGl2ZSBhZGRyZXNzIG91dCBvZiByYW5nZSAweCV4ICVkXG4iLAotCQkgICAgICAgcmVsLCByZWwpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogYXBwbHlfcl9taXBzX2dwcmVsMTY6ICIKKwkJICAgICAgICJyZWxhdGl2ZSBhZGRyZXNzIDB4JXggb3V0IG9mIHJhbmdlIG9mIGdwIHJlZ2lzdGVyXG4iLAorCQkgICAgICAgcmVsKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIApAQCAtMzc0LDggKzM3OCw4IEBACiAJcmVsIC09IDE7CQkvLyBhbmQgb25lIGluc3RydWN0aW9uIGxlc3MgZHVlIHRvIHRoZSBicmFuY2ggZGVsYXkgc2xvdC4KIAogCWlmKCAocmVsID4gMzI3NjgpIHx8IChyZWwgPCAtMzI3NjgpICkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJhcHBseV9yX21pcHNfcGMxNjogcmVsYXRpdmUgYWRkcmVzcyBvdXQgb2YgcmFuZ2UgMHgleFxuIiwgcmVsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQRSBsb2FkZXI6ICIKKyAJCSAgICAgICAiYXBwbHlfcl9taXBzX3BjMTY6IHJlbGF0aXZlIGFkZHJlc3Mgb3V0IG9mIHJhbmdlIDB4JXhcbiIsIHJlbCk7CiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKQEAgLTM5Niw3ICs0MDAsOCBAQAogCQkJICAgRWxmMzJfQWRkciB2KQogewogCWlmICh2ICUgNCkgewotCQlwcmludGsoS0VSTl9FUlIgIm1vZHVsZSAlczogZGFuZ2Vyb3VzIHJlbG9jYXRpb24gbW9kNFxuIiwgbWUtPm5hbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlBFIGxvYWRlcjogYXBwbHlfcl9taXBzXzI2ICIKKwkJICAgICAgICIgdW5hbGlnbmVkIHJlbG9jYXRpb25cbiIpOwogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCkBAIC00NTksMTIgKzQ2NCwxMyBAQAogCQkJLyoKIAkJCSAqIFRoZSB2YWx1ZSBmb3IgdGhlIEhJMTYgaGFkIGJlc3QgYmUgdGhlIHNhbWUuCiAJCQkgKi8KLQkJCWlmICh2ICE9IGwtPnZhbHVlKSB7Ci0JCQkJcHJpbnRrKCIlZCAhPSAlZFxuIiwgdiwgbC0+dmFsdWUpOwotCQkJCWdvdG8gb3V0X2RhbmdlcjsKKyAJCQlpZiAodiAhPSBsLT52YWx1ZSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICJWUEUgbG9hZGVyOiAiCisJCQkJICAgICAgICJhcHBseV9yX21pcHNfbG8xNi9oaTE2OiAJIgorCQkJCSAgICAgICAiaW5jb25zaXN0ZW50IHZhbHVlIGluZm9ybWF0aW9uXG4iKTsKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CiAJCQl9CiAKLQogCQkJLyoKIAkJCSAqIERvIHRoZSBISTE2IHJlbG9jYXRpb24uICBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgZG9uJ3QKIAkJCSAqIG5lZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0aGUgTE8xNiBpdHNlbGYsIGV4Y2VwdApAQCAtNTAwLDExICs1MDYsNiBAQAogCSpsb2NhdGlvbiA9IGluc25sbzsKIAogCXJldHVybiAwOwotCi1vdXRfZGFuZ2VyOgotCXByaW50ayhLRVJOX0VSUiAibW9kdWxlICVzOiBkYW5nZXJvdXMgIiAicmVsb2NhdGlvblxuIiwgbWUtPm5hbWUpOwotCi0JcmV0dXJuIC1FTk9FWEVDOwogfQogCiBzdGF0aWMgaW50ICgqcmVsb2NfaGFuZGxlcnNbXSkgKHN0cnVjdCBtb2R1bGUgKm1lLCB1aW50MzJfdCAqbG9jYXRpb24sCkBAIC01MTgsNiArNTE5LDE1IEBACiAJW1JfTUlQU19QQzE2XSA9IGFwcGx5X3JfbWlwc19wYzE2CiB9OwogCitzdGF0aWMgY2hhciAqcnN0cnNbXSA9IHsKKyAgICAJW1JfTUlQU19OT05FXQk9ICJNSVBTX05PTkUiLAorCVtSX01JUFNfMzJdCT0gIk1JUFNfMzIiLAorCVtSX01JUFNfMjZdCT0gIk1JUFNfMjYiLAorCVtSX01JUFNfSEkxNl0JPSAiTUlQU19ISTE2IiwKKwlbUl9NSVBTX0xPMTZdCT0gIk1JUFNfTE8xNiIsCisJW1JfTUlQU19HUFJFTDE2XSA9ICJNSVBTX0dQUkVMMTYiLAorCVtSX01JUFNfUEMxNl0gPSAiTUlQU19QQzE2IgorfTsKIAogaW50IGFwcGx5X3JlbG9jYXRpb25zKEVsZjMyX1NoZHIgKnNlY2hkcnMsCiAJCSAgICAgIGNvbnN0IGNoYXIgKnN0cnRhYiwKQEAgLTU1MiwxNSArNTYyLDEzIEBACiAKIAkJcmVzID0gcmVsb2NfaGFuZGxlcnNbRUxGMzJfUl9UWVBFKHJfaW5mbyldKG1lLCBsb2NhdGlvbiwgdik7CiAJCWlmKCByZXMgKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRwotCQkJICAgICAgICJyZWxvY2F0aW9uIGVycm9yIDB4JXggc3ltIHJlZmVyIDwlcz4gdmFsdWUgMHgleCAiCi0JCQkgICAgICAgInR5cGUgMHgleCByX2luZm8gMHgleFxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KWxvY2F0aW9uLCBzdHJ0YWIgKyBzeW0tPnN0X25hbWUsIHYsCi0JCQkgICAgICAgcl9pbmZvLCBFTEYzMl9SX1RZUEUocl9pbmZvKSk7Ci0JCX0KLQotCQlpZiAocmVzKQorCQkJY2hhciAqciA9IHJzdHJzW0VMRjMyX1JfVFlQRShyX2luZm8pXTsKKwkJICAgIAlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiAudGV4dCsweCV4ICIKKwkJCSAgICAgICAicmVsb2NhdGlvbiB0eXBlICVzIGZvciBzeW1ib2wgXCIlc1wiIGZhaWxlZFxuIiwKKwkJCSAgICAgICByZWxbaV0ucl9vZmZzZXQsIHIgPyByIDogIlVOS05PV04iLAorCQkJICAgICAgIHN0cnRhYiArIHN5bS0+c3RfbmFtZSk7CiAJCQlyZXR1cm4gcmVzOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NzYsNyArNTg0LDcgQEAKIAogCiAvKiBDaGFuZ2UgYWxsIHN5bWJvbHMgc28gdGhhdCBzaF92YWx1ZSBlbmNvZGVzIHRoZSBwb2ludGVyIGRpcmVjdGx5LiAqLwotc3RhdGljIGludCBzaW1wbGlmeV9zeW1ib2xzKEVsZl9TaGRyICogc2VjaGRycywKK3N0YXRpYyB2b2lkIHNpbXBsaWZ5X3N5bWJvbHMoRWxmX1NoZHIgKiBzZWNoZHJzLAogCQkJICAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJCSAgICBjb25zdCBjaGFyICpzdHJ0YWIsCiAJCQkgICAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywKQEAgLTU4NSwxOCArNTkzLDIxIEBACiAJRWxmX1N5bSAqc3ltID0gKHZvaWQgKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgc2VjYmFzZSwgYnNzYmFzZSA9IDA7CiAJdW5zaWduZWQgaW50IGksIG4gPSBzZWNoZHJzW3N5bWluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwotCWludCByZXQgPSAwLCBzaXplOworCWludCBzaXplOwogCiAJLyogZmluZCB0aGUgLmJzcyBzZWN0aW9uIGZvciBDT01NT04gc3ltYm9scyAqLwogCWZvciAoaSA9IDA7IGkgPCBuc2VjczsgaSsrKSB7Ci0JCWlmIChzdHJuY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsICIuYnNzIiwgNCkgPT0gMCkKKwkJaWYgKHN0cm5jbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIi5ic3MiLCA0KSA9PSAwKSB7CiAJCQlic3NiYXNlID0gc2VjaGRyc1tpXS5zaF9hZGRyOworCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAJCXN3aXRjaCAoc3ltW2ldLnN0X3NobmR4KSB7CiAJCWNhc2UgU0hOX0NPTU1PTjoKLQkJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3ltYm9sIGluIHRoZSAuYnNzIHNlY3Rpb24uIHN0X3ZhbHVlIGlzIGN1cnJlbnRseSBzaXplLgorCQkJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIC5ic3Mgc2VjdGlvbi4KKwkJCSAgIHN0X3ZhbHVlIGlzIGN1cnJlbnRseSBzaXplLgogCQkJICAgV2Ugd2FudCBpdCB0byBoYXZlIHRoZSBhZGRyZXNzIG9mIHRoZSBzeW1ib2wuICovCiAKIAkJCXNpemUgPSBzeW1baV0uc3RfdmFsdWU7CkBAIC02MTQsMTEgKzYyNSw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIFNITl9NSVBTX1NDT01NT046Ci0KLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgInNpbXBsaWZ5X3N5bWJvbHM6IGlnbm9yaW5nIFNITl9NSVBTX1NDT01NT04gc3ltYm9sIDwlcz4gc3Rfc2huZHggJWRcbiIsCi0JCQkgICAgICAgc3RydGFiICsgc3ltW2ldLnN0X25hbWUsIHN5bVtpXS5zdF9zaG5keCk7Ci0KKwkJCXByaW50ayhLRVJOX0RFQlVHICJzaW1wbGlmeV9zeW1ib2xzOiBpZ25vcmluZyBTSE5fTUlQU19TQ09NTU9OIgorCQkJICAgICAgICJzeW1ib2wgPCVzPiBzdF9zaG5keCAlZFxuIiwgc3RydGFiICsgc3ltW2ldLnN0X25hbWUsCisJCQkgICAgICAgc3ltW2ldLnN0X3NobmR4KTsKIAkJCS8vIC5zYnNzIHNlY3Rpb24KIAkJCWJyZWFrOwogCkBAIC02MzIsMTAgKzY0MSw3IEBACiAJCQlzeW1baV0uc3RfdmFsdWUgKz0gc2VjYmFzZTsKIAkJCWJyZWFrOwogCQl9Ci0KIAl9Ci0KLQlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgREVCVUdfRUxGTE9BREVSCkBAIC02NTUsOSArNjYxLDI2IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfdGMoc3RydWN0IHRjICp0KQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogVEMgaW5kZXggJWQgVENTdGF0dXMgMHglbHggaGFsdCAweCVseFxuIiwKLQkgICAgICAgdC0+aW5kZXgsIHJlYWRfdGNfYzBfdGNzdGF0dXMoKSwgcmVhZF90Y19jMF90Y2hhbHQoKSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiB0Y3Jlc3RhcnQgMHglbHhcbiIsIHJlYWRfdGNfYzBfdGNyZXN0YXJ0KCkpOworICAJdW5zaWduZWQgbG9uZyB2YWw7CisKKyAgCXNldHRjKHQtPmluZGV4KTsKKyAJcHJpbnRrKEtFUk5fREVCVUcgIlZQRSBsb2FkZXI6IFRDIGluZGV4ICVkIHRhcmd0YyAlbGQgIgorIAkgICAgICAgIlRDU3RhdHVzIDB4JWx4IGhhbHQgMHglbHhcbiIsCisgIAkgICAgICAgdC0+aW5kZXgsIHJlYWRfYzBfdnBlY29udHJvbCgpICYgVlBFQ09OVFJPTF9UQVJHVEMsCisgIAkgICAgICAgcmVhZF90Y19jMF90Y3N0YXR1cygpLCByZWFkX3RjX2MwX3RjaGFsdCgpKTsKKworIAlwcmludGsoS0VSTl9ERUJVRyAiIHRjcmVzdGFydCAweCVseFxuIiwgcmVhZF90Y19jMF90Y3Jlc3RhcnQoKSk7CisgCXByaW50ayhLRVJOX0RFQlVHICIgdGNiaW5kIDB4JWx4XG4iLCByZWFkX3RjX2MwX3RjYmluZCgpKTsKKworICAJdmFsID0gcmVhZF9jMF92cGVjb25mMCgpOworIAlwcmludGsoS0VSTl9ERUJVRyAiIFZQRUNvbmYwIDB4JWx4IE1WUCAlbGRcbiIsIHZhbCwKKyAgCSAgICAgICAodmFsICYgVlBFQ09ORjBfTVZQKSA+PiBWUEVDT05GMF9NVlBfU0hJRlQpOworCisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgc3RhdHVzIDB4JWx4XG4iLCByZWFkX3ZwZV9jMF9zdGF0dXMoKSk7CisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgY2F1c2UgMHglbHhcbiIsIHJlYWRfdnBlX2MwX2NhdXNlKCkpOworCisgCXByaW50ayhLRVJOX0RFQlVHICIgYzAgYmFkdmFkZHIgMHglbHhcbiIsIHJlYWRfdnBlX2MwX2JhZHZhZGRyKCkpOworIAlwcmludGsoS0VSTl9ERUJVRyAiIGMwIGVwYyAweCVseFxuIiwgcmVhZF92cGVfYzBfZXBjKCkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wX3RjbGlzdCh2b2lkKQpAQCAtNjcyLDk2ICs2OTUsMTA4IEBACiAvKiBXZSBhcmUgcHJlcGFyZWQgc28gY29uZmlndXJlIGFuZCBzdGFydCB0aGUgVlBFLi4uICovCiBpbnQgdnBlX3J1bihzdHJ1Y3QgdnBlICogdikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm47CisJdW5zaWduZWQgbG9uZyB2YWwsIGRtdF9mbGFnOwogCXN0cnVjdCB0YyAqdDsKIAogCS8qIGNoZWNrIHdlIGFyZSB0aGUgTWFzdGVyIFZQRSAqLwogCXZhbCA9IHJlYWRfYzBfdnBlY29uZjAoKTsKIAlpZiAoISh2YWwgJiBWUEVDT05GMF9NVlApKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJWUEU6IG9ubHkgTWFzdGVyIFZQRSdzIGFyZSBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBNVFxuIik7CisJCSAgICAgICAiVlBFIGxvYWRlcjogb25seSBNYXN0ZXIgVlBFJ3MgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIE1UXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIGRpc2FibGUgTVQgKHVzaW5nIGR2cGUpICovCiAJZHZwZSgpOwogCisJaWYgKCFsaXN0X2VtcHR5KCZ2LT50YykpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHQgPSBsaXN0X2VudHJ5KHYtPnRjLm5leHQsIHN0cnVjdCB0YywgdGMpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBUQyAlZCBpcyBhbHJlYWR5IGluIHVzZS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+aW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FWEVDOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBObyBUQydzIGFzc29jaWF0ZWQgd2l0aCBWUEUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHYtPm1pbm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7CisgICAgICAgIH0KKwogCS8qIFB1dCBNVlBFJ3MgaW50byAnY29uZmlndXJhdGlvbiBzdGF0ZScgKi8KIAlzZXRfYzBfbXZwY29udHJvbChNVlBDT05UUk9MX1ZQQyk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnYtPnRjKSkgewotCQlpZiAoKHQgPSBsaXN0X2VudHJ5KHYtPnRjLm5leHQsIHN0cnVjdCB0YywgdGMpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IFRDICVkIGlzIGFscmVhZHkgaW4gdXNlLlxuIiwKLQkJCSAgICAgICB0LT5pbmRleCk7Ci0JCQlyZXR1cm4gLUVOT0VYRUM7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IE5vIFRDJ3MgYXNzb2NpYXRlZCB3aXRoIFZQRSAlZFxuIiwKLQkJICAgICAgIHYtPm1pbm9yKTsKLQkJcmV0dXJuIC1FTk9FWEVDOwotCX0KLQogCXNldHRjKHQtPmluZGV4KTsKIAotCXZhbCA9IHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCk7Ci0KIAkvKiBzaG91bGQgY2hlY2sgaXQgaXMgaGFsdGVkLCBhbmQgbm90IGFjdGl2YXRlZCAqLwogCWlmICgocmVhZF90Y19jMF90Y3N0YXR1cygpICYgVENTVEFUVVNfQSkgfHwgIShyZWFkX3RjX2MwX3RjaGFsdCgpICYgVENIQUxUX0gpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogVEMgJWQgaXMgYWxyZWFkeSBkb2luZyBzb21ldGhpbmchXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBUQyAlZCBpcyBhbHJlYWR5IGRvaW5nIHNvbWV0aGluZyFcbiIsCiAJCSAgICAgICB0LT5pbmRleCk7Ci0KIAkJZHVtcF90Y2xpc3QoKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAorCS8qCisJICogRGlzYWJsZSBtdWx0aS10aHJlYWRlZCBleGVjdXRpb24gd2hpbHN0IHdlIGFjdGl2YXRlLCBjbGVhciB0aGUKKwkgKiBoYWx0IGJpdCBhbmQgYm91bmQgdGhlIHRjIHRvIHRoZSBvdGhlciBWUEUuLi4KKwkgKi8KKwlkbXRfZmxhZyA9IGRtdCgpOworCiAJLyogV3JpdGUgdGhlIGFkZHJlc3Mgd2Ugd2FudCBpdCB0byBzdGFydCBydW5uaW5nIGZyb20gaW4gdGhlIFRDUEMgcmVnaXN0ZXIuICovCiAJd3JpdGVfdGNfYzBfdGNyZXN0YXJ0KCh1bnNpZ25lZCBsb25nKXYtPl9fc3RhcnQpOwotCi0JLyogd3JpdGUgdGhlIHNpdmNfaW5mbyBhZGRyZXNzIHRvIHRjY29udGV4dCAqLwogCXdyaXRlX3RjX2MwX3RjY29udGV4dCgodW5zaWduZWQgbG9uZykwKTsKLQotCS8qIFNldCB1cCB0aGUgWFRDIGJpdCBpbiB2cGVjb25mMCB0byBwb2ludCBhdCBvdXIgdGMgKi8KLQl3cml0ZV92cGVfYzBfdnBlY29uZjAocmVhZF92cGVfYzBfdnBlY29uZjAoKSB8ICh0LT5pbmRleCA8PCBWUEVDT05GMF9YVENfU0hJRlQpKTsKLQotCS8qIG1hcmsgdGhlIFRDIGFzIGFjdGl2YXRlZCwgbm90IGludGVycnVwdCBleGVtcHQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLworCS8qCisJICogTWFyayB0aGUgVEMgYXMgYWN0aXZhdGVkLCBub3QgaW50ZXJydXB0IGV4ZW1wdCBhbmQgbm90IGR5bmFtaWNhbGx5CisJICogYWxsb2NhdGFibGUKKwkgKi8KIAl2YWwgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7CiAJdmFsID0gKHZhbCAmIH4oVENTVEFUVVNfREEgfCBUQ1NUQVRVU19JWE1UKSkgfCBUQ1NUQVRVU19BOwogCXdyaXRlX3RjX2MwX3Rjc3RhdHVzKHZhbCk7CiAKIAl3cml0ZV90Y19jMF90Y2hhbHQocmVhZF90Y19jMF90Y2hhbHQoKSAmIH5UQ0hBTFRfSCk7CiAKLQkvKiBzZXQgdXAgVlBFMSAqLwotCXdyaXRlX3ZwZV9jMF92cGVjb250cm9sKHJlYWRfdnBlX2MwX3ZwZWNvbnRyb2woKSAmIH5WUEVDT05UUk9MX1RFKTsJLy8gbm8gbXVsdGlwbGUgVEMncwotCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgVlBFQ09ORjBfVlBBKTsJLy8gZW5hYmxlIHRoaXMgVlBFCi0KIAkvKgogCSAqIFRoZSBzZGUta2l0IHBhc3NlcyAnbWVtc2l6ZScgdG8gX19zdGFydCBpbiAkYTMsIHNvIHNldCBzb21ldGhpbmcKLQkgKiBoZXJlLi4uCi0JICogT3Igc2V0ICRhMyAocmVnaXN0ZXIgNykgdG8gemVybyBhbmQgZGVmaW5lIERGTFRfU1RBQ0tfU0laRSBhbmQKKwkgKiBoZXJlLi4uICBPciBzZXQgJGEzIHRvIHplcm8gYW5kIGRlZmluZSBERkxUX1NUQUNLX1NJWkUgYW5kCiAJICogREZMVF9IRUFQX1NJWkUgd2hlbiB5b3UgY29tcGlsZSB5b3VyIHByb2dyYW0KIAkgKi8KKyAJbXR0Z3ByKDcsIHBoeXNpY2FsX21lbXNpemUpOwogCi0JbXR0Z3ByKDcsIDApOwogCi0JLyogc2V0IGNvbmZpZyB0byBiZSB0aGUgc2FtZSBhcyB2cGUwLCBwYXJ0aWN1bGFybHkga3NlZzAgY29oZXJlbmN5IGFsZyAqLwotCXdyaXRlX3ZwZV9jMF9jb25maWcocmVhZF9jMF9jb25maWcoKSk7CisJLyogc2V0IHVwIFZQRTEgKi8KKwkvKgorCSAqIGJpbmQgdGhlIFRDIHRvIFZQRSAxIGFzIGxhdGUgYXMgcG9zc2libGUgc28gd2Ugb25seSBoYXZlIHRoZSBmaW5hbAorCSAqIFZQRSByZWdpc3RlcnMgdG8gc2V0IHVwLCBhbmQgc28gYW4gRUpUQUcgcHJvYmUgY2FuIHRyaWdnZXIgb24gaXQKKwkgKi8KKyAJd3JpdGVfdGNfYzBfdGNiaW5kKChyZWFkX3RjX2MwX3RjYmluZCgpICYgflRDQklORF9DVVJWUEUpIHwgdi0+bWlub3IpOworCisgICAgICAgIC8qIFNldCB1cCB0aGUgWFRDIGJpdCBpbiB2cGVjb25mMCB0byBwb2ludCBhdCBvdXIgdGMgKi8KKyAgICAgICAgd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKCAocmVhZF92cGVfYzBfdnBlY29uZjAoKSAmIH4oVlBFQ09ORjBfWFRDKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICh0LT5pbmRleCA8PCBWUEVDT05GMF9YVENfU0hJRlQpKTsKKworICAgICAgICAvKiBlbmFibGUgdGhpcyBWUEUgKi8KKyAgICAgICAgd3JpdGVfdnBlX2MwX3ZwZWNvbmYwKHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkgfCBWUEVDT05GMF9WUEEpOwogCiAJLyogY2xlYXIgb3V0IGFueSBsZWZ0IG92ZXJzIGZyb20gYSBwcmV2aW91cyBwcm9ncmFtICovCisJd3JpdGVfdnBlX2MwX3N0YXR1cygwKTsKIAl3cml0ZV92cGVfYzBfY2F1c2UoMCk7CiAKIAkvKiB0YWtlIHN5c3RlbSBvdXQgb2YgY29uZmlndXJhdGlvbiBzdGF0ZSAqLwogCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOwogCi0JLyogY2xlYXIgaW50ZXJydXB0cyBlbmFibGVkIElFLCBFUkwsIEVYTCwgYW5kIEtTVSBmcm9tIGMwIHN0YXR1cyAqLwotCXdyaXRlX3ZwZV9jMF9zdGF0dXMocmVhZF92cGVfYzBfc3RhdHVzKCkgJiB+KFNUMF9FUkwgfCBTVDBfS1NVIHwgU1QwX0lFIHwgU1QwX0VYTCkpOworCS8qIG5vdyBzYWZlIHRvIHJlLWVuYWJsZSBtdWx0aS10aHJlYWRpbmcgKi8KKwllbXQoZG10X2ZsYWcpOwogCiAJLyogc2V0IGl0IHJ1bm5pbmcgKi8KIAlldnBlKEVWUEVfRU5BQkxFKTsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkobiwgJnYtPm5vdGlmeSwgbGlzdCkgeworCQluLT5zdGFydCh2LT5taW5vcik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfdnBlX3N5bWJvbHMoc3RydWN0IHZwZSAqIHYsIEVsZl9TaGRyICogc2VjaGRycywKK3N0YXRpYyBpbnQgZmluZF92cGVfc3ltYm9scyhzdHJ1Y3QgdnBlICogdiwgRWxmX1NoZHIgKiBzZWNoZHJzLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwgY29uc3QgY2hhciAqc3RydGFiLAogCQkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKQEAgLTc3OCwyNiArODEzLDI4IEBACiAJCX0KIAl9CiAKKwlpZiAoICh2LT5fX3N0YXJ0ID09IDApIHx8ICh2LT5zaGFyZWRfcHRyID09IE5VTEwpKQorCQlyZXR1cm4gLTE7CisKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIEFsbG9jYXRlcyBhIFZQRSB3aXRoIHNvbWUgcHJvZ3JhbSBjb2RlIHNwYWNlKHRoZSBsb2FkIGFkZHJlc3MpLCBjb3BpZXMKLSAqIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvZ3JhbSAocClidWZmZXIgcGVyZm9ybWluZyByZWxvY2F0YXRpb25zL2V0YywKLSAqIGZyZWUncyBpdCB3aGVuIGZpbmlzaGVkLgotKi8KKyAqIEFsbG9jYXRlcyBhIFZQRSB3aXRoIHNvbWUgcHJvZ3JhbSBjb2RlIHNwYWNlKHRoZSBsb2FkIGFkZHJlc3MpLCBjb3BpZXMgdGhlCisgKiBjb250ZW50cyBvZiB0aGUgcHJvZ3JhbSAocClidWZmZXIgcGVyZm9ybWluZyByZWxvY2F0YXRpb25zL2V0YywgZnJlZSdzIGl0CisgKiB3aGVuIGZpbmlzaGVkLgorICovCiBpbnQgdnBlX2VsZmxvYWQoc3RydWN0IHZwZSAqIHYpCiB7CiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAlsb25nIGVyciA9IDA7CiAJY2hhciAqc2Vjc3RyaW5ncywgKnN0cnRhYiA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IGxlbiwgaSwgc3ltaW5kZXggPSAwLCBzdHJpbmRleCA9IDA7Ci0KKwl1bnNpZ25lZCBpbnQgbGVuLCBpLCBzeW1pbmRleCA9IDAsIHN0cmluZGV4ID0gMCwgcmVsb2NhdGUgPSAwOwogCXN0cnVjdCBtb2R1bGUgbW9kOwkvLyBzbyB3ZSBjYW4gcmUtdXNlIHRoZSByZWxvY2F0aW9ucyBjb2RlCiAKIAltZW1zZXQoJm1vZCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpKTsKLQlzdHJjcHkobW9kLm5hbWUsICJWUEUgZHVtbXkgcHJvZyBtb2R1bGUiKTsKKwlzdHJjcHkobW9kLm5hbWUsICJWUEUgbG9hZGVyIik7CiAKIAloZHIgPSAoRWxmX0VoZHIgKikgdi0+cGJ1ZmZlcjsKIAlsZW4gPSB2LT5wbGVuOwpAQCAtODA1LDE2ICs4NDIsMjIgQEAKIAkvKiBTYW5pdHkgY2hlY2tzIGFnYWluc3QgaW5zbW9kaW5nIGJpbmFyaWVzIG9yIHdyb25nIGFyY2gsCiAJICAgd2VpcmQgZWxmIHZlcnNpb24gKi8KIAlpZiAobWVtY21wKGhkci0+ZV9pZGVudCwgRUxGTUFHLCA0KSAhPSAwCi0JICAgIHx8IGhkci0+ZV90eXBlICE9IEVUX1JFTCB8fCAhZWxmX2NoZWNrX2FyY2goaGRyKQorCSAgICB8fCAoaGRyLT5lX3R5cGUgIT0gRVRfUkVMICYmIGhkci0+ZV90eXBlICE9IEVUX0VYRUMpCisJICAgIHx8ICFlbGZfY2hlY2tfYXJjaChoZHIpCiAJICAgIHx8IGhkci0+ZV9zaGVudHNpemUgIT0gc2l6ZW9mKCpzZWNoZHJzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVlBFIHByb2dyYW0sIHdyb25nIGFyY2ggb3Igd2VpcmQgZWxmIHZlcnNpb25cbiIpOworCQkgICAgICAgIlZQRSBsb2FkZXI6IHByb2dyYW0gd3JvbmcgYXJjaCBvciB3ZWlyZCBlbGYgdmVyc2lvblxuIik7CiAKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAorCWlmIChoZHItPmVfdHlwZSA9PSBFVF9SRUwpCisJCXJlbG9jYXRlID0gMTsKKwogCWlmIChsZW4gPCBoZHItPmVfc2hvZmYgKyBoZHItPmVfc2hudW0gKiBzaXplb2YoRWxmX1NoZHIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVlBFIHByb2dyYW0gbGVuZ3RoICV1IHRydW5jYXRlZFxuIiwgbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJWUEUgbG9hZGVyOiBwcm9ncmFtIGxlbmd0aCAldSB0cnVuY2F0ZWRcbiIsCisJCSAgICAgICBsZW4pOworCiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKQEAgLTgyNiw4MiArODY5LDEyNiBAQAogCS8qIEFuZCB0aGVzZSBzaG91bGQgZXhpc3QsIGJ1dCBnY2Mgd2hpbmdlcyBpZiB3ZSBkb24ndCBpbml0IHRoZW0gKi8KIAlzeW1pbmRleCA9IHN0cmluZGV4ID0gMDsKIAotCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworCWlmIChyZWxvY2F0ZSkgeworCQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKKwkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUworCQkJICAgICYmIGxlbiA8IHNlY2hkcnNbaV0uc2hfb2Zmc2V0ICsgc2VjaGRyc1tpXS5zaF9zaXplKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJWUEUgcHJvZ3JhbSBsZW5ndGggJXUgdHJ1bmNhdGVkXG4iLAorCQkJCSAgICAgICBsZW4pOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KIAotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9OT0JJVFMKLQkJICAgICYmIGxlbiA8IHNlY2hkcnNbaV0uc2hfb2Zmc2V0ICsgc2VjaGRyc1tpXS5zaF9zaXplKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZQRSBwcm9ncmFtIGxlbmd0aCAldSB0cnVuY2F0ZWRcbiIsCi0JCQkgICAgICAgbGVuKTsKLQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCS8qIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZQorCQkJICAgdGVtcG9yYXJ5IGltYWdlLiAqLworCQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHNpemVfdCkgaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisKKwkJCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCisJCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKKwkJCQlzeW1pbmRleCA9IGk7CisJCQkJc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7CisJCQkJc3RydGFiID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW3N0cmluZGV4XS5zaF9vZmZzZXQ7CisJCQl9CiAJCX0KLQotCQkvKiBNYXJrIGFsbCBzZWN0aW9ucyBzaF9hZGRyIHdpdGggdGhlaXIgYWRkcmVzcyBpbiB0aGUKLQkJICAgdGVtcG9yYXJ5IGltYWdlLiAqLwotCQlzZWNoZHJzW2ldLnNoX2FkZHIgPSAoc2l6ZV90KSBoZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKLQotCQkvKiBJbnRlcm5hbCBzeW1ib2xzIGFuZCBzdHJpbmdzLiAqLwotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHsKLQkJCXN5bWluZGV4ID0gaTsKLQkJCXN0cmluZGV4ID0gc2VjaGRyc1tpXS5zaF9saW5rOwotCQkJc3RydGFiID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW3N0cmluZGV4XS5zaF9vZmZzZXQ7Ci0JCX0KKwkJbGF5b3V0X3NlY3Rpb25zKCZtb2QsIGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncyk7CiAJfQogCi0JbGF5b3V0X3NlY3Rpb25zKCZtb2QsIGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncyk7Ci0KIAl2LT5sb2FkX2FkZHIgPSBhbGxvY19wcm9nbWVtKG1vZC5jb3JlX3NpemUpOwogCW1lbXNldCh2LT5sb2FkX2FkZHIsIDAsIG1vZC5jb3JlX3NpemUpOwogCi0JcHJpbnRrKCJWUEUgZWxmX2xvYWRlcjogbG9hZGluZyB0byAlcFxuIiwgdi0+bG9hZF9hZGRyKTsKKwlwcmludGsoIlZQRSBsb2FkZXI6IGxvYWRpbmcgdG8gJXBcbiIsIHYtPmxvYWRfYWRkcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJdm9pZCAqZGVzdDsKKwlpZiAocmVsb2NhdGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CisJCQl2b2lkICpkZXN0OwogCi0JCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQotCQkJY29udGludWU7CisJCQlpZiAoIShzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKKwkJCQljb250aW51ZTsKIAotCQlkZXN0ID0gdi0+bG9hZF9hZGRyICsgc2VjaGRyc1tpXS5zaF9lbnRzaXplOworCQkJZGVzdCA9IHYtPmxvYWRfYWRkciArIHNlY2hkcnNbaV0uc2hfZW50c2l6ZTsKIAotCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9OT0JJVFMpCi0JCQltZW1jcHkoZGVzdCwgKHZvaWQgKilzZWNoZHJzW2ldLnNoX2FkZHIsCi0JCQkgICAgICAgc2VjaGRyc1tpXS5zaF9zaXplKTsKLQkJLyogVXBkYXRlIHNoX2FkZHIgdG8gcG9pbnQgdG8gY29weSBpbiBpbWFnZS4gKi8KLQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDsKLQl9CisJCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9OT0JJVFMpCisJCQkJbWVtY3B5KGRlc3QsICh2b2lkICopc2VjaGRyc1tpXS5zaF9hZGRyLAorCQkJCSAgICAgICBzZWNoZHJzW2ldLnNoX3NpemUpOworCQkJLyogVXBkYXRlIHNoX2FkZHIgdG8gcG9pbnQgdG8gY29weSBpbiBpbWFnZS4gKi8KKwkJCXNlY2hkcnNbaV0uc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7CiAKLQkvKiBGaXggdXAgc3ltcywgc28gdGhhdCBzdF92YWx1ZSBpcyBhIHBvaW50ZXIgdG8gbG9jYXRpb24uICovCi0JZXJyID0KLQkJc2ltcGxpZnlfc3ltYm9scyhzZWNoZHJzLCBzeW1pbmRleCwgc3RydGFiLCBzZWNzdHJpbmdzLAotCQkJCSBoZHItPmVfc2hudW0sICZtb2QpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRTogdW5hYmxlIHRvIHNpbXBsaWZ5IHN5bWJvbHNcbiIpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiBzZWN0aW9uIHNoX25hbWUgJXMgc2hfYWRkciAweCV4XG4iLAorCQkJICAgICAgIHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsIHNlY2hkcnNbaV0uc2hfYWRkcik7CisJCX0KIAotCS8qIE5vdyBkbyByZWxvY2F0aW9ucy4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQkJY29uc3QgY2hhciAqc3RydGFiID0gKGNoYXIgKilzZWNoZHJzW3N0cmluZGV4XS5zaF9hZGRyOwotCQl1bnNpZ25lZCBpbnQgaW5mbyA9IHNlY2hkcnNbaV0uc2hfaW5mbzsKKyAJCS8qIEZpeCB1cCBzeW1zLCBzbyB0aGF0IHN0X3ZhbHVlIGlzIGEgcG9pbnRlciB0byBsb2NhdGlvbi4gKi8KKyAJCXNpbXBsaWZ5X3N5bWJvbHMoc2VjaGRycywgc3ltaW5kZXgsIHN0cnRhYiwgc2Vjc3RyaW5ncywKKyAJCQkJIGhkci0+ZV9zaG51bSwgJm1vZCk7CiAKLQkJLyogTm90IGEgdmFsaWQgcmVsb2NhdGlvbiBzZWN0aW9uPyAqLwotCQlpZiAoaW5mbyA+PSBoZHItPmVfc2hudW0pCi0JCQljb250aW51ZTsKKyAJCS8qIE5vdyBkbyByZWxvY2F0aW9ucy4gKi8KKyAJCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworIAkJCWNvbnN0IGNoYXIgKnN0cnRhYiA9IChjaGFyICopc2VjaGRyc1tzdHJpbmRleF0uc2hfYWRkcjsKKyAJCQl1bnNpZ25lZCBpbnQgaW5mbyA9IHNlY2hkcnNbaV0uc2hfaW5mbzsKIAotCQkvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zICovCi0JCWlmICghKHNlY2hkcnNbaW5mb10uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQotCQkJY29udGludWU7CisgCQkJLyogTm90IGEgdmFsaWQgcmVsb2NhdGlvbiBzZWN0aW9uPyAqLworIAkJCWlmIChpbmZvID49IGhkci0+ZV9zaG51bSkKKyAJCQkJY29udGludWU7CiAKLQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfUkVMKQotCQkJZXJyID0KLQkJCQlhcHBseV9yZWxvY2F0aW9ucyhzZWNoZHJzLCBzdHJ0YWIsIHN5bWluZGV4LCBpLCAmbW9kKTsKLQkJZWxzZSBpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKQotCQkJZXJyID0gYXBwbHlfcmVsb2NhdGVfYWRkKHNlY2hkcnMsIHN0cnRhYiwgc3ltaW5kZXgsIGksCi0JCQkJCQkgJm1vZCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgInZwZV9lbGZsb2FkOiBlcnJvciBpbiByZWxvY2F0aW9ucyBlcnIgJWxkXG4iLAotCQkJICAgICAgIGVycik7Ci0JCQlnb3RvIGNsZWFudXA7CisgCQkJLyogRG9uJ3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucyAqLworIAkJCWlmICghKHNlY2hkcnNbaW5mb10uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQorIAkJCQljb250aW51ZTsKKworIAkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1JFTCkKKyAJCQkJZXJyID0gYXBwbHlfcmVsb2NhdGlvbnMoc2VjaGRycywgc3RydGFiLCBzeW1pbmRleCwgaSwKKyAJCQkJCQkJJm1vZCk7CisgCQkJZWxzZSBpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKQorIAkJCQllcnIgPSBhcHBseV9yZWxvY2F0ZV9hZGQoc2VjaGRycywgc3RydGFiLCBzeW1pbmRleCwgaSwKKyAJCQkJCQkJICZtb2QpOworIAkJCWlmIChlcnIgPCAwKQorIAkJCQlyZXR1cm4gZXJyOworCisgIAkJfQorICAJfSBlbHNlIHsKKyAgCQlmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKKworIAkJCS8qIEludGVybmFsIHN5bWJvbHMgYW5kIHN0cmluZ3MuICovCisgCQkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKSB7CisgCQkJCXN5bWluZGV4ID0gaTsKKyAJCQkJc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7CisgCQkJCXN0cnRhYiA9IChjaGFyICopaGRyICsgc2VjaGRyc1tzdHJpbmRleF0uc2hfb2Zmc2V0OworCisgCQkJCS8qIG1hcmsgdGhlIHN5bXRhYidzIGFkZHJlc3MgZm9yIHdoZW4gd2UgdHJ5IHRvIGZpbmQgdGhlCisgCQkJCSAgIG1hZ2ljIHN5bWJvbHMgKi8KKyAJCQkJc2VjaGRyc1tpXS5zaF9hZGRyID0gKHNpemVfdCkgaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisgCQkJfQorCisgCQkJLyogZmlsdGVyIHNlY3Rpb25zIHdlIGRvbnQgd2FudCBpbiB0aGUgZmluYWwgaW1hZ2UgKi8KKyAJCQlpZiAoIShzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSB8fAorIAkJCSAgICAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9NSVBTX1JFR0lORk8pKSB7CisgCQkJCXByaW50ayggS0VSTl9ERUJVRyAiIGlnbm9yaW5nIHNlY3Rpb24sICIKKyAJCQkJCSJuYW1lICVzIHR5cGUgJXggYWRkcmVzcyAweCV4IFxuIiwKKyAJCQkJCXNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsCisgCQkJCQlzZWNoZHJzW2ldLnNoX3R5cGUsIHNlY2hkcnNbaV0uc2hfYWRkcik7CisgCQkJCWNvbnRpbnVlOworIAkJCX0KKworICAJCQlpZiAoc2VjaGRyc1tpXS5zaF9hZGRyIDwgKHVuc2lnbmVkIGludCl2LT5sb2FkX2FkZHIpIHsKKyAJCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6ICIKKyAJCQkJCSJmdWxseSBsaW5rZWQgaW1hZ2UgaGFzIGludmFsaWQgc2VjdGlvbiwgIgorIAkJCQkJIm5hbWUgJXMgdHlwZSAleCBhZGRyZXNzIDB4JXgsIGJlZm9yZSBsb2FkICIKKyAJCQkJCSJhZGRyZXNzIG9mIDB4JXhcbiIsCisgCQkJCQlzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLAorIAkJCQkJc2VjaGRyc1tpXS5zaF90eXBlLCBzZWNoZHJzW2ldLnNoX2FkZHIsCisgCQkJCQkodW5zaWduZWQgaW50KXYtPmxvYWRfYWRkcik7CisgIAkJCQlyZXR1cm4gLUVOT0VYRUM7CisgIAkJCX0KKworIAkJCXByaW50ayhLRVJOX0RFQlVHICIgY29weWluZyBzZWN0aW9uIHNoX25hbWUgJXMsIHNoX2FkZHIgMHgleCAiCisJCQkgICAgICAgInNpemUgMHgleDAgZnJvbSB4JXBcbiIsCisJCQkgICAgICAgc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgc2VjaGRyc1tpXS5zaF9hZGRyLAorCQkJICAgICAgIHNlY2hkcnNbaV0uc2hfc2l6ZSwgaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQpOworCisgIAkJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKwkJCQltZW1jcHkoKHZvaWQgKilzZWNoZHJzW2ldLnNoX2FkZHIsCisJCQkJICAgICAgIChjaGFyICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQsCisgCQkJCSAgICAgICBzZWNoZHJzW2ldLnNoX3NpemUpOworCQkJZWxzZQorCQkJCW1lbXNldCgodm9pZCAqKXNlY2hkcnNbaV0uc2hfYWRkciwgMCwgc2VjaGRyc1tpXS5zaF9zaXplKTsKIAkJfQogCX0KIApAQCAtOTEwLDcxICs5OTcsMTA0IEBACiAJCQkgICAodW5zaWduZWQgbG9uZyl2LT5sb2FkX2FkZHIgKyB2LT5sZW4pOwogCiAJaWYgKChmaW5kX3ZwZV9zeW1ib2xzKHYsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJ0YWIsICZtb2QpKSA8IDApIHsKKwkJaWYgKHYtPl9fc3RhcnQgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogcHJvZ3JhbSBkb2VzIG5vdCBjb250YWluICIKKwkJCSAgICAgICAiYSBfX3N0YXJ0IHN5bWJvbFxuIik7CisJCQlyZXR1cm4gLUVOT0VYRUM7CisJCX0KIAotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVlBFOiBwcm9ncmFtIGRvZXNuJ3QgY29udGFpbiBfX3N0YXJ0IG9yIHZwZV9zaGFyZWQgc3ltYm9sc1xuIik7Ci0JCWVyciA9IC1FTk9FWEVDOworCQlpZiAodi0+c2hhcmVkX3B0ciA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogIgorCQkJICAgICAgICJwcm9ncmFtIGRvZXMgbm90IGNvbnRhaW4gdnBlX3NoYXJlZCBzeW1ib2wuXG4iCisJCQkgICAgICAgIiBVbmFibGUgdG8gdXNlIEFNVlAgKEFQL1NQKSBmYWNpbGl0aWVzLlxuIik7CiAJfQogCiAJcHJpbnRrKCIgZWxmIGxvYWRlZFxuIik7Ci0KLWNsZWFudXA6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHVtcF92cGUoc3RydWN0IHZwZSAqIHYpCitfX2F0dHJpYnV0ZV91c2VkX18gdm9pZCBkdW1wX3ZwZShzdHJ1Y3QgdnBlICogdikKIHsKIAlzdHJ1Y3QgdGMgKnQ7CiAKKwlzZXR0Yyh2LT5taW5vcik7CisKIAlwcmludGsoS0VSTl9ERUJVRyAiVlBFQ29udHJvbCAweCVseFxuIiwgcmVhZF92cGVfYzBfdnBlY29udHJvbCgpKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiVlBFQ29uZjAgMHglbHhcbiIsIHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdnBlY29udHJvbC50Y19saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdnBlY29udHJvbC50Y19saXN0LCBsaXN0KQogCQlkdW1wX3RjKHQpOwotCX0KIH0KIAotLyogY2hlY2tzIGZvciBWUEUgaXMgdW51c2VkIGFuZCBnZXRzIHJlYWR5IHRvIGxvYWQgcHJvZ3JhbQkgKi8KK3N0YXRpYyB2b2lkIGNsZWFudXBfdGMoc3RydWN0IHRjICp0YykKK3sKKwlpbnQgdG1wOworCisJLyogUHV0IE1WUEUncyBpbnRvICdjb25maWd1cmF0aW9uIHN0YXRlJyAqLworCXNldF9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKKworCXNldHRjKHRjLT5pbmRleCk7CisJdG1wID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOworCisJLyogbWFyayBub3QgYWxsb2NhdGVkIGFuZCBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGFibGUgKi8KKwl0bXAgJj0gfihUQ1NUQVRVU19BIHwgVENTVEFUVVNfREEpOworCXRtcCB8PSBUQ1NUQVRVU19JWE1UOwkvKiBpbnRlcnJ1cHQgZXhlbXB0ICovCisJd3JpdGVfdGNfYzBfdGNzdGF0dXModG1wKTsKKworCXdyaXRlX3RjX2MwX3RjaGFsdChUQ0hBTFRfSCk7CisKKwkvKiBiaW5kIGl0IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVlBFMSAqLworCXdyaXRlX3RjX2MwX3RjYmluZChyZWFkX3RjX2MwX3RjYmluZCgpICYgflRDQklORF9DVVJWUEUpOyAvLyB8IFRDQklORF9DVVJWUEUKKworCWNsZWFyX2MwX212cGNvbnRyb2woTVZQQ09OVFJPTF9WUEMpOworfQorCitzdGF0aWMgaW50IGdldGN3ZChjaGFyICpidWZmLCBpbnQgc2l6ZSkKK3sKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCWludCByZXQ7CisKKwlvbGRfZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKworCXJldCA9IHN5c19nZXRjd2QoYnVmZixzaXplKTsKKworCXNldF9mcyhvbGRfZnMpOworCisJcmV0dXJuIHJldDsKK30KKworLyogY2hlY2tzIFZQRSBpcyB1bnVzZWQgYW5kIGdldHMgcmVhZHkgdG8gbG9hZCBwcm9ncmFtICAqLwogc3RhdGljIGludCB2cGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3I7CisJaW50IG1pbm9yLCByZXQ7CiAJc3RydWN0IHZwZSAqdjsKKwlzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm5vdDsKIAogCS8qIGFzc3VtZSBvbmx5IDEgZGV2aWNlIGF0IHRoZSBtby4gKi8KLQlpZiAoKG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldikpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKKwlpZiAoKG1pbm9yID0gaW1pbm9yKGlub2RlKSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCh2ID0gZ2V0X3ZwZShtaW5vcikpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiB1bmFibGUgdG8gZ2V0IHZwZVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IHVuYWJsZSB0byBnZXQgdnBlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0JCXN0cnVjdCB0YyAqdDsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IGRldmljZSAlZCBhbHJlYWR5IGluIHVzZVxuIiwgbWlub3IpOwotCiAJCWR2cGUoKTsKLQkJZHVtcF92cGUodik7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFOiByZS1pbml0aWFsaXNpbmcgJWRcbiIsIG1pbm9yKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQRSBsb2FkZXI6IHRjIGluIHVzZSBkdW1waW5nIHJlZ3NcbiIpOworCisJCWR1bXBfdGMoZ2V0X3RjKG1pbm9yKSk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShub3QsICZ2LT5ub3RpZnksIGxpc3QpIHsKKwkJCW5vdC0+c3RvcChtaW5vcik7CisJCX0KIAogCQlyZWxlYXNlX3Byb2dtZW0odi0+bG9hZF9hZGRyKTsKLQotCQl0ID0gZ2V0X3RjKG1pbm9yKTsKLQkJc2V0dGMobWlub3IpOwotCQl0bXAgPSByZWFkX3RjX2MwX3Rjc3RhdHVzKCk7Ci0KLQkJLyogbWFyayBub3QgYWxsb2NhdGVkIGFuZCBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGFibGUgKi8KLQkJdG1wICY9IH4oVENTVEFUVVNfQSB8IFRDU1RBVFVTX0RBKTsKLQkJdG1wIHw9IFRDU1RBVFVTX0lYTVQ7CS8qIGludGVycnVwdCBleGVtcHQgKi8KLQkJd3JpdGVfdGNfYzBfdGNzdGF0dXModG1wKTsKLQotCQl3cml0ZV90Y19jMF90Y2hhbHQoVENIQUxUX0gpOwotCisJCWNsZWFudXBfdGMoZ2V0X3RjKG1pbm9yKSk7CiAJfQogCiAJLy8gYWxsb2NhdGUgaXQgc28gd2hlbiB3ZSBnZXQgd3JpdGUgb3BzIHdlIGtub3cgaXQncyBleHBlY3RlZC4KQEAgLTk4Niw2ICsxMTA2LDI0IEBACiAJdi0+bG9hZF9hZGRyID0gTlVMTDsKIAl2LT5sZW4gPSAwOwogCisJdi0+dWlkID0gZmlscC0+Zl91aWQ7CisJdi0+Z2lkID0gZmlscC0+Zl9naWQ7CisKKyNpZmRlZiBDT05GSUdfTUlQU19BUFNQX0tTUEQKKwkvKiBnZXQga3NwZCB0byB0ZWxsIHVzIHdoZW4gYSBzeXNjYWxsX2V4aXQgaGFwcGVucyAqLworCWlmICgha3NwZF9ldmVudHNfcmVxZCkgeworCQlrc3BkX25vdGlmeSgma3NwZF9ldmVudHMpOworCQlrc3BkX2V2ZW50c19yZXFkKys7CisJfQorI2VuZGlmCisKKwl2LT5jd2RbMF0gPSAwOworCXJldCA9IGdldGN3ZCh2LT5jd2QsIFZQRV9QQVRIX01BWCk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IG9wZW4sIGdldGN3ZCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCXYtPnNoYXJlZF9wdHIgPSBOVUxMOworCXYtPl9fc3RhcnQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC05OTUsNyArMTEzMyw3IEBACiAJc3RydWN0IHZwZSAqdjsKIAlFbGZfRWhkciAqaGRyOwogCi0JbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKKwltaW5vciA9IGltaW5vcihpbm9kZSk7CiAJaWYgKCh2ID0gZ2V0X3ZwZShtaW5vcikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMDA2LDE0ICsxMTQ0LDIyIEBACiAJCWlmICh2cGVfZWxmbG9hZCh2KSA+PSAwKQogCQkJdnBlX3J1bih2KTsKIAkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IEVMRiBsb2FkIGZhaWxlZC5cbiIpOworIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IEVMRiBsb2FkIGZhaWxlZC5cbiIpOwogCQkJcmV0ID0gLUVOT0VYRUM7CiAJCX0KIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEU6IG9ubHkgZWxmIGZpbGVzIGFyZSBzdXBwb3J0ZWRcbiIpOworIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogb25seSBlbGYgZmlsZXMgYXJlIHN1cHBvcnRlZFxuIik7CiAJCXJldCA9IC1FTk9FWEVDOwogCX0KIAorCS8qIEl0J3MgZ29vZCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgU1AgYW5kIGlmIGl0IGNob2tlcyBoYXZlIGEgbG9vayBhdAorCSAgIHRoZSAvZGV2L3J0Py4gQnV0IGlmIHdlIHJlc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgc3RydWN0IHdlCisJICAgbG9vc2Ugd2hhdCBoYXMgaGFwcGVuZWQuIFNvIHBlcmhhcHMgaWYgZ2FyYmFnZSBpcyBzZW50IHRvIHRoZSB2cGUKKwkgICBkZXZpY2UsIHVzZSBpdCBhcyBhIHRyaWdnZXIgZm9yIHRoZSByZXNldC4gSG9wZWZ1bGx5IGEgbmljZQorCSAgIGV4ZWN1dGFibGUgd2lsbCBiZSBhbG9uZyBzaG9ydGx5LiAqLworCWlmIChyZXQgPCAwKQorCQl2LT5zaGFyZWRfcHRyID0gTlVMTDsKKwogCS8vIGNsZWFudXAgYW55IHRlbXAgYnVmZmVycwogCWlmICh2LT5wYnVmZmVyKQogCQl2ZnJlZSh2LT5wYnVmZmVyKTsKQEAgLTEwMjgsMjYgKzExNzQsMjQgQEAKIAlzaXplX3QgcmV0ID0gY291bnQ7CiAJc3RydWN0IHZwZSAqdjsKIAotCW1pbm9yID0gTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7CisJbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCWlmICgodiA9IGdldF92cGUobWlub3IpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICh2LT5wYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2cGVfd3JpdGU6IG5vIHBidWZmZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlZQRSBsb2FkZXI6IG5vIGJ1ZmZlciBmb3IgcHJvZ3JhbVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWlmICgoY291bnQgKyB2LT5sZW4pID4gdi0+cGxlbikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVlBFIExvYWRlcjogZWxmIHNpemUgdG9vIGJpZy4gUGVyaGFwcyBzdHJpcCB1bmVlZGVkIHN5bWJvbHNcbiIpOworCQkgICAgICAgIlZQRSBsb2FkZXI6IGVsZiBzaXplIHRvbyBiaWcuIFBlcmhhcHMgc3RyaXAgdW5lZWRlZCBzeW1ib2xzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJY291bnQgLT0gY29weV9mcm9tX3VzZXIodi0+cGJ1ZmZlciArIHYtPmxlbiwgYnVmZmVyLCBjb3VudCk7Ci0JaWYgKCFjb3VudCkgewotCQlwcmludGsoInZwZV93cml0ZTogY29weV90b191c2VyIGZhaWxlZFxuIik7CisJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJdi0+bGVuICs9IGNvdW50OwogCXJldHVybiByZXQ7CkBAIC0xMTQ5LDE2ICsxMjkzLDcwIEBACiB7CiAJc3RydWN0IHZwZSAqdjsKIAotCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInZwZTogaW52YWxpZCB2cGUgaW5kZXggJWRcbiIsIGluZGV4KTsKKwlpZiAoKHYgPSBnZXRfdnBlKGluZGV4KSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJcmV0dXJuIHYtPnNoYXJlZF9wdHI7CiB9CiAKIEVYUE9SVF9TWU1CT0wodnBlX2dldF9zaGFyZWQpOwogCitpbnQgdnBlX2dldHVpZChpbnQgaW5kZXgpCit7CisJc3RydWN0IHZwZSAqdjsKKworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gdi0+dWlkOworfQorCitFWFBPUlRfU1lNQk9MKHZwZV9nZXR1aWQpOworCitpbnQgdnBlX2dldGdpZChpbnQgaW5kZXgpCit7CisJc3RydWN0IHZwZSAqdjsKKworCWlmICgodiA9IGdldF92cGUoaW5kZXgpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gdi0+Z2lkOworfQorCitFWFBPUlRfU1lNQk9MKHZwZV9nZXRnaWQpOworCitpbnQgdnBlX25vdGlmeShpbnQgaW5kZXgsIHN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyAqbm90aWZ5KQoreworCXN0cnVjdCB2cGUgKnY7CisKKwlpZiAoKHYgPSBnZXRfdnBlKGluZGV4KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJbGlzdF9hZGQoJm5vdGlmeS0+bGlzdCwgJnYtPm5vdGlmeSk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wodnBlX25vdGlmeSk7CisKK2NoYXIgKnZwZV9nZXRjd2QoaW50IGluZGV4KQoreworCXN0cnVjdCB2cGUgKnY7CisKKwlpZiAoKHYgPSBnZXRfdnBlKGluZGV4KSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdi0+Y3dkOworfQorCitFWFBPUlRfU1lNQk9MKHZwZV9nZXRjd2QpOworCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECitzdGF0aWMgdm9pZCBrc3BkX3NwX2V4aXQoIGludCBzcF9pZCkKK3sKKwljbGVhbnVwX3RjKGdldF90YyhzcF9pZCkpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHZwZV9tb2R1bGVfaW5pdCh2b2lkKQogewogCXN0cnVjdCB2cGUgKnYgPSBOVUxMOwpAQCAtMTIwMSw3ICsxMzk5LDggQEAKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAotCQkJbGlzdF9hZGQoJnQtPnRjLCAmdi0+dGMpOwkvKiBhZGQgdGhlIHRjIHRvIHRoZSBsaXN0IG9mIHRoaXMgdnBlJ3MgdGMncy4gKi8KKwkJCS8qIGFkZCB0aGUgdGMgdG8gdGhlIGxpc3Qgb2YgdGhpcyB2cGUncyB0YydzLiAqLworCQkJbGlzdF9hZGQoJnQtPnRjLCAmdi0+dGMpOwogCiAJCQkvKiBkZWFjdGl2YXRlIGFsbCBidXQgdnBlMCAqLwogCQkJaWYgKGkgIT0gMCkgewpAQCAtMTIyMiwxMCArMTQyMSwxMiBAQAogCQkJCQkJICAgICB+KFNUMF9JTSB8IFNUMF9JRSB8IFNUMF9LU1UpKQogCQkJCQkJICAgIHwgU1QwX0NVMCk7CiAKLQkJCQkvKiBzZXQgY29uZmlnIHRvIGJlIHRoZSBzYW1lIGFzIHZwZTAsIHBhcnRpY3VsYXJseSBrc2VnMCBjb2hlcmVuY3kgYWxnICovCisJCQkJLyoKKwkJCQkgKiBTZXQgY29uZmlnIHRvIGJlIHRoZSBzYW1lIGFzIHZwZTAsCisJCQkJICogcGFydGljdWxhcmx5IGtzZWcwIGNvaGVyZW5jeSBhbGcKKwkJCQkgKi8KIAkJCQl3cml0ZV92cGVfYzBfY29uZmlnKHJlYWRfYzBfY29uZmlnKCkpOwogCQkJfQotCiAJCX0KIAogCQkvKiBUQydzICovCkBAIC0xMjM0LDIzICsxNDM1LDI4IEBACiAJCWlmIChpICE9IDApIHsKIAkJCXVuc2lnbmVkIGxvbmcgdG1wOwogCi0JCQkvKiB0YyAwIHdpbGwgb2YgY291cnNlIGJlIHJ1bm5pbmcuLi4uICovCi0JCQlpZiAoaSA9PSAwKQotCQkJCXQtPnN0YXRlID0gVENfU1RBVEVfUlVOTklORzsKLQogCQkJc2V0dGMoaSk7CiAKLQkJCS8qIGJpbmQgYSBUQyB0byBlYWNoIFZQRSwgTWF5IGFzIHdlbGwgcHV0IGFsbCBleGNlc3MgVEMncwotCQkJICAgb24gdGhlIGxhc3QgVlBFICovCi0JCQlpZiAoaSA+PSAoKCh2YWwgJiBNVlBDT05GMF9QVlBFKSA+PiBNVlBDT05GMF9QVlBFX1NISUZUKSArIDEpKQotCQkJCXdyaXRlX3RjX2MwX3RjYmluZChyZWFkX3RjX2MwX3RjYmluZCgpIHwKLQkJCQkJCSAgICgodmFsICYgTVZQQ09ORjBfUFZQRSkgPj4gTVZQQ09ORjBfUFZQRV9TSElGVCkpOwotCQkJZWxzZQotCQkJCXdyaXRlX3RjX2MwX3RjYmluZChyZWFkX3RjX2MwX3RjYmluZCgpIHwgaSk7CisJCQkvKiBBbnkgVEMgdGhhdCBpcyBib3VuZCB0byBWUEUwIGdldHMgbGVmdCBhcyBpcyAtIGluIGNhc2UKKwkJCSAgIHdlIGFyZSBydW5uaW5nIFNNVEMgb24gVlBFMC4gQSBUQyB0aGF0IGlzIGJvdW5kIHRvIGFueQorCQkJICAgb3RoZXIgVlBFIGdldHMgYm91bmQgdG8gVlBFMCwgaWRlYWxseSBJJ2QgbGlrZSB0byBtYWtlCisJCQkgICBpdCBob21lbGVzcyBidXQgaXQgZG9lc24ndCBhcHBlYXIgdG8gbGV0IG1lIGJpbmQgYSBUQworCQkJICAgdG8gYSBub24tZXhpc3RlbnQgVlBFLiBXaGljaCBpcyBwZXJmZWN0bHkgcmVhc29uYWJsZS4KKworCQkJICAgVGhlICh1bilib3VuZCBzdGF0ZSBpcyB2aXNpYmxlIHRvIGFuIEVKVEFHIHByb2JlIHNvIG1heQorCQkJICAgbm90aWZ5IEdEQi4uLgorCQkJKi8KKworCQkJaWYgKCgodG1wID0gcmVhZF90Y19jMF90Y2JpbmQoKSkgJiBUQ0JJTkRfQ1VSVlBFKSkgeworCQkJCS8qIHRjIGlzIGJvdW5kID52cGUwICovCisJCQkJd3JpdGVfdGNfYzBfdGNiaW5kKHRtcCAmIH5UQ0JJTkRfQ1VSVlBFKTsKKworCQkJCXQtPnB2cGUgPSBnZXRfdnBlKDApOwkvKiBzZXQgdGhlIHBhcmVudCB2cGUgKi8KKwkJCX0KIAogCQkJdG1wID0gcmVhZF90Y19jMF90Y3N0YXR1cygpOwogCi0JCQkvKiBtYXJrIG5vdCBhbGxvY2F0ZWQgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0YWJsZSAqLworCQkJLyogbWFyayBub3QgYWN0aXZhdGVkIGFuZCBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGFibGUgKi8KIAkJCXRtcCAmPSB+KFRDU1RBVFVTX0EgfCBUQ1NUQVRVU19EQSk7CiAJCQl0bXAgfD0gVENTVEFUVVNfSVhNVDsJLyogaW50ZXJydXB0IGV4ZW1wdCAqLwogCQkJd3JpdGVfdGNfYzBfdGNzdGF0dXModG1wKTsKQEAgLTEyNjIsNiArMTQ2OCw5IEBACiAJLyogcmVsZWFzZSBjb25maWcgc3RhdGUgKi8KIAljbGVhcl9jMF9tdnBjb250cm9sKE1WUENPTlRST0xfVlBDKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX0FQU1BfS1NQRAorCWtzcGRfZXZlbnRzLmtzcGRfc3BfZXhpdCA9IGtzcGRfc3BfZXhpdDsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC0xMjgxLDUgKzE0OTAsNSBAQAogbW9kdWxlX2luaXQodnBlX21vZHVsZV9pbml0KTsKIG1vZHVsZV9leGl0KHZwZV9tb2R1bGVfZXhpdCk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1JUFMgVlBFIExvYWRlciIpOwotTU9EVUxFX0FVVEhPUigiRWxpemFiZXRoIENsYXJrZSwgTUlQUyBUZWNobm9sb2dpZXMsIEluYyIpOworTU9EVUxFX0FVVEhPUigiRWxpemFiZXRoIE9sZGhhbSwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sYXNhdC9NYWtlZmlsZQppbmRleCAwZDVhZWM0Li45OWY1MDQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xhc2F0L01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiBvYmoteQkgCQkJKz0gcmVzZXQubyBzZXR1cC5vIHByb20ubyBsYXNhdF9ib2FyZC5vIFwKLQkJCQkgICBhdDkzYy5vIGludGVycnVwdC5vIGxhc2F0SVJRLm8KKwkJCQkgICBhdDkzYy5vIGludGVycnVwdC5vCiAKIG9iai0kKENPTkZJR19MQVNBVF9TWVNDVEwpCSs9IHN5c2N0bC5vCiBvYmotJChDT05GSUdfRFMxNjAzKQkJKz0gZHMxNjAzLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYyBiL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYwppbmRleCA4NTJhNDE5Li4yZDM0NzJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jCkBAIC0yNywxNCArMjcsMTMgQEAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2xhc2F0L2xhc2F0aW50Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vZ2RiLXN0dWIuaD4KIAogc3RhdGljIHZvbGF0aWxlIGludCAqbGFzYXRfaW50X3N0YXR1cyA9IE5VTEw7CiBzdGF0aWMgdm9sYXRpbGUgaW50ICpsYXNhdF9pbnRfbWFzayA9IE5VTEw7CiBzdGF0aWMgdm9sYXRpbGUgaW50IGxhc2F0X2ludF9tYXNrX3NoaWZ0OwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGxhc2F0SVJRKHZvaWQpOwotCiB2b2lkIGRpc2FibGVfbGFzYXRfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwOSwxMSArMTA4LDE3IEBACiAJcmV0dXJuIGludF9zdGF0dXM7CiB9CiAKLXZvaWQgbGFzYXRfaHcwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgaW50X3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgY2F1c2UgPSByZWFkX2MwX2NhdXNlKCk7CiAJaW50IGlycTsKIAorCWlmIChjYXVzZSAmIENBVVNFRl9JUDcpIHsJLyogUjQwMDAgY291bnQgLyBjb21wYXJlIElSUSAqLworCQlsbF90aW1lcl9pbnRlcnJ1cHQoNywgcmVncyk7CisJCXJldHVybjsKKwl9CisKIAlpbnRfc3RhdHVzID0gZ2V0X2ludF9zdGF0dXMoKTsKIAogCS8qIGlmIGludF9zdGF0dXMgPT0gMCwgdGhlbiB0aGUgaW50ZXJydXB0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCAqLwpAQCAtMTQ3LDkgKzE1Miw2IEBACiAJCXBhbmljKCJhcmNoX2luaXRfaXJxOiBtaXBzX21hY2h0eXBlIGluY29ycmVjdCIpOwogCX0KIAotCS8qIE5vdyBzYWZlIHRvIHNldCB0aGUgZXhjZXB0aW9uIHZlY3Rvci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBsYXNhdElSUSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDw9IExBU0FUSU5UX0VORDsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cwk9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uCT0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9sYXNhdElSUS5TIGIvYXJjaC9taXBzL2xhc2F0L2xhc2F0SVJRLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMmIwZDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2xhc2F0L2xhc2F0SVJRLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogSW50ZXJydXB0IGV4Y2VwdGlvbiBkaXNwYXRjaCBjb2RlLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuc2V0CW5vcmVvcmRlcgotCS5hbGlnbgk1Ci0JTkVTVEVEKGxhc2F0SVJRLCBQVF9TSVpFLCBzcCkKLQkuc2V0CW5vYXQKLQlTQVZFX0FMTAotCUNMSQotCS5zZXQJYXQKLQkuc2V0CW5vcmVvcmRlcgotCi0JbWZjMAlzMCwgQ1AwX0NBVVNFCQkjIGdldCBpcnEgbWFzawotCi0JLyogRmlyc3Qgd2UgY2hlY2sgZm9yIHI0ayBjb3VudGVyL3RpbWVyIElSUS4gKi8KLQlhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQNwotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIENBVVNFRl9JUDIJIyBkZWxheSBzbG90LCBjaGVjayBodzAgaW50ZXJydXB0Ci0KLQkvKiBXaGVlZSwgYSB0aW1lciBpbnRlcnJ1cHQuICovCi0JbGkJYTAsIDcKLQlqYWwJbGxfdGltZXJfaW50ZXJydXB0Ci0JIG1vdmUJYTEsIHNwCi0KLQlqCXJldF9mcm9tX2lycQotCSBub3AKLQotMToKLQkvKiBXaGVlZSwgY29tYmluZWQgaGFyZHdhcmUgbGV2ZWwgemVybyBpbnRlcnJ1cHQuICovCi0JamFsCWxhc2F0X2h3MF9pcnFkaXNwYXRjaAotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotCi0xOgotCS8qCi0JICogSGVyZSBieSBtaXN0YWtlPyAgVGhpcyBpcyBwb3NzaWJsZSwgd2hhdCBjYW4gaGFwcGVuIGlzIHRoYXQgYnkgdGhlCi0JICogdGltZSB3ZSB0YWtlIHRoZSBleGNlcHRpb24gdGhlIElSUSBwaW4gZ29lcyBsb3csIHNvIGp1c3QgbGVhdmUgaWYKLQkgKiB0aGlzIGlzIHRoZSBjYXNlLgotCSAqLwotCW1vdmUJYTEsczAKLQltZmMwCWExLCBDUDBfRVBDCi0KLQlqCXJldF9mcm9tX2lycQotCSBub3AKLQlFTkQobGFzYXRJUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmludC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX2ZpbnQuYwppbmRleCBhMTk2MmViLi4zOWE3MWRlMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2RwX2ZpbnQuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmludC5jCkBAIC0yOSw3ICsyOSw5IEBACiAKIGllZWU3NTRkcCBpZWVlNzU0ZHBfZmludChpbnQgeCkKIHsKLQlDT01QWERQOworCXU2NCB4bTsKKwlpbnQgeGU7CisJaW50IHhzOwogCiAJQ0xFQVJDWDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RwX2Zsb25nLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmxvbmcuYwppbmRleCBlYWU5MGE4Li5mMDhmMjIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmxvbmcuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmxvbmcuYwpAQCAtMjksNyArMjksOSBAQAogCiBpZWVlNzU0ZHAgaWVlZTc1NGRwX2Zsb25nKHM2NCB4KQogewotCUNPTVBYRFA7CisJdTY0IHhtOworCWludCB4ZTsKKwlpbnQgeHM7CiAKIAlDTEVBUkNYOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmludC5jIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX2ZpbnQuYwppbmRleCA3YWFjMTNhLi5lODhlMTI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmludC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9maW50LmMKQEAgLTI5LDcgKzI5LDkgQEAKIAogaWVlZTc1NHNwIGllZWU3NTRzcF9maW50KGludCB4KQogewotCUNPTVBYU1A7CisJdW5zaWduZWQgeG07CisJaW50IHhlOworCWludCB4czsKIAogCUNMRUFSQ1g7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9mbG9uZy5jIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX2Zsb25nLmMKaW5kZXggM2Q2YzFkMS4uMjZkNjkxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L3NwX2Zsb25nLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX2Zsb25nLmMKQEAgLTI5LDcgKzI5LDkgQEAKIAogaWVlZTc1NHNwIGllZWU3NTRzcF9mbG9uZyhzNjQgeCkKIHsKLQlDT01QWERQOwkJLyogPC0tLSBuZWVkIDY0LWJpdCBtYW50aXNzYSB0ZW1wICovCisJdTY0IHhtOwkJLyogPC0tLSBuZWVkIDY0LWJpdCBtYW50aXNzYSB0ZW1wICovCisJaW50IHhlOworCWludCB4czsKIAogCUNMRUFSQ1g7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYwppbmRleCBiYzBlYmM2Li5kYjUzOTUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jCkBAIC0zOSw4ICszOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyAqYXRsYXNfaHcwX2ljcmVnczsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtaXBzSVJRKHZvaWQpOwotCiAjaWYgMAogI2RlZmluZSBERUJVR19JTlQoeC4uLikgcHJpbnRrKHgpCiAjZWxzZQpAQCAtOTgsNyArOTYsNyBAQAogCXJldHVybiBiOwogfQogCi12b2lkIGF0bGFzX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGxhc19odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnRfc3RhdHVzOwogCWludCBpcnE7CkBAIC0xMTYsNiArMTE0LDkxIEBACiAJZG9fSVJRKGlycSwgcmVncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNseih1bnNpZ25lZCBsb25nIHgpCit7CisJX19hc21fXyAoCisJIgkuc2V0CXB1c2gJCQkJCVxuIgorCSIJLnNldAltaXBzMzIJCQkJCVxuIgorCSIJY2x6CSUwLCAlMQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJXG4iCisJOiAiPXIiICh4KQorCTogInIiICh4KSk7CisKKwlyZXR1cm4geDsKK30KKworLyoKKyAqIFZlcnNpb24gb2YgZmZzIHRoYXQgb25seSBsb29rcyBhdCBiaXRzIDEyLi4xNS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXJxX2Zmcyh1bnNpZ25lZCBpbnQgcGVuZGluZykKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzY0KQorCXJldHVybiAtY2x6KHBlbmRpbmcpICsgMzEgLSBDQVVTRUJfSVA7CisjZWxzZQorCXVuc2lnbmVkIGludCBhMCA9IDc7CisJdW5zaWduZWQgaW50IHQwOworCisJdDAgPSBzMCAmIDB4ZjAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDI7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHhjMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMTsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweDgwMDA7CisJdDAgPSB0MCA8IDE7CisJLy90MCA9IHQwIDw8IDI7CisJYTAgPSBhMCAtIHQwOworCS8vczAgPSBzMCA8PCB0MDsKKworCXJldHVybiBhMDsKKyNlbmRpZgorfQorCisvKgorICogSVJRcyBvbiB0aGUgQXRsYXMgYm9hcmQgbG9vayBiYXNpY2FsbHkgKGJhcnJpbmcgc29mdHdhcmUgSVJRcyB3aGljaCB3ZQorICogZG9uJ3QgdXNlIGF0IGFsbCBhbmQgYWxsIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIGFyZSBjb21iaW5lZCB0b2dldGhlcgorICogb24gaGFyZHdhcmUgaW50ZXJydXB0IDAgKE1JUFMgSVJRIDIpKSBsaWtlOgorICoKKyAqCU1JUFMgSVJRCVNvdXJjZQorICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCisgKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAyICAgICAgICBDb21iaW5lZCBoYXJkd2FyZSBpbnRlcnJ1cHQgKGh3MCkKKyAqICAgICAgICAgICAgIDMgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNCAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA1ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDYgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKKyAqCisgKiBXZSBoYW5kbGUgdGhlIElSUSBhY2NvcmRpbmcgdG8gX291cl8gcHJpb3JpdHkgd2hpY2ggaXM6CisgKgorICogSGlnaGVzdCAtLS0tICAgICBSNGsgVGltZXIKKyAqIExvd2VzdCAgLS0tLSAgICAgQ29tYmluZWQgaGFyZHdhcmUgaW50ZXJydXB0CisgKgorICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCisgKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID09IE1JUFNDUFVfSU5UX0FUTEFTKQorCQlhdGxhc19odzBfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAoaXJxID4gMCkKKwkJZG9fSVJRKE1JUFNDUFVfSU5UX0JBU0UgKyBpcnEsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGk7CkBAIC0xMjgsOSArMjExLDYgQEAKIAkgKi8KIAlhdGxhc19odzBfaWNyZWdzLT5pbnRyc3RlbiA9IDB4ZmZmZmZmZmY7CiAKLQkvKiBOb3cgc2FmZSB0byBzZXQgdGhlIGV4Y2VwdGlvbiB2ZWN0b3IuICovCi0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgbWlwc0lSUSk7Ci0KIAlmb3IgKGkgPSBBVExBU0lOVF9CQVNFOyBpIDw9IEFUTEFTSU5UX0VORDsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cwk9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uCT0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL01ha2VmaWxlIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggYjIxYmM2OC4uYmU0N2MxYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTE4LDggKzE4LDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBNSVBTIGJvYXJkcyBnZW5lcmljIHJvdXRpbmVzIHVuZGVyIExpbnV4LgogIwogCi1vYmoteQkJCQk6PSBtaXBzSVJRLm8gcmVzZXQubyBkaXNwbGF5Lm8gaW5pdC5vIG1lbW9yeS5vIFwKLQkJCQkgICBwcmludGYubyBjbWRsaW5lLm8gdGltZS5vCitvYmoteQkJCQk6PSByZXNldC5vIGRpc3BsYXkubyBpbml0Lm8gbWVtb3J5Lm8gcHJpbnRmLm8gXAorCQkJCSAgIGNtZGxpbmUubyB0aW1lLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBnZGJfaG9vay5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2dkYl9ob29rLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9nZGJfaG9vay5jCmluZGV4IDkxYTJjY2IuLjZhMTg1NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2dkYl9ob29rLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvZ2RiX2hvb2suYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHN0cnVjdCBzZXJpYWxfc3RhdGUgcnNfdGFibGVbUlNfVEFCTEVfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IHNlcmlhbF9zdGF0ZSByc190YWJsZVtdID0gewogCVNFUklBTF9QT1JUX0RGTlMJLyogRGVmaW5lZCBpbiBzZXJpYWwuaCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jCmluZGV4IGVhYjVhNzAuLmRmNGU5NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2luaXQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9pbml0LmMKQEAgLTIyMCw3ICsyMjAsNiBAQAogCQkJCWdlbmVyaWNfcHV0RGVidWdDaGFyICgqcysrKTsKIAkJfQogCi0JCWtnZGJfZW5hYmxlZCA9IDE7CiAJCS8qIEJyZWFrcG9pbnQgaXMgaW52b2tlZCBhZnRlciBpbnRlcnJ1cHRzIGFyZSBpbml0aWFsaXNlZCAqLwogCX0KIH0KQEAgLTMzOCw2ICszMzcsNyBAQAogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX01TQzoKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMjoKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMzoKKwljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV8yNEs6CiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRU1VTF9NU0M6CiAJCV9wY2ljdHJsX21zYyA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAoTUlQU19NU0MwMV9QQ0lfUkVHX0JBU0UsIDB4MjAwMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKaW5kZXggMzJjOTIxMC4uYmM0ZDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKQEAgLTIyLDEwICsyMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogCkBAIC00Niw5ICs0OCw2IEBACiB9OwogI2VuZGlmCiAKLS8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCi1leHRlcm4gY2hhciBfZW5kOwotCiBzdHJ1Y3QgcHJvbV9wbWVtYmxvY2sgKiBfX2luaXQgcHJvbV9nZXRtZGVzYyh2b2lkKQogewogCWNoYXIgKm1lbXNpemVfc3RyOwpAQCAtMTA2LDEwICsxMDUsMTAgQEAKIAogCW1kZXNjWzNdLnR5cGUgPSB5YW1vbl9kb250dXNlOwogCW1kZXNjWzNdLmJhc2UgPSAweDAwMTAwMDAwOwotCW1kZXNjWzNdLnNpemUgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpIC0gbWRlc2NbM10uYmFzZTsKKwltZGVzY1szXS5zaXplID0gQ1BIWVNBRERSKFBGTl9BTElHTigodW5zaWduZWQgbG9uZykmX2VuZCkpIC0gbWRlc2NbM10uYmFzZTsKIAogCW1kZXNjWzRdLnR5cGUgPSB5YW1vbl9mcmVlOwotCW1kZXNjWzRdLmJhc2UgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpOworCW1kZXNjWzRdLmJhc2UgPSBDUEhZU0FERFIoUEZOX0FMSUdOKCZfZW5kKSk7CiAJbWRlc2NbNF0uc2l6ZSA9IG1lbXNpemUgLSBtZGVzY1s0XS5iYXNlOwogCiAJcmV0dXJuICZtZGVzY1swXTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21pcHNJUlEuUyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21pcHNJUlEuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkNWM3My4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9taXBzSVJRLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqIEludGVycnVwdCBleGNlcHRpb24gZGlzcGF0Y2ggY29kZS4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotI2lmZGVmIENPTkZJR19NSVBTX0FUTEFTCi0jaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2F0bGFzaW50Lmg+Ci0jZGVmaW5lIENBU0NBREVfSVJRCQlNSVBTQ1BVX0lOVF9BVExBUwotI2RlZmluZSBDQVNDQURFX0RJU1BBVENICWF0bGFzX2h3MF9pcnFkaXNwYXRjaAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfTUFMVEEKLSNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbWFsdGFpbnQuaD4KLSNkZWZpbmUgQ0FTQ0FERV9JUlEJCU1JUFNDUFVfSU5UX0k4MjU5QQotI2RlZmluZSBDQVNDQURFX0RJU1BBVENICW1hbHRhX2h3MF9pcnFkaXNwYXRjaAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfU0VBRAotI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9zZWFkaW50Lmg+Ci0jZW5kaWYKLQotLyogQSBsb3Qgb2YgY29tcGxpY2F0aW9uIGhlcmUgaXMgdGFrZW4gYXdheSBiZWNhdXNlOgotICoKLSAqIDEpIFdlIGhhbmRsZSBvbmUgaW50ZXJydXB0IGFuZCByZXR1cm4sIHNpdHRpbmcgaW4gYSBsb29wIGFuZCBtb3ZpbmcgYWNyb3NzCi0gKiAgICBhbGwgdGhlIHBlbmRpbmcgSVJRIGJpdHMgaW4gdGhlIGNhdXNlIHJlZ2lzdGVyIGlzIF9OT1RfIHRoZSBhbnN3ZXIsIHRoZQotICogICAgY29tbW9uIGNhc2UgaXMgb25lIHBlbmRpbmcgSVJRIHNvIG9wdGltaXplIGluIHRoYXQgZGlyZWN0aW9uLgotICoKLSAqIDIpIFdlIG5lZWQgbm90IGNoZWNrIGFnYWluc3QgYml0cyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIElSUSBtYXNrLCB0aGF0Ci0gKiAgICB3b3VsZCBtYWtlIHRoaXMgcm91dGluZSBzbG93IGFzIGhlbGwuCi0gKgotICogMykgTGludXggb25seSB0aGlua3MgaW4gdGVybXMgb2YgYWxsIElSUXMgb24gb3IgYWxsIElSUXMgb2ZmLCBub3RoaW5nIGluCi0gKiAgICBiZXR3ZWVuIGxpa2UgQlNEIHNwbCgpIGJyYWluLWRhbWFnZS4KLSAqCi0gKiBGdXJ0aGVybW9yZSwgdGhlIElSUXMgb24gdGhlIE1JUFMgYm9hcmQgbG9vayBiYXNpY2FsbHkgKGJhcnJpbmcgc29mdHdhcmUKLSAqIElSUXMgd2hpY2ggd2UgZG9uJ3QgdXNlIGF0IGFsbCBhbmQgYWxsIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIGFyZQotICogY29tYmluZWQgdG9nZXRoZXIgb24gaGFyZHdhcmUgaW50ZXJydXB0IDAgKE1JUFMgSVJRIDIpKSBsaWtlOgotICoKLSAqCU1JUFMgSVJRCVNvdXJjZQotICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCi0gKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAyICAgICAgICBDb21iaW5lZCBoYXJkd2FyZSBpbnRlcnJ1cHQgKGh3MCkKLSAqICAgICAgICAgICAgIDMgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgNCAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICA1ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDYgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQotICogICAgICAgICAgICAgNyAgICAgICAgUjRrIHRpbWVyICh3aGF0IHdlIHVzZSkKLSAqCi0gKiBOb3RlOiBPbiB0aGUgU0VBRCBib2FyZCB0aGluZyBhcmUgYSBsaXR0bGUgYml0IGRpZmZlcmVudC4KLSAqICAgICAgIEhlcmUgSVJRIDIgKGh3MCkgaXMgd2lyZWQgdG8gdGhlIFVBUlQwIGFuZCBJUlEgMyAoaHcxKSBpcyB3aXJlZAotICogICAgICAgd2lyZWQgdG8gVUFSVDEuCi0gKgotICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgotICoKLSAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCi0gKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAotICoKLSAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQotICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgotICovCi0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQlORVNURUQobWlwc0lSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0KLQltZmMwCXMwLCBDUDBfQ0FVU0UJCSMgZ2V0IGlycSBiaXRzCi0JbWZjMAlzMSwgQ1AwX1NUQVRVUwkJIyBnZXQgaXJxIG1hc2sKLQlhbmRpCXMwLCBTVDBfSU0JCSMgQ0FVU0UuQ0UgbWF5IGJlIG5vbi16ZXJvIQotCWFuZAlzMCwgczEKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCi0JLnNldAltaXBzMzIKLQljbHoJYTAsIHMwCi0JLnNldAltaXBzMAotCW5lZ3UJYTAKLQlhZGR1CWEwLCAzMS1DQVVTRUJfSVAKLQlibHR6CWEwLCBzcHVyaW91cwotI2Vsc2UKLQliZXF6CXMwLCBzcHVyaW91cwotCSBsaQlhMCwgNwotCi0JYW5kCXQwLCBzMCwgMHhmMDAwCi0Jc2x0aXUJdDAsIHQwLCAxCi0Jc2xsCXQwLCAyCi0Jc3VidQlhMCwgdDAKLQlzbGwJczAsIHQwCi0KLQlhbmQJdDAsIHMwLCAweGMwMDAKLQlzbHRpdQl0MCwgdDAsIDEKLQlzbGwJdDAsIDEKLQlzdWJ1CWEwLCB0MAotCXNsbAlzMCwgdDAKLQotCWFuZAl0MCwgczAsIDB4ODAwMAotCXNsdGl1CXQwLCB0MCwgMQotCSMgc2xsCXQwLCAwCi0Jc3VidQlhMCwgdDAKLQkjIHNsbAlzMCwgdDAKLSNlbmRpZgotCi0jaWZkZWYgQ0FTQ0FERV9JUlEKLQkgbGkJYTEsIENBU0NBREVfSVJRCi0JYm5lCWEwLCBhMSwgMWYKLQkgYWRkdQlhMCwgTUlQU0NQVV9JTlRfQkFTRQotCi0JamFsCUNBU0NBREVfRElTUEFUQ0gKLQkgbW92ZQkgYTAsIHNwCi0KLQlqCXJldF9mcm9tX2lycQotCSBub3AKLTE6Ci0jZWxzZQotCSBhZGR1CWEwLCBNSVBTQ1BVX0lOVF9CQVNFCi0jZW5kaWYKLQotCWphbAlkb19JUlEKLQkgbW92ZQlhMSwgc3AKLQotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotCi0KLXNwdXJpb3VzOgotCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JIG5vcAotCUVORChtaXBzSVJRKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcGNpLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYwppbmRleCAxZjZmOWRmLi45MzM3ZjZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wY2kuYwpAQCAtMTk4LDYgKzE5OCw3IEBACiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfTVNDOgogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EyOgogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EzOgorCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFXzI0SzoKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9FTVVMX01TQzoKIAkJLyogU2V0IHVwIHJlc291cmNlIHJhbmdlcyBmcm9tIHRoZSBjb250cm9sbGVyJ3MgcmVnaXN0ZXJzLiAgKi8KIAkJTVNDX1JFQUQoTVNDMDFfUENJX1NDMlBNQkFTTCwgc3RhcnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IDkzZjNiZjIuLmE5ZjYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01MCwxNiArNTEsMjMgQEAKIHN0YXRpYyBjaGFyIGRpc3BsYXlfc3RyaW5nW10gPSAiICAgICAgICBMSU5VWCBPTiBBVExBUyAgICAgICAiOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NQUxUQSkKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCitzdGF0aWMgY2hhciBkaXNwbGF5X3N0cmluZ1tdID0gIiAgICAgICBTTVRDIExJTlVYIE9OIE1BTFRBICAgICAgICI7CisjZWxzZQogc3RhdGljIGNoYXIgZGlzcGxheV9zdHJpbmdbXSA9ICIgICAgICAgIExJTlVYIE9OIE1BTFRBICAgICAgICI7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19TRUFEKQogc3RhdGljIGNoYXIgZGlzcGxheV9zdHJpbmdbXSA9ICIgICAgICAgIExJTlVYIE9OIFNFQUQgICAgICAgIjsKICNlbmRpZgotc3RhdGljIHVuc2lnbmVkIGludCBkaXNwbGF5X2NvdW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlzcGxheV9jb3VudDsKICNkZWZpbmUgTUFYX0RJU1BMQVlfQ09VTlQgKHNpemVvZihkaXNwbGF5X3N0cmluZykgLSA4KQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHRpbWVyX3RpY2tfY291bnQ9MDsKKyNkZWZpbmUgQ1BVQ1RSX0lNQVNLQklUICgweDEwMCA8PCBNSVBTQ1BVX0lOVF9DUFVDVFIpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXJfdGlja19jb3VudDsKIHN0YXRpYyBpbnQgbWlwc19jcHVfdGltZXJfaXJxOworZXh0ZXJuIHZvaWQgc210Y190aW1lcl9icm9hZGNhc3QoaW50KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbF9kaXNwbGF5X21lc3NhZ2Uodm9pZCkKIHsKQEAgLTc1LDE1ICs4Myw1NSBAQAogCWRvX0lSUSAobWlwc19jcHVfdGltZXJfaXJxLCByZWdzKTsKIH0KIAorLyoKKyAqIFJlZGVjbGFyZSB1bnRpbCBJIGdldCBhcm91bmQgbW9wcGluZyB0aGUgdGltZXIgY29kZSBpbnNhbml0eSBvbiBNSVBTLgorICovCiBleHRlcm4gaW50IG51bGxfcGVyZl9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBleHRlcm4gaW50ICgqcGVyZl9pcnEpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogaXJxcmV0dXJuX3QgbWlwc190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnQgcjIgPSBjcHVfaGFzX21pcHNfcjI7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgcjIgPSBjcHVfaGFzX21pcHNfcjI7CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisgICAgICAgIC8qCisJICogIEluIGFuIFNNVEMgc3lzdGVtLCBvbmUgQ291bnQvQ29tcGFyZSBzZXQgZXhpc3RzIHBlciBWUEUuCisJICogIFdoaWNoIFRDIHdpdGhpbiBhIFZQRSBnZXRzIHRoZSBpbnRlcnJ1cHQgaXMgZXNzZW50aWFsbHkKKwkgKiAgcmFuZG9tIC0gd2Ugb25seSBrbm93IHRoYXQgaXQgc2hvdWxkbid0IGJlIG9uZSB3aXRoCisJICogIElYTVQgc2V0LiBXaGljaGV2ZXIgVEMgZ2V0cyB0aGUgaW50ZXJydXB0IG5lZWRzIHRvCisJICogIHNlbmQgc3BlY2lhbCBpbnRlcnByb2Nlc3NvciBpbnRlcnJ1cHRzIHRvIHRoZSBvdGhlcgorCSAqICBUQ3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBzY2hlZHVsZSwgZXRjLgorCSAqCisJICogIFRoYXQgY29kZSBpcyBzcGVjaWZpYyB0byB0aGUgU01UQyBrZXJuZWwsIG5vdCB0bworCSAqICB0aGUgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLCBzbyBpdCdzIGludm9rZWQgZnJvbQorCSAqICB0aGUgZ2VuZXJhbCBNSVBTIHRpbWVyX2ludGVycnVwdCByb3V0aW5lLgorCSAqLworCisJLyoKKwkgKiBEVlBFIGlzIG5lY2Vzc2FyeSBzbyBsb25nIGFzIGNyb3NzLVZQRSBpbnRlcnJ1cHRzCisJICogYXJlIGRvbmUgdmlhIHJlYWQtbW9kaWZ5LXdyaXRlIG9mIENhdXNlIHJlZ2lzdGVyLgorCSAqLworCWludCB2cGZsYWdzID0gZHZwZSgpOworCXdyaXRlX2MwX2NvbXBhcmUgKHJlYWRfYzBfY291bnQoKSAtIDEpOworCWNsZWFyX2MwX2NhdXNlKENQVUNUUl9JTUFTS0JJVCk7CisJZXZwZSh2cGZsYWdzKTsKKworCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCA9PSAwKSB7CisJCXRpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCXNjcm9sbF9kaXNwbGF5X21lc3NhZ2UoKTsKKwl9IGVsc2UKKwkJd3JpdGVfYzBfY29tcGFyZSAocmVhZF9jMF9jb3VudCgpICsgKCBtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKKwlzbXRjX3RpbWVyX2Jyb2FkY2FzdChjcHVfZGF0YVtjcHVdLnZwZV9pZCk7CisKKwlpZiAoY3B1ICE9IDApCisJCS8qCisJCSAqIE90aGVyIENQVXMgc2hvdWxkIGRvIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdW50aW5nCisJCSAqLworCQlsb2NhbF90aW1lcl9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOworCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJaWYgKGNwdSA9PSAwKSB7CiAJCS8qCiAJCSAqIENQVSAwIGhhbmRsZXMgdGhlIGdsb2JhbCB0aW1lciBpbnRlcnJ1cHQgam9iIGFuZCBwcm9jZXNzCkBAIC0xMDcsMTIgKzE1NSwxNCBAQAogCQkgKiBNb3JlIHN1cHBvcnQgbmVlZHMgdG8gYmUgYWRkZWQgdG8ga2VybmVsL3RpbWUgZm9yCiAJCSAqIGNvdW50ZXIvdGltZXIgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBDUFUncwogCQkgKi8KLQkJd3JpdGVfYzBfY29tcGFyZSAocmVhZF9jMF9jb3VudCgpICsgKG1pcHNfaHB0X2ZyZXF1ZW5jeS9IWikpOworCQl3cml0ZV9jMF9jb21wYXJlKHJlYWRfYzBfY291bnQoKSArIChtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKKwogCQkvKgotCQkgKiBvdGhlciBDUFVzIHNob3VsZCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZworCQkgKiBPdGhlciBDUFVzIHNob3VsZCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZwogCQkgKi8KLQkJbG9jYWxfdGltZXJfaW50ZXJydXB0IChpcnEsIGRldl9pZCwgcmVncyk7CisJCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CiAJfQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogb3V0OgogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEyNiw3ICsxNzYsNyBAQAogCXVuc2lnbmVkIGludCBwcmlkID0gcmVhZF9jMF9wcmlkKCkgJiAweGZmZmYwMDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAKLSNpZmRlZiBDT05GSUdfTUlQU19TRUFECisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19TRUFEKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1NJTSkKIAkvKgogCSAqIFRoZSBTRUFEIGJvYXJkIGRvZXNuJ3QgaGF2ZSBhIHJlYWwgdGltZSBjbG9jaywgc28gd2UgY2FuJ3QKIAkgKiByZWFsbHkgY2FsY3VsYXRlIHRoZSB0aW1lciBmcmVxdWVuY3kKQEAgLTIxMSw3ICsyNjEsMTEgQEAKIAogCS8qIHdlIGFyZSB1c2luZyB0aGUgY3B1IGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdHMgKi8KIAlpcnEtPmhhbmRsZXIgPSBtaXBzX3RpbWVyX2ludGVycnVwdDsJLyogd2UgdXNlIG91ciBvd24gaGFuZGxlciAqLworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzZXR1cF9pcnFfc210YyhtaXBzX2NwdV90aW1lcl9pcnEsIGlycSwgQ1BVQ1RSX0lNQVNLQklUKTsKKyNlbHNlCiAJc2V0dXBfaXJxKG1pcHNfY3B1X3RpbWVyX2lycSwgaXJxKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogaXJxX2Rlc2MocmlwdG9yKSBpcyBhIGdsb2JhbCByZXNvdXJjZSwgd2hlbiB0aGUgaW50ZXJydXB0IG92ZXJsYXBzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUKaW5kZXggZmQ0YzE0My4uNzdlZTVjNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9NYWtlZmlsZQpAQCAtMjAsMyArMjAsNCBAQAogIwogCiBvYmoteSA6PSBtYWx0YV9pbnQubyBtYWx0YV9zZXR1cC5vCitvYmotJChDT05GSUdfU01QKSArPSBtYWx0YV9zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jCmluZGV4IGQwNmRjNWFkLi43Y2MwYmE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfaW50LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oPgogI2luY2x1ZGUgPGFzbS9tc2MwMV9pYy5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG1pcHNJUlEodm9pZCk7CiBleHRlcm4gdm9pZCBtaXBzX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhtaXBzX2lycV9sb2NrKTsKQEAgLTU4LDYgKzU3LDcgQEAKIAljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9NU0M6CiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTI6CiAJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTM6CisJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfMjRLOgogCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0VNVUxfTVNDOgogCSAgICAgICAgTVNDX1JFQUQoTVNDMDFfUENJX0lBQ0ssIGlycSk7CiAJCWlycSAmPSAweGZmOwpAQCAtMTE0LDEzICsxMTQsMTQgQEAKIAlyZXR1cm4gaXJxOwogfQogCi12b2lkIG1hbHRhX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIG1hbHRhX2h3MF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxOwogCiAJaXJxID0gZ2V0X2ludCgpOwotCWlmIChpcnEgPCAwKQorCWlmIChpcnEgPCAwKSB7CiAJCXJldHVybjsgIC8qIGludGVycnVwdCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQgKi8KKwl9CiAKIAlkb19JUlEoTUFMVEFfSU5UX0JBU0UraXJxLCByZWdzKTsKIH0KQEAgLTE0Myw2ICsxNDQsNyBAQAogICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9NU0M6CiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EyOgogICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMzoKKyAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfMjRLOgogICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9FTVVMX01TQzoKICAgICAgICAgICAgICAgICBsbF9tc2NfaXJxKHJlZ3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDYgKzE4NCw5MiBAQAogICAgICAgICBkaWUoIkNvcmVIaSBpbnRlcnJ1cHQiLCByZWdzKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2x6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisvKgorICogVmVyc2lvbiBvZiBmZnMgdGhhdCBvbmx5IGxvb2tzIGF0IGJpdHMgMTIuLjE1LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfZmZzKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCisJcmV0dXJuIC1jbHoocGVuZGluZykgKyAzMSAtIENBVVNFQl9JUDsKKyNlbHNlCisJdW5zaWduZWQgaW50IGEwID0gNzsKKwl1bnNpZ25lZCBpbnQgdDA7CisKKwl0MCA9IHMwICYgMHhmMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweGMwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAxOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4ODAwMDsKKwl0MCA9IHQwIDwgMTsKKwkvL3QwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJLy9zMCA9IHMwIDw8IHQwOworCisJcmV0dXJuIGEwOworI2VuZGlmCit9CisKKy8qCisgKiBJUlFzIG9uIHRoZSBNYWx0YSBib2FyZCBsb29rIGJhc2ljYWxseSAoYmFycmluZyBzb2Z0d2FyZSBJUlFzIHdoaWNoIHdlCisgKiBkb24ndCB1c2UgYXQgYWxsIGFuZCBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyCisgKiBvbiBoYXJkd2FyZSBpbnRlcnJ1cHQgMCAoTUlQUyBJUlEgMikpIGxpa2U6CisgKgorICoJTUlQUyBJUlEJU291cmNlCisgKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KKyAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDIgICAgICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdCAoaHcwKQorICogICAgICAgICAgICAgMyAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA0ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDUgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNiAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA3ICAgICAgICBSNGsgdGltZXIgKHdoYXQgd2UgdXNlKQorICoKKyAqIFdlIGhhbmRsZSB0aGUgSVJRIGFjY29yZGluZyB0byBfb3VyXyBwcmlvcml0eSB3aGljaCBpczoKKyAqCisgKiBIaWdoZXN0IC0tLS0gICAgIFI0ayBUaW1lcgorICogTG93ZXN0ICAtLS0tICAgICBDb21iaW5lZCBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqCisgKiB0aGVuIHdlIGp1c3QgcmV0dXJuLCBpZiBtdWx0aXBsZSBJUlFzIGFyZSBwZW5kaW5nIHRoZW4gd2Ugd2lsbCBqdXN0IHRha2UKKyAqIGFub3RoZXIgZXhjZXB0aW9uLCBiaWcgZGVhbC4KKyAqLworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCWludCBpcnE7CisKKwlpcnEgPSBpcnFfZmZzKHBlbmRpbmcpOworCisJaWYgKGlycSA9PSBNSVBTQ1BVX0lOVF9JODI1OUEpCisJCW1hbHRhX2h3MF9pcnFkaXNwYXRjaChyZWdzKTsKKwllbHNlIGlmIChpcnEgPiAwKQorCQlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIGlycSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGk4MjU5aXJxID0gewogCS5oYW5kbGVyID0gbm9fYWN0aW9uLAogCS5uYW1lID0gIlhULVBJQyBjYXNjYWRlIgpAQCAtMjE0LDcgKzMwMiw2IEBACiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBtaXBzSVJRKTsKIAlpbml0X2k4MjU5X2lycXMoKTsKIAogCWlmICghY3B1X2hhc192ZWljKQpAQCAtMjI0LDYgKzMxMSw3IEBACiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX01TQzoKICAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTI6CiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EzOgorICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV8yNEs6CiAgICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0VNVUxfTVNDOgogCQlpZiAoY3B1X2hhc192ZWljKQogCQkJaW5pdF9tc2NfaXJxcyAoTVNDMDFFX0lOVF9CQVNFLCBtc2NfZWljaXJxbWFwLCBtc2NfbnJfZWljaXJxcyk7CkBAIC0yNDAsMTIgKzMyOCwxNyBAQAogCWVsc2UgaWYgKGNwdV9oYXNfdmludCkgewogCQlzZXRfdmlfaGFuZGxlciAoTUlQU0NQVV9JTlRfSTgyNTlBLCBtYWx0YV9odzBfaXJxZGlzcGF0Y2gpOwogCQlzZXRfdmlfaGFuZGxlciAoTUlQU0NQVV9JTlRfQ09SRUhJLCBjb3JlaGlfaXJxZGlzcGF0Y2gpOwotCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQlzZXR1cF9pcnFfc210YyAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9JODI1OUEsICZpODI1OWlycSwKKwkJCSgweDEwMCA8PCBNSVBTQ1BVX0lOVF9JODI1OUEpKTsKKwkJc2V0dXBfaXJxX3NtdGMgKE1JUFNDUFVfSU5UX0JBU0UrTUlQU0NQVV9JTlRfQ09SRUhJLAorCQkJJmNvcmVoaV9pcnFhY3Rpb24sICgweDEwMCA8PCBNSVBTQ1BVX0lOVF9DT1JFSEkpKTsKKyNlbHNlIC8qIE5vdCBTTVRDICovCiAJCXNldHVwX2lycSAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9JODI1OUEsICZpODI1OWlycSk7CiAJCXNldHVwX2lycSAoTUlQU0NQVV9JTlRfQkFTRStNSVBTQ1BVX0lOVF9DT1JFSEksICZjb3JlaGlfaXJxYWN0aW9uKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJfQogCWVsc2UgewotCQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBtaXBzSVJRKTsKIAkJc2V0dXBfaXJxIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0k4MjU5QSwgJmk4MjU5aXJxKTsKIAkJc2V0dXBfaXJxIChNSVBTQ1BVX0lOVF9CQVNFK01JUFNDUFVfSU5UX0NPUkVISSwgJmNvcmVoaV9pcnFhY3Rpb24pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZjOGVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogTWFsdGEgUGxhdGZvcm0tc3BlY2lmaWMgaG9va3MgZm9yIFNNUCBvcGVyYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9zbXRjX2lwaS5oPgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKworLyogVlBFL1NNUCBQcm90b3R5cGUgaW1wbGVtZW50cyBwbGF0Zm9ybSBpbnRlcmZhY2VzIGRpcmVjdGx5ICovCisjaWYgIWRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQorCisvKgorICogQ2F1c2UgdGhlIHNwZWNpZmllZCBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGEgdGFyZ2V0ZWQgIkNQVSIKKyAqLworCit2b2lkIGNvcmVfc2VuZF9pcGkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKy8qICJDUFUiIG1heSBiZSBUQyBvZiBzYW1lIFZQRSwgVlBFIG9mIHNhbWUgQ1BVLCBvciBkaWZmZXJlbnQgQ1BVICovCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXNtdGNfc2VuZF9pcGkoY3B1LCBMSU5VWF9TTVBfSVBJLCBhY3Rpb24pOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KK30KKworLyoKKyAqIERldGVjdCBhdmFpbGFibGUgQ1BVcy9WUEVzL1RDcyBhbmQgcG9wdWxhdGUgcGh5c19jcHVfcHJlc2VudF9tYXAKKyAqLworCit2b2lkIF9faW5pdCBwcm9tX2J1aWxkX2NwdV9tYXAodm9pZCkKK3sKKwlpbnQgbmV4dHNsb3Q7CisKKwkvKgorCSAqIEFzIG9mIE5vdmVtYmVyLCAyMDA0LCBNSVBTc2ltIG9ubHkgc2ltdWxhdGVzIG9uZSBjb3JlCisJICogYXQgYSB0aW1lLiAgSG93ZXZlciwgdGhhdCBjb3JlIG1heSBiZSBhIE1JUFMgTVQgY29yZQorCSAqIHdpdGggbXVsdGlwbGUgdmlydHVhbCBwcm9jZXNzb3JzIGFuZCB0aHJlYWQgY29udGV4dHMuCisJICovCisKKwlpZiAocmVhZF9jMF9jb25maWczKCkgJiAoMTw8MikpIHsKKwkJbmV4dHNsb3QgPSBtaXBzbXRfYnVpbGRfY3B1X21hcCgxKTsKKwl9Cit9CisKKy8qCisgKiBQbGF0Zm9ybSAiQ1BVIiBzdGFydHVwIGhvb2sKKyAqLworCit2b2lkIHByb21fYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGNwdSwgaWRsZSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworfQorCisvKgorICogUG9zdC1jb25maWcgYnV0IHByZS1ib290IGNsZWFudXAgZW50cnkgcG9pbnQKKyAqLworCit2b2lkIHByb21faW5pdF9zZWNvbmRhcnkodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisgICAgICAgIHZvaWQgc210Y19pbml0X3NlY29uZGFyeSh2b2lkKTsKKwlpbnQgbXl2cGU7CisKKwkvKiBEb24ndCBlbmFibGUgTWFsdGEgSS9PIGludGVycnVwdHMgKElQMikgZm9yIHNlY29uZGFyeSBWUEVzICovCisJbXl2cGUgPSByZWFkX2MwX3RjYmluZCgpICYgVENCSU5EX0NVUlZQRTsKKwlpZiAobXl2cGUgIT0gMCkgeworCQkvKiBJZGVhbGx5LCB0aGlzIHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSBwZXIgVlBFLCBidXQuLi4gKi8KKwkJY2xlYXJfYzBfc3RhdHVzKFNUQVRVU0ZfSVAyKTsKKwkJc2V0X2MwX3N0YXR1cyhTVEFUVVNGX0lQMCB8IFNUQVRVU0ZfSVAxIHwgU1RBVFVTRl9JUDMKKwkJCQl8IFNUQVRVU0ZfSVA0IHwgU1RBVFVTRl9JUDUgfCBTVEFUVVNGX0lQNgorCQkJCXwgU1RBVFVTRl9JUDcpOworCX0KKworICAgICAgICBzbXRjX2luaXRfc2Vjb25kYXJ5KCk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworfQorCisvKgorICogUGxhdGZvcm0gU01QIHByZS1pbml0aWFsaXphdGlvbgorICoKKyAqIEFzIG5vdGVkIGFib3ZlLCB3ZSBjYW4gYXNzdW1lIGEgc2luZ2xlIENQVSBmb3Igbm93CisgKiBidXQgaXQgbWF5IGJlIG11bHRpdGhyZWFkZWQuCisgKi8KKwordm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKQoreworCWlmIChyZWFkX2MwX2NvbmZpZzMoKSAmICgxPDwyKSkKKwkJbWlwc210X2J1aWxkX2NwdV9tYXAoMCk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlpZiAocmVhZF9jMF9jb25maWczKCkgJiAoMTw8MikpCisJCW1pcHNtdF9wcmVwYXJlX2NwdXMoKTsKK30KKworLyoKKyAqIFNNUCBpbml0aWFsaXphdGlvbiBmaW5hbGl6YXRpb24gZW50cnkgcG9pbnQKKyAqLworCit2b2lkIHByb21fc21wX2ZpbmlzaCh2b2lkKQoreworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzbXRjX3NtcF9maW5pc2goKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCit9CisKKy8qCisgKiBIb29rIGZvciBhZnRlciBhbGwgQ1BVcyBhcmUgb25saW5lCisgKi8KKwordm9pZCBwcm9tX2NwdXNfZG9uZSh2b2lkKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX01JUFMzMlIyX01UX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9pbnQuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfaW50LmMKaW5kZXggOTBmZGEwZC4uOTE2OGQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX2ludC5jCkBAIC0yNCwxNiArMjQsOTQgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3NlYWRpbnQuaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtaXBzSVJRKHZvaWQpOworc3RhdGljIGlubGluZSBpbnQgY2x6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisvKgorICogVmVyc2lvbiBvZiBmZnMgdGhhdCBvbmx5IGxvb2tzIGF0IGJpdHMgMTIuLjE1LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfZmZzKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCisJcmV0dXJuIC1jbHoocGVuZGluZykgKyAzMSAtIENBVVNFQl9JUDsKKyNlbHNlCisJdW5zaWduZWQgaW50IGEwID0gNzsKKwl1bnNpZ25lZCBpbnQgdDA7CisKKwl0MCA9IHMwICYgMHhmMDAwOworCXQwID0gdDAgPCAxOworCXQwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJczAgPSBzMCA8PCB0MDsKKworCXQwID0gczAgJiAweGMwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAxOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4ODAwMDsKKwl0MCA9IHQwIDwgMTsKKwkvL3QwID0gdDAgPDwgMjsKKwlhMCA9IGEwIC0gdDA7CisJLy9zMCA9IHMwIDw8IHQwOworCisJcmV0dXJuIGEwOworI2VuZGlmCit9CisKKy8qCisgKiBJUlFzIG9uIHRoZSBTRUFEIGJvYXJkIGxvb2sgYmFzaWNhbGx5IGFyZSBjb21iaW5lZCB0b2dldGhlciBvbiBoYXJkd2FyZQorICogaW50ZXJydXB0IDAgKE1JUFMgSVJRIDIpKSBsaWtlOgorICoKKyAqCU1JUFMgSVJRCVNvdXJjZQorICogICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tCisgKiAgICAgICAgICAgICAwCVNvZnR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgMSAgICAgICAgU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAyICAgICAgICBVQVJUMCAoaHcwKQorICogICAgICAgICAgICAgMyAgICAgICAgVUFSVDEgKGh3MSkKKyAqICAgICAgICAgICAgIDQgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQorICogICAgICAgICAgICAgNSAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICA2ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCisgKgorICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgorICoKKyAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCisgKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAorICoKKyAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQorICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgorICovCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCWludCBpcnE7CisKKwlpcnEgPSBpcnFfZmZzKHBlbmRpbmcpOworCisJaWYgKGlycSA+PSAwKQorCQlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIGlycSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAltaXBzX2NwdV9pcnFfaW5pdChNSVBTQ1BVX0lOVF9CQVNFKTsKLQotCS8qIE5vdyBzYWZlIHRvIHNldCB0aGUgZXhjZXB0aW9uIHZlY3Rvci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBtaXBzSVJRKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vY21kbGluZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9jbWRsaW5lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZjlmYmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9jbWRsaW5lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIEtlcm5lbCBjb21tYW5kIGxpbmUgY3JlYXRpb24gdXNpbmcgdGhlIHByb20gbW9uaXRvciAoWUFNT04pIGFyZ2MvYXJndi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotCi1leHRlcm4gaW50IHByb21fYXJnYzsKLWV4dGVybiBpbnQgKl9wcm9tX2FyZ3Y7Ci0KLS8qCi0gKiBZQU1PTiAoMzItYml0IFBST00pIHBhc3MgYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBhcyAzMi1iaXQgcG9pbnRlci4KLSAqIFRoaXMgbWFjcm8gdGFrZSBjYXJlIG9mIHNpZ24gZXh0ZW5zaW9uLgotICovCi0jZGVmaW5lIHByb21fYXJndihpbmRleCkgKChjaGFyICopKCgoaW50ICopKGludClfcHJvbV9hcmd2KVsoaW5kZXgpXSkpCi0KLWNoYXIgYXJjc19jbWRsaW5lW0NMX1NJWkVdOwotCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KLQotdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCi17Ci0JY2hhciAqY3A7Ci0JaW50IGFjdHI7Ci0KLQlhY3RyID0gMTsgLyogQWx3YXlzIGlnbm9yZSBhcmd2WzBdICovCi0KLQljcCA9ICYoYXJjc19jbWRsaW5lWzBdKTsKLQl3aGlsZShhY3RyIDwgcHJvbV9hcmdjKSB7Ci0JICAgICAgICBzdHJjcHkoY3AsIHByb21fYXJndihhY3RyKSk7Ci0JCWNwICs9IHN0cmxlbihwcm9tX2FyZ3YoYWN0cikpOwotCQkqY3ArKyA9ICcgJzsKLQkJYWN0cisrOwotCX0KLQlpZiAoY3AgIT0gJihhcmNzX2NtZGxpbmVbMF0pKSAvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JKmNwID0gJ1wwJzsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2NtZGxpbmUuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2NtZGxpbmUuYwppbmRleCA5ZGYzN2M2Li5jNjMwMjFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fY21kbGluZS5jCkBAIC0yNiw4ICsyNiwxMCBAQAogCXJldHVybiBhcmNzX2NtZGxpbmU7CiB9CiAKLQogdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworCWNoYXIgKmNwOworCWNwID0gYXJjc19jbWRsaW5lOworCS8qIEdldCBib290IGxpbmUgZnJvbSBlbnZpcm9ubWVudD8gKi8KKwkqY3AgPSAnXDAnOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faW50LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYwppbmRleCBhNGQwYTJjLi4yYzE1YzhlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pbnQuYwpAQCAtMjUsMTcgKzI1LDcxIEBACiAKIGV4dGVybiB2b2lkIG1pcHNfY3B1X2lycV9pbml0KGludCk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgc2ltSVJRKHZvaWQpOworc3RhdGljIGlubGluZSBpbnQgY2x6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKIAotYXNtbGlua2FnZSB2b2lkIHNpbV9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBWZXJzaW9uIG9mIGZmcyB0aGF0IG9ubHkgbG9va3MgYXQgYml0cyAxMi4uMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlycV9mZnModW5zaWduZWQgaW50IHBlbmRpbmcpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX01JUFM2NCkKKwlyZXR1cm4gLWNseihwZW5kaW5nKSArIDMxIC0gQ0FVU0VCX0lQOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgYTAgPSA3OworCXVuc2lnbmVkIGludCB0MDsKKworCXQwID0gczAgJiAweGYwMDA7CisJdDAgPSB0MCA8IDE7CisJdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwlzMCA9IHMwIDw8IHQwOworCisJdDAgPSBzMCAmIDB4YzAwMDsKKwl0MCA9IHQwIDwgMTsKKwl0MCA9IHQwIDw8IDE7CisJYTAgPSBhMCAtIHQwOworCXMwID0gczAgPDwgdDA7CisKKwl0MCA9IHMwICYgMHg4MDAwOworCXQwID0gdDAgPCAxOworCS8vdDAgPSB0MCA8PCAyOworCWEwID0gYTAgLSB0MDsKKwkvL3MwID0gczAgPDwgdDA7CisKKwlyZXR1cm4gYTA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpbV9odzBfaXJxZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJZG9fSVJRKDIsIHJlZ3MpOwogfQogCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOworCWludCBpcnE7CisKKwlpcnEgPSBpcnFfZmZzKHBlbmRpbmcpOworCisJaWYgKGlycSA+IDApCisJCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgaXJxLCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCS8qIE5vdyBzYWZlIHRvIHNldCB0aGUgZXhjZXB0aW9uIHZlY3Rvci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBzaW1JUlEpOwotCiAJbWlwc19jcHVfaXJxX2luaXQoTUlQU0NQVV9JTlRfQkFTRSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9pcnEuUyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TCmluZGV4IGRhNTIyOTcuLmQxNmNmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TCkBAIC05NCw2ICs5NCw4IEBACiAKIAogc3B1cmlvdXM6Ci0JaglzcHVyaW91c19pbnRlcnJ1cHQKKwlqYWwJc3B1cmlvdXNfaW50ZXJydXB0CisJIG5vcAorCWoJcmV0X2Zyb21faXJxCiAJIG5vcAogCUVORChzaW1JUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9tZW0uYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCmluZGV4IGU1N2Y3MzcuLmY3Y2U3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCkBAIC0xOCw5ICsxOCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogCkBAIC0zOSw5ICs0MSw2IEBACiB9OwogI2VuZGlmCiAKLS8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCi1leHRlcm4gY2hhciBfZW5kOwotCiBzdHJ1Y3QgcHJvbV9wbWVtYmxvY2sgKiBfX2luaXQgcHJvbV9nZXRtZGVzYyh2b2lkKQogewogCXVuc2lnbmVkIGludCBtZW1zaXplOwpAQCAtNjEsMTAgKzYwLDEwIEBACiAKIAltZGVzY1syXS50eXBlID0gc2ltbWVtX3Jlc2VydmVkOwogCW1kZXNjWzJdLmJhc2UgPSAweDAwMTAwMDAwOwotCW1kZXNjWzJdLnNpemUgPSBDUEhZU0FERFIoUEFHRV9BTElHTigmX2VuZCkpIC0gbWRlc2NbMl0uYmFzZTsKKwltZGVzY1syXS5zaXplID0gQ1BIWVNBRERSKFBGTl9BTElHTigmX2VuZCkpIC0gbWRlc2NbMl0uYmFzZTsKIAogCW1kZXNjWzNdLnR5cGUgPSBzaW1tZW1fZnJlZTsKLQltZGVzY1szXS5iYXNlID0gQ1BIWVNBRERSKFBBR0VfQUxJR04oJl9lbmQpKTsKKwltZGVzY1szXS5iYXNlID0gQ1BIWVNBRERSKFBGTl9BTElHTigmX2VuZCkpOwogCW1kZXNjWzNdLnNpemUgPSBtZW1zaXplIC0gbWRlc2NbM10uYmFzZTsKIAogCXJldHVybiAmbWRlc2NbMF07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCmluZGV4IGE5ZjBjMmIuLmI3MDg0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCkBAIC00NCw4ICs0NCw2IEBACiB2b2lkIGNvcmVfc2VuZF9pcGkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKIHsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0Jdm9pZCBzbXRjX3NlbmRfaXBpKGludCwgaW50LCB1bnNpZ25lZCBpbnQpOwotCiAJc210Y19zZW5kX2lwaShjcHUsIExJTlVYX1NNUF9JUEksIGFjdGlvbik7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogLyogIkNQVSIgbWF5IGJlIFRDIG9mIHNhbWUgVlBFLCBWUEUgb2Ygc2FtZSBDUFUsIG9yIGRpZmZlcmVudCBDUFUgKi8KQEAgLTU5LDE1ICs1Nyw4IEBACiB2b2lkIF9faW5pdCBwcm9tX2J1aWxkX2NwdV9tYXAodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JZXh0ZXJuIGludCBtaXBzbXRfYnVpbGRfY3B1X21hcChpbnQgc3RhcnRzbG90KTsKIAlpbnQgbmV4dHNsb3Q7CiAKLQljcHVzX2NsZWFyKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBib290IENQVSAqLwotCi0Jc21wX3ByZXBhcmVfYm9vdF9jcHUoKTsKLQogCS8qCiAJICogQXMgb2YgTm92ZW1iZXIsIDIwMDQsIE1JUFNzaW0gb25seSBzaW11bGF0ZXMgb25lIGNvcmUKIAkgKiBhdCBhIHRpbWUuICBIb3dldmVyLCB0aGF0IGNvcmUgbWF5IGJlIGEgTUlQUyBNVCBjb3JlCkBAIC04Nyw4ICs3OCw2IEBACiB2b2lkIHByb21fYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlleHRlcm4gdm9pZCBzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7Ci0KIAlzbXRjX2Jvb3Rfc2Vjb25kYXJ5KGNwdSwgaWRsZSk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogfQpAQCAtMTEzLDcgKzEwMiw2IEBACiB2b2lkIHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0Jdm9pZCBtaXBzbXRfcHJlcGFyZV9jcHVzKGludCBjKTsKIAkvKgogCSAqIEFzIG5vdGVkIGFib3ZlLCB3ZSBjYW4gYXNzdW1lIGEgc2luZ2xlIENQVSBmb3Igbm93CiAJICogYnV0IGl0IG1heSBiZSBtdWx0aXRocmVhZGVkLgpAQCAtMTMyLDggKzEyMCw2IEBACiB2b2lkIHByb21fc21wX2ZpbmlzaCh2b2lkKQogewogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQl2b2lkIHNtdGNfc21wX2ZpbmlzaCh2b2lkKTsKLQogCXNtdGNfc21wX2ZpbmlzaCgpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXIzay5jIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKaW5kZXggOWRkMTM1Mi4uYmIwNDFhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjNrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKQEAgLTI2MCw2ICsyNjAsMTAgQEAKIHsKIH0KIAorc3RhdGljIHZvaWQgbG9jYWxfcjNrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7Cit9CisKIHN0YXRpYyB2b2lkIHIza19mbHVzaF9kYXRhX2NhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQogewogfQpAQCAtMzM1LDYgKzMzOSw3IEBACiAJZmx1c2hfaWNhY2hlX3JhbmdlID0gcjNrX2ZsdXNoX2ljYWNoZV9yYW5nZTsKIAogCWZsdXNoX2NhY2hlX3NpZ3RyYW1wID0gcjNrX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wOworCWxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9IGxvY2FsX3Iza19mbHVzaF9kYXRhX2NhY2hlX3BhZ2U7CiAJZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gcjNrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAogCV9kbWFfY2FjaGVfd2JhY2tfaW52ID0gcjNrX2RtYV9jYWNoZV93YmFja19pbnY7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IDMyYjdmNmEuLjRhNDM5MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0yOSw2ICsyOSwyNyBAQAogI2luY2x1ZGUgPGFzbS93YXIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPiAvKiBmb3IgcnVuX3VuY2FjaGVkKCkgKi8KIAorCisvKgorICogU3BlY2lhbCBWYXJpYW50IG9mIHNtcF9jYWxsX2Z1bmN0aW9uIGZvciB1c2UgYnkgY2FjaGUgZnVuY3Rpb25zOgorICoKKyAqICBvIE5vIHJldHVybiB2YWx1ZQorICogIG8gY29sbGFwc2VzIHRvIG5vcm1hbCBmdW5jdGlvbiBjYWxsIG9uIFVQIGtlcm5lbHMKKyAqICBvIGNvbGxhcHNlcyB0byBub3JtYWwgZnVuY3Rpb24gY2FsbCBvbiBzeXN0ZW1zIHdpdGggYSBzaW5nbGUgc2hhcmVkCisgKiAgICBwcmltYXJ5IGNhY2hlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcjRrX29uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXRyeSwgaW50IHdhaXQpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApICYmICFkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCisJc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworI2VuZGlmCisJZnVuYyhpbmZvKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCiAvKgogICogTXVzdCBkaWUuCiAgKi8KQEAgLTE1NCw3ICsxNzUsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdHg0OV9ibGFzdF9pY2FjaGUzMl9wYWdlX2luZGV4ZWQodW5zaWduZWQgbG9uZyBwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOworCXVuc2lnbmVkIGxvbmcgaW5kZXhtYXNrID0gY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5c2l6ZSAtIDE7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IElOREVYX0JBU0UgKyAocGFnZSAmIGluZGV4bWFzayk7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIFBBR0VfU0laRTsKIAl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXliaXQ7CiAJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzIDw8CkBAIC0yOTgsNyArMzIwLDcgQEAKIAlpZiAoIWNwdV9oYXNfZGNfYWxpYXNlcykKIAkJcmV0dXJuOwogCi0Jb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9hbGwsIE5VTEwsIDEsIDEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX19fZmx1c2hfY2FjaGVfYWxsKHZvaWQgKiBhcmdzKQpAQCAtMzEzLDEzICszMzUsMTQgQEAKIAljYXNlIENQVV9SNDQwME1DOgogCWNhc2UgQ1BVX1IxMDAwMDoKIAljYXNlIENQVV9SMTIwMDA6CisJY2FzZSBDUFVfUjE0MDAwOgogCQlyNGtfYmxhc3Rfc2NhY2hlKCk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCByNGtfX19mbHVzaF9jYWNoZV9hbGwodm9pZCkKIHsKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfX19mbHVzaF9jYWNoZV9hbGwsIE5VTEwsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfX19mbHVzaF9jYWNoZV9hbGwsIE5VTEwsIDEsIDEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3JhbmdlKHZvaWQgKiBhcmdzKQpAQCAtMzQwLDcgKzM2Myw3IEBACiBzdGF0aWMgdm9pZCByNGtfZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0Jb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3JhbmdlLCB2bWEsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcmFuZ2UsIHZtYSwgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfZmx1c2hfY2FjaGVfbW0odm9pZCAqIGFyZ3MpCkBAIC0zNjksNyArMzkyLDcgQEAKIAlpZiAoIWNwdV9oYXNfZGNfYWxpYXNlcykKIAkJcmV0dXJuOwogCi0Jb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX21tLCBtbSwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9tbSwgbW0sIDEsIDEpOwogfQogCiBzdHJ1Y3QgZmx1c2hfY2FjaGVfcGFnZV9hcmdzIHsKQEAgLTQ2MCw3ICs0ODMsNyBAQAogCWFyZ3MuYWRkciA9IGFkZHI7CiAJYXJncy5wZm4gPSBwZm47CiAKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcGFnZSwgJmFyZ3MsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcGFnZSwgJmFyZ3MsIDEsIDEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSh2b2lkICogYWRkcikKQEAgLTQ3MCw3ICs0OTMsNyBAQAogCiBzdGF0aWMgdm9pZCByNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlLCAodm9pZCAqKSBhZGRyLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSwgKHZvaWQgKikgYWRkciwgMSwgMSk7CiB9CiAKIHN0cnVjdCBmbHVzaF9pY2FjaGVfcmFuZ2VfYXJncyB7CkBAIC01MTMsNyArNTM2LDcgQEAKIAlhcmdzLnN0YXJ0ID0gc3RhcnQ7CiAJYXJncy5lbmQgPSBlbmQ7CiAKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfaWNhY2hlX3JhbmdlLCAmYXJncywgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9pY2FjaGVfcmFuZ2UsICZhcmdzLCAxLCAxKTsKIAlpbnN0cnVjdGlvbl9oYXphcmQoKTsKIH0KIApAQCAtNTg5LDcgKzYxMiw3IEBACiAJYXJncy52bWEgPSB2bWE7CiAJYXJncy5wYWdlID0gcGFnZTsKIAotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9pY2FjaGVfcGFnZSwgJmFyZ3MsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfaWNhY2hlX3BhZ2UsICZhcmdzLCAxLCAxKTsKIH0KIAogCkBAIC02ODgsNyArNzExLDcgQEAKIAogc3RhdGljIHZvaWQgcjRrX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfc2lndHJhbXAsICh2b2lkICopIGFkZHIsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfc2lndHJhbXAsICh2b2lkICopIGFkZHIsIDEsIDEpOwogfQogCiBzdGF0aWMgdm9pZCByNGtfZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQpAQCAtNzQ5LDEyICs3NzIsMTIgQEAKIAkJaWNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgQ09ORl9JQykgPj4gOSkpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0lCKSA+PiA1KTsKIAkJYy0+aWNhY2hlLndheXMgPSAyOwotCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplLzIpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplLzIpOwogCiAJCWRjYWNoZV9zaXplID0gMSA8PCAoMTIgKyAoKGNvbmZpZyAmIENPTkZfREMpID4+IDYpKTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDE2IDw8ICgoY29uZmlnICYgQ09ORl9EQikgPj4gNCk7CiAJCWMtPmRjYWNoZS53YXlzID0gMjsKLQkJYy0+ZGNhY2hlLndheWJpdD0gZmZzKGRjYWNoZV9zaXplLzIpIC0gMTsKKwkJYy0+ZGNhY2hlLndheWJpdD0gX19mZnMoZGNhY2hlX3NpemUvMik7CiAKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CiAJCWJyZWFrOwpAQCAtODExLDYgKzgzNCw3IEBACiAKIAljYXNlIENQVV9SMTAwMDA6CiAJY2FzZSBDUFVfUjEyMDAwOgorCWNhc2UgQ1BVX1IxNDAwMDoKIAkJaWNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgUjEwS19DT05GX0lDKSA+PiAyOSkpOwogCQljLT5pY2FjaGUubGluZXN6ID0gNjQ7CiAJCWMtPmljYWNoZS53YXlzID0gMjsKQEAgLTgzNywxMiArODYxLDEyIEBACiAJCWljYWNoZV9zaXplID0gMSA8PCAoMTAgKyAoKGNvbmZpZyAmIENPTkZfSUMpID4+IDkpKTsKIAkJYy0+aWNhY2hlLmxpbmVzeiA9IDE2IDw8ICgoY29uZmlnICYgQ09ORl9JQikgPj4gNSk7CiAJCWMtPmljYWNoZS53YXlzID0gMjsKLQkJYy0+aWNhY2hlLndheWJpdCA9IGZmcyhpY2FjaGVfc2l6ZS8yKSAtIDE7CisJCWMtPmljYWNoZS53YXliaXQgPSBfX2ZmcyhpY2FjaGVfc2l6ZS8yKTsKIAogCQlkY2FjaGVfc2l6ZSA9IDEgPDwgKDEwICsgKChjb25maWcgJiBDT05GX0RDKSA+PiA2KSk7CiAJCWMtPmRjYWNoZS5saW5lc3ogPSAxNiA8PCAoKGNvbmZpZyAmIENPTkZfREIpID4+IDQpOwogCQljLT5kY2FjaGUud2F5cyA9IDI7Ci0JCWMtPmRjYWNoZS53YXliaXQgPSBmZnMoZGNhY2hlX3NpemUvMikgLSAxOworCQljLT5kY2FjaGUud2F5Yml0ID0gX19mZnMoZGNhY2hlX3NpemUvMik7CiAKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CiAJCWJyZWFrOwpAQCAtODczLDEyICs4OTcsMTIgQEAKIAkJaWNhY2hlX3NpemUgPSAxIDw8ICgxMiArICgoY29uZmlnICYgQ09ORl9JQykgPj4gOSkpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMTYgPDwgKChjb25maWcgJiBDT05GX0lCKSA+PiA1KTsKIAkJYy0+aWNhY2hlLndheXMgPSA0OwotCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplIC8gYy0+aWNhY2hlLndheXMpIC0gMTsKKwkJYy0+aWNhY2hlLndheWJpdCA9IF9fZmZzKGljYWNoZV9zaXplIC8gYy0+aWNhY2hlLndheXMpOwogCiAJCWRjYWNoZV9zaXplID0gMSA8PCAoMTIgKyAoKGNvbmZpZyAmIENPTkZfREMpID4+IDYpKTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDE2IDw8ICgoY29uZmlnICYgQ09ORl9EQikgPj4gNCk7CiAJCWMtPmRjYWNoZS53YXlzID0gNDsKLQkJYy0+ZGNhY2hlLndheWJpdCA9IGZmcyhkY2FjaGVfc2l6ZSAvIGMtPmRjYWNoZS53YXlzKSAtIDE7CisJCWMtPmRjYWNoZS53YXliaXQgPSBfX2ZmcyhkY2FjaGVfc2l6ZSAvIGMtPmRjYWNoZS53YXlzKTsKIAogI2lmICFkZWZpbmVkKENPTkZJR19TTVApIHx8ICFkZWZpbmVkKFJNOTAwMF9DREVYX1NNUF9XQVIpCiAJCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QOwpAQCAtOTA2LDcgKzkzMCw3IEBACiAJCWljYWNoZV9zaXplID0gYy0+aWNhY2hlLnNldHMgKgogCQkgICAgICAgICAgICAgIGMtPmljYWNoZS53YXlzICoKIAkJICAgICAgICAgICAgICBjLT5pY2FjaGUubGluZXN6OwotCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplL2MtPmljYWNoZS53YXlzKSAtIDE7CisJCWMtPmljYWNoZS53YXliaXQgPSBfX2ZmcyhpY2FjaGVfc2l6ZS9jLT5pY2FjaGUud2F5cyk7CiAKIAkJaWYgKGNvbmZpZyAmIDB4OCkJCS8qIFZJIGJpdCAqLwogCQkJYy0+aWNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfVlRBRzsKQEAgLTkyNiw3ICs5NTAsNyBAQAogCQlkY2FjaGVfc2l6ZSA9IGMtPmRjYWNoZS5zZXRzICoKIAkJICAgICAgICAgICAgICBjLT5kY2FjaGUud2F5cyAqCiAJCSAgICAgICAgICAgICAgYy0+ZGNhY2hlLmxpbmVzejsKLQkJYy0+ZGNhY2hlLndheWJpdCA9IGZmcyhkY2FjaGVfc2l6ZS9jLT5kY2FjaGUud2F5cykgLSAxOworCQljLT5kY2FjaGUud2F5Yml0ID0gX19mZnMoZGNhY2hlX3NpemUvYy0+ZGNhY2hlLndheXMpOwogCiAJCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfUFJFRkVUQ0g7CiAJCWJyZWFrOwpAQCAtOTY0LDkgKzk4OCwxMSBAQAogCQljLT5kY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9QSU5ERVg7CiAJY2FzZSBDUFVfUjEwMDAwOgogCWNhc2UgQ1BVX1IxMjAwMDoKKwljYXNlIENQVV9SMTQwMDA6CiAJY2FzZSBDUFVfU0IxOgogCQlicmVhazsKIAljYXNlIENQVV8yNEs6CisJY2FzZSBDUFVfMzRLOgogCQlpZiAoIShyZWFkX2MwX2NvbmZpZzcoKSAmICgxIDw8IDE2KSkpCiAJZGVmYXVsdDoKIAkJCWlmIChjLT5kY2FjaGUud2F5c2l6ZSA+IFBBR0VfU0laRSkKQEAgLTEwOTAsNiArMTExNiw3IEBACiAKIAljYXNlIENQVV9SMTAwMDA6CiAJY2FzZSBDUFVfUjEyMDAwOgorCWNhc2UgQ1BVX1IxNDAwMDoKIAkJc2NhY2hlX3NpemUgPSAweDgwMDAwIDw8ICgoY29uZmlnICYgUjEwS19DT05GX1NTKSA+PiAxNik7CiAJCWMtPnNjYWNoZS5saW5lc3ogPSA2NCA8PCAoKGNvbmZpZyA+PiAxMykgJiAxKTsKIAkJYy0+c2NhY2hlLndheXMgPSAyOwpAQCAtMTEzNCw2ICsxMTYxLDMxIEBACiAJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9TVUJTRVRfQ0FDSEVTOwogfQogCit2b2lkIGF1MXgwMF9maXh1cF9jb25maWdfb2Qodm9pZCkKK3sKKwkvKgorCSAqIGMwX2NvbmZpZy5vZCAoYml0IDE5KSB3YXMgd3JpdGUgb25seSAoYW5kIHJlYWQgYXMgMCkKKwkgKiBvbiB0aGUgZWFybHkgcmV2aXNpb25zIG9mIEFsY2hlbXkgU09Dcy4gIEl0IGRpc2FibGVzIHRoZSBidXMKKwkgKiB0cmFuc2FjdGlvbiBvdmVybGFwcGluZyBhbmQgbmVlZHMgdG8gYmUgc2V0IHRvIGZpeCB2YXJpb3VzIGVycmF0YS4KKwkgKi8KKwlzd2l0Y2ggKHJlYWRfYzBfcHJpZCgpKSB7CisJY2FzZSAweDAwMDMwMTAwOiAvKiBBdTEwMDAgREEgKi8KKwljYXNlIDB4MDAwMzAyMDE6IC8qIEF1MTAwMCBIQSAqLworCWNhc2UgMHgwMDAzMDIwMjogLyogQXUxMDAwIEhCICovCisJY2FzZSAweDAxMDMwMjAwOiAvKiBBdTE1MDAgQUIgKi8KKwkvKgorCSAqIEF1MTEwMCBlcnJhdGEgYWN0dWFsbHkga2VlcHMgc2lsZW5jZSBhYm91dCB0aGlzIGJpdCwgc28gd2Ugc2V0IGl0CisJICoganVzdCBpbiBjYXNlIGZvciB0aG9zZSByZXZpc2lvbnMgdGhhdCByZXF1aXJlIGl0IHRvIGJlIHNldCBhY2NvcmRpbmcKKwkgKiB0byBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jcHV0YWJsZS5jCisJICovCisJY2FzZSAweDAyMDMwMjAwOiAvKiBBdTExMDAgQUIgKi8KKwljYXNlIDB4MDIwMzAyMDE6IC8qIEF1MTEwMCBCQSAqLworCWNhc2UgMHgwMjAzMDIwMjogLyogQXUxMTAwIEJDICovCisJCXNldF9jMF9jb25maWcoMSA8PCAxOSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGlubGluZSB2b2lkIGNvaGVyZW5jeV9zZXR1cCh2b2lkKQogewogCWNoYW5nZV9jMF9jb25maWcoQ09ORl9DTV9DTUFTSywgQ09ORl9DTV9ERUZBVUxUKTsKQEAgLTExNTQsNiArMTIwNiwxNSBAQAogCWNhc2UgQ1BVX1I0NDAwTUM6CiAJCWNsZWFyX2MwX2NvbmZpZyhDT05GX0NVKTsKIAkJYnJlYWs7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGNhdGNoIHRoZSBlYWxyeSBBbGNoZW15IFNPQ3Mgd2l0aAorCSAqIHRoZSB3cml0ZS1vbmx5IGNvX2NvbmZpZy5vZCBiaXQgYW5kIHNldCBpdCBiYWNrIHRvIG9uZS4uLgorCSAqLworCWNhc2UgQ1BVX0FVMTAwMDogLyogcmV2LiBEQSwgSEEsIEhCICovCisJY2FzZSBDUFVfQVUxMTAwOiAvKiByZXYuIEFCLCBCQSwgQkMgPz8gKi8KKwljYXNlIENQVV9BVTE1MDA6IC8qIHJldi4gQUIgKi8KKwkJYXUxeDAwX2ZpeHVwX2NvbmZpZ19vZCgpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTExOTgsNiArMTI1OSw3IEBACiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcAk9IHI0a19mbHVzaF9jYWNoZV9zaWd0cmFtcDsKIAlmbHVzaF9pY2FjaGVfYWxsCT0gcjRrX2ZsdXNoX2ljYWNoZV9hbGw7CisJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlCT0gbG9jYWxfcjRrX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZTsKIAlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UJPSByNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlOwogCWZsdXNoX2ljYWNoZV9yYW5nZQk9IHI0a19mbHVzaF9pY2FjaGVfcmFuZ2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXNiMS5jIGIvYXJjaC9taXBzL21tL2Mtc2IxLmMKaW5kZXggMmYwOGI1My4uZjliMTI5NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2Mtc2IxLmMKKysrIGIvYXJjaC9taXBzL21tL2Mtc2IxLmMKQEAgLTUyOCw2ICs1MjgsNyBAQAogCWZsdXNoX2NhY2hlX3BhZ2UgPSBzYjFfZmx1c2hfY2FjaGVfcGFnZTsKIAogCWZsdXNoX2NhY2hlX3NpZ3RyYW1wID0gc2IxX2ZsdXNoX2NhY2hlX3NpZ3RyYW1wOworCWxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9ICh2b2lkICopIHNiMV9ub3A7CiAJZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gKHZvaWQgKikgc2IxX25vcDsKIAogCS8qIEZ1bGwgZmx1c2ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXR4MzkuYyBiL2FyY2gvbWlwcy9tbS9jLXR4MzkuYwppbmRleCBmZTIzMmUzLi41ZGZjOWIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy10eDM5LmMKKysrIGIvYXJjaC9taXBzL21tL2MtdHgzOS5jCkBAIC0yMTYsNiArMjE2LDExIEBACiAJCXR4MzlfYmxhc3RfaWNhY2hlX3BhZ2VfaW5kZXhlZChwYWdlKTsKIH0KIAorc3RhdGljIHZvaWQgbG9jYWxfdHgzOV9mbHVzaF9kYXRhX2NhY2hlX3BhZ2Uodm9pZCAqIGFkZHIpCit7CisJdHgzOV9ibGFzdF9kY2FjaGVfcGFnZShhZGRyKTsKK30KKwogc3RhdGljIHZvaWQgdHgzOV9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXR4MzlfYmxhc3RfZGNhY2hlX3BhZ2UoYWRkcik7CkBAIC0zODEsNiArMzg2LDcgQEAKIAkJZmx1c2hfaWNhY2hlX3JhbmdlCT0gKHZvaWQgKikgdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKIAogCQlmbHVzaF9jYWNoZV9zaWd0cmFtcAk9ICh2b2lkICopIHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CisJCWxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZQk9ICh2b2lkICopIHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CiAJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZQk9ICh2b2lkICopIHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CiAKIAkJX2RtYV9jYWNoZV93YmFja19pbnYJPSB0eDM5aF9kbWFfY2FjaGVfd2JhY2tfaW52OwpAQCAtNDA2LDYgKzQxMiw3IEBACiAJCWZsdXNoX2ljYWNoZV9yYW5nZSA9IHR4MzlfZmx1c2hfaWNhY2hlX3JhbmdlOwogCiAJCWZsdXNoX2NhY2hlX3NpZ3RyYW1wID0gdHgzOV9mbHVzaF9jYWNoZV9zaWd0cmFtcDsKKwkJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlID0gbG9jYWxfdHgzOV9mbHVzaF9kYXRhX2NhY2hlX3BhZ2U7CiAJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZSA9IHR4MzlfZmx1c2hfZGF0YV9jYWNoZV9wYWdlOwogCiAJCV9kbWFfY2FjaGVfd2JhY2tfaW52ID0gdHgzOV9kbWFfY2FjaGVfd2JhY2tfaW52OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NhY2hlLmMgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwppbmRleCA1OTFjMjJiLi44M2E1NjI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2FjaGUuYworKysgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwpAQCAtMzAsNiArMzAsNyBAQAogCiAvKiBNSVBTIHNwZWNpZmljIGNhY2hlIG9wZXJhdGlvbnMgKi8KIHZvaWQgKCpmbHVzaF9jYWNoZV9zaWd0cmFtcCkodW5zaWduZWQgbG9uZyBhZGRyKTsKK3ZvaWQgKCpsb2NhbF9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UpKHZvaWQgKiBhZGRyKTsKIHZvaWQgKCpmbHVzaF9kYXRhX2NhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiB2b2lkICgqZmx1c2hfaWNhY2hlX2FsbCkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKaW5kZXggMmQ5NjI0Zi4uZTNhNjE3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKQEAgLTE1Nyw3ICsxNTcsNiBAQAogCSAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KIAkgKiB0ZXJtaW5hdGUgdGhpbmdzIHdpdGggZXh0cmVtZSBwcmVqdWRpY2UuCiAJICovCi0KIAlidXN0X3NwaW5sb2NrcygxKTsKIAogCXByaW50ayhLRVJOX0FMRVJUICJDUFUgJWQgVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgcGFnaW5nIHJlcXVlc3QgYXQgIgpAQCAtMTg4LDExICsxODcsMjAgQEAKIAkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllICovCiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCWdvdG8gbm9fY29udGV4dDsKLQorCWVsc2UKIAkvKgogCSAqIFNlbmQgYSBzaWdidXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSB3ZXJlIGluIGtlcm5lbAogCSAqIG9yIHVzZXIgbW9kZS4KIAkgKi8KKyNpZiAwCisJCXByaW50aygiZG9fcGFnZV9mYXVsdCgpICMzOiBzZW5kaW5nIFNJR0JVUyB0byAlcyBmb3IgIgorCQkgICAgICAgImludmFsaWQgJXNcbiUwKmx4IChlcGMgPT0gJTAqbHgsIHJhID09ICUwKmx4KVxuIiwKKwkJICAgICAgIHRzay0+Y29tbSwKKwkJICAgICAgIHdyaXRlID8gIndyaXRlIGFjY2VzcyB0byIgOiAicmVhZCBhY2Nlc3MgZnJvbSIsCisJCSAgICAgICBmaWVsZCwgYWRkcmVzcywKKwkJICAgICAgIGZpZWxkLCAodW5zaWduZWQgbG9uZykgcmVncy0+Y3AwX2VwYywKKwkJICAgICAgIGZpZWxkLCAodW5zaWduZWQgbG9uZykgcmVncy0+cmVnc1szMV0pOworI2VuZGlmCiAJdHNrLT50aHJlYWQuY3AwX2JhZHZhZGRyID0gYWRkcmVzczsKIAlpbmZvLnNpX3NpZ25vID0gU0lHQlVTOwogCWluZm8uc2lfZXJybm8gPSAwOwpAQCAtMjAxLDcgKzIwOSw2IEBACiAJZm9yY2Vfc2lnX2luZm8oU0lHQlVTLCAmaW5mbywgdHNrKTsKIAogCXJldHVybjsKLQogdm1hbGxvY19mYXVsdDoKIAl7CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwppbmRleCAxZjdiMzdiLi4wYzU0NDM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKQEAgLTgzLDYgKzgzLDcgQEAKIAlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfTElNSVRFRF9ETUEKIC8qCiAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGttYXBfYXRvbWljKCkgYnV0IGNhbiBtYXAgbWVtb3J5IHRoYXQgZG9lc24ndAogICogaGF2ZSBhIHN0cnVjdCBwYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC4KQEAgLTEwMSw2ICsxMDIsNyBAQAogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CiB9CisjZW5kaWYgLyogQ09ORklHX0xJTUlURURfRE1BICovCiAKIHN0cnVjdCBwYWdlICpfX2ttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggYWQ4OWM0NC4uMzNmNmUxYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlmb3IgKHRtcCA9IDA7IHRtcCA8IG1heF9sb3dfcGZuOyB0bXArKykKIAkJaWYgKHBhZ2VfaXNfcmFtKHRtcCkpIHsKIAkJCXJhbSsrOwotCQkJaWYgKFBhZ2VSZXNlcnZlZChtZW1fbWFwK3RtcCkpCisJCQlpZiAoUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHRtcCkpKQogCQkJCXJlc2VydmVkcGFnZXMrKzsKIAkJfQogCkBAIC0yNzYsNiArMjc2LDIwIEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCiAKK3ZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWZvciAoYWRkciA9IGJlZ2luOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKKwkJbWVtc2V0KCh2b2lkICopYWRkciwgMHhjYywgUEFHRV9TSVpFKTsKKwkJZnJlZV9wYWdlKGFkZHIpOworCQl0b3RhbHJhbV9wYWdlcysrOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nICVzOiAlbGRrIGZyZWVkXG4iLCB3aGF0LCAoZW5kIC0gYmVnaW4pID4+IDEwKTsKK30KKwogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC0yODQsMTYgKzI5OCw3IEBACiAJc3RhcnQgPSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoQ1BIWVNBRERSKHN0YXJ0KSk7CiAJZW5kID0gKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KENQSFlTQUREUihlbmQpKTsKICNlbmRpZgotCWlmIChzdGFydCA8IGVuZCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLAotCQkgICAgICAgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0KLQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlmcmVlX3BhZ2Uoc3RhcnQpOwotCQl0b3RhbHJhbV9wYWdlcysrOwotCX0KKwlmcmVlX2luaXRfcGFnZXMoImluaXRyZCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKIH0KICNlbmRpZgogCkBAIC0zMDEsMjQgKzMwNiwxNyBAQAogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciwgcGFnZSwgZnJlZWQ7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBmcmVlZDsKIAogCWZyZWVkID0gcHJvbV9mcmVlX3Byb21fbWVtb3J5KCk7CisJaWYgKGZyZWVkKQorCQlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nIGZpcm13YXJlIG1lbW9yeTogJWxkayBmcmVlZFxuIixmcmVlZCk7CiAKLQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47Ci0Jd2hpbGUgKGFkZHIgPCAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQpIHsKKwlzdGFydCA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKTsKKwllbmQgPSAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOwogI2lmZGVmIENPTkZJR182NEJJVAotCQlwYWdlID0gUEFHRV9PRkZTRVQgfCBDUEhZU0FERFIoYWRkcik7Ci0jZWxzZQotCQlwYWdlID0gYWRkcjsKKwlzdGFydCA9IFBBR0VfT0ZGU0VUIHwgQ1BIWVNBRERSKHN0YXJ0KTsKKwllbmQgPSBQQUdFX09GRlNFVCB8IENQSFlTQUREUihlbmQpOwogI2VuZGlmCi0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlKSk7Ci0JCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UocGFnZSkpOwotCQlmcmVlX3BhZ2UocGFnZSk7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JCWZyZWVkICs9IFBBR0VfU0laRTsKLQkJYWRkciArPSBQQUdFX1NJWkU7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsCi0JICAgICAgIGZyZWVkID4+IDEwKTsKKwlmcmVlX2luaXRfcGFnZXMoInVudXNlZCBrZXJuZWwgbWVtb3J5Iiwgc3RhcnQsIGVuZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vcGctcjRrLmMgYi9hcmNoL21pcHMvbW0vcGctcjRrLmMKaW5kZXggZTQzOTBkYy4uYjdjNzQ5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BnLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwpAQCAtMzU3LDYgKzM1Nyw3IEBACiAKIAkJY2FzZSBDUFVfUjEwMDAwOgogCQljYXNlIENQVV9SMTIwMDA6CisJCWNhc2UgQ1BVX1IxNDAwMDoKIAkJCXByZWZfc3JjX21vZGUgPSBQcmVmX0xvYWRTdHJlYW1lZDsKIAkJCXByZWZfZHN0X21vZGUgPSBQcmVmX1N0b3JlU3RyZWFtZWQ7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMgYi9hcmNoL21pcHMvbW0vc2Mtcm03ay5jCmluZGV4IDNiNmNjOWIuLjMxZWM3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLXJtN2suYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAljLT5zY2FjaGUubGluZXN6ID0gc2NfbHNpemU7CiAJYy0+c2NhY2hlLndheXMgPSA0OwotCWMtPnNjYWNoZS53YXliaXQ9IGZmcyhzY2FjaGVfc2l6ZSAvIGMtPnNjYWNoZS53YXlzKSAtIDE7CisJYy0+c2NhY2hlLndheWJpdD0gX19mZnMoc2NhY2hlX3NpemUgLyBjLT5zY2FjaGUud2F5cyk7CiAJYy0+c2NhY2hlLndheXNpemUgPSBzY2FjaGVfc2l6ZSAvIGMtPnNjYWNoZS53YXlzOwogCWMtPnNjYWNoZS5zZXRzID0gc2NhY2hlX3NpemUgLyAoYy0+c2NhY2hlLmxpbmVzeiAqIGMtPnNjYWNoZS53YXlzKTsKIAlwcmludGsoS0VSTl9JTkZPICJTZWNvbmRhcnkgY2FjaGUgc2l6ZSAlZEssIGxpbmVzaXplICVkIGJ5dGVzLlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCmluZGV4IGE4NjVmMjM5Li45ZGNhMDk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTMyLDEzICszMiwzNSBAQAogCQkJCSAgICAgIm5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7XG5cdCIgXAogCQkJCSAgICAgIi5zZXQgcmVvcmRlclxuXHQiKQogCisvKiBBdG9taWNpdHkgYW5kIGludGVycnVwdGFiaWxpdHkgKi8KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisKKyNpbmNsdWRlIDxhc20vc210Yy5oPgorI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisKKyNkZWZpbmUgRU5URVJfQ1JJVElDQUwoZmxhZ3MpIFwKKwl7IFwKKwl1bnNpZ25lZCBpbnQgbXZwZmxhZ3M7IFwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7XAorCW12cGZsYWdzID0gZHZwZSgpCisjZGVmaW5lIEVYSVRfQ1JJVElDQUwoZmxhZ3MpIFwKKwlldnBlKG12cGZsYWdzKTsgXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgXAorCX0KKyNlbHNlCisKKyNkZWZpbmUgRU5URVJfQ1JJVElDQUwoZmxhZ3MpIGxvY2FsX2lycV9zYXZlKGZsYWdzKQorI2RlZmluZSBFWElUX0NSSVRJQ0FMKGZsYWdzKSBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKKworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG9sZF9jdHg7CiAJaW50IGVudHJ5OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkvKiBTYXZlIG9sZCBjb250ZXh0IGFuZCBjcmVhdGUgaW1wb3NzaWJsZSBWUE4yIHZhbHVlICovCiAJb2xkX2N0eCA9IHJlYWRfYzBfZW50cnloaSgpOwogCXdyaXRlX2MwX2VudHJ5bG8wKDApOwpAQCAtNTcsNyArNzksNyBAQAogCX0KIAl0bGJ3X3VzZV9oYXphcmQoKTsKIAl3cml0ZV9jMF9lbnRyeWhpKG9sZF9jdHgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogLyogQWxsIGVudHJpZXMgY29tbW9uIHRvIGEgbW0gc2hhcmUgYW4gYXNpZC4gIFRvIGVmZmVjdGl2ZWx5IGZsdXNoCkBAIC04Nyw2ICsxMDksNyBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgc2l6ZTsKIAorCQlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJCXNpemUgPSAoZW5kIC0gc3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CiAJCXNpemUgPSAoc2l6ZSArIDEpID4+IDE7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTEyMCw3ICsxNDMsNyBAQAogCQl9IGVsc2UgewogCQkJZHJvcF9tbXVfY29udGV4dChtbSwgY3B1KTsKIAkJfQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogCX0KIH0KIApAQCAtMTI5LDkgKzE1Miw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2l6ZTsKIAorCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAlzaXplID0gKGVuZCAtIHN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUOwogCXNpemUgPSAoc2l6ZSArIDEpID4+IDE7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChzaXplIDw9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSAvIDIpIHsKIAkJaW50IHBpZCA9IHJlYWRfYzBfZW50cnloaSgpOwogCkBAIC0xNjIsNyArMTg1LDcgQEAKIAl9IGVsc2UgewogCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAJfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogdm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKQpAQCAtMTc1LDcgKzE5OCw3IEBACiAKIAkJbmV3cGlkID0gY3B1X2FzaWQoY3B1LCB2bWEtPnZtX21tKTsKIAkJcGFnZSAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKIAkJb2xkcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJCXdyaXRlX2MwX2VudHJ5aGkocGFnZSB8IG5ld3BpZCk7CiAJCW10YzBfdGxid19oYXphcmQoKTsKQEAgLTE5NCw3ICsyMTcsNyBAQAogCiAJZmluaXNoOgogCQl3cml0ZV9jMF9lbnRyeWhpKG9sZHBpZCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJRVhJVF9DUklUSUNBTChmbGFncyk7CiAJfQogfQogCkBAIC0yMDcsNyArMjMwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBvbGRwaWQsIGlkeDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJb2xkcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJcGFnZSAmPSAoUEFHRV9NQVNLIDw8IDEpOwogCXdyaXRlX2MwX2VudHJ5aGkocGFnZSk7CkBAIC0yMjYsNyArMjQ5LDcgQEAKIAl9CiAJd3JpdGVfYzBfZW50cnloaShvbGRwaWQpOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCiAvKgpAQCAtMjQ5LDcgKzI3Miw3IEBACiAJaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSAhPSB2bWEtPnZtX21tKQogCQlyZXR1cm47CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCiAJcGlkID0gcmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0s7CiAJYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwpAQCAtMjc3LDcgKzMwMCw3IEBACiAJZWxzZQogCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwogCXRsYndfdXNlX2hhemFyZCgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogI2lmIDAKQEAgLTI5MSw3ICszMTQsNyBAQAogCXB0ZV90ICpwdGVwOwogCWludCBpZHg7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCWFkZHJlc3MgJj0gKFBBR0VfTUFTSyA8PCAxKTsKIAlhc2lkID0gcmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0s7CiAJd3JpdGVfYzBfZW50cnloaShhZGRyZXNzIHwgYXNpZCk7CkBAIC0zMTAsNyArMzMzLDcgQEAKIAllbHNlCiAJCXRsYl93cml0ZV9pbmRleGVkKCk7CiAJdGxid191c2VfaGF6YXJkKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogI2VuZGlmCiAKQEAgLTMyMiw3ICszNDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2xkX3BhZ2VtYXNrOwogCXVuc2lnbmVkIGxvbmcgb2xkX2N0eDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJLyogU2F2ZSBvbGQgY29udGV4dCBhbmQgY3JlYXRlIGltcG9zc2libGUgVlBOMiB2YWx1ZSAqLwogCW9sZF9jdHggPSByZWFkX2MwX2VudHJ5aGkoKTsKIAlvbGRfcGFnZW1hc2sgPSByZWFkX2MwX3BhZ2VtYXNrKCk7CkBAIC0zNDIsNyArMzY1LDcgQEAKIAlCQVJSSUVSOwogCXdyaXRlX2MwX3BhZ2VtYXNrKG9sZF9wYWdlbWFzayk7CiAJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAogLyoKQEAgLTM2Miw3ICszODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2xkX3BhZ2VtYXNrOwogCXVuc2lnbmVkIGxvbmcgb2xkX2N0eDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlFTlRFUl9DUklUSUNBTChmbGFncyk7CiAJLyogU2F2ZSBvbGQgY29udGV4dCBhbmQgY3JlYXRlIGltcG9zc2libGUgVlBOMiB2YWx1ZSAqLwogCW9sZF9jdHggPSByZWFkX2MwX2VudHJ5aGkoKTsKIAlvbGRfcGFnZW1hc2sgPSByZWFkX2MwX3BhZ2VtYXNrKCk7CkBAIC0zODYsMTAgKzQwOSwxMSBAQAogCXdyaXRlX2MwX2VudHJ5aGkob2xkX2N0eCk7CiAJd3JpdGVfYzBfcGFnZW1hc2sob2xkX3BhZ2VtYXNrKTsKIG91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJRVhJVF9DUklUSUNBTChmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAorZXh0ZXJuIHZvaWQgX19pbml0IHNhbml0aXplX3RsYl9lbnRyaWVzKHZvaWQpOwogc3RhdGljIHZvaWQgX19pbml0IHByb2JlX3RsYih1bnNpZ25lZCBsb25nIGNvbmZpZykKIHsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CkBAIC00MDIsNiArNDI2LDE0IEBACiAJICovCiAJaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmMDAwMCkgPT0gUFJJRF9DT01QX0xFR0FDWSkKIAkJcmV0dXJuOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIElmIFRMQiBpcyBzaGFyZWQgaW4gU01UQyBzeXN0ZW0sIHRvdGFsIHNpemUgYWxyZWFkeQorCSAqIGhhcyBiZWVuIGNhbGN1bGF0ZWQgYW5kIHdyaXR0ZW4gaW50byBjcHVfZGF0YSB0bGJzaXplCisJICovCisJaWYoKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA9PSBTTVRDX1RMQl9TSEFSRUQpCisJCXJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlyZWcgPSByZWFkX2MwX2NvbmZpZzEoKTsKIAlpZiAoISgoY29uZmlnID4+IDcpICYgMykpCkBAIC00MTAsNiArNDQyLDE1IEBACiAJYy0+dGxic2l6ZSA9ICgocmVnID4+IDI1KSAmIDB4M2YpICsgMTsKIH0KIAorc3RhdGljIGludCBfX2luaXRkYXRhIG50bGIgPSAwOworc3RhdGljIGludCBfX2luaXQgc2V0X250bGIoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJm50bGIpOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJudGxiPSIsIHNldF9udGxiKTsKKwogdm9pZCBfX2luaXQgdGxiX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKQEAgLTQzMiw1ICs0NzMsMTUgQEAKIAogCS8qIERpZCBJIHRlbGwgeW91IHRoYXQgQVJDIFNVQ0tTPyAgKi8KIAorCWlmIChudGxiKSB7CisJCWlmIChudGxiID4gMSAmJiBudGxiIDw9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSkgeworCQkJaW50IHdpcmVkID0gY3VycmVudF9jcHVfZGF0YS50bGJzaXplIC0gbnRsYjsKKwkJCXdyaXRlX2MwX3dpcmVkKHdpcmVkKTsKKwkJCXdyaXRlX2MwX2luZGV4KHdpcmVkLTEpOworCQkJcHJpbnRrICgiUmVzdHJpY3RpbmcgVExCIHRvICVkIGVudHJpZXNcbiIsIG50bGIpOworCQl9IGVsc2UKKwkJCXByaW50aygiSWdub3JpbmcgaW52YWxpZCBhcmd1bWVudCBudGxiPSVkXG4iLCBudGxiKTsKKwl9CisKIAlidWlsZF90bGJfcmVmaWxsX2hhbmRsZXIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggNTk5YjNjMi4uNTQ1MDdiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTcsNiArNywxNiBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IGJ5IFRoaWVtbyBTZXVmZXIKICAqIENvcHlyaWdodCAoQykgMjAwNSAgTWFjaWVqIFcuIFJvenlja2kKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKKyAqIC4uLiBhbmQgdGhlIGRheXMgZ290IHdvcnNlIGFuZCB3b3JzZSBhbmQgbm93IHlvdSBzZWUKKyAqIEkndmUgZ29uZSBjb21wbGV0bHkgb3V0IG9mIG15IG1pbmQuCisgKgorICogVGhleSdyZSBjb21pbmcgdG8gdGFrZSBtZSBhIGF3YXkgaGFoYQorICogdGhleSdyZSBjb21pbmcgdG8gdGFrZSBtZSBhIGF3YXkgaG9obyBoaWhpIGhhaGEKKyAqIHRvIHRoZSBmdW5ueSBmYXJtIHdoZXJlIGNvZGUgaXMgYmVhdXRpZnVsIGFsbCB0aGUgdGltZSAuLi4KKyAqCisgKiAoQ29uZG9sZW5jZXMgdG8gTmFwb2xlb24gWElWKQogICovCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTY4LDYgKzc4LDcgQEAKIAlCSU1NID0gMHgwNDAsCiAJSklNTSA9IDB4MDgwLAogCUZVTkMgPSAweDEwMCwKKwlTRVQgPSAweDIwMAogfTsKIAogI2RlZmluZSBPUF9NQVNLCQkweDJmCkBAIC04Niw2ICs5Nyw4IEBACiAjZGVmaW5lIEpJTU1fU0gJCTAKICNkZWZpbmUgRlVOQ19NQVNLCTB4MmYKICNkZWZpbmUgRlVOQ19TSAkJMAorI2RlZmluZSBTRVRfTUFTSwkweDcKKyNkZWZpbmUgU0VUX1NICQkwCiAKIGVudW0gb3Bjb2RlIHsKIAlpbnNuX2ludmFsaWQsCkBAIC0xMjksOCArMTQyLDggQEAKIAl7IGluc25fYm5lLCBNKGJuZV9vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgQklNTSB9LAogCXsgaW5zbl9kYWRkaXUsIE0oZGFkZGl1X29wLDAsMCwwLDAsMCksIFJTIHwgUlQgfCBTSU1NIH0sCiAJeyBpbnNuX2RhZGR1LCBNKHNwZWNfb3AsMCwwLDAsMCxkYWRkdV9vcCksIFJTIHwgUlQgfCBSRCB9LAotCXsgaW5zbl9kbWZjMCwgTShjb3AwX29wLGRtZmNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfSwKLQl7IGluc25fZG10YzAsIE0oY29wMF9vcCxkbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIH0sCisJeyBpbnNuX2RtZmMwLCBNKGNvcDBfb3AsZG1mY19vcCwwLDAsMCwwKSwgUlQgfCBSRCB8IFNFVH0sCisJeyBpbnNuX2RtdGMwLCBNKGNvcDBfb3AsZG10Y19vcCwwLDAsMCwwKSwgUlQgfCBSRCB8IFNFVH0sCiAJeyBpbnNuX2RzbGwsIE0oc3BlY19vcCwwLDAsMCwwLGRzbGxfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHNsbDMyLCBNKHNwZWNfb3AsMCwwLDAsMCxkc2xsMzJfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHNyYSwgTShzcGVjX29wLDAsMCwwLDAsZHNyYV9vcCksIFJUIHwgUkQgfCBSRSB9LApAQCAtMTQ1LDggKzE1OCw4IEBACiAJeyBpbnNuX2xsZCwgTShsbGRfb3AsMCwwLDAsMCwwKSwgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fbHVpLCBNKGx1aV9vcCwwLDAsMCwwLDApLCBSVCB8IFNJTU0gfSwKIAl7IGluc25fbHcsIE0obHdfb3AsMCwwLDAsMCwwKSwgUlMgfCBSVCB8IFNJTU0gfSwKLQl7IGluc25fbWZjMCwgTShjb3AwX29wLG1mY19vcCwwLDAsMCwwKSwgUlQgfCBSRCB9LAotCXsgaW5zbl9tdGMwLCBNKGNvcDBfb3AsbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIH0sCisJeyBpbnNuX21mYzAsIE0oY29wMF9vcCxtZmNfb3AsMCwwLDAsMCksIFJUIHwgUkQgfCBTRVR9LAorCXsgaW5zbl9tdGMwLCBNKGNvcDBfb3AsbXRjX29wLDAsMCwwLDApLCBSVCB8IFJEIHwgU0VUfSwKIAl7IGluc25fb3JpLCBNKG9yaV9vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgVUlNTSB9LAogCXsgaW5zbl9yZmUsIE0oY29wMF9vcCxjb3Bfb3AsMCwwLDAscmZlX29wKSwgMCB9LAogCXsgaW5zbl9zYywgTShzY19vcCwwLDAsMCwwLDApLCBSUyB8IFJUIHwgU0lNTSB9LApAQCAtMjQyLDYgKzI1NSwxNCBAQAogCXJldHVybiBhcmcgJiBGVU5DX01BU0s7CiB9CiAKK3N0YXRpYyBfX2luaXQgdTMyIGJ1aWxkX3NldCh1MzIgYXJnKQoreworCWlmIChhcmcgJiB+U0VUX01BU0spCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRMQiBzeW50aGVzaXplciBmaWVsZCBvdmVyZmxvd1xuIik7CisKKwlyZXR1cm4gYXJnICYgU0VUX01BU0s7Cit9CisKIC8qCiAgKiBUaGUgb3JkZXIgb2Ygb3Bjb2RlIGFyZ3VtZW50cyBpcyBpbXBsaWNpdGx5IGxlZnQgdG8gcmlnaHQsCiAgKiBzdGFydGluZyB3aXRoIFJTIGFuZCBlbmRpbmcgd2l0aCBGVU5DIG9yIElNTS4KQEAgLTI3Myw2ICsyOTQsNyBAQAogCWlmIChpcC0+ZmllbGRzICYgQklNTSkgb3AgfD0gYnVpbGRfYmltbSh2YV9hcmcoYXAsIHMzMikpOwogCWlmIChpcC0+ZmllbGRzICYgSklNTSkgb3AgfD0gYnVpbGRfamltbSh2YV9hcmcoYXAsIHUzMikpOwogCWlmIChpcC0+ZmllbGRzICYgRlVOQykgb3AgfD0gYnVpbGRfZnVuYyh2YV9hcmcoYXAsIHUzMikpOworCWlmIChpcC0+ZmllbGRzICYgU0VUKSBvcCB8PSBidWlsZF9zZXQodmFfYXJnKGFwLCB1MzIpKTsKIAl2YV9lbmQoYXApOwogCiAJKipidWYgPSBvcDsKQEAgLTM1OCw4ICszODAsOCBAQAogSV91MXMyKF9ibHR6KTsKIElfdTFzMihfYmx0emwpOwogSV91MXUyczMoX2JuZSk7Ci1JX3UxdTIoX2RtZmMwKTsKLUlfdTF1MihfZG10YzApOworSV91MXUydTMoX2RtZmMwKTsKK0lfdTF1MnUzKF9kbXRjMCk7CiBJX3UydTFzMyhfZGFkZGl1KTsKIElfdTN1MXUyKF9kYWRkdSk7CiBJX3UydTF1MyhfZHNsbCk7CkBAIC0zNzYsOCArMzk4LDggQEAKIElfdTJzM3UxKF9sbGQpOwogSV91MXMyKF9sdWkpOwogSV91MnMzdTEoX2x3KTsKLUlfdTF1MihfbWZjMCk7Ci1JX3UxdTIoX210YzApOworSV91MXUydTMoX21mYzApOworSV91MXUydTMoX210YzApOwogSV91MnUxdTMoX29yaSk7CiBJXzAoX3JmZSk7CiBJX3UyczN1MShfc2MpOwpAQCAtNDUxLDggKzQ3Myw4IEBACiAjIGRlZmluZSBpX1NMTChidWYsIHJzLCBydCwgc2gpIGlfZHNsbChidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBpX1NSQShidWYsIHJzLCBydCwgc2gpIGlfZHNyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBpX1NSTChidWYsIHJzLCBydCwgc2gpIGlfZHNybChidWYsIHJzLCBydCwgc2gpCi0jIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQpIGlfZG1mYzAoYnVmLCBydCwgcmQpCi0jIGRlZmluZSBpX01UQzAoYnVmLCBydCwgcmQpIGlfZG10YzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQuLi4pIGlfZG1mYzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01UQzAoYnVmLCBydCwgcmQuLi4pIGlfZG10YzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBpX0FERElVKGJ1ZiwgcnMsIHJ0LCB2YWwpIGlfZGFkZGl1KGJ1ZiwgcnMsIHJ0LCB2YWwpCiAjIGRlZmluZSBpX0FERFUoYnVmLCBycywgcnQsIHJkKSBpX2RhZGR1KGJ1ZiwgcnMsIHJ0LCByZCkKICMgZGVmaW5lIGlfU1VCVShidWYsIHJzLCBydCwgcmQpIGlfZHN1YnUoYnVmLCBycywgcnQsIHJkKQpAQCAtNDY0LDggKzQ4Niw4IEBACiAjIGRlZmluZSBpX1NMTChidWYsIHJzLCBydCwgc2gpIGlfc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIGlfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgaV9zcmEoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgaV9TUkwoYnVmLCBycywgcnQsIHNoKSBpX3NybChidWYsIHJzLCBydCwgc2gpCi0jIGRlZmluZSBpX01GQzAoYnVmLCBydCwgcmQpIGlfbWZjMChidWYsIHJ0LCByZCkKLSMgZGVmaW5lIGlfTVRDMChidWYsIHJ0LCByZCkgaV9tdGMwKGJ1ZiwgcnQsIHJkKQorIyBkZWZpbmUgaV9NRkMwKGJ1ZiwgcnQsIHJkLi4uKSBpX21mYzAoYnVmLCBydCwgcmQpCisjIGRlZmluZSBpX01UQzAoYnVmLCBydCwgcmQuLi4pIGlfbXRjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIGlfQURESVUoYnVmLCBycywgcnQsIHZhbCkgaV9hZGRpdShidWYsIHJzLCBydCwgdmFsKQogIyBkZWZpbmUgaV9BRERVKGJ1ZiwgcnMsIHJ0LCByZCkgaV9hZGR1KGJ1ZiwgcnMsIHJ0LCByZCkKICMgZGVmaW5lIGlfU1VCVShidWYsIHJzLCBydCwgcmQpIGlfc3VidShidWYsIHJzLCBydCwgcmQpCkBAIC02NzAsMTQgKzY5MiwxNSBAQAogI2RlZmluZSBLMQkJMjcKIAogLyogU29tZSBDUDAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEMwX0lOREVYCTAKLSNkZWZpbmUgQzBfRU5UUllMTzAJMgotI2RlZmluZSBDMF9FTlRSWUxPMQkzCi0jZGVmaW5lIEMwX0NPTlRFWFQJNAotI2RlZmluZSBDMF9CQURWQUREUgk4Ci0jZGVmaW5lIEMwX0VOVFJZSEkJMTAKLSNkZWZpbmUgQzBfRVBDCQkxNAotI2RlZmluZSBDMF9YQ09OVEVYVAkyMAorI2RlZmluZSBDMF9JTkRFWAkwLCAwCisjZGVmaW5lIEMwX0VOVFJZTE8wCTIsIDAKKyNkZWZpbmUgQzBfVENCSU5ECTIsIDIKKyNkZWZpbmUgQzBfRU5UUllMTzEJMywgMAorI2RlZmluZSBDMF9DT05URVhUCTQsIDAKKyNkZWZpbmUgQzBfQkFEVkFERFIJOCwgMAorI2RlZmluZSBDMF9FTlRSWUhJCTEwLCAwCisjZGVmaW5lIEMwX0VQQwkJMTQsIDAKKyNkZWZpbmUgQzBfWENPTlRFWFQJMjAsIDAKIAogI2lmZGVmIENPTkZJR182NEJJVAogIyBkZWZpbmUgR0VUX0NPTlRFWFQoYnVmLCByZWcpIGlfTUZDMChidWYsIHJlZywgQzBfWENPTlRFWFQpCkBAIC03NDIsNyArNzY1LDcgQEAKIAl9CiAjZW5kaWYKIAotCW1lbWNweSgodm9pZCAqKUNBQ19CQVNFLCB0bGJfaGFuZGxlciwgMHg4MCk7CisJbWVtY3B5KCh2b2lkICopZWJhc2UsIHRsYl9oYW5kbGVyLCAweDgwKTsKIH0KIAogLyoKQEAgLTg1Miw2ICs4NzUsNyBAQAogCiAJY2FzZSBDUFVfUjEwMDAwOgogCWNhc2UgQ1BVX1IxMjAwMDoKKwljYXNlIENQVV9SMTQwMDA6CiAJY2FzZSBDUFVfNEtDOgogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgpAQCAtODgzLDYgKzkwNyw3IEBACiAJY2FzZSBDUFVfNEtFQzoKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMzRLOgorCWNhc2UgQ1BVXzc0SzoKIAkJaV9laGIocCk7CiAJCXRsYncocCk7CiAJCWJyZWFrOwpAQCAtOTUxLDEyICs5NzYsMjAgQEAKIAkvKiBObyBpX25vcCBuZWVkZWQgaGVyZSwgc2luY2UgdGhlIG5leHQgaW5zbiBkb2Vzbid0IHRvdWNoIFRNUC4gKi8KIAogI2lmZGVmIENPTkZJR19TTVAKKyMgaWZkZWYgIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKgorCSAqIFNNVEMgdXNlcyBUQ0JpbmQgdmFsdWUgYXMgIkNQVSIgaW5kZXgKKwkgKi8KKwlpX21mYzAocCwgcHRyLCBDMF9UQ0JJTkQpOworCWlfZHNybChwLCBwdHIsIHB0ciwgMTkpOworIyBlbHNlCiAJLyoKIAkgKiA2NCBiaXQgU01QIHJ1bm5pbmcgaW4gWEtQSFlTIGhhcyBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMwogCSAqIHN0b3JlZCBpbiBDT05URVhULgogCSAqLwogCWlfZG1mYzAocCwgcHRyLCBDMF9DT05URVhUKTsKIAlpX2RzcmwocCwgcHRyLCBwdHIsIDIzKTsKKyNlbmRpZgogCWlfTEFfbW9zdGx5KHAsIHRtcCwgcGdkYyk7CiAJaV9kYWRkdShwLCBwdHIsIHB0ciwgdG1wKTsKIAlpX2RtZmMwKHAsIHRtcCwgQzBfQkFEVkFERFIpOwpAQCAtMTAxNCw5ICsxMDQ3LDIxIEBACiAKIAkvKiAzMiBiaXQgU01QIGhhcyBzbXBfcHJvY2Vzc29yX2lkKCkgc3RvcmVkIGluIENPTlRFWFQuICovCiAjaWZkZWYgQ09ORklHX1NNUAorI2lmZGVmICBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBTTVRDIHVzZXMgVENCaW5kIHZhbHVlIGFzICJDUFUiIGluZGV4CisJICovCisJaV9tZmMwKHAsIHB0ciwgQzBfVENCSU5EKTsKKwlpX0xBX21vc3RseShwLCB0bXAsIHBnZGMpOworCWlfc3JsKHAsIHB0ciwgcHRyLCAxOSk7CisjZWxzZQorCS8qCisJICogc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDMgaXMgc3RvcmVkIGluIENPTlRFWFQuCisgICAgICAgICAqLwogCWlfbWZjMChwLCBwdHIsIEMwX0NPTlRFWFQpOwogCWlfTEFfbW9zdGx5KHAsIHRtcCwgcGdkYyk7CiAJaV9zcmwocCwgcHRyLCBwdHIsIDIzKTsKKyNlbmRpZgogCWlfYWRkdShwLCBwdHIsIHRtcCwgcHRyKTsKICNlbHNlCiAJaV9MQV9tb3N0bHkocCwgcHRyLCBwZ2RjKTsKQEAgLTEyNDcsNyArMTI5Miw3IEBACiAJfQogI2VuZGlmCiAKLQltZW1jcHkoKHZvaWQgKilDQUNfQkFTRSwgZmluYWxfaGFuZGxlciwgMHgxMDApOworCW1lbWNweSgodm9pZCAqKWViYXNlLCBmaW5hbF9oYW5kbGVyLCAweDEwMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L01ha2VmaWxlCmluZGV4IDIwYmJkM2VhLi42NzM3MmYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKICMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgogIwogCi1vYmoteSArPSBpbnQtaGFuZGxlci5vIGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KK29iai15ICs9IGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUpICs9IGphLWNvbnNvbGUubwogb2JqLSQoQ09ORklHX1JFTU9URV9ERUJVRykgKz0gZGJnX2lvLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvZGJnX2lvLmMKaW5kZXggNTQyZWFjOC4uZDdkZWEwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvZGJnX2lvLmMKQEAgLTczLDcgKzczLDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKIAotCS8qIHNldCB1cCBidWFkIHJhdGUgKi8KKwkvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAJewogCQl1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YmM3ODkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIgSW5jLgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+Ci0gKgotICogQmFzZWQgb24gd29yazoKLSAqICAgQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiAgIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBKYWd1YXItQVRYIGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogRmlyc3QgbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIE9jZWxvdC1DUyBib2FyZAotICovCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRChqYWd1YXJfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLCB0MgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiBzdzAgc29mdHdhcmUgaW50ZXJydXB0ICovCi0JCWJuZXoJdDEsIGxsX3N3MF9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHN3MSBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KLQkJYm5legl0MSwgbGxfc3cxX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogaW50MCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BjaXhhX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BjaXhiX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDQJLyogaW50MiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BjaWFfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNQkvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcGNpYl9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF91YXJ0X2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyICovCi0JCWJuZXoJdDEsIGxsX2NwdXRpbWVyX2lycQotCi0JCW5vcAotCQlub3AKLQotCQkvKiBub3cgbG9vayBhdCBleHRlbmRlZCBpbnRlcnJ1cHRzICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQljZmMwCXQxLCBDUDBfUzFfSU5UQ09OVFJPTAotCi0JCS8qIHNoaWZ0IHRoZSBtYXNrIDggYml0cyBsZWZ0IHRvIGxpbmUgdXAgdGhlIGJpdHMgKi8KLQkJc2xsCXQyLCB0MSwgOAotCi0JCWFuZAl0MCwgdDIKLQkJc3JsCXQwLCB0MCwgMTYKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDgJLyogaW50NiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX212NjQzNDBfZGVjb2RlX2lycQotCi0JCW5vcAotCQlub3AKLQotCQkuc2V0CXJlb3JkZXIKLQotCQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQoamFndWFyX2hhbmRsZV9pbnQpCi0KLQkJLmFsaWduCTUKLWxsX3N3MF9pcnE6Ci0JCWxpCWEwLCAwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3N3MV9pcnE6Ci0JCWxpCWEwLCAxCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3BjaXhhX2lycToKLQkJbGkJYTAsIDIKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9wY2l4Yl9pcnE6Ci0JCWxpCWEwLCAzCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpYV9pcnE6Ci0JCWxpCWEwLCA0Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcGNpYl9pcnE6Ci0JCWxpCWEwLCA1Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfdWFydF9pcnE6Ci0JCWxpCWEwLCA2Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1dGltZXJfaXJxOgotCQlsaQlhMCwgNwotCQltb3ZlCWExLCBzcAotCQlqYWwJbGxfdGltZXJfaW50ZXJydXB0Ci0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX212NjQzNDBfZGVjb2RlX2lycToKLQkJbW92ZQlhMCwgc3AKLQkJamFsCWxsX212NjQzNDBfaXJxCi0JCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2lycS5jCmluZGV4IDE1NTg4ZjkuLmVjNDAzMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2lycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2lycS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICogICBBdXRob3I6IEp1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKICAqCi0gKiAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAwLCAwMSwgMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTM4LDggKzM4LDM3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgamFndWFyX2hhbmRsZV9pbnQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKDEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJZG9fSVJRKDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJZG9fSVJRKDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJbGxfdGltZXJfaW50ZXJydXB0KDcsIHJlZ3MpOworCWVsc2UgeworCQkvKgorCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cworCQkgKi8KKwkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OworCQlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA4KQorCQkJbGxfbXY2NDM0MF9pcnEocmVncyk7CisJfQorfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX212NjQzNDAgPSB7CiAJbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJNVjY0MzQwLUNhc2NhZGUiLCBOVUxMLCBOVUxMCkBAIC01Myw4ICs4Miw2IEBACiAJICovCiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSk7CiAKLQkvKiBTZXRzIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBqYWd1YXJfaGFuZGxlX2ludCk7CiAJbWlwc19jcHVfaXJxX2luaXQoMCk7CiAJcm03a19jcHVfaXJxX2luaXQoOCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCmluZGV4IDkxZDk2MzcuLjEzNzljNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwpAQCAtMzgxLDI0ICszODEsMjQgQEAKIAkgKiBzaHV0IGRvd24gZXRoZXJuZXQgcG9ydHMsIGp1c3QgdG8gYmUgc3VyZSBvdXIgbWVtb3J5IGRvZXNuJ3QgZ2V0CiAJICogY29ycnVwdGVkIGJ5IHJhbmRvbSBldGhlcm5ldCB0cmFmZmljLgogCSAqLwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDIpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDIpLCAweGZmIDw8IDgpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDIpKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDIpKSAmIDB4ZmYpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAotCSAgICAgICAgIE1WX1JFQUQoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCkpICYgfjEpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpLAotCSAgICAgICAgIE1WX1JFQUQoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSkpICYgfjEpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDIpLAotCSAgICAgICAgIE1WX1JFQUQoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMikpICYgfjEpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDIpLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDIpLCAweGZmIDw8IDgpOworCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CisJd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKKwl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDIpKSAmIDB4ZmYpOworCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOworCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOworCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDIpKSAmIDB4ZmYpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAorCSAgICAgICAgIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCkpICYgfjEpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpLAorCSAgICAgICAgIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSkpICYgfjEpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDIpLAorCSAgICAgICAgIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMikpICYgfjEpOwogCiAJLyogVHVybiBvZmYgdGhlIEJpdC1FcnJvciBMRUQgKi8KIAlKQUdVQVJfRlBHQV9XUklURSgweDgwLCBDTFIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlCmluZGV4IGFhYjhmZDguLjhiY2VhNjRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyByZW1vdmVzIGFueSBvbGQgZGVwZW5kZW5jaWVzLiBET04nVCBwdXQgeW91ciBvd24gZGVwZW5kZW5jaWVzIGhlcmUKICMgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIHNwZWNpYWwgKGllIG5vdCBhIC5jIGZpbGUpLgogIwotb2JqLXkJICs9IGludC1oYW5kbGVyLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJICs9IGlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjJmMDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyIE1vbWVudHVtIENvbXB1dGVyIEluYy4KLSAqIEF1dGhvcjogTWF0dGhldyBEaGFybSA8bWRoYXJtQG1vbWVuY28uY29tPgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogQ29weXJpZ2h0IDIwMDQgUE1DLVNpZXJyYQotICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmkgKGxhY2h3YW5pQHBtYy1zaWVycmEuY29tKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pLCBtbGFjaHdhbmlAbXZpc3RhLmNvbQotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtMyBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIEZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtMyBib2FyZAotICovCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRChvY2Vsb3QzX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLCB0MgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiBzdzAgc29mdHdhcmUgaW50ZXJydXB0IChJUlEwKSAqLwotCQlibmV6CXQxLCBsbF9zdzBfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHN3MSBzb2Z0d2FyZSBpbnRlcnJ1cHQgKElSUTEpICovCi0JCWJuZXoJdDEsIGxsX3N3MV9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogaW50MCBoYXJkd2FyZSBsaW5lIChJUlEyKSAqLwotCQlibmV6CXQxLCBsbF9wY2kwc2xvdDFfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAzCS8qIGludDEgaGFyZHdhcmUgbGluZSAoSVJRMykgKi8KLQkJYm5legl0MSwgbGxfcGNpMHNsb3QyX2lycQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKElSUTQpICovCi0JCWJuZXoJdDEsIGxsX3BjaTFzbG90MV9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDUJLyogaW50MyBoYXJkd2FyZSBsaW5lIChJUlE1KSAqLwotCQlibmV6CXQxLCBsbF9wY2kxc2xvdDJfaXJxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAoSVJRNikgKi8KLQkJYm5legl0MSwgbGxfdWFydF9pcnEKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDcJLyogY3B1IHRpbWVyIChJUlE3KSAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotICAgICAgICAgICAgICAgIC8qIG5vdyBsb29rIGF0IGV4dGVuZGVkIGludGVycnVwdHMgKi8KLSAgICAgICAgICAgICAgICBtZmMwICAgIHQwLCBDUDBfQ0FVU0UKLSAgICAgICAgICAgICAgICBjZmMwICAgIHQxLCBDUDBfUzFfSU5UQ09OVFJPTAotCi0gICAgICAgICAgICAgICAgLyogc2hpZnQgdGhlIG1hc2sgOCBiaXRzIGxlZnQgdG8gbGluZSB1cCB0aGUgYml0cyAqLwotICAgICAgICAgICAgICAgIHNsbCAgICAgdDIsIHQxLCA4Ci0KLSAgICAgICAgICAgICAgICBhbmQgICAgIHQwLCB0MgotICAgICAgICAgICAgICAgIHNybCAgICAgdDAsIHQwLCAxNgotCi0gICAgICAgICAgICAgICAgYW5kaSAgICB0MSwgdDAsIFNUQVRVU0ZfSVA4ICAgICAvKiBpbnQ2IGhhcmR3YXJlIGxpbmUgKElSUTkpICovCi0gICAgICAgICAgICAgICAgYm5leiAgICB0MSwgbGxfbXY2NDM0MF9kZWNvZGVfaXJxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKG9jZWxvdDNfaGFuZGxlX2ludCkKLQotCQkuYWxpZ24JNQotbGxfc3cwX2lycToKLQkJbGkJYTAsIDAJCS8qIElSUSAxICovCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3N3MV9pcnE6Ci0JCWxpCWEwLCAxCQkvKiBJUlEgMiAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTBzbG90MV9pcnE6Ci0JCWxpCWEwLCAyCQkvKiBJUlEgMyAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTBzbG90Ml9pcnE6Ci0JCWxpCWEwLCAzCQkvKiBJUlEgNCAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTFzbG90MV9pcnE6Ci0JCWxpCWEwLCA0CQkvKiBJUlEgNSAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BjaTFzbG90Ml9pcnE6Ci0JCWxpCWEwLCA1CQkvKiBJUlEgNiAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfaXJxOgotCQlsaQlhMCwgNgkJLyogSVJRIDcgKi8KLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JCWxpCWEwLCA3CQkvKiBJUlEgOCAqLwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX212NjQzNDBfZGVjb2RlX2lycToKLQkJbW92ZQlhMCwgc3AKLQkJamFsCWxsX212NjQzNDBfaXJxCi0JCWoJcmV0X2Zyb21faXJxCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYwppbmRleCA0MjQ2NGRiLi44N2M2M2MzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2lycS5jCkBAIC01Myw4ICs1Myw2IEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jZWxvdDNfaGFuZGxlX2ludCh2b2lkKTsKLQogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2FzY2FkZV9tdjY0MzQwID0gewogCW5vX2FjdGlvbiwgU0FfSU5URVJSVVBULCBDUFVfTUFTS19OT05FLCAiTVY2NDM0MC1DYXNjYWRlIiwgTlVMTCwgTlVMTAogfTsKQEAgLTY3LDkgKzY1LDYgQEAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNIHwgU1QwX0JFVik7CiAKLQkvKiBTZXRzIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBvY2Vsb3QzX2hhbmRsZV9pbnQpOwotCW1pcHNfY3B1X2lycV9pbml0KDApOwogCXJtN2tfY3B1X2lycV9pbml0KDgpOwogCiAJLyogc2V0IHVwIHRoZSBjYXNjYWRpbmcgaW50ZXJydXB0cyAqLwpAQCAtNzksMyArNzQsMzYgQEAKIAlzZXRfYzBfc3RhdHVzKFNUMF9JTSk7IC8qIElFIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KIAogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKDEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKKwkJZG9fSVJRKDIsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKKwkJZG9fSVJRKDMsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJZG9fSVJRKDUsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKDYsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgeworCQkvKgorCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cworCQkgKi8KKwkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OworCisJCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCisJCQlsbF9tdjY0MzQwX2lycShyZWdzKTsKKwkJZWxzZQorCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMKaW5kZXggMzcwZTc1ZC4uYzY5MTk1MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMKQEAgLTMyOSwyMiArMzI5LDIyIEBACiAJLyogc2h1dCBkb3duIGV0aGVybmV0IHBvcnRzLCBqdXN0IHRvIGJlIHN1cmUgb3VyIG1lbW9yeSBkb2Vzbid0IGdldAogCSAqIGNvcnJ1cHRlZCBieSByYW5kb20gZXRoZXJuZXQgdHJhZmZpYy4KIAkgKi8KLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwogCWRvIHt9Ci0JICB3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKIAlkbyB7fQotCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKKwkgIHdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7CiAJZG8ge30KLQkgIHdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CiAJZG8ge30KLQkgIHdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAotCQkgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCi0JCSBNVl9SRUFEKE1WNjQzNDBfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKKwkgIHdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAorCQkgTVZfUkVBRChNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7CisJTVZfV1JJVEUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCisJCSBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKIAogCS8qIFR1cm4gb2ZmIHRoZSBCaXQtRXJyb3IgTEVEICovCiAJT0NFTE9UX0ZQR0FfV1JJVEUoMHg4MCwgQ0xSKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9NYWtlZmlsZQppbmRleCA5MTI0MDc3Li45NDgwMmI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgTW9tZW50dW0gQ29tcHV0ZXIncyBPY2Vsb3QtQyBhbmQgLUNTIGJvYXJkcy4KICMKIAotb2JqLXkJIAkJKz0gY3BjaS1pcnEubyBpbnQtaGFuZGxlci5vIGlycS5vIHByb20ubyByZXNldC5vIFwKK29iai15CSAJCSs9IGNwY2ktaXJxLm8gaXJxLm8gcHJvbS5vIHJlc2V0Lm8gXAogCQkJICAgc2V0dXAubyB1YXJ0LWlycS5vCiAKIG9iai0kKENPTkZJR19LR0RCKQkrPSBkYmdfaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jCmluZGV4IDg3MjBiY2MuLmYwYTZhMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvZGJnX2lvLmMKQEAgLTczLDcgKzczLDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKIAotCS8qIHNldCB1cCBidWFkIHJhdGUgKi8KKwkvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAJewogCQl1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaW50LWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzNDlkOS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaW50LWhhbmRsZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIgSW5jLgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+Ci0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBGaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlciBmb3IgT2NlbG90LUNTIGJvYXJkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgIm9jZWxvdF9jX2ZwZ2EuaCIKLQotLyoKLSAqIEZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBPY2Vsb3QtQ1MgYm9hcmQKLSAqLwotCQkuYWxpZ24JNQotCQlORVNURUQob2NlbG90X2hhbmRsZV9pbnQsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MiwgQ1AwX1NUQVRVUwotCi0JCWFuZAl0MCwgdDIKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDAJLyogc3cwIHNvZnR3YXJlIGludGVycnVwdCAqLwotCQlibmV6CXQxLCBsbF9zdzBfaXJxCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMQkvKiBzdzEgc29mdHdhcmUgaW50ZXJydXB0ICovCi0JCWJuZXoJdDEsIGxsX3N3MV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9zY3NpX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDMJLyogaW50MSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3VhcnRfZGVjb2RlX2lycQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDQJLyogaW50MiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BtY19pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA1CS8qIGludDMgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9jcGNpX2RlY29kZV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2CS8qIGludDQgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9tdjY0MzQwX2RlY29kZV9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9jcHV0aW1lcl9pcnEKLQotCQkuc2V0CXJlb3JkZXIKLQotCQkvKiB3cm9uZyBhbGFybSBvciBtYXNrZWQgLi4uICovCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQob2NlbG90X2hhbmRsZV9pbnQpCi0KLQkJLmFsaWduCTUKLWxsX3N3MF9pcnE6Ci0JCWxpCWEwLCAwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3N3MV9pcnE6Ci0JCWxpCWEwLCAxCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLWxsX3Njc2lfaXJxOgotCQlsaQlhMCwgMgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3VhcnRfZGVjb2RlX2lycToKLQkJbW92ZQlhMCwgc3AKLQkJamFsCWxsX3VhcnRfaXJxCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3BtY19pcnE6Ci0JCWxpCWEwLCA0Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3BjaV9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfY3BjaV9pcnEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfbXY2NDM0MF9kZWNvZGVfaXJxOgotCQltb3ZlCWEwLCBzcAotCQlqYWwJbGxfbXY2NDM0MF9pcnEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfY3B1dGltZXJfaXJxOgotCQlsaQlhMCwgNwotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYwppbmRleCBhNTc2NGJjMi4uODZmNjFjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2lycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBvY2Vsb3RfaGFuZGxlX2ludCh2b2lkKTsKIGV4dGVybiB2b2lkIHVhcnRfaXJxX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBjcGNpX2lycV9pbml0KHZvaWQpOwogCkBAIC02MCw2ICs1OSwzMyBAQAogCW5vX2FjdGlvbiwgU0FfSU5URVJSVVBULCBDUFVfTUFTS19OT05FLCAiY2FzY2FkZSB2aWEgTVY2NDM0MCIsIE5VTEwsIE5VTEwKIH07CiAKK2V4dGVybiB2b2lkIGxsX3VhcnRfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGxsX2NwY2lfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDApCisJCWRvX0lSUSgwLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCisJCWRvX0lSUSgxLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCisJCWRvX0lSUSgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDMpCisJCWxsX3VhcnRfaXJxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKKwkJZG9fSVJRKDQsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKKwkJbGxfY3BjaV9pcnEocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQorCQlsbF9tdjY0MzQwX2lycShyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUSg3LCByZWdzKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCS8qCkBAIC02OCw4ICs5NCw2IEBACiAJICovCiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSk7CiAKLQkvKiBTZXRzIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBvY2Vsb3RfaGFuZGxlX2ludCk7CiAJbWlwc19jcHVfaXJxX2luaXQoMCk7CiAKIAkvKiBzZXQgdXAgdGhlIGNhc2NhZGluZyBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvTWFrZWZpbGUgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvTWFrZWZpbGUKaW5kZXggZTVmMWNiMC4uYWRiNTY2NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIE1vbWVudHVtIENvbXB1dGVyJ3MgT2NlbG90LUcgYm9hcmQuCiAjCiAKLW9iai15CSAJCSs9IGludC1oYW5kbGVyLm8gaXJxLm8gZ3QtaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkJIAkJKz0gaXJxLm8gZ3QtaXJxLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubwogb2JqLSQoQ09ORklHX0tHREIpCSs9IGRiZ19pby5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYwppbmRleCA4NzIwYmNjLi5mMGE2YTM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jCkBAIC03Myw3ICs3Myw3IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLQkvKiBzZXQgdXAgYnVhZCByYXRlICovCisJLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogCXsKIAkJdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MmU4ZjcuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogRmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIG9jZWxvdCBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotLyoKLSAqIGZpcnN0IGxldmVsIGludGVycnVwdCBkaXNwYXRjaGVyIGZvciBvY2Vsb3QgYm9hcmQgLQotICogV2UgY2hlY2sgZm9yIHRoZSB0aW1lciBmaXJzdCwgdGhlbiBjaGVjayBQQ0kgaW50cyBBIGFuZCBELgotICogVGhlbiBjaGVjayBmb3Igc2VyaWFsIElSUSBhbmQgZmFsbCB0aHJvdWdoLgotICovCi0JCS5hbGlnbgk1Ci0JCU5FU1RFRChvY2Vsb3RfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQyLCBDUDBfU1RBVFVTCi0KLQkJYW5kCXQwLCB0MgotCi0JCSBhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDIJLyogaW50MCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3ByaV9lbmV0X2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAzCS8qIGludDEgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLCBsbF9zZWNfZW5ldF9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBpbnQyIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfdWFydF9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNQkvKiBpbnQzIGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfY3BjaV9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNgkvKiBpbnQ0IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfZ2FsaWxlb19wMF9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNwkvKiBjcHUgdGltZXIgKi8KLQkJYm5legl0MSwgbGxfY3B1dGltZXJfaXJxCi0KLSAgICAgICAgICAgICAgICAvKiBub3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cyAqLwotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJY2ZjMAl0MSwgQ1AwX1MxX0lOVENPTlRST0wKLQotCQkvKiBzaGlmdCB0aGUgbWFzayA4IGJpdHMgbGVmdCB0byBsaW5lIHVwIHRoZSBiaXRzICovCi0JCSBzbGwJdDIsIHQxLCA4Ci0KLQkJIGFuZAl0MCwgdDIKLQkJIHNybAl0MCwgdDAsIDE2Ci0KLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQOAkvKiBpbnQ2IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfZ2FsaWxlb19wMV9pcnEKLQkJIGFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQOQkvKiBpbnQ3IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfcG1jX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxMAkvKiBpbnQ4IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfY3BjaV9hYmNkX2lycQotCQkgYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxMQkvKiBpbnQ5IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSwgbGxfdGVzdHBvaW50X2lycQotCi0JCS5zZXQJcmVvcmRlcgotCi0JCS8qIHdyb25nIGFsYXJtIG9yIG1hc2tlZCAuLi4gKi8KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCUVORChvY2Vsb3RfaGFuZGxlX2ludCkKLQotCQkuYWxpZ24JNQotbGxfcHJpX2VuZXRfaXJxOgotCQlsaQlhMCwgMgotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX3NlY19lbmV0X2lycToKLQkJbGkJYTAsIDMKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF91YXJ0X2lycToKLQkJbGkJYTAsIDQKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcGNpX2lycToKLQkJbGkJYTAsIDUKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9nYWxpbGVvX3AwX2lycToKLQkJbGkJYTAsIDYKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcHV0aW1lcl9pcnE6Ci0JCWxpCWEwLCA3Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfZ2FsaWxlb19wMV9pcnE6Ci0JCWxpCWEwLCA4Ci0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfcG1jX2lycToKLQkJbGkJYTAsIDkKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9jcGNpX2FiY2RfaXJxOgotCQlsaQlhMCwgMTAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF90ZXN0cG9pbnRfaXJxOgotCQlsaQlhMCwgMTEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2lycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2lycS5jCmluZGV4IDVlYjg1YjEuLjdhNGE0MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9pcnEuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaXJxLmMKQEAgLTQ4LDcgKzQ4LDQxIEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIG9jZWxvdF9oYW5kbGVfaW50KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCisJCWRvX0lSUSgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDMpCisJCWRvX0lSUSgzLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDQpCisJCWRvX0lSUSg0LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpCisJCWRvX0lSUSg1LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpCisJCWRvX0lSUSg2LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUSg3LCByZWdzKTsKKwllbHNlIHsKKwkJLyoKKwkJICogTm93IGxvb2sgYXQgdGhlIGV4dGVuZGVkIGludGVycnVwdHMKKwkJICovCisJCXBlbmRpbmcgPSAocmVhZF9jMF9jYXVzZSgpICYgKHJlYWRfYzBfaW50Y29udHJvbCgpIDw8IDgpKSA+PiAxNjsKKworCQlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA4KQorCQkJZG9fSVJRKDgsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDkpCisJCQlkb19JUlEoOSwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMTApCisJCQlkb19JUlEoMTAsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDExKQorCQkJZG9fSVJRKDExLCByZWdzKTsKKwkJZWxzZQorCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCX0KK30KKwogZXh0ZXJuIHZvaWQgZ3Q2NDI0MF9pcnFfaW5pdCh2b2lkKTsKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQpAQCAtNjAsOCArOTQsNiBAQAogCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0pOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQkvKiBTZXRzIHRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hlci4gKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBvY2Vsb3RfaGFuZGxlX2ludCk7CiAJbWlwc19jcHVfaXJxX2luaXQoMCk7CiAJcm03a19jcHVfaXJxX2luaXQoOCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwppbmRleCA5MzVkZDg1Li5jMzFlNGNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCkBAIC0xNCw4ICsxNCw4IEBACiAKICNpbmNsdWRlICJvcF9pbXBsLmgiCiAKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHggX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX3JtOTAwMCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwX29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCAqbW9kZWw7CiAKQEAgLTI3LDcgKzI3LDcgQEAKIAltb2RlbC0+cmVnX3NldHVwKGN0cik7CiAKIAkvKiBDb25maWd1cmUgdGhlIHJlZ2lzdGVycyBvbiBhbGwgY3B1cy4gICovCi0Jb25fZWFjaF9jcHUobW9kZWwtPmNwdV9zZXR1cCwgMCwgMCwgMSk7CisJb25fZWFjaF9jcHUobW9kZWwtPmNwdV9zZXR1cCwgTlVMTCwgMCwgMSk7CiAKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC04MCwxMyArODAsMTQgQEAKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMjVLRjoKIAljYXNlIENQVV8zNEs6CisJY2FzZSBDUFVfNzRLOgogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgotCQlsbW9kZWwgPSAmb3BfbW9kZWxfbWlwc3h4OworCQlsbW9kZWwgPSAmb3BfbW9kZWxfbWlwc3h4X29wczsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9STTkwMDA6Ci0JCWxtb2RlbCA9ICZvcF9tb2RlbF9ybTkwMDA7CisJCWxtb2RlbCA9ICZvcF9tb2RlbF9ybTkwMDBfb3BzOwogCQlicmVhazsKIAl9OwogCkBAIC0xMTQsNSArMTE1LDYgQEAKIAogdm9pZCBvcHJvZmlsZV9hcmNoX2V4aXQodm9pZCkKIHsKLQltb2RlbC0+ZXhpdCgpOworCWlmIChtb2RlbCkKKwkJbW9kZWwtPmV4aXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYwppbmRleCA5NWQ0ODhjLi5mMjZhMDBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX21pcHN4eC5jCkBAIC0yMyw3ICsyMyw3IEBACiAKICNkZWZpbmUgTV9DT1VOVEVSX09WRVJGTE9XCQkoMVVMICAgIDw8IDMxKQogCi1zdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHg7CitzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzOwogCiBzdGF0aWMgc3RydWN0IG1pcHN4eF9yZWdpc3Rlcl9jb25maWcgewogCXVuc2lnbmVkIGludCBjb250cm9sWzRdOwpAQCAtMzQsNyArMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBtaXBzeHhfcmVnX3NldHVwKHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyAqY3RyKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnM7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnM7CiAJaW50IGk7CiAKIAkvKiBDb21wdXRlIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGNvbnRyb2wgd29yZC4gICovCkBAIC02Miw3ICs2Miw3IEBACiAKIHN0YXRpYyB2b2lkIG1pcHN4eF9jcHVfc2V0dXAgKHZvaWQgKmFyZ3MpCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVyczsKIAogCXN3aXRjaCAoY291bnRlcnMpIHsKIAljYXNlIDQ6CkBAIC04Myw3ICs4Myw3IEBACiAvKiBTdGFydCBhbGwgY291bnRlcnMgb24gY3VycmVudCBDUFUgKi8KIHN0YXRpYyB2b2lkIG1pcHN4eF9jcHVfc3RhcnQodm9pZCAqYXJncykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzOwogCiAJc3dpdGNoIChjb3VudGVycykgewogCWNhc2UgNDoKQEAgLTEwMCw3ICsxMDAsNyBAQAogLyogU3RvcCBhbGwgY291bnRlcnMgb24gY3VycmVudCBDUFUgKi8KIHN0YXRpYyB2b2lkIG1pcHN4eF9jcHVfc3RvcCh2b2lkICphcmdzKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnM7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnM7CiAKIAlzd2l0Y2ggKGNvdW50ZXJzKSB7CiAJY2FzZSA0OgpAQCAtMTE2LDcgKzExNiw3IEBACiAKIHN0YXRpYyBpbnQgbWlwc3h4X3BlcmZjb3VudF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnM7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnM7CiAJdW5zaWduZWQgaW50IGNvbnRyb2w7CiAJdW5zaWduZWQgaW50IGNvdW50ZXI7CiAJaW50IGhhbmRsZWQgPSAwOwpAQCAtMTg3LDMzICsxODcsMzcgQEAKIAogCXJlc2V0X2NvdW50ZXJzKGNvdW50ZXJzKTsKIAotCW9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnMgPSBjb3VudGVyczsKKwlvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVycyA9IGNvdW50ZXJzOwogCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CiAJY2FzZSBDUFVfMjBLQzoKLQkJb3BfbW9kZWxfbWlwc3h4LmNwdV90eXBlID0gIm1pcHMvMjBLIjsKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzLzIwSyI7CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfMjRLOgotCQlvcF9tb2RlbF9taXBzeHguY3B1X3R5cGUgPSAibWlwcy8yNEsiOworCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvMjRLIjsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV8yNUtGOgotCQlvcF9tb2RlbF9taXBzeHguY3B1X3R5cGUgPSAibWlwcy8yNUsiOworCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvMjVLIjsKIAkJYnJlYWs7CiAKICNpZm5kZWYgQ09ORklHX1NNUAogCWNhc2UgQ1BVXzM0SzoKLQkJb3BfbW9kZWxfbWlwc3h4LmNwdV90eXBlID0gIm1pcHMvMzRLIjsKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzLzM0SyI7CisJCWJyZWFrOworCisJY2FzZSBDUFVfNzRLOgorCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvNzRLIjsKIAkJYnJlYWs7CiAjZW5kaWYKIAogCWNhc2UgQ1BVXzVLQzoKLQkJb3BfbW9kZWxfbWlwc3h4LmNwdV90eXBlID0gIm1pcHMvNUsiOworCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvNUsiOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgotCQlvcF9tb2RlbF9taXBzeHguY3B1X3R5cGUgPSAibWlwcy9zYjEiOworCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvc2IxIjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjI5LDEyICsyMzMsMTIgQEAKIAogc3RhdGljIHZvaWQgbWlwc3h4X2V4aXQodm9pZCkKIHsKLQlyZXNldF9jb3VudGVycyhvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzKTsKKwlyZXNldF9jb3VudGVycyhvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVycyk7CiAKIAlwZXJmX2lycSA9IG51bGxfcGVyZl9pcnE7CiB9CiAKLXN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eCA9IHsKK3N0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eF9vcHMgPSB7CiAJLnJlZ19zZXR1cAk9IG1pcHN4eF9yZWdfc2V0dXAsCiAJLmNwdV9zZXR1cAk9IG1pcHN4eF9jcHVfc2V0dXAsCiAJLmluaXQJCT0gbWlwc3h4X2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfcm05MDAwLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfcm05MDAwLmMKaW5kZXggOWI3NWU0MS4uYjcwNjNmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX3JtOTAwMC5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9ybTkwMDAuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJZnJlZV9pcnEocm05MDAwX3BlcmZjb3VudF9pcnEsIE5VTEwpOwogfQogCi1zdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDAgPSB7CitzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDBfb3BzID0gewogCS5yZWdfc2V0dXAJPSBybTkwMDBfcmVnX3NldHVwLAogCS5jcHVfc2V0dXAJPSBybTkwMDBfY3B1X3NldHVwLAogCS5pbml0CQk9IHJtOTAwMF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQppbmRleCA2ZTM4ZjNiLi5iN2M2MzgxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9NYWtlZmlsZQpAQCAtMjIsNiArMjIsNiBAQAogIyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkgOj0gc2V0dXAubyBwcm9tLm8gbWlwc0lSUS5vIGludC5vIHJlc2V0Lm8gdGltZS5vIHByb2MubyBwbGF0Zm9ybS5vCitvYmoteSA6PSBzZXR1cC5vIHByb20ubyBpbnQubyByZXNldC5vIHRpbWUubyBwcm9jLm8gcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIG9iai0kKENPTkZJR19LR0RCKSArPSBnZGJfaG9vay5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9pbnQuYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jCmluZGV4IGM1MDBlMmQuLjM5ZWU2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jCkBAIC0zOCw4ICszOCw2IEBACiAjaW5jbHVkZSA8aW50Lmg+CiAjaW5jbHVkZSA8dWFydC5oPgogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGNwMF9pcnFkaXNwYXRjaCh2b2lkKTsKLQogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfbG9jayk7CiAKIC8qIGRlZmF1bHQgcHJpbyBmb3IgaW50ZXJydXB0cyAqLwpAQCAtNTUsNyArNTMsNyBAQAogCTEJCQkvLyAgNzAKIH07CiAKLXZvaWQgaHcwX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaHcwX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIGZpbmQgb3V0IHdoaWNoIGludGVycnVwdCAqLwogCWlycSA9IFBOWDg1NTBfR0lDX1ZFQ1RPUl8wID4+IDM7CkBAIC02OCw3ICs2Niw3IEBACiB9CiAKIAotdm9pZCB0aW1lcl9pcnFkaXNwYXRjaChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHRpbWVyX2lycWRpc3BhdGNoKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlycSA9ICgweDAxYzAgJiByZWFkX2MwX2NvbmZpZzcoKSkgPj4gNjsKIApAQCAtODgsNiArODYsMjAgQEAKIAl9CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CisKKwlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQorCQlkb19JUlEoMiwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KSB7CisJCWlmIChyZWFkX2MwX2NvbmZpZzcoKSAmIDB4MDFjMCkKKwkJCXRpbWVyX2lycWRpc3BhdGNoKDcsIHJlZ3MpOworCX0KKworCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1vZGlmeV9jcDBfaW50bWFzayh1bnNpZ25lZCBjbHJfbWFzaywgdW5zaWduZWQgc2V0X21hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwpAQCAtMjIzLDkgKzIzNSw2IEBACiAJaW50IGk7CiAJaW50IGNvbmZpZ1BSOwogCi0JLyogaW5pdCBvZiBjcDAgaW50ZXJydXB0cyAqLwotCXNldF9leGNlcHRfdmVjdG9yKDAsIGNwMF9pcnFkaXNwYXRjaCk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgUE5YODU1MF9JTlRfQ1AwX1RPVElOVDsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbGV2ZWxfaXJxX3R5cGU7CiAJCXBueDg1NTBfYWNrKGkpOwkvKiBtYXNrIHRoZSBpcnEganVzdCBpbiBjYXNlICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vbWlwc0lSUS5TIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vbWlwc0lSUS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzhiZmZkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL21pcHNJUlEuUworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgUGhpbGlwcywgSW5jLiBBbGwgcmlnaHRzLgotICogQ29weXJpZ2h0IChjKSAyMDAyIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIEJhc2VkIHVwb24gYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2NjQyNDAvaW50LWhhbmRsZXIuUwotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qCi0gKiBjcDBfaXJxZGlzcGF0Y2gKLSAqCi0gKiAgICBDb2RlIHRvIGhhbmRsZSBpbi1jb3JlIGludGVycnVwdCBleGNlcHRpb24uCi0gKi8KLQotCQkuYWxpZ24JNQotCQkuc2V0CXJlb3JkZXIKLQkJLnNldAlub2F0Ci0JCU5FU1RFRChjcDBfaXJxZGlzcGF0Y2gsIFBUX1NJWkUsIHNwKQotCQlTQVZFX0FMTAotCQlDTEkKLQkJLnNldAlhdAotCQltZmMwCXQwLENQMF9DQVVTRQotCQltZmMwCXQyLENQMF9TVEFUVVMKLQotCQlhbmQJdDAsdDIKLQotCQlhbmRpCXQxLHQwLFNUQVRVU0ZfSVAyIC8qIGludDAgaGFyZHdhcmUgbGluZSAqLwotCQlibmV6CXQxLGxsX2h3MF9pcnEKLQkJbm9wCi0KLQkJYW5kaQl0MSx0MCxTVEFUVVNGX0lQNyAvKiBpbnQ1IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MSxsbF90aW1lcl9pcnEKLQkJbm9wCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCi0JCWoJc3B1cmlvdXNfaW50ZXJydXB0Ci0JCW5vcAotCQlFTkQoY3AwX2lycWRpc3BhdGNoKQotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfaHcwX2lycToKLQkJbGkJYTAsMgotCQltb3ZlCWExLHNwCi0JCWphbAlodzBfaXJxZGlzcGF0Y2gKLQkJbm9wCi0JCWoJcmV0X2Zyb21faXJxCi0JCW5vcAotCi0JCS5hbGlnbgk1Ci0JCS5zZXQJcmVvcmRlcgotbGxfdGltZXJfaXJxOgotCQltZmMwCXQzLENQMF9DT05GSUcsNwotCQlhbmRpCXQ0LHQzLDB4MDFjMAotCQliZXF6CXQ0LGxsX3RpbWVyX291dAotCQlub3AKLQkJbGkJYTAsNwotCQltb3ZlCWExLHNwCi0JCWphbAl0aW1lcl9pcnFkaXNwYXRjaAotCQlub3AKLQotbGxfdGltZXJfb3V0OglqCXJldF9mcm9tX2lycQotCQlub3AKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9wbGF0Zm9ybS5jCmluZGV4IGE1OTIyNjBmLi41NDM2YjRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9pcDMxMDYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGludC5oPgogI2luY2x1ZGUgPHVzYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQppbmRleCBhZTk2YTcxLi5lOTMxZTBkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBQTUMtU2llcnJhIFRpdGFuCiAjCiAKLW9iai15ICAgICs9IGlycS1oYW5kbGVyLm8gaXJxLm8gaTJjLXlvc2VtaXRlLm8gcHJvbS5vIHB5LWNvbnNvbGUubyBzZXR1cC5vCitvYmoteSAgICArPSBpcnEubyBpMmMteW9zZW1pdGUubyBwcm9tLm8gcHktY29uc29sZS5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBkYmdfaW8ubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEtaGFuZGxlci5TIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaXJxLWhhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNiOWM0MC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAzLCAwNCBQTUMtU2llcnJhIEluYy4KLSAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pIChsYWNod2FuaUBwbWMtc2llcnJhLmNvbQotICogQ29weXJpZ2h0IDIwMDQgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICoKLSAqIEZpcnN0LWxldmVsIGludGVycnVwdCByb3V0ZXIgZm9yIHRoZSBQTUMtU2llcnJhIFRpdGFuIGJvYXJkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaXRhbiBzdXBwb3J0cyBIeXBlcnRyYW5zcG9ydCBvciBQQ0kgYnV0IG5vdCBib3RoLiBIZW5jZSwgb25lIGludGVycnVwdAotICogbGluZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgUENJIHNsb3QgQSBhbmQgSHlwZXJ0cmFuc3BvcnQuIFRoaXMgaXMgdGhlCi0gKiBQcm9jZXNzb3IgSU5UQiAjMC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCQkuYWxpZ24JNQotCQlORVNURUQodGl0YW5faGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCS5zZXQJbm9yZW9yZGVyCi0JCWxhCXJhLCByZXRfZnJvbV9pcnEKLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDIsIENQMF9TVEFUVVMKLQotCQlhbmQJdDAsIHQyCi0KLQkJYW5kaQl0MiwgdDAsIFNUQVRVU0ZfSVA3CS8qIElOVEI1IGhhcmR3YXJlIGxpbmUgKi8KLQkJYm5legl0MiwgbGxfdGltZXJfaXJxCS8qIFRpbWVyICovCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiBJTlRCMCBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX3BjaWFfaXJxCQkvKiA2NC1iaXQgUENJICovCi0JCWFuZGkJdDIsIHQwLCBTVEFUVVNGX0lQMwkvKiBJTlRCMSBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDIsIGxsX3BjaWJfaXJxCQkvKiBzZWNvbmQgNjQtYml0IFBDSSBzbG90ICovCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNAkvKiBJTlRCMiBoYXJkd2FyZSBsaW5lICovCi0JCWJuZXoJdDEsIGxsX2R1YXJ0X2lycQkvKiBVQVJUCSovCi0JCWFuZGkgICAgdDIsIHQwLCBTVEFUVVNGX0lQNQkvKiBTTVAgaW50ZXItY29yZSBpbnRlcnJ1cHRzICovCi0JCWJuZXogICAgdDIsIGxsX3NtcF9pcnEKLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA2Ci0JCWJuZXoJdDEsIGxsX2h0X2lycQkJLyogSHlwZXJ0cmFuc3BvcnQgKi8KLQotCQltb3ZlCWEwLCBzcAotCQlqCWRvX2V4dGVuZGVkX2lycQotCQlFTkQodGl0YW5faGFuZGxlX2ludCkKLQotCQkuc2V0CXJlb3JkZXIKLQkJLmFsaWduCTUKLQotbGxfcGNpYV9pcnE6Ci0JCWxpCWEwLCAyCi0JCW1vdmUJYTEsIHNwCi0jaWZkZWYgQ09ORklHX0hZUEVSVFJBTlNQT1JUCi0JCWoJbGxfaHRfc21wX2lycV9oYW5kbGVyCi0jZWxzZQotCQlqCWRvX0lSUQotI2VuZGlmCi0KLWxsX3BjaWJfaXJxOgotCQlsaQlhMCwgMwotCQltb3ZlCWExLCBzcAotCQlqCWRvX0lSUQotCi1sbF9kdWFydF9pcnE6Ci0JCWxpCWEwLCA0Ci0JCW1vdmUJYTEsIHNwCi0JCWoJZG9fSVJRCi0KLWxsX3NtcF9pcnE6Ci0JCWxpCWEwLCA1Ci0JCW1vdmUJYTEsIHNwCi0jaWZkZWYgQ09ORklHX1NNUAotCQlqCXRpdGFuX21haWxib3hfaXJxCi0jZWxzZQotCQlqCWRvX0lSUQotI2VuZGlmCi0KLWxsX2h0X2lycToKLQkJbGkJYTAsIDYKLQkJbW92ZQlhMSwgc3AKLQkJaglsbF9odF9zbXBfaXJxX2hhbmRsZXIKLQotbGxfdGltZXJfaXJxOgotCQlsaQlhMCwgNwotCQltb3ZlCWExLCBzcAotCQlqCWRvX0lSUQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaXJxLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYwppbmRleCBmNGUyODk3Li5hMWY1MjRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYwpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBQTUMtU2llcnJhIEluYy4KICAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pIChsYWNod2FuaUBwbWMtc2llcnJhLmNvbSkKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTU1LDcgKzU3LDYgQEAKICNkZWZpbmUgSFlQRVJUUkFOU1BPUlRfSU5UQyAgICAgMHg3YQkJLyogSU5UQyMgKi8KICNkZWZpbmUgSFlQRVJUUkFOU1BPUlRfSU5URCAgICAgMHg3YgkJLyogSU5URCMgKi8KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB0aXRhbl9oYW5kbGVfaW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgamFndWFyX21haWxib3hfaXJxKHN0cnVjdCBwdF9yZWdzICopOwogCiAvKgpAQCAtMTI1LDYgKzEyNiwzNSBAQAogCiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY2F1c2UgPSByZWFkX2MwX2NhdXNlKCk7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSBjYXVzZSAmIHN0YXR1czsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpIHsKKwkJZG9fSVJRKDcsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKSB7CisjaWZkZWYgQ09ORklHX0hZUEVSVFJBTlNQT1JUCisJCWxsX2h0X3NtcF9pcnFfaGFuZGxlcigyLCByZWdzKTsKKyNlbHNlCisJCWRvX0lSUSgyLCByZWdzKTsKKyNlbmRpZgorCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKSB7CisJCWRvX0lSUSgzLCByZWdzKTsKKwl9IGVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkgeworCQlkb19JUlEoNCwgcmVncyk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDUpIHsKKyNpZmRlZiBDT05GSUdfU01QCisJCXRpdGFuX21haWxib3hfaXJxKHJlZ3MpOworI2Vsc2UKKwkJZG9fSVJRKDUsIHJlZ3MpOworI2VuZGlmCisJfSBlbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDYpIHsKKwkJZG9fSVJRKDQsIHJlZ3MpOworCX0KK30KKwogI2lmZGVmIENPTkZJR19LR0RCCiBleHRlcm4gdm9pZCBpbml0X3NlY29uZF9wb3J0KHZvaWQpOwogI2VuZGlmCkBAIC0xMzYsNyArMTY2LDYgQEAKIHsKIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIHRpdGFuX2hhbmRsZV9pbnQpOwogCW1pcHNfY3B1X2lycV9pbml0KDApOwogCXJtN2tfY3B1X2lycV9pbml0KDgpOwogCXJtOWtfY3B1X2lycV9pbml0KDEyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L01ha2VmaWxlIGIvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKaW5kZXggNmE4ZThiYy4uNzMwZjQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBRZW11IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CQk9IHEtZmlybXdhcmUubyBxLWludC5vIHEtaXJxLm8gcS1tZW0ubyBxLXNldHVwLm8KK29iai15CQk9IHEtZmlybXdhcmUubyBxLWlycS5vIHEtbWVtLm8gcS1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19TTVApICs9IHEtc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L3EtaW50LlMgYi9hcmNoL21pcHMvcWVtdS9xLWludC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTNkZmU1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9xZW11L3EtaW50LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogUWVtdSBpbnRlcnJ1cHQgaGFuZGxlciBjb2RlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBieSBSYWxmIEJhZWNobGUKLSAqLwotI2luY2x1ZGUgPGFzbS9hc20uaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLQotCS5hbGlnbgk1Ci0JTkVTVEVEKHFlbXVfaGFuZGxlX2ludCwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQltb3ZlCWEwLCBzcAotCVBUUl9MQQlyYSwgcmV0X2Zyb21faXJxCi0Jaglkb19xZW11X2ludAotCUVORChxZW11X2hhbmRsZV9pbnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcWVtdS9xLWlycS5jIGIvYXJjaC9taXBzL3FlbXUvcS1pcnEuYwppbmRleCAyYzRlMDcwLi4zMzUyMzc0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcWVtdS9xLWlycS5jCisrKyBiL2FyY2gvbWlwcy9xZW11L3EtaXJxLmMKQEAgLTksNyArOSw3IEBACiAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcWVtdV9oYW5kbGVfaW50KHZvaWQpOwogCi1hc21saW5rYWdlIHZvaWQgZG9fcWVtdV9pbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOwogCkBAIC0yOSw3ICsyOSw2IEBACiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBxZW11X2hhbmRsZV9pbnQpOwogCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IFFFTVVfQzBfQ09VTlRFUl9DTE9DSzsJCS8qIDEwME1IeiAqLwogCiAJaW5pdF9pODI1OV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUKaW5kZXggZWIwODIwZi4uNmFhNGMwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CSs9IGlwMjItbWMubyBpcDIyLWhwYy5vIGlwMjItaW50Lm8gaXAyMi1pcnEubyBpcDIyLWJlcnIubyBcCitvYmoteQkrPSBpcDIyLW1jLm8gaXAyMi1ocGMubyBpcDIyLWludC5vIGlwMjItYmVyci5vIFwKIAkgICBpcDIyLXRpbWUubyBpcDIyLW52cmFtLm8gaXAyMi1yZXNldC5vIGlwMjItc2V0dXAubwogCiBvYmotJChDT05GSUdfRUlTQSkJKz0gaXAyMi1laXNhLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKaW5kZXggZDE2ZmI0My4uZmM2YTdlMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKQEAgLTM3LDcgKzM3LDYgQEAKIHN0YXRpYyBjaGFyIGxjMm1za190b19pcnFuclsyNTZdOwogc3RhdGljIGNoYXIgbGMzbXNrX3RvX2lycW5yWzI1Nl07CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgaW5keUlSUSh2b2lkKTsKIGV4dGVybiBpbnQgaXAyMl9laXNhX2luaXQodm9pZCk7CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9sb2NhbDBfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yMjQsNyArMjIzLDcgQEAKIAkuZW5kCQk9IGVuZF9sb2NhbDNfaXJxLAogfTsKIAotdm9pZCBpbmR5X2xvY2FsMF9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGluZHlfbG9jYWwwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXU4IG1hc2sgPSBzZ2ludC0+aXN0YXQwICYgc2dpbnQtPmltYXNrMDsKIAl1OCBtYXNrMjsKQEAgLTI0Miw3ICsyNDEsNyBAQAogCXJldHVybjsKIH0KIAotdm9pZCBpbmR5X2xvY2FsMV9pcnFkaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGluZHlfbG9jYWwxX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXU4IG1hc2sgPSBzZ2ludC0+aXN0YXQxICYgc2dpbnQtPmltYXNrMTsKIAl1OCBtYXNrMjsKQEAgLTI2Miw3ICsyNjEsNyBAQAogCiBleHRlcm4gdm9pZCBpcDIyX2JlX2ludGVycnVwdChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXZvaWQgaW5keV9idXNlcnJvcl9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpbmR5X2J1c2Vycm9yX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxID0gU0dJX0JVU0VSUl9JUlE7CiAKQEAgLTMwNyw2ICszMDYsNTYgQEAKICNkZWZpbmUgU0dJX0lOVEVSUlVQVFMJU0dJTlRfTE9DQUwzCiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgaW5keV9yNGtfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGluZHlfODI1NHRpbWVyX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBJUlFzIG9uIHRoZSBJTkRZIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMgd2hpY2ggd2UgZG9uJ3QgdXNlCisgKiBhdCBhbGwpIGxpa2U6CisgKgorICoJTUlQUyBJUlEJU291cmNlCisgKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KKyAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCisgKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKKyAqICAgICAgICAgICAgIDIgICAgICAgIExvY2FsIElSUSBsZXZlbCB6ZXJvCisgKiAgICAgICAgICAgICAzICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgb25lCisgKiAgICAgICAgICAgICA0ICAgICAgICA4MjU0IFRpbWVyIHplcm8KKyAqICAgICAgICAgICAgIDUgICAgICAgIDgyNTQgVGltZXIgb25lCisgKiAgICAgICAgICAgICA2ICAgICAgICBCdXMgRXJyb3IKKyAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCisgKgorICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgorICoKKyAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCisgKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSB6ZXJvCisgKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSBvbmUKKyAqICAgICAgICAgICAgICAgICAgQnVzIEVycm9yCisgKiAgICAgICAgICAgICAgICAgIDgyNTQgVGltZXIgemVybworICogTG93ZXN0ICAtLS0tICAgICA4MjU0IFRpbWVyIG9uZQorICoKKyAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQorICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgorICovCisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKworCS8qCisJICogRmlyc3Qgd2UgY2hlY2sgZm9yIHI0ayBjb3VudGVyL3RpbWVyIElSUS4KKwkgKi8KKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCisJCWluZHlfcjRrX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikKKwkJaW5keV9sb2NhbDBfaXJxZGlzcGF0Y2gocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCisJCWluZHlfbG9jYWwxX2lycWRpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQlpbmR5X2J1c2Vycm9yX2lycShyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgKENBVVNFRl9JUDQgfCBDQVVTRUZfSVA1KSkKKwkJaW5keV84MjU0dGltZXJfaXJxKHJlZ3MpOworfQorCiBleHRlcm4gdm9pZCBtaXBzX2NwdV9pcnFfaW5pdCh1bnNpZ25lZCBpbnQgaXJxX2Jhc2UpOwogCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCkBAIC0zNjksOCArNDE4LDYgQEAKIAlzZ2ludC0+Y21laW1hc2swID0gMDsKIAlzZ2ludC0+Y21laW1hc2sxID0gMDsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIGluZHlJUlEpOwotCiAJLyogaW5pdCBDUFUgaXJxcyAqLwogCW1pcHNfY3B1X2lycV9pbml0KFNHSU5UX0NQVSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWlycS5TIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaXJxLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjY2JkOWUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWlycS5TCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBpcDIyLWlycS5TOiBJbnRlcnJ1cHQgZXhjZXB0aW9uIGRpc3BhdGNoIGNvZGUgZm9yIEZ1bGxIb3VzZSBhbmQKLSAqICAgICAgICAgICAgIEd1aW5lc3MuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQotICovCi0KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0KLS8qIEEgbG90IG9mIGNvbXBsaWNhdGlvbiBoZXJlIGlzIHRha2VuIGF3YXkgYmVjYXVzZToKLSAqCi0gKiAxKSBXZSBoYW5kbGUgb25lIGludGVycnVwdCBhbmQgcmV0dXJuLCBzaXR0aW5nIGluIGEgbG9vcCBhbmQgbW92aW5nIGFjcm9zcwotICogICAgYWxsIHRoZSBwZW5kaW5nIElSUSBiaXRzIGluIHRoZSBjYXVzZSByZWdpc3RlciBpcyBfTk9UXyB0aGUgYW5zd2VyLCB0aGUKLSAqICAgIGNvbW1vbiBjYXNlIGlzIG9uZSBwZW5kaW5nIElSUSBzbyBvcHRpbWl6ZSBpbiB0aGF0IGRpcmVjdGlvbi4KLSAqCi0gKiAyKSBXZSBuZWVkIG5vdCBjaGVjayBhZ2FpbnN0IGJpdHMgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBJUlEgbWFzaywgdGhhdAotICogICAgd291bGQgbWFrZSB0aGlzIHJvdXRpbmUgc2xvdyBhcyBoZWxsLgotICoKLSAqIDMpIExpbnV4IG9ubHkgdGhpbmtzIGluIHRlcm1zIG9mIGFsbCBJUlFzIG9uIG9yIGFsbCBJUlFzIG9mZiwgbm90aGluZyBpbgotICogICAgYmV0d2VlbiBsaWtlIEJTRCBzcGwoKSBicmFpbi1kYW1hZ2UuCi0gKgotICogRnVydGhlcm1vcmUsIHRoZSBJUlFzIG9uIHRoZSBJTkRZIGxvb2sgYmFzaWNhbGx5IChiYXJyaW5nIHNvZnR3YXJlIElSUXMKLSAqIHdoaWNoIHdlIGRvbid0IHVzZSBhdCBhbGwpIGxpa2U6Ci0gKgotICoJTUlQUyBJUlEJU291cmNlCi0gKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KLSAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDIgICAgICAgIExvY2FsIElSUSBsZXZlbCB6ZXJvCi0gKiAgICAgICAgICAgICAzICAgICAgICBMb2NhbCBJUlEgbGV2ZWwgb25lCi0gKiAgICAgICAgICAgICA0ICAgICAgICA4MjU0IFRpbWVyIHplcm8KLSAqICAgICAgICAgICAgIDUgICAgICAgIDgyNTQgVGltZXIgb25lCi0gKiAgICAgICAgICAgICA2ICAgICAgICBCdXMgRXJyb3IKLSAqICAgICAgICAgICAgIDcgICAgICAgIFI0ayB0aW1lciAod2hhdCB3ZSB1c2UpCi0gKgotICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgotICoKLSAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCi0gKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSB6ZXJvCi0gKiAgICAgICAgICAgICAgICAgIExvY2FsIElSUSBvbmUKLSAqICAgICAgICAgICAgICAgICAgQnVzIEVycm9yCi0gKiAgICAgICAgICAgICAgICAgIDgyNTQgVGltZXIgemVybwotICogTG93ZXN0ICAtLS0tICAgICA4MjU0IFRpbWVyIG9uZQotICoKLSAqIHRoZW4gd2UganVzdCByZXR1cm4sIGlmIG11bHRpcGxlIElSUXMgYXJlIHBlbmRpbmcgdGhlbiB3ZSB3aWxsIGp1c3QgdGFrZQotICogYW5vdGhlciBleGNlcHRpb24sIGJpZyBkZWFsLgotICovCi0KLQkudGV4dAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLmFsaWduCTUKLQlORVNURUQoaW5keUlSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkKLQkuc2V0CWF0Ci0JbWZjMAlzMCwgQ1AwX0NBVVNFCQkjIGdldCBpcnEgbWFzawotCi0JLyogRmlyc3Qgd2UgY2hlY2sgZm9yIHI0ayBjb3VudGVyL3RpbWVyIElSUS4gKi8KLQlhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQNwotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIENBVVNFRl9JUDIJIyBkZWxheSBzbG90LCBjaGVjayBsb2NhbCBsZXZlbCB6ZXJvCi0KLQkvKiBXaGVlZSwgYSB0aW1lciBpbnRlcnJ1cHQuICovCi0JamFsCWluZHlfcjRrX3RpbWVyX2ludGVycnVwdAotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLQotMToKLQliZXEJYTAsIHplcm8sIDFmCi0JIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVAzCSMgZGVsYXkgc2xvdCwgY2hlY2sgbG9jYWwgbGV2ZWwgb25lCi0KLQkvKiBXaGVlZSwgbG9jYWwgbGV2ZWwgemVybyBpbnRlcnJ1cHQuICovCi0JamFsCWluZHlfbG9jYWwwX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0KLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0KLTE6Ci0JYmVxCWEwLCB6ZXJvLCAxZgotCSBhbmRpCWEwLCBzMCwgQ0FVU0VGX0lQNgkjIGRlbGF5IHNsb3QsIGNoZWNrIGJ1cyBlcnJvcgotCi0JLyogV2hlZWUsIGxvY2FsIGxldmVsIG9uZSBpbnRlcnJ1cHQuICovCi0JamFsCWluZHlfbG9jYWwxX2lycWRpc3BhdGNoCi0JIG1vdmUJYTAsIHNwCQkJIyBkZWxheSBzbG90Ci0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotCi0xOgotCWJlcQlhMCwgemVybywgMWYKLQkgYW5kaQlhMCwgczAsIChDQVVTRUZfSVA0IHwgQ0FVU0VGX0lQNSkJIyBkZWxheSBzbG90Ci0KLQkvKiBXaGVlZSwgYW4gYXN5bmNocm9ub3VzIGJ1cyBlcnJvci4uLiAqLwotCWphbAlpbmR5X2J1c2Vycm9yX2lycQotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLQotMToKLQkvKiBIZXJlIGJ5IG1pc3Rha2U/IEl0IGlzIHBvc3NpYmxlLCB0aGF0IGJ5IHRoZSB0aW1lIHdlIHRha2UKLQkgKiB0aGUgZXhjZXB0aW9uIHRoZSBJUlEgcGluIGdvZXMgbG93LCBzbyBqdXN0IGxlYXZlIGlmIHRoaXMKLQkgKiBpcyB0aGUgY2FzZS4KLQkgKi8KLQliZXEJYTAsIHplcm8sIDFmCi0JIG5vcAkJCSAgCSMgZGVsYXkgc2xvdAotCi0JLyogTXVzdCBiZSBvbmUgb2YgdGhlIDgyNTQgdGltZXJzLi4uICovCi0JamFsCWluZHlfODI1NHRpbWVyX2lycQotCSBtb3ZlCWEwLCBzcAkJCSMgZGVsYXkgc2xvdAotMToKLQlqCXJldF9mcm9tX2lycQotCSBub3AJCQkJIyBkZWxheSBzbG90Ci0JRU5EKGluZHlJUlEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUKaW5kZXggNGJhMzQwNy4uNjg2YmExNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBJUDI3IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CTo9IGlwMjctYmVyci5vIGlwMjctY29uc29sZS5vIGlwMjctaXJxLm8gaXAyNy1pbml0Lm8gaXAyNy1pcnEtZ2x1ZS5vIFwKK29iai15CTo9IGlwMjctYmVyci5vIGlwMjctY29uc29sZS5vIGlwMjctaXJxLm8gaXAyNy1pbml0Lm8gXAogCSAgIGlwMjcta2xjb25maWcubyBpcDI3LWtsbnVtYS5vIGlwMjctbWVtb3J5Lm8gaXAyNy1ubWkubyBpcDI3LXJlc2V0Lm8gXAogCSAgIGlwMjctdGltZXIubyBpcDI3LWh1YmlvLm8gaXAyNy14dGFsay5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KaW5kZXggMzIxMDYxMy4uMTlmMTUxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KQEAgLTksMTAgKzksNiBAQAogaW4gaXJpeD8KIDYuIEludmVzdGlnYXRlIHdoeSB0aGluZ3MgZG8gbm90IHdvcmsgd2l0aG91dCB0aGUgc2V0dXBfdGVzdCgpIGNhbGwKIGJlaW5nIGludm9rZWQgb24gYWxsIG5vZGVzIGluIGlwMjctbWVtb3J5LmMuCi03LiBUb28gbWFueSBDTElzIGluIHRoZSBsb2NvcmUgaGFuZGxlcnMgOgotRm9yIHRoZSBsb3cgbGV2ZWwgaGFuZGxlcnMgc2V0IHVwIGJ5IHNldF9leGNlcHRfdmVjdG9yKCksCi1fX3RsYl9yZWZpbGxfZGVidWdfdHJhbXAsIF9feHRsYl9yZWZpbGxfZGVidWdfdHJhbXAgYW5kIGNhY2hlZXJyb3IsCi1pbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZSBjb2RlIHNob3VsZCBkbyBDTEksIFNUSSBvciBLTU9ERS4KIDguIFRvbyBtYW55IGRvX3BhZ2VfZmF1bHRzIGludm9rZWQgLSBpbnZlc3RpZ2F0ZS4KIDkuIHN0YXJ0X3RocmVhZCBtdXN0IHR1cm4gb2ZmIFVYNjQgLi4uIGFuZCBkZWZpbmUgdGxiX3JlZmlsbF9kZWJ1Zy4KIDEwLiBOZWVkIGEgYmFkIHBtZCB0YWJsZSwgYmFkIHB0ZSB0YWJsZS4gX19iYWRfcG1kX3RhYmxlL19fYmFkX3BhZ2V0YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLWdsdWUuUyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS1nbHVlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMDRkZjcuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLWdsdWUuUworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JLnRleHQKLQkuYWxpZ24JNQotTkVTVEVEKGlwMjdfaXJxLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCi0JbWZjMAlzMCwgQ1AwX0NBVVNFCi0JbWZjMAl0MCwgQ1AwX1NUQVRVUwotCWFuZAlzMCwgdDAKLQltb3ZlCWEwLCBzcAotCVBUUl9MQQlyYSwgcmV0X2Zyb21faXJxCi0KLQkvKiBGaXJzdCBjaGVjayBmb3IgUlQgaW50ZXJydXB0LiAgKi8KLQlhbmRpCXQwLCBzMCwgQ0FVU0VGX0lQNAotCWJuZXoJdDAsIGlwNAotCWFuZGkJdDAsIHMwLCBDQVVTRUZfSVAyCi0JYm5legl0MCwgaXAyCi0JYW5kaQl0MCwgczAsIENBVVNFRl9JUDMKLQlibmV6CXQwLCBpcDMKLQlhbmRpCXQwLCBzMCwgQ0FVU0VGX0lQNQotCWJuZXoJdDAsIGlwNQotCWFuZGkJdDAsIHMwLCBDQVVTRUZfSVA2Ci0JYm5legl0MCwgaXA2Ci0JaglyYQotCi1pcDI6CWoJaXAyN19kb19pcnFfbWFzazAJIyBQSV9JTlRfUEVORF8wIG9yIENDX1BFTkRfe0F8Qn0KLWlwMzoJaglpcDI3X2RvX2lycV9tYXNrMQkjIFBJX0lOVF9QRU5EXzEKLWlwNDoJaglpcDI3X3J0X3RpbWVyX2ludGVycnVwdAotaXA1OglqCWlwMjdfcHJvZl90aW1lcgotaXA2OglqCWlwMjdfaHViX2Vycm9yCi0KLQlFTkQoaXAyN19pcnEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDI4NTRhYzQuLjJlNjQzZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKICAqIEthbm9qIDA1LjEzLjAwCiAgKi8KIAotdm9pZCBpcDI3X2RvX2lycV9tYXNrMChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfZG9faXJxX21hc2swKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnEsIHN3bGV2ZWw7CiAJaHVicmVnX3QgcGVuZDAsIG1hc2swOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJTE9DQUxfSFVCX0woUElfSU5UX1BFTkQwKTsKIH0KIAotdm9pZCBpcDI3X2RvX2lycV9tYXNrMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfZG9faXJxX21hc2sxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnEsIHN3bGV2ZWw7CiAJaHVicmVnX3QgcGVuZDEsIG1hc2sxOwpAQCAtMTk2LDEyICsxOTYsMTIgQEAKIAlMT0NBTF9IVUJfTChQSV9JTlRfUEVORDEpOwogfQogCi12b2lkIGlwMjdfcHJvZl90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMjdfcHJvZl90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwYW5pYygiQ1BVICVkIGdvdCBhIHByb2ZpbGluZyBpbnRlcnJ1cHQiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCi12b2lkIGlwMjdfaHViX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaXAyN19odWJfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcGFuaWMoIkNQVSAlZCBnb3QgYSBodWIgZXJyb3IgaW50ZXJydXB0Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KQEAgLTQyMSw5ICs0MjEsMjYgQEAKIAlyZXR1cm4gaXJxOwogfQogCitleHRlcm4gdm9pZCBpcDI3X3J0X3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA0KQorCQlpcDI3X3J0X3RpbWVyX2ludGVycnVwdChyZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikJLyogUElfSU5UX1BFTkRfMCBvciBDQ19QRU5EX3tBfEJ9ICovCisJCWlwMjdfZG9faXJxX21hc2swKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQkvKiBQSV9JTlRfUEVORF8xICovCisJCWlwMjdfZG9faXJxX21hc2sxKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA1KQorCQlpcDI3X3Byb2ZfdGltZXIocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCisJCWlwMjdfaHViX2Vycm9yKHJlZ3MpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgaXAyN19pcnEpOwogfQogCiB2b2lkIGluc3RhbGxfaXBpKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCBjZGRmMWNlLi4zNmI2NjJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCSAgICB4dGltZS50dl9zZWMgPiBsYXN0X3J0Y191cGRhdGUgKyA2NjAgJiYKIAkgICAgKHh0aW1lLnR2X25zZWMgLyAxMDAwKSA+PSA1MDAwMDAgLSAoKHVuc2lnbmVkKSBUSUNLX1NJWkUpIC8gMiAmJgogCSAgICAoeHRpbWUudHZfbnNlYyAvIDEwMDApIDw9IDUwMDAwMCArICgodW5zaWduZWQpIFRJQ0tfU0laRSkgLyAyKSB7Ci0JCWlmIChydGNfc2V0X3RpbWUoeHRpbWUudHZfc2VjKSA9PSAwKSB7CisJCWlmIChydGNfbWlwc19zZXRfdGltZSh4dGltZS50dl9zZWMpID09IDApIHsKIAkJCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYzsKIAkJfSBlbHNlIHsKIAkJCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYyAtIDYwMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9NYWtlZmlsZQppbmRleCA0NzA4OThmLi41MzBiZjg0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJKz0gaXAzMi1iZXJyLm8gaXAzMi1pcnEubyBpcDMyLWlycS1nbHVlLm8gaXAzMi1zZXR1cC5vIGlwMzItcmVzZXQubyBcCitvYmoteQkrPSBpcDMyLWJlcnIubyBpcDMyLWlycS5vIGlwMzItc2V0dXAubyBpcDMyLXJlc2V0Lm8gXAogCSAgIGNyaW1lLm8gaXAzMi1tZW1vcnkubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEtZ2x1ZS5TIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLWdsdWUuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwOTI0ZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEtZ2x1ZS5TCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIExvdyBsZXZlbCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIFNHSSBPMiBha2EgSVAzMiBha2EgTW9vc2VoZWFkCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIEhhcmFsZCBLb2VyZmdlbgotICogQ29weXJpZ2h0IChDKSAyMDAxIEtlaXRoIE0gV2Vzb2xvd3NraQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotCQkudGV4dAotCQkuc2V0ICAgIG5vcmVvcmRlcgotCQkuc2V0ICAgIG5vYXQKLQkJLmFsaWduICA1Ci0JCU5FU1RFRChpcDMyX2hhbmRsZV9pbnQsIFBUX1NJWkUsIHJhKQotCQkuc2V0ICAgIG5vYXQKLQkJU0FWRV9BTEwKLQkJQ0xJCQkJIyBURVNUOiBpbnRlcnJ1cHRzIHNob3VsZCBiZSBvZmYKLQkJLnNldCAgICBhdAotCQkuc2V0ICAgIG5vcmVvcmRlcgotCi0JCW1mYzAJczAsQ1AwX0NBVVNFCi0KLQkJYW5kaQl0MSwgczAsIElFX0lSUTAKLQkJYm5legl0MSwgaGFuZGxlX2lycTAKLQkJIGFuZGkJdDEsIHMwLCBJRV9JUlExCi0JCWJuZXoJdDEsIGhhbmRsZV9pcnExCi0JCSBhbmRpCXQxLCBzMCwgSUVfSVJRMgotCQlibmV6CXQxLCBoYW5kbGVfaXJxMgotCQkgYW5kaQl0MSwgczAsIElFX0lSUTMKLQkJYm5legl0MSwgaGFuZGxlX2lycTMKLQkJIGFuZGkJdDEsIHMwLCBJRV9JUlE0Ci0JCWJuZXoJdDEsIGhhbmRsZV9pcnE0Ci0JCSBhbmRpCXQxLCBzMCwgSUVfSVJRNQotCQlibmV6CXQxLCBoYW5kbGVfaXJxNQotCQkgbm9wCi0KLQkJLyogRWl0aGVyIHNvbWVvbmUgaGFzIHRyaWdnZXJlZCB0aGUgInNvZnR3YXJlIGludGVycnVwdHMiCi0JCSAqIG9yIHdlIGxvc3QgYW4gaW50ZXJydXB0IHNvbWVob3cuICBJZ25vcmUgaXQuCi0JCSAqLwotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLWhhbmRsZV9pcnEwOgotCQlqYWwJaXAzMl9pcnEwCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLWhhbmRsZV9pcnExOgotCQlqYWwJaXAzMl9pcnExCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLWhhbmRsZV9pcnEyOgotCQlqYWwJaXAzMl9pcnEyCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLWhhbmRsZV9pcnEzOgotCQlqYWwJaXAzMl9pcnEzCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLWhhbmRsZV9pcnE0OgotCQlqYWwJaXAzMl9pcnE0Ci0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLWhhbmRsZV9pcnE1OgotCQlqYWwJaXAzMl9pcnE1Ci0JCW1vdmUJYTAsIHNwCi0JCWoJcmV0X2Zyb21faXJxCi0JCSBub3AKLQotCQlFTkQoaXAzMl9oYW5kbGVfaW50KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEuYwppbmRleCAyZWIyMmQ2OS4uOGJhMDgwNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTMxLDEyICszMSwxMiBAQAogLyogaXNzdWUgYSBQSU8gcmVhZCB0byBtYWtlIHN1cmUgbm8gUElPIHdyaXRlcyBhcmUgcGVuZGluZyAqLwogc3RhdGljIHZvaWQgaW5saW5lIGZsdXNoX2NyaW1lX2J1cyh2b2lkKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcganVuayA9IGNyaW1lLT5jb250cm9sOworCWNyaW1lLT5jb250cm9sOwogfQogCiBzdGF0aWMgdm9pZCBpbmxpbmUgZmx1c2hfbWFjZV9idXModm9pZCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGp1bmsgPSBtYWNlLT5wZXJpZi5jdHJsLm1pc2M7CisJbWFjZS0+cGVyaWYuY3RybC5taXNjOwogfQogCiAjdW5kZWYgREVCVUdfSVJRCkBAIC0xMzAsOCArMTMwLDYgQEAKIHN0cnVjdCBpcnFhY3Rpb24gY3B1ZXJyX2lycSA9IHsgY3JpbWVfY3B1ZXJyX2ludHIsIFNBX0lOVEVSUlVQVCwKIAkJCUNQVV9NQVNLX05PTkUsICJDUklNRSBDUFUgZXJyb3IiLCBOVUxMLCBOVUxMIH07CiAKLWV4dGVybiB2b2lkIGlwMzJfaGFuZGxlX2ludCh2b2lkKTsKLQogLyoKICAqIEZvciBpbnRlcnJ1cHRzIHdpcmVkIGZyb20gYSBzaW5nbGUgZGV2aWNlIHRvIHRoZSBDUFUuICBPbmx5IHRoZSBjbG9jawogICogdXNlcyB0aGlzIGl0IHNlZW1zLCB3aGljaCBpcyBJUlEgMCBhbmQgSVA3LgpAQCAtNTAzLDQ4ICs1MDEsNjcgQEAKIAogLyogQ1JJTUUgMS4xIGFwcGVhcnMgdG8gZGVsaXZlciBhbGwgaW50ZXJydXB0cyB0byB0aGlzIG9uZSBwaW4uICovCiAvKiBjaGFuZ2UgdGhpcyB0byBsb29wIG92ZXIgYWxsIGVkZ2UtdHJpZ2dlcmVkIGlycXMsIGV4Y2VwdGlvbiBtYXNrZWQgb3V0IG9uZXMgKi8KLXZvaWQgaXAzMl9pcnEwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgaXAzMl9pcnEwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVpbnQ2NF90IGNyaW1lX2ludDsKIAlpbnQgaXJxID0gMDsKIAogCWNyaW1lX2ludCA9IGNyaW1lLT5pc3RhdCAmIGNyaW1lX21hc2s7Ci0JaXJxID0gZmZzKGNyaW1lX2ludCk7Ci0JY3JpbWVfaW50ID0gMSA8PCAoaXJxIC0gMSk7CisJaXJxID0gX19mZnMoY3JpbWVfaW50KTsKKwljcmltZV9pbnQgPSAxIDw8IGlycTsKIAogCWlmIChjcmltZV9pbnQgJiBDUklNRV9NQUNFSVNBX0lOVF9NQVNLKSB7CiAJCXVuc2lnbmVkIGxvbmcgbWFjZV9pbnQgPSBtYWNlLT5wZXJpZi5jdHJsLmlzdGF0OwotCQlpcnEgPSBmZnMobWFjZV9pbnQgJiBtYWNlaXNhX21hc2spICsgMzI7CisJCWlycSA9IF9fZmZzKG1hY2VfaW50ICYgbWFjZWlzYV9tYXNrKSArIDMyOwogCX0KKwlpcnErKzsKIAlEQkcoIippcnEgJXUqXG4iLCBpcnEpOwogCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxMihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxMyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxMyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxNChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxNChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpcDMyX3Vua25vd25faW50ZXJydXB0KHJlZ3MpOwogfQogCi12b2lkIGlwMzJfaXJxNShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGlwMzJfaXJxNShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlsbF90aW1lcl9pbnRlcnJ1cHQoSVAzMl9SNEtfVElNRVJfSVJRLCByZWdzKTsKIH0KIAorYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpOworCisJaWYgKGxpa2VseShwZW5kaW5nICYgSUVfSVJRMCkpCisJCWlwMzJfaXJxMChyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRMSkpCisJCWlwMzJfaXJxMShyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRMikpCisJCWlwMzJfaXJxMihyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRMykpCisJCWlwMzJfaXJxMyhyZWdzKTsKKwllbHNlIGlmICh1bmxpa2VseShwZW5kaW5nICYgSUVfSVJRNCkpCisJCWlwMzJfaXJxNChyZWdzKTsKKwllbHNlIGlmIChsaWtlbHkocGVuZGluZyAmIElFX0lSUTUpKQorCQlpcDMyX2lycTUocmVncyk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwpAQCAtNTU2LDcgKzU3Myw2IEBACiAJY3JpbWUtPnNvZnRfaW50ID0gMDsKIAltYWNlLT5wZXJpZi5jdHJsLmlzdGF0ID0gMDsKIAltYWNlLT5wZXJpZi5jdHJsLmltYXNrID0gMDsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBpcDMyX2hhbmRsZV9pbnQpOwogCiAJZm9yIChpcnEgPSAwOyBpcnEgPD0gSVAzMl9JUlFfTUFYOyBpcnErKykgewogCQlod19pcnFfY29udHJvbGxlciAqY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9NYWtlZmlsZQppbmRleCA1MzhkNWE1Li43YjM2ZmYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLXkgOj0gc2V0dXAubyBpcnEubyBpcnFfaGFuZGxlci5vIHRpbWUubworb2JqLXkgOj0gc2V0dXAubyBpcnEubyB0aW1lLm8KIAogb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBzbXAubwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggOWNmN2Q3MS4uZTYxNzYwYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtMTg3LDkgKzE4Nyw2IEBACiAjZW5kaWYKIAogCi0vKiBEZWZpbmVkIGluIGFyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnFfaGFuZGxlci5TICovCi1leHRlcm4gdm9pZCBiY20xNDgwX2lycV9oYW5kbGVyKHZvaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9iY20xNDgwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNDIyLDcgKzQxOSw2IEBACiAjZW5kaWYKIAkvKiBFbmFibGUgbmVjZXNzYXJ5IElQcywgZGlzYWJsZSB0aGUgcmVzdCAqLwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBpbWFzayk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgYmNtMTQ4MF9pcnFfaGFuZGxlcik7CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCWlmIChrZ2RiX2ZsYWcpIHsKQEAgLTQ3MywzICs0NjksNzYgQEAKIH0KIAogI2VuZGlmIAkvKiBDT05GSUdfS0dEQiAqLworCitzdGF0aWMgaW5saW5lIGludCBkY2x6KHVuc2lnbmVkIGxvbmcgbG9uZyB4KQoreworCWludCBsejsKKworCV9fYXNtX18gKAorCSIJLnNldAlwdXNoCQkJCQkJXG4iCisJIgkuc2V0CW1pcHM2NAkJCQkJCVxuIgorCSIJZGNsegklMCwgJTEJCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQkJXG4iCisJOiAiPXIiIChseikKKwk6ICJyIiAoeCkpOworCisJcmV0dXJuIGx6OworfQorCitleHRlcm4gdm9pZCBiY20xNDgwX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBiY20xNDgwX21haWxib3hfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGJjbTE0ODBfa2dkYl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmc7CisKKyNpZmRlZiBDT05GSUdfU0lCWVRFX0JDTTE0ODBfUFJPRgorCS8qIFNldCBjb21wYXJlIHRvIGNvdW50IHRvIHNpbGVuY2UgY291bnQvY29tcGFyZSB0aW1lciBpbnRlcnJ1cHRzICovCisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkpOworI2VuZGlmCisKKwlwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpOworCisjaWZkZWYgQ09ORklHX1NJQllURV9CQ00xNDgwX1BST0YKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCS8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCAqLworCQlzYnByb2ZfY3B1X2ludHIoZXhjZXB0aW9uX2VwYyhyZWdzKSk7CisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJYmNtMTQ4MF90aW1lcl9pbnRlcnJ1cHQocmVncyk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQliY20xNDgwX21haWxib3hfaW50ZXJydXB0KHJlZ3MpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0dEQgorCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNikKKwkJYmNtMTQ4MF9rZ2RiX2ludGVycnVwdChyZWdzKTsJCS8qIEtHREIgKHVhcnQgMSkgKi8KKyNlbmRpZgorCisJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKSB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrX2gsIG1hc2tfbDsKKwkJdW5zaWduZWQgbG9uZyBiYXNlOworCisJCS8qCisJCSAqIERlZmF1bHQuLi53ZSd2ZSBoaXQgYW4gSVBbMl0gaW50ZXJydXB0LCB3aGljaCBtZWFucyB3ZSd2ZQorCQkgKiBnb3QgdG8gY2hlY2sgdGhlIDE0ODAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQKKwkJICogdG8gZG8uICBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0CisJCSAqIHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCisJCSAqLworCQliYXNlID0gQV9CQ00xNDgwX0lNUl9NQVBQRVIoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJbWFza19oID0gX19yYXdfcmVhZHEoCisJCQlJT0FERFIoYmFzZSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFX0gpKTsKKwkJbWFza19sID0gX19yYXdfcmVhZHEoCisJCQlJT0FERFIoYmFzZSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFX0wpKTsKKworCQlpZiAoIW1hc2tfaCkgeworCQkJaWYgKG1hc2tfaCBeIDEpCisJCQkJZG9fSVJRKDYzIC0gZGNseihtYXNrX2gpLCByZWdzKTsKKwkJCWVsc2UKKwkJCQlkb19JUlEoMTI3IC0gZGNseihtYXNrX2wpLCByZWdzKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycV9oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwOGRiODguLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycV9oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA0IEJyb2FkY29tIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoKLSAqIGJjbTE0ODBfaXJxX2hhbmRsZXIoKSBpcyB0aGUgcm91dGluZSB0aGF0IGlzIGFjdHVhbGx5IGNhbGxlZCB3aGVuIGFuCi0gKiBpbnRlcnJ1cHQgb2NjdXJzLiAgSXQgaXMgaW5zdGFsbGVkIGFzIHRoZSBleGNlcHRpb24gdmVjdG9yIGhhbmRsZXIgaW4KLSAqIGluaXRfSVJRKCkgaW4gYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCi0gKgotICogSW4gdGhlIGhhbmRsZSB3ZSBmaWd1cmUgb3V0IHdoaWNoIGludGVycnVwdHMgbmVlZCBoYW5kbGluZywgYW5kIHVzZSB0aGF0Ci0gKiB0byBjYWxsIHRoZSBkaXNwYXRjaGVyLCB3aGljaCB3aWxsIHRha2UgY2FyZSBvZiBhY3R1YWxseSBjYWxsaW5nCi0gKiByZWdpc3RlcmVkIGhhbmRsZXJzCi0gKgotICogTm90ZSB0aGF0IHdlIHRha2UgY2FyZSBvZiBhbGwgcmFpc2VkIGludGVycnVwdHMgaW4gb25lIGdvIGF0IHRoZSBoYW5kbGVyLgotICogVGhpcyBpcyBtb3JlIEJTRGlzaCB0aGFuIHRoZSBJbmR5IGNvZGUsIGFuZCBhbHNvLCBJTUhPLCBtb3JlIHNhbmUuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZGVmcy5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvYmNtMTQ4MF9yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9iY20xNDgwX2ludC5oPgotCi0vKgotICogV2hhdCBhIHBhaW4uIFdlIGhhdmUgdG8gYmUgcmVhbGx5IGNhcmVmdWwgc2F2aW5nIHRoZSB1cHBlciAzMiBiaXRzIG9mIGFueQotICogcmVnaXN0ZXIgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzIGlmIHdlIGRvbid0IHdhbnQgdGhlbSB0cmFzaGVkLS1zaW5jZSB3ZXJlCi0gKiBydW5uaW5nIGluIC1vMzIsIHRoZSBjYWxsaW5nIHJvdXRpbmcgbmV2ZXIgc2F2ZXMgdGhlIGZ1bGwgNjQgYml0cyBvZiBhCi0gKiByZWdpc3RlciBhY3Jvc3MgYSBmdW5jdGlvbiBjYWxsLiAgQmVpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSdyZQotICogZ3VhcmFudGVlZCB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkIGR1cmluZyB0aGlzIGNvZGUgc28gd2UgZG9uJ3QgaGF2ZQotICogdG8gd29ycnkgYWJvdXQgcmFuZG9tIGludGVycnVwdHMgYmxhc3RpbmcgdGhlIGhpZ2ggMzIgYml0cy4KLSAqLwotCi0JLnRleHQKLQkuc2V0CXB1c2gKLQkuc2V0CW5vcmVvcmRlcgotCS5zZXQJbm9hdAotCS5zZXQJbWlwczY0Ci0JIy5zZXQJbWlwczQKLQkuYWxpZ24JNQotCU5FU1RFRChiY20xNDgwX2lycV9oYW5kbGVyLCBQVF9TSVpFLCBzcCkKLQlTQVZFX0FMTAotCUNMSQotCi0jaWZkZWYgQ09ORklHX1NJQllURV9CQ00xNDgwX1BST0YKLQkvKiBTZXQgY29tcGFyZSB0byBjb3VudCB0byBzaWxlbmNlIGNvdW50L2NvbXBhcmUgdGltZXIgaW50ZXJydXB0cyAqLwotCW1mYzAJdDEsIENQMF9DT1VOVAotCW10YzAJdDEsIENQMF9DT01QQVJFIC8qIHBhdXNlIHRvIGNsZWFyIElQWzddIGJpdCBvZiBjYXVzZSA/ICovCi0jZW5kaWYKLQkvKiBSZWFkIGNhdXNlICovCi0JbWZjMAlzMCwgQ1AwX0NBVVNFCi0KLSNpZmRlZiBDT05GSUdfU0lCWVRFX0JDTTE0ODBfUFJPRgotCS8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbN10gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNwotCWJlcXoJdDEsIDBmCi0JIHNybAl0MSwgczAsIChDQVVTRUJfQkQtMikJLyogU2hpZnQgQkQgYml0IHRvIGJpdCAyICovCi0JYW5kCXQxLCB0MSwgMHg0CQkvKiBtYXNrIHRvIGdldCBqdXN0IEJEIGJpdCAqLwotI2lmZGVmIENPTkZJR19NSVBTNjQKLQlkbWZjMAlhMCwgQ1AwX0VQQwotCWRhZGR1CWEwLCBhMCwgdDEJCS8qIGEwID0gRVBDICsgKEJEID8gNCA6CTApICovCi0jZWxzZQotCW1mYzAJYTAsIENQMF9FUEMKLQlhZGR1CWEwLCBhMCwgdDEJCS8qIGEwID0gRVBDICsgKEJEID8gNCA6CTApICovCi0jZW5kaWYKLQlqYWwJc2Jwcm9mX2NwdV9pbnRyCi0JIG5vcAotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAotMDoKLSNlbmRpZgotCi0JLyogVGltZXIgaW50ZXJydXB0IGlzIHJvdXRlZCB0byBJUFs0XSAqLwotCWFuZGkJdDEsIHMwLCBDQVVTRUZfSVA0Ci0JYmVxegl0MSwgMWYKLQkgbm9wCi0JamFsCWJjbTE0ODBfdGltZXJfaW50ZXJydXB0Ci0JIG1vdmUJYTAsIHNwCQkJLyogUGFzcyB0aGUgcmVnaXN0ZXJzIGFsb25nICovCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCS8qIGRlbGF5IHNsb3QgICovCi0xOgotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIE1haWxib3ggaW50ZXJydXB0IGlzIHJvdXRlZCB0byBJUFszXSAqLwotCWFuZGkJIHQxLCBzMCwgQ0FVU0VGX0lQMwotCWJlcXoJIHQxLCAyZgotCSBub3AKLQlqYWwJIGJjbTE0ODBfbWFpbGJveF9pbnRlcnJ1cHQKLQkgbW92ZQkgYTAsIHNwCi0JagkgcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkvKiBkZWxheSBzbG90ICAqLwotMjoKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tHREIKLQkvKiBLR0RCICh1YXJ0IDEpIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbNl0gKi8KLQlhbmRpCSB0MSwgczAsIENBVVNFRl9JUDYKLQliZXF6CSB0MSwgM2YKLQkgbm9wCQkJCS8qIGRlbGF5IHNsb3QgICovCi0JamFsCSBiY20xNDgwX2tnZGJfaW50ZXJydXB0Ci0JIG1vdmUJIGEwLCBzcAotCWoJIHJldF9mcm9tX2lycQotCSBub3AJCQkJLyogZGVsYXkgc2xvdCAgKi8KLTM6Ci0jZW5kaWYKLQotCWFuZAkgdDEsIHMwLCBDQVVTRUZfSVAyCi0JYmVxegkgdDEsIDlmCi0JIG5vcAotCi0JLyoKLQkgKiBEZWZhdWx0Li4ud2UndmUgaGl0IGFuIElQWzJdIGludGVycnVwdCwgd2hpY2ggbWVhbnMgd2UndmUgZ290Ci0JICogdG8gY2hlY2sgdGhlIDE0ODAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG8KLQkgKiBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0IHNtcF9hZmZpbml0eSBpcwotCSAqIHN1cHBvcnRlZC4KLQkgKi8KLQlQVFJfTEEJIHYwLCBDS1NFRzEgKyBBX0JDTTE0ODBfSU1SX0NQVTBfQkFTRQotI2lmZGVmIENPTkZJR19TTVAKLQlsdwkgdDEsIFRJX0NQVSgkMjgpCi0Jc2xsCSB0MSwgdDEsIEJDTTE0ODBfSU1SX1JFR0lTVEVSX1NQQUNJTkdfU0hJRlQKLQlhZGR1CSB2MCwgdjAsIHQxCi0jZW5kaWYKLQotCS8qIFJlYWQgSVBbMl0gc3RhdHVzIChnZXQgYm90aCBoaWdoIGFuZCBsb3cgaGFsdmVzIG9mIHN0YXR1cykgKi8KLQlsZAkgczAsIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFX0godjApCi0JbGQJIHMxLCBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRV9MKHYwKQotCi0JbW92ZQkgczIsIHplcm8JLyogaW50ciBudW1iZXIgICovCi0JbGkJIHMzLCA2NAotCi0JYmVxegkgczAsIDlmCQkvKiBObyBpbnRlcnJ1cHRzLiAgUmV0dXJuLiAgKi8KLQkgbW92ZQkgYTEsIHNwCi0KLQl4b3JpCSBzNCwgczAsIDEJLyogaWYgczAgKF9IKSA9PSAxLCBpdCdzIGEgbG93IGludHIsIHNvLi4uICAqLwotCW1vdnoJIHMyLCBzMywgczQJLyogc3RhcnQgdGhlIGludHIgbnVtYmVyIGF0IDY0LCBhbmQgICovCi0JbW92egkgczAsIHMxLCBzNAkvKiBsb29rIGF0IHRoZSBsb3cgc3RhdHVzIHZhbHVlLiAgKi8KLQotCWRjbHoJIHMxLCBzMAkJLyogRmluZCB0aGUgbmV4dCBpbnRlcnJ1cHQuICAqLwotCWRzdWJ1CSBhMCwgemVybywgczEKLQlkYWRkaXUJIGEwLCBhMCwgNjMKLQlqYWwJIGRvX0lSUQotCSBkYWRkdQkgYTAsIGEwLCBzMgotCi05OglqCSByZXRfZnJvbV9pcnEKLQkgbm9wCi0KLQkuc2V0IHBvcAotCUVORChiY20xNDgwX2lycV9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZQppbmRleCBhOGFmODQ2Li5hMmZkYmQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai15IDo9IHNldHVwLm8gaXJxLm8gaXJxX2hhbmRsZXIubyB0aW1lLm8KK29iai15IDo9IHNldHVwLm8gaXJxLm8gdGltZS5vCiAKIG9iai0kKENPTkZJR19TTVApCQkJKz0gc21wLm8KIG9iai0kKENPTkZJR19TSUJZVEVfVEJQUk9GKQkJKz0gYmNtMTI1MF90YnByb2YubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwppbmRleCA1ODk1MzdiLi4wZjZlNTRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwpAQCAtMTYzLDEwICsxNjMsNiBAQAogfQogI2VuZGlmCiAKLQotLyogRGVmaW5lZCBpbiBhcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnFfaGFuZGxlci5TICovCi1leHRlcm4gdm9pZCBzYjEyNTBfaXJxX2hhbmRsZXIodm9pZCk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX3NiMTI1MF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTM3OSw3ICszNzUsNiBAQAogI2VuZGlmCiAJLyogRW5hYmxlIG5lY2Vzc2FyeSBJUHMsIGRpc2FibGUgdGhlIHJlc3QgKi8KIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgaW1hc2spOwotCXNldF9leGNlcHRfdmVjdG9yKDAsIHNiMTI1MF9pcnFfaGFuZGxlcik7CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCWlmIChrZ2RiX2ZsYWcpIHsKQEAgLTQwOSw3ICs0MDQsNyBAQAogI2RlZmluZSBkdWFydF9vdXQocmVnLCB2YWwpICAgICBjc3Jfb3V0MzIodmFsLCBJT0FERFIoQV9EVUFSVF9DSEFOUkVHKGtnZGJfcG9ydCxyZWcpKSkKICNkZWZpbmUgZHVhcnRfaW4ocmVnKSAgICAgICAgICAgY3NyX2luMzIoSU9BRERSKEFfRFVBUlRfQ0hBTlJFRyhrZ2RiX3BvcnQscmVnKSkpCiAKLXZvaWQgc2IxMjUwX2tnZGJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgc2IxMjUwX2tnZGJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qCiAJICogQ2xlYXIgYnJlYWstY2hhbmdlIHN0YXR1cyAoYWxsb3cgc29tZSB0aW1lIGZvciB0aGUgcmVtb3RlCkBAIC00MjQsMyArNDE5LDc0IEBACiB9CiAKICNlbmRpZiAJLyogQ09ORklHX0tHREIgKi8KKworc3RhdGljIGlubGluZSBpbnQgZGNseih1bnNpZ25lZCBsb25nIGxvbmcgeCkKK3sKKwlpbnQgbHo7CisKKwlfX2FzbV9fICgKKwkiCS5zZXQJcHVzaAkJCQkJCVxuIgorCSIJLnNldAltaXBzNjQJCQkJCQlcbiIKKwkiCWRjbHoJJTAsICUxCQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJCVxuIgorCTogIj1yIiAobHopCisJOiAiciIgKHgpKTsKKworCXJldHVybiBsejsKK30KKworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nOworCisjaWZkZWYgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRgorCS8qIFNldCBjb21wYXJlIHRvIGNvdW50IHRvIHNpbGVuY2UgY291bnQvY29tcGFyZSB0aW1lciBpbnRlcnJ1cHRzICovCisJd3JpdGVfYzBfY291bnQocmVhZF9jMF9jb3VudCgpKTsKKyNlbmRpZgorCisJLyoKKwkgKiBXaGF0IGEgcGFpbi4gV2UgaGF2ZSB0byBiZSByZWFsbHkgY2FyZWZ1bCBzYXZpbmcgdGhlIHVwcGVyIDMyIGJpdHMKKwkgKiBvZiBhbnkgKiByZWdpc3RlciBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgaWYgd2UgZG9uJ3Qgd2FudCB0aGVtCisJICogdHJhc2hlZC0tc2luY2Ugd2VyZSBydW5uaW5nIGluIC1vMzIsIHRoZSBjYWxsaW5nIHJvdXRpbmcgbmV2ZXIgc2F2ZXMKKwkgKiB0aGUgZnVsbCA2NCBiaXRzIG9mIGEgcmVnaXN0ZXIgYWNyb3NzIGEgZnVuY3Rpb24gY2FsbC4gIEJlaW5nIHRoZQorCSAqIGludGVycnVwdCBoYW5kbGVyLCB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKwkgKiBkdXJpbmcgdGhpcyBjb2RlIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgcmFuZG9tIGludGVycnVwdHMKKwkgKiBibGFzdGluZyB0aGUgaGlnaCAzMiBiaXRzLgorCSAqLworCisJcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKworI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpIHsgLyogQ3B1IHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0ICovCisJCXNicHJvZl9jcHVfaW50cihleGNlcHRpb25fZXBjKHJlZ3MpKTsKKwl9CisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJc2IxMjUwX3RpbWVyX2ludGVycnVwdChyZWdzKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCisJCXNiMTI1MF9tYWlsYm94X2ludGVycnVwdChyZWdzKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tHREIKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpCQkJLyogS0dEQiAodWFydCAxKSAqLworCQlzYjEyNTBfa2dkYl9pbnRlcnJ1cHQocmVncyk7CisjZW5kaWYKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgbWFzazsKKworCQkvKgorCQkgKiBEZWZhdWx0Li4ud2UndmUgaGl0IGFuIElQWzJdIGludGVycnVwdCwgd2hpY2ggbWVhbnMgd2UndmUKKwkJICogZ290IHRvIGNoZWNrIHRoZSAxMjUwIGludGVycnVwdCByZWdpc3RlcnMgdG8gZmlndXJlIG91dCB3aGF0CisJCSAqIHRvIGRvLiAgTmVlZCB0byBkZXRlY3Qgd2hpY2ggQ1BVIHdlJ3JlIG9uLCBub3cgdGhhdAorCQkgfiBzbXBfYWZmaW5pdHkgaXMgc3VwcG9ydGVkLgorCQkgKi8KKwkJbWFzayA9IF9fcmF3X3JlYWRxKElPQUREUihBX0lNUl9SRUdJU1RFUihzbXBfcHJvY2Vzc29yX2lkKCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRSkpKTsKKwkJaWYgKG1hc2spCisJCQlkb19JUlEoNjMgLSBkY2x6KG1hc2spLCByZWdzKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxX2hhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBlZGM4Zi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0vKgotICogc2IxMjUwX2hhbmRsZV9pbnQoKSBpcyB0aGUgcm91dGluZSB0aGF0IGlzIGFjdHVhbGx5IGNhbGxlZCB3aGVuIGFuIGludGVycnVwdAotICogb2NjdXJzLiAgSXQgaXMgaW5zdGFsbGVkIGFzIHRoZSBleGNlcHRpb24gdmVjdG9yIGhhbmRsZXIgaW4gYXJjaF9pbml0X2lycSgpCi0gKiBpbiBhcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwotICoKLSAqIEluIHRoZSBoYW5kbGUgd2UgZmlndXJlIG91dCB3aGljaCBpbnRlcnJ1cHRzIG5lZWQgaGFuZGxpbmcsIGFuZCB1c2UgdGhhdCB0bwotICogY2FsbCB0aGUgZGlzcGF0Y2hlciwgd2hpY2ggd2lsbCB0YWtlIGNhcmUgb2YgYWN0dWFsbHkgY2FsbGluZyByZWdpc3RlcmVkCi0gKiBoYW5kbGVycwotICoKLSAqIE5vdGUgdGhhdCB3ZSB0YWtlIGNhcmUgb2YgYWxsIHJhaXNlZCBpbnRlcnJ1cHRzIGluIG9uZSBnbyBhdCB0aGUgaGFuZGxlci4KLSAqIFRoaXMgaXMgbW9yZSBCU0Rpc2ggdGhhbiB0aGUgSW5keSBjb2RlLCBhbmQgYWxzbywgSU1ITywgbW9yZSBzYW5lLgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2RlZnMuaD4KLSNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+Ci0KLS8qCi0gKiBXaGF0IGEgcGFpbi4gV2UgaGF2ZSB0byBiZSByZWFsbHkgY2FyZWZ1bCBzYXZpbmcgdGhlIHVwcGVyIDMyIGJpdHMgb2YgYW55Ci0gKiByZWdpc3RlciBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgaWYgd2UgZG9uJ3Qgd2FudCB0aGVtIHRyYXNoZWQtLXNpbmNlIHdlcmUKLSAqIHJ1bm5pbmcgaW4gLW8zMiwgdGhlIGNhbGxpbmcgcm91dGluZyBuZXZlciBzYXZlcyB0aGUgZnVsbCA2NCBiaXRzIG9mIGEKLSAqIHJlZ2lzdGVyIGFjcm9zcyBhIGZ1bmN0aW9uIGNhbGwuICBCZWluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlJ3JlCi0gKiBndWFyYW50ZWVkIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgZHVyaW5nIHRoaXMgY29kZSBzbyB3ZSBkb24ndCBoYXZlCi0gKiB0byB3b3JyeSBhYm91dCByYW5kb20gaW50ZXJydXB0cyBibGFzdGluZyB0aGUgaGlnaCAzMiBiaXRzLgotICovCi0KLQkudGV4dAotCS5zZXQJcHVzaAotCS5zZXQJbm9yZW9yZGVyCi0JLnNldAlub2F0Ci0JLnNldAltaXBzNjQKLQkuYWxpZ24JNQotCU5FU1RFRChzYjEyNTBfaXJxX2hhbmRsZXIsIFBUX1NJWkUsIHNwKQotCVNBVkVfQUxMCi0JQ0xJCi0KLSNpZmRlZiBDT05GSUdfU0lCWVRFX1NCMTI1MF9QUk9GCi0JLyogU2V0IGNvbXBhcmUgdG8gY291bnQgdG8gc2lsZW5jZSBjb3VudC9jb21wYXJlIHRpbWVyIGludGVycnVwdHMgKi8KLQltZmMwCXQxLCBDUDBfQ09VTlQKLQltdGMwCXQxLCBDUDBfQ09NUEFSRSAvKiBwYXVzZSB0byBjbGVhciBJUFs3XSBiaXQgb2YgY2F1c2UgPyAqLwotI2VuZGlmCi0JLyogUmVhZCBjYXVzZSAqLwotCW1mYzAJczAsIENQMF9DQVVTRQotCi0jaWZkZWYgQ09ORklHX1NJQllURV9TQjEyNTBfUFJPRgotCS8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbN10gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNwotCWJlcXoJdDEsIDBmCi0JIHNybAl0MSwgczAsIChDQVVTRUJfQkQtMikgIC8qIFNoaWZ0IEJEIGJpdCB0byBiaXQgMiAqLwotCWFuZAl0MSwgdDEsIDB4NAkJLyogbWFzayB0byBnZXQganVzdCBCRCBiaXQgKi8KLQltZmMwCWEwLCBDUDBfRVBDCi0JamFsCXNicHJvZl9jcHVfaW50cgotCSBhZGR1CWEwLCBhMCwgdDEJCS8qIGEwID0gRVBDICsgKEJEID8gNCA6CTApICovCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCi0wOgotI2VuZGlmCi0KLQkvKiBUaW1lciBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzRdICovCi0JYW5kaQl0MSwgczAsIENBVVNFRl9JUDQKLQliZXF6CXQxLCAxZgotCSBub3AKLQlqYWwJc2IxMjUwX3RpbWVyX2ludGVycnVwdAotCSBtb3ZlCWEwLCBzcAkJCS8qIFBhc3MgdGhlIHJlZ2lzdGVycyBhbG9uZyAqLwotCWoJcmV0X2Zyb21faXJxCi0JIG5vcAkJCQkjIGRlbGF5IHNsb3QKLTE6Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JLyogTWFpbGJveCBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIElQWzNdICovCi0JYW5kaQkgdDEsIHMwLCBDQVVTRUZfSVAzCi0JYmVxegkgdDEsIDJmCi0JIG5vcAotCWphbAkgc2IxMjUwX21haWxib3hfaW50ZXJydXB0Ci0JIG1vdmUgICAgYTAsIHNwCi0JaglyZXRfZnJvbV9pcnEKLQkgbm9wCQkJCSMgZGVsYXkgc2xvdAotMjoKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0tHREIKLQkvKiBLR0RCICh1YXJ0IDEpIGludGVycnVwdCBpcyByb3V0ZWQgdG8gSVBbNl0gKi8KLQlhbmRpCXQxLCBzMCwgQ0FVU0VGX0lQNgotCWJlcXoJdDEsIDFmCi0Jbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsYXkgc2xvdAotCWphbAlzYjEyNTBfa2dkYl9pbnRlcnJ1cHQKLSAgICAgICAgIG1vdmUJYTAsIHNwCi0JaglyZXRfZnJvbV9pcnEKLQlub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxheSBzbG90Ci0xOgotI2VuZGlmCi0KLQlhbmQgICAgICB0MSwgczAsIENBVVNFRl9JUDIKLQliZXF6ICAgICB0MSwgNGYKLQkgbm9wCi0KLQkvKgotCSAqIERlZmF1bHQuLi53ZSd2ZSBoaXQgYW4gSVBbMl0gaW50ZXJydXB0LCB3aGljaCBtZWFucyB3ZSd2ZSBnb3QgdG8KLQkgKiBjaGVjayB0aGUgMTI1MCBpbnRlcnJ1cHQgcmVnaXN0ZXJzIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbwotCSAqIE5lZWQgdG8gZGV0ZWN0IHdoaWNoIENQVSB3ZSdyZSBvbiwgbm93IHRoYXQgc21wX2FmZmluaXR5IGlzIHN1cHBvcnRlZC4KLQkgKi8KLQlQVFJfTEEJdjAsIENLU0VHMSArIEFfSU1SX0NQVTBfQkFTRQotI2lmZGVmIENPTkZJR19TTVAKLQlsdwl0MSwgVElfQ1BVKCQyOCkKLQlzbGwJdDEsIElNUl9SRUdJU1RFUl9TUEFDSU5HX1NISUZUCi0JYWRkdQl2MCwgdDEKLSNlbmRpZgotCWxkCXMwLCBSX0lNUl9JTlRFUlJVUFRfU1RBVFVTX0JBU0UodjApCS8qIHJlYWQgSVBbMl0gc3RhdHVzICovCi0KLQliZXF6CXMwLCA0ZgkJLyogTm8gaW50ZXJydXB0cy4gIFJldHVybiAqLwotCSBtb3ZlCWExLCBzcAotCi0zOglkY2x6CXMxLCBzMAkJLyogRmluZCB0aGUgbmV4dCBpbnRlcnJ1cHQgKi8KLQlkc3VidQlhMCwgemVybywgczEKLQlkYWRkaXUJYTAsIGEwLCA2MwotCWphbAkgZG9fSVJRCi0JIG5vcAotCi00OglqICAgICAgICByZXRfZnJvbV9pcnEKLQkgbm9wCi0KLQkuc2V0IHBvcAotCUVORChzYjEyNTBfaXJxX2hhbmRsZXIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL01ha2VmaWxlIGIvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQppbmRleCAxZTU2NzZlLi45YzdlYWE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zbmkvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgU05JIHNwZWNpZmljIHBhcnQgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgCSs9IGludC1oYW5kbGVyLm8gaXJxLm8gcGNpbXRfc2NhY2hlLm8gcmVzZXQubyBzZXR1cC5vCitvYmoteQkgCSs9IGlycS5vIHBjaW10X3NjYWNoZS5vIHJlc2V0Lm8gc2V0dXAubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvc25pL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZGMwOWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3NuaS9pbnQtaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBTTkkgUk0yMDAgUENJIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk0LCA5NSwgOTYsIDk3LCA5OCwgMTk5OSwgMjAwMCwgMDEgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotI2luY2x1ZGUgPGFzbS9zbmkuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0vKgotICogVGhlIFBDSSBBU0lDIGhhcyB0aGUgbmFzdHkgcHJvcGVydHkgdGhhdCBpdCBtYXkgZGVsYXkgd3JpdGVzIGlmIGl0IGlzIGJ1c3kuCi0gKiBBcyBhIGNvbnNlcXVlbmNlIGZyb20gd3JpdGVzIHRoYXQgaGF2ZSBub3QgZ3JhZHVhdGVkIHdoZW4gd2UgZXhpdCBmcm9tIHRoZQotICogaW50ZXJydXB0IGhhbmRsZXIgd2UgbWlnaHQgY2F0Y2ggYSBzcHVyaW91cyBpbnRlcnJ1cHQuICBUbyBhdm9pZCB0aGlzIHdlCi0gKiBmb3JjZSB0aGUgUENJIEFTSUMgdG8gZ3JhZHVhdGUgYWxsIHdyaXRlcyBieSBleGVjdXRpbmcgYSByZWFkIGZyb20gdGhlCi0gKiBQQ0kgYnVzLgotICovCi0JCS5zZXQJbm9yZW9yZGVyCi0JCS5zZXQJbm9hdAotCQkuYWxpZ24JNQotCQlORVNURUQoc25pX3JtMjAwX3BjaV9oYW5kbGVfaW50LCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQkvKiBCbGlua2VuIGxpZ2h0IC4uLiAgKi8KLQkJbGIJdDAsIGxlZF9jYWNoZQotCQlhZGRpdQl0MCwgMQotCQlzYgl0MCwgbGVkX2NhY2hlCi0JCXNiCXQwLCBQQ0lNVF9DU0xFRAkJCSMgd3JpdGUgb25seSByZWdpc3RlcgotCQkuZGF0YQotbGVkX2NhY2hlOgkuYnl0ZQkwCi0JCS50ZXh0Ci0KLQkJbWZjMAl0MCwgQ1AwX1NUQVRVUwotCQltZmMwCXQxLCBDUDBfQ0FVU0UKLQkJYW5kCXQwLCB0MQotCi0JCSBhbmRpCXQxLCB0MCwgMHgwODAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMQotCQlibmV6CXQxLCBfaHdpbnQxCi0JCSBhbmRpCXQxLCB0MCwgMHg0MDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgNAotCQlibmV6CXQxLCBfaHdpbnQ0Ci0JCSBhbmRpCXQxLCB0MCwgMHgyMDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMwotCQlibmV6CXQxLCBfaHdpbnQzCi0JCSBhbmRpCXQxLCB0MCwgMHgxMDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMgotCQlibmV6CXQxLCBfaHdpbnQyCi0JCSBhbmRpCXQxLCB0MCwgMHg4MDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgNQotCQlibmV6CXQxLCBfaHdpbnQ1Ci0JCSBhbmRpCXQxLCB0MCwgMHgwNDAwCQkJIyBoYXJkd2FyZSBpbnRlcnJ1cHQgMAotCQlibmV6CXQxLCBfaHdpbnQwCi0JCSBub3AKLQotCQlqCXJlc3RvcmVfYWxsCQkJIyBzcHVyaW91cyBpbnRlcnJ1cHQKLQkJIG5vcAotCi0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLS8qIGh3aW50MCBzaG91bGQgZGVhbCB3aXRoIE1QIGFnZW50LCBBU0lDIFBDSSwgRUlTQSBOTUkgYW5kIGRlYnVnCi0gICBidXR0b24gaW50ZXJydXB0cy4gICovCi1faHdpbnQwOglqYWwJcGNpYXNpY19od2ludDAKLQkJIG1vdmUJYTAsIHNwCi0JCWoJcmV0X2Zyb21faXJxCi0JCSBub3AKLQotLyoKLSAqIGh3aW50IDEgZGVhbHMgd2l0aCBFSVNBIGFuZCBTQ1NJIGludGVycnVwdHMKLSAqLwotX2h3aW50MToJamFsCXBjaWFzaWNfaHdpbnQxCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHdhcyB1c2VkIGZvciB0aGUgY29tMSBjb25zb2xlIG9uIHRoZSBmaXJzdCBwcm90b3R5cGVzOwotICogaXQncyB1bnNlZCBvdGhlcndpc2UKLSAqLwotX2h3aW50MjoJamFsCXBjaWFzaWNfaHdpbnQyCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLS8qCi0gKiBod2ludCAzIGFyZSB0aGUgUENJIGludGVycnVwdHMgQSAtIEQKLSAqLwotX2h3aW50MzoJamFsCXBjaWFzaWNfaHdpbnQzCi0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLS8qCi0gKiBod2ludCA0IGlzIHVzZWQgZm9yIG9ubHkgdGhlIG9uYm9hcmQgUENuZXQgMzIuCi0gKi8KLV9od2ludDQ6CWphbAlwY2lhc2ljX2h3aW50NAotCQkgbW92ZQlhMCwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJIG5vcAotCi0vKiBod2ludDUgaXMgdGhlIHI0ayBjb3VudCAvIGNvbXBhcmUgaW50ZXJydXB0ICAqLwotX2h3aW50NToJamFsCXBjaWFzaWNfaHdpbnQ1Ci0JCSBtb3ZlCWEwLCBzcAotCQlqCXJldF9mcm9tX2lycQotCQkgbm9wCi0KLQkJRU5EKHNuaV9ybTIwMF9wY2lfaGFuZGxlX2ludCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvaXJxLmMgYi9hcmNoL21pcHMvc25pL2lycS5jCmluZGV4IDk1MjAzOGEuLjczNjViNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NuaS9pcnEuYwpAQCAtMTksOCArMTksNiBAQAogCiBERUZJTkVfU1BJTkxPQ0socGNpYXNpY19sb2NrKTsKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbmlfcm0yMDBfcGNpX2hhbmRsZV9pbnQodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIGVuYWJsZV9wY2lhc2ljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxIC0gUENJTVRfSVJRX0lOVDIpOwpAQCAtNzEsMjAgKzY5LDIwIEBACiAgKiBod2ludDAgc2hvdWxkIGRlYWwgd2l0aCBNUCBhZ2VudCwgQVNJQyBQQ0ksIEVJU0EgTk1JIGFuZCBkZWJ1ZwogICogYnV0dG9uIGludGVycnVwdHMuICBMYXRlciAuLi4KICAqLwotdm9pZCBwY2lhc2ljX2h3aW50MChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXBhbmljKCJSZWNlaXZlZCBpbnQwIGJ1dCBubyBoYW5kbGVyIHlldCAuLi4iKTsKIH0KIAogLyogVGhpcyBpbnRlcnJ1cHQgd2FzIHVzZWQgZm9yIHRoZSBjb20xIGNvbnNvbGUgb24gdGhlIGZpcnN0IHByb3RvdHlwZXMuICAqLwotdm9pZCBwY2lhc2ljX2h3aW50MihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIEkgdGhpbmsgdGhpcyBzaG91bGRuJ3QgaGFwcGVuIG9uIHByb2R1Y3Rpb24gbWFjaGluZXMuICAqLwogCXBhbmljKCJod2ludDIgYW5kIG5vIGhhbmRsZXIgeWV0Iik7CiB9CiAKIC8qIGh3aW50NSBpcyB0aGUgcjRrIGNvdW50IC8gY29tcGFyZSBpbnRlcnJ1cHQgICovCi12b2lkIHBjaWFzaWNfaHdpbnQ1KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcGFuaWMoImh3aW50NSBhbmQgbm8gaGFuZGxlciB5ZXQiKTsKIH0KQEAgLTEwNSw3ICsxMDMsNyBAQAogICoKICAqIFRoZSBFSVNBX0lOVCBiaXQgaW4gQ1NJVFBFTkQgaXMgaGlnaCBhY3RpdmUsIGFsbCBvdGhlcnMgYXJlIGxvdyBhY3RpdmUuCiAgKi8KLXZvaWQgcGNpYXNpY19od2ludDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50MShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1OCBwZW5kID0gKih2b2xhdGlsZSBjaGFyICopUENJTVRfQ1NJVFBFTkQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNSw3ICsxMzMsNyBAQAogLyoKICAqIGh3aW50IDMgc2hvdWxkIGRlYWwgd2l0aCB0aGUgUENJIEEgLSBEIGludGVycnVwdHMsCiAgKi8KLXZvaWQgcGNpYXNpY19od2ludDMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50MyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1OCBwZW5kID0gKih2b2xhdGlsZSBjaGFyICopUENJTVRfQ1NJVFBFTkQ7CiAJaW50IGlycTsKQEAgLTE1MCwxMyArMTQ4LDM0IEBACiAvKgogICogaHdpbnQgNCBpcyB1c2VkIGZvciBvbmx5IHRoZSBvbmJvYXJkIFBDbmV0IDMyLgogICovCi12b2lkIHBjaWFzaWNfaHdpbnQ0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY2xlYXJfYzBfc3RhdHVzKElFX0lSUTQpOwogCWRvX0lSUShQQ0lNVF9JUlFfRVRIRVJORVQsIHJlZ3MpOwogCXNldF9jMF9zdGF0dXMoSUVfSVJRNCk7CiB9CiAKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVkX2NhY2hlOworCisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFBDSU1UX0NTTEVEID0gKytsZWRfY2FjaGU7CisKKwlpZiAocGVuZGluZyAmIDB4MDgwMCkKKwkJcGNpYXNpY19od2ludDEocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4NDAwMCkKKwkJcGNpYXNpY19od2ludDQocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4MjAwMCkKKwkJcGNpYXNpY19od2ludDMocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4MTAwMCkKKwkJcGNpYXNpY19od2ludDIocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4ODAwMCkKKwkJcGNpYXNpY19od2ludDUocmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIDB4MDQwMCkKKwkJcGNpYXNpY19od2ludDAocmVncyk7Cit9CisKIHZvaWQgX19pbml0IGluaXRfcGNpYXNpYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNzYsOCArMTk1LDYgQEAKIHsKIAlpbnQgaTsKIAotCXNldF9leGNlcHRfdmVjdG9yKDAsIHNuaV9ybTIwMF9wY2lfaGFuZGxlX2ludCk7Ci0KIAlpbml0X2k4MjU5X2lycXMoKTsJCQkvKiBJbnRlZ3JhdGVkIGk4MjU5ICAqLwogCWluaXRfcGNpYXNpYygpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL01ha2VmaWxlCmluZGV4IDhmYTEyNmIuLjljYjk1MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCiAjCiAKLW9iai15CSs9IHR4NDkyN19wcm9tLm8gdHg0OTI3X3NldHVwLm8gdHg0OTI3X2lycS5vIHR4NDkyN19pcnFfaGFuZGxlci5vCitvYmoteQkrPSB0eDQ5MjdfcHJvbS5vIHR4NDkyN19zZXR1cC5vIHR4NDkyN19pcnEubwogCiBvYmotJChDT05GSUdfVE9TSElCQV9GUENJQjApCSAgICs9IHNtc2NfZmRjMzdtODF4Lm8KIG9iai0kKENPTkZJR19LR0RCKSAgICAgICAgICAgICAgICAgKz0gdHg0OTI3X2RiZ2lvLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYwppbmRleCA1YWIyZTJiLi44Y2E2ODAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X2lycS5jCkBAIC01MjUsOCArNTI1LDYgQEAKICAqLwogdm9pZCBfX2luaXQgdHg0OTI3X2lycV9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB0eDQ5MjdfaXJxX2hhbmRsZXIodm9pZCk7Ci0KIAlUWDQ5MjdfSVJRX0RQUklOVEsoVFg0OTI3X0lSUV9JTklULCAiLVxuIik7CiAKIAlUWDQ5MjdfSVJRX0RQUklOVEsoVFg0OTI3X0lSUV9JTklULCAiPUNhbGxpbmcgdHg0OTI3X2lycV9jcDBfaW5pdCgpXG4iKTsKQEAgLTUzNSwxNiArNTMzLDEyIEBACiAJVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwgIj1DYWxsaW5nIHR4NDkyN19pcnFfcGljX2luaXQoKVxuIik7CiAJdHg0OTI3X2lycV9waWNfaW5pdCgpOwogCi0JVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwKLQkJCSAgICI9Q2FsbGluZyBzZXRfZXhjZXB0X3ZlY3Rvcih0eDQ5MjdfaXJxX2hhbmRsZXIpXG4iKTsKLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCB0eDQ5MjdfaXJxX2hhbmRsZXIpOwotCiAJVFg0OTI3X0lSUV9EUFJJTlRLKFRYNDkyN19JUlFfSU5JVCwgIitcbiIpOwogCiAJcmV0dXJuOwogfQogCi1pbnQgdHg0OTI3X2lycV9uZXN0ZWQodm9pZCkKK3N0YXRpYyBpbnQgdHg0OTI3X2lycV9uZXN0ZWQodm9pZCkKIHsKIAlpbnQgc3dfaXJxID0gMDsKIAl1MzIgbGV2ZWwyOwpAQCAtNTgyLDMgKzU3NiwyNSBAQAogCiAJcmV0dXJuIChzd19pcnEpOwogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykJCQkvKiBjcHUgdGltZXIgKi8KKwkJZG9fSVJRKFRYNDkyN19JUlFfQ1BVX1RJTUVSLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpIHsJCS8qIHR4NDkyNyBwaWMgKi8KKwkJdW5zaWduZWQgaW50IGlycSA9IHR4NDkyN19pcnFfbmVzdGVkKCk7CisKKwkJaWYgKHVubGlrZWx5KGlycSA9PSAwKSkgeworCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCQkJcmV0dXJuOworCQl9CisJCWRvX0lSUShpcnEsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQkJLyogdXNlciBsaW5lIDAgKi8KKwkJZG9fSVJRKFRYNDkyN19JUlFfVVNFUjAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkJCQkvKiB1c2VyIGxpbmUgMSAqLworCQlkb19JUlEoVFg0OTI3X0lSUV9VU0VSMSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxX2hhbmRsZXIuUyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnFfaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDNjZWRhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxX2hhbmRsZXIuUwotICoKLSAqIFByaW1hcnkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHR4NDkyNyBiYXNlZCBzeXN0ZW1zCi0gKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMS0yMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS90eDQ5MjcvdHg0OTI3Lmg+Ci0KLQkJLmFsaWduCTUKLQkJTkVTVEVEKHR4NDkyN19pcnFfaGFuZGxlciwgUFRfU0laRSwgc3ApCi0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0KLQkJbWZjMAl0MCwgQ1AwX0NBVVNFCi0JCW1mYzAJdDEsIENQMF9TVEFUVVMKLQkJYW5kCXQwLCB0MQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQNwkvKiBjcHUgdGltZXIgKi8KLQkJYm5legl0MSwgbGxfaXA3Ci0KLQkJLyogSVA2Li5JUDMgbXVsdGlwbGV4ZWQgLS0gZG8gbm90IHVzZSAqLwotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMgkvKiB0eDQ5MjcgcGljICovCi0JCWJuZXoJdDEsIGxsX2lwMgotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiB1c2VyIGxpbmUgMCAqLwotCQlibmV6CXQxLCBsbF9pcDAKLQotCQlhbmRpCXQxLCB0MCwgU1RBVFVTRl9JUDEJLyogdXNlciBsaW5lIDEgKi8KLQkJYm5legl0MSwgbGxfaXAxCi0KLQkJLnNldAlyZW9yZGVyCi0KLQkJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotCQlqCXNwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJRU5EKHR4NDkyN19pcnFfaGFuZGxlcikKLQotCQkuYWxpZ24JNQotCi0KLWxsX2lwNzoKLQkJbGkJYTAsIFRYNDkyN19JUlFfQ1BVX1RJTUVSCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfaXAyOgotCQlqYWwJdHg0OTI3X2lycV9uZXN0ZWQKLQkJbm9wCi0JCWJlcXogCXYwLCBnb3RvX3NwdXJpb3VzX2ludGVycnVwdAotCQlub3AKLQkJbW92ZQlhMCwgdjAKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1nb3RvX3NwdXJpb3VzX2ludGVycnVwdDoKLQlqIHNwdXJpb3VzX2ludGVycnVwdAotCW5vcAotCi1sbF9pcDE6Ci0JCWxpCWEwLCBUWDQ5MjdfSVJRX1VTRVIxCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotbGxfaXAwOgotCQlsaQlhMCwgVFg0OTI3X0lSUV9VU0VSMAotCQltb3ZlCWExLCBzcAotCQlqYWwJZG9fSVJRCi0JCWoJcmV0X2Zyb21faXJxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL01ha2VmaWxlCmluZGV4IDc0Yzk1YzUuLjIwMzNhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL01ha2VmaWxlCkBAIC02LDYgKzYsNiBAQAogIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCiAjCiAKLW9iai15CSs9IHByb20ubyBzZXR1cC5vIGlycS5vIGlycV9oYW5kbGVyLm8gcnRjX3J4NWMzNDgubworb2JqLXkJKz0gcHJvbS5vIHNldHVwLm8gaXJxLm8gcnRjX3J4NWMzNDgubwogb2JqLSQoQ09ORklHX0tHREIpICs9IGRiZ2lvLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnEuYwppbmRleCA0ZjkwZDdmYS4uODczODA1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKQEAgLTM5MiwxMSArMzkyLDggQEAKIHZvaWQgX19pbml0CiB0eDQ5MzhfaXJxX2luaXQodm9pZCkKIHsKLQlleHRlcm4gYXNtbGlua2FnZSB2b2lkIHR4NDkzOF9pcnFfaGFuZGxlcih2b2lkKTsKLQogCXR4NDkzOF9pcnFfY3AwX2luaXQoKTsKIAl0eDQ5MzhfaXJxX3BpY19pbml0KCk7Ci0Jc2V0X2V4Y2VwdF92ZWN0b3IoMCwgdHg0OTM4X2lycV9oYW5kbGVyKTsKIAogCXJldHVybjsKIH0KQEAgLTQyMiwzICs0MTksMjEgQEAKIAl3YmZsdXNoKCk7CiAJcmV0dXJuIChzd19pcnEpOwogfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCisJaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKKwkJZG9fSVJRKFRYNDkzOF9JUlFfQ1BVX1RJTUVSLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpIHsKKwkJaW50IGlycSA9IHR4NDkzOF9pcnFfbmVzdGVkKCk7CisJCWlmIChpcnEpCisJCQlkb19JUlEoaXJxLCByZWdzKTsKKwkJZWxzZQorCQkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQorCQlkb19JUlEoVFg0OTM4X0lSUV9VU0VSMSwgcmVncyk7CisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQorCQlkb19JUlEoVFg0OTM4X0lSUV9VU0VSMCwgcmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnFfaGFuZGxlci5TIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxX2hhbmRsZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyZjcyYi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9pcnFfaGFuZGxlci5TCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL2hhbmRsZXIuUwotICoKLSAqIFByaW1hcnkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHR4NDkzOCBiYXNlZCBzeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBUb3NoaWJhIENvcnBvcmF0aW9uCi0gKgotICogMjAwMy0yMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcwotICogbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqIFN1cHBvcnQgZm9yIFRYNDkzOCBpbiAyLjYgLSBNYW5pc2ggTGFjaHdhbmkgKG1sYWNod2FuaUBtdmlzdGEuY29tKQotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vdHg0OTM4L3JidHg0OTM4Lmg+Ci0KLQotCQkuYWxpZ24JNQotCQlORVNURUQodHg0OTM4X2lycV9oYW5kbGVyLCBQVF9TSVpFLCBzcCkKLQkJU0FWRV9BTEwKLQkJQ0xJCi0JCS5zZXQJYXQKLQotCQltZmMwCXQwLCBDUDBfQ0FVU0UKLQkJbWZjMAl0MSwgQ1AwX1NUQVRVUwotCQlhbmQJdDAsIHQxCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVA3CS8qIGNwdSB0aW1lciAqLwotCQlibmV6CXQxLCBsbF9pcDcKLQotCQkvKiBJUDYuLklQMyBtdWx0aXBsZXhlZCAtLSBkbyBub3QgdXNlICovCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAyCS8qIHR4NDkzOCBwaWMgKi8KLQkJYm5legl0MSwgbGxfaXAyCi0KLQkJYW5kaQl0MSwgdDAsIFNUQVRVU0ZfSVAxCS8qIHVzZXIgbGluZSAxICovCi0JCWJuZXoJdDEsIGxsX2lwMQotCi0JCWFuZGkJdDEsIHQwLCBTVEFUVVNGX0lQMAkvKiB1c2VyIGxpbmUgMCAqLwotCQlibmV6CXQxLCBsbF9pcDAKLQotCQkuc2V0CXJlb3JkZXIKLQotCQlub3AKLQkJRU5EKHR4NDkzOF9pcnFfaGFuZGxlcikKLQotCQkuYWxpZ24JNQotCi0KLWxsX2lwNzoKLQkJbGkJYTAsIFRYNDkzOF9JUlFfQ1BVX1RJTUVSCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotCi1sbF9pcDI6Ci0JCWphbAl0eDQ5MzhfaXJxX25lc3RlZAotCQlub3AKLQkJYmVxegl2MCwgZ290b19zcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0JCW1vdmUJYTAsIHYwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKLQotZ290b19zcHVyaW91c19pbnRlcnJ1cHQ6Ci0JCWoJcmV0X2Zyb21faXJxCi0KLWxsX2lwMToKLQkJbGkJYTAsIFRYNDkzOF9JUlFfVVNFUjEKLQkJbW92ZQlhMSwgc3AKLQkJamFsCWRvX0lSUQotCQlqCXJldF9mcm9tX2lycQotCi1sbF9pcDA6Ci0JCWxpCWEwLCBUWDQ5MzhfSVJRX1VTRVIwCi0JCW1vdmUJYTEsIHNwCi0JCWphbAlkb19JUlEKLQkJaglyZXRfZnJvbV9pcnEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyBiL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZwppbmRleCBhN2FkZDE2Li4wNTVhMmNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCkBAIC00LDYgKzQsOCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIElCTV9XT1JLUEFECkBAIC0xMiw2ICsxNCw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElTQQorCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTkVDX0NNQlZSNDEzMwpAQCAtMjEsNiArMjUsOSBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBST0NLSE9QUEVSCiAJYm9vbCAiU3VwcG9ydCBmb3IgUm9ja2hvcHBlciBiYXNlYm9hcmQiCkBAIC0zNCw2ICs0MSw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAloZWxwCiAJICBUaGUgVEFOQkFDIFZSNDEzMSBtdWx0aWNoaXAgbW9kdWxlKFRCMDIyNSkgYW5kCkBAIC02NSw2ICs3NCw4IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFpBT19DQVBDRUxMQQpAQCAtNzMsNiArODQsOCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBQQ0lfVlI0MVhYCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCmluZGV4IDkwOTYzMDIuLmFhMzczOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgY29tbW9uIGNvZGUgb2YgdGhlIE5FQyBWUjQxMDAgc2VyaWVzLgogIwogCi1vYmoteQkJCQkrPSBiY3UubyBjbXUubyBpY3UubyBpbml0Lm8gaW50LWhhbmRsZXIubyBpcnEubyBwbXUubyB0eXBlLm8KK29iai15CQkJCSs9IGJjdS5vIGNtdS5vIGljdS5vIGluaXQubyBpcnEubyBwbXUubyB0eXBlLm8KIG9iai0kKENPTkZJR19WUkM0MTczKQkJKz0gdnJjNDE3My5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbnQtaGFuZGxlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjYwNDNmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIEZJTEUgTkFNRQotICoJYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW50LWhhbmRsZXIuUwotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJSW50ZXJydXB0IGRpc3BhdGNoZXIgZm9yIHRoZSBORUMgVlI0MTAwIHNlcmllcy4KLSAqCi0gKiBBdXRob3I6IFlvaWNoaSBZdWFzYQotICogICAgICAgICB5eXVhc2FAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLS8qCi0gKiBDaGFuZ2VzOgotICogIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLiA8eXl1YXNhQG12aXN0YS5jb20+IG9yIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqICAtIE5ldyBjcmVhdGlvbiwgTkVDIFZSNDEwMCBzZXJpZXMgYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Ci0gKiAgLSBDb3BlZCB3aXRoIElOVEFTU0lHTiBvZiBORUMgVlI0MTMzLgotICovCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotCi0JCS50ZXh0Ci0JCS5zZXQJbm9yZW9yZGVyCi0KLQkJLmFsaWduCTUKLQkJTkVTVEVEKHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0LCBQVF9TSVpFLCByYSkKLQkJLnNldAlub2F0Ci0JCVNBVkVfQUxMCi0JCUNMSQotCQkuc2V0CWF0Ci0JCS5zZXQJbm9yZW9yZGVyCi0KLQkJLyoKLQkJICogR2V0IHRoZSBwZW5kaW5nIGludGVycnVwdHMKLQkJICovCi0JCW1mYzAJdDAsIENQMF9DQVVTRQotCQltZmMwCXQxLCBDUDBfU1RBVFVTCi0JCWFuZGkJdDAsIDB4ZmYwMAotCQlhbmQJdDAsIHQwLCB0MQotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA3CSMgTUlQUyB0aW1lciBpbnRlcnJ1cHQKLQkJYm5legl0MSwgaGFuZGxlX2lycQotCQlsaQlhMCwgNwotCi0JCWFuZGkJdDEsIHQwLCAweDc4MDAJCSMgY2hlY2sgZm9yIEludDEtNAotCQliZXF6CXQxLCAxZgotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAzCSMgY2hlY2sgZm9yIEludDEKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgMwotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA0CSMgY2hlY2sgZm9yIEludDIKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNAotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA1CSMgY2hlY2sgZm9yIEludDMKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNQotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVA2CSMgY2hlY2sgZm9yIEludDQKLQkJYm5legl0MSwgaGFuZGxlX2ludAotCQlsaQlhMCwgNgotCi0xOgotCQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQMgkjIGNoZWNrIGZvciBJbnQwCi0JCWJuZXoJdDEsIGhhbmRsZV9pbnQKLQkJbGkJYTAsIDIKLQotCQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQMAkjIGNoZWNrIGZvciBJUDAKLQkJYm5legl0MSwgaGFuZGxlX2lycQotCQlsaQlhMCwgMAotCi0JCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAxCSMgY2hlY2sgZm9yIElQMQotCQlibmV6CXQxLCBoYW5kbGVfaXJxCi0JCWxpCWEwLCAxCi0KLQkJaglzcHVyaW91c19pbnRlcnJ1cHQKLQkJbm9wCi0KLWhhbmRsZV9pbnQ6Ci0JCWphbAlpcnFfZGlzcGF0Y2gKLQkJbW92ZQlhMSwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJbm9wCi0KLWhhbmRsZV9pcnE6Ci0JCWphbAlkb19JUlEKLQkJbW92ZQlhMSwgc3AKLQkJaglyZXRfZnJvbV9pcnEKLQkJRU5EKHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYwppbmRleCA2MWFhMjY0Li44Njc5NmJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYwpAQCAtNTksNyArNTksNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChjYXNjYWRlX2lycSk7CiAKLWFzbWxpbmthZ2Ugdm9pZCBpcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBpcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaXJxX2Nhc2NhZGVfdCAqY2FzY2FkZTsKIAlpcnFfZGVzY190ICpkZXNjOwpAQCAtODQsMTEgKzg0LDMyIEBACiAJCWRvX0lSUShpcnEsIHJlZ3MpOwogfQogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHZyNDF4eF9oYW5kbGVfaW50ZXJydXB0KHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSAmIFNUMF9JTTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJZG9fSVJRKDcsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiAweDc4MDApIHsKKwkJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQorCQkJaXJxX2Rpc3BhdGNoKDMsIHJlZ3MpOworCQllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNCkKKwkJCWlycV9kaXNwYXRjaCg0LCByZWdzKTsKKwkJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDUpCisJCQlpcnFfZGlzcGF0Y2goNSwgcmVncyk7CisJCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQorCQkJaXJxX2Rpc3BhdGNoKDYsIHJlZ3MpOworCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpCisJCWlycV9kaXNwYXRjaCgyLCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMCkKKwkJZG9fSVJRKDAsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAxKQorCQlkb19JUlEoMSwgcmVncyk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAltaXBzX2NwdV9pcnFfaW5pdChNSVBTX0NQVV9JUlFfQkFTRSk7Ci0KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCB2cjQxeHhfaGFuZGxlX2ludGVycnVwdCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAyZmRmMjE5Li45MTBmYjNhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTEzOCw2ICsxMzgsMzcgQEAKIAkgIGVuYWJsZSB0aGlzIG9wdGlvbiBvdGhlcndpc2UuIFRoZSA2NGJpdCBrZXJuZWwgaXMgc2lnbmlmaWNhbnRseSBiaWdnZXIKIAkgIGFuZCBzbG93ZXIgdGhhbiB0aGUgMzJiaXQgb25lLgogCitjaG9pY2UKKwlwcm9tcHQgIktlcm5lbCBwYWdlIHNpemUiCisJZGVmYXVsdCBQQVJJU0NfUEFHRV9TSVpFXzRLQiAgaWYgITY0QklUCisJZGVmYXVsdCBQQVJJU0NfUEFHRV9TSVpFXzRLQiAgaWYgNjRCSVQKKyMJZGVmYXVsdCBQQVJJU0NfUEFHRV9TSVpFXzE2S0IgaWYgNjRCSVQKKworY29uZmlnIFBBUklTQ19QQUdFX1NJWkVfNEtCCisJYm9vbCAiNEtCIgorCWhlbHAKKwkgIFRoaXMgbGV0cyB5b3Ugc2VsZWN0IHRoZSBwYWdlIHNpemUgb2YgdGhlIGtlcm5lbC4gIEZvciBiZXN0CisJICBwZXJmb3JtYW5jZSwgYSBwYWdlIHNpemUgb2YgMTZLQiBpcyByZWNvbW1lbmRlZC4gIEZvciBiZXN0CisJICBjb21wYXRpYmlsaXR5IHdpdGggMzJiaXQgYXBwbGljYXRpb25zLCBhIHBhZ2Ugc2l6ZSBvZiA0S0Igc2hvdWxkIGJlCisJICBzZWxlY3RlZCAodGhlIHZhc3QgbWFqb3JpdHkgb2YgMzJiaXQgYmluYXJpZXMgd29yayBwZXJmZWN0bHkgZmluZQorCSAgd2l0aCBhIGxhcmdlciBwYWdlIHNpemUpLgorCisJICA0S0IgICAgICAgICAgICAgICAgRm9yIGJlc3QgMzJiaXQgY29tcGF0aWJpbGl0eQorCSAgMTZLQiAgICAgICAgICAgICAgIEZvciBiZXN0IHBlcmZvcm1hbmNlCisJICA2NEtCICAgICAgICAgICAgICAgRm9yIGJlc3QgcGVyZm9ybWFuY2UsIG1pZ2h0IGdpdmUgbW9yZSBvdmVyaGVhZC4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbywgY2hvb3NlIDRLQi4KKworY29uZmlnIFBBUklTQ19QQUdFX1NJWkVfMTZLQgorCWJvb2wgIjE2S0IgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBQQThYMDAgJiYgRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBQQVJJU0NfUEFHRV9TSVpFXzY0S0IKKwlib29sICI2NEtCIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUEE4WDAwICYmIEVYUEVSSU1FTlRBTAorCitlbmRjaG9pY2UKKwogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtMTc3LDYgKzIwOCwxMSBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICIzIgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmh6Igogc291cmNlICJtbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvZGVmY29uZmlnCmluZGV4IDU5ZjdiYzMuLmIzOGI1OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcGE2Ci0jIFN1biBNYXIgMjYgMTk6NTA6MDcgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXBhMTAKKyMgU3VuIEFwciAgMiAxNToyNjozOCAyMDA2CiAjCiBDT05GSUdfUEFSSVNDPXkKIENPTkZJR19NTVU9eQpAQCAtMjUsNyArMjUsNyBAQAogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKQEAgLTM1LDcgKzM1LDcgQEAKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKQEAgLTU3LDcgKzU3LDEzIEBACiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CiAjCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CiAKICMKICMgQmxvY2sgbGF5ZXIKQEAgLTc5LDE2ICs4NSwxOSBAQAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKICMKLUNPTkZJR19QQTcwMDA9eQotIyBDT05GSUdfUEE3MTAwTEMgaXMgbm90IHNldAorIyBDT05GSUdfUEE3MDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQTcxMDBMQz15CiAjIENPTkZJR19QQTcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEE3MzAwTEMgaXMgbm90IHNldAogIyBDT05GSUdfUEE4WDAwIGlzIG5vdCBzZXQKIENPTkZJR19QQTExPXkKK0NPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFSSVNDX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CkBAIC0xMDgsNyArMTE3LDcgQEAKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBHU0MsIElTQSkKICMKIENPTkZJR19HU0M9eQotQ09ORklHX0hQUEI9eQorIyBDT05GSUdfSFBQQiBpcyBub3Qgc2V0CiBDT05GSUdfSU9NTVVfQ0NJTz15CiBDT05GSUdfR1NDX0xBU0k9eQogQ09ORklHX0dTQ19XQVg9eQpAQCAtMTI2LDcgKzEzNSwyNSBAQAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1lFTlRBPXkKK0NPTkZJR19ZRU5UQV9PMj15CitDT05GSUdfWUVOVEFfUklDT0g9eQorQ09ORklHX1lFTlRBX1RJPXkKK0NPTkZJR19ZRU5UQV9FTkVfVFVORT15CitDT05GSUdfWUVOVEFfVE9TSElCQT15CitDT05GSUdfUEQ2NzI5PXkKK0NPTkZJR19JODIwOTI9eQorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTE0NSw3ICsxNzIsNyBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KIAogIwogIyBOZXR3b3JraW5nCkBAIC0xNTksMTMgKzE4NiwxNSBAQAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19ORVRfS0VZPW0KIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKICMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKQEAgLTE3MywxOSArMjAyLDIwIEBACiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX0RJQUc9bQorQ09ORklHX0lORVRfVENQX0RJQUc9bQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiBDT05GSUdfSVBWNj15CiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPXkKK0NPTkZJR19JTkVUNl9FU1A9eQorQ09ORklHX0lORVQ2X0lQQ09NUD15CitDT05GSUdfSU5FVDZfVFVOTkVMPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTIwNyw3ICsyMzcsOCBAQAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCitDT05GSUdfTExDMj1tCiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKQEAgLTIzNyw5ICsyNjgsOSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjU2LDEzICsyODcsMTQgQEAKICMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CiAjCiBDT05GSUdfUEFSUE9SVD15Ci1DT05GSUdfUEFSUE9SVF9QQz15CitDT05GSUdfUEFSUE9SVF9QQz1tCiAjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX1BDX1BDTUNJQT1tCiBDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQogQ09ORklHX1BBUlBPUlRfR1NDPXkKLSMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF8xMjg0PXkKIAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKQEAgLTI4NCw3ICszMTYsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02MTQ0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtMjkyLDcgKzMyNCw2MCBAQAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCi0jIENPTkZJR19JREUgaXMgbm90IHNldAorQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKK0NPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERVNDU0k9eQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05TODc0MTU9eQorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTM3NSw2ICs0NjAsMTUgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCiAjCisjIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKKworIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwogQ09ORklHX01EPXkKQEAgLTM4MiwxMiArNDc2LDE3IEBACiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlEMTA9eQogQ09ORklHX01EX1JBSUQ1PXkKLSMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENj15CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC00MTEsMTAgKzUxMCwxMCBAQAogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQogCiAjCiAjIEFSQ25ldCBkZXZpY2VzCkBAIC00MzAsNyArNTI5LDcgQEAKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPW0KIENPTkZJR19MQVNJXzgyNTk2PXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNDUxLDYgKzU1MCw4IEBACiAjIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAogIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9YSVJUVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CkBAIC01MTgsMTQgKzYxOSwzMyBAQAogIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQogIwogIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dBVkVMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05FVFdBVkUgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMSBGcmVxdWVuY3kgSG9wcGluZyBjYXJkcyBzdXBwb3J0CisjCisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAogCiAjCiAjIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0CiAjCi0jIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorQ09ORklHX0hFUk1FUz15CisjIENPTkZJR19QTFhfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9SVEVMX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKIAogIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfSEVSTUVTPXkKK0NPTkZJR19QQ01DSUFfU1BFQ1RSVU09eQorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKKworIwogIyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKQEAgLTUzMywxMyArNjUzLDM0IEBACiBDT05GSUdfTkVUX1dJUkVMRVNTPXkKIAogIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVF9QQ01DSUE9eQorIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKKworIwogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CkBAIC01NzEsMTQgKzcxMiwxNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEX0hQX0tFWUNPREVTPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEX1JESV9LRVlDT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTg2LDUyICs3MjksMjUgQEAKICMgQ09ORklHX0tFWUJPQVJEX0hJTF9PTEQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0hJTD15CiBDT05GSUdfSU5QVVRfTU9VU0U9eQotIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9TRVJJQUw9eQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfSElMPXkKLUNPTkZJR19JTlBVVF9KT1lTVElDSz15Ci0jIENPTkZJR19KT1lTVElDS19BTkFMT0cgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfQTNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0FESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19DT0JSQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HRjJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dSSVAgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfR1JJUF9NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HVUlMTEVNT1QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfSU5URVJBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfU0lERVdJTkRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19UTURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0lGT1JDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX01BR0VMTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NQQUNFT1JCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19TVElOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1RXSURKT1kgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfREI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dBTUVDT04gaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfVFVSQk9HUkFGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19KT1lEVU1QIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFBfU0RDX1JUQz15CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKIENPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKICMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fR1NDUFMyPXkKIENPTkZJR19IUF9TREM9eQogQ09ORklHX0hJTF9NTEM9eQogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIApAQCAtNjQ4LDcgKzc2NCw4IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEzCitDT05GSUdfU0VSSUFMXzgyNTBfQ1M9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE3CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQpAQCAtNjY2LDEwICs3ODMsMTAgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLUNPTkZJR19QUklOVEVSPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0CitDT05GSUdfUFJJTlRFUj1tCiAjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKK0NPTkZJR19QUERFVj1tCiAjIENPTkZJR19USVBBUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY4Miw3ICs3OTksNyBAQAogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDX1g9eQogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02OTEsNiArODA4LDEzIEBACiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcxOCwxMCArODQyLDggQEAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCi1DT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKQEAgLTc0OSw4ICs4NzEsOCBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CkBAIC03NzgsOCArOTAwLDggQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TPTE2MAotQ09ORklHX0RVTU1ZX0NPTlNPTEVfUk9XUz02NAorQ09ORklHX0RVTU1ZX0NPTlNPTEVfQ09MVU1OUz0xMjgKK0NPTkZJR19EVU1NWV9DT05TT0xFX1JPV1M9NDgKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX1NUSV9DT05TT0xFPXkKQEAgLTgxNiwxMyArOTM4LDE0IEBACiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15CiAjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldApAQCAtODMwLDYgKzk1Myw3IEBACiAjCiAjIEdlbmVyaWMgZGV2aWNlcwogIworQ09ORklHX1NORF9PUEwzX0xJQj15CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9eQogQ09ORklHX1NORF9BQzk3X0JVUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldApAQCAtODQyLDcgKzk2Niw3IEBACiAjIFBDSSBkZXZpY2VzCiAjCiBDT05GSUdfU05EX0FEMTg4OT15Ci0jIENPTkZJR19TTkRfQUQxODg5X09QTDMgaXMgbm90IHNldAorQ09ORklHX1NORF9BRDE4ODlfT1BMMz15CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtODkwLDYgKzEwMTQsMTAgQEAKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAogCiAjCisjIFBDTUNJQSBkZXZpY2VzCisjCisKKyMKICMgR1NDIGRldmljZXMKICMKIENPTkZJR19TTkRfSEFSTU9OWT15CkBAIC05MDUsMTIgKzEwMzMsMTIgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKQEAgLTkxOCwxNCArMTA0NiwxMiBAQAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogCiAjCkBAIC05NDgsMTMgKzEwNzQsMTEgQEAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CkBAIC0xMDIwLDggKzExNDQsOCBAQAogIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CkBAIC0xMDU4LDcgKzExODIsNyBAQAogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldApAQCAtMTA2Niw3ICsxMTkwLDcgQEAKIENPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPXkKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKQEAgLTEwODEsOCArMTIwNSwxMSBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjUsNyArMTI1Miw3IEBACiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19ORlNEX1RDUD15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKQEAgLTExMzMsMTAgKzEyNjAsMTYgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExNTMsNTAgKzEyODYsNTAgQEAKICMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PXkKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX09QUk9GSUxFPW0KIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIwNCw3ICsxMzM3LDcgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE1CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CkBAIC0xMjE3LDQyICsxMzUwLDQzIEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1JPREFUQT15CisjIENPTkZJR19ERUJVR19ST0RBVEEgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC0xMjYxLDcgKzEzOTUsOSBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZTIzYzRlMS4uYzExYTViYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI4OCw4ICsyODgsMTEgQEAKIAlERUZJTkUoQVNNX1BHRF9FTlRSWV9TSVpFLCBQR0RfRU5UUllfU0laRSk7CiAJREVGSU5FKEFTTV9QTURfRU5UUllfU0laRSwgUE1EX0VOVFJZX1NJWkUpOwogCURFRklORShBU01fUFRFX0VOVFJZX1NJWkUsIFBURV9FTlRSWV9TSVpFKTsKKwlERUZJTkUoQVNNX1BGTl9QVEVfU0hJRlQsIFBGTl9QVEVfU0hJRlQpOwogCURFRklORShBU01fUFRfSU5JVElBTCwgUFRfSU5JVElBTCk7CiAJREVGSU5FKEFTTV9QQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJREVGSU5FKEFTTV9QQUdFX1NJWkVfRElWNjQsIFBBR0VfU0laRS82NCk7CisJREVGSU5FKEFTTV9QQUdFX1NJWkVfRElWMTI4LCBQQUdFX1NJWkUvMTI4KTsKIAlCTEFOSygpOwogCURFRklORShFWENEQVRBX0lQLCBvZmZzZXRvZihzdHJ1Y3QgZXhjZXB0aW9uX2RhdGEsIGZhdWx0X2lwKSk7CiAJREVGSU5FKEVYQ0RBVEFfU1BBQ0UsIG9mZnNldG9mKHN0cnVjdCBleGNlcHRpb25fZGF0YSwgZmF1bHRfc3BhY2UpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKaW5kZXggMzYwYjczOS4uYzA1N2FkNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMKQEAgLTQsNyArNCw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBIZWxnZSBEZWxsZXIgKDA3LTEzLTE5OTkpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+ICgwNy0xMy0xOTk5KQogICogQ29weXJpZ2h0IChDKSAxOTk5IFN1U0UgR21iSCBOdWVybmJlcmcKICAqIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmIChwcnVtcGZAdHV4Lm9yZykKICAqCkBAIC0zNTgsNSArMzU4LDUgQEAKIAlpZiAoIXBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQpCiAJCXBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQgPSBGTFVTSF9USFJFU0hPTEQ7CiAKLQlwcmludGsoIlNldHRpbmcgY2FjaGUgZmx1c2ggdGhyZXNob2xkIHRvICV4ICglZCBDUFVzIG9ubGluZSlcbiIsIHBhcmlzY19jYWNoZV9mbHVzaF90aHJlc2hvbGQsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIGNhY2hlIGZsdXNoIHRocmVzaG9sZCB0byAleCAoJWQgQ1BVcyBvbmxpbmUpXG4iLCBwYXJpc2NfY2FjaGVfZmx1c2hfdGhyZXNob2xkLCBudW1fb25saW5lX2NwdXMoKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDdjOTVkNzYuLmQ5ZTUzY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC01MDIsMTggKzUwMiwyMCBAQAogCSAqIGFsbCBJTFAzMiBwcm9jZXNzZXMgYW5kIGFsbCB0aGUga2VybmVsIGZvciBtYWNoaW5lcyB3aXRoCiAJICogdW5kZXIgNEdCIG9mIG1lbW9yeSkgKi8KIAkubWFjcm8JCUwzX3B0ZXAgcGdkLHB0ZSxpbmRleCx2YSxmYXVsdAorI2lmIFBUX05MRVZFTFMgPT0gMyAvKiB3ZSBtaWdodCBoYXZlIGEgMi1MZXZlbCBzY2hlbWUsIGUuZy4gd2l0aCAxNmtiIHBhZ2Ugc2l6ZSAqLwogCWV4dHJkLHUJCVx2YSw2My1BU01fUEdESVJfU0hJRlQsQVNNX0JJVFNfUEVSX1BHRCxcaW5kZXgKIAljb3B5CQklcjAsXHB0ZQotCWV4dHJkLHUsKj0JXHZhLDMxLDMyLCVyMAorCWV4dHJkLHUsKj0JXHZhLDYzLUFTTV9QR0RJUl9TSElGVCw2NC1BU01fUEdESVJfU0hJRlQsJXIwCiAJbGR3LHMJCVxpbmRleChccGdkKSxccGdkCi0JZXh0cmQsdSwqPQlcdmEsMzEsMzIsJXIwCisJZXh0cmQsdSwqPQlcdmEsNjMtQVNNX1BHRElSX1NISUZULDY0LUFTTV9QR0RJUl9TSElGVCwlcjAKIAliYiw+PSxuCQlccGdkLF9QeERfUFJFU0VOVF9CSVQsXGZhdWx0Ci0JZXh0cmQsdSwqPQlcdmEsMzEsMzIsJXIwCisJZXh0cmQsdSwqPQlcdmEsNjMtQVNNX1BHRElSX1NISUZULDY0LUFTTV9QR0RJUl9TSElGVCwlcjAKIAlzaGxkCQlccGdkLFB4RF9WQUxVRV9TSElGVCxcaW5kZXgKLQlleHRyZCx1LCo9CVx2YSwzMSwzMiwlcjAKKwlleHRyZCx1LCo9CVx2YSw2My1BU01fUEdESVJfU0hJRlQsNjQtQVNNX1BHRElSX1NISUZULCVyMAogCWNvcHkJCVxpbmRleCxccGdkCi0JZXh0cmQsdSwqPD4JXHZhLDMxLDMyLCVyMAorCWV4dHJkLHUsKjw+CVx2YSw2My1BU01fUEdESVJfU0hJRlQsNjQtQVNNX1BHRElSX1NISUZULCVyMAogCWxkbwkJQVNNX1BHRF9QTURfT0ZGU0VUKFxwZ2QpLFxwZ2QKKyNlbmRpZgogCUwyX3B0ZXAJCVxwZ2QsXHB0ZSxcaW5kZXgsXHZhLFxmYXVsdAogCS5lbmRtCiAKQEAgLTU2MywxMCArNTY1LDE4IEBACiAJZXh0cmQsdSwqPSAJXHB0ZSxfUEFHRV9HQVRFV0FZX0JJVCszMiwxLCVyMAogCWRlcGQJCSVyMCwxMSwyLFxwcm90CS8qIElmIEdhdGV3YXksIFNldCBQTDIgdG8gMCAqLwogCi0JLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpaXRsYnQgYW5kIGlkdGxidCAqLworCS8qIEVuZm9yY2UgdW5jYWNoZWFibGUgcGFnZXMuCisJICogVGhpcyBzaG91bGQgT05MWSBiZSB1c2UgZm9yIE1NSU8gb24gUEEgMi4wIG1hY2hpbmVzLgorCSAqIE1lbW9yeS9ETUEgaXMgY2FjaGUgY29oZXJlbnQgb24gYWxsIFBBMi4wIG1hY2hpbmVzIHdlIHN1cHBvcnQKKwkgKiAodGhhdCBtZWFucyBULWNsYXNzIGlzIE5PVCBzdXBwb3J0ZWQpIGFuZCB0aGUgbWVtb3J5IGNvbnRyb2xsZXJzCisJICogb24gbW9zdCBvZiB0aG9zZSBtYWNoaW5lcyBvbmx5IGhhbmRsZXMgY2FjaGUgdHJhbnNhY3Rpb25zLgorCSAqLworCWV4dHJkLHUsKj0JXHB0ZSxfUEFHRV9OT19DQUNIRV9CSVQrMzIsMSwlcjAKKwlkZXBpCQkxLDEyLDEsXHByb3QKIAotCWRlcGQJCSVyMCw2MyxQQUdFX1NISUZULFxwdGUKLQlleHRyZCxzCQlccHRlLCg2My1QQUdFX1NISUZUKSsoNjMtNTgpLDY0LVBBR0VfU0hJRlQsXHB0ZQorCS8qIERyb3AgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJ0IGFuZCBpZHRsYnQgKi8KKwlleHRyZCx1CQlccHRlLCg2My1BU01fUEZOX1BURV9TSElGVCkrKDYzLTU4KSw2NC1QQUdFX1NISUZULFxwdGUKKwlkZXBkaQkJX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxULDYzLDYzLTU4LFxwdGUKIAkuZW5kbQogCiAJLyogSWRlbnRpY2FsIG1hY3JvIHRvIG1ha2VfaW5zZXJ0X3RsYiBhYm92ZSwgZXhjZXB0IGl0CkBAIC01ODQsOSArNTk0LDggQEAKIAogCS8qIEdldCByaWQgb2YgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJhICovCiAKLQlkZXBpCQkwLDMxLFBBR0VfU0hJRlQsXHB0ZQorCWRlcGkJCV9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCwzMSxBU01fUEZOX1BURV9TSElGVCxccHRlCiAJZXh0cnUJCVxwdGUsMjQsMjUsXHB0ZQotCiAJLmVuZG0KIAogCS8qIFRoaXMgaXMgZm9yIElMUDMyIFBBMi4wIG9ubHkuICBUaGUgVExCIGluc2VydGlvbiBuZWVkcwpAQCAtMTIwMSwxMCArMTIxMCw5IEBACiAJICovCiAKIAkvKiBhZGp1c3QgaXNyL2lvci4gKi8KLQotCWV4dHJkLHUgICAgICAgICAlcjE2LDYzLDcsJXIxICAgIC8qIGdldCBoaWdoIGJpdHMgZnJvbSBpc3IgZm9yIGlvciAqLwotCWRlcGQgICAgICAgICAgICAlcjEsMzEsNywlcjE3ICAgIC8qIGRlcG9zaXQgdGhlbSBpbnRvIGlvciAqLwotCWRlcGRpICAgICAgICAgICAwLDYzLDcsJXIxNiAgICAgIC8qIGNsZWFyIHRoZW0gZnJvbSBpc3IgKi8KKwlleHRyZCx1ICAgICAgICAgJXIxNiw2MyxTUEFDRUlEX1NISUZULCVyMQkvKiBnZXQgaGlnaCBiaXRzIGZyb20gaXNyIGZvciBpb3IgKi8KKwlkZXBkICAgICAgICAgICAgJXIxLDMxLFNQQUNFSURfU0hJRlQsJXIxNwkvKiBkZXBvc2l0IHRoZW0gaW50byBpb3IgKi8KKwlkZXBkaSAgICAgICAgICAgMCw2MyxTUEFDRUlEX1NISUZULCVyMTYJCS8qIGNsZWFyIHRoZW0gZnJvbSBpc3IgKi8KICNlbmRpZgogCVNUUkVHICAgICAgICAgICAlcjE2LCBQVF9JU1IoJXIyOSkKIAlTVFJFRyAgICAgICAgICAgJXIxNywgUFRfSU9SKCVyMjkpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwppbmRleCAwYjQ3YWZjLi4zZTc5ZTYyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKQEAgLTc2LDE2ICs3NiwxNiBAQAogCW10Y3RsCQklcjQsJWNyMjQJLyogSW5pdGlhbGl6ZSBrZXJuZWwgcm9vdCBwb2ludGVyICovCiAJbXRjdGwJCSVyNCwlY3IyNQkvKiBJbml0aWFsaXplIHVzZXIgcm9vdCBwb2ludGVyICovCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZiBQVF9OTEVWRUxTID09IDMKIAkvKiBTZXQgcG1kIGluIHBnZCAqLwogCWxvYWQzMgkJUEEocG1kMCksJXI1CiAJc2hyZCAgICAgICAgICAgICVyNSxQeERfVkFMVUVfU0hJRlQsJXIzCQotICAgICAgICBsZG8gICAgICAgICAgICAgKFB4RF9GTEFHX1BSRVNFTlQrUHhEX0ZMQUdfVkFMSUQpKCVyMyksJXIzCQorCWxkbwkJKFB4RF9GTEFHX1BSRVNFTlQrUHhEX0ZMQUdfVkFMSUQpKCVyMyksJXIzCiAJc3R3CQklcjMsQVNNX1BHRF9FTlRSWSpBU01fUEdEX0VOVFJZX1NJWkUoJXI0KQogCWxkbwkJQVNNX1BNRF9FTlRSWSpBU01fUE1EX0VOVFJZX1NJWkUoJXI1KSwlcjQKICNlbHNlCiAJLyogMi1sZXZlbCBwYWdlIHRhYmxlLCBzbyBwbWQgPT0gcGdkICovCi0gICAgICAgIGxkbyAgICAgICAgICAgICBBU01fUEdEX0VOVFJZKkFTTV9QR0RfRU5UUllfU0laRSglcjQpLCVyNAorCWxkbwkJQVNNX1BHRF9FTlRSWSpBU01fUEdEX0VOVFJZX1NJWkUoJXI0KSwlcjQKICNlbmRpZgogCiAJLyogRmlsbCBpbiBwbWQgd2l0aCBlbm91Z2ggcHRlIGRpcmVjdG9yaWVzICovCkBAIC05OSw3ICs5OSw3IEBACiAJc3R3CQklcjMsMCglcjQpCiAJbGRvCQkoQVNNX1BBR0VfU0laRSA+PiBQeERfVkFMVUVfU0hJRlQpKCVyMyksJXIzCiAJYWRkaWIsPgkJLTEsJXIxLDFiCi0jaWZkZWYgQ09ORklHXzY0QklUCisjaWYgUFRfTkxFVkVMUyA9PSAzCiAJbGRvICAgICAgICAgICAgIEFTTV9QTURfRU5UUllfU0laRSglcjQpLCVyNAogI2Vsc2UKIAlsZG8gICAgICAgICAgICAgQVNNX1BHRF9FTlRSWV9TSVpFKCVyNCksJXI0CkBAIC0xMDcsMTMgKzEwNywxNCBAQAogCiAKIAkvKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUFRFcyB0aGVtc2VsdmVzICovCi0JbGRvCQlfUEFHRV9LRVJORUwoJXIwKSwlcjMgLyogSGFyZHdpcmVkIDAgcGh5cyBhZGRyIHN0YXJ0ICovCisJbGRvCQkwK19QQUdFX0tFUk5FTCglcjApLCVyMyAvKiBIYXJkd2lyZWQgMCBwaHlzIGFkZHIgc3RhcnQgKi8KKwlsZGkJCSgxPDwoS0VSTkVMX0lOSVRJQUxfT1JERVItUEFHRV9TSElGVCkpLCVyMTEgLyogUEZOIGNvdW50ICovCiAJbG9hZDMyCQlQQShwZzApLCVyMQogCiAkcGd0X2ZpbGxfbG9vcDoKIAlTVFJFR00gICAgICAgICAgJXIzLEFTTV9QVEVfRU5UUllfU0laRSglcjEpCi0JbGRvCQlBU01fUEFHRV9TSVpFKCVyMyksJXIzCi0JYmIsPj0JCSVyMywzMS1LRVJORUxfSU5JVElBTF9PUkRFUiwkcGd0X2ZpbGxfbG9vcAorCWxkbwkJKDE8PFBGTl9QVEVfU0hJRlQpKCVyMyksJXIzIC8qIGFkZCBvbmUgUEZOICovCisJYWRkaWIsPgkJLTEsJXIxMSwkcGd0X2ZpbGxfbG9vcAogCW5vcAogCiAJLyogTG9hZCB0aGUgcmV0dXJuIGFkZHJlc3MuLi5lci4uLmNyYXNoICduIGJ1cm4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCA3ZTg5OGZkLi44Mzg0YmY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2luaXRfdGFzay5jCkBAIC01MywxNyArNTMsMTcgQEAKIAlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaW5pdF90YXNrIikpKSA9CiAJCXsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CiAKLSNpZmRlZiBfX0xQNjRfXworI2lmIFBUX05MRVZFTFMgPT0gMwogLyogTk9URTogVGhpcyBsYXlvdXQgZXhhY3RseSBjb25mb3JtcyB0byB0aGUgaHlicmlkIEwyL0wzIHBhZ2UgdGFibGUgbGF5b3V0CiAgKiB3aXRoIHRoZSBmaXJzdCBwbWQgYWRqYWNlbnQgdG8gdGhlIHBnZCBhbmQgYmVsb3cgaXQuIGdjYyBkb2Vzbid0IGFjdHVhbGx5CiAgKiBndWFyYW50ZWUgdGhhdCBnbG9iYWwgb2JqZWN0cyB3aWxsIGJlIGxhaWQgb3V0IGluIG1lbW9yeSBpbiB0aGUgc2FtZSBvcmRlciAKICAqIGFzIHRoZSBvcmRlciBvZiBkZWNsYXJhdGlvbiwgc28gcHV0IHRoZXNlIGluIGRpZmZlcmVudCBzZWN0aW9ucyBhbmQgdXNlCiAgKiB0aGUgbGlua2VyIHNjcmlwdCB0byBvcmRlciB0aGVtLiAqLwotcG1kX3QgcG1kMFtQVFJTX1BFUl9QTURdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKFBBR0VfU0laRSkpKSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS52bTAucG1kIikpKSA9IHsgezB9LCB9OwotCitwbWRfdCBwbWQwW1BUUlNfUEVSX1BNRF0gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnBtZCIpLCBhbGlnbmVkKFBBR0VfU0laRSkpKTsKICNlbmRpZgotcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQUdFX1NJWkUpKSkgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnBnZCIpKSkgPSB7IHswfSwgfTsKLXB0ZV90IHBnMFtQVF9JTklUSUFMICogUFRSU19QRVJfUFRFXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQUdFX1NJWkUpKSkgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnB0ZSIpKSkgID0geyB7MH0sIH07CisKK3BnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF0gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEudm0wLnBnZCIpLCBhbGlnbmVkKFBBR0VfU0laRSkpKTsKK3B0ZV90IHBnMFtQVF9JTklUSUFMICogUFRSU19QRVJfUFRFXSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS52bTAucHRlIiksIGFsaWduZWQoUEFHRV9TSVpFKSkpOwogCiAvKgogICogSW5pdGlhbCB0YXNrIHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TCmluZGV4IDdhNGYwN2UuLmY2MDA1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUwpAQCAtNjUsNyArNjUsNyBAQAogCSAqLwogCiAJLyogcGN4dF9zc21fYnVnCS0gcmVsaWVkIHVwb24gdHJhbnNsYXRpb24hIFBBIDIuMCBBcmNoLiBGLTQgYW5kIEYtNSAqLwotCXJzbQlQU1dfU01fSSwgJXIxOQkJLyogc2F2ZSBJLWJpdCBzdGF0ZSAqLworCXJzbQkJUFNXX1NNX0ksICVyMTkJCS8qIHNhdmUgSS1iaXQgc3RhdGUgKi8KIAlsb2FkMzIJCVBBKDFmKSwgJXIxCiAJbm9wCiAJbm9wCkBAIC04NCw4ICs4NCw3IEBACiAJcmZpCiAJbm9wCiAKLTE6ICAgICAgbGRpbAkJTCVQQShjYWNoZV9pbmZvKSwgJXIxCi0JbGRvCQlSJVBBKGNhY2hlX2luZm8pKCVyMSksICVyMQorMTogICAgICBsb2FkMzIJCVBBKGNhY2hlX2luZm8pLCAlcjEKIAogCS8qIEZsdXNoIEluc3RydWN0aW9uIFRsYiAqLwogCkBAIC0yMTIsOCArMjExLDcgQEAKIAkuZW50cnkKIAogCW10c3AJCSVyMCwgJXNyMQotCWxkaWwJCUwlY2FjaGVfaW5mbywgJXIxCi0JbGRvCQlSJWNhY2hlX2luZm8oJXIxKSwgJXIxCisJbG9hZDMyCQljYWNoZV9pbmZvLCAlcjEKIAogCS8qIEZsdXNoIEluc3RydWN0aW9uIENhY2hlICovCiAKQEAgLTI1NCw4ICsyNTIsNyBAQAogCS5lbnRyeQogCiAJbXRzcAkJJXIwLCAlc3IxCi0JbGRpbAkJTCVjYWNoZV9pbmZvLCAlcjEKLQlsZG8JCVIlY2FjaGVfaW5mbyglcjEpLCAlcjEKKwlsb2FkMzIgCQljYWNoZV9pbmZvLCAlcjEKIAogCS8qIEZsdXNoIERhdGEgQ2FjaGUgKi8KIApAQCAtMzAzLDcgKzMwMCw4IEBACiAJICovCiAKIAlsZGQJCTAoJXIyNSksICVyMTkKLQlsZGkJCTMyLCAlcjEgICAgICAgICAgICAgICAgIC8qIFBBR0VfU0laRS8xMjggPT0gMzIgKi8KKwlsZGkJCUFTTV9QQUdFX1NJWkVfRElWMTI4LCAlcjEKKwogCWxkdwkJNjQoJXIyNSksICVyMAkJLyogcHJlZmV0Y2ggMSBjYWNoZWxpbmUgYWhlYWQgKi8KIAlsZHcJCTEyOCglcjI1KSwgJXIwCQkvKiBwcmVmZXRjaCAyICovCiAKQEAgLTM2OCw3ICszNjYsNyBAQAogCSAqIHVzZSBsZGQvc3RkIG9uIGEgMzIgYml0IGtlcm5lbC4KIAkgKi8KIAlsZHcJCTAoJXIyNSksICVyMTkKLQlsZGkJCTY0LCAlcjEJCS8qIFBBR0VfU0laRS82NCA9PSA2NCAqLworCWxkaQkJQVNNX1BBR0VfU0laRV9ESVY2NCwgJXIxCiAKIDE6CiAJbGR3CQk0KCVyMjUpLCAlcjIwCkBAIC00NjEsNiArNDU5LDcgQEAKIAlzdWIJCSVyMjUsICVyMSwgJXIyMwkJLyogbW92ZSBwaHlzaWNhbCBhZGRyIGludG8gbm9uIHNoYWRvd2VkIHJlZyAqLwogCiAJbGRpbAkJTCUoVE1QQUxJQVNfTUFQX1NUQVJUKSwgJXIyOAorCS8qIEZJWE1FIGZvciBkaWZmZXJlbnQgcGFnZSBzaXplcyAhPSA0ayAqLwogI2lmZGVmIENPTkZJR182NEJJVAogCWV4dHJkLHUJCSVyMjYsNTYsMzIsICVyMjYJCS8qIGNvbnZlcnQgcGh5cyBhZGRyIHRvIHRsYiBpbnNlcnQgZm9ybWF0ICovCiAJZXh0cmQsdQkJJXIyMyw1NiwzMiwgJXIyMwkJLyogY29udmVydCBwaHlzIGFkZHIgdG8gdGxiIGluc2VydCBmb3JtYXQgKi8KQEAgLTU1MSw2ICs1NTAsNyBAQAogI2lmZGVmIENPTkZJR182NEJJVAogI2lmIChUTVBBTElBU19NQVBfU1RBUlQgPj0gMHg4MDAwMDAwMCkKIAlkZXBkaQkJMCwgMzEsMzIsICVyMjgJCS8qIGNsZWFyIGFueSBzaWduIGV4dGVuc2lvbiAqLworCS8qIEZJWE1FOiBwYWdlIHNpemUgZGVwZW5kZW5kICovCiAjZW5kaWYKIAlleHRyZCx1CQklcjI2LCA1NiwzMiwgJXIyNgkvKiBjb252ZXJ0IHBoeXMgYWRkciB0byB0bGIgaW5zZXJ0IGZvcm1hdCAqLwogCWRlcGQJCSVyMjUsIDYzLDIyLCAlcjI4CS8qIEZvcm0gYWxpYXNlZCB2aXJ0dWFsIGFkZHJlc3MgJ3RvJyAqLwpAQCAtNTY2LDEwICs1NjYsMTAgQEAKIAlwZHRsYgkJMCglcjI4KQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JbGRpCQkzMiwgJXIxCQkJLyogUEFHRV9TSVpFLzEyOCA9PSAzMiAqLworCWxkaQkJQVNNX1BBR0VfU0laRV9ESVYxMjgsICVyMQogCiAJLyogUFJFRkVUQ0ggKFdyaXRlKSBoYXMgbm90ICh5ZXQpIGJlZW4gcHJvdmVuIHRvIGhlbHAgaGVyZSAqLwotLyogI2RlZmluZQlQUkVGRVRDSFdfT1AJbGRkCQkyNTYoJTApLCAlcjAgKi8KKwkvKiAjZGVmaW5lCVBSRUZFVENIV19PUAlsZGQJCTI1NiglMCksICVyMCAqLwogCiAxOglzdGQJCSVyMCwgMCglcjI4KQogCXN0ZAkJJXIwLCA4KCVyMjgpCkBAIC01OTEsOCArNTkxLDcgQEAKIAlsZG8JCTEyOCglcjI4KSwgJXIyOAogCiAjZWxzZQkvKiAhIENPTkZJR182NEJJVCAqLwotCi0JbGRpCQk2NCwgJXIxCQkJLyogUEFHRV9TSVpFLzY0ID09IDY0ICovCisJbGRpCQlBU01fUEFHRV9TSVpFX0RJVjY0LCAlcjEKIAogMToKIAlzdHcJCSVyMCwgMCglcjI4KQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCmluZGV4IDQ3Y2E1YzAuLmZjMTA3YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIEVYUE9SVF9TWU1CT0woX194Y2hnOCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYwppbmRleCBkMTVhMWQ1Li44YjVkZjk4IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMKQEAgLTIzMSw2ICsyMzEsMTQgQEAKIAkJCShsb2ZmX3QpaGlnaF9sZW4gPDwgMzIgfCBsb3dfbGVuLCBhZHZpY2UpOwogfQogCithc21saW5rYWdlIGxvbmcgcGFyaXNjX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsCisJCQl1MzIgaGlfb2ZmLCB1MzIgbG9fb2ZmLCB1MzIgaGlfbmJ5dGVzLCB1MzIgbG9fbmJ5dGVzLAorCQkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiBzeXNfc3luY19maWxlX3JhbmdlKGZkLCAobG9mZl90KWhpX29mZiA8PCAzMiB8IGxvX29mZiwKKwkJCShsb2ZmX3QpaGlfbmJ5dGVzIDw8IDMyIHwgbG9fbmJ5dGVzLCBmbGFncyk7Cit9CisKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfYWxsb2NfaHVnZXBhZ2VzKGludCBrZXksIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCBwcm90LCBpbnQgZmxhZykKIHsKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IGFmODhhZmUuLjQ3OWQ5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtNTUsNyArNTUsNyBAQAogCSAqIHBvaW50ZXJzLgogCSAqLwogCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogbGludXhfZ2F0ZXdheV9wYWdlOgogCiAgICAgICAgIC8qIEFERFJFU1MgMHgwMCB0byAweGIwID0gMTc2IGJ5dGVzIC8gNCBieXRlcyBwZXIgaW5zbiA9IDQ0IGluc25zICovCkBAIC02MzIsNyArNjMyLDcgQEAKIGVuZF9jb21wYXJlX2FuZF9zd2FwOgogCiAJLyogTWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBpcyBwbGFjZWQgb24gdGhpcyBwYWdlICovCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogCS5leHBvcnQgZW5kX2xpbnV4X2dhdGV3YXlfcGFnZQogZW5kX2xpbnV4X2dhdGV3YXlfcGFnZToKIApAQCAtNjUyLDcgKzY1Miw3IEBACiAKIAkuc2VjdGlvbiAucm9kYXRhLCJhIgogCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogCS8qIExpZ2h0LXdlaWdodC1zeXNjYWxsIHRhYmxlICovCiAJLyogU3RhcnQgb2YgbHdzIHRhYmxlLiAqLwogCS5leHBvcnQgbHdzX3RhYmxlCkBAIC02NjIsMTQgKzY2MiwxNCBAQAogCUxXU19FTlRSWShjb21wYXJlX2FuZF9zd2FwNjQpCS8qIDEgLSBFTEY2NCBBdG9taWMgY29tcGFyZSBhbmQgc3dhcCAqLwogCS8qIEVuZCBvZiBsd3MgdGFibGUgKi8KIAotCS5hbGlnbiA0MDk2CisJLmFsaWduIEFTTV9QQUdFX1NJWkUKIAkuZXhwb3J0IHN5c19jYWxsX3RhYmxlCiAuTHN5c19jYWxsX3RhYmxlOgogc3lzX2NhbGxfdGFibGU6CiAjaW5jbHVkZSAic3lzY2FsbF90YWJsZS5TIgogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JLmFsaWduIDQwOTYKKwkuYWxpZ24gQVNNX1BBR0VfU0laRQogCS5leHBvcnQgc3lzX2NhbGxfdGFibGU2NAogLkxzeXNfY2FsbF90YWJsZTY0Ogogc3lzX2NhbGxfdGFibGU2NDoKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IGJiZWViNjEuLmUyN2I0MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMTMsNyArMTMsNyBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDAxIEhlbGdlIERlbGxlciA8ZGVsbGVyIGF0IHBhcmlzYy1saW51eC5vcmc+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZCBhdCBwYXJpc2MtbGludXgub3JnPgogICogICAgQ29weXJpZ2h0IChDKSAyMDAyIFJhbmRvbHBoIENodW5nIDx0YXVzcSB3aXRoIHBhcmlzYy1saW51eC5vcmc+Ci0gKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgS3lsZSBNY01hcnRpbiA8a3lsZSBhdCBwYXJpc2MtbGludXgub3JnPgogICoKICAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzkzLDUgKzM5MywxMSBAQAogCUVOVFJZX1NBTUUocmVhZGxpbmthdCkJCS8qIDI4NSAqLwogCUVOVFJZX1NBTUUoZmNobW9kYXQpCiAJRU5UUllfU0FNRShmYWNjZXNzYXQpCisJRU5UUllfU0FNRSh1bnNoYXJlKQorCUVOVFJZX0NPTVAoc2V0X3JvYnVzdF9saXN0KQorCUVOVFJZX0NPTVAoZ2V0X3JvYnVzdF9saXN0KQkvKiAyOTAgKi8KKwlFTlRSWV9TQU1FKHNwbGljZSkKKwlFTlRSWV9PVVJTKHN5bmNfZmlsZV9yYW5nZSkKKwlFTlRSWV9TQU1FKHRlZSkKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkNjQzNmEuLjk0ZGNjMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02LDYgKzYsNyBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDAwIE1pY2hhZWwgQW5nIDxtYW5nIHdpdGggc3ViY2Fycmllci5vcmc+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDIgUmFuZG9scGggQ2h1bmcgPHRhdXNxIHdpdGggcGFyaXNjLWxpbnV4Lm9yZz4KICAqICAgIENvcHlyaWdodCAoQykgMjAwMyBKYW1lcyBCb3R0b21sZXkgPGplamIgd2l0aCBwYXJpc2MtbGludXgub3JnPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA2IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KICAqCiAgKgogICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI3LDYgKzI4LDcgQEAKIC8qIG5lZWRlZCBmb3IgdGhlIHByb2Nlc3NvciBzcGVjaWZpYyBjYWNoZSBhbGlnbm1lbnQgc2l6ZSAqLwkKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCQogLyogbGQgc2NyaXB0IHRvIG1ha2UgaHBwYSBMaW51eCBrZXJuZWwgKi8KICNpZm5kZWYgQ09ORklHXzY0QklUCkBAIC02OCw3ICs3MCw3IEBACiAgIFJPREFUQQogCiAgIC8qIHdyaXRlYWJsZSAqLwotICAuID0gQUxJR04oNDA5Nik7CQkvKiBNYWtlIHN1cmUgdGhpcyBpcyBwYWdlIGFsaWduZWQgc28KKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOwkvKiBNYWtlIHN1cmUgdGhpcyBpcyBwYWdlIGFsaWduZWQgc28KICAgCQkJCSAgIHRoYXQgd2UgY2FuIHByb3Blcmx5IGxlYXZlIHRoZXNlCiAJCQkJICAgYXMgd3JpdGFibGUgKi8KICAgZGF0YV9zdGFydCA9IC47CkBAIC04MSwyMyArODMsMTcgQEAKICAgX19zdGFydF9fX3Vud2luZCA9IC47ICAgICAgICAgLyogdW53aW5kIGluZm8gKi8KICAgLlBBUklTQy51bndpbmQgOiB7ICooLlBBUklTQy51bndpbmQpIH0KICAgX19zdG9wX19fdW53aW5kID0gLjsKLSAKKworICAvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KKyAgLiA9IEFMSUdOKDE2KTsKKyAgLmRhdGEucmVhZF9tb3N0bHkgOiB7ICooLmRhdGEucmVhZF9tb3N0bHkpIH0KKworICAuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCiAJKiguZGF0YSkKLQkqKC5kYXRhLnZtMC5wbWQpCi0JKiguZGF0YS52bTAucGdkKQotCSooLmRhdGEudm0wLnB0ZSkKIAlDT05TVFJVQ1RPUlMKIAl9CiAKLSAgLiA9IEFMSUdOKDQwOTYpOwotICAvKiBub3NhdmUgZGF0YSBpcyByZWFsbHkgb25seSB1c2VkIGZvciBzb2Z0d2FyZSBzdXNwZW5kLi4uaXQncyBoZXJlCi0gICAqIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGltcGxlbWVudCBpdCAqLwotICBfX25vc2F2ZV9iZWdpbiA9IC47Ci0gIC5kYXRhX25vc2F2ZSA6IHsgKiguZGF0YS5ub3NhdmUpIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX25vc2F2ZV9lbmQgPSAuOwotCiAgIC4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CiAKQEAgLTEwNSwxMiArMTAxLDI5IEBACiAgIC4gPSBBTElHTigxNik7CiAgIC5kYXRhLmxvY2tfYWxpZ25lZCA6IHsgKiguZGF0YS5sb2NrX2FsaWduZWQpIH0KIAotICAvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KLSAgLiA9IEFMSUdOKDE2KTsKLSAgLmRhdGEucmVhZF9tb3N0bHkgOiB7ICooLmRhdGEucmVhZF9tb3N0bHkpIH0KKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOworICAvKiBub3NhdmUgZGF0YSBpcyByZWFsbHkgb25seSB1c2VkIGZvciBzb2Z0d2FyZSBzdXNwZW5kLi4uaXQncyBoZXJlCisgICAqIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGltcGxlbWVudCBpdCAqLworICBfX25vc2F2ZV9iZWdpbiA9IC47CisgIC5kYXRhX25vc2F2ZSA6IHsgKiguZGF0YS5ub3NhdmUpIH0KKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOworICBfX25vc2F2ZV9lbmQgPSAuOwogCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCisgIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLworICAvKiBwYWdlIHRhYmxlIGVudHJpZXMgbmVlZCB0byBiZSBQQUdFX1NJWkUgYWxpZ25lZCAqLworICAuID0gQUxJR04oQVNNX1BBR0VfU0laRSk7CisgIC5kYXRhLnZtcGFnZXMgOiB7CisJKiguZGF0YS52bTAucG1kKQorCSooLmRhdGEudm0wLnBnZCkKKwkqKC5kYXRhLnZtMC5wdGUpCisJfQorICAuYnNzIDogeyAqKC5ic3MpICooQ09NTU9OKSB9CisgIF9fYnNzX3N0b3AgPSAuOworCisKKyAgLyogYXNzZW1ibGVyIGNvZGUgZXhwZWN0cyBpbml0X3Rhc2sgdG8gYmUgMTZrIGFsaWduZWQgKi8KICAgLiA9IEFMSUdOKDE2Mzg0KTsgCQkvKiBpbml0X3Rhc2sgKi8KICAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQogCkBAIC0xMjYsNiArMTM5LDcgQEAKICAgLmRsdCA6IHsgKiguZGx0KSB9CiAjZW5kaWYKIAorICAvKiByZXNlcnZlIHNwYWNlIGZvciBpbnRlcnJ1cHQgc3RhY2sgYnkgYWxpZ25pbmcgX19pbml0KiB0byAxNmsgKi8KICAgLiA9IEFMSUdOKDE2Mzg0KTsKICAgX19pbml0X2JlZ2luID0gLjsKICAgLmluaXQudGV4dCA6IHsgCkBAIC0xNjYsNyArMTgwLDcgQEAKICAgICAgZnJvbSAuYWx0aW5zdHJ1Y3Rpb25zIGFuZCAuZWhfZnJhbWUgKi8KICAgLmV4aXQudGV4dCA6IHsgKiguZXhpdC50ZXh0KSB9CiAgIC5leGl0LmRhdGEgOiB7ICooLmV4aXQuZGF0YSkgfQotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihBU01fUEFHRV9TSVpFKTsKICAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwogICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQogICBfX2luaXRyYW1mc19lbmQgPSAuOwpAQCAtMTc0LDE0ICsxODgsMTAgQEAKICAgX19wZXJfY3B1X3N0YXJ0ID0gLjsKICAgLmRhdGEucGVyY3B1ICA6IHsgKiguZGF0YS5wZXJjcHUpIH0KICAgX19wZXJfY3B1X2VuZCA9IC47Ci0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKEFTTV9QQUdFX1NJWkUpOwogICBfX2luaXRfZW5kID0gLjsKICAgLyogZnJlZWQgYWZ0ZXIgaW5pdCBlbmRzIGhlcmUgKi8KIAkKLSAgX19ic3Nfc3RhcnQgPSAuOwkJLyogQlNTICovCi0gIC5ic3MgOiB7ICooLmJzcykgKihDT01NT04pIH0KLSAgX19ic3Nfc3RvcCA9IC47IAotCiAgIF9lbmQgPSAuIDsKIAogICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMgYi9hcmNoL3BhcmlzYy9tbS9mYXVsdC5jCmluZGV4IDBhZDk0NWQuLjY0Nzg1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWJyZWFrOwogCSAgICAgIGNhc2UgVk1fRkFVTFRfU0lHQlVTOgogCQkvKgotCQkgKiBXZSBoaXQgYSBoYXJlZCBtYXBwaW5nIG91dHNpZGUgb2YgdGhlIGZpbGUsIG9yIHNvbWUKKwkJICogV2UgaGl0IGEgc2hhcmVkIG1hcHBpbmcgb3V0c2lkZSBvZiB0aGUgZmlsZSwgb3Igc29tZQogCQkgKiBvdGhlciB0aGluZyBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUgdXMgdW5hYmxlIHRvCiAJCSAqIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCAzNzk2YmU2Li42MzE3MTI1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC02LDYgKzYsNyBAQAogICogICAgY2hhbmdlZCBieSBQaGlsaXBwIFJ1bXBmCiAgKiAgQ29weXJpZ2h0IDE5OTkgUGhpbGlwcCBSdW1wZiAocHJ1bXBmQHR1eC5vcmcpCiAgKiAgQ29weXJpZ2h0IDIwMDQgUmFuZG9scGggQ2h1bmcgKHRhdXNxQGRlYmlhbi5vcmcpCisgKiAgQ29weXJpZ2h0IDIwMDYgSGVsZ2UgRGVsbGVyIChkZWxsZXJAZ214LmRlKQogICoKICAqLwogCkBAIC0zNzEsOCArMzcyLDggQEAKIAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JCisJdW5zaWduZWQgbG9uZyBhZGRyLCBpbml0X2JlZ2luLCBpbml0X2VuZDsKKwogCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICIpOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTApAQCAtMzk1LDggKzM5NiwxMSBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKICNlbmRpZgogCQotCWFkZHIgPSAodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbik7Ci0JZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgeworCS8qIGFsaWduIF9faW5pdF9iZWdpbiBhbmQgX19pbml0X2VuZCB0byBwYWdlIHNpemUsCisJICAgaWdub3JpbmcgbGlua2VyIHNjcmlwdCB3aGVyZSB3ZSBtaWdodCBoYXZlIHRyaWVkIHRvIHNhdmUgUkFNICovCisJaW5pdF9iZWdpbiA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pKTsKKwlpbml0X2VuZCAgID0gUEFHRV9BTElHTigodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpKTsKKwlmb3IgKGFkZHIgPSBpbml0X2JlZ2luOyBhZGRyIDwgaW5pdF9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlmcmVlX3BhZ2UoYWRkcik7CkBAIC00MDcsNyArNDExLDcgQEAKIAkvKiBzZXQgdXAgYSBuZXcgbGVkIHN0YXRlIG9uIHN5c3RlbXMgc2hpcHBlZCBMRUQgU3RhdGUgcGFuZWwgKi8KIAlwZGNfY2hhc3Npc19zZW5kX3N0YXR1cyhQRENfQ0hBU1NJU19ESVJFQ1RfQkNPTVBMRVRFKTsKIAkKLQlwcmludGsoIiVsdWsgZnJlZWRcbiIsICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCAtICZfX2luaXRfYmVnaW4pID4+IDEwKTsKKwlwcmludGsoIiVsdWsgZnJlZWRcbiIsIChpbml0X2VuZCAtIGluaXRfYmVnaW4pID4+IDEwKTsKIH0KIAogCkBAIC02MzksMTEgKzY0MywxMyBAQAogCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgogCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgogCQkJCSAqLworI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQogCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQKIAkJCQkJCQkmJiBhZGRyZXNzICE9IGZ2X2FkZHIKIAkJCQkJCQkmJiBhZGRyZXNzICE9IGd3X2FkZHIpCiAJCQkJICAgIHB0ZSA9IF9fbWtfcHRlKGFkZHJlc3MsIFBBR0VfS0VSTkVMX1JPKTsKIAkJCQllbHNlCisjZW5kaWYKIAkJCQkgICAgcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKIAogCQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikKQEAgLTg3NCw4ICs4ODAsNyBAQAogCQkJZmx1c2hfdGxiX2FsbCgpOyAvKiBmbHVzaF90bGJfYWxsKCkgY2FsbHMgcmVjeWNsZV9zaWRzKCkgKi8KIAkJCXNwaW5fbG9jaygmc2lkX2xvY2spOwogCQl9Ci0JCWlmIChmcmVlX3NwYWNlX2lkcyA9PSAwKQotCQkJQlVHKCk7CisJCUJVR19PTihmcmVlX3NwYWNlX2lkcyA9PSAwKTsKIAl9CiAKIAlmcmVlX3NwYWNlX2lkcy0tOwpAQCAtODk5LDggKzkwNCw3IEBACiAKIAlzcGluX2xvY2soJnNpZF9sb2NrKTsKIAotCWlmICgqZGlydHlfc3BhY2Vfb2Zmc2V0ICYgKDFMIDw8IGluZGV4KSkKLQkgICAgQlVHKCk7IC8qIGF0dGVtcHQgdG8gZnJlZSBzcGFjZSBpZCB0d2ljZSAqLworCUJVR19PTigqZGlydHlfc3BhY2Vfb2Zmc2V0ICYgKDFMIDw8IGluZGV4KSk7IC8qIGF0dGVtcHQgdG8gZnJlZSBzcGFjZSBpZCB0d2ljZSAqLwogCiAJKmRpcnR5X3NwYWNlX29mZnNldCB8PSAoMUwgPDwgaW5kZXgpOwogCWRpcnR5X3NwYWNlX2lkcysrOwpAQCAtOTc1LDcgKzk3OSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY3ljbGVfbmRpcnR5Owogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVjeWNsZV9kaXJ0eV9hcnJheVtTSURfQVJSQVlfU0laRV07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJlY3ljbGVfaW51c2UgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCByZWN5Y2xlX2ludXNlOwogCiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKIHsKQEAgLTk4NCw5ICs5ODgsNyBAQAogCWRvX3JlY3ljbGUgPSAwOwogCXNwaW5fbG9jaygmc2lkX2xvY2spOwogCWlmIChkaXJ0eV9zcGFjZV9pZHMgPiBSRUNZQ0xFX1RIUkVTSE9MRCkgewotCSAgICBpZiAocmVjeWNsZV9pbnVzZSkgewotCQlCVUcoKTsgIC8qIEZJWE1FOiBVc2UgYSBzZW1hcGhvcmUvd2FpdCBxdWV1ZSBoZXJlICovCi0JICAgIH0KKwkgICAgQlVHX09OKHJlY3ljbGVfaW51c2UpOyAgLyogRklYTUU6IFVzZSBhIHNlbWFwaG9yZS93YWl0IHF1ZXVlIGhlcmUgKi8KIAkgICAgZ2V0X2RpcnR5X3NpZHMoJnJlY3ljbGVfbmRpcnR5LHJlY3ljbGVfZGlydHlfYXJyYXkpOwogCSAgICByZWN5Y2xlX2ludXNlKys7CiAJICAgIGRvX3JlY3ljbGUrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYyBiL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYwppbmRleCAwZGIxMjgxLi4yNzM4NDU2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW9yZW1hcC5jCkBAIC0yLDcgKzIsNyBAQAogICogYXJjaC9wYXJpc2MvbW0vaW9yZW1hcC5jCiAgKgogICogKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMjAwMSBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNiBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CiAgKiAoQykgQ29weXJpZ2h0IDIwMDUgS3lsZSBNY01hcnRpbiA8a3lsZUBwYXJpc2MtbGludXgub3JnPgogICovCiAKQEAgLTEzOCw2ICsxMzgsNyBAQAogCWlmICgocGh5c19hZGRyID49IDB4MDAwODAwMDAgJiYgZW5kIDwgMHgwMDBmZmZmZikgfHwKIAkgICAgKHBoeXNfYWRkciA+PSAweDAwNTAwMDAwICYmIGVuZCA8IDB4MDNiZmZmZmYpKSB7CiAJCXBoeXNfYWRkciB8PSBGX0VYVEVORCgweGZjMDAwMDAwKTsKKwkJZmxhZ3MgfD0gX1BBR0VfTk9fQ0FDSEU7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMmNkYzM1Yy4uNjcyOWM5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTM2Niw2ICszNjYsNyBAQAogCXNlbGVjdCBVM19EQVJUCiAJc2VsZWN0IE1QSUNfQlJPS0VOX1UzCiAJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCisJc2VsZWN0IFBQQ185NzBfTkFQCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBQUENfUFJFUApAQCAtMzgzLDYgKzM4NCw3IEBACiAJc2VsZWN0IE1QSUNfQlJPS0VOX1UzCiAJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IFBQQ185NzBfTkFQCiAJZGVmYXVsdCBuCiAJaGVscAogICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcGxlIDk3MEZYIEV2YWx1YXRpb24gQm9hcmQuCkBAIC00NTcsNiArNDU5LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgbgogCitjb25maWcgUFBDXzk3MF9OQVAKKwlib29sCisJZGVmYXVsdCBuCisKIHNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCiAKIGNvbmZpZyBDUFVfRlJFUV9QTUFDCkBAIC02NDksNiArNjU1LDExIEBACiAJZGVwZW5kcyBvbiBQUEM2NAogCWRlZmF1bHQgeSBpZiBTTVAgJiYgUFBDX1BTRVJJRVMKIAorY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiNCIKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKwogY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBQQzY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggNmVjODRkMy4uZWQ1YjI2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTA0LDYgKzEwNCwxMCBAQAogQ0ZMQUdTCQkrPSAtbXN0cmluZwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfNnh4KSx5KQorQ0ZMQUdTCQkrPSAtbWNwdT1wb3dlcnBjCitlbmRpZgorCiBjcHUtYXMtJChDT05GSUdfUFBDNjRCUklER0UpCSs9IC1XYSwtbXBwYzY0YnJpZGdlCiBjcHUtYXMtJChDT05GSUdfNHh4KQkJKz0gLVdhLC1tNDA1CiBjcHUtYXMtJChDT05GSUdfNnh4KQkJKz0gLVdhLC1tYWx0aXZlYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCBmZTIyZTU0Li5kYmU0MjFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CkBAIC01NSw2ICs1Niw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKQEAgLTY5LDEwICs3MSw2IEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTg0LDcgKzgyLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKQEAgLTkzLDYgKzkwLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEyNiw2ICsxMjQsNyBAQAogQ09ORklHX01NSU9fTlZSQU09eQogQ09ORklHX0NFTExfSUlDPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAogCkBAIC0xNjcsNyArMTY2LDYgQEAKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CkBAIC0xODQsNyArMTgyLDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMjYsNiArMjIzLDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yNDIsNiArMjQwLDcgQEAKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQpAQCAtNjMyLDYgKzYzMSw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzE3LDcgKzcxNyw2IEBACiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTczNiw5ICs3MzUsNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNzY2LDEwICs3NjMsNiBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTgxOCw2ICs4MTEsMTkgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogQ09ORklHX0lORklOSUJBTkQ9eQpAQCAtODM0LDYgKzg0MCwxMSBAQAogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg4OSw3ICs5MDAsNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IDJjM2ZkMjAuLmE0NTYyNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIEZyaSBGZWIgMTAgMTc6MzM6MDggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQorIyBXZWQgQXByIDE5IDEzOjI0OjM3IDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtOSw2ICs5LDcgQEAKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00CiAKQEAgLTUzLDYgKzU1LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldApAQCAtNjcsMTAgKzcwLDYgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtODIsNyArODEsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC05MSw2ICs4OSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xODUsNyArMTg0LDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMjcsNiArMjI1LDcgQEAKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVRfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQpAQCAtMjM4LDYgKzIzNyw4IEBACiAjCiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTI2MSw2ICsyNjIsNyBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIAogIwpAQCAtNTEzLDYgKzUxNSw3IEBACiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9eQorIyBDT05GSUdfTURfUkFJRDVfUkVTSEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KQEAgLTc2MSw3ICs3NjQsNiBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTc3Miw2ICs3NzQsNyBAQAogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKIENPTkZJR19BR1A9bQorIyBDT05GSUdfQUdQX1ZJQSBpcyBub3Qgc2V0CiBDT05GSUdfQUdQX1VOSU5PUlRIPW0KICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CkBAIC04MTMsNyArODE2LDYgQEAKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtODMyLDkgKzgzNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC04NjIsMTAgKzg2Miw2IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODc0LDYgKzg3MCw3IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04ODMsNiArODgwLDcgQEAKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogQ09ORklHX0ZCX01BQ01PREVTPXkKK0NPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldApAQCAtOTAxLDcgKzg5OSw2IEBACiBDT05GSUdfRkJfTlZJRElBX0kyQz15CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9SQURFT049eQogQ09ORklHX0ZCX1JBREVPTl9JMkM9eQogIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk1OCw5ICs5NTUsMTEgQEAKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogCkBAIC05NzcsNiArOTc2LDcgQEAKICMgUENJIGRldmljZXMKICMKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKQEAgLTEwMDksNiArMTAwOSw3IEBACiAjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CkBAIC0xMDQxLDYgKzEwNDIsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEwNjgsNyArMTA3MCw2IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPXkKIApAQCAtMTEyNiwxNSArMTEyNyw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiBDT05GSUdfVVNCX0NBVEM9bQpAQCAtMTE5NCw2ICsxMTg2LDcgQEAKIENPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQogQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCkBAIC0xMjM3LDE3ICsxMjMwLDIzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIyBSZWFsIFRpbWUgQ2xvY2sKICMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMzE5LDcgKzEzMTgsNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwppbmRleCAxODE2YTQ2Li5hOTVlNDU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzYKLSMgV2VkIE1hciAxNSAxNjoxOTo1MiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFdlZCBBcHIgMTkgMTE6NDY6NDQgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MzIKIApAQCAtNTUsNiArNTcsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CkBAIC02OSwxMCArNzIsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC04NCw3ICs4Myw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTkzLDYgKzkxLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE2NSw3ICsxNjQsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIwNyw2ICsyMDUsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yMTgsNiArMjE3LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjM2LDExICsyMzcsMTQgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQEAgLTI2MiwyMCArMjY2LDE5IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQpAQCAtNDc5LDYgKzQ4Miw3IEBACiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCiBDT05GSUdfTURfUkFJRDU9eQorIyBDT05GSUdfTURfUkFJRDVfUkVTSEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KQEAgLTcwMiw3ICs3MDYsNiBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTc1MSwxMCArNzU0LDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03NzksNiArNzc4LDcgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk2LDYgKzc5NiwxMSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkBAIC04MDUsNiArODEwLDExIEBACiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODc4LDcgKzg4OCw2IEBACiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBkYWFmMDM4Li41OGU2OGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgRnJpIEZlYiAxMCAxNzozMzozMiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFdlZCBBcHIgMTkgMTE6NDg6MDAgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC05LDYgKzksNyBAQAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTEyOAogCkBAIC01NSw2ICs1Nyw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0NQVVNFVFM9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CkBAIC02OSwxMCArNzIsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC04NCw3ICs4Myw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTkzLDYgKzkxLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE4OCw3ICsxODcsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIzNSw2ICsyMzMsNyBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0yNDYsNiArMjQ1LDggQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjcyLDYgKzI3Myw3IEBACiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogCiAjCkBAIC01MTksNiArNTIxLDcgQEAKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT15CisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQpAQCAtNzUwLDYgKzc1Myw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzY3LDcgKzc3MSw5IEBACiAjIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKK0NPTkZJR19IVkNfRFJJVkVSPXkKIENPTkZJR19IVkNfQ09OU09MRT15CisjIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0CiBDT05GSUdfSFZDUz1tCiAKICMKQEAgLTc3OSw3ICs3ODUsNiBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTgzMCw3ICs4MzUsNiBAQAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CkBAIC04NDksOSArODUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTg3OSwxMCArODgxLDYgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC04OTEsNiArODg5LDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkwMCw2ICs4OTksNyBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiBDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CkBAIC05MTksNyArOTE5LDYgQEAKIENPTkZJR19GQl9NQVRST1hfRz15CiAjIENPTkZJR19GQl9NQVRST1hfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9PTEQgaXMgbm90IHNldAogQ09ORklHX0ZCX1JBREVPTj15CiBDT05GSUdfRkJfUkFERU9OX0kyQz15CiAjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldApAQCAtOTY4LDYgKzk2Nyw3IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTA0OCwxNSArMTA0OCw2IEBACiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAogCiAjCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC0xMTA5LDYgKzExMDAsMTEgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKIENPTkZJR19JTkZJTklCQU5EPW0KQEAgLTExMjEsMTIgKzExMTcsMTMgQEAKICMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIyBSZWFsIFRpbWUgQ2xvY2sKICMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMjAyLDcgKzExOTksNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMGNjMDk5NS4uODAzODU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBACiAJCQkJICAgZmlybXdhcmUubyBzeXNmcy5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vIHZlY3Rvci5vCi1vYmotJChDT05GSUdfUE9XRVI0KQkJKz0gaWRsZV9wb3dlcjQubworb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCiBvYmotJChDT05GSUdfUFBDX09GKQkJKz0gb2ZfZGV2aWNlLm8gcHJvbV9wYXJzZS5vCiBwcm9jZnMtJChDT05GSUdfUFBDNjQpCQk6PSBwcm9jX3BwYzY0Lm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gJChwcm9jZnMteSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1NGI0OGYzLi44Zjg1YzVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC05MSw2ICs5MSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIAlERUZJTkUoVElfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKKwlERUZJTkUoVElfTE9DQUxfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgbG9jYWxfZmxhZ3MpKTsKIAlERUZJTkUoVElfUFJFRU1QVCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSk7CiAJREVGSU5FKFRJX1RBU0ssIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdGFzaykpOwogI2lmZGVmIENPTkZJR19QUEMzMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDM5ZTM0OGEuLjNmNzE4MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTU3LDYgKzU3LDggQEAKIAkJCQkgUFBDX0ZFQVRVUkVfU01UIHwgUFBDX0ZFQVRVUkVfSUNBQ0hFX1NOT09QKQogI2RlZmluZSBDT01NT05fVVNFUl9QT1dFUjVfUExVUwkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjVfUExVU3xcCiAJCQkJIFBQQ19GRUFUVVJFX1NNVCB8IFBQQ19GRUFUVVJFX0lDQUNIRV9TTk9PUCkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI2CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX0FSQ0hfMl8wNSB8XAorCQkJCSBQUENfRkVBVFVSRV9TTVQgfCBQUENfRkVBVFVSRV9JQ0FDSEVfU05PT1ApCiAjZGVmaW5lIENPTU1PTl9VU0VSX0JPT0tFCShQUENfRkVBVFVSRV8zMiB8IFBQQ19GRUFUVVJFX0hBU19NTVUgfCBcCiAJCQkJIFBQQ19GRUFUVVJFX0JPT0tFKQogCkBAIC0yNjMsNiArMjY1LDIwIEBACiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI1KyIsCiAJfSwKKwl7CS8qIFBvd2VyNiAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwM2UwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBPV0VSNiIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI2LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjYsCisJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAorCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKKwkJLm51bV9wbWNzCQk9IDYsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI0LAorCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcG93ZXI2IiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKKwkJLnBsYXRmb3JtCQk9ICJwb3dlcjYiLAorCX0sCiAJewkvKiBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCiAJCS5wdnJfdmFsdWUJCT0gMHgwMDcwMDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwppbmRleCBiM2E5Nzk0Li44ODY2ZmQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCkBAIC0xMjgsMzcgKzEyOCwzNiBAQAogCXN0dwlyMTIsNChyMTEpCiAjZW5kaWYKIAliCTNmCisKIDI6CS8qIGlmIGZyb20ga2VybmVsLCBjaGVjayBpbnRlcnJ1cHRlZCBET1pFL05BUCBtb2RlIGFuZAogICAgICAgICAgKiBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cKICAgICAgICAgICovCisJbHd6CXI5LFRIUkVBRF9JTkZPLVRIUkVBRChyMTIpCisJY21wbHcJcjEscjkJCQkvKiBpZiByMSA8PSBjdXJyZW50LT50aHJlYWRfaW5mbyAqLworCWJsZS0Jc3RhY2tfb3ZmCQkvKiB0aGVuIHRoZSBrZXJuZWwgc3RhY2sgb3ZlcmZsb3dlZCAqLworNToKICNpZmRlZiBDT05GSUdfNnh4Ci0JbWZzcHIJcjExLFNQUk5fSElEMAotCW10Y3IJcjExCi1CRUdJTl9GVFJfU0VDVElPTgotCWJ0LQk4LDRmCQkJLyogQ2hlY2sgRE9aRSAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX0RPWkUpCi1CRUdJTl9GVFJfU0VDVElPTgotCWJ0LQk5LDRmCQkJLyogQ2hlY2sgTkFQICovCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DQU5fTkFQKQorCXRvcGh5cyhyOSxyOSkJCQkvKiBjaGVjayBsb2NhbCBmbGFncyAqLworCWx3eglyMTIsVElfTE9DQUxfRkxBR1MocjkpCisJbXRjcmYJMHgwMSxyMTIKKwlidC0JMzEtVExGX05BUFBJTkcsNGYKICNlbmRpZiAvKiBDT05GSUdfNnh4ICovCiAJLmdsb2JsIHRyYW5zZmVyX3RvX2hhbmRsZXJfY29udAogdHJhbnNmZXJfdG9faGFuZGxlcl9jb250OgotCWx3eglyMTEsVEhSRUFEX0lORk8tVEhSRUFEKHIxMikKLQljbXBsdwlyMSxyMTEJCQkvKiBpZiByMSA8PSBjdXJyZW50LT50aHJlYWRfaW5mbyAqLwotCWJsZS0Jc3RhY2tfb3ZmCQkvKiB0aGVuIHRoZSBrZXJuZWwgc3RhY2sgb3ZlcmZsb3dlZCAqLwogMzoKIAltZmxyCXI5CiAJbHd6CXIxMSwwKHI5KQkJLyogdmlydHVhbCBhZGRyZXNzIG9mIGhhbmRsZXIgKi8KIAlsd3oJcjksNChyOSkJCS8qIHdoZXJlIHRvIGdvIHdoZW4gZG9uZSAqLwotCUZJWF9TUlIxKHIxMCxyMTIpCiAJbXRzcHIJU1BSTl9TUlIwLHIxMQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAltdGxyCXI5CiAJU1lOQwogCVJGSQkJCQkvKiBqdW1wIHRvIGhhbmRsZXIsIGVuYWJsZSBNTVUgKi8KIAotI2lmZGVmIENPTkZJR182eHgJCi00OgliCXBvd2VyX3NhdmVfNnh4X3Jlc3RvcmUKKyNpZmRlZiBDT05GSUdfNnh4Cis0OglybHdpbm0JcjEyLHIxMiwwLH5fVExGX05BUFBJTkcKKwlzdHcJcjEyLFRJX0xPQ0FMX0ZMQUdTKHI5KQorCWIJcG93ZXJfc2F2ZV82eHhfcmVzdG9yZQogI2VuZGlmCiAKIC8qCkBAIC0xNjcsMTAgKzE2NiwxMCBAQAogICovCiBzdGFja19vdmY6CiAJLyogc29tZXRpbWVzIHdlIHVzZSBhIHN0YXRpY2FsbHktYWxsb2NhdGVkIHN0YWNrLCB3aGljaCBpcyBPSy4gKi8KLQlsaXMJcjExLF9lbmRAaAotCW9yaQlyMTEscjExLF9lbmRAbAotCWNtcGx3CXIxLHIxMQotCWJsZQkzYgkJCS8qIHIxIDw9ICZfZW5kIGlzIE9LICovCisJbGlzCXIxMixfZW5kQGgKKwlvcmkJcjEyLHIxMixfZW5kQGwKKwljbXBsdwlyMSxyMTIKKwlibGUJNWIJCQkvKiByMSA8PSAmX2VuZCBpcyBPSyAqLwogCVNBVkVfTlZHUFJTKHIxMSkKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJbGlzCXIxLGluaXRfdGhyZWFkX3VuaW9uQGhhCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGE1YWUwNGEuLmI3ZDE0MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0zNzYsMTEgKzM3NiwyOCBAQAogCWJsCWhkbHI7CQkJCQlcCiAJYgkucmV0X2Zyb21fZXhjZXB0CiAKKy8qCisgKiBMaWtlIFNURF9FWENFUFRJT05fQ09NTU9OLCBidXQgZm9yIGV4Y2VwdGlvbnMgdGhhdCBjYW4gb2NjdXIKKyAqIGluIHRoZSBpZGxlIHRhc2sgYW5kIHRoZXJlZm9yZSBuZWVkIHRoZSBzcGVjaWFsIGlkbGUgaGFuZGxpbmcuCisgKi8KKyNkZWZpbmUgU1REX0VYQ0VQVElPTl9DT01NT05fSURMRSh0cmFwLCBsYWJlbCwgaGRscikJXAorCS5hbGlnbgk3OwkJCQkJXAorCS5nbG9ibCBsYWJlbCMjX2NvbW1vbjsJCQkJXAorbGFiZWwjI19jb21tb246CQkJCQkJXAorCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKHRyYXAsIFBBQ0FfRVhHRU4pOwlcCisJRklOSVNIX05BUDsJCQkJCVwKKwlESVNBQkxFX0lOVFM7CQkJCQlcCisJYmwJLnNhdmVfbnZncHJzOwkJCQlcCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCVwKKwlibAloZGxyOwkJCQkJXAorCWIJLnJldF9mcm9tX2V4Y2VwdAorCiAjZGVmaW5lIFNURF9FWENFUFRJT05fQ09NTU9OX0xJVEUodHJhcCwgbGFiZWwsIGhkbHIpCVwKIAkuYWxpZ24JNzsJCQkJCVwKIAkuZ2xvYmwgbGFiZWwjI19jb21tb247CQkJCVwKIGxhYmVsIyNfY29tbW9uOgkJCQkJCVwKIAlFWENFUFRJT05fUFJPTE9HX0NPTU1PTih0cmFwLCBQQUNBX0VYR0VOKTsJXAorCUZJTklTSF9OQVA7CQkJCQlcCiAJRElTQUJMRV9JTlRTOwkJCQkJXAogCWJsCS5wcGM2NF9ydW5sYXRjaF9vbjsJCQlcCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCVwKQEAgLTM4OCw2ICs0MDUsMjUgQEAKIAliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQogCiAvKgorICogV2hlbiB0aGUgaWRsZSBjb2RlIGluIHBvd2VyNF9pZGxlIHB1dHMgdGhlIENQVSBpbnRvIE5BUCBtb2RlLAorICogaXQgaGFzIHRvIGRvIHNvIGluIGEgbG9vcCwgYW5kIHJlbGllcyBvbiB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0CisgKiBhbmQgZGVjcmVtZW50ZXIgaW50ZXJydXB0IGVudHJ5IGNvZGUgdG8gZ2V0IGl0IG91dCBvZiB0aGUgbG9vcC4KKyAqIEl0IHNldHMgdGhlIF9UTEZfTkFQUElORyBiaXQgaW4gY3VycmVudF90aHJlYWRfaW5mbygpLT5sb2NhbF9mbGFncworICogdG8gc2lnbmFsIHRoYXQgaXQgaXMgaW4gdGhlIGxvb3AgYW5kIG5lZWRzIGhlbHAgdG8gZ2V0IG91dC4KKyAqLworI2lmZGVmIENPTkZJR19QUENfOTcwX05BUAorI2RlZmluZSBGSU5JU0hfTkFQCQkJCVwKK0JFR0lOX0ZUUl9TRUNUSU9OCQkJCVwKKwljbHJyZGkJcjExLHIxLFRIUkVBRF9TSElGVDsJCVwKKwlsZAlyOSxUSV9MT0NBTF9GTEFHUyhyMTEpOwkJXAorCWFuZGkuCXIxMCxyOSxfVExGX05BUFBJTkc7CQlcCisJYm5lbAlwb3dlcjRfZml4dXBfbmFwOwkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX05BUCkKKyNlbHNlCisjZGVmaW5lIEZJTklTSF9OQVAKKyNlbmRpZgorCisvKgogICogU3RhcnQgb2YgcFNlcmllcyBzeXN0ZW0gaW50ZXJydXB0IHJvdXRpbmVzCiAgKi8KIAkuID0gMHgxMDAKQEAgLTc3Miw2ICs4MDgsNyBAQAogCS5nbG9ibCBtYWNoaW5lX2NoZWNrX2NvbW1vbgogbWFjaGluZV9jaGVja19jb21tb246CiAJRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHgyMDAsIFBBQ0FfRVhNQykKKwlGSU5JU0hfTkFQCiAJRElTQUJMRV9JTlRTCiAJYmwJLnNhdmVfbnZncHJzCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRApAQCAtNzgzLDcgKzgyMCw3IEBACiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHhiMDAsIHRyYXBfMGIsIC51bmtub3duX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweGQwMCwgc2luZ2xlX3N0ZXAsIC5zaW5nbGVfc3RlcF9leGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHhlMDAsIHRyYXBfMGUsIC51bmtub3duX2V4Y2VwdGlvbikKLQlTVERfRVhDRVBUSU9OX0NPTU1PTigweGYwMCwgcGVyZm9ybWFuY2VfbW9uaXRvciwgLnBlcmZvcm1hbmNlX21vbml0b3JfZXhjZXB0aW9uKQorCVNURF9FWENFUFRJT05fQ09NTU9OX0lETEUoMHhmMDAsIHBlcmZvcm1hbmNlX21vbml0b3IsIC5wZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweDEzMDAsIGluc3RydWN0aW9uX2JyZWFrcG9pbnQsIC5pbnN0cnVjdGlvbl9icmVha3BvaW50X2V4Y2VwdGlvbikKICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4MTcwMCwgYWx0aXZlY19hc3Npc3QsIC5hbHRpdmVjX2Fzc2lzdF9leGNlcHRpb24pCkBAIC0xMDM0LDYgKzEwNzEsNyBAQAogCS5nbG9ibCBoYXJkd2FyZV9pbnRlcnJ1cHRfZW50cnkKIGhhcmR3YXJlX2ludGVycnVwdF9jb21tb246CiAJRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHg1MDAsIFBBQ0FfRVhHRU4pCisJRklOSVNIX05BUAogaGFyZHdhcmVfaW50ZXJydXB0X2VudHJ5OgogCURJU0FCTEVfSU5UUwogCWJsCS5wcGM2NF9ydW5sYXRjaF9vbgpAQCAtMTA0MSw2ICsxMDc5LDE1IEBACiAJYmwJLmRvX0lSUQogCWIJLnJldF9mcm9tX2V4Y2VwdF9saXRlCiAKKyNpZmRlZiBDT05GSUdfUFBDXzk3MF9OQVAKK3Bvd2VyNF9maXh1cF9uYXA6CisJYW5kYwlyOSxyOSxyMTAKKwlzdGQJcjksVElfTE9DQUxfRkxBR1MocjExKQorCWxkCXIxMCxfTElOSyhyMSkJCS8qIG1ha2UgaWRsZSB0YXNrIGRvIHRoZSAqLworCXN0ZAlyMTAsX05JUChyMSkJCS8qIGVxdWl2YWxlbnQgb2YgYSBibHIgKi8KKwlibHIKKyNlbmRpZgorCiAJLmFsaWduCTcKIAkuZ2xvYmwgYWxpZ25tZW50X2NvbW1vbgogYWxpZ25tZW50X2NvbW1vbjoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlLmMKaW5kZXggZTlmMzIxZC4uZDQ5MTA1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlLmMKQEAgLTUwLDkgKzUwLDkgQEAKIAogCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCXdoaWxlICgxKSB7Ci0JCXBwYzY0X3J1bmxhdGNoX29mZigpOwotCiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkgJiYgIWNwdV9zaG91bGRfZGllKCkpIHsKKwkJCXBwYzY0X3J1bmxhdGNoX29mZigpOworCiAJCQlpZiAocHBjX21kLnBvd2VyX3NhdmUpIHsKIAkJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCQkJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfNnh4LlMKaW5kZXggMTJhNGVmYi4uYjQ1ZmEwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlXzZ4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV82eHguUwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLSN1bmRlZiBERUJVRwotCiAJLnRleHQKIAogLyoKQEAgLTEwOSwxMiArMTA3LDYgQEAKIAlkY2JmCTAscjQKIAlkY2JmCTAscjQKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX05BUF9ESVNBQkxFX0wyX1BSKQotI2lmZGVmIERFQlVHCi0JbGlzCXI2LG5hcF9lbnRlcl9jb3VudEBoYQotCWx3eglyNCxuYXBfZW50ZXJfY291bnRAbChyNikKLQlhZGRpCXI0LHI0LDEKLQlzdHcJcjQsbmFwX2VudGVyX2NvdW50QGwocjYpCi0jZW5kaWYJCiAyOgogQkVHSU5fRlRSX1NFQ1RJT04KIAkvKiBHbyB0byBsb3cgc3BlZWQgbW9kZSBvbiBzb21lIDc1MEZYICovCkBAIC0xNDQsNDggKzEzNiw0MiBAQAogCURTU0FMTAogCXN5bmMKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FMVElWRUMpCisJcmx3aW5tCXI5LHIxLDAsMCwzMS1USFJFQURfU0hJRlQJLyogY3VycmVudCB0aHJlYWRfaW5mbyAqLworCWx3eglyOCxUSV9MT0NBTF9GTEFHUyhyOSkJLyogc2V0IG5hcHBpbmcgYml0ICovCisJb3JpCXI4LHI4LF9UTEZfTkFQUElORwkvKiBzbyB3aGVuIHdlIHRha2UgYW4gZXhjZXB0aW9uICovCisJc3R3CXI4LFRJX0xPQ0FMX0ZMQUdTKHI5KQkvKiBpdCB3aWxsIHJldHVybiB0byBvdXIgY2FsbGVyICovCiAJbWZtc3IJcjcKIAlvcmkJcjcscjcsTVNSX0VFCiAJb3JpcwlyNyxyNyxNU1JfUE9XQGgKLQlzeW5jCi0JaXN5bmMKKzE6CXN5bmMKIAltdG1zcglyNwogCWlzeW5jCi0Jc3luYwotCWJscgotCQorCWIJMWIKKwogLyoKICAqIFJldHVybiBmcm9tIE5BUC9ET1pFIG1vZGUsIHJlc3RvcmUgc29tZSBDUFUgc3BlY2lmaWMgcmVnaXN0ZXJzLAogICogd2UgYXJlIGNhbGxlZCB3aXRoIERSL0lSIHN0aWxsIG9mZiBhbmQgcjIgY29udGFpbmluZyBwaHlzaWNhbAotICogYWRkcmVzcyBvZiBjdXJyZW50LgorICogYWRkcmVzcyBvZiBjdXJyZW50LiAgUjExIHBvaW50cyB0byB0aGUgZXhjZXB0aW9uIGZyYW1lIChwaHlzaWNhbAorICogYWRkcmVzcykuICBXZSBoYXZlIHRvIHByZXNlcnZlIHIxMC4KICAqLwogX0dMT0JBTChwb3dlcl9zYXZlXzZ4eF9yZXN0b3JlKQotCW1mc3ByCXIxMSxTUFJOX0hJRDAKLQlybHdpbm0uCXIxMSxyMTEsMCwxMCw4CS8qIENsZWFyIE5BUCAmIGNvcHkgTkFQIGJpdCAhc3RhdGUgdG8gY3IxIEVRICovCi0JY3Jvcgk0KmNyMStlcSw0KmNyMCtlcSw0KmNyMCtlcQotQkVHSU5fRlRSX1NFQ1RJT04KLQlybHdpbm0JcjExLHIxMSwwLDksNwkvKiBDbGVhciBET1pFICovCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DQU5fRE9aRSkKLQltdHNwcglTUFJOX0hJRDAsIHIxMQorCWx3eglyOSxfTElOSyhyMTEpCQkvKiBpbnRlcnJ1cHRlZCBpbiBwcGM2eHhfaWRsZTogKi8KKwlzdHcJcjksX05JUChyMTEpCQkvKiBtYWtlIGl0IGRvIGEgYmxyICovCiAKLSNpZmRlZiBERUJVRwotCWJlcQljcjEsMWYKLQlsaXMJcjExLChuYXBfcmV0dXJuX2NvdW50LUtFUk5FTEJBU0UpQGhhCi0JbHd6CXI5LG5hcF9yZXR1cm5fY291bnRAbChyMTEpCi0JYWRkaQlyOSxyOSwxCi0Jc3R3CXI5LG5hcF9yZXR1cm5fY291bnRAbChyMTEpCi0xOgotI2VuZGlmCi0JCi0Jcmx3aW5tCXI5LHIxLDAsMCwxOAotCXRvcGh5cyhyOSxyOSkKLQlsd3oJcjExLFRJX0NQVShyOSkKKyNpZmRlZiBDT05GSUdfU01QCisJbWZzcHIJcjEyLFNQUk5fU1BSRzMKKwlsd3oJcjExLFRJX0NQVShyMTIpCQkvKiBnZXQgY3B1IG51bWJlciAqIDQgKi8KIAlzbHdpCXIxMSxyMTEsMgorI2Vsc2UKKwlsaQlyMTEsMAorI2VuZGlmCiAJLyogVG9kbyBtYWtlIHN1cmUgYWxsIHRoZXNlIGFyZSBpbiB0aGUgc2FtZSBwYWdlCi0JICogYW5kIGxvYWQgcjIyIChAaGEgcGFydCArIENQVSBvZmZzZXQpIG9ubHkgb25jZQorCSAqIGFuZCBsb2FkIHIxMSAoQGhhIHBhcnQgKyBDUFUgb2Zmc2V0KSBvbmx5IG9uY2UKIAkgKi8KIEJFR0lOX0ZUUl9TRUNUSU9OCi0JYmVxCWNyMSwxZgorCW1mc3ByCXI5LFNQUk5fSElEMAorCWFuZGlzLglyOSxyOSxISUQwX05BUEBoCisJYmVxCTFmCiAJYWRkaXMJcjkscjExLChuYXBfc2F2ZV9tc3NjcjAtS0VSTkVMQkFTRSlAaGEKIAlsd3oJcjksbmFwX3NhdmVfbXNzY3IwQGwocjkpCiAJbXRzcHIJU1BSTl9NU1NDUjAsIHI5CkBAIC0yMTAsMTAgKzE5NiwzIEBACiAKIF9HTE9CQUwocG93ZXJzYXZlX2xvd3NwZWVkKQogCS5sb25nCTAKLQotI2lmZGVmIERFQlVHCi1fR0xPQkFMKG5hcF9lbnRlcl9jb3VudCkKLQkuc3BhY2UJNAotX0dMT0JBTChuYXBfcmV0dXJuX2NvdW50KQotCS5zcGFjZQk0Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjQuUwppbmRleCA2ZGFkMWMwLi5kODVjN2M5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5TCkBAIC0zNSwxMiArMzUsMTYgQEAKIAlEU1NBTEwKIAlzeW5jCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQorCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQJLyogY3VycmVudCB0aHJlYWRfaW5mbyAqLworCWxkCXI4LFRJX0xPQ0FMX0ZMQUdTKHI5KQkvKiBzZXQgbmFwcGluZyBiaXQgKi8KKwlvcmkJcjgscjgsX1RMRl9OQVBQSU5HCS8qIHNvIHdoZW4gd2UgdGFrZSBhbiBleGNlcHRpb24gKi8KKwlzdGQJcjgsVElfTE9DQUxfRkxBR1MocjkpCS8qIGl0IHdpbGwgcmV0dXJuIHRvIG91ciBjYWxsZXIgKi8KIAltZm1zcglyNwogCW9yaQlyNyxyNyxNU1JfRUUKIAlvcmlzCXI3LHI3LE1TUl9QT1dAaAotCXN5bmMKKzE6CXN5bmMKIAlpc3luYwogCW10bXNyZAlyNwogCWlzeW5jCi0Jc3luYwotCWJscgorCWIJMWIKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCmluZGV4IGQ5YTdmZGUuLjRlYmE2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKQEAgLTYxLDYgKzYxLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvbW11X3JhbmdlX2FsbG9jKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ25fb3JkZXIpCiB7IAogCXVuc2lnbmVkIGxvbmcgbiwgZW5kLCBpLCBzdGFydDsKQEAgLTk3LDkgKzk4LDIxIEBACiAJICovCiAJaWYgKHN0YXJ0ID49IGxpbWl0KQogCQlzdGFydCA9IGxhcmdlYWxsb2MgPyB0YmwtPml0X2xhcmdlaGludCA6IHRibC0+aXRfaGludDsKLQkKKwogIGFnYWluOgogCisJaWYgKGxpbWl0ICsgdGJsLT5pdF9vZmZzZXQgPiBtYXNrKSB7CisJCWxpbWl0ID0gbWFzayAtIHRibC0+aXRfb2Zmc2V0ICsgMTsKKwkJLyogSWYgd2UncmUgY29uc3RyYWluZWQgb24gYWRkcmVzcyByYW5nZSwgZmlyc3QgdHJ5CisJCSAqIGF0IHRoZSBtYXNrZWQgaGludCB0byBhdm9pZCBPKG4pIHNlYXJjaCBjb21wbGV4aXR5LAorCQkgKiBidXQgb24gc2Vjb25kIHBhc3MsIHN0YXJ0IGF0IDAuCisJCSAqLworCQlpZiAoKHN0YXJ0ICYgbWFzaykgPj0gbGltaXQgfHwgcGFzcyA+IDApCisJCQlzdGFydCA9IDA7CisJCWVsc2UKKwkJCXN0YXJ0ICY9IG1hc2s7CisJfQorCiAJbiA9IGZpbmRfbmV4dF96ZXJvX2JpdCh0YmwtPml0X21hcCwgbGltaXQsIHN0YXJ0KTsKIAogCS8qIEFsaWduIGFsbG9jYXRpb24gKi8KQEAgLTE1MCwxNCArMTYzLDE0IEBACiAKIHN0YXRpYyBkbWFfYWRkcl90IGlvbW11X2FsbG9jKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCB2b2lkICpwYWdlLAogCQkgICAgICAgdW5zaWduZWQgaW50IG5wYWdlcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkgICAgICAgdW5zaWduZWQgaW50IGFsaWduX29yZGVyKQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBpbnQgYWxpZ25fb3JkZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBlbnRyeSwgZmxhZ3M7CiAJZG1hX2FkZHJfdCByZXQgPSBETUFfRVJST1JfQ09ERTsKLQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKCYodGJsLT5pdF9sb2NrKSwgZmxhZ3MpOwogCi0JZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyh0YmwsIG5wYWdlcywgTlVMTCwgYWxpZ25fb3JkZXIpOworCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2ModGJsLCBucGFnZXMsIE5VTEwsIG1hc2ssIGFsaWduX29yZGVyKTsKIAogCWlmICh1bmxpa2VseShlbnRyeSA9PSBETUFfRVJST1JfQ09ERSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKHRibC0+aXRfbG9jayksIGZsYWdzKTsKQEAgLTIzNiw3ICsyNDksNyBAQAogCiBpbnQgaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCXVuc2lnbmVkIGxvbmcgbWFzaywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCWRtYV9hZGRyX3QgZG1hX25leHQgPSAwLCBkbWFfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjc0LDcgKzI4Nyw3IEBACiAJCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHMtPnBhZ2UpICsgcy0+b2Zmc2V0OwogCQlucGFnZXMgPSBQQUdFX0FMSUdOKHZhZGRyICsgc2xlbikgLSAodmFkZHIgJiBQQUdFX01BU0spOwogCQlucGFnZXMgPj49IFBBR0VfU0hJRlQ7Ci0JCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2ModGJsLCBucGFnZXMsICZoYW5kbGUsIDApOworCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKHRibCwgbnBhZ2VzLCAmaGFuZGxlLCBtYXNrID4+IFBBR0VfU0hJRlQsIDApOwogCiAJCURCRygiICAtIHZhZGRyOiAlbHgsIHNpemU6ICVseFxuIiwgdmFkZHIsIHNsZW4pOwogCkBAIC00NzksNyArNDkyLDggQEAKICAqIGJ5dGUgd2l0aGluIHRoZSBwYWdlIGFzIHZhZGRyLgogICovCiBkbWFfYWRkcl90IGlvbW11X21hcF9zaW5nbGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHZvaWQgKnZhZGRyLAotCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCQlzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlID0gRE1BX0VSUk9SX0NPREU7CiAJdW5zaWduZWQgbG9uZyB1YWRkcjsKQEAgLTQ5Miw3ICs1MDYsOCBAQAogCW5wYWdlcyA+Pj0gUEFHRV9TSElGVDsKIAogCWlmICh0YmwpIHsKLQkJZG1hX2hhbmRsZSA9IGlvbW11X2FsbG9jKHRibCwgdmFkZHIsIG5wYWdlcywgZGlyZWN0aW9uLCAwKTsKKwkJZG1hX2hhbmRsZSA9IGlvbW11X2FsbG9jKHRibCwgdmFkZHIsIG5wYWdlcywgZGlyZWN0aW9uLAorCQkJCQkgbWFzayA+PiBQQUdFX1NISUZULCAwKTsKIAkJaWYgKGRtYV9oYW5kbGUgPT0gRE1BX0VSUk9SX0NPREUpIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpICB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiaW9tbXVfYWxsb2MgZmFpbGVkLCAiCkBAIC01MjEsNyArNTM2LDcgQEAKICAqIHRvIHRoZSBkbWEgYWRkcmVzcyAobWFwcGluZykgb2YgdGhlIGZpcnN0IHBhZ2UuCiAgKi8KIHZvaWQgKmlvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzaXplX3Qgc2l6ZSwKLQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKKwkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBtYXNrLCBnZnBfdCBmbGFnKQogewogCXZvaWQgKnJldCA9IE5VTEw7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwpAQCAtNTUxLDcgKzU2Niw4IEBACiAJbWVtc2V0KHJldCwgMCwgc2l6ZSk7CiAKIAkvKiBTZXQgdXAgdGNlcyB0byBjb3ZlciB0aGUgYWxsb2NhdGVkIHJhbmdlICovCi0JbWFwcGluZyA9IGlvbW11X2FsbG9jKHRibCwgcmV0LCBucGFnZXMsIERNQV9CSURJUkVDVElPTkFMLCBvcmRlcik7CisJbWFwcGluZyA9IGlvbW11X2FsbG9jKHRibCwgcmV0LCBucGFnZXMsIERNQV9CSURJUkVDVElPTkFMLAorCQkJICAgICAgbWFzayA+PiBQQUdFX1NISUZULCBvcmRlcik7CiAJaWYgKG1hcHBpbmcgPT0gRE1BX0VSUk9SX0NPREUpIHsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyZXQsIG9yZGVyKTsKIAkJcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IGJiNWM5NTAuLjU3ZDU2MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtMjcyLDE4ICsyNzIsMjYgQEAKICAqIERvbid0IHVzZSB2aXJ0dWFsIGlycXMgMCwgMSwgMiBmb3IgZGV2aWNlcy4KICAqIFRoZSBwY25ldDMyIGRyaXZlciBjb25zaWRlcnMgaW50ZXJydXB0IG51bWJlcnMgPCAyIHRvIGJlIGludmFsaWQsCiAgKiBhbmQgMiBpcyB0aGUgWElDUyBJUEkgaW50ZXJydXB0LgotICogV2UgbGltaXQgdmlydHVhbCBpcnFzIHRvIDE3IGxlc3MgdGhhbiBOUl9JUlFTIHNvIHRoYXQgd2hlbiB3ZQotICogb2Zmc2V0IHRoZW0gYnkgMTYgKHRvIHJlc2VydmUgdGhlIGZpcnN0IDE2IGZvciBJU0EgaW50ZXJydXB0cykKLSAqIHdlIGRvbid0IGVuZCB1cCB3aXRoIGFuIGludGVycnVwdCBudW1iZXIgPj0gTlJfSVJRUy4KKyAqIFdlIGxpbWl0IHZpcnR1YWwgaXJxcyB0byBfX2lycV9vZmZldF92YWx1ZSBsZXNzIHRoYW4gdmlydF9pcnFfbWF4IHNvCisgKiB0aGF0IHdoZW4gd2Ugb2Zmc2V0IHRoZW0gd2UgZG9uJ3QgZW5kIHVwIHdpdGggYW4gaW50ZXJydXB0CisgKiBudW1iZXIgPj0gdmlydF9pcnFfbWF4LgogICovCiAjZGVmaW5lIE1JTl9WSVJUX0lSUQkzCi0jZGVmaW5lIE1BWF9WSVJUX0lSUQkoTlJfSVJRUyAtIE5VTV9JU0FfSU5URVJSVVBUUyAtIDEpCi0jZGVmaW5lIE5SX1ZJUlRfSVJRUwkoTUFYX1ZJUlRfSVJRIC0gTUlOX1ZJUlRfSVJRICsgMSkKKwordW5zaWduZWQgaW50IHZpcnRfaXJxX21heDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3ZpcnRfaXJxOworc3RhdGljIHVuc2lnbmVkIGludCBucl92aXJ0X2lycXM7CiAKIHZvaWQKIHZpcnRfaXJxX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKKworCWlmICgodmlydF9pcnFfbWF4ID09IDApIHx8ICh2aXJ0X2lycV9tYXggPiAoTlJfSVJRUyAtIDEpKSkKKwkJdmlydF9pcnFfbWF4ID0gTlJfSVJRUyAtIDE7CisJbWF4X3ZpcnRfaXJxID0gdmlydF9pcnFfbWF4IC0gX19pcnFfb2Zmc2V0X3ZhbHVlOworCW5yX3ZpcnRfaXJxcyA9IG1heF92aXJ0X2lycSAtIE1JTl9WSVJUX0lSUSArIDE7CisKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQogCQl2aXJ0X2lycV90b19yZWFsX21hcFtpXSA9IFVOREVGSU5FRF9JUlE7CiB9CkBAIC0zMDgsMTcgKzMxNiwxNyBAQAogCQlyZXR1cm4gcmVhbF9pcnE7CiAJfQogCi0JLyogbWFwIHRvIGEgbnVtYmVyIGJldHdlZW4gTUlOX1ZJUlRfSVJRIGFuZCBNQVhfVklSVF9JUlEgKi8KKwkvKiBtYXAgdG8gYSBudW1iZXIgYmV0d2VlbiBNSU5fVklSVF9JUlEgYW5kIG1heF92aXJ0X2lycSAqLwogCXZpcnEgPSByZWFsX2lycTsKLQlpZiAodmlycSA+IE1BWF9WSVJUX0lSUSkKLQkJdmlycSA9ICh2aXJxICUgTlJfVklSVF9JUlFTKSArIE1JTl9WSVJUX0lSUTsKKwlpZiAodmlycSA+IG1heF92aXJ0X2lycSkKKwkJdmlycSA9ICh2aXJxICUgbnJfdmlydF9pcnFzKSArIE1JTl9WSVJUX0lSUTsKIAogCS8qIHNlYXJjaCBmb3IgdGhpcyBudW1iZXIgb3IgYSBmcmVlIHNsb3QgKi8KIAlmaXJzdF92aXJxID0gdmlycTsKIAl3aGlsZSAodmlydF9pcnFfdG9fcmVhbF9tYXBbdmlycV0gIT0gVU5ERUZJTkVEX0lSUSkgewogCQlpZiAodmlydF9pcnFfdG9fcmVhbF9tYXBbdmlycV0gPT0gcmVhbF9pcnEpCiAJCQlyZXR1cm4gdmlycTsKLQkJaWYgKCsrdmlycSA+IE1BWF9WSVJUX0lSUSkKKwkJaWYgKCsrdmlycSA+IG1heF92aXJ0X2lycSkKIAkJCXZpcnEgPSBNSU5fVklSVF9JUlE7CiAJCWlmICh2aXJxID09IGZpcnN0X3ZpcnEpCiAJCQlnb3RvIG5vc3BhY2U7CS8qIG9vcHMsIG5vIGZyZWUgc2xvdHMgKi8KQEAgLTMzMCw4ICszMzgsOCBAQAogIG5vc3BhY2U6CiAJaWYgKCF3YXJuZWQpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiSW50ZXJydXB0IHRhYmxlIGlzIGZ1bGxcbiIpOwotCQlwcmludGsoS0VSTl9DUklUICJJbmNyZWFzZSBOUl9JUlFTIChjdXJyZW50bHkgJWQpICIKLQkJICAgICAgICJpbiB5b3VyIGtlcm5lbCBzb3VyY2VzIGFuZCByZWJ1aWxkLlxuIiwgTlJfSVJRUyk7CisJCXByaW50ayhLRVJOX0NSSVQgIkluY3JlYXNlIHZpcnRfaXJxX21heCAoY3VycmVudGx5ICVkKSAiCisJCSAgICAgICAiaW4geW91ciBrZXJuZWwgc291cmNlcyBhbmQgcmVidWlsZC5cbiIsIHZpcnRfaXJxX21heCk7CiAJCXdhcm5lZCA9IDE7CiAJfQogCXJldHVybiBOT19JUlE7CkBAIC0zNDksOCArMzU3LDggQEAKIAogCXZpcnEgPSByZWFsX2lycTsKIAotCWlmICh2aXJxID4gTUFYX1ZJUlRfSVJRKQotCQl2aXJxID0gKHZpcnEgJSBOUl9WSVJUX0lSUVMpICsgTUlOX1ZJUlRfSVJROworCWlmICh2aXJxID4gbWF4X3ZpcnRfaXJxKQorCQl2aXJxID0gKHZpcnEgJSBucl92aXJ0X2lycXMpICsgTUlOX1ZJUlRfSVJROwogCiAJZmlyc3RfdmlycSA9IHZpcnE7CiAKQEAgLTM2MCw3ICszNjgsNyBAQAogCiAJCXZpcnErKzsKIAotCQlpZiAodmlycSA+PSBNQVhfVklSVF9JUlEpCisJCWlmICh2aXJxID49IG1heF92aXJ0X2lycSkKIAkJCXZpcnEgPSAwOwogCiAJfSB3aGlsZSAoZmlyc3RfdmlycSAhPSB2aXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYWQ3YTkwMi4uZjc4ODY2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTg4LDM0ICs4OCwzNCBAQAogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Ja3Byb2JlX29wY29kZV90IGluc24gPSAqcC0+YWluc24uaW5zbjsKLQogCXJlZ3MtPm1zciB8PSBNU1JfU0U7CiAKLQkvKiBzaW5nbGUgc3RlcCBpbmxpbmUgaWYgaXQgaXMgYSB0cmFwIHZhcmlhbnQgKi8KLQlpZiAoaXNfdHJhcChpbnNuKSkKLQkJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkcjsKLQllbHNlCi0JCXJlZ3MtPm5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc247CisJLyoKKwkgKiBPbiBwb3dlcnBjIHdlIHNob3VsZCBzaW5nbGUgc3RlcCBvbiB0aGUgb3JpZ2luYWwKKwkgKiBpbnN0cnVjdGlvbiBldmVuIGlmIHRoZSBwcm9iZWQgaW5zbiBpcyBhIHRyYXAKKwkgKiB2YXJpYW50IGFzIHZhbHVlcyBpbiByZWdzIGNvdWxkIHBsYXkgYSBwYXJ0IGluCisJICogaWYgdGhlIHRyYXAgaXMgdGFrZW4gb3Igbm90CisJICovCisJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKIAlrY2ItPnByZXZfa3Byb2JlLnNhdmVkX21zciA9IGtjYi0+a3Byb2JlX3NhdmVkX21zcjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CiAJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7CiAJa2NiLT5rcHJvYmVfc2F2ZWRfbXNyID0ga2NiLT5wcmV2X2twcm9iZS5zYXZlZF9tc3I7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmUgKnA7CiAJaW50IHJldCA9IDA7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArIDQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC0zNzAsNyArMzcwLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKIHsKIAlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAxYjczNTA4Li4yY2JkZTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KIAotI2RlZmluZSBNT0RVTEVfVkVSUyAiMS42IgorI2RlZmluZSBNT0RVTEVfVkVSUyAiMS43IgogI2RlZmluZSBNT0RVTEVfTkFNRSAibHBhcmNmZyIKIAogLyogI2RlZmluZSBMUEFSQ0ZHX0RFQlVHICovCkBAIC0xNDksMTcgKzE0OSwxNyBAQAogCWlmIChyYyA9PSAwKQkJLyogc3VjY2VzcywgcmV0dXJuICovCiAJCXJldHVybjsKIC8qIGNoZWNrIGZvciBudWxsIHRhZyA/ICovCi0JaWYgKHJjID09IEhfSGFyZHdhcmUpCisJaWYgKHJjID09IEhfSEFSRFdBUkUpCiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICJwbHBhci1oY2FsbCAoJXMpIGZhaWxlZCB3aXRoIGhhcmR3YXJlIGZhdWx0XG4iLCB0YWcpOwotCWVsc2UgaWYgKHJjID09IEhfRnVuY3Rpb24pCisJZWxzZSBpZiAocmMgPT0gSF9GVU5DVElPTikKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgInBscGFyLWhjYWxsICglcykgZmFpbGVkOyBmdW5jdGlvbiBub3QgYWxsb3dlZFxuIiwgdGFnKTsKLQllbHNlIGlmIChyYyA9PSBIX0F1dGhvcml0eSkKKwllbHNlIGlmIChyYyA9PSBIX0FVVEhPUklUWSkKIAkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgInBscGFyLWhjYWxsICglcykgZmFpbGVkOyBub3QgYXV0aG9yaXplZCB0byB0aGlzIGZ1bmN0aW9uXG4iLAotCQkgICAgICAgdGFnKTsKLQllbHNlIGlmIChyYyA9PSBIX1BhcmFtZXRlcikKKwkJICAgICAgICJwbHBhci1oY2FsbCAoJXMpIGZhaWxlZDsgbm90IGF1dGhvcml6ZWQgdG8gdGhpcyIKKwkJICAgICAgICIgZnVuY3Rpb25cbiIsIHRhZyk7CisJZWxzZSBpZiAocmMgPT0gSF9QQVJBTUVURVIpCiAJCXByaW50ayhLRVJOX0lORk8gInBscGFyLWhjYWxsICglcykgZmFpbGVkOyBCYWQgcGFyYW1ldGVyKHMpXG4iLAogCQkgICAgICAgdGFnKTsKIAllbHNlCkBAIC0yMDksNyArMjA5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCXJjID0gcGxwYXJfaGNhbGwoSF9QSUMsIDAsIDAsIDAsIDAsIHBvb2xfaWRsZV90aW1lLCBudW1fcHJvY3MsICZkdW1teSk7CiAKLQlpZiAocmMgIT0gSF9BdXRob3JpdHkpCisJaWYgKHJjICE9IEhfQVVUSE9SSVRZKQogCQlsb2dfcGxwYXJfaGNhbGxfcmV0dXJuKHJjLCAiSF9QSUMiKTsKIH0KIApAQCAtMjQyLDcgKzI0Miw3IEBACiB7CiAJaW50IGNhbGxfc3RhdHVzOwogCi0JY2hhciAqbG9jYWxfYnVmZmVyID0ga21hbGxvYyhTUExQQVJfTUFYTEVOR1RILCBHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBjaGFyICpsb2NhbF9idWZmZXIgPSBrbWFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWxfYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAogCQkgICAgICAgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwpAQCAtMjU0LDcgKzI1NCw4IEBACiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwocnRhc190b2tlbigiaWJtLGdldC1zeXN0ZW0tcGFyYW1ldGVyIiksIDMsIDEsCiAJCQkJTlVMTCwKIAkJCQlTUExQQVJfQ0hBUkFDVEVSSVNUSUNTX1RPS0VOLAotCQkJCV9fcGEocnRhc19kYXRhX2J1ZikpOworCQkJCV9fcGEocnRhc19kYXRhX2J1ZiksCisJCQkJUlRBU19EQVRBX0JVRl9TSVpFKTsKIAltZW1jcHkobG9jYWxfYnVmZmVyLCBydGFzX2RhdGFfYnVmLCBTUExQQVJfTUFYTEVOR1RIKTsKIAlzcGluX3VubG9jaygmcnRhc19kYXRhX2J1Zl9sb2NrKTsKIApAQCAtMjc1LDcgKzI3Niw3IEBACiAjaWZkZWYgTFBBUkNGR19ERUJVRwogCQlwcmludGsoS0VSTl9JTkZPICJzdWNjZXNzIGNhbGxpbmcgZ2V0LXN5c3RlbS1wYXJhbWV0ZXIgXG4iKTsKICNlbmRpZgotCQlzcGxwYXJfc3RybGVuID0gbG9jYWxfYnVmZmVyWzBdICogMTYgKyBsb2NhbF9idWZmZXJbMV07CisJCXNwbHBhcl9zdHJsZW4gPSBsb2NhbF9idWZmZXJbMF0gKiAyNTYgKyBsb2NhbF9idWZmZXJbMV07CiAJCWxvY2FsX2J1ZmZlciArPSAyOwkvKiBzdGVwIG92ZXIgc3RybGVuIHZhbHVlICovCiAKIAkJbWVtc2V0KHdvcmtidWZmZXIsIDAsIFNQTFBBUl9NQVhMRU5HVEgpOwpAQCAtNTI5LDEzICs1MzAsMTMgQEAKIAlyZXR2YWwgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUFBQLCAqbmV3X2VudGl0bGVkX3B0ciwKIAkJCQkgICAgKm5ld193ZWlnaHRfcHRyKTsKIAotCWlmIChyZXR2YWwgPT0gSF9TdWNjZXNzIHx8IHJldHZhbCA9PSBIX0NvbnN0cmFpbmVkKSB7CisJaWYgKHJldHZhbCA9PSBIX1NVQ0NFU1MgfHwgcmV0dmFsID09IEhfQ09OU1RSQUlORUQpIHsKIAkJcmV0dmFsID0gY291bnQ7Ci0JfSBlbHNlIGlmIChyZXR2YWwgPT0gSF9CdXN5KSB7CisJfSBlbHNlIGlmIChyZXR2YWwgPT0gSF9CVVNZKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKLQl9IGVsc2UgaWYgKHJldHZhbCA9PSBIX0hhcmR3YXJlKSB7CisJfSBlbHNlIGlmIChyZXR2YWwgPT0gSF9IQVJEV0FSRSkgewogCQlyZXR2YWwgPSAtRUlPOwotCX0gZWxzZSBpZiAocmV0dmFsID09IEhfUGFyYW1ldGVyKSB7CisJfSBlbHNlIGlmIChyZXR2YWwgPT0gSF9QQVJBTUVURVIpIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVjZWl2ZWQgdW5rbm93biBodiByZXR1cm4gY29kZSAlbGQiLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKaW5kZXggOTI4Yjg1OC4uYmEzNDAwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCkBAIC0xOTEsMTEgKzE5MSwxOSBAQAogCQkJCSAodm9pZCAqKWhkcgogCQkJCSArIHNlY2hkcnNbc2VjaGRyc1tpXS5zaF9saW5rXS5zaF9vZmZzZXQpOwogCX0KLQlpZiAoIW1lLT5hcmNoLnN0dWJzX3NlY3Rpb24gfHwgIW1lLT5hcmNoLnRvY19zZWN0aW9uKSB7Ci0JCXByaW50aygiJXM6IGRvZXNuJ3QgY29udGFpbiAudG9jIG9yIC5zdHVicy5cbiIsIG1lLT5uYW1lKTsKKworCWlmICghbWUtPmFyY2guc3R1YnNfc2VjdGlvbikgeworCQlwcmludGsoIiVzOiBkb2Vzbid0IGNvbnRhaW4gLnN0dWJzLlxuIiwgbWUtPm5hbWUpOwogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIC50b2MsIGp1c3QgdXNlIC5zdHVicy4gIFdlIG5lZWQgdG8gc2V0IHIyCisJICAgdG8gc29tZSByZWFzb25hYmxlIHZhbHVlIGluIGNhc2UgdGhlIG1vZHVsZSBjYWxscyBvdXQgdG8KKwkgICBvdGhlciBmdW5jdGlvbnMgdmlhIGEgc3R1Yiwgb3IgaWYgYSBmdW5jdGlvbiBwb2ludGVyIGVzY2FwZXMKKwkgICB0aGUgbW9kdWxlIGJ5IHNvbWUgbWVhbnMuICAqLworCWlmICghbWUtPmFyY2gudG9jX3NlY3Rpb24pCisJCW1lLT5hcmNoLnRvY19zZWN0aW9uID0gbWUtPmFyY2guc3R1YnNfc2VjdGlvbjsKKwogCS8qIE92ZXJyaWRlIHRoZSBzdHVicyBzaXplICovCiAJc2VjaGRyc1ttZS0+YXJjaC5zdHVic19zZWN0aW9uXS5zaF9zaXplID0gZ2V0X3N0dWJzX3NpemUoaGRyLCBzZWNoZHJzKTsKIAlyZXR1cm4gMDsKQEAgLTM0Miw3ICszNTAsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBSX1BQQzY0X1RPQzE2OgotCQkJLyogU3VidGFjdCBUT0MgcG9pbnRlciAqLworCQkJLyogU3VidHJhY3QgVE9DIHBvaW50ZXIgKi8KIAkJCXZhbHVlIC09IG15X3IyKHNlY2hkcnMsIG1lKTsKIAkJCWlmICh2YWx1ZSArIDB4ODAwMCA+IDB4ZmZmZikgewogCQkJCXByaW50aygiJXM6IGJhZCBUT0MxNiByZWxvY2F0aW9uICglbHUpXG4iLApAQCAtMzU1LDcgKzM2Myw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIFJfUFBDNjRfVE9DMTZfRFM6Ci0JCQkvKiBTdWJ0YWN0IFRPQyBwb2ludGVyICovCisJCQkvKiBTdWJ0cmFjdCBUT0MgcG9pbnRlciAqLwogCQkJdmFsdWUgLT0gbXlfcjIoc2VjaGRycywgbWUpOwogCQkJaWYgKCh2YWx1ZSAmIDMpICE9IDAgfHwgdmFsdWUgKyAweDgwMDAgPiAweGZmZmYpIHsKIAkJCQlwcmludGsoIiVzOiBiYWQgVE9DMTZfRFMgcmVsb2NhdGlvbiAoJWx1KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2lvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9pb21tdS5jCmluZGV4IGMzMzZmM2UuLmMxZDk1ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfaW9tbXUuYwpAQCAtNTksNiArNTksMjUgQEAKIH0KIAogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGV2aWNlX3RvX21hc2soc3RydWN0IGRldmljZSAqaHdkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlpZiAoIWh3ZGV2KSB7CisJCXBkZXYgPSBwcGM2NF9pc2FicmlkZ2VfZGV2OworCQlpZiAoIXBkZXYpIC8qIFRoaXMgaXMgdGhlIGJlc3QgZ3Vlc3Mgd2UgY2FuIGRvICovCisJCQlyZXR1cm4gMHhmZmZmZmZmZnVsOworCX0gZWxzZQorCQlwZGV2ID0gdG9fcGNpX2Rldihod2Rldik7CisKKwlpZiAocGRldi0+ZG1hX21hc2spCisJCXJldHVybiBwZGV2LT5kbWFfbWFzazsKKworCS8qIEFzc3VtZSBkZXZpY2VzIHdpdGhvdXQgbWFzayBjYW4gdGFrZSAzMiBiaXQgYWRkcmVzc2VzICovCisJcmV0dXJuIDB4ZmZmZmZmZmZ1bDsKK30KKworCiAvKiBBbGxvY2F0ZXMgYSBjb250aWd1b3VzIHJlYWwgYnVmZmVyIGFuZCBjcmVhdGVzIG1hcHBpbmdzIG92ZXIgaXQuCiAgKiBSZXR1cm5zIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBhbmQgc2V0cyBkbWFfaGFuZGxlCiAgKiB0byB0aGUgZG1hIGFkZHJlc3MgKG1hcHBpbmcpIG9mIHRoZSBmaXJzdCBwYWdlLgpAQCAtNjcsNyArODYsNyBAQAogCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKIHsKIAlyZXR1cm4gaW9tbXVfYWxsb2NfY29oZXJlbnQoZGV2bm9kZV90YWJsZShod2RldiksIHNpemUsIGRtYV9oYW5kbGUsCi0JCQlmbGFnKTsKKwkJCWRldmljZV90b19tYXNrKGh3ZGV2KSwgZmxhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaV9pb21tdV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKQEAgLTg1LDcgKzEwNCw4IEBACiBzdGF0aWMgZG1hX2FkZHJfdCBwY2lfaW9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqdmFkZHIsCiAJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9zaW5nbGUoZGV2bm9kZV90YWJsZShod2RldiksIHZhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCXJldHVybiBpb21tdV9tYXBfc2luZ2xlKGRldm5vZGVfdGFibGUoaHdkZXYpLCB2YWRkciwgc2l6ZSwKKwkJCSAgICAgICAgZGV2aWNlX3RvX21hc2soaHdkZXYpLCBkaXJlY3Rpb24pOwogfQogCiAKQEAgLTEwMCw3ICsxMjAsNyBAQAogCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAJcmV0dXJuIGlvbW11X21hcF9zZyhwZGV2LCBkZXZub2RlX3RhYmxlKHBkZXYpLCBzZ2xpc3QsCi0JCQluZWxlbXMsIGRpcmVjdGlvbik7CisJCQluZWxlbXMsIGRldmljZV90b19tYXNrKHBkZXYpLCBkaXJlY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfaW9tbXVfdW5tYXBfc2coc3RydWN0IGRldmljZSAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCkBAIC0xMTIsNyArMTMyLDE5IEBACiAvKiBXZSBzdXBwb3J0IERNQSB0by9mcm9tIGFueSBtZW1vcnkgcGFnZSB2aWEgdGhlIGlvbW11ICovCiBzdGF0aWMgaW50IHBjaV9pb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0JcmV0dXJuIDE7CisJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBkZXZub2RlX3RhYmxlKGRldik7CisKKwlpZiAoIXRibCB8fCB0YmwtPml0X29mZnNldCA+IG1hc2spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiV2FybmluZzogSU9NTVUgdGFibGUgb2Zmc2V0IHRvbyBiaWcgZm9yIGRldmljZSBtYXNrXG4iKTsKKwkJaWYgKHRibCkKKwkJCXByaW50ayhLRVJOX0lORk8gIm1hc2s6IDB4JTA4bHgsIHRhYmxlIG9mZnNldDogMHglMDhseFxuIiwKKwkJCQltYXNrLCB0YmwtPml0X29mZnNldCk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIm1hc2s6IDB4JTA4bHgsIHRhYmxlIHVuYXZhaWxhYmxlXG4iLAorCQkJCW1hc2spOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7CiB9CiAKIHZvaWQgcGNpX2lvbW11X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGRmYTUzOTguLjRiMDUyYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtODEsNiArODEsNyBAQAogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTChzdHJjbXApOwogRVhQT1JUX1NZTUJPTChzdHJjYXNlY21wKTsKK0VYUE9SVF9TWU1CT0woc3RybmNhc2VjbXApOwogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCA0MzM2MzkwLi45YTA3Zjk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtNjIsNyArNjIsNyBAQAogc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKIAogI2lmZGVmIENPTkZJR19QUEM2NAotc3RhdGljIGludCBfX2luaXRkYXRhIGlvbW11X2lzX29mZjsKK2ludCBfX2luaXRkYXRhIGlvbW11X2lzX29mZjsKIGludCBfX2luaXRkYXRhIGlvbW11X2ZvcmNlX29uOwogdW5zaWduZWQgbG9uZyB0Y2VfYWxsb2Nfc3RhcnQsIHRjZV9hbGxvY19lbmQ7CiAjZW5kaWYKQEAgLTg4NSw2ICs4ODUsNzQgQEAKIAlEQkcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7CiB9CiAKKy8qCisgKiBpYm0scGEtZmVhdHVyZXMgaXMgYSBwZXItY3B1IHByb3BlcnR5IHRoYXQgY29udGFpbnMgYSBzdHJpbmcgb2YKKyAqIGF0dHJpYnV0ZSBkZXNjcmlwdG9ycywgZWFjaCBvZiB3aGljaCBoYXMgYSAyIGJ5dGUgaGVhZGVyIHBsdXMgdXAKKyAqIHRvIDI1NCBieXRlcyB3b3J0aCBvZiBwcm9jZXNzb3IgYXR0cmlidXRlIGJpdHMuICBGaXJzdCBoZWFkZXIKKyAqIGJ5dGUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZm9sbG93aW5nIHRoZSBoZWFkZXIuCisgKiBTZWNvbmQgaGVhZGVyIGJ5dGUgaXMgYW4gImF0dHJpYnV0ZS1zcGVjaWZpZXIiIHR5cGUsIG9mIHdoaWNoCisgKiB6ZXJvIGlzIHRoZSBvbmx5IGN1cnJlbnRseS1kZWZpbmVkIHZhbHVlLgorICogSW1wbGVtZW50YXRpb246ICBQYXNzIGluIHRoZSBieXRlIGFuZCBiaXQgb2Zmc2V0IGZvciB0aGUgZmVhdHVyZQorICogdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4gIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtMSBpZiB0aGUKKyAqIHBhLWZlYXR1cmVzIHByb3BlcnR5IGlzIG1pc3NpbmcsIG9yIGEgMS8wIHRvIGluZGljYXRlIGlmIHRoZSBmZWF0dXJlCisgKiBpcyBzdXBwb3J0ZWQvbm90IHN1cHBvcnRlZC4gIE5vdGUgdGhhdCB0aGUgYml0IG51bWJlcnMgYXJlCisgKiBiaWctZW5kaWFuIHRvIG1hdGNoIHRoZSBkZWZpbml0aW9uIGluIFBBUFIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaWJtX3BhX2ZlYXR1cmUgeworCXVuc2lnbmVkIGxvbmcJY3B1X2ZlYXR1cmVzOwkvKiBDUFVfRlRSX3h4eCBiaXQgKi8KKwl1bnNpZ25lZCBpbnQJY3B1X3VzZXJfZnRyczsJLyogUFBDX0ZFQVRVUkVfeHh4IGJpdCAqLworCXVuc2lnbmVkIGNoYXIJcGFieXRlOwkJLyogYnl0ZSBudW1iZXIgaW4gaWJtLHBhLWZlYXR1cmVzICovCisJdW5zaWduZWQgY2hhcglwYWJpdDsJCS8qIGJpdCBudW1iZXIgKGJpZy1lbmRpYW4pICovCisJdW5zaWduZWQgY2hhcglpbnZlcnQ7CQkvKiBpZiAxLCBwYSBiaXQgc2V0ID0+IGNsZWFyIGZlYXR1cmUgKi8KK30gaWJtX3BhX2ZlYXR1cmVzW10gX19pbml0ZGF0YSA9IHsKKwl7MCwgUFBDX0ZFQVRVUkVfSEFTX01NVSwJMCwgMCwgMH0sCisJezAsIFBQQ19GRUFUVVJFX0hBU19GUFUsCTAsIDEsIDB9LAorCXtDUFVfRlRSX1NMQiwgMCwJCTAsIDIsIDB9LAorCXtDUFVfRlRSX0NUUkwsIDAsCQkwLCAzLCAwfSwKKwl7Q1BVX0ZUUl9OT0VYRUNVVEUsIDAsCQkwLCA2LCAwfSwKKwl7Q1BVX0ZUUl9OT0RTSVNSQUxJR04sIDAsCTEsIDEsIDF9LAorCXtDUFVfRlRSX0NJX0xBUkdFX1BBR0UsIDAsCTEsIDIsIDB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2NwdV9wYV9mZWF0dXJlcyh1bnNpZ25lZCBsb25nIG5vZGUpCit7CisJdW5zaWduZWQgY2hhciAqcGFfZnRyczsKKwl1bnNpZ25lZCBsb25nIGxlbiwgdGFibGVsZW4sIGksIGJpdDsKKworCXBhX2Z0cnMgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0scGEtZmVhdHVyZXMiLCAmdGFibGVsZW4pOworCWlmIChwYV9mdHJzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGZpbmQgZGVzY3JpcHRvciB3aXRoIHR5cGUgPT0gMCAqLworCWZvciAoOzspIHsKKwkJaWYgKHRhYmxlbGVuIDwgMykKKwkJCXJldHVybjsKKwkJbGVuID0gMiArIHBhX2Z0cnNbMF07CisJCWlmICh0YWJsZWxlbiA8IGxlbikKKwkJCXJldHVybjsJCS8qIGRlc2NyaXB0b3IgMCBub3QgZm91bmQgKi8KKwkJaWYgKHBhX2Z0cnNbMV0gPT0gMCkKKwkJCWJyZWFrOworCQl0YWJsZWxlbiAtPSBsZW47CisJCXBhX2Z0cnMgKz0gbGVuOworCX0KKworCS8qIGxvb3Agb3ZlciBiaXRzIHdlIGtub3cgYWJvdXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpYm1fcGFfZmVhdHVyZXMpOyArK2kpIHsKKwkJc3RydWN0IGlibV9wYV9mZWF0dXJlICpmcCA9ICZpYm1fcGFfZmVhdHVyZXNbaV07CisKKwkJaWYgKGZwLT5wYWJ5dGUgPj0gcGFfZnRyc1swXSkKKwkJCWNvbnRpbnVlOworCQliaXQgPSAocGFfZnRyc1syICsgZnAtPnBhYnl0ZV0gPj4gKDcgLSBmcC0+cGFiaXQpKSAmIDE7CisJCWlmIChiaXQgXiBmcC0+aW52ZXJ0KSB7CisJCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyB8PSBmcC0+Y3B1X2ZlYXR1cmVzOworCQkJY3VyX2NwdV9zcGVjLT5jcHVfdXNlcl9mZWF0dXJlcyB8PSBmcC0+Y3B1X3VzZXJfZnRyczsKKwkJfSBlbHNlIHsKKwkJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzICY9IH5mcC0+Y3B1X2ZlYXR1cmVzOworCQkJY3VyX2NwdV9zcGVjLT5jcHVfdXNlcl9mZWF0dXJlcyAmPSB+ZnAtPmNwdV91c2VyX2Z0cnM7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jcHVzKHVuc2lnbmVkIGxvbmcgbm9kZSwKIAkJCQkJICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAogCQkJCQkgIHZvaWQgKmRhdGEpCkBAIC05NjksNiArMTAzNyw4IEBACiAJfQogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCiAKKwljaGVja19jcHVfcGFfZmVhdHVyZXMobm9kZSk7CisKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIAlpZiAobnRocmVhZHMgPiAxKQogCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyB8PSBDUFVfRlRSX1NNVDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IGQ2NmM1ZTcuLmY3MGJkMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtNjM2LDEwICs2MzYsOTYgQEAKIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogLyoKLSAqIFRvIHRlbGwgdGhlIGZpcm13YXJlIHdoYXQgb3VyIGNhcGFiaWxpdGllcyBhcmUsIHdlIGhhdmUgdG8gcGFzcwotICogaXQgYSBmYWtlIDMyLWJpdCBFTEYgaGVhZGVyIGNvbnRhaW5pbmcgYSBjb3VwbGUgb2YgUFRfTk9URSBzZWN0aW9ucwotICogdGhhdCBjb250YWluIHN0cnVjdHVyZXMgdGhhdCBjb250YWluIHRoZSBhY3R1YWwgdmFsdWVzLgorICogVGhlcmUgYXJlIHR3byBtZXRob2RzIGZvciB0ZWxsaW5nIGZpcm13YXJlIHdoYXQgb3VyIGNhcGFiaWxpdGllcyBhcmUuCisgKiBOZXdlciBtYWNoaW5lcyBoYXZlIGFuICJpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IiBtZXRob2Qgb24gdGhlCisgKiByb290IG5vZGUuICBGb3Igb2xkZXIgbWFjaGluZXMsIHdlIGhhdmUgdG8gY2FsbCB0aGUgInByb2Nlc3MtZWxmLWhlYWRlciIKKyAqIG1ldGhvZCBpbiB0aGUgL3BhY2thZ2VzL2VsZi1sb2FkZXIgbm9kZSwgcGFzc2luZyBpdCBhIGZha2UgMzItYml0CisgKiBFTEYgaGVhZGVyIGNvbnRhaW5pbmcgYSBjb3VwbGUgb2YgUFRfTk9URSBzZWN0aW9ucyB0aGF0IGNvbnRhaW4KKyAqIHN0cnVjdHVyZXMgdGhhdCBjb250YWluIHZhcmlvdXMgaW5mb3JtYXRpb24uCiAgKi8KKworLyoKKyAqIE5ldyBtZXRob2QgLSBleHRlbnNpYmxlIGFyY2hpdGVjdHVyZSBkZXNjcmlwdGlvbiB2ZWN0b3IuCisgKgorICogQmVjYXVzZSB0aGUgZGVzY3JpcHRpb24gdmVjdG9yIGNvbnRhaW5zIGEgbWl4IG9mIGJ5dGUgYW5kIHdvcmQKKyAqIHZhbHVlcywgd2UgZGVjbGFyZSBpdCBhcyBhbiB1bnNpZ25lZCBjaGFyIGFycmF5LCBhbmQgdXNlIHRoaXMKKyAqIG1hY3JvIHRvIHB1dCB3b3JkIHZhbHVlcyBpbi4KKyAqLworI2RlZmluZSBXKHgpCSgoeCkgPj4gMjQpICYgMHhmZiwgKCh4KSA+PiAxNikgJiAweGZmLCBcCisJCSgoeCkgPj4gOCkgJiAweGZmLCAoeCkgJiAweGZmCisKKy8qIE9wdGlvbiB2ZWN0b3IgYml0cyAtIGdlbmVyaWMgYml0cyBpbiBieXRlIDEgKi8KKyNkZWZpbmUgT1ZfSUdOT1JFCQkweDgwCS8qIGlnbm9yZSB0aGlzIHZlY3RvciAqLworI2RlZmluZSBPVl9DRVNTQVRJT05fUE9MSUNZCTB4NDAJLyogaGFsdCBpZiB1bnN1cHBvcnRlZCBvcHRpb24gcHJlc2VudCovCisKKy8qIE9wdGlvbiB2ZWN0b3IgMTogcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkICovCisjZGVmaW5lIE9WMV9QUENfMl8wMAkJMHg4MAkvKiBzZXQgaWYgd2Ugc3VwcG9ydCBQb3dlclBDIDIuMDAgKi8KKyNkZWZpbmUgT1YxX1BQQ18yXzAxCQkweDQwCS8qIHNldCBpZiB3ZSBzdXBwb3J0IFBvd2VyUEMgMi4wMSAqLworI2RlZmluZSBPVjFfUFBDXzJfMDIJCTB4MjAJLyogc2V0IGlmIHdlIHN1cHBvcnQgUG93ZXJQQyAyLjAyICovCisjZGVmaW5lIE9WMV9QUENfMl8wMwkJMHgxMAkvKiBzZXQgaWYgd2Ugc3VwcG9ydCBQb3dlclBDIDIuMDMgKi8KKyNkZWZpbmUgT1YxX1BQQ18yXzA0CQkweDA4CS8qIHNldCBpZiB3ZSBzdXBwb3J0IFBvd2VyUEMgMi4wNCAqLworI2RlZmluZSBPVjFfUFBDXzJfMDUJCTB4MDQJLyogc2V0IGlmIHdlIHN1cHBvcnQgUG93ZXJQQyAyLjA1ICovCisKKy8qIE9wdGlvbiB2ZWN0b3IgMjogT3BlbiBGaXJtd2FyZSBvcHRpb25zIHN1cHBvcnRlZCAqLworI2RlZmluZSBPVjJfUkVBTF9NT0RFCQkweDIwCS8qIHNldCBpZiB3ZSB3YW50IE9GIGluIHJlYWwgbW9kZSAqLworCisvKiBPcHRpb24gdmVjdG9yIDM6IHByb2Nlc3NvciBvcHRpb25zIHN1cHBvcnRlZCAqLworI2RlZmluZSBPVjNfRlAJCQkweDgwCS8qIGZsb2F0aW5nIHBvaW50ICovCisjZGVmaW5lIE9WM19WTVgJCQkweDQwCS8qIFZNWC9BbHRpdmVjICovCisKKy8qIE9wdGlvbiB2ZWN0b3IgNTogUEFQUi9PRiBvcHRpb25zIHN1cHBvcnRlZCAqLworI2RlZmluZSBPVjVfTFBBUgkJMHg4MAkvKiBsb2dpY2FsIHBhcnRpdGlvbmluZyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgT1Y1X1NQTFBBUgkJMHg0MAkvKiBzaGFyZWQtcHJvY2Vzc29yIExQQVIgc3VwcG9ydGVkICovCisvKiBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IHByb3BlcnR5IHN1cHBvcnRlZCAqLworI2RlZmluZSBPVjVfRFJDT05GX01FTU9SWQkweDIwCisjZGVmaW5lIE9WNV9MQVJHRV9QQUdFUwkJMHgxMAkvKiBsYXJnZSBwYWdlcyBzdXBwb3J0ZWQgKi8KKworLyoKKyAqIFRoZSBhcmNoaXRlY3R1cmUgdmVjdG9yIGhhcyBhbiBhcnJheSBvZiBQVlIgbWFzay92YWx1ZSBwYWlycywKKyAqIGZvbGxvd2VkIGJ5ICMgb3B0aW9uIHZlY3RvcnMgLSAxLCBmb2xsb3dlZCBieSB0aGUgb3B0aW9uIHZlY3RvcnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlibV9hcmNoaXRlY3R1cmVfdmVjW10gPSB7CisJVygweGZmZmUwMDAwKSwgVygweDAwM2EwMDAwKSwJLyogUE9XRVI1L1BPV0VSNSsgKi8KKwlXKDB4ZmZmZjAwMDApLCBXKDB4MDAzZTAwMDApLAkvKiBQT1dFUjYgKi8KKwlXKDB4ZmZmZmZmZmUpLCBXKDB4MGYwMDAwMDEpLAkvKiBhbGwgMi4wNC1jb21wbGlhbnQgYW5kIGVhcmxpZXIgKi8KKwk1IC0gMSwJCQkJLyogNSBvcHRpb24gdmVjdG9ycyAqLworCisJLyogb3B0aW9uIHZlY3RvciAxOiBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgKi8KKwkzIC0gMSwJCQkJLyogbGVuZ3RoICovCisJMCwJCQkJLyogZG9uJ3QgaWdub3JlLCBkb24ndCBoYWx0ICovCisJT1YxX1BQQ18yXzAwIHwgT1YxX1BQQ18yXzAxIHwgT1YxX1BQQ18yXzAyIHwgT1YxX1BQQ18yXzAzIHwKKwlPVjFfUFBDXzJfMDQgfCBPVjFfUFBDXzJfMDUsCisKKwkvKiBvcHRpb24gdmVjdG9yIDI6IE9wZW4gRmlybXdhcmUgb3B0aW9ucyBzdXBwb3J0ZWQgKi8KKwkzNCAtIDEsCQkJCS8qIGxlbmd0aCAqLworCU9WMl9SRUFMX01PREUsCisJMCwgMCwKKwlXKDB4ZmZmZmZmZmYpLAkJCS8qIHJlYWxfYmFzZSAqLworCVcoMHhmZmZmZmZmZiksCQkJLyogcmVhbF9zaXplICovCisJVygweGZmZmZmZmZmKSwJCQkvKiB2aXJ0X2Jhc2UgKi8KKwlXKDB4ZmZmZmZmZmYpLAkJCS8qIHZpcnRfc2l6ZSAqLworCVcoMHhmZmZmZmZmZiksCQkJLyogbG9hZF9iYXNlICovCisJVyg2NCksCQkJCS8qIDEyOE1CIG1pbiBSTUEgKi8KKwlXKDB4ZmZmZmZmZmYpLAkJCS8qIGZ1bGwgY2xpZW50IGxvYWQgKi8KKwkwLAkJCQkvKiBtaW4gUk1BIHBlcmNlbnRhZ2Ugb2YgdG90YWwgUkFNICovCisJNDgsCQkJCS8qIG1heCBsb2dfMihoYXNoIHRhYmxlIHNpemUpICovCisKKwkvKiBvcHRpb24gdmVjdG9yIDM6IHByb2Nlc3NvciBvcHRpb25zIHN1cHBvcnRlZCAqLworCTMgLSAxLAkJCQkvKiBsZW5ndGggKi8KKwkwLAkJCQkvKiBkb24ndCBpZ25vcmUsIGRvbid0IGhhbHQgKi8KKwlPVjNfRlAgfCBPVjNfVk1YLAorCisJLyogb3B0aW9uIHZlY3RvciA0OiBJQk0gUEFQUiBpbXBsZW1lbnRhdGlvbiAqLworCTIgLSAxLAkJCQkvKiBsZW5ndGggKi8KKwkwLAkJCQkvKiBkb24ndCBoYWx0ICovCisKKwkvKiBvcHRpb24gdmVjdG9yIDU6IFBBUFIvT0Ygb3B0aW9ucyAqLworCTMgLSAxLAkJCQkvKiBsZW5ndGggKi8KKwkwLAkJCQkvKiBkb24ndCBpZ25vcmUsIGRvbid0IGhhbHQgKi8KKwlPVjVfTFBBUiB8IE9WNV9TUExQQVIgfCBPVjVfTEFSR0VfUEFHRVMsCit9OworCisvKiBPbGQgbWV0aG9kIC0gRUxGIGhlYWRlciB3aXRoIFBUX05PVEUgc2VjdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgZmFrZV9lbGYgewogCUVsZjMyX0VoZHIJZWxmaGRyOwogCUVsZjMyX1BoZHIJcGhkclsyXTsKQEAgLTcyOCw4ICs4MTQsMjcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHByb21fc2VuZF9jYXBhYmlsaXRpZXModm9pZCkKIHsKLQlpaGFuZGxlIGVsZmxvYWRlcjsKKwlpaGFuZGxlIGVsZmxvYWRlciwgcm9vdDsKKwlwcm9tX2FyZ190IHJldDsKIAorCXJvb3QgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvIikpOworCWlmIChyb290ICE9IDApIHsKKwkJLyogdHJ5IGNhbGxpbmcgdGhlIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgbWV0aG9kICovCisJCWlmIChjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDMsIDIsICZyZXQsCisJCQkJICBBRERSKCJpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IiksCisJCQkJICByb290LAorCQkJCSAgQUREUihpYm1fYXJjaGl0ZWN0dXJlX3ZlYykpID09IDApIHsKKwkJCS8qIHRoZSBjYWxsIGV4aXN0cy4uLiAqLworCQkJaWYgKHJldCkKKwkJCQlwcm9tX3ByaW50ZigiV0FSTklORzogaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUiCisJCQkJCSAgICAiLXN1cHBvcnQgY2FsbCBGQUlMRUQhXG4iKTsKKwkJCWNhbGxfcHJvbSgiY2xvc2UiLCAxLCAwLCByb290KTsKKwkJCXJldHVybjsKKwkJfQorCQljYWxsX3Byb20oImNsb3NlIiwgMSwgMCwgcm9vdCk7CisJfQorCisJLyogbm8gaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBjYWxsLCB0cnkgdGhlIG9sZCB3YXkgKi8KIAllbGZsb2FkZXIgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvcGFja2FnZXMvZWxmLWxvYWRlciIpKTsKIAlpZiAoZWxmbG9hZGVyID09IDApIHsKIAkJcHJvbV9wcmludGYoImNvdWxkbid0IG9wZW4gL3BhY2thZ2VzL2VsZi1sb2FkZXJcbiIpOwpAQCAtMTUxOCw2ICsxNjIzLDE1IEBACiAJCQlpZiAoc3Ryc3RyKHAsIFJFTE9DKCJQb3dlciBNYWNpbnRvc2giKSkgfHwKIAkJCSAgICBzdHJzdHIocCwgUkVMT0MoIk1hY1JJU0MiKSkpCiAJCQkJcmV0dXJuIFBMQVRGT1JNX1BPV0VSTUFDOworI2lmZGVmIENPTkZJR19QUEM2NAorCQkJLyogV2UgbXVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgZGV0ZWN0IHRoZSBJQk0gQ2VsbAorCQkJICogYmxhZGVzIGFzIHBTZXJpZXMgZHVlIHRvIHNvbWUgZmlybXdhcmUgaXNzdWVzLAorCQkJICogc28gd2UgZG8gaXQgaGVyZS4KKwkJCSAqLworCQkJaWYgKHN0cnN0cihwLCBSRUxPQygiSUJNLENCRUEiKSkgfHwKKwkJCSAgICBzdHJzdHIocCwgUkVMT0MoIklCTSxDUEJXLTEuMCIpKSkKKwkJCQlyZXR1cm4gUExBVEZPUk1fR0VORVJJQzsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAkJCWkgKz0gc2wgKyAxOwogCQl9CiAJfQpAQCAtMTUyOCwxMiArMTY0MiwxMSBAQAogCSAqICAgIG5vbi1JQk0gZGVzaWducyAhCiAJICogIC0gaXQgaGFzIC9ydGFzCiAJICovCi0JbGVuID0gcHJvbV9nZXRwcm9wKF9wcm9tLT5yb290LCAibW9kZWwiLAorCWxlbiA9IHByb21fZ2V0cHJvcChfcHJvbS0+cm9vdCwgImRldmljZV90eXBlIiwKIAkJCSAgIGNvbXBhdCwgc2l6ZW9mKGNvbXBhdCktMSk7CiAJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm4gUExBVEZPUk1fR0VORVJJQzsKLQljb21wYXRbbGVuXSA9IDA7Ci0JaWYgKHN0cmNtcChjb21wYXQsICJjaHJwIikpCisJaWYgKHN0cmNtcChjb21wYXQsIFJFTE9DKCJjaHJwIikpKQogCQlyZXR1cm4gUExBVEZPUk1fR0VORVJJQzsKIAogCS8qIERlZmF1bHQgdG8gcFNlcmllcy4gV2UgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBydW5uaW5nIExQQVIgKi8KQEAgLTE5NTQsMTAgKzIwNjcsNDUgQEAKIAogfQogCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9kZXZpY2VfdHJlZSh2b2lkKQorI2lmZGVmIENPTkZJR19QUENfTUFQTEUKKy8qIFBJQlMgVmVyc2lvbiAxLjA1LjAwMDAgMDQvMjYvMjAwNSBoYXMgYW4gaW5jb3JyZWN0IC9odC9pc2EvcmFuZ2VzIHByb3BlcnR5LgorICogVGhlIHZhbHVlcyBhcmUgYmFkLCBhbmQgaXQgZG9lc24ndCBldmVuIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBjZWxscy4gKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9kZXZpY2VfdHJlZV9tYXBsZSh2b2lkKQogeworCXBoYW5kbGUgaXNhOworCXUzMiBpc2FfcmFuZ2VzWzZdOworCisJaXNhID0gY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgQUREUigiL2h0QDAvaXNhQDQiKSk7CisJaWYgKCFQSEFORExFX1ZBTElEKGlzYSkpCisJCXJldHVybjsKKworCWlmIChwcm9tX2dldHByb3AoaXNhLCAicmFuZ2VzIiwgaXNhX3Jhbmdlcywgc2l6ZW9mKGlzYV9yYW5nZXMpKQorCQk9PSBQUk9NX0VSUk9SKQorCQlyZXR1cm47CisKKwlpZiAoaXNhX3Jhbmdlc1swXSAhPSAweDEgfHwKKwkJaXNhX3Jhbmdlc1sxXSAhPSAweGY0MDAwMDAwIHx8CisJCWlzYV9yYW5nZXNbMl0gIT0gMHgwMDAxMDAwMCkKKwkJcmV0dXJuOworCisJcHJvbV9wcmludGYoImZpeGluZyB1cCBib2d1cyBJU0EgcmFuZ2Ugb24gTWFwbGUuLi5cbiIpOworCisJaXNhX3Jhbmdlc1swXSA9IDB4MTsKKwlpc2FfcmFuZ2VzWzFdID0gMHgwOworCWlzYV9yYW5nZXNbMl0gPSAweDAxMDAyMDAwOyAvKiBJTyBzcGFjZTsgUENJIGRldmljZSA9IDQgKi8KKwlpc2FfcmFuZ2VzWzNdID0gMHgwOworCWlzYV9yYW5nZXNbNF0gPSAweDA7CisJaXNhX3Jhbmdlc1s1XSA9IDB4MDAwMTAwMDA7CisJcHJvbV9zZXRwcm9wKGlzYSwgIi9odEAwL2lzYUA0IiwgInJhbmdlcyIsCisJCQlpc2FfcmFuZ2VzLCBzaXplb2YoaXNhX3JhbmdlcykpOworfQorI2Vsc2UKKyNkZWZpbmUgZml4dXBfZGV2aWNlX3RyZWVfbWFwbGUoKQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgJiYgZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpCitzdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfZGV2aWNlX3RyZWVfcG1hYyh2b2lkKQorewogCXBoYW5kbGUgdTMsIGkyYywgbXBpYzsKIAl1MzIgdTNfcmV2OwogCXUzMiBpbnRlcnJ1cHRzWzJdOwpAQCAtMTk5NCw5ICsyMTQyLDE2IEBACiAJcGFyZW50ID0gKHUzMiltcGljOwogCXByb21fc2V0cHJvcChpMmMsICIvdTNAMCxmODAwMDAwMC9pMmNAZjgwMDEwMDAiLCAiaW50ZXJydXB0LXBhcmVudCIsCiAJCSAgICAgJnBhcmVudCwgc2l6ZW9mKHBhcmVudCkpOwotI2VuZGlmCiB9CisjZWxzZQorI2RlZmluZSBmaXh1cF9kZXZpY2VfdHJlZV9wbWFjKCkKKyNlbmRpZgogCitzdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfZGV2aWNlX3RyZWUodm9pZCkKK3sKKwlmaXh1cF9kZXZpY2VfdHJlZV9tYXBsZSgpOworCWZpeHVwX2RldmljZV90cmVlX3BtYWMoKTsKK30KIAogc3RhdGljIHZvaWQgX19pbml0IHByb21fZmluZF9ib290X2NwdSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYmNiODM1Ny4uNGE2NzdkMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCkBAIC01MzgsNyArNTM4LDcgQEAKIAkJZG9fc3lzY2FsbF90cmFjZSgpOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQotCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsCisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAJCQkJICAgIEFVRElUX0FSQ0hfUFBDLAogI2Vsc2UKQEAgLTU1Niw4ICs1NTYsNyBAQAogI2VuZGlmCiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LAotCQkJCSAgIChyZWdzLT5jY3ImMHgxMDAwKT9BVURJVFNDX0ZBSUxVUkU6QVVESVRTQ19TVUNDRVNTLAorCQlhdWRpdF9zeXNjYWxsX2V4aXQoKHJlZ3MtPmNjciYweDEwMDApP0FVRElUU0NfRkFJTFVSRTpBVURJVFNDX1NVQ0NFU1MsCiAJCQkJICAgcmVncy0+cmVzdWx0KTsKIAogCWlmICgodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCmluZGV4IDQ1NjI4NmMuLjljOWFkMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwpAQCAtMjU4LDExICsyNTgsMTEgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCiAJaWYgKCFtYWNoaW5lX2lzKHBzZXJpZXMpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlydGFzX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicnRhcyIpOwogCWlmIChydGFzX25vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRU5PREVWOwogCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgicHBjNjQvcnRhcy9wcm9ncmVzcyIsIFNfSVJVR098U19JV1VTUiwgTlVMTCk7CiAJaWYgKGVudHJ5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCAwNjYzNmM5Li4wMTEyMzE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtNTc4LDE4ICs1NzgsMTggQEAKIAkgKiBXZSB1c2UgIndhaXRpbmciIHRvIGluZGljYXRlIG91ciBzdGF0ZS4gIEFzIGxvbmcKIAkgKiBhcyBpdCBpcyA+MCwgd2UgYXJlIHN0aWxsIHRyeWluZyB0byBhbGwgam9pbiB1cC4KIAkgKiBJZiBpdCBnb2VzIHRvIDAsIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGpvaW5lZCB1cCBhbmQKLQkgKiBvbmUgdGhyZWFkIGdvdCBIX0NvbnRpbnVlLiAgSWYgYW55IGVycm9yIGhhcHBlbnMsCisJICogb25lIHRocmVhZCBnb3QgSF9DT05USU5VRS4gIElmIGFueSBlcnJvciBoYXBwZW5zLAogCSAqIHdlIHNldCBpdCB0byA8MC4KIAkgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZG8gewogCQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0pPSU4pOwogCQlzbXBfcm1iKCk7Ci0JfSB3aGlsZSAocmMgPT0gSF9TdWNjZXNzICYmIGRhdGEtPndhaXRpbmcgPiAwKTsKLQlpZiAocmMgPT0gSF9TdWNjZXNzKQorCX0gd2hpbGUgKHJjID09IEhfU1VDQ0VTUyAmJiBkYXRhLT53YWl0aW5nID4gMCk7CisJaWYgKHJjID09IEhfU1VDQ0VTUykKIAkJZ290byBvdXQ7CiAKLQlpZiAocmMgPT0gSF9Db250aW51ZSkgeworCWlmIChyYyA9PSBIX0NPTlRJTlVFKSB7CiAJCWRhdGEtPndhaXRpbmcgPSAwOwogCQlkYXRhLT5hcmdzLT5hcmdzW2RhdGEtPmFyZ3MtPm5hcmdzXSA9CiAJCQlydGFzX2NhbGwoaWJtX3N1c3BlbmRfbWVfdG9rZW4sIDAsIDEsIE5VTEwpOwpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJCQlwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELGkpOwogCX0gZWxzZSB7CiAJCWRhdGEtPndhaXRpbmcgPSAtRUJVU1k7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb24gSF9Kb2luIGh5cGVydmlzb3IgY2FsbFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb24gSF9KT0lOIGh5cGVydmlzb3IgY2FsbFxuIik7CiAJfQogCiBvdXQ6CkBAIC02MjQsNyArNjI0LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBkb2luZyBnbG9iYWwgam9pblxuIik7CiAKIAkvKiBQcm9kIGVhY2ggQ1BVLiAgVGhpcyB3b24ndCBodXJ0LCBhbmQgd2lsbCB3YWtlCi0JICogYW55b25lIHdlIHN1Y2Nlc3NmdWxseSBwdXQgdG8gc2xlZXAgd2l0aCBIX0pvaW4KKwkgKiBhbnlvbmUgd2Ugc3VjY2Vzc2Z1bGx5IHB1dCB0byBzbGVlcCB3aXRoIEhfSk9JTi4KIAkgKi8KIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPRCwgaSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCBjNjA3ZjNiLi42ODRhYjFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC00NjIsNiArNDYzLDI5IEBACiBlYXJseV9wYXJhbSgieG1vbiIsIGVhcmx5X3htb24pOwogI2VuZGlmCiAKK3N0YXRpYyBfX2luaXQgaW50IGFkZF9wY3Nwa3Iodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCWludCByZXQ7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJwbnBQTlAsMTAwIik7CisJb2Zfbm9kZV9wdXQobnApOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInBjc3BrciIsIC0xKTsKKwlpZiAoIXBkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworCisJcmV0dXJuIHJldDsKK30KK2RldmljZV9pbml0Y2FsbChhZGRfcGNzcGtyKTsKKwogdm9pZCBwcm9iZV9tYWNoaW5lKHZvaWQpCiB7CiAJZXh0ZXJuIHN0cnVjdCBtYWNoZGVwX2NhbGxzIF9fbWFjaGluZV9kZXNjX3N0YXJ0OwpAQCAtNDkyLDMgKzUxNiwxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgJXMgbWFjaGluZSBkZXNjcmlwdGlvblxuIiwgcHBjX21kLm5hbWUpOwogfQorCitpbnQgY2hlY2tfbGVnYWN5X2lvcG9ydCh1bnNpZ25lZCBsb25nIGJhc2VfcG9ydCkKK3sKKwlpZiAocHBjX21kLmNoZWNrX2xlZ2FjeV9pb3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBwY19tZC5jaGVja19sZWdhY3lfaW9wb3J0KGJhc2VfcG9ydCk7Cit9CitFWFBPUlRfU1lNQk9MKGNoZWNrX2xlZ2FjeV9pb3BvcnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IGE3MmJmNWQuLjY5YWMyNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlIDxhc20va2dkYi5oPgogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHBsYXRmb3JtX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBib290eF9pbml0KHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcGh5cyk7CiAKIGJvb3RfaW5mb3NfdCAqYm9vdF9pbmZvczsKQEAgLTEzOCwxMiArMTM3LDcgQEAKIAkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIHNpemVvZihjbWRfbGluZSkpOwogI2VuZGlmIC8qIENPTkZJR19DTURMSU5FICovCiAKLSNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KIAlwcm9iZV9tYWNoaW5lKCk7Ci0jZWxzZQotCS8qIEJhc2UgaW5pdCBiYXNlZCBvbiBtYWNoaW5lIHR5cGUuIE9ic29sb2V0ZSwgcGxlYXNlIGtpbGwgISAqLwotCXBsYXRmb3JtX2luaXQoKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHXzZ4eAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DQU5fRE9aRSkgfHwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA1OWFhOTJjLi40NDY3YzQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0yMTUsMTIgKzIxNSwxMCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBzdGFiIC8gU0xCIG1hbmFnZW1lbnQgZXhjZXB0IG9uIGlTZXJpZXMKIAkgKi8KLQlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpIHsKLQkJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCi0JCQlzbGJfaW5pdGlhbGl6ZSgpOwotCQllbHNlCi0JCQlzdGFiX2luaXRpYWxpemUoZ2V0X3BhY2EoKS0+c3RhYl9yZWFsKTsKLQl9CisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJCXNsYl9pbml0aWFsaXplKCk7CisJZWxzZSBpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX3JlYWwpOwogCiAJREJHKCIgPC0gZWFybHlfc2V0dXAoKVxuIik7CiB9CkBAIC01OTYsMTQgKzU5NCw2IEBACiAJcHJpbnRrKCJbdGVybWluYXRlXSUwNHggJXNcbiIsIHNyYywgbXNnKTsKIH0KIAotaW50IGNoZWNrX2xlZ2FjeV9pb3BvcnQodW5zaWduZWQgbG9uZyBiYXNlX3BvcnQpCi17Ci0JaWYgKHBwY19tZC5jaGVja19sZWdhY3lfaW9wb3J0ID09IE5VTEwpCi0JCXJldHVybiAwOwotCXJldHVybiBwcGNfbWQuY2hlY2tfbGVnYWN5X2lvcG9ydChiYXNlX3BvcnQpOwotfQotRVhQT1JUX1NZTUJPTChjaGVja19sZWdhY3lfaW9wb3J0KTsKLQogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5jcHVfZGllKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggMDFlM2MwOC4uOGZkZWNhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC04MDMsMTAgKzgwMywxMyBAQAogCQlpZiAoX19nZXRfdXNlcihjbWNwLCAmdWNwLT51Y19yZWdzKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQltY3AgPSAoc3RydWN0IG1jb250ZXh0IF9fdXNlciAqKSh1NjQpY21jcDsKKwkJLyogbm8gbmVlZCB0byBjaGVjayBhY2Nlc3Nfb2sobWNwKSwgc2luY2UgbWNwIDwgNEdCICovCiAJfQogI2Vsc2UKIAlpZiAoX19nZXRfdXNlcihtY3AsICZ1Y3AtPnVjX3JlZ3MpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgbWNwLCBzaXplb2YoKm1jcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKICNlbmRpZgogCXJlc3RvcmVfc2lnbWFzaygmc2V0KTsKIAlpZiAocmVzdG9yZV91c2VyX3JlZ3MocmVncywgbWNwLCBzaWcpKQpAQCAtOTA4LDEzICs5MTEsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2lnX2RiZ19vcCBvcDsKIAlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIHRtcDsKIAl1bnNpZ25lZCBsb25nIG5ld19tc3IgPSByZWdzLT5tc3I7CiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKIAl1bnNpZ25lZCBsb25nIG5ld19kYmNyMCA9IGN1cnJlbnQtPnRocmVhZC5kYmNyMDsKICNlbmRpZgogCiAJZm9yIChpPTA7IGk8bmRiZzsgaSsrKSB7Ci0JCWlmIChfX2NvcHlfZnJvbV91c2VyKCZvcCwgZGJnLCBzaXplb2Yob3ApKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZvcCwgZGJnICsgaSwgc2l6ZW9mKG9wKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc3dpdGNoIChvcC5kYmdfdHlwZSkgewogCQljYXNlIFNJR19EQkdfU0lOR0xFX1NURVBQSU5HOgpAQCAtOTU5LDYgKzk2MywxMSBAQAogCWN1cnJlbnQtPnRocmVhZC5kYmNyMCA9IG5ld19kYmNyMDsKICNlbmRpZgogCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGN0eCwgc2l6ZW9mKCpjdHgpKQorCSAgICB8fCBfX2dldF91c2VyKHRtcCwgKHU4IF9fdXNlciAqKSBjdHgpCisJICAgIHx8IF9fZ2V0X3VzZXIodG1wLCAodTggX191c2VyICopIChjdHggKyAxKSAtIDEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCS8qCiAJICogSWYgd2UgZ2V0IGEgZmF1bHQgY29weWluZyB0aGUgY29udGV4dCBpbnRvIHRoZSBrZXJuZWwncwogCSAqIGltYWdlIG9mIHRoZSB1c2VyJ3MgcmVnaXN0ZXJzLCB3ZSBjYW4ndCBqdXN0IHJldHVybiAtRUZBVUxUCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAyN2Y2NWI5Li5jMmRiNjQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTE4Miw2ICsxODIsOCBAQAogCWVyciB8PSBfX2dldF91c2VyKG1zciwgJnNjLT5ncF9yZWdzW1BUX01TUl0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisJaWYgKHZfcmVncyAmJiAhYWNjZXNzX29rKFZFUklGWV9SRUFELCB2X3JlZ3MsIDM0ICogc2l6ZW9mKHZlY3RvcjEyOCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAkvKiBDb3B5IDMzIHZlYyByZWdpc3RlcnMgKHZyMC4uMzEgYW5kIHZzY3IpIGZyb20gdGhlIHN0YWNrICovCiAJaWYgKHZfcmVncyAhPSAwICYmIChtc3IgJiBNU1JfVkVDKSAhPSAwKQogCQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcihjdXJyZW50LT50aHJlYWQudnIsIHZfcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCA3MzU2MGVmLi41YmMyNTg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCkBAIC0yNzksNyArMjc5LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgc3lzZnNfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCitzdGF0aWMgaW50IHN5c2ZzX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgaW50KShsb25nKWhjcHU7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgc3lzZnNfY3B1X25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzeXNmc19jcHVfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSBzeXNmc19jcHVfbm90aWZ5LAogfTsKIApAQCAtMzIyLDEzICszMjIsMzEgQEAKIAkJfQogCX0KIH0KKworaW50IHN5c2ZzX2FkZF9kZXZpY2VfdG9fbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBpbnQgbmlkKQoreworCXN0cnVjdCBub2RlICpub2RlID0gJm5vZGVfZGV2aWNlc1tuaWRdOworCXJldHVybiBzeXNmc19jcmVhdGVfbGluaygmbm9kZS0+c3lzZGV2LmtvYmosICZkZXYtPmtvYmosCisJCQlrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOworfQorCit2b2lkIHN5c2ZzX3JlbW92ZV9kZXZpY2VfZnJvbV9ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGludCBuaWQpCit7CisJc3RydWN0IG5vZGUgKm5vZGUgPSAmbm9kZV9kZXZpY2VzW25pZF07CisJc3lzZnNfcmVtb3ZlX2xpbmsoJm5vZGUtPnN5c2Rldi5rb2JqLCBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOworfQorCiAjZWxzZQogc3RhdGljIHZvaWQgcmVnaXN0ZXJfbm9kZXModm9pZCkKIHsKIAlyZXR1cm47CiB9CisKICNlbmRpZgogCitFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19hZGRfZGV2aWNlX3RvX25vZGUpOworRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2RldmljZV9mcm9tX25vZGUpOworCiAvKiBPbmx5IHZhbGlkIGlmIENQVSBpcyBwcmVzZW50LiAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19waHlzaWNhbF9pZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c3RibC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUwppbmRleCAxYWQ1NWYwLi4yNmVkMWY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c3RibC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMKQEAgLTMyMiwzICszMjIsMjYgQEAKIENPTVBBVF9TWVMocHNlbGVjdDYpCiBDT01QQVRfU1lTKHBwb2xsKQogU1lTQ0FMTCh1bnNoYXJlKQorU1lTQ0FMTChzcGxpY2UpCitTWVNDQUxMKHRlZSkKK1NZU0NBTEwodm1zcGxpY2UpCitDT01QQVRfU1lTKG9wZW5hdCkKK1NZU0NBTEwobWtkaXJhdCkKK1NZU0NBTEwobWtub2RhdCkKK1NZU0NBTEwoZmNob3duYXQpCitDT01QQVRfU1lTKGZ1dGltZXNhdCkKK1NZU1goc3lzX25ld2ZzdGF0YXQsIHN5c19mc3RhdGF0NjQsIHN5c19mc3RhdGF0NjQpCitTWVNDQUxMKHVubGlua2F0KQorU1lTQ0FMTChyZW5hbWVhdCkKK1NZU0NBTEwobGlua2F0KQorU1lTQ0FMTChzeW1saW5rYXQpCitTWVNDQUxMKHJlYWRsaW5rYXQpCitTWVNDQUxMKGZjaG1vZGF0KQorU1lTQ0FMTChmYWNjZXNzYXQpCitDT01QQVRfU1lTKGdldF9yb2J1c3RfbGlzdCkKK0NPTVBBVF9TWVMoc2V0X3JvYnVzdF9saXN0KQorCisvKgorICogcGxlYXNlIGFkZCBuZXcgY2FsbHMgdG8gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9jYWxsYmFja3MuYworICogYXMgd2VsbCB3aGVuIGFwcHJvcHJpYXRlLgorICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggNGNiZGUyMS4uMDY0YTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2lvX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiAJdW5zaWduZWQgbG9uZyBtc3IgPSByZWdzLT5tc3I7CiAJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgaW50ICpuaXAgPSAodW5zaWduZWQgaW50ICopcmVncy0+bmlwOwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgJiYgQ09ORklHX1BQQzMyICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwOCw4ICszMDgsOCBAQAogCiB2b2lkIG1hY2hpbmVfY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotI2lmZGVmIENPTkZJR19QUEM2NAogCWludCByZWNvdmVyID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlYXNvbiA9IGdldF9tY19yZWFzb24ocmVncyk7CiAKIAkvKiBTZWUgaWYgYW55IG1hY2hpbmUgZGVwZW5kZW50IGNhbGxzICovCiAJaWYgKHBwY19tZC5tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbikKQEAgLTMxNyw4ICszMTcsNiBAQAogCiAJaWYgKHJlY292ZXIpCiAJCXJldHVybjsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyByZWFzb24gPSBnZXRfbWNfcmVhc29uKHJlZ3MpOwogCiAJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQlyZWdzLT5tc3IgfD0gTVNSX1JJOwpAQCAtNDYyLDcgKzQ2MCw2IEBACiAJICogYWRkaXRpb25hbCBpbmZvLCBlLmcuIGJ1cyBlcnJvciByZWdpc3RlcnMuCiAJICovCiAJcGxhdGZvcm1fbWFjaGluZV9jaGVjayhyZWdzKTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCWlmIChkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKHJlZ3MpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCAxM2M2NTViLi45NzEwMjBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2luZ2xlKHRvX3Zpb19kZXYoZGV2KS0+aW9tbXVfdGFibGUsIHZhZGRyLCBzaXplLAotCQkJZGlyZWN0aW9uKTsKKwkJCX4wdWwsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpb191bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewogCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCB0b192aW9fZGV2KGRldiktPmlvbW11X3RhYmxlLCBzZ2xpc3QsCi0JCQluZWxlbXMsIGRpcmVjdGlvbik7CisJCQluZWxlbXMsIH4wdWwsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpb191bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LApAQCAtMjI5LDcgKzIyOSw3IEBACiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewogCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudCh0b192aW9fZGV2KGRldiktPmlvbW11X3RhYmxlLCBzaXplLAotCQkJZG1hX2hhbmRsZSwgZmxhZyk7CisJCQlkbWFfaGFuZGxlLCB+MHVsLCBmbGFnKTsKIH0KIAogc3RhdGljIHZvaWQgdmlvX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggNWFlYTA5MC4uZmRiYmE0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTE3NywxNSArMTc3LDE1IEBACiAKIAkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KIAkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbiB0aGUKLQkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGx5LCBpbiB0aGUgY2FzZSBvZiBhbgotCSAqIGVycm9uZW91cyBmYXVsdCBvY2N1cmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCisJICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIGFuCisJICogZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCiAJICogd2Ugd2lsbCBkZWFkbG9jayBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdCBhZ2FpbnN0IHRoZQogCSAqIGFkZHJlc3Mgc3BhY2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5IHJlZmVyZW5jZXMgdXNlcgogCSAqIHNwYWNlIGZyb20gd2VsbCBkZWZpbmVkIGFyZWFzIG9mIGNvZGUsIHdoaWNoIGFyZSBsaXN0ZWQgaW4gdGhlCiAJICogZXhjZXB0aW9ucyB0YWJsZS4KIAkgKgogCSAqIEFzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZhdWx0cyB3aWxsIGJlIHZhbGlkIHdlIHdpbGwgb25seSBwZXJmb3JtCi0JICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsdHkgb2YgYSBkZWFkbG9jay4KKwkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVjayB3aGVuIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYSBkZWFkbG9jay4KIAkgKiBBdHRlbXB0IHRvIGxvY2sgdGhlIGFkZHJlc3Mgc3BhY2UsIGlmIHdlIGNhbm5vdCB3ZSB0aGVuIHZhbGlkYXRlIHRoZQogCSAqIHNvdXJjZS4gIElmIHRoaXMgaXMgaW52YWxpZCB3ZSBjYW4gc2tpcCB0aGUgYWRkcmVzcyBzcGFjZSBjaGVjaywKIAkgKiB0aHVzIGF2b2lkaW5nIHRoZSBkZWFkbG9jay4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggNzM3MGY5Zi4uMjY2YjhiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTMwLDEzICszMCw2NiBAQAogI2RlZmluZSBOVU1fTE9XX0FSRUFTCSgweDEwMDAwMDAwMFVMID4+IFNJRF9TSElGVCkKICNkZWZpbmUgTlVNX0hJR0hfQVJFQVMJKFBHVEFCTEVfUkFOR0UgPj4gSFRMQl9BUkVBX1NISUZUKQogCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNkZWZpbmUgSFVHRVBURV9JTkRFWF9TSVpFCShQTURfU0hJRlQtSFBBR0VfU0hJRlQpCisjZWxzZQorI2RlZmluZSBIVUdFUFRFX0lOREVYX1NJWkUJKFBVRF9TSElGVC1IUEFHRV9TSElGVCkKKyNlbmRpZgorI2RlZmluZSBQVFJTX1BFUl9IVUdFUFRFCSgxIDw8IEhVR0VQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgSFVHRVBURV9UQUJMRV9TSVpFCShzaXplb2YocHRlX3QpIDw8IEhVR0VQVEVfSU5ERVhfU0laRSkKKworI2RlZmluZSBIVUdFUERfU0hJRlQJCShIUEFHRV9TSElGVCArIEhVR0VQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgSFVHRVBEX1NJWkUJCSgxVUwgPDwgSFVHRVBEX1NISUZUKQorI2RlZmluZSBIVUdFUERfTUFTSwkJKH4oSFVHRVBEX1NJWkUtMSkpCisKKyNkZWZpbmUgaHVnZV9wZ3RhYmxlX2NhY2hlCShwZ3RhYmxlX2NhY2hlW0hVR0VQVEVfQ0FDSEVfTlVNXSkKKworLyogRmxhZyB0byBtYXJrIGh1Z2UgUEQgcG9pbnRlcnMuICBUaGlzIG1lYW5zIHBtZF9iYWQoKSBhbmQgcHVkX2JhZCgpCisgKiB3aWxsIGNob2tlIG9uIHBvaW50ZXJzIHRvIGh1Z2VwdGUgdGFibGVzLCB3aGljaCBpcyBoYW5keSBmb3IKKyAqIGNhdGNoaW5nIHNjcmV3dXBzIGVhcmx5LiAqLworI2RlZmluZSBIVUdFUERfT0sJMHgxCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZDsgfSBodWdlcGRfdDsKKworI2RlZmluZSBodWdlcGRfbm9uZShocGQpCSgoaHBkKS5wZCA9PSAwKQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcGRfcGFnZShodWdlcGRfdCBocGQpCit7CisJQlVHX09OKCEoaHBkLnBkICYgSFVHRVBEX09LKSk7CisJcmV0dXJuIChwdGVfdCAqKShocGQucGQgJiB+SFVHRVBEX09LKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqaHVnZXB0ZV9vZmZzZXQoaHVnZXBkX3QgKmhwZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGlkeCA9ICgoYWRkciA+PiBIUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfSFVHRVBURS0xKSk7CisJcHRlX3QgKmRpciA9IGh1Z2VwZF9wYWdlKCpocGRwKTsKKworCXJldHVybiBkaXIgKyBpZHg7Cit9CisKK3N0YXRpYyBpbnQgX19odWdlcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBodWdlcGRfdCAqaHBkcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwdGVfdCAqbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhodWdlX3BndGFibGVfY2FjaGUsCisJCQkJICAgICAgR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCisJaWYgKCEgbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJaWYgKCFodWdlcGRfbm9uZSgqaHBkcCkpCisJCWttZW1fY2FjaGVfZnJlZShodWdlX3BndGFibGVfY2FjaGUsIG5ldyk7CisJZWxzZQorCQlocGRwLT5wZCA9ICh1bnNpZ25lZCBsb25nKW5ldyB8IEhVR0VQRF9PSzsKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKIC8qIE1vZGVsbGVkIGFmdGVyIGZpbmRfbGludXhfcHRlKCkgKi8KIHB0ZV90ICpodWdlX3B0ZV9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGc7CiAJcHVkX3QgKnB1OwotCXBtZF90ICpwbTsKLQlwdGVfdCAqcHQ7CiAKIAlCVUdfT04oISBpbl9odWdlcGFnZV9hcmVhKG1tLT5jb250ZXh0LCBhZGRyKSk7CiAKQEAgLTQ2LDI2ICs5OSwxNCBAQAogCWlmICghcGdkX25vbmUoKnBnKSkgewogCQlwdSA9IHB1ZF9vZmZzZXQocGcsIGFkZHIpOwogCQlpZiAoIXB1ZF9ub25lKCpwdSkpIHsKLQkJCXBtID0gcG1kX29mZnNldChwdSwgYWRkcik7CiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQkJCS8qIEN1cnJlbnRseSwgd2UgdXNlIHRoZSBub3JtYWwgUFRFIG9mZnNldCB3aXRoaW4gZnVsbAotCQkJICogc2l6ZSBQVEUgcGFnZXMsIHRodXMgb3VyIGh1Z2UgUFRFcyBhcmUgc2NhdHRlcmVkIGluCi0JCQkgKiB0aGUgUFRFIHBhZ2UgYW5kIHdlIGRvIHdhc3RlIHNvbWUuIFdlIG1heSBjaGFuZ2UKLQkJCSAqIHRoYXQgaW4gdGhlIGZ1dHVyZSwgYnV0IHRoZSBjdXJyZW50IG1lY2FuaXNtIGtlZXBzCi0JCQkgKiB0aGluZ3MgbXVjaCBzaW1wbGVyCi0JCQkgKi8KLQkJCWlmICghcG1kX25vbmUoKnBtKSkgewotCQkJCS8qIE5vdGU6IHB0ZV9vZmZzZXRfKiBhcmUgYWxsIGVxdWl2YWxlbnQgb24KLQkJCQkgKiBwcGM2NCBhcyB3ZSBkb24ndCBoYXZlIEhJR0hNRU0KLQkJCQkgKi8KLQkJCQlwdCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtLCBhZGRyKTsKLQkJCQlyZXR1cm4gcHQ7Ci0JCQl9Ci0jZWxzZSAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCQkJLyogT24gNGsgcGFnZXMsIHdlIHB1dCBodWdlIFBURXMgaW4gdGhlIFBNRCBwYWdlICovCi0JCQlwdCA9IChwdGVfdCAqKXBtOwotCQkJcmV0dXJuIHB0OwotI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCisJCQlwbWRfdCAqcG07CisJCQlwbSA9IHBtZF9vZmZzZXQocHUsIGFkZHIpOworCQkJaWYgKCFwbWRfbm9uZSgqcG0pKQorCQkJCXJldHVybiBodWdlcHRlX29mZnNldCgoaHVnZXBkX3QgKilwbSwgYWRkcik7CisjZWxzZQorCQkJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KChodWdlcGRfdCAqKXB1LCBhZGRyKTsKKyNlbmRpZgogCQl9CiAJfQogCkBAIC03Niw4ICsxMTcsNyBAQAogewogCXBnZF90ICpwZzsKIAlwdWRfdCAqcHU7Ci0JcG1kX3QgKnBtOwotCXB0ZV90ICpwdDsKKwlodWdlcGRfdCAqaHBkcCA9IE5VTEw7CiAKIAlCVUdfT04oISBpbl9odWdlcGFnZV9hcmVhKG1tLT5jb250ZXh0LCBhZGRyKSk7CiAKQEAgLTg3LDIzICsxMjcsMTgyIEBACiAJcHUgPSBwdWRfYWxsb2MobW0sIHBnLCBhZGRyKTsKIAogCWlmIChwdSkgewotCQlwbSA9IHBtZF9hbGxvYyhtbSwgcHUsIGFkZHIpOwotCQlpZiAocG0pIHsKICNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotCQkJLyogU2VlIGNvbW1lbnQgaW4gaHVnZV9wdGVfb2Zmc2V0LiBOb3RlIHRoYXQgaWYgd2UgZXZlcgotCQkJICogd2FudCB0byBwdXQgdGhlIHBhZ2Ugc2l6ZSBpbiB0aGUgUE1ELCB3ZSB3b3VsZCBoYXZlCi0JCQkgKiB0byBvcGVuIGNvZGUgb3VyIG93biBwdGVfYWxsb2MqIGZ1bmN0aW9uIGluIG9yZGVyCi0JCQkgKiB0byBwb3B1bGF0ZSBhbmQgc2V0IHRoZSBzaXplIGF0b21pY2FsbHkKLQkJCSAqLwotCQkJcHQgPSBwdGVfYWxsb2NfbWFwKG1tLCBwbSwgYWRkcik7Ci0jZWxzZSAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCQkJcHQgPSAocHRlX3QgKilwbTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCQkJcmV0dXJuIHB0OwotCQl9CisJCXBtZF90ICpwbTsKKwkJcG0gPSBwbWRfYWxsb2MobW0sIHB1LCBhZGRyKTsKKwkJaWYgKHBtKQorCQkJaHBkcCA9IChodWdlcGRfdCAqKXBtOworI2Vsc2UKKwkJaHBkcCA9IChodWdlcGRfdCAqKXB1OworI2VuZGlmCiAJfQogCi0JcmV0dXJuIE5VTEw7CisJaWYgKCEgaHBkcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaHVnZXBkX25vbmUoKmhwZHApICYmIF9faHVnZXB0ZV9hbGxvYyhtbSwgaHBkcCwgYWRkcikpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KGhwZHAsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2h1Z2VwdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgaHVnZXBkX3QgKmhwZHApCit7CisJcHRlX3QgKmh1Z2VwdGUgPSBodWdlcGRfcGFnZSgqaHBkcCk7CisKKwlocGRwLT5wZCA9IDA7CisJdGxiLT5uZWVkX2ZsdXNoID0gMTsKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcGd0YWJsZV9mcmVlX2NhY2hlKGh1Z2VwdGUsIEhVR0VQVEVfQ0FDSEVfTlVNLAorCQkJCQkJIEhVR0VQVEVfVEFCTEVfU0laRS0xKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworc3RhdGljIHZvaWQgaHVnZXRsYl9mcmVlX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQoreworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlzdGFydCA9IGFkZHI7CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocG1kX25vbmUoKnBtZCkpCisJCQljb250aW51ZTsKKwkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcG1kKTsKKwl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKworCXN0YXJ0ICY9IFBVRF9NQVNLOworCWlmIChzdGFydCA8IGZsb29yKQorCQlyZXR1cm47CisJaWYgKGNlaWxpbmcpIHsKKwkJY2VpbGluZyAmPSBQVURfTUFTSzsKKwkJaWYgKCFjZWlsaW5nKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZW5kIC0gMSA+IGNlaWxpbmcgLSAxKQorCQlyZXR1cm47CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgc3RhcnQpOworCXB1ZF9jbGVhcihwdWQpOworCXBtZF9mcmVlX3RsYih0bGIsIHBtZCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaHVnZXRsYl9mcmVlX3B1ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ2RfdCAqcGdkLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQoreworCXB1ZF90ICpwdWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlzdGFydCA9IGFkZHI7CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKKwkJCWNvbnRpbnVlOworCQlodWdldGxiX2ZyZWVfcG1kX3JhbmdlKHRsYiwgcHVkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CisjZWxzZQorCQlpZiAocHVkX25vbmUoKnB1ZCkpCisJCQljb250aW51ZTsKKwkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcHVkKTsKKyNlbmRpZgorCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworCisJc3RhcnQgJj0gUEdESVJfTUFTSzsKKwlpZiAoc3RhcnQgPCBmbG9vcikKKwkJcmV0dXJuOworCWlmIChjZWlsaW5nKSB7CisJCWNlaWxpbmcgJj0gUEdESVJfTUFTSzsKKwkJaWYgKCFjZWlsaW5nKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZW5kIC0gMSA+IGNlaWxpbmcgLSAxKQorCQlyZXR1cm47CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgc3RhcnQpOworCXBnZF9jbGVhcihwZ2QpOworCXB1ZF9mcmVlX3RsYih0bGIsIHB1ZCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHVzZXItbGV2ZWwgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggcGFnZXRhYmxlIGxvY2sgaGVsZC4KKyAqLwordm9pZCBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICoqdGxiLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQoreworCXBnZF90ICpwZ2Q7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwkvKgorCSAqIENvbW1lbnRzIGJlbG93IHRha2UgZnJvbSB0aGUgbm9ybWFsIGZyZWVfcGdkX3JhbmdlKCkuICBUaGV5CisJICogYXBwbHkgaGVyZSB0b28uICBUaGUgdGVzdHMgYWdhaW5zdCBIVUdFUERfTUFTSyBiZWxvdyBhcmUKKwkgKiBlc3NlbnRpYWwsIGJlY2F1c2Ugd2UgKmRvbid0KiB0ZXN0IGZvciB0aGlzIGF0IHRoZSBib3R0b20KKwkgKiBsZXZlbC4gIFdpdGhvdXQgdGhlbSB3ZSdsbCBhdHRlbXB0IHRvIGZyZWUgYSBodWdlcHRlIHRhYmxlCisJICogd2hlbiB3ZSB1bm1hcCBqdXN0IHBhcnQgb2YgaXQsIGV2ZW4gaWYgdGhlcmUgYXJlIG90aGVyCisJICogYWN0aXZlIG1hcHBpbmdzIHVzaW5nIGl0LgorCSAqCisJICogVGhlIG5leHQgZmV3IGxpbmVzIGhhdmUgZ2l2ZW4gdXMgbG90cyBvZiBncmllZi4uLgorCSAqCisJICogV2h5IGFyZSB3ZSB0ZXN0aW5nIEhVR0VQRCogYXQgdGhpcyB0b3AgbGV2ZWw/ICBCZWNhdXNlCisJICogb2Z0ZW4gdGhlcmUgd2lsbCBiZSBubyB3b3JrIHRvIGRvIGF0IGFsbCwgYW5kIHdlJ2QgcHJlZmVyCisJICogbm90IHRvIGdvIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIGJvdHRvbSBqdXN0IHRvIGRpc2NvdmVyCisJICogdGhhdC4KKwkgKgorCSAqIFdoeSBhbGwgdGhlc2UgIi0gMSJzPyAgQmVjYXVzZSAwIHJlcHJlc2VudHMgYm90aCB0aGUgYm90dG9tCisJICogb2YgdGhlIGFkZHJlc3Mgc3BhY2UgYW5kIHRoZSB0b3Agb2YgaXQgKHVzaW5nIC0xIGZvciB0aGUKKwkgKiB0b3Agd291bGRuJ3QgaGVscCBtdWNoOiB0aGUgbWFza3Mgd291bGQgZG8gdGhlIHdyb25nIHRoaW5nKS4KKwkgKiBUaGUgcnVsZSBpcyB0aGF0IGFkZHIgMCBhbmQgZmxvb3IgMCByZWZlciB0byB0aGUgYm90dG9tIG9mCisJICogdGhlIGFkZHJlc3Mgc3BhY2UsIGJ1dCBlbmQgMCBhbmQgY2VpbGluZyAwIHJlZmVyIHRvIHRoZSB0b3AKKwkgKiBDb21wYXJpc29ucyBuZWVkIHRvIHVzZSAiZW5kIC0gMSIgYW5kICJjZWlsaW5nIC0gMSIgKHRob3VnaAorCSAqIHRoYXQgZW5kIDAgY2FzZSBzaG91bGQgYmUgbXl0aGljYWwpLgorCSAqCisJICogV2hlcmV2ZXIgYWRkciBpcyBicm91Z2h0IHVwIG9yIGNlaWxpbmcgYnJvdWdodCBkb3duLCB3ZQorCSAqIG11c3QgYmUgY2FyZWZ1bCB0byByZWplY3QgInRoZSBvcHBvc2l0ZSAwIiBiZWZvcmUgaXQKKwkgKiBjb25mdXNlcyB0aGUgc3Vic2VxdWVudCB0ZXN0cy4gIEJ1dCB3aGF0IGFib3V0IHdoZXJlIGVuZCBpcworCSAqIGJyb3VnaHQgZG93biBieSBIVUdFUERfU0laRSBiZWxvdz8gbm8sIGVuZCBjYW4ndCBnbyBkb3duIHRvCisJICogMCB0aGVyZS4KKwkgKgorCSAqIFdoZXJlYXMgd2Ugcm91bmQgc3RhcnQgKGFkZHIpIGFuZCBjZWlsaW5nIGRvd24sIGJ5IGRpZmZlcmVudAorCSAqIG1hc2tzIGF0IGRpZmZlcmVudCBsZXZlbHMsIGluIG9yZGVyIHRvIHRlc3Qgd2hldGhlciBhIHRhYmxlCisJICogbm93IGhhcyBubyBvdGhlciB2bWFzIHVzaW5nIGl0LCBzbyBjYW4gYmUgZnJlZWQsIHdlIGRvbid0CisJICogYm90aGVyIHRvIHJvdW5kIGZsb29yIG9yIGVuZCB1cCAtIHRoZSB0ZXN0cyBkb24ndCBuZWVkIHRoYXQuCisJICovCisKKwlhZGRyICY9IEhVR0VQRF9NQVNLOworCWlmIChhZGRyIDwgZmxvb3IpIHsKKwkJYWRkciArPSBIVUdFUERfU0laRTsKKwkJaWYgKCFhZGRyKQorCQkJcmV0dXJuOworCX0KKwlpZiAoY2VpbGluZykgeworCQljZWlsaW5nICY9IEhVR0VQRF9NQVNLOworCQlpZiAoIWNlaWxpbmcpCisJCQlyZXR1cm47CisJfQorCWlmIChlbmQgLSAxID4gY2VpbGluZyAtIDEpCisJCWVuZCAtPSBIVUdFUERfU0laRTsKKwlpZiAoYWRkciA+IGVuZCAtIDEpCisJCXJldHVybjsKKworCXN0YXJ0ID0gYWRkcjsKKwlwZ2QgPSBwZ2Rfb2Zmc2V0KCgqdGxiKS0+bW0sIGFkZHIpOworCWRvIHsKKwkJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYSgoKnRsYiktPm1tLT5jb250ZXh0LCBhZGRyKSk7CisJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQorCQkJY29udGludWU7CisJCWh1Z2V0bGJfZnJlZV9wdWRfcmFuZ2UoKnRsYiwgcGdkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CisJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiB9CiAKIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC04NDEsMyArMTA0MCwyNyBAQAogIG91dDoKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgdm9pZCB6ZXJvX2N0b3Iodm9pZCAqYWRkciwga21lbV9jYWNoZV90ICpjYWNoZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwltZW1zZXQoYWRkciwgMCwga21lbV9jYWNoZV9zaXplKGNhY2hlKSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJwYWdlX2luaXQodm9pZCkKK3sKKwlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzE2TV9QQUdFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlodWdlX3BndGFibGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaHVnZXB0ZV9jYWNoZSIsCisJCQkJCSAgICAgICBIVUdFUFRFX1RBQkxFX1NJWkUsCisJCQkJCSAgICAgICBIVUdFUFRFX1RBQkxFX1NJWkUsCisJCQkJCSAgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04gfAorCQkJCQkgICAgICAgU0xBQl9NVVNUX0hXQ0FDSEVfQUxJR04sCisJCQkJCSAgICAgICB6ZXJvX2N0b3IsIE5VTEwpOworCWlmICghIGh1Z2VfcGd0YWJsZV9jYWNoZSkKKwkJcGFuaWMoImh1Z2V0bGJwYWdlX2luaXQoKTogY291bGQgbm90IGNyZWF0ZSBodWdlcHRlIGNhY2hlXG4iKTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChodWdldGxicGFnZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IGJhYmViZDEuLjllMzBmOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMTYyLDcgKzE2MiwxNCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwogCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorLyogSHVnZXBhZ2VzIG5lZWQgb25lIGV4dHJhIGNhY2hlLCBpbml0aWFsaXplZCBpbiBodWdldGxicGFnZS5jLiAgV2UKKyAqIGNhbid0IHB1dCBpbnRvIHRoZSB0YWJsZXMgYWJvdmUsIGJlY2F1c2UgSFBBR0VfU0hJRlQgaXMgbm90IGNvbXBpbGUKKyAqIHRpbWUgY29uc3RhbnQuICovCitrbWVtX2NhY2hlX3QgKnBndGFibGVfY2FjaGVbQVJSQVlfU0laRShwZ3RhYmxlX2NhY2hlX3NpemUpKzFdOworI2Vsc2UKIGttZW1fY2FjaGVfdCAqcGd0YWJsZV9jYWNoZVtBUlJBWV9TSVpFKHBndGFibGVfY2FjaGVfc2l6ZSldOworI2VuZGlmCiAKIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCAwYTMzNWYzLi4wOTIzNTVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogLyogUmV0dXJucyBuaWQgaW4gdGhlIHJhbmdlIFswLi5NQVhfTlVNTk9ERVMtMV0sIG9yIC0xIGlmIG5vIHVzZWZ1bCBudW1hCiAgKiBpbmZvIGlzIGZvdW5kLgogICovCi1zdGF0aWMgaW50IG9mX25vZGVfdG9fbmlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKQorc3RhdGljIGludCBvZl9ub2RlX3RvX25pZF9zaW5nbGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpCiB7CiAJaW50IG5pZCA9IC0xOwogCXVuc2lnbmVkIGludCAqdG1wOwpAQCAtMjE2LDYgKzIxNiwyOCBAQAogCXJldHVybiBuaWQ7CiB9CiAKKy8qIFdhbGsgdGhlIGRldmljZSB0cmVlIHVwd2FyZHMsIGxvb2tpbmcgZm9yIGFuIGFzc29jaWF0aXZpdHkgaWQgKi8KK2ludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRtcDsKKwlpbnQgbmlkID0gLTE7CisKKwlvZl9ub2RlX2dldChkZXZpY2UpOworCXdoaWxlIChkZXZpY2UpIHsKKwkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKGRldmljZSk7CisJCWlmIChuaWQgIT0gLTEpCisJCQlicmVhazsKKworCSAgICAgICAgdG1wID0gZGV2aWNlOworCQlkZXZpY2UgPSBvZl9nZXRfcGFyZW50KHRtcCk7CisJCW9mX25vZGVfcHV0KHRtcCk7CisJfQorCW9mX25vZGVfcHV0KGRldmljZSk7CisKKwlyZXR1cm4gbmlkOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2Zfbm9kZV90b19uaWQpOworCiAvKgogICogSW4gdGhlb3J5LCB0aGUgImlibSxhc3NvY2lhdGl2aXR5IiBwcm9wZXJ0eSBtYXkgY29udGFpbiBtdWx0aXBsZQogICogYXNzb2NpYXRpdml0eSBsaXN0cyBiZWNhdXNlIGEgcmVzb3VyY2UgbWF5IGJlIG11bHRpcGx5IGNvbm5lY3RlZApAQCAtMzAwLDcgKzMyMiw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW5pZCA9IG9mX25vZGVfdG9fbmlkKGNwdSk7CisJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKGNwdSk7CiAKIAlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKIAkJbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwpAQCAtMzkzLDcgKzQxNSw3IEBACiAKIAkJY3B1ID0gZmluZF9jcHVfbm9kZShpKTsKIAkJQlVHX09OKCFjcHUpOwotCQluaWQgPSBvZl9ub2RlX3RvX25pZChjcHUpOworCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUoY3B1KTsKIAkJb2Zfbm9kZV9wdXQoY3B1KTsKIAogCQkvKgpAQCAtNDM3LDcgKzQ1OSw3IEBACiAJCSAqIGhhdmUgYXNzb2NpYXRpdml0eSBwcm9wZXJ0aWVzLiAgSWYgbm9uZSwgdGhlbgogCQkgKiBldmVyeXRoaW5nIGdvZXMgdG8gZGVmYXVsdF9uaWQuCiAJCSAqLwotCQluaWQgPSBvZl9ub2RlX3RvX25pZChtZW1vcnkpOworCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUobWVtb3J5KTsKIAkJaWYgKG5pZCA8IDApCiAJCQluaWQgPSBkZWZhdWx0X25pZDsKIAkJbm9kZV9zZXRfb25saW5lKG5pZCk7CkBAIC03NzYsNyArNzk4LDcgQEAKIGhhX25ld19yYW5nZToKIAkJc3RhcnQgPSByZWFkX25fY2VsbHMobl9tZW1fYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKIAkJc2l6ZSA9IHJlYWRfbl9jZWxscyhuX21lbV9zaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQluaWQgPSBvZl9ub2RlX3RvX25pZChtZW1vcnkpOworCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUobWVtb3J5KTsKIAogCQkvKiBEb21haW5zIG5vdCBwcmVzZW50IGF0IGJvb3QgZGVmYXVsdCB0byAwICovCiAJCWlmIChuaWQgPCAwIHx8ICFub2RlX29ubGluZShuaWQpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwppbmRleCA3YzE4YjRjLi43ZTc4OWQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtMTU4LDI1ICsxNTgsMjUgQEAKIGxhdGVfaW5pdGNhbGwobXBjODM0eF9ydGNfaG9va3VwKTsKICNlbmRpZgogCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIE1NVSBpcyBvZmYsIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1wYzgzNHhfc3lzX3Byb2JlKHZvaWQpCiB7Ci0JLyogc2V0dXAgdGhlIFBvd2VyUEMgbW9kdWxlIHN0cnVjdCAqLwotCXBwY19tZC5zZXR1cF9hcmNoID0gbXBjODM0eF9zeXNfc2V0dXBfYXJjaDsKLQotCXBwY19tZC5pbml0X0lSUSA9IG1wYzgzNHhfc3lzX2luaXRfSVJROwotCXBwY19tZC5nZXRfaXJxID0gaXBpY19nZXRfaXJxOwotCi0JcHBjX21kLnJlc3RhcnQgPSBtcGM4M3h4X3Jlc3RhcnQ7Ci0KLQlwcGNfbWQudGltZV9pbml0ID0gbXBjODN4eF90aW1lX2luaXQ7Ci0JcHBjX21kLnNldF9ydGNfdGltZSA9IE5VTEw7Ci0JcHBjX21kLmdldF9ydGNfdGltZSA9IE5VTEw7Ci0JcHBjX21kLmNhbGlicmF0ZV9kZWNyID0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjcjsKLQotCXBwY19tZC5wcm9ncmVzcyA9IHVkYmdfcHJvZ3Jlc3M7Ci0KLQlpZiAocHBjX21kLnByb2dyZXNzKQotCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzNHhfc3lzX2luaXQoKTogZXhpdCIsIDApOwotCi0JcmV0dXJuOworCS8qIFdlIGFsd2F5cyBtYXRjaCBmb3Igbm93LCBldmVudHVhbGx5IHdlIHNob3VsZCBsb29rIGF0IHRoZSBmbGF0CisJICAgZGV2IHRyZWUgdG8gZW5zdXJlIHRoaXMgaXMgdGhlIGJvYXJkIHdlIGFyZSBzdXBwb3NlIHRvIHJ1biBvbgorCSovCisJcmV0dXJuIDE7CiB9CisKK2RlZmluZV9tYWNoaW5lKG1wYzgzNHhfc3lzKSB7CisJLm5hbWUJCQk9ICJNUEM4MzR4IFNZUyIsCisJLnByb2JlCQkJPSBtcGM4MzR4X3N5c19wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBtcGM4MzR4X3N5c19zZXR1cF9hcmNoLAorCS5pbml0X0lSUQkJPSBtcGM4MzR4X3N5c19pbml0X0lSUSwKKwkuZ2V0X2lycQkJPSBpcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gbXBjODN4eF9yZXN0YXJ0LAorCS50aW1lX2luaXQJCT0gbXBjODN4eF90aW1lX2luaXQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwppbmRleCBiNzgyMWRiLi41ZWVmZjM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpAQCAtMjIwLDI1ICsyMjAsMjUgQEAKIAlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQogCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfYWRzX3Byb2JlKHZvaWQpCiB7Ci0JcHBjX21kLnNldHVwX2FyY2ggPSBtcGM4NXh4X2Fkc19zZXR1cF9hcmNoOwotCXBwY19tZC5zaG93X2NwdWluZm8gPSBtcGM4NXh4X2Fkc19zaG93X2NwdWluZm87Ci0KLQlwcGNfbWQuaW5pdF9JUlEgPSBtcGM4NXh4X2Fkc19waWNfaW5pdDsKLQlwcGNfbWQuZ2V0X2lycSA9IG1waWNfZ2V0X2lycTsKLQotCXBwY19tZC5yZXN0YXJ0ID0gbXBjODV4eF9yZXN0YXJ0OwotCXBwY19tZC5wb3dlcl9vZmYgPSBOVUxMOwotCXBwY19tZC5oYWx0ID0gTlVMTDsKLQotCXBwY19tZC50aW1lX2luaXQgPSBOVUxMOwotCXBwY19tZC5zZXRfcnRjX3RpbWUgPSBOVUxMOwotCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBOVUxMOwotCXBwY19tZC5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3I7Ci0KLQlwcGNfbWQucHJvZ3Jlc3MgPSB1ZGJnX3Byb2dyZXNzOwotCi0JaWYgKHBwY19tZC5wcm9ncmVzcykKLQkJcHBjX21kLnByb2dyZXNzKCJtcGM4NXh4X2FkcyBwbGF0Zm9ybV9pbml0KCk6IGV4aXQiLCAwKTsKKwkvKiBXZSBhbHdheXMgbWF0Y2ggZm9yIG5vdywgZXZlbnR1YWxseSB3ZSBzaG91bGQgbG9vayBhdCB0aGUgZmxhdAorCSAgIGRldiB0cmVlIHRvIGVuc3VyZSB0aGlzIGlzIHRoZSBib2FyZCB3ZSBhcmUgc3VwcG9zZSB0byBydW4gb24KKwkqLworCXJldHVybiAxOwogfQorCitkZWZpbmVfbWFjaGluZShtcGM4NXh4X2FkcykgeworCS5uYW1lCQkJPSAiTVBDODV4eCBBRFMiLAorCS5wcm9iZQkJCT0gbXBjODV4eF9hZHNfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gbXBjODV4eF9hZHNfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gbXBjODV4eF9hZHNfcGljX2luaXQsCisJLnNob3dfY3B1aW5mbwkJPSBtcGM4NXh4X2Fkc19zaG93X2NwdWluZm8sCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IG1wYzg1eHhfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCmluZGV4IGMyYTNkYjguLjZhMDJkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCkBAIC0xMiw3ICsxMiw4IEBACiAKIGNvbmZpZyBTUFVGU19NTUFQCiAJYm9vbAotCWRlcGVuZHMgb24gU1BVX0ZTICYmIFNQQVJTRU1FTSAmJiAhUFBDXzY0S19QQUdFUworCWRlcGVuZHMgb24gU1BVX0ZTICYmIFNQQVJTRU1FTQorCXNlbGVjdCBNRU1PUllfSE9UUExVRwogCWRlZmF1bHQgeQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCmluZGV4IGRhYzVkMDMuLmZkM2U1NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CiAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNDYsNiArNDgsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zcHUuaD4KIAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgImlvbW11LmgiCkBAIC02OSw3NyArNzIsNiBAQAogCW9mX25vZGVfcHV0KHJvb3QpOwogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJTRU1FTQotc3RhdGljIGludCBfX2luaXQgZmluZF9zcHVfbm9kZV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKnNwZSkKLXsKLQl1bnNpZ25lZCBpbnQgKmlkOwotI2lmZGVmIENPTkZJR19OVU1BCi0Jc3RydWN0IGRldmljZV9ub2RlICpjcHU7Ci0JY3B1ID0gc3BlLT5wYXJlbnQtPnBhcmVudDsKLQlpZCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkoY3B1LCAibm9kZS1pZCIsIE5VTEwpOwotI2Vsc2UKLQlpZCA9IE5VTEw7Ci0jZW5kaWYKLQlyZXR1cm4gaWQgPyAqaWQgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2VsbF9zcHVwcm9wX3ByZXNlbnQoc3RydWN0IGRldmljZV9ub2RlICpzcGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKnByb3AsIGludCBlYXJseSkKLXsKLQlzdHJ1Y3QgYWRkcmVzc19wcm9wIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCQl1bnNpZ25lZCBpbnQgbGVuOwotCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKnA7Ci0JaW50IHByb3BsZW47Ci0KLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgcGZuOwotCWludCBub2RlX2lkOwotCi0JcCA9ICh2b2lkKilnZXRfcHJvcGVydHkoc3BlLCBwcm9wLCAmcHJvcGxlbik7Ci0JV0FSTl9PTihwcm9wbGVuICE9IHNpemVvZiAoKnApKTsKLQotCW5vZGVfaWQgPSBmaW5kX3NwdV9ub2RlX2lkKHNwZSk7Ci0KLQlzdGFydF9wZm4gPSBwLT5hZGRyZXNzID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IChwLT5hZGRyZXNzICsgcC0+bGVuICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQotCS8qIFdlIG5lZWQgdG8gY2FsbCBtZW1vcnlfcHJlc2VudCAqYmVmb3JlKiB0aGUgY2FsbCB0byBzcGFyc2VfaW5pdCwKLQkgICBidXQgd2UgY2FuIGluaXRpYWxpemUgdGhlIHBhZ2Ugc3RydWN0cyBvbmx5ICphZnRlciogdGhhdCBjYWxsLgotCSAgIFRodXMsIHdlJ3JlIGJlaW5nIGNhbGxlZCB0d2ljZS4gKi8KLQlpZiAoZWFybHkpCi0JCW1lbW9yeV9wcmVzZW50KG5vZGVfaWQsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7Ci0JZWxzZSB7Ci0JCS8qIEFzIHRoZSBwYWdlcyBiYWNraW5nIFNQVSBMUyBhbmQgSS9PIGFyZSBvdXRzaWRlIHRoZSByYW5nZQotCQkgICBvZiByZWd1bGFyIG1lbW9yeSwgdGhlaXIgcGFnZSBzdHJ1Y3RzIHdlcmUgbm90IGluaXRpYWxpemVkCi0JCSAgIGJ5IGZyZWVfYXJlYV9pbml0LiBEbyBpdCBoZXJlIGluc3RlYWQuICovCi0JCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBlbmRfcGZuOyBwZm4rKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQkJc2V0X3BhZ2VfbGlua3MocGFnZSwgWk9ORV9ETUEsIG5vZGVfaWQsIHBmbik7Ci0JCQlpbml0X3BhZ2VfY291bnQocGFnZSk7Ci0JCQlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwotCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCQkJSU5JVF9MSVNUX0hFQUQoJnBhZ2UtPmxydSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjZWxsX3NwdW1lbV9pbml0KGludCBlYXJseSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0JZm9yIChub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgInNwZSIpOwotCQkJbm9kZTsgbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5vZGUsICJzcGUiKSkgewotCQljZWxsX3NwdXByb3BfcHJlc2VudChub2RlLCAibG9jYWwtc3RvcmUiLCBlYXJseSk7Ci0JCWNlbGxfc3B1cHJvcF9wcmVzZW50KG5vZGUsICJwcm9ibGVtIiwgZWFybHkpOwotCQljZWxsX3NwdXByb3BfcHJlc2VudChub2RlLCAicHJpdjEiLCBlYXJseSk7Ci0JCWNlbGxfc3B1cHJvcF9wcmVzZW50KG5vZGUsICJwcml2MiIsIGVhcmx5KTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGNlbGxfc3B1bWVtX2luaXQoaW50IGVhcmx5KQotewotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGNlbGxfcHJvZ3Jlc3MoY2hhciAqcywgdW5zaWduZWQgc2hvcnQgaGV4KQogewogCXByaW50aygiKioqICUwNHggOiAlc1xuIiwgaGV4LCBzID8gcyA6ICIiKTsKQEAgLTE3Miw4ICsxMDQsNiBAQAogI2VuZGlmCiAKIAltbWlvX252cmFtX2luaXQoKTsKLQotCWNlbGxfc3B1bWVtX2luaXQoMCk7CiB9CiAKIC8qCkBAIC0xODksMjIgKzExOSwxOSBAQAogCiAJcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPSBJQ19DRUxMX1BJQzsKIAotCWNlbGxfc3B1bWVtX2luaXQoMSk7Ci0KIAlEQkcoIiA8LSBjZWxsX2luaXRfZWFybHkoKVxuIik7CiB9CiAKIAogc3RhdGljIGludCBfX2luaXQgY2VsbF9wcm9iZSh2b2lkKQogewotCS8qIFhYWCBUaGlzIGlzIHRlbXBvcmFyeSwgdGhlIENlbGwgbWFpbnRhaW5lciB3aWxsIGNvbWUgdXAgd2l0aAotCSAqIG1vcmUgYXBwcm9wcmlhdGUgZGV0ZWN0aW9uIGxvZ2ljCi0JICovCiAJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ1BCVy0xLjAiKSkKLQkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMTsKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpIHx8CisJICAgIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCmluZGV4IDI2OWRkYTQuLmFkMTQxZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCkBAIC0zMDYsMTkgKzMwNiwxOSBAQAogCiAJc25wcmludGYoc3B1LT5pcnFfYzAsIHNpemVvZiAoc3B1LT5pcnFfYzApLCAic3BlJTAyZC4wIiwgc3B1LT5udW1iZXIpOwogCXJldCA9IHJlcXVlc3RfaXJxKGlycV9iYXNlICsgc3B1LT5pc3JjLAotCQkgc3B1X2lycV9jbGFzc18wLCAwLCBzcHUtPmlycV9jMCwgc3B1KTsKKwkJIHNwdV9pcnFfY2xhc3NfMCwgU0FfSU5URVJSVVBULCBzcHUtPmlycV9jMCwgc3B1KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCXNucHJpbnRmKHNwdS0+aXJxX2MxLCBzaXplb2YgKHNwdS0+aXJxX2MxKSwgInNwZSUwMmQuMSIsIHNwdS0+bnVtYmVyKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpcnFfYmFzZSArIElJQ19DTEFTU19TVFJJREUgKyBzcHUtPmlzcmMsCi0JCSBzcHVfaXJxX2NsYXNzXzEsIDAsIHNwdS0+aXJxX2MxLCBzcHUpOworCQkgc3B1X2lycV9jbGFzc18xLCBTQV9JTlRFUlJVUFQsIHNwdS0+aXJxX2MxLCBzcHUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0MTsKIAogCXNucHJpbnRmKHNwdS0+aXJxX2MyLCBzaXplb2YgKHNwdS0+aXJxX2MyKSwgInNwZSUwMmQuMiIsIHNwdS0+bnVtYmVyKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpcnFfYmFzZSArIDIqSUlDX0NMQVNTX1NUUklERSArIHNwdS0+aXNyYywKLQkJIHNwdV9pcnFfY2xhc3NfMiwgMCwgc3B1LT5pcnFfYzIsIHNwdSk7CisJCSBzcHVfaXJxX2NsYXNzXzIsIFNBX0lOVEVSUlVQVCwgc3B1LT5pcnFfYzIsIHNwdSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQyOwogCWdvdG8gb3V0OwpAQCAtNDg3LDEwICs0ODcsMTQgQEAKIAllYSA9IHNwdS0+ZGFyOwogCWRzaXNyID0gc3B1LT5kc2lzcjsKIAlpZiAoZHNpc3IgJiAoTUZDX0RTSVNSX1BURV9OT1RfRk9VTkQgfCBNRkNfRFNJU1JfQUNDRVNTX0RFTklFRCkpIHsKKwkJdTY0IGZsYWdzOworCiAJCWFjY2VzcyA9IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUik7CiAJCWFjY2VzcyB8PSAoZHNpc3IgJiBNRkNfRFNJU1JfQUNDRVNTX1BVVCkgPyBfUEFHRV9SVyA6IDBVTDsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlpZiAoaGFzaF9wYWdlKGVhLCBhY2Nlc3MsIDB4MzAwKSAhPSAwKQogCQkJZXJyb3IgfD0gQ0xBU1MxX0VOQUJMRV9TVE9SQUdFX0ZBVUxUX0lOVFI7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiAJaWYgKGVycm9yICYgQ0xBU1MxX0VOQUJMRV9TVE9SQUdFX0ZBVUxUX0lOVFIpIHsKIAkJaWYgKChyZXQgPSBzcHVfaGFuZGxlX21tX2ZhdWx0KHNwdSkpICE9IDApCkBAIC01MTYsOCArNTIwLDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfaXJxX3NldGFmZmluaXR5KTsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqIF9faW5pdCBtYXBfc3BlX3Byb3Aoc3RydWN0IGRldmljZV9ub2RlICpuLAotCQkJCQkJIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IF9faW5pdCBmaW5kX3NwdV9ub2RlX2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3BlKQoreworCXVuc2lnbmVkIGludCAqaWQ7CisJc3RydWN0IGRldmljZV9ub2RlICpjcHU7CisJY3B1ID0gc3BlLT5wYXJlbnQtPnBhcmVudDsKKwlpZCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkoY3B1LCAibm9kZS1pZCIsIE5VTEwpOworCXJldHVybiBpZCA/ICppZCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNlbGxfc3B1cHJvcF9wcmVzZW50KHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IGRldmljZV9ub2RlICpzcGUsCisJCWNvbnN0IGNoYXIgKnByb3ApCit7CisJc3RhdGljIERFRklORV9NVVRFWChhZGRfc3B1bWVtX211dGV4KTsKKworCXN0cnVjdCBhZGRyZXNzX3Byb3AgeworCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJCXVuc2lnbmVkIGludCBsZW47CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqcDsKKwlpbnQgcHJvcGxlbjsKKworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBucl9wYWdlczsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YTsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlpbnQgcmV0OworCisJcCA9ICh2b2lkKilnZXRfcHJvcGVydHkoc3BlLCBwcm9wLCAmcHJvcGxlbik7CisJV0FSTl9PTihwcm9wbGVuICE9IHNpemVvZiAoKnApKTsKKworCXN0YXJ0X3BmbiA9IHAtPmFkZHJlc3MgPj4gUEFHRV9TSElGVDsKKwlucl9wYWdlcyA9ICgodW5zaWduZWQgbG9uZylwLT5sZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCisJcGdkYXRhID0gTk9ERV9EQVRBKHNwdS0+bmlkKTsKKwl6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzOworCisJLyogWFhYIHJldGhpbmsgbG9ja2luZyBoZXJlICovCisJbXV0ZXhfbG9jaygmYWRkX3NwdW1lbV9tdXRleCk7CisJcmV0ID0gX19hZGRfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CisJbXV0ZXhfdW5sb2NrKCZhZGRfc3B1bWVtX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBfX2luaXQgbWFwX3NwZV9wcm9wKHN0cnVjdCBzcHUgKnNwdSwKKwkJc3RydWN0IGRldmljZV9ub2RlICpuLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBhZGRyZXNzX3Byb3AgewogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CkBAIC01MjYsNiArNTcyLDggQEAKIAogCXZvaWQgKnA7CiAJaW50IHByb3BsZW47CisJdm9pZCogcmV0ID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKIAogCXAgPSBnZXRfcHJvcGVydHkobiwgbmFtZSwgJnByb3BsZW4pOwogCWlmIChwcm9wbGVuICE9IHNpemVvZiAoc3RydWN0IGFkZHJlc3NfcHJvcCkpCkBAIC01MzMsNyArNTgxLDE0IEBACiAKIAlwcm9wID0gcDsKIAotCXJldHVybiBpb3JlbWFwKHByb3AtPmFkZHJlc3MsIHByb3AtPmxlbik7CisJZXJyID0gY2VsbF9zcHVwcm9wX3ByZXNlbnQoc3B1LCBuLCBuYW1lKTsKKwlpZiAoZXJyICYmIChlcnIgIT0gLUVFWElTVCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaW9yZW1hcChwcm9wLT5hZGRyZXNzLCBwcm9wLT5sZW4pOworCisgb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNwdV91bm1hcChzdHJ1Y3Qgc3B1ICpzcHUpCkBAIC01NDQsNDQgKzU5OSw0NSBAQAogCWlvdW5tYXAoKHU4IF9faW9tZW0gKilzcHUtPmxvY2FsX3N0b3JlKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc3B1X21hcF9kZXZpY2Uoc3RydWN0IHNwdSAqc3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnNwZSkKK3N0YXRpYyBpbnQgX19pbml0IHNwdV9tYXBfZGV2aWNlKHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewogCWNoYXIgKnByb3A7CiAJaW50IHJldDsKIAogCXJldCA9IC1FTk9ERVY7Ci0JcHJvcCA9IGdldF9wcm9wZXJ0eShzcGUsICJpc3JjIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAiaXNyYyIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJZ290byBvdXQ7CiAJc3B1LT5pc3JjID0gKih1bnNpZ25lZCBpbnQgKilwcm9wOwogCi0Jc3B1LT5uYW1lID0gZ2V0X3Byb3BlcnR5KHNwZSwgIm5hbWUiLCBOVUxMKTsKKwlzcHUtPm5hbWUgPSBnZXRfcHJvcGVydHkobm9kZSwgIm5hbWUiLCBOVUxMKTsKIAlpZiAoIXNwdS0+bmFtZSkKIAkJZ290byBvdXQ7CiAKLQlwcm9wID0gZ2V0X3Byb3BlcnR5KHNwZSwgImxvY2FsLXN0b3JlIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAibG9jYWwtc3RvcmUiLCBOVUxMKTsKIAlpZiAoIXByb3ApCiAJCWdvdG8gb3V0OwogCXNwdS0+bG9jYWxfc3RvcmVfcGh5cyA9ICoodW5zaWduZWQgbG9uZyAqKXByb3A7CiAKIAkvKiB3ZSB1c2UgbG9jYWwgc3RvcmUgYXMgcmFtLCBub3QgaW8gbWVtb3J5ICovCi0Jc3B1LT5sb2NhbF9zdG9yZSA9ICh2b2lkIF9fZm9yY2UgKiltYXBfc3BlX3Byb3Aoc3BlLCAibG9jYWwtc3RvcmUiKTsKKwlzcHUtPmxvY2FsX3N0b3JlID0gKHZvaWQgX19mb3JjZSAqKQorCQltYXBfc3BlX3Byb3Aoc3B1LCBub2RlLCAibG9jYWwtc3RvcmUiKTsKIAlpZiAoIXNwdS0+bG9jYWxfc3RvcmUpCiAJCWdvdG8gb3V0OwogCi0JcHJvcCA9IGdldF9wcm9wZXJ0eShzcGUsICJwcm9ibGVtIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAicHJvYmxlbSIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJZ290byBvdXRfdW5tYXA7CiAJc3B1LT5wcm9ibGVtX3BoeXMgPSAqKHVuc2lnbmVkIGxvbmcgKilwcm9wOwogCi0Jc3B1LT5wcm9ibGVtPSBtYXBfc3BlX3Byb3Aoc3BlLCAicHJvYmxlbSIpOworCXNwdS0+cHJvYmxlbT0gbWFwX3NwZV9wcm9wKHNwdSwgbm9kZSwgInByb2JsZW0iKTsKIAlpZiAoIXNwdS0+cHJvYmxlbSkKIAkJZ290byBvdXRfdW5tYXA7CiAKLQlzcHUtPnByaXYxPSBtYXBfc3BlX3Byb3Aoc3BlLCAicHJpdjEiKTsKKwlzcHUtPnByaXYxPSBtYXBfc3BlX3Byb3Aoc3B1LCBub2RlLCAicHJpdjEiKTsKIAkvKiBwcml2MSBpcyBub3QgYXZhaWxhYmxlIG9uIGEgaHlwZXJ2aXNvciAqLwogCi0Jc3B1LT5wcml2Mj0gbWFwX3NwZV9wcm9wKHNwZSwgInByaXYyIik7CisJc3B1LT5wcml2Mj0gbWFwX3NwZV9wcm9wKHNwdSwgbm9kZSwgInByaXYyIik7CiAJaWYgKCFzcHUtPnByaXYyKQogCQlnb3RvIG91dF91bm1hcDsKIAlyZXQgPSAwOwpAQCAtNTkzLDE3ICs2NDksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfc3B1X25vZGVfaWQoc3RydWN0IGRldmljZV9ub2RlICpzcGUpCi17Ci0JdW5zaWduZWQgaW50ICppZDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKLQotCWNwdSA9IHNwZS0+cGFyZW50LT5wYXJlbnQ7Ci0JaWQgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KGNwdSwgIm5vZGUtaWQiLCBOVUxMKTsKLQotCXJldHVybiBpZCA/ICppZCA6IDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9zcHUoc3RydWN0IGRldmljZV9ub2RlICpzcGUpCiB7CiAJc3RydWN0IHNwdSAqc3B1OwpAQCAtNjIwLDYgKzY2NSwxMCBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJc3B1LT5ub2RlID0gZmluZF9zcHVfbm9kZV9pZChzcGUpOworCXNwdS0+bmlkID0gb2Zfbm9kZV90b19uaWQoc3BlKTsKKwlpZiAoc3B1LT5uaWQgPT0gLTEpCisJCXNwdS0+bmlkID0gMDsKKwogCXNwdS0+c3RvcF9jb2RlID0gMDsKIAlzcHUtPnNsYl9yZXBsYWNlID0gMDsKIAlzcHUtPm1tID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2NhbGxiYWNrcy5jCmluZGV4IDNhNDI0NWMuLmI0N2ZjYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9jYWxsYmFja3MuYwpAQCAtMjU4LDYgKzI1OCw3IEBACiAJW19fTlJfZnV0ZXhdCQkJc3lzX2Z1dGV4LAogCVtfX05SX3NjaGVkX3NldGFmZmluaXR5XQlzeXNfc2NoZWRfc2V0YWZmaW5pdHksCiAJW19fTlJfc2NoZWRfZ2V0YWZmaW5pdHldCXN5c19zY2hlZF9nZXRhZmZpbml0eSwKKwlbMjI0XQkJCQlzeXNfbmlfc3lzY2FsbCwKIAlbX19OUl90dXhjYWxsXQkJCXN5c19uaV9zeXNjYWxsLAogCVsyMjZdCQkJCXN5c19uaV9zeXNjYWxsLAogCVtfX05SX2lvX3NldHVwXQkJCXN5c19pb19zZXR1cCwKQEAgLTMxNiwyMSArMzE3LDM3IEBACiAJW19fTlJfcHNlbGVjdDZdCQkJc3lzX25pX3N5c2NhbGwsIC8qIHN5c19wc2VsZWN0ICovCiAJW19fTlJfcHBvbGxdCQkJc3lzX25pX3N5c2NhbGwsIC8qIHN5c19wcG9sbCAqLwogCVtfX05SX3Vuc2hhcmVdCQkJc3lzX3Vuc2hhcmUsCisJW19fTlJfc3BsaWNlXQkJCXN5c19zcGxpY2UsCisJW19fTlJfdGVlXQkJCXN5c190ZWUsCisJW19fTlJfdm1zcGxpY2VdCQkJc3lzX3Ztc3BsaWNlLAorCVtfX05SX29wZW5hdF0JCQlzeXNfb3BlbmF0LAorCVtfX05SX21rZGlyYXRdCQkJc3lzX21rZGlyYXQsCisJW19fTlJfbWtub2RhdF0JCQlzeXNfbWtub2RhdCwKKwlbX19OUl9mY2hvd25hdF0JCQlzeXNfZmNob3duYXQsCisJW19fTlJfZnV0aW1lc2F0XQkJc3lzX2Z1dGltZXNhdCwKKwlbX19OUl9uZXdmc3RhdGF0XQkJc3lzX25ld2ZzdGF0YXQsCisJW19fTlJfdW5saW5rYXRdCQkJc3lzX3VubGlua2F0LAorCVtfX05SX3JlbmFtZWF0XQkJCXN5c19yZW5hbWVhdCwKKwlbX19OUl9saW5rYXRdCQkJc3lzX2xpbmthdCwKKwlbX19OUl9zeW1saW5rYXRdCQlzeXNfc3ltbGlua2F0LAorCVtfX05SX3JlYWRsaW5rYXRdCQlzeXNfcmVhZGxpbmthdCwKKwlbX19OUl9mY2htb2RhdF0JCQlzeXNfZmNobW9kYXQsCisJW19fTlJfZmFjY2Vzc2F0XQkJc3lzX2ZhY2Nlc3NhdCwKKwlbX19OUl9nZXRfcm9idXN0X2xpc3RdCQlzeXNfZ2V0X3JvYnVzdF9saXN0LAorCVtfX05SX3NldF9yb2J1c3RfbGlzdF0JCXN5c19zZXRfcm9idXN0X2xpc3QsCiB9OwogCiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKQogewogCWxvbmcgKCpzeXNjYWxsKSh1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLCB1NjQgYTQsIHU2NCBhNSwgdTY0IGE2KTsKIAotCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNwdV9zeXNjYWxsX3RhYmxlKSAhPSBfX05SX3N5c2NhbGxzKTsKLQotCXN5c2NhbGwgPSBzcHVfc3lzY2FsbF90YWJsZVtzLT5ucl9yZXRdOwotCi0JaWYgKHMtPm5yX3JldCA+PSBfX05SX3N5c2NhbGxzKSB7CisJaWYgKHMtPm5yX3JldCA+PSBBUlJBWV9TSVpFKHNwdV9zeXNjYWxsX3RhYmxlKSkgewogCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgc3lzY2FsbCAjJWxkIiwgX19GVU5DVElPTl9fLCBzLT5ucl9yZXQpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKKwlzeXNjYWxsID0gc3B1X3N5c2NhbGxfdGFibGVbcy0+bnJfcmV0XTsKKwogI2lmZGVmIERFQlVHCiAJcHJpbnRfc3ltYm9sKEtFUk5fREVCVUcgIlNQVS1zeXNjYWxsICVzOiIsICh1bnNpZ25lZCBsb25nKXN5c2NhbGwpOwogCXByaW50aygic3lzY2FsbCVsZCglbHgsICVseCwgJWx4LCAlbHgsICVseCwgJWx4KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYwppbmRleCBjMDRlMDc4Li40ODNjOGI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3NwdS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogI2luY2x1ZGUgInNwdWZzLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYwppbmRleCA5Nzg5OGQ1Li4xNzI2YmZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N3aXRjaC5jCkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQljeWNsZXNfdCByZXN1bWVfdGltZSA9IGdldF9jeWNsZXMoKTsKIAkJY3ljbGVzX3QgZGVsdGFfdGltZSA9IHJlc3VtZV90aW1lIC0gY3NhLT5zdXNwZW5kX3RpbWU7CiAKLQkJY3NhLT5sc2NzYS0+ZGVjci5zbG90WzBdID0gZGVsdGFfdGltZTsKKwkJY3NhLT5sc2NzYS0+ZGVjci5zbG90WzBdIC09IGRlbHRhX3RpbWU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvY2hycC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL2NocnAuaAppbmRleCA2M2YwYWVlLi45OTZjMjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvY2hycC5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9jaHJwLmgKQEAgLTksMyArOSw0IEBACiAKIGV4dGVybiB2b2lkIGNocnBfZmluZF9icmlkZ2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2hycF9ldmVudF9zY2FuKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgY2hycF9wY2liaW9zX2ZpeHVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCmluZGV4IDhlZjI3OWEuLmFjMjI0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxhc20vZ3JhY2tsZS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAKKyNpbmNsdWRlICJjaHJwLmgiCisKIC8qIExvbmdUcmFpbCAqLwogdm9pZCBfX2lvbWVtICpnZzJfcGNpX2NvbmZpZ19iYXNlOwogCkBAIC0zMTQsNiArMzE2LDYgQEAKIAl9CiAKIAkvKiBEbyBub3QgZml4dXAgaW50ZXJydXB0cyBmcm9tIE9GIHRyZWUgb24gcGVnYXNvcyAqLwotCWlmIChpc19wZWdhc29zID09IDApCi0JCXBwY19tZC5wY2liaW9zX2ZpeHVwID0gY2hycF9wY2liaW9zX2ZpeHVwOworCWlmIChpc19wZWdhc29zKQorCQlwcGNfbWQucGNpYmlvc19maXh1cCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCmluZGV4IDIzYTIwMTcuLjE4ZDg5ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCkBAIC00NDAsOCArNDQwLDYgQEAKIAogCWlmIChfY2hycF90eXBlID09IF9DSFJQX1BlZ2Fzb3MpCiAJCXBwY19tZC5nZXRfaXJxICAgICAgICA9IGk4MjU5X2lycTsKLQllbHNlCi0JCXBwY19tZC5nZXRfaXJxICAgICAgICA9IG1waWNfZ2V0X2lycTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoWE1PTikKIAkvKiBzZWUgaWYgdGhlcmUgaXMgYSBrZXlib2FyZCBpbiB0aGUgZGV2aWNlIHRyZWUKQEAgLTUyOCwyNiArNTI2LDI0IEBACiAJLyogQXNzdW1lIHdlIGhhdmUgYW4gODI1OS4uLiAqLwogCV9faXJxX29mZnNldF92YWx1ZSA9IE5VTV9JU0FfSU5URVJSVVBUUzsKIAotCXBwY19tZC5zZXR1cF9hcmNoICAgICA9IGNocnBfc2V0dXBfYXJjaDsKLQlwcGNfbWQuc2hvd19jcHVpbmZvICAgPSBjaHJwX3Nob3dfY3B1aW5mbzsKLQotCXBwY19tZC5pbml0X0lSUSAgICAgICA9IGNocnBfaW5pdF9JUlE7Ci0JcHBjX21kLmluaXQgICAgICAgICAgID0gY2hycF9pbml0MjsKLQotCXBwY19tZC5waHlzX21lbV9hY2Nlc3NfcHJvdCA9IHBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdDsKLQotCXBwY19tZC5yZXN0YXJ0ICAgICAgICA9IHJ0YXNfcmVzdGFydDsKLQlwcGNfbWQucG93ZXJfb2ZmICAgICAgPSBydGFzX3Bvd2VyX29mZjsKLQlwcGNfbWQuaGFsdCAgICAgICAgICAgPSBydGFzX2hhbHQ7Ci0KLQlwcGNfbWQudGltZV9pbml0ICAgICAgPSBjaHJwX3RpbWVfaW5pdDsKLQlwcGNfbWQuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyOwotCi0JLyogdGhpcyBtYXkgZ2V0IG92ZXJyaWRkZW4gd2l0aCBydGFzIHJvdXRpbmVzIGxhdGVyLi4uICovCi0JcHBjX21kLnNldF9ydGNfdGltZSAgID0gY2hycF9zZXRfcnRjX3RpbWU7Ci0JcHBjX21kLmdldF9ydGNfdGltZSAgID0gY2hycF9nZXRfcnRjX3RpbWU7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX29wcyA9ICZjaHJwX3NtcF9vcHM7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLworCXJldHVybiAxOwogfQorCitkZWZpbmVfbWFjaGluZShjaHJwKSB7CisJLm5hbWUJCQk9ICJDSFJQIiwKKwkucHJvYmUJCQk9IGNocnBfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gY2hycF9zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBjaHJwX2luaXQyLAorCS5zaG93X2NwdWluZm8JCT0gY2hycF9zaG93X2NwdWluZm8sCisJLmluaXRfSVJRCQk9IGNocnBfaW5pdF9JUlEsCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5wY2liaW9zX2ZpeHVwCQk9IGNocnBfcGNpYmlvc19maXh1cCwKKwkucmVzdGFydAkJPSBydGFzX3Jlc3RhcnQsCisJLnBvd2VyX29mZgkJPSBydGFzX3Bvd2VyX29mZiwKKwkuaGFsdAkJCT0gcnRhc19oYWx0LAorCS50aW1lX2luaXQJCT0gY2hycF90aW1lX2luaXQsCisJLnNldF9ydGNfdGltZQkJPSBjaHJwX3NldF9ydGNfdGltZSwKKwkuZ2V0X3J0Y190aW1lCQk9IGNocnBfZ2V0X3J0Y190aW1lLAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5waHlzX21lbV9hY2Nlc3NfcHJvdAk9IHBjaV9waHlzX21lbV9hY2Nlc3NfcHJvdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDZjZThhNDAuLmE2ZmQ5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9scGFyX21hcC5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAibmFjYS5oIgogI2luY2x1ZGUgInNldHVwLmgiCkBAIC02ODQsNiArNjg1LDEyIEBACiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0lTRVJJRVM7CiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0xQQVI7CiAKKwkvKgorCSAqIFRoZSBIeXBlcnZpc29yIG9ubHkgYWxsb3dzIHVzIHVwIHRvIDI1NiBpbnRlcnJ1cHQKKwkgKiBzb3VyY2VzICh0aGUgaXJxIG51bWJlciBpcyBwYXNzZWQgaW4gYSB1OCkuCisJICovCisJdmlydF9pcnFfbWF4ID0gMjU1OworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggZTE0ZjlhYy4uYzg5NmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTIzMSw2ICsyMzEsMTQgQEAKIAlyZXR1cm4gaXNyOwogfQogCitzdGF0aWMgdm9pZCBrd19pMmNfZG9fc3RvcChzdHJ1Y3QgcG1hY19pMmNfaG9zdF9rdyAqaG9zdCwgaW50IHJlc3VsdCkKK3sKKwlrd193cml0ZV9yZWcocmVnX2NvbnRyb2wsIEtXX0kyQ19DVExfU1RPUCk7CisJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOworCWhvc3QtPnJlc3VsdCA9IHJlc3VsdDsKK30KKworCiBzdGF0aWMgdm9pZCBrd19pMmNfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcG1hY19pMmNfaG9zdF9rdyAqaG9zdCwgdTggaXNyKQogewogCXU4IGFjazsKQEAgLTI0Niw0MiArMjU0LDM2IEBACiAJfQogCiAJaWYgKGlzciA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvd19pMmM6IFRpbWVvdXQgaW4gaTJjIHRyYW5zZmVyIgorCQkgICAgICAgIiBvbiBrZXl3ZXN0ICFcbiIpOwogCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfc3RvcCkgewotCQkJREJHX0xPVygiS1c6IFRpbWVvdXQgIVxuIik7Ci0JCQlob3N0LT5yZXN1bHQgPSAtRUlPOwotCQkJZ290byBzdG9wOworCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgLUVJTyk7CisJCQlyZXR1cm47CiAJCX0KLQkJaWYgKGhvc3QtPnN0YXRlID09IHN0YXRlX3N0b3ApIHsKLQkJCWFjayA9IGt3X3JlYWRfcmVnKHJlZ19zdGF0dXMpOwotCQkJaWYgKGFjayAmIEtXX0kyQ19TVEFUX0JVU1kpCi0JCQkJa3dfd3JpdGVfcmVnKHJlZ19zdGF0dXMsIDApOwotCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9pZGxlOwotCQkJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDB4MDApOwotCQkJaWYgKCFob3N0LT5wb2xsZWQpCi0JCQkJY29tcGxldGUoJmhvc3QtPmNvbXBsZXRlKTsKLQkJfQorCQlhY2sgPSBrd19yZWFkX3JlZyhyZWdfc3RhdHVzKTsKKwkJaWYgKGFjayAmIEtXX0kyQ19TVEFUX0JVU1kpCisJCQlrd193cml0ZV9yZWcocmVnX3N0YXR1cywgMCk7CisJCWhvc3QtPnN0YXRlID0gc3RhdGVfaWRsZTsKKwkJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDB4MDApOworCQlpZiAoIWhvc3QtPnBvbGxlZCkKKwkJCWNvbXBsZXRlKCZob3N0LT5jb21wbGV0ZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNyICYgS1dfSTJDX0lSUV9BRERSKSB7CiAJCWFjayA9IGt3X3JlYWRfcmVnKHJlZ19zdGF0dXMpOwogCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfYWRkcikgewotCQkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfQUREUik7CiAJCQlXUk9OR19TVEFURSgiS1dfSTJDX0lSUV9BRERSIik7IAotCQkJaG9zdC0+cmVzdWx0ID0gLUVJTzsKLQkJCWdvdG8gc3RvcDsKKwkJCWt3X2kyY19kb19zdG9wKGhvc3QsIC1FSU8pOwogCQl9CiAJCWlmICgoYWNrICYgS1dfSTJDX1NUQVRfTEFTVF9BQUspID09IDApIHsKLQkJCWhvc3QtPnJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlEQkdfTE9XKCJLVzogTkFLIG9uIGFkZHJlc3NcbiIpOworCQkJaG9zdC0+cmVzdWx0ID0gLUVOWElPOwogCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOwotCQkJcmV0dXJuOworCQkJREJHX0xPVygiS1c6IE5BSyBvbiBhZGRyZXNzXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChob3N0LT5sZW4gPT0gMCkgewotCQkJCWt3X3dyaXRlX3JlZyhyZWdfaXNyLCBLV19JMkNfSVJRX0FERFIpOwotCQkJCWdvdG8gc3RvcDsKLQkJCX0KLQkJCWlmIChob3N0LT5ydykgeworCQkJaWYgKGhvc3QtPmxlbiA9PSAwKQorCQkJCWt3X2kyY19kb19zdG9wKGhvc3QsIDApOworCQkJZWxzZSBpZiAoaG9zdC0+cncpIHsKIAkJCQlob3N0LT5zdGF0ZSA9IHN0YXRlX3JlYWQ7CiAJCQkJaWYgKGhvc3QtPmxlbiA+IDEpCiAJCQkJCWt3X3dyaXRlX3JlZyhyZWdfY29udHJvbCwKQEAgLTMwOCwyNSArMzEwLDE5IEBACiAJCQlhY2sgPSBrd19yZWFkX3JlZyhyZWdfc3RhdHVzKTsKIAkJCWlmICgoYWNrICYgS1dfSTJDX1NUQVRfTEFTVF9BQUspID09IDApIHsKIAkJCQlEQkdfTE9XKCJLVzogbmFjayBvbiBkYXRhIHdyaXRlXG4iKTsKLQkJCQlob3N0LT5yZXN1bHQgPSAtRUlPOwotCQkJCWdvdG8gc3RvcDsKKwkJCQlob3N0LT5yZXN1bHQgPSAtRUZCSUc7CisJCQkJaG9zdC0+c3RhdGUgPSBzdGF0ZV9zdG9wOwogCQkJfSBlbHNlIGlmIChob3N0LT5sZW4pIHsKIAkJCQlrd193cml0ZV9yZWcocmVnX2RhdGEsICooaG9zdC0+ZGF0YSsrKSk7CiAJCQkJaG9zdC0+bGVuLS07Ci0JCQl9IGVsc2UgewotCQkJCWt3X3dyaXRlX3JlZyhyZWdfY29udHJvbCwgS1dfSTJDX0NUTF9TVE9QKTsKLQkJCQlob3N0LT5zdGF0ZSA9IHN0YXRlX3N0b3A7Ci0JCQkJaG9zdC0+cmVzdWx0ID0gMDsKLQkJCX0KLQkJCWt3X3dyaXRlX3JlZyhyZWdfaXNyLCBLV19JMkNfSVJRX0RBVEEpOworCQkJfSBlbHNlCisJCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlrd193cml0ZV9yZWcocmVnX2lzciwgS1dfSTJDX0lSUV9EQVRBKTsKIAkJCVdST05HX1NUQVRFKCJLV19JMkNfSVJRX0RBVEEiKTsgCi0JCQlpZiAoaG9zdC0+c3RhdGUgIT0gc3RhdGVfc3RvcCkgewotCQkJCWhvc3QtPnJlc3VsdCA9IC1FSU87Ci0JCQkJZ290byBzdG9wOwotCQkJfQorCQkJaWYgKGhvc3QtPnN0YXRlICE9IHN0YXRlX3N0b3ApCisJCQkJa3dfaTJjX2RvX3N0b3AoaG9zdCwgLUVJTyk7CiAJCX0KKwkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfREFUQSk7CiAJfQogCiAJaWYgKGlzciAmIEtXX0kyQ19JUlFfU1RPUCkgewpAQCAtMzQwLDE0ICszMzYsMTAgQEAKIAkJCWNvbXBsZXRlKCZob3N0LT5jb21wbGV0ZSk7CiAJfQogCisJLyogQmVsb3cgc2hvdWxkIG9ubHkgaGFwcGVuIGluIG1hbnVhbCBtb2RlIHdoaWNoIHdlIGRvbid0IHVzZSAuLi4gKi8KIAlpZiAoaXNyICYgS1dfSTJDX0lSUV9TVEFSVCkKIAkJa3dfd3JpdGVfcmVnKHJlZ19pc3IsIEtXX0kyQ19JUlFfU1RBUlQpOwogCi0JcmV0dXJuOwotIHN0b3A6Ci0Ja3dfd3JpdGVfcmVnKHJlZ19jb250cm9sLCBLV19JMkNfQ1RMX1NUT1ApOwkKLQlob3N0LT5zdGF0ZSA9IHN0YXRlX3N0b3A7Ci0JcmV0dXJuOwogfQogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtNTQ0LDExICs1MzYsMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JLyogTWFrZSBzdXJlIElSQSBpcyBkaXNhYmxlZCAqLworCS8qIE1ha2Ugc3VyZSBJUlEgaXMgZGlzYWJsZWQgKi8KIAlrd193cml0ZV9yZWcocmVnX2llciwgMCk7CiAKIAkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0ICovCi0JaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgU0FfU0hJUlEsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQorCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIDAsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKQEAgLTExNjUsNiArMTE1Nyw3IEBACiAvKiBzb21lIHF1aXJrcyBmb3IgcGxhdGZvcm0gZnVuY3Rpb24gZGVjb2RpbmcgKi8KIGVudW0gewogCXBtYWNfaTJjX3F1aXJrX2ludm1hc2sgPSAweDAwMDAwMDAxdSwKKwlwbWFjX2kyY19xdWlya19za2lwID0gMHgwMDAwMDAwMnUsCiB9OwogCiBzdGF0aWMgdm9pZCBwbWFjX2kyY19kZXZzY2FuKHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGRldmljZV9ub2RlICpkZXYsCkBAIC0xMTgwLDYgKzExNzMsMTUgQEAKIAkJLyogWFhYIFN0dWR5IGRldmljZS10cmVlJ3MgJiBhcHBsZSBkcml2ZXJzIGFyZSBnZXQgdGhlIHF1aXJrcwogCQkgKiByaWdodCAhCiAJCSAqLworCQkvKiBXb3JrYXJvdW5kOiBJdCBzZWVtcyB0aGF0IHJ1bm5pbmcgdGhlIGNsb2Nrc3ByZWFkaW5nCisJCSAqIHByb3BlcnRpZXMgb24gdGhlIGVNYWMgd2lsbCBjYXVzZSBsb2NrdXBzIGR1cmluZyBib290LgorCQkgKiBUaGUgbWFjaGluZSBzZWVtcyB0byB3b3JrIGZpbmUgd2l0aG91dCB0aGF0LiBTbyBmb3Igbm93LAorCQkgKiBsZXQncyBtYWtlIHN1cmUgaTJjLWh3Y2xvY2sgZG9lc24ndCBtYXRjaCBhYm91dCAiaW1pYyIKKwkJICogY2xvY2tzIGFuZCB3ZSdsbCBmaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBuZWVkIHRvIGRvCisJCSAqIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IHRob3NlIGxhdGVyLgorCQkgKi8KKwkJeyAiaTJjLWh3Y2xvY2siLCAiaW1pYzUwMDIiLCBwbWFjX2kyY19xdWlya19za2lwIH0sCisJCXsgImkyYy1od2Nsb2NrIiwgImltaWM1MDAzIiwgcG1hY19pMmNfcXVpcmtfc2tpcCB9LAogCQl7ICJpMmMtaHdjbG9jayIsIE5VTEwsIHBtYWNfaTJjX3F1aXJrX2ludm1hc2sgfSwKIAkJeyAiaTJjLWNwdS12b2x0YWdlIiwgTlVMTCwgMH0sCiAJCXsgICJ0ZW1wLW1vbml0b3IiLCBOVUxMLCAwIH0sCkBAIC0xMjA2LDYgKzEyMDgsOCBAQAogCQkJCWlmIChwLT5jb21wYXRpYmxlICYmCiAJCQkJICAgICFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgcC0+Y29tcGF0aWJsZSkpCiAJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwLT5xdWlya3MgJiBwbWFjX2kyY19xdWlya19za2lwKQorCQkJCQlicmVhazsKIAkJCQljYWxsYmFjayhucCwgcC0+cXVpcmtzKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IGY1ZDhkMTUuLmVhMTc5YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAkgKiAoaUJvb2sgc2Vjb25kIGNvbnRyb2xsZXIpCiAJICovCiAJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVBQTEUKLQkgICAgJiYgKGRldi0+Y2xhc3MgPT0gKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MTApKQorCSAgICAmJiBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0kKIAkgICAgJiYgIW5vZGUpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQXBwbGUgVVNCIE9IQ0kgJXMgZGlzYWJsZWQgYnkgZmlybXdhcmVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggNGJhYTc1Yi4uZjA4MTczYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTU0Niw2ICs1NDcsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBtZl9kZXZpY2VzKTsKIHN0YXRpYyBzcGlubG9ja190IHBtZl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9NVVRFWChwbWZfaXJxX211dGV4KTsKIAogc3RhdGljIHZvaWQgcG1mX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKQogewpAQCAtODY0LDE1ICs4NjYsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwbWZfbG9jaywgZmxhZ3MpOwogCWZ1bmMgPSBfX3BtZl9maW5kX2Z1bmN0aW9uKHRhcmdldCwgbmFtZSwgUE1GX0ZMQUdTX0lOVF9HRU4pOwotCWlmIChmdW5jID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwlpZiAoZnVuYykKKwkJZnVuYyA9IHBtZl9nZXRfZnVuY3Rpb24oZnVuYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwlpZiAoZnVuYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJbXV0ZXhfbG9jaygmcG1mX2lycV9tdXRleCk7CiAJaWYgKGxpc3RfZW1wdHkoJmZ1bmMtPmlycV9jbGllbnRzKSkKIAkJZnVuYy0+ZGV2LT5oYW5kbGVycy0+aXJxX2VuYWJsZShmdW5jKTsKIAlsaXN0X2FkZCgmY2xpZW50LT5saW5rLCAmZnVuYy0+aXJxX2NsaWVudHMpOwogCWNsaWVudC0+ZnVuYyA9IGZ1bmM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnBtZl9pcnFfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODEsMTYgKzg4NSwxNiBAQAogdm9pZCBwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KHN0cnVjdCBwbWZfaXJxX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwbWZfZnVuY3Rpb24gKmZ1bmMgPSBjbGllbnQtPmZ1bmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihmdW5jID09IE5VTEwpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtZl9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcG1mX2lycV9tdXRleCk7CiAJY2xpZW50LT5mdW5jID0gTlVMTDsKIAlsaXN0X2RlbCgmY2xpZW50LT5saW5rKTsKIAlpZiAobGlzdF9lbXB0eSgmZnVuYy0+aXJxX2NsaWVudHMpKQogCQlmdW5jLT5kZXYtPmhhbmRsZXJzLT5pcnFfZGlzYWJsZShmdW5jKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWZfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcG1mX2lycV9tdXRleCk7CisJcG1mX3B1dF9mdW5jdGlvbihmdW5jKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggNGQxNWUzOS4uYjkyMDBmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNDYzLDExICs0NjMsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbWFjX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAxOworCS8qIGNhbid0IGRvIGFueSBvdGhlciBzdGF0ZXMgdmlhIGdlbmVyaWMgbWVjaGFuaXNtIHlldCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBwbV9vcHMgcG1hY19wbV9vcHMgPSB7CiAJLnBtX2Rpc2tfbW9kZQk9IFBNX0RJU0tfU0hVVERPV04sCiAJLnByZXBhcmUJPSBwbWFjX3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IHBtYWNfcG1fZW50ZXIsCiAJLmZpbmlzaAkJPSBwbWFjX3BtX2ZpbmlzaCwKKwkudmFsaWQJCT0gcG1hY19wbV92YWxpZCwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfU09GVFdBUkVfU1VTUEVORCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IDliMmIxY2IuLjMyZWFkZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTg2NSw3ICs4NjUsNyBAQAogICogb24gdGhlIENFQyBhcmNoaXRlY3R1cmUsIHR5cGUgb2YgdGhlIGRldmljZSwgb24gZWFybGllciBib290CiAgKiBjb21tYW5kLWxpbmUgYXJndW1lbnRzICYgZXRjLgogICovCi12b2lkIGVlaF9hZGRfZGV2aWNlX2Vhcmx5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCitzdGF0aWMgdm9pZCBlZWhfYWRkX2RldmljZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCXN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gaW5mbzsKQEAgLTg4Miw3ICs4ODIsNiBAQAogCWluZm8uYnVpZF9sbyA9IEJVSURfTE8ocGhiLT5idWlkKTsKIAllYXJseV9lbmFibGVfZWVoKGRuLCAmaW5mbyk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9lYXJseSk7CiAKIHZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewpAQCAtODkzLDIwICs4OTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseSk7CiAKLXZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotIAkJZWVoX2FkZF9kZXZpY2VfbGF0ZShkZXYpOwotIAkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotIAkJCXN0cnVjdCBwY2lfYnVzICpzdWJidXMgPSBkZXYtPnN1Ym9yZGluYXRlOwotIAkJCWlmIChzdWJidXMpCi0gCQkJCWVlaF9hZGRfZGV2aWNlX3RyZWVfbGF0ZShzdWJidXMpOwotIAkJfQotCX0KLX0KLQogLyoqCiAgKiBlZWhfYWRkX2RldmljZV9sYXRlIC0gcGVyZm9ybSBFRUggaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQogICogQGRldjogcGNpIGRldmljZSBmb3Igd2hpY2ggdG8gc2V0IHVwIEVFSApAQCAtOTE0LDcgKzg5OSw3IEBACiAgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSB1c2VkIHRvIGNvbXBsZXRlIEVFSCBpbml0aWFsaXphdGlvbiBmb3IgUENJCiAgKiBkZXZpY2VzIHRoYXQgd2VyZSBhZGRlZCBhZnRlciBzeXN0ZW0gYm9vdCAoZS5nLiBob3RwbHVnLCBkbHBhcikuCiAgKi8KLXZvaWQgZWVoX2FkZF9kZXZpY2VfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgZWVoX2FkZF9kZXZpY2VfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHBjaV9kbiAqcGRuOwpAQCAtOTMzLDE2ICs5MTgsMzMgQEAKIAogCXBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2UgKGRldik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9sYXRlKTsKKwordm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2xhdGUoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisgCQllZWhfYWRkX2RldmljZV9sYXRlKGRldik7CisgCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisgCQkJc3RydWN0IHBjaV9idXMgKnN1YmJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CisgCQkJaWYgKHN1YmJ1cykKKyAJCQkJZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN1YmJ1cyk7CisgCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKTsKIAogLyoqCiAgKiBlZWhfcmVtb3ZlX2RldmljZSAtIHVuZG8gRUVIIHNldHVwIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKICAqIEBkZXY6IHBjaSBkZXZpY2UgdG8gYmUgcmVtb3ZlZAogICoKLSAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkIGZyb20gYSBydW5uaW5nCi0gKiBzeXN0ZW0gKGUuZy4gYnkgaG90cGx1ZyBvciBkbHBhcikuCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbQorICogYSBydW5uaW5nIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4gIEl0IHVucmVnaXN0ZXJzCisgKiB0aGUgUENJIGRldmljZSBmcm9tIHRoZSBFRUggc3Vic3lzdGVtLiAgSS9PIGVycm9ycyBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIGRldGVjdGVkIGFmdGVyIHRoaXMgY2FsbDsgdGh1cywKKyAqIGkvbyBlcnJvcnMgYWZmZWN0aW5nIHRoaXMgc2xvdCBtYXkgbGVhdmUgdGhpcyBkZXZpY2UgdW51c2FibGUuCiAgKi8KLXZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIGVlaF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlpZiAoIWRldiB8fCAhZWVoX3N1YnN5c3RlbV9lbmFibGVkKQpAQCAtOTU1LDI0ICs5NTcsMjIgQEAKIAlwY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKGRldik7CiAKIAlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwotCVBDSV9ETihkbiktPnBjaWRldiA9IE5VTEw7Ci0JcGNpX2Rldl9wdXQgKGRldik7CisJaWYgKFBDSV9ETihkbiktPnBjaWRldikgeworCQlQQ0lfRE4oZG4pLT5wY2lkZXYgPSBOVUxMOworCQlwY2lfZGV2X3B1dCAoZGV2KTsKKwl9CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlZWhfcmVtb3ZlX2RldmljZSk7CiAKIHZvaWQgZWVoX3JlbW92ZV9idXNfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CisJc3RydWN0IHBjaV9kZXYgKmNoaWxkLCAqdG1wOworCiAJZWVoX3JlbW92ZV9kZXZpY2UoZGV2KTsKLQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0JCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPnN1Ym9yZGluYXRlOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICpsbjsKLQkJaWYgKCFidXMpCi0JCQlyZXR1cm47IAotCQlmb3IgKGxuID0gYnVzLT5kZXZpY2VzLm5leHQ7IGxuICE9ICZidXMtPmRldmljZXM7IGxuID0gbG4tPm5leHQpIHsKLQkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGNpX2Rldl9iKGxuKTsKLQkJCWlmIChwZGV2KQotCQkJCWVlaF9yZW1vdmVfYnVzX2RldmljZShwZGV2KTsKLQkJfQorCisJaWYgKGJ1cyAmJiBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkLCB0bXAsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQkJIGVlaF9yZW1vdmVfYnVzX2RldmljZShjaGlsZCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWVoX3JlbW92ZV9idXNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGNjMjQ5NWEuLjFmYmE2OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMjkzLDE1ICsyOTMsMTYgQEAKIAlmcm96ZW5fcGRuID0gUENJX0ROKGZyb3plbl9kbik7CiAJZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCsrOwogCi0JcGNpX3N0ciA9IHBjaV9uYW1lIChmcm96ZW5fcGRuLT5wY2lkZXYpOwotCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7Ci0JaWYgKCFwY2lfc3RyKSB7CisJaWYgKGZyb3plbl9wZG4tPnBjaWRldikgeworCQlwY2lfc3RyID0gcGNpX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CisJCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CisJfSBlbHNlIHsKIAkJcGNpX3N0ciA9IHBjaV9uYW1lIChldmVudC0+ZGV2KTsKIAkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZXZlbnQtPmRldik7CiAJfQogCQogCWlmIChmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50ID4gRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMpCi0JCWdvdG8gaGFyZF9mYWlsOworCQlnb3RvIGV4Y2Vzc19mYWlsdXJlczsKIAogCS8qIElmIHRoZSByZXNldCBzdGF0ZSBpcyBhICc1JyBhbmQgdGhlIHRpbWUgdG8gcmVzZXQgaXMgMCAoaW5maW5pdHkpCiAJICogb3IgaXMgbW9yZSB0aGVuIDE1IHNlY29uZHMsIHRoZW4gbWFyayB0aGlzIGFzIGEgcGVybWFuZW50IGZhaWx1cmUuCkBAIC0zNTYsNyArMzU3LDcgQEAKIAogCXJldHVybjsKIAkKLWhhcmRfZmFpbDoKK2V4Y2Vzc19mYWlsdXJlczoKIAkvKgogCSAqIEFib3V0IDkwJSBvZiBhbGwgcmVhbC1saWZlIEVFSCBmYWlsdXJlcyBpbiB0aGUgZmllbGQKIAkgKiBhcmUgZHVlIHRvIHBvb3JseSBzZWF0ZWQgUENJIGNhcmRzLiBPbmx5IDEwJSBvciBzbyBhcmUKQEAgLTM2Nyw3ICszNjgsMTUgQEAKIAkgICAiYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLiAgUGxlYXNlIHRyeSByZXNlYXRpbmdcbiIKIAkgICAidGhpcyBkZXZpY2Ugb3IgcmVwbGFjaW5nIGl0LlxuIiwKIAkJZHJ2X3N0ciwgcGNpX3N0ciwgZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCk7CisJZ290byBwZXJtX2Vycm9yOwogCitoYXJkX2ZhaWw6CisJcHJpbnRrKEtFUk5fRVJSCisJICAgIkVFSDogVW5hYmxlIHRvIHJlY292ZXIgZnJvbSBmYWlsdXJlIG9mIFBDSSBkZXZpY2UgJXMgLSAlc1xuIgorCSAgICJQbGVhc2UgdHJ5IHJlc2VhdGluZyB0aGlzIGRldmljZSBvciByZXBsYWNpbmcgaXQuXG4iLAorCQlkcnZfc3RyLCBwY2lfc3RyKTsKKworcGVybV9lcnJvcjoKIAllZWhfc2xvdF9lcnJvcl9kZXRhaWwoZnJvemVuX3BkbiwgMiAvKiBQZXJtYW5lbnQgRXJyb3IgKi8pOwogCiAJLyogTm90aWZ5IGFsbCBkZXZpY2VzIHRoYXQgdGhleSdyZSBhYm91dCB0byBnbyBkb3duLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCmluZGV4IDlhOTk2MWYuLjQwMDIwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTE5LDcgKzE5LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2VlaF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAKQEAgLTM3LDE0ICszOSwxOCBAQAogc3RhdGljIHZvaWQgZWVoX3RocmVhZF9sYXVuY2hlcih2b2lkICopOwogREVDTEFSRV9XT1JLKGVlaF9ldmVudF93cSwgZWVoX3RocmVhZF9sYXVuY2hlciwgTlVMTCk7CiAKKy8qIFNlcmlhbGl6ZSByZXNldCBzZXF1ZW5jZXMgZm9yIGEgZ2l2ZW4gcGNpIGRldmljZSAqLworREVGSU5FX01VVEVYKGVlaF9ldmVudF9tdXRleCk7CisKIC8qKgotICogZWVoX2V2ZW50X2hhbmRsZXIgLSBkaXNwYXRjaCBFRUggZXZlbnRzLiAgVGhlIGRldGVjdGlvbiBvZiBhIGZyb3plbgotICogc2xvdCBjYW4gb2NjdXIgaW5zaWRlIGFuIGludGVycnVwdCwgd2hlcmUgaXQgY2FuIGJlIGhhcmQgdG8gZG8KLSAqIGFueXRoaW5nIGFib3V0IGl0LiAgVGhlIGdvYWwgb2YgdGhpcyByb3V0aW5lIGlzIHRvIHB1bGwgdGhlc2UKLSAqIGRldGVjdGlvbiBldmVudHMgb3V0IG9mIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kCi0gKiByZS1kaXNwYXRjaCB0aGVtIGZvciBwcm9jZXNzaW5nIGF0IGEgbGF0ZXIgdGltZSBpbiBhIG5vcm1hbCBjb250ZXh0LgotICoKKyAqIGVlaF9ldmVudF9oYW5kbGVyIC0gZGlzcGF0Y2ggRUVIIGV2ZW50cy4KICAqIEBkdW1teSAtIHVudXNlZAorICoKKyAqIFRoZSBkZXRlY3Rpb24gb2YgYSBmcm96ZW4gc2xvdCBjYW4gb2NjdXIgaW5zaWRlIGFuIGludGVycnVwdCwKKyAqIHdoZXJlIGl0IGNhbiBiZSBoYXJkIHRvIGRvIGFueXRoaW5nIGFib3V0IGl0LiAgVGhlIGdvYWwgb2YgdGhpcworICogcm91dGluZSBpcyB0byBwdWxsIHRoZXNlIGRldGVjdGlvbiBldmVudHMgb3V0IG9mIHRoZSBjb250ZXh0CisgKiBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZCByZS1kaXNwYXRjaCB0aGVtIGZvciBwcm9jZXNzaW5nCisgKiBhdCBhIGxhdGVyIHRpbWUgaW4gYSBub3JtYWwgY29udGV4dC4KICAqLwogc3RhdGljIGludCBlZWhfZXZlbnRfaGFuZGxlcih2b2lkICogZHVtbXkpCiB7CkBAIC02NCwyMyArNzAsMjQgQEAKIAkJCWV2ZW50ID0gbGlzdF9lbnRyeShlZWhfZXZlbnRsaXN0Lm5leHQsIHN0cnVjdCBlZWhfZXZlbnQsIGxpc3QpOwogCQkJbGlzdF9kZWwoJmV2ZW50LT5saXN0KTsKIAkJfQotCQkKLQkJaWYgKGV2ZW50KQotCQkJZWVoX21hcmtfc2xvdChldmVudC0+ZG4sIEVFSF9NT0RFX1JFQ09WRVJJTkcpOwotCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCiAJCWlmIChldmVudCA9PSBOVUxMKQogCQkJYnJlYWs7CiAKKwkJLyogU2VyaWFsaXplIHByb2Nlc3Npbmcgb2YgRUVIIGV2ZW50cyAqLworCQltdXRleF9sb2NrKCZlZWhfZXZlbnRfbXV0ZXgpOworCQllZWhfbWFya19zbG90KGV2ZW50LT5kbiwgRUVIX01PREVfUkVDT1ZFUklORyk7CisKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBEZXRlY3RlZCBQQ0kgYnVzIGVycm9yIG9uIGRldmljZSAlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKIAogCQloYW5kbGVfZWVoX2V2ZW50cyhldmVudCk7CiAKIAkJZWVoX2NsZWFyX3Nsb3QoZXZlbnQtPmRuLCBFRUhfTU9ERV9SRUNPVkVSSU5HKTsKLQogCQlwY2lfZGV2X3B1dChldmVudC0+ZGV2KTsKIAkJa2ZyZWUoZXZlbnQpOworCQltdXRleF91bmxvY2soJmVlaF9ldmVudF9tdXRleCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04OCw3ICs5NSw2IEBACiAKIC8qKgogICogZWVoX3RocmVhZF9sYXVuY2hlcgotICoKICAqIEBkdW1teSAtIHVudXNlZAogICovCiBzdGF0aWMgdm9pZCBlZWhfdGhyZWFkX2xhdW5jaGVyKHZvaWQgKmR1bW15KQpAQCAtMTEyLDcgKzExOCwxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVlaF9ldmVudCAqZXZlbnQ7CisJY2hhciAqbG9jYXRpb247CiAKKwlpZiAoIW1lbV9pbml0X2RvbmUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IGV2ZW50IGR1cmluZyBlYXJseSBib290IG5vdCBoYW5kbGVkXG4iKTsKKwkJbG9jYXRpb24gPSAoY2hhciAqKSBnZXRfcHJvcGVydHkoZG4sICJpYm0sbG9jLWNvZGUiLCBOVUxMKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IGRldmljZSBub2RlID0gJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIkVFSDogUENJIGxvY2F0aW9uID0gJXNcbiIsIGxvY2F0aW9uKTsKKwkJcmV0dXJuIDE7CisJfQogCWV2ZW50ID0ga21hbGxvYyhzaXplb2YoKmV2ZW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGV2ZW50ID09IE5VTEwpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBvdXQgb2YgbWVtb3J5LCBldmVudCBub3QgaGFuZGxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKaW5kZXggZGI3YzE5Zi4uYzlmZjU0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwpAQCAtMTI3LDMgKzEyNywxMDMgQEAKIAogCW10Y3JmCTB4ZmYscjAKIAlibHIJCQkJLyogcmV0dXJuIHIzID0gc3RhdHVzICovCisKKy8qIHBscGFyX2hjYWxsXzdhcmdfN3JldCh1bnNpZ25lZCBsb25nIG9wY29kZSwJCVIzCisJCQkgdW5zaWduZWQgbG9uZyBhcmcxLAkJUjQKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzIsCQlSNQorCQkJIHVuc2lnbmVkIGxvbmcgYXJnMywJCVI2CisJCQkgdW5zaWduZWQgbG9uZyBhcmc0LAkJUjcKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzUsCQlSOAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnNiwJCVI5CisJCQkgdW5zaWduZWQgbG9uZyBhcmc3LAkJUjEwCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0MSwJCTExMihSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQyLAkJMTEwKFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDMsCQkxMDgoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0NCwJCTEwNihSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQ1LAkJMTA0KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDYsCQkxMDIoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0Nyk7CQkxMDAoUjEpCisqLworX0dMT0JBTChwbHBhcl9oY2FsbF83YXJnXzdyZXQpCisJSE1UX01FRElVTQorCisJbWZjcglyMAorCXN0dwlyMCw4KHIxKQorCisJSFZTQwkJCQkvKiBpbnZva2UgdGhlIGh5cGVydmlzb3IgKi8KKworCWx3eglyMCw4KHIxKQorCisJbGQJcjExLFNUS19QQVJNKHIxMSkocjEpCS8qIEZldGNoIHI0IHJldCBhcmcgKi8KKwlzdGQJcjQsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxMikocjEpCS8qIEZldGNoIHI1IHJldCBhcmcgKi8KKwlzdGQJcjUsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxMykocjEpCS8qIEZldGNoIHI2IHJldCBhcmcgKi8KKwlzdGQJcjYsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNCkocjEpCS8qIEZldGNoIHI3IHJldCBhcmcgKi8KKwlzdGQJcjcsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNSkocjEpCS8qIEZldGNoIHI4IHJldCBhcmcgKi8KKwlzdGQJcjgsMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNikocjEpCS8qIEZldGNoIHI5IHJldCBhcmcgKi8KKwlzdGQJcjksMChyMTEpCisJbGQJcjExLFNUS19QQVJNKHIxNykocjEpCS8qIEZldGNoIHIxMCByZXQgYXJnICovCisJc3RkCXIxMCwwKHIxMSkKKworCW10Y3JmCTB4ZmYscjAKKworCWJscgkJCQkvKiByZXR1cm4gcjMgPSBzdGF0dXMgKi8KKworLyogcGxwYXJfaGNhbGxfOWFyZ185cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAkJUjMKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzEsCQlSNAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnMiwJCVI1CisJCQkgdW5zaWduZWQgbG9uZyBhcmczLAkJUjYKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzQsCQlSNworCQkJIHVuc2lnbmVkIGxvbmcgYXJnNSwJCVI4CisJCQkgdW5zaWduZWQgbG9uZyBhcmc2LAkJUjkKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzcsCQlSMTAKKwkJCSB1bnNpZ25lZCBsb25nIGFyZzgsCQkxMTIoUjEpCisJCQkgdW5zaWduZWQgbG9uZyBhcmc5LAkJMTEwKFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDEsCQkxMDgoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0MiwJCTEwNihSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQzLAkJMTA0KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDQsCQkxMDIoUjEpCisJCQkgdW5zaWduZWQgbG9uZyAqb3V0NSwJCTEwMChSMSkKKwkJCSB1bnNpZ25lZCBsb25nICpvdXQ2LAkJIDk4KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDcpOwkJIDk2KFIxKQorCQkJIHVuc2lnbmVkIGxvbmcgKm91dDgsCQkgOTQoUjEpCisJCSAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dDksICAgICAgICAgICAgOTIoUjEpCisqLworX0dMT0JBTChwbHBhcl9oY2FsbF85YXJnXzlyZXQpCisJSE1UX01FRElVTQorCisJbWZjcglyMAorCXN0dwlyMCw4KHIxKQorCisJbGQJcjExLFNUS19QQVJNKHIxMSkocjEpCSAvKiBwdXQgYXJnOCBpbiBSMTEgKi8KKwlsZAlyMTIsU1RLX1BBUk0ocjEyKShyMSkgICAgLyogcHV0IGFyZzkgaW4gUjEyICovCisKKwlIVlNDCQkJCS8qIGludm9rZSB0aGUgaHlwZXJ2aXNvciAqLworCisJbGQJcjAsU1RLX1BBUk0ocjEzKShyMSkJLyogRmV0Y2ggcjQgcmV0IGFyZyAqLworCXN0ZHgJcjQscjAscjAKKwlsZAlyMCxTVEtfUEFSTShyMTQpKHIxKQkvKiBGZXRjaCByNSByZXQgYXJnICovCisJc3RkeAlyNSxyMCxyMAorCWxkCXIwLFNUS19QQVJNKHIxNSkocjEpCS8qIEZldGNoIHI2IHJldCBhcmcgKi8KKwlzdGR4CXI2LHIwLHIwCisJbGQJcjAsU1RLX1BBUk0ocjE2KShyMSkJLyogRmV0Y2ggcjcgcmV0IGFyZyAqLworCXN0ZHgJcjcscjAscjAKKwlsZAlyMCxTVEtfUEFSTShyMTcpKHIxKQkvKiBGZXRjaCByOCByZXQgYXJnICovCisJc3RkeAlyOCxyMCxyMAorCWxkCXIwLFNUS19QQVJNKHIxOCkocjEpCS8qIEZldGNoIHI5IHJldCBhcmcgKi8KKwlzdGR4CXI5LHIwLHIwCisJbGQJcjAsU1RLX1BBUk0ocjE5KShyMSkJLyogRmV0Y2ggcjEwIHJldCBhcmcgKi8KKwlzdGR4CXIxMCxyMCxyMAorCWxkCXIwLFNUS19QQVJNKHIyMCkocjEpCS8qIEZldGNoIHIxMSByZXQgYXJnICovCisJc3RkeAlyMTEscjAscjAKKwlsZAlyMCxTVEtfUEFSTShyMjEpKHIxKQkvKiBGZXRjaCByMTIgcmV0IGFyZyAqLworCXN0ZHgJcjEyLHIwLHIwCisKKwlsd3oJcjAsOChyMSkKKwltdGNyZgkweGZmLHIwCisKKwlibHIJCQkJLyogcmV0dXJuIHIzID0gc3RhdHVzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjb25zb2xlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjb25zb2xlLmMKaW5kZXggYmE2YmVmZC4uYTcyYTk4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y29uc29sZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNvbnNvbGUuYwpAQCAtNDEsNyArNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZ290OwogCiAJaWYgKHBscGFyX2hjYWxsKEhfR0VUX1RFUk1fQ0hBUiwgdnRlcm1ubywgMCwgMCwgMCwgJmdvdCwKLQkJKHVuc2lnbmVkIGxvbmcgKilidWYsICh1bnNpZ25lZCBsb25nICopYnVmKzEpID09IEhfU3VjY2VzcykKKwkJKHVuc2lnbmVkIGxvbmcgKilidWYsICh1bnNpZ25lZCBsb25nICopYnVmKzEpID09IEhfU1VDQ0VTUykKIAkJcmV0dXJuIGdvdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTY5LDkgKzY5LDkgQEAKIAogCXJldCA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1BVVF9URVJNX0NIQVIsIHZ0ZXJtbm8sIGNvdW50LCBsYnVmWzBdLAogCQkJCSBsYnVmWzFdKTsKLQlpZiAocmV0ID09IEhfU3VjY2VzcykKKwlpZiAocmV0ID09IEhfU1VDQ0VTUykKIAkJcmV0dXJuIGNvdW50OwotCWlmIChyZXQgPT0gSF9CdXN5KQorCWlmIChyZXQgPT0gSF9CVVNZKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYwppbmRleCAyMmJmYjVjLi5mY2Y0YjRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jCkBAIC00MywyMSArNDMsMjEgQEAKIHN0YXRpYyBpbnQgaHZjc19jb252ZXJ0KGxvbmcgdG9fY29udmVydCkKIHsKIAlzd2l0Y2ggKHRvX2NvbnZlcnQpIHsKLQkJY2FzZSBIX1N1Y2Nlc3M6CisJCWNhc2UgSF9TVUNDRVNTOgogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgSF9QYXJhbWV0ZXI6CisJCWNhc2UgSF9QQVJBTUVURVI6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2FzZSBIX0hhcmR3YXJlOgorCQljYXNlIEhfSEFSRFdBUkU6CiAJCQlyZXR1cm4gLUVJTzsKLQkJY2FzZSBIX0J1c3k6Ci0JCWNhc2UgSF9Mb25nQnVzeU9yZGVyMW1zZWM6Ci0JCWNhc2UgSF9Mb25nQnVzeU9yZGVyMTBtc2VjOgotCQljYXNlIEhfTG9uZ0J1c3lPcmRlcjEwMG1zZWM6Ci0JCWNhc2UgSF9Mb25nQnVzeU9yZGVyMXNlYzoKLQkJY2FzZSBIX0xvbmdCdXN5T3JkZXIxMHNlYzoKLQkJY2FzZSBIX0xvbmdCdXN5T3JkZXIxMDBzZWM6CisJCWNhc2UgSF9CVVNZOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzFfTVNFQzoKKwkJY2FzZSBIX0xPTkdfQlVTWV9PUkRFUl8xMF9NU0VDOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwMF9NU0VDOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzFfU0VDOgorCQljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwX1NFQzoKKwkJY2FzZSBIX0xPTkdfQlVTWV9PUkRFUl8xMDBfU0VDOgogCQkJcmV0dXJuIC1FQlVTWTsKLQkJY2FzZSBIX0Z1bmN0aW9uOiAvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBIX0ZVTkNUSU9OOiAvKiBmYWxsIHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRVBFUk07CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKaW5kZXggODk1MjUyOC4uNjM0YjdkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCkBAIC01NCw3ICs1NCw4IEBACiBFWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzRvdXQpOwogRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF9ub3JldHMpOwogRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF84YXJnXzJyZXQpOwotCitFWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzdhcmdfN3JldCk7CitFWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzlhcmdfOXJldCk7CiBleHRlcm4gdm9pZCBwU2VyaWVzX2ZpbmRfc2VyaWFsX3BvcnQodm9pZCk7CiAKIApAQCAtNzIsNyArNzMsNyBAQAogCiAJZG8gewogCQlyYyA9IHBscGFyX3B1dF90ZXJtX2NoYXIodnRlcm1ubywgc2l6ZW9mKHBhY2tldCksIHBhY2tldCk7Ci0JfSB3aGlsZSAocmMgPT0gSF9CdXN5KTsKKwl9IHdoaWxlIChyYyA9PSBIX0JVU1kpOwogfQogCiBzdGF0aWMgbG9uZyBodnNpX3VkYmdfYnVmX2xlbjsKQEAgLTg1LDcgKzg2LDcgQEAKIAogCWlmIChodnNpX3VkYmdfYnVmX2xlbiA9PSAwKSB7CiAJCXJjID0gcGxwYXJfZ2V0X3Rlcm1fY2hhcih2dGVybW5vLCAmaHZzaV91ZGJnX2J1Zl9sZW4sIGh2c2lfdWRiZ19idWYpOwotCQlpZiAocmMgIT0gSF9TdWNjZXNzIHx8IGh2c2lfdWRiZ19idWZbMF0gIT0gMHhmZikgeworCQlpZiAocmMgIT0gSF9TVUNDRVNTIHx8IGh2c2lfdWRiZ19idWZbMF0gIT0gMHhmZikgewogCQkJLyogYmFkIHJlYWQgb3Igbm9uLWRhdGEgcGFja2V0ICovCiAJCQlodnNpX3VkYmdfYnVmX2xlbiA9IDA7CiAJCX0gZWxzZSB7CkBAIC0xMzksNyArMTQwLDcgQEAKIAlidWZbMF0gPSBjOwogCWRvIHsKIAkJcmMgPSBwbHBhcl9wdXRfdGVybV9jaGFyKHZ0ZXJtbm8sIDEsIGJ1Zik7Ci0JfSB3aGlsZShyYyA9PSBIX0J1c3kpOworCX0gd2hpbGUocmMgPT0gSF9CVVNZKTsKIH0KIAogLyogQnVmZmVyZWQgY2hhcnMgZ2V0YyAqLwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCS8qIGdldCBzb21lIG1vcmUgY2hhcnMuICovCiAJCWluYnVmbGVuID0gMDsKIAkJcmMgPSBwbHBhcl9nZXRfdGVybV9jaGFyKHZ0ZXJtbm8sICZpbmJ1ZmxlbiwgYnVmKTsKLQkJaWYgKHJjICE9IEhfU3VjY2VzcykKKwkJaWYgKHJjICE9IEhfU1VDQ0VTUykKIAkJCWluYnVmbGVuID0gMDsJLyogb3RoZXJ3aXNlIGluYnVmbGVuIGlzIGdhcmJhZ2UgKi8KIAl9CiAJaWYgKGluYnVmbGVuIDw9IDAgfHwgaW5idWZsZW4gPiAxNikgewpAQCAtMzA0LDcgKzMwNSw3IEBACiAKIAlscGFyX3JjID0gcGxwYXJfaGNhbGwoSF9FTlRFUiwgZmxhZ3MsIGhwdGVfZ3JvdXAsIGhwdGVfdiwKIAkJCSAgICAgIGhwdGVfciwgJnNsb3QsICZkdW1teTAsICZkdW1teTEpOwotCWlmICh1bmxpa2VseShscGFyX3JjID09IEhfUFRFR19GdWxsKSkgeworCWlmICh1bmxpa2VseShscGFyX3JjID09IEhfUFRFR19GVUxMKSkgewogCQlpZiAoISh2ZmxhZ3MgJiBIUFRFX1ZfQk9MVEVEKSkKIAkJCURCR19MT1coIiBmdWxsXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzE1LDcgKzMxNiw3IEBACiAJICogd2lsbCBmYWlsLiBIb3dldmVyIHdlIG11c3QgY2F0Y2ggdGhlIGZhaWx1cmUgaW4gaGFzaF9wYWdlCiAJICogb3Igd2Ugd2lsbCBsb29wIGZvcmV2ZXIsIHNvIHJldHVybiAtMiBpbiB0aGlzIGNhc2UuCiAJICovCi0JaWYgKHVubGlrZWx5KGxwYXJfcmMgIT0gSF9TdWNjZXNzKSkgeworCWlmICh1bmxpa2VseShscGFyX3JjICE9IEhfU1VDQ0VTUykpIHsKIAkJaWYgKCEodmZsYWdzICYgSFBURV9WX0JPTFRFRCkpCiAJCQlEQkdfTE9XKCIgbHBhciBlcnIgJWRcbiIsIGxwYXJfcmMpOwogCQlyZXR1cm4gLTI7CkBAIC0zNDYsOSArMzQ3LDkgQEAKIAkJLyogZG9uJ3QgcmVtb3ZlIGEgYm9sdGVkIGVudHJ5ICovCiAJCWxwYXJfcmMgPSBwbHBhcl9wdGVfcmVtb3ZlKEhfQU5EQ09ORCwgaHB0ZV9ncm91cCArIHNsb3Rfb2Zmc2V0LAogCQkJCQkgICAoMHgxVUwgPDwgNCksICZkdW1teTEsICZkdW1teTIpOwotCQlpZiAobHBhcl9yYyA9PSBIX1N1Y2Nlc3MpCisJCWlmIChscGFyX3JjID09IEhfU1VDQ0VTUykKIAkJCXJldHVybiBpOwotCQlCVUdfT04obHBhcl9yYyAhPSBIX05vdF9Gb3VuZCk7CisJCUJVR19PTihscGFyX3JjICE9IEhfTk9UX0ZPVU5EKTsKIAogCQlzbG90X29mZnNldCsrOwogCQlzbG90X29mZnNldCAmPSAweDc7CkBAIC0zOTEsMTQgKzM5MiwxNCBAQAogCiAJbHBhcl9yYyA9IHBscGFyX3B0ZV9wcm90ZWN0KGZsYWdzLCBzbG90LCB3YW50X3YgJiBIUFRFX1ZfQVZQTik7CiAKLQlpZiAobHBhcl9yYyA9PSBIX05vdF9Gb3VuZCkgeworCWlmIChscGFyX3JjID09IEhfTk9UX0ZPVU5EKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCURCR19MT1coIm9rXG4iKTsKIAotCUJVR19PTihscGFyX3JjICE9IEhfU3VjY2Vzcyk7CisJQlVHX09OKGxwYXJfcmMgIT0gSF9TVUNDRVNTKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDE3LDcgKzQxOCw3IEBACiAKIAlscGFyX3JjID0gcGxwYXJfcHRlX3JlYWQoZmxhZ3MsIHNsb3QsICZkd29yZDAsICZkdW1teV93b3JkMSk7CiAKLQlCVUdfT04obHBhcl9yYyAhPSBIX1N1Y2Nlc3MpOworCUJVR19PTihscGFyX3JjICE9IEhfU1VDQ0VTUyk7CiAKIAlyZXR1cm4gZHdvcmQwOwogfQpAQCAtNDY4LDcgKzQ2OSw3IEBACiAJZmxhZ3MgPSBuZXdwcCAmIDc7CiAJbHBhcl9yYyA9IHBscGFyX3B0ZV9wcm90ZWN0KGZsYWdzLCBzbG90LCAwKTsKIAotCUJVR19PTihscGFyX3JjICE9IEhfU3VjY2Vzcyk7CisJQlVHX09OKGxwYXJfcmMgIT0gSF9TVUNDRVNTKTsKIH0KIAogc3RhdGljIHZvaWQgcFNlcmllc19scGFyX2hwdGVfaW52YWxpZGF0ZSh1bnNpZ25lZCBsb25nIHNsb3QsIHVuc2lnbmVkIGxvbmcgdmEsCkBAIC00ODQsMTAgKzQ4NSwxMCBAQAogCXdhbnRfdiA9IGhwdGVfZW5jb2RlX3YodmEsIHBzaXplKTsKIAlscGFyX3JjID0gcGxwYXJfcHRlX3JlbW92ZShIX0FWUE4sIHNsb3QsIHdhbnRfdiAmIEhQVEVfVl9BVlBOLAogCQkJCSAgICZkdW1teTEsICZkdW1teTIpOwotCWlmIChscGFyX3JjID09IEhfTm90X0ZvdW5kKQorCWlmIChscGFyX3JjID09IEhfTk9UX0ZPVU5EKQogCQlyZXR1cm47CiAKLQlCVUdfT04obHBhcl9yYyAhPSBIX1N1Y2Nlc3MpOworCUJVR19PTihscGFyX3JjICE9IEhfU1VDQ0VTUyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCmluZGV4IGZjYzRkNTYuLmUwMDAwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAkvKiBObyBSVEFTICovCiAJaWYgKHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKSA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgewogCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogbm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgicHBjNjQvcnRhcy9lcnJvcl9sb2ciLCBTX0lSVVNSLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggYjJmYmY4Yi4uM2JhODc4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogewogCS8qIE1hbnVhbGx5IGxlYXZlIHRoZSBrZXJuZWwgdmVyc2lvbiBvbiB0aGUgcGFuZWwuICovCiAJcHBjX21kLnByb2dyZXNzKCJMaW51eCBwcGM2NFxuIiwgMCk7Ci0JcHBjX21kLnByb2dyZXNzKHN5c3RlbV91dHNuYW1lLnZlcnNpb24sIDApOworCXBwY19tZC5wcm9ncmVzcyhzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzg5LDYgKzM4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBTZXJpZXNfcHJvYmUodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CiAgCWNoYXIgKmR0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChvZl9nZXRfZmxhdF9kdF9yb290KCksCiAgCQkJCQkgICJkZXZpY2VfdHlwZSIsIE5VTEwpOwogIAlpZiAoZHR5cGUgPT0gTlVMTCkKQEAgLTM5Niw2ICszOTcsMTMgQEAKICAJaWYgKHN0cmNtcChkdHlwZSwgImNocnAiKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBDZWxsIGJsYWRlcyBmaXJtd2FyZSBjbGFpbXMgdG8gYmUgY2hycCB3aGlsZSBpdCdzIG5vdC4gVW50aWwgdGhpcworCSAqIGlzIGZpeGVkLCB3ZSBuZWVkIHRvIGF2b2lkIHRob3NlIGhlcmUuCisJICovCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikgfHwKKwkgICAgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpKQorCQlyZXR1cm4gMDsKKwogCURCRygicFNlcmllcyBkZXRlY3RlZCwgbG9va2luZyBmb3IgTFBBUiBjYXBhYmlsaXR5Li4uXG4iKTsKIAogCS8qIE5vdyB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcnVubmluZyBvbiBMUEFSICovCkBAIC00NjMsNyArNDcxLDcgQEAKIAkgKiB2ZXJ5IGxvdyBwcmlvcml0eS4gIFRoZSBjZWRlIGVuYWJsZXMgaW50ZXJydXB0cywgd2hpY2gKIAkgKiBkb2Vzbid0IG1hdHRlciBoZXJlLgogCSAqLwotCWlmICghbHBwYWNhW2NwdSBeIDFdLmlkbGUgfHwgcG9sbF9wZW5kaW5nKCkgPT0gSF9QZW5kaW5nKQorCWlmICghbHBwYWNhW2NwdSBeIDFdLmlkbGUgfHwgcG9sbF9wZW5kaW5nKCkgPT0gSF9QRU5ESU5HKQogCQljZWRlX3Byb2Nlc3NvcigpOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMKaW5kZXggODY2Mzc5Yi4uOGU1M2UwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYwpAQCAtMjU4LDcgKzI1OCw3IEBACiBpbnQgdmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB2aW9fZGV2ICpkZXYpCiB7CiAJaW50IHJjID0gaF92aW9fc2lnbmFsKGRldi0+dW5pdF9hZGRyZXNzLCBWSU9fSVJRX0VOQUJMRSk7Ci0JaWYgKHJjICE9IEhfU3VjY2VzcykKKwlpZiAocmMgIT0gSF9TVUNDRVNTKQogCQlwcmludGsoS0VSTl9FUlIgInZpbzogRXJyb3IgMHgleCBlbmFibGluZyBpbnRlcnJ1cHRzXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjY3LDcgKzI2Nyw3IEBACiBpbnQgdmlvX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgdmlvX2RldiAqZGV2KQogewogCWludCByYyA9IGhfdmlvX3NpZ25hbChkZXYtPnVuaXRfYWRkcmVzcywgVklPX0lSUV9ESVNBQkxFKTsKLQlpZiAocmMgIT0gSF9TdWNjZXNzKQorCWlmIChyYyAhPSBIX1NVQ0NFU1MpCiAJCXByaW50ayhLRVJOX0VSUiAidmlvOiBFcnJvciAweCV4IGRpc2FibGluZyBpbnRlcnJ1cHRzXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggNDg2NGNiMy4uMmQ2MGVhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJldHVybl92YWx1ZTsKIAogCWxwYXJfcmMgPSBwbHBhcl94aXJyKCZyZXR1cm5fdmFsdWUpOwotCWlmIChscGFyX3JjICE9IEhfU3VjY2VzcykKKwlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCiAJCXBhbmljKCIgYmFkIHJldHVybiBjb2RlIHhpcnIgLSByYyA9ICVseCBcbiIsIGxwYXJfcmMpOwogCXJldHVybiAoaW50KXJldHVybl92YWx1ZTsKIH0KQEAgLTE3OSw3ICsxNzksNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsNjQgPSB2YWx1ZSAmIDB4ZmZmZmZmZmY7CiAKIAlscGFyX3JjID0gcGxwYXJfZW9pKHZhbDY0KTsKLQlpZiAobHBhcl9yYyAhPSBIX1N1Y2Nlc3MpCisJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIEVPSSAtIHJjID0gJWxkLCB2YWx1ZT0lbHhcbiIsIGxwYXJfcmMsCiAJCSAgICAgIHZhbDY0KTsKIH0KQEAgLTE4OSw3ICsxODksNyBAQAogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAogCWxwYXJfcmMgPSBwbHBhcl9jcHByKHZhbHVlKTsKLQlpZiAobHBhcl9yYyAhPSBIX1N1Y2Nlc3MpCisJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIGNwcHIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiB9CiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAogCWxwYXJfcmMgPSBwbHBhcl9pcGkoZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChuX2NwdSksIHZhbHVlKTsKLQlpZiAobHBhcl9yYyAhPSBIX1N1Y2Nlc3MpCisJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIHFpcnIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggNjFkMzE3NC4uMzgwODdiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2luY2x1ZGUgImRhcnQuaCIKIAorZXh0ZXJuIGludCBpb21tdV9pc19vZmY7CiBleHRlcm4gaW50IGlvbW11X2ZvcmNlX29uOwogCiAvKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIERBUlQgdGFibGUgKi8KQEAgLTMyOSwxMCArMzMwLDE3IEBACiAKIHZvaWQgX19pbml0IGFsbG9jX2RhcnRfdGFibGUodm9pZCkKIHsKLQkvKiBPbmx5IHJlc2VydmUgREFSVCBzcGFjZSBpZiBtYWNoaW5lIGhhcyBtb3JlIHRoYW4gMkdCIG9mIFJBTQorCS8qIE9ubHkgcmVzZXJ2ZSBEQVJUIHNwYWNlIGlmIG1hY2hpbmUgaGFzIG1vcmUgdGhhbiAxR0Igb2YgUkFNCiAJICogb3IgaWYgcmVxdWVzdGVkIHdpdGggaW9tbXU9b24gb24gY21kbGluZS4KKwkgKgorCSAqIDFHQiBvZiBSQU0gaXMgcGlja2VkIGFzIGxpbWl0IGJlY2F1c2Ugc29tZSBkZWZhdWx0IGRldmljZXMKKwkgKiAoaS5lLiBBaXJwb3J0IEV4dHJlbWUpIGhhdmUgMzAgYml0IGFkZHJlc3MgcmFuZ2UgbGltaXRzLgogCSAqLwotCWlmIChsbWJfZW5kX29mX0RSQU0oKSA8PSAweDgwMDAwMDAwdWxsICYmICFpb21tdV9mb3JjZV9vbikKKworCWlmIChpb21tdV9pc19vZmYpCisJCXJldHVybjsKKworCWlmICghaW9tbXVfZm9yY2Vfb24gJiYgbG1iX2VuZF9vZl9EUkFNKCkgPD0gMHg0MDAwMDAwMHVsbCkKIAkJcmV0dXJuOwogCiAJLyogNTEyIHBhZ2VzICgyTUIpIGlzIG1heCBEQVJUIHRhYmxlc2l6ZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUKaW5kZXggZDQwNzdlNi4uODBjODRkNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9saWIvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIENGTEFHU19rYmQubwk6PSAtSWRyaXZlcnMvY2hhcgotQ0ZMQUdTX3ZyZXNldC5vIDo9IC1JJChzcmN0cmVlKS9hcmNoL3BwYy9ib290L2luY2x1ZGUKK0NGTEFHU192cmVzZXQubyA6PSAtSWFyY2gvcHBjL2Jvb3QvaW5jbHVkZQogCiB6bGliICA6PSBpbmZibG9jay5jIGluZmNvZGVzLmMgaW5mZmFzdC5jIGluZmxhdGUuYyBpbmZ0cmVlcy5jIGluZnV0aWwuYwogCSAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNzdlNGRjNy4uMmY1YzVlMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEzNCw2ICsxMzQsNyBAQAogCURFRklORShUSV9UQVNLLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHRhc2spKTsKIAlERUZJTkUoVElfRVhFQ0RPTUFJTiwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBleGVjX2RvbWFpbikpOwogCURFRklORShUSV9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpOworCURFRklORShUSV9MT0NBTF9GTEFHUywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBsb2NhbF9mbGFncykpOwogCURFRklORShUSV9DUFUsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSk7CiAJREVGSU5FKFRJX1BSRUVNUFQsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcHJlZW1wdF9jb3VudCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDU4OTFlY2IuLjFhZGM5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCkBAIC0xMjgsMjkgKzEyOCwyNiBAQAogCXN0dwlyMTIsNChyMTEpCiAjZW5kaWYKIAliCTNmCisKIDI6CS8qIGlmIGZyb20ga2VybmVsLCBjaGVjayBpbnRlcnJ1cHRlZCBET1pFL05BUCBtb2RlIGFuZAogICAgICAgICAgKiBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cKICAgICAgICAgICovCisJbHd6CXI5LFRIUkVBRF9JTkZPLVRIUkVBRChyMTIpCisJY21wbHcJcjEscjkJCQkvKiBpZiByMSA8PSBjdXJyZW50LT50aHJlYWRfaW5mbyAqLworCWJsZS0Jc3RhY2tfb3ZmCQkvKiB0aGVuIHRoZSBrZXJuZWwgc3RhY2sgb3ZlcmZsb3dlZCAqLworNToKICNpZmRlZiBDT05GSUdfNnh4Ci0JbWZzcHIJcjExLFNQUk5fSElEMAotCW10Y3IJcjExCi1CRUdJTl9GVFJfU0VDVElPTgotCWJ0LQk4LDRmCQkJLyogQ2hlY2sgRE9aRSAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX0RPWkUpCi1CRUdJTl9GVFJfU0VDVElPTgotCWJ0LQk5LDRmCQkJLyogQ2hlY2sgTkFQICovCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DQU5fTkFQKQorCXRvcGh5cyhyOSxyOSkJCQkvKiBjaGVjayBsb2NhbCBmbGFncyAqLworCWx3eglyMTIsVElfTE9DQUxfRkxBR1MocjkpCisJbXRjcmYJMHgwMSxyMTIKKwlidC0JMzEtVExGX05BUFBJTkcsNGYKICNlbmRpZiAvKiBDT05GSUdfNnh4ICovCiAJLmdsb2JsIHRyYW5zZmVyX3RvX2hhbmRsZXJfY29udAogdHJhbnNmZXJfdG9faGFuZGxlcl9jb250OgotCWx3eglyMTEsVEhSRUFEX0lORk8tVEhSRUFEKHIxMikKLQljbXBsdwlyMSxyMTEJCQkvKiBpZiByMSA8PSBjdXJyZW50LT50aHJlYWRfaW5mbyAqLwotCWJsZS0Jc3RhY2tfb3ZmCQkvKiB0aGVuIHRoZSBrZXJuZWwgc3RhY2sgb3ZlcmZsb3dlZCAqLwogMzoKIAltZmxyCXI5CiAJbHd6CXIxMSwwKHI5KQkJLyogdmlydHVhbCBhZGRyZXNzIG9mIGhhbmRsZXIgKi8KIAlsd3oJcjksNChyOSkJCS8qIHdoZXJlIHRvIGdvIHdoZW4gZG9uZSAqLwotCUZJWF9TUlIxKHIxMCxyMTIpCiAJbXRzcHIJU1BSTl9TUlIwLHIxMQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAltdGxyCXI5CkBAIC0xNTgsNyArMTU1LDkgQEAKIAlSRkkJCQkJLyoganVtcCB0byBoYW5kbGVyLCBlbmFibGUgTU1VICovCiAKICNpZmRlZiBDT05GSUdfNnh4Ci00OgliCXBvd2VyX3NhdmVfNnh4X3Jlc3RvcmUKKzQ6CXJsd2lubQlyMTIscjEyLDAsfl9UTEZfTkFQUElORworCXN0dwlyMTIsVElfTE9DQUxfRkxBR1MocjkpCisJYglwb3dlcl9zYXZlXzZ4eF9yZXN0b3JlCiAjZW5kaWYKIAogLyoKQEAgLTE2NywxMCArMTY2LDEwIEBACiAgKi8KIHN0YWNrX292ZjoKIAkvKiBzb21ldGltZXMgd2UgdXNlIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgc3RhY2ssIHdoaWNoIGlzIE9LLiAqLwotCWxpcwlyMTEsX2VuZEBoCi0Jb3JpCXIxMSxyMTEsX2VuZEBsCi0JY21wbHcJcjEscjExCi0JYmxlCTNiCQkJLyogcjEgPD0gJl9lbmQgaXMgT0sgKi8KKwlsaXMJcjEyLF9lbmRAaAorCW9yaQlyMTIscjEyLF9lbmRAbAorCWNtcGx3CXIxLHIxMgorCWJsZQk1YgkJCS8qIHIxIDw9ICZfZW5kIGlzIE9LICovCiAJU0FWRV9OVkdQUlMocjExKQogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlsaXMJcjEsaW5pdF90aHJlYWRfdW5pb25AaGEKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzh4eC5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggZWM1M2M3ZC4uN2EyZjIwNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKQEAgLTM1NSw5ICszNTUsNyBAQAogCiAJLiA9IDB4MTIwMAogRGF0YVN0b3JlVExCTWlzczoKLSNpZmRlZiBDT05GSUdfOHh4X0NQVTYKIAlzdHcJcjMsIDgocjApCi0jZW5kaWYKIAlET184eHhfQ1BVNigweDNmODAsIHIzKQogCW10c3ByCVNQUk5fTV9UVywgcjEwCS8qIFNhdmUgYSBjb3VwbGUgb2Ygd29ya2luZyByZWdpc3RlcnMgKi8KIAltZmNyCXIxMApAQCAtNDE3LDkgKzQxNSw3IEBACiAJbHd6CXIxMSwgMChyMCkKIAltdGNyCXIxMQogCWx3eglyMTEsIDQocjApCi0jaWZkZWYgQ09ORklHXzh4eF9DUFU2CiAJbHd6CXIzLCA4KHIwKQotI2VuZGlmCiAJcmZpCiAKIC8qIFRoaXMgaXMgYW4gaW5zdHJ1Y3Rpb24gVExCIGVycm9yIG9uIHRoZSBNUEM4eHguICBUaGlzIGNvdWxkIGJlIGR1ZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IDg2NWJhNzQuLmIyNTBiMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTk0LDYgKzk0LDcgQEAKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0woc3RyY21wKTsKIEVYUE9SVF9TWU1CT0woc3RyY2FzZWNtcCk7CitFWFBPUlRfU1lNQk9MKHN0cm5jYXNlY21wKTsKIEVYUE9SVF9TWU1CT0woX19kaXY2NF8zMik7CiAKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCmluZGV4IGY4NDE5NzIuLjU1NDc3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiB2b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCiAJCXVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCiB7Ci0JaWJtNDR4X3BsYXRmb3JtX2luaXQocjMsIHI0LCByNSwgcjYsIHI3KTsKKwlpYm00NDBneF9wbGF0Zm9ybV9pbml0KHIzLCByNCwgcjUsIHI2LCByNyk7CiAKIAlwcGNfbWQuc2V0dXBfYXJjaCA9IG9jb3RlYV9zZXR1cF9hcmNoOwogCXBwY19tZC5zaG93X2NwdWluZm8gPSBvY290ZWFfc2hvd19jcHVpbmZvOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4MjcyYWRzX3NldHVwLmMKaW5kZXggYmM5Yjk0Zi4uYWJiNzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODI3MmFkc19zZXR1cC5jCkBAIC0yNiwxMSArMjYsMzUgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3VhcnRfcGQuaD4KIAogI2luY2x1ZGUgInBxMmFkc19wZC5oIgogCiBzdGF0aWMgdm9pZCBpbml0X2ZjYzFfaW9wb3J0cyh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfZmNjMl9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgaW5pdF9zY2MxX3VhcnRfaW9wb3J0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIGluaXRfc2NjNF91YXJ0X2lvcG9ydHModm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvIG1wYzgyNzJfdWFydF9wZGF0YVtdID0geworCVtmc2lkX3NjYzFfdWFydF0gPSB7CisJCS5pbml0X2lvcG9ydHMgCT0gaW5pdF9zY2MxX3VhcnRfaW9wb3J0cywKKwkJLmZzX25vCQk9IGZzaWRfc2NjMV91YXJ0LAorCQkuYnJnCQk9IDEsCisJCS50eF9udW1fZmlmbwk9IDQsCisJCS50eF9idWZfc2l6ZQk9IDMyLAorCQkucnhfbnVtX2ZpZm8JPSA0LAorCQkucnhfYnVmX3NpemUJPSAzMiwKKwl9LAorCVtmc2lkX3NjYzRfdWFydF0gPSB7CisJCS5pbml0X2lvcG9ydHMgCT0gaW5pdF9zY2M0X3VhcnRfaW9wb3J0cywKKwkJLmZzX25vCQk9IGZzaWRfc2NjNF91YXJ0LAorCQkuYnJnCQk9IDQsCisJCS50eF9udW1fZmlmbwk9IDQsCisJCS50eF9idWZfc2l6ZQk9IDMyLAorCQkucnhfbnVtX2ZpZm8JPSA0LAorCQkucnhfYnVmX3NpemUJPSAzMiwKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBmc19taWlfYnVzX2luZm8gbWlpX2J1c19pbmZvID0gewogCS5tZXRob2QgICAgICAgICAgICAgICAgID0gZnNtaWlfYml0YmFuZywKQEAgLTIwMSwxMiArMjI1LDY1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtcGM4MjcyYWRzX2ZpeHVwX3VhcnRfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJICAgICAgaW50IGlkeCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCWludCBudW0gPSBBUlJBWV9TSVpFKG1wYzgyNzJfdWFydF9wZGF0YSk7CisJaW50IGlkID0gZnNfdWFydF9pZF9zY2MyZnNpZChpZHgpOworCisJLyogbm8gbmVlZCB0byBhbHRlciBhbnl0aGluZyBpZiBjb25zb2xlICovCisJaWYgKChpZCA8PSBudW0pICYmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpKSB7CisJCXBpbmZvID0gJm1wYzgyNzJfdWFydF9wZGF0YVtpZF07CisJCXBpbmZvLT51YXJ0X2NsayA9IGJkLT5iaV9pbnRmcmVxOworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCX0KK30KKworc3RhdGljIHZvaWQgaW5pdF9zY2MxX3VhcnRfaW9wb3J0cyh2b2lkKQoreworCWNwbTJfbWFwX3QqIGltbWFwID0gaW9yZW1hcChDUE1fTUFQX0FERFIsIHNpemVvZihjcG0yX21hcF90KSk7CisKKyAgICAgICAgLyogU0NDMSBpcyBvbmx5IG9uIHBvcnQgRCAqLworCXNldGJpdHMzMigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcHBhcmQsMHgwMDAwMDAwMyk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wc29yZCwweDAwMDAwMDAxKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bzb3JkLDB4MDAwMDAwMDIpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRpcmQsMHgwMDAwMDAwMSk7CisJc2V0Yml0czMyKCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGlyZCwweDAwMDAwMDAyKTsKKworICAgICAgICAvKiBXaXJlIEJSRzEgdG8gU0NDMSAqLworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbXV4LmNteF9zY3IsMHgwMGZmZmZmZik7CisKKwlpb3VubWFwKGltbWFwKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zY2M0X3VhcnRfaW9wb3J0cyh2b2lkKQoreworCWNwbTJfbWFwX3QqIGltbWFwID0gaW9yZW1hcChDUE1fTUFQX0FERFIsIHNpemVvZihjcG0yX21hcF90KSk7CisKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BwYXJkLDB4MDAwMDA2MDApOworCWNscmJpdHMzMigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcHNvcmQsMHgwMDAwMDYwMCk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGlyZCwweDAwMDAwMjAwKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BkaXJkLDB4MDAwMDA0MDApOworCisgICAgICAgIC8qIFdpcmUgQlJHNCB0byBTQ0M0ICovCisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtdXguY214X3NjciwweDAwMDAwMGZmKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG11eC5jbXhfc2NyLDB4MDAwMDAwMWIpOworCisJaW91bm1hcChpbW1hcCk7Cit9CisKIHN0YXRpYyBpbnQgbXBjODI3MmFkc19wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fbm90aWZ5X2Rldl9tYXAgZGV2X21hcFtdID0gewogCQl7CiAJCQkuYnVzX2lkID0gImZzbC1jcG0tZmNjIiwKLQkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEKKwkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEsCisJCX0sCisJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1zY2M6dWFydCIsCisJCQkucnRuID0gbXBjODI3MmFkc19maXh1cF91YXJ0X3BkYXRhLAogCQl9LAogCQl7CiAJCQkuYnVzX2lkID0gTlVMTApAQCAtMjMwLDcgKzMwNyw0NCBAQAogCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4Mnh4X0NQTV9GQ0MxKTsKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDODJ4eF9DUE1fRkNDMik7CiAKKwkvKiB0byBiZSByZWFkeSBmb3IgY29uc29sZSwgbGV0J3MgYXR0YWNoIHBkYXRhIGhlcmUgKi8KKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxCisJcHBjX3N5c19kZXZpY2Vfc2V0ZnVuYyhNUEM4Mnh4X0NQTV9TQ0MxLCBQUENfU1lTX0ZVTkNfVUFSVCk7CisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzgyeHhfQ1BNX1NDQzEpOworCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzgyeHhfQ1BNX1NDQzQsIFBQQ19TWVNfRlVOQ19VQVJUKTsKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDODJ4eF9DUE1fU0NDNCk7CisjZW5kaWYKKworCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgICBUbyBwcmV2ZW50IGNvbmZ1c2lvbiwgY29uc29sZSBzZWxlY3Rpb24gaXMgZ3Jvc3M6CisgICBieSAwIGFzc3VtZWQgU0NDMSBhbmQgYnkgMSBhc3N1bWVkIFNDQzQKKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSogZWFybHlfdWFydF9nZXRfcGRldihpbnQgaW5kZXgpCit7CisJYmRfdCAqYmQgPSAoYmRfdCAqKSBfX3JlczsKKwlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwaW5mbzsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYgPSBOVUxMOworCWlmKGluZGV4KSB7IC8qYXNzdW1lIFNDQzQgaGVyZSovCisJCXBkZXYgPSAmcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW01QQzgyeHhfQ1BNX1NDQzRdOworCQlwaW5mbyA9ICZtcGM4MjcyX3VhcnRfcGRhdGFbZnNpZF9zY2M0X3VhcnRdOworCX0gZWxzZSB7IC8qb3ZlciBTQ0MxKi8KKwkJcGRldiA9ICZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDODJ4eF9DUE1fU0NDMV07CisJCXBpbmZvID0gJm1wYzgyNzJfdWFydF9wZGF0YVtmc2lkX3NjYzFfdWFydF07CisJfQorCisJcGluZm8tPnVhcnRfY2xrID0gYmQtPmJpX2ludGZyZXE7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwaW5mbzsKKwlwcGNfc3lzX2ZpeHVwX21lbV9yZXNvdXJjZShwZGV2LCBDUE1fTUFQX0FERFIpOworCXJldHVybiBOVUxMOworfQorCiBhcmNoX2luaXRjYWxsKG1wYzgyNzJhZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMKaW5kZXggYWM4ZmNjNi4uZDkxOWRhYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvZnNfZW5ldF9wZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3VhcnRfcGQuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgpAQCAtMzcsNiArMzgsMTEgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yZXNbXTsKIAorc3RhdGljIHZvaWQgc2V0dXBfZmVjMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfc2NjMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfc21jMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgc2V0dXBfc21jMl9pb3BvcnRzKHZvaWQpOworCiBzdGF0aWMgc3RydWN0IGZzX21paV9idXNfaW5mbyBmZWNfbWlpX2J1c19pbmZvID0gewogCS5tZXRob2QgPSBmc21paV9mZWMsCiAJLmlkID0gMCwKQEAgLTc5LDYgKzg1LDI4IEBACiAJLnBoeV9pcnEgPSAtMSwKIAogCS5idXNfaW5mbyA9ICZzY2NfbWlpX2J1c19pbmZvLAorCit9OworCitzdGF0aWMgc3RydWN0IGZzX3VhcnRfcGxhdGZvcm1faW5mbyBtcGM4NjZfdWFydF9wZGF0YVtdID0geworCVtmc2lkX3NtYzFfdWFydF0gPSB7CisJCS5icmcJCT0gMSwKKyAJCS5mc19ubyAJCT0gZnNpZF9zbWMxX3VhcnQsCisgCQkuaW5pdF9pb3BvcnRzCT0gc2V0dXBfc21jMV9pb3BvcnRzLAorCQkudHhfbnVtX2ZpZm8JPSA0LAorCQkudHhfYnVmX3NpemUJPSAzMiwKKwkJLnJ4X251bV9maWZvCT0gNCwKKwkJLnJ4X2J1Zl9zaXplCT0gMzIsCisgCX0sCisgCVtmc2lkX3NtYzJfdWFydF0gPSB7CisgCQkuYnJnCQk9IDIsCisgCQkuZnNfbm8gCQk9IGZzaWRfc21jMl91YXJ0LAorIAkJLmluaXRfaW9wb3J0cwk9IHNldHVwX3NtYzJfaW9wb3J0cywKKwkJLnR4X251bV9maWZvCT0gNCwKKwkJLnR4X2J1Zl9zaXplCT0gMzIsCisJCS5yeF9udW1fZmlmbwk9IDQsCisJCS5yeF9idWZfc2l6ZQk9IDMyLAorIAl9LAogfTsKIAogdm9pZCBfX2luaXQgYm9hcmRfaW5pdCh2b2lkKQpAQCAtOTIsOSArMTIwLDEyIEBACiAJCXByaW50ayhLRVJOX0NSSVQgIkNvdWxkIG5vdCByZW1hcCBCQ1NSMVxuIik7CiAJCXJldHVybjsKIAl9CisKICNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMxCiAJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMTcpOwkvKiBicmcxICovCiAJY2xyYml0czMyKGJjc3JfaW8sKDB4ODAwMDAwMDAgPj4gNykpOworCWNwLT5jcF9zbWNbMF0uc21jX3NtY20gfD0gKFNNQ01fUlggfCBTTUNNX1RYKTsKKwljcC0+Y3Bfc21jWzBdLnNtY19zbWNtciAmPSB+KFNNQ01SX1JFTiB8IFNNQ01SX1RFTik7CiAjZWxzZQogCXNldGJpdHMzMihiY3NyX2lvLCgweDgwMDAwMDAwID4+IDcpKTsKIApAQCAtMTA4LDYgKzEzOSw4IEBACiAJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMSk7CiAJY3AtPmNwX3NpbW9kZSB8PSAoMHgyMDAwMDAwMCA+PiAxKTsJLyogYnJnMiAqLwogCWNscmJpdHMzMihiY3NyX2lvLCgweDgwMDAwMDAwID4+IDEzKSk7CisJY3AtPmNwX3NtY1sxXS5zbWNfc21jbSB8PSAoU01DTV9SWCB8IFNNQ01fVFgpOworCWNwLT5jcF9zbWNbMV0uc21jX3NtY21yICY9IH4oU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKICNlbHNlCiAJY2xyYml0czMyKGJjc3JfaW8sKDB4ODAwMDAwMDAgPj4gMTMpKTsKIAljcC0+Y3BfcGJwYXIgJj0gfigweDAwMDAwYzAwKTsKQEAgLTIzMiw2ICsyNjUsNzQgQEAKIAltcGM4NjZhZHNfZml4dXBfZW5ldF9wZGF0YShwZGV2LCBmc2lkX3NjYzEgKyBwZGV2LT5pZCAtIDEpOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9zbWMxX2lvcG9ydHModm9pZCkKK3sKKwlpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKwl1bnNpZ25lZCAqYmNzcl9pbzsKKwl1bnNpZ25lZCBpbnQgaW9iaXRzID0gMHgwMDAwMDBjMDsKKworCWJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisJaWYgKGJjc3JfaW8gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworCQlyZXR1cm47CisJfQorCisJY2xyYml0czMyKGJjc3JfaW8sQkNTUjFfUlMyMzJFTl8xKTsKKwlpb3VubWFwKGJjc3JfaW8pOworCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BicGFyLCBpb2JpdHMpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYmRpciwgaW9iaXRzKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7CisKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc21jMl9pb3BvcnRzKHZvaWQpCit7CisJaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBJTUFQX0FERFI7CisJdW5zaWduZWQgKmJjc3JfaW87CisJdW5zaWduZWQgaW50IGlvYml0cyA9IDB4MDAwMDBjMDA7CisKKwliY3NyX2lvID0gaW9yZW1hcChCQ1NSMSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWlmIChiY3NyX2lvID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ291bGQgbm90IHJlbWFwIEJDU1IxXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNscmJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMik7CisKKwlpb3VubWFwKGJjc3JfaW8pOworCisjaWZuZGVmIENPTkZJR19TRVJJQUxfQ1BNX0FMVF9TTUMyCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BicGFyLCBpb2JpdHMpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYmRpciwgaW9iaXRzKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7CisjZWxzZQorCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIsIGlvYml0cyk7CisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciwgaW9iaXRzKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyLCBpb2JpdHMpOworI2VuZGlmCisKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1wYzg2NmFkc19maXh1cF91YXJ0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkeCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCWludCBudW0gPSBBUlJBWV9TSVpFKG1wYzg2Nl91YXJ0X3BkYXRhKTsKKworCWludCBpZCA9IGZzX3VhcnRfaWRfc21jMmZzaWQoaWR4KTsKKworCS8qIG5vIG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgaWYgY29uc29sZSAqLworCWlmICgoaWQgPD0gbnVtKSAmJiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSkgeworCQlwaW5mbyA9ICZtcGM4NjZfdWFydF9wZGF0YVtpZF07CisJCXBpbmZvLT51YXJ0X2NsayA9IGJkLT5iaV9pbnRmcmVxOworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCX0KK30KKwogc3RhdGljIGludCBtcGM4NjZhZHNfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX25vdGlmeV9kZXZfbWFwIGRldl9tYXBbXSA9IHsKQEAgLTI0NCw2ICszNDUsMTAgQEAKIAkJCS5ydG4gPSBtcGM4NjZhZHNfZml4dXBfc2NjX2VuZXRfcGRhdGEsCiAJCX0sCiAJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1zbWM6dWFydCIsCisJCQkucnRuID0gbXBjODY2YWRzX2ZpeHVwX3VhcnRfcGRhdGEKKwkJfSwKKwkJewogCQkJLmJ1c19pZCA9IE5VTEwKIAkJfQogCX07CkBAIC0yNjcsNyArMzcyLDQyIEBACiAjZW5kaWYKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9GRUMxKTsKIAorLyogU2luY2UgZWl0aGVyIG9mIHRoZSB1YXJ0cyBjb3VsZCBiZSB1c2VkIGFzIGNvbnNvbGUsIHRoZXkgbmVlZCB0byByZWFkeSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMxKTsKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMSwgUFBDX1NZU19GVU5DX1VBUlQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMyKTsKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMiwgUFBDX1NZU19GVU5DX1VBUlQpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAgIFRvIHByZXZlbnQgY29uZnVzaW9uLCBjb25zb2xlIHNlbGVjdGlvbiBpcyBncm9zczoKKyAgIGJ5IDAgYXNzdW1lZCBTTUMxIGFuZCBieSAxIGFzc3VtZWQgU01DMgorICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBlYXJseV91YXJ0X2dldF9wZGV2KGludCBpbmRleCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSogcGRldiA9IE5VTEw7CisJaWYoaW5kZXgpIHsgLyphc3N1bWUgU01DMiBoZXJlKi8KKwkJcGRldiA9ICZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDOHh4X0NQTV9TTUMyXTsKKwkJcGluZm8gPSAmbXBjODY2X3VhcnRfcGRhdGFbMV07CisJfSBlbHNlIHsgLypvdmVyIFNNQzEqLworCQlwZGV2ID0gJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEM4eHhfQ1BNX1NNQzFdOworCQlwaW5mbyA9ICZtcGM4NjZfdWFydF9wZGF0YVswXTsKKwl9CisKKwlwaW5mby0+dWFydF9jbGsgPSBiZC0+YmlfaW50ZnJlcTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCXBwY19zeXNfZml4dXBfbWVtX3Jlc291cmNlKHBkZXYsIElNQVBfQUREUik7CisJcmV0dXJuIE5VTEw7Cit9CisKIGFyY2hfaW5pdGNhbGwobXBjODY2YWRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jCmluZGV4IDUwYTk5ZTUuLjRiODg2NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzX3NldHVwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzX2VuZXRfcGQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc191YXJ0X3BkLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTM1LDkgKzM2LDMyIEBACiAjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yZXNbXTsKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzFfaW9wb3J0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzJfaW9wb3J0cyh2b2lkKTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1wYzg4NWFkc19zY2NfcGh5X2luaXQoY2hhcik7CiAKK3N0YXRpYyBzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvIG1wYzg4NV91YXJ0X3BkYXRhW10gPSB7CisJW2ZzaWRfc21jMV91YXJ0XSA9IHsKKwkJLmJyZwkJPSAxLAorIAkJLmZzX25vIAkJPSBmc2lkX3NtYzFfdWFydCwKKyAJCS5pbml0X2lvcG9ydHMJPSBzZXR1cF9zbWMxX2lvcG9ydHMsCisJCS50eF9udW1fZmlmbwk9IDQsCisJCS50eF9idWZfc2l6ZQk9IDMyLAorCQkucnhfbnVtX2ZpZm8JPSA0LAorCQkucnhfYnVmX3NpemUJPSAzMiwKKyAJfSwKKyAJW2ZzaWRfc21jMl91YXJ0XSA9IHsKKyAJCS5icmcJCT0gMiwKKyAJCS5mc19ubyAJCT0gZnNpZF9zbWMyX3VhcnQsCisgCQkuaW5pdF9pb3BvcnRzCT0gc2V0dXBfc21jMl9pb3BvcnRzLAorCQkudHhfbnVtX2ZpZm8JPSA0LAorCQkudHhfYnVmX3NpemUJPSAzMiwKKwkJLnJ4X251bV9maWZvCT0gNCwKKwkJLnJ4X2J1Zl9zaXplCT0gMzIsCisgCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGZzX21paV9idXNfaW5mbyBmZWNfbWlpX2J1c19pbmZvID0gewogCS5tZXRob2QgPSBmc21paV9mZWMsCiAJLmlkID0gMCwKQEAgLTExNiw2ICsxNDAsOCBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKIAljcC0+Y3Bfc2ltb2RlICY9IH4oMHhlMDAwMDAwMCA+PiAxNyk7CS8qIGJyZzEgKi8KIAljbHJiaXRzMzIoYmNzcl9pbywgQkNTUjFfUlMyMzJFTl8xKTsKKyAgICAgICAgY3AtPmNwX3NtY1swXS5zbWNfc21jbSB8PSAoU01DTV9SWCB8IFNNQ01fVFgpOworICAgICAgICBjcC0+Y3Bfc21jWzBdLnNtY19zbWNtciAmPSB+KFNNQ01SX1JFTiB8IFNNQ01SX1RFTik7CiAjZWxzZQogCXNldGJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMSk7CiAJY3AtPmNwX3NtY1swXS5zbWNfc21jbXIgPSAwOwpAQCAtMTI2LDYgKzE1Miw4IEBACiAJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMSk7CiAJY3AtPmNwX3NpbW9kZSB8PSAoMHgyMDAwMDAwMCA+PiAxKTsJLyogYnJnMiAqLwogCWNscmJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMik7CisgICAgICAgIGNwLT5jcF9zbWNbMV0uc21jX3NtY20gfD0gKFNNQ01fUlggfCBTTUNNX1RYKTsKKyAgICAgICAgY3AtPmNwX3NtY1sxXS5zbWNfc21jbXIgJj0gfihTTUNNUl9SRU4gfCBTTUNNUl9URU4pOwogI2Vsc2UKIAlzZXRiaXRzMzIoYmNzcl9pbyxCQ1NSMV9SUzIzMkVOXzIpOwogCWNwLT5jcF9zbWNbMV0uc21jX3NtY21yID0gMDsKQEAgLTM0Myw2ICszNzEsNzAgQEAKIAlvdXRfYmUzMigmZmVjcC0+ZmVjX21paV9zcGVlZCwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzFfaW9wb3J0cyh2b2lkKQoreworICAgICAgICBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKyAgICAgICAgdW5zaWduZWQgKmJjc3JfaW87CisgICAgICAgIHVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwMGMwOworCisgICAgICAgIGJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisgICAgICAgIGlmIChiY3NyX2lvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbHJiaXRzMzIoYmNzcl9pbyxCQ1NSMV9SUzIzMkVOXzEpOworICAgICAgICBpb3VubWFwKGJjc3JfaW8pOworCisgICAgICAgIHNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYnBhciwgaW9iaXRzKTsKKyAgICAgICAgY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BiZGlyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3NtYzJfaW9wb3J0cyh2b2lkKQoreworICAgICAgICBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKyAgICAgICAgdW5zaWduZWQgKmJjc3JfaW87CisgICAgICAgIHVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwYzAwOworCisgICAgICAgIGJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisgICAgICAgIGlmIChiY3NyX2lvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbHJiaXRzMzIoYmNzcl9pbyxCQ1NSMV9SUzIzMkVOXzIpOworICAgICAgICBpb3VubWFwKGJjc3JfaW8pOworCisjaWZuZGVmIENPTkZJR19TRVJJQUxfQ1BNX0FMVF9TTUMyCisgICAgICAgIHNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYnBhciwgaW9iaXRzKTsKKyAgICAgICAgY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BiZGlyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9jcG0uY3BfcGJvZHIsIGlvYml0cyk7CisjZWxzZQorICAgICAgICBzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyLCBpb2JpdHMpOworICAgICAgICBjbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyLCBpb2JpdHMpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4ODVhZHNfZml4dXBfdWFydF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZHgpCit7CisJYmRfdCAqYmQgPSAoYmRfdCAqKSBfX3JlczsKKwlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwaW5mbzsKKwlpbnQgbnVtID0gQVJSQVlfU0laRShtcGM4ODVfdWFydF9wZGF0YSk7CisKKwlpbnQgaWQgPSBmc191YXJ0X2lkX3NtYzJmc2lkKGlkeCk7CisKKwkvKiBubyBuZWVkIHRvIGFsdGVyIGFueXRoaW5nIGlmIGNvbnNvbGUgKi8KKwlpZiAoKGlkIDw9IG51bSkgJiYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkpIHsKKwkJcGluZm8gPSAmbXBjODg1X3VhcnRfcGRhdGFbaWRdOworCQlwaW5mby0+dWFydF9jbGsgPSBiZC0+YmlfaW50ZnJlcTsKKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwaW5mbzsKKwl9Cit9CisKKwogc3RhdGljIGludCBtcGM4ODVhZHNfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIApAQCAtMzU2LDEyICs0NDgsMTcgQEAKIAkJCS5ydG4gPSBtcGM4ODVhZHNfZml4dXBfc2NjX2VuZXRfcGRhdGEsCiAJCX0sCiAJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1zbWM6dWFydCIsCisJCQkucnRuID0gbXBjODg1YWRzX2ZpeHVwX3VhcnRfcGRhdGEKKwkJfSwKKwkJewogCQkJLmJ1c19pZCA9IE5VTEwKIAkJfQogCX07CiAKIAlwbGF0Zm9ybV9ub3RpZnlfbWFwKGRldl9tYXAsZGV2KTsKIAorCXJldHVybiAwOwogfQogCiBpbnQgX19pbml0IG1wYzg4NWFkc19pbml0KHZvaWQpCkBAIC0zODMsNyArNDgwLDQxIEBACiAJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fRkVDMik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMxKTsKKwlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMSwgUFBDX1NZU19GVU5DX1VBUlQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMyCisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fU01DMik7CisJcHBjX3N5c19kZXZpY2Vfc2V0ZnVuYyhNUEM4eHhfQ1BNX1NNQzIsIFBQQ19TWVNfRlVOQ19VQVJUKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG1wYzg4NWFkc19pbml0KTsKKworLyoKKyAgIFRvIHByZXZlbnQgY29uZnVzaW9uLCBjb25zb2xlIHNlbGVjdGlvbiBpcyBncm9zczoKKyAgIGJ5IDAgYXNzdW1lZCBTTUMxIGFuZCBieSAxIGFzc3VtZWQgU01DMgorICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBlYXJseV91YXJ0X2dldF9wZGV2KGludCBpbmRleCkKK3sKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBpbmZvOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSogcGRldiA9IE5VTEw7CisJaWYoaW5kZXgpIHsgLyphc3N1bWUgU01DMiBoZXJlKi8KKwkJcGRldiA9ICZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDOHh4X0NQTV9TTUMyXTsKKwkJcGluZm8gPSAmbXBjODg1X3VhcnRfcGRhdGFbMV07CisJfSBlbHNlIHsgLypvdmVyIFNNQzEqLworCQlwZGV2ID0gJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEM4eHhfQ1BNX1NNQzFdOworCQlwaW5mbyA9ICZtcGM4ODVfdWFydF9wZGF0YVswXTsKKwl9CisKKwlwaW5mby0+dWFydF9jbGsgPSBiZC0+YmlfaW50ZnJlcTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBpbmZvOworCXBwY19zeXNfZml4dXBfbWVtX3Jlc291cmNlKHBkZXYsIElNQVBfQUREUik7CisJcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuYwppbmRleCAzMzY1ZmQ3Li43ZmMyZTAyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BxMmFkcy5jCkBAIC0xNCwxMSArMTQsNDAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAorI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tcGM4MjYwLmg+CisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgogCiB2b2lkIF9faW5pdAogbTgyeHhfYm9hcmRfc2V0dXAodm9pZCkKIHsKKwljcG0yX21hcF90KiBpbW1hcCA9IGlvcmVtYXAoQ1BNX01BUF9BRERSLCBzaXplb2YoY3BtMl9tYXBfdCkpOworCXUzMiAqYmNzciA9IGlvcmVtYXAoQkNTUl9BRERSKzQsIHNpemVvZih1MzIpKTsKKwogCS8qIEVuYWJsZSB0aGUgMm5kIFVBUlQgcG9ydCAqLwotCSoodm9sYXRpbGUgdWludCAqKShCQ1NSX0FERFIgKyA0KSAmPSB+QkNTUjFfUlMyMzJfRU4yOworCWNscmJpdHMzMihiY3NyLCBCQ1NSMV9SUzIzMl9FTjIpOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9DUE1fU0NDMQorCWNscmJpdHMzMigodTMyKikmaW1tYXAtPmltX3NjY1swXS5zY2Nfc2NjbSwgVUFSVF9TQ0NNX1RYIHwgVUFSVF9TQ0NNX1JYKTsKKwljbHJiaXRzMzIoKHUzMiopJmltbWFwLT5pbV9zY2NbMF0uc2NjX2dzbXJsLCBTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIKKwljbHJiaXRzMzIoKHUzMiopJmltbWFwLT5pbV9zY2NbMV0uc2NjX3NjY20sIFVBUlRfU0NDTV9UWCB8IFVBUlRfU0NDTV9SWCk7CisJY2xyYml0czMyKCh1MzIqKSZpbW1hcC0+aW1fc2NjWzFdLnNjY19nc21ybCwgU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzCisJY2xyYml0czMyKCh1MzIqKSZpbW1hcC0+aW1fc2NjWzJdLnNjY19zY2NtLCBVQVJUX1NDQ01fVFggfCBVQVJUX1NDQ01fUlgpOworCWNscmJpdHMzMigodTMyKikmaW1tYXAtPmltX3NjY1syXS5zY2NfZ3NtcmwsIFNDQ19HU01STF9FTlIgfCBTQ0NfR1NNUkxfRU5UKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFUklBTF9DUE1fU0NDNAorCWNscmJpdHMzMigodTMyKikmaW1tYXAtPmltX3NjY1szXS5zY2Nfc2NjbSwgVUFSVF9TQ0NNX1RYIHwgVUFSVF9TQ0NNX1JYKTsKKwljbHJiaXRzMzIoKHUzMiopJmltbWFwLT5pbV9zY2NbM10uc2NjX2dzbXJsLCBTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCk7CisjZW5kaWYKKworCWlvdW5tYXAoYmNzcik7CisJaW91bm1hcChpbW1hcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMKaW5kZXggYTdkZDU1Zi4uZjZjYzE2ODggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMKQEAgLTIsNyArMiw3IEBACiAgKiBQUEM0NDBHWCBzeXN0ZW0gbGlicmFyeQogICoKICAqIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBadWx0eXMgVGVjaG5vbG9naWVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA2IFp1bHR5cyBUZWNobm9sb2dpZXMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjgyLDMgKzI4MiwxNCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIF9faW5pdCBpYm00NDBneF9wbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCisJCQkJICAgdW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyByNiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHI3KQoreworCS8qIEVycmF0dW0gNDQwXzQzIHdvcmthcm91bmQsIGRpc2FibGUgTDEgY2FjaGUgcGFyaXR5IGNoZWNraW5nICovCisJaWYgKCFzdHJjbXAoY3VyX2NwdV9zcGVjLT5jcHVfbmFtZSwgIjQ0MEdYIFJldi4gQyIpIHx8CisJICAgICFzdHJjbXAoY3VyX2NwdV9zcGVjLT5jcHVfbmFtZSwgIjQ0MEdYIFJldi4gRiIpKQorCQltdHNwcihTUFJOX0NDUjEsIG1mc3ByKFNQUk5fQ0NSMSkgfCBDQ1IxX0RQQyk7CisKKwlpYm00NHhfcGxhdGZvcm1faW5pdChyMywgcjQsIHI1LCByNiwgcjcpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5oIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5oCmluZGV4IGEyYWI5ZmEuLmEwM2VjNjAyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5oCkBAIC0yOSw2ICsyOSwxMCBAQAogdm9pZCBpYm00NDBneF9nZXRfY2xvY2tzKHN0cnVjdCBpYm00NHhfY2xvY2tzKiwgdW5zaWduZWQgaW50IHN5c19jbGssCiAJdW5zaWduZWQgaW50IHNlcl9jbGspIF9faW5pdDsKIAorLyogY29tbW9uIDQ0MEdYIHBsYXRmb3JtIGluaXQgKi8KK3ZvaWQgaWJtNDQwZ3hfcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpIF9faW5pdDsKKwogLyogRW5hYmxlIEwyIGNhY2hlICovCiB2b2lkIGlibTQ0MGd4X2wyY19lbmFibGUodm9pZCkgX19pbml0OwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCmluZGV4IGJkNDFlZDguLjZmNTM2MzggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCkBAIC0xNzAsMTIgKzE3MCwxOCBAQAogCVtNUEM4eHhfQ1BNX1NNQzFdID0gewogCQkubmFtZSA9ICJmc2wtY3BtLXNtYyIsCiAJCS5pZAk9IDEsCi0JCS5udW1fcmVzb3VyY2VzCT0gMiwKKwkJLm51bV9yZXNvdXJjZXMJPSAzLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKIAkJCQkubmFtZQk9ICJyZWdzIiwKLQkJCQkuc3RhcnQJPSAweGE4MiwKLQkJCQkuZW5kCT0gMHhhOTEsCisJCQkJLnN0YXJ0CT0gMHhhODAsCisJCQkJLmVuZAk9IDB4YThmLAorCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZQk9ICJwcmFtIiwKKwkJCQkuc3RhcnQJPSAweDNlODAsCisJCQkJLmVuZAk9IDB4M2ViZiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7CkBAIC0xODksMTUgKzE5NSwyMiBAQAogCVtNUEM4eHhfQ1BNX1NNQzJdID0gewogCQkubmFtZSA9ICJmc2wtY3BtLXNtYyIsCiAJCS5pZAk9IDIsCi0JCS5udW1fcmVzb3VyY2VzCT0gMiwKKwkJLm51bV9yZXNvdXJjZXMJPSAzLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKIAkJCQkubmFtZQk9ICJyZWdzIiwKLQkJCQkuc3RhcnQJPSAweGE5MiwKLQkJCQkuZW5kCT0gMHhhYTEsCisJCQkJLnN0YXJ0CT0gMHhhOTAsCisJCQkJLmVuZAk9IDB4YTlmLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKKyAJCQkJLm5hbWUJPSAicHJhbSIsCisgCQkJCS5zdGFydAk9IDB4M2Y4MCwKKyAJCQkJLmVuZAk9IDB4M2ZiZiwKKyAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisKKwkJCX0sCisJCQl7CiAJCQkJLm5hbWUJPSAiaW50ZXJydXB0IiwKIAkJCQkuc3RhcnQJPSBNUEM4eHhfSU5UX1NNQzIsCiAJCQkJLmVuZAk9IE1QQzh4eF9JTlRfU01DMiwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGNfc3lzLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjX3N5cy5jCmluZGV4IDYwYzcyNGUuLjJkNDgwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGNfc3lzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwY19zeXMuYwpAQCAtMTA5LDkgKzEwOSwxMSBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpyID0gJnBkZXYtPnJlc291cmNlW2ldOwotCQlpZiAoKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pID09IElPUkVTT1VSQ0VfTUVNKSB7CisJCWlmICgoKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pID09IElPUkVTT1VSQ0VfTUVNKSAmJiAKKwkJCSgoci0+ZmxhZ3MgJiBQUENfU1lTX0lPUkVTT1VSQ0VfRklYVVBQRUQpICE9IFBQQ19TWVNfSU9SRVNPVVJDRV9GSVhVUFBFRCkpIHsKIAkJCXItPnN0YXJ0ICs9IHBhZGRyOwogCQkJci0+ZW5kICs9IHBhZGRyOworCQkJci0+ZmxhZ3MgfD0gUFBDX1NZU19JT1JFU09VUkNFX0ZJWFVQUEVEOwogCQl9CiAJfQogfQpAQCAtMTU2LDEyICsxNTgsMTMgQEAKIAl3aGlsZSAobWFwLT5idXNfaWQgIT0gTlVMTCkgewogCQlpZHggPSAtMTsKIAkJcyA9IHN0cnJjaHIoZGV2LT5idXNfaWQsICcuJyk7Ci0JCWlmIChzICE9IE5VTEwpCisJCWlmIChzICE9IE5VTEwpIHsKIAkJCWlkeCA9IChpbnQpc2ltcGxlX3N0cnRvbChzICsgMSwgTlVMTCwgMTApOwotCQllbHNlCisJCQlsZW4gPSBzIC0gZGV2LT5idXNfaWQ7CisJCX0gZWxzZSB7CiAJCQlzID0gZGV2LT5idXNfaWQ7Ci0KLQkJbGVuID0gcyAtIGRldi0+YnVzX2lkOworCQkJbGVuID0gc3RybGVuKGRldi0+YnVzX2lkKTsKKwkJfQogCiAJCWlmICghc3RybmNtcChkZXYtPmJ1c19pZCwgbWFwLT5idXNfaWQsIGxlbikpIHsKIAkJCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BxMl9kZXZpY2VzLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYwppbmRleCAwNjM2YWVkLi44NjkyZDAwYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BxMl9kZXZpY2VzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BxMl9kZXZpY2VzLmMKQEAgLTEyMSwxMyArMTIxLDEzIEBACiAJCS5udW1fcmVzb3VyY2VzCSA9IDMsCiAJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgewogCQkJewotCQkJCS5uYW1lCT0gInNjY19tZW0iLAorCQkJCS5uYW1lCT0gInJlZ3MiLAogCQkJCS5zdGFydAk9IDB4MTFBMDAsCiAJCQkJLmVuZAk9IDB4MTFBMUYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJCQl9LAogCQkJewotCQkJCS5uYW1lCT0gInNjY19wcmFtIiwKKwkJCQkubmFtZQk9ICJwcmFtIiwKIAkJCQkuc3RhcnQJPSAweDgwMDAsCiAJCQkJLmVuZAk9IDB4ODBmZiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAJCS5udW1fcmVzb3VyY2VzCSA9IDMsCiAJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgewogCQkJewotCQkJCS5uYW1lCT0gInNjY19tZW0iLAorCQkJCS5uYW1lCT0gInJlZ3MiLAogCQkJCS5zdGFydAk9IDB4MTFBMjAsCiAJCQkJLmVuZAk9IDB4MTFBM0YsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJCQl9LAogCQkJewotCQkJCS5uYW1lCT0gInNjY19wcmFtIiwKKwkJCQkubmFtZQk9ICJwcmFtIiwKIAkJCQkuc3RhcnQJPSAweDgxMDAsCiAJCQkJLmVuZAk9IDB4ODFmZiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKQEAgLTE2OSwxMyArMTY5LDEzIEBACiAJCS5udW1fcmVzb3VyY2VzCSA9IDMsCiAJCS5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2VbXSkgewogCQkJewotCQkJCS5uYW1lIAk9ICJzY2NfbWVtIiwKKwkJCQkubmFtZSAJPSAicmVncyIsCiAJCQkJLnN0YXJ0CT0gMHgxMUE0MCwKIAkJCQkuZW5kCT0gMHgxMUE1RiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX3ByYW0iLAorCQkJCS5uYW1lCT0gInByYW0iLAogCQkJCS5zdGFydAk9IDB4ODIwMCwKIAkJCQkuZW5kCT0gMHg4MmZmLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLApAQCAtMTkzLDEzICsxOTMsMTMgQEAKIAkJLm51bV9yZXNvdXJjZXMJID0gMywKIAkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX21lbSIsCisJCQkJLm5hbWUJPSAicmVncyIsCiAJCQkJLnN0YXJ0CT0gMHgxMUE2MCwKIAkJCQkuZW5kCT0gMHgxMUE3RiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX3ByYW0iLAorCQkJCS5uYW1lCT0gInByYW0iLAogCQkJCS5zdGFydAk9IDB4ODMwMCwKIAkJCQkuZW5kCT0gMHg4M2ZmLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMKaW5kZXggNzVlNjRmMS4uZmVlODk0OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jCkBAIC0xMTMsMTMgKzExMywxMyBAQAogCQkucHBjX3N5c19uYW1lCT0gIjgyNDgiLAogCQkubWFzawkJPSAweDAwMDBmZjAwLAogCQkudmFsdWUJCT0gMHgwMDAwMGMwMCwKLQkJLm51bV9kZXZpY2VzCT0gMTEsCisJCS5udW1fZGV2aWNlcwk9IDEyLAogCQkuZGV2aWNlX2xpc3QgPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODJ4eF9DUE1fRkNDMSwgTVBDODJ4eF9DUE1fRkNDMiwgTVBDODJ4eF9DUE1fU0NDMSwKLQkJCU1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsIE1QQzgyeHhfQ1BNX1NNQzEsCi0JCQlNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksIE1QQzgyeHhfQ1BNX0kyQywKLQkJCU1QQzgyeHhfQ1BNX1VTQiwgTVBDODJ4eF9TRUMxLAorCQkJTVBDODJ4eF9DUE1fU0NDMiwgTVBDODJ4eF9DUE1fU0NDMywgTVBDODJ4eF9DUE1fU0NDNCwKKwkJCU1QQzgyeHhfQ1BNX1NNQzEsIE1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwKKwkJCU1QQzgyeHhfQ1BNX0kyQywgTVBDODJ4eF9DUE1fVVNCLCBNUEM4Mnh4X1NFQzEsCiAJCX0sCiAJfSwKIAl7CkBAIC0xMzksMTMgKzEzOSwxMyBAQAogCQkucHBjX3N5c19uYW1lCT0gIjgyNzIiLAogCQkubWFzawkJPSAweDAwMDBmZjAwLAogCQkudmFsdWUJCT0gMHgwMDAwMGMwMCwKLQkJLm51bV9kZXZpY2VzCT0gMTEsCisJCS5udW1fZGV2aWNlcwk9IDEyLAogCQkuZGV2aWNlX2xpc3QgPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODJ4eF9DUE1fRkNDMSwgTVBDODJ4eF9DUE1fRkNDMiwgTVBDODJ4eF9DUE1fU0NDMSwKLQkJCU1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsIE1QQzgyeHhfQ1BNX1NNQzEsCi0JCQlNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksIE1QQzgyeHhfQ1BNX0kyQywKLQkJCU1QQzgyeHhfQ1BNX1VTQiwgTVBDODJ4eF9TRUMxLAorCQkJTVBDODJ4eF9DUE1fU0NDMiwgTVBDODJ4eF9DUE1fU0NDMywgTVBDODJ4eF9DUE1fU0NDNCwKKwkJCU1QQzgyeHhfQ1BNX1NNQzEsIE1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwKKwkJCU1QQzgyeHhfQ1BNX0kyQywgTVBDODJ4eF9DUE1fVVNCLCBNUEM4Mnh4X1NFQzEsCiAJCX0sCiAJfSwKIAkvKiBiZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIDgyODAgZmFtaWx5IG9mIHByb2Nlc3NvcnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9NYWtlZmlsZSBiL2FyY2gvczM5MC9NYWtlZmlsZQppbmRleCA2YzZiMTk3Li43YmIxNmZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL01ha2VmaWxlCkBAIC02Nyw3ICs2Nyw2IEBACiBlbmRpZgogCiBDRkxBR1MJCSs9IC1tYmFja2NoYWluIC1tc29mdC1mbG9hdCAkKGNmbGFncy15KQotQ0ZMQUdTCQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1maW5saW5lLWxpbWl0PTEwMDAwKQogQ0ZMQUdTIAkJKz0gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgLVduby1zaWduLWNvbXBhcmUgCiBBRkxBR1MJCSs9ICQoYWZsYWdzLXkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCmluZGV4IDU0ZDM1YzEuLjlhMjI0MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIGFwcGxkYXRhX25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhcHBsZGF0YV9uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGFwcGxkYXRhX2NwdV9ub3RpZnksCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCBmOGQwY2Q1Li5mNGRmYzEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTEsMTAgKzEsMTEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgV2VkIEZlYiAgOCAxMDo0NDozOSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIE1vbiBBcHIgIDMgMTQ6MzQ6MTUgMjAwNgogIwogQ09ORklHX01NVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1MzOTA9eQogCkBAIC0zMCw4ICszMSw4IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CkBAIC00NSwxMCArNDYsNiBAQAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC02MCw3ICs1Nyw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQpAQCAtNjksNyArNjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIwotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTkxLDE3ICs4NywyMCBAQAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKICMKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR182NEJJVD15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTMyCiBDT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX01BVEhFTVU9eQorQ09ORklHX0RFRkFVTFRfTUlHUkFUSU9OX0NPU1Q9MTAwMDAwMAorQ09ORklHX0NPTVBBVD15CitDT05GSUdfU1lTVklQQ19DT01QQVQ9eQorQ09ORklHX0JJTkZNVF9FTEYzMj15CiAKICMKICMgQ29kZSBnZW5lcmF0aW9uIG9wdGlvbnMKICMKLUNPTkZJR19NQVJDSF9HNT15Ci0jIENPTkZJR19NQVJDSF9aOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUkNIX0c1IGlzIG5vdCBzZXQKK0NPTkZJR19NQVJDSF9aOTAwPXkKICMgQ09ORklHX01BUkNIX1o5OTAgaXMgbm90IHNldAogQ09ORklHX1BBQ0tfU1RBQ0s9eQogIyBDT05GSUdfU01BTExfU1RBQ0sgaXMgbm90IHNldApAQCAtMTQzLDcgKzE0Miw3IEBACiAjIENPTkZJR19BUFBMREFUQV9CQVNFIGlzIG5vdCBzZXQKIENPTkZJR19OT19JRExFX0haPXkKIENPTkZJR19OT19JRExFX0haX0lOSVQ9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0xNzMsNiArMTcyLDcgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTE4MCw5ICsxODAsMTEgQEAKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogQ09ORklHX0lQVjY9eQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKQEAgLTI3Niw2ICsyNzgsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKQEAgLTM0MCw4ICszNDcsNyBAQAogQ09ORklHX0RBU0RfRUNLRD15CiBDT05GSUdfREFTRF9GQkE9eQogQ09ORklHX0RBU0RfRElBRz15Ci1DT05GSUdfREFTRF9FRVI9bQotIyBDT05GSUdfREFTRF9DTUIgaXMgbm90IHNldAorQ09ORklHX0RBU0RfRUVSPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKQEAgLTM1NCw2ICszNjAsNyBAQAogQ09ORklHX01EX1JBSUQxPW0KICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDU9bQorIyBDT05GSUdfTURfUkFJRDVfUkVTSEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9SQUlENiBpcyBub3Qgc2V0CiBDT05GSUdfTURfTVVMVElQQVRIPW0KICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CkBAIC00MDQsNiArNDExLDcgQEAKICMgUy8zOTAgdGFwZSBoYXJkd2FyZSBzdXBwb3J0CiAjCiBDT05GSUdfUzM5MF9UQVBFXzM0WFg9bQorIyBDT05GSUdfUzM5MF9UQVBFXzM1OTAgaXMgbm90IHNldAogIyBDT05GSUdfVk1MT0dSRFIgaXMgbm90IHNldAogIyBDT05GSUdfVk1DUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT05SRUFERVIgaXMgbm90IHNldApAQCAtNTI5LDcgKzUzNyw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE5LDE0ICs2MjYsMTUgQEAKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jCmluZGV4IDUyOTFiNWYuLmI0YzgxNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAogCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWlmICghIG9uX3NpZ19zdGFjayhzcCkpCisJCWlmICghIHNhc19zc19mbGFncyhzcCkpCiAJCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IDE5OWRhNjguLjRkNTNiMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTE2MDgsMyArMTYwOCw1MyBAQAogc3lzX3Vuc2hhcmVfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBsb25nCiAJamcJc3lzX3Vuc2hhcmUKKworCS5nbG9ibCBjb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdF93cmFwcGVyCitjb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdF93cmFwcGVyOgorCWxsZ3RyCSVyMiwlcjIJCQkjIHN0cnVjdCBjb21wYXRfcm9idXN0X2xpc3RfaGVhZCAqCisJbGxnZnIJJXIzLCVyMwkJCSMgc2l6ZV90CisJamcJY29tcGF0X3N5c19zZXRfcm9idXN0X2xpc3QKKworCS5nbG9ibCBjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdF93cmFwcGVyCitjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdF93cmFwcGVyOgorCWxnZnIJJXIyLCVyMgkJCSMgaW50CisJbGxndHIJJXIzLCVyMwkJCSMgY29tcGF0X3VwdHJfdF90ICoKKwlsbGd0cgklcjQsJXI0CQkJIyBjb21wYXRfc2l6ZV90ICoKKwlqZwljb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdAorCisJLmdsb2JsIHN5c19zcGxpY2Vfd3JhcHBlcgorc3lzX3NwbGljZV93cmFwcGVyOgorCWxnZnIJJXIyLCVyMgkJCSMgaW50CisJbGxndHIJJXIzLCVyMwkJCSMgbG9mZl90ICoKKwlsZ2ZyCSVyNCwlcjQJCQkjIGludAorCWxsZ3RyCSVyNSwlcjUJCQkjIGxvZmZfdCAqCisJbGxnZnIJJXI2LCVyNgkJCSMgc2l6ZV90CisJbGxnZgklcjAsMTY0KCVyMTUpCQkjIHVuc2lnbmVkIGludAorCXN0ZwklcjAsMTYwKCVyMTUpCisJamcJc3lzX3NwbGljZQorCisJLmdsb2JsCXN5c19zeW5jX2ZpbGVfcmFuZ2Vfd3JhcHBlcgorc3lzX3N5bmNfZmlsZV9yYW5nZV93cmFwcGVyOgorCWxnZnIJJXIyLCVyMgkJCSMgaW50CisJc2xsZwklcjMsJXIzLDMyCQkjIGdldCBoaWdoIHdvcmQgb2YgNjRiaXQgbG9mZl90CisJb3IJJXIzLCVyNAkJCSMgZ2V0IGxvdyB3b3JkIG9mIDY0Yml0IGxvZmZfdAorCXNsbGcJJXI0LCVyNSwzMgkJIyBnZXQgaGlnaCB3b3JkIG9mIDY0Yml0IGxvZmZfdAorCW9yCSVyNCwlcjYJCQkjIGdldCBsb3cgd29yZCBvZiA2NGJpdCBsb2ZmX3QKKwlsbGdmCSVyNSwxNjQoJXIxNSkJCSMgdW5zaWduZWQgaW50CisJamcJc3lzX3N5bmNfZmlsZV9yYW5nZQorCisJLmdsb2JsCXN5c190ZWVfd3JhcHBlcgorc3lzX3RlZV93cmFwcGVyOgorCWxnZnIJJXIyLCVyMgkJCSMgaW50CisJbGdmcgklcjMsJXIzCQkJIyBpbnQKKwlsbGdmcgklcjQsJXI0CQkJIyBzaXplX3QKKwlsbGdmcgklcjUsJXI1CQkJIyB1bnNpZ25lZCBpbnQKKwlqZwlzeXNfdGVlCisKKwkuZ2xvYmwgY29tcGF0X3N5c192bXNwbGljZV93cmFwcGVyCitjb21wYXRfc3lzX3Ztc3BsaWNlX3dyYXBwZXI6CisJbGdmcgklcjIsJXIyCQkJIyBpbnQKKwlsbGd0cgklcjMsJXIzCQkJIyBjb21wYXRfaW92ZWMgKgorCWxsZ2ZyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGludAorCWxsZ2ZyCSVyNSwlcjUJCQkjIHVuc2lnbmVkIGludAorCWpnCWNvbXBhdF9zeXNfdm1zcGxpY2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDM3ZGZlMzMuLjhmMzY1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtNzM0LDcgKzczNCw3IEBACiBzeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KQogewogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiBlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5ncHJzWzJdKSwgcmVncy0+Z3Byc1syXSk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5ncHJzWzJdKSwgcmVncy0+Z3Byc1syXSk7CiAKIAlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQogCQlnb3RvIG91dDsKQEAgLTc2MSw4ICs3NjEsNyBAQAogCX0KICBvdXQ6CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpICYmICFlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgCi0JCQkJICAgIHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMxQklUKT9BVURJVF9BUkNIX1MzOTA6QVVESVRfQVJDSF9TMzkwWCwKKwkJYXVkaXRfc3lzY2FsbF9lbnRyeSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCk/QVVESVRfQVJDSF9TMzkwOkFVRElUX0FSQ0hfUzM5MFgsCiAJCQkJICAgIHJlZ3MtPmdwcnNbMl0sIHJlZ3MtPm9yaWdfZ3ByMiwgcmVncy0+Z3Byc1szXSwKIAkJCQkgICAgcmVncy0+Z3Byc1s0XSwgcmVncy0+Z3Byc1s1XSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwppbmRleCBhZTE5MjdlNC4uZDQ4Y2ZjNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC0zNTgsOCArMzU4LDkgQEAKIAl9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlZ3MtPmdwcnNbMTRdID0gKHVuc2lnbmVkIGxvbmcpCiAJCQlmcmFtZS0+cmV0Y29kZSB8IFBTV19BRERSX0FNT0RFOwotCQllcnIgfD0gX19wdXRfdXNlcihTMzkwX1NZU0NBTExfT1BDT0RFIHwgX19OUl9ydF9zaWdyZXR1cm4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2IF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSkpOworCQlpZiAoX19wdXRfdXNlcihTMzkwX1NZU0NBTExfT1BDT0RFIHwgX19OUl9ydF9zaWdyZXR1cm4sCisJCQkgICAgICAgKHUxNiBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUpKSkKKwkJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCX0KIAogCS8qIFNldCB1cCBiYWNrY2hhaW4uICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggMmY1NjY1NC4uOTNiZTFkNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMzEyLDMgKzMxMiw5IEBACiBTWVNDQUxMKHN5c19wc2VsZWN0NixzeXNfcHNlbGVjdDYsY29tcGF0X3N5c19wc2VsZWN0Nl93cmFwcGVyKQogU1lTQ0FMTChzeXNfcHBvbGwsc3lzX3Bwb2xsLGNvbXBhdF9zeXNfcHBvbGxfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3Vuc2hhcmUsc3lzX3Vuc2hhcmUsc3lzX3Vuc2hhcmVfd3JhcHBlcikKK1NZU0NBTEwoc3lzX3NldF9yb2J1c3RfbGlzdCxzeXNfc2V0X3JvYnVzdF9saXN0LGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0X3dyYXBwZXIpCitTWVNDQUxMKHN5c19nZXRfcm9idXN0X2xpc3Qsc3lzX2dldF9yb2J1c3RfbGlzdCxjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdF93cmFwcGVyKQorU1lTQ0FMTChzeXNfc3BsaWNlLHN5c19zcGxpY2Usc3lzX3NwbGljZV93cmFwcGVyKQorU1lTQ0FMTChzeXNfc3luY19maWxlX3JhbmdlLHN5c19zeW5jX2ZpbGVfcmFuZ2Usc3lzX3N5bmNfZmlsZV9yYW5nZV93cmFwcGVyKQorU1lTQ0FMTChzeXNfdGVlLHN5c190ZWUsc3lzX3RlZV93cmFwcGVyKQorU1lTQ0FMTChzeXNfdm1zcGxpY2Usc3lzX3Ztc3BsaWNlLGNvbXBhdF9zeXNfdm1zcGxpY2Vfd3JhcHBlcikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZmVhMDQzYi4uMmE2YzZlZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTI0OSwxOCArMjQ5LDE5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHNlcSwgbmV4dDsKIAlfX3U2NCB0aW1lciwgdG9kdmFsOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAoc3lzY3RsX2h6X3RpbWVyICE9IDApCiAJCXJldHVybjsKIAotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBub2h6X2NwdV9tYXNrKTsKKwljcHVfc2V0KGNwdSwgbm9oel9jcHVfbWFzayk7CiAKIAkvKgogCSAqIExlYXZlIHRoZSBjbG9jayBjb21wYXJhdG9yIHNldCB1cCBmb3IgdGhlIG5leHQgdGltZXIKIAkgKiB0aWNrIGlmIGVpdGhlciByY3Ugb3IgYSBzb2Z0aXJxIGlzIHBlbmRpbmcuCiAJICovCi0JaWYgKHJjdV9wZW5kaW5nKHNtcF9wcm9jZXNzb3JfaWQoKSkgfHwgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkpIHsKLQkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbm9oel9jcHVfbWFzayk7CisJaWYgKHJjdV9uZWVkc19jcHUoY3B1KSB8fCBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkgeworCQljcHVfY2xlYXIoY3B1LCBub2h6X2NwdV9tYXNrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjcxLDcgKzI3Miw3IEBACiAJbmV4dCA9IG5leHRfdGltZXJfaW50ZXJydXB0KCk7CiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkJdGltZXIgPSAoX191NjQpKG5leHQgLSBqaWZmaWVzKSArIGppZmZpZXNfNjQ7CisJCXRpbWVyID0gKChfX3U2NCkgbmV4dCkgLSAoKF9fdTY0KSBqaWZmaWVzKSArIGppZmZpZXNfNjQ7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CiAJdG9kdmFsID0gLTFVTEw7CiAJLyogQmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvd3MuICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOTI4OWZhYy4uOWYzNGJiNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTgsOSArNTgsMTEgQEAKICAgLiA9IEFMSUdOKDQwOTYpOwogICAuZGF0YS5wYWdlX2FsaWduZWQgOiB7ICooLmRhdGEuaWR0KSB9CiAKLSAgLiA9IEFMSUdOKDMyKTsKKyAgLiA9IEFMSUdOKDI1Nik7CiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CiAKKyAgLiA9IEFMSUdOKDI1Nik7CisgIC5kYXRhLnJlYWRfbW9zdGx5IDogeyAqKC5kYXRhLnJlYWRfbW9zdGx5KSB9CiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCiAgIC4gPSBBTElHTig4MTkyKTsJCS8qIGluaXRfdGFzayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCmluZGV4IGE5NTY2YmMuLjliMTFlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTE5Miw2ICsxOTIsNyBAQAogCWRpYWdfY2MgPSBkY3NzX2RpYWcgKERDU1NfU0VHRVhULCBxaW4sICZkdW1teSwgJnZtcmMpOwogCiAJaWYgKGRpYWdfY2MgPiAxKSB7CisJCVBSSU5UX1dBUk4gKCJzZWdtZW50X3R5cGU6IGRpYWcgcmV0dXJuZWQgZXJyb3IgJWxkXG4iLCB2bXJjKTsKIAkJcmMgPSBkY3NzX2RpYWdfdHJhbnNsYXRlX3JjICh2bXJjKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CkBAIC01NTMsNyArNTU0LDcgQEAKIAlpbnQgZW5kcGZuID0gMDsKIAljaGFyIGNtZDFbMTYwXTsKIAljaGFyIGNtZDJbODBdOwotCWludCBpOworCWludCBpLCByZXNwb25zZTsKIAogCWlmICghTUFDSElORV9JU19WTSkKIAkJcmV0dXJuOwpAQCAtNTc2LDggKzU3NywyMCBAQAogCQkJc2VndHlwZV9zdHJpbmdbc2VnLT5yYW5nZVtpXS5zdGFydCAmIDB4ZmZdKTsKIAl9CiAJc3ByaW50ZihjbWQyLCAiU0FWRVNFRyAlcyIsIG5hbWUpOwotCWNwY21kKGNtZDEsIE5VTEwsIDAsIE5VTEwpOwotCWNwY21kKGNtZDIsIE5VTEwsIDAsIE5VTEwpOworCXJlc3BvbnNlID0gMDsKKwljcGNtZChjbWQxLCBOVUxMLCAwLCAmcmVzcG9uc2UpOworCWlmIChyZXNwb25zZSkgeworCQlQUklOVF9FUlIoInNlZ21lbnRfc2F2ZTogREVGU0VHIGZhaWxlZCB3aXRoIHJlc3BvbnNlIGNvZGUgJWlcbiIsCisJCQkgIHJlc3BvbnNlKTsKKwkJZ290byBvdXQ7CisJfQorCWNwY21kKGNtZDIsIE5VTEwsIDAsICZyZXNwb25zZSk7CisJaWYgKHJlc3BvbnNlKSB7CisJCVBSSU5UX0VSUigic2VnbWVudF9zYXZlOiBTQVZFU0VHIGZhaWxlZCB3aXRoIHJlc3BvbnNlIGNvZGUgJWlcbiIsCisJCQkgIHJlc3BvbnNlKTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgogCXNwaW5fdW5sb2NrKCZkY3NzX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNTg1ODNmNC4uMmJjZWNmNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtNTI3LDYgKzUyNywxMSBAQAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc2gvcmVnaXN0ZXItYmFua3MudHh0PiBmb3IgZnVydGhlcgogCSAgaW5mb3JtYXRpb24gb24gU1IuUkIgYW5kIHJlZ2lzdGVyIGJhbmtpbmcgaW4gdGhlIGtlcm5lbCBpbiBnZW5lcmFsLgogCitjb25maWcgTk9ERVNfU0hJRlQKKwlpbnQKKwlkZWZhdWx0ICIxIgorCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUworCiBlbmRtZW51CiAKIG1lbnUgIkJvb3Qgb3B0aW9ucyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IDFjZjk0YTYuLmQ1ZDAzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtMzcsNyArMzcsNiBAQAogRVhQT1JUX1NZTUJPTChpcnFfZGVzYyk7CiBFWFBPUlRfU1lNQk9MKG5vX2lycV90eXBlKTsKIAotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0woc3Rybmxlbik7CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKaW5kZXggZGUyOWM0NS4uNmYzYTFjOSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtNDEsNyArNDEsNiBAQAogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5KTsKIAotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIAogI2lmZGVmIENPTkZJR19WVApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwppbmRleCA0NjBmNzJlLi5mOWZmMjk3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwpAQCAtMjc0LDYgKzI3NCwxMSBAQAogCWlmIChtbXVfbWFwX2RtYV9hcmVhKGRtYV9hZGRycCwgdmEsIHJlcy0+c3RhcnQsIGxlbl90b3RhbCkgIT0gMCkKIAkJZ290byBlcnJfbm9pb21tdTsKIAorCS8qIFNldCB0aGUgcmVzb3VyY2UgbmFtZSwgaWYga25vd24uICovCisJaWYgKHNkZXYpIHsKKwkJcmVzLT5uYW1lID0gc2Rldi0+cHJvbV9uYW1lOworCX0KKwogCXJldHVybiAodm9pZCAqKXJlcy0+c3RhcnQ7CiAKIGVycl9ub2lvbW11OgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA3ODdkNWYxLi41OTg2ODJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTEzLDYgKzExMyw3IEBACiAKIAkJc3dpdGNoIChFTEYzMl9SX1RZUEUocmVsW2ldLnJfaW5mbykpIHsKIAkJY2FzZSBSX1NQQVJDXzMyOgorCQljYXNlIFJfU1BBUkNfVUEzMjoKIAkJCWxvY2F0aW9uWzBdID0gdiA+PiAyNDsKIAkJCWxvY2F0aW9uWzFdID0gdiA+PiAxNjsKIAkJCWxvY2F0aW9uWzJdID0gdiA+PiAgODsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKaW5kZXggMmJlODEyMS4uNDBiNDJjOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKQEAgLTY5LDYgKzY5LDE3IEBACiAJCQkJCQkgICAgICJjbG9jay1mcmVxdWVuY3kiLCAwKTsKIAljcHVfZGF0YShpZCkucHJvbV9ub2RlID0gY3B1X25vZGU7CiAJY3B1X2RhdGEoaWQpLm1pZCA9IGNwdV9nZXRfaHdtaWQoY3B1X25vZGUpOworCisJLyogdGhpcyBpcyByZXF1aXJlZCB0byB0dW5lIHRoZSBzY2hlZHVsZXIgY29ycmVjdGx5ICovCisJLyogaXMgaXQgcG9zc2libGUgdG8gaGF2ZSBDUFVzIHdpdGggZGlmZmVyZW50IGNhY2hlIHNpemVzPyAqLworCWlmIChpZCA9PSBib290X2NwdV9pZCkgeworCQlpbnQgY2FjaGVfbGluZSxjYWNoZV9ubGluZXM7CisJCWNhY2hlX2xpbmUgPSAweDIwOworCQljYWNoZV9saW5lID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZWNhY2hlLWxpbmUtc2l6ZSIsIGNhY2hlX2xpbmUpOworCQljYWNoZV9ubGluZXMgPSAweDgwMDA7CisJCWNhY2hlX25saW5lcyA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1ubGluZXMiLCBjYWNoZV9ubGluZXMpOworCQltYXhfY2FjaGVfc2l6ZSA9IGNhY2hlX2xpbmUgKiBjYWNoZV9ubGluZXM7CisJfQogCWlmIChjcHVfZGF0YShpZCkubWlkIDwgMCkKIAkJcGFuaWMoIk5vIE1JRCBmb3VuZCBmb3IgQ1BVJWQgYXQgbm9kZSAweCUwOGQiLCBpZCwgY3B1X25vZGUpOwogfQpAQCAtMjQ0LDcgKzI1NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByb2Zfc2V0dXBfbG9jaywgZmxhZ3MpOwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJbG9hZF9wcm9maWxlX2lycShpLCBsdmwxNF9yZXNvbHV0aW9uIC8gbXVsdGlwbGllcik7CiAJCXByb2ZfbXVsdGlwbGllcihpKSA9IG11bHRpcGxpZXI7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKaW5kZXggMmMyMWQ3OS4uNGIzNzZmYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCkBAIC0yNTEsMjAgKzI1MSw5IEBACiBFWFBPUlRfU1lNQk9MKF9fcHJvbV9nZXRzaWJsaW5nKTsKIAogLyogc3BhcmMgbGlicmFyeSBzeW1ib2xzICovCi1FWFBPUlRfU1lNQk9MKG1lbWNocik7CiBFWFBPUlRfU1lNQk9MKG1lbXNjYW4pOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0woc3RyY3B5KTsKLUVYUE9SVF9TWU1CT0woc3RybmNweSk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jYXQpOwotRVhQT1JUX1NZTUJPTChzdHJjbXApOwogRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKLUVYUE9SVF9TWU1CT0woc3RyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RycmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChwYWdlX2tlcm5lbCk7CiAKIC8qIFNwZWNpYWwgaW50ZXJuYWwgdmVyc2lvbnMgb2YgbGlicmFyeSBmdW5jdGlvbnMuICovCkBAIC0zMTgsNiArMzA3LDMgQEAKIAogLyogU3VuIFBvd2VyIE1hbmFnZW1lbnQgSWRsZSBIYW5kbGVyICovCiBFWFBPUlRfU1lNQk9MKHBtX2lkbGUpOwotCi0vKiBCaW5mbXRfbWlzYyBuZWVkcyB0aGlzICovCi1FWFBPUlRfU1lNQk9MKHN5c19jbG9zZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggNzY4ZGU2NC4uMjg1NjU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUwpAQCAtMjMsNyArMjMsNyBAQAogLyoxMCovICAubG9uZyBzeXNfdW5saW5rLCBzdW5vc19leGVjdiwgc3lzX2NoZGlyLCBzeXNfY2hvd24xNiwgc3lzX21rbm9kCiAvKjE1Ki8JLmxvbmcgc3lzX2NobW9kLCBzeXNfbGNob3duMTYsIHNwYXJjX2Jyaywgc3lzX25pc19zeXNjYWxsLCBzeXNfbHNlZWsKIC8qMjAqLwkubG9uZyBzeXNfZ2V0cGlkLCBzeXNfY2FwZ2V0LCBzeXNfY2Fwc2V0LCBzeXNfc2V0dWlkMTYsIHN5c19nZXR1aWQxNgotLyoyNSovCS5sb25nIHN5c190aW1lLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5c19zaWdhbHRzdGFjaywgc3lzX3BhdXNlCisvKjI1Ki8JLmxvbmcgc3lzX3Ztc3BsaWNlLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5c19zaWdhbHRzdGFjaywgc3lzX3BhdXNlCiAvKjMwKi8JLmxvbmcgc3lzX3V0aW1lLCBzeXNfbGNob3duLCBzeXNfZmNob3duLCBzeXNfYWNjZXNzLCBzeXNfbmljZQogLyozNSovCS5sb25nIHN5c19jaG93biwgc3lzX3N5bmMsIHN5c19raWxsLCBzeXNfbmV3c3RhdCwgc3lzX3NlbmRmaWxlCiAvKjQwKi8JLmxvbmcgc3lzX25ld2xzdGF0LCBzeXNfZHVwLCBzeXNfcGlwZSwgc3lzX3RpbWVzLCBzeXNfZ2V0dWlkCkBAIC02NCwyMSArNjQsMjIgQEAKIC8qMjE1Ki8JLmxvbmcgc3lzX2lwYywgc3lzX3NpZ3JldHVybiwgc3lzX2Nsb25lLCBzeXNfaW9wcmlvX2dldCwgc3lzX2FkanRpbWV4CiAvKjIyMCovCS5sb25nIHN5c19zaWdwcm9jbWFzaywgc3lzX25pX3N5c2NhbGwsIHN5c19kZWxldGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCwgc3lzX2dldHBnaWQKIC8qMjI1Ki8JLmxvbmcgc3lzX2JkZmx1c2gsIHN5c19zeXNmcywgc3lzX25pc19zeXNjYWxsLCBzeXNfc2V0ZnN1aWQxNiwgc3lzX3NldGZzZ2lkMTYKLS8qMjMwKi8JLmxvbmcgc3lzX3NlbGVjdCwgc3lzX3RpbWUsIHN5c19uaXNfc3lzY2FsbCwgc3lzX3N0aW1lLCBzeXNfc3RhdGZzNjQKKy8qMjMwKi8JLmxvbmcgc3lzX3NlbGVjdCwgc3lzX3RpbWUsIHN5c19zcGxpY2UsIHN5c19zdGltZSwgc3lzX3N0YXRmczY0CiAJCQkJCSAgLyogIldlIGFyZSB0aGUgS25pZ2h0cyBvZiB0aGUgRm9yZXN0IG9mIE5pISEiICovCiAvKjIzNSovCS5sb25nIHN5c19mc3RhdGZzNjQsIHN5c19sbHNlZWssIHN5c19tbG9jaywgc3lzX211bmxvY2ssIHN5c19tbG9ja2FsbAogLyoyNDAqLwkubG9uZyBzeXNfbXVubG9ja2FsbCwgc3lzX3NjaGVkX3NldHBhcmFtLCBzeXNfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIsIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIKIC8qMjQ1Ki8JLmxvbmcgc3lzX3NjaGVkX3lpZWxkLCBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4sIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwsIHN5c19uYW5vc2xlZXAKIC8qMjUwKi8JLmxvbmcgc3BhcmNfbXJlbWFwLCBzeXNfc3lzY3RsLCBzeXNfZ2V0c2lkLCBzeXNfZmRhdGFzeW5jLCBzeXNfbmZzc2VydmN0bAotLyoyNTUqLwkubG9uZyBzeXNfbmlzX3N5c2NhbGwsIHN5c19jbG9ja19zZXR0aW1lLCBzeXNfY2xvY2tfZ2V0dGltZSwgc3lzX2Nsb2NrX2dldHJlcywgc3lzX2Nsb2NrX25hbm9zbGVlcAorLyoyNTUqLwkubG9uZyBzeXNfc3luY19maWxlX3JhbmdlLCBzeXNfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX2dldHRpbWUsIHN5c19jbG9ja19nZXRyZXMsIHN5c19jbG9ja19uYW5vc2xlZXAKIC8qMjYwKi8JLmxvbmcgc3lzX3NjaGVkX2dldGFmZmluaXR5LCBzeXNfc2NoZWRfc2V0YWZmaW5pdHksIHN5c190aW1lcl9zZXR0aW1lLCBzeXNfdGltZXJfZ2V0dGltZSwgc3lzX3RpbWVyX2dldG92ZXJydW4KIC8qMjY1Ki8JLmxvbmcgc3lzX3RpbWVyX2RlbGV0ZSwgc3lzX3RpbWVyX2NyZWF0ZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfaW9fc2V0dXAsIHN5c19pb19kZXN0cm95CiAvKjI3MCovCS5sb25nIHN5c19pb19zdWJtaXQsIHN5c19pb19jYW5jZWwsIHN5c19pb19nZXRldmVudHMsIHN5c19tcV9vcGVuLCBzeXNfbXFfdW5saW5rCiAvKjI3NSovCS5sb25nIHN5c19tcV90aW1lZHNlbmQsIHN5c19tcV90aW1lZHJlY2VpdmUsIHN5c19tcV9ub3RpZnksIHN5c19tcV9nZXRzZXRhdHRyLCBzeXNfd2FpdGlkCi0vKjI4MCovCS5sb25nIHN5c19uaV9zeXNjYWxsLCBzeXNfYWRkX2tleSwgc3lzX3JlcXVlc3Rfa2V5LCBzeXNfa2V5Y3RsLCBzeXNfb3BlbmF0CisvKjI4MCovCS5sb25nIHN5c190ZWUsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIHN5c19vcGVuYXQKIC8qMjg1Ki8JLmxvbmcgc3lzX21rZGlyYXQsIHN5c19ta25vZGF0LCBzeXNfZmNob3duYXQsIHN5c19mdXRpbWVzYXQsIHN5c19mc3RhdGF0NjQKIC8qMjkwKi8JLmxvbmcgc3lzX3VubGlua2F0LCBzeXNfcmVuYW1lYXQsIHN5c19saW5rYXQsIHN5c19zeW1saW5rYXQsIHN5c19yZWFkbGlua2F0CiAvKjI5NSovCS5sb25nIHN5c19mY2htb2RhdCwgc3lzX2ZhY2Nlc3NhdCwgc3lzX3BzZWxlY3Q2LCBzeXNfcHBvbGwsIHN5c191bnNoYXJlCisvKjMwMCovCS5sb25nIHN5c19zZXRfcm9idXN0X2xpc3QsIHN5c19nZXRfcm9idXN0X2xpc3QKIAogI2lmZGVmIENPTkZJR19TVU5PU19FTVVMCiAJLyogTm93IHRoZSBTdW5PUyBzeXNjYWxsIHRhYmxlLiAqLwpAQCAtMTkwLDYgKzE5MSw2IEBACiAvKjI5MCovCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAJLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzCisJLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCmluZGV4IGY4NGE5YTYuLjgxMzY5ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKIG9iai15ICAgIDo9IG1hdGgubwogCiBFWFRSQV9BRkxBR1MgOj0gLWFuc2kKLUVYVFJBX0NGTEFHUyA9IC1JLiAtSSQoVE9QRElSKS9pbmNsdWRlL21hdGgtZW11IC13CitFWFRSQV9DRkxBR1MgPSAtSS4gLUlpbmNsdWRlL21hdGgtZW11IC13CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCmluZGV4IGQxZTJmYzU2Li40M2E2NmY1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtMTg3LDEzICsxODcsMTYgQEAKIAlib29sICI1MTJLIgogCiBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLCi0JZGVwZW5kcyBvbiAhU1BBUkM2NF9QQUdFX1NJWkVfNE1CICYmICFTUEFSQzY0X1BBR0VfU0laRV81MTJLQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNjRLCisJZGVwZW5kcyBvbiAhU1BBUkM2NF9QQUdFX1NJWkVfNE1CICYmICFTUEFSQzY0X1BBR0VfU0laRV81MTJLQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNjRLQgogCWJvb2wgIjY0SyIKIAogZW5kY2hvaWNlCiAKIGVuZG1lbnUKIAorY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAorCWRlZl9ib29sIHkKKwogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZyBiL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKaW5kZXggOTAwZmIwYi4uZjA5YTcwYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2Ci0jIFN1biBNYXIgMjYgMTQ6NTg6MTEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMworIyBGcmkgTWF5IDEyIDEyOjQzOjQ5IDIwMDYKICMKIENPTkZJR19TUEFSQz15CiBDT05GSUdfU1BBUkM2ND15CkBAIC0xMTQsNiArMTE0LDcgQEAKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUI9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19MQVJHRV9BTExPQ1M9eQpAQCAtMTgwLDYgKzE4MSw3IEBACiBDT05GSUdfSU5FVF9BSD15CiBDT05GSUdfSU5FVF9FU1A9eQogQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKQEAgLTIwMyw2ICsyMDUsNyBAQAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMTEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfVUI9bQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKQEAgLTQyOSw3ICs0MzEsNiBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CkBAIC00NDksNiArNDUwLDcgQEAKIENPTkZJR19NRF9SQUlEMT1tCiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENT1tCisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CkBAIC03NDEsOSArNzQzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTgyNiw2ICs4MjYsNyBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldApAQCAtODM3LDcgKzgzOCw2IEBACiAjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKIENPTkZJR19GQl9SQURFT05fSTJDPXkKICMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CkBAIC05MjMsNiArOTIzLDcgQEAKICMgUENJIGRldmljZXMKICMKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FMSTU0NTE9bQogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTk1NCw2ICs5NTUsNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtMTA0MCw5ICsxMDQyLDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldApAQCAtMTEwOCw2ICsxMTA4LDE5IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtMTExNyw2ICsxMTMwLDExIEBACiAjCiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIE1pc2MgTGludXgvU1BBUkMgZHJpdmVycwogIwogQ09ORklHX1NVTl9PUEVOUFJPTUlPPW0KQEAgLTEyOTEsNiArMTMwOSw3IEBACiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUwppbmRleCAzZWFkYWM1Li4zMWM1ODkyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgpAQCAtNDkzLDYgKzQ5NCwzNSBAQAogCWNhbGwJcHJvbV9pbml0CiAJIG1vdgklbDcsICVvMAkJCSEgT3BlblBST00gY2lmIGhhbmRsZXIKIAorCS8qIEluaXRpYWxpemUgY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgYXMgZWFybHkgYXMgcG9zc2libGUuCisJICogSW4gb3JkZXIgdG8gZG8gdGhhdCBhY2N1cmF0ZWx5IHdlIGhhdmUgdG8gcGF0Y2ggdXAgdGhlIGdldF9jcHVpZCgpCisJICogYXNzZW1ibGVyIHNlcXVlbmNlcy4gIEFuZCB0aGF0LCBpbiB0dXJuLCByZXF1aXJlcyB0aGF0IHdlIGtub3cKKwkgKiBpZiB3ZSBhcmUgb24gYSBTdGFyZmlyZSBib3ggb3Igbm90LiAgV2hpbGUgd2UncmUgaGVyZSwgcGF0Y2ggdXAKKwkgKiB0aGUgc3VuNHYgc2VxdWVuY2VzIGFzIHdlbGwuCisJICovCisJY2FsbAljaGVja19pZl9zdGFyZmlyZQorCSBub3AKKwljYWxsCXBlcl9jcHVfcGF0Y2gKKwkgbm9wCisJY2FsbAlzdW40dl9wYXRjaAorCSBub3AKKworI2lmZGVmIENPTkZJR19TTVAKKwljYWxsCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZAorCSBub3AKKwljbXAJJW8wLCBOUl9DUFVTCisJYmx1LHB0CSV4Y2MsIDFmCisJIG5vcAorCWNhbGwJYm9vdF9jcHVfaWRfdG9vX2xhcmdlCisJIG5vcAorCS8qIE5vdCByZWFjaGVkLi4uICovCisKKzE6CisjZWxzZQorCW1vdgkwLCAlbzAKKyNlbmRpZgorCXN0YgklbzAsIFslZzYgKyBUSV9DUFVdCisKIAkvKiBPZmYgd2UgZ28uLi4uICovCiAJY2FsbAlzdGFydF9rZXJuZWwKIAkgbm9wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGZmYzczMDkuLjJlMWM4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC02Myw3ICs2Myw3IEBACiAJZmx1c2hpKHAtPmFkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwogCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwpAQCAtNzEsNyArNzEsNyBAQAogCWtjYi0+cHJldl9rcHJvYmUub3JpZ190c3RhdGVfcGlsID0ga2NiLT5rcHJvYmVfb3JpZ190c3RhdGVfcGlsOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKQEAgLTc5LDcgKzc5LDcgQEAKIAlrY2ItPmtwcm9iZV9vcmlnX3RzdGF0ZV9waWwgPSBrY2ItPnByZXZfa3Byb2JlLm9yaWdfdHN0YXRlX3BpbDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CkBAIC04Nyw3ICs4Nyw3IEBACiAJa2NiLT5rcHJvYmVfb3JpZ190c3RhdGVfcGlsID0gKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QSUwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJcmVncy0+dHN0YXRlIHw9IFRTVEFURV9QSUw7CkBAIC0yNzMsNyArMjczLDcgQEAKIAkJCWtjYi0+a3Byb2JlX29yaWdfdHN0YXRlX3BpbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC0zMDAsNyArMzAwLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKIHsKIAlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNmM4M2UzNy4uNTc5ODcxNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL21vZHVsZS5jCkBAIC0xNDMsNiArMTQzLDExIEBACiAJCQlsb2NhdGlvblszXSA9IHYgPj4gIDA7CiAJCQlicmVhazsKIAorCQljYXNlIFJfU1BBUkNfRElTUDMyOgorCQkJdiAtPSAoRWxmNjRfQWRkcikgbG9jYXRpb247CisJCQkqbG9jMzIgPSB2OworCQkJYnJlYWs7CisKIAkJY2FzZSBSX1NQQVJDX1dESVNQMzA6CiAJCQl2IC09IChFbGY2NF9BZGRyKSBsb2NhdGlvbjsKIAkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHgzZmZmZmZmZikgfApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKaW5kZXggZGZjY2ZmMi4uZjk3ZGRlYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCkBAIC00MTksNiArNDE5LDcgQEAKIAlyZWdpb24tPnN0YXJ0ID0gcmVzLT5zdGFydCAtIHplcm9fcmVzLnN0YXJ0OwogCXJlZ2lvbi0+ZW5kID0gcmVzLT5lbmQgLSB6ZXJvX3Jlcy5zdGFydDsKIH0KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19yZXNvdXJjZV90b19idXMpOwogCiB2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCSAgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCA4ZWZiYzEzLi44MmU1NDU1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogICogRE1BIGZvciBQQ0kgZGV2aWNlIFBERVYuICBSZXR1cm4gbm9uLU5VTEwgY3B1LXNpZGUgYWRkcmVzcyBpZgogICogc3VjY2Vzc2Z1bCBhbmQgc2V0ICpETUFfQUREUlAgdG8gdGhlIFBDSSBzaWRlIGRtYSBhZGRyZXNzLgogICovCi1zdGF0aWMgdm9pZCAqcGNpXzR1X2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfYWRkcnApCitzdGF0aWMgdm9pZCAqcGNpXzR1X2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfYWRkcnAsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOwogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJaWYgKG9yZGVyID49IDEwKQogCQlyZXR1cm4gTlVMTDsKIAotCWZpcnN0X3BhZ2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIG9yZGVyKTsKKwlmaXJzdF9wYWdlID0gX19nZXRfZnJlZV9wYWdlcyhnZnAsIG9yZGVyKTsKIAlpZiAoZmlyc3RfcGFnZSA9PSAwVUwpCiAJCXJldHVybiBOVUxMOwogCW1lbXNldCgoY2hhciAqKWZpcnN0X3BhZ2UsIDAsIFBBR0VfU0laRSA8PCBvcmRlcik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwppbmRleCA5MzcyZDRmLi4wYzA4OTUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlfX2NsZWFyX2JpdChpLCBhcmVuYS0+bWFwKTsKIH0KIAotc3RhdGljIHZvaWQgKnBjaV80dl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHJwKQorc3RhdGljIHZvaWQgKnBjaV80dl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHJwLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKIAlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAJbnBhZ2VzID0gc2l6ZSA+PiBJT19QQUdFX1NISUZUOwogCi0JZmlyc3RfcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgb3JkZXIpOworCWZpcnN0X3BhZ2UgPSBfX2dldF9mcmVlX3BhZ2VzKGdmcCwgb3JkZXIpOwogCWlmICh1bmxpa2VseShmaXJzdF9wYWdlID09IDBVTCkpCiAJCXJldHVybiBOVUxMOwogCkBAIC01OTksMTggKzU5OSwxMjggQEAKIAogLyogU1VONFYgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzb3JzLiAqLwogCi1zdGF0aWMgaW5saW5lIGludCBwY2lfc3VuNHZfb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCitzdHJ1Y3QgcGRldl9lbnRyeSB7CisJc3RydWN0IHBkZXZfZW50cnkJKm5leHQ7CisJdTMyCQkJZGV2aGFuZGxlOworCXVuc2lnbmVkIGludAkJYnVzOworCXVuc2lnbmVkIGludAkJZGV2aWNlOworCXVuc2lnbmVkIGludAkJZnVuYzsKK307CisKKyNkZWZpbmUgUERFVl9IVEFCX1NJWkUJMTYKKyNkZWZpbmUgUERFVl9IVEFCX01BU0sJKFBERVZfSFRBQl9TSVpFIC0gMSkKK3N0YXRpYyBzdHJ1Y3QgcGRldl9lbnRyeSAqcGRldl9odGFiW1BERVZfSFRBQl9TSVpFXTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGRldl9oYXNoZm4odTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCiB7Ci0JaWYgKGJ1cyA9PSBwYm0tPnBjaV9maXJzdF9idXNubykgewotCQlpZiAoZGV2aWNlID09IDAgJiYgZnVuYyA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiAxOworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSAoZGV2aGFuZGxlIF4gKGRldmhhbmRsZSA+PiA0KSk7CisJdmFsIF49IGJ1czsKKwl2YWwgXj0gZGV2aWNlOworCXZhbCBePSBmdW5jOworCisJcmV0dXJuIHZhbCAmIFBERVZfSFRBQl9NQVNLOworfQorCitzdGF0aWMgaW50IHBkZXZfaHRhYl9hZGQodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXN0cnVjdCBwZGV2X2VudHJ5ICoqc2xvdDsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbG90ID0gJnBkZXZfaHRhYltwZGV2X2hhc2hmbihkZXZoYW5kbGUsIGJ1cywgZGV2aWNlLCBmdW5jKV07CisJcC0+bmV4dCA9ICpzbG90OworCSpzbG90ID0gcDsKKworCXAtPmRldmhhbmRsZSA9IGRldmhhbmRsZTsKKwlwLT5idXMgPSBidXM7CisJcC0+ZGV2aWNlID0gZGV2aWNlOworCXAtPmZ1bmMgPSBmdW5jOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IGRlc2NlbmQgaW50byB0aGUgT0JQIGRldmljZSB0cmVlLCByb290ZWQgYXQgdG9wbGV2ZWxfbm9kZSwKKyAqIGxvb2tpbmcgZm9yIGEgUENJIGRldmljZSBtYXRjaGluZyBidXMgYW5kIGRldmZuLgorICovCitzdGF0aWMgaW50IG9icF9maW5kKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgKnByZWdzLCBpbnQgdG9wbGV2ZWxfbm9kZSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuKQoreworCXRvcGxldmVsX25vZGUgPSBwcm9tX2dldGNoaWxkKHRvcGxldmVsX25vZGUpOworCisJd2hpbGUgKHRvcGxldmVsX25vZGUgIT0gMCkgeworCQlpbnQgcmV0ID0gb2JwX2ZpbmQocHJlZ3MsIHRvcGxldmVsX25vZGUsIGJ1cywgZGV2Zm4pOworCisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gcHJvbV9nZXRwcm9wZXJ0eSh0b3BsZXZlbF9ub2RlLCAicmVnIiwgKGNoYXIgKikgcHJlZ3MsCisJCQkJICAgICAgIHNpemVvZigqcHJlZ3MpICogUFJPTVJFR19NQVgpOworCQlpZiAocmV0ID09IDAgfHwgcmV0ID09IC0xKQorCQkJZ290byBuZXh0X3NpYmxpbmc7CisKKwkJaWYgKCgocHJlZ3NbMF0ucGh5c19oaSA+PiAxNikgJiAweGZmKSA9PSBidXMgJiYKKwkJICAgICgocHJlZ3NbMF0ucGh5c19oaSA+PiA4KSAmIDB4ZmYpID09IGRldmZuKQorCQkJYnJlYWs7CisKKwluZXh0X3NpYmxpbmc6CisJCXRvcGxldmVsX25vZGUgPSBwcm9tX2dldHNpYmxpbmcodG9wbGV2ZWxfbm9kZSk7CiAJfQogCisJcmV0dXJuIHRvcGxldmVsX25vZGU7Cit9CisKK3N0YXRpYyBpbnQgcGRldl9odGFiX3BvcHVsYXRlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzIHByW1BST01SRUdfTUFYXTsKKwl1MzIgZGV2aGFuZGxlID0gcGJtLT5kZXZoYW5kbGU7CisJdW5zaWduZWQgaW50IGJ1czsKKworCWZvciAoYnVzID0gcGJtLT5wY2lfZmlyc3RfYnVzbm87IGJ1cyA8PSBwYm0tPnBjaV9sYXN0X2J1c25vOyBidXMrKykgeworCQl1bnNpZ25lZCBpbnQgZGV2Zm47CisKKwkJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMjU2OyBkZXZmbisrKSB7CisJCQl1bnNpZ25lZCBpbnQgZGV2aWNlID0gUENJX1NMT1QoZGV2Zm4pOworCQkJdW5zaWduZWQgaW50IGZ1bmMgPSBQQ0lfRlVOQyhkZXZmbik7CisKKwkJCWlmIChvYnBfZmluZChwciwgcGJtLT5wcm9tX25vZGUsIGJ1cywgZGV2Zm4pKSB7CisJCQkJaW50IGVyciA9IHBkZXZfaHRhYl9hZGQoZGV2aGFuZGxlLCBidXMsCisJCQkJCQkJZGV2aWNlLCBmdW5jKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGRldl9lbnRyeSAqcGRldl9maW5kKHUzMiBkZXZoYW5kbGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQoreworCXN0cnVjdCBwZGV2X2VudHJ5ICpwOworCisJcCA9IHBkZXZfaHRhYltwZGV2X2hhc2hmbihkZXZoYW5kbGUsIGJ1cywgZGV2aWNlLCBmdW5jKV07CisJd2hpbGUgKHApIHsKKwkJaWYgKHAtPmRldmhhbmRsZSA9PSBkZXZoYW5kbGUgJiYKKwkJICAgIHAtPmJ1cyA9PSBidXMgJiYKKwkJICAgIHAtPmRldmljZSA9PSBkZXZpY2UgJiYKKwkJICAgIHAtPmZ1bmMgPT0gZnVuYykKKwkJCWJyZWFrOworCisJCXAgPSBwLT5uZXh0OworCX0KKworCXJldHVybiBwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwY2lfc3VuNHZfb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmljZSwgdW5zaWduZWQgaW50IGZ1bmMpCit7CiAJaWYgKGJ1cyA8IHBibS0+cGNpX2ZpcnN0X2J1c25vIHx8CiAJICAgIGJ1cyA+IHBibS0+cGNpX2xhc3RfYnVzbm8pCiAJCXJldHVybiAxOwotCXJldHVybiAwOworCXJldHVybiBwZGV2X2ZpbmQocGJtLT5kZXZoYW5kbGUsIGJ1cywgZGV2aWNlLCBmdW5jKSA9PSBOVUxMOwogfQogCiBzdGF0aWMgaW50IHBjaV9zdW40dl9yZWFkX3BjaV9jZmcoc3RydWN0IHBjaV9idXMgKmJ1c19kZXYsIHVuc2lnbmVkIGludCBkZXZmbiwKQEAgLTEwNjMsNiArMTE3Myw4IEBACiAKIAlwY2lfc3VuNHZfZ2V0X2J1c19yYW5nZShwYm0pOwogCXBjaV9zdW40dl9pb21tdV9pbml0KHBibSk7CisKKwlwZGV2X2h0YWJfcG9wdWxhdGUocGJtKTsKIH0KIAogdm9pZCBzdW40dl9wY2lfaW5pdChpbnQgbm9kZSwgY2hhciAqbW9kZWxfbmFtZSkKQEAgLTEwOTIsNyArMTIwNCw3IEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAogCQlpZiAoIXBhZ2UpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCBlYjkzZTljLi5kMzE5NzVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0NCw2ICsyNDQsMTMgQEAKIAl9CiAKIAlzd2l0Y2gocmVxdWVzdCkgeworCWNhc2UgUFRSQUNFX1BFRUtVU1I6CisJCWlmIChhZGRyICE9IDApCisJCQlwdF9lcnJvcl9yZXR1cm4ocmVncywgRUlPKTsKKwkJZWxzZQorCQkJcHRfc3VjY19yZXR1cm4ocmVncywgMCk7CisJCWdvdG8gb3V0X3RzazsKKwogCWNhc2UgUFRSQUNFX1BFRUtURVhUOiAvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8gCiAJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6IHsKIAkJdW5zaWduZWQgbG9uZyB0bXA2NDsKQEAgLTYwMiw2ICs2MDksMjIgQEAKIAogCS8qIFBUUkFDRV9EVU1QQ09SRSB1bnN1cHBvcnRlZC4uLiAqLwogCisJY2FzZSBQVFJBQ0VfR0VURVZFTlRNU0c6IHsKKwkJaW50IGVycjsKKworCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQorCQkJZXJyID0gcHV0X3VzZXIoY2hpbGQtPnB0cmFjZV9tZXNzYWdlLAorCQkJCSAgICAgICAodW5zaWduZWQgaW50IF9fdXNlciAqKSBkYXRhKTsKKwkJZWxzZQorCQkJZXJyID0gcHV0X3VzZXIoY2hpbGQtPnB0cmFjZV9tZXNzYWdlLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7CisJCWlmIChlcnIpCisJCQlwdF9lcnJvcl9yZXR1cm4ocmVncywgLWVycik7CisJCWVsc2UKKwkJCXB0X3N1Y2NfcmV0dXJuKHJlZ3MsIDApOworCQlicmVhazsKKwl9CisKIAlkZWZhdWx0OiB7CiAJCWludCBlcnIgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CiAJCWlmIChlcnIpCkBAIC02MzAsNyArNjUzLDcgQEAKIAkJaWYgKHVubGlrZWx5KHRzdGF0ZSAmIChUU1RBVEVfWENBUlJZIHwgVFNUQVRFX0lDQVJSWSkpKQogCQkJcmVzdWx0ID0gQVVESVRTQ19GQUlMVVJFOwogCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCByZXN1bHQsIHJlZ3MtPnVfcmVnc1tVUkVHX0kwXSk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChyZXN1bHQsIHJlZ3MtPnVfcmVnc1tVUkVHX0kwXSk7CiAJfQogCiAJaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCkBAIC02NTQsOCArNjc3LDcgQEAKIAogb3V0OgogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhc3lzY2FsbF9leGl0X3ApCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwKLQkJCQkgICAgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CiAJCQkJICAgICBBVURJVF9BUkNIX1NQQVJDIDoKIAkJCQkgICAgIEFVRElUX0FSQ0hfU1BBUkM2NCksCiAJCQkJICAgIHJlZ3MtPnVfcmVnc1tVUkVHX0cxXSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA3ZDBlNjdjLi45Y2YxYzg4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwdF9yZWdzIGZha2Vfc3dhcHBlcl9yZWdzID0geyB7IDAsIH0sIDAsIDAsIDAsIDAgfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHBlcl9jcHVfcGF0Y2godm9pZCkKK3ZvaWQgX19pbml0IHBlcl9jcHVfcGF0Y2godm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aWRfcGF0Y2hfZW50cnkgKnA7CiAJdW5zaWduZWQgbG9uZyB2ZXI7CkBAIC0yODAsNyArMjgwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzdW40dl9wYXRjaCh2b2lkKQordm9pZCBfX2luaXQgc3VuNHZfcGF0Y2godm9pZCkKIHsKIAlzdHJ1Y3Qgc3VuNHZfMWluc25fcGF0Y2hfZW50cnkgKnAxOwogCXN0cnVjdCBzdW40dl8yaW5zbl9wYXRjaF9lbnRyeSAqcDI7CkBAIC0zMTUsNiArMzE1LDE1IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgYm9vdF9jcHVfaWRfdG9vX2xhcmdlKGludCBjcHUpCit7CisJcHJvbV9wcmludGYoIlNlcmlvdXMgcHJvYmxlbSwgYm9vdCBjcHUgaWQgKCVkKSA+PSBOUl9DUFVTICglZClcbiIsCisJCSAgICBjcHUsIE5SX0NQVVMpOworCXByb21faGFsdCgpOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBJbml0aWFsaXplIFBST00gY29uc29sZSBhbmQgY29tbWFuZCBsaW5lLiAqLwpAQCAtMzMyLDE2ICszNDEsNiBAQAogCWNvbnN3aXRjaHAgPSAmcHJvbV9jb247CiAjZW5kaWYKIAotCS8qIFdvcmsgb3V0IGlmIHdlIGFyZSBzdGFyZmlyZSBlYXJseSBvbiAqLwotCWNoZWNrX2lmX3N0YXJmaXJlKCk7Ci0KLQkvKiBOb3cgd2Uga25vdyBlbm91Z2ggdG8gcGF0Y2ggdGhlIGdldF9jcHVpZCBzZXF1ZW5jZXMKLQkgKiB1c2VkIGJ5IHRyYXAgY29kZS4KLQkgKi8KLQlwZXJfY3B1X3BhdGNoKCk7Ci0KLQlzdW40dl9wYXRjaCgpOwotCiAJYm9vdF9mbGFnc19pbml0KCpjbWRsaW5lX3ApOwogCiAJaWRwcm9tX2luaXQoKTsKQEAgLTUzNSw3ICs1MzQsNyBAQAogCXdoaWxlICghY3B1X2ZpbmRfYnlfaW5zdGFuY2UobmNwdXNfcHJvYmVkLCBOVUxMLCBOVUxMKSkKIAkJbmNwdXNfcHJvYmVkKys7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBjcHUgKnAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwogCQlpZiAocCkgewogCQkJcmVnaXN0ZXJfY3B1KHAsIGksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggN2RjMjhhNC4uZjAzZDUyZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC03NDUsMTIgKzc0NSwyMSBAQAogCWludCB3YWl0OwogfTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhjYWxsX2xvY2spOworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhjYWxsX2xvY2spOwogc3RhdGljIHN0cnVjdCBjYWxsX2RhdGFfc3RydWN0ICpjYWxsX2RhdGE7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2NhbGxfZnVuY3Rpb247CiAKLS8qCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAbm9uYXRvbWljOiBjdXJyZW50bHkgdW51c2VkLgorICogQHdhaXQ6IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLiBEb2VzIG5vdCByZXR1cm4gdW50aWwKKyAqIHJlbW90ZSBDUFVzIGFyZSBuZWFybHkgcmVhZHkgdG8gZXhlY3V0ZSA8PGZ1bmM+PiBvciBhcmUgb3IgaGF2ZSBleGVjdXRlZC4KKyAqCiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgogICovCkBAIC03NTksNyArNzY4LDYgQEAKIHsKIAlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwogCWludCBjcHVzOwotCWxvbmcgdGltZW91dDsKIAogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CkBAIC03NzcsMzEgKzc4NSwxOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAljYWxsX2RhdGEgPSAmZGF0YTsKKwltYigpOwogCiAJc21wX2Nyb3NzX2NhbGxfbWFza2VkKCZ4Y2FsbF9jYWxsX2Z1bmN0aW9uLCAwLCAwLCAwLCBtYXNrKTsKIAotCS8qIAotCSAqIFdhaXQgZm9yIG90aGVyIGNwdXMgdG8gY29tcGxldGUgZnVuY3Rpb24gb3IgYXQKLQkgKiBsZWFzdCBzbmFwIHRoZSBjYWxsIGRhdGEuCi0JICovCi0JdGltZW91dCA9IDEwMDAwMDA7Ci0Jd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKSB7Ci0JCWlmICgtLXRpbWVvdXQgPD0gMCkKLQkJCWdvdG8gb3V0X3RpbWVvdXQ7Ci0JCWJhcnJpZXIoKTsKLQkJdWRlbGF5KDEpOwotCX0KKwkvKiBXYWl0IGZvciByZXNwb25zZSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykKKwkJY3B1X3JlbGF4KCk7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CiAKIAlyZXR1cm4gMDsKLQotb3V0X3RpbWVvdXQ6Ci0Jc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7Ci0JcHJpbnRrKCJYQ0FMTDogUmVtb3RlIGNwdXMgbm90IHJlc3BvbmRpbmcsIG5jcHVzPSVkIGZpbmlzaGVkPSVkXG4iLAotCSAgICAgICBjcHVzLCBhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkpOwotCXJldHVybiAwOwogfQogCiBpbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLApAQCAtODMwLDkgKzgyNSwxNiBAQAogCiBzdGF0aWMgdm9pZCB0c2Jfc3luYyh2b2lkICppbmZvKQogeworCXN0cnVjdCB0cmFwX3Blcl9jcHUgKnRwID0gJnRyYXBfYmxvY2tbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBpbmZvOwogCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkKKwkvKiBJdCBpcyBub3QgdmFsaWQgdG8gdGVzdCAiY3VycnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSIgaGVyZS4KKwkgKgorCSAqIFRoZSB2YWx1ZSBvZiAiY3VycmVudCIgaXMgbm90IGNoYW5nZWQgYXRvbWljYWxseSB3aXRoCisJICogc3dpdGNoX21tKCkuICBCdXQgdGhhdCdzIE9LLCB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sgdGhlCisJICogY3VycmVudCBjcHUncyB0cmFwIGJsb2NrIFBHRCBwaHlzaWNhbCBhZGRyZXNzLgorCSAqLworCWlmICh0cC0+cGdkX3BhZGRyID09IF9fcGEobW0tPnBnZCkpCiAJCXRzYl9jb250ZXh0X3N3aXRjaChtbSk7CiB9CiAKQEAgLTEyNjIsNyArMTI2NCw2IEBACiAJYm9vdF9jcHVfaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIAljdXJyZW50X3RpY2tfb2Zmc2V0ID0gdGltZXJfdGlja19vZmZzZXQ7CiAKLQljcHVfc2V0KGJvb3RfY3B1X2lkLCBjcHVfb25saW5lX21hcCk7CiAJcHJvZl9jb3VudGVyKGJvb3RfY3B1X2lkKSA9IHByb2ZfbXVsdGlwbGllcihib290X2NwdV9pZCkgPSAxOwogfQogCkBAIC0xMjc4LDcgKzEyNzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9jcHUoaSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJcHJvZl9tdWx0aXBsaWVyKGkpID0gbXVsdGlwbGllcjsKIAljdXJyZW50X3RpY2tfb2Zmc2V0ID0gKHRpbWVyX3RpY2tfb2Zmc2V0IC8gbXVsdGlwbGllcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvZl9zZXR1cF9sb2NrLCBmbGFncyk7CkBAIC0xMjg2LDYgKzEyODcsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCkKK3sKKwlpbnQgaW5zdGFuY2UsIG5vZGU7CisJdW5zaWduZWQgaW50IGRlZiwgc21hbGxlc3QgPSB+MFU7CisKKwlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkgICAgICAgKDMgKiAxMDI0ICogMTAyNCkgOgorCSAgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7CisKKwlpbnN0YW5jZSA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgJm5vZGUsIE5VTEwpKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gcHJvbV9nZXRpbnRkZWZhdWx0KG5vZGUsICJlY2FjaGUtc2l6ZSIsIGRlZik7CisJCWlmICh2YWwgPCBzbWFsbGVzdCkKKwkJCXNtYWxsZXN0ID0gdmFsOworCisJCWluc3RhbmNlKys7CisJfQorCisJLyogQW55IHZhbHVlIGxlc3MgdGhhbiAyNTZLIGlzIG5vbnNlbnNlLiAgKi8KKwlpZiAoc21hbGxlc3QgPCAoMjU2VSAqIDEwMjRVKSkKKwkJc21hbGxlc3QgPSAyNTYgKiAxMDI0OworCisJbWF4X2NhY2hlX3NpemUgPSBzbWFsbGVzdDsKKworCWlmIChzbWFsbGVzdCA8IDFVICogMTAyNFUgKiAxMDI0VSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbWF4X2NhY2hlX3NpemUgb2YgJXVLQlxuIiwKKwkJICAgICAgIHNtYWxsZXN0IC8gMTAyNFUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbWF4X2NhY2hlX3NpemUgb2YgJXVNQlxuIiwKKwkJICAgICAgIHNtYWxsZXN0IC8gMTAyNFUgLyAxMDI0VSk7Cit9CisKIC8qIENvbnN0cmFpbiB0aGUgbnVtYmVyIG9mIGNwdXMgdG8gbWF4X2NwdXMuICAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CkBAIC0xMzA2LDEyICsxMzQxLDEyIEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CiAJCQlpbnQgajsKIAogCQkJLyogWFhYIGdldCB0aGlzIG1hcHBpbmcgZnJvbSBtYWNoaW5lIGRlc2NyaXB0aW9uICovCi0JCQlmb3JfZWFjaF9jcHUoaikgeworCQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGopIHsKIAkJCQlpZiAoKGogPj4gMikgPT0gKGkgPj4gMikpCiAJCQkJCWNwdV9zZXQoaiwgY3B1X3NpYmxpbmdfbWFwW2ldKTsKIAkJCX0KQEAgLTEzMjEsNiArMTM1Niw3IEBACiAJfQogCiAJc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKKwlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiB9CiAKIC8qIFNldCB0aGlzIHVwIGVhcmx5IHNvIHRoYXQgdGhpbmdzIGxpa2UgdGhlIHNjaGVkdWxlciBjYW4gaW5pdApAQCAtMTM0MywxOCArMTM3OSw2IEBACiAKIHZvaWQgX19kZXZpbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7Ci0JaW50IGNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdSA+PSBOUl9DUFVTKSB7Ci0JCXByb21fcHJpbnRmKCJTZXJpb3VzIHByb2JsZW0sIGJvb3QgY3B1IGlkID49IE5SX0NQVVNcbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGNwdTsKLQlfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldChjcHUpOwotCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwogfQogCiBpbnQgX19kZXZpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCkBAIC0xNDMxLDQgKzE0NTUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKywgcHRyICs9IHNpemUpCiAJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7CisKKwkvKiBTZXR1cCAlZzUgZm9yIHRoZSBib290IGNwdS4gICovCisJX19sb2NhbF9wZXJfY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKaW5kZXggZjVlOGRiMS4uMzhlNTY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKQEAgLTI3Niw3ICsyNzYsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTChfX3N0cmxlbl91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJubGVuX3VzZXIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIAogI2lmZGVmIENPTkZJR19TT0xBUklTX0VNVUxfTU9EVUxFCiBFWFBPUlRfU1lNQk9MKGxpbnV4X3NwYXJjX3N5c2NhbGwpOwpAQCAtMjk4LDcgKzI5Nyw2IEBACiBFWFBPUlRfU1lNQk9MKHN2cjRfc2V0Y29udGV4dCk7CiBFWFBPUlRfU1lNQk9MKGNvbXBhdF9zeXNfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChzcGFyYzMyX29wZW4pOwotRVhQT1JUX1NZTUJPTChzeXNfY2xvc2UpOwogI2VuZGlmCiAKIC8qIFNwZWNpYWwgaW50ZXJuYWwgdmVyc2lvbnMgb2YgbGlicmFyeSBmdW5jdGlvbnMuICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKaW5kZXggYzRhMWNlZi4uYmRmMWY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUwpAQCAtMTM2LDYgKzEzNiwxMCBAQAogU0lHTjEoc3lzMzJfZ2V0c29ja25hbWUsIHN5c19nZXRzb2NrbmFtZSwgJW8wKQogU0lHTjIoc3lzMzJfaW9wcmlvX2dldCwgc3lzX2lvcHJpb19nZXQsICVvMCwgJW8xKQogU0lHTjMoc3lzMzJfaW9wcmlvX3NldCwgc3lzX2lvcHJpb19zZXQsICVvMCwgJW8xLCAlbzIpCitTSUdOMihzeXMzMl9zcGxpY2UsIHN5c19zcGxpY2UsICVvMCwgJW8xKQorU0lHTjIoc3lzMzJfc3luY19maWxlX3JhbmdlLCBjb21wYXRfc3luY19maWxlX3JhbmdlLCAlbzAsICVvNSkKK1NJR04yKHN5czMyX3RlZSwgc3lzX3RlZSwgJW8wLCAlbzEpCitTSUdOMShzeXMzMl92bXNwbGljZSwgY29tcGF0X3N5c192bXNwbGljZSwgJW8wKQogCiAJLmdsb2JsCQlzeXMzMl9tbWFwMgogc3lzMzJfbW1hcDI6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggMmU5MDZiYS4uMzEwMzBiZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtMTA2OSwzICsxMDY5LDExIEBACiAJcmV0dXJuIHN5c19sb29rdXBfZGNvb2tpZSgoY29va2llX2hpZ2ggPDwgMzIpIHwgY29va2llX2xvdywKIAkJCQkgIGJ1ZiwgbGVuKTsKIH0KKworbG9uZyBjb21wYXRfc3luY19maWxlX3JhbmdlKGludCBmZCwgdW5zaWduZWQgbG9uZyBvZmZfaGlnaCwgdW5zaWduZWQgbG9uZyBvZmZfbG93LCB1bnNpZ25lZCBsb25nIG5iX2hpZ2gsIHVuc2lnbmVkIGxvbmcgbmJfbG93LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19zeW5jX2ZpbGVfcmFuZ2UoZmQsCisJCQkJICAgKG9mZl9oaWdoIDw8IDMyKSB8IG9mZl9sb3csCisJCQkJICAgKG5iX2hpZ2ggPDwgMzIpIHwgbmJfbG93LAorCQkJCSAgIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggM2IyNTBmMi4uMTEzNmZjNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qMTAqLyAgLndvcmQgc3lzX3VubGluaywgc3Vub3NfZXhlY3YsIHN5c19jaGRpciwgc3lzMzJfY2hvd24xNiwgc3lzMzJfbWtub2QKIC8qMTUqLwkud29yZCBzeXNfY2htb2QsIHN5czMyX2xjaG93bjE2LCBzcGFyY19icmssIHN5czMyX3BlcmZjdHIsIHN5czMyX2xzZWVrCiAvKjIwKi8JLndvcmQgc3lzX2dldHBpZCwgc3lzX2NhcGdldCwgc3lzX2NhcHNldCwgc3lzMzJfc2V0dWlkMTYsIHN5czMyX2dldHVpZDE2Ci0vKjI1Ki8JLndvcmQgY29tcGF0X3N5c190aW1lLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5czMyX3NpZ2FsdHN0YWNrLCBzeXMzMl9wYXVzZQorLyoyNSovCS53b3JkIHN5czMyX3Ztc3BsaWNlLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5czMyX3NpZ2FsdHN0YWNrLCBzeXMzMl9wYXVzZQogLyozMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWUsIHN5c19sY2hvd24sIHN5c19mY2hvd24sIHN5czMyX2FjY2Vzcywgc3lzMzJfbmljZQogCS53b3JkIHN5c19jaG93biwgc3lzX3N5bmMsIHN5czMyX2tpbGwsIGNvbXBhdF9zeXNfbmV3c3RhdCwgc3lzMzJfc2VuZGZpbGUKIC8qNDAqLwkud29yZCBjb21wYXRfc3lzX25ld2xzdGF0LCBzeXNfZHVwLCBzeXNfcGlwZSwgY29tcGF0X3N5c190aW1lcywgc3lzX2dldHVpZApAQCAtNjYsMjAgKzY2LDIxIEBACiAJLndvcmQgc3lzMzJfaXBjLCBzeXMzMl9zaWdyZXR1cm4sIHN5c19jbG9uZSwgc3lzMzJfaW9wcmlvX2dldCwgY29tcGF0X3N5c19hZGp0aW1leAogLyoyMjAqLwkud29yZCBzeXMzMl9zaWdwcm9jbWFzaywgc3lzX25pX3N5c2NhbGwsIHN5czMyX2RlbGV0ZV9tb2R1bGUsIHN5c19uaV9zeXNjYWxsLCBzeXMzMl9nZXRwZ2lkCiAJLndvcmQgc3lzMzJfYmRmbHVzaCwgc3lzMzJfc3lzZnMsIHN5c19uaXNfc3lzY2FsbCwgc3lzMzJfc2V0ZnN1aWQxNiwgc3lzMzJfc2V0ZnNnaWQxNgotLyoyMzAqLwkud29yZCBzeXMzMl9zZWxlY3QsIGNvbXBhdF9zeXNfdGltZSwgc3lzX25pc19zeXNjYWxsLCBjb21wYXRfc3lzX3N0aW1lLCBjb21wYXRfc3lzX3N0YXRmczY0CisvKjIzMCovCS53b3JkIHN5czMyX3NlbGVjdCwgY29tcGF0X3N5c190aW1lLCBzeXMzMl9zcGxpY2UsIGNvbXBhdF9zeXNfc3RpbWUsIGNvbXBhdF9zeXNfc3RhdGZzNjQKIAkud29yZCBjb21wYXRfc3lzX2ZzdGF0ZnM2NCwgc3lzX2xsc2Vlaywgc3lzX21sb2NrLCBzeXNfbXVubG9jaywgc3lzMzJfbWxvY2thbGwKIC8qMjQwKi8JLndvcmQgc3lzX211bmxvY2thbGwsIHN5czMyX3NjaGVkX3NldHBhcmFtLCBzeXMzMl9zY2hlZF9nZXRwYXJhbSwgc3lzMzJfc2NoZWRfc2V0c2NoZWR1bGVyLCBzeXMzMl9zY2hlZF9nZXRzY2hlZHVsZXIKIAkud29yZCBzeXNfc2NoZWRfeWllbGQsIHN5czMyX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5czMyX3NjaGVkX2dldF9wcmlvcml0eV9taW4sIHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgY29tcGF0X3N5c19uYW5vc2xlZXAKIC8qMjUwKi8JLndvcmQgc3lzMzJfbXJlbWFwLCBzeXMzMl9zeXNjdGwsIHN5czMyX2dldHNpZCwgc3lzX2ZkYXRhc3luYywgc3lzMzJfbmZzc2VydmN0bAotCS53b3JkIHN5c19uaV9zeXNjYWxsLCBjb21wYXRfc3lzX2Nsb2NrX3NldHRpbWUsIGNvbXBhdF9zeXNfY2xvY2tfZ2V0dGltZSwgY29tcGF0X3N5c19jbG9ja19nZXRyZXMsIHN5czMyX2Nsb2NrX25hbm9zbGVlcAorCS53b3JkIHN5czMyX3N5bmNfZmlsZV9yYW5nZSwgY29tcGF0X3N5c19jbG9ja19zZXR0aW1lLCBjb21wYXRfc3lzX2Nsb2NrX2dldHRpbWUsIGNvbXBhdF9zeXNfY2xvY2tfZ2V0cmVzLCBzeXMzMl9jbG9ja19uYW5vc2xlZXAKIC8qMjYwKi8JLndvcmQgY29tcGF0X3N5c19zY2hlZF9nZXRhZmZpbml0eSwgY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0eSwgc3lzMzJfdGltZXJfc2V0dGltZSwgY29tcGF0X3N5c190aW1lcl9nZXR0aW1lLCBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgogCS53b3JkIHN5c190aW1lcl9kZWxldGUsIGNvbXBhdF9zeXNfdGltZXJfY3JlYXRlLCBzeXNfbmlfc3lzY2FsbCwgY29tcGF0X3N5c19pb19zZXR1cCwgc3lzX2lvX2Rlc3Ryb3kKIC8qMjcwKi8JLndvcmQgc3lzMzJfaW9fc3VibWl0LCBzeXNfaW9fY2FuY2VsLCBjb21wYXRfc3lzX2lvX2dldGV2ZW50cywgc3lzMzJfbXFfb3Blbiwgc3lzX21xX3VubGluawogCS53b3JkIGNvbXBhdF9zeXNfbXFfdGltZWRzZW5kLCBjb21wYXRfc3lzX21xX3RpbWVkcmVjZWl2ZSwgY29tcGF0X3N5c19tcV9ub3RpZnksIGNvbXBhdF9zeXNfbXFfZ2V0c2V0YXR0ciwgY29tcGF0X3N5c193YWl0aWQKLS8qMjgwKi8JLndvcmQgc3lzX25pX3N5c2NhbGwsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIGNvbXBhdF9zeXNfb3BlbmF0CisvKjI4MCovCS53b3JkIHN5czMyX3RlZSwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgY29tcGF0X3N5c19vcGVuYXQKIAkud29yZCBzeXNfbWtkaXJhdCwgc3lzX21rbm9kYXQsIHN5c19mY2hvd25hdCwgY29tcGF0X3N5c19mdXRpbWVzYXQsIGNvbXBhdF9zeXNfZnN0YXRhdDY0Ci0vKjI4NSovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAorLyoyOTAqLwkud29yZCBzeXNfdW5saW5rYXQsIHN5c19yZW5hbWVhdCwgc3lzX2xpbmthdCwgc3lzX3N5bWxpbmthdCwgc3lzX3JlYWRsaW5rYXQKIAkud29yZCBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIGNvbXBhdF9zeXNfcHNlbGVjdDYsIGNvbXBhdF9zeXNfcHBvbGwsIHN5c191bnNoYXJlCisvKjMwMCovCS53b3JkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0LCBjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdAogCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCkBAIC05NCw3ICs5NSw3IEBACiAvKjEwKi8gIC53b3JkIHN5c191bmxpbmssIHN5c19uaXNfc3lzY2FsbCwgc3lzX2NoZGlyLCBzeXNfY2hvd24sIHN5c19ta25vZAogLyoxNSovCS53b3JkIHN5c19jaG1vZCwgc3lzX2xjaG93biwgc3BhcmNfYnJrLCBzeXNfcGVyZmN0ciwgc3lzX2xzZWVrCiAvKjIwKi8JLndvcmQgc3lzX2dldHBpZCwgc3lzX2NhcGdldCwgc3lzX2NhcHNldCwgc3lzX3NldHVpZCwgc3lzX2dldHVpZAotLyoyNSovCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX3B0cmFjZSwgc3lzX2FsYXJtLCBzeXNfc2lnYWx0c3RhY2ssIHN5c19uaXNfc3lzY2FsbAorLyoyNSovCS53b3JkIHN5c192bXNwbGljZSwgc3lzX3B0cmFjZSwgc3lzX2FsYXJtLCBzeXNfc2lnYWx0c3RhY2ssIHN5c19uaXNfc3lzY2FsbAogLyozMCovCS53b3JkIHN5c191dGltZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19hY2Nlc3MsIHN5c19uaWNlCiAJLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfc3luYywgc3lzX2tpbGwsIHN5c19uZXdzdGF0LCBzeXNfc2VuZGZpbGU2NAogLyo0MCovCS53b3JkIHN5c19uZXdsc3RhdCwgc3lzX2R1cCwgc3lzX3BpcGUsIHN5c190aW1lcywgc3lzX25pc19zeXNjYWxsCkBAIC0xMzUsMjAgKzEzNiwyMSBAQAogCS53b3JkIHN5c19pcGMsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2Nsb25lLCBzeXNfaW9wcmlvX2dldCwgc3lzX2FkanRpbWV4CiAvKjIyMCovCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pX3N5c2NhbGwsIHN5c19kZWxldGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCwgc3lzX2dldHBnaWQKIAkud29yZCBzeXNfYmRmbHVzaCwgc3lzX3N5c2ZzLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zZXRmc3VpZCwgc3lzX3NldGZzZ2lkCi0vKjIzMCovCS53b3JkIHN5c19zZWxlY3QsIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pc19zeXNjYWxsLCBzeXNfc3RpbWUsIHN5c19zdGF0ZnM2NAorLyoyMzAqLwkud29yZCBzeXNfc2VsZWN0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zcGxpY2UsIHN5c19zdGltZSwgc3lzX3N0YXRmczY0CiAJLndvcmQgc3lzX2ZzdGF0ZnM2NCwgc3lzX2xsc2Vlaywgc3lzX21sb2NrLCBzeXNfbXVubG9jaywgc3lzX21sb2NrYWxsCiAvKjI0MCovCS53b3JkIHN5c19tdW5sb2NrYWxsLCBzeXNfc2NoZWRfc2V0cGFyYW0sIHN5c19zY2hlZF9nZXRwYXJhbSwgc3lzX3NjaGVkX3NldHNjaGVkdWxlciwgc3lzX3NjaGVkX2dldHNjaGVkdWxlcgogCS53b3JkIHN5c19zY2hlZF95aWVsZCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBzeXNfbmFub3NsZWVwCiAvKjI1MCovCS53b3JkIHN5czY0X21yZW1hcCwgc3lzX3N5c2N0bCwgc3lzX2dldHNpZCwgc3lzX2ZkYXRhc3luYywgc3lzX25mc3NlcnZjdGwKLQkud29yZCBzeXNfbmlfc3lzY2FsbCwgc3lzX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0cmVzLCBzeXNfY2xvY2tfbmFub3NsZWVwCisJLndvcmQgc3lzX3N5bmNfZmlsZV9yYW5nZSwgc3lzX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lLCBzeXNfY2xvY2tfZ2V0cmVzLCBzeXNfY2xvY2tfbmFub3NsZWVwCiAvKjI2MCovCS53b3JkIHN5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzX3NjaGVkX3NldGFmZmluaXR5LCBzeXNfdGltZXJfc2V0dGltZSwgc3lzX3RpbWVyX2dldHRpbWUsIHN5c190aW1lcl9nZXRvdmVycnVuCiAJLndvcmQgc3lzX3RpbWVyX2RlbGV0ZSwgc3lzX3RpbWVyX2NyZWF0ZSwgc3lzX25pX3N5c2NhbGwsIHN5c19pb19zZXR1cCwgc3lzX2lvX2Rlc3Ryb3kKIC8qMjcwKi8JLndvcmQgc3lzX2lvX3N1Ym1pdCwgc3lzX2lvX2NhbmNlbCwgc3lzX2lvX2dldGV2ZW50cywgc3lzX21xX29wZW4sIHN5c19tcV91bmxpbmsKIAkud29yZCBzeXNfbXFfdGltZWRzZW5kLCBzeXNfbXFfdGltZWRyZWNlaXZlLCBzeXNfbXFfbm90aWZ5LCBzeXNfbXFfZ2V0c2V0YXR0ciwgc3lzX3dhaXRpZAotLyoyODAqLwkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5c19hZGRfa2V5LCBzeXNfcmVxdWVzdF9rZXksIHN5c19rZXljdGwsIHN5c19vcGVuYXQKKy8qMjgwKi8JLndvcmQgc3lzX3RlZSwgc3lzX2FkZF9rZXksIHN5c19yZXF1ZXN0X2tleSwgc3lzX2tleWN0bCwgc3lzX29wZW5hdAogCS53b3JkIHN5c19ta2RpcmF0LCBzeXNfbWtub2RhdCwgc3lzX2ZjaG93bmF0LCBzeXNfZnV0aW1lc2F0LCBzeXNfZnN0YXRhdDY0Ci0vKjI4NSovCS53b3JkIHN5c191bmxpbmthdCwgc3lzX3JlbmFtZWF0LCBzeXNfbGlua2F0LCBzeXNfc3ltbGlua2F0LCBzeXNfcmVhZGxpbmthdAorLyoyOTAqLwkud29yZCBzeXNfdW5saW5rYXQsIHN5c19yZW5hbWVhdCwgc3lzX2xpbmthdCwgc3lzX3N5bWxpbmthdCwgc3lzX3JlYWRsaW5rYXQKIAkud29yZCBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIHN5c19wc2VsZWN0Niwgc3lzX3Bwb2xsLCBzeXNfdW5zaGFyZQorLyozMDAqLwkud29yZCBzeXNfc2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0CiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5PU19FTVVMKSB8fCBkZWZpbmVkKENPTkZJR19TT0xBUklTX0VNVUwpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TT0xBUklTX0VNVUxfTU9EVUxFKQpAQCAtMjYxLDUgKzI2Myw1IEBACiAvKjI5MCovCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAJLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzCisJLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZmYwOTBiYi4uNTYzZGI1MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTEzMCw5ICsxMTMwLDkgQEAKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCSAgICAgICBhZnNyLCBhZmFyLAogCSAgICAgICAoYWZzciAmIENIQUZTUl9UTDEpID8gMSA6IDApOwotCXByaW50aygiJXMiICJFUlJPUiglZCk6IFRQQ1slMDE2bHhdIFROUENbJTAxNmx4XSBUU1RBVEVbJTAxNmx4XVxuIiwKKwlwcmludGsoIiVzIiAiRVJST1IoJWQpOiBUUENbJWx4XSBUTlBDWyVseF0gTzdbJWx4XSBUU1RBVEVbJWx4XVxuIiwKIAkgICAgICAgKHJlY292ZXJhYmxlID8gS0VSTl9XQVJOSU5HIDogS0VSTl9DUklUKSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAotCSAgICAgICByZWdzLT50cGMsIHJlZ3MtPnRucGMsIHJlZ3MtPnRzdGF0ZSk7CisJICAgICAgIHJlZ3MtPnRwYywgcmVncy0+dG5wYywgcmVncy0+dV9yZWdzW1VSRUdfSTddLCByZWdzLT50c3RhdGUpOwogCXByaW50aygiJXMiICJFUlJPUiglZCk6IE1fU1lORCglbHgpLCAgRV9TWU5EKCVseCklcyVzXG4iLAogCSAgICAgICAocmVjb3ZlcmFibGUgPyBLRVJOX1dBUk5JTkcgOiBLRVJOX0NSSVQpLCBzbXBfcHJvY2Vzc29yX2lkKCksCiAJICAgICAgIChhZnNyICYgQ0hBRlNSX01fU1lORFJPTUUpID4+IENIQUZTUl9NX1NZTkRST01FX1NISUZULApAQCAtMTc5Nyw3ICsxNzk3LDkgQEAKIAl9OwogfQogCi1zdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCitleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCitzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSAqZW50LCBpbnQgY3B1LCBjb25zdCBjaGFyICpwZngsIGF0b21pY190ICpvY250KQogewogCWludCBjbnQ7CiAKQEAgLTE4MzAsNiArMTgzMiw4IEBACiAJICAgICAgIHBmeCwKIAkgICAgICAgZW50LT5lcnJfcmFkZHIsIGVudC0+ZXJyX3NpemUsIGVudC0+ZXJyX2NwdSk7CiAKKwlfX3Nob3dfcmVncyhyZWdzKTsKKwogCWlmICgoY250ID0gYXRvbWljX3JlYWQob2NudCkpICE9IDApIHsKIAkJYXRvbWljX3NldChvY250LCAwKTsKIAkJd21iKCk7CkBAIC0xODYyLDcgKzE4NjYsNyBAQAogCiAJcHV0X2NwdSgpOwogCi0Jc3VuNHZfbG9nX2Vycm9yKCZsb2NhbF9jb3B5LCBjcHUsCisJc3VuNHZfbG9nX2Vycm9yKHJlZ3MsICZsb2NhbF9jb3B5LCBjcHUsCiAJCQlLRVJOX0VSUiAiUkVTVU1BQkxFIEVSUk9SIiwKIAkJCSZzdW40dl9yZXN1bV9vZmxvd19jbnQpOwogfQpAQCAtMTkxMCw3ICsxOTE0LDcgQEAKIAl9CiAjZW5kaWYKIAotCXN1bjR2X2xvZ19lcnJvcigmbG9jYWxfY29weSwgY3B1LAorCXN1bjR2X2xvZ19lcnJvcihyZWdzLCAmbG9jYWxfY29weSwgY3B1LAogCQkJS0VSTl9FTUVSRyAiTk9OLVJFU1VNQUJMRSBFUlJPUiIsCiAJCQkmc3VuNHZfbm9ucmVzdW1fb2Zsb3dfY250KTsKIApAQCAtMjIwMCw3ICsyMjA0LDYgQEAKIHZvaWQgZGllX2lmX2tlcm5lbChjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7Ci0JZXh0ZXJuIHZvaWQgX19zaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIAlleHRlcm4gdm9pZCBzbXBfcmVwb3J0X3JlZ3Modm9pZCk7CiAJaW50IGNvdW50ID0gMDsKIAkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvY2hlY2tzdW0uUyBiL2FyY2gvc3BhcmM2NC9saWIvY2hlY2tzdW0uUwppbmRleCBiYTljZDNjLi4xZDIzMGY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2NoZWNrc3VtLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9jaGVja3N1bS5TCkBAIC0xNjUsOCArMTY1LDkgQEAKIAlzbGwJCSVnMSwgOCwgJWcxCiAJb3IJCSVvNSwgJWcxLCAlbzQKIAotMToJYWRkCQklbzIsICVvNCwgJW8yCisxOglhZGRjYwkJJW8yLCAlbzQsICVvMgorCWFkZGMJCSVnMCwgJW8yLCAlbzIKIAogY3N1bV9wYXJ0aWFsX2ZpbmlzaDoKIAlyZXRsCi0JIG1vdgkJJW8yLCAlbzAKKwkgc3JsCQklbzIsIDAsICVvMApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHkuUyBiL2FyY2gvc3BhcmM2NC9saWIvY3N1bV9jb3B5LlMKaW5kZXggNzFhZjQ4OC4uZTU2NmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHkuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weS5TCkBAIC0yMjEsMTEgKzIyMSwxMiBAQAogCXNsbAkJJWcxLCA4LCAlZzEKIAlvcgkJJW81LCAlZzEsICVvNAogCi0xOglhZGQJCSVvMywgJW80LCAlbzMKKzE6CWFkZGNjCQklbzMsICVvNCwgJW8zCisJYWRkYwkJJWcwLCAlbzMsICVvMwogCiA3MDoKIAlyZXRsCi0JIG1vdgkJJW8zLCAlbzAKKwkgc3JsCQklbzMsIDAsICVvMAogCiA5NToJbW92CQkwLCBHTE9CQUxfU1BBUkUKIAlicmxleixwbgklbzIsIDRmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCmluZGV4IDBkYjJmN2QuLjZlMDAyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCkBAIC0zMjcsOCArMzI3LDEyIEBACiAJCWluc24gPSBnZXRfZmF1bHRfaW5zbihyZWdzLCAwKTsKIAkJaWYgKCFpbnNuKQogCQkJZ290byBjb250aW51ZV9mYXVsdDsKKwkJLyogQWxsIGxvYWRzLCBzdG9yZXMgYW5kIGF0b21pY3MgaGF2ZSBiaXRzIDMwIGFuZCAzMSBib3RoIHNldAorCQkgKiBpbiB0aGUgaW5zdHJ1Y3Rpb24uICBCaXQgMjEgaXMgc2V0IGluIGFsbCBzdG9yZXMsIGJ1dCB3ZQorCQkgKiBoYXZlIHRvIGF2b2lkIHByZWZldGNoZXMgd2hpY2ggYWxzbyBoYXZlIGJpdCAyMSBzZXQuCisJCSAqLwogCQlpZiAoKGluc24gJiAweGMwMjAwMDAwKSA9PSAweGMwMjAwMDAwICYmCi0JCSAgICAoaW5zbiAmIDB4MTc4MDAwMCkgIT0gMHgxNjgwMDAwKSB7CisJCSAgICAoaW5zbiAmIDB4MDE3ODAwMDApICE9IDB4MDE2ODAwMDApIHsKIAkJCS8qIERvbid0IGJvdGhlciB1cGRhdGluZyB0aHJlYWQgc3RydWN0IHZhbHVlLAogCQkJICogYmVjYXVzZSB1cGRhdGVfbW11X2NhY2hlIG9ubHkgY2FyZXMgd2hpY2ggdGxiCiAJCQkgKiB0aGUgYWNjZXNzIGNhbWUgZnJvbS4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMDc0NjIwZC4uZmJiYmViYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTE5OCw2ICsxOTgsMTMgQEAKIAlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGUgPSBOVUxMOwogCisJLyogV2UgbXVzdCBhbGlnbiB0aGUgYWRkcmVzcywgYmVjYXVzZSBvdXIgY2FsbGVyIHdpbGwgcnVuCisJICogc2V0X2h1Z2VfcHRlX2F0KCkgb24gd2hhdGV2ZXIgd2UgcmV0dXJuLCB3aGljaCB3cml0ZXMgb3V0CisJICogYWxsIG9mIHRoZSBzdWItcHRlcyBmb3IgdGhlIGh1Z2VwYWdlIHJhbmdlLiAgU28gd2UgaGF2ZQorCSAqIHRvIGdpdmUgaXQgdGhlIGZpcnN0IHN1Y2ggc3ViLXB0ZS4KKwkgKi8KKwlhZGRyICY9IEhQQUdFX01BU0s7CisKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKIAlwdWQgPSBwdWRfYWxsb2MobW0sIHBnZCwgYWRkcik7CiAJaWYgKHB1ZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL3RsYi5jIGIvYXJjaC9zcGFyYzY0L21tL3RsYi5jCmluZGV4IGEwNzljZjQyLi4zZjEwZmM5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL3RsYi5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KQEAgLTI0LDYgKzI1LDggQEAKIHsKIAlzdHJ1Y3QgbW11X2dhdGhlciAqbXAgPSAmX19nZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwogCWlmIChtcC0+dGxiX25yKSB7CiAJCWZsdXNoX3RzYl91c2VyKG1wKTsKIApAQCAtMzgsNiArNDEsOCBAQAogCQl9CiAJCW1wLT50bGJfbnIgPSAwOwogCX0KKworCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIHZvaWQgdGxiX2JhdGNoX2FkZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9yaWcpCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggMDVmYmIyMC4uNzZlODViYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCisrKyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtNTcsMjAgKzU3LDYgQEAKIAljaHJvb3QsIGFuZCB5b3UgZGlzYWJsZSBDT05GSUdfTU9ERV9UVCwgeW91IHByb2JhYmx5IHdhbnQgdG8gc2F5IFkKIAloZXJlLgogCi1jb25maWcgSE9TVF8yR18yRwotCWJvb2wgIjJHLzJHIGhvc3QgYWRkcmVzcyBzcGFjZSBzcGxpdCIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIE1PREVfVFQKLQloZWxwCi0JVGhpcyBpcyBuZWVkZWQgd2hlbiB0aGUgaG9zdCBvbiB3aGljaCB5b3UgcnVuIGhhcyBhIDJHLzJHIG1lbW9yeQotCXNwbGl0LCBpbnN0ZWFkIG9mIHRoZSBjdXN0b21hcnkgM0cvMUcuCi0KLQlOb3RlIHRoYXQgdG8gZW5hYmxlIHN1Y2ggYSBob3N0Ci0JY29uZmlndXJhdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2Ugb25seSBpbiBzb21lIGNhc2VzLCB5b3UgbmVlZCBzcGVjaWFsCi0JaG9zdCBwYXRjaGVzLgotCi0JU28sIGlmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSAnTicuCi0KIGNvbmZpZyBLRVJORUxfSEFMRl9HSUdTCiAJaW50ICJLZXJuZWwgYWRkcmVzcyBzcGFjZSBzaXplIChpbiAuNUcgdW5pdHMpIgogCWRlZmF1bHQgIjEiCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcuaTM4NiBiL2FyY2gvdW0vS2NvbmZpZy5pMzg2CmluZGV4IDg1ZTZhNTUuLmY2ZWI3MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy5pMzg2CisrKyBiL2FyY2gvdW0vS2NvbmZpZy5pMzg2CkBAIC0xNiw2ICsxNiwxOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEhPU1RfMkdfMkcKKwlib29sICIyRy8yRyBob3N0IGFkZHJlc3Mgc3BhY2Ugc3BsaXQiCisJZGVmYXVsdCBuCisJaGVscAorCVRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlIGhvc3Qgb24gd2hpY2ggeW91IHJ1biBoYXMgYSAyRy8yRyBtZW1vcnkKKwlzcGxpdCwgaW5zdGVhZCBvZiB0aGUgY3VzdG9tYXJ5IDNHLzFHLgorCisJTm90ZSB0aGF0IHRvIGVuYWJsZSBzdWNoIGEgaG9zdAorCWNvbmZpZ3VyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIG9ubHkgaW4gc29tZSBjYXNlcywgeW91IG5lZWQgc3BlY2lhbAorCWhvc3QgcGF0Y2hlcy4KKworCVNvLCBpZiB5b3UgZG8gbm90IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgJ04nLgorCiBjb25maWcgVE9QX0FERFIKICAJaGV4CiAgCWRlZmF1bHQgMHhjMDAwMDAwMCBpZiAhSE9TVF8yR18yRwpAQCAtMzUsMTEgKzQ4LDEzIEBACiAKIGNvbmZpZyBTVFVCX0NPREUKIAloZXgKLQlkZWZhdWx0IDB4YmZmZmUwMDAKKwlkZWZhdWx0IDB4YmZmZmUwMDAgaWYgIUhPU1RfMkdfMkcKKwlkZWZhdWx0IDB4N2ZmZmUwMDAgaWYgSE9TVF8yR18yRwogCiBjb25maWcgU1RVQl9EQVRBCiAJaGV4Ci0JZGVmYXVsdCAweGJmZmZmMDAwCisJZGVmYXVsdCAweGJmZmZmMDAwIGlmICFIT1NUXzJHXzJHCisJZGVmYXVsdCAweDdmZmZmMDAwIGlmIEhPU1RfMkdfMkcKIAogY29uZmlnIFNUVUJfU1RBUlQKIAloZXgKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUgYi9hcmNoL3VtL01ha2VmaWxlCmluZGV4IDI0NzkwYmUuLmY2YWQ4MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUKKysrIGIvYXJjaC91bS9NYWtlZmlsZQpAQCAtOTYsNyArOTYsOCBAQAogYWxsOiBsaW51eAogCiBsaW51eDogdm1saW51eAotCWxuIC1mICQ8ICRACisJQGVjaG8gJyAgTElOSyAkQCcKKwkkKFEpbG4gLWYgJDwgJEAKIAogZGVmaW5lIGFyY2hoZWxwCiAgIGVjaG8gJyogbGludXgJCS0gQmluYXJ5IGtlcm5lbCBpbWFnZSAoLi9saW51eCkgLSBmb3IgYmFja3dhcmQnCkBAIC0xMTcsNiArMTE4LDEwIEBACiBMSU5LLSQoQ09ORklHX0xEX1NDUklQVF9TVEFUSUMpICs9IC1zdGF0aWMKIExJTkstJChDT05GSUdfTERfU0NSSVBUX0RZTikgKz0gLVdsLC1ycGF0aCwvbGliCiAKK0NGTEFHU19OT19IQVJERU5JTkcgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1QSUMsKSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXBpYywpIFwKKwkkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvciwpIFwKKwkkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3Rvci1hbGwsKQorCiBDUFBfTU9ERS0kKENPTkZJR19NT0RFX1RUKSA6PSAtRE1PREVfVFQKIENPTkZJR19LRVJORUxfU1RBQ0tfT1JERVIgPz0gMgogU1RBQ0tfU0laRSA6PSAkKHNoZWxsIGVjaG8gJCRbIDQwOTYgKiAoMSA8PCAkKENPTkZJR19LRVJORUxfU1RBQ0tfT1JERVIpKSBdICkKQEAgLTE1OSw2ICsxNjQsNyBAQAogJChTWU1MSU5LX0hFQURFUlMpOgogCUBlY2hvICcgIFNZTUxJTksgJEAnCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCisJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvaW5jbHVkZS9hc20tdW0KIAkkKFEpbG4gLWZzbiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXVtLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS0kKFNVQkFSQ0gpJChzdWZmaXggJEApICRACiBlbHNlCiAJJChRKWNkICQoVE9QRElSKS8kKGRpciAkQCkgOyBcCkBAIC0xNjgsNyArMTc0LDcgQEAKIGluY2x1ZGUvYXNtLXVtL2FyY2g6CiAJQGVjaG8gJyAgU1lNTElOSyAkQCcKIGlmbmVxICgkKEtCVUlMRF9TUkMpLCkKLQkkKFEpbWtkaXIgLXAgaW5jbHVkZS9hc20tdW0KKwkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9pbmNsdWRlL2FzbS11bQogCSQoUSlsbiAtZnNuICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tJChTVUJBUkNIKSBpbmNsdWRlL2FzbS11bS9hcmNoCiBlbHNlCiAJJChRKWNkICQoVE9QRElSKS9pbmNsdWRlL2FzbS11bSAmJiBsbiAtc2YgLi4vYXNtLSQoU1VCQVJDSCkgYXJjaApAQCAtMjAyLDggKzIwOCw4IEBACiAkKEFSQ0hfRElSKS9pbmNsdWRlL3VtbC1jb25maWcuaCA6IGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAogCSQoY2FsbCBmaWxlY2hrLHVtbGNvbmZpZykKIAotJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLnM6ICQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpL3VzZXItb2Zmc2V0cy5jCi0JJChDQykgJChVU0VSX0NGTEFHUykgLVMgLW8gJEAgJDwKKyQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpL3VzZXItb2Zmc2V0cy5zOiBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpICRACiAKIGRlZmluZSBmaWxlY2hrX2dlbi1hc20tb2Zmc2V0cwogICAgICAgICAoc2V0IC1lOyBcCkBAIC0yMTgsMTMgKzIyNCwxMSBAQAogICAgICAgICAgZWNobyAiIjsgKQogZW5kZWYKIAotJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMucworJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS9zeXMtJChTVUJBUkNIKS91c2VyLW9mZnNldHMucwogCSQoY2FsbCBmaWxlY2hrLGdlbi1hc20tb2Zmc2V0cykKIAotQ0xFQU5fRklMRVMgKz0gJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLnMKLQogJChBUkNIX0RJUikvaW5jbHVkZS9rZXJuX2NvbnN0YW50cy5oOiAkKG9ianRyZWUpLyQoQVJDSF9ESVIpL2luY2x1ZGUKIAlAZWNobyAnICBTWU1MSU5LICRAJwotCSQoUSkgbG4gLXNmIC4uLy4uLy4uL2luY2x1ZGUvYXNtLXVtL2FzbS1vZmZzZXRzLmggJEAKKwkkKFEpbG4gLXNmIC4uLy4uLy4uL2luY2x1ZGUvYXNtLXVtL2FzbS1vZmZzZXRzLmggJEAKIAotZXhwb3J0IFNVQkFSQ0ggVVNFUl9DRkxBR1MgT1MKK2V4cG9ydCBTVUJBUkNIIFVTRVJfQ0ZMQUdTIENGTEFHU19OT19IQVJERU5JTkcgT1MKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUtaTM4NiBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgppbmRleCA3YTBlMDRlLi5iNjVjYTExIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLWkzODYKKysrIGIvYXJjaC91bS9NYWtlZmlsZS1pMzg2CkBAIC0zMyw1ICszMyw5IEBACiAjIHByZXZlbnQgZ2NjIGZyb20ga2VlcGluZyB0aGUgc3RhY2sgMTYgYnl0ZSBhbGlnbmVkLiBUYWtlbiBmcm9tIGkzODYuCiBjZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTIpCiAKKyMgUHJldmVudCBzcHJpbnRmIGluIG5mc2QgZnJvbSBiZWluZyBjb252ZXJ0ZWQgdG8gc3RyY3B5IGFuZCByZXN1bHRpbmcgaW4KKyMgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UuCitjZmxhZ3MteSArPSAtZmZyZWVzdGFuZGluZworCiBDRkxBR1MgKz0gJChjZmxhZ3MteSkKIFVTRVJfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RlZmNvbmZpZyBiL2FyY2gvdW0vZGVmY29uZmlnCmluZGV4IDgwZDMwZDEuLjQwMmE3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZGVmY29uZmlnCisrKyBiL2FyY2gvdW0vZGVmY29uZmlnCkBAIC0xLDE0ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM2LW1tMQotIyBUdWUgSnVuIDE0IDE4OjIyOjIxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzMKKyMgRnJpIEFwciAyOCAwOTozMToyMCAyMDA2CiAjCiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfVU1MPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfSVJRX1JFTEVBU0VfTUVUSE9EPXkKIAogIwogIyBVTUwtc3BlY2lmaWMgb3B0aW9ucwpAQCAtMTYsOCArMTUsNTAgQEAKICMgQ09ORklHX01PREVfVFQgaXMgbm90IHNldAogIyBDT05GSUdfU1RBVElDX0xJTksgaXMgbm90IHNldAogQ09ORklHX01PREVfU0tBUz15CisKKyMKKyMgSG9zdCBwcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKKyMKKyMgQ09ORklHX00zODYgaXMgbm90IHNldAorIyBDT05GSUdfTTQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19NNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX001ODZUU0MgaXMgbm90IHNldAorIyBDT05GSUdfTTU4Nk1NWCBpcyBub3Qgc2V0CitDT05GSUdfTTY4Nj15CisjIENPTkZJR19NUEVOVElVTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QRU5USVVNSUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QRU5USVVNTSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEVOVElVTTQgaXMgbm90IHNldAorIyBDT05GSUdfTUs2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01LNyBpcyBub3Qgc2V0CisjIENPTkZJR19NSzggaXMgbm90IHNldAorIyBDT05GSUdfTUNSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUZGSUNFT04gaXMgbm90IHNldAorIyBDT05GSUdfTVdJTkNISVBDNiBpcyBub3Qgc2V0CisjIENPTkZJR19NV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfTVdJTkNISVAzRCBpcyBub3Qgc2V0CisjIENPTkZJR19NR0VPREVHWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUdFT0RFX0xYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01DWVJJWElJSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVklBQzNfMiBpcyBub3Qgc2V0CisjIENPTkZJR19YODZfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfWDg2X0NNUFhDSEc9eQorQ09ORklHX1g4Nl9YQUREPXkKK0NPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19YODZfUFBST19GRU5DRT15CitDT05GSUdfWDg2X1dQX1dPUktTX09LPXkKK0NPTkZJR19YODZfSU5WTFBHPXkKK0NPTkZJR19YODZfQlNXQVA9eQorQ09ORklHX1g4Nl9QT1BBRF9PSz15CitDT05GSUdfWDg2X0NNUFhDSEc2ND15CitDT05GSUdfWDg2X0dPT0RfQVBJQz15CitDT05GSUdfWDg2X1VTRV9QUFJPX0NIRUNLU1VNPXkKK0NPTkZJR19YODZfVFNDPXkKIENPTkZJR19VTUxfWDg2PXkKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TRU1BUEhPUkVfU0xFRVBFUlM9eQorIyBDT05GSUdfSE9TVF8yR18yRyBpcyBub3Qgc2V0CiBDT05GSUdfVE9QX0FERFI9MHhjMDAwMDAwMAogIyBDT05GSUdfM19MRVZFTF9QR1RBQkxFUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RVQl9DT0RFPTB4YmZmZmUwMDAKQEAgLTI1LDIyICs2NiwyNCBAQAogQ09ORklHX1NUVUJfU1RBUlQ9MHhiZmZmZTAwMAogQ09ORklHX0FSQ0hfSEFTX1NDX1NJR05BTFM9eQogQ09ORklHX0FSQ0hfUkVVU0VfSE9TVF9WU1lTQ0FMTF9BUkVBPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX0xEX1NDUklQVF9EWU49eQogQ09ORklHX05FVD15CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogIyBDT05GSUdfSE9TVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQUEZTIGlzIG5vdCBzZXQKIENPTkZJR19NQ09OU09MRT15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUXzJHXzJHIGlzIG5vdCBzZXQKIENPTkZJR19ORVNUX0xFVkVMPTAKLUNPTkZJR19LRVJORUxfSEFMRl9HSUdTPTEKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUj0yCiBDT05GSUdfVU1MX1JFQUxfVElNRV9DTE9DSz15CkBAIC00OSw3ICs5Miw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTU3LDYgKzk5LDcgQEAKICMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNjQsMjYgKzEwNywyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC05MSwxOCArMTM2LDQzIEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CiAKICMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIyBCbG9jayBsYXllcgogIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9VQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQkRfU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OPXkKKyMgQ09ORklHX01NQVBQRVIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIERldmljZXMKQEAgLTEyNyw1MCArMTk3LDIzIEBACiBDT05GSUdfU09VTkQ9bQogQ09ORklHX0hPU1RBVURJTz1tCiBDT05GSUdfVU1MX1JBTkRPTT15Ci0jIENPTkZJR19NTUFQUEVSIGlzIG5vdCBzZXQKIAogIwotIyBCbG9jayBkZXZpY2VzCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKLUNPTkZJR19CTEtfREVWX1VCRD15Ci1DT05GSUdfQkxLX0RFVl9VQkRfU1lOQz15Ci1DT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLQotIwotIyBVTUwgTmV0d29yayBEZXZpY2VzCi0jCi1DT05GSUdfVU1MX05FVD15Ci1DT05GSUdfVU1MX05FVF9FVEhFUlRBUD15Ci1DT05GSUdfVU1MX05FVF9UVU5UQVA9eQotQ09ORklHX1VNTF9ORVRfU0xJUD15Ci1DT05GSUdfVU1MX05FVF9EQUVNT049eQotQ09ORklHX1VNTF9ORVRfTUNBU1Q9eQotQ09ORklHX1VNTF9ORVRfU0xJUlA9eQotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JraW5nCiAjCiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0xNzgsNiArMjIxLDcgQEAKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKICMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldApAQCAtMTg2LDI3ICsyMzAsMzEgQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKLSMgVENQIGNvbmdlc3Rpb24gY29udHJvbAorIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPXkKLUNPTkZJR19UQ1BfQ09OR19IVENQPXkKLSMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0hZQkxBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX1ZFR0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogCiAjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yMjQsMjcgKzI3Miw0NyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfS0dEQk9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVU1MIE5ldHdvcmsgRGV2aWNlcworIworQ09ORklHX1VNTF9ORVQ9eQorQ09ORklHX1VNTF9ORVRfRVRIRVJUQVA9eQorQ09ORklHX1VNTF9ORVRfVFVOVEFQPXkKK0NPTkZJR19VTUxfTkVUX1NMSVA9eQorQ09ORklHX1VNTF9ORVRfREFFTU9OPXkKK0NPTkZJR19VTUxfTkVUX01DQVNUPXkKKyMgQ09ORklHX1VNTF9ORVRfUENBUCBpcyBub3Qgc2V0CitDT05GSUdfVU1MX05FVF9TTElSUD15CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQogCiAjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIwogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKQEAgLTI2Myw2ICszMzEsMTMgQEAKICMgQ09ORklHX1NMSVBfTU9ERV9TTElQNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0yNzQsMTcgKzM0OSwxNCBAQAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVI0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz15CiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIworIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0yOTUsMTEgKzM2Nyw2IEBACiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTMyMywxNCArMzkwLDEwIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTQzMCw2ICs0OTMsNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPW0KICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiAKQEAgLTQ0OCwxMiArNTEyLDE4IEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0xBQj15CisjIENPTkZJR19ERUJVR19TTEFCX0xFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUFJPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQ09WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NBTExfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2Nvdy5oIGIvYXJjaC91bS9kcml2ZXJzL2Nvdy5oCmluZGV4IDA0ZTM5NTguLmRjMzZiMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jb3cuaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvY293LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIGV4dGVybiBpbnQgcmVhZF9jb3dfaGVhZGVyKGludCAoKnJlYWRlcikoX191NjQsIGNoYXIgKiwgaW50LCB2b2lkICopLAogCQkJICAgdm9pZCAqYXJnLCBfX3UzMiAqdmVyc2lvbl9vdXQsCiAJCQkgICBjaGFyICoqYmFja2luZ19maWxlX291dCwgdGltZV90ICptdGltZV9vdXQsCi0JCQkgICBfX3U2NCAqc2l6ZV9vdXQsIGludCAqc2VjdG9yc2l6ZV9vdXQsCisJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemVfb3V0LCBpbnQgKnNlY3RvcnNpemVfb3V0LAogCQkJICAgX191MzIgKmFsaWduX291dCwgaW50ICpiaXRtYXBfb2Zmc2V0X291dCk7CiAKIGV4dGVybiBpbnQgd3JpdGVfY293X2hlYWRlcihjaGFyICpjb3dfZmlsZSwgaW50IGZkLCBjaGFyICpiYWNraW5nX2ZpbGUsCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oIGIvYXJjaC91bS9kcml2ZXJzL2Nvd19zeXMuaAppbmRleCA5NGRlNGVhLi43YTViNGFmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAlyZXR1cm4ob3Nfc2Vla19maWxlKGZkLCBvZmZzZXQpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY293X2ZpbGVfc2l6ZShjaGFyICpmaWxlLCBfX3U2NCAqc2l6ZV9vdXQpCitzdGF0aWMgaW5saW5lIGludCBjb3dfZmlsZV9zaXplKGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZV9vdXQpCiB7CiAJcmV0dXJuKG9zX2ZpbGVfc2l6ZShmaWxlLCBzaXplX291dCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYwppbmRleCA2MTk1MWI3Li4wZWM0MDUyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYwpAQCAtMTcsMzAgKzE3LDM0IEBACiAKICNkZWZpbmUgUEFUSF9MRU5fVjEgMjU2CiAKLXN0cnVjdCBjb3dfaGVhZGVyX3YxIHsKLQlpbnQgbWFnaWM7Ci0JaW50IHZlcnNpb247Ci0JY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjFdOwotCXRpbWVfdCBtdGltZTsKLQlfX3U2NCBzaXplOwotCWludCBzZWN0b3JzaXplOwotfTsKK3R5cGVkZWYgX191MzIgdGltZTMyX3Q7CiAKLSNkZWZpbmUgUEFUSF9MRU5fVjIgTUFYUEFUSExFTgorc3RydWN0IGNvd19oZWFkZXJfdjEgeworCV9fczMyIG1hZ2ljOworCV9fczMyIHZlcnNpb247CisJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjFdOworCXRpbWUzMl90IG10aW1lOworCV9fdTY0IHNpemU7CisJX19zMzIgc2VjdG9yc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIERlZmluZSBQQVRIX0xFTl9WMyBhcyB0aGUgdXN1YWwgdmFsdWUgb2YgTUFYUEFUSExFTiwganVzdCBoYXJkLWNvZGUgaXQgaW4KKyAqIGNhc2Ugb3RoZXIgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIE1BWFBBVEhMRU4uCisgKgorICogVGhlIHNhbWUgbXVzdCBob2xkIGZvciBWMiAtIHdlIHdhbnQgZmlsZSBmb3JtYXQgY29tcGF0aWJpbGl0eSwgbm90IGFueXRoaW5nCisgKiBlbHNlLgorICovCisjZGVmaW5lIFBBVEhfTEVOX1YzIDQwOTYKKyNkZWZpbmUgUEFUSF9MRU5fVjIgUEFUSF9MRU5fVjMKIAogc3RydWN0IGNvd19oZWFkZXJfdjIgewogCV9fdTMyIG1hZ2ljOwogCV9fdTMyIHZlcnNpb247CiAJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjJdOwotCXRpbWVfdCBtdGltZTsKKwl0aW1lMzJfdCBtdGltZTsKIAlfX3U2NCBzaXplOwotCWludCBzZWN0b3JzaXplOwotfTsKLQotLyogRGVmaW5lIFBBVEhfTEVOX1YzIGFzIHRoZSB1c3VhbCB2YWx1ZSBvZiBNQVhQQVRITEVOLCBqdXN0IGhhcmQtY29kZSBpdCBpbgotICogY2FzZSBvdGhlciBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBmb3IgTUFYUEFUSExFTgotICovCi0jZGVmaW5lIFBBVEhfTEVOX1YzIDQwOTYKKwlfX3MzMiBzZWN0b3JzaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogQ2hhbmdlcyBmcm9tIFYyIC0KICAqCVBBVEhfTEVOX1YzIGFzIGRlc2NyaWJlZCBhYm92ZQpAQCAtNjYsNiArNzAsMTUgQEAKICAqCUZpeGVkIChmaW5hbGx5ISkgdGhlIHJvdW5kaW5nIGJ1ZwogICovCiAKKy8qIFVudGlsIERlYzIwMDUsIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHdhcyBsZWZ0IG91dCBmcm9tIHRoZSBiZWxvdworICogZGVmaW5pdGlvbiwgbGVhZGluZyBvbiA2NC1iaXQgc3lzdGVtcyB0byA0IGJ5dGVzIG9mIHBhZGRpbmcgYWZ0ZXIgbXRpbWUsIHRvCisgKiBhbGlnbiBzaXplIHRvIDgtYnl0ZSBhbGlnbm1lbnQuICBUaGlzIHNoaWZ0ZWQgYWxsIGZpZWxkcyBhYm92ZSAobm8gcGFkZGluZworICogd2FzIHByZXNlbnQgb24gMzItYml0LCBubyBvdGhlciBwYWRkaW5nIHdhcyBhZGRlZCkuCisgKgorICogSG93ZXZlciwgdGhpcyBfY2FuIGJlIGRldGVjdGVkXzogaXQgbWVhbnMgdGhhdCBjb3dfZm9ybWF0IChhbHdheXMgMCB1bnRpbAorICogbm93KSBpcyBzaGlmdGVkIG9udG8gdGhlIGZpcnN0IDQgYnl0ZXMgb2YgYmFja2luZ19maWxlLCB3aGVyZSBpdCBpcyBvdGhlcndpc2UKKyAqIGltcG9zc2libGUgdG8gZmluZCA0IHplcm9zLiAtYmIgKi8KKwogc3RydWN0IGNvd19oZWFkZXJfdjMgewogCV9fdTMyIG1hZ2ljOwogCV9fdTMyIHZlcnNpb247CkBAIC03NSw2ICs4OCwxOCBAQAogCV9fdTMyIGFsaWdubWVudDsKIAlfX3UzMiBjb3dfZm9ybWF0OwogCWNoYXIgYmFja2luZ19maWxlW1BBVEhfTEVOX1YzXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFRoaXMgaXMgdGhlIGJyb2tlbiBsYXlvdXQgdXNlZCBieSBzb21lIDY0LWJpdCBiaW5hcmllcy4gKi8KK3N0cnVjdCBjb3dfaGVhZGVyX3YzX2Jyb2tlbiB7CisJX191MzIgbWFnaWM7CisJX191MzIgdmVyc2lvbjsKKwlfX3M2NCBtdGltZTsKKwlfX3U2NCBzaXplOworCV9fdTMyIHNlY3RvcnNpemU7CisJX191MzIgYWxpZ25tZW50OworCV9fdTMyIGNvd19mb3JtYXQ7CisJY2hhciBiYWNraW5nX2ZpbGVbUEFUSF9MRU5fVjNdOwogfTsKIAogLyogQ09XIGZvcm1hdCBkZWZpbml0aW9ucyAtIGZvciBub3csIHdlIGhhdmUgb25seSB0aGUgdXN1YWwgQ09XIGJpdG1hcCAqLwpAQCAtODQsNiArMTA5LDcgQEAKIAlzdHJ1Y3QgY293X2hlYWRlcl92MSB2MTsKIAlzdHJ1Y3QgY293X2hlYWRlcl92MiB2MjsKIAlzdHJ1Y3QgY293X2hlYWRlcl92MyB2MzsKKwlzdHJ1Y3QgY293X2hlYWRlcl92M19icm9rZW4gdjNfYjsKIH07CiAKICNkZWZpbmUgQ09XX01BR0lDIDB4NGY0ZjRmNGQgIC8qIE1PT08gKi8KQEAgLTE4NCw4ICsyMTAsOSBAQAogCiAJZXJyID0gLUVJTlZBTDsKIAlpZihzdHJsZW4oYmFja2luZ19maWxlKSA+IHNpemVvZihoZWFkZXItPmJhY2tpbmdfZmlsZSkgLSAxKXsKKwkJLyogQmVsb3csICV6ZCBpcyBmb3IgYSBzaXplX3QgdmFsdWUgKi8KIAkJY293X3ByaW50ZigiQmFja2luZyBmaWxlIG5hbWUgXCIlc1wiIGlzIHRvbyBsb25nIC0gbmFtZXMgYXJlICIKLQkJCSAgICJsaW1pdGVkIHRvICVkIGNoYXJhY3RlcnNcbiIsIGJhY2tpbmdfZmlsZSwKKwkJCSAgICJsaW1pdGVkIHRvICV6ZCBjaGFyYWN0ZXJzXG4iLCBiYWNraW5nX2ZpbGUsCiAJCQkgICBzaXplb2YoaGVhZGVyLT5iYWNraW5nX2ZpbGUpIC0gMSk7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQpAQCAtMzAwLDcgKzMyNyw4IEBACiAJCSphbGlnbl9vdXQgPSAqc2VjdG9yc2l6ZV9vdXQ7CiAJCWZpbGUgPSBoZWFkZXItPnYyLmJhY2tpbmdfZmlsZTsKIAl9Ci0JZWxzZSBpZih2ZXJzaW9uID09IDMpeworCS8qIFRoaXMgaXMgdmVyeSBzdWJ0bGUgLSBzZWUgYWJvdmUgYXQgdW5pb24gY293X2hlYWRlciBkZWZpbml0aW9uICovCisJZWxzZSBpZih2ZXJzaW9uID09IDMgJiYgKCooKGludCopaGVhZGVyLT52My5iYWNraW5nX2ZpbGUpICE9IDApKXsKIAkJaWYobiA8IHNpemVvZihoZWFkZXItPnYzKSl7CiAJCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBmYWlsZWQgdG8gcmVhZCBWMyAiCiAJCQkJICAgImhlYWRlclxuIik7CkBAIC0zMTAsOSArMzM4LDQzIEBACiAJCSpzaXplX291dCA9IG50b2hsbChoZWFkZXItPnYzLnNpemUpOwogCQkqc2VjdG9yc2l6ZV9vdXQgPSBudG9obChoZWFkZXItPnYzLnNlY3RvcnNpemUpOwogCQkqYWxpZ25fb3V0ID0gbnRvaGwoaGVhZGVyLT52My5hbGlnbm1lbnQpOworCQlpZiAoKmFsaWduX291dCA9PSAwKSB7CisJCQljb3dfcHJpbnRmKCJyZWFkX2Nvd19oZWFkZXIgLSBpbnZhbGlkIENPVyBoZWFkZXIsICIKKwkJCQkgICAiYWxpZ24gPT0gMFxuIik7CisJCX0KIAkJKmJpdG1hcF9vZmZzZXRfb3V0ID0gUk9VTkRfVVAoc2l6ZW9mKGhlYWRlci0+djMpLCAqYWxpZ25fb3V0KTsKIAkJZmlsZSA9IGhlYWRlci0+djMuYmFja2luZ19maWxlOwogCX0KKwllbHNlIGlmKHZlcnNpb24gPT0gMyl7CisJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGJyb2tlbiBWMyBmaWxlIHdpdGgiCisJCQkgICAiIDY0LWJpdCBsYXlvdXQgLSByZWNvdmVyaW5nIGNvbnRlbnQuXG4iKTsKKworCQlpZihuIDwgc2l6ZW9mKGhlYWRlci0+djNfYikpeworCQkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gZmFpbGVkIHRvIHJlYWQgVjMgIgorCQkJCSAgICJoZWFkZXJcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiB0aGlzIHdhcyB1c2VkIHVudGlsIERlYzIwMDUgLSA2NGJpdHMgYXJlIG5lZWRlZCB0byByZXByZXNlbnQKKwkJICogMjAzOCsuIEkuZS4gd2UgY2FuIHNhZmVseSBkbyB0aGlzIHRydW5jYXRpbmcgY2FzdC4KKwkJICoKKwkJICogQWRkaXRpb25hbGx5LCB3ZSBtdXN0IHVzZSBudG9obCgpIGluc3RlYWQgb2YgbnRvaGxsKCksIHNpbmNlCisJCSAqIHRoZSBwcm9ncmFtIHVzZWQgdG8gdXNlIHRoZSBmb3JtZXIgKHRlc3RlZCAtIEkgZ290IG10aW1lCisJCSAqIG1pc21hdGNoICIwIHZzIHdoYXRldmVyIikuCisJCSAqCisJCSAqIEV2ZXIgaGVhcmQgYWJvdXQgYnVnLXRvLWJ1Zy1jb21wYXRpYmlsaXR5ID8gOy0pICovCisJCSptdGltZV9vdXQgPSAodGltZTMyX3QpIG50b2hsKGhlYWRlci0+djNfYi5tdGltZSk7CisKKwkJKnNpemVfb3V0ID0gbnRvaGxsKGhlYWRlci0+djNfYi5zaXplKTsKKwkJKnNlY3RvcnNpemVfb3V0ID0gbnRvaGwoaGVhZGVyLT52M19iLnNlY3RvcnNpemUpOworCQkqYWxpZ25fb3V0ID0gbnRvaGwoaGVhZGVyLT52M19iLmFsaWdubWVudCk7CisJCWlmICgqYWxpZ25fb3V0ID09IDApIHsKKwkJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGludmFsaWQgQ09XIGhlYWRlciwgIgorCQkJCSAgICJhbGlnbiA9PSAwXG4iKTsKKwkJfQorCQkqYml0bWFwX29mZnNldF9vdXQgPSBST1VORF9VUChzaXplb2YoaGVhZGVyLT52M19iKSwgKmFsaWduX291dCk7CisJCWZpbGUgPSBoZWFkZXItPnYzX2IuYmFja2luZ19maWxlOworCX0KIAllbHNlIHsKIAkJY293X3ByaW50ZigicmVhZF9jb3dfaGVhZGVyIC0gaW52YWxpZCBDT1cgdmVyc2lvblxuIik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKaW5kZXggMjhlMzc2MC4uNmQ3MTczZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCkBAIC02Miw3ICs2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXdoaWxlKCFsaXN0X2VtcHR5KCZtY19yZXF1ZXN0cykpewotCQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlyZXEgPSBsaXN0X2VudHJ5KG1jX3JlcXVlc3RzLm5leHQsIHN0cnVjdCBtY29uc29sZV9lbnRyeSwKIAkJCQkgbGlzdCk7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtODcsNyArODcsNyBAQAogCQlpZihyZXEuY21kLT5jb250ZXh0ID09IE1DT05TT0xFX0lOVFIpCiAJCQkoKnJlcS5jbWQtPmhhbmRsZXIpKCZyZXEpOwogCQllbHNlIHsKLQkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfQVRPTUlDKTsKKwkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfTk9XQUlUKTsKIAkJCWlmKG5ldyA9PSBOVUxMKQogCQkJCW1jb25zb2xlX3JlcGx5KCZyZXEsICJPdXQgb2YgbWVtb3J5IiwgMSwgMCk7CiAJCQllbHNlIHsKQEAgLTQxNSw3ICs0MTUsNiBAQAogCiAJCQl1bnBsdWdnZWQgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJCQlpZih1bnBsdWdfaW5kZXggPT0gVU5QTFVHR0VEX1BFUl9QQUdFKXsKLQkJCQlJTklUX0xJU1RfSEVBRCgmdW5wbHVnZ2VkLT5saXN0KTsKIAkJCQlsaXN0X2FkZCgmdW5wbHVnZ2VkLT5saXN0LCAmdW5wbHVnZ2VkX3BhZ2VzKTsKIAkJCQl1bnBsdWdfaW5kZXggPSAwOwogCQkJfQpAQCAtNjE2LDcgKzYxNSw3IEBACiAJCXJldHVybjsKIAogCXdoaWxlKDEpewotCQluID0gbWluKChzaXplX3QpbGVuLCBBUlJBWV9TSVpFKGNvbnNvbGVfYnVmKSAtIGNvbnNvbGVfaW5kZXgpOworCQluID0gbWluKChzaXplX3QpIGxlbiwgQVJSQVlfU0laRShjb25zb2xlX2J1ZikgLSBjb25zb2xlX2luZGV4KTsKIAkJc3RybmNweSgmY29uc29sZV9idWZbY29uc29sZV9pbmRleF0sIHN0cmluZywgbik7CiAJCWNvbnNvbGVfaW5kZXggKz0gbjsKIAkJc3RyaW5nICs9IG47CkBAIC02NTUsNyArNjU0LDYgQEAKIAlzdHJ1Y3QgbWNvbnNvbGVfZW50cnkgZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlOSVRfTElTVF9IRUFEKCZlbnRyeS5saXN0KTsKIAllbnRyeS5yZXF1ZXN0ID0gKnJlcTsKIAlsaXN0X2FkZCgmZW50cnkubGlzdCwgJmNsaWVudHMpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zb2xlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKaW5kZXggMGUyZjA2MS4uMGE3Nzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKQEAgLTE4Miw3ICsxODIsOSBAQAogCXBlX2RhdGEuc3Rkb3V0ID0gZmRzWzFdOwogCXBpZCA9IHJ1bl9oZWxwZXIoY2hhbmdlX3ByZV9leGVjLCAmcGVfZGF0YSwgYXJndiwgTlVMTCk7CiAKLQlyZWFkX291dHB1dChmZHNbMF0sIG91dHB1dCwgb3V0cHV0X2xlbik7CisJaWYgKHBpZCA+IDApCS8qIEF2b2lkIGhhbmcgYXMgd2Ugd29uJ3QgZ2V0IGRhdGEgaW4gZmFpbHVyZSBjYXNlLiAqLworCQlyZWFkX291dHB1dChmZHNbMF0sIG91dHB1dCwgb3V0cHV0X2xlbik7CisKIAlvc19jbG9zZV9maWxlKGZkc1swXSk7CiAJb3NfY2xvc2VfZmlsZShmZHNbMV0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYwppbmRleCBiOTRjNjYxLi4zM2M1ZjZlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCX0KIAogCWlmKGVyciA9PSAwKSB7Ci0JCXByaW50aygic2xpcnBfY2xvc2U6IHByb2Nlc3MgJWQgaGFzIG5vdCBleGl0ZWRcbiIpOworCQlwcmludGsoInNsaXJwX2Nsb3NlOiBwcm9jZXNzICVkIGhhcyBub3QgZXhpdGVkXG4iLCBwcmktPnBpZCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaAppbmRleCA0MjU1NzEzLi4zMTA5ODBiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCkBAIC0xMTcsMjcgKzExNywxNCBAQAogZXh0ZXJuIHZvaWQgbWFjaGluZV9oYWx0KHZvaWQpOwogZXh0ZXJuIGludCBpc19zeXNjYWxsKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLWV4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3R0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7Ci0KLWV4dGVybiB2b2lkIGFyY2hfc3dpdGNoX3RvX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvKTsKLQogZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOwogZXh0ZXJuIGludCBjcHUodm9pZCk7CiAKK2V4dGVybiB2b2lkIHRpbWVfaW5pdF9rZXJuKHZvaWQpOworCiAvKiBBcmUgd2UgZGlzYWxsb3dlZCB0byBzbGVlcD8gVXNlZCB0byBjaG9vc2UgYmV0d2VlbiBHRlBfS0VSTkVMIGFuZCBHRlBfQVRPTUlDLiAqLwogZXh0ZXJuIGludCBfX2NhbnRfc2xlZXAodm9pZCk7CiBleHRlcm4gdm9pZCBzZWd2X2hhbmRsZXIoaW50IHNpZywgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgc2lnaW9faGFuZGxlcihpbnQgc2lnLCB1bmlvbiB1bWxfcHRfcmVncyAqcmVncyk7CiAKICNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2xvbmdqbXAuaCBiL2FyY2gvdW0vaW5jbHVkZS9sb25nam1wLmgKaW5kZXggMDE4YjM4MS4uOGU3MDUzMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2xvbmdqbXAuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbG9uZ2ptcC5oCkBAIC00LDExICs0LDExIEBACiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSAib3MuaCIKIAotI2RlZmluZSBVTUxfU0lHTE9OR0pNUChidWYsIHZhbCkgZG8geyBcCisjZGVmaW5lIFVNTF9MT05HSk1QKGJ1ZiwgdmFsKSBkbyB7IFwKIAlsb25nam1wKCpidWYsIHZhbCk7CVwKIH0gd2hpbGUoMCkKIAotI2RlZmluZSBVTUxfU0lHU0VUSk1QKGJ1ZiwgZW5hYmxlKSAoeyBcCisjZGVmaW5lIFVNTF9TRVRKTVAoYnVmLCBlbmFibGUpICh7IFwKIAlpbnQgbjsgXAogCWVuYWJsZSA9IGdldF9zaWduYWxzKCk7IFwKIAluID0gc2V0am1wKCpidWYpOyBcCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYva2VybmVsLW9mZnNldHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5oCmluZGV4IDgyZjk2YzUuLjJjMTNkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9rZXJuZWwtb2Zmc2V0cy5oCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8YXNtL21tYW4uaD4KIAogI2RlZmluZSBERUZJTkUoc3ltLCB2YWwpIFwKIAlhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKQEAgLTE2LDYgKzE3LDcgQEAKIHZvaWQgZm9vKHZvaWQpCiB7CiAJT0ZGU0VUKEhPU1RfVEFTS19ERUJVR1JFR1MsIHRhc2tfc3RydWN0LCB0aHJlYWQuYXJjaC5kZWJ1Z3JlZ3MpOworCURFRklORShLRVJORUxfTUFEVl9SRU1PVkUsIE1BRFZfUkVNT1ZFKTsKICNpZmRlZiBDT05GSUdfTU9ERV9UVAogCU9GRlNFVChIT1NUX1RBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaAppbmRleCA1Y2U5M2FiZC4uOTM5Y2M0NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAKICNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCiAJYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCkBAIC0xOCw2ICsxOSw3IEBACiAKIHZvaWQgZm9vKHZvaWQpCiB7CisJREVGSU5FKEtFUk5FTF9NQURWX1JFTU9WRSwgTUFEVl9SRU1PVkUpOwogI2lmZGVmIENPTkZJR19NT0RFX1RUCiAJT0ZGU0VUKEhPU1RfVEFTS19FWFRFUk5fUElELCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1vZGUudHQuZXh0ZXJuX3BpZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS90dC90dC5oIGIvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmgKaW5kZXggODA4NTIxOS4uYWNiODM1NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3R0L3R0LmgKQEAgLTE5LDcgKzE5LDggQEAKIGV4dGVybiBpbnQgZG9fcHJvY19vcCh2b2lkICp0LCBpbnQgcHJvY19pZCk7CiBleHRlcm4gaW50IHRyYWNlcihpbnQgKCppbml0X3Byb2MpKHZvaWQgKiksIHZvaWQgKnNwKTsKIGV4dGVybiB2b2lkIGF0dGFjaF9wcm9jZXNzKGludCBwaWQpOwotZXh0ZXJuIHZvaWQgdHJhY2VyX3BhbmljKGNoYXIgKmZvcm1hdCwgLi4uKTsKK2V4dGVybiB2b2lkIHRyYWNlcl9wYW5pYyhjaGFyICpmb3JtYXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gdm9pZCBzZXRfaW5pdF9waWQoaW50IHBpZCk7CiBleHRlcm4gaW50IHNldF91c2VyX21vZGUodm9pZCAqdGFzayk7CiBleHRlcm4gdm9pZCBzZXRfdHJhY2luZyh2b2lkICp0LCBpbnQgdHJhY2luZyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3VzZXIuaAppbmRleCA5MWIwYWM0Li4zOWY4Yzg4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvdXNlci5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS91c2VyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lmbmRlZiBfX1VTRVJfSF9fCiAjZGVmaW5lIF9fVVNFUl9IX18KIAotZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIHZvaWQgc2NoZWR1bGUodm9pZCk7CiBleHRlcm4gdm9pZCAqdW1fa21hbGxvYyhpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdW1fa21hbGxvY19hdG9taWMoaW50IHNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oIGIvYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oCmluZGV4IGZlMGMyOWIuLjgwMmQ3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS91c2VyX3V0aWwuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvdXNlcl91dGlsLmgKQEAgLTU1LDcgKzU1LDggQEAKIGV4dGVybiB2b2lkICp1bV9rbWFsbG9jKGludCBzaXplKTsKIGV4dGVybiBpbnQgc3dpdGNoZXJvbyhpbnQgZmQsIGludCBwcm90LCB2b2lkICpmcm9tLCB2b2lkICp0bywgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgZG9fZXhlYyhpbnQgb2xkX3BpZCwgaW50IG5ld19waWQpOwotZXh0ZXJuIHZvaWQgdHJhY2VyX3BhbmljKGNoYXIgKm1zZywgLi4uKTsKK2V4dGVybiB2b2lkIHRyYWNlcl9wYW5pYyhjaGFyICptc2csIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gaW50IGRldGFjaChpbnQgcGlkLCBpbnQgc2lnKTsKIGV4dGVybiBpbnQgYXR0YWNoKGludCBwaWQpOwogZXh0ZXJuIHZvaWQga2lsbF9jaGlsZF9kZWFkKGludCBwaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxLmMgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwppbmRleCBjMzllYTNhLi4yZmZkYTAxIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwpAQCAtODksMTYgKzg5LDE4IEBACiAJc3RydWN0IGlycV9mZCAqaXJxX2ZkOwogCWludCBuOwogCi0JaWYoc21wX3NpZ2lvX2hhbmRsZXIoKSkgcmV0dXJuOwotCXdoaWxlKDEpeworCWlmIChzbXBfc2lnaW9faGFuZGxlcigpKQorCQlyZXR1cm47CisKKwl3aGlsZSAoMSkgewogCQluID0gb3Nfd2FpdGluZ19mb3JfZXZlbnRzKGFjdGl2ZV9mZHMpOwogCQlpZiAobiA8PSAwKSB7CiAJCQlpZihuID09IC1FSU5UUikgY29udGludWU7CiAJCQllbHNlIGJyZWFrOwogCQl9CiAKLQkJZm9yKGlycV9mZCA9IGFjdGl2ZV9mZHM7IGlycV9mZCAhPSBOVUxMOyBpcnFfZmQgPSBpcnFfZmQtPm5leHQpewotCQkJaWYoaXJxX2ZkLT5jdXJyZW50X2V2ZW50cyAhPSAwKXsKKwkJZm9yIChpcnFfZmQgPSBhY3RpdmVfZmRzOyBpcnFfZmQgIT0gTlVMTDsgaXJxX2ZkID0gaXJxX2ZkLT5uZXh0KSB7CisJCQlpZiAoaXJxX2ZkLT5jdXJyZW50X2V2ZW50cyAhPSAwKSB7CiAJCQkJaXJxX2ZkLT5jdXJyZW50X2V2ZW50cyA9IDA7CiAJCQkJZG9fSVJRKGlycV9mZC0+aXJxLCByZWdzKTsKIAkJCX0KQEAgLTExMCwxOSArMTEyLDE3IEBACiAKIHN0YXRpYyB2b2lkIG1heWJlX3NpZ2lvX2Jyb2tlbihpbnQgZmQsIGludCB0eXBlKQogewotCWlmKG9zX2lzYXR0eShmZCkpewotCQlpZigodHlwZSA9PSBJUlFfV1JJVEUpICYmICFwdHlfb3V0cHV0X3NpZ2lvKXsKKwlpZiAob3NfaXNhdHR5KGZkKSkgeworCQlpZiAoKHR5cGUgPT0gSVJRX1dSSVRFKSAmJiAhcHR5X291dHB1dF9zaWdpbykgewogCQkJd3JpdGVfc2lnaW9fd29ya2Fyb3VuZCgpOwogCQkJYWRkX3NpZ2lvX2ZkKGZkLCAwKTsKLQkJfQotCQllbHNlIGlmKCh0eXBlID09IElSUV9SRUFEKSAmJiAhcHR5X2Nsb3NlX3NpZ2lvKXsKKwkJfSBlbHNlIGlmICgodHlwZSA9PSBJUlFfUkVBRCkgJiYgIXB0eV9jbG9zZV9zaWdpbykgewogCQkJd3JpdGVfc2lnaW9fd29ya2Fyb3VuZCgpOwogCQkJYWRkX3NpZ2lvX2ZkKGZkLCAxKTsKIAkJfQogCX0KIH0KIAotCiBpbnQgYWN0aXZhdGVfZmQoaW50IGlycSwgaW50IGZkLCBpbnQgdHlwZSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBwb2xsZmQgKnRtcF9wZmQ7CkBAIC0xMzIsMTYgKzEzMiwxOCBAQAogCiAJcGlkID0gb3NfZ2V0cGlkKCk7CiAJZXJyID0gb3Nfc2V0X2ZkX2FzeW5jKGZkLCBwaWQpOwotCWlmKGVyciA8IDApCisJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJbmV3X2ZkID0gdW1fa21hbGxvYyhzaXplb2YoKm5ld19mZCkpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYobmV3X2ZkID09IE5VTEwpCisJaWYgKG5ld19mZCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCWlmKHR5cGUgPT0gSVJRX1JFQUQpIGV2ZW50cyA9IFVNX1BPTExJTiB8IFVNX1BPTExQUkk7Ci0JZWxzZSBldmVudHMgPSBVTV9QT0xMT1VUOworCWlmICh0eXBlID09IElSUV9SRUFEKQorCQlldmVudHMgPSBVTV9QT0xMSU4gfCBVTV9QT0xMUFJJOworCWVsc2UKKwkJZXZlbnRzID0gVU1fUE9MTE9VVDsKIAkqbmV3X2ZkID0gKChzdHJ1Y3QgaXJxX2ZkKSB7IC5uZXh0ICAJCT0gTlVMTCwKIAkJCQkgICAgIC5pZCAJCT0gZGV2X2lkLAogCQkJCSAgICAgLmZkIAkJPSBmZCwKQEAgLTE2NSw4ICsxNjcsOCBAQAogCSAqIGEgc2VtYXBob3JlLgogCSAqLwogCWZsYWdzID0gaXJxX2xvY2soKTsKLQlmb3IoaXJxX2ZkID0gYWN0aXZlX2ZkczsgaXJxX2ZkICE9IE5VTEw7IGlycV9mZCA9IGlycV9mZC0+bmV4dCl7Ci0JCWlmKChpcnFfZmQtPmZkID09IGZkKSAmJiAoaXJxX2ZkLT50eXBlID09IHR5cGUpKXsKKwlmb3IgKGlycV9mZCA9IGFjdGl2ZV9mZHM7IGlycV9mZCAhPSBOVUxMOyBpcnFfZmQgPSBpcnFfZmQtPm5leHQpIHsKKwkJaWYgKChpcnFfZmQtPmZkID09IGZkKSAmJiAoaXJxX2ZkLT50eXBlID09IHR5cGUpKSB7CiAJCQlwcmludGsoIlJlZ2lzdGVyaW5nIGZkICVkIHR3aWNlXG4iLCBmZCk7CiAJCQlwcmludGsoIklycXMgOiAlZCwgJWRcbiIsIGlycV9mZC0+aXJxLCBpcnEpOwogCQkJcHJpbnRrKCJJZHMgOiAweCVwLCAweCVwXG4iLCBpcnFfZmQtPmlkLCBkZXZfaWQpOwpAQCAtMTc1LDEzICsxNzcsMTMgQEAKIAl9CiAKIAkvKi0tLS0tLS0tLS0tLS0qLwotCWlmKHR5cGUgPT0gSVJRX1dSSVRFKQorCWlmICh0eXBlID09IElSUV9XUklURSkKIAkJZmQgPSAtMTsKIAogCXRtcF9wZmQgPSBOVUxMOwogCW4gPSAwOwogCi0Jd2hpbGUoMSl7CisJd2hpbGUgKDEpIHsKIAkJbiA9IG9zX2NyZWF0ZV9wb2xsZmQoZmQsIGV2ZW50cywgdG1wX3BmZCwgbik7CiAJCWlmIChuID09IDApCiAJCQlicmVhazsKQEAgLTE5OCwxMCArMjAwLDggQEAKIAkJICogdGhlbiB3ZSBmcmVlIHRoZSBidWZmZXIgdG1wX2ZkcyBhbmQgdHJ5IGFnYWluLgogCQkgKi8KIAkJaXJxX3VubG9jayhmbGFncyk7Ci0JCWlmICh0bXBfcGZkICE9IE5VTEwpIHsKLQkJCWtmcmVlKHRtcF9wZmQpOwotCQkJdG1wX3BmZCA9IE5VTEw7Ci0JCX0KKwkJa2ZyZWUodG1wX3BmZCk7CisJCXRtcF9wZmQgPSBOVUxMOwogCiAJCXRtcF9wZmQgPSB1bV9rbWFsbG9jKG4pOwogCQlpZiAodG1wX3BmZCA9PSBOVUxMKQpAQCAtMjQ5LDcgKzI0OSw3IEBACiB7CiAJc3RydWN0IGlycV9hbmRfZGV2ICpkYXRhID0gZDsKIAotCXJldHVybigoaXJxLT5pcnEgPT0gZGF0YS0+aXJxKSAmJiAoaXJxLT5pZCA9PSBkYXRhLT5kZXYpKTsKKwlyZXR1cm4gKChpcnEtPmlycSA9PSBkYXRhLT5pcnEpICYmIChpcnEtPmlkID09IGRhdGEtPmRldikpOwogfQogCiB2b2lkIGZyZWVfaXJxX2J5X2lycV9hbmRfZGV2KHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldikKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiBzdGF0aWMgaW50IHNhbWVfZmQoc3RydWN0IGlycV9mZCAqaXJxLCB2b2lkICpmZCkKIHsKLQlyZXR1cm4oaXJxLT5mZCA9PSAqKChpbnQgKikgZmQpKTsKKwlyZXR1cm4gKGlycS0+ZmQgPT0gKigoaW50ICopZmQpKTsKIH0KIAogdm9pZCBmcmVlX2lycV9ieV9mZChpbnQgZmQpCkBAIC0yNzYsMTYgKzI3NiwxNyBAQAogCWludCBpID0gMDsKIAlpbnQgZmRpOwogCi0JZm9yKGlycT1hY3RpdmVfZmRzOyBpcnEgIT0gTlVMTDsgaXJxID0gaXJxLT5uZXh0KXsKLQkJaWYoKGlycS0+ZmQgPT0gZmQpICYmIChpcnEtPmlycSA9PSBpcnFudW0pKSBicmVhazsKKwlmb3IgKGlycSA9IGFjdGl2ZV9mZHM7IGlycSAhPSBOVUxMOyBpcnEgPSBpcnEtPm5leHQpIHsKKwkJaWYgKChpcnEtPmZkID09IGZkKSAmJiAoaXJxLT5pcnEgPT0gaXJxbnVtKSkKKwkJCWJyZWFrOwogCQlpKys7CiAJfQotCWlmKGlycSA9PSBOVUxMKXsKKwlpZiAoaXJxID09IE5VTEwpIHsKIAkJcHJpbnRrKCJmaW5kX2lycV9ieV9mZCBkb2Vzbid0IGhhdmUgZGVzY3JpcHRvciAlZFxuIiwgZmQpOwogCQlnb3RvIG91dDsKIAl9CiAJZmRpID0gb3NfZ2V0X3BvbGxmZChpKTsKLQlpZigoZmRpICE9IC0xKSAmJiAoZmRpICE9IGZkKSl7CisJaWYgKChmZGkgIT0gLTEpICYmIChmZGkgIT0gZmQpKSB7CiAJCXByaW50aygiZmluZF9pcnFfYnlfZmQgLSBtaXNtYXRjaCBiZXR3ZWVuIGFjdGl2ZV9mZHMgYW5kICIKIAkJICAgICAgICJwb2xsZmRzLCBmZCAlZCB2cyAlZCwgbmVlZCAlZFxuIiwgaXJxLT5mZCwKIAkJICAgICAgIGZkaSwgZmQpOwpAQCAtMjk0LDcgKzI5NSw3IEBACiAJfQogCSppbmRleF9vdXQgPSBpOwogIG91dDoKLQlyZXR1cm4oaXJxKTsKKwlyZXR1cm4gaXJxOwogfQogCiB2b2lkIHJlYWN0aXZhdGVfZmQoaW50IGZkLCBpbnQgaXJxbnVtKQpAQCAtMzA1LDcgKzMwNiw3IEBACiAKIAlmbGFncyA9IGlycV9sb2NrKCk7CiAJaXJxID0gZmluZF9pcnFfYnlfZmQoZmQsIGlycW51bSwgJmkpOwotCWlmKGlycSA9PSBOVUxMKXsKKwlpZiAoaXJxID09IE5VTEwpIHsKIAkJaXJxX3VubG9jayhmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC0zMjYsNyArMzI3LDcgQEAKIAogCWZsYWdzID0gaXJxX2xvY2soKTsKIAlpcnEgPSBmaW5kX2lycV9ieV9mZChmZCwgaXJxbnVtLCAmaSk7Ci0JaWYoaXJxID09IE5VTEwpCisJaWYgKGlycSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAlvc19zZXRfcG9sbGZkKGksIC0xKTsKICBvdXQ6CkBAIC0zMzgsMTUgKzMzOSwxNSBAQAogCXN0cnVjdCBpcnFfZmQgKmlycTsKIAlpbnQgZXJyOwogCi0JZm9yKGlycT1hY3RpdmVfZmRzO2lycSAhPSBOVUxMO2lycSA9IGlycS0+bmV4dCl7CisJZm9yIChpcnEgPSBhY3RpdmVfZmRzOyBpcnEgIT0gTlVMTDsgaXJxID0gaXJxLT5uZXh0KSB7CiAJCWVyciA9IG9zX2NsZWFyX2ZkX2FzeW5jKGlycS0+ZmQpOwotCQlpZihlcnIpCi0JCQlyZXR1cm4oZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAJfQogCS8qIElmIHRoZXJlIGlzIGEgc2lnbmFsIGFscmVhZHkgcXVldWVkLCBhZnRlciB1bmJsb2NraW5nIGlnbm9yZSBpdCAqLwogCW9zX3NldF9pb2lnbm9yZSgpOwogCi0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiB2b2lkIGZvcndhcmRfaW50ZXJydXB0cyhpbnQgcGlkKQpAQCAtMzU2LDkgKzM1Nyw5IEBACiAJaW50IGVycjsKIAogCWZsYWdzID0gaXJxX2xvY2soKTsKLQlmb3IoaXJxPWFjdGl2ZV9mZHM7aXJxICE9IE5VTEw7aXJxID0gaXJxLT5uZXh0KXsKKwlmb3IgKGlycSA9IGFjdGl2ZV9mZHM7IGlycSAhPSBOVUxMOyBpcnEgPSBpcnEtPm5leHQpIHsKIAkJZXJyID0gb3Nfc2V0X293bmVyKGlycS0+ZmQsIHBpZCk7Ci0JCWlmKGVyciA8IDApeworCQlpZiAoZXJyIDwgMCkgewogCQkJLyogWFhYIEp1c3QgcmVtb3ZlIHRoZSBpcnEgcmF0aGVyIHRoYW4KIAkJCSAqIHByaW50IG91dCBhbiBpbmZpbml0ZSBzdHJlYW0gb2YgdGhlc2UKIAkJCSAqLwpAQCAtMzc5LDcgKzM4MCw3IEBACiB1bnNpZ25lZCBpbnQgZG9fSVJRKGludCBpcnEsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzKQogewogICAgICAgIGlycV9lbnRlcigpOwotICAgICAgIF9fZG9fSVJRKGlycSwgKHN0cnVjdCBwdF9yZWdzICopIHJlZ3MpOworICAgICAgIF9fZG9fSVJRKGlycSwgKHN0cnVjdCBwdF9yZWdzICopcmVncyk7CiAgICAgICAgaXJxX2V4aXQoKTsKICAgICAgICByZXR1cm4gMTsKIH0KQEAgLTM5MiwxMiArMzkzLDEyIEBACiAJaW50IGVycjsKIAogCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgaXJxZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7Ci0JaWYoZXJyKQotCQlyZXR1cm4oZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JaWYoZmQgIT0gLTEpCisJaWYgKGZkICE9IC0xKQogCQllcnIgPSBhY3RpdmF0ZV9mZChpcnEsIGZkLCB0eXBlLCBkZXZfaWQpOwotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKHVtX3JlcXVlc3RfaXJxKTsKIEVYUE9SVF9TWU1CT0wocmVhY3RpdmF0ZV9mZCk7CkBAIC00MDksNyArNDEwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9zcGlubG9jaywgZmxhZ3MpOwotCXJldHVybihmbGFncyk7CisJcmV0dXJuIGZsYWdzOwogfQogCiB2b2lkIGlycV91bmxvY2sodW5zaWduZWQgbG9uZyBmbGFncykKQEAgLTQ1Miw3ICs0NTMsNyBAQAogCWlycV9kZXNjW1RJTUVSX0lSUV0uZGVwdGggPSAxOwogCWlycV9kZXNjW1RJTUVSX0lSUV0uaGFuZGxlciA9ICZTSUdWVEFMUk1faXJxX3R5cGU7CiAJZW5hYmxlX2lycShUSU1FUl9JUlEpOwotCWZvcihpPTE7aTxOUl9JUlFTO2krKyl7CisJZm9yIChpID0gMTsgaSA8IE5SX0lSUVM7IGkrKykgewogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKQEAgLTQ2Nyw3ICs0NjgsNyBAQAogCWludCBmZHNbMl0sIGVycjsKIAogCWVyciA9IG9zX3BpcGUoZmRzLCAxLCAxKTsKLQlpZihlcnIpeworCWlmIChlcnIpIHsKIAkJcHJpbnRrKCJpbml0X2Fpb19pcnEgLSBvc19waXBlIGZhaWxlZCwgZXJyID0gJWRcbiIsIC1lcnIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NzUsNyArNDc2LDcgQEAKIAllcnIgPSB1bV9yZXF1ZXN0X2lycShpcnEsIGZkc1swXSwgSVJRX1JFQUQsIGhhbmRsZXIsCiAJCQkgICAgIFNBX0lOVEVSUlVQVCB8IFNBX1NBTVBMRV9SQU5ET00sIG5hbWUsCiAJCQkgICAgICh2b2lkICopIChsb25nKSBmZHNbMF0pOwotCWlmKGVycil7CisJaWYgKGVycikgewogCQlwcmludGsoImluaXRfYWlvX2lycSAtIDogdW1fcmVxdWVzdF9pcnEgZmFpbGVkLCBlcnIgPSAlZFxuIiwKIAkJICAgICAgIGVycik7CiAJCWdvdG8gb3V0X2Nsb3NlOwpAQCAtNDg4LDUgKzQ4OSw1IEBACiAJb3NfY2xvc2VfZmlsZShmZHNbMF0pOwogCW9zX2Nsb3NlX2ZpbGUoZmRzWzFdKTsKICBvdXQ6Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2tzeW1zLmMgYi9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCmluZGV4IDc3MTNlN2EuLjQzMmNmMGI5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKQEAgLTM5LDcgKzM5LDYgQEAKIEVYUE9SVF9TWU1CT0wobW9kZV90dCk7CiBFWFBPUlRfU1lNQk9MKGhhbmRsZV9wYWdlX2ZhdWx0KTsKIEVYUE9SVF9TWU1CT0woZmluZF9pb21lbSk7Ci1FWFBPUlRfU1lNQk9MKGVuZF9pb21lbSk7CiAKICNpZmRlZiBDT05GSUdfTU9ERV9UVAogRVhQT1JUX1NZTUJPTChzdHJuY3B5X2Zyb21fdXNlcl90dCk7CkBAIC04OSwxMiArODgsMTAgQEAKIEVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKIAotLyogVGhpcyBpcyBoZXJlIGJlY2F1c2UgVU1MIGV4cGFuZHMgb3BlbiB0byBzeXNfb3Blbiwgbm90IHRvIGEgc3lzdGVtCisvKiBUaGlzIGlzIGhlcmUgYmVjYXVzZSBVTUwgZXhwYW5kcyBsc2VlayB0byBzeXNfbHNlZWssIG5vdCB0byBhIHN5c3RlbQogICogY2FsbCBpbnN0cnVjdGlvbi4KICAqLwotRVhQT1JUX1NZTUJPTChzeXNfb3Blbik7CiBFWFBPUlRfU1lNQk9MKHN5c19sc2Vlayk7Ci1FWFBPUlRfU1lNQk9MKHN5c19yZWFkKTsKIEVYUE9SVF9TWU1CT0woc3lzX3dhaXQ0KTsKIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYyBiL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYwppbmRleCAwNTAwODAwLi5mYzBmMGIwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCkBAIC00MDcsNiArNDA3LDggQEAKIAkJCSpsZW5fb3V0ID0gcmVnaW9uLT5zaXplOwogCQkJcmV0dXJuKHJlZ2lvbi0+dmlydCk7CiAJCX0KKworCQlyZWdpb24gPSByZWdpb24tPm5leHQ7CiAJfQogCiAJcmV0dXJuKDApOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwppbmRleCA2MGQyZWRhLi45YTc3ZmIzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjc1LDE1ICsyNzUsMTMgQEAKIAogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkgewogCQlpZiAoIWVudHJ5ZXhpdCkKLQkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9TVF9BVURJVF9BUkNILAorCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShIT1NUX0FVRElUX0FSQ0gsCiAJCQkJCSAgICBVUFRfU1lTQ0FMTF9OUihyZWdzKSwKIAkJCQkJICAgIFVQVF9TWVNDQUxMX0FSRzEocmVncyksCiAJCQkJCSAgICBVUFRfU1lTQ0FMTF9BUkcyKHJlZ3MpLAogCQkJCQkgICAgVVBUX1NZU0NBTExfQVJHMyhyZWdzKSwKIAkJCQkJICAgIFVQVF9TWVNDQUxMX0FSRzQocmVncykpOwotCQllbHNlIGF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRElUU0NfUkVTVUxUKFVQVF9TWVNDQUxMX1JFVChyZWdzKSksCisJCWVsc2UgYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKFVQVF9TWVNDQUxMX1JFVChyZWdzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBUX1NZU0NBTExfUkVUKHJlZ3MpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9za2FzL01ha2VmaWxlCmluZGV4IDU3MTgxYTkuLmVhM2E4ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZQpAQCAtNiw5ICs2LDExIEBACiBvYmoteSA6PSBjbG9uZS5vIGV4ZWNfa2Vybi5vIG1lbS5vIG1tdS5vIHByb2Nlc3Nfa2Vybi5vIFwKIAlzeXNjYWxsLm8gdGxiLm8gdWFjY2Vzcy5vCiAKLVVTRVJfT0JKUyA6PSBjbG9uZS5vCisjIGNsb25lLm8gaXMgaW4gdGhlIHN0dWIsIHNvIGl0IGNhbid0IGJlIGJ1aWx0IHdpdGggcHJvZmlsaW5nCisjIEdDQyBoYXJkZW5lZCBhbHNvIGF1dG8tZW5hYmxlcyAtZnBpYywgYnV0IHdlIG5lZWQgJWVieCBzbyBpdCBjYW4ndCB3b3JrIC0+CisjIGRpc2FibGUgaXQKKworQ0ZMQUdTX2Nsb25lLm8gOj0gJChDRkxBR1NfTk9fSEFSREVOSU5HKQorVU5QUk9GSUxFX09CSlMgOj0gY2xvbmUubwogCiBpbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwotCi0jIGNsb25lLm8gaXMgaW4gdGhlIHN0dWIsIHNvIGl0IGNhbid0IGJlIGJ1aWx0IHdpdGggcHJvZmlsaW5nCi0kKG9iaikvY2xvbmUubyA6IGNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChjYWxsIHVucHJvZmlsZSwkKFVTRVJfQ0ZMQUdTKSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWVfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKaW5kZXggM2M3NjI2Yy4uODZmNTFkMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKQEAgLTg0LDYgKzg0LDE2IEBACiAJfQogfQogCisKK3ZvaWQgdGltZV9pbml0X2tlcm4odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3M7CisKKwluc2VjcyA9IG9zX25zZWNzKCk7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCAtbnNlY3MgLyBCSUxMSU9OLAorCQkJCS1uc2VjcyAlIEJJTExJT04pOworfQorCiB2b2lkIGRvX2Jvb3RfdGltZXJfaGFuZGxlcihzdHJ1Y3Qgc2lnY29udGV4dCAqIHNjKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CkBAIC0yMDksNCArMjE5LDQgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLV9faW5pdGNhbGwodGltZXJfaW5pdCk7CithcmNoX2luaXRjYWxsKHRpbWVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMKaW5kZXggOTAxYjg1ZTguLjhmNDk1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX3VzZXIuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkJaW50IGZkKQogewogCXN0cnVjdCBhZGRyX2NoYW5nZSBjaGFuZ2U7Ci0Jdm9pZCAqb3V0cHV0OworCWNoYXIgKm91dHB1dDsKIAlpbnQgbjsKIAogCWNoYW5nZS53aGF0ID0gb3A7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYyBiL2FyY2gvdW0vb3MtTGludXgvZmlsZS5jCmluZGV4IDNiZDEwZGUuLjA5MjUxMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZmlsZS5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZmlsZS5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAogCWZsYWdzID0gZmNudGwobWFzdGVyLCBGX0dFVEZMKTsKIAlpZihmbGFncyA8IDApCi0JCXJldHVybiBlcnJubzsKKwkJcmV0dXJuIC1lcnJubzsKIAogCWlmKChmY250bChtYXN0ZXIsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyB8IE9fQVNZTkMpIDwgMCkgfHwKIAkgICAoZmNudGwobWFzdGVyLCBGX1NFVE9XTiwgb3NfZ2V0cGlkKCkpIDwgMCkpCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwppbmRleCA2NDkwYTRmLi42OTg3ZDFkIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkJKCpkYXRhLT5wcmVfZXhlYykoZGF0YS0+cHJlX2RhdGEpOwogCWV4ZWN2cChhcmd2WzBdLCBhcmd2KTsKIAllcnJ2YWwgPSBlcnJubzsKLQlwcmludGsoImV4ZWN2cCBvZiAnJXMnIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIGFyZ3ZbMF0sIGVycm5vKTsKKwlwcmludGsoImhlbHBlcl9jaGlsZCAtIGV4ZWN2ZSBvZiAnJXMnIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIGFyZ3ZbMF0sIGVycm5vKTsKIAlvc193cml0ZV9maWxlKGRhdGEtPmZkLCAmZXJydmFsLCBzaXplb2YoZXJydmFsKSk7CiAJa2lsbChvc19nZXRwaWQoKSwgU0lHS0lMTCk7CiAJcmV0dXJuKDApOwpAQCAtOTIsMTUgKzkyLDE1IEBACiAJY2xvc2UoZmRzWzFdKTsKIAlmZHNbMV0gPSAtMTsKIAotCS8qUmVhZCB0aGUgZXJybm8gdmFsdWUgZnJvbSB0aGUgY2hpbGQuKi8KKwkvKiBSZWFkIHRoZSBlcnJubyB2YWx1ZSBmcm9tIHRoZSBjaGlsZCwgaWYgdGhlIGV4ZWMgZmFpbGVkLCBvciBnZXQgMCBpZgorCSAqIHRoZSBleGVjIHN1Y2NlZWRlZCBiZWNhdXNlIHRoZSBwaXBlIGZkIHdhcyBzZXQgYXMgY2xvc2Utb24tZXhlYy4gKi8KIAluID0gb3NfcmVhZF9maWxlKGZkc1swXSwgJnJldCwgc2l6ZW9mKHJldCkpOwotCWlmKG4gPCAwKXsKKwlpZiAobiA8IDApIHsKIAkJcHJpbnRrKCJydW5faGVscGVyIDogcmVhZCBvbiBwaXBlIGZhaWxlZCwgcmV0ID0gJWRcbiIsIC1uKTsKIAkJcmV0ID0gbjsKIAkJa2lsbChwaWQsIFNJR0tJTEwpOwogCQlDQVRDSF9FSU5UUih3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOwotCX0KLQllbHNlIGlmKG4gIT0gMCl7CisJfSBlbHNlIGlmKG4gIT0gMCl7CiAJCUNBVENIX0VJTlRSKG4gPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOwogCQlyZXQgPSAtZXJybm87CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvaXJxLmMgYi9hcmNoL3VtL29zLUxpbnV4L2lycS5jCmluZGV4IGU1OTliZTQuLjM3ODhkNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvaXJxLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9pcnEuYwpAQCAtMjksMjEgKzI5LDIxIEBACiAJaW50IGksIG4sIGVycjsKIAogCW4gPSBwb2xsKHBvbGxmZHMsIHBvbGxmZHNfbnVtLCAwKTsKLQlpZihuIDwgMCl7CisJaWYgKG4gPCAwKSB7CiAJCWVyciA9IC1lcnJubzsKLQkJaWYoZXJybm8gIT0gRUlOVFIpCisJCWlmIChlcnJubyAhPSBFSU5UUikKIAkJCXByaW50aygic2lnaW9faGFuZGxlcjogb3Nfd2FpdGluZ19mb3JfZXZlbnRzOiIKIAkJCSAgICAgICAiIHBvbGwgcmV0dXJuZWQgJWQsIGVycm5vID0gJWRcbiIsIG4sIGVycm5vKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZihuID09IDApCisJaWYgKG4gPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlpcnFfZmQgPSBhY3RpdmVfZmRzOwogCi0JZm9yKGkgPSAwOyBpIDwgcG9sbGZkc19udW07IGkrKyl7Ci0JCWlmKHBvbGxmZHNbaV0ucmV2ZW50cyAhPSAwKXsKKwlmb3IgKGkgPSAwOyBpIDwgcG9sbGZkc19udW07IGkrKykgeworCQlpZiAocG9sbGZkc1tpXS5yZXZlbnRzICE9IDApIHsKIAkJCWlycV9mZC0+Y3VycmVudF9ldmVudHMgPSBwb2xsZmRzW2ldLnJldmVudHM7CiAJCQlwb2xsZmRzW2ldLmZkID0gLTE7CiAJCX0KQEAgLTU0LDcgKzU0LDcgQEAKIAogaW50IG9zX2lzYXR0eShpbnQgZmQpCiB7Ci0JcmV0dXJuKGlzYXR0eShmZCkpOworCXJldHVybiBpc2F0dHkoZmQpOwogfQogCiBpbnQgb3NfY3JlYXRlX3BvbGxmZChpbnQgZmQsIGludCBldmVudHMsIHZvaWQgKnRtcF9wZmQsIGludCBzaXplX3RtcGZkcykKQEAgLTY1LDcgKzY1LDcgQEAKIAkJCXJldHVybigocG9sbGZkc19zaXplICsgMSkgKiBzaXplb2YocG9sbGZkc1swXSkpOwogCQl9CiAKLQkJaWYocG9sbGZkcyAhPSBOVUxMKXsKKwkJaWYgKHBvbGxmZHMgIT0gTlVMTCkgewogCQkJbWVtY3B5KHRtcF9wZmQsIHBvbGxmZHMsCiAJCQkgICAgICAgc2l6ZW9mKHBvbGxmZHNbMF0pICogcG9sbGZkc19zaXplKTsKIAkJCS8qIHJlbW92ZSBvbGQgcG9sbGZkcyAqLwpAQCAtNzMsMTggKzczLDE1IEBACiAJCX0KIAkJcG9sbGZkcyA9IHRtcF9wZmQ7CiAJCXBvbGxmZHNfc2l6ZSsrOwotCX0gZWxzZSB7Ci0JCS8qIHJlbW92ZSBub3QgdXNlZCB0bXBfcGZkICovCi0JCWlmICh0bXBfcGZkICE9IE5VTEwpCi0JCQlrZnJlZSh0bXBfcGZkKTsKLQl9CisJfSBlbHNlCisJCWtmcmVlKHRtcF9wZmQpOwkvKiByZW1vdmUgbm90IHVzZWQgdG1wX3BmZCAqLwogCi0JcG9sbGZkc1twb2xsZmRzX251bV0gPSAoKHN0cnVjdCBwb2xsZmQpIHsgLmZkIAk9IGZkLAotCQkJCQkJICAuZXZlbnRzIAk9IGV2ZW50cywKLQkJCQkJCSAgLnJldmVudHMgCT0gMCB9KTsKKwlwb2xsZmRzW3BvbGxmZHNfbnVtXSA9ICgoc3RydWN0IHBvbGxmZCkgeyAuZmQJCT0gZmQsCisJCQkJCQkgIC5ldmVudHMJPSBldmVudHMsCisJCQkJCQkgIC5yZXZlbnRzCT0gMCB9KTsKIAlwb2xsZmRzX251bSsrOwogCi0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiB2b2lkIG9zX2ZyZWVfaXJxX2J5X2NiKGludCAoKnRlc3QpKHN0cnVjdCBpcnFfZmQgKiwgdm9pZCAqKSwgdm9pZCAqYXJnLApAQCAtOTQsMTEgKzkxLDExIEBACiAJaW50IGkgPSAwOwogCiAJcHJldiA9ICZhY3RpdmVfZmRzOwotCXdoaWxlKCpwcmV2ICE9IE5VTEwpewotCQlpZigoKnRlc3QpKCpwcmV2LCBhcmcpKXsKKwl3aGlsZSAoKnByZXYgIT0gTlVMTCkgeworCQlpZiAoKCp0ZXN0KSgqcHJldiwgYXJnKSkgewogCQkJc3RydWN0IGlycV9mZCAqb2xkX2ZkID0gKnByZXY7Ci0JCQlpZigocG9sbGZkc1tpXS5mZCAhPSAtMSkgJiYKLQkJCSAgIChwb2xsZmRzW2ldLmZkICE9ICgqcHJldiktPmZkKSl7CisJCQlpZiAoKHBvbGxmZHNbaV0uZmQgIT0gLTEpICYmCisJCQkgICAgKHBvbGxmZHNbaV0uZmQgIT0gKCpwcmV2KS0+ZmQpKSB7CiAJCQkJcHJpbnRrKCJvc19mcmVlX2lycV9ieV9jYiAtIG1pc21hdGNoIGJldHdlZW4gIgogCQkJCSAgICAgICAiYWN0aXZlX2ZkcyBhbmQgcG9sbGZkcywgZmQgJWQgdnMgJWRcbiIsCiAJCQkJICAgICAgICgqcHJldiktPmZkLCBwb2xsZmRzW2ldLmZkKTsKQEAgLTExMCw3ICsxMDcsNiBAQAogCQkJLyogVGhpcyBtb3ZlcyB0aGUgKndob2xlKiBhcnJheSBhZnRlciBwb2xsZmRzW2ldCiAJCQkgKiAodGhvdWdoIGl0IGRvZXNuJ3Qgc3BvdCBhcyBzdWNoKSEKIAkJCSAqLwotCiAJCQltZW1tb3ZlKCZwb2xsZmRzW2ldLCAmcG9sbGZkc1tpICsgMV0sCiAJCQkgICAgICAgKHBvbGxmZHNfbnVtIC0gaSkgKiBzaXplb2YocG9sbGZkc1swXSkpOwogCQkJaWYoKmxhc3RfaXJxX3B0cjIgPT0gJm9sZF9mZC0+bmV4dCkKQEAgLTEyOSwxMCArMTI1LDkgQEAKIAlyZXR1cm47CiB9CiAKLQogaW50IG9zX2dldF9wb2xsZmQoaW50IGkpCiB7Ci0JcmV0dXJuKHBvbGxmZHNbaV0uZmQpOworCXJldHVybiBwb2xsZmRzW2ldLmZkOwogfQogCiB2b2lkIG9zX3NldF9wb2xsZmQoaW50IGksIGludCBmZCkKQEAgLTE1MSw4ICsxNDYsMTAgQEAKIAlpbnQgZmxhZ3M7CiAKIAlmbGFncyA9IG9uX3NpZ3N0YWNrID8gU0FfT05TVEFDSyA6IDA7Ci0JaWYodGltZXJfaXJxX2luaXRlZCkgaCA9IChfX3NpZ2hhbmRsZXJfdCkgYWxhcm1faGFuZGxlcjsKLQllbHNlIGggPSBib290X3RpbWVyX2hhbmRsZXI7CisJaWYgKHRpbWVyX2lycV9pbml0ZWQpCisJCWggPSAoX19zaWdoYW5kbGVyX3QpYWxhcm1faGFuZGxlcjsKKwllbHNlCisJCWggPSBib290X3RpbWVyX2hhbmRsZXI7CiAKIAlzZXRfaGFuZGxlcihTSUdWVEFMUk0sIGgsIGZsYWdzIHwgU0FfUkVTVEFSVCwKIAkJICAgIFNJR1VTUjEsIFNJR0lPLCBTSUdXSU5DSCwgU0lHQUxSTSwgLTEpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9tYWluLmMgYi9hcmNoL3VtL29zLUxpbnV4L21haW4uYwppbmRleCAyODc4ZTg5Li45MDkxMmFhIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L21haW4uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L21haW4uYwpAQCAtNTksNyArNTksNyBAQAogCWluaXRjYWxsX3QgKmNhbGw7CiAKIAljYWxsID0gJl9fdW1sX2luaXRjYWxsX3N0YXJ0OwotCXdoaWxlIChjYWxsIDwgJl9fdW1sX2luaXRjYWxsX2VuZCl7OworCXdoaWxlIChjYWxsIDwgJl9fdW1sX2luaXRjYWxsX2VuZCl7CiAJCSgqY2FsbCkoKTsKIAkJY2FsbCsrOwogCX0KQEAgLTc0LDYgKzc0LDM0IEBACiAJZXhpdCgxKTsKIH0KIAorI2RlZmluZSBVTUxfTElCX1BBVEgJIjovdXNyL2xpYi91bWwiCisKK3N0YXRpYyB2b2lkIHNldHVwX2Vudl9wYXRoKHZvaWQpCit7CisJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCWNoYXIgKm9sZF9wYXRoID0gTlVMTDsKKwlpbnQgcGF0aF9sZW4gPSAwOworCisJb2xkX3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwkvKiBpZiBubyBQQVRIIHZhcmlhYmxlIGlzIHNldCBvciBpdCBoYXMgYW4gZW1wdHkgdmFsdWUKKwkgKiBqdXN0IHVzZSB0aGUgZGVmYXVsdCArIC91c3IvbGliL3VtbAorCSAqLworCWlmICghb2xkX3BhdGggfHwgKHBhdGhfbGVuID0gc3RybGVuKG9sZF9wYXRoKSkgPT0gMCkgeworCQlwdXRlbnYoIlBBVEg9Oi9iaW46L3Vzci9iaW4vIiBVTUxfTElCX1BBVEgpOworCQlyZXR1cm47CisJfQorCisJLyogYXBwZW5kIC91c3IvbGliL3VtbCB0byB0aGUgZXhpc3RpbmcgcGF0aCAqLworCXBhdGhfbGVuICs9IHN0cmxlbigiUEFUSD0iIFVNTF9MSUJfUEFUSCkgKyAxOworCW5ld19wYXRoID0gbWFsbG9jKHBhdGhfbGVuKTsKKwlpZiAoIW5ld19wYXRoKSB7CisJCXBlcnJvcigiY291ZG4ndCBtYWxsb2MgdG8gc2V0IGEgbmV3IFBBVEgiKTsKKwkJcmV0dXJuOworCX0KKwlzbnByaW50ZihuZXdfcGF0aCwgcGF0aF9sZW4sICJQQVRIPSVzIiBVTUxfTElCX1BBVEgsIG9sZF9wYXRoKTsKKwlwdXRlbnYobmV3X3BhdGgpOworfQorCiBleHRlcm4gaW50IHVtbF9leGl0Y29kZTsKIAogZXh0ZXJuIHZvaWQgc2Nhbl9lbGZfYXV4KCBjaGFyICoqZW52cCk7CkBAIC0xMTQsNiArMTQyLDggQEAKIAogCXNldF9zdGtsaW0oKTsKIAorCXNldHVwX2Vudl9wYXRoKCk7CisKIAluZXdfYXJndiA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOwogCWlmKG5ld19hcmd2ID09IE5VTEwpewogCQlwZXJyb3IoIk1hbGxvY2luZyBhcmd2Iik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L21lbS5jIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwppbmRleCA2YWIzNzJkLi5jNjQzMmU3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L21lbS5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvbWVtLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAidXNlcl91dGlsLmgiCkBAIC0xOSw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KIAorc3RhdGljIGNoYXIgKmRlZmF1bHRfdG1wZGlyID0gIi90bXAiOwogc3RhdGljIGNoYXIgKnRlbXBkaXIgPSBOVUxMOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZmluZF90ZW1wZGlyKHZvaWQpCkBAIC0zNCw3ICszNiw3IEBACiAJCQlicmVhazsKIAl9CiAJaWYoKGRpciA9PSBOVUxMKSB8fCAoKmRpciA9PSAnXDAnKSkKLQkJZGlyID0gIi90bXAiOworCQlkaXIgPSBkZWZhdWx0X3RtcGRpcjsKIAogCXRlbXBkaXIgPSBtYWxsb2Moc3RybGVuKGRpcikgKyAyKTsKIAlpZih0ZW1wZGlyID09IE5VTEwpewpAQCAtNDYsNiArNDgsOTYgQEAKIAlzdHJjYXQodGVtcGRpciwgIi8iKTsKIH0KIAorLyogVGhpcyB3aWxsIHJldHVybiAxLCB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYnVmIGJlaW5nIHRoZQorICogY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgbmV4dCBpbnN0YW5jZSBvZiBjIGluIHRoZSBmaWxlLiAgVGhpcyB3aWxsCisgKiByZWFkIHRoZSBmaWxlIGFzIG5lZWRlZC4gIElmIHRoZXJlJ3MgYW4gZXJyb3IsIC1lcnJubyBpcyByZXR1cm5lZDsKKyAqIGlmIHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hlZCwgMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCBuZXh0KGludCBmZCwgY2hhciAqYnVmLCBpbnQgc2l6ZSwgY2hhciBjKQoreworCWludCBuOworCWNoYXIgKnB0cjsKKworCXdoaWxlKChwdHIgPSBzdHJjaHIoYnVmLCBjKSkgPT0gTlVMTCl7CisJCW4gPSByZWFkKGZkLCBidWYsIHNpemUgLSAxKTsKKwkJaWYobiA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYobiA8IDApCisJCQlyZXR1cm4gLWVycm5vOworCisJCWJ1ZltuXSA9ICdcMCc7CisJfQorCisJcHRyKys7CisJbWVtbW92ZShidWYsIHB0ciwgc3RybGVuKHB0cikgKyAxKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja2VkX3RtcGRpciA9IDA7CisKKy8qIExvb2sgZm9yIGEgdG1wZnMgbW91bnRlZCBhdCAvZGV2L3NobS4gIEkgY291bGRuJ3QgZmluZCBhIGNsZWFuZXIKKyAqIHdheSB0byBkbyB0aGlzIHRoYW4gdG8gcGFyc2UgL3Byb2MvbW91bnRzLiAgc3RhdGZzIHdpbGwgcmV0dXJuIHRoZQorICogc2FtZSBmaWxlc3lzdGVtIG1hZ2ljIG51bWJlciBhbmQgZnMgaWQgZm9yIGJvdGggL2RldiBhbmQgL2Rldi9zaG0KKyAqIHdoZW4gdGhleSBhcmUgYm90aCB0bXBmcywgc28geW91IGNhbid0IHRlbGwgaWYgdGhleSBhcmUgZGlmZmVyZW50CisgKiBmaWxlc3lzdGVtcy4gIEFsc28sIHRoZXJlIHNlZW1zIHRvIGJlIG5vIG90aGVyIHdheSBvZiBmaW5kaW5nIHRoZQorICogbW91bnQgcG9pbnQgb2YgYSBmaWxlc3lzdGVtIGZyb20gd2l0aGluIGl0LgorICoKKyAqIElmIGEgL2Rldi9zaG0gdG1wZnMgZW50cnkgaXMgZm91bmQsIHRoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIGl0LgorICogT3RoZXJ3aXNlLCB3ZSBzdGF5IHdpdGggdGhlIGRlZmF1bHQgL3RtcC4KKyAqLworc3RhdGljIHZvaWQgd2hpY2hfdG1wZGlyKHZvaWQpCit7CisJaW50IGZkLCBmb3VuZDsKKwljaGFyIGJ1ZlsxMjhdID0geyAnXDAnIH07CisKKwlpZihjaGVja2VkX3RtcGRpcikKKwkJcmV0dXJuOworCisJY2hlY2tlZF90bXBkaXIgPSAxOworCisJcHJpbnRmKCJDaGVja2luZyBmb3IgdG1wZnMgbW91bnQgb24gL2Rldi9zaG0uLi4iKTsKKworCWZkID0gb3BlbigiL3Byb2MvbW91bnRzIiwgT19SRE9OTFkpOworCWlmKGZkIDwgMCl7CisJCXByaW50ZigiZmFpbGVkIHRvIG9wZW4gL3Byb2MvbW91bnRzLCBlcnJubyA9ICVkXG4iLCBlcnJubyk7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSgxKXsKKwkJZm91bmQgPSBuZXh0KGZkLCBidWYsIHNpemVvZihidWYpIC8gc2l6ZW9mKGJ1ZlswXSksICcgJyk7CisJCWlmKGZvdW5kICE9IDEpCisJCQlicmVhazsKKworCQlpZighc3RybmNtcChidWYsICIvZGV2L3NobSIsIHN0cmxlbigiL2Rldi9zaG0iKSkpCisJCQlnb3RvIGZvdW5kOworCisJCWZvdW5kID0gbmV4dChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIHNpemVvZihidWZbMF0pLCAnXG4nKTsKKwkJaWYoZm91bmQgIT0gMSkKKwkJCWJyZWFrOworCX0KKworZXJyOgorCWlmKGZvdW5kID09IDApCisJCXByaW50Zigibm90aGluZyBtb3VudGVkIG9uIC9kZXYvc2htXG4iKTsKKwllbHNlIGlmKGZvdW5kIDwgMCkKKwkJcHJpbnRmKCJyZWFkIHJldHVybmVkIGVycm5vICVkXG4iLCAtZm91bmQpOworCisJcmV0dXJuOworCitmb3VuZDoKKwlmb3VuZCA9IG5leHQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLyBzaXplb2YoYnVmWzBdKSwgJyAnKTsKKwlpZihmb3VuZCAhPSAxKQorCQlnb3RvIGVycjsKKworCWlmKHN0cm5jbXAoYnVmLCAidG1wZnMiLCBzdHJsZW4oInRtcGZzIikpKXsKKwkJcHJpbnRmKCJub3QgdG1wZnNcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCJPS1xuIik7CisJZGVmYXVsdF90bXBkaXIgPSAiL2Rldi9zaG0iOworfQorCiAvKgogICogVGhpcyBwcm9jIHN0aWxsIHVzZWQgaW4gdHQtbW9kZQogICogKGZpbGU6IGtlcm5lbC90dC9wdHByb3h5L3Byb3h5LmMsIHByb2M6IHN0YXJ0X2RlYnVnZ2VyKS4KQEAgLTUzLDMzICsxNDUsMzcgQEAKICAqLwogaW50IG1ha2VfdGVtcGZpbGUoY29uc3QgY2hhciAqdGVtcGxhdGUsIGNoYXIgKipvdXRfdGVtcG5hbWUsIGludCBkb191bmxpbmspCiB7Ci0JY2hhciB0ZW1wbmFtZVtNQVhQQVRITEVOXTsKKwljaGFyICp0ZW1wbmFtZTsKIAlpbnQgZmQ7CiAKKwl3aGljaF90bXBkaXIoKTsKKwl0ZW1wbmFtZSA9IG1hbGxvYyhNQVhQQVRITEVOKTsKKwogCWZpbmRfdGVtcGRpcigpOwotCWlmICgqdGVtcGxhdGUgIT0gJy8nKQorCWlmICh0ZW1wbGF0ZVswXSAhPSAnLycpCiAJCXN0cmNweSh0ZW1wbmFtZSwgdGVtcGRpcik7CiAJZWxzZQotCQkqdGVtcG5hbWUgPSAwOworCQl0ZW1wbmFtZVswXSA9ICdcMCc7CiAJc3RyY2F0KHRlbXBuYW1lLCB0ZW1wbGF0ZSk7CiAJZmQgPSBta3N0ZW1wKHRlbXBuYW1lKTsKIAlpZihmZCA8IDApewogCQlmcHJpbnRmKHN0ZGVyciwgIm9wZW4gLSBjYW5ub3QgY3JlYXRlICVzOiAlc1xuIiwgdGVtcG5hbWUsCiAJCQlzdHJlcnJvcihlcnJubykpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gb3V0OwogCX0KIAlpZihkb191bmxpbmsgJiYgKHVubGluayh0ZW1wbmFtZSkgPCAwKSl7CiAJCXBlcnJvcigidW5saW5rIik7Ci0JCXJldHVybiAtMTsKKwkJZ290byBvdXQ7CiAJfQogCWlmKG91dF90ZW1wbmFtZSl7Ci0JCSpvdXRfdGVtcG5hbWUgPSBzdHJkdXAodGVtcG5hbWUpOwotCQlpZigqb3V0X3RlbXBuYW1lID09IE5VTEwpewotCQkJcGVycm9yKCJzdHJkdXAiKTsKLQkJCXJldHVybiAtMTsKLQkJfQorCQkqb3V0X3RlbXBuYW1lID0gdGVtcG5hbWU7CisJfSBlbHNlIHsKKwkJZnJlZSh0ZW1wbmFtZSk7CiAJfQogCXJldHVybihmZCk7CitvdXQ6CisJZnJlZSh0ZW1wbmFtZSk7CisJcmV0dXJuIC0xOwogfQogCiAjZGVmaW5lIFRFTVBOQU1FX1RFTVBMQVRFICJ2bV9maWxlLVhYWFhYWCIKQEAgLTEzNCwzICsyMzAsMjYgQEAKIAl9CiAJcmV0dXJuKGZkKTsKIH0KKworCit2b2lkIGNoZWNrX3RtcGV4ZWModm9pZCkKK3sKKwl2b2lkICphZGRyOworCWludCBlcnIsIGZkID0gY3JlYXRlX3RtcF9maWxlKFVNX0tFUk5fUEFHRV9TSVpFKTsKKworCWFkZHIgPSBtbWFwKE5VTEwsIFVNX0tFUk5fUEFHRV9TSVpFLAorCQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwlwcmludGYoIkNoZWNraW5nIFBST1RfRVhFQyBtbWFwIGluICVzLi4uIix0ZW1wZGlyKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlpZihhZGRyID09IE1BUF9GQUlMRUQpeworCQllcnIgPSBlcnJubzsKKwkJcGVycm9yKCJmYWlsZWQiKTsKKwkJaWYoZXJyID09IEVQRVJNKQorCQkJcHJpbnRmKCIlcyBtdXN0IGJlIG5vdCBtb3VudGVkIG5vZXhlY1xuIix0ZW1wZGlyKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCJPS1xuIik7CisJbXVubWFwKGFkZHIsIFVNX0tFUk5fUEFHRV9TSVpFKTsKKworCWNsb3NlKGZkKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKaW5kZXggODE3NmIwYi4uMjMzYmUyZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogfQogCiAjaWZuZGVmIE1BRFZfUkVNT1ZFCi0jZGVmaW5lIE1BRFZfUkVNT1ZFCTB4NQkJLyogcmVtb3ZlIHRoZXNlIHBhZ2VzICYgcmVzb3VyY2VzICovCisjZGVmaW5lIE1BRFZfUkVNT1ZFIEtFUk5FTF9NQURWX1JFTU9WRQogI2VuZGlmCiAKIGludCBvc19kcm9wX21lbW9yeSh2b2lkICphZGRyLCBpbnQgbGVuZ3RoKQpAQCAtMjA2LDI5ICsyMDYsMzYgQEAKIGludCBjYW5fZHJvcF9tZW1vcnkodm9pZCkKIHsKIAl2b2lkICphZGRyOwotCWludCBmZDsKKwlpbnQgZmQsIG9rID0gMDsKIAogCXByaW50aygiQ2hlY2tpbmcgaG9zdCBNQURWX1JFTU9WRSBzdXBwb3J0Li4uIik7CiAJZmQgPSBjcmVhdGVfbWVtX2ZpbGUoVU1fS0VSTl9QQUdFX1NJWkUpOwogCWlmKGZkIDwgMCl7CiAJCXByaW50aygiQ3JlYXRpbmcgdGVzdCBtZW1vcnkgZmlsZSBmYWlsZWQsIGVyciA9ICVkXG4iLCAtZmQpOwotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJfQogCiAJYWRkciA9IG1tYXA2NChOVUxMLCBVTV9LRVJOX1BBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJICAgICAgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwkJICAgICAgTUFQX1NIQVJFRCwgZmQsIDApOwogCWlmKGFkZHIgPT0gTUFQX0ZBSUxFRCl7CiAJCXByaW50aygiTWFwcGluZyB0ZXN0IG1lbW9yeSBmaWxlIGZhaWxlZCwgZXJyID0gJWRcbiIsIC1lcnJubyk7Ci0JCXJldHVybiAwOworCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKIAlpZihtYWR2aXNlKGFkZHIsIFVNX0tFUk5fUEFHRV9TSVpFLCBNQURWX1JFTU9WRSkgIT0gMCl7CiAJCXByaW50aygiTUFEVl9SRU1PVkUgZmFpbGVkLCBlcnIgPSAlZFxuIiwgLWVycm5vKTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X3VubWFwOwogCX0KIAogCXByaW50aygiT0tcbiIpOwotCXJldHVybiAxOworCW9rID0gMTsKKworb3V0X3VubWFwOgorCW11bm1hcChhZGRyLCBVTV9LRVJOX1BBR0VfU0laRSk7CitvdXRfY2xvc2U6CisJY2xvc2UoZmQpOworb3V0OgorCXJldHVybiBvazsKIH0KIAogdm9pZCBpbml0X25ld190aHJlYWRfc3RhY2sodm9pZCAqc2lnX3N0YWNrLCB2b2lkICgqdXNyMV9oYW5kbGVyKShpbnQpKQpAQCAtMjY2LDExICsyNzMsMTEgQEAKIAogaW50IHJ1bl9rZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKipqbXBfcHRyKQogewotCXNpZ2ptcF9idWYgYnVmOworCWptcF9idWYgYnVmOwogCWludCBuLCBlbmFibGU7CiAKIAkqam1wX3B0ciA9ICZidWY7Ci0JbiA9IFVNTF9TSUdTRVRKTVAoJmJ1ZiwgZW5hYmxlKTsKKwluID0gVU1MX1NFVEpNUCgmYnVmLCBlbmFibGUpOwogCWlmKG4gIT0gMCkKIAkJcmV0dXJuKG4pOwogCSgqZm4pKGFyZyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NpZ2lvLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NpZ2lvLmMKaW5kZXggOWJhOTQyOS4uMDBlOTM4OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zaWdpby5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYwpAQCAtMzA0LDggKzMwNCw4IEBACiAJCQkJCSAgIC5zaXplCT0gMCwKIAkJCQkJICAgLnVzZWQJPSAwIH0pOwogb3V0X2ZyZWU6Ci0Ja2ZyZWUocCk7CiAJc2lnaW9fdW5sb2NrKCk7CisJa2ZyZWUocCk7CiBvdXRfY2xvc2UyOgogCWNsb3NlKGxfc2lnaW9fcHJpdmF0ZVswXSk7CiAJY2xvc2UobF9zaWdpb19wcml2YXRlWzFdKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYwppbmRleCBmYmIwODBjLi5iM2MxMWNmIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCkBAIC04Miw4ICs4Miw4IEBACiAJaWYgKG9mZnNldCkgewogCQlkYXRhID0gKHVuc2lnbmVkIGxvbmcgKikobW1faWRwLT5zdGFjayArCiAJCQkJCSBvZmZzZXQgLSBVTUxfQ09ORklHX1NUVUJfREFUQSk7Ci0JCXByaW50aygiZG9fc3lzY2FsbF9zdHViIDogcmV0ID0gJWQsIG9mZnNldCA9ICVkLCAiCi0JCSAgICAgICAiZGF0YSA9IDB4JXhcbiIsIHJldCwgb2Zmc2V0LCBkYXRhKTsKKwkJcHJpbnRrKCJkb19zeXNjYWxsX3N0dWIgOiByZXQgPSAlbGQsIG9mZnNldCA9ICVsZCwgIgorCQkgICAgICAgImRhdGEgPSAlcFxuIiwgcmV0LCBvZmZzZXQsIGRhdGEpOwogCQlzeXNjYWxsID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpZGF0YSArIGRhdGFbMF0pOwogCQlwcmludGsoImRvX3N5c2NhbGxfc3R1Yjogc3lzY2FsbCAlbGQgZmFpbGVkLCByZXR1cm4gdmFsdWUgPSAiCiAJCSAgICAgICAiMHglbHgsIGV4cGVjdGVkIHJldHVybiB2YWx1ZSA9IDB4JWx4XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKaW5kZXggYmJmMzRjYi4uYmQ4OWM2YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJaWYoZXJyKQogCQkJcGFuaWMoInVzZXJzcGFjZSAtIGNvdWxkIG5vdCByZXN1bWUgdXNlcnNwYWNlIHByb2Nlc3MsICIKIAkJCSAgICAgICJwaWQ9JWQsIHB0cmFjZSBvcGVyYXRpb24gPSAlZCwgZXJybm8gPSAlZFxuIiwKLQkJCSAgICAgIG9wLCBlcnJubyk7CisJCQkgICAgICBwaWQsIG9wLCBlcnJubyk7CiAKIAkJQ0FUQ0hfRUlOVFIoZXJyID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIFdVTlRSQUNFRCkpOwogCQlpZihlcnIgPCAwKQpAQCAtMzQ0LDEyICszNDQsMTIgQEAKIAllcnIgPSBwdHJhY2Vfc2V0cmVncyhwaWQsIHJlZ3MpOwogCWlmKGVyciA8IDApCiAJCXBhbmljKCJjb3B5X2NvbnRleHRfc2thczAgOiBQVFJBQ0VfU0VUUkVHUyBmYWlsZWQsICIKLQkJICAgICAgInBpZCA9ICVkLCBlcnJubyA9ICVkXG4iLCBwaWQsIGVycm5vKTsKKwkJICAgICAgInBpZCA9ICVkLCBlcnJubyA9ICVkXG4iLCBwaWQsIC1lcnIpOwogCiAJZXJyID0gcHRyYWNlX3NldGZwcmVncyhwaWQsIGZwX3JlZ3MpOwogCWlmKGVyciA8IDApCiAJCXBhbmljKCJjb3B5X2NvbnRleHRfc2thczAgOiBQVFJBQ0VfU0VURlBSRUdTIGZhaWxlZCwgIgotCQkgICAgICAicGlkID0gJWQsIGVycm5vID0gJWRcbiIsIHBpZCwgZXJybm8pOworCQkgICAgICAicGlkID0gJWQsIGVycm5vID0gJWRcbiIsIHBpZCwgLWVycik7CiAKIAkvKiBzZXQgYSB3ZWxsIGtub3duIHJldHVybiBjb2RlIGZvciBkZXRlY3Rpb24gb2YgY2hpbGQgd3JpdGUgZmFpbHVyZSAqLwogCWNoaWxkX2RhdGEtPmVyciA9IDEyMzQ1Njc4OwpAQCAtMzYyLDE0ICszNjIsMTQgQEAKIAlwaWQgPSBkYXRhLT5lcnI7CiAJaWYocGlkIDwgMCkKIAkJcGFuaWMoImNvcHlfY29udGV4dF9za2FzMCAtIHN0dWItcGFyZW50IHJlcG9ydHMgZXJyb3IgJWRcbiIsCi0JCSAgICAgIHBpZCk7CisJCSAgICAgIC1waWQpOwogCiAJLyogV2FpdCwgdW50aWwgY2hpbGQgaGFzIGZpbmlzaGVkIHRvbzogcmVhZCBjaGlsZCdzIHJlc3VsdCBmcm9tCiAJICogY2hpbGQncyBzdGFjayBhbmQgY2hlY2sgaXQuCiAJICovCiAJd2FpdF9zdHViX2RvbmUocGlkLCAtMSwgImNvcHlfY29udGV4dF9za2FzMCIpOwogCWlmIChjaGlsZF9kYXRhLT5lcnIgIT0gVU1MX0NPTkZJR19TVFVCX0RBVEEpCi0JCXBhbmljKCJjb3B5X2NvbnRleHRfc2thczAgLSBzdHViLWNoaWxkIHJlcG9ydHMgZXJyb3IgJWRcbiIsCisJCXBhbmljKCJjb3B5X2NvbnRleHRfc2thczAgLSBzdHViLWNoaWxkIHJlcG9ydHMgZXJyb3IgJWxkXG4iLAogCQkgICAgICBjaGlsZF9kYXRhLT5lcnIpOwogCiAJaWYgKHB0cmFjZShQVFJBQ0VfT0xEU0VUT1BUSU9OUywgcGlkLCBOVUxMLApAQCAtNDM0LDcgKzQzNCw3IEBACiAJCXZvaWQgKCpoYW5kbGVyKShpbnQpKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc2lnam1wX2J1ZiBzd2l0Y2hfYnVmLCBmb3JrX2J1ZjsKKwlqbXBfYnVmIHN3aXRjaF9idWYsIGZvcmtfYnVmOwogCWludCBlbmFibGU7CiAKIAkqc3dpdGNoX2J1Zl9wdHIgPSAmc3dpdGNoX2J1ZjsKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCSAqLwogCWZsYWdzID0gZ2V0X3NpZ25hbHMoKTsKIAlibG9ja19zaWduYWxzKCk7Ci0JaWYoVU1MX1NJR1NFVEpNUCgmZm9ya19idWYsIGVuYWJsZSkgPT0gMCkKKwlpZihVTUxfU0VUSk1QKCZmb3JrX2J1ZiwgZW5hYmxlKSA9PSAwKQogCQluZXdfdGhyZWFkX3Byb2Moc3RhY2ssIGhhbmRsZXIpOwogCiAJcmVtb3ZlX3NpZ3N0YWNrKCk7CkBAIC00NjYsMzUgKzQ2NiwzNSBAQAogCiB2b2lkIHRocmVhZF93YWl0KHZvaWQgKnN3LCB2b2lkICpmYikKIHsKLQlzaWdqbXBfYnVmIGJ1ZiwgKipzd2l0Y2hfYnVmID0gc3csICpmb3JrX2J1ZjsKKwlqbXBfYnVmIGJ1ZiwgKipzd2l0Y2hfYnVmID0gc3csICpmb3JrX2J1ZjsKIAlpbnQgZW5hYmxlOwogCiAJKnN3aXRjaF9idWYgPSAmYnVmOwogCWZvcmtfYnVmID0gZmI7Ci0JaWYoVU1MX1NJR1NFVEpNUCgmYnVmLCBlbmFibGUpID09IDApCisJaWYoVU1MX1NFVEpNUCgmYnVmLCBlbmFibGUpID09IDApCiAJCXNpZ2xvbmdqbXAoKmZvcmtfYnVmLCBJTklUX0pNUF9SRU1PVkVfU0lHU1RBQ0spOwogfQogCiB2b2lkIHN3aXRjaF90aHJlYWRzKHZvaWQgKm1lLCB2b2lkICpuZXh0KQogewotCXNpZ2ptcF9idWYgbXlfYnVmLCAqKm1lX3B0ciA9IG1lLCAqbmV4dF9idWYgPSBuZXh0OworCWptcF9idWYgbXlfYnVmLCAqKm1lX3B0ciA9IG1lLCAqbmV4dF9idWYgPSBuZXh0OwogCWludCBlbmFibGU7CiAKIAkqbWVfcHRyID0gJm15X2J1ZjsKLQlpZihVTUxfU0lHU0VUSk1QKCZteV9idWYsIGVuYWJsZSkgPT0gMCkKLQkJVU1MX1NJR0xPTkdKTVAobmV4dF9idWYsIDEpOworCWlmKFVNTF9TRVRKTVAoJm15X2J1ZiwgZW5hYmxlKSA9PSAwKQorCQlVTUxfTE9OR0pNUChuZXh0X2J1ZiwgMSk7CiB9CiAKLXN0YXRpYyBzaWdqbXBfYnVmIGluaXRpYWxfam1wYnVmOworc3RhdGljIGptcF9idWYgaW5pdGlhbF9qbXBidWY7CiAKIC8qIFhYWCBNYWtlIHRoZXNlIHBlcmNwdSAqLwogc3RhdGljIHZvaWQgKCpjYl9wcm9jKSh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgKmNiX2FyZzsKLXN0YXRpYyBzaWdqbXBfYnVmICpjYl9iYWNrOworc3RhdGljIGptcF9idWYgKmNiX2JhY2s7CiAKIGludCBzdGFydF9pZGxlX3RocmVhZCh2b2lkICpzdGFjaywgdm9pZCAqc3dpdGNoX2J1Zl9wdHIsIHZvaWQgKipmb3JrX2J1Zl9wdHIpCiB7Ci0Jc2lnam1wX2J1ZiAqKnN3aXRjaF9idWYgPSBzd2l0Y2hfYnVmX3B0cjsKKwlqbXBfYnVmICoqc3dpdGNoX2J1ZiA9IHN3aXRjaF9idWZfcHRyOwogCWludCBuLCBlbmFibGU7CiAKIAlzZXRfaGFuZGxlcihTSUdXSU5DSCwgKF9fc2lnaGFuZGxlcl90KSBzaWdfaGFuZGxlciwKQEAgLTUwMiw3ICs1MDIsNyBAQAogCQkgICAgU0lHVlRBTFJNLCAtMSk7CiAKIAkqZm9ya19idWZfcHRyID0gJmluaXRpYWxfam1wYnVmOwotCW4gPSBVTUxfU0lHU0VUSk1QKCZpbml0aWFsX2ptcGJ1ZiwgZW5hYmxlKTsKKwluID0gVU1MX1NFVEpNUCgmaW5pdGlhbF9qbXBidWYsIGVuYWJsZSk7CiAJc3dpdGNoKG4pewogCWNhc2UgSU5JVF9KTVBfTkVXX1RIUkVBRDoKIAkJbmV3X3RocmVhZF9wcm9jKCh2b2lkICopIHN0YWNrLCBuZXdfdGhyZWFkX2hhbmRsZXIpOwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJCWJyZWFrOwogCWNhc2UgSU5JVF9KTVBfQ0FMTEJBQ0s6CiAJCSgqY2JfcHJvYykoY2JfYXJnKTsKLQkJVU1MX1NJR0xPTkdKTVAoY2JfYmFjaywgMSk7CisJCVVNTF9MT05HSk1QKGNiX2JhY2ssIDEpOwogCQlicmVhazsKIAljYXNlIElOSVRfSk1QX0hBTFQ6CiAJCWttYWxsb2Nfb2sgPSAwOwpAQCAtNTIzLDEyICs1MjMsMTIgQEAKIAlkZWZhdWx0OgogCQlwYW5pYygiQmFkIHNpZ3NldGptcCByZXR1cm4gaW4gc3RhcnRfaWRsZV90aHJlYWQgLSAlZFxuIiwgbik7CiAJfQotCVVNTF9TSUdMT05HSk1QKCpzd2l0Y2hfYnVmLCAxKTsKKwlVTUxfTE9OR0pNUCgqc3dpdGNoX2J1ZiwgMSk7CiB9CiAKIHZvaWQgaW5pdGlhbF90aHJlYWRfY2Jfc2thcyh2b2lkICgqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJnKQogewotCXNpZ2ptcF9idWYgaGVyZTsKKwlqbXBfYnVmIGhlcmU7CiAJaW50IGVuYWJsZTsKIAogCWNiX3Byb2MgPSBwcm9jOwpAQCAtNTM2LDggKzUzNiw4IEBACiAJY2JfYmFjayA9ICZoZXJlOwogCiAJYmxvY2tfc2lnbmFscygpOwotCWlmKFVNTF9TSUdTRVRKTVAoJmhlcmUsIGVuYWJsZSkgPT0gMCkKLQkJVU1MX1NJR0xPTkdKTVAoJmluaXRpYWxfam1wYnVmLCBJTklUX0pNUF9DQUxMQkFDSyk7CisJaWYoVU1MX1NFVEpNUCgmaGVyZSwgZW5hYmxlKSA9PSAwKQorCQlVTUxfTE9OR0pNUCgmaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX0NBTExCQUNLKTsKIAl1bmJsb2NrX3NpZ25hbHMoKTsKIAogCWNiX3Byb2MgPSBOVUxMOwpAQCAtNTQ4LDEzICs1NDgsMTMgQEAKIHZvaWQgaGFsdF9za2FzKHZvaWQpCiB7CiAJYmxvY2tfc2lnbmFscygpOwotCVVNTF9TSUdMT05HSk1QKCZpbml0aWFsX2ptcGJ1ZiwgSU5JVF9KTVBfSEFMVCk7CisJVU1MX0xPTkdKTVAoJmluaXRpYWxfam1wYnVmLCBJTklUX0pNUF9IQUxUKTsKIH0KIAogdm9pZCByZWJvb3Rfc2thcyh2b2lkKQogewogCWJsb2NrX3NpZ25hbHMoKTsKLQlVTUxfU0lHTE9OR0pNUCgmaW5pdGlhbF9qbXBidWYsIElOSVRfSk1QX1JFQk9PVCk7CisJVU1MX0xPTkdKTVAoJmluaXRpYWxfam1wYnVmLCBJTklUX0pNUF9SRUJPT1QpOwogfQogCiB2b2lkIHN3aXRjaF9tbV9za2FzKHN0cnVjdCBtbV9pZCAqbW1faWRwKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jIGIvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCmluZGV4IDM4N2UyNmEuLjUwMzE0ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKQEAgLTI5NiwyOSArMjk2LDcgQEAKIAljaGVja19zeXNlbXUoKTsKIH0KIAotZXh0ZXJuIGludCBjcmVhdGVfdG1wX2ZpbGUodW5zaWduZWQgbG9uZyBsb25nIGxlbik7Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX3RtcGV4ZWModm9pZCkKLXsKLQl2b2lkICphZGRyOwotCWludCBlcnIsIGZkID0gY3JlYXRlX3RtcF9maWxlKFVNX0tFUk5fUEFHRV9TSVpFKTsKLQotCWFkZHIgPSBtbWFwKE5VTEwsIFVNX0tFUk5fUEFHRV9TSVpFLAotCQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywgTUFQX1BSSVZBVEUsIGZkLCAwKTsKLQlwcmludGYoIkNoZWNraW5nIFBST1RfRVhFQyBtbWFwIGluIC90bXAuLi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZihhZGRyID09IE1BUF9GQUlMRUQpewotCQllcnIgPSBlcnJubzsKLQkJcGVycm9yKCJmYWlsZWQiKTsKLQkJaWYoZXJyID09IEVQRVJNKQotCQkJcHJpbnRmKCIvdG1wIG11c3QgYmUgbm90IG1vdW50ZWQgbm9leGVjXG4iKTsKLQkJZXhpdCgxKTsKLQl9Ci0JcHJpbnRmKCJPS1xuIik7Ci0JbXVubWFwKGFkZHIsIFVNX0tFUk5fUEFHRV9TSVpFKTsKLQotCWNsb3NlKGZkKTsKLX0KK2V4dGVybiB2b2lkIGNoZWNrX3RtcGV4ZWModm9pZCk7CiAKIHZvaWQgb3NfZWFybHlfY2hlY2tzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYwppbmRleCA3YTZmNmI5Li41MTZmNjZkIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWVyciA9IHB0cmFjZShQVFJBQ0VfR0VUUkVHUywgcGlkLCAwLCBleGVjX3JlZ3MpOwogCWlmKGVycikKIAkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRSRUdTIGZhaWxlZCwgZXJybm8gPSAlZCIsCi0JCSAgICAgIGVycik7CisJCSAgICAgIGVycm5vKTsKIAogCWVycm5vID0gMDsKIAllcnIgPSBwdHJhY2UoUFRSQUNFX0dFVEZQWFJFR1MsIHBpZCwgMCwgZXhlY19mcHhfcmVncyk7CkBAIC0xMTksNyArMTE5LDcgQEAKIAllcnIgPSBwdHJhY2UoUFRSQUNFX0dFVEZQUkVHUywgcGlkLCAwLCBleGVjX2ZwX3JlZ3MpOwogCWlmKGVycikKIAkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRGUFJFR1MgZmFpbGVkLCBlcnJubyA9ICVkIiwKLQkJICAgICAgZXJyKTsKKwkJICAgICAgZXJybm8pOwogfQogCiB2b2lkIGdldF9zYWZlX3JlZ2lzdGVycyh1bnNpZ25lZCBsb25nICpyZWdzLCB1bnNpZ25lZCBsb25nICpmcF9yZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni90bHMuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvdGxzLmMKaW5kZXggYmEyMWYwZS4uMTIwYWJiZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni90bHMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3Rscy5jCkBAIC0xLDMgKzEsNCBAQAorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSAic3lzZGVwL3Rscy5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3JlZ2lzdGVycy5jIGIvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3JlZ2lzdGVycy5jCmluZGV4IDAwMTk0MWYuLmJlY2Q4OTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMKQEAgLTYyLDEyICs2MiwxMiBAQAogCWVyciA9IHB0cmFjZShQVFJBQ0VfR0VUUkVHUywgcGlkLCAwLCBleGVjX3JlZ3MpOwogCWlmKGVycikKIAkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRSRUdTIGZhaWxlZCwgZXJybm8gPSAlZCIsCi0JCSAgICAgIGVycik7CisJCSAgICAgIGVycm5vKTsKIAogCWVyciA9IHB0cmFjZShQVFJBQ0VfR0VURlBSRUdTLCBwaWQsIDAsIGV4ZWNfZnBfcmVncyk7CiAJaWYoZXJyKQogCQlwYW5pYygiY2hlY2tfcHRyYWNlIDogUFRSQUNFX0dFVEZQUkVHUyBmYWlsZWQsIGVycm5vID0gJWQiLAotCQkgICAgICBlcnIpOworCQkgICAgICBlcnJubyk7CiB9CiAKIHZvaWQgZ2V0X3NhZmVfcmVnaXN0ZXJzKHVuc2lnbmVkIGxvbmcgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgKmZwX3JlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3RpbWUuYyBiL2FyY2gvdW0vb3MtTGludXgvdGltZS5jCmluZGV4IDZmNzYyNjcuLjI4MGM0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdGltZS5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdGltZS5jCkBAIC04MSwyMCArODEsMTIgQEAKIAlzZXRfaW50ZXJ2YWwoSVRJTUVSX1JFQUwpOwogfQogCi1leHRlcm4gdm9pZCBrdGltZV9nZXRfdHMoc3RydWN0IHRpbWVzcGVjICp0cyk7Ci0jZGVmaW5lIGRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKHRzKSBrdGltZV9nZXRfdHModHMpCi0KIHZvaWQgdGltZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdzsKLQogCWlmKHNpZ25hbChTSUdWVEFMUk0sIGJvb3RfdGltZXJfaGFuZGxlcikgPT0gU0lHX0VSUikKIAkJcGFuaWMoIkNvdWxkbid0IHNldCBTSUdWVEFMUk0gaGFuZGxlciIpOwogCXNldF9pbnRlcnZhbChJVElNRVJfVklSVFVBTCk7Ci0KLQlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmbm93KTsKLQl3YWxsX3RvX21vbm90b25pYy50dl9zZWMgPSAtbm93LnR2X3NlYzsKLQl3YWxsX3RvX21vbm90b25pYy50dl9uc2VjID0gLW5vdy50dl9uc2VjOworCXRpbWVfaW5pdF9rZXJuKCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBvc19uc2Vjcyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC90cmFwLmMgYi9hcmNoL3VtL29zLUxpbnV4L3RyYXAuYwppbmRleCBhOWY2YjI2Li45MGIyOWFlIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3RyYXAuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3RyYXAuYwpAQCAtMzUsNyArMzUsNyBAQAogCiB2b2lkIGRvX2xvbmdqbXAodm9pZCAqYiwgaW50IHZhbCkKIHsKLQlzaWdqbXBfYnVmICpidWYgPSBiOworCWptcF9idWYgKmJ1ZiA9IGI7CiAKLQlVTUxfU0lHTE9OR0pNUChidWYsIHZhbCk7CisJVU1MX0xPTkdKTVAoYnVmLCB2YWwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91YWNjZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3VhY2Nlc3MuYwppbmRleCAxNjZmYjY2Li5lNTIzNzE5IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3VhY2Nlc3MuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3VhY2Nlc3MuYwpAQCAtMTYsOSArMTYsOSBAQAogCXVuc2lnbmVkIGxvbmcgKmZhZGRycCA9ICh1bnNpZ25lZCBsb25nICopIGZhdWx0X2FkZHIsIHJldDsKIAlpbnQgZW5hYmxlOwogCi0Jc2lnam1wX2J1ZiBqYnVmOworCWptcF9idWYgamJ1ZjsKIAkqZmF1bHRfY2F0Y2hlciA9ICZqYnVmOwotCWlmKFVNTF9TSUdTRVRKTVAoJmpidWYsIGVuYWJsZSkgPT0gMCl7CisJaWYoVU1MX1NFVEpNUCgmamJ1ZiwgZW5hYmxlKSA9PSAwKXsKIAkJKCpvcCkodG8sIGZyb20sIG4pOwogCQlyZXQgPSAwOwogCQkqZmF1bHRlZF9vdXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91bWlkLmMgYi9hcmNoL3VtL29zLUxpbnV4L3VtaWQuYwppbmRleCAxOThlNTkxLi4zNjJkYjA1IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3VtaWQuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3VtaWQuYwpAQCAtMTIwLDcgKzEyMCw4IEBACiAKIAlkZWFkID0gMDsKIAlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOwotCWlmKGZkIDwgMCl7CisJaWYoZmQgPCAwKSB7CisJCWZkID0gLWVycm5vOwogCQlpZihmZCAhPSAtRU5PRU5UKXsKIAkJCXByaW50aygibm90X2RlYWRfeWV0IDogY291bGRuJ3Qgb3BlbiBwaWQgZmlsZSAnJXMnLCAiCiAJCQkgICAgICAgImVyciA9ICVkXG4iLCBmaWxlLCAtZmQpOwpAQCAtMTMwLDkgKzEzMSwxMyBAQAogCiAJZXJyID0gMDsKIAluID0gcmVhZChmZCwgcGlkLCBzaXplb2YocGlkKSk7Ci0JaWYobiA8PSAwKXsKKwlpZihuIDwgMCl7CiAJCXByaW50aygibm90X2RlYWRfeWV0IDogY291bGRuJ3QgcmVhZCBwaWQgZmlsZSAnJXMnLCAiCi0JCSAgICAgICAiZXJyID0gJWRcbiIsIGZpbGUsIC1uKTsKKwkJICAgICAgICJlcnIgPSAlZFxuIiwgZmlsZSwgZXJybm8pOworCQlnb3RvIG91dF9jbG9zZTsKKwl9IGVsc2UgaWYobiA9PSAwKXsKKwkJcHJpbnRrKCJub3RfZGVhZF95ZXQgOiBjb3VsZG4ndCByZWFkIHBpZCBmaWxlICclcycsICIKKwkJICAgICAgICIwLWJ5dGUgcmVhZFxuIiwgZmlsZSk7CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIApAQCAtMTU1LDkgKzE2MCw5IEBACiAKIAlyZXR1cm4gZXJyOwogCi0gb3V0X2Nsb3NlOgorb3V0X2Nsb3NlOgogCWNsb3NlKGZkKTsKLSBvdXQ6CitvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MywxNCArMTc4LDE0IEBACiAJZmQgPSBvcGVuKGZpbGUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NDQpOwogCWlmKGZkIDwgMCl7CiAJCXByaW50aygiT3BlbiBvZiBtYWNoaW5lIHBpZCBmaWxlIFwiJXNcIiBmYWlsZWQ6ICVzXG4iLAotCQkgICAgICAgZmlsZSwgc3RyZXJyb3IoLWZkKSk7CisJCSAgICAgICBmaWxlLCBzdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm47CiAJfQogCiAJc25wcmludGYocGlkLCBzaXplb2YocGlkKSwgIiVkXG4iLCBnZXRwaWQoKSk7CiAJbiA9IHdyaXRlKGZkLCBwaWQsIHN0cmxlbihwaWQpKTsKIAlpZihuICE9IHN0cmxlbihwaWQpKQotCQlwcmludGsoIldyaXRlIG9mIHBpZCBmaWxlIGZhaWxlZCAtIGVyciA9ICVkXG4iLCAtbik7CisJCXByaW50aygiV3JpdGUgb2YgcGlkIGZpbGUgZmFpbGVkIC0gZXJyID0gJWRcbiIsIGVycm5vKTsKIAogCWNsb3NlKGZkKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMgYi9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCmluZGV4IDhkYTZhYjMuLjNmMzMxNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYwpAQCAtMTgsMTQgKzE4LDE5IEBACiBleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOwogZXh0ZXJuIGludCBwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwogCisvKiBJZiB0aGV5J3JlIG5vdCBkZWZpbmVkLCB0aGUgZXhwb3J0IGlzIGluY2x1ZGVkIGluIGxpYi9zdHJpbmcuYy4qLworI2lmZGVmIF9fSEFWRV9BUkNIX1NUUkxFTgogRVhQT1JUX1NZTUJPTChzdHJsZW4pOworI2VuZGlmCisjaWZkZWYgX19IQVZFX0FSQ0hfU1RSU1RSCitFWFBPUlRfU1lNQk9MKHN0cnN0cik7CisjZW5kaWYKKwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wocHJpbnRmKTsKIAotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwotCiAvKiBIZXJlLCBpbnN0ZWFkLCBJIGNhbiBwcm92aWRlIGEgZmFrZSBwcm90b3R5cGUuIFllcywgc29tZW9uZSBjYXJlczogZ2Vua3N5bXMuCiAgKiBIb3dldmVyLCB0aGUgbW9kdWxlcyB3aWxsIHVzZSB0aGUgQ1JDIGRlZmluZWQgKmhlcmUqLCBubyBtYXR0ZXIgaWYgaXQgaXMKICAqIGdvb2Q7IHNvIHRoZSB2ZXJzaW9ucyBvZiB0aGVzZSBzeW1ib2xzIHdpbGwgYWx3YXlzIG1hdGNoCkBAIC05MSw2ICs5NiwxMyBAQAogRVhQT1JUX1NZTUJPTF9QUk9UTyhmc3luYyk7CiBFWFBPUlRfU1lNQk9MX1BST1RPKGZkYXRhc3luYyk7CiAKKy8qIEV4cG9ydCBzeW1ib2xzIHVzZWQgYnkgR0NDIGZvciB0aGUgc3RhY2sgcHJvdGVjdG9yLiAqLworZXh0ZXJuIHZvaWQgX19zdGFja19zbWFzaF9oYW5kbGVyKHZvaWQgKikgX19hdHRyaWJ1dGVfXygod2VhaykpOworRVhQT1JUX1NZTUJPTChfX3N0YWNrX3NtYXNoX2hhbmRsZXIpOworCitleHRlcm4gbG9uZyBfX2d1YXJkIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK0VYUE9SVF9TWU1CT0woX19ndWFyZCk7CisKIC8qCiAgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KICAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91dGlsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwppbmRleCBlMzIwNjVlLi5jNDdhMmE3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiBpbnQgc2V0am1wX3dyYXBwZXIodm9pZCAoKnByb2MpKHZvaWQgKiwgdm9pZCAqKSwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKLQlzaWdqbXBfYnVmIGJ1ZjsKKwlqbXBfYnVmIGJ1ZjsKIAlpbnQgbjsKIAogCW4gPSBzaWdzZXRqbXAoYnVmLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwppbmRleCBiNjk2YjQ1Li4xMzQ3ZGM2IDEwMDY0NAotLS0gYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKysrIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCkBAIC03LDEzICs3LDE5IEBACiBVU0VSX09CSlMgKz0gJChmaWx0ZXIgJV91c2VyLm8sJChvYmoteSkgJChvYmotbSkgICQoVVNFUl9TSU5HTEVfT0JKUykpCiBVU0VSX09CSlMgOj0gJChmb3JlYWNoIGZpbGUsJChVU0VSX09CSlMpLCQob2JqKS8kKGZpbGUpKQogCi0kKFVTRVJfT0JKUykgJChVU0VSX09CSlM6Lm89LmkpICQoVVNFUl9PQkpTOi5vPS5zKSAkKFVTRVJfT0JKUzoubz0ubHN0KTogXAotCWNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChVU0VSX0NGTEFHUykgJChDRkxBR1NfJChub3RkaXIgJEApKQotJChVU0VSX09CSlMpOiBjbWRfY2hlY2tzcmMgPQotJChVU0VSX09CSlMpOiBxdWlldF9jbWRfY2hlY2tzcmMgPQotJChVU0VSX09CSlMpOiBjbWRfZm9yY2VfY2hlY2tzcmMgPQotJChVU0VSX09CSlMpOiBxdWlldF9jbWRfZm9yY2VfY2hlY2tzcmMgPQorJChVU0VSX09CSlM6Lm89LiUpOiBcCisJY19mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKFVTRVJfQ0ZMQUdTKSAkKENGTEFHU18kKCpGKS5vKQorJChVU0VSX09CSlMpIDogQ0hFQ0tGTEFHUyA6PSAtRF9fbGludXhfXyAtRGxpbnV4IC1EX19TVERDX18gXAorCS1EdW5peCAtRF9fdW5peF9fIC1EX18kKFNVQkFSQ0gpX18KIAorIyBUaGVzZSBhcmUgbGlrZSBVU0VSX09CSlMgYnV0IGZpbHRlciBVU0VSX0NGTEFHUyB0aHJvdWdoIHVucHJvZmlsZSBpbnN0ZWFkIG9mCisjIHVzaW5nIGl0IGRpcmVjdGx5LgorVU5QUk9GSUxFX09CSlMgOj0gJChmb3JlYWNoIGZpbGUsJChVTlBST0ZJTEVfT0JKUyksJChvYmopLyQoZmlsZSkpCisKKyQoVU5QUk9GSUxFX09CSlM6Lm89LiUpOiBcCisJY19mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKGNhbGwgdW5wcm9maWxlLCQoVVNFUl9DRkxBR1MpKSAkKENGTEFHU18kKCpGKS5vKQorJChVTlBST0ZJTEVfT0JKUykgOiBDSEVDS0ZMQUdTIDo9IC1EX19saW51eF9fIC1EbGludXggLURfX1NURENfXyBcCisJLUR1bml4IC1EX191bml4X18gLURfXyQoU1VCQVJDSClfXwogCiAjIFRoZSBzdHVicyBhbmQgdW5tYXAubyBjYW4ndCB0cnkgdG8gY2FsbCBtY291bnQgb3IgdXBkYXRlIGJhc2ljIGJsb2NrIGRhdGEKIGRlZmluZSB1bnByb2ZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCmluZGV4IDk4YjIwYjcuLjM3NGQ2MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQpAQCAtOCwxMSArOCwxNiBAQAogc3ViYXJjaC1vYmotJChDT05GSUdfSElHSE1FTSkgKz0gbW0vaGlnaG1lbS5vCiBzdWJhcmNoLW9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrZXJuZWwvbW9kdWxlLm8KIAotVVNFUl9PQkpTIDo9IGJ1Z3MubyBwdHJhY2VfdXNlci5vIHNpZ2NvbnRleHQubyBmYXVsdC5vIHN0dWJfc2Vndi5vCitVU0VSX09CSlMgOj0gYnVncy5vIHB0cmFjZV91c2VyLm8gc2lnY29udGV4dC5vIGZhdWx0Lm8KIAotaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKK1VTRVJfT0JKUyArPSB1c2VyLW9mZnNldHMucworZXh0cmEteSArPSB1c2VyLW9mZnNldHMucwogCiBleHRyYS0kKENPTkZJR19NT0RFX1RUKSArPSB1bm1hcC5vCiAKLSQob2JqKS9zdHViX3NlZ3YubyAkKG9iaikvdW5tYXAubzogXAotCV9jX2ZsYWdzID0gJChjYWxsIHVucHJvZmlsZSwkKENGTEFHUykpCitVTlBST0ZJTEVfT0JKUyA6PSBzdHViX3NlZ3YubworQ0ZMQUdTX3N0dWJfc2Vndi5vIDo9ICQoQ0ZMQUdTX05PX0hBUkRFTklORykKKworaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKKworJChvYmopL3VubWFwLiU6IF9jX2ZsYWdzID0gJChjYWxsIHVucHJvZmlsZSwkKENGTEFHUykpCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKaW5kZXggZGI1MjRhYjMuLjJhMWVhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYva3N5bXMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKQEAgLTE1LDcgKzE1LDMgQEAKIAogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7Ci0KLS8qIGRlbGF5IGNvcmUgZnVuY3Rpb25zICovCi1FWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jIGIvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2VfdXNlci5jCmluZGV4IDlmM2JkOGUuLjQwYWE4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlX3VzZXIuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZV91c2VyLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkJaWYocHRyYWNlKFBUUkFDRV9QT0tFVVNSLCBwaWQsICZkdW1teS0+dV9kZWJ1Z3JlZ1tpXSwKIAkJCSAgcmVnc1tpXSkgPCAwKQogCQkJcHJpbnRrKCJ3cml0ZV9kZWJ1Z3JlZ3MgLSBwdHJhY2UgZmFpbGVkIG9uICIKLQkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHgleCwgZXJybm8gPSAlZFxuIiwgaSwKKwkJCSAgICAgICAicmVnaXN0ZXIgJWQsIHZhbHVlID0gMHglbHgsIGVycm5vID0gJWRcbiIsIGksCiAJCQkgICAgICAgcmVnc1tpXSwgZXJybm8pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IGY1ZDBlMWMuLjA3MDlmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtNTcsNyArNTcsNyBAQAogCXJldHVybigwKTsKIH0KIAotaW50IGNvcHlfc2NfdG9fdXNlcl9za2FzKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnAsCitpbnQgY29weV9zY190b191c2VyX3NrYXMoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgc3ApCiB7CiAgIAlzdHJ1Y3Qgc2lnY29udGV4dCBzYzsKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXJldHVybihlcnIpOwogfQogCi1pbnQgY29weV9zY190b191c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnAsCitpbnQgY29weV9zY190b191c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqdG8sIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwLAogCQkgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20sIGludCBmcHNpemUsIHVuc2lnbmVkIGxvbmcgc3ApCiB7CiAJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnA7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkgKiBkZWxpdmVyeS4gIFRoZSBzcCBwYXNzZWQgaW4gaXMgdGhlIG9yaWdpbmFsLCBhbmQgdGhpcyBuZWVkcwogCSAqIHRvIGJlIHJlc3RvcmVkLCBzbyB3ZSBzdGljayBpdCBpbiBzZXBhcmF0ZWx5LgogCSAqLwotCWVyciB8PSBjb3B5X3RvX3VzZXIoJlNDX1NQKHRvKSwgc3AsIHNpemVvZihzcCkpOworCWVyciB8PSBjb3B5X3RvX3VzZXIoJlNDX1NQKHRvKSwgJnNwLCBzaXplb2Yoc3ApKTsKIAogCWlmKGZyb21fZnAgIT0gTlVMTCl7CiAJCWVyciB8PSBjb3B5X3RvX3VzZXIoJnRvLT5mcHN0YXRlLCAmdG9fZnAsIHNpemVvZih0by0+ZnBzdGF0ZSkpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJcmV0dXJuKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgY29weV9zY190b191c2VyKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnAsCitzdGF0aWMgaW50IGNvcHlfc2NfdG9fdXNlcihzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcCwKIAkJCSAgIHN0cnVjdCBwdF9yZWdzICpmcm9tLCB1bnNpZ25lZCBsb25nIHNwKQogewogCXJldHVybihDSE9PU0VfTU9ERShjb3B5X3NjX3RvX3VzZXJfdHQodG8sIGZwLCBVUFRfU0MoJmZyb20tPnJlZ3MpLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViX3NlZ3YuYyBiL2FyY2gvdW0vc3lzLWkzODYvc3R1Yl9zZWd2LmMKaW5kZXggYTM3ZjY3Mi4uMjM1NWRjMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zdHViX3NlZ3YuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N0dWJfc2Vndi5jCkBAIC0yNyw2ICsyNyw2IEBACiAJICogdGhlIHN0YWNrIGluIGl0cyBvcmlnaW5hbCBmb3JtIHdoZW4gd2UgZG8gdGhlIHNpZ3JldHVybiBoZXJlLCBieQogCSAqIGhhbmQuCiAJICovCi0JX19hc21fXygibW92ICUwLCUlZXNwIDsgbW92bCAlMSwgJSVlYXggOyAiCi0JCSJpbnQgJDB4ODAiIDogOiAiYSIgKHNjKSwgImciIChfX05SX3NpZ3JldHVybikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsJSVlc3AgOyBtb3ZsICUxLCAlJWVheCA7ICIKKwkJCSAgICAgImludCAkMHg4MCIgOiA6ICJhIiAoc2MpLCAiZyIgKF9fTlJfc2lncmV0dXJuKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMKaW5kZXggNzQ5ZGQxYi4uNzEwZDVmYjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMKQEAgLTk5LDExICs5OSwxMiBAQAogCiAJc3dpdGNoIChjYWxsKSB7CiAJY2FzZSBTRU1PUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiAqKSBwdHIsIHNlY29uZCwKLQkJCQkgICAgICBOVUxMKTsKKwkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKikgcHRyLAorCQkJCSAgICAgIHNlY29uZCwgTlVMTCk7CiAJY2FzZSBTRU1USU1FRE9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmICopIHB0ciwgc2Vjb25kLAotCQkJCSAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKikgZmlmdGgpOworCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKSBwdHIsCisJCQkJICAgICAgc2Vjb25kLAorCQkJCSAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopIGZpZnRoKTsKIAljYXNlIFNFTUdFVDoKIAkJcmV0dXJuIHN5c19zZW1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKIAljYXNlIFNFTUNUTDogewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni90bHMuYyBiL2FyY2gvdW0vc3lzLWkzODYvdGxzLmMKaW5kZXggYTMxODhlOC4uNzFiOTc5NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvdGxzLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni90bHMuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX0VSUiAiICBIb3N0IFRMUyBzdXBwb3J0IE5PVCBkZXRlY3RlZCEgIgogCQkJCSJUTFMgc3VwcG9ydCBpbnNpZGUgVU1MIHdpbGwgbm90IHdvcmtcbiIpOwotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBfX2luaXRjYWxsKF9fc2V0dXBfaG9zdF9zdXBwb3J0c190bHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlIGIvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCmluZGV4IGI1ZmMyMmIuLmMxOTc5NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKQEAgLTE2LDExICsxNiwxNiBAQAogCiBsZHQteSA9IC4uL3N5cy1pMzg2L2xkdC5vCiAKLVVTRVJfT0JKUyA6PSBwdHJhY2VfdXNlci5vIHNpZ2NvbnRleHQubyBzdHViX3NlZ3YubworVVNFUl9PQkpTIDo9IHB0cmFjZV91c2VyLm8gc2lnY29udGV4dC5vCiAKLWluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCitVU0VSX09CSlMgKz0gdXNlci1vZmZzZXRzLnMKK2V4dHJhLXkgKz0gdXNlci1vZmZzZXRzLnMKIAogZXh0cmEtJChDT05GSUdfTU9ERV9UVCkgKz0gdW5tYXAubwogCi0kKG9iaikvc3R1Yl9zZWd2Lm8gJChvYmopL3VubWFwLm86IFwKLQlfY19mbGFncyA9ICQoY2FsbCB1bnByb2ZpbGUsJChDRkxBR1MpKQorVU5QUk9GSUxFX09CSlMgOj0gc3R1Yl9zZWd2Lm8KK0NGTEFHU19zdHViX3NlZ3YubyA6PSAkKENGTEFHU19OT19IQVJERU5JTkcpCisKK2luY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCisKKyQob2JqKS91bm1hcC4lOiBfY19mbGFncyA9ICQoY2FsbCB1bnByb2ZpbGUsJChDRkxBR1MpKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCmluZGV4IGU3NWM0ZTEuLjllZGYxMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJza2FzLmgiCiAKIHN0YXRpYyBpbnQgY29weV9zY19mcm9tX3VzZXJfc2thcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpmcm9tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpmcm9tKQogewogICAgICAgIGludCBlcnIgPSAwOwogCkBAIC01NCw3ICs1NCw4IEBACiAgICAgICAgcmV0dXJuKGVycik7CiB9CiAKLWludCBjb3B5X3NjX3RvX3VzZXJfc2thcyhzdHJ1Y3Qgc2lnY29udGV4dCAqdG8sIHN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsCitpbnQgY29weV9zY190b191c2VyX3NrYXMoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywKKwkJCSBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICp0b19mcCwKIAkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBtYXNrLAogCQkJIHVuc2lnbmVkIGxvbmcgc3ApCiB7CkBAIC0xMDYsMTAgKzEwNywxMSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9ERV9UVAotaW50IGNvcHlfc2NfZnJvbV91c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20sCitpbnQgY29weV9zY19mcm9tX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKmZyb20sCiAJCQkgaW50IGZwc2l6ZSkKIHsKLQlzdHJ1Y3QgX2Zwc3RhdGUgKnRvX2ZwLCAqZnJvbV9mcDsKKwlzdHJ1Y3QgX2Zwc3RhdGUgKnRvX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZyb21fZnA7CiAJdW5zaWduZWQgbG9uZyBzaWdzOwogCWludCBlcnI7CiAKQEAgLTEyNCwyMCArMTI2LDIxIEBACiAJcmV0dXJuKGVycik7CiB9CiAKLWludCBjb3B5X3NjX3RvX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAoraW50IGNvcHlfc2NfdG9fdXNlcl90dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcCwKIAkJICAgICAgIHN0cnVjdCBzaWdjb250ZXh0ICpmcm9tLCBpbnQgZnBzaXplLCB1bnNpZ25lZCBsb25nIHNwKQogewotCXN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsICpmcm9tX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKnRvX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSAqZnJvbV9mcDsKIAlpbnQgZXJyOwogCi0JdG9fZnAgPSAoZnAgPyBmcCA6IChzdHJ1Y3QgX2Zwc3RhdGUgKikgKHRvICsgMSkpOworCXRvX2ZwID0gKGZwID8gZnAgOiAoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKSAodG8gKyAxKSk7CiAJZnJvbV9mcCA9IGZyb20tPmZwc3RhdGU7CiAJZXJyID0gY29weV90b191c2VyKHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7CiAJLyogVGhlIFNQIGluIHRoZSBzaWdjb250ZXh0IGlzIHRoZSB1cGRhdGVkIG9uZSBmb3IgdGhlIHNpZ25hbAogCSAqIGRlbGl2ZXJ5LiAgVGhlIHNwIHBhc3NlZCBpbiBpcyB0aGUgb3JpZ2luYWwsIGFuZCB0aGlzIG5lZWRzCiAJICogdG8gYmUgcmVzdG9yZWQsIHNvIHdlIHN0aWNrIGl0IGluIHNlcGFyYXRlbHkuCiAJICovCi0JZXJyIHw9IGNvcHlfdG9fdXNlcigmU0NfU1AodG8pLCBzcCwgc2l6ZW9mKHNwKSk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcigmU0NfU1AodG8pLCAmc3AsIHNpemVvZihzcCkpOwogCiAJaWYoZnJvbV9mcCAhPSBOVUxMKXsKIAkJZXJyIHw9IGNvcHlfdG9fdXNlcigmdG8tPmZwc3RhdGUsICZ0b19mcCwgc2l6ZW9mKHRvLT5mcHN0YXRlKSk7CkBAIC0xNTgsNyArMTYxLDggQEAKICAgICAgICByZXR1cm4ocmV0KTsKIH0KIAotc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAorc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywKKwkJCSAgIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwLAogCQkJICAgc3RydWN0IHB0X3JlZ3MgKmZyb20sIHVuc2lnbmVkIGxvbmcgbWFzaywKIAkJCSAgIHVuc2lnbmVkIGxvbmcgc3ApCiB7CkBAIC0xNjksNyArMTczLDcgQEAKIAogc3RydWN0IHJ0X3NpZ2ZyYW1lCiB7Ci0gICAgICAgY2hhciAqcHJldGNvZGU7CisgICAgICAgY2hhciBfX3VzZXIgKnByZXRjb2RlOwogICAgICAgIHN0cnVjdCB1Y29udGV4dCB1YzsKICAgICAgICBzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogfTsKQEAgLTE4OCw3ICsxOTIsNyBAQAogCiAJZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKQogCQlyb3VuZF9kb3duKHN0YWNrX3RvcCAtIHNpemVvZihzdHJ1Y3QgcnRfc2lnZnJhbWUpLCAxNikgLSA4OwotICAgICAgICBmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgKikgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSAtIDEyOCk7CisgICAgICAgIGZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSAtIDEyOCk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZwLCBzaXplb2Yoc3RydWN0IF9mcHN0YXRlKSkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3N0dWJfc2Vndi5jCmluZGV4IGEyNzA5OTUuLjFjOTY3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zdHViX3NlZ3YuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3R1Yl9zZWd2LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAlzdHJ1Y3QgdWNvbnRleHQgKnVjOwogICAgICAgICBpbnQgcGlkOwogCi0JX19hc21fXygibW92cSAlJXJkeCwgJTAiIDogIj1nIiAodWMpIDopOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcmR4LCAlMCIgOiAiPWciICh1YykgOik7CiAJR0VUX0ZBVUxUSU5GT19GUk9NX1NDKCooKHN0cnVjdCBmYXVsdGluZm8gKikgVU1MX0NPTkZJR19TVFVCX0RBVEEpLAogCQkJICAgICAgJnVjLT51Y19tY29udGV4dCk7CiAKQEAgLTQ0LDggKzQ0LDggQEAKIAkgKiB0aGUgc2lnbmFsIGZyYW1lLiAgU28sIHdlIHVzZSB0aGUgdWNvbnRleHQgcG9pbnRlciwgd2hpY2ggd2Uga25vdwogCSAqIGFscmVhZHksIHRvIGdldCB0aGUgc2lnbmFsIGZyYW1lIHBvaW50ZXIsIGFuZCBhZGQgOCB0byB0aGF0LgogCSAqLwotCV9fYXNtX18oIm1vdnEgJTAsICUlcnNwOyBtb3ZxICUxLCAlJXJheCA7IHN5c2NhbGwiOiA6Ci0JCSJnIiAoKHVuc2lnbmVkIGxvbmcpIGNvbnRhaW5lcl9vZih1Yywgc3RydWN0IHJ0X3NpZ2ZyYW1lLCAKLQkJCQkJCSAgdWMpICsgOCksCi0gICAgICAgICAgICAgICAgImciIChfX05SX3J0X3NpZ3JldHVybikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUwLCAlJXJzcDsgbW92cSAlMSwgJSVyYXggOyBzeXNjYWxsIjogOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZyIgKCh1bnNpZ25lZCBsb25nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih1Yywgc3RydWN0IHJ0X3NpZ2ZyYW1lLCB1YykgKyA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImciIChfX05SX3J0X3NpZ3JldHVybikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwppbmRleCA2YWNlZTVjLi42ZmNlOWY0IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwpAQCAtNDUsNyArNDUsNyBAQAogCWNhc2UgQVJDSF9HRVRfR1M6CiAJCXJldCA9IGFyY2hfcHJjdGwoY29kZSwgKHVuc2lnbmVkIGxvbmcpICZ0bXApOwogCQlpZighcmV0KQotCQkJcmV0ID0gcHV0X3VzZXIodG1wLCAmYWRkcik7CisJCQlyZXQgPSBwdXRfdXNlcih0bXAsIChsb25nIF9fdXNlciAqKWFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMgYi9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYwppbmRleCA4ZmZjMjljLi42YmNmY2ZlIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYwpAQCAtNDMsNyArNDMsNiBAQAogRVhQT1JUX1NZTUJPTCAoc3RyY2hyKTsKIEVYUE9SVF9TWU1CT0wgKHN0cmxlbik7CiBFWFBPUlRfU1lNQk9MIChzdHJubGVuKTsKLUVYUE9SVF9TWU1CT0wgKHN0cnBicmspOwogRVhQT1JUX1NZTUJPTCAoc3RycmNocik7CiBFWFBPUlRfU1lNQk9MIChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTCAobWVtc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IDQzMTBiNGEuLjY1MjdhMzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtMTM2LDYgKzEzNiwxMSBAQAogCWRlZmF1bHQgIjciIGlmIEdFTkVSSUNfQ1BVIHx8IE1QU0MKIAlkZWZhdWx0ICI2IiBpZiBNSzgKIAorY29uZmlnIFg4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMKKwlpbnQKKwlkZWZhdWx0ICI0MDk2IiBpZiBYODZfVlNNUAorCWRlZmF1bHQgWDg2X0wxX0NBQ0hFX0JZVEVTIGlmICFYODZfVlNNUAorCiBjb25maWcgWDg2X1RTQwogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTI4MywxMiArMjg4LDE4IEBACiAJIE5vcnRoYnJpZGdlIG9mIE9wdGVyb24uIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBYODZfNjRfQUNQSV9OVU1BCiAJIGluc3RlYWQsIHdoaWNoIGFsc28gdGFrZXMgcHJpb3JpdHkgaWYgYm90aCBhcmUgY29tcGlsZWQgaW4uICAgCiAKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjYiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKICMgRHVtbXkgQ09ORklHIG9wdGlvbiB0byBzZWxlY3QgQUNQSV9OVU1BIGZyb20gZHJpdmVycy9hY3BpL0tjb25maWcuCiAKIGNvbmZpZyBYODZfNjRfQUNQSV9OVU1BCiAgICAgICAgYm9vbCAiQUNQSSBOVU1BIGRldGVjdGlvbiIKICAgICAgICBkZXBlbmRzIG9uIE5VTUEKICAgICAgICBzZWxlY3QgQUNQSSAKKwlzZWxlY3QgUENJCiAgICAgICAgc2VsZWN0IEFDUElfTlVNQQogICAgICAgIGRlZmF1bHQgeQogICAgICAgIGhlbHAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L01ha2VmaWxlIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKaW5kZXggNTg1ZmQ0YS4uZTU3M2UyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKQEAgLTI0LDM3ICsyNCwzNyBAQAogTERGTEFHUwkJOj0gLW0gZWxmX3g4Nl82NAogT0JKQ09QWUZMQUdTCTo9IC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUwogTERGTEFHU192bWxpbnV4IDo9Ci0KIENIRUNLRkxBR1MgICAgICArPSAtRF9feDg2XzY0X18gLW02NAogCitjZmxhZ3MteQk6PQogY2ZsYWdzLSQoQ09ORklHX01LOCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9azgpCiBjZmxhZ3MtJChDT05GSUdfTVBTQykgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bm9jb25hKQogY2ZsYWdzLSQoQ09ORklHX0dFTkVSSUNfQ1BVKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKQotQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCiAKLUNGTEFHUyArPSAtbTY0Ci1DRkxBR1MgKz0gLW1uby1yZWQtem9uZQotQ0ZMQUdTICs9IC1tY21vZGVsPWtlcm5lbAotQ0ZMQUdTICs9IC1waXBlCitjZmxhZ3MteSArPSAtbTY0CitjZmxhZ3MteSArPSAtbW5vLXJlZC16b25lCitjZmxhZ3MteSArPSAtbWNtb2RlbD1rZXJuZWwKK2NmbGFncy15ICs9IC1waXBlCiBjZmxhZ3MtJChDT05GSUdfUkVPUkRFUikgKz0gLWZmdW5jdGlvbi1zZWN0aW9ucwogIyB0aGlzIG1ha2VzIHJlYWRpbmcgYXNzZW1ibHkgc291cmNlIGVhc2llciwgYnV0IHByb2R1Y2VzIHdvcnNlIGNvZGUKICMgYWN0dWFsbHkgaXQgbWFrZXMgdGhlIGtlcm5lbCBzbWFsbGVyIHRvby4KLUNGTEFHUyArPSAtZm5vLXJlb3JkZXItYmxvY2tzCQotQ0ZMQUdTICs9IC1Xbm8tc2lnbi1jb21wYXJlCitjZmxhZ3MteSArPSAtZm5vLXJlb3JkZXItYmxvY2tzCitjZmxhZ3MteSArPSAtV25vLXNpZ24tY29tcGFyZQogaWZuZXEgKCQoQ09ORklHX1VOV0lORF9JTkZPKSx5KQotQ0ZMQUdTICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2NmbGFncy15ICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKIGVuZGlmCiBpZm5lcSAoJChDT05GSUdfREVCVUdfSU5GTykseSkKICMgLWZ3ZWIgc2hyaW5rcyB0aGUga2VybmVsIGEgYml0LCBidXQgdGhlIGRpZmZlcmVuY2UgaXMgdmVyeSBzbWFsbAogIyBpdCBhbHNvIG1lc3NlcyB1cCBkZWJ1Z2dpbmcsIHNvIGRvbid0IHVzZSBpdCBmb3Igbm93LgotI0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1md2ViKQorI2NmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLWZ3ZWIpCiBlbmRpZgogIyAtZnVuaXQtYXQtYS10aW1lIHNocmlua3MgdGhlIGtlcm5lbCAudGV4dCBjb25zaWRlcmFibHkKICMgdW5mb3J0dW5hdGVseSBpdCBtYWtlcyByZWFkaW5nIG9vcHNlcyBoYXJkZXIuCi1DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZnVuaXQtYXQtYS10aW1lKQorY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtZnVuaXQtYXQtYS10aW1lKQogIyBwcmV2ZW50IGdjYyBmcm9tIGdlbmVyYXRpbmcgYW55IEZQIGNvZGUgYnkgbWlzdGFrZQotQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zc2UgLW1uby1tbXggLW1uby1zc2UyIC1tbm8tM2Rub3csKQorY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLXNzZSAtbW5vLW1teCAtbW5vLXNzZTIgLW1uby0zZG5vdywpCiAKK0NGTEFHUyArPSAkKGNmbGFncy15KQogQUZMQUdTICs9IC1tNjQKIAogaGVhZC15IDo9IGFyY2gveDg2XzY0L2tlcm5lbC9oZWFkLm8gYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5vIGFyY2gveDg2XzY0L2tlcm5lbC9pbml0X3Rhc2subwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvYm9vdC92aWRlby5TIGIvYXJjaC94ODZfNjQvYm9vdC92aWRlby5TCmluZGV4IDA1ODc0NzcuLjMyMzI3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2Jvb3QvdmlkZW8uUworKysgYi9hcmNoL3g4Nl82NC9ib290L3ZpZGVvLlMKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgUEFSQU1fVkVTQVBNX09GRgkweDMwCiAjZGVmaW5lIFBBUkFNX0xGQl9QQUdFUwkJMHgzMgogI2RlZmluZSBQQVJBTV9WRVNBX0FUVFJJQgkweDM0CisjZGVmaW5lIFBBUkFNX0NBUEFCSUxJVElFUwkweDM2CiAKIC8qIERlZmluZSBET19TVE9SRSBhY2NvcmRpbmcgdG8gQ09ORklHX1ZJREVPX1JFVEFJTiAqLwogI2lmZGVmIENPTkZJR19WSURFT19SRVRBSU4KQEAgLTIzMyw2ICsyMzQsMTAgQEAKIAltb3Z3CTE4KCVkaSksICVheAogCW1vdmwJJWVheCwgJWZzOihQQVJBTV9MRkJfU0laRSkKIAorIyBzdG9yZSBtb2RlIGNhcGFiaWxpdGllcworCW1vdmwgMTAoJWRpKSwgJWVheAorCW1vdmwgJWVheCwgJWZzOihQQVJBTV9DQVBBQklMSVRJRVMpCisKICMgc3dpdGNoaW5nIHRoZSBEQUMgdG8gOC1iaXQgaXMgZm9yIDw9IDggYnBwIG9ubHkKIAltb3Z3CSVmczooUEFSQU1fTEZCX0RFUFRIKSwgJWF4CiAJY21wdwkkOCwgJWF4CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9kZWZjb25maWcgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKaW5kZXggNTY2ZWNjOS4uNjlkYjBjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvZGVmY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1naXQ5Ci0jIFNhdCBNYXIgMjUgMTU6MTg6NDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMS1naXQxMQorIyBTdW4gQXByIDE2IDA3OjIyOjM2IDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTksNiArOSw3IEBACiBDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1g4Nl9DTVBYQ0hHPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQpAQCAtNTUsMTEgKzU2LDggQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKK0NPTkZJR19ET1VCTEVGQVVMVD15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtNzAsNyArNjgsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtODEsNiArNzgsNyBAQAogIwogQ09ORklHX0xCRD15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTA1LDYgKzEwMyw3IEBACiBDT05GSUdfR0VORVJJQ19DUFU9eQogQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUz0xMjgKIENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NworQ09ORklHX1g4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVM9MTI4CiBDT05GSUdfWDg2X1RTQz15CiBDT05GSUdfWDg2X0dPT0RfQVBJQz15CiAjIENPTkZJR19NSUNST0NPREUgaXMgbm90IHNldApAQCAtMTE2LDEyICsxMTUsMTQgQEAKIENPTkZJR19NVFJSPXkKIENPTkZJR19TTVA9eQogQ09ORklHX1NDSEVEX1NNVD15CitDT05GSUdfU0NIRURfTUM9eQogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX0JLTD15CiBDT05GSUdfTlVNQT15CiBDT05GSUdfSzhfTlVNQT15CitDT05GSUdfTk9ERVNfU0hJRlQ9NgogQ09ORklHX1g4Nl82NF9BQ1BJX05VTUE9eQogQ09ORklHX05VTUFfRU1VPXkKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQpAQCAtMTM4LDYgKzEzOSw3IEBACiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQorQ09ORklHX09VVF9PRl9MSU5FX1BGTl9UT19QQUdFPXkKIENPTkZJR19OUl9DUFVTPTMyCiBDT05GSUdfSE9UUExVR19DUFU9eQogQ09ORklHX0hQRVRfVElNRVI9eQpAQCAtMjg5LDYgKzI5MSw3IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CkBAIC0zMDAsNiArMzAzLDcgQEAKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC01NDIsNyArNTQ2LDYgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTcwNCw3ICs3MDcsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNzkxLDcgKzc5Myw3IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQUNQSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC05MjEsNiArOTIzLDcgQEAKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkzMiw2ICs5MzUsOCBAQAogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19WR0FfQ09OU09MRT15CitDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSz15CitDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDS19TSVpFPTI1NgogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogCiAjCkBAIC0xMDQxLDkgKzEwNDYsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC0xMDU4LDE1ICsxMDYxLDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTExMTgsOSArMTExMiwyMyBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQVRIX0NPUkUgaXMgbm90IHNldAogCiAjCiAjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQpAQCAtMTEyOCw2ICsxMTM2LDExIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKICMgRmlybXdhcmUgRHJpdmVycwogIwogIyBDT05GSUdfRUREIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlCmluZGV4IDkyOWU2YjAuLmU5MjYzYjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9NYWtlZmlsZQpAQCAtMjcsNSArMjcsNSBAQAogJChvYmopL3ZzeXNjYWxsLSUuc286ICQoc3JjKS92c3lzY2FsbC5sZHMgJChvYmopL3ZzeXNjYWxsLSUubyBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHN5c2NhbGwpCiAKLUFGTEFHU192c3lzY2FsbC1zeXNlbnRlci5vID0gLW0zMgotQUZMQUdTX3ZzeXNjYWxsLXN5c2NhbGwubyA9IC1tMzIKK0FGTEFHU192c3lzY2FsbC1zeXNlbnRlci5vID0gLW0zMiAtV2EsLTMyCitBRkxBR1NfdnN5c2NhbGwtc3lzY2FsbC5vID0gLW0zMiAtV2EsLTMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKaW5kZXggZTc3NjEzOS4uOTI2YzQ3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKIAlpbnQgaSwgcmV0OwogCi0Jc3RhY2tfYmFzZSA9IElBMzJfU1RBQ0tfVE9QIC0gTUFYX0FSR19QQUdFUyAqIFBBR0VfU0laRTsKKwlzdGFja19iYXNlID0gc3RhY2tfdG9wIC0gTUFYX0FSR19QQUdFUyAqIFBBR0VfU0laRTsKIAltbS0+YXJnX3N0YXJ0ID0gYnBybS0+cCArIHN0YWNrX2Jhc2U7CiAKIAlicHJtLT5wICs9IHN0YWNrX2Jhc2U7CkBAIC0zNTcsNyArMzU3LDcgQEAKIAl7CiAJCW1wbnQtPnZtX21tID0gbW07CiAJCW1wbnQtPnZtX3N0YXJ0ID0gUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcpIGJwcm0tPnA7Ci0JCW1wbnQtPnZtX2VuZCA9IElBMzJfU1RBQ0tfVE9QOworCQltcG50LT52bV9lbmQgPSBzdGFja190b3A7CiAJCWlmIChleGVjdXRhYmxlX3N0YWNrID09IEVYU1RBQ0tfRU5BQkxFX1gpCiAJCQltcG50LT52bV9mbGFncyA9IFZNX1NUQUNLX0ZMQUdTIHwgIFZNX0VYRUM7CiAJCWVsc2UgaWYgKGV4ZWN1dGFibGVfc3RhY2sgPT0gRVhTVEFDS19ESVNBQkxFX1gpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUwppbmRleCAzNWIyZmFjLi41YTkyZmVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxhc20vdnN5c2NhbGwzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAorI2RlZmluZSBJQTMyX05SX3N5c2NhbGxzICgoaWEzMl9zeXNjYWxsX2VuZCAtIGlhMzJfc3lzX2NhbGxfdGFibGUpLzgpCisKIAkubWFjcm8gSUEzMl9BUkdfRklYVVAgbm9lYnA9MAogCW1vdmwJJWVkaSwlcjhkCiAJLmlmIFxub2VicApAQCAtMTA5LDggKzExMSw4IEBACiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJam56ICBzeXNlbnRlcl90cmFjZXN5cwogc3lzZW50ZXJfZG9fY2FsbDoJCi0JY21wbAkkKElBMzJfTlJfc3lzY2FsbHMpLCVlYXgKLQlqYWUJaWEzMl9iYWRzeXMKKwljbXBsCSQoSUEzMl9OUl9zeXNjYWxscy0xKSwlZWF4CisJamEJaWEzMl9iYWRzeXMKIAlJQTMyX0FSR19GSVhVUCAxCiAJY2FsbAkqaWEzMl9zeXNfY2FsbF90YWJsZSgsJXJheCw4KQogCW1vdnEJJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCkBAIC0yMTAsOCArMjEyLDggQEAKIAlDRklfUkVNRU1CRVJfU1RBVEUKIAlqbnogICBjc3Rhcl90cmFjZXN5cwogY3N0YXJfZG9fY2FsbDoJCi0JY21wbCAkSUEzMl9OUl9zeXNjYWxscywlZWF4Ci0JamFlICBpYTMyX2JhZHN5cworCWNtcGwgJElBMzJfTlJfc3lzY2FsbHMtMSwlZWF4CisJamEgIGlhMzJfYmFkc3lzCiAJSUEzMl9BUkdfRklYVVAgMQogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkKIAltb3ZxICVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQpAQCAtMjk2LDggKzI5OCw4IEBACiAJdGVzdGwgJChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0VDQ09NUCksdGhyZWFkaW5mb19mbGFncyglcjEwKQogCWpueiBpYTMyX3RyYWNlc3lzCiBpYTMyX2RvX3N5c2NhbGw6CQotCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzKSwlZWF4Ci0JamFlICBpYTMyX2JhZHN5cworCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzLTEpLCVlYXgKKwlqYSAgaWEzMl9iYWRzeXMKIAlJQTMyX0FSR19GSVhVUAogCWNhbGwgKmlhMzJfc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkgIyB4eHg6IHJpcCByZWxhdGl2ZQogaWEzMl9zeXNyZXQ6CkBAIC02ODUsMTIgKzY4NywxMyBAQAogCS5xdWFkIHN5c19yZWFkbGlua2F0CQkvKiAzMDUgKi8KIAkucXVhZCBzeXNfZmNobW9kYXQKIAkucXVhZCBzeXNfZmFjY2Vzc2F0Ci0JLnF1YWQgc3lzX25pX3N5c2NhbGwJCS8qIHBzZWxlY3Q2IGZvciBub3cgKi8KLQkucXVhZCBzeXNfbmlfc3lzY2FsbAkJLyogcHBvbGwgZm9yIG5vdyAqLworCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJCS8qIHBzZWxlY3Q2IGZvciBub3cgKi8KKwkucXVhZCBxdWlldF9uaV9zeXNjYWxsCQkvKiBwcG9sbCBmb3Igbm93ICovCiAJLnF1YWQgc3lzX3Vuc2hhcmUJCS8qIDMxMCAqLwogCS5xdWFkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0CiAJLnF1YWQgY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3QKKwkucXVhZCBzeXNfc3BsaWNlCisJLnF1YWQgc3lzX3N5bmNfZmlsZV9yYW5nZQorCS5xdWFkIHN5c190ZWUKKwkucXVhZCBjb21wYXRfc3lzX3Ztc3BsaWNlCiBpYTMyX3N5c2NhbGxfZW5kOgkJCi0JLnJlcHQgSUEzMl9OUl9zeXNjYWxscy0oaWEzMl9zeXNjYWxsX2VuZC1pYTMyX3N5c19jYWxsX3RhYmxlKS84Ci0JCS5xdWFkIG5pX3N5c2NhbGwKLQkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCmluZGV4IGEwOThhMTEuLjA1OWM4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiAJCXB0cmFjZS5vIHRpbWUubyBpb3BvcnQubyBsZHQubyBzZXR1cC5vIGk4MjU5Lm8gc3lzX3g4Nl82NC5vIFwKIAkJeDg2NjRfa3N5bXMubyBpMzg3Lm8gc3lzY2FsbC5vIHZzeXNjYWxsLm8gXAogCQlzZXR1cDY0Lm8gYm9vdGZsYWcubyBlODIwLm8gcmVib290Lm8gcXVpcmtzLm8gaTgyMzcubyBcCi0JCWRtaV9zY2FuLm8gcGNpLWRtYS5vIHBjaS1ub21tdS5vCisJCXBjaS1kbWEubyBwY2ktbm9tbXUubwogCiBvYmotJChDT05GSUdfWDg2X01DRSkgICAgICAgICArPSBtY2Uubwogb2JqLSQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCSs9IG1jZV9pbnRlbC5vCkBAIC00OSw1ICs0OSwzIEBACiBxdWlya3MteQkJCSs9IC4uLy4uL2kzODYva2VybmVsL3F1aXJrcy5vCiBpODIzNy15CQkJCSs9IC4uLy4uL2kzODYva2VybmVsL2k4MjM3Lm8KIG1zci0kKHN1YnN0IG0seSwkKENPTkZJR19YODZfTVNSKSkgICs9IC4uLy4uL2kzODYva2VybmVsL21zci5vCi1kbWlfc2Nhbi15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvZG1pX3NjYW4ubwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCmluZGV4IGZmZmQ2YjAuLjcwYjlkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCkBAIC04MCw3ICs4MCw3IEBACiAJCXByaW50aygiQXBlcnR1cmUgZnJvbSAlcyBiZXlvbmQgNEdCLiBJZ25vcmluZy5cbiIsbmFtZSk7CiAJCXJldHVybiAwOyAKIAl9Ci0JaWYgKGU4MjBfbWFwcGVkKGFwZXJfYmFzZSwgYXBlcl9iYXNlICsgYXBlcl9zaXplLCBFODIwX1JBTSkpIHsgIAorCWlmIChlODIwX2FueV9tYXBwZWQoYXBlcl9iYXNlLCBhcGVyX2Jhc2UgKyBhcGVyX3NpemUsIEU4MjBfUkFNKSkgewogCQlwcmludGsoIkFwZXJ0dXJlIGZyb20gJXMgcG9pbnRpbmcgdG8gZTgyMCBSQU0uIElnbm9yaW5nLlxuIixuYW1lKTsKIAkJcmV0dXJuIDA7IAogCX0gCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwppbmRleCAyOTNjZDcxLi4xZWY2MDI4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCkBAIC03NiwxMSArNzYsMjIgQEAKIAkJKmFkZHJwID0gX19wYV9zeW1ib2woJl9lbmQpOwogCQlyZXR1cm4gMTsKIAl9CisKKwlpZiAobGFzdCA+PSBlYmRhX2FkZHIgJiYgYWRkciA8IGViZGFfYWRkciArIGViZGFfc2l6ZSkgeworCQkqYWRkcnAgPSBlYmRhX2FkZHIgKyBlYmRhX3NpemU7CisJCXJldHVybiAxOworCX0KKwogCS8qIFhYWCByYW1kaXNrIGltYWdlIGhlcmU/ICovIAogCXJldHVybiAwOwogfSAKIAotaW50IF9faW5pdCBlODIwX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkgCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYW55IHBhcnQgb2YgdGhlIHJhbmdlIDxzdGFydCxlbmQ+IGlzIG1hcHBlZAorICogd2l0aCB0eXBlLgorICovCitpbnQgX19tZW1pbml0CitlODIwX2FueV9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpCiB7IAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7IApAQCAtOTQsNiArMTA1LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZW50aXJlIHJhbmdlIDxzdGFydCxlbmQ+IGlzIG1hcHBlZCB3aXRoIHR5cGUuCisgKgorICogTm90ZTogdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGNvcnJlY3QgaWYgdGhlIGU4MjAgdGFibGUgaXMgc29ydGVkIGFuZAorICogbm90LW92ZXJsYXBwaW5nLCB3aGljaCBpcyB0aGUgY2FzZQorICovCitpbnQgX19pbml0IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJaWYgKHR5cGUgJiYgZWktPnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVnaW9uIChwYXJ0KSBpbiBvdmVybGFwIHdpdGggdGhlIGN1cnJlbnQgcmVnaW9uID8qLworCQlpZiAoZWktPmFkZHIgPj0gZW5kIHx8IGVpLT5hZGRyICsgZWktPnNpemUgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgcmVnaW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgPHN0YXJ0LGVuZD4gd2UgbW92ZQorCQkgKiBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24gc2luY2UgaXQncyBvayB1bnRpbCB0aGVyZQorCQkgKi8KKwkJaWYgKGVpLT5hZGRyIDw9IHN0YXJ0KQorCQkJc3RhcnQgPSBlaS0+YWRkciArIGVpLT5zaXplOworCQkvKiBpZiBzdGFydCBpcyBub3cgYXQgb3IgYmV5b25kIGVuZCwgd2UncmUgZG9uZSwgZnVsbCBjb3ZlcmFnZSAqLworCQlpZiAoc3RhcnQgPj0gZW5kKQorCQkJcmV0dXJuIDE7IC8qIHdlJ3JlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qIAogICogRmluZCBhIGZyZWUgYXJlYSBpbiBhIHNwZWNpZmljIHJhbmdlLiAKICAqLyAKQEAgLTEwOSw3ICsxNDksNyBAQAogCQkJYWRkciA9IHN0YXJ0OwogCQlpZiAoYWRkciA+IGVpLT5hZGRyICsgZWktPnNpemUpIAogCQkJY29udGludWU7IAotCQl3aGlsZSAoYmFkX2FkZHIoJmFkZHIsIHNpemUpICYmIGFkZHIrc2l6ZSA8IGVpLT5hZGRyICsgZWktPnNpemUpCisJCXdoaWxlIChiYWRfYWRkcigmYWRkciwgc2l6ZSkgJiYgYWRkcitzaXplIDw9IGVpLT5hZGRyK2VpLT5zaXplKQogCQkJOwogCQlsYXN0ID0gYWRkciArIHNpemU7CiAJCWlmIChsYXN0ID4gZWktPmFkZHIgKyBlaS0+c2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggODUzOGJmZS4uNTg2YjM0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTE4MCw2ICsxODAsMTAgQEAKICAqCiAgKiBYWFgJaWYgd2UgaGFkIGEgZnJlZSBzY3JhdGNoIHJlZ2lzdGVyIHdlIGNvdWxkIHNhdmUgdGhlIFJTUCBpbnRvIHRoZSBzdGFjayBmcmFtZQogICogICAgICBhbmQgcmVwb3J0IGl0IHByb3Blcmx5IGluIHBzLiBVbmZvcnR1bmF0ZWx5IHdlIGhhdmVuJ3QuCisgKgorICogV2hlbiB1c2VyIGNhbiBjaGFuZ2UgdGhlIGZyYW1lcyBhbHdheXMgZm9yY2UgSVJFVC4gVGhhdCBpcyBiZWNhdXNlCisgKiBpdCBkZWFscyB3aXRoIHVuY2Fub25pY2FsIGFkZHJlc3NlcyBiZXR0ZXIuIFNZU1JFVCBoYXMgdHJvdWJsZQorICogd2l0aCB0aGVtIGR1ZSB0byBidWdzIGluIGJvdGggQU1EIGFuZCBJbnRlbCBDUFVzLgogICovIAkJCSAJCQogCiBFTlRSWShzeXN0ZW1fY2FsbCkKQEAgLTI1NCw3ICsyNTgsMTAgQEAKIAl4b3JsICVlc2ksJWVzaSAjIG9sZHNldCAtPiBhcmcyCiAJY2FsbCBwdHJlZ3NjYWxsX2NvbW1vbgogMToJbW92bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVkaQotCWptcCBzeXNyZXRfY2hlY2sKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lLiBUaGlzCisJICAgd29ya3MgYmVjYXVzZSBwdHJlZ3NjYWxsX2NvbW1vbiBoYXMgY2FsbGVkIEZJWFVQX1RPUF9PRl9TVEFDSy4gKi8KKwljbGkKKwlqbXAgaW50X3dpdGhfY2hlY2sKIAkKIGJhZHN5czoKIAltb3ZxICQtRU5PU1lTLFJBWC1BUkdPRkZTRVQoJXJzcCkKQEAgLTI3NCwxMyArMjgxLDkgQEAKIAlqYSAgMWYKIAltb3ZxICVyMTAsJXJjeAkvKiBmaXh1cCBmb3IgQyAqLwogCWNhbGwgKnN5c19jYWxsX3RhYmxlKCwlcmF4LDgpCi0JbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKLTE6CVNBVkVfUkVTVAotCW1vdnEgJXJzcCwlcmRpCi0JY2FsbCBzeXNjYWxsX3RyYWNlX2xlYXZlCi0JUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgJXJieAotCVJFU1RPUkVfUkVTVAotCWptcCByZXRfZnJvbV9zeXNfY2FsbAorMToJbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKKwkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lICovCisJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQUk9DCiAJCQogLyogCkBAIC00MDgsMjUgKzQxMSw5IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAJQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCiAJU0FWRV9SRVNUCi0JbW92cSAlcjExLCAlcjE1Ci0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjE1CiAJRklYVVBfVE9QX09GX1NUQUNLICVyMTEKIAljYWxsIHN5c19leGVjdmUKLQlHRVRfVEhSRUFEX0lORk8oJXJjeCkKLQlidCAkVElGX0lBMzIsdGhyZWFkaW5mb19mbGFncyglcmN4KQotCUNGSV9SRU1FTUJFUl9TVEFURQotCWpjIGV4ZWNfMzJiaXQKIAlSRVNUT1JFX1RPUF9PRl9TVEFDSyAlcjExCi0JbW92cSAlcjE1LCAlcjExCi0JQ0ZJX1JFR0lTVEVSIHJpcCwgcjExCi0JUkVTVE9SRV9SRVNUCi0JcHVzaHEgJXIxMQotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JQ0ZJX1JFTF9PRkZTRVQgcmlwLCAwCi0JcmV0Ci0KLWV4ZWNfMzJiaXQ6Ci0JQ0ZJX1JFU1RPUkVfU1RBVEUKIAltb3ZxICVyYXgsUkFYKCVyc3ApCiAJUkVTVE9SRV9SRVNUCiAJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKaW5kZXggNzdiNGM2MC4uOWNjNzAzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yNzEsNiArMjcxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCisKKyNpZmRlZiBDT05GSUdfQUNQSQorCitzdGF0aWMgaW50IG52aWRpYV9ocGV0X2RldGVjdGVkIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IG52aWRpYV9ocGV0X2NoZWNrKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCW52aWRpYV9ocGV0X2RldGVjdGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKiBUZW1wb3JhcnkgSGFjay4gTnZpZGlhIGFuZCBWSUEgYm9hcmRzIGN1cnJlbnRseSBvbmx5IHdvcmsgd2l0aCBJTy1BUElDCiAgICBvZmYuIENoZWNrIGZvciBhbiBOdmlkaWEgb3IgVklBIFBDSSBicmlkZ2UgYW5kIHR1cm4gaXQgb2ZmLgogICAgVXNlIHBjaSBkaXJlY3QgaW5mcmFzdHJ1Y3R1cmUgYmVjYXVzZSB0aGlzIHJ1bnMgYmVmb3JlIHRoZSBQQ0kgc3Vic3lzdGVtLiAKQEAgLTMxNywxMSArMzI5LDE5IEBACiAJCQkJCXJldHVybjsKIAkJCQljYXNlIFBDSV9WRU5ET1JfSURfTlZJRElBOgogI2lmZGVmIENPTkZJR19BQ1BJCi0JCQkJCS8qIEFsbCB0aW1lciBvdmVycmlkZXMgb24gTnZpZGlhCi0JCQkJICAgICAgICAgICBzZWVtIHRvIGJlIHdyb25nLiBTa2lwIHRoZW0uICovCi0JCQkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gCi0JICAgICAiTnZpZGlhIGJvYXJkIGRldGVjdGVkLiBJZ25vcmluZyBBQ1BJIHRpbWVyIG92ZXJyaWRlLlxuIik7CisJCQkJCS8qCisJCQkJCSAqIEFsbCB0aW1lciBvdmVycmlkZXMgb24gTnZpZGlhIGFyZQorCQkJCQkgKiB3cm9uZyB1bmxlc3MgSFBFVCBpcyBlbmFibGVkLgorCQkJCQkgKi8KKwkJCQkJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAwOworCQkJCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfSFBFVCwKKwkJCQkJCQludmlkaWFfaHBldF9jaGVjayk7CisJCQkJCWlmIChudmlkaWFfaHBldF9kZXRlY3RlZCA9PSAwKSB7CisJCQkJCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTnZpZGlhIGJvYXJkICIKKwkJCQkJCSAgICAiZGV0ZWN0ZWQuIElnbm9yaW5nIEFDUEkgIgorCQkJCQkJICAgICJ0aW1lciBvdmVycmlkZS5cbiIpOworCQkJCQl9CiAjZW5kaWYKIAkJCQkJLyogUkVELVBFTiBza2lwIHRoZW0gb24gbXB0YWJsZXMgdG9vPyAqLwogCQkJCQlyZXR1cm47CkBAIC0xNzc3LDYgKzE3OTcsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CiAKK2ludCB0aW1lcl91c2VzX2lvYXBpY19waW5fMDsKKwogLyoKICAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKICAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQpAQCAtMTgxNCw2ICsxODM2LDkgQEAKIAlwaW4yICA9IGlvYXBpY19pODI1OS5waW47CiAJYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKIAorCWlmIChwaW4xID09IDApCisJCXRpbWVyX3VzZXNfaW9hcGljX3Bpbl8wID0gMTsKKwogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSxLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggYXBpYzE9JWQgcGluMT0lZCBhcGljMj0lZCBwaW4yPSVkXG4iLAogCQl2ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGFjY2JmZjMuLmZhMWQxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYwpAQCAtNTMsNyArNTMsNyBAQAogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgb3Bjb2RlIG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgZmxhZy4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90ICppbnNuKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90ICppbnNuKQogewogCXN3aXRjaCAoKmluc24pIHsKIAljYXNlIDB4ZmE6CQkvKiBjbGkgKi8KQEAgLTg0LDcgKzg0LDcgQEAKICAqIElmIGl0IGRvZXMsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgMzItYml0IGRpc3BsYWNlbWVudCB3b3JkLgogICogSWYgbm90LCByZXR1cm4gbnVsbC4KICAqLwotc3RhdGljIGlubGluZSBzMzIgKmlzX3JpcHJlbCh1OCAqaW5zbikKK3N0YXRpYyBzMzIgX19rcHJvYmVzICppc19yaXByZWwodTggKmluc24pCiB7CiAjZGVmaW5lIFcocm93LGIwLGIxLGIyLGIzLGI0LGI1LGI2LGI3LGI4LGI5LGJhLGJiLGJjLGJkLGJlLGJmKQkJICAgICAgXAogCSgoKGIwIyNVTCA8PCAweDApfChiMSMjVUwgPDwgMHgxKXwoYjIjI1VMIDw8IDB4Mil8KGIzIyNVTCA8PCAweDMpIHwgICBcCkBAIC0yMjksNyArMjI5LDcgQEAKIAltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJa2NiLT5wcmV2X2twcm9iZS5rcCA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJa2NiLT5wcmV2X2twcm9iZS5zdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAlrY2ItPnByZXZfa3Byb2JlLnNhdmVkX3JmbGFncyA9IGtjYi0+a3Byb2JlX3NhdmVkX3JmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CiAJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlrY2ItPmtwcm9iZV9zYXZlZF9yZmxhZ3MgPSBrY2ItPnByZXZfa3Byb2JlLnNhdmVkX3JmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CkBAIC01MTQsMTMgKzUxNCwxMyBAQAogCQkqdG9zID0gb3JpZ19yaXAgKyAoKnRvcyAtIGNvcHlfcmlwKTsKIAkJYnJlYWs7CiAJY2FzZSAweGZmOgotCQlpZiAoKCppbnNuICYgMHgzMCkgPT0gMHgxMCkgeworCQlpZiAoKGluc25bMV0gJiAweDMwKSA9PSAweDEwKSB7CiAJCQkvKiBjYWxsIGFic29sdXRlLCBpbmRpcmVjdCAqLwogCQkJLyogRml4IHJldHVybiBhZGRyOyByaXAgaXMgY29ycmVjdC4gKi8KIAkJCW5leHRfcmlwID0gcmVncy0+cmlwOwogCQkJKnRvcyA9IG9yaWdfcmlwICsgKCp0b3MgLSBjb3B5X3JpcCk7Ci0JCX0gZWxzZSBpZiAoKCgqaW5zbiAmIDB4MzEpID09IDB4MjApIHx8CS8qIGptcCBuZWFyLCBhYnNvbHV0ZSBpbmRpcmVjdCAqLwotCQkJICAgKCgqaW5zbiAmIDB4MzEpID09IDB4MjEpKSB7CS8qIGptcCBmYXIsIGFic29sdXRlIGluZGlyZWN0ICovCisJCX0gZWxzZSBpZiAoKChpbnNuWzFdICYgMHgzMSkgPT0gMHgyMCkgfHwJLyogam1wIG5lYXIsIGFic29sdXRlIGluZGlyZWN0ICovCisJCQkgICAoKGluc25bMV0gJiAweDMxKSA9PSAweDIxKSkgewkvKiBqbXAgZmFyLCBhYnNvbHV0ZSBpbmRpcmVjdCAqLwogCQkJLyogcmlwIGlzIGNvcnJlY3QuICovCiAJCQluZXh0X3JpcCA9IHJlZ3MtPnJpcDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCmluZGV4IDEwYjNlMzQuLmM2OWZjNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKQEAgLTI5LDYgKzI5LDggQEAKICNkZWZpbmUgTUlTQ19NQ0VMT0dfTUlOT1IgMjI3CiAjZGVmaW5lIE5SX0JBTktTIDYKIAorYXRvbWljX3QgbWNlX2VudHJ5OworCiBzdGF0aWMgaW50IG1jZV9kb250X2luaXQ7CiAKIC8qIDA6IGFsd2F5cyBwYW5pYywgMTogcGFuaWMgaWYgZGVhZGxvY2sgcG9zc2libGUsIDI6IHRyeSB0byBhdm9pZCBwYW5pYywKQEAgLTE3MiwxMCArMTc0LDEyIEBACiAJaW50IGk7CiAJaW50IHBhbmljbV9mb3VuZCA9IDA7CiAKKwlhdG9taWNfaW5jKCZtY2VfZW50cnkpOworCiAJaWYgKHJlZ3MpCiAJCW5vdGlmeV9kaWUoRElFX05NSSwgIm1hY2hpbmUgY2hlY2siLCByZWdzLCBlcnJvcl9jb2RlLCAxOCwgU0lHS0lMTCk7CiAJaWYgKCFiYW5rcykKLQkJcmV0dXJuOworCQlnb3RvIG91dDI7CiAKIAltZW1zZXQoJm0sIDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7CiAJbS5jcHUgPSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTI2Niw2ICsyNzAsOCBAQAogIG91dDoKIAkvKiBMYXN0IHRoaW5nIGRvbmUgaW4gdGhlIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIHRvIGNsZWFyIHN0YXRlLiAqLwogCXdybXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCAwKTsKKyBvdXQyOgorCWF0b21pY19kZWMoJm1jZV9lbnRyeSk7CiB9CiAKIC8qCkBAIC02MjMsNyArNjI5LDcgQEAKICNlbmRpZgogCiAvKiBHZXQgbm90aWZpZWQgd2hlbiBhIGNwdSBjb21lcyBvbi9vZmYuIEJlIGhvdHBsdWcgZnJpZW5kbHkuICovCi1zdGF0aWMgX19jcHVpbml0IGludAorc3RhdGljIGludAogbWNlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZV9hbWQuYwppbmRleCBkM2FkN2Q4Li5kMTNiMjQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2VfYW1kLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogI2VuZGlmCiAKIC8qIGdldCBub3RpZmllZCB3aGVuIGEgY3B1IGNvbWVzIG9uL29mZiAqLwotc3RhdGljIF9fY3B1aW5pdCBpbnQgdGhyZXNob2xkX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKK3N0YXRpYyBpbnQgdGhyZXNob2xkX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCS8qIGNwdSB3YXMgdW5zaWduZWQgaW50IHRvIGJlZ2luIHdpdGggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IGIxN2NmM2UuLjA4M2RhN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21wcGFyc2UuYwpAQCAtOTY4LDcgKzk2OCwxNyBAQAogCQkgKi8KIAkJaW50IGlycSA9IGdzaTsKIAkJaWYgKGdzaSA8IE1BWF9HU0lfTlVNKSB7Ci0JCQlpZiAoZ3NpID4gMTUpCisJCQkvKgorCQkJICogUmV0YWluIHRoZSBWSUEgY2hpcHNldCB3b3JrLWFyb3VuZCAoZ3NpID4gMTUpLCBidXQKKwkJCSAqIGF2b2lkIGEgcHJvYmxlbSB3aGVyZSB0aGUgODI1NCB0aW1lciAoSVJRMCkgaXMgc2V0dXAKKwkJCSAqIHZpYSBhbiBvdmVycmlkZSAoc28gaXQncyBub3Qgb24gcGluIDAgb2YgdGhlIGlvYXBpYyksCisJCQkgKiBhbmQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHBpbiAwIGludGVycnVwdCBpcyBhIFBDSQorCQkJICogdHlwZS4gIFRoZSBnc2kgPiAxNSB0ZXN0IGNvdWxkIGNhdXNlIHRoZXNlIHR3byBwaW5zCisJCQkgKiB0byBiZSBzaGFyZWQgYXMgSVJRMCwgYW5kIHRoZXkgYXJlIG5vdCBzaGFyZWFibGUuCisJCQkgKiBTbyB0ZXN0IGZvciB0aGlzIGNvbmRpdGlvbiwgYW5kIGlmIG5lY2Vzc2FyeSwgYXZvaWQKKwkJCSAqIHRoZSBwaW4gY29sbGlzaW9uLgorCQkJICovCisJCQlpZiAoZ3NpID4gMTUgfHwgKGdzaSA9PSAwICYmICF0aW1lcl91c2VzX2lvYXBpY19waW5fMCkpCiAJCQkJZ3NpID0gcGNpX2lycSsrOwogCQkJLyoKIAkJCSAqIERvbid0IGFzc2lnbiBJUlEgdXNlZCBieSBBQ1BJIFNDSQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCmluZGV4IGQ5ZTQwNjcuLjRlNjM1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgogCiAvKgogICogbGFwaWNfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXBpYyBOTUkgaGFyZHdhcmU6CkBAIC00ODAsNiArNDgxLDEyIEBACiAJCV9fZ2V0X2NwdV92YXIobm1pX3RvdWNoKSA9IDA7CiAJCXRvdWNoZWQgPSAxOwogCX0KKyNpZmRlZiBDT05GSUdfWDg2X01DRQorCS8qIENvdWxkIGNoZWNrIG9vcHNfaW5fcHJvZ3Jlc3MgaGVyZSB0b28sIGJ1dCBpdCdzIHNhZmVyCisJICAgbm90IHRvbyAqLworCWlmIChhdG9taWNfcmVhZCgmbWNlX2VudHJ5KSA+IDApCisJCXRvdWNoZWQgPSAxOworI2VuZGlmCiAJaWYgKCF0b3VjaGVkICYmIF9fZ2V0X2NwdV92YXIobGFzdF9pcnFfc3VtKSA9PSBzdW0pIHsKIAkJLyoKIAkJICogQXlpZWUsIGxvb2tzIGxpa2UgdGhpcyBDUFUgaXMgc3R1Y2sgLi4uCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYwppbmRleCAwM2M5ZWVlLi5hOTI3NWM5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jCkBAIC00OCwxMCArNDgsMTYgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgbm9kZTsKKyNpZmRlZiBDT05GSUdfUENJCiAJaWYgKGRldi0+YnVzID09ICZwY2lfYnVzX3R5cGUpCiAJCW5vZGUgPSBwY2lidXNfdG9fbm9kZSh0b19wY2lfZGV2KGRldiktPmJ1cyk7CiAJZWxzZQorI2VuZGlmCiAJCW5vZGUgPSBudW1hX25vZGVfaWQoKTsKKworCWlmIChub2RlIDwgZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApKQorCQlub2RlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOworCiAJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBvcmRlcik7CiAJcmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYwppbmRleCBhNmMwMWUxLi44MmE3YzliIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYwpAQCAtMTEyLDEwICsxMTIsNiBAQAogc3RhdGljIHZvaWQgZnJlZV9pb21tdSh1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IHNpemUpCiB7IAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaWYgKHNpemUgPT0gMSkgeyAKLQkJY2xlYXJfYml0KG9mZnNldCwgaW9tbXVfZ2FydF9iaXRtYXApOyAKLQkJcmV0dXJuOwotCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXVfYml0bWFwX2xvY2ssIGZsYWdzKTsKIAlfX2NsZWFyX2JpdF9zdHJpbmcoaW9tbXVfZ2FydF9iaXRtYXAsIG9mZnNldCwgc2l6ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXVfYml0bWFwX2xvY2ssIGZsYWdzKTsKQEAgLTYzNSwxNCArNjMxLDIwIEBACiAJCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IERpc2FibGluZyBJT01NVS5cbiIpOwogCQlpZiAoZW5kX3BmbiA+IE1BWF9ETUEzMl9QRk4pIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBtb3JlIHRoYW4gNEdCIG9mIG1lbW9yeSAiCi0JCQkJCSJidXQgSU9NTVUgbm90IGNvbXBpbGVkIGluLlxuIgotCQkJICAgICAgIEtFUk5fRVJSICJXQVJOSU5HIDMyYml0IFBDSSBtYXkgbWFsZnVuY3Rpb24uXG4iCi0JCQkgICAgICAgS0VSTl9FUlIgIllvdSBtaWdodCB3YW50IHRvIGVuYWJsZSAiCi0JCQkJCSJDT05GSUdfR0FSVF9JT01NVVxuIik7CisJCQkJCSJidXQgSU9NTVUgbm90IGF2YWlsYWJsZS5cbiIKKwkJCSAgICAgICBLRVJOX0VSUiAiV0FSTklORyAzMmJpdCBQQ0kgbWF5IG1hbGZ1bmN0aW9uLlxuIik7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KIAorCWkgPSAwOworCWZvcl9hbGxfbmIoZGV2KQorCQlpKys7CisJaWYgKGkgPiBNQVhfTkIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0ktR0FSVDogVG9vIG1hbnkgbm9ydGhicmlkZ2VzICglbGQpLiBEaXNhYmxlZFxuIiwgaSk7CisJCXJldHVybiAtMTsKKwl9CisKIAlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiB1c2luZyBHQVJUIElPTU1VLlxuIik7CiAJYXBlcl9zaXplID0gaW5mby5hcGVyX3NpemUgKiAxMDI0ICogMTAyNDsJCiAJaW9tbXVfc2l6ZSA9IGNoZWNrX2lvbW11X3NpemUoaW5mby5hcGVyX2Jhc2UsIGFwZXJfc2l6ZSk7IApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1ub21tdS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1ub21tdS5jCmluZGV4IDQ0YWRjYzIuLjFmNmVjYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktbm9tbXUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLW5vbW11LmMKQEAgLTEyLDkgKzEyLDEwIEBACiBjaGVja19hZGRyKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGJ1cywgc2l6ZV90IHNpemUpCiB7CiAgICAgICAgIGlmIChod2RldiAmJiBidXMgKyBzaXplID4gKmh3ZGV2LT5kbWFfbWFzaykgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICJub21tdV8lczogb3ZlcmZsb3cgJUx4KyVsdSBvZiBkZXZpY2UgbWFzayAlTHhcbiIsCi0JICAgICAgIG5hbWUsIChsb25nIGxvbmcpYnVzLCBzaXplLCAobG9uZyBsb25nKSpod2Rldi0+ZG1hX21hc2spOworCQlpZiAoKmh3ZGV2LT5kbWFfbWFzayA+PSAweGZmZmZmZmZmVUxMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgIm5vbW11XyVzOiBvdmVyZmxvdyAlTHgrJWx1IG9mIGRldmljZSBtYXNrICVMeFxuIiwKKwkgICAgICAgCQkJbmFtZSwgKGxvbmcgbG9uZylidXMsIHNpemUsIChsb25nIGxvbmcpKmh3ZGV2LT5kbWFfbWFzayk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wbXRpbWVyLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcG10aW1lci5jCmluZGV4IGIwNDQ0YTQuLmJmNDIxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wbXRpbWVyLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BtdGltZXIuYwpAQCAtNjgsNyArNjgsNyBAQAogCW9mZnNldF9kZWxheSA9IGRlbHRhICUgKFVTRUNfUEVSX1NFQyAvIEhaKTsKIAogCXJkdHNjbGwodHNjKTsKLQl2eHRpbWUubGFzdF90c2MgPSB0c2MgLSBvZmZzZXRfZGVsYXkgKiBjcHVfa2h6OworCXZ4dGltZS5sYXN0X3RzYyA9IHRzYyAtIG9mZnNldF9kZWxheSAqICh1NjQpY3B1X2toeiAvIDEwMDA7CiAKIAkvKiBkb24ndCBjYWxjdWxhdGUgZGVsYXkgZm9yIGZpcnN0IHJ1biwKIAkgICBvciBpZiB3ZSd2ZSBnb3QgbGVzcyB0aGVuIGEgdGljayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzBkZDhlNS4uZmI5MDNlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01NzUsOCArNTc1LDEwIEBACiAJcHJldi0+dXNlcnJzcCA9IHJlYWRfcGRhKG9sZHJzcCk7IAogCXdyaXRlX3BkYShvbGRyc3AsIG5leHQtPnVzZXJyc3ApOyAKIAl3cml0ZV9wZGEocGN1cnJlbnQsIG5leHRfcCk7IAorCiAJLyogVGhpcyBtdXN0IGJlIGhlcmUgdG8gZW5zdXJlIGJvdGggbWF0aF9zdGF0ZV9yZXN0b3JlKCkgYW5kCi0JICAga2VybmVsX2ZwdV9iZWdpbigpIHdvcmsgY29uc2lzdGVudGx5LiAqLworCSAgIGtlcm5lbF9mcHVfYmVnaW4oKSB3b3JrIGNvbnNpc3RlbnRseS4gCisJICAgQW5kIHRoZSBBTUQgd29ya2Fyb3VuZCByZXF1aXJlcyBpdCB0byBiZSBhZnRlciBEUyByZWxvYWQuICovCiAJdW5sYXp5X2ZwdShwcmV2X3ApOwogCXdyaXRlX3BkYShrZXJuZWxzdGFjaywKIAkJICB0YXNrX3N0YWNrX3BhZ2UobmV4dF9wKSArIFRIUkVBRF9TSVpFIC0gUERBX1NUQUNLT0ZGU0VUKTsKQEAgLTc4MSwxMCArNzgzLDE2IEBACiAJfQogCWNhc2UgQVJDSF9HRVRfR1M6IHsgCiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwkJdW5zaWduZWQgZ3NpbmRleDsKIAkJaWYgKHRhc2stPnRocmVhZC5nc2luZGV4ID09IEdTX1RMU19TRUwpCiAJCQliYXNlID0gcmVhZF8zMmJpdF90bHModGFzaywgR1NfVExTKTsKLQkJZWxzZSBpZiAoZG9pdCkKLQkJCXJkbXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGJhc2UpOworCQllbHNlIGlmIChkb2l0KSB7CisgCQkJYXNtKCJtb3ZsICUlZ3MsJTAiIDogIj1yIiAoZ3NpbmRleCkpOworCQkJaWYgKGdzaW5kZXgpCisJCQkJcmRtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgYmFzZSk7CisJCQllbHNlCisJCQkJYmFzZSA9IHRhc2stPnRocmVhZC5nczsKKwkJfQogCQllbHNlCiAJCQliYXNlID0gdGFzay0+dGhyZWFkLmdzOwogCQlyZXQgPSBwdXRfdXNlcihiYXNlLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhZGRyKTsgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZDQ0YjJjMS4uMmQ1MDAyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjc0LDExICsyNzQsNiBAQAogCQkJCXJldHVybiAtRUlPOwogCQkJdmFsdWUgJj0gMHhmZmZmOwogCQkJYnJlYWs7Ci0JCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsIHJpcCk6Ci0JCQkvKiBDaGVjayBpZiB0aGUgbmV3IFJJUCBhZGRyZXNzIGlzIGNhbm9uaWNhbCAqLwotCQkJaWYgKHZhbHVlID49IFRBU0tfU0laRV9PRihjaGlsZCkpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQlicmVhazsKIAl9CiAJcHV0X3N0YWNrX2xvbmcoY2hpbGQsIHJlZ25vIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwgdmFsdWUpOwogCXJldHVybiAwOwpAQCAtNjA1LDEyICs2MDAsMTIgQEAKIAogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkgewogCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikpIHsKLQkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgQVVESVRfQVJDSF9JMzg2LAorCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShBVURJVF9BUkNIX0kzODYsCiAJCQkJCSAgICByZWdzLT5vcmlnX3JheCwKIAkJCQkJICAgIHJlZ3MtPnJieCwgcmVncy0+cmN4LAogCQkJCQkgICAgcmVncy0+cmR4LCByZWdzLT5yc2kpOwogCQl9IGVsc2UgewotCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCBBVURJVF9BUkNIX1g4Nl82NCwKKwkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoQVVESVRfQVJDSF9YODZfNjQsCiAJCQkJCSAgICByZWdzLT5vcmlnX3JheCwKIAkJCQkJICAgIHJlZ3MtPnJkaSwgcmVncy0+cnNpLAogCQkJCQkgICAgcmVncy0+cmR4LCByZWdzLT5yMTApOwpAQCAtNjIxLDcgKzYxNiw3IEBACiBhc21saW5rYWdlIHZvaWQgc3lzY2FsbF90cmFjZV9sZWF2ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5yYXgpLCByZWdzLT5yYXgpOworCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+cmF4KSwgcmVncy0+cmF4KTsKIAogCWlmICgodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkKIAkgICAgIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCAwODU2YWQ0Li42NTViOTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtMzUzLDggKzM1MywxMCBAQAogCQlpZiAoZnVsbGFyZyhmcm9tLCAiZW5hYmxlX3RpbWVyX3Bpbl8xIikpCiAJCQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gLTE7CiAKLQkJaWYgKGZ1bGxhcmcoZnJvbSwgIm5vbGFwaWMiKSB8fCBmdWxsYXJnKGZyb20sICJkaXNhYmxlYXBpYyIpKQorCQlpZiAoZnVsbGFyZyhmcm9tLCAibm9sYXBpYyIpIHx8IGZ1bGxhcmcoZnJvbSwgImRpc2FibGVhcGljIikpIHsKKwkJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9BUElDLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKIAkJCWRpc2FibGVfYXBpYyA9IDE7CisJCX0KIAogCQlpZiAoZnVsbGFyZyhmcm9tLCAibm9hcGljIikpCiAJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7CkBAIC01NjksMTcgKzU3MSwyOCBAQAogI2VuZGlmCiAKICNkZWZpbmUgRUJEQV9BRERSX1BPSU5URVIgMHg0MEUKLXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2ViZGFfcmVnaW9uKHZvaWQpCisKK3Vuc2lnbmVkIF9faW5pdGRhdGEgZWJkYV9hZGRyOwordW5zaWduZWQgX19pbml0ZGF0YSBlYmRhX3NpemU7CisKK3N0YXRpYyB2b2lkIGRpc2NvdmVyX2ViZGEodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgYWRkcjsKLQkvKiogCisJLyoKIAkgKiB0aGVyZSBpcyBhIHJlYWwtbW9kZSBzZWdtZW50ZWQgcG9pbnRlciBwb2ludGluZyB0byB0aGUgCiAJICogNEsgRUJEQSBhcmVhIGF0IDB4NDBFCiAJICovCi0JYWRkciA9ICoodW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoRUJEQV9BRERSX1BPSU5URVIpOwotCWFkZHIgPDw9IDQ7Ci0JaWYgKGFkZHIpCi0JCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKGFkZHIsIFBBR0VfU0laRSk7CisJZWJkYV9hZGRyID0gKih1bnNpZ25lZCBzaG9ydCAqKUVCREFfQUREUl9QT0lOVEVSOworCWViZGFfYWRkciA8PD0gNDsKKworCWViZGFfc2l6ZSA9ICoodW5zaWduZWQgc2hvcnQgKikodW5zaWduZWQgbG9uZyllYmRhX2FkZHI7CisKKwkvKiBSb3VuZCBFQkRBIHVwIHRvIHBhZ2VzICovCisJaWYgKGViZGFfc2l6ZSA9PSAwKQorCQllYmRhX3NpemUgPSAxOworCWViZGFfc2l6ZSA8PD0gMTA7CisJZWJkYV9zaXplID0gcm91bmRfdXAoZWJkYV9zaXplICsgKGViZGFfYWRkciAmIH5QQUdFX01BU0spLCBQQUdFX1NJWkUpOworCWlmIChlYmRhX3NpemUgPiA2NCoxMDI0KQorCQllYmRhX3NpemUgPSA2NCoxMDI0OwogfQogCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCkBAIC02MjUsNiArNjM4LDggQEAKIAogCWNoZWNrX2VmZXIoKTsKIAorCWRpc2NvdmVyX2ViZGEoKTsKKwogCWluaXRfbWVtb3J5X21hcHBpbmcoMCwgKGVuZF9wZm5fbWFwIDw8IFBBR0VfU0hJRlQpKTsKIAogCWRtaV9zY2FuX21hY2hpbmUoKTsKQEAgLTY2Nyw3ICs2ODIsOCBAQAogCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKDAsIFBBR0VfU0laRSk7CiAKIAkvKiByZXNlcnZlIGViZGEgcmVnaW9uICovCi0JcmVzZXJ2ZV9lYmRhX3JlZ2lvbigpOworCWlmIChlYmRhX2FkZHIpCisJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKGViZGFfYWRkciwgZWJkYV9zaXplKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAkvKgpAQCAtOTI4LDYgKzk0NCwxMCBAQAogCWlmIChjLT54ODYgPT0gMTUgJiYgKChsZXZlbCA+PSAweDBmNDggJiYgbGV2ZWwgPCAweDBmNTApIHx8IGxldmVsID49IDB4MGY1OCkpCiAJCXNldF9iaXQoWDg2X0ZFQVRVUkVfUkVQX0dPT0QsICZjLT54ODZfY2FwYWJpbGl0eSk7CiAKKwkvKiBFbmFibGUgd29ya2Fyb3VuZCBmb3IgRlhTQVZFIGxlYWsgKi8KKwlpZiAoYy0+eDg2ID49IDYpCisJCXNldF9iaXQoWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUssICZjLT54ODZfY2FwYWJpbGl0eSk7CisKIAlyID0gZ2V0X21vZGVsX25hbWUoYyk7CiAJaWYgKCFyKSB7IAogCQlzd2l0Y2ggKGMtPng4NikgeyAKQEAgLTEwMzEsNyArMTA1MSw3IEBACiAJICAgZm9yIG5vdy4gKi8KIAlub2RlID0gYXBpY2lkX3RvX25vZGVbaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCldOwogCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkKLQkJbm9kZSA9IDA7CisJCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CiAJbnVtYV9zZXRfbm9kZShjcHUsIG5vZGUpOwogCiAJaWYgKGFjcGlfbnVtYSA+IDApCkBAIC0xNDIwLDMgKzE0NDAsMjIgQEAKIAkuc2hvdyA9CXNob3dfY3B1aW5mbywKIH07CiAKKyNpZmRlZiBDT05GSUdfSU5QVVRfUENTUEtSCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CitzdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCmluZGV4IGVmOGJjNDYuLjczOTI1NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJdW5zaWduZWQgaW50IAkJbnRpbWVyOwogCiAJaWYgKCF2eHRpbWUuaHBldF9hZGRyZXNzKQotICAgICAgICAJcmV0dXJuIC0xOworICAgICAgICAJcmV0dXJuIDA7CiAKIAltZW1zZXQoJmhkLCAwLCBzaXplb2YgKGhkKSk7CiAKQEAgLTkxNyw2ICs5MTcsOCBAQAogCQl2eHRpbWUuaHBldF9hZGRyZXNzID0gMDsKIAogCWlmIChocGV0X3VzZV90aW1lcikgeworCQkvKiBzZXQgdGlja19uc2VjIHRvIHVzZSB0aGUgcHJvcGVyIHJhdGUgZm9yIEhQRVQgKi8KKwkgIAl0aWNrX25zZWMgPSBUSUNLX05TRUNfSFBFVDsKIAkJY3B1X2toeiA9IGhwZXRfY2FsaWJyYXRlX3RzYygpOwogCQl0aW1lbmFtZSA9ICJIUEVUIjsKICNpZmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jCmluZGV4IDZiZGEzMjIuLmNlYTMzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTAxLDYgKzEwMiw4IEBACiB7CiAJaWYgKHJlZ3MtPmVmbGFncyAmIFg4Nl9FRkxBR1NfSUYpCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJLyogTWFrZSBzdXJlIHRvIG5vdCBzY2hlZHVsZSBoZXJlIGJlY2F1c2Ugd2UgY291bGQgYmUgcnVubmluZworCSAgIG9uIGFuIGV4Y2VwdGlvbiBzdGFjay4gKi8KIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiB9CiAKQEAgLTM4NCw2ICszODcsNyBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIHN0YXRpYyBpbnQgZGllX293bmVyID0gLTE7CitzdGF0aWMgdW5zaWduZWQgaW50IGRpZV9uZXN0X2NvdW50OwogCiB1bnNpZ25lZCBfX2twcm9iZXMgbG9uZyBvb3BzX2JlZ2luKHZvaWQpCiB7CkBAIC0zOTgsNiArNDAyLDcgQEAKIAkJZWxzZQogCQkJc3Bpbl9sb2NrKCZkaWVfbG9jayk7CiAJfQorCWRpZV9uZXN0X2NvdW50Kys7CiAJZGllX293bmVyID0gY3B1OwogCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwpAQCAtNDA4LDcgKzQxMywxMyBAQAogeyAKIAlkaWVfb3duZXIgPSAtMTsKIAlidXN0X3NwaW5sb2NrcygwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWVfbG9jaywgZmxhZ3MpOworCWRpZV9uZXN0X2NvdW50LS07CisJaWYgKGRpZV9uZXN0X2NvdW50KQorCQkvKiBXZSBzdGlsbCBvd24gdGhlIGxvY2sgKi8KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWVsc2UKKwkJLyogTmVzdCBjb3VudCByZWFjaGVzIHplcm8sIHJlbGVhc2UgdGhlIGxvY2suICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZV9sb2NrLCBmbGFncyk7CiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJPb3BzIik7CiB9CkBAIC00MzMsNiArNDQ0LDggQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiUklQICIpOwogCXByaW50a19hZGRyZXNzKHJlZ3MtPnJpcCk7IAogCXByaW50aygiIFJTUCA8JTAxNmx4PlxuIiwgcmVncy0+cnNwKTsgCisJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKKwkJY3Jhc2hfa2V4ZWMocmVncyk7CiB9CiAKIHZvaWQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpCkBAIC00NTUsMTAgKzQ2OCwxNCBAQAogCSAqLwogCXByaW50ayhzdHIsIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlzaG93X3JlZ2lzdGVycyhyZWdzKTsKKwlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpKQorCQljcmFzaF9rZXhlYyhyZWdzKTsKIAlpZiAocGFuaWNfb25fdGltZW91dCB8fCBwYW5pY19vbl9vb3BzKQogCQlwYW5pYygibm1pIHdhdGNoZG9nIik7CiAJcHJpbnRrKCJjb25zb2xlIHNodXRzIHVwIC4uLlxuIik7CiAJb29wc19lbmQoZmxhZ3MpOworCW5taV9leGl0KCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTQ2OCw4ICs0ODUsNiBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKLQogCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwogCXRzay0+dGhyZWFkLnRyYXBfbm8gPSB0cmFwbnI7CiAKQEAgLTUwNiw2ICs1MjEsNyBAQAogCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBuciwgc2lnbnIpIFwKIAkJCQkJCQk9PSBOT1RJRllfU1RPUCkgXAogCQlyZXR1cm47IFwKKwljb25kaXRpb25hbF9zdGkocmVncyk7CQkJCQkJXAogCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsgXAogfQogCkBAIC01MjAsNiArNTM2LDcgQEAKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKSBcCiAJCQkJCQkJPT0gTk9USUZZX1NUT1ApIFwKIAkJcmV0dXJuOyBcCisJY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwkJCQkJCVwKIAlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgJmluZm8pOyBcCiB9CiAKQEAgLTUzMyw3ICs1NTAsMTcgQEAKIERPX0VSUk9SKDExLCBTSUdCVVMsICAic2VnbWVudCBub3QgcHJlc2VudCIsIHNlZ21lbnRfbm90X3ByZXNlbnQpCiBET19FUlJPUl9JTkZPKDE3LCBTSUdCVVMsICJhbGlnbm1lbnQgY2hlY2siLCBhbGlnbm1lbnRfY2hlY2ssIEJVU19BRFJBTE4sIDApCiBET19FUlJPUigxOCwgU0lHU0VHViwgInJlc2VydmVkIiwgcmVzZXJ2ZWQpCi1ET19FUlJPUigxMiwgU0lHQlVTLCAgInN0YWNrIHNlZ21lbnQiLCBzdGFja19zZWdtZW50KQorCisvKiBSdW5zIG9uIElTVCBzdGFjayAqLworYXNtbGlua2FnZSB2b2lkIGRvX3N0YWNrX3NlZ21lbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK3sKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgInN0YWNrIHNlZ21lbnQiLCByZWdzLCBlcnJvcl9jb2RlLAorCQkJMTIsIFNJR0JVUykgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKwlwcmVlbXB0X2NvbmRpdGlvbmFsX3N0aShyZWdzKTsKKwlkb190cmFwKDEyLCBTSUdCVVMsICJzdGFjayBzZWdtZW50IiwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CisJcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7Cit9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19kb3VibGVfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC02NjcsOCArNjk0LDkgQEAKIAlpZiAobm90aWZ5X2RpZShESUVfSU5UMywgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCAzLCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkgewogCQlyZXR1cm47CiAJfQorCXByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwogCWRvX3RyYXAoMywgU0lHVFJBUCwgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsKLQlyZXR1cm47CisJcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7CiB9CiAKIC8qIEhlbHAgaGFuZGxlciBydW5uaW5nIG9uIElTVCBzdGFjayB0byBzd2l0Y2ggYmFjayB0byB1c2VyIHN0YWNrCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDM5ZmYwNzAuLmI4MWY0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02NSw3ICs2NSw3IEBACiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewogCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAgIH0KLSAgLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOworICAuID0gQUxJR04oQ09ORklHX1g4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMpOwogICAuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpIC0gTE9BRF9PRkZTRVQpIHsKICAgCSooLmRhdGEucmVhZF9tb3N0bHkpCiAgIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKaW5kZXggZDc4ZjQ2MC4uMWRlZjIxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKQEAgLTExMiw3ICsxMTIsNiBAQAogI3VuZGVmIG1lbWNweQogI3VuZGVmIG1lbXNldAogI3VuZGVmIG1lbW1vdmUKLSN1bmRlZiBzdHJsZW4KIAogZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOwogZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKQEAgLTEyMSw4ICsxMjAsNiBAQAogZXh0ZXJuIHZvaWQgKiBfX21lbWNweSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CiAKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKLUVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChfX21lbWNweSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKaW5kZXggZTVmN2YxYy4uNGJhMzRlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCWlmIChwYWRkciA+PSBlbmQpCiAJCQlicmVhazsKIAotCQlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgIWU4MjBfbWFwcGVkKHBhZGRyLCBwYWRkcitQVURfU0laRSwgMCkpIHsKKwkJaWYgKCFhZnRlcl9ib290bWVtICYmICFlODIwX2FueV9tYXBwZWQocGFkZHIsIHBhZGRyK1BVRF9TSVpFLCAwKSkgewogCQkJc2V0X3B1ZChwdWQsIF9fcHVkKDApKTsgCiAJCQljb250aW51ZTsKIAkJfSAKQEAgLTUwNyw5ICs1MDcsOCBAQAogCiAvKgogICogTWVtb3J5IGhvdHBsdWcgc3BlY2lmaWMgZnVuY3Rpb25zCi0gKiBUaGVzZSBhcmUgb25seSBmb3Igbm9uLU5VTUEgbWFjaGluZXMgcmlnaHQgbm93LgogICovCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCisjaWYgZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWSkgfHwgZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWV9NT0RVTEUpCiAKIHZvaWQgb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC01MjAsNiArNTE5LDM4IEBACiAJbnVtX3BoeXNwYWdlcysrOwogfQogCisjaWZuZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworLyoKKyAqIE1lbW9yeSBIb3RhZGQgd2l0aG91dCBzcGFyc2VtZW0uIFRoZSBtZW1fbWFwcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIGFkdmFuY2UsCisgKiBqdXN0IG9ubGluZSB0aGUgcGFnZXMuCisgKi8KK2ludCBfX2FkZF9wYWdlcyhzdHJ1Y3Qgem9uZSAqeiwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCit7CisJaW50IGVyciA9IC1FSU87CisJdW5zaWduZWQgbG9uZyBwZm47CisJdW5zaWduZWQgbG9uZyB0b3RhbCA9IDAsIG1lbSA9IDA7CisJZm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiA8IHN0YXJ0X3BmbiArIG5yX3BhZ2VzOyBwZm4rKykgeworCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJCW9ubGluZV9wYWdlKHBmbl90b19wYWdlKHBmbikpOworCQkJZXJyID0gMDsKKwkJCW1lbSsrOworCQl9CisJCXRvdGFsKys7CisJfQorCWlmICghZXJyKSB7CisJCXotPnNwYW5uZWRfcGFnZXMgKz0gdG90YWw7CisJCXotPnByZXNlbnRfcGFnZXMgKz0gbWVtOworCQl6LT56b25lX3BnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXMgKz0gdG90YWw7CisJCXotPnpvbmVfcGdkYXQtPm5vZGVfcHJlc2VudF9wYWdlcyArPSBtZW07CisJfQorCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoKKyAqIE1lbW9yeSBpcyBhZGRlZCBhbHdheXMgdG8gTk9STUFMIHpvbmUuIFRoaXMgbWVhbnMgeW91IHdpbGwgbmV2ZXIgZ2V0CisgKiBhZGRpdGlvbmFsIERNQS9ETUEzMiBtZW1vcnkuCisgKi8KIGludCBhZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQSgwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL251bWEuYyBiL2FyY2gveDg2XzY0L21tL251bWEuYwppbmRleCA0YmU4MmQ2Li5iMmZhYzE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9udW1hLmMKKysrIGIvYXJjaC94ODZfNjQvbW0vbnVtYS5jCkBAIC0xMDAsMTEgKzEwMCwzMCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkICogX19pbml0CitlYXJseV9ub2RlX21lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBtZW0gPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBzaXplKTsKKwl2b2lkICpwdHI7CisJaWYgKG1lbSAhPSAtMUwpCisJCXJldHVybiBfX3ZhKG1lbSk7CisJcHRyID0gX19hbGxvY19ib290bWVtX25vcGFuaWMoc2l6ZSwKKwkJCQlTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKHB0ciA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgJWx1IGJ5dGVzIGluIG5vZGUgJWRcbiIsCisJCQlzaXplLCBub2RlaWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHB0cjsKK30KKwogLyogSW5pdGlhbGl6ZSBib290bWVtIGFsbG9jYXRvciBmb3IgYSBub2RlICovCiB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2Jvb3RtZW0oaW50IG5vZGVpZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7IAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBib290bWFwX3BhZ2VzLCBib290bWFwX3NpemUsIGJvb3RtYXBfc3RhcnQ7IAogCXVuc2lnbmVkIGxvbmcgbm9kZWRhdGFfcGh5czsKKwl2b2lkICpib290bWFwOwogCWNvbnN0IGludCBwZ2RhdF9zaXplID0gcm91bmRfdXAoc2l6ZW9mKHBnX2RhdGFfdCksIFBBR0VfU0laRSk7CiAKIAlzdGFydCA9IHJvdW5kX3VwKHN0YXJ0LCBaT05FX0FMSUdOKTsgCkBAIC0xMTQsMTMgKzEzMywxMSBAQAogCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CiAJZW5kX3BmbiA9IGVuZCA+PiBQQUdFX1NISUZUOwogCi0Jbm9kZWRhdGFfcGh5cyA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHBnZGF0X3NpemUpOyAKLQlpZiAobm9kZWRhdGFfcGh5cyA9PSAtMUwpIAotCQlwYW5pYygiQ2Fubm90IGZpbmQgbWVtb3J5IHBnZGF0IGluIG5vZGUgJWRcbiIsIG5vZGVpZCk7CisJbm9kZV9kYXRhW25vZGVpZF0gPSBlYXJseV9ub2RlX21lbShub2RlaWQsIHN0YXJ0LCBlbmQsIHBnZGF0X3NpemUpOworCWlmIChub2RlX2RhdGFbbm9kZWlkXSA9PSBOVUxMKQorCQlyZXR1cm47CisJbm9kZWRhdGFfcGh5cyA9IF9fcGEobm9kZV9kYXRhW25vZGVpZF0pOwogCi0JRHByaW50aygibm9kZWRhdGFfcGh5cyAlbHhcbiIsIG5vZGVkYXRhX3BoeXMpOyAKLQotCW5vZGVfZGF0YVtub2RlaWRdID0gcGh5c190b192aXJ0KG5vZGVkYXRhX3BoeXMpOwogCW1lbXNldChOT0RFX0RBVEEobm9kZWlkKSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpOwogCU5PREVfREFUQShub2RlaWQpLT5iZGF0YSA9ICZwbGF0X25vZGVfYmRhdGFbbm9kZWlkXTsKIAlOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47CkBAIC0xMjksOSArMTQ2LDE1IEBACiAJLyogRmluZCBhIHBsYWNlIGZvciB0aGUgYm9vdG1lbSBtYXAgKi8KIAlib290bWFwX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKGVuZF9wZm4gLSBzdGFydF9wZm4pOyAKIAlib290bWFwX3N0YXJ0ID0gcm91bmRfdXAobm9kZWRhdGFfcGh5cyArIHBnZGF0X3NpemUsIFBBR0VfU0laRSk7Ci0JYm9vdG1hcF9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKGJvb3RtYXBfc3RhcnQsIGVuZCwgYm9vdG1hcF9wYWdlczw8UEFHRV9TSElGVCk7Ci0JaWYgKGJvb3RtYXBfc3RhcnQgPT0gLTFMKSAKLQkJcGFuaWMoIk5vdCBlbm91Z2ggY29udGludW91cyBzcGFjZSBmb3IgYm9vdG1hcCBvbiBub2RlICVkIiwgbm9kZWlkKTsgCisJYm9vdG1hcCA9IGVhcmx5X25vZGVfbWVtKG5vZGVpZCwgYm9vdG1hcF9zdGFydCwgZW5kLAorCQkJCQlib290bWFwX3BhZ2VzPDxQQUdFX1NISUZUKTsKKwlpZiAoYm9vdG1hcCA9PSBOVUxMKSAgeworCQlpZiAobm9kZWRhdGFfcGh5cyA8IHN0YXJ0IHx8IG5vZGVkYXRhX3BoeXMgPj0gZW5kKQorCQkJZnJlZV9ib290bWVtKCh1bnNpZ25lZCBsb25nKW5vZGVfZGF0YVtub2RlaWRdLHBnZGF0X3NpemUpOworCQlub2RlX2RhdGFbbm9kZWlkXSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJYm9vdG1hcF9zdGFydCA9IF9fcGEoYm9vdG1hcCk7CiAJRHByaW50aygiYm9vdG1hcCBzdGFydCAlbHUgcGFnZXMgJWx1XG4iLCBib290bWFwX3N0YXJ0LCBib290bWFwX3BhZ2VzKTsgCiAJCiAJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVpZCksCkBAIC0xNDIsNiArMTY1LDkgQEAKIAogCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBub2RlZGF0YV9waHlzLCBwZ2RhdF9zaXplKTsgCiAJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVpZCksIGJvb3RtYXBfc3RhcnQsIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQpOworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwlzcmF0X3Jlc2VydmVfYWRkX2FyZWEobm9kZWlkKTsKKyNlbmRpZgogCW5vZGVfc2V0X29ubGluZShub2RlaWQpOwogfSAKIApAQCAtMTYyLDExICsxODgsMTMgQEAKIAkgICBtZW1vcnkuICovCiAJbWVtbWFwc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZSkgKiAoZW5kX3Bmbi1zdGFydF9wZm4pOwogCWxpbWl0ID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOworI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAogCU5PREVfREFUQShub2RlaWQpLT5ub2RlX21lbV9tYXAgPSAKIAkJX19hbGxvY19ib290bWVtX2NvcmUoTk9ERV9EQVRBKG5vZGVpZCktPmJkYXRhLCAKIAkJCQltZW1tYXBzaXplLCBTTVBfQ0FDSEVfQllURVMsIAogCQkJCXJvdW5kX2Rvd24obGltaXQgLSBtZW1tYXBzaXplLCBQQUdFX1NJWkUpLCAKIAkJCQlsaW1pdCk7CisjZW5kaWYKIAogCXNpemVfem9uZXMoem9uZXMsIGhvbGVzLCBzdGFydF9wZm4sIGVuZF9wZm4pOwogCWZyZWVfYXJlYV9pbml0X25vZGUobm9kZWlkLCBOT0RFX0RBVEEobm9kZWlkKSwgem9uZXMsCkBAIC0zMzUsNiArMzYzLDggQEAKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCiAgCWlmICghc3RybmNtcChvcHQsIm5vYWNwaSIsNikpCiAgCQlhY3BpX251bWEgPSAtMTsKKwlpZiAoIXN0cm5jbXAob3B0LCJob3RhZGQ9IiwgNykpCisJCWhvdGFkZF9wZXJjZW50ID0gc2ltcGxlX3N0cnRvdWwob3B0KzcsIE5VTEwsIDEwKTsKICNlbmRpZgogCXJldHVybiAxOwogfSAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL3NyYXQuYyBiL2FyY2gveDg2XzY0L21tL3NyYXQuYwppbmRleCAyZWI4Nzk1Li40NzRkZjIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKKysrIGIvYXJjaC94ODZfNjQvbW0vc3JhdC5jCkBAIC0xNSwxNSArMTUsMjkgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KIAorI2lmIChkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWV9NT0RVTEUpKSBcCisJCSYmICFkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykKKyNkZWZpbmUgUkVTRVJWRV9IT1RBREQgMQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICphY3BpX3NsaXQ7CiAKIHN0YXRpYyBub2RlbWFza190IG5vZGVzX3BhcnNlZCBfX2luaXRkYXRhOwogc3RhdGljIG5vZGVtYXNrX3Qgbm9kZXNfZm91bmQgX19pbml0ZGF0YTsKIHN0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZXNbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOworc3RhdGljIHN0cnVjdCBib290bm9kZSBub2Rlc19hZGRbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOworc3RhdGljIGludCBmb3VuZF9hZGRfYXJlYSBfX2luaXRkYXRhOworaW50IGhvdGFkZF9wZXJjZW50IF9faW5pdGRhdGEgPSAwOworI2lmbmRlZiBSRVNFUlZFX0hPVEFERAorI2RlZmluZSBob3RhZGRfcGVyY2VudCAwCS8qIElnbm9yZSBhbGwgc2V0dGluZ3MgKi8KKyNlbmRpZgogc3RhdGljIHU4IHB4bTJub2RlWzI1Nl0gPSB7IFswIC4uLiAyNTVdID0gMHhmZiB9OwogCiAvKiBUb28gc21hbGwgbm9kZXMgY29uZnVzZSB0aGUgVk0gYmFkbHkuIFVzdWFsbHkgdGhleSByZXN1bHQKQEAgLTcxLDYgKzg1LDEwIEBACiBzdGF0aWMgX19pbml0IHZvaWQgY3V0b2ZmX25vZGUoaW50IGksIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBib290bm9kZSAqbmQgPSAmbm9kZXNbaV07CisKKwlpZiAoZm91bmRfYWRkX2FyZWEpCisJCXJldHVybjsKKwogCWlmIChuZC0+c3RhcnQgPCBzdGFydCkgewogCQluZC0+c3RhcnQgPSBzdGFydDsKIAkJaWYgKG5kLT5lbmQgPCBuZC0+c3RhcnQpCkBAIC04OCw4ICsxMDYsMTEgQEAKIAlpbnQgaTsKIAlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IFNSQVQgbm90IHVzZWQuXG4iKTsKIAlhY3BpX251bWEgPSAtMTsKKwlmb3VuZF9hZGRfYXJlYSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9MT0NBTF9BUElDOyBpKyspCiAJCWFwaWNpZF90b19ub2RlW2ldID0gTlVNQV9OT19OT0RFOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykKKwkJbm9kZXNfYWRkW2ldLnN0YXJ0ID0gbm9kZXNbaV0uZW5kID0gMDsKIH0KIAogc3RhdGljIF9faW5pdCBpbmxpbmUgaW50IHNyYXRfZGlzYWJsZWQodm9pZCkKQEAgLTEzNyw3ICsxNTgsOCBAQAogCWludCBweG0sIG5vZGU7CiAJaWYgKHNyYXRfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwotCWlmIChwYS0+aGVhZGVyLmxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfcHJvY2Vzc29yX2FmZmluaXR5KSkgewkJYmFkX3NyYXQoKTsKKwlpZiAocGEtPmhlYWRlci5sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0eSkpIHsKKwkJYmFkX3NyYXQoKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocGEtPmZsYWdzLmVuYWJsZWQgPT0gMCkKQEAgLTE1NSwxMSArMTc3LDExNiBAQAogCSAgICAgICBweG0sIHBhLT5hcGljX2lkLCBub2RlKTsKIH0KIAorI2lmZGVmIFJFU0VSVkVfSE9UQURECisvKgorICogUHJvdGVjdCBhZ2FpbnN0IHRvbyBsYXJnZSBob3RhZGQgYXJlYXMgdGhhdCB3b3VsZCBmaWxsIHVwIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBob3RhZGRfZW5vdWdoX21lbW9yeShzdHJ1Y3QgYm9vdG5vZGUgKm5kKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jYXRlZDsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2FyZWFfZW5kOworCXVuc2lnbmVkIGxvbmcgcGFnZXMgPSAobmQtPmVuZCAtIG5kLT5zdGFydCkgPj4gUEFHRV9TSElGVDsKKwlsb25nIG1lbSA9IHBhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBhbGxvd2VkOworCXVuc2lnbmVkIGxvbmcgb2xkcGFnZXMgPSBwYWdlczsKKworCWlmIChtZW0gPCAwKQorCQlyZXR1cm4gMDsKKwlhbGxvd2VkID0gKGVuZF9wZm4gLSBlODIwX2hvbGVfc2l6ZSgwLCBlbmRfcGZuKSkgKiBQQUdFX1NJWkU7CisJYWxsb3dlZCA9IChhbGxvd2VkIC8gMTAwKSAqIGhvdGFkZF9wZXJjZW50OworCWlmIChhbGxvY2F0ZWQgKyBtZW0gPiBhbGxvd2VkKSB7CisJCXVuc2lnbmVkIGxvbmcgcmFuZ2U7CisJCS8qIEdpdmUgdGhlbSBhdCBsZWFzdCBwYXJ0IG9mIHRoZWlyIGhvdGFkZCBtZW1vcnkgdXB0byBob3RhZGRfcGVyY2VudAorCQkgICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gc3ByZWFkIHRoZSBsaW1pdCBvdXQKKwkJICAgb3ZlciBtdWx0aXBsZSBob3RwbHVnIGFyZWFzLCBidXQgdGhhdCBpcyB0b28gY29tcGxpY2F0ZWQKKwkJICAgcmlnaHQgbm93ICovCisJCWlmIChhbGxvY2F0ZWQgPj0gYWxsb3dlZCkKKwkJCXJldHVybiAwOworCQlyYW5nZSA9IGFsbG93ZWQgLSBhbGxvY2F0ZWQ7CisJCXBhZ2VzID0gKHJhbmdlIC8gUEFHRV9TSVpFKTsKKwkJbWVtID0gcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQluZC0+ZW5kID0gbmQtPnN0YXJ0ICsgcmFuZ2U7CisJfQorCS8qIE5vdCBjb21wbGV0ZWx5IGZvb2wgcHJvb2YsIGJ1dCBhIGdvb2Qgc2FuaXR5IGNoZWNrICovCisJYWRkciA9IGZpbmRfZTgyMF9hcmVhKGxhc3RfYXJlYV9lbmQsIGVuZF9wZm48PFBBR0VfU0hJRlQsIG1lbSk7CisJaWYgKGFkZHIgPT0gLTFVTCkKKwkJcmV0dXJuIDA7CisJaWYgKHBhZ2VzICE9IG9sZHBhZ2VzKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNSQVQ6IEhvdGFkZCBhcmVhIGxpbWl0ZWQgdG8gJWx1IGJ5dGVzXG4iLAorCQkJcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJbGFzdF9hcmVhX2VuZCA9IGFkZHIgKyBtZW07CisJYWxsb2NhdGVkICs9IG1lbTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEl0IGlzIGZpbmUgdG8gYWRkIHRoaXMgYXJlYSB0byB0aGUgbm9kZXMgZGF0YSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIKKyAqIFRoaXMgY29kZSBzdXBwb3J0cyBvbmUgY29udGlnaW91cyBob3QgYWRkIGFyZWEgcGVyIG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgcmVzZXJ2ZV9ob3RhZGQoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgc19wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZV9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKKwlpbnQgY2hhbmdlZCA9IDA7CisJc3RydWN0IGJvb3Rub2RlICpuZCA9ICZub2Rlc19hZGRbbm9kZV07CisKKwkvKiBJIGhhZCBzb21lIHRyb3VibGUgd2l0aCBzdHJhbmdlIG1lbW9yeSBob3RhZGQgcmVnaW9ucyBicmVha2luZworCSAgIHRoZSBib290LiBCZSB2ZXJ5IHN0cmljdCBoZXJlIGFuZCByZWplY3QgYW55dGhpbmcgdW5leHBlY3RlZC4KKwkgICBJZiB5b3Ugd2FudCB3b3JraW5nIG1lbW9yeSBob3RhZGQgd3JpdGUgY29ycmVjdCBTUkFUcy4KKworCSAgIFRoZSBub2RlIHNpemUgY2hlY2sgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gZ3VhcmQgYWdhaW5zdAorCSAgIG1pc3Rha2VzICovCisJaWYgKChzaWduZWQgbG9uZykoZW5kIC0gc3RhcnQpIDwgTk9ERV9NSU5fU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgYXJlYSB0b28gc21hbGxcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVGhpcyBjaGVjayBtaWdodCBiZSBhIGJpdCB0b28gc3RyaWN0LCBidXQgSSdtIGtlZXBpbmcgaXQgZm9yIG5vdy4gKi8KKwlpZiAoZTgyMF9ob2xlX3NpemUoc19wZm4sIGVfcGZuKSAhPSBlX3BmbiAtIHNfcGZuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU1JBVDogSG90cGx1ZyBhcmVhIGhhcyBleGlzdGluZyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFob3RhZGRfZW5vdWdoX21lbW9yeSgmbm9kZXNfYWRkW25vZGVdKSkgIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBIb3RwbHVnIGFyZWEgdG9vIGxhcmdlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExvb2tzIGdvb2QgKi8KKworIAlmb3VuZF9hZGRfYXJlYSA9IDE7CisJaWYgKG5kLT5zdGFydCA9PSBuZC0+ZW5kKSB7CisgCQluZC0+c3RhcnQgPSBzdGFydDsKKyAJCW5kLT5lbmQgPSBlbmQ7CisJCWNoYW5nZWQgPSAxOworIAl9IGVsc2UgeworIAkJaWYgKG5kLT5zdGFydCA9PSBlbmQpIHsKKyAJCQluZC0+c3RhcnQgPSBzdGFydDsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisgCQlpZiAobmQtPmVuZCA9PSBzdGFydCkgeworIAkJCW5kLT5lbmQgPSBlbmQ7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCQlpZiAoIWNoYW5nZWQpCisJCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgem9uZSBub3QgY29udGludW91cy4gUGFydGx5IGlnbm9yZWRcbiIpOworIAl9CisKKyAJaWYgKChuZC0+ZW5kID4+IFBBR0VfU0hJRlQpID4gZW5kX3BmbikKKyAJCWVuZF9wZm4gPSBuZC0+ZW5kID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoY2hhbmdlZCkKKwkgCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IGhvdCBwbHVnIHpvbmUgZm91bmQgJUx4IC0gJUx4XG4iLCBuZC0+c3RhcnQsIG5kLT5lbmQpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qIENhbGxiYWNrIGZvciBwYXJzaW5nIG9mIHRoZSBQcm94aW1pdHkgRG9tYWluIDwtPiBNZW1vcnkgQXJlYSBtYXBwaW5ncyAqLwogdm9pZCBfX2luaXQKIGFjcGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdChzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkgKm1hKQogewotCXN0cnVjdCBib290bm9kZSAqbmQ7CisJc3RydWN0IGJvb3Rub2RlICpuZCwgb2xkbm9kZTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJaW50IG5vZGUsIHB4bTsKIAlpbnQgaTsKQEAgLTE3Miw2ICsyOTksOCBAQAogCX0KIAlpZiAobWEtPmZsYWdzLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuOworIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgaG90YWRkX3BlcmNlbnQgPT0gMCkKKwkJcmV0dXJuOwogCXN0YXJ0ID0gbWEtPmJhc2VfYWRkcl9sbyB8ICgodTY0KW1hLT5iYXNlX2FkZHJfaGkgPDwgMzIpOwogCWVuZCA9IHN0YXJ0ICsgKG1hLT5sZW5ndGhfbG8gfCAoKHU2NCltYS0+bGVuZ3RoX2hpIDw8IDMyKSk7CiAJcHhtID0gbWEtPnByb3hpbWl0eV9kb21haW47CkBAIC0xODEsMTAgKzMxMCw2IEBACiAJCWJhZF9zcmF0KCk7CiAJCXJldHVybjsKIAl9Ci0JLyogSXQgaXMgZmluZSB0byBhZGQgdGhpcyBhcmVhIHRvIHRoZSBub2RlcyBkYXRhIGl0IHdpbGwgYmUgdXNlZCBsYXRlciovCi0JaWYgKG1hLT5mbGFncy5ob3RfcGx1Z2dhYmxlID09IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IGhvdCBwbHVnIHpvbmUgZm91bmQgJWx4IC0gJWx4IFxuIiwKLQkJCQlzdGFydCwgZW5kKTsKIAlpID0gY29uZmxpY3Rpbmdfbm9kZXMoc3RhcnQsIGVuZCk7CiAJaWYgKGkgPT0gbm9kZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xOTksNiArMzI0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAluZCA9ICZub2Rlc1tub2RlXTsKKwlvbGRub2RlID0gKm5kOwogCWlmICghbm9kZV90ZXN0X2FuZF9zZXQobm9kZSwgbm9kZXNfcGFyc2VkKSkgewogCQluZC0+c3RhcnQgPSBzdGFydDsKIAkJbmQtPmVuZCA9IGVuZDsKQEAgLTIwOCw4ICszMzQsMTkgQEAKIAkJaWYgKG5kLT5lbmQgPCBlbmQpCiAJCQluZC0+ZW5kID0gZW5kOwogCX0KKwogCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICVMeC0lTHhcbiIsIG5vZGUsIHB4bSwKIAkgICAgICAgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKKworI2lmZGVmIFJFU0VSVkVfSE9UQURECisgCWlmIChtYS0+ZmxhZ3MuaG90X3BsdWdnYWJsZSAmJiByZXNlcnZlX2hvdGFkZChub2RlLCBzdGFydCwgZW5kKSA8IDApIHsKKwkJLyogSWdub3JlIGhvdGFkZCByZWdpb24uIFVuZG8gZGFtYWdlICovCisJCXByaW50ayhLRVJOX05PVElDRSAiU1JBVDogSG90cGx1ZyByZWdpb24gaWdub3JlZFxuIik7CisJCSpuZCA9IG9sZG5vZGU7CisJCWlmICgobmQtPnN0YXJ0IHwgbmQtPmVuZCkgPT0gMCkKKwkJCW5vZGVfY2xlYXIobm9kZSwgbm9kZXNfcGFyc2VkKTsKKwl9CisjZW5kaWYKIH0KIAogLyogU2FuaXR5IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIFNSQVRzICh0aGV5IGFyZSBhbWF6aW5nbHkgY29tbW9uKS4KQEAgLTIyNSw2ICszNjIsOSBAQAogCQl1bnNpZ25lZCBsb25nIGUgPSBub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVDsKIAkJcHhtcmFtICs9IGUgLSBzOwogCQlweG1yYW0gLT0gZTgyMF9ob2xlX3NpemUocywgZSk7CisJCXB4bXJhbSAtPSBub2Rlc19hZGRbaV0uZW5kIC0gbm9kZXNfYWRkW2ldLnN0YXJ0OworCQlpZiAoKGxvbmcpcHhtcmFtIDwgMCkKKwkJCXB4bXJhbSA9IDA7CiAJfQogCiAJZTgyMHJhbSA9IGVuZF9wZm4gLSBlODIwX2hvbGVfc2l6ZSgwLCBlbmRfcGZuKTsKQEAgLTI1OCw5ICszOTgsMTEgQEAKIAogCS8qIEZpcnN0IGNsZWFuIHVwIHRoZSBub2RlIGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspIHsKLQkJY3V0b2ZmX25vZGUoaSwgc3RhcnQsIGVuZCk7Ci0JCWlmICgobm9kZXNbaV0uZW5kIC0gbm9kZXNbaV0uc3RhcnQpIDwgTk9ERV9NSU5fU0laRSkKKyAJCWN1dG9mZl9ub2RlKGksIHN0YXJ0LCBlbmQpOworCQlpZiAoKG5vZGVzW2ldLmVuZCAtIG5vZGVzW2ldLnN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpIHsKIAkJCXVucGFyc2Vfbm9kZShpKTsKKwkJCW5vZGVfc2V0X29mZmxpbmUoaSk7CisJCX0KIAl9CiAKIAlpZiAoYWNwaV9udW1hIDw9IDApCkBAIC0yODIsNiArNDI0LDEyIEBACiAJLyogRmluYWxseSByZWdpc3RlciBub2RlcyAqLwogCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpCiAJCXNldHVwX25vZGVfYm9vdG1lbShpLCBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kKTsKKwkvKiBUcnkgYWdhaW4gaW4gY2FzZSBzZXR1cF9ub2RlX2Jvb3RtZW0gbWlzc2VkIG9uZSBkdWUKKwkgICB0byBtaXNzaW5nIGJvb3RtZW0gKi8KKwlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKQorCQlpZiAoIW5vZGVfb25saW5lKGkpKQorCQkJc2V0dXBfbm9kZV9ib290bWVtKGksIG5vZGVzW2ldLnN0YXJ0LCBub2Rlc1tpXS5lbmQpOworCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeyAKIAkJaWYgKGNwdV90b19ub2RlW2ldID09IE5VTUFfTk9fTk9ERSkKIAkJCWNvbnRpbnVlOwpAQCAtMzAzLDYgKzQ1MSwyNSBAQAogICAgICAgIHJldHVybiAwOwogfQogCit2b2lkIF9faW5pdCBzcmF0X3Jlc2VydmVfYWRkX2FyZWEoaW50IG5vZGVpZCkKK3sKKwlpZiAoZm91bmRfYWRkX2FyZWEgJiYgbm9kZXNfYWRkW25vZGVpZF0uZW5kKSB7CisJCXU2NCB0b3RhbF9tYjsKKworCQlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBSZXNlcnZpbmcgaG90LWFkZCBtZW1vcnkgc3BhY2UgIgorCQkJCSJmb3Igbm9kZSAlZCBhdCAlTHgtJUx4XG4iLAorCQkJbm9kZWlkLCBub2Rlc19hZGRbbm9kZWlkXS5zdGFydCwgbm9kZXNfYWRkW25vZGVpZF0uZW5kKTsKKwkJdG90YWxfbWIgPSAobm9kZXNfYWRkW25vZGVpZF0uZW5kIC0gbm9kZXNfYWRkW25vZGVpZF0uc3RhcnQpCisJCQkJCT4+IFBBR0VfU0hJRlQ7CisJCXRvdGFsX21iICo9IHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJCXRvdGFsX21iID4+PSAyMDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogVGhpcyB3aWxsIGNvc3QgeW91ICVMdSBNQiBvZiAiCisJCQkJInByZS1hbGxvY2F0ZWQgbWVtb3J5LlxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbF9tYik7CisJCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBub2Rlc19hZGRbbm9kZWlkXS5zdGFydCwKKwkJCSAgICAgICBub2Rlc19hZGRbbm9kZWlkXS5lbmQgLSBub2Rlc19hZGRbbm9kZWlkXS5zdGFydCk7CisJfQorfQorCiBpbnQgX19ub2RlX2Rpc3RhbmNlKGludCBhLCBpbnQgYikKIHsKIAlpbnQgaW5kZXg7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9wY2kvbW1jb25maWcuYyBiL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jCmluZGV4IGU2MTY1MDAuLmEyMDYwZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jCisrKyBiL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jCkBAIC05LDExICs5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxhc20vZTgyMC5oPgorCiAjaW5jbHVkZSAicGNpLmgiCiAKICNkZWZpbmUgTU1DT05GSUdfQVBFUl9TSVpFICgyNTYqMTAyNCoxMDI0KQorLyogVmVyaWZ5IHRoZSBmaXJzdCAxNiBidXNzZXMuIFdlIGFzc3VtZSB0aGF0IHN5c3RlbXMgd2l0aCBtb3JlIGJ1c3NlcworICAgZ2V0IE1DRkcgcmlnaHQuICovCisjZGVmaW5lIE1BWF9DSEVDS19CVVMgMTYKIAotc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCAzMik7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZmFsbGJhY2tfc2xvdHMsIDMyKk1BWF9DSEVDS19CVVMpOwogCiAvKiBTdGF0aWMgdmlydHVhbCBtYXBwaW5nIG9mIHRoZSBNTUNPTkZJRyBhcGVydHVyZSAqLwogc3RydWN0IG1tY2ZnX3ZpcnQgewpAQCAtNTUsNyArNjAsOCBAQAogc3RhdGljIGNoYXIgX19pb21lbSAqcGNpX2Rldl9iYXNlKHVuc2lnbmVkIGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKIHsKIAljaGFyIF9faW9tZW0gKmFkZHI7Ci0JaWYgKHNlZyA9PSAwICYmIGJ1cyA9PSAwICYmIHRlc3RfYml0KFBDSV9TTE9UKGRldmZuKSwgZmFsbGJhY2tfc2xvdHMpKQorCWlmIChzZWcgPT0gMCAmJiBidXMgPCBNQVhfQ0hFQ0tfQlVTICYmCisJCXRlc3RfYml0KDMyKmJ1cyArIFBDSV9TTE9UKGRldmZuKSwgZmFsbGJhY2tfc2xvdHMpKQogCQlyZXR1cm4gTlVMTDsKIAlhZGRyID0gZ2V0X3ZpcnQoc2VnLCBidXMpOwogCWlmICghYWRkcikKQEAgLTY5LDggKzc1LDEwIEBACiAJY2hhciBfX2lvbWVtICphZGRyOwogCiAJLyogV2h5IGRvIHdlIGhhdmUgdGhpcyB3aGVuIG5vYm9keSBjaGVja3MgaXQuIEhvdyBhYm91dCBhIEJVRygpIT8gLUFLICovCi0JaWYgKHVubGlrZWx5KCF2YWx1ZSB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkpCisJaWYgKHVubGlrZWx5KChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDQwOTUpKSkgeworCQkqdmFsdWUgPSAtMTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJYWRkciA9IHBjaV9kZXZfYmFzZShzZWcsIGJ1cywgZGV2Zm4pOwogCWlmICghYWRkcikKQEAgLTEyOSwyMSArMTM3LDI2IEBACiAgICBOb3JtYWxseSB0aGlzIGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIE1DRkcgYnkgbm90IGxpc3RpbmcgdGhlbQogICAgYW5kIGFzc2lnbmluZyBzdWl0YWJsZSBfU0VHcywgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgaW4gc29tZSBCSU9TLgogICAgSW5zdGVhZCB0cnkgdG8gZGlzY292ZXIgYWxsIGRldmljZXMgb24gYnVzIDAgdGhhdCBhcmUgdW5yZWFjaGFibGUgdXNpbmcgTU0KLSAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4KLSAgIFdlIG9ubHkgZG8gdGhpcyBmb3IgYnVzIDAvc2VnIDAgKi8KKyAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4gKi8KIHN0YXRpYyBfX2luaXQgdm9pZCB1bnJlYWNoYWJsZV9kZXZpY2VzKHZvaWQpCiB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJdTMyIHZhbDE7Ci0JCWNoYXIgX19pb21lbSAqYWRkcjsKKwlpbnQgaSwgazsKKwkvKiBVc2UgdGhlIG1heCBidXMgbnVtYmVyIGZyb20gQUNQSSBoZXJlPyAqLworCWZvciAoayA9IDA7IGsgPCBNQVhfQ0hFQ0tfQlVTOyBrKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJCXUzMiB2YWwxOworCQkJY2hhciBfX2lvbWVtICphZGRyOwogCi0JCXBjaV9jb25mMV9yZWFkKDAsIDAsIFBDSV9ERVZGTihpLDApLCAwLCA0LCAmdmFsMSk7Ci0JCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCi0JCQljb250aW51ZTsKLQkJYWRkciA9IHBjaV9kZXZfYmFzZSgwLCAwLCBQQ0lfREVWRk4oaSwgMCkpOwotCQlpZiAoYWRkciA9PSBOVUxMfHwgcmVhZGwoYWRkcikgIT0gdmFsMSkgewotCQkJc2V0X2JpdChpLCBmYWxsYmFja19zbG90cyk7CisJCQlwY2lfY29uZjFfcmVhZCgwLCBrLCBQQ0lfREVWRk4oaSwwKSwgMCwgNCwgJnZhbDEpOworCQkJaWYgKHZhbDEgPT0gMHhmZmZmZmZmZikKKwkJCQljb250aW51ZTsKKwkJCWFkZHIgPSBwY2lfZGV2X2Jhc2UoMCwgaywgUENJX0RFVkZOKGksIDApKTsKKwkJCWlmIChhZGRyID09IE5VTEx8fCByZWFkbChhZGRyKSAhPSB2YWwxKSB7CisJCQkJc2V0X2JpdChpICsgMzIqaywgZmFsbGJhY2tfc2xvdHMpOworCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCSJQQ0k6IE5vIG1tY29uZmlnIHBvc3NpYmxlIG9uIGRldmljZSAleDoleFxuIiwKKwkJCQkJaywgaSk7CisJCQl9CiAJCX0KIAl9CiB9CkBAIC0xNjEsNiArMTc0LDE0IEBACiAJICAgIChwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcyA9PSAwKSkKIAkJcmV0dXJuOwogCisJaWYgKCFlODIwX2FsbF9tYXBwZWQocGNpX21tY2ZnX2NvbmZpZ1swXS5iYXNlX2FkZHJlc3MsCisJCQlwY2lfbW1jZmdfY29uZmlnWzBdLmJhc2VfYWRkcmVzcyArIE1NQ09ORklHX0FQRVJfU0laRSwKKwkJCUU4MjBfUkVTRVJWRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBCSU9TIEJ1ZzogTUNGRyBhcmVhIGlzIG5vdCBFODIwLXJlc2VydmVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IE5vdCB1c2luZyBNTUNPTkZJRy5cbiIpOworCQlyZXR1cm47CisJfQorCiAJLyogUkVELVBFTiBpMzg2IGRvZXNuJ3QgZG8gX25vY2FjaGUgcmlnaHQgbm93ICovCiAJcGNpX21tY2ZnX3ZpcnQgPSBrbWFsbG9jKHNpemVvZigqcGNpX21tY2ZnX3ZpcnQpICogcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOwogCWlmIChwY2lfbW1jZmdfdmlydCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMKaW5kZXggMTUyYjkzNy4uYTE1YjZlMyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC94dGVuc2Ffa3N5bXMuYwpAQCAtNDgsNyArNDgsNiBAQAogRVhQT1JUX1NZTUJPTChzdHJjYXQpOwogRVhQT1JUX1NZTUJPTChzdHJjaHIpOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RybmNhdCk7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwogRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2FzLWlvc2NoZWQuYyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwppbmRleCAyOTY3MDhjLi5hN2NhZjM1IDEwMDY0NAotLS0gYS9ibG9jay9hcy1pb3NjaGVkLmMKKysrIGIvYmxvY2svYXMtaW9zY2hlZC5jCkBAIC0xNjQ4LDE3ICsxNjQ4LDE3IEBACiAgKiBpbml0aWFsaXplIGVsZXZhdG9yIHByaXZhdGUgZGF0YSAoYXNfZGF0YSksIGFuZCBhbGxvYyBhIGFycSBmb3IKICAqIGVhY2ggcmVxdWVzdCBvbiB0aGUgZnJlZSBsaXN0cwogICovCi1zdGF0aWMgaW50IGFzX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQorc3RhdGljIHZvaWQgKmFzX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBhc19kYXRhICphZDsKIAlpbnQgaTsKIAogCWlmICghYXJxX3Bvb2wpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAogCWFkID0ga21hbGxvY19ub2RlKHNpemVvZigqYWQpLCBHRlBfS0VSTkVMLCBxLT5ub2RlKTsKIAlpZiAoIWFkKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KGFkLCAwLCBzaXplb2YoKmFkKSk7CiAKIAlhZC0+cSA9IHE7IC8qIElkZW50aWZ5IHdoYXQgcXVldWUgdGhlIGRhdGEgYmVsb25ncyB0byAqLwpAQCAtMTY2Nyw3ICsxNjY3LDcgQEAKIAkJCQlHRlBfS0VSTkVMLCBxLT5ub2RlKTsKIAlpZiAoIWFkLT5oYXNoKSB7CiAJCWtmcmVlKGFkKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCX0KIAogCWFkLT5hcnFfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX25vZGUoQkxLREVWX01JTl9SUSwgbWVtcG9vbF9hbGxvY19zbGFiLApAQCAtMTY3NSw3ICsxNjc1LDcgQEAKIAlpZiAoIWFkLT5hcnFfcG9vbCkgewogCQlrZnJlZShhZC0+aGFzaCk7CiAJCWtmcmVlKGFkKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIGFudGljaXBhdG9yeSBzY2hlZHVsaW5nIGhlbHBlcnMgKi8KQEAgLTE2OTYsMTQgKzE2OTYsMTMgQEAKIAlhZC0+YW50aWNfZXhwaXJlID0gZGVmYXVsdF9hbnRpY19leHBpcmU7CiAJYWQtPmJhdGNoX2V4cGlyZVtSRVFfU1lOQ10gPSBkZWZhdWx0X3JlYWRfYmF0Y2hfZXhwaXJlOwogCWFkLT5iYXRjaF9leHBpcmVbUkVRX0FTWU5DXSA9IGRlZmF1bHRfd3JpdGVfYmF0Y2hfZXhwaXJlOwotCWUtPmVsZXZhdG9yX2RhdGEgPSBhZDsKIAogCWFkLT5jdXJyZW50X2JhdGNoX2V4cGlyZXMgPSBqaWZmaWVzICsgYWQtPmJhdGNoX2V4cGlyZVtSRVFfU1lOQ107CiAJYWQtPndyaXRlX2JhdGNoX2NvdW50ID0gYWQtPmJhdGNoX2V4cGlyZVtSRVFfQVNZTkNdIC8gMTA7CiAJaWYgKGFkLT53cml0ZV9iYXRjaF9jb3VudCA8IDIpCiAJCWFkLT53cml0ZV9iYXRjaF9jb3VudCA9IDI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWQ7CiB9CiAKIC8qCkBAIC0xODQ0LDkgKzE4NDMsMTAgQEAKIAlERUNMQVJFX0NPTVBMRVRJT04oYWxsX2dvbmUpOwogCWVsdl91bnJlZ2lzdGVyKCZpb3NjaGVkX2FzKTsKIAlpb2NfZ29uZSA9ICZhbGxfZ29uZTsKLQliYXJyaWVyKCk7CisJLyogaW9jX2dvbmUncyB1cGRhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSByZWFkaW5nIGlvY19jb3VudCAqLworCXNtcF93bWIoKTsKIAlpZiAoYXRvbWljX3JlYWQoJmlvY19jb3VudCkpCi0JCWNvbXBsZXRlKGlvY19nb25lKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbihpb2NfZ29uZSk7CiAJc3luY2hyb25pemVfcmN1KCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGFycV9wb29sKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDY3ZDQ0NmQuLjA1MmIxNzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIENGUV9LRVlfQVNZTkMJCSgwKQogCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhjZnFfZXhpdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2ZxX2V4aXRfbG9jayk7CiAKIC8qCiAgKiBmb3IgdGhlIGhhc2ggb2YgY2ZxcSBpbnNpZGUgdGhlIGNmcWQKQEAgLTEzMyw2ICsxMzMsNyBAQAogCW1lbXBvb2xfdCAqY3JxX3Bvb2w7CiAKIAlpbnQgcnFfaW5fZHJpdmVyOworCWludCBod190YWc7CiAKIAkvKgogCSAqIHNjaGVkdWxlIHNsaWNlIHN0YXRlIGluZm8KQEAgLTUwMCwxMCArNTAxLDEzIEBACiAKIAkvKgogCSAqIGlmIHF1ZXVlIHdhcyBwcmVlbXB0ZWQsIGp1c3QgYWRkIHRvIGZyb250IHRvIGJlIGZhaXIuIGJ1c3lfcnIKLQkgKiBpc24ndCBzb3J0ZWQuCisJICogaXNuJ3Qgc29ydGVkLCBidXQgaW5zZXJ0IGF0IHRoZSBiYWNrIGZvciBmYWlybmVzcy4KIAkgKi8KIAlpZiAocHJlZW1wdGVkIHx8IGxpc3QgPT0gJmNmcWQtPmJ1c3lfcnIpIHsKLQkJbGlzdF9hZGQoJmNmcXEtPmNmcV9saXN0LCBsaXN0KTsKKwkJaWYgKHByZWVtcHRlZCkKKwkJCWxpc3QgPSBsaXN0LT5wcmV2OworCisJCWxpc3RfYWRkX3RhaWwoJmNmcXEtPmNmcV9saXN0LCBsaXN0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjY0LDYgKzY2OCwxNSBAQAogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCiAJY2ZxZC0+cnFfaW5fZHJpdmVyKys7CisKKwkvKgorCSAqIElmIHRoZSBkZXB0aCBpcyBsYXJnZXIgMSwgaXQgcmVhbGx5IGNvdWxkIGJlIHF1ZXVlaW5nLiBCdXQgbGV0cworCSAqIG1ha2UgdGhlIG1hcmsgYSBsaXR0bGUgaGlnaGVyIC0gaWRsaW5nIGNvdWxkIHN0aWxsIGJlIGdvb2QgZm9yCisJICogbG93IHF1ZXVlaW5nLCBhbmQgYSBsb3cgcXVldWVpbmcgbnVtYmVyIGNvdWxkIGFsc28ganVzdCBpbmRpY2F0ZQorCSAqIGEgU0NTSSBtaWQgbGF5ZXIgbGlrZSBiZWhhdmlvdXIgd2hlcmUgbGltaXQrMSBpcyBvZnRlbiBzZWVuLgorCSAqLworCWlmICghY2ZxZC0+aHdfdGFnICYmIGNmcWQtPnJxX2luX2RyaXZlciA+IDQpCisJCWNmcWQtPmh3X3RhZyA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9kZWFjdGl2YXRlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCkBAIC04NzksNiArODkyLDEzIEBACiAJCWNmcXEgPSBsaXN0X2VudHJ5X2NmcXEoY2ZxZC0+Y3VyX3JyLm5leHQpOwogCiAJLyoKKwkgKiBJZiBubyBuZXcgcXVldWVzIGFyZSBhdmFpbGFibGUsIGNoZWNrIGlmIHRoZSBidXN5IGxpc3QgaGFzIHNvbWUKKwkgKiBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIGlkbGUgaW8uCisJICovCisJaWYgKCFjZnFxICYmICFsaXN0X2VtcHR5KCZjZnFkLT5idXN5X3JyKSkKKwkJY2ZxcSA9IGxpc3RfZW50cnlfY2ZxcShjZnFkLT5idXN5X3JyLm5leHQpOworCisJLyoKIAkgKiBpZiB3ZSBoYXZlIGlkbGUgcXVldWVzIGFuZCBubyBydCBvciBiZSBxdWV1ZXMgaGFkIHBlbmRpbmcKIAkgKiByZXF1ZXN0cywgZWl0aGVyIGFsbG93IGltbWVkaWF0ZSBzZXJ2aWNlIGlmIHRoZSBncmFjZSBwZXJpb2QKIAkgKiBoYXMgcGFzc2VkIG9yIGFybSB0aGUgaWRsZSBncmFjZSB0aW1lcgpAQCAtMTI4NCw3ICsxMzA0LDcgQEAKIAkvKgogCSAqIHB1dCB0aGUgcmVmZXJlbmNlIHRoaXMgdGFzayBpcyBob2xkaW5nIHRvIHRoZSB2YXJpb3VzIHF1ZXVlcwogCSAqLwotCXJlYWRfbG9ja19pcnFzYXZlKCZjZnFfZXhpdF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNmcV9leGl0X2xvY2ssIGZsYWdzKTsKIAogCW4gPSByYl9maXJzdCgmaW9jLT5jaWNfcm9vdCk7CiAJd2hpbGUgKG4gIT0gTlVMTCkgewpAQCAtMTI5NCw3ICsxMzE0LDcgQEAKIAkJbiA9IHJiX25leHQobik7CiAJfQogCi0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmY2ZxX2V4aXRfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNmcV9leGl0X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqCkBAIC0xMzAzLDE3ICsxMzIzLDEyIEBACiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBrbWVtX2NhY2hlX2FsbG9jKGNmcV9pb2NfcG9vbCwgZ2ZwX21hc2spOwogCiAJaWYgKGNpYykgewotCQlSQl9DTEVBUigmY2ljLT5yYl9ub2RlKTsKLQkJY2ljLT5rZXkgPSBOVUxMOwotCQljaWMtPmNmcXFbQVNZTkNdID0gTlVMTDsKLQkJY2ljLT5jZnFxW1NZTkNdID0gTlVMTDsKKwkJbWVtc2V0KGNpYywgMCwgc2l6ZW9mKCpjaWMpKTsKKwkJUkJfQ0xFQVJfQ09MT1IoJmNpYy0+cmJfbm9kZSk7CiAJCWNpYy0+bGFzdF9lbmRfcmVxdWVzdCA9IGppZmZpZXM7Ci0JCWNpYy0+dHRpbWVfdG90YWwgPSAwOwotCQljaWMtPnR0aW1lX3NhbXBsZXMgPSAwOwotCQljaWMtPnR0aW1lX21lYW4gPSAwOworCQlJTklUX0xJU1RfSEVBRCgmY2ljLT5xdWV1ZV9saXN0KTsKIAkJY2ljLT5kdG9yID0gY2ZxX2ZyZWVfaW9fY29udGV4dDsKIAkJY2ljLT5leGl0ID0gY2ZxX2V4aXRfaW9fY29udGV4dDsKLQkJSU5JVF9MSVNUX0hFQUQoJmNpYy0+cXVldWVfbGlzdCk7CiAJCWF0b21pY19pbmMoJmlvY19jb3VudCk7CiAJfQogCkBAIC0xNDAwLDE3ICsxNDE1LDE3IEBACiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CiAJc3RydWN0IHJiX25vZGUgKm47CiAKLQl3cml0ZV9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOwogCiAJbiA9IHJiX2ZpcnN0KCZpb2MtPmNpY19yb290KTsKIAl3aGlsZSAobiAhPSBOVUxMKSB7CiAJCWNpYyA9IHJiX2VudHJ5KG4sIHN0cnVjdCBjZnFfaW9fY29udGV4dCwgcmJfbm9kZSk7Ci0gCisKIAkJY2hhbmdlZF9pb3ByaW8oY2ljKTsKIAkJbiA9IHJiX25leHQobik7CiAJfQogCi0Jd3JpdGVfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NTgsNyArMTQ3Myw4IEBACiAJCSAqIHNldCAtPnNsaWNlX2xlZnQgdG8gYWxsb3cgcHJlZW1wdGlvbiBmb3IgYSBuZXcgcHJvY2VzcwogCQkgKi8KIAkJY2ZxcS0+c2xpY2VfbGVmdCA9IDIgKiBjZnFkLT5jZnFfc2xpY2VfaWRsZTsKLQkJY2ZxX21hcmtfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKTsKKwkJaWYgKCFjZnFkLT5od190YWcpCisJCQljZnFfbWFya19jZnFxX2lkbGVfd2luZG93KGNmcXEpOwogCQljZnFfbWFya19jZnFxX3ByaW9fY2hhbmdlZChjZnFxKTsKIAkJY2ZxX2luaXRfcHJpb19kYXRhKGNmcXEpOwogCX0KQEAgLTE0NzIsMTkgKzE0ODgsMzggQEAKIAlyZXR1cm4gY2ZxcTsKIH0KIAorc3RhdGljIHZvaWQKK2NmcV9kcm9wX2RlYWRfY2ljKHN0cnVjdCBpb19jb250ZXh0ICppb2MsIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQoreworCXNwaW5fbG9jaygmY2ZxX2V4aXRfbG9jayk7CisJcmJfZXJhc2UoJmNpYy0+cmJfbm9kZSwgJmlvYy0+Y2ljX3Jvb3QpOworCWxpc3RfZGVsX2luaXQoJmNpYy0+cXVldWVfbGlzdCk7CisJc3Bpbl91bmxvY2soJmNmcV9leGl0X2xvY2spOworCWttZW1fY2FjaGVfZnJlZShjZnFfaW9jX3Bvb2wsIGNpYyk7CisJYXRvbWljX2RlYygmaW9jX2NvdW50KTsKK30KKwogc3RhdGljIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqCiBjZnFfY2ljX3JiX2xvb2t1cChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBpb19jb250ZXh0ICppb2MpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKm4gPSBpb2MtPmNpY19yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKm47CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7Ci0Jdm9pZCAqa2V5ID0gY2ZxZDsKKwl2b2lkICprLCAqa2V5ID0gY2ZxZDsKIAorcmVzdGFydDoKKwluID0gaW9jLT5jaWNfcm9vdC5yYl9ub2RlOwogCXdoaWxlIChuKSB7CiAJCWNpYyA9IHJiX2VudHJ5KG4sIHN0cnVjdCBjZnFfaW9fY29udGV4dCwgcmJfbm9kZSk7CisJCS8qIC0+a2V5IG11c3QgYmUgY29waWVkIHRvIGF2b2lkIHJhY2Ugd2l0aCBjZnFfZXhpdF9xdWV1ZSgpICovCisJCWsgPSBjaWMtPmtleTsKKwkJaWYgKHVubGlrZWx5KCFrKSkgeworCQkJY2ZxX2Ryb3BfZGVhZF9jaWMoaW9jLCBjaWMpOworCQkJZ290byByZXN0YXJ0OworCQl9CiAKLQkJaWYgKGtleSA8IGNpYy0+a2V5KQorCQlpZiAoa2V5IDwgaykKIAkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChrZXkgPiBjaWMtPmtleSkKKwkJZWxzZSBpZiAoa2V5ID4gaykKIAkJCW4gPSBuLT5yYl9yaWdodDsKIAkJZWxzZQogCQkJcmV0dXJuIGNpYzsKQEAgLTE0OTcsMzMgKzE1MzIsNDEgQEAKIGNmcV9jaWNfbGluayhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBpb19jb250ZXh0ICppb2MsCiAJICAgICBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYykKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmaW9jLT5jaWNfcm9vdC5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByYl9ub2RlICoqcDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqX19jaWM7Ci0KLQlyZWFkX2xvY2soJmNmcV9leGl0X2xvY2spOworCXZvaWQgKms7CiAKIAljaWMtPmlvYyA9IGlvYzsKIAljaWMtPmtleSA9IGNmcWQ7CiAKIAlpb2MtPnNldF9pb3ByaW8gPSBjZnFfaW9jX3NldF9pb3ByaW87Ci0KK3Jlc3RhcnQ6CisJcGFyZW50ID0gTlVMTDsKKwlwID0gJmlvYy0+Y2ljX3Jvb3QucmJfbm9kZTsKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCV9fY2ljID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsIHJiX25vZGUpOworCQkvKiAtPmtleSBtdXN0IGJlIGNvcGllZCB0byBhdm9pZCByYWNlIHdpdGggY2ZxX2V4aXRfcXVldWUoKSAqLworCQlrID0gX19jaWMtPmtleTsKKwkJaWYgKHVubGlrZWx5KCFrKSkgeworCQkJY2ZxX2Ryb3BfZGVhZF9jaWMoaW9jLCBjaWMpOworCQkJZ290byByZXN0YXJ0OworCQl9CiAKLQkJaWYgKGNpYy0+a2V5IDwgX19jaWMtPmtleSkKKwkJaWYgKGNpYy0+a2V5IDwgaykKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY2ljLT5rZXkgPiBfX2NpYy0+a2V5KQorCQllbHNlIGlmIChjaWMtPmtleSA+IGspCiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCQllbHNlCiAJCQlCVUcoKTsKIAl9CiAKKwlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOwogCXJiX2xpbmtfbm9kZSgmY2ljLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmY2ljLT5yYl9ub2RlLCAmaW9jLT5jaWNfcm9vdCk7CiAJbGlzdF9hZGQoJmNpYy0+cXVldWVfbGlzdCwgJmNmcWQtPmNpY19saXN0KTsKLQlyZWFkX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CisJc3Bpbl91bmxvY2soJmNmcV9leGl0X2xvY2spOwogfQogCiAvKgpAQCAtMTYyMiw3ICsxNjY1LDcgQEAKIHsKIAlpbnQgZW5hYmxlX2lkbGUgPSBjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKTsKIAotCWlmICghY2ljLT5pb2MtPnRhc2sgfHwgIWNmcWQtPmNmcV9zbGljZV9pZGxlKQorCWlmICghY2ljLT5pb2MtPnRhc2sgfHwgIWNmcWQtPmNmcV9zbGljZV9pZGxlIHx8IGNmcWQtPmh3X3RhZykKIAkJZW5hYmxlX2lkbGUgPSAwOwogCWVsc2UgaWYgKHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpKSB7CiAJCWlmIChjaWMtPnR0aW1lX21lYW4gPiBjZnFkLT5jZnFfc2xpY2VfaWRsZSkKQEAgLTE3MTMsMTQgKzE3NTYsMjQgQEAKIAogCWNmcXEtPm5leHRfY3JxID0gY2ZxX2Nob29zZV9yZXEoY2ZxZCwgY2ZxcS0+bmV4dF9jcnEsIGNycSk7CiAKKwljaWMgPSBjcnEtPmlvX2NvbnRleHQ7CisKIAkvKgogCSAqIHdlIG5ldmVyIHdhaXQgZm9yIGFuIGFzeW5jIHJlcXVlc3QgYW5kIHdlIGRvbid0IGFsbG93IHByZWVtcHRpb24KIAkgKiBvZiBhbiBhc3luYyByZXF1ZXN0LiBzbyBqdXN0IHJldHVybiBlYXJseQogCSAqLwotCWlmICghY2ZxX2NycV9pc19zeW5jKGNycSkpCisJaWYgKCFjZnFfY3JxX2lzX3N5bmMoY3JxKSkgeworCQkvKgorCQkgKiBzeW5jIHByb2Nlc3MgaXNzdWVkIGFuIGFzeW5jIHJlcXVlc3QsIGlmIGl0J3Mgd2FpdGluZworCQkgKiB0aGVuIGV4cGlyZSBpdCBhbmQga2ljayBycSBoYW5kbGluZy4KKwkJICovCisJCWlmIChjaWMgPT0gY2ZxZC0+YWN0aXZlX2NpYyAmJgorCQkgICAgZGVsX3RpbWVyKCZjZnFkLT5pZGxlX3NsaWNlX3RpbWVyKSkgeworCQkJY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgMCk7CisJCQljZnFfc3RhcnRfcXVldWVpbmcoY2ZxZCwgY2ZxcSk7CisJCX0KIAkJcmV0dXJuOwotCi0JY2ljID0gY3JxLT5pb19jb250ZXh0OworCX0KIAogCWNmcV91cGRhdGVfaW9fdGhpbmt0aW1lKGNmcWQsIGNpYyk7CiAJY2ZxX3VwZGF0ZV9pb19zZWVrdGltZShjZnFkLCBjaWMsIGNycSk7CkBAIC0yMTM4LDEwICsyMTkxLDkgQEAKIAkgKiByYWNlIHdpdGggYSBub24taWRsZSBxdWV1ZSwgcmVzZXQgdGltZXIKIAkgKi8KIAllbmQgPSBjZnFkLT5sYXN0X2VuZF9yZXF1ZXN0ICsgQ0ZRX0lETEVfR1JBQ0U7Ci0JaWYgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGVuZCkpIHsKLQkJY2ZxZC0+aWRsZV9jbGFzc190aW1lci5leHBpcmVzID0gZW5kOwotCQlhZGRfdGltZXIoJmNmcWQtPmlkbGVfY2xhc3NfdGltZXIpOwotCX0gZWxzZQorCWlmICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmQpKQorCQltb2RfdGltZXIoJmNmcWQtPmlkbGVfY2xhc3NfdGltZXIsIGVuZCk7CisJZWxzZQogCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CkBAIC0yMTYxLDcgKzIyMTMsNyBAQAogCiAJY2ZxX3NodXRkb3duX3RpbWVyX3dxKGNmcWQpOwogCi0Jd3JpdGVfbG9jaygmY2ZxX2V4aXRfbG9jayk7CisJc3Bpbl9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCiAJaWYgKGNmcWQtPmFjdGl2ZV9xdWV1ZSkKQEAgLTIxODQsNyArMjIzNiw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCXdyaXRlX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CisJc3Bpbl91bmxvY2soJmNmcV9leGl0X2xvY2spOwogCiAJY2ZxX3NodXRkb3duX3RpbWVyX3dxKGNmcWQpOwogCkBAIC0yMTk0LDE0ICsyMjQ2LDE0IEBACiAJa2ZyZWUoY2ZxZCk7CiB9CiAKLXN0YXRpYyBpbnQgY2ZxX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQorc3RhdGljIHZvaWQgKmNmcV9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgZWxldmF0b3JfdCAqZSkKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQ7CiAJaW50IGk7CiAKIAljZnFkID0ga21hbGxvYyhzaXplb2YoKmNmcWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNmcWQpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAogCW1lbXNldChjZnFkLCAwLCBzaXplb2YoKmNmcWQpKTsKIApAQCAtMjIzMSw4ICsyMjgzLDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQ0ZRX1FIQVNIX0VOVFJJRVM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZjZnFkLT5jZnFfaGFzaFtpXSk7CiAKLQllLT5lbGV2YXRvcl9kYXRhID0gY2ZxZDsKLQogCWNmcWQtPnF1ZXVlID0gcTsKIAogCWNmcWQtPm1heF9xdWV1ZWQgPSBxLT5ucl9yZXF1ZXN0cyAvIDQ7CkBAIC0yMjU5LDE0ICsyMzA5LDE0IEBACiAJY2ZxZC0+Y2ZxX3NsaWNlX2FzeW5jX3JxID0gY2ZxX3NsaWNlX2FzeW5jX3JxOwogCWNmcWQtPmNmcV9zbGljZV9pZGxlID0gY2ZxX3NsaWNlX2lkbGU7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2ZxZDsKIG91dF9jcnFwb29sOgogCWtmcmVlKGNmcWQtPmNmcV9oYXNoKTsKIG91dF9jZnFoYXNoOgogCWtmcmVlKGNmcWQtPmNycV9oYXNoKTsKIG91dF9jcnFoYXNoOgogCWtmcmVlKGNmcWQpOwotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfc2xhYl9raWxsKHZvaWQpCkBAIC0yNDM5LDkgKzI0ODksMTAgQEAKIAlERUNMQVJFX0NPTVBMRVRJT04oYWxsX2dvbmUpOwogCWVsdl91bnJlZ2lzdGVyKCZpb3NjaGVkX2NmcSk7CiAJaW9jX2dvbmUgPSAmYWxsX2dvbmU7Ci0JYmFycmllcigpOworCS8qIGlvY19nb25lJ3MgdXBkYXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgcmVhZGluZyBpb2NfY291bnQgKi8KKwlzbXBfd21iKCk7CiAJaWYgKGF0b21pY19yZWFkKCZpb2NfY291bnQpKQotCQljb21wbGV0ZShpb2NfZ29uZSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oaW9jX2dvbmUpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCWNmcV9zbGFiX2tpbGwoKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYyBiL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYwppbmRleCAzOTlmYTFlLi4zYmQwNDE1IDEwMDY0NAotLS0gYS9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKKysrIGIvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCkBAIC02MTMsMjQgKzYxMywyNCBAQAogICogaW5pdGlhbGl6ZSBlbGV2YXRvciBwcml2YXRlIGRhdGEgKGRlYWRsaW5lX2RhdGEpLCBhbmQgYWxsb2MgYSBkcnEgZm9yCiAgKiBlYWNoIHJlcXVlc3Qgb24gdGhlIGZyZWUgbGlzdHMKICAqLwotc3RhdGljIGludCBkZWFkbGluZV9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgZWxldmF0b3JfdCAqZSkKK3N0YXRpYyB2b2lkICpkZWFkbGluZV9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgZWxldmF0b3JfdCAqZSkKIHsKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQ7CiAJaW50IGk7CiAKIAlpZiAoIWRycV9wb29sKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAKIAlkZCA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmRkKSwgR0ZQX0tFUk5FTCwgcS0+bm9kZSk7CiAJaWYgKCFkZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCW1lbXNldChkZCwgMCwgc2l6ZW9mKCpkZCkpOwogCiAJZGQtPmhhc2ggPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKkRMX0hBU0hfRU5UUklFUywKIAkJCQlHRlBfS0VSTkVMLCBxLT5ub2RlKTsKIAlpZiAoIWRkLT5oYXNoKSB7CiAJCWtmcmVlKGRkKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCX0KIAogCWRkLT5kcnFfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX25vZGUoQkxLREVWX01JTl9SUSwgbWVtcG9vbF9hbGxvY19zbGFiLApAQCAtNjM4LDcgKzYzOCw3IEBACiAJaWYgKCFkZC0+ZHJxX3Bvb2wpIHsKIAkJa2ZyZWUoZGQtPmhhc2gpOwogCQlrZnJlZShkZCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRExfSEFTSF9FTlRSSUVTOyBpKyspCkBAIC02NTMsOCArNjUzLDcgQEAKIAlkZC0+d3JpdGVzX3N0YXJ2ZWQgPSB3cml0ZXNfc3RhcnZlZDsKIAlkZC0+ZnJvbnRfbWVyZ2VzID0gMTsKIAlkZC0+Zmlmb19iYXRjaCA9IGZpZm9fYmF0Y2g7Ci0JZS0+ZWxldmF0b3JfZGF0YSA9IGRkOwotCXJldHVybiAwOworCXJldHVybiBkZDsKIH0KIAogc3RhdGljIHZvaWQgZGVhZGxpbmVfcHV0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCAwZDZiZTAzLi5hMGFmZGQzIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTEyMSwxNiArMTIxLDE2IEBACiAJcmV0dXJuIGU7CiB9CiAKLXN0YXRpYyBpbnQgZWxldmF0b3JfYXR0YWNoKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSkKK3N0YXRpYyB2b2lkICplbGV2YXRvcl9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlyZXR1cm4gZXEtPm9wcy0+ZWxldmF0b3JfaW5pdF9mbihxLCBlcSk7Cit9CiAKK3N0YXRpYyB2b2lkIGVsZXZhdG9yX2F0dGFjaChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEsCisJCQkgICB2b2lkICpkYXRhKQorewogCXEtPmVsZXZhdG9yID0gZXE7Ci0KLQlpZiAoZXEtPm9wcy0+ZWxldmF0b3JfaW5pdF9mbikKLQkJcmV0ID0gZXEtPm9wcy0+ZWxldmF0b3JfaW5pdF9mbihxLCBlcSk7Ci0KLQlyZXR1cm4gcmV0OworCWVxLT5lbGV2YXRvcl9kYXRhID0gZGF0YTsKIH0KIAogc3RhdGljIGNoYXIgY2hvc2VuX2VsZXZhdG9yWzE2XTsKQEAgLTE4MSw2ICsxODEsNyBAQAogCXN0cnVjdCBlbGV2YXRvcl90eXBlICplID0gTlVMTDsKIAlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxOwogCWludCByZXQgPSAwOworCXZvaWQgKmRhdGE7CiAKIAlJTklUX0xJU1RfSEVBRCgmcS0+cXVldWVfaGVhZCk7CiAJcS0+bGFzdF9tZXJnZSA9IE5VTEw7CkBAIC0yMDIsMTAgKzIwMywxMyBAQAogCWlmICghZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gZWxldmF0b3JfYXR0YWNoKHEsIGVxKTsKLQlpZiAocmV0KQorCWRhdGEgPSBlbGV2YXRvcl9pbml0X3F1ZXVlKHEsIGVxKTsKKwlpZiAoIWRhdGEpIHsKIAkJa29iamVjdF9wdXQoJmVxLT5rb2JqKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCisJZWxldmF0b3JfYXR0YWNoKHEsIGVxLCBkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzMsNiArMzM3LDcgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJdW5zaWduZWQgb3Jkc2VxOworCWludCB1bnBsdWdfaXQgPSAxOwogCiAJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lOU0VSVCk7CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAKIAkJfQogCiAJCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsIHBvcyk7CisJCS8qCisJCSAqIG1vc3QgcmVxdWV1ZXMgaGFwcGVuIGJlY2F1c2Ugb2YgYSBidXN5IGNvbmRpdGlvbiwgZG9uJ3QKKwkJICogZm9yY2UgdW5wbHVnIG9mIHRoZSBxdWV1ZSBmb3IgdGhhdCBjYXNlLgorCQkgKi8KKwkJdW5wbHVnX2l0ID0gMDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDA3LDcgKzQxNyw3IEBACiAJCUJVRygpOwogCX0KIAotCWlmIChibGtfcXVldWVfcGx1Z2dlZChxKSkgeworCWlmICh1bnBsdWdfaXQgJiYgYmxrX3F1ZXVlX3BsdWdnZWQocSkpIHsKIAkJaW50IG5ycSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdCiAJCQktIHEtPmluX2ZsaWdodDsKIApAQCAtNzE2LDEzICs3MjYsMTYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZWx2X3VucmVnaXN0ZXJfcXVldWUoZWxldmF0b3JfdCAqZSkKK3sKKwlrb2JqZWN0X3VldmVudCgmZS0+a29iaiwgS09CSl9SRU1PVkUpOworCWtvYmplY3RfZGVsKCZlLT5rb2JqKTsKK30KKwogdm9pZCBlbHZfdW5yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlpZiAocSkgewotCQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7Ci0JCWtvYmplY3RfdWV2ZW50KCZlLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JCWtvYmplY3RfZGVsKCZlLT5rb2JqKTsKLQl9CisJaWYgKHEpCisJCV9fZWx2X3VucmVnaXN0ZXJfcXVldWUocS0+ZWxldmF0b3IpOwogfQogCiBpbnQgZWx2X3JlZ2lzdGVyKHN0cnVjdCBlbGV2YXRvcl90eXBlICplKQpAQCAtNzc0LDYgKzc4Nyw3IEBACiBzdGF0aWMgaW50IGVsZXZhdG9yX3N3aXRjaChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBlbGV2YXRvcl90eXBlICpuZXdfZSkKIHsKIAllbGV2YXRvcl90ICpvbGRfZWxldmF0b3IsICplOworCXZvaWQgKmRhdGE7CiAKIAkvKgogCSAqIEFsbG9jYXRlIG5ldyBlbGV2YXRvcgpAQCAtNzgyLDYgKzc5NiwxMiBAQAogCWlmICghZSkKIAkJcmV0dXJuIDA7CiAKKwlkYXRhID0gZWxldmF0b3JfaW5pdF9xdWV1ZShxLCBlKTsKKwlpZiAoIWRhdGEpIHsKKwkJa29iamVjdF9wdXQoJmUtPmtvYmopOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIFR1cm4gb24gQllQQVNTIGFuZCBkcmFpbiBhbGwgcmVxdWVzdHMgdy8gZWxldmF0b3IgcHJpdmF0ZSBkYXRhCiAJICovCkBAIC04MDAsMTkgKzgyMCwxOSBAQAogCQllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCiAJLyoKLQkgKiB1bnJlZ2lzdGVyIG9sZCBlbGV2YXRvciBkYXRhCisJICogUmVtZW1iZXIgb2xkIGVsZXZhdG9yLgogCSAqLwotCWVsdl91bnJlZ2lzdGVyX3F1ZXVlKHEpOwogCW9sZF9lbGV2YXRvciA9IHEtPmVsZXZhdG9yOwogCiAJLyoKIAkgKiBhdHRhY2ggYW5kIHN0YXJ0IG5ldyBlbGV2YXRvcgogCSAqLwotCWlmIChlbGV2YXRvcl9hdHRhY2gocSwgZSkpCi0JCWdvdG8gZmFpbDsKKwllbGV2YXRvcl9hdHRhY2gocSwgZSwgZGF0YSk7CisKKwlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CisKKwlfX2Vsdl91bnJlZ2lzdGVyX3F1ZXVlKG9sZF9lbGV2YXRvcik7CiAKIAlpZiAoZWx2X3JlZ2lzdGVyX3F1ZXVlKHEpKQogCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CkBAIC04MzEsNyArODUxLDYgQEAKIAkgKi8KIAllbGV2YXRvcl9leGl0KGUpOwogCWUgPSBOVUxMOwotZmFpbDoKIAlxLT5lbGV2YXRvciA9IG9sZF9lbGV2YXRvcjsKIAllbHZfcmVnaXN0ZXJfcXVldWUocSk7CiAJY2xlYXJfYml0KFFVRVVFX0ZMQUdfRUxWU1dJVENILCAmcS0+cXVldWVfZmxhZ3MpOwpAQCAtODk1LDEwICs5MTQsOCBAQAogRVhQT1JUX1NZTUJPTChlbHZfZGlzcGF0Y2hfc29ydCk7CiBFWFBPUlRfU1lNQk9MKGVsdl9hZGRfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKF9fZWx2X2FkZF9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0woZWx2X3JlcXVldWVfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKGVsdl9uZXh0X3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChlbHZfZGVxdWV1ZV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZWx2X3F1ZXVlX2VtcHR5KTsKLUVYUE9SVF9TWU1CT0woZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woZWxldmF0b3JfZXhpdCk7CiBFWFBPUlRfU1lNQk9MKGVsZXZhdG9yX2luaXQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svbGxfcndfYmxrLmMgYi9ibG9jay9sbF9yd19ibGsuYwppbmRleCA1YjI2YWY4NS4uN2ViMzZjNSAxMDA2NDQKLS0tIGEvYmxvY2svbGxfcndfYmxrLmMKKysrIGIvYmxvY2svbGxfcndfYmxrLmMKQEAgLTE1NTQsNyArMTU1NCw3IEBACiAJICogZG9uJ3QgcGx1ZyBhIHN0b3BwZWQgcXVldWUsIGl0IG11c3QgYmUgcGFpcmVkIHdpdGggYmxrX3N0YXJ0X3F1ZXVlKCkKIAkgKiB3aGljaCB3aWxsIHJlc3RhcnQgdGhlIHF1ZXVlaW5nCiAJICovCi0JaWYgKHRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJnEtPnF1ZXVlX2ZsYWdzKSkKKwlpZiAoYmxrX3F1ZXVlX3N0b3BwZWQocSkpCiAJCXJldHVybjsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdChRVUVVRV9GTEFHX1BMVUdHRUQsICZxLT5xdWV1ZV9mbGFncykpIHsKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAgKi8KIHZvaWQgX19nZW5lcmljX3VucGx1Z19kZXZpY2UocmVxdWVzdF9xdWV1ZV90ICpxKQogewotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICZxLT5xdWV1ZV9mbGFncykpKQorCWlmICh1bmxpa2VseShibGtfcXVldWVfc3RvcHBlZChxKSkpCiAJCXJldHVybjsKIAogCWlmICghYmxrX3JlbW92ZV9wbHVnKHEpKQpAQCAtMTczMiwxNSArMTczMiwyOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCWJsa19yZW1vdmVfcGx1ZyhxKTsKLQlpZiAoIWVsdl9xdWV1ZV9lbXB0eShxKSkKLQkJcS0+cmVxdWVzdF9mbihxKTsKKworCS8qCisJICogT25seSByZWN1cnNlIG9uY2UgdG8gYXZvaWQgb3ZlcnJ1bm5pbmcgdGhlIHN0YWNrLCBsZXQgdGhlIHVucGx1ZworCSAqIGhhbmRsaW5nIHJlaW52b2tlIHRoZSBoYW5kbGVyIHNob3J0bHkgaWYgd2UgYWxyZWFkeSBnb3QgdGhlcmUuCisJICovCisJaWYgKCFlbHZfcXVldWVfZW1wdHkocSkpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnEtPnF1ZXVlX2ZsYWdzKSkgeworCQkJcS0+cmVxdWVzdF9mbihxKTsKKwkJCWNsZWFyX2JpdChRVUVVRV9GTEFHX1JFRU5URVIsICZxLT5xdWV1ZV9mbGFncyk7CisJCX0gZWxzZSB7CisJCQlibGtfcGx1Z19kZXZpY2UocSk7CisJCQlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnEtPnVucGx1Z193b3JrKTsKKwkJfQorCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnVuX3F1ZXVlKTsKIAogLyoqCiAgKiBibGtfY2xlYW51cF9xdWV1ZTogLSByZWxlYXNlIGEgJnJlcXVlc3RfcXVldWVfdCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQKLSAqIEBxOiAgICB0aGUgcmVxdWVzdCBxdWV1ZSB0byBiZSByZWxlYXNlZAorICogQGtvYmo6ICAgIHRoZSBrb2JqIGJlbG9uZ2luZyBvZiB0aGUgcmVxdWVzdCBxdWV1ZSB0byBiZSByZWxlYXNlZAogICoKICAqIERlc2NyaXB0aW9uOgogICogICAgIGJsa19jbGVhbnVwX3F1ZXVlIGlzIHRoZSBwYWlyIHRvIGJsa19pbml0X3F1ZXVlKCkgb3IKQEAgLTMzODUsNyArMzM5OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIGJsa19jcHVfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJsa19jcHVfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSBibGtfY3B1X25vdGlmeSwKIH07CiAKQEAgLTM0MzksNyArMzQ1MiwxMiBAQAogCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkgJiYgYmxrX2ZzX3JlcXVlc3QocmVxKSkKIAkJbGFwdG9wX2lvX2NvbXBsZXRpb24oKTsKIAotCWlmIChkaXNrICYmIGJsa19mc19yZXF1ZXN0KHJlcSkpIHsKKwkvKgorCSAqIEFjY291bnQgSU8gY29tcGxldGlvbi4gIGJhcl9ycSBpc24ndCBhY2NvdW50ZWQgYXMgYSBub3JtYWwKKwkgKiBJTyBvbiBxdWV1ZWluZyBub3IgY29tcGxldGlvbi4gIEFjY291bnRpbmcgdGhlIGNvbnRhaW5pbmcKKwkgKiByZXF1ZXN0IGlzIGVub3VnaC4KKwkgKi8KKwlpZiAoZGlzayAmJiBibGtfZnNfcmVxdWVzdChyZXEpICYmIHJlcSAhPSAmcmVxLT5xLT5iYXJfcnEpIHsKIAkJdW5zaWduZWQgbG9uZyBkdXJhdGlvbiA9IGppZmZpZXMgLSByZXEtPnN0YXJ0X3RpbWU7CiAJCWNvbnN0IGludCBydyA9IHJxX2RhdGFfZGlyKHJlcSk7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL25vb3AtaW9zY2hlZC5jIGIvYmxvY2svbm9vcC1pb3NjaGVkLmMKaW5kZXggZjM3MGU0YS4uNTZhN2M2MiAxMDA2NDQKLS0tIGEvYmxvY2svbm9vcC1pb3NjaGVkLmMKKysrIGIvYmxvY2svbm9vcC1pb3NjaGVkLmMKQEAgLTY1LDE2ICs2NSwxNSBAQAogCXJldHVybiBsaXN0X2VudHJ5KHJxLT5xdWV1ZWxpc3QubmV4dCwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CiB9CiAKLXN0YXRpYyBpbnQgbm9vcF9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgZWxldmF0b3JfdCAqZSkKK3N0YXRpYyB2b2lkICpub29wX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBub29wX2RhdGEgKm5kOwogCiAJbmQgPSBrbWFsbG9jKHNpemVvZigqbmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5kKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJm5kLT5xdWV1ZSk7Ci0JZS0+ZWxldmF0b3JfZGF0YSA9IG5kOwotCXJldHVybiAwOworCXJldHVybiBuZDsKIH0KIAogc3RhdGljIHZvaWQgbm9vcF9leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggMjRmN2FmOS4uYjMzZWRhMiAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMzUwLDE2ICszNTAsNTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHNnX3Njc2lfaW9jdGwgIC0tICBoYW5kbGUgZGVwcmVjYXRlZCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCBpb2N0bAorICogQGZpbGU6CWZpbGUgdGhpcyBpb2N0bCBvcGVyYXRlcyBvbiAob3B0aW9uYWwpCisgKiBAcToJCXJlcXVlc3QgcXVldWUgdG8gc2VuZCBzY3NpIGNvbW1hbmRzIGRvd24KKyAqIEBkaXNrOglnZW5kaXNrIHRvIG9wZXJhdGUgb24gKG9wdGlvbikKKyAqIEBzaWM6CXVzZXJzcGFjZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgY29tbWFuZCB0byBwZXJmb3JtCisgKgorICogU2VuZCBkb3duIHRoZSBzY3NpIGNvbW1hbmQgZGVzY3JpYmVkIGJ5IEBzaWMgdG8gdGhlIGRldmljZSBiZWxvdworICogdGhlIHJlcXVlc3QgcXVldWUgQHEuICBJZiBAZmlsZSBpcyBub24tTlVMTCBpdCdzIHVzZWQgdG8gcGVyZm9ybQorICogZmluZS1ncmFpbmVkIHBlcm1pc3Npb24gY2hlY2tzIHRoYXQgYWxsb3cgdXNlcnMgdG8gc2VuZCBkb3duCisgKiBub24tZGVzdHJ1Y3RpdmUgU0NTSSBjb21tYW5kcy4gIElmIHRoZSBjYWxsZXIgaGFzIGEgc3RydWN0IGdlbmRpc2sKKyAqIGF2YWlsYWJsZSBpdCBzaG91bGQgYmUgcGFzc2VkIGluIGFzIEBkaXNrIHRvIGFsbG93IHRoZSBsb3cgbGV2ZWwKKyAqIGRyaXZlciB0byB1c2UgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBpdC4gIEEgbm9uLU5VTEwgQGRpc2sKKyAqIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlIGxvdyBsZXZlbCBkcml2ZXIgZG9lc24ndAorICogbmVlZCBpdCAoZS5nLiBpbiB0aGUgc2NzaSBzdWJzeXN0ZW0pLgorICoKKyAqIE5vdGVzOgorICogICAtICBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkIC0gdXNlcnMgc2hvdWxkIHVzZSB0aGUgU0dfSU8KKyAqICAgICAgaW50ZXJmYWNlIGluc3RlYWQsIGFzIHRoaXMgaXMgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIHRvCisgKiAgICAgIHBlcmZvcm1pbmcgU0NTSSBjb21tYW5kcyBvbiBhIGRldmljZS4KKyAqICAgLSAgVGhlIFNDU0kgY29tbWFuZCBsZW5ndGggaXMgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgdGhlIDFzdCBieXRlCisgKiAgICAgIG9mIHRoZSBnaXZlbiBjb21tYW5kLiBUaGVyZSBpcyBubyB3YXkgdG8gb3ZlcnJpZGUgdGhpcy4KKyAqICAgLSAgRGF0YSB0cmFuc2ZlcnMgYXJlIGxpbWl0ZWQgdG8gUEFHRV9TSVpFCisgKiAgIC0gIFRoZSBsZW5ndGggKHggKyB5KSBtdXN0IGJlIGF0IGxlYXN0IE9NQVhfU0JfTEVOIGJ5dGVzIGxvbmcgdG8KKyAqICAgICAgYWNjb21tb2RhdGUgdGhlIHNlbnNlIGJ1ZmZlciB3aGVuIGFuIGVycm9yIG9jY3Vycy4KKyAqICAgICAgVGhlIHNlbnNlIGJ1ZmZlciBpcyB0cnVuY2F0ZWQgdG8gT01BWF9TQl9MRU4gKDE2KSBieXRlcyBzbyB0aGF0CisgKiAgICAgIG9sZCBjb2RlIHdpbGwgbm90IGJlIHN1cnByaXNlZC4KKyAqICAgLSAgSWYgYSBVbml4IGVycm9yIG9jY3VycyAoZS5nLiBFTk9NRU0pIHRoZW4gdGhlIHVzZXIgd2lsbCByZWNlaXZlCisgKiAgICAgIGEgbmVnYXRpdmUgcmV0dXJuIGFuZCB0aGUgVW5peCBlcnJvciBjb2RlIGluICdlcnJubycuCisgKiAgICAgIElmIHRoZSBTQ1NJIGNvbW1hbmQgc3VjY2VlZHMgdGhlbiAwIGlzIHJldHVybmVkLgorICogICAgICBQb3NpdGl2ZSBudW1iZXJzIHJldHVybmVkIGFyZSB0aGUgY29tcGFjdGVkIFNDU0kgZXJyb3IgY29kZXMgKDQKKyAqICAgICAgYnl0ZXMgaW4gb25lIGludCkgd2hlcmUgdGhlIGxvd2VzdCBieXRlIGlzIHRoZSBTQ1NJIHN0YXR1cy4KKyAqLwogI2RlZmluZSBPTUFYX1NCX0xFTiAxNiAgICAgICAgICAvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCi1zdGF0aWMgaW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHJlcXVlc3RfcXVldWVfdCAqcSwKLQkJCSBzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywgU2NzaV9Jb2N0bF9Db21tYW5kIF9fdXNlciAqc2ljKQoraW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkgIHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqc2ljKQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBpbl9sZW4sIG91dF9sZW4sIGJ5dGVzLCBvcGNvZGUsIGNtZGxlbjsKIAljaGFyICpidWZmZXIgPSBOVUxMLCBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCisJaWYgKCFzaWMpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBnZXQgaW4gYW4gb3V0IGxlbmd0aHMsIHZlcmlmeSB0aGV5IGRvbid0IGV4Y2VlZCBhIHBhZ2Ugd29ydGggb2YgZGF0YQogCSAqLwpAQCAtMzkzLDQ1ICs0MjgsNTMgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIocnEtPmNtZCwgc2ljLT5kYXRhLCBjbWRsZW4pKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgc2ljLT5kYXRhICsgY21kbGVuLCBpbl9sZW4pKQorCWlmIChpbl9sZW4gJiYgY29weV9mcm9tX3VzZXIoYnVmZmVyLCBzaWMtPmRhdGEgKyBjbWRsZW4sIGluX2xlbikpCiAJCWdvdG8gZXJyb3I7CiAKIAllcnIgPSB2ZXJpZnlfY29tbWFuZChmaWxlLCBycS0+Y21kKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCisJLyogZGVmYXVsdC4gIHBvc3NpYmxlIG92ZXJyaWRlbiBsYXRlciAqLworCXJxLT5yZXRyaWVzID0gNTsKKwogCXN3aXRjaCAob3Bjb2RlKSB7Ci0JCWNhc2UgU0VORF9ESUFHTk9TVElDOgotCQljYXNlIEZPUk1BVF9VTklUOgotCQkJcnEtPnRpbWVvdXQgPSBGT1JNQVRfVU5JVF9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBUlRfU1RPUDoKLQkJCXJxLT50aW1lb3V0ID0gU1RBUlRfU1RPUF9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgTU9WRV9NRURJVU06Ci0JCQlycS0+dGltZW91dCA9IE1PVkVfTUVESVVNX1RJTUVPVVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUFEX0VMRU1FTlRfU1RBVFVTOgotCQkJcnEtPnRpbWVvdXQgPSBSRUFEX0VMRU1FTlRfU1RBVFVTX1RJTUVPVVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUFEX0RFRkVDVF9EQVRBOgotCQkJcnEtPnRpbWVvdXQgPSBSRUFEX0RFRkVDVF9EQVRBX1RJTUVPVVQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJxLT50aW1lb3V0ID0gQkxLX0RFRkFVTFRfVElNRU9VVDsKLQkJCWJyZWFrOworCWNhc2UgU0VORF9ESUFHTk9TVElDOgorCWNhc2UgRk9STUFUX1VOSVQ6CisJCXJxLT50aW1lb3V0ID0gRk9STUFUX1VOSVRfVElNRU9VVDsKKwkJcnEtPnJldHJpZXMgPSAxOworCQlicmVhazsKKwljYXNlIFNUQVJUX1NUT1A6CisJCXJxLT50aW1lb3V0ID0gU1RBUlRfU1RPUF9USU1FT1VUOworCQlicmVhazsKKwljYXNlIE1PVkVfTUVESVVNOgorCQlycS0+dGltZW91dCA9IE1PVkVfTUVESVVNX1RJTUVPVVQ7CisJCWJyZWFrOworCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzoKKwkJcnEtPnRpbWVvdXQgPSBSRUFEX0VMRU1FTlRfU1RBVFVTX1RJTUVPVVQ7CisJCWJyZWFrOworCWNhc2UgUkVBRF9ERUZFQ1RfREFUQToKKwkJcnEtPnRpbWVvdXQgPSBSRUFEX0RFRkVDVF9EQVRBX1RJTUVPVVQ7CisJCXJxLT5yZXRyaWVzID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnEtPnRpbWVvdXQgPSBCTEtfREVGQVVMVF9USU1FT1VUOworCQlicmVhazsKKwl9CisKKwlpZiAoYnl0ZXMgJiYgYmxrX3JxX21hcF9rZXJuKHEsIHJxLCBidWZmZXIsIGJ5dGVzLCBfX0dGUF9XQUlUKSkgeworCQllcnIgPSBEUklWRVJfRVJST1IgPDwgMjQ7CisJCWdvdG8gb3V0OwogCX0KIAogCW1lbXNldChzZW5zZSwgMCwgc2l6ZW9mKHNlbnNlKSk7CiAJcnEtPnNlbnNlID0gc2Vuc2U7CiAJcnEtPnNlbnNlX2xlbiA9IDA7Ci0KLQlycS0+ZGF0YSA9IGJ1ZmZlcjsKLQlycS0+ZGF0YV9sZW4gPSBieXRlczsKIAlycS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDOwotCXJxLT5yZXRyaWVzID0gMDsKIAotCWJsa19leGVjdXRlX3JxKHEsIGJkX2Rpc2ssIHJxLCAwKTsKKwlibGtfZXhlY3V0ZV9ycShxLCBkaXNrLCBycSwgMCk7CisKK291dDoKIAllcnIgPSBycS0+ZXJyb3JzICYgMHhmZjsJLyogb25seSA4IGJpdCBTQ1NJIHN0YXR1cyAqLwogCWlmIChlcnIpIHsKIAkJaWYgKHJxLT5zZW5zZV9sZW4gJiYgcnEtPnNlbnNlKSB7CkBAIC00NTAsNyArNDkzLDcgQEAKIAlibGtfcHV0X3JlcXVlc3QocnEpOwogCXJldHVybiBlcnI7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHNnX3Njc2lfaW9jdGwpOwogCiAvKiBTZW5kIGJhc2ljIGJsb2NrIHJlcXVlc3RzICovCiBzdGF0aWMgaW50IF9fYmxrX3NlbmRfZ2VuZXJpYyhyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBnZW5kaXNrICpiZF9kaXNrLCBpbnQgY21kLCBpbnQgZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCA1YzkxZDZhLi5hZWI1YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC02OCw4ICs2OCw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zbi9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvZWRhYy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcnRjL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCBkNmU4ZmZiLi40NDdkOGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTI1LDkgKzI1LDYgQEAKIG9iai0kKENPTkZJR19GQl9JODEwKSAgICAgICAgICAgKz0gdmlkZW8vaTgxMC8KIG9iai0kKENPTkZJR19GQl9JTlRFTCkgICAgICAgICAgKz0gdmlkZW8vaW50ZWxmYi8KIAotIyB3ZSBhbHNvIG5lZWQgaW5wdXQvc2VyaW8gZWFybHkgc28gc2VyaW8gYnVzIGlzIGluaXRpYWxpemVkIGJ5IHRoZSB0aW1lCi0jIHNlcmlhbCBkcml2ZXJzIHN0YXJ0IHJlZ2lzdGVyaW5nIHRoZWlyIHNlcmlvIHBvcnRzCi1vYmotJChDT05GSUdfU0VSSU8pCQkrPSBpbnB1dC9zZXJpby8KIG9iai15CQkJCSs9IHNlcmlhbC8KIG9iai0kKENPTkZJR19QQVJQT1JUKQkJKz0gcGFycG9ydC8KIG9iai15CQkJCSs9IGJhc2UvIGJsb2NrLyBtaXNjLyBtZmQvIG5ldC8gbWVkaWEvCkBAIC01Myw2ICs1MCw3IEBACiBvYmotJChDT05GSUdfVVNCKQkJKz0gdXNiLwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHVzYi8KIG9iai0kKENPTkZJR19VU0JfR0FER0VUKQkrPSB1c2IvZ2FkZ2V0Lworb2JqLSQoQ09ORklHX1NFUklPKQkJKz0gaW5wdXQvc2VyaW8vCiBvYmotJChDT05GSUdfR0FNRVBPUlQpCQkrPSBpbnB1dC9nYW1lcG9ydC8KIG9iai0kKENPTkZJR19JTlBVVCkJCSs9IGlucHV0Lwogb2JqLSQoQ09ORklHX0kyTykJCSs9IG1lc3NhZ2UvCkBAIC03MSw2ICs2OSw3IEBACiBvYmotJChDT05GSUdfTU1DKQkJKz0gbW1jLwogb2JqLSQoQ09ORklHX05FV19MRURTKQkJKz0gbGVkcy8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EKQkrPSBpbmZpbmliYW5kLworb2JqLSQoQ09ORklHX0lQQVRIX0NPUkUpCSs9IGluZmluaWJhbmQvCiBvYmotJChDT05GSUdfU0dJX1NOKQkJKz0gc24vCiBvYmoteQkJCQkrPSBmaXJtd2FyZS8KIG9iai0kKENPTkZJR19DUllQVE8pCQkrPSBjcnlwdG8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDVjYjk2MzAuLjJiMmZiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0xMCw5ICsxMCw4IEBACiBjb25maWcgQUNQSQogCWJvb2wgIkFDUEkgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIElBNjQgfHwgWDg2CisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgUE0KLQlzZWxlY3QgUENJCi0KIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgKEFDUEkpIHN1cHBvcnQgZm9yIApAQCAtMzI5LDcgKzMyOCw3IEBACiBjb25maWcgQUNQSV9IT1RQTFVHX01FTU9SWQogCXRyaXN0YXRlICJNZW1vcnkgSG90cGx1ZyIKIAlkZXBlbmRzIG9uIEFDUEkKLQlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyB8fCBYODZfNjQKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnRzIGZvciBBQ1BJIE1lbW9yeSBIb3RwbHVnLiAgVGhpcyBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwppbmRleCBkODgyYmY4Li5lMGE5NWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCkBAIC03NCw3ICs3NCw3IEBACiAJdW5zaWduZWQgc2hvcnQgY2FjaGluZzsJLyogbWVtb3J5IGNhY2hlIGF0dHJpYnV0ZSAqLwogCXVuc2lnbmVkIHNob3J0IHdyaXRlX3Byb3RlY3Q7CS8qIG1lbW9yeSByZWFkL3dyaXRlIGF0dHJpYnV0ZSAqLwogCXU2NCBzdGFydF9hZGRyOwkJLyogTWVtb3J5IFJhbmdlIHN0YXJ0IHBoeXNpY2FsIGFkZHIgKi8KLQl1NjQgZW5kX2FkZHI7CQkvKiBNZW1vcnkgUmFuZ2UgZW5kIHBoeXNpY2FsIGFkZHIgKi8KKwl1NjQgbGVuZ3RoOwkJLyogTWVtb3J5IFJhbmdlIGxlbmd0aCAqLwogfTsKIAogc3RhdGljIGludApAQCAtOTcsMTIgKzk3LDExIEBACiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCWlmIChhZGRyZXNzNjQucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSkgewogCQkJLyogUG9wdWxhdGUgdGhlIHN0cnVjdHVyZSAqLwotCQkJbWVtX2RldmljZS0+Y2FjaGluZyA9Ci0JCQkgICAgYWRkcmVzczY0LmluZm8ubWVtLmNhY2hpbmc7CisJCQltZW1fZGV2aWNlLT5jYWNoaW5nID0gYWRkcmVzczY0LmluZm8ubWVtLmNhY2hpbmc7CiAJCQltZW1fZGV2aWNlLT53cml0ZV9wcm90ZWN0ID0KIAkJCSAgICBhZGRyZXNzNjQuaW5mby5tZW0ud3JpdGVfcHJvdGVjdDsKIAkJCW1lbV9kZXZpY2UtPnN0YXJ0X2FkZHIgPSBhZGRyZXNzNjQubWluaW11bTsKLQkJCW1lbV9kZXZpY2UtPmVuZF9hZGRyID0gYWRkcmVzczY0Lm1heGltdW07CisJCQltZW1fZGV2aWNlLT5sZW5ndGggPSBhZGRyZXNzNjQuYWRkcmVzc19sZW5ndGg7CiAJCX0KIAl9CiAKQEAgLTE5OSw4ICsxOTgsNyBAQAogCSAqIFRlbGwgdGhlIFZNIHRoZXJlIGlzIG1vcmUgbWVtb3J5IGhlcmUuLi4KIAkgKiBOb3RlOiBBc3N1bWUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBvbiBzdWNjZXNzCiAJICovCi0JcmVzdWx0ID0gYWRkX21lbW9yeShtZW1fZGV2aWNlLT5zdGFydF9hZGRyLAotCQkJICAgIChtZW1fZGV2aWNlLT5lbmRfYWRkciAtIG1lbV9kZXZpY2UtPnN0YXJ0X2FkZHIpICsgMSk7CisJcmVzdWx0ID0gYWRkX21lbW9yeShtZW1fZGV2aWNlLT5zdGFydF9hZGRyLCBtZW1fZGV2aWNlLT5sZW5ndGgpOwogCWlmIChyZXN1bHQpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIlxuYWRkX21lbW9yeSBmYWlsZWRcbiIpKTsKIAkJbWVtX2RldmljZS0+c3RhdGUgPSBNRU1PUllfSU5WQUxJRF9TVEFURTsKQEAgLTI0OSw3ICsyNDcsNyBAQAogewogCWludCByZXN1bHQ7CiAJdTY0IHN0YXJ0ID0gbWVtX2RldmljZS0+c3RhcnRfYWRkcjsKLQl1NjQgbGVuID0gbWVtX2RldmljZS0+ZW5kX2FkZHIgLSBzdGFydCArIDE7CisJdTY0IGxlbiA9IG1lbV9kZXZpY2UtPmxlbmd0aDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2Rpc2FibGVfZGV2aWNlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYwppbmRleCBmNGM4Nzc1Li4yMTZjMDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAkgKiBISUQpLCB0aGlzIGJpdCB3aWxsIGJlIG1vdmVkLiBBIGdsb2JhbCB2YXJpYWJsZSBhc3VzX2luZm8gY29udGFpbnMKIAkgKiB0aGUgRFNEVCBoZWFkZXIuCiAJICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9EU0RULCAxLCAmZHNkdCk7CisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9JRF9EU0RULCAxLCAmZHNkdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIENvdWxkbid0IGdldCB0aGUgRFNEVCB0YWJsZSBoZWFkZXJcbiIpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCA2MDZmODczLi5iNzdmMDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC00Myw3ICs0Myw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgYWNwaV9waWNfc2NpX3NldF90cmlnZ2VyKHVuc2lnbmVkIGludCBpcnEsIHUxNiB0cmlnZ2VyKTsKICNlbmRpZgogCi1GQURUX0RFU0NSSVBUT1IgYWNwaV9mYWR0Oworc3RydWN0IGZhZHRfZGVzY3JpcHRvciBhY3BpX2ZhZHQ7CiBFWFBPUlRfU1lNQk9MKGFjcGlfZmFkdCk7CiAKIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9yb290OwpAQCAtNTk2LDYgKzU5Niw4IEBACiAJaWYgKGFjcGlfZGlzYWJsZWQpCiAJCXJldHVybl9WT0lEOwogCisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkNvcmUgcmV2aXNpb24gJTA4eFxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKKwogCS8qIGVuYWJsZSB3b3JrYXJvdW5kcywgdW5sZXNzIHN0cmljdCBBQ1BJIHNwZWMuIGNvbXBsaWFuY2UgKi8KIAlpZiAoIWFjcGlfc3RyaWN0KQogCQlhY3BpX2dibF9lbmFibGVfaW50ZXJwcmV0ZXJfc2xhY2sgPSBUUlVFOwpAQCAtNjE3LDcgKzYxOSw3IEBACiAJLyoKIAkgKiBHZXQgYSBzZXBhcmF0ZSBjb3B5IG9mIHRoZSBGQURUIGZvciB1c2UgYnkgb3RoZXIgZHJpdmVycy4KIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1RBQkxFX0ZBRFQsIDEsICZidWZmZXIpOworCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfVEFCTEVfSURfRkFEVCwgMSwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byBnZXQgdGhlIEZBRFRcbiIpOwogCQlnb3RvIGVycm9yMDsKQEAgLTc0Myw4ICs3NDUsNiBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9pbml0Iik7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiU3Vic3lzdGVtIHJldmlzaW9uICUwOHhcbiIsIEFDUElfQ0FfVkVSU0lPTik7Ci0KIAlpZiAoYWNwaV9kaXNhYmxlZCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiSW50ZXJwcmV0ZXIgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNmaWVsZC5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNmaWVsZC5jCmluZGV4IDc2YmMwNDYuLmE2ZDc3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2ZpZWxkLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzZWNvbmRfZGVzYyA9IE5VTEw7CiAJdTMyIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfY3JlYXRlX2J1ZmZlcl9maWVsZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfY3JlYXRlX2J1ZmZlcl9maWVsZCk7CiAKIAkvKiBHZXQgdGhlIG5hbWVfc3RyaW5nIGFyZ3VtZW50ICovCiAKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2ludGVnZXIgcG9zaXRpb247CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZ2V0X2ZpZWxkX25hbWVzIiwgaW5mbyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZ2V0X2ZpZWxkX25hbWVzLCBpbmZvKTsKIAogCS8qIEZpcnN0IGZpZWxkIHN0YXJ0cyBhdCBiaXQgemVybyAqLwogCkBAIC0zNDIsNyArMzQyLDcgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnOwogCXN0cnVjdCBhY3BpX2NyZWF0ZV9maWVsZF9pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY3JlYXRlX2ZpZWxkIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2NyZWF0ZV9maWVsZCwgb3ApOwogCiAJLyogRmlyc3QgYXJnIGlzIHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgb3BfcmVnaW9uIChtdXN0IGFscmVhZHkgZXhpc3QpICovCiAKQEAgLTM5OSw3ICszOTksNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXU4IHR5cGUgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2luaXRfZmllbGRfb2JqZWN0cyIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19pbml0X2ZpZWxkX29iamVjdHMsIG9wKTsKIAogCXN3aXRjaCAod2Fsa19zdGF0ZS0+b3Bjb2RlKSB7CiAJY2FzZSBBTUxfRklFTERfT1A6CkBAIC00MjUsNiArNDI1LDcgQEAKIAkgKiBXYWxrIHRoZSBsaXN0IG9mIGVudHJpZXMgaW4gdGhlIGZpZWxkX2xpc3QKIAkgKi8KIAl3aGlsZSAoYXJnKSB7CisKIAkJLyogSWdub3JlIE9GRlNFVCBhbmQgQUNDRVNTQVMgdGVybXMgaGVyZSAqLwogCiAJCWlmIChhcmctPmNvbW1vbi5hbWxfb3Bjb2RlID09IEFNTF9JTlRfTkFNRURGSUVMRF9PUCkgewpAQCAtNDgxLDcgKzQ4Miw3IEBACiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKmFyZzsKIAlzdHJ1Y3QgYWNwaV9jcmVhdGVfZmllbGRfaW5mbyBpbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2NyZWF0ZV9iYW5rX2ZpZWxkIiwgb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2NyZWF0ZV9iYW5rX2ZpZWxkLCBvcCk7CiAKIAkvKiBGaXJzdCBhcmcgaXMgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvcF9yZWdpb24gKG11c3QgYWxyZWFkeSBleGlzdCkgKi8KIApAQCAtNTU0LDcgKzU1NSw3IEBACiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKmFyZzsKIAlzdHJ1Y3QgYWNwaV9jcmVhdGVfZmllbGRfaW5mbyBpbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2NyZWF0ZV9pbmRleF9maWVsZCIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19jcmVhdGVfaW5kZXhfZmllbGQsIG9wKTsKIAogCS8qIEZpcnN0IGFyZyBpcyB0aGUgbmFtZSBvZiB0aGUgSW5kZXggcmVnaXN0ZXIgKG11c3QgYWxyZWFkeSBleGlzdCkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNpbml0LmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYwppbmRleCBlNjVhMDdhLi5iYmRmOTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBXYWxrIHRoZSBuYW1lc3BhY2Ugc3RhcnRpbmcgYXQgInN0YXJ0X25vZGUiIGFuZCBwZXJmb3JtIGFueQorICogREVTQ1JJUFRJT046IFdhbGsgdGhlIG5hbWVzcGFjZSBzdGFydGluZyBhdCAiU3RhcnROb2RlIiBhbmQgcGVyZm9ybSBhbnkKICAqICAgICAgICAgICAgICBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24gb24gdGhlIG9iamVjdHMgZm91bmQgdGhlcmVpbgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfaW5pdF93YWxrX2luZm8gaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2luaXRpYWxpemVfb2JqZWN0cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfaW5pdGlhbGl6ZV9vYmplY3RzKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCiAJCQkgICIqKioqIFN0YXJ0aW5nIGluaXRpYWxpemF0aW9uIG9mIG5hbWVzcGFjZSBvYmplY3RzICoqKipcbiIpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0FOWSwgc3RhcnRfbm9kZSwgQUNQSV9VSU5UMzJfTUFYLAogCQkJCSAgICAgYWNwaV9kc19pbml0X29uZV9vYmplY3QsICZpbmZvLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkR1cmluZyB3YWxrX25hbWVzcGFjZSIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkR1cmluZyBXYWxrTmFtZXNwYWNlIikpOwogCX0KIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYwppbmRleCBjNDc1NTQ2Li5iYzlhY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMKQEAgLTgxLDYgKzgxLDcgQEAKIAkvKiBJbnZva2UgdGhlIGdsb2JhbCBleGNlcHRpb24gaGFuZGxlciAqLwogCiAJaWYgKGFjcGlfZ2JsX2V4Y2VwdGlvbl9oYW5kbGVyKSB7CisKIAkJLyogRXhpdCB0aGUgaW50ZXJwcmV0ZXIsIGFsbG93IGhhbmRsZXIgdG8gZXhlY3V0ZSBtZXRob2RzICovCiAKIAkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CkBAIC0xMDAsNiArMTAxLDcgQEAKIAl9CiAjaWZkZWYgQUNQSV9ESVNBU1NFTUJMRVIKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBEaXNwbGF5IG1ldGhvZCBsb2NhbHMvYXJncyBpZiBkaXNhc3NlbWJsZXIgaXMgcHJlc2VudCAqLwogCiAJCWFjcGlfZG1fZHVtcF9tZXRob2RfaW5mbyhzdGF0dXMsIHdhbGtfc3RhdGUsIHdhbGtfc3RhdGUtPm9wKTsKQEAgLTEzMiw3ICsxMzQsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2JlZ2luX21ldGhvZF9leGVjdXRpb24iLCBtZXRob2Rfbm9kZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbiwgbWV0aG9kX25vZGUpOwogCiAJaWYgKCFtZXRob2Rfbm9kZSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTlVMTF9FTlRSWSk7CkBAIC0xNjgsMTEgKzE3MCwxNCBAQAogCiAJCS8qCiAJCSAqIEdldCBhIHVuaXQgZnJvbSB0aGUgbWV0aG9kIHNlbWFwaG9yZS4gVGhpcyByZWxlYXNlcyB0aGUKLQkJICogaW50ZXJwcmV0ZXIgaWYgd2UgYmxvY2sKKwkJICogaW50ZXJwcmV0ZXIgaWYgd2UgYmxvY2sgKHRoZW4gcmVhY3F1aXJlcyBpdCkKIAkJICovCiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX2V4X3N5c3RlbV93YWl0X3NlbWFwaG9yZShvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSwKIAkJCQkJCSAgQUNQSV9XQUlUX0ZPUkVWRVIpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQl9CiAJfQogCiAJLyoKQEAgLTE4Myw3ICsxODgsNyBAQAogCWlmICghb2JqX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCkgewogCQlzdGF0dXMgPSBhY3BpX3V0X2FsbG9jYXRlX293bmVyX2lkKCZvYmpfZGVzYy0+bWV0aG9kLm93bmVyX2lkKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJCWdvdG8gY2xlYW51cDsKIAkJfQogCX0KIApAQCAtMTkzLDYgKzE5OCwxNCBAQAogCSAqLwogCW9ial9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50Kys7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisKKyAgICAgIGNsZWFudXA6CisJLyogT24gZXJyb3IsIG11c3Qgc2lnbmFsIHRoZSBtZXRob2Qgc2VtYXBob3JlIGlmIHByZXNlbnQgKi8KKworCWlmIChvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkgeworCQkodm9pZClhY3BpX29zX3NpZ25hbF9zZW1hcGhvcmUob2JqX2Rlc2MtPm1ldGhvZC5zZW1hcGhvcmUsIDEpOworCX0KKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIxOCwxMCArMjMxLDEwIEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9ub2RlOwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKm5leHRfd2Fsa19zdGF0ZSA9IE5VTEw7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7Ci0Jc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gaW5mbzsKKwlzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2NhbGxfY29udHJvbF9tZXRob2QiLCB0aGlzX3dhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2NhbGxfY29udHJvbF9tZXRob2QsIHRoaXNfd2Fsa19zdGF0ZSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAogCQkJICAiRXhlY3V0ZSBtZXRob2QgJXAsIGN1cnJlbnRzdGF0ZT0lcFxuIiwKQEAgLTI0MCwyNSArMjUzLDMxIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OVUxMX09CSkVDVCk7CiAJfQogCi0JLyogSW5pdCBmb3IgbmV3IG1ldGhvZCwgd2FpdCBvbiBjb25jdXJyZW5jeSBzZW1hcGhvcmUgKi8KKwkvKiBJbml0IGZvciBuZXcgbWV0aG9kLCBwb3NzaWJseSB3YWl0IG9uIGNvbmN1cnJlbmN5IHNlbWFwaG9yZSAqLwogCiAJc3RhdHVzID0gYWNwaV9kc19iZWdpbl9tZXRob2RfZXhlY3V0aW9uKG1ldGhvZF9ub2RlLCBvYmpfZGVzYywKIAkJCQkJCXRoaXNfd2Fsa19zdGF0ZS0+bWV0aG9kX25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIGNsZWFudXA7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAorCS8qCisJICogMSkgUGFyc2UgdGhlIG1ldGhvZC4gQWxsICJub3JtYWwiIG1ldGhvZHMgYXJlIHBhcnNlZCBmb3IgZWFjaCBleGVjdXRpb24uCisJICogSW50ZXJuYWwgbWV0aG9kcyAoX09TSSwgZXRjLikgZG8gbm90IHJlcXVpcmUgcGFyc2luZy4KKwkgKi8KIAlpZiAoIShvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWSkpIHsKLQkJLyogMSkgUGFyc2U6IENyZWF0ZSBhIG5ldyB3YWxrIHN0YXRlIGZvciB0aGUgcHJlZW1wdGluZyB3YWxrICovCisKKwkJLyogQ3JlYXRlIGEgbmV3IHdhbGsgc3RhdGUgZm9yIHRoZSBwYXJzZSAqLwogCiAJCW5leHRfd2Fsa19zdGF0ZSA9CiAJCSAgICBhY3BpX2RzX2NyZWF0ZV93YWxrX3N0YXRlKG9ial9kZXNjLT5tZXRob2Qub3duZXJfaWQsIG9wLAogCQkJCQkgICAgICBvYmpfZGVzYywgTlVMTCk7CiAJCWlmICghbmV4dF93YWxrX3N0YXRlKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJCWdvdG8gY2xlYW51cDsKIAkJfQogCi0JCS8qIENyZWF0ZSBhbmQgaW5pdCBhIFJvb3QgTm9kZSAqLworCQkvKiBDcmVhdGUgYW5kIGluaXQgYSBwYXJzZSB0cmVlIHJvb3QgKi8KIAogCQlvcCA9IGFjcGlfcHNfY3JlYXRlX3Njb3BlX29wKCk7CiAJCWlmICghb3ApIHsKQEAgLTI3MSwxNyArMjkwLDIwIEBACiAJCQkJCSAgICAgICBvYmpfZGVzYy0+bWV0aG9kLmFtbF9sZW5ndGgsCiAJCQkJCSAgICAgICBOVUxMLCAxKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlhY3BpX2RzX2RlbGV0ZV93YWxrX3N0YXRlKG5leHRfd2Fsa19zdGF0ZSk7CisJCQlhY3BpX3BzX2RlbGV0ZV9wYXJzZV90cmVlKG9wKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQogCi0JCS8qIEJlZ2luIEFNTCBwYXJzZSAqLworCQkvKiBCZWdpbiBBTUwgcGFyc2UgKGRlbGV0ZXMgbmV4dF93YWxrX3N0YXRlKSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfcHNfcGFyc2VfYW1sKG5leHRfd2Fsa19zdGF0ZSk7CiAJCWFjcGlfcHNfZGVsZXRlX3BhcnNlX3RyZWUob3ApOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQogCX0KIAotCS8qIDIpIEV4ZWN1dGU6IENyZWF0ZSBhIG5ldyBzdGF0ZSBmb3IgdGhlIHByZWVtcHRpbmcgd2FsayAqLworCS8qIDIpIEJlZ2luIG1ldGhvZCBleGVjdXRpb24uIENyZWF0ZSBhIG5ldyB3YWxrIHN0YXRlICovCiAKIAluZXh0X3dhbGtfc3RhdGUgPSBhY3BpX2RzX2NyZWF0ZV93YWxrX3N0YXRlKG9ial9kZXNjLT5tZXRob2Qub3duZXJfaWQsCiAJCQkJCQkgICAgTlVMTCwgb2JqX2Rlc2MsIHRocmVhZCk7CkBAIC0yODksNiArMzExLDcgQEAKIAkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQlnb3RvIGNsZWFudXA7CiAJfQorCiAJLyoKIAkgKiBUaGUgcmVzb2x2ZWQgYXJndW1lbnRzIHdlcmUgcHV0IG9uIHRoZSBwcmV2aW91cyB3YWxrIHN0YXRlJ3Mgb3BlcmFuZAogCSAqIHN0YWNrLiBPcGVyYW5kcyBvbiB0aGUgcHJldmlvdXMgd2FsayBzdGF0ZSBzdGFjayBhbHdheXMKQEAgLTI5NiwxMiArMzE5LDI0IEBACiAJICovCiAJdGhpc193YWxrX3N0YXRlLT5vcGVyYW5kc1t0aGlzX3dhbGtfc3RhdGUtPm51bV9vcGVyYW5kc10gPSBOVUxMOwogCi0JaW5mby5wYXJhbWV0ZXJzID0gJnRoaXNfd2Fsa19zdGF0ZS0+b3BlcmFuZHNbMF07Ci0JaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrCisJICogVEJEOiB0aGlzIGlzIHNvbWV3aGF0IGluZWZmaWNpZW50LCBzaG91bGQgY2hhbmdlIGludGVyZmFjZSB0bworCSAqIGRzX2luaXRfYW1sX3dhbGsuIEZvciBub3csIGtlZXBzIHRoaXMgc3RydWN0IG9mZiB0aGUgQ1BVIHN0YWNrCisJICovCisJaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJaWYgKCFpbmZvKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCX0KKworCWluZm8tPnBhcmFtZXRlcnMgPSAmdGhpc193YWxrX3N0YXRlLT5vcGVyYW5kc1swXTsKKwlpbmZvLT5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKIAogCXN0YXR1cyA9IGFjcGlfZHNfaW5pdF9hbWxfd2FsayhuZXh0X3dhbGtfc3RhdGUsIE5VTEwsIG1ldGhvZF9ub2RlLAogCQkJCSAgICAgICBvYmpfZGVzYy0+bWV0aG9kLmFtbF9zdGFydCwKLQkJCQkgICAgICAgb2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoLCAmaW5mbywgMyk7CisJCQkJICAgICAgIG9ial9kZXNjLT5tZXRob2QuYW1sX2xlbmd0aCwgaW5mbywgMyk7CisKKwlBQ1BJX0ZSRUUoaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC0zMjMsNiArMzU4LDggQEAKIAkJCSAgIlN0YXJ0aW5nIG5lc3RlZCBleGVjdXRpb24sIG5ld3N0YXRlPSVwXG4iLAogCQkJICBuZXh0X3dhbGtfc3RhdGUpKTsKIAorCS8qIEludm9rZSBhbiBpbnRlcm5hbCBtZXRob2QgaWYgbmVjZXNzYXJ5ICovCisKIAlpZiAob2JqX2Rlc2MtPm1ldGhvZC5tZXRob2RfZmxhZ3MgJiBBTUxfTUVUSE9EX0lOVEVSTkFMX09OTFkpIHsKIAkJc3RhdHVzID0gb2JqX2Rlc2MtPm1ldGhvZC5pbXBsZW1lbnRhdGlvbihuZXh0X3dhbGtfc3RhdGUpOwogCX0KQEAgLTMzMCwxNiArMzY3LDE0IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAKICAgICAgIGNsZWFudXA6Ci0JLyogRGVjcmVtZW50IHRoZSB0aHJlYWQgY291bnQgb24gdGhlIG1ldGhvZCBwYXJzZSB0cmVlICovCiAKLQlpZiAobmV4dF93YWxrX3N0YXRlICYmIChuZXh0X3dhbGtfc3RhdGUtPm1ldGhvZF9kZXNjKSkgewotCQluZXh0X3dhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50LS07CisJLyogT24gZXJyb3IsIHdlIG11c3QgdGVybWluYXRlIHRoZSBtZXRob2QgcHJvcGVybHkgKi8KKworCWFjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kKG9ial9kZXNjLCBuZXh0X3dhbGtfc3RhdGUpOworCWlmIChuZXh0X3dhbGtfc3RhdGUpIHsKKwkJYWNwaV9kc19kZWxldGVfd2Fsa19zdGF0ZShuZXh0X3dhbGtfc3RhdGUpOwogCX0KIAotCS8qIE9uIGVycm9yLCB3ZSBtdXN0IGRlbGV0ZSB0aGUgbmV3IHdhbGsgc3RhdGUgKi8KLQotCWFjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kKG5leHRfd2Fsa19zdGF0ZSk7Ci0JYWNwaV9kc19kZWxldGVfd2Fsa19zdGF0ZShuZXh0X3dhbGtfc3RhdGUpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0zNjIsMjUgKzM5NywzMyBAQAogCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlpbnQgc2FtZV9hc19pbXBsaWNpdF9yZXR1cm47CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfcmVzdGFydF9jb250cm9sX21ldGhvZCIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX3Jlc3RhcnRfY29udHJvbF9tZXRob2QsIHdhbGtfc3RhdGUpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKLQkJCSAgIioqKipSZXN0YXJ0IFslNC40c10gT3AgJXAgcmV0dXJuX3ZhbHVlX2Zyb21fY2FsbGVlICVwXG4iLAorCQkJICAiKioqKlJlc3RhcnQgWyU0LjRzXSBPcCAlcCBSZXR1cm5WYWx1ZUZyb21DYWxsZWUgJXBcbiIsCiAJCQkgIChjaGFyICopJndhbGtfc3RhdGUtPm1ldGhvZF9ub2RlLT5uYW1lLAogCQkJICB3YWxrX3N0YXRlLT5tZXRob2RfY2FsbF9vcCwgcmV0dXJuX2Rlc2MpKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkgICIgICAgcmV0dXJuX2Zyb21fdGhpc19tZXRob2RfdXNlZD89JVggcmVzX3N0YWNrICVwIFdhbGsgJXBcbiIsCisJCQkgICIgICAgUmV0dXJuRnJvbVRoaXNNZXRob2RVc2VkPz0lWCBSZXNTdGFjayAlcCBXYWxrICVwXG4iLAogCQkJICB3YWxrX3N0YXRlLT5yZXR1cm5fdXNlZCwKIAkJCSAgd2Fsa19zdGF0ZS0+cmVzdWx0cywgd2Fsa19zdGF0ZSkpOwogCiAJLyogRGlkIHRoZSBjYWxsZWQgbWV0aG9kIHJldHVybiBhIHZhbHVlPyAqLwogCiAJaWYgKHJldHVybl9kZXNjKSB7CisKKwkJLyogSXMgdGhlIGltcGxpY2l0IHJldHVybiBvYmplY3QgdGhlIHNhbWUgYXMgdGhlIHJldHVybiBkZXNjPyAqLworCisJCXNhbWVfYXNfaW1wbGljaXRfcmV0dXJuID0KKwkJICAgICh3YWxrX3N0YXRlLT5pbXBsaWNpdF9yZXR1cm5fb2JqID09IHJldHVybl9kZXNjKTsKKwogCQkvKiBBcmUgd2UgYWN0dWFsbHkgZ29pbmcgdG8gdXNlIHRoZSByZXR1cm4gdmFsdWU/ICovCiAKIAkJaWYgKHdhbGtfc3RhdGUtPnJldHVybl91c2VkKSB7CisKIAkJCS8qIFNhdmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBtZXRob2QgKi8KIAogCQkJc3RhdHVzID0gYWNwaV9kc19yZXN1bHRfcHVzaChyZXR1cm5fZGVzYywgd2Fsa19zdGF0ZSk7CkBAIC0zOTcsMTggKzQ0MCwyMyBAQAogCQl9CiAKIAkJLyoKLQkJICogVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRoZQotCQkgKiBvcHRpb25hbCBzdXBwb3J0IGZvciBhIHNvLWNhbGxlZCAiaW1wbGljaXQgcmV0dXJuIi4gU29tZSBBTUwgY29kZQotCQkgKiBhc3N1bWVzIHRoYXQgdGhlIGxhc3QgdmFsdWUgb2YgdGhlIG1ldGhvZCBpcyAiaW1wbGljaXRseSIgcmV0dXJuZWQKLQkJICogdG8gdGhlIGNhbGxlci4gSnVzdCBzYXZlIHRoZSBsYXN0IHJlc3VsdCBhcyB0aGUgcmV0dXJuIHZhbHVlLgorCQkgKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdGhlIG9wdGlvbmFsIHN1cHBvcnQgZm9yIHRoZSBzby1jYWxsZWQKKwkJICogImltcGxpY2l0IHJldHVybiIuIFNvbWUgQU1MIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBsYXN0IHZhbHVlIG9mIHRoZQorCQkgKiBtZXRob2QgaXMgImltcGxpY2l0bHkiIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIGluIHRoZSBhYnNlbmNlIG9mIGFuCisJCSAqIGV4cGxpY2l0IHJldHVybiB2YWx1ZS4KKwkJICoKKwkJICogSnVzdCBzYXZlIHRoZSBsYXN0IHJlc3VsdCBvZiB0aGUgbWV0aG9kIGFzIHRoZSByZXR1cm4gdmFsdWUuCisJCSAqCiAJCSAqIE5PVEU6IHRoaXMgaXMgb3B0aW9uYWwgYmVjYXVzZSB0aGUgQVNMIGxhbmd1YWdlIGRvZXMgbm90IGFjdHVhbGx5CiAJCSAqIHN1cHBvcnQgdGhpcyBiZWhhdmlvci4KIAkJICovCiAJCWVsc2UgaWYgKCFhY3BpX2RzX2RvX2ltcGxpY2l0X3JldHVybgotCQkJIChyZXR1cm5fZGVzYywgd2Fsa19zdGF0ZSwgRkFMU0UpKSB7CisJCQkgKHJldHVybl9kZXNjLCB3YWxrX3N0YXRlLCBGQUxTRSkKKwkJCSB8fCBzYW1lX2FzX2ltcGxpY2l0X3JldHVybikgewogCQkJLyoKIAkJCSAqIERlbGV0ZSB0aGUgcmV0dXJuIHZhbHVlIGlmIGl0IHdpbGwgbm90IGJlIHVzZWQgYnkgdGhlCi0JCQkgKiBjYWxsaW5nIG1ldGhvZAorCQkJICogY2FsbGluZyBtZXRob2Qgb3IgcmVtb3ZlIG9uZSByZWZlcmVuY2UgaWYgdGhlIGV4cGxpY2l0IHJldHVybgorCQkJICogaXMgdGhlIHNhbWUgYXMgdGhlIGltcGxpY2l0IHJldHVybiB2YWx1ZS4KIAkJCSAqLwogCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNDIxLDcgKzQ2OSw4IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kCiAgKgotICogUEFSQU1FVEVSUzogIHdhbGtfc3RhdGUgICAgICAgICAgLSBTdGF0ZSBvZiB0aGUgbWV0aG9kCisgKiBQQVJBTUVURVJTOiAgbWV0aG9kX2Rlc2MgICAgICAgICAtIE1ldGhvZCBvYmplY3QKKyAqICAgICAgICAgICAgICB3YWxrX3N0YXRlICAgICAgICAgIC0gU3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXRob2QKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKQEAgLTQzMSw5NSArNDgwLDEwMCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2Qoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSkKK3ZvaWQKK2FjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm1ldGhvZF9kZXNjLAorCQkJCSBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKQogewotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2Rfbm9kZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kLCB3YWxrX3N0YXRlKTsKIAotCWlmICghd2Fsa19zdGF0ZSkgeworCS8qIG1ldGhvZF9kZXNjIGlzIHJlcXVpcmVkLCB3YWxrX3N0YXRlIGlzIG9wdGlvbmFsICovCisKKwlpZiAoIW1ldGhvZF9kZXNjKSB7CiAJCXJldHVybl9WT0lEOwogCX0KIAotCS8qIFRoZSBjdXJyZW50IG1ldGhvZCBvYmplY3Qgd2FzIHNhdmVkIGluIHRoZSB3YWxrIHN0YXRlICovCisJaWYgKHdhbGtfc3RhdGUpIHsKIAotCW9ial9kZXNjID0gd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2M7Ci0JaWYgKCFvYmpfZGVzYykgewotCQlyZXR1cm5fVk9JRDsKKwkJLyogRGVsZXRlIGFsbCBhcmd1bWVudHMgYW5kIGxvY2FscyAqLworCisJCWFjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX2FsbCh3YWxrX3N0YXRlKTsKIAl9CiAKLQkvKiBEZWxldGUgYWxsIGFyZ3VtZW50cyBhbmQgbG9jYWxzICovCi0KLQlhY3BpX2RzX21ldGhvZF9kYXRhX2RlbGV0ZV9hbGwod2Fsa19zdGF0ZSk7Ci0KIAkvKgogCSAqIExvY2sgdGhlIHBhcnNlciB3aGlsZSB3ZSB0ZXJtaW5hdGUgdGhpcyBtZXRob2QuCiAJICogSWYgdGhpcyBpcyB0aGUgbGFzdCB0aHJlYWQgZXhlY3V0aW5nIHRoZSBtZXRob2QsCiAJICogd2UgaGF2ZSBhZGRpdGlvbmFsIGNsZWFudXAgdG8gcGVyZm9ybQogCSAqLwotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9QQVJTRVIpOworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9DT05UUk9MX01FVEhPRCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9WT0lEOwogCX0KIAogCS8qIFNpZ25hbCBjb21wbGV0aW9uIG9mIHRoZSBleGVjdXRpb24gb2YgdGhpcyBtZXRob2QgaWYgbmVjZXNzYXJ5ICovCiAKLQlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5zZW1hcGhvcmUpIHsKKwlpZiAobWV0aG9kX2Rlc2MtPm1ldGhvZC5zZW1hcGhvcmUpIHsKIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZSh3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLgotCQkJCQkgICAgIHNlbWFwaG9yZSwgMSk7CisJCSAgICBhY3BpX29zX3NpZ25hbF9zZW1hcGhvcmUobWV0aG9kX2Rlc2MtPm1ldGhvZC5zZW1hcGhvcmUsIDEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJDb3VsZCBub3Qgc2lnbmFsIG1ldGhvZCBzZW1hcGhvcmUiKSk7CiAKLQkJCS8qIElnbm9yZSBlcnJvciBhbmQgY29udGludWUgY2xlYW51cCAqLworCQkJLyogSWdub3JlIGVycm9yIGFuZCBjb250aW51ZSAqLworCisJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCQkiQ291bGQgbm90IHNpZ25hbCBtZXRob2Qgc2VtYXBob3JlIikpOwogCQl9CiAJfQogCi0JLyoKLQkgKiBUaGVyZSBhcmUgbm8gbW9yZSB0aHJlYWRzIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4gIFBlcmZvcm0KLQkgKiBhZGRpdGlvbmFsIGNsZWFudXAuCi0JICoKLQkgKiBUaGUgbWV0aG9kIE5vZGUgaXMgc3RvcmVkIGluIHRoZSB3YWxrIHN0YXRlCi0JICovCi0JbWV0aG9kX25vZGUgPSB3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZTsKKwlpZiAod2Fsa19zdGF0ZSkgeworCQkvKgorCQkgKiBEZWxldGUgYW55IG9iamVjdHMgY3JlYXRlZCBieSB0aGlzIG1ldGhvZCBkdXJpbmcgZXhlY3V0aW9uLgorCQkgKiBUaGUgbWV0aG9kIE5vZGUgaXMgc3RvcmVkIGluIHRoZSB3YWxrIHN0YXRlCisJCSAqLworCQltZXRob2Rfbm9kZSA9IHdhbGtfc3RhdGUtPm1ldGhvZF9ub2RlOwogCi0JLyogTG9jayBuYW1lc3BhY2UgZm9yIHBvc3NpYmxlIHVwZGF0ZSAqLworCQkvKiBMb2NrIG5hbWVzcGFjZSBmb3IgcG9zc2libGUgdXBkYXRlICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byBleGl0OworCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQkvKgorCQkgKiBEZWxldGUgYW55IG5hbWVzcGFjZSBlbnRyaWVzIGNyZWF0ZWQgaW1tZWRpYXRlbHkgdW5kZXJuZWF0aAorCQkgKiB0aGUgbWV0aG9kCisJCSAqLworCQlpZiAobWV0aG9kX25vZGUgJiYgbWV0aG9kX25vZGUtPmNoaWxkKSB7CisJCQlhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2Vfc3VidHJlZShtZXRob2Rfbm9kZSk7CisJCX0KKworCQkvKgorCQkgKiBEZWxldGUgYW55IG5hbWVzcGFjZSBlbnRyaWVzIGNyZWF0ZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4KKwkJICogdGhlIG5hbWVzcGFjZSBieSB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgbWV0aG9kCisJCSAqLworCQlhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIobWV0aG9kX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCk7CisJCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCX0KIAotCS8qCi0JICogRGVsZXRlIGFueSBuYW1lc3BhY2UgZW50cmllcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVuZGVybmVhdGgKLQkgKiB0aGUgbWV0aG9kCi0JICovCi0JaWYgKG1ldGhvZF9ub2RlLT5jaGlsZCkgewotCQlhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2Vfc3VidHJlZShtZXRob2Rfbm9kZSk7Ci0JfQorCS8qIERlY3JlbWVudCB0aGUgdGhyZWFkIGNvdW50IG9uIHRoZSBtZXRob2QgKi8KIAotCS8qCi0JICogRGVsZXRlIGFueSBuYW1lc3BhY2UgZW50cmllcyBjcmVhdGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluCi0JICogdGhlIG5hbWVzcGFjZSBieSB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgbWV0aG9kCi0JICovCi0JYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuCi0JCQkJCSAgb3duZXJfaWQpOwotCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCWlmIChtZXRob2RfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudCkgeworCQltZXRob2RfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudC0tOworCX0gZWxzZSB7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIHplcm8gdGhyZWFkIGNvdW50IGluIG1ldGhvZCIpKTsKKwl9CiAKIAkvKiBBcmUgdGhlcmUgYW55IG90aGVyIHRocmVhZHMgY3VycmVudGx5IGV4ZWN1dGluZyB0aGlzIG1ldGhvZD8gKi8KIAotCWlmICh3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudCkgeworCWlmIChtZXRob2RfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudCkgewogCQkvKgogCQkgKiBBZGRpdGlvbmFsIHRocmVhZHMuIERvIG5vdCByZWxlYXNlIHRoZSBvd25lcl9pZCBpbiB0aGlzIGNhc2UsCiAJCSAqIHdlIGltbWVkaWF0ZWx5IHJldXNlIGl0IGZvciB0aGUgbmV4dCB0aHJlYWQgZXhlY3V0aW5nIHRoaXMgbWV0aG9kCiAJCSAqLwogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAogCQkJCSAgIioqKiBDb21wbGV0ZWQgZXhlY3V0aW9uIG9mIG9uZSB0aHJlYWQsICVkIHRocmVhZHMgcmVtYWluaW5nXG4iLAotCQkJCSAgd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC4KLQkJCQkgIHRocmVhZF9jb3VudCkpOworCQkJCSAgbWV0aG9kX2Rlc2MtPm1ldGhvZC50aHJlYWRfY291bnQpKTsKIAl9IGVsc2UgewogCQkvKiBUaGlzIGlzIHRoZSBvbmx5IGV4ZWN1dGluZyB0aHJlYWQgZm9yIHRoaXMgbWV0aG9kICovCiAKQEAgLTUzMywyMiArNTg3LDIwIEBACiAJCSAqIFRoaXMgY29kZSBpcyBoZXJlIGJlY2F1c2Ugd2UgbXVzdCB3YWl0IHVudGlsIHRoZSBsYXN0IHRocmVhZCBleGl0cwogCQkgKiBiZWZvcmUgY3JlYXRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBzZW1hcGhvcmUuCiAJCSAqLwotCQlpZiAoKHdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuY29uY3VycmVuY3kgPT0gMSkgJiYKLQkJICAgICghd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5zZW1hcGhvcmUpKSB7CisJCWlmICgobWV0aG9kX2Rlc2MtPm1ldGhvZC5jb25jdXJyZW5jeSA9PSAxKSAmJgorCQkgICAgKCFtZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkpIHsKIAkJCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX3NlbWFwaG9yZSgxLCAxLAotCQkJCQkJCSAgJndhbGtfc3RhdGUtPgotCQkJCQkJCSAgbWV0aG9kX2Rlc2MtPm1ldGhvZC4KKwkJCQkJCQkgICZtZXRob2RfZGVzYy0+bWV0aG9kLgogCQkJCQkJCSAgc2VtYXBob3JlKTsKIAkJfQogCiAJCS8qIE5vIG1vcmUgdGhyZWFkcywgd2UgY2FuIGZyZWUgdGhlIG93bmVyX2lkICovCiAKLQkJYWNwaV91dF9yZWxlYXNlX293bmVyX2lkKCZ3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLgotCQkJCQkgb3duZXJfaWQpOworCQlhY3BpX3V0X3JlbGVhc2Vfb3duZXJfaWQoJm1ldGhvZF9kZXNjLT5tZXRob2Qub3duZXJfaWQpOwogCX0KIAogICAgICAgZXhpdDoKLQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfUEFSU0VSKTsKKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfQ09OVFJPTF9NRVRIT0QpOwogCXJldHVybl9WT0lEOwogfQogCkBAIC01ODEsNyArNjMzLDcgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3A7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19wYXJzZV9tZXRob2QiLCBub2RlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19wYXJzZV9tZXRob2QsIG5vZGUpOwogCiAJLyogUGFyYW1ldGVyIFZhbGlkYXRpb24gKi8KIApAQCAtNTkwLDcgKzY0Miw3IEBACiAJfQogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwKLQkJCSAgIioqKiogUGFyc2luZyBbJTQuNHNdICoqKiogbmFtZWRfb2JqPSVwXG4iLAorCQkJICAiKioqKiBQYXJzaW5nIFslNC40c10gKioqKiBOYW1lZE9iaj0lcFxuIiwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLCBub2RlKSk7CiAKIAkvKiBFeHRyYWN0IHRoZSBtZXRob2Qgb2JqZWN0IGZyb20gdGhlIG1ldGhvZCBOb2RlICovCkBAIC02NjksNyArNzIxLDcgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAotCQkJICAiKioqKiBbJTQuNHNdIFBhcnNlZCAqKioqIG5hbWVkX29iaj0lcCBPcD0lcFxuIiwKKwkJCSAgIioqKiogWyU0LjRzXSBQYXJzZWQgKioqKiBOYW1lZE9iaj0lcCBPcD0lcFxuIiwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLCBub2RlLCBvcCkpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbXRoZGF0LmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc210aGRhdC5jCmluZGV4IGMwMjU2NzQuLjQ1OTE2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbXRoZGF0LmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtdGhkYXQuYwpAQCAtODEsNyArODEsNyBAQAogICogICAgICAgICAgICAgIHNwZWNpYWwgZGF0YSB0eXBlcy4KICAqCiAgKiBOT1RFUzogICAgICAgd2Fsa19zdGF0ZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8gYnkgdGhlCi0gKiAgICAgICAgICAgICAgQUNQSV9NRU1fQ0FMTE9DQVRFKCkuCisgKiAgICAgICAgICAgICAgQUNQSV9BTExPQ0FURV9aRVJPRUQoKS4KICAqCiAgKiAgICAgICAgICAgICAgQSBwc2V1ZG8tTmFtZXNwYWNlIE5vZGUgaXMgYXNzaWduZWQgdG8gZWFjaCBhcmd1bWVudCBhbmQgbG9jYWwKICAqICAgICAgICAgICAgICBzbyB0aGF0IHJlZl9vZigpIGNhbiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBOb2RlLgpAQCAtOTIsNyArOTIsNyBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbWV0aG9kX2RhdGFfaW5pdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbWV0aG9kX2RhdGFfaW5pdCk7CiAKIAkvKiBJbml0IHRoZSBtZXRob2QgYXJndW1lbnRzICovCiAKQEAgLTEwMCwxMCArMTAwLDEwIEBACiAJCUFDUElfTU9WRV8zMl9UT18zMigmd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLm5hbWUsCiAJCQkJICAgTkFNRU9GX0FSR19OVEUpOwogCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0ubmFtZS5pbnRlZ2VyIHw9IChpIDw8IDI0KTsKLQkJd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLmRlc2NyaXB0b3IgPSBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKKwkJd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX05BTUVEOwogCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0udHlwZSA9IEFDUElfVFlQRV9BTlk7Ci0JCXdhbGtfc3RhdGUtPmFyZ3VtZW50c1tpXS5mbGFncyA9IEFOT0JKX0VORF9PRl9QRUVSX0xJU1QgfAotCQkgICAgQU5PQkpfTUVUSE9EX0FSRzsKKwkJd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLmZsYWdzID0KKwkJICAgIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QgfCBBTk9CSl9NRVRIT0RfQVJHOwogCX0KIAogCS8qIEluaXQgdGhlIG1ldGhvZCBsb2NhbHMgKi8KQEAgLTExMywxMSArMTEzLDExIEBACiAJCQkJICAgTkFNRU9GX0xPQ0FMX05URSk7CiAKIAkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLm5hbWUuaW50ZWdlciB8PSAoaSA8PCAyNCk7Ci0JCXdhbGtfc3RhdGUtPmxvY2FsX3ZhcmlhYmxlc1tpXS5kZXNjcmlwdG9yID0KKwkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLmRlc2NyaXB0b3JfdHlwZSA9CiAJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKIAkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLnR5cGUgPSBBQ1BJX1RZUEVfQU5ZOwotCQl3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaV0uZmxhZ3MgPSBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUIHwKLQkJICAgIEFOT0JKX01FVEhPRF9MT0NBTDsKKwkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLmZsYWdzID0KKwkJICAgIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QgfCBBTk9CSl9NRVRIT0RfTE9DQUw7CiAJfQogCiAJcmV0dXJuX1ZPSUQ7CkBAIC0xNDAsNyArMTQwLDcgQEAKIHsKIAl1MzIgaW5kZXg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9kZWxldGVfYWxsIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9kZWxldGVfYWxsKTsKIAogCS8qIERldGFjaCB0aGUgbG9jYWxzICovCiAKQEAgLTE5OSw3ICsxOTksNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1MzIgaW5kZXggPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX21ldGhvZF9kYXRhX2luaXRfYXJncyIsIHBhcmFtcyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfbWV0aG9kX2RhdGFfaW5pdF9hcmdzLCBwYXJhbXMpOwogCiAJaWYgKCFwYXJhbXMpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLApAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQkgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCiAJCQkgICAgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqbm9kZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9nZXRfbm9kZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbWV0aG9kX2RhdGFfZ2V0X25vZGUpOwogCiAJLyoKIAkgKiBNZXRob2QgTG9jYWxzIGFuZCBBcmd1bWVudHMgYXJlIHN1cHBvcnRlZApAQCAtMzE4LDEwICszMTgsMTAgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9zZXRfdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX21ldGhvZF9kYXRhX3NldF92YWx1ZSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkgICJuZXdfb2JqICVwIE9wY29kZSAlWCwgUmVmcz0lZCBbJXNdXG4iLCBvYmplY3QsCisJCQkgICJOZXdPYmogJXAgT3Bjb2RlICVYLCBSZWZzPSVkIFslc11cbiIsIG9iamVjdCwKIAkJCSAgb3Bjb2RlLCBvYmplY3QtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQsCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShvYmplY3QtPmNvbW1vbi50eXBlKSkpOwogCkBAIC0zMzYsNyArMzM2LDcgQEAKIAkgKiBJbmNyZW1lbnQgcmVmIGNvdW50IHNvIG9iamVjdCBjYW4ndCBiZSBkZWxldGVkIHdoaWxlIGluc3RhbGxlZC4KIAkgKiBOT1RFOiBXZSBkbyBub3QgY29weSB0aGUgb2JqZWN0IGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBjYWxsIGJ5CiAJICogcmVmZXJlbmNlIHNlbWFudGljcyBvZiBBQ1BJIENvbnRyb2wgTWV0aG9kIGludm9jYXRpb24uCi0JICogKFNlZSBBQ1BJIHNwZWNpZmljYXRpb24gMi4wX2MpCisJICogKFNlZSBBQ1BJIFNwZWNpZmljYXRpb24gMi4wX2MpCiAJICovCiAJYWNwaV91dF9hZGRfcmVmZXJlbmNlKG9iamVjdCk7CiAKQEAgLTM1MSw3ICszNTEsNyBAQAogICogRlVOQ1RJT046ICAgIGFjcGlfZHNfbWV0aG9kX2RhdGFfZ2V0X3ZhbHVlCiAgKgogICogUEFSQU1FVEVSUzogIE9wY29kZSAgICAgICAgICAgICAgLSBFaXRoZXIgQU1MX0xPQ0FMX09QIG9yIEFNTF9BUkdfT1AKLSAqICAgICAgICAgICAgICBJbmRleCAgICAgICAgICAgICAgIC0gd2hpY2ggbG9jYWxfdmFyIG9yIGFyZ3VtZW50IHRvIGdldAorICogICAgICAgICAgICAgIEluZGV4ICAgICAgICAgICAgICAgLSBXaGljaCBsb2NhbF92YXIgb3IgYXJndW1lbnQgdG8gZ2V0CiAgKiAgICAgICAgICAgICAgd2Fsa19zdGF0ZSAgICAgICAgICAtIEN1cnJlbnQgd2FsayBzdGF0ZSBvYmplY3QKICAqICAgICAgICAgICAgICBkZXN0X2Rlc2MgICAgICAgICAgIC0gV2hlcmUgQXJnIG9yIExvY2FsIHZhbHVlIGlzIHJldHVybmVkCiAgKgpAQCAtMzcyLDcgKzM3Miw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbWV0aG9kX2RhdGFfZ2V0X3ZhbHVlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9nZXRfdmFsdWUpOwogCiAJLyogVmFsaWRhdGUgdGhlIG9iamVjdCBkZXNjcmlwdG9yICovCiAKQEAgLTQ1OSw3ICs0NTksNyBAQAogICogRlVOQ1RJT046ICAgIGFjcGlfZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlCiAgKgogICogUEFSQU1FVEVSUzogIE9wY29kZSAgICAgICAgICAgICAgLSBFaXRoZXIgQU1MX0xPQ0FMX09QIG9yIEFNTF9BUkdfT1AKLSAqICAgICAgICAgICAgICBJbmRleCAgICAgICAgICAgICAgIC0gd2hpY2ggbG9jYWxfdmFyIG9yIGFyZ3VtZW50IHRvIGRlbGV0ZQorICogICAgICAgICAgICAgIEluZGV4ICAgICAgICAgICAgICAgLSBXaGljaCBsb2NhbF92YXIgb3IgYXJndW1lbnQgdG8gZGVsZXRlCiAgKiAgICAgICAgICAgICAgd2Fsa19zdGF0ZSAgICAgICAgICAtIEN1cnJlbnQgd2FsayBzdGF0ZSBvYmplY3QKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbWV0aG9kX2RhdGFfZGVsZXRlX3ZhbHVlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9kZWxldGVfdmFsdWUpOwogCiAJLyogR2V0IHRoZSBuYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIGFyZy9sb2NhbCAqLwogCkBAIC01MzgsNyArNTM4LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpjdXJyZW50X29ial9kZXNjOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5ld19vYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX3N0b3JlX29iamVjdF90b19sb2NhbCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfc3RvcmVfb2JqZWN0X3RvX2xvY2FsKTsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJPcGNvZGU9JVggSW5kZXg9JWQgT2JqPSVwXG4iLAogCQkJICBvcGNvZGUsIGluZGV4LCBvYmpfZGVzYykpOwogCkBAIC02MTQsNyArNjE0LDcgQEAKIAkJCSAgICAmJiAoY3VycmVudF9vYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSA9PQogCQkJCUFNTF9SRUZfT0ZfT1ApKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkJICAiQXJnICglcCkgaXMgYW4gb2JqX3JlZihOb2RlKSwgc3RvcmluZyBpbiBub2RlICVwXG4iLAorCQkJCQkJICAiQXJnICglcCkgaXMgYW4gT2JqUmVmKE5vZGUpLCBzdG9yaW5nIGluIG5vZGUgJXBcbiIsCiAJCQkJCQkgIG5ld19vYmpfZGVzYywKIAkJCQkJCSAgY3VycmVudF9vYmpfZGVzYykpOwogCkBAIC02ODgsNyArNjg4LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19tZXRob2RfZGF0YV9nZXRfdHlwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbWV0aG9kX2RhdGFfZ2V0X3R5cGUpOwogCiAJLyogR2V0IHRoZSBuYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIGFyZy9sb2NhbCAqLwogCkBAIC03MDEsNiArNzAxLDcgQEAKIAogCW9iamVjdCA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAlpZiAoIW9iamVjdCkgeworCiAJCS8qIFVuaW5pdGlhbGl6ZWQgbG9jYWwvYXJnLCByZXR1cm4gVFlQRV9BTlkgKi8KIAogCQlyZXR1cm5fVkFMVUUoQUNQSV9UWVBFX0FOWSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29iamVjdC5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvYmplY3QuYwppbmRleCA4YjIxZjBmLi43MjE5MGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb2JqZWN0LmMKQEAgLTgxLDcgKzgxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19idWlsZF9pbnRlcm5hbF9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2J1aWxkX2ludGVybmFsX29iamVjdCk7CiAKIAkqb2JqX2Rlc2NfcHRyID0gTlVMTDsKIAlpZiAob3AtPmNvbW1vbi5hbWxfb3Bjb2RlID09IEFNTF9JTlRfTkFNRVBBVEhfT1ApIHsKQEAgLTEwMyw2ICsxMDMsNyBAQAogCQkJCQkJCQkJIGNvbW1vbi4KIAkJCQkJCQkJCSBub2RlKSkpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJCQkvKiBDaGVjayBpZiB3ZSBhcmUgcmVzb2x2aW5nIGEgbmFtZWQgcmVmZXJlbmNlIHdpdGhpbiBhIHBhY2thZ2UgKi8KIAogCQkJCWlmICgoc3RhdHVzID09IEFFX05PVF9GT1VORCkKQEAgLTE4Niw3ICsxODcsNyBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpieXRlX2xpc3Q7CiAJdTMyIGJ5dGVfbGlzdF9sZW5ndGggPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfYnVpbGRfaW50ZXJuYWxfYnVmZmVyX29iaiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfYnVpbGRfaW50ZXJuYWxfYnVmZmVyX29iaik7CiAKIAkvKgogCSAqIElmIHdlIGFyZSBldmFsdWF0aW5nIGEgTmFtZWQgYnVmZmVyIG9iamVjdCAiTmFtZSAoeHh4eCwgQnVmZmVyKSIuCkBAIC0xOTUsNiArMTk2LDcgQEAKIAkgKi8KIAlvYmpfZGVzYyA9ICpvYmpfZGVzY19wdHI7CiAJaWYgKCFvYmpfZGVzYykgeworCiAJCS8qIENyZWF0ZSBhIG5ldyBidWZmZXIgb2JqZWN0ICovCiAKIAkJb2JqX2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9UWVBFX0JVRkZFUik7CkBAIC0yNDMsNyArMjQ1LDcgQEAKIAkJCQkgICJCdWZmZXIgZGVmaW5lZCB3aXRoIHplcm8gbGVuZ3RoIGluIEFNTCwgY3JlYXRpbmdcbiIpKTsKIAl9IGVsc2UgewogCQlvYmpfZGVzYy0+YnVmZmVyLnBvaW50ZXIgPQotCQkgICAgQUNQSV9NRU1fQ0FMTE9DQVRFKG9ial9kZXNjLT5idWZmZXIubGVuZ3RoKTsKKwkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKG9ial9kZXNjLT5idWZmZXIubGVuZ3RoKTsKIAkJaWYgKCFvYmpfZGVzYy0+YnVmZmVyLnBvaW50ZXIpIHsKIAkJCWFjcGlfdXRfZGVsZXRlX29iamVjdF9kZXNjKG9ial9kZXNjKTsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwpAQCAtMjkxLDcgKzI5Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfYnVpbGRfaW50ZXJuYWxfcGFja2FnZV9vYmoiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2J1aWxkX2ludGVybmFsX3BhY2thZ2Vfb2JqKTsKIAogCS8qIEZpbmQgdGhlIHBhcmVudCBvZiBhIHBvc3NpYmx5IG5lc3RlZCBwYWNrYWdlICovCiAKQEAgLTMzOSw5ICszNDEsMTAgQEAKIAkgKiBpbmRpdmlkdWFsIG9iamVjdHMpLiBBZGQgYW4gZXh0cmEgcG9pbnRlciBzbG90IHNvCiAJICogdGhhdCB0aGUgbGlzdCBpcyBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkLgogCSAqLwotCW9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzID0gQUNQSV9NRU1fQ0FMTE9DQVRFKCgoYWNwaV9zaXplKSBvYmpfZGVzYy0+Ci0JCQkJCQkJIHBhY2thZ2UuY291bnQgKwotCQkJCQkJCSAxKSAqIHNpemVvZih2b2lkICopKTsKKwlvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50cyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKCgoYWNwaV9zaXplKQorCQkJCQkJCSAgIG9ial9kZXNjLT5wYWNrYWdlLgorCQkJCQkJCSAgIGNvdW50ICsKKwkJCQkJCQkgICAxKSAqIHNpemVvZih2b2lkICopKTsKIAogCWlmICghb2JqX2Rlc2MtPnBhY2thZ2UuZWxlbWVudHMpIHsKIAkJYWNwaV91dF9kZWxldGVfb2JqZWN0X2Rlc2Mob2JqX2Rlc2MpOwpAQCAtMzU1LDYgKzM1OCw3IEBACiAJYXJnID0gYXJnLT5jb21tb24ubmV4dDsKIAlmb3IgKGkgPSAwOyBhcmc7IGkrKykgewogCQlpZiAoYXJnLT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfSU5UX1JFVFVSTl9WQUxVRV9PUCkgeworCiAJCQkvKiBPYmplY3QgKHBhY2thZ2Ugb3IgYnVmZmVyKSBpcyBhbHJlYWR5IGJ1aWx0ICovCiAKIAkJCW9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzW2ldID0KQEAgLTM5Niw3ICs0MDAsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19jcmVhdGVfbm9kZSIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19jcmVhdGVfbm9kZSwgb3ApOwogCiAJLyoKIAkgKiBCZWNhdXNlIG9mIHRoZSBleGVjdXRpb24gcGFzcyB0aHJvdWdoIHRoZSBub24tY29udHJvbC1tZXRob2QKQEAgLTQwOCw2ICs0MTIsNyBAQAogCX0KIAogCWlmICghb3AtPmNvbW1vbi52YWx1ZS5hcmcpIHsKKwogCQkvKiBObyBhcmd1bWVudHMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtNDY0LDExICs0NjksMTIgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2luaXRfb2JqZWN0X2Zyb21fb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2luaXRfb2JqZWN0X2Zyb21fb3ApOwogCiAJb2JqX2Rlc2MgPSAqcmV0X29ial9kZXNjOwogCW9wX2luZm8gPSBhY3BpX3BzX2dldF9vcGNvZGVfaW5mbyhvcGNvZGUpOwogCWlmIChvcF9pbmZvLT5jbGFzcyA9PSBBTUxfQ0xBU1NfVU5LTk9XTikgeworCiAJCS8qIFVua25vd24gb3Bjb2RlICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1RZUEUpOwpAQCAtNjI2LDYgKzYzMiw3IEBACiAJCWRlZmF1bHQ6CS8qIE90aGVyIGxpdGVyYWxzLCBldGMuLiAqLwogCiAJCQlpZiAob3AtPmNvbW1vbi5hbWxfb3Bjb2RlID09IEFNTF9JTlRfTkFNRVBBVEhfT1ApIHsKKwogCQkJCS8qIE5vZGUgd2FzIHNhdmVkIGluIE9wICovCiAKIAkJCQlvYmpfZGVzYy0+cmVmZXJlbmNlLm5vZGUgPSBvcC0+Y29tbW9uLm5vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvcGNvZGUuYwppbmRleCA2MjI5YzEwLi41Yjk3NGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb3Bjb2RlLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3A7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2V4ZWN1dGVfYXJndW1lbnRzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19leGVjdXRlX2FyZ3VtZW50cyk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIGEgbmV3IHBhcnNlciBvcCB0byBiZSB0aGUgcm9vdCBvZiB0aGUgcGFyc2VkIHRyZWUKQEAgLTE5Myw3ICsxOTMsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19nZXRfYnVmZmVyX2ZpZWxkX2FyZ3VtZW50cyIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19nZXRfYnVmZmVyX2ZpZWxkX2FyZ3VtZW50cywgb2JqX2Rlc2MpOwogCiAJaWYgKG9ial9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfREFUQV9WQUxJRCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIAlBQ1BJX0RFQlVHX0VYRUMoYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUKIAkJCShBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxELCBub2RlLCBOVUxMKSk7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiWyU0LjRzXSBidWZmZXJfZmllbGQgQXJnIEluaXRcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiWyU0LjRzXSBCdWZmZXJGaWVsZCBBcmcgSW5pdFxuIiwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpKSk7CiAKIAkvKiBFeGVjdXRlIHRoZSBBTUwgY29kZSBmb3IgdGhlIHRlcm1fYXJnIGFyZ3VtZW50cyAqLwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2dldF9idWZmZXJfYXJndW1lbnRzIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2dldF9idWZmZXJfYXJndW1lbnRzLCBvYmpfZGVzYyk7CiAKIAlpZiAob2JqX2Rlc2MtPmNvbW1vbi5mbGFncyAmIEFPUE9CSl9EQVRBX1ZBTElEKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0yNzksNyArMjc5LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZ2V0X3BhY2thZ2VfYXJndW1lbnRzIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2dldF9wYWNrYWdlX2FyZ3VtZW50cywgb2JqX2Rlc2MpOwogCiAJaWYgKG9ial9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfREFUQV9WQUxJRCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmV4dHJhX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZ2V0X3JlZ2lvbl9hcmd1bWVudHMiLCBvYmpfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZ2V0X3JlZ2lvbl9hcmd1bWVudHMsIG9ial9kZXNjKTsKIAogCWlmIChvYmpfZGVzYy0+cmVnaW9uLmZsYWdzICYgQU9QT0JKX0RBVEFfVkFMSUQpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTM0Miw4ICszNDIsNyBAQAogCUFDUElfREVCVUdfRVhFQyhhY3BpX3V0X2Rpc3BsYXlfaW5pdF9wYXRobmFtZQogCQkJKEFDUElfVFlQRV9SRUdJT04sIG5vZGUsIE5VTEwpKTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIlslNC40c10gb3BfcmVnaW9uIEFyZyBJbml0IGF0IEFNTCAlcFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJbJTQuNHNdIE9wUmVnaW9uIEFyZyBJbml0IGF0IEFNTCAlcFxuIiwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLAogCQkJICBleHRyYV9kZXNjLT5leHRyYS5hbWxfc3RhcnQpKTsKIApAQCAtMzUyLDYgKzM1MSwyOCBAQAogCXN0YXR1cyA9IGFjcGlfZHNfZXhlY3V0ZV9hcmd1bWVudHMobm9kZSwgYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSksCiAJCQkJCSAgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9sZW5ndGgsCiAJCQkJCSAgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9zdGFydCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCS8qIFZhbGlkYXRlIHRoZSByZWdpb24gYWRkcmVzcy9sZW5ndGggdmlhIHRoZSBob3N0IE9TICovCisKKwlzdGF0dXMgPSBhY3BpX29zX3ZhbGlkYXRlX2FkZHJlc3Mob2JqX2Rlc2MtPnJlZ2lvbi5zcGFjZV9pZCwKKwkJCQkJICBvYmpfZGVzYy0+cmVnaW9uLmFkZHJlc3MsCisJCQkJCSAgKGFjcGlfc2l6ZSkgb2JqX2Rlc2MtPnJlZ2lvbi5sZW5ndGgpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkvKgorCQkgKiBJbnZhbGlkIGFkZHJlc3MvbGVuZ3RoLiBXZSB3aWxsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgbWFyaworCQkgKiB0aGUgcmVnaW9uIGFzIGludmFsaWQsIHNvIHRoYXQgaXQgd2lsbCBjYXVzZSBhbiBhZGRpdGlvbmFsIGVycm9yIGlmCisJCSAqIGl0IGlzIGV2ZXIgdXNlZC4gVGhlbiByZXR1cm4gQUVfT0suCisJCSAqLworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCSJEdXJpbmcgYWRkcmVzcyB2YWxpZGF0aW9uIG9mIE9wUmVnaW9uIFslNC40c10iLAorCQkJCW5vZGUtPm5hbWUuYXNjaWkpKTsKKwkJb2JqX2Rlc2MtPmNvbW1vbi5mbGFncyB8PSBBT1BPQkpfSU5WQUxJRDsKKwkJc3RhdHVzID0gQUVfT0s7CisJfQorCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTQxMSw3ICs0MzIsNyBAQAogCXU4IGZpZWxkX2ZsYWdzOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19pbml0X2J1ZmZlcl9maWVsZCIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19pbml0X2J1ZmZlcl9maWVsZCwgb2JqX2Rlc2MpOwogCiAJLyogSG9zdCBvYmplY3QgbXVzdCBiZSBhIEJ1ZmZlciAqLwogCkBAIC00NTcsNyArNDc4LDcgQEAKIAogCQlpZiAoYml0X2NvdW50ID09IDApIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJBdHRlbXB0IHRvIGNyZWF0ZV9maWVsZCBvZiBsZW5ndGggemVybyIpKTsKKwkJCQkgICAgIkF0dGVtcHQgdG8gQ3JlYXRlRmllbGQgb2YgbGVuZ3RoIHplcm8iKSk7CiAJCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9WQUxVRTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQpAQCAtNTk1LDcgKzYxNiw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm5leHRfb3A7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZXZhbF9idWZmZXJfZmllbGRfb3BlcmFuZHMiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZXZhbF9idWZmZXJfZmllbGRfb3BlcmFuZHMsIG9wKTsKIAogCS8qCiAJICogVGhpcyBpcyB3aGVyZSB3ZSBldmFsdWF0ZSB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIGZpZWxkcyBvZiB0aGUKQEAgLTYyNyw3ICs2NDgsNyBAQAogCUFDUElfRFVNUF9PUEVSQU5EUyhBQ1BJX1dBTEtfT1BFUkFORFMsIEFDUElfSU1PREVfRVhFQ1VURSwKIAkJCSAgIGFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKG9wLT5jb21tb24uYW1sX29wY29kZSksCiAJCQkgICB3YWxrX3N0YXRlLT5udW1fb3BlcmFuZHMsCi0JCQkgICAiYWZ0ZXIgYWNwaV9leF9yZXNvbHZlX29wZXJhbmRzIik7CisJCQkgICAiYWZ0ZXIgQWNwaUV4UmVzb2x2ZU9wZXJhbmRzIik7CiAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIiglcykgYmFkIG9wZXJhbmQocykgKCVYKSIsCkBAIC02NDAsNiArNjYxLDcgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBCdWZmZXIgRmllbGQgKi8KIAogCWlmIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUgPT0gQU1MX0NSRUFURV9GSUVMRF9PUCkgeworCiAJCS8qIE5PVEU6IFNsaWdodGx5IGRpZmZlcmVudCBvcGVyYW5kcyBmb3IgdGhpcyBvcGNvZGUgKi8KIAogCQlzdGF0dXMgPQpAQCAtNjg1LDcgKzcwNyw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm5leHRfb3A7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZXZhbF9yZWdpb25fb3BlcmFuZHMiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZXZhbF9yZWdpb25fb3BlcmFuZHMsIG9wKTsKIAogCS8qCiAJICogVGhpcyBpcyB3aGVyZSB3ZSBldmFsdWF0ZSB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIGZpZWxkcyBvZiB0aGUKQEAgLTcxOCw3ICs3NDAsNyBAQAogCiAJQUNQSV9EVU1QX09QRVJBTkRTKEFDUElfV0FMS19PUEVSQU5EUywgQUNQSV9JTU9ERV9FWEVDVVRFLAogCQkJICAgYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUob3AtPmNvbW1vbi5hbWxfb3Bjb2RlKSwKLQkJCSAgIDEsICJhZnRlciBhY3BpX2V4X3Jlc29sdmVfb3BlcmFuZHMiKTsKKwkJCSAgIDEsICJhZnRlciBBY3BpRXhSZXNvbHZlT3BlcmFuZHMiKTsKIAogCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCWlmICghb2JqX2Rlc2MpIHsKQEAgLTc0NCw3ICs3NjYsNyBAQAogCSAgICBvcGVyYW5kX2Rlc2MtPmludGVnZXIudmFsdWU7CiAJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9wZXJhbmRfZGVzYyk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJyZ25fb2JqICVwIEFkZHIgJTguOFglOC44WCBMZW4gJVhcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiUmduT2JqICVwIEFkZHIgJTguOFglOC44WCBMZW4gJVhcbiIsCiAJCQkgIG9ial9kZXNjLAogCQkJICBBQ1BJX0ZPUk1BVF9VSU5UNjQob2JqX2Rlc2MtPnJlZ2lvbi5hZGRyZXNzKSwKIAkJCSAgb2JqX2Rlc2MtPnJlZ2lvbi5sZW5ndGgpKTsKQEAgLTc4MCw3ICs4MDIsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmFyZ19kZXNjOwogCXUzMiBsZW5ndGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19ldmFsX2RhdGFfb2JqZWN0X29wZXJhbmRzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19ldmFsX2RhdGFfb2JqZWN0X29wZXJhbmRzKTsKIAogCS8qIFRoZSBmaXJzdCBvcGVyYW5kIChmb3IgYWxsIG9mIHRoZXNlIGRhdGEgb2JqZWN0cykgaXMgdGhlIGxlbmd0aCAqLwogCkBAIC04NzQsNyArODk2LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKmNvbnRyb2xfc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX2V4ZWNfYmVnaW5fY29udHJvbF9vcCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19leGVjX2JlZ2luX2NvbnRyb2xfb3ApOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwgIk9wPSVwIE9wY29kZT0lMi4yWCBTdGF0ZT0lcFxuIiwgb3AsCiAJCQkgIG9wLT5jb21tb24uYW1sX29wY29kZSwgd2Fsa19zdGF0ZSkpOwpAQCAtOTUyLDcgKzk3NCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpjb250cm9sX3N0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19leGVjX2VuZF9jb250cm9sX29wIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX2V4ZWNfZW5kX2NvbnRyb2xfb3ApOwogCiAJc3dpdGNoIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUpIHsKIAljYXNlIEFNTF9JRl9PUDoKQEAgLTk4NCw2ICsxMDA2LDcgQEAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwgIltXSElMRV9PUF0gT3A9JXBcbiIsIG9wKSk7CiAKIAkJaWYgKHdhbGtfc3RhdGUtPmNvbnRyb2xfc3RhdGUtPmNvbW1vbi52YWx1ZSkgeworCiAJCQkvKiBQcmVkaWNhdGUgd2FzIHRydWUsIGdvIGJhY2sgYW5kIGV2YWx1YXRlIGl0IGFnYWluISAqLwogCiAJCQlzdGF0dXMgPSBBRV9DVFJMX1BFTkRJTkc7CkBAIC0xMDE0LDYgKzEwMzcsNyBAQAogCQkgKiBoYXMgYmVlbiBidWJibGVkIHVwIHRoZSB0cmVlCiAJCSAqLwogCQlpZiAob3AtPmNvbW1vbi52YWx1ZS5hcmcpIHsKKwogCQkJLyogU2luY2Ugd2UgaGF2ZSBhIHJlYWwgUmV0dXJuKCksIGRlbGV0ZSBhbnkgaW1wbGljaXQgcmV0dXJuICovCiAKIAkJCWFjcGlfZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuKHdhbGtfc3RhdGUpOwpAQCAtMTA0Nyw2ICsxMDcxLDcgQEAKIAkJCXdhbGtfc3RhdGUtPnJldHVybl9kZXNjID0gd2Fsa19zdGF0ZS0+b3BlcmFuZHNbMF07CiAJCX0gZWxzZSBpZiAoKHdhbGtfc3RhdGUtPnJlc3VsdHMpICYmCiAJCQkgICAod2Fsa19zdGF0ZS0+cmVzdWx0cy0+cmVzdWx0cy5udW1fcmVzdWx0cyA+IDApKSB7CisKIAkJCS8qIFNpbmNlIHdlIGhhdmUgYSByZWFsIFJldHVybigpLCBkZWxldGUgYW55IGltcGxpY2l0IHJldHVybiAqLwogCiAJCQlhY3BpX2RzX2NsZWFyX2ltcGxpY2l0X3JldHVybih3YWxrX3N0YXRlKTsKQEAgLTEwOTUsNyArMTEyMCw3IEBACiAJCX0KIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCSAgIkNvbXBsZXRlZCBSRVRVUk5fT1AgU3RhdGU9JXAsIHJldF92YWw9JXBcbiIsCisJCQkJICAiQ29tcGxldGVkIFJFVFVSTl9PUCBTdGF0ZT0lcCwgUmV0VmFsPSVwXG4iLAogCQkJCSAgd2Fsa19zdGF0ZSwgd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2MpKTsKIAogCQkvKiBFbmQgdGhlIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbiByaWdodCBub3cgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzdXRpbHMuYwppbmRleCA1MzM1NmE1Li4wNTIzMGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN1dGlscy5jCkBAIC02OCw3ICs2OCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBhY3BpX2RzX2NsZWFyX2ltcGxpY2l0X3JldHVybihzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKQogewotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfY2xlYXJfaW1wbGljaXRfcmV0dXJuIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX2NsZWFyX2ltcGxpY2l0X3JldHVybik7CiAKIAkvKgogCSAqIFNsYWNrIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyBmZWF0dXJlCkBAIC0xMTUsNyArMTE1LDcgQEAKIGFjcGlfZHNfZG9faW1wbGljaXRfcmV0dXJuKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjLAogCQkJICAgc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSwgdTggYWRkX3JlZmVyZW5jZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX2RvX2ltcGxpY2l0X3JldHVybiIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19kb19pbXBsaWNpdF9yZXR1cm4pOwogCiAJLyoKIAkgKiBTbGFjayBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgZmVhdHVyZSwgYW5kIHdlIG11c3QKQEAgLTE3MSw3ICsxNzEsNyBAQAogewogCWNvbnN0IHN0cnVjdCBhY3BpX29wY29kZV9pbmZvICpwYXJlbnRfaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19pc19yZXN1bHRfdXNlZCIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19pc19yZXN1bHRfdXNlZCwgb3ApOwogCiAJLyogTXVzdCBoYXZlIGJvdGggYW4gT3AgYW5kIGEgUmVzdWx0IE9iamVjdCAqLwogCkBAIC0yMDIsNiArMjAyLDcgQEAKIAkgKi8KIAlpZiAoKCFvcC0+Y29tbW9uLnBhcmVudCkgfHwKIAkgICAgKG9wLT5jb21tb24ucGFyZW50LT5jb21tb24uYW1sX29wY29kZSA9PSBBTUxfU0NPUEVfT1ApKSB7CisKIAkJLyogTm8gcGFyZW50LCB0aGUgcmV0dXJuIHZhbHVlIGNhbm5vdCBwb3NzaWJseSBiZSB1c2VkICovCiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKQEAgLTM0MCw3ICszNDEsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJkc19kZWxldGVfcmVzdWx0X2lmX25vdF91c2VkIiwgcmVzdWx0X29iaik7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZGVsZXRlX3Jlc3VsdF9pZl9ub3RfdXNlZCwgcmVzdWx0X29iaik7CiAKIAlpZiAoIW9wKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJOdWxsIE9wIikpOwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJfQogCiAJaWYgKCFhY3BpX2RzX2lzX3Jlc3VsdF91c2VkKG9wLCB3YWxrX3N0YXRlKSkgeworCiAJCS8qIE11c3QgcG9wIHRoZSByZXN1bHQgc3RhY2sgKG9ial9kZXNjIHNob3VsZCBiZSBlcXVhbCB0byByZXN1bHRfb2JqKSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZHNfcmVzdWx0X3BvcCgmb2JqX2Rlc2MsIHdhbGtfc3RhdGUpOwpAQCAtMzgyLDcgKzM4NCw3IEBACiAJdTMyIGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfcmVzb2x2ZV9vcGVyYW5kcyIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX3Jlc29sdmVfb3BlcmFuZHMsIHdhbGtfc3RhdGUpOwogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIHJlc29sdmUgZWFjaCBvZiB0aGUgdmFsaWQgb3BlcmFuZHMKQEAgLTQxNyw3ICs0MTksNyBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2NsZWFyX29wZXJhbmRzIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfY2xlYXJfb3BlcmFuZHMsIHdhbGtfc3RhdGUpOwogCiAJLyogUmVtb3ZlIGEgcmVmZXJlbmNlIG9uIGVhY2ggb3BlcmFuZCBvbiB0aGUgc3RhY2sgKi8KIApAQCAtNDY1LDcgKzQ2Nyw3IEBACiAJYWNwaV9pbnRlcnByZXRlcl9tb2RlIGludGVycHJldGVyX21vZGU7CiAJY29uc3Qgc3RydWN0IGFjcGlfb3Bjb2RlX2luZm8gKm9wX2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfY3JlYXRlX29wZXJhbmQiLCBhcmcpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2NyZWF0ZV9vcGVyYW5kLCBhcmcpOwogCiAJLyogQSB2YWxpZCBuYW1lIG11c3QgYmUgbG9va2VkIHVwIGluIHRoZSBuYW1lc3BhY2UgKi8KIApAQCAtNDk4LDcgKzUwMCw5IEBACiAJCSAqLwogCQlpZiAoKHdhbGtfc3RhdGUtPmRlZmVycmVkX25vZGUpICYmCiAJCSAgICAod2Fsa19zdGF0ZS0+ZGVmZXJyZWRfbm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKQotCQkgICAgJiYgKGFyZ19pbmRleCAhPSAwKSkgeworCQkgICAgJiYgKGFyZ19pbmRleCA9PQorCQkJKHUzMikgKCh3YWxrX3N0YXRlLT5vcGNvZGUgPT0KKwkJCQlBTUxfQ1JFQVRFX0ZJRUxEX09QKSA/IDMgOiAyKSkpIHsKIAkJCW9ial9kZXNjID0KIAkJCSAgICBBQ1BJX0NBU1RfUFRSKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QsCiAJCQkJCSAgd2Fsa19zdGF0ZS0+ZGVmZXJyZWRfbm9kZSk7CkBAIC01MjEsNiArNTI1LDcgQEAKIAkJCSAgICAmJiAocGFyZW50X29wLT5jb21tb24uYW1sX29wY29kZSAhPSBBTUxfUkVHSU9OX09QKQogCQkJICAgICYmIChwYXJlbnRfb3AtPmNvbW1vbi5hbWxfb3Bjb2RlICE9CiAJCQkJQU1MX0lOVF9OQU1FUEFUSF9PUCkpIHsKKwogCQkJCS8qIEVudGVyIG5hbWUgaW50byBuYW1lc3BhY2UgaWYgbm90IGZvdW5kICovCiAKIAkJCQlpbnRlcnByZXRlcl9tb2RlID0gQUNQSV9JTU9ERV9MT0FEX1BBU1MyOwpAQCAtNTcyLDcgKzU3Nyw3IEBACiAKIAkJLyogRnJlZSB0aGUgbmFtZXN0cmluZyBjcmVhdGVkIGFib3ZlICovCiAKLQkJQUNQSV9NRU1fRlJFRShuYW1lX3N0cmluZyk7CisJCUFDUElfRlJFRShuYW1lX3N0cmluZyk7CiAKIAkJLyogQ2hlY2sgc3RhdHVzIGZyb20gdGhlIGxvb2t1cCAqLwogCkBAIC02OTYsNyArNzAxLDcgQEAKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnOwogCXUzMiBhcmdfY291bnQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2NyZWF0ZV9vcGVyYW5kcyIsIGZpcnN0X2FyZyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfY3JlYXRlX29wZXJhbmRzLCBmaXJzdF9hcmcpOwogCiAJLyogRm9yIGFsbCBhcmd1bWVudHMgaW4gdGhlIGxpc3QuLi4gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3ZXhlYy5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3ZXhlYy5jCmluZGV4IGYxYWY2NTUuLjNhY2JkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2V4ZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dleGVjLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogI2luY2x1ZGUgPGFjcGkvYWNkZWJ1Zy5oPgotI2luY2x1ZGUgPGFjcGkvYWNkaXNhc20uaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfRElTUEFUQ0hFUgogQUNQSV9NT0RVTEVfTkFNRSgiZHN3ZXhlYyIpCkBAIC05Myw3ICs5Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbG9jYWxfb2JqX2Rlc2MgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImRzX2dldF9wcmVkaWNhdGVfdmFsdWUiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19nZXRfcHJlZGljYXRlX3ZhbHVlLCB3YWxrX3N0YXRlKTsKIAogCXdhbGtfc3RhdGUtPmNvbnRyb2xfc3RhdGUtPmNvbW1vbi5zdGF0ZSA9IDA7CiAKQEAgLTEyMyw3ICsxMjIsNyBAQAogCiAJaWYgKCFvYmpfZGVzYykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJObyBwcmVkaWNhdGUgb2JqX2Rlc2M9JXAgU3RhdGU9JXAiLAorCQkJICAgICJObyBwcmVkaWNhdGUgT2JqRGVzYz0lcCBTdGF0ZT0lcCIsCiAJCQkgICAgb2JqX2Rlc2MsIHdhbGtfc3RhdGUpKTsKIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX05PX09QRVJBTkQpOwpAQCAtMTQwLDcgKzEzOSw3IEBACiAKIAlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUobG9jYWxfb2JqX2Rlc2MpICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkJhZCBwcmVkaWNhdGUgKG5vdCBhbiBpbnRlZ2VyKSBvYmpfZGVzYz0lcCBTdGF0ZT0lcCBUeXBlPSVYIiwKKwkJCSAgICAiQmFkIHByZWRpY2F0ZSAobm90IGFuIGludGVnZXIpIE9iakRlc2M9JXAgU3RhdGU9JXAgVHlwZT0lWCIsCiAJCQkgICAgb2JqX2Rlc2MsIHdhbGtfc3RhdGUsCiAJCQkgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSk7CiAKQEAgLTIxNCw3ICsyMTMsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiBvcGNvZGVfY2xhc3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZXhlY19iZWdpbl9vcCIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX2V4ZWNfYmVnaW5fb3AsIHdhbGtfc3RhdGUpOwogCiAJb3AgPSB3YWxrX3N0YXRlLT5vcDsKIAlpZiAoIW9wKSB7CkBAIC0yOTYsNyArMjk1LDcgQEAKIAogCWNhc2UgQU1MX0NMQVNTX05BTUVEX09CSkVDVDoKIAotCQlpZiAod2Fsa19zdGF0ZS0+d2Fsa190eXBlID09IEFDUElfV0FMS19NRVRIT0QpIHsKKwkJaWYgKHdhbGtfc3RhdGUtPndhbGtfdHlwZSAmIEFDUElfV0FMS19NRVRIT0QpIHsKIAkJCS8qCiAJCQkgKiBGb3VuZCBhIG5hbWVkIG9iamVjdCBkZWNsYXJhdGlvbiBkdXJpbmcgbWV0aG9kIGV4ZWN1dGlvbjsKIAkJCSAqIHdlIG11c3QgZW50ZXIgdGhpcyBvYmplY3QgaW50byB0aGUgbmFtZXNwYWNlLiAgVGhlIGNyZWF0ZWQKQEAgLTM1NCw3ICszNTMsNyBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpuZXh0X29wOwogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpmaXJzdF9hcmc7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZXhlY19lbmRfb3AiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19leGVjX2VuZF9vcCwgd2Fsa19zdGF0ZSk7CiAKIAlvcCA9IHdhbGtfc3RhdGUtPm9wOwogCW9wX3R5cGUgPSB3YWxrX3N0YXRlLT5vcF9pbmZvLT50eXBlOwpAQCAtNDA5LDYgKzQwOCw3IEBACiAJCSAqIGJlaW5nIHRoZSBvYmplY3RfdHlwZSBhbmQgc2l6ZV9vZiBvcGVyYXRvcnMuCiAJCSAqLwogCQlpZiAoISh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9OT19PUEVSQU5EX1JFU09MVkUpKSB7CisKIAkJCS8qIFJlc29sdmUgYWxsIG9wZXJhbmRzICovCiAKIAkJCXN0YXR1cyA9IGFjcGlfZXhfcmVzb2x2ZV9vcGVyYW5kcyh3YWxrX3N0YXRlLT5vcGNvZGUsCkBAIC00MjMsNyArNDIzLDcgQEAKIAkJCQkJCSAgIGFjcGlfcHNfZ2V0X29wY29kZV9uYW1lCiAJCQkJCQkgICAod2Fsa19zdGF0ZS0+b3Bjb2RlKSwKIAkJCQkJCSAgIHdhbGtfc3RhdGUtPm51bV9vcGVyYW5kcywKLQkJCQkJCSAgICJhZnRlciBleF9yZXNvbHZlX29wZXJhbmRzIik7CisJCQkJCQkgICAiYWZ0ZXIgRXhSZXNvbHZlT3BlcmFuZHMiKTsKIAkJCX0KIAkJfQogCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJCSAgICBhY3BpX2dibF9vcF90eXBlX2Rpc3BhdGNoW29wX3R5cGVdICh3YWxrX3N0YXRlKTsKIAkJfSBlbHNlIHsKIAkJCS8qCi0JCQkgKiBUcmVhdCBjb25zdHJ1Y3RzIG9mIHRoZSBmb3JtICJTdG9yZShsb2NhbF94LGxvY2FsX3gpIiBhcyBub29wcyB3aGVuIHRoZQorCQkJICogVHJlYXQgY29uc3RydWN0cyBvZiB0aGUgZm9ybSAiU3RvcmUoTG9jYWxYLExvY2FsWCkiIGFzIG5vb3BzIHdoZW4gdGhlCiAJCQkgKiBMb2NhbCBpcyB1bmluaXRpYWxpemVkLgogCQkJICovCiAJCQlpZiAoKHN0YXR1cyA9PSBBRV9BTUxfVU5JTklUSUFMSVpFRF9MT0NBTCkgJiYKQEAgLTU0OCw2ICs1NDgsNyBAQAogCQkJICovCiAJCQlzdGF0dXMgPSBhY3BpX2RzX3Jlc29sdmVfb3BlcmFuZHMod2Fsa19zdGF0ZSk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkJCS8qIE9uIGVycm9yLCBjbGVhciBhbGwgcmVzb2x2ZWQgb3BlcmFuZHMgKi8KIAogCQkJCWFjcGlfZHNfY2xlYXJfb3BlcmFuZHMod2Fsa19zdGF0ZSk7CkBAIC01NjksNyArNTcwLDcgQEAKIAkJY2FzZSBBTUxfVFlQRV9DUkVBVEVfRklFTEQ6CiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCQkJICAiRXhlY3V0aW5nIGNyZWF0ZV9maWVsZCBCdWZmZXIvSW5kZXggT3A9JXBcbiIsCisJCQkJCSAgIkV4ZWN1dGluZyBDcmVhdGVGaWVsZCBCdWZmZXIvSW5kZXggT3A9JXBcbiIsCiAJCQkJCSAgb3ApKTsKIAogCQkJc3RhdHVzID0gYWNwaV9kc19sb2FkMl9lbmRfb3Aod2Fsa19zdGF0ZSk7CkBAIC01ODQsNyArNTg1LDcgQEAKIAkJY2FzZSBBTUxfVFlQRV9DUkVBVEVfT0JKRUNUOgogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJCSAgIkV4ZWN1dGluZyBjcmVhdGVfb2JqZWN0IChCdWZmZXIvUGFja2FnZSkgT3A9JXBcbiIsCisJCQkJCSAgIkV4ZWN1dGluZyBDcmVhdGVPYmplY3QgKEJ1ZmZlci9QYWNrYWdlKSBPcD0lcFxuIiwKIAkJCQkJICBvcCkpOwogCiAJCQlzd2l0Y2ggKG9wLT5jb21tb24ucGFyZW50LT5jb21tb24uYW1sX29wY29kZSkgewpAQCAtNjU3LDcgKzY1OCw3IEBACiAKIAkJCWlmIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUgPT0gQU1MX1JFR0lPTl9PUCkgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCQkJCSAgIkV4ZWN1dGluZyBvcF9yZWdpb24gQWRkcmVzcy9MZW5ndGggT3A9JXBcbiIsCisJCQkJCQkgICJFeGVjdXRpbmcgT3BSZWdpb24gQWRkcmVzcy9MZW5ndGggT3A9JXBcbiIsCiAJCQkJCQkgIG9wKSk7CiAKIAkJCQlzdGF0dXMgPQpAQCAtNzIyLDYgKzcyMyw3IEBACiAgICAgICBjbGVhbnVwOgogCiAJaWYgKHdhbGtfc3RhdGUtPnJlc3VsdF9vYmopIHsKKwogCQkvKiBCcmVhayB0byBkZWJ1Z2dlciB0byBkaXNwbGF5IHJlc3VsdCAqLwogCiAJCUFDUElfREVCVUdHRVJfRVhFQyhhY3BpX2RiX2Rpc3BsYXlfcmVzdWx0X29iamVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3bG9hZC5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3bG9hZC5jCmluZGV4IGQzZDI0ZGEuLjM1MDc0MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2xvYWQuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dsb2FkLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWNoYXIgKnBhdGg7CiAJdTMyIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbG9hZDFfYmVnaW5fb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX2xvYWQxX2JlZ2luX29wKTsKIAogCW9wID0gd2Fsa19zdGF0ZS0+b3A7CiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwgIk9wPSVwIFN0YXRlPSVwXG4iLCBvcCwKQEAgLTE3OCwxMiArMTc4LDEyIEBACiAJCQkgKiBUYXJnZXQgb2YgU2NvcGUoKSBub3QgZm91bmQuICBHZW5lcmF0ZSBhbiBFeHRlcm5hbCBmb3IgaXQsIGFuZAogCQkJICogaW5zZXJ0IHRoZSBuYW1lIGludG8gdGhlIG5hbWVzcGFjZS4KIAkJCSAqLwotCQkJYWNwaV9kbV9hZGRfdG9fZXh0ZXJuYWxfbGlzdChwYXRoKTsKKwkJCWFjcGlfZG1fYWRkX3RvX2V4dGVybmFsX2xpc3QocGF0aCwgQUNQSV9UWVBFX0RFVklDRSwgMCk7CiAJCQlzdGF0dXMgPQogCQkJICAgIGFjcGlfbnNfbG9va3VwKHdhbGtfc3RhdGUtPnNjb3BlX2luZm8sIHBhdGgsCiAJCQkJCSAgIG9iamVjdF90eXBlLCBBQ1BJX0lNT0RFX0xPQURfUEFTUzEsCiAJCQkJCSAgIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwgd2Fsa19zdGF0ZSwKLQkJCQkJICAgJihub2RlKSk7CisJCQkJCSAgICZub2RlKTsKIAkJfQogI2VuZGlmCiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMjYxLDYgKzI2MSw3IEBACiAJCSAqLwogCiAJCWlmICh3YWxrX3N0YXRlLT5kZWZlcnJlZF9ub2RlKSB7CisKIAkJCS8qIFRoaXMgbmFtZSBpcyBhbHJlYWR5IGluIHRoZSBuYW1lc3BhY2UsIGdldCB0aGUgbm9kZSAqLwogCiAJCQlub2RlID0gd2Fsa19zdGF0ZS0+ZGVmZXJyZWRfbm9kZTsKQEAgLTMwMCwxMCArMzAxLDQxIEBACiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX25zX2xvb2t1cCh3YWxrX3N0YXRlLT5zY29wZV9pbmZvLCBwYXRoLCBvYmplY3RfdHlwZSwKIAkJCQkgICBBQ1BJX0lNT0RFX0xPQURfUEFTUzEsIGZsYWdzLCB3YWxrX3N0YXRlLAotCQkJCSAgICYobm9kZSkpOworCQkJCSAgICZub2RlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlBQ1BJX0VSUk9SX05BTUVTUEFDRShwYXRoLCBzdGF0dXMpOwotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCQlpZiAoc3RhdHVzID09IEFFX0FMUkVBRFlfRVhJU1RTKSB7CisKKwkJCQkvKiBUaGUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIHNjb3BlICovCisKKwkJCQlpZiAobm9kZS0+ZmxhZ3MgJiBBTk9CSl9JU19FWFRFUk5BTCkgeworCQkJCQkvKgorCQkJCQkgKiBBbGxvdyBvbmUgY3JlYXRlIG9uIGFuIG9iamVjdCBvciBzZWdtZW50IHRoYXQgd2FzCisJCQkJCSAqIHByZXZpb3VzbHkgZGVjbGFyZWQgRXh0ZXJuYWwKKwkJCQkJICovCisJCQkJCW5vZGUtPmZsYWdzICY9IH5BTk9CSl9JU19FWFRFUk5BTDsKKwkJCQkJbm9kZS0+dHlwZSA9ICh1OCkgb2JqZWN0X3R5cGU7CisKKwkJCQkJLyogSnVzdCByZXR5cGVkIGEgbm9kZSwgcHJvYmFibHkgd2lsbCBuZWVkIHRvIG9wZW4gYSBzY29wZSAqLworCisJCQkJCWlmIChhY3BpX25zX29wZW5zX3Njb3BlKG9iamVjdF90eXBlKSkgeworCQkJCQkJc3RhdHVzID0KKwkJCQkJCSAgICBhY3BpX2RzX3Njb3BlX3N0YWNrX3B1c2gKKwkJCQkJCSAgICAobm9kZSwgb2JqZWN0X3R5cGUsCisJCQkJCQkgICAgIHdhbGtfc3RhdGUpOworCQkJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJCQkJcmV0dXJuX0FDUElfU1RBVFVTCisJCQkJCQkJICAgIChzdGF0dXMpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXN0YXR1cyA9IEFFX09LOworCQkJCX0KKwkJCX0KKworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKKwkJCQlBQ1BJX0VSUk9SX05BTUVTUEFDRShwYXRoLCBzdGF0dXMpOworCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQkJfQogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTMxMSw2ICszNDMsNyBAQAogCS8qIENvbW1vbiBleGl0ICovCiAKIAlpZiAoIW9wKSB7CisKIAkJLyogQ3JlYXRlIGEgbmV3IG9wICovCiAKIAkJb3AgPSBhY3BpX3BzX2FsbG9jX29wKHdhbGtfc3RhdGUtPm9wY29kZSk7CkBAIC0zNTksNyArMzkyLDcgQEAKIAlhY3BpX29iamVjdF90eXBlIG9iamVjdF90eXBlOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfbG9hZDFfZW5kX29wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19sb2FkMV9lbmRfb3ApOwogCiAJb3AgPSB3YWxrX3N0YXRlLT5vcDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILCAiT3A9JXAgU3RhdGU9JXBcbiIsIG9wLApAQCAtNDEzLDYgKzQ0Niw3IEBACiAjZW5kaWYKIAogCWlmIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUgPT0gQU1MX05BTUVfT1ApIHsKKwogCQkvKiBGb3IgTmFtZSBvcGNvZGUsIGdldCB0aGUgb2JqZWN0IHR5cGUgZnJvbSB0aGUgYXJndW1lbnQgKi8KIAogCQlpZiAob3AtPmNvbW1vbi52YWx1ZS5hcmcpIHsKQEAgLTQ0NSw3ICs0NzksNyBAQAogCQkJICogYXJndW1lbnRzLikKIAkJCSAqLwogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKLQkJCQkJICAiTE9BRElORy1NZXRob2Q6IFN0YXRlPSVwIE9wPSVwIG5hbWVkX29iaj0lcFxuIiwKKwkJCQkJICAiTE9BRElORy1NZXRob2Q6IFN0YXRlPSVwIE9wPSVwIE5hbWVkT2JqPSVwXG4iLAogCQkJCQkgIHdhbGtfc3RhdGUsIG9wLCBvcC0+bmFtZWQubm9kZSkpOwogCiAJCQlpZiAoIWFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChvcC0+bmFtZWQubm9kZSkpIHsKQEAgLTUxMSw3ICs1NDUsNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGU7CiAJY2hhciAqYnVmZmVyX3B0cjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2xvYWQyX2JlZ2luX29wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19sb2FkMl9iZWdpbl9vcCk7CiAKIAlvcCA9IHdhbGtfc3RhdGUtPm9wOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsICJPcD0lcCBTdGF0ZT0lcFxuIiwgb3AsCkBAIC01MjEsNiArNTU1LDcgQEAKIAkJaWYgKCh3YWxrX3N0YXRlLT5jb250cm9sX3N0YXRlKSAmJgogCQkgICAgKHdhbGtfc3RhdGUtPmNvbnRyb2xfc3RhdGUtPmNvbW1vbi5zdGF0ZSA9PQogCQkgICAgIEFDUElfQ09OVFJPTF9DT05ESVRJT05BTF9FWEVDVVRJTkcpKSB7CisKIAkJCS8qIFdlIGFyZSBleGVjdXRpbmcgYSB3aGlsZSBsb29wIG91dHNpZGUgb2YgYSBtZXRob2QgKi8KIAogCQkJc3RhdHVzID0gYWNwaV9kc19leGVjX2JlZ2luX29wKHdhbGtfc3RhdGUsIG91dF9vcCk7CkBAIC01NTQsMTAgKzU4OSwxMiBAQAogCQkvKiBHZXQgdGhlIG5hbWUgd2UgYXJlIGdvaW5nIHRvIGVudGVyIG9yIGxvb2t1cCBpbiB0aGUgbmFtZXNwYWNlICovCiAKIAkJaWYgKHdhbGtfc3RhdGUtPm9wY29kZSA9PSBBTUxfSU5UX05BTUVQQVRIX09QKSB7CisKIAkJCS8qIEZvciBOYW1lcGF0aCBvcCwgZ2V0IHRoZSBwYXRoIHN0cmluZyAqLwogCiAJCQlidWZmZXJfcHRyID0gb3AtPmNvbW1vbi52YWx1ZS5zdHJpbmc7CiAJCQlpZiAoIWJ1ZmZlcl9wdHIpIHsKKwogCQkJCS8qIE5vIG5hbWUsIGp1c3QgZXhpdCAqLwogCiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTY4MCw2ICs3MTcsNyBAQAogCQkvKiBBbGwgb3RoZXIgb3Bjb2RlcyAqLwogCiAJCWlmIChvcCAmJiBvcC0+Y29tbW9uLm5vZGUpIHsKKwogCQkJLyogVGhpcyBvcC9ub2RlIHdhcyBwcmV2aW91c2x5IGVudGVyZWQgaW50byB0aGUgbmFtZXNwYWNlICovCiAKIAkJCW5vZGUgPSBvcC0+Y29tbW9uLm5vZGU7CkBAIC03MDUsNiArNzQzLDcgQEAKIAkJICogTm90ZTogTmFtZSBtYXkgYWxyZWFkeSBleGlzdCBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgZGVmZXJyZWQgb3Bjb2RlLgogCQkgKi8KIAkJaWYgKHdhbGtfc3RhdGUtPmRlZmVycmVkX25vZGUpIHsKKwogCQkJLyogVGhpcyBuYW1lIGlzIGFscmVhZHkgaW4gdGhlIG5hbWVzcGFjZSwgZ2V0IHRoZSBub2RlICovCiAKIAkJCW5vZGUgPSB3YWxrX3N0YXRlLT5kZWZlcnJlZF9ub2RlOwpAQCAtNzI3LDYgKzc2Niw3IEBACiAJfQogCiAJaWYgKCFvcCkgeworCiAJCS8qIENyZWF0ZSBhIG5ldyBvcCAqLwogCiAJCW9wID0gYWNwaV9wc19hbGxvY19vcCh3YWxrX3N0YXRlLT5vcGNvZGUpOwpAQCAtNzc2LDcgKzgxNiw3IEBACiAJdTMyIGk7CiAjZW5kaWYKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX2xvYWQyX2VuZF9vcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfbG9hZDJfZW5kX29wKTsKIAogCW9wID0gd2Fsa19zdGF0ZS0+b3A7CiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwgIk9wY29kZSBbJXNdIE9wICVwIFN0YXRlICVwXG4iLApAQCAtODcwLDcgKzkxMCw3IEBACiAJICovCiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJICAiQ3JlYXRlLUxvYWQgWyVzXSBTdGF0ZT0lcCBPcD0lcCBuYW1lZF9vYmo9JXBcbiIsCisJCQkgICJDcmVhdGUtTG9hZCBbJXNdIFN0YXRlPSVwIE9wPSVwIE5hbWVkT2JqPSVwXG4iLAogCQkJICBhY3BpX3BzX2dldF9vcGNvZGVfbmFtZShvcC0+Y29tbW9uLmFtbF9vcGNvZGUpLAogCQkJICB3YWxrX3N0YXRlLCBvcCwgbm9kZSkpOwogCkBAIC0xMDQ1LDcgKzEwODUsNyBAQAogCQkJICogYXJndW1lbnRzLikKIAkJCSAqLwogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKLQkJCQkJICAiTE9BRElORy1NZXRob2Q6IFN0YXRlPSVwIE9wPSVwIG5hbWVkX29iaj0lcFxuIiwKKwkJCQkJICAiTE9BRElORy1NZXRob2Q6IFN0YXRlPSVwIE9wPSVwIE5hbWVkT2JqPSVwXG4iLAogCQkJCQkgIHdhbGtfc3RhdGUsIG9wLCBvcC0+bmFtZWQubm9kZSkpOwogCiAJCQlpZiAoIWFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChvcC0+bmFtZWQubm9kZSkpIHsKQEAgLTEwOTAsNyArMTEzMCw3IEBACiAJY2FzZSBBTUxfQ0xBU1NfTUVUSE9EX0NBTEw6CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKLQkJCQkgICJSRVNPTFZJTkctbWV0aG9kX2NhbGw6IFN0YXRlPSVwIE9wPSVwIG5hbWVkX29iaj0lcFxuIiwKKwkJCQkgICJSRVNPTFZJTkctTWV0aG9kQ2FsbDogU3RhdGU9JXAgT3A9JXAgTmFtZWRPYmo9JXBcbiIsCiAJCQkJICB3YWxrX3N0YXRlLCBvcCwgbm9kZSkpOwogCiAJCS8qCkBAIC0xMTA0LDcgKzExNDQsNiBAQAogCQkJCSAgIEFDUElfTlNfRE9OVF9PUEVOX1NDT1BFLCB3YWxrX3N0YXRlLAogCQkJCSAgICYobmV3X25vZGUpKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0KIAkJCS8qCiAJCQkgKiBNYWtlIHN1cmUgdGhhdCB3aGF0IHdlIGZvdW5kIGlzIGluZGVlZCBhIG1ldGhvZAogCQkJICogV2UgZGlkbid0IHNlYXJjaCBmb3IgYSBtZXRob2Qgb24gcHVycG9zZSwgdG8gc2VlIGlmIHRoZSBuYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzY29wZS5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3c2NvcGUuYwppbmRleCBhZGEyMWVmLi5jOTIyODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzY29wZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3Njb3BlLmMKQEAgLTYzLDkgKzYzLDEwIEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzY29wZV9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19zY29wZV9zdGFja19jbGVhciIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19zY29wZV9zdGFja19jbGVhcik7CiAKIAl3aGlsZSAod2Fsa19zdGF0ZS0+c2NvcGVfaW5mbykgeworCiAJCS8qIFBvcCBhIHNjb3BlIG9mZiB0aGUgc3RhY2sgKi8KIAogCQlzY29wZV9pbmZvID0gd2Fsa19zdGF0ZS0+c2NvcGVfaW5mbzsKQEAgLTEwMiw5ICsxMDMsMTAgQEAKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlX2luZm87CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpvbGRfc2NvcGVfaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX3Njb3BlX3N0YWNrX3B1c2giKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX3Njb3BlX3N0YWNrX3B1c2gpOwogCiAJaWYgKCFub2RlKSB7CisKIAkJLyogSW52YWxpZCBzY29wZSAgICovCiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk51bGwgc2NvcGUgcGFyYW1ldGVyIikpOwpAQCAtMTI2LDcgKzEyOCw3IEBACiAKIAkvKiBJbml0IG5ldyBzY29wZSBvYmplY3QgKi8KIAotCXNjb3BlX2luZm8tPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9XU0NPUEU7CisJc2NvcGVfaW5mby0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX1NUQVRFX1dTQ09QRTsKIAlzY29wZV9pbmZvLT5zY29wZS5ub2RlID0gbm9kZTsKIAlzY29wZV9pbmZvLT5jb21tb24udmFsdWUgPSAodTE2KSB0eXBlOwogCkBAIC0xNzYsNyArMTc4LDcgQEAKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnNjb3BlX2luZm87CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpuZXdfc2NvcGVfaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX3Njb3BlX3N0YWNrX3BvcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfc2NvcGVfc3RhY2tfcG9wKTsKIAogCS8qCiAJICogUG9wIHNjb3BlIGluZm8gb2JqZWN0IG9mZiB0aGUgc3RhY2suCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3c3RhdGUuYwppbmRleCBmYTc4Y2I3Li43ODE3ZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzdGF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3N0YXRlLmMKQEAgLTY2LDcgKzY2LDYgQEAKICNlbmRpZgogCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9kc19yZXN1bHRfcmVtb3ZlCkBAIC04OCw3ICs4Nyw3IEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfcmVzdWx0X3JlbW92ZSIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19yZXN1bHRfcmVtb3ZlKTsKIAogCXN0YXRlID0gd2Fsa19zdGF0ZS0+cmVzdWx0czsKIAlpZiAoIXN0YXRlKSB7CkBAIC0xMjgsNyArMTI3LDYgQEAKIAogCXJldHVybiAoQUVfT0spOwogfQotCiAjZW5kaWYJCQkJLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTUyLDcgKzE1MCw3IEBACiAJYWNwaV9uYXRpdmVfdWludCBpbmRleDsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19yZXN1bHRfcG9wIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Jlc3VsdF9wb3ApOwogCiAJc3RhdGUgPSB3YWxrX3N0YXRlLT5yZXN1bHRzOwogCWlmICghc3RhdGUpIHsKQEAgLTE3MCw2ICsxNjgsNyBAQAogCXN0YXRlLT5yZXN1bHRzLm51bV9yZXN1bHRzLS07CiAKIAlmb3IgKGluZGV4ID0gQUNQSV9PQkpfTlVNX09QRVJBTkRTOyBpbmRleDsgaW5kZXgtLSkgeworCiAJCS8qIENoZWNrIGZvciBhIHZhbGlkIHJlc3VsdCBvYmplY3QgKi8KIAogCQlpZiAoc3RhdGUtPnJlc3VsdHMub2JqX2Rlc2NbaW5kZXggLSAxXSkgewpAQCAtMjEzLDcgKzIxMiw3IEBACiAJYWNwaV9uYXRpdmVfdWludCBpbmRleDsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19yZXN1bHRfcG9wX2Zyb21fYm90dG9tIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Jlc3VsdF9wb3BfZnJvbV9ib3R0b20pOwogCiAJc3RhdGUgPSB3YWxrX3N0YXRlLT5yZXN1bHRzOwogCWlmICghc3RhdGUpIHsKQEAgLTI3OCw3ICsyNzcsNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX3Jlc3VsdF9wdXNoIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Jlc3VsdF9wdXNoKTsKIAogCXN0YXRlID0gd2Fsa19zdGF0ZS0+cmVzdWx0czsKIAlpZiAoIXN0YXRlKSB7CkBAIC0zMzEsMTQgKzMzMCwxNCBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX3Jlc3VsdF9zdGFja19wdXNoIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX3Jlc3VsdF9zdGFja19wdXNoKTsKIAogCXN0YXRlID0gYWNwaV91dF9jcmVhdGVfZ2VuZXJpY19zdGF0ZSgpOwogCWlmICghc3RhdGUpIHsKIAkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwogCX0KIAotCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUkVTVUxUOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUkVTVUxUOwogCWFjcGlfdXRfcHVzaF9nZW5lcmljX3N0YXRlKCZ3YWxrX3N0YXRlLT5yZXN1bHRzLCBzdGF0ZSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJSZXN1bHRzPSVwIFN0YXRlPSVwXG4iLApAQCAtMzYzLDcgKzM2Miw3IEBACiB7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfcmVzdWx0X3N0YWNrX3BvcCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19yZXN1bHRfc3RhY2tfcG9wKTsKIAogCS8qIENoZWNrIGZvciBzdGFjayB1bmRlcmZsb3cgKi8KIApAQCAtMzc2LDcgKzM3NSw3IEBACiAJc3RhdGUgPSBhY3BpX3V0X3BvcF9nZW5lcmljX3N0YXRlKCZ3YWxrX3N0YXRlLT5yZXN1bHRzKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIlJlc3VsdD0lcCByZW1haW5pbmdfcmVzdWx0cz0lWCBTdGF0ZT0lcFxuIiwKKwkJCSAgIlJlc3VsdD0lcCBSZW1haW5pbmdSZXN1bHRzPSVYIFN0YXRlPSVwXG4iLAogCQkJICBzdGF0ZSwgc3RhdGUtPnJlc3VsdHMubnVtX3Jlc3VsdHMsIHdhbGtfc3RhdGUpKTsKIAogCWFjcGlfdXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUoc3RhdGUpOwpAQCAtNDAwLDcgKzM5OSw3IEBACiBhY3BpX3N0YXR1cwogYWNwaV9kc19vYmpfc3RhY2tfcHVzaCh2b2lkICpvYmplY3QsIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKiB3YWxrX3N0YXRlKQogewotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfb2JqX3N0YWNrX3B1c2giKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfb2JqX3N0YWNrX3B1c2gpOwogCiAJLyogQ2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93ICovCiAKQEAgLTQ0NSw5ICs0NDQsMTAgQEAKIHsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfb2JqX3N0YWNrX3BvcCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShkc19vYmpfc3RhY2tfcG9wKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3BfY291bnQ7IGkrKykgeworCiAJCS8qIENoZWNrIGZvciBzdGFjayB1bmRlcmZsb3cgKi8KIAogCQlpZiAod2Fsa19zdGF0ZS0+bnVtX29wZXJhbmRzID09IDApIHsKQEAgLTQ5MSw5ICs0OTEsMTAgQEAKIAl1MzIgaTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZHNfb2JqX3N0YWNrX3BvcF9hbmRfZGVsZXRlIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX29ial9zdGFja19wb3BfYW5kX2RlbGV0ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9wX2NvdW50OyBpKyspIHsKKwogCQkvKiBDaGVjayBmb3Igc3RhY2sgdW5kZXJmbG93ICovCiAKIAkJaWYgKHdhbGtfc3RhdGUtPm51bV9vcGVyYW5kcyA9PSAwKSB7CkBAIC01MzgsMTMgKzUzOSwxMyBAQAogc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqYWNwaV9kc19nZXRfY3VycmVudF93YWxrX3N0YXRlKHN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZQogCQkJCQkJICAgICAgICp0aHJlYWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9OQU1FKCJkc19nZXRfY3VycmVudF93YWxrX3N0YXRlIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX2dldF9jdXJyZW50X3dhbGtfc3RhdGUpOwogCiAJaWYgKCF0aHJlYWQpIHsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLCAiQ3VycmVudCB3YWxrX3N0YXRlICVwXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICJDdXJyZW50IFdhbGtTdGF0ZSAlcFxuIiwKIAkJCSAgdGhyZWFkLT53YWxrX3N0YXRlX2xpc3QpKTsKIAogCXJldHVybiAodGhyZWFkLT53YWxrX3N0YXRlX2xpc3QpOwpAQCAtNTY3LDcgKzU2OCw3IEBACiBhY3BpX2RzX3B1c2hfd2Fsa19zdGF0ZShzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlLAogCQkJc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfcHVzaF93YWxrX3N0YXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19wdXNoX3dhbGtfc3RhdGUpOwogCiAJd2Fsa19zdGF0ZS0+bmV4dCA9IHRocmVhZC0+d2Fsa19zdGF0ZV9saXN0OwogCXRocmVhZC0+d2Fsa19zdGF0ZV9saXN0ID0gd2Fsa19zdGF0ZTsKQEAgLTU5MywxMSArNTk0LDEyIEBACiB7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImRzX3BvcF93YWxrX3N0YXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShkc19wb3Bfd2Fsa19zdGF0ZSk7CiAKIAl3YWxrX3N0YXRlID0gdGhyZWFkLT53YWxrX3N0YXRlX2xpc3Q7CiAKIAlpZiAod2Fsa19zdGF0ZSkgeworCiAJCS8qIE5leHQgd2FsayBzdGF0ZSBiZWNvbWVzIHRoZSBjdXJyZW50IHdhbGsgc3RhdGUgKi8KIAogCQl0aHJlYWQtPndhbGtfc3RhdGVfbGlzdCA9IHdhbGtfc3RhdGUtPm5leHQ7CkBAIC02MTgsNyArNjIwLDcgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgb3duZXJfaWQgICAgICAgIC0gSUQgZm9yIG9iamVjdCBjcmVhdGlvbgogICogICAgICAgICAgICAgIE9yaWdpbiAgICAgICAgICAtIFN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIHdhbGsKLSAqICAgICAgICAgICAgICBtdGhfZGVzYyAgICAgICAgLSBNZXRob2Qgb2JqZWN0CisgKiAgICAgICAgICAgICAgbWV0aG9kX2Rlc2MgICAgIC0gTWV0aG9kIG9iamVjdAogICogICAgICAgICAgICAgIFRocmVhZCAgICAgICAgICAtIEN1cnJlbnQgdGhyZWFkIHN0YXRlCiAgKgogICogUkVUVVJOOiAgICAgIFBvaW50ZXIgdG8gdGhlIG5ldyB3YWxrIHN0YXRlLgpAQCAtNjMyLDI0ICs2MzQsMjQgQEAKIAkJCQkJCSAgdW5pb24gYWNwaV9wYXJzZV9vYmplY3QKIAkJCQkJCSAgKm9yaWdpbiwKIAkJCQkJCSAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdAotCQkJCQkJICAqbXRoX2Rlc2MsCisJCQkJCQkgICptZXRob2RfZGVzYywKIAkJCQkJCSAgc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlCiAJCQkJCQkgICp0aHJlYWQpCiB7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJkc19jcmVhdGVfd2Fsa19zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfY3JlYXRlX3dhbGtfc3RhdGUpOwogCi0Jd2Fsa19zdGF0ZSA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSkpOworCXdhbGtfc3RhdGUgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSkpOwogCWlmICghd2Fsa19zdGF0ZSkgewogCQlyZXR1cm5fUFRSKE5VTEwpOwogCX0KIAotCXdhbGtfc3RhdGUtPmRhdGFfdHlwZSA9IEFDUElfREVTQ19UWVBFX1dBTEs7CisJd2Fsa19zdGF0ZS0+ZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfV0FMSzsKKwl3YWxrX3N0YXRlLT5tZXRob2RfZGVzYyA9IG1ldGhvZF9kZXNjOwogCXdhbGtfc3RhdGUtPm93bmVyX2lkID0gb3duZXJfaWQ7CiAJd2Fsa19zdGF0ZS0+b3JpZ2luID0gb3JpZ2luOwotCXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjID0gbXRoX2Rlc2M7CiAJd2Fsa19zdGF0ZS0+dGhyZWFkID0gdGhyZWFkOwogCiAJd2Fsa19zdGF0ZS0+cGFyc2VyX3N0YXRlLnN0YXJ0X29wID0gb3JpZ2luOwpAQCAtNjY0LDcgKzY2Niw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX2RzX3Jlc3VsdF9zdGFja19wdXNoKHdhbGtfc3RhdGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX01FTV9GUkVFKHdhbGtfc3RhdGUpOworCQlBQ1BJX0ZSRUUod2Fsa19zdGF0ZSk7CiAJCXJldHVybl9QVFIoTlVMTCk7CiAJfQogCkBAIC03MDEsMTMgKzcwMywxMyBAQAogCQkgICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGUsCiAJCSAgICAgIHU4ICogYW1sX3N0YXJ0LAogCQkgICAgICB1MzIgYW1sX2xlbmd0aCwKLQkJICAgICAgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8sIHU4IHBhc3NfbnVtYmVyKQorCQkgICAgICBzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvLCB1OCBwYXNzX251bWJlcikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgKnBhcnNlcl9zdGF0ZSA9ICZ3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGU7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKmV4dHJhX29wOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZHNfaW5pdF9hbWxfd2FsayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfaW5pdF9hbWxfd2Fsayk7CiAKIAl3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGUuYW1sID0KIAkgICAgd2Fsa19zdGF0ZS0+cGFyc2VyX3N0YXRlLmFtbF9zdGFydCA9IGFtbF9zdGFydDsKQEAgLTc3OCw2ICs3ODAsNyBAQAogCQl9CiAKIAkJaWYgKHBhcnNlcl9zdGF0ZS0+c3RhcnRfbm9kZSkgeworCiAJCQkvKiBQdXNoIHN0YXJ0IHNjb3BlIG9uIHNjb3BlIHN0YWNrIGFuZCBtYWtlIGl0IGN1cnJlbnQgICovCiAKIAkJCXN0YXR1cyA9CkBAIC04MTAsMjEgKzgxMywyNCBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfZGVsZXRlX3dhbGtfc3RhdGUiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19kZWxldGVfd2Fsa19zdGF0ZSwgd2Fsa19zdGF0ZSk7CiAKIAlpZiAoIXdhbGtfc3RhdGUpIHsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh3YWxrX3N0YXRlLT5kYXRhX3R5cGUgIT0gQUNQSV9ERVNDX1RZUEVfV0FMSykgeworCWlmICh3YWxrX3N0YXRlLT5kZXNjcmlwdG9yX3R5cGUgIT0gQUNQSV9ERVNDX1RZUEVfV0FMSykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiJXAgaXMgbm90IGEgdmFsaWQgd2FsayBzdGF0ZSIsCiAJCQkgICAgd2Fsa19zdGF0ZSkpOwogCQlyZXR1cm47CiAJfQogCisJLyogVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgb3BlbiBzY29wZXMgKi8KKwogCWlmICh3YWxrX3N0YXRlLT5wYXJzZXJfc3RhdGUuc2NvcGUpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIiVwIHdhbGsgc3RpbGwgaGFzIGEgc2NvcGUgbGlzdCIsCiAJCQkgICAgd2Fsa19zdGF0ZSkpOworCQlhY3BpX3BzX2NsZWFudXBfc2NvcGUoJndhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZSk7CiAJfQogCiAJLyogQWx3YXlzIG11c3QgZnJlZSBhbnkgbGlua2VkIGNvbnRyb2wgc3RhdGVzICovCkBAIC04NTQsNyArODYwLDcgQEAKIAkJYWNwaV91dF9kZWxldGVfZ2VuZXJpY19zdGF0ZShzdGF0ZSk7CiAJfQogCi0JQUNQSV9NRU1fRlJFRSh3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZSRUUod2Fsa19zdGF0ZSk7CiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTg3OSw3ICs4ODUsNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX3Jlc3VsdF9pbnNlcnQiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZHNfcmVzdWx0X2luc2VydCk7CiAKIAlzdGF0ZSA9IHdhbGtfc3RhdGUtPnJlc3VsdHM7CiAJaWYgKCFzdGF0ZSkgewpAQCAtOTM3LDcgKzk0Myw3IEBACiB7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfb2JqX3N0YWNrX2RlbGV0ZV9hbGwiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihkc19vYmpfc3RhY2tfZGVsZXRlX2FsbCwgd2Fsa19zdGF0ZSk7CiAKIAkvKiBUaGUgc3RhY2sgc2l6ZSBpcyBjb25maWd1cmFibGUsIGJ1dCBmaXhlZCAqLwogCkBAIC05NjksNyArOTc1LDcgQEAKIGFjcGlfZHNfb2JqX3N0YWNrX3BvcF9vYmplY3QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9iamVjdCwKIAkJCSAgICAgc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImRzX29ial9zdGFja19wb3Bfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX29ial9zdGFja19wb3Bfb2JqZWN0KTsKIAogCS8qIENoZWNrIGZvciBzdGFjayB1bmRlcmZsb3cgKi8KIApAQCAtMTAyNSw3ICsxMDMxLDcgQEAKIHZvaWQgKmFjcGlfZHNfb2JqX3N0YWNrX2dldF92YWx1ZSh1MzIgaW5kZXgsIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZHNfb2JqX3N0YWNrX2dldF92YWx1ZSIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGRzX29ial9zdGFja19nZXRfdmFsdWUsIHdhbGtfc3RhdGUpOwogCiAJLyogQ2FuJ3QgZG8gaXQgaWYgdGhlIHN0YWNrIGlzIGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggZWVlMDg2NC4uYzAzNmUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTc2Myw4ICs3NjMsNyBAQAogCiAJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Y29tbW9uLmdwZV9iaXQsIEFDUElfSVNSKTsKIAotCXN0YXR1cyA9IGFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbihPU0RfUFJJT1JJVFlfR1BFLAotCQkJCQkgICAgIGFjcGlfZWNfZ3BlX3F1ZXJ5LCBlYyk7CisJc3RhdHVzID0gYWNwaV9vc19leGVjdXRlKE9TTF9FQ19QT0xMX0hBTkRMRVIsIGFjcGlfZWNfZ3BlX3F1ZXJ5LCBlYyk7CiAKIAlpZiAoc3RhdHVzID09IEFFX09LKQogCQlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKQEAgLTc5OSw3ICs3OTgsNyBAQAogCiAJaWYgKHZhbHVlICYgQUNQSV9FQ19GTEFHX1NDSSkgewogCQlhdG9taWNfYWRkKDEsICZlYy0+aW50ci5wZW5kaW5nX2dwZSk7Ci0JCXN0YXR1cyA9IGFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbihPU0RfUFJJT1JJVFlfR1BFLAorCQlzdGF0dXMgPSBhY3BpX29zX2V4ZWN1dGUoT1NMX0VDX0JVUlNUX0hBTkRMRVIsCiAJCQkJCQkgICAgIGFjcGlfZWNfZ3BlX3F1ZXJ5LCBlYyk7CiAJCXJldHVybiBzdGF0dXMgPT0gQUVfT0sgPwogCQkgICAgQUNQSV9JTlRFUlJVUFRfSEFORExFRCA6IEFDUElfSU5URVJSVVBUX05PVF9IQU5ETEVEOwpAQCAtOTkxLDcgKzk5MCw2IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9lYyAqZWMgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdWlkOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19hZGQiKTsKIApAQCAtMTAxNCwxMCArMTAxMiw5IEBACiAJYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGVjLT5jb21tb24uaGFuZGxlLCAiX0dMSyIsIE5VTEwsCiAJCQkgICAgICAmZWMtPmNvbW1vbi5nbG9iYWxfbG9jayk7CiAKLQkvKiBJZiBvdXIgVUlEIG1hdGNoZXMgdGhlIFVJRCBmb3IgdGhlIEVDRFQtZW51bWVyYXRlZCBFQywKLQkgICB3ZSBub3cgaGF2ZSB0aGUgKnJlYWwqIEVDIGluZm8sIHNvIGtpbGwgdGhlIG1ha2VzaGlmdCBvbmUuICovCi0JYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGVjLT5jb21tb24uaGFuZGxlLCAiX1VJRCIsIE5VTEwsICZ1aWQpOwotCWlmIChlY19lY2R0ICYmIGVjX2VjZHQtPmNvbW1vbi51aWQgPT0gdWlkKSB7CisJLyogWFhYIHdlIGRvbid0IHRlc3QgdWlkcywgYmVjYXVzZSBvbiBzb21lIGJveGVzIGVjZHQgdWlkID0gMCwgc2VlOgorCSAgIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD02MTExICovCisJaWYgKGVjX2VjZHQpIHsKIAkJYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkJCQkgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKTsKQEAgLTEwNjIsNyArMTA1OSw2IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9lYyAqZWMgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdWlkOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19hZGQiKTsKIApAQCAtMTA4OCwxMCArMTA4NCw5IEBACiAJYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGVjLT5jb21tb24uaGFuZGxlLCAiX0dMSyIsIE5VTEwsCiAJCQkgICAgICAmZWMtPmNvbW1vbi5nbG9iYWxfbG9jayk7CiAKLQkvKiBJZiBvdXIgVUlEIG1hdGNoZXMgdGhlIFVJRCBmb3IgdGhlIEVDRFQtZW51bWVyYXRlZCBFQywKLQkgICB3ZSBub3cgaGF2ZSB0aGUgKnJlYWwqIEVDIGluZm8sIHNvIGtpbGwgdGhlIG1ha2VzaGlmdCBvbmUuICovCi0JYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGVjLT5jb21tb24uaGFuZGxlLCAiX1VJRCIsIE5VTEwsICZ1aWQpOwotCWlmIChlY19lY2R0ICYmIGVjX2VjZHQtPmNvbW1vbi51aWQgPT0gdWlkKSB7CisJLyogWFhYIHdlIGRvbid0IHRlc3QgdWlkcywgYmVjYXVzZSBvbiBzb21lIGJveGVzIGVjZHQgdWlkID0gMCwgc2VlOgorCSAgIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD02MTExICovCisJaWYgKGVjX2VjZHQpIHsKIAkJYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkJCQkgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmV2ZW50LmMKaW5kZXggYzlhYzA1Yy4uOTE5MDM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmV2ZW50LmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmV2ZW50LmMKQEAgLTY4LDcgKzY4LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9pbml0aWFsaXplX2V2ZW50cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5pdGlhbGl6ZV9ldmVudHMpOwogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmUgQUNQSSB0YWJsZXMgKi8KIApAQCAtMTE4LDcgKzExOCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF9mYWR0X2dwZXMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luc3RhbGxfZmFkdF9ncGVzKTsKIAogCS8qIE5hbWVzcGFjZSBtdXN0IGJlIGxvY2tlZCAqLwogCkBAIC0xNTcsNyArMTU3LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9pbnN0YWxsX3hydXB0X2hhbmRsZXJzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbnN0YWxsX3hydXB0X2hhbmRsZXJzKTsKIAogCS8qIEluc3RhbGwgdGhlIFNDSSBoYW5kbGVyICovCiAKQEAgLTI0MSw3ICsyNDEsNyBAQAogCXUzMiBmaXhlZF9lbmFibGU7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJldl9maXhlZF9ldmVudF9kZXRlY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZXZfZml4ZWRfZXZlbnRfZGV0ZWN0KTsKIAogCS8qCiAJICogUmVhZCB0aGUgZml4ZWQgZmVhdHVyZSBzdGF0dXMgYW5kIGVuYWJsZSByZWdpc3RlcnMsIGFzIGFsbCB0aGUgY2FzZXMKQEAgLTI2MCwxMiArMjYwLDE0IEBACiAJICogQ2hlY2sgZm9yIGFsbCBwb3NzaWJsZSBGaXhlZCBFdmVudHMgYW5kIGRpc3BhdGNoIHRob3NlIHRoYXQgYXJlIGFjdGl2ZQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9GSVhFRF9FVkVOVFM7IGkrKykgeworCiAJCS8qIEJvdGggdGhlIHN0YXR1cyBhbmQgZW5hYmxlIGJpdHMgbXVzdCBiZSBvbiBmb3IgdGhpcyBldmVudCAqLwogCiAJCWlmICgoZml4ZWRfc3RhdHVzICYgYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tpXS4KIAkJICAgICBzdGF0dXNfYml0X21hc2spCiAJCSAgICAmJiAoZml4ZWRfZW5hYmxlICYgYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tpXS4KIAkJCWVuYWJsZV9iaXRfbWFzaykpIHsKKwogCQkJLyogRm91bmQgYW4gYWN0aXZlIChzaWduYWxsZWQpIGV2ZW50ICovCiAKIAkJCWludF9zdGF0dXMgfD0gYWNwaV9ldl9maXhlZF9ldmVudF9kaXNwYXRjaCgodTMyKSBpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGUuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGUuYwppbmRleCBmNjRmOTc3Li5mMDFkMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jCkBAIC02OSw3ICs2OSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfc2V0X2dwZV90eXBlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9zZXRfZ3BlX3R5cGUpOwogCiAJLyogVmFsaWRhdGUgdHlwZSBhbmQgdXBkYXRlIHJlZ2lzdGVyIGVuYWJsZSBtYXNrcyAqLwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAqZ3BlX3JlZ2lzdGVyX2luZm87CiAJdTggcmVnaXN0ZXJfYml0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKTsKIAogCWdwZV9yZWdpc3Rlcl9pbmZvID0gZ3BlX2V2ZW50X2luZm8tPnJlZ2lzdGVyX2luZm87CiAJaWYgKCFncGVfcmVnaXN0ZXJfaW5mbykgewpAQCAtMTc4LDcgKzE3OCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfZW5hYmxlX2dwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZW5hYmxlX2dwZSk7CiAKIAkvKiBNYWtlIHN1cmUgSFcgZW5hYmxlIG1hc2tzIGFyZSB1cGRhdGVkICovCiAKQEAgLTIwNyw2ICsyMDcsNyBAQAogCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7CiAKIAkJaWYgKHdyaXRlX3RvX2hhcmR3YXJlKSB7CisKIAkJCS8qIENsZWFyIHRoZSBHUEUgKG9mIHN0YWxlIGV2ZW50cyksIHRoZW4gZW5hYmxlIGl0ICovCiAKIAkJCXN0YXR1cyA9IGFjcGlfaHdfY2xlYXJfZ3BlKGdwZV9ldmVudF9pbmZvKTsKQEAgLTI0Myw3ICsyNDQsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2Rpc2FibGVfZ3BlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9kaXNhYmxlX2dwZSk7CiAKIAlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9FTkFCTEVfTUFTSykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTMxMyw2ICszMTQsNyBAQAogCS8qIEEgTlVMTCBncGVfYmxvY2sgbWVhbnMgdXNlIHRoZSBGQURULWRlZmluZWQgR1BFIGJsb2NrKHMpICovCiAKIAlpZiAoIWdwZV9kZXZpY2UpIHsKKwogCQkvKiBFeGFtaW5lIEdQRSBCbG9jayAwIGFuZCAxIChUaGVzZSBibG9ja3MgYXJlIHBlcm1hbmVudCkgKi8KIAogCQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9NQVhfR1BFX0JMT0NLUzsgaSsrKSB7CkBAIC0zODAsMTAgKzM4MiwxMSBAQAogCXUzMiBzdGF0dXNfcmVnOwogCXUzMiBlbmFibGVfcmVnOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOworCWFjcGlfY3B1X2ZsYWdzIGh3X2ZsYWdzOwogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAlhY3BpX25hdGl2ZV91aW50IGo7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImV2X2dwZV9kZXRlY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZXZfZ3BlX2RldGVjdCk7CiAKIAkvKiBDaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG5vIEdQRXMgKi8KIApAQCAtMzkxLDkgKzM5NCwxMiBAQAogCQlyZXR1cm4gKGludF9zdGF0dXMpOwogCX0KIAotCS8qIEV4YW1pbmUgYWxsIEdQRSBibG9ja3MgYXR0YWNoZWQgdG8gdGhpcyBpbnRlcnJ1cHQgbGV2ZWwgKi8KKwkvKiBXZSBuZWVkIHRvIGhvbGQgdGhlIEdQRSBsb2NrIG5vdywgaGFyZHdhcmUgbG9jayBpbiB0aGUgbG9vcCAqLwogCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CisKKwkvKiBFeGFtaW5lIGFsbCBHUEUgYmxvY2tzIGF0dGFjaGVkIHRvIHRoaXMgaW50ZXJydXB0IGxldmVsICovCisKIAlncGVfYmxvY2sgPSBncGVfeHJ1cHRfbGlzdC0+Z3BlX2Jsb2NrX2xpc3RfaGVhZDsKIAl3aGlsZSAoZ3BlX2Jsb2NrKSB7CiAJCS8qCkBAIC00MDIsMTAgKzQwOCwxMyBAQAogCQkgKiBGaW5kIGFsbCBjdXJyZW50bHkgYWN0aXZlIEdQIGV2ZW50cy4KIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50OyBpKyspIHsKKwogCQkJLyogR2V0IHRoZSBuZXh0IHN0YXR1cy9lbmFibGUgcGFpciAqLwogCiAJCQlncGVfcmVnaXN0ZXJfaW5mbyA9ICZncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV07CiAKKwkJCWh3X2ZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CisKIAkJCS8qIFJlYWQgdGhlIFN0YXR1cyBSZWdpc3RlciAqLwogCiAJCQlzdGF0dXMgPQpAQCAtNDE0LDYgKzQyMyw4IEBACiAJCQkJCQkgICAmZ3BlX3JlZ2lzdGVyX2luZm8tPgogCQkJCQkJICAgc3RhdHVzX2FkZHJlc3MpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jaywKKwkJCQkJCSAgICAgaHdfZmxhZ3MpOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQogCkBAIC00MjQsNiArNDM1LDggQEAKIAkJCQkJCSAgICZlbmFibGVfcmVnLAogCQkJCQkJICAgJmdwZV9yZWdpc3Rlcl9pbmZvLT4KIAkJCQkJCSAgIGVuYWJsZV9hZGRyZXNzKTsKKwkJCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2ssIGh3X2ZsYWdzKTsKKwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CkBAIC00MzcsNiArNDUwLDcgQEAKIAogCQkJZW5hYmxlZF9zdGF0dXNfYnl0ZSA9ICh1OCkgKHN0YXR1c19yZWcgJiBlbmFibGVfcmVnKTsKIAkJCWlmICghZW5hYmxlZF9zdGF0dXNfYnl0ZSkgeworCiAJCQkJLyogTm8gYWN0aXZlIEdQRXMgaW4gdGhpcyByZWdpc3RlciwgbW92ZSBvbiAqLwogCiAJCQkJY29udGludWU7CkBAIC00NDUsNiArNDU5LDcgQEAKIAkJCS8qIE5vdyBsb29rIGF0IHRoZSBpbmRpdmlkdWFsIEdQRXMgaW4gdGhpcyBieXRlIHJlZ2lzdGVyICovCiAKIAkJCWZvciAoaiA9IDA7IGogPCBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSDsgaisrKSB7CisKIAkJCQkvKiBFeGFtaW5lIG9uZSBHUEUgYml0ICovCiAKIAkJCQlpZiAoZW5hYmxlZF9zdGF0dXNfYnl0ZSAmCkBAIC00ODMsOSArNDk4LDkgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBQZXJmb3JtIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIGEgR1BFIGNvbnRyb2wgbWV0aG9kLiAgVGhpcwotICogICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludm9jYXRpb24gb2YgYWNwaV9vc19xdWV1ZV9mb3JfZXhlY3V0aW9uCi0gKiAgICAgICAgICAgICAgKGFuZCB0aGVyZWZvcmUgZG9lcyBOT1QgZXhlY3V0ZSBhdCBpbnRlcnJ1cHQgbGV2ZWwpIHNvIHRoYXQKKyAqIERFU0NSSVBUSU9OOiBQZXJmb3JtIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIGEgR1BFIGNvbnRyb2wgbWV0aG9kLiBUaGlzCisgKiAgICAgICAgICAgICAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW52b2NhdGlvbiBvZiBhY3BpX29zX2V4ZWN1dGUgYW5kCisgKiAgICAgICAgICAgICAgdGhlcmVmb3JlIGRvZXMgTk9UIGV4ZWN1dGUgYXQgaW50ZXJydXB0IGxldmVsIC0gc28gdGhhdAogICogICAgICAgICAgICAgIHRoZSBjb250cm9sIG1ldGhvZCBpdHNlbGYgaXMgbm90IGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mCiAgKiAgICAgICAgICAgICAgYW4gaW50ZXJydXB0IGhhbmRsZXIuCiAgKgpAQCAtNDk0LDEyICs1MDksMTEgQEAKIHN0YXRpYyB2b2lkIEFDUElfU1lTVEVNX1hGQUNFIGFjcGlfZXZfYXN5bmNoX2V4ZWN1dGVfZ3BlX21ldGhvZCh2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyA9ICh2b2lkICopY29udGV4dDsKLQl1MzIgZ3BlX251bWJlciA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvIGxvY2FsX2dwZV9ldmVudF9pbmZvOwotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2QpOwogCiAJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC01MzUsMjIgKzU0OSwzNSBAQAogCSAqLwogCWlmICgobG9jYWxfZ3BlX2V2ZW50X2luZm8uZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQogCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpIHsKLQkJLyoKLQkJICogSW52b2tlIHRoZSBHUEUgTWV0aG9kIChfTHh4LCBfRXh4KSBpLmUuLCBldmFsdWF0ZSB0aGUgX0x4eC9fRXh4Ci0JCSAqIGNvbnRyb2wgbWV0aG9kIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyBHUEUKLQkJICovCi0JCWluZm8ubm9kZSA9IGxvY2FsX2dwZV9ldmVudF9pbmZvLmRpc3BhdGNoLm1ldGhvZF9ub2RlOwotCQlpbmZvLnBhcmFtZXRlcnMgPQotCQkgICAgQUNQSV9DQVNUX1BUUih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICosIGdwZV9ldmVudF9pbmZvKTsKLQkJaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fR1BFOwogCi0JCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKCZpbmZvKTsKKwkJLyogQWxsb2NhdGUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KKworCQlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwkJaWYgKCFpbmZvKSB7CisJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSW52b2tlIHRoZSBHUEUgTWV0aG9kIChfTHh4LCBfRXh4KSBpLmUuLCBldmFsdWF0ZSB0aGUgX0x4eC9fRXh4CisJCQkgKiBjb250cm9sIG1ldGhvZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgR1BFCisJCQkgKi8KKwkJCWluZm8tPnByZWZpeF9ub2RlID0KKwkJCSAgICBsb2NhbF9ncGVfZXZlbnRfaW5mby5kaXNwYXRjaC5tZXRob2Rfbm9kZTsKKwkJCWluZm8tPnBhcmFtZXRlcnMgPQorCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqLAorCQkJCQkgIGdwZV9ldmVudF9pbmZvKTsKKwkJCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9HUEU7CisJCQlpbmZvLT5mbGFncyA9IEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRTsKKworCQkJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKKwkJCUFDUElfRlJFRShpbmZvKTsKKwkJfQorCiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKLQkJCQkJIldoaWxlIGV2YWx1YXRpbmcgbWV0aG9kIFslNC40c10gZm9yIEdQRVslMlhdIiwKKwkJCQkJIldoaWxlIGV2YWx1YXRpbmcgR1BFIG1ldGhvZCBbJTQuNHNdIiwKIAkJCQkJYWNwaV91dF9nZXRfbm9kZV9uYW1lCiAJCQkJCShsb2NhbF9ncGVfZXZlbnRfaW5mby5kaXNwYXRjaC4KLQkJCQkJIG1ldGhvZF9ub2RlKSwgZ3BlX251bWJlcikpOworCQkJCQkgbWV0aG9kX25vZGUpKSk7CiAJCX0KIAl9CiAKQEAgLTU5Myw3ICs2MjAsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2dwZV9kaXNwYXRjaCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZ3BlX2Rpc3BhdGNoKTsKIAogCS8qCiAJICogSWYgZWRnZS10cmlnZ2VyZWQsIGNsZWFyIHRoZSBHUEUgc3RhdHVzIGJpdCBub3cuICBOb3RlIHRoYXQKQEAgLTY2OSw5ICs2OTYsOSBAQAogCQkgKiBFeGVjdXRlIHRoZSBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoZSBHUEUKIAkJICogTk9URTogTGV2ZWwtdHJpZ2dlcmVkIEdQRXMgYXJlIGNsZWFyZWQgYWZ0ZXIgdGhlIG1ldGhvZCBjb21wbGV0ZXMuCiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX29zX3F1ZXVlX2Zvcl9leGVjdXRpb24oT1NEX1BSSU9SSVRZX0dQRSwKLQkJCQkJCSAgICAgYWNwaV9ldl9hc3luY2hfZXhlY3V0ZV9ncGVfbWV0aG9kLAotCQkJCQkJICAgICBncGVfZXZlbnRfaW5mbyk7CisJCXN0YXR1cyA9IGFjcGlfb3NfZXhlY3V0ZShPU0xfR1BFX0hBTkRMRVIsCisJCQkJCSBhY3BpX2V2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2QsCisJCQkJCSBncGVfZXZlbnRfaW5mbyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKIAkJCQkJIlVuYWJsZSB0byBxdWV1ZSBoYW5kbGVyIGZvciBHUEVbJTJYXSAtIGV2ZW50IGRpc2FibGVkIiwKQEAgLTcxNiw3ICs3NDMsNyBAQAogICoKICAqIERFU0NSSVBUSU9OOiBEZXRlcm1pbmUgaWYgYSBhIEdQRSBpcyAid2FrZS1vbmx5Ii4KICAqCi0gKiAgICAgICAgICAgICAgQ2FsbGVkIGZyb20gTm90aWZ5KCkgY29kZSBpbiBpbnRlcnByZXRlciB3aGVuIGEgImRldmljZV93YWtlIgorICogICAgICAgICAgICAgIENhbGxlZCBmcm9tIE5vdGlmeSgpIGNvZGUgaW4gaW50ZXJwcmV0ZXIgd2hlbiBhICJEZXZpY2VXYWtlIgogICogICAgICAgICAgICAgIE5vdGlmeSBjb21lcyBpbi4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzI2LDcgKzc1Myw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfY2hlY2tfZm9yX3dha2Vfb25seV9ncGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2NoZWNrX2Zvcl93YWtlX29ubHlfZ3BlKTsKIAogCWlmICgoZ3BlX2V2ZW50X2luZm8pICYmCS8qIE9ubHkgPjAgZm9yIF9MeHgvX0V4eCAqLwogCSAgICAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1NZU1RFTV9NQVNLKSA9PSBBQ1BJX0dQRV9TWVNURU1fUlVOTklORykpIHsJLyogU3lzdGVtIHN0YXRlIGF0IEdQRSB0aW1lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlYmxrLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlYmxrLmMKaW5kZXggMGZkMDBiNS4uOTVkZGViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZWJsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGVibGsuYwpAQCAtMTMxLDE0ICsxMzEsMTQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1hY3BpX3N0YXR1cyBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoQUNQSV9HUEVfQ0FMTEJBQ0sgZ3BlX3dhbGtfY2FsbGJhY2spCithY3BpX3N0YXR1cyBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9ncGVfY2FsbGJhY2sgZ3BlX3dhbGtfY2FsbGJhY2spCiB7CiAJc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gKmdwZV9ibG9jazsKIAlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqZ3BlX3hydXB0X2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl93YWxrX2dwZV9saXN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl93YWxrX2dwZV9saXN0KTsKIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCkBAIC0xNDYsMTAgKzE0NiwxMiBAQAogCiAJZ3BlX3hydXB0X2luZm8gPSBhY3BpX2dibF9ncGVfeHJ1cHRfbGlzdF9oZWFkOwogCXdoaWxlIChncGVfeHJ1cHRfaW5mbykgeworCiAJCS8qIFdhbGsgYWxsIEdwZSBCbG9ja3MgYXR0YWNoZWQgdG8gdGhpcyBpbnRlcnJ1cHQgbGV2ZWwgKi8KIAogCQlncGVfYmxvY2sgPSBncGVfeHJ1cHRfaW5mby0+Z3BlX2Jsb2NrX2xpc3RfaGVhZDsKIAkJd2hpbGUgKGdwZV9ibG9jaykgeworCiAJCQkvKiBPbmUgY2FsbGJhY2sgcGVyIEdQRSBibG9jayAqLwogCiAJCQlzdGF0dXMgPSBncGVfd2Fsa19jYWxsYmFjayhncGVfeHJ1cHRfaW5mbywgZ3BlX2Jsb2NrKTsKQEAgLTE5MCwxMSArMTkyLDEyIEBACiAJYWNwaV9uYXRpdmVfdWludCBpOwogCWFjcGlfbmF0aXZlX3VpbnQgajsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2RlbGV0ZV9ncGVfaGFuZGxlcnMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2RlbGV0ZV9ncGVfaGFuZGxlcnMpOwogCiAJLyogRXhhbWluZSBlYWNoIEdQRSBSZWdpc3RlciB3aXRoaW4gdGhlIGJsb2NrICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CisKIAkJLyogTm93IGxvb2sgYXQgdGhlIGluZGl2aWR1YWwgR1BFcyBpbiB0aGlzIGJ5dGUgcmVnaXN0ZXIgKi8KIAogCQlmb3IgKGogPSAwOyBqIDwgQUNQSV9HUEVfUkVHSVNURVJfV0lEVEg7IGorKykgewpAQCAtMjA0LDcgKzIwNyw3IEBACiAKIAkJCWlmICgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KIAkJCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSKSB7Ci0JCQkJQUNQSV9NRU1fRlJFRShncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guaGFuZGxlcik7CisJCQkJQUNQSV9GUkVFKGdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5oYW5kbGVyKTsKIAkJCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guaGFuZGxlciA9IE5VTEw7CiAJCQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9CiAJCQkJICAgIH5BQ1BJX0dQRV9ESVNQQVRDSF9NQVNLOwpAQCAtMjQ4LDcgKzI1MSw3IEBACiAJdTggdHlwZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9zYXZlX21ldGhvZF9pbmZvIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9zYXZlX21ldGhvZF9pbmZvKTsKIAogCS8qCiAJICogX0x4eCBhbmQgX0V4eCBHUEUgbWV0aG9kIHN1cHBvcnQKQEAgLTI3OSw5ICsyODIsOSBAQAogCWRlZmF1bHQ6CiAJCS8qIFVua25vd24gbWV0aG9kIHR5cGUsIGp1c3QgaWdub3JlIGl0ISAqLwogCi0JCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIlVua25vd24gR1BFIG1ldGhvZCB0eXBlOiAlcyAobmFtZSBub3Qgb2YgZm9ybSBfTHh4IG9yIF9FeHgpIiwKLQkJCSAgICBuYW1lKSk7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKKwkJCQkgICJJZ25vcmluZyB1bmtub3duIEdQRSBtZXRob2QgdHlwZTogJXMgKG5hbWUgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCisJCQkJICBuYW1lKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJfQogCkBAIC0yODksMTEgKzI5MiwxMiBAQAogCiAJZ3BlX251bWJlciA9IEFDUElfU1RSVE9VTCgmbmFtZVsyXSwgTlVMTCwgMTYpOwogCWlmIChncGVfbnVtYmVyID09IEFDUElfVUlOVDMyX01BWCkgeworCiAJCS8qIENvbnZlcnNpb24gZmFpbGVkOyBpbnZhbGlkIG1ldGhvZCwganVzdCBpZ25vcmUgaXQgKi8KIAotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJDb3VsZCBub3QgZXh0cmFjdCBHUEUgbnVtYmVyIGZyb20gbmFtZTogJXMgKG5hbWUgaXMgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCi0JCQkgICAgbmFtZSkpOworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0xPQUQsCisJCQkJICAiQ291bGQgbm90IGV4dHJhY3QgR1BFIG51bWJlciBmcm9tIG5hbWU6ICVzIChuYW1lIGlzIG5vdCBvZiBmb3JtIF9MeHggb3IgX0V4eCkiLAorCQkJCSAgbmFtZSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApAQCAtMzY0LDEzICszNjgsMTQgQEAKIAl1MzIgZ3BlX251bWJlcjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9tYXRjaF9wcndfYW5kX2dwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfbWF0Y2hfcHJ3X2FuZF9ncGUpOwogCiAJLyogQ2hlY2sgZm9yIGEgX1BSVyBtZXRob2QgdW5kZXIgdGhpcyBkZXZpY2UgKi8KIAogCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KG9ial9oYW5kbGUsIE1FVEhPRF9OQU1FX19QUlcsCiAJCQkJCSBBQ1BJX0JUWVBFX1BBQ0tBR0UsICZwa2dfZGVzYyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJLyogSWdub3JlIGFsbCBlcnJvcnMgZnJvbSBfUFJXLCB3ZSBkb24ndCB3YW50IHRvIGFib3J0IHRoZSBzdWJzeXN0ZW0gKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMzk0LDYgKzM5OSw3IEBACiAJb2JqX2Rlc2MgPSBwa2dfZGVzYy0+cGFja2FnZS5lbGVtZW50c1swXTsKIAogCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwogCQkvKiBVc2UgRkFEVC1kZWZpbmVkIEdQRSBkZXZpY2UgKGZyb20gZGVmaW5pdGlvbiBvZiBfUFJXKSAqLwogCiAJCXRhcmdldF9ncGVfZGV2aWNlID0gYWNwaV9nYmxfZmFkdF9ncGVfZGV2aWNlOwpAQCAtNDAyLDYgKzQwOCw3IEBACiAKIAkJZ3BlX251bWJlciA9ICh1MzIpIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlOwogCX0gZWxzZSBpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisKIAkJLyogUGFja2FnZSBjb250YWlucyBhIEdQRSByZWZlcmVuY2UgYW5kIEdQRSBudW1iZXIgd2l0aGluIGEgR1BFIGJsb2NrICovCiAKIAkJaWYgKChvYmpfZGVzYy0+cGFja2FnZS5jb3VudCA8IDIpIHx8CkBAIC00ODIsNyArNDg5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9nZXRfZ3BlX3hydXB0X2Jsb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9nZXRfZ3BlX3hydXB0X2Jsb2NrKTsKIAogCS8qIE5vIG5lZWQgZm9yIGxvY2sgc2luY2Ugd2UgYXJlIG5vdCBjaGFuZ2luZyBhbnkgbGlzdCBlbGVtZW50cyBoZXJlICovCiAKQEAgLTQ5Nyw3ICs1MDQsNyBAQAogCiAJLyogTm90IGZvdW5kLCBtdXN0IGFsbG9jYXRlIGEgbmV3IHhydXB0IGRlc2NyaXB0b3IgKi8KIAotCWdwZV94cnVwdCA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8pKTsKKwlncGVfeHJ1cHQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8pKTsKIAlpZiAoIWdwZV94cnVwdCkgewogCQlyZXR1cm5fUFRSKE5VTEwpOwogCX0KQEAgLTU1Niw3ICs1NjMsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2RlbGV0ZV9ncGVfeHJ1cHQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2RlbGV0ZV9ncGVfeHJ1cHQpOwogCiAJLyogV2UgbmV2ZXIgd2FudCB0byByZW1vdmUgdGhlIFNDSSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCkBAIC01ODgsNyArNTk1LDcgQEAKIAogCS8qIEZyZWUgdGhlIGJsb2NrICovCiAKLQlBQ1BJX01FTV9GUkVFKGdwZV94cnVwdCk7CisJQUNQSV9GUkVFKGdwZV94cnVwdCk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIApAQCAtNjE0LDcgKzYyMSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF9ncGVfYmxvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luc3RhbGxfZ3BlX2Jsb2NrKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtNjY3LDcgKzY3NCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF9ncGVfYmxvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luc3RhbGxfZ3BlX2Jsb2NrKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtNjc5LDYgKzY4Niw3IEBACiAJc3RhdHVzID0gYWNwaV9od19kaXNhYmxlX2dwZV9ibG9jayhncGVfYmxvY2stPnhydXB0X2Jsb2NrLCBncGVfYmxvY2spOwogCiAJaWYgKCFncGVfYmxvY2stPnByZXZpb3VzICYmICFncGVfYmxvY2stPm5leHQpIHsKKwogCQkvKiBUaGlzIGlzIHRoZSBsYXN0IGdwZV9ibG9jayBvbiB0aGlzIGludGVycnVwdCAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXZfZGVsZXRlX2dwZV94cnVwdChncGVfYmxvY2stPnhydXB0X2Jsb2NrKTsKQEAgLTcwNCw5ICs3MTIsOSBAQAogCiAJLyogRnJlZSB0aGUgZ3BlX2Jsb2NrICovCiAKLQlBQ1BJX01FTV9GUkVFKGdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mbyk7Ci0JQUNQSV9NRU1fRlJFRShncGVfYmxvY2stPmV2ZW50X2luZm8pOwotCUFDUElfTUVNX0ZSRUUoZ3BlX2Jsb2NrKTsKKwlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvKTsKKwlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrLT5ldmVudF9pbmZvKTsKKwlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrKTsKIAogICAgICAgdW5sb2NrX2FuZF9leGl0OgogCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwpAQCAtNzM2LDE3ICs3NDQsMTcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGo7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfY3JlYXRlX2dwZV9pbmZvX2Jsb2NrcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfY3JlYXRlX2dwZV9pbmZvX2Jsb2Nrcyk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgR1BFIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGJsb2NrICovCiAKLQlncGVfcmVnaXN0ZXJfaW5mbyA9IEFDUElfTUVNX0NBTExPQ0FURSgoYWNwaV9zaXplKSBncGVfYmxvY2stPgotCQkJCQkgICAgICAgcmVnaXN0ZXJfY291bnQgKgotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdAotCQkJCQkJICAgICAgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbykpOworCWdwZV9yZWdpc3Rlcl9pbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKGFjcGlfc2l6ZSkgZ3BlX2Jsb2NrLT4KKwkJCQkJCSByZWdpc3Rlcl9jb3VudCAqCisJCQkJCQkgc2l6ZW9mKHN0cnVjdAorCQkJCQkJCWFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8pKTsKIAlpZiAoIWdwZV9yZWdpc3Rlcl9pbmZvKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0aGUgZ3BlX3JlZ2lzdGVyX2luZm8gdGFibGUiKSk7CisJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0aGUgR3BlUmVnaXN0ZXJJbmZvIHRhYmxlIikpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKQEAgLTc1NCwxMyArNzYyLDE0IEBACiAJICogQWxsb2NhdGUgdGhlIEdQRSBldmVudF9pbmZvIGJsb2NrLiBUaGVyZSBhcmUgZWlnaHQgZGlzdGluY3QgR1BFcwogCSAqIHBlciByZWdpc3Rlci4gSW5pdGlhbGl6YXRpb24gdG8gemVyb3MgaXMgc3VmZmljaWVudC4KIAkgKi8KLQlncGVfZXZlbnRfaW5mbyA9IEFDUElfTUVNX0NBTExPQ0FURSgoKGFjcGlfc2l6ZSkgZ3BlX2Jsb2NrLT4KLQkJCQkJICAgICByZWdpc3Rlcl9jb3VudCAqCi0JCQkJCSAgICAgQUNQSV9HUEVfUkVHSVNURVJfV0lEVEgpICoKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbykpOworCWdwZV9ldmVudF9pbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKChhY3BpX3NpemUpIGdwZV9ibG9jay0+CisJCQkJCSAgICAgICByZWdpc3Rlcl9jb3VudCAqCisJCQkJCSAgICAgICBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSCkgKgorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0CisJCQkJCQkgICAgIGFjcGlfZ3BlX2V2ZW50X2luZm8pKTsKIAlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0aGUgZ3BlX2V2ZW50X2luZm8gdGFibGUiKSk7CisJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0aGUgR3BlRXZlbnRJbmZvIHRhYmxlIikpOwogCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCWdvdG8gZXJyb3JfZXhpdDsKIAl9CkBAIC03ODAsNiArNzg5LDcgQEAKIAl0aGlzX2V2ZW50ID0gZ3BlX2V2ZW50X2luZm87CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CisKIAkJLyogSW5pdCB0aGUgcmVnaXN0ZXJfaW5mbyBmb3IgdGhpcyBHUEUgcmVnaXN0ZXIgKDggR1BFcykgKi8KIAogCQl0aGlzX3JlZ2lzdGVyLT5iYXNlX2dwZV9udW1iZXIgPQpAQCAtODM5LDEwICs4NDksMTAgQEAKIAogICAgICAgZXJyb3JfZXhpdDoKIAlpZiAoZ3BlX3JlZ2lzdGVyX2luZm8pIHsKLQkJQUNQSV9NRU1fRlJFRShncGVfcmVnaXN0ZXJfaW5mbyk7CisJCUFDUElfRlJFRShncGVfcmVnaXN0ZXJfaW5mbyk7CiAJfQogCWlmIChncGVfZXZlbnRfaW5mbykgewotCQlBQ1BJX01FTV9GUkVFKGdwZV9ldmVudF9pbmZvKTsKKwkJQUNQSV9GUkVFKGdwZV9ldmVudF9pbmZvKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTg3OCw3ICs4ODgsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfY3JlYXRlX2dwZV9ibG9jayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfY3JlYXRlX2dwZV9ibG9jayk7CiAKIAlpZiAoIXJlZ2lzdGVyX2NvdW50KSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC04ODYsNyArODk2LDcgQEAKIAogCS8qIEFsbG9jYXRlIGEgbmV3IEdQRSBibG9jayAqLwogCi0JZ3BlX2Jsb2NrID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbykpOworCWdwZV9ibG9jayA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbykpOwogCWlmICghZ3BlX2Jsb2NrKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTkwNiw3ICs5MTYsNyBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfZXZfY3JlYXRlX2dwZV9pbmZvX2Jsb2NrcyhncGVfYmxvY2spOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX01FTV9GUkVFKGdwZV9ibG9jayk7CisJCUFDUElfRlJFRShncGVfYmxvY2spOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKQEAgLTkxNCw3ICs5MjQsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9ldl9pbnN0YWxsX2dwZV9ibG9jayhncGVfYmxvY2ssIGludGVycnVwdF9udW1iZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX01FTV9GUkVFKGdwZV9ibG9jayk7CisJCUFDUElfRlJFRShncGVfYmxvY2spOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKQEAgLTk3MSw3ICs5ODEsNyBAQAogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAlhY3BpX25hdGl2ZV91aW50IGo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9pbml0aWFsaXplX2dwZV9ibG9jayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5pdGlhbGl6ZV9ncGVfYmxvY2spOwogCiAJLyogSWdub3JlIGEgbnVsbCBHUEUgYmxvY2sgKGUuZy4sIGlmIG5vIEdQRSBibG9jayAxIGV4aXN0cykgKi8KIApAQCAtMTAxMyw2ICsxMDIzLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50OyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCiAJCQkvKiBHZXQgdGhlIGluZm8gYmxvY2sgZm9yIHRoaXMgcGFydGljdWxhciBHUEUgKi8KIAogCQkJZ3BlX2V2ZW50X2luZm8gPQpAQCAtMTA0MCw3ICsxMDUxLDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfaHdfZW5hYmxlX3J1bnRpbWVfZ3BlX2Jsb2NrKE5VTEwsIGdwZV9ibG9jayk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgZW5hYmxlIEdQRXMgaW4gZ3BlX2Jsb2NrICVwIiwKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkNvdWxkIG5vdCBlbmFibGUgR1BFcyBpbiBHcGVCbG9jayAlcCIsCiAJCQkgICAgZ3BlX2Jsb2NrKSk7CiAJfQogCkBAIC0xMDY2LDcgKzEwNzcsNyBAQAogCXUzMiBncGVfbnVtYmVyX21heCA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfZ3BlX2luaXRpYWxpemUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2dwZV9pbml0aWFsaXplKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMTA5OSw2ICsxMTEwLDcgQEAKIAkgKiBwYXJ0aWN1bGFyIGJsb2NrIGlzIG5vdCBzdXBwb3J0ZWQuCiAJICovCiAJaWYgKGFjcGlfZ2JsX0ZBRFQtPmdwZTBfYmxrX2xlbiAmJiBhY3BpX2dibF9GQURULT54Z3BlMF9ibGsuYWRkcmVzcykgeworCiAJCS8qIEdQRSBibG9jayAwIGV4aXN0cyAoaGFzIGJvdGggbGVuZ3RoIGFuZCBhZGRyZXNzID4gMCkgKi8KIAogCQlyZWdpc3Rlcl9jb3VudDAgPSAodTE2KSAoYWNwaV9nYmxfRkFEVC0+Z3BlMF9ibGtfbGVuIC8gMik7CkBAIC0xMTIxLDYgKzExMzMsNyBAQAogCX0KIAogCWlmIChhY3BpX2dibF9GQURULT5ncGUxX2Jsa19sZW4gJiYgYWNwaV9nYmxfRkFEVC0+eGdwZTFfYmxrLmFkZHJlc3MpIHsKKwogCQkvKiBHUEUgYmxvY2sgMSBleGlzdHMgKGhhcyBib3RoIGxlbmd0aCBhbmQgYWRkcmVzcyA+IDApICovCiAKIAkJcmVnaXN0ZXJfY291bnQxID0gKHUxNikgKGFjcGlfZ2JsX0ZBRFQtPmdwZTFfYmxrX2xlbiAvIDIpOwpAQCAtMTE2OCw2ICsxMTgxLDcgQEAKIAkvKiBFeGl0IGlmIHRoZXJlIGFyZSBubyBHUEUgcmVnaXN0ZXJzICovCiAKIAlpZiAoKHJlZ2lzdGVyX2NvdW50MCArIHJlZ2lzdGVyX2NvdW50MSkgPT0gMCkgeworCiAJCS8qIEdQRXMgYXJlIG5vdCByZXF1aXJlZCBieSBBQ1BJLCB0aGlzIGlzIE9LICovCiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTklULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMKaW5kZXggMDkwOWJhNi4uNmVlZjRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2bWlzYy5jCkBAIC00OSwxMiArNDksMTMgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0VWRU5UUwogQUNQSV9NT0RVTEVfTkFNRSgiZXZtaXNjIikKIAorLyogTmFtZXMgZm9yIE5vdGlmeSgpIHZhbHVlcywgdXNlZCBmb3IgZGVidWcgb3V0cHV0ICovCiAjaWZkZWYgQUNQSV9ERUJVR19PVVRQVVQKIHN0YXRpYyBjb25zdCBjaGFyICphY3BpX25vdGlmeV92YWx1ZV9uYW1lc1tdID0gewogCSJCdXMgQ2hlY2siLAogCSJEZXZpY2UgQ2hlY2siLAogCSJEZXZpY2UgV2FrZSIsCi0JIkVqZWN0IHJlcXVlc3QiLAorCSJFamVjdCBSZXF1ZXN0IiwKIAkiRGV2aWNlIENoZWNrIExpZ2h0IiwKIAkiRnJlcXVlbmN5IE1pc21hdGNoIiwKIAkiQnVzIE1vZGUgTWlzbWF0Y2giLApAQCAtMTI0LDcgKzEyNSw3IEBACiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpub3RpZnlfaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZXZfcXVldWVfbm90aWZ5X3JlcXVlc3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoZXZfcXVldWVfbm90aWZ5X3JlcXVlc3QpOwogCiAJLyoKIAkgKiBGb3IgdmFsdWUgMyAoRWplY3Rpb24gUmVxdWVzdCksIHNvbWUgZGV2aWNlIG1ldGhvZCBtYXkgbmVlZCB0byBiZSBydW4uCkBAIC0xNTAsNiArMTUxLDcgQEAKIAogCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCWlmIChvYmpfZGVzYykgeworCiAJCS8qIFdlIGhhdmUgdGhlIG5vdGlmeSBvYmplY3QsIEdldCB0aGUgcmlnaHQgaGFuZGxlciAqLwogCiAJCXN3aXRjaCAobm9kZS0+dHlwZSkgewpAQCAtMTg0LDE0ICsxODYsMTUgQEAKIAkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKIAkJfQogCi0JCW5vdGlmeV9pbmZvLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfTk9USUZZOworCQlub3RpZnlfaW5mby0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9CisJCSAgICBBQ1BJX0RFU0NfVFlQRV9TVEFURV9OT1RJRlk7CiAJCW5vdGlmeV9pbmZvLT5ub3RpZnkubm9kZSA9IG5vZGU7CiAJCW5vdGlmeV9pbmZvLT5ub3RpZnkudmFsdWUgPSAodTE2KSBub3RpZnlfdmFsdWU7CiAJCW5vdGlmeV9pbmZvLT5ub3RpZnkuaGFuZGxlcl9vYmogPSBoYW5kbGVyX29iajsKIAotCQlzdGF0dXMgPSBhY3BpX29zX3F1ZXVlX2Zvcl9leGVjdXRpb24oT1NEX1BSSU9SSVRZX0hJR0gsCi0JCQkJCQkgICAgIGFjcGlfZXZfbm90aWZ5X2Rpc3BhdGNoLAotCQkJCQkJICAgICBub3RpZnlfaW5mbyk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX29zX2V4ZWN1dGUoT1NMX05PVElGWV9IQU5ETEVSLCBhY3BpX2V2X25vdGlmeV9kaXNwYXRjaCwKKwkJCQkgICAgbm90aWZ5X2luZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWFjcGlfdXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUobm90aWZ5X2luZm8pOwogCQl9CkBAIC0yNDAsNiArMjQzLDcgQEAKIAkgKiB0byB0aGUgZGV2aWNlLgogCSAqLwogCWlmIChub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlIDw9IEFDUElfTUFYX1NZU19OT1RJRlkpIHsKKwogCQkvKiBHbG9iYWwgc3lzdGVtIG5vdGlmaWNhdGlvbiBoYW5kbGVyICovCiAKIAkJaWYgKGFjcGlfZ2JsX3N5c3RlbV9ub3RpZnkuaGFuZGxlcikgewpAQCAtMjk3LDYgKzMwMSw3IEBACiAJLyogU2lnbmFsIHRocmVhZHMgdGhhdCBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2sgKi8KIAogCWlmIChhY3BpX2dibF9nbG9iYWxfbG9ja190aHJlYWRfY291bnQpIHsKKwogCQkvKiBTZW5kIHN1ZmZpY2llbnQgdW5pdHMgdG8gdGhlIHNlbWFwaG9yZSAqLwogCiAJCXN0YXR1cyA9CkBAIC0zMzUsMTUgKzM0MCwxNiBAQAogCSAqLwogCUFDUElfQUNRVUlSRV9HTE9CQUxfTE9DSyhhY3BpX2dibF9jb21tb25fZkFDUy5nbG9iYWxfbG9jaywgYWNxdWlyZWQpOwogCWlmIChhY3F1aXJlZCkgeworCiAJCS8qIEdvdCB0aGUgbG9jaywgbm93IHdha2UgYWxsIHRocmVhZHMgd2FpdGluZyBmb3IgaXQgKi8KIAogCQlhY3BpX2dibF9nbG9iYWxfbG9ja19hY3F1aXJlZCA9IFRSVUU7CiAKIAkJLyogUnVuIHRoZSBHbG9iYWwgTG9jayB0aHJlYWQgd2hpY2ggd2lsbCBzaWduYWwgYWxsIHdhaXRpbmcgdGhyZWFkcyAqLwogCi0JCXN0YXR1cyA9IGFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbihPU0RfUFJJT1JJVFlfSElHSCwKLQkJCQkJCSAgICAgYWNwaV9ldl9nbG9iYWxfbG9ja190aHJlYWQsCi0JCQkJCQkgICAgIGNvbnRleHQpOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9vc19leGVjdXRlKE9TTF9HTE9CQUxfTE9DS19IQU5ETEVSLAorCQkJCSAgICBhY3BpX2V2X2dsb2JhbF9sb2NrX3RocmVhZCwgY29udGV4dCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKIAkJCQkJIkNvdWxkIG5vdCBxdWV1ZSBHbG9iYWwgTG9jayB0aHJlYWQiKSk7CkBAIC0zNzEsNyArMzc3LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9pbml0X2dsb2JhbF9sb2NrX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luaXRfZ2xvYmFsX2xvY2tfaGFuZGxlcik7CiAKIAlhY3BpX2dibF9nbG9iYWxfbG9ja19wcmVzZW50ID0gVFJVRTsKIAlzdGF0dXMgPSBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX0dMT0JBTCwKQEAgLTQxMyw3ICs0MTksNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXU4IGFjcXVpcmVkID0gRkFMU0U7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9hY3F1aXJlX2dsb2JhbF9sb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9hY3F1aXJlX2dsb2JhbF9sb2NrKTsKIAogI2lmbmRlZiBBQ1BJX0FQUExJQ0FUSU9OCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBhIGdsb2JhbCBsb2NrICovCkBAIC00MzksNiArNDQ1LDcgQEAKIAogCUFDUElfQUNRVUlSRV9HTE9CQUxfTE9DSyhhY3BpX2dibF9jb21tb25fZkFDUy5nbG9iYWxfbG9jaywgYWNxdWlyZWQpOwogCWlmIChhY3F1aXJlZCkgeworCiAJCS8qIFdlIGdvdCB0aGUgbG9jayAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKQEAgLTQ1OCw4ICs0NjUsOSBAQAogCSAqIEFjcXVpcmUgdGhlIGdsb2JhbCBsb2NrIHNlbWFwaG9yZSBmaXJzdC4KIAkgKiBTaW5jZSB0aGlzIHdhaXQgd2lsbCBibG9jaywgd2UgbXVzdCByZWxlYXNlIHRoZSBpbnRlcnByZXRlcgogCSAqLwotCXN0YXR1cyA9IGFjcGlfZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlKGFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZSwKLQkJCQkJICAgICAgIHRpbWVvdXQpOworCXN0YXR1cyA9CisJICAgIGFjcGlfZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlKGFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZSwKKwkJCQkJICB0aW1lb3V0KTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtNDgwLDcgKzQ4OCw3IEBACiAJdTggcGVuZGluZyA9IEZBTFNFOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfcmVsZWFzZV9nbG9iYWxfbG9jayIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfcmVsZWFzZV9nbG9iYWxfbG9jayk7CiAKIAlpZiAoIWFjcGlfZ2JsX2dsb2JhbF9sb2NrX3RocmVhZF9jb3VudCkgewogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCkBAIC00OTIsNiArNTAwLDcgQEAKIAogCWFjcGlfZ2JsX2dsb2JhbF9sb2NrX3RocmVhZF9jb3VudC0tOwogCWlmIChhY3BpX2dibF9nbG9iYWxfbG9ja190aHJlYWRfY291bnQpIHsKKwogCQkvKiBUaGVyZSBhcmUgc3RpbGwgc29tZSB0aHJlYWRzIGhvbGRpbmcgdGhlIGxvY2ssIGNhbm5vdCByZWxlYXNlICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTUzMyw3ICs1NDIsNyBAQAogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl90ZXJtaW5hdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3Rlcm1pbmF0ZSk7CiAKIAlpZiAoYWNwaV9nYmxfZXZlbnRzX2luaXRpYWxpemVkKSB7CiAJCS8qCkBAIC01NzMsNyArNTgyLDcgQEAKIAlpZiAoYWNwaV9nYmxfb3JpZ2luYWxfbW9kZSA9PSBBQ1BJX1NZU19NT0RFX0xFR0FDWSkgewogCQlzdGF0dXMgPSBhY3BpX2Rpc2FibGUoKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJhY3BpX2Rpc2FibGUgZmFpbGVkIikpOworCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiQWNwaURpc2FibGUgZmFpbGVkIikpOwogCQl9CiAJfQogCXJldHVybl9WT0lEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJlZ2lvbi5jCmluZGV4IDZkYTU4ZTcuLjA5NGExN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmVnaW9uLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF9yZWdpb25faGFuZGxlcnMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2luc3RhbGxfcmVnaW9uX2hhbmRsZXJzKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMTUzLDcgKzE1Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2luaXRpYWxpemVfb3BfcmVnaW9ucyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5pdGlhbGl6ZV9vcF9yZWdpb25zKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMTY0LDYgKzE2NCw3IEBACiAJICogUnVuIHRoZSBfUkVHIG1ldGhvZHMgZm9yIG9wX3JlZ2lvbnMgaW4gZWFjaCBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fREVGQVVMVF9TUEFDRVM7IGkrKykgeworCiAJCS8qIFRCRDogTWFrZSBzdXJlIGhhbmRsZXIgaXMgdGhlIERFRkFVTFQgaGFuZGxlciwgb3RoZXJ3aXNlCiAJCSAqIF9SRUcgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBydW4uCiAJCSAqLwpAQCAtMTkyLDEyICsxOTMsMTIgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2V2X2V4ZWN1dGVfcmVnX21ldGhvZCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqLCB1MzIgZnVuY3Rpb24pCiB7Ci0Jc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gaW5mbzsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwYXJhbXNbM107CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphcmdzWzNdOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmoyOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2V4ZWN1dGVfcmVnX21ldGhvZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZXhlY3V0ZV9yZWdfbWV0aG9kKTsKIAogCXJlZ2lvbl9vYmoyID0gYWNwaV9uc19nZXRfc2Vjb25kYXJ5X29iamVjdChyZWdpb25fb2JqKTsKIAlpZiAoIXJlZ2lvbl9vYmoyKSB7CkBAIC0yMDgsNDggKzIwOSw2MCBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIAotCS8qCi0JICogVGhlIF9SRUcgbWV0aG9kIGhhcyB0d28gYXJndW1lbnRzOgotCSAqCi0JICogQXJnMCwgSW50ZWdlcjogT3BlcmF0aW9uIHJlZ2lvbiBzcGFjZSBJRAotCSAqICAgICAgICAgIFNhbWUgdmFsdWUgYXMgcmVnaW9uX29iai0+UmVnaW9uLnNwYWNlX2lkCi0JICogQXJnMSwgSW50ZWdlcjogY29ubmVjdGlvbiBzdGF0dXMKLQkgKiAgICAgICAgICAxIGZvciBjb25uZWN0aW5nIHRoZSBoYW5kbGVyLAotCSAqICAgICAgICAgIDAgZm9yIGRpc2Nvbm5lY3RpbmcgdGhlIGhhbmRsZXIKLQkgKiAgICAgICAgICBQYXNzZWQgYXMgYSBwYXJhbWV0ZXIKLQkgKi8KLQlwYXJhbXNbMF0gPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9UWVBFX0lOVEVHRVIpOwotCWlmICghcGFyYW1zWzBdKSB7CisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KKworCWluZm8gPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbykpOworCWlmICghaW5mbykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKLQlwYXJhbXNbMV0gPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9UWVBFX0lOVEVHRVIpOwotCWlmICghcGFyYW1zWzFdKSB7CisJaW5mby0+cHJlZml4X25vZGUgPSByZWdpb25fb2JqMi0+ZXh0cmEubWV0aG9kX1JFRzsKKwlpbmZvLT5wYXRobmFtZSA9IE5VTEw7CisJaW5mby0+cGFyYW1ldGVycyA9IGFyZ3M7CisJaW5mby0+cGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0FSR1M7CisJaW5mby0+ZmxhZ3MgPSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUU7CisKKwkvKgorCSAqIFRoZSBfUkVHIG1ldGhvZCBoYXMgdHdvIGFyZ3VtZW50czoKKwkgKgorCSAqIEFyZzAgLSBJbnRlZ2VyOgorCSAqICBPcGVyYXRpb24gcmVnaW9uIHNwYWNlIElEIFNhbWUgdmFsdWUgYXMgcmVnaW9uX29iai0+UmVnaW9uLnNwYWNlX2lkCisJICoKKwkgKiBBcmcxIC0gSW50ZWdlcjoKKwkgKiAgY29ubmVjdGlvbiBzdGF0dXMgMSBmb3IgY29ubmVjdGluZyB0aGUgaGFuZGxlciwgMCBmb3IgZGlzY29ubmVjdGluZworCSAqICB0aGUgaGFuZGxlciAoUGFzc2VkIGFzIGEgcGFyYW1ldGVyKQorCSAqLworCWFyZ3NbMF0gPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9UWVBFX0lOVEVHRVIpOworCWlmICghYXJnc1swXSkgewogCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisKKwlhcmdzWzFdID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKKwlpZiAoIWFyZ3NbMV0pIHsKKwkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQlnb3RvIGNsZWFudXAyOwogCX0KIAogCS8qIFNldHVwIHRoZSBwYXJhbWV0ZXIgb2JqZWN0cyAqLwogCi0JcGFyYW1zWzBdLT5pbnRlZ2VyLnZhbHVlID0gcmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkOwotCXBhcmFtc1sxXS0+aW50ZWdlci52YWx1ZSA9IGZ1bmN0aW9uOwotCXBhcmFtc1syXSA9IE5VTEw7Ci0KLQlpbmZvLm5vZGUgPSByZWdpb25fb2JqMi0+ZXh0cmEubWV0aG9kX1JFRzsKLQlpbmZvLnBhcmFtZXRlcnMgPSBwYXJhbXM7Ci0JaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwlhcmdzWzBdLT5pbnRlZ2VyLnZhbHVlID0gcmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkOworCWFyZ3NbMV0tPmludGVnZXIudmFsdWUgPSBmdW5jdGlvbjsKKwlhcmdzWzJdID0gTlVMTDsKIAogCS8qIEV4ZWN1dGUgdGhlIG1ldGhvZCwgbm8gcmV0dXJuIHZhbHVlICovCiAKIAlBQ1BJX0RFQlVHX0VYRUMoYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUKLQkJCShBQ1BJX1RZUEVfTUVUSE9ELCBpbmZvLm5vZGUsIE5VTEwpKTsKLQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZSgmaW5mbyk7CisJCQkoQUNQSV9UWVBFX01FVEhPRCwgaW5mby0+cHJlZml4X25vZGUsIE5VTEwpKTsKIAotCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShwYXJhbXNbMV0pOworCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGFyZ3NbMV0pOwogCi0gICAgICBjbGVhbnVwOgotCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShwYXJhbXNbMF0pOworICAgICAgY2xlYW51cDI6CisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGFyZ3NbMF0pOwogCisgICAgICBjbGVhbnVwMToKKwlBQ1BJX0ZSRUUoaW5mbyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTI2MSw3ICsyNzQsOCBAQAogICogICAgICAgICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgLSBSZWFkIG9yIFdyaXRlIG9wZXJhdGlvbgogICogICAgICAgICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgLSBXaGVyZSBpbiB0aGUgc3BhY2UgdG8gcmVhZCBvciB3cml0ZQogICogICAgICAgICAgICAgIGJpdF93aWR0aCAgICAgICAgICAgLSBGaWVsZCB3aWR0aCBpbiBiaXRzICg4LCAxNiwgMzIsIG9yIDY0KQotICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGluIG9yIG91dCB2YWx1ZQorICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGluIG9yIG91dCB2YWx1ZSwgbXVzdCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIDY0LWJpdCBhY3BpX2ludGVnZXIKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtMjc0LDcgKzI4OCw3IEBACiBhY3BpX2V2X2FkZHJlc3Nfc3BhY2VfZGlzcGF0Y2godW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iaiwKIAkJCSAgICAgICB1MzIgZnVuY3Rpb24sCiAJCQkgICAgICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCi0JCQkgICAgICAgdTMyIGJpdF93aWR0aCwgdm9pZCAqdmFsdWUpCisJCQkgICAgICAgdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICogdmFsdWUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfc3RhdHVzIHN0YXR1czI7CkBAIC0yODQsNyArMjk4LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqMjsKIAl2b2lkICpyZWdpb25fY29udGV4dCA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoKTsKIAogCXJlZ2lvbl9vYmoyID0gYWNwaV9uc19nZXRfc2Vjb25kYXJ5X29iamVjdChyZWdpb25fb2JqKTsKIAlpZiAoIXJlZ2lvbl9vYmoyKSB7CkBAIC0zMTUsNiArMzI5LDcgQEAKIAkJICovCiAJCXJlZ2lvbl9zZXR1cCA9IGhhbmRsZXJfZGVzYy0+YWRkcmVzc19zcGFjZS5zZXR1cDsKIAkJaWYgKCFyZWdpb25fc2V0dXApIHsKKwogCQkJLyogTm8gaW5pdGlhbGl6YXRpb24gcm91dGluZSwgZXhpdCB3aXRoIGVycm9yICovCiAKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0zNjEsOSArMzc2LDEwIEBACiAJCQlyZWdpb25fb2JqLT5yZWdpb24uZmxhZ3MgfD0gQU9QT0JKX1NFVFVQX0NPTVBMRVRFOwogCiAJCQlpZiAocmVnaW9uX29iajItPmV4dHJhLnJlZ2lvbl9jb250ZXh0KSB7CisKIAkJCQkvKiBUaGUgaGFuZGxlciBmb3IgdGhpcyByZWdpb24gd2FzIGFscmVhZHkgaW5zdGFsbGVkICovCiAKLQkJCQlBQ1BJX01FTV9GUkVFKHJlZ2lvbl9jb250ZXh0KTsKKwkJCQlBQ1BJX0ZSRUUocmVnaW9uX2NvbnRleHQpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqIFNhdmUgdGhlIHJldHVybmVkIGNvbnRleHQgZm9yIHVzZSBpbiBhbGwgYWNjZXNzZXMgdG8KQEAgLTM4Niw5ICs0MDIsOCBAQAogCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShyZWdpb25fb2JqLT5yZWdpb24uCiAJCQkJCQkgIHNwYWNlX2lkKSkpOwogCi0JaWYgKCEKLQkgICAgKGhhbmRsZXJfZGVzYy0+YWRkcmVzc19zcGFjZS4KLQkgICAgIGhmbGFncyAmIEFDUElfQUREUl9IQU5ETEVSX0RFRkFVTFRfSU5TVEFMTEVEKSkgeworCWlmICghKGhhbmRsZXJfZGVzYy0+YWRkcmVzc19zcGFjZS5oYW5kbGVyX2ZsYWdzICYKKwkgICAgICBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCkpIHsKIAkJLyoKIAkJICogRm9yIGhhbmRsZXJzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgKHN1cHBsaWVkKSBoYW5kbGVycywgd2UgbXVzdAogCQkgKiBleGl0IHRoZSBpbnRlcnByZXRlciBiZWNhdXNlIHRoZSBoYW5kbGVyICptaWdodCogYmxvY2sgLS0gd2UgZG9uJ3QKQEAgLTQwOSw5ICs0MjQsOCBAQAogCQkJCQkJCXNwYWNlX2lkKSkpOwogCX0KIAotCWlmICghCi0JICAgIChoYW5kbGVyX2Rlc2MtPmFkZHJlc3Nfc3BhY2UuCi0JICAgICBoZmxhZ3MgJiBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCkpIHsKKwlpZiAoIShoYW5kbGVyX2Rlc2MtPmFkZHJlc3Nfc3BhY2UuaGFuZGxlcl9mbGFncyAmCisJICAgICAgQUNQSV9BRERSX0hBTkRMRVJfREVGQVVMVF9JTlNUQUxMRUQpKSB7CiAJCS8qCiAJCSAqIFdlIGp1c3QgcmV0dXJuZWQgZnJvbSBhIG5vbi1kZWZhdWx0IGhhbmRsZXIsIHdlIG11c3QgcmUtZW50ZXIgdGhlCiAJCSAqIGludGVycHJldGVyCkBAIC00NTEsNyArNDY1LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqMjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9kZXRhY2hfcmVnaW9uIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9kZXRhY2hfcmVnaW9uKTsKIAogCXJlZ2lvbl9vYmoyID0gYWNwaV9uc19nZXRfc2Vjb25kYXJ5X29iamVjdChyZWdpb25fb2JqKTsKIAlpZiAoIXJlZ2lvbl9vYmoyKSB7CkBAIC00NjMsNiArNDc3LDcgQEAKIAogCWhhbmRsZXJfb2JqID0gcmVnaW9uX29iai0+cmVnaW9uLmhhbmRsZXI7CiAJaWYgKCFoYW5kbGVyX29iaikgeworCiAJCS8qIFRoaXMgcmVnaW9uIGhhcyBubyBoYW5kbGVyLCBhbGwgZG9uZSAqLwogCiAJCXJldHVybl9WT0lEOwpAQCAtNDc0LDYgKzQ4OSw3IEBACiAJbGFzdF9vYmpfcHRyID0gJmhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnJlZ2lvbl9saXN0OwogCiAJd2hpbGUgKG9ial9kZXNjKSB7CisKIAkJLyogSXMgdGhpcyB0aGUgY29ycmVjdCBSZWdpb24/ICovCiAKIAkJaWYgKG9ial9kZXNjID09IHJlZ2lvbl9vYmopIHsKQEAgLTU4Myw3ICs1OTksNyBAQAogCQkgICAgICB1OCBhY3BpX25zX2lzX2xvY2tlZCkKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2F0dGFjaF9yZWdpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2F0dGFjaF9yZWdpb24pOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9PUFJFR0lPTiwKIAkJCSAgIkFkZGluZyBSZWdpb24gWyU0LjRzXSAlcCB0byBhZGRyZXNzIGhhbmRsZXIgJXAgWyVzXVxuIiwKQEAgLTYzNiw3ICs2NTIsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZXZfaW5zdGFsbF9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKGV2X2luc3RhbGxfaGFuZGxlcik7CiAKIAloYW5kbGVyX29iaiA9ICh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICopY29udGV4dDsKIApAQCAtNjY2LDYgKzY4Miw3IEBACiAKIAlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAlpZiAoIW9ial9kZXNjKSB7CisKIAkJLyogTm8gb2JqZWN0LCBqdXN0IGV4aXQgKi8KIAogCQlyZXR1cm4gKEFFX09LKTsKQEAgLTY3NCwxMCArNjkxLDEyIEBACiAJLyogRGV2aWNlcyBhcmUgaGFuZGxlZCBkaWZmZXJlbnQgdGhhbiByZWdpb25zICovCiAKIAlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9ERVZJQ0UpIHsKKwogCQkvKiBDaGVjayBpZiB0aGlzIERldmljZSBhbHJlYWR5IGhhcyBhIGhhbmRsZXIgZm9yIHRoaXMgYWRkcmVzcyBzcGFjZSAqLwogCiAJCW5leHRfaGFuZGxlcl9vYmogPSBvYmpfZGVzYy0+ZGV2aWNlLmhhbmRsZXI7CiAJCXdoaWxlIChuZXh0X2hhbmRsZXJfb2JqKSB7CisKIAkJCS8qIEZvdW5kIGEgaGFuZGxlciwgaXMgaXQgZm9yIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2U/ICovCiAKIAkJCWlmIChuZXh0X2hhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnNwYWNlX2lkID09CkBAIC03NjQsOSArNzgzLDkgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpoYW5kbGVyX29iajsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9vYmplY3RfdHlwZSB0eXBlOwotCXUxNiBmbGFncyA9IDA7CisJdTggZmxhZ3MgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF9zcGFjZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9pbnN0YWxsX3NwYWNlX2hhbmRsZXIpOwogCiAJLyoKIAkgKiBUaGlzIHJlZ2lzdHJhdGlvbiBpcyB2YWxpZCBmb3Igb25seSB0aGUgdHlwZXMgYmVsb3cKQEAgLTgzOSw2ICs4NTgsNyBAQAogCQkvKiBXYWxrIHRoZSBoYW5kbGVyIGxpc3QgZm9yIHRoaXMgZGV2aWNlICovCiAKIAkJd2hpbGUgKGhhbmRsZXJfb2JqKSB7CisKIAkJCS8qIFNhbWUgc3BhY2VfaWQgaW5kaWNhdGVzIGEgaGFuZGxlciBhbHJlYWR5IGluc3RhbGxlZCAqLwogCiAJCQlpZiAoaGFuZGxlcl9vYmotPmFkZHJlc3Nfc3BhY2Uuc3BhY2VfaWQgPT0gc3BhY2VfaWQpIHsKQEAgLTkyMSw3ICs5NDEsNyBAQAogCS8qIEluaXQgaGFuZGxlciBvYmogKi8KIAogCWhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnNwYWNlX2lkID0gKHU4KSBzcGFjZV9pZDsKLQloYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5oZmxhZ3MgPSBmbGFnczsKKwloYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5oYW5kbGVyX2ZsYWdzID0gZmxhZ3M7CiAJaGFuZGxlcl9vYmotPmFkZHJlc3Nfc3BhY2UucmVnaW9uX2xpc3QgPSBOVUxMOwogCWhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLm5vZGUgPSBub2RlOwogCWhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLmhhbmRsZXIgPSBoYW5kbGVyOwpAQCAtOTc5LDcgKzk5OSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfZXhlY3V0ZV9yZWdfbWV0aG9kcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZXhlY3V0ZV9yZWdfbWV0aG9kcyk7CiAKIAkvKgogCSAqIFJ1biBhbGwgX1JFRyBtZXRob2RzIGZvciBhbGwgT3BlcmF0aW9uIFJlZ2lvbnMgZm9yIHRoaXMKQEAgLTEwMDEsNyArMTAyMSw3IEBACiAgKgogICogUEFSQU1FVEVSUzogIHdhbGtfbmFtZXNwYWNlIGNhbGxiYWNrCiAgKgotICogREVTQ1JJUFRJT046IFJ1biBfUkVnIG1ldGhvZCBmb3IgcmVnaW9uIG9iamVjdHMgb2YgdGhlIHJlcXVlc3RlZCBzcGFjZV9pRAorICogREVTQ1JJUFRJT046IFJ1biBfUkVHIG1ldGhvZCBmb3IgcmVnaW9uIG9iamVjdHMgb2YgdGhlIHJlcXVlc3RlZCBzcGFjZV9pRAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEwMzUsNiArMTA1NSw3IEBACiAKIAlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAlpZiAoIW9ial9kZXNjKSB7CisKIAkJLyogTm8gb2JqZWN0LCBqdXN0IGV4aXQgKi8KIAogCQlyZXR1cm4gKEFFX09LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZ25pbmkuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZ25pbmkuYwppbmRleCBiYWVkOGMxLi41YjNjN2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmduaW5pLmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJnbmluaS5jCkBAIC03MSwxMSArNzEsMjIgQEAKIAkgICAgKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiloYW5kbGU7CiAJc3RydWN0IGFjcGlfbWVtX3NwYWNlX2NvbnRleHQgKmxvY2FsX3JlZ2lvbl9jb250ZXh0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfc3lzdGVtX21lbW9yeV9yZWdpb25fc2V0dXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3N5c3RlbV9tZW1vcnlfcmVnaW9uX3NldHVwKTsKIAogCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1JFR0lPTl9ERUFDVElWQVRFKSB7CiAJCWlmICgqcmVnaW9uX2NvbnRleHQpIHsKLQkJCUFDUElfTUVNX0ZSRUUoKnJlZ2lvbl9jb250ZXh0KTsKKwkJCWxvY2FsX3JlZ2lvbl9jb250ZXh0ID0KKwkJCSAgICAoc3RydWN0IGFjcGlfbWVtX3NwYWNlX2NvbnRleHQgKikqcmVnaW9uX2NvbnRleHQ7CisKKwkJCS8qIERlbGV0ZSBhIGNhY2hlZCBtYXBwaW5nIGlmIHByZXNlbnQgKi8KKworCQkJaWYgKGxvY2FsX3JlZ2lvbl9jb250ZXh0LT5tYXBwZWRfbGVuZ3RoKSB7CisJCQkJYWNwaV9vc191bm1hcF9tZW1vcnkobG9jYWxfcmVnaW9uX2NvbnRleHQtPgorCQkJCQkJICAgICBtYXBwZWRfbG9naWNhbF9hZGRyZXNzLAorCQkJCQkJICAgICBsb2NhbF9yZWdpb25fY29udGV4dC0+CisJCQkJCQkgICAgIG1hcHBlZF9sZW5ndGgpOworCQkJfQorCQkJQUNQSV9GUkVFKGxvY2FsX3JlZ2lvbl9jb250ZXh0KTsKIAkJCSpyZWdpb25fY29udGV4dCA9IE5VTEw7CiAJCX0KIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKQEAgLTg0LDcgKzk1LDcgQEAKIAkvKiBDcmVhdGUgYSBuZXcgY29udGV4dCAqLwogCiAJbG9jYWxfcmVnaW9uX2NvbnRleHQgPQotCSAgICBBQ1BJX01FTV9DQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX21lbV9zcGFjZV9jb250ZXh0KSk7CisJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9tZW1fc3BhY2VfY29udGV4dCkpOwogCWlmICghKGxvY2FsX3JlZ2lvbl9jb250ZXh0KSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC0xMTgsNyArMTI5LDcgQEAKIAkJCSAgICAgIHUzMiBmdW5jdGlvbiwKIAkJCSAgICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqKnJlZ2lvbl9jb250ZXh0KQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2lvX3NwYWNlX3JlZ2lvbl9zZXR1cCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW9fc3BhY2VfcmVnaW9uX3NldHVwKTsKIAogCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1JFR0lPTl9ERUFDVElWQVRFKSB7CiAJCSpyZWdpb25fY29udGV4dCA9IE5VTEw7CkBAIC0xNjEsNyArMTcyLDcgQEAKIAkgICAgKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiloYW5kbGU7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2lkIG9iamVjdF9oSUQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9wY2lfY29uZmlnX3JlZ2lvbl9zZXR1cCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfcGNpX2NvbmZpZ19yZWdpb25fc2V0dXApOwogCiAJaGFuZGxlcl9vYmogPSByZWdpb25fb2JqLT5yZWdpb24uaGFuZGxlcjsKIAlpZiAoIWhhbmRsZXJfb2JqKSB7CkBAIC0xNzgsNyArMTg5LDcgQEAKIAkqcmVnaW9uX2NvbnRleHQgPSBOVUxMOwogCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1JFR0lPTl9ERUFDVElWQVRFKSB7CiAJCWlmIChwY2lfaWQpIHsKLQkJCUFDUElfTUVNX0ZSRUUocGNpX2lkKTsKKwkJCUFDUElfRlJFRShwY2lfaWQpOwogCQl9CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTE5OSw2ICsyMTAsNyBAQAogCSAqIGhhbmRsZXJzIHdpdGggdGhhdCBkZXZpY2UuCiAJICovCiAJaWYgKGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLm5vZGUgPT0gYWNwaV9nYmxfcm9vdF9ub2RlKSB7CisKIAkJLyogU3RhcnQgc2VhcmNoIGZyb20gdGhlIHBhcmVudCBvYmplY3QgKi8KIAogCQlwY2lfcm9vdF9ub2RlID0gcGFyZW50X25vZGU7CkBAIC0yMjAsNiArMjMyLDcgQEAKIAkJCQkJUENJX0VYUFJFU1NfUk9PVF9ISURfU1RSSU5HLAogCQkJCQlzaXplb2YoUENJX0VYUFJFU1NfUk9PVF9ISURfU1RSSU5HKSkpKSkKIAkJCQl7CisKIAkJCQkJLyogSW5zdGFsbCBhIGhhbmRsZXIgZm9yIHRoaXMgUENJIHJvb3QgYnJpZGdlICovCiAKIAkJCQkJc3RhdHVzID0KQEAgLTIzNSw3ICsyNDgsNyBAQAogCQkJCQkJfSBlbHNlIHsKIAkJCQkJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywKIAkJCQkJCQkJCXN0YXR1cywKLQkJCQkJCQkJCSJDb3VsZCBub3QgaW5zdGFsbCBwY2lfY29uZmlnIGhhbmRsZXIgZm9yIFJvb3QgQnJpZGdlICU0LjRzIiwKKwkJCQkJCQkJCSJDb3VsZCBub3QgaW5zdGFsbCBQY2lDb25maWcgaGFuZGxlciBmb3IgUm9vdCBCcmlkZ2UgJTQuNHMiLAogCQkJCQkJCQkJYWNwaV91dF9nZXRfbm9kZV9uYW1lCiAJCQkJCQkJCQkocGNpX3Jvb3Rfbm9kZSkpKTsKIAkJCQkJCX0KQEAgLTI2Miw3ICsyNzUsNyBAQAogCiAJLyogUmVnaW9uIGlzIHN0aWxsIG5vdCBpbml0aWFsaXplZC4gQ3JlYXRlIGEgbmV3IGNvbnRleHQgKi8KIAotCXBjaV9pZCA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfcGNpX2lkKSk7CisJcGNpX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9pZCkpOwogCWlmICghcGNpX2lkKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTMzNyw3ICszNTAsNyBAQAogCQkJICAgICB1MzIgZnVuY3Rpb24sCiAJCQkgICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqKnJlZ2lvbl9jb250ZXh0KQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X3BjaV9iYXJfcmVnaW9uX3NldHVwIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9wY2lfYmFyX3JlZ2lvbl9zZXR1cCk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpAQCAtMzY0LDcgKzM3Nyw3IEBACiAJCQkgIHUzMiBmdW5jdGlvbiwKIAkJCSAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICoqcmVnaW9uX2NvbnRleHQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfY21vc19yZWdpb25fc2V0dXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2Ntb3NfcmVnaW9uX3NldHVwKTsKIAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0zODksNyArNDAyLDcgQEAKIAkJCSAgICAgdTMyIGZ1bmN0aW9uLAogCQkJICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKipyZWdpb25fY29udGV4dCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9kZWZhdWx0X3JlZ2lvbl9zZXR1cCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZGVmYXVsdF9yZWdpb25fc2V0dXApOwogCiAJaWYgKGZ1bmN0aW9uID09IEFDUElfUkVHSU9OX0RFQUNUSVZBVEUpIHsKIAkJKnJlZ2lvbl9jb250ZXh0ID0gTlVMTDsKQEAgLTQzNSw3ICs0NDgsNyBAQAogCWFjcGlfbmFtZSAqcmVnX25hbWVfcHRyID0gKGFjcGlfbmFtZSAqKSBNRVRIT0RfTkFNRV9fUkVHOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmoyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoImV2X2luaXRpYWxpemVfcmVnaW9uIiwgYWNwaV9uc19sb2NrZWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV2X2luaXRpYWxpemVfcmVnaW9uLCBhY3BpX25zX2xvY2tlZCk7CiAKIAlpZiAoIXJlZ2lvbl9vYmopIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtNDYyLDggKzQ3NSw5IEBACiAKIAkvKiBGaW5kIGFueSAiX1JFRyIgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlZ2lvbiBkZWZpbml0aW9uICovCiAKLQlzdGF0dXMgPSBhY3BpX25zX3NlYXJjaF9ub2RlKCpyZWdfbmFtZV9wdHIsIG5vZGUsCi0JCQkJICAgICBBQ1BJX1RZUEVfTUVUSE9ELCAmbWV0aG9kX25vZGUpOworCXN0YXR1cyA9CisJICAgIGFjcGlfbnNfc2VhcmNoX29uZV9zY29wZSgqcmVnX25hbWVfcHRyLCBub2RlLCBBQ1BJX1RZUEVfTUVUSE9ELAorCQkJCSAgICAgJm1ldGhvZF9ub2RlKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJLyoKIAkJICogVGhlIF9SRUcgbWV0aG9kIGlzIG9wdGlvbmFsIGFuZCB0aGVyZSBjYW4gYmUgb25seSBvbmUgcGVyIHJlZ2lvbgpAQCAtNDc4LDExICs0OTIsMTMgQEAKIAkgKiBpZTogYWNwaV9nYmxfcm9vdF9ub2RlLT5wYXJlbnRfZW50cnkgYmVpbmcgc2V0IHRvIE5VTEwKIAkgKi8KIAl3aGlsZSAobm9kZSkgeworCiAJCS8qIENoZWNrIHRvIHNlZSBpZiBhIGhhbmRsZXIgZXhpc3RzICovCiAKIAkJaGFuZGxlcl9vYmogPSBOVUxMOwogCQlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAkJaWYgKG9ial9kZXNjKSB7CisKIAkJCS8qIENhbiBvbmx5IGJlIGEgaGFuZGxlciBpZiB0aGUgb2JqZWN0IGV4aXN0cyAqLwogCiAJCQlzd2l0Y2ggKG5vZGUtPnR5cGUpIHsKQEAgLTUwNywxMCArNTIzLDEyIEBACiAJCQl9CiAKIAkJCXdoaWxlIChoYW5kbGVyX29iaikgeworCiAJCQkJLyogSXMgdGhpcyBoYW5kbGVyIG9mIHRoZSBjb3JyZWN0IHR5cGU/ICovCiAKIAkJCQlpZiAoaGFuZGxlcl9vYmotPmFkZHJlc3Nfc3BhY2Uuc3BhY2VfaWQgPT0KIAkJCQkgICAgc3BhY2VfaWQpIHsKKwogCQkJCQkvKiBGb3VuZCBjb3JyZWN0IGhhbmRsZXIgKi8KIAogCQkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX09QUkVHSU9OLApAQCAtNTcxLDcgKzU4OSw3IEBACiAJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9yIHRoaXMgcmVnaW9uICovCiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX09QUkVHSU9OLAotCQkJICAiTm8gaGFuZGxlciBmb3IgcmVnaW9uX3R5cGUgJXMoJVgpIChyZWdpb25fb2JqICVwKVxuIiwKKwkJCSAgIk5vIGhhbmRsZXIgZm9yIFJlZ2lvblR5cGUgJXMoJVgpIChSZWdpb25PYmogJXApXG4iLAogCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShzcGFjZV9pZCksIHNwYWNlX2lkLAogCQkJICByZWdpb25fb2JqKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZzY2kuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZzY2kuYwppbmRleCA5YTYyMjE2Li44MTA2MjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2c2NpLmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnNjaS5jCkBAIC02OSw3ICs2OSw3IEBACiAJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9saXN0ID0gY29udGV4dDsKIAl1MzIgaW50ZXJydXB0X2hhbmRsZWQgPSBBQ1BJX0lOVEVSUlVQVF9OT1RfSEFORExFRDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X3NjaV94cnVwdF9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9zY2lfeHJ1cHRfaGFuZGxlcik7CiAKIAkvKgogCSAqIFdlIGFyZSBndWFyYW50ZWVkIGJ5IHRoZSBBQ1BJIENBIGluaXRpYWxpemF0aW9uL3NodXRkb3duIGNvZGUgdGhhdApAQCAtMTA4LDcgKzEwOCw3IEBACiAJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9saXN0ID0gY29udGV4dDsKIAl1MzIgaW50ZXJydXB0X2hhbmRsZWQgPSBBQ1BJX0lOVEVSUlVQVF9OT1RfSEFORExFRDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV2X2dwZV94cnVwdF9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9ncGVfeHJ1cHRfaGFuZGxlcik7CiAKIAkvKgogCSAqIFdlIGFyZSBndWFyYW50ZWVkIGJ5IHRoZSBBQ1BJIENBIGluaXRpYWxpemF0aW9uL3NodXRkb3duIGNvZGUgdGhhdApAQCAtMTQwLDcgKzE0MCw3IEBACiB7CiAJdTMyIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXZfaW5zdGFsbF9zY2lfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5zdGFsbF9zY2lfaGFuZGxlcik7CiAKIAlzdGF0dXMgPSBhY3BpX29zX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoKHUzMikgYWNwaV9nYmxfRkFEVC0+c2NpX2ludCwKIAkJCQkJCSAgIGFjcGlfZXZfc2NpX3hydXB0X2hhbmRsZXIsCkBAIC0xNzEsNyArMTcxLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJldl9yZW1vdmVfc2NpX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3JlbW92ZV9zY2lfaGFuZGxlcik7CiAKIAkvKiBKdXN0IGxldCB0aGUgT1MgcmVtb3ZlIHRoZSBoYW5kbGVyIGFuZCBkaXNhYmxlIHRoZSBsZXZlbCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmFjZS5jCmluZGV4IGIzOGIzOWQuLjc2YzM0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmFjZS5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogI2luY2x1ZGUgPGFjcGkvYWNldmVudHMuaD4KQEAgLTY4LDcgKzY2LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfaW5zdGFsbF9leGNlcHRpb25faGFuZGxlcik7CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTkwLDYgKzg4LDggQEAKIAkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9leGNlcHRpb25faGFuZGxlcikKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDcsMTQgKzEwNywxMyBAQAogICogICAgICAgICAgICAgIGV2ZW50LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcih1MzIgZXZlbnQsCiAJCQkJIGFjcGlfZXZlbnRfaGFuZGxlciBoYW5kbGVyLCB2b2lkICpjb250ZXh0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC0xNjEsNyArMTYwLDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcik7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTc1LDEzICsxNzQsMTIgQEAKICAqIERFU0NSSVBUSU9OOiBEaXNhYmxlcyB0aGUgZXZlbnQgYW5kIHVucmVnaXN0ZXJzIHRoZSBldmVudCBoYW5kbGVyLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKHUzMiBldmVudCwgYWNwaV9ldmVudF9oYW5kbGVyIGhhbmRsZXIpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTIxNiw3ICsyMTQsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjM1LDcgKzIzMyw2IEBACiAgKiBERVNDUklQVElPTjogSW5zdGFsbCBhIGhhbmRsZXIgZm9yIG5vdGlmaWVzIG9uIGFuIEFDUEkgZGV2aWNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihhY3BpX2hhbmRsZSBkZXZpY2UsCiAJCQkgICAgdTMyIGhhbmRsZXJfdHlwZSwKQEAgLTI0Niw3ICsyNDMsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTI3NSw2ICsyNzIsNyBAQAogCSAqIG9ubHkgb25lIDxleHRlcm5hbD4gZ2xvYmFsIGhhbmRsZXIgY2FuIGJlIHJlZ3NpdGVyZWQgKHBlciBub3RpZnkgdHlwZSkuCiAJICovCiAJaWYgKGRldmljZSA9PSBBQ1BJX1JPT1RfT0JKRUNUKSB7CisKIAkJLyogTWFrZSBzdXJlIHRoZSBoYW5kbGVyIGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCAqLwogCiAJCWlmICgoKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgJiYKQEAgLTMxNyw2ICszMTUsNyBAQAogCiAJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCQlpZiAob2JqX2Rlc2MpIHsKKwogCQkJLyogT2JqZWN0IGV4aXN0cyAtIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGhhbmRsZXIgKi8KIAogCQkJaWYgKCgoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSAmJgpAQCAtMzcwLDYgKzM2OSw3IEBACiAJCX0KIAogCQlpZiAoaGFuZGxlcl90eXBlID09IEFDUElfQUxMX05PVElGWSkgeworCiAJCQkvKiBFeHRyYSByZWYgaWYgaW5zdGFsbGVkIGluIGJvdGggKi8KIAogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzk5LDcgKzM5OSw2IEBACiAgKiBERVNDUklQVElPTjogUmVtb3ZlIGEgaGFuZGxlciBmb3Igbm90aWZpZXMgb24gYW4gQUNQSSBkZXZpY2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoYWNwaV9oYW5kbGUgZGV2aWNlLAogCQkJICAgdTMyIGhhbmRsZXJfdHlwZSwgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyKQpAQCAtNDA5LDcgKzQwOCw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTUzNSw3ICs1MzQsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC01NTQsNyArNTUzLDYgQEAKICAqIERFU0NSSVBUSU9OOiBJbnN0YWxsIGEgaGFuZGxlciBmb3IgYSBHZW5lcmFsIFB1cnBvc2UgRXZlbnQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfaW5zdGFsbF9ncGVfaGFuZGxlcihhY3BpX2hhbmRsZSBncGVfZGV2aWNlLAogCQkJIHUzMiBncGVfbnVtYmVyLApAQCAtNTY1LDcgKzU2Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtNTk2LDcgKzU5NCw3IEBACiAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdCBoYW5kbGVyIG9iamVjdCAqLwogCi0JaGFuZGxlciA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfaGFuZGxlcl9pbmZvKSk7CisJaGFuZGxlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9oYW5kbGVyX2luZm8pKTsKIAlpZiAoIWhhbmRsZXIpIHsKIAkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKQEAgLTYzMCw3ICs2MjgsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9ncGVfaGFuZGxlcik7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTY0Niw3ICs2NDQsNiBAQAogICogREVTQ1JJUFRJT046IFJlbW92ZSBhIGhhbmRsZXIgZm9yIGEgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsCiAJCQl1MzIgZ3BlX251bWJlciwgYWNwaV9ldmVudF9oYW5kbGVyIGFkZHJlc3MpCkBAIC02NTYsNyArNjUzLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3JlbW92ZV9ncGVfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtNzI0LDE0ICs3MjEsMTQgQEAKIAogCS8qIE5vdyB3ZSBjYW4gZnJlZSB0aGUgaGFuZGxlciBvYmplY3QgKi8KIAotCUFDUElfTUVNX0ZSRUUoaGFuZGxlcik7CisJQUNQSV9GUkVFKGhhbmRsZXIpOwogCiAgICAgICB1bmxvY2tfYW5kX2V4aXQ6CiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTc0Niw3ICs3NDMsNiBAQAogICogREVTQ1JJUFRJT046IEFjcXVpcmUgdGhlIEFDUEkgR2xvYmFsIExvY2sKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2sodTE2IHRpbWVvdXQsIHUzMiAqIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC03NzEsNyArNzY3LDcgQEAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2spCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNzg0LDcgKzc4MCw2IEBACiAgKiBERVNDUklQVElPTjogUmVsZWFzZSB0aGUgQUNQSSBHbG9iYWwgTG9jay4gVGhlIGhhbmRsZSBtdXN0IGJlIHZhbGlkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayh1MzIgaGFuZGxlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTc5Nyw0ICs3OTIsNCBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2spOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfcmVsZWFzZV9nbG9iYWxfbG9jaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmV2bnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmV2bnQuYwppbmRleCBlYzljZTg0Li43ZWJjMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZldm50LmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmZXZudC5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY2V2ZW50cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KQEAgLTY1LDcgKzYzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZW5hYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZSk7CiAKIAkvKiBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgRkFEVCAqLwogCkBAIC05NCw2ICs5Miw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2VuYWJsZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9kaXNhYmxlCkBAIC0xMDUsMTIgKzEwNSwxMSBAQAogICogREVTQ1JJUFRJT046IFRyYW5zZmVycyB0aGUgc3lzdGVtIGludG8gTEVHQUNZIChub24tQUNQSSkgbW9kZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGUodm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZGlzYWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9kaXNhYmxlKTsKIAogCWlmICghYWNwaV9nYmxfRkFEVCkgewogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJObyBGQURUIGluZm9ybWF0aW9uIHByZXNlbnQhIikpOwpAQCAtMTM3LDYgKzEzNiw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2Rpc2FibGUpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZW5hYmxlX2V2ZW50CkBAIC0xNDksMTMgKzE1MCwxMiBAQAogICogREVTQ1JJUFRJT046IEVuYWJsZSBhbiBBQ1BJIGV2ZW50IChmaXhlZCkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ldmVudCh1MzIgZXZlbnQsIHUzMiBmbGFncykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1MzIgdmFsdWU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VuYWJsZV9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbmFibGVfZXZlbnQpOwogCiAJLyogRGVjb2RlIHRoZSBGaXhlZCBFdmVudCAqLwogCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2VuYWJsZV9ldmVudCk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZXZlbnQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjA4LDEzICsyMDgsMTIgQEAKICAqIERFU0NSSVBUSU9OOiBTZXQgdGhlIHR5cGUgb2YgYW4gaW5kaXZpZHVhbCBHUEUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX3NldF9ncGVfdHlwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3NldF9ncGVfdHlwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZ3BlX3R5cGUpOwogCiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KIApAQCAtMjM2LDcgKzIzNSw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9zZXRfZ3BlX3R5cGUpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2dwZV90eXBlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTI1MiwxMyArMjUxLDEyIEBACiAgKiBERVNDUklQVElPTjogRW5hYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHUzMiBmbGFncykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VuYWJsZV9ncGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX2dwZSk7CiAKIAkvKiBVc2Ugc2VtYXBob3JlIGxvY2sgaWYgbm90IGV4ZWN1dGluZyBhdCBpbnRlcnJ1cHQgbGV2ZWwgKi8KIApAQCAtMjg4LDcgKzI4Niw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZ3BlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2VuYWJsZV9ncGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzA0LDEzICszMDIsMTIgQEAKICAqIERFU0NSSVBUSU9OOiBEaXNhYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9kaXNhYmxlX2dwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9kaXNhYmxlX2dwZSk7CiAKIAkvKiBVc2Ugc2VtYXBob3JlIGxvY2sgaWYgbm90IGV4ZWN1dGluZyBhdCBpbnRlcnJ1cHQgbGV2ZWwgKi8KIApAQCAtMzM4LDYgKzMzNSw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2Rpc2FibGVfZ3BlKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2Rpc2FibGVfZXZlbnQKQEAgLTM1MCwxMyArMzQ5LDEyIEBACiAgKiBERVNDUklQVElPTjogRGlzYWJsZSBhbiBBQ1BJIGV2ZW50IChmaXhlZCkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZXZlbnQodTMyIGV2ZW50LCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIHZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9kaXNhYmxlX2V2ZW50Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2Rpc2FibGVfZXZlbnQpOwogCiAJLyogRGVjb2RlIHRoZSBGaXhlZCBFdmVudCAqLwogCkBAIC0zOTIsNyArMzkwLDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2Rpc2FibGVfZXZlbnQpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZGlzYWJsZV9ldmVudCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC00MDUsMTIgKzQwMywxMSBAQAogICogREVTQ1JJUFRJT046IENsZWFyIGFuIEFDUEkgZXZlbnQgKGZpeGVkKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfY2xlYXJfZXZlbnQodTMyIGV2ZW50KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9jbGVhcl9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9jbGVhcl9ldmVudCk7CiAKIAkvKiBEZWNvZGUgdGhlIEZpeGVkIEV2ZW50ICovCiAKQEAgLTQyOSw3ICs0MjYsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfY2xlYXJfZXZlbnQpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfY2xlYXJfZXZlbnQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDQ0LDEzICs0NDEsMTIgQEAKICAqIERFU0NSSVBUSU9OOiBDbGVhciBhbiBBQ1BJIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9jbGVhcl9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHUzMiBmbGFncykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2NsZWFyX2dwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9jbGVhcl9ncGUpOwogCiAJLyogVXNlIHNlbWFwaG9yZSBsb2NrIGlmIG5vdCBleGVjdXRpbmcgYXQgaW50ZXJydXB0IGxldmVsICovCiAKQEAgLTQ3OCw2ICs0NzQsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9jbGVhcl9ncGUpCisKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC00OTIsMTIgKzQ5MCwxMSBAQAogICogREVTQ1JJUFRJT046IE9idGFpbnMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBldmVudAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfZ2V0X2V2ZW50X3N0YXR1cyh1MzIgZXZlbnQsIGFjcGlfZXZlbnRfc3RhdHVzICogZXZlbnRfc3RhdHVzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfZXZlbnRfc3RhdHVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9ldmVudF9zdGF0dXMpOwogCiAJaWYgKCFldmVudF9zdGF0dXMpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtNTE4LDYgKzUxNSw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9ldmVudF9zdGF0dXMpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2dwZV9zdGF0dXMKQEAgLTUzMyw3ICs1MzIsNiBAQAogICogREVTQ1JJUFRJT046IEdldCBzdGF0dXMgb2YgYW4gZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfZ3BlX3N0YXR1cyhhY3BpX2hhbmRsZSBncGVfZGV2aWNlLAogCQkgICAgdTMyIGdwZV9udW1iZXIsIHUzMiBmbGFncywgYWNwaV9ldmVudF9zdGF0dXMgKiBldmVudF9zdGF0dXMpCkBAIC01NDEsNyArNTM5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2dldF9ncGVfc3RhdHVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9ncGVfc3RhdHVzKTsKIAogCS8qIFVzZSBzZW1hcGhvcmUgbG9jayBpZiBub3QgZXhlY3V0aW5nIGF0IGludGVycnVwdCBsZXZlbCAqLwogCkBAIC01NzAsNiArNTY4LDggQEAKIAl9CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9ncGVfc3RhdHVzKQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU4Niw3ICs1ODYsNiBAQAogICogREVTQ1JJUFRJT046IENyZWF0ZSBhbmQgSW5zdGFsbCBhIGJsb2NrIG9mIEdQRSByZWdpc3RlcnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9pbnN0YWxsX2dwZV9ibG9jayhhY3BpX2hhbmRsZSBncGVfZGV2aWNlLAogCQkgICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpncGVfYmxvY2tfYWRkcmVzcywKQEAgLTU5Nyw3ICs1OTYsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luc3RhbGxfZ3BlX2Jsb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luc3RhbGxfZ3BlX2Jsb2NrKTsKIAogCWlmICgoIWdwZV9kZXZpY2UpIHx8ICghZ3BlX2Jsb2NrX2FkZHJlc3MpIHx8ICghcmVnaXN0ZXJfY291bnQpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTYzNiw2ICs2MzUsNyBAQAogCiAJb2JqX2Rlc2MgPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSk7CiAJaWYgKCFvYmpfZGVzYykgeworCiAJCS8qIE5vIG9iamVjdCwgY3JlYXRlIGEgbmV3IG9uZSAqLwogCiAJCW9ial9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9ERVZJQ0UpOwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2dwZV9ibG9jayk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2dwZV9ibG9jaykKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC02NzgsMTQgKzY3OCwxMyBAQAogICogREVTQ1JJUFRJT046IFJlbW92ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIGJsb2NrIG9mIEdQRSByZWdpc3RlcnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX3JlbW92ZV9ncGVfYmxvY2soYWNwaV9oYW5kbGUgZ3BlX2RldmljZSkKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3JlbW92ZV9ncGVfYmxvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfcmVtb3ZlX2dwZV9ibG9jayk7CiAKIAlpZiAoIWdwZV9kZXZpY2UpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtNzIxLDQgKzcyMCw0IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9yZW1vdmVfZ3BlX2Jsb2NrKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlbW92ZV9ncGVfYmxvY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZyZWduLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZyZWduLmMKaW5kZXggYWJmNWNhYy4uZThiODZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmcmVnbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZnJlZ24uYwpAQCAtNDIsOCArNDIsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjZXZlbnRzLmg+CkBAIC03NSw3ICs3Myw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC0xMTQsNyArMTEyLDcgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfYWRkcmVzc19zcGFjZV9oYW5kbGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfYWRkcmVzc19zcGFjZV9oYW5kbGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTEyOSw3ICsxMjcsNiBAQAogICogREVTQ1JJUFRJT046IFJlbW92ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIGhhbmRsZXIuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihhY3BpX2hhbmRsZSBkZXZpY2UsCiAJCQkJICBhY3BpX2Fkcl9zcGFjZV90eXBlIHNwYWNlX2lkLApAQCAtMTQyLDcgKzEzOSw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtMTc2LDkgKzE3MywxMSBAQAogCWhhbmRsZXJfb2JqID0gb2JqX2Rlc2MtPmRldmljZS5oYW5kbGVyOwogCWxhc3Rfb2JqX3B0ciA9ICZvYmpfZGVzYy0+ZGV2aWNlLmhhbmRsZXI7CiAJd2hpbGUgKGhhbmRsZXJfb2JqKSB7CisKIAkJLyogV2UgaGF2ZSBhIGhhbmRsZXIsIHNlZSBpZiB1c2VyIHJlcXVlc3RlZCB0aGlzIG9uZSAqLwogCiAJCWlmIChoYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5zcGFjZV9pZCA9PSBzcGFjZV9pZCkgeworCiAJCQkvKiBNYXRjaGVkIHNwYWNlX2lkLCBmaXJzdCBkZXJlZmVyZW5jZSB0aGlzIGluIHRoZSBSZWdpb25zICovCiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfT1BSRUdJT04sCkBAIC0yMjksNyArMjI4LDcgQEAKIAkvKiBUaGUgaGFuZGxlciBkb2VzIG5vdCBleGlzdCAqLwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9PUFJFR0lPTiwKLQkJCSAgIlVuYWJsZSB0byByZW1vdmUgYWRkcmVzcyBoYW5kbGVyICVwIGZvciAlcyglWCksIGRldl9ub2RlICVwLCBvYmogJXBcbiIsCisJCQkgICJVbmFibGUgdG8gcmVtb3ZlIGFkZHJlc3MgaGFuZGxlciAlcCBmb3IgJXMoJVgpLCBEZXZOb2RlICVwLCBvYmogJXBcbiIsCiAJCQkgIGhhbmRsZXIsIGFjcGlfdXRfZ2V0X3JlZ2lvbl9uYW1lKHNwYWNlX2lkKSwgc3BhY2VfaWQsCiAJCQkgIG5vZGUsIG9ial9kZXNjKSk7CiAKQEAgLTI0MCw0ICsyMzksNCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcik7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29uZmlnLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjb25maWcuYwppbmRleCBhMjk3ODJmLi44MjMzNTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjb25maWcuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjb25maWcuYwpAQCAtODIsNyArODIsNyBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgdGFibGVfaW5mbzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2FkZF90YWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfYWRkX3RhYmxlKTsKIAogCS8qIENyZWF0ZSBhbiBvYmplY3QgdG8gYmUgdGhlIHRhYmxlIGhhbmRsZSAqLwogCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogCUFDUElfTUVNU0VUKCZ0YWJsZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfZGVzYykpOwogCi0JdGFibGVfaW5mby50eXBlID0gQUNQSV9UQUJMRV9TU0RUOworCXRhYmxlX2luZm8udHlwZSA9IEFDUElfVEFCTEVfSURfU1NEVDsKIAl0YWJsZV9pbmZvLnBvaW50ZXIgPSB0YWJsZTsKIAl0YWJsZV9pbmZvLmxlbmd0aCA9IChhY3BpX3NpemUpIHRhYmxlLT5sZW5ndGg7CiAJdGFibGVfaW5mby5hbGxvY2F0aW9uID0gQUNQSV9NRU1fQUxMT0NBVEVEOwpAQCAtMTEwLDYgKzExMCw3IEBACiAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJaWYgKHN0YXR1cyA9PSBBRV9BTFJFQURZX0VYSVNUUykgeworCiAJCQkvKiBUYWJsZSBhbHJlYWR5IGV4aXN0cywganVzdCByZXR1cm4gdGhlIGhhbmRsZSAqLwogCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMTIxLDYgKzEyMiw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX25zX2xvYWRfdGFibGUodGFibGVfaW5mby5pbnN0YWxsZWRfZGVzYywgcGFyZW50X25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIFVuaW5zdGFsbCB0YWJsZSBvbiBlcnJvciAqLwogCiAJCSh2b2lkKWFjcGlfdGJfdW5pbnN0YWxsX3RhYmxlKHRhYmxlX2luZm8uaW5zdGFsbGVkX2Rlc2MpOwpAQCAtMTYwLDcgKzE2Miw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnBhcmFtZXRlcl9ub2RlID0gTlVMTDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpkZGJfaGFuZGxlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfbG9hZF90YWJsZV9vcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfbG9hZF90YWJsZV9vcCk7CiAKICNpZiAwCiAJLyoKQEAgLTE2OSw2ICsxNzEsNyBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfdGJfbWF0Y2hfc2lnbmF0dXJlKG9wZXJhbmRbMF0tPnN0cmluZy5wb2ludGVyLCBOVUxMKTsKIAlpZiAoc3RhdHVzID09IEFFX09LKSB7CisKIAkJLyogU2lnbmF0dXJlIG1hdGNoZWQgLS0gZG9uJ3QgYWxsb3cgb3ZlcnJpZGUgKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQUxSRUFEWV9FWElTVFMpOwpAQCAtMjExLDkgKzIxNCw4IEBACiAJCSAqIGxvY2F0aW9uIHdpdGhpbiB0aGUgbmFtZXNwYWNlIHdoZXJlIHRoZSB0YWJsZSB3aWxsIGJlIGxvYWRlZC4KIAkJICovCiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX25zX2dldF9ub2RlX2J5X3BhdGgob3BlcmFuZFszXS0+c3RyaW5nLnBvaW50ZXIsCi0JCQkJCSAgICAgc3RhcnRfbm9kZSwgQUNQSV9OU19TRUFSQ0hfUEFSRU5ULAotCQkJCQkgICAgICZwYXJlbnRfbm9kZSk7CisJCSAgICBhY3BpX25zX2dldF9ub2RlKHN0YXJ0X25vZGUsIG9wZXJhbmRbM10tPnN0cmluZy5wb2ludGVyLAorCQkJCSAgICAgQUNQSV9OU19TRUFSQ0hfUEFSRU5ULCAmcGFyZW50X25vZGUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQl9CkBAIC0yMzQsOSArMjM2LDggQEAKIAkJLyogRmluZCB0aGUgbm9kZSByZWZlcmVuY2VkIGJ5IHRoZSBwYXJhbWV0ZXJfcGF0aF9zdHJpbmcgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc19nZXRfbm9kZV9ieV9wYXRoKG9wZXJhbmRbNF0tPnN0cmluZy5wb2ludGVyLAotCQkJCQkgICAgIHN0YXJ0X25vZGUsIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwKLQkJCQkJICAgICAmcGFyYW1ldGVyX25vZGUpOworCQkgICAgYWNwaV9uc19nZXRfbm9kZShzdGFydF9ub2RlLCBvcGVyYW5kWzRdLT5zdHJpbmcucG9pbnRlciwKKwkJCQkgICAgIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwgJnBhcmFtZXRlcl9ub2RlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQpAQCAtMjUyLDYgKzI1Myw3IEBACiAJLyogUGFyYW1ldGVyIERhdGEgKG9wdGlvbmFsKSAqLwogCiAJaWYgKHBhcmFtZXRlcl9ub2RlKSB7CisKIAkJLyogU3RvcmUgdGhlIHBhcmFtZXRlciBkYXRhIGludG8gdGhlIG9wdGlvbmFsIHBhcmFtZXRlciBvYmplY3QgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2V4X3N0b3JlKG9wZXJhbmRbNV0sCkBAIC0yOTQsOSArMjk2LDEwIEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9wdHIgPSBOVUxMOwogCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciB0YWJsZV9oZWFkZXI7CisJYWNwaV9pbnRlZ2VyIHRlbXA7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9sb2FkX29wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9sb2FkX29wKTsKIAogCS8qIE9iamVjdCBjYW4gYmUgZWl0aGVyIGFuIG9wX3JlZ2lvbiBvciBhIEZpZWxkICovCiAKQEAgLTMyMiw3ICszMjUsNyBAQAogCiAJCWFkZHJlc3MgPSBvYmpfZGVzYy0+cmVnaW9uLmFkZHJlc3M7CiAKLQkJLyogR2V0IHRoZSB0YWJsZSBsZW5ndGggZnJvbSB0aGUgdGFibGUgaGVhZGVyICovCisJCS8qIEdldCBwYXJ0IG9mIHRoZSB0YWJsZSBoZWFkZXIgdG8gZ2V0IHRoZSB0YWJsZSBsZW5ndGggKi8KIAogCQl0YWJsZV9oZWFkZXIubGVuZ3RoID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewpAQCAtMzMwLDExICszMzMsMTQgQEAKIAkJCSAgICBhY3BpX2V2X2FkZHJlc3Nfc3BhY2VfZGlzcGF0Y2gob2JqX2Rlc2MsIEFDUElfUkVBRCwKIAkJCQkJCQkgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQogCQkJCQkJCSAgIChpICsgYWRkcmVzcyksIDgsCi0JCQkJCQkJICAgKCh1OCAqKSAmCi0JCQkJCQkJICAgIHRhYmxlX2hlYWRlcikgKyBpKTsKKwkJCQkJCQkgICAmdGVtcCk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJCX0KKworCQkJLyogR2V0IHRoZSBvbmUgdmFsaWQgYnl0ZSBvZiB0aGUgcmV0dXJuZWQgNjQtYml0IHZhbHVlICovCisKKwkJCUFDUElfQ0FTVF9QVFIodTgsICZ0YWJsZV9oZWFkZXIpW2ldID0gKHU4KSB0ZW1wOwogCQl9CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRoZSB0YWJsZSBsZW5ndGggKi8KQEAgLTM0NSw3ICszNTEsNyBAQAogCiAJCS8qIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgZW50aXJlIHRhYmxlICovCiAKLQkJdGFibGVfcHRyID0gQUNQSV9NRU1fQUxMT0NBVEUodGFibGVfaGVhZGVyLmxlbmd0aCk7CisJCXRhYmxlX3B0ciA9IEFDUElfQUxMT0NBVEUodGFibGVfaGVhZGVyLmxlbmd0aCk7CiAJCWlmICghdGFibGVfcHRyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtMzU3LDExICszNjMsMTQgQEAKIAkJCSAgICBhY3BpX2V2X2FkZHJlc3Nfc3BhY2VfZGlzcGF0Y2gob2JqX2Rlc2MsIEFDUElfUkVBRCwKIAkJCQkJCQkgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQogCQkJCQkJCSAgIChpICsgYWRkcmVzcyksIDgsCi0JCQkJCQkJICAgKCh1OCAqKSB0YWJsZV9wdHIgKwotCQkJCQkJCSAgICBpKSk7CisJCQkJCQkJICAgJnRlbXApOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQorCisJCQkvKiBHZXQgdGhlIG9uZSB2YWxpZCBieXRlIG9mIHRoZSByZXR1cm5lZCA2NC1iaXQgdmFsdWUgKi8KKworCQkJQUNQSV9DQVNUX1BUUih1OCwgdGFibGVfcHRyKVtpXSA9ICh1OCkgdGVtcDsKIAkJfQogCQlicmVhazsKIApAQCAtNDA3LDEyICs0MTYsOCBAQAogCiAJLyogVGhlIHRhYmxlIG11c3QgYmUgZWl0aGVyIGFuIFNTRFQgb3IgYSBQU0RUICovCiAKLQlpZiAoKCFBQ1BJX1NUUk5DTVAodGFibGVfcHRyLT5zaWduYXR1cmUsCi0JCQkgICBhY3BpX2dibF90YWJsZV9kYXRhW0FDUElfVEFCTEVfUFNEVF0uc2lnbmF0dXJlLAotCQkJICAgYWNwaV9nYmxfdGFibGVfZGF0YVtBQ1BJX1RBQkxFX1BTRFRdLnNpZ19sZW5ndGgpKSAmJgotCSAgICAoIUFDUElfU1RSTkNNUCh0YWJsZV9wdHItPnNpZ25hdHVyZSwKLQkJCSAgIGFjcGlfZ2JsX3RhYmxlX2RhdGFbQUNQSV9UQUJMRV9TU0RUXS5zaWduYXR1cmUsCi0JCQkgICBhY3BpX2dibF90YWJsZV9kYXRhW0FDUElfVEFCTEVfU1NEVF0uc2lnX2xlbmd0aCkpKSB7CisJaWYgKCghQUNQSV9DT01QQVJFX05BTUUodGFibGVfcHRyLT5zaWduYXR1cmUsIFBTRFRfU0lHKSkgJiYKKwkgICAgKCFBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZV9wdHItPnNpZ25hdHVyZSwgU1NEVF9TSUcpKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJUYWJsZSBoYXMgaW52YWxpZCBzaWduYXR1cmUgWyU0LjRzXSwgbXVzdCBiZSBTU0RUIG9yIFBTRFQiLAogCQkJICAgIHRhYmxlX3B0ci0+c2lnbmF0dXJlKSk7CkBAIC00MjQsNiArNDI5LDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfZXhfYWRkX3RhYmxlKHRhYmxlX3B0ciwgYWNwaV9nYmxfcm9vdF9ub2RlLCAmZGRiX2hhbmRsZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJLyogT24gZXJyb3IsIHRhYmxlX3B0ciB3YXMgZGVhbGxvY2F0ZWQgYWJvdmUgKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTQ0Miw3ICs0NDgsNyBAQAogCiAgICAgICBjbGVhbnVwOgogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX01FTV9GUkVFKHRhYmxlX3B0cik7CisJCUFDUElfRlJFRSh0YWJsZV9wdHIpOwogCX0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KQEAgLTQ2NSw3ICs0NzEsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnRhYmxlX2Rlc2MgPSBkZGJfaGFuZGxlOwogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKnRhYmxlX2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF91bmxvYWRfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3VubG9hZF90YWJsZSk7CiAKIAkvKgogCSAqIFZhbGlkYXRlIHRoZSBoYW5kbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29udnJ0LmMKaW5kZXggZTZkNTJlMS4uYjczMmUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29udnJ0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIAl1MzIgY291bnQ7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NvbnZlcnRfdG9faW50ZWdlciIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jb252ZXJ0X3RvX2ludGVnZXIsIG9ial9kZXNjKTsKIAogCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKQEAgLTE5OSw3ICsxOTksNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjOwogCXU4ICpuZXdfYnVmOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NvbnZlcnRfdG9fYnVmZmVyIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NvbnZlcnRfdG9fYnVmZmVyLCBvYmpfZGVzYyk7CiAKIAlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgewogCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKQEAgLTMxOSw2ICszMTksNyBAQAogCQlyZW1haW5kZXIgPSAwOwogCiAJCWZvciAoaSA9IGRlY2ltYWxfbGVuZ3RoOyBpID4gMDsgaS0tKSB7CisKIAkJCS8qIERpdmlkZSBieSBudGggZmFjdG9yIG9mIDEwICovCiAKIAkJCWRpZ2l0ID0gaW50ZWdlcjsKQEAgLTM0Niw2ICszNDcsNyBAQAogCiAJCWhleF9sZW5ndGggPSAoYWNwaV9uYXRpdmVfdWludCkgQUNQSV9NVUxfMihkYXRhX3dpZHRoKTsKIAkJZm9yIChpID0gMCwgaiA9IChoZXhfbGVuZ3RoIC0gMSk7IGkgPCBoZXhfbGVuZ3RoOyBpKyssIGotLSkgeworCiAJCQkvKiBHZXQgb25lIGhleCBkaWdpdCwgbW9zdCBzaWduaWZpY2FudCBkaWdpdHMgZmlyc3QgKi8KIAogCQkJc3RyaW5nW2tdID0KQEAgLTQwMCw3ICs0MDIsNyBAQAogCXUxNiBiYXNlID0gMTY7CiAJdTggc2VwYXJhdG9yID0gJywnOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NvbnZlcnRfdG9fc3RyaW5nIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NvbnZlcnRfdG9fc3RyaW5nLCBvYmpfZGVzYyk7CiAKIAlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgewogCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKQEAgLTU2Nyw3ICs1NjksNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfY29udmVydF90b190YXJnZXRfdHlwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfY29udmVydF90b190YXJnZXRfdHlwZSk7CiAKIAkvKiBEZWZhdWx0IGJlaGF2aW9yICovCiAKQEAgLTY1Nyw3ICs2NTksNyBAQAogCiAJZGVmYXVsdDoKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiVW5rbm93biBUYXJnZXQgdHlwZSBJRCAweCVYIGFtbF9vcGNvZGUgJVggZGVzdF90eXBlICVzIiwKKwkJCSAgICAiVW5rbm93biBUYXJnZXQgdHlwZSBJRCAweCVYIEFtbE9wY29kZSAlWCBEZXN0VHlwZSAlcyIsCiAJCQkgICAgR0VUX0NVUlJFTlRfQVJHX1RZUEUod2Fsa19zdGF0ZS0+b3BfaW5mby0+CiAJCQkJCQkgcnVudGltZV9hcmdzKSwKIAkJCSAgICB3YWxrX3N0YXRlLT5vcGNvZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jCmluZGV4IDY4MDU3NTQuLjEwNmRjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jCkBAIC02OSw3ICs2OSw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFsaWFzX25vZGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9jcmVhdGVfYWxpYXMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NyZWF0ZV9hbGlhcyk7CiAKIAkvKiBHZXQgdGhlIHNvdXJjZS9hbGlhcyBvcGVyYW5kcyAoYm90aCBuYW1lc3BhY2Ugbm9kZXMpICovCiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2NyZWF0ZV9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfY3JlYXRlX2V2ZW50KTsKIAogCW9ial9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9FVkVOVCk7CiAJaWYgKCFvYmpfZGVzYykgewpAQCAtMjE2LDcgKzIxNiw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfY3JlYXRlX211dGV4IiwgQUNQSV9XQUxLX09QRVJBTkRTKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jcmVhdGVfbXV0ZXgsIEFDUElfV0FMS19PUEVSQU5EUyk7CiAKIAkvKiBDcmVhdGUgdGhlIG5ldyBtdXRleCBvYmplY3QgKi8KIApAQCAtMjQzLDggKzI0Myw5IEBACiAJb2JqX2Rlc2MtPm11dGV4Lm5vZGUgPQogCSAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKil3YWxrX3N0YXRlLT5vcGVyYW5kc1swXTsKIAotCXN0YXR1cyA9IGFjcGlfbnNfYXR0YWNoX29iamVjdChvYmpfZGVzYy0+bXV0ZXgubm9kZSwKLQkJCQkgICAgICAgb2JqX2Rlc2MsIEFDUElfVFlQRV9NVVRFWCk7CisJc3RhdHVzID0KKwkgICAgYWNwaV9uc19hdHRhY2hfb2JqZWN0KG9ial9kZXNjLT5tdXRleC5ub2RlLCBvYmpfZGVzYywKKwkJCQkgIEFDUElfVFlQRV9NVVRFWCk7CiAKICAgICAgIGNsZWFudXA6CiAJLyoKQEAgLTI4MCw3ICsyODEsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmoyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfY3JlYXRlX3JlZ2lvbiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfY3JlYXRlX3JlZ2lvbik7CiAKIAkvKiBHZXQgdGhlIE5hbWVzcGFjZSBOb2RlICovCiAKQEAgLTMwMCw3ICszMDEsNyBAQAogCSAqLwogCWlmICgocmVnaW9uX3NwYWNlID49IEFDUElfTlVNX1BSRURFRklORURfUkVHSU9OUykgJiYKIAkgICAgKHJlZ2lvbl9zcGFjZSA8IEFDUElfVVNFUl9SRUdJT05fQkVHSU4pKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFkZHJlc3Nfc3BhY2UgdHlwZSAlWCIsCisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIEFkZHJlc3NTcGFjZSB0eXBlICVYIiwKIAkJCSAgICByZWdpb25fc3BhY2UpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTlZBTElEX1NQQUNFX0lEKTsKIAl9CkBAIC0zNjQsNyArMzY1LDcgQEAKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmoyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfY3JlYXRlX3RhYmxlX3JlZ2lvbiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfY3JlYXRlX3RhYmxlX3JlZ2lvbik7CiAKIAkvKiBHZXQgdGhlIE5vZGUgZnJvbSB0aGUgb2JqZWN0IHN0YWNrICAqLwogCkBAIC00NTIsNyArNDUzLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfY3JlYXRlX3Byb2Nlc3NvciIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NyZWF0ZV9wcm9jZXNzb3IsIHdhbGtfc3RhdGUpOwogCiAJLyogQ3JlYXRlIHRoZSBwcm9jZXNzb3Igb2JqZWN0ICovCiAKQEAgLTQ2NCw5ICs0NjUsOSBAQAogCS8qIEluaXRpYWxpemUgdGhlIHByb2Nlc3NvciBvYmplY3QgZnJvbSB0aGUgb3BlcmFuZHMgKi8KIAogCW9ial9kZXNjLT5wcm9jZXNzb3IucHJvY19pZCA9ICh1OCkgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKKwlvYmpfZGVzYy0+cHJvY2Vzc29yLmxlbmd0aCA9ICh1OCkgb3BlcmFuZFszXS0+aW50ZWdlci52YWx1ZTsKIAlvYmpfZGVzYy0+cHJvY2Vzc29yLmFkZHJlc3MgPQogCSAgICAoYWNwaV9pb19hZGRyZXNzKSBvcGVyYW5kWzJdLT5pbnRlZ2VyLnZhbHVlOwotCW9ial9kZXNjLT5wcm9jZXNzb3IubGVuZ3RoID0gKHU4KSBvcGVyYW5kWzNdLT5pbnRlZ2VyLnZhbHVlOwogCiAJLyogSW5zdGFsbCB0aGUgcHJvY2Vzc29yIG9iamVjdCBpbiB0aGUgcGFyZW50IE5vZGUgKi8KIApAQCAtNDk5LDcgKzUwMCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NyZWF0ZV9wb3dlcl9yZXNvdXJjZSIsIHdhbGtfc3RhdGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NyZWF0ZV9wb3dlcl9yZXNvdXJjZSwgd2Fsa19zdGF0ZSk7CiAKIAkvKiBDcmVhdGUgdGhlIHBvd2VyIHJlc291cmNlIG9iamVjdCAqLwogCkBAIC01NDksNyArNTUwLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTggbWV0aG9kX2ZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2NyZWF0ZV9tZXRob2QiLCB3YWxrX3N0YXRlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jcmVhdGVfbWV0aG9kLCB3YWxrX3N0YXRlKTsKIAogCS8qIENyZWF0ZSBhIG5ldyBtZXRob2Qgb2JqZWN0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYwppbmRleCBhN2NjYThkLi43Yjk3MThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jCkBAIC02MSw2ICs2MSwxMCBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2V4X291dF9hZGRyZXNzKGNoYXIgKnRpdGxlLCBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgdmFsdWUpOwogCitzdGF0aWMgdm9pZAorYWNwaV9leF9kdW1wX29iamVjdCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKKwkJICAgIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvICppbmZvKTsKKwogc3RhdGljIHZvaWQgYWNwaV9leF9kdW1wX3JlZmVyZW5jZV9vYmoodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOwogCiBzdGF0aWMgdm9pZApAQCAtMTE5LDcgKzEyMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9leGR1bXBfaW5mbyBhY3BpX2V4X2R1bXBfbWV0aG9kWzhdID0gewogCXtBQ1BJX0VYRF9JTklULCBBQ1BJX0VYRF9UQUJMRV9TSVpFKGFjcGlfZXhfZHVtcF9tZXRob2QpLCBOVUxMfSwKLQl7QUNQSV9FWERfVUlOVDgsIEFDUElfRVhEX09GRlNFVChtZXRob2QucGFyYW1fY291bnQpLCAicGFyYW1fY291bnQifSwKKwl7QUNQSV9FWERfVUlOVDgsIEFDUElfRVhEX09GRlNFVChtZXRob2QucGFyYW1fY291bnQpLCAiUGFyYW1Db3VudCJ9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5jb25jdXJyZW5jeSksICJDb25jdXJyZW5jeSJ9LAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQobWV0aG9kLnNlbWFwaG9yZSksICJTZW1hcGhvcmUifSwKIAl7QUNQSV9FWERfVUlOVDgsIEFDUElfRVhEX09GRlNFVChtZXRob2Qub3duZXJfaWQpLCAiT3duZXIgSWQifSwKQEAgLTI2MywxMiArMjY3LDEwIEBACiAJe0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChjb21tb25fZmllbGQubm9kZSksICJQYXJlbnQgTm9kZSJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFjcGlfZXhkdW1wX2luZm8gYWNwaV9leF9kdW1wX25vZGVbNl0gPSB7CitzdGF0aWMgc3RydWN0IGFjcGlfZXhkdW1wX2luZm8gYWNwaV9leF9kdW1wX25vZGVbNV0gPSB7CiAJe0FDUElfRVhEX0lOSVQsIEFDUElfRVhEX1RBQkxFX1NJWkUoYWNwaV9leF9kdW1wX25vZGUpLCBOVUxMfSwKIAl7QUNQSV9FWERfVUlOVDgsIEFDUElfRVhEX05TT0ZGU0VUKGZsYWdzKSwgIkZsYWdzIn0sCiAJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9OU09GRlNFVChvd25lcl9pZCksICJPd25lciBJZCJ9LAotCXtBQ1BJX0VYRF9VSU5UMTYsIEFDUElfRVhEX05TT0ZGU0VUKHJlZmVyZW5jZV9jb3VudCksCi0JICJSZWZlcmVuY2UgQ291bnQifSwKIAl7QUNQSV9FWERfUE9JTlRFUiwgQUNQSV9FWERfTlNPRkZTRVQoY2hpbGQpLCAiQ2hpbGQgTGlzdCJ9LAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9OU09GRlNFVChwZWVyKSwgIk5leHQgUGVlciJ9CiB9OwpAQCAtMzMwLDcgKzMzMiw3IEBACiAKIAlpZiAoIWluZm8pIHsKIAkJYWNwaV9vc19wcmludGYKLQkJICAgICgiZXhfZHVtcF9vYmplY3Q6IERpc3BsYXkgbm90IGltcGxlbWVudGVkIGZvciBvYmplY3QgdHlwZSAlc1xuIiwKKwkJICAgICgiRXhEdW1wT2JqZWN0OiBEaXNwbGF5IG5vdCBpbXBsZW1lbnRlZCBmb3Igb2JqZWN0IHR5cGUgJXNcbiIsCiAJCSAgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShvYmpfZGVzYykpOwogCQlyZXR1cm47CiAJfQpAQCAtNDU0LDcgKzQ1Niw3IEBACiAJdTMyIGxlbmd0aDsKIAl1MzIgaW5kZXg7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImV4X2R1bXBfb3BlcmFuZCIpCisJQUNQSV9GVU5DVElPTl9OQU1FKGV4X2R1bXBfb3BlcmFuZCkKIAogCSAgICBpZiAoIQogCQkoKEFDUElfTFZfRVhFQyAmIGFjcGlfZGJnX2xldmVsKQpAQCAtNDYzLDYgKzQ2NSw3IEBACiAJfQogCiAJaWYgKCFvYmpfZGVzYykgeworCiAJCS8qIFRoaXMgY291bGQgYmUgYSBudWxsIGVsZW1lbnQgb2YgYSBwYWNrYWdlICovCiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiTnVsbCBPYmplY3QgRGVzY3JpcHRvclxuIikpOwpAQCAtNTIyLDcgKzUyNSw3IEBACiAKIAkJY2FzZSBBTUxfUkVGX09GX09QOgogCi0JCQlhY3BpX29zX3ByaW50ZigiUmVmZXJlbmNlOiAocmVmX29mKSAlcFxuIiwKKwkJCWFjcGlfb3NfcHJpbnRmKCJSZWZlcmVuY2U6IChSZWZPZikgJXBcbiIsCiAJCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0KTsKIAkJCWJyZWFrOwogCkBAIC01MzIsNiArNTM1LDcgQEAKIAkJCQkgICAgICAgb2JqX2Rlc2MtPnJlZmVyZW5jZS5vZmZzZXQpOwogCiAJCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisKIAkJCQkvKiBWYWx1ZSBpcyBhbiBJbnRlZ2VyICovCiAKIAkJCQlhY3BpX29zX3ByaW50ZigiIHZhbHVlIGlzIFslOC44WCU4Ljh4XSIsCkBAIC02MTAsNyArNjE0LDcgQEAKIAogCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CiAKLQkJYWNwaV9vc19wcmludGYoIlBhY2thZ2UgW0xlbiAlWF0gZWxlbWVudF9hcnJheSAlcFxuIiwKKwkJYWNwaV9vc19wcmludGYoIlBhY2thZ2UgW0xlbiAlWF0gRWxlbWVudEFycmF5ICVwXG4iLAogCQkJICAgICAgIG9ial9kZXNjLT5wYWNrYWdlLmNvdW50LAogCQkJICAgICAgIG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzKTsKIApAQCAtNjYyLDEzICs2NjYsMTMgQEAKIAogCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX0JBTktfRklFTEQ6CiAKLQkJYWNwaV9vc19wcmludGYoImJhbmtfZmllbGRcbiIpOworCQlhY3BpX29zX3ByaW50ZigiQmFua0ZpZWxkXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQ6CiAKIAkJYWNwaV9vc19wcmludGYKLQkJICAgICgicmVnaW9uX2ZpZWxkOiBCaXRzPSVYIGFjY193aWR0aD0lWCBMb2NrPSVYIFVwZGF0ZT0lWCBhdCBieXRlPSVYIGJpdD0lWCBvZiBiZWxvdzpcbiIsCisJCSAgICAoIlJlZ2lvbkZpZWxkOiBCaXRzPSVYIEFjY1dpZHRoPSVYIExvY2s9JVggVXBkYXRlPSVYIGF0IGJ5dGU9JVggYml0PSVYIG9mIGJlbG93OlxuIiwKIAkJICAgICBvYmpfZGVzYy0+ZmllbGQuYml0X2xlbmd0aCwKIAkJICAgICBvYmpfZGVzYy0+ZmllbGQuYWNjZXNzX2J5dGVfd2lkdGgsCiAJCSAgICAgb2JqX2Rlc2MtPmZpZWxkLmZpZWxkX2ZsYWdzICYgQU1MX0ZJRUxEX0xPQ0tfUlVMRV9NQVNLLApAQCAtNjgxLDEyICs2ODUsMTIgQEAKIAogCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX0lOREVYX0ZJRUxEOgogCi0JCWFjcGlfb3NfcHJpbnRmKCJpbmRleF9maWVsZFxuIik7CisJCWFjcGlfb3NfcHJpbnRmKCJJbmRleEZpZWxkXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfVFlQRV9CVUZGRVJfRklFTEQ6CiAKLQkJYWNwaV9vc19wcmludGYoImJ1ZmZlcl9maWVsZDogJVggYml0cyBhdCBieXRlICVYIGJpdCAlWCBvZlxuIiwKKwkJYWNwaV9vc19wcmludGYoIkJ1ZmZlckZpZWxkOiAlWCBiaXRzIGF0IGJ5dGUgJVggYml0ICVYIG9mXG4iLAogCQkJICAgICAgIG9ial9kZXNjLT5idWZmZXJfZmllbGQuYml0X2xlbmd0aCwKIAkJCSAgICAgICBvYmpfZGVzYy0+YnVmZmVyX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQsCiAJCQkgICAgICAgb2JqX2Rlc2MtPmJ1ZmZlcl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KTsKQEAgLTc3Nyw3ICs3ODEsNyBAQAogewogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiZXhfZHVtcF9vcGVyYW5kcyIpOworCUFDUElfRlVOQ1RJT05fTkFNRShleF9kdW1wX29wZXJhbmRzKTsKIAogCWlmICghaWRlbnQpIHsKIAkJaWRlbnQgPSAiPyI7CkBAIC05MDEsNyArOTA1LDcgQEAKIAkJCWFjcGlfb3NfcHJpbnRmKCJDb3VsZCBub3QgY29udmVydCBuYW1lIHRvIHBhdGhuYW1lXG4iKTsKIAkJfSBlbHNlIHsKIAkJCWFjcGlfb3NfcHJpbnRmKCIlc1xuIiwgKGNoYXIgKilyZXRfYnVmLnBvaW50ZXIpOwotCQkJQUNQSV9NRU1fRlJFRShyZXRfYnVmLnBvaW50ZXIpOworCQkJQUNQSV9GUkVFKHJldF9idWYucG9pbnRlcik7CiAJCX0KIAl9IGVsc2UgaWYgKG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0KSB7CiAJCWFjcGlfb3NfcHJpbnRmKCJcblJlZmVyZW5jZWQgT2JqZWN0OiAlcFxuIiwKQEAgLTEwMTcsNyArMTAyMSw3IEBACiB2b2lkCiBhY3BpX2V4X2R1bXBfb2JqZWN0X2Rlc2NyaXB0b3IodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsIHUzMiBmbGFncykKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9kdW1wX29iamVjdF9kZXNjcmlwdG9yIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9kdW1wX29iamVjdF9kZXNjcmlwdG9yKTsKIAogCWlmICghb2JqX2Rlc2MpIHsKIAkJcmV0dXJuX1ZPSUQ7CkBAIC0xMDQ2LDcgKzEwNTAsNyBAQAogCiAJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkgewogCQlhY3BpX29zX3ByaW50ZgotCQkgICAgKCJleF9kdW1wX29iamVjdF9kZXNjcmlwdG9yOiAlcCBpcyBub3QgYW4gQUNQSSBvcGVyYW5kIG9iamVjdDogWyVzXVxuIiwKKwkJICAgICgiRXhEdW1wT2JqZWN0RGVzY3JpcHRvcjogJXAgaXMgbm90IGFuIEFDUEkgb3BlcmFuZCBvYmplY3Q6IFslc11cbiIsCiAJCSAgICAgb2JqX2Rlc2MsIGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbmFtZShvYmpfZGVzYykpOwogCQlyZXR1cm5fVk9JRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmaWVsZC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmllbGQuYwppbmRleCBlMjU5MjAxLi45ZWE5YzNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmaWVsZC5jCkBAIC03Myw3ICs3Myw3IEBACiAJdm9pZCAqYnVmZmVyOwogCXU4IGxvY2tlZDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9yZWFkX2RhdGFfZnJvbV9maWVsZCIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9yZWFkX2RhdGFfZnJvbV9maWVsZCwgb2JqX2Rlc2MpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KIApAQCAtMTQyLDYgKzE0Miw3IEBACiAJbGVuZ3RoID0KIAkgICAgKGFjcGlfc2l6ZSkgQUNQSV9ST1VORF9CSVRTX1VQX1RPX0JZVEVTKG9ial9kZXNjLT5maWVsZC5iaXRfbGVuZ3RoKTsKIAlpZiAobGVuZ3RoID4gYWNwaV9nYmxfaW50ZWdlcl9ieXRlX3dpZHRoKSB7CisKIAkJLyogRmllbGQgaXMgdG9vIGxhcmdlIGZvciBhbiBJbnRlZ2VyLCBjcmVhdGUgYSBCdWZmZXIgaW5zdGVhZCAqLwogCiAJCWJ1ZmZlcl9kZXNjID0gYWNwaV91dF9jcmVhdGVfYnVmZmVyX29iamVjdChsZW5ndGgpOwpAQCAtMTYzLDExICsxNjQsMTEgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgImZpZWxkX3JlYWQgW1RPXTogIE9iaiAlcCwgVHlwZSAlWCwgQnVmICVwLCBieXRlX2xlbiAlWFxuIiwKKwkJCSAgIkZpZWxkUmVhZCBbVE9dOiAgIE9iaiAlcCwgVHlwZSAlWCwgQnVmICVwLCBCeXRlTGVuICVYXG4iLAogCQkJICBvYmpfZGVzYywgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLCBidWZmZXIsCiAJCQkgICh1MzIpIGxlbmd0aCkpOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJICAiZmllbGRfcmVhZCBbRlJPTV06IGJpdF9sZW4gJVgsIGJpdF9vZmYgJVgsIGJ5dGVfb2ZmICVYXG4iLAorCQkJICAiRmllbGRSZWFkIFtGUk9NXTogQml0TGVuICVYLCBCaXRPZmYgJVgsIEJ5dGVPZmYgJVhcbiIsCiAJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCwKIAkJCSAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0LAogCQkJICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQpKTsKQEAgLTIxOSw3ICsyMjAsNyBAQAogCXU4IGxvY2tlZDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF93cml0ZV9kYXRhX3RvX2ZpZWxkIiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3dyaXRlX2RhdGFfdG9fZmllbGQsIG9ial9kZXNjKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTMyOSw5ICszMzAsMTAgQEAKIAkgICAgQUNQSV9ST1VORF9CSVRTX1VQX1RPX0JZVEVTKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCk7CiAKIAlpZiAobGVuZ3RoIDwgcmVxdWlyZWRfbGVuZ3RoKSB7CisKIAkJLyogV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgYnVmZmVyICovCiAKLQkJbmV3X2J1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURShyZXF1aXJlZF9sZW5ndGgpOworCQluZXdfYnVmZmVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQocmVxdWlyZWRfbGVuZ3RoKTsKIAkJaWYgKCFuZXdfYnVmZmVyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtMzQ3LDE0ICszNDksMTQgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgImZpZWxkX3dyaXRlIFtGUk9NXTogT2JqICVwICglczolWCksIEJ1ZiAlcCwgYnl0ZV9sZW4gJVhcbiIsCisJCQkgICJGaWVsZFdyaXRlIFtGUk9NXTogT2JqICVwICglczolWCksIEJ1ZiAlcCwgQnl0ZUxlbiAlWFxuIiwKIAkJCSAgc291cmNlX2Rlc2MsCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShBQ1BJX0dFVF9PQkpFQ1RfVFlQRQogCQkJCQkJKHNvdXJjZV9kZXNjKSksCiAJCQkgIEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSwgYnVmZmVyLCBsZW5ndGgpKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJICAiZmllbGRfd3JpdGUgW1RPXTogIE9iaiAlcCAoJXM6JVgpLCBiaXRfbGVuICVYLCBiaXRfb2ZmICVYLCBieXRlX29mZiAlWFxuIiwKKwkJCSAgIkZpZWxkV3JpdGUgW1RPXTogICBPYmogJXAgKCVzOiVYKSwgQml0TGVuICVYLCBCaXRPZmYgJVgsIEJ5dGVPZmYgJVhcbiIsCiAJCQkgIG9ial9kZXNjLAogCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSwKIAkJCSAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLApAQCAtMzc1LDcgKzM3Nyw3IEBACiAJLyogRnJlZSB0ZW1wb3JhcnkgYnVmZmVyIGlmIHdlIHVzZWQgb25lICovCiAKIAlpZiAobmV3X2J1ZmZlcikgewotCQlBQ1BJX01FTV9GUkVFKG5ld19idWZmZXIpOworCQlBQ1BJX0ZSRUUobmV3X2J1ZmZlcik7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmbGRpby5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmxkaW8uYwppbmRleCBiZDFhZjM1Li4wNTEwNTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGZsZGlvLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZ25fZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJleF9zZXR1cF9yZWdpb24iLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoZXhfc2V0dXBfcmVnaW9uLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKIAlyZ25fZGVzYyA9IG9ial9kZXNjLT5jb21tb25fZmllbGQucmVnaW9uX29iajsKIApAQCAtMTEyLDcgKzExMiwxOCBAQAogCQl9CiAJfQogCisJLyogRXhpdCBpZiBBZGRyZXNzL0xlbmd0aCBoYXZlIGJlZW4gZGlzYWxsb3dlZCBieSB0aGUgaG9zdCBPUyAqLworCisJaWYgKHJnbl9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfSU5WQUxJRCkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0lMTEVHQUxfQUREUkVTUyk7CisJfQorCisJLyoKKwkgKiBFeGl0IG5vdyBmb3IgU01CdXMgYWRkcmVzcyBzcGFjZSwgaXQgaGFzIGEgbm9uLWxpbmVhciBhZGRyZXNzIHNwYWNlCisJICogYW5kIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBkaXJlY3RseSB2YWxpZGF0ZWQKKwkgKi8KIAlpZiAocmduX2Rlc2MtPnJlZ2lvbi5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TTUJVUykgeworCiAJCS8qIFNNQnVzIGhhcyBhIG5vbi1saW5lYXIgYWRkcmVzcyBzcGFjZSAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0xMzQsMTAgKzE0NSwxMCBAQAogCSAqIGxlbmd0aCBvZiBvbmUgZmllbGQgZGF0dW0gKGFjY2VzcyB3aWR0aCkgbXVzdCBmaXQgd2l0aGluIHRoZSByZWdpb24uCiAJICogKFJlZ2lvbiBsZW5ndGggaXMgc3BlY2lmaWVkIGluIGJ5dGVzKQogCSAqLwotCWlmIChyZ25fZGVzYy0+cmVnaW9uLmxlbmd0aCA8IChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQgKwotCQkJCSAgICAgICBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCArCi0JCQkJICAgICAgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCi0JCQkJICAgICAgIGFjY2Vzc19ieXRlX3dpZHRoKSkgeworCWlmIChyZ25fZGVzYy0+cmVnaW9uLmxlbmd0aCA8CisJICAgIChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQgKworCSAgICAgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQgKworCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCkpIHsKIAkJaWYgKGFjcGlfZ2JsX2VuYWJsZV9pbnRlcnByZXRlcl9zbGFjaykgewogCQkJLyoKIAkJCSAqIFNsYWNrIG1vZGUgb25seTogIFdlIHdpbGwgZ28gYWhlYWQgYW5kIGFsbG93IGFjY2VzcyB0byB0aGlzCkBAIC0yMTcsNyArMjI4LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZ25fZGVzYzsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2FjY2Vzc19yZWdpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2FjY2Vzc19yZWdpb24pOwogCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgcmVnaW9uIG9wZXJhbmRzIGFyZSBmdWxseSBldmFsdWF0ZWQgYW5kIHZlcmlmeQpAQCAtMjQ2LDcgKzI1Nyw3IEBACiAJfQogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfQkZJRUxELAotCQkJICAgICAgIiBSZWdpb24gWyVzOiVYXSwgV2lkdGggJVgsIGJ5dGVfYmFzZSAlWCwgT2Zmc2V0ICVYIGF0ICU4LjhYJTguOFhcbiIsCisJCQkgICAgICAiIFJlZ2lvbiBbJXM6JVhdLCBXaWR0aCAlWCwgQnl0ZUJhc2UgJVgsIE9mZnNldCAlWCBhdCAlOC44WCU4LjhYXG4iLAogCQkJICAgICAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmduX2Rlc2MtPnJlZ2lvbi4KIAkJCQkJCSAgICAgIHNwYWNlX2lkKSwKIAkJCSAgICAgIHJnbl9kZXNjLT5yZWdpb24uc3BhY2VfaWQsCkBAIC0zNTIsNyArMzYzLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9pbnRlZ2VyIGxvY2FsX3ZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoImV4X2ZpZWxkX2RhdHVtX2lvIiwgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV4X2ZpZWxkX2RhdHVtX2lvLCBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKIAlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1JFQUQpIHsKIAkJaWYgKCF2YWx1ZSkgewpAQCAtNDg3LDEwICs0OTgsMTEgQEAKIAkJfQogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCSAgIkkvTyB0byBEYXRhIFJlZ2lzdGVyOiB2YWx1ZV9wdHIgJXBcbiIsCisJCQkJICAiSS9PIHRvIERhdGEgUmVnaXN0ZXI6IFZhbHVlUHRyICVwXG4iLAogCQkJCSAgdmFsdWUpKTsKIAogCQlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1JFQUQpIHsKKwogCQkJLyogUmVhZCB0aGUgZGF0dW0gZnJvbSB0aGUgZGF0YV9yZWdpc3RlciAqLwogCiAJCQlzdGF0dXMgPQpAQCAtNTU5LDcgKzU3MSw3IEBACiAJYWNwaV9pbnRlZ2VyIG1lcmdlZF92YWx1ZTsKIAlhY3BpX2ludGVnZXIgY3VycmVudF92YWx1ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJleF93cml0ZV93aXRoX3VwZGF0ZV9ydWxlIiwgbWFzayk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSwgbWFzayk7CiAKIAkvKiBTdGFydCB3aXRoIHRoZSBuZXcgYml0cyAgKi8KIApAQCAtNTY4LDYgKzU4MCw3IEBACiAJLyogSWYgdGhlIG1hc2sgaXMgYWxsIG9uZXMsIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHVwZGF0ZSBydWxlICovCiAKIAlpZiAobWFzayAhPSBBQ1BJX0lOVEVHRVJfTUFYKSB7CisKIAkJLyogRGVjb2RlIHRoZSB1cGRhdGUgcnVsZSAqLwogCiAJCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KQEAgLTYxNCw3ICs2MjcsNyBAQAogCQlkZWZhdWx0OgogCiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiVW5rbm93biB1cGRhdGVfcnVsZSB2YWx1ZTogJVgiLAorCQkJCSAgICAiVW5rbm93biBVcGRhdGVSdWxlIHZhbHVlOiAlWCIsCiAJCQkJICAgIChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLgogCQkJCSAgICAgZmllbGRfZmxhZ3MgJgogCQkJCSAgICAgQU1MX0ZJRUxEX1VQREFURV9SVUxFX01BU0spKSk7CkBAIC02MjMsNyArNjM2LDcgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgIk1hc2sgJTguOFglOC44WCwgZGF0dW1fb2Zmc2V0ICVYLCBXaWR0aCAlWCwgVmFsdWUgJTguOFglOC44WCwgbWVyZ2VkX3ZhbHVlICU4LjhYJTguOFhcbiIsCisJCQkgICJNYXNrICU4LjhYJTguOFgsIERhdHVtT2Zmc2V0ICVYLCBXaWR0aCAlWCwgVmFsdWUgJTguOFglOC44WCwgTWVyZ2VkVmFsdWUgJTguOFglOC44WFxuIiwKIAkJCSAgQUNQSV9GT1JNQVRfVUlOVDY0KG1hc2spLAogCQkJICBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCwKIAkJCSAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCwKQEAgLTY2Niw3ICs2NzksNyBAQAogCXUzMiBmaWVsZF9kYXR1bV9jb3VudDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2V4dHJhY3RfZnJvbV9maWVsZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZXh0cmFjdF9mcm9tX2ZpZWxkKTsKIAogCS8qIFZhbGlkYXRlIHRhcmdldCBidWZmZXIgYW5kIGNsZWFyIGl0ICovCiAKQEAgLTcwNCw2ICs3MTcsNyBAQAogCS8qIFJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZpZWxkICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgZmllbGRfZGF0dW1fY291bnQ7IGkrKykgeworCiAJCS8qIEdldCBuZXh0IGlucHV0IGRhdHVtIGZyb20gdGhlIGZpZWxkICovCiAKIAkJZmllbGRfb2Zmc2V0ICs9IG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2J5dGVfd2lkdGg7CkBAIC03NzEsNiArNzg1LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9pbnRlZ2VyIG1hc2s7CisJYWNwaV9pbnRlZ2VyIHdpZHRoX21hc2s7CiAJYWNwaV9pbnRlZ2VyIG1lcmdlZF9kYXR1bTsKIAlhY3BpX2ludGVnZXIgcmF3X2RhdHVtID0gMDsKIAl1MzIgZmllbGRfb2Zmc2V0ID0gMDsKQEAgLTc4MCw3ICs3OTUsNyBAQAogCXUzMiBmaWVsZF9kYXR1bV9jb3VudDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2luc2VydF9pbnRvX2ZpZWxkIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9pbnNlcnRfaW50b19maWVsZCk7CiAKIAkvKiBWYWxpZGF0ZSBpbnB1dCBidWZmZXIgKi8KIApAQCAtNzk1LDE1ICs4MTAsMjAgQEAKIAogCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBkYXR1bXMgKGFjY2VzcyB3aWR0aCBkYXRhIGl0ZW1zKSAqLwogCisJd2lkdGhfbWFzayA9CisJICAgIEFDUElfTUFTS19CSVRTX0FCT1ZFKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCk7CiAJbWFzayA9Ci0JICAgIEFDUElfTUFTS19CSVRTX0JFTE9XKG9ial9kZXNjLT5jb21tb25fZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCk7Ci0JZGF0dW1fY291bnQgPQotCSAgICBBQ1BJX1JPVU5EX1VQX1RPKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCwKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYml0X3dpZHRoKTsKLQlmaWVsZF9kYXR1bV9jb3VudCA9Ci0JICAgIEFDUElfUk9VTkRfVVBfVE8ob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iaXRfbGVuZ3RoICsKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0LAotCQkJICAgICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmFjY2Vzc19iaXRfd2lkdGgpOworCSAgICB3aWR0aF9tYXNrICYgQUNQSV9NQVNLX0JJVFNfQkVMT1cob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KKwkJCQkJICAgICAgc3RhcnRfZmllbGRfYml0X29mZnNldCk7CisKKwlkYXR1bV9jb3VudCA9IEFDUElfUk9VTkRfVVBfVE8ob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iaXRfbGVuZ3RoLAorCQkJCSAgICAgICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmFjY2Vzc19iaXRfd2lkdGgpOworCisJZmllbGRfZGF0dW1fY291bnQgPSBBQ1BJX1JPVU5EX1VQX1RPKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCArCisJCQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KKwkJCQkJICAgICBzdGFydF9maWVsZF9iaXRfb2Zmc2V0LAorCQkJCQkgICAgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCisJCQkJCSAgICAgYWNjZXNzX2JpdF93aWR0aCk7CiAKIAkvKiBHZXQgaW5pdGlhbCBEYXR1bSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgKi8KIApAQCAtODE3LDYgKzgzNyw3IEBACiAJLyogV3JpdGUgdGhlIGVudGlyZSBmaWVsZCAqLwogCiAJZm9yIChpID0gMTsgaSA8IGZpZWxkX2RhdHVtX2NvdW50OyBpKyspIHsKKwogCQkvKiBXcml0ZSBtZXJnZWQgZGF0dW0gdG8gdGhlIHRhcmdldCBmaWVsZCAqLwogCiAJCW1lcmdlZF9kYXR1bSAmPSBtYXNrOwpAQCAtODMzLDcgKzg1NCw3IEBACiAJCW1lcmdlZF9kYXR1bSA9IHJhd19kYXR1bSA+PgogCQkgICAgKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCAtCiAJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KTsKLQkJbWFzayA9IEFDUElfSU5URUdFUl9NQVg7CisJCW1hc2sgPSB3aWR0aF9tYXNrOwogCiAJCWlmIChpID09IGRhdHVtX2NvdW50KSB7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG1pc2MuYwppbmRleCA0OGMxOGQyLi5iZDk4YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bWlzYy5jCkBAIC03Miw3ICs3Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVmZXJlbmNlX29iajsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWZlcmVuY2VkX29iajsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9nZXRfb2JqZWN0X3JlZmVyZW5jZSIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9nZXRfb2JqZWN0X3JlZmVyZW5jZSwgb2JqX2Rlc2MpOwogCiAJKnJldHVybl9kZXNjID0gTlVMTDsKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAJYWNwaV9zaXplIGxlbmd0aDE7CiAJYWNwaV9zaXplIG5ld19sZW5ndGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9jb25jYXRfdGVtcGxhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2NvbmNhdF90ZW1wbGF0ZSk7CiAKIAkvKgogCSAqIEZpbmQgdGhlIGVuZF90YWcgZGVzY3JpcHRvciBpbiBlYWNoIHJlc291cmNlIHRlbXBsYXRlLgpAQCAtMjUwLDcgKzI1MCw3IEBACiAJY2hhciAqbmV3X2J1ZjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9kb19jb25jYXRlbmF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZG9fY29uY2F0ZW5hdGUpOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRoZSBzZWNvbmQgb3BlcmFuZCBpZiBuZWNlc3NhcnkuICBUaGUgZmlyc3Qgb3BlcmFuZApAQCAtNDQ1LDEwICs0NDUsMjQgQEAKIAogCWNhc2UgQU1MX1NISUZUX0xFRlRfT1A6CS8qIHNoaWZ0X2xlZnQgKE9wZXJhbmQsIHNoaWZ0X2NvdW50LCBSZXN1bHQpICovCiAKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgc2hpZnRjb3VudCBpcyBsYXJnZXIgdGhhbiB0aGUgaW50ZWdlciBiaXQKKwkJICogd2lkdGggc2luY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgbm90IHdlbGwtZGVmaW5lZCBpbiB0aGUgQyBsYW5ndWFnZS4KKwkJICovCisJCWlmIChpbnRlZ2VyMSA+PSBhY3BpX2dibF9pbnRlZ2VyX2JpdF93aWR0aCkgeworCQkJcmV0dXJuICgwKTsKKwkJfQogCQlyZXR1cm4gKGludGVnZXIwIDw8IGludGVnZXIxKTsKIAogCWNhc2UgQU1MX1NISUZUX1JJR0hUX09QOgkvKiBzaGlmdF9yaWdodCAoT3BlcmFuZCwgc2hpZnRfY291bnQsIFJlc3VsdCkgKi8KIAorCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzaGlmdGNvdW50IGlzIGxhcmdlciB0aGFuIHRoZSBpbnRlZ2VyIGJpdAorCQkgKiB3aWR0aCBzaW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBpcyBub3Qgd2VsbC1kZWZpbmVkIGluIHRoZSBDIGxhbmd1YWdlLgorCQkgKi8KKwkJaWYgKGludGVnZXIxID49IGFjcGlfZ2JsX2ludGVnZXJfYml0X3dpZHRoKSB7CisJCQlyZXR1cm4gKDApOworCQl9CiAJCXJldHVybiAoaW50ZWdlcjAgPj4gaW50ZWdlcjEpOwogCiAJY2FzZSBBTUxfU1VCVFJBQ1RfT1A6CS8qIFN1YnRyYWN0IChJbnRlZ2VyMCwgSW50ZWdlcjEsIFJlc3VsdCkgKi8KQEAgLTQ4OSw3ICs1MDMsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXU4IGxvY2FsX3Jlc3VsdCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfZG9fbG9naWNhbF9udW1lcmljX29wIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9kb19sb2dpY2FsX251bWVyaWNfb3ApOwogCiAJc3dpdGNoIChvcGNvZGUpIHsKIAljYXNlIEFNTF9MQU5EX09QOgkvKiBMQW5kIChJbnRlZ2VyMCwgSW50ZWdlcjEpICovCkBAIC01NTcsNyArNTcxLDcgQEAKIAl1OCBsb2NhbF9yZXN1bHQgPSBGQUxTRTsKIAlpbnQgY29tcGFyZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2RvX2xvZ2ljYWxfb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2RvX2xvZ2ljYWxfb3ApOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRoZSBzZWNvbmQgb3BlcmFuZCBpZiBuZWNlc3NhcnkuICBUaGUgZmlyc3Qgb3BlcmFuZApAQCAtNjQ5LDYgKzY2Myw3IEBACiAJCQkvKiBMZW5ndGggYW5kIGFsbCBieXRlcyBtdXN0IGJlIGVxdWFsICovCiAKIAkJCWlmICgobGVuZ3RoMCA9PSBsZW5ndGgxKSAmJiAoY29tcGFyZSA9PSAwKSkgeworCiAJCQkJLyogTGVuZ3RoIGFuZCBhbGwgYnl0ZXMgbWF0Y2ggPT0+IFRSVUUgKi8KIAogCQkJCWxvY2FsX3Jlc3VsdCA9IFRSVUU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bXV0ZXguYwppbmRleCBmODQzYjIyLi45MzA5OGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMKQEAgLTYxLDcgKzYxLDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBtdXRleCBmcm9tIHRoZSAiYWNxdWlyZWRfbXV0ZXgiIGxpc3QKKyAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYSBtdXRleCBmcm9tIHRoZSAiQWNxdWlyZWRNdXRleCIgbGlzdAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk1LDcgKzk1LDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBBZGQgYSBtdXRleCB0byB0aGUgImFjcXVpcmVkX211dGV4IiBsaXN0IGZvciB0aGlzIHdhbGsKKyAqIERFU0NSSVBUSU9OOiBBZGQgYSBtdXRleCB0byB0aGUgIkFjcXVpcmVkTXV0ZXgiIGxpc3QgZm9yIHRoaXMgd2FsawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9hY3F1aXJlX211dGV4Iiwgb2JqX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2FjcXVpcmVfbXV0ZXgsIG9ial9kZXNjKTsKIAogCWlmICghb2JqX2Rlc2MpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJICovCiAJaWYgKHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsID4gb2JqX2Rlc2MtPm11dGV4LnN5bmNfbGV2ZWwpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiQ2Fubm90IGFjcXVpcmUgTXV0ZXggWyU0LjRzXSwgaW5jb3JyZWN0IHN5bmNfbGV2ZWwiLAorCQkJICAgICJDYW5ub3QgYWNxdWlyZSBNdXRleCBbJTQuNHNdLCBpbmNvcnJlY3QgU3luY0xldmVsIiwKIAkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUob2JqX2Rlc2MtPm11dGV4Lm5vZGUpKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTVVURVhfT1JERVIpOwogCX0KQEAgLTE3Myw2ICsxNzMsNyBAQAogCS8qIFN1cHBvcnQgZm9yIG11bHRpcGxlIGFjcXVpcmVzIGJ5IHRoZSBvd25pbmcgdGhyZWFkICovCiAKIAlpZiAob2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZCkgeworCiAJCS8qIFNwZWNpYWwgY2FzZSBmb3IgR2xvYmFsIExvY2ssIGFsbG93IGFsbCB0aHJlYWRzICovCiAKIAkJaWYgKChvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkLT50aHJlYWRfaWQgPT0KQEAgLTE5Miw2ICsxOTMsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9leF9zeXN0ZW1fYWNxdWlyZV9tdXRleCh0aW1lX2Rlc2MsIG9ial9kZXNjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBJbmNsdWRlcyBmYWlsdXJlIGZyb20gYSB0aW1lb3V0IG9uIHRpbWVfZGVzYyAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtMjMyLDcgKzIzNCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcmVsZWFzZV9tdXRleCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfcmVsZWFzZV9tdXRleCk7CiAKIAlpZiAoIW9ial9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTI3Nyw3ICsyNzksNyBAQAogCSAqLwogCWlmIChvYmpfZGVzYy0+bXV0ZXguc3luY19sZXZlbCA+IHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkNhbm5vdCByZWxlYXNlIE11dGV4IFslNC40c10sIGluY29ycmVjdCBzeW5jX2xldmVsIiwKKwkJCSAgICAiQ2Fubm90IHJlbGVhc2UgTXV0ZXggWyU0LjRzXSwgaW5jb3JyZWN0IFN5bmNMZXZlbCIsCiAJCQkgICAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG9ial9kZXNjLT5tdXRleC5ub2RlKSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX01VVEVYX09SREVSKTsKIAl9CkBAIC0yODYsNiArMjg4LDcgQEAKIAogCW9ial9kZXNjLT5tdXRleC5hY3F1aXNpdGlvbl9kZXB0aC0tOwogCWlmIChvYmpfZGVzYy0+bXV0ZXguYWNxdWlzaXRpb25fZGVwdGggIT0gMCkgeworCiAJCS8qIEp1c3QgZGVjcmVtZW50IHRoZSBkZXB0aCBhbmQgcmV0dXJuICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG5hbWVzLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhuYW1lcy5jCmluZGV4IDA1NGZlNWUuLmQzZDcwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG5hbWVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bmFtZXMuYwpAQCAtNzcsNyArNzcsNyBAQAogCWNoYXIgKm5hbWVfc3RyaW5nOwogCXUzMiBzaXplX25lZWRlZDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2FsbG9jYXRlX25hbWVfc3RyaW5nIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9hbGxvY2F0ZV9uYW1lX3N0cmluZyk7CiAKIAkvKgogCSAqIEFsbG93IHJvb20gZm9yIGFsbCBcIGFuZCBeIHByZWZpeGVzLCBhbGwgc2VnbWVudHMgYW5kIGEgbXVsdGlfbmFtZV9wcmVmaXguCkBAIC04NSw2ICs4NSw3IEBACiAJICogVGhpcyBtYXkgYWN0dWFsbHkgYmUgc29tZXdoYXQgbG9uZ2VyIHRoYW4gbmVlZGVkLgogCSAqLwogCWlmIChwcmVmaXhfY291bnQgPT0gQUNQSV9VSU5UMzJfTUFYKSB7CisKIAkJLyogU3BlY2lhbCBjYXNlIGZvciByb290ICovCiAKIAkJc2l6ZV9uZWVkZWQgPSAxICsgKEFDUElfTkFNRV9TSVpFICogbnVtX25hbWVfc2VncykgKyAyICsgMTsKQEAgLTk3LDcgKzk4LDcgQEAKIAkgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgdGhlIG5hbWUuCiAJICogVGhpcyBidWZmZXIgbXVzdCBiZSBkZWxldGVkIGJ5IHRoZSBjYWxsZXIhCiAJICovCi0JbmFtZV9zdHJpbmcgPSBBQ1BJX01FTV9BTExPQ0FURShzaXplX25lZWRlZCk7CisJbmFtZV9zdHJpbmcgPSBBQ1BJX0FMTE9DQVRFKHNpemVfbmVlZGVkKTsKIAlpZiAoIW5hbWVfc3RyaW5nKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaXplICVkIiwgc2l6ZV9uZWVkZWQpKTsKQEAgLTExOSwxMSArMTIwLDEzIEBACiAJLyogU2V0IHVwIER1YWwgb3IgTXVsdGkgcHJlZml4ZXMgaWYgbmVlZGVkICovCiAKIAlpZiAobnVtX25hbWVfc2VncyA+IDIpIHsKKwogCQkvKiBTZXQgdXAgbXVsdGkgcHJlZml4ZXMgICAqLwogCiAJCSp0ZW1wX3B0cisrID0gQU1MX01VTFRJX05BTUVfUFJFRklYX09QOwogCQkqdGVtcF9wdHIrKyA9IChjaGFyKW51bV9uYW1lX3NlZ3M7CiAJfSBlbHNlIGlmICgyID09IG51bV9uYW1lX3NlZ3MpIHsKKwogCQkvKiBTZXQgdXAgZHVhbCBwcmVmaXhlcyAqLwogCiAJCSp0ZW1wX3B0cisrID0gQU1MX0RVQUxfTkFNRV9QUkVGSVg7CkBAIC0xNTksNyArMTYyLDcgQEAKIAl1MzIgaW5kZXg7CiAJY2hhciBjaGFyX2J1Zls1XTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X25hbWVfc2VnbWVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfbmFtZV9zZWdtZW50KTsKIAogCS8qCiAJICogSWYgZmlyc3QgY2hhcmFjdGVyIGlzIGEgZGlnaXQsIHRoZW4gd2Uga25vdyB0aGF0IHdlIGFyZW4ndCBsb29raW5nIGF0IGEKQEAgLTE3Niw3ICsxNzksNyBAQAogCiAJZm9yIChpbmRleCA9IDA7CiAJICAgICAoaW5kZXggPCBBQ1BJX05BTUVfU0laRSkKLQkgICAgICYmIChhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcmFjdGVyKCphbWxfYWRkcmVzcykpOyBpbmRleCsrKSB7CisJICAgICAmJiAoYWNwaV91dF92YWxpZF9hY3BpX2NoYXIoKmFtbF9hZGRyZXNzLCAwKSk7IGluZGV4KyspIHsKIAkJY2hhcl9idWZbaW5kZXhdID0gKmFtbF9hZGRyZXNzKys7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwgIiVjXG4iLCBjaGFyX2J1ZltpbmRleF0pKTsKIAl9CkBAIC0xODQsNiArMTg3LDcgQEAKIAkvKiBWYWxpZCBuYW1lIHNlZ21lbnQgICovCiAKIAlpZiAoaW5kZXggPT0gNCkgeworCiAJCS8qIEZvdW5kIDQgdmFsaWQgY2hhcmFjdGVycyAqLwogCiAJCWNoYXJfYnVmWzRdID0gJ1wwJzsKQEAgLTI0OSwxMSArMjUzLDEyIEBACiAJdTMyIHByZWZpeF9jb3VudCA9IDA7CiAJdTggaGFzX3ByZWZpeCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2dldF9uYW1lX3N0cmluZyIsIGFtbF9hZGRyZXNzKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9nZXRfbmFtZV9zdHJpbmcsIGFtbF9hZGRyZXNzKTsKIAogCWlmIChBQ1BJX1RZUEVfTE9DQUxfUkVHSU9OX0ZJRUxEID09IGRhdGFfdHlwZSB8fAogCSAgICBBQ1BJX1RZUEVfTE9DQUxfQkFOS19GSUVMRCA9PSBkYXRhX3R5cGUgfHwKIAkgICAgQUNQSV9UWVBFX0xPQ0FMX0lOREVYX0ZJRUxEID09IGRhdGFfdHlwZSkgeworCiAJCS8qIERpc2FsbG93IHByZWZpeGVzIGZvciB0eXBlcyBhc3NvY2lhdGVkIHdpdGggZmllbGRfdW5pdCBuYW1lcyAqLwogCiAJCW5hbWVfc3RyaW5nID0gYWNwaV9leF9hbGxvY2F0ZV9uYW1lX3N0cmluZygwLCAxKTsKQEAgLTI3Miw3ICsyNzcsNyBAQAogCQljYXNlIEFNTF9ST09UX1BSRUZJWDoKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9MT0FELAotCQkJCQkgICJyb290X3ByZWZpeChcXCkgYXQgJXBcbiIsCisJCQkJCSAgIlJvb3RQcmVmaXgoXFwpIGF0ICVwXG4iLAogCQkJCQkgIGFtbF9hZGRyZXNzKSk7CiAKIAkJCS8qCkBAIC0yOTAsNyArMjk1LDcgQEAKIAogCQkJZG8gewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKLQkJCQkJCSAgInBhcmVudF9wcmVmaXggKF4pIGF0ICVwXG4iLAorCQkJCQkJICAiUGFyZW50UHJlZml4ICheKSBhdCAlcFxuIiwKIAkJCQkJCSAgYW1sX2FkZHJlc3MpKTsKIAogCQkJCWFtbF9hZGRyZXNzKys7CkBAIC0zMTQsNyArMzE5LDcgQEAKIAkJY2FzZSBBTUxfRFVBTF9OQU1FX1BSRUZJWDoKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9MT0FELAotCQkJCQkgICJkdWFsX25hbWVfcHJlZml4IGF0ICVwXG4iLAorCQkJCQkgICJEdWFsTmFtZVByZWZpeCBhdCAlcFxuIiwKIAkJCQkJICBhbWxfYWRkcmVzcykpOwogCiAJCQlhbWxfYWRkcmVzcysrOwpAQCAtMzQxLDcgKzM0Niw3IEBACiAJCWNhc2UgQU1MX01VTFRJX05BTUVfUFJFRklYX09QOgogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0xPQUQsCi0JCQkJCSAgIm11bHRpX25hbWVfcHJlZml4IGF0ICVwXG4iLAorCQkJCQkgICJNdWx0aU5hbWVQcmVmaXggYXQgJXBcbiIsCiAJCQkJCSAgYW1sX2FkZHJlc3MpKTsKIAogCQkJLyogRmV0Y2ggY291bnQgb2Ygc2VnbWVudHMgcmVtYWluaW5nIGluIG5hbWUgcGF0aCAqLwpAQCAtMzc3LDcgKzM4Miw3IEBACiAKIAkJCWlmIChwcmVmaXhfY291bnQgPT0gQUNQSV9VSU5UMzJfTUFYKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkJICAibmFtZV9zZWcgaXMgXCJcXFwiIGZvbGxvd2VkIGJ5IE5VTExcbiIpKTsKKwkJCQkJCSAgIk5hbWVTZWcgaXMgXCJcXFwiIGZvbGxvd2VkIGJ5IE5VTExcbiIpKTsKIAkJCX0KIAogCQkJLyogQ29uc3VtZSB0aGUgTlVMTCBieXRlICovCkBAIC00MTAsNiArNDE1LDcgQEAKIAl9CiAKIAlpZiAoQUVfQ1RSTF9QRU5ESU5HID09IHN0YXR1cyAmJiBoYXNfcHJlZml4KSB7CisKIAkJLyogUmFuIG91dCBvZiBzZWdtZW50cyBhZnRlciBwcm9jZXNzaW5nIGEgcHJlZml4ICovCiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk1hbGZvcm1lZCBOYW1lIGF0ICVwIiwgbmFtZV9zdHJpbmcpKTsKQEAgLTQxOCw3ICs0MjQsNyBAQAogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChuYW1lX3N0cmluZykgewotCQkJQUNQSV9NRU1fRlJFRShuYW1lX3N0cmluZyk7CisJCQlBQ1BJX0ZSRUUobmFtZV9zdHJpbmcpOwogCQl9CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMS5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcxLmMKaW5kZXggMjNkMDgyMy4uNjM3NGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcxLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4b3BhcmcxLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzBBXzBUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMEFfMFRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGFtaW5lIHRoZSBBTUwgb3Bjb2RlICovCkBAIC0xNTAsNyArMTUwLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqb3BlcmFuZCA9ICZ3YWxrX3N0YXRlLT5vcGVyYW5kc1swXTsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKCJleF9vcGNvZGVfMUFfMFRfMFIiLAorCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGV4X29wY29kZV8xQV8wVF8wUiwKIAkJCQlhY3BpX3BzX2dldF9vcGNvZGVfbmFtZSh3YWxrX3N0YXRlLT5vcGNvZGUpKTsKIAogCS8qIEV4YW1pbmUgdGhlIEFNTCBvcGNvZGUgKi8KQEAgLTIxNiw3ICsyMTYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipvcGVyYW5kID0gJndhbGtfc3RhdGUtPm9wZXJhbmRzWzBdOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8xQV8xVF8wUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzFBXzFUXzBSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogRXhhbWluZSB0aGUgQU1MIG9wY29kZSAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJYWNwaV9pbnRlZ2VyIHBvd2VyX29mX3RlbjsKIAlhY3BpX2ludGVnZXIgZGlnaXQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzFBXzFUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMUFfMVRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGFtaW5lIHRoZSBBTUwgb3Bjb2RlICovCkBAIC0zMjIsOCArMzIyLDkgQEAKIAogCQkJLyogU2luY2UgdGhlIGJpdCBwb3NpdGlvbiBpcyBvbmUtYmFzZWQsIHN1YnRyYWN0IGZyb20gMzMgKDY1KSAqLwogCi0JCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9IHRlbXAzMiA9PSAwID8gMCA6Ci0JCQkgICAgKEFDUElfSU5URUdFUl9CSVRfU0laRSArIDEpIC0gdGVtcDMyOworCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPQorCQkJICAgIHRlbXAzMiA9PQorCQkJICAgIDAgPyAwIDogKEFDUElfSU5URUdFUl9CSVRfU0laRSArIDEpIC0gdGVtcDMyOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBTUxfRlJPTV9CQ0RfT1A6CS8qIGZyb21fYmNkIChCQ0RWYWx1ZSwgUmVzdWx0KSAqLwpAQCAtMzQyLDYgKzM0Myw3IEBACiAJCQlmb3IgKGkgPSAwOwogCQkJICAgICAoaSA8IGFjcGlfZ2JsX2ludGVnZXJfbnliYmxlX3dpZHRoKSAmJiAoZGlnaXQgPiAwKTsKIAkJCSAgICAgaSsrKSB7CisKIAkJCQkvKiBHZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IDQtYml0IEJDRCBkaWdpdCAqLwogCiAJCQkJdGVtcDMyID0gKCh1MzIpIGRpZ2l0KSAmIDB4RjsKQEAgLTQ4Nyw2ICs0ODksNyBAQAogCQlzdGF0dXMgPSBhY3BpX2V4X2NvbnZlcnRfdG9fc3RyaW5nKG9wZXJhbmRbMF0sICZyZXR1cm5fZGVzYywKIAkJCQkJCSAgIEFDUElfRVhQTElDSVRfQ09OVkVSVF9ERUNJTUFMKTsKIAkJaWYgKHJldHVybl9kZXNjID09IG9wZXJhbmRbMF0pIHsKKwogCQkJLyogTm8gY29udmVyc2lvbiBwZXJmb3JtZWQsIGFkZCByZWYgdG8gaGFuZGxlIHJldHVybiB2YWx1ZSAqLwogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNDk3LDYgKzUwMCw3IEBACiAJCXN0YXR1cyA9IGFjcGlfZXhfY29udmVydF90b19zdHJpbmcob3BlcmFuZFswXSwgJnJldHVybl9kZXNjLAogCQkJCQkJICAgQUNQSV9FWFBMSUNJVF9DT05WRVJUX0hFWCk7CiAJCWlmIChyZXR1cm5fZGVzYyA9PSBvcGVyYW5kWzBdKSB7CisKIAkJCS8qIE5vIGNvbnZlcnNpb24gcGVyZm9ybWVkLCBhZGQgcmVmIHRvIGhhbmRsZSByZXR1cm4gdmFsdWUgKi8KIAkJCWFjcGlfdXRfYWRkX3JlZmVyZW5jZShyZXR1cm5fZGVzYyk7CiAJCX0KQEAgLTUwNiw2ICs1MTAsNyBAQAogCiAJCXN0YXR1cyA9IGFjcGlfZXhfY29udmVydF90b19idWZmZXIob3BlcmFuZFswXSwgJnJldHVybl9kZXNjKTsKIAkJaWYgKHJldHVybl9kZXNjID09IG9wZXJhbmRbMF0pIHsKKwogCQkJLyogTm8gY29udmVyc2lvbiBwZXJmb3JtZWQsIGFkZCByZWYgdG8gaGFuZGxlIHJldHVybiB2YWx1ZSAqLwogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNTE2LDYgKzUyMSw3IEBACiAJCXN0YXR1cyA9IGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyKG9wZXJhbmRbMF0sICZyZXR1cm5fZGVzYywKIAkJCQkJCSAgICBBQ1BJX0FOWV9CQVNFKTsKIAkJaWYgKHJldHVybl9kZXNjID09IG9wZXJhbmRbMF0pIHsKKwogCQkJLyogTm8gY29udmVyc2lvbiBwZXJmb3JtZWQsIGFkZCByZWYgdG8gaGFuZGxlIHJldHVybiB2YWx1ZSAqLwogCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAkJfQpAQCAtNTQxLDYgKzU0Nyw3IEBACiAJfQogCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJLyogU3RvcmUgdGhlIHJldHVybiB2YWx1ZSBjb21wdXRlZCBhYm92ZSBpbnRvIHRoZSB0YXJnZXQgb2JqZWN0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9zdG9yZShyZXR1cm5fZGVzYywgb3BlcmFuZFsxXSwgd2Fsa19zdGF0ZSk7CkBAIC01NDgsMTYgKzU1NSwxOCBAQAogCiAgICAgICBjbGVhbnVwOgogCi0JaWYgKCF3YWxrX3N0YXRlLT5yZXN1bHRfb2JqKSB7Ci0JCXdhbGtfc3RhdGUtPnJlc3VsdF9vYmogPSByZXR1cm5fZGVzYzsKLQl9Ci0KIAkvKiBEZWxldGUgcmV0dXJuIG9iamVjdCBvbiBlcnJvciAqLwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fZGVzYyk7CiAJfQogCisJLyogU2F2ZSByZXR1cm4gb2JqZWN0IG9uIHN1Y2Nlc3MgKi8KKworCWVsc2UgaWYgKCF3YWxrX3N0YXRlLT5yZXN1bHRfb2JqKSB7CisJCXdhbGtfc3RhdGUtPnJlc3VsdF9vYmogPSByZXR1cm5fZGVzYzsKKwl9CisKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtNTgyLDcgKzU5MSw3IEBACiAJdTMyIHR5cGU7CiAJYWNwaV9pbnRlZ2VyIHZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8xQV8wVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzFBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogRXhhbWluZSB0aGUgQU1MIG9wY29kZSAqLwpAQCAtNjI1LDYgKzYzNCw3IEBACiAJCXRlbXBfZGVzYyA9IG9wZXJhbmRbMF07CiAJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUodGVtcF9kZXNjKSA9PQogCQkgICAgQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkgeworCiAJCQkvKiBJbnRlcm5hbCByZWZlcmVuY2Ugb2JqZWN0IC0gcHJldmVudCBkZWxldGlvbiAqLwogCiAJCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2UodGVtcF9kZXNjKTsKQEAgLTY4OSw2ICs2OTksNyBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQorCiAJCS8qIEFsbG9jYXRlIGEgZGVzY3JpcHRvciB0byBob2xkIHRoZSB0eXBlLiAqLwogCiAJCXJldHVybl9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKQEAgLTc3Nyw4ICs3ODgsMjUgQEAKIAogCQkvKiBDaGVjayBmb3IgYSBtZXRob2QgbG9jYWwgb3IgYXJndW1lbnQsIG9yIHN0YW5kYWxvbmUgU3RyaW5nICovCiAKLQkJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvcGVyYW5kWzBdKSAhPQorCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9wZXJhbmRbMF0pID09CiAJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCQkJdGVtcF9kZXNjID0KKwkJCSAgICBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3QoKHN0cnVjdAorCQkJCQkJCSBhY3BpX25hbWVzcGFjZV9ub2RlICopCisJCQkJCQkJb3BlcmFuZFswXSk7CisJCQlpZiAodGVtcF9kZXNjCisJCQkgICAgJiYKKwkJCSAgICAoKEFDUElfR0VUX09CSkVDVF9UWVBFKHRlbXBfZGVzYykgPT0KKwkJCSAgICAgIEFDUElfVFlQRV9TVFJJTkcpCisJCQkgICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSh0ZW1wX2Rlc2MpID09CisJCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSkgeworCQkJCW9wZXJhbmRbMF0gPSB0ZW1wX2Rlc2M7CisJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHRlbXBfZGVzYyk7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9IGVsc2UgewogCQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kWzBdKSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCQkJCS8qCkBAIC04MjcsMjYgKzg1NSwzNSBAQAogCQkJCWJyZWFrOwogCiAJCQljYXNlIEFDUElfVFlQRV9TVFJJTkc6CisJCQkJYnJlYWs7CiAKKwkJCWRlZmF1bHQ6CisJCQkJc3RhdHVzID0gQUVfQU1MX09QRVJBTkRfVFlQRTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKworCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9wZXJhbmRbMF0pICE9CisJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmRbMF0pID09CisJCQkgICAgQUNQSV9UWVBFX1NUUklORykgewogCQkJCS8qCiAJCQkJICogVGhpcyBpcyBhIGRlcmVmX29mIChTdHJpbmcpLiBUaGUgc3RyaW5nIGlzIGEgcmVmZXJlbmNlCiAJCQkJICogdG8gYSBuYW1lZCBBQ1BJIG9iamVjdC4KIAkJCQkgKgogCQkJCSAqIDEpIEZpbmQgdGhlIG93bmluZyBOb2RlCi0JCQkJICogMikgRGVyZWZlcmVuY2UgdGhlIG5vZGUgdG8gYW4gYWN0dWFsIG9iamVjdC4gIENvdWxkIGJlIGEKKwkJCQkgKiAyKSBEZXJlZmVyZW5jZSB0aGUgbm9kZSB0byBhbiBhY3R1YWwgb2JqZWN0LiBDb3VsZCBiZSBhCiAJCQkJICogICAgRmllbGQsIHNvIHdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgbm9kZSB0byBhIHZhbHVlLgogCQkJCSAqLwogCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aChvcGVyYW5kWzBdLT5zdHJpbmcuCi0JCQkJCQkJICAgICBwb2ludGVyLAotCQkJCQkJCSAgICAgd2Fsa19zdGF0ZS0+Ci0JCQkJCQkJICAgICBzY29wZV9pbmZvLT5zY29wZS4KLQkJCQkJCQkgICAgIG5vZGUsCi0JCQkJCQkJICAgICBBQ1BJX05TX1NFQVJDSF9QQVJFTlQsCi0JCQkJCQkJICAgICBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSCi0JCQkJCQkJICAgICAoc3RydWN0Ci0JCQkJCQkJICAgICAgYWNwaV9uYW1lc3BhY2Vfbm9kZSwKLQkJCQkJCQkgICAgICAmcmV0dXJuX2Rlc2MpKTsKKwkJCQkgICAgYWNwaV9uc19nZXRfbm9kZSh3YWxrX3N0YXRlLT5zY29wZV9pbmZvLT4KKwkJCQkJCSAgICAgc2NvcGUubm9kZSwKKwkJCQkJCSAgICAgb3BlcmFuZFswXS0+c3RyaW5nLnBvaW50ZXIsCisJCQkJCQkgICAgIEFDUElfTlNfU0VBUkNIX1BBUkVOVCwKKwkJCQkJCSAgICAgQUNQSV9DQVNUX0lORElSRUNUX1BUUgorCQkJCQkJICAgICAoc3RydWN0CisJCQkJCQkgICAgICBhY3BpX25hbWVzcGFjZV9ub2RlLAorCQkJCQkJICAgICAgJnJldHVybl9kZXNjKSk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQl9CkBAIC04NTcsMTEgKzg5NCw2IEBACiAJCQkJICAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsICZyZXR1cm5fZGVzYyksCiAJCQkJICAgICB3YWxrX3N0YXRlKTsKIAkJCQlnb3RvIGNsZWFudXA7Ci0KLQkJCWRlZmF1bHQ6Ci0KLQkJCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwotCQkJCWdvdG8gY2xlYW51cDsKIAkJCX0KIAkJfQogCkBAIC05MzcsMTMgKzk2OSwxMiBAQAogCQkJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlCiAJCQkJCQkgICAgKHJldHVybl9kZXNjKTsKIAkJCQkJfQotCiAJCQkJCWJyZWFrOwogCiAJCQkJZGVmYXVsdDoKIAogCQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkJICAgICJVbmtub3duIEluZGV4IHRhcmdldF90eXBlICVYIGluIG9iaiAlcCIsCisJCQkJCQkgICAgIlVua25vd24gSW5kZXggVGFyZ2V0VHlwZSAlWCBpbiBvYmogJXAiLAogCQkJCQkJICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS4KIAkJCQkJCSAgICB0YXJnZXRfdHlwZSwgb3BlcmFuZFswXSkpOwogCQkJCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtOTU3LDcgKzk4OCw2IEBACiAKIAkJCQlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKHJldHVybl9kZXNjKSA9PQogCQkJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgewotCiAJCQkJCXJldHVybl9kZXNjID0KIAkJCQkJICAgIGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdCgoc3RydWN0CiAJCQkJCQkJCQkgYWNwaV9uYW1lc3BhY2Vfbm9kZQpAQCAtOTcyLDcgKzEwMDIsNyBAQAogCiAJCQlkZWZhdWx0OgogCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCSAgICAiVW5rbm93biBvcGNvZGUgaW4gcmVmKCVwKSAtICVYIiwKKwkJCQkJICAgICJVbmtub3duIG9wY29kZSBpbiByZWZlcmVuY2UoJXApIC0gJVgiLAogCQkJCQkgICAgb3BlcmFuZFswXSwKIAkJCQkJICAgIG9wZXJhbmRbMF0tPnJlZmVyZW5jZS5vcGNvZGUpKTsKIApAQCAtOTk4LDYgKzEwMjgsMTEgQEAKIAkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9kZXNjKTsKIAl9CiAKLQl3YWxrX3N0YXRlLT5yZXN1bHRfb2JqID0gcmV0dXJuX2Rlc2M7CisJLyogU2F2ZSByZXR1cm4gb2JqZWN0IG9uIHN1Y2Nlc3MgKi8KKworCWVsc2UgeworCQl3YWxrX3N0YXRlLT5yZXN1bHRfb2JqID0gcmV0dXJuX2Rlc2M7CisJfQorCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzIuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMi5jCmluZGV4IGUyNjNhNWQuLjdkMmNiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMi5jCkBAIC05Miw3ICs5Miw3IEBACiAJdTMyIHZhbHVlOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8yQV8wVF8wUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzJBXzBUXzBSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogRXhhbWluZSB0aGUgb3Bjb2RlICovCkBAIC0xMjEsNyArMTIxLDcgQEAKICNpZmRlZiBBQ1BJX0dQRV9OT1RJRllfQ0hFQ0sKIAkJLyoKIAkJICogR1BFIG1ldGhvZCB3YWtlL25vdGlmeSBjaGVjay4gIEhlcmUsIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgd2UKLQkJICogZG9uJ3QgcmVjZWl2ZSBhbnkgImRldmljZV93YWtlIiBOb3RpZmllcyBmcm9tIGEgR1BFIF9MeHggb3IgX0V4eAorCQkgKiBkb24ndCByZWNlaXZlIGFueSAiRGV2aWNlV2FrZSIgTm90aWZpZXMgZnJvbSBhIEdQRSBfTHh4IG9yIF9FeHgKIAkJICogR1BFIG1ldGhvZCBkdXJpbmcgc3lzdGVtIHJ1bnRpbWUuICBJZiB3ZSBkbywgdGhlIEdQRSBpcyBtYXJrZWQKIAkJICogYXMgIndha2Utb25seSIgYW5kIGRpc2FibGVkLgogCQkgKgpAQCAtMTM4LDYgKzEzOCw3IEBACiAJCQkgICAgYWNwaV9ldl9jaGVja19mb3Jfd2FrZV9vbmx5X2dwZSh3YWxrX3N0YXRlLT4KIAkJCQkJCQkgICAgZ3BlX2V2ZW50X2luZm8pOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJCQkvKiBBRV9XQUtFX09OTFlfR1BFIG9ubHkgZXJyb3IsIG1lYW5zIGlnbm9yZSB0aGlzIG5vdGlmeSAqLwogCiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKQpAQCAtMTg1LDcgKzE4Niw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MyID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzJBXzJUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMkFfMlRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGVjdXRlIHRoZSBvcGNvZGUgKi8KQEAgLTI1Miw2ICsyNTMsNyBAQAogCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fZGVzYzIpOwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJLyogRGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCiAKIAkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9kZXNjMSk7CkBAIC0yODEsMTIgKzI4MywxMyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfc2l6ZSBsZW5ndGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzJBXzFUXzFSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMkFfMVRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAkvKiBFeGVjdXRlIHRoZSBvcGNvZGUgKi8KIAogCWlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9NQVRIKSB7CisKIAkJLyogQWxsIHNpbXBsZSBtYXRoIG9wY29kZXMgKGFkZCwgZXRjLikgKi8KIAogCQlyZXR1cm5fZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfSU5URUdFUik7CkBAIC0zODMsNTQgKzM4Niw3MCBAQAogCQkJZ290byBjbGVhbnVwOwogCQl9CiAKKwkJLyogSW5pdGlhbGl6ZSB0aGUgSW5kZXggcmVmZXJlbmNlIG9iamVjdCAqLworCiAJCWluZGV4ID0gb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKKwkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS5vZmZzZXQgPSAodTMyKSBpbmRleDsKKwkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPSBBTUxfSU5ERVhfT1A7CiAKLQkJLyogQXQgdGhpcyBwb2ludCwgdGhlIFNvdXJjZSBvcGVyYW5kIGlzIGEgUGFja2FnZSwgQnVmZmVyLCBvciBTdHJpbmcgKi8KKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCwgdGhlIFNvdXJjZSBvcGVyYW5kIGlzIGEgU3RyaW5nLCBCdWZmZXIsIG9yIFBhY2thZ2UuCisJCSAqIFZlcmlmeSB0aGF0IHRoZSBpbmRleCBpcyB3aXRoaW4gcmFuZ2UuCisJCSAqLworCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmRbMF0pKSB7CisJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAotCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob3BlcmFuZFswXSkgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJCS8qIE9iamVjdCB0byBiZSBpbmRleGVkIGlzIGEgUGFja2FnZSAqLwotCi0JCQlpZiAoaW5kZXggPj0gb3BlcmFuZFswXS0+cGFja2FnZS5jb3VudCkgewotCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCSAgICAiSW5kZXggdmFsdWUgKCVYJTguOFgpIGJleW9uZCBwYWNrYWdlIGVuZCAoJVgpIiwKLQkJCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChpbmRleCksCi0JCQkJCSAgICBvcGVyYW5kWzBdLT5wYWNrYWdlLmNvdW50KSk7Ci0JCQkJc3RhdHVzID0gQUVfQU1MX1BBQ0tBR0VfTElNSVQ7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfQotCi0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLnRhcmdldF90eXBlID0gQUNQSV9UWVBFX1BBQ0tBR0U7Ci0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLm9iamVjdCA9IG9wZXJhbmRbMF07Ci0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLndoZXJlID0KLQkJCSAgICAmb3BlcmFuZFswXS0+cGFja2FnZS5lbGVtZW50c1tpbmRleF07Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPYmplY3QgdG8gYmUgaW5kZXhlZCBpcyBhIEJ1ZmZlci9TdHJpbmcgKi8KLQotCQkJaWYgKGluZGV4ID49IG9wZXJhbmRbMF0tPmJ1ZmZlci5sZW5ndGgpIHsKLQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIkluZGV4IHZhbHVlICglWCU4LjhYKSBiZXlvbmQgZW5kIG9mIGJ1ZmZlciAoJVgpIiwKLQkJCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChpbmRleCksCi0JCQkJCSAgICBvcGVyYW5kWzBdLT5idWZmZXIubGVuZ3RoKSk7Ci0JCQkJc3RhdHVzID0gQUVfQU1MX0JVRkZFUl9MSU1JVDsKLQkJCQlnb3RvIGNsZWFudXA7CisJCQlpZiAoaW5kZXggPj0gb3BlcmFuZFswXS0+c3RyaW5nLmxlbmd0aCkgeworCQkJCXN0YXR1cyA9IEFFX0FNTF9TVFJJTkdfTElNSVQ7CiAJCQl9CiAKIAkJCXJldHVybl9kZXNjLT5yZWZlcmVuY2UudGFyZ2V0X3R5cGUgPQogCQkJICAgIEFDUElfVFlQRV9CVUZGRVJfRklFTEQ7Ci0JCQlyZXR1cm5fZGVzYy0+cmVmZXJlbmNlLm9iamVjdCA9IG9wZXJhbmRbMF07CisJCQlicmVhazsKKworCQljYXNlIEFDUElfVFlQRV9CVUZGRVI6CisKKwkJCWlmIChpbmRleCA+PSBvcGVyYW5kWzBdLT5idWZmZXIubGVuZ3RoKSB7CisJCQkJc3RhdHVzID0gQUVfQU1MX0JVRkZFUl9MSU1JVDsKKwkJCX0KKworCQkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS50YXJnZXRfdHlwZSA9CisJCQkgICAgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRDsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CisKKwkJCWlmIChpbmRleCA+PSBvcGVyYW5kWzBdLT5wYWNrYWdlLmNvdW50KSB7CisJCQkJc3RhdHVzID0gQUVfQU1MX1BBQ0tBR0VfTElNSVQ7CisJCQl9CisKKwkJCXJldHVybl9kZXNjLT5yZWZlcmVuY2UudGFyZ2V0X3R5cGUgPSBBQ1BJX1RZUEVfUEFDS0FHRTsKKwkJCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uud2hlcmUgPQorCQkJICAgICZvcGVyYW5kWzBdLT5wYWNrYWdlLmVsZW1lbnRzW2luZGV4XTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisKKwkJCXN0YXR1cyA9IEFFX0FNTF9JTlRFUk5BTDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCS8qIEZhaWx1cmUgbWVhbnMgdGhhdCB0aGUgSW5kZXggd2FzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBvYmplY3QgKi8KKworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJCSJJbmRleCAoJVglOC44WCkgaXMgYmV5b25kIGVuZCBvZiBvYmplY3QiLAorCQkJCQlBQ1BJX0ZPUk1BVF9VSU5UNjQoaW5kZXgpKSk7CisJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAogCQkvKgotCQkgKiBBZGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhcmdldCBwYWNrYWdlL2J1ZmZlci9zdHJpbmcgZm9yIHRoZSBsaWZlCi0JCSAqIG9mIHRoZSBpbmRleC4KKwkJICogU2F2ZSB0aGUgdGFyZ2V0IG9iamVjdCBhbmQgYWRkIGEgcmVmZXJlbmNlIHRvIGl0IGZvciB0aGUgbGlmZQorCQkgKiBvZiB0aGUgaW5kZXgKIAkJICovCisJCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0ID0gb3BlcmFuZFswXTsKIAkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKG9wZXJhbmRbMF0pOwogCi0JCS8qIENvbXBsZXRlIHRoZSBJbmRleCByZWZlcmVuY2Ugb2JqZWN0ICovCi0KLQkJcmV0dXJuX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPSBBTUxfSU5ERVhfT1A7Ci0JCXJldHVybl9kZXNjLT5yZWZlcmVuY2Uub2Zmc2V0ID0gKHUzMikgaW5kZXg7Ci0KIAkJLyogU3RvcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFyZ2V0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9zdG9yZShyZXR1cm5fZGVzYywgb3BlcmFuZFsyXSwgd2Fsa19zdGF0ZSk7CkBAIC00OTUsNyArNTE0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1OCBsb2dpY2FsX3Jlc3VsdCA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8yQV8wVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzJBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJLyogQ3JlYXRlIHRoZSBpbnRlcm5hbCByZXR1cm4gb2JqZWN0ICovCkBAIC01MDksNiArNTI4LDcgQEAKIAkvKiBFeGVjdXRlIHRoZSBPcGNvZGUgKi8KIAogCWlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9MT0dJQ0FMX05VTUVSSUMpIHsKKwogCQkvKiBsb2dpY2FsX29wIChPcGVyYW5kMCwgT3BlcmFuZDEpICovCiAKIAkJc3RhdHVzID0gYWNwaV9leF9kb19sb2dpY2FsX251bWVyaWNfb3Aod2Fsa19zdGF0ZS0+b3Bjb2RlLApAQCAtNTE4LDYgKzUzOCw3IEBACiAJCQkJCQkgICAgICAgdmFsdWUsICZsb2dpY2FsX3Jlc3VsdCk7CiAJCWdvdG8gc3RvcmVfbG9naWNhbF9yZXN1bHQ7CiAJfSBlbHNlIGlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9MT0dJQ0FMKSB7CisKIAkJLyogbG9naWNhbF9vcCAoT3BlcmFuZDAsIE9wZXJhbmQxKSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXhfZG9fbG9naWNhbF9vcCh3YWxrX3N0YXRlLT5vcGNvZGUsIG9wZXJhbmRbMF0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzMuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMy5jCmluZGV4IDZhM2E4ODMuLmUyZDk0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMy5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnMy5jCkBAIC04OCwyMCArODgsMTkgQEAKIAlzdHJ1Y3QgYWNwaV9zaWduYWxfZmF0YWxfaW5mbyAqZmF0YWw7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigiZXhfb3Bjb2RlXzNBXzBUXzBSIiwKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfM0FfMFRfMFIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CiAKIAlzd2l0Y2ggKHdhbGtfc3RhdGUtPm9wY29kZSkgewogCWNhc2UgQU1MX0ZBVEFMX09QOgkvKiBGYXRhbCAoZmF0YWxfdHlwZSBmYXRhbF9jb2RlIGZhdGFsX2FyZykgKi8KIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiZmF0YWxfb3A6IFR5cGUgJVggQ29kZSAlWCBBcmcgJVggPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PFxuIiwKKwkJCQkgICJGYXRhbE9wOiBUeXBlICVYIENvZGUgJVggQXJnICVYIDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDxcbiIsCiAJCQkJICAodTMyKSBvcGVyYW5kWzBdLT5pbnRlZ2VyLnZhbHVlLAogCQkJCSAgKHUzMikgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZSwKIAkJCQkgICh1MzIpIG9wZXJhbmRbMl0tPmludGVnZXIudmFsdWUpKTsKIAotCQlmYXRhbCA9Ci0JCSAgICBBQ1BJX01FTV9BTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfc2lnbmFsX2ZhdGFsX2luZm8pKTsKKwkJZmF0YWwgPSBBQ1BJX0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV9zaWduYWxfZmF0YWxfaW5mbykpOwogCQlpZiAoZmF0YWwpIHsKIAkJCWZhdGFsLT50eXBlID0gKHUzMikgb3BlcmFuZFswXS0+aW50ZWdlci52YWx1ZTsKIAkJCWZhdGFsLT5jb2RlID0gKHUzMikgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKQEAgLTExNCw3ICsxMTMsNyBAQAogCiAJCS8qIE1pZ2h0IHJldHVybiB3aGlsZSBPUyBpcyBzaHV0dGluZyBkb3duLCBqdXN0IGNvbnRpbnVlICovCiAKLQkJQUNQSV9NRU1fRlJFRShmYXRhbCk7CisJCUFDUElfRlJFRShmYXRhbCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE1MSw3ICsxNTAsNyBAQAogCWFjcGlfaW50ZWdlciBpbmRleDsKIAlhY3BpX3NpemUgbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV8zQV8xVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzNBXzFUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJc3dpdGNoICh3YWxrX3N0YXRlLT5vcGNvZGUpIHsKQEAgLTE5Niw3ICsxOTUsNyBAQAogCiAJCQkvKiBBbHdheXMgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIGZvciB0aGUgU3RyaW5nICovCiAKLQkJCWJ1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURSgoYWNwaV9zaXplKSBsZW5ndGggKyAxKTsKKwkJCWJ1ZmZlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGxlbmd0aCArIDEpOwogCQkJaWYgKCFidWZmZXIpIHsKIAkJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMjA4LDkgKzIwNywxMCBAQAogCQkJLyogSWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggaXMgemVybywgZG9uJ3QgYWxsb2NhdGUgYSBidWZmZXIgKi8KIAogCQkJaWYgKGxlbmd0aCA+IDApIHsKKwogCQkJCS8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBmb3IgdGhlIEJ1ZmZlciAqLwogCi0JCQkJYnVmZmVyID0gQUNQSV9NRU1fQ0FMTE9DQVRFKGxlbmd0aCk7CisJCQkJYnVmZmVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQobGVuZ3RoKTsKIAkJCQlpZiAoIWJ1ZmZlcikgewogCQkJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CiAJCQkJCWdvdG8gY2xlYW51cDsKQEAgLTIyNSw2ICsyMjUsNyBAQAogCQl9CiAKIAkJaWYgKGJ1ZmZlcikgeworCiAJCQkvKiBXZSBoYXZlIGEgYnVmZmVyLCBjb3B5IHRoZSBwb3J0aW9uIHJlcXVlc3RlZCAqLwogCiAJCQlBQ1BJX01FTUNQWShidWZmZXIsIG9wZXJhbmRbMF0tPnN0cmluZy5wb2ludGVyICsgaW5kZXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhvcGFyZzYuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnNi5jCmluZGV4IGUwNDNkOTIuLmYwYzBiYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnNi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG9wYXJnNi5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAlhY3BpX2ludGVnZXIgaW5kZXg7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqdGhpc19lbGVtZW50OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoImV4X29wY29kZV82QV8wVF8xUiIsCisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoZXhfb3Bjb2RlXzZBXzBUXzFSLAogCQkJCWFjcGlfcHNfZ2V0X29wY29kZV9uYW1lKHdhbGtfc3RhdGUtPm9wY29kZSkpOwogCiAJc3dpdGNoICh3YWxrX3N0YXRlLT5vcGNvZGUpIHsKQEAgLTI3Niw2ICsyNzYsNyBAQAogCQkgKiBtYXRjaCB3YXMgZm91bmQuCiAJCSAqLwogCQlmb3IgKDsgaW5kZXggPCBvcGVyYW5kWzBdLT5wYWNrYWdlLmNvdW50OyBpbmRleCsrKSB7CisKIAkJCS8qIEdldCB0aGUgY3VycmVudCBwYWNrYWdlIGVsZW1lbnQgKi8KIAogCQkJdGhpc19lbGVtZW50ID0gb3BlcmFuZFswXS0+cGFja2FnZS5lbGVtZW50c1tpbmRleF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhwcmVwLmMKaW5kZXggNzcxOWFlNS4uNDRkMDY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cHJlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHByZXAuYwpAQCAtOTcsNyArOTcsNyBAQAogCXUzMiBtaW5pbXVtX2FjY2Vzc2VzID0gMHhGRkZGRkZGRjsKIAl1MzIgYWNjZXNzZXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9nZW5lcmF0ZV9hY2Nlc3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2dlbmVyYXRlX2FjY2Vzcyk7CiAKIAkvKiBSb3VuZCBGaWVsZCBzdGFydCBvZmZzZXQgYW5kIGxlbmd0aCB0byAibWluaW1hbCIgYnl0ZSBib3VuZGFyaWVzICovCiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkJYWNjZXNzZXMgPSBmaWVsZF9lbmRfb2Zmc2V0IC0gZmllbGRfc3RhcnRfb2Zmc2V0OwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCQkJICAiYWNjZXNzX3dpZHRoICVkIGVuZCBpcyB3aXRoaW4gcmVnaW9uXG4iLAorCQkJCQkgICJBY2Nlc3NXaWR0aCAlZCBlbmQgaXMgd2l0aGluIHJlZ2lvblxuIiwKIAkJCQkJICBhY2Nlc3NfYnl0ZV93aWR0aCkpOwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkJCSAgImFjY2Vzc193aWR0aCAlZCBlbmQgaXMgTk9UIHdpdGhpbiByZWdpb25cbiIsCisJCQkJCSAgIkFjY2Vzc1dpZHRoICVkIGVuZCBpcyBOT1Qgd2l0aGluIHJlZ2lvblxuIiwKIAkJCQkJICBhY2Nlc3NfYnl0ZV93aWR0aCkpOwogCQkJaWYgKGFjY2Vzc19ieXRlX3dpZHRoID09IDEpIHsKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXUzMiBieXRlX2FsaWdubWVudDsKIAl1MzIgYml0X2xlbmd0aDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2RlY29kZV9maWVsZF9hY2Nlc3MiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X2RlY29kZV9maWVsZF9hY2Nlc3MpOwogCiAJYWNjZXNzID0gKGZpZWxkX2ZsYWdzICYgQU1MX0ZJRUxEX0FDQ0VTU19UWVBFX01BU0spOwogCkBAIC0zMjIsNyArMzIyLDcgQEAKIAl1MzIgYnl0ZV9hbGlnbm1lbnQ7CiAJdTMyIG5lYXJlc3RfYnl0ZV9hZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcHJlcF9jb21tb25fZmllbGRfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9wcmVwX2NvbW1vbl9maWVsZF9vYmplY3QpOwogCiAJLyoKIAkgKiBOb3RlOiB0aGUgc3RydWN0dXJlIGJlaW5nIGluaXRpYWxpemVkIGlzIHRoZQpAQCAtNDE1LDEzICs0MTUsMTMgQEAKIAl1MzIgdHlwZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9wcmVwX2ZpZWxkX3ZhbHVlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9wcmVwX2ZpZWxkX3ZhbHVlKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKIAlpZiAoaW5mby0+ZmllbGRfdHlwZSAhPSBBQ1BJX1RZUEVfTE9DQUxfSU5ERVhfRklFTEQpIHsKIAkJaWYgKCFpbmZvLT5yZWdpb25fbm9kZSkgewotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk51bGwgcmVnaW9uX25vZGUiKSk7CisJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTnVsbCBSZWdpb25Ob2RlIikpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OT19PUEVSQU5EKTsKIAkJfQogCkBAIC00NjcsNyArNDY3LDcgQEAKIAkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKG9ial9kZXNjLT5maWVsZC5yZWdpb25fb2JqKTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCQkgICJyZWdpb25fZmllbGQ6IGJpdF9vZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwXG4iLAorCQkJCSAgIlJlZ2lvbkZpZWxkOiBCaXRPZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwXG4iLAogCQkJCSAgb2JqX2Rlc2MtPmZpZWxkLnN0YXJ0X2ZpZWxkX2JpdF9vZmZzZXQsCiAJCQkJICBvYmpfZGVzYy0+ZmllbGQuYmFzZV9ieXRlX29mZnNldCwKIAkJCQkgIG9ial9kZXNjLT5maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCwKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MtPmJhbmtfZmllbGQuYmFua19vYmopOwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCSAgIkJhbmsgRmllbGQ6IGJpdF9vZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwLCBiYW5rX3JlZyAlcFxuIiwKKwkJCQkgICJCYW5rIEZpZWxkOiBCaXRPZmYgJVgsIE9mZiAlWCwgR3JhbiAlWCwgUmVnaW9uICVwLCBCYW5rUmVnICVwXG4iLAogCQkJCSAgb2JqX2Rlc2MtPmJhbmtfZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCwKIAkJCQkgIG9ial9kZXNjLT5iYW5rX2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQsCiAJCQkJICBvYmpfZGVzYy0+ZmllbGQuYWNjZXNzX2J5dGVfd2lkdGgsCkBAIC01MTksMTYgKzUxOSwyOSBAQAogCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MtPmluZGV4X2ZpZWxkLmluZGV4X29iaik7CiAKIAkJLyoKKwkJICogQXByaWwgMjAwNjogQ2hhbmdlZCB0byBtYXRjaCBNUyBiZWhhdmlvcgorCQkgKgogCQkgKiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgSW5kZXggcmVnaXN0ZXIgaXMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZQotCQkgKiB0YXJnZXQgZmllbGQKLQkJICogTm90ZTogbWF5IGNoYW5nZSBjb2RlIHRvOiBBQ1BJX0RJVl84IChJbmZvLT5maWVsZF9iaXRfcG9zaXRpb24pCisJCSAqIHRhcmdldCBmaWVsZCBpbiB1bml0cyBvZiB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4X2ZpZWxkCisJCSAqCisJCSAqIFByZXZpb3VzbHksIHRoZSB2YWx1ZSB3YXMgY2FsY3VsYXRlZCBhcyBhbiBpbmRleCBpbiB0ZXJtcyBvZiB0aGUKKwkJICogd2lkdGggb2YgdGhlIERhdGEgcmVnaXN0ZXIsIGFzIGJlbG93OgorCQkgKgorCQkgKiAgICAgIG9ial9kZXNjLT5pbmRleF9maWVsZC5WYWx1ZSA9ICh1MzIpCisJCSAqICAgICAgICAgIChJbmZvLT5maWVsZF9iaXRfcG9zaXRpb24gLyBBQ1BJX01VTF84ICgKKwkJICogICAgICAgICAgICAgIG9ial9kZXNjLT5GaWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCkpOworCQkgKgorCQkgKiBGZWJydWFyeSAyMDA2OiBUcmllZCB2YWx1ZSBhcyBhIGJ5dGUgb2Zmc2V0OgorCQkgKiAgICAgIG9ial9kZXNjLT5pbmRleF9maWVsZC5WYWx1ZSA9ICh1MzIpCisJCSAqICAgICAgICAgIEFDUElfRElWXzggKEluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbik7CiAJCSAqLwotCQlvYmpfZGVzYy0+aW5kZXhfZmllbGQudmFsdWUgPSAodTMyKQotCQkgICAgKGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbiAvCi0JCSAgICAgQUNQSV9NVUxfOChvYmpfZGVzYy0+ZmllbGQuYWNjZXNzX2J5dGVfd2lkdGgpKTsKKwkJb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLnZhbHVlID0KKwkJICAgICh1MzIpIEFDUElfUk9VTkRfRE9XTihBQ1BJX0RJVl84KGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbiksCisJCQkJCSAgb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLgorCQkJCQkgIGFjY2Vzc19ieXRlX3dpZHRoKTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCQkgICJpbmRleF9maWVsZDogYml0X29mZiAlWCwgT2ZmICVYLCBWYWx1ZSAlWCwgR3JhbiAlWCwgSW5kZXggJXAsIERhdGEgJXBcbiIsCisJCQkJICAiSW5kZXhGaWVsZDogQml0T2ZmICVYLCBPZmYgJVgsIFZhbHVlICVYLCBHcmFuICVYLCBJbmRleCAlcCwgRGF0YSAlcFxuIiwKIAkJCQkgIG9ial9kZXNjLT5pbmRleF9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0LAogCQkJCSAgb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLmJhc2VfYnl0ZV9vZmZzZXQsCiAJCQkJICBvYmpfZGVzYy0+aW5kZXhfZmllbGQudmFsdWUsCkBAIC01NTAsNyArNTYzLDcgQEAKIAkJCQkgICAgICAgYWNwaV9uc19nZXRfdHlwZShpbmZvLT5maWVsZF9ub2RlKSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKLQkJCSAgIlNldCBuYW1lZF9vYmogJXAgWyU0LjRzXSwgb2JqX2Rlc2MgJXBcbiIsCisJCQkgICJTZXQgTmFtZWRPYmogJXAgWyU0LjRzXSwgT2JqRGVzYyAlcFxuIiwKIAkJCSAgaW5mby0+ZmllbGRfbm9kZSwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKGluZm8tPmZpZWxkX25vZGUpLCBvYmpfZGVzYykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCmluZGV4IDZhNGNmZGYuLjNjYzk3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCkBAIC04MSw3ICs4MSw3IEBACiAJdTMyIHJlbWFpbmRlcjsKICNlbmRpZgogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX21lbW9yeV9zcGFjZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fbWVtb3J5X3NwYWNlX2hhbmRsZXIpOwogCiAJLyogVmFsaWRhdGUgYW5kIHRyYW5zbGF0ZSB0aGUgYml0IHdpZHRoICovCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIHN5c3RlbV9tZW1vcnkgd2lkdGggJWQiLAorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBTeXN0ZW1NZW1vcnkgd2lkdGggJWQiLAogCQkJICAgIGJpdF93aWR0aCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX09QRVJBTkRfVkFMVUUpOwogCX0KQEAgLTEzNSw2ICsxMzUsNyBAQAogCQkgKiBEZWxldGUgdGhlIGV4aXN0aW5nIG1hcHBpbmcgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuCiAJCSAqLwogCQlpZiAobWVtX2luZm8tPm1hcHBlZF9sZW5ndGgpIHsKKwogCQkJLyogVmFsaWQgbWFwcGluZywgZGVsZXRlIGl0ICovCiAKIAkJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KG1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzLApAQCAtMTgxLDggKzE4Miw4IEBACiAJICAgICAoYWNwaV9pbnRlZ2VyKSBtZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAic3lzdGVtX21lbW9yeSAlZCAoJWQgd2lkdGgpIEFkZHJlc3M9JTguOFglOC44WFxuIiwKLQkJCSAgZnVuY3Rpb24sIGJpdF93aWR0aCwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpKSk7CisJCQkgICJTeXN0ZW0tTWVtb3J5ICh3aWR0aCAlZCkgUi9XICVkIEFkZHJlc3M9JTguOFglOC44WFxuIiwKKwkJCSAgYml0X3dpZHRoLCBmdW5jdGlvbiwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpKSk7CiAKIAkvKgogCSAqIFBlcmZvcm0gdGhlIG1lbW9yeSByZWFkIG9yIHdyaXRlCkBAIC0yODMsMTEgKzI4NCwxMSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiB2YWx1ZTMyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX2lvX3NwYWNlX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3N5c3RlbV9pb19zcGFjZV9oYW5kbGVyKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCSAgInN5c3RlbV9pTyAlZCAoJWQgd2lkdGgpIEFkZHJlc3M9JTguOFglOC44WFxuIiwKLQkJCSAgZnVuY3Rpb24sIGJpdF93aWR0aCwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpKSk7CisJCQkgICJTeXN0ZW0tSU8gKHdpZHRoICVkKSBSL1cgJWQgQWRkcmVzcz0lOC44WCU4LjhYXG4iLAorCQkJICBiaXRfd2lkdGgsIGZ1bmN0aW9uLCBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzcykpKTsKIAogCS8qIERlY29kZSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyICovCiAKQEAgLTM0Miw3ICszNDMsNyBAQAogCXN0cnVjdCBhY3BpX3BjaV9pZCAqcGNpX2lkOwogCXUxNiBwY2lfcmVnaXN0ZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9wY2lfY29uZmlnX3NwYWNlX2hhbmRsZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3BjaV9jb25maWdfc3BhY2VfaGFuZGxlcik7CiAKIAkvKgogCSAqICBUaGUgYXJndW1lbnRzIHRvIGFjcGlfb3MoUmVhZHxXcml0ZSlwY2lfY29uZmlndXJhdGlvbiBhcmU6CkBAIC0zNjAsNyArMzYxLDcgQEAKIAlwY2lfcmVnaXN0ZXIgPSAodTE2KSAodTMyKSBhZGRyZXNzOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAicGNpX2NvbmZpZyAlZCAoJWQpIFNlZyglMDR4KSBCdXMoJTA0eCkgRGV2KCUwNHgpIEZ1bmMoJTA0eCkgUmVnKCUwNHgpXG4iLAorCQkJICAiUGNpLUNvbmZpZyAlZCAoJWQpIFNlZyglMDR4KSBCdXMoJTA0eCkgRGV2KCUwNHgpIEZ1bmMoJTA0eCkgUmVnKCUwNHgpXG4iLAogCQkJICBmdW5jdGlvbiwgYml0X3dpZHRoLCBwY2lfaWQtPnNlZ21lbnQsIHBjaV9pZC0+YnVzLAogCQkJICBwY2lfaWQtPmRldmljZSwgcGNpX2lkLT5mdW5jdGlvbiwgcGNpX3JlZ2lzdGVyKSk7CiAKQEAgLTQxNCw3ICs0MTUsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfY21vc19zcGFjZV9oYW5kbGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9jbW9zX3NwYWNlX2hhbmRsZXIpOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CkBAIC00NDYsNyArNDQ3LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3BjaV9iYXJfc3BhY2VfaGFuZGxlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfcGNpX2Jhcl9zcGFjZV9oYW5kbGVyKTsKIAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQpAQCAtNDc2LDIzICs0NzcsMTYgQEAKIAkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdTMyIGJ5dGVfd2lkdGggPSBBQ1BJX0RJVl84KGJpdF93aWR0aCk7Ci0JdTMyIGk7Ci0JY2hhciAqbG9naWNhbF9hZGRyX3B0cjsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X2RhdGFfdGFibGVfc3BhY2VfaGFuZGxlciIpOwotCi0JbG9naWNhbF9hZGRyX3B0ciA9IEFDUElfUEhZU0FERFJfVE9fUFRSKGFkZHJlc3MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZGF0YV90YWJsZV9zcGFjZV9oYW5kbGVyKTsKIAogCS8qIFBlcmZvcm0gdGhlIG1lbW9yeSByZWFkIG9yIHdyaXRlICovCiAKIAlzd2l0Y2ggKGZ1bmN0aW9uKSB7CiAJY2FzZSBBQ1BJX1JFQUQ6CiAKLQkJZm9yIChpID0gMDsgaSA8IGJ5dGVfd2lkdGg7IGkrKykgewotCQkJKChjaGFyICopdmFsdWUpW2ldID0gbG9naWNhbF9hZGRyX3B0cltpXTsKLQkJfQorCQlBQ1BJX01FTUNQWShBQ1BJX0NBU1RfUFRSKGNoYXIsIHZhbHVlKSwKKwkJCSAgICBBQ1BJX1BIWVNBRERSX1RPX1BUUihhZGRyZXNzKSwKKwkJCSAgICBBQ1BJX0RJVl84KGJpdF93aWR0aCkpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9XUklURToKQEAgLTUwMSw1ICs0OTUsNSBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfU1VQUE9SVCk7CiAJfQogCi0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc250ZS5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMKaW5kZXggMDFiMjZjOC4uMzA4OWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzbnRlLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAlhY3BpX29iamVjdF90eXBlIGVudHJ5X3R5cGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9yZXNvbHZlX25vZGVfdG9fdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfbm9kZV90b192YWx1ZSk7CiAKIAkvKgogCSAqIFRoZSBzdGFjayBwb2ludGVyIHBvaW50cyB0byBhIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIChOb2RlKS4gIEdldCB0aGUKQEAgLTk3LDEyICs5NywxMyBAQAogCXNvdXJjZV9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCWVudHJ5X3R5cGUgPSBhY3BpX25zX2dldF90eXBlKChhY3BpX2hhbmRsZSkgbm9kZSk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJFbnRyeT0lcCBzb3VyY2VfZGVzYz0lcCBbJXNdXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIkVudHJ5PSVwIFNvdXJjZURlc2M9JXAgWyVzXVxuIiwKIAkJCSAgbm9kZSwgc291cmNlX2Rlc2MsCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShlbnRyeV90eXBlKSkpOwogCiAJaWYgKChlbnRyeV90eXBlID09IEFDUElfVFlQRV9MT0NBTF9BTElBUykgfHwKIAkgICAgKGVudHJ5X3R5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX01FVEhPRF9BTElBUykpIHsKKwogCQkvKiBUaGVyZSBpcyBhbHdheXMgZXhhY3RseSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KIAogCQlub2RlID0gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwgbm9kZS0+b2JqZWN0KTsKQEAgLTExMywxMCArMTE0LDExIEBACiAKIAkvKgogCSAqIFNldmVyYWwgb2JqZWN0IHR5cGVzIHJlcXVpcmUgbm8gZnVydGhlciBwcm9jZXNzaW5nOgotCSAqIDEpIERldmljZXMgcmFyZWx5IGhhdmUgYW4gYXR0YWNoZWQgb2JqZWN0LCByZXR1cm4gdGhlIE5vZGUKKwkgKiAxKSBEZXZpY2UvVGhlcm1hbCBvYmplY3RzIGRvbid0IGhhdmUgYSAicmVhbCIgc3Vib2JqZWN0LCByZXR1cm4gdGhlIE5vZGUKIAkgKiAyKSBNZXRob2QgbG9jYWxzIGFuZCBhcmd1bWVudHMgaGF2ZSBhIHBzZXVkby1Ob2RlCiAJICovCi0JaWYgKGVudHJ5X3R5cGUgPT0gQUNQSV9UWVBFX0RFVklDRSB8fAorCWlmICgoZW50cnlfdHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB8fAorCSAgICAoZW50cnlfdHlwZSA9PSBBQ1BJX1RZUEVfVEhFUk1BTCkgfHwKIAkgICAgKG5vZGUtPmZsYWdzICYgKEFOT0JKX01FVEhPRF9BUkcgfCBBTk9CSl9NRVRIT0RfTE9DQUwpKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KQEAgLTE0MSw2ICsxNDMsNyBAQAogCiAJCXN0YXR1cyA9IGFjcGlfZHNfZ2V0X3BhY2thZ2VfYXJndW1lbnRzKHNvdXJjZV9kZXNjKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJCS8qIFJldHVybiBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCiAKIAkJCW9ial9kZXNjID0gc291cmNlX2Rlc2M7CkBAIC0xNTgsNiArMTYxLDcgQEAKIAogCQlzdGF0dXMgPSBhY3BpX2RzX2dldF9idWZmZXJfYXJndW1lbnRzKHNvdXJjZV9kZXNjKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJCS8qIFJldHVybiBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCiAKIAkJCW9ial9kZXNjID0gc291cmNlX2Rlc2M7CkBAIC0xOTksNyArMjAzLDcgQEAKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9JTkRFWF9GSUVMRDoKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJICAiZmllbGRfcmVhZCBOb2RlPSVwIHNvdXJjZV9kZXNjPSVwIFR5cGU9JVhcbiIsCisJCQkJICAiRmllbGRSZWFkIE5vZGU9JXAgU291cmNlRGVzYz0lcCBUeXBlPSVYXG4iLAogCQkJCSAgbm9kZSwgc291cmNlX2Rlc2MsIGVudHJ5X3R5cGUpKTsKIAogCQlzdGF0dXMgPQpAQCAtMjEzLDcgKzIxNyw2IEBACiAJY2FzZSBBQ1BJX1RZUEVfTUVUSE9EOgogCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgogCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKLQljYXNlIEFDUElfVFlQRV9USEVSTUFMOgogCWNhc2UgQUNQSV9UWVBFX0VWRU5UOgogCWNhc2UgQUNQSV9UWVBFX1JFR0lPTjoKIApAQCAtMjQwLDYgKzI0Myw4IEBACiAJCQkvKiBUaGlzIGlzIGEgZGRiX2hhbmRsZSAqLwogCQkJLyogUmV0dXJuIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgKi8KIAorCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisKIAkJCW9ial9kZXNjID0gc291cmNlX2Rlc2M7CiAJCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2Uob2JqX2Rlc2MpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvbHYuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29sdi5jCmluZGV4IDFkZWVkNDkuLjY0OTlkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29sdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29sdi5jCkBAIC03OCw3ICs3OCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X3Jlc29sdmVfdG9fdmFsdWUiLCBzdGFja19wdHIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3Jlc29sdmVfdG9fdmFsdWUsIHN0YWNrX3B0cik7CiAKIAlpZiAoIXN0YWNrX3B0ciB8fCAhKnN0YWNrX3B0cikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW50ZXJuYWwgLSBudWxsIHBvaW50ZXIiKSk7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAl1MTYgb3Bjb2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcmVzb2x2ZV9vYmplY3RfdG9fdmFsdWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfb2JqZWN0X3RvX3ZhbHVlKTsKIAogCXN0YWNrX2Rlc2MgPSAqc3RhY2tfcHRyOwogCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJCX0KIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCQkgICJbQXJnL0xvY2FsICVYXSB2YWx1ZV9vYmogaXMgJXBcbiIsCisJCQkJCSAgIltBcmcvTG9jYWwgJVhdIFZhbHVlT2JqIGlzICVwXG4iLAogCQkJCQkgIHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5vZmZzZXQsCiAJCQkJCSAgb2JqX2Rlc2MpKTsKIApAQCAtMjM5LDcgKzIzOSw3IEBACiAJCQkJLyogSW52YWxpZCByZWZlcmVuY2Ugb2JqZWN0ICovCiAKIAkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIlVua25vd24gdGFyZ2V0X3R5cGUgJVggaW4gSW5kZXgvUmVmZXJlbmNlIG9iaiAlcCIsCisJCQkJCSAgICAiVW5rbm93biBUYXJnZXRUeXBlICVYIGluIEluZGV4L1JlZmVyZW5jZSBvYmogJXAiLAogCQkJCQkgICAgc3RhY2tfZGVzYy0+cmVmZXJlbmNlLnRhcmdldF90eXBlLAogCQkJCQkgICAgc3RhY2tfZGVzYykpOwogCQkJCXN0YXR1cyA9IEFFX0FNTF9JTlRFUk5BTDsKQEAgLTI1NywxMCArMjU3LDI0IEBACiAKIAkJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgkvKiBSZWZlcmVuY2UgdG8gYSBuYW1lZCBvYmplY3QgKi8KIAotCQkJLyogR2V0IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgbmFtZXNwYWNlIG5vZGUgKi8KKwkJCS8qIERlcmVmZXJlbmNlIHRoZSBuYW1lICovCiAKLQkJCSpzdGFja19wdHIgPSAoc3RhY2tfZGVzYy0+cmVmZXJlbmNlLm5vZGUpLT5vYmplY3Q7Ci0JCQlhY3BpX3V0X2FkZF9yZWZlcmVuY2UoKnN0YWNrX3B0cik7CisJCQlpZiAoKHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5ub2RlLT50eXBlID09CisJCQkgICAgIEFDUElfVFlQRV9ERVZJQ0UpCisJCQkgICAgfHwgKHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5ub2RlLT50eXBlID09CisJCQkJQUNQSV9UWVBFX1RIRVJNQUwpKSB7CisKKwkJCQkvKiBUaGVzZSBub2RlIHR5cGVzIGRvIG5vdCBoYXZlICdyZWFsJyBzdWJvYmplY3RzICovCisKKwkJCQkqc3RhY2tfcHRyID0gKHZvaWQgKilzdGFja19kZXNjLT5yZWZlcmVuY2Uubm9kZTsKKwkJCX0gZWxzZSB7CisJCQkJLyogR2V0IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgbmFtZXNwYWNlIG5vZGUgKi8KKworCQkJCSpzdGFja19wdHIgPQorCQkJCSAgICAoc3RhY2tfZGVzYy0+cmVmZXJlbmNlLm5vZGUpLT5vYmplY3Q7CisJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKCpzdGFja19wdHIpOworCQkJfQorCiAJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uoc3RhY2tfZGVzYyk7CiAJCQlicmVhazsKIApAQCAtMjkzLDcgKzMwNyw3IEBACiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfSU5ERVhfRklFTEQ6CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgImZpZWxkX3JlYWQgc291cmNlX2Rlc2M9JXAgVHlwZT0lWFxuIiwKKwkJCQkgICJGaWVsZFJlYWQgU291cmNlRGVzYz0lcCBUeXBlPSVYXG4iLAogCQkJCSAgc3RhY2tfZGVzYywKIAkJCQkgIEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSk7CiAKQEAgLTMzNyw3ICszNTEsNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgdHlwZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2V4X3Jlc29sdmVfbXVsdGlwbGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZXhfcmVzb2x2ZV9tdWx0aXBsZSk7CiAKIAkvKiBPcGVyYW5kIGNhbiBiZSBlaXRoZXIgYSBuYW1lc3BhY2Ugbm9kZSBvciBhbiBvcGVyYW5kIGRlc2NyaXB0b3IgKi8KIApAQCAtMzgyLDEwICszOTYsMTYgQEAKIAl3aGlsZSAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKIAkJc3dpdGNoIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSkgewogCQljYXNlIEFNTF9SRUZfT0ZfT1A6CisJCWNhc2UgQU1MX0lOVF9OQU1FUEFUSF9PUDoKIAogCQkJLyogRGVyZWZlcmVuY2UgdGhlIHJlZmVyZW5jZSBwb2ludGVyICovCiAKLQkJCW5vZGUgPSBvYmpfZGVzYy0+cmVmZXJlbmNlLm9iamVjdDsKKwkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLm9wY29kZSA9PSBBTUxfUkVGX09GX09QKSB7CisJCQkJbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0OworCQkJfSBlbHNlIHsJLyogQU1MX0lOVF9OQU1FUEFUSF9PUCAqLworCisJCQkJbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZTsKKwkJCX0KIAogCQkJLyogQWxsICJSZWZlcmVuY2VzIiBwb2ludCB0byBhIE5TIG5vZGUgKi8KIApAQCAtNDAxLDYgKzQyMSw3IEBACiAKIAkJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCQkJaWYgKCFvYmpfZGVzYykgeworCiAJCQkJLyogTm8gb2JqZWN0LCB1c2UgdGhlIE5TIG5vZGUgdHlwZSAqLwogCiAJCQkJdHlwZSA9IGFjcGlfbnNfZ2V0X3R5cGUobm9kZSk7CkBAIC00MzIsNiArNDUzLDcgQEAKIAkJCSAqLwogCQkJb2JqX2Rlc2MgPSAqKG9ial9kZXNjLT5yZWZlcmVuY2Uud2hlcmUpOwogCQkJaWYgKCFvYmpfZGVzYykgeworCiAJCQkJLyogTlVMTCBwYWNrYWdlIGVsZW1lbnRzIGFyZSBhbGxvd2VkICovCiAKIAkJCQl0eXBlID0gMDsJLyogVW5pbml0aWFsaXplZCAqLwpAQCAtNDM5LDM5ICs0NjEsNiBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgotCi0JCQkvKiBEZXJlZmVyZW5jZSB0aGUgcmVmZXJlbmNlIHBvaW50ZXIgKi8KLQotCQkJbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZTsKLQotCQkJLyogQWxsICJSZWZlcmVuY2VzIiBwb2ludCB0byBhIE5TIG5vZGUgKi8KLQotCQkJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShub2RlKSAhPQotCQkJICAgIEFDUElfREVTQ19UWVBFX05BTUVEKSB7Ci0JCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk5vdCBhIE5TIG5vZGUgJXAgWyVzXSIsCi0JCQkJCSAgICBub2RlLAotCQkJCQkgICAgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lKG5vZGUpKSk7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTlRFUk5BTCk7Ci0JCQl9Ci0KLQkJCS8qIEdldCB0aGUgYXR0YWNoZWQgb2JqZWN0ICovCi0KLQkJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwotCQkJaWYgKCFvYmpfZGVzYykgewotCQkJCS8qIE5vIG9iamVjdCwgdXNlIHRoZSBOUyBub2RlIHR5cGUgKi8KLQotCQkJCXR5cGUgPSBhY3BpX25zX2dldF90eXBlKG5vZGUpOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQotCQkJLyogQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgKi8KLQotCQkJaWYgKG9ial9kZXNjID09IG9wZXJhbmQpIHsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0NJUkNVTEFSX1JFRkVSRU5DRSk7Ci0JCQl9Ci0JCQlicmVhazsKLQogCQljYXNlIEFNTF9MT0NBTF9PUDoKIAkJY2FzZSBBTUxfQVJHX09QOgogCkBAIC01MTMsNyArNTAyLDcgQEAKIAogCQljYXNlIEFNTF9ERUJVR19PUDoKIAotCQkJLyogVGhlIERlYnVnIE9iamVjdCBpcyBvZiB0eXBlICJkZWJ1Z19vYmplY3QiICovCisJCQkvKiBUaGUgRGVidWcgT2JqZWN0IGlzIG9mIHR5cGUgIkRlYnVnT2JqZWN0IiAqLwogCiAJCQl0eXBlID0gQUNQSV9UWVBFX0RFQlVHX09CSkVDVDsKIAkJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29wLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvcC5jCmluZGV4IGExYzAwMGYuLjRjOTNkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29wLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb3AuYwpAQCAtNzcsNiArNzcsNyBAQAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAogCWlmICh0eXBlX25lZWRlZCA9PSBBQ1BJX1RZUEVfQU5ZKSB7CisKIAkJLyogQWxsIHR5cGVzIE9LLCBzbyB3ZSBkb24ndCBwZXJmb3JtIGFueSB0eXBlY2hlY2tzICovCiAKIAkJcmV0dXJuIChBRV9PSyk7CkBAIC0xNDMsNyArMTQ0LDcgQEAKIAlhY3BpX29iamVjdF90eXBlIHR5cGVfbmVlZGVkOwogCXUxNiB0YXJnZXRfb3AgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoImV4X3Jlc29sdmVfb3BlcmFuZHMiLCBvcGNvZGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGV4X3Jlc29sdmVfb3BlcmFuZHMsIG9wY29kZSk7CiAKIAlvcF9pbmZvID0gYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8ob3Bjb2RlKTsKIAlpZiAob3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX1VOS05PV04pIHsKQEAgLTE1OCw3ICsxNTksNyBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIk9wY29kZSAlWCBbJXNdIHJlcXVpcmVkX29wZXJhbmRfdHlwZXM9JTguOFhcbiIsCisJCQkgICJPcGNvZGUgJVggWyVzXSBSZXF1aXJlZE9wZXJhbmRUeXBlcz0lOC44WFxuIiwKIAkJCSAgb3Bjb2RlLCBvcF9pbmZvLT5uYW1lLCBhcmdfdHlwZXMpKTsKIAogCS8qCkBAIC0yMjQsNiArMjI1LDcgQEAKIAkJCX0KIAogCQkJaWYgKG9iamVjdF90eXBlID09ICh1OCkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCiAJCQkJLyogRGVjb2RlIHRoZSBSZWZlcmVuY2UgKi8KIAogCQkJCW9wX2luZm8gPSBhY3BpX3BzX2dldF9vcGNvZGVfaW5mbyhvcGNvZGUpOwpAQCAtMjQ3LDcgKzI0OSw3IEBACiAKIAkJCQkJQUNQSV9ERUJVR19PTkxZX01FTUJFUlMoQUNQSV9ERUJVR19QUklOVAogCQkJCQkJCQkoKEFDUElfREJfRVhFQywKLQkJCQkJCQkJICAiT3BlcmFuZCBpcyBhIFJlZmVyZW5jZSwgcmVmX29wY29kZSBbJXNdXG4iLAorCQkJCQkJCQkgICJPcGVyYW5kIGlzIGEgUmVmZXJlbmNlLCBSZWZPcGNvZGUgWyVzXVxuIiwKIAkJCQkJCQkJICAoYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8KIAkJCQkJCQkJICAgKG9ial9kZXNjLT4KIAkJCQkJCQkJICAgIHJlZmVyZW5jZS4KQEAgLTMzMiw2ICszMzQsNyBAQAogCQkJfQogCiAJCQlpZiAob2JqX2Rlc2MtPnJlZmVyZW5jZS5vcGNvZGUgPT0gQU1MX05BTUVfT1ApIHsKKwogCQkJCS8qIENvbnZlcnQgYSBuYW1lZCByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBuYW1lZCBvYmplY3QgKi8KIAogCQkJCXRlbXBfbm9kZSA9IG9ial9kZXNjLT5yZWZlcmVuY2Uub2JqZWN0OwpAQCAtNjIzLDcgKzYyNiw3IEBACiAKIAkJCWRlZmF1bHQ6CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkJICAgICJOZWVkZWQgW1JlZ2lvbi9yZWdpb25fZmllbGRdLCBmb3VuZCBbJXNdICVwIiwKKwkJCQkJICAgICJOZWVkZWQgW1JlZ2lvbi9SZWdpb25GaWVsZF0sIGZvdW5kIFslc10gJXAiLAogCQkJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZQogCQkJCQkgICAgKG9ial9kZXNjKSwgb2JqX2Rlc2MpKTsKIApAQCAtNjYyLDYgKzY2NSw3IEBACiAJCQkJfQogCiAJCQkJaWYgKHRhcmdldF9vcCA9PSBBTUxfREVCVUdfT1ApIHsKKwogCQkJCQkvKiBBbGxvdyBzdG9yZSBvZiBhbnkgb2JqZWN0IHRvIHRoZSBEZWJ1ZyBvYmplY3QgKi8KIAogCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JlLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZS5jCmluZGV4IDNmMDIwYzAuLjA0NTY0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3RvcmUuYwpAQCAtODIsNyArODIsNyBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoImV4X2RvX2RlYnVnX29iamVjdCIsIHNvdXJjZV9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9kb19kZWJ1Z19vYmplY3QsIHNvdXJjZV9kZXNjKTsKIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0RFQlVHX09CSkVDVCwgIltBQ1BJIERlYnVnXSAlKnMiLAogCQkJICAgICAgbGV2ZWwsICIgIikpOwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVmX2Rlc2MgPSBkZXN0X2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmUiLCBkZXN0X2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3N0b3JlLCBkZXN0X2Rlc2MpOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogCQlBQ1BJX0RVTVBfU1RBQ0tfRU5UUlkoc291cmNlX2Rlc2MpOwogCQlBQ1BJX0RVTVBfU1RBQ0tfRU5UUlkoZGVzdF9kZXNjKTsKLQkJQUNQSV9EVU1QX09QRVJBTkRTKCZkZXN0X2Rlc2MsIEFDUElfSU1PREVfRVhFQ1VURSwgImV4X3N0b3JlIiwKKwkJQUNQSV9EVU1QX09QRVJBTkRTKCZkZXN0X2Rlc2MsIEFDUElfSU1PREVfRVhFQ1VURSwgIkV4U3RvcmUiLAogCQkJCSAgIDIsCiAJCQkJICAgIlRhcmdldCBpcyBub3QgYSBSZWZlcmVuY2Ugb3IgQ29uc3RhbnQgb2JqZWN0Iik7CiAKQEAgLTM5Niw3ICszOTYsNyBAQAogCXU4IHZhbHVlID0gMDsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3N0b3JlX29iamVjdF90b19pbmRleCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3RvcmVfb2JqZWN0X3RvX2luZGV4KTsKIAogCS8qCiAJICogRGVzdGluYXRpb24gbXVzdCBiZSBhIHJlZmVyZW5jZSBwb2ludGVyLCBhbmQKQEAgLTQyMyw2ICs0MjMsNyBAQAogCQl9CiAKIAkJaWYgKG9ial9kZXNjKSB7CisKIAkJCS8qIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQgYnkgdGhlIHJlZiBjb3VudCBvZiB0aGUgcGFyZW50IHBhY2thZ2UgKi8KIAogCQkJZm9yIChpID0gMDsgaSA8ICgodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKQpAQCAtNTAyLDggKzUwMyw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiVGFyZ2V0IGlzIG5vdCBhIFBhY2thZ2Ugb3IgYnVmZmVyX2ZpZWxkIikpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiVGFyZ2V0IGlzIG5vdCBhIFBhY2thZ2Ugb3IgQnVmZmVyRmllbGQiKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWJyZWFrOwogCX0KQEAgLTU0OCw3ICs1NDgsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5ld19kZXNjOwogCWFjcGlfb2JqZWN0X3R5cGUgdGFyZ2V0X3R5cGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmVfb2JqZWN0X3RvX25vZGUiLCBzb3VyY2VfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZXhfc3RvcmVfb2JqZWN0X3RvX25vZGUsIHNvdXJjZV9kZXNjKTsKIAogCS8qIEdldCBjdXJyZW50IHR5cGUgb2YgdGhlIG5vZGUsIGFuZCBvYmplY3QgYXR0YWNoZWQgdG8gTm9kZSAqLwogCkBAIC01NzIsNiArNTcyLDcgQEAKIAkvKiBJZiBubyBpbXBsaWNpdCBjb252ZXJzaW9uLCBkcm9wIGludG8gdGhlIGRlZmF1bHQgY2FzZSBiZWxvdyAqLwogCiAJaWYgKCghaW1wbGljaXRfY29udmVyc2lvbikgfHwgKHdhbGtfc3RhdGUtPm9wY29kZSA9PSBBTUxfQ09QWV9PUCkpIHsKKwogCQkvKiBGb3JjZSBleGVjdXRpb24gb2YgZGVmYXVsdCAobm8gaW1wbGljaXQgY29udmVyc2lvbikgKi8KIAogCQl0YXJnZXRfdHlwZSA9IEFDUElfVFlQRV9BTlk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzdG9yZW4uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCmluZGV4IDQyOTY3YmEuLjU5MWFhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3Jlbi5jCkBAIC03Miw3ICs3Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc291cmNlX2Rlc2MgPSAqc291cmNlX2Rlc2NfcHRyOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfcmVzb2x2ZV9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3Jlc29sdmVfb2JqZWN0KTsKIAogCS8qIEVuc3VyZSB3ZSBoYXZlIGEgVGFyZ2V0IHRoYXQgY2FuIGJlIHN0b3JlZCB0byAqLwogCkBAIC05Nyw2ICs5Nyw3IEBACiAJCSAqLwogCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoc291cmNlX2Rlc2MpID09CiAJCSAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CisKIAkJCS8qIFJlc29sdmUgYSByZWZlcmVuY2Ugb2JqZWN0IGZpcnN0ICovCiAKIAkJCXN0YXR1cyA9CkBAIC0xMjEsNiArMTIyLDcgQEAKIAkJICAgICEoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSA9PQogCQkgICAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKIAkJICAgICAgJiYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2Uub3Bjb2RlID09IEFNTF9MT0FEX09QKSkpIHsKKwogCQkJLyogQ29udmVyc2lvbiBzdWNjZXNzZnVsIGJ1dCBzdGlsbCBub3QgYSB2YWxpZCB0eXBlICovCiAKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0xOTksNyArMjAxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3R1YWxfc3JjX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmVfb2JqZWN0X3RvX29iamVjdCIsIHNvdXJjZV9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9zdG9yZV9vYmplY3RfdG9fb2JqZWN0LCBzb3VyY2VfZGVzYyk7CiAKIAlhY3R1YWxfc3JjX2Rlc2MgPSBzb3VyY2VfZGVzYzsKIAlpZiAoIWRlc3RfZGVzYykgewpAQCAtMjg5LDYgKzI5MSw3IEBACiAJfQogCiAJaWYgKGFjdHVhbF9zcmNfZGVzYyAhPSBzb3VyY2VfZGVzYykgeworCiAJCS8qIERlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlICh0ZW1wb3JhcnkpIHNvdXJjZSBvYmplY3QgKi8KIAogCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoYWN0dWFsX3NyY19kZXNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN0b3JvYi5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3Rvcm9iLmMKaW5kZXggNmFiNzA3MC4uOTllYmU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3Rvcm9iLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3Rvcm9iLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAl1MzIgbGVuZ3RoOwogCXU4ICpidWZmZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigiZXhfc3RvcmVfYnVmZmVyX3RvX2J1ZmZlciIsIHNvdXJjZV9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9zdG9yZV9idWZmZXJfdG9fYnVmZmVyLCBzb3VyY2VfZGVzYyk7CiAKIAkvKiBXZSBrbm93IHRoYXQgc291cmNlX2Rlc2MgaXMgYSBidWZmZXIgYnkgbm93ICovCiAKQEAgLTgwLDcgKzgwLDcgQEAKIAkgKi8KIAlpZiAoKHRhcmdldF9kZXNjLT5idWZmZXIubGVuZ3RoID09IDApIHx8CiAJICAgICh0YXJnZXRfZGVzYy0+Y29tbW9uLmZsYWdzICYgQU9QT0JKX1NUQVRJQ19QT0lOVEVSKSkgewotCQl0YXJnZXRfZGVzYy0+YnVmZmVyLnBvaW50ZXIgPSBBQ1BJX01FTV9BTExPQ0FURShsZW5ndGgpOworCQl0YXJnZXRfZGVzYy0+YnVmZmVyLnBvaW50ZXIgPSBBQ1BJX0FMTE9DQVRFKGxlbmd0aCk7CiAJCWlmICghdGFyZ2V0X2Rlc2MtPmJ1ZmZlci5wb2ludGVyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtOTEsNiArOTEsNyBAQAogCS8qIENvcHkgc291cmNlIGJ1ZmZlciB0byB0YXJnZXQgYnVmZmVyICovCiAKIAlpZiAobGVuZ3RoIDw9IHRhcmdldF9kZXNjLT5idWZmZXIubGVuZ3RoKSB7CisKIAkJLyogQ2xlYXIgZXhpc3RpbmcgYnVmZmVyIGFuZCBjb3B5IGluIHRoZSBuZXcgb25lICovCiAKIAkJQUNQSV9NRU1TRVQodGFyZ2V0X2Rlc2MtPmJ1ZmZlci5wb2ludGVyLCAwLApAQCAtMTAyLDcgKzEwMyw3IEBACiAJCSAqIE5PVEU6IEFDUEkgdmVyc2lvbnMgdXAgdG8gMy4wIHNwZWNpZmllZCB0aGF0IHRoZSBidWZmZXIgbXVzdCBiZQogCQkgKiB0cnVuY2F0ZWQgaWYgdGhlIHN0cmluZyBpcyBzbWFsbGVyIHRoYW4gdGhlIGJ1ZmZlci4gIEhvd2V2ZXIsICJvdGhlciIKIAkJICogaW1wbGVtZW50YXRpb25zIG9mIEFDUEkgbmV2ZXIgZGlkIHRoaXMgYW5kIHRodXMgYmVjYW1lIHRoZSBkZWZhY3RvCi0JCSAqIHN0YW5kYXJkLiBBQ1BpIDMuMF9hIGNoYW5nZXMgdGhpcyBiZWhhdmlvciBzdWNoIHRoYXQgdGhlIGJ1ZmZlcgorCQkgKiBzdGFuZGFyZC4gQUNQSSAzLjBfYSBjaGFuZ2VzIHRoaXMgYmVoYXZpb3Igc3VjaCB0aGF0IHRoZSBidWZmZXIKIAkJICogaXMgbm8gbG9uZ2VyIHRydW5jYXRlZC4KIAkJICovCiAKQEAgLTExMyw2ICsxMTQsNyBAQAogCQkgKiBjb3B5IG11c3Qgbm90IHRydW5jYXRlIHRoZSBvcmlnaW5hbCBidWZmZXIuCiAJCSAqLwogCQlpZiAob3JpZ2luYWxfc3JjX3R5cGUgPT0gQUNQSV9UWVBFX1NUUklORykgeworCiAJCQkvKiBTZXQgdGhlIG5ldyBsZW5ndGggb2YgdGhlIHRhcmdldCAqLwogCiAJCQl0YXJnZXRfZGVzYy0+YnVmZmVyLmxlbmd0aCA9IGxlbmd0aDsKQEAgLTE1Niw3ICsxNTgsNyBAQAogCXUzMiBsZW5ndGg7CiAJdTggKmJ1ZmZlcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9zdG9yZV9zdHJpbmdfdG9fc3RyaW5nIiwgc291cmNlX2Rlc2MpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X3N0b3JlX3N0cmluZ190b19zdHJpbmcsIHNvdXJjZV9kZXNjKTsKIAogCS8qIFdlIGtub3cgdGhhdCBzb3VyY2VfZGVzYyBpcyBhIHN0cmluZyBieSBub3cgKi8KIApAQCAtMTgzLDEzICsxODUsMTQgQEAKIAkJICovCiAJCWlmICh0YXJnZXRfZGVzYy0+c3RyaW5nLnBvaW50ZXIgJiYKIAkJICAgICghKHRhcmdldF9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfU1RBVElDX1BPSU5URVIpKSkgeworCiAJCQkvKiBPbmx5IGZyZWUgaWYgbm90IGEgcG9pbnRlciBpbnRvIHRoZSBEU0RUICovCiAKLQkJCUFDUElfTUVNX0ZSRUUodGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyKTsKKwkJCUFDUElfRlJFRSh0YXJnZXRfZGVzYy0+c3RyaW5nLnBvaW50ZXIpOwogCQl9CiAKLQkJdGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyID0gQUNQSV9NRU1fQ0FMTE9DQVRFKChhY3BpX3NpemUpCi0JCQkJCQkJCSBsZW5ndGggKyAxKTsKKwkJdGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKGFjcGlfc2l6ZSkKKwkJCQkJCQkJICAgbGVuZ3RoICsgMSk7CiAJCWlmICghdGFyZ2V0X2Rlc2MtPnN0cmluZy5wb2ludGVyKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4c3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYwppbmRleCBlYTkxNDRmLi41MmJlZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYwpAQCAtNjgsNyArNjgsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3N0YXR1cyBzdGF0dXMyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUpOwogCiAJc3RhdHVzID0gYWNwaV9vc193YWl0X3NlbWFwaG9yZShzZW1hcGhvcmUsIDEsIDApOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtNzYsNiArNzYsNyBAQAogCX0KIAogCWlmIChzdGF0dXMgPT0gQUVfVElNRSkgeworCiAJCS8qIFdlIG11c3Qgd2FpdCwgc28gdW5sb2NrIHRoZSBpbnRlcnByZXRlciAqLwogCiAJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwpAQCAtOTAsNiArOTEsNyBAQAogCiAJCXN0YXR1czIgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzMikpIHsKKwogCQkJLyogUmVwb3J0IGZhdGFsIGVycm9yLCBjb3VsZCBub3QgYWNxdWlyZSBpbnRlcnByZXRlciAqLwogCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzMik7CkBAIC0xOTEsNyArMTkzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJleF9zeXN0ZW1fYWNxdWlyZV9tdXRleCIsIG9ial9kZXNjKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9zeXN0ZW1fYWNxdWlyZV9tdXRleCwgb2JqX2Rlc2MpOwogCiAJaWYgKCFvYmpfZGVzYykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC0yMjksNyArMjMxLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3N5c3RlbV9yZWxlYXNlX211dGV4Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fcmVsZWFzZV9tdXRleCk7CiAKIAlpZiAoIW9ial9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTI2Myw3ICsyNjUsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfc3lzdGVtX3NpZ25hbF9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3lzdGVtX3NpZ25hbF9ldmVudCk7CiAKIAlpZiAob2JqX2Rlc2MpIHsKIAkJc3RhdHVzID0gYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKG9ial9kZXNjLT5ldmVudC5zZW1hcGhvcmUsIDEpOwpAQCAtMjkzLDcgKzI5NSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9zeXN0ZW1fd2FpdF9ldmVudCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3lzdGVtX3dhaXRfZXZlbnQpOwogCiAJaWYgKG9ial9kZXNjKSB7CiAJCXN0YXR1cyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXh1dGlscy5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4dXRpbHMuYwppbmRleCBmNzNhNjFhLi45ODJjOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHV0aWxzLmMKQEAgLTg3LDkgKzg3LDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9lbnRlcl9pbnRlcnByZXRlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZW50ZXJfaW50ZXJwcmV0ZXIpOwogCi0Jc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0VYRUNVVEUpOworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9JTlRFUlBSRVRFUik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgYWNxdWlyZSBpbnRlcnByZXRlciBtdXRleCIpKTsKIAl9CkBAIC0xMjMsOSArMTIzLDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9leGl0X2ludGVycHJldGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9leGl0X2ludGVycHJldGVyKTsKIAotCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9FWEVDVVRFKTsKKwlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfSU5URVJQUkVURVIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IHJlbGVhc2UgaW50ZXJwcmV0ZXIgbXV0ZXgiKSk7CiAJfQpAQCAtMTg5LDExICsxODksMTIgQEAKIAl1OCBsb2NrZWQgPSBGQUxTRTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJleF9hY3F1aXJlX2dsb2JhbF9sb2NrIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShleF9hY3F1aXJlX2dsb2JhbF9sb2NrKTsKIAogCS8qIE9ubHkgYXR0ZW1wdCBsb2NrIGlmIHRoZSBhbHdheXNfbG9jayBiaXQgaXMgc2V0ICovCiAKIAlpZiAoZmllbGRfZmxhZ3MgJiBBTUxfRklFTERfTE9DS19SVUxFX01BU0spIHsKKwogCQkvKiBXZSBzaG91bGQgYXR0ZW1wdCB0byBnZXQgdGhlIGxvY2ssIHdhaXQgZm9yZXZlciAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXZfYWNxdWlyZV9nbG9iYWxfbG9jayhBQ1BJX1dBSVRfRk9SRVZFUik7CkBAIC0yMjUsMTUgKzIyNiwxNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImV4X3JlbGVhc2VfZ2xvYmFsX2xvY2siKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3JlbGVhc2VfZ2xvYmFsX2xvY2spOwogCiAJLyogT25seSBhdHRlbXB0IHVubG9jayBpZiB0aGUgY2FsbGVyIGxvY2tlZCBpdCAqLwogCiAJaWYgKGxvY2tlZF9ieV9tZSkgeworCiAJCS8qIE9LLCBub3cgcmVsZWFzZSB0aGUgbG9jayAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXZfcmVsZWFzZV9nbG9iYWxfbG9jaygpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkJLyogUmVwb3J0IHRoZSBlcnJvciwgYnV0IHRoZXJlIGlzbid0IG11Y2ggZWxzZSB3ZSBjYW4gZG8gKi8KIAogCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKQEAgLTI2Myw3ICsyNjYsNyBAQAogCXUzMiBudW1fZGlnaXRzOwogCWFjcGlfaW50ZWdlciBjdXJyZW50X3ZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiZXhfZGlnaXRzX25lZWRlZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZGlnaXRzX25lZWRlZCk7CiAKIAkvKiBhY3BpX2ludGVnZXIgaXMgdW5zaWduZWQsIHNvIHdlIGRvbid0IHdvcnJ5IGFib3V0IGEgJy0nIHByZWZpeCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdhY3BpLmMgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdhY3BpLmMKaW5kZXggZWEyZjEzMi4uZGU1MGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3YWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2FjcGkuYwpAQCAtNjMsNyArNjMsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X2luaXRpYWxpemUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X2luaXRpYWxpemUpOwogCiAJLyogV2UgbXVzdCBoYXZlIHRoZSBBQ1BJIHRhYmxlcyBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSAqLwogCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIHJldHJ5OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfc2V0X21vZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3NldF9tb2RlKTsKIAogCS8qCiAJICogQUNQSSAyLjAgY2xhcmlmaWVkIHRoYXQgaWYgU01JX0NNRCBpbiBGQURUIGlzIHplcm8sCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIHZhbHVlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfZ2V0X21vZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X2dldF9tb2RlKTsKIAogCS8qCiAJICogQUNQSSAyLjAgY2xhcmlmaWVkIHRoYXQgaWYgU01JX0NNRCBpbiBGQURUIGlzIHplcm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdncGUuYyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2dwZS5jCmluZGV4IGQ4NDk0MmQuLjYwOGEzYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2dwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od2dwZS5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAkvKiBFeGFtaW5lIGVhY2ggR1BFIFJlZ2lzdGVyIHdpdGhpbiB0aGUgYmxvY2sgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50OyBpKyspIHsKKwogCQkvKiBEaXNhYmxlIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19sZXZlbF93cml0ZSg4LCAweDAwLApAQCAtMjUwLDYgKzI1MSw3IEBACiAJLyogRXhhbWluZSBlYWNoIEdQRSBSZWdpc3RlciB3aXRoaW4gdGhlIGJsb2NrICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CisKIAkJLyogQ2xlYXIgc3RhdHVzIG9uIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19sZXZlbF93cml0ZSg4LCAweEZGLApAQCAtMzY4LDcgKzM3MCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfZGlzYWJsZV9hbGxfZ3BlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfZGlzYWJsZV9hbGxfZ3Blcyk7CiAKIAlzdGF0dXMgPSBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9od19kaXNhYmxlX2dwZV9ibG9jayk7CiAJc3RhdHVzID0gYWNwaV9ldl93YWxrX2dwZV9saXN0KGFjcGlfaHdfY2xlYXJfZ3BlX2Jsb2NrKTsKQEAgLTM5MSw3ICszOTMsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X2VuYWJsZV9hbGxfcnVudGltZV9ncGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShod19lbmFibGVfYWxsX3J1bnRpbWVfZ3Blcyk7CiAKIAlzdGF0dXMgPSBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9od19lbmFibGVfcnVudGltZV9ncGVfYmxvY2spOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtNDEzLDcgKzQxNSw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaHdfZW5hYmxlX2FsbF93YWtldXBfZ3BlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfZW5hYmxlX2FsbF93YWtldXBfZ3Blcyk7CiAKIAlzdGF0dXMgPSBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9od19lbmFibGVfd2FrZXVwX2dwZV9ibG9jayk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMKaW5kZXggZTFmZTc1NC4uYWUxNDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3cmVncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3JlZ3MuYwpAQCAtNDMsOCArNDMsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjZXZlbnRzLmg+CkBAIC02MywyMyArNjEsMjEgQEAKICAqIERFU0NSSVBUSU9OOiBDbGVhcnMgYWxsIGZpeGVkIGFuZCBnZW5lcmFsIHB1cnBvc2Ugc3RhdHVzIGJpdHMKICAqICAgICAgICAgICAgICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRAogICoKKyAqIE5PVEU6IFRCRDogRmxhZ3MgcGFyYW1ldGVyIGlzIG9ic29sZXRlLCB0byBiZSByZW1vdmVkCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXModTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2NwdV9mbGFncyBsb2NrX2ZsYWdzID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X2NsZWFyX2FjcGlfc3RhdHVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShod19jbGVhcl9hY3BpX3N0YXR1cyk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLCAiQWJvdXQgdG8gd3JpdGUgJTA0WCB0byAlMDRYXG4iLAogCQkJICBBQ1BJX0JJVE1BU0tfQUxMX0ZJWEVEX1NUQVRVUywKIAkJCSAgKHUxNikgYWNwaV9nYmxfRkFEVC0+eHBtMWFfZXZ0X2Jsay5hZGRyZXNzKSk7CiAKLQlpZiAoZmxhZ3MgJiBBQ1BJX01UWF9MT0NLKSB7Ci0JCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9IQVJEV0FSRSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KLQl9CisJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCiAJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX01UWF9ET19OT1RfTE9DSywKIAkJCQkJQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLApAQCAtMTA0LDkgKzEwMCw3IEBACiAJc3RhdHVzID0gYWNwaV9ldl93YWxrX2dwZV9saXN0KGFjcGlfaHdfY2xlYXJfZ3BlX2Jsb2NrKTsKIAogICAgICAgdW5sb2NrX2FuZF9leGl0OgotCWlmIChmbGFncyAmIEFDUElfTVRYX0xPQ0spIHsKLQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQl9CisJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jaywgbG9ja19mbGFncyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTEyOSwxMCArMTIzLDkgQEAKIGFjcGlfZ2V0X3NsZWVwX3R5cGVfZGF0YSh1OCBzbGVlcF9zdGF0ZSwgdTggKiBzbGVlcF90eXBlX2EsIHU4ICogc2xlZXBfdHlwZV9iKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87Ci0JY2hhciAqc2xlZXBfc3RhdGVfbmFtZTsKKwlzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfc2xlZXBfdHlwZV9kYXRhIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9zbGVlcF90eXBlX2RhdGEpOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCkBAIC0xNDAsMzQgKzEzMywzOSBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogRXZhbHVhdGUgdGhlIG5hbWVzcGFjZSBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIGZvciB0aGlzIHN0YXRlICovCisJLyogQWxsb2NhdGUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KIAotCWluZm8ucGFyYW1ldGVycyA9IE5VTEw7Ci0JaW5mby5yZXR1cm5fb2JqZWN0ID0gTlVMTDsKLQlzbGVlcF9zdGF0ZV9uYW1lID0KKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJfQorCisJaW5mby0+cGF0aG5hbWUgPQogCSAgICBBQ1BJX0NBU1RfUFRSKGNoYXIsIGFjcGlfZ2JsX3NsZWVwX3N0YXRlX25hbWVzW3NsZWVwX3N0YXRlXSk7CiAKLQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X25hbWUoc2xlZXBfc3RhdGVfbmFtZSwgJmluZm8pOworCS8qIEV2YWx1YXRlIHRoZSBuYW1lc3BhY2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgdGhpcyBzdGF0ZSAqLworCisJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgIiVzIHdoaWxlIGV2YWx1YXRpbmcgc2xlZXBfc3RhdGUgWyVzXVxuIiwKKwkJCQkgICIlcyB3aGlsZSBldmFsdWF0aW5nIFNsZWVwU3RhdGUgWyVzXVxuIiwKIAkJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpLAotCQkJCSAgc2xlZXBfc3RhdGVfbmFtZSkpOworCQkJCSAgaW5mby0+cGF0aG5hbWUpKTsKIAotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIE11c3QgaGF2ZSBhIHJldHVybiBvYmplY3QgKi8KIAotCWlmICghaW5mby5yZXR1cm5fb2JqZWN0KSB7CisJaWYgKCFpbmZvLT5yZXR1cm5fb2JqZWN0KSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJObyBTbGVlcCBTdGF0ZSBvYmplY3QgcmV0dXJuZWQgZnJvbSBbJXNdIiwKLQkJCSAgICBzbGVlcF9zdGF0ZV9uYW1lKSk7CisJCQkgICAgaW5mby0+cGF0aG5hbWUpKTsKIAkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwogCX0KIAogCS8qIEl0IG11c3QgYmUgb2YgdHlwZSBQYWNrYWdlICovCiAKLQllbHNlIGlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbmZvLnJldHVybl9vYmplY3QpICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJZWxzZSBpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdCkgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIG9iamVjdCBpcyBub3QgYSBQYWNrYWdlIikpOwogCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtMTgwLDcgKzE3OCw3IEBACiAJICogYnkgQklPUyB2ZW5kb3JzIHNlZW1zIHRvIGJlIHRvIGhhdmUgMiBvciBtb3JlIGVsZW1lbnRzLCBhdCBsZWFzdAogCSAqIG9uZSBwZXIgc2xlZXAgdHlwZSAoQS9CKS4KIAkgKi8KLQllbHNlIGlmIChpbmZvLnJldHVybl9vYmplY3QtPnBhY2thZ2UuY291bnQgPCAyKSB7CisJZWxzZSBpZiAoaW5mby0+cmV0dXJuX29iamVjdC0+cGFja2FnZS5jb3VudCA8IDIpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZG9lcyBub3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMiKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9OT19PUEVSQU5EOwpAQCAtMTg4LDM5ICsxODYsNDIgQEAKIAogCS8qIFRoZSBmaXJzdCB0d28gZWxlbWVudHMgbXVzdCBib3RoIGJlIG9mIHR5cGUgSW50ZWdlciAqLwogCi0JZWxzZSBpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8ucmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50c1swXSkKKwllbHNlIGlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50c1swXSkKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikgfHwKLQkJIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbmZvLnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMV0pCisJCSAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW5mby0+cmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50c1sxXSkKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZWxlbWVudHMgYXJlIG5vdCBib3RoIEludGVnZXJzICglcywgJXMpIiwKLQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKGluZm8ucmV0dXJuX29iamVjdC0+CisJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLT5yZXR1cm5fb2JqZWN0LT4KIAkJCQkJCQkgcGFja2FnZS5lbGVtZW50c1swXSksCi0JCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLnJldHVybl9vYmplY3QtPgorCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdC0+CiAJCQkJCQkJIHBhY2thZ2UuZWxlbWVudHNbMV0pKSk7CiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJfSBlbHNlIHsKIAkJLyogVmFsaWQgX1N4XyBwYWNrYWdlIHNpemUsIHR5cGUsIGFuZCB2YWx1ZSAqLwogCiAJCSpzbGVlcF90eXBlX2EgPSAodTgpCi0JCSAgICAoaW5mby5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+aW50ZWdlci52YWx1ZTsKKwkJICAgIChpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+aW50ZWdlci52YWx1ZTsKIAkJKnNsZWVwX3R5cGVfYiA9ICh1OCkKLQkJICAgIChpbmZvLnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMV0pLT5pbnRlZ2VyLnZhbHVlOworCQkgICAgKGluZm8tPnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMV0pLT5pbnRlZ2VyLnZhbHVlOwogCX0KIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCSJXaGlsZSBldmFsdWF0aW5nIHNsZWVwX3N0YXRlIFslc10sIGJhZCBTbGVlcCBvYmplY3QgJXAgdHlwZSAlcyIsCi0JCQkJc2xlZXBfc3RhdGVfbmFtZSwgaW5mby5yZXR1cm5fb2JqZWN0LAotCQkJCWFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby4KKwkJCQkiV2hpbGUgZXZhbHVhdGluZyBTbGVlcFN0YXRlIFslc10sIGJhZCBTbGVlcCBvYmplY3QgJXAgdHlwZSAlcyIsCisJCQkJaW5mby0+cGF0aG5hbWUsIGluZm8tPnJldHVybl9vYmplY3QsCisJCQkJYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLT4KIAkJCQkJCQkgICAgIHJldHVybl9vYmplY3QpKSk7CiAJfQogCi0JYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8ucmV0dXJuX29iamVjdCk7CisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8tPnJldHVybl9vYmplY3QpOworCisgICAgICBjbGVhbnVwOgorCUFDUElfRlJFRShpbmZvKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9zbGVlcF90eXBlX2RhdGEpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3NsZWVwX3R5cGVfZGF0YSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMzMsMTMgKzIzNCwxMiBAQAogICogREVTQ1JJUFRJT046IE1hcCByZWdpc3Rlcl9pZCBpbnRvIGEgcmVnaXN0ZXIgYml0bWFzay4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdHJ1Y3QgYWNwaV9iaXRfcmVnaXN0ZXJfaW5mbyAqYWNwaV9od19nZXRfYml0X3JlZ2lzdGVyX2luZm8odTMyIHJlZ2lzdGVyX2lkKQogewogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAogCWlmIChyZWdpc3Rlcl9pZCA+IEFDUElfQklUUkVHX01BWCkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBiaXRfcmVnaXN0ZXIgSUQ6ICVYIiwKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgQml0UmVnaXN0ZXIgSUQ6ICVYIiwKIAkJCSAgICByZWdpc3Rlcl9pZCkpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KQEAgLTI2MCw2ICsyNjAsOCBAQAogICoKICAqIERFU0NSSVBUSU9OOiBBQ1BJIGJpdF9yZWdpc3RlciByZWFkIGZ1bmN0aW9uLgogICoKKyAqIE5PVEU6IFRCRDogRmxhZ3MgcGFyYW1ldGVyIGlzIG9ic29sZXRlLCB0byBiZSByZW1vdmVkCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMgYWNwaV9nZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUsIHUzMiBmbGFncykKQEAgLTI2OCw3ICsyNzAsNyBAQAogCXN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICpiaXRfcmVnX2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfcmVnaXN0ZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3JlZ2lzdGVyKTsKIAogCS8qIEdldCB0aGUgaW5mbyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIEFDUEkgUmVnaXN0ZXIgKi8KIApAQCAtMjc3LDI0ICsyNzksMTQgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCWlmIChmbGFncyAmIEFDUElfTVRYX0xPQ0spIHsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQotCX0KLQogCS8qIFJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIgKi8KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9ET19OT1RfTE9DSywKKwlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfTE9DSywKIAkJCQkgICAgICAgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCiAJCQkJICAgICAgICZyZWdpc3Rlcl92YWx1ZSk7CiAKLQlpZiAoZmxhZ3MgJiBBQ1BJX01UWF9MT0NLKSB7Ci0JCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9IQVJEV0FSRSk7Ci0JfQotCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJLyogTm9ybWFsaXplIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkICovCiAKIAkJcmVnaXN0ZXJfdmFsdWUgPQpAQCAtMzExLDcgKzMwMyw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfcmVnaXN0ZXIpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3JlZ2lzdGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTMyNiwzMSArMzE4LDI4IEBACiAgKgogICogREVTQ1JJUFRJT046IEFDUEkgQml0IFJlZ2lzdGVyIHdyaXRlIGZ1bmN0aW9uLgogICoKKyAqIE5PVEU6IFRCRDogRmxhZ3MgcGFyYW1ldGVyIGlzIG9ic29sZXRlLCB0byBiZSByZW1vdmVkCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9zZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUsIHUzMiBmbGFncykKIHsKIAl1MzIgcmVnaXN0ZXJfdmFsdWUgPSAwOwogCXN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICpiaXRfcmVnX2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfY3B1X2ZsYWdzIGxvY2tfZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigiYWNwaV9zZXRfcmVnaXN0ZXIiLCByZWdpc3Rlcl9pZCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYWNwaV9zZXRfcmVnaXN0ZXIsIHJlZ2lzdGVyX2lkKTsKIAogCS8qIEdldCB0aGUgaW5mbyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIEFDUEkgUmVnaXN0ZXIgKi8KIAogCWJpdF9yZWdfaW5mbyA9IGFjcGlfaHdfZ2V0X2JpdF9yZWdpc3Rlcl9pbmZvKHJlZ2lzdGVyX2lkKTsKIAlpZiAoIWJpdF9yZWdfaW5mbykgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQmFkIEFDUEkgSFcgcmVnaXN0ZXJfaWQ6ICVYIiwKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkJhZCBBQ1BJIEhXIFJlZ2lzdGVySWQ6ICVYIiwKIAkJCSAgICByZWdpc3Rlcl9pZCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JaWYgKGZsYWdzICYgQUNQSV9NVFhfTE9DSykgewotCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfSEFSRFdBUkUpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0JfQorCWxvY2tfZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAogCS8qIEFsd2F5cyBkbyBhIHJlZ2lzdGVyIHJlYWQgZmlyc3Qgc28gd2UgY2FuIGluc2VydCB0aGUgbmV3IGJpdHMgICovCiAKQEAgLTQ1OCw5ICs0NDcsNyBAQAogCiAgICAgICB1bmxvY2tfYW5kX2V4aXQ6CiAKLQlpZiAoZmxhZ3MgJiBBQ1BJX01UWF9MT0NLKSB7Ci0JCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9IQVJEV0FSRSk7Ci0JfQorCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2ssIGxvY2tfZmxhZ3MpOwogCiAJLyogTm9ybWFsaXplIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkICovCiAKQEAgLTQ3NCw3ICs0NjEsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X3JlZ2lzdGVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9yZWdpc3RlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ5MCwyMSArNDc3LDE4IEBACiAgKiAgICAgICAgICAgICAgZ2l2ZW4gb2Zmc2V0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQodTggdXNlX2xvY2ssIHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKQogewogCXUzMiB2YWx1ZTEgPSAwOwogCXUzMiB2YWx1ZTIgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2NwdV9mbGFncyBsb2NrX2ZsYWdzID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImh3X3JlZ2lzdGVyX3JlYWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3JlZ2lzdGVyX3JlYWQpOwogCiAJaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQorCQlsb2NrX2ZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CiAJfQogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewpAQCAtNTgyLDcgKzU2Niw3IEBACiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlpZiAoQUNQSV9NVFhfTE9DSyA9PSB1c2VfbG9jaykgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfSEFSRFdBUkUpOworCQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAl9CiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTYxMCwxNCArNTk0LDEyIEBACiBhY3BpX3N0YXR1cyBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKHU4IHVzZV9sb2NrLCB1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9jcHVfZmxhZ3MgbG9ja19mbGFncyA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJod19yZWdpc3Rlcl93cml0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfcmVnaXN0ZXJfd3JpdGUpOwogCiAJaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX0hBUkRXQVJFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQorCQlsb2NrX2ZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CiAJfQogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewpAQCAtNzA3LDcgKzY4OSw3IEBACiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlpZiAoQUNQSV9NVFhfTE9DSyA9PSB1c2VfbG9jaykgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfSEFSRFdBUkUpOworCQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTczMyw3ICs3MTUsNyBAQAogCXU2NCBhZGRyZXNzOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgiaHdfbG93X2xldmVsX3JlYWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUoaHdfbG93X2xldmVsX3JlYWQpOwogCiAJLyoKIAkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kCkBAIC04MDUsNyArNzg3LDcgQEAKIAl1NjQgYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoImh3X2xvd19sZXZlbF93cml0ZSIpOworCUFDUElfRlVOQ1RJT05fTkFNRShod19sb3dfbGV2ZWxfd3JpdGUpOwogCiAJLyoKIAkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jIGIvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYwppbmRleCA4OTI2OTI3Li44YmI0M2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0hBUkRXQVJFCkBAIC02NCw3ICs2Myw3IEBACiBhY3BpX3NldF9maXJtd2FyZV93YWtpbmdfdmVjdG9yKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzaWNhbF9hZGRyZXNzKQogewogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3Rvcik7CiAKIAkvKiBTZXQgdGhlIHZlY3RvciAqLwogCkBAIC03OSw2ICs3OCw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IKQEAgLTkyLDEzICs5MywxMiBAQAogICogREVTQ1JJUFRJT046IEFjY2VzcyBmdW5jdGlvbiBmb3IgdGhlIGZpcm13YXJlX3dha2luZ192ZWN0b3IgZmllbGQgaW4gRkFDUwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IoYWNwaV9waHlzaWNhbF9hZGRyZXNzICogcGh5c2ljYWxfYWRkcmVzcykKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpOwogCiAJaWYgKCFwaHlzaWNhbF9hZGRyZXNzKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTExOCw2ICsxMTgsOCBAQAogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzNCwxNCArMTM2LDEzIEBACiAgKiAgICAgICAgICAgICAgdmFyaW91cyBPUy1zcGVjaWZpYyB0YXNrcyBiZXR3ZWVuIHRoZSB0d28gc3RlcHMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwKHU4IHNsZWVwX3N0YXRlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmc7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3ByZXAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfcHJlcCk7CiAKIAkvKgogCSAqIF9QU1cgbWV0aG9kcyBjb3VsZCBiZSBydW4gaGVyZSB0byBlbmFibGUgd2FrZS1vbiBrZXlib2FyZCwgTEFOLCBldGMuCkBAIC0yMDYsNiArMjA3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2VudGVyX3NsZWVwX3N0YXRlCkBAIC0yMTgsNyArMjIxLDYgQEAKICAqICAgICAgICAgICAgICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggSU5URVJSVVBUUyBESVNBQkxFRAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFzbWxpbmthZ2UgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSh1OCBzbGVlcF9zdGF0ZSkKIHsKIAl1MzIgUE0xQWNvbnRyb2w7CkBAIC0yMjgsNyArMjMwLDcgQEAKIAl1MzIgaW5fdmFsdWU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSk7CiAKIAlpZiAoKGFjcGlfZ2JsX3NsZWVwX3R5cGVfYSA+IEFDUElfU0xFRVBfVFlQRV9NQVgpIHx8CiAJICAgIChhY3BpX2dibF9zbGVlcF90eXBlX2IgPiBBQ1BJX1NMRUVQX1RZUEVfTUFYKSkgewpAQCAtMzc4LDcgKzM4MCw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM5MiwxMyArMzk0LDEyIEBACiAgKiAgICAgICAgICAgICAgVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIElOVEVSUlVQVFMgRElTQUJMRUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhc21saW5rYWdlIGFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfczRiaW9zKHZvaWQpCiB7CiAJdTMyIGluX3ZhbHVlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfczRiaW9zIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3M0Ymlvcyk7CiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgMSwgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOwpAQCAtNDQzLDcgKzQ0NCw3IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3M0Ymlvcyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9zNGJpb3MpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDU3LDcgKzQ1OCw2IEBACiAgKiAgICAgICAgICAgICAgQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBFTkFCTEVELgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfbGVhdmVfc2xlZXBfc3RhdGUodTggc2xlZXBfc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3Q7CkBAIC00NjgsNyArNDY4LDcgQEAKIAl1MzIgUE0xQWNvbnRyb2w7CiAJdTMyIFBNMUJjb250cm9sOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZSk7CiAKIAkvKgogCSAqIFNldCBTTFBfVFlQRSBhbmQgU0xQX0VOIHRvIHN0YXRlIFMwLgpAQCAtNDkwLDYgKzQ5MCw3IEBACiAJCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkgICAgICAgJlBNMUFjb250cm9sKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJCS8qIENsZWFyIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KIAogCQkJUE0xQWNvbnRyb2wgJj0gfihzbGVlcF90eXBlX3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2sgfApAQCAtNTgzLDMgKzU4NCw1IEBACiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbGVhdmVfc2xlZXBfc3RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHd0aW1lci5jIGIvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3dGltZXIuYwppbmRleCBmYzEwYjdjLi5jNGVjNDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHd0aW1lci5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3RpbWVyLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0hBUkRXQVJFCkBAIC02MSwxMyArNjAsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cyBhY3BpX2dldF90aW1lcl9yZXNvbHV0aW9uKHUzMiAqIHJlc29sdXRpb24pCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfdGltZXJfcmVzb2x1dGlvbiIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfdGltZXJfcmVzb2x1dGlvbik7CiAKIAlpZiAoIXJlc29sdXRpb24pIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCWlmICgwID09IGFjcGlfZ2JsX0ZBRFQtPnRtcl92YWxfZXh0KSB7CisJaWYgKGFjcGlfZ2JsX0ZBRFQtPnRtcl92YWxfZXh0ID09IDApIHsKIAkJKnJlc29sdXRpb24gPSAyNDsKIAl9IGVsc2UgewogCQkqcmVzb2x1dGlvbiA9IDMyOwpAQCAtNzYsNiArNzUsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90aW1lcl9yZXNvbHV0aW9uKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3RpbWVyCkBAIC04NywxMiArODgsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBPYnRhaW5zIGN1cnJlbnQgdmFsdWUgb2YgQUNQSSBQTSBUaW1lciAoaW4gdGlja3MpLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfZ2V0X3RpbWVyKHUzMiAqIHRpY2tzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X3RpbWVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF90aW1lcik7CiAKIAlpZiAoIXRpY2tzKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3RpbWVyKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90aW1lcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTEzMyw3ICsxMzMsNiBAQAogICogICAgICAgICAgICAgIDIqKjMyIFRpY2tzIC8gMyw2MDAsMDAwIFRpY2tzL1NlYyA9IDExOTMgc2VjIG9yIDE5Ljg4IG1pbnV0ZXMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGltZXJfZHVyYXRpb24odTMyIHN0YXJ0X3RpY2tzLCB1MzIgZW5kX3RpY2tzLCB1MzIgKiB0aW1lX2VsYXBzZWQpCiB7CkBAIC0xNDEsNyArMTQwLDcgQEAKIAl1MzIgZGVsdGFfdGlja3M7CiAJYWNwaV9pbnRlZ2VyIHF1b3RpZW50OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfdGltZXJfZHVyYXRpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3RpbWVyX2R1cmF0aW9uKTsKIAogCWlmICghdGltZV9lbGFwc2VkKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTE1NCw3ICsxNTMsOCBAQAogCWlmIChzdGFydF90aWNrcyA8IGVuZF90aWNrcykgewogCQlkZWx0YV90aWNrcyA9IGVuZF90aWNrcyAtIHN0YXJ0X3RpY2tzOwogCX0gZWxzZSBpZiAoc3RhcnRfdGlja3MgPiBlbmRfdGlja3MpIHsKLQkJaWYgKDAgPT0gYWNwaV9nYmxfRkFEVC0+dG1yX3ZhbF9leHQpIHsKKwkJaWYgKGFjcGlfZ2JsX0ZBRFQtPnRtcl92YWxfZXh0ID09IDApIHsKKwogCQkJLyogMjQtYml0IFRpbWVyICovCiAKIAkJCWRlbHRhX3RpY2tzID0KQEAgLTE4Myw0ICsxODMsNCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3RpbWVyX2R1cmF0aW9uKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90aW1lcl9kdXJhdGlvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNhY2Nlc3MuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNhY2Nlc3MuYwppbmRleCAxMTQ5YmMxLi40OGZhZGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWNjZXNzLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FjY2Vzcy5jCkBAIC03MCw3ICs3MCw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdHJpbmcgdmFsID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX3Jvb3RfaW5pdGlhbGl6ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfcm9vdF9pbml0aWFsaXplKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtOTgsNiArOTgsNyBAQAogCQkJICAiRW50ZXJpbmcgcHJlZGVmaW5lZCBlbnRyaWVzIGludG8gbmFtZXNwYWNlXG4iKSk7CiAKIAlmb3IgKGluaXRfdmFsID0gYWNwaV9nYmxfcHJlX2RlZmluZWRfbmFtZXM7IGluaXRfdmFsLT5uYW1lOyBpbml0X3ZhbCsrKSB7CisKIAkJLyogX09TSSBpcyBvcHRpb25hbCBmb3Igbm93LCB3aWxsIGJlIHBlcm1hbmVudCBsYXRlciAqLwogCiAJCWlmICghQUNQSV9TVFJDTVAoaW5pdF92YWwtPm5hbWUsICJfT1NJIikKQEAgLTE1Niw3ICsxNTcsNyBAQAogCiAjaWYgZGVmaW5lZCAoQUNQSV9BU0xfQ09NUElMRVIpCiAKLQkJCQkvKiBzYXZlIHRoZSBwYXJhbWV0ZXIgY291bnQgZm9yIHRoZSBpX2FTTCBjb21waWxlciAqLworCQkJCS8qIFNhdmUgdGhlIHBhcmFtZXRlciBjb3VudCBmb3IgdGhlIGlfYVNMIGNvbXBpbGVyICovCiAKIAkJCQluZXdfbm9kZS0+dmFsdWUgPSBvYmpfZGVzYy0+bWV0aG9kLnBhcmFtX2NvdW50OwogI2Vsc2UKQEAgLTI1OCwxMCArMjU5LDggQEAKIAkvKiBTYXZlIGEgaGFuZGxlIHRvICJfR1BFIiwgaXQgaXMgYWx3YXlzIHByZXNlbnQgKi8KIAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc19nZXRfbm9kZV9ieV9wYXRoKCJcXF9HUEUiLCBOVUxMLAotCQkJCQkgICAgIEFDUElfTlNfTk9fVVBTRUFSQ0gsCi0JCQkJCSAgICAgJmFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZSk7CisJCXN0YXR1cyA9IGFjcGlfbnNfZ2V0X25vZGUoTlVMTCwgIlxcX0dQRSIsIEFDUElfTlNfTk9fVVBTRUFSQ0gsCisJCQkJCSAgJmFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZSk7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0zMTAsMTcgKzMwOSwxNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgdHlwZV90b19jaGVja19mb3I7CiAJYWNwaV9vYmplY3RfdHlwZSB0aGlzX3NlYXJjaF90eXBlOwogCXUzMiBzZWFyY2hfcGFyZW50X2ZsYWcgPSBBQ1BJX05TX1NFQVJDSF9QQVJFTlQ7Ci0JdTMyIGxvY2FsX2ZsYWdzID0gZmxhZ3MgJiB+KEFDUElfTlNfRVJST1JfSUZfRk9VTkQgfAotCQkJCSAgICBBQ1BJX05TX1NFQVJDSF9QQVJFTlQpOworCXUzMiBsb2NhbF9mbGFnczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2xvb2t1cCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfbG9va3VwKTsKIAogCWlmICghcmV0dXJuX25vZGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCWFjcGlfZ2JsX25zX2xvb2t1cF9jb3VudCsrOworCWxvY2FsX2ZsYWdzID0gZmxhZ3MgJiB+KEFDUElfTlNfRVJST1JfSUZfRk9VTkQgfCBBQ1BJX05TX1NFQVJDSF9QQVJFTlQpOwogCSpyZXR1cm5fbm9kZSA9IEFDUElfRU5UUllfTk9UX0ZPVU5EOworCWFjcGlfZ2JsX25zX2xvb2t1cF9jb3VudCsrOwogCiAJaWYgKCFhY3BpX2dibF9yb290X25vZGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX05BTUVTUEFDRSk7CkBAIC0zNDYsMTQgKzM0NSwxNyBAQAogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTlRFUk5BTCk7CiAJCX0KIAotCQkvKgotCQkgKiBUaGlzIG5vZGUgbWlnaHQgbm90IGJlIGEgYWN0dWFsICJzY29wZSIgbm9kZSAoc3VjaCBhcyBhCi0JCSAqIERldmljZS9NZXRob2QsIGV0Yy4pICBJdCBjb3VsZCBiZSBhIFBhY2thZ2Ugb3Igb3RoZXIgb2JqZWN0IG5vZGUuCi0JCSAqIEJhY2t1cCB1cCB0aGUgdHJlZSB0byBmaW5kIHRoZSBjb250YWluaW5nIHNjb3BlIG5vZGUuCi0JCSAqLwotCQl3aGlsZSAoIWFjcGlfbnNfb3BlbnNfc2NvcGUocHJlZml4X25vZGUtPnR5cGUpICYmCi0JCSAgICAgICBwcmVmaXhfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfQU5ZKSB7Ci0JCQlwcmVmaXhfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHByZWZpeF9ub2RlKTsKKwkJaWYgKCEoZmxhZ3MgJiBBQ1BJX05TX1BSRUZJWF9JU19TQ09QRSkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIG5vZGUgbWlnaHQgbm90IGJlIGEgYWN0dWFsICJzY29wZSIgbm9kZSAoc3VjaCBhcyBhCisJCQkgKiBEZXZpY2UvTWV0aG9kLCBldGMuKSAgSXQgY291bGQgYmUgYSBQYWNrYWdlIG9yIG90aGVyIG9iamVjdCBub2RlLgorCQkJICogQmFja3VwIHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGNvbnRhaW5pbmcgc2NvcGUgbm9kZS4KKwkJCSAqLworCQkJd2hpbGUgKCFhY3BpX25zX29wZW5zX3Njb3BlKHByZWZpeF9ub2RlLT50eXBlKSAmJgorCQkJICAgICAgIHByZWZpeF9ub2RlLT50eXBlICE9IEFDUElfVFlQRV9BTlkpIHsKKwkJCQlwcmVmaXhfbm9kZSA9CisJCQkJICAgIGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHByZWZpeF9ub2RlKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMzY1LDYgKzM2Nyw3IEBACiAJICogQmVnaW4gZXhhbWluYXRpb24gb2YgdGhlIGFjdHVhbCBwYXRobmFtZQogCSAqLwogCWlmICghcGF0aG5hbWUpIHsKKwogCQkvKiBBIE51bGwgbmFtZV9wYXRoIGlzIGFsbG93ZWQgYW5kIHJlZmVycyB0byB0aGUgcm9vdCAqLwogCiAJCW51bV9zZWdtZW50cyA9IDA7CkBAIC0zODksNiArMzkyLDcgQEAKIAkJICogdG8gdGhlIGN1cnJlbnQgc2NvcGUpLgogCQkgKi8KIAkJaWYgKCpwYXRoID09ICh1OCkgQU1MX1JPT1RfUFJFRklYKSB7CisKIAkJCS8qIFBhdGhuYW1lIGlzIGZ1bGx5IHF1YWxpZmllZCwgc3RhcnQgZnJvbSB0aGUgcm9vdCAqLwogCiAJCQl0aGlzX25vZGUgPSBhY3BpX2dibF9yb290X25vZGU7CkBAIC00MTYsNiArNDIwLDcgQEAKIAkJCXRoaXNfbm9kZSA9IHByZWZpeF9ub2RlOwogCQkJbnVtX2NhcmF0cyA9IDA7CiAJCQl3aGlsZSAoKnBhdGggPT0gKHU4KSBBTUxfUEFSRU5UX1BSRUZJWCkgeworCiAJCQkJLyogTmFtZSBpcyBmdWxseSBxdWFsaWZpZWQsIG5vIHNlYXJjaCBydWxlcyBhcHBseSAqLwogCiAJCQkJc2VhcmNoX3BhcmVudF9mbGFnID0gQUNQSV9OU19OT19VUFNFQVJDSDsKQEAgLTQzMCw2ICs0MzUsNyBAQAogCQkJCW51bV9jYXJhdHMrKzsKIAkJCQl0aGlzX25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZSh0aGlzX25vZGUpOwogCQkJCWlmICghdGhpc19ub2RlKSB7CisKIAkJCQkJLyogQ3VycmVudCBzY29wZSBoYXMgbm8gcGFyZW50IHNjb3BlICovCiAKIAkJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKQEAgLTU2OSw2ICs1NzUsNyBAQAogCQkJCQkgICAgICZ0aGlzX25vZGUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CisKIAkJCQkvKiBOYW1lIG5vdCBmb3VuZCBpbiBBQ1BJIG5hbWVzcGFjZSAqLwogCiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKQEAgLTYwMiwxMCArNjA5LDExIEBACiAJCSAgICAodHlwZV90b19jaGVja19mb3IgIT0gQUNQSV9UWVBFX0xPQ0FMX1NDT1BFKSAmJgogCQkgICAgKHRoaXNfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfQU5ZKSAmJgogCQkgICAgKHRoaXNfbm9kZS0+dHlwZSAhPSB0eXBlX3RvX2NoZWNrX2ZvcikpIHsKKwogCQkJLyogQ29tcGxhaW4gYWJvdXQgYSB0eXBlIG1pc21hdGNoICovCiAKIAkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAibnNfbG9va3VwOiBUeXBlIG1pc21hdGNoIG9uICU0LjRzICglcyksIHNlYXJjaGluZyBmb3IgKCVzKSIsCisJCQkJICAgICAgIk5zTG9va3VwOiBUeXBlIG1pc21hdGNoIG9uICU0LjRzICglcyksIHNlYXJjaGluZyBmb3IgKCVzKSIsCiAJCQkJICAgICAgQUNQSV9DQVNUX1BUUihjaGFyLCAmc2ltcGxlX25hbWUpLAogCQkJCSAgICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0aGlzX25vZGUtPnR5cGUpLAogCQkJCSAgICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FsbG9jLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWxsb2MuYwppbmRleCA5Yjg3MWYzLi5kYzNmMDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWxsb2MuYwpAQCAtNDcsOSArNDcsNiBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc2FsbG9jIikKIAotLyogTG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgYWNwaV9uc19yZW1vdmVfcmVmZXJlbmNlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19jcmVhdGVfbm9kZQpAQCAtNjEsMTQgKzU4LDEzIEBACiAgKiBERVNDUklQVElPTjogQ3JlYXRlIGEgbmFtZXNwYWNlIG5vZGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqYWNwaV9uc19jcmVhdGVfbm9kZSh1MzIgbmFtZSkKIHsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2NyZWF0ZV9ub2RlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19jcmVhdGVfbm9kZSk7CiAKLQlub2RlID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSkpOworCW5vZGUgPSBhY3BpX29zX2FjcXVpcmVfb2JqZWN0KGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSk7CiAJaWYgKCFub2RlKSB7CiAJCXJldHVybl9QVFIoTlVMTCk7CiAJfQpAQCAtNzYsOSArNzIsNyBAQAogCUFDUElfTUVNX1RSQUNLSU5HKGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfYWxsb2NhdGVkKyspOwogCiAJbm9kZS0+bmFtZS5pbnRlZ2VyID0gbmFtZTsKLQlub2RlLT5yZWZlcmVuY2VfY291bnQgPSAxOwogCUFDUElfU0VUX0RFU0NSSVBUT1JfVFlQRShub2RlLCBBQ1BJX0RFU0NfVFlQRV9OQU1FRCk7Ci0KIAlyZXR1cm5fUFRSKG5vZGUpOwogfQogCkBAIC0xMDAsNyArOTQsNyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwcmV2X25vZGU7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5leHRfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJuc19kZWxldGVfbm9kZSIsIG5vZGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2RlbGV0ZV9ub2RlLCBub2RlKTsKIAogCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSk7CiAKQEAgLTExNSw2ICsxMDksNyBAQAogCX0KIAogCWlmIChwcmV2X25vZGUpIHsKKwogCQkvKiBOb2RlIGlzIG5vdCBmaXJzdCBjaGlsZCwgdW5saW5rIGl0ICovCiAKIAkJcHJldl9ub2RlLT5wZWVyID0gbmV4dF9ub2RlLT5wZWVyOwpAQCAtMTI1LDYgKzEyMCw3IEBACiAJCS8qIE5vZGUgaXMgZmlyc3QgY2hpbGQgKGhhcyBubyBwcmV2aW91cyBwZWVyKSAqLwogCiAJCWlmIChuZXh0X25vZGUtPmZsYWdzICYgQU5PQkpfRU5EX09GX1BFRVJfTElTVCkgeworCiAJCQkvKiBObyBwZWVycyBhdCBhbGwgKi8KIAogCQkJcGFyZW50X25vZGUtPmNoaWxkID0gTlVMTDsKQEAgLTEzNywxMCArMTMzLDEwIEBACiAJQUNQSV9NRU1fVFJBQ0tJTkcoYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9mcmVlZCsrKTsKIAogCS8qCi0JICogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUgdGhlbiBkZWxldGUgdGhlIG5vZGUKKwkgKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBkZWxldGUgdGhlIG5vZGUKIAkgKi8KIAlhY3BpX25zX2RldGFjaF9vYmplY3Qobm9kZSk7Ci0JQUNQSV9NRU1fRlJFRShub2RlKTsKKwkodm9pZClhY3BpX29zX3JlbGVhc2Vfb2JqZWN0KGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSwgbm9kZSk7CiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTE3MSw3ICsxNjcsNyBAQAogCWFjcGlfb3duZXJfaWQgb3duZXJfaWQgPSAwOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpjaGlsZF9ub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfaW5zdGFsbF9ub2RlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19pbnN0YWxsX25vZGUpOwogCiAJLyoKIAkgKiBHZXQgdGhlIG93bmVyIElEIGZyb20gdGhlIFdhbGsgc3RhdGUKQEAgLTIxNiwxNCArMjEyLDYgQEAKIAkJCSAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKHBhcmVudF9ub2RlLT50eXBlKSwKIAkJCSAgcGFyZW50X25vZGUpKTsKIAotCS8qCi0JICogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQocykgb2YgYWxsIHBhcmVudHMgdXAgdG8KLQkgKiB0aGUgcm9vdCEKLQkgKi8KLQl3aGlsZSAoKG5vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKSkgIT0gTlVMTCkgewotCQlub2RlLT5yZWZlcmVuY2VfY291bnQrKzsKLQl9Ci0KIAlyZXR1cm5fVk9JRDsKIH0KIApAQCAtMjQ0LDEwICsyMzIsOSBAQAogewogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpjaGlsZF9ub2RlOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpuZXh0X25vZGU7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdTggZmxhZ3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigibnNfZGVsZXRlX2NoaWxkcmVuIiwgcGFyZW50X25vZGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2RlbGV0ZV9jaGlsZHJlbiwgcGFyZW50X25vZGUpOwogCiAJaWYgKCFwYXJlbnRfbm9kZSkgewogCQlyZXR1cm5fVk9JRDsKQEAgLTI2NCw2ICsyNTEsNyBAQAogCSAqIERlYWxsb2NhdGUgYWxsIGNoaWxkcmVuIGF0IHRoaXMgbGV2ZWwKIAkgKi8KIAlkbyB7CisKIAkJLyogR2V0IHRoZSB0aGluZ3Mgd2UgbmVlZCAqLwogCiAJCW5leHRfbm9kZSA9IGNoaWxkX25vZGUtPnBlZXI7CkBAIC0yODksMjYgKzI3NywxMCBAQAogCQkgKi8KIAkJYWNwaV9uc19kZXRhY2hfb2JqZWN0KGNoaWxkX25vZGUpOwogCi0JCS8qCi0JCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50KHMpIG9mIGFsbCBwYXJlbnRzIHVwIHRvCi0JCSAqIHRoZSByb290ISAoY291bnRzIHdlcmUgaW5jcmVtZW50ZWQgd2hlbiB0aGUgbm9kZSB3YXMgY3JlYXRlZCkKLQkJICovCi0JCW5vZGUgPSBjaGlsZF9ub2RlOwotCQl3aGlsZSAoKG5vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKSkgIT0gTlVMTCkgewotCQkJbm9kZS0+cmVmZXJlbmNlX2NvdW50LS07Ci0JCX0KLQotCQkvKiBUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgcmVmZXJlbmNlIHJlbWFpbmluZyBvbiB0aGlzIG5vZGUgKi8KLQotCQlpZiAoY2hpbGRfbm9kZS0+cmVmZXJlbmNlX2NvdW50ICE9IDEpIHsKLQkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiRXhpc3RpbmcgcmVmZXJlbmNlcyAoJWQpIG9uIG5vZGUgYmVpbmcgZGVsZXRlZCAoJXApIiwKLQkJCQkgICAgICBjaGlsZF9ub2RlLT5yZWZlcmVuY2VfY291bnQsIGNoaWxkX25vZGUpKTsKLQkJfQotCiAJCS8qIE5vdyB3ZSBjYW4gZGVsZXRlIHRoZSBub2RlICovCiAKLQkJQUNQSV9NRU1fRlJFRShjaGlsZF9ub2RlKTsKKwkJKHZvaWQpYWNwaV9vc19yZWxlYXNlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUsCisJCQkJCSAgICAgY2hpbGRfbm9kZSk7CiAKIAkJLyogQW5kIG1vdmUgb24gdG8gdGhlIG5leHQgY2hpbGQgaW4gdGhlIGxpc3QgKi8KIApAQCAtMzQxLDcgKzMxMyw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmNoaWxkX25vZGUgPSBOVUxMOwogCXUzMiBsZXZlbCA9IDE7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19kZWxldGVfbmFtZXNwYWNlX3N1YnRyZWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2RlbGV0ZV9uYW1lc3BhY2Vfc3VidHJlZSk7CiAKIAlpZiAoIXBhcmVudF9ub2RlKSB7CiAJCXJldHVybl9WT0lEOwpAQCAtMzUyLDExICszMjQsMTQgQEAKIAkgKiB0byB3aGVyZSB3ZSBzdGFydGVkLgogCSAqLwogCXdoaWxlIChsZXZlbCA+IDApIHsKKwogCQkvKiBHZXQgdGhlIG5leHQgbm9kZSBpbiB0aGlzIHNjb3BlIChOVUxMIGlmIG5vbmUpICovCiAKLQkJY2hpbGRfbm9kZSA9IGFjcGlfbnNfZ2V0X25leHRfbm9kZShBQ1BJX1RZUEVfQU5ZLCBwYXJlbnRfbm9kZSwKLQkJCQkJCSAgIGNoaWxkX25vZGUpOworCQljaGlsZF9ub2RlID0KKwkJICAgIGFjcGlfbnNfZ2V0X25leHRfbm9kZShBQ1BJX1RZUEVfQU5ZLCBwYXJlbnRfbm9kZSwKKwkJCQkJICBjaGlsZF9ub2RlKTsKIAkJaWYgKGNoaWxkX25vZGUpIHsKKwogCQkJLyogRm91bmQgYSBjaGlsZCBub2RlIC0gZGV0YWNoIGFueSBhdHRhY2hlZCBvYmplY3QgKi8KIAogCQkJYWNwaV9uc19kZXRhY2hfb2JqZWN0KGNoaWxkX25vZGUpOwpAQCAtNDAxLDU1ICszNzYsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3JlbW92ZV9yZWZlcmVuY2UKLSAqCi0gKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgLSBOYW1lZCBub2RlIHdob3NlIHJlZmVyZW5jZSBjb3VudCBpcyB0byBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50ZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgTm9uZS4KLSAqCi0gKiBERVNDUklQVElPTjogUmVtb3ZlIGEgTm9kZSByZWZlcmVuY2UuICBEZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQKLSAqICAgICAgICAgICAgICBvZiBhbGwgcGFyZW50IE5vZGVzIHVwIHRvIHRoZSByb290LiAgQW55IG5vZGUgYWxvbmcKLSAqICAgICAgICAgICAgICB0aGUgd2F5IHRoYXQgcmVhY2hlcyB6ZXJvIHJlZmVyZW5jZXMgaXMgZnJlZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYWNwaV9uc19yZW1vdmVfcmVmZXJlbmNlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKQotewotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqdGhpc19ub2RlOwotCi0JQUNQSV9GVU5DVElPTl9FTlRSWSgpOwotCi0JLyoKLQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudChzKSBvZiB0aGlzIG5vZGUgYW5kIGFsbAotCSAqIG5vZGVzIHVwIHRvIHRoZSByb290LCAgRGVsZXRlIGFueXRoaW5nIHdpdGggemVybyByZW1haW5pbmcgcmVmZXJlbmNlcy4KLQkgKi8KLQl0aGlzX25vZGUgPSBub2RlOwotCXdoaWxlICh0aGlzX25vZGUpIHsKLQkJLyogUHJlcGFyZSB0byBtb3ZlIHVwIHRvIHBhcmVudCAqLwotCi0JCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUodGhpc19ub2RlKTsKLQotCQkvKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGlzIG5vZGUgKi8KLQotCQl0aGlzX25vZGUtPnJlZmVyZW5jZV9jb3VudC0tOwotCi0JCS8qIERlbGV0ZSB0aGUgbm9kZSBpZiBubyBtb3JlIHJlZmVyZW5jZXMgKi8KLQotCQlpZiAoIXRoaXNfbm9kZS0+cmVmZXJlbmNlX2NvdW50KSB7Ci0JCQkvKiBEZWxldGUgYWxsIGNoaWxkcmVuIGFuZCBkZWxldGUgdGhlIG5vZGUgKi8KLQotCQkJYWNwaV9uc19kZWxldGVfY2hpbGRyZW4odGhpc19ub2RlKTsKLQkJCWFjcGlfbnNfZGVsZXRlX25vZGUodGhpc19ub2RlKTsKLQkJfQotCi0JCXRoaXNfbm9kZSA9IHBhcmVudF9ub2RlOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyCiAgKgogICogUEFSQU1FVEVSUzogIG93bmVyX2lkICAgIC0gQWxsIG5vZGVzIHdpdGggdGhpcyBvd25lciB3aWxsIGJlIGRlbGV0ZWQKQEAgLTQ2OSwxNSArMzk1LDE1IEBACiAJdTMyIGxldmVsOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJuc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyIiwgb3duZXJfaWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKG5zX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIsIG93bmVyX2lkKTsKIAogCWlmIChvd25lcl9pZCA9PSAwKSB7CiAJCXJldHVybl9WT0lEOwogCX0KIAorCWRlbGV0aW9uX25vZGUgPSBOVUxMOwogCXBhcmVudF9ub2RlID0gYWNwaV9nYmxfcm9vdF9ub2RlOwogCWNoaWxkX25vZGUgPSBOVUxMOwotCWRlbGV0aW9uX25vZGUgPSBOVUxMOwogCWxldmVsID0gMTsKIAogCS8qCkBAIC00OTQsMTIgKzQyMCwxNCBAQAogCQkJCQkgIGNoaWxkX25vZGUpOwogCiAJCWlmIChkZWxldGlvbl9ub2RlKSB7Ci0JCQlhY3BpX25zX3JlbW92ZV9yZWZlcmVuY2UoZGVsZXRpb25fbm9kZSk7CisJCQlhY3BpX25zX2RlbGV0ZV9jaGlsZHJlbihkZWxldGlvbl9ub2RlKTsKKwkJCWFjcGlfbnNfZGVsZXRlX25vZGUoZGVsZXRpb25fbm9kZSk7CiAJCQlkZWxldGlvbl9ub2RlID0gTlVMTDsKIAkJfQogCiAJCWlmIChjaGlsZF9ub2RlKSB7CiAJCQlpZiAoY2hpbGRfbm9kZS0+b3duZXJfaWQgPT0gb3duZXJfaWQpIHsKKwogCQkJCS8qIEZvdW5kIGEgbWF0Y2hpbmcgY2hpbGQgbm9kZSAtIGRldGFjaCBhbnkgYXR0YWNoZWQgb2JqZWN0ICovCiAKIAkJCQlhY3BpX25zX2RldGFjaF9vYmplY3QoY2hpbGRfbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZHVtcC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXAuYwppbmRleCBhMjgwNzMxLi5kNzJkZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNkdW1wLmMKQEAgLTc1LDcgKzc1LDcgQEAKIHsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoIm5zX3ByaW50X3BhdGhuYW1lIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKG5zX3ByaW50X3BhdGhuYW1lKTsKIAogCWlmICghKGFjcGlfZGJnX2xldmVsICYgQUNQSV9MVl9OQU1FUykKIAkgICAgfHwgIShhY3BpX2RiZ19sYXllciAmIEFDUElfTkFNRVNQQUNFKSkgewpAQCAtMTIzLDcgKzEyMyw3IEBACiBhY3BpX25zX2R1bXBfcGF0aG5hbWUoYWNwaV9oYW5kbGUgaGFuZGxlLCBjaGFyICptc2csIHUzMiBsZXZlbCwgdTMyIGNvbXBvbmVudCkKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2R1bXBfcGF0aG5hbWUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX2R1bXBfcGF0aG5hbWUpOwogCiAJLyogRG8gdGhpcyBvbmx5IGlmIHRoZSByZXF1ZXN0ZWQgZGVidWcgbGV2ZWwgYW5kIGNvbXBvbmVudCBhcmUgZW5hYmxlZCAqLwogCkBAIC0xNjcsNyArMTY3LDcgQEAKIAl1MzIgZGJnX2xldmVsOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJuc19kdW1wX29uZV9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfZHVtcF9vbmVfb2JqZWN0KTsKIAogCS8qIElzIG91dHB1dCBlbmFibGVkPyAqLwogCkBAIC0xOTEsNiArMTkxLDcgQEAKIAl9CiAKIAlpZiAoIShpbmZvLT5kaXNwbGF5X3R5cGUgJiBBQ1BJX0RJU1BMQVlfU0hPUlQpKSB7CisKIAkJLyogSW5kZW50IHRoZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBsZXZlbCAqLwogCiAJCWFjcGlfb3NfcHJpbnRmKCIlMmQlKnMiLCAodTMyKSBsZXZlbCAtIDEsIChpbnQpbGV2ZWwgKiAyLCAiICIpOwpAQCAtMjAzLDYgKzIwNCw5IEBACiAJCX0KIAogCQlpZiAoIWFjcGlfdXRfdmFsaWRfYWNwaV9uYW1lKHRoaXNfbm9kZS0+bmFtZS5pbnRlZ2VyKSkgeworCQkJdGhpc19ub2RlLT5uYW1lLmludGVnZXIgPQorCQkJICAgIGFjcGlfdXRfcmVwYWlyX25hbWUodGhpc19ub2RlLT5uYW1lLmludGVnZXIpOworCiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJJbnZhbGlkIEFDUEkgTmFtZSAlMDhYIiwKIAkJCQkgICAgICB0aGlzX25vZGUtPm5hbWUuaW50ZWdlcikpOwogCQl9CkBAIC0yMjYsNiArMjMwLDcgQEAKIAljYXNlIEFDUElfRElTUExBWV9TVU1NQVJZOgogCiAJCWlmICghb2JqX2Rlc2MpIHsKKwogCQkJLyogTm8gYXR0YWNoZWQgb2JqZWN0LCB3ZSBhcmUgZG9uZSAqLwogCiAJCQlhY3BpX29zX3ByaW50ZigiXG4iKTsKQEAgLTQxOSw2ICs0MjQsNyBAQAogCiAJCWFjcGlfb3NfcHJpbnRmKCJPOiVwIiwgb2JqX2Rlc2MpOwogCQlpZiAoIW9ial9kZXNjKSB7CisKIAkJCS8qIE5vIGF0dGFjaGVkIG9iamVjdCwgd2UgYXJlIGRvbmUgKi8KIAogCQkJYWNwaV9vc19wcmludGYoIlxuIik7CkBAIC02NjksNyArNjc1LDcgQEAKIHsKIAlhY3BpX2hhbmRsZSBzZWFyY2hfaGFuZGxlID0gc2VhcmNoX2Jhc2U7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19kdW1wX3RhYmxlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZHVtcF90YWJsZXMpOwogCiAJaWYgKCFhY3BpX2dibF9yb290X25vZGUpIHsKIAkJLyoKQEAgLTY4Miw2ICs2ODgsNyBAQAogCX0KIAogCWlmIChBQ1BJX05TX0FMTCA9PSBzZWFyY2hfYmFzZSkgeworCiAJCS8qIEVudGlyZSBuYW1lc3BhY2UgKi8KIAogCQlzZWFyY2hfaGFuZGxlID0gYWNwaV9nYmxfcm9vdF9ub2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXBkdi5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2R1bXBkdi5jCmluZGV4IGFmZjg5OWEuLmM2YmY1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNkdW1wZHYuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZHVtcGR2LmMKQEAgLTc0LDcgKzc0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoIm5zX2R1bXBfb25lX2RldmljZSIpOworCUFDUElfRlVOQ1RJT05fTkFNRShuc19kdW1wX29uZV9kZXZpY2UpOwogCiAJc3RhdHVzID0KIAkgICAgYWNwaV9uc19kdW1wX29uZV9vYmplY3Qob2JqX2hhbmRsZSwgbGV2ZWwsIGNvbnRleHQsIHJldHVybl92YWx1ZSk7CkBAIC05Miw3ICs5Miw3IEBACiAJCQkJICAgICAgaW5mby0+aGFyZHdhcmVfaWQudmFsdWUsCiAJCQkJICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGluZm8tPmFkZHJlc3MpLAogCQkJCSAgICAgIGluZm8tPmN1cnJlbnRfc3RhdHVzKSk7Ci0JCUFDUElfTUVNX0ZSRUUoaW5mbyk7CisJCUFDUElfRlJFRShpbmZvKTsKIAl9CiAKIAlyZXR1cm4gKHN0YXR1cyk7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAlhY3BpX2hhbmRsZSBzeXNfYnVzX2hhbmRsZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoIm5zX2R1bXBfcm9vdF9kZXZpY2VzIik7CisJQUNQSV9GVU5DVElPTl9OQU1FKG5zX2R1bXBfcm9vdF9kZXZpY2VzKTsKIAogCS8qIE9ubHkgZHVtcCB0aGUgdGFibGUgaWYgdHJhY2luZyBpcyBlbmFibGVkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZXZhbC5jCmluZGV4IDE5ZDdiOTQuLjRiMGE0YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2V2YWwuYwpAQCAtMSw3ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogTW9kdWxlIE5hbWU6IG5zZXZhbCAtIE9iamVjdCBldmFsdWF0aW9uIGludGVyZmFjZXMgLS0gaW5jbHVkZXMgY29udHJvbAotICogICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBsb29rdXAgYW5kIGV4ZWN1dGlvbi4KKyAqIE1vZHVsZSBOYW1lOiBuc2V2YWwgLSBPYmplY3QgZXZhbHVhdGlvbiwgaW5jbHVkZXMgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNTAsMTk2ICs0OSwxNCBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc2V2YWwiKQogCi0vKiBMb2NhbCBwcm90b3R5cGVzICovCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfZXhlY3V0ZV9jb250cm9sX21ldGhvZChzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbyk7Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX25zX2dldF9vYmplY3RfdmFsdWUoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2V2YWx1YXRlX3JlbGF0aXZlCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19ldmFsdWF0ZQogICoKLSAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBOYW1lIG9mIG1ldGhvZCB0byBleGVjdXRlLCBJZiBOVUxMLCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgaXMgdGhlIG9iamVjdCB0byBleGVjdXRlCi0gKiAgICAgICAgICAgICAgSW5mbyAgICAgICAgICAgIC0gTWV0aG9kIGluZm8gYmxvY2ssIGNvbnRhaW5zOgotICogICAgICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBXaGVyZSB0byBwdXQgbWV0aG9kJ3MgcmV0dXJuIHZhbHVlIChpZgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkpLiAgSWYgTlVMTCwgbm8gdmFsdWUgaXMgcmV0dXJuZWQuCi0gKiAgICAgICAgICAgICAgICAgIFBhcmFtcyAgICAgICAgICAtIExpc3Qgb2YgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBtZXRob2QsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgTlVMTC4gIFBhcmFtcyBpdHNlbGYgbWF5IGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgaWYgbm8gcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLgotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogRXZhbHVhdGUgdGhlIG9iamVjdCBvciBmaW5kIGFuZCBleGVjdXRlIHRoZSByZXF1ZXN0ZWQgbWV0aG9kCi0gKgotICogTVVURVg6ICAgICAgIExvY2tzIE5hbWVzcGFjZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX25zX2V2YWx1YXRlX3JlbGF0aXZlKGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbykKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUgPSBOVUxMOwotCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGVfaW5mbzsKLQljaGFyICppbnRlcm5hbF9wYXRoID0gTlVMTDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2V2YWx1YXRlX3JlbGF0aXZlIik7Ci0KLQkvKgotCSAqIE11c3QgaGF2ZSBhIHZhbGlkIG9iamVjdCBoYW5kbGUKLQkgKi8KLQlpZiAoIWluZm8gfHwgIWluZm8tPm5vZGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQotCS8qIEJ1aWxkIGFuIGludGVybmFsIG5hbWUgc3RyaW5nIGZvciB0aGUgbWV0aG9kICovCi0KLQlzdGF0dXMgPSBhY3BpX25zX2ludGVybmFsaXplX25hbWUocGF0aG5hbWUsICZpbnRlcm5hbF9wYXRoKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0Jc2NvcGVfaW5mbyA9IGFjcGlfdXRfY3JlYXRlX2dlbmVyaWNfc3RhdGUoKTsKLQlpZiAoIXNjb3BlX2luZm8pIHsKLQkJZ290byBjbGVhbnVwMTsKLQl9Ci0KLQkvKiBHZXQgdGhlIHByZWZpeCBoYW5kbGUgYW5kIE5vZGUgKi8KLQotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JaW5mby0+bm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGluZm8tPm5vZGUpOwotCWlmICghaW5mby0+bm9kZSkgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCS8qIExvb2t1cCB0aGUgbmFtZSBpbiB0aGUgbmFtZXNwYWNlICovCi0KLQlzY29wZV9pbmZvLT5zY29wZS5ub2RlID0gaW5mby0+bm9kZTsKLQlzdGF0dXMgPSBhY3BpX25zX2xvb2t1cChzY29wZV9pbmZvLCBpbnRlcm5hbF9wYXRoLCBBQ1BJX1RZUEVfQU5ZLAotCQkJCUFDUElfSU1PREVfRVhFQ1VURSwgQUNQSV9OU19OT19VUFNFQVJDSCwgTlVMTCwKLQkJCQkmbm9kZSk7Ci0KLQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLCAiT2JqZWN0IFslc10gbm90IGZvdW5kIFslc11cbiIsCi0JCQkJICBwYXRobmFtZSwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCS8qCi0JICogTm93IHRoYXQgd2UgaGF2ZSBhIGhhbmRsZSB0byB0aGUgb2JqZWN0LCB3ZSBjYW4gYXR0ZW1wdCB0byBldmFsdWF0ZSBpdC4KLQkgKi8KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLCAiJXMgWyVwXSBWYWx1ZSAlcFxuIiwKLQkJCSAgcGF0aG5hbWUsIG5vZGUsIGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKSkpOwotCi0JaW5mby0+bm9kZSA9IG5vZGU7Ci0Jc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZV9ieV9oYW5kbGUoaW5mbyk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAotCQkJICAiKioqIENvbXBsZXRlZCBldmFsIG9mIG9iamVjdCAlcyAqKipcbiIsIHBhdGhuYW1lKSk7Ci0KLSAgICAgIGNsZWFudXA6Ci0JYWNwaV91dF9kZWxldGVfZ2VuZXJpY19zdGF0ZShzY29wZV9pbmZvKTsKLQotICAgICAgY2xlYW51cDE6Ci0JQUNQSV9NRU1fRlJFRShpbnRlcm5hbF9wYXRoKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19ldmFsdWF0ZV9ieV9uYW1lCi0gKgotICogUEFSQU1FVEVSUzogIFBhdGhuYW1lICAgICAgICAtIEZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSB0byB0aGUgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgSW5mbyAgICAgICAgICAgICAgICAtIE1ldGhvZCBpbmZvIGJsb2NrLCBjb250YWluczoKLSAqICAgICAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgIC0gV2hlcmUgdG8gcHV0IG1ldGhvZCdzIHJldHVybiB2YWx1ZSAoaWYKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55KS4gIElmIE5VTEwsIG5vIHZhbHVlIGlzIHJldHVybmVkLgotICogICAgICAgICAgICAgICAgICBQYXJhbXMgICAgICAgICAgLSBMaXN0IG9mIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgbWV0aG9kLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IE5VTEwuICBQYXJhbXMgaXRzZWxmIG1heSBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIGlmIG5vIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZC4KLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IEV2YWx1YXRlIHRoZSBvYmplY3Qgb3IgcmluZCBhbmQgZXhlY3V0ZSB0aGUgcmVxdWVzdGVkIG1ldGhvZAotICogICAgICAgICAgICAgIHBhc3NpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcnMKLSAqCi0gKiBNVVRFWDogICAgICAgTG9ja3MgTmFtZXNwYWNlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9zdGF0dXMKLWFjcGlfbnNfZXZhbHVhdGVfYnlfbmFtZShjaGFyICpwYXRobmFtZSwgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWNoYXIgKmludGVybmFsX3BhdGggPSBOVUxMOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZXZhbHVhdGVfYnlfbmFtZSIpOwotCi0JLyogQnVpbGQgYW4gaW50ZXJuYWwgbmFtZSBzdHJpbmcgZm9yIHRoZSBtZXRob2QgKi8KLQotCXN0YXR1cyA9IGFjcGlfbnNfaW50ZXJuYWxpemVfbmFtZShwYXRobmFtZSwgJmludGVybmFsX3BhdGgpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCS8qIExvb2t1cCB0aGUgbmFtZSBpbiB0aGUgbmFtZXNwYWNlICovCi0KLQlzdGF0dXMgPSBhY3BpX25zX2xvb2t1cChOVUxMLCBpbnRlcm5hbF9wYXRoLCBBQ1BJX1RZUEVfQU5ZLAotCQkJCUFDUElfSU1PREVfRVhFQ1VURSwgQUNQSV9OU19OT19VUFNFQVJDSCwgTlVMTCwKLQkJCQkmaW5mby0+bm9kZSk7Ci0KLQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAotCQkJCSAgIk9iamVjdCBhdCBbJXNdIHdhcyBub3QgZm91bmQsIHN0YXR1cz0lLjRYXG4iLAotCQkJCSAgcGF0aG5hbWUsIHN0YXR1cykpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgaGFuZGxlIHRvIHRoZSBvYmplY3QsIHdlIGNhbiBhdHRlbXB0IHRvIGV2YWx1YXRlIGl0LgotCSAqLwotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsICIlcyBbJXBdIFZhbHVlICVwXG4iLAotCQkJICBwYXRobmFtZSwgaW5mby0+bm9kZSwKLQkJCSAgYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KGluZm8tPm5vZGUpKSk7Ci0KLQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X2hhbmRsZShpbmZvKTsKLQotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCi0JCQkgICIqKiogQ29tcGxldGVkIGV2YWwgb2Ygb2JqZWN0ICVzICoqKlxuIiwgcGF0aG5hbWUpKTsKLQotICAgICAgY2xlYW51cDoKLQotCS8qIENsZWFudXAgKi8KLQotCWlmIChpbnRlcm5hbF9wYXRoKSB7Ci0JCUFDUElfTUVNX0ZSRUUoaW50ZXJuYWxfcGF0aCk7Ci0JfQotCi0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlCi0gKgotICogUEFSQU1FVEVSUzogIEluZm8gICAgICAgICAgICAtIE1ldGhvZCBpbmZvIGJsb2NrLCBjb250YWluczoKLSAqICAgICAgICAgICAgICAgICAgTm9kZSAgICAgICAgICAgIC0gTWV0aG9kL09iamVjdCBOb2RlIHRvIGV4ZWN1dGUKKyAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgLSBFdmFsdWF0aW9uIGluZm8gYmxvY2ssIGNvbnRhaW5zOgorICogICAgICAgICAgICAgICAgICBwcmVmaXhfbm9kZSAgICAgLSBQcmVmaXggb3IgTWV0aG9kL09iamVjdCBOb2RlIHRvIGV4ZWN1dGUKKyAqICAgICAgICAgICAgICAgICAgUGF0aG5hbWUgICAgICAgIC0gTmFtZSBvZiBtZXRob2QgdG8gZXhlY3V0ZSwgSWYgTlVMTCwgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgaXMgdGhlIG9iamVjdCB0byBleGVjdXRlCiAgKiAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnMgICAgICAtIExpc3Qgb2YgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBtZXRob2QsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgTlVMTC4gUGFyYW1zIGl0c2VsZiBtYXkgYmUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBpZiBubyBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQuCkBAIC0yNDgsMjkgKzY1LDIxIEBACiAgKiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlICAtIFR5cGUgb2YgUGFyYW1ldGVyIGxpc3QKICAqICAgICAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgIC0gV2hlcmUgdG8gcHV0IG1ldGhvZCdzIHJldHVybiB2YWx1ZSAoaWYKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55KS4gSWYgTlVMTCwgbm8gdmFsdWUgaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICAgICAgIEZsYWdzICAgICAgICAgICAtIEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRSB0byBkZWxldGUgcmV0dXJuCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBFdmFsdWF0ZSBvYmplY3Qgb3IgZXhlY3V0ZSB0aGUgcmVxdWVzdGVkIG1ldGhvZCBwYXNzaW5nIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIHBhcmFtZXRlcnMKKyAqIERFU0NSSVBUSU9OOiBFeGVjdXRlIGEgY29udHJvbCBtZXRob2Qgb3IgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFuCisgKiAgICAgICAgICAgICAgQUNQSSBuYW1lc3BhY2Ugb2JqZWN0LgogICoKLSAqIE1VVEVYOiAgICAgICBMb2NrcyBOYW1lc3BhY2UKKyAqIE1VVEVYOiAgICAgICBMb2NrcyBpbnRlcnByZXRlcgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzIGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQorYWNwaV9zdGF0dXMgYWNwaV9uc19ldmFsdWF0ZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2V2YWx1YXRlX2J5X2hhbmRsZSIpOwotCi0JLyogQ2hlY2sgaWYgbmFtZXNwYWNlIGhhcyBiZWVuIGluaXRpYWxpemVkICovCi0KLQlpZiAoIWFjcGlfZ2JsX3Jvb3Rfbm9kZSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTkFNRVNQQUNFKTsKLQl9Ci0KLQkvKiBQYXJhbWV0ZXIgVmFsaWRhdGlvbiAqLworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZXZhbHVhdGUpOwogCiAJaWYgKCFpbmZvKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTI4MCwyMDIgKzg5LDEyMCBAQAogCiAJaW5mby0+cmV0dXJuX29iamVjdCA9IE5VTEw7CiAKLQkvKiBHZXQgdGhlIHByZWZpeCBoYW5kbGUgYW5kIE5vZGUgKi8KLQotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCS8qCisJICogR2V0IHRoZSBhY3R1YWwgbmFtZXNwYWNlIG5vZGUgZm9yIHRoZSB0YXJnZXQgb2JqZWN0LiBIYW5kbGVzIHRoZXNlIGNhc2VzOgorCSAqCisJICogMSkgTnVsbCBub2RlLCBQYXRobmFtZSAoYWJzb2x1dGUgcGF0aCkKKwkgKiAyKSBOb2RlLCBQYXRobmFtZSAocGF0aCByZWxhdGl2ZSB0byBOb2RlKQorCSAqIDMpIE5vZGUsIE51bGwgUGF0aG5hbWUKKwkgKi8KKwlzdGF0dXMgPSBhY3BpX25zX2dldF9ub2RlKGluZm8tPnByZWZpeF9ub2RlLCBpbmZvLT5wYXRobmFtZSwKKwkJCQkgIEFDUElfTlNfTk9fVVBTRUFSQ0gsICZpbmZvLT5yZXNvbHZlZF9ub2RlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JaW5mby0+bm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGluZm8tPm5vZGUpOwotCWlmICghaW5mby0+bm9kZSkgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQogCS8qCiAJICogRm9yIGEgbWV0aG9kIGFsaWFzLCB3ZSBtdXN0IGdyYWIgdGhlIGFjdHVhbCBtZXRob2Qgbm9kZSBzbyB0aGF0IHByb3BlcgogCSAqIHNjb3BpbmcgY29udGV4dCB3aWxsIGJlIGVzdGFibGlzaGVkIGJlZm9yZSBleGVjdXRpb24uCiAJICovCi0JaWYgKGFjcGlfbnNfZ2V0X3R5cGUoaW5mby0+bm9kZSkgPT0gQUNQSV9UWVBFX0xPQ0FMX01FVEhPRF9BTElBUykgewotCQlpbmZvLT5ub2RlID0KKwlpZiAoYWNwaV9uc19nZXRfdHlwZShpbmZvLT5yZXNvbHZlZF9ub2RlKSA9PQorCSAgICBBQ1BJX1RZUEVfTE9DQUxfTUVUSE9EX0FMSUFTKSB7CisJCWluZm8tPnJlc29sdmVkX25vZGUgPQogCQkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwKLQkJCQkgIGluZm8tPm5vZGUtPm9iamVjdCk7CisJCQkJICBpbmZvLT5yZXNvbHZlZF9ub2RlLT5vYmplY3QpOwogCX0KIAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsICIlcyBbJXBdIFZhbHVlICVwXG4iLCBpbmZvLT5wYXRobmFtZSwKKwkJCSAgaW5mby0+cmVzb2x2ZWRfbm9kZSwKKwkJCSAgYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KGluZm8tPnJlc29sdmVkX25vZGUpKSk7CisKIAkvKgogCSAqIFR3byBtYWpvciBjYXNlcyBoZXJlOgotCSAqIDEpIFRoZSBvYmplY3QgaXMgYW4gYWN0dWFsIGNvbnRyb2wgbWV0aG9kIC0tIGV4ZWN1dGUgaXQuCi0JICogMikgVGhlIG9iamVjdCBpcyBub3QgYSBtZXRob2QgLS0ganVzdCByZXR1cm4gaXQncyBjdXJyZW50IHZhbHVlCiAJICoKLQkgKiBJbiBib3RoIGNhc2VzLCB0aGUgbmFtZXNwYWNlIGlzIHVubG9ja2VkIGJ5IHRoZSBhY3BpX25zKiBwcm9jZWR1cmUKKwkgKiAxKSBUaGUgb2JqZWN0IGlzIGEgY29udHJvbCBtZXRob2QgLS0gZXhlY3V0ZSBpdAorCSAqIDIpIFRoZSBvYmplY3QgaXMgbm90IGEgbWV0aG9kIC0tIGp1c3QgcmV0dXJuIGl0J3MgY3VycmVudCB2YWx1ZQogCSAqLwotCWlmIChhY3BpX25zX2dldF90eXBlKGluZm8tPm5vZGUpID09IEFDUElfVFlQRV9NRVRIT0QpIHsKKwlpZiAoYWNwaV9uc19nZXRfdHlwZShpbmZvLT5yZXNvbHZlZF9ub2RlKSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSB7CiAJCS8qCi0JCSAqIENhc2UgMSkgV2UgaGF2ZSBhbiBhY3R1YWwgY29udHJvbCBtZXRob2QgdG8gZXhlY3V0ZQorCQkgKiAxKSBPYmplY3QgaXMgYSBjb250cm9sIG1ldGhvZCAtIGV4ZWN1dGUgaXQKIAkJICovCi0JCXN0YXR1cyA9IGFjcGlfbnNfZXhlY3V0ZV9jb250cm9sX21ldGhvZChpbmZvKTsKKworCQkvKiBWZXJpZnkgdGhhdCB0aGVyZSBpcyBhIG1ldGhvZCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZSAqLworCisJCWluZm8tPm9ial9kZXNjID0KKwkJICAgIGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChpbmZvLT5yZXNvbHZlZF9ub2RlKTsKKwkJaWYgKCFpbmZvLT5vYmpfZGVzYykgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkgICAgIkNvbnRyb2wgbWV0aG9kIGhhcyBubyBhdHRhY2hlZCBzdWItb2JqZWN0IikpOworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05VTExfT0JKRUNUKTsKKwkJfQorCisJCUFDUElfRFVNUF9QQVRITkFNRShpbmZvLT5yZXNvbHZlZF9ub2RlLCAiRXhlY3V0ZSBNZXRob2Q6IiwKKwkJCQkgICBBQ1BJX0xWX0lORk8sIF9DT01QT05FTlQpOworCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKKwkJCQkgICJNZXRob2QgYXQgQU1MIGFkZHJlc3MgJXAgTGVuZ3RoICVYXG4iLAorCQkJCSAgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5hbWxfc3RhcnQgKyAxLAorCQkJCSAgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoIC0gMSkpOworCisJCS8qCisJCSAqIEFueSBuYW1lc3BhY2UgZGVsZXRpb24gbXVzdCBhY3F1aXJlIGJvdGggdGhlIG5hbWVzcGFjZSBhbmQKKwkJICogaW50ZXJwcmV0ZXIgbG9ja3MgdG8gZW5zdXJlIHRoYXQgbm8gdGhyZWFkIGlzIHVzaW5nIHRoZSBwb3J0aW9uIG9mCisJCSAqIHRoZSBuYW1lc3BhY2UgdGhhdCBpcyBiZWluZyBkZWxldGVkLgorCQkgKgorCQkgKiBFeGVjdXRlIHRoZSBtZXRob2QgdmlhIHRoZSBpbnRlcnByZXRlci4gVGhlIGludGVycHJldGVyIGlzIGxvY2tlZAorCQkgKiBoZXJlIGJlZm9yZSBjYWxsaW5nIGludG8gdGhlIEFNTCBwYXJzZXIKKwkJICovCisJCXN0YXR1cyA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJfQorCisJCXN0YXR1cyA9IGFjcGlfcHNfZXhlY3V0ZV9tZXRob2QoaW5mbyk7CisJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwogCX0gZWxzZSB7CiAJCS8qCi0JCSAqIENhc2UgMikgT2JqZWN0IGlzIE5PVCBhIG1ldGhvZCwganVzdCByZXR1cm4gaXRzIGN1cnJlbnQgdmFsdWUKKwkJICogMikgT2JqZWN0IGlzIG5vdCBhIG1ldGhvZCwgcmV0dXJuIGl0cyBjdXJyZW50IHZhbHVlCiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX25zX2dldF9vYmplY3RfdmFsdWUoaW5mbyk7Ci0JfQogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGVyZSBpcyBhIHJldHVybiB2YWx1ZSBvbiB0aGUgc3RhY2sgdGhhdCBtdXN0IGJlIGRlYWx0IHdpdGgKLQkgKi8KLQlpZiAoc3RhdHVzID09IEFFX0NUUkxfUkVUVVJOX1ZBTFVFKSB7Ci0JCS8qIE1hcCBBRV9DVFJMX1JFVFVSTl9WQUxVRSB0byBBRV9PSywgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLworCQkvKgorCQkgKiBPYmplY3RzIHJlcXVpcmUgYWRkaXRpb25hbCByZXNvbHV0aW9uIHN0ZXBzIChlLmcuLCB0aGUgTm9kZSBtYXkgYmUKKwkJICogYSBmaWVsZCB0aGF0IG11c3QgYmUgcmVhZCwgZXRjLikgLS0gd2UgY2FuJ3QganVzdCBncmFiIHRoZSBvYmplY3QKKwkJICogb3V0IG9mIHRoZSBub2RlLgorCQkgKgorCQkgKiBVc2UgcmVzb2x2ZV9ub2RlX3RvX3ZhbHVlKCkgdG8gZ2V0IHRoZSBhc3NvY2lhdGVkIHZhbHVlLgorCQkgKgorCQkgKiBOT1RFOiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBwYXNzaW5nIGluIE5VTEwgZm9yIGEgd2FsayBzdGF0ZSBiZWNhdXNlCisJCSAqIHJlc29sdmVkX25vZGUgaXMgZ3VhcmFudGVlZCB0byBub3QgYmUgYSByZWZlcmVuY2UgdG8gZWl0aGVyIGEgbWV0aG9kCisJCSAqIGxvY2FsIG9yIGEgbWV0aG9kIGFyZ3VtZW50IChiZWNhdXNlIHRoaXMgaW50ZXJmYWNlIGlzIG5ldmVyIGNhbGxlZAorCQkgKiBmcm9tIGEgcnVubmluZyBtZXRob2QuKQorCQkgKgorCQkgKiBFdmVuIHRob3VnaCB3ZSBkbyBub3QgZGlyZWN0bHkgaW52b2tlIHRoZSBpbnRlcnByZXRlciBmb3Igb2JqZWN0CisJCSAqIHJlc29sdXRpb24sIHdlIG11c3QgbG9jayBpdCBiZWNhdXNlIHdlIGNvdWxkIGFjY2VzcyBhbiBvcHJlZ2lvbi4KKwkJICogVGhlIG9wcmVnaW9uIGFjY2VzcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgbG9ja2VkLgorCQkgKi8KKwkJc3RhdHVzID0gYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQl9CiAKLQkJc3RhdHVzID0gQUVfT0s7Ci0JfQorCQkvKiBGdW5jdGlvbiBoYXMgYSBzdHJhbmdlIGludGVyZmFjZSAqLwogCi0JLyoKLQkgKiBOYW1lc3BhY2Ugd2FzIHVubG9ja2VkIGJ5IHRoZSBoYW5kbGluZyBhY3BpX25zKiBmdW5jdGlvbiwgc28gd2UKLQkgKiBqdXN0IHJldHVybgotCSAqLwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQorCQlzdGF0dXMgPQorCQkgICAgYWNwaV9leF9yZXNvbHZlX25vZGVfdG9fdmFsdWUoJmluZm8tPnJlc29sdmVkX25vZGUsIE5VTEwpOworCQlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19leGVjdXRlX2NvbnRyb2xfbWV0aG9kCi0gKgotICogUEFSQU1FVEVSUzogIEluZm8gICAgICAgICAgICAtIE1ldGhvZCBpbmZvIGJsb2NrLCBjb250YWluczoKLSAqICAgICAgICAgICAgICAgICAgTm9kZSAgICAgICAgICAgIC0gTWV0aG9kIE5vZGUgdG8gZXhlY3V0ZQotICogICAgICAgICAgICAgICAgICBvYmpfZGVzYyAgICAgICAgLSBNZXRob2Qgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnMgICAgICAtIExpc3Qgb2YgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBtZXRob2QsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgTlVMTC4gUGFyYW1zIGl0c2VsZiBtYXkgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBpZiBubyBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQuCi0gKiAgICAgICAgICAgICAgICAgIHJldHVybl9vYmplY3QgICAtIFdoZXJlIHRvIHB1dCBtZXRob2QncyByZXR1cm4gdmFsdWUgKGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSkuIElmIE5VTEwsIG5vIHZhbHVlIGlzIHJldHVybmVkLgotICogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSAgLSBUeXBlIG9mIFBhcmFtZXRlciBsaXN0Ci0gKiAgICAgICAgICAgICAgICAgIHJldHVybl9vYmplY3QgICAtIFdoZXJlIHRvIHB1dCBtZXRob2QncyByZXR1cm4gdmFsdWUgKGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSkuIElmIE5VTEwsIG5vIHZhbHVlIGlzIHJldHVybmVkLgotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogRXhlY3V0ZSB0aGUgcmVxdWVzdGVkIG1ldGhvZCBwYXNzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCi0gKgotICogTVVURVg6ICAgICAgIEFzc3VtZXMgbmFtZXNwYWNlIGlzIGxvY2tlZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19leGVjdXRlX2NvbnRyb2xfbWV0aG9kKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2V4ZWN1dGVfY29udHJvbF9tZXRob2QiKTsKLQotCS8qIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCAqLwotCi0JaW5mby0+b2JqX2Rlc2MgPSBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3QoaW5mby0+bm9kZSk7Ci0JaWYgKCFpbmZvLT5vYmpfZGVzYykgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTm8gYXR0YWNoZWQgbWV0aG9kIG9iamVjdCIpKTsKLQotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05VTExfT0JKRUNUKTsKLQl9Ci0KLQlBQ1BJX0RVTVBfUEFUSE5BTUUoaW5mby0+bm9kZSwgIkV4ZWN1dGUgTWV0aG9kOiIsCi0JCQkgICBBQ1BJX0xWX0lORk8sIF9DT01QT05FTlQpOwotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiTWV0aG9kIGF0IEFNTCBhZGRyZXNzICVwIExlbmd0aCAlWFxuIiwKLQkJCSAgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5hbWxfc3RhcnQgKyAxLAotCQkJICBpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmFtbF9sZW5ndGggLSAxKSk7Ci0KLQkvKgotCSAqIFVubG9jayB0aGUgbmFtZXNwYWNlIGJlZm9yZSBleGVjdXRpb24uICBUaGlzIGFsbG93cyBuYW1lc3BhY2UgYWNjZXNzCi0JICogdmlhIHRoZSBleHRlcm5hbCBBY3BpKiBpbnRlcmZhY2VzIHdoaWxlIGEgbWV0aG9kIGlzIGJlaW5nIGV4ZWN1dGVkLgotCSAqIEhvd2V2ZXIsIGFueSBuYW1lc3BhY2UgZGVsZXRpb24gbXVzdCBhY3F1aXJlIGJvdGggdGhlIG5hbWVzcGFjZSBhbmQKLQkgKiBpbnRlcnByZXRlciBsb2NrcyB0byBlbnN1cmUgdGhhdCBubyB0aHJlYWQgaXMgdXNpbmcgdGhlIHBvcnRpb24gb2YgdGhlCi0JICogbmFtZXNwYWNlIHRoYXQgaXMgYmVpbmcgZGVsZXRlZC4KLQkgKi8KLQlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyoKLQkgKiBFeGVjdXRlIHRoZSBtZXRob2QgdmlhIHRoZSBpbnRlcnByZXRlci4gIFRoZSBpbnRlcnByZXRlciBpcyBsb2NrZWQKLQkgKiBoZXJlIGJlZm9yZSBjYWxsaW5nIGludG8gdGhlIEFNTCBwYXJzZXIKLQkgKi8KLQlzdGF0dXMgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCXN0YXR1cyA9IGFjcGlfcHNfZXhlY3V0ZV9tZXRob2QoaW5mbyk7Ci0JYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7Ci0KLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19nZXRfb2JqZWN0X3ZhbHVlCi0gKgotICogUEFSQU1FVEVSUzogIEluZm8gICAgICAgICAgICAtIE1ldGhvZCBpbmZvIGJsb2NrLCBjb250YWluczoKLSAqICAgICAgICAgICAgICAgICAgTm9kZSAgICAgICAgICAgIC0gT2JqZWN0J3MgTlMgbm9kZQotICogICAgICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBXaGVyZSB0byBwdXQgb2JqZWN0IHZhbHVlIChpZgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkpLiBJZiBOVUxMLCBubyB2YWx1ZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgb2JqZWN0Ci0gKgotICogTVVURVg6ICAgICAgIEFzc3VtZXMgbmFtZXNwYWNlIGlzIGxvY2tlZCwgbGVhdmVzIG5hbWVzcGFjZSB1bmxvY2tlZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX25zX2dldF9vYmplY3RfdmFsdWUoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnJlc29sdmVkX25vZGUgPSBpbmZvLT5ub2RlOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZ2V0X29iamVjdF92YWx1ZSIpOwotCi0JLyoKLQkgKiBPYmplY3RzIHJlcXVpcmUgYWRkaXRpb25hbCByZXNvbHV0aW9uIHN0ZXBzIChlLmcuLCB0aGUgTm9kZSBtYXkgYmUgYQotCSAqIGZpZWxkIHRoYXQgbXVzdCBiZSByZWFkLCBldGMuKSAtLSB3ZSBjYW4ndCBqdXN0IGdyYWIgdGhlIG9iamVjdCBvdXQgb2YKLQkgKiB0aGUgbm9kZS4KLQkgKi8KLQotCS8qCi0JICogVXNlIHJlc29sdmVfbm9kZV90b192YWx1ZSgpIHRvIGdldCB0aGUgYXNzb2NpYXRlZCB2YWx1ZS4gVGhpcyBjYWxsIGFsd2F5cwotCSAqIGRlbGV0ZXMgb2JqX2Rlc2MgKGFsbG9jYXRlZCBhYm92ZSkuCi0JICoKLQkgKiBOT1RFOiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBwYXNzaW5nIGluIE5VTEwgZm9yIGEgd2FsayBzdGF0ZSBiZWNhdXNlCi0JICogb2JqX2Rlc2MgaXMgZ3VhcmFudGVlZCB0byBub3QgYmUgYSByZWZlcmVuY2UgdG8gZWl0aGVyIGEgbWV0aG9kIGxvY2FsIG9yCi0JICogYSBtZXRob2QgYXJndW1lbnQgKGJlY2F1c2UgdGhpcyBpbnRlcmZhY2UgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlCi0JICogYWNwaV9ldmFsdWF0ZSBleHRlcm5hbCBpbnRlcmZhY2UsIG5ldmVyIGNhbGxlZCBmcm9tIGEgcnVubmluZyBtZXRob2QuKQotCSAqCi0JICogRXZlbiB0aG91Z2ggd2UgZG8gbm90IGRpcmVjdGx5IGludm9rZSB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoaXMsIHdlIG11c3QKLQkgKiBlbnRlciBpdCBiZWNhdXNlIHdlIGNvdWxkIGFjY2VzcyBhbiBvcHJlZ2lvbi4gVGhlIG9wcmVnaW9uIGFjY2VzcyBjb2RlCi0JICogYXNzdW1lcyB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyBsb2NrZWQuCi0JICoKLQkgKiBXZSBtdXN0IHJlbGVhc2UgdGhlIG5hbWVzcGFjZSBsb2NrIGJlZm9yZSBlbnRlcmluZyB0aGUgaW50ZXByZXRlci4KLQkgKi8KLQlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlzdGF0dXMgPSBhY3BpX2V4X3Jlc29sdmVfbm9kZV90b192YWx1ZSgmcmVzb2x2ZWRfbm9kZSwgTlVMTCk7CiAJCS8qCiAJCSAqIElmIGFjcGlfZXhfcmVzb2x2ZV9ub2RlX3RvX3ZhbHVlKCkgc3VjY2VlZGVkLCB0aGUgcmV0dXJuIHZhbHVlIHdhcyBwbGFjZWQKIAkJICogaW4gcmVzb2x2ZWRfbm9kZS4KIAkJICovCi0JCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwotCiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQkJc3RhdHVzID0gQUVfQ1RSTF9SRVRVUk5fVkFMVUU7Ci0JCQlpbmZvLT5yZXR1cm5fb2JqZWN0ID0gQUNQSV9DQVNUX1BUUgotCQkJICAgICh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0LCByZXNvbHZlZF9ub2RlKTsKKwkJCWluZm8tPnJldHVybl9vYmplY3QgPQorCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCwKKwkJCQkJICBpbmZvLT5yZXNvbHZlZF9ub2RlKTsKKwogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKIAkJCQkJICAiUmV0dXJuaW5nIG9iamVjdCAlcCBbJXNdXG4iLAogCQkJCQkgIGluZm8tPnJldHVybl9vYmplY3QsCkBAIC00ODQsNyArMjExLDMwIEBACiAJCX0KIAl9CiAKLQkvKiBOYW1lc3BhY2UgaXMgdW5sb2NrZWQgKi8KKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgbXVzdCBiZSBkZWFsdCB3aXRoCisJICovCisJaWYgKHN0YXR1cyA9PSBBRV9DVFJMX1JFVFVSTl9WQUxVRSkgewogCisJCS8qIElmIGNhbGxlciBkb2VzIG5vdCB3YW50IHRoZSByZXR1cm4gdmFsdWUsIGRlbGV0ZSBpdCAqLworCisJCWlmIChpbmZvLT5mbGFncyAmIEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRSkgeworCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8tPnJldHVybl9vYmplY3QpOworCQkJaW5mby0+cmV0dXJuX29iamVjdCA9IE5VTEw7CisJCX0KKworCQkvKiBNYXAgQUVfQ1RSTF9SRVRVUk5fVkFMVUUgdG8gQUVfT0ssIHdlIGFyZSBkb25lIHdpdGggaXQgKi8KKworCQlzdGF0dXMgPSBBRV9PSzsKKwl9CisKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAorCQkJICAiKioqIENvbXBsZXRlZCBldmFsdWF0aW9uIG9mIG9iamVjdCAlcyAqKipcbiIsCisJCQkgIGluZm8tPnBhdGhuYW1lKSk7CisKKwkvKgorCSAqIE5hbWVzcGFjZSB3YXMgdW5sb2NrZWQgYnkgdGhlIGhhbmRsaW5nIGFjcGlfbnMqIGZ1bmN0aW9uLCBzbyB3ZQorCSAqIGp1c3QgcmV0dXJuCisJICovCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2luaXQuYwppbmRleCA5ZjkyOWU0Li5hZWM4NDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNpbml0LmMKQEAgLTU4LDYgKzU4LDEwIEBACiBhY3BpX25zX2luaXRfb25lX2RldmljZShhY3BpX2hhbmRsZSBvYmpfaGFuZGxlLAogCQkJdTMyIG5lc3RpbmdfbGV2ZWwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpOwogCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfZmluZF9pbmlfbWV0aG9kcyhhY3BpX2hhbmRsZSBvYmpfaGFuZGxlLAorCQkJIHUzMiBuZXN0aW5nX2xldmVsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19pbml0aWFsaXplX29iamVjdHMKQEAgLTc2LDcgKzgwLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfaW5pdF93YWxrX2luZm8gaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2luaXRpYWxpemVfb2JqZWN0cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfaW5pdGlhbGl6ZV9vYmplY3RzKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCiAJCQkgICIqKioqIFN0YXJ0aW5nIGluaXRpYWxpemF0aW9uIG9mIG5hbWVzcGFjZSBvYmplY3RzICoqKipcbiIpKTsKQEAgLTkzLDcgKzk3LDcgQEAKIAkJCQkgICAgIEFDUElfVUlOVDMyX01BWCwgYWNwaV9uc19pbml0X29uZV9vYmplY3QsCiAJCQkJICAgICAmaW5mbywgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJEdXJpbmcgd2Fsa19uYW1lc3BhY2UiKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJEdXJpbmcgV2Fsa05hbWVzcGFjZSIpKTsKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULApAQCAtMTMzLDcgKzEzNyw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8gaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2luaXRpYWxpemVfZGV2aWNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfaW5pdGlhbGl6ZV9kZXZpY2VzKTsKIAogCS8qIEluaXQgY291bnRlcnMgKi8KIApAQCAtMTQyLDMwICsxNDYsNDYgQEAKIAlpbmZvLm51bV9JTkkgPSAwOwogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwKLQkJCSAgICAgICJFeGVjdXRpbmcgYWxsIERldmljZSBfU1RBIGFuZF9JTkkgbWV0aG9kczoiKSk7CisJCQkgICAgICAiSW5pdGlhbGl6aW5nIERldmljZS9Qcm9jZXNzb3IvVGhlcm1hbCBvYmplY3RzIGJ5IGV4ZWN1dGluZyBfSU5JIG1ldGhvZHM6IikpOwogCi0Jc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCS8qIFdhbGsgbmFtZXNwYWNlIGZvciBhbGwgb2JqZWN0cyAqLworCS8qIFRyZWUgYW5hbHlzaXM6IGZpbmQgYWxsIHN1YnRyZWVzIHRoYXQgY29udGFpbiBfSU5JIG1ldGhvZHMgKi8KIAogCXN0YXR1cyA9IGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0FOWSwgQUNQSV9ST09UX09CSkVDVCwKLQkJCQkJQUNQSV9VSU5UMzJfTUFYLCBUUlVFLAorCQkJCQlBQ1BJX1VJTlQzMl9NQVgsIEZBTFNFLAorCQkJCQlhY3BpX25zX2ZpbmRfaW5pX21ldGhvZHMsICZpbmZvLCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZ290byBlcnJvcl9leGl0OworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwlpbmZvLmV2YWx1YXRlX2luZm8gPQorCSAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbykpOworCWlmICghaW5mby5ldmFsdWF0ZV9pbmZvKSB7CisJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJZ290byBlcnJvcl9leGl0OworCX0KKworCS8qIFdhbGsgbmFtZXNwYWNlIHRvIGV4ZWN1dGUgYWxsIF9JTklzIG9uIHByZXNlbnQgZGV2aWNlcyAqLworCisJc3RhdHVzID0gYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJCQlBQ1BJX1VJTlQzMl9NQVgsIEZBTFNFLAogCQkJCQlhY3BpX25zX2luaXRfb25lX2RldmljZSwgJmluZm8sIE5VTEwpOwogCi0JKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0KKwlBQ1BJX0ZSRUUoaW5mby5ldmFsdWF0ZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkR1cmluZyB3YWxrX25hbWVzcGFjZSIpKTsKKwkJZ290byBlcnJvcl9leGl0OwogCX0KIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCi0JCQkgICAgICAiXG4laGQgRGV2aWNlcyBmb3VuZCAtIGV4ZWN1dGVkICVoZCBfU1RBLCAlaGQgX0lOSSBtZXRob2RzXG4iLAotCQkJICAgICAgaW5mby5kZXZpY2VfY291bnQsIGluZm8ubnVtX1NUQSwgaW5mby5udW1fSU5JKSk7CisJCQkgICAgICAiXG5FeGVjdXRlZCAlaGQgX0lOSSBtZXRob2RzIHJlcXVpcmluZyAlaGQgX1NUQSBleGVjdXRpb25zIChleGFtaW5lZCAlaGQgb2JqZWN0cylcbiIsCisJCQkgICAgICBpbmZvLm51bV9JTkksIGluZm8ubnVtX1NUQSwgaW5mby5kZXZpY2VfY291bnQpKTsKIAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCisgICAgICBlcnJvcl9leGl0OgorCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJEdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIikpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjAwLDcgKzIyMCw3IEBACiAJICAgIChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKW9ial9oYW5kbGU7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoIm5zX2luaXRfb25lX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShuc19pbml0X29uZV9vYmplY3QpOwogCiAJaW5mby0+b2JqZWN0X2NvdW50Kys7CiAKQEAgLTMxMSw2ICszMzEsNzIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19maW5kX2luaV9tZXRob2RzCisgKgorICogUEFSQU1FVEVSUzogIGFjcGlfd2Fsa19jYWxsYmFjaworICoKKyAqIFJFVFVSTjogICAgICBhY3BpX3N0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDYWxsZWQgZHVyaW5nIG5hbWVzcGFjZSB3YWxrLiBGaW5kcyBvYmplY3RzIG5hbWVkIF9JTkkgdW5kZXIKKyAqICAgICAgICAgICAgICBkZXZpY2UvcHJvY2Vzc29yL3RoZXJtYWwgb2JqZWN0cywgYW5kIG1hcmtzIHRoZSBlbnRpcmUgc3VidHJlZQorICogICAgICAgICAgICAgIHdpdGggYSBTVUJUUkVFX0hBU19JTkkgZmxhZy4gVGhpcyBmbGFnIGlzIHVzZWQgZHVyaW5nIHRoZQorICogICAgICAgICAgICAgIHN1YnNlcXVlbnQgZGV2aWNlIGluaXRpYWxpemF0aW9uIHdhbGsgdG8gYXZvaWQgZW50aXJlIHN1YnRyZWVzCisgKiAgICAgICAgICAgICAgdGhhdCBkbyBub3QgY29udGFpbiBhbiBfSU5JLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9uc19maW5kX2luaV9tZXRob2RzKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsCisJCQkgdTMyIG5lc3RpbmdfbGV2ZWwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbyAqaW5mbyA9CisJICAgIEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbywgY29udGV4dCk7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnBhcmVudF9ub2RlOworCisJLyogS2VlcCBjb3VudCBvZiBkZXZpY2UvcHJvY2Vzc29yL3RoZXJtYWwgb2JqZWN0cyAqLworCisJbm9kZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsIG9ial9oYW5kbGUpOworCWlmICgobm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB8fAorCSAgICAobm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfUFJPQ0VTU09SKSB8fAorCSAgICAobm9kZS0+dHlwZSA9PSBBQ1BJX1RZUEVfVEhFUk1BTCkpIHsKKwkJaW5mby0+ZGV2aWNlX2NvdW50Kys7CisJCXJldHVybiAoQUVfT0spOworCX0KKworCS8qIFdlIGFyZSBvbmx5IGxvb2tpbmcgZm9yIG1ldGhvZHMgbmFtZWQgX0lOSSAqLworCisJaWYgKCFBQ1BJX0NPTVBBUkVfTkFNRShub2RlLT5uYW1lLmFzY2lpLCBNRVRIT0RfTkFNRV9fSU5JKSkgeworCQlyZXR1cm4gKEFFX09LKTsKKwl9CisKKwkvKgorCSAqIFRoZSBvbmx5IF9JTkkgbWV0aG9kcyB0aGF0IHdlIGNhcmUgYWJvdXQgYXJlIHRob3NlIHRoYXQgYXJlCisJICogcHJlc2VudCB1bmRlciBEZXZpY2UsIFByb2Nlc3NvciwgYW5kIFRoZXJtYWwgb2JqZWN0cy4KKwkgKi8KKwlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpOworCXN3aXRjaCAocGFyZW50X25vZGUtPnR5cGUpIHsKKwljYXNlIEFDUElfVFlQRV9ERVZJQ0U6CisJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgorCWNhc2UgQUNQSV9UWVBFX1RIRVJNQUw6CisKKwkJLyogTWFyayBwYXJlbnQgYW5kIGJ1YmJsZSB1cCB0aGUgSU5JIHByZXNlbnQgZmxhZyB0byB0aGUgcm9vdCAqLworCisJCXdoaWxlIChwYXJlbnRfbm9kZSkgeworCQkJcGFyZW50X25vZGUtPmZsYWdzIHw9IEFOT0JKX1NVQlRSRUVfSEFTX0lOSTsKKwkJCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUocGFyZW50X25vZGUpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIChBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfaW5pdF9vbmVfZGV2aWNlCiAgKgogICogUEFSQU1FVEVSUzogIGFjcGlfd2Fsa19jYWxsYmFjawpAQCAtMzI3LDExOSArNDEzLDE2NSBAQAogYWNwaV9uc19pbml0X29uZV9kZXZpY2UoYWNwaV9oYW5kbGUgb2JqX2hhbmRsZSwKIAkJCXUzMiBuZXN0aW5nX2xldmVsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQogewotCXN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8gKmluZm8gPQotCSAgICAoc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbyAqKWNvbnRleHQ7Ci0Jc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gcGluZm87CisJc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbyAqd2Fsa19pbmZvID0KKwkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2Fsa19pbmZvLCBjb250ZXh0KTsKKwlzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvID0gd2Fsa19pbmZvLT5ldmFsdWF0ZV9pbmZvOwogCXUzMiBmbGFnczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmluaV9ub2RlOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2luaXRfb25lX2RldmljZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfaW5pdF9vbmVfZGV2aWNlKTsKIAotCWRldmljZV9ub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUob2JqX2hhbmRsZSk7Ci0JaWYgKCFkZXZpY2Vfbm9kZSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQorCS8qIFdlIGFyZSBpbnRlcmVzdGVkIGluIERldmljZXMsIFByb2Nlc3NvcnMgYW5kIHRoZXJtYWxfem9uZXMgb25seSAqLwogCi0JLyoKLQkgKiBXZSB3aWxsIHJ1biBfU1RBL19JTkkgb24gRGV2aWNlcywgUHJvY2Vzc29ycyBhbmQgdGhlcm1hbF96b25lcyBvbmx5Ci0JICovCisJZGV2aWNlX25vZGUgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlLCBvYmpfaGFuZGxlKTsKIAlpZiAoKGRldmljZV9ub2RlLT50eXBlICE9IEFDUElfVFlQRV9ERVZJQ0UpICYmCiAJICAgIChkZXZpY2Vfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfUFJPQ0VTU09SKSAmJgogCSAgICAoZGV2aWNlX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX1RIRVJNQUwpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJfQogCi0JaWYgKChhY3BpX2RiZ19sZXZlbCA8PSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TKSAmJgotCSAgICAoIShhY3BpX2RiZ19sZXZlbCAmIEFDUElfTFZfSU5GTykpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsICIuIikpOwotCX0KLQotCWluZm8tPmRldmljZV9jb3VudCsrOwotCiAJLyoKLQkgKiBDaGVjayBpZiB0aGUgX0lOSSBtZXRob2QgZXhpc3RzIGZvciB0aGlzIGRldmljZSAtCi0JICogaWYgX0lOSSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgaXMgbm8gbmVlZCB0byBydW4gX1NUQQotCSAqIE5vIF9JTkkgbWVhbnMgZGV2aWNlIHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uCisJICogQmVjYXVzZSBvZiBhbiBlYXJsaWVyIG5hbWVzcGFjZSBhbmFseXNpcywgYWxsIHN1YnRyZWVzIHRoYXQgY29udGFpbiBhbgorCSAqIF9JTkkgbWV0aG9kIGFyZSB0YWdnZWQuCisJICoKKwkgKiBJZiB0aGlzIGRldmljZSBzdWJ0cmVlIGRvZXMgbm90IGNvbnRhaW4gYW55IF9JTkkgbWV0aG9kcywgd2UKKwkgKiBjYW4gZXhpdCBub3cgYW5kIHN0b3AgdHJhdmVyc2luZyB0aGlzIGVudGlyZSBzdWJ0cmVlLgogCSAqLwotCXN0YXR1cyA9IGFjcGlfbnNfc2VhcmNoX25vZGUoKkFDUElfQ0FTVF9QVFIodTMyLCBNRVRIT0RfTkFNRV9fSU5JKSwKLQkJCQkgICAgIGRldmljZV9ub2RlLCBBQ1BJX1RZUEVfTUVUSE9ELCAmaW5pX25vZGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkvKiBObyBfSU5JIG1ldGhvZCBmb3VuZCAtIG1vdmUgb24gdG8gbmV4dCBkZXZpY2UgKi8KLQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCS8qCi0JICogUnVuIF9TVEEgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBydW4gX0lOSSBvbiB0aGUgZGV2aWNlIC0KLQkgKiB0aGUgZGV2aWNlIG11c3QgYmUgcHJlc2VudCBiZWZvcmUgX0lOSSBjYW4gYmUgcnVuLgotCSAqIEhvd2V2ZXIsIF9TVEEgaXMgbm90IHJlcXVpcmVkIC0gYXNzdW1lIGRldmljZSBwcmVzZW50IGlmIG5vIF9TVEEKLQkgKi8KLQlBQ1BJX0RFQlVHX0VYRUMoYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUoQUNQSV9UWVBFX01FVEhPRCwKLQkJCQkJCSAgICAgIGRldmljZV9ub2RlLAotCQkJCQkJICAgICAgTUVUSE9EX05BTUVfX1NUQSkpOwotCi0JcGluZm8ubm9kZSA9IGRldmljZV9ub2RlOwotCXBpbmZvLnBhcmFtZXRlcnMgPSBOVUxMOwotCXBpbmZvLnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOwotCi0Jc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX1NUQShwaW5mby5ub2RlLCAmZmxhZ3MpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkvKiBJZ25vcmUgZXJyb3IgYW5kIG1vdmUgb24gdG8gbmV4dCBkZXZpY2UgKi8KLQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCWlmIChmbGFncyAhPSBBQ1BJX1VJTlQzMl9NQVgpIHsKLQkJaW5mby0+bnVtX1NUQSsrOwotCX0KLQotCWlmICghKGZsYWdzICYgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQpKSB7Ci0JCS8qIERvbid0IGxvb2sgYXQgY2hpbGRyZW4gb2YgYSBub3QgcHJlc2VudCBkZXZpY2UgKi8KLQorCWlmICghKGRldmljZV9ub2RlLT5mbGFncyAmIEFOT0JKX1NVQlRSRUVfSEFTX0lOSSkpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0NUUkxfREVQVEgpOwogCX0KIAogCS8qCi0JICogVGhlIGRldmljZSBpcyBwcmVzZW50IGFuZCBfSU5JIGV4aXN0cy4gUnVuIHRoZSBfSU5JIG1ldGhvZC4KLQkgKiAoV2UgYWxyZWFkeSBoYXZlIHRoZSBfSU5JIG5vZGUgZnJvbSBhYm92ZSkKKwkgKiBSdW4gX1NUQSB0byBkZXRlcm1pbmUgaWYgdGhpcyBkZXZpY2UgaXMgcHJlc2VudCBhbmQgZnVuY3Rpb25pbmcuIFdlCisJICogbXVzdCBrbm93IHRoaXMgaW5mb3JtYXRpb24gZm9yIHR3byBpbXBvcnRhbnQgcmVhc29ucyAoZnJvbSBBQ1BJIHNwZWMpOgorCSAqCisJICogMSkgV2UgY2FuIG9ubHkgcnVuIF9JTkkgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LgorCSAqIDIpIFdlIG11c3QgYWJvcnQgdGhlIGRldmljZSB0cmVlIHdhbGsgb24gdGhpcyBzdWJ0cmVlIGlmIHRoZSBkZXZpY2UgaXMKKwkgKiAgICBub3QgcHJlc2VudCBhbmQgaXMgbm90IGZ1bmN0aW9uYWwgKHdlIHdpbGwgbm90IGV4YW1pbmUgdGhlIGNoaWxkcmVuKQorCSAqCisJICogVGhlIF9TVEEgbWV0aG9kIGlzIG5vdCByZXF1aXJlZCB0byBiZSBwcmVzZW50IHVuZGVyIHRoZSBkZXZpY2UsIHdlCisJICogYXNzdW1lIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBpZiBfU1RBIGRvZXMgbm90IGV4aXN0LgogCSAqLwotCUFDUElfREVCVUdfRVhFQyhhY3BpX3V0X2Rpc3BsYXlfaW5pdF9wYXRobmFtZShBQ1BJX1RZUEVfTUVUSE9ELAotCQkJCQkJICAgICAgcGluZm8ubm9kZSwKLQkJCQkJCSAgICAgIE1FVEhPRF9OQU1FX19JTkkpKTsKKwlBQ1BJX0RFQlVHX0VYRUMoYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUKKwkJCShBQ1BJX1RZUEVfTUVUSE9ELCBkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX1NUQSkpOwogCi0JcGluZm8ubm9kZSA9IGluaV9ub2RlOwotCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKCZwaW5mbyk7CisJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX1NUQShkZXZpY2Vfbm9kZSwgJmZsYWdzKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBJZ25vcmUgZXJyb3IgYW5kIG1vdmUgb24gdG8gbmV4dCBkZXZpY2UgKi8KIAotI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCi0JCWNoYXIgKnNjb3BlX25hbWUgPSBhY3BpX25zX2dldF9leHRlcm5hbF9wYXRobmFtZShpbmlfbm9kZSk7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJfQogCi0JCUFDUElfV0FSTklORygoQUVfSU5GTywgIiVzLl9JTkkgZmFpbGVkOiAlcyIsCi0JCQkgICAgICBzY29wZV9uYW1lLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOworCS8qCisJICogRmxhZ3MgPT0gLTEgbWVhbnMgdGhhdCBfU1RBIHdhcyBub3QgZm91bmQuIEluIHRoaXMgY2FzZSwgd2UgYXNzdW1lIHRoYXQKKwkgKiB0aGUgZGV2aWNlIGlzIGJvdGggcHJlc2VudCBhbmQgZnVuY3Rpb25hbC4KKwkgKgorCSAqIEZyb20gdGhlIEFDUEkgc3BlYywgZGVzY3JpcHRpb24gb2YgX1NUQToKKwkgKgorCSAqICJJZiBhIGRldmljZSBvYmplY3QgKGluY2x1ZGluZyB0aGUgcHJvY2Vzc29yIG9iamVjdCkgZG9lcyBub3QgaGF2ZSBhbgorCSAqIF9TVEEgb2JqZWN0LCB0aGVuIE9TUE0gYXNzdW1lcyB0aGF0IGFsbCBvZiB0aGUgYWJvdmUgYml0cyBhcmUgc2V0IChpbgorCSAqIG90aGVyIHdvcmRzLCB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIC4uLiwgYW5kIGZ1bmN0aW9uaW5nKSIKKwkgKi8KKwlpZiAoZmxhZ3MgIT0gQUNQSV9VSU5UMzJfTUFYKSB7CisJCXdhbGtfaW5mby0+bnVtX1NUQSsrOworCX0KIAotCQlBQ1BJX01FTV9GUkVFKHNjb3BlX25hbWUpOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJLyogRGVsZXRlIGFueSByZXR1cm4gb2JqZWN0IChlc3BlY2lhbGx5IGlmIGltcGxpY2l0X3JldHVybiBpcyBlbmFibGVkKSAqLworCS8qCisJICogRXhhbWluZSB0aGUgUFJFU0VOVCBhbmQgRlVOQ1RJT05JTkcgc3RhdHVzIGJpdHMKKwkgKgorCSAqIE5vdGU6IEFDUEkgc3BlYyBkb2VzIG5vdCBzZWVtIHRvIHNwZWNpZnkgYmVoYXZpb3IgZm9yIHRoZSBwcmVzZW50IGJ1dAorCSAqIG5vdCBmdW5jdGlvbmluZyBjYXNlLCBzbyB3ZSBhc3N1bWUgZnVuY3Rpb25pbmcgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoIShmbGFncyAmIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UKSkgewogCi0JCWlmIChwaW5mby5yZXR1cm5fb2JqZWN0KSB7Ci0JCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocGluZm8ucmV0dXJuX29iamVjdCk7CisJCS8qIERldmljZSBpcyBub3QgcHJlc2VudCwgd2UgbXVzdCBleGFtaW5lIHRoZSBGdW5jdGlvbmluZyBiaXQgKi8KKworCQlpZiAoZmxhZ3MgJiBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcpIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UgaXMgbm90IHByZXNlbnQgYnV0IGlzICJmdW5jdGlvbmluZyIuIEluIHRoaXMgY2FzZSwKKwkJCSAqIHdlIHdpbGwgbm90IHJ1biBfSU5JLCBidXQgd2UgY29udGludWUgdG8gZXhhbWluZSB0aGUgY2hpbGRyZW4KKwkJCSAqIG9mIHRoaXMgZGV2aWNlLgorCQkJICoKKwkJCSAqIEZyb20gdGhlIEFDUEkgc3BlYywgZGVzY3JpcHRpb24gb2YgX1NUQTogKE5vdGUgLSBubyBtZW50aW9uCisJCQkgKiBvZiB3aGV0aGVyIHRvIHJ1biBfSU5JIG9yIG5vdCBvbiB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uKQorCQkJICoKKwkJCSAqICJfU1RBIG1heSByZXR1cm4gYml0IDAgY2xlYXIgKG5vdCBwcmVzZW50KSB3aXRoIGJpdCAzIHNldAorCQkJICogKGRldmljZSBpcyBmdW5jdGlvbmFsKS4gVGhpcyBjYXNlIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSB2YWxpZAorCQkJICogZGV2aWNlIGZvciB3aGljaCBubyBkZXZpY2UgZHJpdmVyIHNob3VsZCBiZSBsb2FkZWQgKGZvciBleGFtcGxlLAorCQkJICogYSBicmlkZ2UgZGV2aWNlLikgQ2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UgbWF5IGJlIHByZXNlbnQgYW5kCisJCQkgKiB2YWxpZC4gT1NQTSBzaG91bGQgY29udGludWUgZW51bWVyYXRpb24gYmVsb3cgYSBkZXZpY2Ugd2hvc2UKKwkJCSAqIF9TVEEgcmV0dXJucyB0aGlzIGJpdCBjb21iaW5hdGlvbiIKKwkJCSAqLworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UgaXMgbm90IHByZXNlbnQgYW5kIGlzIG5vdCBmdW5jdGlvbmluZy4gV2UgbXVzdCBhYm9ydCB0aGUKKwkJCSAqIHdhbGsgb2YgdGhpcyBzdWJ0cmVlIGltbWVkaWF0ZWx5IC0tIGRvbid0IGxvb2sgYXQgdGhlIGNoaWxkcmVuCisJCQkgKiBvZiBzdWNoIGEgZGV2aWNlLgorCQkJICoKKwkJCSAqIEZyb20gdGhlIEFDUEkgc3BlYywgZGVzY3JpcHRpb24gb2YgX0lOSToKKwkJCSAqCisJCQkgKiAiSWYgdGhlIF9TVEEgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQsCisJCQkgKiBPU1BNIHdpbGwgbm90IHJ1biB0aGUgX0lOSSBhbmQgd2lsbCBub3QgZXhhbWluZSB0aGUgY2hpbGRyZW4KKwkJCSAqIG9mIHRoZSBkZXZpY2UgZm9yIF9JTkkgbWV0aG9kcyIKKwkJCSAqLworCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0NUUkxfREVQVEgpOwogCQl9Ci0KLQkJLyogQ291bnQgb2Ygc3VjY2Vzc2Z1bCBJTklzICovCi0KLQkJaW5mby0+bnVtX0lOSSsrOwogCX0KIAorCS8qCisJICogVGhlIGRldmljZSBpcyBwcmVzZW50IG9yIGlzIGFzc3VtZWQgcHJlc2VudCBpZiBubyBfU1RBIGV4aXN0cy4KKwkgKiBSdW4gdGhlIF9JTkkgaWYgaXQgZXhpc3RzIChub3QgcmVxdWlyZWQgdG8gZXhpc3QpCisJICoKKwkgKiBOb3RlOiBXZSBrbm93IHRoZXJlIGlzIGFuIF9JTkkgd2l0aGluIHRoaXMgc3VidHJlZSwgYnV0IGl0IG1heSBub3QgYmUKKwkgKiB1bmRlciB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLCBpdCBtYXkgYmUgbG93ZXIgaW4gdGhlIGJyYW5jaC4KKwkgKi8KKwlBQ1BJX0RFQlVHX0VYRUMoYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUKKwkJCShBQ1BJX1RZUEVfTUVUSE9ELCBkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX0lOSSkpOworCisJaW5mby0+cHJlZml4X25vZGUgPSBkZXZpY2Vfbm9kZTsKKwlpbmZvLT5wYXRobmFtZSA9IE1FVEhPRF9OQU1FX19JTkk7CisJaW5mby0+cGFyYW1ldGVycyA9IE5VTEw7CisJaW5mby0+cGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0FSR1M7CisJaW5mby0+ZmxhZ3MgPSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUU7CisKKwlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlKGluZm8pOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQl3YWxrX2luZm8tPm51bV9JTkkrKzsKKworCQlpZiAoKGFjcGlfZGJnX2xldmVsIDw9IEFDUElfTFZfQUxMX0VYQ0VQVElPTlMpICYmCisJCSAgICAoIShhY3BpX2RiZ19sZXZlbCAmIEFDUElfTFZfSU5GTykpKSB7CisJCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULCAiLiIpKTsKKwkJfQorCX0KKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorCWVsc2UgaWYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpIHsKKworCQkvKiBJZ25vcmUgZXJyb3IgYW5kIG1vdmUgb24gdG8gbmV4dCBkZXZpY2UgKi8KKworCQljaGFyICpzY29wZV9uYW1lID0KKwkJICAgIGFjcGlfbnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lKGluZm8tPnJlc29sdmVkX25vZGUpOworCisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJkdXJpbmcgJXMuX0lOSSBleGVjdXRpb24iLAorCQkJCXNjb3BlX25hbWUpKTsKKwkJQUNQSV9GUkVFKHNjb3BlX25hbWUpOworCX0KKyNlbmRpZgorCisJLyogSWdub3JlIGVycm9ycyBmcm9tIGFib3ZlICovCisKKwlzdGF0dXMgPSBBRV9PSzsKKworCS8qCisJICogVGhlIF9JTkkgbWV0aG9kIGhhcyBiZWVuIHJ1biBpZiBwcmVzZW50OyBjYWxsIHRoZSBHbG9iYWwgSW5pdGlhbGl6YXRpb24KKwkgKiBIYW5kbGVyIGZvciB0aGlzIGRldmljZS4KKwkgKi8KIAlpZiAoYWNwaV9nYmxfaW5pdF9oYW5kbGVyKSB7Ci0JCS8qIEV4dGVybmFsIGluaXRpYWxpemF0aW9uIGhhbmRsZXIgaXMgcHJlc2VudCwgY2FsbCBpdCAqLwotCiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2dibF9pbml0X2hhbmRsZXIocGluZm8ubm9kZSwgQUNQSV9JTklUX0RFVklDRV9JTkkpOworCQkgICAgYWNwaV9nYmxfaW5pdF9oYW5kbGVyKGRldmljZV9ub2RlLCBBQ1BJX0lOSVRfREVWSUNFX0lOSSk7CiAJfQogCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNsb2FkLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbG9hZC5jCmluZGV4IDRlMGIwNTIuLmZlNzVkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNsb2FkLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2xvYWQuYwpAQCAtNzcsMTMgKzc3LDE0IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfbG9hZF90YWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfbG9hZF90YWJsZSk7CiAKIAkvKiBDaGVjayBpZiB0YWJsZSBjb250YWlucyB2YWxpZCBBTUwgKG11c3QgYmUgRFNEVCwgUFNEVCwgU1NEVCwgZXRjLikgKi8KIAogCWlmICghCiAJICAgIChhY3BpX2dibF90YWJsZV9kYXRhW3RhYmxlX2Rlc2MtPnR5cGVdLgogCSAgICAgZmxhZ3MgJiBBQ1BJX1RBQkxFX0VYRUNVVEFCTEUpKSB7CisKIAkJLyogSnVzdCBpZ25vcmUgdGhpcyB0YWJsZSAqLwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0xNjgsNyArMTY5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX2xvYWRfdGFibGVfYnlfdHlwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfbG9hZF90YWJsZV9ieV90eXBlKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMTgwLDExICsxODEsMTEgQEAKIAkgKiBEU0RUIChvbmUpLCBTU0RUL1BTRFQgKG11bHRpcGxlKQogCSAqLwogCXN3aXRjaCAodGFibGVfdHlwZSkgewotCWNhc2UgQUNQSV9UQUJMRV9EU0RUOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9EU0RUOgogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIk5hbWVzcGFjZSBsb2FkOiBEU0RUXG4iKSk7CiAKLQkJdGFibGVfZGVzYyA9IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW0FDUElfVEFCTEVfRFNEVF0ubmV4dDsKKwkJdGFibGVfZGVzYyA9IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW0FDUElfVEFCTEVfSURfRFNEVF0ubmV4dDsKIAogCQkvKiBJZiB0YWJsZSBhbHJlYWR5IGxvYWRlZCBpbnRvIG5hbWVzcGFjZSwganVzdCByZXR1cm4gKi8KIApAQCAtMjAwLDggKzIwMSw4IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfVEFCTEVfU1NEVDoKLQljYXNlIEFDUElfVEFCTEVfUFNEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfU1NEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfUFNEVDoKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJICAiTmFtZXNwYWNlIGxvYWQ6ICVkIFNTRFQgb3IgUFNEVHNcbiIsCkBAIC0yNTgsNyArMjU5LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2xvYWRfbmFtZV9zcGFjZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sb2FkX25hbWVfc3BhY2UpOwogCiAJLyogVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBhIERTRFQgaW5zdGFsbGVkICovCiAKQEAgLTI3MSwxNSArMjcyLDE1IEBACiAJICogTG9hZCB0aGUgbmFtZXNwYWNlLiAgVGhlIERTRFQgaXMgcmVxdWlyZWQsCiAJICogYnV0IHRoZSBTU0RUIGFuZCBQU0RUIHRhYmxlcyBhcmUgb3B0aW9uYWwuCiAJICovCi0Jc3RhdHVzID0gYWNwaV9uc19sb2FkX3RhYmxlX2J5X3R5cGUoQUNQSV9UQUJMRV9EU0RUKTsKKwlzdGF0dXMgPSBhY3BpX25zX2xvYWRfdGFibGVfYnlfdHlwZShBQ1BJX1RBQkxFX0lEX0RTRFQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKIAkvKiBJZ25vcmUgZXhjZXB0aW9ucyBmcm9tIHRoZXNlICovCiAKLQkodm9pZClhY3BpX25zX2xvYWRfdGFibGVfYnlfdHlwZShBQ1BJX1RBQkxFX1NTRFQpOwotCSh2b2lkKWFjcGlfbnNfbG9hZF90YWJsZV9ieV90eXBlKEFDUElfVEFCTEVfUFNEVCk7CisJKHZvaWQpYWNwaV9uc19sb2FkX3RhYmxlX2J5X3R5cGUoQUNQSV9UQUJMRV9JRF9TU0RUKTsKKwkodm9pZClhY3BpX25zX2xvYWRfdGFibGVfYnlfdHlwZShBQ1BJX1RBQkxFX0lEX1BTRFQpOwogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwKIAkJCSAgICAgICJBQ1BJIE5hbWVzcGFjZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGF0IHJvb3QgJXBcbiIsCkBAIC0zMTQsNyArMzE1LDcgQEAKIAlhY3BpX2hhbmRsZSBkdW1teTsKIAl1MzIgbGV2ZWw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19kZWxldGVfc3VidHJlZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZGVsZXRlX3N1YnRyZWUpOwogCiAJcGFyZW50X2hhbmRsZSA9IHN0YXJ0X2hhbmRsZTsKIAljaGlsZF9oYW5kbGUgPSBOVUxMOwpAQCAtMzI1LDYgKzMyNiw3IEBACiAJICogdG8gd2hlcmUgd2Ugc3RhcnRlZC4KIAkgKi8KIAl3aGlsZSAobGV2ZWwgPiAwKSB7CisKIAkJLyogQXR0ZW1wdCB0byBnZXQgdGhlIG5leHQgb2JqZWN0IGluIHRoaXMgc2NvcGUgKi8KIAogCQlzdGF0dXMgPSBhY3BpX2dldF9uZXh0X29iamVjdChBQ1BJX1RZUEVfQU5ZLCBwYXJlbnRfaGFuZGxlLApAQCAtMzM1LDYgKzMzNyw3IEBACiAJCS8qIERpZCB3ZSBnZXQgYSBuZXcgb2JqZWN0PyAqLwogCiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCiAJCQkvKiBDaGVjayBpZiB0aGlzIG9iamVjdCBoYXMgYW55IGNoaWxkcmVuICovCiAKIAkJCWlmIChBQ1BJX1NVQ0NFU1MKQEAgLTM5Miw3ICszOTUsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX3VubG9hZF9uYW1lX3NwYWNlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc191bmxvYWRfbmFtZV9zcGFjZSk7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zbmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNuYW1lcy5jCmluZGV4IDYzOWY2NTMuLjk3YjgzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNuYW1lcy5jCkBAIC00OCwxMSArNDgsNiBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc25hbWVzIikKIAotLyogTG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQKLWFjcGlfbnNfYnVpbGRfZXh0ZXJuYWxfcGF0aChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKLQkJCSAgICBhY3BpX3NpemUgc2l6ZSwgY2hhciAqbmFtZV9idWZmZXIpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2J1aWxkX2V4dGVybmFsX3BhdGgKQEAgLTY3LDggKzYyLDcgQEAKICAqIERFU0NSSVBUSU9OOiBHZW5lcmF0ZSBhIGZ1bGwgcGF0aGFuYW1lCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKK3ZvaWQKIGFjcGlfbnNfYnVpbGRfZXh0ZXJuYWxfcGF0aChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKIAkJCSAgICBhY3BpX3NpemUgc2l6ZSwgY2hhciAqbmFtZV9idWZmZXIpCiB7CkBAIC0xMzgsNyArMTMyLDcgQEAKIAljaGFyICpuYW1lX2J1ZmZlcjsKIAlhY3BpX3NpemUgc2l6ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJuc19nZXRfZXh0ZXJuYWxfcGF0aG5hbWUiLCBub2RlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19nZXRfZXh0ZXJuYWxfcGF0aG5hbWUsIG5vZGUpOwogCiAJLyogQ2FsY3VsYXRlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIGJhc2VkIG9uIGRlcHRoIGJlbG93IHJvb3QgKi8KIApAQCAtMTQ2LDcgKzE0MCw3IEBACiAKIAkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciB0byBiZSByZXR1cm5lZCB0byBjYWxsZXIgKi8KIAotCW5hbWVfYnVmZmVyID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemUpOworCW5hbWVfYnVmZmVyID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZSk7CiAJaWYgKCFuYW1lX2J1ZmZlcikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQWxsb2NhdGlvbiBmYWlsdXJlIikpOwogCQlyZXR1cm5fUFRSKE5VTEwpOwpAQCAtMjE5LDcgKzIxMyw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJYWNwaV9zaXplIHJlcXVpcmVkX3NpemU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigibnNfaGFuZGxlX3RvX3BhdGhuYW1lIiwgdGFyZ2V0X2hhbmRsZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfaGFuZGxlX3RvX3BhdGhuYW1lLCB0YXJnZXRfaGFuZGxlKTsKIAogCW5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZSh0YXJnZXRfaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNvYmplY3QuYwppbmRleCAxMGFlNjI5Li5hYWJlODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc29iamVjdC5jCkBAIC03NiwxOSArNzYsMjEgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpsYXN0X29ial9kZXNjOwogCWFjcGlfb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUgPSBBQ1BJX1RZUEVfQU5ZOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfYXR0YWNoX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfYXR0YWNoX29iamVjdCk7CiAKIAkvKgogCSAqIFBhcmFtZXRlciB2YWxpZGF0aW9uCiAJICovCiAJaWYgKCFub2RlKSB7CisKIAkJLyogSW52YWxpZCBoYW5kbGUgKi8KIAotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTnVsbCBuYW1lZF9vYmogaGFuZGxlIikpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTnVsbCBOYW1lZE9iaiBoYW5kbGUiKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKIAlpZiAoIW9iamVjdCAmJiAoQUNQSV9UWVBFX0FOWSAhPSB0eXBlKSkgeworCiAJCS8qIE51bGwgb2JqZWN0ICovCiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKQEAgLTk3LDYgKzk5LDcgQEAKIAl9CiAKIAlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG5vZGUpICE9IEFDUElfREVTQ19UWVBFX05BTUVEKSB7CisKIAkJLyogTm90IGEgbmFtZSBoYW5kbGUgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBoYW5kbGUgJXAgWyVzXSIsCkBAIC0xMDgsNyArMTExLDcgQEAKIAogCWlmIChub2RlLT5vYmplY3QgPT0gb2JqZWN0KSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCQkgICJPYmogJXAgYWxyZWFkeSBpbnN0YWxsZWQgaW4gbmFtZV9vYmogJXBcbiIsCisJCQkJICAiT2JqICVwIGFscmVhZHkgaW5zdGFsbGVkIGluIE5hbWVPYmogJXBcbiIsCiAJCQkJICBvYmplY3QsIG5vZGUpKTsKIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMjAxLDcgKzIwNCw3IEBACiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19kZXRhY2hfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19kZXRhY2hfb2JqZWN0KTsKIAogCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OwogCkBAIC0yNTIsNyArMjU1LDcgQEAKIAkJCQkJCSAgICAgICBhY3BpX25hbWVzcGFjZV9ub2RlCiAJCQkJCQkgICAgICAgKm5vZGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoIm5zX2dldF9hdHRhY2hlZF9vYmplY3QiLCBub2RlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19nZXRfYXR0YWNoZWRfb2JqZWN0LCBub2RlKTsKIAogCWlmICghbm9kZSkgewogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJOdWxsIE5vZGUgcHRyIikpOwpAQCAtMjg3LDcgKzI5MCw3IEBACiAJCQkJCQkJYWNwaV9vcGVyYW5kX29iamVjdAogCQkJCQkJCSpvYmpfZGVzYykKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigibnNfZ2V0X3NlY29uZGFyeV9vYmplY3QiLCBvYmpfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X3NlY29uZGFyeV9vYmplY3QsIG9ial9kZXNjKTsKIAogCWlmICgoIW9ial9kZXNjKSB8fAogCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3BhcnNlLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zcGFyc2UuYwppbmRleCAyMzJiZTQzLi4xNTU1MDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zcGFyc2UuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zcGFyc2UuYwpAQCAtNjIsMTMgKzYyLDEzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzCi1hY3BpX25zX29uZV9jb21wbGV0ZV9wYXJzZSh1OCBwYXNzX251bWJlciwgc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqIHRhYmxlX2Rlc2MpCithY3BpX25zX29uZV9jb21wbGV0ZV9wYXJzZSh1OCBwYXNzX251bWJlciwgc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYykKIHsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqcGFyc2Vfcm9vdDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm5zX29uZV9jb21wbGV0ZV9wYXJzZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfb25lX2NvbXBsZXRlX3BhcnNlKTsKIAogCS8qIENyZWF0ZSBhbmQgaW5pdCBhIFJvb3QgTm9kZSAqLwogCkBAIC0xMjQsNyArMTI0LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19wYXJzZV90YWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfcGFyc2VfdGFibGUpOwogCiAJLyoKIAkgKiBBTUwgUGFyc2UsIHBhc3MgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3NlYXJjaC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3NlYXJjaC5jCmluZGV4IGQ2NGI3ODkuLjUwMGUyYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNzZWFyY2guYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zc2VhcmNoLmMKQEAgLTU2LDE2ICs1NiwxNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3NlYXJjaF9ub2RlCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19zZWFyY2hfb25lX3Njb3BlCiAgKgogICogUEFSQU1FVEVSUzogIHRhcmdldF9uYW1lICAgICAtIEFzY2lpIEFDUEkgbmFtZSB0byBzZWFyY2ggZm9yCi0gKiAgICAgICAgICAgICAgTm9kZSAgICAgICAgICAgIC0gU3RhcnRpbmcgbm9kZSB3aGVyZSBzZWFyY2ggd2lsbCBiZWdpbgorICogICAgICAgICAgICAgIHBhcmVudF9ub2RlICAgICAtIFN0YXJ0aW5nIG5vZGUgd2hlcmUgc2VhcmNoIHdpbGwgYmVnaW4KICAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgLSBPYmplY3QgdHlwZSB0byBtYXRjaAogICogICAgICAgICAgICAgIHJldHVybl9ub2RlICAgICAtIFdoZXJlIHRoZSBtYXRjaGVkIE5hbWVkIG9iaiBpcyByZXR1cm5lZAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogU2VhcmNoIGEgc2luZ2xlIGxldmVsIG9mIHRoZSBuYW1lc3BhY2UuICBQZXJmb3JtcyBhCisgKiBERVNDUklQVElPTjogU2VhcmNoIGEgc2luZ2xlIGxldmVsIG9mIHRoZSBuYW1lc3BhY2UuIFBlcmZvcm1zIGEKICAqICAgICAgICAgICAgICBzaW1wbGUgc2VhcmNoIG9mIHRoZSBzcGVjaWZpZWQgbGV2ZWwsIGFuZCBkb2VzIG5vdCBhZGQKICAqICAgICAgICAgICAgICBlbnRyaWVzIG9yIHNlYXJjaCBwYXJlbnRzLgogICoKQEAgLTc1LDM1ICs3NSw0MCBAQAogICoKICAqICAgICAgQWxsIG5hbWVzcGFjZSBzZWFyY2hpbmcgaXMgbGluZWFyIGluIHRoaXMgaW1wbGVtZW50YXRpb24sIGJ1dAogICogICAgICBjb3VsZCBiZSBlYXNpbHkgbW9kaWZpZWQgdG8gc3VwcG9ydCBhbnkgaW1wcm92ZWQgc2VhcmNoCi0gKiAgICAgIGFsZ29yaXRobS4gIEhvd2V2ZXIsIHRoZSBsaW5lYXIgc2VhcmNoIHdhcyBjaG9zZW4gZm9yIHNpbXBsaWNpdHkKKyAqICAgICAgYWxnb3JpdGhtLiBIb3dldmVyLCB0aGUgbGluZWFyIHNlYXJjaCB3YXMgY2hvc2VuIGZvciBzaW1wbGljaXR5CiAgKiAgICAgIGFuZCBiZWNhdXNlIHRoZSB0cmVlcyBhcmUgc21hbGwgYW5kIHRoZSBvdGhlciBpbnRlcnByZXRlcgogICogICAgICBleGVjdXRpb24gb3ZlcmhlYWQgaXMgcmVsYXRpdmVseSBoaWdoLgogICoKKyAqICAgICAgTm90ZTogQ1BVIGV4ZWN1dGlvbiBhbmFseXNpcyBoYXMgc2hvd24gdGhhdCB0aGUgQU1MIGludGVycHJldGVyIHNwZW5kcworICogICAgICBhIHZlcnkgc21hbGwgcGVyY2VudGFnZSBvZiBpdHMgdGltZSBzZWFyY2hpbmcgdGhlIG5hbWVzcGFjZS4gVGhlcmVmb3JlLAorICogICAgICB0aGUgbGluZWFyIHNlYXJjaCBzZWVtcyB0byBiZSBzdWZmaWNpZW50LCBhcyB0aGVyZSB3b3VsZCBzZWVtIHRvIGJlCisgKiAgICAgIGxpdHRsZSB2YWx1ZSBpbiBpbXByb3ZpbmcgdGhlIHNlYXJjaC4KKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV9uc19zZWFyY2hfbm9kZSh1MzIgdGFyZ2V0X25hbWUsCi0JCSAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKLQkJICAgIGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwKLQkJICAgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqcmV0dXJuX25vZGUpCithY3BpX25zX3NlYXJjaF9vbmVfc2NvcGUodTMyIHRhcmdldF9uYW1lLAorCQkJIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZSwKKwkJCSBhY3BpX29iamVjdF90eXBlIHR5cGUsCisJCQkgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXR1cm5fbm9kZSkKIHsKLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbmV4dF9ub2RlOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfc2VhcmNoX25vZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKG5zX3NlYXJjaF9vbmVfc2NvcGUpOwogCiAjaWZkZWYgQUNQSV9ERUJVR19PVVRQVVQKIAlpZiAoQUNQSV9MVl9OQU1FUyAmIGFjcGlfZGJnX2xldmVsKSB7CiAJCWNoYXIgKnNjb3BlX25hbWU7CiAKLQkJc2NvcGVfbmFtZSA9IGFjcGlfbnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lKG5vZGUpOworCQlzY29wZV9uYW1lID0gYWNwaV9uc19nZXRfZXh0ZXJuYWxfcGF0aG5hbWUocGFyZW50X25vZGUpOwogCQlpZiAoc2NvcGVfbmFtZSkgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKIAkJCQkJICAiU2VhcmNoaW5nICVzICglcCkgRm9yIFslNC40c10gKCVzKVxuIiwKLQkJCQkJICBzY29wZV9uYW1lLCBub2RlLCBBQ1BJX0NBU1RfUFRSKGNoYXIsCi0JCQkJCQkJCQkgICZ0YXJnZXRfbmFtZSksCisJCQkJCSAgc2NvcGVfbmFtZSwgcGFyZW50X25vZGUsCisJCQkJCSAgQUNQSV9DQVNUX1BUUihjaGFyLCAmdGFyZ2V0X25hbWUpLAogCQkJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSkpOwogCi0JCQlBQ1BJX01FTV9GUkVFKHNjb3BlX25hbWUpOworCQkJQUNQSV9GUkVFKHNjb3BlX25hbWUpOwogCQl9CiAJfQogI2VuZGlmCkBAIC0xMTIsMzIgKzExNywzMyBAQAogCSAqIFNlYXJjaCBmb3IgbmFtZSBhdCB0aGlzIG5hbWVzcGFjZSBsZXZlbCwgd2hpY2ggaXMgdG8gc2F5IHRoYXQgd2UKIAkgKiBtdXN0IHNlYXJjaCBmb3IgdGhlIG5hbWUgYW1vbmcgdGhlIGNoaWxkcmVuIG9mIHRoaXMgb2JqZWN0CiAJICovCi0JbmV4dF9ub2RlID0gbm9kZS0+Y2hpbGQ7Ci0Jd2hpbGUgKG5leHRfbm9kZSkgeworCW5vZGUgPSBwYXJlbnRfbm9kZS0+Y2hpbGQ7CisJd2hpbGUgKG5vZGUpIHsKKwogCQkvKiBDaGVjayBmb3IgbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSAqLwogCi0JCWlmIChuZXh0X25vZGUtPm5hbWUuaW50ZWdlciA9PSB0YXJnZXRfbmFtZSkgeworCQlpZiAobm9kZS0+bmFtZS5pbnRlZ2VyID09IHRhcmdldF9uYW1lKSB7CisKIAkJCS8qIFJlc29sdmUgYSBjb250cm9sIG1ldGhvZCBhbGlhcyBpZiBhbnkgKi8KIAotCQkJaWYgKGFjcGlfbnNfZ2V0X3R5cGUobmV4dF9ub2RlKSA9PQorCQkJaWYgKGFjcGlfbnNfZ2V0X3R5cGUobm9kZSkgPT0KIAkJCSAgICBBQ1BJX1RZUEVfTE9DQUxfTUVUSE9EX0FMSUFTKSB7Ci0JCQkJbmV4dF9ub2RlID0KKwkJCQlub2RlID0KIAkJCQkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwKLQkJCQkJCSAgbmV4dF9ub2RlLT5vYmplY3QpOworCQkJCQkJICBub2RlLT5vYmplY3QpOwogCQkJfQogCi0JCQkvKgotCQkJICogRm91bmQgbWF0Y2hpbmcgZW50cnkuCi0JCQkgKi8KKwkJCS8qIEZvdW5kIG1hdGNoaW5nIGVudHJ5ICovCisKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCiAJCQkJCSAgIk5hbWUgWyU0LjRzXSAoJXMpICVwIGZvdW5kIGluIHNjb3BlIFslNC40c10gJXBcbiIsCiAJCQkJCSAgQUNQSV9DQVNUX1BUUihjaGFyLCAmdGFyZ2V0X25hbWUpLAotCQkJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShuZXh0X25vZGUtPgotCQkJCQkJCQl0eXBlKSwKLQkJCQkJICBuZXh0X25vZGUsCi0JCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLCBub2RlKSk7CisJCQkJCSAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKG5vZGUtPnR5cGUpLAorCQkJCQkgIG5vZGUsCisJCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSwKKwkJCQkJICBwYXJlbnRfbm9kZSkpOwogCi0JCQkqcmV0dXJuX25vZGUgPSBuZXh0X25vZGU7CisJCQkqcmV0dXJuX25vZGUgPSBub2RlOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAkJfQogCkBAIC0xNDUsNyArMTUxLDggQEAKIAkJICogVGhlIGxhc3QgZW50cnkgaW4gdGhlIGxpc3QgcG9pbnRzIGJhY2sgdG8gdGhlIHBhcmVudCwKIAkJICogc28gYSBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGVuZC1vZi1saXN0CiAJCSAqLwotCQlpZiAobmV4dF9ub2RlLT5mbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpIHsKKwkJaWYgKG5vZGUtPmZsYWdzICYgQU5PQkpfRU5EX09GX1BFRVJfTElTVCkgeworCiAJCQkvKiBTZWFyY2hlZCBlbnRpcmUgbGlzdCwgd2UgYXJlIGRvbmUgKi8KIAogCQkJYnJlYWs7CkBAIC0xNTMsNyArMTYwLDcgQEAKIAogCQkvKiBEaWRuJ3QgbWF0Y2ggbmFtZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBwZWVyIG9iamVjdCAqLwogCi0JCW5leHRfbm9kZSA9IG5leHRfbm9kZS0+cGVlcjsKKwkJbm9kZSA9IG5vZGUtPnBlZXI7CiAJfQogCiAJLyogU2VhcmNoZWQgZW50aXJlIG5hbWVzcGFjZSBsZXZlbCwgbm90IGZvdW5kICovCkBAIC0xNjIsNyArMTY5LDggQEAKIAkJCSAgIk5hbWUgWyU0LjRzXSAoJXMpIG5vdCBmb3VuZCBpbiBzZWFyY2ggaW4gc2NvcGUgWyU0LjRzXSAlcCBmaXJzdCBjaGlsZCAlcFxuIiwKIAkJCSAgQUNQSV9DQVNUX1BUUihjaGFyLCAmdGFyZ2V0X25hbWUpLAogCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUodHlwZSksCi0JCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShub2RlKSwgbm9kZSwgbm9kZS0+Y2hpbGQpKTsKKwkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSwgcGFyZW50X25vZGUsCisJCQkgIHBhcmVudF9ub2RlLT5jaGlsZCkpOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PVF9GT1VORCk7CiB9CkBAIC0xNzksMTQgKzE4NywxNCBAQAogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBDYWxsZWQgd2hlbiBhIG5hbWUgaGFzIG5vdCBiZWVuIGZvdW5kIGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZQotICogICAgICAgICAgICAgIGxldmVsLiAgQmVmb3JlIGFkZGluZyBpdCBvciBnaXZpbmcgdXAsIEFDUEkgc2NvcGUgcnVsZXMgcmVxdWlyZQorICogICAgICAgICAgICAgIGxldmVsLiBCZWZvcmUgYWRkaW5nIGl0IG9yIGdpdmluZyB1cCwgQUNQSSBzY29wZSBydWxlcyByZXF1aXJlCiAgKiAgICAgICAgICAgICAgc2VhcmNoaW5nIGVuY2xvc2luZyBzY29wZXMgaW4gY2FzZXMgaWRlbnRpZmllZCBieSBhY3BpX25zX2xvY2FsKCkuCiAgKgogICogICAgICAgICAgICAgICJBIG5hbWUgaXMgbG9jYXRlZCBieSBmaW5kaW5nIHRoZSBtYXRjaGluZyBuYW1lIGluIHRoZSBjdXJyZW50CiAgKiAgICAgICAgICAgICAgbmFtZSBzcGFjZSwgYW5kIHRoZW4gaW4gdGhlIHBhcmVudCBuYW1lIHNwYWNlLiBJZiB0aGUgcGFyZW50CiAgKiAgICAgICAgICAgICAgbmFtZSBzcGFjZSBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lLCB0aGUgc2VhcmNoIGNvbnRpbnVlcwogICogICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5IHVudGlsIGVpdGhlciB0aGUgbmFtZSBpcyBmb3VuZCBvciB0aGUgbmFtZSBzcGFjZQotICogICAgICAgICAgICAgIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgKHRoZSByb290IG9mIHRoZSBuYW1lIHNwYWNlKS4gIFRoaXMKKyAqICAgICAgICAgICAgICBkb2VzIG5vdCBoYXZlIGEgcGFyZW50ICh0aGUgcm9vdCBvZiB0aGUgbmFtZSBzcGFjZSkuIFRoaXMKICAqICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgbmFtZSBpcyBub3QgZm91bmQiIChGcm9tIEFDUEkgU3BlY2lmaWNhdGlvbiwKICAqICAgICAgICAgICAgICBzZWN0aW9uIDUuMykKICAqCkBAIC0yMDEsNyArMjA5LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnBhcmVudF9ub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfc2VhcmNoX3BhcmVudF90cmVlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19zZWFyY2hfcGFyZW50X3RyZWUpOwogCiAJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKTsKIApAQCAtMjM1LDIwICsyNDMsMTkgQEAKIAkgKi8KIAl3aGlsZSAocGFyZW50X25vZGUpIHsKIAkJLyoKLQkJICogU2VhcmNoIHBhcmVudCBzY29wZS4gIFVzZSBUWVBFX0FOWSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCisJCSAqIFNlYXJjaCBwYXJlbnQgc2NvcGUuIFVzZSBUWVBFX0FOWSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCiAJCSAqIG9iamVjdCB0eXBlIGF0IHRoaXMgcG9pbnQsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgZXhpc3RlbmNlIG9mCi0JCSAqIHRoZSBhY3R1YWwgbmFtZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gIFR5cGVjaGVja2luZyBjb21lcyBsYXRlci4KKwkJICogdGhlIGFjdHVhbCBuYW1lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBUeXBlY2hlY2tpbmcgY29tZXMgbGF0ZXIuCiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX25zX3NlYXJjaF9ub2RlKHRhcmdldF9uYW1lLCBwYXJlbnRfbm9kZSwKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfbnNfc2VhcmNoX29uZV9zY29wZSh0YXJnZXRfbmFtZSwgcGFyZW50X25vZGUsCiAJCQkJCSAgICAgQUNQSV9UWVBFX0FOWSwgcmV0dXJuX25vZGUpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQl9CiAKLQkJLyoKLQkJICogTm90IGZvdW5kIGhlcmUsIGdvIHVwIGFub3RoZXIgbGV2ZWwKLQkJICogKHVudGlsIHdlIHJlYWNoIHRoZSByb290KQotCQkgKi8KKwkJLyogTm90IGZvdW5kIGhlcmUsIGdvIHVwIGFub3RoZXIgbGV2ZWwgKHVudGlsIHdlIHJlYWNoIHRoZSByb290KSAqLworCiAJCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUocGFyZW50X25vZGUpOwogCX0KIApAQCAtMjczLDcgKzI4MCw3IEBACiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IFNlYXJjaCBmb3IgYSBuYW1lIHNlZ21lbnQgaW4gYSBzaW5nbGUgbmFtZXNwYWNlIGxldmVsLAotICogICAgICAgICAgICAgIG9wdGlvbmFsbHkgYWRkaW5nIGl0IGlmIGl0IGlzIG5vdCBmb3VuZC4gIElmIHRoZSBwYXNzZWQKKyAqICAgICAgICAgICAgICBvcHRpb25hbGx5IGFkZGluZyBpdCBpZiBpdCBpcyBub3QgZm91bmQuIElmIHRoZSBwYXNzZWQKICAqICAgICAgICAgICAgICBUeXBlIGlzIG5vdCBBbnkgYW5kIHRoZSB0eXBlIHByZXZpb3VzbHkgc3RvcmVkIGluIHRoZQogICogICAgICAgICAgICAgIGVudHJ5IHdhcyBBbnkgKGkuZS4gdW5rbm93biksIHVwZGF0ZSB0aGUgc3RvcmVkIHR5cGUuCiAgKgpAQCAtMjkzLDI5ICszMDAsNDYgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5ld19ub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfc2VhcmNoX2FuZF9lbnRlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfc2VhcmNoX2FuZF9lbnRlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCiAJaWYgKCFub2RlIHx8ICF0YXJnZXRfbmFtZSB8fCAhcmV0dXJuX25vZGUpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiTnVsbCBwYXJhbTogTm9kZSAlcCBOYW1lICVYIHJldHVybl9ub2RlICVwIiwKKwkJCSAgICAiTnVsbCBwYXJhbWV0ZXI6IE5vZGUgJXAgTmFtZSAlWCBSZXR1cm5Ob2RlICVwIiwKIAkJCSAgICBub2RlLCB0YXJnZXRfbmFtZSwgcmV0dXJuX25vZGUpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCS8qIE5hbWUgbXVzdCBjb25zaXN0IG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzICovCi0KKwkvKgorCSAqIE5hbWUgbXVzdCBjb25zaXN0IG9mIHZhbGlkIEFDUEkgY2hhcmFjdGVycy4gV2Ugd2lsbCByZXBhaXIgdGhlIG5hbWUgaWYKKwkgKiBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFib3J0IGJlY2F1c2Ugb2YgdGhpcywgYnV0IHdlIHdhbnQKKwkgKiBhbGwgbmFtZXNwYWNlIG5hbWVzIHRvIGJlIHByaW50YWJsZS4gQSB3YXJuaW5nIG1lc3NhZ2UgaXMgYXBwcm9wcmlhdGUuCisJICoKKwkgKiBUaGlzIGlzc3VlIGNhbWUgdXAgYmVjYXVzZSB0aGVyZSBhcmUgaW4gZmFjdCBtYWNoaW5lcyB0aGF0IGV4aGliaXQKKwkgKiB0aGlzIHByb2JsZW0sIGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZW5hYmxlIEFDUEkgc3VwcG9ydCBmb3IgdGhlbSwKKwkgKiBldmVuIHRob3VnaCB0aGVyZSBhcmUgYSBmZXcgYmFkIG5hbWVzLgorCSAqLwogCWlmICghYWNwaV91dF92YWxpZF9hY3BpX25hbWUodGFyZ2V0X25hbWUpKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJCYWQgY2hhcmFjdGVyIGluIEFDUEkgTmFtZTogJVgiLAotCQkJICAgIHRhcmdldF9uYW1lKSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfQ0hBUkFDVEVSKTsKKwkJdGFyZ2V0X25hbWUgPSBhY3BpX3V0X3JlcGFpcl9uYW1lKHRhcmdldF9uYW1lKTsKKworCQkvKiBSZXBvcnQgd2FybmluZyBvbmx5IGlmIGluIHN0cmljdCBtb2RlIG9yIGRlYnVnIG1vZGUgKi8KKworCQlpZiAoIWFjcGlfZ2JsX2VuYWJsZV9pbnRlcnByZXRlcl9zbGFjaykgeworCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJCSAgICAgICJGb3VuZCBiYWQgY2hhcmFjdGVyKHMpIGluIG5hbWUsIHJlcGFpcmVkOiBbJTQuNHNdXG4iLAorCQkJCSAgICAgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSkpOworCQl9IGVsc2UgeworCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAorCQkJCQkgICJGb3VuZCBiYWQgY2hhcmFjdGVyKHMpIGluIG5hbWUsIHJlcGFpcmVkOiBbJTQuNHNdXG4iLAorCQkJCQkgIEFDUElfQ0FTVF9QVFIoY2hhciwgJnRhcmdldF9uYW1lKSkpOworCQl9CiAJfQogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIG5hbWUgaW4gdGhlIG5hbWVzcGFjZSBsZXZlbCBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlciAqLwogCiAJKnJldHVybl9ub2RlID0gQUNQSV9FTlRSWV9OT1RfRk9VTkQ7Ci0Jc3RhdHVzID0gYWNwaV9uc19zZWFyY2hfbm9kZSh0YXJnZXRfbmFtZSwgbm9kZSwgdHlwZSwgcmV0dXJuX25vZGUpOworCXN0YXR1cyA9IGFjcGlfbnNfc2VhcmNoX29uZV9zY29wZSh0YXJnZXRfbmFtZSwgbm9kZSwgdHlwZSwgcmV0dXJuX25vZGUpOwogCWlmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKSB7CiAJCS8qCiAJCSAqIElmIHdlIGZvdW5kIGl0IEFORCB0aGUgcmVxdWVzdCBzcGVjaWZpZXMgdGhhdCBhIGZpbmQgaXMgYW4gZXJyb3IsCkBAIC0zMjUsMTggKzM0OSwxNiBAQAogCQkJc3RhdHVzID0gQUVfQUxSRUFEWV9FWElTVFM7CiAJCX0KIAotCQkvKgotCQkgKiBFaXRoZXIgZm91bmQgaXQgb3IgdGhlcmUgd2FzIGFuIGVycm9yCi0JCSAqIC0tIGZpbmlzaGVkIGVpdGhlciB3YXkKLQkJICovCisJCS8qIEVpdGhlciBmb3VuZCBpdCBvciB0aGVyZSB3YXMgYW4gZXJyb3I6IGZpbmlzaGVkIGVpdGhlciB3YXkgKi8KKwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKIAkvKgotCSAqIFRoZSBuYW1lIHdhcyBub3QgZm91bmQuICBJZiB3ZSBhcmUgTk9UIHBlcmZvcm1pbmcgdGhlIGZpcnN0IHBhc3MKKwkgKiBUaGUgbmFtZSB3YXMgbm90IGZvdW5kLiBJZiB3ZSBhcmUgTk9UIHBlcmZvcm1pbmcgdGhlIGZpcnN0IHBhc3MKIAkgKiAobmFtZSBlbnRyeSkgb2YgbG9hZGluZyB0aGUgbmFtZXNwYWNlLCBzZWFyY2ggdGhlIHBhcmVudCB0cmVlIChhbGwgdGhlCiAJICogd2F5IHRvIHRoZSByb290IGlmIG5lY2Vzc2FyeS4pIFdlIGRvbid0IHdhbnQgdG8gcGVyZm9ybSB0aGUgcGFyZW50Ci0JICogc2VhcmNoIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBhY3R1YWxseSBiZWluZyBsb2FkZWQuICBXZSB3YW50IHRvIHBlcmZvcm0KKwkgKiBzZWFyY2ggd2hlbiB0aGUgbmFtZXNwYWNlIGlzIGFjdHVhbGx5IGJlaW5nIGxvYWRlZC4gV2Ugd2FudCB0byBwZXJmb3JtCiAJICogdGhlIHNlYXJjaCB3aGVuIG5hbWVzcGFjZSByZWZlcmVuY2VzIGFyZSBiZWluZyByZXNvbHZlZCAobG9hZCBwYXNzIDIpCiAJICogYW5kIGR1cmluZyB0aGUgZXhlY3V0aW9uIHBoYXNlLgogCSAqLwpAQCAtMzU0LDkgKzM3Niw4IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIEluIGV4ZWN1dGUgbW9kZSwganVzdCBzZWFyY2gsIG5ldmVyIGFkZCBuYW1lcy4gIEV4aXQgbm93LgotCSAqLworCS8qIEluIGV4ZWN1dGUgbW9kZSwganVzdCBzZWFyY2gsIG5ldmVyIGFkZCBuYW1lcy4gRXhpdCBub3cgKi8KKwogCWlmIChpbnRlcnByZXRlcl9tb2RlID09IEFDUElfSU1PREVfRVhFQ1VURSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAogCQkJCSAgIiU0LjRzIE5vdCBmb3VuZCBpbiAlcCBbTm90IGFkZGluZ11cbiIsCkBAIC0zNzEsMTEgKzM5MiwxOCBAQAogCWlmICghbmV3X25vZGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQorI2lmZGVmIEFDUElfQVNMX0NPTVBJTEVSCisJLyoKKwkgKiBOb2RlIGlzIGFuIG9iamVjdCBkZWZpbmVkIGJ5IGFuIEV4dGVybmFsKCkgc3RhdGVtZW50CisJICovCisJaWYgKGZsYWdzICYgQUNQSV9OU19FWFRFUk5BTCkgeworCQluZXdfbm9kZS0+ZmxhZ3MgfD0gQU5PQkpfSVNfRVhURVJOQUw7CisJfQorI2VuZGlmCiAKIAkvKiBJbnN0YWxsIHRoZSBuZXcgb2JqZWN0IGludG8gdGhlIHBhcmVudCdzIGxpc3Qgb2YgY2hpbGRyZW4gKi8KIAogCWFjcGlfbnNfaW5zdGFsbF9ub2RlKHdhbGtfc3RhdGUsIG5vZGUsIG5ld19ub2RlLCB0eXBlKTsKIAkqcmV0dXJuX25vZGUgPSBuZXdfbm9kZTsKLQogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN1dGlscy5jCmluZGV4IDNlN2NhZDUuLmFhNGU3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN1dGlscy5jCkBAIC03OCwxNSArNzgsMTcgQEAKIAkJICAgICBjaGFyICppbnRlcm5hbF9uYW1lLCBhY3BpX3N0YXR1cyBsb29rdXBfc3RhdHVzKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1MzIgYmFkX25hbWU7CiAJY2hhciAqbmFtZSA9IE5VTEw7CiAKLQlhY3BpX3V0X3JlcG9ydF9lcnJvcihtb2R1bGVfbmFtZSwgbGluZV9udW1iZXIpOworCWFjcGlfb3NfcHJpbnRmKCJBQ1BJIEVycm9yICglcy0lMDRkKTogIiwgbW9kdWxlX25hbWUsIGxpbmVfbnVtYmVyKTsKIAogCWlmIChsb29rdXBfc3RhdHVzID09IEFFX0JBRF9DSEFSQUNURVIpIHsKKwogCQkvKiBUaGVyZSBpcyBhIG5vbi1hc2NpaSBjaGFyYWN0ZXIgaW4gdGhlIG5hbWUgKi8KIAotCQlhY3BpX29zX3ByaW50ZigiWzB4JTQuNFhdIChOT04tQVNDSUkpIiwKLQkJCSAgICAgICAqKEFDUElfQ0FTVF9QVFIodTMyLCBpbnRlcm5hbF9uYW1lKSkpOworCQlBQ1BJX01PVkVfMzJfVE9fMzIoJmJhZF9uYW1lLCBpbnRlcm5hbF9uYW1lKTsKKwkJYWNwaV9vc19wcmludGYoIlsweCU0LjRYXSAoTk9OLUFTQ0lJKSIsIGJhZF9uYW1lKTsKIAl9IGVsc2UgewogCQkvKiBDb252ZXJ0IHBhdGggdG8gZXh0ZXJuYWwgZm9ybWF0ICovCiAKQEAgLTEwMiw3ICsxMDQsNyBAQAogCQl9CiAKIAkJaWYgKG5hbWUpIHsKLQkJCUFDUElfTUVNX0ZSRUUobmFtZSk7CisJCQlBQ1BJX0ZSRUUobmFtZSk7CiAJCX0KIAl9CiAKQEAgLTEzNywxMSArMTM5LDEyIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlID0gcHJlZml4X25vZGU7CiAKLQlhY3BpX3V0X3JlcG9ydF9lcnJvcihtb2R1bGVfbmFtZSwgbGluZV9udW1iZXIpOworCWFjcGlfb3NfcHJpbnRmKCJBQ1BJIEVycm9yICglcy0lMDRkKTogIiwgbW9kdWxlX25hbWUsIGxpbmVfbnVtYmVyKTsKIAogCWlmIChwYXRoKSB7Ci0JCXN0YXR1cyA9IGFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aChwYXRoLCBwcmVmaXhfbm9kZSwKLQkJCQkJCSAgQUNQSV9OU19OT19VUFNFQVJDSCwgJm5vZGUpOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9uc19nZXRfbm9kZShwcmVmaXhfbm9kZSwgcGF0aCwgQUNQSV9OU19OT19VUFNFQVJDSCwKKwkJCQkgICAgICZub2RlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlhY3BpX29zX3ByaW50ZigiW0NvdWxkIG5vdCBnZXQgbm9kZSBieSBwYXRobmFtZV0iKTsKIAkJfQpAQCAtMTg1LDcgKzE4OCw3IEBACiAJCX0KIAogCQlhY3BpX29zX3ByaW50ZigiWyVzXSAoTm9kZSAlcCkiLCAoY2hhciAqKWJ1ZmZlci5wb2ludGVyLCBub2RlKTsKLQkJQUNQSV9NRU1fRlJFRShidWZmZXIucG9pbnRlcik7CisJCUFDUElfRlJFRShidWZmZXIucG9pbnRlcik7CiAJfQogfQogCkBAIC0yMzksNyArMjQyLDcgQEAKIAogYWNwaV9vYmplY3RfdHlwZSBhY3BpX25zX2dldF90eXBlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICogbm9kZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19nZXRfdHlwZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZ2V0X3R5cGUpOwogCiAJaWYgKCFub2RlKSB7CiAJCUFDUElfV0FSTklORygoQUVfSU5GTywgIk51bGwgTm9kZSBwYXJhbWV0ZXIiKSk7CkBAIC0yNjQsOSArMjY3LDEwIEBACiAKIHUzMiBhY3BpX25zX2xvY2FsKGFjcGlfb2JqZWN0X3R5cGUgdHlwZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19sb2NhbCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfbG9jYWwpOwogCiAJaWYgKCFhY3BpX3V0X3ZhbGlkX29iamVjdF90eXBlKHR5cGUpKSB7CisKIAkJLyogVHlwZSBjb2RlIG91dCBvZiByYW5nZSAgKi8KIAogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJJbnZhbGlkIE9iamVjdCBUeXBlICVYIiwgdHlwZSkpOwpAQCAtMzYzLDcgKzM2Nyw3IEBACiAJY2hhciAqcmVzdWx0ID0gTlVMTDsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19idWlsZF9pbnRlcm5hbF9uYW1lIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19idWlsZF9pbnRlcm5hbF9uYW1lKTsKIAogCS8qIFNldHVwIHRoZSBjb3JyZWN0IHByZWZpeGVzLCBjb3VudHMsIGFuZCBwb2ludGVycyAqLwogCkBAIC00MTEsNiArNDE1LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFDUElfTkFNRV9TSVpFOyBpKyspIHsKIAkJCWlmIChhY3BpX25zX3ZhbGlkX3BhdGhfc2VwYXJhdG9yKCpleHRlcm5hbF9uYW1lKSB8fAogCQkJICAgICgqZXh0ZXJuYWxfbmFtZSA9PSAwKSkgeworCiAJCQkJLyogUGFkIHRoZSBzZWdtZW50IHdpdGggdW5kZXJzY29yZShzKSBpZiBzZWdtZW50IGlzIHNob3J0ICovCiAKIAkJCQlyZXN1bHRbaV0gPSAnXyc7CkBAIC00NzMsNyArNDc4LDcgQEAKIAlzdHJ1Y3QgYWNwaV9uYW1lc3RyaW5nX2luZm8gaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc19pbnRlcm5hbGl6ZV9uYW1lIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19pbnRlcm5hbGl6ZV9uYW1lKTsKIAogCWlmICgoIWV4dGVybmFsX25hbWUpIHx8ICgqZXh0ZXJuYWxfbmFtZSA9PSAwKSB8fCAoIWNvbnZlcnRlZF9uYW1lKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC00ODYsNyArNDkxLDcgQEAKIAogCS8qIFdlIG5lZWQgYSBzZWdtZW50IHRvIHN0b3JlIHRoZSBpbnRlcm5hbCAgbmFtZSAqLwogCi0JaW50ZXJuYWxfbmFtZSA9IEFDUElfTUVNX0NBTExPQ0FURShpbmZvLmxlbmd0aCk7CisJaW50ZXJuYWxfbmFtZSA9IEFDUElfQUxMT0NBVEVfWkVST0VEKGluZm8ubGVuZ3RoKTsKIAlpZiAoIWludGVybmFsX25hbWUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQpAQCAtNDk2LDcgKzUwMSw3IEBACiAJaW5mby5pbnRlcm5hbF9uYW1lID0gaW50ZXJuYWxfbmFtZTsKIAlzdGF0dXMgPSBhY3BpX25zX2J1aWxkX2ludGVybmFsX25hbWUoJmluZm8pOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX01FTV9GUkVFKGludGVybmFsX25hbWUpOworCQlBQ1BJX0ZSRUUoaW50ZXJuYWxfbmFtZSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIApAQCAtNTMzLDcgKzUzOCw3IEBACiAJYWNwaV9uYXRpdmVfdWludCBpID0gMDsKIAlhY3BpX25hdGl2ZV91aW50IGogPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZXh0ZXJuYWxpemVfbmFtZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZXh0ZXJuYWxpemVfbmFtZSk7CiAKIAlpZiAoIWludGVybmFsX25hbWVfbGVuZ3RoIHx8ICFpbnRlcm5hbF9uYW1lIHx8ICFjb252ZXJ0ZWRfbmFtZSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC02MjgsNyArNjMzLDcgQEAKIAkvKgogCSAqIEJ1aWxkIGNvbnZlcnRlZF9uYW1lCiAJICovCi0JKmNvbnZlcnRlZF9uYW1lID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHJlcXVpcmVkX2xlbmd0aCk7CisJKmNvbnZlcnRlZF9uYW1lID0gQUNQSV9BTExPQ0FURV9aRVJPRUQocmVxdWlyZWRfbGVuZ3RoKTsKIAlpZiAoISgqY29udmVydGVkX25hbWUpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTY4MSwxMyArNjg2LDkgQEAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKIAkvKgotCSAqIFNpbXBsZSBpbXBsZW1lbnRhdGlvbi4KKwkgKiBTaW1wbGUgaW1wbGVtZW50YXRpb24KIAkgKi8KLQlpZiAoIWhhbmRsZSkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWlmIChoYW5kbGUgPT0gQUNQSV9ST09UX09CSkVDVCkgeworCWlmICgoIWhhbmRsZSkgfHwgKGhhbmRsZSA9PSBBQ1BJX1JPT1RfT0JKRUNUKSkgewogCQlyZXR1cm4gKGFjcGlfZ2JsX3Jvb3Rfbm9kZSk7CiAJfQogCkBAIC02OTcsNyArNjk4LDcgQEAKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAKLQlyZXR1cm4gKChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKWhhbmRsZSk7CisJcmV0dXJuIChBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlLCBoYW5kbGUpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc1Miw3ICs3NTMsNyBAQAogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfdGVybWluYXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShuc190ZXJtaW5hdGUpOwogCiAJLyoKIAkgKiAxKSBGcmVlIHRoZSBlbnRpcmUgbmFtZXNwYWNlIC0tIGFsbCBub2RlcyBhbmQgb2JqZWN0cwpAQCAtNzkyLDkgKzc5MywxMCBAQAogCiB1MzIgYWNwaV9uc19vcGVuc19zY29wZShhY3BpX29iamVjdF90eXBlIHR5cGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIoIm5zX29wZW5zX3Njb3BlIiwgYWNwaV91dF9nZXRfdHlwZV9uYW1lKHR5cGUpKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihuc19vcGVuc19zY29wZSwgYWNwaV91dF9nZXRfdHlwZV9uYW1lKHR5cGUpKTsKIAogCWlmICghYWNwaV91dF92YWxpZF9vYmplY3RfdHlwZSh0eXBlKSkgeworCiAJCS8qIHR5cGUgY29kZSBvdXQgb2YgcmFuZ2UgICovCiAKIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiSW52YWxpZCBPYmplY3QgVHlwZSAlWCIsIHR5cGUpKTsKQEAgLTgwNiwxMiArODA4LDEyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aAorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZ2V0X25vZGUKICAqCiAgKiBQQVJBTUVURVJTOiAgKlBhdGhuYW1lICAgLSBOYW1lIHRvIGJlIGZvdW5kLCBpbiBleHRlcm5hbCAoQVNMKSBmb3JtYXQuIFRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAoYmFja3NsYXNoKSBhbmQgXiAoY2FyYXQpIHByZWZpeGVzLCBhbmQgdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIChwZXJpb2QpIHRvIHNlcGFyYXRlIHNlZ21lbnRzIGFyZSBzdXBwb3J0ZWQuCi0gKiAgICAgICAgICAgICAgc3RhcnRfbm9kZSAgLSBSb290IG9mIHN1YnRyZWUgdG8gYmUgc2VhcmNoZWQsIG9yIE5TX0FMTCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgcHJlZml4X25vZGUgIC0gUm9vdCBvZiBzdWJ0cmVlIHRvIGJlIHNlYXJjaGVkLCBvciBOU19BTEwgZm9yIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCBvZiB0aGUgbmFtZSBzcGFjZS4gIElmIE5hbWUgaXMgZnVsbHkKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZCAoZmlyc3QgczggaXMgJ1wnKSwgdGhlIHBhc3NlZCB2YWx1ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgU2NvcGUgd2lsbCBub3QgYmUgYWNjZXNzZWQuCkBAIC04MjcsMjMgKzgyOSwyOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfbnNfZ2V0X25vZGVfYnlfcGF0aChjaGFyICpwYXRobmFtZSwKLQkJCSBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqc3RhcnRfbm9kZSwKLQkJCSB1MzIgZmxhZ3MsIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqcmV0dXJuX25vZGUpCithY3BpX25zX2dldF9ub2RlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwcmVmaXhfbm9kZSwKKwkJIGNoYXIgKnBhdGhuYW1lLAorCQkgdTMyIGZsYWdzLCBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldHVybl9ub2RlKQogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSBzY29wZV9pbmZvOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQljaGFyICppbnRlcm5hbF9wYXRoID0gTlVMTDsKKwljaGFyICppbnRlcm5hbF9wYXRoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoIm5zX2dldF9ub2RlX2J5X3BhdGgiLCBwYXRobmFtZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X25vZGUsIHBhdGhuYW1lKTsKIAotCWlmIChwYXRobmFtZSkgewotCQkvKiBDb252ZXJ0IHBhdGggdG8gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKi8KLQotCQlzdGF0dXMgPSBhY3BpX25zX2ludGVybmFsaXplX25hbWUocGF0aG5hbWUsICZpbnRlcm5hbF9wYXRoKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlpZiAoIXBhdGhuYW1lKSB7CisJCSpyZXR1cm5fbm9kZSA9IHByZWZpeF9ub2RlOworCQlpZiAoIXByZWZpeF9ub2RlKSB7CisJCQkqcmV0dXJuX25vZGUgPSBhY3BpX2dibF9yb290X25vZGU7CiAJCX0KKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwl9CisKKwkvKiBDb252ZXJ0IHBhdGggdG8gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKi8KKworCXN0YXR1cyA9IGFjcGlfbnNfaW50ZXJuYWxpemVfbmFtZShwYXRobmFtZSwgJmludGVybmFsX3BhdGgpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKIAkvKiBNdXN0IGxvY2sgbmFtZXNwYWNlIGR1cmluZyBsb29rdXAgKi8KQEAgLTg1NSwyNiArODYzLDIzIEBACiAKIAkvKiBTZXR1cCBsb29rdXAgc2NvcGUgKHNlYXJjaCBzdGFydGluZyBwb2ludCkgKi8KIAotCXNjb3BlX2luZm8uc2NvcGUubm9kZSA9IHN0YXJ0X25vZGU7CisJc2NvcGVfaW5mby5zY29wZS5ub2RlID0gcHJlZml4X25vZGU7CiAKIAkvKiBMb29rdXAgdGhlIG5hbWUgaW4gdGhlIG5hbWVzcGFjZSAqLwogCi0Jc3RhdHVzID0gYWNwaV9uc19sb29rdXAoJnNjb3BlX2luZm8sIGludGVybmFsX3BhdGgsCi0JCQkJQUNQSV9UWVBFX0FOWSwgQUNQSV9JTU9ERV9FWEVDVVRFLAotCQkJCShmbGFncyB8IEFDUElfTlNfRE9OVF9PUEVOX1NDT1BFKSwKLQkJCQlOVUxMLCByZXR1cm5fbm9kZSk7CisJc3RhdHVzID0gYWNwaV9uc19sb29rdXAoJnNjb3BlX2luZm8sIGludGVybmFsX3BhdGgsIEFDUElfVFlQRV9BTlksCisJCQkJQUNQSV9JTU9ERV9FWEVDVVRFLAorCQkJCShmbGFncyB8IEFDUElfTlNfRE9OVF9PUEVOX1NDT1BFKSwgTlVMTCwKKwkJCQlyZXR1cm5fbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIiVzLCAlc1xuIiwKLQkJCQkgIGludGVybmFsX3BhdGgsCi0JCQkJICBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOworCQkJCSAgcGF0aG5hbWUsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7CiAJfQogCiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAKICAgICAgIGNsZWFudXA6Ci0JaWYgKGludGVybmFsX3BhdGgpIHsKLQkJQUNQSV9NRU1fRlJFRShpbnRlcm5hbF9wYXRoKTsKLQl9CisJQUNQSV9GUkVFKGludGVybmFsX3BhdGgpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC05NjAsOSArOTY1LDEwIEBACiB7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnBhcmVudF9ub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgibnNfZmluZF9wYXJlbnRfbmFtZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZmluZF9wYXJlbnRfbmFtZSk7CiAKIAlpZiAoY2hpbGRfbm9kZSkgeworCiAJCS8qIFZhbGlkIGVudHJ5LiAgR2V0IHRoZSBwYXJlbnQgTm9kZSAqLwogCiAJCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUoY2hpbGRfbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zd2Fsay5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3dhbGsuYwppbmRleCBmY2FiMWU3Li5jOGY2YmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zd2Fsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN3YWxrLmMKQEAgLTc2LDYgKzc2LDcgQEAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKIAlpZiAoIWNoaWxkX25vZGUpIHsKKwogCQkvKiBJdCdzIHJlYWxseSB0aGUgcGFyZW50J3MgX3Njb3BlXyB0aGF0IHdlIHdhbnQgKi8KIAogCQlpZiAocGFyZW50X25vZGUtPmNoaWxkKSB7CkBAIC05Miw2ICs5Myw3IEBACiAJLyogSWYgYW55IHR5cGUgaXMgT0ssIHdlIGFyZSBkb25lICovCiAKIAlpZiAodHlwZSA9PSBBQ1BJX1RZUEVfQU5ZKSB7CisKIAkJLyogbmV4dF9ub2RlIGlzIE5VTEwgaWYgd2UgYXJlIGF0IHRoZSBlbmQtb2YtbGlzdCAqLwogCiAJCXJldHVybiAobmV4dF9ub2RlKTsKQEAgLTEwMCw2ICsxMDIsNyBAQAogCS8qIE11c3Qgc2VhcmNoIGZvciB0aGUgbm9kZSAtLSBidXQgd2l0aGluIHRoaXMgc2NvcGUgb25seSAqLwogCiAJd2hpbGUgKG5leHRfbm9kZSkgeworCiAJCS8qIElmIHR5cGUgbWF0Y2hlcywgd2UgYXJlIGRvbmUgKi8KIAogCQlpZiAobmV4dF9ub2RlLT50eXBlID09IHR5cGUpIHsKQEAgLTE2MSw3ICsxNjQsNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgY2hpbGRfdHlwZTsKIAl1MzIgbGV2ZWw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJuc193YWxrX25hbWVzcGFjZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfd2Fsa19uYW1lc3BhY2UpOwogCiAJLyogU3BlY2lhbCBjYXNlIGZvciB0aGUgbmFtZXNwYWNlIFJvb3QgTm9kZSAqLwogCkBAIC0xODIsNiArMTg1LDcgQEAKIAkgKiBidWJibGVkIHVwIHRvIChhbmQgcGFzc2VkKSB0aGUgb3JpZ2luYWwgcGFyZW50IGhhbmRsZSAoc3RhcnRfZW50cnkpCiAJICovCiAJd2hpbGUgKGxldmVsID4gMCkgeworCiAJCS8qIEdldCB0aGUgbmV4dCBub2RlIGluIHRoaXMgc2NvcGUuICBOdWxsIGlmIG5vdCBmb3VuZCAqLwogCiAJCXN0YXR1cyA9IEFFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmZXZhbC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmZXZhbC5jCmluZGV4IGE5NWY2MzYuLjZkOWJkNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmZXZhbC5jCkBAIC00Miw4ICs0Miw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogI2luY2x1ZGUgPGFjcGkvYWNpbnRlcnAuaD4KQEAgLTUxLDYgKzQ5LDcgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnN4ZmV2YWwiKQogCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkCkBAIC03MSwxOCArNzAsMTcgQEAKICAqICAgICAgICAgICAgICBiZSB2YWxpZCAobm9uLW51bGwpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogYWNwaV9zdGF0dXMKIGFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkKGFjcGlfaGFuZGxlIGhhbmRsZSwKIAkJCSAgIGFjcGlfc3RyaW5nIHBhdGhuYW1lLAotCQkJICAgc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKmV4dGVybmFsX3BhcmFtcywKLQkJCSAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0dXJuX2J1ZmZlciwKKwkJCSAgIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICogZXh0ZXJuYWxfcGFyYW1zLAorCQkJICAgc3RydWN0IGFjcGlfYnVmZmVyICogcmV0dXJuX2J1ZmZlciwKIAkJCSAgIGFjcGlfb2JqZWN0X3R5cGUgcmV0dXJuX3R5cGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU4IG11c3RfZnJlZSA9IEZBTFNFOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkKTsKIAogCS8qIFJldHVybiBidWZmZXIgbXVzdCBiZSB2YWxpZCAqLwogCkBAIC0xMTAsNiArMTA4LDcgQEAKIAl9CiAKIAlpZiAocmV0dXJuX2J1ZmZlci0+bGVuZ3RoID09IDApIHsKKwogCQkvKiBFcnJvciBiZWNhdXNlIGNhbGxlciBzcGVjaWZpY2FsbHkgYXNrZWQgZm9yIGEgcmV0dXJuIHZhbHVlICovCiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk5vIHJldHVybiB2YWx1ZSIpKTsKQEAgLTEzMSw2ICsxMzAsNyBAQAogCQkgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKHJldHVybl90eXBlKSkpOwogCiAJaWYgKG11c3RfZnJlZSkgeworCiAJCS8qIENhbGxlciB1c2VkIEFDUElfQUxMT0NBVEVfQlVGRkVSLCBmcmVlIHRoZSByZXR1cm4gYnVmZmVyICovCiAKIAkJYWNwaV9vc19mcmVlKHJldHVybl9idWZmZXItPnBvaW50ZXIpOwpAQCAtMTQwLDYgKzE0MCw4IEBACiAJcmV0dXJuX2J1ZmZlci0+bGVuZ3RoID0gMDsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfVFlQRSk7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZCkKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjEsNyArMTYzLDYgQEAKICAqICAgICAgICAgICAgICBiZSB2YWxpZCAobm9uLW51bGwpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFjcGlfaGFuZGxlIGhhbmRsZSwKIAkJICAgICBhY3BpX3N0cmluZyBwYXRobmFtZSwKQEAgLTE3MCw1MSArMTcxLDYxIEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfc3RhdHVzIHN0YXR1czI7Ci0Jc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gaW5mbzsKKwlzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvOwogCWFjcGlfc2l6ZSBidWZmZXJfc3BhY2VfbmVlZGVkOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9ldmFsdWF0ZV9vYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KTsKIAotCWluZm8ubm9kZSA9IGhhbmRsZTsKLQlpbmZvLnBhcmFtZXRlcnMgPSBOVUxMOwotCWluZm8ucmV0dXJuX29iamVjdCA9IE5VTEw7Ci0JaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZXZhbHVhdGlvbiBpbmZvcm1hdGlvbiBibG9jayAqLworCisJaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJaWYgKCFpbmZvKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCX0KKworCWluZm8tPnBhdGhuYW1lID0gcGF0aG5hbWU7CisJaW5mby0+cGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0FSR1M7CisKKwkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgZGV2aWNlIGhhbmRsZSAqLworCisJaW5mby0+cHJlZml4X25vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShoYW5kbGUpOworCWlmICghaW5mby0+cHJlZml4X25vZGUpIHsKKwkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJZ290byBjbGVhbnVwOworCX0KIAogCS8qCi0JICogSWYgdGhlcmUgYXJlIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBvYmplY3QKLQkgKiAod2hpY2ggbXVzdCBiZSBhIGNvbnRyb2wgbWV0aG9kKSwgdGhlIGV4dGVybmFsIG9iamVjdHMKLQkgKiBtdXN0IGJlIGNvbnZlcnRlZCB0byBpbnRlcm5hbCBvYmplY3RzCisJICogSWYgdGhlcmUgYXJlIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIGEgY29udHJvbCBtZXRob2QsIHRoZSBleHRlcm5hbAorCSAqIG9iamVjdHMgbXVzdCBhbGwgYmUgY29udmVydGVkIHRvIGludGVybmFsIG9iamVjdHMKIAkgKi8KIAlpZiAoZXh0ZXJuYWxfcGFyYW1zICYmIGV4dGVybmFsX3BhcmFtcy0+Y291bnQpIHsKIAkJLyoKIAkJICogQWxsb2NhdGUgYSBuZXcgcGFyYW1ldGVyIGJsb2NrIGZvciB0aGUgaW50ZXJuYWwgb2JqZWN0cwogCQkgKiBBZGQgMSB0byBjb3VudCB0byBhbGxvdyBmb3IgbnVsbCB0ZXJtaW5hdGVkIGludGVybmFsIGxpc3QKIAkJICovCi0JCWluZm8ucGFyYW1ldGVycyA9IEFDUElfTUVNX0NBTExPQ0FURSgoKGFjcGlfc2l6ZSkKLQkJCQkJCSAgICAgIGV4dGVybmFsX3BhcmFtcy0+Y291bnQgKwotCQkJCQkJICAgICAgMSkgKiBzaXplb2Yodm9pZCAqKSk7Ci0JCWlmICghaW5mby5wYXJhbWV0ZXJzKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwkJaW5mby0+cGFyYW1ldGVycyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKCgoYWNwaV9zaXplKQorCQkJCQkJCSBleHRlcm5hbF9wYXJhbXMtPgorCQkJCQkJCSBjb3VudCArCisJCQkJCQkJIDEpICogc2l6ZW9mKHZvaWQgKikpOworCQlpZiAoIWluZm8tPnBhcmFtZXRlcnMpIHsKKwkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJCWdvdG8gY2xlYW51cDsKIAkJfQogCi0JCS8qCi0JCSAqIENvbnZlcnQgZWFjaCBleHRlcm5hbCBvYmplY3QgaW4gdGhlIGxpc3QgdG8gYW4KLQkJICogaW50ZXJuYWwgb2JqZWN0Ci0JCSAqLworCQkvKiBDb252ZXJ0IGVhY2ggZXh0ZXJuYWwgb2JqZWN0IGluIHRoZSBsaXN0IHRvIGFuIGludGVybmFsIG9iamVjdCAqLworCiAJCWZvciAoaSA9IDA7IGkgPCBleHRlcm5hbF9wYXJhbXMtPmNvdW50OyBpKyspIHsKIAkJCXN0YXR1cyA9CiAJCQkgICAgYWNwaV91dF9jb3B5X2VvYmplY3RfdG9faW9iamVjdCgmZXh0ZXJuYWxfcGFyYW1zLT4KIAkJCQkJCQkgICAgcG9pbnRlcltpXSwKLQkJCQkJCQkgICAgJmluZm8uCisJCQkJCQkJICAgICZpbmZvLT4KIAkJCQkJCQkgICAgcGFyYW1ldGVyc1tpXSk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlhY3BpX3V0X2RlbGV0ZV9pbnRlcm5hbF9vYmplY3RfbGlzdChpbmZvLgotCQkJCQkJCQkgICAgcGFyYW1ldGVycyk7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCQkJZ290byBjbGVhbnVwOwogCQkJfQogCQl9Ci0JCWluZm8ucGFyYW1ldGVyc1tleHRlcm5hbF9wYXJhbXMtPmNvdW50XSA9IE5VTEw7CisJCWluZm8tPnBhcmFtZXRlcnNbZXh0ZXJuYWxfcGFyYW1zLT5jb3VudF0gPSBOVUxMOwogCX0KIAogCS8qCkBAIC0yMjQsNDMgKzIzNSwzMSBAQAogCSAqIDMpIFZhbGlkIGhhbmRsZQogCSAqLwogCWlmICgocGF0aG5hbWUpICYmIChhY3BpX25zX3ZhbGlkX3Jvb3RfcHJlZml4KHBhdGhuYW1lWzBdKSkpIHsKLQkJLyoKLQkJICogIFRoZSBwYXRoIGlzIGZ1bGx5IHF1YWxpZmllZCwganVzdCBldmFsdWF0ZSBieSBuYW1lCi0JCSAqLwotCQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlX2J5X25hbWUocGF0aG5hbWUsICZpbmZvKTsKKworCQkvKiBUaGUgcGF0aCBpcyBmdWxseSBxdWFsaWZpZWQsIGp1c3QgZXZhbHVhdGUgYnkgbmFtZSAqLworCisJCWluZm8tPnByZWZpeF9ub2RlID0gTlVMTDsKKwkJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKIAl9IGVsc2UgaWYgKCFoYW5kbGUpIHsKIAkJLyoKLQkJICogQSBoYW5kbGUgaXMgb3B0aW9uYWwgaWZmIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lCi0JCSAqIGlzIHNwZWNpZmllZC4gIFNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBmdWxseQotCQkgKiBxdWFsaWZpZWQgbmFtZXMgYWJvdmUsIHRoaXMgaXMgYW4gZXJyb3IKKwkJICogQSBoYW5kbGUgaXMgb3B0aW9uYWwgaWZmIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIGlzIHNwZWNpZmllZC4KKwkJICogU2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyBhYm92ZSwgdGhpcyBpcworCQkgKiBhbiBlcnJvcgogCQkgKi8KIAkJaWYgKCFwYXRobmFtZSkgewotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkJvdGggSGFuZGxlIGFuZCBQYXRobmFtZSBhcmUgTlVMTCIpKTsKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCQkJICAiQm90aCBIYW5kbGUgYW5kIFBhdGhuYW1lIGFyZSBOVUxMIikpOwogCQl9IGVsc2UgewotCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkhhbmRsZSBpcyBOVUxMIGFuZCBQYXRobmFtZSBpcyByZWxhdGl2ZSIpKTsKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCQkJICAiTnVsbCBIYW5kbGUgd2l0aCByZWxhdGl2ZSBwYXRobmFtZSBbJXNdIiwKKwkJCQkJICBwYXRobmFtZSkpOwogCQl9CiAKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBXZSBnZXQgaGVyZSBpZiB3ZSBoYXZlIGEgaGFuZGxlIC0tIGFuZCBpZiB3ZSBoYXZlIGEKLQkJICogcGF0aG5hbWUgaXQgaXMgcmVsYXRpdmUuICBUaGUgaGFuZGxlIHdpbGwgYmUgdmFsaWRhdGVkCi0JCSAqIGluIHRoZSBsb3dlciBwcm9jZWR1cmVzCi0JCSAqLwotCQlpZiAoIXBhdGhuYW1lKSB7Ci0JCQkvKgotCQkJICogVGhlIG51bGwgcGF0aG5hbWUgY2FzZSBtZWFucyB0aGUgaGFuZGxlIGlzIGZvcgotCQkJICogdGhlIGFjdHVhbCBvYmplY3QgdG8gYmUgZXZhbHVhdGVkCi0JCQkgKi8KLQkJCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKCZpbmZvKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBCb3RoIGEgSGFuZGxlIGFuZCBhIHJlbGF0aXZlIFBhdGhuYW1lCi0JCQkgKi8KLQkJCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfcmVsYXRpdmUocGF0aG5hbWUsICZpbmZvKTsKLQkJfQorCQkvKiBXZSBoYXZlIGEgbmFtZXNwYWNlIGEgbm9kZSBhbmQgYSBwb3NzaWJsZSByZWxhdGl2ZSBwYXRoICovCisKKwkJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKIAl9CiAKIAkvKgpAQCAtMjY4LDEwICsyNjcsMTAgQEAKIAkgKiBjb3B5IHRoZSByZXR1cm4gdmFsdWUgdG8gYW4gZXh0ZXJuYWwgb2JqZWN0LgogCSAqLwogCWlmIChyZXR1cm5fYnVmZmVyKSB7Ci0JCWlmICghaW5mby5yZXR1cm5fb2JqZWN0KSB7CisJCWlmICghaW5mby0+cmV0dXJuX29iamVjdCkgewogCQkJcmV0dXJuX2J1ZmZlci0+bGVuZ3RoID0gMDsKIAkJfSBlbHNlIHsKLQkJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUoaW5mby5yZXR1cm5fb2JqZWN0KSA9PQorCQkJaWYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShpbmZvLT5yZXR1cm5fb2JqZWN0KSA9PQogCQkJICAgIEFDUElfREVTQ19UWVBFX05BTUVEKSB7CiAJCQkJLyoKIAkJCQkgKiBJZiB3ZSByZWNlaXZlZCBhIE5TIE5vZGUgYXMgYSByZXR1cm4gb2JqZWN0LCB0aGlzIG1lYW5zIHRoYXQKQEAgLTI4MiwxOSArMjgxLDE5IEBACiAJCQkJICogc3VwcG9ydCBmb3IgdmFyaW91cyB0eXBlcyBhdCBhIGxhdGVyIGRhdGUgaWYgbmVjZXNzYXJ5LgogCQkJCSAqLwogCQkJCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCQkJaW5mby5yZXR1cm5fb2JqZWN0ID0gTlVMTDsJLyogTm8gbmVlZCB0byBkZWxldGUgYSBOUyBOb2RlICovCisJCQkJaW5mby0+cmV0dXJuX29iamVjdCA9IE5VTEw7CS8qIE5vIG5lZWQgdG8gZGVsZXRlIGEgTlMgTm9kZSAqLwogCQkJCXJldHVybl9idWZmZXItPmxlbmd0aCA9IDA7CiAJCQl9CiAKIAkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJCS8qCi0JCQkJICogRmluZCBvdXQgaG93IGxhcmdlIGEgYnVmZmVyIGlzIG5lZWRlZAotCQkJCSAqIHRvIGNvbnRhaW4gdGhlIHJldHVybmVkIG9iamVjdAotCQkJCSAqLworCisJCQkJLyogR2V0IHRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KKwogCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF9zaXplKGluZm8ucmV0dXJuX29iamVjdCwKKwkJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3NpemUoaW5mby0+cmV0dXJuX29iamVjdCwKIAkJCQkJCQkgICAgJmJ1ZmZlcl9zcGFjZV9uZWVkZWQpOwogCQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCiAJCQkJCS8qIFZhbGlkYXRlL0FsbG9jYXRlL0NsZWFyIGNhbGxlciBidWZmZXIgKi8KIAogCQkJCQlzdGF0dXMgPQpAQCAtMzAzLDcgKzMwMiw4IEBACiAJCQkJCSAgICAgYnVmZmVyX3NwYWNlX25lZWRlZCk7CiAJCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCQkJLyoKLQkJCQkJCSAqIENhbGxlcidzIGJ1ZmZlciBpcyB0b28gc21hbGwgb3IgYSBuZXcgb25lIGNhbid0IGJlIGFsbG9jYXRlZAorCQkJCQkJICogQ2FsbGVyJ3MgYnVmZmVyIGlzIHRvbyBzbWFsbCBvciBhIG5ldyBvbmUgY2FuJ3QKKwkJCQkJCSAqIGJlIGFsbG9jYXRlZAogCQkJCQkJICovCiAJCQkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJCQkJCSAgIk5lZWRlZCBidWZmZXIgc2l6ZSAlWCwgJXNcbiIsCkBAIC0zMTIsMTIgKzMxMiwxMSBAQAogCQkJCQkJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbgogCQkJCQkJCQkgIChzdGF0dXMpKSk7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKgotCQkJCQkJICogIFdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgb2JqZWN0LCBidWlsZCBpdAotCQkJCQkJICovCisJCQkJCQkvKiBXZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG9iamVjdCwgYnVpbGQgaXQgKi8KKwogCQkJCQkJc3RhdHVzID0KIAkJCQkJCSAgICBhY3BpX3V0X2NvcHlfaW9iamVjdF90b19lb2JqZWN0Ci0JCQkJCQkgICAgKGluZm8ucmV0dXJuX29iamVjdCwKKwkJCQkJCSAgICAoaW5mby0+cmV0dXJuX29iamVjdCwKIAkJCQkJCSAgICAgcmV0dXJuX2J1ZmZlcik7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMjUsMzUgKzMyNCwzNyBAQAogCQl9CiAJfQogCi0JaWYgKGluZm8ucmV0dXJuX29iamVjdCkgeworCWlmIChpbmZvLT5yZXR1cm5fb2JqZWN0KSB7CiAJCS8qCi0JCSAqIERlbGV0ZSB0aGUgaW50ZXJuYWwgcmV0dXJuIG9iamVjdC4gIE5PVEU6IEludGVycHJldGVyCi0JCSAqIG11c3QgYmUgbG9ja2VkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uLgorCQkgKiBEZWxldGUgdGhlIGludGVybmFsIHJldHVybiBvYmplY3QuIE5PVEU6IEludGVycHJldGVyIG11c3QgYmUKKwkJICogbG9ja2VkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uLgogCQkgKi8KIAkJc3RhdHVzMiA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMyKSkgewotCQkJLyoKLQkJCSAqIERlbGV0ZSB0aGUgaW50ZXJuYWwgcmV0dXJuIG9iamVjdC4gKE9yIGF0IGxlYXN0Ci0JCQkgKiBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBieSBvbmUpCi0JCQkgKi8KLQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLnJldHVybl9vYmplY3QpOworCisJCQkvKiBSZW1vdmUgb25lIHJlZmVyZW5jZSBvbiB0aGUgcmV0dXJuIG9iamVjdCAoc2hvdWxkIGRlbGV0ZSBpdCkgKi8KKworCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8tPnJldHVybl9vYmplY3QpOwogCQkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIEZyZWUgdGhlIGlucHV0IHBhcmFtZXRlciBsaXN0IChpZiB3ZSBjcmVhdGVkIG9uZSksCi0JICovCi0JaWYgKGluZm8ucGFyYW1ldGVycykgeworICAgICAgY2xlYW51cDoKKworCS8qIEZyZWUgdGhlIGlucHV0IHBhcmFtZXRlciBsaXN0IChpZiB3ZSBjcmVhdGVkIG9uZSkgKi8KKworCWlmIChpbmZvLT5wYXJhbWV0ZXJzKSB7CisKIAkJLyogRnJlZSB0aGUgYWxsb2NhdGVkIHBhcmFtZXRlciBibG9jayAqLwogCi0JCWFjcGlfdXRfZGVsZXRlX2ludGVybmFsX29iamVjdF9saXN0KGluZm8ucGFyYW1ldGVycyk7CisJCWFjcGlfdXRfZGVsZXRlX2ludGVybmFsX29iamVjdF9saXN0KGluZm8tPnBhcmFtZXRlcnMpOwogCX0KIAorCUFDUElfRlJFRShpbmZvKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2V2YWx1YXRlX29iamVjdCk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9ldmFsdWF0ZV9vYmplY3QpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzg0LDcgKzM4NSw2IEBACiAgKiAgICAgICAgICAgICAgZnVuY3Rpb24sIGV0Yy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV93YWxrX25hbWVzcGFjZShhY3BpX29iamVjdF90eXBlIHR5cGUsCiAJCSAgICBhY3BpX2hhbmRsZSBzdGFydF9vYmplY3QsCkBAIC0zOTQsNyArMzk0LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3dhbGtfbmFtZXNwYWNlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3dhbGtfbmFtZXNwYWNlKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTQyMSw3ICs0MjEsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfd2Fsa19uYW1lc3BhY2UpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfd2Fsa19uYW1lc3BhY2UpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDM2LDcgKzQzNiw2IEBACiAgKiAgICAgICAgICAgICAgb24gdGhhdC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfbnNfZ2V0X2RldmljZV9jYWxsYmFjayhhY3BpX2hhbmRsZSBvYmpfaGFuZGxlLAogCQkJICAgIHUzMiBuZXN0aW5nX2xldmVsLApAQCAtNDczLDYgKzQ3Miw3IEBACiAJfQogCiAJaWYgKCEoZmxhZ3MgJiBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCkpIHsKKwogCQkvKiBEb24ndCBleGFtaW5lIGNoaWxkcmVuIG9mIHRoZSBkZXZpY2UgaWYgbm90IHByZXNlbnQgKi8KIAogCQlyZXR1cm4gKEFFX0NUUkxfREVQVEgpOwpAQCAtNDg5LDYgKzQ4OSw3IEBACiAJCX0KIAogCQlpZiAoQUNQSV9TVFJOQ01QKGhpZC52YWx1ZSwgaW5mby0+aGlkLCBzaXplb2YoaGlkLnZhbHVlKSkgIT0gMCkgeworCiAJCQkvKiBHZXQgdGhlIGxpc3Qgb2YgQ29tcGF0aWJsZSBJRHMgKi8KIAogCQkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX0NJRChub2RlLCAmY2lkKTsKQEAgLTUwNSwxMSArNTA2LDExIEBACiAJCQkJCQkgc2l6ZW9mKHN0cnVjdAogCQkJCQkJCWFjcGlfY29tcGF0aWJsZV9pZCkpICE9CiAJCQkJICAgIDApIHsKLQkJCQkJQUNQSV9NRU1fRlJFRShjaWQpOworCQkJCQlBQ1BJX0ZSRUUoY2lkKTsKIAkJCQkJcmV0dXJuIChBRV9PSyk7CiAJCQkJfQogCQkJfQotCQkJQUNQSV9NRU1fRlJFRShjaWQpOworCQkJQUNQSV9GUkVFKGNpZCk7CiAJCX0KIAl9CiAKQEAgLTU1MSw3ICs1NTIsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9nZXRfZGV2aWNlc19pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2dldF9kZXZpY2VzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9kZXZpY2VzKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTU2Myw5ICs1NjQsOSBAQAogCSAqIFdlJ3JlIGdvaW5nIHRvIGNhbGwgdGhlaXIgY2FsbGJhY2sgZnJvbSBPVVIgY2FsbGJhY2ssIHNvIHdlIG5lZWQKIAkgKiB0byBrbm93IHdoYXQgaXQgaXMsIGFuZCB0aGVpciBjb250ZXh0IHBhcmFtZXRlci4KIAkgKi8KKwlpbmZvLmhpZCA9IEhJRDsKIAlpbmZvLmNvbnRleHQgPSBjb250ZXh0OwogCWluZm8udXNlcl9mdW5jdGlvbiA9IHVzZXJfZnVuY3Rpb247Ci0JaW5mby5oaWQgPSBISUQ7CiAKIAkvKgogCSAqIExvY2sgdGhlIG5hbWVzcGFjZSBhcm91bmQgdGhlIHdhbGsuCkBAIC01NzgsOSArNTc5LDggQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQlBQ1BJX1JPT1RfT0JKRUNULCBBQ1BJX1VJTlQzMl9NQVgsCi0JCQkJCUFDUElfTlNfV0FMS19VTkxPQ0ssCisJc3RhdHVzID0gYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJCQlBQ1BJX1VJTlQzMl9NQVgsIEFDUElfTlNfV0FMS19VTkxPQ0ssCiAJCQkJCWFjcGlfbnNfZ2V0X2RldmljZV9jYWxsYmFjaywgJmluZm8sCiAJCQkJCXJldHVybl92YWx1ZSk7CiAKQEAgLTU4OCw3ICs1ODgsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2RldmljZXMpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2RldmljZXMpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNjAzLDcgKzYwMyw2IEBACiAgKiBERVNDUklQVElPTjogQXR0YWNoIGFyYml0cmFyeSBkYXRhIGFuZCBoYW5kbGVyIHRvIGEgbmFtZXNwYWNlIG5vZGUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfYXR0YWNoX2RhdGEoYWNwaV9oYW5kbGUgb2JqX2hhbmRsZSwKIAkJIGFjcGlfb2JqZWN0X2hhbmRsZXIgaGFuZGxlciwgdm9pZCAqZGF0YSkKQEAgLTYzNyw2ICs2MzYsOCBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfYXR0YWNoX2RhdGEpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZGV0YWNoX2RhdGEKQEAgLTY0OSw3ICs2NTAsNiBAQAogICogREVTQ1JJUFRJT046IFJlbW92ZSBkYXRhIHRoYXQgd2FzIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYSBub2RlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2RldGFjaF9kYXRhKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsIGFjcGlfb2JqZWN0X2hhbmRsZXIgaGFuZGxlcikKIHsKQEAgLTY4Miw2ICs2ODIsOCBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZGV0YWNoX2RhdGEpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2RhdGEKQEAgLTY5NSw3ICs2OTcsNiBAQAogICogREVTQ1JJUFRJT046IFJldHJpZXZlIGRhdGEgdGhhdCB3YXMgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhIG5hbWVzcGFjZSBub2RlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF9kYXRhKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsIGFjcGlfb2JqZWN0X2hhbmRsZXIgaGFuZGxlciwgdm9pZCAqKmRhdGEpCiB7CkBAIC03MjcsMyArNzI4LDUgQEAKIAkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9kYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmbmFtZS5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmbmFtZS5jCmluZGV4IDhjZDg2NzUuLjk3ODIxM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm5hbWUuYworKysgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZuYW1lLmMKQEAgLTQyLDggKzQyLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAKQEAgLTExNCw5ICsxMTIsOCBAQAogCS8qCiAJICogIEZpbmQgdGhlIE5vZGUgYW5kIGNvbnZlcnQgdG8gYSBoYW5kbGUKIAkgKi8KLQlzdGF0dXMgPQotCSAgICBhY3BpX25zX2dldF9ub2RlX2J5X3BhdGgocGF0aG5hbWUsIHByZWZpeF9ub2RlLCBBQ1BJX05TX05PX1VQU0VBUkNILAotCQkJCSAgICAgJm5vZGUpOworCXN0YXR1cyA9IGFjcGlfbnNfZ2V0X25vZGUocHJlZml4X25vZGUsIHBhdGhuYW1lLCBBQ1BJX05TX05PX1VQU0VBUkNILAorCQkJCSAgJm5vZGUpOwogCiAJKnJldF9oYW5kbGUgPSBOVUxMOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtMTI2LDcgKzEyMyw3IEBACiAJcmV0dXJuIChzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2hhbmRsZSk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfaGFuZGxlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQzLDcgKzE0MCw2IEBACiAgKiAgICAgICAgICAgICAgY29tcGxlbWVudGFyeSBmdW5jdGlvbnMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X25hbWUoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbmFtZV90eXBlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKiBidWZmZXIpCiB7CkBAIC0xNjIsNiArMTU4LDcgQEAKIAl9CiAKIAlpZiAobmFtZV90eXBlID09IEFDUElfRlVMTF9QQVRITkFNRSkgeworCiAJCS8qIEdldCB0aGUgZnVsbCBwYXRobmFtZSAoRnJvbSB0aGUgbmFtZXNwYWNlIHJvb3QpICovCiAKIAkJc3RhdHVzID0gYWNwaV9uc19oYW5kbGVfdG9fcGF0aG5hbWUoaGFuZGxlLCBidWZmZXIpOwpAQCAtMjAzLDcgKzIwMCw3IEBACiAJcmV0dXJuIChzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X25hbWUpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X25hbWUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMTksNyArMjE2LDYgQEAKICAqICAgICAgICAgICAgICBjb250cm9sIG1ldGhvZHMgKFN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgYSBkZXZpY2UuKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF9vYmplY3RfaW5mbyhhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqIGJ1ZmZlcikKIHsKQEAgLTI0MSw3ICsyMzcsNyBAQAogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCi0JaW5mbyA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlX2luZm8pKTsKKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZV9pbmZvKSk7CiAJaWYgKCFpbmZvKSB7CiAJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC0zNDUsMTEgKzM0MSwxMSBAQAogCX0KIAogICAgICAgY2xlYW51cDoKLQlBQ1BJX01FTV9GUkVFKGluZm8pOworCUFDUElfRlJFRShpbmZvKTsKIAlpZiAoY2lkX2xpc3QpIHsKLQkJQUNQSV9NRU1fRlJFRShjaWRfbGlzdCk7CisJCUFDUElfRlJFRShjaWRfbGlzdCk7CiAJfQogCXJldHVybiAoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9vYmplY3RfaW5mbyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfb2JqZWN0X2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZvYmouYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm9iai5jCmluZGV4IGEwMzMyNTkuLmExNjNlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm9iai5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm9iai5jCkBAIC00Miw4ICs0Miw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCkBAIC0xMDEsNyArOTksNyBAQAogCXJldHVybiAoc3RhdHVzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF90eXBlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF90eXBlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTExNiw3ICsxMTQsNiBAQAogICogICAgICAgICAgICAgIEhhbmRsZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2dldF9wYXJlbnQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqIHJldF9oYW5kbGUpCiB7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CkBAIC0xNjIsNyArMTU5LDcgQEAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfcGFyZW50KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9wYXJlbnQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTgxLDcgKzE3OCw2IEBACiAgKiAgICAgICAgICAgICAgU2NvcGUgaXMgcmV0dXJuZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X25leHRfb2JqZWN0KGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwKIAkJICAgICBhY3BpX2hhbmRsZSBwYXJlbnQsCkBAIC0yMDYsNiArMjAyLDcgQEAKIAkvKiBJZiBudWxsIGhhbmRsZSwgdXNlIHRoZSBwYXJlbnQgKi8KIAogCWlmICghY2hpbGQpIHsKKwogCQkvKiBTdGFydCBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3BlY2lmaWVkIHNjb3BlICovCiAKIAkJcGFyZW50X25vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShwYXJlbnQpOwpAQCAtMjQyLDQgKzIzOSw0IEBACiAJcmV0dXJuIChzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X25leHRfb2JqZWN0KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9uZXh0X29iamVjdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCAxM2I1ZmQ1Li4xYmI1NThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgpAQCAtNjAwLDIzICs2MDEsNDEgQEAKIAlyZXR1cm5fVk9JRDsKIH0KIAotYWNwaV9zdGF0dXMKLWFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbih1MzIgcHJpb3JpdHksCitzdGF0aWMgaW50IGFjcGlfb3NfZXhlY3V0ZV90aHJlYWQodm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IChzdHJ1Y3QgYWNwaV9vc19kcGMgKiljb250ZXh0OworCWlmIChkcGMpIHsKKwkJZHBjLT5mdW5jdGlvbihkcGMtPmNvbnRleHQpOworCQlrZnJlZShkcGMpOworCX0KKwlkb19leGl0KDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX29zX2V4ZWN1dGUKKyAqCisgKiBQQVJBTUVURVJTOiAgVHlwZSAgICAgICAgICAgICAgIC0gVHlwZSBvZiB0aGUgY2FsbGJhY2sKKyAqICAgICAgICAgICAgICBGdW5jdGlvbiAgICAgICAgICAgLSBGdW5jdGlvbiB0byBiZSBleGVjdXRlZAorICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAgICAtIEZ1bmN0aW9uIHBhcmFtZXRlcnMKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IERlcGVuZGluZyBvbiB0eXBlLCBlaXRoZXIgcXVldWVzIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBleGVjdXRpb24gb3IKKyAqICAgICAgICAgICAgICBpbW1lZGlhdGVseSBleGVjdXRlcyBmdW5jdGlvbiBvbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX29zX2V4ZWN1dGUoYWNwaV9leGVjdXRlX3R5cGUgdHlwZSwKIAkJCSAgICBhY3BpX29zZF9leGVjX2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX29zX2RwYyAqZHBjOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqdGFzazsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoIm9zX3F1ZXVlX2Zvcl9leGVjdXRpb24iKTsKLQotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIlNjaGVkdWxpbmcgZnVuY3Rpb24gWyVwKCVwKV0gZm9yIGRlZmVycmVkIGV4ZWN1dGlvbi5cbiIsCi0JCQkgIGZ1bmN0aW9uLCBjb250ZXh0KSk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCiAJaWYgKCFmdW5jdGlvbikKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwogCS8qCiAJICogQWxsb2NhdGUvaW5pdGlhbGl6ZSBEUEMgc3RydWN0dXJlLiAgTm90ZSB0aGF0IHRoaXMgbWVtb3J5IHdpbGwgYmUKIAkgKiBmcmVlZCBieSB0aGUgY2FsbGVlLiAgVGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB0cV9zdHJ1Y3QgbGlzdCAgaW4gYQpAQCAtNjI3LDMwICs2NDYsMzcgQEAKIAkgKiBXZSBjYW4gc2F2ZSB0aW1lIGFuZCBjb2RlIGJ5IGFsbG9jYXRpbmcgdGhlIERQQyBhbmQgdHFfc3RydWN0cwogCSAqIGZyb20gdGhlIHNhbWUgbWVtb3J5LgogCSAqLwotCi0JZHBjID0KLQkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb3NfZHBjKSArIHNpemVvZihzdHJ1Y3Qgd29ya19zdHJ1Y3QpLAotCQkgICAgR0ZQX0FUT01JQyk7CisJaWYgKHR5cGUgPT0gT1NMX05PVElGWV9IQU5ETEVSKSB7CisJCWRwYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX29zX2RwYyksIEdGUF9LRVJORUwpOworCX0gZWxzZSB7CisJCWRwYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX29zX2RwYykgKworCQkJCXNpemVvZihzdHJ1Y3Qgd29ya19zdHJ1Y3QpLCBHRlBfQVRPTUlDKTsKKwl9CiAJaWYgKCFkcGMpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwotCisJCXJldHVybiBBRV9OT19NRU1PUlk7CiAJZHBjLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCWRwYy0+Y29udGV4dCA9IGNvbnRleHQ7CiAKLQl0YXNrID0gKHZvaWQgKikoZHBjICsgMSk7Ci0JSU5JVF9XT1JLKHRhc2ssIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZCwgKHZvaWQgKilkcGMpOwotCi0JaWYgKCFxdWV1ZV93b3JrKGthY3BpZF93cSwgdGFzaykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJDYWxsIHRvIHF1ZXVlX3dvcmsoKSBmYWlsZWQuXG4iKSk7Ci0JCWtmcmVlKGRwYyk7Ci0JCXN0YXR1cyA9IEFFX0VSUk9SOworCWlmICh0eXBlID09IE9TTF9OT1RJRllfSEFORExFUikgeworCQlwID0ga3RocmVhZF9jcmVhdGUoYWNwaV9vc19leGVjdXRlX3RocmVhZCwgZHBjLCAia2FjcGlkX25vdGlmeSIpOworCQlpZiAoIUlTX0VSUihwKSkgeworCQkJd2FrZV91cF9wcm9jZXNzKHApOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQkJa2ZyZWUoZHBjKTsKKwkJfQorCX0gZWxzZSB7CisJCXRhc2sgPSAodm9pZCAqKShkcGMgKyAxKTsKKwkJSU5JVF9XT1JLKHRhc2ssIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZCwgKHZvaWQgKilkcGMpOworCQlpZiAoIXF1ZXVlX3dvcmsoa2FjcGlkX3dxLCB0YXNrKSkgeworCQkJc3RhdHVzID0gQUVfRVJST1I7CisJCQlrZnJlZShkcGMpOworCQl9CiAJfQotCi0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX29zX3F1ZXVlX2Zvcl9leGVjdXRpb24pOworRVhQT1JUX1NZTUJPTChhY3BpX29zX2V4ZWN1dGUpOwogCiB2b2lkIGFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUodm9pZCAqY29udGV4dCkKIHsKQEAgLTc2OSw5ICs3OTUsNiBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsICJXYWl0aW5nIGZvciBzZW1hcGhvcmVbJXB8JWR8JWRdXG4iLAogCQkJICBoYW5kbGUsIHVuaXRzLCB0aW1lb3V0KSk7CiAKLQlpZiAoaW5fYXRvbWljKCkpCi0JCXRpbWVvdXQgPSAwOwotCiAJc3dpdGNoICh0aW1lb3V0KSB7CiAJCS8qCiAJCSAqIE5vIFdhaXQ6CkBAIC04OTYsMTQgKzkxOSw2IEBACiB9CiAjZW5kaWYKIAotdTMyIGFjcGlfb3NfZ2V0X3RocmVhZF9pZCh2b2lkKQotewotCWlmICghaW5fYXRvbWljKCkpCi0JCXJldHVybiBjdXJyZW50LT5waWQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQogYWNwaV9zdGF0dXMgYWNwaV9vc19zaWduYWwodTMyIGZ1bmN0aW9uLCB2b2lkICppbmZvKQogewogCXN3aXRjaCAoZnVuY3Rpb24pIHsKQEAgLTEwNTAsMTIgKzEwNjUsMTIgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9vc19jcmVhdGVfY2FjaGUKICAqCi0gKiBQQVJBTUVURVJTOiAgQ2FjaGVOYW1lICAgICAgIC0gQXNjaWkgbmFtZSBmb3IgdGhlIGNhY2hlCi0gKiAgICAgICAgICAgICAgT2JqZWN0U2l6ZSAgICAgIC0gU2l6ZSBvZiBlYWNoIGNhY2hlZCBvYmplY3QKLSAqICAgICAgICAgICAgICBNYXhEZXB0aCAgICAgICAgLSBNYXhpbXVtIGRlcHRoIG9mIHRoZSBjYWNoZSAoaW4gb2JqZWN0cykKLSAqICAgICAgICAgICAgICBSZXR1cm5DYWNoZSAgICAgLSBXaGVyZSB0aGUgbmV3IGNhY2hlIG9iamVjdCBpcyByZXR1cm5lZAorICogUEFSQU1FVEVSUzogIG5hbWUgICAgICAtIEFzY2lpIG5hbWUgZm9yIHRoZSBjYWNoZQorICogICAgICAgICAgICAgIHNpemUgICAgICAtIFNpemUgb2YgZWFjaCBjYWNoZWQgb2JqZWN0CisgKiAgICAgICAgICAgICAgZGVwdGggICAgIC0gTWF4aW11bSBkZXB0aCBvZiB0aGUgY2FjaGUgKGluIG9iamVjdHMpIDxpZ25vcmVkPgorICogICAgICAgICAgICAgIGNhY2hlICAgICAtIFdoZXJlIHRoZSBuZXcgY2FjaGUgb2JqZWN0IGlzIHJldHVybmVkCiAgKgotICogUkVUVVJOOiAgICAgIFN0YXR1cworICogUkVUVVJOOiAgICAgIHN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBDcmVhdGUgYSBjYWNoZSBvYmplY3QKICAqCkBAIC0xMDY1LDcgKzEwODAsMTAgQEAKIGFjcGlfb3NfY3JlYXRlX2NhY2hlKGNoYXIgKm5hbWUsIHUxNiBzaXplLCB1MTYgZGVwdGgsIGFjcGlfY2FjaGVfdCAqKiBjYWNoZSkKIHsKIAkqY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLCBzaXplLCAwLCAwLCBOVUxMLCBOVUxMKTsKLQlyZXR1cm4gQUVfT0s7CisJaWYgKGNhY2hlID09IE5VTEwpCisJCXJldHVybiBBRV9FUlJPUjsKKwllbHNlCisJCXJldHVybiBBRV9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExMzQsMTYgKzExNTIsNjMgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IEdldCBhbiBvYmplY3QgZnJvbSB0aGUgc3BlY2lmaWVkIGNhY2hlLiAgSWYgY2FjaGUgaXMgZW1wdHksCi0gKiAgICAgICAgICAgICAgdGhlIG9iamVjdCBpcyBhbGxvY2F0ZWQuCisgKiBERVNDUklQVElPTjogUmV0dXJuIGEgemVyby1maWxsZWQgb2JqZWN0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQgKmFjcGlfb3NfYWNxdWlyZV9vYmplY3QoYWNwaV9jYWNoZV90ICogY2FjaGUpCiB7Ci0Jdm9pZCAqb2JqZWN0ID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZSwgR0ZQX0tFUk5FTCk7CisJdm9pZCAqb2JqZWN0ID0ga21lbV9jYWNoZV96YWxsb2MoY2FjaGUsIEdGUF9LRVJORUwpOwogCVdBUk5fT04oIW9iamVjdCk7CiAJcmV0dXJuIG9iamVjdDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZQorICoKKyAqIFBBUkFNRVRFUlM6ICBpbnRlcmZhY2UgICAgICAgICAgIC0gUmVxdWVzdGVkIGludGVyZmFjZSB0byBiZSB2YWxpZGF0ZWQKKyAqCisgKiBSRVRVUk46ICAgICAgQUVfT0sgaWYgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCwgQUVfU1VQUE9SVCBvdGhlcndpc2UKKyAqCisgKiBERVNDUklQVElPTjogTWF0Y2ggYW4gaW50ZXJmYWNlIHN0cmluZyB0byB0aGUgaW50ZXJmYWNlcyBzdXBwb3J0ZWQgYnkgdGhlCisgKiAgICAgICAgICAgICAgaG9zdC4gU3RyaW5ncyBvcmlnaW5hdGUgZnJvbSBhbiBBTUwgY2FsbCB0byB0aGUgX09TSSBtZXRob2QuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV9vc192YWxpZGF0ZV9pbnRlcmZhY2UgKGNoYXIgKmludGVyZmFjZSkKK3sKKworICAgIHJldHVybiBBRV9TVVBQT1JUOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzCisgKgorICogUEFSQU1FVEVSUzogIHNwYWNlX2lkICAgICAgICAgICAgIC0gQUNQSSBzcGFjZSBJRAorICogICAgICAgICAgICAgIGFkZHJlc3MgICAgICAgICAgICAgLSBQaHlzaWNhbCBhZGRyZXNzCisgKiAgICAgICAgICAgICAgbGVuZ3RoICAgICAgICAgICAgICAtIEFkZHJlc3MgbGVuZ3RoCisgKgorICogUkVUVVJOOiAgICAgIEFFX09LIGlmIGFkZHJlc3MvbGVuZ3RoIGlzIHZhbGlkIGZvciB0aGUgc3BhY2VfaWQuIE90aGVyd2lzZSwKKyAqICAgICAgICAgICAgICBzaG91bGQgcmV0dXJuIEFFX0FNTF9JTExFR0FMX0FERFJFU1MuCisgKgorICogREVTQ1JJUFRJT046IFZhbGlkYXRlIGEgc3lzdGVtIGFkZHJlc3MgdmlhIHRoZSBob3N0IE9TLiBVc2VkIHRvIHZhbGlkYXRlCisgKiAgICAgICAgICAgICAgdGhlIGFkZHJlc3NlcyBhY2Nlc3NlZCBieSBBTUwgb3BlcmF0aW9uIHJlZ2lvbnMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzICgKKyAgICB1OCAgICAgICAgICAgICAgICAgICBzcGFjZV9pZCwKKyAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICBhZGRyZXNzLAorICAgIGFjcGlfc2l6ZSAgICAgICAgICAgICAgIGxlbmd0aCkKK3sKKworICAgIHJldHVybiBBRV9PSzsKK30KKworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNhcmdzLmMgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzYXJncy5jCmluZGV4IGRlNTczYmUuLmJmODhlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNhcmdzLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc2FyZ3MuYwpAQCAtNzksNyArNzksNyBAQAogCWFjcGlfbmF0aXZlX3VpbnQgYnl0ZV9jb3VudDsKIAl1OCBieXRlX3plcm9fbWFzayA9IDB4M0Y7CS8qIERlZmF1bHQgWzA6NV0gKi8KIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInBzX2dldF9uZXh0X3BhY2thZ2VfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShwc19nZXRfbmV4dF9wYWNrYWdlX2xlbmd0aCk7CiAKIAkvKgogCSAqIEJ5dGUgMCBiaXRzIFs2OjddIGNvbnRhaW4gdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzCkBAIC0xMjgsNyArMTI4LDcgQEAKIAl1OCAqc3RhcnQgPSBwYXJzZXJfc3RhdGUtPmFtbDsKIAl1MzIgcGFja2FnZV9sZW5ndGg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19nZXRfbmV4dF9wYWNrYWdlX2VuZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZ2V0X25leHRfcGFja2FnZV9lbmQpOwogCiAJLyogRnVuY3Rpb24gYmVsb3cgdXBkYXRlcyBwYXJzZXJfc3RhdGUtPkFtbCAqLwogCkBAIC0xNTcsNyArMTU3LDcgQEAKIAl1OCAqc3RhcnQgPSBwYXJzZXJfc3RhdGUtPmFtbDsKIAl1OCAqZW5kID0gcGFyc2VyX3N0YXRlLT5hbWw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19nZXRfbmV4dF9uYW1lc3RyaW5nIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShwc19nZXRfbmV4dF9uYW1lc3RyaW5nKTsKIAogCS8qIFBvaW50IHBhc3QgYW55IG5hbWVzdHJpbmcgcHJlZml4IGNoYXJhY3RlcnMgKGJhY2tzbGFzaCBvciBjYXJhdCkgKi8KIApAQCAtMjM3LDcgKzIzNyw3IEBACiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlIHNjb3BlX2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19nZXRfbmV4dF9uYW1lcGF0aCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZ2V0X25leHRfbmFtZXBhdGgpOwogCiAJcGF0aCA9IGFjcGlfcHNfZ2V0X25leHRfbmFtZXN0cmluZyhwYXJzZXJfc3RhdGUpOwogCWFjcGlfcHNfaW5pdF9vcChhcmcsIEFNTF9JTlRfTkFNRVBBVEhfT1ApOwpAQCAtMjc1LDYgKzI3NSw3IEBACiAJICovCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmCiAJICAgIHBvc3NpYmxlX21ldGhvZF9jYWxsICYmIChub2RlLT50eXBlID09IEFDUElfVFlQRV9NRVRIT0QpKSB7CisKIAkJLyogVGhpcyBuYW1lIGlzIGFjdHVhbGx5IGEgY29udHJvbCBtZXRob2QgaW52b2NhdGlvbiAqLwogCiAJCW1ldGhvZF9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwpAQCAtMzE5LDYgKzMyMCw3IEBACiAJICogc29tZSBub3RfZm91bmQgY2FzZXMgYXJlIGFsbG93ZWQKIAkgKi8KIAlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgeworCiAJCS8qIDEpIG5vdF9mb3VuZCBpcyBvayBkdXJpbmcgbG9hZCBwYXNzIDEvMiAoYWxsb3cgZm9yd2FyZCByZWZlcmVuY2VzKSAqLwogCiAJCWlmICgod2Fsa19zdGF0ZS0+cGFyc2VfZmxhZ3MgJiBBQ1BJX1BBUlNFX01PREVfTUFTSykgIT0KQEAgLTM1NCw2ICszNTYsNyBAQAogCiAJCWlmICgod2Fsa19zdGF0ZS0+cGFyc2VfZmxhZ3MgJiBBQ1BJX1BBUlNFX01PREVfTUFTSykgPT0KIAkJICAgIEFDUElfUEFSU0VfRVhFQ1VURSkgeworCiAJCQkvKiBSZXBvcnQgYSBjb250cm9sIG1ldGhvZCBleGVjdXRpb24gZXJyb3IgKi8KIAogCQkJc3RhdHVzID0gYWNwaV9kc19tZXRob2RfZXJyb3Ioc3RhdHVzLCB3YWxrX3N0YXRlKTsKQEAgLTM4OCw3ICszOTEsNyBAQAogCXUxNiBvcGNvZGU7CiAJdTggKmFtbCA9IHBhcnNlcl9zdGF0ZS0+YW1sOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInBzX2dldF9uZXh0X3NpbXBsZV9hcmciLCBhcmdfdHlwZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIocHNfZ2V0X25leHRfc2ltcGxlX2FyZywgYXJnX3R5cGUpOwogCiAJc3dpdGNoIChhcmdfdHlwZSkgewogCWNhc2UgQVJHUF9CWVRFREFUQToKQEAgLTQ1Myw3ICs0NTYsNyBAQAogCiAJZGVmYXVsdDoKIAotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhcmdfdHlwZSAlWCIsIGFyZ190eXBlKSk7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIEFyZ1R5cGUgJVgiLCBhcmdfdHlwZSkpOwogCQlyZXR1cm5fVk9JRDsKIAl9CiAKQEAgLTQ4NCw3ICs0ODcsNyBAQAogCXUxNiBvcGNvZGU7CiAJdTMyIG5hbWU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJwc19nZXRfbmV4dF9maWVsZCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZ2V0X25leHRfZmllbGQpOwogCiAJLyogRGV0ZXJtaW5lIGZpZWxkIHR5cGUgKi8KIApAQCAtNTkwLDcgKzU5Myw3IEBACiAJdTMyIHN1Ym9wOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInBzX2dldF9uZXh0X2FyZyIsIHBhcnNlcl9zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfZ2V0X25leHRfYXJnLCBwYXJzZXJfc3RhdGUpOwogCiAJc3dpdGNoIChhcmdfdHlwZSkgewogCWNhc2UgQVJHUF9CWVRFREFUQToKQEAgLTYyMCw2ICs2MjMsNyBAQAogCWNhc2UgQVJHUF9GSUVMRExJU1Q6CiAKIAkJaWYgKHBhcnNlcl9zdGF0ZS0+YW1sIDwgcGFyc2VyX3N0YXRlLT5wa2dfZW5kKSB7CisKIAkJCS8qIE5vbi1lbXB0eSBsaXN0ICovCiAKIAkJCXdoaWxlIChwYXJzZXJfc3RhdGUtPmFtbCA8IHBhcnNlcl9zdGF0ZS0+cGtnX2VuZCkgewpAQCAtNjQ1LDYgKzY0OSw3IEBACiAJY2FzZSBBUkdQX0JZVEVMSVNUOgogCiAJCWlmIChwYXJzZXJfc3RhdGUtPmFtbCA8IHBhcnNlcl9zdGF0ZS0+cGtnX2VuZCkgeworCiAJCQkvKiBOb24tZW1wdHkgbGlzdCAqLwogCiAJCQlhcmcgPSBhY3BpX3BzX2FsbG9jX29wKEFNTF9JTlRfQllURUxJU1RfT1ApOwpAQCAtNjczLDYgKzY3OCw3IEBACiAJCWlmIChzdWJvcCA9PSAwIHx8CiAJCSAgICBhY3BpX3BzX2lzX2xlYWRpbmdfY2hhcihzdWJvcCkgfHwKIAkJICAgIGFjcGlfcHNfaXNfcHJlZml4X2NoYXIoc3Vib3ApKSB7CisKIAkJCS8qIG51bGxfbmFtZSBvciBuYW1lX3N0cmluZyAqLwogCiAJCQlhcmcgPSBhY3BpX3BzX2FsbG9jX29wKEFNTF9JTlRfTkFNRVBBVEhfT1ApOwpAQCAtNzAzLDYgKzcwOSw3IEBACiAJY2FzZSBBUkdQX09CSkxJU1Q6CiAKIAkJaWYgKHBhcnNlcl9zdGF0ZS0+YW1sIDwgcGFyc2VyX3N0YXRlLT5wa2dfZW5kKSB7CisKIAkJCS8qIE5vbi1lbXB0eSBsaXN0IG9mIHZhcmlhYmxlIGFyZ3VtZW50cywgbm90aGluZyByZXR1cm5lZCAqLwogCiAJCQl3YWxrX3N0YXRlLT5hcmdfY291bnQgPSBBQ1BJX1ZBUl9BUkdTOwpAQCAtNzExLDcgKzcxOCw3IEBACiAKIAlkZWZhdWx0OgogCi0JCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFyZ190eXBlOiAlWCIsIGFyZ190eXBlKSk7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIEFyZ1R5cGU6ICVYIiwgYXJnX3R5cGUpKTsKIAkJc3RhdHVzID0gQUVfQU1MX09QRVJBTkRfVFlQRTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc2xvb3AuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNsb29wLmMKaW5kZXggMDBiMDcyZS4uZTE1NDFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc2xvb3AuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzbG9vcC5jCkBAIC04Myw3ICs4Myw3IEBACiAJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgKnBhcnNlcl9zdGF0ZTsKIAl1OCAqYW1sX29wX3N0YXJ0ID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJwc19wYXJzZV9sb29wIiwgd2Fsa19zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfcGFyc2VfbG9vcCwgd2Fsa19zdGF0ZSk7CiAKIAlpZiAod2Fsa19zdGF0ZS0+ZGVzY2VuZGluZ19jYWxsYmFjayA9PSBOVUxMKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTk1LDYgKzk1LDcgQEAKICNpZiAoIWRlZmluZWQgKEFDUElfTk9fTUVUSE9EX0VYRUNVVElPTikgJiYgIWRlZmluZWQgKEFDUElfQ09OU1RBTlRfRVZBTF9PTkxZKSkKIAogCWlmICh3YWxrX3N0YXRlLT53YWxrX3R5cGUgJiBBQ1BJX1dBTEtfTUVUSE9EX1JFU1RBUlQpIHsKKwogCQkvKiBXZSBhcmUgcmVzdGFydGluZyBhIHByZWVtcHRlZCBjb250cm9sIG1ldGhvZCAqLwogCiAJCWlmIChhY3BpX3BzX2hhc19jb21wbGV0ZWRfc2NvcGUocGFyc2VyX3N0YXRlKSkgewpAQCAtMTI4LDcgKzEyOSw3IEBACiAKIAkJCQkJfQogCQkJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCQkJCSJnZXRfcHJlZGljYXRlIEZhaWxlZCIpKTsKKwkJCQkJCQkiR2V0UHJlZGljYXRlIEZhaWxlZCIpKTsKIAkJCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCQkJfQogCkBAIC0xNDMsNiArMTQ0LDcgQEAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCiAJCQkJCSAgIlBvcHBlZCBzY29wZSwgT3A9JXBcbiIsIG9wKSk7CiAJCX0gZWxzZSBpZiAod2Fsa19zdGF0ZS0+cHJldl9vcCkgeworCiAJCQkvKiBXZSB3ZXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gb3AgKi8KIAogCQkJb3AgPSB3YWxrX3N0YXRlLT5wcmV2X29wOwpAQCAtMTU2LDYgKzE1OCw3IEBACiAJd2hpbGUgKChwYXJzZXJfc3RhdGUtPmFtbCA8IHBhcnNlcl9zdGF0ZS0+YW1sX2VuZCkgfHwgKG9wKSkgewogCQlhbWxfb3Bfc3RhcnQgPSBwYXJzZXJfc3RhdGUtPmFtbDsKIAkJaWYgKCFvcCkgeworCiAJCQkvKiBHZXQgdGhlIG5leHQgb3Bjb2RlIGZyb20gdGhlIEFNTCBzdHJlYW0gKi8KIAogCQkJd2Fsa19zdGF0ZS0+YW1sX29mZnNldCA9CkBAIC0yMTMsNiArMjE2LDcgQEAKIAkJCS8qIENyZWF0ZSBPcCBzdHJ1Y3R1cmUgYW5kIGFwcGVuZCB0byBwYXJlbnQncyBhcmd1bWVudCBsaXN0ICovCiAKIAkJCWlmICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9OQU1FRCkgeworCiAJCQkJLyogQWxsb2NhdGUgYSBuZXcgcHJlX29wIGlmIG5lY2Vzc2FyeSAqLwogCiAJCQkJaWYgKCFwcmVfb3ApIHsKQEAgLTM3MSw3ICszNzUsNyBAQAogCiAJCQlpZiAod2Fsa19zdGF0ZS0+b3BfaW5mbykgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCi0JCQkJCQkgICJPcGNvZGUgJTQuNFggWyVzXSBPcCAlcCBBbWwgJXAgYW1sX29mZnNldCAlNS41WFxuIiwKKwkJCQkJCSAgIk9wY29kZSAlNC40WCBbJXNdIE9wICVwIEFtbCAlcCBBbWxPZmZzZXQgJTUuNVhcbiIsCiAJCQkJCQkgICh1MzIpIG9wLT5jb21tb24uYW1sX29wY29kZSwKIAkJCQkJCSAgd2Fsa19zdGF0ZS0+b3BfaW5mby0+bmFtZSwgb3AsCiAJCQkJCQkgIHBhcnNlcl9zdGF0ZS0+YW1sLApAQCAtMzg4LDYgKzM5Miw3IEBACiAJCS8qIEFyZSB0aGVyZSBhbnkgYXJndW1lbnRzIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQ/ICovCiAKIAkJaWYgKHdhbGtfc3RhdGUtPmFyZ190eXBlcykgeworCiAJCQkvKiBHZXQgYXJndW1lbnRzICovCiAKIAkJCXN3aXRjaCAob3AtPmNvbW1vbi5hbWxfb3Bjb2RlKSB7CkBAIC03NDIsNyArNzQ3LDE5IEBACiAJCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzMikpIHsKIAkJCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMyKTsKIAkJCQkJfQorCisJCQkJCXN0YXR1czIgPQorCQkJCQkgICAgYWNwaV9kc19yZXN1bHRfc3RhY2tfcG9wCisJCQkJCSAgICAod2Fsa19zdGF0ZSk7CisJCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzMikpIHsKKwkJCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMyKTsKKwkJCQkJfQorCisJCQkJCWFjcGlfdXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUKKwkJCQkJICAgIChhY3BpX3V0X3BvcF9nZW5lcmljX3N0YXRlCisJCQkJCSAgICAgKCZ3YWxrX3N0YXRlLT5jb250cm9sX3N0YXRlKSk7CiAJCQkJfQorCiAJCQkJYWNwaV9wc19wb3Bfc2NvcGUocGFyc2VyX3N0YXRlLCAmb3AsCiAJCQkJCQkgICZ3YWxrX3N0YXRlLT5hcmdfdHlwZXMsCiAJCQkJCQkgICZ3YWxrX3N0YXRlLT5hcmdfY291bnQpOwpAQCAtNzYyLDYgKzc3OSw3IEBACiAJCQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzMik7CiAJCQkJCX0KIAkJCQl9CisKIAkJCQlhY3BpX3BzX3BvcF9zY29wZShwYXJzZXJfc3RhdGUsICZvcCwKIAkJCQkJCSAgJndhbGtfc3RhdGUtPmFyZ190eXBlcywKIAkJCQkJCSAgJndhbGtfc3RhdGUtPmFyZ19jb3VudCk7CkBAIC04NTMsNiArODcxLDcgQEAKIAkJCQl9CiAKIAkJCQllbHNlIGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCQkJCS8qIEZpcnN0IGVycm9yIGlzIG1vc3QgaW1wb3J0YW50ICovCiAKIAkJCQkJKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzb3Bjb2RlLmMgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzb3Bjb2RlLmMKaW5kZXggMTFkNjM1MS4uNGJkMjVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNvcGNvZGUuYwpAQCAtNzI1LDEyICs3MjUsMTMgQEAKIAogY29uc3Qgc3RydWN0IGFjcGlfb3Bjb2RlX2luZm8gKmFjcGlfcHNfZ2V0X29wY29kZV9pbmZvKHUxNiBvcGNvZGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9OQU1FKCJwc19nZXRfb3Bjb2RlX2luZm8iKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUocHNfZ2V0X29wY29kZV9pbmZvKTsKIAogCS8qCiAJICogRGV0ZWN0IG5vcm1hbCA4LWJpdCBvcGNvZGUgb3IgZXh0ZW5kZWQgMTYtYml0IG9wY29kZQogCSAqLwogCWlmICghKG9wY29kZSAmIDB4RkYwMCkpIHsKKwogCQkvKiBTaW1wbGUgKDgtYml0KSBvcGNvZGU6IDAtMjU1LCBjYW4ndCBpbmRleCBiZXlvbmQgdGFibGUgICovCiAKIAkJcmV0dXJuICgmYWNwaV9nYmxfYW1sX29wX2luZm8KQEAgLTczOSw2ICs3NDAsNyBAQAogCiAJaWYgKCgob3Bjb2RlICYgMHhGRjAwKSA9PSBBTUxfRVhURU5ERURfT1BDT0RFKSAmJgogCSAgICAoKCh1OCkgb3Bjb2RlKSA8PSBNQVhfRVhURU5ERURfT1BDT0RFKSkgeworCiAJCS8qIFZhbGlkIGV4dGVuZGVkICgxNi1iaXQpIG9wY29kZSAqLwogCiAJCXJldHVybiAoJmFjcGlfZ2JsX2FtbF9vcF9pbmZvCkBAIC03NzksNyArNzgxLDcgQEAKIAlyZXR1cm4gKG9wLT5uYW1lKTsKIAogI2Vsc2UKLQlyZXR1cm4gKCJBRV9OT1RfQ09ORklHVVJFRCIpOworCXJldHVybiAoIk9wY29kZU5hbWUgdW5hdmFpbGFibGUiKTsKIAogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzcGFyc2UuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNwYXJzZS5jCmluZGV4IGE5ZjMyMjkuLjdlZTJmMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNwYXJzZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNwYXJzZS5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAlvcGNvZGUgPSAodTE2KSBBQ1BJX0dFVDgoYW1sKTsKIAogCWlmIChvcGNvZGUgPT0gQU1MX0VYVEVOREVEX09QX1BSRUZJWCkgeworCiAJCS8qIEV4dGVuZGVkIG9wY29kZSwgZ2V0IHRoZSBzZWNvbmQgb3Bjb2RlIGJ5dGUgKi8KIAogCQlhbWwrKzsKQEAgLTEzNyw3ICsxMzgsNyBAQAogCWNvbnN0IHN0cnVjdCBhY3BpX29wY29kZV9pbmZvICpwYXJlbnRfaW5mbzsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqcmVwbGFjZW1lbnRfb3AgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInBzX2NvbXBsZXRlX3RoaXNfb3AiLCBvcCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfY29tcGxldGVfdGhpc19vcCwgb3ApOwogCiAJLyogQ2hlY2sgZm9yIG51bGwgT3AsIGNhbiBoYXBwZW4gaWYgQU1MIGNvZGUgaXMgY29ycnVwdCAqLwogCkBAIC0xNTgsNiArMTU5LDcgQEAKIAlpZiAob3AtPmNvbW1vbi5wYXJlbnQpIHsKIAkJcHJldiA9IG9wLT5jb21tb24ucGFyZW50LT5jb21tb24udmFsdWUuYXJnOwogCQlpZiAoIXByZXYpIHsKKwogCQkJLyogTm90aGluZyBtb3JlIHRvIGRvICovCiAKIAkJCWdvdG8gY2xlYW51cDsKQEAgLTI0NSw2ICsyNDcsNyBAQAogCQkvKiBXZSBtdXN0IHVubGluayB0aGlzIG9wIGZyb20gdGhlIHBhcmVudCB0cmVlICovCiAKIAkJaWYgKHByZXYgPT0gb3ApIHsKKwogCQkJLyogVGhpcyBvcCBpcyB0aGUgZmlyc3QgaW4gdGhlIGxpc3QgKi8KIAogCQkJaWYgKHJlcGxhY2VtZW50X29wKSB7CkBAIC0yNjUsNiArMjY4LDcgQEAKIAogCQllbHNlCiAJCQl3aGlsZSAocHJldikgeworCiAJCQkJLyogVHJhdmVyc2UgYWxsIHNpYmxpbmdzIGluIHRoZSBwYXJlbnQncyBhcmd1bWVudCBsaXN0ICovCiAKIAkJCQluZXh0ID0gcHJldi0+Y29tbW9uLm5leHQ7CkBAIC0zMjksNyArMzMzLDcgQEAKIAlzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSAqcGFyc2VyX3N0YXRlID0gJndhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9DVFJMX1BFTkRJTkc7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigicHNfbmV4dF9wYXJzZV9zdGF0ZSIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihwc19uZXh0X3BhcnNlX3N0YXRlLCBvcCk7CiAKIAlzd2l0Y2ggKGNhbGxiYWNrX3N0YXR1cykgewogCWNhc2UgQUVfQ1RSTF9URVJNSU5BVEU6CkBAIC00NDksMTAgKzQ1MywxMCBAQAogCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAqcHJldl93YWxrX2xpc3QgPSBhY3BpX2dibF9jdXJyZW50X3dhbGtfbGlzdDsKIAlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICpwcmV2aW91c193YWxrX3N0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicHNfcGFyc2VfYW1sIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShwc19wYXJzZV9hbWwpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwKLQkJCSAgIkVudGVyZWQgd2l0aCB3YWxrX3N0YXRlPSVwIEFtbD0lcCBzaXplPSVYXG4iLAorCQkJICAiRW50ZXJlZCB3aXRoIFdhbGtTdGF0ZT0lcCBBbWw9JXAgc2l6ZT0lWFxuIiwKIAkJCSAgd2Fsa19zdGF0ZSwgd2Fsa19zdGF0ZS0+cGFyc2VyX3N0YXRlLmFtbCwKIAkJCSAgd2Fsa19zdGF0ZS0+cGFyc2VyX3N0YXRlLmFtbF9zaXplKSk7CiAKQEAgLTQ2MCw2ICs0NjQsNyBAQAogCiAJdGhyZWFkID0gYWNwaV91dF9jcmVhdGVfdGhyZWFkX3N0YXRlKCk7CiAJaWYgKCF0aHJlYWQpIHsKKwkJYWNwaV9kc19kZWxldGVfd2Fsa19zdGF0ZSh3YWxrX3N0YXRlKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogCkBAIC01MTAsNiArNTE1LDcgQEAKIAkJfSBlbHNlIGlmIChzdGF0dXMgPT0gQUVfQ1RSTF9URVJNSU5BVEUpIHsKIAkJCXN0YXR1cyA9IEFFX09LOwogCQl9IGVsc2UgaWYgKChzdGF0dXMgIT0gQUVfT0spICYmICh3YWxrX3N0YXRlLT5tZXRob2RfZGVzYykpIHsKKwogCQkJLyogRWl0aGVyIHRoZSBtZXRob2QgcGFyc2Ugb3IgYWN0dWFsIGV4ZWN1dGlvbiBmYWlsZWQgKi8KIAogCQkJQUNQSV9FUlJPUl9NRVRIT0QoIk1ldGhvZCBwYXJzZS9leGVjdXRpb24gZmFpbGVkIiwKQEAgLTU1MCwyMCArNTU2LDkgQEAKIAkJICovCiAJCWlmICgoKHdhbGtfc3RhdGUtPnBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9NT0RFX01BU0spID09CiAJCSAgICAgQUNQSV9QQVJTRV9FWEVDVVRFKSB8fCAoQUNQSV9GQUlMVVJFKHN0YXR1cykpKSB7Ci0JCQlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MpIHsKLQkJCQkvKiBEZWNyZW1lbnQgdGhlIHRocmVhZCBjb3VudCBvbiB0aGUgbWV0aG9kIHBhcnNlIHRyZWUgKi8KLQotCQkJCWlmICh3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLgotCQkJCSAgICB0aHJlYWRfY291bnQpIHsKLQkJCQkJd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC4KLQkJCQkJICAgIHRocmVhZF9jb3VudC0tOwotCQkJCX0gZWxzZSB7Ci0JCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCQkgICAgIkludmFsaWQgemVybyB0aHJlYWQgY291bnQgaW4gbWV0aG9kIikpOwotCQkJCX0KLQkJCX0KLQotCQkJYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2Qod2Fsa19zdGF0ZSk7CisJCQlhY3BpX2RzX3Rlcm1pbmF0ZV9jb250cm9sX21ldGhvZCh3YWxrX3N0YXRlLT4KKwkJCQkJCQkgbWV0aG9kX2Rlc2MsCisJCQkJCQkJIHdhbGtfc3RhdGUpOwogCQl9CiAKIAkJLyogRGVsZXRlIHRoaXMgd2FsayBzdGF0ZSBhbmQgYWxsIGxpbmtlZCBjb250cm9sIHN0YXRlcyAqLwpAQCAtNTcyLDcgKzU2Nyw3IEBACiAJCXByZXZpb3VzX3dhbGtfc3RhdGUgPSB3YWxrX3N0YXRlOwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCi0JCQkJICAicmV0dXJuX3ZhbHVlPSVwLCBpbXBsaWNpdF92YWx1ZT0lcCBTdGF0ZT0lcFxuIiwKKwkJCQkgICJSZXR1cm5WYWx1ZT0lcCwgSW1wbGljaXRWYWx1ZT0lcCBTdGF0ZT0lcFxuIiwKIAkJCQkgIHdhbGtfc3RhdGUtPnJldHVybl9kZXNjLAogCQkJCSAgd2Fsa19zdGF0ZS0+aW1wbGljaXRfcmV0dXJuX29iaiwgd2Fsa19zdGF0ZSkpOwogCkBAIC02MzMsMTIgKzYyOCwxNCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKHByZXZpb3VzX3dhbGtfc3RhdGUtPnJldHVybl9kZXNjKSB7CisKIAkJCQkvKiBDYWxsZXIgZG9lc24ndCB3YW50IGl0LCBtdXN0IGRlbGV0ZSBpdCAqLwogCiAJCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHByZXZpb3VzX3dhbGtfc3RhdGUtPgogCQkJCQkJCSByZXR1cm5fZGVzYyk7CiAJCQl9CiAJCQlpZiAocHJldmlvdXNfd2Fsa19zdGF0ZS0+aW1wbGljaXRfcmV0dXJuX29iaikgeworCiAJCQkJLyogQ2FsbGVyIGRvZXNuJ3Qgd2FudCBpdCwgbXVzdCBkZWxldGUgaXQgKi8KIAogCQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShwcmV2aW91c193YWxrX3N0YXRlLT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNzY29wZS5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3Njb3BlLmMKaW5kZXggYmM2MDQ3Yy4uYTNlMDMxNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNzY29wZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNzY29wZS5jCkBAIC0xMDYsMTQgKzEwNiwxNCBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigicHNfaW5pdF9zY29wZSIsIHJvb3Rfb3ApOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHBzX2luaXRfc2NvcGUsIHJvb3Rfb3ApOwogCiAJc2NvcGUgPSBhY3BpX3V0X2NyZWF0ZV9nZW5lcmljX3N0YXRlKCk7CiAJaWYgKCFzY29wZSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKLQlzY29wZS0+Y29tbW9uLmRhdGFfdHlwZSA9IEFDUElfREVTQ19UWVBFX1NUQVRFX1JQU0NPUEU7CisJc2NvcGUtPmNvbW1vbi5kZXNjcmlwdG9yX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9SUFNDT1BFOwogCXNjb3BlLT5wYXJzZV9zY29wZS5vcCA9IHJvb3Rfb3A7CiAJc2NvcGUtPnBhcnNlX3Njb3BlLmFyZ19jb3VudCA9IEFDUElfVkFSX0FSR1M7CiAJc2NvcGUtPnBhcnNlX3Njb3BlLmFyZ19lbmQgPSBwYXJzZXJfc3RhdGUtPmFtbF9lbmQ7CkBAIC0xNDcsMTQgKzE0NywxNCBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigicHNfcHVzaF9zY29wZSIsIG9wKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihwc19wdXNoX3Njb3BlLCBvcCk7CiAKIAlzY29wZSA9IGFjcGlfdXRfY3JlYXRlX2dlbmVyaWNfc3RhdGUoKTsKIAlpZiAoIXNjb3BlKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KIAotCXNjb3BlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUFNDT1BFOworCXNjb3BlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUFNDT1BFOwogCXNjb3BlLT5wYXJzZV9zY29wZS5vcCA9IG9wOwogCXNjb3BlLT5wYXJzZV9zY29wZS5hcmdfbGlzdCA9IHJlbWFpbmluZ19hcmdzOwogCXNjb3BlLT5wYXJzZV9zY29wZS5hcmdfY291bnQgPSBhcmdfY291bnQ7CkBAIC0xNjUsNiArMTY1LDcgQEAKIAlhY3BpX3V0X3B1c2hfZ2VuZXJpY19zdGF0ZSgmcGFyc2VyX3N0YXRlLT5zY29wZSwgc2NvcGUpOwogCiAJaWYgKGFyZ19jb3VudCA9PSBBQ1BJX1ZBUl9BUkdTKSB7CisKIAkJLyogTXVsdGlwbGUgYXJndW1lbnRzICovCiAKIAkJc2NvcGUtPnBhcnNlX3Njb3BlLmFyZ19lbmQgPSBwYXJzZXJfc3RhdGUtPnBrZ19lbmQ7CkBAIC0xOTksMTQgKzIwMCwxNCBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGUgPSBwYXJzZXJfc3RhdGUtPnNjb3BlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicHNfcG9wX3Njb3BlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShwc19wb3Bfc2NvcGUpOwogCiAJLyogT25seSBwb3AgdGhlIHNjb3BlIGlmIHRoZXJlIGlzIGluIGZhY3QgYSBuZXh0IHNjb3BlICovCiAKIAlpZiAoc2NvcGUtPmNvbW1vbi5uZXh0KSB7CiAJCXNjb3BlID0gYWNwaV91dF9wb3BfZ2VuZXJpY19zdGF0ZSgmcGFyc2VyX3N0YXRlLT5zY29wZSk7CiAKLQkJLyogcmV0dXJuIHRvIHBhcnNpbmcgcHJldmlvdXMgb3AgKi8KKwkJLyogUmV0dXJuIHRvIHBhcnNpbmcgcHJldmlvdXMgb3AgKi8KIAogCQkqb3AgPSBzY29wZS0+cGFyc2Vfc2NvcGUub3A7CiAJCSphcmdfbGlzdCA9IHNjb3BlLT5wYXJzZV9zY29wZS5hcmdfbGlzdDsKQEAgLTIxNyw3ICsyMTgsNyBAQAogCiAJCWFjcGlfdXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUoc2NvcGUpOwogCX0gZWxzZSB7Ci0JCS8qIGVtcHR5IHBhcnNlIHN0YWNrLCBwcmVwYXJlIHRvIGZldGNoIG5leHQgb3Bjb2RlICovCisJCS8qIEVtcHR5IHBhcnNlIHN0YWNrLCBwcmVwYXJlIHRvIGZldGNoIG5leHQgb3Bjb2RlICovCiAKIAkJKm9wID0gTlVMTDsKIAkJKmFyZ19saXN0ID0gMDsKQEAgLTI0Niw3ICsyNDcsNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigicHNfY2xlYW51cF9zY29wZSIsIHBhcnNlcl9zdGF0ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfY2xlYW51cF9zY29wZSwgcGFyc2VyX3N0YXRlKTsKIAogCWlmICghcGFyc2VyX3N0YXRlKSB7CiAJCXJldHVybl9WT0lEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3RyZWUuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN0cmVlLmMKaW5kZXggZGQ2ZjE2Ny4uMDAxNTcxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3RyZWUuYworKysgYi9kcml2ZXJzL2FjcGkvcGFyc2VyL3BzdHJlZS5jCkBAIC03Nyw2ICs3Nyw3IEBACiAKIAlvcF9pbmZvID0gYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8ob3AtPmNvbW1vbi5hbWxfb3Bjb2RlKTsKIAlpZiAob3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX1VOS05PV04pIHsKKwogCQkvKiBJbnZhbGlkIG9wY29kZSBvciBBU0NJSSBjaGFyYWN0ZXIgKi8KIAogCQlyZXR1cm4gKE5VTEwpOwpAQCAtODUsNiArODYsNyBAQAogCS8qIENoZWNrIGlmIHRoaXMgb3Bjb2RlIHJlcXVpcmVzIGFyZ3VtZW50IHN1Yi1vYmplY3RzICovCiAKIAlpZiAoIShvcF9pbmZvLT5mbGFncyAmIEFNTF9IQVNfQVJHUykpIHsKKwogCQkvKiBIYXMgbm8gbGlua2VkIGFyZ3VtZW50IG9iamVjdHMgKi8KIAogCQlyZXR1cm4gKE5VTEwpOwpAQCAtMTMwLDYgKzEzMiw3IEBACiAKIAlvcF9pbmZvID0gYWNwaV9wc19nZXRfb3Bjb2RlX2luZm8ob3AtPmNvbW1vbi5hbWxfb3Bjb2RlKTsKIAlpZiAob3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX1VOS05PV04pIHsKKwogCQkvKiBJbnZhbGlkIG9wY29kZSAqLwogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIEFNTCBPcGNvZGU6IDB4JTIuMlgiLApAQCAtMTQwLDYgKzE0Myw3IEBACiAJLyogQ2hlY2sgaWYgdGhpcyBvcGNvZGUgcmVxdWlyZXMgYXJndW1lbnQgc3ViLW9iamVjdHMgKi8KIAogCWlmICghKG9wX2luZm8tPmZsYWdzICYgQU1MX0hBU19BUkdTKSkgeworCiAJCS8qIEhhcyBubyBsaW5rZWQgYXJndW1lbnQgb2JqZWN0cyAqLwogCiAJCXJldHVybjsKQEAgLTE0OCw2ICsxNTIsNyBAQAogCS8qIEFwcGVuZCB0aGUgYXJndW1lbnQgdG8gdGhlIGxpbmtlZCBhcmd1bWVudCBsaXN0ICovCiAKIAlpZiAob3AtPmNvbW1vbi52YWx1ZS5hcmcpIHsKKwogCQkvKiBBcHBlbmQgdG8gZXhpc3RpbmcgYXJndW1lbnQgbGlzdCAqLwogCiAJCXByZXZfYXJnID0gb3AtPmNvbW1vbi52YWx1ZS5hcmc7CkBAIC0yMjIsMTIgKzIyNywxNCBAQAogCQl9CiAKIAkJaWYgKGFyZyA9PSBvcmlnaW4pIHsKKwogCQkJLyogUmVhY2hlZCBwYXJlbnQgb2Ygb3JpZ2luLCBlbmQgc2VhcmNoICovCiAKIAkJCXJldHVybiAoTlVMTCk7CiAJCX0KIAogCQlpZiAocGFyZW50LT5jb21tb24ubmV4dCkgeworCiAJCQkvKiBGb3VuZCBzaWJsaW5nIG9mIHBhcmVudCAqLwogCiAJCQlyZXR1cm4gKHBhcmVudC0+Y29tbW9uLm5leHQpOwpAQCAtMjk5LDUgKzMwNiw0IEBACiAJcmV0dXJuIChjaGlsZCk7CiB9CiAjZW5kaWYKLQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN1dGlscy5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3V0aWxzLmMKaW5kZXggM2UwN2NiOS4uMTgyNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3V0aWxzLmMKQEAgLTg5LDcgKzg5LDcgQEAKIHsKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKLQlvcC0+Y29tbW9uLmRhdGFfdHlwZSA9IEFDUElfREVTQ19UWVBFX1BBUlNFUjsKKwlvcC0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX1BBUlNFUjsKIAlvcC0+Y29tbW9uLmFtbF9vcGNvZGUgPSBvcGNvZGU7CiAKIAlBQ1BJX0RJU0FTTV9PTkxZX01FTUJFUlMoQUNQSV9TVFJOQ1BZKG9wLT5jb21tb24uYW1sX29wX25hbWUsCkBAIC0xMzUsNiArMTM1LDcgQEAKIAkvKiBBbGxvY2F0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBzaXplIG9iamVjdCAqLwogCiAJaWYgKGZsYWdzID09IEFDUElfUEFSU0VPUF9HRU5FUklDKSB7CisKIAkJLyogVGhlIGdlbmVyaWMgb3AgKGRlZmF1bHQpIGlzIGJ5IGZhciB0aGUgbW9zdCBjb21tb24gKDE2IHRvIDEpICovCiAKIAkJb3AgPSBhY3BpX29zX2FjcXVpcmVfb2JqZWN0KGFjcGlfZ2JsX3BzX25vZGVfY2FjaGUpOwpAQCAtMTcxLDcgKzE3Miw3IEBACiAKIHZvaWQgYWNwaV9wc19mcmVlX29wKHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX05BTUUoInBzX2ZyZWVfb3AiKTsKKwlBQ1BJX0ZVTkNUSU9OX05BTUUocHNfZnJlZV9vcCk7CiAKIAlpZiAob3AtPmNvbW1vbi5hbWxfb3Bjb2RlID09IEFNTF9JTlRfUkVUVVJOX1ZBTFVFX09QKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsICJGcmVlIHJldHZhbCBvcDogJXBcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzd2Fsay5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3dhbGsuYwppbmRleCAwNmYwNWJmLi5hODRhNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzd2Fsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN3YWxrLmMKQEAgLTY0LDE4ICs2NCwyMSBAQAogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpuZXh0ID0gTlVMTDsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqcGFyZW50ID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJwc19kZWxldGVfcGFyc2VfdHJlZSIsIHN1YnRyZWVfcm9vdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfZGVsZXRlX3BhcnNlX3RyZWUsIHN1YnRyZWVfcm9vdCk7CiAKIAkvKiBWaXNpdCBhbGwgbm9kZXMgaW4gdGhlIHN1YnRyZWUgKi8KIAogCXdoaWxlIChvcCkgeworCiAJCS8qIENoZWNrIGlmIHdlIGFyZSBub3QgYXNjZW5kaW5nICovCiAKIAkJaWYgKG9wICE9IHBhcmVudCkgeworCiAJCQkvKiBMb29rIGZvciBhbiBhcmd1bWVudCBvciBjaGlsZCBvZiB0aGUgY3VycmVudCBvcCAqLwogCiAJCQluZXh0ID0gYWNwaV9wc19nZXRfYXJnKG9wLCAwKTsKIAkJCWlmIChuZXh0KSB7CisKIAkJCQkvKiBTdGlsbCBnb2luZyBkb3dud2FyZCBpbiB0cmVlIChPcCBpcyBub3QgY29tcGxldGVkIHlldCkgKi8KIAogCQkJCW9wID0gbmV4dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3hmYWNlLmMKaW5kZXggMmRkNDhjYi4uNWQ5OTZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3hmYWNlLmMKQEAgLTUwLDE0ICs1MCwxNCBAQAogQUNQSV9NT0RVTEVfTkFNRSgicHN4ZmFjZSIpCiAKIC8qIExvY2FsIFByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGFjcGlfcHNfc3RhcnRfdHJhY2Uoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOworc3RhdGljIHZvaWQgYWNwaV9wc19zdGFydF90cmFjZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKIAotc3RhdGljIHZvaWQgYWNwaV9wc19zdG9wX3RyYWNlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKTsKK3N0YXRpYyB2b2lkIGFjcGlfcHNfc3RvcF90cmFjZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKIAotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcHNfZXhlY3V0ZV9wYXNzKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKTsKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BzX2V4ZWN1dGVfcGFzcyhzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKIAogc3RhdGljIHZvaWQKLWFjcGlfcHNfdXBkYXRlX3BhcmFtZXRlcl9saXN0KHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvLCB1MTYgYWN0aW9uKTsKK2FjcGlfcHNfdXBkYXRlX3BhcmFtZXRlcl9saXN0KHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8sIHUxNiBhY3Rpb24pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTExMyw3ICsxMTMsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGFjcGlfcHNfc3RhcnRfdHJhY2Uoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pCitzdGF0aWMgdm9pZCBhY3BpX3BzX3N0YXJ0X3RyYWNlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAl9CiAKIAlpZiAoKCFhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZSkgfHwKLQkgICAgKGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lICE9IGluZm8tPm5vZGUtPm5hbWUuaW50ZWdlcikpIHsKKwkgICAgKGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lICE9IGluZm8tPnJlc29sdmVkX25vZGUtPm5hbWUuaW50ZWdlcikpIHsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTU4LDcgKzE1OCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYWNwaV9wc19zdG9wX3RyYWNlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgYWNwaV9wc19zdG9wX3RyYWNlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0xNzAsNyArMTcwLDcgQEAKIAl9CiAKIAlpZiAoKCFhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZSkgfHwKLQkgICAgKGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lICE9IGluZm8tPm5vZGUtPm5hbWUuaW50ZWdlcikpIHsKKwkgICAgKGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lICE9IGluZm8tPnJlc29sdmVkX25vZGUtPm5hbWUuaW50ZWdlcikpIHsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMjEyLDIyICsyMTIsMjMgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1hY3BpX3N0YXR1cyBhY3BpX3BzX2V4ZWN1dGVfbWV0aG9kKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKQorYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX21ldGhvZChzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInBzX2V4ZWN1dGVfbWV0aG9kIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShwc19leGVjdXRlX21ldGhvZCk7CiAKIAkvKiBWYWxpZGF0ZSB0aGUgSW5mbyBhbmQgbWV0aG9kIE5vZGUgKi8KIAotCWlmICghaW5mbyB8fCAhaW5mby0+bm9kZSkgeworCWlmICghaW5mbyB8fCAhaW5mby0+cmVzb2x2ZWRfbm9kZSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTlVMTF9FTlRSWSk7CiAJfQogCiAJLyogSW5pdCBmb3IgbmV3IG1ldGhvZCwgd2FpdCBvbiBjb25jdXJyZW5jeSBzZW1hcGhvcmUgKi8KIAogCXN0YXR1cyA9Ci0JICAgIGFjcGlfZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbihpbmZvLT5ub2RlLCBpbmZvLT5vYmpfZGVzYywgTlVMTCk7CisJICAgIGFjcGlfZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbihpbmZvLT5yZXNvbHZlZF9ub2RlLCBpbmZvLT5vYmpfZGVzYywKKwkJCQkJICAgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTI0OCw3ICsyNDksNyBAQAogCSAqLwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCiAJCQkgICIqKioqIEJlZ2luIE1ldGhvZCBQYXJzZSAqKioqIEVudHJ5PSVwIG9iaj0lcFxuIiwKLQkJCSAgaW5mby0+bm9kZSwgaW5mby0+b2JqX2Rlc2MpKTsKKwkJCSAgaW5mby0+cmVzb2x2ZWRfbm9kZSwgaW5mby0+b2JqX2Rlc2MpKTsKIAogCWluZm8tPnBhc3NfbnVtYmVyID0gMTsKIAlzdGF0dXMgPSBhY3BpX3BzX2V4ZWN1dGVfcGFzcyhpbmZvKTsKQEAgLTI2MSw3ICsyNjIsNyBAQAogCSAqLwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCiAJCQkgICIqKioqIEJlZ2luIE1ldGhvZCBFeGVjdXRpb24gKioqKiBFbnRyeT0lcCBvYmo9JXBcbiIsCi0JCQkgIGluZm8tPm5vZGUsIGluZm8tPm9ial9kZXNjKSk7CisJCQkgIGluZm8tPnJlc29sdmVkX25vZGUsIGluZm8tPm9ial9kZXNjKSk7CiAKIAlpbmZvLT5wYXNzX251bWJlciA9IDM7CiAJc3RhdHVzID0gYWNwaV9wc19leGVjdXRlX3Bhc3MoaW5mbyk7CkBAIC0yODYsOCArMjg3LDcgQEAKIAkgKiBhIGNvbnRyb2wgZXhjZXB0aW9uIGNvZGUKIAkgKi8KIAlpZiAoaW5mby0+cmV0dXJuX29iamVjdCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1BBUlNFLAotCQkJCSAgIk1ldGhvZCByZXR1cm5lZCBvYmpfZGVzYz0lcFxuIiwKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwgIk1ldGhvZCByZXR1cm5lZCBPYmpEZXNjPSVwXG4iLAogCQkJCSAgaW5mby0+cmV0dXJuX29iamVjdCkpOwogCQlBQ1BJX0RVTVBfU1RBQ0tfRU5UUlkoaW5mby0+cmV0dXJuX29iamVjdCk7CiAKQEAgLTMwMSw3ICszMDEsNyBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3BzX3VwZGF0ZV9wYXJhbWV0ZXJfbGlzdAogICoKLSAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgLSBTZWUgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8KKyAqIFBBUkFNRVRFUlM6ICBJbmZvICAgICAgICAgICAgLSBTZWUgc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVc2VkOiBwYXJhbWV0ZXJfdHlwZSBhbmQgUGFyYW1ldGVycykKICAqICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgLSBBZGQgb3IgUmVtb3ZlIHJlZmVyZW5jZQogICoKQEAgLTMxMiwxNCArMzEyLDE2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotYWNwaV9wc191cGRhdGVfcGFyYW1ldGVyX2xpc3Qoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8sIHUxNiBhY3Rpb24pCithY3BpX3BzX3VwZGF0ZV9wYXJhbWV0ZXJfbGlzdChzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvLCB1MTYgYWN0aW9uKQogewogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAogCWlmICgoaW5mby0+cGFyYW1ldGVyX3R5cGUgPT0gQUNQSV9QQVJBTV9BUkdTKSAmJiAoaW5mby0+cGFyYW1ldGVycykpIHsKKwogCQkvKiBVcGRhdGUgcmVmZXJlbmNlIGNvdW50IGZvciBlYWNoIHBhcmFtZXRlciAqLwogCiAJCWZvciAoaSA9IDA7IGluZm8tPnBhcmFtZXRlcnNbaV07IGkrKykgeworCiAJCQkvKiBJZ25vcmUgZXJyb3JzLCBqdXN0IGRvIHRoZW0gYWxsICovCiAKIAkJCSh2b2lkKWFjcGlfdXRfdXBkYXRlX29iamVjdF9yZWZlcmVuY2UoaW5mby0+CkBAIC0zMzMsNyArMzM1LDcgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9wc19leGVjdXRlX3Bhc3MKICAqCi0gKiBQQVJBTUVURVJTOiAgSW5mbyAgICAgICAgICAgIC0gU2VlIHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvCisgKiBQQVJBTUVURVJTOiAgSW5mbyAgICAgICAgICAgIC0gU2VlIHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVXNlZDogcGFzc19udW1iZXIsIE5vZGUsIGFuZCBvYmpfZGVzYykKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCkBAIC0zNDIsMTMgKzM0NCwxMyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BzX2V4ZWN1dGVfcGFzcyhzdHJ1Y3QgYWNwaV9wYXJhbWV0ZXJfaW5mbyAqaW5mbykKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BzX2V4ZWN1dGVfcGFzcyhzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3A7CiAJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInBzX2V4ZWN1dGVfcGFzcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocHNfZXhlY3V0ZV9wYXNzKTsKIAogCS8qIENyZWF0ZSBhbmQgaW5pdCBhIFJvb3QgTm9kZSAqLwogCkBAIC0zNjcsNyArMzY5LDcgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfZHNfaW5pdF9hbWxfd2Fsayh3YWxrX3N0YXRlLCBvcCwgaW5mby0+bm9kZSwKKwlzdGF0dXMgPSBhY3BpX2RzX2luaXRfYW1sX3dhbGsod2Fsa19zdGF0ZSwgb3AsIGluZm8tPnJlc29sdmVkX25vZGUsCiAJCQkJICAgICAgIGluZm8tPm9ial9kZXNjLT5tZXRob2QuYW1sX3N0YXJ0LAogCQkJCSAgICAgICBpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmFtbF9sZW5ndGgsCiAJCQkJICAgICAgIGluZm8tPnBhc3NfbnVtYmVyID09IDEgPyBOVUxMIDogaW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggYWJiZGIzNy4uZjM2ZGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTU3Nyw2ICs1NzcsOCBAQAogCQlyZXR1cm5fVkFMVUUoLUVCVVNZKTsKIAl9CiAKKwlXQVJOX09OKCFwZXJmb3JtYW5jZSk7CisKIAlwci0+cGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTsKIAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2VfaW5mbyhwcikpIHsKQEAgLTYwOSw3ICs2MTEsOCBAQAogCQlyZXR1cm5fVk9JRDsKIAl9CiAKLQlrZnJlZShwci0+cGVyZm9ybWFuY2UtPnN0YXRlcyk7CisJaWYgKHByLT5wZXJmb3JtYW5jZSkKKwkJa2ZyZWUocHItPnBlcmZvcm1hbmNlLT5zdGF0ZXMpOwogCXByLT5wZXJmb3JtYW5jZSA9IE5VTEw7CiAKIAlhY3BpX2NwdWZyZXFfcmVtb3ZlX2ZpbGUocHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjYWxjLmMKaW5kZXggNDAzOGRiZi4uY2Y4N2IwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY2FsYy5jCkBAIC03OCw2ICs3OCw3IEBACiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCiAJZm9yIChiaXRzX3NldCA9IDA7IGJpdF9maWVsZDsgYml0c19zZXQrKykgeworCiAJCS8qIFplcm8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0aGF0IGlzIHNldCAqLwogCiAJCWJpdF9maWVsZCAmPSAoYml0X2ZpZWxkIC0gMSk7CkBAIC0xNTQsMTUgKzE1NSwxOCBAQAogCSAqIGxlbmd0aCwgbWludXMgb25lIGJ5dGUgZm9yIHRoZSByZXNvdXJjZV9zb3VyY2VfaW5kZXggaXRzZWxmLgogCSAqLwogCWlmIChyZXNvdXJjZV9sZW5ndGggPiBtaW5pbXVtX2FtbF9yZXNvdXJjZV9sZW5ndGgpIHsKKwogCQkvKiBDb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbmFsIHN0cmluZyAqLwogCiAJCXN0cmluZ19sZW5ndGggPQogCQkgICAgcmVzb3VyY2VfbGVuZ3RoIC0gbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoIC0gMTsKIAl9CiAKLQkvKiBSb3VuZCB1cCBsZW5ndGggdG8gMzIgYml0cyBmb3IgaW50ZXJuYWwgc3RydWN0dXJlIGFsaWdubWVudCAqLwotCi0JcmV0dXJuIChBQ1BJX1JPVU5EX1VQX3RvXzMyX2JJVFMoc3RyaW5nX2xlbmd0aCkpOworCS8qCisJICogUm91bmQgdGhlIGxlbmd0aCB1cCB0byBhIG11bHRpcGxlIG9mIHRoZSBuYXRpdmUgd29yZCBpbiBvcmRlciB0bworCSAqIGd1YXJhbnRlZSB0aGF0IHRoZSBlbnRpcmUgcmVzb3VyY2UgZGVzY3JpcHRvciBpcyBuYXRpdmUgd29yZCBhbGlnbmVkCisJICovCisJcmV0dXJuICgodTMyKSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKHN0cmluZ19sZW5ndGgpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE4NiwxMSArMTkwLDEyIEBACiAJYWNwaV9zaXplIGFtbF9zaXplX25lZWRlZCA9IDA7CiAJYWNwaV9yc19sZW5ndGggdG90YWxfc2l6ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9hbWxfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfYW1sX2xlbmd0aCk7CiAKIAkvKiBUcmF2ZXJzZSBlbnRpcmUgbGlzdCBvZiBpbnRlcm5hbCByZXNvdXJjZSBkZXNjcmlwdG9ycyAqLwogCiAJd2hpbGUgKHJlc291cmNlKSB7CisKIAkJLyogVmFsaWRhdGUgdGhlIGRlc2NyaXB0b3IgdHlwZSAqLwogCiAJCWlmIChyZXNvdXJjZS0+dHlwZSA+IEFDUElfUkVTT1VSQ0VfVFlQRV9NQVgpIHsKQEAgLTIxNCw2ICsyMTksNyBAQAogCQkJICogaXMgYSBMYXJnZSBSZXNvdXJjZSBkYXRhIHR5cGUuCiAJCQkgKi8KIAkJCWlmIChyZXNvdXJjZS0+ZGF0YS52ZW5kb3IuYnl0ZV9sZW5ndGggPiA3KSB7CisKIAkJCQkvKiBCYXNlIHNpemUgb2YgYSBMYXJnZSByZXNvdXJjZSBkZXNjcmlwdG9yICovCiAKIAkJCQl0b3RhbF9zaXplID0KQEAgLTMzMiwyMCArMzM4LDIyIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU4ICplbmRfYW1sOwogCXU4ICpidWZmZXI7Ci0JdTMyIGJ1ZmZlcl9zaXplID0gMDsKKwl1MzIgYnVmZmVyX3NpemU7CiAJdTE2IHRlbXAxNjsKIAl1MTYgcmVzb3VyY2VfbGVuZ3RoOwogCXUzMiBleHRyYV9zdHJ1Y3RfYnl0ZXM7CiAJdTggcmVzb3VyY2VfaW5kZXg7CiAJdTggbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfZ2V0X2xpc3RfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfbGlzdF9sZW5ndGgpOwogCisJKnNpemVfbmVlZGVkID0gMDsKIAllbmRfYW1sID0gYW1sX2J1ZmZlciArIGFtbF9idWZmZXJfbGVuZ3RoOwogCiAJLyogV2FsayB0aGUgbGlzdCBvZiBBTUwgcmVzb3VyY2UgZGVzY3JpcHRvcnMgKi8KIAogCXdoaWxlIChhbWxfYnVmZmVyIDwgZW5kX2FtbCkgeworCiAJCS8qIFZhbGlkYXRlIHRoZSBSZXNvdXJjZSBUeXBlIGFuZCBSZXNvdXJjZSBMZW5ndGggKi8KIAogCQlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX3Jlc291cmNlKGFtbF9idWZmZXIsICZyZXNvdXJjZV9pbmRleCk7CkBAIC0zODYsMzUgKzM5NCwyOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfVkVORE9SX1NNQUxMOgorCQljYXNlIEFDUElfUkVTT1VSQ0VfTkFNRV9WRU5ET1JfTEFSR0U6CiAJCQkvKgogCQkJICogVmVuZG9yIFJlc291cmNlOgotCQkJICogRW5zdXJlIGEgMzItYml0IGJvdW5kYXJ5IGZvciB0aGUgc3RydWN0dXJlCisJCQkgKiBHZXQgdGhlIG51bWJlciBvZiB2ZW5kb3IgZGF0YSBieXRlcwogCQkJICovCi0JCQlleHRyYV9zdHJ1Y3RfYnl0ZXMgPQotCQkJICAgIEFDUElfUk9VTkRfVVBfdG9fMzJfYklUUyhyZXNvdXJjZV9sZW5ndGgpOworCQkJZXh0cmFfc3RydWN0X2J5dGVzID0gcmVzb3VyY2VfbGVuZ3RoOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfRU5EX1RBRzoKIAkJCS8qCi0JCQkgKiBFbmQgVGFnOiBUaGlzIGlzIHRoZSBub3JtYWwgZXhpdCwgYWRkIHNpemUgb2YgZW5kX3RhZworCQkJICogRW5kIFRhZzoKKwkJCSAqIFRoaXMgaXMgdGhlIG5vcm1hbCBleGl0LCBhZGQgc2l6ZSBvZiBlbmRfdGFnCiAJCQkgKi8KLQkJCSpzaXplX25lZWRlZCA9IGJ1ZmZlcl9zaXplICsgQUNQSV9SU19TSVpFX01JTjsKKwkJCSpzaXplX25lZWRlZCArPSBBQ1BJX1JTX1NJWkVfTUlOOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAotCQljYXNlIEFDUElfUkVTT1VSQ0VfTkFNRV9WRU5ET1JfTEFSR0U6Ci0JCQkvKgotCQkJICogVmVuZG9yIFJlc291cmNlOgotCQkJICogQWRkIHZlbmRvciBkYXRhIGFuZCBlbnN1cmUgYSAzMi1iaXQgYm91bmRhcnkgZm9yIHRoZSBzdHJ1Y3R1cmUKLQkJCSAqLwotCQkJZXh0cmFfc3RydWN0X2J5dGVzID0KLQkJCSAgICBBQ1BJX1JPVU5EX1VQX3RvXzMyX2JJVFMocmVzb3VyY2VfbGVuZ3RoKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgQUNQSV9SRVNPVVJDRV9OQU1FX0FERFJFU1MzMjoKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfQUREUkVTUzE2OgorCQljYXNlIEFDUElfUkVTT1VSQ0VfTkFNRV9BRERSRVNTNjQ6CiAJCQkvKgotCQkJICogMzItQml0IG9yIDE2LWJpdCBBZGRyZXNzIFJlc291cmNlOgotCQkJICogQWRkIHRoZSBzaXplIG9mIGFueSBvcHRpb25hbCBkYXRhIChyZXNvdXJjZV9zb3VyY2UpCisJCQkgKiBBZGRyZXNzIFJlc291cmNlOgorCQkJICogQWRkIHRoZSBzaXplIG9mIHRoZSBvcHRpb25hbCByZXNvdXJjZV9zb3VyY2UKIAkJCSAqLwogCQkJZXh0cmFfc3RydWN0X2J5dGVzID0KIAkJCSAgICBhY3BpX3JzX3N0cmVhbV9vcHRpb25fbGVuZ3RoKHJlc291cmNlX2xlbmd0aCwKQEAgLTQyMyw1MCArNDI0LDQ2IEBACiAKIAkJY2FzZSBBQ1BJX1JFU09VUkNFX05BTUVfRVhURU5ERURfSVJROgogCQkJLyoKLQkJCSAqIEV4dGVuZGVkIElSUToKLQkJCSAqIFBvaW50IHBhc3QgdGhlIGludGVycnVwdF92ZWN0b3JfZmxhZ3MgdG8gZ2V0IHRoZQotCQkJICogaW50ZXJydXB0X3RhYmxlX2xlbmd0aC4KKwkJCSAqIEV4dGVuZGVkIElSUSBSZXNvdXJjZToKKwkJCSAqIFVzaW5nIHRoZSBpbnRlcnJ1cHRfdGFibGVfbGVuZ3RoLCBhZGQgNCBieXRlcyBmb3IgZWFjaCBhZGRpdGlvbmFsCisJCQkgKiBpbnRlcnJ1cHQuIE5vdGU6IGF0IGxlYXN0IG9uZSBpbnRlcnJ1cHQgaXMgcmVxdWlyZWQgYW5kIGlzCisJCQkgKiBpbmNsdWRlZCBpbiB0aGUgbWluaW11bSBkZXNjcmlwdG9yIHNpemUgKHJlYXNvbiBmb3IgdGhlIC0xKQogCQkJICovCi0JCQlidWZmZXIrKzsKKwkJCWV4dHJhX3N0cnVjdF9ieXRlcyA9IChidWZmZXJbMV0gLSAxKSAqIHNpemVvZih1MzIpOwogCi0JCQlleHRyYV9zdHJ1Y3RfYnl0ZXMgPQotCQkJICAgIC8qCi0JCQkgICAgICogQWRkIDQgYnl0ZXMgZm9yIGVhY2ggYWRkaXRpb25hbCBpbnRlcnJ1cHQuIE5vdGU6IGF0Ci0JCQkgICAgICogbGVhc3Qgb25lIGludGVycnVwdCBpcyByZXF1aXJlZCBhbmQgaXMgaW5jbHVkZWQgaW4KLQkJCSAgICAgKiB0aGUgbWluaW11bSBkZXNjcmlwdG9yIHNpemUKLQkJCSAgICAgKi8KLQkJCSAgICAoKCpidWZmZXIgLSAxKSAqIHNpemVvZih1MzIpKSArCi0JCQkgICAgLyogQWRkIHRoZSBzaXplIG9mIGFueSBvcHRpb25hbCBkYXRhIChyZXNvdXJjZV9zb3VyY2UpICovCisJCQkvKiBBZGQgdGhlIHNpemUgb2YgdGhlIG9wdGlvbmFsIHJlc291cmNlX3NvdXJjZSAqLworCisJCQlleHRyYV9zdHJ1Y3RfYnl0ZXMgKz0KIAkJCSAgICBhY3BpX3JzX3N0cmVhbV9vcHRpb25fbGVuZ3RoKHJlc291cmNlX2xlbmd0aCAtCiAJCQkJCQkJIGV4dHJhX3N0cnVjdF9ieXRlcywKIAkJCQkJCQkgbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQUNQSV9SRVNPVVJDRV9OQU1FX0FERFJFU1M2NDoKLQkJCS8qCi0JCQkgKiA2NC1CaXQgQWRkcmVzcyBSZXNvdXJjZToKLQkJCSAqIEFkZCB0aGUgc2l6ZSBvZiBhbnkgb3B0aW9uYWwgZGF0YSAocmVzb3VyY2Vfc291cmNlKQotCQkJICogRW5zdXJlIGEgNjQtYml0IGJvdW5kYXJ5IGZvciB0aGUgc3RydWN0dXJlCi0JCQkgKi8KLQkJCWV4dHJhX3N0cnVjdF9ieXRlcyA9Ci0JCQkgICAgQUNQSV9ST1VORF9VUF90b182NF9iSVRTCi0JCQkgICAgKGFjcGlfcnNfc3RyZWFtX29wdGlvbl9sZW5ndGgKLQkJCSAgICAgKHJlc291cmNlX2xlbmd0aCwgbWluaW11bV9hbWxfcmVzb3VyY2VfbGVuZ3RoKSk7Ci0JCQlicmVhazsKLQogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBVcGRhdGUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplIGZvciB0aGUgaW50ZXJuYWwgZGVzY3JpcHRvciBzdHJ1Y3RzICovCisJCS8qCisJCSAqIFVwZGF0ZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgZm9yIHRoZSBpbnRlcm5hbCBkZXNjcmlwdG9yIHN0cnVjdHMKKwkJICoKKwkJICogSW1wb3J0YW50OiBSb3VuZCB0aGUgc2l6ZSB1cCBmb3IgdGhlIGFwcHJvcHJpYXRlIGFsaWdubWVudC4gVGhpcworCQkgKiBpcyBhIHJlcXVpcmVtZW50IG9uIElBNjQuCisJCSAqLworCQlidWZmZXJfc2l6ZSA9IGFjcGlfZ2JsX3Jlc291cmNlX3N0cnVjdF9zaXplc1tyZXNvdXJjZV9pbmRleF0gKworCQkgICAgZXh0cmFfc3RydWN0X2J5dGVzOworCQlidWZmZXJfc2l6ZSA9ICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQoYnVmZmVyX3NpemUpOwogCi0JCXRlbXAxNiA9ICh1MTYpIChhY3BpX2dibF9yZXNvdXJjZV9zdHJ1Y3Rfc2l6ZXNbcmVzb3VyY2VfaW5kZXhdICsKLQkJCQlleHRyYV9zdHJ1Y3RfYnl0ZXMpOwotCQlidWZmZXJfc2l6ZSArPSAodTMyKSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKHRlbXAxNik7CisJCSpzaXplX25lZWRlZCArPSBidWZmZXJfc2l6ZTsKKworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1JFU09VUkNFUywKKwkJCQkgICJUeXBlICUuMlgsIEFtbExlbmd0aCAlLjJYIEludGVybmFsTGVuZ3RoICUuMlhcbiIsCisJCQkJICBhY3BpX3V0X2dldF9yZXNvdXJjZV90eXBlKGFtbF9idWZmZXIpLAorCQkJCSAgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9sZW5ndGgoYW1sX2J1ZmZlciksCisJCQkJICBidWZmZXJfc2l6ZSkpOwogCiAJCS8qCi0JCSAqIFBvaW50IHRvIHRoZSBuZXh0IHJlc291cmNlIHdpdGhpbiB0aGUgc3RyZWFtCi0JCSAqIHVzaW5nIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgcGx1cyB0aGUgbGVuZ3RoIGNvbnRhaW5lZCBpbiB0aGUgaGVhZGVyCisJCSAqIFBvaW50IHRvIHRoZSBuZXh0IHJlc291cmNlIHdpdGhpbiB0aGUgQU1MIHN0cmVhbSB1c2luZyB0aGUgbGVuZ3RoCisJCSAqIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UgZGVzY3JpcHRvciBoZWFkZXIKIAkJICovCiAJCWFtbF9idWZmZXIgKz0gYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9sZW5ndGgoYW1sX2J1ZmZlcik7CiAJfQpAQCAtNTA2LDcgKzUwMyw3IEBACiAJdTggbmFtZV9mb3VuZDsKIAl1MzIgdGFibGVfaW5kZXg7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19nZXRfcGNpX3JvdXRpbmdfdGFibGVfbGVuZ3RoIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfcGNpX3JvdXRpbmdfdGFibGVfbGVuZ3RoKTsKIAogCW51bWJlcl9vZl9lbGVtZW50cyA9IHBhY2thZ2Vfb2JqZWN0LT5wYWNrYWdlLmNvdW50OwogCkBAIC01MjMsNiArNTIwLDcgQEAKIAl0b3Bfb2JqZWN0X2xpc3QgPSBwYWNrYWdlX29iamVjdC0+cGFja2FnZS5lbGVtZW50czsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bWJlcl9vZl9lbGVtZW50czsgaW5kZXgrKykgeworCiAJCS8qIERlcmVmZXJlbmNlIHRoZSBzdWItcGFja2FnZSAqLwogCiAJCXBhY2thZ2VfZWxlbWVudCA9ICp0b3Bfb2JqZWN0X2xpc3Q7CkBAIC01ODEsNyArNTc5LDcgQEAKIAogCQkvKiBSb3VuZCB1cCB0aGUgc2l6ZSBzaW5jZSBlYWNoIGVsZW1lbnQgbXVzdCBiZSBhbGlnbmVkICovCiAKLQkJdGVtcF9zaXplX25lZWRlZCA9IEFDUElfUk9VTkRfVVBfdG9fNjRfYklUUyh0ZW1wX3NpemVfbmVlZGVkKTsKKwkJdGVtcF9zaXplX25lZWRlZCA9IEFDUElfUk9VTkRfVVBfVE9fNjRCSVQodGVtcF9zaXplX25lZWRlZCk7CiAKIAkJLyogUG9pbnQgdG8gdGhlIG5leHQgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqLwogCkBAIC01ODksNyArNTg3LDcgQEAKIAl9CiAKIAkvKgotCSAqIEFkZGluZyBhbiBleHRyYSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QsIGVzc2VudGlhbGx5IGEKKwkgKiBBZGQgYW4gZXh0cmEgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LCBlc3NlbnRpYWxseSBhCiAJICogTlVMTCB0ZXJtaW5hdG9yCiAJICovCiAJKmJ1ZmZlcl9zaXplX25lZWRlZCA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY3JlYXRlLmMgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY3JlYXRlLmMKaW5kZXggOGMxMjhkZS4uMDA4MDU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjcmVhdGUuYwpAQCAtNzUsMTAgKzc1LDExIEBACiAJdTggKmFtbF9zdGFydDsKIAlhY3BpX3NpemUgbGlzdF9zaXplX25lZWRlZCA9IDA7CiAJdTMyIGFtbF9idWZmZXJfbGVuZ3RoOworCXZvaWQgKnJlc291cmNlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfY3JlYXRlX3Jlc291cmNlX2xpc3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2NyZWF0ZV9yZXNvdXJjZV9saXN0KTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgImFtbF9idWZmZXIgPSAlcFxuIiwgYW1sX2J1ZmZlcikpOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkFtbEJ1ZmZlciA9ICVwXG4iLCBhbWxfYnVmZmVyKSk7CiAKIAkvKiBQYXJhbXMgYWxyZWFkeSB2YWxpZGF0ZWQsIHNvIHdlIGRvbid0IHJlLXZhbGlkYXRlIGhlcmUgKi8KIApAQCAtOTIsNyArOTMsNyBAQAogCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X2xpc3RfbGVuZ3RoKGFtbF9zdGFydCwgYW1sX2J1ZmZlcl9sZW5ndGgsCiAJCQkJCSAmbGlzdF9zaXplX25lZWRlZCk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTdGF0dXM9JVggbGlzdF9zaXplX25lZWRlZD0lWFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTdGF0dXM9JVggTGlzdFNpemVOZWVkZWQ9JVhcbiIsCiAJCQkgIHN0YXR1cywgKHUzMikgbGlzdF9zaXplX25lZWRlZCkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTEwNywxMyArMTA4LDE1IEBACiAKIAkvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogCi0Jc3RhdHVzID0gYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXMoYW1sX3N0YXJ0LCBhbWxfYnVmZmVyX2xlbmd0aCwKLQkJCQkJCSAgb3V0cHV0X2J1ZmZlci0+cG9pbnRlcik7CisJcmVzb3VyY2UgPSBvdXRwdXRfYnVmZmVyLT5wb2ludGVyOworCXN0YXR1cyA9IGFjcGlfdXRfd2Fsa19hbWxfcmVzb3VyY2VzKGFtbF9zdGFydCwgYW1sX2J1ZmZlcl9sZW5ndGgsCisJCQkJCSAgICBhY3BpX3JzX2NvbnZlcnRfYW1sX3RvX3Jlc291cmNlcywKKwkJCQkJICAgICZyZXNvdXJjZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIm91dHB1dF9idWZmZXIgJXAgTGVuZ3RoICVYXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIk91dHB1dEJ1ZmZlciAlcCBMZW5ndGggJVhcbiIsCiAJCQkgIG91dHB1dF9idWZmZXItPnBvaW50ZXIsICh1MzIpIG91dHB1dF9idWZmZXItPmxlbmd0aCkpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0xNTUsNyArMTU4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyIHBhdGhfYnVmZmVyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfY3JlYXRlX3BjaV9yb3V0aW5nX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19jcmVhdGVfcGNpX3JvdXRpbmdfdGFibGUpOwogCiAJLyogUGFyYW1zIGFscmVhZHkgdmFsaWRhdGVkLCBzbyB3ZSBkb24ndCByZS12YWxpZGF0ZSBoZXJlICovCiAKQEAgLTE2Nyw3ICsxNzAsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJidWZmZXJfc2l6ZV9uZWVkZWQgPSAlWFxuIiwKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJCdWZmZXJTaXplTmVlZGVkID0gJVhcbiIsCiAJCQkgICh1MzIpIGJ1ZmZlcl9zaXplX25lZWRlZCkpOwogCiAJLyogVmFsaWRhdGUvQWxsb2NhdGUvQ2xlYXIgY2FsbGVyIGJ1ZmZlciAqLwpAQCAtMzMyLDcgKzMzNSw3IEBACiAJCS8qIE5vdyBhbGlnbiB0aGUgY3VycmVudCBsZW5ndGggKi8KIAogCQl1c2VyX3BydC0+bGVuZ3RoID0KLQkJICAgICh1MzIpIEFDUElfUk9VTkRfVVBfdG9fNjRfYklUUyh1c2VyX3BydC0+bGVuZ3RoKTsKKwkJICAgICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fNjRCSVQodXNlcl9wcnQtPmxlbmd0aCk7CiAKIAkJLyogNCkgRm91cnRoIHN1Ym9iamVjdDogRGVyZWZlcmVuY2UgdGhlIFBSVC5zb3VyY2VfaW5kZXggKi8KIApAQCAtMzQxLDcgKzM0NCw3IEBACiAJCQl1c2VyX3BydC0+c291cmNlX2luZGV4ID0gKHUzMikgb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7CiAJCX0gZWxzZSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiKFBSVFslWF0uc291cmNlX2luZGV4KSBOZWVkIEludGVnZXIsIGZvdW5kICVzIiwKKwkJCQkgICAgIihQUlRbJVhdLlNvdXJjZUluZGV4KSBOZWVkIEludGVnZXIsIGZvdW5kICVzIiwKIAkJCQkgICAgaW5kZXgsCiAJCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUob2JqX2Rlc2MpKSk7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX0RBVEEpOwpAQCAtMzUyLDcgKzM1NSw3IEBACiAJCXRvcF9vYmplY3RfbGlzdCsrOwogCX0KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIm91dHB1dF9idWZmZXIgJXAgTGVuZ3RoICVYXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIk91dHB1dEJ1ZmZlciAlcCBMZW5ndGggJVhcbiIsCiAJCQkgIG91dHB1dF9idWZmZXItPnBvaW50ZXIsICh1MzIpIG91dHB1dF9idWZmZXItPmxlbmd0aCkpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0zODIsOSArMzg1LDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9zaXplIGFtbF9zaXplX25lZWRlZCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19jcmVhdGVfYW1sX3Jlc291cmNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfY3JlYXRlX2FtbF9yZXNvdXJjZXMpOwogCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAibGlua2VkX2xpc3RfYnVmZmVyID0gJXBcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTGlua2VkTGlzdEJ1ZmZlciA9ICVwXG4iLAogCQkJICBsaW5rZWRfbGlzdF9idWZmZXIpKTsKIAogCS8qCkBAIC0zOTUsNyArMzk4LDcgQEAKIAkgKi8KIAlzdGF0dXMgPSBhY3BpX3JzX2dldF9hbWxfbGVuZ3RoKGxpbmtlZF9saXN0X2J1ZmZlciwgJmFtbF9zaXplX25lZWRlZCk7CiAKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJhbWxfc2l6ZV9uZWVkZWQ9JVgsICVzXG4iLAorCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkFtbFNpemVOZWVkZWQ9JVgsICVzXG4iLAogCQkJICAodTMyKSBhbWxfc2l6ZV9uZWVkZWQsCiAJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC00MTksNyArNDIyLDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAib3V0cHV0X2J1ZmZlciAlcCBMZW5ndGggJVhcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiT3V0cHV0QnVmZmVyICVwIExlbmd0aCAlWFxuIiwKIAkJCSAgb3V0cHV0X2J1ZmZlci0+cG9pbnRlciwgKHUzMikgb3V0cHV0X2J1ZmZlci0+bGVuZ3RoKSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNkdW1wLmMgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzZHVtcC5jCmluZGV4IGU3ZGUwNjEuLjljOTlhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2R1bXAuYwpAQCAtOTEsMTEgKzkxLDExIEBACiBzdHJ1Y3QgYWNwaV9yc2R1bXBfaW5mbyBhY3BpX3JzX2R1bXBfaXJxWzZdID0gewogCXtBQ1BJX1JTRF9USVRMRSwgQUNQSV9SU0RfVEFCTEVfU0laRShhY3BpX3JzX2R1bXBfaXJxKSwgIklSUSIsIE5VTEx9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGlycS50cmlnZ2VyaW5nKSwgIlRyaWdnZXJpbmciLAotCSBhY3BpX2dibF9IRWRlY29kZX0sCisJIGFjcGlfZ2JsX2hlX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoaXJxLnBvbGFyaXR5KSwgIlBvbGFyaXR5IiwKLQkgYWNwaV9nYmxfTExkZWNvZGV9LAorCSBhY3BpX2dibF9sbF9kZWNvZGV9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGlycS5zaGFyYWJsZSksICJTaGFyaW5nIiwKLQkgYWNwaV9nYmxfU0hSZGVjb2RlfSwKKwkgYWNwaV9nYmxfc2hyX2RlY29kZX0sCiAJe0FDUElfUlNEX1VJTlQ4LCBBQ1BJX1JTRF9PRkZTRVQoaXJxLmludGVycnVwdF9jb3VudCksCiAJICJJbnRlcnJ1cHQgQ291bnQiLCBOVUxMfSwKIAl7QUNQSV9SU0RfU0hPUlRMSVNULCBBQ1BJX1JTRF9PRkZTRVQoaXJxLmludGVycnVwdHNbMF0pLApAQCAtMTA1LDExICsxMDUsMTEgQEAKIHN0cnVjdCBhY3BpX3JzZHVtcF9pbmZvIGFjcGlfcnNfZHVtcF9kbWFbNl0gPSB7CiAJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9kbWEpLCAiRE1BIiwgTlVMTH0sCiAJe0FDUElfUlNEXzJCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoZG1hLnR5cGUpLCAiU3BlZWQiLAotCSBhY3BpX2dibF9UWVBkZWNvZGV9LAorCSBhY3BpX2dibF90eXBfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChkbWEuYnVzX21hc3RlciksICJNYXN0ZXJpbmciLAotCSBhY3BpX2dibF9CTWRlY29kZX0sCisJIGFjcGlfZ2JsX2JtX2RlY29kZX0sCiAJe0FDUElfUlNEXzJCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoZG1hLnRyYW5zZmVyKSwgIlRyYW5zZmVyIFR5cGUiLAotCSBhY3BpX2dibF9TSVpkZWNvZGV9LAorCSBhY3BpX2dibF9zaXpfZGVjb2RlfSwKIAl7QUNQSV9SU0RfVUlOVDgsIEFDUElfUlNEX09GRlNFVChkbWEuY2hhbm5lbF9jb3VudCksICJDaGFubmVsIENvdW50IiwKIAkgTlVMTH0sCiAJe0FDUElfUlNEX1NIT1JUTElTVCwgQUNQSV9SU0RfT0ZGU0VUKGRtYS5jaGFubmVsc1swXSksICJDaGFubmVsIExpc3QiLApAQCAtMTU4LDcgKzE1OCw3IEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9yc2R1bXBfaW5mbyBhY3BpX3JzX2R1bXBfZW5kX3RhZ1sxXSA9IHsKLQl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2VuZF90YWcpLCAiZW5kX3RhZyIsCisJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9lbmRfdGFnKSwgIkVuZFRhZyIsCiAJIE5VTEx9CiB9OwogCkBAIC0xNjYsNyArMTY2LDcgQEAKIAl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX21lbW9yeTI0KSwKIAkgIjI0LUJpdCBNZW1vcnkgUmFuZ2UiLCBOVUxMfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChtZW1vcnkyNC53cml0ZV9wcm90ZWN0KSwKLQkgIldyaXRlIFByb3RlY3QiLCBhY3BpX2dibF9SV2RlY29kZX0sCisJICJXcml0ZSBQcm90ZWN0IiwgYWNwaV9nYmxfcndfZGVjb2RlfSwKIAl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQobWVtb3J5MjQubWluaW11bSksICJBZGRyZXNzIE1pbmltdW0iLAogCSBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQobWVtb3J5MjQubWF4aW11bSksICJBZGRyZXNzIE1heGltdW0iLApAQCAtMTgxLDcgKzE4MSw3IEBACiAJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9tZW1vcnkzMiksCiAJICIzMi1CaXQgTWVtb3J5IFJhbmdlIiwgTlVMTH0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQobWVtb3J5MzIud3JpdGVfcHJvdGVjdCksCi0JICJXcml0ZSBQcm90ZWN0IiwgYWNwaV9nYmxfUldkZWNvZGV9LAorCSAiV3JpdGUgUHJvdGVjdCIsIGFjcGlfZ2JsX3J3X2RlY29kZX0sCiAJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKG1lbW9yeTMyLm1pbmltdW0pLCAiQWRkcmVzcyBNaW5pbXVtIiwKIAkgTlVMTH0sCiAJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKG1lbW9yeTMyLm1heGltdW0pLCAiQWRkcmVzcyBNYXhpbXVtIiwKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXtBQ1BJX1JTRF9USVRMRSwgQUNQSV9SU0RfVEFCTEVfU0laRShhY3BpX3JzX2R1bXBfZml4ZWRfbWVtb3J5MzIpLAogCSAiMzItQml0IEZpeGVkIE1lbW9yeSBSYW5nZSIsIE5VTEx9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGZpeGVkX21lbW9yeTMyLndyaXRlX3Byb3RlY3QpLAotCSAiV3JpdGUgUHJvdGVjdCIsIGFjcGlfZ2JsX1JXZGVjb2RlfSwKKwkgIldyaXRlIFByb3RlY3QiLCBhY3BpX2dibF9yd19kZWNvZGV9LAogCXtBQ1BJX1JTRF9VSU5UMzIsIEFDUElfUlNEX09GRlNFVChmaXhlZF9tZW1vcnkzMi5hZGRyZXNzKSwgIkFkZHJlc3MiLAogCSBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDMyLCBBQ1BJX1JTRF9PRkZTRVQoZml4ZWRfbWVtb3J5MzIuYWRkcmVzc19sZW5ndGgpLApAQCAtMjc4LDExICsyNzgsMTEgQEAKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChleHRlbmRlZF9pcnEucHJvZHVjZXJfY29uc3VtZXIpLAogCSAiVHlwZSIsIGFjcGlfZ2JsX2NvbnN1bWVfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChleHRlbmRlZF9pcnEudHJpZ2dlcmluZyksCi0JICJUcmlnZ2VyaW5nIiwgYWNwaV9nYmxfSEVkZWNvZGV9LAorCSAiVHJpZ2dlcmluZyIsIGFjcGlfZ2JsX2hlX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoZXh0ZW5kZWRfaXJxLnBvbGFyaXR5KSwgIlBvbGFyaXR5IiwKLQkgYWNwaV9nYmxfTExkZWNvZGV9LAorCSBhY3BpX2dibF9sbF9kZWNvZGV9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGV4dGVuZGVkX2lycS5zaGFyYWJsZSksICJTaGFyaW5nIiwKLQkgYWNwaV9nYmxfU0hSZGVjb2RlfSwKKwkgYWNwaV9nYmxfc2hyX2RlY29kZX0sCiAJe0FDUElfUlNEX1NPVVJDRSwgQUNQSV9SU0RfT0ZGU0VUKGV4dGVuZGVkX2lycS5yZXNvdXJjZV9zb3VyY2UpLCBOVUxMLAogCSBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDgsIEFDUElfUlNEX09GRlNFVChleHRlbmRlZF9pcnEuaW50ZXJydXB0X2NvdW50KSwKQEAgLTMxNCw3ICszMTQsNyBAQAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MucHJvZHVjZXJfY29uc3VtZXIpLAogCSAiQ29uc3VtZXIvUHJvZHVjZXIiLCBhY3BpX2dibF9jb25zdW1lX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzcy5kZWNvZGUpLCAiQWRkcmVzcyBEZWNvZGUiLAotCSBhY3BpX2dibF9ERUNkZWNvZGV9LAorCSBhY3BpX2dibF9kZWNfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLm1pbl9hZGRyZXNzX2ZpeGVkKSwKIAkgIk1pbiBSZWxvY2F0YWJpbGl0eSIsIGFjcGlfZ2JsX21pbl9kZWNvZGV9LAogCXtBQ1BJX1JTRF8xQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MubWF4X2FkZHJlc3NfZml4ZWQpLApAQCAtMzI1LDI0ICszMjUsMjQgQEAKIAl7QUNQSV9SU0RfTElURVJBTCwgQUNQSV9SU0RfVEFCTEVfU0laRShhY3BpX3JzX2R1bXBfbWVtb3J5X2ZsYWdzKSwKIAkgIlJlc291cmNlIFR5cGUiLCAodm9pZCAqKSJNZW1vcnkgUmFuZ2UifSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8ubWVtLndyaXRlX3Byb3RlY3QpLAotCSAiV3JpdGUgUHJvdGVjdCIsIGFjcGlfZ2JsX1JXZGVjb2RlfSwKKwkgIldyaXRlIFByb3RlY3QiLCBhY3BpX2dibF9yd19kZWNvZGV9LAogCXtBQ1BJX1JTRF8yQklURkxBRywgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MuaW5mby5tZW0uY2FjaGluZyksCi0JICJDYWNoaW5nIiwgYWNwaV9nYmxfTUVNZGVjb2RlfSwKKwkgIkNhY2hpbmciLCBhY3BpX2dibF9tZW1fZGVjb2RlfSwKIAl7QUNQSV9SU0RfMkJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8ubWVtLnJhbmdlX3R5cGUpLAotCSAiUmFuZ2UgVHlwZSIsIGFjcGlfZ2JsX01UUGRlY29kZX0sCisJICJSYW5nZSBUeXBlIiwgYWNwaV9nYmxfbXRwX2RlY29kZX0sCiAJe0FDUElfUlNEXzFCSVRGTEFHLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzcy5pbmZvLm1lbS50cmFuc2xhdGlvbiksCi0JICJUcmFuc2xhdGlvbiIsIGFjcGlfZ2JsX1RUUGRlY29kZX0KKwkgIlRyYW5zbGF0aW9uIiwgYWNwaV9nYmxfdHRwX2RlY29kZX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9yc2R1bXBfaW5mbyBhY3BpX3JzX2R1bXBfaW9fZmxhZ3NbNF0gPSB7CiAJe0FDUElfUlNEX0xJVEVSQUwsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2lvX2ZsYWdzKSwKIAkgIlJlc291cmNlIFR5cGUiLCAodm9pZCAqKSJJL08gUmFuZ2UifSwKIAl7QUNQSV9SU0RfMkJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8uaW8ucmFuZ2VfdHlwZSksCi0JICJSYW5nZSBUeXBlIiwgYWNwaV9nYmxfUk5HZGVjb2RlfSwKKwkgIlJhbmdlIFR5cGUiLCBhY3BpX2dibF9ybmdfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8uaW8udHJhbnNsYXRpb24pLAotCSAiVHJhbnNsYXRpb24iLCBhY3BpX2dibF9UVFBkZWNvZGV9LAorCSAiVHJhbnNsYXRpb24iLCBhY3BpX2dibF90dHBfZGVjb2RlfSwKIAl7QUNQSV9SU0RfMUJJVEZMQUcsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzLmluZm8uaW8udHJhbnNsYXRpb25fdHlwZSksCi0JICJUcmFuc2xhdGlvbiBUeXBlIiwgYWNwaV9nYmxfVFJTZGVjb2RlfQorCSAiVHJhbnNsYXRpb24gVHlwZSIsIGFjcGlfZ2JsX3Ryc19kZWNvZGV9CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2luZm8uYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNpbmZvLmMKaW5kZXggZDlhZTY0Yi4uOWU3YWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2luZm8uYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzaW5mby5jCkBAIC0xNDEsNiArMTQxLDcgQEAKIAlhY3BpX3JzX2R1bXBfZ2VuZXJpY19yZWcsCS8qIEFDUElfUkVTT1VSQ0VfVFlQRV9HRU5FUklDX1JFR0lTVEVSICovCiB9OwogI2VuZGlmCisKICNlbmRpZgkvKiBBQ1BJX0ZVVFVSRV9VU0FHRSAqLwogLyoKICAqIEJhc2Ugc2l6ZXMgZm9yIGV4dGVybmFsIEFNTCByZXNvdXJjZSBkZXNjcmlwdG9ycywgaW5kZXhlZCBieSBpbnRlcm5hbCB0eXBlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2xpc3QuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNsaXN0LmMKaW5kZXggMTQzNGU3OC4uMjk0MjNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2xpc3QuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbGlzdC5jCkBAIC01MSw3NiArNTEsNjIgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgQW1sICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIHJlc291cmNlIGJ5dGUgc3RyZWFtCi0gKiAgICAgICAgICAgICAgYW1sX2xlbmd0aCAgICAgICAgICAtIExlbmd0aCBvZiBBbWwKLSAqICAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyICAgICAgIC0gUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBvdXRwdXQgc3RydWN0dXJlcworICogUEFSQU1FVEVSUzogIGFjcGlfd2Fsa19hbWxfY2FsbGJhY2sKKyAqICAgICAgICAgICAgICByZXNvdXJjZV9wdHIgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIG91dHB1dCBzdHJ1Y3R1cmVzCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBUYWtlcyB0aGUgcmVzb3VyY2UgYnl0ZSBzdHJlYW0gYW5kIHBhcnNlcyBpdCwgY3JlYXRpbmcgYQotICogICAgICAgICAgICAgIGxpbmtlZCBsaXN0IG9mIHJlc291cmNlcyBpbiB0aGUgY2FsbGVyJ3Mgb3V0cHV0IGJ1ZmZlcgorICogREVTQ1JJUFRJT046IENvbnZlcnQgYW4gQU1MIHJlc291cmNlIHRvIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICogICAgICAgICAgICAgIHJlc291cmNlIHRoYXQgaXMgYWxpZ25lZCBhbmQgZWFzaWVyIHRvIGFjY2Vzcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYWNwaV9zdGF0dXMKLWFjcGlfcnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2VzKHU4ICogYW1sLCB1MzIgYW1sX2xlbmd0aCwgdTggKiBvdXRwdXRfYnVmZmVyKQorYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXModTggKiBhbWwsCisJCQkJIHUzMiBsZW5ndGgsCisJCQkJIHUzMiBvZmZzZXQsIHU4IHJlc291cmNlX2luZGV4LCB2b2lkICoqY29udGV4dCkKIHsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UgPSAodm9pZCAqKW91dHB1dF9idWZmZXI7CisJc3RydWN0IGFjcGlfcmVzb3VyY2UgKipyZXNvdXJjZV9wdHIgPQorCSAgICBBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCBjb250ZXh0KTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXU4IHJlc291cmNlX2luZGV4OwotCXU4ICplbmRfYW1sOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2VzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXMpOwogCi0JZW5kX2FtbCA9IGFtbCArIGFtbF9sZW5ndGg7Ci0KLQkvKiBMb29wIHVudGlsIGVuZC1vZi1idWZmZXIgb3IgYW4gZW5kX3RhZyBpcyBmb3VuZCAqLwotCi0Jd2hpbGUgKGFtbCA8IGVuZF9hbWwpIHsKLQkJLyogVmFsaWRhdGUgdGhlIFJlc291cmNlIFR5cGUgYW5kIFJlc291cmNlIExlbmd0aCAqLwotCi0JCXN0YXR1cyA9IGFjcGlfdXRfdmFsaWRhdGVfcmVzb3VyY2UoYW1sLCAmcmVzb3VyY2VfaW5kZXgpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0KLQkJLyogQ29udmVydCB0aGUgQU1MIGJ5dGUgc3RyZWFtIHJlc291cmNlIHRvIGEgbG9jYWwgcmVzb3VyY2Ugc3RydWN0ICovCi0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfcnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2UocmVzb3VyY2UsCi0JCQkJCQkgICAgQUNQSV9DQVNUX1BUUih1bmlvbgotCQkJCQkJCQkgIGFtbF9yZXNvdXJjZSwKLQkJCQkJCQkJICBhbWwpLAotCQkJCQkJICAgIGFjcGlfZ2JsX2dldF9yZXNvdXJjZV9kaXNwYXRjaAotCQkJCQkJICAgIFtyZXNvdXJjZV9pbmRleF0pOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCi0JCQkJCSJDb3VsZCBub3QgY29udmVydCBBTUwgcmVzb3VyY2UgKFR5cGUgJVgpIiwKLQkJCQkJKmFtbCkpOwotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KLQotCQkvKiBOb3JtYWwgZXhpdCBvbiBjb21wbGV0aW9uIG9mIGFuIGVuZF90YWcgcmVzb3VyY2UgZGVzY3JpcHRvciAqLwotCi0JCWlmIChhY3BpX3V0X2dldF9yZXNvdXJjZV90eXBlKGFtbCkgPT0KLQkJICAgIEFDUElfUkVTT1VSQ0VfTkFNRV9FTkRfVEFHKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCQl9Ci0KLQkJLyogUG9pbnQgdG8gdGhlIG5leHQgaW5wdXQgQU1MIHJlc291cmNlICovCi0KLQkJYW1sICs9IGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbGVuZ3RoKGFtbCk7Ci0KLQkJLyogUG9pbnQgdG8gdGhlIG5leHQgc3RydWN0dXJlIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCi0KLQkJcmVzb3VyY2UgPQotCQkgICAgQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCByZXNvdXJjZSwKLQkJCQkgcmVzb3VyY2UtPmxlbmd0aCk7CisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBpbnB1dCBidWZmZXIgYW5kIGFsbCBzdWJzZXF1ZW50IHBvaW50ZXJzIGludG8gaXQKKwkgKiBhcmUgYWxpZ25lZCBvbiBhIG5hdGl2ZSB3b3JkIGJvdW5kYXJ5LiBNb3N0IGltcG9ydGFudCBvbiBJQTY0CisJICovCisJcmVzb3VyY2UgPSAqcmVzb3VyY2VfcHRyOworCWlmIChBQ1BJX0lTX01JU0FMSUdORUQocmVzb3VyY2UpKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICJNaXNhbGlnbmVkIHJlc291cmNlIHBvaW50ZXIgJXAiLCByZXNvdXJjZSkpOwogCX0KIAotCS8qIERpZCBub3QgZmluZCBhbiBlbmRfdGFnIHJlc291cmNlIGRlc2NyaXB0b3IgKi8KKwkvKiBDb252ZXJ0IHRoZSBBTUwgYnl0ZSBzdHJlYW0gcmVzb3VyY2UgdG8gYSBsb2NhbCByZXNvdXJjZSBzdHJ1Y3QgKi8KIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyk7CisJc3RhdHVzID0KKwkgICAgYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZShyZXNvdXJjZSwKKwkJCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYW1sX3Jlc291cmNlLAorCQkJCQkJCSAgYW1sKSwKKwkJCQkJICAgIGFjcGlfZ2JsX2dldF9yZXNvdXJjZV9kaXNwYXRjaAorCQkJCQkgICAgW3Jlc291cmNlX2luZGV4XSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIkNvdWxkIG5vdCBjb252ZXJ0IEFNTCByZXNvdXJjZSAoVHlwZSAlWCkiLAorCQkJCSphbWwpKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9SRVNPVVJDRVMsCisJCQkgICJUeXBlICUuMlgsIEFtbExlbmd0aCAlLjJYIEludGVybmFsTGVuZ3RoICUuMlhcbiIsCisJCQkgIGFjcGlfdXRfZ2V0X3Jlc291cmNlX3R5cGUoYW1sKSwgbGVuZ3RoLAorCQkJICByZXNvdXJjZS0+bGVuZ3RoKSk7CisKKwkvKiBQb2ludCB0byB0aGUgbmV4dCBzdHJ1Y3R1cmUgaW4gdGhlIG91dHB1dCBidWZmZXIgKi8KKworCSpyZXNvdXJjZV9wdHIgPSBBQ1BJX0FERF9QVFIodm9pZCwgcmVzb3VyY2UsIHJlc291cmNlLT5sZW5ndGgpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNTAsMTEgKzEzNiwxMiBAQAogCXU4ICplbmRfYW1sID0gb3V0cHV0X2J1ZmZlciArIGFtbF9zaXplX25lZWRlZDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19jb252ZXJ0X3Jlc291cmNlc190b19hbWwiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2NvbnZlcnRfcmVzb3VyY2VzX3RvX2FtbCk7CiAKIAkvKiBXYWxrIHRoZSByZXNvdXJjZSBkZXNjcmlwdG9yIGxpc3QsIGNvbnZlcnQgZWFjaCBkZXNjcmlwdG9yICovCiAKIAl3aGlsZSAoYW1sIDwgZW5kX2FtbCkgeworCiAJCS8qIFZhbGlkYXRlIHRoZSAoaW50ZXJuYWwpIFJlc291cmNlIFR5cGUgKi8KIAogCQlpZiAocmVzb3VyY2UtPnR5cGUgPiBBQ1BJX1JFU09VUkNFX1RZUEVfTUFYKSB7CkBAIC0xOTEsNiArMTc4LDcgQEAKIAkJLyogQ2hlY2sgZm9yIGVuZC1vZi1saXN0LCBub3JtYWwgZXhpdCAqLwogCiAJCWlmIChyZXNvdXJjZS0+dHlwZSA9PSBBQ1BJX1JFU09VUkNFX1RZUEVfRU5EX1RBRykgeworCiAJCQkvKiBBbiBFbmQgVGFnIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBSZXNvdXJjZSBUZW1wbGF0ZSAqLwogCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc21pc2MuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNtaXNjLmMKaW5kZXggZWQ4NjZjZi4uZmFmNmUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc21pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbWlzYy5jCkBAIC04MSw5ICs4MSwxMCBAQAogCXUxNiBpdGVtX2NvdW50ID0gMDsKIAl1MTYgdGVtcDE2ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9yZXNvdXJjZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfY29udmVydF9hbWxfdG9fcmVzb3VyY2UpOwogCiAJaWYgKCgoYWNwaV9uYXRpdmVfdWludCkgcmVzb3VyY2UpICYgMHgzKSB7CisKIAkJLyogRWFjaCBpbnRlcm5hbCByZXNvdXJjZSBzdHJ1Y3QgaXMgZXhwZWN0ZWQgdG8gYmUgMzItYml0IGFsaWduZWQgKi8KIAogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCkBAIC0yOTUsOSArMjk2LDExIEBACiAKICAgICAgIGV4aXQ6CiAJaWYgKCFmbGFnc19tb2RlKSB7Ci0JCS8qIFJvdW5kIHRoZSByZXNvdXJjZSBzdHJ1Y3QgbGVuZ3RoIHVwIHRvIHRoZSBuZXh0IDMyLWJpdCBib3VuZGFyeSAqLwogCi0JCXJlc291cmNlLT5sZW5ndGggPSBBQ1BJX1JPVU5EX1VQX3RvXzMyX2JJVFMocmVzb3VyY2UtPmxlbmd0aCk7CisJCS8qIFJvdW5kIHRoZSByZXNvdXJjZSBzdHJ1Y3QgbGVuZ3RoIHVwIHRvIHRoZSBuZXh0IGJvdW5kYXJ5ICgzMiBvciA2NCkgKi8KKworCQlyZXNvdXJjZS0+bGVuZ3RoID0KKwkJICAgICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQocmVzb3VyY2UtPmxlbmd0aCk7CiAJfQogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CkBAIC0zMjksNyArMzMyLDcgQEAKIAl1MTYgdGVtcDE2ID0gMDsKIAl1MTYgaXRlbV9jb3VudCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJyc19jb252ZXJ0X3Jlc291cmNlX3RvX2FtbCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfY29udmVydF9yZXNvdXJjZV90b19hbWwpOwogCiAJLyoKIAkgKiBGaXJzdCB0YWJsZSBlbnRyeSBtdXN0IGJlIEFDUElfUlNDX0lOSVR4eHggYW5kIG11c3QgY29udGFpbiB0aGUKQEAgLTUzNSw2ICs1MzgsNyBAQAogCiByZXNvdXJjZS0+ZGF0YS5leHRlbmRlZF9pcnEuaW50ZXJydXB0X2NvdW50ID0gdGVtcDg7CiBpZiAodGVtcDggPCAxKSB7CisKIAkvKiBNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIElSUSAqLwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9CQURfUkVTT1VSQ0VfTEVOR1RIKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnN1dGlscy5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMKaW5kZXggMjViNWFlZC4uYTljYmVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMKQEAgLTIwNSw2ICsyMDUsNyBAQAogCS8qIExlbmd0aCBpcyBzdG9yZWQgZGlmZmVyZW50bHkgZm9yIGxhcmdlIGFuZCBzbWFsbCBkZXNjcmlwdG9ycyAqLwogCiAJaWYgKGFtbC0+c21hbGxfaGVhZGVyLmRlc2NyaXB0b3JfdHlwZSAmIEFDUElfUkVTT1VSQ0VfTkFNRV9MQVJHRSkgeworCiAJCS8qIExhcmdlIGRlc2NyaXB0b3IgLS0gYnl0ZXMgMS0yIGNvbnRhaW4gdGhlIDE2LWJpdCBsZW5ndGggKi8KIAogCQlBQ1BJX01PVkVfMTZfVE9fMTYoJmFtbC0+bGFyZ2VfaGVhZGVyLnJlc291cmNlX2xlbmd0aCwKQEAgLTI5OCw3ICsyOTksOCBAQAogICogICAgICAgICAgICAgIHN0cmluZ19wdHIgICAgICAgICAgLSAob3B0aW9uYWwpIHdoZXJlIHRvIHN0b3JlIHRoZSBhY3R1YWwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc291cmNlIHN0cmluZwogICoKLSAqIFJFVFVSTjogICAgICBMZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIE5VTEwgdGVybWluYXRvciwgcm91bmRlZCB1cCB0byAzMiBiaXQKKyAqIFJFVFVSTjogICAgICBMZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIE5VTEwgdGVybWluYXRvciwgcm91bmRlZCB1cCB0byBuYXRpdmUKKyAqICAgICAgICAgICAgICB3b3JkIGJvdW5kYXJ5CiAgKgogICogREVTQ1JJUFRJT046IENvcHkgdGhlIG9wdGlvbmFsIHJlc291cmNlX3NvdXJjZSBkYXRhIGZyb20gYSByYXcgQU1MIGRlc2NyaXB0b3IKICAqICAgICAgICAgICAgICB0byBhbiBpbnRlcm5hbCByZXNvdXJjZSBkZXNjcmlwdG9yCkBAIC0zMjgsNiArMzMwLDcgQEAKIAkgKiB3ZSBhZGQgMSB0byB0aGUgbWluaW11bSBsZW5ndGguCiAJICovCiAJaWYgKHRvdGFsX2xlbmd0aCA+IChhY3BpX3JzZGVzY19zaXplKSAobWluaW11bV9sZW5ndGggKyAxKSkgeworCiAJCS8qIEdldCB0aGUgcmVzb3VyY2Vfc291cmNlX2luZGV4ICovCiAKIAkJcmVzb3VyY2Vfc291cmNlLT5pbmRleCA9IGFtbF9yZXNvdXJjZV9zb3VyY2VbMF07CkBAIC0zNDQsMjMgKzM0NywyNiBAQAogCQl9CiAKIAkJLyoKLQkJICogSW4gb3JkZXIgZm9yIHRoZSBzdHJ1Y3Rfc2l6ZSB0byBmYWxsIG9uIGEgMzItYml0IGJvdW5kYXJ5LCBjYWxjdWxhdGUKLQkJICogdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICgrMSBmb3IgdGhlIE5VTEwgdGVybWluYXRvcikgYW5kIGV4cGFuZCB0aGUKLQkJICogc3RydWN0X3NpemUgdG8gdGhlIG5leHQgMzItYml0IGJvdW5kYXJ5LgorCQkgKiBJbiBvcmRlciBmb3IgdGhlIFJlc291cmNlIGxlbmd0aCB0byBiZSBhIG11bHRpcGxlIG9mIHRoZSBuYXRpdmUKKwkJICogd29yZCwgY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAoKzEgZm9yIE5VTEwgdGVybWluYXRvcikKKwkJICogYW5kIGV4cGFuZCB0byB0aGUgbmV4dCB3b3JkIG11bHRpcGxlLgogCQkgKgogCQkgKiBaZXJvIHRoZSBlbnRpcmUgYXJlYSBvZiB0aGUgYnVmZmVyLgogCQkgKi8KIAkJdG90YWxfbGVuZ3RoID0KLQkJICAgIEFDUElfUk9VTkRfVVBfdG9fMzJfYklUUyhBQ1BJX1NUUkxFTgotCQkJCQkgICAgICgoY2hhciAqKSZhbWxfcmVzb3VyY2Vfc291cmNlWzFdKSArCi0JCQkJCSAgICAgMSk7CisJCSAgICAodTMyKQorCQkgICAgQUNQSV9TVFJMRU4oQUNQSV9DQVNUX1BUUihjaGFyLCAmYW1sX3Jlc291cmNlX3NvdXJjZVsxXSkpICsKKwkJICAgIDE7CisJCXRvdGFsX2xlbmd0aCA9ICh1MzIpIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQodG90YWxfbGVuZ3RoKTsKKwogCQlBQ1BJX01FTVNFVChyZXNvdXJjZV9zb3VyY2UtPnN0cmluZ19wdHIsIDAsIHRvdGFsX2xlbmd0aCk7CiAKIAkJLyogQ29weSB0aGUgcmVzb3VyY2Vfc291cmNlIHN0cmluZyB0byB0aGUgZGVzdGluYXRpb24gKi8KIAogCQlyZXNvdXJjZV9zb3VyY2UtPnN0cmluZ19sZW5ndGggPQogCQkgICAgYWNwaV9yc19zdHJjcHkocmVzb3VyY2Vfc291cmNlLT5zdHJpbmdfcHRyLAotCQkJCSAgIChjaGFyICopJmFtbF9yZXNvdXJjZV9zb3VyY2VbMV0pOworCQkJCSAgIEFDUElfQ0FTVF9QVFIoY2hhciwKKwkJCQkJCSAmYW1sX3Jlc291cmNlX3NvdXJjZVsxXSkpOwogCiAJCXJldHVybiAoKGFjcGlfcnNfbGVuZ3RoKSB0b3RhbF9sZW5ndGgpOwogCX0KQEAgLTQwNSw2ICs0MTEsNyBAQAogCS8qIE5vbi16ZXJvIHN0cmluZyBsZW5ndGggaW5kaWNhdGVzIHByZXNlbmNlIG9mIGEgcmVzb3VyY2Vfc291cmNlICovCiAKIAlpZiAocmVzb3VyY2Vfc291cmNlLT5zdHJpbmdfbGVuZ3RoKSB7CisKIAkJLyogUG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgQU1MIGRlc2NyaXB0b3IgKi8KIAogCQlhbWxfcmVzb3VyY2Vfc291cmNlID0gQUNQSV9BRERfUFRSKHU4LCBhbWwsIG1pbmltdW1fbGVuZ3RoKTsKQEAgLTQxNSw3ICs0MjIsNyBAQAogCiAJCS8qIENvcHkgdGhlIHJlc291cmNlX3NvdXJjZSBzdHJpbmcgKi8KIAotCQlBQ1BJX1NUUkNQWSgoY2hhciAqKSZhbWxfcmVzb3VyY2Vfc291cmNlWzFdLAorCQlBQ1BJX1NUUkNQWShBQ1BJX0NBU1RfUFRSKGNoYXIsICZhbWxfcmVzb3VyY2Vfc291cmNlWzFdKSwKIAkJCSAgICByZXNvdXJjZV9zb3VyY2UtPnN0cmluZ19wdHIpOwogCiAJCS8qCkBAIC00MzUsOSArNDQyLDkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19nZXRfcHJ0X21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cworICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgICAtIERldmljZSBub2RlCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtNDUwLDE4ICs0NTcsMTkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9wcnRfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKiByZXRfYnVmZmVyKQorYWNwaV9yc19nZXRfcHJ0X21ldGhvZF9kYXRhKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICogbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKiByZXRfYnVmZmVyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9wcnRfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2dldF9wcnRfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCiAJLyogRXhlY3V0ZSB0aGUgbWV0aG9kLCBubyBwYXJhbWV0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19QUlQsCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3Qobm9kZSwgTUVUSE9EX05BTUVfX1BSVCwKIAkJCQkJIEFDUElfQlRZUEVfUEFDS0FHRSwgJm9ial9kZXNjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC00ODMsOSArNDkxLDkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19nZXRfY3JzX21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cworICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgICAgICAtIERldmljZSBub2RlCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtNDk4LDE4ICs1MDYsMTkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpCithY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9jcnNfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2dldF9jcnNfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCiAJLyogRXhlY3V0ZSB0aGUgbWV0aG9kLCBubyBwYXJhbWV0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19DUlMsCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3Qobm9kZSwgTUVUSE9EX05BTUVfX0NSUywKIAkJCQkJIEFDUElfQlRZUEVfQlVGRkVSLCAmb2JqX2Rlc2MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTUyMiw3ICs1MzEsNyBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfcnNfY3JlYXRlX3Jlc291cmNlX2xpc3Qob2JqX2Rlc2MsIHJldF9idWZmZXIpOwogCi0JLyogb24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIG9iamVjdCByZXR1cm5lZCBieSBldmFsdWF0ZV9vYmplY3QgKi8KKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGV2YWx1YXRlX29iamVjdCAqLwogCiAJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTUzMiw5ICs1NDEsOSBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEKICAqCi0gKiBQQVJBTUVURVJTOiAgSGFuZGxlICAgICAgICAgIC0gYSBoYW5kbGUgdG8gdGhlIGNvbnRhaW5pbmcgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gYSBwb2ludGVyIHRvIGEgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzCisgKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgIC0gRGV2aWNlIG5vZGUKKyAqICAgICAgICAgICAgICByZXRfYnVmZmVyICAgICAgLSBQb2ludGVyIHRvIGEgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cwogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC01NDgsMTggKzU1NywxOSBAQAogCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpCithY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX2dldF9wcnNfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX2dldF9wcnNfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCiAJLyogRXhlY3V0ZSB0aGUgbWV0aG9kLCBubyBwYXJhbWV0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19QUlMsCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3Qobm9kZSwgTUVUSE9EX05BTUVfX1BSUywKIAkJCQkJIEFDUElfQlRZUEVfQlVGRkVSLCAmb2JqX2Rlc2MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTU3Miw3ICs1ODIsNyBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfcnNfY3JlYXRlX3Jlc291cmNlX2xpc3Qob2JqX2Rlc2MsIHJldF9idWZmZXIpOwogCi0JLyogb24gZXhpdCwgd2UgbXVzdCBkZWxldGUgdGhlIG9iamVjdCByZXR1cm5lZCBieSBldmFsdWF0ZV9vYmplY3QgKi8KKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGV2YWx1YXRlX29iamVjdCAqLwogCiAJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTU4MywxMCArNTkzLDEwIEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcnNfZ2V0X21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAorICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIEhhbmRsZSB0byB0aGUgY29udGFpbmluZyBvYmplY3QKICAqICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgLSBQYXRoIHRvIG1ldGhvZCwgcmVsYXRpdmUgdG8gSGFuZGxlCi0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gYSBwb2ludGVyIHRvIGEgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtNjA1LDcgKzYxNSw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgicnNfZ2V0X21ldGhvZF9kYXRhIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShyc19nZXRfbWV0aG9kX2RhdGEpOwogCiAJLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLwogCkBAIC02MzQsOSArNjQ0LDkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIGEgaGFuZGxlIHRvIHRoZSBjb250YWluaW5nIG9iamVjdAotICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBzdHJ1Y3R1cmUgb2YgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIKKyAqIFBBUkFNRVRFUlM6ICBOb2RlICAgICAgICAgICAgLSBEZXZpY2Ugbm9kZQorICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIFBvaW50ZXIgdG8gYSBidWZmZXIgc3RydWN0dXJlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcgogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC02NDYsMjMgKzY1NiwzNyBAQAogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZAogICogICAgICAgICAgICAgIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIGNhbGxlcnMgYnVmZmVyIGlzIHVuZGVmaW5lZC4KICAqCisgKiBOb3RlOiBQYXJhbWV0ZXJzIGd1YXJhbnRlZWQgdmFsaWQgYnkgY2FsbGVyCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfcnNfc2V0X3Nyc19tZXRob2RfZGF0YShhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqaW5fYnVmZmVyKQorYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqaW5fYnVmZmVyKQogewotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGFyYW1zWzJdOworCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYXJnc1syXTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJzX3NldF9zcnNfbWV0aG9kX2RhdGEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHJzX3NldF9zcnNfbWV0aG9kX2RhdGEpOwogCi0JLyogUGFyYW1ldGVycyBndWFyYW50ZWVkIHZhbGlkIGJ5IGNhbGxlciAqLworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBldmFsdWF0aW9uIGluZm9ybWF0aW9uIGJsb2NrICovCisKKwlpbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8pKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJfQorCisJaW5mby0+cHJlZml4X25vZGUgPSBub2RlOworCWluZm8tPnBhdGhuYW1lID0gTUVUSE9EX05BTUVfX1NSUzsKKwlpbmZvLT5wYXJhbWV0ZXJzID0gYXJnczsKKwlpbmZvLT5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwlpbmZvLT5mbGFncyA9IEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRTsKIAogCS8qCiAJICogVGhlIGluX2J1ZmZlciBwYXJhbWV0ZXIgd2lsbCBwb2ludCB0byBhIGxpbmtlZCBsaXN0IG9mCi0JICogcmVzb3VyY2UgcGFyYW1ldGVycy4gIEl0IG5lZWRzIHRvIGJlIGZvcm1hdHRlZCBpbnRvIGEKKwkgKiByZXNvdXJjZSBwYXJhbWV0ZXJzLiBJdCBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgaW50byBhCiAJICogYnl0ZSBzdHJlYW0gdG8gYmUgc2VudCBpbiBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIgdG8gX1NSUwogCSAqCiAJICogQ29udmVydCB0aGUgbGlua2VkIGxpc3QgaW50byBhIGJ5dGUgc3RyZWFtCkBAIC02NzAsNDEgKzY5NCwzNiBAQAogCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0xPQ0FMX0JVRkZFUjsKIAlzdGF0dXMgPSBhY3BpX3JzX2NyZWF0ZV9hbWxfcmVzb3VyY2VzKGluX2J1ZmZlci0+cG9pbnRlciwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JLyogSW5pdCB0aGUgcGFyYW0gb2JqZWN0ICovCisJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBtZXRob2QgcGFyYW1ldGVyIG9iamVjdCAqLwogCi0JcGFyYW1zWzBdID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9CVUZGRVIpOwotCWlmICghcGFyYW1zWzBdKSB7Ci0JCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCWFyZ3NbMF0gPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9UWVBFX0JVRkZFUik7CisJaWYgKCFhcmdzWzBdKSB7CisJCS8qCisJCSAqIE11c3QgZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBhYm92ZSAob3RoZXJ3aXNlIGl0IGlzIGZyZWVkCisJCSAqIGxhdGVyKQorCQkgKi8KKwkJQUNQSV9GUkVFKGJ1ZmZlci5wb2ludGVyKTsKKwkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOworCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JLyogU2V0IHVwIHRoZSBwYXJhbWV0ZXIgb2JqZWN0ICovCisJYXJnc1swXS0+YnVmZmVyLmxlbmd0aCA9ICh1MzIpIGJ1ZmZlci5sZW5ndGg7CisJYXJnc1swXS0+YnVmZmVyLnBvaW50ZXIgPSBidWZmZXIucG9pbnRlcjsKKwlhcmdzWzBdLT5jb21tb24uZmxhZ3MgPSBBT1BPQkpfREFUQV9WQUxJRDsKKwlhcmdzWzFdID0gTlVMTDsKIAotCXBhcmFtc1swXS0+YnVmZmVyLmxlbmd0aCA9ICh1MzIpIGJ1ZmZlci5sZW5ndGg7Ci0JcGFyYW1zWzBdLT5idWZmZXIucG9pbnRlciA9IGJ1ZmZlci5wb2ludGVyOwotCXBhcmFtc1swXS0+Y29tbW9uLmZsYWdzID0gQU9QT0JKX0RBVEFfVkFMSUQ7Ci0JcGFyYW1zWzFdID0gTlVMTDsKKwkvKiBFeGVjdXRlIHRoZSBtZXRob2QsIG5vIHJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCAqLwogCi0JaW5mby5ub2RlID0gaGFuZGxlOwotCWluZm8ucGFyYW1ldGVycyA9IHBhcmFtczsKLQlpbmZvLnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOworCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CiAKLQkvKiBFeGVjdXRlIHRoZSBtZXRob2QsIG5vIHJldHVybiB2YWx1ZSAqLworCS8qIENsZWFuIHVwIGFuZCByZXR1cm4gdGhlIHN0YXR1cyBmcm9tIGFjcGlfbnNfZXZhbHVhdGUgKi8KIAotCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfcmVsYXRpdmUoTUVUSE9EX05BTUVfX1NSUywgJmluZm8pOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkvKiBEZWxldGUgYW55IHJldHVybiBvYmplY3QgKGVzcGVjaWFsbHkgaWYgaW1wbGljaXRfcmV0dXJuIGlzIGVuYWJsZWQpICovCisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGFyZ3NbMF0pOwogCi0JCWlmIChpbmZvLnJldHVybl9vYmplY3QpIHsKLQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLnJldHVybl9vYmplY3QpOwotCQl9Ci0JfQotCi0JLyogQ2xlYW4gdXAgYW5kIHJldHVybiB0aGUgc3RhdHVzIGZyb20gYWNwaV9uc19ldmFsdWF0ZV9yZWxhdGl2ZSAqLwotCi0JYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHBhcmFtc1swXSk7CisgICAgICBjbGVhbnVwOgorCUFDUElfRlJFRShpbmZvKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKaW5kZXggODhiNjcwNy4uMTk5OWUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKQEAgLTQxLDEwICs0MSw5IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3Jlc3JjLmg+CisjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9SRVNPVVJDRVMKIEFDUElfTU9EVUxFX05BTUUoInJzeGZhY2UiKQpAQCAtNjgsMTkgKzY3LDgwIEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfcnNfbWF0Y2hfdmVuZG9yX3Jlc291cmNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCk7CiAKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9yc192YWxpZGF0ZV9wYXJhbWV0ZXJzKGFjcGlfaGFuZGxlIGRldmljZV9oYW5kbGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpidWZmZXIsCisJCQkgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXR1cm5fbm9kZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycworICoKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgdG8gYSBkZXZpY2UKKyAqICAgICAgICAgICAgICBCdWZmZXIgICAgICAgICAgLSBQb2ludGVyIHRvIGEgZGF0YSBidWZmZXIKKyAqICAgICAgICAgICAgICByZXR1cm5fbm9kZSAgICAgLSBQb2ludGVyIHRvIHdoZXJlIHRoZSBkZXZpY2Ugbm9kZSBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ29tbW9uIHBhcmFtZXRlciB2YWxpZGF0aW9uIGZvciByZXNvdXJjZSBpbnRlcmZhY2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX3JzX3ZhbGlkYXRlX3BhcmFtZXRlcnMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldHVybl9ub2RlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UocnNfdmFsaWRhdGVfcGFyYW1ldGVycyk7CisKKwkvKgorCSAqIE11c3QgaGF2ZSBhIHZhbGlkIGhhbmRsZSB0byBhbiBBQ1BJIGRldmljZQorCSAqLworCWlmICghZGV2aWNlX2hhbmRsZSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGRldmljZV9oYW5kbGUpOworCWlmICghbm9kZSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJaWYgKG5vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfVFlQRSk7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgdXNlciBidWZmZXIgb2JqZWN0CisJICoKKwkgKiBpZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGJ1ZmZlciBsZW5ndGggd2UgYWxzbyBuZWVkIGEgdmFsaWQgcG9pbnRlciBpbgorCSAqIHRoZSBidWZmZXIuIElmIGl0J3MgYSB6ZXJvIGJ1ZmZlciBsZW5ndGgsIHdlJ2xsIGJlIHJldHVybmluZyB0aGUKKwkgKiBuZWVkZWQgYnVmZmVyIHNpemUgKGxhdGVyKSwgc28ga2VlcCBnb2luZy4KKwkgKi8KKwlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX2J1ZmZlcihidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkqcmV0dXJuX25vZGUgPSBub2RlOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2lycV9yb3V0aW5nX3RhYmxlCiAgKgotICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIGEgaGFuZGxlIHRvIHRoZSBCdXMgZGV2aWNlIHdlIGFyZSBxdWVyeWluZwotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZQorICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIEhhbmRsZSB0byB0aGUgQnVzIGRldmljZSB3ZSBhcmUgcXVlcnlpbmcKKyAqICAgICAgICAgICAgICByZXRfYnVmZmVyICAgICAgLSBQb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCByZXNvdXJjZXMgZm9yIHRoZSBkZXZpY2UKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGdldCB0aGUgSVJRIHJvdXRpbmcgdGFibGUgZm9yIGEKLSAqICAgICAgICAgICAgICBzcGVjaWZpYyBidXMuICBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgZGVzaXJlZCBidXMuICBUaGUgcm91dGluZSB0YWJsZSBpcyBwbGFjZWQgaW4gdGhlIGJ1ZmZlciBwb2ludGVkCisgKiAgICAgICAgICAgICAgc3BlY2lmaWMgYnVzLiBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IgdGhlCisgKiAgICAgICAgICAgICAgZGVzaXJlZCBidXMuIFRoZSByb3V0aW5lIHRhYmxlIGlzIHBsYWNlZCBpbiB0aGUgYnVmZmVyIHBvaW50ZWQKICAqICAgICAgICAgICAgICB0byBieSB0aGUgcmV0X2J1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXIuCiAgKgogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZApAQCAtOTYsNDIgKzE1NiwzNyBAQAogCQkJICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2lycV9yb3V0aW5nX3RhYmxlICIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfaXJxX3JvdXRpbmdfdGFibGUpOwogCi0JLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBoYW5kbGUgYW5kIGJ1ZmZlciwgU28gd2UgaGF2ZSB0byBoYXZlIGEgaGFuZGxlCi0JICogYW5kIGEgcmV0dXJuIGJ1ZmZlciBzdHJ1Y3R1cmUsIGFuZCBpZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGJ1ZmZlciBsZW5ndGgKLQkgKiB3ZSBhbHNvIG5lZWQgYSB2YWxpZCBwb2ludGVyIGluIHRoZSBidWZmZXIuIElmIGl0J3MgYSB6ZXJvIGJ1ZmZlciBsZW5ndGgsCi0JICogd2UnbGwgYmUgcmV0dXJuaW5nIHRoZSBuZWVkZWQgYnVmZmVyIHNpemUsIHNvIGtlZXAgZ29pbmcuCi0JICovCi0JaWYgKCFkZXZpY2VfaGFuZGxlKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyB0aGVuIGRpc3BhdGNoIHRvIGludGVybmFsIHJvdXRpbmUgKi8KIAotCXN0YXR1cyA9IGFjcGlfdXRfdmFsaWRhdGVfYnVmZmVyKHJldF9idWZmZXIpOworCXN0YXR1cyA9IGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycyhkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyLCAmbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X3BydF9tZXRob2RfZGF0YShkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX3JzX2dldF9wcnRfbWV0aG9kX2RhdGEobm9kZSwgcmV0X2J1ZmZlcik7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9pcnFfcm91dGluZ190YWJsZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX2hhbmRsZSAgIC0gYSBoYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQorICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIEhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHdlIGFyZSBxdWVyeWluZwotICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZQorICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAtIFBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJlc291cmNlcyBmb3IgdGhlIGRldmljZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHJlc291cmNlcyBmb3IgYQotICogICAgICAgICAgICAgIHNwZWNpZmljIGRldmljZS4gIFRoZSBjYWxsZXIgbXVzdCBmaXJzdCBhY3F1aXJlIGEgaGFuZGxlIGZvcgotICogICAgICAgICAgICAgIHRoZSBkZXNpcmVkIGRldmljZS4gIFRoZSByZXNvdXJjZSBkYXRhIGlzIHBsYWNlZCBpbiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgc3BlY2lmaWMgZGV2aWNlLiBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IKKyAqICAgICAgICAgICAgICB0aGUgZGVzaXJlZCBkZXZpY2UuIFRoZSByZXNvdXJjZSBkYXRhIGlzIHBsYWNlZCBpbiB0aGUgYnVmZmVyCiAgKiAgICAgICAgICAgICAgcG9pbnRlZCB0byBieSB0aGUgcmV0X2J1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXIuCiAgKgogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZApAQCAtMTQxLDIzOSArMTk2LDEzMyBAQAogICogICAgICAgICAgICAgIHRoZSBvYmplY3QgaW5kaWNhdGVkIGJ5IHRoZSBwYXNzZWQgZGV2aWNlX2hhbmRsZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKIAkJCSAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2dldF9jdXJyZW50X3Jlc291cmNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMpOwogCi0JLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBoYW5kbGUgYW5kIGJ1ZmZlciwgU28gd2UgaGF2ZSB0byBoYXZlIGEgaGFuZGxlCi0JICogYW5kIGEgcmV0dXJuIGJ1ZmZlciBzdHJ1Y3R1cmUsIGFuZCBpZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGJ1ZmZlciBsZW5ndGgKLQkgKiB3ZSBhbHNvIG5lZWQgYSB2YWxpZCBwb2ludGVyIGluIHRoZSBidWZmZXIuIElmIGl0J3MgYSB6ZXJvIGJ1ZmZlciBsZW5ndGgsCi0JICogd2UnbGwgYmUgcmV0dXJuaW5nIHRoZSBuZWVkZWQgYnVmZmVyIHNpemUsIHNvIGtlZXAgZ29pbmcuCi0JICovCi0JaWYgKCFkZXZpY2VfaGFuZGxlKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyB0aGVuIGRpc3BhdGNoIHRvIGludGVybmFsIHJvdXRpbmUgKi8KIAotCXN0YXR1cyA9IGFjcGlfdXRfdmFsaWRhdGVfYnVmZmVyKHJldF9idWZmZXIpOworCXN0YXR1cyA9IGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycyhkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyLCAmbm9kZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X2Nyc19tZXRob2RfZGF0YShkZXZpY2VfaGFuZGxlLCByZXRfYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEobm9kZSwgcmV0X2J1ZmZlcik7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2N1cnJlbnRfcmVzb3VyY2VzKQogCisjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcwogICoKLSAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBhIGhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlCisgKiBQQVJBTUVURVJTOiAgZGV2aWNlX2hhbmRsZSAgIC0gSGFuZGxlIHRvIHRoZSBkZXZpY2Ugb2JqZWN0IGZvciB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugd2UgYXJlIHF1ZXJ5aW5nCi0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gYSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlCisgKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgIC0gUG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcyBmb3IgdGhlIGRldmljZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgcG9zc2libGUgcmVzb3VyY2VzCi0gKiAgICAgICAgICAgICAgZm9yIGEgc3BlY2lmaWMgZGV2aWNlLiAgVGhlIGNhbGxlciBtdXN0IGZpcnN0IGFjcXVpcmUgYSBoYW5kbGUKLSAqICAgICAgICAgICAgICBmb3IgdGhlIGRlc2lyZWQgZGV2aWNlLiAgVGhlIHJlc291cmNlIGRhdGEgaXMgcGxhY2VkIGluIHRoZQorICogICAgICAgICAgICAgIGZvciBhIHNwZWNpZmljIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGZpcnN0IGFjcXVpcmUgYSBoYW5kbGUKKyAqICAgICAgICAgICAgICBmb3IgdGhlIGRlc2lyZWQgZGV2aWNlLiBUaGUgcmVzb3VyY2UgZGF0YSBpcyBwbGFjZWQgaW4gdGhlCiAgKiAgICAgICAgICAgICAgYnVmZmVyIHBvaW50ZWQgdG8gYnkgdGhlIHJldF9idWZmZXIgdmFyaWFibGUuCiAgKgogICogICAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBmYWlscyBhbiBhcHByb3ByaWF0ZSBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZAogICogICAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgb2YgcmV0X2J1ZmZlciBpcyB1bmRlZmluZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfcG9zc2libGVfcmVzb3VyY2VzKGFjcGlfaGFuZGxlIGRldmljZV9oYW5kbGUsCiAJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfcG9zc2libGVfcmVzb3VyY2VzKTsKIAotCS8qCi0JICogTXVzdCBoYXZlIGEgdmFsaWQgaGFuZGxlIGFuZCBidWZmZXIsIFNvIHdlIGhhdmUgdG8gaGF2ZSBhIGhhbmRsZQotCSAqIGFuZCBhIHJldHVybiBidWZmZXIgc3RydWN0dXJlLCBhbmQgaWYgdGhlcmUgaXMgYSBub24temVybyBidWZmZXIgbGVuZ3RoCi0JICogd2UgYWxzbyBuZWVkIGEgdmFsaWQgcG9pbnRlciBpbiB0aGUgYnVmZmVyLiBJZiBpdCdzIGEgemVybyBidWZmZXIgbGVuZ3RoLAotCSAqIHdlJ2xsIGJlIHJldHVybmluZyB0aGUgbmVlZGVkIGJ1ZmZlciBzaXplLCBzbyBrZWVwIGdvaW5nLgotCSAqLwotCWlmICghZGV2aWNlX2hhbmRsZSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQorCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgdGhlbiBkaXNwYXRjaCB0byBpbnRlcm5hbCByb3V0aW5lICovCiAKLQlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX2J1ZmZlcihyZXRfYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX3JzX3ZhbGlkYXRlX3BhcmFtZXRlcnMoZGV2aWNlX2hhbmRsZSwgcmV0X2J1ZmZlciwgJm5vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoZGV2aWNlX2hhbmRsZSwgcmV0X2J1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9yc19nZXRfcHJzX21ldGhvZF9kYXRhKG5vZGUsIHJldF9idWZmZXIpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfcG9zc2libGVfcmVzb3VyY2VzKQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV93YWxrX3Jlc291cmNlcwotICoKLSAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3ZSBhcmUgcXVlcnlpbmcKLSAqICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgLSBNZXRob2QgbmFtZSBvZiB0aGUgcmVzb3VyY2VzIHdlIHdhbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVUSE9EX05BTUVfX0NSUyBvciBNRVRIT0RfTkFNRV9fUFJTKQotICogICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAtIENhbGxlZCBmb3IgZWFjaCByZXNvdXJjZQotICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAtIFBhc3NlZCB0byB1c2VyX2Z1bmN0aW9uCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgb3IgcG9zc2libGUgcmVzb3VyY2UgbGlzdCBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgc3BlY2lmaWVkIGRldmljZS4gIFRoZSB1c2VyX2Z1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvcgotICogICAgICAgICAgICAgIGVhY2ggcmVzb3VyY2UgaW4gdGhlIGxpc3QuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9zdGF0dXMKLWFjcGlfd2Fsa19yZXNvdXJjZXMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKLQkJICAgIGNoYXIgKm5hbWUsCi0JCSAgICBBQ1BJX1dBTEtfUkVTT1VSQ0VfQ0FMTEJBQ0sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqY29udGV4dCkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlX2VuZDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfd2Fsa19yZXNvdXJjZXMiKTsKLQotCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCi0KLQlpZiAoIWRldmljZV9oYW5kbGUgfHwgIXVzZXJfZnVuY3Rpb24gfHwgIW5hbWUgfHwKLQkgICAgKEFDUElfU1RSTkNNUChuYW1lLCBNRVRIT0RfTkFNRV9fQ1JTLCBzaXplb2YoTUVUSE9EX05BTUVfX0NSUykpICYmCi0JICAgICBBQ1BJX1NUUk5DTVAobmFtZSwgTUVUSE9EX05BTUVfX1BSUywgc2l6ZW9mKE1FVEhPRF9OQU1FX19QUlMpKSkpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQotCS8qIEdldCB0aGUgX0NSUyBvciBfUFJTIHJlc291cmNlIGxpc3QgKi8KLQotCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0xPQ0FMX0JVRkZFUjsKLQlzdGF0dXMgPSBhY3BpX3JzX2dldF9tZXRob2RfZGF0YShkZXZpY2VfaGFuZGxlLCBuYW1lLCAmYnVmZmVyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyogQnVmZmVyIG5vdyBjb250YWlucyB0aGUgcmVzb3VyY2UgbGlzdCAqLwotCi0JcmVzb3VyY2UgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCBidWZmZXIucG9pbnRlcik7Ci0JcmVzb3VyY2VfZW5kID0KLQkgICAgQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlLCBidWZmZXIucG9pbnRlciwgYnVmZmVyLmxlbmd0aCk7Ci0KLQkvKiBXYWxrIHRoZSByZXNvdXJjZSBsaXN0IHVudGlsIHRoZSBlbmRfdGFnIGlzIGZvdW5kIChvciBidWZmZXIgZW5kKSAqLwotCi0Jd2hpbGUgKHJlc291cmNlIDwgcmVzb3VyY2VfZW5kKSB7Ci0JCS8qIFNhbml0eSBjaGVjayB0aGUgcmVzb3VyY2UgKi8KLQotCQlpZiAocmVzb3VyY2UtPnR5cGUgPiBBQ1BJX1JFU09VUkNFX1RZUEVfTUFYKSB7Ci0JCQlzdGF0dXMgPSBBRV9BTUxfSU5WQUxJRF9SRVNPVVJDRV9UWVBFOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBJbnZva2UgdGhlIHVzZXIgZnVuY3Rpb24sIGFib3J0IG9uIGFueSBlcnJvciByZXR1cm5lZCAqLwotCi0JCXN0YXR1cyA9IHVzZXJfZnVuY3Rpb24ocmVzb3VyY2UsIGNvbnRleHQpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWlmIChzdGF0dXMgPT0gQUVfQ1RSTF9URVJNSU5BVEUpIHsKLQkJCQkvKiBUaGlzIGlzIGFuIE9LIHRlcm1pbmF0aW9uIGJ5IHRoZSB1c2VyIGZ1bmN0aW9uICovCi0KLQkJCQlzdGF0dXMgPSBBRV9PSzsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogZW5kX3RhZyBpbmRpY2F0ZXMgZW5kLW9mLWxpc3QgKi8KLQotCQlpZiAocmVzb3VyY2UtPnR5cGUgPT0gQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUcpIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogR2V0IHRoZSBuZXh0IHJlc291cmNlIGRlc2NyaXB0b3IgKi8KLQotCQlyZXNvdXJjZSA9Ci0JCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIHJlc291cmNlLAotCQkJCSByZXNvdXJjZS0+bGVuZ3RoKTsKLQl9Ci0KLQlBQ1BJX01FTV9GUkVFKGJ1ZmZlci5wb2ludGVyKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotRVhQT1JUX1NZTUJPTChhY3BpX3dhbGtfcmVzb3VyY2VzKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX2hhbmRsZSAgIC0gYSBoYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3ZSBhcmUgY2hhbmdpbmcgdGhlIHJlc291cmNlcyBvZgotICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZQorICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAtIEhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHdlIGFyZSBzZXR0aW5nIHJlc291cmNlcworICogICAgICAgICAgICAgIGluX2J1ZmZlciAgICAgICAtIFBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgdG8gYmUgc2V0IGZvciB0aGUgZGV2aWNlCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzZXQgdGhlIGN1cnJlbnQgcmVzb3VyY2VzIGZvciBhCi0gKiAgICAgICAgICAgICAgc3BlY2lmaWMgZGV2aWNlLiAgVGhlIGNhbGxlciBtdXN0IGZpcnN0IGFjcXVpcmUgYSBoYW5kbGUgZm9yCi0gKiAgICAgICAgICAgICAgdGhlIGRlc2lyZWQgZGV2aWNlLiAgVGhlIHJlc291cmNlIGRhdGEgaXMgcGFzc2VkIHRvIHRoZSByb3V0aW5lCisgKiAgICAgICAgICAgICAgc3BlY2lmaWMgZGV2aWNlLiBUaGUgY2FsbGVyIG11c3QgZmlyc3QgYWNxdWlyZSBhIGhhbmRsZSBmb3IKKyAqICAgICAgICAgICAgICB0aGUgZGVzaXJlZCBkZXZpY2UuIFRoZSByZXNvdXJjZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgcm91dGluZQogICogICAgICAgICAgICAgIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSB0aGUgaW5fYnVmZmVyIHZhcmlhYmxlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX3NldF9jdXJyZW50X3Jlc291cmNlcyhhY3BpX2hhbmRsZSBkZXZpY2VfaGFuZGxlLAogCQkJICAgc3RydWN0IGFjcGlfYnVmZmVyICppbl9idWZmZXIpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKTsKIAotCS8qIE11c3QgaGF2ZSBhIHZhbGlkIGhhbmRsZSBhbmQgYnVmZmVyICovCisJLyogVmFsaWRhdGUgdGhlIGJ1ZmZlciwgZG9uJ3QgYWxsb3cgemVybyBsZW5ndGggKi8KIAotCWlmICgoIWRldmljZV9oYW5kbGUpIHx8Ci0JICAgICghaW5fYnVmZmVyKSB8fCAoIWluX2J1ZmZlci0+cG9pbnRlcikgfHwgKCFpbl9idWZmZXItPmxlbmd0aCkpIHsKKwlpZiAoKCFpbl9idWZmZXIpIHx8ICghaW5fYnVmZmVyLT5wb2ludGVyKSB8fCAoIWluX2J1ZmZlci0+bGVuZ3RoKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKGRldmljZV9oYW5kbGUsIGluX2J1ZmZlcik7CisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyB0aGVuIGRpc3BhdGNoIHRvIGludGVybmFsIHJvdXRpbmUgKi8KKworCXN0YXR1cyA9IGFjcGlfcnNfdmFsaWRhdGVfcGFyYW1ldGVycyhkZXZpY2VfaGFuZGxlLCBpbl9idWZmZXIsICZub2RlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJc3RhdHVzID0gYWNwaV9yc19zZXRfc3JzX21ldGhvZF9kYXRhKG5vZGUsIGluX2J1ZmZlcik7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0CiAgKgotICogUEFSQU1FVEVSUzogIFJlc291cmNlICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBhIHJlc291cmNlCi0gKiAgICAgICAgICAgICAgT3V0ICAgICAgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSB1c2VycydzIHJldHVybgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIChhIHN0cnVjdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0KQorICogUEFSQU1FVEVSUzogIFJlc291cmNlICAgICAgICAtIFBvaW50ZXIgdG8gYSByZXNvdXJjZQorICogICAgICAgICAgICAgIE91dCAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIHVzZXJzJ3MgcmV0dXJuIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhIHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCkKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IElmIHRoZSByZXNvdXJjZSBpcyBhbiBhZGRyZXNzMTYsIGFkZHJlc3MzMiwgb3IgYWRkcmVzczY0LAotICogICAgICAgICAgICAgIGNvcHkgaXQgdG8gdGhlIGFkZHJlc3M2NCByZXR1cm4gYnVmZmVyLiAgVGhpcyBzYXZlcyB0aGUKKyAqICAgICAgICAgICAgICBjb3B5IGl0IHRvIHRoZSBhZGRyZXNzNjQgcmV0dXJuIGJ1ZmZlci4gVGhpcyBzYXZlcyB0aGUKICAqICAgICAgICAgICAgICBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gZHVwbGljYXRlIGNvZGUgZm9yIGRpZmZlcmVudC1zaXplZAogICogICAgICAgICAgICAgIGFkZHJlc3Nlcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCQkJICAgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICpvdXQpCkBAIC00MTUsMTggKzM2NCwxOCBAQAogCXJldHVybiAoQUVfT0spOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3Jlc291cmNlX3RvX2FkZHJlc3M2NCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfdmVuZG9yX3Jlc291cmNlCiAgKgotICogUEFSQU1FVEVSUzogIGRldmljZV9oYW5kbGUgICAgICAgLSBIYW5kbGUgZm9yIHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdAotICogICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgLSBNZXRob2QgbmFtZSBmb3IgdGhlIHBhcmVudCByZXNvdXJjZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVUSE9EX05BTUVfX0NSUyBvciBNRVRIT0RfTkFNRV9fUFJTKQotICogICAgICAgICAgICAgIFV1aWQgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBVVUlEIHRvIGJlIG1hdGNoZWQuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGJvdGggc3VidHlwZSBhbmQgMTYtYnl0ZSBVVUlECi0gKiAgICAgICAgICAgICAgcmV0X2J1ZmZlciAgICAgICAgICAtIFdoZXJlIHRoZSB2ZW5kb3IgcmVzb3VyY2UgaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgZm9yIHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdAorICogICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAtIE1ldGhvZCBuYW1lIGZvciB0aGUgcGFyZW50IHJlc291cmNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1FVEhPRF9OQU1FX19DUlMgb3IgTUVUSE9EX05BTUVfX1BSUykKKyAqICAgICAgICAgICAgICBVdWlkICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBVVUlEIHRvIGJlIG1hdGNoZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYm90aCBzdWJ0eXBlIGFuZCAxNi1ieXRlIFVVSUQKKyAqICAgICAgICAgICAgICByZXRfYnVmZmVyICAgICAgLSBXaGVyZSB0aGUgdmVuZG9yIHJlc291cmNlIGlzIHJldHVybmVkCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTQzNSw3ICszODQsNiBAQAogICogICAgICAgICAgICAgIFVVSUQgc3VidHlwZS4gUmV0dXJucyBhIHN0cnVjdCBhY3BpX3Jlc291cmNlIG9mIHR5cGUgVmVuZG9yLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF92ZW5kb3JfcmVzb3VyY2UoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKIAkJCSBjaGFyICpuYW1lLApAQCAtNDY3LDE4ICs0MTUsMTkgQEAKIAlyZXR1cm4gKGluZm8uc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3ZlbmRvcl9yZXNvdXJjZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9yc19tYXRjaF92ZW5kb3JfcmVzb3VyY2UKICAqCi0gKiBQQVJBTUVURVJTOiAgQUNQSV9XQUxLX1JFU09VUkNFX0NBTExCQUNLCisgKiBQQVJBTUVURVJTOiAgYWNwaV93YWxrX3Jlc291cmNlX2NhbGxiYWNrCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBNYXRjaCBhIHZlbmRvciByZXNvdXJjZSB2aWEgdGhlIEFDUEkgMy4wIFVVSUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfcnNfbWF0Y2hfdmVuZG9yX3Jlc291cmNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKIHsKQEAgLTUyNiwzICs0NzUsMTAxIEBACiAJaW5mby0+c3RhdHVzID0gQUVfT0s7CiAJcmV0dXJuIChBRV9DVFJMX1RFUk1JTkFURSk7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JzX21hdGNoX3ZlbmRvcl9yZXNvdXJjZSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV93YWxrX3Jlc291cmNlcworICoKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2VfaGFuZGxlICAgLSBIYW5kbGUgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB3ZSBhcmUgcXVlcnlpbmcKKyAqICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgLSBNZXRob2QgbmFtZSBvZiB0aGUgcmVzb3VyY2VzIHdlIHdhbnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVUSE9EX05BTUVfX0NSUyBvciBNRVRIT0RfTkFNRV9fUFJTKQorICogICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAtIENhbGxlZCBmb3IgZWFjaCByZXNvdXJjZQorICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAtIFBhc3NlZCB0byB1c2VyX2Z1bmN0aW9uCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgb3IgcG9zc2libGUgcmVzb3VyY2UgbGlzdCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgc3BlY2lmaWVkIGRldmljZS4gVGhlIHVzZXJfZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yCisgKiAgICAgICAgICAgICAgZWFjaCByZXNvdXJjZSBpbiB0aGUgbGlzdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV93YWxrX3Jlc291cmNlcyhhY3BpX2hhbmRsZSBkZXZpY2VfaGFuZGxlLAorCQkgICAgY2hhciAqbmFtZSwKKwkJICAgIGFjcGlfd2Fsa19yZXNvdXJjZV9jYWxsYmFjayB1c2VyX2Z1bmN0aW9uLCB2b2lkICpjb250ZXh0KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyOworCXN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZTsKKwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2VfZW5kOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3dhbGtfcmVzb3VyY2VzKTsKKworCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCisKKwlpZiAoIWRldmljZV9oYW5kbGUgfHwgIXVzZXJfZnVuY3Rpb24gfHwgIW5hbWUgfHwKKwkgICAgKCFBQ1BJX0NPTVBBUkVfTkFNRShuYW1lLCBNRVRIT0RfTkFNRV9fQ1JTKSAmJgorCSAgICAgIUFDUElfQ09NUEFSRV9OQU1FKG5hbWUsIE1FVEhPRF9OQU1FX19QUlMpKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJLyogR2V0IHRoZSBfQ1JTIG9yIF9QUlMgcmVzb3VyY2UgbGlzdCAqLworCisJYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOworCXN0YXR1cyA9IGFjcGlfcnNfZ2V0X21ldGhvZF9kYXRhKGRldmljZV9oYW5kbGUsIG5hbWUsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKiBCdWZmZXIgbm93IGNvbnRhaW5zIHRoZSByZXNvdXJjZSBsaXN0ICovCisKKwlyZXNvdXJjZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIGJ1ZmZlci5wb2ludGVyKTsKKwlyZXNvdXJjZV9lbmQgPQorCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIGJ1ZmZlci5wb2ludGVyLCBidWZmZXIubGVuZ3RoKTsKKworCS8qIFdhbGsgdGhlIHJlc291cmNlIGxpc3QgdW50aWwgdGhlIGVuZF90YWcgaXMgZm91bmQgKG9yIGJ1ZmZlciBlbmQpICovCisKKwl3aGlsZSAocmVzb3VyY2UgPCByZXNvdXJjZV9lbmQpIHsKKworCQkvKiBTYW5pdHkgY2hlY2sgdGhlIHJlc291cmNlICovCisKKwkJaWYgKHJlc291cmNlLT50eXBlID4gQUNQSV9SRVNPVVJDRV9UWVBFX01BWCkgeworCQkJc3RhdHVzID0gQUVfQU1MX0lOVkFMSURfUkVTT1VSQ0VfVFlQRTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSW52b2tlIHRoZSB1c2VyIGZ1bmN0aW9uLCBhYm9ydCBvbiBhbnkgZXJyb3IgcmV0dXJuZWQgKi8KKworCQlzdGF0dXMgPSB1c2VyX2Z1bmN0aW9uKHJlc291cmNlLCBjb250ZXh0KTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlpZiAoc3RhdHVzID09IEFFX0NUUkxfVEVSTUlOQVRFKSB7CisKKwkJCQkvKiBUaGlzIGlzIGFuIE9LIHRlcm1pbmF0aW9uIGJ5IHRoZSB1c2VyIGZ1bmN0aW9uICovCisKKwkJCQlzdGF0dXMgPSBBRV9PSzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJLyogZW5kX3RhZyBpbmRpY2F0ZXMgZW5kLW9mLWxpc3QgKi8KKworCQlpZiAocmVzb3VyY2UtPnR5cGUgPT0gQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUcpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogR2V0IHRoZSBuZXh0IHJlc291cmNlIGRlc2NyaXB0b3IgKi8KKworCQlyZXNvdXJjZSA9CisJCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2UsIHJlc291cmNlLAorCQkJCSByZXNvdXJjZS0+bGVuZ3RoKTsKKwl9CisKKwlBQ1BJX0ZSRUUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV93YWxrX3Jlc291cmNlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGEwYWI4MjguLjk1ZDViYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtNDQxLDEwICs0NDEsNyBAQAogCWlzbG9ja2FibGUgPSBkZXZpY2UtPmZsYWdzLmxvY2thYmxlOwogCWhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCi0JaWYgKHR5cGUgPT0gQUNQSV9UWVBFX1BST0NFU1NPUikKLQkJcmVzdWx0ID0gYWNwaV9idXNfdHJpbShkZXZpY2UsIDApOwotCWVsc2UKLQkJcmVzdWx0ID0gYWNwaV9idXNfdHJpbShkZXZpY2UsIDEpOworCXJlc3VsdCA9IGFjcGlfYnVzX3RyaW0oZGV2aWNlLCAxKTsKIAogCWlmICghcmVzdWx0KQogCQlyZXN1bHQgPSBhY3BpX2VqZWN0X29wZXJhdGlvbihoYW5kbGUsIGlzbG9ja2FibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IGU0MzA4YzcuLmE5MzRhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNkZWZpbmUgQUNQSV9TWVNURU1fRklMRV9FVkVOVAkJImV2ZW50IgogI2RlZmluZSBBQ1BJX1NZU1RFTV9GSUxFX0RTRFQJCSJkc2R0IgogI2RlZmluZSBBQ1BJX1NZU1RFTV9GSUxFX0ZBRFQJCSJmYWR0IgotZXh0ZXJuIEZBRFRfREVTQ1JJUFRPUiBhY3BpX2ZhZHQ7CitleHRlcm4gc3RydWN0IGZhZHRfZGVzY3JpcHRvciBhY3BpX2ZhZHQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUyBJbnRlcmZhY2UgKC9wcm9jKQpAQCAtODIsNyArODIsNyBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zeXN0ZW1fcmVhZF9kc2R0Iik7CiAKLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1RBQkxFX0RTRFQsIDEsICZkc2R0KTsKKwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1RBQkxFX0lEX0RTRFQsIDEsICZkc2R0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKIApAQCAtMTEwLDcgKzExMCw3IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3N5c3RlbV9yZWFkX2ZhZHQiKTsKIAotCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfVEFCTEVfRkFEVCwgMSwgJmZhZHQpOworCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfVEFCTEVfSURfRkFEVCwgMSwgJmZhZHQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggN2YzN2M3Yy4uZWQ1ZTg4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMjgyLDggKzI4Miw4IEBACiAKIAkvKiBNYXAgdGhlIERTRFQgaGVhZGVyIHZpYSB0aGUgcG9pbnRlciBpbiB0aGUgRkFEVCAqLwogCWlmIChpZCA9PSBBQ1BJX0RTRFQpIHsKLQkJc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICpmYWR0ID0KLQkJICAgIChzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgKikqaGVhZGVyOworCQlzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpmYWR0ID0KKwkJICAgIChzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICopKmhlYWRlcjsKIAogCQlpZiAoZmFkdC0+cmV2aXNpb24gPT0gMyAmJiBmYWR0LT5YZHNkdCkgewogCQkJKmhlYWRlciA9ICh2b2lkICopX19hY3BpX21hcF90YWJsZShmYWR0LT5YZHNkdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJjb252cnQuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJjb252cnQuYwppbmRleCAwM2IzN2QyLi5kNjk3ZmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiY29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YmNvbnZydC5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3RhYmxlcy5oPgogCkBAIC01NiwxNSArNTQsMTUgQEAKIAkJCSAgICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MpOwogCiBzdGF0aWMgdm9pZAotYWNwaV90Yl9jb252ZXJ0X2ZhZHQxKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqbG9jYWxfZmFkdCwKK2FjcGlfdGJfY29udmVydF9mYWR0MShzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpsb2NhbF9mYWR0LAogCQkgICAgICBzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjEgKm9yaWdpbmFsX2ZhZHQpOwogCiBzdGF0aWMgdm9pZAotYWNwaV90Yl9jb252ZXJ0X2ZhZHQyKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqbG9jYWxfZmFkdCwKLQkJICAgICAgc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICpvcmlnaW5hbF9mYWR0KTsKK2FjcGlfdGJfY29udmVydF9mYWR0MihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpsb2NhbF9mYWR0LAorCQkgICAgICBzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpvcmlnaW5hbF9mYWR0KTsKIAogdTggYWNwaV9mYWR0X2lzX3YxOwotRVhQT1JUX1NZTUJPTChhY3BpX2ZhZHRfaXNfdjEpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZmFkdF9pc192MSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMjIsNyArMTIwLDcgQEAKIHsKIAlhY3BpX3NpemUgdGFibGVfc2l6ZTsKIAl1MzIgaTsKLQlYU0RUX0RFU0NSSVBUT1IgKm5ld190YWJsZTsKKwlzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yICpuZXdfdGFibGU7CiAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKQEAgLTEzMyw3ICsxMzEsNyBAQAogCiAJLyogQWxsb2NhdGUgYW4gWFNEVCAqLwogCi0JbmV3X3RhYmxlID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHRhYmxlX3NpemUpOworCW5ld190YWJsZSA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHRhYmxlX3NpemUpOwogCWlmICghbmV3X3RhYmxlKSB7CiAJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC0xNDcsMTcgKzE0NSwxOCBAQAogCS8qIENvcHkgdGhlIHRhYmxlIHBvaW50ZXJzICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcnNkdF90YWJsZV9jb3VudDsgaSsrKSB7CisKIAkJLyogUlNEVCBwb2ludGVycyBhcmUgMzIgYml0cywgWFNEVCBwb2ludGVycyBhcmUgNjQgYml0cyAqLwogCiAJCWlmIChhY3BpX2dibF9yb290X3RhYmxlX3R5cGUgPT0gQUNQSV9UQUJMRV9UWVBFX1JTRFQpIHsKIAkJCUFDUElfU1RPUkVfQUREUkVTUyhuZXdfdGFibGUtPnRhYmxlX29mZnNldF9lbnRyeVtpXSwKIAkJCQkJICAgKEFDUElfQ0FTVF9QVFIKLQkJCQkJICAgIChzdHJ1Y3QgcnNkdF9kZXNjcmlwdG9yX3JldjEsCisJCQkJCSAgICAoc3RydWN0IHJzZHRfZGVzY3JpcHRvciwKIAkJCQkJICAgICB0YWJsZV9pbmZvLT5wb2ludGVyKSktPgogCQkJCQkgICB0YWJsZV9vZmZzZXRfZW50cnlbaV0pOwogCQl9IGVsc2UgewogCQkJbmV3X3RhYmxlLT50YWJsZV9vZmZzZXRfZW50cnlbaV0gPQotCQkJICAgIChBQ1BJX0NBU1RfUFRSKFhTRFRfREVTQ1JJUFRPUiwKKwkJCSAgICAoQUNQSV9DQVNUX1BUUihzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yLAogCQkJCQkgICB0YWJsZV9pbmZvLT5wb2ludGVyKSktPgogCQkJICAgIHRhYmxlX29mZnNldF9lbnRyeVtpXTsKIAkJfQpAQCAtMjE5LDcgKzIxOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotYWNwaV90Yl9jb252ZXJ0X2ZhZHQxKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqbG9jYWxfZmFkdCwKK2FjcGlfdGJfY29udmVydF9mYWR0MShzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICpsb2NhbF9mYWR0LAogCQkgICAgICBzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjEgKm9yaWdpbmFsX2ZhZHQpCiB7CiAKQEAgLTM2NSwxNCArMzY0LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotYWNwaV90Yl9jb252ZXJ0X2ZhZHQyKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MiAqbG9jYWxfZmFkdCwKLQkJICAgICAgc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyICpvcmlnaW5hbF9mYWR0KQorYWNwaV90Yl9jb252ZXJ0X2ZhZHQyKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgKmxvY2FsX2ZhZHQsCisJCSAgICAgIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgKm9yaWdpbmFsX2ZhZHQpCiB7CiAKIAkvKiBXZSBoYXZlIGFuIEFDUEkgMi4wIEZBRFQgYnV0IHdlIG11c3QgY29weSBpdCB0byBvdXIgbG9jYWwgYnVmZmVyICovCiAKLQlBQ1BJX01FTUNQWShsb2NhbF9mYWR0LCBvcmlnaW5hbF9mYWR0LAotCQkgICAgc2l6ZW9mKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MikpOworCUFDUElfTUVNQ1BZKGxvY2FsX2ZhZHQsIG9yaWdpbmFsX2ZhZHQsIHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yKSk7CiAKIAkvKgogCSAqICJYIiBmaWVsZHMgYXJlIG9wdGlvbmFsIGV4dGVuc2lvbnMgdG8gdGhlIG9yaWdpbmFsIFYxLjAgZmllbGRzLCBzbwpAQCAtNDkxLDEwICs0ODksMTAgQEAKIAogYWNwaV9zdGF0dXMgYWNwaV90Yl9jb252ZXJ0X3RhYmxlX2ZhZHQodm9pZCkKIHsKLQlzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgKmxvY2FsX2ZhZHQ7CisJc3RydWN0IGZhZHRfZGVzY3JpcHRvciAqbG9jYWxfZmFkdDsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfY29udmVydF90YWJsZV9mYWR0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9jb252ZXJ0X3RhYmxlX2ZhZHQpOwogCiAJLyoKIAkgKiBhY3BpX2dibF9GQURUIGlzIHZhbGlkLiBWYWxpZGF0ZSB0aGUgRkFEVCBsZW5ndGguIFRoZSB0YWJsZSBtdXN0IGJlCkBAIC01MDgsMTMgKzUwNiwxNCBAQAogCiAJLyogQWxsb2NhdGUgYnVmZmVyIGZvciB0aGUgQUNQSSAyLjAoKykgRkFEVCAqLwogCi0JbG9jYWxfZmFkdCA9IEFDUElfTUVNX0NBTExPQ0FURShzaXplb2Yoc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyKSk7CisJbG9jYWxfZmFkdCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yKSk7CiAJaWYgKCFsb2NhbF9mYWR0KSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KIAogCWlmIChhY3BpX2dibF9GQURULT5yZXZpc2lvbiA+PSBGQURUMl9SRVZJU0lPTl9JRCkgewotCQlpZiAoYWNwaV9nYmxfRkFEVC0+bGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MikpIHsKKwkJaWYgKGFjcGlfZ2JsX0ZBRFQtPmxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yKSkgeworCiAJCQkvKiBMZW5ndGggaXMgdG9vIHNob3J0IHRvIGJlIGEgVjIuMCB0YWJsZSAqLwogCiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCkBAIC01MzgsMTEgKzUzNywxMSBAQAogCS8qIEdsb2JhbCBGQURUIHBvaW50ZXIgd2lsbCBwb2ludCB0byB0aGUgbmV3IGNvbW1vbiBWMi4wIEZBRFQgKi8KIAogCWFjcGlfZ2JsX0ZBRFQgPSBsb2NhbF9mYWR0OwotCWFjcGlfZ2JsX0ZBRFQtPmxlbmd0aCA9IHNpemVvZihGQURUX0RFU0NSSVBUT1IpOworCWFjcGlfZ2JsX0ZBRFQtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yKTsKIAogCS8qIEZyZWUgdGhlIG9yaWdpbmFsIHRhYmxlICovCiAKLQl0YWJsZV9kZXNjID0gYWNwaV9nYmxfdGFibGVfbGlzdHNbQUNQSV9UQUJMRV9GQURUXS5uZXh0OworCXRhYmxlX2Rlc2MgPSBhY3BpX2dibF90YWJsZV9saXN0c1tBQ1BJX1RBQkxFX0lEX0ZBRFRdLm5leHQ7CiAJYWNwaV90Yl9kZWxldGVfc2luZ2xlX3RhYmxlKHRhYmxlX2Rlc2MpOwogCiAJLyogSW5zdGFsbCB0aGUgbmV3IHRhYmxlICovCkBAIC01NTAsNyArNTQ5LDcgQEAKIAl0YWJsZV9kZXNjLT5wb2ludGVyID0KIAkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIsIGFjcGlfZ2JsX0ZBRFQpOwogCXRhYmxlX2Rlc2MtPmFsbG9jYXRpb24gPSBBQ1BJX01FTV9BTExPQ0FURUQ7Ci0JdGFibGVfZGVzYy0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2Mik7CisJdGFibGVfZGVzYy0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IpOwogCiAJLyogRHVtcCB0aGUgZW50aXJlIEZBRFQgKi8KIApAQCAtNTgwLDcgKzU3OSw3IEBACiBhY3BpX3N0YXR1cyBhY3BpX3RiX2J1aWxkX2NvbW1vbl9mYWNzKHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgKnRhYmxlX2luZm8pCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9idWlsZF9jb21tb25fZmFjcyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfYnVpbGRfY29tbW9uX2ZhY3MpOwogCiAJLyogQWJzb2x1dGUgbWluaW11bSBsZW5ndGggaXMgMjQsIGJ1dCB0aGUgQUNQSSBzcGVjIHNheXMgNjQgKi8KIApAQCAtNjAzLDYgKzYwMiw3IEBACiAJaWYgKChhY3BpX2dibF9SU0RQLT5yZXZpc2lvbiA8IDIpIHx8CiAJICAgIChhY3BpX2dibF9GQUNTLT5sZW5ndGggPCAzMikgfHwKIAkgICAgKCEoYWNwaV9nYmxfRkFDUy0+eGZpcm13YXJlX3dha2luZ192ZWN0b3IpKSkgeworCiAJCS8qIEFDUEkgMS4wIEZBQ1Mgb3Igc2hvcnQgdGFibGUgb3Igb3B0aW9uYWwgWF8gZmllbGQgaXMgemVybyAqLwogCiAJCWFjcGlfZ2JsX2NvbW1vbl9mQUNTLmZpcm13YXJlX3dha2luZ192ZWN0b3IgPSBBQ1BJX0NBU1RfUFRSKHU2NCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJnZXQuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJnZXQuYwppbmRleCAwOWI0ZWU2Li45OWVhY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0LmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YmdldC5jCkBAIC03OCw3ICs3OCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2dldF90YWJsZSk7CiAKIAkvKiBHZXQgdGhlIGhlYWRlciBpbiBvcmRlciB0byBnZXQgc2lnbmF0dXJlIGFuZCB0YWJsZSBzaXplICovCiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInRiX2dldF90YWJsZV9oZWFkZXIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2dldF90YWJsZV9oZWFkZXIpOwogCiAJLyoKIAkgKiBGbGFncyBjb250YWlucyB0aGUgY3VycmVudCBwcm9jZXNzb3IgbW9kZSAoVmlydHVhbCBvciBQaHlzaWNhbApAQCAtMTQ4LDYgKzE0OCwxMCBAQAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciksCiAJCQkJCSAgICAodm9pZCAqKSZoZWFkZXIpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJICAgICJDb3VsZCBub3QgbWFwIG1lbW9yeSBhdCAlOC44WCU4LjhYIGZvciB0YWJsZSBoZWFkZXIiLAorCQkJCSAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzcy0+cG9pbnRlci4KKwkJCQkJCSAgICAgICBwaHlzaWNhbCkpKTsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQl9CiAKQEAgLTE5OCw3ICsyMDIsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInRiX2dldF90YWJsZV9ib2R5Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfdGFibGVfYm9keSk7CiAKIAlpZiAoIXRhYmxlX2luZm8gfHwgIWFkZHJlc3MpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwpAQCAtMjA4LDYgKzIxMiw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX3RiX3RhYmxlX292ZXJyaWRlKGhlYWRlciwgdGFibGVfaW5mbyk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisKIAkJLyogVGFibGUgd2FzIG92ZXJyaWRkZW4gYnkgdGhlIGhvc3QgT1MgKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTI0MSw3ICsyNDYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9wb2ludGVyIGFkZHJlc3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl90YWJsZV9vdmVycmlkZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfdGFibGVfb3ZlcnJpZGUpOwogCiAJLyoKIAkgKiBUaGUgT1NMIHdpbGwgZXhhbWluZSB0aGUgaGVhZGVyIGFuZCBkZWNpZGUgd2hldGhlciB0byBvdmVycmlkZSB0aGlzCkBAIC0yNTAsNiArMjU1LDcgQEAKIAkgKi8KIAlzdGF0dXMgPSBhY3BpX29zX3RhYmxlX292ZXJyaWRlKGhlYWRlciwgJm5ld190YWJsZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisKIAkJLyogU29tZSBzZXZlcmUgZXJyb3IgZnJvbSB0aGUgT1NMLCBidXQgd2UgYmFzaWNhbGx5IGlnbm9yZSBpdCAqLwogCiAJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCkBAIC0yNTgsNiArMjY0LDcgQEAKIAl9CiAKIAlpZiAoIW5ld190YWJsZSkgeworCiAJCS8qIE5vIHRhYmxlIG92ZXJyaWRlICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX0FDUElfVEFCTEVTKTsKQEAgLTMxMSw3ICszMTgsNyBAQAogCXU4IGFsbG9jYXRpb247CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfdGhpc190YWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfZ2V0X3RoaXNfdGFibGUpOwogCiAJLyoKIAkgKiBGbGFncyBjb250YWlucyB0aGUgY3VycmVudCBwcm9jZXNzb3IgbW9kZSAoVmlydHVhbCBvciBQaHlzaWNhbApAQCAtMzIzLDcgKzMzMCw3IEBACiAKIAkJLyogUG9pbnRlciBtYXRjaGVzIHByb2Nlc3NvciBtb2RlLCBjb3B5IHRoZSB0YWJsZSB0byBhIG5ldyBidWZmZXIgKi8KIAotCQlmdWxsX3RhYmxlID0gQUNQSV9NRU1fQUxMT0NBVEUoaGVhZGVyLT5sZW5ndGgpOworCQlmdWxsX3RhYmxlID0gQUNQSV9BTExPQ0FURShoZWFkZXItPmxlbmd0aCk7CiAJCWlmICghZnVsbF90YWJsZSkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0YWJsZSBtZW1vcnkgZm9yIFslNC40c10gbGVuZ3RoICVYIiwKQEAgLTM3NiwxMSArMzgzLDEyIEBACiAJICogVmFsaWRhdGUgY2hlY2tzdW0gZm9yIF9tb3N0XyB0YWJsZXMsCiAJICogZXZlbiB0aGUgb25lcyB3aG9zZSBzaWduYXR1cmUgd2UgZG9uJ3QgcmVjb2duaXplCiAJICovCi0JaWYgKHRhYmxlX2luZm8tPnR5cGUgIT0gQUNQSV9UQUJMRV9GQUNTKSB7CisJaWYgKHRhYmxlX2luZm8tPnR5cGUgIT0gQUNQSV9UQUJMRV9JRF9GQUNTKSB7CiAJCXN0YXR1cyA9IGFjcGlfdGJfdmVyaWZ5X3RhYmxlX2NoZWNrc3VtKGZ1bGxfdGFibGUpOwogCiAjaWYgKCFBQ1BJX0NIRUNLU1VNX0FCT1JUKQogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkJLyogSWdub3JlIHRoZSBlcnJvciBpZiBjb25maWd1cmF0aW9uIHNheXMgc28gKi8KIAogCQkJc3RhdHVzID0gQUVfT0s7CkBAIC00MDksNyArNDE3LDcgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgdGFibGVfdHlwZSAgICAgIC0gb25lIG9mIHRoZSBkZWZpbmVkIHRhYmxlIHR5cGVzCiAgKiAgICAgICAgICAgICAgSW5zdGFuY2UgICAgICAgIC0gV2hpY2ggdGFibGUgb2YgdGhpcyB0eXBlCi0gKiAgICAgICAgICAgICAgdGFibGVfcHRyX2xvYyAgIC0gcG9pbnRlciB0byBsb2NhdGlvbiB0byBwbGFjZSB0aGUgcG9pbnRlciBmb3IKKyAqICAgICAgICAgICAgICByZXR1cm5fdGFibGUgICAgLSBwb2ludGVyIHRvIGxvY2F0aW9uIHRvIHBsYWNlIHRoZSBwb2ludGVyIGZvcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKQEAgLTQyMCw1NyArNDI4LDM0IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX3RiX2dldF90YWJsZV9wdHIoYWNwaV90YWJsZV90eXBlIHRhYmxlX3R5cGUsCi0JCSAgICAgIHUzMiBpbnN0YW5jZSwgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqdGFibGVfcHRyX2xvYykKKwkJICAgICAgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKipyZXR1cm5fdGFibGUpCiB7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInRiX2dldF90YWJsZV9wdHIiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2dldF90YWJsZV9wdHIpOwogCi0JaWYgKCFhY3BpX2dibF9EU0RUKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19BQ1BJX1RBQkxFUyk7Ci0JfQotCi0JaWYgKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgeworCWlmICh0YWJsZV90eXBlID4gQUNQSV9UQUJMRV9JRF9NQVgpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCS8qCi0JICogRm9yIGFsbCB0YWJsZSB0eXBlcyAoU2luZ2xlL011bHRpcGxlKSwgdGhlIGZpcnN0Ci0JICogaW5zdGFuY2UgaXMgYWx3YXlzIGluIHRoZSBsaXN0IGhlYWQuCi0JICovCi0JaWYgKGluc3RhbmNlID09IDEpIHsKLQkJLyogR2V0IHRoZSBmaXJzdCAqLwotCi0JCSp0YWJsZV9wdHJfbG9jID0gTlVMTDsKLQkJaWYgKGFjcGlfZ2JsX3RhYmxlX2xpc3RzW3RhYmxlX3R5cGVdLm5leHQpIHsKLQkJCSp0YWJsZV9wdHJfbG9jID0KLQkJCSAgICBhY3BpX2dibF90YWJsZV9saXN0c1t0YWJsZV90eXBlXS5uZXh0LT5wb2ludGVyOwotCQl9Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIGluc3RhbmNlIG91dCBvZiByYW5nZSAqLworCS8qIENoZWNrIGZvciBpbnN0YW5jZSBvdXQgb2YgcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgdGFibGUgY291bnQgKi8KIAogCWlmIChpbnN0YW5jZSA+IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW3RhYmxlX3R5cGVdLmNvdW50KSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT1RfRVhJU1QpOwogCX0KIAotCS8qIFdhbGsgdGhlIGxpc3QgdG8gZ2V0IHRoZSBkZXNpcmVkIHRhYmxlCi0JICogU2luY2UgdGhlIGlmIChJbnN0YW5jZSA9PSAxKSBjaGVjayBhYm92ZSBjaGVja2VkIGZvciB0aGUKLQkgKiBmaXJzdCB0YWJsZSwgc2V0dGluZyB0YWJsZV9kZXNjIGVxdWFsIHRvIHRoZSAuTmV4dCBtZW1iZXIKLQkgKiBpcyBhY3R1YWxseSBwb2ludGluZyB0byB0aGUgc2Vjb25kIHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQotCSAqIG5lZWQgdG8gd2FsayBmcm9tIHRoZSAybmQgdGFibGUgdW50aWwgd2UgcmVhY2ggdGhlIEluc3RhbmNlCi0JICogdGhhdCB0aGUgdXNlciBpcyBsb29raW5nIGZvciBhbmQgcmV0dXJuIGl0cyB0YWJsZSBwb2ludGVyLgorCS8qCisJICogV2FsayB0aGUgbGlzdCB0byBnZXQgdGhlIGRlc2lyZWQgdGFibGUKKwkgKiBOb3RlOiBJbnN0YW5jZSBpcyBvbmUtYmFzZWQKIAkgKi8KIAl0YWJsZV9kZXNjID0gYWNwaV9nYmxfdGFibGVfbGlzdHNbdGFibGVfdHlwZV0ubmV4dDsKLQlmb3IgKGkgPSAyOyBpIDwgaW5zdGFuY2U7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBpbnN0YW5jZTsgaSsrKSB7CiAJCXRhYmxlX2Rlc2MgPSB0YWJsZV9kZXNjLT5uZXh0OwogCX0KIAogCS8qIFdlIGFyZSBub3cgcG9pbnRpbmcgdG8gdGhlIHJlcXVlc3RlZCB0YWJsZSdzIGRlc2NyaXB0b3IgKi8KIAotCSp0YWJsZV9wdHJfbG9jID0gdGFibGVfZGVzYy0+cG9pbnRlcjsKLQorCSpyZXR1cm5fdGFibGUgPSB0YWJsZV9kZXNjLT5wb2ludGVyOwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0YWxsLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0YWxsLmMKaW5kZXggMTM0ZTVkYy4uYWQ5ODIxMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJnZXRhbGwuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZ2V0YWxsLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInRiX2dldF9wcmltYXJ5X3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfcHJpbWFyeV90YWJsZSk7CiAKIAkvKiBJZ25vcmUgYSBOVUxMIGFkZHJlc3MgaW4gdGhlIFJTRFQgKi8KIApAQCAtMTQwLDcgKzE0MCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigidGJfZ2V0X3NlY29uZGFyeV90YWJsZSIsIHNpZ25hdHVyZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9TVFIodGJfZ2V0X3NlY29uZGFyeV90YWJsZSwgc2lnbmF0dXJlKTsKIAogCS8qIEdldCB0aGUgaGVhZGVyIGluIG9yZGVyIHRvIG1hdGNoIHRoZSBzaWduYXR1cmUgKi8KIApAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAkvKiBTaWduYXR1cmUgbXVzdCBtYXRjaCByZXF1ZXN0ICovCiAKLQlpZiAoQUNQSV9TVFJOQ01QKGhlYWRlci5zaWduYXR1cmUsIHNpZ25hdHVyZSwgQUNQSV9OQU1FX1NJWkUpKSB7CisJaWYgKCFBQ1BJX0NPTVBBUkVfTkFNRShoZWFkZXIuc2lnbmF0dXJlLCBzaWduYXR1cmUpKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIkluY29ycmVjdCB0YWJsZSBzaWduYXR1cmUgLSB3YW50ZWQgWyVzXSBmb3VuZCBbJTQuNHNdIiwKIAkJCSAgICBzaWduYXR1cmUsIGhlYWRlci5zaWduYXR1cmUpKTsKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgdGFibGVfaW5mbzsKIAlzdHJ1Y3QgYWNwaV9wb2ludGVyIGFkZHJlc3M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9nZXRfcmVxdWlyZWRfdGFibGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9nZXRfcmVxdWlyZWRfdGFibGVzKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIiVkIEFDUEkgdGFibGVzIGluIFJTRFRcbiIsCiAJCQkgIGFjcGlfZ2JsX3JzZHRfdGFibGVfY291bnQpKTsKQEAgLTIyMyw2ICsyMjMsNyBAQAogCSAqIGFueSBTU0RUcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcnNkdF90YWJsZV9jb3VudDsgaSsrKSB7CisKIAkJLyogR2V0IHRoZSB0YWJsZSBhZGRyZXNzIGZyb20gdGhlIGNvbW1vbiBpbnRlcm5hbCBYU0RUICovCiAKIAkJYWRkcmVzcy5wb2ludGVyLnZhbHVlID0gYWNwaV9nYmxfWFNEVC0+dGFibGVfb2Zmc2V0X2VudHJ5W2ldOwpAQCAtMzA1LDYgKzMwNiw2IEBACiAKIAkvKiBBbHdheXMgZGVsZXRlIHRoZSBSU0RQIG1hcHBpbmcsIHdlIGFyZSBkb25lIHdpdGggaXQgKi8KIAotCWFjcGlfdGJfZGVsZXRlX3RhYmxlc19ieV90eXBlKEFDUElfVEFCTEVfUlNEUCk7CisJYWNwaV90Yl9kZWxldGVfdGFibGVzX2J5X3R5cGUoQUNQSV9UQUJMRV9JRF9SU0RQKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJpbnN0YWwuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJpbnN0YWwuYwppbmRleCA3ZmZkMGZkLi43Y2EyZGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RiaW5zdGFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90Ymluc3RhbC5jCkBAIC03MywxNyArNzMsMTggQEAKIHsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9tYXRjaF9zaWduYXR1cmUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX21hdGNoX3NpZ25hdHVyZSk7CiAKIAkvKiBTZWFyY2ggZm9yIGEgc2lnbmF0dXJlIG1hdGNoIGFtb25nIHRoZSBrbm93biB0YWJsZSB0eXBlcyAqLwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9BQ1BJX1RBQkxFX1RZUEVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgKEFDUElfVEFCTEVfSURfTUFYICsgMSk7IGkrKykgewogCQlpZiAoIShhY3BpX2dibF90YWJsZV9kYXRhW2ldLmZsYWdzICYgc2VhcmNoX3R5cGUpKSB7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICghQUNQSV9TVFJOQ01QKHNpZ25hdHVyZSwgYWNwaV9nYmxfdGFibGVfZGF0YVtpXS5zaWduYXR1cmUsCiAJCQkJICBhY3BpX2dibF90YWJsZV9kYXRhW2ldLnNpZ19sZW5ndGgpKSB7CisKIAkJCS8qIEZvdW5kIGEgc2lnbmF0dXJlIG1hdGNoLCByZXR1cm4gaW5kZXggaWYgcmVxdWVzdGVkICovCiAKIAkJCWlmICh0YWJsZV9pbmZvKSB7CkBAIC0xMjIsNyArMTIzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9pbnN0YWxsX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9pbnN0YWxsX3RhYmxlKTsKIAogCS8qIExvY2sgdGFibGVzIHdoaWxlIGluc3RhbGxpbmcgKi8KIApAQCAtMTg3LDcgKzE4OCw3IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9oZWFkZXI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfcmVjb2duaXplX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9yZWNvZ25pemVfdGFibGUpOwogCiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHRhYmxlIHBvaW50ZXIgKi8KIApAQCAtMjE4LDcgKzIxOSw2IEBACiAJLyogUmV0dXJuIHRoZSB0YWJsZSB0eXBlIGFuZCBsZW5ndGggdmlhIHRoZSBpbmZvIHN0cnVjdCAqLwogCiAJdGFibGVfaW5mby0+bGVuZ3RoID0gKGFjcGlfc2l6ZSkgdGFibGVfaGVhZGVyLT5sZW5ndGg7Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtMjQzLDExICsyNDMsMTEgQEAKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJ0Yl9pbml0X3RhYmxlX2Rlc2NyaXB0b3IiLCB0YWJsZV90eXBlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMih0Yl9pbml0X3RhYmxlX2Rlc2NyaXB0b3IsIHRhYmxlX3R5cGUpOwogCiAJLyogQWxsb2NhdGUgYSBkZXNjcmlwdG9yIGZvciB0aGlzIHRhYmxlICovCiAKLQl0YWJsZV9kZXNjID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CisJdGFibGVfZGVzYyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CiAJaWYgKCF0YWJsZV9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTI3NCw3ICsyNzQsNyBAQAogCQkgKiBhdCB0aGlzIGxvY2F0aW9uLCBzbyByZXR1cm4gYW4gZXJyb3IuCiAJCSAqLwogCQlpZiAobGlzdF9oZWFkLT5uZXh0KSB7Ci0JCQlBQ1BJX01FTV9GUkVFKHRhYmxlX2Rlc2MpOworCQkJQUNQSV9GUkVFKHRhYmxlX2Rlc2MpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FMUkVBRFlfRVhJU1RTKTsKIAkJfQogCkBAIC0zMTIsMTUgKzMxMiwxNCBAQAogCiAJLyogRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSB0YWJsZSBkZXNjcmlwdG9yICovCiAKKwl0YWJsZV9kZXNjLT5sb2FkZWRfaW50b19uYW1lc3BhY2UgPSBGQUxTRTsKIAl0YWJsZV9kZXNjLT50eXBlID0gKHU4KSB0YWJsZV90eXBlOwogCXRhYmxlX2Rlc2MtPnBvaW50ZXIgPSB0YWJsZV9pbmZvLT5wb2ludGVyOwogCXRhYmxlX2Rlc2MtPmxlbmd0aCA9IHRhYmxlX2luZm8tPmxlbmd0aDsKIAl0YWJsZV9kZXNjLT5hbGxvY2F0aW9uID0gdGFibGVfaW5mby0+YWxsb2NhdGlvbjsKIAl0YWJsZV9kZXNjLT5hbWxfc3RhcnQgPSAodTggKikgKHRhYmxlX2Rlc2MtPnBvaW50ZXIgKyAxKSwKLQkgICAgdGFibGVfZGVzYy0+YW1sX2xlbmd0aCA9ICh1MzIpICh0YWJsZV9kZXNjLT5sZW5ndGggLQotCQkJCQkgICAgKHUzMikgc2l6ZW9mKHN0cnVjdAotCQkJCQkJCSBhY3BpX3RhYmxlX2hlYWRlcikpOwotCXRhYmxlX2Rlc2MtPmxvYWRlZF9pbnRvX25hbWVzcGFjZSA9IEZBTFNFOworCSAgICB0YWJsZV9kZXNjLT5hbWxfbGVuZ3RoID0gKHUzMikKKwkgICAgKHRhYmxlX2Rlc2MtPmxlbmd0aCAtICh1MzIpIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKIAogCS8qCiAJICogU2V0IHRoZSBhcHByb3ByaWF0ZSBnbG9iYWwgcG9pbnRlciAoaWYgdGhlcmUgaXMgb25lKSB0byBwb2ludCB0byB0aGUKQEAgLTMzNSw3ICszMzQsNiBAQAogCiAJdGFibGVfaW5mby0+b3duZXJfaWQgPSB0YWJsZV9kZXNjLT5vd25lcl9pZDsKIAl0YWJsZV9pbmZvLT5pbnN0YWxsZWRfZGVzYyA9IHRhYmxlX2Rlc2M7Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCkBAIC0zNTksNyArMzU3LDcgQEAKIAkgKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIEFDUEkgdGFibGVzCiAJICogTWVtb3J5IGNhbiBlaXRoZXIgYmUgbWFwcGVkIG9yIGFsbG9jYXRlZAogCSAqLwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBOVU1fQUNQSV9UQUJMRV9UWVBFUzsgdHlwZSsrKSB7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IChBQ1BJX1RBQkxFX0lEX01BWCArIDEpOyB0eXBlKyspIHsKIAkJYWNwaV90Yl9kZWxldGVfdGFibGVzX2J5X3R5cGUodHlwZSk7CiAJfQogfQpAQCAtMzgzLDkgKzM4MSw5IEBACiAJdTMyIGNvdW50OwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInRiX2RlbGV0ZV90YWJsZXNfYnlfdHlwZSIsIHR5cGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHRiX2RlbGV0ZV90YWJsZXNfYnlfdHlwZSwgdHlwZSk7CiAKLQlpZiAodHlwZSA+IEFDUElfVEFCTEVfTUFYKSB7CisJaWYgKHR5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkgewogCQlyZXR1cm5fVk9JRDsKIAl9CiAKQEAgLTM5NiwyOCArMzk0LDI4IEBACiAJLyogQ2xlYXIgdGhlIGFwcHJvcHJpYXRlICJ0eXBlZCIgZ2xvYmFsIHRhYmxlIHBvaW50ZXIgKi8KIAogCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9UQUJMRV9SU0RQOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9SU0RQOgogCQlhY3BpX2dibF9SU0RQID0gTlVMTDsKIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfVEFCTEVfRFNEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfRFNEVDoKIAkJYWNwaV9nYmxfRFNEVCA9IE5VTEw7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1RBQkxFX0ZBRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX0ZBRFQ6CiAJCWFjcGlfZ2JsX0ZBRFQgPSBOVUxMOwogCQlicmVhazsKIAotCWNhc2UgQUNQSV9UQUJMRV9GQUNTOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9GQUNTOgogCQlhY3BpX2dibF9GQUNTID0gTlVMTDsKIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfVEFCTEVfWFNEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfWFNEVDoKIAkJYWNwaV9nYmxfWFNEVCA9IE5VTEw7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1RBQkxFX1NTRFQ6Ci0JY2FzZSBBQ1BJX1RBQkxFX1BTRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX1NTRFQ6CisJY2FzZSBBQ1BJX1RBQkxFX0lEX1BTRFQ6CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNDcxLDcgKzQ2OSw3IEBACiAKIAljYXNlIEFDUElfTUVNX0FMTE9DQVRFRDoKIAotCQlBQ1BJX01FTV9GUkVFKHRhYmxlX2Rlc2MtPnBvaW50ZXIpOworCQlBQ1BJX0ZSRUUodGFibGVfZGVzYy0+cG9pbnRlcik7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX01FTV9NQVBQRUQ6CkBAIC01MDMsNyArNTAxLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICpuZXh0X2Rlc2M7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidGJfdW5pbnN0YWxsX3RhYmxlIiwgdGFibGVfZGVzYyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodGJfdW5pbnN0YWxsX3RhYmxlLCB0YWJsZV9kZXNjKTsKIAogCWlmICghdGFibGVfZGVzYykgewogCQlyZXR1cm5fUFRSKE5VTEwpOwpAQCAtNTMwLDcgKzUyOCw3IEBACiAJLyogRnJlZSB0aGUgdGFibGUgZGVzY3JpcHRvciAqLwogCiAJbmV4dF9kZXNjID0gdGFibGVfZGVzYy0+bmV4dDsKLQlBQ1BJX01FTV9GUkVFKHRhYmxlX2Rlc2MpOworCUFDUElfRlJFRSh0YWJsZV9kZXNjKTsKIAogCS8qIFJldHVybiBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnJzZHQuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJyc2R0LmMKaW5kZXggNGQzMDgyMi4uYWJjYjA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnJzZHQuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RicnNkdC5jCkBAIC02NCw3ICs2NCw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCByc2RwX2Rlc2NyaXB0b3IgKnJzZHA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl92ZXJpZnlfcnNkcCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfdmVyaWZ5X3JzZHApOwogCiAJc3dpdGNoIChhZGRyZXNzLT5wb2ludGVyX3R5cGUpIHsKIAljYXNlIEFDUElfTE9HSUNBTF9QT0lOVEVSOgpAQCAtNzgsNyArNzgsNyBAQAogCQkgKi8KIAkJc3RhdHVzID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHJlc3MtPnBvaW50ZXIucGh5c2ljYWwsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJzZHBfZGVzY3JpcHRvciksCi0JCQkJCSAgICAodm9pZCAqKSZyc2RwKTsKKwkJCQkJICAgIEFDUElfQ0FTVF9QVFIodm9pZCwgJnJzZHApKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQpAQCAtOTUsMTUgKzk1LDIwIEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQkvKiBUaGUgUlNEUCBzdXBwbGllZCBpcyBPSyAqLworCS8qIFJTRFAgaXMgb2suIEluaXQgdGhlIHRhYmxlIGluZm8gKi8KIAogCXRhYmxlX2luZm8ucG9pbnRlciA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyLCByc2RwKTsKIAl0YWJsZV9pbmZvLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcnNkcF9kZXNjcmlwdG9yKTsKLQl0YWJsZV9pbmZvLmFsbG9jYXRpb24gPSBBQ1BJX01FTV9NQVBQRUQ7CisKKwlpZiAoYWRkcmVzcy0+cG9pbnRlcl90eXBlID09IEFDUElfUEhZU0lDQUxfUE9JTlRFUikgeworCQl0YWJsZV9pbmZvLmFsbG9jYXRpb24gPSBBQ1BJX01FTV9NQVBQRUQ7CisJfSBlbHNlIHsKKwkJdGFibGVfaW5mby5hbGxvY2F0aW9uID0gQUNQSV9NRU1fTk9UX0FMTE9DQVRFRDsKKwl9CiAKIAkvKiBTYXZlIHRoZSB0YWJsZSBwb2ludGVycyBhbmQgYWxsb2NhdGlvbiBpbmZvICovCiAKLQlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX1JTRFAsICZ0YWJsZV9pbmZvKTsKKwlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX0lEX1JTRFAsICZ0YWJsZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBjbGVhbnVwOwogCX0KQEAgLTE3NCwyMiArMTc5LDIwIEBACiAKIGFjcGlfc3RhdHVzIGFjcGlfdGJfdmFsaWRhdGVfcnNkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX3B0cikKIHsKLQlpbnQgbm9fbWF0Y2g7CisJY2hhciAqc2lnbmF0dXJlOwogCiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCi0JLyoKLQkgKiBTZWFyY2ggZm9yIGFwcHJvcHJpYXRlIHNpZ25hdHVyZSwgUlNEVCBvciBYU0RUCi0JICovCisJLyogU2VhcmNoIGZvciBhcHByb3ByaWF0ZSBzaWduYXR1cmUsIFJTRFQgb3IgWFNEVCAqLworCiAJaWYgKGFjcGlfZ2JsX3Jvb3RfdGFibGVfdHlwZSA9PSBBQ1BJX1RBQkxFX1RZUEVfUlNEVCkgewotCQlub19tYXRjaCA9IEFDUElfU1RSTkNNUCgoY2hhciAqKXRhYmxlX3B0ciwgUlNEVF9TSUcsCi0JCQkJCXNpemVvZihSU0RUX1NJRykgLSAxKTsKKwkJc2lnbmF0dXJlID0gUlNEVF9TSUc7CiAJfSBlbHNlIHsKLQkJbm9fbWF0Y2ggPSBBQ1BJX1NUUk5DTVAoKGNoYXIgKil0YWJsZV9wdHIsIFhTRFRfU0lHLAotCQkJCQlzaXplb2YoWFNEVF9TSUcpIC0gMSk7CisJCXNpZ25hdHVyZSA9IFhTRFRfU0lHOwogCX0KIAotCWlmIChub19tYXRjaCkgeworCWlmICghQUNQSV9DT01QQVJFX05BTUUodGFibGVfcHRyLT5zaWduYXR1cmUsIHNpZ25hdHVyZSkpIHsKKwogCQkvKiBJbnZhbGlkIFJTRFQgb3IgWFNEVCBzaWduYXR1cmUgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLApAQCAtMTk4LDEwICsyMDEsOCBAQAogCQlBQ1BJX0RVTVBfQlVGRkVSKGFjcGlfZ2JsX1JTRFAsIDIwKTsKIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJSU0RUL1hTRFQgc2lnbmF0dXJlIGF0ICVYICglcCkgaXMgaW52YWxpZCIsCi0JCQkgICAgYWNwaV9nYmxfUlNEUC0+cnNkdF9waHlzaWNhbF9hZGRyZXNzLAotCQkJICAgICh2b2lkICopKGFjcGlfbmF0aXZlX3VpbnQpIGFjcGlfZ2JsX1JTRFAtPgotCQkJICAgIHJzZHRfcGh5c2ljYWxfYWRkcmVzcykpOworCQkJICAgICJSU0RUL1hTRFQgc2lnbmF0dXJlIGF0ICVYIGlzIGludmFsaWQiLAorCQkJICAgIGFjcGlfZ2JsX1JTRFAtPnJzZHRfcGh5c2ljYWxfYWRkcmVzcykpOwogCiAJCWlmIChhY3BpX2dibF9yb290X3RhYmxlX3R5cGUgPT0gQUNQSV9UQUJMRV9UWVBFX1JTRFQpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sICJMb29raW5nIGZvciBSU0RUIikpOwpAQCAtMjM0LDEzICsyMzUsMTMgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfcG9pbnRlciBhZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfZ2V0X3RhYmxlX3JzZHQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2dldF90YWJsZV9yc2R0KTsKIAogCS8qIEdldCB0aGUgUlNEVC9YU0RUIHZpYSB0aGUgUlNEUCAqLwogCiAJYWNwaV90Yl9nZXRfcnNkdF9hZGRyZXNzKCZhZGRyZXNzKTsKIAotCXRhYmxlX2luZm8udHlwZSA9IEFDUElfVEFCTEVfWFNEVDsKKwl0YWJsZV9pbmZvLnR5cGUgPSBBQ1BJX1RBQkxFX0lEX1hTRFQ7CiAJc3RhdHVzID0gYWNwaV90Yl9nZXRfdGFibGUoJmFkZHJlc3MsICZ0YWJsZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKQEAgLTI3NCwxMiArMjc1LDEzIEBACiAKIAkvKiBTYXZlIHRoZSB0YWJsZSBwb2ludGVycyBhbmQgYWxsb2NhdGlvbiBpbmZvICovCiAKLQlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX1hTRFQsICZ0YWJsZV9pbmZvKTsKKwlzdGF0dXMgPSBhY3BpX3RiX2luaXRfdGFibGVfZGVzY3JpcHRvcihBQ1BJX1RBQkxFX0lEX1hTRFQsICZ0YWJsZV9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JYWNwaV9nYmxfWFNEVCA9IEFDUElfQ0FTVF9QVFIoWFNEVF9ERVNDUklQVE9SLCB0YWJsZV9pbmZvLnBvaW50ZXIpOworCWFjcGlfZ2JsX1hTRFQgPQorCSAgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCB4c2R0X2Rlc2NyaXB0b3IsIHRhYmxlX2luZm8ucG9pbnRlcik7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJYU0RUIGxvY2F0ZWQgYXQgJXBcbiIsIGFjcGlfZ2JsX1hTRFQpKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ1dGlscy5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YnV0aWxzLmMKaW5kZXggYmM1NzE1OS4uMjA5YTQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YnV0aWxzLmMKQEAgLTcxLDcgKzcxLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfaXNfdGFibGVfaW5zdGFsbGVkIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9pc190YWJsZV9pbnN0YWxsZWQpOwogCiAJLyogR2V0IHRoZSBsaXN0IGRlc2NyaXB0b3IgYW5kIGZpcnN0IHRhYmxlIGRlc2NyaXB0b3IgKi8KIApAQCAtOTYsMTAgKzk2LDExIEBACiAJCSAgICAoIUFDUElfTUVNQ01QCiAJCSAgICAgKHRhYmxlX2Rlc2MtPnBvaW50ZXIsIG5ld190YWJsZV9kZXNjLT5wb2ludGVyLAogCQkgICAgICBuZXdfdGFibGVfZGVzYy0+cG9pbnRlci0+bGVuZ3RoKSkpIHsKKwogCQkJLyogTWF0Y2g6IHRoaXMgdGFibGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQgKi8KIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9UQUJMRVMsCi0JCQkJCSAgIlRhYmxlIFslNC40c10gYWxyZWFkeSBpbnN0YWxsZWQ6IFJldiAlWCBvZW1fdGFibGVfaWQgWyU4LjhzXVxuIiwKKwkJCQkJICAiVGFibGUgWyU0LjRzXSBhbHJlYWR5IGluc3RhbGxlZDogUmV2ICVYIE9lbVRhYmxlSWQgWyU4LjhzXVxuIiwKIAkJCQkJICBuZXdfdGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLAogCQkJCQkgIG5ld190YWJsZV9kZXNjLT5wb2ludGVyLT5yZXZpc2lvbiwKIAkJCQkJICBuZXdfdGFibGVfZGVzYy0+cG9pbnRlci0+CkBAIC0xNTksMTIgKzE2MCw4IEBACiAKIAlBQ1BJX01PVkVfMzJfVE9fMzIoJnNpZ25hdHVyZSwgdGFibGVfaGVhZGVyLT5zaWduYXR1cmUpOwogCWlmICghYWNwaV91dF92YWxpZF9hY3BpX25hbWUoc2lnbmF0dXJlKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJUYWJsZSBzaWduYXR1cmUgYXQgJXAgWyVwXSBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzIiwKLQkJCSAgICB0YWJsZV9oZWFkZXIsICZzaWduYXR1cmUpKTsKLQotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICJJbnZhbGlkIHRhYmxlIHNpZ25hdHVyZSBmb3VuZDogWyU0LjRzXSIsCi0JCQkgICAgICBBQ1BJX0NBU1RfUFRSKGNoYXIsICZzaWduYXR1cmUpKSk7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIHRhYmxlIHNpZ25hdHVyZSAweCU4LjhYIiwKKwkJCSAgICBzaWduYXR1cmUpKTsKIAogCQlBQ1BJX0RVTVBfQlVGRkVSKHRhYmxlX2hlYWRlciwKIAkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwpAQCAtMTc1LDEyICsxNzIsOSBAQAogCiAJaWYgKHRhYmxlX2hlYWRlci0+bGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiSW52YWxpZCBsZW5ndGggaW4gdGFibGUgaGVhZGVyICVwIG5hbWUgJTQuNHMiLAotCQkJICAgIHRhYmxlX2hlYWRlciwgKGNoYXIgKikmc2lnbmF0dXJlKSk7Ci0KLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIkludmFsaWQgdGFibGUgaGVhZGVyIGxlbmd0aCAoMHglWCkgZm91bmQiLAotCQkJICAgICAgKHUzMikgdGFibGVfaGVhZGVyLT5sZW5ndGgpKTsKKwkJCSAgICAiSW52YWxpZCBsZW5ndGggMHglWCBpbiB0YWJsZSB3aXRoIHNpZ25hdHVyZSAlNC40cyIsCisJCQkgICAgKHUzMikgdGFibGVfaGVhZGVyLT5sZW5ndGgsCisJCQkgICAgQUNQSV9DQVNUX1BUUihjaGFyLCAmc2lnbmF0dXJlKSkpOwogCiAJCUFDUElfRFVNUF9CVUZGRVIodGFibGVfaGVhZGVyLAogCQkJCSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CkBAIC0xOTIsNzIgKzE4NiwxMTkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV90Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0KKyAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX3N1bV90YWJsZQogICoKLSAqIFBBUkFNRVRFUlM6ICAqdGFibGVfaGVhZGVyICAgICAgICAgICAtIEFDUEkgdGFibGUgdG8gdmVyaWZ5CisgKiBQQVJBTUVURVJTOiAgQnVmZmVyICAgICAgICAgICAgICAtIEJ1ZmZlciB0byBzdW0KKyAqICAgICAgICAgICAgICBMZW5ndGggICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYnVmZmVyCiAgKgotICogUkVUVVJOOiAgICAgIDggYml0IGNoZWNrc3VtIG9mIHRhYmxlCisgKiBSRVRVUk46ICAgICAgOCBiaXQgc3VtIG9mIGJ1ZmZlcgogICoKLSAqIERFU0NSSVBUSU9OOiBEb2VzIGFuIDggYml0IGNoZWNrc3VtIG9mIHRhYmxlIGFuZCByZXR1cm5zIHN0YXR1cy4gIEEgY29ycmVjdAotICogICAgICAgICAgICAgIHRhYmxlIHNob3VsZCBoYXZlIGEgY2hlY2tzdW0gb2YgMC4KKyAqIERFU0NSSVBUSU9OOiBDb21wdXRlcyBhbiA4IGJpdCBzdW0gb2YgdGhlIGJ1ZmZlcihsZW5ndGgpIGFuZCByZXR1cm5zIGl0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzCi1hY3BpX3RiX3ZlcmlmeV90YWJsZV9jaGVja3N1bShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiB0YWJsZV9oZWFkZXIpCit1OCBhY3BpX3RiX3N1bV90YWJsZSh2b2lkICpidWZmZXIsIHUzMiBsZW5ndGgpCiB7Ci0JdTggY2hlY2tzdW07Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9uYXRpdmVfdWludCBpOworCXU4IHN1bSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0iKTsKLQotCS8qIENvbXB1dGUgdGhlIGNoZWNrc3VtIG9uIHRoZSB0YWJsZSAqLwotCi0JY2hlY2tzdW0gPQotCSAgICBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHRhYmxlX2hlYWRlciwgdGFibGVfaGVhZGVyLT5sZW5ndGgpOwotCi0JLyogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gKi8KLQotCWlmIChjaGVja3N1bSkgewotCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkgICAgICAiSW52YWxpZCBjaGVja3N1bSBpbiB0YWJsZSBbJTQuNHNdICglMDJYLCBzdW0gJTAyWCBpcyBub3QgemVybykiLAotCQkJICAgICAgdGFibGVfaGVhZGVyLT5zaWduYXR1cmUsCi0JCQkgICAgICAodTMyKSB0YWJsZV9oZWFkZXItPmNoZWNrc3VtLCAodTMyKSBjaGVja3N1bSkpOwotCi0JCXN0YXR1cyA9IEFFX0JBRF9DSEVDS1NVTTsKKwlpZiAoIWJ1ZmZlciB8fCAhbGVuZ3RoKSB7CisJCXJldHVybiAoMCk7CiAJfQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXN1bSA9ICh1OCkgKHN1bSArICgodTggKikgYnVmZmVyKVtpXSk7CisJfQorCXJldHVybiAoc3VtKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9nZW5lcmF0ZV9jaGVja3N1bQogICoKLSAqIFBBUkFNRVRFUlM6ICBCdWZmZXIgICAgICAgICAgICAgIC0gQnVmZmVyIHRvIGNoZWNrc3VtCi0gKiAgICAgICAgICAgICAgTGVuZ3RoICAgICAgICAgICAgICAtIFNpemUgb2YgdGhlIGJ1ZmZlcgorICogUEFSQU1FVEVSUzogIFRhYmxlICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGEgdmFsaWQgQUNQSSB0YWJsZSAod2l0aCBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIEFDUEkgaGVhZGVyKQogICoKICAqIFJFVFVSTjogICAgICA4IGJpdCBjaGVja3N1bSBvZiBidWZmZXIKICAqCi0gKiBERVNDUklQVElPTjogQ29tcHV0ZXMgYW4gOCBiaXQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlcihsZW5ndGgpIGFuZCByZXR1cm5zIGl0LgorICogREVTQ1JJUFRJT046IENvbXB1dGVzIGFuIDggYml0IGNoZWNrc3VtIG9mIHRoZSB0YWJsZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11OCBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHZvaWQgKmJ1ZmZlciwgdTMyIGxlbmd0aCkKK3U4IGFjcGlfdGJfZ2VuZXJhdGVfY2hlY2tzdW0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICogdGFibGUpCiB7Ci0JdTggKmVuZF9idWZmZXI7Ci0JdTggKnJvdmVyOwotCXU4IHN1bSA9IDA7CisJdTggY2hlY2tzdW07CiAKLQlpZiAoYnVmZmVyICYmIGxlbmd0aCkgewotCQkvKiAgQnVmZmVyIGFuZCBMZW5ndGggYXJlIHZhbGlkICAgKi8KKwkvKiBTdW0gdGhlIGVudGlyZSB0YWJsZSBhcy1pcyAqLwogCi0JCWVuZF9idWZmZXIgPSBBQ1BJX0FERF9QVFIodTgsIGJ1ZmZlciwgbGVuZ3RoKTsKKwljaGVja3N1bSA9IGFjcGlfdGJfc3VtX3RhYmxlKHRhYmxlLCB0YWJsZS0+bGVuZ3RoKTsKIAotCQlmb3IgKHJvdmVyID0gYnVmZmVyOyByb3ZlciA8IGVuZF9idWZmZXI7IHJvdmVyKyspIHsKLQkJCXN1bSA9ICh1OCkgKHN1bSArICpyb3Zlcik7Ci0JCX0KKwkvKiBTdWJ0cmFjdCBvZmYgdGhlIGV4aXN0aW5nIGNoZWNrc3VtIHZhbHVlIGluIHRoZSB0YWJsZSAqLworCisJY2hlY2tzdW0gPSAodTgpIChjaGVja3N1bSAtIHRhYmxlLT5jaGVja3N1bSk7CisKKwkvKiBDb21wdXRlIHRoZSBmaW5hbCBjaGVja3N1bSAqLworCisJY2hlY2tzdW0gPSAodTgpICgwIC0gY2hlY2tzdW0pOworCXJldHVybiAoY2hlY2tzdW0pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX3NldF9jaGVja3N1bQorICoKKyAqIFBBUkFNRVRFUlM6ICBUYWJsZSAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBhIHZhbGlkIEFDUEkgdGFibGUgKHdpdGggYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCBBQ1BJIGhlYWRlcikKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZS4gU2V0cyB0aGUgdGFibGUgY2hlY2tzdW0gZmllbGQKKyAqCisgKiBERVNDUklQVElPTjogQ29tcHV0ZXMgYW4gOCBiaXQgY2hlY2tzdW0gb2YgdGhlIHRhYmxlIGFuZCBpbnNlcnRzIHRoZQorICogICAgICAgICAgICAgIGNoZWNrc3VtIGludG8gdGhlIHRhYmxlIGhlYWRlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGFjcGlfdGJfc2V0X2NoZWNrc3VtKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisKKwl0YWJsZS0+Y2hlY2tzdW0gPSBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHRhYmxlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV90Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0KKyAqCisgKiBQQVJBTUVURVJTOiAgKnRhYmxlX2hlYWRlciAgICAgICAgICAgLSBBQ1BJIHRhYmxlIHRvIHZlcmlmeQorICoKKyAqIFJFVFVSTjogICAgICA4IGJpdCBjaGVja3N1bSBvZiB0YWJsZQorICoKKyAqIERFU0NSSVBUSU9OOiBHZW5lcmF0ZXMgYW4gOCBiaXQgY2hlY2tzdW0gb2YgdGFibGUgYW5kIHJldHVybnMgYW5kIGNvbXBhcmVzCisgKiAgICAgICAgICAgICAgaXQgdG8gdGhlIGV4aXN0aW5nIGNoZWNrc3VtIHZhbHVlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX3RiX3ZlcmlmeV90YWJsZV9jaGVja3N1bShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX2hlYWRlcikKK3sKKwl1OCBjaGVja3N1bTsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfdmVyaWZ5X3RhYmxlX2NoZWNrc3VtKTsKKworCS8qIENvbXB1dGUgdGhlIGNoZWNrc3VtIG9uIHRoZSB0YWJsZSAqLworCisJY2hlY2tzdW0gPSBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHRhYmxlX2hlYWRlcik7CisKKwkvKiBDaGVja3N1bSBvaz8gKi8KKworCWlmIChjaGVja3N1bSA9PSB0YWJsZV9oZWFkZXItPmNoZWNrc3VtKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJfQotCXJldHVybiAoc3VtKTsKKworCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJICAgICAgIkluY29ycmVjdCBjaGVja3N1bSBpbiB0YWJsZSBbJTQuNHNdIC0gaXMgJTIuMlgsIHNob3VsZCBiZSAlMi4yWCIsCisJCSAgICAgIHRhYmxlX2hlYWRlci0+c2lnbmF0dXJlLCB0YWJsZV9oZWFkZXItPmNoZWNrc3VtLAorCQkgICAgICBjaGVja3N1bSkpOworCisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9DSEVDS1NVTSk7CiB9CiAKICNpZmRlZiBBQ1BJX09CU09MRVRFX0ZVTkNUSU9OUwpAQCAtMjc2LDEyICszMTcsMTIgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfdGJfaGFuZGxlX3RvX29iamVjdCh1MTYgdGFibGVfaWQsCi0JCQkgc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqKiByZXR1cm5fdGFibGVfZGVzYykKKwkJCSBzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICoqcmV0dXJuX3RhYmxlX2Rlc2MpCiB7CiAJdTMyIGk7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgidGJfaGFuZGxlX3RvX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fTkFNRSh0Yl9oYW5kbGVfdG9fb2JqZWN0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RBQkxFX01BWDsgaSsrKSB7CiAJCXRhYmxlX2Rlc2MgPSBhY3BpX2dibF90YWJsZV9saXN0c1tpXS5uZXh0OwpAQCAtMjk1LDcgKzMzNiw3IEBACiAJCX0KIAl9CiAKLQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAidGFibGVfaWQ9JVggZG9lcyBub3QgZXhpc3QiLCB0YWJsZV9pZCkpOworCUFDUElfRVJST1IoKEFFX0lORk8sICJUYWJsZUlkPSVYIGRvZXMgbm90IGV4aXN0IiwgdGFibGVfaWQpKTsKIAlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZhY2UuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCmluZGV4IDlmZTUzYzkuLjRlOTFmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCkBAIC00Miw4ICs0Miw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KQEAgLTY4LDcgKzY2LDcgQEAKIAlzdHJ1Y3QgYWNwaV9wb2ludGVyIHJzZHBfYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2xvYWRfdGFibGVzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2xvYWRfdGFibGVzKTsKIAogCS8qIEdldCB0aGUgUlNEUCAqLwogCkBAIC0xMjMsNiArMTIxLDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZXMpCisKICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMzksMTQgKzEzOSwxMyBAQAogICogICAgICAgICAgICAgIGlzIGRldGVybWluZWQgdGhhdCB0aGUgdGFibGUgaXMgaW52YWxpZCwgdGhlIGNhbGwgd2lsbCBmYWlsLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfbG9hZF90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX3B0cikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyB0YWJsZV9pbmZvOwogCXN0cnVjdCBhY3BpX3BvaW50ZXIgYWRkcmVzczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbG9hZF90YWJsZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sb2FkX3RhYmxlKTsKIAogCWlmICghdGFibGVfcHRyKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTE3NCw2ICsxNzMsNyBAQAogCXN0YXR1cyA9IGFjcGlfdGJfaW5zdGFsbF90YWJsZSgmdGFibGVfaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChzdGF0dXMgPT0gQUVfQUxSRUFEWV9FWElTVFMpIHsKKwogCQkJLyogVGFibGUgYWxyZWFkeSBleGlzdHMsIG5vIGVycm9yICovCiAKIAkJCXN0YXR1cyA9IEFFX09LOwpAQCAtMTg4LDEyICsxODgsMTIgQEAKIAkvKiBDb252ZXJ0IHRoZSB0YWJsZSB0byBjb21tb24gZm9ybWF0IGlmIG5lY2Vzc2FyeSAqLwogCiAJc3dpdGNoICh0YWJsZV9pbmZvLnR5cGUpIHsKLQljYXNlIEFDUElfVEFCTEVfRkFEVDoKKwljYXNlIEFDUElfVEFCTEVfSURfRkFEVDoKIAogCQlzdGF0dXMgPSBhY3BpX3RiX2NvbnZlcnRfdGFibGVfZmFkdCgpOwogCQlicmVhazsKIAotCWNhc2UgQUNQSV9UQUJMRV9GQUNTOgorCWNhc2UgQUNQSV9UQUJMRV9JRF9GQUNTOgogCiAJCXN0YXR1cyA9IGFjcGlfdGJfYnVpbGRfY29tbW9uX2ZhY3MoJnRhYmxlX2luZm8pOwogCQlicmVhazsKQEAgLTIwOCw2ICsyMDgsNyBAQAogCX0KIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCiAJCS8qIFVuaW5zdGFsbCB0YWJsZSBhbmQgZnJlZSB0aGUgYnVmZmVyICovCiAKIAkJKHZvaWQpYWNwaV90Yl91bmluc3RhbGxfdGFibGUodGFibGVfaW5mby5pbnN0YWxsZWRfZGVzYyk7CkBAIC0yMTYsNiArMjE3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91bmxvYWRfdGFibGUKQEAgLTIyNywxNiArMjMwLDE1IEBACiAgKiBERVNDUklQVElPTjogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZm9yY2UgdGhlIHVubG9hZCBvZiBhIHRhYmxlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV91bmxvYWRfdGFibGUoYWNwaV90YWJsZV90eXBlIHRhYmxlX3R5cGUpCiB7CiAJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdW5sb2FkX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3VubG9hZF90YWJsZSk7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCi0JaWYgKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgeworCWlmICh0YWJsZV90eXBlID4gQUNQSV9UQUJMRV9JRF9NQVgpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIApAQCAtMjYxLDYgKzI2Myw4IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdW5sb2FkX3RhYmxlKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF90YWJsZV9oZWFkZXIKQEAgLTI4MSw3ICsyODUsNiBAQAogICogICAgICAgICAgICAgIGhhdmUgYSBzdGFuZGFyZCBoZWFkZXIgYW5kIGlzIGZpeGVkIGxlbmd0aC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGVfaGVhZGVyKGFjcGlfdGFibGVfdHlwZSB0YWJsZV90eXBlLAogCQkgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqb3V0X3RhYmxlX2hlYWRlcikKQEAgLTI4OSwxNiArMjkyLDE2IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YmxfcHRyOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X3RhYmxlX2hlYWRlciIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfdGFibGVfaGVhZGVyKTsKIAogCWlmICgoaW5zdGFuY2UgPT0gMCkgfHwKLQkgICAgKHRhYmxlX3R5cGUgPT0gQUNQSV9UQUJMRV9SU0RQKSB8fCAoIW91dF90YWJsZV9oZWFkZXIpKSB7CisJICAgICh0YWJsZV90eXBlID09IEFDUElfVEFCTEVfSURfUlNEUCkgfHwgKCFvdXRfdGFibGVfaGVhZGVyKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHRhYmxlIHR5cGUgYW5kIGluc3RhbmNlICovCiAKLQlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgfHwKKwlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkgfHwKIAkgICAgKEFDUElfSVNfU0lOR0xFX1RBQkxFKGFjcGlfZ2JsX3RhYmxlX2RhdGFbdGFibGVfdHlwZV0uZmxhZ3MpICYmCiAJICAgICBpbnN0YW5jZSA+IDEpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTMyNSw2ICszMjgsNyBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGVfaGVhZGVyKQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0OSw3ICszNTMsNiBAQAogICogICAgICAgICAgICAgIGEgY29tcGxldGUgdGFibGUgaW5jbHVkaW5nIHRoZSBoZWFkZXIuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X3RhYmxlKGFjcGlfdGFibGVfdHlwZSB0YWJsZV90eXBlLAogCSAgICAgICB1MzIgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcikKQEAgLTM1OCw3ICszNjEsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3NpemUgdGFibGVfbGVuZ3RoOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfdGFibGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3RhYmxlKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTM3Myw3ICszNzYsNyBAQAogCiAJLyogQ2hlY2sgdGhlIHRhYmxlIHR5cGUgYW5kIGluc3RhbmNlICovCiAKLQlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX01BWCkgfHwKKwlpZiAoKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkgfHwKIAkgICAgKEFDUElfSVNfU0lOR0xFX1RBQkxFKGFjcGlfZ2JsX3RhYmxlX2RhdGFbdGFibGVfdHlwZV0uZmxhZ3MpICYmCiAJICAgICBpbnN0YW5jZSA+IDEpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTM5Niw3ICszOTksOCBAQAogCiAJLyogR2V0IHRoZSB0YWJsZSBsZW5ndGggKi8KIAotCWlmICh0YWJsZV90eXBlID09IEFDUElfVEFCTEVfUlNEUCkgeworCWlmICh0YWJsZV90eXBlID09IEFDUElfVEFCTEVfSURfUlNEUCkgeworCiAJCS8qIFJTRCBQVFIgaXMgdGhlIG9ubHkgInRhYmxlIiB3aXRob3V0IGEgaGVhZGVyICovCiAKIAkJdGFibGVfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByc2RwX2Rlc2NyaXB0b3IpOwpAQCAtNDE3LDQgKzQyMSw0IEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF90YWJsZSk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZyb290LmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZyb290LmMKaW5kZXggYTYyZGI2YS4uZGEyNjQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90Ynhmcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZnJvb3QuYwpAQCAtNDEsOCArNDEsNiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KIApAQCAtNzUsNiArNzMsNyBAQAogCSAqICBUaGUgc2lnbmF0dXJlIGFuZCBjaGVja3N1bSBtdXN0IGJvdGggYmUgY29ycmVjdAogCSAqLwogCWlmIChBQ1BJX1NUUk5DTVAoKGNoYXIgKilyc2RwLCBSU0RQX1NJRywgc2l6ZW9mKFJTRFBfU0lHKSAtIDEpICE9IDApIHsKKwogCQkvKiBOb3BlLCBCQUQgU2lnbmF0dXJlICovCiAKIAkJcmV0dXJuIChBRV9CQURfU0lHTkFUVVJFKTsKQEAgLTgyLDE1ICs4MSwxNCBAQAogCiAJLyogQ2hlY2sgdGhlIHN0YW5kYXJkIGNoZWNrc3VtICovCiAKLQlpZiAoYWNwaV90Yl9nZW5lcmF0ZV9jaGVja3N1bShyc2RwLCBBQ1BJX1JTRFBfQ0hFQ0tTVU1fTEVOR1RIKSAhPSAwKSB7CisJaWYgKGFjcGlfdGJfc3VtX3RhYmxlKHJzZHAsIEFDUElfUlNEUF9DSEVDS1NVTV9MRU5HVEgpICE9IDApIHsKIAkJcmV0dXJuIChBRV9CQURfQ0hFQ0tTVU0pOwogCX0KIAogCS8qIENoZWNrIGV4dGVuZGVkIGNoZWNrc3VtIGlmIHRhYmxlIHZlcnNpb24gPj0gMiAqLwogCiAJaWYgKChyc2RwLT5yZXZpc2lvbiA+PSAyKSAmJgotCSAgICAoYWNwaV90Yl9nZW5lcmF0ZV9jaGVja3N1bShyc2RwLCBBQ1BJX1JTRFBfWENIRUNLU1VNX0xFTkdUSCkgIT0KLQkgICAgIDApKSB7CisJICAgIChhY3BpX3RiX3N1bV90YWJsZShyc2RwLCBBQ1BJX1JTRFBfWENIRUNLU1VNX0xFTkdUSCkgIT0gMCkpIHsKIAkJcmV0dXJuIChBRV9CQURfQ0hFQ0tTVU0pOwogCX0KIApAQCAtMTIxLDcgKzExOSw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9maW5kX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9maW5kX3RhYmxlKTsKIAogCS8qIFZhbGlkYXRlIHN0cmluZyBsZW5ndGhzICovCiAKQEAgLTEzMSw3ICsxMjksNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX1NUUklOR19MSU1JVCk7CiAJfQogCi0JaWYgKCFBQ1BJX1NUUk5DTVAoc2lnbmF0dXJlLCBEU0RUX1NJRywgQUNQSV9OQU1FX1NJWkUpKSB7CisJaWYgKEFDUElfQ09NUEFSRV9OQU1FKHNpZ25hdHVyZSwgRFNEVF9TSUcpKSB7CiAJCS8qCiAJCSAqIFRoZSBEU0RUIHBvaW50ZXIgaXMgY29udGFpbmVkIGluIHRoZSBGQURULCBub3QgdGhlIFJTRFQuCiAJCSAqIFRoaXMgY29kZSBzaG91bGQgc3VmZmljZSwgYmVjYXVzZSB0aGUgb25seSBjb2RlIHRoYXQgd291bGQgcGVyZm9ybQpAQCAtMTU2LDEwICsxNTQsMTIgQEAKIAogCS8qIENoZWNrIG9lbV9pZCBhbmQgb2VtX3RhYmxlX2lkICovCiAKLQlpZiAoKG9lbV9pZFswXSAmJiBBQ1BJX1NUUk5DTVAob2VtX2lkLCB0YWJsZS0+b2VtX2lkLAotCQkJCSAgICAgICBzaXplb2YodGFibGUtPm9lbV9pZCkpKSB8fAotCSAgICAob2VtX3RhYmxlX2lkWzBdICYmIEFDUElfU1RSTkNNUChvZW1fdGFibGVfaWQsIHRhYmxlLT5vZW1fdGFibGVfaWQsCi0JCQkJCSAgICAgc2l6ZW9mKHRhYmxlLT5vZW1fdGFibGVfaWQpKSkpIHsKKwlpZiAoKG9lbV9pZFswXSAmJgorCSAgICAgQUNQSV9TVFJOQ01QKG9lbV9pZCwgdGFibGUtPm9lbV9pZCwKKwkJCSAgc2l6ZW9mKHRhYmxlLT5vZW1faWQpKSkgfHwKKwkgICAgKG9lbV90YWJsZV9pZFswXSAmJgorCSAgICAgQUNQSV9TVFJOQ01QKG9lbV90YWJsZV9pZCwgdGFibGUtPm9lbV90YWJsZV9pZCwKKwkJCSAgc2l6ZW9mKHRhYmxlLT5vZW1fdGFibGVfaWQpKSkpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OQU1FX05PVF9GT1VORCk7CiAJfQogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAl1MzIgaTsKIAl1MzIgajsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZ2V0X2Zpcm13YXJlX3RhYmxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF9maXJtd2FyZV90YWJsZSk7CiAKIAkvKgogCSAqIEVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoZSB0YWJsZSBtYW5hZ2VyIGlzIGluaXRpYWxpemVkLiAgV2UgZG9uJ3QKQEAgLTIxNyw2ICsyMTcsNyBAQAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSBSU0RQICovCiAKIAlpZiAoIWFjcGlfZ2JsX1JTRFApIHsKKwogCQkvKiBHZXQgdGhlIFJTRFAgKi8KIAogCQlzdGF0dXMgPSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoZmxhZ3MsICZhZGRyZXNzKTsKQEAgLTI2MSw3ICsyNjIsNyBAQAogCiAJLyogR2V0IGFuZCB2YWxpZGF0ZSB0aGUgUlNEVCAqLwogCi0JcnNkdF9pbmZvID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CisJcnNkdF9pbmZvID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MpKTsKIAlpZiAoIXJzZHRfaW5mbykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CkBAIC0yNzgsMTMgKzI3OSwxMyBAQAogCiAJLyogQWxsb2NhdGUgYSBzY3JhdGNoIHRhYmxlIGhlYWRlciBhbmQgdGFibGUgZGVzY3JpcHRvciAqLwogCi0JaGVhZGVyID0gQUNQSV9NRU1fQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCWhlYWRlciA9IEFDUElfQUxMT0NBVEUoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwogCWlmICghaGVhZGVyKSB7CiAJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCXRhYmxlX2luZm8gPSBBQ1BJX01FTV9BTExPQ0FURShzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfZGVzYykpOworCXRhYmxlX2luZm8gPSBBQ1BJX0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjKSk7CiAJaWYgKCF0YWJsZV9pbmZvKSB7CiAJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJZ290byBjbGVhbnVwOwpAQCAtMzA4LDEyICszMDksMTIgQEAKIAkJaWYgKGFjcGlfZ2JsX3Jvb3RfdGFibGVfdHlwZSA9PSBBQ1BJX1RBQkxFX1RZUEVfUlNEVCkgewogCQkJYWRkcmVzcy5wb2ludGVyLnZhbHVlID0KIAkJCSAgICAoQUNQSV9DQVNUX1BUUgotCQkJICAgICAoUlNEVF9ERVNDUklQVE9SLAorCQkJICAgICAoc3RydWN0IHJzZHRfZGVzY3JpcHRvciwKIAkJCSAgICAgIHJzZHRfaW5mby0+cG9pbnRlcikpLT50YWJsZV9vZmZzZXRfZW50cnlbaV07CiAJCX0gZWxzZSB7CiAJCQlhZGRyZXNzLnBvaW50ZXIudmFsdWUgPQogCQkJICAgIChBQ1BJX0NBU1RfUFRSCi0JCQkgICAgIChYU0RUX0RFU0NSSVBUT1IsCisJCQkgICAgIChzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yLAogCQkJICAgICAgcnNkdF9pbmZvLT5wb2ludGVyKSktPnRhYmxlX29mZnNldF9lbnRyeVtpXTsKIAkJfQogCkBAIC0zMjYsMTEgKzMyNywxMyBAQAogCiAJCS8qIENvbXBhcmUgdGFibGUgc2lnbmF0dXJlcyBhbmQgdGFibGUgaW5zdGFuY2UgKi8KIAotCQlpZiAoIUFDUElfU1RSTkNNUChoZWFkZXItPnNpZ25hdHVyZSwgc2lnbmF0dXJlLCBBQ1BJX05BTUVfU0laRSkpIHsKKwkJaWYgKEFDUElfQ09NUEFSRV9OQU1FKGhlYWRlci0+c2lnbmF0dXJlLCBzaWduYXR1cmUpKSB7CisKIAkJCS8qIEFuIGluc3RhbmNlIG9mIHRoZSB0YWJsZSB3YXMgZm91bmQgKi8KIAogCQkJaisrOwogCQkJaWYgKGogPj0gaW5zdGFuY2UpIHsKKwogCQkJCS8qIEZvdW5kIHRoZSBjb3JyZWN0IGluc3RhbmNlLCBnZXQgdGhlIGVudGlyZSB0YWJsZSAqLwogCiAJCQkJc3RhdHVzID0KQEAgLTM1NSwyMyArMzU4LDIxIEBACiAJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHJzZHRfaW5mby0+cG9pbnRlciwKIAkJCQkgICAgIChhY3BpX3NpemUpIHJzZHRfaW5mby0+cG9pbnRlci0+bGVuZ3RoKTsKIAl9Ci0JQUNQSV9NRU1fRlJFRShyc2R0X2luZm8pOworCUFDUElfRlJFRShyc2R0X2luZm8pOwogCiAJaWYgKGhlYWRlcikgewotCQlBQ1BJX01FTV9GUkVFKGhlYWRlcik7CisJCUFDUElfRlJFRShoZWFkZXIpOwogCX0KIAlpZiAodGFibGVfaW5mbykgewotCQlBQ1BJX01FTV9GUkVFKHRhYmxlX2luZm8pOworCQlBQ1BJX0ZSRUUodGFibGVfaW5mbyk7CiAJfQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2Zpcm13YXJlX3RhYmxlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9maXJtd2FyZV90YWJsZSkKIAogLyogVEJEOiBNb3ZlIHRvIGEgbmV3IGZpbGUgKi8KLQogI2lmIEFDUElfTUFDSElORV9XSURUSCAhPSAxNgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2ZpbmRfcm9vdF9wb2ludGVyCkBAIC0zODQsMTMgKzM4NSwxMiBAQAogICogREVTQ1JJUFRJT046IEZpbmQgdGhlIFJTRFAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2ZpbmRfcm9vdF9wb2ludGVyKHUzMiBmbGFncywgc3RydWN0IGFjcGlfcG9pbnRlciAqcnNkcF9hZGRyZXNzKQogewogCXN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MgdGFibGVfaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2ZpbmRfcm9vdF9wb2ludGVyIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2ZpbmRfcm9vdF9wb2ludGVyKTsKIAogCS8qIEdldCB0aGUgUlNEUCAqLwogCkBAIC00MDcsNiArNDA3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9maW5kX3Jvb3RfcG9pbnRlcikKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9zY2FuX21lbW9yeV9mb3JfcnNkcApAQCAtNDE5LDE0ICs0MjEsMTMgQEAKICAqIERFU0NSSVBUSU9OOiBTZWFyY2ggYSBibG9jayBvZiBtZW1vcnkgZm9yIHRoZSBSU0RQIHNpZ25hdHVyZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyB1OCAqYWNwaV90Yl9zY2FuX21lbW9yeV9mb3JfcnNkcCh1OCAqIHN0YXJ0X2FkZHJlc3MsIHUzMiBsZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU4ICptZW1fcm92ZXI7CiAJdTggKmVuZF9hZGRyZXNzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidGJfc2Nhbl9tZW1vcnlfZm9yX3JzZHAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX3NjYW5fbWVtb3J5X2Zvcl9yc2RwKTsKIAogCWVuZF9hZGRyZXNzID0gc3RhcnRfYWRkcmVzcyArIGxlbmd0aDsKIApAQCAtNDM0LDEyICs0MzUsMTQgQEAKIAogCWZvciAobWVtX3JvdmVyID0gc3RhcnRfYWRkcmVzczsgbWVtX3JvdmVyIDwgZW5kX2FkZHJlc3M7CiAJICAgICBtZW1fcm92ZXIgKz0gQUNQSV9SU0RQX1NDQU5fU1RFUCkgeworCiAJCS8qIFRoZSBSU0RQIHNpZ25hdHVyZSBhbmQgY2hlY2tzdW0gbXVzdCBib3RoIGJlIGNvcnJlY3QgKi8KIAogCQlzdGF0dXMgPQogCQkgICAgYWNwaV90Yl92YWxpZGF0ZV9yc2RwKEFDUElfQ0FTVF9QVFIKIAkJCQkJICAoc3RydWN0IHJzZHBfZGVzY3JpcHRvciwgbWVtX3JvdmVyKSk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCiAJCQkvKiBTaWcgYW5kIGNoZWNrc3VtIHZhbGlkLCB3ZSBoYXZlIGZvdW5kIGEgcmVhbCBSU0RQICovCiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKQEAgLTQ2OSwxMCArNDcyLDEwIEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cywgUlNEUCBwaHlzaWNhbCBhZGRyZXNzCiAgKgotICogREVTQ1JJUFRJT046IHNlYXJjaCBsb3dlciAxX21ieXRlIG9mIG1lbW9yeSBmb3IgdGhlIHJvb3Qgc3lzdGVtIGRlc2NyaXB0b3IKKyAqIERFU0NSSVBUSU9OOiBTZWFyY2ggbG93ZXIgMV9tYnl0ZSBvZiBtZW1vcnkgZm9yIHRoZSByb290IHN5c3RlbSBkZXNjcmlwdG9yCiAgKiAgICAgICAgICAgICAgcG9pbnRlciBzdHJ1Y3R1cmUuICBJZiBpdCBpcyBmb3VuZCwgc2V0ICpSU0RQIHRvIHBvaW50IHRvIGl0LgogICoKLSAqICAgICAgICAgICAgICBOT1RFMTogVGhlIFJTRHAgbXVzdCBiZSBlaXRoZXIgaW4gdGhlIGZpcnN0IDFfayBvZiB0aGUgRXh0ZW5kZWQKKyAqICAgICAgICAgICAgICBOT1RFMTogVGhlIFJTRFAgbXVzdCBiZSBlaXRoZXIgaW4gdGhlIGZpcnN0IDFfayBvZiB0aGUgRXh0ZW5kZWQKICAqICAgICAgICAgICAgICBCSU9TIERhdGEgQXJlYSBvciBiZXR3ZWVuIEUwMDAwIGFuZCBGRkZGRiAoRnJvbSBBQ1BJIFNwZWMuKQogICogICAgICAgICAgICAgIE9ubHkgYSAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBpcyBuZWNlc3NhcnkuCiAgKgpAQCAtNDg5LDEyICs0OTIsMTMgQEAKIAl1MzIgcGh5c2ljYWxfYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ0Yl9maW5kX3JzZHAiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2ZpbmRfcnNkcCk7CiAKIAkvKgogCSAqIFNjYW4gc3VwcG9ydHMgZWl0aGVyIGxvZ2ljYWwgYWRkcmVzc2luZyBvciBwaHlzaWNhbCBhZGRyZXNzaW5nCiAJICovCiAJaWYgKChmbGFncyAmIEFDUElfTUVNT1JZX01PREUpID09IEFDUElfTE9HSUNBTF9BRERSRVNTSU5HKSB7CisKIAkJLyogMWEpIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIEV4dGVuZGVkIEJJT1MgRGF0YSBBcmVhIChFQkRBKSAqLwogCiAJCXN0YXR1cyA9IGFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQpAQCAtNTIxLDcgKzUyNSw3IEBACiAKIAkJaWYgKHBoeXNpY2FsX2FkZHJlc3MgPiAweDQwMCkgewogCQkJLyoKLQkJCSAqIDFiKSBTZWFyY2ggRUJEQSBwYXJhZ3JhcGhzIChFQkRhIGlzIHJlcXVpcmVkIHRvIGJlIGEKKwkJCSAqIDFiKSBTZWFyY2ggRUJEQSBwYXJhZ3JhcGhzIChFQkRBIGlzIHJlcXVpcmVkIHRvIGJlIGEKIAkJCSAqICAgICBtaW5pbXVtIG9mIDFfayBsZW5ndGgpCiAJCQkgKi8KIAkJCXN0YXR1cyA9IGFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQpAQCAtNTQyLDEwICs1NDYsMTEgQEAKIAkJCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlX3B0ciwgQUNQSV9FQkRBX1dJTkRPV19TSVpFKTsKIAogCQkJaWYgKG1lbV9yb3ZlcikgeworCiAJCQkJLyogUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCiAKIAkJCQlwaHlzaWNhbF9hZGRyZXNzICs9Ci0JCQkJICAgIEFDUElfUFRSX0RJRkYobWVtX3JvdmVyLCB0YWJsZV9wdHIpOworCQkJCSAgICAodTMyKSBBQ1BJX1BUUl9ESUZGKG1lbV9yb3ZlciwgdGFibGVfcHRyKTsKIAogCQkJCXRhYmxlX2luZm8tPnBoeXNpY2FsX2FkZHJlc3MgPQogCQkJCSAgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBwaHlzaWNhbF9hZGRyZXNzOwpAQCAtNTc2LDExICs1ODEsMTIgQEAKIAkJYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGVfcHRyLCBBQ1BJX0hJX1JTRFBfV0lORE9XX1NJWkUpOwogCiAJCWlmIChtZW1fcm92ZXIpIHsKKwogCQkJLyogUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCiAKLQkJCXBoeXNpY2FsX2FkZHJlc3MgPQotCQkJICAgIEFDUElfSElfUlNEUF9XSU5ET1dfQkFTRSArIEFDUElfUFRSX0RJRkYobWVtX3JvdmVyLAotCQkJCQkJCQkgICAgIHRhYmxlX3B0cik7CisJCQlwaHlzaWNhbF9hZGRyZXNzID0gKHUzMikKKwkJCSAgICAoQUNQSV9ISV9SU0RQX1dJTkRPV19CQVNFICsKKwkJCSAgICAgQUNQSV9QVFJfRElGRihtZW1fcm92ZXIsIHRhYmxlX3B0cikpOwogCiAJCQl0YWJsZV9pbmZvLT5waHlzaWNhbF9hZGRyZXNzID0KIAkJCSAgICAoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBwaHlzaWNhbF9hZGRyZXNzOwpAQCAtNjAxLDcgKzYwNyw3IEBACiAKIAkJaWYgKHBoeXNpY2FsX2FkZHJlc3MgPiAweDQwMCkgewogCQkJLyoKLQkJCSAqIDFiKSBTZWFyY2ggRUJEQSBwYXJhZ3JhcGhzIChFQkRhIGlzIHJlcXVpcmVkIHRvIGJlIGEgbWluaW11bSBvZgorCQkJICogMWIpIFNlYXJjaCBFQkRBIHBhcmFncmFwaHMgKEVCREEgaXMgcmVxdWlyZWQgdG8gYmUgYSBtaW5pbXVtIG9mCiAJCQkgKiAgICAgMV9rIGxlbmd0aCkKIAkJCSAqLwogCQkJbWVtX3JvdmVyID0KQEAgLTYwOSw2ICs2MTUsNyBAQAogCQkJCQkJCSAocGh5c2ljYWxfYWRkcmVzcyksCiAJCQkJCQkJIEFDUElfRUJEQV9XSU5ET1dfU0laRSk7CiAJCQlpZiAobWVtX3JvdmVyKSB7CisKIAkJCQkvKiBSZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAogCQkJCXRhYmxlX2luZm8tPnBoeXNpY2FsX2FkZHJlc3MgPQpAQCAtNjI0LDYgKzYzMSw3IEBACiAJCQkJCQkgKEFDUElfSElfUlNEUF9XSU5ET1dfQkFTRSksCiAJCQkJCQkgQUNQSV9ISV9SU0RQX1dJTkRPV19TSVpFKTsKIAkJaWYgKG1lbV9yb3ZlcikgeworCiAJCQkvKiBGb3VuZCBpdCwgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCiAKIAkJCXRhYmxlX2luZm8tPnBoeXNpY2FsX2FkZHJlc3MgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggMTlmM2VhNC4uZmJhOWMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC02ODQsOCArNjg0LDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopZGF0YTsKIAlpZiAoIXR6LT56b21iaWUpCi0JCWFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbihPU0RfUFJJT1JJVFlfR1BFLAotCQkJCQkgICAgYWNwaV90aGVybWFsX2NoZWNrLCAodm9pZCAqKWRhdGEpOworCQlhY3BpX29zX2V4ZWN1dGUoT1NMX0dQRV9IQU5ETEVSLCBhY3BpX3RoZXJtYWxfY2hlY2ssICh2b2lkICopZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfdGhlcm1hbF9jaGVjayh2b2lkICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGFsbG9jLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYwppbmRleCAwM2IwMDQ0Li43OTQwZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0YWxsb2MuYwpAQCAtNDYsMjQgKzQ2LDYgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRhbGxvYyIpCiAKLS8qIExvY2FsIHByb3RvdHlwZXMgKi8KLSNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwotc3RhdGljIHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWNwaV91dF9maW5kX2FsbG9jYXRpb24odm9pZCAqYWxsb2NhdGlvbik7Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF90cmFja19hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWRkcmVzcywKLQkJCSBhY3BpX3NpemUgc2l6ZSwKLQkJCSB1OCBhbGxvY190eXBlLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKTsKLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3JlbW92ZV9hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWRkcmVzcywKLQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF9jcmVhdGVfbGlzdChjaGFyICpsaXN0X25hbWUsCi0JCSAgICB1MTYgb2JqZWN0X3NpemUsIHN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICoqcmV0dXJuX2NhY2hlKTsKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NyZWF0ZV9jYWNoZXMKQEAgLTc1LDExICs1Nyw1NiBAQAogICogREVTQ1JJUFRJT046IENyZWF0ZSBhbGwgbG9jYWwgY2FjaGVzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfY2FjaGVzKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCisJLyogT2JqZWN0IENhY2hlcywgZm9yIGZyZXF1ZW50bHkgdXNlZCBvYmplY3RzICovCisKKwlzdGF0dXMgPQorCSAgICBhY3BpX29zX2NyZWF0ZV9jYWNoZSgiQWNwaS1OYW1lc3BhY2UiLAorCQkJCSBzaXplb2Yoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUpLAorCQkJCSBBQ1BJX01BWF9OQU1FU1BBQ0VfQ0FDSEVfREVQVEgsCisJCQkJICZhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCisJc3RhdHVzID0KKwkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoIkFjcGktU3RhdGUiLCBzaXplb2YodW5pb24gYWNwaV9nZW5lcmljX3N0YXRlKSwKKwkJCQkgQUNQSV9NQVhfU1RBVEVfQ0FDSEVfREVQVEgsCisJCQkJICZhY3BpX2dibF9zdGF0ZV9jYWNoZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisKKwlzdGF0dXMgPQorCSAgICBhY3BpX29zX2NyZWF0ZV9jYWNoZSgiQWNwaS1QYXJzZSIsCisJCQkJIHNpemVvZihzdHJ1Y3QgYWNwaV9wYXJzZV9vYmpfY29tbW9uKSwKKwkJCQkgQUNQSV9NQVhfUEFSU0VfQ0FDSEVfREVQVEgsCisJCQkJICZhY3BpX2dibF9wc19ub2RlX2NhY2hlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCXN0YXR1cyA9CisJICAgIGFjcGlfb3NfY3JlYXRlX2NhY2hlKCJBY3BpLVBhcnNlRXh0IiwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3BhcnNlX29ial9uYW1lZCksCisJCQkJIEFDUElfTUFYX0VYVFBBUlNFX0NBQ0hFX0RFUFRILAorCQkJCSAmYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCisJc3RhdHVzID0KKwkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoIkFjcGktT3BlcmFuZCIsCisJCQkJIHNpemVvZih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0KSwKKwkJCQkgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRILAorCQkJCSAmYWNwaV9nYmxfb3BlcmFuZF9jYWNoZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisKICNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwogCiAJLyogTWVtb3J5IGFsbG9jYXRpb24gbGlzdHMgKi8KQEAgLTk4LDQzICsxMjUsNiBAQAogCX0KICNlbmRpZgogCi0JLyogT2JqZWN0IENhY2hlcywgZm9yIGZyZXF1ZW50bHkgdXNlZCBvYmplY3RzICovCi0KLQlzdGF0dXMgPQotCSAgICBhY3BpX29zX2NyZWF0ZV9jYWNoZSgiYWNwaV9zdGF0ZSIsIHNpemVvZih1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUpLAotCQkJCSBBQ1BJX01BWF9TVEFURV9DQUNIRV9ERVBUSCwKLQkJCQkgJmFjcGlfZ2JsX3N0YXRlX2NhY2hlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCXN0YXR1cyA9Ci0JICAgIGFjcGlfb3NfY3JlYXRlX2NhY2hlKCJhY3BpX3BhcnNlIiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3BhcnNlX29ial9jb21tb24pLAotCQkJCSBBQ1BJX01BWF9QQVJTRV9DQUNIRV9ERVBUSCwKLQkJCQkgJmFjcGlfZ2JsX3BzX25vZGVfY2FjaGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoImFjcGlfcGFyc2VfZXh0IiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3BhcnNlX29ial9uYW1lZCksCi0JCQkJIEFDUElfTUFYX0VYVFBBUlNFX0NBQ0hFX0RFUFRILAotCQkJCSAmYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9vc19jcmVhdGVfY2FjaGUoImFjcGlfb3BlcmFuZCIsCi0JCQkJIHNpemVvZih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0KSwKLQkJCQkgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRILAotCQkJCSAmYWNwaV9nYmxfb3BlcmFuZF9jYWNoZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KIAlyZXR1cm4gKEFFX09LKTsKIH0KIApAQCAtMTUzLDYgKzE0Myw5IEBACiBhY3BpX3N0YXR1cyBhY3BpX3V0X2RlbGV0ZV9jYWNoZXModm9pZCkKIHsKIAorCSh2b2lkKWFjcGlfb3NfZGVsZXRlX2NhY2hlKGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSk7CisJYWNwaV9nYmxfbmFtZXNwYWNlX2NhY2hlID0gTlVMTDsKKwogCSh2b2lkKWFjcGlfb3NfZGVsZXRlX2NhY2hlKGFjcGlfZ2JsX3N0YXRlX2NhY2hlKTsKIAlhY3BpX2dibF9zdGF0ZV9jYWNoZSA9IE5VTEw7CiAKQEAgLTE2NSw2ICsxNTgsMjEgQEAKIAkodm9pZClhY3BpX29zX2RlbGV0ZV9jYWNoZShhY3BpX2dibF9wc19ub2RlX2V4dF9jYWNoZSk7CiAJYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGUgPSBOVUxMOwogCisjaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKKworCS8qIERlYnVnIG9ubHkgLSBkaXNwbGF5IGxlZnRvdmVyIG1lbW9yeSBhbGxvY2F0aW9uLCBpZiBhbnkgKi8KKworCWFjcGlfdXRfZHVtcF9hbGxvY2F0aW9ucyhBQ1BJX1VJTlQzMl9NQVgsIE5VTEwpOworCisJLyogRnJlZSBtZW1vcnkgbGlzdHMgKi8KKworCWFjcGlfb3NfZnJlZShhY3BpX2dibF9nbG9iYWxfbGlzdCk7CisJYWNwaV9nYmxfZ2xvYmFsX2xpc3QgPSBOVUxMOworCisJYWNwaV9vc19mcmVlKGFjcGlfZ2JsX25zX25vZGVfbGlzdCk7CisJYWNwaV9nYmxfbnNfbm9kZV9saXN0ID0gTlVMTDsKKyNlbmRpZgorCiAJcmV0dXJuIChBRV9PSyk7CiB9CiAKQEAgLTI1Miw3ICsyNjAsNyBAQAogCiAJCS8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciB3aXRoIGxvY2FsIGludGVyZmFjZSB0byBhbGxvdyB0cmFja2luZyAqLwogCi0JCWJ1ZmZlci0+cG9pbnRlciA9IEFDUElfTUVNX0NBTExPQ0FURShyZXF1aXJlZF9sZW5ndGgpOworCQlidWZmZXItPnBvaW50ZXIgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChyZXF1aXJlZF9sZW5ndGgpOwogCQlpZiAoIWJ1ZmZlci0+cG9pbnRlcikgewogCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwogCQl9CkBAIC0yODgsNyArMjk2LDcgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgQWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKgotICogREVTQ1JJUFRJT046IFRoZSBzdWJzeXN0ZW0ncyBlcXVpdmFsZW50IG9mIG1hbGxvYy4KKyAqIERFU0NSSVBUSU9OOiBTdWJzeXN0ZW0gZXF1aXZhbGVudCBvZiBtYWxsb2MuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjk2LDIzICszMDQsMjMgQEAKIHsKIAl2b2lkICphbGxvY2F0aW9uOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInV0X2FsbG9jYXRlIiwgc2l6ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfYWxsb2NhdGUsIHNpemUpOwogCiAJLyogQ2hlY2sgZm9yIGFuIGluYWR2ZXJ0ZW50IHNpemUgb2YgemVybyBieXRlcyAqLwogCiAJaWYgKCFzaXplKSB7Ci0JCUFDUElfRVJST1IoKG1vZHVsZSwgbGluZSwKLQkJCSAgICAidXRfYWxsb2NhdGU6IEF0dGVtcHQgdG8gYWxsb2NhdGUgemVybyBieXRlcywgYWxsb2NhdGluZyAxIGJ5dGUiKSk7CisJCUFDUElfV0FSTklORygobW9kdWxlLCBsaW5lLAorCQkJICAgICAgIkF0dGVtcHQgdG8gYWxsb2NhdGUgemVybyBieXRlcywgYWxsb2NhdGluZyAxIGJ5dGUiKSk7CiAJCXNpemUgPSAxOwogCX0KIAogCWFsbG9jYXRpb24gPSBhY3BpX29zX2FsbG9jYXRlKHNpemUpOwogCWlmICghYWxsb2NhdGlvbikgeworCiAJCS8qIFJlcG9ydCBhbGxvY2F0aW9uIGVycm9yICovCiAKLQkJQUNQSV9FUlJPUigobW9kdWxlLCBsaW5lLAotCQkJICAgICJ1dF9hbGxvY2F0ZTogQ291bGQgbm90IGFsbG9jYXRlIHNpemUgJVgiLAotCQkJICAgICh1MzIpIHNpemUpKTsKKwkJQUNQSV9XQVJOSU5HKChtb2R1bGUsIGxpbmUsCisJCQkgICAgICAiQ291bGQgbm90IGFsbG9jYXRlIHNpemUgJVgiLCAodTMyKSBzaXplKSk7CiAKIAkJcmV0dXJuX1BUUihOVUxMKTsKIAl9CkBAIC0zMjIsNyArMzMwLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF9jYWxsb2NhdGUKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FsbG9jYXRlX3plcm9lZAogICoKICAqIFBBUkFNRVRFUlM6ICBTaXplICAgICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgogICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKQEAgLTMzMSw1NDIgKzMzOSwyNCBAQAogICoKICAqIFJFVFVSTjogICAgICBBZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqCi0gKiBERVNDUklQVElPTjogU3Vic3lzdGVtIGVxdWl2YWxlbnQgb2YgY2FsbG9jLgorICogREVTQ1JJUFRJT046IFN1YnN5c3RlbSBlcXVpdmFsZW50IG9mIGNhbGxvYy4gQWxsb2NhdGUgYW5kIHplcm8gbWVtb3J5LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgKmFjcGlfdXRfY2FsbG9jYXRlKGFjcGlfc2l6ZSBzaXplLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKQordm9pZCAqYWNwaV91dF9hbGxvY2F0ZV96ZXJvZWQoYWNwaV9zaXplIHNpemUsCisJCQkgICAgICB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKQogewogCXZvaWQgKmFsbG9jYXRpb247CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigidXRfY2FsbG9jYXRlIiwgc2l6ZSk7Ci0KLQkvKiBDaGVjayBmb3IgYW4gaW5hZHZlcnRlbnQgc2l6ZSBvZiB6ZXJvIGJ5dGVzICovCi0KLQlpZiAoIXNpemUpIHsKLQkJQUNQSV9FUlJPUigobW9kdWxlLCBsaW5lLAotCQkJICAgICJBdHRlbXB0IHRvIGFsbG9jYXRlIHplcm8gYnl0ZXMsIGFsbG9jYXRpbmcgMSBieXRlIikpOwotCQlzaXplID0gMTsKLQl9Ci0KLQlhbGxvY2F0aW9uID0gYWNwaV9vc19hbGxvY2F0ZShzaXplKTsKLQlpZiAoIWFsbG9jYXRpb24pIHsKLQkJLyogUmVwb3J0IGFsbG9jYXRpb24gZXJyb3IgKi8KLQotCQlBQ1BJX0VSUk9SKChtb2R1bGUsIGxpbmUsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzaXplICVYIiwgKHUzMikgc2l6ZSkpOwotCQlyZXR1cm5fUFRSKE5VTEwpOwotCX0KLQotCS8qIENsZWFyIHRoZSBtZW1vcnkgYmxvY2sgKi8KLQotCUFDUElfTUVNU0VUKGFsbG9jYXRpb24sIDAsIHNpemUpOwotCXJldHVybl9QVFIoYWxsb2NhdGlvbik7Ci19Ci0KLSNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwotLyoKLSAqIFRoZXNlIHByb2NlZHVyZXMgYXJlIHVzZWQgZm9yIHRyYWNraW5nIG1lbW9yeSBsZWFrcyBpbiB0aGUgc3Vic3lzdGVtLCBhbmQKLSAqIHRoZXkgZ2V0IGNvbXBpbGVkIG91dCB3aGVuIHRoZSBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUyBpcyBub3Qgc2V0LgotICoKLSAqIEVhY2ggbWVtb3J5IGFsbG9jYXRpb24gaXMgdHJhY2tlZCB2aWEgYSBkb3VibHkgbGlua2VkIGxpc3QuICBFYWNoCi0gKiBlbGVtZW50IGNvbnRhaW5zIHRoZSBjYWxsZXIncyBjb21wb25lbnQsIG1vZHVsZSBuYW1lLCBmdW5jdGlvbiBuYW1lLCBhbmQKLSAqIGxpbmUgbnVtYmVyLiAgYWNwaV91dF9hbGxvY2F0ZSBhbmQgYWNwaV91dF9jYWxsb2NhdGUgY2FsbAotICogYWNwaV91dF90cmFja19hbGxvY2F0aW9uIHRvIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBsaXN0OyBkZWxldGlvbgotICogb2NjdXJzIGluIHRoZSBib2R5IG9mIGFjcGlfdXRfZnJlZS4KLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NyZWF0ZV9saXN0Ci0gKgotICogUEFSQU1FVEVSUzogIGNhY2hlX25hbWUgICAgICAtIEFzY2lpIG5hbWUgZm9yIHRoZSBjYWNoZQotICogICAgICAgICAgICAgIG9iamVjdF9zaXplICAgICAtIFNpemUgb2YgZWFjaCBjYWNoZWQgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgcmV0dXJuX2NhY2hlICAgIC0gV2hlcmUgdGhlIG5ldyBjYWNoZSBvYmplY3QgaXMgcmV0dXJuZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IENyZWF0ZSBhIGxvY2FsIG1lbW9yeSBsaXN0IGZvciB0cmFja2luZyBwdXJwb3NlZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF9jcmVhdGVfbGlzdChjaGFyICpsaXN0X25hbWUsCi0JCSAgICB1MTYgb2JqZWN0X3NpemUsIHN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICoqcmV0dXJuX2NhY2hlKQotewotCXN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICpjYWNoZTsKLQotCWNhY2hlID0gYWNwaV9vc19hbGxvY2F0ZShzaXplb2Yoc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QpKTsKLQlpZiAoIWNhY2hlKSB7Ci0JCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKLQl9Ci0KLQlBQ1BJX01FTVNFVChjYWNoZSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX21lbW9yeV9saXN0KSk7Ci0KLQljYWNoZS0+bGlzdF9uYW1lID0gbGlzdF9uYW1lOwotCWNhY2hlLT5vYmplY3Rfc2l6ZSA9IG9iamVjdF9zaXplOwotCi0JKnJldHVybl9jYWNoZSA9IGNhY2hlOwotCXJldHVybiAoQUVfT0spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FsbG9jYXRlX2FuZF90cmFjawotICoKLSAqIFBBUkFNRVRFUlM6ICBTaXplICAgICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBNb2R1bGUgICAgICAgICAgICAgIC0gU291cmNlIGZpbGUgbmFtZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBMaW5lICAgICAgICAgICAgICAgIC0gTGluZSBudW1iZXIgb2YgY2FsbGVyCi0gKgotICogUkVUVVJOOiAgICAgIEFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotICoKLSAqIERFU0NSSVBUSU9OOiBUaGUgc3Vic3lzdGVtJ3MgZXF1aXZhbGVudCBvZiBtYWxsb2MuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCAqYWNwaV91dF9hbGxvY2F0ZV9hbmRfdHJhY2soYWNwaV9zaXplIHNpemUsCi0JCQkJIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpCi17Ci0Jc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICphbGxvY2F0aW9uOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCWFsbG9jYXRpb24gPQotCSAgICBhY3BpX3V0X2FsbG9jYXRlKHNpemUgKyBzaXplb2Yoc3RydWN0IGFjcGlfZGVidWdfbWVtX2hlYWRlciksCi0JCQkgICAgIGNvbXBvbmVudCwgbW9kdWxlLCBsaW5lKTsKLQlpZiAoIWFsbG9jYXRpb24pIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X3RyYWNrX2FsbG9jYXRpb24oYWxsb2NhdGlvbiwgc2l6ZSwKLQkJCQkJICBBQ1BJX01FTV9NQUxMT0MsIGNvbXBvbmVudCwgbW9kdWxlLAotCQkJCQkgIGxpbmUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlhY3BpX29zX2ZyZWUoYWxsb2NhdGlvbik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCsrOwotCWFjcGlfZ2JsX2dsb2JhbF9saXN0LT5jdXJyZW50X3RvdGFsX3NpemUgKz0gKHUzMikgc2l6ZTsKLQotCXJldHVybiAoKHZvaWQgKikmYWxsb2NhdGlvbi0+dXNlcl9zcGFjZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfY2FsbG9jYXRlX2FuZF90cmFjawotICoKLSAqIFBBUkFNRVRFUlM6ICBTaXplICAgICAgICAgICAgICAgIC0gU2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBNb2R1bGUgICAgICAgICAgICAgIC0gU291cmNlIGZpbGUgbmFtZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBMaW5lICAgICAgICAgICAgICAgIC0gTGluZSBudW1iZXIgb2YgY2FsbGVyCi0gKgotICogUkVUVVJOOiAgICAgIEFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotICoKLSAqIERFU0NSSVBUSU9OOiBTdWJzeXN0ZW0gZXF1aXZhbGVudCBvZiBjYWxsb2MuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCAqYWNwaV91dF9jYWxsb2NhdGVfYW5kX3RyYWNrKGFjcGlfc2l6ZSBzaXplLAotCQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSkKLXsKLQlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKmFsbG9jYXRpb247Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JYWxsb2NhdGlvbiA9Ci0JICAgIGFjcGlfdXRfY2FsbG9jYXRlKHNpemUgKyBzaXplb2Yoc3RydWN0IGFjcGlfZGVidWdfbWVtX2hlYWRlciksCi0JCQkgICAgICBjb21wb25lbnQsIG1vZHVsZSwgbGluZSk7Ci0JaWYgKCFhbGxvY2F0aW9uKSB7Ci0JCS8qIFJlcG9ydCBhbGxvY2F0aW9uIGVycm9yICovCi0KLQkJQUNQSV9FUlJPUigobW9kdWxlLCBsaW5lLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgc2l6ZSAlWCIsICh1MzIpIHNpemUpKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X3RyYWNrX2FsbG9jYXRpb24oYWxsb2NhdGlvbiwgc2l6ZSwKLQkJCQkJICBBQ1BJX01FTV9DQUxMT0MsIGNvbXBvbmVudCwgbW9kdWxlLAotCQkJCQkgIGxpbmUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlhY3BpX29zX2ZyZWUoYWxsb2NhdGlvbik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCsrOwotCWFjcGlfZ2JsX2dsb2JhbF9saXN0LT5jdXJyZW50X3RvdGFsX3NpemUgKz0gKHUzMikgc2l6ZTsKLQotCXJldHVybiAoKHZvaWQgKikmYWxsb2NhdGlvbi0+dXNlcl9zcGFjZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2sKLSAqCi0gKiBQQVJBTUVURVJTOiAgQWxsb2NhdGlvbiAgICAgICAgICAtIEFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0byBkZWFsbG9jYXRlCi0gKiAgICAgICAgICAgICAgQ29tcG9uZW50ICAgICAgICAgICAtIENvbXBvbmVudCB0eXBlIG9mIGNhbGxlcgotICogICAgICAgICAgICAgIE1vZHVsZSAgICAgICAgICAgICAgLSBTb3VyY2UgZmlsZSBuYW1lIG9mIGNhbGxlcgotICogICAgICAgICAgICAgIExpbmUgICAgICAgICAgICAgICAgLSBMaW5lIG51bWJlciBvZiBjYWxsZXIKLSAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQotICoKLSAqIERFU0NSSVBUSU9OOiBGcmVlcyB0aGUgbWVtb3J5IGF0IEFsbG9jYXRpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkCi1hY3BpX3V0X2ZyZWVfYW5kX3RyYWNrKHZvaWQgKmFsbG9jYXRpb24sIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpCi17Ci0Jc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICpkZWJ1Z19ibG9jazsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfZnJlZSIsIGFsbG9jYXRpb24pOwotCi0JaWYgKE5VTEwgPT0gYWxsb2NhdGlvbikgewotCQlBQ1BJX0VSUk9SKChtb2R1bGUsIGxpbmUsICJBdHRlbXB0IHRvIGRlbGV0ZSBhIE5VTEwgYWRkcmVzcyIpKTsKLQotCQlyZXR1cm5fVk9JRDsKLQl9Ci0KLQlkZWJ1Z19ibG9jayA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrLAotCQkJCSAgICAoKChjaGFyICopYWxsb2NhdGlvbikgLQotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9oZWFkZXIpKSk7Ci0KLQlhY3BpX2dibF9nbG9iYWxfbGlzdC0+dG90YWxfZnJlZWQrKzsKLQlhY3BpX2dibF9nbG9iYWxfbGlzdC0+Y3VycmVudF90b3RhbF9zaXplIC09IGRlYnVnX2Jsb2NrLT5zaXplOwotCi0Jc3RhdHVzID0gYWNwaV91dF9yZW1vdmVfYWxsb2NhdGlvbihkZWJ1Z19ibG9jaywKLQkJCQkJICAgY29tcG9uZW50LCBtb2R1bGUsIGxpbmUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiQ291bGQgbm90IGZyZWUgbWVtb3J5IikpOwotCX0KLQotCWFjcGlfb3NfZnJlZShkZWJ1Z19ibG9jayk7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywgIiVwIGZyZWVkXG4iLCBhbGxvY2F0aW9uKSk7Ci0JcmV0dXJuX1ZPSUQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZmluZF9hbGxvY2F0aW9uCi0gKgotICogUEFSQU1FVEVSUzogIEFsbG9jYXRpb24gICAgICAgICAgICAgIC0gQWRkcmVzcyBvZiBhbGxvY2F0ZWQgbWVtb3J5Ci0gKgotICogUkVUVVJOOiAgICAgIEEgbGlzdCBlbGVtZW50IGlmIGZvdW5kOyBOVUxMIG90aGVyd2lzZS4KLSAqCi0gKiBERVNDUklQVElPTjogU2VhcmNoZXMgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIGdsb2JhbCBhbGxvY2F0aW9uIHRyYWNraW5nIGxpc3QuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWNwaV91dF9maW5kX2FsbG9jYXRpb24odm9pZCAqYWxsb2NhdGlvbikKLXsKLQlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKmVsZW1lbnQ7Ci0KIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKLQllbGVtZW50ID0gYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPmxpc3RfaGVhZDsKKwlhbGxvY2F0aW9uID0gYWNwaV91dF9hbGxvY2F0ZShzaXplLCBjb21wb25lbnQsIG1vZHVsZSwgbGluZSk7CisJaWYgKGFsbG9jYXRpb24pIHsKIAotCS8qIFNlYXJjaCBmb3IgdGhlIGFkZHJlc3MuICovCisJCS8qIENsZWFyIHRoZSBtZW1vcnkgYmxvY2sgKi8KIAotCXdoaWxlIChlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50ID09IGFsbG9jYXRpb24pIHsKLQkJCXJldHVybiAoZWxlbWVudCk7Ci0JCX0KLQotCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKwkJQUNQSV9NRU1TRVQoYWxsb2NhdGlvbiwgMCwgc2l6ZSk7CiAJfQogCi0JcmV0dXJuIChOVUxMKTsKKwlyZXR1cm4gKGFsbG9jYXRpb24pOwogfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3RyYWNrX2FsbG9jYXRpb24KLSAqCi0gKiBQQVJBTUVURVJTOiAgQWxsb2NhdGlvbiAgICAgICAgICAtIEFkZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeQotICogICAgICAgICAgICAgIFNpemUgICAgICAgICAgICAgICAgLSBTaXplIG9mIHRoZSBhbGxvY2F0aW9uCi0gKiAgICAgICAgICAgICAgYWxsb2NfdHlwZSAgICAgICAgICAtIE1FTV9NQUxMT0Mgb3IgTUVNX0NBTExPQwotICogICAgICAgICAgICAgIENvbXBvbmVudCAgICAgICAgICAgLSBDb21wb25lbnQgdHlwZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBNb2R1bGUgICAgICAgICAgICAgIC0gU291cmNlIGZpbGUgbmFtZSBvZiBjYWxsZXIKLSAqICAgICAgICAgICAgICBMaW5lICAgICAgICAgICAgICAgIC0gTGluZSBudW1iZXIgb2YgY2FsbGVyCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUuCi0gKgotICogREVTQ1JJUFRJT046IEluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSBnbG9iYWwgYWxsb2NhdGlvbiB0cmFja2luZyBsaXN0LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV91dF90cmFja19hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWxsb2NhdGlvbiwKLQkJCSBhY3BpX3NpemUgc2l6ZSwKLQkJCSB1OCBhbGxvY190eXBlLCB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKQotewotCXN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICptZW1fbGlzdDsKLQlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKmVsZW1lbnQ7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfdHJhY2tfYWxsb2NhdGlvbiIsIGFsbG9jYXRpb24pOwotCi0JbWVtX2xpc3QgPSBhY3BpX2dibF9nbG9iYWxfbGlzdDsKLQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTUVNT1JZKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyoKLQkgKiBTZWFyY2ggbGlzdCBmb3IgdGhpcyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSBpdCBpcyBub3QgYWxyZWFkeSBvbiB0aGUgbGlzdC4KLQkgKiBUaGlzIHdpbGwgY2F0Y2ggc2V2ZXJhbCBraW5kcyBvZiBwcm9ibGVtcy4KLQkgKi8KLQllbGVtZW50ID0gYWNwaV91dF9maW5kX2FsbG9jYXRpb24oYWxsb2NhdGlvbik7Ci0JaWYgKGVsZW1lbnQpIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAidXRfdHJhY2tfYWxsb2NhdGlvbjogQWxsb2NhdGlvbiBhbHJlYWR5IHByZXNlbnQgaW4gbGlzdCEgKCVwKSIsCi0JCQkgICAgYWxsb2NhdGlvbikpOwotCi0JCUFDUElfRVJST1IoKEFFX0lORk8sICJFbGVtZW50ICVwIEFkZHJlc3MgJXAiLAotCQkJICAgIGVsZW1lbnQsIGFsbG9jYXRpb24pKTsKLQotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQl9Ci0KLQkvKiBGaWxsIGluIHRoZSBpbnN0YW5jZSBkYXRhLiAqLwotCi0JYWxsb2NhdGlvbi0+c2l6ZSA9ICh1MzIpIHNpemU7Ci0JYWxsb2NhdGlvbi0+YWxsb2NfdHlwZSA9IGFsbG9jX3R5cGU7Ci0JYWxsb2NhdGlvbi0+Y29tcG9uZW50ID0gY29tcG9uZW50OwotCWFsbG9jYXRpb24tPmxpbmUgPSBsaW5lOwotCi0JQUNQSV9TVFJOQ1BZKGFsbG9jYXRpb24tPm1vZHVsZSwgbW9kdWxlLCBBQ1BJX01BWF9NT0RVTEVfTkFNRSk7Ci0JYWxsb2NhdGlvbi0+bW9kdWxlW0FDUElfTUFYX01PRFVMRV9OQU1FIC0gMV0gPSAwOwotCi0JLyogSW5zZXJ0IGF0IGxpc3QgaGVhZCAqLwotCi0JaWYgKG1lbV9saXN0LT5saXN0X2hlYWQpIHsKLQkJKChzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgKikobWVtX2xpc3QtPmxpc3RfaGVhZCkpLT4KLQkJICAgIHByZXZpb3VzID0gYWxsb2NhdGlvbjsKLQl9Ci0KLQlhbGxvY2F0aW9uLT5uZXh0ID0gbWVtX2xpc3QtPmxpc3RfaGVhZDsKLQlhbGxvY2F0aW9uLT5wcmV2aW91cyA9IE5VTEw7Ci0KLQltZW1fbGlzdC0+bGlzdF9oZWFkID0gYWxsb2NhdGlvbjsKLQotICAgICAgdW5sb2NrX2FuZF9leGl0OgotCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9NRU1PUlkpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3JlbW92ZV9hbGxvY2F0aW9uCi0gKgotICogUEFSQU1FVEVSUzogIEFsbG9jYXRpb24gICAgICAgICAgLSBBZGRyZXNzIG9mIGFsbG9jYXRlZCBtZW1vcnkKLSAqICAgICAgICAgICAgICBDb21wb25lbnQgICAgICAgICAgIC0gQ29tcG9uZW50IHR5cGUgb2YgY2FsbGVyCi0gKiAgICAgICAgICAgICAgTW9kdWxlICAgICAgICAgICAgICAtIFNvdXJjZSBmaWxlIG5hbWUgb2YgY2FsbGVyCi0gKiAgICAgICAgICAgICAgTGluZSAgICAgICAgICAgICAgICAtIExpbmUgbnVtYmVyIG9mIGNhbGxlcgotICoKLSAqIFJFVFVSTjoKLSAqCi0gKiBERVNDUklQVElPTjogRGVsZXRlcyBhbiBlbGVtZW50IGZyb20gdGhlIGdsb2JhbCBhbGxvY2F0aW9uIHRyYWNraW5nIGxpc3QuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3JlbW92ZV9hbGxvY2F0aW9uKHN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAqYWxsb2NhdGlvbiwKLQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSkKLXsKLQlzdHJ1Y3QgYWNwaV9tZW1vcnlfbGlzdCAqbWVtX2xpc3Q7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfcmVtb3ZlX2FsbG9jYXRpb24iKTsKLQotCW1lbV9saXN0ID0gYWNwaV9nYmxfZ2xvYmFsX2xpc3Q7Ci0JaWYgKE5VTEwgPT0gbWVtX2xpc3QtPmxpc3RfaGVhZCkgewotCQkvKiBObyBhbGxvY2F0aW9ucyEgKi8KLQotCQlBQ1BJX0VSUk9SKChtb2R1bGUsIGxpbmUsCi0JCQkgICAgIkVtcHR5IGFsbG9jYXRpb24gbGlzdCwgbm90aGluZyB0byBmcmVlISIpKTsKLQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9NRU1PUlkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBVbmxpbmsgKi8KLQotCWlmIChhbGxvY2F0aW9uLT5wcmV2aW91cykgewotCQkoYWxsb2NhdGlvbi0+cHJldmlvdXMpLT5uZXh0ID0gYWxsb2NhdGlvbi0+bmV4dDsKLQl9IGVsc2UgewotCQltZW1fbGlzdC0+bGlzdF9oZWFkID0gYWxsb2NhdGlvbi0+bmV4dDsKLQl9Ci0KLQlpZiAoYWxsb2NhdGlvbi0+bmV4dCkgewotCQkoYWxsb2NhdGlvbi0+bmV4dCktPnByZXZpb3VzID0gYWxsb2NhdGlvbi0+cHJldmlvdXM7Ci0JfQotCi0JLyogTWFyayB0aGUgc2VnbWVudCBhcyBkZWxldGVkICovCi0KLQlBQ1BJX01FTVNFVCgmYWxsb2NhdGlvbi0+dXNlcl9zcGFjZSwgMHhFQSwgYWxsb2NhdGlvbi0+c2l6ZSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0FMTE9DQVRJT05TLCAiRnJlZWluZyBzaXplIDAlWFxuIiwKLQkJCSAgYWxsb2NhdGlvbi0+c2l6ZSkpOwotCi0Jc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX01FTU9SWSk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9uX2luZm8KLSAqCi0gKiBQQVJBTUVURVJTOgotICoKLSAqIFJFVFVSTjogICAgICBOb25lCi0gKgotICogREVTQ1JJUFRJT046IFByaW50IHNvbWUgaW5mbyBhYm91dCB0aGUgb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCi12b2lkIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9uX2luZm8odm9pZCkKLXsKLS8qCi0Jc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QgICAgICAgICAqbWVtX2xpc3Q7Ci0qLwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZHVtcF9hbGxvY2F0aW9uX2luZm8iKTsKLQotLyoKLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJDdXJyZW50IGFsbG9jYXRpb25zIiwKLQkJCSAgbWVtX2xpc3QtPmN1cnJlbnRfY291bnQsCi0JCQkgIFJPVU5EX1VQX1RPXzFLIChtZW1fbGlzdC0+Y3VycmVudF9zaXplKSkpOwotCi0JQUNQSV9ERUJVR19QUklOVCAoVFJBQ0VfQUxMT0NBVElPTlMgfCBUUkFDRV9UQUJMRVMsCi0JCQkgICgiJTMwczogJTRkICglM2QgS2IpXG4iLCAiTWF4IGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMiLAotCQkJICBtZW1fbGlzdC0+bWF4X2NvbmN1cnJlbnRfY291bnQsCi0JCQkgIFJPVU5EX1VQX1RPXzFLIChtZW1fbGlzdC0+bWF4X2NvbmN1cnJlbnRfc2l6ZSkpKTsKLQotCUFDUElfREVCVUdfUFJJTlQgKFRSQUNFX0FMTE9DQVRJT05TIHwgVFJBQ0VfVEFCTEVTLAotCQkJICAoIiUzMHM6ICU0ZCAoJTNkIEtiKVxuIiwgIlRvdGFsIChhbGwpIGludGVybmFsIG9iamVjdHMiLAotCQkJICBydW5uaW5nX29iamVjdF9jb3VudCwKLQkJCSAgUk9VTkRfVVBfVE9fMUsgKHJ1bm5pbmdfb2JqZWN0X3NpemUpKSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJUb3RhbCAoYWxsKSBhbGxvY2F0aW9ucyIsCi0JCQkgIHJ1bm5pbmdfYWxsb2NfY291bnQsCi0JCQkgIFJPVU5EX1VQX1RPXzFLIChydW5uaW5nX2FsbG9jX3NpemUpKSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJDdXJyZW50IE5vZGVzIiwKLQkJCSAgYWNwaV9nYmxfY3VycmVudF9ub2RlX2NvdW50LAotCQkJICBST1VORF9VUF9UT18xSyAoYWNwaV9nYmxfY3VycmVudF9ub2RlX3NpemUpKSk7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UIChUUkFDRV9BTExPQ0FUSU9OUyB8IFRSQUNFX1RBQkxFUywKLQkJCSAgKCIlMzBzOiAlNGQgKCUzZCBLYilcbiIsICJNYXggTm9kZXMiLAotCQkJICBhY3BpX2dibF9tYXhfY29uY3VycmVudF9ub2RlX2NvdW50LAotCQkJICBST1VORF9VUF9UT18xSyAoKGFjcGlfZ2JsX21heF9jb25jdXJyZW50X25vZGVfY291bnQgKgotCQkJCQkgc2l6ZW9mIChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSkpKSkpOwotKi8KLQlyZXR1cm5fVk9JRDsKLX0KLSNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9ucwotICoKLSAqIFBBUkFNRVRFUlM6ICBDb21wb25lbnQgICAgICAgICAgIC0gQ29tcG9uZW50KHMpIHRvIGR1bXAgaW5mbyBmb3IuCi0gKiAgICAgICAgICAgICAgTW9kdWxlICAgICAgICAgICAgICAtIE1vZHVsZSB0byBkdW1wIGluZm8gZm9yLiAgTlVMTCBtZWFucyBhbGwuCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUKLSAqCi0gKiBERVNDUklQVElPTjogUHJpbnQgYSBsaXN0IG9mIGFsbCBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGFjcGlfdXRfZHVtcF9hbGxvY2F0aW9ucyh1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUpCi17Ci0Jc3RydWN0IGFjcGlfZGVidWdfbWVtX2Jsb2NrICplbGVtZW50OwotCXVuaW9uIGFjcGlfZGVzY3JpcHRvciAqZGVzY3JpcHRvcjsKLQl1MzIgbnVtX291dHN0YW5kaW5nID0gMDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2R1bXBfYWxsb2NhdGlvbnMiKTsKLQotCS8qCi0JICogV2FsayB0aGUgYWxsb2NhdGlvbiBsaXN0LgotCSAqLwotCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX01FTU9SWSkpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQllbGVtZW50ID0gYWNwaV9nYmxfZ2xvYmFsX2xpc3QtPmxpc3RfaGVhZDsKLQl3aGlsZSAoZWxlbWVudCkgewotCQlpZiAoKGVsZW1lbnQtPmNvbXBvbmVudCAmIGNvbXBvbmVudCkgJiYKLQkJICAgICgobW9kdWxlID09IE5VTEwpCi0JCSAgICAgfHwgKDAgPT0gQUNQSV9TVFJDTVAobW9kdWxlLCBlbGVtZW50LT5tb2R1bGUpKSkpIHsKLQkJCS8qIElnbm9yZSBhbGxvY2F0ZWQgb2JqZWN0cyB0aGF0IGFyZSBpbiBhIGNhY2hlICovCi0KLQkJCWRlc2NyaXB0b3IgPQotCQkJICAgIEFDUElfQ0FTVF9QVFIodW5pb24gYWNwaV9kZXNjcmlwdG9yLAotCQkJCQkgICZlbGVtZW50LT51c2VyX3NwYWNlKTsKLQkJCWlmIChkZXNjcmlwdG9yLT5kZXNjcmlwdG9yX2lkICE9IEFDUElfREVTQ19UWVBFX0NBQ0hFRCkgewotCQkJCWFjcGlfb3NfcHJpbnRmKCIlcCBMZW4gJTA0WCAlOS45cy0lZCBbJXNdICIsCi0JCQkJCSAgICAgICBkZXNjcmlwdG9yLCBlbGVtZW50LT5zaXplLAotCQkJCQkgICAgICAgZWxlbWVudC0+bW9kdWxlLCBlbGVtZW50LT5saW5lLAotCQkJCQkgICAgICAgYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lCi0JCQkJCSAgICAgICAoZGVzY3JpcHRvcikpOwotCi0JCQkJLyogTW9zdCBvZiB0aGUgZWxlbWVudHMgd2lsbCBiZSBPcGVyYW5kIG9iamVjdHMuICovCi0KLQkJCQlzd2l0Y2ggKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkZXNjcmlwdG9yKSkgewotCQkJCWNhc2UgQUNQSV9ERVNDX1RZUEVfT1BFUkFORDoKLQkJCQkJYWNwaV9vc19wcmludGYoIiUxMi4xMnMgUiVoZCIsCi0JCQkJCQkgICAgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lCi0JCQkJCQkgICAgICAgKGRlc2NyaXB0b3ItPm9iamVjdC4KLQkJCQkJCQljb21tb24udHlwZSksCi0JCQkJCQkgICAgICAgZGVzY3JpcHRvci0+b2JqZWN0LgotCQkJCQkJICAgICAgIGNvbW1vbi5yZWZlcmVuY2VfY291bnQpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgQUNQSV9ERVNDX1RZUEVfUEFSU0VSOgotCQkJCQlhY3BpX29zX3ByaW50ZigiYW1sX29wY29kZSAlMDRoWCIsCi0JCQkJCQkgICAgICAgZGVzY3JpcHRvci0+b3AuYXNsLgotCQkJCQkJICAgICAgIGFtbF9vcGNvZGUpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgQUNQSV9ERVNDX1RZUEVfTkFNRUQ6Ci0JCQkJCWFjcGlfb3NfcHJpbnRmKCIlNC40cyIsCi0JCQkJCQkgICAgICAgYWNwaV91dF9nZXRfbm9kZV9uYW1lCi0JCQkJCQkgICAgICAgKCZkZXNjcmlwdG9yLT5ub2RlKSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJYWNwaV9vc19wcmludGYoIlxuIik7Ci0JCQkJbnVtX291dHN0YW5kaW5nKys7Ci0JCQl9Ci0JCX0KLQkJZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7Ci0JfQotCi0JKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX01FTU9SWSk7Ci0KLQkvKiBQcmludCBzdW1tYXJ5ICovCi0KLQlpZiAoIW51bV9vdXRzdGFuZGluZykgewotCQlBQ1BJX0lORk8oKEFFX0lORk8sICJObyBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucyIpKTsKLQl9IGVsc2UgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICIlZCglWCkgT3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMiLAotCQkJICAgIG51bV9vdXRzdGFuZGluZywgbnVtX291dHN0YW5kaW5nKSk7Ci0JfQotCi0JcmV0dXJuX1ZPSUQ7Ci19Ci0KLSNlbmRpZgkJCQkvKiAjaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjYWNoZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNhY2hlLmMKaW5kZXggMjE3N2NiMS4uNTYyNzBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNhY2hlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNhY2hlLmMKQEAgLTExOCwxMyArMTE4LDE0IEBACiAJLyogV2FsayB0aGUgbGlzdCBvZiBvYmplY3RzIGluIHRoaXMgY2FjaGUgKi8KIAogCXdoaWxlIChjYWNoZS0+bGlzdF9oZWFkKSB7CisKIAkJLyogRGVsZXRlIGFuZCB1bmxpbmsgb25lIGNhY2hlZCBzdGF0ZSBvYmplY3QgKi8KIAogCQluZXh0ID0gKihBQ1BJX0NBU1RfSU5ESVJFQ1RfUFRSKGNoYXIsCiAJCQkJCQkmKCgoY2hhciAqKWNhY2hlLT4KIAkJCQkJCSAgIGxpc3RfaGVhZClbY2FjaGUtPgogCQkJCQkJCSAgICAgIGxpbmtfb2Zmc2V0XSkpKTsKLQkJQUNQSV9NRU1fRlJFRShjYWNoZS0+bGlzdF9oZWFkKTsKKwkJQUNQSV9GUkVFKGNhY2hlLT5saXN0X2hlYWQpOwogCiAJCWNhY2hlLT5saXN0X2hlYWQgPSBuZXh0OwogCQljYWNoZS0+Y3VycmVudF9kZXB0aC0tOwpAQCAtMTkzLDcgKzE5NCw3IEBACiAJLyogSWYgY2FjaGUgaXMgZnVsbCwganVzdCBmcmVlIHRoaXMgb2JqZWN0ICovCiAKIAlpZiAoY2FjaGUtPmN1cnJlbnRfZGVwdGggPj0gY2FjaGUtPm1heF9kZXB0aCkgewotCQlBQ1BJX01FTV9GUkVFKG9iamVjdCk7CisJCUFDUElfRlJFRShvYmplY3QpOwogCQlBQ1BJX01FTV9UUkFDS0lORyhjYWNoZS0+dG90YWxfZnJlZWQrKyk7CiAJfQogCkBAIC0yNDMsNyArMjQ0LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdm9pZCAqb2JqZWN0OwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJvc19hY3F1aXJlX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fTkFNRShvc19hY3F1aXJlX29iamVjdCk7CiAKIAlpZiAoIWNhY2hlKSB7CiAJCXJldHVybiAoTlVMTCk7CkBAIC0yNTksNiArMjYwLDcgQEAKIAkvKiBDaGVjayB0aGUgY2FjaGUgZmlyc3QgKi8KIAogCWlmIChjYWNoZS0+bGlzdF9oZWFkKSB7CisKIAkJLyogVGhlcmUgaXMgYW4gb2JqZWN0IGF2YWlsYWJsZSwgdXNlIGl0ICovCiAKIAkJb2JqZWN0ID0gY2FjaGUtPmxpc3RfaGVhZDsKQEAgLTI3MCw5ICsyNzIsOSBAQAogCQljYWNoZS0+Y3VycmVudF9kZXB0aC0tOwogCiAJCUFDUElfTUVNX1RSQUNLSU5HKGNhY2hlLT5oaXRzKyspOwotCQlBQ1BJX01FTV9UUkFDS0lORyhBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJCQkgICAgIk9iamVjdCAlcCBmcm9tICVzIGNhY2hlXG4iLAotCQkJCQkJICAgIG9iamVjdCwgY2FjaGUtPmxpc3RfbmFtZSkpKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAorCQkJCSAgIk9iamVjdCAlcCBmcm9tICVzIGNhY2hlXG4iLCBvYmplY3QsCisJCQkJICBjYWNoZS0+bGlzdF9uYW1lKSk7CiAKIAkJc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0NBQ0hFUyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMjg3LDE0ICsyODksMTQgQEAKIAogCQlBQ1BJX01FTV9UUkFDS0lORyhjYWNoZS0+dG90YWxfYWxsb2NhdGVkKyspOwogCi0JCS8qIEF2b2lkIGRlYWRsb2NrIHdpdGggQUNQSV9NRU1fQ0FMTE9DQVRFICovCisJCS8qIEF2b2lkIGRlYWRsb2NrIHdpdGggQUNQSV9BTExPQ0FURV9aRVJPRUQgKi8KIAogCQlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfQ0FDSEVTKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKE5VTEwpOwogCQl9CiAKLQkJb2JqZWN0ID0gQUNQSV9NRU1fQ0FMTE9DQVRFKGNhY2hlLT5vYmplY3Rfc2l6ZSk7CisJCW9iamVjdCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKGNhY2hlLT5vYmplY3Rfc2l6ZSk7CiAJCWlmICghb2JqZWN0KSB7CiAJCQlyZXR1cm4gKE5VTEwpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Y29weS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNvcHkuYwppbmRleCBkZjJkMzIwLi41ZTFhODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Y29weS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjb3B5LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pc2ltcGxlX3RvX2VzaW1wbGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2NvcHlfaXNpbXBsZV90b19lc2ltcGxlKTsKIAogCSpidWZmZXJfc3BhY2VfdXNlZCA9IDA7CiAKQEAgLTMyNSw3ICszMjUsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9wa2dfaW5mbyBpbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pcGFja2FnZV90b19lcGFja2FnZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pcGFja2FnZV90b19lcGFja2FnZSk7CiAKIAkvKgogCSAqIEZpcnN0IHBhY2thZ2UgYXQgaGVhZCBvZiB0aGUgYnVmZmVyCkBAIC0zODMsNyArMzgzLDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9jb3B5X2lvYmplY3RfdG9fZW9iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pb2JqZWN0X3RvX2VvYmplY3QpOwogCiAJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGludGVybmFsX29iamVjdCkgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJLyoKQEAgLTQ0Miw3ICs0NDIsNyBAQAogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmludGVybmFsX29iamVjdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2NvcHlfZXNpbXBsZV90b19pc2ltcGxlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VzaW1wbGVfdG9faXNpbXBsZSk7CiAKIAkvKgogCSAqIFNpbXBsZSB0eXBlcyBzdXBwb3J0ZWQgYXJlOiBTdHJpbmcsIEJ1ZmZlciwgSW50ZWdlcgpAQCAtNDcyLDggKzQ3Miw4IEBACiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCWludGVybmFsX29iamVjdC0+c3RyaW5nLnBvaW50ZXIgPQotCQkgICAgQUNQSV9NRU1fQ0FMTE9DQVRFKChhY3BpX3NpemUpIGV4dGVybmFsX29iamVjdC0+c3RyaW5nLgotCQkJCSAgICAgICBsZW5ndGggKyAxKTsKKwkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGV4dGVybmFsX29iamVjdC0+c3RyaW5nLgorCQkJCQkgbGVuZ3RoICsgMSk7CiAJCWlmICghaW50ZXJuYWxfb2JqZWN0LT5zdHJpbmcucG9pbnRlcikgewogCQkJZ290byBlcnJvcl9leGl0OwogCQl9CkBAIC00ODgsNyArNDg4LDcgQEAKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKIAkJaW50ZXJuYWxfb2JqZWN0LT5idWZmZXIucG9pbnRlciA9Ci0JCSAgICBBQ1BJX01FTV9DQUxMT0NBVEUoZXh0ZXJuYWxfb2JqZWN0LT5idWZmZXIubGVuZ3RoKTsKKwkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKGV4dGVybmFsX29iamVjdC0+YnVmZmVyLmxlbmd0aCk7CiAJCWlmICghaW50ZXJuYWxfb2JqZWN0LT5idWZmZXIucG9pbnRlcikgewogCQkJZ290byBlcnJvcl9leGl0OwogCQl9CkBAIC01NTIsNyArNTUyLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICp0aGlzX2ludGVybmFsX29iajsKIAl1bmlvbiBhY3BpX29iamVjdCAqdGhpc19leHRlcm5hbF9vYmo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9jb3B5X2VwYWNrYWdlX3RvX2lwYWNrYWdlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VwYWNrYWdlX3RvX2lwYWNrYWdlKTsKIAogCS8qCiAJICogRmlyc3QgcGFja2FnZSBhdCBoZWFkIG9mIHRoZSBidWZmZXIKQEAgLTYwMCw3ICs2MDAsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2NvcHlfZW9iamVjdF90b19pb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VvYmplY3RfdG9faW9iamVjdCk7CiAKIAlpZiAoZXh0ZXJuYWxfb2JqZWN0LT50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCS8qCkBAIC02NzYsNyArNjc2LDcgQEAKIAkJaWYgKChzb3VyY2VfZGVzYy0+YnVmZmVyLnBvaW50ZXIpICYmCiAJCSAgICAoc291cmNlX2Rlc2MtPmJ1ZmZlci5sZW5ndGgpKSB7CiAJCQlkZXN0X2Rlc2MtPmJ1ZmZlci5wb2ludGVyID0KLQkJCSAgICBBQ1BJX01FTV9BTExPQ0FURShzb3VyY2VfZGVzYy0+YnVmZmVyLmxlbmd0aCk7CisJCQkgICAgQUNQSV9BTExPQ0FURShzb3VyY2VfZGVzYy0+YnVmZmVyLmxlbmd0aCk7CiAJCQlpZiAoIWRlc3RfZGVzYy0+YnVmZmVyLnBvaW50ZXIpIHsKIAkJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJCQl9CkBAIC02OTcsOCArNjk3LDggQEAKIAkJICovCiAJCWlmIChzb3VyY2VfZGVzYy0+c3RyaW5nLnBvaW50ZXIpIHsKIAkJCWRlc3RfZGVzYy0+c3RyaW5nLnBvaW50ZXIgPQotCQkJICAgIEFDUElfTUVNX0FMTE9DQVRFKChhY3BpX3NpemUpIHNvdXJjZV9kZXNjLT5zdHJpbmcuCi0JCQkJCSAgICAgIGxlbmd0aCArIDEpOworCQkJICAgIEFDUElfQUxMT0NBVEUoKGFjcGlfc2l6ZSkgc291cmNlX2Rlc2MtPnN0cmluZy4KKwkJCQkJICBsZW5ndGggKyAxKTsKIAkJCWlmICghZGVzdF9kZXNjLT5zdHJpbmcucG9pbnRlcikgewogCQkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKIAkJCX0KQEAgLTgwNSw5ICs4MDUsNyBAQAogCQkvKgogCQkgKiBDcmVhdGUgdGhlIG9iamVjdCBhcnJheQogCQkgKi8KLQkJdGFyZ2V0X29iamVjdC0+cGFja2FnZS5lbGVtZW50cyA9Ci0JCSAgICBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpIHNvdXJjZV9vYmplY3QtPnBhY2thZ2UuCi0JCQkJCWNvdW50ICsgMSkgKiBzaXplb2Yodm9pZCAqKSk7CisJCXRhcmdldF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoKGFjcGlfc2l6ZSkgc291cmNlX29iamVjdC0+cGFja2FnZS5jb3VudCArIDEpICogc2l6ZW9mKHZvaWQgKikpOwogCQlpZiAoIXRhcmdldF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMpIHsKIAkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJCWdvdG8gZXJyb3JfZXhpdDsKQEAgLTg1Niw3ICs4NTQsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pcGFja2FnZV90b19pcGFja2FnZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pcGFja2FnZV90b19pcGFja2FnZSk7CiAKIAlkZXN0X29iai0+Y29tbW9uLnR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2Vfb2JqKTsKIAlkZXN0X29iai0+Y29tbW9uLmZsYWdzID0gc291cmNlX29iai0+Y29tbW9uLmZsYWdzOwpAQCAtODY1LDEwICs4NjMsMTAgQEAKIAkvKgogCSAqIENyZWF0ZSB0aGUgb2JqZWN0IGFycmF5IGFuZCB3YWxrIHRoZSBzb3VyY2UgcGFja2FnZSB0cmVlCiAJICovCi0JZGVzdF9vYmotPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX01FTV9DQUxMT0NBVEUoKChhY3BpX3NpemUpCi0JCQkJCQkJIHNvdXJjZV9vYmotPnBhY2thZ2UuCi0JCQkJCQkJIGNvdW50ICsKLQkJCQkJCQkgMSkgKiBzaXplb2Yodm9pZCAqKSk7CisJZGVzdF9vYmotPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoKGFjcGlfc2l6ZSkKKwkJCQkJCQkgICBzb3VyY2Vfb2JqLT5wYWNrYWdlLgorCQkJCQkJCSAgIGNvdW50ICsKKwkJCQkJCQkgICAxKSAqIHNpemVvZih2b2lkICopKTsKIAlpZiAoIWRlc3Rfb2JqLT5wYWNrYWdlLmVsZW1lbnRzKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJQYWNrYWdlIGFsbG9jYXRpb24gZmFpbHVyZSIpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CkBAIC04ODIsNiArODgwLDcgQEAKIAkJCQkJICAgYWNwaV91dF9jb3B5X2llbGVtZW50X3RvX2llbGVtZW50LAogCQkJCQkgICB3YWxrX3N0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwogCQkvKiBPbiBmYWlsdXJlLCBkZWxldGUgdGhlIGRlc3RpbmF0aW9uIHBhY2thZ2Ugb2JqZWN0ICovCiAKIAkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGRlc3Rfb2JqKTsKQEAgLTkxMSw3ICs5MTAsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY29weV9pb2JqZWN0X3RvX2lvYmplY3QiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2NvcHlfaW9iamVjdF90b19pb2JqZWN0KTsKIAogCS8qIENyZWF0ZSB0aGUgdG9wIGxldmVsIG9iamVjdCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVidWcuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCmluZGV4IDM1ZjNkNTguLjVlYzFjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwpAQCAtMTIzLDEyICsxMjEsMTQgQEAKIAkvKiBBbGwgRnVuY3Rpb24gbmFtZXMgYXJlIGxvbmdlciB0aGFuIDQgY2hhcnMsIGNoZWNrIGlzIHNhZmUgKi8KIAogCWlmICgqKEFDUElfQ0FTVF9QVFIodTMyLCBmdW5jdGlvbl9uYW1lKSkgPT0gQUNQSV9QUkVGSVhfTUlYRUQpIHsKKwogCQkvKiBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZSBvcmlnaW5hbCBzb3VyY2UgaGFzIG5vdCBiZWVuIG1vZGlmaWVkICovCiAKIAkJcmV0dXJuIChmdW5jdGlvbl9uYW1lICsgNCk7CiAJfQogCiAJaWYgKCooQUNQSV9DQVNUX1BUUih1MzIsIGZ1bmN0aW9uX25hbWUpKSA9PSBBQ1BJX1BSRUZJWF9MT1dFUikgeworCiAJCS8qIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgdGhlIHNvdXJjZSBoYXMgYmVlbiAnbGludXhpemVkJyAqLwogCiAJCXJldHVybiAoZnVuY3Rpb25fbmFtZSArIDUpOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLAogCQkgICAgY2hhciAqbW9kdWxlX25hbWUsIHUzMiBjb21wb25lbnRfaWQsIGNoYXIgKmZvcm1hdCwgLi4uKQogewotCXUzMiB0aHJlYWRfaWQ7CisJYWNwaV90aHJlYWRfaWQgdGhyZWFkX2lkOwogCXZhX2xpc3QgYXJnczsKIAogCS8qCkBAIC0xNzcsNyArMTc3LDYgQEAKIAkgKiBUaHJlYWQgdHJhY2tpbmcgYW5kIGNvbnRleHQgc3dpdGNoIG5vdGlmaWNhdGlvbgogCSAqLwogCXRocmVhZF9pZCA9IGFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpOwotCiAJaWYgKHRocmVhZF9pZCAhPSBhY3BpX2dibF9wcmV2X3RocmVhZF9pZCkgewogCQlpZiAoQUNQSV9MVl9USFJFQURTICYgYWNwaV9kYmdfbGV2ZWwpIHsKIAkJCWFjcGlfb3NfcHJpbnRmCkBAIC0yMDYsNyArMjA1LDcgQEAKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3V0X2RlYnVnX3ByaW50KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3V0X2RlYnVnX3ByaW50KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIyNiw3ICsyMjUsNiBAQAogICogICAgICAgICAgICAgIGRlYnVnX3ByaW50IHNvIHRoYXQgdGhlIHNhbWUgbWFjcm9zIGNhbiBiZSB1c2VkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQgQUNQSV9JTlRFUk5BTF9WQVJfWEZBQ0UKIGFjcGlfdXRfZGVidWdfcHJpbnRfcmF3KHUzMiByZXF1ZXN0ZWRfZGVidWdfbGV2ZWwsCiAJCQl1MzIgbGluZV9udW1iZXIsCkBAIC0yNDQsNyArMjQyLDcgQEAKIAlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3V0X2RlYnVnX3ByaW50X3Jhdyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV91dF9kZWJ1Z19wcmludF9yYXcpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjYxLDcgKzI1OSw2IEBACiAgKiAgICAgICAgICAgICAgc2V0IGluIGRlYnVnX2xldmVsCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogdm9pZAogYWNwaV91dF90cmFjZSh1MzIgbGluZV9udW1iZXIsCiAJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwgY2hhciAqbW9kdWxlX25hbWUsIHUzMiBjb21wb25lbnRfaWQpCkBAIC0yNzUsNyArMjcyLDcgQEAKIAkJCSAgICBjb21wb25lbnRfaWQsICIlc1xuIiwgYWNwaV9nYmxfZm5fZW50cnlfc3RyKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX3V0X3RyYWNlKTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3V0X3RyYWNlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTI5Myw3ICsyOTAsNiBAQAogICogICAgICAgICAgICAgIHNldCBpbiBkZWJ1Z19sZXZlbAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQKIGFjcGlfdXRfdHJhY2VfcHRyKHUzMiBsaW5lX251bWJlciwKIAkJICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLApAQCAtNDAwLDcgKzM5Niw3IEBACiAJYWNwaV9nYmxfbmVzdGluZ19sZXZlbC0tOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfdXRfZXhpdCk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV91dF9leGl0KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQxOCw3ICs0MTQsNiBAQAogICogICAgICAgICAgICAgIHNldCBpbiBkZWJ1Z19sZXZlbC4gUHJpbnRzIGV4aXQgc3RhdHVzIGFsc28uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogdm9pZAogYWNwaV91dF9zdGF0dXNfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLApAQCAtNDQyLDcgKzQzNyw3IEBACiAJYWNwaV9nYmxfbmVzdGluZ19sZXZlbC0tOwogfQogCi1FWFBPUlRfU1lNQk9MKGFjcGlfdXRfc3RhdHVzX2V4aXQpOworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdXRfc3RhdHVzX2V4aXQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDYwLDcgKzQ1NSw2IEBACiAgKiAgICAgICAgICAgICAgc2V0IGluIGRlYnVnX2xldmVsLiBQcmludHMgZXhpdCB2YWx1ZSBhbHNvLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQKIGFjcGlfdXRfdmFsdWVfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUsCkBAIC00NzUsNyArNDY5LDcgQEAKIAlhY3BpX2dibF9uZXN0aW5nX2xldmVsLS07CiB9CiAKLUVYUE9SVF9TWU1CT0woYWNwaV91dF92YWx1ZV9leGl0KTsKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3V0X3ZhbHVlX2V4aXQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDkzLDcgKzQ4Nyw2IEBACiAgKiAgICAgICAgICAgICAgc2V0IGluIGRlYnVnX2xldmVsLiBQcmludHMgZXhpdCB2YWx1ZSBhbHNvLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHZvaWQKIGFjcGlfdXRfcHRyX2V4aXQodTMyIGxpbmVfbnVtYmVyLAogCQkgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwKQEAgLTUyNCwyMCArNTE3LDEzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX3V0X2R1bXBfYnVmZmVyKHU4ICogYnVmZmVyLCB1MzIgY291bnQsIHUzMiBkaXNwbGF5LCB1MzIgY29tcG9uZW50X2lkKQordm9pZCBhY3BpX3V0X2R1bXBfYnVmZmVyMih1OCAqIGJ1ZmZlciwgdTMyIGNvdW50LCB1MzIgZGlzcGxheSkKIHsKIAlhY3BpX25hdGl2ZV91aW50IGkgPSAwOwogCWFjcGlfbmF0aXZlX3VpbnQgajsKIAl1MzIgdGVtcDMyOwogCXU4IGJ1Zl9jaGFyOwogCi0JLyogT25seSBkdW1wIHRoZSBidWZmZXIgaWYgdHJhY2luZyBpcyBlbmFibGVkICovCi0KLQlpZiAoISgoQUNQSV9MVl9UQUJMRVMgJiBhY3BpX2RiZ19sZXZlbCkgJiYKLQkgICAgICAoY29tcG9uZW50X2lkICYgYWNwaV9kYmdfbGF5ZXIpKSkgewotCQlyZXR1cm47Ci0JfQotCiAJaWYgKChjb3VudCA8IDQpIHx8IChjb3VudCAmIDB4MDEpKSB7CiAJCWRpc3BsYXkgPSBEQl9CWVRFX0RJU1BMQVk7CiAJfQpAQCAtNTQ1LDYgKzUzMSw3IEBACiAJLyogTmFzdHkgbGl0dGxlIGR1bXAgYnVmZmVyIHJvdXRpbmUhICovCiAKIAl3aGlsZSAoaSA8IGNvdW50KSB7CisKIAkJLyogUHJpbnQgY3VycmVudCBvZmZzZXQgKi8KIAogCQlhY3BpX29zX3ByaW50ZigiJTYuNFg6ICIsICh1MzIpIGkpOwpAQCAtNTUzLDYgKzU0MCw3IEBACiAKIAkJZm9yIChqID0gMDsgaiA8IDE2OykgewogCQkJaWYgKGkgKyBqID49IGNvdW50KSB7CisKIAkJCQkvKiBEdW1wIGZpbGwgc3BhY2VzICovCiAKIAkJCQlhY3BpX29zX3ByaW50ZigiJSpzIiwgKChkaXNwbGF5ICogMikgKyAxKSwgIiAiKTsKQEAgLTU2MSw2ICs1NDksNyBAQAogCQkJfQogCiAJCQlzd2l0Y2ggKGRpc3BsYXkpIHsKKwkJCWNhc2UgREJfQllURV9ESVNQTEFZOgogCQkJZGVmYXVsdDoJLyogRGVmYXVsdCBpcyBCWVRFIGRpc3BsYXkgKi8KIAogCQkJCWFjcGlfb3NfcHJpbnRmKCIlMDJYICIsIGJ1ZmZlcltpICsgal0pOwpAQCAtNjE4LDMgKzYwNywzMSBAQAogCiAJcmV0dXJuOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2R1bXBfYnVmZmVyCisgKgorICogUEFSQU1FVEVSUzogIEJ1ZmZlciAgICAgICAgICAgICAgLSBCdWZmZXIgdG8gZHVtcAorICogICAgICAgICAgICAgIENvdW50ICAgICAgICAgICAgICAgLSBBbW91bnQgdG8gZHVtcCwgaW4gYnl0ZXMKKyAqICAgICAgICAgICAgICBEaXNwbGF5ICAgICAgICAgICAgIC0gQllURSwgV09SRCwgRFdPUkQsIG9yIFFXT1JEIGRpc3BsYXkKKyAqICAgICAgICAgICAgICBjb21wb25lbnRfaUQgICAgICAgIC0gQ2FsbGVyJ3MgY29tcG9uZW50IElECisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogR2VuZXJpYyBkdW1wIGJ1ZmZlciBpbiBib3RoIGhleCBhbmQgYXNjaWkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBhY3BpX3V0X2R1bXBfYnVmZmVyKHU4ICogYnVmZmVyLCB1MzIgY291bnQsIHUzMiBkaXNwbGF5LCB1MzIgY29tcG9uZW50X2lkKQoreworCisJLyogT25seSBkdW1wIHRoZSBidWZmZXIgaWYgdHJhY2luZyBpcyBlbmFibGVkICovCisKKwlpZiAoISgoQUNQSV9MVl9UQUJMRVMgJiBhY3BpX2RiZ19sZXZlbCkgJiYKKwkgICAgICAoY29tcG9uZW50X2lkICYgYWNwaV9kYmdfbGF5ZXIpKSkgeworCQlyZXR1cm47CisJfQorCisJYWNwaV91dF9kdW1wX2J1ZmZlcjIoYnVmZmVyLCBjb3VudCwgZGlzcGxheSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMKaW5kZXggMWRiOTY5NS4uNjdiOWYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYwpAQCAtNzYsNyArNzYsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnNlY29uZF9kZXNjOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHRfZGVzYzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKCJ1dF9kZWxldGVfaW50ZXJuYWxfb2JqIiwgb2JqZWN0KTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUih1dF9kZWxldGVfaW50ZXJuYWxfb2JqLCBvYmplY3QpOwogCiAJaWYgKCFvYmplY3QpIHsKIAkJcmV0dXJuX1ZPSUQ7CkBAIC05Niw2ICs5Niw3IEBACiAJCS8qIEZyZWUgdGhlIGFjdHVhbCBzdHJpbmcgYnVmZmVyICovCiAKIAkJaWYgKCEob2JqZWN0LT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfU1RBVElDX1BPSU5URVIpKSB7CisKIAkJCS8qIEJ1dCBvbmx5IGlmIGl0IGlzIE5PVCBhIHBvaW50ZXIgaW50byBhbiBBQ1BJIHRhYmxlICovCiAKIAkJCW9ial9wb2ludGVyID0gb2JqZWN0LT5zdHJpbmcucG9pbnRlcjsKQEAgLTExMSw2ICsxMTIsNyBAQAogCQkvKiBGcmVlIHRoZSBhY3R1YWwgYnVmZmVyICovCiAKIAkJaWYgKCEob2JqZWN0LT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfU1RBVElDX1BPSU5URVIpKSB7CisKIAkJCS8qIEJ1dCBvbmx5IGlmIGl0IGlzIE5PVCBhIHBvaW50ZXIgaW50byBhbiBBQ1BJIHRhYmxlICovCiAKIAkJCW9ial9wb2ludGVyID0gb2JqZWN0LT5idWZmZXIucG9pbnRlcjsKQEAgLTE5OCwxMSArMjAwLDIyIEBACiAJCQkgKi8KIAkJCWhhbmRsZXJfZGVzYyA9IG9iamVjdC0+cmVnaW9uLmhhbmRsZXI7CiAJCQlpZiAoaGFuZGxlcl9kZXNjKSB7Ci0JCQkJaWYgKGhhbmRsZXJfZGVzYy0+YWRkcmVzc19zcGFjZS4KLQkJCQkgICAgaGZsYWdzICYKKwkJCQlpZiAoaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLmhhbmRsZXJfZmxhZ3MgJgogCQkJCSAgICBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCkgewotCQkJCQlvYmpfcG9pbnRlciA9Ci0JCQkJCSAgICBzZWNvbmRfZGVzYy0+ZXh0cmEucmVnaW9uX2NvbnRleHQ7CisKKwkJCQkJLyogRGVhY3RpdmF0ZSByZWdpb24gYW5kIGZyZWUgcmVnaW9uIGNvbnRleHQgKi8KKworCQkJCQlpZiAoaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLnNldHVwKSB7CisJCQkJCQkodm9pZCloYW5kbGVyX2Rlc2MtPgorCQkJCQkJICAgIGFkZHJlc3Nfc3BhY2Uuc2V0dXAob2JqZWN0LAorCQkJCQkJCQkJQUNQSV9SRUdJT05fREVBQ1RJVkFURSwKKwkJCQkJCQkJCWhhbmRsZXJfZGVzYy0+CisJCQkJCQkJCQlhZGRyZXNzX3NwYWNlLgorCQkJCQkJCQkJY29udGV4dCwKKwkJCQkJCQkJCSZzZWNvbmRfZGVzYy0+CisJCQkJCQkJCQlleHRyYS4KKwkJCQkJCQkJCXJlZ2lvbl9jb250ZXh0KTsKKwkJCQkJfQogCQkJCX0KIAogCQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShoYW5kbGVyX2Rlc2MpOwpAQCAtMjM0LDcgKzI0Nyw3IEBACiAJaWYgKG9ial9wb2ludGVyKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsCiAJCQkJICAiRGVsZXRpbmcgT2JqZWN0IFN1YnB0ciAlcFxuIiwgb2JqX3BvaW50ZXIpKTsKLQkJQUNQSV9NRU1fRlJFRShvYmpfcG9pbnRlcik7CisJCUFDUElfRlJFRShvYmpfcG9pbnRlcik7CiAJfQogCiAJLyogTm93IHRoZSBvYmplY3QgY2FuIGJlIHNhZmVseSBkZWxldGVkICovCkBAIC0yNjMsNyArMjc2LDcgQEAKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqaW50ZXJuYWxfb2JqOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZGVsZXRlX2ludGVybmFsX29iamVjdF9saXN0Iik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9kZWxldGVfaW50ZXJuYWxfb2JqZWN0X2xpc3QpOwogCiAJLyogV2FsayB0aGUgbnVsbC10ZXJtaW5hdGVkIGludGVybmFsIGxpc3QgKi8KIApAQCAtMjczLDcgKzI4Niw3IEBACiAKIAkvKiBGcmVlIHRoZSBjb21iaW5lZCBwYXJhbWV0ZXIgcG9pbnRlciBsaXN0IGFuZCBvYmplY3QgYXJyYXkgKi8KIAotCUFDUElfTUVNX0ZSRUUob2JqX2xpc3QpOworCUFDUElfRlJFRShvYmpfbGlzdCk7CiAJcmV0dXJuX1ZPSUQ7CiB9CiAKQEAgLTI5Niw3ICszMDksNyBAQAogCXUxNiBjb3VudDsKIAl1MTYgbmV3X2NvdW50OwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJ1dF91cGRhdGVfcmVmX2NvdW50Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X3VwZGF0ZV9yZWZfY291bnQpOwogCiAJaWYgKCFvYmplY3QpIHsKIAkJcmV0dXJuOwpAQCAtMzA2LDExICszMTksOSBAQAogCW5ld19jb3VudCA9IGNvdW50OwogCiAJLyoKLQkgKiBQZXJmb3JtIHRoZSByZWZlcmVuY2UgY291bnQgYWN0aW9uCi0JICogKGluY3JlbWVudCwgZGVjcmVtZW50LCBvciBmb3JjZSBkZWxldGUpCisJICogUGVyZm9ybSB0aGUgcmVmZXJlbmNlIGNvdW50IGFjdGlvbiAoaW5jcmVtZW50LCBkZWNyZW1lbnQsIGZvcmNlIGRlbGV0ZSkKIAkgKi8KIAlzd2l0Y2ggKGFjdGlvbikgewotCiAJY2FzZSBSRUZfSU5DUkVNRU5UOgogCiAJCW5ld19jb3VudCsrOwpAQCAtMzQ3LDcgKzM1OCw2IEBACiAJCWlmIChuZXdfY291bnQgPT0gMCkgewogCQkJYWNwaV91dF9kZWxldGVfaW50ZXJuYWxfb2JqKG9iamVjdCk7CiAJCX0KLQogCQlicmVhazsKIAogCWNhc2UgUkVGX0ZPUkNFX0RFTEVURToKQEAgLTM3MiwxMyArMzgyLDEwIEBACiAJICogKEEgZGVsZXRlZCBvYmplY3Qgd2lsbCBoYXZlIGEgaHVnZSByZWZlcmVuY2UgY291bnQpCiAJICovCiAJaWYgKGNvdW50ID4gQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UKSB7Ci0KIAkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIkxhcmdlIFJlZmVyZW5jZSBDb3VudCAoJVgpIGluIG9iamVjdCAlcCIsCi0JCQkgICAgICBjb3VudCwgb2JqZWN0KSk7CisJCQkgICAgICAiTGFyZ2UgUmVmZXJlbmNlIENvdW50ICglWCkgaW4gb2JqZWN0ICVwIiwgY291bnQsCisJCQkgICAgICBvYmplY3QpKTsKIAl9Ci0KLQlyZXR1cm47CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MDQsNyArNDExLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiBvYmplY3QsIHUxNiBhY3Rpb24pCithY3BpX3V0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9iamVjdCwgdTE2IGFjdGlvbikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlX2xpc3QgPSBOVUxMOwpAQCAtNDEyLDkgKzQxOSwxMCBAQAogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X3VwZGF0ZV9vYmplY3RfcmVmZXJlbmNlIiwgb2JqZWN0KTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUih1dF91cGRhdGVfb2JqZWN0X3JlZmVyZW5jZSwgb2JqZWN0KTsKIAogCXdoaWxlIChvYmplY3QpIHsKKwogCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzbid0IGEgbmFtZXNwYWNlIGhhbmRsZSAqLwogCiAJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob2JqZWN0KSA9PSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgewpAQCAtNTA3LDExICs1MTUsMTEgQEAKIAogCQljYXNlIEFDUElfVFlQRV9SRUdJT046CiAJCWRlZmF1bHQ6Ci0JCQlicmVhazsJLyogTm8gc3Vib2JqZWN0cyAqLworCQkJYnJlYWs7CS8qIE5vIHN1Ym9iamVjdHMgZm9yIGFsbCBvdGhlciB0eXBlcyAqLwogCQl9CiAKIAkJLyoKLQkJICogTm93IHdlIGNhbiB1cGRhdGUgdGhlIGNvdW50IGluIHRoZSBtYWluIG9iamVjdC4gIFRoaXMgY2FuIG9ubHkKKwkJICogTm93IHdlIGNhbiB1cGRhdGUgdGhlIGNvdW50IGluIHRoZSBtYWluIG9iamVjdC4gVGhpcyBjYW4gb25seQogCQkgKiBoYXBwZW4gYWZ0ZXIgd2UgdXBkYXRlIHRoZSBzdWItb2JqZWN0cyBpbiBjYXNlIHRoaXMgY2F1c2VzIHRoZQogCQkgKiBtYWluIG9iamVjdCB0byBiZSBkZWxldGVkLgogCQkgKi8KQEAgLTU1Niw3ICs1NjQsNyBAQAogdm9pZCBhY3BpX3V0X2FkZF9yZWZlcmVuY2UodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0KQogewogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2FkZF9yZWZlcmVuY2UiLCBvYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2FkZF9yZWZlcmVuY2UsIG9iamVjdCk7CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgb2JqZWN0ICovCiAKQEAgLTU4OSwxMSArNTk3LDExIEBACiB2b2lkIGFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3QpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfcmVtb3ZlX3JlZmVyZW5jZSIsIG9iamVjdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodXRfcmVtb3ZlX3JlZmVyZW5jZSwgb2JqZWN0KTsKIAogCS8qCi0JICogQWxsb3cgYSBOVUxMIHBvaW50ZXIgdG8gYmUgcGFzc2VkIGluLCBqdXN0IGlnbm9yZSBpdC4gIFRoaXMgc2F2ZXMKLQkgKiBlYWNoIGNhbGxlciBmcm9tIGhhdmluZyB0byBjaGVjay4gIEFsc28sIGlnbm9yZSBOUyBub2Rlcy4KKwkgKiBBbGxvdyBhIE5VTEwgcG9pbnRlciB0byBiZSBwYXNzZWQgaW4sIGp1c3QgaWdub3JlIGl0LiBUaGlzIHNhdmVzCisJICogZWFjaCBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gY2hlY2suIEFsc28sIGlnbm9yZSBOUyBub2Rlcy4KIAkgKgogCSAqLwogCWlmICghb2JqZWN0IHx8CkBAIC02MTMsNyArNjIxLDcgQEAKIAogCS8qCiAJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIGFuZCBvbmx5IGFjdHVhbGx5IGRlbGV0ZSB0aGUgb2JqZWN0Ci0JICogaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIDAuICAoTXVzdCBhbHNvIGRlY3JlbWVudCB0aGUgcmVmIGNvdW50CisJICogaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIDAuIChNdXN0IGFsc28gZGVjcmVtZW50IHRoZSByZWYgY291bnQKIAkgKiBvZiBhbGwgc3Vib2JqZWN0cyEpCiAJICovCiAJKHZvaWQpYWNwaV91dF91cGRhdGVfb2JqZWN0X3JlZmVyZW5jZShvYmplY3QsIFJFRl9ERUNSRU1FTlQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGV2YWwuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRldmFsLmMKaW5kZXggMTA2Y2M5Ny4uZDZkNzEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZXZhbC5jCkBAIC01Niw2ICs1NiwzNCBAQAogYWNwaV91dF90cmFuc2xhdGVfb25lX2NpZCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKIAkJCSAgc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCAqb25lX2NpZCk7CiAKKy8qCisgKiBTdHJpbmdzIHN1cHBvcnRlZCBieSB0aGUgX09TSSBwcmVkZWZpbmVkIChpbnRlcm5hbCkgbWV0aG9kLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtdID0geworCS8qIE9wZXJhdGluZyBTeXN0ZW0gVmVuZG9yIFN0cmluZ3MgKi8KKworCSJMaW51eCIsCisJIldpbmRvd3MgMjAwMCIsCisJIldpbmRvd3MgMjAwMSIsCisJIldpbmRvd3MgMjAwMSBTUDAiLAorCSJXaW5kb3dzIDIwMDEgU1AxIiwKKwkiV2luZG93cyAyMDAxIFNQMiIsCisJIldpbmRvd3MgMjAwMSBTUDMiLAorCSJXaW5kb3dzIDIwMDEgU1A0IiwKKwkiV2luZG93cyAyMDAxLjEiLAorCSJXaW5kb3dzIDIwMDEuMSBTUDEiLAkvKiBBZGRlZCAwMy8yMDA2ICovCisJIldpbmRvd3MgMjAwNiIsCQkvKiBBZGRlZCAwMy8yMDA2ICovCisKKwkvKiBGZWF0dXJlIEdyb3VwIFN0cmluZ3MgKi8KKworCSJFeHRlbmRlZCBBZGRyZXNzIFNwYWNlIERlc2NyaXB0b3IiCisJICAgIC8qCisJICAgICAqIEFsbCAib3B0aW9uYWwiIGZlYXR1cmUgZ3JvdXAgc3RyaW5ncyAoZmVhdHVyZXMgdGhhdCBhcmUgaW1wbGVtZW50ZWQKKwkgICAgICogYnkgdGhlIGhvc3QpIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgaG9zdCB2ZXJzaW9uIG9mCisJICAgICAqIGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlIGFuZCBzaG91bGQgbm90IGJlIGFkZGVkIGhlcmUuCisJICAgICAqLworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9vc2lfaW1wbGVtZW50YXRpb24KQEAgLTY0LDE4ICs5MiwxOCBAQAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogSW1wbGVtZW50YXRpb24gb2YgX09TSSBwcmVkZWZpbmVkIGNvbnRyb2wgbWV0aG9kCi0gKiAgICAgICAgICAgICAgU3VwcG9ydGVkID0gX09TSSAoU3RyaW5nKQorICogREVTQ1JJUFRJT046IEltcGxlbWVudGF0aW9uIG9mIHRoZSBfT1NJIHByZWRlZmluZWQgY29udHJvbCBtZXRob2QKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cyBhY3BpX3V0X29zaV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKQogeworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzdHJpbmdfZGVzYzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYzsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9vc2lfaW1wbGVtZW50YXRpb24iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X29zaV9pbXBsZW1lbnRhdGlvbik7CiAKIAkvKiBWYWxpZGF0ZSB0aGUgc3RyaW5nIGlucHV0IGFyZ3VtZW50ICovCiAKQEAgLTg0LDI4ICsxMTIsNDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1RZUEUpOwogCX0KIAotCS8qIENyZWF0ZSBhIHJldHVybiBvYmplY3QgKERlZmF1bHQgdmFsdWUgPSAwKSAqLworCS8qIENyZWF0ZSBhIHJldHVybiBvYmplY3QgKi8KIAogCXJldHVybl9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9JTlRFR0VSKTsKIAlpZiAoIXJldHVybl9kZXNjKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KIAotCS8qIENvbXBhcmUgaW5wdXQgc3RyaW5nIHRvIHRhYmxlIG9mIHN1cHBvcnRlZCBzdHJpbmdzICovCisJLyogRGVmYXVsdCByZXR1cm4gdmFsdWUgaXMgU1VQUE9SVEVEICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fT1NJX1NUUklOR1M7IGkrKykgewotCQlpZiAoIUFDUElfU1RSQ01QKHN0cmluZ19kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJCQkgQUNQSV9DQVNUX1BUUihjaGFyLAotCQkJCQkgICAgICAgYWNwaV9nYmxfdmFsaWRfb3NpX3N0cmluZ3NbaV0pKSkKLQkJewotCQkJLyogVGhpcyBzdHJpbmcgaXMgc3VwcG9ydGVkICovCisJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQzMl9NQVg7CisJd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2MgPSByZXR1cm5fZGVzYzsKIAotCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSAweEZGRkZGRkZGOwotCQkJYnJlYWs7CisJLyogQ29tcGFyZSBpbnB1dCBzdHJpbmcgdG8gc3RhdGljIHRhYmxlIG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9BUlJBWV9MRU5HVEgoYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZCk7IGkrKykgeworCQlpZiAoIUFDUElfU1RSQ01QCisJCSAgICAoc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyLAorCQkgICAgIGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWRbaV0pKSB7CisKKwkJCS8qIFRoZSBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkICovCisKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9DVFJMX1RFUk1JTkFURSk7CiAJCX0KIAl9CiAKLQl3YWxrX3N0YXRlLT5yZXR1cm5fZGVzYyA9IHJldHVybl9kZXNjOworCS8qCisJICogRGlkIG5vdCBtYXRjaCB0aGUgc3RyaW5nIGluIHRoZSBzdGF0aWMgdGFibGUsIGNhbGwgdGhlIGhvc3QgT1NMIHRvCisJICogY2hlY2sgZm9yIGEgbWF0Y2ggd2l0aCBvbmUgb2YgdGhlIG9wdGlvbmFsIHN0cmluZ3MgKHN1Y2ggYXMKKwkgKiAiTW9kdWxlIERldmljZSIsICIzLjAgVGhlcm1hbCBNb2RlbCIsIGV0Yy4pCisJICovCisJc3RhdHVzID0gYWNwaV9vc192YWxpZGF0ZV9pbnRlcmZhY2Uoc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKworCQkvKiBUaGUgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCAqLworCisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9DVFJMX1RFUk1JTkFURSk7CisJfQorCisJLyogVGhlIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkICovCisKKwlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9IDA7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0NUUkxfVEVSTUlOQVRFKTsKIH0KIApAQCAtMTM0LDE5ICsxODEsMjYgQEAKIAkJCXUzMiBleHBlY3RlZF9yZXR1cm5fYnR5cGVzLAogCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9kZXNjKQogewotCXN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvIGluZm87CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdTMyIHJldHVybl9idHlwZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2V2YWx1YXRlX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXZhbHVhdGVfb2JqZWN0KTsKIAotCWluZm8ubm9kZSA9IHByZWZpeF9ub2RlOwotCWluZm8ucGFyYW1ldGVycyA9IE5VTEw7Ci0JaW5mby5wYXJhbWV0ZXJfdHlwZSA9IEFDUElfUEFSQU1fQVJHUzsKKwkvKiBBbGxvY2F0ZSB0aGUgZXZhbHVhdGlvbiBpbmZvcm1hdGlvbiBibG9jayAqLworCisJaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJaWYgKCFpbmZvKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCX0KKworCWluZm8tPnByZWZpeF9ub2RlID0gcHJlZml4X25vZGU7CisJaW5mby0+cGF0aG5hbWUgPSBwYXRoOworCWluZm8tPnBhcmFtZXRlcl90eXBlID0gQUNQSV9QQVJBTV9BUkdTOwogCiAJLyogRXZhbHVhdGUgdGhlIG9iamVjdC9tZXRob2QgKi8KIAotCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGVfcmVsYXRpdmUocGF0aCwgJmluZm8pOworCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCkBAIC0xNTgsMjUgKzIxMiwyNSBAQAogCQkJCQkgIHByZWZpeF9ub2RlLCBwYXRoLCBzdGF0dXMpOwogCQl9CiAKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAkvKiBEaWQgd2UgZ2V0IGEgcmV0dXJuIG9iamVjdD8gKi8KIAotCWlmICghaW5mby5yZXR1cm5fb2JqZWN0KSB7CisJaWYgKCFpbmZvLT5yZXR1cm5fb2JqZWN0KSB7CiAJCWlmIChleHBlY3RlZF9yZXR1cm5fYnR5cGVzKSB7CiAJCQlBQ1BJX0VSUk9SX01FVEhPRCgiTm8gb2JqZWN0IHdhcyByZXR1cm5lZCBmcm9tIiwKIAkJCQkJICBwcmVmaXhfbm9kZSwgcGF0aCwgQUVfTk9UX0VYSVNUKTsKIAotCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PVF9FWElTVCk7CisJCQlzdGF0dXMgPSBBRV9OT1RfRVhJU1Q7CiAJCX0KIAotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyogTWFwIHRoZSByZXR1cm4gb2JqZWN0IHR5cGUgdG8gdGhlIGJpdG1hcHBlZCB0eXBlICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8ucmV0dXJuX29iamVjdCkpIHsKKwlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJcmV0dXJuX2J0eXBlID0gQUNQSV9CVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTIwNCw4ICsyNTgsOCBAQAogCQkgKiBoYXBwZW4gZnJlcXVlbnRseSBpZiB0aGUgImltcGxpY2l0IHJldHVybiIgZmVhdHVyZSBpcyBlbmFibGVkLgogCQkgKiBKdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCBhbmQgcmV0dXJuIEFFX09LLgogCQkgKi8KLQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8ucmV0dXJuX29iamVjdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLT5yZXR1cm5fb2JqZWN0KTsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIElzIHRoZSByZXR1cm4gb2JqZWN0IG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXM/ICovCkBAIC0yMTcsMTkgKzI3MSwyMyBAQAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJUeXBlIHJldHVybmVkIGZyb20gJXMgd2FzIGluY29ycmVjdDogJXMsIGV4cGVjdGVkIEJ0eXBlczogJVgiLAogCQkJICAgIHBhdGgsCi0JCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShpbmZvLnJldHVybl9vYmplY3QpLAorCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdCksCiAJCQkgICAgZXhwZWN0ZWRfcmV0dXJuX2J0eXBlcykpOwogCiAJCS8qIE9uIGVycm9yIGV4aXQsIHdlIG11c3QgZGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCiAKLQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8ucmV0dXJuX29iamVjdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9UWVBFKTsKKwkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKGluZm8tPnJldHVybl9vYmplY3QpOworCQlzdGF0dXMgPSBBRV9UWVBFOworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyogT2JqZWN0IHR5cGUgaXMgT0ssIHJldHVybiBpdCAqLwogCi0JKnJldHVybl9kZXNjID0gaW5mby5yZXR1cm5fb2JqZWN0OwotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJKnJldHVybl9kZXNjID0gaW5mby0+cmV0dXJuX29iamVjdDsKKworICAgICAgY2xlYW51cDoKKwlBQ1BJX0ZSRUUoaW5mbyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTcsNyArMzE1LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXZhbHVhdGVfbnVtZXJpY19vYmplY3QpOwogCiAJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIG9iamVjdF9uYW1lLAogCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSLCAmb2JqX2Rlc2MpOwpAQCAtMzMzLDcgKzM5MSw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9ISUQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfSElEKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLCBNRVRIT0RfTkFNRV9fSElELAogCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSIHwgQUNQSV9CVFlQRV9TVFJJTkcsCkBAIC0zNDMsNiArNDAxLDcgQEAKIAl9CiAKIAlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisKIAkJLyogQ29udmVydCB0aGUgTnVtZXJpYyBISUQgdG8gc3RyaW5nICovCiAKIAkJYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZygodTMyKSBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSwKQEAgLTQzNiw3ICs0OTUsNyBAQAogCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3Q7CiAJYWNwaV9uYXRpdmVfdWludCBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9DSUQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfQ0lEKTsKIAogCS8qIEV2YWx1YXRlIHRoZSBfQ0lEIG1ldGhvZCBmb3IgdGhpcyBkZXZpY2UgKi8KIApAQCAtNDU5LDcgKzUxOCw3IEBACiAJc2l6ZSA9ICgoKGNvdW50IC0gMSkgKiBzaXplb2Yoc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCkpICsKIAkJc2l6ZW9mKHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCkpOwogCi0JY2lkX2xpc3QgPSBBQ1BJX01FTV9DQUxMT0NBVEUoKGFjcGlfc2l6ZSkgc2l6ZSk7CisJY2lkX2xpc3QgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoYWNwaV9zaXplKSBzaXplKTsKIAlpZiAoIWNpZF9saXN0KSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCX0KQEAgLTQ3OSw2ICs1MzgsNyBAQAogCS8qIFRoZSBfQ0lEIG9iamVjdCBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIENJRCBvciBhIHBhY2thZ2UgKGxpc3QpIG9mIENJRHMgKi8KIAogCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwogCQkvKiBUcmFuc2xhdGUgZWFjaCBwYWNrYWdlIGVsZW1lbnQgKi8KIAogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtNDk5LDcgKzU1OSw3IEBACiAJLyogQ2xlYW51cCBvbiBlcnJvciAqLwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfTUVNX0ZSRUUoY2lkX2xpc3QpOworCQlBQ1BJX0ZSRUUoY2lkX2xpc3QpOwogCX0gZWxzZSB7CiAJCSpyZXR1cm5fY2lkX2xpc3QgPSBjaWRfbGlzdDsKIAl9CkBAIC01MzMsNyArNTkzLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9leGVjdXRlX1VJRCIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9VSUQpOwogCiAJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19VSUQsCiAJCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORywKQEAgLTU0Myw2ICs2MDMsNyBAQAogCX0KIAogCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwogCQkvKiBDb252ZXJ0IHRoZSBOdW1lcmljIFVJRCB0byBzdHJpbmcgKi8KIAogCQlhY3BpX2V4X3Vuc2lnbmVkX2ludGVnZXJfdG9fc3RyaW5nKG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlLApAQCAtNTgyLDcgKzY0Myw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9TVEEiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfU1RBKTsKIAogCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLCBNRVRIT0RfTkFNRV9fU1RBLAogCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSLCAmb2JqX2Rlc2MpOwpAQCAtNjMyLDcgKzY5Myw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZXhlY3V0ZV9TeGRzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX3N4ZHMpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQloaWdoZXN0W2ldID0gMHhGRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYwppbmRleCBmZmQxMzM4Li5lNTk5OWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGdsb2JhbC5jCkBAIC00Myw3ICs0Myw2IEBACiAKICNkZWZpbmUgREVGSU5FX0FDUElfR0xPQkFMUwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCkBAIC0xMTksNiArMTE4LDcgQEAKIAl9CiAKIAlpZiAoIWV4Y2VwdGlvbikgeworCiAJCS8qIEV4Y2VwdGlvbiBjb2RlIHdhcyBub3QgcmVjb2duaXplZCAqLwogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0xNDMsMTIgKzE0MywxMCBAQAogCiAvKiBEZWJ1ZyBzd2l0Y2ggLSBsZXZlbCBhbmQgdHJhY2UgbWFzayAqLwogdTMyIGFjcGlfZGJnX2xldmVsID0gQUNQSV9ERUJVR19ERUZBVUxUOwotRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sZXZlbCk7CiAKIC8qIERlYnVnIHN3aXRjaCAtIGxheWVyIChjb21wb25lbnQpIG1hc2sgKi8KIAogdTMyIGFjcGlfZGJnX2xheWVyID0gQUNQSV9DT01QT05FTlRfREVGQVVMVCB8IEFDUElfQUxMX0RSSVZFUlM7Ci1FWFBPUlRfU1lNQk9MKGFjcGlfZGJnX2xheWVyKTsKIHUzMiBhY3BpX2dibF9uZXN0aW5nX2xldmVsID0gMDsKIAogLyogRGVidWdnZXIgZ2xvYmFscyAqLwpAQCAtMTgzLDI4ICsxODEsNiBAQAogCSJfUzREIgogfTsKIAotLyoKLSAqIFN0cmluZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBfT1NJIHByZWRlZmluZWQgKGludGVybmFsKSBtZXRob2QuCi0gKiBXaGVuIGFkZGluZyBzdHJpbmdzLCBiZSBzdXJlIHRvIHVwZGF0ZSBBQ1BJX05VTV9PU0lfU1RSSU5HUy4KLSAqLwotY29uc3QgY2hhciAqYWNwaV9nYmxfdmFsaWRfb3NpX3N0cmluZ3NbQUNQSV9OVU1fT1NJX1NUUklOR1NdID0gewotCS8qIE9wZXJhdGluZyBTeXN0ZW0gVmVuZG9yIFN0cmluZ3MgKi8KLQotCSJMaW51eCIsCi0JIldpbmRvd3MgMjAwMCIsCi0JIldpbmRvd3MgMjAwMSIsCi0JIldpbmRvd3MgMjAwMS4xIiwKLQkiV2luZG93cyAyMDAxIFNQMCIsCi0JIldpbmRvd3MgMjAwMSBTUDEiLAotCSJXaW5kb3dzIDIwMDEgU1AyIiwKLQkiV2luZG93cyAyMDAxIFNQMyIsCi0JIldpbmRvd3MgMjAwMSBTUDQiLAotCi0JLyogRmVhdHVyZSBHcm91cCBTdHJpbmdzICovCi0KLQkiRXh0ZW5kZWQgQWRkcmVzcyBTcGFjZSBEZXNjcmlwdG9yIgotfTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBOYW1lc3BhY2UgZ2xvYmFscwpAQCAtMzE3LDkgKzI5Myw5IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGFjcGlfdGFibGVfbGlzdCBhY3BpX2dibF90YWJsZV9saXN0c1tOVU1fQUNQSV9UQUJMRV9UWVBFU107CitzdHJ1Y3QgYWNwaV90YWJsZV9saXN0IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW0FDUElfVEFCTEVfSURfTUFYICsgMV07CiAKLXN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgYWNwaV9nYmxfdGFibGVfZGF0YVtOVU1fQUNQSV9UQUJMRV9UWVBFU10gPSB7CitzdHJ1Y3QgYWNwaV90YWJsZV9zdXBwb3J0IGFjcGlfZ2JsX3RhYmxlX2RhdGFbQUNQSV9UQUJMRV9JRF9NQVggKyAxXSA9IHsKIAkvKioqKioqKioqKiogICAgTmFtZSwgICBTaWduYXR1cmUsIEdsb2JhbCB0eXBlZCBwb2ludGVyICAgICBTaWduYXR1cmUgc2l6ZSwgICAgICBUeXBlICAgICAgICAgICAgICAgICAgSG93IG1hbnkgYWxsb3dlZD8sICAgIENvbnRhaW5zIHZhbGlkIEFNTD8gKi8KIAogCS8qIFJTRFAgMCAqLyB7UlNEUF9OQU1FLCBSU0RQX1NJRywgTlVMTCwgc2l6ZW9mKFJTRFBfU0lHKSAtIDEsCkBAIC00NjcsNyArNDQzLDYgQEAKIC8qIFJlZ2lvbiB0eXBlIGRlY29kaW5nICovCiAKIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3JlZ2lvbl90eXBlc1tBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlNdID0gewotLyohIFtCZWdpbl0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gKGtlZXAgdGhlc2UgQVNMIEtleXdvcmRzIGFzLWlzKSAqLwogCSJTeXN0ZW1NZW1vcnkiLAogCSJTeXN0ZW1JTyIsCiAJIlBDSV9Db25maWciLApAQCAtNDc2LDE2ICs0NTEsMTUgQEAKIAkiQ01PUyIsCiAJIlBDSUJBUlRhcmdldCIsCiAJIkRhdGFUYWJsZSIKLS8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KIH07CiAKIGNoYXIgKmFjcGlfdXRfZ2V0X3JlZ2lvbl9uYW1lKHU4IHNwYWNlX2lkKQogewogCiAJaWYgKHNwYWNlX2lkID49IEFDUElfVVNFUl9SRUdJT05fQkVHSU4pIHsKLQkJcmV0dXJuICgidXNlcl9kZWZpbmVkX3JlZ2lvbiIpOworCQlyZXR1cm4gKCJVc2VyRGVmaW5lZFJlZ2lvbiIpOwogCX0gZWxzZSBpZiAoc3BhY2VfaWQgPj0gQUNQSV9OVU1fUFJFREVGSU5FRF9SRUdJT05TKSB7Ci0JCXJldHVybiAoImludmFsaWRfc3BhY2VfaWQiKTsKKwkJcmV0dXJuICgiSW52YWxpZFNwYWNlSWQiKTsKIAl9CiAKIAlyZXR1cm4gKEFDUElfQ0FTVF9QVFIoY2hhciwgYWNwaV9nYmxfcmVnaW9uX3R5cGVzW3NwYWNlX2lkXSkpOwpAQCAtNTA2LDIwICs0ODAsMTggQEAKIC8qIEV2ZW50IHR5cGUgZGVjb2RpbmcgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2V2ZW50X3R5cGVzW0FDUElfTlVNX0ZJWEVEX0VWRU5UU10gPSB7Ci0vKiEgW0JlZ2luXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAoa2VlcCB0aGVzZSBzdHJpbmdzIGFzLWlzKSAqLwogCSJQTV9UaW1lciIsCiAJIkdsb2JhbExvY2siLAogCSJQb3dlckJ1dHRvbiIsCiAJIlNsZWVwQnV0dG9uIiwKIAkiUmVhbFRpbWVDbG9jayIsCi0vKiEgW0VuZF0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gISovCiB9OwogCiBjaGFyICphY3BpX3V0X2dldF9ldmVudF9uYW1lKHUzMiBldmVudF9pZCkKIHsKIAogCWlmIChldmVudF9pZCA+IEFDUElfRVZFTlRfTUFYKSB7Ci0JCXJldHVybiAoImludmFsaWRfZXZlbnRfaUQiKTsKKwkJcmV0dXJuICgiSW52YWxpZEV2ZW50SUQiKTsKIAl9CiAKIAlyZXR1cm4gKEFDUElfQ0FTVF9QVFIoY2hhciwgYWNwaV9nYmxfZXZlbnRfdHlwZXNbZXZlbnRfaWRdKSk7CkBAIC01NTAsNyArNTIyLDYgQEAKIC8qIFByaW50YWJsZSBuYW1lcyBvZiB0aGUgQUNQSSBvYmplY3QgdHlwZXMgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX25zX3R5cGVfbmFtZXNbXSA9IHsKLS8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uIChrZWVwIHRoZXNlIHN0cmluZ3MgYXMtaXMpICovCiAJLyogMDAgKi8gIlVudHlwZWQiLAogCS8qIDAxICovICJJbnRlZ2VyIiwKIAkvKiAwMiAqLyAiU3RyaW5nIiwKQEAgLTU4Miw3ICs1NTMsNiBAQAogCS8qIDI4ICovICJFeHRyYSIsCiAJLyogMjkgKi8gIkRhdGEiLAogCS8qIDMwICovICJJbnZhbGlkIgotLyohIFtFbmRdIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICEqLwogfTsKIAogY2hhciAqYWNwaV91dF9nZXRfdHlwZV9uYW1lKGFjcGlfb2JqZWN0X3R5cGUgdHlwZSkKQEAgLTYzNSwxNCArNjA1LDE0IEBACiAKIAkvKiBEZXNjcmlwdG9yIG11c3QgYmUgYSBuYW1lc3BhY2Ugbm9kZSAqLwogCi0JaWYgKG5vZGUtPmRlc2NyaXB0b3IgIT0gQUNQSV9ERVNDX1RZUEVfTkFNRUQpIHsKKwlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG5vZGUpICE9IEFDUElfREVTQ19UWVBFX05BTUVEKSB7CiAJCXJldHVybiAoIiMjIyMiKTsKIAl9CiAKIAkvKiBOYW1lIG11c3QgYmUgYSB2YWxpZCBBQ1BJIG5hbWUgKi8KIAogCWlmICghYWNwaV91dF92YWxpZF9hY3BpX25hbWUobm9kZS0+bmFtZS5pbnRlZ2VyKSkgewotCQlyZXR1cm4gKCI/Pz8/Iik7CisJCW5vZGUtPm5hbWUuaW50ZWdlciA9IGFjcGlfdXRfcmVwYWlyX25hbWUobm9kZS0+bmFtZS5pbnRlZ2VyKTsKIAl9CiAKIAkvKiBSZXR1cm4gdGhlIG5hbWUgKi8KQEAgLTY2NSw3ICs2MzUsNiBAQAogLyogUHJpbnRhYmxlIG5hbWVzIG9mIG9iamVjdCBkZXNjcmlwdG9yIHR5cGVzICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICphY3BpX2dibF9kZXNjX3R5cGVfbmFtZXNbXSA9IHsKLS8qISBbQmVnaW5dIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uIChrZWVwIHRoZXNlIEFTTCBLZXl3b3JkcyBhcy1pcykgKi8KIAkvKiAwMCAqLyAiSW52YWxpZCIsCiAJLyogMDEgKi8gIkNhY2hlZCIsCiAJLyogMDIgKi8gIlN0YXRlLUdlbmVyaWMiLApAQCAtNjgyLDcgKzY1MSw2IEBACiAJLyogMTMgKi8gIlBhcnNlciIsCiAJLyogMTQgKi8gIk9wZXJhbmQiLAogCS8qIDE1ICovICJOb2RlIgotLyohIFtFbmRdIG5vIHNvdXJjZSBjb2RlIHRyYW5zbGF0aW9uICEqLwogfTsKIAogY2hhciAqYWNwaV91dF9nZXRfZGVzY3JpcHRvcl9uYW1lKHZvaWQgKm9iamVjdCkKQEAgLTcyMyw3ICs2OTEsNyBAQAogY2hhciAqYWNwaV91dF9nZXRfbXV0ZXhfbmFtZSh1MzIgbXV0ZXhfaWQpCiB7CiAKLQlpZiAobXV0ZXhfaWQgPiBNQVhfTVVURVgpIHsKKwlpZiAobXV0ZXhfaWQgPiBBQ1BJX01BWF9NVVRFWCkgewogCQlyZXR1cm4gKCJJbnZhbGlkIE11dGV4IElEIik7CiAJfQogCkBAIC03NDcsNiArNzE1LDcgQEAKIHsKIAogCWlmICh0eXBlID4gQUNQSV9UWVBFX0xPQ0FMX01BWCkgeworCiAJCS8qIE5vdGU6IEFzc3VtZXMgYWxsIFRZUEVzIGFyZSBjb250aWd1b3VzIChleHRlcm5hbC9sb2NhbCkgKi8KIAogCQlyZXR1cm4gKEZBTFNFKTsKQEAgLTc3Myw3ICs3NDIsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1MzIgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2luaXRfZ2xvYmFscyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfaW5pdF9nbG9iYWxzKTsKIAogCS8qIENyZWF0ZSBhbGwgbWVtb3J5IGNhY2hlcyAqLwogCkBAIC03ODQsMTQgKzc1MywxNCBAQAogCiAJLyogQUNQSSB0YWJsZSBzdHJ1Y3R1cmUgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQUNQSV9UQUJMRV9UWVBFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IChBQ1BJX1RBQkxFX0lEX01BWCArIDEpOyBpKyspIHsKIAkJYWNwaV9nYmxfdGFibGVfbGlzdHNbaV0ubmV4dCA9IE5VTEw7CiAJCWFjcGlfZ2JsX3RhYmxlX2xpc3RzW2ldLmNvdW50ID0gMDsKIAl9CiAKIAkvKiBNdXRleCBsb2NrZWQgZmxhZ3MgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fTVVURVg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9NVVRFWDsgaSsrKSB7CiAJCWFjcGlfZ2JsX211dGV4X2luZm9baV0ubXV0ZXggPSBOVUxMOwogCQlhY3BpX2dibF9tdXRleF9pbmZvW2ldLnRocmVhZF9pZCA9IEFDUElfTVVURVhfTk9UX0FDUVVJUkVEOwogCQlhY3BpX2dibF9tdXRleF9pbmZvW2ldLnVzZV9jb3VudCA9IDA7CkBAIC04NTYsNyArODI1LDcgQEAKIAogCWFjcGlfZ2JsX3Jvb3Rfbm9kZSA9IE5VTEw7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5uYW1lLmludGVnZXIgPSBBQ1BJX1JPT1RfTkFNRTsKLQlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LmRlc2NyaXB0b3IgPSBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKKwlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX05BTUVEOwogCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3QudHlwZSA9IEFDUElfVFlQRV9ERVZJQ0U7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5jaGlsZCA9IE5VTEw7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5wZWVyID0gTlVMTDsKQEAgLTg2OSwzICs4MzgsNiBAQAogCiAJcmV0dXJuX1ZPSUQ7CiB9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sZXZlbCkKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sYXllcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRpbml0LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0aW5pdC5jCmluZGV4IGJhNzcxYjQuLmZmNzYwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGluaXQuYwpAQCAtNTAsNyArNTAsNyBAQAogCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZAotYWNwaV91dF9mYWR0X3JlZ2lzdGVyX2Vycm9yKGNoYXIgKnJlZ2lzdGVyX25hbWUsIHUzMiB2YWx1ZSwgYWNwaV9zaXplIG9mZnNldCk7CithY3BpX3V0X2ZhZHRfcmVnaXN0ZXJfZXJyb3IoY2hhciAqcmVnaXN0ZXJfbmFtZSwgdTMyIHZhbHVlLCB1OCBvZmZzZXQpOwogCiBzdGF0aWMgdm9pZCBhY3BpX3V0X3Rlcm1pbmF0ZSh2b2lkKTsKIApAQCAtNjksMTIgKzY5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotYWNwaV91dF9mYWR0X3JlZ2lzdGVyX2Vycm9yKGNoYXIgKnJlZ2lzdGVyX25hbWUsIHUzMiB2YWx1ZSwgYWNwaV9zaXplIG9mZnNldCkKK2FjcGlfdXRfZmFkdF9yZWdpc3Rlcl9lcnJvcihjaGFyICpyZWdpc3Rlcl9uYW1lLCB1MzIgdmFsdWUsIHU4IG9mZnNldCkKIHsKIAogCUFDUElfV0FSTklORygoQUVfSU5GTywKIAkJICAgICAgIkludmFsaWQgRkFEVCB2YWx1ZSAlcz0lWCBhdCBvZmZzZXQgJVggRkFEVD0lcCIsCi0JCSAgICAgIHJlZ2lzdGVyX25hbWUsIHZhbHVlLCAodTMyKSBvZmZzZXQsIGFjcGlfZ2JsX0ZBRFQpKTsKKwkJICAgICAgcmVnaXN0ZXJfbmFtZSwgdmFsdWUsIG9mZnNldCwgYWNwaV9nYmxfRkFEVCkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqZ3BlX3hydXB0X2luZm87CiAJc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKm5leHRfZ3BlX3hydXB0X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF90ZXJtaW5hdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3Rlcm1pbmF0ZSk7CiAKIAkvKiBGcmVlIGdsb2JhbCB0YWJsZXMsIGV0Yy4gKi8KIAkvKiBGcmVlIGdsb2JhbCBHUEUgYmxvY2tzIGFuZCByZWxhdGVkIGluZm8gc3RydWN0dXJlcyAqLwpAQCAtMTg2LDE0ICsxODYsMTQgQEAKIAkJZ3BlX2Jsb2NrID0gZ3BlX3hydXB0X2luZm8tPmdwZV9ibG9ja19saXN0X2hlYWQ7CiAJCXdoaWxlIChncGVfYmxvY2spIHsKIAkJCW5leHRfZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrLT5uZXh0OwotCQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2stPmV2ZW50X2luZm8pOwotCQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm8pOwotCQkJQUNQSV9NRU1fRlJFRShncGVfYmxvY2spOworCQkJQUNQSV9GUkVFKGdwZV9ibG9jay0+ZXZlbnRfaW5mbyk7CisJCQlBQ1BJX0ZSRUUoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvKTsKKwkJCUFDUElfRlJFRShncGVfYmxvY2spOwogCiAJCQlncGVfYmxvY2sgPSBuZXh0X2dwZV9ibG9jazsKIAkJfQogCQluZXh0X2dwZV94cnVwdF9pbmZvID0gZ3BlX3hydXB0X2luZm8tPm5leHQ7Ci0JCUFDUElfTUVNX0ZSRUUoZ3BlX3hydXB0X2luZm8pOworCQlBQ1BJX0ZSRUUoZ3BlX3hydXB0X2luZm8pOwogCQlncGVfeHJ1cHRfaW5mbyA9IG5leHRfZ3BlX3hydXB0X2luZm87CiAJfQogCkBAIC0yMTYsNyArMjE2LDcgQEAKIHZvaWQgYWNwaV91dF9zdWJzeXN0ZW1fc2h1dGRvd24odm9pZCkKIHsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X3N1YnN5c3RlbV9zaHV0ZG93biIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfc3Vic3lzdGVtX3NodXRkb3duKTsKIAogCS8qIEp1c3QgZXhpdCBpZiBzdWJzeXN0ZW0gaXMgYWxyZWFkeSBzaHV0ZG93biAqLwogCkBAIC0yMjgsNiArMjI4LDcgQEAKIAkvKiBTdWJzeXN0ZW0gYXBwZWFycyBhY3RpdmUsIGdvIGFoZWFkIGFuZCBzaHV0IGl0IGRvd24gKi8KIAogCWFjcGlfZ2JsX3NodXRkb3duID0gVFJVRTsKKwlhY3BpX2dibF9zdGFydHVwX2ZsYWdzID0gMDsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTaHV0dGluZyBkb3duIEFDUEkgU3Vic3lzdGVtXG4iKSk7CiAKIAkvKiBDbG9zZSB0aGUgYWNwaV9ldmVudCBIYW5kbGluZyAqLwpAQCAtMjQ1LDEyICsyNDYsNSBAQAogCS8qIFB1cmdlIHRoZSBsb2NhbCBjYWNoZXMgKi8KIAogCSh2b2lkKWFjcGlfdXRfZGVsZXRlX2NhY2hlcygpOwotCi0JLyogRGVidWcgb25seSAtIGRpc3BsYXkgbGVmdG92ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGlmIGFueSAqLwotCi0jaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKLQlhY3BpX3V0X2R1bXBfYWxsb2NhdGlvbnMoQUNQSV9VSU5UMzJfTUFYLCBOVUxMKTsKLSNlbmRpZgotCiAJcmV0dXJuX1ZPSUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWF0aC5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1hdGguYwppbmRleCA0YTMzNjA0Li4xOWQ3NGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWF0aC5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtYXRoLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl1bmlvbiB1aW50NjRfb3ZlcmxheSBxdW90aWVudDsKIAl1MzIgcmVtYWluZGVyMzI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9zaG9ydF9kaXZpZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3Nob3J0X2RpdmlkZSk7CiAKIAkvKiBBbHdheXMgY2hlY2sgZm9yIGEgemVybyBkaXZpc29yICovCiAKQEAgLTEzOSw3ICsxMzksNyBAQAogCXVuaW9uIHVpbnQ2NF9vdmVybGF5IHBhcnRpYWwyOwogCXVuaW9uIHVpbnQ2NF9vdmVybGF5IHBhcnRpYWwzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZGl2aWRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9kaXZpZGUpOwogCiAJLyogQWx3YXlzIGNoZWNrIGZvciBhIHplcm8gZGl2aXNvciAqLwogCkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJICAgICBhY3BpX2ludGVnZXIgKiBvdXRfcXVvdGllbnQsIHUzMiAqIG91dF9yZW1haW5kZXIpCiB7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9zaG9ydF9kaXZpZGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3Nob3J0X2RpdmlkZSk7CiAKIAkvKiBBbHdheXMgY2hlY2sgZm9yIGEgemVybyBkaXZpc29yICovCiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogCSAgICAgICBhY3BpX2ludGVnZXIgaW5fZGl2aXNvciwKIAkgICAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCBhY3BpX2ludGVnZXIgKiBvdXRfcmVtYWluZGVyKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2RpdmlkZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZGl2aWRlKTsKIAogCS8qIEFsd2F5cyBjaGVjayBmb3IgYSB6ZXJvIGRpdmlzb3IgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtaXNjLmMKaW5kZXggNzM2NGY1Zi4uNWM3NWQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWlzYy5jCkBAIC00OSw2ICs0OSwzMyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2lzX2FtbF90YWJsZQorICoKKyAqIFBBUkFNRVRFUlM6ICBUYWJsZSAgICAgICAgICAgICAgIC0gQW4gQUNQSSB0YWJsZQorICoKKyAqIFJFVFVSTjogICAgICBUUlVFIGlmIHRhYmxlIGNvbnRhaW5zIGV4ZWN1dGFibGUgQU1MOyBGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgQUNQSSBTaWduYXR1cmUgZm9yIGEgdGFibGUgdGhhdCBjb250YWlucyBBTUwgY29kZS4KKyAqICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZXNlIGFyZSBEU0RULFNTRFQsUFNEVC4gQWxsIG90aGVyIHRhYmxlIHR5cGVzIGFyZQorICogICAgICAgICAgICAgIGRhdGEgdGFibGVzIHRoYXQgZG8gbm90IGNvbnRhaW4gQU1MIGNvZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3U4IGFjcGlfdXRfaXNfYW1sX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisKKwkvKiBJZ25vcmUgdGFibGVzIHRoYXQgY29udGFpbiBBTUwgKi8KKworCWlmIChBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZS0+c2lnbmF0dXJlLCBEU0RUX1NJRykgfHwKKwkgICAgQUNQSV9DT01QQVJFX05BTUUodGFibGUtPnNpZ25hdHVyZSwgUFNEVF9TSUcpIHx8CisJICAgIEFDUElfQ09NUEFSRV9OQU1FKHRhYmxlLT5zaWduYXR1cmUsIFNTRFRfU0lHKSkgeworCQlyZXR1cm4gKFRSVUUpOworCX0KKworCXJldHVybiAoRkFMU0UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FsbG9jYXRlX293bmVyX2lkCiAgKgogICogUEFSQU1FVEVSUzogIG93bmVyX2lkICAgICAgICAtIFdoZXJlIHRoZSBuZXcgb3duZXIgSUQgaXMgcmV0dXJuZWQKQEAgLTYwLDYgKzg3LDcgQEAKICAqICAgICAgICAgICAgICB3aGVuIHRoZSBtZXRob2QgZXhpdHMgb3IgdGhlIHRhYmxlIGlzIHVubG9hZGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIGFjcGlfc3RhdHVzIGFjcGlfdXRfYWxsb2NhdGVfb3duZXJfaWQoYWNwaV9vd25lcl9pZCAqIG93bmVyX2lkKQogewogCWFjcGlfbmF0aXZlX3VpbnQgaTsKQEAgLTY3LDcgKzk1LDcgQEAKIAlhY3BpX25hdGl2ZV91aW50IGs7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfYWxsb2NhdGVfb3duZXJfaWQiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2FsbG9jYXRlX293bmVyX2lkKTsKIAogCS8qIEd1YXJkIGFnYWluc3QgbXVsdGlwbGUgYWxsb2NhdGlvbnMgb2YgSUQgdG8gdGhlIHNhbWUgbG9jYXRpb24gKi8KIApAQCAtOTcsNiArMTI1LDcgQEAKIAogCQlmb3IgKGsgPSBhY3BpX2dibF9uZXh0X293bmVyX2lkX29mZnNldDsgayA8IDMyOyBrKyspIHsKIAkJCWlmIChhY3BpX2dibF9vd25lcl9pZF9tYXNrW2pdID09IEFDUElfVUlOVDMyX01BWCkgeworCiAJCQkJLyogVGhlcmUgYXJlIG5vIGZyZWUgSURzIGluIHRoaXMgbWFzayAqLwogCiAJCQkJYnJlYWs7CkBAIC0xMjMsNyArMTUyLDcgQEAKIAkJCQkgICAgKGFjcGlfb3duZXJfaWQpICgoayArIDEpICsgQUNQSV9NVUxfMzIoaikpOwogCiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9WQUxVRVMsCi0JCQkJCQkgICJBbGxvY2F0ZWQgb3duZXJfaWQ6ICUyLjJYXG4iLAorCQkJCQkJICAiQWxsb2NhdGVkIE93bmVySWQ6ICUyLjJYXG4iLAogCQkJCQkJICAodW5zaWduZWQgaW50KSpvd25lcl9pZCkpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KQEAgLTE0NCw3ICsxNzMsNyBAQAogCSAqLwogCXN0YXR1cyA9IEFFX09XTkVSX0lEX0xJTUlUOwogCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIG5ldyBvd25lcl9pZCAoMjU1IG1heCksIEFFX09XTkVSX0lEX0xJTUlUIikpOworCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgT3duZXJJZCAoMjU1IG1heCksIEFFX09XTkVSX0lEX0xJTUlUIikpOwogCiAgICAgICBleGl0OgogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9DQUNIRVMpOwpAQCAtMTcyLDcgKzIwMSw3IEBACiAJYWNwaV9uYXRpdmVfdWludCBpbmRleDsKIAl1MzIgYml0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoInV0X3JlbGVhc2Vfb3duZXJfaWQiLCBvd25lcl9pZCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfcmVsZWFzZV9vd25lcl9pZCwgb3duZXJfaWQpOwogCiAJLyogQWx3YXlzIGNsZWFyIHRoZSBpbnB1dCBvd25lcl9pZCAoemVybyBpcyBhbiBpbnZhbGlkIElEKSAqLwogCkBAIC0xODEsNyArMjEwLDcgQEAKIAkvKiBaZXJvIGlzIG5vdCBhIHZhbGlkIG93bmVyX2lEICovCiAKIAlpZiAob3duZXJfaWQgPT0gMCkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBvd25lcl9pZDogJTIuMlgiLCBvd25lcl9pZCkpOworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBPd25lcklkOiAlMi4yWCIsIG93bmVyX2lkKSk7CiAJCXJldHVybl9WT0lEOwogCX0KIApAQCAtMjA3LDcgKzIzNiw3IEBACiAJCWFjcGlfZ2JsX293bmVyX2lkX21hc2tbaW5kZXhdIF49IGJpdDsKIAl9IGVsc2UgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJSZWxlYXNlIG9mIG5vbi1hbGxvY2F0ZWQgb3duZXJfaWQ6ICUyLjJYIiwKKwkJCSAgICAiUmVsZWFzZSBvZiBub24tYWxsb2NhdGVkIE93bmVySWQ6ICUyLjJYIiwKIAkJCSAgICBvd25lcl9pZCArIDEpKTsKIAl9CiAKQEAgLTI3Myw2ICszMDIsNyBAQAogCiAJYWNwaV9vc19wcmludGYoIlwiIik7CiAJZm9yIChpID0gMDsgc3RyaW5nW2ldICYmIChpIDwgbWF4X2xlbmd0aCk7IGkrKykgeworCiAJCS8qIEVzY2FwZSBzZXF1ZW5jZXMgKi8KIAogCQlzd2l0Y2ggKHN0cmluZ1tpXSkgewpAQCAtNDYxLDEyICs0OTEsNDcgQEAKIAl9CiAJYWNwaV9vc19wcmludGYoIlxuIik7CiAKLQlBQ1BJX01FTV9GUkVFKGJ1ZmZlci5wb2ludGVyKTsKKwlBQ1BJX0ZSRUUoYnVmZmVyLnBvaW50ZXIpOwogfQogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyCisgKgorICogUEFSQU1FVEVSUzogIENoYXIgICAgICAgICAgICAtIFRoZSBjaGFyYWN0ZXIgdG8gYmUgZXhhbWluZWQKKyAqCisgKiBSRVRVUk46ICAgICAgVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGlzIHZhbGlkLCBGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBERVNDUklQVElPTjogQ2hlY2sgZm9yIGEgdmFsaWQgQUNQSSBjaGFyYWN0ZXIuIE11c3QgYmUgb25lIG9mOgorICogICAgICAgICAgICAgIDEpIFVwcGVyIGNhc2UgYWxwaGEKKyAqICAgICAgICAgICAgICAyKSBudW1lcmljCisgKiAgICAgICAgICAgICAgMykgdW5kZXJzY29yZQorICoKKyAqICAgICAgICAgICAgICBXZSBhbGxvdyBhICchJyBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgYmVjYXVzZSBvZiB0aGUgQVNGISB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3U4IGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyKGNoYXIgY2hhcmFjdGVyLCBhY3BpX25hdGl2ZV91aW50IHBvc2l0aW9uKQoreworCisJaWYgKCEoKGNoYXJhY3RlciA+PSAnQScgJiYgY2hhcmFjdGVyIDw9ICdaJykgfHwKKwkgICAgICAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzknKSB8fCAoY2hhcmFjdGVyID09ICdfJykpKSB7CisKKwkJLyogQWxsb3cgYSAnIScgaW4gdGhlIGxhc3QgcG9zaXRpb24gKi8KKworCQlpZiAoY2hhcmFjdGVyID09ICchJyAmJiBwb3NpdGlvbiA9PSAzKSB7CisJCQlyZXR1cm4gKFRSVUUpOworCQl9CisKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCisJcmV0dXJuIChUUlVFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZF9hY3BpX25hbWUKICAqCiAgKiBQQVJBTUVURVJTOiAgTmFtZSAgICAgICAgICAgIC0gVGhlIG5hbWUgdG8gYmUgZXhhbWluZWQKQEAgLTQ4MiwxOSArNTQ3LDEzIEBACiAKIHU4IGFjcGlfdXRfdmFsaWRfYWNwaV9uYW1lKHUzMiBuYW1lKQogewotCWNoYXIgKm5hbWVfcHRyID0gKGNoYXIgKikmbmFtZTsKLQljaGFyIGNoYXJhY3RlcjsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OQU1FX1NJWkU7IGkrKykgewotCQljaGFyYWN0ZXIgPSAqbmFtZV9wdHI7Ci0JCW5hbWVfcHRyKys7Ci0KLQkJaWYgKCEoKGNoYXJhY3RlciA9PSAnXycpIHx8Ci0JCSAgICAgIChjaGFyYWN0ZXIgPj0gJ0EnICYmIGNoYXJhY3RlciA8PSAnWicpIHx8Ci0JCSAgICAgIChjaGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnOScpKSkgeworCQlpZiAoIWFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyCisJCSAgICAoKEFDUElfQ0FTVF9QVFIoY2hhciwgJm5hbWUpKVtpXSwgaSkpIHsKIAkJCXJldHVybiAoRkFMU0UpOwogCQl9CiAJfQpAQCAtNTA0LDI0ICs1NjMsMzcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZF9hY3BpX2NoYXJhY3RlcgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfcmVwYWlyX25hbWUKICAqCi0gKiBQQVJBTUVURVJTOiAgQ2hhcmFjdGVyICAgICAgICAgICAtIFRoZSBjaGFyYWN0ZXIgdG8gYmUgZXhhbWluZWQKKyAqIFBBUkFNRVRFUlM6ICBOYW1lICAgICAgICAgICAgLSBUaGUgQUNQSSBuYW1lIHRvIGJlIHJlcGFpcmVkCiAgKgotICogUkVUVVJOOiAgICAgIDEgaWYgQ2hhcmFjdGVyIG1heSBhcHBlYXIgaW4gYSBuYW1lLCBlbHNlIDAKKyAqIFJFVFVSTjogICAgICBSZXBhaXJlZCB2ZXJzaW9uIG9mIHRoZSBuYW1lCiAgKgotICogREVTQ1JJUFRJT046IENoZWNrIGZvciBhIHByaW50YWJsZSBjaGFyYWN0ZXIKKyAqIERFU0NSSVBUSU9OOiBSZXBhaXIgYW4gQUNQSSBuYW1lOiBDaGFuZ2UgaW52YWxpZCBjaGFyYWN0ZXJzIHRvICcqJyBhbmQKKyAqICAgICAgICAgICAgICByZXR1cm4gdGhlIG5ldyBuYW1lLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXU4IGFjcGlfdXRfdmFsaWRfYWNwaV9jaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIpCithY3BpX25hbWUgYWNwaV91dF9yZXBhaXJfbmFtZShhY3BpX25hbWUgbmFtZSkKIHsKKwljaGFyICpuYW1lX3B0ciA9IEFDUElfQ0FTVF9QVFIoY2hhciwgJm5hbWUpOworCWNoYXIgbmV3X25hbWVbQUNQSV9OQU1FX1NJWkVdOworCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OQU1FX1NJWkU7IGkrKykgeworCQluZXdfbmFtZVtpXSA9IG5hbWVfcHRyW2ldOwogCi0JcmV0dXJuICgodTgpICgoY2hhcmFjdGVyID09ICdfJykgfHwKLQkJICAgICAgKGNoYXJhY3RlciA+PSAnQScgJiYgY2hhcmFjdGVyIDw9ICdaJykgfHwKLQkJICAgICAgKGNoYXJhY3RlciA+PSAnMCcgJiYgY2hhcmFjdGVyIDw9ICc5JykpKTsKKwkJLyoKKwkJICogUmVwbGFjZSBhIGJhZCBjaGFyYWN0ZXIgd2l0aCBzb21ldGhpbmcgcHJpbnRhYmxlLCB5ZXQgdGVjaG5pY2FsbHkKKwkJICogc3RpbGwgaW52YWxpZC4gVGhpcyBwcmV2ZW50cyBhbnkgY29sbGlzaW9ucyB3aXRoIGV4aXN0aW5nICJnb29kIgorCQkgKiBuYW1lcyBpbiB0aGUgbmFtZXNwYWNlLgorCQkgKi8KKwkJaWYgKCFhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcihuYW1lX3B0cltpXSwgaSkpIHsKKwkJCW5ld19uYW1lW2ldID0gJyonOworCQl9CisJfQorCisJcmV0dXJuICgqQUNQSV9DQVNUX1BUUih1MzIsIG5ld19uYW1lKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MjksNyArNjAxLDggQEAKICAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3N0cnRvdWw2NAogICoKICAqIFBBUkFNRVRFUlM6ICBTdHJpbmcgICAgICAgICAgLSBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nCi0gKiAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgIC0gUmFkaXggb2YgdGhlIHN0cmluZzogMTAsIDE2LCBvciBBQ1BJX0FOWV9CQVNFCisgKiAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgIC0gUmFkaXggb2YgdGhlIHN0cmluZzogMTYgb3IgQUNQSV9BTllfQkFTRTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0FOWV9CQVNFIG1lYW5zICdpbiBiZWhhbGYgb2YgdG9faW50ZWdlcicKICAqICAgICAgICAgICAgICByZXRfaW50ZWdlciAgICAgLSBXaGVyZSB0aGUgY29udmVydGVkIGludGVnZXIgaXMgcmV0dXJuZWQKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCBDb252ZXJ0ZWQgdmFsdWUKQEAgLTU0NSwxNiArNjE4LDE3IEBACiAJdTMyIHRoaXNfZGlnaXQgPSAwOwogCWFjcGlfaW50ZWdlciByZXR1cm5fdmFsdWUgPSAwOwogCWFjcGlfaW50ZWdlciBxdW90aWVudDsKKwlhY3BpX2ludGVnZXIgZGl2aWRlbmQ7CisJdTMyIHRvX2ludGVnZXJfb3AgPSAoYmFzZSA9PSBBQ1BJX0FOWV9CQVNFKTsKKwl1MzIgbW9kZTMyID0gKGFjcGlfZ2JsX2ludGVnZXJfYnl0ZV93aWR0aCA9PSA0KTsKKwl1OCB2YWxpZF9kaWdpdHMgPSAwOworCXU4IHNpZ25fb2YweCA9IDA7CisJdTggdGVybSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9zdHJvdWw2NCIpOwotCi0JaWYgKCghc3RyaW5nKSB8fCAhKCpzdHJpbmcpKSB7Ci0JCWdvdG8gZXJyb3JfZXhpdDsKLQl9CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9zdHJvdWw2NCk7CiAKIAlzd2l0Y2ggKGJhc2UpIHsKIAljYXNlIEFDUElfQU5ZX0JBU0U6Ci0JY2FzZSAxMDoKIAljYXNlIDE2OgogCQlicmVhazsKIApAQCAtNTYzLDc2ICs2MzcsMTEwIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKKwlpZiAoIXN0cmluZykgeworCQlnb3RvIGVycm9yX2V4aXQ7CisJfQorCiAJLyogU2tpcCBvdmVyIGFueSB3aGl0ZSBzcGFjZSBpbiB0aGUgYnVmZmVyICovCiAKLQl3aGlsZSAoQUNQSV9JU19TUEFDRSgqc3RyaW5nKSB8fCAqc3RyaW5nID09ICdcdCcpIHsKKwl3aGlsZSAoKCpzdHJpbmcpICYmIChBQ1BJX0lTX1NQQUNFKCpzdHJpbmcpIHx8ICpzdHJpbmcgPT0gJ1x0JykpIHsKIAkJc3RyaW5nKys7CiAJfQogCi0JLyoKLQkgKiBJZiB0aGUgaW5wdXQgcGFyYW1ldGVyIEJhc2UgaXMgemVybywgdGhlbiB3ZSBuZWVkIHRvCi0JICogZGV0ZXJtaW5lIGlmIGl0IGlzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWw6Ci0JICovCi0JaWYgKGJhc2UgPT0gMCkgeworCWlmICh0b19pbnRlZ2VyX29wKSB7CisJCS8qCisJCSAqIEJhc2UgZXF1YWwgdG8gQUNQSV9BTllfQkFTRSBtZWFucyAndG9faW50ZWdlciBvcGVyYXRpb24gY2FzZScuCisJCSAqIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwuCisJCSAqLwogCQlpZiAoKCpzdHJpbmcgPT0gJzAnKSAmJiAoQUNQSV9UT0xPV0VSKCooc3RyaW5nICsgMSkpID09ICd4JykpIHsKKwkJCXNpZ25fb2YweCA9IDE7CiAJCQliYXNlID0gMTY7CisKKwkJCS8qIFNraXAgb3ZlciB0aGUgbGVhZGluZyAnMHgnICovCiAJCQlzdHJpbmcgKz0gMjsKIAkJfSBlbHNlIHsKIAkJCWJhc2UgPSAxMDsKIAkJfQogCX0KIAotCS8qCi0JICogRm9yIGhleGFkZWNpbWFsIGJhc2UsIHNraXAgb3ZlciB0aGUgbGVhZGluZwotCSAqIDAgb3IgMHgsIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0JICovCi0JaWYgKChiYXNlID09IDE2KSAmJgotCSAgICAoKnN0cmluZyA9PSAnMCcpICYmIChBQ1BJX1RPTE9XRVIoKihzdHJpbmcgKyAxKSkgPT0gJ3gnKSkgewotCQlzdHJpbmcgKz0gMjsKKwkvKiBBbnkgc3RyaW5nIGxlZnQ/IENoZWNrIHRoYXQgJzB4JyBpcyBub3QgZm9sbG93ZWQgYnkgd2hpdGUgc3BhY2UuICovCisKKwlpZiAoISgqc3RyaW5nKSB8fCBBQ1BJX0lTX1NQQUNFKCpzdHJpbmcpIHx8ICpzdHJpbmcgPT0gJ1x0JykgeworCQlpZiAodG9faW50ZWdlcl9vcCkgeworCQkJZ290byBlcnJvcl9leGl0OworCQl9IGVsc2UgeworCQkJZ290byBhbGxfZG9uZTsKKwkJfQogCX0KIAotCS8qIEFueSBzdHJpbmcgbGVmdD8gKi8KKwlkaXZpZGVuZCA9IChtb2RlMzIpID8gQUNQSV9VSU5UMzJfTUFYIDogQUNQSV9VSU5UNjRfTUFYOwogCi0JaWYgKCEoKnN0cmluZykpIHsKLQkJZ290byBlcnJvcl9leGl0OwotCX0KKwkvKiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaGVyZSAqLwogCiAJLyogTWFpbiBsb29wOiBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gYSA2NC1iaXQgaW50ZWdlciAqLwogCiAJd2hpbGUgKCpzdHJpbmcpIHsKIAkJaWYgKEFDUElfSVNfRElHSVQoKnN0cmluZykpIHsKKwogCQkJLyogQ29udmVydCBBU0NJSSAwLTkgdG8gRGVjaW1hbCB2YWx1ZSAqLwogCiAJCQl0aGlzX2RpZ2l0ID0gKCh1OCkgKiBzdHJpbmcpIC0gJzAnOworCQl9IGVsc2UgaWYgKGJhc2UgPT0gMTApIHsKKworCQkJLyogRGlnaXQgaXMgb3V0IG9mIHJhbmdlOyBwb3NzaWJsZSBpbiB0b19pbnRlZ2VyIGNhc2Ugb25seSAqLworCisJCQl0ZXJtID0gMTsKIAkJfSBlbHNlIHsKLQkJCWlmIChiYXNlID09IDEwKSB7Ci0JCQkJLyogRGlnaXQgaXMgb3V0IG9mIHJhbmdlICovCi0KLQkJCQlnb3RvIGVycm9yX2V4aXQ7Ci0JCQl9Ci0KIAkJCXRoaXNfZGlnaXQgPSAodTgpIEFDUElfVE9VUFBFUigqc3RyaW5nKTsKIAkJCWlmIChBQ1BJX0lTX1hESUdJVCgoY2hhcil0aGlzX2RpZ2l0KSkgeworCiAJCQkJLyogQ29udmVydCBBU0NJSSBIZXggY2hhciB0byB2YWx1ZSAqLwogCiAJCQkJdGhpc19kaWdpdCA9IHRoaXNfZGlnaXQgLSAnQScgKyAxMDsKIAkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSBhbGxvdyBub24taGV4IGNoYXJzLCBqdXN0IHN0b3Agbm93LCBzYW1lIGFzIGVuZC1vZi1zdHJpbmcuCi0JCQkJICogU2VlIEFDUEkgc3BlYywgc3RyaW5nLXRvLWludGVnZXIgY29udmVyc2lvbi4KLQkJCQkgKi8KKwkJCQl0ZXJtID0gMTsKKwkJCX0KKwkJfQorCisJCWlmICh0ZXJtKSB7CisJCQlpZiAodG9faW50ZWdlcl9vcCkgeworCQkJCWdvdG8gZXJyb3JfZXhpdDsKKwkJCX0gZWxzZSB7CiAJCQkJYnJlYWs7CiAJCQl9CisJCX0gZWxzZSBpZiAoKHZhbGlkX2RpZ2l0cyA9PSAwKSAmJiAodGhpc19kaWdpdCA9PSAwKQorCQkJICAgJiYgIXNpZ25fb2YweCkgeworCisJCQkvKiBTa2lwIHplcm9zICovCisJCQlzdHJpbmcrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFsaWRfZGlnaXRzKys7CisKKwkJaWYgKHNpZ25fb2YweAorCQkgICAgJiYgKCh2YWxpZF9kaWdpdHMgPiAxNikKKwkJCXx8ICgodmFsaWRfZGlnaXRzID4gOCkgJiYgbW9kZTMyKSkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRvX2ludGVnZXIgb3BlcmF0aW9uIGNhc2UuCisJCQkgKiBObyBhbnkgcmVzdHJpY3Rpb25zIGZvciBzdHJpbmctdG8taW50ZWdlciBjb252ZXJzaW9uLAorCQkJICogc2VlIEFDUEkgc3BlYy4KKwkJCSAqLworCQkJZ290byBlcnJvcl9leGl0OwogCQl9CiAKIAkJLyogRGl2aWRlIHRoZSBkaWdpdCBpbnRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uICovCiAKIAkJKHZvaWQpCi0JCSAgICBhY3BpX3V0X3Nob3J0X2RpdmlkZSgoQUNQSV9JTlRFR0VSX01BWCAtCi0JCQkJCSAgKGFjcGlfaW50ZWdlcikgdGhpc19kaWdpdCksIGJhc2UsCi0JCQkJCSAmcXVvdGllbnQsIE5VTEwpOworCQkgICAgYWNwaV91dF9zaG9ydF9kaXZpZGUoKGRpdmlkZW5kIC0gKGFjcGlfaW50ZWdlcikgdGhpc19kaWdpdCksCisJCQkJCSBiYXNlLCAmcXVvdGllbnQsIE5VTEwpOworCiAJCWlmIChyZXR1cm5fdmFsdWUgPiBxdW90aWVudCkgewotCQkJZ290byBlcnJvcl9leGl0OworCQkJaWYgKHRvX2ludGVnZXJfb3ApIHsKKwkJCQlnb3RvIGVycm9yX2V4aXQ7CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQogCQl9CiAKIAkJcmV0dXJuX3ZhbHVlICo9IGJhc2U7CkBAIC02NDIsNiArNzUwLDggQEAKIAogCS8qIEFsbCBkb25lLCBub3JtYWwgZXhpdCAqLwogCisgICAgICBhbGxfZG9uZToKKwogCSpyZXRfaW50ZWdlciA9IHJldHVybl92YWx1ZTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCkBAIC03MTksNyArODI5LDcgQEAKIAl1MzIgdGhpc19pbmRleDsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICp0aGlzX3NvdXJjZV9vYmo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF93YWxrX3BhY2thZ2VfdHJlZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfd2Fsa19wYWNrYWdlX3RyZWUpOwogCiAJc3RhdGUgPSBhY3BpX3V0X2NyZWF0ZV9wa2dfc3RhdGUoc291cmNlX29iamVjdCwgdGFyZ2V0X29iamVjdCwgMCk7CiAJaWYgKCFzdGF0ZSkgewpAQCAtNzI3LDYgKzgzNyw3IEBACiAJfQogCiAJd2hpbGUgKHN0YXRlKSB7CisKIAkJLyogR2V0IG9uZSBlbGVtZW50IG9mIHRoZSBwYWNrYWdlICovCiAKIAkJdGhpc19pbmRleCA9IHN0YXRlLT5wa2cuaW5kZXg7CkBAIC04MTQsMzEgKzkyNSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZ2VuZXJhdGVfY2hlY2tzdW0KLSAqCi0gKiBQQVJBTUVURVJTOiAgQnVmZmVyICAgICAgICAgIC0gQnVmZmVyIHRvIGJlIHNjYW5uZWQKLSAqICAgICAgICAgICAgICBMZW5ndGggICAgICAgICAgLSBudW1iZXIgb2YgYnl0ZXMgdG8gZXhhbWluZQotICoKLSAqIFJFVFVSTjogICAgICBUaGUgZ2VuZXJhdGVkIGNoZWNrc3VtCi0gKgotICogREVTQ1JJUFRJT046IEdlbmVyYXRlIGEgY2hlY2tzdW0gb24gYSByYXcgYnVmZmVyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdTggYWNwaV91dF9nZW5lcmF0ZV9jaGVja3N1bSh1OCAqIGJ1ZmZlciwgdTMyIGxlbmd0aCkKLXsKLQl1MzIgaTsKLQlzaWduZWQgY2hhciBzdW0gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCXN1bSA9IChzaWduZWQgY2hhcikoc3VtICsgYnVmZmVyW2ldKTsKLQl9Ci0KLQlyZXR1cm4gKCh1OCkgKDAgLSBzdW0pKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9lcnJvciwgYWNwaV91dF93YXJuaW5nLCBhY3BpX3V0X2luZm8KICAqCiAgKiBQQVJBTUVURVJTOiAgbW9kdWxlX25hbWUgICAgICAgICAtIENhbGxlcidzIG1vZHVsZSBuYW1lIChmb3IgZXJyb3Igb3V0cHV0KQpAQCAtOTAwLDM2ICs5ODYsMyBAQAogCWFjcGlfb3NfdnByaW50Zihmb3JtYXQsIGFyZ3MpOwogCWFjcGlfb3NfcHJpbnRmKCIgWyVYXVxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKIH0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF9yZXBvcnRfZXJyb3IsIFdhcm5pbmcsIEluZm8KLSAqCi0gKiBQQVJBTUVURVJTOiAgbW9kdWxlX25hbWUgICAgICAgICAtIENhbGxlcidzIG1vZHVsZSBuYW1lIChmb3IgZXJyb3Igb3V0cHV0KQotICogICAgICAgICAgICAgIGxpbmVfbnVtYmVyICAgICAgICAgLSBDYWxsZXIncyBsaW5lIG51bWJlciAoZm9yIGVycm9yIG91dHB1dCkKLSAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQotICoKLSAqIERFU0NSSVBUSU9OOiBQcmludCBlcnJvciBtZXNzYWdlCi0gKgotICogTm90ZTogTGVnYWN5IG9ubHksIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgZHJpdmVycy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGFjcGlfdXRfcmVwb3J0X2Vycm9yKGNoYXIgKm1vZHVsZV9uYW1lLCB1MzIgbGluZV9udW1iZXIpCi17Ci0KLQlhY3BpX29zX3ByaW50ZigiQUNQSSBFcnJvciAoJXMtJTA0ZCk6ICIsIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcik7Ci19Ci0KLXZvaWQgYWNwaV91dF9yZXBvcnRfd2FybmluZyhjaGFyICptb2R1bGVfbmFtZSwgdTMyIGxpbmVfbnVtYmVyKQotewotCi0JYWNwaV9vc19wcmludGYoIkFDUEkgV2FybmluZyAoJXMtJTA0ZCk6ICIsIG1vZHVsZV9uYW1lLCBsaW5lX251bWJlcik7Ci19Ci0KLXZvaWQgYWNwaV91dF9yZXBvcnRfaW5mbyhjaGFyICptb2R1bGVfbmFtZSwgdTMyIGxpbmVfbnVtYmVyKQotewotCi0JYWNwaV9vc19wcmludGYoIkFDUEkgKCVzLSUwNGQpOiAiLCBtb2R1bGVfbmFtZSwgbGluZV9udW1iZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwppbmRleCA0NWE3MjQ0Li4yNWViMzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwpAQCAtNjgsMTkgKzY4LDI2IEBACiAJdTMyIGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfbXV0ZXhfaW5pdGlhbGl6ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfbXV0ZXhfaW5pdGlhbGl6ZSk7CiAKIAkvKgogCSAqIENyZWF0ZSBlYWNoIG9mIHRoZSBwcmVkZWZpbmVkIG11dGV4IG9iamVjdHMKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX01VVEVYOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fTVVURVg7IGkrKykgewogCQlzdGF0dXMgPSBhY3BpX3V0X2NyZWF0ZV9tdXRleChpKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCX0KIAorCS8qIENyZWF0ZSB0aGUgc3BpbmxvY2tzIGZvciB1c2UgYXQgaW50ZXJydXB0IGxldmVsICovCisKIAlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9sb2NrKCZhY3BpX2dibF9ncGVfbG9jayk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX2xvY2soJmFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0xMDAsMTYgKzEwNywxOSBAQAogewogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfbXV0ZXhfdGVybWluYXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9tdXRleF90ZXJtaW5hdGUpOwogCiAJLyoKIAkgKiBEZWxldGUgZWFjaCBwcmVkZWZpbmVkIG11dGV4IG9iamVjdAogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fTVVURVg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9NVVRFWDsgaSsrKSB7CiAJCSh2b2lkKWFjcGlfdXRfZGVsZXRlX211dGV4KGkpOwogCX0KIAorCS8qIERlbGV0ZSB0aGUgc3BpbmxvY2tzICovCisKIAlhY3BpX29zX2RlbGV0ZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKKwlhY3BpX29zX2RlbGV0ZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCXJldHVybl9WT0lEOwogfQogCkBAIC0xMjksOSArMTM5LDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJ1dF9jcmVhdGVfbXV0ZXgiLCBtdXRleF9pZCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfY3JlYXRlX211dGV4LCBtdXRleF9pZCk7CiAKLQlpZiAobXV0ZXhfaWQgPiBNQVhfTVVURVgpIHsKKwlpZiAobXV0ZXhfaWQgPiBBQ1BJX01BWF9NVVRFWCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCkBAIC0xNjMsOSArMTczLDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigidXRfZGVsZXRlX211dGV4IiwgbXV0ZXhfaWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHV0X2RlbGV0ZV9tdXRleCwgbXV0ZXhfaWQpOwogCi0JaWYgKG11dGV4X2lkID4gTUFYX01VVEVYKSB7CisJaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIApAQCAtMTkyLDExICsyMDIsMTEgQEAKIGFjcGlfc3RhdHVzIGFjcGlfdXRfYWNxdWlyZV9tdXRleChhY3BpX211dGV4X2hhbmRsZSBtdXRleF9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIHRoaXNfdGhyZWFkX2lkOworCWFjcGlfdGhyZWFkX2lkIHRoaXNfdGhyZWFkX2lkOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJ1dF9hY3F1aXJlX211dGV4Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X2FjcXVpcmVfbXV0ZXgpOwogCi0JaWYgKG11dGV4X2lkID4gTUFYX01VVEVYKSB7CisJaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKQEAgLTIxMyw3ICsyMjMsNyBAQAogCQkgKiB0aGUgbXV0ZXggb3JkZXJpbmcgcnVsZS4gIFRoaXMgaW5kaWNhdGVzIGEgY29kaW5nIGVycm9yIHNvbWV3aGVyZSBpbgogCQkgKiB0aGUgQUNQSSBzdWJzeXN0ZW0gY29kZS4KIAkJICovCi0JCWZvciAoaSA9IG11dGV4X2lkOyBpIDwgTUFYX01VVEVYOyBpKyspIHsKKwkJZm9yIChpID0gbXV0ZXhfaWQ7IGkgPCBBQ1BJX01BWF9NVVRFWDsgaSsrKSB7CiAJCQlpZiAoYWNwaV9nYmxfbXV0ZXhfaW5mb1tpXS50aHJlYWRfaWQgPT0gdGhpc190aHJlYWRfaWQpIHsKIAkJCQlpZiAoaSA9PSBtdXRleF9pZCkgewogCQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLApAQCAtMjc1LDE2ICsyODUsMTYgQEAKIGFjcGlfc3RhdHVzIGFjcGlfdXRfcmVsZWFzZV9tdXRleChhY3BpX211dGV4X2hhbmRsZSBtdXRleF9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIHRoaXNfdGhyZWFkX2lkOworCWFjcGlfdGhyZWFkX2lkIHRoaXNfdGhyZWFkX2lkOwogCi0JQUNQSV9GVU5DVElPTl9OQU1FKCJ1dF9yZWxlYXNlX211dGV4Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X3JlbGVhc2VfbXV0ZXgpOwogCiAJdGhpc190aHJlYWRfaWQgPSBhY3BpX29zX2dldF90aHJlYWRfaWQoKTsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLAogCQkJICAiVGhyZWFkICVYIHJlbGVhc2luZyBNdXRleCBbJXNdXG4iLCB0aGlzX3RocmVhZF9pZCwKIAkJCSAgYWNwaV91dF9nZXRfbXV0ZXhfbmFtZShtdXRleF9pZCkpKTsKIAotCWlmIChtdXRleF9pZCA+IE1BWF9NVVRFWCkgeworCWlmIChtdXRleF9pZCA+IEFDUElfTUFYX01VVEVYKSB7CiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCkBAIC0zMDksNyArMzE5LDcgQEAKIAkJICogb3JkZXJpbmcgcnVsZS4gIFRoaXMgaW5kaWNhdGVzIGEgY29kaW5nIGVycm9yIHNvbWV3aGVyZSBpbgogCQkgKiB0aGUgQUNQSSBzdWJzeXN0ZW0gY29kZS4KIAkJICovCi0JCWZvciAoaSA9IG11dGV4X2lkOyBpIDwgTUFYX01VVEVYOyBpKyspIHsKKwkJZm9yIChpID0gbXV0ZXhfaWQ7IGkgPCBBQ1BJX01BWF9NVVRFWDsgaSsrKSB7CiAJCQlpZiAoYWNwaV9nYmxfbXV0ZXhfaW5mb1tpXS50aHJlYWRfaWQgPT0gdGhpc190aHJlYWRfaWQpIHsKIAkJCQlpZiAoaSA9PSBtdXRleF9pZCkgewogCQkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYwppbmRleCA3ZWUyZDFkLi5iYTdkOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0b2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG9iamVjdC5jCkBAIC05Miw3ICs5Miw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0OwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnNlY29uZF9vYmplY3Q7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUigidXRfY3JlYXRlX2ludGVybmFsX29iamVjdF9kYmciLAorCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKHV0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3RfZGJnLAogCQkJCWFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgcmF3IG9iamVjdCBkZXNjcmlwdG9yICovCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfZGVzYzsKIAl1OCAqYnVmZmVyID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKCJ1dF9jcmVhdGVfYnVmZmVyX29iamVjdCIsIGJ1ZmZlcl9zaXplKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMih1dF9jcmVhdGVfYnVmZmVyX29iamVjdCwgYnVmZmVyX3NpemUpOwogCiAJLyogQ3JlYXRlIGEgbmV3IEJ1ZmZlciBvYmplY3QgKi8KIApAQCAtMTczLDkgKzE3MywxMCBAQAogCS8qIENyZWF0ZSBhbiBhY3R1YWwgYnVmZmVyIG9ubHkgaWYgc2l6ZSA+IDAgKi8KIAogCWlmIChidWZmZXJfc2l6ZSA+IDApIHsKKwogCQkvKiBBbGxvY2F0ZSB0aGUgYWN0dWFsIGJ1ZmZlciAqLwogCi0JCWJ1ZmZlciA9IEFDUElfTUVNX0NBTExPQ0FURShidWZmZXJfc2l6ZSk7CisJCWJ1ZmZlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKGJ1ZmZlcl9zaXplKTsKIAkJaWYgKCFidWZmZXIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgYWxsb2NhdGUgc2l6ZSAlWCIsCiAJCQkJICAgICh1MzIpIGJ1ZmZlcl9zaXplKSk7CkBAIC0yMTQsNyArMjE1LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzdHJpbmdfZGVzYzsKIAljaGFyICpzdHJpbmc7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMigidXRfY3JlYXRlX3N0cmluZ19vYmplY3QiLCBzdHJpbmdfc2l6ZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfY3JlYXRlX3N0cmluZ19vYmplY3QsIHN0cmluZ19zaXplKTsKIAogCS8qIENyZWF0ZSBhIG5ldyBTdHJpbmcgb2JqZWN0ICovCiAKQEAgLTIyNyw3ICsyMjgsNyBAQAogCSAqIEFsbG9jYXRlIHRoZSBhY3R1YWwgc3RyaW5nIGJ1ZmZlciAtLSAoU2l6ZSArIDEpIGZvciBOVUxMIHRlcm1pbmF0b3IuCiAJICogTk9URTogWmVyby1sZW5ndGggc3RyaW5ncyBhcmUgTlVMTCB0ZXJtaW5hdGVkCiAJICovCi0Jc3RyaW5nID0gQUNQSV9NRU1fQ0FMTE9DQVRFKHN0cmluZ19zaXplICsgMSk7CisJc3RyaW5nID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RyaW5nX3NpemUgKyAxKTsKIAlpZiAoIXN0cmluZykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IGFsbG9jYXRlIHNpemUgJVgiLAogCQkJICAgICh1MzIpIHN0cmluZ19zaXplKSk7CkBAIC0yNjAsNyArMjYxLDcgQEAKIHU4IGFjcGlfdXRfdmFsaWRfaW50ZXJuYWxfb2JqZWN0KHZvaWQgKm9iamVjdCkKIHsKIAotCUFDUElfRlVOQ1RJT05fTkFNRSgidXRfdmFsaWRfaW50ZXJuYWxfb2JqZWN0Iik7CisJQUNQSV9GVU5DVElPTl9OQU1FKHV0X3ZhbGlkX2ludGVybmFsX29iamVjdCk7CiAKIAkvKiBDaGVjayBmb3IgYSBudWxsIHBvaW50ZXIgKi8KIApAQCAtMzA4LDcgKzMwOSw3IEBACiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqZWN0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfYWxsb2NhdGVfb2JqZWN0X2Rlc2NfZGJnIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9hbGxvY2F0ZV9vYmplY3RfZGVzY19kYmcpOwogCiAJb2JqZWN0ID0gYWNwaV9vc19hY3F1aXJlX29iamVjdChhY3BpX2dibF9vcGVyYW5kX2NhY2hlKTsKIAlpZiAoIW9iamVjdCkgewpAQCAtMzE5LDYgKzMyMCw3IEBACiAJfQogCiAJLyogTWFyayB0aGUgZGVzY3JpcHRvciB0eXBlICovCisKIAltZW1zZXQob2JqZWN0LCAwLCBzaXplb2YodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCkpOwogCUFDUElfU0VUX0RFU0NSSVBUT1JfVFlQRShvYmplY3QsIEFDUElfREVTQ19UWVBFX09QRVJBTkQpOwogCkBAIC0zNDIsNyArMzQ0LDcgQEAKIAogdm9pZCBhY3BpX3V0X2RlbGV0ZV9vYmplY3RfZGVzYyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3QpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2RlbGV0ZV9vYmplY3RfZGVzYyIsIG9iamVjdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodXRfZGVsZXRlX29iamVjdF9kZXNjLCBvYmplY3QpOwogCiAJLyogT2JqZWN0IG11c3QgYmUgYW4gdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAqLwogCkBAIC0zODEsNyArMzgzLDcgQEAKIAlhY3BpX3NpemUgbGVuZ3RoOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2dldF9zaW1wbGVfb2JqZWN0X3NpemUiLCBpbnRlcm5hbF9vYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2dldF9zaW1wbGVfb2JqZWN0X3NpemUsIGludGVybmFsX29iamVjdCk7CiAKIAkvKgogCSAqIEhhbmRsZSBhIG51bGwgb2JqZWN0IChDb3VsZCBiZSBhIHVuaW5pdGlhbGl6ZWQgcGFja2FnZQpAQCAtMzk3LDYgKzM5OSw3IEBACiAJbGVuZ3RoID0gc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KTsKIAogCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUoaW50ZXJuYWxfb2JqZWN0KSA9PSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkgeworCiAJCS8qIE9iamVjdCBpcyBhIG5hbWVkIG9iamVjdCAocmVmZXJlbmNlKSwganVzdCByZXR1cm4gdGhlIGxlbmd0aCAqLwogCiAJCSpvYmpfbGVuZ3RoID0gQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRChsZW5ndGgpOwpAQCAtNTU5LDcgKzU2Miw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3BrZ19pbmZvIGluZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfZ2V0X3BhY2thZ2Vfb2JqZWN0X3NpemUiLCBpbnRlcm5hbF9vYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2dldF9wYWNrYWdlX29iamVjdF9zaXplLCBpbnRlcm5hbF9vYmplY3QpOwogCiAJaW5mby5sZW5ndGggPSAwOwogCWluZm8ub2JqZWN0X3NwYWNlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRyZXNyYy5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKaW5kZXggMTY0NjEzMS4uNWEyZGU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKQEAgLTQ1LDExMyArNDUsMTEzIEBACiAjaW5jbHVkZSA8YWNwaS9hbWxyZXNyYy5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9VVElMSVRJRVMKLUFDUElfTU9EVUxFX05BTUUoInV0bWlzYyIpCitBQ1BJX01PRFVMRV9OQU1FKCJ1dHJlc3JjIikKIAogI2lmIGRlZmluZWQoQUNQSV9ESVNBU1NFTUJMRVIpIHx8IGRlZmluZWQgKEFDUElfREVCVUdHRVIpCiAvKgogICogU3RyaW5ncyB1c2VkIHRvIGRlY29kZSByZXNvdXJjZSBkZXNjcmlwdG9ycy4KICAqIFVzZWQgYnkgYm90aCB0aGUgZGlzYXNzc2VtYmxlciBhbmQgdGhlIGRlYnVnZ2VyIHJlc291cmNlIGR1bXAgcm91dGluZXMKICAqLwotY29uc3QgY2hhciAqYWNwaV9nYmxfQk1kZWNvZGVbMl0gPSB7Ci0JIm5vdF9idXNfbWFzdGVyIiwKLQkiYnVzX21hc3RlciIKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX2JtX2RlY29kZVtdID0geworCSJOb3RCdXNNYXN0ZXIiLAorCSJCdXNNYXN0ZXIiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9jb25maWdfZGVjb2RlWzRdID0geworY29uc3QgY2hhciAqYWNwaV9nYmxfY29uZmlnX2RlY29kZVtdID0gewogCSIwIC0gR29vZCBDb25maWd1cmF0aW9uIiwKIAkiMSAtIEFjY2VwdGFibGUgQ29uZmlndXJhdGlvbiIsCiAJIjIgLSBTdWJvcHRpbWFsIENvbmZpZ3VyYXRpb24iLAogCSIzIC0gKioqSW52YWxpZCBDb25maWd1cmF0aW9uKioqIiwKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX2NvbnN1bWVfZGVjb2RlWzJdID0gewotCSJyZXNvdXJjZV9wcm9kdWNlciIsCi0JInJlc291cmNlX2NvbnN1bWVyIgorY29uc3QgY2hhciAqYWNwaV9nYmxfY29uc3VtZV9kZWNvZGVbXSA9IHsKKwkiUmVzb3VyY2VQcm9kdWNlciIsCisJIlJlc291cmNlQ29uc3VtZXIiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9ERUNkZWNvZGVbMl0gPSB7Ci0JInBvc19kZWNvZGUiLAotCSJzdWJfZGVjb2RlIgorY29uc3QgY2hhciAqYWNwaV9nYmxfZGVjX2RlY29kZVtdID0geworCSJQb3NEZWNvZGUiLAorCSJTdWJEZWNvZGUiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9IRWRlY29kZVsyXSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX2hlX2RlY29kZVtdID0gewogCSJMZXZlbCIsCiAJIkVkZ2UiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9pb19kZWNvZGVbMl0gPSB7Citjb25zdCBjaGFyICphY3BpX2dibF9pb19kZWNvZGVbXSA9IHsKIAkiRGVjb2RlMTAiLAogCSJEZWNvZGUxNiIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX0xMZGVjb2RlWzJdID0gewotCSJhY3RpdmVfaGlnaCIsCi0JImFjdGl2ZV9sb3ciCitjb25zdCBjaGFyICphY3BpX2dibF9sbF9kZWNvZGVbXSA9IHsKKwkiQWN0aXZlSGlnaCIsCisJIkFjdGl2ZUxvdyIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX21heF9kZWNvZGVbMl0gPSB7Ci0JIm1heF9ub3RfZml4ZWQiLAotCSJtYXhfZml4ZWQiCitjb25zdCBjaGFyICphY3BpX2dibF9tYXhfZGVjb2RlW10gPSB7CisJIk1heE5vdEZpeGVkIiwKKwkiTWF4Rml4ZWQiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9NRU1kZWNvZGVbNF0gPSB7Ci0JIm5vbl9jYWNoZWFibGUiLAorY29uc3QgY2hhciAqYWNwaV9nYmxfbWVtX2RlY29kZVtdID0geworCSJOb25DYWNoZWFibGUiLAogCSJDYWNoZWFibGUiLAotCSJ3cml0ZV9jb21iaW5pbmciLAorCSJXcml0ZUNvbWJpbmluZyIsCiAJIlByZWZldGNoYWJsZSIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX21pbl9kZWNvZGVbMl0gPSB7Ci0JIm1pbl9ub3RfZml4ZWQiLAotCSJtaW5fZml4ZWQiCitjb25zdCBjaGFyICphY3BpX2dibF9taW5fZGVjb2RlW10gPSB7CisJIk1pbk5vdEZpeGVkIiwKKwkiTWluRml4ZWQiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9NVFBkZWNvZGVbNF0gPSB7Ci0JImFkZHJlc3NfcmFuZ2VfbWVtb3J5IiwKLQkiYWRkcmVzc19yYW5nZV9yZXNlcnZlZCIsCi0JImFkZHJlc3NfcmFuZ2VfYUNQSSIsCi0JImFkZHJlc3NfcmFuZ2VfblZTIgorY29uc3QgY2hhciAqYWNwaV9nYmxfbXRwX2RlY29kZVtdID0geworCSJBZGRyZXNzUmFuZ2VNZW1vcnkiLAorCSJBZGRyZXNzUmFuZ2VSZXNlcnZlZCIsCisJIkFkZHJlc3NSYW5nZUFDUEkiLAorCSJBZGRyZXNzUmFuZ2VOVlMiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9STkdkZWNvZGVbNF0gPSB7Ci0JImludmFsaWRfcmFuZ2VzIiwKLQkibm9uX2lTQW9ubHlfcmFuZ2VzIiwKLQkiSVNBb25seV9yYW5nZXMiLAotCSJlbnRpcmVfcmFuZ2UiCitjb25zdCBjaGFyICphY3BpX2dibF9ybmdfZGVjb2RlW10gPSB7CisJIkludmFsaWRSYW5nZXMiLAorCSJOb25JU0FPbmx5UmFuZ2VzIiwKKwkiSVNBT25seVJhbmdlcyIsCisJIkVudGlyZVJhbmdlIgogfTsKIAotY29uc3QgY2hhciAqYWNwaV9nYmxfUldkZWNvZGVbMl0gPSB7Ci0JInJlYWRfb25seSIsCi0JInJlYWRfd3JpdGUiCitjb25zdCBjaGFyICphY3BpX2dibF9yd19kZWNvZGVbXSA9IHsKKwkiUmVhZE9ubHkiLAorCSJSZWFkV3JpdGUiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9TSFJkZWNvZGVbMl0gPSB7Citjb25zdCBjaGFyICphY3BpX2dibF9zaHJfZGVjb2RlW10gPSB7CiAJIkV4Y2x1c2l2ZSIsCiAJIlNoYXJlZCIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX1NJWmRlY29kZVs0XSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX3Npel9kZWNvZGVbXSA9IHsKIAkiVHJhbnNmZXI4IiwKIAkiVHJhbnNmZXI4XzE2IiwKIAkiVHJhbnNmZXIxNiIsCi0JImludmFsaWRfc2l6ZSIKKwkiSW52YWxpZFNpemUiCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9UUlNkZWNvZGVbMl0gPSB7Ci0JImRlbnNlX3RyYW5zbGF0aW9uIiwKLQkic3BhcnNlX3RyYW5zbGF0aW9uIgorY29uc3QgY2hhciAqYWNwaV9nYmxfdHJzX2RlY29kZVtdID0geworCSJEZW5zZVRyYW5zbGF0aW9uIiwKKwkiU3BhcnNlVHJhbnNsYXRpb24iCiB9OwogCi1jb25zdCBjaGFyICphY3BpX2dibF9UVFBkZWNvZGVbMl0gPSB7Ci0JInR5cGVfc3RhdGljIiwKLQkidHlwZV90cmFuc2xhdGlvbiIKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX3R0cF9kZWNvZGVbXSA9IHsKKwkiVHlwZVN0YXRpYyIsCisJIlR5cGVUcmFuc2xhdGlvbiIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX1RZUGRlY29kZVs0XSA9IHsKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX3R5cF9kZWNvZGVbXSA9IHsKIAkiQ29tcGF0aWJpbGl0eSIsCi0JInR5cGVfYSIsCi0JInR5cGVfYiIsCi0JInR5cGVfZiIKKwkiVHlwZUEiLAorCSJUeXBlQiIsCisJIlR5cGVGIgogfTsKIAogI2VuZGlmCkBAIC0yNDAsNiArMjQwLDEwNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X3dhbGtfYW1sX3Jlc291cmNlcworICoKKyAqIFBBUkFNRVRFUlM6ICBBbWwgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSByYXcgQU1MIHJlc291cmNlIHRlbXBsYXRlCisgKiAgICAgICAgICAgICAgYW1sX2xlbmd0aCAgICAgIC0gTGVuZ3RoIG9mIHRoZSBlbnRpcmUgdGVtcGxhdGUKKyAqICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgLSBDYWxsZWQgb25jZSBmb3IgZWFjaCBkZXNjcmlwdG9yIGZvdW5kLiBJZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGEgcG9pbnRlciB0byB0aGUgZW5kX3RhZyBpcyByZXR1cm5lZAorICogICAgICAgICAgICAgIENvbnRleHQgICAgICAgICAtIFBhc3NlZCB0byB1c2VyX2Z1bmN0aW9uCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBXYWxrIGEgcmF3IEFNTCByZXNvdXJjZSBsaXN0KGJ1ZmZlcikuIFVzZXIgZnVuY3Rpb24gY2FsbGVkCisgKiAgICAgICAgICAgICAgb25jZSBmb3IgZWFjaCByZXNvdXJjZSBmb3VuZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV91dF93YWxrX2FtbF9yZXNvdXJjZXModTggKiBhbWwsCisJCQkgICBhY3BpX3NpemUgYW1sX2xlbmd0aCwKKwkJCSAgIGFjcGlfd2Fsa19hbWxfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbiwgdm9pZCAqKmNvbnRleHQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXU4ICplbmRfYW1sOworCXU4IHJlc291cmNlX2luZGV4OworCXUzMiBsZW5ndGg7CisJdTMyIG9mZnNldCA9IDA7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3dhbGtfYW1sX3Jlc291cmNlcyk7CisKKwkvKiBUaGUgYWJzb2x1dGUgbWluaW11bSByZXNvdXJjZSB0ZW1wbGF0ZSBpcyBvbmUgZW5kX3RhZyBkZXNjcmlwdG9yICovCisKKwlpZiAoYW1sX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3QgYW1sX3Jlc291cmNlX2VuZF90YWcpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyk7CisJfQorCisJLyogUG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UgdGVtcGxhdGUgYnVmZmVyICovCisKKwllbmRfYW1sID0gYW1sICsgYW1sX2xlbmd0aDsKKworCS8qIFdhbGsgdGhlIGJ5dGUgbGlzdCwgYWJvcnQgb24gYW55IGludmFsaWQgZGVzY3JpcHRvciB0eXBlIG9yIGxlbmd0aCAqLworCisJd2hpbGUgKGFtbCA8IGVuZF9hbWwpIHsKKworCQkvKiBWYWxpZGF0ZSB0aGUgUmVzb3VyY2UgVHlwZSBhbmQgUmVzb3VyY2UgTGVuZ3RoICovCisKKwkJc3RhdHVzID0gYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZShhbWwsICZyZXNvdXJjZV9pbmRleCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCX0KKworCQkvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGlzIGRlc2NyaXB0b3IgKi8KKworCQlsZW5ndGggPSBhY3BpX3V0X2dldF9kZXNjcmlwdG9yX2xlbmd0aChhbWwpOworCisJCS8qIEludm9rZSB0aGUgdXNlciBmdW5jdGlvbiAqLworCisJCWlmICh1c2VyX2Z1bmN0aW9uKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIHVzZXJfZnVuY3Rpb24oYW1sLCBsZW5ndGgsIG9mZnNldCwgcmVzb3VyY2VfaW5kZXgsCisJCQkJCSAgY29udGV4dCk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCX0KKworCQkvKiBBbiBlbmRfdGFnIGRlc2NyaXB0b3IgdGVybWluYXRlcyB0aGlzIHJlc291cmNlIHRlbXBsYXRlICovCisKKwkJaWYgKGFjcGlfdXRfZ2V0X3Jlc291cmNlX3R5cGUoYW1sKSA9PQorCQkgICAgQUNQSV9SRVNPVVJDRV9OQU1FX0VORF9UQUcpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBtb3JlIGJ5dGUgaW4gdGhlIGJ1ZmZlciBmb3IKKwkJCSAqIHRoZSAybmQgYnl0ZSBvZiB0aGUgZW5kX3RhZworCQkJICovCisJCQlpZiAoKGFtbCArIDEpID49IGVuZF9hbWwpIHsKKwkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX05PX1JFU09VUkNFX0VORF9UQUcpOworCQkJfQorCisJCQkvKiBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGVuZF90YWcgaWYgcmVxdWVzdGVkICovCisKKwkJCWlmICghdXNlcl9mdW5jdGlvbikgeworCQkJCSpjb250ZXh0ID0gYW1sOworCQkJfQorCisJCQkvKiBOb3JtYWwgZXhpdCAqLworCisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQl9CisKKwkJYW1sICs9IGxlbmd0aDsKKwkJb2Zmc2V0ICs9IGxlbmd0aDsKKwl9CisKKwkvKiBEaWQgbm90IGZpbmQgYW4gZW5kX3RhZyBkZXNjcmlwdG9yICovCisKKwlyZXR1cm4gKEFFX0FNTF9OT19SRVNPVVJDRV9FTkRfVEFHKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZQogICoKICAqIFBBUkFNRVRFUlM6ICBBbWwgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSByYXcgQU1MIHJlc291cmNlIGRlc2NyaXB0b3IKQEAgLTI3Myw2ICszNzEsNyBAQAogCSAqIEV4YW1pbmUgdGhlIGxhcmdlL3NtYWxsIGJpdCBpbiB0aGUgcmVzb3VyY2UgaGVhZGVyCiAJICovCiAJaWYgKHJlc291cmNlX3R5cGUgJiBBQ1BJX1JFU09VUkNFX05BTUVfTEFSR0UpIHsKKwogCQkvKiBWZXJpZnkgdGhlIGxhcmdlIHJlc291cmNlIHR5cGUgKG5hbWUpIGFnYWluc3QgdGhlIG1heCAqLwogCiAJCWlmIChyZXNvdXJjZV90eXBlID4gQUNQSV9SRVNPVVJDRV9OQU1FX0xBUkdFX01BWCkgewpAQCAtMzc2LDYgKzQ3NSw3IEBACiAJICogRXhhbWluZSB0aGUgbGFyZ2Uvc21hbGwgYml0IGluIHRoZSByZXNvdXJjZSBoZWFkZXIKIAkgKi8KIAlpZiAoQUNQSV9HRVQ4KGFtbCkgJiBBQ1BJX1JFU09VUkNFX05BTUVfTEFSR0UpIHsKKwogCQkvKiBMYXJnZSBSZXNvdXJjZSBUeXBlIC0tIGJpdHMgNjowIGNvbnRhaW4gdGhlIG5hbWUgKi8KIAogCQlyZXR1cm4gKEFDUElfR0VUOChhbWwpKTsKQEAgLTQxMSw2ICs1MTEsNyBAQAogCSAqIEV4YW1pbmUgdGhlIGxhcmdlL3NtYWxsIGJpdCBpbiB0aGUgcmVzb3VyY2UgaGVhZGVyCiAJICovCiAJaWYgKEFDUElfR0VUOChhbWwpICYgQUNQSV9SRVNPVVJDRV9OQU1FX0xBUkdFKSB7CisKIAkJLyogTGFyZ2UgUmVzb3VyY2UgdHlwZSAtLSBieXRlcyAxLTIgY29udGFpbiB0aGUgMTYtYml0IGxlbmd0aCAqLwogCiAJCUFDUElfTU9WRV8xNl9UT18xNigmcmVzb3VyY2VfbGVuZ3RoLCBBQ1BJX0FERF9QVFIodTgsIGFtbCwgMSkpOwpAQCAtNDk1LDYwICs1OTYsMjEgQEAKIAkJCSAgICAgdTggKiogZW5kX3RhZykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTggKmFtbDsKLQl1OCAqZW5kX2FtbDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInV0X2dldF9yZXNvdXJjZV9lbmRfdGFnIik7Ci0KLQkvKiBHZXQgc3RhcnQgYW5kIGVuZCBwb2ludGVycyAqLwotCi0JYW1sID0gb2JqX2Rlc2MtPmJ1ZmZlci5wb2ludGVyOwotCWVuZF9hbWwgPSBhbWwgKyBvYmpfZGVzYy0+YnVmZmVyLmxlbmd0aDsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2dldF9yZXNvdXJjZV9lbmRfdGFnKTsKIAogCS8qIEFsbG93IGEgYnVmZmVyIGxlbmd0aCBvZiB6ZXJvICovCiAKIAlpZiAoIW9ial9kZXNjLT5idWZmZXIubGVuZ3RoKSB7Ci0JCSplbmRfdGFnID0gYW1sOworCQkqZW5kX3RhZyA9IG9ial9kZXNjLT5idWZmZXIucG9pbnRlcjsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CiAKLQkvKiBXYWxrIHRoZSByZXNvdXJjZSB0ZW1wbGF0ZSwgb25lIGRlc2NyaXB0b3IgcGVyIGl0ZXJhdGlvbiAqLworCS8qIFZhbGlkYXRlIHRoZSB0ZW1wbGF0ZSBhbmQgZ2V0IGEgcG9pbnRlciB0byB0aGUgZW5kX3RhZyAqLwogCi0Jd2hpbGUgKGFtbCA8IGVuZF9hbWwpIHsKLQkJLyogVmFsaWRhdGUgdGhlIFJlc291cmNlIFR5cGUgYW5kIFJlc291cmNlIExlbmd0aCAqLworCXN0YXR1cyA9IGFjcGlfdXRfd2Fsa19hbWxfcmVzb3VyY2VzKG9ial9kZXNjLT5idWZmZXIucG9pbnRlciwKKwkJCQkJICAgIG9ial9kZXNjLT5idWZmZXIubGVuZ3RoLCBOVUxMLAorCQkJCQkgICAgKHZvaWQgKiopZW5kX3RhZyk7CiAKLQkJc3RhdHVzID0gYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZShhbWwsIE5VTEwpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQl9Ci0KLQkJLyogZW5kX3RhZyByZXNvdXJjZSBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UgdGVtcGxhdGUgKi8KLQotCQlpZiAoYWNwaV91dF9nZXRfcmVzb3VyY2VfdHlwZShhbWwpID09Ci0JCSAgICBBQ1BJX1JFU09VUkNFX05BTUVfRU5EX1RBRykgewotCQkJLyoKLQkJCSAqIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIG1vcmUgYnl0ZSBpbiB0aGUgYnVmZmVyIGZvcgotCQkJICogdGhlIDJuZCBieXRlIG9mIHRoZSBlbmRfdGFnCi0JCQkgKi8KLQkJCWlmICgoYW1sICsgMSkgPj0gZW5kX2FtbCkgewotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyk7Ci0JCQl9Ci0KLQkJCS8qIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZW5kX3RhZyAqLwotCi0JCQkqZW5kX3RhZyA9IGFtbDsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JCX0KLQotCQkvKgotCQkgKiBQb2ludCB0byB0aGUgbmV4dCByZXNvdXJjZSBkZXNjcmlwdG9yIGluIHRoZSBBTUwgYnVmZmVyLiBUaGUKLQkJICogZGVzY3JpcHRvciBsZW5ndGggaXMgZ3VhcmFudGVlZCB0byBiZSBub24temVybyBieSByZXNvdXJjZQotCQkgKiB2YWxpZGF0aW9uIGFib3ZlLgotCQkgKi8KLQkJYW1sICs9IGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbGVuZ3RoKGFtbCk7Ci0JfQotCi0JLyogRGlkIG5vdCBmaW5kIGFuIGVuZF90YWcgcmVzb3VyY2UgZGVzY3JpcHRvciAqLwotCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OT19SRVNPVVJDRV9FTkRfVEFHKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHN0YXRlLmMKaW5kZXggNGIxMzRhNy4uMGY1YzViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHN0YXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHN0YXRlLmMKQEAgLTk2LDcgKzk2LDcgQEAKIGFjcGlfdXRfcHVzaF9nZW5lcmljX3N0YXRlKHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqKmxpc3RfaGVhZCwKIAkJCSAgIHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfcHVzaF9nZW5lcmljX3N0YXRlIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9wdXNoX2dlbmVyaWNfc3RhdGUpOwogCiAJLyogUHVzaCB0aGUgc3RhdGUgb2JqZWN0IG9udG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IChzdGFjaykgKi8KIApAQCAtMTIzLDEyICsxMjMsMTMgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfcG9wX2dlbmVyaWNfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X3BvcF9nZW5lcmljX3N0YXRlKTsKIAogCS8qIFJlbW92ZSB0aGUgc3RhdGUgb2JqZWN0IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IChzdGFjaykgKi8KIAogCXN0YXRlID0gKmxpc3RfaGVhZDsKIAlpZiAoc3RhdGUpIHsKKwogCQkvKiBVcGRhdGUgdGhlIGxpc3QgaGVhZCAqLwogCiAJCSpsaXN0X2hlYWQgPSBzdGF0ZS0+Y29tbW9uLm5leHQ7CkBAIC0xNTgsOSArMTU5LDEwIEBACiAKIAlzdGF0ZSA9IGFjcGlfb3NfYWNxdWlyZV9vYmplY3QoYWNwaV9nYmxfc3RhdGVfY2FjaGUpOwogCWlmIChzdGF0ZSkgeworCiAJCS8qIEluaXRpYWxpemUgKi8KIAkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YodW5pb24gYWNwaV9nZW5lcmljX3N0YXRlKSk7Ci0JCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEU7CisJCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEU7CiAJfQogCiAJcmV0dXJuIChzdGF0ZSk7CkBAIC0xODMsNyArMTg1LDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfY3JlYXRlX3RocmVhZF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY3JlYXRlX3RocmVhZF9zdGF0ZSk7CiAKIAkvKiBDcmVhdGUgdGhlIGdlbmVyaWMgc3RhdGUgb2JqZWN0ICovCiAKQEAgLTE5NCw3ICsxOTYsNyBAQAogCiAJLyogSW5pdCBmaWVsZHMgc3BlY2lmaWMgdG8gdGhlIHVwZGF0ZSBzdHJ1Y3QgKi8KIAotCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVEhSRUFEOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVEhSRUFEOwogCXN0YXRlLT50aHJlYWQudGhyZWFkX2lkID0gYWNwaV9vc19nZXRfdGhyZWFkX2lkKCk7CiAKIAlyZXR1cm5fUFRSKChzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKilzdGF0ZSk7CkBAIC0yMjAsNyArMjIyLDcgQEAKIHsKIAl1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKnN0YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoInV0X2NyZWF0ZV91cGRhdGVfc3RhdGUiLCBvYmplY3QpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKHV0X2NyZWF0ZV91cGRhdGVfc3RhdGUsIG9iamVjdCk7CiAKIAkvKiBDcmVhdGUgdGhlIGdlbmVyaWMgc3RhdGUgb2JqZWN0ICovCiAKQEAgLTIzMSw3ICsyMzMsNyBAQAogCiAJLyogSW5pdCBmaWVsZHMgc3BlY2lmaWMgdG8gdGhlIHVwZGF0ZSBzdHJ1Y3QgKi8KIAotCXN0YXRlLT5jb21tb24uZGF0YV90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVVBEQVRFOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfVVBEQVRFOwogCXN0YXRlLT51cGRhdGUub2JqZWN0ID0gb2JqZWN0OwogCXN0YXRlLT51cGRhdGUudmFsdWUgPSBhY3Rpb247CiAKQEAgLTI1Nyw3ICsyNTksNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUigidXRfY3JlYXRlX3BrZ19zdGF0ZSIsIGludGVybmFsX29iamVjdCk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIodXRfY3JlYXRlX3BrZ19zdGF0ZSwgaW50ZXJuYWxfb2JqZWN0KTsKIAogCS8qIENyZWF0ZSB0aGUgZ2VuZXJpYyBzdGF0ZSBvYmplY3QgKi8KIApAQCAtMjY4LDcgKzI3MCw3IEBACiAKIAkvKiBJbml0IGZpZWxkcyBzcGVjaWZpYyB0byB0aGUgdXBkYXRlIHN0cnVjdCAqLwogCi0Jc3RhdGUtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9QQUNLQUdFOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfUEFDS0FHRTsKIAlzdGF0ZS0+cGtnLnNvdXJjZV9vYmplY3QgPSAodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKWludGVybmFsX29iamVjdDsKIAlzdGF0ZS0+cGtnLmRlc3Rfb2JqZWN0ID0gZXh0ZXJuYWxfb2JqZWN0OwogCXN0YXRlLT5wa2cuaW5kZXggPSBpbmRleDsKQEAgLTI5NCw3ICsyOTYsNyBAQAogewogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJ1dF9jcmVhdGVfY29udHJvbF9zdGF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY3JlYXRlX2NvbnRyb2xfc3RhdGUpOwogCiAJLyogQ3JlYXRlIHRoZSBnZW5lcmljIHN0YXRlIG9iamVjdCAqLwogCkBAIC0zMDUsNyArMzA3LDcgQEAKIAogCS8qIEluaXQgZmllbGRzIHNwZWNpZmljIHRvIHRoZSBjb250cm9sIHN0cnVjdCAqLwogCi0Jc3RhdGUtPmNvbW1vbi5kYXRhX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9TVEFURV9DT05UUk9MOworCXN0YXRlLT5jb21tb24uZGVzY3JpcHRvcl90eXBlID0gQUNQSV9ERVNDX1RZUEVfU1RBVEVfQ09OVFJPTDsKIAlzdGF0ZS0+Y29tbW9uLnN0YXRlID0gQUNQSV9DT05UUk9MX0NPTkRJVElPTkFMX0VYRUNVVElORzsKIAogCXJldHVybl9QVFIoc3RhdGUpOwpAQCAtMzE5LDE1ICszMjEsMTkgQEAKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKLSAqIERFU0NSSVBUSU9OOiBQdXQgYSBzdGF0ZSBvYmplY3QgYmFjayBpbnRvIHRoZSBnbG9iYWwgc3RhdGUgY2FjaGUuICBUaGUgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgaXMgbm90IGFjdHVhbGx5IGZyZWVkIGF0IHRoaXMgdGltZS4KKyAqIERFU0NSSVBUSU9OOiBSZWxlYXNlIGEgc3RhdGUgb2JqZWN0IHRvIHRoZSBzdGF0ZSBjYWNoZS4gTlVMTCBzdGF0ZSBvYmplY3RzCisgKiAgICAgICAgICAgICAgYXJlIGlnbm9yZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdm9pZCBhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKHVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc3RhdGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgidXRfZGVsZXRlX2dlbmVyaWNfc3RhdGUiKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKTsKIAotCSh2b2lkKWFjcGlfb3NfcmVsZWFzZV9vYmplY3QoYWNwaV9nYmxfc3RhdGVfY2FjaGUsIHN0YXRlKTsKKwkvKiBJZ25vcmUgbnVsbCBzdGF0ZSAqLworCisJaWYgKHN0YXRlKSB7CisJCSh2b2lkKWFjcGlfb3NfcmVsZWFzZV9vYmplY3QoYWNwaV9nYmxfc3RhdGVfY2FjaGUsIHN0YXRlKTsKKwl9CiAJcmV0dXJuX1ZPSUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jCmluZGV4IDMwOGE5NjAuLjM1MzhmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY2V2ZW50cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KQEAgLTY3LDcgKzY1LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luaXRpYWxpemVfc3Vic3lzdGVtIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luaXRpYWxpemVfc3Vic3lzdGVtKTsKIAogCUFDUElfREVCVUdfRVhFQyhhY3BpX3V0X2luaXRfc3RhY2tfcHRyX3RyYWNlKCkpOwogCkBAIC0xMDksNiArMTA3LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0pCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZW5hYmxlX3N1YnN5c3RlbQpAQCAtMTIxLDEyICsxMjEsMTEgQEAKICAqICAgICAgICAgICAgICBQdXRzIHN5c3RlbSBpbnRvIEFDUEkgbW9kZSBpZiBpdCBpc24ndCBhbHJlYWR5LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX3N1YnN5c3RlbSh1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VuYWJsZV9zdWJzeXN0ZW0iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX3N1YnN5c3RlbSk7CiAKIAkvKgogCSAqIFdlIG11c3QgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgYmVmb3JlIHdlIGNhbiBlbmFibGUgQUNQSS4KQEAgLTE1Miw3ICsxNTEsNyBAQAogCiAJCXN0YXR1cyA9IGFjcGlfZW5hYmxlKCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiYWNwaV9lbmFibGUgZmFpbGVkIikpOworCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLCAiQWNwaUVuYWJsZSBmYWlsZWQiKSk7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCX0KQEAgLTIyOSw2ICsyMjgsOCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfc3Vic3lzdGVtKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2luaXRpYWxpemVfb2JqZWN0cwpAQCAtMjQxLDEyICsyNDIsMTEgQEAKICAqICAgICAgICAgICAgICBvYmplY3RzIGFuZCBleGVjdXRpbmcgQU1MIGNvZGUgZm9yIFJlZ2lvbnMsIGJ1ZmZlcnMsIGV0Yy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBhY3BpX3N0YXR1cyBhY3BpX2luaXRpYWxpemVfb2JqZWN0cyh1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2luaXRpYWxpemVfb2JqZWN0cyIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbml0aWFsaXplX29iamVjdHMpOwogCiAJLyoKIAkgKiBSdW4gYWxsIF9SRUcgbWV0aG9kcwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJICovCiAJaWYgKCEoZmxhZ3MgJiBBQ1BJX05PX0FERFJFU1NfU1BBQ0VfSU5JVCkpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJCSAgIltJbml0XSBFeGVjdXRpbmcgX1JFRyBvcF9yZWdpb24gbWV0aG9kc1xuIikpOworCQkJCSAgIltJbml0XSBFeGVjdXRpbmcgX1JFRyBPcFJlZ2lvbiBtZXRob2RzXG4iKSk7CiAKIAkJc3RhdHVzID0gYWNwaV9ldl9pbml0aWFsaXplX29wX3JlZ2lvbnMoKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0zMDUsNiArMzA1LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5pdGlhbGl6ZV9vYmplY3RzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3Rlcm1pbmF0ZQpAQCAtMzE2LDEyICszMTgsMTEgQEAKICAqIERFU0NSSVBUSU9OOiBTaHV0ZG93biB0aGUgQUNQSSBzdWJzeXN0ZW0uICBSZWxlYXNlIGFsbCByZXNvdXJjZXMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV90ZXJtaW5hdGUodm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Rlcm1pbmF0ZSIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV90ZXJtaW5hdGUpOwogCiAJLyogVGVybWluYXRlIHRoZSBBTUwgRGVidWdnZXIgaWYgcHJlc2VudCAqLwogCkBAIC0zNDgsNiArMzQ5LDggQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdGVybWluYXRlKQorCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzYyLDcgKzM2NSw2IEBACiAgKiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfc3Vic3lzdGVtX3N0YXR1cyh2b2lkKQogewogCkBAIC0zNzMsNiArMzc1LDggQEAKIAl9CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3N1YnN5c3RlbV9zdGF0dXMpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3N5c3RlbV9pbmZvCkBAIC0zOTAsMTQgKzM5NCwxMyBAQAogICogICAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgb2Ygb3V0X2J1ZmZlciBpcyB1bmRlZmluZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogYWNwaV9zdGF0dXMgYWNwaV9nZXRfc3lzdGVtX2luZm8oc3RydWN0IGFjcGlfYnVmZmVyICogb3V0X2J1ZmZlcikKIHsKIAlzdHJ1Y3QgYWNwaV9zeXN0ZW1faW5mbyAqaW5mb19wdHI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9nZXRfc3lzdGVtX2luZm8iKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ2V0X3N5c3RlbV9pbmZvKTsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKQEAgLTQ0OCwxNSArNDUxLDE1IEBACiAKIAkvKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgQUNQSSB0YWJsZXMsIHBlciB0YWJsZSB0eXBlICovCiAKLQlpbmZvX3B0ci0+bnVtX3RhYmxlX3R5cGVzID0gTlVNX0FDUElfVEFCTEVfVFlQRVM7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9BQ1BJX1RBQkxFX1RZUEVTOyBpKyspIHsKKwlpbmZvX3B0ci0+bnVtX3RhYmxlX3R5cGVzID0gQUNQSV9UQUJMRV9JRF9NQVggKyAxOworCWZvciAoaSA9IDA7IGkgPCAoQUNQSV9UQUJMRV9JRF9NQVggKyAxKTsgaSsrKSB7CiAJCWluZm9fcHRyLT50YWJsZV9pbmZvW2ldLmNvdW50ID0gYWNwaV9nYmxfdGFibGVfbGlzdHNbaV0uY291bnQ7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAotRVhQT1JUX1NZTUJPTChhY3BpX2dldF9zeXN0ZW1faW5mbyk7CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfc3lzdGVtX2luZm8pCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ3Miw3ICs0NzUsNiBAQAogICogVEJEOiBXaGVuIGEgc2Vjb25kIGZ1bmN0aW9uIGlzIGFkZGVkLCBtdXN0IHNhdmUgdGhlIEZ1bmN0aW9uIGFsc28uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX2luc3RhbGxfaW5pdGlhbGl6YXRpb25faGFuZGxlcihhY3BpX2luaXRfaGFuZGxlciBoYW5kbGVyLCB1MzIgZnVuY3Rpb24pCiB7CkBAIC00ODksNiArNDkxLDcgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfaW5pdGlhbGl6YXRpb25faGFuZGxlcikKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTAyLDEwICs1MDUsOSBAQAogICogREVTQ1JJUFRJT046IEVtcHR5IGFsbCBjYWNoZXMgKGRlbGV0ZSB0aGUgY2FjaGVkIG9iamVjdHMpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfcHVyZ2VfY2FjaGVkX29iamVjdHModm9pZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3B1cmdlX2NhY2hlZF9vYmplY3RzIik7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3B1cmdlX2NhY2hlZF9vYmplY3RzKTsKIAogCSh2b2lkKWFjcGlfb3NfcHVyZ2VfY2FjaGUoYWNwaV9nYmxfc3RhdGVfY2FjaGUpOwogCSh2b2lkKWFjcGlfb3NfcHVyZ2VfY2FjaGUoYWNwaV9nYmxfb3BlcmFuZF9jYWNoZSk7CkBAIC01MTMsMyArNTE1LDUgQEAKIAkodm9pZClhY3BpX29zX3B1cmdlX2NhY2hlKGFjcGlfZ2JsX3BzX25vZGVfZXh0X2NhY2hlKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQorCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9wdXJnZV9jYWNoZWRfb2JqZWN0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA0ODcxOGI3Li43NjY1NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC0xODgsNiArMTg4LDExIEBACiAJCXVwKCZkZXYtPnNlbSk7CiAJCWlmIChkZXYtPnBhcmVudCkKIAkJCXVwKCZkZXYtPnBhcmVudC0+c2VtKTsKKworCQlpZiAoZXJyID4gMCkgCQkvKiBzdWNjZXNzICovCisJCQllcnIgPSBjb3VudDsKKwkJZWxzZSBpZiAoZXJyID09IDApCS8qIGRyaXZlciBkaWRuJ3QgYWNjZXB0IGRldmljZSAqLworCQkJZXJyID0gLUVOT0RFVjsKIAl9CiAJcHV0X2RldmljZShkZXYpOwogCXB1dF9idXMoYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKaW5kZXggZGY3ZmRhYi4uYjFlYTRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKQEAgLTQ1Niw2ICs0NTYsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY2xhc3NfZGV2aWNlX2FkZF9ncm91cHMoc3RydWN0IGNsYXNzX2RldmljZSAqIGNkKQoreworCWludCBpOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoY2QtPmdyb3VwcykgeworCQlmb3IgKGkgPSAwOyBjZC0+Z3JvdXBzW2ldOyBpKyspIHsKKwkJCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjZC0+a29iaiwgY2QtPmdyb3Vwc1tpXSk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQl3aGlsZSAoLS1pID49IDApCisJCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2QtPmtvYmosIGNkLT5ncm91cHNbaV0pOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgY2xhc3NfZGV2aWNlX3JlbW92ZV9ncm91cHMoc3RydWN0IGNsYXNzX2RldmljZSAqIGNkKQoreworCWludCBpOworCWlmIChjZC0+Z3JvdXBzKSB7CisJCWZvciAoaSA9IDA7IGNkLT5ncm91cHNbaV07IGkrKykgeworCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjZC0+a29iaiwgY2QtPmdyb3Vwc1tpXSk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfZGV2KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQogewogCXJldHVybiBwcmludF9kZXZfdChidWYsIGNsYXNzX2Rldi0+ZGV2dCk7CkBAIC01NTksMTcgKzU4OCwxOCBAQAogCQkJCSAgY2xhc3NfbmFtZSk7CiAJfQogCisJY2xhc3NfZGV2aWNlX2FkZF9ncm91cHMoY2xhc3NfZGV2KTsKKwogCWtvYmplY3RfdWV2ZW50KCZjbGFzc19kZXYtPmtvYmosIEtPQkpfQUREKTsKIAogCS8qIG5vdGlmeSBhbnkgaW50ZXJmYWNlcyB0aGlzIGRldmljZSBpcyBub3cgaGVyZSAqLwotCWlmIChwYXJlbnRfY2xhc3MpIHsKLQkJZG93bigmcGFyZW50X2NsYXNzLT5zZW0pOwotCQlsaXN0X2FkZF90YWlsKCZjbGFzc19kZXYtPm5vZGUsICZwYXJlbnRfY2xhc3MtPmNoaWxkcmVuKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19pbnRmLCAmcGFyZW50X2NsYXNzLT5pbnRlcmZhY2VzLCBub2RlKQotCQkJaWYgKGNsYXNzX2ludGYtPmFkZCkKLQkJCQljbGFzc19pbnRmLT5hZGQoY2xhc3NfZGV2LCBjbGFzc19pbnRmKTsKLQkJdXAoJnBhcmVudF9jbGFzcy0+c2VtKTsKKwlkb3duKCZwYXJlbnRfY2xhc3MtPnNlbSk7CisJbGlzdF9hZGRfdGFpbCgmY2xhc3NfZGV2LT5ub2RlLCAmcGFyZW50X2NsYXNzLT5jaGlsZHJlbik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19pbnRmLCAmcGFyZW50X2NsYXNzLT5pbnRlcmZhY2VzLCBub2RlKSB7CisJCWlmIChjbGFzc19pbnRmLT5hZGQpCisJCQljbGFzc19pbnRmLT5hZGQoY2xhc3NfZGV2LCBjbGFzc19pbnRmKTsKIAl9CisJdXAoJnBhcmVudF9jbGFzcy0+c2VtKTsKIAogIHJlZ2lzdGVyX2RvbmU6CiAJaWYgKGVycm9yKSB7CkBAIC02NzMsNiArNzAzLDcgQEAKIAlpZiAoY2xhc3NfZGV2LT5kZXZ0X2F0dHIpCiAJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc19kZXYsIGNsYXNzX2Rldi0+ZGV2dF9hdHRyKTsKIAljbGFzc19kZXZpY2VfcmVtb3ZlX2F0dHJzKGNsYXNzX2Rldik7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9ncm91cHMoY2xhc3NfZGV2KTsKIAogCWtvYmplY3RfdWV2ZW50KCZjbGFzc19kZXYtPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlrb2JqZWN0X2RlbCgmY2xhc3NfZGV2LT5rb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggNzMwYTljZS4uODg5YzcxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiZHJpdmVyIik7CiAJCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9kcml2ZXIpOwogCi0JCWlmIChkZXYtPmJ1cy0+cmVtb3ZlKQorCQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnJlbW92ZSkKIAkJCWRldi0+YnVzLT5yZW1vdmUoZGV2KTsKIAkJZWxzZSBpZiAoZHJ2LT5yZW1vdmUpCiAJCQlkcnYtPnJlbW92ZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA0NzIzMTgyLi4wYzk5YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtODYsMTggKzg2LDkgQEAKIHN0YXRpYyBDTEFTU19BVFRSKHRpbWVvdXQsIDA2NDQsIGZpcm13YXJlX3RpbWVvdXRfc2hvdywgZmlybXdhcmVfdGltZW91dF9zdG9yZSk7CiAKIHN0YXRpYyB2b2lkICBmd19jbGFzc19kZXZfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpOwotaW50IGZpcm13YXJlX2NsYXNzX3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAotCQkJICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgZmlybXdhcmVfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImZpcm13YXJlIiwKLQkudWV2ZW50CT0gZmlybXdhcmVfY2xhc3NfdWV2ZW50LAotCS5yZWxlYXNlCT0gZndfY2xhc3NfZGV2X3JlbGVhc2UsCi19OwotCi1pbnQKLWZpcm13YXJlX2NsYXNzX3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKiplbnZwLAotCQkgICAgICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3N0YXRpYyBpbnQgZmlybXdhcmVfY2xhc3NfdWV2ZW50KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqKmVudnAsCisJCQkJIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCiB7CiAJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOwogCWludCBpID0gMCwgbGVuID0gMDsKQEAgLTExNiw2ICsxMDcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBjbGFzcyBmaXJtd2FyZV9jbGFzcyA9IHsKKwkubmFtZQkJPSAiZmlybXdhcmUiLAorCS51ZXZlbnQJCT0gZmlybXdhcmVfY2xhc3NfdWV2ZW50LAorCS5yZWxlYXNlCT0gZndfY2xhc3NfZGV2X3JlbGVhc2UsCit9OworCiBzdGF0aWMgc3NpemVfdAogZmlybXdhcmVfbG9hZGluZ19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQogewpAQCAtNDkzLDI1ICs0OTAsNiBAQAogCX0KIH0KIAotLyoqCi0gKiByZWdpc3Rlcl9maXJtd2FyZTogLSBwcm92aWRlIGEgZmlybXdhcmUgaW1hZ2UgZm9yIGxhdGVyIHVzYWdlCi0gKiBAbmFtZTogbmFtZSBvZiBmaXJtd2FyZSBpbWFnZSBmaWxlCi0gKiBAZGF0YTogYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBmaXJtd2FyZSBpbWFnZQotICogQHNpemU6IHNpemUgb2YgdGhlIGRhdGEgYnVmZmVyIGFyZWEKLSAqCi0gKglNYWtlIHN1cmUgdGhhdCBAZGF0YSB3aWxsIGJlIGF2YWlsYWJsZSBieSByZXF1ZXN0aW5nIGZpcm13YXJlIEBuYW1lLgotICoKLSAqCU5vdGU6IFRoaXMgd2lsbCBub3QgYmUgcG9zc2libGUgdW50aWwgc29tZSBraW5kIG9mIHBlcnNpc3RlbmNlCi0gKglpcyBhdmFpbGFibGUuCi0gKiovCi12b2lkCi1yZWdpc3Rlcl9maXJtd2FyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0JLyogVGhpcyBpcyBtZWFuaW5nbGVzcyB3aXRob3V0IGZpcm13YXJlIGNhY2hpbmcsIHNvIHVudGlsIHdlCi0JICogZGVjaWRlIGlmIGZpcm13YXJlIGNhY2hpbmcgaXMgcmVhc29uYWJsZSBqdXN0IGxlYXZlIGl0IGFzIGEKLQkgKiBub29wICovCi19Ci0KIC8qIEFzeW5jIHN1cHBvcnQgKi8KIHN0cnVjdCBmaXJtd2FyZV93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKQEAgLTYzMCw0ICs2MDgsMyBAQAogRVhQT1JUX1NZTUJPTChyZWxlYXNlX2Zpcm13YXJlKTsKIEVYUE9SVF9TWU1CT0wocmVxdWVzdF9maXJtd2FyZSk7CiBFWFBPUlRfU1lNQk9MKHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZmlybXdhcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggMTZjNTEzYS4uYzgwYzNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlvdGhlcl9ub2RlID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnogPSAmcGctPm5vZGVfem9uZXNbaV07Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzID0gem9uZV9wY3AoeixjcHUpOwogCQkJbnVtYV9oaXQgKz0gcHMtPm51bWFfaGl0OwogCQkJbnVtYV9taXNzICs9IHBzLT5udW1hX21pc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYwppbmRleCBiZGI2MDY2Li4yYTc2OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zdXNwZW5kLmMKQEAgLTgsOCArOCw5IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICJwb3dlci5oIgogCkBAIC01OCwxMSArNTksMTMgQEAKIAlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnN1c3BlbmQgJiYgIWRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQpIHsKIAkJZGV2X2RiZyhkZXYsICJzdXNwZW5kaW5nXG4iKTsKIAkJZXJyb3IgPSBkZXYtPmJ1cy0+c3VzcGVuZChkZXYsIHN0YXRlKTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+YnVzLT5zdXNwZW5kLCBlcnJvcik7CiAJfQogCXVwKCZkZXYtPnNlbSk7CiAJcmV0dXJuIGVycm9yOwogfQogCisKIC8qKgogICoJZGV2aWNlX3N1c3BlbmQgLSBTYXZlIHN0YXRlIGFuZCBzdG9wIGFsbCBkZXZpY2VzIGluIHN5c3RlbS4KICAqCUBzdGF0ZToJCVBvd2VyIHN0YXRlIHRvIHB1dCBlYWNoIGRldmljZSBpbi4KQEAgLTgyLDkgKzg1LDYgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKCFpc19jb25zb2xlX3N1c3BlbmRfc2FmZSgpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWRvd24oJmRwbV9zZW0pOwogCWRvd24oJmRwbV9saXN0X3NlbSk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fYWN0aXZlKSAmJiBlcnJvciA9PSAwKSB7CkBAIC0xNjksMyArMTY5LDEyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wb3dlcl9kb3duKTsKIAordm9pZCBfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChjb25zdCBjaGFyICpmdW5jdGlvbiwgdm9pZCAqZm4sIGludCByZXQpCit7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICIsIGZ1bmN0aW9uKTsKKwkJcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woIiVzKCkgcmV0dXJucyAiLCAodW5zaWduZWQgbG9uZylmbik7CisJCXByaW50aygiJWRcbiIsIHJldCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwppbmRleCA5MTU4MTBmNi4uOGM1MjQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCB0b3BvbG9neV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHRvcG9sb2d5X2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggMWIwZmQzMS4uMTMxOWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMTE4MCw2ICsxMTgwLDUzIEBACiAgICAgICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcGxldGVfYnVmZmVycyhzdHJ1Y3QgYmlvICpiaW8sIGludCBzdGF0dXMpCit7CisJd2hpbGUgKGJpbykgeworCQlzdHJ1Y3QgYmlvICp4YmggPSBiaW8tPmJpX25leHQ7CisJCWludCBucl9zZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKKworCQliaW8tPmJpX25leHQgPSBOVUxMOworCQlibGtfZmluaXNoZWRfaW8obGVuKTsKKwkJYmlvX2VuZGlvKGJpbywgbnJfc2VjdG9ycyA8PCA5LCBzdGF0dXMgPyAwIDogLUVJTyk7CisJCWJpbyA9IHhiaDsKKwl9CisKK30KKworc3RhdGljIHZvaWQgY2Npc3Nfc29mdGlycV9kb25lKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZCA9IHJxLT5jb21wbGV0aW9uX2RhdGE7CisJY3Rscl9pbmZvX3QgKmggPSBoYmFbY21kLT5jdGxyXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NGJpdCB0ZW1wNjQ7CisJaW50IGksIGRkaXI7CisKKwlpZiAoY21kLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfUkVBRCkKKwkJZGRpciA9IFBDSV9ETUFfRlJPTURFVklDRTsKKwllbHNlCisJCWRkaXIgPSBQQ0lfRE1BX1RPREVWSUNFOworCisJLyogY29tbWFuZCBkaWQgbm90IG5lZWQgdG8gYmUgcmV0cmllZCAqLworCS8qIHVubWFwIHRoZSBETUEgbWFwcGluZyBmb3IgYWxsIHRoZSBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyAqLworCWZvcihpPTA7IGk8Y21kLT5IZWFkZXIuU0dMaXN0OyBpKyspIHsKKwkJdGVtcDY0LnZhbDMyLmxvd2VyID0gY21kLT5TR1tpXS5BZGRyLmxvd2VyOworCQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjbWQtPlNHW2ldLkFkZHIudXBwZXI7CisJCXBjaV91bm1hcF9wYWdlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNtZC0+U0dbaV0uTGVuLCBkZGlyKTsKKwl9CisKKwljb21wbGV0ZV9idWZmZXJzKHJxLT5iaW8sIHJxLT5lcnJvcnMpOworCisjaWZkZWYgQ0NJU1NfREVCVUcKKwlwcmludGsoIkRvbmUgd2l0aCAlcFxuIiwgcnEpOworI2VuZGlmIC8qIENDSVNTX0RFQlVHICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgcnEtPmVycm9ycyk7CisJY21kX2ZyZWUoaCwgY21kLDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHRoZSB1c2FnZV9jb3VudCBvZiB0aGUgZHJpdmUgdG8gYmUgdXBkYXRlZC9hZGRlZC4KICAqIElmIHRoZSB1c2FnZV9jb3VudCBpcyB6ZXJvIHRoZW4gdGhlIGRyaXZlIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBhbmQKICAqIHRoZSBkaXNrIHdpbGwgYmUgcmUtcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwuICBJZiBub3QgdGhlbiBpdCB3aWxsIGJlCkBAIC0xMjQ4LDYgKzEyOTUsOCBAQAogCiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgNTEyKTsKIAorCQlibGtfcXVldWVfc29mdGlycV9kb25lKGRpc2stPnF1ZXVlLCBjY2lzc19zb2Z0aXJxX2RvbmUpOworCiAJCWRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSBoYmFbY3Rscl07CiAKIAkJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoZGlzay0+cXVldWUsCkBAIC0yMTQ3LDIwICsyMTk2LDYgQEAKIAkJYWRkUSAoJihoLT5jbXBRKSwgYyk7IAogCX0KIH0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbXBsZXRlX2J1ZmZlcnMoc3RydWN0IGJpbyAqYmlvLCBpbnQgc3RhdHVzKQotewotCXdoaWxlIChiaW8pIHsKLQkJc3RydWN0IGJpbyAqeGJoID0gYmlvLT5iaV9uZXh0OyAKLQkJaW50IG5yX3NlY3RvcnMgPSBiaW9fc2VjdG9ycyhiaW8pOwotCi0JCWJpby0+YmlfbmV4dCA9IE5VTEw7IAotCQlibGtfZmluaXNoZWRfaW8obGVuKTsKLQkJYmlvX2VuZGlvKGJpbywgbnJfc2VjdG9ycyA8PCA5LCBzdGF0dXMgPyAwIDogLUVJTyk7Ci0JCWJpbyA9IHhiaDsKLQl9Ci0KLX0gCiAvKiBBc3N1bWVzIHRoYXQgQ0NJU1NfTE9DSyhoLT5jdGxyKSBpcyBoZWxkLiAqLwogLyogWmVyb3Mgb3V0IHRoZSBlcnJvciByZWNvcmQgYW5kIHRoZW4gcmVzZW5kcyB0aGUgY29tbWFuZCBiYWNrICovCiAvKiB0byB0aGUgY29udHJvbGxlciAqLwpAQCAtMjE3OCwzOSArMjIxMyw2IEBACiAJc3RhcnRfaW8oaCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNjaXNzX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JQ29tbWFuZExpc3Rfc3RydWN0ICpjbWQgPSBycS0+Y29tcGxldGlvbl9kYXRhOwotCWN0bHJfaW5mb190ICpoID0gaGJhW2NtZC0+Y3Rscl07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1NjRiaXQgdGVtcDY0OwotCWludCBpLCBkZGlyOwotCi0JaWYgKGNtZC0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9PSBYRkVSX1JFQUQpCi0JCWRkaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7Ci0JZWxzZQotCQlkZGlyID0gUENJX0RNQV9UT0RFVklDRTsKLQotCS8qIGNvbW1hbmQgZGlkIG5vdCBuZWVkIHRvIGJlIHJldHJpZWQgKi8KLQkvKiB1bm1hcCB0aGUgRE1BIG1hcHBpbmcgZm9yIGFsbCB0aGUgc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgKi8KLQlmb3IoaT0wOyBpPGNtZC0+SGVhZGVyLlNHTGlzdDsgaSsrKSB7Ci0JCXRlbXA2NC52YWwzMi5sb3dlciA9IGNtZC0+U0dbaV0uQWRkci5sb3dlcjsKLQkJdGVtcDY0LnZhbDMyLnVwcGVyID0gY21kLT5TR1tpXS5BZGRyLnVwcGVyOwotCQlwY2lfdW5tYXBfcGFnZShoLT5wZGV2LCB0ZW1wNjQudmFsLCBjbWQtPlNHW2ldLkxlbiwgZGRpcik7Ci0JfQotCi0JY29tcGxldGVfYnVmZmVycyhycS0+YmlvLCBycS0+ZXJyb3JzKTsKLQotI2lmZGVmIENDSVNTX0RFQlVHCi0JcHJpbnRrKCJEb25lIHdpdGggJXBcbiIsIHJxKTsKLSNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLyAKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0JZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJxLCBycS0+ZXJyb3JzKTsKLQljbWRfZnJlZShoLCBjbWQsMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotfQotCiAvKiBjaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgam9iIGFuZCBjYWxscyBjb21wbGV0ZSBidWZmZXJzIHRvIG1hcmsgYWxsIAogICogYnVmZmVycyBmb3IgdGhlIGNvbXBsZXRlZCBqb2IuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQKICAqIHRvIGhvbGQgdGhlIGhiYS9xdWV1ZSBsb2NrLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggYmVkYjY4OS4uZGZmMWU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MzAxLDcgKzQzMDEsNyBAQAogCX0KIAogCXVzZV92aXJ0dWFsX2RtYSA9IGNhbl91c2VfdmlydHVhbF9kbWEgJiAxOwotI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChGREMxKSkgewogCQlkZWxfdGltZXIoJmZkX3RpbWVvdXQpOwogCQllcnIgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IGY3MzQ0NmYuLmM2ODhjMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTUzNiw2ICs1MzYsOSBAQAogCQlrZnJlZShsdW4pOwogCX0KIAorCXVzYl9zZXRfaW50ZmRhdGEoc2MtPmludGYsIE5VTEwpOworCXVzYl9wdXRfaW50ZihzYy0+aW50Zik7CisJdXNiX3B1dF9kZXYoc2MtPmRldik7CiAJa2ZyZWUoc2MpOwogfQogCkBAIC0yMjIxLDcgKzIyMjQsMTIgQEAKIAkvLyBzYy0+aWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgc2MpOwogCXVzYl9nZXRfZGV2KHNjLT5kZXYpOwotCS8vIHVzYl9nZXRfaW50ZihzYy0+aW50Zik7CS8qIERvIHdlIG5lZWQgdGhpcz8gKi8KKwkvKgorCSAqIFNpbmNlIHdlIGdpdmUgdGhlIGludGVyZmFjZSBzdHJ1Y3QgdG8gdGhlIGJsb2NrIGxldmVsIHRocm91Z2gKKwkgKiBkaXNrLT5kcml2ZXJmc19kZXYsIHdlIGhhdmUgdG8gcGluIGl0LiBPdGhlcndpc2UsIGJsb2NrX3VldmVudAorCSAqIG9vcHNlcyBvbiBjbG9zZSBhZnRlciBhIGRpc2Nvbm5lY3QgKGtlcm5lbHMgMi42LjE2IGFuZCB1cCkuCisJICovCisJdXNiX2dldF9pbnRmKHNjLT5pbnRmKTsKIAogCXNucHJpbnRmKHNjLT5uYW1lLCAxMiwgRFJWX05BTUUgIiglZC4lZCkiLAogCSAgICBzYy0+ZGV2LT5idXMtPmJ1c251bSwgc2MtPmRldi0+ZGV2bnVtKTsKQEAgLTIyODYsNyArMjI5NCw3IEBACiAKIGVycl9kZXZfZGVzYzoKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCS8vIHVzYl9wdXRfaW50ZihzYy0+aW50Zik7CisJdXNiX3B1dF9pbnRmKHNjLT5pbnRmKTsKIAl1c2JfcHV0X2RldihzYy0+ZGV2KTsKIAlrZnJlZShzYyk7CiBlcnJfY29yZToKQEAgLTI0NjEsMTIgKzI0NjksNiBAQAogCSAqIGFuZCBubyBVUkJzIGxlZnQgaW4gdHJhbnNpdC4KIAkgKi8KIAotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JLy8gdXNiX3B1dF9pbnRmKHNjLT5pbnRmKTsKLQlzYy0+aW50ZiA9IE5VTEw7Ci0JdXNiX3B1dF9kZXYoc2MtPmRldik7Ci0Jc2MtPmRldiA9IE5VTEw7Ci0KIAl1Yl9wdXQoc2MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCA5ODg4YmMxLi40NzNhMTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCBibHVlY2FyZF9pbmZvX3QgewotCWRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJZGV2X25vZGVfdCBub2RlOwogCiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CkBAIC04NSw4ICs4NSw4IEBACiB9IGJsdWVjYXJkX2luZm9fdDsKIAogCi1zdGF0aWMgdm9pZCBibHVlY2FyZF9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBibHVlY2FyZF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBibHVlY2FyZF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYmx1ZWNhcmRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIGJsdWVjYXJkX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCkBAIC0xNjIsNyArMTYyLDcgQEAKIHN0YXRpYyB2b2lkIGJsdWVjYXJkX2FjdGl2aXR5X2xlZF90aW1lb3V0KHVfbG9uZyBhcmcpCiB7CiAJYmx1ZWNhcmRfaW5mb190ICppbmZvID0gKGJsdWVjYXJkX2luZm9fdCAqKWFyZzsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlpZiAoIXRlc3RfYml0KENBUkRfSEFTX1BDQ0FSRF9JRCwgJihpbmZvLT5od19zdGF0ZSkpKQogCQlyZXR1cm47CkBAIC0xNzksNyArMTc5LDcgQEAKIAogc3RhdGljIHZvaWQgYmx1ZWNhcmRfZW5hYmxlX2FjdGl2aXR5X2xlZChibHVlY2FyZF9pbmZvX3QgKmluZm8pCiB7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVhZHlfYml0OwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAkJY2xlYXJfYml0KFhNSVRfV0FLRVVQLCAmKGluZm8tPnR4X3N0YXRlKSk7CiAKLQkJaWYgKCEoaW5mby0+bGluay5zdGF0ZSAmIERFVl9QUkVTRU5UKSkKKwkJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQoaW5mby0+cF9kZXYpKQogCQkJcmV0dXJuOwogCiAJCWlmICh0ZXN0X2JpdChYTUlUX0JVRkZFUl9OVU1CRVIsICYoaW5mby0+dHhfc3RhdGUpKSkgewpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2Jhc2UgPSBpbmZvLT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJaWYgKHRlc3RfYml0KFhNSVRfU0VORElOR19SRUFEWSwgJihpbmZvLT50eF9zdGF0ZSkpKQogCQlibHVlY2FyZF9lbmFibGVfYWN0aXZpdHlfbGVkKGluZm8pOwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJaWYgKCF0ZXN0X2JpdChDQVJEX1JFQURZLCAmKGluZm8tPmh3X3N0YXRlKSkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTYyNiw3ICs2MjYsNyBAQAogc3RhdGljIGludCBibHVlY2FyZF9oY2lfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopKGhkZXYtPmRyaXZlcl9kYXRhKTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlpZiAodGVzdF9iaXQoQ0FSRF9IQVNfUENDQVJEX0lELCAmKGluZm8tPmh3X3N0YXRlKSkpCiAJCWJsdWVjYXJkX2hjaV9zZXRfYmF1ZF9yYXRlKGhkZXYsIERFRkFVTFRfQkFVRF9SQVRFKTsKQEAgLTY0Niw3ICs2NDYsNyBAQAogc3RhdGljIGludCBibHVlY2FyZF9oY2lfY2xvc2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7CiAJYmx1ZWNhcmRfaW5mb190ICppbmZvID0gKGJsdWVjYXJkX2luZm9fdCAqKShoZGV2LT5kcml2ZXJfZGF0YSk7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1JVTk5JTkcsICYoaGRldi0+ZmxhZ3MpKSkKIAkJcmV0dXJuIDA7CkBAIC03MTMsNyArNzEzLDcgQEAKIAogc3RhdGljIGludCBibHVlY2FyZF9vcGVuKGJsdWVjYXJkX2luZm9fdCAqaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAJdW5zaWduZWQgY2hhciBpZDsKIApAQCAtODMxLDcgKzgzMSw3IEBACiAKIHN0YXRpYyBpbnQgYmx1ZWNhcmRfY2xvc2UoYmx1ZWNhcmRfaW5mb190ICppbmZvKQogewotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5saW5rLmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGluZm8tPmhkZXY7CiAKIAlpZiAoIWhkZXYpCkBAIC04NTYsMTcgKzg1NiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJsdWVjYXJkX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGJsdWVjYXJkX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWJsdWVjYXJkX2luZm9fdCAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJLyogQ3JlYXRlIG5ldyBpbmZvIGRldmljZSAqLwogCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKQEAgLTg3OCwzMiArODc3LDIyIEBACiAJbGluay0+aXJxLkluc3RhbmNlID0gaW5mbzsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWJsdWVjYXJkX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBibHVlY2FyZF9jb25maWcobGluayk7CiB9CiAKIAotc3RhdGljIHZvaWQgYmx1ZWNhcmRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGJsdWVjYXJkX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJYmx1ZWNhcmRfcmVsZWFzZShsaW5rKTsKLQorCWJsdWVjYXJkX3JlbGVhc2UobGluayk7CiAJa2ZyZWUoaW5mbyk7CiB9CiAKIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpbnQgaTsKIApAQCAtOTE4LDE0ICs5MDcsMTIgQEAKIAlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIHZvaWQgYmx1ZWNhcmRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGJsdWVjYXJkX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCWJsdWVjYXJkX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJdHVwbGVfdCB0dXBsZTsKIAl1X3Nob3J0IGJ1ZlsyNTZdOwogCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIG4sIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKQEAgLTkzNSw3ICs5MjIsNyBAQAogCiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJbGFzdF9yZXQgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtOTQzLDM2ICs5MzAsMzEgQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0JaSA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmZpZyk7Ci0JbGluay0+Y29uZi5WY2MgPSBjb25maWcuVmNjOwotCiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4MjA7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gNjQ7CiAJbGluay0+aW8uSU9BZGRyTGluZXMgPSA2OwogCiAJZm9yIChuID0gMDsgbiA8IDB4NDAwOyBuICs9IDB4NDApIHsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gbiBeIDB4MzAwOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCWJyZWFrOwogCX0KIAogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElSUSwgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAotCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtOTgwLDU3ICs5NjIsMjggQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlzdHJjcHkoaW5mby0+bm9kZS5kZXZfbmFtZSwgaW5mby0+aGRldi0+bmFtZSk7Ci0JbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCi0JcmV0dXJuOworCXJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCiBmYWlsZWQ6CiAJYmx1ZWNhcmRfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogCi1zdGF0aWMgdm9pZCBibHVlY2FyZF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBibHVlY2FyZF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWJsdWVjYXJkX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkKLQkJYmx1ZWNhcmRfY2xvc2UoaW5mbyk7CisJYmx1ZWNhcmRfY2xvc2UoaW5mbyk7CiAKIAlkZWxfdGltZXIoJihpbmZvLT50aW1lcikpOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBibHVlY2FyZF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmx1ZWNhcmRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChERVZfT0sobGluaykpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBibHVlY2FyZF9pZHNbXSA9IHsKQEAgLTEwNDYsMTEgKzk5OSw5IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImJsdWVjYXJkX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBibHVlY2FyZF9hdHRhY2gsCisJLnByb2JlCQk9IGJsdWVjYXJkX3Byb2JlLAogCS5yZW1vdmUJCT0gYmx1ZWNhcmRfZGV0YWNoLAogCS5pZF90YWJsZQk9IGJsdWVjYXJkX2lkcywKLQkuc3VzcGVuZAk9IGJsdWVjYXJkX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBibHVlY2FyZF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2JsdWVjYXJkX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggN2UyMWIxZi4uYjk0YWMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtNzIsNyArNzIsNyBAQAogCiAKIHR5cGVkZWYgc3RydWN0IGJ0M2NfaW5mb190IHsKLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIAogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwpAQCAtODgsOCArODgsOCBAQAogfSBidDNjX2luZm9fdDsKIAogCi1zdGF0aWMgdm9pZCBidDNjX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGJ0M2NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgYnQzY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYnQzY19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogc3RhdGljIHZvaWQgYnQzY19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApAQCAtMTkxLDExICsxOTEsMTEgQEAKIAkJcmV0dXJuOwogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCi0JCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpCisJCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGluZm8tPnBfZGV2KSkKIAkJCWJyZWFrOwogCiAKQEAgLTIyOSw3ICsyMjksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWF2YWlsID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDA2KTsKIAkvL3ByaW50aygiYnQzY19jczogcmVjZWl2aW5nICVkIGJ5dGVzXG4iLCBhdmFpbCk7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCXVuc2lnbmVkIGludCBpb2Jhc2UsIHNpemUsIGFkZHIsIGZjcywgdG1wOwogCWludCBpLCBlcnIgPSAwOwogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCS8qIFJlc2V0ICovCiAJYnQzY19pb193cml0ZShpb2Jhc2UsIDB4ODA0MCwgMHgwNDA0KTsKQEAgLTU2Miw3ICs1NjIsNiBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrX2luaXQoJihpbmZvLT5sb2NrKSk7CkBAIC01OTQsMTAgKzU5Myw4IEBACiAKIAloZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaGFuZGxlID0gaW5mby0+bGluay5oYW5kbGU7Ci0KIAkvKiBMb2FkIGZpcm13YXJlICovCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJCVDNDUENDLmJpbiIsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCAiQlQzQ1BDQy5iaW4iLCAmaW5mby0+cF9kZXYtPmRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJQlRfRVJSKCJGaXJtd2FyZSByZXF1ZXN0IGZhaWxlZCIpOwogCQlnb3RvIGVycm9yOwpAQCAtNjQ4LDE3ICs2NDUsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDNjX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGJ0M2NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJYnQzY19pbmZvX3QgKmluZm87Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCS8qIENyZWF0ZSBuZXcgaW5mbyBkZXZpY2UgKi8KIAlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGluayA9ICZpbmZvLT5saW5rOworCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CkBAIC02NzAsMzEgKzY2NiwyMSBAQAogCWxpbmstPmlycS5JbnN0YW5jZSA9IGluZm87CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlidDNjX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBidDNjX2NvbmZpZyhsaW5rKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBidDNjX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBidDNjX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlidDNjX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlidDNjX3JlbGVhc2UobGluayk7Ci0KKwlidDNjX3JlbGVhc2UobGluayk7CiAJa2ZyZWUoaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpbnQgaTsKIApAQCAtNzA1LDMwICs2OTEsMjggQEAKIAlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQogCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKIAlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBuZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaWYgKHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQogCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKIAlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIHZvaWQgYnQzY19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYnQzY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RhdGljIGtpb19hZGRyX3QgYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJYnQzY19pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXR1cGxlX3QgdHVwbGU7CiAJdV9zaG9ydCBidWZbMjU2XTsKIAljaXNwYXJzZV90IHBhcnNlOwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIGosIHRyeSwgbGFzdF9yZXQsIGxhc3RfZm47CiAKIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwpAQCAtNzM4LDcgKzcyMiw3IEBACiAKIAkvKiBHZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciBpbmZvcm1hdGlvbiAqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JbGFzdF9yZXQgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAlpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgewogCQlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CkBAIC03NDYsMTEgKzczMCw2IEBACiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25maWcpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZmlnLlZjYzsKLQogCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLiAqLwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwpAQCAtNzU5LDU5ICs3MzgsNTkgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KIAlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJaWYgKGkgIT0gQ1NfU1VDQ0VTUykKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCQlpZiAoY2YtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKwkJCQlsaW5rLT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQkJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSA4KSAmJiAoY2YtPmlvLndpblswXS5iYXNlICE9IDApKSB7CiAJCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJCWdvdG8gZm91bmRfcG9ydDsKIAkJCX0KIG5leHRfZW50cnk6Ci0JCQlpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAkJfQogCX0KIAogCS8qIFNlY29uZCBwYXNzOiB0cnkgdG8gZmluZCBhbiBlbnRyeSB0aGF0IGlzbid0IHBpY2t5IGFib3V0CiAJICAgaXRzIGJhc2UgYWRkcmVzcywgdGhlbiB0cnkgdG8gZ3JhYiBhbnkgc3RhbmRhcmQgc2VyaWFsIHBvcnQKIAkgICBhZGRyZXNzLCBhbmQgZmluYWxseSB0cnkgdG8gZ2V0IGFueSBmcmVlIHBvcnQuICovCi0JaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCWkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNmLT5pby5ud2luID4gMCkgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKIAkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAJCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CiAJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQl9CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIGZvdW5kX3BvcnQ6CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlCVF9FUlIoIk5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kIik7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTgxOSw1NSArNzk4LDI2IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJc3RyY3B5KGluZm8tPm5vZGUuZGV2X25hbWUsIGluZm8tPmhkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogZmFpbGVkOgogCWJ0M2NfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogCi1zdGF0aWMgdm9pZCBidDNjX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGJ0M2NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlidDNjX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkKLQkJYnQzY19jbG9zZShpbmZvKTsKKwlidDNjX2Nsb3NlKGluZm8pOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBidDNjX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBidDNjX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAoREVWX09LKGxpbmspKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAKQEAgLTg4MiwxMSArODMyLDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiYnQzY19jcyIsCiAJfSwKLQkucHJvYmUJCT0gYnQzY19hdHRhY2gsCisJLnByb2JlCQk9IGJ0M2NfcHJvYmUsCiAJLnJlbW92ZQkJPSBidDNjX2RldGFjaCwKIAkuaWRfdGFibGUJPSBidDNjX2lkcywKLQkuc3VzcGVuZAk9IGJ0M2Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGJ0M2NfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9idDNjX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCmluZGV4IDdiNGJmZjQuLjljZTRjOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC02OCw3ICs2OCw3IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgYnR1YXJ0X2luZm9fdCB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKQEAgLTg0LDggKzg0LDggQEAKIH0gYnR1YXJ0X2luZm9fdDsKIAogCi1zdGF0aWMgdm9pZCBidHVhcnRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgYnR1YXJ0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGJ0dWFydF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYnR1YXJ0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgdm9pZCBidHVhcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTE0NiwxMyArMTQ2LDEzIEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCiAJCWNsZWFyX2JpdChYTUlUX1dBS0VVUCwgJihpbmZvLT50eF9zdGF0ZSkpOwogCi0JCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpCisJCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGluZm8tPnBfZGV2KSkKIAkJCXJldHVybjsKIAogCQlpZiAoIShza2IgPSBza2JfZGVxdWV1ZSgmKGluZm8tPnR4cSkpKSkKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWRvIHsKIAkJaW5mby0+aGRldi0+c3RhdC5ieXRlX3J4Kys7CkBAIC0zMDEsNyArMzAxLDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCYoaW5mby0+bG9jayksIGZsYWdzKTsKIApAQCAtNDgxLDcgKzQ4MSw3IEBACiBzdGF0aWMgaW50IGJ0dWFydF9vcGVuKGJ0dWFydF9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmKGluZm8tPmxvY2spKTsKQEAgLTU1MCw3ICs1NTAsNyBAQAogc3RhdGljIGludCBidHVhcnRfY2xvc2UoYnR1YXJ0X2luZm9fdCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5saW5rLmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGluZm8tPmhkZXY7CiAKIAlpZiAoIWhkZXYpCkBAIC01NzYsMTcgKzU3NiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0dWFydF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBidHVhcnRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJYnR1YXJ0X2luZm9fdCAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJLyogQ3JlYXRlIG5ldyBpbmZvIGRldmljZSAqLwogCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKQEAgLTU5OCwzMSArNTk3LDIxIEBACiAJbGluay0+aXJxLkluc3RhbmNlID0gaW5mbzsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWJ0dWFydF9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYnR1YXJ0X2NvbmZpZyhsaW5rKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBidHVhcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGJ0dWFydF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJYnR1YXJ0X2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlidHVhcnRfcmVsZWFzZShsaW5rKTsKLQorCWJ0dWFydF9yZWxlYXNlKGxpbmspOwogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGk7CiAKQEAgLTYzMywzMCArNjIyLDI4IEBACiAJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCWlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0dWFydF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYnR1YXJ0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdGF0aWMga2lvX2FkZHJfdCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlidHVhcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAl0dXBsZV90IHR1cGxlOwogCXVfc2hvcnQgYnVmWzI1Nl07CiAJY2lzcGFyc2VfdCBwYXJzZTsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwotCWNvbmZpZ19pbmZvX3QgY29uZmlnOwogCWludCBpLCBqLCB0cnksIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKQEAgLTY2Niw3ICs2NTMsNyBAQAogCiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJbGFzdF9yZXQgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtNjc0LDExICs2NjEsNiBAQAogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZmlnKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmZpZy5WY2M7Ci0KIAkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4gKi8KIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CkBAIC02ODcsMjkgKzY2OSwyOSBAQAogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogCS8qIFR3byB0cmllczogd2l0aG91dCBJTyBhbGlhc2VzLCB0aGVuIHdpdGggYWxpYXNlcyAqLwogCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspIHsKLQkJaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCQlpZiAoaSAhPSBDU19TVUNDRVNTKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJCWlmIChjZi0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCQkJCWxpbmstPmNvbmYuVnBwID0gY2YtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCQlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKIAkJCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwogCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9ICh0cnkgPT0gMCkgPyAxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQkJZ290byBmb3VuZF9wb3J0OwogCQkJfQogbmV4dF9lbnRyeToKLQkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQkJaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQl9CiAJfQogCiAJLyogU2Vjb25kIHBhc3M6IHRyeSB0byBmaW5kIGFuIGVudHJ5IHRoYXQgaXNuJ3QgcGlja3kgYWJvdXQKIAkgICBpdHMgYmFzZSBhZGRyZXNzLCB0aGVuIHRyeSB0byBncmFiIGFueSBzdGFuZGFyZCBzZXJpYWwgcG9ydAogCSAgIGFkZHJlc3MsIGFuZCBmaW5hbGx5IHRyeSB0byBnZXQgYW55IGZyZWUgcG9ydC4gKi8KLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKQogCQkgICAgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKQEAgLTcxNywzMCArNjk5LDMwIEBACiAJCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CiAJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKIAkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQl9CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIGZvdW5kX3BvcnQ6CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlCVF9FUlIoIk5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kIik7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTc0OCw1OCArNzMwLDI4IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJc3RyY3B5KGluZm8tPm5vZGUuZGV2X25hbWUsIGluZm8tPmhkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogZmFpbGVkOgogCWJ0dWFydF9yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfQogCiAKLXN0YXRpYyB2b2lkIGJ0dWFydF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBidHVhcnRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlidHVhcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKQotCQlidHVhcnRfY2xvc2UoaW5mbyk7CisJYnR1YXJ0X2Nsb3NlKGluZm8pOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgYnR1YXJ0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBidHVhcnRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChERVZfT0sobGluaykpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgYnR1YXJ0X2lkc1tdID0gewogCS8qIGRvbid0IHVzZSB0aGlzIGRyaXZlci4gVXNlIHNlcmlhbF9jcyArIGhjaV91YXJ0IGluc3RlYWQgKi8KIAlQQ01DSUFfREVWSUNFX05VTEwKQEAgLTgxMSwxMSArNzYzLDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiYnR1YXJ0X2NzIiwKIAl9LAotCS5wcm9iZQkJPSBidHVhcnRfYXR0YWNoLAorCS5wcm9iZQkJPSBidHVhcnRfcHJvYmUsCiAJLnJlbW92ZQkJPSBidHVhcnRfZGV0YWNoLAogCS5pZF90YWJsZQk9IGJ0dWFydF9pZHMsCi0JLnN1c3BlbmQJPSBidHVhcnRfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGJ0dWFydF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2J0dWFydF9jcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCmluZGV4IDA0NDliYzQuLmE3MWEyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCBkdGwxX2luZm9fdCB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKQEAgLTg3LDggKzg3LDggQEAKIH0gZHRsMV9pbmZvX3Q7CiAKIAotc3RhdGljIHZvaWQgZHRsMV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBkdGwxX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGR0bDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGR0bDFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIGR0bDFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTE1MywxMyArMTUzLDEzIEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCQlyZWdpc3RlciBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlyZWdpc3RlciBpbnQgbGVuOwogCiAJCWNsZWFyX2JpdChYTUlUX1dBS0VVUCwgJihpbmZvLT50eF9zdGF0ZSkpOwogCi0JCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpCisJCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGluZm8tPnBfZGV2KSkKIAkJCXJldHVybjsKIAogCQlpZiAoIShza2IgPSBza2JfZGVxdWV1ZSgmKGluZm8tPnR4cSkpKSkKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCWRvIHsKIAkJaW5mby0+aGRldi0+c3RhdC5ieXRlX3J4Kys7CkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTQ1OCw3ICs0NTgsNyBAQAogc3RhdGljIGludCBkdGwxX29wZW4oZHRsMV9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+bGluay5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmKGluZm8tPmxvY2spKTsKQEAgLTUwNCw3ICs1MDQsNyBAQAogCW91dGIoVUFSVF9MQ1JfV0xFTjgsIGlvYmFzZSArIFVBUlRfTENSKTsJLyogUmVzZXQgRExBQiAqLwogCW91dGIoKFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIpLCBpb2Jhc2UgKyBVQVJUX01DUik7CiAKLQlpbmZvLT5yaV9sYXRjaCA9IGluYihpbmZvLT5saW5rLmlvLkJhc2VQb3J0MSArIFVBUlRfTVNSKSAmIFVBUlRfTVNSX1JJOworCWluZm8tPnJpX2xhdGNoID0gaW5iKGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDEgKyBVQVJUX01TUikgJiBVQVJUX01TUl9SSTsKIAogCS8qIFR1cm4gb24gaW50ZXJydXB0cyAqLwogCW91dGIoVUFSVF9JRVJfUkxTSSB8IFVBUlRfSUVSX1JESSB8IFVBUlRfSUVSX1RIUkksIGlvYmFzZSArIFVBUlRfSUVSKTsKQEAgLTUyOSw3ICs1MjksNyBAQAogc3RhdGljIGludCBkdGwxX2Nsb3NlKGR0bDFfaW5mb190ICppbmZvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPmxpbmsuaW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaW5mby0+aGRldjsKIAogCWlmICghaGRldikKQEAgLTU1NSwxNyArNTU1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHRsMV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBkdGwxX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWR0bDFfaW5mb190ICppbmZvOwotCWRldl9saW5rX3QgKmxpbms7CiAKIAkvKiBDcmVhdGUgbmV3IGluZm8gZGV2aWNlICovCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxpbmsgPSAmaW5mby0+bGluazsKKwlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87CiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwpAQCAtNTc3LDMxICs1NzYsMjIgQEAKIAlsaW5rLT5pcnEuSW5zdGFuY2UgPSBpbmZvOwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotCWxpbmstPmNvbmYuVmNjID0gNTA7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JZHRsMV9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZHRsMV9jb25maWcobGluayk7CiB9CiAKIAotc3RhdGljIHZvaWQgZHRsMV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgZHRsMV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJZHRsMV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJZHRsMV9yZWxlYXNlKGxpbmspOworCWR0bDFfcmVsZWFzZShsaW5rKTsKIAogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGk7CiAKQEAgLTYxMiwyOSArNjAyLDI3IEBACiAJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCWlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKIAkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR0bDFfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGR0bDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJZHRsMV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXR1cGxlX3QgdHVwbGU7CiAJdV9zaG9ydCBidWZbMjU2XTsKIAljaXNwYXJzZV90IHBhcnNlOwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKQEAgLTY0NCw3ICs2MzIsNyBAQAogCiAJLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJbGFzdF9yZXQgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwpAQCAtNjUyLDExICs2NDAsNiBAQAogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZmlnKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmZpZy5WY2M7Ci0KIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CkBAIC02NjUsMzQgKzY0OCwzNCBAQAogCiAJLyogTG9vayBmb3IgYSBnZW5lcmljIGZ1bGwtc2l6ZWQgd2luZG93ICovCiAJbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKIAkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBjZi0+aW8ud2luWzBdLmxlbjsJLyp5byAqLwogCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJYnJlYWs7CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl9CiAKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTcwMCw1NSArNjgzLDI2IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJc3RyY3B5KGluZm8tPm5vZGUuZGV2X25hbWUsIGluZm8tPmhkZXYtPm5hbWUpOwotCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogZmFpbGVkOgogCWR0bDFfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogCi1zdGF0aWMgdm9pZCBkdGwxX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGR0bDFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlkdGwxX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkKLQkJZHRsMV9jbG9zZShpbmZvKTsKKwlkdGwxX2Nsb3NlKGluZm8pOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLX0KLQotc3RhdGljIGludCBkdGwxX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkdGwxX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAoREVWX09LKGxpbmspKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAKQEAgLTc2NSwxMSArNzE5LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiZHRsMV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gZHRsMV9hdHRhY2gsCisJLnByb2JlCQk9IGR0bDFfcHJvYmUsCiAJLnJlbW92ZQkJPSBkdGwxX2RldGFjaCwKIAkuaWRfdGFibGUJPSBkdGwxX2lkcywKLQkuc3VzcGVuZAk9IGR0bDFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGR0bDFfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9kdGwxX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMgYi9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMKaW5kZXggY2U0YTFjZS4uZWMwMDQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9henRjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vYXp0Y2QuYwpAQCAtMTc2Myw3ICsxNzYzLDcgQEAKIAkJCQlyZWxlYXNlX3JlZ2lvbihhenRfcG9ydCwgNCk7CiAJCQl9CiAJCX0KLQkJaWYgKChhenRfcG9ydF9hdXRvW2ldID09IDApIHx8IChpID09IDE2KSkgeworCQlpZiAoKGkgPT0gMTYpIHx8IChhenRfcG9ydF9hdXRvW2ldID09IDApKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJhenRjZDogbm8gQVpURUNIIENELVJPTSBkcml2ZSBmb3VuZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCA4ODljYWQwLi43OGQ5MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtMjkxLDcgKzI5MSw3IEBACiAKIGNvbmZpZyBSSU8KIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFJJTyBzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTcGVjaWFsaXggUklPLCBhIHNtYXJ0IHNlcmlhbCBjYXJkIHdoaWNoCiAJICBkcml2ZXMgYW4gb3V0Ym9hcmQgYm94IHRoYXQgY2FuIHN1cHBvcnQgdXAgdG8gMTI4IHBvcnRzLiAgUHJvZHVjdApAQCAtODA1LDEwICs4MDUsNiBAQAogCSAgU2Ftc3VuZyBTM0MyNDEwLiBUaGlzIGNhbiBwcm92aWRlIHBlcmlvZGljIGludGVycnVwdCByYXRlcwogCSAgZnJvbSAxSHogdG8gNjRIeiBmb3IgdXNlciBwcm9ncmFtcywgYW5kIHdha2V1cCBmcm9tIEFsYXJtLgogCi1jb25maWcgUlRDX1ZSNDFYWAotCXRyaXN0YXRlICJORUMgVlI0MTAwIHNlcmllcyBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9WUjQxWFgKLQogY29uZmlnIENPQkFMVF9MQ0QKIAlib29sICJTdXBwb3J0IGZvciBDb2JhbHQgTENEIgogCWRlcGVuZHMgb24gTUlQU19DT0JBTFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQppbmRleCBhNzNjYjQ5Li5mYjkxOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC00MSw5ICs0MSw5IEBACiBvYmotJChDT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUwpICs9IGFtaXNlcmlhbC5vCiBvYmotJChDT05GSUdfU1gpCQkrPSBzeC5vIGdlbmVyaWNfc2VyaWFsLm8KIG9iai0kKENPTkZJR19SSU8pCQkrPSByaW8vIGdlbmVyaWNfc2VyaWFsLm8KLW9iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmNfY29uc29sZS5vCiBvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y192aW8ubyBodnNpLm8KIG9iai0kKENPTkZJR19IVkNfUlRBUykJCSs9IGh2Y19ydGFzLm8KK29iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmNfY29uc29sZS5vCiBvYmotJChDT05GSUdfUkFXX0RSSVZFUikJKz0gcmF3Lm8KIG9iai0kKENPTkZJR19TR0lfU05TQykJCSs9IHNuc2MubyBzbnNjX2V2ZW50Lm8KIG9iai0kKENPTkZJR19NTVRJTUVSKQkJKz0gbW10aW1lci5vCkBAIC02Nyw3ICs2Nyw2IEBACiBvYmotJChDT05GSUdfU0dJX0lQMjdfUlRDKQkrPSBpcDI3LXJ0Yy5vCiBvYmotJChDT05GSUdfRFMxMzAyKQkJKz0gZHMxMzAyLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1JUQykJKz0gczNjMjQxMC1ydGMubwotb2JqLSQoQ09ORklHX1JUQ19WUjQxWFgpCSs9IHZyNDF4eF9ydGMubwogaWZlcSAoJChDT05GSUdfR0VORVJJQ19OVlJBTSkseSkKICAgb2JqLSQoQ09ORklHX05WUkFNKQkrPSBnZW5lcmljX252cmFtLm8KIGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCAwYjljZjljLi43Yzg4YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiAKIGNvbmZpZyBBR1BfU0lTCiAJdHJpc3RhdGUgIlNpUyBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCisJZGVwZW5kcyBvbiBBR1AKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCiAJICBYIG9uIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIGNoaXBzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggMzY1MTdkNC4uYWMzYzMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC02MTcsNiArNjE3LDkgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlZJRElBKQorCQluZm9yY2UzX2FncF9pbml0KHBkZXYpOworCiAJcmV0dXJuIGFtZF84MTUxX2NvbmZpZ3VyZSgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCBmZWQwYTg3Li44NmE5NjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTY0LDYgKzY0LDEyIEBACiAJey5tYXNrID0gMHgwMDAwMDAwMSwgLnR5cGUgPSAwfQogfTsKIAorLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIG1hc2tfbWVtb3J5KCkgZm9yIHRoaXMgY2hpcHNldC4uLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVmZmljZW9uX21hc2tfbWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gYWRkciB8IDB4MDAwMDAwMDE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fbHZsMiBlZmZpY2Vvbl9nZW5lcmljX3NpemVzWzRdID0KIHsKIAl7MjU2LCA2NTUzNiwgMH0sCkBAIC0yNTEsNyArMjU3LDcgQEAKIAlsYXN0X3BhZ2UgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWludCBpbmRleCA9IHBnX3N0YXJ0ICsgaTsKLQkJdW5zaWduZWQgbG9uZyBpbnNlcnQgPSBtZW0tPm1lbW9yeVtpXTsKKwkJdW5zaWduZWQgbG9uZyBpbnNlcnQgPSBlZmZpY2Vvbl9tYXNrX21lbW9yeShtZW0tPm1lbW9yeVtpXSk7CiAKIAkJcGFnZSA9ICh1bnNpZ25lZCBpbnQgKikgZWZmaWNlb25fcHJpdmF0ZS5sMV90YWJsZVtpbmRleCA+PiAxMF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCmluZGV4IDhjNGM2ZWYuLjkwN2ZiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAJCQlpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZVtzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQpLTFdID0gJ1wwJzsKIAkJCW1hdGNoID0gKHN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgIkhXUDAwMDEiKSA9PSAwKTsKLQkJCUFDUElfTUVNX0ZSRUUoaW5mbyk7CisJCQlrZnJlZShpbmZvKTsKIAkJCWlmIChtYXRjaCkgewogCQkJCXN0YXR1cyA9IGhwX2FjcGlfY3NyX3NwYWNlKGhhbmRsZSwgJnNiYV9ocGEsICZsZW5ndGgpOwogCQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOTdiMGE4OS4uYjhlYzI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTM0NSw2ICszNDUsMTIgQEAKIAkJLmNoaXBzZXRfbmFtZQk9ICJQVDg4MCIsCiAJfSwKIAorCS8qIFBUODgwIFVsdHJhICovCisJeworCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwKKwkJLmNoaXBzZXRfbmFtZQk9ICJQVDg4MCBVbHRyYSIsCisJfSwKKwogCS8qIFBUODkwICovCiAJewogCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODc4M18wLApAQCAtNTExLDYgKzUxNyw3IEBACiAJSUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wKSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwKSwKKwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBKSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IDkyN2E1YmIuLmEzNzBlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlpZiAoIWJvYXJkbm8pCiAJCWJvYXJkbm8gPSByZWFkYihsb2MgKyBOVU1DQVJEX09XTkVSX1RPX1BDKTsKIAotCWlmICghYm9hcmRubyAmJiBib2FyZG5vID4gTUFYX0JPQVJEKSB7CisJaWYgKCFib2FyZG5vIHx8IGJvYXJkbm8gPiBNQVhfQk9BUkQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQm9hcmQgIyVkIChhdCAweCVseCkgaXMgb3V0IG9mIHJhbmdlICgxIDw9IHggPD0gJWQpLlxuIiwKIAkJICAgICAgIGJvYXJkbm8sIHBoeXNsb2MsIE1BWF9CT0FSRCk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2NzNTUzNV9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwppbmRleCA1ZDcyZjUwLi40NmQ2NjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpAQCAtMjQxLDkgKzI0MSwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGNzNTUzNV9ncGlvX2NsZWFudXAodm9pZCkKIHsKIAlkZXZfdCBkZXZfaWQgPSBNS0RFVihtYWpvciwgMCk7CisKKwljZGV2X2RlbCgmY3M1NTM1X2dwaW9fY2Rldik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl9pZCwgQ1M1NTM1X0dQSU9fQ09VTlQpOwotCWlmIChncGlvX2Jhc2UgIT0gMCkKLQkJcmVsZWFzZV9yZWdpb24oZ3Bpb19iYXNlLCBDUzU1MzVfR1BJT19TSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUpOwogfQogCiBtb2R1bGVfaW5pdChjczU1MzVfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKaW5kZXggZWRjNzJhNi4uY2I3NmU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKQEAgLTgxNSw4ICs4MTUsNiBAQAogZXh0ZXJuIHZvaWQgKmRybV9yZWFsbG9jKHZvaWQgKm9sZHB0LCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUsIGludCBhcmVhKTsKIGV4dGVybiB2b2lkICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJIGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSBkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldik7CiAKIGV4dGVybiBEUk1fQUdQX01FTSAqZHJtX2FsbG9jX2FncChkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBwYWdlcywgdTMyIHR5cGUpOwpAQCAtODkxLDcgKzg4OSw2IEBACiAJCQkJLyogQnVmZmVyIG1hbmFnZW1lbnQgc3VwcG9ydCAoZHJtX2J1ZnMuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfYWdwKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KTsKIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfcGNpKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KTsKLWV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfZmIoZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfZGVzY190ICpyZXF1ZXN0KTsKIGV4dGVybiBpbnQgZHJtX2FkZG1hcChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLCBkcm1fbWFwX3R5cGVfdCB0eXBlLAogCQkgICAgICBkcm1fbWFwX2ZsYWdzX3QgZmxhZ3MsIGRybV9sb2NhbF9tYXBfdCAqKiBtYXBfcHRyKTsKQEAgLTEwMjIsMTEgKzEwMTksMTMgQEAKIAltYXAtPmhhbmRsZSA9IGRybV9pb3JlbWFwKG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUsIGRldik7CiB9CiAKKyNpZiAwCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2lvcmVtYXBfbm9jYWNoZShzdHJ1Y3QgZHJtX21hcCAqbWFwLAogCQkJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAltYXAtPmhhbmRsZSA9IGRybV9pb3JlbWFwX25vY2FjaGUobWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgZGV2KTsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9tYXAgKm1hcCwKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9hZ3BzdXBwb3J0LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9hZ3BzdXBwb3J0LmMKaW5kZXggZmFiYzkzMC4uNDBiZmQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYWdwc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2FncHN1cHBvcnQuYwpAQCAtNTAzLDggKzUwMyw2IEBACiAJcmV0dXJuIGFncF9iaW5kX21lbW9yeShoYW5kbGUsIHN0YXJ0KTsKIH0KIAotRVhQT1JUX1NZTUJPTChkcm1fYWdwX2JpbmRfbWVtb3J5KTsKLQogLyoqIENhbGxzIGFncF91bmJpbmRfbWVtb3J5KCkgKi8KIGludCBkcm1fYWdwX3VuYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKaW5kZXggOGE5Y2YxMi4uMDA2YjA2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYwpAQCAtMzg2LDcgKzM4Niw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX3JtbWFwX2xvY2tlZCk7CiAKIGludCBkcm1fcm1tYXAoZHJtX2RldmljZV90ICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKQogewpAQCAtMzk4LDcgKzM5Nyw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChkcm1fcm1tYXApOwogCiAvKiBUaGUgcm1tYXAgaW9jdGwgYXBwZWFycyB0byBiZSB1bm5lY2Vzc2FyeS4gIEFsbCBtYXBwaW5ncyBhcmUgdG9ybiBkb3duIG9uCiAgKiB0aGUgbGFzdCBjbG9zZSBvZiB0aGUgZGV2aWNlLCBhbmQgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNsZWFudXAgd2hlbiB0aGluZ3MKQEAgLTEwNTMsNyArMTA1MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBkcm1fYWRkYnVmc19mYihkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9idWZfZGVzY190ICogcmVxdWVzdCkKK3N0YXRpYyBpbnQgZHJtX2FkZGJ1ZnNfZmIoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX2Rlc2NfdCAqIHJlcXVlc3QpCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAJZHJtX2J1Zl9lbnRyeV90ICplbnRyeTsKQEAgLTEyMTIsNyArMTIxMCw2IEBACiAJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChkcm1fYWRkYnVmc19mYik7CiAKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCmluZGV4IGRjNmJiZTguLjNjMGI4ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCkBAIC03NSw4ICs3NSw4IEBACiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCldID0ge2RybV9zZXRzYXJlYWN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYKV0gPSB7ZHJtX2dldHNhcmVhY3R4LCBEUk1fQVVUSH0sCiAKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BRERfQ1RYKV0gPSB7ZHJtX2FkZGN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9STV9DVFgpXSA9IHtkcm1fcm1jdHgsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUREX0NUWCldID0ge2RybV9hZGRjdHgsIERSTV9BVVRIfERSTV9ST09UX09OTFl9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1JNX0NUWCldID0ge2RybV9ybWN0eCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWX0sCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfTU9EX0NUWCldID0ge2RybV9tb2RjdHgsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWX0sCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX0NUWCldID0ge2RybV9nZXRjdHgsIERSTV9BVVRIfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TV0lUQ0hfQ1RYKV0gPSB7ZHJtX3N3aXRjaGN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKaW5kZXggZGRkZjhkZS4uN2UzMzE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMKQEAgLTgwLDYgKzgwLDcxIEBACiB9CiAKICNpZiBfX09TX0hBU19BR1AKKy8qCisgKiBGaW5kIHRoZSBkcm1fbWFwIHRoYXQgY292ZXJzIHRoZSByYW5nZSBbb2Zmc2V0LCBvZmZzZXQrc2l6ZSkuCisgKi8KK3N0YXRpYyBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7CisJZHJtX21hcF90ICptYXA7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXYtPm1hcGxpc3QtPmhlYWQpIHsKKwkJcl9saXN0ID0gKGRybV9tYXBfbGlzdF90ICopIGxpc3Q7CisJCW1hcCA9IHJfbGlzdC0+bWFwOworCQlpZiAoIW1hcCkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFwLT5vZmZzZXQgPD0gb2Zmc2V0CisJCSAgICAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSkKKwkJCXJldHVybiBtYXA7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqYWdwX3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICBkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyAqcGh5c19hZGRyX21hcCwgaSwgbnVtX3BhZ2VzID0KKwkgICAgUEFHRV9BTElHTihzaXplKSAvIFBBR0VfU0laRTsKKwlzdHJ1Y3QgZHJtX2FncF9tZW0gKmFncG1lbTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VfbWFwOworCXZvaWQgKmFkZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworI2lmZGVmIF9fYWxwaGFfXworCW9mZnNldCAtPSBkZXYtPmhvc2UtPm1lbV9zcGFjZS0+c3RhcnQ7CisjZW5kaWYKKworCWZvciAoYWdwbWVtID0gZGV2LT5hZ3AtPm1lbW9yeTsgYWdwbWVtOyBhZ3BtZW0gPSBhZ3BtZW0tPm5leHQpCisJCWlmIChhZ3BtZW0tPmJvdW5kIDw9IG9mZnNldAorCQkgICAgJiYgKGFncG1lbS0+Ym91bmQgKyAoYWdwbWVtLT5wYWdlcyA8PCBQQUdFX1NISUZUKSkgPj0KKwkJICAgIChvZmZzZXQgKyBzaXplKSkKKwkJCWJyZWFrOworCWlmICghYWdwbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT0ssIHdlJ3JlIG1hcHBpbmcgQUdQIHNwYWNlIG9uIGEgY2hpcHNldC9wbGF0Zm9ybSBvbiB3aGljaCBtZW1vcnkgYWNjZXNzZXMgYnkKKwkgKiB0aGUgQ1BVIGRvIG5vdCBnZXQgcmVtYXBwZWQgYnkgdGhlIEdBUlQuICBXZSBmaXggdGhpcyBieSB1c2luZyB0aGUga2VybmVsJ3MKKwkgKiBwYWdlLXRhYmxlIGluc3RlYWQgKHRoYXQncyBwcm9iYWJseSBmYXN0ZXIgYW55aG93Li4uKS4KKwkgKi8KKwkvKiBub3RlOiB1c2Ugdm1hbGxvYygpIGJlY2F1c2UgbnVtX3BhZ2VzIGNvdWxkIGJlIGxhcmdlLi4uICovCisJcGFnZV9tYXAgPSB2bWFsbG9jKG51bV9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJaWYgKCFwYWdlX21hcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwaHlzX2FkZHJfbWFwID0KKwkgICAgYWdwbWVtLT5tZW1vcnktPm1lbW9yeSArIChvZmZzZXQgLSBhZ3BtZW0tPmJvdW5kKSAvIFBBR0VfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpCisJCXBhZ2VfbWFwW2ldID0gcGZuX3RvX3BhZ2UocGh5c19hZGRyX21hcFtpXSA+PiBQQUdFX1NISUZUKTsKKwlhZGRyID0gdm1hcChwYWdlX21hcCwgbnVtX3BhZ2VzLCBWTV9JT1JFTUFQLCBQQUdFX0FHUCk7CisJdmZyZWUocGFnZV9tYXApOworCisJcmV0dXJuIGFkZHI7Cit9CisKIC8qKiBXcmFwcGVyIGFyb3VuZCBhZ3BfYWxsb2NhdGVfbWVtb3J5KCkgKi8KIERSTV9BR1BfTUVNICpkcm1fYWxsb2NfYWdwKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSkKIHsKQEAgLTEwMyw1ICsxNjgsNzQgQEAKIHsKIAlyZXR1cm4gZHJtX2FncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CisKKyNlbHNlICAvKiAgX19PU19IQVNfQUdQICAqLworCitzdGF0aWMgaW5saW5lIGRybV9tYXBfdCAqZHJtX2xvb2t1cF9tYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgZHJtX2RldmljZV90ICogZGV2KQoreworCXJldHVybiBOVUxMOworfQorCiAjZW5kaWYJCQkJLyogYWdwICovCisKK3ZvaWQgKmRybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJZHJtX2RldmljZV90ICogZGV2KQoreworCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7CisJCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOworCisJCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQorCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7CisJfQorCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9pb3JlbWFwKTsKKworI2lmIDAKK3ZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQoreworCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7CisJCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOworCisJCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQorCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7CisJfQorCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KKyNlbmRpZiAgLyogIDAgICovCisKK3ZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgZHJtX2RldmljZV90ICogZGV2KQoreworCS8qCisJICogVGhpcyBpcyBhIGJpdCB1Z2x5LiAgSXQgd291bGQgYmUgbXVjaCBjbGVhbmVyIGlmIHRoZSBEUk0gQVBJIHdvdWxkIHVzZSBzZXBhcmF0ZQorCSAqIHJvdXRpbmVzIGZvciBoYW5kbGluZyBtYXBwaW5ncyBpbiB0aGUgQUdQIHNwYWNlLiAgSG9wZWZ1bGx5IHRoaXMgY2FuIGJlIGRvbmUgaW4KKwkgKiBhIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgaW50ZXJmYWNlLi4uCisJICovCisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUKKwkgICAgJiYgKCh1bnNpZ25lZCBsb25nKXB0ID49IFZNQUxMT0NfU1RBUlQKKwkJJiYgKHVuc2lnbmVkIGxvbmcpcHQgPCBWTUFMTE9DX0VORCkpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJCWRybV9tYXBfdCAqbWFwOworCisJCW9mZnNldCA9IGRybV9mb2xsb3dfcGFnZShwdCkgfCAoKHVuc2lnbmVkIGxvbmcpcHQgJiB+UEFHRV9NQVNLKTsKKwkJbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOworCQlpZiAobWFwICYmIG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkgeworCQkJdnVubWFwKHB0KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlvdW5tYXAocHQpOworfQorRVhQT1JUX1NZTUJPTChkcm1faW9yZW1hcGZyZWUpOworCiAjZW5kaWYJCQkJLyogZGVidWdfbWVtb3J5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCmluZGV4IDM3MzJhNjEuLjcxNGQ5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCkBAIC01Nyw3MSArNTcsNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLS8qCi0gKiBGaW5kIHRoZSBkcm1fbWFwIHRoYXQgY292ZXJzIHRoZSByYW5nZSBbb2Zmc2V0LCBvZmZzZXQrc2l6ZSkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZHJtX21hcF90ICpkcm1fbG9va3VwX21hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OwotCWRybV9tYXBfdCAqbWFwOwotCi0JbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7Ci0JCXJfbGlzdCA9IChkcm1fbWFwX2xpc3RfdCAqKSBsaXN0OwotCQltYXAgPSByX2xpc3QtPm1hcDsKLQkJaWYgKCFtYXApCi0JCQljb250aW51ZTsKLQkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldAotCQkgICAgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkpCi0JCQlyZXR1cm4gbWFwOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQl1bnNpZ25lZCBsb25nICpwaHlzX2FkZHJfbWFwLCBpLCBudW1fcGFnZXMgPQotCSAgICBQQUdFX0FMSUdOKHNpemUpIC8gUEFHRV9TSVpFOwotCXN0cnVjdCBkcm1fYWdwX21lbSAqYWdwbWVtOwotCXN0cnVjdCBwYWdlICoqcGFnZV9tYXA7Ci0Jdm9pZCAqYWRkcjsKLQotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCi0jaWZkZWYgX19hbHBoYV9fCi0Jb2Zmc2V0IC09IGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKLSNlbmRpZgotCi0JZm9yIChhZ3BtZW0gPSBkZXYtPmFncC0+bWVtb3J5OyBhZ3BtZW07IGFncG1lbSA9IGFncG1lbS0+bmV4dCkKLQkJaWYgKGFncG1lbS0+Ym91bmQgPD0gb2Zmc2V0Ci0JCSAgICAmJiAoYWdwbWVtLT5ib3VuZCArIChhZ3BtZW0tPnBhZ2VzIDw8IFBBR0VfU0hJRlQpKSA+PQotCQkgICAgKG9mZnNldCArIHNpemUpKQotCQkJYnJlYWs7Ci0JaWYgKCFhZ3BtZW0pCi0JCXJldHVybiBOVUxMOwotCi0JLyoKLQkgKiBPSywgd2UncmUgbWFwcGluZyBBR1Agc3BhY2Ugb24gYSBjaGlwc2V0L3BsYXRmb3JtIG9uIHdoaWNoIG1lbW9yeSBhY2Nlc3NlcyBieQotCSAqIHRoZSBDUFUgZG8gbm90IGdldCByZW1hcHBlZCBieSB0aGUgR0FSVC4gIFdlIGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBrZXJuZWwncwotCSAqIHBhZ2UtdGFibGUgaW5zdGVhZCAodGhhdCdzIHByb2JhYmx5IGZhc3RlciBhbnlob3cuLi4pLgotCSAqLwotCS8qIG5vdGU6IHVzZSB2bWFsbG9jKCkgYmVjYXVzZSBudW1fcGFnZXMgY291bGQgYmUgbGFyZ2UuLi4gKi8KLQlwYWdlX21hcCA9IHZtYWxsb2MobnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKLQlpZiAoIXBhZ2VfbWFwKQotCQlyZXR1cm4gTlVMTDsKLQotCXBoeXNfYWRkcl9tYXAgPQotCSAgICBhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5ICsgKG9mZnNldCAtIGFncG1lbS0+Ym91bmQpIC8gUEFHRV9TSVpFOwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKLQkJcGFnZV9tYXBbaV0gPSBwZm5fdG9fcGFnZShwaHlzX2FkZHJfbWFwW2ldID4+IFBBR0VfU0hJRlQpOwotCWFkZHIgPSB2bWFwKHBhZ2VfbWFwLCBudW1fcGFnZXMsIFZNX0lPUkVNQVAsIFBBR0VfQUdQKTsKLQl2ZnJlZShwYWdlX21hcCk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRybV9mb2xsb3dfcGFnZSh2b2lkICp2YWRkcikKIHsKIAlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKCh1bnNpZ25lZCBsb25nKXZhZGRyKTsKQEAgLTEzMywxOCArNjgsNiBAQAogCiAjZWxzZQkJCQkvKiBfX09TX0hBU19BR1AgKi8KIAotc3RhdGljIGlubGluZSBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRybV9mb2xsb3dfcGFnZSh2b2lkICp2YWRkcikKIHsKIAlyZXR1cm4gMDsKQEAgLTE1Miw1MSArNzUsOCBAQAogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCWRybV9kZXZpY2VfdCAqIGRldikKLXsKLQlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSkgewotCQlkcm1fbWFwX3QgKm1hcCA9IGRybV9sb29rdXBfbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKK3ZvaWQgKmRybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJZHJtX2RldmljZV90ICogZGV2KTsKIAotCQlpZiAobWFwICYmIG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkKLQkJCXJldHVybiBhZ3BfcmVtYXAob2Zmc2V0LCBzaXplLCBkZXYpOwotCX0KLQlyZXR1cm4gaW9yZW1hcChvZmZzZXQsIHNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQotewotCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKSB7Ci0JCWRybV9tYXBfdCAqbWFwID0gZHJtX2xvb2t1cF9tYXAob2Zmc2V0LCBzaXplLCBkZXYpOwotCi0JCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQotCQkJcmV0dXJuIGFncF9yZW1hcChvZmZzZXQsIHNpemUsIGRldik7Ci0JfQotCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRybV9pb3JlbWFwZnJlZSh2b2lkICpwdCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgIGRybV9kZXZpY2VfdCAqIGRldikKLXsKLQkvKgotCSAqIFRoaXMgaXMgYSBiaXQgdWdseS4gIEl0IHdvdWxkIGJlIG11Y2ggY2xlYW5lciBpZiB0aGUgRFJNIEFQSSB3b3VsZCB1c2Ugc2VwYXJhdGUKLQkgKiByb3V0aW5lcyBmb3IgaGFuZGxpbmcgbWFwcGluZ3MgaW4gdGhlIEFHUCBzcGFjZS4gIEhvcGVmdWxseSB0aGlzIGNhbiBiZSBkb25lIGluCi0JICogYSBmdXR1cmUgcmV2aXNpb24gb2YgdGhlIGludGVyZmFjZS4uLgotCSAqLwotCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlCi0JICAgICYmICgodW5zaWduZWQgbG9uZylwdCA+PSBWTUFMTE9DX1NUQVJUCi0JCSYmICh1bnNpZ25lZCBsb25nKXB0IDwgVk1BTExPQ19FTkQpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCQlkcm1fbWFwX3QgKm1hcDsKLQotCQlvZmZzZXQgPSBkcm1fZm9sbG93X3BhZ2UocHQpIHwgKCh1bnNpZ25lZCBsb25nKXB0ICYgflBBR0VfTUFTSyk7Ci0JCW1hcCA9IGRybV9sb29rdXBfbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKLQkJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApIHsKLQkJCXZ1bm1hcChwdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlpb3VubWFwKHB0KTsKLX0KK3ZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgZHJtX2RldmljZV90ICogZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeV9kZWJ1Zy5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKaW5kZXggNzg2ODM0MS4uNjU0M2I5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKQEAgLTIyOSw2ICsyMjksNyBAQAogCXJldHVybiBwdDsKIH0KIAorI2lmIDAKIHZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgZHJtX2RldmljZV90ICogZGV2KSB7CiAJdm9pZCAqcHQ7CkBAIC0yNTEsNiArMjUyLDcgQEAKIAlzcGluX3VubG9jaygmZHJtX21lbV9sb2NrKTsKIAlyZXR1cm4gcHQ7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiB2b2lkIGRybV9pb3JlbWFwZnJlZSAodm9pZCAqcHQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KSB7CiAJaW50IGFsbG9jX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYwppbmRleCBiMjhjYTljLi44NmEwZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYwpAQCAtMzcsNiArMzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgImRybVAuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKaW5kZXggNjgwNzNlMS4uOWE4NDJhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYwpAQCAtMjI5LDggKzIyOSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTChkcm1fZ2V0X2Rldik7Ci0KIC8qKgogICogUHV0IGEgZGV2aWNlIG1pbm9yIG51bWJlci4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKaW5kZXggYjEwOGM3ZjkxLi4yNmJkZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCkBAIC03MjMsNyArNzIzLDcgQEAKIAkKIAlkZXZfcHJpdi0+c2NyYXRjaF9hZ2VzW2hlYWRlci5zY3JhdGNoLnJlZ10rKzsKIAkKLQlyZWZfYWdlX2Jhc2UgPSAqKHUzMiAqKiljbWRidWYtPmJ1ZjsKKwlyZWZfYWdlX2Jhc2UgPSAgKHUzMiAqKSh1bnNpZ25lZCBsb25nKSooKHVpbnQ2NF90ICopY21kYnVmLT5idWYpOwogCQogCWNtZGJ1Zi0+YnVmICs9IHNpemVvZih1NjQpOwogCWNtZGJ1Zi0+YnVmc3ogLT0gc2l6ZW9mKHU2NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jCmluZGV4IDYxNTI0MTUuLmMzM2QwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jCkBAIC0xOTYsOSArMTk2LDkgQEAKIHsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgY3VyX2lycV9zZXF1ZW5jZTsKLQlkcm1fdmlhX2lycV90ICpjdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOworCWRybV92aWFfaXJxX3QgKmN1cl9pcnE7CiAJaW50IHJldCA9IDA7Ci0JbWFza2FycmF5X3QgKm1hc2tzID0gZGV2X3ByaXYtPmlycV9tYXNrczsKKwltYXNrYXJyYXlfdCAqbWFza3M7CiAJaW50IHJlYWxfaXJxOwogCiAJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKQEAgLTIyMSw4ICsyMjEsOSBAQAogCQkJICBfX0ZVTkNUSU9OX18sIGlycSk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQotCQotCWN1cl9pcnEgKz0gcmVhbF9pcnE7CisKKwltYXNrcyA9IGRldl9wcml2LT5pcnFfbWFza3M7CisJY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxcyArIHJlYWxfaXJxOwogCiAJaWYgKG1hc2tzW3JlYWxfaXJxXVsyXSAmJiAhZm9yY2Vfc2VxdWVuY2UpIHsKIAkJRFJNX1dBSVRfT04ocmV0LCBjdXJfaXJxLT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCkBAIC0yNDcsMTEgKzI0OCwxMiBAQAogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBzdGF0dXM7Ci0JZHJtX3ZpYV9pcnFfdCAqY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKKwlkcm1fdmlhX2lycV90ICpjdXJfaXJxOwogCWludCBpOwogCiAJRFJNX0RFQlVHKCJkcml2ZXJfaXJxX3ByZWluc3RhbGw6IGRldl9wcml2OiAlcFxuIiwgZGV2X3ByaXYpOwogCWlmIChkZXZfcHJpdikgeworCQljdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOwogCiAJCWRldl9wcml2LT5pcnFfZW5hYmxlX21hc2sgPSBWSUFfSVJRX1ZCTEFOS19FTkFCTEU7CiAJCWRldl9wcml2LT5pcnFfcGVuZGluZ19tYXNrID0gVklBX0lSUV9WQkxBTktfUEVORElORzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kdGxrLmMgYi9kcml2ZXJzL2NoYXIvZHRsay5jCmluZGV4IGEyMjk5MTUuLjg3ZGNhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kdGxrLmMKKysrIGIvZHJpdmVycy9jaGFyL2R0bGsuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJCXJlbGVhc2VfcmVnaW9uKGR0bGtfcG9ydGxpc3RbaV0sIERUTEtfSU9fRVhURU5UKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJcbkRvdWJsZVRhbGsgUEMgLSBub3QgZm91bmRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIkRvdWJsZVRhbGsgUEMgLSBub3QgZm91bmRcbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKaW5kZXggZDNhMmJjMy4uNTg4ZmNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwpAQCAtMjAwLDEzICsyMDAsMTMgQEAKIAkvKiBmaXJzdCB0ZXN0IGFsbG93cyBvcHRpbWl6ZXIgdG8gbnVrZSB0aGlzIGNhc2UgZm9yIDMyLWJpdCBtYWNoaW5lcyAqLwogCWlmIChzaXplb2YgKGludCkgIT0gc2l6ZW9mIChsb25nKSAmJiBjb3VudCA9PSBzaXplb2YgKHVuc2lnbmVkIGludCkpIHsKIAkJdW5zaWduZWQgaW50IHVpZGF0YSA9IGRhdGE7Ci0JCXJldHZhbCA9IHB1dF91c2VyKHVpZGF0YSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYnVmKTsKKwkJcmV0dmFsID0gcHV0X3VzZXIodWlkYXRhLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWJ1ZikgPzoKKwkJCXNpemVvZih1bnNpZ25lZCBpbnQpOwogCX0KIAllbHNlIHsKLQkJcmV0dmFsID0gcHV0X3VzZXIoZGF0YSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYnVmKTsKKwkJcmV0dmFsID0gcHV0X3VzZXIoZGF0YSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYnVmKSA/OgorCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCX0KLQlpZiAoIXJldHZhbCkKLQkJcmV0dmFsID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogIG91dDoKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZ2VuX3J0Y193YWl0LCAmd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHBldC5jIGIvZHJpdmVycy9jaGFyL2hwZXQuYwppbmRleCBlZjE0MGViLi4wNzQ3M2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHBldC5jCisrKyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKQEAgLTkyNSwxMSArOTI1LDggQEAKIAlzdGF0dXMgPSBhY3BpX3Jlc291cmNlX3RvX2FkZHJlc3M2NChyZXMsICZhZGRyKTsKIAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0KLQkJc2l6ZSA9IGFkZHIubWF4aW11bSAtIGFkZHIubWluaW11bSArIDE7CiAJCWhkcC0+aGRfcGh5c19hZGRyZXNzID0gYWRkci5taW5pbXVtOwotCQloZHAtPmhkX2FkZHJlc3MgPSBpb3JlbWFwKGFkZHIubWluaW11bSwgc2l6ZSk7CisJCWhkcC0+aGRfYWRkcmVzcyA9IGlvcmVtYXAoYWRkci5taW5pbXVtLCBhZGRyLmFkZHJlc3NfbGVuZ3RoKTsKIAogCQlpZiAoaHBldF9pc19rbm93bihoZHApKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDB4JWx4IGlzIGJ1c3lcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjcy5jIGIvZHJpdmVycy9jaGFyL2h2Y3MuYwppbmRleCAzMjdiMDBjLi44ZDk3YjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNzLmMKQEAgLTkwNCw3ICs5MDQsNyBAQAogCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGUgdnR5LXNlcnZlciB3YXMgcmVtb3ZlZCBhZnRlciB0aGUgaXJxIHdhcwogCQkgKiByZXF1ZXN0ZWQgYnV0IGJlZm9yZSB3ZSBoYXZlIHRpbWUgdG8gZW5hYmxlIGludGVycnVwdHMuCiAJCSAqLwotCQlpZiAodmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHZkZXYpID09IEhfU3VjY2VzcykKKwkJaWYgKHZpb19lbmFibGVfaW50ZXJydXB0cyh2ZGV2KSA9PSBIX1NVQ0NFU1MpCiAJCQlyZXR1cm4gMDsKIAkJZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkhWQ1M6IGludCBlbmFibGUgZmFpbGVkIGZvciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwppbmRleCA1OGRjZGVlLi4wMDMwY2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9idF9zbS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICgoc2l6ZSA8IDIpIHx8IChzaXplID4gSVBNSV9NQVhfTVNHX0xFTkdUSCkpCisJaWYgKChzaXplIDwgMikgfHwgKHNpemUgPiAoSVBNSV9NQVhfTVNHX0xFTkdUSCAtIDIpKSkKIAkgICAgICAgcmV0dXJuIC0xOwogCiAJaWYgKChidC0+c3RhdGUgIT0gQlRfU1RBVEVfSURMRSkgJiYgKGJ0LT5zdGF0ZSAhPSBCVF9TVEFURV9IT1NFRCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDBkZWQwNDYuLjlmMmY4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC05NDEsNiArOTQxLDcgQEAKIAkJCWxpc3RfZGVsKCZtc2ctPmxpbmspOwogCQkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saW5rLCAmbXNncyk7CiAJCX0KKwkJaW50Zi0+d2FpdGluZ19ldmVudHNfY291bnQgPSAwOwogCX0KIAogCS8qIEhvbGQgdGhlIGV2ZW50cyBsb2NrIHdoaWxlIGRvaW5nIHRoaXMgdG8gcHJlc2VydmUgb3JkZXIuICovCkBAIC0yOTE2LDYgKzI5MTcsNyBAQAogCiAJCWNvcHlfZXZlbnRfaW50b19yZWN2X21zZyhyZWN2X21zZywgbXNnKTsKIAkJbGlzdF9hZGRfdGFpbCgmKHJlY3ZfbXNnLT5saW5rKSwgJihpbnRmLT53YWl0aW5nX2V2ZW50cykpOworCQlpbnRmLT53YWl0aW5nX2V2ZW50c19jb3VudCsrOwogCX0gZWxzZSB7CiAJCS8qIFRoZXJlJ3MgdG9vIG1hbnkgdGhpbmdzIGluIHRoZSBxdWV1ZSwgZGlzY2FyZCB0aGlzCiAJCSAgIG1lc3NhZ2UuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGE4NmMwZjIuLjAyYTdkZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0xMTg0LDIwICsxMTg0LDIwIEBACiBzdGF0aWMgdm9pZCBwb3J0X2NsZWFudXAoc3RydWN0IHNtaV9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBhZGRyID0gaW5mby0+aW8uYWRkcl9kYXRhOwotCWludCAgICAgICAgICBtYXBzaXplOworCWludCAgICAgICAgICBpZHg7CiAKIAlpZiAoYWRkcikgewotCQltYXBzaXplID0gKChpbmZvLT5pb19zaXplICogaW5mby0+aW8ucmVnc3BhY2luZykKLQkJCSAgIC0gKGluZm8tPmlvLnJlZ3NwYWNpbmcgLSBpbmZvLT5pby5yZWdzaXplKSk7Ci0KLQkJcmVsZWFzZV9yZWdpb24gKGFkZHIsIG1hcHNpemUpOworCSAgCWZvciAoaWR4ID0gMDsgaWR4IDwgaW5mby0+aW9fc2l6ZTsgaWR4KyspIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGFkZHIgKyBpZHggKiBpbmZvLT5pby5yZWdzcGFjaW5nLAorCQkJCSAgICAgICBpbmZvLT5pby5yZWdzaXplKTsKKwkJfQogCX0KIH0KIAogc3RhdGljIGludCBwb3J0X3NldHVwKHN0cnVjdCBzbWlfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgYWRkciA9IGluZm8tPmlvLmFkZHJfZGF0YTsKLQlpbnQgICAgICAgICAgbWFwc2l6ZTsKKwlpbnQgICAgICAgICAgaWR4OwogCiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEyMjUsMTYgKzEyMjUsMjIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogQ2FsY3VsYXRlIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHRvIGNsYWltLiAgVGhpcyBpcyBhbgotCSAqIHVudXN1YWwgbG9va2luZyBjYWxjdWxhdGlvbiwgYnV0IGl0IGF2b2lkcyBjbGFpbWluZyBhbnkKLQkgKiBtb3JlIG1lbW9yeSB0aGFuIGl0IGhhcyB0by4gIEl0IHdpbGwgY2xhaW0gZXZlcnl0aGluZwotCSAqIGJldHdlZW4gdGhlIGZpcnN0IGFkZHJlc3MgdG8gdGhlIGVuZCBvZiB0aGUgbGFzdCBmdWxsCi0JICogcmVnaXN0ZXIuICovCi0JbWFwc2l6ZSA9ICgoaW5mby0+aW9fc2l6ZSAqIGluZm8tPmlvLnJlZ3NwYWNpbmcpCi0JCSAgIC0gKGluZm8tPmlvLnJlZ3NwYWNpbmcgLSBpbmZvLT5pby5yZWdzaXplKSk7Ci0KLQlpZiAocmVxdWVzdF9yZWdpb24oYWRkciwgbWFwc2l6ZSwgREVWSUNFX05BTUUpID09IE5VTEwpCi0JCXJldHVybiAtRUlPOworCS8qIFNvbWUgQklPU2VzIHJlc2VydmUgZGlzam9pbnQgSS9PIHJlZ2lvbnMgaW4gdGhlaXIgQUNQSQorCSAqIHRhYmxlcy4gIFRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4gdHJ5aW5nIHRvIHJlZ2lzdGVyIHRoZQorCSAqIGVudGlyZSBJL08gcmVnaW9uLiAgVGhlcmVmb3JlIHdlIG11c3QgcmVnaXN0ZXIgZWFjaCBJL08KKwkgKiBwb3J0IHNlcGFyYXRlbHkuCisJICovCisgIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGluZm8tPmlvX3NpemU7IGlkeCsrKSB7CisJCWlmIChyZXF1ZXN0X3JlZ2lvbihhZGRyICsgaWR4ICogaW5mby0+aW8ucmVnc3BhY2luZywKKwkJCQkgICBpbmZvLT5pby5yZWdzaXplLCBERVZJQ0VfTkFNRSkgPT0gTlVMTCkgeworCQkJLyogVW5kbyBhbGxvY2F0aW9ucyAqLworCQkJd2hpbGUgKGlkeC0tKSB7CisJCQkJcmVsZWFzZV9yZWdpb24oYWRkciArIGlkeCAqIGluZm8tPmlvLnJlZ3NwYWNpbmcsCisJCQkJCSAgICAgICBpbmZvLT5pby5yZWdzaXplKTsKKwkJCX0KKwkJCXJldHVybiAtRUlPOworCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yMTk4LDExICsyMjA0LDExIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGlwbWlfZGVmYXVsdF92YWxzCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgaXBtaV9kZWZhdWx0X3ZhbHMKIHsKIAlpbnQgdHlwZTsKIAlpbnQgcG9ydDsKLX0gX19kZXZpbml0IGlwbWlfZGVmYXVsdHNbXSA9Cit9IGlwbWlfZGVmYXVsdHNbXSA9CiB7CiAJeyAudHlwZSA9IFNJX0tDUywgLnBvcnQgPSAweGNhMiB9LAogCXsgLnR5cGUgPSBTSV9TTUlDLCAucG9ydCA9IDB4Y2E5IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCmluZGV4IDhiNjAzYjIuLjU3NTViN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCkBAIC03NCw3ICs3NCw3IEBACiAJa19zZWxmLAkJa19mbiwJCWtfc3BlYywJCWtfcGFkLFwKIAlrX2RlYWQsCQlrX2NvbnMsCQlrX2N1ciwJCWtfc2hpZnQsXAogCWtfbWV0YSwJCWtfYXNjaWksCWtfbG9jaywJCWtfbG93ZXJjYXNlLFwKLQlrX3Nsb2NrLAlrX2RlYWQyLAlrX2lnbm9yZSwJa19pZ25vcmUKKwlrX3Nsb2NrLAlrX2RlYWQyLAlrX2JybCwJCWtfaWdub3JlCiAKIHR5cGVkZWYgdm9pZCAoa19oYW5kbGVyX2ZuKShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgdmFsdWUsCiAJCQkgICAgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIGNvbnN0IGludCBtYXhfdmFsc1tdID0gewogCTI1NSwgQVJSQVlfU0laRShmdW5jX3RhYmxlKSAtIDEsIEFSUkFZX1NJWkUoZm5faGFuZGxlcikgLSAxLCBOUl9QQUQgLSAxLAogCU5SX0RFQUQgLSAxLCAyNTUsIDMsIE5SX1NISUZUIC0gMSwgMjU1LCBOUl9BU0NJSSAtIDEsIE5SX0xPQ0sgLSAxLAotCTI1NSwgTlJfTE9DSyAtIDEsIDI1NQorCTI1NSwgTlJfTE9DSyAtIDEsIDI1NSwgTlJfQlJMIC0gMQogfTsKIAogY29uc3QgaW50IE5SX1RZUEVTID0gQVJSQVlfU0laRShtYXhfdmFscyk7CkBAIC0xMjYsNyArMTI2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNoaWZ0X2Rvd25bTlJfU0hJRlRdOwkJLyogc2hpZnQgc3RhdGUgY291bnRlcnMuLiAqLwogc3RhdGljIGludCBkZWFkX2tleV9uZXh0Owogc3RhdGljIGludCBucGFkY2ggPSAtMTsJCQkJCS8qIC0xIG9yIG51bWJlciBhc3NlbWJsZWQgb24gcGFkICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBkaWFjcjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlhY3I7CiBzdGF0aWMgY2hhciByZXA7CQkJCQkvKiBmbGFnIHRlbGxpbmcgY2hhcmFjdGVyIHJlcGVhdCAqLwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZWRzdGF0ZSA9IDB4ZmY7CQkJLyogdW5kZWZpbmVkICovCkBAIC0zOTQsMjIgKzM5NCwzMCBAQAogICogT3RoZXJ3aXNlLCBjb25jbHVkZSB0aGF0IERJQUNSIHdhcyBub3QgY29tYmluaW5nIGFmdGVyIGFsbCwKICAqIHF1ZXVlIGl0IGFuZCByZXR1cm4gQ0guCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhbmRsZV9kaWFjcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgY2gpCitzdGF0aWMgdW5zaWduZWQgaW50IGhhbmRsZV9kaWFjcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBjaCkKIHsKLQlpbnQgZCA9IGRpYWNyOworCXVuc2lnbmVkIGludCBkID0gZGlhY3I7CiAJdW5zaWduZWQgaW50IGk7CiAKIAlkaWFjciA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWNjZW50X3RhYmxlX3NpemU7IGkrKykgewotCQlpZiAoYWNjZW50X3RhYmxlW2ldLmRpYWNyID09IGQgJiYgYWNjZW50X3RhYmxlW2ldLmJhc2UgPT0gY2gpCi0JCQlyZXR1cm4gYWNjZW50X3RhYmxlW2ldLnJlc3VsdDsKKwlpZiAoKGQgJiB+MHhmZikgPT0gQlJMX1VDX1JPVykgeworCQlpZiAoKGNoICYgfjB4ZmYpID09IEJSTF9VQ19ST1cpCisJCQlyZXR1cm4gZCB8IGNoOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBhY2NlbnRfdGFibGVfc2l6ZTsgaSsrKQorCQkJaWYgKGFjY2VudF90YWJsZVtpXS5kaWFjciA9PSBkICYmIGFjY2VudF90YWJsZVtpXS5iYXNlID09IGNoKQorCQkJCXJldHVybiBhY2NlbnRfdGFibGVbaV0ucmVzdWx0OwogCX0KIAotCWlmIChjaCA9PSAnICcgfHwgY2ggPT0gZCkKKwlpZiAoY2ggPT0gJyAnIHx8IGNoID09IChCUkxfVUNfUk9XfDApIHx8IGNoID09IGQpCiAJCXJldHVybiBkOwogCi0JcHV0X3F1ZXVlKHZjLCBkKTsKKwlpZiAoa2JkLT5rYmRtb2RlID09IFZDX1VOSUNPREUpCisJCXRvX3V0ZjgodmMsIGQpOworCWVsc2UgaWYgKGQgPCAweDEwMCkKKwkJcHV0X3F1ZXVlKHZjLCBkKTsKKwogCXJldHVybiBjaDsKIH0KIApAQCAtNDE5LDcgKzQyNywxMCBAQAogc3RhdGljIHZvaWQgZm5fZW50ZXIoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAoZGlhY3IpIHsKLQkJcHV0X3F1ZXVlKHZjLCBkaWFjcik7CisJCWlmIChrYmQtPmtiZG1vZGUgPT0gVkNfVU5JQ09ERSkKKwkJCXRvX3V0ZjgodmMsIGRpYWNyKTsKKwkJZWxzZSBpZiAoZGlhY3IgPCAweDEwMCkKKwkJCXB1dF9xdWV1ZSh2YywgZGlhY3IpOwogCQlkaWFjciA9IDA7CiAJfQogCXB1dF9xdWV1ZSh2YywgMTMpOwpAQCAtNjE1LDcgKzYyNiw3IEBACiAJcHJpbnRrKEtFUk5fRVJSICJrZXlib2FyZC5jOiBrX2xvd2VyY2FzZSB3YXMgY2FsbGVkIC0gaW1wb3NzaWJsZVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGtfc2VsZihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIGNoYXIgdXBfZmxhZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBrX3VuaWNvZGUoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgdmFsdWUsIGNoYXIgdXBfZmxhZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKHVwX2ZsYWcpCiAJCXJldHVybjsJCS8qIG5vIGFjdGlvbiwgaWYgdGhpcyBpcyBhIGtleSByZWxlYXNlICovCkBAIC02MjgsNyArNjM5LDEwIEBACiAJCWRpYWNyID0gdmFsdWU7CiAJCXJldHVybjsKIAl9Ci0JcHV0X3F1ZXVlKHZjLCB2YWx1ZSk7CisJaWYgKGtiZC0+a2JkbW9kZSA9PSBWQ19VTklDT0RFKQorCQl0b191dGY4KHZjLCB2YWx1ZSk7CisJZWxzZSBpZiAodmFsdWUgPCAweDEwMCkKKwkJcHV0X3F1ZXVlKHZjLCB2YWx1ZSk7CiB9CiAKIC8qCkBAIC02MzYsMTMgKzY1MCwyMyBAQAogICogZGVhZCBrZXlzIG1vZGlmeWluZyB0aGUgc2FtZSBjaGFyYWN0ZXIuIFZlcnkgdXNlZnVsCiAgKiBmb3IgVmlldG5hbWVzZS4KICAqLwotc3RhdGljIHZvaWQga19kZWFkMihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIGNoYXIgdXBfZmxhZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBrX2RlYWR1bmljb2RlKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IHZhbHVlLCBjaGFyIHVwX2ZsYWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmICh1cF9mbGFnKQogCQlyZXR1cm47CiAJZGlhY3IgPSAoZGlhY3IgPyBoYW5kbGVfZGlhY3IodmMsIHZhbHVlKSA6IHZhbHVlKTsKIH0KIAorc3RhdGljIHZvaWQga19zZWxmKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrX3VuaWNvZGUodmMsIHZhbHVlLCB1cF9mbGFnLCByZWdzKTsKK30KKworc3RhdGljIHZvaWQga19kZWFkMihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIGNoYXIgdXBfZmxhZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJa19kZWFkdW5pY29kZSh2YywgdmFsdWUsIHVwX2ZsYWcsIHJlZ3MpOworfQorCiAvKgogICogT2Jzb2xldGUgLSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seQogICovCkBAIC02NTAsNyArNjc0LDcgQEAKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciByZXRfZGlhY3JbTlJfREVBRF0gPSB7J2AnLCAnXCcnLCAnXicsICd+JywgJyInLCAnLCcgfTsKIAl2YWx1ZSA9IHJldF9kaWFjclt2YWx1ZV07Ci0Ja19kZWFkMih2YywgdmFsdWUsIHVwX2ZsYWcsIHJlZ3MpOworCWtfZGVhZHVuaWNvZGUodmMsIHZhbHVlLCB1cF9mbGFnLCByZWdzKTsKIH0KIAogc3RhdGljIHZvaWQga19jb25zKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTgzNSw2ICs4NTksODAgQEAKIAl9CiB9CiAKKy8qIGJ5IGRlZmF1bHQsIDMwMG1zIGludGVydmFsIGZvciBjb21iaW5hdGlvbiByZWxlYXNlICovCitzdGF0aWMgdW5zaWduZWQgYnJsX3RpbWVvdXQgPSAzMDA7CitNT0RVTEVfUEFSTV9ERVNDKGJybF90aW1lb3V0LCAiQnJhaWxsZSBrZXlzIHJlbGVhc2UgZGVsYXkgaW4gbXMgKDAgZm9yIGNvbW1pdCBvbiBmaXJzdCBrZXkgcmVsZWFzZSkiKTsKK21vZHVsZV9wYXJhbShicmxfdGltZW91dCwgdWludCwgMDY0NCk7CisKK3N0YXRpYyB1bnNpZ25lZCBicmxfbmJjaG9yZHMgPSAxOworTU9EVUxFX1BBUk1fREVTQyhicmxfbmJjaG9yZHMsICJOdW1iZXIgb2YgY2hvcmRzIHRoYXQgcHJvZHVjZSBhIGJyYWlsbGUgcGF0dGVybiAoMCBmb3IgZGVhZCBjaG9yZHMpIik7Cittb2R1bGVfcGFyYW0oYnJsX25iY2hvcmRzLCB1aW50LCAwNjQ0KTsKKworc3RhdGljIHZvaWQga19icmxjb21taXQoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgcGF0dGVybiwgY2hhciB1cF9mbGFnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBjaG9yZHM7CisJc3RhdGljIHVuc2lnbmVkIGNvbW1pdHRlZDsKKworCWlmICghYnJsX25iY2hvcmRzKQorCQlrX2RlYWR1bmljb2RlKHZjLCBCUkxfVUNfUk9XIHwgcGF0dGVybiwgdXBfZmxhZywgcmVncyk7CisJZWxzZSB7CisJCWNvbW1pdHRlZCB8PSBwYXR0ZXJuOworCQljaG9yZHMrKzsKKwkJaWYgKGNob3JkcyA9PSBicmxfbmJjaG9yZHMpIHsKKwkJCWtfdW5pY29kZSh2YywgQlJMX1VDX1JPVyB8IGNvbW1pdHRlZCwgdXBfZmxhZywgcmVncyk7CisJCQljaG9yZHMgPSAwOworCQkJY29tbWl0dGVkID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQga19icmwoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBjaGFyIHZhbHVlLCBjaGFyIHVwX2ZsYWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0YXRpYyB1bnNpZ25lZCBwcmVzc2VkLGNvbW1pdHRpbmc7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZXN0YXJ0OworCisJaWYgKGtiZC0+a2JkbW9kZSAhPSBWQ19VTklDT0RFKSB7CisJCWlmICghdXBfZmxhZykKKwkJCXByaW50aygia2V5Ym9hcmQgbW9kZSBtdXN0IGJlIHVuaWNvZGUgZm9yIGJyYWlsbGUgcGF0dGVybnNcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCF2YWx1ZSkgeworCQlrX3VuaWNvZGUodmMsIEJSTF9VQ19ST1csIHVwX2ZsYWcsIHJlZ3MpOworCQlyZXR1cm47CisJfQorCisJaWYgKHZhbHVlID4gOCkKKwkJcmV0dXJuOworCisJaWYgKHVwX2ZsYWcpIHsKKwkJaWYgKGJybF90aW1lb3V0KSB7CisJCQlpZiAoIWNvbW1pdHRpbmcgfHwKKwkJCSAgICBqaWZmaWVzIC0gcmVsZWFzZXN0YXJ0ID4gKGJybF90aW1lb3V0ICogSFopIC8gMTAwMCkgeworCQkJCWNvbW1pdHRpbmcgPSBwcmVzc2VkOworCQkJCXJlbGVhc2VzdGFydCA9IGppZmZpZXM7CisJCQl9CisJCQlwcmVzc2VkICY9IH4oMSA8PCAodmFsdWUgLSAxKSk7CisJCQlpZiAoIXByZXNzZWQpIHsKKwkJCQlpZiAoY29tbWl0dGluZykgeworCQkJCQlrX2JybGNvbW1pdCh2YywgY29tbWl0dGluZywgMCwgcmVncyk7CisJCQkJCWNvbW1pdHRpbmcgPSAwOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjb21taXR0aW5nKSB7CisJCQkJa19icmxjb21taXQodmMsIGNvbW1pdHRpbmcsIDAsIHJlZ3MpOworCQkJCWNvbW1pdHRpbmcgPSAwOworCQkJfQorCQkJcHJlc3NlZCAmPSB+KDEgPDwgKHZhbHVlIC0gMSkpOworCQl9CisJfSBlbHNlIHsKKwkJcHJlc3NlZCB8PSAxIDw8ICh2YWx1ZSAtIDEpOworCQlpZiAoIWJybF90aW1lb3V0KQorCQkJY29tbWl0dGluZyA9IHByZXNzZWQ7CisJfQorfQorCiAvKgogICogVGhlIGxlZHMgZGlzcGxheSBlaXRoZXIgKGkpIHRoZSBzdGF0dXMgb2YgTnVtTG9jaywgQ2Fwc0xvY2ssIFNjcm9sbExvY2ssCiAgKiBvciAoaWkpIHdoYXRldmVyIHBhdHRlcm4gb2YgbGlnaHRzIHBlb3BsZSB3YW50IHRvIHNob3cgdXNpbmcgS0RTRVRMRUQsCkBAIC0xMTI1LDkgKzEyMjMsMTMgQEAKIAl9CiAKIAlpZiAoa2V5Y29kZSA+IE5SX0tFWVMpCi0JCXJldHVybjsKKwkJaWYgKGtleWNvZGUgPj0gS0VZX0JSTF9ET1QxICYmIGtleWNvZGUgPD0gS0VZX0JSTF9ET1Q4KQorCQkJa2V5c3ltID0gSyhLVF9CUkwsIGtleWNvZGUgLSBLRVlfQlJMX0RPVDEgKyAxKTsKKwkJZWxzZQorCQkJcmV0dXJuOworCWVsc2UKKwkJa2V5c3ltID0ga2V5X21hcFtrZXljb2RlXTsKIAotCWtleXN5bSA9IGtleV9tYXBba2V5Y29kZV07CiAJdHlwZSA9IEtUWVAoa2V5c3ltKTsKIAogCWlmICh0eXBlIDwgMHhmMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDY2NzE5ZjkuLjFmYTlmYTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTU3OCw2ICs1NzksMTggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBpbnQgcGlwZV90b19udWxsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmLAorCQkJc3RydWN0IHNwbGljZV9kZXNjICpzZCkKK3sKKwlyZXR1cm4gc2QtPmxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3BsaWNlX3dyaXRlX251bGwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxzdHJ1Y3QgZmlsZSAqb3V0LAorCQkJCSBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gc3BsaWNlX2Zyb21fcGlwZShwaXBlLCBvdXQsIHBwb3MsIGxlbiwgZmxhZ3MsIHBpcGVfdG9fbnVsbCk7Cit9CisKICNpZmRlZiBDT05GSUdfTU1VCiAvKgogICogRm9yIGZ1biwgd2UgYXJlIHVzaW5nIHRoZSBNTVUgZm9yIHRoaXMuCkBAIC03ODUsNiArNzk4LDcgQEAKIAkubGxzZWVrCQk9IG51bGxfbHNlZWssCiAJLnJlYWQJCT0gcmVhZF9udWxsLAogCS53cml0ZQkJPSB3cml0ZV9udWxsLAorCS5zcGxpY2Vfd3JpdGUJPSBzcGxpY2Vfd3JpdGVfbnVsbCwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8ICFkZWZpbmVkKF9fbWM2ODAwMF9fKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL213YXZlL213YXZlZGQuYyBiL2RyaXZlcnMvY2hhci9td2F2ZS9td2F2ZWRkLmMKaW5kZXggODY2NjE3MS4uZDNiYTJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL213YXZlL213YXZlZGQuYworKysgYi9kcml2ZXJzL2NoYXIvbXdhdmUvbXdhdmVkZC5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIAkJCQlpcGNudW0sCiAJCQkJcERydkRhdGEtPklQQ3NbaXBjbnVtXS51c0ludENvdW50KTsKIAkKLQkJCWlmIChpcGNudW0gPiBBUlJBWV9TSVpFKHBEcnZEYXRhLT5JUENzKSkgeworCQkJaWYgKGlwY251bSA+PSBBUlJBWV9TSVpFKHBEcnZEYXRhLT5JUENzKSkgewogCQkJCVBSSU5US19FUlJPUihLRVJOX0VSUl9NV0FWRQogCQkJCQkJIm13YXZlZGQ6Om13YXZlX2lvY3RsOiIKIAkJCQkJCSIgSU9DVExfTVdfUkVHSVNURVJfSVBDOiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggZWRlMzY1ZC4uYjkzNzFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKQEAgLTEzODQsOCArMTM4NCwxMCBAQAogCQkgKiBsb25nZXIgdGhhbiBUVFlfVEhSRVNIT0xEX1VOVEhST1RUTEUgaW4gY2Fub25pY2FsIG1vZGUsCiAJCSAqIHdlIHdvbid0IGdldCBhbnkgbW9yZSBjaGFyYWN0ZXJzLgogCQkgKi8KLQkJaWYgKG5fdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpIDw9IFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSkKKwkJaWYgKG5fdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpIDw9IFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSkgeworCQkJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkJCWNoZWNrX3VudGhyb3R0bGUodHR5KTsKKwkJfQogCiAJCWlmIChiIC0gYnVmID49IG1pbmltdW0pCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDVmZGYxODUuLmVhYjUzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtNDYsNyArNDYsNyBAQAogLyogI2RlZmluZSBBVFJfQ1NVTSAqLwogCiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0jZGVmaW5lIHJlYWRlcl90b19kZXYoeCkJKCZoYW5kbGVfdG9fZGV2KHgtPmxpbmsuaGFuZGxlKSkKKyNkZWZpbmUgcmVhZGVyX3RvX2Rldih4KQkoJmhhbmRsZV90b19kZXYoeC0+cF9kZXYtPmhhbmRsZSkpCiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2MDApOwogI2RlZmluZSBERUJVR1AobiwgcmRyLCB4LCBhcmdzLi4uKSBkbyB7IAkJCQlcCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lCVRfMTAwTVNFQwltc2Vjc190b19qaWZmaWVzKDEwMCkKICNkZWZpbmUJVF81MDBNU0VDCW1zZWNzX3RvX2ppZmZpZXMoNTAwKQogCi1zdGF0aWMgdm9pZCBjbTQwMDBfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyB2b2lkIGNtNDAwMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogc3RhdGljIGludCBtYWpvcjsJCS8qIG1ham9yIG51bWJlciB3ZSBnZXQgZnJvbSB0aGUga2VybmVsICovCiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogI2RlZmluZSBSRUdfU1RPUEJJVFMoeCkJCSh4ICsgNykKIAogc3RydWN0IGNtNDAwMF9kZXYgewotCWRldl9saW5rX3QgbGluazsJCS8qIHBjbWNpYSBsaW5rICovCisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsJCS8qIE9TIG5vZGUgKG1ham9yLG1pbm9yKSAqLwogCiAJdW5zaWduZWQgY2hhciBhdHJbTUFYX0FUUl07CkBAIC0xNDksMTQgKzE0OSwxNCBAQAogI2RlZmluZQlaRVJPX0RFVihkZXYpICAJCQkJCQlcCiAJbWVtc2V0KCZkZXYtPmF0cl9jc3VtLDAsCQkJCVwKIAkJc2l6ZW9mKHN0cnVjdCBjbTQwMDBfZGV2KSAtIAkJCVwKLQkJLypsaW5rKi8gc2l6ZW9mKGRldl9saW5rX3QpIC0gCQkJXAorCQkvKmxpbmsqLyBzaXplb2Yoc3RydWN0IHBjbWNpYV9kZXZpY2UgKikgLSAJXAogCQkvKm5vZGUqLyBzaXplb2YoZGV2X25vZGVfdCkgLSAJCQlcCiAJCS8qYXRyKi8gTUFYX0FUUipzaXplb2YoY2hhcikgLSAJCQlcCiAJCS8qcmJ1ZiovIDUxMipzaXplb2YoY2hhcikgLSAJCQlcCiAJCS8qc2J1ZiovIDUxMipzaXplb2YoY2hhcikgLSAJCQlcCiAJCS8qcXVldWUqLyA0KnNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCkpCiAKLXN0YXRpYyBkZXZfbGlua190ICpkZXZfdGFibGVbQ000MDAwX01BWF9ERVZdOworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXZfdGFibGVbQ000MDAwX01BWF9ERVZdOwogc3RhdGljIHN0cnVjdCBjbGFzcyAqY21tX2NsYXNzOwogCiAvKiBUaGlzIHRhYmxlIGRvZXNuJ3QgdXNlIHNwYWNlcyBhZnRlciB0aGUgY29tbWEgYmV0d2VlbiBmaWVsZHMgYW5kIHRodXMKQEAgLTQ1NCw3ICs0NTQsNyBAQAogc3RhdGljIHZvaWQgc2V0X2NhcmRwYXJhbWV0ZXIoc3RydWN0IGNtNDAwMF9kZXYgKmRldikKIHsKIAlpbnQgaTsKLQlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAl1X2ludDhfdCBzdG9wYml0cyA9IDB4MDI7IC8qIElTTyBkZWZhdWx0ICovCiAKIAlERUJVR1AoMywgZGV2LCAiLT4gc2V0X2NhcmRwYXJhbWV0ZXJcbiIpOwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJdW5zaWduZWQgc2hvcnQgbnVtX2J5dGVzX3JlYWQ7CiAJdW5zaWduZWQgY2hhciBwdHNfcmVwbHlbNF07CiAJc3NpemVfdCByYzsKLQlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAogCXJjID0gMDsKIApAQCAtNjk5LDcgKzY5OSw3IEBACiBzdGF0aWMgdm9pZCBtb25pdG9yX2NhcmQodW5zaWduZWQgbG9uZyBwKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXYgPSAoc3RydWN0IGNtNDAwMF9kZXYgKikgcDsKLQlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAl1bnNpZ25lZCBzaG9ydCBzOwogCXN0cnVjdCBwdHNyZXEgcHRzcmVxOwogCWludCBpLCBhdHJjOwpAQCAtOTYyLDcgKzk2Miw3IEBACiAJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIAlzc2l6ZV90IHJjOwogCWludCBpLCBqLCBrOwogCkBAIC05NzEsNyArOTcxLDcgQEAKIAlpZiAoY291bnQgPT0gMCkJCS8qIGFjY29yZGluZyB0byBtYW5wYWdlICovCiAJCXJldHVybiAwOwogCi0JaWYgKChkZXYtPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkgPT0gMCB8fAkvKiBzb2NrZXQgcmVtb3ZlZCAqLworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGRldi0+cF9kZXYpIHx8IC8qIGRldmljZSByZW1vdmVkICovCiAJICAgIHRlc3RfYml0KElTX0NNTV9BQlNFTlQsICZkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEwODMsNyArMTA4Myw3IEBACiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IChzdHJ1Y3QgY200MDAwX2RldiAqKSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpb2FkZHJfdCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJdW5zaWduZWQgc2hvcnQgczsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIAl1bnNpZ25lZCBjaGFyIGluZm9sZW47CkBAIC0xMTA4LDcgKzExMDgsNyBAQAogCiAJc2VuZFQwID0gZGV2LT5wcm90byA/IDAgOiBuciA+IDUgPyAweDA4IDogMDsKIAotCWlmICgoZGV2LT5saW5rLnN0YXRlICYgREVWX1BSRVNFTlQpID09IDAgfHwJLyogc29ja2V0IHJlbW92ZWQgKi8KKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChkZXYtPnBfZGV2KSB8fCAvKiBkZXZpY2UgcmVtb3ZlZCAqLwogCSAgICB0ZXN0X2JpdChJU19DTU1fQUJTRU5ULCAmZGV2LT5mbGFncykpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xNDQwLDggKzE0NDAsOCBAQAogCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaW9hZGRyX3QgaW9iYXNlID0gZGV2LT5saW5rLmlvLkJhc2VQb3J0MTsKLQlkZXZfbGlua190ICpsaW5rOworCWlvYWRkcl90IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgc2l6ZTsKIAlpbnQgcmM7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogCSAgICAgICBpbWlub3IoaW5vZGUpLCBpb2N0bF9uYW1lc1tfSU9DX05SKGNtZCldKTsKIAogCWxpbmsgPSBkZXZfdGFibGVbaW1pbm9yKGlub2RlKV07Ci0JaWYgKCEoREVWX09LKGxpbmspKSkgeworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CiAJCURFQlVHUCg0LCBkZXYsICJERVZfT0sgZmFsc2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xNjYwLDE0ICsxNjYwLDE0IEBACiBzdGF0aWMgaW50IGNtbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXY7Ci0JZGV2X2xpbmtfdCAqbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgcmMsIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAogCWlmIChtaW5vciA+PSBDTTQwMDBfTUFYX0RFVikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlsaW5rID0gZGV2X3RhYmxlW21pbm9yXTsKLQlpZiAobGluayA9PSBOVUxMIHx8ICEoREVWX09LKGxpbmspKSkKKwlpZiAobGluayA9PSBOVUxMIHx8ICFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGxpbmstPm9wZW4pCkBAIC0xNzA5LDcgKzE3MDksNyBAQAogc3RhdGljIGludCBjbW1fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldjsKLQlkZXZfbGlua190ICpsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKIAlpZiAobWlub3IgPj0gQ000MDAwX01BWF9ERVYpCkBAIC0xNzM1LDcgKzE3MzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjbW1fY200MDAwX3JlbGVhc2UoZGV2X2xpbmtfdCAqIGxpbmspCitzdGF0aWMgdm9pZCBjbW1fY200MDAwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXYgPSBsaW5rLT5wcml2OwogCkBAIC0xNzU5LDEzICsxNzU5LDExIEBACiAKIC8qPT09PSBJbnRlcmZhY2UgdG8gUENNQ0lBIExheWVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGNtNDAwMF9jb25maWcoZGV2X2xpbmtfdCAqIGxpbmssIGludCBkZXZubykKK3N0YXRpYyBpbnQgY200MDAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmssIGludCBkZXZubykKIHsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXY7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90IHBhcnNlOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKIAl1X2NoYXIgYnVmWzY0XTsKIAlpbnQgZmFpbF9mbiwgZmFpbF9yYzsKIAlpbnQgcmM7CkBAIC0xNzc3LDQxICsxNzc1LDM0IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCi0JaWYgKChmYWlsX3JjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoKGZhaWxfcmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IENTX1NVQ0NFU1MpIHsKIAkJZmFpbF9mbiA9IEdldEZpcnN0VHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwogCX0KLQlpZiAoKGZhaWxfcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKChmYWlsX3JjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpICE9IENTX1NVQ0NFU1MpIHsKIAkJZmFpbF9mbiA9IEdldFR1cGxlRGF0YTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQogCWlmICgoZmFpbF9yYyA9Ci0JICAgICBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpICE9IENTX1NVQ0NFU1MpIHsKKwkgICAgIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpICE9IENTX1NVQ0NFU1MpIHsKIAkJZmFpbF9mbiA9IFBhcnNlVHVwbGU7CiAJCWdvdG8gY3NfZmFpbGVkOwogCX0KLQlpZiAoKGZhaWxfcmMgPQotCSAgICAgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpICE9IENTX1NVQ0NFU1MpIHsKLQkJZmFpbF9mbiA9IEdldENvbmZpZ3VyYXRpb25JbmZvOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOwogCiAJbGluay0+aW8uQmFzZVBvcnQyID0gMDsKIAlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwogCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlmb3IgKHJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSk7Ci0JICAgICByYyA9PSBDU19TVUNDRVNTOyByYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpIHsKKwlmb3IgKHJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOworCSAgICAgcmMgPT0gQ1NfU1VDQ0VTUzsgcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgewogCi0JCXJjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKTsKKwkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAkJaWYgKHJjICE9IENTX1NVQ0NFU1MpCiAJCQljb250aW51ZTsKLQkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCXJjID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAkJaWYgKHJjICE9IENTX1NVQ0NFU1MpCiAJCQljb250aW51ZTsKIApAQCAtMTgzMSw3ICsxODIyLDcgQEAKIAkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzCiAJCSAgICAmIENJU1RQTF9JT19MSU5FU19NQVNLOwogCi0JCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8oaGFuZGxlLCAmbGluay0+aW8pOworCQlyYyA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCWlmIChyYyA9PSBDU19TVUNDRVNTKQogCQkJYnJlYWs7CS8qIHdlIGFyZSBkb25lICovCiAJfQpAQCAtMTg0MSw3ICsxODMyLDcgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSAwMDAwMDAwMjsKIAogCWlmICgoZmFpbF9yYyA9Ci0JICAgICBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKSAhPSBDU19TVUNDRVNTKSB7CisJICAgICBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkgIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CiAJCWdvdG8gY3NfcmVsZWFzZTsKIAl9CkBAIC0xODUxLDYzICsxODQyLDQ4IEBACiAJZGV2LT5ub2RlLm1ham9yID0gbWFqb3I7CiAJZGV2LT5ub2RlLm1pbm9yID0gZGV2bm87CiAJZGV2LT5ub2RlLm5leHQgPSBOVUxMOwotCWxpbmstPmRldiA9ICZkZXYtPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihoYW5kbGUsIGZhaWxfZm4sIGZhaWxfcmMpOworCWNzX2Vycm9yKGxpbmssIGZhaWxfZm4sIGZhaWxfcmMpOwogY3NfcmVsZWFzZToKIAljbTQwMDBfcmVsZWFzZShsaW5rKTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgY200MDAwX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBjbTQwMDBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2OwogCiAJZGV2ID0gbGluay0+cHJpdjsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKIAlzdG9wX21vbml0b3IoZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNtNDAwMF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBjbTQwMDBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXY7CiAKIAlkZXYgPSBsaW5rLT5wcml2OwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KIAlpZiAobGluay0+b3BlbikKIAkJc3RhcnRfbW9uaXRvcihkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNtNDAwMF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBjbTQwMDBfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAljbW1fY200MDAwX3JlbGVhc2UobGluay0+cHJpdik7CS8qIGRlbGF5IHJlbGVhc2UgdW50aWwgZGV2aWNlIGNsb3NlZCAqLwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IGNtNDAwMF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBjbTQwMDBfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldjsKLQlkZXZfbGlua190ICpsaW5rOwotCWludCBpOworCWludCBpLCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ000MDAwX01BWF9ERVY7IGkrKykKIAkJaWYgKGRldl90YWJsZVtpXSA9PSBOVUxMKQpAQCAtMTkyMyw3ICsxODk5LDcgQEAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGluayA9ICZkZXYtPmxpbms7CisJZGV2LT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlkZXZfdGFibGVbaV0gPSBsaW5rOwpAQCAtMTkzMywxMSArMTkwOSw5IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5hdHJxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnJlYWRxKTsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQljbTQwMDBfY29uZmlnKGxpbmssIGkpOworCXJldCA9IGNtNDAwMF9jb25maWcobGluaywgaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWNsYXNzX2RldmljZV9jcmVhdGUoY21tX2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCiAJCQkgICAgImNtbSVkIiwgaSk7CkBAIC0xOTQ1LDkgKzE5MTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjbTQwMDBfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGNtNDAwMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGxpbmstPnByaXY7CiAJaW50IGRldm5vOwogCkBAIC0xOTU4LDExICsxOTMxLDkgQEAKIAlpZiAoZGV2bm8gPT0gQ000MDAwX01BWF9ERVYpCiAJCXJldHVybjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfUFJFU0VOVDsKIAlzdG9wX21vbml0b3IoZGV2KTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0gCQljbTQwMDBfcmVsZWFzZShsaW5rKTsKKwljbTQwMDBfcmVsZWFzZShsaW5rKTsKIAogCWRldl90YWJsZVtkZXZub10gPSBOVUxMOwogIAlrZnJlZShkZXYpOwpAQCAtMTk5Myw3ICsxOTY0LDcgQEAKIAkuZHJ2CSAgPSB7CiAJCS5uYW1lID0gImNtNDAwMF9jcyIsCiAJCX0sCi0JLnByb2JlICAgID0gY200MDAwX2F0dGFjaCwKKwkucHJvYmUgICAgPSBjbTQwMDBfcHJvYmUsCiAJLnJlbW92ZSAgID0gY200MDAwX2RldGFjaCwKIAkuc3VzcGVuZCAgPSBjbTQwMDBfc3VzcGVuZCwKIAkucmVzdW1lICAgPSBjbTQwMDBfcmVzdW1lLApAQCAtMjAxMCwxMCArMTk4MSw2IEBACiAJaWYgKCFjbW1fY2xhc3MpCiAJCXJldHVybiAtMTsKIAotCXJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmY200MDAwX2RyaXZlcik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCiAJbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgREVWSUNFX05BTUUsICZjbTQwMDBfZm9wcyk7CiAJaWYgKG1ham9yIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIE1PRFVMRV9OQU1FCkBAIC0yMDIxLDYgKzE5ODgsMTIgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCXJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmY200MDAwX2RyaXZlcik7CisJaWYgKHJjIDwgMCkgeworCQl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgREVWSUNFX05BTUUpOworCQlyZXR1cm4gcmM7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCmluZGV4IDQ2NmUzM2IuLjQ3YTg0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwpAQCAtNDEsNyArNDEsNyBAQAogCiAKICNpZmRlZiBQQ01DSUFfREVCVUcKLSNkZWZpbmUgcmVhZGVyX3RvX2Rldih4KQkoJmhhbmRsZV90b19kZXYoeC0+bGluay5oYW5kbGUpKQorI2RlZmluZSByZWFkZXJfdG9fZGV2KHgpCSgmaGFuZGxlX3RvX2Rldih4LT5wX2Rldi0+aGFuZGxlKSkKIHN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7CiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDYwMCk7CiAjZGVmaW5lIERFQlVHUChuLCByZHIsIHgsIGFyZ3MuLi4pIGRvIHsgCQkJCVwKQEAgLTY1LDcgKzY1LDcgQEAKIC8qIGhvdyBvZnRlbiB0byBwb2xsIGZvciBmaWZvIHN0YXR1cyBjaGFuZ2UgKi8KICNkZWZpbmUgUE9MTF9QRVJJT0QgCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTApCiAKLXN0YXRpYyB2b2lkIHJlYWRlcl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgcmVhZGVyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgaW50IG1ham9yOwogc3RhdGljIHN0cnVjdCBjbGFzcyAqY214X2NsYXNzOwpAQCAtNzQsNyArNzQsNyBAQAogI2RlZmluZQkJQlNfV1JJVEFCTEUJMHgwMgogCiBzdHJ1Y3QgcmVhZGVyX2RldiB7Ci0JZGV2X2xpbmtfdAkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJZGV2X25vZGVfdAkJbm9kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlkZXZxOwogCXdhaXRfcXVldWVfaGVhZF90CXBvbGxfd2FpdDsKQEAgLTg3LDcgKzg3LDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCAJcG9sbF90aW1lcjsKIH07CiAKLXN0YXRpYyBkZXZfbGlua190ICpkZXZfdGFibGVbQ01fTUFYX0RFVl07CitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldl90YWJsZVtDTV9NQVhfREVWXTsKIAogI2lmbmRlZiBQQ01DSUFfREVCVUcKICNkZWZpbmUJeG91dGIJb3V0YgpAQCAtMTE2LDcgKzExNiw3IEBACiBzdGF0aWMgdm9pZCBjbTQwNDBfZG9fcG9sbCh1bnNpZ25lZCBsb25nIGR1bW15KQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXYgPSAoc3RydWN0IHJlYWRlcl9kZXYgKikgZHVtbXk7Ci0JdW5zaWduZWQgaW50IG9icyA9IHhpbmIoZGV2LT5saW5rLmlvLkJhc2VQb3J0MQorCXVuc2lnbmVkIGludCBvYnMgPSB4aW5iKGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MQogCQkJCSsgUkVHX09GRlNFVF9CVUZGRVJfU1RBVFVTKTsKIAogCWlmICgob2JzICYgQlNSX0JVTEtfSU5fRlVMTCkpIHsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogc3RhdGljIGludCB3YWl0X2Zvcl9idWxrX291dF9yZWFkeShzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2KQogewogCWludCBpLCByYzsKLQlpbnQgaW9iYXNlID0gZGV2LT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCiAJZm9yIChpID0gMDsgaSA8IFBPTExfTE9PUF9DT1VOVDsgaSsrKSB7CiAJCWlmICgoeGluYihpb2Jhc2UgKyBSRUdfT0ZGU0VUX0JVRkZFUl9TVEFUVVMpCkBAIC0xNzcsNyArMTc3LDcgQEAKIC8qIFdyaXRlIHRvIFN5bmMgQ29udHJvbCBSZWdpc3RlciAqLwogc3RhdGljIGludCB3cml0ZV9zeW5jX3JlZyh1bnNpZ25lZCBjaGFyIHZhbCwgc3RydWN0IHJlYWRlcl9kZXYgKmRldikKIHsKLQlpbnQgaW9iYXNlID0gZGV2LT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCWludCByYzsKIAogCXJjID0gd2FpdF9mb3JfYnVsa19vdXRfcmVhZHkoZGV2KTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogc3RhdGljIGludCB3YWl0X2Zvcl9idWxrX2luX3JlYWR5KHN0cnVjdCByZWFkZXJfZGV2ICpkZXYpCiB7CiAJaW50IGksIHJjOwotCWludCBpb2Jhc2UgPSBkZXYtPmxpbmsuaW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUE9MTF9MT09QX0NPVU5UOyBpKyspIHsKIAkJaWYgKCh4aW5iKGlvYmFzZSArIFJFR19PRkZTRVRfQlVGRkVSX1NUQVRVUykKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgaW9iYXNlID0gZGV2LT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXNpemVfdCBieXRlc190b19yZWFkOwogCXVuc2lnbmVkIGxvbmcgaTsKIAlzaXplX3QgbWluX2J5dGVzX3RvX3JlYWQ7CkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKChkZXYtPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCk9PTApCisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQoZGV2LT5wX2RldikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgaW9iYXNlID0gZGV2LT5saW5rLmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXNzaXplX3QgcmM7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IGJ5dGVzX3RvX3dyaXRlOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmICgoZGV2LT5saW5rLnN0YXRlICYgREVWX1BSRVNFTlQpID09IDApCisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQoZGV2LT5wX2RldikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJYnl0ZXNfdG9fd3JpdGUgPSBjb3VudDsKQEAgLTQ0NSwxNCArNDQ1LDE0IEBACiBzdGF0aWMgaW50IGNtNDA0MF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXY7Ci0JZGV2X2xpbmtfdCAqbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCiAJaWYgKG1pbm9yID49IENNX01BWF9ERVYpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbGluayA9IGRldl90YWJsZVttaW5vcl07Ci0JaWYgKGxpbmsgPT0gTlVMTCB8fCAhKERFVl9PSyhsaW5rKSkpCisJaWYgKGxpbmsgPT0gTlVMTCB8fCAhcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChsaW5rLT5vcGVuKQpAQCAtNDc4LDcgKzQ3OCw3IEBACiBzdGF0aWMgaW50IGNtNDA0MF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRldl9saW5rX3QgKmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAogCURFQlVHUCgyLCBkZXYsICItPiBjbTQwNDBfY2xvc2UobWFqL21pbj0lZC4lZClcbiIsIGltYWpvcihpbm9kZSksCkBAIC01MDAsNyArNTAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY200MDQwX3JlYWRlcl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBjbTQwNDBfcmVhZGVyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IGxpbmstPnByaXY7CiAKQEAgLTUxNCw2MCArNTE0LDQ5IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCByZWFkZXJfY29uZmlnKGRldl9saW5rX3QgKmxpbmssIGludCBkZXZubykKK3N0YXRpYyBpbnQgcmVhZGVyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IGRldm5vKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldjsKIAl0dXBsZV90IHR1cGxlOwogCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY29uZmlnX2luZm9fdCBjb25mOwogCXVfY2hhciBidWZbNjRdOwogCWludCBmYWlsX2ZuLCBmYWlsX3JjOwogCWludCByYzsKIAotCWhhbmRsZSA9IGxpbmstPmhhbmRsZTsKLQogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CiAJdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAKLQlpZiAoKGZhaWxfcmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgeworCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gR2V0Rmlyc3RUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQotCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoKGZhaWxfcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gR2V0VHVwbGVEYXRhOwogCQlnb3RvIGNzX2ZhaWxlZDsKIAl9Ci0JaWYgKChmYWlsX3JjID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKQorCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpCiAJCQkJCQkJIT0gQ1NfU1VDQ0VTUykgewogCQlmYWlsX2ZuID0gUGFyc2VUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQotCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKQotCQkJCQkJCSE9IENTX1NVQ0NFU1MpIHsKLQkJZmFpbF9mbiA9IEdldENvbmZpZ3VyYXRpb25JbmZvOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOwogCiAJbGluay0+aW8uQmFzZVBvcnQyID0gMDsKIAlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwogCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlmb3IgKHJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSk7CisJZm9yIChyYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKIAkgICAgIHJjID09IENTX1NVQ0NFU1M7Ci0JICAgICByYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpIHsKLQkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpOworCSAgICAgcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgeworCQlyYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKIAkJCWNvbnRpbnVlOwotCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKIAkJCWNvbnRpbnVlOwogCkBAIC01ODUsMTMgKzU3NCwxMyBAQAogCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzCiAJCQkJCQkmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlyYyA9IHBjbWNpYV9yZXF1ZXN0X2lvKGhhbmRsZSwgJmxpbmstPmlvKTsKKwkJcmMgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCi0JCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihoYW5kbGUpLCAiZm9vIik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihsaW5rKSwgImZvbyIpOwogCQlpZiAocmMgPT0gQ1NfU1VDQ0VTUykKIAkJCWJyZWFrOwogCQllbHNlCi0JCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmhhbmRsZV90b19kZXYoaGFuZGxlKSwKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCQkgICAicGNtY2lhX3JlcXVlc3RfaW8gZmFpbGVkIDB4JXhcbiIsIHJjKTsKIAl9CiAJaWYgKHJjICE9IENTX1NVQ0NFU1MpCkBAIC01OTksMTAgKzU4OCwxMCBAQAogCiAJbGluay0+Y29uZi5JbnRUeXBlID0gMDAwMDAwMDI7CiAKLQlpZiAoKGZhaWxfcmMgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwmbGluay0+Y29uZikpCisJaWYgKChmYWlsX3JjID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCZsaW5rLT5jb25mKSkKIAkJCQkJCQkJIT1DU19TVUNDRVNTKSB7CiAJCWZhaWxfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGhhbmRsZSksCisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCSAgICJwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uIGZhaWxlZCAweCV4XG4iLAogCQkJICAgZmFpbF9yYyk7CiAJCWdvdG8gY3NfcmVsZWFzZTsKQEAgLTYxMiw1NyArNjAxLDMxIEBACiAJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsIERFVklDRV9OQU1FICIlZCIsIGRldm5vKTsKIAlkZXYtPm5vZGUubWFqb3IgPSBtYWpvcjsKIAlkZXYtPm5vZGUubWlub3IgPSBkZXZubzsKLQlkZXYtPm5vZGUubmV4dCA9IE5VTEw7Ci0JbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCWRldi0+bm9kZS5uZXh0ID0gJmRldi0+bm9kZTsKIAogCURFQlVHUCgyLCBkZXYsICJkZXZpY2UgIiBERVZJQ0VfTkFNRSAiJWQgYXQgMHglLjR4LTB4JS40eFxuIiwgZGV2bm8sCiAJICAgICAgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxKTsKIAlERUJVR1AoMiwgZGV2LCAiPC0gcmVhZGVyX2NvbmZpZyAoc3VjYylcbiIpOwogCi0JcmV0dXJuOworCXJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IoaGFuZGxlLCBmYWlsX2ZuLCBmYWlsX3JjKTsKKwljc19lcnJvcihsaW5rLCBmYWlsX2ZuLCBmYWlsX3JjKTsKIGNzX3JlbGVhc2U6CiAJcmVhZGVyX3JlbGVhc2UobGluayk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCByZWFkZXJfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZWFkZXJfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlYWRlcl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCByZWFkZXJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAljbTQwNDBfcmVhZGVyX3JlbGVhc2UobGluay0+cHJpdik7Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZGVyX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHJlYWRlcl9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2OwotCWRldl9saW5rX3QgKmxpbms7Ci0JaW50IGk7CisJaW50IGksIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBDTV9NQVhfREVWOyBpKyspIHsKIAkJaWYgKGRldl90YWJsZVtpXSA9PSBOVUxMKQpAQCAtNjc5LDggKzY0Miw4IEBACiAJZGV2LT50aW1lb3V0ID0gQ0NJRF9EUklWRVJfTUlOSU1VTV9USU1FT1VUOwogCWRldi0+YnVmZmVyX3N0YXR1cyA9IDA7CiAKLQlsaW5rID0gJmRldi0+bGluazsKIAlsaW5rLT5wcml2ID0gZGV2OworCWRldi0+cF9kZXYgPSBsaW5rOwogCiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJZGV2X3RhYmxlW2ldID0gbGluazsKQEAgLTY5MiwxMSArNjU1LDkgQEAKIAlpbml0X3RpbWVyKCZkZXYtPnBvbGxfdGltZXIpOwogCWRldi0+cG9sbF90aW1lci5mdW5jdGlvbiA9ICZjbTQwNDBfZG9fcG9sbDsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlyZWFkZXJfY29uZmlnKGxpbmssIGkpOworCXJldCA9IHJlYWRlcl9jb25maWcobGluaywgaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWNsYXNzX2RldmljZV9jcmVhdGUoY214X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCiAJCQkgICAgImNteCVkIiwgaSk7CkBAIC03MDQsOSArNjY1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmVhZGVyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCByZWFkZXJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXYgPSBsaW5rLT5wcml2OwogCWludCBkZXZubzsKIApAQCAtNzE4LDEwICs2NzgsNyBAQAogCWlmIChkZXZubyA9PSBDTV9NQVhfREVWKQogCQlyZXR1cm47CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1BSRVNFTlQ7Ci0KLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlyZWFkZXJfcmVsZWFzZShsaW5rKTsKKwlyZWFkZXJfcmVsZWFzZShsaW5rKTsKIAogCWRldl90YWJsZVtkZXZub10gPSBOVUxMOwogCWtmcmVlKGRldik7CkBAIC03NTMsMTAgKzcxMCw4IEBACiAgIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiY200MDQwX2NzIiwKIAl9LAotCS5wcm9iZQkJPSByZWFkZXJfYXR0YWNoLAorCS5wcm9iZQkJPSByZWFkZXJfcHJvYmUsCiAJLnJlbW92ZQkJPSByZWFkZXJfZGV0YWNoLAotCS5zdXNwZW5kCT0gcmVhZGVyX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSByZWFkZXJfcmVzdW1lLAogCS5pZF90YWJsZQk9IGNtNDA0MF9pZHMsCiB9OwogCkBAIC03NjksMTYgKzcyNCwxOSBAQAogCWlmICghY214X2NsYXNzKQogCQlyZXR1cm4gLTE7CiAKLQlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJlYWRlcl9kcml2ZXIpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQogCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERFVklDRV9OQU1FLCAmcmVhZGVyX2ZvcHMpOwogCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRQogCQkJIjogY291bGQgbm90IGdldCBtYWpvciBudW1iZXJcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQorCisJcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZyZWFkZXJfZHJpdmVyKTsKKwlpZiAocmMgPCAwKSB7CisJCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCBERVZJQ0VfTkFNRSk7CisJCXJldHVybiByYzsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IGU2YjcxNGIuLjA3MjEzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXN0cnVjdAlfaW5wdXRfc2lnbmFsX2V2ZW50cwlpbnB1dF9zaWduYWxfZXZlbnRzOwogCiAJLyogUENNQ0lBIHN1cHBvcnQgKi8KLQlkZXZfbGlua190CSAgICAgIGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3QJICAgICAgbm9kZTsKIAlpbnQJCSAgICAgIHN0b3A7CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCiAvKiBQQ01DSUEgcHJvdG90eXBlcyAqLwogCi1zdGF0aWMgdm9pZCBtZ3NscGNfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBtZ3NscGNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIG1nc2xwY19yZWxlYXNlKHVfbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgbWdzbHBjX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCkBAIC01MzMsMTQgKzUzMywxNCBAQAogCX0KIH0KIAotc3RhdGljIGludCBtZ3NscGNfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgbWdzbHBjX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIE1HU0xQQ19JTkZPICppbmZvOwotICAgIGRldl9saW5rX3QgKmxpbms7Ci0gICAgCisgICAgaW50IHJldDsKKwogICAgIGlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCSAgICBwcmludGsoIm1nc2xwY19hdHRhY2hcbiIpOwotCQorCiAgICAgaW5mbyA9IChNR1NMUENfSU5GTyAqKWttYWxsb2Moc2l6ZW9mKE1HU0xQQ19JTkZPKSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFpbmZvKSB7CiAJICAgIHByaW50aygiRXJyb3IgY2FuJ3QgYWxsb2NhdGUgZGV2aWNlIGluc3RhbmNlIGRhdGFcbiIpOwpAQCAtNTY1LDI1ICs1NjUsMjIgQEAKICAgICBpbmZvLT5pbXJiX3ZhbHVlID0gMHhmZmZmOwogICAgIGluZm8tPnBpbV92YWx1ZSA9IDB4ZmY7CiAKLSAgICBsaW5rID0gJmluZm8tPmxpbms7CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBpbmZvOwotICAgIAotICAgIC8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKi8KIAogICAgIC8qIEludGVycnVwdCBzZXR1cCAqLwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwogICAgIGxpbmstPmlycS5JUlFJbmZvMSAgID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKLSAgICAKKwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBtZ3NscGNfY29uZmlnKGxpbmspOworICAgIHJldCA9IG1nc2xwY19jb25maWcobGluayk7CisgICAgaWYgKHJldCkKKwkgICAgcmV0dXJuIHJldDsKIAogICAgIG1nc2xwY19hZGRfZGV2aWNlKGluZm8pOwogCkBAIC01OTYsMTUgKzU5MywxMyBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBtZ3NscGNfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG1nc2xwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBNR1NMUENfSU5GTyAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwogICAgIGludCBsYXN0X2ZuLCBsYXN0X3JldDsKICAgICB1X2NoYXIgYnVmWzY0XTsKLSAgICBjb25maWdfaW5mb190IGNvbmY7CiAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CiAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnOwogICAgIApAQCAtNjE3LDI3ICs2MTIsMjAgQEAKICAgICB0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCi0gICAgLyogTG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLSAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotICAgIGxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CiAKICAgICAvKiBnZXQgQ0lTIGNvbmZpZ3VyYXRpb24gZW50cnkgKi8KIAogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCiAgICAgY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAKICAgICBpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpIGRmbHQgPSAqY2ZnOwogICAgIGlmIChjZmctPmluZGV4ID09IDApCkBAIC02NTgsMTEgKzY0NiwxMCBAQAogCSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CiAJICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCSAgICBDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSk7CisJICAgIENTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CiAgICAgfQogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDg7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC02NzAsOSArNjU3LDkgQEAKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyB8PSBJUlFfSEFORExFX1BSRVNFTlQ7CiAgICAgbGluay0+aXJxLkhhbmRsZXIgICAgID0gbWdzbHBjX2lzcjsKICAgICBsaW5rLT5pcnEuSW5zdGFuY2UgICAgPSBpbmZvOwotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKICAgICBpbmZvLT5pb19iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOwogICAgIGluZm8tPmlycV9sZXZlbCA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKQEAgLTY4MCw3ICs2NjcsNyBAQAogICAgIC8qIGFkZCB0byBsaW5rZWQgbGlzdCBvZiBkZXZpY2VzICovCiAgICAgc3ByaW50ZihpbmZvLT5ub2RlLmRldl9uYW1lLCAibWdzbHBjMCIpOwogICAgIGluZm8tPm5vZGUubWFqb3IgPSBpbmZvLT5ub2RlLm1pbm9yID0gMDsKLSAgICBsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCiAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDoiLAogCSAgIGluZm8tPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwpAQCAtNjkwLDEzICs2NzcsMTIgQEAKIAkgICAgcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCiAJCSAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7CiAgICAgcHJpbnRrKCJcbiIpOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogICAgIG1nc2xwY19yZWxlYXNlKCh1X2xvbmcpbGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9CiAKIC8qIENhcmQgaGFzIGJlZW4gcmVtb3ZlZC4KQEAgLTcwNSw1OCArNjkxLDM4IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1nc2xwY19yZWxlYXNlKHVfbG9uZyBhcmcpCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IChkZXZfbGlua190ICopYXJnOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopYXJnOwogCi0gICAgaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCi0JICAgIHByaW50aygibWdzbHBjX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQorCQlwcmludGsoIm1nc2xwY19yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIC8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0gICAgbGluay0+ZGV2ID0gTlVMTDsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkKLQkgICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgdm9pZCBtZ3NscGNfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIG1nc2xwY19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CisJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCisJCXByaW50aygibWdzbHBjX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKLQkgICAgcHJpbnRrKCJtZ3NscGNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwkoKE1HU0xQQ19JTkZPICopbGluay0+cHJpdiktPnN0b3AgPSAxOworCW1nc2xwY19yZWxlYXNlKCh1X2xvbmcpbGluayk7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JICAgICgoTUdTTFBDX0lORk8gKilsaW5rLT5wcml2KS0+c3RvcCA9IDE7Ci0JICAgIG1nc2xwY19yZWxlYXNlKCh1X2xvbmcpbGluayk7Ci0gICAgfQotCi0gICAgbWdzbHBjX3JlbW92ZV9kZXZpY2UoKE1HU0xQQ19JTkZPICopbGluay0+cHJpdik7CisJbWdzbHBjX3JlbW92ZV9kZXZpY2UoKE1HU0xQQ19JTkZPICopbGluay0+cHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgbWdzbHBjX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWdzbHBjX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCU1HU0xQQ19JTkZPICppbmZvID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwogCWluZm8tPnN0b3AgPSAxOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1nc2xwY19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWdzbHBjX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJTUdTTFBDX0lORk8gKmluZm8gPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CiAJaW5mby0+c3RvcCA9IDA7CiAKIAlyZXR1cm4gMDsKQEAgLTEyODAsNyArMTI0Niw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gSVJRX05PTkU7CiAJCQotCWlmICghKGluZm8tPmxpbmsuc3RhdGUgJiBERVZfQ09ORklHKSkKKwlpZiAoIShpbmZvLT5wX2Rldi0+X2xvY2tlZCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAogCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CkBAIC0zMDMzLDcgKzI5OTksNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJzeW5jbGlua19jcyIsCiAJfSwKLQkucHJvYmUJCT0gbWdzbHBjX2F0dGFjaCwKKwkucHJvYmUJCT0gbWdzbHBjX3Byb2JlLAogCS5yZW1vdmUJCT0gbWdzbHBjX2RldGFjaCwKIAkuaWRfdGFibGUJPSBtZ3NscGNfaWRzLAogCS5zdXNwZW5kCT0gbWdzbHBjX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggODZiZTA0Yi4uNThmMzUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTU4NCw3ICsxNTg0LDYgQEAKIAogCXJldHVybiB0d290aGlyZHNNRDRUcmFuc2Zvcm0oZGFkZHIsIGhhc2gpOwogfQotRVhQT1JUX1NZTUJPTChzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX0RDQ1ApIHx8IGRlZmluZWQoQ09ORklHX0lQX0RDQ1BfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9ob3N0LmggYi9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaAppbmRleCAzZWM3M2QxLi4xNzljZGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaApAQCAtMzMsMTIgKzMzLDYgQEAKICNpZm5kZWYgX19yaW9faG9zdF9oX18KICNkZWZpbmUgX19yaW9faG9zdF9oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyICpfaG9zdF9oX3NjY3NfID0gIkAoIylob3N0LmgJMS4yIjsKLSNlbmRpZgotI2VuZGlmCi0KIC8qCiAqKiB0aGUgaG9zdCBzdHJ1Y3R1cmUgLSBvbmUgcGVyIGhvc3QgY2FyZCBpbiB0aGUgc3lzdGVtLgogKi8KQEAgLTc3LDkgKzcxLDYgQEAKICNkZWZpbmUgUkNfU1RBUlRVUCAgICAgICAgICAgIDEKICNkZWZpbmUgUkNfUlVOTklORyAgICAgICAgICAgIDIKICNkZWZpbmUgUkNfU1RVRkZFRCAgICAgICAgICAgIDMKLSNkZWZpbmUgUkNfU09NRVRISU5HICAgICAgICAgIDQKLSNkZWZpbmUgUkNfU09NRVRISU5HX05FVyAgICAgIDUKLSNkZWZpbmUgUkNfU09NRVRISU5HX0VMU0UgICAgIDYKICNkZWZpbmUgUkNfUkVBRFkgICAgICAgICAgICAgIDcKICNkZWZpbmUgUlVOX1NUQVRFICAgICAgICAgICAgIDcKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCmluZGV4IGFjZGE5MzIuLjI5MDE0M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY3RybC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKaW5kZXggZDMxYWJhNi4uNzViMjU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKQEAgLTEzOTQsMTQgKzEzOTQsMTcgQEAKIAkJcmV0dXJuIFJJT19GQUlMOwogCX0KIAotCWlmICgoKGludCkgKChjaGFyKSBQb3J0UC0+SW5Vc2UpID09IC0xKSB8fCAhKENtZEJsa1AgPSBSSU9HZXRDbWRCbGsoKSkpIHsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDYW5ub3QgYWxsb2NhdGUgY29tbWFuZCBibG9jayBmb3IgY29tbWFuZCAlZCBvbiBwb3J0ICVkXG4iLCBDbWQsIFBvcnRQLT5Qb3J0TnVtKTsKKwlpZiAoKFBvcnRQLT5JblVzZSA9PSAodHlwZW9mKFBvcnRQLT5JblVzZSkpLTEpIHx8CisJCQkhKENtZEJsa1AgPSBSSU9HZXRDbWRCbGsoKSkpIHsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDYW5ub3QgYWxsb2NhdGUgY29tbWFuZCBibG9jayAiCisJCQkiZm9yIGNvbW1hbmQgJWQgb24gcG9ydCAlZFxuIiwgQ21kLCBQb3J0UC0+UG9ydE51bSk7CiAJCXJldHVybiBSSU9fRkFJTDsKIAl9CiAKLQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNvbW1hbmQgYmxrICVwIC0gSW5Vc2Ugbm93ICVkXG4iLCBDbWRCbGtQLCBQb3J0UC0+SW5Vc2UpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ29tbWFuZCBibGsgJXAgLSBJblVzZSBub3cgJWRcbiIsCisJCQlDbWRCbGtQLCBQb3J0UC0+SW5Vc2UpOwogCi0JUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kX00gKikgJkNtZEJsa1AtPlBhY2tldC5kYXRhWzBdOworCVBrdENtZFAgPSAoc3RydWN0IFBrdENtZF9NICopJkNtZEJsa1AtPlBhY2tldC5kYXRhWzBdOwogCiAJQ21kQmxrUC0+UGFja2V0LnNyY191bml0ID0gMDsKIAlpZiAoUG9ydFAtPlNlY29uZEJsb2NrKQpAQCAtMTQyNSwzOCArMTQyOCw0NiBAQAogCiAJc3dpdGNoIChDbWQpIHsKIAljYXNlIE1FTURVTVA6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUVNRFVNUCBjb21tYW5kIGJsayAlcCAoYWRkciAweCV4KVxuIiwgQ21kQmxrUCwgKGludCkgU3ViQ21kLkFkZHIpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1FTURVTVAgY29tbWFuZCBibGsgJXAgIgorCQkJCSIoYWRkciAweCV4KVxuIiwgQ21kQmxrUCwgKGludCkgU3ViQ21kLkFkZHIpOwogCQlQa3RDbWRQLT5TdWJDb21tYW5kID0gTUVNRFVNUDsKIAkJUGt0Q21kUC0+U3ViQWRkciA9IFN1YkNtZC5BZGRyOwogCQlicmVhazsKIAljYXNlIEZDTE9TRToKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBGQ0xPU0UgY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIEZDTE9TRSBjb21tYW5kIGJsayAlcFxuIiwKKwkJCQlDbWRCbGtQKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUFEX1JFR0lTVEVSOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFJFQURfUkVHSVNURVIgKDB4JXgpIGNvbW1hbmQgYmxrICVwXG4iLCAoaW50KSBTdWJDbWQuQWRkciwgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgUkVBRF9SRUdJU1RFUiAoMHgleCkgIgorCQkJCSJjb21tYW5kIGJsayAlcFxuIiwgKGludCkgU3ViQ21kLkFkZHIsIENtZEJsa1ApOwogCQlQa3RDbWRQLT5TdWJDb21tYW5kID0gUkVBRF9SRUdJU1RFUjsKIAkJUGt0Q21kUC0+U3ViQWRkciA9IFN1YkNtZC5BZGRyOwogCQlicmVhazsKIAljYXNlIFJFU1VNRToKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBSRVNVTUUgY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFJFU1VNRSBjb21tYW5kIGJsayAlcFxuIiwKKwkJCQlDbWRCbGtQKTsKIAkJYnJlYWs7CiAJY2FzZSBSRkxVU0g6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgUkZMVVNIIGNvbW1hbmQgYmxrICVwXG4iLCBDbWRCbGtQKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBSRkxVU0ggY29tbWFuZCBibGsgJXBcbiIsCisJCQkJQ21kQmxrUCk7CiAJCUNtZEJsa1AtPlBvc3RGdW5jUCA9IFJJT1JGbHVzaEVuYWJsZTsKIAkJYnJlYWs7CiAJY2FzZSBTVVNQRU5EOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFNVU1BFTkQgY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFNVU1BFTkQgY29tbWFuZCBibGsgJXBcbiIsCisJCQkJQ21kQmxrUCk7CiAJCWJyZWFrOwogCiAJY2FzZSBNR0VUOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1HRVQgY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1HRVQgY29tbWFuZCBibGsgJXBcbiIsCisJCQkJQ21kQmxrUCk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0VUOgogCWNhc2UgTUJJQzoKIAljYXNlIE1CSVM6CiAJCUNtZEJsa1AtPlBhY2tldC5kYXRhWzRdID0gKGNoYXIpIFBvcnRQLT5Nb2RlbUxpbmVzOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1TRVQvTUJJQy9NQklTIGNvbW1hbmQgYmxrICVwXG4iLCBDbWRCbGtQKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBNU0VUL01CSUMvTUJJUyBjb21tYW5kICIKKwkJCQkiYmxrICVwXG4iLCBDbWRCbGtQKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdGTFVTSDoKQEAgLTE0NjUsMTIgKzE0NzYsMTQgQEAKIAkJICoqIGFsbG93ZWQgdGhlbiB3ZSBzaG91bGQgbm90IGJvdGhlciBzZW5kaW5nIGFueSBtb3JlIHRvIHRoZQogCQkgKiogUlRBLgogCQkgKi8KLQkJaWYgKChpbnQpICgoY2hhcikgUG9ydFAtPldmbHVzaEZsYWcpID09IChpbnQpIC0xKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlRyYXNoZWQgV0ZMVVNILCBXZmx1c2hGbGFnIGFib3V0IHRvIHdyYXAhIik7CisJCWlmIChQb3J0UC0+V2ZsdXNoRmxhZyA9PSAodHlwZW9mKFBvcnRQLT5XZmx1c2hGbGFnKSktMSkgeworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJUcmFzaGVkIFdGTFVTSCwgIgorCQkJCQkiV2ZsdXNoRmxhZyBhYm91dCB0byB3cmFwISIpOwogCQkJUklPRnJlZUNtZEJsayhDbWRCbGtQKTsKIAkJCXJldHVybiAoUklPX0ZBSUwpOwogCQl9IGVsc2UgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBXRkxVU0ggY29tbWFuZCBibGsgJXBcbiIsIENtZEJsa1ApOworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBXRkxVU0ggY29tbWFuZCAiCisJCQkJCSJibGsgJXBcbiIsIENtZEJsa1ApOwogCQkJQ21kQmxrUC0+UG9zdEZ1bmNQID0gUklPV0ZsdXNoTWFyazsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW9jdGwuaCBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW9jdGwuaAppbmRleCAxNGI4M2ZhLi5lOGFmNWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2lvY3RsLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pb2N0bC5oCkBAIC0zMywxMCArMzMsNiBAQAogI2lmbmRlZglfX3Jpb2lvY3RsX2hfXwogI2RlZmluZQlfX3Jpb2lvY3RsX2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlvaW9jdGxfaF9zY2NzXyA9ICJAKCMpcmlvaW9jdGwuaAkxLjIiOwotI2VuZGlmCi0KIC8qCiAqKiBSSU8gZGV2aWNlIGRyaXZlciAtIHVzZXIgaW9jdGxzIGFuZCBhc3NvY2lhdGVkIHN0cnVjdHVyZXMuCiAqLwpAQCAtNDQsNTUgKzQwLDEzIEBACiBzdHJ1Y3QgcG9ydFN0YXRzIHsKIAlpbnQgcG9ydDsKIAlpbnQgZ2F0aGVyOwotCXVsb25nIHR4Y2hhcnM7Ci0JdWxvbmcgcnhjaGFyczsKLQl1bG9uZyBvcGVuczsKLQl1bG9uZyBjbG9zZXM7Ci0JdWxvbmcgaW9jdGxzOworCXVuc2lnbmVkIGxvbmcgdHhjaGFyczsKKwl1bnNpZ25lZCBsb25nIHJ4Y2hhcnM7CisJdW5zaWduZWQgbG9uZyBvcGVuczsKKwl1bnNpZ25lZCBsb25nIGNsb3NlczsKKwl1bnNpZ25lZCBsb25nIGlvY3RsczsKIH07CiAKLQotI2RlZmluZSBySU9DCSgncic8PDgpCi0jZGVmaW5lCVRDUklPU1RBVEUJKHJJT0MgfCAxKQotI2RlZmluZQlUQ1JJT1hQT04JKHJJT0MgfCAyKQotI2RlZmluZQlUQ1JJT1hQT0ZGCShySU9DIHwgMykKLSNkZWZpbmUJVENSSU9YUENQUwkocklPQyB8IDQpCi0jZGVmaW5lCVRDUklPWFBSSU5UCShySU9DIHwgNSkKLSNkZWZpbmUgVENSSU9JWEFOWU9OCShySU9DIHwgNikKLSNkZWZpbmUJVENSSU9JWEFOWU9GRgkocklPQyB8IDcpCi0jZGVmaW5lIFRDUklPSVhPTk9OCShySU9DIHwgOCkKLSNkZWZpbmUJVENSSU9JWE9OT0ZGCShySU9DIHwgOSkKLSNkZWZpbmUJVENSSU9NQklTCShySU9DIHwgMTApCi0jZGVmaW5lCVRDUklPTUJJQwkocklPQyB8IDExKQotI2RlZmluZQlUQ1JJT1RSSUFECShySU9DIHwgMTIpCi0jZGVmaW5lIFRDUklPVFNUQVRFCShySU9DIHwgMTMpCi0KLS8qCi0qKiAxNS4xMC4xOTk4IEFSRyAtIEVTSUwgMDc2MSBwYXJ0IGZpeAotKiogQWRkIFJJTyBpb2N0bHMgZm9yIG1hbmlwdWxhdGluZyBSVFMgYW5kIENUUyBmbG93IGNvbnRyb2wsIChhcyBMeW54T1MKLSoqIGFwcGVhcnMgdG8gbm90IHN1cHBvcnQgaGFyZHdhcmUgZmxvdyBjb250cm9sKS4KLSovCi0jZGVmaW5lIFRDUklPQ1RTRkxPV0VOCShySU9DIHwgMTQpCS8qIGVuYWJsZSBDVFMgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIFRDUklPQ1RTRkxPV0RJUwkocklPQyB8IDE1KQkvKiBkaXNhYmxlIENUUyBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgVENSSU9SVFNGTE9XRU4JKHJJT0MgfCAxNikJLyogZW5hYmxlIFJUUyBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgVENSSU9SVFNGTE9XRElTCShySU9DIHwgMTcpCS8qIGRpc2FibGUgUlRTIGZsb3cgY29udHJvbCAqLwotCi0vKgotKiogMDkuMTIuMTk5OCBBUkcgLSBFU0lMIDA3NzYgcGFydCBmaXgKLSoqIERlZmluaXRpb24gZm9yICdSSU9DJyBhbHNvIGFwcGVhcnMgaW4gZGFlbW9uLmgsIHNvIHdlJ2QgYmV0dGVyIGRvIGEKLSoqICNpZm5kZWYgaGVyZSBmaXJzdC4KLSoqICdSSU9fUVVJQ0tfQ0hFQ0snIGFsc28gI2RlZmluZSdkIGhlcmUgYXMgdGhpcyBpb2N0bCBpcyBub3cKLSoqIGFsbG93ZWQgdG8gYmUgdXNlZCBieSBjdXN0b21lcnMuCi0qKgotKiogMDUuMDIuMTk5OSBBUkcgLQotKiogVGhpcyBpcyB3aGF0IEkndmUgZGVjaWVkIHRvIGRvIHdpdGggaW9jdGxzIGV0Yy4sIHdoaWNoIGFyZSBpbnRlbmRlZCB0byBiZQotKiogaW52b2tlZCBmcm9tIHVzZXJzIGFwcGxpY2F0aW9ucyA6Ci0qKiBBbnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGRlZmluZWQgaGVyZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSBkYWVtb24uaCwgdGhhdAotKiogd2F5IGl0IHdvbid0IGVuZCB1cCBoYXZpbmcgdG8gYmUgZGVmaW5lZC9tYWludGFpbmVkIGluIHR3byBwbGFjZXMuIFRoZSBvbmx5Ci0qKiBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgdGhpcyBmaWxlIHNob3VsZCBub3cgYmUgI2luY2x1ZGUnZCBieSBkYWVtb24uaAotKioKLSoqICdzdGF0cycgaW9jdGxzIG5vdyAjZGVmaW5lJ2QgaGVyZSBhcyB0aGV5IGFyZSB0byBiZSB1c2VkIGJ5IGN1c3RvbWVycy4KLSovCiAjZGVmaW5lCVJJT0MJKCdSJzw8OCl8KCdpJzw8MTYpfCgnbyc8PDI0KQogCiAjZGVmaW5lCVJJT19RVUlDS19DSEVDSwkgIAkoUklPQyB8IDEwNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zbnNjLmMgYi9kcml2ZXJzL2NoYXIvc25zYy5jCmluZGV4IGI1NDM4MjEuLjU2YzgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zbnNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwpAQCAtMzkwLDcgKzM5MCw4IEBACiAJCQlmb3JtYXRfbW9kdWxlX2lkKGRldm5hbWVwLCBnZW9fbW9kdWxlKGdlb2lkKSwKIAkJCQkJIE1PRFVMRV9GT1JNQVRfQlJJRUYpOwogCQkJZGV2bmFtZXAgPSBkZXZuYW1lICsgc3RybGVuKGRldm5hbWUpOwotCQkJc3ByaW50ZihkZXZuYW1lcCwgIiMlZCIsIGdlb19zbGFiKGdlb2lkKSk7CisJCQlzcHJpbnRmKGRldm5hbWVwLCAiXiVkIyVkIiwgZ2VvX3Nsb3QoZ2VvaWQpLAorCQkJCWdlb19zbGFiKGdlb2lkKSk7CiAKIAkJCS8qIGFsbG9jYXRlIHN5c2N0bCBkZXZpY2UgZGF0YSAqLwogCQkJc2NkID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzeXNjdGxfZGF0YV9zKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBmOGRkODUyLi5hOTBmNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC0xMzQxLDYgKzEzNDEsOSBAQAogCWVsc2UgaWYgKChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJCQkgIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xLCBOVUxMKSkpCiAJCXNvbnlwaV9kZXZpY2UubW9kZWwgPSBTT05ZUElfREVWSUNFX01PREVMX1RZUEUzOworCWVsc2UgaWYgKChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkJCQkgIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xLCBOVUxMKSkpCisJCXNvbnlwaV9kZXZpY2UubW9kZWwgPSBTT05ZUElfREVWSUNFX01PREVMX1RZUEUzOwogCWVsc2UKIAkJc29ueXBpX2RldmljZS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfTU9ERUxfVFlQRTI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90aXBhci5jIGIvZHJpdmVycy9jaGFyL3RpcGFyLmMKaW5kZXggZWIyZWIzZS4uMDc5ZGI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RpcGFyLmMKKysrIGIvZHJpdmVycy9jaGFyL3RpcGFyLmMKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQllcnIgPSBQVFJfRVJSKHRpcGFyX2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KLQlpZiAocGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnRpcGFyX2RyaXZlcikgfHwgdHBfY291bnQgPT0gMCkgeworCWlmIChwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmdGlwYXJfZHJpdmVyKSkgewogCQlwcmludGsoS0VSTl9FUlIgInRpcGFyOiB1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBwYXJwb3J0XG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXRfY2xhc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGxjbGsuYyBiL2RyaXZlcnMvY2hhci90bGNsay5jCmluZGV4IDI1NDY2MzcuLmY1OGFkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90bGNsay5jCisrKyBiL2RyaXZlcnMvY2hhci90bGNsay5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlY2VpdmVkX3JlZl9jbGszYSwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihyZWNlaXZlZF9yZWZfY2xrM2EsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9yZWNlaXZlZF9yZWZfY2xrM2EpOwogCiAKQEAgLTM0OSw3ICszNDksNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIocmVjZWl2ZWRfcmVmX2NsazNiLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHJlY2VpdmVkX3JlZl9jbGszYiwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX3JlY2VpdmVkX3JlZl9jbGszYik7CiAKIApAQCAtMzcxLDcgKzM3MSw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrM2Jfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGszYl9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrM2Jfb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlX2NsazNhX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtMzkyLDcgKzM5Miw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrM2Ffb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGszYV9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrM2Ffb3V0cHV0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZW5hYmxlX2Nsa2IxX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNDEzLDcgKzQxMyw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfY2xrYjFfb3V0cHV0LCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGtiMV9vdXRwdXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9lbmFibGVfY2xrYjFfb3V0cHV0KTsKIAogCkBAIC00MzUsNyArNDM1LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGthMV9vdXRwdXQsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2ExX291dHB1dCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2VuYWJsZV9jbGthMV9vdXRwdXQpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9lbmFibGVfY2xrYjBfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC00NTYsNyArNDU2LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGtiMF9vdXRwdXQsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2IwX291dHB1dCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2VuYWJsZV9jbGtiMF9vdXRwdXQpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9lbmFibGVfY2xrYTBfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC00NzcsNyArNDc3LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZV9jbGthMF9vdXRwdXQsIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2Nsa2EwX291dHB1dCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2VuYWJsZV9jbGthMF9vdXRwdXQpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zZWxlY3RfYW1jYjJfdHJhbnNtaXRfY2xvY2soc3RydWN0IGRldmljZSAqZCwKQEAgLTUxOSw3ICs1MTksNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X2FtY2IyX3RyYW5zbWl0X2Nsb2NrLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9hbWNiMl90cmFuc21pdF9jbG9jaywgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJc3RvcmVfc2VsZWN0X2FtY2IyX3RyYW5zbWl0X2Nsb2NrKTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2VsZWN0X2FtY2IxX3RyYW5zbWl0X2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC01NjAsNyArNTYwLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9hbWNiMV90cmFuc21pdF9jbG9jaywgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfYW1jYjFfdHJhbnNtaXRfY2xvY2ssIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLAogCQlzdG9yZV9zZWxlY3RfYW1jYjFfdHJhbnNtaXRfY2xvY2spOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zZWxlY3RfcmVkdW5kYW50X2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC01ODEsNyArNTgxLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHNlbGVjdF9yZWR1bmRhbnRfY2xvY2ssIFNfSVdVR08sIE5VTEwsCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZWN0X3JlZHVuZGFudF9jbG9jaywgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX3NlbGVjdF9yZWR1bmRhbnRfY2xvY2spOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zZWxlY3RfcmVmX2ZyZXF1ZW5jeShzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNjAyLDcgKzYwMiw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfcmVmX2ZyZXF1ZW5jeSwgU19JV1VHTywgTlVMTCwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWxlY3RfcmVmX2ZyZXF1ZW5jeSwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX3NlbGVjdF9yZWZfZnJlcXVlbmN5KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZmlsdGVyX3NlbGVjdChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNjIzLDcgKzYyMyw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfc2VsZWN0LCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9maWx0ZXJfc2VsZWN0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfc2VsZWN0LCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgc3RvcmVfZmlsdGVyX3NlbGVjdCk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2hhcmR3YXJlX3N3aXRjaGluZ19tb2RlKHN0cnVjdCBkZXZpY2UgKmQsCiAJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC02NDMsNyArNjQzLDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGhhcmR3YXJlX3N3aXRjaGluZ19tb2RlLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGhhcmR3YXJlX3N3aXRjaGluZ19tb2RlLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwKIAkJc3RvcmVfaGFyZHdhcmVfc3dpdGNoaW5nX21vZGUpOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9oYXJkd2FyZV9zd2l0Y2hpbmcoc3RydWN0IGRldmljZSAqZCwKQEAgLTY2NCw3ICs2NjQsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoaGFyZHdhcmVfc3dpdGNoaW5nLCBTX0lXVUdPLCBOVUxMLAorc3RhdGljIERFVklDRV9BVFRSKGhhcmR3YXJlX3N3aXRjaGluZywgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsCiAJCXN0b3JlX2hhcmR3YXJlX3N3aXRjaGluZyk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3JlZmFsaWduIChzdHJ1Y3QgZGV2aWNlICpkLApAQCAtNjg0LDcgKzY4NCw3IEBACiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZWZhbGlnbiwgU19JV1VHTywgTlVMTCwgc3RvcmVfcmVmYWxpZ24pOworc3RhdGljIERFVklDRV9BVFRSKHJlZmFsaWduLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgc3RvcmVfcmVmYWxpZ24pOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9tb2RlX3NlbGVjdCAoc3RydWN0IGRldmljZSAqZCwKIAkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTcwNCw3ICs3MDQsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIobW9kZV9zZWxlY3QsIFNfSVdVR08sIE5VTEwsIHN0b3JlX21vZGVfc2VsZWN0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlX3NlbGVjdCwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHN0b3JlX21vZGVfc2VsZWN0KTsKIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVzZXQgKHN0cnVjdCBkZXZpY2UgKmQsCiAJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC03MjQsNyArNzI0LDcgQEAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlc2V0LCBTX0lXVUdPLCBOVUxMLCBzdG9yZV9yZXNldCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmVzZXQsIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLCBzdG9yZV9yZXNldCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0bGNsa19zeXNmc19lbnRyaWVzW10gPSB7CiAJJmRldl9hdHRyX2N1cnJlbnRfcmVmLmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvdHBtL0tjb25maWcKaW5kZXggYTY4NzNiZi4uZmUwMGM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci90cG0vS2NvbmZpZwpAQCAtMjAsOSArMjAsMTggQEAKIAkgIE5vdGU6IEZvciBtb3JlIFRQTSBkcml2ZXJzIGVuYWJsZSBDT05GSUdfUE5QLCBDT05GSUdfQUNQSQogCSAgYW5kIENPTkZJR19QTlBBQ1BJLgogCitjb25maWcgVENHX1RJUworCXRyaXN0YXRlICJUUE0gSW50ZXJmYWNlIFNwZWNpZmljYXRpb24gMS4yIEludGVyZmFjZSIKKwlkZXBlbmRzIG9uIFRDR19UUE0gJiYgUE5QQUNQSQorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBoYXZlIGEgVFBNIHNlY3VyaXR5IGNoaXAgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUKKwkgIFRDRyBUSVMgMS4yIFRQTSBzcGVjaWZpY2F0aW9uIHNheSBZZXMgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZQorCSAgZnJvbSB3aXRoaW4gTGludXguICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKKwkgIE0gaGVyZTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0cG1fdGlzLgorCiBjb25maWcgVENHX05TQwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFRQTSBJbnRlcmZhY2UiCi0JZGVwZW5kcyBvbiBUQ0dfVFBNCisJZGVwZW5kcyBvbiBUQ0dfVFBNICYmIFBOUEFDUEkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIFRQTSBzZWN1cml0eSBjaGlwIGZyb20gTmF0aW9uYWwgU2VtaWNvbmR1dG9yIAogCSAgc2F5IFllcyBhbmQgaXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGZyb20gd2l0aGluIExpbnV4LiAgVG8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL3RwbS9NYWtlZmlsZQppbmRleCBiYTQ1ODJkLi5lYTNhMWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci90cG0vTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBpZmRlZiBDT05GSUdfQUNQSQogCW9iai0kKENPTkZJR19UQ0dfVFBNKSArPSB0cG1fYmlvcy5vCiBlbmRpZgorb2JqLSQoQ09ORklHX1RDR19USVMpICs9IHRwbV90aXMubwogb2JqLSQoQ09ORklHX1RDR19OU0MpICs9IHRwbV9uc2Mubwogb2JqLSQoQ09ORklHX1RDR19BVE1FTCkgKz0gdHBtX2F0bWVsLm8KIG9iai0kKENPTkZJR19UQ0dfSU5GSU5FT04pICs9IHRwbV9pbmZpbmVvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCA1YTM4NzA0Li42ODg5ZTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTMyLDEyICszMiwyOTEgQEAKIAlUUE1fTUlOT1IgPSAyMjQsCS8qIG9mZmljaWFsbHkgYXNzaWduZWQgKi8KIAlUUE1fQlVGU0laRSA9IDIwNDgsCiAJVFBNX05VTV9ERVZJQ0VTID0gMjU2LAotCVRQTV9OVU1fTUFTS19FTlRSSUVTID0gVFBNX05VTV9ERVZJQ0VTIC8gKDggKiBzaXplb2YoaW50KSkKIH07CiAKK2VudW0gdHBtX2R1cmF0aW9uIHsKKwlUUE1fU0hPUlQgPSAwLAorCVRQTV9NRURJVU0gPSAxLAorCVRQTV9MT05HID0gMiwKKwlUUE1fVU5ERUZJTkVELAorfTsKKworI2RlZmluZSBUUE1fTUFYX09SRElOQUwgMjQzCisjZGVmaW5lIFRQTV9NQVhfUFJPVEVDVEVEX09SRElOQUwgMTIKKyNkZWZpbmUgVFBNX1BST1RFQ1RFRF9PUkRJTkFMX01BU0sgMHhGRgorCiBzdGF0aWMgTElTVF9IRUFEKHRwbV9jaGlwX2xpc3QpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhkcml2ZXJfbG9jayk7Ci1zdGF0aWMgaW50IGRldl9tYXNrW1RQTV9OVU1fTUFTS19FTlRSSUVTXTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfbWFzaywgVFBNX05VTV9ERVZJQ0VTKTsKKworLyoKKyAqIEFycmF5IHdpdGggb25lIGVudHJ5IHBlciBvcmRpbmFsIGRlZmluaW5nIHRoZSBtYXhpbXVtIGFtb3VudAorICogb2YgdGltZSB0aGUgY2hpcCBjb3VsZCB0YWtlIHRvIHJldHVybiB0aGUgcmVzdWx0LiAgVGhlIG9yZGluYWwKKyAqIGRlc2lnbmF0aW9uIG9mIHNob3J0LCBtZWRpdW0gb3IgbG9uZyBpcyBkZWZpbmVkIGluIGEgdGFibGUgaW4KKyAqIFRDRyBTcGVjaWZpY2F0aW9uIFRQTSBNYWluIFBhcnQgMiBUUE0gU3RydWN0dXJlcyBTZWN0aW9uIDE3LiBUaGUKKyAqIHZhbHVlcyBvZiB0aGUgU0hPUlQsIE1FRElVTSwgYW5kIExPTkcgZHVyYXRpb25zIGFyZSByZXRyaWV2ZWQKKyAqIGZyb20gdGhlIGNoaXAgZHVyaW5nIGluaXRpYWxpemF0aW9uIHdpdGggYSBjYWxsIHRvIHRwbV9nZXRfdGltZW91dHMuCisgKi8KK3N0YXRpYyBjb25zdCB1OCB0cG1fcHJvdGVjdGVkX29yZGluYWxfZHVyYXRpb25bVFBNX01BWF9QUk9URUNURURfT1JESU5BTF0gPSB7CisJVFBNX1VOREVGSU5FRCwJCS8qIDAgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCQkvKiA1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAxMCAqLworCVRQTV9TSE9SVCwKK307CisKK3N0YXRpYyBjb25zdCB1OCB0cG1fb3JkaW5hbF9kdXJhdGlvbltUUE1fTUFYX09SRElOQUxdID0geworCVRQTV9VTkRFRklORUQsCQkvKiAwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogNSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMTAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX01FRElVTSwKKwlUUE1fTE9ORywKKwlUUE1fTE9ORywKKwlUUE1fTUVESVVNLAkJLyogMTUgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCisJVFBNX0xPTkcsCisJVFBNX1NIT1JULAkJLyogMjAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX01FRElVTSwKKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX1NIT1JULAkJLyogMjUgKi8KKwlUUE1fU0hPUlQsCisJVFBNX01FRElVTSwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCQkvKiAzMCAqLworCVRQTV9MT05HLAorCVRQTV9NRURJVU0sCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCQkvKiAzNSAqLworCVRQTV9NRURJVU0sCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX01FRElVTSwJCS8qIDQwICovCisJVFBNX0xPTkcsCisJVFBNX01FRElVTSwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwJCS8qIDQ1ICovCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX0xPTkcsCisJVFBNX01FRElVTSwJCS8qIDUwICovCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogNTUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9NRURJVU0sCQkvKiA2MCAqLworCVRQTV9NRURJVU0sCisJVFBNX01FRElVTSwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCQkvKiA2NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogNzAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDc1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTE9ORywJCS8qIDgwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTUVESVVNLAorCVRQTV9MT05HLAorCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAkJLyogODUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwJCS8qIDkwICovCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9VTkRFRklORUQsCQkvKiA5NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX01FRElVTSwJCS8qIDEwMCAqLworCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCQkvKiAxMDUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwJCS8qIDExMCAqLworCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCQkvKiAxMTUgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTE9ORywJCS8qIDEyMCAqLworCVRQTV9MT05HLAorCVRQTV9NRURJVU0sCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAkJLyogMTI1ICovCisJVFBNX1NIT1JULAorCVRQTV9MT05HLAorCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAkJLyogMTMwICovCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwKKwlUUE1fTUVESVVNLAorCVRQTV9VTkRFRklORUQsCQkvKiAxMzUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9TSE9SVCwJCS8qIDE0MCAqLworCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMTQ1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAxNTAgKi8KKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMTU1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAxNjAgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCQkvKiAxNjUgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9MT05HLAkJLyogMTcwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMTc1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTUVESVVNLAkJLyogMTgwICovCisJVFBNX1NIT1JULAorCVRQTV9NRURJVU0sCisJVFBNX01FRElVTSwKKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCQkvKiAxODUgKi8KKwlUUE1fU0hPUlQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDE5MCAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwJCS8qIDE5NSAqLworCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAkJLyogMjAwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwJCS8qIDIwNSAqLworCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fTUVESVVNLAkJLyogMjEwICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fTUVESVVNLAorCVRQTV9NRURJVU0sCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAkJLyogMjE1ICovCisJVFBNX01FRElVTSwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwJCS8qIDIyMCAqLworCVRQTV9TSE9SVCwKKwlUUE1fU0hPUlQsCisJVFBNX1NIT1JULAorCVRQTV9TSE9SVCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMjI1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAyMzAgKi8KKwlUUE1fTE9ORywKKwlUUE1fTUVESVVNLAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAkJLyogMjM1ICovCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fVU5ERUZJTkVELAorCVRQTV9VTkRFRklORUQsCisJVFBNX1VOREVGSU5FRCwKKwlUUE1fU0hPUlQsCQkvKiAyNDAgKi8KKwlUUE1fVU5ERUZJTkVELAorCVRQTV9NRURJVU0sCit9OwogCiBzdGF0aWMgdm9pZCB1c2VyX3JlYWRlcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQogewpAQCAtNDYsNyArMzI1LDcgQEAKIAlzY2hlZHVsZV93b3JrKCZjaGlwLT53b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgdGltZW91dF93b3JrKHZvaWQgKiBwdHIpCitzdGF0aWMgdm9pZCB0aW1lb3V0X3dvcmsodm9pZCAqcHRyKQogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IHB0cjsKIApAQCAtNTcsMTcgKzMzNiw0MyBAQAogfQogCiAvKgorICogUmV0dXJucyBtYXggbnVtYmVyIG9mIGppZmZpZXMgdG8gd2FpdAorICovCit1bnNpZ25lZCBsb25nIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24oc3RydWN0IHRwbV9jaGlwICpjaGlwLAorCQkJCQkgICB1MzIgb3JkaW5hbCkKK3sKKwlpbnQgZHVyYXRpb25faWR4ID0gVFBNX1VOREVGSU5FRDsKKwlpbnQgZHVyYXRpb24gPSAwOworCisJaWYgKG9yZGluYWwgPCBUUE1fTUFYX09SRElOQUwpCisJCWR1cmF0aW9uX2lkeCA9IHRwbV9vcmRpbmFsX2R1cmF0aW9uW29yZGluYWxdOworCWVsc2UgaWYgKChvcmRpbmFsICYgVFBNX1BST1RFQ1RFRF9PUkRJTkFMX01BU0spIDwKKwkJIFRQTV9NQVhfUFJPVEVDVEVEX09SRElOQUwpCisJCWR1cmF0aW9uX2lkeCA9CisJCSAgICB0cG1fcHJvdGVjdGVkX29yZGluYWxfZHVyYXRpb25bb3JkaW5hbCAmCisJCQkJCQkgICBUUE1fUFJPVEVDVEVEX09SRElOQUxfTUFTS107CisKKwlpZiAoZHVyYXRpb25faWR4ICE9IFRQTV9VTkRFRklORUQpCisJCWR1cmF0aW9uID0gY2hpcC0+dmVuZG9yLmR1cmF0aW9uW2R1cmF0aW9uX2lkeF07CisJaWYgKGR1cmF0aW9uIDw9IDApCisJCXJldHVybiAyICogNjAgKiBIWjsKKwllbHNlCisJCXJldHVybiBkdXJhdGlvbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24pOworCisvKgogICogSW50ZXJuYWwga2VybmVsIGludGVyZmFjZSB0byB0cmFuc21pdCBUUE0gY29tbWFuZHMKICAqLwogc3RhdGljIHNzaXplX3QgdHBtX3RyYW5zbWl0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBidWZzaXopCiB7CiAJc3NpemVfdCByYzsKLQl1MzIgY291bnQ7CisJdTMyIGNvdW50LCBvcmRpbmFsOwogCXVuc2lnbmVkIGxvbmcgc3RvcDsKIAogCWNvdW50ID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChidWYgKyAyKSkpOwotCisJb3JkaW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgNikpKTsKIAlpZiAoY291bnQgPT0gMCkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCWlmIChjb3VudCA+IGJ1ZnNpeikgewpAQCAtNzgsMjEgKzM4MywyMyBAQAogCiAJZG93bigmY2hpcC0+dHBtX211dGV4KTsKIAotCWlmICgocmMgPSBjaGlwLT52ZW5kb3ItPnNlbmQoY2hpcCwgKHU4ICopIGJ1ZiwgY291bnQpKSA8IDApIHsKKwlpZiAoKHJjID0gY2hpcC0+dmVuZG9yLnNlbmQoY2hpcCwgKHU4ICopIGJ1ZiwgY291bnQpKSA8IDApIHsKIAkJZGV2X2VycihjaGlwLT5kZXYsCiAJCQkidHBtX3RyYW5zbWl0OiB0cG1fc2VuZDogZXJyb3IgJXpkXG4iLCByYyk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXN0b3AgPSBqaWZmaWVzICsgMiAqIDYwICogSFo7Ci0JZG8gewotCQl1OCBzdGF0dXMgPSBjaGlwLT52ZW5kb3ItPnN0YXR1cyhjaGlwKTsKLQkJaWYgKChzdGF0dXMgJiBjaGlwLT52ZW5kb3ItPnJlcV9jb21wbGV0ZV9tYXNrKSA9PQotCQkgICAgY2hpcC0+dmVuZG9yLT5yZXFfY29tcGxldGVfdmFsKSB7Ci0JCQlnb3RvIG91dF9yZWN2OwotCQl9CisJaWYgKGNoaXAtPnZlbmRvci5pcnEpCisJCWdvdG8gb3V0X3JlY3Y7CiAKLQkJaWYgKChzdGF0dXMgPT0gY2hpcC0+dmVuZG9yLT5yZXFfY2FuY2VsZWQpKSB7CisJc3RvcCA9IGppZmZpZXMgKyB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKGNoaXAsIG9yZGluYWwpOworCWRvIHsKKwkJdTggc3RhdHVzID0gY2hpcC0+dmVuZG9yLnN0YXR1cyhjaGlwKTsKKwkJaWYgKChzdGF0dXMgJiBjaGlwLT52ZW5kb3IucmVxX2NvbXBsZXRlX21hc2spID09CisJCSAgICBjaGlwLT52ZW5kb3IucmVxX2NvbXBsZXRlX3ZhbCkKKwkJCWdvdG8gb3V0X3JlY3Y7CisKKwkJaWYgKChzdGF0dXMgPT0gY2hpcC0+dmVuZG9yLnJlcV9jYW5jZWxlZCkpIHsKIAkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiT3BlcmF0aW9uIENhbmNlbGVkXG4iKTsKIAkJCXJjID0gLUVDQU5DRUxFRDsKIAkJCWdvdG8gb3V0OwpAQCAtMTAyLDE0ICs0MDksMTMgQEAKIAkJcm1iKCk7CiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOwogCi0KLQljaGlwLT52ZW5kb3ItPmNhbmNlbChjaGlwKTsKKwljaGlwLT52ZW5kb3IuY2FuY2VsKGNoaXApOwogCWRldl9lcnIoY2hpcC0+ZGV2LCAiT3BlcmF0aW9uIFRpbWVkIG91dFxuIik7CiAJcmMgPSAtRVRJTUU7CiAJZ290byBvdXQ7CiAKIG91dF9yZWN2OgotCXJjID0gY2hpcC0+dmVuZG9yLT5yZWN2KGNoaXAsICh1OCAqKSBidWYsIGJ1ZnNpeik7CisJcmMgPSBjaGlwLT52ZW5kb3IucmVjdihjaGlwLCAodTggKikgYnVmLCBidWZzaXopOwogCWlmIChyYyA8IDApCiAJCWRldl9lcnIoY2hpcC0+ZGV2LAogCQkJInRwbV90cmFuc21pdDogdHBtX3JlY3Y6IGVycm9yICV6ZFxuIiwgcmMpOwpAQCAtMTE5LDE3ICs0MjUsMjQ3IEBACiB9CiAKICNkZWZpbmUgVFBNX0RJR0VTVF9TSVpFIDIwCi0jZGVmaW5lIENBUF9QQ1JfUkVTVUxUX1NJWkUgMTgKLXN0YXRpYyBjb25zdCB1OCBjYXBfcGNyW10gPSB7CisjZGVmaW5lIFRQTV9FUlJPUl9TSVpFIDEwCisjZGVmaW5lIFRQTV9SRVRfQ09ERV9JRFggNgorI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFggMTAKKyNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCAxNAorI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYIDE4CisjZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFggMjIKKyNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl80X0lEWCAyNgorI2RlZmluZSBUUE1fR0VUX0NBUF9QRVJNX0RJU0FCTEVfSURYIDE2CisjZGVmaW5lIFRQTV9HRVRfQ0FQX1BFUk1fSU5BQ1RJVkVfSURYIDE4CisjZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9CT09MXzFfSURYIDE0CisjZGVmaW5lIFRQTV9HRVRfQ0FQX1RFTVBfSU5BQ1RJVkVfSURYIDE2CisKKyNkZWZpbmUgVFBNX0NBUF9JRFggMTMKKyNkZWZpbmUgVFBNX0NBUF9TVUJDQVBfSURYIDIxCisKK2VudW0gdHBtX2NhcGFiaWxpdGllcyB7CisJVFBNX0NBUF9GTEFHID0gNCwKKwlUUE1fQ0FQX1BST1AgPSA1LAorfTsKKworZW51bSB0cG1fc3ViX2NhcGFiaWxpdGllcyB7CisJVFBNX0NBUF9QUk9QX1BDUiA9IDB4MSwKKwlUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSID0gMHgzLAorCVRQTV9DQVBfRkxBR19QRVJNID0gMHg4LAorCVRQTV9DQVBfRkxBR19WT0wgPSAweDksCisJVFBNX0NBUF9QUk9QX09XTkVSID0gMHgxMSwKKwlUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQgPSAweDE1LAorCVRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT04gPSAweDIwLAorfTsKKworLyoKKyAqIFRoaXMgaXMgYSBzZW1pIGdlbmVyaWMgR2V0Q2FwYWJpbGl0eSBjb21tYW5kIGZvciB1c2UKKyAqIHdpdGggdGhlIGNhcGFiaWxpdHkgdHlwZSBUUE1fQ0FQX1BST1Agb3IgVFBNX0NBUF9GTEFHCisgKiBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzdWJfY2FwYWJpbGl0aWVzLgorICovCisKK3N0YXRpYyBjb25zdCB1OCB0cG1fY2FwW10gPSB7CiAJMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KIAkwLCAwLCAwLCAyMiwJCS8qIGxlbmd0aCAqLwogCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDUsCi0JMCwgMCwgMCwgNCwKLQkwLCAwLCAxLCAxCisJMCwgMCwgMCwgMCwJCS8qIFRQTV9DQVBfPFRZUEU+ICovCisJMCwgMCwgMCwgNCwJCS8qIFRQTV9DQVBfU1VCXzxUWVBFPiBzaXplICovCisJMCwgMCwgMSwgMAkJLyogVFBNX0NBUF9TVUJfPFRZUEU+ICovCiB9OwogCi0jZGVmaW5lIFJFQURfUENSX1JFU1VMVF9TSVpFIDMwCitzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqZGF0YSwgaW50IGxlbiwKKwkJCSAgICBjaGFyICpkZXNjKQoreworCWludCBlcnI7CisKKwlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgbGVuKTsKKwlpZiAobGVuIDwgIDApCisJCXJldHVybiBsZW47CisJaWYgKGxlbiA9PSBUUE1fRVJST1JfU0laRSkgeworCQllcnIgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgJXNcbiIsIGVyciwgZGVzYyk7CisJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwl1OCBkYXRhW21heF90KGludCwgQVJSQVlfU0laRSh0cG1fY2FwKSwgMzApXTsKKwlzc2l6ZV90IHJjOworCisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dlbl9pbnRlcnJ1cHQpOworCit2b2lkIHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQoreworCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzMCldOworCXNzaXplX3QgcmM7CisJdTMyIHRpbWVvdXQ7CisKKwltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKKwlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKKwlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CisKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CisJaWYgKHJjKQorCQlnb3RvIGR1cmF0aW9uOworCisJaWYgKGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCkpKQorCSAgICAhPSA0ICogc2l6ZW9mKHUzMikpCisJCWdvdG8gZHVyYXRpb247CisKKwkvKiBEb24ndCBvdmVyd3JpdGUgZGVmYXVsdCBpZiB2YWx1ZSBpcyAwICovCisJdGltZW91dCA9CisJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSk7CisJaWYgKHRpbWVvdXQpCisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCXRpbWVvdXQgPQorCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYKSkpOworCWlmICh0aW1lb3V0KQorCQljaGlwLT52ZW5kb3IudGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwl0aW1lb3V0ID0KKwkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCkpKTsKKwlpZiAodGltZW91dCkKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJdGltZW91dCA9CisJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFgpKSk7CisJaWYgKHRpbWVvdXQpCisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCitkdXJhdGlvbjoKKwltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKKwlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKKwlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlvbnMiKTsKKwlpZiAocmMpCisJCXJldHVybjsKKworCWlmIChiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFgpKSkKKwkgICAgIT0gMyAqIHNpemVvZih1MzIpKQorCQlyZXR1cm47CisKKwljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9CisJICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCisJCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKKwljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX01FRElVTV0gPQorCSAgICBtc2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CisJCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKworCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKSk7CisJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9MT05HXSA9CisJICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCisJCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9nZXRfdGltZW91dHMpOworCit2b2lkIHRwbV9jb250aW51ZV9zZWxmdGVzdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJdTggZGF0YVtdID0geworCQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLworCQkwLCAwLCAwLCAxMCwJCS8qIGxlbmd0aCAqLworCQkwLCAwLCAwLCA4MywJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLworCX07CisKKwl0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9jb250aW51ZV9zZWxmdGVzdCk7CisKK3NzaXplX3QgdHBtX3Nob3dfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCisJCQljaGFyICpidWYpCit7CisJdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDM1KV07CisJc3NpemVfdCByYzsKKworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1BFUk07CisKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkiYXR0ZW10cGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBzdGF0ZSIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICFkYXRhW1RQTV9HRVRfQ0FQX1BFUk1fRElTQUJMRV9JRFhdKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2VuYWJsZWQpOworCitzc2l6ZV90IHRwbV9zaG93X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCisJCQljaGFyICpidWYpCit7CisJdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDM1KV07CisJc3NpemVfdCByYzsKKworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1BFUk07CisKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkiYXR0ZW10cGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBzdGF0ZSIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICFkYXRhW1RQTV9HRVRfQ0FQX1BFUk1fSU5BQ1RJVkVfSURYXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19hY3RpdmUpOworCitzc2l6ZV90IHRwbV9zaG93X293bmVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwl1OCBkYXRhW3NpemVvZih0cG1fY2FwKV07CisJc3NpemVfdCByYzsKKworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CisJZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7CisJZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX09XTkVSOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBvd25lciBzdGF0ZSIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGFbVFBNX0dFVF9DQVBfUkVUX0JPT0xfMV9JRFhdKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X293bmVkKTsKKworc3NpemVfdCB0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICpidWYpCit7CisJdTggZGF0YVtzaXplb2YodHBtX2NhcCldOworCXNzaXplX3QgcmM7CisKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOworCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOworCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19WT0w7CisKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRlbXBvcmFyeSBzdGF0ZSIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGFbVFBNX0dFVF9DQVBfVEVNUF9JTkFDVElWRV9JRFhdKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3RlbXBfZGVhY3RpdmF0ZWQpOworCiBzdGF0aWMgY29uc3QgdTggcGNycmVhZFtdID0gewogCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCiAJMCwgMCwgMCwgMTQsCQkvKiBsZW5ndGggKi8KQEAgLTE0MCw4ICs2NzYsOCBAQAogc3NpemVfdCB0cG1fc2hvd19wY3JzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQl1OCBkYXRhW1JFQURfUENSX1JFU1VMVF9TSVpFXTsKLQlzc2l6ZV90IGxlbjsKKwl1OCBkYXRhW21heF90KGludCwgbWF4KEFSUkFZX1NJWkUodHBtX2NhcCksIEFSUkFZX1NJWkUocGNycmVhZCkpLCAzMCldOworCXNzaXplX3QgcmM7CiAJaW50IGksIGosIG51bV9wY3JzOwogCV9fYmUzMiBpbmRleDsKIAljaGFyICpzdHIgPSBidWY7CkBAIC0xNTAsMjkgKzY4NiwyNCBAQAogCWlmIChjaGlwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbWVtY3B5KGRhdGEsIGNhcF9wY3IsIHNpemVvZihjYXBfcGNyKSk7Ci0JaWYgKChsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSkKLQkgICAgPCBDQVBfUENSX1JFU1VMVF9TSVpFKSB7Ci0JCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCi0JCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgUENSU1xuIiwKLQkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIDYpKSkpOworCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOworCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOworCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9QQ1I7CisKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBQQ1JTIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKIAludW1fcGNycyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIDE0KSkpOwotCiAJZm9yIChpID0gMDsgaSA8IG51bV9wY3JzOyBpKyspIHsKIAkJbWVtY3B5KGRhdGEsIHBjcnJlYWQsIHNpemVvZihwY3JyZWFkKSk7CiAJCWluZGV4ID0gY3B1X3RvX2JlMzIoaSk7CiAJCW1lbWNweShkYXRhICsgMTAsICZpbmRleCwgNCk7Ci0JCWlmICgobGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSkpCi0JCSAgICA8IFJFQURfUENSX1JFU1VMVF9TSVpFKXsKLQkJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCIKLQkJCQkiIGF0dGVtcHRpbmcgdG8gcmVhZCBQQ1IgJWQgb2YgJWRcbiIsCi0JCQkJYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgNikpKSwKLQkJCQlpLCBudW1fcGNycyk7CisJCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwkJCQkiYXR0ZW1wdGluZyB0byByZWFkIGEgUENSIik7CisJCWlmIChyYykKIAkJCWdvdG8gb3V0OwotCQl9CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlBDUi0lMDJkOiAiLCBpKTsKIAkJZm9yIChqID0gMDsgaiA8IFRQTV9ESUdFU1RfU0laRTsgaisrKQogCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTAyWCAiLCAqKGRhdGEgKyAxMCArIGopKTsKQEAgLTE5NCw3ICs3MjUsNyBAQAogCQkgICAgICAgY2hhciAqYnVmKQogewogCXU4ICpkYXRhOwotCXNzaXplX3QgbGVuOworCXNzaXplX3QgZXJyOwogCWludCBpLCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKQEAgLTIwOCwxNCArNzM5LDEwIEBACiAKIAltZW1jcHkoZGF0YSwgcmVhZHB1YmVrLCBzaXplb2YocmVhZHB1YmVrKSk7CiAKLQlpZiAoKGxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFKSkgPAotCSAgICBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFKSB7Ci0JCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCi0JCQkJImF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgUFVCRUtcbiIsCi0JCQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgNikpKSk7Ci0JCXJjID0gMDsKKwllcnIgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKKwkJCSJhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFBVQkVLIik7CisJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JfQogCiAJLyogCiAJICAgaWdub3JlIGhlYWRlciAxMCBieXRlcwpAQCAtMjQ1LDM2ICs3NzIsNjggQEAKIAkJaWYgKChpICsgMSkgJSAxNiA9PSAwKQogCQkJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsKIAl9Ci0JcmMgPSBzdHIgLSBidWY7CiBvdXQ6CisJcmMgPSBzdHIgLSBidWY7CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfcHViZWspOwogCi0jZGVmaW5lIENBUF9WRVJfUkVTVUxUX1NJWkUgMTgKKyNkZWZpbmUgQ0FQX1ZFUlNJT05fMV8xIDYKKyNkZWZpbmUgQ0FQX1ZFUlNJT05fMV8yIDB4MUEKKyNkZWZpbmUgQ0FQX1ZFUlNJT05fSURYIDEzCiBzdGF0aWMgY29uc3QgdTggY2FwX3ZlcnNpb25bXSA9IHsKIAkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwogCTAsIDAsIDAsIDE4LAkJLyogbGVuZ3RoICovCiAJMCwgMCwgMCwgMTAxLAkJLyogVFBNX09SRF9HZXRDYXBhYmlsaXR5ICovCi0JMCwgMCwgMCwgNiwKKwkwLCAwLCAwLCAwLAogCTAsIDAsIDAsIDAKIH07CiAKLSNkZWZpbmUgQ0FQX01BTlVGQUNUVVJFUl9SRVNVTFRfU0laRSAxOAotc3RhdGljIGNvbnN0IHU4IGNhcF9tYW51ZmFjdHVyZXJbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDIyLAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTAxLAkJLyogVFBNX09SRF9HZXRDYXBhYmlsaXR5ICovCi0JMCwgMCwgMCwgNSwKLQkwLCAwLCAwLCA0LAotCTAsIDAsIDEsIDMKLX07Ci0KIHNzaXplX3QgdHBtX3Nob3dfY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCiB7Ci0JdTggZGF0YVtzaXplb2YoY2FwX21hbnVmYWN0dXJlcildOworCXU4IGRhdGFbbWF4X3QoaW50LCBtYXgoQVJSQVlfU0laRSh0cG1fY2FwKSwgQVJSQVlfU0laRShjYXBfdmVyc2lvbikpLCAzMCldOworCXNzaXplX3QgcmM7CisJY2hhciAqc3RyID0gYnVmOworCisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKKwlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKKwlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSOworCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXIiKTsKKwlpZiAocmMpCisJCXJldHVybiAwOworCisJc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAorCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7CisKKwltZW1jcHkoZGF0YSwgY2FwX3ZlcnNpb24sIHNpemVvZihjYXBfdmVyc2lvbikpOworCWRhdGFbQ0FQX1ZFUlNJT05fSURYXSA9IENBUF9WRVJTSU9OXzFfMTsKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMSB2ZXJzaW9uIik7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCXN0ciArPSBzcHJpbnRmKHN0ciwKKwkJICAgICAgICJUQ0cgdmVyc2lvbjogJWQuJWRcbkZpcm13YXJlIHZlcnNpb246ICVkLiVkXG4iLAorCQkgICAgICAgKGludCkgZGF0YVsxNF0sIChpbnQpIGRhdGFbMTVdLCAoaW50KSBkYXRhWzE2XSwKKwkJICAgICAgIChpbnQpIGRhdGFbMTddKTsKKworb3V0OgorCXJldHVybiBzdHIgLSBidWY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzKTsKKworc3NpemVfdCB0cG1fc2hvd19jYXBzXzFfMihzdHJ1Y3QgZGV2aWNlICogZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKmJ1ZikKK3sKKwl1OCBkYXRhW21heF90KGludCwgbWF4KEFSUkFZX1NJWkUodHBtX2NhcCksIEFSUkFZX1NJWkUoY2FwX3ZlcnNpb24pKSwgMzApXTsKIAlzc2l6ZV90IGxlbjsKIAljaGFyICpzdHIgPSBidWY7CiAKQEAgLTI4MiwyOSArODQxLDQwIEBACiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltZW1jcHkoZGF0YSwgY2FwX21hbnVmYWN0dXJlciwgc2l6ZW9mKGNhcF9tYW51ZmFjdHVyZXIpKTsKKwltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKKwlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKKwlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSOwogCi0JaWYgKChsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSkgPAotCSAgICBDQVBfTUFOVUZBQ1RVUkVSX1JFU1VMVF9TSVpFKQotCQlyZXR1cm4gbGVuOworCWlmICgobGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSkpIDw9CisJICAgIFRQTV9FUlJPUl9TSVpFKSB7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlclxuIiwKKwkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSkpOworCQlyZXR1cm4gMDsKKwl9CiAKIAlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCi0JCSAgICAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyAxNCkpKSk7CisJCSAgICAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKIAogCW1lbWNweShkYXRhLCBjYXBfdmVyc2lvbiwgc2l6ZW9mKGNhcF92ZXJzaW9uKSk7CisJZGF0YVtDQVBfVkVSU0lPTl9JRFhdID0gQ0FQX1ZFUlNJT05fMV8yOwogCi0JaWYgKChsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSkgPAotCSAgICBDQVBfVkVSX1JFU1VMVF9TSVpFKQotCQlyZXR1cm4gbGVuOworCWlmICgobGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSkpIDw9CisJICAgIFRQTV9FUlJPUl9TSVpFKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMiB2ZXJzaW9uXG4iLAorCQkJYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKSk7CisJCWdvdG8gb3V0OworCX0KKwlzdHIgKz0gc3ByaW50ZihzdHIsCisJCSAgICAgICAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKKwkJICAgICAgIChpbnQpIGRhdGFbMTZdLCAoaW50KSBkYXRhWzE3XSwgKGludCkgZGF0YVsxOF0sCisJCSAgICAgICAoaW50KSBkYXRhWzE5XSk7CiAKLQlzdHIgKz0KLQkgICAgc3ByaW50ZihzdHIsICJUQ0cgdmVyc2lvbjogJWQuJWRcbkZpcm13YXJlIHZlcnNpb246ICVkLiVkXG4iLAotCQkgICAgKGludCkgZGF0YVsxNF0sIChpbnQpIGRhdGFbMTVdLCAoaW50KSBkYXRhWzE2XSwKLQkJICAgIChpbnQpIGRhdGFbMTddKTsKLQorb3V0OgogCXJldHVybiBzdHIgLSBidWY7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2NhcHNfMV8yKTsKIAogc3NpemVfdCB0cG1fc3RvcmVfY2FuY2VsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTMxMyw3ICs4ODMsNyBAQAogCWlmIChjaGlwID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JY2hpcC0+dmVuZG9yLT5jYW5jZWwoY2hpcCk7CisJY2hpcC0+dmVuZG9yLmNhbmNlbChjaGlwKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc3RvcmVfY2FuY2VsKTsKQEAgLTMyOSw3ICs4OTksNyBAQAogCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0cG1fY2hpcF9saXN0LCBsaXN0KSB7Ci0JCWlmIChwb3MtPnZlbmRvci0+bWlzY2Rldi5taW5vciA9PSBtaW5vcikgeworCQlpZiAocG9zLT52ZW5kb3IubWlzY2Rldi5taW5vciA9PSBtaW5vcikgewogCQkJY2hpcCA9IHBvczsKIAkJCWJyZWFrOwogCQl9CkBAIC0zODcsNyArOTU3LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9yZWxlYXNlKTsKIAogc3NpemVfdCB0cG1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCSAgc2l6ZV90IHNpemUsIGxvZmZfdCAqIG9mZikKKwkJICBzaXplX3Qgc2l6ZSwgbG9mZl90ICpvZmYpCiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBpbl9zaXplID0gc2l6ZSwgb3V0X3NpemU7CkBAIC00MTksMTEgKzk4OSwxMCBAQAogCiAJcmV0dXJuIGluX3NpemU7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV93cml0ZSk7CiAKLXNzaXplX3QgdHBtX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkgc2l6ZV90IHNpemUsIGxvZmZfdCAqIG9mZikKK3NzaXplX3QgdHBtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCSBzaXplX3Qgc2l6ZSwgbG9mZl90ICpvZmYpCiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXRfc2l6ZTsKQEAgLTQ2MiwxNCArMTAzMSwxMyBAQAogCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLQltaXNjX2RlcmVnaXN0ZXIoJmNoaXAtPnZlbmRvci0+bWlzY2Rldik7Ci0Ja2ZyZWUoY2hpcC0+dmVuZG9yLT5taXNjZGV2Lm5hbWUpOworCW1pc2NfZGVyZWdpc3RlcigmY2hpcC0+dmVuZG9yLm1pc2NkZXYpOworCWtmcmVlKGNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUpOwogCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosIGNoaXAtPnZlbmRvci0+YXR0cl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosIGNoaXAtPnZlbmRvci5hdHRyX2dyb3VwKTsKIAl0cG1fYmlvc19sb2dfdGVhcmRvd24oY2hpcC0+Ymlvc19kaXIpOwogCi0JZGV2X21hc2tbY2hpcC0+ZGV2X251bSAvIFRQTV9OVU1fTUFTS19FTlRSSUVTIF0gJj0KLQkJfigxIDw8IChjaGlwLT5kZXZfbnVtICUgVFBNX05VTV9NQVNLX0VOVFJJRVMpKTsKKwljbGVhcl9iaXQoY2hpcC0+ZGV2X251bSwgZGV2X21hc2spOwogCiAJa2ZyZWUoY2hpcCk7CiAKQEAgLTUyMCwxOCArMTA4OCwxOCBAQAogICogdXBvbiBlcnJhbnQgZXhpdCBmcm9tIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWMgcHJvYmUgZnVuY3Rpb24gc2hvdWxkIGNhbGwKICAqIHBjaV9kaXNhYmxlX2RldmljZQogICovCi1pbnQgdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKmVudHJ5KQorc3RydWN0IHRwbV9jaGlwICp0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYworCQkJCSAgICAgICAqZW50cnkpCiB7CiAjZGVmaW5lIERFVk5BTUVfU0laRSA3CiAKIAljaGFyICpkZXZuYW1lOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKLQlpbnQgaSwgajsKIAogCS8qIERyaXZlciBzcGVjaWZpYyBwZXItZGV2aWNlIGRhdGEgKi8KIAljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAKIAlpbml0X01VVEVYKCZjaGlwLT5idWZmZXJfbXV0ZXgpOwogCWluaXRfTVVURVgoJmNoaXAtPnRwbV9tdXRleCk7CkBAIC01NDMsNDUgKzExMTEsMzcgQEAKIAljaGlwLT51c2VyX3JlYWRfdGltZXIuZnVuY3Rpb24gPSB1c2VyX3JlYWRlcl90aW1lb3V0OwogCWNoaXAtPnVzZXJfcmVhZF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGNoaXA7CiAKLQljaGlwLT52ZW5kb3IgPSBlbnRyeTsKKwltZW1jcHkoJmNoaXAtPnZlbmRvciwgZW50cnksIHNpemVvZihzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYykpOwogCi0JY2hpcC0+ZGV2X251bSA9IC0xOworCWNoaXAtPmRldl9udW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXNrLCBUUE1fTlVNX0RFVklDRVMpOwogCi0JZm9yIChpID0gMDsgaSA8IFRQTV9OVU1fTUFTS19FTlRSSUVTOyBpKyspCi0JCWZvciAoaiA9IDA7IGogPCA4ICogc2l6ZW9mKGludCk7IGorKykKLQkJCWlmICgoZGV2X21hc2tbaV0gJiAoMSA8PCBqKSkgPT0gMCkgewotCQkJCWNoaXAtPmRldl9udW0gPQotCQkJCSAgICBpICogVFBNX05VTV9NQVNLX0VOVFJJRVMgKyBqOwotCQkJCWRldl9tYXNrW2ldIHw9IDEgPDwgajsKLQkJCQlnb3RvIGRldl9udW1fc2VhcmNoX2NvbXBsZXRlOwotCQkJfQotCi1kZXZfbnVtX3NlYXJjaF9jb21wbGV0ZToKLQlpZiAoY2hpcC0+ZGV2X251bSA8IDApIHsKKwlpZiAoY2hpcC0+ZGV2X251bSA+PSBUUE1fTlVNX0RFVklDRVMpIHsKIAkJZGV2X2VycihkZXYsICJObyBhdmFpbGFibGUgdHBtIGRldmljZSBudW1iZXJzXG4iKTsKIAkJa2ZyZWUoY2hpcCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgaWYgKGNoaXAtPmRldl9udW0gPT0gMCkKLQkJY2hpcC0+dmVuZG9yLT5taXNjZGV2Lm1pbm9yID0gVFBNX01JTk9SOworCQljaGlwLT52ZW5kb3IubWlzY2Rldi5taW5vciA9IFRQTV9NSU5PUjsKIAllbHNlCi0JCWNoaXAtPnZlbmRvci0+bWlzY2Rldi5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsKKwkJY2hpcC0+dmVuZG9yLm1pc2NkZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7CisKKwlzZXRfYml0KGNoaXAtPmRldl9udW0sIGRldl9tYXNrKTsKIAogCWRldm5hbWUgPSBrbWFsbG9jKERFVk5BTUVfU0laRSwgR0ZQX0tFUk5FTCk7CiAJc2NucHJpbnRmKGRldm5hbWUsIERFVk5BTUVfU0laRSwgIiVzJWQiLCAidHBtIiwgY2hpcC0+ZGV2X251bSk7Ci0JY2hpcC0+dmVuZG9yLT5taXNjZGV2Lm5hbWUgPSBkZXZuYW1lOworCWNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUgPSBkZXZuYW1lOwogCi0JY2hpcC0+dmVuZG9yLT5taXNjZGV2LmRldiA9IGRldjsKKwljaGlwLT52ZW5kb3IubWlzY2Rldi5kZXYgPSBkZXY7CiAJY2hpcC0+ZGV2ID0gZ2V0X2RldmljZShkZXYpOwogCi0JaWYgKG1pc2NfcmVnaXN0ZXIoJmNoaXAtPnZlbmRvci0+bWlzY2RldikpIHsKKwlpZiAobWlzY19yZWdpc3RlcigmY2hpcC0+dmVuZG9yLm1pc2NkZXYpKSB7CiAJCWRldl9lcnIoY2hpcC0+ZGV2LAogCQkJInVuYWJsZSB0byBtaXNjX3JlZ2lzdGVyICVzLCBtaW5vciAlZFxuIiwKLQkJCWNoaXAtPnZlbmRvci0+bWlzY2Rldi5uYW1lLAotCQkJY2hpcC0+dmVuZG9yLT5taXNjZGV2Lm1pbm9yKTsKKwkJCWNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsCisJCQljaGlwLT52ZW5kb3IubWlzY2Rldi5taW5vcik7CiAJCXB1dF9kZXZpY2UoZGV2KTsKKwkJY2xlYXJfYml0KGNoaXAtPmRldl9udW0sIGRldl9tYXNrKTsKIAkJa2ZyZWUoY2hpcCk7Ci0JCWRldl9tYXNrW2ldICY9ICEoMSA8PCBqKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBOVUxMOwogCX0KIAogCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOwpAQCAtNTkyLDExICsxMTUyLDExIEBACiAKIAlzcGluX3VubG9jaygmZHJpdmVyX2xvY2spOwogCi0Jc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosIGNoaXAtPnZlbmRvci0+YXR0cl9ncm91cCk7CisJc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosIGNoaXAtPnZlbmRvci5hdHRyX2dyb3VwKTsKIAogCWNoaXAtPmJpb3NfZGlyID0gdHBtX2Jpb3NfbG9nX3NldHVwKGRldm5hbWUpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNoaXA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcmVnaXN0ZXJfaGFyZHdhcmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaAppbmRleCBkZWMwMjI0Li4wNTBjZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKQEAgLTQyLDE4ICs0MiwzMCBAQAogCQkJCWNoYXIgKik7CiBleHRlcm4gc3NpemVfdCB0cG1fc2hvd19jYXBzKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHRwbV9zaG93X2NhcHNfMV8yKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqKTsKIGV4dGVybiBzc2l6ZV90IHRwbV9zdG9yZV9jYW5jZWwoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc3NpemVfdCB0cG1fc2hvd19lbmFibGVkKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHRwbV9zaG93X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKik7CitleHRlcm4gc3NpemVfdCB0cG1fc2hvd19vd25lZChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKik7CitleHRlcm4gc3NpemVfdCB0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKHN0cnVjdCBkZXZpY2UgKiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICopOwogCiBzdHJ1Y3QgdHBtX2NoaXA7CiAKIHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljIHsKLQl1OCByZXFfY29tcGxldGVfbWFzazsKLQl1OCByZXFfY29tcGxldGVfdmFsOwotCXU4IHJlcV9jYW5jZWxlZDsKKwljb25zdCB1OCByZXFfY29tcGxldGVfbWFzazsKKwljb25zdCB1OCByZXFfY29tcGxldGVfdmFsOworCWNvbnN0IHU4IHJlcV9jYW5jZWxlZDsKIAl2b2lkIF9faW9tZW0gKmlvYmFzZTsJCS8qIGlvcmVtYXBwZWQgYWRkcmVzcyAqLwogCXVuc2lnbmVkIGxvbmcgYmFzZTsJCS8qIFRQTSBiYXNlIGFkZHJlc3MgKi8KIAorCWludCBpcnE7CisKIAlpbnQgcmVnaW9uX3NpemU7CiAJaW50IGhhdmVfcmVnaW9uOwogCkBAIC02Myw2ICs3NSwxMyBAQAogCXU4ICgqc3RhdHVzKSAoc3RydWN0IHRwbV9jaGlwICopOwogCXN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXY7CiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqYXR0cl9ncm91cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IGxvY2FsaXR5OworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9hLCB0aW1lb3V0X2IsIHRpbWVvdXRfYywgdGltZW91dF9kOyAvKiBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZyBkdXJhdGlvblszXTsgLyogamlmZmllcyAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpbnRfcXVldWU7CiB9OwogCiBzdHJ1Y3QgdHBtX2NoaXAgewpAQCAtODEsMTMgKzEwMCwxNSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBzZW1hcGhvcmUgdHBtX211dGV4OwkvKiB0cG0gaXMgcHJvY2Vzc2luZyAqLwogCi0Jc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKnZlbmRvcjsKKwlzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB2ZW5kb3I7CiAKIAlzdHJ1Y3QgZGVudHJ5ICoqYmlvc19kaXI7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCisjZGVmaW5lIHRvX3RwbV9jaGlwKG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgdHBtX2NoaXAsIHZlbmRvcikKKwogc3RhdGljIGlubGluZSBpbnQgdHBtX3JlYWRfaW5kZXgoaW50IGJhc2UsIGludCBpbmRleCkKIHsKIAlvdXRiKGluZGV4LCBiYXNlKTsKQEAgLTEwMCw4ICsxMjEsMTIgQEAKIAlvdXRiKHZhbHVlICYgMHhGRiwgYmFzZSsxKTsKIH0KIAotZXh0ZXJuIGludCB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqLAotCQkJCSBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyAqKTsKK2V4dGVybiB2b2lkIHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICopOworZXh0ZXJuIHZvaWQgdHBtX2dlbl9pbnRlcnJ1cHQoc3RydWN0IHRwbV9jaGlwICopOworZXh0ZXJuIHZvaWQgdHBtX2NvbnRpbnVlX3NlbGZ0ZXN0KHN0cnVjdCB0cG1fY2hpcCAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24oc3RydWN0IHRwbV9jaGlwICosIHUzMik7CitleHRlcm4gc3RydWN0IHRwbV9jaGlwKiB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqLAorCQkJCSBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyAqKTsKIGV4dGVybiBpbnQgdHBtX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogZXh0ZXJuIGludCB0cG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBleHRlcm4gc3NpemVfdCB0cG1fd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LApAQCAtMTE1LDcgKzE0MCw3IEBACiBleHRlcm4gc3RydWN0IGRlbnRyeSAqKiB0cG1fYmlvc19sb2dfc2V0dXAoY2hhciAqKTsKIGV4dGVybiB2b2lkIHRwbV9iaW9zX2xvZ190ZWFyZG93bihzdHJ1Y3QgZGVudHJ5ICoqKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkqIHRwbV9iaW9zX2xvZ19zZXR1cChjaGFyICpuYW1lKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICoqIHRwbV9iaW9zX2xvZ19zZXR1cChjaGFyICpuYW1lKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKaW5kZXggZmYzNjU0OS4uNThhMjU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCkBAIC00NywxMiArNDcsMTIgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCXN0YXR1cyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLT5pb2Jhc2UgKyAxKTsKKwkJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiAJCWlmICgoc3RhdHVzICYgQVRNTF9TVEFUVVNfREFUQV9BVkFJTCkgPT0gMCkgewogCQkJZGV2X2VycihjaGlwLT5kZXYsICJlcnJvciByZWFkaW5nIGhlYWRlclxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQkqYnVmKysgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci0+aW9iYXNlKTsKKwkJKmJ1ZisrID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlKTsKIAl9CiAKIAkvKiBzaXplIG9mIHRoZSBkYXRhIHJlY2VpdmVkICovCkBAIC02Myw3ICs2Myw3IEBACiAJCWRldl9lcnIoY2hpcC0+ZGV2LAogCQkJIlJlY3Ygc2l6ZSglZCkgbGVzcyB0aGFuIGF2YWlsYWJsZSBzcGFjZVxuIiwgc2l6ZSk7CiAJCWZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7CS8qIGNsZWFyIHRoZSB3YWl0aW5nIGRhdGEgYW55d2F5ICovCi0JCQlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci0+aW9iYXNlICsgMSk7CisJCQlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyAxKTsKIAkJCWlmICgoc3RhdHVzICYgQVRNTF9TVEFUVVNfREFUQV9BVkFJTCkgPT0gMCkgewogCQkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiZXJyb3IgcmVhZGluZyBkYXRhXG4iKTsKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTc0LDE2ICs3NCwxNiBAQAogCiAJLyogcmVhZCBhbGwgdGhlIGRhdGEgYXZhaWxhYmxlICovCiAJZm9yICg7IGkgPCBzaXplOyBpKyspIHsKLQkJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3ItPmlvYmFzZSArIDEpOworCQlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyAxKTsKIAkJaWYgKChzdGF0dXMgJiBBVE1MX1NUQVRVU19EQVRBX0FWQUlMKSA9PSAwKSB7CiAJCQlkZXZfZXJyKGNoaXAtPmRldiwgImVycm9yIHJlYWRpbmcgZGF0YVxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQkqYnVmKysgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci0+aW9iYXNlKTsKKwkJKmJ1ZisrID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlKTsKIAl9CiAKIAkvKiBtYWtlIHN1cmUgZGF0YSBhdmFpbGFibGUgaXMgZ29uZSAqLwotCXN0YXR1cyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLT5pb2Jhc2UgKyAxKTsKKwlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyAxKTsKIAogCWlmIChzdGF0dXMgJiBBVE1MX1NUQVRVU19EQVRBX0FWQUlMKSB7CiAJCWRldl9lcnIoY2hpcC0+ZGV2LCAiZGF0YSBhdmFpbGFibGUgaXMgc3R1Y2tcbiIpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJZGV2X2RiZyhjaGlwLT5kZXYsICJ0cG1fYXRtbF9zZW5kOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGV2X2RiZyhjaGlwLT5kZXYsICIlZCAweCV4KCVkKVxuIiwgIGksIGJ1ZltpXSwgYnVmW2ldKTsKLSAJCWlvd3JpdGU4KGJ1ZltpXSwgY2hpcC0+dmVuZG9yLT5pb2Jhc2UpOworIAkJaW93cml0ZTgoYnVmW2ldLCBjaGlwLT52ZW5kb3IuaW9iYXNlKTsKIAl9CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogCiBzdGF0aWMgdm9pZCB0cG1fYXRtbF9jYW5jZWwoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCWlvd3JpdGU4KEFUTUxfU1RBVFVTX0FCT1JULCBjaGlwLT52ZW5kb3ItPmlvYmFzZSArIDEpOworCWlvd3JpdGU4KEFUTUxfU1RBVFVTX0FCT1JULCBjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiB9CiAKIHN0YXRpYyB1OCB0cG1fYXRtbF9zdGF0dXMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXJldHVybiBpb3JlYWQ4KGNoaXAtPnZlbmRvci0+aW9iYXNlICsgMSk7CisJcmV0dXJuIGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdG1lbF9vcHMgPSB7CkBAIC0xNDAsNyArMTQwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYXRtZWxfYXR0cl9ncnAgPSB7IC5hdHRycyA9IGF0bWVsX2F0dHJzIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB0cG1fYXRtZWwgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdHBtX2F0bWVsID0gewogCS5yZWN2ID0gdHBtX2F0bWxfcmVjdiwKIAkuc2VuZCA9IHRwbV9hdG1sX3NlbmQsCiAJLmNhbmNlbCA9IHRwbV9hdG1sX2NhbmNlbCwKQEAgLTE1OSwxMCArMTU5LDEwIEBACiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCiAJaWYgKGNoaXApIHsKLQkJaWYgKGNoaXAtPnZlbmRvci0+aGF2ZV9yZWdpb24pCi0JCQlhdG1lbF9yZWxlYXNlX3JlZ2lvbihjaGlwLT52ZW5kb3ItPmJhc2UsCi0JCQkJCSAgICAgY2hpcC0+dmVuZG9yLT5yZWdpb25fc2l6ZSk7Ci0JCWF0bWVsX3B1dF9iYXNlX2FkZHIoY2hpcC0+dmVuZG9yKTsKKwkJaWYgKGNoaXAtPnZlbmRvci5oYXZlX3JlZ2lvbikKKwkJCWF0bWVsX3JlbGVhc2VfcmVnaW9uKGNoaXAtPnZlbmRvci5iYXNlLAorCQkJCQkgICAgIGNoaXAtPnZlbmRvci5yZWdpb25fc2l6ZSk7CisJCWF0bWVsX3B1dF9iYXNlX2FkZHIoY2hpcC0+dmVuZG9yLmlvYmFzZSk7CiAJCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJfQpAQCAtMTc5LDE4ICsxNzksMjIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRtZWwodm9pZCkKIHsKIAlpbnQgcmMgPSAwOworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gTlVMTDsKKwlpbnQgaGF2ZV9yZWdpb24sIHJlZ2lvbl9zaXplOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwlzdHJ1Y3QgIHRwbV9jaGlwICpjaGlwOwogCiAJZHJpdmVyX3JlZ2lzdGVyKCZhdG1sX2Rydik7CiAKLQlpZiAoKHRwbV9hdG1lbC5pb2Jhc2UgPSBhdG1lbF9nZXRfYmFzZV9hZGRyKCZ0cG1fYXRtZWwpKSA9PSBOVUxMKSB7CisJaWYgKChpb2Jhc2UgPSBhdG1lbF9nZXRfYmFzZV9hZGRyKCZiYXNlLCAmcmVnaW9uX3NpemUpKSA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBlcnJfdW5yZWdfZHJ2OwogCX0KIAotCXRwbV9hdG1lbC5oYXZlX3JlZ2lvbiA9CisJaGF2ZV9yZWdpb24gPQogCSAgICAoYXRtZWxfcmVxdWVzdF9yZWdpb24KLQkgICAgICh0cG1fYXRtZWwuYmFzZSwgdHBtX2F0bWVsLnJlZ2lvbl9zaXplLAotCSAgICAgICJ0cG1fYXRtZWwwIikgPT0gTlVMTCkgPyAwIDogMTsKKwkgICAgICh0cG1fYXRtZWwuYmFzZSwgcmVnaW9uX3NpemUsICJ0cG1fYXRtZWwwIikgPT0gTlVMTCkgPyAwIDogMTsKKwogCiAJaWYgKElTX0VSUgogCSAgICAocGRldiA9CkBAIC0xOTksMTcgKzIwMywyNSBAQAogCQlnb3RvIGVycl9yZWxfcmVnOwogCX0KIAotCWlmICgocmMgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoJnBkZXYtPmRldiwgJnRwbV9hdG1lbCkpIDwgMCkKKwlpZiAoIShjaGlwID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZwZGV2LT5kZXYsICZ0cG1fYXRtZWwpKSkgeworCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3VucmVnX2RldjsKKwl9CisKKwljaGlwLT52ZW5kb3IuaW9iYXNlID0gaW9iYXNlOworCWNoaXAtPnZlbmRvci5iYXNlID0gYmFzZTsKKwljaGlwLT52ZW5kb3IuaGF2ZV9yZWdpb24gPSBoYXZlX3JlZ2lvbjsKKwljaGlwLT52ZW5kb3IucmVnaW9uX3NpemUgPSByZWdpb25fc2l6ZTsKKwogCXJldHVybiAwOwogCiBlcnJfdW5yZWdfZGV2OgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwogZXJyX3JlbF9yZWc6Ci0JYXRtZWxfcHV0X2Jhc2VfYWRkcigmdHBtX2F0bWVsKTsKLQlpZiAodHBtX2F0bWVsLmhhdmVfcmVnaW9uKQotCQlhdG1lbF9yZWxlYXNlX3JlZ2lvbih0cG1fYXRtZWwuYmFzZSwKLQkJCQkgICAgIHRwbV9hdG1lbC5yZWdpb25fc2l6ZSk7CisJYXRtZWxfcHV0X2Jhc2VfYWRkcihpb2Jhc2UpOworCWlmIChoYXZlX3JlZ2lvbikKKwkJYXRtZWxfcmVsZWFzZV9yZWdpb24oYmFzZSwKKwkJCQkgICAgIHJlZ2lvbl9zaXplKTsKIGVycl91bnJlZ19kcnY6CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuaAppbmRleCBkMzQ3OGFhLi4yZTY4ZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmgKQEAgLTI4LDEzICsyOCwxMiBAQAogI2RlZmluZSBhdG1lbF9yZXF1ZXN0X3JlZ2lvbiByZXF1ZXN0X21lbV9yZWdpb24KICNkZWZpbmUgYXRtZWxfcmVsZWFzZV9yZWdpb24gcmVsZWFzZV9tZW1fcmVnaW9uCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG1lbF9wdXRfYmFzZV9hZGRyKHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljCi0JCQkJCSAqdmVuZG9yKQorc3RhdGljIGlubGluZSB2b2lkIGF0bWVsX3B1dF9iYXNlX2FkZHIodm9pZCBfX2lvbWVtICppb2Jhc2UpCiB7Ci0JaW91bm1hcCh2ZW5kb3ItPmlvYmFzZSk7CisJaW91bm1hcChpb2Jhc2UpOwogfQogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICogYXRtZWxfZ2V0X2Jhc2VfYWRkcihzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyAqdmVuZG9yKQorc3RhdGljIHZvaWQgX19pb21lbSAqIGF0bWVsX2dldF9iYXNlX2FkZHIodW5zaWduZWQgbG9uZyAqYmFzZSwgaW50ICpyZWdpb25fc2l6ZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc2l6ZTsKQEAgLTcxLDkgKzcwLDkgQEAKIAllbHNlCiAJCXNpemUgPSByZWdbbmFkZHJjXTsKIAotCXZlbmRvci0+YmFzZSA9IGFkZHJlc3M7Ci0JdmVuZG9yLT5yZWdpb25fc2l6ZSA9IHNpemU7Ci0JcmV0dXJuIGlvcmVtYXAodmVuZG9yLT5iYXNlLCB2ZW5kb3ItPnJlZ2lvbl9zaXplKTsKKwkqYmFzZSA9IGFkZHJlc3M7CisJKnJlZ2lvbl9zaXplID0gc2l6ZTsKKwlyZXR1cm4gaW9yZW1hcCgqYmFzZSwgKnJlZ2lvbl9zaXplKTsKIH0KICNlbHNlCiAjZGVmaW5lIGF0bWVsX2dldGIoY2hpcCwgb2Zmc2V0KSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgb2Zmc2V0KQpAQCAtMTA2LDE0ICsxMDUsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0bWVsX3B1dF9iYXNlX2FkZHIoc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMKLQkJCQkJICp2ZW5kb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRtZWxfcHV0X2Jhc2VfYWRkcih2b2lkIF9faW9tZW0gKmlvYmFzZSkKIHsKIH0KIAogLyogRGV0ZXJtaW5lIHdoZXJlIHRvIHRhbGsgdG8gZGV2aWNlICovCi1zdGF0aWMgdm9pZCBfX2lvbWVtICogYXRtZWxfZ2V0X2Jhc2VfYWRkcihzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYwotCQkJCQkgKnZlbmRvcikKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBhdG1lbF9nZXRfYmFzZV9hZGRyKHVuc2lnbmVkIGxvbmcgKmJhc2UsIGludCAqcmVnaW9uX3NpemUpCiB7CiAJaW50IGxvLCBoaTsKIApAQCAtMTIzLDkgKzEyMCw5IEBACiAJbG8gPSB0cG1fcmVhZF9pbmRleChUUE1fQUREUiwgVFBNX0FUTUVMX0JBU0VfQUREUl9MTyk7CiAJaGkgPSB0cG1fcmVhZF9pbmRleChUUE1fQUREUiwgVFBNX0FUTUVMX0JBU0VfQUREUl9ISSk7CiAKLQl2ZW5kb3ItPmJhc2UgPSAoaGkgPDwgOCkgfCBsbzsKLQl2ZW5kb3ItPnJlZ2lvbl9zaXplID0gMjsKKwkqYmFzZSA9IChoaSA8PCA4KSB8IGxvOworCSpyZWdpb25fc2l6ZSA9IDI7CiAKLQlyZXR1cm4gaW9wb3J0X21hcCh2ZW5kb3ItPmJhc2UsIHZlbmRvci0+cmVnaW9uX3NpemUpOworCXJldHVybiBpb3BvcnRfbWFwKCpiYXNlLCAqcmVnaW9uX3NpemUpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMKaW5kZXggNTM3YWE0NS4uYTYxMTk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2Jpb3MuYwpAQCAtMjksNiArMjksMTEgQEAKICNkZWZpbmUgTUFYX1RFWFRfRVZFTlQJCTEwMDAJLyogTWF4IGV2ZW50IHN0cmluZyBsZW5ndGggKi8KICNkZWZpbmUgQUNQSV9UQ1BBX1NJRwkJIlRDUEEiCS8qIDB4NDE1MDQzNTQgLydUQ1BBJyAqLwogCitlbnVtIGJpb3NfcGxhdGZvcm1fY2xhc3MgeworCUJJT1NfQ0xJRU5UID0gMHgwMCwKKwlCSU9TX1NFUlZFUiA9IDB4MDEsCit9OworCiBzdHJ1Y3QgdHBtX2Jpb3NfbG9nIHsKIAl2b2lkICpiaW9zX2V2ZW50X2xvZzsKIAl2b2lkICpiaW9zX2V2ZW50X2xvZ19lbmQ7CkBAIC0zNiw5ICs0MSwxOCBAQAogCiBzdHJ1Y3QgYWNwaV90Y3BhIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGRyOwotCXUxNiByZXNlcnZlZDsKLQl1MzIgbG9nX21heF9sZW4gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCXUzMiBsb2dfc3RhcnRfYWRkciBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJdTE2IHBsYXRmb3JtX2NsYXNzOworCXVuaW9uIHsKKwkJc3RydWN0IGNsaWVudF9oZHIgeworCQkJdTMyIGxvZ19tYXhfbGVuIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwkJCXU2NCBsb2dfc3RhcnRfYWRkciBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJCX0gY2xpZW50OworCQlzdHJ1Y3Qgc2VydmVyX2hkciB7CisJCQl1MTYgcmVzZXJ2ZWQ7CisJCQl1NjQgbG9nX21heF9sZW4gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCQkJdTY0IGxvZ19zdGFydF9hZGRyIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwkJfSBzZXJ2ZXI7CisJfTsKIH07CiAKIHN0cnVjdCB0Y3BhX2V2ZW50IHsKQEAgLTkxLDYgKzEwNSwxMiBAQAogCSJOb24tSG9zdCBJbmZvIgogfTsKIAorc3RydWN0IHRjcGFfcGNfZXZlbnQgeworCXUzMiBldmVudF9pZDsKKwl1MzIgZXZlbnRfc2l6ZTsKKwl1OCBldmVudF9kYXRhWzBdOworfTsKKwogZW51bSB0Y3BhX3BjX2V2ZW50X2lkcyB7CiAJU01CSU9TID0gMSwKIAlCSVNfQ0VSVCwKQEAgLTEwMCwxNCArMTIwLDE1IEBACiAJTlZSQU0sCiAJT1BUSU9OX1JPTV9FWEVDLAogCU9QVElPTl9ST01fQ09ORklHLAotCU9QVElPTl9ST01fTUlDUk9DT0RFLAorCU9QVElPTl9ST01fTUlDUk9DT0RFID0gMTAsCiAJU19DUlRNX1ZFUlNJT04sCiAJU19DUlRNX0NPTlRFTlRTLAogCVBPU1RfQ09OVEVOVFMsCisJSE9TVF9UQUJMRV9PRl9ERVZJQ0VTLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHRjcGFfcGNfZXZlbnRfaWRfc3RyaW5nc1tdID0gewotCSIiCisJIiIsCiAJIlNNQklPUyIsCiAJIkJJUyBDZXJ0aWZpY2F0ZSIsCiAJIlBPU1QgQklPUyAiLApAQCAtMTE2LDEwICsxMzcsMTIgQEAKIAkiTlZSQU0iLAogCSJPcHRpb24gUk9NIiwKIAkiT3B0aW9uIFJPTSBjb25maWciLAotCSJPcHRpb24gUk9NIG1pY3JvY29kZSIsCisJIiIsCisJIk9wdGlvbiBST00gbWljcm9jb2RlICIsCiAJIlMtQ1JUTSBWZXJzaW9uIiwKLQkiUy1DUlRNIENvbnRlbnRzIiwKLQkiUy1DUlRNIFBPU1QgQ29udGVudHMiLAorCSJTLUNSVE0gQ29udGVudHMgIiwKKwkiUE9TVCBDb250ZW50cyAiLAorCSJUYWJsZSBvZiBEZXZpY2VzIiwKIH07CiAKIC8qIHJldHVybnMgcG9pbnRlciB0byBzdGFydCBvZiBwb3MuIGVudHJ5IG9mIHRjZyBsb2cgKi8KQEAgLTE5MSw3ICsyMTQsNyBAQAogCWNvbnN0IGNoYXIgKm5hbWUgPSAiIjsKIAljaGFyIGRhdGFbNDBdID0gIiI7CiAJaW50IGksIG5fbGVuID0gMCwgZF9sZW4gPSAwOwotCXUzMiBldmVudF9pZDsKKwlzdHJ1Y3QgdGNwYV9wY19ldmVudCAqcGNfZXZlbnQ7CiAKIAlzd2l0Y2goZXZlbnQtPmV2ZW50X3R5cGUpIHsKIAljYXNlIFBSRUJPT1Q6CkBAIC0yMjAsMzEgKzI0MywzMiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRVZFTlRfVEFHOgotCQlldmVudF9pZCA9IGJlMzJfdG9fY3B1KCooKHUzMiAqKWV2ZW50X2VudHJ5KSk7CisJCXBjX2V2ZW50ID0gKHN0cnVjdCB0Y3BhX3BjX2V2ZW50ICopZXZlbnRfZW50cnk7CiAKIAkJLyogVG9EbyBSb3cgZGF0YSAtPiBCYXNlNjQgKi8KIAotCQlzd2l0Y2ggKGV2ZW50X2lkKSB7CisJCXN3aXRjaCAocGNfZXZlbnQtPmV2ZW50X2lkKSB7CiAJCWNhc2UgU01CSU9TOgogCQljYXNlIEJJU19DRVJUOgogCQljYXNlIENNT1M6CiAJCWNhc2UgTlZSQU06CiAJCWNhc2UgT1BUSU9OX1JPTV9FWEVDOgogCQljYXNlIE9QVElPTl9ST01fQ09ORklHOgotCQljYXNlIE9QVElPTl9ST01fTUlDUk9DT0RFOgogCQljYXNlIFNfQ1JUTV9WRVJTSU9OOgotCQljYXNlIFNfQ1JUTV9DT05URU5UUzoKLQkJY2FzZSBQT1NUX0NPTlRFTlRTOgotCQkJbmFtZSA9IHRjcGFfcGNfZXZlbnRfaWRfc3RyaW5nc1tldmVudF9pZF07CisJCQluYW1lID0gdGNwYV9wY19ldmVudF9pZF9zdHJpbmdzW3BjX2V2ZW50LT5ldmVudF9pZF07CiAJCQluX2xlbiA9IHN0cmxlbihuYW1lKTsKIAkJCWJyZWFrOworCQkvKiBoYXNoIGRhdGEgKi8KIAkJY2FzZSBQT1NUX0JJT1NfUk9NOgogCQljYXNlIEVTQ0Q6Ci0JCQluYW1lID0gdGNwYV9wY19ldmVudF9pZF9zdHJpbmdzW2V2ZW50X2lkXTsKKwkJY2FzZSBPUFRJT05fUk9NX01JQ1JPQ09ERToKKwkJY2FzZSBTX0NSVE1fQ09OVEVOVFM6CisJCWNhc2UgUE9TVF9DT05URU5UUzoKKwkJCW5hbWUgPSB0Y3BhX3BjX2V2ZW50X2lkX3N0cmluZ3NbcGNfZXZlbnQtPmV2ZW50X2lkXTsKIAkJCW5fbGVuID0gc3RybGVuKG5hbWUpOwogCQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCi0JCQkJZF9sZW4gKz0gc3ByaW50ZihkYXRhLCAiJTAyeCIsCi0JCQkJCQlldmVudF9lbnRyeVs4ICsgaV0pOworCQkJCWRfbGVuICs9IHNwcmludGYoJmRhdGFbMippXSwgIiUwMngiLAorCQkJCQkJcGNfZXZlbnQtPmV2ZW50X2RhdGFbaV0pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTI2MCw1MiArMjg0LDEzIEBACiAKIHN0YXRpYyBpbnQgdHBtX2JpbmFyeV9iaW9zX21lYXN1cmVtZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgdGNwYV9ldmVudCAqZXZlbnQgPSB2OworCWNoYXIgKmRhdGEgPSB2OworCWludCBpOwogCi0JY2hhciAqZXZlbnRuYW1lOwotCWNoYXIgZGF0YVs0XTsKLQl1MzIgaGVscDsKLQlpbnQgaSwgbGVuOwotCXN0cnVjdCB0Y3BhX2V2ZW50ICpldmVudCA9IChzdHJ1Y3QgdGNwYV9ldmVudCAqKSB2OwotCXVuc2lnbmVkIGNoYXIgKmV2ZW50X2VudHJ5ID0KLQkgICAgKHVuc2lnbmVkIGNoYXIgKikgKHYgKyBzaXplb2Yoc3RydWN0IHRjcGFfZXZlbnQpKTsKLQotCWV2ZW50bmFtZSA9IGttYWxsb2MoTUFYX1RFWFRfRVZFTlQsIEdGUF9LRVJORUwpOwotCWlmICghZXZlbnRuYW1lKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SIC0gTm8gTWVtb3J5IGZvciBldmVudCBuYW1lXG4gIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogMXN0OiBQQ1IgdXNlZCBpcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAoNCBieXRlcykgKi8KLQloZWxwID0gbGUzMl90b19jcHUoZXZlbnQtPnBjcl9pbmRleCk7Ci0JbWVtY3B5KGRhdGEsICZoZWxwLCA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRjcGFfZXZlbnQpICsgZXZlbnQtPmV2ZW50X3NpemU7IGkrKykKIAkJc2VxX3B1dGMobSwgZGF0YVtpXSk7CiAKLQkvKiAybmQ6IFNIQTEgKDIwIGJ5dGVzKSAqLwotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQotCQlzZXFfcHV0YyhtLCBldmVudC0+cGNyX3ZhbHVlW2ldKTsKLQotCS8qIDNyZDogZXZlbnQgdHlwZSBpZGVudGlmaWVyICg0IGJ5dGVzKSAqLwotCWhlbHAgPSBsZTMyX3RvX2NwdShldmVudC0+ZXZlbnRfdHlwZSk7Ci0JbWVtY3B5KGRhdGEsICZoZWxwLCA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlzZXFfcHV0YyhtLCBkYXRhW2ldKTsKLQotCWxlbiA9IDA7Ci0KLQlsZW4gKz0gZ2V0X2V2ZW50X25hbWUoZXZlbnRuYW1lLCBldmVudCwgZXZlbnRfZW50cnkpOwotCi0JLyogNHRoOiAgZmlsZW5hbWUgPD0gMjU1ICsgXCcwJyBkZWxpbWl0ZXIgKi8KLQlpZiAobGVuID4gVENHX0VWRU5UX05BTUVfTEVOX01BWCkKLQkJbGVuID0gVENHX0VWRU5UX05BTUVfTEVOX01BWDsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJc2VxX3B1dGMobSwgZXZlbnRuYW1lW2ldKTsKLQotCS8qIDV0aDogZGVsaW1pdGVyICovCi0Jc2VxX3B1dGMobSwgJ1wwJyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzUzLDYgKzMzOCw3IEBACiAJLyogNHRoOiBldmVudG5hbWUgPD0gbWF4ICsgXCcwJyBkZWxpbWl0ZXIgKi8KIAlzZXFfcHJpbnRmKG0sICIgJXNcbiIsIGV2ZW50bmFtZSk7CiAKKwlrZnJlZShldmVudG5hbWUpOwogCXJldHVybiAwOwogfQogCkBAIC0zNzYsNiArMzYyLDcgQEAKIAlzdHJ1Y3QgYWNwaV90Y3BhICpidWZmOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnZpcnQ7CisJdTY0IGxlbiwgc3RhcnQ7CiAKIAlpZiAobG9nLT5iaW9zX2V2ZW50X2xvZyAhPSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMzk2LDI3ICszODMsMzcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGJ1ZmYtPmxvZ19tYXhfbGVuID09IDApIHsKKwlzd2l0Y2goYnVmZi0+cGxhdGZvcm1fY2xhc3MpIHsKKwljYXNlIEJJT1NfU0VSVkVSOgorCQlsZW4gPSBidWZmLT5zZXJ2ZXIubG9nX21heF9sZW47CisJCXN0YXJ0ID0gYnVmZi0+c2VydmVyLmxvZ19zdGFydF9hZGRyOworCQlicmVhazsKKwljYXNlIEJJT1NfQ0xJRU5UOgorCWRlZmF1bHQ6CisJCWxlbiA9IGJ1ZmYtPmNsaWVudC5sb2dfbWF4X2xlbjsKKwkJc3RhcnQgPSBidWZmLT5jbGllbnQubG9nX3N0YXJ0X2FkZHI7CisJCWJyZWFrOworCX0KKwlpZiAoIWxlbikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFUlJPUiAtIFRDUEEgbG9nIGFyZWEgZW1wdHlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogbWFsbG9jIEV2ZW50TG9nIHNwYWNlICovCi0JbG9nLT5iaW9zX2V2ZW50X2xvZyA9IGttYWxsb2MoYnVmZi0+bG9nX21heF9sZW4sIEdGUF9LRVJORUwpOworCWxvZy0+Ymlvc19ldmVudF9sb2cgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsb2ctPmJpb3NfZXZlbnRfbG9nKSB7Ci0JCXByaW50awotCQkgICAgKCIlczogRVJST1IgLSBOb3QgZW5vdWdoICBNZW1vcnkgZm9yIEJJT1MgbWVhc3VyZW1lbnRzXG4iLAotCQkgICAgIF9fZnVuY19fKTsKKwkJcHJpbnRrKCIlczogRVJST1IgLSBOb3QgZW5vdWdoICBNZW1vcnkgZm9yIEJJT1MgbWVhc3VyZW1lbnRzXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlsb2ctPmJpb3NfZXZlbnRfbG9nX2VuZCA9IGxvZy0+Ymlvc19ldmVudF9sb2cgKyBidWZmLT5sb2dfbWF4X2xlbjsKKwlsb2ctPmJpb3NfZXZlbnRfbG9nX2VuZCA9IGxvZy0+Ymlvc19ldmVudF9sb2cgKyBsZW47CiAKLQlhY3BpX29zX21hcF9tZW1vcnkoYnVmZi0+bG9nX3N0YXJ0X2FkZHIsIGJ1ZmYtPmxvZ19tYXhfbGVuLCAodm9pZCAqKSAmdmlydCk7CisJYWNwaV9vc19tYXBfbWVtb3J5KHN0YXJ0LCBsZW4sICh2b2lkICopICZ2aXJ0KTsKIAotCW1lbWNweShsb2ctPmJpb3NfZXZlbnRfbG9nLCB2aXJ0LCBidWZmLT5sb2dfbWF4X2xlbik7CisJbWVtY3B5KGxvZy0+Ymlvc19ldmVudF9sb2csIHZpcnQsIGxlbik7CiAKLQlhY3BpX29zX3VubWFwX21lbW9yeSh2aXJ0LCBidWZmLT5sb2dfbWF4X2xlbik7CisJYWNwaV9vc191bm1hcF9tZW1vcnkodmlydCwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKaW5kZXggMjQwOTVmNi4uYWRmZmYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSAidHBtLmgiCiAKQEAgLTEwNCw3ICsxMDUsNyBAQAogCiAJaWYgKGNsZWFyX3dyZmlmbykgewogCQlmb3IgKGkgPSAwOyBpIDwgNDA5NjsgaSsrKSB7Ci0JCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgV1JGSUZPKTsKKwkJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIFdSRklGTyk7CiAJCQlpZiAoc3RhdHVzID09IDB4ZmYpIHsKIAkJCQlpZiAoY2hlY2sgPT0gNSkKIAkJCQkJYnJlYWs7CkBAIC0xMjQsOCArMTI1LDggQEAKIAkgKi8KIAlpID0gMDsKIAlkbyB7Ci0JCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBSREZJRk8pOwotCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgU1RBVCk7CisJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIFJERklGTyk7CisJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIFNUQVQpOwogCQlpKys7CiAJCWlmIChpID09IFRQTV9NQVhfVFJJRVMpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTEzOCw3ICsxMzksNyBAQAogCWludCBzdGF0dXM7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IFRQTV9NQVhfVFJJRVM7IGkrKykgewotCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgU1RBVCk7CisJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIFNUQVQpOwogCQkvKiBjaGVjayB0aGUgc3RhdHVzLXJlZ2lzdGVyIGlmIHdhaXRfZm9yX2JpdCBpcyBzZXQgKi8KIAkJaWYgKHN0YXR1cyAmIDEgPDwgd2FpdF9mb3JfYml0KQogCQkJYnJlYWs7CkBAIC0xNTcsNyArMTU4LDcgQEAKIHN0YXRpYyB2b2lkIHdhaXRfYW5kX3NlbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCBzZW5kYnl0ZSkKIHsKIAl3YWl0KGNoaXAsIFNUQVRfWEZFKTsKLQlvdXRiKHNlbmRieXRlLCBjaGlwLT52ZW5kb3ItPmJhc2UgKyBXUkZJRk8pOworCW91dGIoc2VuZGJ5dGUsIGNoaXAtPnZlbmRvci5iYXNlICsgV1JGSUZPKTsKIH0KIAogICAgIC8qIE5vdGU6IFdUWCBtZWFucyBXYWl0aW5nLVRpbWUtRXh0ZW5zaW9uLiBXaGVuZXZlciB0aGUgVFBNIG5lZWRzIG1vcmUKQEAgLTIwNCw3ICsyMDUsNyBAQAogCQlyZXQgPSB3YWl0KGNoaXAsIFNUQVRfUkRBKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwotCQlidWZbaV0gPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgUkRGSUZPKTsKKwkJYnVmW2ldID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgUkRGSUZPKTsKIAl9CiAKIAlpZiAoYnVmWzBdICE9IFRQTV9WTF9WRVIpIHsKQEAgLTIxOSw3ICsyMjAsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJCXdhaXQoY2hpcCwgU1RBVF9SREEpOwotCQkJYnVmW2ldID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIFJERklGTyk7CisJCQlidWZbaV0gPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBSREZJRk8pOwogCQl9CiAKIAkJaWYgKChzaXplID09IDB4NkQwMCkgJiYgKGJ1ZlsxXSA9PSAweDgwKSkgewpAQCAtMjY4LDcgKzI2OSw3IEBACiAJdTggY291bnRfaGlnaCwgY291bnRfbG93LCBjb3VudF80LCBjb3VudF8zLCBjb3VudF8yLCBjb3VudF8xOwogCiAJLyogRGlzYWJsaW5nIFJlc2V0LCBMUCBhbmQgSVJRQyAqLwotCW91dGIoUkVTRVRfTFBfSVJRQ19ESVNBQkxFLCBjaGlwLT52ZW5kb3ItPmJhc2UgKyBDTUQpOworCW91dGIoUkVTRVRfTFBfSVJRQ19ESVNBQkxFLCBjaGlwLT52ZW5kb3IuYmFzZSArIENNRCk7CiAKIAlyZXQgPSBlbXB0eV9maWZvKGNoaXAsIDEpOwogCWlmIChyZXQpIHsKQEAgLTMxOSw3ICszMjAsNyBAQAogCiBzdGF0aWMgdTggdHBtX2luZl9zdGF0dXMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXJldHVybiBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgU1RBVCk7CisJcmV0dXJuIGluYihjaGlwLT52ZW5kb3IuYmFzZSArIFNUQVQpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIocHViZWssIFNfSVJVR08sIHRwbV9zaG93X3B1YmVrLCBOVUxMKTsKQEAgLTM0Niw3ICszNDcsNyBAQAogCS5yZWxlYXNlID0gdHBtX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdHBtX2luZiA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB0cG1faW5mID0gewogCS5yZWN2ID0gdHBtX2luZl9yZWN2LAogCS5zZW5kID0gdHBtX2luZl9zZW5kLAogCS5jYW5jZWwgPSB0cG1faW5mX2NhbmNlbCwKQEAgLTM3NSw2ICszNzYsNyBAQAogCWludCB2ZXJzaW9uWzJdOwogCWludCBwcm9kdWN0aWRbMl07CiAJY2hhciBjaGlwbmFtZVsyMF07CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOwogCiAJLyogcmVhZCBJTy1wb3J0cyB0aHJvdWdoIFBuUCAqLwogCWlmIChwbnBfcG9ydF92YWxpZChkZXYsIDApICYmIHBucF9wb3J0X3ZhbGlkKGRldiwgMSkgJiYKQEAgLTM5NSwxNCArMzk3LDEzIEBACiAJCQlnb3RvIGVycl9sYXN0OwogCQl9CiAJCS8qIHB1Ymxpc2ggbXkgYmFzZSBhZGRyZXNzIGFuZCByZXF1ZXN0IHJlZ2lvbiAqLwotCQl0cG1faW5mLmJhc2UgPSBUUE1fSU5GX0JBU0U7CiAJCWlmIChyZXF1ZXN0X3JlZ2lvbgotCQkgICAgKHRwbV9pbmYuYmFzZSwgVFBNX0lORl9QT1JUX0xFTiwgInRwbV9pbmZpbmVvbjAiKSA9PSBOVUxMKSB7CisJCSAgICAoVFBNX0lORl9CQVNFLCBUUE1fSU5GX1BPUlRfTEVOLCAidHBtX2luZmluZW9uMCIpID09IE5VTEwpIHsKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyX2xhc3Q7CiAJCX0KLQkJaWYgKHJlcXVlc3RfcmVnaW9uKFRQTV9JTkZfQUREUiwgVFBNX0lORl9BRERSX0xFTiwKLQkJCQkidHBtX2luZmluZW9uMCIpID09IE5VTEwpIHsKKwkJaWYgKHJlcXVlc3RfcmVnaW9uCisJCSAgICAoVFBNX0lORl9BRERSLCBUUE1fSU5GX0FERFJfTEVOLCAidHBtX2luZmluZW9uMCIpID09IE5VTEwpIHsKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyX2xhc3Q7CiAJCX0KQEAgLTQ0Miw5ICs0NDMsOSBAQAogCiAJCS8qIGNvbmZpZ3VyZSBUUE0gd2l0aCBJTy1wb3J0cyAqLwogCQlvdXRiKElPTElNSCwgVFBNX0lORl9BRERSKTsKLQkJb3V0YigoKHRwbV9pbmYuYmFzZSA+PiA4KSAmIDB4ZmYpLCBUUE1fSU5GX0RBVEEpOworCQlvdXRiKCgoVFBNX0lORl9CQVNFID4+IDgpICYgMHhmZiksIFRQTV9JTkZfREFUQSk7CiAJCW91dGIoSU9MSU1MLCBUUE1fSU5GX0FERFIpOwotCQlvdXRiKCh0cG1faW5mLmJhc2UgJiAweGZmKSwgVFBNX0lORl9EQVRBKTsKKwkJb3V0YigoVFBNX0lORl9CQVNFICYgMHhmZiksIFRQTV9JTkZfREFUQSk7CiAKIAkJLyogY29udHJvbCBpZiBJTy1wb3J0cyBhcmUgc2V0IGNvcnJlY3RseSAqLwogCQlvdXRiKElPTElNSCwgVFBNX0lORl9BRERSKTsKQEAgLTQ1MiwxMCArNDUzLDEwIEBACiAJCW91dGIoSU9MSU1MLCBUUE1fSU5GX0FERFIpOwogCQlpb2wgPSBpbmIoVFBNX0lORl9EQVRBKTsKIAotCQlpZiAoKGlvaCA8PCA4IHwgaW9sKSAhPSB0cG1faW5mLmJhc2UpIHsKKwkJaWYgKChpb2ggPDwgOCB8IGlvbCkgIT0gVFBNX0lORl9CQVNFKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCQkiQ291bGQgbm90IHNldCBJTy1wb3J0cyB0byAweCVseFxuIiwKLQkJCQl0cG1faW5mLmJhc2UpOworCQkJCSJDb3VsZCBub3Qgc2V0IElPLXBvcnRzIHRvIDB4JXhcbiIsCisJCQkJVFBNX0lORl9CQVNFKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCQl9CkBAIC00NjYsMTUgKzQ2NywxNSBAQAogCQlvdXRiKERJU0FCTEVfUkVHSVNURVJfUEFJUiwgVFBNX0lORl9BRERSKTsKIAogCQkvKiBkaXNhYmxlIFJFU0VULCBMUCBhbmQgSVJRQyAqLwotCQlvdXRiKFJFU0VUX0xQX0lSUUNfRElTQUJMRSwgdHBtX2luZi5iYXNlICsgQ01EKTsKKwkJb3V0YihSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIFRQTV9JTkZfQkFTRSArIENNRCk7CiAKIAkJLyogRmluYWxseSwgd2UncmUgZG9uZSwgcHJpbnQgc29tZSBpbmZvcyAqLwogCQlkZXZfaW5mbygmZGV2LT5kZXYsICJUUE0gZm91bmQ6ICIKIAkJCSAiY29uZmlnIGJhc2UgMHgleCwgIgogCQkJICJpbyBiYXNlIDB4JXgsICIKLQkJCSAiY2hpcCB2ZXJzaW9uICUwMnglMDJ4LCAiCi0JCQkgInZlbmRvciBpZCAleCV4IChJbmZpbmVvbiksICIKLQkJCSAicHJvZHVjdCBpZCAlMDJ4JTAyeCIKKwkJCSAiY2hpcCB2ZXJzaW9uIDB4JTAyeCUwMngsICIKKwkJCSAidmVuZG9yIGlkIDB4JXgleCAoSW5maW5lb24pLCAiCisJCQkgInByb2R1Y3QgaWQgMHglMDJ4JTAyeCIKIAkJCSAiJXNcbiIsCiAJCQkgVFBNX0lORl9BRERSLAogCQkJIFRQTV9JTkZfQkFTRSwKQEAgLTQ4MiwxMSArNDgzLDEwIEBACiAJCQkgdmVuZG9yaWRbMF0sIHZlbmRvcmlkWzFdLAogCQkJIHByb2R1Y3RpZFswXSwgcHJvZHVjdGlkWzFdLCBjaGlwbmFtZSk7CiAKLQkJcmMgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoJmRldi0+ZGV2LCAmdHBtX2luZik7Ci0JCWlmIChyYyA8IDApIHsKLQkJCXJjID0gLUVOT0RFVjsKKwkJaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmZGV2LT5kZXYsICZ0cG1faW5mKSkpIHsKIAkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCQl9CisJCWNoaXAtPnZlbmRvci5iYXNlID0gVFBNX0lORl9CQVNFOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQlyYyA9IC1FTk9ERVY7CkBAIC00OTQsNyArNDk0LDcgQEAKIAl9CiAKIGVycl9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbih0cG1faW5mLmJhc2UsIFRQTV9JTkZfUE9SVF9MRU4pOworCXJlbGVhc2VfcmVnaW9uKFRQTV9JTkZfQkFTRSwgVFBNX0lORl9QT1JUX0xFTik7CiAJcmVsZWFzZV9yZWdpb24oVFBNX0lORl9BRERSLCBUUE1fSU5GX0FERFJfTEVOKTsKIAogZXJyX2xhc3Q6CkBAIC01MDYsNyArNTA2LDggQEAKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBwbnBfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChjaGlwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGNoaXAtPnZlbmRvci0+YmFzZSwgVFBNX0lORl9QT1JUX0xFTik7CisJCXJlbGVhc2VfcmVnaW9uKFRQTV9JTkZfQkFTRSwgVFBNX0lORl9QT1JUX0xFTik7CisJCXJlbGVhc2VfcmVnaW9uKFRQTV9JTkZfQUREUiwgVFBNX0lORl9BRERSX0xFTik7CiAJCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKIAl9CiB9CkBAIC01MjAsNyArNTIxLDcgQEAKIAl9LAogCS5pZF90YWJsZSA9IHRwbV9wbnBfdGJsLAogCS5wcm9iZSA9IHRwbV9pbmZfcG5wX3Byb2JlLAotCS5yZW1vdmUgPSB0cG1faW5mX3BucF9yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRwbV9pbmZfcG5wX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2luZih2b2lkKQpAQCAtNTM4LDUgKzUzOSw1IEBACiAKIE1PRFVMRV9BVVRIT1IoIk1hcmNlbCBTZWxob3JzdCA8c2VsaG9yc3RAY3J5cHRvLnJ1Yi5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBJbmZpbmVvbiBUUE0gU0xEIDk2MzAgVFQgMS4xIC8gU0xCIDk2MzUgVFQgMS4yIik7Ci1NT0RVTEVfVkVSU0lPTigiMS43Iik7CitNT0RVTEVfVkVSU0lPTigiMS44Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9uc2MuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX25zYy5jCmluZGV4IDY4MGE4ZTMuLjRjOGJjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX25zYy5jCkBAIC03MSw3ICs3MSw3IEBACiAJdW5zaWduZWQgbG9uZyBzdG9wOwogCiAJLyogc3RhdHVzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBjaGVjayAqLwotCSpkYXRhID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19TVEFUVVMpOworCSpkYXRhID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX1NUQVRVUyk7CiAJaWYgKCgqZGF0YSAmIG1hc2spID09IHZhbCkKIAkJcmV0dXJuIDA7CiAKQEAgLTc5LDcgKzc5LDcgQEAKIAlzdG9wID0gamlmZmllcyArIDEwICogSFo7CiAJZG8gewogCQltc2xlZXAoVFBNX1RJTUVPVVQpOwotCQkqZGF0YSA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyAxKTsKKwkJKmRhdGEgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyAxKTsKIAkJaWYgKCgqZGF0YSAmIG1hc2spID09IHZhbCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTk0LDkgKzk0LDkgQEAKIAl1bnNpZ25lZCBsb25nIHN0b3A7CiAKIAkvKiBzdGF0dXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIGNoZWNrICovCi0Jc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19TVEFUVVMpOworCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19TVEFUVVMpOwogCWlmIChzdGF0dXMgJiBOU0NfU1RBVFVTX09CRikKLQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19EQVRBKTsKKwkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0RBVEEpOwogCWlmIChzdGF0dXMgJiBOU0NfU1RBVFVTX1JEWSkKIAkJcmV0dXJuIDA7CiAKQEAgLTEwNCw5ICsxMDQsOSBAQAogCXN0b3AgPSBqaWZmaWVzICsgMTAwOwogCWRvIHsKIAkJbXNsZWVwKFRQTV9USU1FT1VUKTsKLQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19TVEFUVVMpOworCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfU1RBVFVTKTsKIAkJaWYgKHN0YXR1cyAmIE5TQ19TVEFUVVNfT0JGKQotCQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19EQVRBKTsKKwkJCXN0YXR1cyA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19EQVRBKTsKIAkJaWYgKHN0YXR1cyAmIE5TQ19TVEFUVVNfUkRZKQogCQkJcmV0dXJuIDA7CiAJfQpAQCAtMTMyLDcgKzEzMiw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoKGRhdGEgPQotCSAgICAgaW5iKGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19EQVRBKSkgIT0gTlNDX0NPTU1BTkRfTk9STUFMKSB7CisJICAgICBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfREFUQSkpICE9IE5TQ19DT01NQU5EX05PUk1BTCkgewogCQlkZXZfZXJyKGNoaXAtPmRldiwgIm5vdCBpbiBub3JtYWwgbW9kZSAoMHgleClcbiIsCiAJCQlkYXRhKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJfQogCQlpZiAoZGF0YSAmIE5TQ19TVEFUVVNfRjApCiAJCQlicmVhazsKLQkJKnAgPSBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX0RBVEEpOworCQkqcCA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19EQVRBKTsKIAl9CiAKIAlpZiAoKGRhdGEgJiBOU0NfU1RBVFVTX0YwKSA9PSAwICYmCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJZGV2X2VycihjaGlwLT5kZXYsICJGMCBub3Qgc2V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWlmICgoZGF0YSA9IGluYihjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfREFUQSkpICE9IE5TQ19DT01NQU5EX0VPQykgeworCWlmICgoZGF0YSA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19EQVRBKSkgIT0gTlNDX0NPTU1BTkRfRU9DKSB7CiAJCWRldl9lcnIoY2hpcC0+ZGV2LAogCQkJImV4cGVjdGVkIGVuZCBvZiBjb21tYW5kKDB4JXgpXG4iLCBkYXRhKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0xODIsNyArMTgyLDcgQEAKIAkgKiBmaXggaXQuIE5vdCBzdXJlIHdoeSB0aGlzIGlzIG5lZWRlZCwgd2UgZm9sbG93ZWQgdGhlIGZsb3cKIAkgKiBjaGFydCBpbiB0aGUgbWFudWFsIHRvIHRoZSBsZXR0ZXIuCiAJICovCi0Jb3V0YihOU0NfQ09NTUFORF9DQU5DRUwsIGNoaXAtPnZlbmRvci0+YmFzZSArIE5TQ19DT01NQU5EKTsKKwlvdXRiKE5TQ19DT01NQU5EX0NBTkNFTCwgY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfQ09NTUFORCk7CiAKIAlpZiAobnNjX3dhaXRfZm9yX3JlYWR5KGNoaXApICE9IDApCiAJCXJldHVybiAtRUlPOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCW91dGIoTlNDX0NPTU1BTkRfTk9STUFMLCBjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfQ09NTUFORCk7CisJb3V0YihOU0NfQ09NTUFORF9OT1JNQUwsIGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0NPTU1BTkQpOwogCWlmICh3YWl0X2Zvcl9zdGF0KGNoaXAsIE5TQ19TVEFUVVNfSUJSLCBOU0NfU1RBVFVTX0lCUiwgJmRhdGEpIDwgMCkgewogCQlkZXZfZXJyKGNoaXAtPmRldiwgIklCUiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0yMDQsMjYgKzIwNCwyNiBAQAogCQkJCSJJQkYgdGltZW91dCAod2hpbGUgd3JpdGluZyBkYXRhKVxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlvdXRiKGJ1ZltpXSwgY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX0RBVEEpOworCQlvdXRiKGJ1ZltpXSwgY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfREFUQSk7CiAJfQogCiAJaWYgKHdhaXRfZm9yX3N0YXQoY2hpcCwgTlNDX1NUQVRVU19JQkYsIDAsICZkYXRhKSA8IDApIHsKIAkJZGV2X2VycihjaGlwLT5kZXYsICJJQkYgdGltZW91dFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQlvdXRiKE5TQ19DT01NQU5EX0VPQywgY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX0NPTU1BTkQpOworCW91dGIoTlNDX0NPTU1BTkRfRU9DLCBjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19DT01NQU5EKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHZvaWQgdHBtX25zY19jYW5jZWwoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCW91dGIoTlNDX0NPTU1BTkRfQ0FOQ0VMLCBjaGlwLT52ZW5kb3ItPmJhc2UgKyBOU0NfQ09NTUFORCk7CisJb3V0YihOU0NfQ09NTUFORF9DQU5DRUwsIGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0NPTU1BTkQpOwogfQogCiBzdGF0aWMgdTggdHBtX25zY19zdGF0dXMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXJldHVybiBpbmIoY2hpcC0+dmVuZG9yLT5iYXNlICsgTlNDX1NUQVRVUyk7CisJcmV0dXJuIGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19TVEFUVVMpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2Nfb3BzID0gewpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5zY19hdHRyX2dycCA9IHsgLmF0dHJzID0gbnNjX2F0dHJzIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB0cG1fbnNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljIHRwbV9uc2MgPSB7CiAJLnJlY3YgPSB0cG1fbnNjX3JlY3YsCiAJLnNlbmQgPSB0cG1fbnNjX3NlbmQsCiAJLmNhbmNlbCA9IHRwbV9uc2NfY2FuY2VsLApAQCAtMjY4LDcgKzI2OCw3IEBACiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaWYgKCBjaGlwICkgewotCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT52ZW5kb3ItPmJhc2UsIDIpOworCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT52ZW5kb3IuYmFzZSwgMik7CiAJCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKIAl9CiB9CkBAIC0yODYsNyArMjg2LDggQEAKIAlpbnQgcmMgPSAwOwogCWludCBsbywgaGk7CiAJaW50IG5zY0FkZHJCYXNlID0gVFBNX0FERFI7Ci0KKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisJdW5zaWduZWQgbG9uZyBiYXNlOwogCiAJLyogdmVyaWZ5IHRoYXQgaXQgaXMgYSBOYXRpb25hbCBwYXJ0IChTSUQpICovCiAJaWYgKHRwbV9yZWFkX2luZGV4KFRQTV9BRERSLCBOU0NfU0lEX0lOREVYKSAhPSAweEVGKSB7CkBAIC0zMDAsNyArMzAxLDcgQEAKIAogCWhpID0gdHBtX3JlYWRfaW5kZXgobnNjQWRkckJhc2UsIFRQTV9OU0NfQkFTRTBfSEkpOwogCWxvID0gdHBtX3JlYWRfaW5kZXgobnNjQWRkckJhc2UsIFRQTV9OU0NfQkFTRTBfTE8pOwotCXRwbV9uc2MuYmFzZSA9IChoaTw8OCkgfCBsbzsKKwliYXNlID0gKGhpPDw4KSB8IGxvOwogCiAJLyogZW5hYmxlIHRoZSBEUE0gbW9kdWxlICovCiAJdHBtX3dyaXRlX2luZGV4KG5zY0FkZHJCYXNlLCBOU0NfTERDX0lOREVYLCAweDAxKTsKQEAgLTMyMCwxMyArMzIxLDE1IEBACiAJaWYgKChyYyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KSkgPCAwKQogCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCWlmIChyZXF1ZXN0X3JlZ2lvbih0cG1fbnNjLmJhc2UsIDIsICJ0cG1fbnNjMCIpID09IE5VTEwgKSB7CisJaWYgKHJlcXVlc3RfcmVnaW9uKGJhc2UsIDIsICJ0cG1fbnNjMCIpID09IE5VTEwgKSB7CiAJCXJjID0gLUVCVVNZOwogCQlnb3RvIGVycl91bnJlZ19kZXY7CiAJfQogCi0JaWYgKChyYyA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmcGRldi0+ZGV2LCAmdHBtX25zYykpIDwgMCkKKwlpZiAoIShjaGlwID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZwZGV2LT5kZXYsICZ0cG1fbnNjKSkpIHsKKwkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9yZWxfcmVnOworCX0KIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIk5TQyBUUE0gZGV0ZWN0ZWRcbiIpOwogCWRldl9kYmcoJnBkZXYtPmRldiwKQEAgLTM2MSwxMCArMzY0LDEyIEBACiAJCSAiTlNDIFRQTSByZXZpc2lvbiAlZFxuIiwKIAkJIHRwbV9yZWFkX2luZGV4KG5zY0FkZHJCYXNlLCAweDI3KSAmIDB4MUYpOwogCisJY2hpcC0+dmVuZG9yLmJhc2UgPSBiYXNlOworCiAJcmV0dXJuIDA7CiAKIGVycl9yZWxfcmVnOgotCXJlbGVhc2VfcmVnaW9uKHRwbV9uc2MuYmFzZSwgMik7CisJcmVsZWFzZV9yZWdpb24oYmFzZSwgMik7CiBlcnJfdW5yZWdfZGV2OgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwogZXJyX2ZyZWVfZGV2OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE3MDYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKQEAgLTAsMCArMSw2NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIExlZW5kZXJ0IHZhbiBEb29ybiA8bGVlbmRlcnRAd2F0c29uLmlibS5jb20+CisgKiBLeWxlbmUgSGFsbCA8a2poYWxsQHVzLmlibS5jb20+CisgKgorICogRGV2aWNlIGRyaXZlciBmb3IgVENHL1RDUEEgVFBNICh0cnVzdGVkIHBsYXRmb3JtIG1vZHVsZSkuCisgKiBTcGVjaWZpY2F0aW9ucyBhdCB3d3cudHJ1c3RlZGNvbXB1dGluZ2dyb3VwLm9yZworICoKKyAqIFRoaXMgZGV2aWNlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBUUE0gaW50ZXJmYWNlIGFzIGRlZmluZWQgaW4KKyAqIHRoZSBUQ0cgVFBNIEludGVyZmFjZSBTcGVjIHZlcnNpb24gMS4yLCByZXZpc2lvbiAxLjAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgInRwbS5oIgorCisjZGVmaW5lIFRQTV9IRUFERVJfU0laRSAxMAorCitlbnVtIHRpc19hY2Nlc3MgeworCVRQTV9BQ0NFU1NfVkFMSUQgPSAweDgwLAorCVRQTV9BQ0NFU1NfQUNUSVZFX0xPQ0FMSVRZID0gMHgyMCwKKwlUUE1fQUNDRVNTX1JFUVVFU1RfUEVORElORyA9IDB4MDQsCisJVFBNX0FDQ0VTU19SRVFVRVNUX1VTRSA9IDB4MDIsCit9OworCitlbnVtIHRpc19zdGF0dXMgeworCVRQTV9TVFNfVkFMSUQgPSAweDgwLAorCVRQTV9TVFNfQ09NTUFORF9SRUFEWSA9IDB4NDAsCisJVFBNX1NUU19HTyA9IDB4MjAsCisJVFBNX1NUU19EQVRBX0FWQUlMID0gMHgxMCwKKwlUUE1fU1RTX0RBVEFfRVhQRUNUID0gMHgwOCwKK307CisKK2VudW0gdGlzX2ludF9mbGFncyB7CisJVFBNX0dMT0JBTF9JTlRfRU5BQkxFID0gMHg4MDAwMDAwMCwKKwlUUE1fSU5URl9CVVJTVF9DT1VOVF9TVEFUSUMgPSAweDEwMCwKKwlUUE1fSU5URl9DTURfUkVBRFlfSU5UID0gMHgwODAsCisJVFBNX0lOVEZfSU5UX0VER0VfRkFMTElORyA9IDB4MDQwLAorCVRQTV9JTlRGX0lOVF9FREdFX1JJU0lORyA9IDB4MDIwLAorCVRQTV9JTlRGX0lOVF9MRVZFTF9MT1cgPSAweDAxMCwKKwlUUE1fSU5URl9JTlRfTEVWRUxfSElHSCA9IDB4MDA4LAorCVRQTV9JTlRGX0xPQ0FMSVRZX0NIQU5HRV9JTlQgPSAweDAwNCwKKwlUUE1fSU5URl9TVFNfVkFMSURfSU5UID0gMHgwMDIsCisJVFBNX0lOVEZfREFUQV9BVkFJTF9JTlQgPSAweDAwMSwKK307CisKK2VudW0gdGlzX2RlZmF1bHRzIHsKKwlUSVNfTUVNX0JBU0UgPSAweEZFRDQwMDAwLAorCVRJU19NRU1fTEVOID0gMHg1MDAwLAorCVRJU19TSE9SVF9USU1FT1VUID0gNzUwLAkvKiBtcyAqLworCVRJU19MT05HX1RJTUVPVVQgPSAyMDAwLAkvKiAyIHNlYyAqLworfTsKKworI2RlZmluZQlUUE1fQUNDRVNTKGwpCQkJKDB4MDAwMCB8ICgobCkgPDwgMTIpKQorI2RlZmluZQlUUE1fSU5UX0VOQUJMRShsKQkJKDB4MDAwOCB8ICgobCkgPDwgMTIpKQorI2RlZmluZQlUUE1fSU5UX1ZFQ1RPUihsKQkJKDB4MDAwQyB8ICgobCkgPDwgMTIpKQorI2RlZmluZQlUUE1fSU5UX1NUQVRVUyhsKQkJKDB4MDAxMCB8ICgobCkgPDwgMTIpKQorI2RlZmluZQlUUE1fSU5URl9DQVBTKGwpCQkoMHgwMDE0IHwgKChsKSA8PCAxMikpCisjZGVmaW5lCVRQTV9TVFMobCkJCQkoMHgwMDE4IHwgKChsKSA8PCAxMikpCisjZGVmaW5lCVRQTV9EQVRBX0ZJRk8obCkJCSgweDAwMjQgfCAoKGwpIDw8IDEyKSkKKworI2RlZmluZQlUUE1fRElEX1ZJRChsKQkJCSgweDBGMDAgfCAoKGwpIDw8IDEyKSkKKyNkZWZpbmUJVFBNX1JJRChsKQkJCSgweDBGMDQgfCAoKGwpIDw8IDEyKSkKKworc3RhdGljIExJU1RfSEVBRCh0aXNfY2hpcHMpOworc3RhdGljIERFRklORV9TUElOTE9DSyh0aXNfbG9jayk7CisKK3N0YXRpYyBpbnQgY2hlY2tfbG9jYWxpdHkoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBpbnQgbCkKK3sKKwlpZiAoKGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9BQ0NFU1MobCkpICYKKwkgICAgIChUUE1fQUNDRVNTX0FDVElWRV9MT0NBTElUWSB8IFRQTV9BQ0NFU1NfVkFMSUQpKSA9PQorCSAgICAoVFBNX0FDQ0VTU19BQ1RJVkVfTE9DQUxJVFkgfCBUUE1fQUNDRVNTX1ZBTElEKSkKKwkJcmV0dXJuIGNoaXAtPnZlbmRvci5sb2NhbGl0eSA9IGw7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfbG9jYWxpdHkoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBpbnQgbCwgaW50IGZvcmNlKQoreworCWlmIChmb3JjZSB8fCAoaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX0FDQ0VTUyhsKSkgJgorCQkgICAgICAoVFBNX0FDQ0VTU19SRVFVRVNUX1BFTkRJTkcgfCBUUE1fQUNDRVNTX1ZBTElEKSkgPT0KKwkgICAgKFRQTV9BQ0NFU1NfUkVRVUVTVF9QRU5ESU5HIHwgVFBNX0FDQ0VTU19WQUxJRCkpCisJCWlvd3JpdGU4KFRQTV9BQ0NFU1NfQUNUSVZFX0xPQ0FMSVRZLAorCQkJIGNoaXAtPnZlbmRvci5pb2Jhc2UgKyBUUE1fQUNDRVNTKGwpKTsKK30KKworc3RhdGljIGludCByZXF1ZXN0X2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IGwpCit7CisJdW5zaWduZWQgbG9uZyBzdG9wOworCWxvbmcgcmM7CisKKwlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCwgbCkgPj0gMCkKKwkJcmV0dXJuIGw7CisKKwlpb3dyaXRlOChUUE1fQUNDRVNTX1JFUVVFU1RfVVNFLAorCQkgY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9BQ0NFU1MobCkpOworCisJaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKKwkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChjaGlwLT52ZW5kb3IuaW50X3F1ZXVlLAorCQkJCQkJICAgICAgKGNoZWNrX2xvY2FsaXR5CisJCQkJCQkgICAgICAgKGNoaXAsIGwpID49IDApLAorCQkJCQkJICAgICAgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSk7CisJCWlmIChyYyA+IDApCisJCQlyZXR1cm4gbDsKKworCX0gZWxzZSB7CisJCS8qIHdhaXQgZm9yIGJ1cnN0Y291bnQgKi8KKwkJc3RvcCA9IGppZmZpZXMgKyBjaGlwLT52ZW5kb3IudGltZW91dF9hOworCQlkbyB7CisJCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCwgbCkgPj0gMCkKKwkJCQlyZXR1cm4gbDsKKwkJCW1zbGVlcChUUE1fVElNRU9VVCk7CisJCX0KKwkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0b3ApKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdTggdHBtX3Rpc19zdGF0dXMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQoreworCXJldHVybiBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkgICAgICAgVFBNX1NUUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKK30KKworc3RhdGljIHZvaWQgdHBtX3Rpc19yZWFkeShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJLyogdGhpcyBjYXVzZXMgdGhlIGN1cnJlbnQgY29tbWFuZCB0byBiZSBhYm9ydGVkICovCisJaW93cml0ZTgoVFBNX1NUU19DT01NQU5EX1JFQURZLAorCQkgY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9TVFMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2J1cnN0Y291bnQoc3RydWN0IHRwbV9jaGlwICpjaGlwKQoreworCXVuc2lnbmVkIGxvbmcgc3RvcDsKKwlpbnQgYnVyc3RjbnQ7CisKKwkvKiB3YWl0IGZvciBidXJzdGNvdW50ICovCisJLyogd2hpY2ggdGltZW91dCB2YWx1ZSwgc3BlYyBoYXMgMiBhbnN3ZXJzIChjICYgZCkgKi8KKwlzdG9wID0gamlmZmllcyArIGNoaXAtPnZlbmRvci50aW1lb3V0X2Q7CisJZG8geworCQlidXJzdGNudCA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICAgVFBNX1NUUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpICsgMSk7CisJCWJ1cnN0Y250ICs9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICAgIFRQTV9TVFMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSArCisJCQkJICAgIDIpIDw8IDg7CisJCWlmIChidXJzdGNudCkKKwkJCXJldHVybiBidXJzdGNudDsKKwkJbXNsZWVwKFRQTV9USU1FT1VUKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl9zdGF0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggbWFzaywgdW5zaWduZWQgbG9uZyB0aW1lb3V0LAorCQkJIHdhaXRfcXVldWVfaGVhZF90ICpxdWV1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0b3A7CisJbG9uZyByYzsKKwl1OCBzdGF0dXM7CisKKwkvKiBjaGVjayBjdXJyZW50IHN0YXR1cyAqLworCXN0YXR1cyA9IHRwbV90aXNfc3RhdHVzKGNoaXApOworCWlmICgoc3RhdHVzICYgbWFzaykgPT0gbWFzaykKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2hpcC0+dmVuZG9yLmlycSkgeworCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpxdWV1ZSwKKwkJCQkJCSAgICAgICgodHBtX3Rpc19zdGF0dXMKKwkJCQkJCQkoY2hpcCkgJiBtYXNrKSA9PQorCQkJCQkJICAgICAgIG1hc2spLCB0aW1lb3V0KTsKKwkJaWYgKHJjID4gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXN0b3AgPSBqaWZmaWVzICsgdGltZW91dDsKKwkJZG8geworCQkJbXNsZWVwKFRQTV9USU1FT1VUKTsKKwkJCXN0YXR1cyA9IHRwbV90aXNfc3RhdHVzKGNoaXApOworCQkJaWYgKChzdGF0dXMgJiBtYXNrKSA9PSBtYXNrKQorCQkJCXJldHVybiAwOworCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7CisJfQorCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9kYXRhKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBzaXplID0gMCwgYnVyc3RjbnQ7CisJd2hpbGUgKHNpemUgPCBjb3VudCAmJgorCSAgICAgICB3YWl0X2Zvcl9zdGF0KGNoaXAsCisJCQkgICAgIFRQTV9TVFNfREFUQV9BVkFJTCB8IFRQTV9TVFNfVkFMSUQsCisJCQkgICAgIGNoaXAtPnZlbmRvci50aW1lb3V0X2MsCisJCQkgICAgICZjaGlwLT52ZW5kb3IucmVhZF9xdWV1ZSkKKwkgICAgICAgPT0gMCkgeworCQlidXJzdGNudCA9IGdldF9idXJzdGNvdW50KGNoaXApOworCQlmb3IgKDsgYnVyc3RjbnQgPiAwICYmIHNpemUgPCBjb3VudDsgYnVyc3RjbnQtLSkKKwkJCWJ1ZltzaXplKytdID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkJICAgICAgVFBNX0RBVEFfRklGTyhjaGlwLT52ZW5kb3IuCisJCQkJCQkJICAgIGxvY2FsaXR5KSk7CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHRwbV90aXNfcmVjdihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgc2l6ZSA9IDA7CisJaW50IGV4cGVjdGVkLCBzdGF0dXM7CisKKwlpZiAoY291bnQgPCBUUE1fSEVBREVSX1NJWkUpIHsKKwkJc2l6ZSA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCS8qIHJlYWQgZmlyc3QgMTAgYnl0ZXMsIGluY2x1ZGluZyB0YWcsIHBhcmFtc2l6ZSwgYW5kIHJlc3VsdCAqLworCWlmICgoc2l6ZSA9CisJICAgICByZWN2X2RhdGEoY2hpcCwgYnVmLCBUUE1fSEVBREVSX1NJWkUpKSA8IFRQTV9IRUFERVJfU0laRSkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIlVuYWJsZSB0byByZWFkIGhlYWRlclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWV4cGVjdGVkID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikgKGJ1ZiArIDIpKTsKKwlpZiAoZXhwZWN0ZWQgPiBjb3VudCkgeworCQlzaXplID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChzaXplICs9CisJICAgICByZWN2X2RhdGEoY2hpcCwgJmJ1ZltUUE1fSEVBREVSX1NJWkVdLAorCQkgICAgICAgZXhwZWN0ZWQgLSBUUE1fSEVBREVSX1NJWkUpKSA8IGV4cGVjdGVkKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgcmVtYWluZGVyIG9mIHJlc3VsdFxuIik7CisJCXNpemUgPSAtRVRJTUU7CisJCWdvdG8gb3V0OworCX0KKworCXdhaXRfZm9yX3N0YXQoY2hpcCwgVFBNX1NUU19WQUxJRCwgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYywKKwkJICAgICAgJmNoaXAtPnZlbmRvci5pbnRfcXVldWUpOworCXN0YXR1cyA9IHRwbV90aXNfc3RhdHVzKGNoaXApOworCWlmIChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfQVZBSUwpIHsJLyogcmV0cnk/ICovCisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRXJyb3IgbGVmdCBvdmVyIGRhdGFcbiIpOworCQlzaXplID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJdHBtX3Rpc19yZWFkeShjaGlwKTsKKwlyZWxlYXNlX2xvY2FsaXR5KGNoaXAsIGNoaXAtPnZlbmRvci5sb2NhbGl0eSwgMCk7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBJZiBpbnRlcnJ1cHRzIGFyZSB1c2VkIChzaWduYWxlZCBieSBhbiBpcnEgc2V0IGluIHRoZSB2ZW5kb3Igc3RydWN0dXJlKQorICogdHBtLmMgY2FuIHNraXAgcG9sbGluZyBmb3IgdGhlIGRhdGEgdG8gYmUgYXZhaWxhYmxlIGFzIHRoZSBpbnRlcnJ1cHQgaXMKKyAqIHdhaXRlZCBmb3IgaGVyZQorICovCitzdGF0aWMgaW50IHRwbV90aXNfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJjLCBzdGF0dXMsIGJ1cnN0Y250OworCXNpemVfdCBjb3VudCA9IDA7CisJdTMyIG9yZGluYWw7CisKKwlpZiAocmVxdWVzdF9sb2NhbGl0eShjaGlwLCAwKSA8IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzdGF0dXMgPSB0cG1fdGlzX3N0YXR1cyhjaGlwKTsKKwlpZiAoKHN0YXR1cyAmIFRQTV9TVFNfQ09NTUFORF9SRUFEWSkgPT0gMCkgeworCQl0cG1fdGlzX3JlYWR5KGNoaXApOworCQlpZiAod2FpdF9mb3Jfc3RhdAorCQkgICAgKGNoaXAsIFRQTV9TVFNfQ09NTUFORF9SRUFEWSwgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiwKKwkJICAgICAmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSkgPCAwKSB7CisJCQlyYyA9IC1FVElNRTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKworCXdoaWxlIChjb3VudCA8IGxlbiAtIDEpIHsKKwkJYnVyc3RjbnQgPSBnZXRfYnVyc3Rjb3VudChjaGlwKTsKKwkJZm9yICg7IGJ1cnN0Y250ID4gMCAmJiBjb3VudCA8IGxlbiAtIDE7IGJ1cnN0Y250LS0pIHsKKwkJCWlvd3JpdGU4KGJ1Zltjb3VudF0sIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSBUUE1fREFUQV9GSUZPKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCQkJY291bnQrKzsKKwkJfQorCisJCXdhaXRfZm9yX3N0YXQoY2hpcCwgVFBNX1NUU19WQUxJRCwgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYywKKwkJCSAgICAgICZjaGlwLT52ZW5kb3IuaW50X3F1ZXVlKTsKKwkJc3RhdHVzID0gdHBtX3Rpc19zdGF0dXMoY2hpcCk7CisJCWlmICgoc3RhdHVzICYgVFBNX1NUU19EQVRBX0VYUEVDVCkgPT0gMCkgeworCQkJcmMgPSAtRUlPOworCQkJZ290byBvdXRfZXJyOworCQl9CisJfQorCisJLyogd3JpdGUgbGFzdCBieXRlICovCisJaW93cml0ZTgoYnVmW2NvdW50XSwKKwkJIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkgVFBNX0RBVEFfRklGTyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnZlbmRvci50aW1lb3V0X2MsCisJCSAgICAgICZjaGlwLT52ZW5kb3IuaW50X3F1ZXVlKTsKKwlzdGF0dXMgPSB0cG1fdGlzX3N0YXR1cyhjaGlwKTsKKwlpZiAoKHN0YXR1cyAmIFRQTV9TVFNfREFUQV9FWFBFQ1QpICE9IDApIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJLyogZ28gYW5kIGRvIGl0ICovCisJaW93cml0ZTgoVFBNX1NUU19HTywKKwkJIGNoaXAtPnZlbmRvci5pb2Jhc2UgKyBUUE1fU1RTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCisJaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKKwkJb3JkaW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgNikpKTsKKwkJaWYgKHdhaXRfZm9yX3N0YXQKKwkJICAgIChjaGlwLCBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElELAorCQkgICAgIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24oY2hpcCwgb3JkaW5hbCksCisJCSAgICAgJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlKSA8IDApIHsKKwkJCXJjID0gLUVUSU1FOworCQkJZ290byBvdXRfZXJyOworCQl9CisJfQorCXJldHVybiBsZW47CitvdXRfZXJyOgorCXRwbV90aXNfcmVhZHkoY2hpcCk7CisJcmVsZWFzZV9sb2NhbGl0eShjaGlwLCBjaGlwLT52ZW5kb3IubG9jYWxpdHksIDApOworCXJldHVybiByYzsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGlzX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorCS5vcGVuID0gdHBtX29wZW4sCisJLnJlYWQgPSB0cG1fcmVhZCwKKwkud3JpdGUgPSB0cG1fd3JpdGUsCisJLnJlbGVhc2UgPSB0cG1fcmVsZWFzZSwKK307CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwdWJlaywgU19JUlVHTywgdHBtX3Nob3dfcHViZWssIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBjcnMsIFNfSVJVR08sIHRwbV9zaG93X3BjcnMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVJVR08sIHRwbV9zaG93X2VuYWJsZWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFjdGl2ZSwgU19JUlVHTywgdHBtX3Nob3dfYWN0aXZlLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihvd25lZCwgU19JUlVHTywgdHBtX3Nob3dfb3duZWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXBfZGVhY3RpdmF0ZWQsIFNfSVJVR08sIHRwbV9zaG93X3RlbXBfZGVhY3RpdmF0ZWQsCisJCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNhcHMsIFNfSVJVR08sIHRwbV9zaG93X2NhcHNfMV8yLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYW5jZWwsIFNfSVdVU1IgfCBTX0lXR1JQLCBOVUxMLCB0cG1fc3RvcmVfY2FuY2VsKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRpc19hdHRyc1tdID0geworCSZkZXZfYXR0cl9wdWJlay5hdHRyLAorCSZkZXZfYXR0cl9wY3JzLmF0dHIsCisJJmRldl9hdHRyX2VuYWJsZWQuYXR0ciwKKwkmZGV2X2F0dHJfYWN0aXZlLmF0dHIsCisJJmRldl9hdHRyX293bmVkLmF0dHIsCisJJmRldl9hdHRyX3RlbXBfZGVhY3RpdmF0ZWQuYXR0ciwKKwkmZGV2X2F0dHJfY2Fwcy5hdHRyLAorCSZkZXZfYXR0cl9jYW5jZWwuYXR0ciwgTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHRpc19hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSB0aXNfYXR0cnMKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyB0cG1fdGlzID0geworCS5zdGF0dXMgPSB0cG1fdGlzX3N0YXR1cywKKwkucmVjdiA9IHRwbV90aXNfcmVjdiwKKwkuc2VuZCA9IHRwbV90aXNfc2VuZCwKKwkuY2FuY2VsID0gdHBtX3Rpc19yZWFkeSwKKwkucmVxX2NvbXBsZXRlX21hc2sgPSBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElELAorCS5yZXFfY29tcGxldGVfdmFsID0gVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwKKwkucmVxX2NhbmNlbGVkID0gVFBNX1NUU19DT01NQU5EX1JFQURZLAorCS5hdHRyX2dyb3VwID0gJnRpc19hdHRyX2dycCwKKwkubWlzY2RldiA9IHsKKwkJICAgIC5mb3BzID0gJnRpc19vcHMsfSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aXNfaW50X3Byb2JlKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gKHN0cnVjdCB0cG1fY2hpcCAqKSBkZXZfaWQ7CisJdTMyIGludGVycnVwdDsKKworCWludGVycnVwdCA9IGlvcmVhZDMyKGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJICAgICBUUE1fSU5UX1NUQVRVUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKworCWlmIChpbnRlcnJ1cHQgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJY2hpcC0+dmVuZG9yLmlycSA9IGlycTsKKworCS8qIENsZWFyIGludGVycnVwdHMgaGFuZGxlZCB3aXRoIFRQTV9FT0kgKi8KKwlpb3dyaXRlMzIoaW50ZXJydXB0LAorCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkgIFRQTV9JTlRfU1RBVFVTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHRpc19pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IChzdHJ1Y3QgdHBtX2NoaXAgKikgZGV2X2lkOworCXUzMiBpbnRlcnJ1cHQ7CisJaW50IGk7CisKKwlpbnRlcnJ1cHQgPSBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCSAgICAgVFBNX0lOVF9TVEFUVVMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisKKwlpZiAoaW50ZXJydXB0ID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChpbnRlcnJ1cHQgJiBUUE1fSU5URl9EQVRBX0FWQUlMX0lOVCkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaGlwLT52ZW5kb3IucmVhZF9xdWV1ZSk7CisJaWYgKGludGVycnVwdCAmIFRQTV9JTlRGX0xPQ0FMSVRZX0NIQU5HRV9JTlQpCisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCwgaSkgPj0gMCkKKwkJCQlicmVhazsKKwlpZiAoaW50ZXJydXB0ICYKKwkgICAgKFRQTV9JTlRGX0xPQ0FMSVRZX0NIQU5HRV9JTlQgfCBUUE1fSU5URl9TVFNfVkFMSURfSU5UIHwKKwkgICAgIFRQTV9JTlRGX0NNRF9SRUFEWV9JTlQpKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoaXAtPnZlbmRvci5pbnRfcXVldWUpOworCisJLyogQ2xlYXIgaW50ZXJydXB0cyBoYW5kbGVkIHdpdGggVFBNX0VPSSAqLworCWlvd3JpdGUzMihpbnRlcnJ1cHQsCisJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCSAgVFBNX0lOVF9TVEFUVVMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGludGVycnVwdHMgPSAxOworbW9kdWxlX3BhcmFtKGludGVycnVwdHMsIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbnRlcnJ1cHRzLCAiRW5hYmxlIGludGVycnVwdHMiKTsKKworc3RhdGljIGludCBfX2RldmluaXQgdHBtX3Rpc19wbnBfaW5pdChzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqcG5wX2lkKQoreworCXUzMiB2ZW5kb3IsIGludGZjYXBzLCBpbnRtYXNrOworCWludCByYywgaTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBsZW47CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCisJc3RhcnQgPSBwbnBfbWVtX3N0YXJ0KHBucF9kZXYsIDApOworCWxlbiA9IHBucF9tZW1fbGVuKHBucF9kZXYsIDApOworCisJaWYgKCFzdGFydCkKKwkJc3RhcnQgPSBUSVNfTUVNX0JBU0U7CisJaWYgKCFsZW4pCisJCWxlbiA9IFRJU19NRU1fTEVOOworCisJaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmcG5wX2Rldi0+ZGV2LCAmdHBtX3RpcykpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNoaXAtPnZlbmRvci5pb2Jhc2UgPSBpb3JlbWFwKHN0YXJ0LCBsZW4pOworCWlmICghY2hpcC0+dmVuZG9yLmlvYmFzZSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwl2ZW5kb3IgPSBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX0RJRF9WSUQoMCkpOworCisJLyogRGVmYXVsdCB0aW1lb3V0cyAqLworCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsKKwljaGlwLT52ZW5kb3IudGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyhUSVNfTE9OR19USU1FT1VUKTsKKwljaGlwLT52ZW5kb3IudGltZW91dF9jID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7CisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOworCisJZGV2X2luZm8oJnBucF9kZXYtPmRldiwKKwkJICIxLjIgVFBNIChkZXZpY2UtaWQgMHglWCwgcmV2LWlkICVkKVxuIiwKKwkJIHZlbmRvciA+PiAxNiwgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1JJRCgwKSkpOworCisJLyogRmlndXJlIG91dCB0aGUgY2FwYWJpbGl0aWVzICovCisJaW50ZmNhcHMgPQorCSAgICBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJICAgICBUUE1fSU5URl9DQVBTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlRQTSBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzICgweCV4KTpcbiIsCisJCWludGZjYXBzKTsKKwlpZiAoaW50ZmNhcHMgJiBUUE1fSU5URl9CVVJTVF9DT1VOVF9TVEFUSUMpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0QnVyc3QgQ291bnQgU3RhdGljXG4iKTsKKwlpZiAoaW50ZmNhcHMgJiBUUE1fSU5URl9DTURfUkVBRFlfSU5UKQorCQlkZXZfZGJnKCZwbnBfZGV2LT5kZXYsICJcdENvbW1hbmQgUmVhZHkgSW50IFN1cHBvcnRcbiIpOworCWlmIChpbnRmY2FwcyAmIFRQTV9JTlRGX0lOVF9FREdFX0ZBTExJTkcpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0SW50ZXJydXB0IEVkZ2UgRmFsbGluZ1xuIik7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfSU5UX0VER0VfUklTSU5HKQorCQlkZXZfZGJnKCZwbnBfZGV2LT5kZXYsICJcdEludGVycnVwdCBFZGdlIFJpc2luZ1xuIik7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfSU5UX0xFVkVMX0xPVykKKwkJZGV2X2RiZygmcG5wX2Rldi0+ZGV2LCAiXHRJbnRlcnJ1cHQgTGV2ZWwgTG93XG4iKTsKKwlpZiAoaW50ZmNhcHMgJiBUUE1fSU5URl9JTlRfTEVWRUxfSElHSCkKKwkJZGV2X2RiZygmcG5wX2Rldi0+ZGV2LCAiXHRJbnRlcnJ1cHQgTGV2ZWwgSGlnaFxuIik7CisJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfTE9DQUxJVFlfQ0hBTkdFX0lOVCkKKwkJZGV2X2RiZygmcG5wX2Rldi0+ZGV2LCAiXHRMb2NhbGl0eSBDaGFuZ2UgSW50IFN1cHBvcnRcbiIpOworCWlmIChpbnRmY2FwcyAmIFRQTV9JTlRGX1NUU19WQUxJRF9JTlQpCisJCWRldl9kYmcoJnBucF9kZXYtPmRldiwgIlx0U3RzIFZhbGlkIEludCBTdXBwb3J0XG4iKTsKKwlpZiAoaW50ZmNhcHMgJiBUUE1fSU5URl9EQVRBX0FWQUlMX0lOVCkKKwkJZGV2X2RiZygmcG5wX2Rldi0+ZGV2LCAiXHREYXRhIEF2YWlsIEludCBTdXBwb3J0XG4iKTsKKworCWlmIChyZXF1ZXN0X2xvY2FsaXR5KGNoaXAsIDApICE9IDApIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJLyogSU5URVJSVVBUIFNldHVwICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hpcC0+dmVuZG9yLnJlYWRfcXVldWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPnZlbmRvci5pbnRfcXVldWUpOworCisJaW50bWFzayA9CisJICAgIGlvcmVhZDMyKGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkgICAgIFRQTV9JTlRfRU5BQkxFKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCisJaW50bWFzayB8PSBUUE1fSU5URl9DTURfUkVBRFlfSU5UCisJICAgIHwgVFBNX0lOVEZfTE9DQUxJVFlfQ0hBTkdFX0lOVCB8IFRQTV9JTlRGX0RBVEFfQVZBSUxfSU5UCisJICAgIHwgVFBNX0lOVEZfU1RTX1ZBTElEX0lOVDsKKworCWlvd3JpdGUzMihpbnRtYXNrLAorCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkgIFRQTV9JTlRfRU5BQkxFKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCWlmIChpbnRlcnJ1cHRzKSB7CisJCWNoaXAtPnZlbmRvci5pcnEgPQorCQkgICAgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCSAgICBUUE1fSU5UX1ZFQ1RPUihjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKworCQlmb3IgKGkgPSAzOyBpIDwgMTYgJiYgY2hpcC0+dmVuZG9yLmlycSA9PSAwOyBpKyspIHsKKwkJCWlvd3JpdGU4KGksIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgICBUUE1fSU5UX1ZFQ1RPUihjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwkJCWlmIChyZXF1ZXN0X2lycQorCQkJICAgIChpLCB0aXNfaW50X3Byb2JlLCBTQV9TSElSUSwKKwkJCSAgICAgY2hpcC0+dmVuZG9yLm1pc2NkZXYubmFtZSwgY2hpcCkgIT0gMCkgeworCQkJCWRldl9pbmZvKGNoaXAtPmRldiwKKwkJCQkJICJVbmFibGUgdG8gcmVxdWVzdCBpcnE6ICVkIGZvciBwcm9iZVxuIiwKKwkJCQkJIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBDbGVhciBhbGwgZXhpc3RpbmcgKi8KKwkJCWlvd3JpdGUzMihpb3JlYWQzMgorCQkJCSAgKGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgIFRQTV9JTlRfU1RBVFVTKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpLAorCQkJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICBUUE1fSU5UX1NUQVRVUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKworCQkJLyogVHVybiBvbiAqLworCQkJaW93cml0ZTMyKGludG1hc2sgfCBUUE1fR0xPQkFMX0lOVF9FTkFCTEUsCisJCQkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkgIFRQTV9JTlRfRU5BQkxFKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOworCisJCQkvKiBHZW5lcmF0ZSBJbnRlcnJ1cHRzICovCisJCQl0cG1fZ2VuX2ludGVycnVwdChjaGlwKTsKKworCQkJLyogVHVybiBvZmYgKi8KKwkJCWlvd3JpdGUzMihpbnRtYXNrLAorCQkJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICBUUE1fSU5UX0VOQUJMRShjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwkJCWZyZWVfaXJxKGksIGNoaXApOworCQl9CisJfQorCWlmIChjaGlwLT52ZW5kb3IuaXJxKSB7CisJCWlvd3JpdGU4KGNoaXAtPnZlbmRvci5pcnEsCisJCQkgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkgVFBNX0lOVF9WRUNUT1IoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJCWlmIChyZXF1ZXN0X2lycQorCQkgICAgKGNoaXAtPnZlbmRvci5pcnEsIHRpc19pbnRfaGFuZGxlciwgU0FfU0hJUlEsCisJCSAgICAgY2hpcC0+dmVuZG9yLm1pc2NkZXYubmFtZSwgY2hpcCkgIT0gMCkgeworCQkJZGV2X2luZm8oY2hpcC0+ZGV2LAorCQkJCSAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxOiAlZCBmb3IgdXNlXG4iLAorCQkJCSBjaGlwLT52ZW5kb3IuaXJxKTsKKwkJCWNoaXAtPnZlbmRvci5pcnEgPSAwOworCQl9IGVsc2UgeworCQkJLyogQ2xlYXIgYWxsIGV4aXN0aW5nICovCisJCQlpb3dyaXRlMzIoaW9yZWFkMzIKKwkJCQkgIChjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCQkgICBUUE1fSU5UX1NUQVRVUyhjaGlwLT52ZW5kb3IubG9jYWxpdHkpKSwKKwkJCQkgIGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJCSAgVFBNX0lOVF9TVEFUVVMoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisKKwkJCS8qIFR1cm4gb24gKi8KKwkJCWlvd3JpdGUzMihpbnRtYXNrIHwgVFBNX0dMT0JBTF9JTlRfRU5BQkxFLAorCQkJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICBUUE1fSU5UX0VOQUJMRShjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwkJfQorCX0KKworCUlOSVRfTElTVF9IRUFEKCZjaGlwLT52ZW5kb3IubGlzdCk7CisJc3Bpbl9sb2NrKCZ0aXNfbG9jayk7CisJbGlzdF9hZGQoJmNoaXAtPnZlbmRvci5saXN0LCAmdGlzX2NoaXBzKTsKKwlzcGluX3VubG9jaygmdGlzX2xvY2spOworCisJdHBtX2dldF90aW1lb3V0cyhjaGlwKTsKKwl0cG1fY29udGludWVfc2VsZnRlc3QoY2hpcCk7CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJaWYgKGNoaXAtPnZlbmRvci5pb2Jhc2UpCisJCWlvdW5tYXAoY2hpcC0+dmVuZG9yLmlvYmFzZSk7CisJdHBtX3JlbW92ZV9oYXJkd2FyZShjaGlwLT5kZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB0cG1fdGlzX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHRwbV9wbV9zdXNwZW5kKCZkZXYtPmRldiwgbXNnKTsKK30KKworc3RhdGljIGludCB0cG1fdGlzX3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKmRldikKK3sKKwlyZXR1cm4gdHBtX3BtX3Jlc3VtZSgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgdHBtX3BucF90YmxbXSBfX2RldmluaXRkYXRhID0geworCXsiUE5QMEMzMSIsIDB9LAkJLyogVFBNICovCisJeyJBVE0xMjAwIiwgMH0sCQkvKiBBdG1lbCAqLworCXsiSUZYMDEwMiIsIDB9LAkJLyogSW5maW5lb24gKi8KKwl7IkJDTTAxMDEiLCAwfSwJCS8qIEJyb2FkY29tICovCisJeyJOU0MxMjAwIiwgMH0sCQkvKiBOYXRpb25hbCAqLworCS8qIEFkZCBuZXcgaGVyZSAqLworCXsiIiwgMH0sCQkvKiBVc2VyIFNwZWNpZmllZCAqLworCXsiIiwgMH0JCQkvKiBUZXJtaW5hdG9yICovCit9OworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgdGlzX3BucF9kcml2ZXIgPSB7CisJLm5hbWUgPSAidHBtX3RpcyIsCisJLmlkX3RhYmxlID0gdHBtX3BucF90YmwsCisJLnByb2JlID0gdHBtX3Rpc19wbnBfaW5pdCwKKwkuc3VzcGVuZCA9IHRwbV90aXNfcG5wX3N1c3BlbmQsCisJLnJlc3VtZSA9IHRwbV90aXNfcG5wX3Jlc3VtZSwKK307CisKKyNkZWZpbmUgVElTX0hJRF9VU1JfSURYIHNpemVvZih0cG1fcG5wX3RibCkvc2l6ZW9mKHN0cnVjdCBwbnBfZGV2aWNlX2lkKSAtMgorbW9kdWxlX3BhcmFtX3N0cmluZyhoaWQsIHRwbV9wbnBfdGJsW1RJU19ISURfVVNSX0lEWF0uaWQsCisJCSAgICBzaXplb2YodHBtX3BucF90YmxbVElTX0hJRF9VU1JfSURYXS5pZCksIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhoaWQsICJTZXQgYWRkaXRpb25hbCBzcGVjaWZpYyBISUQgZm9yIHRoaXMgZHJpdmVyIHRvIHByb2JlIik7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdGlzKHZvaWQpCit7CisJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJnRpc19wbnBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfdGlzKHZvaWQpCit7CisJc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKmksICpqOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKwlzcGluX2xvY2soJnRpc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaSwgaiwgJnRpc19jaGlwcywgbGlzdCkgeworCQljaGlwID0gdG9fdHBtX2NoaXAoaSk7CisJCWlvd3JpdGUzMih+VFBNX0dMT0JBTF9JTlRfRU5BQkxFICYKKwkJCSAgaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCQkJICAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLgorCQkJCQkJICBsb2NhbGl0eSkpLAorCQkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJCSAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJCXJlbGVhc2VfbG9jYWxpdHkoY2hpcCwgY2hpcC0+dmVuZG9yLmxvY2FsaXR5LCAxKTsKKwkJaWYgKGNoaXAtPnZlbmRvci5pcnEpCisJCQlmcmVlX2lycShjaGlwLT52ZW5kb3IuaXJxLCBjaGlwKTsKKwkJaW91bm1hcChpLT5pb2Jhc2UpOworCQlsaXN0X2RlbCgmaS0+bGlzdCk7CisJCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKKwl9CisJc3Bpbl91bmxvY2soJnRpc19sb2NrKTsKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJnRpc19wbnBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF90aXMpOworbW9kdWxlX2V4aXQoY2xlYW51cF90aXMpOworTU9EVUxFX0FVVEhPUigiTGVlbmRlcnQgdmFuIERvb3JuIChsZWVuZGVydEB3YXRzb24uaWJtLmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBNIERyaXZlciIpOworTU9EVUxFX1ZFUlNJT04oIjIuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IDk4YjEyNmMuLmE4OGI5NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTM1MSwxMCArMzUxLDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCXJldHVybiBzaXplOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSk7CiAKLWludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBzaXplX3Qgc2l6ZSkKK2ludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLAorCQkJCXNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKQEAgLTM2OCwxNyArMzY4LDE2IEBACiAJCXRiLT51c2VkICs9IHNwYWNlOwogCQljb3BpZWQgKz0gc3BhY2U7CiAJCWNoYXJzICs9IHNwYWNlOwotLyogCQlwcmludGsoIkZsaXAgaW5zZXJ0ICVkLlxuIiwgc3BhY2UpOyAqLwogCX0KIAkvKiBUaGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGRhdGEgb3ZlcgogCSAgIHNldmVyYWwgYnVmZmVycy4gSWYgdGhpcyBpcyB0aGUgY2FzZSB3ZSBtdXN0IGxvb3AgKi8KIAl3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodHR5X2luc2VydF9mbGlwX3N0cmluZyk7CiAKLWludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjb25zdCBjaGFyICpmbGFncywgc2l6ZV90IHNpemUpCitpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKQEAgLTM5OSw5ICszOTgsMjAgQEAKIAl3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9CitFWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MpOwogCi1FWFBPUlRfU1lNQk9MX0dQTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKTsKLQordm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKSB7CisJCXR0eS0+YnVmLnRhaWwtPmFjdGl2ZSA9IDA7CisJCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfc2NoZWR1bGVfZmxpcCk7CiAKIC8qCiAgKglQcmVwYXJlIGEgYmxvY2sgb2Ygc3BhY2UgaW4gdGhlIGJ1ZmZlciBmb3IgZGF0YS4gUmV0dXJucyB0aGUgbGVuZ3RoCkBAIC0xNzMwLDcgKzE3NDAsNyBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksICpvX3R0eTsKIAlpbnQJcHR5X21hc3RlciwgdHR5X2Nsb3NpbmcsIG9fdHR5X2Nsb3NpbmcsIGRvX3NsZWVwOwotCWludAlkZXZwdHNfbWFzdGVyLCBkZXZwdHM7CisJaW50CWRldnB0czsKIAlpbnQJaWR4OwogCWNoYXIJYnVmWzY0XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTc0Nyw3ICsxNzU3LDYgQEAKIAlwdHlfbWFzdGVyID0gKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKIAkJICAgICAgdHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKTsKIAlkZXZwdHMgPSAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNKSAhPSAwOwotCWRldnB0c19tYXN0ZXIgPSBwdHlfbWFzdGVyICYmIGRldnB0czsKIAlvX3R0eSA9IHR0eS0+bGluazsKIAogI2lmZGVmIFRUWV9QQVJBTk9JQV9DSEVDSwpAQCAtMjE4NSw2ICsyMTk0LDcgQEAKIAkJcmV0dXJuIDA7CiBvdXQxOgogCXJlbGVhc2VfZGV2KGZpbHApOworCXJldHVybiByZXR2YWw7CiBvdXQ6CiAJZG93bigmYWxsb2NhdGVkX3B0eXNfbG9jayk7CiAJaWRyX3JlbW92ZSgmYWxsb2NhdGVkX3B0eXMsIGluZGV4KTsKQEAgLTI3MTMsNyArMjcyMywxMSBAQAogCQl9CiAJCXRhc2tfbG9jayhwKTsKIAkJaWYgKHAtPmZpbGVzKSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7CisJCQkvKgorCQkJICogV2UgZG9uJ3QgdGFrZSBhIHJlZiB0byB0aGUgZmlsZSwgc28gd2UgbXVzdAorCQkJICogaG9sZCAtPmZpbGVfbG9jayBpbnN0ZWFkLgorCQkJICovCisJCQlzcGluX2xvY2soJnAtPmZpbGVzLT5maWxlX2xvY2spOwogCQkJZmR0ID0gZmlsZXNfZmR0YWJsZShwLT5maWxlcyk7CiAJCQlmb3IgKGk9MDsgaSA8IGZkdC0+bWF4X2ZkczsgaSsrKSB7CiAJCQkJZmlscCA9IGZjaGVja19maWxlcyhwLT5maWxlcywgaSk7CkBAIC0yNzI0LDExICsyNzM4LDExIEBACiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiU0FLOiBraWxsZWQgcHJvY2VzcyAlZCIKIAkJCQkJICAgICIgKCVzKTogZmQjJWQgb3BlbmVkIHRvIHRoZSB0dHlcbiIsCiAJCQkJCSAgICBwLT5waWQsIHAtPmNvbW0sIGkpOwotCQkJCQlzZW5kX3NpZyhTSUdLSUxMLCBwLCAxKTsKKwkJCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHApOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXNwaW5fdW5sb2NrKCZwLT5maWxlcy0+ZmlsZV9sb2NrKTsKIAkJfQogCQl0YXNrX3VubG9jayhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMDlkOWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYworKysgL2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgTkVDIFZSNDEwMCBzZXJpZXMgIFJlYWwgVGltZSBDbG9jayB1bml0LgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdnI0MXh4L3ZyNDF4eC5oPgotCi1NT0RVTEVfQVVUSE9SKCJZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTkVDIFZSNDEwMCBzZXJpZXMgUlRDIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIFJUQzFfVFlQRTFfU1RBUlQJMHgwYjAwMDBjMFVMCi0jZGVmaW5lIFJUQzFfVFlQRTFfRU5ECQkweDBiMDAwMGRmVUwKLSNkZWZpbmUgUlRDMl9UWVBFMV9TVEFSVAkweDBiMDAwMWMwVUwKLSNkZWZpbmUgUlRDMl9UWVBFMV9FTkQJCTB4MGIwMDAxZGZVTAotCi0jZGVmaW5lIFJUQzFfVFlQRTJfU1RBUlQJMHgwZjAwMDEwMFVMCi0jZGVmaW5lIFJUQzFfVFlQRTJfRU5ECQkweDBmMDAwMTFmVUwKLSNkZWZpbmUgUlRDMl9UWVBFMl9TVEFSVAkweDBmMDAwMTIwVUwKLSNkZWZpbmUgUlRDMl9UWVBFMl9FTkQJCTB4MGYwMDAxM2ZVTAotCi0jZGVmaW5lIFJUQzFfU0laRQkJMHgyMAotI2RlZmluZSBSVEMyX1NJWkUJCTB4MjAKLQotLyogUlRDIDEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVUSU1FTFJFRwkJMHgwMAotI2RlZmluZSBFVElNRU1SRUcJCTB4MDIKLSNkZWZpbmUgRVRJTUVIUkVHCQkweDA0Ci0vKiBSRlUgKi8KLSNkZWZpbmUgRUNNUExSRUcJCTB4MDgKLSNkZWZpbmUgRUNNUE1SRUcJCTB4MGEKLSNkZWZpbmUgRUNNUEhSRUcJCTB4MGMKLS8qIFJGVSAqLwotI2RlZmluZSBSVENMMUxSRUcJCTB4MTAKLSNkZWZpbmUgUlRDTDFIUkVHCQkweDEyCi0jZGVmaW5lIFJUQ0wxQ05UTFJFRwkJMHgxNAotI2RlZmluZSBSVENMMUNOVEhSRUcJCTB4MTYKLSNkZWZpbmUgUlRDTDJMUkVHCQkweDE4Ci0jZGVmaW5lIFJUQ0wySFJFRwkJMHgxYQotI2RlZmluZSBSVENMMkNOVExSRUcJCTB4MWMKLSNkZWZpbmUgUlRDTDJDTlRIUkVHCQkweDFlCi0KLS8qIFJUQyAyIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUQ0xLTFJFRwkJMHgwMAotI2RlZmluZSBUQ0xLSFJFRwkJMHgwMgotI2RlZmluZSBUQ0xLQ05UTFJFRwkJMHgwNAotI2RlZmluZSBUQ0xLQ05USFJFRwkJMHgwNgotLyogUkZVICovCi0jZGVmaW5lIFJUQ0lOVFJFRwkJMHgxZQotICNkZWZpbmUgVENMT0NLX0lOVAkJMHgwOAotICNkZWZpbmUgUlRDTE9ORzJfSU5UCQkweDA0Ci0gI2RlZmluZSBSVENMT05HMV9JTlQJCTB4MDIKLSAjZGVmaW5lIEVMQVBTRURUSU1FX0lOVAkweDAxCi0KLSNkZWZpbmUgUlRDX0ZSRVFVRU5DWQkJMzI3NjgKLSNkZWZpbmUgTUFYX1BFUklPRElDX1JBVEUJNjU1MwotI2RlZmluZSBNQVhfVVNFUl9QRVJJT0RJQ19SQVRFCTY0Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnJ0YzFfYmFzZTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnJ0YzJfYmFzZTsKLQotI2RlZmluZSBydGMxX3JlYWQob2Zmc2V0KQkJcmVhZHcocnRjMV9iYXNlICsgKG9mZnNldCkpCi0jZGVmaW5lIHJ0YzFfd3JpdGUob2Zmc2V0LCB2YWx1ZSkJd3JpdGV3KCh2YWx1ZSksIHJ0YzFfYmFzZSArIChvZmZzZXQpKQotCi0jZGVmaW5lIHJ0YzJfcmVhZChvZmZzZXQpCQlyZWFkdyhydGMyX2Jhc2UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgcnRjMl93cml0ZShvZmZzZXQsIHZhbHVlKQl3cml0ZXcoKHZhbHVlKSwgcnRjMl9iYXNlICsgKG9mZnNldCkpCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGVwb2NoID0gMTk3MDsJLyogSmFuIDEgMTk3MCAwMDowMDowMCAqLwotCi1zdGF0aWMgc3BpbmxvY2tfdCBydGNfdGFza19sb2NrOwotc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IHJ0Y193YWl0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRjX2lycV9kYXRhOwotc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpydGNfYXN5bmNfcXVldWU7Ci1zdGF0aWMgcnRjX3Rhc2tfdCAqcnRjX2NhbGxiYWNrOwotc3RhdGljIGNoYXIgcnRjX25hbWVbXSA9ICJSVEMiOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZnJlcXVlbmN5Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY291bnQ7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JUlRDX1JFTEVBU0UsCi0JUlRDX09QRU4sCi19IHJ0Y19zdGF0dXNfdDsKLQotc3RhdGljIHJ0Y19zdGF0dXNfdCBydGNfc3RhdHVzOwotCi10eXBlZGVmIGVudW0gewotCUZVTkNUSU9OX1JUQ19JT0NUTCwKLQlGVU5DVElPTl9SVENfQ09OVFJPTCwKLX0gcnRjX2NhbGxmcm9tX3Q7Ci0KLXN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VbMl0gPSB7Ci0JewkubmFtZQk9IHJ0Y19uYW1lLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJfSwKLQl7CS5uYW1lCT0gcnRjX25hbWUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAotfTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZWxhcHNlZF9zZWNvbmQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X2xvdywgZmlyc3RfbWlkLCBmaXJzdF9oaWdoOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2xvdywgc2Vjb25kX21pZCwgc2Vjb25kX2hpZ2g7Ci0KLQlkbyB7Ci0JCWZpcnN0X2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOwotCQlmaXJzdF9taWQgPSBydGMxX3JlYWQoRVRJTUVNUkVHKTsKLQkJZmlyc3RfaGlnaCA9IHJ0YzFfcmVhZChFVElNRUhSRUcpOwotCQlzZWNvbmRfbG93ID0gcnRjMV9yZWFkKEVUSU1FTFJFRyk7Ci0JCXNlY29uZF9taWQgPSBydGMxX3JlYWQoRVRJTUVNUkVHKTsKLQkJc2Vjb25kX2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKLQl9IHdoaWxlIChmaXJzdF9sb3cgIT0gc2Vjb25kX2xvdyB8fCBmaXJzdF9taWQgIT0gc2Vjb25kX21pZCB8fAotCSAgICAgICAgIGZpcnN0X2hpZ2ggIT0gc2Vjb25kX2hpZ2gpOwotCi0JcmV0dXJuIChmaXJzdF9oaWdoIDw8IDE3KSB8IChmaXJzdF9taWQgPDwgMSkgfCAoZmlyc3RfbG93ID4+IDE1KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2VsYXBzZWRfc2Vjb25kKHVuc2lnbmVkIGxvbmcgc2VjKQotewotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJ0YzFfd3JpdGUoRVRJTUVMUkVHLCAodWludDE2X3QpKHNlYyA8PCAxNSkpOwotCXJ0YzFfd3JpdGUoRVRJTUVNUkVHLCAodWludDE2X3QpKHNlYyA+PiAxKSk7Ci0JcnRjMV93cml0ZShFVElNRUhSRUcsICh1aW50MTZfdCkoc2VjID4+IDE3KSk7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFsYXJtX3NlYzsKLQotCWFsYXJtX3NlYyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwgdGltZS0+dG1fbWRheSwKLQkgICAgICAgICAgICAgICAgICAgdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFQ01QTFJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPDwgMTUpKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxKSk7Ci0JcnRjMV93cml0ZShFQ01QSFJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPj4gMTcpKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCByZWFkX2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxvdywgbWlkLCBoaWdoOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JbG93ID0gcnRjMV9yZWFkKEVDTVBMUkVHKTsKLQltaWQgPSBydGMxX3JlYWQoRUNNUE1SRUcpOwotCWhpZ2ggPSBydGMxX3JlYWQoRUNNUEhSRUcpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQl0b190bSgoaGlnaCA8PCAxNykgfCAobWlkIDw8IDEpIHwgKGxvdyA+PiAxNSksIHRpbWUpOwotCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKLX0KLQotc3RhdGljIHZvaWQgcmVhZF90aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGVwb2NoX3NlYywgZWxhcHNlZF9zZWM7Ci0KLQllcG9jaF9zZWMgPSBta3RpbWUoZXBvY2gsIDEsIDEsIDAsIDAsIDApOwotCWVsYXBzZWRfc2VjID0gcmVhZF9lbGFwc2VkX3NlY29uZCgpOwotCi0JdG9fdG0oZXBvY2hfc2VjICsgZWxhcHNlZF9zZWMsIHRpbWUpOwotCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQotewotCXVuc2lnbmVkIGxvbmcgZXBvY2hfc2VjLCBjdXJyZW50X3NlYzsKLQotCWVwb2NoX3NlYyA9IG1rdGltZShlcG9jaCwgMSwgMSwgMCwgMCwgMCk7Ci0JY3VycmVudF9zZWMgPSBta3RpbWUodGltZS0+dG1feWVhciArIDE5MDAsIHRpbWUtPnRtX21vbiArIDEsIHRpbWUtPnRtX21kYXksCi0JICAgICAgICAgICAgICAgICAgICAgdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOwotCi0Jd3JpdGVfZWxhcHNlZF9zZWNvbmQoY3VycmVudF9zZWMgLSBlcG9jaF9zZWMpOwotfQotCi1zdGF0aWMgc3NpemVfdCBydGNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZGF0YTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWlmIChjb3VudCAhPSBzaXplb2YodW5zaWduZWQgaW50KSAmJiBjb3VudCAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWRkX3dhaXRfcXVldWUoJnJ0Y193YWl0LCAmd2FpdCk7Ci0KLQlkbyB7Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWlycV9kYXRhID0gcnRjX2lycV9kYXRhOwotCQlydGNfaXJxX2RhdGEgPSAwOwotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlpZiAoaXJxX2RhdGEgIT0gMCkKLQkJCWJyZWFrOwotCi0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJcmV0dmFsID0gLUVBR0FJTjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0JCQlicmVhazsKLQkJfQotCX0gd2hpbGUgKDEpOwotCi0JaWYgKHJldHZhbCA9PSAwKSB7Ci0JCWlmIChjb3VudCA9PSBzaXplb2YodW5zaWduZWQgaW50KSkgewotCQkJcmV0dmFsID0gcHV0X3VzZXIoaXJxX2RhdGEsICh1bnNpZ25lZCBpbnQgX191c2VyICopYnVmKTsKLQkJCWlmIChyZXR2YWwgPT0gMCkKLQkJCQlyZXR2YWwgPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IHB1dF91c2VyKGlycV9kYXRhLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilidWYpOwotCQkJaWYgKHJldHZhbCA9PSAwKQotCQkJCXJldHZhbCA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJfQotCi0JfQotCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZydGNfd2FpdCwgJndhaXQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBydGNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp0YWJsZSkKLXsKLQlwb2xsX3dhaXQoZmlsZSwgJnJ0Y193YWl0LCB0YWJsZSk7Ci0KLQlpZiAocnRjX2lycV9kYXRhICE9IDApCi0JCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2RvX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLCBydGNfY2FsbGZyb21fdCBmcm9tKQotewotCXN0cnVjdCBydGNfdGltZSB0aW1lOwotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PTjoKLQkJZW5hYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCQlicmVhazsKLQljYXNlIFJUQ19QSUVfT046Ci0JCWVuYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfUElFX09GRjoKLQkJZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUxNX1NFVDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aW1lLCAoc3RydWN0IHJ0Y190aW1lIF9fdXNlciAqKWFyZywKLQkJICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXNldF9hbGFybSgmdGltZSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FMTV9SRUFEOgotCQltZW1zZXQoJnRpbWUsIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKLQkJcmVhZF9hbGFybSgmdGltZSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1JEX1RJTUU6Ci0JCW1lbXNldCgmdGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCQlyZWFkX3RpbWUoJnRpbWUpOwotCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnRpbWUsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQljYXNlIFJUQ19TRVRfVElNRToKLQkJaWYgKGNhcGFibGUoQ0FQX1NZU19USU1FKSA9PSAwKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aW1lLCAoc3RydWN0IHJ0Y190aW1lIF9fdXNlciAqKWFyZywKLQkJICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXNldF90aW1lKCZ0aW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfSVJRUF9SRUFEOgotCQlyZXR1cm4gcHV0X3VzZXIocGVyaW9kaWNfZnJlcXVlbmN5LCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIFJUQ19JUlFQX1NFVDoKLQkJaWYgKGFyZyA+IE1BWF9QRVJJT0RJQ19SQVRFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGZyb20gPT0gRlVOQ1RJT05fUlRDX0lPQ1RMICYmIGFyZyA+IE1BWF9VU0VSX1BFUklPRElDX1JBVEUgJiYKLQkJICAgIGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkgPT0gMCkKLQkJCXJldHVybiAtRUFDQ0VTOwotCi0JCXBlcmlvZGljX2ZyZXF1ZW5jeSA9IGFyZzsKLQotCQljb3VudCA9IFJUQ19GUkVRVUVOQ1k7Ci0JCWRvX2Rpdihjb3VudCwgYXJnKTsKLQotCQlwZXJpb2RpY19jb3VudCA9IGNvdW50OwotCi0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOwotCQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOwotCi0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlicmVhazsKLQljYXNlIFJUQ19FUE9DSF9SRUFEOgotCQlyZXR1cm4gcHV0X3VzZXIoZXBvY2gsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7Ci0JY2FzZSBSVENfRVBPQ0hfU0VUOgotCQkvKiBEb2Vzbid0IHN1cHBvcnQgYmVmb3JlIDE5MDAgKi8KLQkJaWYgKGFyZyA8IDE5MDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoY2FwYWJsZShDQVBfU1lTX1RJTUUpID09IDApCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQotCQllcG9jaCA9IGFyZzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIHJ0Y19kb19pb2N0bChjbWQsIGFyZywgRlVOQ1RJT05fUlRDX0lPQ1RMKTsKLX0KLQotc3RhdGljIGludCBydGNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlpZiAocnRjX3N0YXR1cyA9PSBSVENfT1BFTikgewotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlydGNfc3RhdHVzID0gUlRDX09QRU47Ci0JcnRjX2lycV9kYXRhID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBGQVNZTkMpCi0JCSh2b2lkKWZhc3luY19oZWxwZXIoLTEsIGZpbGUsIDAsICZydGNfYXN5bmNfcXVldWUpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JcnRjMV93cml0ZShFQ01QTFJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QTVJFRywgMCk7Ci0JcnRjMV93cml0ZShFQ01QSFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUxSRUcsIDApOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCAwKTsKLQotCXJ0Y19zdGF0dXMgPSBSVENfUkVMRUFTRTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRjX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCi17Ci0JcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmcnRjX2FzeW5jX3F1ZXVlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5yZWFkCQk9IHJ0Y19yZWFkLAotCS5wb2xsCQk9IHJ0Y19wb2xsLAotCS5pb2N0bAkJPSBydGNfaW9jdGwsCi0JLm9wZW4JCT0gcnRjX29wZW4sCi0JLnJlbGVhc2UJPSBydGNfcmVsZWFzZSwKLQkuZmFzeW5jCQk9IHJ0Y19mYXN5bmMsCi19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZWxhcHNlZHRpbWVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0JcnRjMl93cml0ZShSVENJTlRSRUcsIEVMQVBTRURUSU1FX0lOVCk7Ci0KLQlydGNfaXJxX2RhdGEgKz0gMHgxMDA7Ci0JcnRjX2lycV9kYXRhICY9IH4weGZmOwotCXJ0Y19pcnFfZGF0YSB8PSBSVENfQUY7Ci0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXNwaW5fbG9jaygmcnRjX2xvY2spOwotCWlmIChydGNfY2FsbGJhY2spCi0JCXJ0Y19jYWxsYmFjay0+ZnVuYyhydGNfY2FsbGJhY2stPnByaXZhdGVfZGF0YSk7Ci0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnRjX3dhaXQpOwotCi0Ja2lsbF9mYXN5bmMoJnJ0Y19hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgcnRjbG9uZzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9IHBlcmlvZGljX2NvdW50OwotCi0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0JcnRjMl93cml0ZShSVENJTlRSRUcsIFJUQ0xPTkcxX0lOVCk7Ci0KLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOwotCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCBjb3VudCA+PiAxNik7Ci0KLQlydGNfaXJxX2RhdGEgKz0gMHgxMDA7Ci0JcnRjX2lycV9kYXRhICY9IH4weGZmOwotCXJ0Y19pcnFfZGF0YSB8PSBSVENfUEY7Ci0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXNwaW5fbG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0JaWYgKHJ0Y19jYWxsYmFjaykKLQkJcnRjX2NhbGxiYWNrLT5mdW5jKHJ0Y19jYWxsYmFjay0+cHJpdmF0ZV9kYXRhKTsKLQlzcGluX3VubG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJ0Y193YWl0KTsKLQotCWtpbGxfZmFzeW5jKCZydGNfYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotaW50IHJ0Y19yZWdpc3RlcihydGNfdGFza190ICp0YXNrKQotewotCWlmICh0YXNrID09IE5VTEwgfHwgdGFzay0+ZnVuYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQlpZiAocnRjX3N0YXR1cyA9PSBSVENfT1BFTikgewotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlzcGluX2xvY2soJnJ0Y190YXNrX2xvY2spOwotCWlmIChydGNfY2FsbGJhY2sgIT0gTlVMTCkgewotCQlzcGluX3VubG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcnRjX2NhbGxiYWNrID0gdGFzazsKLQlzcGluX3VubG9jaygmcnRjX3Rhc2tfbG9jayk7Ci0KLQlydGNfc3RhdHVzID0gUlRDX09QRU47Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChydGNfcmVnaXN0ZXIpOwotCi1pbnQgcnRjX3VucmVnaXN0ZXIocnRjX3Rhc2tfdCAqdGFzaykKLXsKLQlzcGluX2xvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQlpZiAodGFzayA9PSBOVUxMIHx8IHJ0Y19jYWxsYmFjayAhPSB0YXNrKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0Jc3Bpbl9sb2NrKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIDApOwotCi0JcnRjX3N0YXR1cyA9IFJUQ19SRUxFQVNFOwotCi0Jc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKLQotCXJ0Y19jYWxsYmFjayA9IE5VTEw7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y190YXNrX2xvY2spOwotCi0JZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKLQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0Y191bnJlZ2lzdGVyKTsKLQotaW50IHJ0Y19jb250cm9sKHJ0Y190YXNrX3QgKnRhc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByZXR2YWwgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjX3Rhc2tfbG9jayk7Ci0KLQlpZiAocnRjX2NhbGxiYWNrICE9IHRhc2spCi0JCXJldHZhbCA9IC1FTlhJTzsKLQllbHNlCi0JCXJ0Y19kb19pb2N0bChjbWQsIGFyZywgRlVOQ1RJT05fUlRDX0NPTlRST0wpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZydGNfdGFza19sb2NrKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19jb250cm9sKTsKLQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHJ0Y19taXNjZGV2aWNlID0gewotCS5taW5vcgk9IFJUQ19NSU5PUiwKLQkubmFtZQk9IHJ0Y19uYW1lLAotCS5mb3BzCT0gJnJ0Y19mb3BzLAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMikKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJ0YzFfYmFzZSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIFJUQzFfU0laRSk7Ci0JaWYgKHJ0YzFfYmFzZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcnRjMl9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgUlRDMl9TSVpFKTsKLQlpZiAocnRjMl9iYXNlID09IE5VTEwpIHsKLQkJaW91bm1hcChydGMxX2Jhc2UpOwotCQlydGMxX2Jhc2UgPSBOVUxMOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnJ0Y19taXNjZGV2aWNlKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlpb3VubWFwKHJ0YzFfYmFzZSk7Ci0JCWlvdW5tYXAocnRjMl9iYXNlKTsKLQkJcnRjMV9iYXNlID0gTlVMTDsKLQkJcnRjMl9iYXNlID0gTlVMTDsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKLQlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKLQlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIDApOwotCi0JcnRjX3N0YXR1cyA9IFJUQ19SRUxFQVNFOwotCXJ0Y19pcnFfZGF0YSA9IDA7Ci0KLQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJ0Y193YWl0KTsKLQotCWlycSA9IEVMQVBTRURUSU1FX0lSUTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGVsYXBzZWR0aW1lX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAotCSAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkX3RpbWUiLCBOVUxMKTsKLQlpZiAocmV0dmFsID09IDApIHsKLQkJaXJxID0gUlRDTE9ORzFfSVJROwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAotCQkgICAgICAgICAgICAgICAgICAgICAicnRjbG9uZzEiLCBOVUxMKTsKLQl9Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInJ0YzogSVJRJWQgaXMgYnVzeVxuIiwgaXJxKTsKLQkJaWYgKGlycSA9PSBSVENMT05HMV9JUlEpCi0JCQlmcmVlX2lycShFTEFQU0VEVElNRV9JUlEsIE5VTEwpOwotCQlpb3VubWFwKHJ0YzFfYmFzZSk7Ci0JCWlvdW5tYXAocnRjMl9iYXNlKTsKLQkJcnRjMV9iYXNlID0gTlVMTDsKLQkJcnRjMl9iYXNlID0gTlVMTDsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOwotCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmcnRjX3Rhc2tfbG9jayk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJydGM6IFJlYWwgVGltZSBDbG9jayBvZiBORUMgVlI0MTAwIHNlcmllc1xuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IG1pc2NfZGVyZWdpc3RlcigmcnRjX21pc2NkZXZpY2UpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZnJlZV9pcnEoRUxBUFNFRFRJTUVfSVJRLCBOVUxMKTsKLQlmcmVlX2lycShSVENMT05HMV9JUlEsIE5VTEwpOwotCWlmIChydGMxX2Jhc2UgIT0gTlVMTCkKLQkJaW91bm1hcChydGMxX2Jhc2UpOwotCWlmIChydGMyX2Jhc2UgIT0gTlVMTCkKLQkJaW91bm1hcChydGMyX2Jhc2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpydGNfcGxhdGZvcm1fZGV2aWNlOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBydGNfZGV2aWNlX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gcnRjX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRjX3JlbW92ZSksCi0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gcnRjX25hbWUsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsOwotCi0Jc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKLQljYXNlIENQVV9WUjQxMTE6Ci0JY2FzZSBDUFVfVlI0MTIxOgotCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUxX1NUQVJUOwotCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMV9FTkQ7Ci0JCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTFfU1RBUlQ7Ci0JCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUxX0VORDsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfVlI0MTIyOgotCWNhc2UgQ1BVX1ZSNDEzMToKLQljYXNlIENQVV9WUjQxMzM6Ci0JCXJ0Y19yZXNvdXJjZVswXS5zdGFydCA9IFJUQzFfVFlQRTJfU1RBUlQ7Ci0JCXJ0Y19yZXNvdXJjZVswXS5lbmQgPSBSVEMxX1RZUEUyX0VORDsKLQkJcnRjX3Jlc291cmNlWzFdLnN0YXJ0ID0gUlRDMl9UWVBFMl9TVEFSVDsKLQkJcnRjX3Jlc291cmNlWzFdLmVuZCA9IFJUQzJfVFlQRTJfRU5EOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0RFVjsKLQkJYnJlYWs7Ci0JfQotCi0JcnRjX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiUlRDIiwgLTEpOwotCWlmICghcnRjX3BsYXRmb3JtX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhydGNfcGxhdGZvcm1fZGV2aWNlLAotCQkJCXJ0Y19yZXNvdXJjZSwgQVJSQVlfU0laRShydGNfcmVzb3VyY2UpKTsKLQotCWlmIChyZXR2YWwgPT0gMCkKLQkJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZChydGNfcGxhdGZvcm1fZGV2aWNlKTsKLQotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQocnRjX3BsYXRmb3JtX2RldmljZSk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7Ci19Ci0KLW1vZHVsZV9pbml0KHZyNDF4eF9ydGNfaW5pdCk7Ci1tb2R1bGVfZXhpdCh2cjQxeHhfcnRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCBhY2M1ZDQ3Li42Yzk0ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtMzIzOCwxNCArMzIzOCw2IEBACiAJfQogfQogCi1pbnQgaXNfY29uc29sZV9zdXNwZW5kX3NhZmUodm9pZCkKLXsKLQkvKiBJdCBpcyB1bnNhZmUgdG8gc3VzcGVuZCBkZXZpY2VzIHdoaWxlIFggaGFzIGNvbnRyb2wgb2YgdGhlCi0JICogaGFyZHdhcmUuIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBvbiBhIGtlcm5lbC1jb250cm9sbGVkIGNvbnNvbGUuCi0JICovCi0JcmV0dXJuIHZjX2NvbnNbZmdfY29uc29sZV0uZC0+dmNfbW9kZSA9PSBLRF9URVhUOwotfQotCiAvKgogICoJVmlzaWJsZSBzeW1ib2xzIGZvciBtb2R1bGVzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKaW5kZXggMTZlOTlkYi4uZDUzZjY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKQEAgLTYwLDYgKzYwLDEzIEBACiAKICMgQVJNIEFyY2hpdGVjdHVyZQogCitjb25maWcgQVQ5MV9XQVRDSERPRworCXRyaXN0YXRlICJBVDkxUk05MjAwIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgV2F0Y2hkb2cgdGltZXIgZW1iZWRkZWQgaW50byBBVDkxUk05MjAwIGNoaXBzLiBUaGlzIHdpbGwgcmVib290IHlvdXIKKwkgIHN5c3RlbSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCisKIGNvbmZpZyAyMTI4NV9XQVRDSERPRwogCXRyaXN0YXRlICJEQzIxMjg1IHdhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgRk9PVEJSSURHRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IGQ2ZjI3ZmQuLjZhYjc3YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19VU0JQQ1dBVENIRE9HKSArPSBwY3dkX3VzYi5vCiAKICMgQVJNIEFyY2hpdGVjdHVyZQorb2JqLSQoQ09ORklHX0FUOTFfV0FUQ0hET0cpICs9IGF0OTFfd2R0Lm8KIG9iai0kKENPTkZJR18yMTI4NV9XQVRDSERPRykgKz0gd2R0Mjg1Lm8KIG9iai0kKENPTkZJR185NzdfV0FUQ0hET0cpICs9IHdkdDk3Ny5vCiBvYmotJChDT05GSUdfSVhQMjAwMF9XQVRDSERPRykgKz0gaXhwMjAwMF93ZHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzgzYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFfd2R0LmMKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBXYXRjaGRvZyBkcml2ZXIgZm9yIEF0bWVsIEFUOTFSTTkyMDAgKFRodW5kZXIpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlIChQdHkpIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisKKyNkZWZpbmUgV0RUX0RFRkFVTFRfVElNRQk1CS8qIDUgc2Vjb25kcyAqLworI2RlZmluZSBXRFRfTUFYX1RJTUUJCTI1NgkvKiAyNTYgc2Vjb25kcyAqLworCitzdGF0aWMgaW50IHdkdF90aW1lID0gV0RUX0RFRkFVTFRfVElNRTsKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKKworbW9kdWxlX3BhcmFtKHdkdF90aW1lLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh3ZHRfdGltZSwgIldhdGNoZG9nIHRpbWUgaW4gc2Vjb25kcy4gKGRlZmF1bHQ9Il9fTU9EVUxFX1NUUklORyhXRFRfREVGQVVMVF9USU1FKSAiKSIpOworCittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGF0OTF3ZHRfYnVzeTsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisvKgorICogRGlzYWJsZSB0aGUgd2F0Y2hkb2cuCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBhdDkxX3dkdF9zdG9wKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9XRE1SLCBBVDkxX1NUX0VYVEVOKTsKK30KKworLyoKKyAqIEVuYWJsZSBhbmQgcmVzZXQgdGhlIHdhdGNoZG9nLgorICovCitzdGF0aWMgdm9pZCBpbmxpbmUgYXQ5MV93ZHRfc3RhcnQodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1NUX1dETVIsIEFUOTFfU1RfRVhURU4gfCBBVDkxX1NUX1JTVEVOIHwgKCgoNjU1MzYgKiB3ZHRfdGltZSkgPj4gOCkgJiBBVDkxX1NUX1dEVikpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfQ1IsIEFUOTFfU1RfV0RSU1QpOworfQorCisvKgorICogUmVsb2FkIHRoZSB3YXRjaGRvZyB0aW1lci4gIChpZSwgcGF0IHRoZSB3YXRjaGRvZykKKyAqLworc3RhdGljIHZvaWQgaW5saW5lIGF0OTFfd2R0X3JlbG9hZCh2b2lkKQoreworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfQ1IsIEFUOTFfU1RfV0RSU1QpOworfQorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKy8qCisgKiBXYXRjaGRvZyBkZXZpY2UgaXMgb3BlbmVkLCBhbmQgd2F0Y2hkb2cgc3RhcnRzIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbnQgYXQ5MV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmYXQ5MXdkdF9idXN5KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWF0OTFfd2R0X3N0YXJ0KCk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCisvKgorICogQ2xvc2UgdGhlIHdhdGNoZG9nIGRldmljZS4KKyAqIElmIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBOT1QgZGVmaW5lZCB0aGVuIHRoZSB3YXRjaGRvZyBpcyBhbHNvCisgKiAgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgYXQ5MV93ZHRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKCFub3dheW91dCkKKwkJYXQ5MV93ZHRfc3RvcCgpOwkvKiBEaXNhYmxlIHRoZSB3YXRjaGRvZyB3aGVuIGZpbGUgaXMgY2xvc2VkICovCisKKwljbGVhcl9iaXQoMCwgJmF0OTF3ZHRfYnVzeSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGFuZ2UgdGhlIHdhdGNoZG9nIHRpbWUgaW50ZXJ2YWwuCisgKi8KK3N0YXRpYyBpbnQgYXQ5MV93ZHRfc2V0dGltZW91dChpbnQgbmV3X3RpbWUpCit7CisJLyoKKwkgKiBBbGwgY291bnRpbmcgb2NjdXJzIGF0IFNMT1dfQ0xPQ0sgLyAxMjggPSAwLjI1NiBIegorCSAqCisJICogU2luY2UgV0RWIGlzIGEgMTYtYml0IGNvdW50ZXIsIHRoZSBtYXhpbXVtIHBlcmlvZCBpcworCSAqIDY1NTM2IC8gMC4yNTYgPSAyNTYgc2Vjb25kcy4KKwkgKi8KKwlpZiAoKG5ld190aW1lIDw9IDApIHx8IChuZXdfdGltZSA+IFdEVF9NQVhfVElNRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2V0IG5ldyB3YXRjaGRvZyB0aW1lLiBJdCB3aWxsIGJlIHVzZWQgd2hlbiBhdDkxX3dkdF9zdGFydCgpIGlzIGNhbGxlZC4gKi8KKwl3ZHRfdGltZSA9IG5ld190aW1lOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gYXQ5MV93ZHRfaW5mbyA9IHsKKwkuaWRlbnRpdHkJPSAiYXQ5MSB3YXRjaGRvZyIsCisJLm9wdGlvbnMJPSBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKK307CisKKy8qCisgKiBIYW5kbGUgY29tbWFuZHMgZnJvbSB1c2VyLXNwYWNlLgorICovCitzdGF0aWMgaW50IGF0OTFfd2R0X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgX191c2VyICpwID0gYXJncDsKKwlpbnQgbmV3X3ZhbHVlOworCisJc3dpdGNoKGNtZCkgeworCQljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJCWF0OTFfd2R0X3JlbG9hZCgpOwkvKiBwYXQgdGhlIHdhdGNoZG9nICovCisJCQlyZXR1cm4gMDsKKworCQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZhdDkxX3dkdF9pbmZvLCBzaXplb2YoYXQ5MV93ZHRfaW5mbykpID8gLUVGQVVMVCA6IDA7CisKKwkJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorCQkJaWYgKGdldF91c2VyKG5ld192YWx1ZSwgcCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCisJCQlpZiAoYXQ5MV93ZHRfc2V0dGltZW91dChuZXdfdmFsdWUpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkvKiBFbmFibGUgbmV3IHRpbWUgdmFsdWUgKi8KKwkJCWF0OTFfd2R0X3N0YXJ0KCk7CisKKwkJCS8qIFJldHVybiBjdXJyZW50IHZhbHVlICovCisJCQlyZXR1cm4gcHV0X3VzZXIod2R0X3RpbWUsIHApOworCisJCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJCXJldHVybiBwdXRfdXNlcih3ZHRfdGltZSwgcCk7CisKKwkJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJCXJldHVybiBwdXRfdXNlcigwLCBwKTsKKworCQljYXNlIFdESU9DX1NFVE9QVElPTlM6CisJCQlpZiAoZ2V0X3VzZXIobmV3X3ZhbHVlLCBwKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKG5ld192YWx1ZSAmIFdESU9TX0RJU0FCTEVDQVJEKQorCQkJCWF0OTFfd2R0X3N0b3AoKTsKKwkJCWlmIChuZXdfdmFsdWUgJiBXRElPU19FTkFCTEVDQVJEKQorCQkJCWF0OTFfd2R0X3N0YXJ0KCk7CisJCQlyZXR1cm4gMDsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKKy8qCisgKiBQYXQgdGhlIHdhdGNoZG9nIHdoZW5ldmVyIGRldmljZSBpcyB3cml0dGVuIHRvLgorICovCitzdGF0aWMgc3NpemVfdCBhdDkxX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCWF0OTFfd2R0X3JlbG9hZCgpOwkJLyogcGF0IHRoZSB3YXRjaGRvZyAqLworCXJldHVybiBsZW47Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXQ5MXdkdF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkuaW9jdGwJCT0gYXQ5MV93ZHRfaW9jdGwsCisJLm9wZW4JCT0gYXQ5MV93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IGF0OTFfd2R0X2Nsb3NlLAorCS53cml0ZQkJPSBhdDkxX3dkdF93cml0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBhdDkxd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJCT0gJmF0OTF3ZHRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgcmVzOworCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiByYW5nZTsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJaWYgKGF0OTFfd2R0X3NldHRpbWVvdXQod2R0X3RpbWUpKSB7CisJCWF0OTFfd2R0X3NldHRpbWVvdXQoV0RUX0RFRkFVTFRfVElNRSk7CisJCXByaW50ayhLRVJOX0lORk8gImF0OTFfd2R0OiB3ZHRfdGltZSB2YWx1ZSBtdXN0IGJlIDEgPD0gd2R0X3RpbWUgPD0gMjU2LCB1c2luZyAlZFxuIiwgd2R0X3RpbWUpOworCX0KKworCXJlcyA9IG1pc2NfcmVnaXN0ZXIoJmF0OTF3ZHRfbWlzY2Rldik7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXByaW50aygiQVQ5MSBXYXRjaGRvZyBUaW1lciBlbmFibGVkICglZCBzZWNvbmRzLCBub3dheW91dD0lZClcbiIsIHdkdF90aW1lLCBub3dheW91dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdDkxX3dkdF9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZhdDkxd2R0X21pc2NkZXYpOworfQorCittb2R1bGVfaW5pdChhdDkxX3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGF0OTFfd2R0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgVmljdG9yIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldhdGNoZG9nIGRyaXZlciBmb3IgQXRtZWwgQVQ5MVJNOTIwMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYwppbmRleCBhMTMzOTVlLi5mYTJiYTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYwpAQCAtMzMsMTEgKzMzLDYgQEAKICAqCTgyODAxRSAgIChDLUlDSCkgIDogZG9jdW1lbnQgbnVtYmVyIDI3MzU5OS0wMDEsIDI3MzY0NS0wMDIsCiAgKgk4MjgwMUVCICAoSUNINSkgICA6IGRvY3VtZW50IG51bWJlciAyNTI1MTYtMDAxLCAyNTI1MTctMDAzLAogICoJODI4MDFFUiAgKElDSDVSKSAgOiBkb2N1bWVudCBudW1iZXIgMjUyNTE2LTAwMSwgMjUyNTE3LTAwMywKLSAqCTgyODAxRkIgIChJQ0g2KSAgIDogZG9jdW1lbnQgbnVtYmVyIDMwMTQ3My0wMDIsIDMwMTQ3NC0wMDcsCi0gKgk4MjgwMUZSICAoSUNINlIpICA6IGRvY3VtZW50IG51bWJlciAzMDE0NzMtMDAyLCAzMDE0NzQtMDA3LAotICoJODI4MDFGQk0gKElDSDYtTSkgOiBkb2N1bWVudCBudW1iZXIgMzAxNDczLTAwMiwgMzAxNDc0LTAwNywKLSAqCTgyODAxRlcgIChJQ0g2VykgIDogZG9jdW1lbnQgbnVtYmVyIDMwMTQ3My0wMDEsIDMwMTQ3NC0wMDcsCi0gKgk4MjgwMUZSVyAoSUNINlJXKSA6IGRvY3VtZW50IG51bWJlciAzMDE0NzMtMDAxLCAzMDE0NzQtMDA3CiAgKgogICogIDIwMDAwNzEwIE5pbHMgRmFlcmJlcgogICoJSW5pdGlhbCBWZXJzaW9uIDAuMDEKQEAgLTY2LDYgKzYxLDEwIEBACiAgKiAgMjAwNTA4MDcgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4KICAqCTAuMDggTWFrZSBzdXJlIHRoYXQgdGhlIHdhdGNoZG9nIGlzIG9ubHkgImFybWVkIiB3aGVuIHN0YXJ0ZWQuCiAgKgkgICAgIChLZXJuZWwgQnVnIDQyNTEpCisgKiAgMjAwNjA0MTYgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4KKyAqCTAuMDkgUmVtb3ZlIHN1cHBvcnQgZm9yIHRoZSBJQ0g2LCBJQ0g2UiwgSUNINi1NLCBJQ0g2VyBhbmQgSUNINlJXIGFuZAorICoJICAgICBJQ0g3IGNoaXBzZXRzLiAoU2VlIEtlcm5lbCBCdWcgNjAzMSAtIG90aGVyIGNvZGUgd2lsbCBzdXBwb3J0IHRoZXNlCisgKgkgICAgIGNoaXBzZXRzKQogICovCiAKIC8qCkBAIC05MCw3ICs4OSw3IEBACiAjaW5jbHVkZSAiaTh4eF90Y28uaCIKIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFRDT19WRVJTSU9OICIwLjA4IgorI2RlZmluZSBUQ09fVkVSU0lPTiAiMC4wOSIKICNkZWZpbmUgVENPX01PRFVMRV9OQU1FICJpOHh4IFRDTyB0aW1lciIKICNkZWZpbmUgVENPX0RSSVZFUl9OQU1FICAgVENPX01PRFVMRV9OQU1FICIsIHYiIFRDT19WRVJTSU9OCiAjZGVmaW5lIFBGWCBUQ09fTU9EVUxFX05BTUUgIjogIgpAQCAtMzkxLDExICszOTAsNiBAQAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEyLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAotCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzAsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKLQl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8yLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAotCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzAsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyAwLCB9LAkJCS8qIEVuZCBvZiBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkLmMKaW5kZXggOGQ2YjI0OS4uNmQ0NGNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZC5jCkBAIC02NiwxNSArNjYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogRm9yIGZpbGUgb3BlcmF0aW9ucyAqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBGb3IgaW8tcG9ydCBhY2Nlc3MgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBGb3Igc3Bpbl9sb2NrL3NwaW5fdW5sb2NrLy4uLiAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIFRBU0tfSU5URVJSVVBUSUJMRSwgc2V0X2N1cnJlbnRfc3RhdGUoKSBhbmQgZnJpZW5kcyAqLwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIEZvciBrbWFsbG9jICovCiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBGb3IgY29weV90b191c2VyL3B1dF91c2VyLy4uLiAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogRm9yIGluYi9vdXRiLy4uLiAqLwogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgV0FUQ0hET0dfVkVSU0lPTiAiMS4xNiIKLSNkZWZpbmUgV0FUQ0hET0dfREFURSAiMDMgSmFuIDIwMDYiCisjZGVmaW5lIFdBVENIRE9HX1ZFUlNJT04gIjEuMTciCisjZGVmaW5lIFdBVENIRE9HX0RBVEUgIjEyIEZlYiAyMDA2IgogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiSVNBLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCkBAIC05NiwxNSArOTQsMTkgQEAKICAqIFBDSS1QQyBXYXRjaGRvZyBjYXJkLgogKi8KIC8qIFBvcnQgMSA6IENvbnRyb2wgU3RhdHVzICMxIGZvciB0aGUgUEMgV2F0Y2hkb2cgY2FyZCwgcmV2aXNpb24gQS4gKi8KLSNkZWZpbmUgV0RfV0RSU1QgICAgICAgICAgICAgICAgMHgwMQkvKiBQcmV2aW91c2x5IHJlc2V0IHN0YXRlICovCi0jZGVmaW5lIFdEX1QxMTAgICAgICAgICAgICAgICAgIDB4MDIJLyogVGVtcGVyYXR1cmUgb3ZlcmhlYXQgc2Vuc2UgKi8KLSNkZWZpbmUgV0RfSFJUQlQgICAgICAgICAgICAgICAgMHgwNAkvKiBIZWFydGJlYXQgc2Vuc2UgKi8KLSNkZWZpbmUgV0RfUkxZMiAgICAgICAgICAgICAgICAgMHgwOAkvKiBFeHRlcm5hbCByZWxheSB0cmlnZ2VyZWQgKi8KLSNkZWZpbmUgV0RfU1JMWTIgICAgICAgICAgICAgICAgMHg4MAkvKiBTb2Z0d2FyZSBleHRlcm5hbCByZWxheSB0cmlnZ2VyZWQgKi8KKyNkZWZpbmUgV0RfV0RSU1QJCTB4MDEJLyogUHJldmlvdXNseSByZXNldCBzdGF0ZSAqLworI2RlZmluZSBXRF9UMTEwCQkJMHgwMgkvKiBUZW1wZXJhdHVyZSBvdmVyaGVhdCBzZW5zZSAqLworI2RlZmluZSBXRF9IUlRCVAkJMHgwNAkvKiBIZWFydGJlYXQgc2Vuc2UgKi8KKyNkZWZpbmUgV0RfUkxZMgkJCTB4MDgJLyogRXh0ZXJuYWwgcmVsYXkgdHJpZ2dlcmVkICovCisjZGVmaW5lIFdEX1NSTFkyCQkweDgwCS8qIFNvZnR3YXJlIGV4dGVybmFsIHJlbGF5IHRyaWdnZXJlZCAqLwogLyogUG9ydCAxIDogQ29udHJvbCBTdGF0dXMgIzEgZm9yIHRoZSBQQyBXYXRjaGRvZyBjYXJkLCByZXZpc2lvbiBDLiAqLwotI2RlZmluZSBXRF9SRVZDX1dUUlAgICAgICAgICAgICAweDAxCS8qIFdhdGNoZG9nIFRyaXAgc3RhdHVzICovCi0jZGVmaW5lIFdEX1JFVkNfSFJCVCAgICAgICAgICAgIDB4MDIJLyogV2F0Y2hkb2cgSGVhcnRiZWF0ICovCi0jZGVmaW5lIFdEX1JFVkNfVFRSUCAgICAgICAgICAgIDB4MDQJLyogVGVtcGVyYXR1cmUgVHJpcCBzdGF0dXMgKi8KKyNkZWZpbmUgV0RfUkVWQ19XVFJQCQkweDAxCS8qIFdhdGNoZG9nIFRyaXAgc3RhdHVzICovCisjZGVmaW5lIFdEX1JFVkNfSFJCVAkJMHgwMgkvKiBXYXRjaGRvZyBIZWFydGJlYXQgKi8KKyNkZWZpbmUgV0RfUkVWQ19UVFJQCQkweDA0CS8qIFRlbXBlcmF0dXJlIFRyaXAgc3RhdHVzICovCisjZGVmaW5lIFdEX1JFVkNfUkwyQQkJMHgwOAkvKiBSZWxheSAyIGFjdGl2YXRlZCBieSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgV0RfUkVWQ19STDFBCQkweDEwCS8qIFJlbGF5IDEgYWN0aXZlICovCisjZGVmaW5lIFdEX1JFVkNfUjJEUwkJMHg0MAkvKiBSZWxheSAyIGRpc2FibGUgKi8KKyNkZWZpbmUgV0RfUkVWQ19STFkyCQkweDgwCS8qIFJlbGF5IDIgYWN0aXZhdGVkPyAqLwogLyogUG9ydCAyIDogQ29udHJvbCBTdGF0dXMgIzIgKi8KICNkZWZpbmUgV0RfV0RJUwkJCTB4MTAJLyogV2F0Y2hkb2cgRGlzYWJsZWQgKi8KICNkZWZpbmUgV0RfRU5UUAkJCTB4MjAJLyogV2F0Y2hkb2cgRW5hYmxlIFRlbXBlcmF0dXJlIFRyaXAgKi8KQEAgLTEyMiw5ICsxMjQsMTQgQEAKICNkZWZpbmUgQ01EX0lTQV9WRVJTSU9OX0hVTkRSRVRICTB4MDMKICNkZWZpbmUgQ01EX0lTQV9WRVJTSU9OX01JTk9SCQkweDA0CiAjZGVmaW5lIENNRF9JU0FfU1dJVENIX1NFVFRJTkdTCQkweDA1CisjZGVmaW5lIENNRF9JU0FfUkVTRVRfUEMJCTB4MDYKKyNkZWZpbmUgQ01EX0lTQV9BUk1fMAkJCTB4MDcKKyNkZWZpbmUgQ01EX0lTQV9BUk1fMzAJCQkweDA4CisjZGVmaW5lIENNRF9JU0FfQVJNXzYwCQkJMHgwOQogI2RlZmluZSBDTURfSVNBX0RFTEFZX1RJTUVfMlNFQ1MJMHgwQQogI2RlZmluZSBDTURfSVNBX0RFTEFZX1RJTUVfNFNFQ1MJMHgwQgogI2RlZmluZSBDTURfSVNBX0RFTEFZX1RJTUVfOFNFQ1MJMHgwQworI2RlZmluZSBDTURfSVNBX1JFU0VUX1JFTEFZUwkJMHgwRAogCiAvKgogICogV2UgYXJlIHVzaW5nIGFuIGtlcm5lbCB0aW1lciB0byBkbyB0aGUgcGluZ2luZyBvZiB0aGUgd2F0Y2hkb2cKQEAgLTE0Miw2ICsxNDksNyBAQAogc3RhdGljIGNoYXIgZXhwZWN0X2Nsb3NlOwogc3RhdGljIGludCB0ZW1wX3BhbmljOwogc3RhdGljIHN0cnVjdCB7CQkJCS8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIElTQS1QQyB3YXRjaGRvZyBjYXJkICovCisJY2hhciBmd192ZXJfc3RyWzZdOwkJLyogVGhlIGNhcmRzIGZpcm13YXJlIHZlcnNpb24gKi8KIAlpbnQgcmV2aXNpb247CQkJLyogVGhlIGNhcmQncyByZXZpc2lvbiAqLwogCWludCBzdXBwb3J0c190ZW1wOwkJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KIAlpbnQgY29tbWFuZF9tb2RlOwkJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBpcyBpbiBjb21tYW5kIG1vZGUgKi8KQEAgLTE1Myw2ICsxNjEsMTMgQEAKIH0gcGN3ZF9wcml2YXRlOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworI2RlZmluZSBRVUlFVAkwCS8qIERlZmF1bHQgKi8KKyNkZWZpbmUgVkVSQk9TRQkxCS8qIFZlcmJvc2UgKi8KKyNkZWZpbmUgREVCVUcJMgkvKiBwcmludCBmYW5jeSBzdHVmZiB0b28gKi8KK3N0YXRpYyBpbnQgZGVidWcgPSBRVUlFVDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMD1RdWlldCwgMT1WZXJib3NlLCAyPURlYnVnIChkZWZhdWx0PTApIik7CisKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDYwCQkvKiA2MCBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKQEAgLTE3Miw2ICsxODcsMTAgQEAKIAlpbnQgY29udHJvbF9zdGF0dXM7CiAJaW50IHBvcnQwLCBsYXN0X3BvcnQwOwkvKiBEb3VibGUgcmVhZCBmb3Igc3RhYmlsaXNpbmcgKi8KIAorCWlmIChkZWJ1ZyA+PSBERUJVRykKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhIGNtZD0weCUwMnhcbiIsCisJCQljbWQpOworCiAJLyogVGhlIFdDTUQgYml0IG11c3QgYmUgMSBhbmQgdGhlIGNvbW1hbmQgaXMgb25seSA0IGJpdHMgaW4gc2l6ZSAqLwogCWNvbnRyb2xfc3RhdHVzID0gKGNtZCAmIDB4MEYpIHwgV0RfV0NNRDsKIAlvdXRiX3AoY29udHJvbF9zdGF0dXMsIHBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMik7CkBAIC0xODgsNiArMjA3LDEwIEBACiAJCXVkZWxheSAoMjUwKTsKIAl9CiAKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yIGNtZD0weCUwMng6IHBvcnQwPTB4JTAyeCBsYXN0X3BvcnQwPTB4JTAyeFxuIiwKKwkJCWNtZCwgcG9ydDAsIGxhc3RfcG9ydDApOworCiAJcmV0dXJuIHBvcnQwOwogfQogCkBAIC0yMTQsNiArMjM3LDEwIEBACiAJc3Bpbl91bmxvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAlwY3dkX3ByaXZhdGUuY29tbWFuZF9tb2RlID0gZm91bmQ7CiAKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiY29tbWFuZF9tb2RlPSVkXG4iLAorCQkJCXBjd2RfcHJpdmF0ZS5jb21tYW5kX21vZGUpOworCiAJcmV0dXJuKGZvdW5kKTsKIH0KIApAQCAtMjI2LDYgKzI1MywxMCBAQAogCXNwaW5fdW5sb2NrKCZwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKIAlwY3dkX3ByaXZhdGUuY29tbWFuZF9tb2RlID0gMDsKKworCWlmIChkZWJ1ZyA+PSBERUJVRykKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjb21tYW5kX21vZGU9JWRcbiIsCisJCQkJcGN3ZF9wcml2YXRlLmNvbW1hbmRfbW9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY3dkX2NoZWNrX3RlbXBlcmF0dXJlX3N1cHBvcnQodm9pZCkKQEAgLTIzNCwyNyArMjY1LDIyIEBACiAJCXBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wID0gMTsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyICpnZXRfZmlybXdhcmUodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY3dkX2dldF9maXJtd2FyZSh2b2lkKQogewogCWludCBvbmUsIHRlbiwgaHVuZCwgbWlub3I7Ci0JY2hhciAqcmV0OwogCi0JcmV0ID0ga21hbGxvYyg2LCBHRlBfS0VSTkVMKTsKLQlpZihyZXQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJc3RyY3B5KHBjd2RfcHJpdmF0ZS5md192ZXJfc3RyLCAiRVJST1IiKTsKIAogCWlmIChzZXRfY29tbWFuZF9tb2RlKCkpIHsKIAkJb25lID0gc2VuZF9pc2FfY29tbWFuZChDTURfSVNBX1ZFUlNJT05fSU5URUdFUik7CiAJCXRlbiA9IHNlbmRfaXNhX2NvbW1hbmQoQ01EX0lTQV9WRVJTSU9OX1RFTlRIKTsKIAkJaHVuZCA9IHNlbmRfaXNhX2NvbW1hbmQoQ01EX0lTQV9WRVJTSU9OX0hVTkRSRVRIKTsKIAkJbWlub3IgPSBzZW5kX2lzYV9jb21tYW5kKENNRF9JU0FfVkVSU0lPTl9NSU5PUik7Ci0JCXNwcmludGYocmV0LCAiJWMuJWMlYyVjIiwgb25lLCB0ZW4sIGh1bmQsIG1pbm9yKTsKKwkJc3ByaW50ZihwY3dkX3ByaXZhdGUuZndfdmVyX3N0ciwgIiVjLiVjJWMlYyIsIG9uZSwgdGVuLCBodW5kLCBtaW5vcik7CiAJfQotCWVsc2UKLQkJc3ByaW50ZihyZXQsICJFUlJPUiIpOwotCiAJdW5zZXRfY29tbWFuZF9tb2RlKCk7Ci0JcmV0dXJuKHJldCk7CisKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcyh2b2lkKQpAQCAtMjcyLDE3ICsyOTgsMTUgQEAKIAogc3RhdGljIHZvaWQgcGN3ZF9zaG93X2NhcmRfaW5mbyh2b2lkKQogewotCWNoYXIgKmZpcm13YXJlOwogCWludCBvcHRpb25fc3dpdGNoZXM7CiAKIAkvKiBHZXQgc29tZSBleHRyYSBpbmZvIGZyb20gdGhlIGhhcmR3YXJlIChpbiBjb21tYW5kL2RlYnVnL2RpYWcgbW9kZSkgKi8KIAlpZiAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIklTQS1QQyBXYXRjaGRvZyAoUkVWLkEpIGRldGVjdGVkIGF0IHBvcnQgMHglMDR4XG4iLCBwY3dkX3ByaXZhdGUuaW9fYWRkcik7CiAJZWxzZSBpZiAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQykgewotCQlmaXJtd2FyZSA9IGdldF9maXJtd2FyZSgpOworCQlwY3dkX2dldF9maXJtd2FyZSgpOwogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQykgZGV0ZWN0ZWQgYXQgcG9ydCAweCUwNHggKEZpcm13YXJlIHZlcnNpb246ICVzKVxuIiwKLQkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyLCBmaXJtd2FyZSk7Ci0JCWtmcmVlKGZpcm13YXJlKTsKKwkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyLCBwY3dkX3ByaXZhdGUuZndfdmVyX3N0cik7CiAJCW9wdGlvbl9zd2l0Y2hlcyA9IHBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpOwogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQkJb3B0aW9uX3N3aXRjaGVzLApAQCAtMzYyLDYgKzM4NiwxMCBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CisKKwlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJXYXRjaGRvZyBzdGFydGVkXG4iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zODYsNiArNDE0LDEwIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KKworCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIldhdGNoZG9nIHN0b3BwZWRcbiIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5Myw2ICs0MjUsMTAgQEAKIHsKIAkvKiB1c2VyIGxhbmQgcGluZyAqLwogCXBjd2RfcHJpdmF0ZS5uZXh0X2hlYXJ0YmVhdCA9IGppZmZpZXMgKyAoaGVhcnRiZWF0ICogSFopOworCisJaWYgKGRlYnVnID49IERFQlVHKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIldhdGNoZG9nIGtlZXBhbGl2ZSBzaWduYWwgc2VuZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDAyLDEyICs0MzgsMTcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAloZWFydGJlYXQgPSB0OworCisJaWYgKGRlYnVnID49IFZFUkJPU0UpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiTmV3IGhlYXJ0YmVhdDogJWRcbiIsCisJCSAgICAgICBoZWFydGJlYXQpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGN3ZF9nZXRfc3RhdHVzKGludCAqc3RhdHVzKQogewotCWludCBjYXJkX3N0YXR1czsKKwlpbnQgY29udHJvbF9zdGF0dXM7CiAKIAkqc3RhdHVzPTA7CiAJc3Bpbl9sb2NrKCZwY3dkX3ByaXZhdGUuaW9fbG9jayk7CkBAIC00MTUsMzcgKzQ1NiwzOSBAQAogCQkvKiBSZXYgQSBjYXJkcyByZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uIGZyb20KIAkJICogdGhlIGJhc2UgcmVnaXN0ZXIsIHdoaWNoIGlzIHVzZWQgZm9yIHRoZQogCQkgKiB0ZW1wZXJhdHVyZSBpbiBvdGhlciBjYXJkcy4gKi8KLQkJY2FyZF9zdGF0dXMgPSBpbmIocGN3ZF9wcml2YXRlLmlvX2FkZHIpOworCQljb250cm9sX3N0YXR1cyA9IGluYihwY3dkX3ByaXZhdGUuaW9fYWRkcik7CiAJZWxzZSB7CiAJCS8qIFJldiBDIGNhcmRzIHJldHVybiBjYXJkIHN0YXR1cyBpbiB0aGUgYmFzZQogCQkgKiBhZGRyZXNzICsgMSByZWdpc3Rlci4gQW5kIHVzZSBkaWZmZXJlbnQgYml0cwogCQkgKiB0byBpbmRpY2F0ZSBhIGNhcmQgaW5pdGlhdGVkIHJlc2V0LCBhbmQgYW4KIAkJICogb3Zlci10ZW1wZXJhdHVyZSBjb25kaXRpb24uIEFuZCB0aGUgcmVib290CiAJCSAqIHN0YXR1cyBjYW4gYmUgcmVzZXQuICovCi0JCWNhcmRfc3RhdHVzID0gaW5iKHBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisJCWNvbnRyb2xfc3RhdHVzID0gaW5iKHBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CiAJfQogCXNwaW5fdW5sb2NrKCZwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKIAlpZiAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQSkgewotCQlpZiAoY2FyZF9zdGF0dXMgJiBXRF9XRFJTVCkKKwkJaWYgKGNvbnRyb2xfc3RhdHVzICYgV0RfV0RSU1QpCiAJCQkqc3RhdHVzIHw9IFdESU9GX0NBUkRSRVNFVDsKIAotCQlpZiAoY2FyZF9zdGF0dXMgJiBXRF9UMTEwKSB7CisJCWlmIChjb250cm9sX3N0YXR1cyAmIFdEX1QxMTApIHsKIAkJCSpzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7CiAJCQlpZiAodGVtcF9wYW5pYykgewogCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVGVtcGVyYXR1cmUgb3ZlcmhlYXQgdHJpcCFcbiIpOwogCQkJCWtlcm5lbF9wb3dlcl9vZmYoKTsKKwkJCQkvKiBvciBzaG91bGQgd2UganVzdCBkbyBhOiBwYW5pYyhQRlggIlRlbXBlcmF0dXJlIG92ZXJoZWF0IHRyaXAhXG4iKTsgKi8KIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChjYXJkX3N0YXR1cyAmIFdEX1JFVkNfV1RSUCkKKwkJaWYgKGNvbnRyb2xfc3RhdHVzICYgV0RfUkVWQ19XVFJQKQogCQkJKnN0YXR1cyB8PSBXRElPRl9DQVJEUkVTRVQ7CiAKLQkJaWYgKGNhcmRfc3RhdHVzICYgV0RfUkVWQ19UVFJQKSB7CisJCWlmIChjb250cm9sX3N0YXR1cyAmIFdEX1JFVkNfVFRSUCkgewogCQkJKnN0YXR1cyB8PSBXRElPRl9PVkVSSEVBVDsKIAkJCWlmICh0ZW1wX3BhbmljKSB7CiAJCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUZW1wZXJhdHVyZSBvdmVyaGVhdCB0cmlwIVxuIik7CiAJCQkJa2VybmVsX3Bvd2VyX29mZigpOworCQkJCS8qIG9yIHNob3VsZCB3ZSBqdXN0IGRvIGE6IHBhbmljKFBGWCAiVGVtcGVyYXR1cmUgb3ZlcmhlYXQgdHJpcCFcbiIpOyAqLwogCQkJfQogCQl9CiAJfQpAQCAtNDU1LDkgKzQ5OCwyNSBAQAogCiBzdGF0aWMgaW50IHBjd2RfY2xlYXJfc3RhdHVzKHZvaWQpCiB7CisJaW50IGNvbnRyb2xfc3RhdHVzOworCiAJaWYgKHBjd2RfcHJpdmF0ZS5yZXZpc2lvbiA9PSBQQ1dEX1JFVklTSU9OX0MpIHsKIAkJc3Bpbl9sb2NrKCZwY3dkX3ByaXZhdGUuaW9fbG9jayk7Ci0JCW91dGJfcCgweDAwLCBwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOyAvKiBjbGVhciByZXNldCBzdGF0dXMgKi8KKworCQlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJjbGVhcmluZyB3YXRjaGRvZyB0cmlwIHN0YXR1c1xuIik7CisKKwkJY29udHJvbF9zdGF0dXMgPSBpbmJfcChwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOworCisJCWlmIChkZWJ1ZyA+PSBERUJVRykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzdGF0dXMgd2FzOiAweCUwMnhcbiIsIGNvbnRyb2xfc3RhdHVzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAic2VuZGluZzogMHglMDJ4XG4iLAorCQkJCShjb250cm9sX3N0YXR1cyAmIFdEX1JFVkNfUjJEUykpOworCQl9CisKKwkJLyogY2xlYXIgcmVzZXQgc3RhdHVzICYgS2VlcCBSZWxheSAyIGRpc2FibGUgc3RhdGUgYXMgaXQgaXMgKi8KKwkJb3V0Yl9wKChjb250cm9sX3N0YXR1cyAmIFdEX1JFVkNfUjJEUyksIHBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisKIAkJc3Bpbl91bmxvY2soJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00ODEsNiArNTQwLDExIEBACiAJKnRlbXBlcmF0dXJlID0gKChpbmIocGN3ZF9wcml2YXRlLmlvX2FkZHIpKSAqIDkgLyA1KSArIDMyOwogCXNwaW5fdW5sb2NrKCZwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKKwlpZiAoZGVidWcgPj0gREVCVUcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ0ZW1wZXJhdHVyZSBpczogJWQgRlxuIiwKKwkJCSp0ZW1wZXJhdHVyZSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5OSw2ICs2NjMsOCBAQAogc3RhdGljIGludCBwY3dkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZvcGVuX2FsbG93ZWQpICkgeworCQlpZiAoZGVidWcgPj0gVkVSQk9TRSkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gb3BlbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UuXG4iKTsKIAkJYXRvbWljX2luYyggJm9wZW5fYWxsb3dlZCApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTkyMiw3ICs5ODgsOCBAQAogewogCWlmIChwY3dkX3ByaXZhdGUuaW9fYWRkcikKIAkJcGN3YXRjaGRvZ19leGl0KCk7Ci0JcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhdGNoZG9nIE1vZHVsZSBVbmxvYWRlZC5cbiIpOwogfQogCiBtb2R1bGVfaW5pdChwY3dkX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3VzYi5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKaW5kZXggMjcwMGM1Yy4uM2ZkZmRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTcwNSw3ICs3MDUsOCBAQAogZXJyX291dF91bnJlZ2lzdGVyX3JlYm9vdDoKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmdXNiX3Bjd2Rfbm90aWZpZXIpOwogZXJyb3I6Ci0JdXNiX3Bjd2RfZGVsZXRlICh1c2JfcGN3ZCk7CisJaWYgKHVzYl9wY3dkKQorCQl1c2JfcGN3ZF9kZWxldGUodXNiX3Bjd2QpOwogCXVzYl9wY3dkX2RldmljZSA9IE5VTEw7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggOWRjNTQ3My4uMWVhMDRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKQEAgLTQyMyw2ICs0MjMsMTIgQEAKIAlpZiAodG1yX2F0Ym9vdCAmJiBzdGFydGVkID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlN0YXJ0aW5nIFdhdGNoZG9nIFRpbWVyXG4iKTsKIAkJczNjMjQxMHdkdF9zdGFydCgpOworCX0gZWxzZSBpZiAoIXRtcl9hdGJvb3QpIHsKKwkJLyogaWYgd2UncmUgbm90IGVuYWJsaW5nIHRoZSB3YXRjaGRvZywgdGhlbiBlbnN1cmUgaXQgaXMKKwkJICogZGlzYWJsZWQgaWYgaXQgaGFzIGJlZW4gbGVmdCBydW5uaW5nIGZyb20gdGhlIGJvb3Rsb2FkZXIKKwkJICogb3Igb3RoZXIgc291cmNlICovCisKKwkJczNjMjQxMHdkdF9zdG9wKCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKaW5kZXggNTE1Y2U3NS4uMjBiODhmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjMTIwMHdkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzEyMDB3ZHQuYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50ayhiYW5uZXIpOworCXByaW50aygiJXNcbiIsIGJhbm5lcik7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2MxMjAwd2R0X2xvY2spOwogCXNlbWFfaW5pdCgmb3Blbl9zZW0sIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZwppbmRleCA2MGM5YmU5Li4yY2M3MWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZworKysgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZwpAQCAtOTksNyArOTksNyBAQAogCSAgRW5hYmxlIHRoaXMgY3B1ZnJlcSBnb3Zlcm5vciB3aGVuIHlvdSBlaXRoZXIgd2FudCB0byBzZXQgdGhlCiAJICBDUFUgZnJlcXVlbmN5IG1hbnVhbGx5IG9yIHdoZW4gYW4gdXNlcnNwYWNlIHByb2dyYW0gc2hhbGwKIAkgIGJlIGFibGUgdG8gc2V0IHRoZSBDUFUgZHluYW1pY2FsbHksIGxpa2Ugb24gTEFSVCAKLQkgIDxodHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC8+CisJICA8aHR0cDovL3d3dy5sYXJ0bWFrZXIubmwvPi4KIAogCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXEvPi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggOWI2YWU3ZC4uMjliMmZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0zMTksNyArMzE5LDYgQEAKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX3BhcnNlX2dvdmVybm9yKTsKIAogCiAvKiBkcml2ZXJzL2Jhc2UvY3B1LmMgKi8KQEAgLTM0Niw2ICszNDUsOCBAQAogc2hvd19vbmUoc2NhbGluZ19tYXhfZnJlcSwgbWF4KTsKIHNob3dfb25lKHNjYWxpbmdfY3VyX2ZyZXEsIGN1cik7CiAKK3N0YXRpYyBpbnQgX19jcHVmcmVxX3NldF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisKIC8qKgogICogY3B1ZnJlcV9wZXJfY3B1X2F0dHJfd3JpdGUoKSAvIHN0b3JlXyMjZmlsZV9uYW1lKCkgLSBzeXNmcyB3cml0ZSBhY2Nlc3MKICAqLwpAQCAtMzY0LDcgKzM2NSwxMCBAQAogCWlmIChyZXQgIT0gMSkJCQkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZuZXdfcG9saWN5KTsJCQkJXAorCW11dGV4X2xvY2soJnBvbGljeS0+bG9jayk7CQkJCQlcCisJcmV0ID0gX19jcHVmcmVxX3NldF9wb2xpY3kocG9saWN5LCAmbmV3X3BvbGljeSk7CQlcCisJcG9saWN5LT51c2VyX3BvbGljeS5vYmplY3QgPSBwb2xpY3ktPm9iamVjdDsJCQlcCisJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwkJCQkJXAogCQkJCQkJCQkJXAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsJCQkJCVwKIH0KQEAgLTQyMCw3ICs0MjQsMTUgQEAKIAlpZiAoY3B1ZnJlcV9wYXJzZV9nb3Zlcm5vcihzdHJfZ292ZXJub3IsICZuZXdfcG9saWN5LnBvbGljeSwgJm5ld19wb2xpY3kuZ292ZXJub3IpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGNwdWZyZXFfc2V0X3BvbGljeSgmbmV3X3BvbGljeSk7CisJLyogRG8gbm90IHVzZSBjcHVmcmVxX3NldF9wb2xpY3kgaGVyZSBvciB0aGUgdXNlcl9wb2xpY3kubWF4CisJICAgd2lsbCBiZSB3cm9uZ2x5IG92ZXJyaWRkZW4gKi8KKwltdXRleF9sb2NrKCZwb2xpY3ktPmxvY2spOworCXJldCA9IF9fY3B1ZnJlcV9zZXRfcG9saWN5KHBvbGljeSwgJm5ld19wb2xpY3kpOworCisJcG9saWN5LT51c2VyX3BvbGljeS5wb2xpY3kgPSBwb2xpY3ktPnBvbGljeTsKKwlwb2xpY3ktPnVzZXJfcG9saWN5LmdvdmVybm9yID0gcG9saWN5LT5nb3Zlcm5vcjsKKwltdXRleF91bmxvY2soJnBvbGljeS0+bG9jayk7CisKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9CiAKQEAgLTY4NSw3ICs2OTcsNyBAQAogCQlpZiAoIWNwdV9vbmxpbmUoaikpCiAJCQljb250aW51ZTsKIAotCQlkcHJpbnRrKCJDUFUgYWxyZWFkeSBtYW5hZ2VkLCBhZGRpbmcgbGlua1xuIik7CisJCWRwcmludGsoIkNQVSAldSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iLCBqKTsKIAkJY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CiAJCWNwdV9zeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoaik7CiAJCXN5c2ZzX2NyZWF0ZV9saW5rKCZjcHVfc3lzX2Rldi0+a29iaiwgJnBvbGljeS0+a29iaiwKQEAgLTY5NSw5ICs3MDcsOCBAQAogCXBvbGljeS0+Z292ZXJub3IgPSBOVUxMOyAvKiB0byBhc3N1cmUgdGhhdCB0aGUgc3RhcnRpbmcgc2VxdWVuY2UgaXMKIAkJCQkgICogcnVuIGluIGNwdWZyZXFfc2V0X3BvbGljeSAqLwogCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKLQkKKwogCS8qIHNldCBkZWZhdWx0IHBvbGljeSAqLwotCQogCXJldCA9IGNwdWZyZXFfc2V0X3BvbGljeSgmbmV3X3BvbGljeSk7CiAJaWYgKHJldCkgewogCQlkcHJpbnRrKCJzZXR0aW5nIHBvbGljeSBmYWlsZWRcbiIpOwpAQCAtNzA3LDcgKzcxOCw3IEBACiAJbW9kdWxlX3B1dChjcHVmcmVxX2RyaXZlci0+b3duZXIpOwogCWRwcmludGsoImluaXRpYWxpemF0aW9uIGNvbXBsZXRlXG4iKTsKIAljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKLQkKKwogCXJldHVybiAwOwogCiAKQEAgLTE0ODYsNyArMTQ5Nyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNwdWZyZXFfdXBkYXRlX3BvbGljeSk7CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IGNwdWZyZXFfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBjcHVmcmVxX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IDAzN2Y2YmYuLmUwN2EzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC0xNzYsOCArMTc2LDcgQEAKIAlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0IDwgMCB8fAotCQkJaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpIHsKKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xOTYsOCArMTk1LDcgQEAKIAlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0IDwgMCB8fAotCQkJaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CisJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0ID49IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCmluZGV4IDk1NmQxMjEuLjNlNmZmY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwpAQCAtNzQsNiArNzQsOCBAQAogc3RhdGljIERFRklORV9NVVRFWCAoZGJzX211dGV4KTsKIHN0YXRpYyBERUNMQVJFX1dPUksJKGRic193b3JrLCBkb19kYnNfdGltZXIsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRic193b3JrcTsKKwogc3RydWN0IGRic190dW5lcnMgewogCXVuc2lnbmVkIGludCBzYW1wbGluZ19yYXRlOwogCXVuc2lnbmVkIGludCBzYW1wbGluZ19kb3duX2ZhY3RvcjsKQEAgLTM2NCwyMyArMzY2LDI5IEBACiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCiAJCWRic19jaGVja19jcHUoaSk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkYnNfd29yaywKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhkYnNfd29ya3EsICZkYnNfd29yaywKKwkJCSAgIHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9pbml0KHZvaWQpCiB7CiAJSU5JVF9XT1JLKCZkYnNfd29yaywgZG9fZGJzX3RpbWVyLCBOVUxMKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLAotCQkJdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKSk7CisJaWYgKCFkYnNfd29ya3EpCisJCWRic193b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJvbmRlbWFuZCIpOworCWlmICghZGJzX3dvcmtxKSB7CisJCXByaW50ayhLRVJOX0VSUiAib25kZW1hbmQ6IENhbm5vdCBpbml0aWFsaXplIGtlcm5lbCB0aHJlYWRcbiIpOworCQlyZXR1cm47CisJfQorCXF1ZXVlX2RlbGF5ZWRfd29yayhkYnNfd29ya3EsICZkYnNfd29yaywKKwkJCSAgIHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwogCXJldHVybjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHZvaWQpCiB7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGJzX3dvcmspOwotCXJldHVybjsKKwlpZiAoZGJzX3dvcmtxKQorCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoZGJzX3dvcmtxLCAmZGJzX3dvcmspOwogfQogCiBzdGF0aWMgaW50IGNwdWZyZXFfZ292ZXJub3JfZGJzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LApAQCAtNDg5LDggKzQ5NywxMiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9nb3ZfZGJzX2V4aXQodm9pZCkKIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2NoZWR1bGVkIHdvcmsgaXMgaW5kZWVkIG5vdCBydW5uaW5nICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2NoZWR1bGVkIHdvcmsgaXMgaW5kZWVkIG5vdCBydW5uaW5nLgorCSAgIEFzc3VtZXMgdGhlIHRpbWVyIGhhcyBiZWVuIGNhbmNlbGxlZCBmaXJzdC4gKi8KKwlpZiAoZGJzX3dvcmtxKSB7CisJCWZsdXNoX3dvcmtxdWV1ZShkYnNfd29ya3EpOworCQlkZXN0cm95X3dvcmtxdWV1ZShkYnNfd29ya3EpOworCX0KIAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfZGJzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jCmluZGV4IDY2NTcyYzUuLmZjZTMxOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYwpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJlZGFjX21jLmgiCiAKK3N0YXRpYyBpbnQgZm9yY2VfZnVuY3Rpb25fdW5oaWRlOworCiAjZGVmaW5lIGU3NTJ4X3ByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAllZGFjX3ByaW50ayhsZXZlbCwgImU3NTJ4IiwgZm10LCAjI2FyZykKIApAQCAtNzgyLDggKzc4NCwxNiBAQAogCWRlYnVnZjAoIiVzKCk6IG1jaVxuIiwgX19mdW5jX18pOwogCWRlYnVnZjAoIlN0YXJ0aW5nIFByb2JlMVxuIik7CiAKLQkvKiBlbmFibGUgZGV2aWNlIDAgZnVuY3Rpb24gMSAqLworCS8qIGNoZWNrIHRvIHNlZSBpZiBkZXZpY2UgMCBmdW5jdGlvbiAxIGlzIGVuYWJsZWQ7IGlmIGl0IGlzbid0LCB3ZQorCSAqIGFzc3VtZSB0aGUgQklPUyBoYXMgcmVzZXJ2ZWQgaXQgZm9yIGEgcmVhc29uIGFuZCBpcyBleHBlY3RpbmcKKwkgKiBleGNsdXNpdmUgYWNjZXNzLCB3ZSB0YWtlIGNhcmUgbm90IHRvIHZpb2xhdGUgdGhhdCBhc3N1bXB0aW9uIGFuZAorCSAqIGZhaWwgdGhlIHByb2JlLiAqLwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEU3NTJYX0RFVlBSRVMxLCAmc3RhdDgpOworCWlmICghZm9yY2VfZnVuY3Rpb25fdW5oaWRlICYmICEoc3RhdDggJiAoMSA8PCA1KSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ29udGFjdCB5b3VyIEJJT1MgdmVuZG9yIHRvIHNlZSBpZiB0aGUgIgorCQkJIkU3NTJ4IGVycm9yIHJlZ2lzdGVycyBjYW4gYmUgc2FmZWx5IHVuLWhpZGRlblxuIik7CisJCWdvdG8gZmFpbDsKKwl9CiAJc3RhdDggfD0gKDEgPDwgNSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEU3NTJYX0RFVlBSRVMxLCBzdGF0OCk7CiAKQEAgLTEwNjMsMyArMTA3Myw4IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJMaW51eCBOZXR3b3J4IChodHRwOi8vbG54aS5jb20pIFRvbSBaaW1tZXJtYW5cbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNQyBzdXBwb3J0IGZvciBJbnRlbCBlNzUyeCBtZW1vcnkgY29udHJvbGxlcnMiKTsKKworbW9kdWxlX3BhcmFtKGZvcmNlX2Z1bmN0aW9uX3VuaGlkZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfZnVuY3Rpb25fdW5oaWRlLCAiaWYgQklPUyBzZXRzIERldjA6RnVuMSB1cCBhcyBoaWRkZW46IgorIiAxPWZvcmNlIHVuaGlkZSBhbmQgaG9wZSBCSU9TIGRvZXNuJ3QgZmlnaHQgZHJpdmVyIGZvciBEZXYwOkZ1bjEgYWNjZXNzIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDg1NDI5OTcuLjk4ZTM5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQpAQCAtMSw3ICsxLDggQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCi1vYmotJChDT05GSUdfRUREKSAgICAgICAgICAgICAJKz0gZWRkLm8KK29iai0kKENPTkZJR19ETUkpCQkrPSBkbWlfc2Nhbi5vCitvYmotJChDT05GSUdfRUREKQkJKz0gZWRkLm8KIG9iai0kKENPTkZJR19FRklfVkFSUykJCSs9IGVmaXZhcnMubwogb2JqLSQoQ09ORklHX0VGSV9QQ0RQKQkJKz0gcGNkcC5vCiBvYmotJChDT05GSUdfREVMTF9SQlUpICAgICAgICAgICs9IGRlbGxfcmJ1Lm8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2kzODYva2VybmVsL2RtaV9zY2FuLmMKcmVuYW1lIHRvIGRyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCA1ZWZjZWViLi45NDhiZDdlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2RtaV9zY2FuLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCkBAIC0yNyw3ICsyNyw3IEBACiAJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJkbWlfc3RyaW5nOiBvdXQgb2YgbWVtb3J5LlxuIik7CiAJCX0KLSAJfQorCX0KIAogCXJldHVybiBzdHI7CiB9CkBAIC00MSw3ICs0MSw3IEBACiB7CiAJdTggKmJ1ZiwgKmRhdGE7CiAJaW50IGkgPSAwOwotCQkKKwogCWJ1ZiA9IGRtaV9pb3JlbWFwKGJhc2UsIGxlbik7CiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC00OSw5ICs0OSw5IEBACiAJZGF0YSA9IGJ1ZjsKIAogCS8qCi0gCSAqCVN0b3Agd2hlbiB3ZSBzZWUgYWxsIHRoZSBpdGVtcyB0aGUgdGFibGUgY2xhaW1lZCB0byBoYXZlCi0gCSAqCU9SIHdlIHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgdGFibGUgKGFsc28gaGFwcGVucykKLSAJICovCisJICoJU3RvcCB3aGVuIHdlIHNlZSBhbGwgdGhlIGl0ZW1zIHRoZSB0YWJsZSBjbGFpbWVkIHRvIGhhdmUKKwkgKglPUiB3ZSBydW4gb2ZmIHRoZSBlbmQgb2YgdGhlIHRhYmxlIChhbHNvIGhhcHBlbnMpCisJICovCiAJd2hpbGUgKChpIDwgbnVtKSAmJiAoZGF0YSAtIGJ1ZiArIHNpemVvZihzdHJ1Y3QgZG1pX2hlYWRlcikpIDw9IGxlbikgewogCQlzdHJ1Y3QgZG1pX2hlYWRlciAqZG0gPSAoc3RydWN0IGRtaV9oZWFkZXIgKilkYXRhOwogCQkvKgpAQCAtNzUsNyArNzUsNyBAQAogewogCXU4IHN1bSA9IDA7CiAJaW50IGE7Ci0JCisKIAlmb3IgKGEgPSAwOyBhIDwgMTU7IGErKykKIAkJc3VtICs9IGJ1ZlthXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9oZGFwcy5jIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCmluZGV4IDc2MzZjMWEuLjE2NTlmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYworKysgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgSERBUFNfTE9XX1BPUlQJCTB4MTYwMAkvKiBmaXJzdCBwb3J0IHVzZWQgYnkgaGRhcHMgKi8KQEAgLTcxLDEwICs3MCwxMCBAQAogc3RhdGljIGludCByZXN0X3g7CiBzdGF0aWMgaW50IHJlc3RfeTsKIAotc3RhdGljIERFRklORV9NVVRFWChoZGFwc19tdXRleCk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChoZGFwc19zZW0pOwogCiAvKgotICogX19nZXRfbGF0Y2ggLSBHZXQgdGhlIHZhbHVlIGZyb20gYSBnaXZlbiBwb3J0LiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXV0ZXguCisgKiBfX2dldF9sYXRjaCAtIEdldCB0aGUgdmFsdWUgZnJvbSBhIGdpdmVuIHBvcnQuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggX19nZXRfbGF0Y2godTE2IHBvcnQpCiB7CkBAIC04Myw3ICs4Miw3IEBACiAKIC8qCiAgKiBfX2NoZWNrX2xhdGNoIC0gQ2hlY2sgYSBwb3J0IGxhdGNoIGZvciBhIGdpdmVuIHZhbHVlLiAgUmV0dXJucyB6ZXJvIGlmIHRoZQotICogcG9ydCBjb250YWlucyB0aGUgZ2l2ZW4gdmFsdWUuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KKyAqIHBvcnQgY29udGFpbnMgdGhlIGdpdmVuIHZhbHVlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCiBzdGF0aWMgaW5saW5lIGludCBfX2NoZWNrX2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCiB7CkBAIC05NCw3ICs5Myw3IEBACiAKIC8qCiAgKiBfX3dhaXRfbGF0Y2ggLSBXYWl0IHVwIHRvIDEwMHVzIGZvciBhIHBvcnQgbGF0Y2ggdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZSwKLSAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgorICogcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlIGlzIG9idGFpbmVkLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgogICovCiBzdGF0aWMgaW50IF9fd2FpdF9sYXRjaCh1MTYgcG9ydCwgdTggdmFsKQogewpAQCAtMTExLDcgKzExMCw3IEBACiAKIC8qCiAgKiBfX2RldmljZV9yZWZyZXNoIC0gcmVxdWVzdCBhIHJlZnJlc2ggZnJvbSB0aGUgYWNjZWxlcm9tZXRlci4gIERvZXMgbm90IHdhaXQKLSAqIGZvciByZWZyZXNoIHRvIGNvbXBsZXRlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXV0ZXguCisgKiBmb3IgcmVmcmVzaCB0byBjb21wbGV0ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwogc3RhdGljIHZvaWQgX19kZXZpY2VfcmVmcmVzaCh2b2lkKQogewpAQCAtMTI1LDcgKzEyNCw3IEBACiAvKgogICogX19kZXZpY2VfcmVmcmVzaF9zeW5jIC0gcmVxdWVzdCBhIHN5bmNocm9ub3VzIHJlZnJlc2ggZnJvbSB0aGUKICAqIGFjY2VsZXJvbWV0ZXIuICBXZSB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBjb21wbGV0ZS4gIFJldHVybnMgemVybyBpZgotICogc3VjY2Vzc2Z1bCBhbmQgbm9uemVybyBvbiBlcnJvci4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgorICogc3VjY2Vzc2Z1bCBhbmQgbm9uemVybyBvbiBlcnJvci4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwogc3RhdGljIGludCBfX2RldmljZV9yZWZyZXNoX3N5bmModm9pZCkKIHsKQEAgLTEzNSw3ICsxMzQsNyBAQAogCiAvKgogICogX19kZXZpY2VfY29tcGxldGUgLSBpbmRpY2F0ZSB0byB0aGUgYWNjZWxlcm9tZXRlciB0aGF0IHdlIGFyZSBkb25lIHJlYWRpbmcKLSAqIGRhdGEsIGFuZCB0aGVuIGluaXRpYXRlIGFuIGFzeW5jIHJlZnJlc2guICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KKyAqIGRhdGEsIGFuZCB0aGVuIGluaXRpYXRlIGFuIGFzeW5jIHJlZnJlc2guICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RldmljZV9jb21wbGV0ZSh2b2lkKQogewpAQCAtMTUzLDcgKzE1Miw3IEBACiB7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmhkYXBzX211dGV4KTsKKwlkb3duKCZoZGFwc19zZW0pOwogCiAJLyogZG8gYSBzeW5jIHJlZnJlc2ggLS0gd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2UgcmVhZCBmcmVzaCBkYXRhICovCiAJcmV0ID0gX19kZXZpY2VfcmVmcmVzaF9zeW5jKCk7CkBAIC0xNjQsNyArMTYzLDcgQEAKIAlfX2RldmljZV9jb21wbGV0ZSgpOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CisJdXAoJmhkYXBzX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk5LDkgKzE5OCw5IEBACiB7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmhkYXBzX211dGV4KTsKKwlkb3duKCZoZGFwc19zZW0pOwogCXJldCA9IF9faGRhcHNfcmVhZF9wYWlyKHBvcnQxLCBwb3J0MiwgdmFsMSwgdmFsMik7Ci0JbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CisJdXAoJmhkYXBzX3NlbSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjE0LDcgKzIxMyw3IEBACiB7CiAJaW50IHRvdGFsLCByZXQgPSAtRU5YSU87CiAKLQltdXRleF9sb2NrKCZoZGFwc19tdXRleCk7CisJZG93bigmaGRhcHNfc2VtKTsKIAogCW91dGIoMHgxMywgMHgxNjEwKTsKIAlvdXRiKDB4MDEsIDB4MTYxZik7CkBAIC0yODAsNyArMjc5LDcgQEAKIAl9CiAKIG91dDoKLQltdXRleF91bmxvY2soJmhkYXBzX211dGV4KTsKKwl1cCgmaGRhcHNfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTQsNyArMzEzLDcgQEAKIH07CiAKIC8qCi0gKiBoZGFwc19jYWxpYnJhdGUgLSBTZXQgb3VyICJyZXN0aW5nIiB2YWx1ZXMuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KKyAqIGhkYXBzX2NhbGlicmF0ZSAtIFNldCBvdXIgInJlc3RpbmciIHZhbHVlcy4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KICAqLwogc3RhdGljIHZvaWQgaGRhcHNfY2FsaWJyYXRlKHZvaWQpCiB7CkBAIC0zMjYsNyArMzI1LDcgQEAKIAlpbnQgeCwgeTsKIAogCS8qIENhbm5vdCBzbGVlcC4gIFRyeSBub25ibG9ja2luZ2x5LiAgSWYgd2UgZmFpbCwgdHJ5IGFnYWluIGxhdGVyLiAqLwotCWlmICghbXV0ZXhfdHJ5bG9jaygmaGRhcHNfbXV0ZXgpKSB7CisJaWYgKGRvd25fdHJ5bG9jaygmaGRhcHNfc2VtKSkgewogCQltb2RfdGltZXIoJmhkYXBzX3RpbWVyLGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CiAJCXJldHVybjsKIAl9CkBAIC0zNDEsNyArMzQwLDcgQEAKIAltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CisJdXAoJmhkYXBzX3NlbSk7CiB9CiAKIApAQCAtNDIxLDkgKzQyMCw5IEBACiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCW11dGV4X2xvY2soJmhkYXBzX211dGV4KTsKKwlkb3duKCZoZGFwc19zZW0pOwogCWhkYXBzX2NhbGlicmF0ZSgpOwotCW11dGV4X3VubG9jaygmaGRhcHNfbXV0ZXgpOworCXVwKCZoZGFwc19zZW0pOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNTEwLDEyICs1MDksMjIgQEAKIAl9CQkJCQkJXAogfQogCisjZGVmaW5lIEhEQVBTX0RNSV9NQVRDSF9MRU5PVk8obW9kZWwpICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmlkZW50ID0gIkxlbm92byAiIG1vZGVsLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2hfaW52ZXJ0LCAgICAgICAgICAgICBcCisgICAgICAgIC5tYXRjaGVzID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkxFTk9WTyIpLCAgXAorICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCBtb2RlbCkgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwogc3RhdGljIGludCBfX2luaXQgaGRhcHNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKIAkvKiBOb3RlIHRoYXQgRE1JX01BVENIKC4uLiwiVGhpbmtQYWQgVDQyIikgd2lsbCBtYXRjaCAiVGhpbmtQYWQgVDQycCIgKi8KIAlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBoZGFwc193aGl0ZWxpc3RbXSA9IHsKKwkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgSCIpLAogCQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJUaGlua1BhZCBSNTBwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFI1MCIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBSNTEiKSwKQEAgLTUyNSwxNSArNTM0LDE3IEBACiAJCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIlRoaW5rUGFkIFQ0MnAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFQ0MyIpLAorCQlIREFQU19ETUlfTUFUQ0hfTEVOT1ZPKCJUaGlua1BhZCBUNjBwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MCIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBYNDEgVGFibGV0IiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MSIpLAorCQlIREFQU19ETUlfTUFUQ0hfTEVOT1ZPKCJUaGlua1BhZCBYNjAiKSwKIAkJeyAuaWRlbnQgPSBOVUxMIH0KIAl9OwogCiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGhkYXBzX3doaXRlbGlzdCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhcHM6IHN1cHBvcnRlZCBsYXB0b3Agbm90IGZvdW5kIVxuIik7Ci0JCXJldCA9IC1FTlhJTzsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCmluZGV4IDY4NjVjNjQuLjk1ODYwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCSAgIGJhbmsuICovCiAJaWYgKGtpbmQgPCAwKSB7CiAJCWlmICh3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19DT05GSUcpICYgMHg4MCkgewotCQkJZGV2X3dhcm4oZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDNcbiIpOworCQkJZGV2X2RiZyhkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgMVxuIik7CiAJCQlnb3RvIEVSUk9SMTsKIAkJfQogCQl2YWwxID0gdzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkyRF9SRUdfQkFOSyk7CkBAIC0xMTcwLDYgKzExNzAsNyBAQAogCQlpZiAoISh2YWwxICYgMHgwNykpIHsgIC8qIGlzIEJhbmswICovCiAJCQlpZiAoKCghKHZhbDEgJiAweDgwKSkgJiYgKHZhbDIgIT0gMHhhMykpIHx8CiAJCQkgICAgICgodmFsMSAmIDB4ODApICYmICh2YWwyICE9IDB4NWMpKSkgeworCQkJCWRldl9kYmcoZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDJcbiIpOwogCQkJCWdvdG8gRVJST1IxOwogCQkJfQogCQl9CkBAIC0xMTc3LDcgKzExNzgsNyBAQAogCQkgICBzaG91bGQgbWF0Y2ggKi8KIAkJaWYgKHc4Mzc5MmRfcmVhZF92YWx1ZShjbGllbnQsCiAJCQkJCVc4Mzc5MkRfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7Ci0JCQlkZXZfd2FybihkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgNVxuIik7CisJCQlkZXZfZGJnKGRldiwgIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAzXG4iKTsKIAkJCWdvdG8gRVJST1IxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCAwODljNmY1Li5kNmQ0NDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtMjg2LDcgKzI4NiwxMCBAQAogCSAgVGhpcyBkcml2ZXIgaXMgYSByZXBsYWNlbWVudCBmb3IgKGFuZCB3YXMgaW5zcGlyZWQgYnkpIGFuIG9sZGVyCiAJICBkcml2ZXIgbmFtZWQgaTJjLXBoaWxpcHMtcGFyLiAgVGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgbW9yZSBkZXZpY2VzLAogCSAgYW5kIG1ha2VzIGl0IGVhc2llciB0byBhZGQgc3VwcG9ydCBmb3IgbmV3IGRldmljZXMuCi0JICAKKworCSAgQW4gYWRhcHRlciB0eXBlIHBhcmFtZXRlciBpcyBub3cgbWFuZGF0b3J5LiAgUGxlYXNlIHJlYWQgdGhlIGZpbGUKKwkgIERvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydCBmb3IgZGV0YWlscy4KKwogCSAgQW5vdGhlciBkcml2ZXIgZXhpc3RzLCBuYW1lZCBpMmMtcGFycG9ydC1saWdodCwgd2hpY2ggZG9lc24ndCBkZXBlbmQKIAkgIG9uIHRoZSBwYXJwb3J0IGRyaXZlci4gIFRoaXMgaXMgbWVhbnQgZm9yIGVtYmVkZGVkIHN5c3RlbXMuIERvbid0IHNheQogCSAgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gc2F5IFkgb3IgTSB0aGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggOGUwZjMxNS4uZGZjYTc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTQ3OCw2ICs0NzgsMTEgQEAKIAkJcmV0ID0gaTgwMV90cmFuc2FjdGlvbigpOwogCX0KIAorCS8qIFNvbWUgQklPU2VzIGRvbid0IGxpa2UgaXQgd2hlbiBQRUMgaXMgZW5hYmxlZCBhdCByZWJvb3Qgb3IgcmVzdW1lCisJICAgdGltZSwgc28gd2UgZm9yY2libHkgZGlzYWJsZSBpdCBhZnRlciBldmVyeSB0cmFuc2FjdGlvbi4gKi8KKwlpZiAoaHdwZWMpCisJCW91dGJfcCgwLCBTTUJBVVhDVEwpOworCiAJaWYoYmxvY2spCiAJCXJldHVybiByZXQ7CiAJaWYocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwppbmRleCBjNjMwMjVhLi5lMDllYmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwpAQCAtMTIxLDkgKzEyMSwxNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpMmNfcGFycG9ydF9pbml0KHZvaWQpCiB7Ci0JaWYgKHR5cGUgPCAwIHx8IHR5cGUgPj0gQVJSQVlfU0laRShhZGFwdGVyX3Bhcm0pKSB7CisJaWYgKHR5cGUgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImkyYy1wYXJwb3J0OiBhZGFwdGVyIHR5cGUgdW5zcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAodHlwZSA+PSBBUlJBWV9TSVpFKGFkYXB0ZXJfcGFybSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLXBhcnBvcnQ6IGludmFsaWQgdHlwZSAoJWQpXG4iLCB0eXBlKTsKLQkJdHlwZSA9IDA7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChiYXNlID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggN2UyZThjZC4uOTM0YmQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTI0MSw5ICsyNDEsMTQgQEAKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3BhcnBvcnRfaW5pdCh2b2lkKQogewotCWlmICh0eXBlIDwgMCB8fCB0eXBlID49IEFSUkFZX1NJWkUoYWRhcHRlcl9wYXJtKSkgeworCWlmICh0eXBlIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpMmMtcGFycG9ydDogYWRhcHRlciB0eXBlIHVuc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShhZGFwdGVyX3Bhcm0pKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImkyYy1wYXJwb3J0OiBpbnZhbGlkIHR5cGUgKCVkKVxuIiwgdHlwZSk7Ci0JCXR5cGUgPSAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXR1cm4gcGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmkyY19wYXJwb3J0X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuaCBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCmluZGV4IGQ3MDJlNWUuLjlkZGQ4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCkBAIC05MCw3ICs5MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgdHlwZTsKK3N0YXRpYyBpbnQgdHlwZSA9IC0xOwogbW9kdWxlX3BhcmFtKHR5cGUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR5cGUsCiAJIlR5cGUgb2YgYWRhcHRlcjpcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDMwMjQ5MDcuLjFhNzNjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtNDMsMTMgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLS8qCi0JSElTVE9SWToKLQkyMDAzLTA1LTExCTEuMC4wIAlVcGRhdGVkIGZyb20gbG1fc2Vuc29ycyBwcm9qZWN0IGZvciBrZXJuZWwgMi41Ci0JCQkJKHdhcyBpMmMtc2lzNjQ1LmMgZnJvbSBsbV9zZW5zb3JzIDIuNy4wKQotKi8KLSNkZWZpbmUgU0lTOTZ4X1ZFUlNJT04gIjEuMC4wIgotCiAvKiBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgaW4gUENJIGNvbmZpZyBzcGFjZSAqLwogI2RlZmluZSBTSVM5NnhfQkFSIDB4MDQKIApAQCAtMzM3LDcgKzMzMCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19zaXM5NnhfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gImkyYy1zaXM5NnggdmVyc2lvbiAlc1xuIiwgU0lTOTZ4X1ZFUlNJT04pOwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzaXM5NnhfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKaW5kZXggOGJkMzA1ZS4uNzY2Y2M5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCkBAIC0xMzMsNiArMTMzLDkgQEAKIAogCQlvdXRiKGluYihBQ0JDVEwxKSB8IEFDQkNUTDFfU1RPUCwgQUNCQ1RMMSk7CiAJCW91dGIoQUNCU1RfU1RBU1RSIHwgQUNCU1RfTkVHQUNLLCBBQ0JTVCk7CisKKwkJLyogUmVzZXQgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCQlvdXRiKDAsIEFDQlNUKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI4LDYgKzIzMSwxMCBAQAogCXRpbWVvdXQgPSBqaWZmaWVzICsgUE9MTF9USU1FT1VUOwogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQlzdGF0dXMgPSBpbmIoQUNCU1QpOworCisJCS8qIFJlc2V0IHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8gYXZvaWQgdGhlIGhhbmcgKi8KKwkJb3V0YigwLCBBQ0JTVCk7CisKIAkJaWYgKChzdGF0dXMgJiAoQUNCU1RfU0RBU1R8QUNCU1RfQkVSfEFDQlNUX05FR0FDSykpICE9IDApIHsKIAkJCXNjeDIwMF9hY2JfbWFjaGluZShpZmFjZSwgc3RhdHVzKTsKIAkJCXJldHVybjsKQEAgLTQxNSw3ICs0MjIsNiBAQAogCXN0cnVjdCBzY3gyMDBfYWNiX2lmYWNlICppZmFjZTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJaW50IHJjOwotCWNoYXIgZGVzY3JpcHRpb25bNjRdOwogCiAJaWZhY2UgPSBremFsbG9jKHNpemVvZigqaWZhY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlmYWNlKSB7CkBAIC00MzQsMTAgKzQ0MCw3IEBACiAKIAltdXRleF9pbml0KCZpZmFjZS0+bXV0ZXgpOwogCi0Jc25wcmludGYoZGVzY3JpcHRpb24sIHNpemVvZihkZXNjcmlwdGlvbiksICIlcyBBQ0NFU1MuYnVzIFslc10iLAotCQkgdGV4dCwgYWRhcHRlci0+bmFtZSk7Ci0KLQlpZiAocmVxdWVzdF9yZWdpb24oYmFzZSwgOCwgZGVzY3JpcHRpb24pID09IDApIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGJhc2UsIDgsIGFkYXB0ZXItPm5hbWUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBOQU1FICI6IGNhbid0IGFsbG9jYXRlIGlvIDB4JXgtMHgleFxuIiwKIAkJCWJhc2UsIGJhc2UgKyA4LTEpOwogCQlyYyA9IC1FQlVTWTsKQEAgLTQ4OCw3ICs0OTEsNyBAQAogCiAjZGVmaW5lIE1TUl9MQkFSX1NNQgkJMHg1MTQwMDAwQgogCi1zdGF0aWMgaW50IHNjeDIwMF9hZGRfY3M1NTN4KHZvaWQpCitzdGF0aWMgX19pbml0IGludCBzY3gyMDBfYWRkX2NzNTUzeCh2b2lkKQogewogCXUzMglsb3csIGhpOwogCXUzMglzbWJfYmFzZTsKQEAgLTUyNCw2ICs1MjcsOSBAQAogCX0gZWxzZSBpZiAocGNpX2Rldl9wcmVzZW50KGRpdmlsX3BjaSkpCiAJCXJjID0gc2N4MjAwX2FkZF9jczU1M3goKTsKIAorCS8qIElmIGF0IGxlYXN0IG9uZSBidXMgd2FzIGNyZWF0ZWQsIGluaXQgbXVzdCBzdWNjZWVkICovCisJaWYgKHNjeDIwMF9hY2JfbGlzdCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9kczEzNzQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCmluZGV4IDAzZDA5ZWQuLjQ2MzBmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2RlZmluZSBEUzEzNzRfUkVHX1RPRDAJCTB4MDAKICNkZWZpbmUgRFMxMzc0X1JFR19UT0QxCQkweDAxCkBAIC0xMzksNyArMTQwLDcgQEAKIAlyZXR1cm4gdDE7CiB9CiAKLXN0YXRpYyB2b2lkIGRzMTM3NF9zZXRfdGxldCh1bG9uZyBhcmcpCitzdGF0aWMgdm9pZCBkczEzNzRfc2V0X3dvcmsodm9pZCAqYXJnKQogewogCXVsb25nIHQxLCB0MjsKIAlpbnQgbGltaXQgPSAxMDsJCS8qIGFyYml0cmFyeSByZXRyeSBsaW1pdCAqLwpAQCAtMTY4LDE3ICsxNjksMTggQEAKIAogc3RhdGljIHVsb25nIG5ld190aW1lOwogCi1zdGF0aWMgREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKGRzMTM3NF90YXNrbGV0LCBkczEzNzRfc2V0X3RsZXQsCi0JCQkJKHVsb25nKSAmIG5ld190aW1lKTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHMxMzc0X3dvcmtxdWV1ZTsKKworc3RhdGljIERFQ0xBUkVfV09SSyhkczEzNzRfd29yaywgZHMxMzc0X3NldF93b3JrLCAmbmV3X3RpbWUpOwogCiBpbnQgZHMxMzc0X3NldF9ydGNfdGltZSh1bG9uZyBub3d0aW1lKQogewogCW5ld190aW1lID0gbm93dGltZTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmZHMxMzc0X3Rhc2tsZXQpOworCQlxdWV1ZV93b3JrKGRzMTM3NF93b3JrcXVldWUsICZkczEzNzRfd29yayk7CiAJZWxzZQotCQlkczEzNzRfc2V0X3RsZXQoKHVsb25nKSAmIG5ld190aW1lKTsKKwkJZHMxMzc0X3NldF93b3JrKCZuZXdfdGltZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNCw2ICsyMDYsOCBAQAogCWNsaWVudC0+YWRhcHRlciA9IGFkYXA7CiAJY2xpZW50LT5kcml2ZXIgPSAmZHMxMzc0X2RyaXZlcjsKIAorCWRzMTM3NF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZHMxMzc0Iik7CisKIAlpZiAoKHJjID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkgIT0gMCkgewogCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gcmM7CkBAIC0yMjcsNyArMjMxLDcgQEAKIAogCWlmICgocmMgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSA9PSAwKSB7CiAJCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQkJdGFza2xldF9raWxsKCZkczEzNzRfdGFza2xldCk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGRzMTM3NF93b3JrcXVldWUpOwogCX0KIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9tNDF0MDAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCmluZGV4IGI1YWFiZTcuLjk5YWI0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgpAQCAtMTExLDcgKzExMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1tNDF0MDBfc2V0X3RsZXQodWxvbmcgYXJnKQorbTQxdDAwX3NldCh2b2lkICphcmcpCiB7CiAJc3RydWN0IHJ0Y190aW1lCXRtOwogCXVsb25nCW5vd3RpbWUgPSAqKHVsb25nICopYXJnOwpAQCAtMTMwLDEzICsxMzEsMTMgQEAKIAlpZiAoKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDAsIHRtLnRtX3NlYyAmIDB4N2YpIDwgMCkKIAkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDEsIHRtLnRtX21pbiAmIDB4N2YpCiAJCQk8IDApCi0JCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCAyLCB0bS50bV9ob3VyICYgMHg3ZikKKwkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDIsIHRtLnRtX2hvdXIgJiAweDNmKQogCQkJPCAwKQotCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgNCwgdG0udG1fbWRheSAmIDB4N2YpCisJCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA0LCB0bS50bV9tZGF5ICYgMHgzZikKIAkJCTwgMCkKLQkJfHwgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDUsIHRtLnRtX21vbiAmIDB4N2YpCisJCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA1LCB0bS50bV9tb24gJiAweDFmKQogCQkJPCAwKQotCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgNiwgdG0udG1feWVhciAmIDB4N2YpCisJCXx8IChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCA2LCB0bS50bV95ZWFyICYgMHhmZikKIAkJCTwgMCkpCiAKIAkJZGV2X3dhcm4oJnNhdmVfY2xpZW50LT5kZXYsIm00MXQwMDogY2FuJ3Qgd3JpdGUgdG8gcnRjIGNoaXBcbiIpOwpAQCAtMTQ1LDkgKzE0Niw5IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdWxvbmcJbmV3X3RpbWU7Ci0KLURFQ0xBUkVfVEFTS0xFVF9ESVNBQkxFRChtNDF0MDBfdGFza2xldCwgbTQxdDAwX3NldF90bGV0LCAodWxvbmcpJm5ld190aW1lKTsKK3N0YXRpYyB1bG9uZyBuZXdfdGltZTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbTQxdDAwX3dxOworc3RhdGljIERFQ0xBUkVfV09SSyhtNDF0MDBfd29yaywgbTQxdDAwX3NldCwgJm5ld190aW1lKTsKIAogaW50CiBtNDF0MDBfc2V0X3J0Y190aW1lKHVsb25nIG5vd3RpbWUpCkBAIC0xNTUsOSArMTU2LDkgQEAKIAluZXdfdGltZSA9IG5vd3RpbWU7CiAKIAlpZiAoaW5faW50ZXJydXB0KCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJm00MXQwMF90YXNrbGV0KTsKKwkJcXVldWVfd29yayhtNDF0MDBfd3EsICZtNDF0MDBfd29yayk7CiAJZWxzZQotCQltNDF0MDBfc2V0X3RsZXQoKHVsb25nKSZuZXdfdGltZSk7CisJCW00MXQwMF9zZXQoJm5ld190aW1lKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg5LDYgKzE5MCw3IEBACiAJCXJldHVybiByYzsKIAl9CiAKKwltNDF0MDBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibTQxdDAwIik7CiAJc2F2ZV9jbGllbnQgPSBjbGllbnQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDYsNyArMjA4LDcgQEAKIAogCWlmICgocmMgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSA9PSAwKSB7CiAJCWtmcmVlKGNsaWVudCk7Ci0JCXRhc2tsZXRfa2lsbCgmbTQxdDAwX3Rhc2tsZXQpOworCQlkZXN0cm95X3dvcmtxdWV1ZShtNDF0MDBfd3EpOwogCX0KIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggNjIxM2JkMy4uNjAyNzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtODEsMTQgKzgxLDE0IEBACiB9OwogCiB0eXBlZGVmIHN0cnVjdCBpZGVfaW5mb190IHsKLSAgICBkZXZfbGlua190CWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGludAkJbmRldjsKICAgICBkZXZfbm9kZV90CW5vZGU7CiAgICAgaW50CQloZDsKIH0gaWRlX2luZm9fdDsKIAotc3RhdGljIHZvaWQgaWRlX3JlbGVhc2UoZGV2X2xpbmtfdCAqKTsKLXN0YXRpYyB2b2lkIGlkZV9jb25maWcoZGV2X2xpbmtfdCAqKTsKK3N0YXRpYyB2b2lkIGlkZV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIGludCBpZGVfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOwogCiBzdGF0aWMgdm9pZCBpZGVfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTEwMywxMCArMTAzLDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgaWRlX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGlkZV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpZGVfaW5mb190ICppbmZvOwotICAgIGRldl9saW5rX3QgKmxpbms7CiAKICAgICBERUJVRygwLCAiaWRlX2F0dGFjaCgpXG4iKTsKIApAQCAtMTE0LDcgKzExMyw5IEBACiAgICAgaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFpbmZvKQogCXJldHVybiAtRU5PTUVNOwotICAgIGxpbmsgPSAmaW5mby0+bGluazsgbGluay0+cHJpdiA9IGluZm87CisKKyAgICBpbmZvLT5wX2RldiA9IGxpbms7CisgICAgbGluay0+cHJpdiA9IGluZm87CiAKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CkBAIC0xMjIsMTYgKzEyMyw5IEBACiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAgICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIGlkZV9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaWRlX2NvbmZpZyhsaW5rKTsKIH0gLyogaWRlX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE0MywxNCArMTM3LDExIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBpZGVfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGlkZV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KICAgICBERUJVRygwLCAiaWRlX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCWlkZV9yZWxlYXNlKGxpbmspOworICAgIGlkZV9yZWxlYXNlKGxpbmspOwogCiAgICAga2ZyZWUobGluay0+cHJpdik7CiB9IC8qIGlkZV9kZXRhY2ggKi8KQEAgLTE3Nyw5ICsxNjgsOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBpZGVfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGlkZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBpZGVfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIHN0cnVjdCB7CkBAIC0yMDMsMzQgKzE5MywzMCBAQAogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnN0ay0+cGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZzdGstPnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gc3RrLT5wYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBzdGstPnBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0gICAgaWYgKCFwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSAmJgotCSFwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICYmCi0JIXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnN0ay0+cGFyc2UpKQorICAgIGlmICghcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpICYmCisJIXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICYmCisJIXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZzdGstPnBhcnNlKSkKIAlpc19rbWUgPSAoKHN0ay0+cGFyc2UubWFuZmlkLm1hbmYgPT0gTUFORklEX0tNRSkgJiYKIAkJICAoKHN0ay0+cGFyc2UubWFuZmlkLmNhcmQgPT0gUFJPRElEX0tNRV9LWExDMDA1X0EpIHx8CiAJCSAgIChzdGstPnBhcnNlLm1hbmZpZC5jYXJkID09IFBST0RJRF9LTUVfS1hMQzAwNV9CKSkpOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgLyogTm90IHN1cmUgaWYgdGhpcyBpcyByaWdodC4uLiBsb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZzdGstPmNvbmYpKTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IHN0ay0+Y29uZi5WY2M7CisgICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZzdGstPmNvbmYpKTsKIAogICAgIHBhc3MgPSBpb19iYXNlID0gY3RsX2Jhc2UgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIHdoaWxlICgxKSB7Ci0gICAgCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDApIGdvdG8gbmV4dF9lbnRyeTsKLQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmc3RrLT5wYXJzZSkgIT0gMCkgZ290byBuZXh0X2VudHJ5OworICAgIAlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCkgZ290byBuZXh0X2VudHJ5OworCWlmIChwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmc3RrLT5wYXJzZSkgIT0gMCkgZ290byBuZXh0X2VudHJ5OwogCiAJLyogQ2hlY2sgZm9yIG1hdGNoaW5nIFZjYywgdW5sZXNzIHdlJ3JlIGRlc3BlcmF0ZSAqLwogCWlmICghcGFzcykgewpAQCAtMjQ0LDEwICsyMzAsMTAgQEAKIAl9CiAKIAlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJICAgIGxpbmstPmNvbmYuVnBwID0KIAkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCWVsc2UgaWYgKHN0ay0+ZGZsdC52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJICAgIGxpbmstPmNvbmYuVnBwID0KIAkJc3RrLT5kZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChzdGstPmRmbHQuaW8ubndpbiA+IDApKSB7CkBAIC0yNjEsMTQgKzI0NywxNCBAQAogCQlsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwogCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CiAJCWxpbmstPmlvLk51bVBvcnRzMiA9IChpc19rbWUpID8gMiA6IDE7Ci0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIAkJY3RsX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDI7CiAJICAgIH0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKIAkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CiAJCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIAkJY3RsX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDBlOwpAQCAtMjgxLDE2ICsyNjcsMTYgQEAKIAlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCiAJICAgIG1lbWNweSgmc3RrLT5kZmx0LCBjZmcsIHNpemVvZihzdGstPmRmbHQpKTsKIAlpZiAocGFzcykgewotCSAgICBDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCX0gZWxzZSBpZiAocGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSAhPSAwKSB7Ci0JICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwkgICAgQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisJfSBlbHNlIGlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSAhPSAwKSB7CisJICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJICAgIG1lbXNldCgmc3RrLT5kZmx0LCAwLCBzaXplb2Yoc3RrLT5kZmx0KSk7CiAJICAgIHBhc3MrKzsKIAl9CiAgICAgfQogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKICAgICAvKiBkaXNhYmxlIGRyaXZlIGludGVycnVwdHMgZHVyaW5nIElERSBwcm9iZSAqLwogICAgIG91dGIoMHgwMiwgY3RsX2Jhc2UpOwpAQCAtMzAxLDEyICsyODcsMTIgQEAKIAogICAgIC8qIHJldHJ5IHJlZ2lzdHJhdGlvbiBpbiBjYXNlIGRldmljZSBpcyBzdGlsbCBzcGlubmluZyB1cCAqLwogICAgIGZvciAoaGQgPSAtMSwgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JaGQgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlLCBjdGxfYmFzZSwgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBoYW5kbGUpOworCWhkID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSwgY3RsX2Jhc2UsIGxpbmstPmlycS5Bc3NpZ25lZElSUSwgbGluayk7CiAJaWYgKGhkID49IDApIGJyZWFrOwogCWlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMHgyMCkgewogCSAgICBvdXRiKDB4MDIsIGN0bF9iYXNlICsgMHgxMCk7CiAJICAgIGhkID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSArIDB4MTAsIGN0bF9iYXNlICsgMHgxMCwKLQkJCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGhhbmRsZSk7CisJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rKTsKIAkgICAgaWYgKGhkID49IDApIHsKIAkJaW9fYmFzZSArPSAweDEwOwogCQljdGxfYmFzZSArPSAweDEwOwpAQCAtMzI4LDI1ICszMTQsMjMgQEAKICAgICBpbmZvLT5ub2RlLm1ham9yID0gaWRlX21ham9yW2hkXTsKICAgICBpbmZvLT5ub2RlLm1pbm9yID0gMDsKICAgICBpbmZvLT5oZCA9IGhkOwotICAgIGxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotICAgIHByaW50ayhLRVJOX0lORk8gImlkZS1jczogJXM6IFZjYyA9ICVkLiVkLCBWcHAgPSAlZC4lZFxuIiwKLQkgICBpbmZvLT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLlZjYyAvIDEwLCBsaW5rLT5jb25mLlZjYyAlIDEwLAotCSAgIGxpbmstPmNvbmYuVnBwMSAvIDEwLCBsaW5rLT5jb25mLlZwcDEgJSAxMCk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKKyAgICBwcmludGsoS0VSTl9JTkZPICJpZGUtY3M6ICVzOiBWcHAgPSAlZC4lZFxuIiwKKwkgICBpbmZvLT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLlZwcCAvIDEwLCBsaW5rLT5jb25mLlZwcCAlIDEwKTsKIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAgICAga2ZyZWUoc3RrKTsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGVycl9tZW06CiAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJpZGUtY3M6IGlkZV9jb25maWcgZmFpbGVkIG1lbW9yeSBhbGxvY2F0aW9uXG4iKTsKICAgICBnb3RvIGZhaWxlZDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBrZnJlZShzdGspOwogICAgIGlkZV9yZWxlYXNlKGxpbmspOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGlkZV9jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNTcsNyArMzQxLDcgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi12b2lkIGlkZV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCit2b2lkIGlkZV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGlkZV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIApAQCAtMzY5LDM3ICszNTMsMTAgQEAKIAlpZGVfdW5yZWdpc3RlcihpbmZvLT5oZCk7CiAgICAgfQogICAgIGluZm8tPm5kZXYgPSAwOwotICAgIGxpbmstPmRldiA9IE5VTEw7Ci0gICAgCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKIAorICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogaWRlX3JlbGVhc2UgKi8KIAotc3RhdGljIGludCBpZGVfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKERFVl9PSyhsaW5rKSkKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCXJldHVybiAwOwotfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDM1LDYgKzM5Miw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkZSRUVDT00iLCAiUENDQVJELUlERSIsIDB4NTcxNGNiZjcsIDB4NDhlMGFiOGUpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJISVRBQ0hJIiwgIkZMQVNIIiwgMHhmNGY0Mzk0OSwgMHg5ZWI4NmFhZSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkhJVEFDSEkiLCAibWljcm9kcml2ZSIsIDB4ZjRmNDM5NDksIDB4YTZkNzYxNzgpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJQk0iLCAibWljcm9kcml2ZSIsIDB4YjU2OWE2ZTUsIDB4YTZkNzYxNzgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJQk0iLCAiSUJNMTdKU1NGUDIwIiwgMHhiNTY5YTZlNSwgMHhmMjUwODc1MyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklPIERBVEEiLCAiQ0JJREUyICAgICAgIiwgMHg1NDdlNjZkYywgMHg4NjcxMDQzYiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklPIERBVEEiLCAiUENJREUiLCAweDU0N2U2NmRjLCAweDVjNWFiMTQ5KSwKQEAgLTQ1OSwxMSArNDE3LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiaWRlLWNzIiwKIAl9LAotCS5wcm9iZQkJPSBpZGVfYXR0YWNoLAorCS5wcm9iZQkJPSBpZGVfcHJvYmUsCiAJLnJlbW92ZQkJPSBpZGVfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IGlkZV9pZHMsCi0JLnN1c3BlbmQJPSBpZGVfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGlkZV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lkZV9jcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwppbmRleCBjZjg0MzUwLi44YjI0YjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwpAQCAtNzMxLDYgKzczMSw4IEBACiAJCiAJaWYobTUyMjlfcmV2aXNpb24gPD0gMHgyMCkKIAkJdG1wYnl0ZSA9ICh0bXBieXRlICYgKH4weDAyKSkgfCAweDAxOworCWVsc2UgaWYgKG01MjI5X3JldmlzaW9uID09IDB4YzcpCisJCXRtcGJ5dGUgfD0gMHgwMzsKIAllbHNlCiAJCXRtcGJ5dGUgfD0gMHgwMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCmluZGV4IGRmOWVlOWEuLjkwMGVmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKQEAgLTM0OCw2ICszNDgsNyBAQAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDIwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCmluZGV4IDZmOGY4NjQuLjdjZTViZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKQEAgLTc5OCw3ICs3OTgsNiBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKIAkJLmV4dHJhCQk9IDQ4LAotCQkuZmxhZ3MJCT0gSURFUENJX0ZMQUdfRk9SQ0VfUERDLAogCX0sewkvKiAyICovCiAJCS5uYW1lCQk9ICJQREMyMDI2MyIsCiAJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGMyMDJhdGE0LApAQCAtODE5LDcgKzgxOCw2IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gNDgsCi0JCS5mbGFncwkJPSBJREVQQ0lfRkxBR19GT1JDRV9QREMsCiAJfSx7CS8qIDQgKi8KIAkJLm5hbWUJCT0gIlBEQzIwMjY3IiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkYzIwMnh4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggNDNiOTZlMi4uMjdjOWViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC0zNDUsMTcgKzM0NSwxNyBAQAogc3RhdGljIHU4CiBzZ2lpb2M0X0lOQih1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JdTggcmVnID0gKHU4KSBpbmIocG9ydCk7CisJdTggcmVnID0gKHU4KSByZWFkYigodm9pZCBfX2lvbWVtICopIHBvcnQpOwogCiAJaWYgKChwb3J0ICYgMHhGRkYpID09IDB4MTFDKSB7CS8qIFN0YXR1cyByZWdpc3RlciBvZiBJT0M0ICovCiAJCWlmIChyZWcgJiAweDUxKSB7CS8qIE5vdCBidXN5Li4uY2hlY2sgZm9yIGludGVycnVwdCAqLwogCQkJdW5zaWduZWQgbG9uZyBvdGhlcl9pciA9IHBvcnQgLSAweDExMDsKLQkJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIGlubChvdGhlcl9pcik7CisJCQl1bnNpZ25lZCBpbnQgaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKIAogCQkJLyogQ2xlYXIgdGhlIEludGVycnVwdCwgRXJyb3IgYml0cyBvbiB0aGUgSU9DNCAqLwogCQkJaWYgKGludHJfcmVnICYgMHgwMykgewotCQkJCW91dGwoMHgwMywgb3RoZXJfaXIpOwotCQkJCWludHJfcmVnID0gKHUzMikgaW5sKG90aGVyX2lyKTsKKwkJCQl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7CisJCQkJaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKIAkJCX0KIAkJfQogCX0KQEAgLTYwNiw2ICs2MDYsMTIgQEAKIAlod2lmLT5pZGVfZG1hX2hvc3Rfb2ZmID0gJnNnaWlvYzRfaWRlX2RtYV9ob3N0X29mZjsKIAlod2lmLT5pZGVfZG1hX2xvc3RpcnEgPSAmc2dpaW9jNF9pZGVfZG1hX2xvc3RpcnE7CiAJaHdpZi0+aWRlX2RtYV90aW1lb3V0ID0gJl9faWRlX2RtYV90aW1lb3V0OworCisJLyoKKwkgKiBUaGUgSU9DNCB1c2VzIE1NSU8gcmF0aGVyIHRoYW4gUG9ydCBJTy4KKwkgKiBJdCBhbHNvIG5lZWRzIHNwZWNpYWwgd29ya2Fyb3VuZHMgZm9yIElOQi4KKwkgKi8KKwlkZWZhdWx0X2h3aWZfbW1pb3BzKGh3aWYpOwogCWh3aWYtPklOQiA9ICZzZ2lpb2M0X0lOQjsKIH0KIApAQCAtNzQzLDYgKzc0OSw2IEBACiBtb2R1bGVfaW5pdChpb2M0X2lkZV9pbml0KTsKIG1vZHVsZV9leGl0KGlvYzRfaWRlX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJBbmlrZXQgTWFsYXRwdXJlIC0gU2lsaWNvbiBHcmFwaGljcyBJbmMuIChTR0kpIik7CitNT0RVTEVfQVVUSE9SKCJBbmlrZXQgTWFsYXRwdXJlL0plcmVteSBIaWdkb24iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSURFIFBDSSBkcml2ZXIgbW9kdWxlIGZvciBTR0kgSU9DNCBCYXNlLUlPIENhcmQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCmluZGV4IDc4ZTMwZjguLmZmY2E4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwpAQCAtNTUzLDYgKzU1Myw4IEBACiAKIAlpZiAoaXJxICE9IE5VTEwpCiAJCSppcnEgPSBwbWFjX2lkZVtpeF0uaXJxOworCisJaHctPmRldiA9ICZwbWFjX2lkZVtpeF0ubWRldi0+b2ZkZXYuZGV2OwogfQogCiAjZGVmaW5lIFBNQUNfSURFX1JFRyh4KSAoKHZvaWQgX19pb21lbSAqKShJREVfREFUQV9SRUcrKHgpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggN2ViZjk5Mi4uNDYyZWQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTU4MCw3ICs1ODAsNiBAQAogCWludCBwb3J0OwogCWludCBhdF9sZWFzdF9vbmVfaHdpZl9lbmFibGVkID0gMDsKIAlpZGVfaHdpZl90ICpod2lmLCAqbWF0ZSA9IE5VTEw7Ci0Jc3RhdGljIGludCBzZWNvbmRwZGMgPSAwOwogCXU4IHRtcDsKIAogCWluZGV4LT5hbGwgPSAweGYwZjA7CkBAIC01OTIsMjEgKzU5MSw5IEBACiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8PSAxOyArK3BvcnQpIHsKIAkJaWRlX3BjaV9lbmFibGViaXRfdCAqZSA9ICYoZC0+ZW5hYmxlYml0c1twb3J0XSk7CiAJCi0JCS8qIAotCQkgKiBJZiB0aGlzIGlzIGEgUHJvbWlzZSBGYWtlUmFpZCBjb250cm9sbGVyLAotCQkgKiB0aGUgMm5kIGNvbnRyb2xsZXIgd2lsbCBiZSBtYXJrZWQgYXMgCi0JCSAqIGRpc2FibGVkIHdoaWxlIGl0IGlzIGFjdHVhbGx5IHRoZXJlIGFuZCBlbmFibGVkCi0JCSAqIGJ5IHRoZSBiaW9zIGZvciByYWlkIHB1cnBvc2VzLiAKLQkJICogU2tpcCB0aGUgbm9ybWFsICJpcyBpdCBlbmFibGVkIiB0ZXN0IGZvciB0aG9zZS4KLQkJICovCi0JCWlmICgoZC0+ZmxhZ3MgJiBJREVQQ0lfRkxBR19GT1JDRV9QREMpICYmCi0JCSAgICAoc2Vjb25kcGRjKys9PTEpICYmIChwb3J0PT0xKSkKLQkJCWdvdG8gY29udHJvbGxlcl9vazsKLQkJCQogCQlpZiAoZS0+cmVnICYmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGUtPnJlZywgJnRtcCkgfHwKIAkJICAgICh0bXAgJiBlLT5tYXNrKSAhPSBlLT52YWwpKQogCQkJY29udGludWU7CS8qIHBvcnQgbm90IGVuYWJsZWQgKi8KLWNvbnRyb2xsZXJfb2s6CiAKIAkJaWYgKGQtPmNoYW5uZWxzCTw9IHBvcnQpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYwppbmRleCAxOTIyMjg3Li4xMWYxMzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCkBAIC01NTMsNyArNTUzLDcgQEAKIAkgKiByZWdpc3RlciBjb250ZW50LgogCSAqIFRvIGFjdHVhbGx5IGVuYWJsZSBwaHlzaWNhbCByZXNwb25zZXMgaXMgdGhlIGpvYiBvZiBvdXIgaW50ZXJydXB0CiAJICogaGFuZGxlciB3aGljaCBwcm9ncmFtcyB0aGUgcGh5c2ljYWwgcmVxdWVzdCBmaWx0ZXIuICovCi0JcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeVVwcGVyQm91bmQsIDB4ZmZmZjAwMDApOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9QaHlVcHBlckJvdW5kLCAweDAxMDAwMDAwKTsKIAogCURCR01TRygicGh5c1VwcGVyQm91bmRPZmZzZXQ9JTA4eCIsCiAJICAgICAgIHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1BoeVVwcGVyQm91bmQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggMmM3NjVjYS4uNTQxM2RjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xMTcsNyArMTE4LDggQEAKICAqLwogc3RhdGljIGludCBtYXhfc2VjdG9ycyA9IFNCUDJfTUFYX1NFQ1RPUlM7CiBtb2R1bGVfcGFyYW0obWF4X3NlY3RvcnMsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heF9zZWN0b3JzLCAiQ2hhbmdlIG1heCBzZWN0b3JzIHBlciBJL08gc3VwcG9ydGVkIChkZWZhdWx0ID0gMjU1KSIpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc2VjdG9ycywgIkNoYW5nZSBtYXggc2VjdG9ycyBwZXIgSS9PIHN1cHBvcnRlZCAoZGVmYXVsdCA9ICIKKwkJIF9fc3RyaW5naWZ5KFNCUDJfTUFYX1NFQ1RPUlMpICIpIik7CiAKIC8qCiAgKiBFeGNsdXNpdmUgbG9naW4gdG8gc2JwMiBkZXZpY2U/IEluIG1vc3QgY2FzZXMsIHRoZSBzYnAyIGRyaXZlciBzaG91bGQKQEAgLTEzNSwxOCArMTM3LDQ1IEBACiBNT0RVTEVfUEFSTV9ERVNDKGV4Y2x1c2l2ZV9sb2dpbiwgIkV4Y2x1c2l2ZSBsb2dpbiB0byBzYnAyIGRldmljZSAoZGVmYXVsdCA9IDEpIik7CiAKIC8qCi0gKiBTQ1NJIGlucXVpcnkgaGFjayBmb3IgcmVhbGx5IGJhZGx5IGJlaGF2ZWQgc2JwMiBkZXZpY2VzLiBUdXJuIHRoaXMgb24KLSAqIGlmIHlvdXIgc2JwMiBkZXZpY2UgaXMgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRoZSBTQ1NJIGlucXVpcnkgY29tbWFuZC4KLSAqIFRoaXMgaGFjayBtYWtlcyB0aGUgaW5xdWlyeSBsb29rIG1vcmUgbGlrZSBhIHR5cGljYWwgTVMgV2luZG93cyBpbnF1aXJ5Ci0gKiBieSBlbmZvcmNpbmcgMzYgYnl0ZSBpbnF1aXJ5IGFuZCBhdm9pZGluZyBhY2Nlc3MgdG8gbW9kZV9zZW5zZSBwYWdlIDguCisgKiBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kcyBpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgdG8gd29yaywKKyAqIHBsZWFzZSBzdWJtaXQgdGhlIGtlcm5lbCBtZXNzYWdlcyBsb2dnZWQgYnkgc2JwMiB0byB0aGUgbGludXgxMzk0LWRldmVsCisgKiBtYWlsaW5nIGxpc3QuCiAgKgotICogSWYgZm9yY2VfaW5xdWlyeV9oYWNrPTEgaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlIHRvIHdvcmssCi0gKiBwbGVhc2Ugc3VibWl0IHRoZSBsb2dnZWQgc2JwMl9maXJtd2FyZV9yZXZpc2lvbiB2YWx1ZSBvZiB0aGlzIGRldmljZSB0bwotICogdGhlIGxpbnV4MTM5NC1kZXZlbCBtYWlsaW5nIGxpc3QuCisgKiAtIDEyOGtCIG1heCB0cmFuc2ZlcgorICogICBMaW1pdCB0cmFuc2ZlciBzaXplLiBOZWNlc3NhcnkgZm9yIHNvbWUgb2xkIGJyaWRnZXMuCisgKgorICogLSAzNiBieXRlIGlucXVpcnkKKyAqICAgV2hlbiBzY3NpX21vZCBwcm9iZXMgdGhlIGRldmljZSwgbGV0IHRoZSBpbnF1aXJ5IGNvbW1hbmQgbG9vayBsaWtlIHRoYXQKKyAqICAgZnJvbSBNUyBXaW5kb3dzLgorICoKKyAqIC0gc2tpcCBtb2RlIHBhZ2UgOAorICogICBTdXBwcmVzcyBzZW5kaW5nIG9mIG1vZGVfc2Vuc2UgZm9yIG1vZGUgcGFnZSA4IGlmIHRoZSBkZXZpY2UgcHJldGVuZHMgdG8KKyAqICAgc3VwcG9ydCB0aGUgU0NTSSBQcmltYXJ5IEJsb2NrIGNvbW1hbmRzIGluc3RlYWQgb2YgUmVkdWNlZCBCbG9jayBDb21tYW5kcy4KKyAqCisgKiAtIGZpeCBjYXBhY2l0eQorICogICBUZWxsIHNkX21vZCB0byBjb3JyZWN0IHRoZSBsYXN0IHNlY3RvciBudW1iZXIgcmVwb3J0ZWQgYnkgcmVhZF9jYXBhY2l0eS4KKyAqICAgQXZvaWRzIGFjY2VzcyBiZXlvbmQgYWN0dWFsIGRpc2sgbGltaXRzIG9uIGRldmljZXMgd2l0aCBhbiBvZmYtYnktb25lIGJ1Zy4KKyAqICAgRG9uJ3QgdXNlIHRoaXMgd2l0aCBkZXZpY2VzIHdoaWNoIGRvbid0IGhhdmUgdGhpcyBidWcuCisgKgorICogLSBvdmVycmlkZSBpbnRlcm5hbCBibGFja2xpc3QKKyAqICAgSW5zdGVhZCBvZiBhZGRpbmcgdG8gdGhlIGJ1aWx0LWluIGJsYWNrbGlzdCwgdXNlIG9ubHkgdGhlIHdvcmthcm91bmRzCisgKiAgIHNwZWNpZmllZCBpbiB0aGUgbW9kdWxlIGxvYWQgcGFyYW1ldGVyLgorICogICBVc2VmdWwgaWYgYSBibGFja2xpc3QgZW50cnkgaW50ZXJmZXJlZCB3aXRoIGEgbm9uLWJyb2tlbiBkZXZpY2UuCiAgKi8KK3N0YXRpYyBpbnQgc2JwMl9kZWZhdWx0X3dvcmthcm91bmRzOworbW9kdWxlX3BhcmFtX25hbWVkKHdvcmthcm91bmRzLCBzYnAyX2RlZmF1bHRfd29ya2Fyb3VuZHMsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdvcmthcm91bmRzLCAiV29yayBhcm91bmQgZGV2aWNlIGJ1Z3MgKGRlZmF1bHQgPSAwIgorCSIsIDEyOGtCIG1heCB0cmFuc2ZlciA9ICIgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TKQorCSIsIDM2IGJ5dGUgaW5xdWlyeSA9ICIgICAgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzYpCisJIiwgc2tpcCBtb2RlIHBhZ2UgOCA9ICIgICBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfTU9ERV9TRU5TRV84KQorCSIsIGZpeCBjYXBhY2l0eSA9ICIgICAgICAgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWSkKKwkiLCBvdmVycmlkZSBpbnRlcm5hbCBibGFja2xpc3QgPSAiIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9PVkVSUklERSkKKwkiLCBvciBhIGNvbWJpbmF0aW9uKSIpOworCisvKiBsZWdhY3kgcGFyYW1ldGVyICovCiBzdGF0aWMgaW50IGZvcmNlX2lucXVpcnlfaGFjazsKIG1vZHVsZV9wYXJhbShmb3JjZV9pbnF1aXJ5X2hhY2ssIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2lucXVpcnlfaGFjaywgIkZvcmNlIFNDU0kgaW5xdWlyeSBoYWNrIChkZWZhdWx0ID0gMCkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfaW5xdWlyeV9oYWNrLCAiRGVwcmVjYXRlZCwgdXNlICd3b3JrYXJvdW5kcyciKTsKIAogLyoKICAqIEV4cG9ydCBpbmZvcm1hdGlvbiBhYm91dCBwcm90b2NvbHMvZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCkBAIC0yNjYsMTQgKzI5NSw1NSBAQAogfTsKIAogLyoKLSAqIExpc3Qgb2YgZGV2aWNlIGZpcm13YXJlcyB0aGF0IHJlcXVpcmUgdGhlIGlucXVpcnkgaGFjay4KLSAqIFlpZWxkcyBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgYnV0IGRpZCBub3QgYnJlYWsgb3RoZXIgZGV2aWNlcyBzbyBmYXIuCisgKiBMaXN0IG9mIGRldmljZXMgd2l0aCBrbm93biBidWdzLgorICoKKyAqIFRoZSBmaXJtd2FyZV9yZXZpc2lvbiBmaWVsZCwgbWFza2VkIHdpdGggMHhmZmZmMDAsIGlzIHRoZSBiZXN0IGluZGljYXRvcgorICogZm9yIHRoZSB0eXBlIG9mIGJyaWRnZSBjaGlwIG9mIGEgZGV2aWNlLiAgSXQgeWllbGRzIGEgZmV3IGZhbHNlIHBvc2l0aXZlcworICogYnV0IHRoaXMgZGlkIG5vdCBicmVhayBjb3JyZWN0bHkgYmVoYXZpbmcgZGV2aWNlcyBzbyBmYXIuCiAgKi8KLXN0YXRpYyB1MzIgc2JwMl9icm9rZW5faW5xdWlyeV9saXN0W10gPSB7Ci0JMHgwMDAwMjgwMCwJLyogU3RlZmFuIFJpY2h0ZXIgPHN0ZWZhbnJAczVyNi5pbi1iZXJsaW4uZGU+ICovCi0JCQkvKiBEVmlDTyBNb21vYmF5IENYLTEgKi8KLQkweDAwMDAwMjAwCS8qIEFuZHJlYXMgUGxlc2NoIDxwbGVzY2hAZmFzLmhhcnZhcmQuZWR1PiAqLwotCQkJLyogUVBTIEZpcmUgRFZEQnVybmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1MzIgZmlybXdhcmVfcmV2aXNpb247CisJdTMyIG1vZGVsX2lkOworCXVuc2lnbmVkIHdvcmthcm91bmRzOworfSBzYnAyX3dvcmthcm91bmRzX3RhYmxlW10gPSB7CisJLyogVFNCNDJBQTkgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMjgwMCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2IHwKKwkJCQkJICBTQlAyX1dPUktBUk9VTkRfTU9ERV9TRU5TRV84LAorCX0sCisJLyogSW5pdGlvIGJyaWRnZXMsIGFjdHVhbGx5IG9ubHkgbmVlZGVkIGZvciBzb21lIG9sZGVyIG9uZXMgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMDIwMCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2LAorCX0sCisJLyogU3ltYmlvcyBicmlkZ2UgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweGEwYjgwMCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUywKKwl9LAorCS8qCisJICogTm90ZSBhYm91dCB0aGUgZm9sbG93aW5nIEFwcGxlIGlQb2QgYmxhY2tsaXN0IGVudHJpZXM6CisJICoKKwkgKiBUaGVyZSBhcmUgaVBvZHMgKDJuZCBnZW4sIDNyZCBnZW4pIHdpdGggbW9kZWxfaWQ9PTAuICBTaW5jZSBvdXIKKwkgKiBtYXRjaGluZyBsb2dpYyB0cmVhdHMgMCBhcyBhIHdpbGRjYXJkLCB3ZSBjYW5ub3QgbWF0Y2ggdGhpcyBJRAorCSAqIHdpdGhvdXQgcmV3cml0aW5nIHRoZSBtYXRjaGluZyByb3V0aW5lLiAgRm9ydHVuYXRlbHkgdGhlc2UgaVBvZHMKKwkgKiBkbyBub3QgZmVhdHVyZSB0aGUgcmVhZF9jYXBhY2l0eSBidWcgYWNjb3JkaW5nIHRvIG9uZSByZXBvcnQuCisJICogUmVhZF9jYXBhY2l0eSBiZWhhdmlvdXIgYXMgd2VsbCBhcyBtb2RlbF9pZCBjb3VsZCBjaGFuZ2UgZHVlIHRvCisJICogQXBwbGUtc3VwcGxpZWQgZmlybXdhcmUgdXBkYXRlcyB0aG91Z2guCisJICovCisJLyogaVBvZCA0dGggZ2VuZXJhdGlvbiAqLyB7CisJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4MGEyNzAwLAorCQkubW9kZWxfaWQJCT0gMHgwMDAwMjEsCisJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZLAorCX0sCisJLyogaVBvZCBtaW5pICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwYTI3MDAsCisJCS5tb2RlbF9pZAkJPSAweDAwMDAyMywKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFksCisJfSwKKwkvKiBpUG9kIFBob3RvICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwYTI3MDAsCisJCS5tb2RlbF9pZAkJPSAweDAwMDA3ZSwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFksCisJfQogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00OTYsMjIgKzU2NiwxNyBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIHNicDJfY29tbWFuZCBmb3IgYSBnaXZlbiBvdXRzdGFuZGluZyBTQ3BudC4KICAqIE9ubHkgbG9va3MgYXQgdGhlIGludXNlIGxpc3QuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jayBoZWxkLgogICovCi1zdGF0aWMgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpzYnAydXRpbF9maW5kX2NvbW1hbmRfZm9yX1NDcG50KHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQsIHZvaWQgKlNDcG50KQorc3RhdGljIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqc2JwMnV0aWxfZmluZF9jb21tYW5kX2Zvcl9TQ3BudCgKKwkJc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCwgdm9pZCAqU0NwbnQpCiB7CiAJc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjb21tYW5kOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2ludXNlKSkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbW1hbmQsICZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2ludXNlLCBsaXN0KSB7Ci0JCQlpZiAoY29tbWFuZC0+Q3VycmVudF9TQ3BudCA9PSBTQ3BudCkgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9pbnVzZSkpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY29tbWFuZCwgJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfaW51c2UsIGxpc3QpCisJCQlpZiAoY29tbWFuZC0+Q3VycmVudF9TQ3BudCA9PSBTQ3BudCkKIAkJCQlyZXR1cm4gY29tbWFuZDsKLQkJCX0KLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNTgwLDE3ICs2NDUsMTUgQEAKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gbW92ZXMgYSBjb21tYW5kIHRvIHRoZSBjb21wbGV0ZWQgb3JiIGxpc3QuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jayBoZWxkLgogICovCi1zdGF0aWMgdm9pZCBzYnAydXRpbF9tYXJrX2NvbW1hbmRfY29tcGxldGVkKHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQsCi0JCQkJCSAgICBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNvbW1hbmQpCitzdGF0aWMgdm9pZCBzYnAydXRpbF9tYXJrX2NvbW1hbmRfY29tcGxldGVkKAorCQlzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLAorCQlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNvbW1hbmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmY29tbWFuZC0+bGlzdCk7CiAJc2JwMnV0aWxfZnJlZV9jb21tYW5kX2RtYShjb21tYW5kKTsKIAlsaXN0X2FkZF90YWlsKCZjb21tYW5kLT5saXN0LCAmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9jb21wbGV0ZWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNzcyLDEyICs4MzUsMTcgQEAKIAogCS8qIFJlZ2lzdGVyIHRoZSBzdGF0dXMgRklGTyBhZGRyZXNzIHJhbmdlLiBXZSBjb3VsZCB1c2UgdGhlIHNhbWUgRklGTwogCSAqIGZvciB0YXJnZXRzIGF0IGRpZmZlcmVudCBub2Rlcy4gSG93ZXZlciB3ZSBuZWVkIGRpZmZlcmVudCBGSUZPcyBwZXIKLQkgKiB0YXJnZXQgaW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aS11bml0IGRldmljZXMuICovCisJICogdGFyZ2V0IGluIG9yZGVyIHRvIHN1cHBvcnQgbXVsdGktdW5pdCBkZXZpY2VzLgorCSAqIFRoZSBGSUZPIGlzIGxvY2F0ZWQgb3V0IG9mIHRoZSBsb2NhbCBob3N0IGNvbnRyb2xsZXIncyBwaHlzaWNhbCByYW5nZQorCSAqIGJ1dCwgaWYgcG9zc2libGUsIHdpdGhpbiB0aGUgcG9zdGVkIHdyaXRlIGFyZWEuIFN0YXR1cyB3cml0ZXMgd2lsbAorCSAqIHRoZW4gYmUgcGVyZm9ybWVkIGFzIHVuaWZpZWQgdHJhbnNhY3Rpb25zLiBUaGlzIHNsaWdodGx5IHJlZHVjZXMKKwkgKiBiYW5kd2lkdGggdXNhZ2UsIGFuZCBzb21lIFByb2xpZmljIGJhc2VkIGRldmljZXMgc2VlbSB0byByZXF1aXJlIGl0LgorCSAqLwogCXNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIgPSBocHNiX2FsbG9jYXRlX2FuZF9yZWdpc3Rlcl9hZGRyc3BhY2UoCiAJCQkmc2JwMl9oaWdobGV2ZWwsIHVkLT5uZS0+aG9zdCwgJnNicDJfb3BzLAogCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX3N0YXR1c19ibG9jayksIHNpemVvZihxdWFkbGV0X3QpLAotCQkJfjBVTEwsIH4wVUxMKTsKLQlpZiAoIXNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIpIHsKKwkJCTB4MDEwMDAwMDAwMDAwVUxMLCBDU1IxMjEyX0FMTF9TUEFDRV9FTkQpOworCWlmIChzY3NpX2lkLT5zdGF0dXNfZmlmb19hZGRyID09IH4wVUxMKSB7CiAJCVNCUDJfRVJSKCJmYWlsZWQgdG8gYWxsb2NhdGUgc3RhdHVzIEZJRk8gYWRkcmVzcyByYW5nZSIpOwogCQlnb3RvIGZhaWxlZF9hbGxvYzsKIAl9CkBAIC0xNDU3LDcgKzE1MjUsOCBAQAogCXN0cnVjdCBjc3IxMjEyX2RlbnRyeSAqZGVudHJ5OwogCXU2NCBtYW5hZ2VtZW50X2FnZW50X2FkZHI7CiAJdTMyIGNvbW1hbmRfc2V0X3NwZWNfaWQsIGNvbW1hbmRfc2V0LCB1bml0X2NoYXJhY3RlcmlzdGljcywKLQkgICAgZmlybXdhcmVfcmV2aXNpb24sIHdvcmthcm91bmRzOworCSAgICBmaXJtd2FyZV9yZXZpc2lvbjsKKwl1bnNpZ25lZCB3b3JrYXJvdW5kczsKIAlpbnQgaTsKIAogCVNCUDJfREVCVUdfRU5URVIoKTsKQEAgLTE1MTMsMTIgKzE1ODIsOCBAQAogCQljYXNlIFNCUDJfRklSTVdBUkVfUkVWSVNJT05fS0VZOgogCQkJLyogRmlybXdhcmUgcmV2aXNpb24gKi8KIAkJCWZpcm13YXJlX3JldmlzaW9uID0ga3YtPnZhbHVlLmltbWVkaWF0ZTsKLQkJCWlmIChmb3JjZV9pbnF1aXJ5X2hhY2spCi0JCQkJU0JQMl9JTkZPKCJzYnAyX2Zpcm13YXJlX3JldmlzaW9uID0gJXgiLAotCQkJCQkgICh1bnNpZ25lZCBpbnQpZmlybXdhcmVfcmV2aXNpb24pOwotCQkJZWxzZQotCQkJCVNCUDJfREVCVUcoInNicDJfZmlybXdhcmVfcmV2aXNpb24gPSAleCIsCi0JCQkJCSAgICh1bnNpZ25lZCBpbnQpZmlybXdhcmVfcmV2aXNpb24pOworCQkJU0JQMl9ERUJVRygic2JwMl9maXJtd2FyZV9yZXZpc2lvbiA9ICV4IiwKKwkJCQkgICAodW5zaWduZWQgaW50KWZpcm13YXJlX3JldmlzaW9uKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xNTI2LDQxICsxNTkxLDQ0IEBACiAJCX0KIAl9CiAKLQkvKiBUaGlzIGlzIHRoZSBzdGFydCBvZiBvdXIgYnJva2VuIGRldmljZSBjaGVja2luZy4gV2UgdHJ5IHRvIGhhY2sKLQkgKiBhcm91bmQgb2RkaXRpZXMgYW5kIGtub3duIGRlZmVjdHMuICAqLwotCXdvcmthcm91bmRzID0gMHgwOwotCi0JLyogSWYgdGhlIHZlbmRvciBpZCBpcyAweGEwYjggKFN5bWJpb3MgdmVuZG9yIGlkKSwgdGhlbiB3ZSBoYXZlIGEKLQkgKiBicmlkZ2Ugd2l0aCAxMjhLQiBtYXggdHJhbnNmZXIgc2l6ZSBsaW1pdGF0aW9uLiBGb3Igc2FuaXR5LCB3ZQotCSAqIG9ubHkgdm9pY2UgdGhpcyB3aGVuIHRoZSBjdXJyZW50IG1heF9zZWN0b3JzIHNldHRpbmcKLQkgKiBleGNlZWRzIHRoZSAxMjhrIGxpbWl0LiBCeSBkZWZhdWx0LCB0aGF0IGlzIG5vdCB0aGUgY2FzZS4KLQkgKgotCSAqIEl0IHdvdWxkIGJlIHJlYWxseSBuaWNlIGlmIHdlIGNvdWxkIGRldGVjdCB0aGlzIGJlZm9yZSB0aGUgc2NzaQotCSAqIGhvc3QgZ2V0cyBpbml0aWFsaXplZC4gVGhhdCB3YXkgd2UgY2FuIGRvd24tZm9yY2UgdGhlCi0JICogbWF4X3NlY3RvcnMgdG8gYWNjb3VudCBmb3IgaXQuIFRoYXQgaXMgbm90IGN1cnJlbnRseQotCSAqIHBvc3NpYmxlLiAgKi8KLQlpZiAoKGZpcm13YXJlX3JldmlzaW9uICYgMHhmZmZmMDApID09Ci0JCQlTQlAyXzEyOEtCX0JST0tFTl9GSVJNV0FSRSAmJgotCQkJKG1heF9zZWN0b3JzICogNTEyKSA+ICgxMjgqMTAyNCkpIHsKLQkJU0JQMl9XQVJOKCJOb2RlICIgTk9ERV9CVVNfRk1UICI6IEJyaWRnZSBvbmx5IHN1cHBvcnRzIDEyOEtCIG1heCB0cmFuc2ZlciBzaXplLiIsCi0JCQkJTk9ERV9CVVNfQVJHUyh1ZC0+bmUtPmhvc3QsIHVkLT5uZS0+bm9kZWlkKSk7Ci0JCVNCUDJfV0FSTigiV0FSTklORzogQ3VycmVudCBtYXhfc2VjdG9ycyBzZXR0aW5nIGlzIGxhcmdlciB0aGFuIDEyOEtCICglZCBzZWN0b3JzKSEiLAotCQkJCW1heF9zZWN0b3JzKTsKLQkJd29ya2Fyb3VuZHMgfD0gU0JQMl9CUkVBS0FHRV8xMjhLX01BWF9UUkFOU0ZFUjsKKwl3b3JrYXJvdW5kcyA9IHNicDJfZGVmYXVsdF93b3JrYXJvdW5kczsKKwlpZiAoZm9yY2VfaW5xdWlyeV9oYWNrKSB7CisJCVNCUDJfV0FSTigiZm9yY2VfaW5xdWlyeV9oYWNrIGlzIGRlcHJlY2F0ZWQuICIKKwkJCSAgIlVzZSBwYXJhbWV0ZXIgJ3dvcmthcm91bmRzJyBpbnN0ZWFkLiIpOworCQl3b3JrYXJvdW5kcyB8PSBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNjsKIAl9CiAKLQkvKiBDaGVjayBmb3IgYSBibGFja2xpc3RlZCBzZXQgb2YgZGV2aWNlcyB0aGF0IHJlcXVpcmUgdXMgdG8gZm9yY2UKLQkgKiBhIDM2IGJ5dGUgaG9zdCBpbnF1aXJ5LiBUaGlzIGNhbiBiZSBvdmVycmlkZW4gYXMgYSBtb2R1bGUgcGFyYW0KLQkgKiAodG8gZm9yY2UgYWxsIGhvc3RzKS4gICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JwMl9icm9rZW5faW5xdWlyeV9saXN0KTsgaSsrKSB7Ci0JCWlmICgoZmlybXdhcmVfcmV2aXNpb24gJiAweGZmZmYwMCkgPT0KLQkJCQlzYnAyX2Jyb2tlbl9pbnF1aXJ5X2xpc3RbaV0pIHsKLQkJCVNCUDJfV0FSTigiTm9kZSAiIE5PREVfQlVTX0ZNVCAiOiBVc2luZyAzNmJ5dGUgaW5xdWlyeSB3b3JrYXJvdW5kIiwKLQkJCQkJTk9ERV9CVVNfQVJHUyh1ZC0+bmUtPmhvc3QsIHVkLT5uZS0+bm9kZWlkKSk7Ci0JCQl3b3JrYXJvdW5kcyB8PSBTQlAyX0JSRUFLQUdFX0lOUVVJUllfSEFDSzsKLQkJCWJyZWFrOyAvKiBObyBuZWVkIHRvIGNvbnRpbnVlLiAqLworCWlmICghKHdvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX09WRVJSSURFKSkKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JwMl93b3JrYXJvdW5kc190YWJsZSk7IGkrKykgeworCQkJaWYgKHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0uZmlybXdhcmVfcmV2aXNpb24gJiYKKwkJCSAgICBzYnAyX3dvcmthcm91bmRzX3RhYmxlW2ldLmZpcm13YXJlX3JldmlzaW9uICE9CisJCQkgICAgKGZpcm13YXJlX3JldmlzaW9uICYgMHhmZmZmMDApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0ubW9kZWxfaWQgJiYKKwkJCSAgICBzYnAyX3dvcmthcm91bmRzX3RhYmxlW2ldLm1vZGVsX2lkICE9IHVkLT5tb2RlbF9pZCkKKwkJCQljb250aW51ZTsKKwkJCXdvcmthcm91bmRzIHw9IHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0ud29ya2Fyb3VuZHM7CisJCQlicmVhazsKIAkJfQotCX0KKworCWlmICh3b3JrYXJvdW5kcykKKwkJU0JQMl9JTkZPKCJXb3JrYXJvdW5kcyBmb3Igbm9kZSAiIE5PREVfQlVTX0ZNVCAiOiAweCV4ICIKKwkJCSAgIihmaXJtd2FyZV9yZXZpc2lvbiAweCUwNngsIHZlbmRvcl9pZCAweCUwNngsIgorCQkJICAiIG1vZGVsX2lkIDB4JTA2eCkiLAorCQkJICBOT0RFX0JVU19BUkdTKHVkLT5uZS0+aG9zdCwgdWQtPm5lLT5ub2RlaWQpLAorCQkJICB3b3JrYXJvdW5kcywgZmlybXdhcmVfcmV2aXNpb24sCisJCQkgIHVkLT52ZW5kb3JfaWQgPyB1ZC0+dmVuZG9yX2lkIDogdWQtPm5lLT52ZW5kb3JfaWQsCisJCQkgIHVkLT5tb2RlbF9pZCk7CisKKwkvKiBXZSB3b3VsZCBuZWVkIG9uZSBTQ1NJIGhvc3QgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0IHRvIGFkanVzdAorCSAqIG1heF9zZWN0b3JzIG9uIHRoZSBmbHksIHRoZXJlZm9yZSB3YXJuIG9ubHkuICovCisJaWYgKHdvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TICYmCisJICAgIChtYXhfc2VjdG9ycyAqIDUxMikgPiAoMTI4ICogMTAyNCkpCisJCVNCUDJfV0FSTigiTm9kZSAiIE5PREVfQlVTX0ZNVCAiOiBCcmlkZ2Ugb25seSBzdXBwb3J0cyAxMjhLQiAiCisJCQkgICJtYXggdHJhbnNmZXIgc2l6ZS4gV0FSTklORzogQ3VycmVudCBtYXhfc2VjdG9ycyAiCisJCQkgICJzZXR0aW5nIGlzIGxhcmdlciB0aGFuIDEyOEtCICglZCBzZWN0b3JzKSIsCisJCQkgIE5PREVfQlVTX0FSR1ModWQtPm5lLT5ob3N0LCB1ZC0+bmUtPm5vZGVpZCksCisJCQkgIG1heF9zZWN0b3JzKTsKIAogCS8qIElmIHRoaXMgaXMgYSBsb2dpY2FsIHVuaXQgZGlyZWN0b3J5IGVudHJ5LCBwcm9jZXNzIHRoZSBwYXJlbnQKIAkgKiB0byBnZXQgdGhlIHZhbHVlcy4gKi8KQEAgLTIxNDgsNyArMjIxNiw5IEBACiAJCSAqIE1hdGNoZWQgc3RhdHVzIHdpdGggY29tbWFuZCwgbm93IGdyYWIgc2NzaSBjb21tYW5kIHBvaW50ZXJzIGFuZCBjaGVjayBzdGF0dXMKIAkJICovCiAJCVNDcG50ID0gY29tbWFuZC0+Q3VycmVudF9TQ3BudDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCQlzYnAydXRpbF9tYXJrX2NvbW1hbmRfY29tcGxldGVkKHNjc2lfaWQsIGNvbW1hbmQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoU0NwbnQpIHsKIApAQCAtMjQ1MiwxOSArMjUyMiwyNSBAQAogCiAJc2NzaV9pZC0+c2RldiA9IHNkZXY7CiAKLQlpZiAoZm9yY2VfaW5xdWlyeV9oYWNrIHx8Ci0JICAgIHNjc2lfaWQtPndvcmthcm91bmRzICYgU0JQMl9CUkVBS0FHRV9JTlFVSVJZX0hBQ0spIHsKKwlpZiAoc2NzaV9pZC0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNikKIAkJc2Rldi0+aW5xdWlyeV9sZW4gPSAzNjsKLQkJc2Rldi0+c2tpcF9tc19wYWdlXzggPSAxOwotCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYnAyc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogeworCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQgPQorCQkoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdOworCiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgKDUxMiAtIDEpKTsKIAlzZGV2LT51c2VfMTBfZm9yX3J3ID0gMTsKIAlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKKworCWlmIChzZGV2LT50eXBlID09IFRZUEVfRElTSyAmJgorCSAgICBzY3NpX2lkLT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9NT0RFX1NFTlNFXzgpCisJCXNkZXYtPnNraXBfbXNfcGFnZV84ID0gMTsKKwlpZiAoc2NzaV9pZC0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZKQorCQlzZGV2LT5maXhfY2FwYWNpdHkgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC0yNDg0LDYgKzI1NjAsNyBAQAogCQkoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwogCXN0cnVjdCBzYnAyc2NzaV9ob3N0X2luZm8gKmhpID0gc2NzaV9pZC0+aGk7CiAJc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjb21tYW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlTQlAyX0VSUigiYWJvcnRpbmcgc2JwMiBjb21tYW5kIik7CiAJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKQEAgLTI0OTQsNiArMjU3MSw3IEBACiAJCSAqIFJpZ2h0IG5vdywganVzdCByZXR1cm4gYW55IG1hdGNoaW5nIGNvbW1hbmQgc3RydWN0dXJlcwogCQkgKiB0byB0aGUgZnJlZSBwb29sLgogCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCQljb21tYW5kID0gc2JwMnV0aWxfZmluZF9jb21tYW5kX2Zvcl9TQ3BudChzY3NpX2lkLCBTQ3BudCk7CiAJCWlmIChjb21tYW5kKSB7CiAJCQlTQlAyX0RFQlVHKCJGb3VuZCBjb21tYW5kIHRvIGFib3J0Iik7CkBAIC0yNTExLDYgKzI1ODksNyBAQAogCQkJCWNvbW1hbmQtPkN1cnJlbnRfZG9uZShjb21tYW5kLT5DdXJyZW50X1NDcG50KTsKIAkJCX0KIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2ssIGZsYWdzKTsKIAogCQkvKgogCQkgKiBJbml0aWF0ZSBhIGZldGNoIGFnZW50IHJlc2V0LgpAQCAtMjYwNSw3ICsyNjg0LDkgQEAKIAkJc2NzaV9kcml2ZXJfdGVtcGxhdGUuY21kX3Blcl9sdW4gPSAxOwogCX0KIAotCS8qIFNldCBtYXggc2VjdG9ycyAobW9kdWxlIGxvYWQgb3B0aW9uKS4gRGVmYXVsdCBpcyAyNTUgc2VjdG9ycy4gKi8KKwlpZiAoc2JwMl9kZWZhdWx0X3dvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TICYmCisJICAgIChtYXhfc2VjdG9ycyAqIDUxMikgPiAoMTI4ICogMTAyNCkpCisJCW1heF9zZWN0b3JzID0gMTI4ICogMTAyNCAvIDUxMjsKIAlzY3NpX2RyaXZlcl90ZW1wbGF0ZS5tYXhfc2VjdG9ycyA9IG1heF9zZWN0b3JzOwogCiAJLyogUmVnaXN0ZXIgb3VyIGhpZ2ggbGV2ZWwgZHJpdmVyIHdpdGggMTM5NCBzdGFjayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmggYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuaAppbmRleCBlMmQzNTdhLi5mNGNjYzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuaApAQCAtMjI3LDExICsyMjcsNiBAQAogI2RlZmluZSBTQlAyX1NXX1ZFUlNJT05fRU5UUlkJCQkJCTB4MDAwMTA0ODMKIAogLyoKLSAqIE90aGVyIG1pc2MgZGVmaW5lcwotICovCi0jZGVmaW5lIFNCUDJfMTI4S0JfQlJPS0VOX0ZJUk1XQVJFCQkJCTB4YTBiODAwCi0KLS8qCiAgKiBTQ1NJIHNwZWNpZmljIHN0dWZmCiAgKi8KIApAQCAtMjM5LDYgKzIzNCwxMyBAQAogI2RlZmluZSBTQlAyX01BWF9TRUNUT1JTCQkyNTUJLyogTWF4IHNlY3RvcnMgc3VwcG9ydGVkICovCiAjZGVmaW5lIFNCUDJfTUFYX0NNRFMJCQk4CS8qIFRoaXMgc2hvdWxkIGJlIHNhZmUgKi8KIAorLyogRmxhZ3MgZm9yIGRldGVjdGVkIG9kZGl0aWVzIGFuZCBicm9rZW5lc3MgKi8KKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TCTB4MQorI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNgkweDIKKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOAkweDQKKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWQkweDgKKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX09WRVJSSURFCTB4MTAwCisKIC8qIFRoaXMgaXMgdGhlIHR3byBkbWEgdHlwZXMgd2UgdXNlIGZvciBjbWRfZG1hIGJlbG93ICovCiBlbnVtIGNtZF9kbWFfdHlwZXMgewogCUNNRF9ETUFfTk9ORSwKQEAgLTI2OCwxMCArMjcwLDYgQEAKIAogfTsKIAotLyogQSBsaXN0IG9mIGZsYWdzIGZvciBkZXRlY3RlZCBvZGRpdGllcyBhbmQgYnJva2VuZXNzLiAqLwotI2RlZmluZSBTQlAyX0JSRUFLQUdFXzEyOEtfTUFYX1RSQU5TRkVSCQkweDEKLSNkZWZpbmUgU0JQMl9CUkVBS0FHRV9JTlFVSVJZX0hBQ0sJCTB4MgotCiBzdHJ1Y3Qgc2JwMnNjc2lfaG9zdF9pbmZvOwogCiAvKgpAQCAtMzQ1LDcgKzM0Myw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0OwogCiAJLyogRGV2aWNlIHNwZWNpZmljIHdvcmthcm91bmRzL2Jyb2tlbmVzcyAqLwotCXUzMiB3b3JrYXJvdW5kczsKKwl1bnNpZ25lZCB3b3JrYXJvdW5kczsKIH07CiAKIC8qIFNicDIgaG9zdCBkYXRhIHN0cnVjdHVyZSAob25lIHBlciBJRUVFMTM5NCBob3N0KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZwppbmRleCBiZGYwODkxLi5hZmM2MTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZwpAQCAtMzAsNiArMzAsNyBAQAogCSAgPGh0dHA6Ly93d3cub3BlbmliLm9yZz4uCiAKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL01ha2VmaWxlCmluZGV4IGE0M2ZiMzQuLmVlYTI3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmotJChDT05GSUdfSU5GSU5JQkFORCkJCSs9IGNvcmUvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9NVEhDQSkJCSs9IGh3L210aGNhLworb2JqLSQoQ09ORklHX0lQQVRIX0NPUkUpCQkrPSBody9pcGF0aC8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX0lQT0lCKQkJKz0gdWxwL2lwb2liLwogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfU1JQKQkJKz0gdWxwL3NycC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCmluZGV4IGM1N2EzODcuLjUwMzY0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJCWttYWxsb2Moc2l6ZW9mICpkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGUgKgogCQkJKGVuZF9wb3J0KGRldmljZSkgLSBzdGFydF9wb3J0KGRldmljZSkgKyAxKSwgR0ZQX0tFUk5FTCk7CiAJZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUgPQotCQlrbWFsbG9jKHNpemVvZiAqZGV2aWNlLT5jYWNoZS5wa2V5X2NhY2hlICoKKwkJa21hbGxvYyhzaXplb2YgKmRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlICoKIAkJCShlbmRfcG9ydChkZXZpY2UpIC0gc3RhcnRfcG9ydChkZXZpY2UpICsgMSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGUgfHwgIWRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwppbmRleCA3Y2ZlZGI4Li44NmZlZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKQEAgLTM0LDYgKzM0LDggQEAKICAqCiAgKiAkSWQ6IGNtLmMgMjgyMSAyMDA1LTA3LTA4IDE3OjA3OjI4WiBzZWFuLmhlZnR5ICQKICAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CkBAIC0xMjIsNyArMTI0LDcgQEAKIAlzdHJ1Y3QgcmJfbm9kZSBzZXJ2aWNlX25vZGU7CiAJc3RydWN0IHJiX25vZGUgc2lkcl9pZF9ub2RlOwogCXNwaW5sb2NrX3QgbG9jazsJLyogRG8gbm90IGFjcXVpcmUgaW5zaWRlIGNtLmxvY2sgKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CiAJYXRvbWljX3QgcmVmY291bnQ7CiAKIAlzdHJ1Y3QgaWJfbWFkX3NlbmRfYnVmICptc2c7CkBAIC0xNTksNyArMTYxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbV9kZXJlZl9pZChzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqY21faWRfcHJpdikKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY21faWRfcHJpdi0+cmVmY291bnQpKQotCQl3YWtlX3VwKCZjbV9pZF9wcml2LT53YWl0KTsKKwkJY29tcGxldGUoJmNtX2lkX3ByaXYtPmNvbXApOwogfQogCiBzdGF0aWMgaW50IGNtX2FsbG9jX21zZyhzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqY21faWRfcHJpdiwKQEAgLTU1OSw3ICs1NjEsNyBAQAogCQlnb3RvIGVycm9yOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNtX2lkX3ByaXYtPmxvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNtX2lkX3ByaXYtPndhaXQpOworCWluaXRfY29tcGxldGlvbigmY21faWRfcHJpdi0+Y29tcCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNtX2lkX3ByaXYtPndvcmtfbGlzdCk7CiAJYXRvbWljX3NldCgmY21faWRfcHJpdi0+d29ya19jb3VudCwgLTEpOwogCWF0b21pY19zZXQoJmNtX2lkX3ByaXYtPnJlZmNvdW50LCAxKTsKQEAgLTcyNCw4ICs3MjYsOCBAQAogCX0KIAogCWNtX2ZyZWVfaWQoY21faWQtPmxvY2FsX2lkKTsKLQlhdG9taWNfZGVjKCZjbV9pZF9wcml2LT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChjbV9pZF9wcml2LT53YWl0LCAhYXRvbWljX3JlYWQoJmNtX2lkX3ByaXYtPnJlZmNvdW50KSk7CisJY21fZGVyZWZfaWQoY21faWRfcHJpdik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmY21faWRfcHJpdi0+Y29tcCk7CiAJd2hpbGUgKCh3b3JrID0gY21fZGVxdWV1ZV93b3JrKGNtX2lkX3ByaXYpKSAhPSBOVUxMKQogCQljbV9mcmVlX3dvcmsod29yayk7CiAJaWYgKGNtX2lkX3ByaXYtPnByaXZhdGVfZGF0YSAmJiBjbV9pZF9wcml2LT5wcml2YXRlX2RhdGFfbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCBiYTU0Yzg1Li41YWQ0MWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtMjI4LDEwICsyMjgsNyBAQAogCQkJCWdvdG8gZXJyb3IxOwogCQl9CiAJCS8qIE1ha2Ugc3VyZSBjbGFzcyBzdXBwbGllZCBpcyBjb25zaXN0ZW50IHdpdGggUk1QUCAqLwotCQlpZiAoaWJfaXNfbWFkX2NsYXNzX3JtcHAobWFkX3JlZ19yZXEtPm1nbXRfY2xhc3MpKSB7Ci0JCQlpZiAoIXJtcHBfdmVyc2lvbikKLQkJCQlnb3RvIGVycm9yMTsKLQkJfSBlbHNlIHsKKwkJaWYgKCFpYl9pc19tYWRfY2xhc3Nfcm1wcChtYWRfcmVnX3JlcS0+bWdtdF9jbGFzcykpIHsKIAkJCWlmIChybXBwX3ZlcnNpb24pCiAJCQkJZ290byBlcnJvcjE7CiAJCX0KQEAgLTM1NSw3ICszNTIsNyBAQAogCUlOSVRfV09SSygmbWFkX2FnZW50X3ByaXYtPmxvY2FsX3dvcmssIGxvY2FsX2NvbXBsZXRpb25zLAogCQkgICBtYWRfYWdlbnRfcHJpdik7CiAJYXRvbWljX3NldCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50LCAxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWRfYWdlbnRfcHJpdi0+d2FpdCk7CisJaW5pdF9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7CiAKIAlyZXR1cm4gJm1hZF9hZ2VudF9wcml2LT5hZ2VudDsKIApAQCAtNDcwLDcgKzQ2Nyw3IEBACiAJbWFkX3Nub29wX3ByaXYtPmFnZW50LnFwID0gcG9ydF9wcml2LT5xcF9pbmZvW3Fwbl0ucXA7CiAJbWFkX3Nub29wX3ByaXYtPmFnZW50LnBvcnRfbnVtID0gcG9ydF9udW07CiAJbWFkX3Nub29wX3ByaXYtPm1hZF9zbm9vcF9mbGFncyA9IG1hZF9zbm9vcF9mbGFnczsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWRfc25vb3BfcHJpdi0+d2FpdCk7CisJaW5pdF9jb21wbGV0aW9uKCZtYWRfc25vb3BfcHJpdi0+Y29tcCk7CiAJbWFkX3Nub29wX3ByaXYtPnNub29wX2luZGV4ID0gcmVnaXN0ZXJfc25vb3BfYWdlbnQoCiAJCQkJCQkmcG9ydF9wcml2LT5xcF9pbmZvW3Fwbl0sCiAJCQkJCQltYWRfc25vb3BfcHJpdik7CkBAIC00ODksNiArNDg2LDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGliX3JlZ2lzdGVyX21hZF9zbm9vcCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXJlZl9tYWRfYWdlbnQoc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICptYWRfYWdlbnRfcHJpdikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlcmVmX3Nub29wX2FnZW50KHN0cnVjdCBpYl9tYWRfc25vb3BfcHJpdmF0ZSAqbWFkX3Nub29wX3ByaXYpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hZF9zbm9vcF9wcml2LT5yZWZjb3VudCkpCisJCWNvbXBsZXRlKCZtYWRfc25vb3BfcHJpdi0+Y29tcCk7Cit9CisKIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbWFkX2FnZW50KHN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqbWFkX2FnZW50X3ByaXYpCiB7CiAJc3RydWN0IGliX21hZF9wb3J0X3ByaXZhdGUgKnBvcnRfcHJpdjsKQEAgLTUxMiw5ICs1MjEsOCBAQAogCWZsdXNoX3dvcmtxdWV1ZShwb3J0X3ByaXYtPndxKTsKIAlpYl9jYW5jZWxfcm1wcF9yZWN2cyhtYWRfYWdlbnRfcHJpdik7CiAKLQlhdG9taWNfZGVjKCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpOwotCXdhaXRfZXZlbnQobWFkX2FnZW50X3ByaXYtPndhaXQsCi0JCSAgICFhdG9taWNfcmVhZCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KSk7CisJZGVyZWZfbWFkX2FnZW50KG1hZF9hZ2VudF9wcml2KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7CiAKIAlrZnJlZShtYWRfYWdlbnRfcHJpdi0+cmVnX3JlcSk7CiAJaWJfZGVyZWdfbXIobWFkX2FnZW50X3ByaXYtPmFnZW50Lm1yKTsKQEAgLTUzMiw5ICs1NDAsOCBAQAogCWF0b21pY19kZWMoJnFwX2luZm8tPnNub29wX2NvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcF9pbmZvLT5zbm9vcF9sb2NrLCBmbGFncyk7CiAKLQlhdG9taWNfZGVjKCZtYWRfc25vb3BfcHJpdi0+cmVmY291bnQpOwotCXdhaXRfZXZlbnQobWFkX3Nub29wX3ByaXYtPndhaXQsCi0JCSAgICFhdG9taWNfcmVhZCgmbWFkX3Nub29wX3ByaXYtPnJlZmNvdW50KSk7CisJZGVyZWZfc25vb3BfYWdlbnQobWFkX3Nub29wX3ByaXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1hZF9zbm9vcF9wcml2LT5jb21wKTsKIAogCWtmcmVlKG1hZF9zbm9vcF9wcml2KTsKIH0KQEAgLTYwMyw4ICs2MTAsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcF9pbmZvLT5zbm9vcF9sb2NrLCBmbGFncyk7CiAJCW1hZF9zbm9vcF9wcml2LT5hZ2VudC5zbm9vcF9oYW5kbGVyKCZtYWRfc25vb3BfcHJpdi0+YWdlbnQsCiAJCQkJCQkgICAgc2VuZF9idWYsIG1hZF9zZW5kX3djKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hZF9zbm9vcF9wcml2LT5yZWZjb3VudCkpCi0JCQl3YWtlX3VwKCZtYWRfc25vb3BfcHJpdi0+d2FpdCk7CisJCWRlcmVmX3Nub29wX2FnZW50KG1hZF9zbm9vcF9wcml2KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwX2luZm8tPnNub29wX2xvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXBfaW5mby0+c25vb3BfbG9jaywgZmxhZ3MpOwpAQCAtNjI5LDggKzYzNSw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwX2luZm8tPnNub29wX2xvY2ssIGZsYWdzKTsKIAkJbWFkX3Nub29wX3ByaXYtPmFnZW50LnJlY3ZfaGFuZGxlcigmbWFkX3Nub29wX3ByaXYtPmFnZW50LAogCQkJCQkJICAgbWFkX3JlY3Zfd2MpOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWFkX3Nub29wX3ByaXYtPnJlZmNvdW50KSkKLQkJCXdha2VfdXAoJm1hZF9zbm9vcF9wcml2LT53YWl0KTsKKwkJZGVyZWZfc25vb3BfYWdlbnQobWFkX3Nub29wX3ByaXYpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcXBfaW5mby0+c25vb3BfbG9jaywgZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcF9pbmZvLT5zbm9vcF9sb2NrLCBmbGFncyk7CkBAIC05NzEsOCArOTc2LDcgQEAKIAogCWZyZWVfc2VuZF9ybXBwX2xpc3QobWFkX3NlbmRfd3IpOwogCWtmcmVlKHNlbmRfYnVmLT5tYWQpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKQotCQl3YWtlX3VwKCZtYWRfYWdlbnRfcHJpdi0+d2FpdCk7CisJZGVyZWZfbWFkX2FnZW50KG1hZF9hZ2VudF9wcml2KTsKIH0KIEVYUE9SVF9TWU1CT0woaWJfZnJlZV9zZW5kX21hZCk7CiAKQEAgLTE3NjAsOCArMTc2NCw3IEBACiAJCW1hZF9yZWN2X3djID0gaWJfcHJvY2Vzc19ybXBwX3JlY3Zfd2MobWFkX2FnZW50X3ByaXYsCiAJCQkJCQkgICAgICBtYWRfcmVjdl93Yyk7CiAJCWlmICghbWFkX3JlY3Zfd2MpIHsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKQotCQkJCXdha2VfdXAoJm1hZF9hZ2VudF9wcml2LT53YWl0KTsKKwkJCWRlcmVmX21hZF9hZ2VudChtYWRfYWdlbnRfcHJpdik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xNzczLDggKzE3NzYsNyBAQAogCQlpZiAoIW1hZF9zZW5kX3dyKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJaWJfZnJlZV9yZWN2X21hZChtYWRfcmVjdl93Yyk7Ci0JCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KSkKLQkJCQl3YWtlX3VwKCZtYWRfYWdlbnRfcHJpdi0+d2FpdCk7CisJCQlkZXJlZl9tYWRfYWdlbnQobWFkX2FnZW50X3ByaXYpOwogCQkJcmV0dXJuOwogCQl9CiAJCWliX21hcmtfbWFkX2RvbmUobWFkX3NlbmRfd3IpOwpAQCAtMTc5Myw4ICsxNzk1LDcgQEAKIAl9IGVsc2UgewogCQltYWRfYWdlbnRfcHJpdi0+YWdlbnQucmVjdl9oYW5kbGVyKCZtYWRfYWdlbnRfcHJpdi0+YWdlbnQsCiAJCQkJCQkgICBtYWRfcmVjdl93Yyk7Ci0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKQotCQkJd2FrZV91cCgmbWFkX2FnZW50X3ByaXYtPndhaXQpOworCQlkZXJlZl9tYWRfYWdlbnQobWFkX2FnZW50X3ByaXYpOwogCX0KIH0KIApAQCAtMjAyNCw4ICsyMDI1LDcgQEAKIAkJCQkJCSAgIG1hZF9zZW5kX3djKTsKIAogCS8qIFJlbGVhc2UgcmVmZXJlbmNlIG9uIGFnZW50IHRha2VuIHdoZW4gc2VuZGluZyAqLwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpKQotCQl3YWtlX3VwKCZtYWRfYWdlbnRfcHJpdi0+d2FpdCk7CisJZGVyZWZfbWFkX2FnZW50KG1hZF9hZ2VudF9wcml2KTsKIAlyZXR1cm47CiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hZF9hZ2VudF9wcml2LT5sb2NrLCBmbGFncyk7CkBAIC0yMzExLDYgKzIzMTEsNyBAQAogCQlsb2NhbCA9IGxpc3RfZW50cnkobWFkX2FnZW50X3ByaXYtPmxvY2FsX2xpc3QubmV4dCwKIAkJCQkgICBzdHJ1Y3QgaWJfbWFkX2xvY2FsX3ByaXZhdGUsCiAJCQkJICAgY29tcGxldGlvbl9saXN0KTsKKwkJbGlzdF9kZWwoJmxvY2FsLT5jb21wbGV0aW9uX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpZiAobG9jYWwtPm1hZF9wcml2KSB7CiAJCQlyZWN2X21hZF9hZ2VudCA9IGxvY2FsLT5yZWN2X21hZF9hZ2VudDsKQEAgLTIzNjIsNyArMjM2Myw2IEBACiAJCQkJCQkgICAmbWFkX3NlbmRfd2MpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlsaXN0X2RlbCgmbG9jYWwtPmNvbXBsZXRpb25fbGlzdCk7CiAJCWF0b21pY19kZWMoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCk7CiAJCWlmICghcmVjdikKIAkJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIGxvY2FsLT5tYWRfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaAppbmRleCA2YzljMTMzLi5iNGZhMjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpZm5kZWYgX19JQl9NQURfUFJJVl9IX18KICNkZWZpbmUgX19JQl9NQURfUFJJVl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0xMDgsNyArMTA5LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJtcHBfbGlzdDsKIAogCWF0b21pY190IHJlZmNvdW50OwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKIH07CiAKIHN0cnVjdCBpYl9tYWRfc25vb3BfcHJpdmF0ZSB7CkBAIC0xMTcsNyArMTE4LDcgQEAKIAlpbnQgc25vb3BfaW5kZXg7CiAJaW50IG1hZF9zbm9vcF9mbGFnczsKIAlhdG9taWNfdCByZWZjb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CiB9OwogCiBzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwppbmRleCBkZmQ0ZTU4Li5kNDcwNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHdvcmtfc3RydWN0IHRpbWVvdXRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2xlYW51cF93b3JrOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKIAllbnVtIHJtcHBfc3RhdGUgc3RhdGU7CiAJc3BpbmxvY2tfdCBsb2NrOwogCWF0b21pY190IHJlZmNvdW50OwpAQCAtNjksMTAgKzY5LDE2IEBACiAJdTggbWV0aG9kOwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRlcmVmX3JtcHBfcmVjdihzdHJ1Y3QgbWFkX3JtcHBfcmVjdiAqcm1wcF9yZWN2KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZybXBwX3JlY3YtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJnJtcHBfcmVjdi0+Y29tcCk7Cit9CisKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcm1wcF9yZWN2KHN0cnVjdCBtYWRfcm1wcF9yZWN2ICpybXBwX3JlY3YpCiB7Ci0JYXRvbWljX2RlYygmcm1wcF9yZWN2LT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChybXBwX3JlY3YtPndhaXQsICFhdG9taWNfcmVhZCgmcm1wcF9yZWN2LT5yZWZjb3VudCkpOworCWRlcmVmX3JtcHBfcmVjdihybXBwX3JlY3YpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJtcHBfcmVjdi0+Y29tcCk7CiAJaWJfZGVzdHJveV9haChybXBwX3JlY3YtPmFoKTsKIAlrZnJlZShybXBwX3JlY3YpOwogfQpAQCAtMjUzLDcgKzI1OSw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlybXBwX3JlY3YtPmFnZW50ID0gYWdlbnQ7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcm1wcF9yZWN2LT53YWl0KTsKKwlpbml0X2NvbXBsZXRpb24oJnJtcHBfcmVjdi0+Y29tcCk7CiAJSU5JVF9XT1JLKCZybXBwX3JlY3YtPnRpbWVvdXRfd29yaywgcmVjdl90aW1lb3V0X2hhbmRsZXIsIHJtcHBfcmVjdik7CiAJSU5JVF9XT1JLKCZybXBwX3JlY3YtPmNsZWFudXBfd29yaywgcmVjdl9jbGVhbnVwX2hhbmRsZXIsIHJtcHBfcmVjdik7CiAJc3Bpbl9sb2NrX2luaXQoJnJtcHBfcmVjdi0+bG9jayk7CkBAIC0yNzksMTIgKzI4NSw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXJlZl9ybXBwX3JlY3Yoc3RydWN0IG1hZF9ybXBwX3JlY3YgKnJtcHBfcmVjdikKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcm1wcF9yZWN2LT5yZWZjb3VudCkpCi0JCXdha2VfdXAoJnJtcHBfcmVjdi0+d2FpdCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbWFkX3JtcHBfcmVjdiAqCiBmaW5kX3JtcHBfcmVjdihzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKmFnZW50LAogCSAgICAgICBzdHJ1Y3QgaWJfbWFkX3JlY3Zfd2MgKm1hZF9yZWN2X3djKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKaW5kZXggMTUxMjFjYi4uMjFmOTI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIAlzd2l0Y2ggKHdpZHRoKSB7CiAJY2FzZSA0OgogCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAob3V0X21hZC0+ZGF0YVs0MCArIG9mZnNldCAvIDhdID4+Ci0JCQkJCSAgICAob2Zmc2V0ICUgNCkpICYgMHhmKTsKKwkJCQkJICAgICg0IC0gKG9mZnNldCAlIDgpKSkgJiAweGYpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIG91dF9tYWQtPmRhdGFbNDAgKyBvZmZzZXQgLyA4XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCmluZGV4IGY2YTA1OTYuLjkxNjRhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCkBAIC0zMiw2ICszMiw4IEBACiAgKgogICogJElkOiB1Y20uYyAyNTk0IDIwMDUtMDYtMTMgMTk6NDY6MDJaIGxpYm9yICQKICAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNzIsNyArNzQsNyBAQAogCiBzdHJ1Y3QgaWJfdWNtX2NvbnRleHQgewogCWludCAgICAgICAgICAgICAgICAgaWQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgICB3YWl0OworCXN0cnVjdCBjb21wbGV0aW9uICAgY29tcDsKIAlhdG9taWNfdCAgICAgICAgICAgIHJlZjsKIAlpbnQJCSAgICBldmVudHNfcmVwb3J0ZWQ7CiAKQEAgLTEzOCw3ICsxNDAsNyBAQAogc3RhdGljIHZvaWQgaWJfdWNtX2N0eF9wdXQoc3RydWN0IGliX3VjbV9jb250ZXh0ICpjdHgpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmKSkKLQkJd2FrZV91cCgmY3R4LT53YWl0KTsKKwkJY29tcGxldGUoJmN0eC0+Y29tcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGliX3VjbV9uZXdfY21faWQoaW50IGV2ZW50KQpAQCAtMTc4LDcgKzE4MCw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJYXRvbWljX3NldCgmY3R4LT5yZWYsIDEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0eC0+d2FpdCk7CisJaW5pdF9jb21wbGV0aW9uKCZjdHgtPmNvbXApOwogCWN0eC0+ZmlsZSA9IGZpbGU7CiAJSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRzKTsKIApAQCAtNTg2LDggKzU4OCw4IEBACiAJaWYgKElTX0VSUihjdHgpKQogCQlyZXR1cm4gUFRSX0VSUihjdHgpOwogCi0JYXRvbWljX2RlYygmY3R4LT5yZWYpOwotCXdhaXRfZXZlbnQoY3R4LT53YWl0LCAhYXRvbWljX3JlYWQoJmN0eC0+cmVmKSk7CisJaWJfdWNtX2N0eF9wdXQoY3R4KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjdHgtPmNvbXApOwogCiAJLyogTm8gbmV3IGV2ZW50cyB3aWxsIGJlIGdlbmVyYXRlZCBhZnRlciBkZXN0cm95aW5nIHRoZSBjbV9pZC4gKi8KIAlpYl9kZXN0cm95X2NtX2lkKGN0eC0+Y21faWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jCmluZGV4IDM2YTMyYzMuLmVmZTE0N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tZW0uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWVtLmMKQEAgLTIxMSw4ICsyMTEsMTAgQEAKIAkgKi8KIAogCXdvcmsgPSBrbWFsbG9jKHNpemVvZiAqd29yaywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3b3JrKQorCWlmICghd29yaykgeworCQltbXB1dChtbSk7CiAJCXJldHVybjsKKwl9CiAKIAlJTklUX1dPUksoJndvcmstPndvcmssIGliX3VtZW1fYWNjb3VudCwgd29yayk7CiAJd29yay0+bW0gICA9IG1tOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKaW5kZXggY2FlMDg0NS4uYjc4ZTdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCkBAIC00NSw2ICs0NSw0MCBAQAogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KICNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CiAKK2ludCBpYl9yYXRlX3RvX211bHQoZW51bSBpYl9yYXRlIHJhdGUpCit7CisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSBJQl9SQVRFXzJfNV9HQlBTOiByZXR1cm4gIDE7CisJY2FzZSBJQl9SQVRFXzVfR0JQUzogICByZXR1cm4gIDI7CisJY2FzZSBJQl9SQVRFXzEwX0dCUFM6ICByZXR1cm4gIDQ7CisJY2FzZSBJQl9SQVRFXzIwX0dCUFM6ICByZXR1cm4gIDg7CisJY2FzZSBJQl9SQVRFXzMwX0dCUFM6ICByZXR1cm4gMTI7CisJY2FzZSBJQl9SQVRFXzQwX0dCUFM6ICByZXR1cm4gMTY7CisJY2FzZSBJQl9SQVRFXzYwX0dCUFM6ICByZXR1cm4gMjQ7CisJY2FzZSBJQl9SQVRFXzgwX0dCUFM6ICByZXR1cm4gMzI7CisJY2FzZSBJQl9SQVRFXzEyMF9HQlBTOiByZXR1cm4gNDg7CisJZGVmYXVsdDoJICAgICAgIHJldHVybiAtMTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGliX3JhdGVfdG9fbXVsdCk7CisKK2VudW0gaWJfcmF0ZSBtdWx0X3RvX2liX3JhdGUoaW50IG11bHQpCit7CisJc3dpdGNoIChtdWx0KSB7CisJY2FzZSAxOiAgcmV0dXJuIElCX1JBVEVfMl81X0dCUFM7CisJY2FzZSAyOiAgcmV0dXJuIElCX1JBVEVfNV9HQlBTOworCWNhc2UgNDogIHJldHVybiBJQl9SQVRFXzEwX0dCUFM7CisJY2FzZSA4OiAgcmV0dXJuIElCX1JBVEVfMjBfR0JQUzsKKwljYXNlIDEyOiByZXR1cm4gSUJfUkFURV8zMF9HQlBTOworCWNhc2UgMTY6IHJldHVybiBJQl9SQVRFXzQwX0dCUFM7CisJY2FzZSAyNDogcmV0dXJuIElCX1JBVEVfNjBfR0JQUzsKKwljYXNlIDMyOiByZXR1cm4gSUJfUkFURV84MF9HQlBTOworCWNhc2UgNDg6IHJldHVybiBJQl9SQVRFXzEyMF9HQlBTOworCWRlZmF1bHQ6IHJldHVybiBJQl9SQVRFX1BPUlRfQ1VSUkVOVDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG11bHRfdG9faWJfcmF0ZSk7CisKIC8qIFByb3RlY3Rpb24gZG9tYWlucyAqLwogCiBzdHJ1Y3QgaWJfcGQgKmliX2FsbG9jX3BkKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhNjdjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZpZyBJUEFUSF9DT1JFCisJdHJpc3RhdGUgIlBhdGhTY2FsZSBJbmZpbmlQYXRoIERyaXZlciIKKwlkZXBlbmRzIG9uIDY0QklUICYmIFBDSV9NU0kgJiYgTkVUCisJLS0taGVscC0tLQorCVRoaXMgaXMgYSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBQYXRoU2NhbGUgSW5maW5pUGF0aCBob3N0IGNoYW5uZWwKKwlhZGFwdGVycyAoSENBcykgYmFzZWQgb24gdGhlIEhULTQwMCBhbmQgUEUtODAwIGNoaXBzLgorCitjb25maWcgSU5GSU5JQkFORF9JUEFUSAorCXRyaXN0YXRlICJQYXRoU2NhbGUgSW5maW5pUGF0aCBWZXJicyBEcml2ZXIiCisJZGVwZW5kcyBvbiBJUEFUSF9DT1JFICYmIElORklOSUJBTkQKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGRyaXZlciB0aGF0IHByb3ZpZGVzIEluZmluaUJhbmQgdmVyYnMgc3VwcG9ydCBmb3IKKwlQYXRoU2NhbGUgSW5maW5pUGF0aCBob3N0IGNoYW5uZWwgYWRhcHRlcnMgKEhDQXMpLiAgVGhpcworCWFsbG93cyB0aGVzZSBkZXZpY2VzIHRvIGJlIHVzZWQgd2l0aCBib3RoIGtlcm5lbCB1cHBlciBsZXZlbAorCXByb3RvY29scyBzdWNoIGFzIElQLW92ZXItSW5maW5pQmFuZCBhcyB3ZWxsIGFzIHdpdGggdXNlcnNwYWNlCisJYXBwbGljYXRpb25zIChpbiBjb25qdW5jdGlvbiB3aXRoIEluZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMDg0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQpAQCAtMCwwICsxLDM2IEBACitFWFRSQV9DRkxBR1MgKz0gLURJUEFUSF9JRFNUUj0nIlBhdGhTY2FsZSBrZXJuZWwub3JnIGRyaXZlciInIFwKKwktRElQQVRIX0tFUk5fVFlQRT0wCisKK29iai0kKENPTkZJR19JUEFUSF9DT1JFKSArPSBpcGF0aF9jb3JlLm8KK29iai0kKENPTkZJR19JTkZJTklCQU5EX0lQQVRIKSArPSBpYl9pcGF0aC5vCisKK2lwYXRoX2NvcmUteSA6PSBcCisJaXBhdGhfZGlhZy5vIFwKKwlpcGF0aF9kcml2ZXIubyBcCisJaXBhdGhfZWVwcm9tLm8gXAorCWlwYXRoX2ZpbGVfb3BzLm8gXAorCWlwYXRoX2ZzLm8gXAorCWlwYXRoX2h0NDAwLm8gXAorCWlwYXRoX2luaXRfY2hpcC5vIFwKKwlpcGF0aF9pbnRyLm8gXAorCWlwYXRoX2xheWVyLm8gXAorCWlwYXRoX3BlODAwLm8gXAorCWlwYXRoX3N0YXRzLm8gXAorCWlwYXRoX3N5c2ZzLm8gXAorCWlwYXRoX3VzZXJfcGFnZXMubworCitpcGF0aF9jb3JlLSQoQ09ORklHX1g4Nl82NCkgKz0gaXBhdGhfd2NfeDg2XzY0Lm8KKworaWJfaXBhdGgteSA6PSBcCisJaXBhdGhfY3EubyBcCisJaXBhdGhfa2V5cy5vIFwKKwlpcGF0aF9tYWQubyBcCisJaXBhdGhfbXIubyBcCisJaXBhdGhfcXAubyBcCisJaXBhdGhfcmMubyBcCisJaXBhdGhfcnVjLm8gXAorCWlwYXRoX3NycS5vIFwKKwlpcGF0aF91Yy5vIFwKKwlpcGF0aF91ZC5vIFwKKwlpcGF0aF92ZXJicy5vIFwKKwlpcGF0aF92ZXJic19tY2FzdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY29tbW9uLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhNTUyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaApAQCAtMCwwICsxLDYxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0lQQVRIX0NPTU1PTl9ICisjZGVmaW5lIF9JUEFUSF9DT01NT05fSAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluZXMsIHN0cnVjdHVyZXMsIGV0Yy4gdGhhdCBhcmUgdXNlZAorICogdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgY29kZS4KKyAqLworCisvKiBUaGlzIGlzIHRoZSBJRUVFLWFzc2lnbmVkIE9VSSBmb3IgUGF0aFNjYWxlLCBJbmMuICovCisjZGVmaW5lIElQQVRIX1NSQ19PVUlfMSAweDAwCisjZGVmaW5lIElQQVRIX1NSQ19PVUlfMiAweDExCisjZGVmaW5lIElQQVRIX1NSQ19PVUlfMyAweDc1CisKKy8qIHZlcnNpb24gb2YgcHJvdG9jb2wgaGVhZGVyIChrbm93biB0byBjaGlwIGFsc28pLiBJbiB0aGUgbG9uZyBydW4sCisgKiB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSBhbmQgYWNjZXB0IGEgcmFuZ2Ugb2YgdmVyc2lvbiBudW1iZXJzOworICogZm9yIG5vdyB3ZSBvbmx5IGFjY2VwdCBvbmUsIGFuZCBpdCdzIGNvbXBpbGVkIGluLgorICovCisjZGVmaW5lIElQU19QUk9UT19WRVJTSU9OIDIKKworLyoKKyAqIFRoZXNlIGFyZSBjb21waWxlIHRpbWUgY29uc3RhbnRzIHRoYXQgeW91IG1heSB3YW50IHRvIGVuYWJsZSBvciBkaXNhYmxlCisgKiBpZiB5b3UgYXJlIHRyeWluZyB0byBkZWJ1ZyBwcm9ibGVtcyB3aXRoIGNvZGUgb3IgcGVyZm9ybWFuY2UuCisgKiBJUEFUSF9WRVJCT1NFX1RSQUNJTkcgZGVmaW5lIGFzIDEgaWYgeW91IHdhbnQgYWRkaXRpb25hbCB0cmFjaW5nIGluCisgKiBmYXN0cGF0aCBjb2RlCisgKiBJUEFUSF9UUkFDRV9SRUdXUklURVMgZGVmaW5lIGFzIDEgaWYgeW91IHdhbnQgcmVnaXN0ZXIgd3JpdGVzIHRvIGJlCisgKiB0cmFjZWQgaW4gZmFzcGF0aCBjb2RlCisgKiBfSVBBVEhfVFJBQ0lORyBkZWZpbmUgYXMgMCBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIHRyYWNpbmcgaW4gYQorICogY29tcGlsYXRpb24gdW5pdAorICogX0lQQVRIX0RFQlVHR0lORyBkZWZpbmUgYXMgMCBpZiB5b3Ugd2FudCB0byByZW1vdmUgZGVidWcgcHJpbnRzCisgKi8KKworLyoKKyAqIFRoZSB2YWx1ZSBpbiB0aGUgQlRIIFFQIGZpZWxkIHRoYXQgSW5maW5pUGF0aCB1c2VzIHRvIGRpZmZlcmVudGlhdGUKKyAqIGFuIGluZmluaXBhdGggcHJvdG9jb2wgSUIgcGFja2V0IHZzIHN0YW5kYXJkIElCIHRyYW5zcG9ydAorICovCisjZGVmaW5lIElQQVRIX0tEX1FQIDB4NjU2Yjc5CisKKy8qCisgKiB2YWxpZCBzdGF0ZXMgcGFzc2VkIHRvIGlwYXRoX3NldF9saW5rc3RhdGUoKSB1c2VyIGNhbGwKKyAqLworI2RlZmluZSBJUEFUSF9JQl9MSU5LRE9XTgkJMAorI2RlZmluZSBJUEFUSF9JQl9MSU5LQVJNCQkxCisjZGVmaW5lIElQQVRIX0lCX0xJTktBQ1RJVkUJCTIKKyNkZWZpbmUgSVBBVEhfSUJfTElOS0lOSVQJCTMKKyNkZWZpbmUgSVBBVEhfSUJfTElOS0RPV05fU0xFRVAJCTQKKyNkZWZpbmUgSVBBVEhfSUJfTElOS0RPV05fRElTQUJMRQk1CisKKy8qCisgKiBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIuICBGb3Igbm93LCBhdCBsZWFzdCwgdGhpcyBpcyBnbG9iYWwKKyAqIHRvIGFsbCBtaW5vciBkZXZpY2VzLgorICovCitzdHJ1Y3QgaW5maW5pcGF0aF9zdGF0cyB7CisJLyogbnVtYmVyIG9mIGludGVycnVwdHMgdGFrZW4gKi8KKwlfX3U2NCBzcHNfaW50czsKKwkvKiBudW1iZXIgb2YgaW50ZXJydXB0cyBmb3IgZXJyb3JzICovCisJX191NjQgc3BzX2VycmludHM7CisJLyogbnVtYmVyIG9mIGVycm9ycyBmcm9tIGNoaXAgKG5vdCBpbmNsLiBwYWNrZXQgZXJyb3JzIG9yIENSQykgKi8KKwlfX3U2NCBzcHNfZXJyczsKKwkvKiBudW1iZXIgb2YgcGFja2V0IGVycm9ycyBmcm9tIGNoaXAgb3RoZXIgdGhhbiBDUkMgKi8KKwlfX3U2NCBzcHNfcGt0ZXJyczsKKwkvKiBudW1iZXIgb2YgcGFja2V0cyB3aXRoIENSQyBlcnJvcnMgKElDUkMgYW5kIFZDUkMpICovCisJX191NjQgc3BzX2NyY2VycnM7CisJLyogbnVtYmVyIG9mIGhhcmR3YXJlIGVycm9ycyByZXBvcnRlZCAocGFyaXR5LCBldGMuKSAqLworCV9fdTY0IHNwc19od2VycnM7CisJLyogbnVtYmVyIG9mIHRpbWVzIElCIGxpbmsgY2hhbmdlZCBzdGF0ZSB1bmV4cGVjdGVkbHkgKi8KKwlfX3U2NCBzcHNfaWJsaW5rOworCS8qIG5vIGxvbmdlciB1c2VkOyBsZWZ0IGZvciBjb21wYXRpYmlsaXR5ICovCisJX191NjQgc3BzX3VudXNlZDM7CisJLyogbnVtYmVyIG9mIGtlcm5lbCAocG9ydDApIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwlfX3U2NCBzcHNfcG9ydDBwa3RzOworCS8qIG51bWJlciBvZiAiZXRoZXJuZXQiIHBhY2tldHMgc2VudCBieSBkcml2ZXIgKi8KKwlfX3U2NCBzcHNfZXRoZXJfc3BrdHM7CisJLyogbnVtYmVyIG9mICJldGhlcm5ldCIgcGFja2V0cyByZWNlaXZlZCBieSBkcml2ZXIgKi8KKwlfX3U2NCBzcHNfZXRoZXJfcnBrdHM7CisJLyogbnVtYmVyIG9mIFNNQSBwYWNrZXRzIHNlbnQgYnkgZHJpdmVyICovCisJX191NjQgc3BzX3NtYV9zcGt0czsKKwkvKiBudW1iZXIgb2YgU01BIHBhY2tldHMgcmVjZWl2ZWQgYnkgZHJpdmVyICovCisJX191NjQgc3BzX3NtYV9ycGt0czsKKwkvKiBudW1iZXIgb2YgdGltZXMgYWxsIHBvcnRzIHJjdmhkcnEgd2FzIGZ1bGwgYW5kIHBhY2tldCBkcm9wcGVkICovCisJX191NjQgc3BzX2hkcnFmdWxsOworCS8qIG51bWJlciBvZiB0aW1lcyBhbGwgcG9ydHMgZWdydGlkIHdhcyBmdWxsIGFuZCBwYWNrZXQgZHJvcHBlZCAqLworCV9fdTY0IHNwc19ldGlkZnVsbDsKKwkvKgorCSAqIG51bWJlciBvZiB0aW1lcyB3ZSB0cmllZCB0byBzZW5kIGZyb20gZHJpdmVyLCBidXQgbm8gcGlvIGJ1ZmZlcnMKKwkgKiBhdmFpbAorCSAqLworCV9fdTY0IHNwc19ub3Bpb2J1ZnM7CisJLyogbnVtYmVyIG9mIHBvcnRzIGN1cnJlbnRseSBvcGVuICovCisJX191NjQgc3BzX3BvcnRzOworCS8qIGxpc3Qgb2YgcGtleXMgKG90aGVyIHRoYW4gZGVmYXVsdCkgYWNjZXB0ZWQgKDAgbWVhbnMgbm90IHNldCkgKi8KKwlfX3UxNiBzcHNfcGtleXNbNF07CisJLyogbGlkcyBmb3IgdXAgdG8gNCBpbmZpbmlwYXRocywgaW5kZXhlZCBieSBpbmZpbmlwYXRoICMgKi8KKwlfX3UxNiBzcHNfbGlkWzRdOworCS8qIG51bWJlciBvZiB1c2VyIHBvcnRzIHBlciBjaGlwIChub3QgSUIgcG9ydHMpICovCisJX191MzIgc3BzX25wb3J0czsKKwkvKiBub3Qgb3VyIGludGVycnVwdCwgb3IgYWxyZWFkeSBoYW5kbGVkICovCisJX191MzIgc3BzX251bGxpbnRyOworCS8qIG1heCBudW1iZXIgb2YgcGFja2V0cyBoYW5kbGVkIHBlciByZWNlaXZlIGNhbGwgKi8KKwlfX3UzMiBzcHNfbWF4cGt0c19jYWxsOworCS8qIGF2ZyBudW1iZXIgb2YgcGFja2V0cyBoYW5kbGVkIHBlciByZWNlaXZlIGNhbGwgKi8KKwlfX3UzMiBzcHNfYXZncGt0c19jYWxsOworCS8qIHRvdGFsIG51bWJlciBvZiBwYWdlcyBsb2NrZWQgKi8KKwlfX3U2NCBzcHNfcGFnZWxvY2tzOworCS8qIHRvdGFsIG51bWJlciBvZiBwYWdlcyB1bmxvY2tlZCAqLworCV9fdTY0IHNwc19wYWdldW5sb2NrczsKKwkvKgorCSAqIE51bWJlciBvZiBwYWNrZXRzIGRyb3BwZWQgaW4ga2VybmVsIG90aGVyIHRoYW4gZXJyb3JzIChldGhlcgorCSAqIHBhY2tldHMgaWYgaXBhdGggbm90IGNvbmZpZ3VyZWQsIHNtYS9tYWQsIGV0Yy4pCisJICovCisJX191NjQgc3BzX2tyZHJvcHM7CisJLyogbWxpZHMgZm9yIHVwIHRvIDQgaW5maW5pcGF0aHMsIGluZGV4ZWQgYnkgaW5maW5pcGF0aCAjICovCisJX191MTYgc3BzX21saWRbNF07CisJLyogcGFkIGZvciBmdXR1cmUgZ3Jvd3RoICovCisJX191NjQgX19zcHNfcGFkWzQ1XTsKK307CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHN0YXR1cyBiaXRzIHJlYWRhYmxlIChpbiBhc2NpaSBmb3JtLCA2NGJpdCB2YWx1ZSkKKyAqIGZyb20gdGhlICJzdGF0dXMiIHN5c2ZzIGZpbGUuCisgKi8KKyNkZWZpbmUgSVBBVEhfU1RBVFVTX0lOSVRURUQgICAgICAgMHgxCS8qIGJhc2ljIGluaXRpYWxpemF0aW9uIGRvbmUgKi8KKyNkZWZpbmUgSVBBVEhfU1RBVFVTX0RJU0FCTEVEICAgICAgMHgyCS8qIGhhcmR3YXJlIGRpc2FibGVkICovCisvKiBEZXZpY2UgaGFzIGJlZW4gZGlzYWJsZWQgdmlhIGFkbWluIHJlcXVlc3QgKi8KKyNkZWZpbmUgSVBBVEhfU1RBVFVTX0FETUlOX0RJU0FCTEVEICAgIDB4NAorI2RlZmluZSBJUEFUSF9TVEFUVVNfT0lCX1NNQSAgICAgICAweDgJLyogaXBhdGhfbWFkIGtlcm5lbCBTTUEgcnVubmluZyAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfU01BICAgICAgICAgIDB4MTAJLyogdXNlciBTTUEgcnVubmluZyAqLworLyogQ2hpcCBoYXMgYmVlbiBmb3VuZCBhbmQgaW5pdHRlZCAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfQ0hJUF9QUkVTRU5UIDB4MjAKKy8qIElCIGxpbmsgaXMgYXQgQUNUSVZFLCB1c2FibGUgZm9yIGRhdGEgdHJhZmZpYyAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfSUJfUkVBRFkgICAgIDB4NDAKKy8qIGxpbmsgaXMgY29uZmlndXJlZCwgTElELCBNVFUsIGV0Yy4gaGF2ZSBiZWVuIHNldCAqLworI2RlZmluZSBJUEFUSF9TVEFUVVNfSUJfQ09ORiAgICAgIDB4ODAKKy8qIG5vIGxpbmsgZXN0YWJsaXNoZWQsIHByb2JhYmx5IG5vIGNhYmxlICovCisjZGVmaW5lIElQQVRIX1NUQVRVU19JQl9OT0NBQkxFICAweDEwMAorLyogQSBGYXRhbCBoYXJkd2FyZSBlcnJvciBoYXMgb2NjdXJyZWQuICovCisjZGVmaW5lIElQQVRIX1NUQVRVU19IV0VSUk9SICAgICAweDIwMAorCisvKgorICogVGhlIGxpc3Qgb2YgdXNlcm1vZGUgYWNjZXNzaWJsZSByZWdpc3RlcnMuICBBbHNvIHNlZSBSZWdfKiBsYXRlciBpbiBmaWxlLgorICovCit0eXBlZGVmIGVudW0gX2lwYXRoX3VyZWcgeworCS8qIChSTykgIERNQSBSY3ZIZHIgdG8gYmUgdXNlZCBuZXh0LiAqLworCXVyX3JjdmhkcnRhaWwgPSAwLAorCS8qIChSVykgIFJjdkhkciBlbnRyeSB0byBiZSBwcm9jZXNzZWQgbmV4dCBieSBob3N0LiAqLworCXVyX3JjdmhkcmhlYWQgPSAxLAorCS8qIChSTykgIEluZGV4IG9mIG5leHQgRWFnZXIgaW5kZXggdG8gdXNlLiAqLworCXVyX3JjdmVncmluZGV4dGFpbCA9IDIsCisJLyogKFJXKSAgRWFnZXIgVElEIHRvIGJlIHByb2Nlc3NlZCBuZXh0ICovCisJdXJfcmN2ZWdyaW5kZXhoZWFkID0gMywKKwkvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG1heCByZWdpc3RlciBudW1iZXIuICovCisJX0lQQVRIX1VyZWdNYXgKK30gaXBhdGhfdXJlZzsKKworLyogYml0IHZhbHVlcyBmb3Igc3BpX3J1bnRpbWVfZmxhZ3MgKi8KKyNkZWZpbmUgSVBBVEhfUlVOVElNRV9IVAkweDEKKyNkZWZpbmUgSVBBVEhfUlVOVElNRV9QQ0lFCTB4MgorI2RlZmluZSBJUEFUSF9SVU5USU1FX0ZPUkNFX1dDX09SREVSCTB4NAorI2RlZmluZSBJUEFUSF9SVU5USU1FX1JDVkhEUl9DT1BZCTB4OAorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgYnkgaXBhdGhfdXNlcmluaXQoKSBpbW1lZGlhdGVseSBhZnRlcgorICogb3BlbiB0byBnZXQgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgaW5mbywgYW5kIGluZm8gc3BlY2lmaWMgdG8gdGhpcworICogaW5zdGFuY2UuCisgKgorICogVGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIGV4cGxpY3QgcGFkIGZpZWxkcyB3aGVyZSB0eXBlIHNpemVzCisgKiBtYXkgcmVzdWx0IGluIGRpZmZlcmVudCBhbGlnbm1lbnRzIGJldHdlZW4gMzIgYW5kIDY0IGJpdAorICogcHJvZ3JhbXMsIHNpbmNlIHRoZSA2NCBiaXQgKiBiaXQga2VybmVsIHJlcXVpcmVzIHRoZSB1c2VyIGNvZGUKKyAqIHRvIGhhdmUgbWF0Y2hpbmcgb2Zmc2V0cworICovCitzdHJ1Y3QgaXBhdGhfYmFzZV9pbmZvIHsKKwkvKiB2ZXJzaW9uIG9mIGhhcmR3YXJlLCBmb3IgZmVhdHVyZSBjaGVja2luZy4gKi8KKwlfX3UzMiBzcGlfaHdfdmVyc2lvbjsKKwkvKiB2ZXJzaW9uIG9mIHNvZnR3YXJlLCBmb3IgZmVhdHVyZSBjaGVja2luZy4gKi8KKwlfX3UzMiBzcGlfc3dfdmVyc2lvbjsKKwkvKiBJbmZpbmlQYXRoIHBvcnQgYXNzaWduZWQsIGdvZXMgaW50byBzZW50IHBhY2tldHMgKi8KKwlfX3UzMiBzcGlfcG9ydDsKKwkvKgorCSAqIElCIE1UVSwgcGFja2V0cyBJQiBkYXRhIG11c3QgYmUgbGVzcyB0aGFuIHRoaXMuCisJICogVGhlIE1UVSBpcyBpbiBieXRlcywgYW5kIHdpbGwgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLgorCSAqLworCV9fdTMyIHNwaV9tdHU7CisJLyoKKwkgKiBTaXplIG9mIGEgUElPIGJ1ZmZlci4gIEFueSBnaXZlbiBwYWNrZXQncyB0b3RhbCBzaXplIG11c3QgYmUgbGVzcworCSAqIHRoYW4gdGhpcyAoaW4gd29yZHMpLiAgSW5jbHVkZWQgaXMgdGhlIHN0YXJ0aW5nIGNvbnRyb2wgd29yZCwgc28KKwkgKiBpZiA1MTMgaXMgcmV0dXJuZWQsIHRoZW4gdG90YWwgcGt0IHNpemUgaXMgNTEyIHdvcmRzIG9yIGxlc3MuCisJICovCisJX191MzIgc3BpX3Bpb3NpemU7CisJLyogc2l6ZSBvZiB0aGUgVElEIGNhY2hlIGluIGluZmluaXBhdGgsIGluIGVudHJpZXMgKi8KKwlfX3UzMiBzcGlfdGlkY250OworCS8qIHNpemUgb2YgdGhlIFRJRCBFYWdlciBsaXN0IGluIGluZmluaXBhdGgsIGluIGVudHJpZXMgKi8KKwlfX3UzMiBzcGlfdGlkZWdyY250OworCS8qIHNpemUgb2YgYSBzaW5nbGUgcmVjZWl2ZSBoZWFkZXIgcXVldWUgZW50cnkuICovCisJX191MzIgc3BpX3JjdmhkcmVudF9zaXplOworCS8qCisJICogQ291bnQgb2YgcmVjZWl2ZSBoZWFkZXIgcXVldWUgZW50cmllcyBhbGxvY2F0ZWQuCisJICogVGhpcyBtYXkgYmUgbGVzcyB0aGFuIHRoZSBzcHVfcmN2aGRyY250IHBhc3NlZCBpbiEuCisJICovCisJX191MzIgc3BpX3Jjdmhkcl9jbnQ7CisKKwkvKiBwZXItY2hpcCBhbmQgb3RoZXIgcnVudGltZSBmZWF0dXJlcyBiaXRtYXAgKElQQVRIX1JVTlRJTUVfKikgKi8KKwlfX3UzMiBzcGlfcnVudGltZV9mbGFnczsKKworCS8qIGFkZHJlc3Mgd2hlcmUgcmVjZWl2ZSBidWZmZXIgcXVldWUgaXMgbWFwcGVkIGludG8gKi8KKwlfX3U2NCBzcGlfcmN2aGRyX2Jhc2U7CisKKwkvKiB1c2VyIHByb2dyYW0uICovCisKKwkvKiBiYXNlIGFkZHJlc3Mgb2YgZWFnZXIgVElEIHJlY2VpdmUgYnVmZmVycy4gKi8KKwlfX3U2NCBzcGlfcmN2X2VncmJ1ZnM7CisKKwkvKiBBbGxvY2F0ZWQgYnkgaW5pdGlhbGl6YXRpb24gY29kZSwgbm90IGJ5IHByb3RvY29sLiAqLworCisJLyoKKwkgKiBTaXplIG9mIGVhY2ggVElEIGJ1ZmZlciBpbiBob3N0IG1lbW9yeSwgc3RhcnRpbmcgYXQKKwkgKiBzcGlfcmN2X2VncmJ1ZnMuICBUaGUgYnVmZmVycyBhcmUgdmlydHVhbGx5IGNvbnRpZ3VvdXMuCisJICovCisJX191MzIgc3BpX3Jjdl9lZ3JidWZzaXplOworCS8qCisJICogVGhlIHNwZWNpYWwgUVAgKHF1ZXVlIHBhaXIpIHZhbHVlIHRoYXQgaWRlbnRpZmllcyBhbiBpbmZpbmlwYXRoCisJICogcHJvdG9jb2wgcGFja2V0IGZyb20gc3RhbmRhcmQgSUIgcGFja2V0cy4gIE1vcmUsIHByb2JhYmx5IG11Y2gKKwkgKiBtb3JlLCB0byBiZSBhZGRlZC4KKwkgKi8KKwlfX3UzMiBzcGlfcXBhaXI7CisKKwkvKgorCSAqIFVzZXIgcmVnaXN0ZXIgYmFzZSBmb3IgaW5pdCBjb2RlLCBub3QgdG8gYmUgdXNlZCBkaXJlY3RseSBieQorCSAqIHByb3RvY29sIG9yIGFwcGxpY2F0aW9ucy4KKwkgKi8KKwlfX3U2NCBfX3NwaV91cmVnYmFzZTsKKwkvKgorCSAqIE1heGltdW0gYnVmZmVyIHNpemUgaW4gYnl0ZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIHNpbmdsZSBUSUQKKwkgKiBlbnRyeSAoYXNzdW1pbmcgdGhlIGJ1ZmZlciBpcyBhbGlnbmVkIHRvIHRoaXMgYm91bmRhcnkpLiAgVGhpcyBpcworCSAqIHRoZSBtaW5pbXVtIG9mIHdoYXQgdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBzdXBwb3J0IEd1YXJhbnRlZWQKKwkgKiB0byBiZSBhIHBvd2VyIG9mIDIuCisJICovCisJX191MzIgc3BpX3RpZF9tYXhzaXplOworCS8qCisJICogYWxpZ25tZW50IG9mIGVhY2ggcGlvIHNlbmQgYnVmZmVyIChieXRlIGNvdW50CisJICogdG8gYWRkIHRvIHNwaV9waW9idWZiYXNlIHRvIGdldCB0byBzZWNvbmQgYnVmZmVyKQorCSAqLworCV9fdTMyIHNwaV9waW9hbGlnbjsKKwkvKgorCSAqIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcGlvIGJ1ZmZlciBhdmFpbGFibGUgdG8gdGhpcyBwcm9jZXNzOworCSAqIG5lZWRlZCB0byBkbyBsb29rdXAgaW4gc3BpX3Bpb2F2YWlsYWRkcjsgbm90IGFkZGVkIHRvCisJICogc3BpX3Bpb2J1ZmJhc2UuCisJICovCisJX191MzIgc3BpX3Bpb2luZGV4OworCSAvKiBudW1iZXIgb2YgYnVmZmVycyBtYXBwZWQgZm9yIHRoaXMgcHJvY2VzcyAqLworCV9fdTMyIHNwaV9waW9jbnQ7CisKKwkvKgorCSAqIEJhc2UgYWRkcmVzcyBvZiB3cml0ZW9ubHkgcGlvIGJ1ZmZlcnMgZm9yIHRoaXMgcHJvY2Vzcy4KKwkgKiBFYWNoIGJ1ZmZlciBoYXMgc3BpX3Bpb3NpemUgd29yZHMsIGFuZCBpcyBhbGlnbmVkIG9uIHNwaV9waW9hbGlnbgorCSAqIGJvdW5kYXJpZXMuICBzcGlfcGlvY250IGJ1ZmZlcnMgYXJlIG1hcHBlZCBmcm9tIHRoaXMgYWRkcmVzcworCSAqLworCV9fdTY0IHNwaV9waW9idWZiYXNlOworCisJLyoKKwkgKiBCYXNlIGFkZHJlc3Mgb2YgcmVhZG9ubHkgbWVtb3J5IGNvcHkgb2YgdGhlIHBpb2F2YWlsIHJlZ2lzdGVycy4KKwkgKiBUaGVyZSBhcmUgMiBiaXRzIGZvciBlYWNoIGJ1ZmZlci4KKwkgKi8KKwlfX3U2NCBzcGlfcGlvYXZhaWxhZGRyOworCisJLyoKKwkgKiBBZGRyZXNzIHdoZXJlIGRyaXZlciB1cGRhdGVzIGEgY29weSBvZiB0aGUgaW50ZXJmYWNlIGFuZCBkcml2ZXIKKwkgKiBzdGF0dXMgKElQQVRIX1NUQVRVU18qKSBhcyBhIDY0IGJpdCB2YWx1ZS4gIEl0J3MgZm9sbG93ZWQgYnkgYQorCSAqIHN0cmluZyBpbmRpY2F0aW5nIGhhcmR3YXJlIGVycm9yLCBpZiB0aGVyZSB3YXMgb25lLgorCSAqLworCV9fdTY0IHNwaV9zdGF0dXM7CisKKwkvKiBudW1iZXIgb2YgY2hpcCBwb3J0cyBhdmFpbGFibGUgdG8gdXNlciBwcm9jZXNzZXMgKi8KKwlfX3UzMiBzcGlfbnBvcnRzOworCS8qIHVuaXQgbnVtYmVyIG9mIGNoaXAgd2UgYXJlIHVzaW5nICovCisJX191MzIgc3BpX3VuaXQ7CisJLyogbnVtIGJ1ZnMgaW4gZWFjaCBjb250aWd1b3VzIHNldCAqLworCV9fdTMyIHNwaV9yY3ZfZWdycGVyY2h1bms7CisJLyogc2l6ZSBpbiBieXRlcyBvZiBlYWNoIGNvbnRpZ3VvdXMgc2V0ICovCisJX191MzIgc3BpX3Jjdl9lZ3JjaHVua3NpemU7CisJLyogdG90YWwgc2l6ZSBvZiBtbWFwIHRvIGNvdmVyIGZ1bGwgcmN2ZWdyYnVmZmVycyAqLworCV9fdTMyIHNwaV9yY3ZfZWdyYnVmdG90bGVuOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg4KSkpOworCisKKy8qCisgKiBUaGlzIHZlcnNpb24gbnVtYmVyIGlzIGdpdmVuIHRvIHRoZSBkcml2ZXIgYnkgdGhlIHVzZXIgY29kZSBkdXJpbmcKKyAqIGluaXRpYWxpemF0aW9uIGluIHRoZSBzcHVfdXNlcnZlcnNpb24gZmllbGQgb2YgaXBhdGhfdXNlcl9pbmZvLCBzbworICogdGhlIGRyaXZlciBjYW4gY2hlY2sgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB1c2VyIGNvZGUuCisgKgorICogVGhlIG1ham9yIHZlcnNpb24gY2hhbmdlcyB3aGVuIGRhdGEgc3RydWN0dXJlcworICogY2hhbmdlIGluIGFuIGluY29tcGF0aWJsZSB3YXkuICBUaGUgZHJpdmVyIG11c3QgYmUgdGhlIHNhbWUgb3IgaGlnaGVyCisgKiBmb3IgaW5pdGlhbGl6YXRpb24gdG8gc3VjY2VlZC4gIEluIHNvbWUgY2FzZXMsIGEgaGlnaGVyIHZlcnNpb24KKyAqIGRyaXZlciB3aWxsIG5vdCBpbnRlcm9wZXJhdGUgd2l0aCBvbGRlciBzb2Z0d2FyZSwgYW5kIGluaXRpYWxpemF0aW9uCisgKiB3aWxsIHJldHVybiBhbiBlcnJvci4KKyAqLworI2RlZmluZSBJUEFUSF9VU0VSX1NXTUFKT1IgMQorCisvKgorICogTWlub3IgdmVyc2lvbiBkaWZmZXJlbmNlcyBhcmUgYWx3YXlzIGNvbXBhdGlibGUKKyAqIGEgd2l0aGluIGEgbWFqb3IgdmVyc2lvbiwgaG93ZXZlciBpZiBpZiB1c2VyIHNvZnR3YXJlIGlzIGxhcmdlcgorICogdGhhbiBkcml2ZXIgc29mdHdhcmUsIHNvbWUgbmV3IGZlYXR1cmVzIGFuZC9vciBzdHJ1Y3R1cmUgZmllbGRzCisgKiBtYXkgbm90IGJlIGltcGxlbWVudGVkOyB0aGUgdXNlciBjb2RlIG11c3QgZGVhbCB3aXRoIHRoaXMgaWYgaXQKKyAqIGNhcmVzLCBvciBpdCBtdXN0IGFib3J0IGFmdGVyIGluaXRpYWxpemF0aW9uIHJlcG9ydHMgdGhlIGRpZmZlcmVuY2UKKyAqLworI2RlZmluZSBJUEFUSF9VU0VSX1NXTUlOT1IgMgorCisjZGVmaW5lIElQQVRIX1VTRVJfU1dWRVJTSU9OICgoSVBBVEhfVVNFUl9TV01BSk9SPDwxNikgfCBJUEFUSF9VU0VSX1NXTUlOT1IpCisKKyNkZWZpbmUgSVBBVEhfS0VSTl9UWVBFIDAKKworLyoKKyAqIFNpbWlsYXJseSwgdGhpcyBpcyB0aGUga2VybmVsIHZlcnNpb24gZ29pbmcgYmFjayB0byB0aGUgdXNlci4gIEl0J3MKKyAqIHNsaWdodGx5IGRpZmZlcmVudCwgaW4gdGhhdCB3ZSB3YW50IHRvIHRlbGwgaWYgdGhlIGRyaXZlciB3YXMgYnVpbHQgYXMKKyAqIHBhcnQgb2YgYSBQYXRoU2NhbGUgcmVsZWFzZSwgb3IgZnJvbSB0aGUgZHJpdmVyIGZyb20gT3BlbklCLCBrZXJuZWwub3JnLAorICogb3IgYSBzdGFuZGFyZCBkaXN0cmlidXRpb24sIGZvciBzdXBwb3J0IHJlYXNvbnMuICBUaGUgaGlnaCBiaXQgaXMgMCBmb3IKKyAqIG5vbi1QYXRoU2NhbGUsIGFuZCAxIGZvciBQYXRoU2NhbGUtYnVpbHQvc3VwcGxpZWQuCisgKgorICogSXQncyByZXR1cm5lZCBieSB0aGUgZHJpdmVyIHRvIHRoZSB1c2VyIGNvZGUgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIHRoZQorICogc3BpX3N3X3ZlcnNpb24gZmllbGQgb2YgaXBhdGhfYmFzZV9pbmZvLCBzbyB0aGUgdXNlciBjb2RlIGNhbiBpbiB0dXJuCisgKiBjaGVjayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBrZXJuZWwuCisqLworI2RlZmluZSBJUEFUSF9LRVJOX1NXVkVSU0lPTiAoKElQQVRIX0tFUk5fVFlQRTw8MzEpIHwgSVBBVEhfVVNFUl9TV1ZFUlNJT04pCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gaXBhdGhfdXNlcmluaXQoKSB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUKKyAqIHVzZXIgY29kZSBidWZmZXJzIGFyZSwgc2l6ZXMsIGV0Yy4gICBUaGUgb2Zmc2V0cyBhbmQgc2l6ZXMgb2YgdGhlCisgKiBmaWVsZHMgbXVzdCByZW1haW4gdW5jaGFuZ2VkLCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkuICBJdCBjYW4KKyAqIGJlIGV4dGVuZGVkLCBpZiB1c2VydmVyc2lvbiBpcyBjaGFuZ2VkIHNvIHVzZXIgY29kZSBjYW4gdGVsbCwgaWYgbmVlZGVkCisgKi8KK3N0cnVjdCBpcGF0aF91c2VyX2luZm8geworCS8qCisJICogdmVyc2lvbiBvZiB1c2VyIHNvZnR3YXJlLCB0byBkZXRlY3QgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCisJICogU2hvdWxkIGJlIHNldCB0byBJUEFUSF9VU0VSX1NXVkVSU0lPTi4KKwkgKi8KKwlfX3UzMiBzcHVfdXNlcnZlcnNpb247CisKKwkvKiBkZXNpcmVkIG51bWJlciBvZiByZWNlaXZlIGhlYWRlciBxdWV1ZSBlbnRyaWVzICovCisJX191MzIgc3B1X3JjdmhkcmNudDsKKworCS8qIHNpemUgb2Ygc3RydWN0IGJhc2VfaW5mbyB0byB3cml0ZSB0byAqLworCV9fdTMyIHNwdV9iYXNlX2luZm9fc2l6ZTsKKworCS8qCisJICogbnVtYmVyIG9mIHdvcmRzIGluIEtEIHByb3RvY29sIGhlYWRlcgorCSAqIFRoaXMgdGVsbHMgSW5maW5pUGF0aCBob3cgbWFueSB3b3JkcyB0byBjb3B5IHRvIHJjdmhkcnEuICBJZiAwLAorCSAqIGtlcm5lbCB1c2VzIGEgZGVmYXVsdC4gIE9uY2Ugc2V0LCBhdHRlbXB0cyB0byBzZXQgYW55IG90aGVyIHZhbHVlCisJICogYXJlIGFuIGVycm9yIChFQUdBSU4pIHVudGlsIGRyaXZlciBpcyByZWxvYWRlZC4KKwkgKi8KKwlfX3UzMiBzcHVfcmN2aGRyc2l6ZTsKKworCS8qCisJICogY2FjaGUgbGluZSBhbGlnbmVkICg2NCBieXRlKSB1c2VyIGFkZHJlc3MgdG8KKwkgKiB3aGljaCB0aGUgcmN2aGRydGFpbCByZWdpc3RlciB3aWxsIGJlIHdyaXR0ZW4gYnkgaW5maW5pcGF0aAorCSAqIHdoZW5ldmVyIGl0IGNoYW5nZXMsIHNvIHRoYXQgbm8gY2hpcCByZWdpc3RlcnMgYXJlIHJlYWQgaW4KKwkgKiB0aGUgcGVyZm9ybWFuY2UgcGF0aC4KKwkgKi8KKwlfX3U2NCBzcHVfcmN2aGRyYWRkcjsKKworCS8qCisJICogYWRkcmVzcyBvZiBzdHJ1Y3QgYmFzZV9pbmZvIHRvIHdyaXRlIHRvCisJICovCisJX191NjQgc3B1X2Jhc2VfaW5mbzsKKworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg4KSkpOworCisvKiBVc2VyIGNvbW1hbmRzLiAqLworCisjZGVmaW5lIElQQVRIX0NNRF9NSU4JCTE2CisKKyNkZWZpbmUgSVBBVEhfQ01EX1VTRVJfSU5JVAkxNgkvKiBzZXQgdXAgdXNlcnNwYWNlICovCisjZGVmaW5lIElQQVRIX0NNRF9QT1JUX0lORk8JMTcJLyogZmluZCBvdXQgd2hhdCByZXNvdXJjZXMgd2UgZ290ICovCisjZGVmaW5lIElQQVRIX0NNRF9SRUNWX0NUUkwJMTgJLyogY29udHJvbCByZWNlaXB0IG9mIHBhY2tldHMgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1RJRF9VUERBVEUJMTkJLyogdXBkYXRlIGV4cGVjdGVkIFRJRCBlbnRyaWVzICovCisjZGVmaW5lIElQQVRIX0NNRF9USURfRlJFRQkyMAkvKiBmcmVlIGV4cGVjdGVkIFRJRCBlbnRyaWVzICovCisjZGVmaW5lIElQQVRIX0NNRF9TRVRfUEFSVF9LRVkJMjEJLyogYWRkIHBhcnRpdGlvbiBrZXkgKi8KKworI2RlZmluZSBJUEFUSF9DTURfTUFYCQkyMQorCitzdHJ1Y3QgaXBhdGhfcG9ydF9pbmZvIHsKKwlfX3UzMiBudW1fYWN0aXZlOwkvKiBudW1iZXIgb2YgYWN0aXZlIHVuaXRzICovCisJX191MzIgdW5pdDsJCS8qIHVuaXQgKGNoaXApIGFzc2lnbmVkIHRvIGNhbGxlciAqLworCV9fdTMyIHBvcnQ7CQkvKiBwb3J0IG9uIHVuaXQgYXNzaWduZWQgdG8gY2FsbGVyICovCit9OworCitzdHJ1Y3QgaXBhdGhfdGlkX2luZm8geworCV9fdTMyIHRpZGNudDsKKwkvKiBtYWtlIHN0cnVjdHVyZSBzYW1lIHNpemUgaW4gMzIgYW5kIDY0IGJpdCAqLworCV9fdTMyIHRpZF9fdW51c2VkOworCS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBmaXJzdCBwYWdlIGluIHRyYW5zZmVyICovCisJX191NjQgdGlkdmFkZHI7CisJLyogcG9pbnRlciAoc2FtZSBzaXplIDMyLzY0IGJpdCkgdG8gX191MTYgdGlkIGFycmF5ICovCisJX191NjQgdGlkbGlzdDsKKworCS8qCisJICogcG9pbnRlciAoc2FtZSBzaXplIDMyLzY0IGJpdCkgdG8gYml0bWFwIG9mIFRJRHMgdXNlZAorCSAqIGZvciB0aGlzIGNhbGw7IGNoZWNrZWQgZm9yIGJlaW5nIGxhcmdlIGVub3VnaCBhdCBvcGVuCisJICovCisJX191NjQgdGlkbWFwOworfTsKKworc3RydWN0IGlwYXRoX2NtZCB7CisJX191MzIgdHlwZTsJCQkvKiBjb21tYW5kIHR5cGUgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBpcGF0aF90aWRfaW5mbyB0aWRfaW5mbzsKKwkJc3RydWN0IGlwYXRoX3VzZXJfaW5mbyB1c2VyX2luZm87CisJCS8qIGFkZHJlc3MgaW4gdXNlcnNwYWNlIG9mIHN0cnVjdCBpcGF0aF9wb3J0X2luZm8gdG8KKwkJICAgd3JpdGUgcmVzdWx0IHRvICovCisJCV9fdTY0IHBvcnRfaW5mbzsKKwkJLyogZW5hYmxlL2Rpc2FibGUgcmVjZWlwdCBvZiBwYWNrZXRzICovCisJCV9fdTMyIHJlY3ZfY3RybDsKKwkJLyogcGFydGl0aW9uIGtleSB0byBzZXQgKi8KKwkJX191MTYgcGFydF9rZXk7CisJfSBjbWQ7Cit9OworCitzdHJ1Y3QgaXBhdGhfaW92ZWMgeworCS8qIFBvaW50ZXIgdG8gZGF0YSwgYnV0IHNhbWUgc2l6ZSAzMiBhbmQgNjQgYml0ICovCisJX191NjQgaW92X2Jhc2U7CisKKwkvKgorCSAqIExlbmd0aCBvZiBkYXRhOyBkb24ndCBuZWVkIDY0IGJpdHMsIGJ1dCB3YW50CisJICogaXBhdGhfc2VuZHBrdCB0byByZW1haW4gc2FtZSBzaXplIGFzIGJlZm9yZSAzMiBiaXQgY2hhbmdlcywgc28uLi4KKwkgKi8KKwlfX3U2NCBpb3ZfbGVuOworfTsKKworLyoKKyAqIERlc2NyaWJlcyBhIHNpbmdsZSBwYWNrZXQgZm9yIHNlbmQuICBFYWNoIHBhY2tldCBjYW4gaGF2ZSBvbmUgb3IgbW9yZQorICogYnVmZmVycywgYnV0IHRoZSB0b3RhbCBsZW5ndGggKGV4Y2x1c2l2ZSBvZiBJQiBoZWFkZXJzKSBtdXN0IGJlIGxlc3MKKyAqIHRoYW4gdGhlIE1UVSwgYW5kIGlmIHVzaW5nIHRoZSBQSU8gbWV0aG9kLCBlbnRpcmUgcGFja2V0IGxlbmd0aCwKKyAqIGluY2x1ZGluZyBJQiBoZWFkZXJzLCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgaXBhdGhfcGlvc2l6ZSB2YWx1ZSAod29yZHMpLgorICogVXNlIG9mIHRoaXMgbmVjZXNzaXRhdGVzIGluY2x1ZGluZyBzeXMvdWlvLmgKKyAqLworc3RydWN0IF9faXBhdGhfc2VuZHBrdCB7CisJX191MzIgc3BzX2ZsYWdzOwkvKiBmbGFncyBmb3IgcGFja2V0IChUQkQpICovCisJX191MzIgc3BzX2NudDsJCS8qIG51bWJlciBvZiBlbnRyaWVzIHRvIHVzZSBpbiBzcHNfaW92ICovCisJLyogYXJyYXkgb2YgaW92J3MgZGVzY3JpYmluZyBwYWNrZXQuIFRFTVBPUkFSWSAqLworCXN0cnVjdCBpcGF0aF9pb3ZlYyBzcHNfaW92WzRdOworfTsKKworLyogUGFzc2VkIGludG8gU01BIHNwZWNpYWwgZmlsZSdzIC0+cmVhZCBhbmQgLT53cml0ZSBtZXRob2RzLiAqLworc3RydWN0IGlwYXRoX3NtYV9wa3QKK3sKKwlfX3UzMiB1bml0OwkvKiB1bml0IG9uIHdoaWNoIHRvIHNlbmQgcGFja2V0ICovCisJX191NjQgZGF0YTsJLyogYWRkcmVzcyBvZiBwYXlsb2FkIGluIHVzZXJzcGFjZSAqLworCV9fdTMyIGxlbjsJLyogbGVuZ3RoIG9mIHBheWxvYWQgKi8KK307CisKKy8qCisgKiBEYXRhIGxheW91dCBpbiBJMkMgZmxhc2ggKGZvciBHVUlELCBldGMuKQorICogQWxsIGZpZWxkcyBhcmUgbGl0dGxlLWVuZGlhbiBiaW5hcnkgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQKKyAqLworI2RlZmluZSBJUEFUSF9GTEFTSF9WRVJTSU9OIDEKK3N0cnVjdCBpcGF0aF9mbGFzaCB7CisJLyogZmxhc2ggbGF5b3V0IHZlcnNpb24gKElQQVRIX0ZMQVNIX1ZFUlNJT04pICovCisJX191OCBpZl9mdmVyc2lvbjsKKwkvKiBjaGVja3N1bSBwcm90ZWN0aW5nIGlmX2xlbmd0aCBieXRlcyAqLworCV9fdTggaWZfY3N1bTsKKwkvKgorCSAqIHZhbGlkIGxlbmd0aCAoaW4gdXNlLCBwcm90ZWN0ZWQgYnkgaWZfY3N1bSksIGluY2x1ZGluZworCSAqIGlmX2Z2ZXJzaW9uIGFuZCBpZl9zdW0gdGhlbXNlbHZlcykKKwkgKi8KKwlfX3U4IGlmX2xlbmd0aDsKKwkvKiB0aGUgR1VJRCwgaW4gbmV0d29yayBvcmRlciAqLworCV9fdTggaWZfZ3VpZFs4XTsKKwkvKiBudW1iZXIgb2YgR1VJRHMgdG8gdXNlLCBzdGFydGluZyBmcm9tIGlmX2d1aWQgKi8KKwlfX3U4IGlmX251bWd1aWQ7CisJLyogdGhlIGJvYXJkIHNlcmlhbCBudW1iZXIsIGluIEFTQ0lJICovCisJY2hhciBpZl9zZXJpYWxbMTJdOworCS8qIGJvYXJkIG1mZyBkYXRlIChZWVlZTU1ERCBBU0NJSSkgKi8KKwljaGFyIGlmX21mZ2RhdGVbOF07CisJLyogbGFzdCBib2FyZCByZXdvcmsvdGVzdCBkYXRlIChZWVlZTU1ERCBBU0NJSSkgKi8KKwljaGFyIGlmX3Rlc3RkYXRlWzhdOworCS8qIGxvZ2dpbmcgb2YgZXJyb3IgY291bnRzLCBUQkQgKi8KKwlfX3U4IGlmX2VycmNudHBbNF07CisJLyogcG93ZXJlZCBvbiBob3VycywgdXBkYXRlZCBhdCBkcml2ZXIgdW5sb2FkICovCisJX191OCBpZl9wb3dlcmhvdXJbMl07CisJLyogQVNDSUkgZnJlZS1mb3JtIGNvbW1lbnQgZmllbGQgKi8KKwljaGFyIGlmX2NvbW1lbnRbMzJdOworCS8qIDc4IGJ5dGVzIHVzZWQsIG1pbiBmbGFzaCBzaXplIGlzIDEyOCBieXRlcyAqLworCV9fdTggaWZfZnV0dXJlWzUwXTsKK307CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGNvdW50ZXJzIGltcGxlbWVudGVkIGluIHRoZSBjaGlwLCBhbmQgYXJlIGxpc3RlZCBpbiBvcmRlci4KKyAqIFRoZSBJbnRlckNhcHMgbmFtaW5nIGlzIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIGNoaXAgc3BlYy4KKyAqLworc3RydWN0IGluZmluaXBhdGhfY291bnRlcnMgeworCV9fdTY0IExCSW50Q250OworCV9fdTY0IExCRmxvd1N0YWxsQ250OworCV9fdTY0IFJlc2VydmVkMTsKKwlfX3U2NCBUeFVuc3VwVkxFcnJDbnQ7CisJX191NjQgVHhEYXRhUGt0Q250OworCV9fdTY0IFR4Rmxvd1BrdENudDsKKwlfX3U2NCBUeER3b3JkQ250OworCV9fdTY0IFR4TGVuRXJyQ250OworCV9fdTY0IFR4TWF4TWluTGVuRXJyQ250OworCV9fdTY0IFR4VW5kZXJydW5DbnQ7CisJX191NjQgVHhGbG93U3RhbGxDbnQ7CisJX191NjQgVHhEcm9wcGVkUGt0Q250OworCV9fdTY0IFJ4RHJvcHBlZFBrdENudDsKKwlfX3U2NCBSeERhdGFQa3RDbnQ7CisJX191NjQgUnhGbG93UGt0Q250OworCV9fdTY0IFJ4RHdvcmRDbnQ7CisJX191NjQgUnhMZW5FcnJDbnQ7CisJX191NjQgUnhNYXhNaW5MZW5FcnJDbnQ7CisJX191NjQgUnhJQ1JDRXJyQ250OworCV9fdTY0IFJ4VkNSQ0VyckNudDsKKwlfX3U2NCBSeEZsb3dDdHJsRXJyQ250OworCV9fdTY0IFJ4QmFkRm9ybWF0Q250OworCV9fdTY0IFJ4TGlua1Byb2JsZW1DbnQ7CisJX191NjQgUnhFQlBDbnQ7CisJX191NjQgUnhMUENSQ0VyckNudDsKKwlfX3U2NCBSeEJ1Zk92ZmxDbnQ7CisJX191NjQgUnhUSURGdWxsRXJyQ250OworCV9fdTY0IFJ4VElEVmFsaWRFcnJDbnQ7CisJX191NjQgUnhQS2V5TWlzbWF0Y2hDbnQ7CisJX191NjQgUnhQMEhkckVnck92ZmxDbnQ7CisJX191NjQgUnhQMUhkckVnck92ZmxDbnQ7CisJX191NjQgUnhQMkhkckVnck92ZmxDbnQ7CisJX191NjQgUnhQM0hkckVnck92ZmxDbnQ7CisJX191NjQgUnhQNEhkckVnck92ZmxDbnQ7CisJX191NjQgUnhQNUhkckVnck92ZmxDbnQ7CisJX191NjQgUnhQNkhkckVnck92ZmxDbnQ7CisJX191NjQgUnhQN0hkckVnck92ZmxDbnQ7CisJX191NjQgUnhQOEhkckVnck92ZmxDbnQ7CisJX191NjQgUmVzZXJ2ZWQ2OworCV9fdTY0IFJlc2VydmVkNzsKKwlfX3U2NCBJQlN0YXR1c0NoYW5nZUNudDsKKwlfX3U2NCBJQkxpbmtFcnJSZWNvdmVyeUNudDsKKwlfX3U2NCBJQkxpbmtEb3duZWRDbnQ7CisJX191NjQgSUJTeW1ib2xFcnJDbnQ7Cit9OworCisvKgorICogVGhlIG5leHQgc2V0IG9mIGRlZmluZXMgYXJlIGZvciBwYWNrZXQgaGVhZGVycywgYW5kIGNoaXAgcmVnaXN0ZXIKKyAqIGFuZCBtZW1vcnkgYml0cyB0aGF0IGFyZSB2aXNpYmxlIHRvIGFuZC9vciB1c2VkIGJ5IHVzZXItbW9kZSBzb2Z0d2FyZQorICogVGhlIG90aGVyIGJpdHMgdGhhdCBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBkcml2ZXIgb3IgZGlhZ3MgYXJlIGluCisgKiBpcGF0aF9yZWdpc3RlcnMuaAorICovCisKKy8qIFJjdkhkckZsYWdzIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfTEVOR1RIX01BU0sgMHg3RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfTEVOR1RIX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfUkNWVFlQRV9NQVNLIDB4NworI2RlZmluZSBJTkZJTklQQVRIX1JIRl9SQ1ZUWVBFX1NISUZUIDExCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0VHUklOREVYX01BU0sgMHg3RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfRUdSSU5ERVhfU0hJRlQgMTYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9JQ1JDRVJSICAgMHg4MDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX1ZDUkNFUlIgICAweDQwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfUEFSSVRZRVJSIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9MRU5FUlIgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX01UVUVSUiAgICAweDA4MDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfSUhEUkVSUiAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9USURFUlIgICAgMHgwMjAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX01LRVJSICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfSUJFUlIgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfTF9TV0EgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9MX1NXQiAgICAgICAweDAwMDA0MDAwCisKKy8qIGluZmluaXBhdGggaGVhZGVyIGZpZWxkcyAqLworI2RlZmluZSBJTkZJTklQQVRIX0lfVkVSU19NQVNLIDB4RgorI2RlZmluZSBJTkZJTklQQVRIX0lfVkVSU19TSElGVCAyOAorI2RlZmluZSBJTkZJTklQQVRIX0lfUE9SVF9NQVNLIDB4RgorI2RlZmluZSBJTkZJTklQQVRIX0lfUE9SVF9TSElGVCAyNAorI2RlZmluZSBJTkZJTklQQVRIX0lfVElEX01BU0sgMHg3RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1RJRF9TSElGVCAxMworI2RlZmluZSBJTkZJTklQQVRIX0lfT0ZGU0VUX01BU0sgMHgxRkZGCisjZGVmaW5lIElORklOSVBBVEhfSV9PRkZTRVRfU0hJRlQgMAorCisvKiBLX1BrdEZsYWdzIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9LUEZfSU5UUiAweDEKKworLyogU2VuZFBJTyBwZXItYnVmZmVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9TUF9MRU5HVEhQMV9NQVNLIDB4M0ZGCisjZGVmaW5lIElORklOSVBBVEhfU1BfTEVOR1RIUDFfU0hJRlQgMAorI2RlZmluZSBJTkZJTklQQVRIX1NQX0lOVFIgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1NQX1RFU1QgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1NQX1RFU1RFQlAgMHgyMDAwMDAwMAorCisvKiBTZW5kUElPQXZhaWwgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9CVVNZX1NISUZUIDEKKyNkZWZpbmUgSU5GSU5JUEFUSF9TRU5EUElPQVZBSUxfQ0hFQ0tfU0hJRlQgMAorCisjZW5kaWYJCQkJLyogX0lQQVRIX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlY2UxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorCisvKioKKyAqIGlwYXRoX2NxX2VudGVyIC0gYWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBjb21wbGV0aW9uIHF1ZXVlCisgKiBAY3E6IGNvbXBsZXRpb24gcXVldWUKKyAqIEBlbnRyeTogd29yayBjb21wbGV0aW9uIGVudHJ5IHRvIGFkZAorICogQHNpZzogdHJ1ZSBpZiBAZW50cnkgaXMgYSBzb2xpY2l0YXRlZCBlbnRyeQorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIG9uZSBvZiB0aGUgcXAtPnNfbG9jayBvciBxcC0+cl9ycS5sb2NrIGhlbGQuCisgKi8KK3ZvaWQgaXBhdGhfY3FfZW50ZXIoc3RydWN0IGlwYXRoX2NxICpjcSwgc3RydWN0IGliX3djICplbnRyeSwgaW50IHNvbGljaXRlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBuZXh0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNxLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY3EtPmhlYWQgPT0gY3EtPmliY3EuY3FlKQorCQluZXh0ID0gMDsKKwllbHNlCisJCW5leHQgPSBjcS0+aGVhZCArIDE7CisJaWYgKHVubGlrZWx5KG5leHQgPT0gY3EtPnRhaWwpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CisJCWlmIChjcS0+aWJjcS5ldmVudF9oYW5kbGVyKSB7CisJCQlzdHJ1Y3QgaWJfZXZlbnQgZXY7CisKKwkJCWV2LmRldmljZSA9IGNxLT5pYmNxLmRldmljZTsKKwkJCWV2LmVsZW1lbnQuY3EgPSAmY3EtPmliY3E7CisJCQlldi5ldmVudCA9IElCX0VWRU5UX0NRX0VSUjsKKwkJCWNxLT5pYmNxLmV2ZW50X2hhbmRsZXIoJmV2LCBjcS0+aWJjcS5jcV9jb250ZXh0KTsKKwkJfQorCQlyZXR1cm47CisJfQorCWNxLT5xdWV1ZVtjcS0+aGVhZF0gPSAqZW50cnk7CisJY3EtPmhlYWQgPSBuZXh0OworCisJaWYgKGNxLT5ub3RpZnkgPT0gSUJfQ1FfTkVYVF9DT01QIHx8CisJICAgIChjcS0+bm90aWZ5ID09IElCX0NRX1NPTElDSVRFRCAmJiBzb2xpY2l0ZWQpKSB7CisJCWNxLT5ub3RpZnkgPSBJQl9DUV9OT05FOworCQljcS0+dHJpZ2dlcmVkKys7CisJCS8qCisJCSAqIFRoaXMgd2lsbCBjYXVzZSBzZW5kX2NvbXBsZXRlKCkgdG8gYmUgY2FsbGVkIGluCisJCSAqIGFub3RoZXIgdGhyZWFkLgorCQkgKi8KKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmY3EtPmNvbXB0YXNrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVudHJ5LT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykKKwkJdG9faWRldihjcS0+aWJjcS5kZXZpY2UpLT5uX3dxZV9lcnJzKys7Cit9CisKKy8qKgorICogaXBhdGhfcG9sbF9jcSAtIHBvbGwgZm9yIHdvcmsgY29tcGxldGlvbiBlbnRyaWVzCisgKiBAaWJjcTogdGhlIGNvbXBsZXRpb24gcXVldWUgdG8gcG9sbAorICogQG51bV9lbnRyaWVzOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0byByZXR1cm4KKyAqIEBlbnRyeTogcG9pbnRlciB0byBhcnJheSB3aGVyZSB3b3JrIGNvbXBsZXRpb25zIGFyZSBwbGFjZWQKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcGxldGlvbiBlbnRyaWVzIHBvbGxlZC4KKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gIEFsc28gY2FsbGVkIGJ5IGliX3BvbGxfY3EoKQorICogaW4gdGhlIGdlbmVyaWMgdmVyYnMgY29kZS4KKyAqLworaW50IGlwYXRoX3BvbGxfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqZW50cnkpCit7CisJc3RydWN0IGlwYXRoX2NxICpjcSA9IHRvX2ljcShpYmNxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBucG9sbGVkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNxLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKG5wb2xsZWQgPSAwOyBucG9sbGVkIDwgbnVtX2VudHJpZXM7ICsrbnBvbGxlZCwgKytlbnRyeSkgeworCQlpZiAoY3EtPnRhaWwgPT0gY3EtPmhlYWQpCisJCQlicmVhazsKKwkJKmVudHJ5ID0gY3EtPnF1ZXVlW2NxLT50YWlsXTsKKwkJaWYgKGNxLT50YWlsID09IGNxLT5pYmNxLmNxZSkKKwkJCWNxLT50YWlsID0gMDsKKwkJZWxzZQorCQkJY3EtPnRhaWwrKzsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIG5wb2xsZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfY29tcGxldGUodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpcGF0aF9jcSAqY3EgPSAoc3RydWN0IGlwYXRoX2NxICopZGF0YTsKKworCS8qCisJICogVGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIG1vc3QgbGlrZWx5IHJlYXJtIHRoZSBub3RpZmljYXRpb24KKwkgKiBhbmQgcG9sbCBmb3IgYWxsIHBlbmRpbmcgZW50cmllcy4gIElmIGEgbmV3IGNvbXBsZXRpb24gZW50cnkKKwkgKiBpcyBhZGRlZCB3aGlsZSB3ZSBhcmUgaW4gdGhpcyByb3V0aW5lLCB0YXNrbGV0X2hpX3NjaGVkdWxlKCkKKwkgKiB3b24ndCBjYWxsIHVzIGFnYWluIHVudGlsIHdlIHJldHVybiBzbyB3ZSBjaGVjayB0cmlnZ2VyZWQgdG8KKwkgKiBzZWUgaWYgd2UgbmVlZCB0byBjYWxsIHRoZSBoYW5kbGVyIGFnYWluLgorCSAqLworCWZvciAoOzspIHsKKwkJdTggdHJpZ2dlcmVkID0gY3EtPnRyaWdnZXJlZDsKKworCQljcS0+aWJjcS5jb21wX2hhbmRsZXIoJmNxLT5pYmNxLCBjcS0+aWJjcS5jcV9jb250ZXh0KTsKKworCQlpZiAoY3EtPnRyaWdnZXJlZCA9PSB0cmlnZ2VyZWQpCisJCQlyZXR1cm47CisJfQorfQorCisvKioKKyAqIGlwYXRoX2NyZWF0ZV9jcSAtIGNyZWF0ZSBhIGNvbXBsZXRpb24gcXVldWUKKyAqIEBpYmRldjogdGhlIGRldmljZSB0aGlzIGNvbXBsZXRpb24gcXVldWUgaXMgYXR0YWNoZWQgdG8KKyAqIEBlbnRyaWVzOiB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBjb21wbGV0aW9uIHF1ZXVlCisgKiBAY29udGV4dDogdW51c2VkIGJ5IHRoZSBJbmZpbmlQYXRoIGRyaXZlcgorICogQHVkYXRhOiB1bnVzZWQgYnkgdGhlIEluZmluaVBhdGggZHJpdmVyCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUgb3IgbmVnYXRpdmUgZXJybm8gdmFsdWVzCisgKiBmb3IgZmFpbHVyZS4KKyAqCisgKiBDYWxsZWQgYnkgaWJfY3JlYXRlX2NxKCkgaW4gdGhlIGdlbmVyaWMgdmVyYnMgY29kZS4KKyAqLworc3RydWN0IGliX2NxICppcGF0aF9jcmVhdGVfY3Eoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBlbnRyaWVzLAorCQkJICAgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfY3EgKmNxOworCXN0cnVjdCBpYl93YyAqd2M7CisJc3RydWN0IGliX2NxICpyZXQ7CisKKwkvKgorCSAqIE5lZWQgdG8gdXNlIHZtYWxsb2MoKSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbGFyZ2UgI3Mgb2YKKwkgKiBlbnRyaWVzLgorCSAqLworCWNxID0ga21hbGxvYyhzaXplb2YoKmNxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcSkgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJLyoKKwkgKiBOZWVkIHRvIHVzZSB2bWFsbG9jKCkgaWYgd2Ugd2FudCB0byBzdXBwb3J0IGxhcmdlICNzIG9mIGVudHJpZXMuCisJICovCisJd2MgPSB2bWFsbG9jKHNpemVvZigqd2MpICogKGVudHJpZXMgKyAxKSk7CisJaWYgKCF3YykgeworCQlrZnJlZShjcSk7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisJLyoKKwkgKiBpYl9jcmVhdGVfY3EoKSB3aWxsIGluaXRpYWxpemUgY3EtPmliY3EgZXhjZXB0IGZvciBjcS0+aWJjcS5jcWUuCisJICogVGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3VsZCBiZSA+PSB0aGUgbnVtYmVyIHJlcXVlc3RlZCBvciByZXR1cm4KKwkgKiBhbiBlcnJvci4KKwkgKi8KKwljcS0+aWJjcS5jcWUgPSBlbnRyaWVzOworCWNxLT5ub3RpZnkgPSBJQl9DUV9OT05FOworCWNxLT50cmlnZ2VyZWQgPSAwOworCXNwaW5fbG9ja19pbml0KCZjcS0+bG9jayk7CisJdGFza2xldF9pbml0KCZjcS0+Y29tcHRhc2ssIHNlbmRfY29tcGxldGUsICh1bnNpZ25lZCBsb25nKWNxKTsKKwljcS0+aGVhZCA9IDA7CisJY3EtPnRhaWwgPSAwOworCWNxLT5xdWV1ZSA9IHdjOworCisJcmV0ID0gJmNxLT5pYmNxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZGVzdHJveV9jcSAtIGRlc3Ryb3kgYSBjb21wbGV0aW9uIHF1ZXVlCisgKiBAaWJjcTogdGhlIGNvbXBsZXRpb24gcXVldWUgdG8gZGVzdHJveS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisgKgorICogQ2FsbGVkIGJ5IGliX2Rlc3Ryb3lfY3EoKSBpbiB0aGUgZ2VuZXJpYyB2ZXJicyBjb2RlLgorICovCitpbnQgaXBhdGhfZGVzdHJveV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EpCit7CisJc3RydWN0IGlwYXRoX2NxICpjcSA9IHRvX2ljcShpYmNxKTsKKworCXRhc2tsZXRfa2lsbCgmY3EtPmNvbXB0YXNrKTsKKwl2ZnJlZShjcS0+cXVldWUpOworCWtmcmVlKGNxKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX3JlcV9ub3RpZnlfY3EgLSBjaGFuZ2UgdGhlIG5vdGlmaWNhdGlvbiB0eXBlIGZvciBhIGNvbXBsZXRpb24gcXVldWUKKyAqIEBpYmNxOiB0aGUgY29tcGxldGlvbiBxdWV1ZQorICogQG5vdGlmeTogdGhlIHR5cGUgb2Ygbm90aWZpY2F0aW9uIHRvIHJlcXVlc3QKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICBBbHNvIGNhbGxlZCBieQorICogaWJfcmVxX25vdGlmeV9jcSgpIGluIHRoZSBnZW5lcmljIHZlcmJzIGNvZGUuCisgKi8KK2ludCBpcGF0aF9yZXFfbm90aWZ5X2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnkgbm90aWZ5KQoreworCXN0cnVjdCBpcGF0aF9jcSAqY3EgPSB0b19pY3EoaWJjcSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcS0+bG9jaywgZmxhZ3MpOworCS8qCisJICogRG9uJ3QgY2hhbmdlIElCX0NRX05FWFRfQ09NUCB0byBJQl9DUV9TT0xJQ0lURUQgYnV0IGFsbG93CisJICogYW55IG90aGVyIHRyYW5zaXRpb25zLgorCSAqLworCWlmIChjcS0+bm90aWZ5ICE9IElCX0NRX05FWFRfQ09NUCkKKwkJY3EtPm5vdGlmeSA9IG5vdGlmeTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitpbnQgaXBhdGhfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgaW50IGNxZSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfY3EgKmNxID0gdG9faWNxKGliY3EpOworCXN0cnVjdCBpYl93YyAqd2MsICpvbGRfd2M7CisJdTMyIG47CisJaW50IHJldDsKKworCS8qCisJICogTmVlZCB0byB1c2Ugdm1hbGxvYygpIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBsYXJnZSAjcyBvZiBlbnRyaWVzLgorCSAqLworCXdjID0gdm1hbGxvYyhzaXplb2YoKndjKSAqIChjcWUgKyAxKSk7CisJaWYgKCF3YykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmY3EtPmxvY2spOworCWlmIChjcS0+aGVhZCA8IGNxLT50YWlsKQorCQluID0gY3EtPmliY3EuY3FlICsgMSArIGNxLT5oZWFkIC0gY3EtPnRhaWw7CisJZWxzZQorCQluID0gY3EtPmhlYWQgLSBjcS0+dGFpbDsKKwlpZiAodW5saWtlbHkoKHUzMiljcWUgPCBuKSkgeworCQlzcGluX3VubG9ja19pcnEoJmNxLT5sb2NrKTsKKwkJdmZyZWUod2MpOworCQlyZXQgPSAtRU9WRVJGTE9XOworCQlnb3RvIGJhaWw7CisJfQorCWZvciAobiA9IDA7IGNxLT50YWlsICE9IGNxLT5oZWFkOyBuKyspIHsKKwkJd2Nbbl0gPSBjcS0+cXVldWVbY3EtPnRhaWxdOworCQlpZiAoY3EtPnRhaWwgPT0gY3EtPmliY3EuY3FlKQorCQkJY3EtPnRhaWwgPSAwOworCQllbHNlCisJCQljcS0+dGFpbCsrOworCX0KKwljcS0+aWJjcS5jcWUgPSBjcWU7CisJY3EtPmhlYWQgPSBuOworCWNxLT50YWlsID0gMDsKKwlvbGRfd2MgPSBjcS0+cXVldWU7CisJY3EtPnF1ZXVlID0gd2M7CisJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7CisKKwl2ZnJlZShvbGRfd2MpOworCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc2MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0lQQVRIX0RFQlVHX0gKKyNkZWZpbmUgX0lQQVRIX0RFQlVHX0gKKworI2lmbmRlZiBfSVBBVEhfREVCVUdHSU5HCS8qIGRlYnVnZ2luZyBlbmFibGVkIG9yIG5vdCAqLworI2RlZmluZSBfSVBBVEhfREVCVUdHSU5HIDEKKyNlbmRpZgorCisjaWYgX0lQQVRIX0RFQlVHR0lORworCisvKgorICogTWFzayB2YWx1ZXMgZm9yIGRlYnVnZ2luZy4gIFRoZSBzY2hlbWUgYWxsb3dzIHVzIHRvIGNvbXBpbGUgb3V0IGFueQorICogb2YgdGhlIGRlYnVnIHRyYWNpbmcgc3R1ZmYsIGFuZCBpZiBjb21waWxlZCBpbiwgdG8gZW5hYmxlIG9yIGRpc2FibGUKKyAqIGR5bmFtaWNhbGx5LiAgVGhpcyBjYW4gYmUgc2V0IGF0IG1vZHByb2JlIHRpbWUgYWxzbzoKKyAqICAgICAgbW9kcHJvYmUgaW5maW5pcGF0aC5rbyBpbmZpbmlwYXRoX2RlYnVnPTcKKyAqLworCisjZGVmaW5lIF9fSVBBVEhfSU5GTyAgICAgICAgMHgxCS8qIGdlbmVyaWMgbG93IHZlcmJvc2l0eSBzdHVmZiAqLworI2RlZmluZSBfX0lQQVRIX0RCRyAgICAgICAgIDB4MgkvKiBnZW5lcmljIGRlYnVnICovCisjZGVmaW5lIF9fSVBBVEhfVFJTQU1QTEUgICAgMHg4CS8qIGdlbmVyYXRlIHRyYWNlIGJ1ZmZlciBzYW1wbGUgZW50cmllcyAqLworLyogbGVhdmUgc29tZSBsb3cgdmVyYm9zaXR5IHNwb3RzIG9wZW4gKi8KKyNkZWZpbmUgX19JUEFUSF9WRVJCREJHICAgICAweDQwCS8qIHZlcnkgdmVyYm9zZSBkZWJ1ZyAqLworI2RlZmluZSBfX0lQQVRIX1BLVERCRyAgICAgIDB4ODAJLyogcHJpbnQgcGFja2V0IGRhdGEgKi8KKy8qIHByaW50IHByb2Nlc3Mgc3RhcnR1cCAoaW5pdCkvZXhpdCBtZXNzYWdlcyAqLworI2RlZmluZSBfX0lQQVRIX1BST0NEQkcgICAgIDB4MTAwCisvKiBwcmludCBtbWFwL25vcGFnZSBzdHVmZiwgbm90IHVzaW5nIFZEQkcgYW55IG1vcmUgKi8KKyNkZWZpbmUgX19JUEFUSF9NTURCRyAgICAgICAweDIwMAorI2RlZmluZSBfX0lQQVRIX1VTRVJfU0VORCAgIDB4MTAwMAkvKiB1c2UgdXNlciBtb2RlIHNlbmQgKi8KKyNkZWZpbmUgX19JUEFUSF9LRVJORUxfU0VORCAweDIwMDAJLyogdXNlIGtlcm5lbCBtb2RlIHNlbmQgKi8KKyNkZWZpbmUgX19JUEFUSF9FUEtUREJHICAgICAweDQwMDAJLyogcHJpbnQgZXRoZXJuZXQgcGFja2V0IGRhdGEgKi8KKyNkZWZpbmUgX19JUEFUSF9TTUFEQkcgICAgICAweDgwMDAJLyogc21hIHBhY2tldCBkZWJ1ZyAqLworI2RlZmluZSBfX0lQQVRIX0lQQVRIREJHICAgIDB4MTAwMDAJLyogRXRoZXJuZXQgKElQQVRIKSBnZW4gZGVidWcgKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSFdBUk4gICAweDIwMDAwCS8qIEV0aGVybmV0IChJUEFUSCkgd2FybmluZ3MgKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSEVSUiAgICAweDQwMDAwCS8qIEV0aGVybmV0IChJUEFUSCkgZXJyb3JzICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhQRCAgICAgMHg4MDAwMAkvKiBFdGhlcm5ldCAoSVBBVEgpIHBhY2tldCBkdW1wICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhUQUJMRSAgMHgxMDAwMDAJLyogRXRoZXJuZXQgKElQQVRIKSB0YWJsZSBkdW1wICovCisKKyNlbHNlCQkJCS8qIF9JUEFUSF9ERUJVR0dJTkcgKi8KKworLyoKKyAqIGRlZmluZSBhbGwgb2YgdGhlc2UgZXZlbiB3aXRoIGRlYnVnZ2luZyBvZmYsIGZvciB0aGUgZmV3IHBsYWNlcyB0aGF0IGRvCisgKiBpZihpbmZpbmlwYXRoX2RlYnVnICYgX0lQQVRIX3h5enp5KSwgYnV0IGluIGEgd2F5IHRoYXQgd2lsbCBtYWtlIHRoZQorICogY29tcGlsZXIgZWxpbWluYXRlIHRoZSBjb2RlCisgKi8KKworI2RlZmluZSBfX0lQQVRIX0lORk8gICAgICAweDAJLyogZ2VuZXJpYyBsb3cgdmVyYm9zaXR5IHN0dWZmICovCisjZGVmaW5lIF9fSVBBVEhfREJHICAgICAgIDB4MAkvKiBnZW5lcmljIGRlYnVnICovCisjZGVmaW5lIF9fSVBBVEhfVFJTQU1QTEUgIDB4MAkvKiBnZW5lcmF0ZSB0cmFjZSBidWZmZXIgc2FtcGxlIGVudHJpZXMgKi8KKyNkZWZpbmUgX19JUEFUSF9WRVJCREJHICAgMHgwCS8qIHZlcnkgdmVyYm9zZSBkZWJ1ZyAqLworI2RlZmluZSBfX0lQQVRIX1BLVERCRyAgICAweDAJLyogcHJpbnQgcGFja2V0IGRhdGEgKi8KKyNkZWZpbmUgX19JUEFUSF9QUk9DREJHICAgMHgwCS8qIHByb2Nlc3Mgc3RhcnR1cCAoaW5pdCkvZXhpdCBtZXNzYWdlcyAqLworLyogcHJpbnQgbW1hcC9ub3BhZ2Ugc3R1ZmYsIG5vdCB1c2luZyBWREJHIGFueSBtb3JlICovCisjZGVmaW5lIF9fSVBBVEhfTU1EQkcgICAgIDB4MAorI2RlZmluZSBfX0lQQVRIX0VQS1REQkcgICAweDAJLyogcHJpbnQgZXRoZXJuZXQgcGFja2V0IGRhdGEgKi8KKyNkZWZpbmUgX19JUEFUSF9TTUFEQkcgICAgMHgwICAgLyogcHJvY2VzcyBzdGFydHVwIChpbml0KS9leGl0IG1lc3NhZ2VzICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhEQkcgIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIHRhYmxlIGR1bXAgb24gKi8KKyNkZWZpbmUgX19JUEFUSF9JUEFUSFdBUk4gMHgwCS8qIEV0aGVybmV0IChJUEFUSCkgd2FybmluZ3Mgb24gICAqLworI2RlZmluZSBfX0lQQVRIX0lQQVRIRVJSICAweDAJLyogRXRoZXJuZXQgKElQQVRIKSBlcnJvcnMgb24gICAqLworI2RlZmluZSBfX0lQQVRIX0lQQVRIUEQgICAweDAJLyogRXRoZXJuZXQgKElQQVRIKSBwYWNrZXQgZHVtcCBvbiAgICovCisjZGVmaW5lIF9fSVBBVEhfSVBBVEhUQUJMRSAweDAJLyogRXRoZXJuZXQgKElQQVRIKSBwYWNrZXQgZHVtcCBvbiAgICovCisKKyNlbmRpZgkJCQkvKiBfSVBBVEhfREVCVUdHSU5HICovCisKKyNkZWZpbmUgX19JUEFUSF9WRVJCT1NFREJHIF9fSVBBVEhfVkVSQkRCRworCisjZW5kaWYJCQkJLyogX0lQQVRIX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZGRjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBzdXBwb3J0IGZvciBkaWFnbm9zdGljIGZ1bmN0aW9ucy4gIEl0IGlzIGFjY2Vzc2VkIGJ5CisgKiBvcGVuaW5nIHRoZSBpcGF0aF9kaWFnIGRldmljZSwgbm9ybWFsbHkgbWlub3IgbnVtYmVyIDEyOS4gIERpYWdub3N0aWMgdXNlCisgKiBvZiB0aGUgSW5maW5pUGF0aCBjaGlwIG1heSByZW5kZXIgdGhlIGNoaXAgb3IgYm9hcmQgdW51c2FibGUgdW50aWwgdGhlCisgKiBkcml2ZXIgaXMgdW5sb2FkZWQsIG9yIGluIHNvbWUgY2FzZXMsIHVudGlsIHRoZSBzeXN0ZW0gaXMgcmVib290ZWQuCisgKgorICogQWNjZXNzZXMgdG8gdGhlIGNoaXAgdGhyb3VnaCB0aGlzIGludGVyZmFjZSBhcmUgbm90IHNpbWlsYXIgdG8gZ29pbmcKKyAqIHRocm91Z2ggdGhlIC9zeXMvYnVzL3BjaSByZXNvdXJjZSBtbWFwIGludGVyZmFjZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorCitpbnQgaXBhdGhfZGlhZ19pbnVzZTsKK3N0YXRpYyBpbnQgZGlhZ19zZXRfbGluazsKKworc3RhdGljIGludCBpcGF0aF9kaWFnX29wZW4oc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKTsKK3N0YXRpYyBpbnQgaXBhdGhfZGlhZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW4sIHN0cnVjdCBmaWxlICpmcCk7CitzdGF0aWMgc3NpemVfdCBpcGF0aF9kaWFnX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKTsKK3N0YXRpYyBzc2l6ZV90IGlwYXRoX2RpYWdfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlhZ19maWxlX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkud3JpdGUgPSBpcGF0aF9kaWFnX3dyaXRlLAorCS5yZWFkID0gaXBhdGhfZGlhZ19yZWFkLAorCS5vcGVuID0gaXBhdGhfZGlhZ19vcGVuLAorCS5yZWxlYXNlID0gaXBhdGhfZGlhZ19yZWxlYXNlCit9OworCitzdGF0aWMgc3RydWN0IGNkZXYgKmRpYWdfY2RldjsKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkaWFnX2NsYXNzX2RldjsKKworaW50IGlwYXRoX2RpYWdfaW5pdCh2b2lkKQoreworCXJldHVybiBpcGF0aF9jZGV2X2luaXQoSVBBVEhfRElBR19NSU5PUiwgImlwYXRoX2RpYWciLAorCQkJICAgICAgICZkaWFnX2ZpbGVfb3BzLCAmZGlhZ19jZGV2LCAmZGlhZ19jbGFzc19kZXYpOworfQorCit2b2lkIGlwYXRoX2RpYWdfY2xlYW51cCh2b2lkKQoreworCWlwYXRoX2NkZXZfY2xlYW51cCgmZGlhZ19jZGV2LCAmZGlhZ19jbGFzc19kZXYpOworfQorCisvKioKKyAqIGlwYXRoX3JlYWRfdW1lbTY0IC0gcmVhZCBhIDY0LWJpdCBxdWFudGl0eSBmcm9tIHRoZSBjaGlwIGludG8gdXNlciBzcGFjZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEB1YWRkcjogdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhIGluIHVzZXIgbWVtb3J5CisgKiBAY2FkZHI6IHRoZSBzb3VyY2UgY2hpcCBhZGRyZXNzIChmdWxsIHBvaW50ZXIsIG5vdCBvZmZzZXQpCisgKiBAY291bnQ6IG51bWJlciBvZiBieXRlcyB0byBjb3B5IChtdWx0aXBsZSBvZiAzMiBiaXRzKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBsb2NhbGl6ZXMgYWxsIGNoaXAgbWVtb3J5IGFjY2Vzc2VzLgorICogVGhlIGNvcHkgc2hvdWxkIGJlIHdyaXR0ZW4gc3VjaCB0aGF0IHdlIHJlYWQgZnVsbCBjYWNoZWxpbmUgcGFja2V0cworICogZnJvbSB0aGUgY2hpcC4gIFRoaXMgaXMgdXN1YWxseSB1c2VkIGZvciBhIHNpbmdsZSBxd29yZAorICoKKyAqIE5PVEU6ICBUaGlzIGFzc3VtZXMgdGhlIGNoaXAgYWRkcmVzcyBpcyA2NC1iaXQgYWxpZ25lZC4KKyAqLworc3RhdGljIGludCBpcGF0aF9yZWFkX3VtZW02NChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgX191c2VyICp1YWRkciwKKwkJCSAgICAgY29uc3Qgdm9pZCBfX2lvbWVtICpjYWRkciwgc2l6ZV90IGNvdW50KQoreworCWNvbnN0IHU2NCBfX2lvbWVtICpyZWdfYWRkciA9IGNhZGRyOworCWNvbnN0IHU2NCBfX2lvbWVtICpyZWdfZW5kID0gcmVnX2FkZHIgKyAoY291bnQgLyBzaXplb2YodTY0KSk7CisJaW50IHJldDsKKworCS8qIG5vdCB2ZXJ5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIGZvciBub3cgKi8KKwlpZiAocmVnX2FkZHIgPCBkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwKKwkgICAgcmVnX2VuZCA+IGRkLT5pcGF0aF9rcmVnZW5kKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJd2hpbGUgKHJlZ19hZGRyIDwgcmVnX2VuZCkgeworCQl1NjQgZGF0YSA9IHJlYWRxKHJlZ19hZGRyKTsKKwkJaWYgKGNvcHlfdG9fdXNlcih1YWRkciwgJmRhdGEsIHNpemVvZih1NjQpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlyZWdfYWRkcisrOworCQl1YWRkcisrOworCX0KKwlyZXQgPSAwOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3dyaXRlX3VtZW02NCAtIHdyaXRlIGEgNjQtYml0IHF1YW50aXR5IHRvIHRoZSBjaGlwIGZyb20gdXNlciBzcGFjZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBjYWRkcjogdGhlIGRlc3RpbmF0aW9uIGNoaXAgYWRkcmVzcyAoZnVsbCBwb2ludGVyLCBub3Qgb2Zmc2V0KQorICogQHVhZGRyOiB0aGUgc291cmNlIG9mIHRoZSBkYXRhIGluIHVzZXIgbWVtb3J5CisgKiBAY291bnQ6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSAobXVsdGlwbGUgb2YgMzIgYml0cykKKyAqCisgKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgYSBzaW5nbGUgcXdvcmQKKyAqIE5PVEU6ICBUaGlzIGFzc3VtZXMgdGhlIGNoaXAgYWRkcmVzcyBpcyA2NC1iaXQgYWxpZ25lZC4KKyAqLworCitzdGF0aWMgaW50IGlwYXRoX3dyaXRlX3VtZW02NChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgX19pb21lbSAqY2FkZHIsCisJCQkgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdWFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwl1NjQgX19pb21lbSAqcmVnX2FkZHIgPSBjYWRkcjsKKwljb25zdCB1NjQgX19pb21lbSAqcmVnX2VuZCA9IHJlZ19hZGRyICsgKGNvdW50IC8gc2l6ZW9mKHU2NCkpOworCWludCByZXQ7CisKKwkvKiBub3QgdmVyeSBlZmZpY2llbnQsIGJ1dCBpdCB3b3JrcyBmb3Igbm93ICovCisJaWYgKHJlZ19hZGRyIDwgZGQtPmlwYXRoX2tyZWdiYXNlIHx8CisJICAgIHJlZ19lbmQgPiBkZC0+aXBhdGhfa3JlZ2VuZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCXdoaWxlIChyZWdfYWRkciA8IHJlZ19lbmQpIHsKKwkJdTY0IGRhdGE7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgdWFkZHIsIHNpemVvZihkYXRhKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJd3JpdGVxKGRhdGEsIHJlZ19hZGRyKTsKKworCQlyZWdfYWRkcisrOworCQl1YWRkcisrOworCX0KKwlyZXQgPSAwOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3JlYWRfdW1lbTMyIC0gcmVhZCBhIDMyLWJpdCBxdWFudGl0eSBmcm9tIHRoZSBjaGlwIGludG8gdXNlciBzcGFjZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEB1YWRkcjogdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhIGluIHVzZXIgbWVtb3J5CisgKiBAY2FkZHI6IHRoZSBzb3VyY2UgY2hpcCBhZGRyZXNzIChmdWxsIHBvaW50ZXIsIG5vdCBvZmZzZXQpCisgKiBAY291bnQ6IG51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKgorICogcmVhZCAzMiBiaXQgdmFsdWVzLCBub3QgNjQgYml0OyBmb3IgbWVtb3JpZXMgdGhhdCBvbmx5CisgKiBzdXBwb3J0IDMyIGJpdCByZWFkczsgdXN1YWxseSBhIHNpbmdsZSBkd29yZC4KKyAqLworc3RhdGljIGludCBpcGF0aF9yZWFkX3VtZW0zMihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgX191c2VyICp1YWRkciwKKwkJCSAgICAgY29uc3Qgdm9pZCBfX2lvbWVtICpjYWRkciwgc2l6ZV90IGNvdW50KQoreworCWNvbnN0IHUzMiBfX2lvbWVtICpyZWdfYWRkciA9IGNhZGRyOworCWNvbnN0IHUzMiBfX2lvbWVtICpyZWdfZW5kID0gcmVnX2FkZHIgKyAoY291bnQgLyBzaXplb2YodTMyKSk7CisJaW50IHJldDsKKworCWlmIChyZWdfYWRkciA8ICh1MzIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwKKwkgICAgcmVnX2VuZCA+ICh1MzIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2VuZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCS8qIG5vdCB2ZXJ5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIGZvciBub3cgKi8KKwl3aGlsZSAocmVnX2FkZHIgPCByZWdfZW5kKSB7CisJCXUzMiBkYXRhID0gcmVhZGwocmVnX2FkZHIpOworCQlpZiAoY29weV90b191c2VyKHVhZGRyLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXJlZ19hZGRyKys7CisJCXVhZGRyKys7CisJfQorCXJldCA9IDA7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfd3JpdGVfdW1lbTMyIC0gd3JpdGUgYSAzMi1iaXQgcXVhbnRpdHkgdG8gdGhlIGNoaXAgZnJvbSB1c2VyIHNwYWNlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGNhZGRyOiB0aGUgZGVzdGluYXRpb24gY2hpcCBhZGRyZXNzIChmdWxsIHBvaW50ZXIsIG5vdCBvZmZzZXQpCisgKiBAdWFkZHI6IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgaW4gdXNlciBtZW1vcnkKKyAqIEBjb3VudDogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiB3cml0ZSAzMiBiaXQgdmFsdWVzLCBub3QgNjQgYml0OyBmb3IgbWVtb3JpZXMgdGhhdCBvbmx5CisgKiBzdXBwb3J0IDMyIGJpdCB3cml0ZTsgdXN1YWxseSBhIHNpbmdsZSBkd29yZC4KKyAqLworCitzdGF0aWMgaW50IGlwYXRoX3dyaXRlX3VtZW0zMihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgX19pb21lbSAqY2FkZHIsCisJCQkgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdWFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwl1MzIgX19pb21lbSAqcmVnX2FkZHIgPSBjYWRkcjsKKwljb25zdCB1MzIgX19pb21lbSAqcmVnX2VuZCA9IHJlZ19hZGRyICsgKGNvdW50IC8gc2l6ZW9mKHUzMikpOworCWludCByZXQ7CisKKwlpZiAocmVnX2FkZHIgPCAodTMyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlIHx8CisJICAgIHJlZ19lbmQgPiAodTMyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdlbmQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwl3aGlsZSAocmVnX2FkZHIgPCByZWdfZW5kKSB7CisJCXUzMiBkYXRhOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsIHVhZGRyLCBzaXplb2YoZGF0YSkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBiYWlsOworCQl9CisJCXdyaXRlbChkYXRhLCByZWdfYWRkcik7CisKKwkJcmVnX2FkZHIrKzsKKwkJdWFkZHIrKzsKKwl9CisJcmV0ID0gMDsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9kaWFnX29wZW4oc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwlpbnQgdW5pdCA9IDA7IC8qIFhYWCB0aGlzIGlzIGJvZ3VzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJZGQgPSBpcGF0aF9sb29rdXAodW5pdCk7CisKKwltdXRleF9sb2NrKCZpcGF0aF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJaWYgKGlwYXRoX2RpYWdfaW51c2UpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGJhaWw7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmlwYXRoX2Rldl9saXN0LCBpcGF0aF9saXN0KSB7CisJCS8qCisJCSAqIHdlIG5lZWQgYXQgbGVhc3Qgb25lIGluZmluaXBhdGggZGV2aWNlIHRvIGJlIHByZXNlbnQKKwkJICogKGRvbid0IHVzZSBJTklUVEVELCBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBvcGVuCisJCSAqIGV2ZW4gaWYgZGV2aWNlIGlzIGluIGZyZWV6ZSBtb2RlLCB3aGljaCBjbGVhcmVkIElOSVRURUQpLgorCQkgKiBUaGVyZSBpcyBhIHNtYWxsIGFtb3VudCBvZiByaXNrIHRvIHRoaXMsIHdoaWNoIGlzIHdoeSB3ZQorCQkgKiBhbHNvIHZlcmlmeSBrcmVnYmFzZSBpcyBzZXQuCisJCSAqLworCisJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpIHx8CisJCSAgICAhZGQtPmlwYXRoX2tyZWdiYXNlKQorCQkJY29udGludWU7CisKKwkJaXBhdGhfZGlhZ19pbnVzZSA9IDE7CisJCWRpYWdfc2V0X2xpbmsgPSAwOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gLUVOT0RFVjsKKworYmFpbDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCS8qIE9ubHkgZXhwb3NlIGEgd2F5IHRvIHJlc2V0IHRoZSBkZXZpY2UgaWYgd2UKKwkgICBtYWtlIGl0IGludG8gZGlhZyBtb2RlLiAqLworCWlmIChyZXQgPT0gMCkKKwkJaXBhdGhfZXhwb3NlX3Jlc2V0KCZkZC0+cGNpZGV2LT5kZXYpOworCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX2RpYWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCW11dGV4X2xvY2soJmlwYXRoX211dGV4KTsKKwlpcGF0aF9kaWFnX2ludXNlID0gMDsKKwltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaXBhdGhfZGlhZ19yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlpbnQgdW5pdCA9IDA7IC8qIFhYWCBwcm92aWRlIGZvciByZWFkcyBvbiBvdGhlciB1bml0cyBzb21lIGRheSAqLworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl2b2lkIF9faW9tZW0gKmtyZWdfYmFzZTsKKwlzc2l6ZV90IHJldDsKKworCWRkID0gaXBhdGhfbG9va3VwKHVuaXQpOworCWlmICghZGQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWlsOworCX0KKworCWtyZWdfYmFzZSA9IGRkLT5pcGF0aF9rcmVnYmFzZTsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXQgPSAwOworCWVsc2UgaWYgKChjb3VudCAlIDQpIHx8ICgqb2ZmICUgNCkpCisJCS8qIGFkZHJlc3Mgb3IgbGVuZ3RoIGlzIG5vdCAzMi1iaXQgYWxpZ25lZCwgaGVuY2UgaW52YWxpZCAqLworCQlyZXQgPSAtRUlOVkFMOworCWVsc2UgaWYgKChjb3VudCAlIDgpIHx8ICgqb2ZmICUgOCkpCisJCS8qIGFkZHJlc3Mgb3IgbGVuZ3RoIG5vdCA2NC1iaXQgYWxpZ25lZDsgZG8gMzItYml0IHJlYWRzICovCisJCXJldCA9IGlwYXRoX3JlYWRfdW1lbTMyKGRkLCBkYXRhLCBrcmVnX2Jhc2UgKyAqb2ZmLCBjb3VudCk7CisJZWxzZQorCQlyZXQgPSBpcGF0aF9yZWFkX3VtZW02NChkZCwgZGF0YSwga3JlZ19iYXNlICsgKm9mZiwgY291bnQpOworCisJaWYgKHJldCA+PSAwKSB7CisJCSpvZmYgKz0gY291bnQ7CisJCXJldCA9IGNvdW50OworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpcGF0aF9kaWFnX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlpbnQgdW5pdCA9IDA7IC8qIFhYWCB0aGlzIGlzIGJvZ3VzICovCisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXZvaWQgX19pb21lbSAqa3JlZ19iYXNlOworCXNzaXplX3QgcmV0OworCisJZGQgPSBpcGF0aF9sb29rdXAodW5pdCk7CisJaWYgKCFkZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCWtyZWdfYmFzZSA9IGRkLT5pcGF0aF9rcmVnYmFzZTsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXQgPSAwOworCWVsc2UgaWYgKChjb3VudCAlIDQpIHx8ICgqb2ZmICUgNCkpCisJCS8qIGFkZHJlc3Mgb3IgbGVuZ3RoIGlzIG5vdCAzMi1iaXQgYWxpZ25lZCwgaGVuY2UgaW52YWxpZCAqLworCQlyZXQgPSAtRUlOVkFMOworCWVsc2UgaWYgKChjb3VudCAlIDgpIHx8ICgqb2ZmICUgOCkpCisJCS8qIGFkZHJlc3Mgb3IgbGVuZ3RoIG5vdCA2NC1iaXQgYWxpZ25lZDsgZG8gMzItYml0IHdyaXRlcyAqLworCQlyZXQgPSBpcGF0aF93cml0ZV91bWVtMzIoZGQsIGtyZWdfYmFzZSArICpvZmYsIGRhdGEsIGNvdW50KTsKKwllbHNlCisJCXJldCA9IGlwYXRoX3dyaXRlX3VtZW02NChkZCwga3JlZ19iYXNlICsgKm9mZiwgZGF0YSwgY291bnQpOworCisJaWYgKHJldCA+PSAwKSB7CisJCSpvZmYgKz0gY291bnQ7CisJCXJldCA9IGNvdW50OworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZGNkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTAsMCArMSwxOTkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKworc3RhdGljIHZvaWQgaXBhdGhfdXBkYXRlX3Bpb19idWZzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCitjb25zdCBjaGFyICppcGF0aF9nZXRfdW5pdF9uYW1lKGludCB1bml0KQoreworCXN0YXRpYyBjaGFyIGluYW1lWzE2XTsKKwlzbnByaW50ZihpbmFtZSwgc2l6ZW9mIGluYW1lLCAiaW5maW5pcGF0aCV1IiwgdW5pdCk7CisJcmV0dXJuIGluYW1lOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9nZXRfdW5pdF9uYW1lKTsKKworI2RlZmluZSBEUklWRVJfTE9BRF9NU0cgIlBhdGhTY2FsZSAiIElQQVRIX0RSVl9OQU1FICIgbG9hZGVkOiAiCisjZGVmaW5lIFBGWCBJUEFUSF9EUlZfTkFNRSAiOiAiCisKKy8qCisgKiBUaGUgc2l6ZSBoYXMgdG8gYmUgbG9uZ2VyIHRoYW4gdGhpcyBzdHJpbmcsIHNvIHdlIGNhbiBhcHBlbmQKKyAqIGJvYXJkL2NoaXAgaW5mb3JtYXRpb24gdG8gaXQgaW4gdGhlIGluaXQgY29kZS4KKyAqLworY29uc3QgY2hhciBpcGF0aF9jb3JlX3ZlcnNpb25bXSA9IElQQVRIX0lEU1RSICJcbiI7CisKK3N0YXRpYyBzdHJ1Y3QgaWRyIHVuaXRfdGFibGU7CitERUZJTkVfU1BJTkxPQ0soaXBhdGhfZGV2c19sb2NrKTsKK0xJU1RfSEVBRChpcGF0aF9kZXZfbGlzdCk7CisKK3dhaXRfcXVldWVfaGVhZF90IGlwYXRoX3NtYV9zdGF0ZV93YWl0OworCit1bnNpZ25lZCBpcGF0aF9kZWJ1ZyA9IF9fSVBBVEhfSU5GTzsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpcGF0aF9kZWJ1ZywgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIm1hc2sgZm9yIGRlYnVnIHByaW50cyIpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfZGVidWcpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJQYXRoU2NhbGUgPHN1cHBvcnRAcGF0aHNjYWxlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUGF0aHNjYWxlIEluZmluaVBhdGggZHJpdmVyIik7CisKK2NvbnN0IGNoYXIgKmlwYXRoX2liY3N0YXR1c19zdHJbXSA9IHsKKwkiRGlzYWJsZWQiLAorCSJMaW5rVXAiLAorCSJQb2xsQWN0aXZlIiwKKwkiUG9sbFF1aWV0IiwKKwkiU2xlZXBEZWxheSIsCisJIlNsZWVwUXVpZXQiLAorCSJMU3RhdGU2IiwJCS8qIHVudXNlZCAqLworCSJMU3RhdGU3IiwJCS8qIHVudXNlZCAqLworCSJDZmdEZWJvdW5jZSIsCisJIkNmZ1JjdmZDZmciLAorCSJDZmdXYWl0Um10IiwKKwkiQ2ZnSWRsZSIsCisJIlJlY292UmV0cmFpbiIsCisJIkxTdGF0ZTB4RCIsCQkvKiB1bnVzZWQgKi8KKwkiUmVjb3ZXYWl0Um10IiwKKwkiUmVjb3ZJZGxlIiwKK307CisKKy8qCisgKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGluIHRoZSBjaGlwLXNwZWNpZmljIGZpbGVzCisgKiBidXQgYXJlIGRlZmluZWQgaGVyZS4KKyAqLwordTE2IGlwYXRoX2dwaW9fc2RhX251bSwgaXBhdGhfZ3Bpb19zY2xfbnVtOwordTY0IGlwYXRoX2dwaW9fc2RhLCBpcGF0aF9ncGlvX3NjbDsKK3U2NCBpbmZpbmlwYXRoX2lfYml0c2V4dGFudDsKK2lwYXRoX2Vycl90IGluZmluaXBhdGhfZV9iaXRzZXh0YW50LCBpbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50OwordTMyIGluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrLCBpbmZpbmlwYXRoX2lfcmN2dXJnX21hc2s7CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcGF0aF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICopOworc3RhdGljIGludCBfX2RldmluaXQgaXBhdGhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7CisKKy8qIE9ubHkgbmVlZGVkIGZvciByZWdpc3RyYXRpb24sIG5vdGhpbmcgZWxzZSBuZWVkcyB0aGlzIGluZm8gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QQVRIU0NBTEUgMHgxZmMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5GSU5JUEFUSF9IVCAweGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX1BFODAwIDB4MTAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlwYXRoX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVRIU0NBTEUsIFBDSV9ERVZJQ0VfSURfSU5GSU5JUEFUSF9IVCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVRIU0NBTEUsIFBDSV9ERVZJQ0VfSURfSU5GSU5JUEFUSF9QRTgwMCkgfSwKKwl7IDAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpcGF0aF9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlwYXRoX2RyaXZlciA9IHsKKwkubmFtZSA9IElQQVRIX0RSVl9OQU1FLAorCS5wcm9iZSA9IGlwYXRoX2luaXRfb25lLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpcGF0aF9yZW1vdmVfb25lKSwKKwkuaWRfdGFibGUgPSBpcGF0aF9wY2lfdGJsLAorfTsKKworLyoKKyAqIFRoaXMgaXMgd2hlcmUgcG9ydCAwJ3MgcmN2aGRydGFpbCByZWdpc3RlciBpcyB3cml0dGVuIGJhY2s7IHdlIGFsc28KKyAqIHdhbnQgbm90aGluZyBlbHNlIHNoYXJpbmcgdGhlIGNhY2hlIGxpbmUsIHNvIG1ha2UgaXQgYSBjYWNoZSBsaW5lCisgKiBpbiBzaXplLiAgVXNlZCBmb3IgYWxsIHVuaXRzLgorICovCit2b2xhdGlsZSBfX2xlNjQgKmlwYXRoX3BvcnQwX3JjdmhkcnRhaWw7CitkbWFfYWRkcl90IGlwYXRoX3BvcnQwX3JjdmhkcnRhaWxfZG1hOworc3RhdGljIGludCBwb3J0MF9yY3ZoZHJ0YWlsX3JlZnM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX2JhcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICAgICB1MzIgKmJhcjAsIHUzMiAqYmFyMSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wLCBiYXIwKTsKKwlpZiAocmV0KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIHJlYWQgYmFyMCBiZWZvcmUgZW5hYmxlOiAiCisJCQkgICAgICAiZXJyb3IgJWRcbiIsIC1yZXQpOworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18xLCBiYXIxKTsKKwlpZiAocmV0KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIHJlYWQgYmFyMSBiZWZvcmUgZW5hYmxlOiAiCisJCQkgICAgICAiZXJyb3IgJWRcbiIsIC1yZXQpOworCisJaXBhdGhfZGJnKCJSZWFkIGJhcjAgJXggYmFyMSAleFxuIiwgKmJhcjAsICpiYXIxKTsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfZnJlZV9kZXZkYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICAgIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKGRkLT5pcGF0aF91bml0ICE9IC0xKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJaWRyX3JlbW92ZSgmdW5pdF90YWJsZSwgZGQtPmlwYXRoX3VuaXQpOworCQlsaXN0X2RlbCgmZGQtPmlwYXRoX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwl9CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZCksIGRkLCBkZC0+aXBhdGhfZG1hX2FkZHIpOworfQorCitzdGF0aWMgc3RydWN0IGlwYXRoX2RldmRhdGEgKmlwYXRoX2FsbG9jX2RldmRhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgcmV0OworCisJaWYgKCFpZHJfcHJlX2dldCgmdW5pdF90YWJsZSwgR0ZQX0tFUk5FTCkpIHsKKwkJZGQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJZGQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZCksICZkbWFfYWRkciwKKwkJCQlHRlBfS0VSTkVMKTsKKworCWlmICghZGQpIHsKKwkJZGQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJZGQtPmlwYXRoX2RtYV9hZGRyID0gZG1hX2FkZHI7CisJZGQtPmlwYXRoX3VuaXQgPSAtMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCXJldCA9IGlkcl9nZXRfbmV3KCZ1bml0X3RhYmxlLCBkZCwgJmRkLT5pcGF0aF91bml0KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUKKwkJICAgICAgICI6IENvdWxkIG5vdCBhbGxvY2F0ZSB1bml0IElEOiBlcnJvciAlZFxuIiwgLXJldCk7CisJCWlwYXRoX2ZyZWVfZGV2ZGF0YShwZGV2LCBkZCk7CisJCWRkID0gRVJSX1BUUihyZXQpOworCQlnb3RvIGJhaWxfdW5sb2NrOworCX0KKworCWRkLT5wY2lkZXYgPSBwZGV2OworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZCk7CisKKwlsaXN0X2FkZCgmZGQtPmlwYXRoX2xpc3QsICZpcGF0aF9kZXZfbGlzdCk7CisKK2JhaWxfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCitiYWlsOgorCXJldHVybiBkZDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqX19pcGF0aF9sb29rdXAoaW50IHVuaXQpCit7CisJcmV0dXJuIGlkcl9maW5kKCZ1bml0X3RhYmxlLCB1bml0KTsKK30KKworc3RydWN0IGlwYXRoX2RldmRhdGEgKmlwYXRoX2xvb2t1cChpbnQgdW5pdCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwlkZCA9IF9faXBhdGhfbG9va3VwKHVuaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGRkOworfQorCitpbnQgaXBhdGhfY291bnRfdW5pdHMoaW50ICpucHJlc2VudHAsIGludCAqbnVwcCwgdTMyICptYXhwb3J0c3ApCit7CisJaW50IG51bml0cywgbnByZXNlbnQsIG51cDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbWF4cG9ydHM7CisKKwludW5pdHMgPSBucHJlc2VudCA9IG51cCA9IG1heHBvcnRzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQludW5pdHMrKzsKKwkJaWYgKChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSAmJiBkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCQlucHJlc2VudCsrOworCQlpZiAoZGQtPmlwYXRoX2xpZCAmJgorCQkgICAgIShkZC0+aXBhdGhfZmxhZ3MgJiAoSVBBVEhfRElTQUJMRUQgfCBJUEFUSF9MSU5LRE9XTgorCQkJCQkgfCBJUEFUSF9MSU5LVU5LKSkpCisJCQludXArKzsKKwkJaWYgKGRkLT5pcGF0aF9jZmdwb3J0cyA+IG1heHBvcnRzKQorCQkJbWF4cG9ydHMgPSBkZC0+aXBhdGhfY2ZncG9ydHM7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlpZiAobnByZXNlbnRwKQorCQkqbnByZXNlbnRwID0gbnByZXNlbnQ7CisJaWYgKG51cHApCisJCSpudXBwID0gbnVwOworCWlmIChtYXhwb3J0c3ApCisJCSptYXhwb3J0c3AgPSBtYXhwb3J0czsKKworCXJldHVybiBudW5pdHM7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9wb3J0MF9yY3ZoZHJ0YWlsKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZpcGF0aF9tdXRleCk7CisKKwlpZiAoIWlwYXRoX3BvcnQwX3JjdmhkcnRhaWwpIHsKKwkJaXBhdGhfcG9ydDBfcmN2aGRydGFpbCA9CisJCQlkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKKwkJCQkJICAgSVBBVEhfUE9SVDBfUkNWSERSVEFJTF9TSVpFLAorCQkJCQkgICAmaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWEsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCisJCWlmICghaXBhdGhfcG9ydDBfcmN2aGRydGFpbCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlwb3J0MF9yY3ZoZHJ0YWlsX3JlZnMrKzsKKwlyZXQgPSAwOworCitiYWlsOgorCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9wb3J0MF9yY3ZoZHJ0YWlsKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCW11dGV4X2xvY2soJmlwYXRoX211dGV4KTsKKworCWlmICghLS1wb3J0MF9yY3ZoZHJ0YWlsX3JlZnMpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgSVBBVEhfUE9SVDBfUkNWSERSVEFJTF9TSVpFLAorCQkJCSAgKHZvaWQgKikgaXBhdGhfcG9ydDBfcmN2aGRydGFpbCwKKwkJCQkgIGlwYXRoX3BvcnQwX3JjdmhkcnRhaWxfZG1hKTsKKwkJaXBhdGhfcG9ydDBfcmN2aGRydGFpbCA9IE5VTEw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7Cit9CisKKy8qCisgKiBUaGVzZSBuZXh0IHR3byByb3V0aW5lcyBhcmUgcGxhY2Vob2xkZXJzIGluIGNhc2Ugd2UgZG9uJ3QgaGF2ZSBwZXItYXJjaAorICogY29kZSBmb3IgY29udHJvbGxpbmcgd3JpdGUgY29tYmluaW5nLiAgSWYgZXhwbGljaXQgY29udHJvbCBvZiB3cml0ZQorICogY29tYmluaW5nIGlzIG5vdCBhdmFpbGFibGUsIHBlcmZvcm1hbmNlIHdpbGwgcHJvYmFibHkgYmUgYXdmdWwuCisgKi8KKworaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBpcGF0aF9lbmFibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgaXBhdGhfZGlzYWJsZV93YyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlwYXRoX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXQsIGxlbiwgajsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CisJdTMyIGJhcjAgPSAwLCBiYXIxID0gMDsKKwl1OCByZXY7CisKKwlyZXQgPSBpbml0X3BvcnQwX3JjdmhkcnRhaWwocGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FCisJCSAgICAgICAiOiBDb3VsZCBub3QgYWxsb2NhdGUgcG9ydDBfcmN2aGRydGFpbDogZXJyb3IgJWRcbiIsCisJCSAgICAgICAtcmV0KTsKKwkJZ290byBiYWlsOworCX0KKworCWRkID0gaXBhdGhfYWxsb2NfZGV2ZGF0YShwZGV2KTsKKwlpZiAoSVNfRVJSKGRkKSkgeworCQlyZXQgPSBQVFJfRVJSKGRkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FCisJCSAgICAgICAiOiBDb3VsZCBub3QgYWxsb2NhdGUgZGV2ZGF0YTogZXJyb3IgJWRcbiIsIC1yZXQpOworCQlnb3RvIGJhaWxfcmN2aGRydGFpbDsKKwl9CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJpbml0aWFsaXppbmcgdW5pdCAjJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKKworCXJlYWRfYmFycyhkZCwgcGRldiwgJmJhcjAsICZiYXIxKTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJLyogVGhpcyBjYW4gaGFwcGVuIGlmZjoKKwkJICoKKwkJICogV2UgZGlkIGEgY2hpcCByZXNldCwgYW5kIHRoZW4gZmFpbGVkIHRvIHJlcHJvZ3JhbSB0aGUKKwkJICogQkFSLCBvciB0aGUgY2hpcCByZXNldCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuICBXZSB0aGVuCisJCSAqIHVubG9hZGVkIHRoZSBkcml2ZXIgYW5kIHJlbG9hZGVkIGl0LgorCQkgKgorCQkgKiBCb3RoIHJlc2V0IGNhc2VzIHNldCB0aGUgQkFSIGJhY2sgdG8gaW5pdGlhbCBzdGF0ZS4gIEZvcgorCQkgKiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBBRVIgc3RpY2t5IGVycm9yIGJpdCBhdCBvZmZzZXQgMHg3MTgKKwkJICogc2hvdWxkIGJlIHNldCwgYnV0IHRoZSBMaW51eCBrZXJuZWwgZG9lc24ndCB5ZXQga25vdworCQkgKiBhYm91dCB0aGF0LCBpdCBhcHBlYXJzLiAgSWYgdGhlIG9yaWdpbmFsIEJBUiB3YXMgcmV0YWluZWQKKwkJICogaW4gdGhlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIHRoaXMgbWF5IGJlIE9LLgorCQkgKi8KKwkJaXBhdGhfZGV2X2VycihkZCwgImVuYWJsZSB1bml0ICVkIGZhaWxlZDogZXJyb3IgJWRcbiIsCisJCQkgICAgICBkZC0+aXBhdGhfdW5pdCwgLXJldCk7CisJCWdvdG8gYmFpbF9kZXZkYXRhOworCX0KKwlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWxlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAicmVnYmFzZSAoMCkgJWxseCBsZW4gJWQgaXJxICV4LCB2ZW5kICV4LyV4ICIKKwkJICAgImRyaXZlcl9kYXRhICVseFxuIiwgYWRkciwgbGVuLCBwZGV2LT5pcnEsIGVudC0+dmVuZG9yLAorCQkgICBlbnQtPmRldmljZSwgZW50LT5kcml2ZXJfZGF0YSk7CisKKwlyZWFkX2JhcnMoZGQsIHBkZXYsICZiYXIwLCAmYmFyMSk7CisKKwlpZiAoIWJhcjEgJiYgIShiYXIwICYgfjB4ZikpIHsKKwkJaWYgKGFkZHIpIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCQVIgaXMgMCAocHJvYmFibGUgUkVTRVQpLCAiCisJCQkJICJyZXdyaXRpbmcgYXMgJWxseFxuIiwgYWRkcik7CisJCQlyZXQgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKAorCQkJCXBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgYWRkcik7CisJCQlpZiAocmV0KSB7CisJCQkJaXBhdGhfZGV2X2VycihkZCwgInJld3JpdGUgb2YgQkFSMCAiCisJCQkJCSAgICAgICJmYWlsZWQ6IGVyciAlZFxuIiwgLXJldCk7CisJCQkJZ290byBiYWlsX2Rpc2FibGU7CisJCQl9CisJCQlyZXQgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKAorCQkJCXBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMSwgYWRkciA+PiAzMik7CisJCQlpZiAocmV0KSB7CisJCQkJaXBhdGhfZGV2X2VycihkZCwgInJld3JpdGUgb2YgQkFSMSAiCisJCQkJCSAgICAgICJmYWlsZWQ6IGVyciAlZFxuIiwgLXJldCk7CisJCQkJZ290byBiYWlsX2Rpc2FibGU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiQkFSIGlzIDAgKHByb2JhYmxlIFJFU0VUKSwgIgorCQkJCSAgICAgICJub3QgdXNhYmxlIHVudGlsIHJlYm9vdFxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBiYWlsX2Rpc2FibGU7CisJCX0KKwl9CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIElQQVRIX0RSVl9OQU1FKTsKKwlpZiAocmV0KSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwY2lfcmVxdWVzdF9yZWdpb25zIHVuaXQgJXUgZmFpbHM6ICIKKwkJCSAiZXJyICVkXG4iLCBkZC0+aXBhdGhfdW5pdCwgLXJldCk7CisJCWdvdG8gYmFpbF9kaXNhYmxlOworCX0KKworCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOworCWlmIChyZXQpIHsKKwkJLyoKKwkJICogaWYgdGhlIDY0IGJpdCBzZXR1cCBmYWlscywgdHJ5IDMyIGJpdC4gIFNvbWUgc3lzdGVtcworCQkgKiBkbyBub3Qgc2V0dXAgNjQgYml0IG1hcHMgb24gc3lzdGVtcyB3aXRoIDJHQiBvciBsZXNzCisJCSAqIG1lbW9yeSBpbnN0YWxsZWQuCisJCSAqLworCQlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInBjaV9zZXRfZG1hX21hc2sgdW5pdCAldSAiCisJCQkJICJmYWlsczogJWRcbiIsIGRkLT5pcGF0aF91bml0LCByZXQpOworCQkJZ290byBiYWlsX3JlZ2lvbnM7CisJCX0KKwkJZWxzZQorCQkJaXBhdGhfZGJnKCJObyA2NGJpdCBETUEgbWFzaywgdXNlZCAzMiBiaXQgbWFza1xuIik7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKgorCSAqIFNhdmUgQkFScyB0byByZXdyaXRlIGFmdGVyIGRldmljZSByZXNldC4gIFNhdmUgYWxsIDY0IGJpdHMgb2YKKwkgKiBCQVIsIGp1c3QgaW4gY2FzZS4KKwkgKi8KKwlkZC0+aXBhdGhfcGNpYmFyMCA9IGFkZHI7CisJZGQtPmlwYXRoX3BjaWJhcjEgPSBhZGRyID4+IDMyOworCWRkLT5pcGF0aF9kZXZpY2VpZCA9IGVudC0+ZGV2aWNlOwkvKiBzYXZlIGZvciBsYXRlciB1c2UgKi8KKwlkZC0+aXBhdGhfdmVuZG9yaWQgPSBlbnQtPnZlbmRvcjsKKworCS8qIHNldHVwIHRoZSBjaGlwLXNwZWNpZmljIGZ1bmN0aW9ucywgYXMgZWFybHkgYXMgcG9zc2libGUuICovCisJc3dpdGNoIChlbnQtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX0hUOgorCQlpcGF0aF9pbml0X2h0NDAwX2Z1bmNzKGRkKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfUEU4MDA6CisJCWlwYXRoX2luaXRfcGU4MDBfZnVuY3MoZGQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpcGF0aF9kZXZfZXJyKGRkLCAiRm91bmQgdW5rbm93biBQYXRoU2NhbGUgZGV2aWNlaWQgMHgleCwgIgorCQkJICAgICAgImZhaWxpbmdcbiIsIGVudC0+ZGV2aWNlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZm9yIChqID0gMDsgaiA8IDY7IGorKykgeworCQlpZiAoIXBkZXYtPnJlc291cmNlW2pdLnN0YXJ0KQorCQkJY29udGludWU7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkJBUiAlZCBzdGFydCAlbHgsIGVuZCAlbHgsIGxlbiAlbHhcbiIsCisJCQkgICBqLCBwZGV2LT5yZXNvdXJjZVtqXS5zdGFydCwKKwkJCSAgIHBkZXYtPnJlc291cmNlW2pdLmVuZCwKKwkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaikpOworCX0KKworCWlmICghYWRkcikgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm8gdmFsaWQgYWRkcmVzcyBpbiBCQVIgMCFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWxfcmVnaW9uczsKKwl9CisKKwlkZC0+aXBhdGhfZGV2aWNlaWQgPSBlbnQtPmRldmljZTsJLyogc2F2ZSBmb3IgbGF0ZXIgdXNlICovCisJZGQtPmlwYXRoX3ZlbmRvcmlkID0gZW50LT52ZW5kb3I7CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCWlmIChyZXQpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byByZWFkIFBDSSByZXZpc2lvbiBJRCB1bml0ICIKKwkJCSAgICAgICIldTogZXJyICVkXG4iLCBkZC0+aXBhdGhfdW5pdCwgLXJldCk7CisJCWdvdG8gYmFpbF9yZWdpb25zOwkvKiBzaG91bGRuJ3QgZXZlciBoYXBwZW4gKi8KKwl9CisJZGQtPmlwYXRoX3BjaXJldiA9IHJldjsKKworCWRkLT5pcGF0aF9rcmVnYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShhZGRyLCBsZW4pOworCisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UpIHsKKwkJaXBhdGhfZGJnKCJVbmFibGUgdG8gbWFwIGlvIGFkZHIgJWxseCB0byBrdmlydCwgZmFpbGluZ1xuIiwKKwkJCSAgYWRkcik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbF9pb3VubWFwOworCX0KKwlkZC0+aXBhdGhfa3JlZ2VuZCA9ICh1NjQgX19pb21lbSAqKQorCQkoKHZvaWQgX19pb21lbSAqKWRkLT5pcGF0aF9rcmVnYmFzZSArIGxlbik7CisJZGQtPmlwYXRoX3BoeXNhZGRyID0gYWRkcjsJLyogdXNlZCBmb3IgaW9fcmVtYXAsIGV0Yy4gKi8KKwkvKiBmb3IgdXNlciBtbWFwICovCisJZGQtPmlwYXRoX2tyZWd2aXJ0ID0gKHU2NCBfX2lvbWVtICopIHBoeXNfdG9fdmlydChhZGRyKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJtYXBwZWQgaW8gYWRkciAlbGx4IHRvIGtyZWdiYXNlICVwICIKKwkJICAgImtyZWd2aXJ0ICVwXG4iLCBhZGRyLCBkZC0+aXBhdGhfa3JlZ2Jhc2UsCisJCSAgIGRkLT5pcGF0aF9rcmVndmlydCk7CisKKwkvKgorCSAqIGNsZWFyIGlwYXRoX2ZsYWdzIGhlcmUgaW5zdGVhZCBvZiBpbiBpcGF0aF9pbml0X2NoaXAgYXMgaXQgaXMgc2V0CisJICogYnkgaXBhdGhfc2V0dXBfaHRjb25maWcuCisJICovCisJZGQtPmlwYXRoX2ZsYWdzID0gMDsKKworCWlmIChkZC0+aXBhdGhfZl9idXMoZGQsIHBkZXYpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHNldHVwIGNvbmZpZyBzcGFjZTsgIgorCQkJICAgICAgImNvbnRpbnVpbmcgYW55d2F5XG4iKTsKKworCS8qCisJICogc2V0IHVwIG91ciBpbnRlcnJ1cHQgaGFuZGxlcjsgU0FfU0hJUlEgcHJvYmFibHkgbm90IG5lZWRlZCwKKwkgKiBzaW5jZSBNU0kgaW50ZXJydXB0cyBzaG91bGRuJ3QgYmUgc2hhcmVkIGJ1dCB3b24ndCAgaHVydCBmb3Igbm93LgorCSAqIGNoZWNrIDAgaXJxIGFmdGVyIHdlIHJldHVybiBmcm9tIGNoaXAtc3BlY2lmaWMgYnVzIHNldHVwLCBzaW5jZQorCSAqIHRoYXQgY2FuIGFmZmVjdCB0aGlzIGR1ZSB0byBzZXR1cAorCSAqLworCWlmICghcGRldi0+aXJxKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiaXJxIGlzIDAsIEJJT1MgZXJyb3I/ICBJbnRlcnJ1cHRzIHdvbid0ICIKKwkJCSAgICAgICJ3b3JrXG4iKTsKKwllbHNlIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcGF0aF9pbnRyLCBTQV9TSElSUSwKKwkJCQkgIElQQVRIX0RSVl9OQU1FLCBkZCk7CisJCWlmIChyZXQpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCBzZXR1cCBpcnEgaGFuZGxlciwgIgorCQkJCSAgICAgICJpcnE9JXU6ICVkXG4iLCBwZGV2LT5pcnEsIHJldCk7CisJCQlnb3RvIGJhaWxfaW91bm1hcDsKKwkJfQorCX0KKworCXJldCA9IGlwYXRoX2luaXRfY2hpcChkZCwgMCk7CS8qIGRvIHRoZSBjaGlwLXNwZWNpZmljIGluaXQgKi8KKwlpZiAocmV0KQorCQlnb3RvIGJhaWxfaW91bm1hcDsKKworCXJldCA9IGlwYXRoX2VuYWJsZV93YyhkZCk7CisKKwlpZiAocmV0KSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJXcml0ZSBjb21iaW5pbmcgbm90IGVuYWJsZWQgIgorCQkJICAgICAgIihlcnIgJWQpOiBwZXJmb3JtYW5jZSBtYXkgYmUgcG9vclxuIiwKKwkJCSAgICAgIC1yZXQpOworCQlyZXQgPSAwOworCX0KKworCWlwYXRoX2RldmljZV9jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldiwgZGQpOworCWlwYXRoZnNfYWRkX2RldmljZShkZCk7CisJaXBhdGhfdXNlcl9hZGQoZGQpOworCWlwYXRoX2xheWVyX2FkZChkZCk7CisKKwlnb3RvIGJhaWw7CisKK2JhaWxfaW91bm1hcDoKKwlpb3VubWFwKCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlKTsKKworYmFpbF9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKK2JhaWxfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKK2JhaWxfZGV2ZGF0YToKKwlpcGF0aF9mcmVlX2RldmRhdGEocGRldiwgZGQpOworCitiYWlsX3JjdmhkcnRhaWw6CisJY2xlYW51cF9wb3J0MF9yY3ZoZHJ0YWlsKHBkZXYpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcGF0aF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgInJlbW92aW5nLCBwZGV2PSVwXG4iLCBwZGV2KTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCWRkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlwYXRoX2xheWVyX2RlbChkZCk7CisJaXBhdGhfdXNlcl9kZWwoZGQpOworCWlwYXRoZnNfcmVtb3ZlX2RldmljZShkZCk7CisJaXBhdGhfZGV2aWNlX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LCBkZCk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUmVsZWFzaW5nIHBjaSBtZW1vcnkgcmVnaW9ucywgZGQgJXAsICIKKwkJICAgInVuaXQgJXVcbiIsIGRkLCAodTMyKSBkZC0+aXBhdGhfdW5pdCk7CisJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbm1hcHBpbmcga3JlZ2Jhc2UgJXBcbiIsCisJCQkgICBkZC0+aXBhdGhfa3JlZ2Jhc2UpOworCQlpb3VubWFwKCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlKTsKKwkJZGQtPmlwYXRoX2tyZWdiYXNlID0gTlVMTDsKKwl9CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJjYWxsaW5nIHBjaV9kaXNhYmxlX2RldmljZVxuIik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJaXBhdGhfZnJlZV9kZXZkYXRhKHBkZXYsIGRkKTsKKwljbGVhbnVwX3BvcnQwX3JjdmhkcnRhaWwocGRldik7Cit9CisKKy8qIGdlbmVyYWwgZHJpdmVyIHVzZSAqLworREVGSU5FX01VVEVYKGlwYXRoX211dGV4KTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpcGF0aF9waW9hdmFpbF9sb2NrKTsKKworLyoqCisgKiBpcGF0aF9kaXNhcm1fcGlvYnVmcyAtIGNhbmNlbCBhIHJhbmdlIG9mIFBJTyBidWZmZXJzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGZpcnN0OiB0aGUgZmlyc3QgUElPIGJ1ZmZlciB0byBjYW5jZWwKKyAqIEBjbnQ6IHRoZSBudW1iZXIgb2YgUElPIGJ1ZmZlcnMgdG8gY2FuY2VsCisgKgorICogY2FuY2VsIGEgcmFuZ2Ugb2YgUElPIGJ1ZmZlcnMsIHVzZWQgd2hlbiB0aGV5IG1pZ2h0IGJlIGFybWVkLCBidXQKKyAqIG5vdCB0cmlnZ2VyZWQuICBVc2VkIGF0IGluaXQgdG8gZW5zdXJlIGJ1ZmZlciBzdGF0ZSwgYW5kIGFsc28gdXNlcgorICogcHJvY2VzcyBjbG9zZSwgaW4gY2FzZSBpdCBkaWVkIHdoaWxlIHdyaXRpbmcgdG8gYSBQSU8gYnVmZmVyCisgKiBBbHNvIGFmdGVyIGVycm9ycy4KKyAqLwordm9pZCBpcGF0aF9kaXNhcm1fcGlvYnVmcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIGZpcnN0LAorCQkJICB1bnNpZ25lZCBjbnQpCit7CisJdW5zaWduZWQgaSwgbGFzdCA9IGZpcnN0ICsgY250OworCXU2NCBzZW5kY3RybCwgc2VuZG9yaWc7CisKKwlpcGF0aF9jZGJnKFBLVCwgImRpc2FybSAldSBQSU9idWZzIGZpcnN0PSV1XG4iLCBjbnQsIGZpcnN0KTsKKwlzZW5kb3JpZyA9IGRkLT5pcGF0aF9zZW5kY3RybCB8IElORklOSVBBVEhfU19ESVNBUk07CisJZm9yIChpID0gZmlyc3Q7IGkgPCBsYXN0OyBpKyspIHsKKwkJc2VuZGN0cmwgPSBzZW5kb3JpZyB8CisJCQkoaSA8PCBJTkZJTklQQVRIX1NfRElTQVJNUElPQlVGX1NISUZUKTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCQkgc2VuZGN0cmwpOworCX0KKworCS8qCisJICogV3JpdGUgaXQgYWdhaW4gd2l0aCBjdXJyZW50IHZhbHVlLCBpbiBjYXNlIGlwYXRoX3NlbmRjdHJsIGNoYW5nZWQKKwkgKiB3aGlsZSB3ZSB3ZXJlIGxvb3Bpbmc7IG5vIGNyaXRpY2FsIGJpdHMgdGhhdCB3b3VsZCByZXF1aXJlCisJICogbG9ja2luZy4KKwkgKgorCSAqIFdyaXRlIGEgMCwgYW5kIHRoZW4gdGhlIG9yaWdpbmFsIHZhbHVlLCByZWFkaW5nIHNjcmF0Y2ggaW4KKwkgKiBiZXR3ZWVuLiAgVGhpcyBzZWVtcyB0byBhdm9pZCBhIGNoaXAgdGltaW5nIHJhY2UgdGhhdCBjYXVzZXMKKwkgKiBwaW9hdmFpbCB1cGRhdGVzIHRvIG1lbW9yeSB0byBzdG9wLgorCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgMCk7CisJc2VuZG9yaWcgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7Cit9CisKKy8qKgorICogaXBhdGhfd2FpdF9saW5rc3RhdGUgLSB3YWl0IGZvciBhbiBJQiBsaW5rIHN0YXRlIGNoYW5nZSB0byBvY2N1cgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBzdGF0ZTogdGhlIHN0YXRlIHRvIHdhaXQgZm9yCisgKiBAbXNlY3M6IHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQKKyAqCisgKiB3YWl0IHVwIHRvIG1zZWNzIG1pbGxpc2Vjb25kcyBmb3IgSUIgbGluayBzdGF0ZSBjaGFuZ2UgdG8gb2NjdXIgZm9yCisgKiBub3csIHRha2UgdGhlIGVhc3kgcG9sbGluZyByb3V0ZS4gIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkKKyAqIGlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUuICBSZXR1cm5zIDAgaWYgc3RhdGUgcmVhY2hlZCwgb3RoZXJ3aXNlCisgKiAtRVRJTUVET1VUIHN0YXRlIGNhbiBoYXZlIG11bHRpcGxlIHN0YXRlcyBzZXQsIGZvciBhbnkgb2Ygc2V2ZXJhbAorICogdHJhbnNpdGlvbnMuCisgKi8KK2ludCBpcGF0aF93YWl0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBzdGF0ZSwgaW50IG1zZWNzKQoreworCWRkLT5pcGF0aF9zbWFfc3RhdGVfd2FudGVkID0gc3RhdGU7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaXBhdGhfc21hX3N0YXRlX3dhaXQsCisJCQkJCSAoZGQtPmlwYXRoX2ZsYWdzICYgc3RhdGUpLAorCQkJCQkgbXNlY3NfdG9famlmZmllcyhtc2VjcykpOworCWRkLT5pcGF0aF9zbWFfc3RhdGVfd2FudGVkID0gMDsKKworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIHN0YXRlKSkgeworCQl1NjQgdmFsOworCQlpcGF0aF9jZGJnKFNNQSwgIkRpZG4ndCByZWFjaCBsaW5rc3RhdGUgJXMgd2l0aGluICV1IG1zXG4iLAorCQkJICAgLyogdGVzdCBJTklUIGFoZWFkIG9mIERPV04sIGJvdGggY2FuIGJlIHNldCAqLworCQkJICAgKHN0YXRlICYgSVBBVEhfTElOS0lOSVQpID8gIklOSVQiIDoKKwkJCSAgICgoc3RhdGUgJiBJUEFUSF9MSU5LRE9XTikgPyAiRE9XTiIgOgorCQkJICAgICgoc3RhdGUgJiBJUEFUSF9MSU5LQVJNRUQpID8gIkFSTSIgOiAiQUNUSVZFIikpLAorCQkJICAgbXNlY3MpOworCQl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJpYmNjPSVsbHggaWJjc3RhdHVzPSVsbHggKCVzKVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlwYXRoX3JlYWRfa3JlZzY0KAorCQkJCSAgIGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLAorCQkJICAgaXBhdGhfaWJjc3RhdHVzX3N0clt2YWwgJiAweGZdKTsKKwl9CisJcmV0dXJuIChkZC0+aXBhdGhfZmxhZ3MgJiBzdGF0ZSkgPyAwIDogLUVUSU1FRE9VVDsKK30KKwordm9pZCBpcGF0aF9kZWNvZGVfZXJyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sIGlwYXRoX2Vycl90IGVycikKK3sKKwkqYnVmID0gJ1wwJzsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JIRFJMRU4pCisJCXN0cmxjYXQoYnVmLCAicmhkcmxlbiAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JCQURUSUQpCisJCXN0cmxjYXQoYnVmLCAicmJhZHRpZCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JCQURWRVJTSU9OKQorCQlzdHJsY2F0KGJ1ZiwgInJiYWR2ZXJzaW9uICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkhEUikKKwkJc3RybGNhdChidWYsICJyaGRyICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkxPTkdQS1RMRU4pCisJCXN0cmxjYXQoYnVmLCAicmxvbmdwa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4pCisJCXN0cmxjYXQoYnVmLCAicnNob3J0cGt0bGVuICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUk1BWFBLVExFTikKKwkJc3RybGNhdChidWYsICJybWF4cGt0bGVuICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUk1JTlBLVExFTikKKwkJc3RybGNhdChidWYsICJybWlucGt0bGVuICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkZPUk1BVEVSUikKKwkJc3RybGNhdChidWYsICJyZm9ybWF0ZXJyICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUlVOU1VQVkwpCisJCXN0cmxjYXQoYnVmLCAicnVuc3VwdmwgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SVU5FWFBDSEFSKQorCQlzdHJsY2F0KGJ1ZiwgInJ1bmV4cGNoYXIgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SSUJGTE9XKQorCQlzdHJsY2F0KGJ1ZiwgInJpYmZsb3cgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SRUJQKQorCQlzdHJsY2F0KGJ1ZiwgIkVCUCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1NVTkRFUlJVTikKKwkJc3RybGNhdChidWYsICJzdW5kZXJydW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TUElPQVJNTEFVTkNIKQorCQlzdHJsY2F0KGJ1ZiwgInNwaW9hcm1sYXVuY2ggIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0pCisJCXN0cmxjYXQoYnVmLCAic3VuZXhwZXJycGt0bnVtICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU0RST1BQRUREQVRBUEtUKQorCQlzdHJsY2F0KGJ1ZiwgInNkcm9wcGVkZGF0YXBrdCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUKQorCQlzdHJsY2F0KGJ1ZiwgInNkcm9wcGVkc21wcGt0ICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU01BWFBLVExFTikKKwkJc3RybGNhdChidWYsICJzbWF4cGt0bGVuICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU01JTlBLVExFTikKKwkJc3RybGNhdChidWYsICJzbWlucGt0bGVuICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU1VOU1VQVkwpCisJCXN0cmxjYXQoYnVmLCAic3Vuc3VwVkwgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9TUEtUTEVOKQorCQlzdHJsY2F0KGJ1ZiwgInNwa3RsZW4gIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9JTlZBTElEQUREUikKKwkJc3RybGNhdChidWYsICJpbnZhbGlkYWRkciAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JJQ1JDKQorCQlzdHJsY2F0KGJ1ZiwgIkNSQyAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JWQ1JDKQorCQlzdHJsY2F0KGJ1ZiwgIlZDUkMgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCkKKwkJc3RybGNhdChidWYsICJyY3ZlZ3JmdWxsICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwpCisJCXN0cmxjYXQoYnVmLCAicmN2aGRyZnVsbCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCkKKwkJc3RybGNhdChidWYsICJpYmNzdGF0dXNjaGcgIiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9SSUJMT1NUTElOSykKKwkJc3RybGNhdChidWYsICJyaWJsb3N0bGluayAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX0hBUkRXQVJFKQorCQlzdHJsY2F0KGJ1ZiwgImhhcmR3YXJlICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkVTRVQpCisJCXN0cmxjYXQoYnVmLCAicmVzZXQgIiwgYmxlbik7Cit9CisKKy8qKgorICogZ2V0X3JoZl9lcnJzdHJpbmcgLSBkZWNvZGUgUkhGIGVycm9ycworICogQGVycjogdGhlIGVyciBudW1iZXIKKyAqIEBtc2c6IHRoZSBvdXRwdXQgYnVmZmVyCisgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogb25seSB1c2VkIG9uZSBwbGFjZSBub3csIG1heSB3YW50IG1vcmUgbGF0ZXIKKyAqLworc3RhdGljIHZvaWQgZ2V0X3JoZl9lcnJzdHJpbmcodTMyIGVyciwgY2hhciAqbXNnLCBzaXplX3QgbGVuKQoreworCS8qIGlmIG5vIGVycm9ycywgYW5kIHNvIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hhdCdzIGZpcnN0ICovCisJKm1zZyA9ICdcMCc7CisKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfSF9JQ1JDRVJSKQorCQlzdHJsY2F0KG1zZywgImljcmNlcnIgIiwgbGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfSF9WQ1JDRVJSKQorCQlzdHJsY2F0KG1zZywgInZjcmNlcnIgIiwgbGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfSF9QQVJJVFlFUlIpCisJCXN0cmxjYXQobXNnLCAicGFyaXR5ZXJyICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0hfTEVORVJSKQorCQlzdHJsY2F0KG1zZywgImxlbmVyciAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX01UVUVSUikKKwkJc3RybGNhdChtc2csICJtdHVlcnIgIiwgbGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9SSEZfSF9JSERSRVJSKQorCQkvKiBpbmZpbmlwYXRoIGhkciBjaGVja3N1bSBlcnJvciAqLworCQlzdHJsY2F0KG1zZywgImlwYXRoaGRyZXJyICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0hfVElERVJSKQorCQlzdHJsY2F0KG1zZywgInRpZGVyciAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX01LRVJSKQorCQkvKiBiYWQgcG9ydCwgb2Zmc2V0LCBldGMuICovCisJCXN0cmxjYXQobXNnLCAiaW52YWxpZCBpcGF0aGhkciAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9IX0lCRVJSKQorCQlzdHJsY2F0KG1zZywgImliZXJyICIsIGxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfUkhGX0xfU1dBKQorCQlzdHJsY2F0KG1zZywgInN3QSAiLCBsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX1JIRl9MX1NXQikKKwkJc3RybGNhdChtc2csICJzd0IgIiwgbGVuKTsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfZWdyYnVmIC0gZ2V0IGFuIGVhZ2VyIGJ1ZmZlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBidWZudW06IHRoZSBlYWdlciBidWZmZXIgdG8gZ2V0CisgKiBAZXJyOiB1bnVzZWQKKyAqCisgKiBtdXN0IG9ubHkgYmUgY2FsbGVkIGlmIGlwYXRoX3BkW3BvcnRdIGlzIGtub3duIHRvIGJlIGFsbG9jYXRlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmlwYXRoX2dldF9lZ3JidWYoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgYnVmbnVtLAorCQkJCSAgICAgaW50IGVycikKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX3BvcnQwX3NrYnMgPworCQkodm9pZCAqKWRkLT5pcGF0aF9wb3J0MF9za2JzW2J1Zm51bV0tPmRhdGEgOiBOVUxMOworfQorCisvKioKKyAqIGlwYXRoX2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYiBhbmQgYnVmZmVyIHdpdGggcG9zc2libGUgY29uc3RyYWludHMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAZ2ZwX21hc2s6IHRoZSBza19idWZmIFNGUCBtYXNrCisgKi8KK3N0cnVjdCBza19idWZmICppcGF0aF9hbGxvY19za2Ioc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCWdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIGxlbjsKKworCS8qCisJICogT25seSBmdWxseSBzdXBwb3J0ZWQgd2F5IHRvIGhhbmRsZSB0aGlzIGlzIHRvIGFsbG9jYXRlIGxvdHMKKwkgKiBleHRyYSwgYWxpZ24gYXMgbmVlZGVkLCBhbmQgdGhlbiBkbyBza2JfcmVzZXJ2ZSgpLiAgVGhhdCB3YXN0ZXMKKwkgKiBhIGxvdCBvZiBtZW1vcnkuLi4gIEknbGwgaGF2ZSB0byBoYWNrIHRoaXMgaW50byBpbmZpbmlwYXRoX2NvcHkKKwkgKiBhbHNvLgorCSAqLworCisJLyoKKwkgKiBXZSBuZWVkIDQgZXh0cmEgYnl0ZXMgZm9yIHVuYWxpZ25lZCB0cmFuc2ZlciBjb3B5aW5nCisJICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzRCWVRFX1RJRCkgeworCQkvKiB3ZSBuZWVkIGEgNEtCIG11bHRpcGxlIGFsaWdubWVudCwgYW5kIHRoZXJlIGlzIG5vIHdheQorCQkgKiB0byBkbyBpdCBleGNlcHQgdG8gYWxsb2NhdGUgZXh0cmEgYW5kIHRoZW4gc2tiX3Jlc2VydmUKKwkJICogZW5vdWdoIHRvIGJyaW5nIGl0IHVwIHRvIHRoZSByaWdodCBhbGlnbm1lbnQuCisJCSAqLworCQlsZW4gPSBkZC0+aXBhdGhfaWJtYXhsZW4gKyA0ICsgKDEgPDwgMTEpIC0gMTsKKwl9CisJZWxzZQorCQlsZW4gPSBkZC0+aXBhdGhfaWJtYXhsZW4gKyA0OworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrKTsKKwlpZiAoIXNrYikgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrYnVmZiwgbGVuZ3RoICV1XG4iLAorCQkJICAgICAgbGVuKTsKKwkJZ290byBiYWlsOworCX0KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfNEJZVEVfVElEKSB7CisJCXUzMiB1bmEgPSAoKDEgPDwgMTEpIC0gMSkgJiAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhICsgNCk7CisJCWlmICh1bmEpCisJCQlza2JfcmVzZXJ2ZShza2IsIDQgKyAoMSA8PCAxMSkgLSB1bmEpOworCQllbHNlCisJCQlza2JfcmVzZXJ2ZShza2IsIDQpOworCX0gZWxzZQorCQlza2JfcmVzZXJ2ZShza2IsIDQpOworCitiYWlsOgorCXJldHVybiBza2I7Cit9CisKKy8qKgorICogaXBhdGhfcmN2X2xheWVyIC0gcmVjZWl2ZSBhIHBhY2tldCBmb3IgdGhlIGxheWVyZWQgKGV0aGVybmV0KSBkcml2ZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAZXRhaWw6IHRoZSBza19idWZmIG51bWJlcgorICogQHRsZW46IHRoZSB0b3RhbCBwYWNrZXQgbGVuZ3RoCisgKiBAaGRyOiB0aGUgZXRoZXJuZXQgaGVhZGVyCisgKgorICogU2VwYXJhdGUgcm91dGluZSBmb3IgYmV0dGVyIG92ZXJhbGwgb3B0aW1pemF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3Jjdl9sYXllcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBldGFpbCwKKwkJCSAgICB1MzIgdGxlbiwgc3RydWN0IGV0aGVyX2hlYWRlciAqaGRyKQoreworCXUzMiBlbGVuOworCXU4IHBhZCwgKmJ0aGJ5dGVzOworCXN0cnVjdCBza19idWZmICpza2IsICpuc2tiOworCisJaWYgKGRkLT5pcGF0aF9wb3J0MF9za2JzICYmIGhkci0+c3ViX29wY29kZSA9PSBPUENPREVfRU5DQVApIHsKKwkJLyoKKwkJICogQWxsb2NhdGUgYSBuZXcgc2tfYnVmZiB0byByZXBsYWNlIHRoZSBvbmUgd2UgZ2l2ZQorCQkgKiB0byB0aGUgbmV0d29yayBzdGFjay4KKwkJICovCisJCW5za2IgPSBpcGF0aF9hbGxvY19za2IoZGQsIEdGUF9BVE9NSUMpOworCQlpZiAoIW5za2IpIHsKKwkJCS8qIGNvdW50IE9LIHBhY2tldHMgdGhhdCB3ZSBkcm9wICovCisJCQlpcGF0aF9zdGF0cy5zcHNfa3Jkcm9wcysrOworCQkJcmV0dXJuOworCQl9CisKKwkJYnRoYnl0ZXMgPSAodTggKikgaGRyLT5idGg7CisJCXBhZCA9IChidGhieXRlc1sxXSA+PiA0KSAmIDM7CisJCS8qICtDUkMzMiAqLworCQllbGVuID0gdGxlbiAtIChzaXplb2YoKmhkcikgKyBwYWQgKyBzaXplb2YodTMyKSk7CisKKwkJc2tiID0gZGQtPmlwYXRoX3BvcnQwX3NrYnNbZXRhaWxdOworCQlkZC0+aXBhdGhfcG9ydDBfc2tic1tldGFpbF0gPSBuc2tiOworCQlza2JfcHV0KHNrYiwgZWxlbik7CisKKwkJZGQtPmlwYXRoX2ZfcHV0X3RpZChkZCwgZXRhaWwgKyAodTY0IF9faW9tZW0gKikKKwkJCQkgICAgKChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlCisJCQkJICAgICArIGRkLT5pcGF0aF9yY3ZlZ3JiYXNlKSwgMCwKKwkJCQkgICAgdmlydF90b19waHlzKG5za2ItPmRhdGEpKTsKKworCQlfX2lwYXRoX2xheWVyX3JjdihkZCwgaGRyLCBza2IpOworCisJCS8qIGFub3RoZXIgZXRoZXIgcGFja2V0IHJlY2VpdmVkICovCisJCWlwYXRoX3N0YXRzLnNwc19ldGhlcl9ycGt0cysrOworCX0KKwllbHNlIGlmIChoZHItPnN1Yl9vcGNvZGUgPT0gT1BDT0RFX0xJRF9BUlApCisJCV9faXBhdGhfbGF5ZXJfcmN2X2xpZChkZCwgaGRyKTsKK30KKworLyoKKyAqIGlwYXRoX2tyZWNlaXZlIC0gcmVjZWl2ZSBhIHBhY2tldAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgZXJyb3JzIG9yIHJlY2VpdmUgaW50ZXJydXB0CisgKi8KK3ZvaWQgaXBhdGhfa3JlY2VpdmUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCAqcmM7CisJdm9pZCAqZWJ1ZjsKKwljb25zdCB1MzIgcnNpemUgPSBkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZTsJLyogd29yZHMgKi8KKwljb25zdCB1MzIgbWF4Y250ID0gZGQtPmlwYXRoX3JjdmhkcmNudCAqIHJzaXplOwkvKiB3b3JkcyAqLworCXUzMiBldGFpbCA9IC0xLCBsLCBoZHJxdGFpbDsKKwlzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyICpoZHI7CisJdTMyIGVmbGFncywgaSwgZXR5cGUsIHRsZW4sIHBrdHRvdCA9IDA7CisJc3RhdGljIHU2NCB0b3RjYWxsczsJLyogc3RhdHMsIG1heSBldmVudHVhbGx5IHJlbW92ZSAqLworCWNoYXIgZW1zZ1sxMjhdOworCisJaWYgKCFkZC0+aXBhdGhfaGRycXRhaWxwdHIpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJoZHJxdGFpbHB0ciBub3Qgc2V0LCBjYW4ndCBkbyByZWNlaXZlc1xuIik7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBUaGVyZSBpcyBhbHJlYWR5IGEgdGhyZWFkIHByb2Nlc3NpbmcgdGhpcyBxdWV1ZS4gKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmZGQtPmlwYXRoX3Jjdl9wZW5kaW5nKSkKKwkJZ290byBiYWlsOworCisJaWYgKGRkLT5pcGF0aF9wb3J0MGhlYWQgPT0KKwkgICAgKHUzMilsZTY0X3RvX2NwdSgqZGQtPmlwYXRoX2hkcnF0YWlscHRyKSkKKwkJZ290byBkb25lOworCitnb3Rtb3JlOgorCS8qCisJICogcmVhZCBvbmx5IG9uY2UgYXQgc3RhcnQuICBJZiBpbiBmbG9vZCBzaXR1YXRpb24sIHRoaXMgaGVscHMKKwkgKiBwZXJmb3JtYW5jZSBzbGlnaHRseS4gIElmIG1vcmUgYXJyaXZlIHdoaWxlIHdlIGFyZSBwcm9jZXNzaW5nLAorCSAqIHdlJ2xsIGNvbWUgYmFjayBoZXJlIGFuZCBkbyB0aGVtCisJICovCisJaGRycXRhaWwgPSAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpOworCisJZm9yIChpID0gMCwgbCA9IGRkLT5pcGF0aF9wb3J0MGhlYWQ7IGwgIT0gaGRycXRhaWw7IGkrKykgeworCQl1MzIgcXA7CisJCXU4ICpidGhieXRlczsKKworCQlyYyA9ICh1NjQgKikgKGRkLT5pcGF0aF9wZFswXS0+cG9ydF9yY3ZoZHJxICsgKGwgPDwgMikpOworCQloZHIgPSAoc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlciAqKSZyY1sxXTsKKwkJLyoKKwkJICogY291bGQgbWFrZSBhIG5ldHdvcmsgb3JkZXIgdmVyc2lvbiBvZiBJUEFUSF9LRF9RUCwgYW5kCisJCSAqIGRvIHRoZSBvYnZpb3VzIHNoaWZ0IGJlZm9yZSBtYXNraW5nIHRvIHNwZWVkIHRoaXMgdXAuCisJCSAqLworCQlxcCA9IG50b2hsKGhkci0+YnRoWzFdKSAmIDB4ZmZmZmZmOworCQlidGhieXRlcyA9ICh1OCAqKSBoZHItPmJ0aDsKKworCQllZmxhZ3MgPSBpcHNfZ2V0X2hkcl9lcnJfZmxhZ3MoKF9fbGUzMiAqKSByYyk7CisJCWV0eXBlID0gaXBzX2dldF9yY3ZfdHlwZSgoX19sZTMyICopIHJjKTsKKwkJLyogdG90YWwgbGVuZ3RoICovCisJCXRsZW4gPSBpcHNfZ2V0X2xlbmd0aF9pbl9ieXRlcygoX19sZTMyICopIHJjKTsKKwkJZWJ1ZiA9IE5VTEw7CisJCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCkgeworCQkJLyoKKwkJCSAqIGl0IHR1cm5zIG91dCB0aGF0IHRoZSBjaGlwcyB1c2VzIGFuIGVhZ2VyIGJ1ZmZlcgorCQkJICogZm9yIGFsbCBub24tZXhwZWN0ZWQgcGFja2V0cywgd2hldGhlciBpdCAibmVlZHMiCisJCQkgKiBvbmUgb3Igbm90LiAgU28gYWx3YXlzIGdldCB0aGUgaW5kZXgsIGJ1dCBkb24ndAorCQkJICogc2V0IGVidWYgKHNvIHdlIHRyeSB0byBjb3B5IGRhdGEpIHVubGVzcyB0aGUKKwkJCSAqIGxlbmd0aCByZXF1aXJlcyBpdC4KKwkJCSAqLworCQkJZXRhaWwgPSBpcHNfZ2V0X2luZGV4KChfX2xlMzIgKikgcmMpOworCQkJaWYgKHRsZW4gPiBzaXplb2YoKmhkcikgfHwKKwkJCSAgICBldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QpCisJCQkJZWJ1ZiA9IGlwYXRoX2dldF9lZ3JidWYoZGQsIGV0YWlsLCAwKTsKKwkJfQorCisJCS8qCisJCSAqIGJvdGggdGlkZXJyIGFuZCBpcGF0aGhkcmVyciBhcmUgc2V0IGZvciBhbGwgcGxhaW4gSUIKKwkJICogcGFja2V0czsgb25seSBpcGF0aGhkcmVyciBzaG91bGQgYmUgc2V0LgorCQkgKi8KKworCQlpZiAoZXR5cGUgIT0gUkNWSFFfUkNWX1RZUEVfTk9OX0tEICYmIGV0eXBlICE9CisJCSAgICBSQ1ZIUV9SQ1ZfVFlQRV9FUlJPUiAmJiBpcHNfZ2V0X2lwYXRoX3ZlcigKKwkJCSAgICBoZHItPmlwaC52ZXJfcG9ydF90aWRfb2Zmc2V0KSAhPQorCQkgICAgSVBTX1BST1RPX1ZFUlNJT04pIHsKKwkJCWlwYXRoX2NkYmcoUEtULCAiQmFkIEluZmluaVBhdGggcHJvdG9jb2wgdmVyc2lvbiAiCisJCQkJICAgIiV4XG4iLCBldHlwZSk7CisJCX0KKworCQlpZiAoZWZsYWdzICYgfihJTkZJTklQQVRIX1JIRl9IX1RJREVSUiB8CisJCQkgICAgICAgSU5GSU5JUEFUSF9SSEZfSF9JSERSRVJSKSkgeworCQkJZ2V0X3JoZl9lcnJzdHJpbmcoZWZsYWdzLCBlbXNnLCBzaXplb2YgZW1zZyk7CisJCQlpcGF0aF9jZGJnKFBLVCwgIlJIRmVycnMgJXggaGRycXRhaWw9JXggdHlwPSV1ICIKKwkJCQkgICAidGxlbj0leCBvcGNvZGU9JXggZWdyaWR4PSV4OiAlc1xuIiwKKwkJCQkgICBlZmxhZ3MsIGwsIGV0eXBlLCB0bGVuLCBidGhieXRlc1swXSwKKwkJCQkgICBpcHNfZ2V0X2luZGV4KChfX2xlMzIgKikgcmMpLCBlbXNnKTsKKwkJfSBlbHNlIGlmIChldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QpIHsKKwkJCQlpbnQgcmV0ID0gX19pcGF0aF92ZXJic19yY3YoZGQsIHJjICsgMSwKKwkJCQkJCQkgICAgZWJ1ZiwgdGxlbik7CisJCQkJaWYgKHJldCA9PSAtRU5PREVWKQorCQkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsCisJCQkJCQkgICAicmVjZWl2ZWQgSUIgcGFja2V0LCAiCisJCQkJCQkgICAibm90IFNNQSAoUVA9JXgpXG4iLCBxcCk7CisJCX0gZWxzZSBpZiAoZXR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfRUFHRVIpIHsKKwkJCWlmIChxcCA9PSBJUEFUSF9LRF9RUCAmJgorCQkJICAgIGJ0aGJ5dGVzWzBdID09IGlwYXRoX2xheWVyX3Jjdl9vcGNvZGUgJiYKKwkJCSAgICBlYnVmKQorCQkJCWlwYXRoX3Jjdl9sYXllcihkZCwgZXRhaWwsIHRsZW4sCisJCQkJCQkoc3RydWN0IGV0aGVyX2hlYWRlciAqKWhkcik7CisJCQllbHNlCisJCQkJaXBhdGhfY2RiZyhQS1QsICJ0eXAgJXgsIG9wY29kZSAleCAoZWFnZXIsICIKKwkJCQkJICAgInFwPSV4KSwgbGVuICV4OyBpZ25vcmVkXG4iLAorCQkJCQkgICBldHlwZSwgYnRoYnl0ZXNbMF0sIHFwLCB0bGVuKTsKKwkJfQorCQllbHNlIGlmIChldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCkKKwkJCWlwYXRoX2RiZygiQnVnOiBFeHBlY3RlZCBUSUQsIG9wY29kZSAleDsgaWdub3JlZFxuIiwKKwkJCQkgIGJlMzJfdG9fY3B1KGhkci0+YnRoWzBdKSAmIDB4ZmYpOworCQllbHNlIGlmIChlZmxhZ3MgJiAoSU5GSU5JUEFUSF9SSEZfSF9USURFUlIgfAorCQkJCSAgIElORklOSVBBVEhfUkhGX0hfSUhEUkVSUikpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgdHlwZSAzIHBhY2tldCwgb25seSB0aGUgTFJIIGlzIGluIHRoZQorCQkJICogcmN2aGRycSwgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciBpcyBpbiB0aGUgZWFnZXIKKwkJCSAqIGJ1ZmZlci4KKwkJCSAqLworCQkJdTggb3Bjb2RlOworCQkJaWYgKGVidWYpIHsKKwkJCQlidGhieXRlcyA9ICh1OCAqKSBlYnVmOworCQkJCW9wY29kZSA9ICpidGhieXRlczsKKwkJCX0KKwkJCWVsc2UKKwkJCQlvcGNvZGUgPSAwOworCQkJZ2V0X3JoZl9lcnJzdHJpbmcoZWZsYWdzLCBlbXNnLCBzaXplb2YgZW1zZyk7CisJCQlpcGF0aF9kYmcoIkVyciAleCAoJXMpLCBvcGNvZGUgJXgsIGVncmJ1ZiAleCwgIgorCQkJCSAgImxlbiAleFxuIiwgZWZsYWdzLCBlbXNnLCBvcGNvZGUsIGV0YWlsLAorCQkJCSAgdGxlbik7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogZXJyb3IgcGFja2V0LCB0eXBlIG9mIGVycm9yCXVua25vd24uCisJCQkgKiBQcm9iYWJseSB0eXBlIDMsIGJ1dCB3ZSBkb24ndCBrbm93LCBzbyBkb24ndAorCQkJICogZXZlbiB0cnkgdG8gcHJpbnQgdGhlIG9wY29kZSwgZXRjLgorCQkJICovCisJCQlpcGF0aF9kYmcoIkVycm9yIFBrdCwgYnV0IG5vIGVmbGFncyEgZWdyYnVmICV4LCAiCisJCQkJICAibGVuICV4XG5oZHJxQCVseDtoZHJxKyV4IHJoZjogJWxseDsgIgorCQkJCSAgImhkciAlbGx4ICVsbHggJWxseCAlbGx4ICVsbHhcbiIsCisJCQkJICBldGFpbCwgdGxlbiwgKHVuc2lnbmVkIGxvbmcpIHJjLCBsLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmNbMF0sCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSByY1sxXSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJjWzJdLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmNbM10sCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSByY1s0XSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJjWzVdKTsKKwkJfQorCQlsICs9IHJzaXplOworCQlpZiAobCA+PSBtYXhjbnQpCisJCQlsID0gMDsKKwkJLyoKKwkJICogdXBkYXRlIGZvciBlYWNoIHBhY2tldCwgdG8gaGVscCBwcmV2ZW50IG92ZXJmbG93cyBpZiB3ZQorCQkgKiBoYXZlIGxvdHMgb2YgcGFja2V0cy4KKwkJICovCisJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmhkcmhlYWQsCisJCQkJICAgICAgIGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiB8IGwsIDApOworCQlpZiAoZXR5cGUgIT0gUkNWSFFfUkNWX1RZUEVfRVhQRUNURUQpCisJCQkodm9pZClpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZlZ3JpbmRleGhlYWQsCisJCQkJCSAgICAgICBldGFpbCwgMCk7CisJfQorCisJcGt0dG90ICs9IGk7CisKKwlkZC0+aXBhdGhfcG9ydDBoZWFkID0gbDsKKworCWlmIChoZHJxdGFpbCAhPSAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKQorCQkvKiBtb3JlIGFycml2ZWQgd2hpbGUgd2UgaGFuZGxlZCBmaXJzdCBiYXRjaCAqLworCQlnb3RvIGdvdG1vcmU7CisKKwlpZiAocGt0dG90ID4gaXBhdGhfc3RhdHMuc3BzX21heHBrdHNfY2FsbCkKKwkJaXBhdGhfc3RhdHMuc3BzX21heHBrdHNfY2FsbCA9IHBrdHRvdDsKKwlpcGF0aF9zdGF0cy5zcHNfcG9ydDBwa3RzICs9IHBrdHRvdDsKKwlpcGF0aF9zdGF0cy5zcHNfYXZncGt0c19jYWxsID0KKwkJaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0cyAvICsrdG90Y2FsbHM7CisKK2RvbmU6CisJY2xlYXJfYml0KDAsICZkZC0+aXBhdGhfcmN2X3BlbmRpbmcpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKK2JhaWw6OworfQorCisvKioKKyAqIGlwYXRoX3VwZGF0ZV9waW9fYnVmcyAtIHVwZGF0ZSBzaGFkb3cgY29weSBvZiB0aGUgUElPIGF2YWlsYWJpbGl0eSBtYXAKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogY2FsbGVkIHdoZW5ldmVyIG91ciBsb2NhbCBjb3B5IGluZGljYXRlcyB3ZSBoYXZlIHJ1biBvdXQgb2Ygc2VuZCBidWZmZXJzCisgKiBOT1RFOiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBieSBzb21lIGNvZGUKKyAqIGFuZCBmcm9tIG5vbi1pbnRlcnJ1cHQgY29udGV4dCBieSBpcGF0aF9nZXRwaW9idWYoKS4KKyAqLworCitzdGF0aWMgdm9pZCBpcGF0aF91cGRhdGVfcGlvX2J1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJY29uc3QgdW5zaWduZWQgcGlvYnJlZ3MgPSAodW5zaWduZWQpZGQtPmlwYXRoX3Bpb2F2cmVnczsKKworCS8qIElmIHRoZSBnZW5lcmF0aW9uIChjaGVjaykgYml0cyBoYXZlIGNoYW5nZWQsIHRoZW4gd2UgdXBkYXRlIHRoZQorCSAqIGJ1c3kgYml0IGZvciB0aGUgY29ycmVzcG9uZGluZyBQSU8gYnVmZmVyLiAgVGhpcyBhbGdvcml0aG0gd2lsbAorCSAqIG1vZGlmeSBwb3NpdGlvbnMgdG8gdGhlIHZhbHVlIHRoZXkgYWxyZWFkeSBoYXZlIGluIHNvbWUgY2FzZXMKKwkgKiAoaS5lLiwgbm8gY2hhbmdlKSwgYnV0IGl0J3MgZmFzdGVyIHRoYW4gY2hhbmdpbmcgb25seSB0aGUgYml0cworCSAqIHRoYXQgaGF2ZSBjaGFuZ2VkLgorCSAqCisJICogV2Ugd291bGQgbGlrZSB0byBkbyB0aGlzIGF0b21pY2x5LCB0byBhdm9pZCBzcGlubG9ja3MgaW4gdGhlCisJICogY3JpdGljYWwgc2VuZCBwYXRoLCBidXQgdGhhdCdzIG5vdCByZWFsbHkgcG9zc2libGUsIGdpdmVuIHRoZQorCSAqIHR5cGUgb2YgY2hhbmdlcywgYW5kIHRoYXQgdGhpcyByb3V0aW5lIGNvdWxkIGJlIGNhbGxlZCBvbgorCSAqIG11bHRpcGxlIGNwdSdzIHNpbXVsdGFuZW91c2x5LCBzbyB3ZSBsb2NrIGluIHRoaXMgcm91dGluZSBvbmx5LAorCSAqIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHVwZGF0ZXM7IGFsbCB3ZSBjaGFuZ2UgaXMgdGhlIHNoYWRvdywgYW5kCisJICogaXQncyBhIHNpbmdsZSA2NCBiaXQgbWVtb3J5IGxvY2F0aW9uLCBzbyBieSBkZWZpbml0aW9uIHRoZSB1cGRhdGUKKwkgKiBpcyBhdG9taWMgaW4gdGVybXMgb2Ygd2hhdCBvdGhlciBjcHUncyBjYW4gc2VlIGluIHRlc3RpbmcgdGhlCisJICogYml0cy4gIFRoZSBzcGluX2xvY2sgb3ZlcmhlYWQgaXNuJ3QgdG9vIGJhZCwgc2luY2UgaXQgb25seQorCSAqIGhhcHBlbnMgd2hlbiBhbGwgYnVmZmVycyBhcmUgaW4gdXNlLCBzbyBvbmx5IGNwdSBvdmVyaGVhZCwgbm90CisJICogbGF0ZW5jeSBvciBiYW5kd2lkdGggaXMgYWZmZWN0ZWQuCisJICovCisjZGVmaW5lIF9JUEFUSF9BTExfQ0hFQ0tCSVRTIDB4NTU1NTU1NTU1NTU1NTU1NVVMTAorCWlmICghZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEpIHsKKwkJaXBhdGhfZGJnKCJVcGRhdGUgc2hhZG93IHBpb2F2YWlsLCBidXQgcmVnc19kbWEgTlVMTCFcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfVkVSQkRCRykgeworCQkvKiBvbmx5IGlmIHBhY2tldCBkZWJ1ZyBhbmQgdmVyYm9zZSAqLworCQl2b2xhdGlsZSBfX2xlNjQgKmRtYSA9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hOworCQl1bnNpZ25lZCBsb25nICpzaGFkb3cgPSBkZC0+aXBhdGhfcGlvYXZhaWxzaGFkb3c7CisKKwkJaXBhdGhfY2RiZyhQS1QsICJSZWZpbGwgYXZhaWwsIGRtYTA9JWxseCBzaGFkMD0lbHgsICIKKwkJCSAgICJkMT0lbGx4IHMxPSVseCwgZDI9JWxseCBzMj0lbHgsIGQzPSVsbHggIgorCQkJICAgInMzPSVseFxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVswXSksCisJCQkgICBzaGFkb3dbMF0sCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbMV0pLAorCQkJICAgc2hhZG93WzFdLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzJdKSwKKwkJCSAgIHNoYWRvd1syXSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVszXSksCisJCQkgICBzaGFkb3dbM10pOworCQlpZiAocGlvYnJlZ3MgPiA0KQorCQkJaXBhdGhfY2RiZygKKwkJCQlQS1QsICIybmQgZ3JvdXAsIGRtYTQ9JWxseCBzaGFkND0lbHgsICIKKwkJCQkiZDU9JWxseCBzNT0lbHgsIGQ2PSVsbHggczY9JWx4LCAiCisJCQkJImQ3PSVsbHggczc9JWx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVs0XSksCisJCQkJc2hhZG93WzRdLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVs1XSksCisJCQkJc2hhZG93WzVdLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVs2XSksCisJCQkJc2hhZG93WzZdLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVs3XSksCisJCQkJc2hhZG93WzddKTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX3Bpb2F2YWlsX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGlvYnJlZ3M7IGkrKykgeworCQl1NjQgcGNoYnVzeSwgcGNoZywgcGlvdiwgcG5ldzsKKwkJLyoKKwkJICogQ2hpcCBFcnJhdGE6IGJ1ZyA2NjQxOyBldmVuIGFuZCBvZGQgcXdvcmRzPjMgYXJlIHN3YXBwZWQKKwkJICovCisJCWlmIChpID4gMykgeworCQkJaWYgKGkgJiAxKQorCQkJCXBpb3YgPSBsZTY0X3RvX2NwdSgKKwkJCQkJZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaSAtIDFdKTsKKwkJCWVsc2UKKwkJCQlwaW92ID0gbGU2NF90b19jcHUoCisJCQkJCWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2kgKyAxXSk7CisJCX0gZWxzZQorCQkJcGlvdiA9IGxlNjRfdG9fY3B1KGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2ldKTsKKwkJcGNoZyA9IF9JUEFUSF9BTExfQ0hFQ0tCSVRTICYKKwkJCX4oZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldIF4gcGlvdik7CisJCXBjaGJ1c3kgPSBwY2hnIDw8IElORklOSVBBVEhfU0VORFBJT0FWQUlMX0JVU1lfU0hJRlQ7CisJCWlmIChwY2hnICYmIChwY2hidXN5ICYgZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldKSkgeworCQkJcG5ldyA9IGRkLT5pcGF0aF9waW9hdmFpbHNoYWRvd1tpXSAmIH5wY2hidXN5OworCQkJcG5ldyB8PSBwaW92ICYgcGNoYnVzeTsKKwkJCWRkLT5pcGF0aF9waW9hdmFpbHNoYWRvd1tpXSA9IHBuZXc7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfcGlvYXZhaWxfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIGlwYXRoX3NldHJjdmhkcnNpemUgLSBzZXQgdGhlIHJlY2VpdmUgaGVhZGVyIHNpemUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcmhkcnNpemU6IHRoZSByZWNlaXZlIGhlYWRlciBzaXplCisgKgorICogY2FsbGVkIGZyb20gdXNlciBpbml0IGNvZGUsIGFuZCBhbHNvIGxheWVyZWQgZHJpdmVyIGluaXQKKyAqLworaW50IGlwYXRoX3NldHJjdmhkcnNpemUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCByaGRyc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9SQ1ZIRFJTWl9TRVQpIHsKKwkJaWYgKGRkLT5pcGF0aF9yY3ZoZHJzaXplICE9IHJoZHJzaXplKSB7CisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJCSAiRXJyb3I6IGNhbid0IHNldCBwcm90b2NvbCBoZWFkZXIgIgorCQkJCSAic2l6ZSAldSwgYWxyZWFkeSAldVxuIiwKKwkJCQkgcmhkcnNpemUsIGRkLT5pcGF0aF9yY3ZoZHJzaXplKTsKKwkJCXJldCA9IC1FQUdBSU47CisJCX0gZWxzZQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUmV1c2Ugc2FtZSBwcm90b2NvbCBoZWFkZXIgIgorCQkJCSAgICJzaXplICV1XG4iLCBkZC0+aXBhdGhfcmN2aGRyc2l6ZSk7CisJfSBlbHNlIGlmIChyaGRyc2l6ZSA+IChkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSAtCisJCQkgICAgICAgKHNpemVvZih1NjQpIC8gc2l6ZW9mKHUzMikpKSkgeworCQlpcGF0aF9kYmcoIkVycm9yOiBjYW4ndCBzZXQgcHJvdG9jb2wgaGVhZGVyIHNpemUgJXUgIgorCQkJICAiKD4gbWF4ICV1KVxuIiwgcmhkcnNpemUsCisJCQkgIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplIC0KKwkJCSAgKHUzMikgKHNpemVvZih1NjQpIC8gc2l6ZW9mKHUzMikpKTsKKwkJcmV0ID0gLUVPVkVSRkxPVzsKKwl9IGVsc2UgeworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfUkNWSERSU1pfU0VUOworCQlkZC0+aXBhdGhfcmN2aGRyc2l6ZSA9IHJoZHJzaXplOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnNpemUsCisJCQkJIGRkLT5pcGF0aF9yY3ZoZHJzaXplKTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU2V0IHByb3RvY29sIGhlYWRlciBzaXplIHRvICV1XG4iLAorCQkJICAgZGQtPmlwYXRoX3JjdmhkcnNpemUpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2dldHBpb2J1ZiAtIGZpbmQgYW4gYXZhaWxhYmxlIHBpbyBidWZmZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcGJ1Zm51bTogdGhlIGJ1ZmZlciBudW1iZXIgaXMgcGxhY2VkIGhlcmUKKyAqCisgKiBkbyBhcHByb3ByaWF0ZSBtYXJraW5nIGFzIGJ1c3ksIGV0Yy4KKyAqIHJldHVybnMgYnVmZmVyIG51bWJlciBpZiBvbmUgZm91bmQgKD49MCksIG5lZ2F0aXZlIG51bWJlciBpcyBlcnJvci4KKyAqIFVzZWQgYnkgaXBhdGhfc21hX3NlbmRfcGt0IGFuZCBpcGF0aF9sYXllcl9zZW5kCisgKi8KK3UzMiBfX2lvbWVtICppcGF0aF9nZXRwaW9idWYoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgKiBwYnVmbnVtKQoreworCWludCBpLCBqLCBzdGFydGksIHVwZGF0ZWQgPSAwOworCXVuc2lnbmVkIHBpb2JjbnQsIGl0ZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nICpzaGFkb3cgPSBkZC0+aXBhdGhfcGlvYXZhaWxzaGFkb3c7CisJdTMyIF9faW9tZW0gKmJ1ZjsKKworCXBpb2JjbnQgPSAodW5zaWduZWQpKGRkLT5pcGF0aF9waW9iY250MmsKKwkJCSAgICAgKyBkZC0+aXBhdGhfcGlvYmNudDRrKTsKKwlzdGFydGkgPSBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmOworCWl0ZXIgPSBwaW9iY250IC0gc3RhcnRpOworCWlmIChkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cpIHsKKwkJLyoKKwkJICogTWlub3Igb3B0aW1pemF0aW9uLiAgSWYgd2UgaGFkIG5vIGJ1ZmZlcnMgb24gbGFzdCBjYWxsLAorCQkgKiBzdGFydCBvdXQgYnkgZG9pbmcgdGhlIHVwZGF0ZTsgY29udGludWUgYW5kIGRvIHNjYW4gZXZlbgorCQkgKiBpZiBubyBidWZmZXJzIHdlcmUgdXBkYXRlZCwgdG8gYmUgcGFyYW5vaWQKKwkJICovCisJCWlwYXRoX3VwZGF0ZV9waW9fYnVmcyhkZCk7CisJCS8qIHdlIHNjYW5uZWQgaGVyZSwgZG9uJ3QgZG8gaXQgYXQgZW5kIG9mIHNjYW4gKi8KKwkJdXBkYXRlZCA9IDE7CisJCWkgPSBzdGFydGk7CisJfSBlbHNlCisJCWkgPSBkZC0+aXBhdGhfbGFzdHBpb2luZGV4OworCityZXNjYW46CisJLyoKKwkgKiB3aGlsZSB0ZXN0X2FuZF9zZXRfYml0KCkgaXMgYXRvbWljLCB3ZSBkbyB0aGF0IGFuZCB0aGVuIHRoZQorCSAqIGNoYW5nZV9iaXQoKSwgYW5kIHRoZSBwYWlyIGlzIG5vdC4gIFNlZSBpZiB0aGlzIGlzIHRoZSBjYXVzZQorCSAqIG9mIHRoZSByZW1haW5pbmcgYXJtbGF1bmNoIGVycm9ycy4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfcGlvYXZhaWxfbG9jaywgZmxhZ3MpOworCWZvciAoaiA9IDA7IGogPCBpdGVyOyBqKyssIGkrKykgeworCQlpZiAoaSA+PSBwaW9iY250KQorCQkJaSA9IHN0YXJ0aTsKKwkJLyoKKwkJICogVG8gYXZvaWQgYnVzIGxvY2sgb3ZlcmhlYWQsIHdlIGZpcnN0IGZpbmQgYSBjYW5kaWRhdGUKKwkJICogYnVmZmVyLCB0aGVuIGRvIHRoZSB0ZXN0IGFuZCBzZXQsIGFuZCBjb250aW51ZSBpZiB0aGF0CisJCSAqIGZhaWxzLgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KCgyICogaSkgKyAxLCBzaGFkb3cpIHx8CisJCSAgICB0ZXN0X2FuZF9zZXRfYml0KCgyICogaSkgKyAxLCBzaGFkb3cpKQorCQkJY29udGludWU7CisJCS8qIGZsaXAgZ2VuZXJhdGlvbiBiaXQgKi8KKwkJY2hhbmdlX2JpdCgyICogaSwgc2hhZG93KTsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX3Bpb2F2YWlsX2xvY2ssIGZsYWdzKTsKKworCWlmIChqID09IGl0ZXIpIHsKKwkJdm9sYXRpbGUgX19sZTY0ICpkbWEgPSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYTsKKworCQkvKgorCQkgKiBmaXJzdCB0aW1lIHRocm91Z2g7IHNoYWRvdyBleGhhdXN0ZWQsIGJ1dCBtYXkgYmUgcmVhbAorCQkgKiBidWZmZXJzIGF2YWlsYWJsZSwgc28gZ28gc2VlOyBpZiBhbnkgdXBkYXRlZCwgcmVzY2FuCisJCSAqIChvbmNlKQorCQkgKi8KKwkJaWYgKCF1cGRhdGVkKSB7CisJCQlpcGF0aF91cGRhdGVfcGlvX2J1ZnMoZGQpOworCQkJdXBkYXRlZCA9IDE7CisJCQlpID0gc3RhcnRpOworCQkJZ290byByZXNjYW47CisJCX0KKwkJZGQtPmlwYXRoX3VwZF9waW9fc2hhZG93ID0gMTsKKwkJLyoKKwkJICogbm90IGF0b21pYywgYnV0IGlmIHdlIGxvc2Ugb25lIG9uY2UgaW4gYSB3aGlsZSwgdGhhdCdzIE9LCisJCSAqLworCQlpcGF0aF9zdGF0cy5zcHNfbm9waW9idWZzKys7CisJCWlmICghKCsrZGQtPmlwYXRoX2NvbnNlY19ub3Bpb2J1ZiAlIDEwMDAwMCkpIHsKKwkJCWlwYXRoX2RiZygKKwkJCQkiJXUgcGlvIHNlbmRzIHdpdGggbm8gYnVmYXZhaWw7IGRtYWNvcHk6ICIKKwkJCQkiJWxseCAlbGx4ICVsbHggJWxseDsgc2hhZG93OiAgIgorCQkJCSIlbHggJWx4ICVseCAlbHhcbiIsCisJCQkJZGQtPmlwYXRoX2NvbnNlY19ub3Bpb2J1ZiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbMF0pLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVsxXSksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzJdKSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbM10pLAorCQkJCXNoYWRvd1swXSwgc2hhZG93WzFdLCBzaGFkb3dbMl0sCisJCQkJc2hhZG93WzNdKTsKKwkJCS8qCisJCQkgKiA0IGJ1ZmZlcnMgcGVyIGJ5dGUsIDQgcmVnaXN0ZXJzIGFib3ZlLCBjb3ZlciByZXN0CisJCQkgKiBiZWxvdworCQkJICovCisJCQlpZiAoKGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrKSA+CisJCQkgICAgKHNpemVvZihzaGFkb3dbMF0pICogNCAqIDQpKQorCQkJCWlwYXRoX2RiZygiMm5kIGdyb3VwOiBkbWFjb3B5OiAlbGx4ICVsbHggIgorCQkJCQkgICIlbGx4ICVsbHg7IHNoYWRvdzogJWx4ICVseCAiCisJCQkJCSAgIiVseCAlbHhcbiIsCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICBsZTY0X3RvX2NwdShkbWFbNF0pLAorCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgbGU2NF90b19jcHUoZG1hWzVdKSwKKwkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgIGxlNjRfdG9fY3B1KGRtYVs2XSksCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICBsZTY0X3RvX2NwdShkbWFbN10pLAorCQkJCQkgIHNoYWRvd1s0XSwgc2hhZG93WzVdLAorCQkJCQkgIHNoYWRvd1s2XSwgc2hhZG93WzddKTsKKwkJfQorCQlidWYgPSBOVUxMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHVwZGF0ZWQpCisJCS8qCisJCSAqIHJhbiBvdXQgb2YgYnVmcywgbm93IHNvbWUgKGF0IGxlYXN0IHRoaXMgb25lIHdlIGp1c3QKKwkJICogZ290KSBhcmUgbm93IGF2YWlsYWJsZSwgc28gdGVsbCB0aGUgbGF5ZXJlZCBkcml2ZXIuCisJCSAqLworCQlfX2lwYXRoX2xheWVyX2ludHIoZGQsIElQQVRIX0xBWUVSX0lOVF9TRU5EX0NPTlRJTlVFKTsKKworCS8qCisJICogc2V0IG5leHQgc3RhcnRpbmcgcGxhY2UuICBTaW5jZSBpdCdzIGp1c3QgYW4gb3B0aW1pemF0aW9uLAorCSAqIGl0IGRvZXNuJ3QgbWF0dGVyIHdobyB3aW5zIG9uIHRoaXMsIHNvIG5vIGxvY2tpbmcKKwkgKi8KKwlkZC0+aXBhdGhfbGFzdHBpb2luZGV4ID0gaSArIDE7CisJaWYgKGRkLT5pcGF0aF91cGRfcGlvX3NoYWRvdykKKwkJZGQtPmlwYXRoX3VwZF9waW9fc2hhZG93ID0gMDsKKwlpZiAoZGQtPmlwYXRoX2NvbnNlY19ub3Bpb2J1ZikKKwkJZGQtPmlwYXRoX2NvbnNlY19ub3Bpb2J1ZiA9IDA7CisJaWYgKGkgPCBkZC0+aXBhdGhfcGlvYmNudDJrKQorCQlidWYgPSAodTMyIF9faW9tZW0gKikgKGRkLT5pcGF0aF9waW8ya2Jhc2UgKworCQkJCSAgICAgICBpICogZGQtPmlwYXRoX3BhbGlnbik7CisJZWxzZQorCQlidWYgPSAodTMyIF9faW9tZW0gKikKKwkJCShkZC0+aXBhdGhfcGlvNGtiYXNlICsKKwkJCSAoaSAtIGRkLT5pcGF0aF9waW9iY250MmspICogZGQtPmlwYXRoXzRrYWxpZ24pOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlJldHVybiBwaW9idWYldSAldWsgQCAlcFxuIiwKKwkJICAgaSwgKGkgPCBkZC0+aXBhdGhfcGlvYmNudDJrKSA/IDIgOiA0LCBidWYpOworCWlmIChwYnVmbnVtKQorCQkqcGJ1Zm51bSA9IGk7CisKK2JhaWw6CisJcmV0dXJuIGJ1ZjsKK30KKworLyoqCisgKiBpcGF0aF9jcmVhdGVfcmN2aGRycSAtIGNyZWF0ZSBhIHJlY2VpdmUgaGVhZGVyIHF1ZXVlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBkOiB0aGUgcG9ydCBkYXRhCisgKgorICogdGhpcyAqbXVzdCogYmUgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSwgYW5kIGZvciBub3csCisgKiB0aGF0IGxpbWl0cyBpdCB0byB3aGF0IGttYWxsb2MgY2FuIGRvLgorICovCitpbnQgaXBhdGhfY3JlYXRlX3JjdmhkcnEoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCit7CisJaW50IHJldCA9IDAsIGFtdDsKKworCWFtdCA9IEFMSUdOKGRkLT5pcGF0aF9yY3ZoZHJjbnQgKiBkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSAqCisJCSAgICBzaXplb2YodTMyKSwgUEFHRV9TSVpFKTsKKwlpZiAoIXBkLT5wb3J0X3JjdmhkcnEpIHsKKwkJLyoKKwkJICogbm90IHVzaW5nIFJFUEVBVCBpc24ndCB2aWFibGU7IGF0IDEyOEtCLCB3ZSBjYW4gZWFzaWx5CisJCSAqIGZhaWwgdGhpcy4gIFRoZSBwcm9ibGVtIHdpdGggUkVQRUFUIGlzIHdlIGNhbiBibG9jayBoZXJlCisJCSAqICJmb3JldmVyIi4gIFRoZXJlIGlzbid0IGFuIGluYmV0d2VlbiwgdW5mb3J0dW5hdGVseS4gIFdlCisJCSAqIGNvdWxkIHJlZHVjZSB0aGUgcmlzayBieSBuZXZlciBmcmVlaW5nIHRoZSByY3ZoZHJxIGV4Y2VwdAorCQkgKiBhdCB1bmxvYWQsIGJ1dCBldmVuIHRoZW4sIHRoZSBmaXJzdCB0aW1lIGEgcG9ydCBpcyB1c2VkLAorCQkgKiB3ZSBjb3VsZCBkZWxheSBmb3Igc29tZSB0aW1lLi4uCisJCSAqLworCQlnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfVVNFUiB8IF9fR0ZQX0NPTVA7CisKKwkJcGQtPnBvcnRfcmN2aGRycSA9IGRtYV9hbGxvY19jb2hlcmVudCgKKwkJCSZkZC0+cGNpZGV2LT5kZXYsIGFtdCwgJnBkLT5wb3J0X3JjdmhkcnFfcGh5cywKKwkJCWdmcF9mbGFncyk7CisKKwkJaWYgKCFwZC0+cG9ydF9yY3ZoZHJxKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBhbGxvY2F0ZSAlZCBieXRlcyAiCisJCQkJICAgICAgImZvciBwb3J0ICV1IHJjdmhkcnEgZmFpbGVkXG4iLAorCQkJCSAgICAgIGFtdCwgcGQtPnBvcnRfcG9ydCk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisKKwkJcGQtPnBvcnRfcmN2aGRycV9zaXplID0gYW10OworCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIiVkIHBhZ2VzIGF0ICVwIChwaHlzICVseCkgc2l6ZT0lbHUgIgorCQkJICAgImZvciBwb3J0ICV1IHJjdmhkciBRXG4iLAorCQkJICAgYW10ID4+IFBBR0VfU0hJRlQsIHBkLT5wb3J0X3JjdmhkcnEsCisJCQkgICAodW5zaWduZWQgbG9uZykgcGQtPnBvcnRfcmN2aGRycV9waHlzLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSwKKwkJCSAgIHBkLT5wb3J0X3BvcnQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGNsZWFyIGZvciBzZWN1cml0eSwgc2FuaXR5LCBhbmQvb3IgZGVidWdnaW5nLCBlYWNoCisJCSAqIHRpbWUgd2UgcmV1c2UKKwkJICovCisJCW1lbXNldChwZC0+cG9ydF9yY3ZoZHJxLCAwLCBhbXQpOworCX0KKworCS8qCisJICogdGVsbCBjaGlwIGVhY2ggdGltZSB3ZSBpbml0IGl0LCBldmVuIGlmIHdlIGFyZSByZS11c2luZyBwcmV2aW91cworCSAqIG1lbW9yeSAod2UgemVybyBpdCBhdCBwcm9jZXNzIGNsb3NlKQorCSAqLworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIndyaXRpbmcgcG9ydCAlZCByY3ZoZHJhZGRyIGFzICVseFxuIiwKKwkJICAgcGQtPnBvcnRfcG9ydCwgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cyk7CisJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmFkZHIsCisJCQkgICAgICBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMpOworCisJcmV0ID0gMDsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoX3dhaXRmb3JfY29tcGxldGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9rcmVnIHJlZ19pZCwKKwkJCSAgIHU2NCBiaXRzX3RvX3dhaXRfZm9yLCB1NjQgKiB2YWxwKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1NjQgbGFzdHZhbCwgdmFsOworCWludCByZXQ7CisKKwlsYXN0dmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIHJlZ19pZCk7CisJLyogd2FpdCBhIHJpZGljdWxvdXNseSBsb25nIHRpbWUgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJZG8geworCQl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgcmVnX2lkKTsKKwkJLyogc2V0IHNvIHRoZXkgaGF2ZSBzb21ldGhpbmcsIGV2ZW4gb24gZmFpbHVyZXMuICovCisJCSp2YWxwID0gdmFsOworCQlpZiAoKHZhbCAmIGJpdHNfdG9fd2FpdF9mb3IpID09IGJpdHNfdG9fd2FpdF9mb3IpIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAodmFsICE9IGxhc3R2YWwpCisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJDaGFuZ2VkIGZyb20gJWxseCB0byAlbGx4LCAiCisJCQkJICAgIndhaXRpbmcgZm9yICVsbHggYml0c1xuIiwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBsYXN0dmFsLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBiaXRzX3RvX3dhaXRfZm9yKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlpcGF0aF9kYmcoIkRpZG4ndCBnZXQgYml0cyAlbGx4IGluIHJlZ2lzdGVyIDB4JXgsICIKKwkJCQkgICJnb3QgJWxseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJpdHNfdG9fd2FpdF9mb3IsCisJCQkJICByZWdfaWQsICh1bnNpZ25lZCBsb25nIGxvbmcpICp2YWxwKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF93YWl0Zm9yX21kaW9fY21kcmVhZHkgLSB3YWl0IGZvciBsYXN0IGNvbW1hbmQgdG8gY29tcGxldGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogTGlrZSBpcGF0aF93YWl0Zm9yX2NvbXBsZXRlKCksIGJ1dCB3ZSB3YWl0IGZvciB0aGUgQ01EVkFMSUQgYml0IHRvIGdvCisgKiBhd2F5IGluZGljYXRpbmcgdGhlIGxhc3QgY29tbWFuZCBoYXMgY29tcGxldGVkLiAgSXQgZG9lc24ndCByZXR1cm4gZGF0YQorICovCitpbnQgaXBhdGhfd2FpdGZvcl9tZGlvX2NtZHJlYWR5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTY0IHZhbDsKKwlpbnQgcmV0OworCisJLyogd2FpdCBhIHJpZGljdWxvdXNseSBsb25nIHRpbWUgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJZG8geworCQl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9tZGlvKTsKKwkJaWYgKCEodmFsICYgSVBBVEhfTURJT19DTURWQUxJRCkpIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCQljb25kX3Jlc2NoZWQoKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWlwYXRoX2RiZygiQ01EVkFMSUQgc3R1Y2sgaW4gbWRpbyByZWc/ICglbGx4KVxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXBhdGhfc2V0X2liX2xzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB3aGljaCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqd2hhdFs0XSA9IHsKKwkJWzBdID0gIkRPV04iLAorCQlbSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfSU5JVF0gPSAiSU5JVCIsCisJCVtJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BUk1FRF0gPSAiQVJNRUQiLAorCQlbSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFXSA9ICJBQ1RJVkUiCisJfTsKKwlpcGF0aF9jZGJnKFNNQSwgIlRyeWluZyB0byBtb3ZlIHVuaXQgJXUgdG8gJXMsIGN1cnJlbnQgbHRzdGF0ZSAiCisJCSAgICJpcyAlc1xuIiwgZGQtPmlwYXRoX3VuaXQsCisJCSAgIHdoYXRbKHdoaWNoID4+IElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKSAmCisJCQlJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9NQVNLXSwKKwkJICAgaXBhdGhfaWJjc3RhdHVzX3N0clsKKwkJCSAgIChpcGF0aF9yZWFkX2tyZWc2NAorCQkJICAgIChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpID4+CisJCQkgICAgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSAmCisJCQkgICBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTS10pOworCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAorCQkJIGRkLT5pcGF0aF9pYmNjdHJsIHwgd2hpY2gpOworfQorCisvKioKKyAqIGlwYXRoX3JlYWRfa3JlZzY0X3BvcnQgLSByZWFkIGEgZGV2aWNlJ3MgcGVyLXBvcnQgNjQtYml0IGtlcm5lbCByZWdpc3RlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEByZWdubzogdGhlIHJlZ2lzdGVyIG51bWJlciB0byByZWFkCisgKiBAcG9ydDogdGhlIHBvcnQgY29udGFpbmluZyB0aGUgcmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlcnMgdGhhdCB2YXJ5IHdpdGggdGhlIGNoaXAgaW1wbGVtZW50YXRpb24gY29uc3RhbnRzIChwb3J0KQorICogdXNlIHRoaXMgcm91dGluZS4KKyAqLwordTY0IGlwYXRoX3JlYWRfa3JlZzY0X3BvcnQoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9rcmVnIHJlZ25vLAorCQkJICAgdW5zaWduZWQgcG9ydCkKK3sKKwl1MTYgd2hlcmU7CisKKwlpZiAocG9ydCA8IGRkLT5pcGF0aF9wb3J0Y250ICYmCisJICAgIChyZWdubyA9PSBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmFkZHIgfHwKKwkgICAgIHJlZ25vID09IGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIpKQorCQl3aGVyZSA9IHJlZ25vICsgcG9ydDsKKwllbHNlCisJCXdoZXJlID0gLTE7CisKKwlyZXR1cm4gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIHdoZXJlKTsKK30KKworLyoqCisgKiBpcGF0aF93cml0ZV9rcmVnX3BvcnQgLSB3cml0ZSBhIGRldmljZSdzIHBlci1wb3J0IDY0LWJpdCBrZXJuZWwgcmVnaXN0ZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcmVnbm86IHRoZSByZWdpc3RlciBudW1iZXIgdG8gd3JpdGUKKyAqIEBwb3J0OiB0aGUgcG9ydCBjb250YWluaW5nIHRoZSByZWdpc3RlcgorICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiBSZWdpc3RlcnMgdGhhdCB2YXJ5IHdpdGggdGhlIGNoaXAgaW1wbGVtZW50YXRpb24gY29uc3RhbnRzIChwb3J0KQorICogdXNlIHRoaXMgcm91dGluZS4KKyAqLwordm9pZCBpcGF0aF93cml0ZV9rcmVnX3BvcnQoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9rcmVnIHJlZ25vLAorCQkJICB1bnNpZ25lZCBwb3J0LCB1NjQgdmFsdWUpCit7CisJdTE2IHdoZXJlOworCisJaWYgKHBvcnQgPCBkZC0+aXBhdGhfcG9ydGNudCAmJgorCSAgICAocmVnbm8gPT0gZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJhZGRyIHx8CisJICAgICByZWdubyA9PSBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyKSkKKwkJd2hlcmUgPSByZWdubyArIHBvcnQ7CisJZWxzZQorCQl3aGVyZSA9IC0xOworCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgd2hlcmUsIHZhbHVlKTsKK30KKworLyoqCisgKiBpcGF0aF9zaHV0ZG93bl9kZXZpY2UgLSBzaHV0IGRvd24gYSBkZXZpY2UKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogVGhpcyBpcyBjYWxsZWQgdG8gbWFrZSB0aGUgZGV2aWNlIHF1aWV0IHdoZW4gd2UgYXJlIGFib3V0IHRvCisgKiB1bmxvYWQgdGhlIGRyaXZlciwgYW5kIGFsc28gd2hlbiB0aGUgZGV2aWNlIGlzIGFkbWluaXN0cmF0aXZlbHkKKyAqIGRpc2FibGVkLiAgIEl0IGRvZXMgbm90IGZyZWUgYW55IGRhdGEgc3RydWN0dXJlcy4KKyAqIEV2ZXJ5dGhpbmcgaXQgZG9lcyBoYXMgdG8gYmUgc2V0dXAgYWdhaW4gYnkgaXBhdGhfaW5pdF9jaGlwKGRkLDEpCisgKi8KK3ZvaWQgaXBhdGhfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1NjQgdmFsOworCisJaXBhdGhfZGJnKCJTaHV0dGluZyBkb3duIHRoZSBkZXZpY2VcbiIpOworCisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktVTks7CisJZGQtPmlwYXRoX2ZsYWdzICY9IH4oSVBBVEhfSU5JVFRFRCB8IElQQVRIX0xJTktET1dOIHwKKwkJCSAgICAgSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LQVJNRUQgfAorCQkJICAgICBJUEFUSF9MSU5LQUNUSVZFKTsKKwkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfihJUEFUSF9TVEFUVVNfSUJfQ09ORiB8CisJCQkJSVBBVEhfU1RBVFVTX0lCX1JFQURZKTsKKworCS8qIG1hc2sgaW50ZXJydXB0cywgYnV0IG5vdCBlcnJvcnMgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludG1hc2ssIDBVTEwpOworCisJZGQtPmlwYXRoX3JjdmN0cmwgPSAwOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisKKwkvKgorCSAqIGdyYWNlZnVsbHkgc3RvcCBhbGwgc2VuZHMgYWxsb3dpbmcgYW55IGluIHByb2dyZXNzIHRvIHRyaWNrbGUgb3V0CisJICogZmlyc3QuCisJICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwgMFVMTCk7CisJLyogZmx1c2ggaXQgKi8KKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwkvKgorCSAqIGVub3VnaCBmb3IgYW55dGhpbmcgdGhhdCdzIGdvaW5nIHRvIHRyaWNrbGUgb3V0IHRvIGhhdmUgYWN0dWFsbHkKKwkgKiBkb25lIHNvLgorCSAqLworCXVkZWxheSg1KTsKKworCS8qCisJICogYWJvcnQgYW55IGFybWVkIG9yIGxhdW5jaGVkIFBJTyBidWZmZXJzIHRoYXQgZGlkbid0IGdvLiAoc2VsZgorCSAqIGNsZWFyaW5nKS4gIFdpbGwgY2F1c2UgYW55IHBhY2tldCBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQgdG8KKwkgKiBnbyBvdXQgd2l0aCBhbiBFQlAsIGFuZCBtYXkgYWxzbyBjYXVzZSBhIHNob3J0IHBhY2tldCBlcnJvciBvbgorCSAqIHRoZSByZWNlaXZlci4KKwkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIElORklOSVBBVEhfU19BQk9SVCk7CisKKwlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSA8PAorCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisKKwkvKgorCSAqIHdlIGFyZSBzaHV0dGluZyBkb3duLCBzbyB0ZWxsIHRoZSBsYXllcmVkIGRyaXZlci4gIFdlIGRvbid0IGRvCisJICogdGhpcyBvbiBqdXN0IGEgbGluayBzdGF0ZSBjaGFuZ2UsIG11Y2ggbGlrZSBldGhlcm5ldCwgYSBjYWJsZQorCSAqIHVucGx1ZywgZXRjLiBkb2Vzbid0IGNoYW5nZSBkcml2ZXIgc3RhdGUKKwkgKi8KKwlpcGF0aF9sYXllcl9pbnRyKGRkLCBJUEFUSF9MQVlFUl9JTlRfSUZfRE9XTik7CisKKwkvKiBkaXNhYmxlIElCQyAqLworCWRkLT5pcGF0aF9jb250cm9sICY9IH5JTkZJTklQQVRIX0NfTElOS0VOQUJMRTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkgZGQtPmlwYXRoX2NvbnRyb2wpOworCisJLyoKKwkgKiBjbGVhciBTZXJkZXNFbmFibGUgYW5kIHR1cm4gdGhlIGxlZHMgb2ZmOyBkbyB0aGlzIGhlcmUgYmVjYXVzZQorCSAqIHdlIGFyZSB1bmxvYWRpbmcsIHNvIGRvbid0IGNvdW50IG9uIGludGVycnVwdHMgdG8gbW92ZSBhbG9uZworCSAqIFR1cm4gdGhlIExFRHMgb2ZmIGV4cGxpY3RseSBmb3IgdGhlIHNhbWUgcmVhc29uLgorCSAqLworCWRkLT5pcGF0aF9mX3F1aWV0X3NlcmRlcyhkZCk7CisJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCAwLCAwKTsKKworCWlmIChkZC0+aXBhdGhfc3RhdHNfdGltZXJfYWN0aXZlKSB7CisJCWRlbF90aW1lcl9zeW5jKCZkZC0+aXBhdGhfc3RhdHNfdGltZXIpOworCQlkZC0+aXBhdGhfc3RhdHNfdGltZXJfYWN0aXZlID0gMDsKKwl9CisKKwkvKgorCSAqIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIGFuZCBlcnJvcnMsIHNvIHRoYXQgdGhlIG5leHQgdGltZSB0aGUgZHJpdmVyCisJICogaXMgbG9hZGVkIG9yIGRldmljZSBpcyBlbmFibGVkLCB3ZSBrbm93IHRoYXQgd2hhdGV2ZXIgaXMgc2V0CisJICogaGFwcGVuZWQgd2hpbGUgd2Ugd2VyZSB1bmxvYWRlZAorCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJjbGVhciwKKwkJCSB+MFVMTCAmIH5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2Vycm9yY2xlYXIsIC0xTEwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50Y2xlYXIsIC0xTEwpOworfQorCisvKioKKyAqIGlwYXRoX2ZyZWVfcGRkYXRhIC0gZnJlZSBhIHBvcnQncyBhbGxvY2F0ZWQgZGF0YQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwb3J0OiB0aGUgcG9ydAorICogQGZyZWVoZHJxOiBmcmVlIHRoZSBwb3J0IGRhdGEgc3RydWN0dXJlIGlmIHRydWUKKyAqCisgKiB3aGVuIGNsb3NpbmcsIGZyZWUgdXAgYW55IGFsbG9jYXRlZCBkYXRhIGZvciBhIHBvcnQsIGlmIHRoZQorICogcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gemVybworICogTm90ZTogdGhpcyBhbHNvIG9wdGlvbmFsbHkgZnJlZXMgdGhlIHBvcnRkYXRhIGl0c2VsZiEKKyAqIEFueSBjaGFuZ2VzIGhlcmUgaGF2ZSB0byBiZSBtYXRjaGVkIHVwIHdpdGggdGhlIHJlaW5pdCBjYXNlCisgKiBvZiBpcGF0aF9pbml0X2NoaXAoKSwgd2hpY2ggY2FsbHMgdGhpcyByb3V0aW5lIG9uIHJlaW5pdCBhZnRlciByZXNldC4KKyAqLwordm9pZCBpcGF0aF9mcmVlX3BkZGF0YShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBwb3J0LCBpbnQgZnJlZWhkcnEpCit7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFtwb3J0XTsKKworCWlmICghcGQpCisJCXJldHVybjsKKwlpZiAoZnJlZWhkcnEpCisJCS8qCisJCSAqIG9ubHkgY2xlYXIgYW5kIGZyZWUgcG9ydGRhdGEgaWYgd2UgYXJlIGdvaW5nIHRvIGFsc28KKwkJICogcmVsZWFzZSB0aGUgaGRycSwgb3RoZXJ3aXNlIHdlIGxlYWsgdGhlIGhkcnEgb24gZWFjaAorCQkgKiBvcGVuL2Nsb3NlIGN5Y2xlCisJCSAqLworCQlkZC0+aXBhdGhfcGRbcG9ydF0gPSBOVUxMOworCWlmIChmcmVlaGRycSAmJiBwZC0+cG9ydF9yY3ZoZHJxKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImZyZWUgY2xvc2VkIHBvcnQgJWQgcmN2aGRycSBAICVwICIKKwkJCSAgICIoc2l6ZT0lbHUpXG4iLCBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9yY3ZoZHJxLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSwKKwkJCQkgIHBkLT5wb3J0X3JjdmhkcnEsIHBkLT5wb3J0X3JjdmhkcnFfcGh5cyk7CisJCXBkLT5wb3J0X3JjdmhkcnEgPSBOVUxMOworCX0KKwlpZiAocG9ydCAmJiBwZC0+cG9ydF9yY3ZlZ3JidWYpIHsKKwkJLyogYWx3YXlzIGZyZWUgdGhpcyAqLworCQlpZiAocGQtPnBvcnRfcmN2ZWdyYnVmKSB7CisJCQl1bnNpZ25lZCBlOworCisJCQlmb3IgKGUgPSAwOyBlIDwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rczsgZSsrKSB7CisJCQkJdm9pZCAqYmFzZSA9IHBkLT5wb3J0X3JjdmVncmJ1ZltlXTsKKwkJCQlzaXplX3Qgc2l6ZSA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9zaXplOworCisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZWdyYnVmIGZyZWUoJXAsICVsdSksICIKKwkJCQkJICAgImNodW5rICV1LyV1XG4iLCBiYXNlLAorCQkJCQkgICAodW5zaWduZWQgbG9uZykgc2l6ZSwKKwkJCQkJICAgZSwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyk7CisJCQkJZG1hX2ZyZWVfY29oZXJlbnQoCisJCQkJCSZkZC0+cGNpZGV2LT5kZXYsIHNpemUsIGJhc2UsCisJCQkJCXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzW2VdKTsKKwkJCX0KKwkJCXZmcmVlKHBkLT5wb3J0X3JjdmVncmJ1Zik7CisJCQlwZC0+cG9ydF9yY3ZlZ3JidWYgPSBOVUxMOworCQkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpOworCQkJcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMgPSBOVUxMOworCQl9CisJCXBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgPSAwOworCX0gZWxzZSBpZiAocG9ydCA9PSAwICYmIGRkLT5pcGF0aF9wb3J0MF9za2JzKSB7CisJCXVuc2lnbmVkIGU7CisJCXN0cnVjdCBza19idWZmICoqc2ticyA9IGRkLT5pcGF0aF9wb3J0MF9za2JzOworCisJCWRkLT5pcGF0aF9wb3J0MF9za2JzID0gTlVMTDsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZnJlZSBjbG9zZWQgcG9ydCAlZCBpcGF0aF9wb3J0MF9za2JzICIKKwkJCSAgICJAICVwXG4iLCBwZC0+cG9ydF9wb3J0LCBza2JzKTsKKwkJZm9yIChlID0gMDsgZSA8IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7IGUrKykKKwkJCWlmIChza2JzW2VdKQorCQkJCWRldl9rZnJlZV9za2Ioc2tic1tlXSk7CisJCXZmcmVlKHNrYnMpOworCX0KKwlpZiAoZnJlZWhkcnEpIHsKKwkJa2ZyZWUocGQtPnBvcnRfdGlkX3BnX2xpc3QpOworCQlrZnJlZShwZCk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBpbmZpbmlwYXRoX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaXBhdGhfZGJnKEtFUk5fSU5GTyBEUklWRVJfTE9BRF9NU0cgIiVzIiwgaXBhdGhfY29yZV92ZXJzaW9uKTsKKworCS8qCisJICogVGhlc2UgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoCisJICogdGhlIFBDSSBzdWJzeXN0ZW0uCisJICovCisJaWRyX2luaXQoJnVuaXRfdGFibGUpOworCWlmICghaWRyX3ByZV9nZXQoJnVuaXRfdGFibGUsIEdGUF9LRVJORUwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpcGF0aF9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRQorCQkgICAgICAgIjogVW5hYmxlIHRvIHJlZ2lzdGVyIGRyaXZlcjogZXJyb3IgJWRcbiIsIC1yZXQpOworCQlnb3RvIGJhaWxfdW5pdDsKKwl9CisKKwlyZXQgPSBpcGF0aF9kcml2ZXJfY3JlYXRlX2dyb3VwKCZpcGF0aF9kcml2ZXIuZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUgIjogVW5hYmxlIHRvIGNyZWF0ZSBkcml2ZXIgIgorCQkgICAgICAgInN5c2ZzIGVudHJpZXM6IGVycm9yICVkXG4iLCAtcmV0KTsKKwkJZ290byBiYWlsX3BjaTsKKwl9CisKKwlyZXQgPSBpcGF0aF9pbml0X2lwYXRoZnMoKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUgIjogVW5hYmxlIHRvIGNyZWF0ZSAiCisJCSAgICAgICAiaXBhdGhmczogZXJyb3IgJWRcbiIsIC1yZXQpOworCQlnb3RvIGJhaWxfZ3JvdXA7CisJfQorCisJZ290byBiYWlsOworCitiYWlsX2dyb3VwOgorCWlwYXRoX2RyaXZlcl9yZW1vdmVfZ3JvdXAoJmlwYXRoX2RyaXZlci5kcml2ZXIpOworCitiYWlsX3BjaToKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwYXRoX2RyaXZlcik7CisKK2JhaWxfdW5pdDoKKwlpZHJfZGVzdHJveSgmdW5pdF90YWJsZSk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCBwb3J0OworCisJaXBhdGhfc2h1dGRvd25fZGV2aWNlKGRkKTsKKworCWlmICgqZGQtPmlwYXRoX3N0YXR1c3AgJiBJUEFUSF9TVEFUVVNfQ0hJUF9QUkVTRU5UKSB7CisJCS8qIGNhbid0IGRvIGFueXRoaW5nIG1vcmUgd2l0aCBjaGlwOyBuZWVkcyByZS1pbml0ICovCisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0NISVBfUFJFU0VOVDsKKwkJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkgeworCQkJLyoKKwkJCSAqIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBjbGVhbmVkIHVwIGJlZm9yZSB0aGVzZSBhcmUKKwkJCSAqIHRvIGVuc3VyZSBhbnkgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzICJmYWlsIiB1bnRpbAorCQkJICogcmUtaW5pdAorCQkJICovCisJCQlkZC0+aXBhdGhfa3JlZ2Jhc2UgPSBOVUxMOworCQkJZGQtPmlwYXRoX2tyZWd2aXJ0ID0gTlVMTDsKKwkJCWRkLT5pcGF0aF91cmVnYmFzZSA9IDA7CisJCQlkZC0+aXBhdGhfc3JlZ2Jhc2UgPSAwOworCQkJZGQtPmlwYXRoX2NyZWdiYXNlID0gMDsKKwkJCWRkLT5pcGF0aF9rcmVnc2l6ZSA9IDA7CisJCX0KKwkJaXBhdGhfZGlzYWJsZV93YyhkZCk7CisJfQorCisJaWYgKGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkgICh2b2lkICopIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hLAorCQkJCSAgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzKTsKKwkJZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEgPSBOVUxMOworCX0KKworCWlmIChkZC0+aXBhdGhfcGFnZXNoYWRvdykgeworCQlzdHJ1Y3QgcGFnZSAqKnRtcHAgPSBkZC0+aXBhdGhfcGFnZXNoYWRvdzsKKwkJaW50IGksIGNudCA9IDA7CisKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5sb2NraW5nIGFueSBleHBUSUQgcGFnZXMgc3RpbGwgIgorCQkJICAgImxvY2tlZFxuIik7CisJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IHBvcnQrKykgeworCQkJaW50IHBvcnRfdGlkYmFzZSA9IHBvcnQgKiBkZC0+aXBhdGhfcmN2dGlkY250OworCQkJaW50IG1heHRpZCA9IHBvcnRfdGlkYmFzZSArIGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJCQlmb3IgKGkgPSBwb3J0X3RpZGJhc2U7IGkgPCBtYXh0aWQ7IGkrKykgeworCQkJCWlmICghdG1wcFtpXSkKKwkJCQkJY29udGludWU7CisJCQkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKCZ0bXBwW2ldLCAxKTsKKwkJCQl0bXBwW2ldID0gTlVMTDsKKwkJCQljbnQrKzsKKwkJCX0KKwkJfQorCQlpZiAoY250KSB7CisJCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MgKz0gY250OworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVGhlcmUgd2VyZSBzdGlsbCAldSBleHBUSUQgIgorCQkJCSAgICJlbnRyaWVzIGxvY2tlZFxuIiwgY250KTsKKwkJfQorCQlpZiAoaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcyB8fAorCQkgICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWxsdSBwYWdlcyBsb2NrZWQsICVsbHUgIgorCQkJCSAgICJ1bmxvY2tlZCB2aWEgaXBhdGhfbXt1bn1sb2NrXG4iLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcywKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAgIGlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2Nrcyk7CisKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiRnJlZSBzaGFkb3cgcGFnZSB0aWQgYXJyYXkgYXQgJXBcbiIsCisJCQkgICBkZC0+aXBhdGhfcGFnZXNoYWRvdyk7CisJCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSBOVUxMOworCX0KKworCS8qCisJICogZnJlZSBhbnkgcmVzb3VyY2VzIHN0aWxsIGluIHVzZSAodXN1YWxseSBqdXN0IGtlcm5lbCBwb3J0cykKKwkgKiBhdCB1bmxvYWQKKwkgKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBwb3J0KyspCisJCWlwYXRoX2ZyZWVfcGRkYXRhKGRkLCBwb3J0LCAxKTsKKwlrZnJlZShkZC0+aXBhdGhfcGQpOworCS8qCisJICogZGVidWdnYWJpbGl0eSwgaW4gY2FzZSBzb21lIGNsZWFudXAgcGF0aCB0cmllcyB0byB1c2UgaXQKKwkgKiBhZnRlciB0aGlzCisJICovCisJZGQtPmlwYXRoX3BkID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGluZmluaXBhdGhfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaXBhdGhfZXhpdF9pcGF0aGZzKCk7CisKKwlpcGF0aF9kcml2ZXJfcmVtb3ZlX2dyb3VwKCZpcGF0aF9kcml2ZXIuZHJpdmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogdHVybiBvZmYgcmN2LCBzZW5kLCBhbmQgaW50ZXJydXB0cyBmb3IgYWxsIHBvcnRzLCBhbGwgZHJpdmVycworCSAqIHNob3VsZCBhbHNvIGhhcmQgcmVzZXQgdGhlIGNoaXAgaGVyZT8KKwkgKiBmcmVlIHVwIHBvcnQgMCAoa2VybmVsKSByY3ZoZHIsIGVnciBidWZzLCBhbmQgZXZlbnR1YWxseSB0aWQgYnVmcworCSAqIGZvciBhbGwgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgaWYgdGhleSB3ZXJlIGFsbG9jYXRlZAorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwkJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJCWNsZWFudXBfZGV2aWNlKGRkKTsKKworCQlpZiAoZGQtPnBjaWRldikgeworCQkJaWYgKGRkLT5wY2lkZXYtPmlycSkgeworCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwKKwkJCQkJICAgInVuaXQgJXUgZnJlZV9pcnEgb2YgaXJxICV4XG4iLAorCQkJCQkgICBkZC0+aXBhdGhfdW5pdCwgZGQtPnBjaWRldi0+aXJxKTsKKwkJCQlmcmVlX2lycShkZC0+cGNpZGV2LT5pcnEsIGRkKTsKKwkJCX0gZWxzZQorCQkJCWlwYXRoX2RiZygiaXJxIGlzIDAsIG5vdCBkb2luZyBmcmVlX2lycSAiCisJCQkJCSAgImZvciB1bml0ICV1XG4iLCBkZC0+aXBhdGhfdW5pdCk7CisKKwkJCS8qCisJCQkgKiB3ZSBjaGVjayBmb3IgTlVMTCBoZXJlLCBiZWNhdXNlIGl0J3Mgb3V0c2lkZQorCQkJICogdGhlIGtyZWdiYXNlIGNoZWNrLCBhbmQgd2UgbmVlZCB0byBjYWxsIGl0CisJCQkgKiBhZnRlciB0aGUgZnJlZV9pcnEuICBUaHVzIGl0J3MgcG9zc2libGUgdGhhdAorCQkJICogdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIHdlcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuCisJCQkgKi8KKwkJCWlmIChkZC0+aXBhdGhfZl9jbGVhbnVwKQorCQkJCS8qIGNsZWFuIHVwIGNoaXAtc3BlY2lmaWMgc3R1ZmYgKi8KKwkJCQlkZC0+aXBhdGhfZl9jbGVhbnVwKGRkKTsKKworCQkJZGQtPnBjaWRldiA9IE5VTEw7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5yZWdpc3RlcmluZyBwY2kgZHJpdmVyXG4iKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwYXRoX2RyaXZlcik7CisKKwlpZHJfZGVzdHJveSgmdW5pdF90YWJsZSk7Cit9CisKKy8qKgorICogaXBhdGhfcmVzZXRfZGV2aWNlIC0gcmVzZXQgdGhlIGNoaXAgaWYgcG9zc2libGUKKyAqIEB1bml0OiB0aGUgZGV2aWNlIHRvIHJlc2V0CisgKgorICogV2hldGhlciBvciBub3QgcmVzZXQgaXMgc3VjY2Vzc2Z1bCwgd2UgYXR0ZW1wdCB0byByZS1pbml0aWFsaXplIHRoZSBjaGlwCisgKiAodGhhdCBpcywgbXVjaCBsaWtlIGEgZHJpdmVyIHVubG9hZC9yZWxvYWQpLiAgV2UgY2xlYXIgdGhlIElOSVRURUQgZmxhZworICogc28gdGhhdCB0aGUgdmFyaW91cyBlbnRyeSBwb2ludHMgd2lsbCBmYWlsIHVudGlsIHdlIHJlaW5pdGlhbGl6ZS4gIEZvcgorICogbm93LCB3ZSBvbmx5IGFsbG93IHRoaXMgaWYgbm8gdXNlciBwb3J0cyBhcmUgb3BlbiB0aGF0IHVzZSBjaGlwIHJlc291cmNlcworICovCitpbnQgaXBhdGhfcmVzZXRfZGV2aWNlKGludCB1bml0KQoreworCWludCByZXQsIGk7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gaXBhdGhfbG9va3VwKHVuaXQpOworCisJaWYgKCFkZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCisJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIlJlc2V0IG9uIHVuaXQgJXUgcmVxdWVzdGVkXG4iLCB1bml0KTsKKworCWlmICghZGQtPmlwYXRoX2tyZWdiYXNlIHx8ICEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUFJFU0VOVCkpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkludmFsaWQgdW5pdCBudW1iZXIgJXUgb3IgIgorCQkJICJub3QgaW5pdGlhbGl6ZWQgb3Igbm90IHByZXNlbnRcbiIsIHVuaXQpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoZGQtPmlwYXRoX3BkKQorCQlmb3IgKGkgPSAxOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJCWlmIChkZC0+aXBhdGhfcGRbaV0gJiYgZGQtPmlwYXRoX3BkW2ldLT5wb3J0X2NudCkgeworCQkJCWlwYXRoX2RiZygidW5pdCAldSBwb3J0ICVkIGlzIGluIHVzZSAiCisJCQkJCSAgIihQSUQgJXUgY21kICVzKSwgY2FuJ3QgcmVzZXRcbiIsCisJCQkJCSAgdW5pdCwgaSwKKwkJCQkJICBkZC0+aXBhdGhfcGRbaV0tPnBvcnRfcGlkLAorCQkJCQkgIGRkLT5pcGF0aF9wZFtpXS0+cG9ydF9jb21tKTsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CisKKwlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX0lOSVRURUQ7CisJcmV0ID0gZGQtPmlwYXRoX2ZfcmVzZXQoZGQpOworCWlmIChyZXQgIT0gMSkKKwkJaXBhdGhfZGJnKCJyZXNldCB3YXMgbm90IHN1Y2Nlc3NmdWxcbiIpOworCWlwYXRoX2RiZygiVHJ5aW5nIHRvIHJlaW5pdGlhbGl6ZSB1bml0ICV1IGFmdGVyIHJlc2V0IGF0dGVtcHRcbiIsCisJCSAgdW5pdCk7CisJcmV0ID0gaXBhdGhfaW5pdF9jaGlwKGRkLCAxKTsKKwlpZiAocmV0KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiUmVpbml0aWFsaXplIHVuaXQgJXUgYWZ0ZXIgIgorCQkJICAgICAgInJlc2V0IGZhaWxlZCB3aXRoICVkXG4iLCB1bml0LCByZXQpOworCWVsc2UKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIlJlaW5pdGlhbGl6ZWQgdW5pdCAldSBhZnRlciAiCisJCQkgInJlc2V0dGluZ1xuIiwgdW5pdCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaW5maW5pcGF0aF9pbml0KTsKK21vZHVsZV9leGl0KGluZmluaXBhdGhfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmMWNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwpAQCAtMCwwICsxLDYxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorCisvKgorICogSW5maW5pUGF0aCBJMkMgZHJpdmVyIGZvciBhIHNlcmlhbCBlZXByb20uICBUaGlzIGlzIG5vdCBhIGdlbmVyaWMKKyAqIEkyQyBpbnRlcmZhY2UuICBGb3IgYSBzdGFydCwgdGhlIGRldmljZSB3ZSdyZSB1c2luZyAoQXRtZWwgQVQyNEMxMSkKKyAqIGRvZXNuJ3Qgd29yayBsaWtlIGEgcmVndWxhciBJMkMgZGV2aWNlLiAgSXQgbG9va3MgbGlrZSBvbmUKKyAqIGVsZWN0cmljYWxseSwgYnV0IG5vdCBsb2dpY2FsbHkuICBOb3JtYWwgSTJDIGRldmljZXMgaGF2ZSBhIHNpbmdsZQorICogNy1iaXQgb3IgMTAtYml0IEkyQyBhZGRyZXNzIHRoYXQgdGhleSByZXNwb25kIHRvLiAgVmFsaWQgNy1iaXQKKyAqIGFkZHJlc3NlcyByYW5nZSBmcm9tIDB4MDMgdG8gMHg3Ny4gIEFkZHJlc3NlcyAweDAwIHRvIDB4MDIgYW5kIDB4NzgKKyAqIHRvIDB4N0YgYXJlIHNwZWNpYWwgcmVzZXJ2ZWQgYWRkcmVzc2VzIChlLmcuIDB4MDAgaXMgdGhlICJnZW5lcmFsCisgKiBjYWxsIiBhZGRyZXNzLikgIFRoZSBBdG1lbCBkZXZpY2UsIG9uIHRoZSBvdGhlciBoYW5kLCByZXNwb25kcyB0byBBTEwKKyAqIDctYml0IGFkZHJlc3Nlcy4gIEl0J3MgZGVzaWduZWQgdG8gYmUgdGhlIG9ubHkgZGV2aWNlIG9uIGEgZ2l2ZW4gSTJDCisgKiBidXMuICBBIDctYml0IGFkZHJlc3MgY29ycmVzcG9uZHMgdG8gdGhlIG1lbW9yeSBhZGRyZXNzIHdpdGhpbiB0aGUKKyAqIEF0bWVsIGRldmljZSBpdHNlbGYuCisgKgorICogQWxzbywgdGhlIHRpbWluZyByZXF1aXJlbWVudHMgbWVhbiBtb3JlIHRoYW4gc2ltcGxlIHNvZnR3YXJlCisgKiBiaXRiYW5naW5nLCB3aXRoIHJlYWRiYWNrcyBmcm9tIGNoaXAgdG8gZW5zdXJlIHRpbWluZyAoc2ltcGxlIHVkZWxheQorICogaXMgbm90IGVub3VnaCkuCisgKgorICogVGhpcyBhbGwgbWVhbnMgdGhhdCBhY2Nlc3NpbmcgdGhlIGRldmljZSBpcyBzcGVjaWFsaXplZCBlbm91Z2gKKyAqIHRoYXQgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBJMkMgYml0YmFuZ2luZyBpbnRlcmZhY2Ugd291bGQgYmUKKyAqIGltcG9zc2libGUuICBGb3IgZXhhbXBsZSwgdGhlIGNvcmUgSTJDIGVlcHJvbSBkcml2ZXIgZXhwZWN0cyB0byBmaW5kCisgKiBhIGRldmljZSBhdCBvbmUgb3IgbW9yZSBvZiBhIGxpbWl0ZWQgc2V0IG9mIGFkZHJlc3NlcyBvbmx5LiAgSXQgZG9lc24ndAorICogYWxsb3cgd3JpdGluZyB0byBhbiBlZXByb20uICBJdCBhbHNvIGRvZXNuJ3QgcHJvdmlkZSBhbnkgbWVhbnMgb2YKKyAqIGFjY2Vzc2luZyBlZXByb20gY29udGVudHMgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCwgb25seSB2aWEgc3lzZnMuCisgKi8KKworZW51bSBpMmNfdHlwZSB7CisJaTJjX2xpbmVfc2NsID0gMCwKKwlpMmNfbGluZV9zZGEKK307CisKK2VudW0gaTJjX3N0YXRlIHsKKwlpMmNfbGluZV9sb3cgPSAwLAorCWkyY19saW5lX2hpZ2gKK307CisKKyNkZWZpbmUgUkVBRF9DTUQgMQorI2RlZmluZSBXUklURV9DTUQgMAorCitzdGF0aWMgaW50IGVlcHJvbV9pbml0OworCisvKgorICogVGhlIGdwaW92YWwgbWFuaXB1bGF0aW9uIHJlYWxseSBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHNwaW5sb2NrcworICogb3IgYmUgY29udmVydGVkIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucy4KKyAqLworCisvKioKKyAqIGkyY19ncGlvX3NldCAtIHNldCBhIEdQSU8gbGluZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBsaW5lOiB0aGUgbGluZSB0byBzZXQKKyAqIEBuZXdfbGluZV9zdGF0ZTogdGhlIHN0YXRlIHRvIHNldAorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgbGluZSB3YXMgc2V0IHRvIHRoZSBuZXcgc3RhdGUgc3VjY2Vzc2Z1bGx5LCBub24temVybworICogb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgaTJjX2dwaW9fc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCWVudW0gaTJjX3R5cGUgbGluZSwKKwkJCWVudW0gaTJjX3N0YXRlIG5ld19saW5lX3N0YXRlKQoreworCXU2NCByZWFkX3ZhbCwgd3JpdGVfdmFsLCBtYXNrLCAqZ3Bpb3ZhbDsKKworCWdwaW92YWwgPSAmZGQtPmlwYXRoX2dwaW9fb3V0OworCXJlYWRfdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCk7CisJaWYgKGxpbmUgPT0gaTJjX2xpbmVfc2NsKQorCQltYXNrID0gaXBhdGhfZ3Bpb19zY2w7CisJZWxzZQorCQltYXNrID0gaXBhdGhfZ3Bpb19zZGE7CisKKwlpZiAobmV3X2xpbmVfc3RhdGUgPT0gaTJjX2xpbmVfaGlnaCkKKwkJLyogdHJpLXN0YXRlIHRoZSBvdXRwdXQgcmF0aGVyIHRoYW4gZm9yY2UgaGlnaCAqLworCQl3cml0ZV92YWwgPSByZWFkX3ZhbCAmIH5tYXNrOworCWVsc2UKKwkJLyogY29uZmlnIGxpbmUgdG8gYmUgYW4gb3V0cHV0ICovCisJCXdyaXRlX3ZhbCA9IHJlYWRfdmFsIHwgbWFzazsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2V4dGN0cmwsIHdyaXRlX3ZhbCk7CisKKwkvKiBzZXQgaGlnaCBhbmQgdmVyaWZ5ICovCisJaWYgKG5ld19saW5lX3N0YXRlID09IGkyY19saW5lX2hpZ2gpCisJCXdyaXRlX3ZhbCA9IDB4MVVMOworCWVsc2UKKwkJd3JpdGVfdmFsID0gMHgwVUw7CisKKwlpZiAobGluZSA9PSBpMmNfbGluZV9zY2wpIHsKKwkJd3JpdGVfdmFsIDw8PSBpcGF0aF9ncGlvX3NjbF9udW07CisJCSpncGlvdmFsID0gKmdwaW92YWwgJiB+KDFVTCA8PCBpcGF0aF9ncGlvX3NjbF9udW0pOworCQkqZ3Bpb3ZhbCB8PSB3cml0ZV92YWw7CisJfSBlbHNlIHsKKwkJd3JpdGVfdmFsIDw8PSBpcGF0aF9ncGlvX3NkYV9udW07CisJCSpncGlvdmFsID0gKmdwaW92YWwgJiB+KDFVTCA8PCBpcGF0aF9ncGlvX3NkYV9udW0pOworCQkqZ3Bpb3ZhbCB8PSB3cml0ZV92YWw7CisJfQorCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19vdXQsICpncGlvdmFsKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGkyY19ncGlvX2dldCAtIGdldCBhIEdQSU8gbGluZSBzdGF0ZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBsaW5lOiB0aGUgbGluZSB0byBnZXQKKyAqIEBjdXJyX3N0YXRlcDogd2hlcmUgdG8gcHV0IHRoZSBsaW5lIHN0YXRlCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBsaW5lIHdhcyBzZXQgdG8gdGhlIG5ldyBzdGF0ZSBzdWNjZXNzZnVsbHksIG5vbi16ZXJvCisgKiBvbiBlcnJvci4gIGN1cnJfc3RhdGUgaXMgbm90IHNldCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBpMmNfZ3Bpb19nZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJZW51bSBpMmNfdHlwZSBsaW5lLAorCQkJZW51bSBpMmNfc3RhdGUgKmN1cnJfc3RhdGVwKQoreworCXU2NCByZWFkX3ZhbCwgd3JpdGVfdmFsLCBtYXNrOworCWludCByZXQ7CisKKwkvKiBjaGVjayBhcmdzICovCisJaWYgKGN1cnJfc3RhdGVwID09IE5VTEwpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBiYWlsOworCX0KKworCXJlYWRfdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCk7CisJLyogY29uZmlnIGxpbmUgdG8gYmUgYW4gaW5wdXQgKi8KKwlpZiAobGluZSA9PSBpMmNfbGluZV9zY2wpCisJCW1hc2sgPSBpcGF0aF9ncGlvX3NjbDsKKwllbHNlCisJCW1hc2sgPSBpcGF0aF9ncGlvX3NkYTsKKwl3cml0ZV92YWwgPSByZWFkX3ZhbCAmIH5tYXNrOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCwgd3JpdGVfdmFsKTsKKwlyZWFkX3ZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2V4dHN0YXR1cyk7CisKKwlpZiAocmVhZF92YWwgJiBtYXNrKQorCQkqY3Vycl9zdGF0ZXAgPSBpMmNfbGluZV9oaWdoOworCWVsc2UKKwkJKmN1cnJfc3RhdGVwID0gaTJjX2xpbmVfbG93OworCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGkyY193YWl0X2Zvcl93cml0ZXMgLSB3YWl0IGZvciBhIHdyaXRlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFdlIHVzZSB0aGlzIGluc3RlYWQgb2YgdWRlbGF5IGRpcmVjdGx5LCBzbyB3ZSBjYW4gbWFrZSBzdXJlCisgKiB0aGF0IHByZXZpb3VzIHJlZ2lzdGVyIHdyaXRlcyBoYXZlIGJlZW4gZmx1c2hlZCBhbGwgdGhlIHdheQorICogdG8gdGhlIGNoaXAuICBTaW5jZSB3ZSBhcmUgZGVsYXlpbmcgYW55d2F5LCB0aGUgY29zdCBkb2Vzbid0CisgKiBodXJ0LCBhbmQgbWFrZXMgdGhlIGJpdCB0d2lkZGxpbmcgbW9yZSByZWd1bGFyCisgKi8KK3N0YXRpYyB2b2lkIGkyY193YWl0X2Zvcl93cml0ZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCSh2b2lkKWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworfQorCitzdGF0aWMgdm9pZCBzY2xfb3V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggYml0KQoreworCWkyY19ncGlvX3NldChkZCwgaTJjX2xpbmVfc2NsLCBiaXQgPyBpMmNfbGluZV9oaWdoIDogaTJjX2xpbmVfbG93KTsKKworCWkyY193YWl0X2Zvcl93cml0ZXMoZGQpOworfQorCitzdGF0aWMgdm9pZCBzZGFfb3V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggYml0KQoreworCWkyY19ncGlvX3NldChkZCwgaTJjX2xpbmVfc2RhLCBiaXQgPyBpMmNfbGluZV9oaWdoIDogaTJjX2xpbmVfbG93KTsKKworCWkyY193YWl0X2Zvcl93cml0ZXMoZGQpOworfQorCitzdGF0aWMgdTggc2RhX2luKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHdhaXQpCit7CisJZW51bSBpMmNfc3RhdGUgYml0OworCisJaWYgKGkyY19ncGlvX2dldChkZCwgaTJjX2xpbmVfc2RhLCAmYml0KSkKKwkJaXBhdGhfZGJnKCJnZXQgYml0IGZhaWxlZCFcbiIpOworCisJaWYgKHdhaXQpCisJCWkyY193YWl0X2Zvcl93cml0ZXMoZGQpOworCisJcmV0dXJuIGJpdCA9PSBpMmNfbGluZV9oaWdoID8gMVUgOiAwOworfQorCisvKioKKyAqIGkyY19hY2tyY3YgLSBzZWUgaWYgYWNrIGZvbGxvd2luZyB3cml0ZSBpcyB0cnVlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICovCitzdGF0aWMgaW50IGkyY19hY2tyY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU4IGFja19yZWNlaXZlZDsKKworCS8qIEFUIEVOVFJZIFNDTCA9IExPVyAqLworCS8qIGNoYW5nZSBkaXJlY3Rpb24sIGlnbm9yZSBkYXRhICovCisJYWNrX3JlY2VpdmVkID0gc2RhX2luKGRkLCAxKTsKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwlhY2tfcmVjZWl2ZWQgPSBzZGFfaW4oZGQsIDEpID09IDA7CisJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwlyZXR1cm4gYWNrX3JlY2VpdmVkOworfQorCisvKioKKyAqIHdyX2J5dGUgLSB3cml0ZSBhIGJ5dGUsIG9uZSBiaXQgYXQgYSB0aW1lCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGRhdGE6IHRoZSBieXRlIHRvIHdyaXRlCisgKgorICogUmV0dXJucyAwIGlmIHdlIGdvdCB0aGUgZm9sbG93aW5nIGFjaywgb3RoZXJ3aXNlIDEKKyAqLworc3RhdGljIGludCB3cl9ieXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggZGF0YSkKK3sKKwlpbnQgYml0X2NudHI7CisJdTggYml0OworCisJZm9yIChiaXRfY250ciA9IDc7IGJpdF9jbnRyID49IDA7IGJpdF9jbnRyLS0pIHsKKwkJYml0ID0gKGRhdGEgPj4gYml0X2NudHIpICYgMTsKKwkJc2RhX291dChkZCwgYml0KTsKKwkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisJCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJfQorCXJldHVybiAoIWkyY19hY2tyY3YoZGQpKSA/IDEgOiAwOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2FjayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc2RhX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCXNkYV9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworfQorCisvKioKKyAqIGkyY19zdGFydGNtZCAtIHRyYW5zbWl0IHRoZSBzdGFydCBjb25kaXRpb24sIGZvbGxvd2VkIGJ5IGFkZHJlc3MvY21kCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQG9mZnNldF9kaXI6IGRpcmVjdGlvbiBieXRlCisgKgorICogICAgICAoYm90aCBjbG9jay9kYXRhIGhpZ2gsIGNsb2NrIGhpZ2gsIGRhdGEgbG93IHdoaWxlIGNsb2NrIGlzIGhpZ2gpCisgKi8KK3N0YXRpYyBpbnQgaTJjX3N0YXJ0Y21kKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggb2Zmc2V0X2RpcikKK3sKKwlpbnQgcmVzOworCisJLyogaXNzdWUgc3RhcnQgc2VxdWVuY2UgKi8KKwlzZGFfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKwlzZGFfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisKKwkvKiBpc3N1ZSBsZW5ndGggYW5kIGRpcmVjdGlvbiBieXRlICovCisJcmVzID0gd3JfYnl0ZShkZCwgb2Zmc2V0X2Rpcik7CisKKwlpZiAocmVzKQorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJObyBhY2sgdG8gY29tcGxldGUgc3RhcnRcbiIpOworCisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBzdG9wX2NtZCAtIHRyYW5zbWl0IHRoZSBzdG9wIGNvbmRpdGlvbgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiAoYm90aCBjbG9jay9kYXRhIGxvdywgY2xvY2sgaGlnaCwgZGF0YSBoaWdoIHdoaWxlIGNsb2NrIGlzIGhpZ2gpCisgKi8KK3N0YXRpYyB2b2lkIHN0b3BfY21kKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCXNkYV9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisJc2RhX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisJdWRlbGF5KDIpOworfQorCisvKioKKyAqIGVlcHJvbV9yZXNldCAtIHJlc2V0IEkyQyBjb21tdW5pY2F0aW9uCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICovCisKK3N0YXRpYyBpbnQgZWVwcm9tX3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgY2xvY2tfY3ljbGVzX2xlZnQgPSA5OworCXU2NCAqZ3Bpb3ZhbCA9ICZkZC0+aXBhdGhfZ3Bpb19vdXQ7CisJaW50IHJldDsKKworCWVlcHJvbV9pbml0ID0gMTsKKwkqZ3Bpb3ZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fb3V0KTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXNldHRpbmcgaTJjIGVlcHJvbTsgaW5pdGlhbCBncGlvb3V0IHJlZyAiCisJCSAgICJpcyAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSAqZ3Bpb3ZhbCk7CisKKwkvKgorCSAqIFRoaXMgaXMgdG8gZ2V0IHRoZSBpMmMgaW50byBhIGtub3duIHN0YXRlLCBieSBmaXJzdCBnb2luZyBsb3csCisJICogdGhlbiB0cmlzdGF0ZSBzZGEgKGFuZCB0aGVuIHRyaXN0YXRlIHNjbCBhcyBmaXJzdCB0aGluZworCSAqIGluIGxvb3ApCisJICovCisJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwlzZGFfb3V0KGRkLCBpMmNfbGluZV9oaWdoKTsKKworCXdoaWxlIChjbG9ja19jeWNsZXNfbGVmdC0tKSB7CisJCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCisJCWlmIChzZGFfaW4oZGQsIDApKSB7CisJCQlzZGFfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCQkJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCX0KKworCXJldCA9IDE7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9lZXByb21fcmVhZCAtIHJlY2VpdmVzIGJ5dGVzIGZyb20gdGhlIGVlcHJvbSB2aWEgSTJDCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGVlcHJvbV9vZmZzZXQ6IGFkZHJlc3MgdG8gcmVhZCBmcm9tCisgKiBAYnVmZmVyOiB3aGVyZSB0byBzdG9yZSByZXN1bHQKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byByZWNlaXZlCisgKi8KKworaW50IGlwYXRoX2VlcHJvbV9yZWFkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggZWVwcm9tX29mZnNldCwKKwkJICAgICAgdm9pZCAqYnVmZmVyLCBpbnQgbGVuKQoreworCS8qIGNvbXBpbGVyIGNvbXBsYWlucyB1bmxlc3MgaW5pdGlhbGl6ZWQgKi8KKwl1OCBzaW5nbGVfYnl0ZSA9IDA7CisJaW50IGJpdF9jbnRyOworCWludCByZXQ7CisKKwlpZiAoIWVlcHJvbV9pbml0KQorCQllZXByb21fcmVzZXQoZGQpOworCisJZWVwcm9tX29mZnNldCA9IChlZXByb21fb2Zmc2V0IDw8IDEpIHwgUkVBRF9DTUQ7CisKKwlpZiAoaTJjX3N0YXJ0Y21kKGRkLCBlZXByb21fb2Zmc2V0KSkgeworCQlpcGF0aF9kYmcoIkZhaWxlZCBzdGFydGNtZFxuIik7CisJCXN0b3BfY21kKGRkKTsKKwkJcmV0ID0gMTsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogZWVwcm9tIGtlZXBzIGNsb2NraW5nIGRhdGEgb3V0IGFzIGxvbmcgYXMgd2UgYWNrLCBhdXRvbWF0aWNhbGx5CisJICogaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzLgorCSAqLworCXdoaWxlIChsZW4tLSA+IDApIHsKKwkJLyogZ2V0IGRhdGEgKi8KKwkJc2luZ2xlX2J5dGUgPSAwOworCQlmb3IgKGJpdF9jbnRyID0gODsgYml0X2NudHI7IGJpdF9jbnRyLS0pIHsKKwkJCXU4IGJpdDsKKwkJCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCQkJYml0ID0gc2RhX2luKGRkLCAwKTsKKwkJCXNpbmdsZV9ieXRlIHw9IGJpdCA8PCAoYml0X2NudHIgLSAxKTsKKwkJCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7CisJCX0KKworCQkvKiBzZW5kIGFjayBpZiBub3QgdGhlIGxhc3QgYnl0ZSAqLworCQlpZiAobGVuKQorCQkJc2VuZF9hY2soZGQpOworCisJCSooKHU4ICopIGJ1ZmZlcikgPSBzaW5nbGVfYnl0ZTsKKwkJYnVmZmVyKys7CisJfQorCisJc3RvcF9jbWQoZGQpOworCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2VlcHJvbV93cml0ZSAtIHdyaXRlcyBkYXRhIHRvIHRoZSBlZXByb20gdmlhIEkyQworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBlZXByb21fb2Zmc2V0OiB3aGVyZSB0byBwbGFjZSBkYXRhCisgKiBAYnVmZmVyOiBkYXRhIHRvIHdyaXRlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqLworaW50IGlwYXRoX2VlcHJvbV93cml0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IGVlcHJvbV9vZmZzZXQsCisJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIGludCBsZW4pCit7CisJdTggc2luZ2xlX2J5dGU7CisJaW50IHN1Yl9sZW47CisJY29uc3QgdTggKmJwID0gYnVmZmVyOworCWludCBtYXhfd2FpdF90aW1lLCBpOworCWludCByZXQ7CisKKwlpZiAoIWVlcHJvbV9pbml0KQorCQllZXByb21fcmVzZXQoZGQpOworCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKGkyY19zdGFydGNtZChkZCwgKGVlcHJvbV9vZmZzZXQgPDwgMSkgfCBXUklURV9DTUQpKSB7CisJCQlpcGF0aF9kYmcoIkZhaWxlZCB0byBzdGFydCBjbWQgb2Zmc2V0ICV1XG4iLAorCQkJCSAgZWVwcm9tX29mZnNldCk7CisJCQlnb3RvIGZhaWxlZF93cml0ZTsKKwkJfQorCisJCXN1Yl9sZW4gPSBtaW4obGVuLCA0KTsKKwkJZWVwcm9tX29mZnNldCArPSBzdWJfbGVuOworCQlsZW4gLT0gc3ViX2xlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgc3ViX2xlbjsgaSsrKSB7CisJCQlpZiAod3JfYnl0ZShkZCwgKmJwKyspKSB7CisJCQkJaXBhdGhfZGJnKCJubyBhY2sgYWZ0ZXIgYnl0ZSAldS8ldSAoJXUgIgorCQkJCQkgICJ0b3RhbCByZW1haW4pXG4iLCBpLCBzdWJfbGVuLAorCQkJCQkgIGxlbiArIHN1Yl9sZW4gLSBpKTsKKwkJCQlnb3RvIGZhaWxlZF93cml0ZTsKKwkJCX0KKwkJfQorCisJCXN0b3BfY21kKGRkKTsKKworCQkvKgorCQkgKiB3YWl0IGZvciB3cml0ZSBjb21wbGV0ZSBieSB3YWl0aW5nIGZvciBhIHN1Y2Nlc3NmdWwKKwkJICogcmVhZCAodGhlIGNoaXAgcmVwbGllcyB3aXRoIGEgemVybyBhZnRlciB0aGUgd3JpdGUKKwkJICogY21kIGNvbXBsZXRlcywgYW5kIGJlZm9yZSBpdCB3cml0ZXMgdG8gdGhlIGVlcHJvbS4KKwkJICogVGhlIHN0YXJ0Y21kIGZvciB0aGUgcmVhZCB3aWxsIGZhaWwgdGhlIGFjayB1bnRpbAorCQkgKiB0aGUgd3JpdGVzIGhhdmUgY29tcGxldGVkLiAgIFdlIGRvIHRoaXMgaW5saW5lIHRvIGF2b2lkCisJCSAqIHRoZSBkZWJ1ZyBwcmludHMgdGhhdCBhcmUgaW4gdGhlIHJlYWwgcmVhZCByb3V0aW5lCisJCSAqIGlmIHRoZSBzdGFydGNtZCBmYWlscy4KKwkJICovCisJCW1heF93YWl0X3RpbWUgPSAxMDA7CisJCXdoaWxlIChpMmNfc3RhcnRjbWQoZGQsIFJFQURfQ01EKSkgeworCQkJc3RvcF9jbWQoZGQpOworCQkJaWYgKCEtLW1heF93YWl0X3RpbWUpIHsKKwkJCQlpcGF0aF9kYmcoIkRpZCBub3QgZ2V0IHN1Y2Nlc3NmdWwgcmVhZCB0byAiCisJCQkJCSAgImNvbXBsZXRlIHdyaXRlXG4iKTsKKwkJCQlnb3RvIGZhaWxlZF93cml0ZTsKKwkJCX0KKwkJfQorCQkvKiBub3cgcmVhZCB0aGUgemVybyBieXRlICovCisJCWZvciAoaSA9IHNpbmdsZV9ieXRlID0gMDsgaSA8IDg7IGkrKykgeworCQkJdTggYml0OworCQkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisJCQliaXQgPSBzZGFfaW4oZGQsIDApOworCQkJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwkJCXNpbmdsZV9ieXRlIDw8PSAxOworCQkJc2luZ2xlX2J5dGUgfD0gYml0OworCQl9CisJCXN0b3BfY21kKGRkKTsKKwl9CisKKwlyZXQgPSAwOworCWdvdG8gYmFpbDsKKworZmFpbGVkX3dyaXRlOgorCXN0b3BfY21kKGRkKTsKKwlyZXQgPSAxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCBmbGFzaF9jc3VtKHN0cnVjdCBpcGF0aF9mbGFzaCAqaWZwLCBpbnQgYWRqdXN0KQoreworCXU4ICppcCA9ICh1OCAqKSBpZnA7CisJdTggY3N1bSA9IDAsIGxlbjsKKworCWZvciAobGVuID0gMDsgbGVuIDwgaWZwLT5pZl9sZW5ndGg7IGxlbisrKQorCQljc3VtICs9ICppcCsrOworCWNzdW0gLT0gaWZwLT5pZl9jc3VtOworCWNzdW0gPSB+Y3N1bTsKKwlpZiAoYWRqdXN0KQorCQlpZnAtPmlmX2NzdW0gPSBjc3VtOworCisJcmV0dXJuIGNzdW07Cit9CisKKy8qKgorICogaXBhdGhfZ2V0X2d1aWQgLSBnZXQgdGhlIEdVSUQgZnJvbSB0aGUgaTJjIGRldmljZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBXZSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIHVzZSB0aGUgaXBhdGhfbmd1aWQgZmllbGQsIGFuZCBnZXQKKyAqIHRoZSBndWlkIGZyb20gdGhlIGZpcnN0IGNoaXAncyBmbGFzaCwgdG8gdXNlIGZvciBhbGwgb2YgdGhlbS4KKyAqLwordm9pZCBpcGF0aF9nZXRfZWVwcm9tX2luZm8oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3QgaXBhdGhfZmxhc2ggKmlmcDsKKwlfX2JlNjQgZ3VpZDsKKwlpbnQgbGVuOworCXU4IGNzdW0sICpiZ3VpZDsKKwlpbnQgdCA9IGRkLT5pcGF0aF91bml0OworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDAgPSBpcGF0aF9sb29rdXAoMCk7CisKKwlpZiAodCAmJiBkZDAtPmlwYXRoX25ndWlkID4gMSAmJiB0IDw9IGRkMC0+aXBhdGhfbmd1aWQpIHsKKwkJdTggKmJndWlkLCBvZ3VpZDsKKwkJZGQtPmlwYXRoX2d1aWQgPSBkZDAtPmlwYXRoX2d1aWQ7CisJCWJndWlkID0gKHU4ICopICYgZGQtPmlwYXRoX2d1aWQ7CisKKwkJb2d1aWQgPSBiZ3VpZFs3XTsKKwkJYmd1aWRbN10gKz0gdDsKKwkJaWYgKG9ndWlkID4gYmd1aWRbN10pIHsKKwkJCWlmIChiZ3VpZFs2XSA9PSAweGZmKSB7CisJCQkJaWYgKGJndWlkWzVdID09IDB4ZmYpIHsKKwkJCQkJaXBhdGhfZGV2X2VycigKKwkJCQkJCWRkLAorCQkJCQkJIkNhbid0IHNldCAlcyBHVUlEIGZyb20gIgorCQkJCQkJImJhc2UsIHdyYXBzIHRvIE9VSSFcbiIsCisJCQkJCQlpcGF0aF9nZXRfdW5pdF9uYW1lKHQpKTsKKwkJCQkJZGQtPmlwYXRoX2d1aWQgPSAwOworCQkJCQlnb3RvIGJhaWw7CisJCQkJfQorCQkJCWJndWlkWzVdKys7CisJCQl9CisJCQliZ3VpZFs2XSsrOworCQl9CisJCWRkLT5pcGF0aF9uZ3VpZCA9IDE7CisKKwkJaXBhdGhfZGJnKCJuZ3VpZCAldSwgc28gYWRkaW5nICV1IHRvIGRldmljZSAwIGd1aWQsICIKKwkJCSAgImZvciAlbGx4XG4iLAorCQkJICBkZDAtPmlwYXRoX25ndWlkLCB0LAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdShkZC0+aXBhdGhfZ3VpZCkpOworCQlnb3RvIGJhaWw7CisJfQorCisJbGVuID0gb2Zmc2V0b2Yoc3RydWN0IGlwYXRoX2ZsYXNoLCBpZl9mdXR1cmUpOworCWJ1ZiA9IHZtYWxsb2MobGVuKTsKKwlpZiAoIWJ1ZikgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHJlYWQgJXUgIgorCQkJICAgICAgImJ5dGVzIGZyb20gZWVwcm9tIGZvciBHVUlEXG4iLCBsZW4pOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGlwYXRoX2VlcHJvbV9yZWFkKGRkLCAwLCBidWYsIGxlbikpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCByZWFkaW5nIEdVSUQgZnJvbSBlZXByb21cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCWlmcCA9IChzdHJ1Y3QgaXBhdGhfZmxhc2ggKilidWY7CisKKwljc3VtID0gZmxhc2hfY3N1bShpZnAsIDApOworCWlmIChjc3VtICE9IGlmcC0+aWZfY3N1bSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQmFkIEkyQyBmbGFzaCBjaGVja3N1bTogIgorCQkJICIweCV4LCBub3QgMHgleFxuIiwgY3N1bSwgaWZwLT5pZl9jc3VtKTsKKwkJZ290byBkb25lOworCX0KKwlpZiAoKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IDBVTEwgfHwKKwkgICAgKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoLTFMTCkpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkludmFsaWQgR1VJRCAlbGx4IGZyb20gZmxhc2g7ICIKKwkJCSAgICAgICJpZ25vcmluZ1xuIiwKKwkJCSAgICAgICoodW5zaWduZWQgbG9uZyBsb25nICopIGlmcC0+aWZfZ3VpZCk7CisJCS8qIGRvbid0IGFsbG93IEdVSUQgaWYgYWxsIDAgb3IgYWxsIDEncyAqLworCQlnb3RvIGRvbmU7CisJfQorCisJLyogY29tcGxhaW4sIGJ1dCBhbGxvdyBpdCAqLworCWlmICgqKHU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gMHgxMDAwMDc1MTEwMDAwMDBVTEwpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJXYXJuaW5nLCBHVUlEICVsbHggaXMgIgorCQkJICJkZWZhdWx0LCBwcm9iYWJseSBub3QgY29ycmVjdCFcbiIsCisJCQkgKih1bnNpZ25lZCBsb25nIGxvbmcgKikgaWZwLT5pZl9ndWlkKTsKKworCWJndWlkID0gaWZwLT5pZl9ndWlkOworCWlmICghYmd1aWRbMF0gJiYgIWJndWlkWzFdICYmICFiZ3VpZFsyXSkgeworCQkvKiBvcmlnaW5hbCBpbmNvcnJlY3QgR1VJRCBmb3JtYXQgaW4gZmxhc2g7IGZpeCBpbgorCQkgKiBjb3JlIGNvcHksIGJ5IHNoaWZ0aW5nIHVwIDIgb2N0ZXRzOyBkb24ndCBuZWVkIHRvCisJCSAqIGNoYW5nZSB0b3Agb2N0ZXQsIHNpbmNlIGJvdGggaXQgYW5kIHNoaWZ0ZWQgYXJlCisJCSAqIDAuLiAqLworCQliZ3VpZFsxXSA9IGJndWlkWzNdOworCQliZ3VpZFsyXSA9IGJndWlkWzRdOworCQliZ3VpZFszXSA9IGJndWlkWzRdID0gMDsKKwkJZ3VpZCA9ICooX19iZTY0ICopIGlmcC0+aWZfZ3VpZDsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiT2xkIEdVSUQgZm9ybWF0IGluIGZsYXNoLCB0b3AgMyB6ZXJvLCAiCisJCQkgICAic2hpZnRpbmcgMiBvY3RldHNcbiIpOworCX0gZWxzZQorCQlndWlkID0gKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkOworCWRkLT5pcGF0aF9ndWlkID0gZ3VpZDsKKwlkZC0+aXBhdGhfbmd1aWQgPSBpZnAtPmlmX251bWd1aWQ7CisJbWVtY3B5KGRkLT5pcGF0aF9zZXJpYWwsIGlmcC0+aWZfc2VyaWFsLAorCSAgICAgICBzaXplb2YoaWZwLT5pZl9zZXJpYWwpKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJJbml0dGVkIEdVSUQgdG8gJWxseCBmcm9tIGVlcHJvbVxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUoZGQtPmlwYXRoX2d1aWQpKTsKKworZG9uZToKKwl2ZnJlZShidWYpOworCitiYWlsOjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhMjY3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMCwwICsxLDE5MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKworc3RhdGljIGludCBpcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyBpbnQgaXBhdGhfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIHNzaXplX3QgaXBhdGhfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LAorCQkJICAgbG9mZl90ICopOworc3RhdGljIHVuc2lnbmVkIGludCBpcGF0aF9wb2xsKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKK3N0YXRpYyBpbnQgaXBhdGhfbW1hcChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwYXRoX2ZpbGVfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS53cml0ZSA9IGlwYXRoX3dyaXRlLAorCS5vcGVuID0gaXBhdGhfb3BlbiwKKwkucmVsZWFzZSA9IGlwYXRoX2Nsb3NlLAorCS5wb2xsID0gaXBhdGhfcG9sbCwKKwkubW1hcCA9IGlwYXRoX21tYXAKK307CisKK3N0YXRpYyBpbnQgaXBhdGhfZ2V0X2Jhc2VfaW5mbyhzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLAorCQkJICAgICAgIHZvaWQgX191c2VyICp1YmFzZSwgc2l6ZV90IHViYXNlX3NpemUpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlwYXRoX2Jhc2VfaW5mbyAqa2luZm8gPSBOVUxMOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCisJaWYgKHViYXNlX3NpemUgPCBzaXplb2YoKmtpbmZvKSkgeworCQlpcGF0aF9jZGJnKFBST0MsCisJCQkgICAiQmFzZSBzaXplICVsdSwgbmVlZCAlbHUgKHZlcnNpb24gbWlzbWF0Y2g/KVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nKSB1YmFzZV9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZigqa2luZm8pKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWtpbmZvID0ga3phbGxvYyhzaXplb2YoKmtpbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGtpbmZvID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IGRkLT5pcGF0aF9mX2dldF9iYXNlX2luZm8ocGQsIGtpbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBiYWlsOworCisJa2luZm8tPnNwaV9yY3ZoZHJfY250ID0gZGQtPmlwYXRoX3JjdmhkcmNudDsKKwlraW5mby0+c3BpX3JjdmhkcmVudF9zaXplID0gZGQtPmlwYXRoX3JjdmhkcmVudHNpemU7CisJa2luZm8tPnNwaV90aWRlZ3JjbnQgPSBkZC0+aXBhdGhfcmN2ZWdyY250OworCWtpbmZvLT5zcGlfcmN2X2VncmJ1ZnNpemUgPSBkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZTsKKwkvKgorCSAqIGhhdmUgdG8gbW1hcCB3aG9sZSB0aGluZworCSAqLworCWtpbmZvLT5zcGlfcmN2X2VncmJ1ZnRvdGxlbiA9CisJCXBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgKiBwZC0+cG9ydF9yY3ZlZ3JidWZfc2l6ZTsKKwlraW5mby0+c3BpX3Jjdl9lZ3JwZXJjaHVuayA9IHBkLT5wb3J0X3JjdmVncmJ1ZnNfcGVyY2h1bms7CisJa2luZm8tPnNwaV9yY3ZfZWdyY2h1bmtzaXplID0ga2luZm8tPnNwaV9yY3ZfZWdyYnVmdG90bGVuIC8KKwkJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rczsKKwlraW5mby0+c3BpX3RpZGNudCA9IGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJLyoKKwkgKiBmb3IgdGhpcyB1c2UsIG1heSBiZSBpcGF0aF9jZmdwb3J0cyBzdW1tZWQgb3ZlciBhbGwgY2hpcHMgdGhhdAorCSAqIGFyZSBhcmUgY29uZmlndXJlZCBhbmQgcHJlc2VudAorCSAqLworCWtpbmZvLT5zcGlfbnBvcnRzID0gZGQtPmlwYXRoX2NmZ3BvcnRzOworCS8qIHVuaXQgKGNoaXAvYm9hcmQpIG91ciBwb3J0IGlzIG9uICovCisJa2luZm8tPnNwaV91bml0ID0gZGQtPmlwYXRoX3VuaXQ7CisJLyogZm9yIG5vdywgb25seSBhIHNpbmdsZSBwYWdlICovCisJa2luZm8tPnNwaV90aWRfbWF4c2l6ZSA9IFBBR0VfU0laRTsKKworCS8qCisJICogRG9pbmcgdGhpcyBwZXIgcG9ydCwgYW5kIGJhc2VkIG9uIHRoZSBza2lwIHZhbHVlLCBldGMuICBUaGlzIGhhcworCSAqIHRvIGJlIHRoZSBhY3R1YWwgYnVmZmVyIHNpemUsIHNpbmNlIHRoZSBwcm90b2NvbCBjb2RlIHRyZWF0cyBpdAorCSAqIGFzIGFuIGFycmF5LgorCSAqCisJICogVGhlc2UgaGF2ZSB0byBiZSBzZXQgdG8gdXNlciBhZGRyZXNzZXMgaW4gdGhlIHVzZXIgY29kZSB2aWEgbW1hcC4KKwkgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgb24gcmV0dXJuIHRvIHVzZXIgY29kZSBmb3IgdGhlIG1tYXAgdGFyZ2V0CisJICogYWRkcmVzc2VzIG9ubHkuICBGb3IgMzIgYml0LCBzYW1lIDQ0IGJpdCBhZGRyZXNzIHByb2JsZW0sIHNvIHVzZQorCSAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCBub3QgdmlydHVhbC4gIEJlZm9yZSAyLjYuMTEsIHVzaW5nIHRoZQorCSAqIHBhZ2VfYWRkcmVzcygpIG1hY3JvIHdvcmtlZCwgYnV0IGluIDIuNi4xMSwgZXZlbiB0aGF0IHJldHVybnMgdGhlCisJICogZnVsbCA2NCBiaXQgYWRkcmVzcyAodXBwZXIgYml0cyBhbGwgMSdzKS4gIFNvIGZhciwgdXNpbmcgdGhlCisJICogcGh5c2ljYWwgYWRkcmVzc2VzIChvciBjaGlwIG9mZnNldHMsIGZvciBjaGlwIG1hcHBpbmcpIHdvcmtzLCBidXQKKwkgKiBubyBkb3VidCBzb21lIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZSB3aWxsIGNoYW5nIHRoYXQsIGFuZCB3ZSdsbCBiZQorCSAqIG9uIHRvIHlldCBhbm90aGVyIG1ldGhvZCBvZiBkZWFsaW5nIHdpdGggdGhpcworCSAqLworCWtpbmZvLT5zcGlfcmN2aGRyX2Jhc2UgPSAodTY0KSBwZC0+cG9ydF9yY3ZoZHJxX3BoeXM7CisJa2luZm8tPnNwaV9yY3ZfZWdyYnVmcyA9ICh1NjQpIHBkLT5wb3J0X3JjdmVncl9waHlzOworCWtpbmZvLT5zcGlfcGlvYXZhaWxhZGRyID0gKHU2NCkgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzOworCWtpbmZvLT5zcGlfc3RhdHVzID0gKHU2NCkga2luZm8tPnNwaV9waW9hdmFpbGFkZHIgKworCQkodm9pZCAqKSBkZC0+aXBhdGhfc3RhdHVzcCAtCisJCSh2b2lkICopIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hOworCWtpbmZvLT5zcGlfcGlvYnVmYmFzZSA9ICh1NjQpIHBkLT5wb3J0X3Bpb2J1ZnM7CisJa2luZm8tPl9fc3BpX3VyZWdiYXNlID0KKwkJZGQtPmlwYXRoX3VyZWdiYXNlICsgZGQtPmlwYXRoX3BhbGlnbiAqIHBkLT5wb3J0X3BvcnQ7CisKKwlraW5mby0+c3BpX3Bpb2luZGV4ID0gZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwZC0+cG9ydF9wb3J0IC0gMSk7CisJa2luZm8tPnNwaV9waW9jbnQgPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0OworCWtpbmZvLT5zcGlfcGlvYWxpZ24gPSBkZC0+aXBhdGhfcGFsaWduOworCisJa2luZm8tPnNwaV9xcGFpciA9IElQQVRIX0tEX1FQOworCWtpbmZvLT5zcGlfcGlvc2l6ZSA9IGRkLT5pcGF0aF9pYm1heGxlbjsKKwlraW5mby0+c3BpX210dSA9IGRkLT5pcGF0aF9pYm1heGxlbjsJLyogbWF4bGVuLCBub3QgaWJtdHUgKi8KKwlraW5mby0+c3BpX3BvcnQgPSBwZC0+cG9ydF9wb3J0OworCWtpbmZvLT5zcGlfc3dfdmVyc2lvbiA9IElQQVRIX0tFUk5fU1dWRVJTSU9OOworCWtpbmZvLT5zcGlfaHdfdmVyc2lvbiA9IGRkLT5pcGF0aF9yZXZpc2lvbjsKKworCWlmIChjb3B5X3RvX3VzZXIodWJhc2UsIGtpbmZvLCBzaXplb2YoKmtpbmZvKSkpCisJCXJldCA9IC1FRkFVTFQ7CisKK2JhaWw6CisJa2ZyZWUoa2luZm8pOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfdGlkX3VwZGF0ZSAtIHVwZGF0ZSBhIHBvcnQgVElECisgKiBAcGQ6IHRoZSBwb3J0CisgKiBAdGk6IHRoZSBUSUQgaW5mb3JtYXRpb24KKyAqCisgKiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGFzIG9mIE9jdCAyMDA0IGlzIHRoYXQgdGhlIGRyaXZlciBhc3NpZ25zCisgKiB0aGUgdGlkIGFuZCByZXR1cm5zIGl0IHRvIHRoZSBjYWxsZXIuICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8KKyAqIGNhdGNoIGJ1Z3MsIGFuZCB0byByZWR1Y2Ugc2VhcmNoIHRpbWUsIHdlIGtlZXAgYSBjdXJzb3IgZm9yCisgKiBlYWNoIHBvcnQsIHdhbGtpbmcgdGhlIHNoYWRvdyB0aWQgYXJyYXkgdG8gZmluZCBvbmUgdGhhdCdzIG5vdAorICogaW4gdXNlLgorICoKKyAqIEZvciBub3csIGlmIHdlIGNhbid0IGFsbG9jYXRlIHRoZSBmdWxsIGxpc3QsIHdlIGZhaWwsIGFsdGhvdWdoCisgKiBpbiB0aGUgbG9uZyBydW4sIHdlJ2xsIGFsbG9jYXRlIGFzIG1hbnkgYXMgd2UgY2FuLCBhbmQgdGhlCisgKiBjYWxsZXIgd2lsbCBkZWFsIHdpdGggdGhhdCBieSB0cnlpbmcgdGhlIHJlbWFpbmluZyBwYWdlcyBsYXRlci4KKyAqIFRoYXQgbWVhbnMgdGhhdCB3aGVuIHdlIGZhaWwsIHdlIGhhdmUgdG8gbWFyayB0aGUgdGlkcyBhcyBub3QgaW4KKyAqIHVzZSBhZ2FpbiwgaW4gb3VyIHNoYWRvdyBjb3B5LgorICoKKyAqIEl0J3MgdXAgdG8gdGhlIGNhbGxlciB0byBmcmVlIHRoZSB0aWRzIHdoZW4gdGhleSBhcmUgZG9uZS4KKyAqIFdlJ2xsIHVubG9jayB0aGUgcGFnZXMgYXMgdGhleSBmcmVlIHRoZW0uCisgKgorICogQWxzbywgcmlnaHQgbm93IHdlIGFyZSBsb2NraW5nIG9uZSBwYWdlIGF0IGEgdGltZSwgYnV0IHNpbmNlCisgKiB0aGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgcm91dGluZSBpcyBmb3IgYSBzaW5nbGUgZ3JvdXAgb2YKKyAqIHZpcnR1YWxseSBjb250aWd1b3VzIHBhZ2VzLCB0aGF0IHNob3VsZCBjaGFuZ2UgdG8gaW1wcm92ZQorICogcGVyZm9ybWFuY2UuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfdGlkX3VwZGF0ZShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpcGF0aF90aWRfaW5mbyAqdGkpCit7CisJaW50IHJldCA9IDAsIG50aWRzOworCXUzMiB0aWQsIHBvcnR0aWQsIGNudCwgaSwgdGlkY250OworCXUxNiAqdGlkbGlzdDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwl1NjQgcGh5c2FkZHI7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKwl1NjQgX19pb21lbSAqdGlkYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRpZG1hcFs4XTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VwID0gTlVMTDsKKworCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3cpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCWNudCA9IHRpLT50aWRjbnQ7CisJaWYgKCFjbnQpIHsKKwkJaXBhdGhfZGJnKCJBZnRlciBjb3B5aW4sIHRpZGNudCAwLCB0aWRsaXN0ICVsbHhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpLT50aWRsaXN0KTsKKwkJLyoKKwkJICogU2hvdWxkIHdlIHRyZWF0IGFzIHN1Y2Nlc3M/ICBsaWtlbHkgYSBidWcKKwkJICovCisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisJdGlkY250ID0gZGQtPmlwYXRoX3JjdnRpZGNudDsKKwlpZiAoY250ID49IHRpZGNudCkgeworCQkvKiBtYWtlIHN1cmUgaXQgYWxsIGZpdHMgaW4gcG9ydF90aWRfcGdfbGlzdCAqLworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiUHJvY2VzcyB0cmllZCB0byBhbGxvY2F0ZSAldSAiCisJCQkgIlRJRHMsIG9ubHkgdHJ5aW5nIG1heCAoJXUpXG4iLCBjbnQsIHRpZGNudCk7CisJCWNudCA9IHRpZGNudDsKKwl9CisJcGFnZXAgPSAoc3RydWN0IHBhZ2UgKiopcGQtPnBvcnRfdGlkX3BnX2xpc3Q7CisJdGlkbGlzdCA9ICh1MTYgKikgKCZwYWdlcFtjbnRdKTsKKworCW1lbXNldCh0aWRtYXAsIDAsIHNpemVvZih0aWRtYXApKTsKKwl0aWQgPSBwZC0+cG9ydF90aWRjdXJzb3I7CisJLyogYmVmb3JlIGRlY3JlbWVudDsgY2hpcCBhY3R1YWwgIyAqLworCXBvcnR0aWQgPSBwZC0+cG9ydF9wb3J0ICogdGlkY250OworCW50aWRzID0gdGlkY250OworCXRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikgKCgoY2hhciBfX2lvbWVtICopIGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkJCSAgIGRkLT5pcGF0aF9yY3Z0aWRiYXNlICsKKwkJCQkgICBwb3J0dGlkICogc2l6ZW9mKCp0aWRiYXNlKSk7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJQb3J0JXUgJXUgdGlkcywgY3Vyc29yICV1LCB0aWRiYXNlICVwXG4iLAorCQkgICBwZC0+cG9ydF9wb3J0LCBjbnQsIHRpZCwgdGlkYmFzZSk7CisKKwkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgZmlyc3QgcGFnZSBpbiB0cmFuc2ZlciAqLworCXZhZGRyID0gdGktPnRpZHZhZGRyOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHZvaWQgX191c2VyICopIHZhZGRyLAorCQkgICAgICAgY250ICogUEFHRV9TSVpFKSkgeworCQlpcGF0aF9kYmcoIkZhaWwgdmFkZHIgJXAsICV1IHBhZ2VzLCAhYWNjZXNzX29rXG4iLAorCQkJICAodm9pZCAqKXZhZGRyLCBjbnQpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGRvbmU7CisJfQorCXJldCA9IGlwYXRoX2dldF91c2VyX3BhZ2VzKHZhZGRyLCBjbnQsIHBhZ2VwKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgPT0gLUVCVVNZKSB7CisJCQlpcGF0aF9kYmcoIkZhaWxlZCB0byBsb2NrIGFkZHIgJXAsICV1IHBhZ2VzICIKKwkJCQkgICIoYWxyZWFkeSBsb2NrZWQpXG4iLAorCQkJCSAgKHZvaWQgKikgdmFkZHIsIGNudCk7CisJCQkvKgorCQkJICogZm9yIG5vdywgY29udGludWUsIGFuZCBzZWUgd2hhdCBoYXBwZW5zIGJ1dCB3aXRoCisJCQkgKiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sCisJCQkgKiB1bmxlc3MgcGVyaGFwcyB0aGUgdXNlciBoYXMgbXBpbidlZCB0aGUgcGFnZXMKKwkJCSAqIHRoZW1zZWx2ZXMgKHNvbWV0aGluZyB3ZSBuZWVkIHRvIHRlc3QpCisJCQkgKi8KKwkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJCSAiRmFpbGVkIHRvIGxvY2sgYWRkciAlcCwgJXUgcGFnZXM6ICIKKwkJCQkgImVycm5vICVkXG4iLCAodm9pZCAqKSB2YWRkciwgY250LCAtcmV0KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHZhZGRyICs9IFBBR0VfU0laRSkgeworCQlmb3IgKDsgbnRpZHMtLTsgdGlkKyspIHsKKwkJCWlmICh0aWQgPT0gdGlkY250KQorCQkJCXRpZCA9IDA7CisJCQlpZiAoIWRkLT5pcGF0aF9wYWdlc2hhZG93W3BvcnR0aWQgKyB0aWRdKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChudGlkcyA8IDApIHsKKwkJCS8qCisJCQkgKiBvb3BzLCB3cmFwcGVkIGFsbCB0aGUgd2F5IHRocm91Z2ggdGhlaXIgVElEcywKKwkJCSAqIGFuZCBkaWRuJ3QgaGF2ZSBlbm91Z2ggZnJlZTsgc2VlIGNvbW1lbnRzIGF0CisJCQkgKiBzdGFydCBvZiByb3V0aW5lCisJCQkgKi8KKwkJCWlwYXRoX2RiZygiTm90IGVub3VnaCBmcmVlIFRJRHMgZm9yICV1IHBhZ2VzICIKKwkJCQkgICIoaW5kZXggJWQpLCBmYWlsaW5nXG4iLCBjbnQsIGkpOworCQkJaS0tOwkvKiBsYXN0IHRpZGxpc3RbaV0gbm90IGZpbGxlZCBpbiAqLworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCXRpZGxpc3RbaV0gPSB0aWQ7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVwZGF0aW5nIGlkeCAldSB0byBUSUQgJXUsICIKKwkJCSAgICJ2YWRkciAlbHhcbiIsIGksIHRpZCwgdmFkZHIpOworCQkvKiB3ZSAia25vdyIgc3lzdGVtIHBhZ2VzIGFuZCBUSUQgcGFnZXMgYXJlIHNhbWUgc2l6ZSAqLworCQlkZC0+aXBhdGhfcGFnZXNoYWRvd1twb3J0dGlkICsgdGlkXSA9IHBhZ2VwW2ldOworCQkvKgorCQkgKiBkb24ndCBuZWVkIGF0b21pYyBvciBpdCdzIG92ZXJoZWFkCisJCSAqLworCQlfX3NldF9iaXQodGlkLCB0aWRtYXApOworCQlwaHlzYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlcFtpXSk7CisJCWlwYXRoX3N0YXRzLnNwc19wYWdlbG9ja3MrKzsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLAorCQkJICAgIlRJRCAldSwgdmFkZHIgJWx4LCBwaHlzYWRkciAlbGx4IHBncCAlcFxuIiwKKwkJCSAgIHRpZCwgdmFkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBoeXNhZGRyLAorCQkJICAgcGFnZXBbaV0pOworCQlkZC0+aXBhdGhfZl9wdXRfdGlkKGRkLCAmdGlkYmFzZVt0aWRdLCAxLCBwaHlzYWRkcik7CisJCS8qCisJCSAqIGRvbid0IGNoZWNrIHRoaXMgdGlkIGluIGlwYXRoX3BvcnRzaGFkb3csIHNpbmNlIHdlCisJCSAqIGp1c3QgZmlsbGVkIGl0IGluOyBzdGFydCB3aXRoIHRoZSBuZXh0IG9uZS4KKwkJICovCisJCXRpZCsrOworCX0KKworCWlmIChyZXQpIHsKKwkJdTMyIGxpbWl0OworCWNsZWFudXA6CisJCS8qIGp1bXAgaGVyZSBpZiBjb3B5IG91dCBvZiB1cGRhdGVkIGluZm8gZmFpbGVkLi4uICovCisJCWlwYXRoX2RiZygiQWZ0ZXIgZmFpbHVyZSAocmV0PSVkKSwgdW5kbyAlZCBvZiAlZCBlbnRyaWVzXG4iLAorCQkJICAtcmV0LCBpLCBjbnQpOworCQkvKiBzYW1lIGNvZGUgdGhhdCdzIGluIGlwYXRoX2ZyZWVfdGlkKCkgKi8KKwkJbGltaXQgPSBzaXplb2YodGlkbWFwKSAqIEJJVFNfUEVSX0JZVEU7CisJCWlmIChsaW1pdCA+IHRpZGNudCkKKwkJCS8qIGp1c3QgaW4gY2FzZSBzaXplIGNoYW5nZXMgaW4gZnV0dXJlICovCisJCQlsaW1pdCA9IHRpZGNudDsKKwkJdGlkID0gZmluZF9maXJzdF9iaXQoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKil0aWRtYXAsIGxpbWl0KTsKKwkJZm9yICg7IHRpZCA8IGxpbWl0OyB0aWQrKykgeworCQkJaWYgKCF0ZXN0X2JpdCh0aWQsIHRpZG1hcCkpCisJCQkJY29udGludWU7CisJCQlpZiAoZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0pIHsKKwkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJGcmVlaW5nIFRJRCAldVxuIiwKKwkJCQkJICAgdGlkKTsKKwkJCQlkZC0+aXBhdGhfZl9wdXRfdGlkKGRkLCAmdGlkYmFzZVt0aWRdLCAxLAorCQkJCQkJICAgIGRkLT5pcGF0aF90aWRpbnZhbGlkKTsKKwkJCQlkZC0+aXBhdGhfcGFnZXNoYWRvd1twb3J0dGlkICsgdGlkXSA9IE5VTEw7CisJCQkJaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKys7CisJCQl9CisJCX0KKwkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKHBhZ2VwLCBjbnQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENvcHkgdGhlIHVwZGF0ZWQgYXJyYXksIHdpdGggaXBhdGhfdGlkJ3MgZmlsbGVkIGluLCBiYWNrCisJCSAqIHRvIHVzZXIuICBTaW5jZSB3ZSBkaWQgdGhlIGNvcHkgaW4gYWxyZWFkeSwgdGhpcyAic2hvdWxkCisJCSAqIG5ldmVyIGZhaWwiIElmIGl0IGRvZXMsIHdlIGhhdmUgdG8gY2xlYW4gdXAuLi4KKwkJICovCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopCisJCQkJICh1bnNpZ25lZCBsb25nKSB0aS0+dGlkbGlzdCwKKwkJCQkgdGlkbGlzdCwgY250ICogc2l6ZW9mKCp0aWRsaXN0KSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIHRpLT50aWRtYXAsCisJCQkJIHRpZG1hcCwgc2l6ZW9mIHRpZG1hcCkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHRpZCA9PSB0aWRjbnQpCisJCQl0aWQgPSAwOworCQlwZC0+cG9ydF90aWRjdXJzb3IgPSB0aWQ7CisJfQorCitkb25lOgorCWlmIChyZXQpCisJCWlwYXRoX2RiZygiRmFpbGVkIHRvIG1hcCAldSBUSUQgcGFnZXMsIGZhaWxpbmcgd2l0aCAlZFxuIiwKKwkJCSAgdGktPnRpZGNudCwgLXJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF90aWRfZnJlZSAtIGZyZWUgYSBwb3J0IFRJRAorICogQHBkOiB0aGUgcG9ydAorICogQHRpOiB0aGUgVElEIGluZm8KKyAqCisgKiByaWdodCBub3cgd2UgYXJlIHVubG9ja2luZyBvbmUgcGFnZSBhdCBhIHRpbWUsIGJ1dCBzaW5jZQorICogdGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIHJvdXRpbmUgaXMgZm9yIGEgc2luZ2xlIGdyb3VwIG9mCisgKiB2aXJ0dWFsbHkgY29udGlndW91cyBwYWdlcywgdGhhdCBzaG91bGQgY2hhbmdlIHRvIGltcHJvdmUKKyAqIHBlcmZvcm1hbmNlLiAgV2UgY2hlY2sgdGhhdCB0aGUgVElEIGlzIGluIHJhbmdlIGZvciB0aGlzIHBvcnQKKyAqIGJ1dCBvdGhlcndpc2UgZG9uJ3QgY2hlY2sgdmFsaWRpdHk7IGlmIHVzZXIgaGFzIGFuIGVycm9yIGFuZAorICogZnJlZXMgdGhlIHdyb25nIHRpZCwgaXQncyBvbmx5IHRoZWlyIG93biBkYXRhIHRoYXQgY2FuIHRoZXJlYnkKKyAqIGJlIGNvcnJ1cHRlZC4gIFdlIGRvIGNoZWNrIHRoYXQgdGhlIFRJRCB3YXMgaW4gdXNlLCBmb3Igc2FuaXR5CisgKiBXZSBhbHdheXMgdXNlIG91ciBpZGVhIG9mIHRoZSBzYXZlZCBhZGRyZXNzLCBub3QgdGhlIGFkZHJlc3MgdGhhdAorICogdGhleSBwYXNzIGluIHRvIHVzLgorICovCisKK3N0YXRpYyBpbnQgaXBhdGhfdGlkX2ZyZWUoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwKKwkJCSAgY29uc3Qgc3RydWN0IGlwYXRoX3RpZF9pbmZvICp0aSkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdGlkLCBwb3J0dGlkLCBjbnQsIGxpbWl0LCB0aWRjbnQ7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CisJdTY0IF9faW9tZW0gKnRpZGJhc2U7CisJdW5zaWduZWQgbG9uZyB0aWRtYXBbOF07CisKKwlpZiAoIWRkLT5pcGF0aF9wYWdlc2hhZG93KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIodGlkbWFwLCAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl0aS0+dGlkbWFwLAorCQkJICAgc2l6ZW9mIHRpZG1hcCkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKworCXBvcnR0aWQgPSBwZC0+cG9ydF9wb3J0ICogZGQtPmlwYXRoX3JjdnRpZGNudDsKKwl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopICgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkJCSAgIGRkLT5pcGF0aF9yY3Z0aWRiYXNlICsKKwkJCQkgICBwb3J0dGlkICogc2l6ZW9mKCp0aWRiYXNlKSk7CisKKwl0aWRjbnQgPSBkZC0+aXBhdGhfcmN2dGlkY250OworCWxpbWl0ID0gc2l6ZW9mKHRpZG1hcCkgKiBCSVRTX1BFUl9CWVRFOworCWlmIChsaW1pdCA+IHRpZGNudCkKKwkJLyoganVzdCBpbiBjYXNlIHNpemUgY2hhbmdlcyBpbiBmdXR1cmUgKi8KKwkJbGltaXQgPSB0aWRjbnQ7CisJdGlkID0gZmluZF9maXJzdF9iaXQodGlkbWFwLCBsaW1pdCk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUG9ydCV1IGZyZWUgJXUgdGlkczsgZmlyc3QgYml0IChtYXg9JWQpICIKKwkJICAgInNldCBpcyAlZCwgcG9ydHRpZCAldVxuIiwgcGQtPnBvcnRfcG9ydCwgdGktPnRpZGNudCwKKwkJICAgbGltaXQsIHRpZCwgcG9ydHRpZCk7CisJZm9yIChjbnQgPSAwOyB0aWQgPCBsaW1pdDsgdGlkKyspIHsKKwkJLyoKKwkJICogc21hbGwgb3B0aW1pemF0aW9uOyBpZiB3ZSBkZXRlY3QgYSBydW4gb2YgMyBvciBzbyB3aXRob3V0CisJCSAqIGFueSBzZXQsIHVzZSBmaW5kX2ZpcnN0X2JpdCBhZ2Fpbi4gIFRoYXQncyBtYWlubHkgdG8KKwkJICogYWNjZWxlcmF0ZSB0aGUgY2FzZSB3aGVyZSB3ZSB3cmFwcGVkLCBzbyB3ZSBoYXZlIHNvbWUgYXQKKwkJICogdGhlIGJlZ2lubmluZywgYW5kIHNvbWUgYXQgdGhlIGVuZCwgYW5kIGEgYmlnIGdhcAorCQkgKiBpbiB0aGUgbWlkZGxlLgorCQkgKi8KKwkJaWYgKCF0ZXN0X2JpdCh0aWQsIHRpZG1hcCkpCisJCQljb250aW51ZTsKKwkJY250Kys7CisJCWlmIChkZC0+aXBhdGhfcGFnZXNoYWRvd1twb3J0dGlkICsgdGlkXSkgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUElEICV1IGZyZWVpbmcgVElEICV1XG4iLAorCQkJCSAgIHBkLT5wb3J0X3BpZCwgdGlkKTsKKwkJCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsICZ0aWRiYXNlW3RpZF0sIDEsCisJCQkJCSAgICBkZC0+aXBhdGhfdGlkaW52YWxpZCk7CisJCQlpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMoCisJCQkJJmRkLT5pcGF0aF9wYWdlc2hhZG93W3BvcnR0aWQgKyB0aWRdLCAxKTsKKwkJCWRkLT5pcGF0aF9wYWdlc2hhZG93W3BvcnR0aWQgKyB0aWRdID0gTlVMTDsKKwkJCWlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2NrcysrOworCQl9IGVsc2UKKwkJCWlwYXRoX2RiZygiVW51c2VkIHRpZCAldSwgaWdub3JpbmdcbiIsIHRpZCk7CisJfQorCWlmIChjbnQgIT0gdGktPnRpZGNudCkKKwkJaXBhdGhfZGJnKCJwYXNzZWQgaW4gdGlkY250ICVkLCBvbmx5ICVkIGJpdHMgc2V0IGluIG1hcFxuIiwKKwkJCSAgdGktPnRpZGNudCwgY250KTsKK2RvbmU6CisJaWYgKHJldCkKKwkJaXBhdGhfZGJnKCJGYWlsZWQgdG8gdW5tYXAgJXUgVElEIHBhZ2VzLCBmYWlsaW5nIHdpdGggJWRcbiIsCisJCQkgIHRpLT50aWRjbnQsIC1yZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfc2V0X3BhcnRfa2V5IC0gc2V0IGEgcGFydGl0aW9uIGtleQorICogQHBkOiB0aGUgcG9ydAorICogQGtleTogdGhlIGtleQorICoKKyAqIFdlIGNhbiBoYXZlIHVwIHRvIDQgYWN0aXZlIGF0IGEgdGltZSAob3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwgd2hpY2ggaXMKKyAqIGFsd2F5cyBhbGxvd2VkKS4gIFRoaXMgaXMgc29tZXdoYXQgdHJpY2t5LCBzaW5jZSBtdWx0aXBsZSBwb3J0cyBtYXkgc2V0CisgKiB0aGUgc2FtZSBrZXksIHNvIHdlIHJlZmVyZW5jZSBjb3VudCB0aGVtLCBhbmQgY2xlYW4gdXAgYXQgZXhpdC4gIEFsbCA0CisgKiBwYXJ0aXRpb24ga2V5cyBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgaW5maW5pcGF0aCByZWdpc3Rlci4gIEl0J3MgYW4KKyAqIGVycm9yIGZvciBhIHByb2Nlc3MgdG8gc2V0IHRoZSBzYW1lIHBrZXkgbXVsdGlwbGUgdGltZXMuICBXZSBwcm92aWRlIG5vCisgKiBtZWNoYW5pc20gdG8gZGUtYWxsb2NhdGUgYSBwa2V5IGF0IHRoaXMgdGltZSwgd2UgbWF5IGV2ZW50dWFsbHkgbmVlZCB0bworICogZG8gdGhhdC4gIEkndmUgdXNlZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBubyBsb2NraW5nLCBhbmQgb25seSBtYWtlCisgKiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggd2hhdCdzIGF2YWlsYWJsZS4gIFRoaXMgc2hvdWxkIGJlIG1vcmUgdGhhbgorICogYWRlcXVhdGUgZm9yIHNvbWUgdGltZS4gSSdsbCB0aGluayBhYm91dCBzcGlubG9ja3Mgb3IgdGhlIGxpa2UgaWYgYW5kIGFzCisgKiBpdCdzIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIGludCBpcGF0aF9zZXRfcGFydF9rZXkoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwgdTE2IGtleSkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwlpbnQgaSwgYW55ID0gMCwgcGlkeCA9IC0xOworCXUxNiBsa2V5ID0ga2V5ICYgMHg3RkZGOworCWludCByZXQ7CisKKwlpZiAobGtleSA9PSAoSVBTX0RFRkFVTFRfUF9LRVkgJiAweDdGRkYpKSB7CisJCS8qIG5vdGhpbmcgdG8gZG87IHRoaXMga2V5IGFsd2F5cyB2YWxpZCAqLworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAicCV1IHRyeSB0byBzZXQgcGtleSAlaHgsIGN1cnJlbnQga2V5cyAiCisJCSAgICIlaHg6JXggJWh4OiV4ICVoeDoleCAlaHg6JXhcbiIsCisJCSAgIHBkLT5wb3J0X3BvcnQsIGtleSwgZGQtPmlwYXRoX3BrZXlzWzBdLAorCQkgICBhdG9taWNfcmVhZCgmZGQtPmlwYXRoX3BrZXlyZWZzWzBdKSwgZGQtPmlwYXRoX3BrZXlzWzFdLAorCQkgICBhdG9taWNfcmVhZCgmZGQtPmlwYXRoX3BrZXlyZWZzWzFdKSwgZGQtPmlwYXRoX3BrZXlzWzJdLAorCQkgICBhdG9taWNfcmVhZCgmZGQtPmlwYXRoX3BrZXlyZWZzWzJdKSwgZGQtPmlwYXRoX3BrZXlzWzNdLAorCQkgICBhdG9taWNfcmVhZCgmZGQtPmlwYXRoX3BrZXlyZWZzWzNdKSk7CisKKwlpZiAoIWxrZXkpIHsKKwkJaXBhdGhfY2RiZyhQUk9DLCAicCV1IHRyaWVzIHRvIHNldCBrZXkgMCwgbm90IGFsbG93ZWRcbiIsCisJCQkgICBwZC0+cG9ydF9wb3J0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogU2V0IHRoZSBmdWxsIG1lbWJlcnNoaXAgYml0LCBiZWNhdXNlIGl0IGhhcyB0byBiZQorCSAqIHNldCBpbiB0aGUgcmVnaXN0ZXIgb3IgdGhlIHBhY2tldCwgYW5kIGl0IHNlZW1zCisJICogY2xlYW5lciB0byBzZXQgaW4gdGhlIHJlZ2lzdGVyIHRoYW4gdG8gZm9yY2UgYWxsCisJICogY2FsbGVycyB0byBzZXQgaXQuIChzZWUgYnVnIDQzMzEpCisJICovCisJa2V5IHw9IDB4ODAwMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkLT5wb3J0X3BrZXlzKTsgaSsrKSB7CisJCWlmICghcGQtPnBvcnRfcGtleXNbaV0gJiYgcGlkeCA9PSAtMSkKKwkJCXBpZHggPSBpOworCQlpZiAocGQtPnBvcnRfcGtleXNbaV0gPT0ga2V5KSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwJXUgdHJpZXMgdG8gc2V0IHNhbWUgcGtleSAiCisJCQkJICAgIigleCkgbW9yZSB0aGFuIG9uY2VcbiIsCisJCQkJICAgcGQtPnBvcnRfcG9ydCwga2V5KTsKKwkJCXJldCA9IC1FRVhJU1Q7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJaWYgKHBpZHggPT0gLTEpIHsKKwkJaXBhdGhfZGJnKCJBbGwgcGtleXMgZm9yIHBvcnQgJXUgYWxyZWFkeSBpbiB1c2UsICIKKwkJCSAgImNhbid0IHNldCAleFxuIiwgcGQtPnBvcnRfcG9ydCwga2V5KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGJhaWw7CisJfQorCWZvciAoYW55ID0gaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGkrKykgeworCQlpZiAoIWRkLT5pcGF0aF9wa2V5c1tpXSkgeworCQkJYW55Kys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZGQtPmlwYXRoX3BrZXlzW2ldID09IGtleSkgeworCQkJYXRvbWljX3QgKnBrcmVmcyA9ICZkZC0+aXBhdGhfcGtleXJlZnNbaV07CisKKwkJCWlmIChhdG9taWNfaW5jX3JldHVybihwa3JlZnMpID4gMSkgeworCQkJCXBkLT5wb3J0X3BrZXlzW3BpZHhdID0ga2V5OworCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInAldSBzZXQga2V5ICV4ICIKKwkJCQkJICAgIm1hdGNoZXMgIyVkLCBjb3VudCBub3cgJWRcbiIsCisJCQkJCSAgIHBkLT5wb3J0X3BvcnQsIGtleSwgaSwKKwkJCQkJICAgYXRvbWljX3JlYWQocGtyZWZzKSk7CisJCQkJcmV0ID0gMDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogbG9zdCByYWNlLCBkZWNyZW1lbnQgY291bnQsIGNhdGNoIGJlbG93CisJCQkJICovCisJCQkJYXRvbWljX2RlYyhwa3JlZnMpOworCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkxvc3QgcmFjZSwgY291bnQgd2FzICIKKwkJCQkJICAgIjAsIGFmdGVyIGRlYywgaXQncyAlZFxuIiwKKwkJCQkJICAgYXRvbWljX3JlYWQocGtyZWZzKSk7CisJCQkJYW55Kys7CisJCQl9CisJCX0KKwkJaWYgKChkZC0+aXBhdGhfcGtleXNbaV0gJiAweDdGRkYpID09IGxrZXkpIHsKKwkJCS8qCisJCQkgKiBJdCBtYWtlcyBubyBzZW5zZSB0byBoYXZlIGJvdGggdGhlIGxpbWl0ZWQgYW5kCisJCQkgKiBmdWxsIG1lbWJlcnNoaXAgUEtFWSBzZXQgYXQgdGhlIHNhbWUgdGltZSBzaW5jZQorCQkJICogdGhlIHVubGltaXRlZCBvbmUgd2lsbCBkaXNhYmxlIHRoZSBsaW1pdGVkIG9uZS4KKwkJCSAqLworCQkJcmV0ID0gLUVFWElTVDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlpZiAoIWFueSkgeworCQlpcGF0aF9kYmcoInBvcnQgJXUsIGFsbCBwa2V5cyBhbHJlYWR5IGluIHVzZSwgIgorCQkJICAiY2FuJ3Qgc2V0ICV4XG4iLCBwZC0+cG9ydF9wb3J0LCBrZXkpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gYmFpbDsKKwl9CisJZm9yIChhbnkgPSBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BrZXlzKTsgaSsrKSB7CisJCWlmICghZGQtPmlwYXRoX3BrZXlzW2ldICYmCisJCSAgICBhdG9taWNfaW5jX3JldHVybigmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKSA9PSAxKSB7CisJCQl1NjQgcGtleTsKKworCQkJLyogZm9yIGlwYXRoc3RhdHMsIGV0Yy4gKi8KKwkJCWlwYXRoX3N0YXRzLnNwc19wa2V5c1tpXSA9IGxrZXk7CisJCQlwZC0+cG9ydF9wa2V5c1twaWR4XSA9IGRkLT5pcGF0aF9wa2V5c1tpXSA9IGtleTsKKwkJCXBrZXkgPQorCQkJCSh1NjQpIGRkLT5pcGF0aF9wa2V5c1swXSB8CisJCQkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1sxXSA8PCAxNikgfAorCQkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMl0gPDwgMzIpIHwKKwkJCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzNdIDw8IDQ4KTsKKwkJCWlwYXRoX2NkYmcoUFJPQywgInAldSBzZXQga2V5ICV4IGluICMlZCwgIgorCQkJCSAgICJwb3J0aWR4ICVkLCBuZXcgcGtleSByZWcgJWxseFxuIiwKKwkJCQkgICBwZC0+cG9ydF9wb3J0LCBrZXksIGksIHBpZHgsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGtleSk7CisJCQlpcGF0aF93cml0ZV9rcmVnKAorCQkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3BhcnRpdGlvbmtleSwgcGtleSk7CisKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJaXBhdGhfZGJnKCJwb3J0ICV1LCBhbGwgcGtleXMgYWxyZWFkeSBpbiB1c2UgMm5kIHBhc3MsICIKKwkJICAiY2FuJ3Qgc2V0ICV4XG4iLCBwZC0+cG9ydF9wb3J0LCBrZXkpOworCXJldCA9IC1FQlVTWTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX21hbmFnZV9yY3ZxIC0gbWFuYWdlIGEgcG9ydCdzIHJlY2VpdmUgcXVldWUKKyAqIEBwZDogdGhlIHBvcnQKKyAqIEBzdGFydF9zdG9wOiBhY3Rpb24gdG8gY2Fycnkgb3V0CisgKgorICogc3RhcnRfc3RvcCA9PSAwIGRpc2FibGVzIHJlY2VpdmUgb24gdGhlIHBvcnQsIGZvciB1c2UgaW4gcXVldWUKKyAqIG92ZXJmbG93IGNvbmRpdGlvbnMuICBzdGFydF9zdG9wPT0xIHJlLWVuYWJsZXMsIHRvIGJlIHVzZWQgdG8KKyAqIHJlLWluaXQgdGhlIHNvZnR3YXJlIGNvcHkgb2YgdGhlIGhlYWQgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBpcGF0aF9tYW5hZ2VfcmN2cShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCBpbnQgc3RhcnRfc3RvcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwl1NjQgdHZhbDsKKworCWlwYXRoX2NkYmcoUFJPQywgIiVzYWJsaW5nIHJjdiBmb3IgdW5pdCAldSBwb3J0ICV1XG4iLAorCQkgICBzdGFydF9zdG9wID8gImVuIiA6ICJkaXMiLCBkZC0+aXBhdGhfdW5pdCwKKwkJICAgcGQtPnBvcnRfcG9ydCk7CisJLyogYXRvbWljYWxseSBjbGVhciByZWNlaXZlIGVuYWJsZSBwb3J0LiAqLworCWlmIChzdGFydF9zdG9wKSB7CisJCS8qCisJCSAqIE9uIGVuYWJsZSwgZm9yY2UgaW4tbWVtb3J5IGNvcHkgb2YgdGhlIHRhaWwgcmVnaXN0ZXIgdG8KKwkJICogMCwgc28gdGhhdCBwcm90b2NvbCBjb2RlIGRvZXNuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorCQkgKiB3aGV0aGVyIG9yIG5vdCB0aGUgY2hpcCBoYXMgeWV0IHVwZGF0ZWQgdGhlIGluLW1lbW9yeQorCQkgKiBjb3B5IG9yIG5vdCBvbiByZXR1cm4gZnJvbSB0aGUgc3lzdGVtIGNhbGwuIFRoZSBjaGlwCisJCSAqIGFsd2F5cyByZXNldHMgaXQncyB0YWlsIHJlZ2lzdGVyIGJhY2sgdG8gMCBvbiBhCisJCSAqIHRyYW5zaXRpb24gZnJvbSBkaXNhYmxlZCB0byBlbmFibGVkLiAgVGhpcyBjb3VsZCBjYXVzZSBhCisJCSAqIHByb2JsZW0gaWYgc29mdHdhcmUgd2FzIGJyb2tlbiwgYW5kIGRpZCB0aGUgZW5hYmxlIHcvbworCQkgKiB0aGUgZGlzYWJsZSwgYnV0IGV2ZW50dWFsbHkgdGhlIGluLW1lbW9yeSBjb3B5IHdpbGwgYmUKKwkJICogdXBkYXRlZCBhbmQgY29ycmVjdCBpdHNlbGYsIGV2ZW4gaW4gdGhlIGZhY2Ugb2Ygc29mdHdhcmUKKwkJICogYnVncy4KKwkJICovCisJCSpwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IDA7CisJCXNldF9iaXQoSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgKyBwZC0+cG9ydF9wb3J0LAorCQkJJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKwl9IGVsc2UKKwkJY2xlYXJfYml0KElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUICsgcGQtPnBvcnRfcG9ydCwKKwkJCSAgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCisJCQkgZGQtPmlwYXRoX3JjdmN0cmwpOworCS8qIG5vdyBiZSBzdXJlIGNoaXAgc2F3IGl0IGJlZm9yZSB3ZSByZXR1cm4gKi8KKwl0dmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJaWYgKHN0YXJ0X3N0b3ApIHsKKwkJLyoKKwkJICogQW5kIHRyeSB0byBiZSBzdXJlIHRoYXQgdGFpbCByZWcgdXBkYXRlIGhhcyBoYXBwZW5lZCB0b28uCisJCSAqIFRoaXMgc2hvdWxkIGluIHRoZW9yeSBpbnRlcmxvY2sgd2l0aCB0aGUgUlhFIGNoYW5nZXMgdG8KKwkJICogdGhlIHRhaWwgcmVnaXN0ZXIuICBEb24ndCBhc3NpZ24gaXQgdG8gdGhlIHRhaWwgcmVnaXN0ZXIKKwkJICogaW4gbWVtb3J5IGNvcHksIHNpbmNlIHdlIGNvdWxkIG92ZXJ3cml0ZSBhbiB1cGRhdGUgYnkgdGhlCisJCSAqIGNoaXAgaWYgd2UgZGlkLgorCQkgKi8KKwkJdHZhbCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJ0YWlsLCBwZC0+cG9ydF9wb3J0KTsKKwl9CisJLyogYWx3YXlzOyBuZXcgaGVhZCBzaG91bGQgYmUgZXF1YWwgdG8gbmV3IHRhaWw7IHNlZSBhYm92ZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9jbGVhbl9wYXJ0X2tleShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLAorCQkJCSBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IGksIGosIHBjaGFuZ2VkID0gMDsKKwl1NjQgb2xkcGtleTsKKworCS8qIGZvciBkZWJ1Z2dpbmcgb25seSAqLworCW9sZHBrZXkgPSAodTY0KSBkZC0+aXBhdGhfcGtleXNbMF0gfAorCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzFdIDw8IDE2KSB8CisJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMl0gPDwgMzIpIHwKKwkJKCh1NjQpIGRkLT5pcGF0aF9wa2V5c1szXSA8PCA0OCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZC0+cG9ydF9wa2V5cyk7IGkrKykgeworCQlpZiAoIXBkLT5wb3J0X3BrZXlzW2ldKQorCQkJY29udGludWU7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImxvb2sgZm9yIGtleVslZF0gJWh4IGluIHBrZXlzXG4iLCBpLAorCQkJICAgcGQtPnBvcnRfcGtleXNbaV0pOworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShkZC0+aXBhdGhfcGtleXMpOyBqKyspIHsKKwkJCS8qIGNoZWNrIGZvciBtYXRjaCBpbmRlcGVuZGVudCBvZiB0aGUgZ2xvYmFsIGJpdCAqLworCQkJaWYgKChkZC0+aXBhdGhfcGtleXNbal0gJiAweDdmZmYpICE9CisJCQkgICAgKHBkLT5wb3J0X3BrZXlzW2ldICYgMHg3ZmZmKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZC0+aXBhdGhfcGtleXJlZnNbal0pKSB7CisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicCV1IGNsZWFyIGtleSAiCisJCQkJCSAgICIleCBtYXRjaGVzICMlZFxuIiwKKwkJCQkJICAgcGQtPnBvcnRfcG9ydCwKKwkJCQkJICAgcGQtPnBvcnRfcGtleXNbaV0sIGopOworCQkJCWlwYXRoX3N0YXRzLnNwc19wa2V5c1tqXSA9CisJCQkJCWRkLT5pcGF0aF9wa2V5c1tqXSA9IDA7CisJCQkJcGNoYW5nZWQrKzsKKwkJCX0KKwkJCWVsc2UgaXBhdGhfY2RiZygKKwkJCQlWRVJCT1NFLCAicCV1IGtleSAleCBtYXRjaGVzICMlZCwgIgorCQkJCSJidXQgcmVmIHN0aWxsICVkXG4iLCBwZC0+cG9ydF9wb3J0LAorCQkJCXBkLT5wb3J0X3BrZXlzW2ldLCBqLAorCQkJCWF0b21pY19yZWFkKCZkZC0+aXBhdGhfcGtleXJlZnNbal0pKTsKKwkJCWJyZWFrOworCQl9CisJCXBkLT5wb3J0X3BrZXlzW2ldID0gMDsKKwl9CisJaWYgKHBjaGFuZ2VkKSB7CisJCXU2NCBwa2V5ID0gKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzBdIHwKKwkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMV0gPDwgMTYpIHwKKwkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMl0gPDwgMzIpIHwKKwkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbM10gPDwgNDgpOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwJXUgb2xkIHBrZXkgcmVnICVsbHgsICIKKwkJCSAgICJuZXcgcGtleSByZWcgJWxseFxuIiwgcGQtPnBvcnRfcG9ydCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG9sZHBrZXksCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwa2V5KTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wYXJ0aXRpb25rZXksCisJCQkJIHBrZXkpOworCX0KK30KKworLyoqCisgKiBpcGF0aF9jcmVhdGVfdXNlcl9lZ3IgLSBhbGxvY2F0ZSBlYWdlciBUSUQgYnVmZmVycworICogQHBkOiB0aGUgcG9ydCB0byBhbGxvY2F0ZSBUSUQgYnVmZmVycyBmb3IKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgbm93IHF1aXRlIGRpZmZlcmVudCBmb3IgdXNlciBhbmQga2VybmVsLCBiZWNhdXNlCisgKiB0aGUga2VybmVsIHVzZXMgc2tiJ3MsIGZvciB0aGUgYWNjZWxlcmF0ZWQgbmV0d29yayBwZXJmb3JtYW5jZQorICogVGhpcyBpcyB0aGUgdXNlciBwb3J0IHZlcnNpb24KKyAqCisgKiBBbGxvY2F0ZSB0aGUgZWFnZXIgVElEIGJ1ZmZlcnMgYW5kIHByb2dyYW0gdGhlbSBpbnRvIGluZmluaXBhdGgKKyAqIFRoZXkgYXJlIG5vIGxvbmdlciBjb21wbGV0ZWx5IGNvbnRpZ3VvdXMsIHdlIGRvIG11bHRpcGxlIGFsbG9jYXRpb24KKyAqIGNhbGxzLgorICovCitzdGF0aWMgaW50IGlwYXRoX2NyZWF0ZV91c2VyX2VncihzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXVuc2lnbmVkIGUsIGVncmNudCwgYWxsb2NlZCwgZWdycGVyY2h1bmssIGNodW5rLCBlZ3JzaXplLCBlZ3JvZmY7CisJc2l6ZV90IHNpemU7CisJaW50IHJldDsKKworCWVncmNudCA9IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7CisJLyogVElEIG51bWJlciBvZmZzZXQgZm9yIHRoaXMgcG9ydCAqLworCWVncm9mZiA9IHBkLT5wb3J0X3BvcnQgKiBlZ3JjbnQ7CisJZWdyc2l6ZSA9IGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkFsbG9jYXRpbmcgJWQgZWdyIGJ1ZmZlcnMsIGF0IGVncnRpZCAiCisJCSAgICJvZmZzZXQgJXgsIGVncnNpemUgJXVcbiIsIGVncmNudCwgZWdyb2ZmLCBlZ3JzaXplKTsKKworCS8qCisJICogdG8gYXZvaWQgd2FzdGluZyBhIGxvdCBvZiBtZW1vcnksIHdlIGFsbG9jYXRlIDMyS0IgY2h1bmtzIG9mCisJICogcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSwgYWR2YW5jZSB0aHJvdWdoIGl0IHVudGlsIHVzZWQgdXAKKwkgKiBhbmQgdGhlbiBhbGxvY2F0ZSBtb3JlLiAgT2YgY291cnNlLCB3ZSBuZWVkIG1lbW9yeSB0byBzdG9yZSB0aG9zZQorCSAqIGV4dHJhIHBvaW50ZXJzLCBub3cuICBTdGFydGVkIG91dCB3aXRoIDI1NktCLCBidXQgdW5kZXIgaGVhdnkKKwkgKiBtZW1vcnkgcHJlc3N1cmUgKGNyZWF0aW5nIGxhcmdlIGZpbGVzIGFuZCB0aGVuIGNvcHlpbmcgdGhlbSBvdmVyCisJICogTkZTIHdoaWxlIGRvaW5nIGxvdHMgb2YgTVBJIGpvYnMpLCB3ZSBoaXQgc29tZSBhbGxvY2F0aW9uCisJICogZmFpbHVyZXMsIGV2ZW4gdGhvdWdoIHdlIGNhbiBzbGVlcC4uLiAgKDIuNi4xMCkgU3RpbGwgZ2V0CisJICogZmFpbHVyZXMgYXQgNjRLLiAgMzJLIGlzIHRoZSBsb3dlc3Qgd2UgY2FuIGdvIHdpdGhvdXQgd2FpdGluZworCSAqIG1vcmUgbWVtb3J5IGFnYWluLiAgSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGNvYWxlc2NpbmcgaW4KKwkgKiBmcmVlX3BhZ2VzLCBldGMuIHN0aWxsIGhhcyBpc3N1ZXMgKGFzIGl0IGhhcyBoYWQgcHJldmlvdXNseQorCSAqIGR1cmluZyAyLjYueCBkZXZlbG9wbWVudCkuCisJICovCisJc2l6ZSA9IDB4ODAwMDsKKwlhbGxvY2VkID0gQUxJR04oZWdyc2l6ZSAqIGVncmNudCwgc2l6ZSk7CisJZWdycGVyY2h1bmsgPSBzaXplIC8gZWdyc2l6ZTsKKwljaHVuayA9IChlZ3JjbnQgKyBlZ3JwZXJjaHVuayAtIDEpIC8gZWdycGVyY2h1bms7CisJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyA9IGNodW5rOworCXBkLT5wb3J0X3JjdmVncmJ1ZnNfcGVyY2h1bmsgPSBlZ3JwZXJjaHVuazsKKwlwZC0+cG9ydF9yY3ZlZ3JidWZfc2l6ZSA9IHNpemU7CisJcGQtPnBvcnRfcmN2ZWdyYnVmID0gdm1hbGxvYyhjaHVuayAqIHNpemVvZihwZC0+cG9ydF9yY3ZlZ3JidWZbMF0pKTsKKwlpZiAoIXBkLT5wb3J0X3JjdmVncmJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzID0KKwkJdm1hbGxvYyhjaHVuayAqIHNpemVvZihwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1swXSkpOworCWlmICghcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsX3JjdmVncmJ1ZjsKKwl9CisJZm9yIChlID0gMDsgZSA8IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3M7IGUrKykgeworCQkvKgorCQkgKiBHRlBfVVNFUiwgYnV0IHdpdGhvdXQgR0ZQX0ZTLCBzbyBidWZmZXIgY2FjaGUgY2FuIGJlCisJCSAqIGNvYWxlc2NlZCAod2UgaG9wZSk7IG90aGVyd2lzZSwgZXZlbiBhdCBvcmRlciA0LAorCQkgKiBoZWF2eSBmaWxlc3lzdGVtIGFjdGl2aXR5IG1ha2VzIHRoZXNlIGZhaWwKKwkJICovCisJCWdmcF90IGdmcF9mbGFncyA9IF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0NPTVA7CisKKwkJcGQtPnBvcnRfcmN2ZWdyYnVmW2VdID0gZG1hX2FsbG9jX2NvaGVyZW50KAorCQkJJmRkLT5wY2lkZXYtPmRldiwgc2l6ZSwgJnBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzW2VdLAorCQkJZ2ZwX2ZsYWdzKTsKKworCQlpZiAoIXBkLT5wb3J0X3JjdmVncmJ1ZltlXSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gYmFpbF9yY3ZlZ3JidWZfcGh5czsKKwkJfQorCX0KKworCXBkLT5wb3J0X3JjdmVncl9waHlzID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXNbMF07CisKKwlmb3IgKGUgPSBjaHVuayA9IDA7IGNodW5rIDwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rczsgY2h1bmsrKykgeworCQlkbWFfYWRkcl90IHBhID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXNbY2h1bmtdOworCQl1bnNpZ25lZCBpOworCisJCWZvciAoaSA9IDA7IGUgPCBlZ3JjbnQgJiYgaSA8IGVncnBlcmNodW5rOyBlKyssIGkrKykgeworCQkJZGQtPmlwYXRoX2ZfcHV0X3RpZChkZCwgZSArIGVncm9mZiArCisJCQkJCSAgICAodTY0IF9faW9tZW0gKikKKwkJCQkJICAgICgoY2hhciBfX2lvbWVtICopCisJCQkJCSAgICAgZGQtPmlwYXRoX2tyZWdiYXNlICsKKwkJCQkJICAgICBkZC0+aXBhdGhfcmN2ZWdyYmFzZSksIDAsIHBhKTsKKwkJCXBhICs9IGVncnNpemU7CisJCX0KKwkJY29uZF9yZXNjaGVkKCk7CS8qIGRvbid0IGhvZyB0aGUgY3B1ICovCisJfQorCisJcmV0ID0gMDsKKwlnb3RvIGJhaWw7CisKK2JhaWxfcmN2ZWdyYnVmX3BoeXM6CisJZm9yIChlID0gMDsgZSA8IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgJiYKKwkJICAgICBwZC0+cG9ydF9yY3ZlZ3JidWZbZV07IGUrKykKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgc2l6ZSwKKwkJCQkgIHBkLT5wb3J0X3JjdmVncmJ1ZltlXSwKKwkJCQkgIHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzW2VdKTsKKworCXZmcmVlKHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzKTsKKwlwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyA9IE5VTEw7CitiYWlsX3JjdmVncmJ1ZjoKKwl2ZnJlZShwZC0+cG9ydF9yY3ZlZ3JidWYpOworCXBkLT5wb3J0X3JjdmVncmJ1ZiA9IE5VTEw7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfZG9fdXNlcl9pbml0KHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaXBhdGhfdXNlcl9pbmZvICp1aW5mbykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwl1NjQgcGh5c2FkZHIsIHVhZGRyLCBvZmYsIGF0bXA7CisJc3RydWN0IHBhZ2UgKnBhZ2VwOworCXUzMiBoZWFkMzI7CisJdTY0IGhlYWQ7CisKKwkvKiBmb3Igbm93LCBpZiBtYWpvciB2ZXJzaW9uIGlzIGRpZmZlcmVudCwgYmFpbCAqLworCWlmICgodWluZm8tPnNwdV91c2VydmVyc2lvbiA+PiAxNikgIT0gSVBBVEhfVVNFUl9TV01BSk9SKSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkgIlVzZXIgbWFqb3IgdmVyc2lvbiAlZCBub3Qgc2FtZSBhcyBkcml2ZXIgIgorCQkJICJtYWpvciAlZFxuIiwgdWluZm8tPnNwdV91c2VydmVyc2lvbiA+PiAxNiwKKwkJCSBJUEFUSF9VU0VSX1NXTUFKT1IpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCh1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uICYgMHhmZmZmKSAhPSBJUEFUSF9VU0VSX1NXTUlOT1IpCisJCWlwYXRoX2RiZygiVXNlciBtaW5vciB2ZXJzaW9uICVkIG5vdCBzYW1lIGFzIGRyaXZlciAiCisJCQkgICJtaW5vciAlZFxuIiwgdWluZm8tPnNwdV91c2VydmVyc2lvbiAmIDB4ZmZmZiwKKwkJCSAgSVBBVEhfVVNFUl9TV01JTk9SKTsKKworCWlmICh1aW5mby0+c3B1X3JjdmhkcnNpemUpIHsKKwkJcmV0ID0gaXBhdGhfc2V0cmN2aGRyc2l6ZShkZCwgdWluZm8tPnNwdV9yY3ZoZHJzaXplKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBmb3Igbm93IHdlIGRvIG5vdGhpbmcgd2l0aCByY3ZoZHJjbnQ6IHVpbmZvLT5zcHVfcmN2aGRyY250ICovCisKKwkvKiBzZXQgdXAgZm9yIHRoZSByY3ZoZHIgUSB0YWlsIHJlZ2lzdGVyIHdyaXRlYmFjayB0byB1c2VyIG1lbW9yeSAqLworCWlmICghdWluZm8tPnNwdV9yY3ZoZHJhZGRyIHx8CisJICAgICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodTY0IF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykKKwkJICAgICAgIHVpbmZvLT5zcHVfcmN2aGRyYWRkciwgc2l6ZW9mKHU2NCkpKSB7CisJCWlwYXRoX2RiZygiUG9ydCAlZCByY3ZoZHJ0YWlsIGFkZHIgJWxseCBub3QgdmFsaWRcbiIsCisJCQkgIHBkLT5wb3J0X3BvcnQsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVpbmZvLT5zcHVfcmN2aGRyYWRkcik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlvZmYgPSBvZmZzZXRfaW5fcGFnZSh1aW5mby0+c3B1X3JjdmhkcmFkZHIpOworCXVhZGRyID0gUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcpIHVpbmZvLT5zcHVfcmN2aGRyYWRkcjsKKwlyZXQgPSBpcGF0aF9nZXRfdXNlcl9wYWdlc19ub2NvcHkodWFkZHIsICZwYWdlcCk7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiRmFpbGVkIHRvIGxvb2t1cCBhbmQgbG9jayAiCisJCQkgImFkZHJlc3MgJWxseCBmb3IgcmN2aGRydGFpbDogZXJybm8gJWRcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgdWluZm8tPnNwdV9yY3ZoZHJhZGRyLCAtcmV0KTsKKwkJZ290byBkb25lOworCX0KKwlpcGF0aF9zdGF0cy5zcHNfcGFnZWxvY2tzKys7CisJcGQtPnBvcnRfcmN2aGRydGFpbF91YWRkciA9IHVhZGRyOworCXBkLT5wb3J0X3JjdmhkcnRhaWxfcGFnZXAgPSBwYWdlcDsKKwlwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9CisJCXBhZ2VfYWRkcmVzcyhwYWdlcCk7CisJcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIgKz0gb2ZmOworCXBoeXNhZGRyID0gcGFnZV90b19waHlzKHBhZ2VwKSArIG9mZjsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJwb3J0ICVkIHVzZXIgYWRkciAlbGx4IGhkcnRhaWxhZGRyLCAlbGx4ICIKKwkJICAgInBoeXNpY2FsIChvZmY9JWxseClcbiIsCisJCSAgIHBkLT5wb3J0X3BvcnQsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVpbmZvLT5zcHVfcmN2aGRyYWRkciwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpIG9mZik7CisJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyLAorCQkJICAgICAgcGQtPnBvcnRfcG9ydCwgcGh5c2FkZHIpOworCWF0bXAgPSBpcGF0aF9yZWFkX2tyZWc2NF9wb3J0KGRkLAorCQkJCSAgICAgIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsCisJCQkJICAgICAgcGQtPnBvcnRfcG9ydCk7CisJaWYgKHBoeXNhZGRyICE9IGF0bXApIHsKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJDYXRhc3Ryb3BoaWMgc29mdHdhcmUgZXJyb3IsICIKKwkJCSAgICAgICJSY3ZIZHJUYWlsQWRkciV1IHdyaXR0ZW4gYXMgJWxseCwgIgorCQkJICAgICAgInJlYWQgYmFjayBhcyAlbGx4XG4iLCBwZC0+cG9ydF9wb3J0LAorCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c2FkZHIsCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhdG1wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCS8qIGZvciByaWdodCBub3csIGtlcm5lbCBwaW9idWZzIGFyZSBhdCBlbmQsIHNvIHBvcnQgMSBpcyBhdCAwICovCisJcGQtPnBvcnRfcGlvYnVmcyA9IGRkLT5pcGF0aF9waW9idWZiYXNlICsKKwkJZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwZC0+cG9ydF9wb3J0IC0KKwkJCQkgICAgICAgMSkgKiBkZC0+aXBhdGhfcGFsaWduOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlNldCBiYXNlIG9mIHBpb2J1ZnMgZm9yIHBvcnQgJXUgdG8gMHgleFxuIiwKKwkJICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcGlvYnVmcyk7CisKKwkvKgorCSAqIE5vdyBhbGxvY2F0ZSB0aGUgcmN2aGRyIFEgYW5kIGVhZ2VyIFRJRHM7IHNraXAgdGhlIFRJRAorCSAqIGFycmF5IGZvciB0aW1lIGJlaW5nLiAgSWYgcGQtPnBvcnRfcG9ydCA+IGNoaXAtc3VwcG9ydGVkLAorCSAqIHdlIG5lZWQgdG8gZG8gZXh0cmEgc3R1ZmYgaGVyZSB0byBoYW5kbGUgYnkgaGFuZGxpbmcgb3ZlcmZsb3cKKwkgKiB0aHJvdWdoIHBvcnQgMCwgc29tZWRheQorCSAqLworCXJldCA9IGlwYXRoX2NyZWF0ZV9yY3ZoZHJxKGRkLCBwZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGlwYXRoX2NyZWF0ZV91c2VyX2VncihwZCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCS8qIGVuYWJsZSByZWNlaXZlcyBub3cgKi8KKwkvKiBhdG9taWNhbGx5IHNldCBlbmFibGUgYml0IGZvciB0aGlzIHBvcnQgKi8KKwlzZXRfYml0KElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUICsgcGQtPnBvcnRfcG9ydCwKKwkJJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCS8qCisJICogc2V0IHRoZSBoZWFkIHJlZ2lzdGVycyBmb3IgdGhpcyBwb3J0IHRvIHRoZSBjdXJyZW50IHZhbHVlcworCSAqIG9mIHRoZSB0YWlsIHBvaW50ZXJzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoZXkgd2VyZQorCSAqIHVwZGF0ZWQgb24gbGFzdCB1c2Ugb2YgdGhlIHBvcnQuCisJICovCisJaGVhZDMyID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcnRhaWwsIHBkLT5wb3J0X3BvcnQpOworCWhlYWQgPSAodTY0KSBoZWFkMzI7CisJaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwgaGVhZCwgcGQtPnBvcnRfcG9ydCk7CisJaGVhZDMyID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmVncmluZGV4dGFpbCwgcGQtPnBvcnRfcG9ydCk7CisJaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2ZWdyaW5kZXhoZWFkLCBoZWFkMzIsIHBkLT5wb3J0X3BvcnQpOworCWRkLT5pcGF0aF9sYXN0ZWdyaGVhZHNbcGQtPnBvcnRfcG9ydF0gPSAtMTsKKwlkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlsc1twZC0+cG9ydF9wb3J0XSA9IC0xOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIldyb3RlIHBvcnQlZCBoZWFkICVsbHgsIGVncmhlYWQgJXggZnJvbSAiCisJCSAgICJ0YWlsIHJlZ3NcbiIsIHBkLT5wb3J0X3BvcnQsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGhlYWQsIGhlYWQzMik7CisJcGQtPnBvcnRfdGlkY3Vyc29yID0gMDsJLyogc3RhcnQgYXQgYmVnaW5uaW5nIGFmdGVyIG9wZW4gKi8KKwkvKgorCSAqIG5vdyBlbmFibGUgdGhlIHBvcnQ7IHRoZSB0YWlsIHJlZ2lzdGVycyB3aWxsIGJlIHdyaXR0ZW4gdG8gbWVtb3J5CisJICogYnkgdGhlIGNoaXAgYXMgc29vbiBhcyBpdCBzZWVzIHRoZSB3cml0ZSB0bworCSAqIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybC4gIFRoZSB1cGRhdGUgb25seSBoYXBwZW5zIG9uCisJICogdHJhbnNpdGlvbiBmcm9tIDAgdG8gMSwgc28gY2xlYXIgaXQgZmlyc3QsIHRoZW4gc2V0IGl0IGFzIHBhcnQgb2YKKwkgKiBlbmFibGluZyB0aGUgcG9ydC4gIFRoaXMgd2lsbCAodmVyeSBicmllZmx5KSBhZmZlY3QgYW55IG90aGVyCisJICogb3BlbiBwb3J0cywgYnV0IGl0IHNob3VsZG4ndCBiZSBsb25nIGVub3VnaCB0byBiZSBhbiBpc3N1ZS4KKwkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCisJCQkgZGQtPmlwYXRoX3JjdmN0cmwgJiB+SU5GSU5JUEFUSF9SX1RBSUxVUEQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtbWFwX3VyZWcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJICAgICB1NjQgdXJlZykKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXM7CisJaW50IHJldDsKKworCS8qIGl0J3MgdGhlIHJlYWwgaGFyZHdhcmUsIHNvIGlvX3JlbWFwIHdvcmtzICovCisKKwlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPiBQQUdFX1NJWkUpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZBSUwgbW1hcCB1c2VycmVnOiByZXFsZW4gIgorCQkJICIlbHggPiBQQUdFXG4iLCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOworCQlyZXQgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCXBoeXMgPSBkZC0+aXBhdGhfcGh5c2FkZHIgKyB1cmVnOworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOworCisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EOworCQlyZXQgPSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJCQkgcGh5cyA+PiBQQUdFX1NISUZULAorCQkJCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJCQkgdm1hLT52bV9wYWdlX3Byb3QpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1tYXBfcGlvYnVmcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCit7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCWludCByZXQ7CisKKwkvKgorCSAqIFdoZW4gd2UgbWFwIHRoZSBQSU8gYnVmZmVycywgd2Ugd2FudCB0byBtYXAgdGhlbSBhcyB3cml0ZW9ubHksIG5vCisJICogcmVhZCBwb3NzaWJsZS4KKwkgKi8KKworCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+CisJICAgIChkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogZGQtPmlwYXRoX3BhbGlnbikpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZBSUwgbW1hcCBwaW9idWZzOiAiCisJCQkgInJlcWxlbiAlbHggPiBQQUdFXG4iLAorCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlwaHlzID0gZGQtPmlwYXRoX3BoeXNhZGRyICsgcGQtPnBvcnRfcGlvYnVmczsKKwkvKgorCSAqIERvICpOT1QqIG1hcmsgdGhpcyBhcyBub24tY2FjaGVkIChQV1QgYml0KSwgb3Igd2UgZG9uJ3QgZ2V0IHRoZQorCSAqIHdyaXRlIGNvbWJpbmluZyBiZWhhdmlvciB3ZSB3YW50IG9uIHRoZSBQSU8gYnVmZmVycyEKKwkgKiB2bWEtPnZtX3BhZ2VfcHJvdCA9CisJICogICAgICAgIHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOworCSAqLworCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkgIkNhbid0IG1hcCBwaW9idWZzIGFzIHJlYWRhYmxlIChmbGFncz0lbHgpXG4iLAorCQkJIHZtYS0+dm1fZmxhZ3MpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBkb24ndCBhbGxvdyB0aGVtIHRvIGxhdGVyIGNoYW5nZSB0byByZWFkYWJsZSB3aXRoIG1wcm90ZWN0ICovCisKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlXUklURTsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORDsKKworCXJldCA9IGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHBoeXMgPj4gUEFHRV9TSElGVCwKKwkJCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJCSB2bWEtPnZtX3BhZ2VfcHJvdCk7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbW1hcF9yY3ZlZ3JidWZzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplOworCXNpemVfdCB0b3RhbF9zaXplLCBpOworCWRtYV9hZGRyX3QgKnBoeXM7CisJaW50IHJldDsKKworCWlmICghcGQtPnBvcnRfcmN2ZWdyYnVmKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemU7CisJdG90YWxfc2l6ZSA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgKiBzaXplOworCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IHRvdGFsX3NpemUpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZBSUwgb24gZWdyIGJ1ZnM6ICIKKwkJCSAicmVxbGVuICVseCA+IGFjdHVhbCAlbHhcbiIsCisJCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJICh1bnNpZ25lZCBsb25nKSB0b3RhbF9zaXplKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkNhbid0IG1hcCBlYWdlciBidWZmZXJzIGFzICIKKwkJCSAid3JpdGFibGUgKGZsYWdzPSVseClcbiIsIHZtYS0+dm1fZmxhZ3MpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJcGh5cyA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzOworCisJLyogZG9uJ3QgYWxsb3cgdGhlbSB0byBsYXRlciBjaGFuZ2UgdG8gd3JpdGVhYmxlIHdpdGggbXByb3RlY3QgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlXUklURTsKKworCWZvciAoaSA9IDA7IGkgPCBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOyBpKyssIHN0YXJ0ICs9IHNpemUpIHsKKwkJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBoeXNbaV0gPj4gUEFHRV9TSElGVCwKKwkJCQkgICAgICBzaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBiYWlsOworCX0KKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbW1hcF9yY3ZoZHJxKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwlzaXplX3QgdG90YWxfc2l6ZTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBrbWFsbG9jJ2VkIG1lbW9yeSwgcGh5c2ljYWxseSBjb250aWd1b3VzOyB0aGlzIGlzIGZyb20KKwkgKiBzcGlfcmN2aGRyX2Jhc2U7IHdlIGFsbG93IHVzZXIgdG8gbWFwIHJlYWQtd3JpdGUgc28gdGhleSBjYW4KKwkgKiB3cml0ZSBoZHJxIGVudHJpZXMgdG8gYWxsb3cgcHJvdG9jb2wgY29kZSB0byBkaXJlY3RseSBwb2xsCisJICogd2hldGhlciBhIGhkcnEgZW50cnkgaGFzIGJlZW4gd3JpdHRlbi4KKwkgKi8KKwl0b3RhbF9zaXplID0gQUxJR04oZGQtPmlwYXRoX3JjdmhkcmNudCAqIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplICoKKwkJCSAgIHNpemVvZih1MzIpLCBQQUdFX1NJWkUpOworCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IHRvdGFsX3NpemUpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCSAiRkFJTCBvbiByY3ZoZHJxOiByZXFsZW4gJWx4ID4gYWN0dWFsICVseFxuIiwKKwkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkgKHVuc2lnbmVkIGxvbmcpIHRvdGFsX3NpemUpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCSAgICAgIHBkLT5wb3J0X3JjdmhkcnFfcGh5cyA+PiBQQUdFX1NISUZULAorCQkJICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJICAgICAgdm1hLT52bV9wYWdlX3Byb3QpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1tYXBfcGlvYXZhaWxyZWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCWludCByZXQ7CisKKwkvKgorCSAqIHdoZW4gd2UgbWFwIHRoZSBQSU8gYnVmZmVyYXZhaWwgcmVnaXN0ZXJzLCB3ZSB3YW50IHRvIG1hcCB0aGVtIGFzCisJICogcmVhZG9ubHksIG5vIHdyaXRlIHBvc3NpYmxlLgorCSAqCisJICoga21hbGxvYydlZCBtZW1vcnksIHBoeXNpY2FsbHkgY29udGlndW91cywgb25lIHBhZ2Ugb25seSwgcmVhZG9ubHkKKwkgKi8KKworCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IFBBR0VfU0laRSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiRkFJTCBvbiBwaW9hdmFpbHJlZ3NfZG1hOiAiCisJCQkgInJlcWxlbiAlbHggPiBhY3R1YWwgJWx4XG4iLAorCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCSAodW5zaWduZWQgbG9uZykgUEFHRV9TSVpFKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCSAiQ2FuJ3QgbWFwIHBpb2F2YWlscmVncyBhcyB3cml0YWJsZSAoZmxhZ3M9JWx4KVxuIiwKKwkJCSB2bWEtPnZtX2ZsYWdzKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogZG9uJ3QgYWxsb3cgdGhlbSB0byBsYXRlciBjaGFuZ2Ugd2l0aCBtcHJvdGVjdCAqLworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOworCisJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCSAgICAgIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cyA+PiBQQUdFX1NISUZULAorCQkJICAgICAgUEFHRV9TSVpFLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfbW1hcCAtIG1tYXAgdmFyaW91cyBzdHJ1Y3R1cmVzIGludG8gdXNlciBzcGFjZQorICogQGZwOiB0aGUgZmlsZSBwb2ludGVyCisgKiBAdm1hOiB0aGUgVk0gYXJlYQorICoKKyAqIFdlIHVzZSB0aGlzIHRvIGhhdmUgYSBzaGFyZWQgYnVmZmVyIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdGhlIHVzZXIgY29kZQorICogZm9yIHRoZSByY3ZoZHIgcXVldWUsIGVnciBidWZmZXJzLCBhbmQgdGhlIHBlci1wb3J0IHVzZXIgcmVncyBhbmQgcGlvCisgKiBidWZmZXJzIGluIHRoZSBjaGlwLiAgV2UgaGF2ZSB0aGUgb3BlbiBhbmQgY2xvc2UgZW50cmllcyBzbyB3ZSBjYW4gYnVtcAorICogdGhlIHJlZiBjb3VudCBhbmQga2VlcCB0aGUgZHJpdmVyIGZyb20gYmVpbmcgdW5sb2FkZWQgd2hpbGUgc3RpbGwgbWFwcGVkLgorICovCitzdGF0aWMgaW50IGlwYXRoX21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1NjQgcGdhZGRyLCB1cmVnOworCWludCByZXQ7CisKKwlwZCA9IHBvcnRfZnAoZnApOworCWRkID0gcGQtPnBvcnRfZGQ7CisJLyoKKwkgKiBUaGlzIGlzIHRoZSBpcGF0aF9kb191c2VyX2luaXQoKSBjb2RlLCBtYXBwaW5nIHRoZSBzaGFyZWQgYnVmZmVycworCSAqIGludG8gdGhlIHVzZXIgcHJvY2Vzcy4gVGhlIGFkZHJlc3MgcmVmZXJyZWQgdG8gYnkgdm1fcGdvZmYgaXMgdGhlCisJICogdmlydHVhbCwgbm90IHBoeXNpY2FsLCBhZGRyZXNzOyB3ZSBvbmx5IGRvIG9uZSBtbWFwIGZvciBlYWNoCisJICogc3BhY2UgbWFwcGVkLgorCSAqLworCXBnYWRkciA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKworCS8qCisJICogbm90ZSB0aGF0IHVyZWcgZG9lcyAqTk9UKiBoYXZlIHRoZSBrcmVndmlydCBhcyBwYXJ0IG9mIGl0LCB0byBiZQorCSAqIHN1cmUgdGhhdCBmb3IgMzIgYml0IHByb2dyYW1zLCB3ZSBkb24ndCBlbmQgdXAgdHJ5aW5nIHRvIG1hcCBhID4KKwkgKiA0NCBhZGRyZXNzLiAgSGFzIHRvIG1hdGNoIGlwYXRoX2dldF9iYXNlX2luZm8oKSBjb2RlIHRoYXQgc2V0cworCSAqIF9fc3BpX3VyZWdiYXNlCisJICovCisKKwl1cmVnID0gZGQtPmlwYXRoX3VyZWdiYXNlICsgZGQtPmlwYXRoX3BhbGlnbiAqIHBkLT5wb3J0X3BvcnQ7CisKKwlpcGF0aF9jZGJnKE1NLCAidXNoYXJlOiBwZ2FkZHIgJWxseCB2bV9zdGFydD0lbHgsIHZtbGVuICVseFxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGdhZGRyLCB2bWEtPnZtX3N0YXJ0LAorCQkgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOworCisJaWYgKHBnYWRkciA9PSB1cmVnKQorCQlyZXQgPSBtbWFwX3VyZWcodm1hLCBkZCwgdXJlZyk7CisJZWxzZSBpZiAocGdhZGRyID09IHBkLT5wb3J0X3Bpb2J1ZnMpCisJCXJldCA9IG1tYXBfcGlvYnVmcyh2bWEsIGRkLCBwZCk7CisJZWxzZSBpZiAocGdhZGRyID09ICh1NjQpIHBkLT5wb3J0X3JjdmVncl9waHlzKQorCQlyZXQgPSBtbWFwX3JjdmVncmJ1ZnModm1hLCBwZCk7CisJZWxzZSBpZiAocGdhZGRyID09ICh1NjQpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cykKKwkJcmV0ID0gbW1hcF9yY3ZoZHJxKHZtYSwgcGQpOworCWVsc2UgaWYgKHBnYWRkciA9PSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMpCisJCXJldCA9IG1tYXBfcGlvYXZhaWxyZWdzKHZtYSwgcGQpOworCWVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCWlmIChyZXQgPCAwKQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJICJGYWlsdXJlICVkIG9uIGFkZHIgJWx4LCBvZmYgJWx4XG4iLAorCQkJIC1yZXQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcGF0aF9wb2xsKHN0cnVjdCBmaWxlICpmcCwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KQoreworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJdTMyIGhlYWQsIHRhaWw7CisJaW50IGJpdDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisKKwlwZCA9IHBvcnRfZnAoZnApOworCWRkID0gcGQtPnBvcnRfZGQ7CisKKwliaXQgPSBwZC0+cG9ydF9wb3J0ICsgSU5GSU5JUEFUSF9SX0lOVFJBVkFJTF9TSElGVDsKKwlzZXRfYml0KGJpdCwgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCS8qCisJICogQmVmb3JlIGJsb2NraW5nLCBtYWtlIHN1cmUgdGhhdCBoZWFkIGlzIHN0aWxsID09IHRhaWwsCisJICogcmVhZGluZyBmcm9tIHRoZSBjaGlwLCBzbyB3ZSBjYW4gYmUgc3VyZSB0aGUgaW50ZXJydXB0CisJICogZW5hYmxlIGhhcyBtYWRlIGl0IHRvIHRoZSBjaGlwLiAgSWYgbm90IGVxdWFsLCBkaXNhYmxlCisJICogaW50ZXJydXB0IGFnYWluIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuICBUaGlzIGF2b2lkcyByYWNlcywKKwkgKiBhbmQgdGhlIG92ZXJoZWFkIG9mIHRoZSBjaGlwIHJlYWQgZG9lc24ndCBtYXR0ZXIgbXVjaCBhdAorCSAqIHRoaXMgcG9pbnQsIHNpbmNlIHdlIGFyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgYW55d2F5LgorCSAqLworCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKKworCWhlYWQgPSBpcGF0aF9yZWFkX3VyZWczMihkZCwgdXJfcmN2aGRyaGVhZCwgcGQtPnBvcnRfcG9ydCk7CisJdGFpbCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJ0YWlsLCBwZC0+cG9ydF9wb3J0KTsKKworCWlmICh0YWlsID09IGhlYWQpIHsKKwkJc2V0X2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUkNWLCAmcGQtPnBvcnRfZmxhZyk7CisJCWlmKGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZikgLyogYXJtIHJjdiBpbnRlcnJ1cHQgKi8KKwkJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmhkcmhlYWQsCisJCQkJCSAgICAgICBkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYKKwkJCQkJICAgICAgIHwgaGVhZCwgcGQtPnBvcnRfcG9ydCk7CisJCXBvbGxfd2FpdChmcCwgJnBkLT5wb3J0X3dhaXQsIHB0KTsKKworCQlpZiAodGVzdF9iaXQoSVBBVEhfUE9SVF9XQUlUSU5HX1JDViwgJnBkLT5wb3J0X2ZsYWcpKSB7CisJCQkvKiB0aW1lZCBvdXQsIG5vIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwkJCWNsZWFyX2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUkNWLCAmcGQtPnBvcnRfZmxhZyk7CisJCQlwZC0+cG9ydF9yY3Z3YWl0X3RvKys7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIGl0J3MgYWxyZWFkeSBoYXBwZW5lZDsgZG9uJ3QgZG8gd2FpdF9ldmVudCBvdmVyaGVhZCAqLworCQlwZC0+cG9ydF9yY3Zub3dhaXQrKzsKKwl9CisKKwljbGVhcl9iaXQoYml0LCAmZGQtPmlwYXRoX3JjdmN0cmwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfYWxsb2NfcG9ydChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBwb3J0LAorCQkJICBzdHJ1Y3QgZmlsZSAqZnApCit7CisJaW50IHJldDsKKworCWlmICghZGQtPmlwYXRoX3BkW3BvcnRdKSB7CisJCXZvaWQgKnAsICpwdG1wOworCisJCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEpLCBHRlBfS0VSTkVMKTsKKworCQkvKgorCQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZSBpbiBpcGF0aF90aWRfdXBkYXRlKCkganVzdCBvbmNlCisJCSAqIGF0IG9wZW4sIG5vdCBwZXIgY2FsbC4gIFJlZHVjZXMgY29zdCBvZiBleHBlY3RlZCBzZW5kCisJCSAqIHNldHVwLgorCQkgKi8KKwkJcHRtcCA9IGttYWxsb2MoZGQtPmlwYXRoX3JjdnRpZGNudCAqIHNpemVvZih1MTYpICsKKwkJCSAgICAgICBkZC0+aXBhdGhfcmN2dGlkY250ICogc2l6ZW9mKHN0cnVjdCBwYWdlICoqKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwIHx8ICFwdG1wKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHBvcnRkYXRhICIKKwkJCQkgICAgICAibWVtb3J5LCBmYWlsaW5nIG9wZW5cbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWtmcmVlKHApOworCQkJa2ZyZWUocHRtcCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJZGQtPmlwYXRoX3BkW3BvcnRdID0gcDsKKwkJZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X3BvcnQgPSBwb3J0OworCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfZGQgPSBkZDsKKwkJZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X3RpZF9wZ19saXN0ID0gcHRtcDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X3dhaXQpOworCX0KKwlpZiAoIWRkLT5pcGF0aF9wZFtwb3J0XS0+cG9ydF9jbnQpIHsKKwkJZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X2NudCA9IDE7CisJCWZwLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBkZC0+aXBhdGhfcGRbcG9ydF07CisJCWlwYXRoX2NkYmcoUFJPQywgIiVzWyV1XSBvcGVuZWQgdW5pdDpwb3J0ICV1OiV1XG4iLAorCQkJICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBkZC0+aXBhdGhfdW5pdCwKKwkJCSAgIHBvcnQpOworCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfcGlkID0gY3VycmVudC0+cGlkOworCQlzdHJuY3B5KGRkLT5pcGF0aF9wZFtwb3J0XS0+cG9ydF9jb21tLCBjdXJyZW50LT5jb21tLAorCQkJc2l6ZW9mKGRkLT5pcGF0aF9wZFtwb3J0XS0+cG9ydF9jb21tKSk7CisJCWlwYXRoX3N0YXRzLnNwc19wb3J0cysrOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCXJldCA9IC1FQlVTWTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2FibGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZCAmJgorCQkoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUFJFU0VOVCkgJiYKKwkJZGQtPmlwYXRoX2tyZWdiYXNlICYmCisJCWRkLT5pcGF0aF9saWQgJiYKKwkJIShkZC0+aXBhdGhfZmxhZ3MgJiAoSVBBVEhfTElOS0RPV04gfCBJUEFUSF9ESVNBQkxFRAorCQkJCSAgICAgfCBJUEFUSF9MSU5LVU5LKSk7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9mcmVlX3BvcnQoaW50IHVuaXQsIHN0cnVjdCBmaWxlICpmcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBpcGF0aF9sb29rdXAodW5pdCk7CisJaW50IHJldCwgaTsKKworCWlmICghZGQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWlsOworCX0KKworCWlmICghdXNhYmxlKGRkKSkgeworCQlyZXQgPSAtRU5FVERPV047CisJCWdvdG8gYmFpbDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJcmV0ID0gdHJ5X2FsbG9jX3BvcnQoZGQsIGksIGZwKTsKKwkJaWYgKHJldCAhPSAtRUJVU1kpCisJCQlnb3RvIGJhaWw7CisJfQorCXJldCA9IC1FQlVTWTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZpbmRfYmVzdF91bml0KHN0cnVjdCBmaWxlICpmcCkKK3sKKwlpbnQgcmV0ID0gMCwgaSwgcHJlZnVuaXQgPSAtMSwgZGV2bWF4OworCWludCBtYXhvZmFsbHBvcnRzLCBucHJlc2VudCwgbnVwOworCWludCBuZGV2OworCisJKHZvaWQpIGlwYXRoX2NvdW50X3VuaXRzKCZucHJlc2VudCwgJm51cCwgJm1heG9mYWxscG9ydHMpOworCisJLyoKKwkgKiBUaGlzIGNvZGUgaXMgcHJlc2VudCB0byBhbGxvdyBhIGtub3dsZWRnZWFibGUgcGVyc29uIHRvCisJICogc3BlY2lmeSB0aGUgbGF5b3V0IG9mIHByb2Nlc3NlcyB0byBwcm9jZXNzb3JzIGJlZm9yZSBvcGVuaW5nCisJICogdGhpcyBkcml2ZXIsIGFuZCB0aGVuIHdlJ2xsIGFzc2lnbiB0aGUgcHJvY2VzcyB0byB0aGUgImNsb3Nlc3QiCisJICogSFQtNDAwIHRvIHRoYXQgcHJvY2Vzc29yICh3ZSBhc3N1bWUgcmVhc29uYWJsZSBjb25uZWN0aXZpdHksCisJICogZm9yIG5vdykuICBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGlmIGFmZmluaXR5IGhhcyBiZWVuIHNldAorCSAqIGJlZm9yZSB0aGlzIHBvaW50LCB0aGF0IGF0IG1vc3Qgb25lIGNwdSBpcyBzZXQ7IGZvciBub3cgdGhpcworCSAqIGlzIHJlYXNvbmFibGUuICBJIGNoZWNrIGZvciBib3RoIGNwdXNfZW1wdHkoKSBhbmQgY3B1c19mdWxsKCksCisJICogaW4gY2FzZSBzb21lIGtlcm5lbCB2YXJpYW50IHNldHMgbm9uZSBvZiB0aGUgYml0cyB3aGVuIG5vCisJICogYWZmaW5pdHkgaXMgc2V0LiAgMi42LjExIGFuZCAxMiBrZXJuZWxzIGhhdmUgYWxsIHByZXNlbnQKKwkgKiBjcHVzIHNldC4gIFNvbWUgZGF5IHdlJ2xsIGhhdmUgdG8gZml4IGl0IHVwIGZ1cnRoZXIgdG8gaGFuZGxlCisJICogYSBjcHUgc3Vic2V0LiAgVGhpcyBhbGdvcml0aG0gZmFpbHMgZm9yIHR3byBIVC00MDAncyBjb25uZWN0ZWQKKwkgKiBpbiB0dW5uZWwgZmFzaGlvbi4gIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyByZWFsIHRvcG9sb2d5CisJICogaW5mb3JtYXRpb24uICBUaGVyZSBtYXkgYmUgc29tZSBpc3N1ZXMgd2l0aCBkdWFsIGNvcmUgbnVtYmVyaW5nCisJICogYXMgd2VsbC4gIFRoaXMgbmVlZHMgbW9yZSB3b3JrIHByaW9yIHRvIHJlbGVhc2UuCisJICovCisJaWYgKCFjcHVzX2VtcHR5KGN1cnJlbnQtPmNwdXNfYWxsb3dlZCkgJiYKKwkgICAgIWNwdXNfZnVsbChjdXJyZW50LT5jcHVzX2FsbG93ZWQpKSB7CisJCWludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpLCBjdXJjcHUgPSAtMTsKKwkJZm9yIChpID0gMDsgaSA8IG5jcHVzOyBpKyspCisJCQlpZiAoY3B1X2lzc2V0KGksIGN1cnJlbnQtPmNwdXNfYWxsb3dlZCkpIHsKKwkJCQlpcGF0aF9jZGJnKFBST0MsICIlc1sldV0gYWZmaW5pdHkgc2V0IGZvciAiCisJCQkJCSAgICJjcHUgJWRcbiIsIGN1cnJlbnQtPmNvbW0sCisJCQkJCSAgIGN1cnJlbnQtPnBpZCwgaSk7CisJCQkJY3VyY3B1ID0gaTsKKwkJCX0KKwkJaWYgKGN1cmNwdSAhPSAtMSkgeworCQkJaWYgKG5wcmVzZW50KSB7CisJCQkJcHJlZnVuaXQgPSBjdXJjcHUgLyAobmNwdXMgLyBucHJlc2VudCk7CisJCQkJaXBhdGhfZGJnKCIlc1sldV0gJWQgY2hpcHMsICVkIGNwdXMsICIKKwkJCQkJICAiJWQgY3B1cy9jaGlwLCBzZWxlY3QgdW5pdCAlZFxuIiwKKwkJCQkJICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCSAgbnByZXNlbnQsIG5jcHVzLCBuY3B1cyAvIG5wcmVzZW50LAorCQkJCQkgIHByZWZ1bml0KTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogdXNlciBwb3J0cyBzdGFydCBhdCAxLCBrZXJuZWwgcG9ydCBpcyAwCisJICogRm9yIG5vdywgd2UgZG8gcm91bmQtcm9iaW4gYWNjZXNzIGFjcm9zcyBhbGwgY2hpcHMKKwkgKi8KKworCWlmIChwcmVmdW5pdCAhPSAtMSkKKwkJZGV2bWF4ID0gcHJlZnVuaXQgKyAxOworCWVsc2UKKwkJZGV2bWF4ID0gaXBhdGhfY291bnRfdW5pdHMoTlVMTCwgTlVMTCwgTlVMTCk7CityZWNoZWNrOgorCWZvciAoaSA9IDE7IGkgPCBtYXhvZmFsbHBvcnRzOyBpKyspIHsKKwkJZm9yIChuZGV2ID0gcHJlZnVuaXQgIT0gLTEgPyBwcmVmdW5pdCA6IDA7IG5kZXYgPCBkZXZtYXg7CisJCSAgICAgbmRldisrKSB7CisJCQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBpcGF0aF9sb29rdXAobmRldik7CisKKwkJCWlmICghdXNhYmxlKGRkKSkKKwkJCQljb250aW51ZTsgLyogY2FuJ3QgdXNlIHRoaXMgdW5pdCAqLworCQkJaWYgKGkgPj0gZGQtPmlwYXRoX2NmZ3BvcnRzKQorCQkJCS8qCisJCQkJICogTWF4ZWQgb3V0IG9uIHVzZXJzIG9mIHRoaXMgdW5pdC4gVHJ5CisJCQkJICogbmV4dC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCXJldCA9IHRyeV9hbGxvY19wb3J0KGRkLCBpLCBmcCk7CisJCQlpZiAoIXJldCkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAobnByZXNlbnQpIHsKKwkJaWYgKG51cCA9PSAwKSB7CisJCQlyZXQgPSAtRU5FVERPV047CisJCQlpcGF0aF9kYmcoIk5vIHBvcnRzIGF2YWlsYWJsZSAobm9uZSBpbml0aWFsaXplZCAiCisJCQkJICAiYW5kIHJlYWR5KVxuIik7CisJCX0gZWxzZSB7CisJCQlpZiAocHJlZnVuaXQgPiAwKSB7CisJCQkJLyogaWYgc3RhcnRlZCBhYm92ZSAwLCByZXRyeSBmcm9tIDAgKi8KKwkJCQlpcGF0aF9jZGJnKFBST0MsCisJCQkJCSAgICIlc1sldV0gbm8gcG9ydHMgb24gcHJlZnVuaXQgIgorCQkJCQkgICAiJWQsIGNsZWFyIGFuZCByZS1jaGVja1xuIiwKKwkJCQkJICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCQkgICBwcmVmdW5pdCk7CisJCQkJZGV2bWF4ID0gaXBhdGhfY291bnRfdW5pdHMoTlVMTCwgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKwkJCQlwcmVmdW5pdCA9IC0xOworCQkJCWdvdG8gcmVjaGVjazsKKwkJCX0KKwkJCXJldCA9IC1FQlVTWTsKKwkJCWlwYXRoX2RiZygiTm8gcG9ydHMgYXZhaWxhYmxlXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IC1FTlhJTzsKKwkJaXBhdGhfZGJnKCJObyBib2FyZHMgZm91bmRcbiIpOworCX0KKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX29wZW4oc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKQoreworCWludCByZXQsIG1pbm9yOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOworCisJbWlub3IgPSBpbWlub3IoaW4pOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIm9wZW4gb24gZGV2ICVseCAobWlub3IgJWQpXG4iLAorCQkgICAobG9uZylpbi0+aV9yZGV2LCBtaW5vcik7CisKKwlpZiAobWlub3IpCisJCXJldCA9IGZpbmRfZnJlZV9wb3J0KG1pbm9yIC0gMSwgZnApOworCWVsc2UKKwkJcmV0ID0gZmluZF9iZXN0X3VuaXQoZnApOworCisJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB1bmxvY2tfZXhwdGlkIC0gdW5sb2NrIGFueSBleHBlY3RlZCBUSUQgZW50cmllcyBwb3J0IHN0aWxsIGhhZCBpbiB1c2UKKyAqIEBwZDogcG9ydAorICoKKyAqIFdlIGRvbid0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgY2hpcCBoZXJlLCBiZWNhdXNlIHdlIGRvIGEgYnVsayB1cGRhdGUKKyAqIGJlbG93LCB1c2luZyBpcGF0aF9mX2NsZWFyX3RpZHMuCisgKi8KK3N0YXRpYyB2b2lkIHVubG9ja19leHBlY3RlZF90aWRzKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CisJaW50IHBvcnRfdGlkYmFzZSA9IHBkLT5wb3J0X3BvcnQgKiBkZC0+aXBhdGhfcmN2dGlkY250OworCWludCBpLCBjbnQgPSAwLCBtYXh0aWQgPSBwb3J0X3RpZGJhc2UgKyBkZC0+aXBhdGhfcmN2dGlkY250OworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUG9ydCAldSB1bmxvY2tpbmcgYW55IGxvY2tlZCBleHBUSUQgcGFnZXNcbiIsCisJCSAgIHBkLT5wb3J0X3BvcnQpOworCWZvciAoaSA9IHBvcnRfdGlkYmFzZTsgaSA8IG1heHRpZDsgaSsrKSB7CisJCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3dbaV0pCisJCQljb250aW51ZTsKKworCQlpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXNfb25fY2xvc2UoJmRkLT5pcGF0aF9wYWdlc2hhZG93W2ldLAorCQkJCQkJICAxKTsKKwkJZGQtPmlwYXRoX3BhZ2VzaGFkb3dbaV0gPSBOVUxMOworCQljbnQrKzsKKwkJaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKys7CisJfQorCWlmIChjbnQpCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlBvcnQgJXUgbG9ja2VkICV1IGV4cFRJRCBlbnRyaWVzXG4iLAorCQkJICAgcGQtPnBvcnRfcG9ydCwgY250KTsKKworCWlmIChpcGF0aF9zdGF0cy5zcHNfcGFnZWxvY2tzIHx8IGlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2NrcykKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWxsdSBwYWdlcyBsb2NrZWQsICVsbHUgdW5sb2NrZWRcbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBpcGF0aF9zdGF0cy5zcHNfcGFnZWxvY2tzLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgIGlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2Nrcyk7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfY2xvc2Uoc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXVuc2lnbmVkIHBvcnQ7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJjbG9zZSBvbiBkZXYgJWx4LCBwcml2YXRlIGRhdGEgJXBcbiIsCisJCSAgIChsb25nKWluLT5pX3JkZXYsIGZwLT5wcml2YXRlX2RhdGEpOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOworCisJcGQgPSBwb3J0X2ZwKGZwKTsKKwlwb3J0ID0gcGQtPnBvcnRfcG9ydDsKKwlmcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlkZCA9IHBkLT5wb3J0X2RkOworCisJaWYgKHBkLT5wb3J0X2hkcnFmdWxsKSB7CisJCWlwYXRoX2NkYmcoUFJPQywgIiVzWyV1XSBoYWQgJXUgcmN2aGRycWZ1bGwgZXJyb3JzICIKKwkJCSAgICJkdXJpbmcgcnVuXG4iLCBwZC0+cG9ydF9jb21tLCBwZC0+cG9ydF9waWQsCisJCQkgICBwZC0+cG9ydF9oZHJxZnVsbCk7CisJCXBkLT5wb3J0X2hkcnFmdWxsID0gMDsKKwl9CisKKwlpZiAocGQtPnBvcnRfcmN2d2FpdF90byB8fCBwZC0+cG9ydF9waW93YWl0X3RvCisJICAgIHx8IHBkLT5wb3J0X3Jjdm5vd2FpdCB8fCBwZC0+cG9ydF9waW9ub3dhaXQpIHsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicG9ydCV1LCAldSByY3YsICV1IHBpbyB3YWl0IHRpbWVvOyAiCisJCQkgICAiJXUgcmN2ICV1LCBwaW8gYWxyZWFkeVxuIiwKKwkJCSAgIHBkLT5wb3J0X3BvcnQsIHBkLT5wb3J0X3JjdndhaXRfdG8sCisJCQkgICBwZC0+cG9ydF9waW93YWl0X3RvLCBwZC0+cG9ydF9yY3Zub3dhaXQsCisJCQkgICBwZC0+cG9ydF9waW9ub3dhaXQpOworCQlwZC0+cG9ydF9yY3Z3YWl0X3RvID0gcGQtPnBvcnRfcGlvd2FpdF90byA9CisJCQlwZC0+cG9ydF9yY3Zub3dhaXQgPSBwZC0+cG9ydF9waW9ub3dhaXQgPSAwOworCX0KKwlpZiAocGQtPnBvcnRfZmxhZykgeworCQlpcGF0aF9kYmcoInBvcnQgJXUgcG9ydF9mbGFnIHN0aWxsIHNldCB0byAweCVseFxuIiwKKwkJCSAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfZmxhZyk7CisJCXBkLT5wb3J0X2ZsYWcgPSAwOworCX0KKworCWlmIChkZC0+aXBhdGhfa3JlZ2Jhc2UpIHsKKwkJaWYgKHBkLT5wb3J0X3JjdmhkcnRhaWxfdWFkZHIpIHsKKwkJCXBkLT5wb3J0X3JjdmhkcnRhaWxfdWFkZHIgPSAwOworCQkJcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIgPSBOVUxMOworCQkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKAorCQkJCSZwZC0+cG9ydF9yY3ZoZHJ0YWlsX3BhZ2VwLCAxKTsKKwkJCXBkLT5wb3J0X3JjdmhkcnRhaWxfcGFnZXAgPSBOVUxMOworCQkJaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKys7CisJCX0KKwkJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KAorCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsCisJCQlwb3J0LCAwVUxMKTsKKwkJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KAorCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyYWRkciwKKwkJCXBkLT5wb3J0X3BvcnQsIDApOworCisJCS8qIGNsZWFuIHVwIHRoZSBwa2V5cyBmb3IgdGhpcyBwb3J0IHVzZXIgKi8KKwkJaXBhdGhfY2xlYW5fcGFydF9rZXkocGQsIGRkKTsKKworCQlpZiAocG9ydCA8IGRkLT5pcGF0aF9jZmdwb3J0cykgeworCQkJaW50IGkgPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogKHBvcnQgLSAxKTsKKwkJCWlwYXRoX2Rpc2FybV9waW9idWZzKGRkLCBpLCBkZC0+aXBhdGhfcGJ1ZnNwb3J0KTsKKworCQkJLyogYXRvbWljYWxseSBjbGVhciByZWNlaXZlIGVuYWJsZSBwb3J0LiAqLworCQkJY2xlYXJfYml0KElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUICsgcG9ydCwKKwkJCQkgICZkZC0+aXBhdGhfcmN2Y3RybCk7CisJCQlpcGF0aF93cml0ZV9rcmVnKAorCQkJCWRkLAorCQkJCWRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCQlkZC0+aXBhdGhfcmN2Y3RybCk7CisKKwkJCWlmIChkZC0+aXBhdGhfcGFnZXNoYWRvdykKKwkJCQl1bmxvY2tfZXhwZWN0ZWRfdGlkcyhwZCk7CisJCQlpcGF0aF9zdGF0cy5zcHNfcG9ydHMtLTsKKwkJCWlwYXRoX2NkYmcoUFJPQywgIiVzWyV1XSBjbG9zZWQgcG9ydCAldToldVxuIiwKKwkJCQkgICBwZC0+cG9ydF9jb21tLCBwZC0+cG9ydF9waWQsCisJCQkJICAgZGQtPmlwYXRoX3VuaXQsIHBvcnQpOworCQl9CisJfQorCisJcGQtPnBvcnRfY250ID0gMDsKKwlwZC0+cG9ydF9waWQgPSAwOworCisJZGQtPmlwYXRoX2ZfY2xlYXJfdGlkcyhkZCwgcGQtPnBvcnRfcG9ydCk7CisKKwlpcGF0aF9mcmVlX3BkZGF0YShkZCwgcGQtPnBvcnRfcG9ydCwgMCk7CisKKwltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfcG9ydF9pbmZvKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCisJCQkgICBzdHJ1Y3QgaXBhdGhfcG9ydF9pbmZvIF9fdXNlciAqdWluZm8pCit7CisJc3RydWN0IGlwYXRoX3BvcnRfaW5mbyBpbmZvOworCWludCBudXA7CisJaW50IHJldDsKKworCSh2b2lkKSBpcGF0aF9jb3VudF91bml0cyhOVUxMLCAmbnVwLCBOVUxMKTsKKwlpbmZvLm51bV9hY3RpdmUgPSBudXA7CisJaW5mby51bml0ID0gcGQtPnBvcnRfZGQtPmlwYXRoX3VuaXQ7CisJaW5mby5wb3J0ID0gcGQtPnBvcnRfcG9ydDsKKworCWlmIChjb3B5X3RvX3VzZXIodWluZm8sICZpbmZvLCBzaXplb2YoaW5mbykpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpcGF0aF93cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwljb25zdCBzdHJ1Y3QgaXBhdGhfY21kIF9fdXNlciAqdWNtZDsKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOworCWNvbnN0IHZvaWQgX191c2VyICpzcmM7CisJc2l6ZV90IGNvbnN1bWVkLCBjb3B5OworCXN0cnVjdCBpcGF0aF9jbWQgY21kOworCXNzaXplX3QgcmV0ID0gMDsKKwl2b2lkICpkZXN0OworCisJaWYgKGNvdW50IDwgc2l6ZW9mKGNtZC50eXBlKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJdWNtZCA9IChjb25zdCBzdHJ1Y3QgaXBhdGhfY21kIF9fdXNlciAqKSBkYXRhOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQudHlwZSwgJnVjbWQtPnR5cGUsIHNpemVvZihjbWQudHlwZSkpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwljb25zdW1lZCA9IHNpemVvZihjbWQudHlwZSk7CisKKwlzd2l0Y2ggKGNtZC50eXBlKSB7CisJY2FzZSBJUEFUSF9DTURfVVNFUl9JTklUOgorCQljb3B5ID0gc2l6ZW9mKGNtZC5jbWQudXNlcl9pbmZvKTsKKwkJZGVzdCA9ICZjbWQuY21kLnVzZXJfaW5mbzsKKwkJc3JjID0gJnVjbWQtPmNtZC51c2VyX2luZm87CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1JFQ1ZfQ1RSTDoKKwkJY29weSA9IHNpemVvZihjbWQuY21kLnJlY3ZfY3RybCk7CisJCWRlc3QgPSAmY21kLmNtZC5yZWN2X2N0cmw7CisJCXNyYyA9ICZ1Y21kLT5jbWQucmVjdl9jdHJsOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9QT1JUX0lORk86CisJCWNvcHkgPSBzaXplb2YoY21kLmNtZC5wb3J0X2luZm8pOworCQlkZXN0ID0gJmNtZC5jbWQucG9ydF9pbmZvOworCQlzcmMgPSAmdWNtZC0+Y21kLnBvcnRfaW5mbzsKKwkJYnJlYWs7CisJY2FzZSBJUEFUSF9DTURfVElEX1VQREFURToKKwljYXNlIElQQVRIX0NNRF9USURfRlJFRToKKwkJY29weSA9IHNpemVvZihjbWQuY21kLnRpZF9pbmZvKTsKKwkJZGVzdCA9ICZjbWQuY21kLnRpZF9pbmZvOworCQlzcmMgPSAmdWNtZC0+Y21kLnRpZF9pbmZvOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9TRVRfUEFSVF9LRVk6CisJCWNvcHkgPSBzaXplb2YoY21kLmNtZC5wYXJ0X2tleSk7CisJCWRlc3QgPSAmY21kLmNtZC5wYXJ0X2tleTsKKwkJc3JjID0gJnVjbWQtPmNtZC5wYXJ0X2tleTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmICgoY291bnQgLSBjb25zdW1lZCkgPCBjb3B5KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoZGVzdCwgc3JjLCBjb3B5KSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGJhaWw7CisJfQorCisJY29uc3VtZWQgKz0gY29weTsKKwlwZCA9IHBvcnRfZnAoZnApOworCisJc3dpdGNoIChjbWQudHlwZSkgeworCWNhc2UgSVBBVEhfQ01EX1VTRVJfSU5JVDoKKwkJcmV0ID0gaXBhdGhfZG9fdXNlcl9pbml0KHBkLCAmY21kLmNtZC51c2VyX2luZm8pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYmFpbDsKKwkJcmV0ID0gaXBhdGhfZ2V0X2Jhc2VfaW5mbygKKwkJCXBkLCAodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpCisJCQljbWQuY21kLnVzZXJfaW5mby5zcHVfYmFzZV9pbmZvLAorCQkJY21kLmNtZC51c2VyX2luZm8uc3B1X2Jhc2VfaW5mb19zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBJUEFUSF9DTURfUkVDVl9DVFJMOgorCQlyZXQgPSBpcGF0aF9tYW5hZ2VfcmN2cShwZCwgY21kLmNtZC5yZWN2X2N0cmwpOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9QT1JUX0lORk86CisJCXJldCA9IGlwYXRoX3BvcnRfaW5mbyhwZCwKKwkJCQkgICAgICAoc3RydWN0IGlwYXRoX3BvcnRfaW5mbyBfX3VzZXIgKikKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZykgY21kLmNtZC5wb3J0X2luZm8pOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9USURfVVBEQVRFOgorCQlyZXQgPSBpcGF0aF90aWRfdXBkYXRlKHBkLCAmY21kLmNtZC50aWRfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1RJRF9GUkVFOgorCQlyZXQgPSBpcGF0aF90aWRfZnJlZShwZCwgJmNtZC5jbWQudGlkX2luZm8pOworCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9TRVRfUEFSVF9LRVk6CisJCXJldCA9IGlwYXRoX3NldF9wYXJ0X2tleShwZCwgY21kLmNtZC5wYXJ0X2tleSk7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gY29uc3VtZWQ7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyAqaXBhdGhfY2xhc3M7CisKK3N0YXRpYyBpbnQgaW5pdF9jZGV2KGludCBtaW5vciwgY2hhciAqbmFtZSwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJICAgICBzdHJ1Y3QgY2RldiAqKmNkZXZwLCBzdHJ1Y3QgY2xhc3NfZGV2aWNlICoqY2xhc3NfZGV2cCkKK3sKKwljb25zdCBkZXZfdCBkZXYgPSBNS0RFVihJUEFUSF9NQUpPUiwgbWlub3IpOworCXN0cnVjdCBjZGV2ICpjZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSBOVUxMOworCWludCByZXQ7CisKKwljZGV2ID0gY2Rldl9hbGxvYygpOworCWlmICghY2RldikgeworCQlwcmludGsoS0VSTl9FUlIgSVBBVEhfRFJWX05BTUUKKwkJICAgICAgICI6IENvdWxkIG5vdCBhbGxvY2F0ZSBjZGV2IGZvciBtaW5vciAlZCwgJXNcbiIsCisJCSAgICAgICBtaW5vciwgbmFtZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwljZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCWNkZXYtPm9wcyA9IGZvcHM7CisJa29iamVjdF9zZXRfbmFtZSgmY2Rldi0+a29iaiwgbmFtZSk7CisKKwlyZXQgPSBjZGV2X2FkZChjZGV2LCBkZXYsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRQorCQkgICAgICAgIjogQ291bGQgbm90IGFkZCBjZGV2IGZvciBtaW5vciAlZCwgJXMgKGVyciAlZClcbiIsCisJCSAgICAgICBtaW5vciwgbmFtZSwgLXJldCk7CisJCWdvdG8gZXJyX2NkZXY7CisJfQorCisJY2xhc3NfZGV2ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZShpcGF0aF9jbGFzcywgTlVMTCwgZGV2LCBOVUxMLCBuYW1lKTsKKworCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKGNsYXNzX2Rldik7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRSAiOiBDb3VsZCBub3QgY3JlYXRlICIKKwkJICAgICAgICJjbGFzc19kZXYgZm9yIG1pbm9yICVkLCAlcyAoZXJyICVkKVxuIiwKKwkJICAgICAgIG1pbm9yLCBuYW1lLCAtcmV0KTsKKwkJZ290byBlcnJfY2RldjsKKwl9CisKKwlnb3RvIGRvbmU7CisKK2Vycl9jZGV2OgorCWNkZXZfZGVsKGNkZXYpOworCWNkZXYgPSBOVUxMOworCitkb25lOgorCWlmIChyZXQgPj0gMCkgeworCQkqY2RldnAgPSBjZGV2OworCQkqY2xhc3NfZGV2cCA9IGNsYXNzX2RldjsKKwl9IGVsc2UgeworCQkqY2RldnAgPSBOVUxMOworCQkqY2xhc3NfZGV2cCA9IE5VTEw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoX2NkZXZfaW5pdChpbnQgbWlub3IsIGNoYXIgKm5hbWUsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCSAgICBzdHJ1Y3QgY2RldiAqKmNkZXZwLCBzdHJ1Y3QgY2xhc3NfZGV2aWNlICoqY2xhc3NfZGV2cCkKK3sKKwlyZXR1cm4gaW5pdF9jZGV2KG1pbm9yLCBuYW1lLCBmb3BzLCBjZGV2cCwgY2xhc3NfZGV2cCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2RldihzdHJ1Y3QgY2RldiAqKmNkZXZwLAorCQkJIHN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9ICpjbGFzc19kZXZwOworCisJaWYgKGNsYXNzX2RldikgeworCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihjbGFzc19kZXYpOworCQkqY2xhc3NfZGV2cCA9IE5VTEw7CisJfQorCisJaWYgKCpjZGV2cCkgeworCQljZGV2X2RlbCgqY2RldnApOworCQkqY2RldnAgPSBOVUxMOworCX0KK30KKwordm9pZCBpcGF0aF9jZGV2X2NsZWFudXAoc3RydWN0IGNkZXYgKipjZGV2cCwKKwkJCXN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKQoreworCWNsZWFudXBfY2RldihjZGV2cCwgY2xhc3NfZGV2cCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2RldiAqd2lsZGNhcmRfY2RldjsKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICp3aWxkY2FyZF9jbGFzc19kZXY7CisKK3N0YXRpYyBjb25zdCBkZXZfdCBkZXYgPSBNS0RFVihJUEFUSF9NQUpPUiwgMCk7CisKK3N0YXRpYyBpbnQgdXNlcl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBJUEFUSF9OTUlOT1JTLCBJUEFUSF9EUlZfTkFNRSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FICI6IENvdWxkIG5vdCByZWdpc3RlciAiCisJCSAgICAgICAiY2hyZGV2IHJlZ2lvbiAoZXJyICVkKVxuIiwgLXJldCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpcGF0aF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgSVBBVEhfRFJWX05BTUUpOworCisJaWYgKElTX0VSUihpcGF0aF9jbGFzcykpIHsKKwkJcmV0ID0gUFRSX0VSUihpcGF0aF9jbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRSAiOiBDb3VsZCBub3QgY3JlYXRlICIKKwkJICAgICAgICJkZXZpY2UgY2xhc3MgKGVyciAlZClcbiIsIC1yZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJZ290byBkb25lOworYmFpbDoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBJUEFUSF9OTUlOT1JTKTsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdXNlcl9jbGVhbnVwKHZvaWQpCit7CisJaWYgKGlwYXRoX2NsYXNzKSB7CisJCWNsYXNzX2Rlc3Ryb3koaXBhdGhfY2xhc3MpOworCQlpcGF0aF9jbGFzcyA9IE5VTEw7CisJfQorCisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgSVBBVEhfTk1JTk9SUyk7Cit9CisKK3N0YXRpYyBhdG9taWNfdCB1c2VyX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3QgdXNlcl9zZXR1cCA9IEFUT01JQ19JTklUKDApOworCitpbnQgaXBhdGhfdXNlcl9hZGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWNoYXIgbmFtZVsxMF07CisJaW50IHJldDsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmdXNlcl9jb3VudCkgPT0gMSkgeworCQlyZXQgPSB1c2VyX2luaXQoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJVbmFibGUgdG8gc2V0IHVwIHVzZXIgc3VwcG9ydDogIgorCQkJCSAgICAgICJlcnJvciAlZFxuIiwgLXJldCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJcmV0ID0gaXBhdGhfZGlhZ19pbml0KCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIHNldCB1cCBkaWFnIHN1cHBvcnQ6ICIKKwkJCQkgICAgICAiZXJyb3IgJWRcbiIsIC1yZXQpOworCQkJZ290byBiYWlsX3NtYTsKKwkJfQorCisJCXJldCA9IGluaXRfY2RldigwLCAiaXBhdGgiLCAmaXBhdGhfZmlsZV9vcHMsICZ3aWxkY2FyZF9jZGV2LAorCQkJCSZ3aWxkY2FyZF9jbGFzc19kZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkIG5vdCBjcmVhdGUgd2lsZGNhcmQgIgorCQkJCSAgICAgICJtaW5vcjogZXJyb3IgJWRcbiIsIC1yZXQpOworCQkJZ290byBiYWlsX2RpYWc7CisJCX0KKworCQlhdG9taWNfc2V0KCZ1c2VyX3NldHVwLCAxKTsKKwl9CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJpcGF0aCVkIiwgZGQtPmlwYXRoX3VuaXQpOworCisJcmV0ID0gaW5pdF9jZGV2KGRkLT5pcGF0aF91bml0ICsgMSwgbmFtZSwgJmlwYXRoX2ZpbGVfb3BzLAorCQkJJmRkLT5jZGV2LCAmZGQtPmNsYXNzX2Rldik7CisJaWYgKHJldCA8IDApCisJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZCBub3QgY3JlYXRlIHVzZXIgbWlub3IgJWQsICVzXG4iLAorCQkJICAgICAgZGQtPmlwYXRoX3VuaXQgKyAxLCBuYW1lKTsKKworCWdvdG8gYmFpbDsKKworYmFpbF9kaWFnOgorCWlwYXRoX2RpYWdfY2xlYW51cCgpOworYmFpbF9zbWE6CisJdXNlcl9jbGVhbnVwKCk7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXBhdGhfdXNlcl9kZWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWNsZWFudXBfY2RldigmZGQtPmNkZXYsICZkZC0+Y2xhc3NfZGV2KTsKKworCWlmIChhdG9taWNfZGVjX3JldHVybigmdXNlcl9jb3VudCkgPT0gMCkgeworCQlpZiAoYXRvbWljX3JlYWQoJnVzZXJfc2V0dXApID09IDApCisJCQlnb3RvIGJhaWw7CisKKwkJY2xlYW51cF9jZGV2KCZ3aWxkY2FyZF9jZGV2LCAmd2lsZGNhcmRfY2xhc3NfZGV2KTsKKwkJaXBhdGhfZGlhZ19jbGVhbnVwKCk7CisJCXVzZXJfY2xlYW51cCgpOworCisJCWF0b21pY19zZXQoJnVzZXJfc2V0dXAsIDApOworCX0KK2JhaWw6CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjc0MTIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKQEAgLTAsMCArMSw2MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKworI2RlZmluZSBJUEFUSEZTX01BR0lDIDB4NzI2YTc3CisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmlwYXRoX3N1cGVyOworCitzdGF0aWMgaW50IGlwYXRoZnNfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSBpbnQgbW9kZSwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJCSB2b2lkICpkYXRhKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKGRpci0+aV9zYik7CisKKwlpZiAoIWlub2RlKSB7CisJCWVycm9yID0gLUVQRVJNOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJaW5vZGUtPmlfdWlkID0gMDsKKwlpbm9kZS0+aV9naWQgPSAwOworCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJaW5vZGUtPmlfYmxvY2tzID0gMDsKKwlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJaWYgKChtb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKSB7CisJCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJZGlyLT5pX25saW5rKys7CisJfQorCisJaW5vZGUtPmlfZm9wID0gZm9wczsKKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJZXJyb3IgPSAwOworCitiYWlsOgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqKmRlbnRyeSwKKwkJICAgICAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsIHZvaWQgKmRhdGEpCit7CisJaW50IGVycm9yOworCisJKmRlbnRyeSA9IE5VTEw7CisJbXV0ZXhfbG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKwkqZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOworCWlmICghSVNfRVJSKGRlbnRyeSkpCisJCWVycm9yID0gaXBhdGhmc19ta25vZChwYXJlbnQtPmRfaW5vZGUsICpkZW50cnksCisJCQkJICAgICAgbW9kZSwgZm9wcywgZGF0YSk7CisJZWxzZQorCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKKwltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0b21pY19zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgJmlwYXRoX3N0YXRzLAorCQkJCSAgICAgICBzaXplb2YgaXBhdGhfc3RhdHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdG9taWNfc3RhdHNfb3BzID0geworCS5yZWFkID0gYXRvbWljX3N0YXRzX3JlYWQsCit9OworCisjZGVmaW5lIE5VTV9DT1VOVEVSUyBzaXplb2Yoc3RydWN0IGluZmluaXBhdGhfY291bnRlcnMpIC8gc2l6ZW9mKHU2NCkKKworc3RhdGljIHNzaXplX3QgYXRvbWljX2NvdW50ZXJzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXU2NCBjb3VudGVyc1tOVU1fQ09VTlRFUlNdOworCXUxNiBpOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKworCWRkID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykKKwkJY291bnRlcnNbaV0gPSBpcGF0aF9zbmFwX2NudHIoZGQsIGkpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIGNvdW50ZXJzLAorCQkJCSAgICAgICBzaXplb2YgY291bnRlcnMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdG9taWNfY291bnRlcnNfb3BzID0geworCS5yZWFkID0gYXRvbWljX2NvdW50ZXJzX3JlYWQsCit9OworCitzdGF0aWMgc3NpemVfdCBhdG9taWNfbm9kZV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1MzIgbm9kZWluZm9bMTBdOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1NjQgZ3VpZDsKKworCWRkID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCWd1aWQgPSBiZTY0X3RvX2NwdShkZC0+aXBhdGhfZ3VpZCk7CisKKwlub2RlaW5mb1swXSA9CQkJLyogQmFzZVZlcnNpb24gaXMgU01BICovCisJCS8qIENsYXNzVmVyc2lvbiBpcyBTTUEgKi8KKwkJKDEgPDwgOCkJCS8qIE5vZGVUeXBlICAqLworCQl8ICgxIDw8IDApOwkJLyogTnVtUG9ydHMgKi8KKwlub2RlaW5mb1sxXSA9ICh1MzIpIChndWlkID4+IDMyKTsKKwlub2RlaW5mb1syXSA9ICh1MzIpIChndWlkICYgMHhmZmZmZmZmZik7CisJLyogUG9ydEdVSUQgPT0gU3lzdGVtSW1hZ2VHVUlEIGZvciB1cyAqLworCW5vZGVpbmZvWzNdID0gbm9kZWluZm9bMV07CisJLyogUG9ydEdVSUQgPT0gU3lzdGVtSW1hZ2VHVUlEIGZvciB1cyAqLworCW5vZGVpbmZvWzRdID0gbm9kZWluZm9bMl07CisJLyogUG9ydEdVSUQgPT0gTm9kZUdVSUQgZm9yIHVzICovCisJbm9kZWluZm9bNV0gPSBub2RlaW5mb1szXTsKKwkvKiBQb3J0R1VJRCA9PSBOb2RlR1VJRCBmb3IgdXMgKi8KKwlub2RlaW5mb1s2XSA9IG5vZGVpbmZvWzRdOworCW5vZGVpbmZvWzddID0gKDQgPDwgMTYpIC8qIHdlIHN1cHBvcnQgNCBwa2V5cyAqLworCQl8IChkZC0+aXBhdGhfZGV2aWNlaWQgPDwgMCk7CisJLyogb3VyIGNoaXAgdmVyc2lvbiBhcyAxNiBiaXRzIG1ham9yLCAxNiBiaXRzIG1pbm9yICovCisJbm9kZWluZm9bOF0gPSBkZC0+aXBhdGhfbWlucmV2IHwgKGRkLT5pcGF0aF9tYWpyZXYgPDwgMTYpOworCW5vZGVpbmZvWzldID0gKGRkLT5pcGF0aF91bml0IDw8IDI0KSB8IChkZC0+aXBhdGhfdmVuZG9yaWQgPDwgMCk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgbm9kZWluZm8sCisJCQkJICAgICAgIHNpemVvZiBub2RlaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0b21pY19ub2RlX2luZm9fb3BzID0geworCS5yZWFkID0gYXRvbWljX25vZGVfaW5mb19yZWFkLAorfTsKKworc3RhdGljIHNzaXplX3QgYXRvbWljX3BvcnRfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJdTMyIHBvcnRpbmZvWzEzXTsKKwl1MzIgdG1wLCB0bXAyOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKworCWRkID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCS8qIHNvIHdlIG9ubHkgaW5pdGlhbGl6ZSBub24temVybyBmaWVsZHMuICovCisJbWVtc2V0KHBvcnRpbmZvLCAwLCBzaXplb2YgcG9ydGluZm8pOworCisJLyoKKwkgKiBOb3RpbXBsIHlldCBNX0tleSAoNjQpCisJICogTm90aW1wbCB5ZXQgR0lEICg2NCkKKwkgKi8KKworCXBvcnRpbmZvWzRdID0gKGRkLT5pcGF0aF9saWQgPDwgMTYpOworCisJLyoKKwkgKiBOb3RpbXBsIHlldCBTTUxJRCAoc2hvdWxkIHdlIHN0b3JlIHRoaXMgaW4gdGhlIGRyaXZlciwgaW4gY2FzZQorCSAqIFNNQSBkaWVzPykgIENhcGFiaWxpdHlNYXNrIGlzIDAsIHdlIGRvbid0IHN1cHBvcnQgYW55IG9mIHRoZXNlCisJICogRGlhZ0NvZGUgaXMgMDsgd2UgZG9uJ3Qgc3RvcmUgYW55IGRpYWcgaW5mbyBmb3Igbm93IE5vdGltcGwgeWV0CisJICogTV9LZXlMZWFzZVBlcmlvZCAod2UgZG9uJ3Qgc3VwcG9ydCBNX0tleSkKKwkgKi8KKworCS8qIExvY2FsUG9ydE51bSBpcyB3aGljaGV2ZXIgcG9ydCBudW1iZXIgdGhleSBhc2sgZm9yICovCisJcG9ydGluZm9bN10gPSAoZGQtPmlwYXRoX3VuaXQgPDwgMjQpCisJCS8qIExpbmtXaWR0aEVuYWJsZWQgKi8KKwkJfCAoMiA8PCAxNikKKwkJLyogTGlua1dpZHRoU3VwcG9ydGVkIChyZWFsbHkgMiwgYnV0IG5vdCBJQiB2YWxpZCkgKi8KKwkJfCAoMyA8PCA4KQorCQkvKiBMaW5rV2lkdGhBY3RpdmUgKi8KKwkJfCAoMiA8PCAwKTsKKwl0bXAgPSBkZC0+aXBhdGhfbGFzdGliY3N0YXQgJiBJUEFUSF9JQlNUQVRFX01BU0s7CisJdG1wMiA9IDU7CisJaWYgKHRtcCA9PSBJUEFUSF9JQlNUQVRFX0lOSVQpCisJCXRtcCA9IDI7CisJZWxzZSBpZiAodG1wID09IElQQVRIX0lCU1RBVEVfQVJNKQorCQl0bXAgPSAzOworCWVsc2UgaWYgKHRtcCA9PSBJUEFUSF9JQlNUQVRFX0FDVElWRSkKKwkJdG1wID0gNDsKKwllbHNlIHsKKwkJdG1wID0gMDsJLyogZG93biAqLworCQl0bXAyID0gdG1wICYgMHhmOworCX0KKworCXBvcnRpbmZvWzhdID0gKDEgPDwgMjgpCS8qIExpbmtTcGVlZFN1cHBvcnRlZCAqLworCQl8ICh0bXAgPDwgMjQpCS8qIFBvcnRTdGF0ZSAqLworCQl8ICh0bXAyIDw8IDIwKQkvKiBQb3J0UGh5c2ljYWxTdGF0ZSAqLworCQl8ICgyIDw8IDE2KQorCisJCS8qIExpbmtEb3duRGVmYXVsdFN0YXRlICovCisJCS8qIE1fS2V5UHJvdGVjdEJpdHMgPT0gMCAqLworCQkvKiBOb3RJbXBsIHlldCBMTUMgPT0gMCAod2UgY2FuIHN1cHBvcnQgYWxsIHZhbHVlcykgKi8KKwkJfCAoMSA8PCA0KQkvKiBMaW5rU3BlZWRBY3RpdmUgKi8KKwkJfCAoMSA8PCAwKTsJLyogTGlua1NwZWVkRW5hYmxlZCAqLworCXN3aXRjaCAoZGQtPmlwYXRoX2libXR1KSB7CisJY2FzZSA0MDk2OgorCQl0bXAgPSA1OworCQlicmVhazsKKwljYXNlIDIwNDg6CisJCXRtcCA9IDQ7CisJCWJyZWFrOworCWNhc2UgMTAyNDoKKwkJdG1wID0gMzsKKwkJYnJlYWs7CisJY2FzZSA1MTI6CisJCXRtcCA9IDI7CisJCWJyZWFrOworCWNhc2UgMjU2OgorCQl0bXAgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogb29wcywgc29tZXRoaW5nIGlzIHdyb25nICovCisJCWlwYXRoX2RiZygiUHJvYmxlbSwgaXBhdGhfaWJtdHUgMHgleCBub3QgYSB2YWxpZCBJQiBNVFUsICIKKwkJCSAgInRyZWF0IGFzIDIwNDhcbiIsIGRkLT5pcGF0aF9pYm10dSk7CisJCXRtcCA9IDQ7CisJCWJyZWFrOworCX0KKwlwb3J0aW5mb1s5XSA9ICh0bXAgPDwgMjgpCisJCS8qIE5laWdoYm9yTVRVICovCisJCS8qIE5vdGltcGwgTWFzdGVyU01TTCAqLworCQl8ICgxIDw8IDIwKQorCisJCS8qIFZMQ2FwICovCisJCS8qIE5vdGltcGwgSW5pdFR5cGUgKGFjdHVhbGx5LCBhbiBTTUEgZGVjaXNpb24pICovCisJCS8qIFZMSGlnaExpbWl0IGlzIDAgKG9ubHkgb25lIFZMKSAqLworCQk7IC8qIFZMQXJiaXRyYXRpb25IaWdoQ2FwIGlzIDAgKG9ubHkgb25lIFZMKSAqLworCXBvcnRpbmZvWzEwXSA9IAkvKiBWTEFyYml0cmF0aW9uTG93Q2FwIGlzIDAgKG9ubHkgb25lIFZMKSAqLworCQkvKiBJbml0VHlwZVJlcGx5IGlzIFNNQSBkZWNpc2lvbiAqLworCQkoNSA8PCAxNikJLyogTVRVQ2FwIDQwOTYgKi8KKwkJfCAoNyA8PCAxMykJLyogVkxTdGFsbENvdW50ICovCisJCXwgKDB4MWYgPDwgOCkJLyogSE9RTGlmZSAqLworCQl8ICgxIDw8IDQpCisKKwkJLyogT3BlcmF0aW9uYWxWTHMgMCAqLworCQkvKiBQYXJ0aXRpb25FbmZvcmNlbWVudEluYm91bmQgKi8KKwkJLyogUGFydGl0aW9uRW5mb3JjZW1lbnRPdXRib3VuZCBub3QgZW5mb3JjZWQgKi8KKwkJLyogRmlsdGVyUmF3aW5ib3VuZCBub3QgZW5mb3JjZWQgKi8KKwkJOwkJLyogRmlsdGVyUmF3T3V0Ym91bmQgbm90IGVuZm9yY2VkICovCisJLyogTV9LZXlWaW9sYXRpb25zIGFyZSBub3QgY291bnRlZCBieSBoYXJkd2FyZSwgU01BIGNhbiBjb3VudCAqLworCXRtcCA9IGlwYXRoX3JlYWRfY3JlZzMyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycnBrZXkpOworCS8qIFBfS2V5VmlvbGF0aW9ucyBhcmUgY291bnRlZCBieSBoYXJkd2FyZS4gKi8KKwlwb3J0aW5mb1sxMV0gPSAoKHRtcCAmIDB4ZmZmZikgPDwgMCk7CisJcG9ydGluZm9bMTJdID0KKwkJLyogUV9LZXlWaW9sYXRpb25zIGFyZSBub3QgY291bnRlZCBieSBoYXJkd2FyZSAqLworCQkoMSA8PCA4KQorCisJCS8qIEdVSURDYXAgKi8KKwkJLyogU3VibmV0VGltZU91dCBoYW5kbGVkIGJ5IFNNQSAqLworCQkvKiBSZXNwVGltZVZhbHVlIGhhbmRsZWQgYnkgU01BICovCisJCTsKKwkvKiBMb2NhbFBoeUVycm9ycyBhcmUgcHJvZ3JhbW1lZCB0byBtYXggKi8KKwlwb3J0aW5mb1sxMl0gfD0gKDB4ZiA8PCAyMCkKKwkJfCAoMHhmIDw8IDE2KSAgIC8qIE92ZXJSdW5FcnJvcnMgYXJlIHByb2dyYW1tZWQgdG8gbWF4ICovCisJCTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBwb3J0aW5mbywKKwkJCQkgICAgICAgc2l6ZW9mIHBvcnRpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXRvbWljX3BvcnRfaW5mb19vcHMgPSB7CisJLnJlYWQgPSBhdG9taWNfcG9ydF9pbmZvX3JlYWQsCit9OworCitzdGF0aWMgc3NpemVfdCBmbGFzaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJc3NpemVfdCByZXQ7CisJbG9mZl90IHBvczsKKwljaGFyICp0bXA7CisKKwlwb3MgPSAqcHBvczsKKworCWlmICggcG9zIDwgMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHBvcyA+PSBzaXplb2Yoc3RydWN0IGlwYXRoX2ZsYXNoKSkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGNvdW50ID4gc2l6ZW9mKHN0cnVjdCBpcGF0aF9mbGFzaCkgLSBwb3MpCisJCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9mbGFzaCkgLSBwb3M7CisKKwl0bXAgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCWlmIChpcGF0aF9lZXByb21fcmVhZChkZCwgcG9zLCB0bXAsIGNvdW50KSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIHJlYWQgZnJvbSBmbGFzaFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBiYWlsX3RtcDsKKwl9CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgdG1wLCBjb3VudCkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsX3RtcDsKKwl9CisKKwkqcHBvcyA9IHBvcyArIGNvdW50OworCXJldCA9IGNvdW50OworCitiYWlsX3RtcDoKKwlrZnJlZSh0bXApOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZsYXNoX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXNzaXplX3QgcmV0OworCWxvZmZfdCBwb3M7CisJY2hhciAqdG1wOworCisJcG9zID0gKnBwb3M7CisKKwlpZiAoIHBvcyA8IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChwb3MgPj0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9mbGFzaCkpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChjb3VudCA+IHNpemVvZihzdHJ1Y3QgaXBhdGhfZmxhc2gpIC0gcG9zKQorCQljb3VudCA9IHNpemVvZihzdHJ1Y3QgaXBhdGhfZmxhc2gpIC0gcG9zOworCisJdG1wID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcih0bXAsIGJ1ZiwgY291bnQpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbF90bXA7CisJfQorCisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCWlmIChpcGF0aF9lZXByb21fd3JpdGUoZGQsIHBvcywgdG1wLCBjb3VudCkpIHsKKwkJcmV0ID0gLUVOWElPOworCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIHdyaXRlIHRvIGZsYXNoXG4iKTsKKwkJZ290byBiYWlsX3RtcDsKKwl9CisKKwkqcHBvcyA9IHBvcyArIGNvdW50OworCXJldCA9IGNvdW50OworCitiYWlsX3RtcDoKKwlrZnJlZSh0bXApOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZsYXNoX29wcyA9IHsKKwkucmVhZCA9IGZsYXNoX3JlYWQsCisJLndyaXRlID0gZmxhc2hfd3JpdGUsCit9OworCitzdGF0aWMgaW50IGNyZWF0ZV9kZXZpY2VfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSAgICAgICBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyLCAqdG1wOworCWNoYXIgdW5pdFsxMF07CisJaW50IHJldDsKKworCXNucHJpbnRmKHVuaXQsIHNpemVvZiB1bml0LCAiJTAyZCIsIGRkLT5pcGF0aF91bml0KTsKKwlyZXQgPSBjcmVhdGVfZmlsZSh1bml0LCBTX0lGRElSfFNfSVJVR098U19JWFVHTywgc2ItPnNfcm9vdCwgJmRpciwKKwkJCSAgKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKikgJnNpbXBsZV9kaXJfb3BlcmF0aW9ucywKKwkJCSAgZGQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcmVhdGVfZmlsZSglcykgZmFpbGVkOiAlZFxuIiwgdW5pdCwgcmV0KTsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IGNyZWF0ZV9maWxlKCJhdG9taWNfY291bnRlcnMiLCBTX0lGUkVHfFNfSVJVR08sIGRpciwgJnRtcCwKKwkJCSAgJmF0b21pY19jb3VudGVyc19vcHMsIGRkKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3JlYXRlX2ZpbGUoJXMvYXRvbWljX2NvdW50ZXJzKSAiCisJCSAgICAgICAiZmFpbGVkOiAlZFxuIiwgdW5pdCwgcmV0KTsKKwkJZ290byBiYWlsOworCX0KKworCXJldCA9IGNyZWF0ZV9maWxlKCJub2RlX2luZm8iLCBTX0lGUkVHfFNfSVJVR08sIGRpciwgJnRtcCwKKwkJCSAgJmF0b21pY19ub2RlX2luZm9fb3BzLCBkZCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNyZWF0ZV9maWxlKCVzL25vZGVfaW5mbykgIgorCQkgICAgICAgImZhaWxlZDogJWRcbiIsIHVuaXQsIHJldCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSBjcmVhdGVfZmlsZSgicG9ydF9pbmZvIiwgU19JRlJFR3xTX0lSVUdPLCBkaXIsICZ0bXAsCisJCQkgICZhdG9taWNfcG9ydF9pbmZvX29wcywgZGQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcmVhdGVfZmlsZSglcy9wb3J0X2luZm8pICIKKwkJICAgICAgICJmYWlsZWQ6ICVkXG4iLCB1bml0LCByZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gY3JlYXRlX2ZpbGUoImZsYXNoIiwgU19JRlJFR3xTX0lXVVNSfFNfSVJVR08sIGRpciwgJnRtcCwKKwkJCSAgJmZsYXNoX29wcywgZGQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcmVhdGVfZmlsZSglcy9mbGFzaCkgIgorCQkgICAgICAgImZhaWxlZDogJWRcbiIsIHVuaXQsIHJldCk7CisJCWdvdG8gYmFpbDsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZpbGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnRtcDsKKworCXRtcCA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKKworCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmdG1wLT5kX2xvY2spOworCWlmICghKGRfdW5oYXNoZWQodG1wKSAmJiB0bXAtPmRfaW5vZGUpKSB7CisJCWRnZXRfbG9ja2VkKHRtcCk7CisJCV9fZF9kcm9wKHRtcCk7CisJCXNwaW5fdW5sb2NrKCZ0bXAtPmRfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNpbXBsZV91bmxpbmsocGFyZW50LT5kX2lub2RlLCB0bXApOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZ0bXAtPmRfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IHJlbW92ZV9kZXZpY2VfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSAgICAgICBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyLCAqcm9vdDsKKwljaGFyIHVuaXRbMTBdOworCWludCByZXQ7CisKKwlyb290ID0gZGdldChzYi0+c19yb290KTsKKwltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKwlzbnByaW50Zih1bml0LCBzaXplb2YgdW5pdCwgIiUwMmQiLCBkZC0+aXBhdGhfdW5pdCk7CisJZGlyID0gbG9va3VwX29uZV9sZW4odW5pdCwgcm9vdCwgc3RybGVuKHVuaXQpKTsKKworCWlmIChJU19FUlIoZGlyKSkgeworCQlyZXQgPSBQVFJfRVJSKGRpcik7CisJCXByaW50ayhLRVJOX0VSUiAiTG9va3VwIG9mICVzIGZhaWxlZFxuIiwgdW5pdCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZW1vdmVfZmlsZShkaXIsICJmbGFzaCIpOworCXJlbW92ZV9maWxlKGRpciwgInBvcnRfaW5mbyIpOworCXJlbW92ZV9maWxlKGRpciwgIm5vZGVfaW5mbyIpOworCXJlbW92ZV9maWxlKGRpciwgImF0b21pY19jb3VudGVycyIpOworCWRfZGVsZXRlKGRpcik7CisJcmV0ID0gc2ltcGxlX3JtZGlyKHJvb3QtPmRfaW5vZGUsIGRpcik7CisKK2JhaWw6CisJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKwlkcHV0KHJvb3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsCisJCQkgICAgICBpbnQgc2lsZW50KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzdGF0aWMgc3RydWN0IHRyZWVfZGVzY3IgZmlsZXNbXSA9IHsKKwkJWzFdID0geyJhdG9taWNfc3RhdHMiLCAmYXRvbWljX3N0YXRzX29wcywgU19JUlVHT30sCisJCXsiIn0sCisJfTsKKworCXJldCA9IHNpbXBsZV9maWxsX3N1cGVyKHNiLCBJUEFUSEZTX01BR0lDLCBmaWxlcyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInNpbXBsZV9maWxsX3N1cGVyIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGQsIHRtcCwgJmlwYXRoX2Rldl9saXN0LCBpcGF0aF9saXN0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjcmVhdGVfZGV2aWNlX2ZpbGVzKHNiLCBkZCk7CisJCWlmIChyZXQpIHsKKwkJCWRlYWN0aXZhdGVfc3VwZXIoc2IpOworCQkJZ290byBiYWlsOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICppcGF0aGZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwkJCQkgICAgICAgIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsCisJCQkJCXZvaWQgKmRhdGEpCit7CisJaXBhdGhfc3VwZXIgPSBnZXRfc2Jfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLAorCQkJCSAgICBpcGF0aGZzX2ZpbGxfc3VwZXIpOworCXJldHVybiBpcGF0aF9zdXBlcjsKK30KKworc3RhdGljIHZvaWQgaXBhdGhmc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3sKKwlraWxsX2xpdHRlcl9zdXBlcihzKTsKKwlpcGF0aF9zdXBlciA9IE5VTEw7Cit9CisKK2ludCBpcGF0aGZzX2FkZF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQ7CisKKwlpZiAoaXBhdGhfc3VwZXIgPT0gTlVMTCkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gY3JlYXRlX2RldmljZV9maWxlcyhpcGF0aF9zdXBlciwgZGQpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aGZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQ7CisKKwlpZiAoaXBhdGhfc3VwZXIgPT0gTlVMTCkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gcmVtb3ZlX2RldmljZV9maWxlcyhpcGF0aF9zdXBlciwgZGQpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBpcGF0aGZzX2ZzX3R5cGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImlwYXRoZnMiLAorCS5nZXRfc2IgPQlpcGF0aGZzX2dldF9zYiwKKwkua2lsbF9zYiA9CWlwYXRoZnNfa2lsbF9zdXBlciwKK307CisKK2ludCBfX2luaXQgaXBhdGhfaW5pdF9pcGF0aGZzKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmlwYXRoZnNfZnNfdHlwZSk7Cit9CisKK3ZvaWQgX19leGl0IGlwYXRoX2V4aXRfaXBhdGhmcyh2b2lkKQoreworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmaXBhdGhmc19mc190eXBlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9odDQwMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjMGEyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9odDQwMC5jCkBAIC0wLDAgKzEsMTYwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBjb2RlIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIEluZmluaVBhdGgKKyAqIEhULTQwMCBjaGlwLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBhdGhfcmVnaXN0ZXJzLmgiCisKKy8qCisgKiBUaGlzIGxpc3RzIHRoZSBJbmZpbmlQYXRoIEhUNDAwIHJlZ2lzdGVycywgaW4gdGhlIGFjdHVhbCBjaGlwIGxheW91dC4KKyAqIFRoaXMgc3RydWN0dXJlIHNob3VsZCBuZXZlciBiZSBkaXJlY3RseSBhY2Nlc3NlZC4KKyAqCisgKiBUaGUgbmFtZXMgYXJlIGluIEludGVyQ2FwIGZvcm0gYmVjYXVzZSB0aGV5J3JlIHRha2VuIHN0cmFpZ2h0IGZyb20KKyAqIHRoZSBjaGlwIHNwZWNpZmljYXRpb24uICBTaW5jZSB0aGV5J3JlIG9ubHkgdXNlZCBpbiB0aGlzIGZpbGUsIHRoZXkKKyAqIGRvbid0IHBvbGx1dGUgdGhlIHJlc3Qgb2YgdGhlIHNvdXJjZS4KKyovCisKK3N0cnVjdCBfaW5maW5pcGF0aF9kb19ub3RfdXNlX2tlcm5lbF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmV2aXNpb247CisJdW5zaWduZWQgbG9uZyBsb25nIENvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBsb25nIFBhZ2VBbGlnbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUG9ydENudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRGVidWdQb3J0U2VsZWN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBEZWJ1Z1BvcnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRSZWdCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBVc2VyUmVnQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgQ291bnRlclJlZ0Jhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFNjcmF0Y2g7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkTWlzYzE7CisJdW5zaWduZWQgbG9uZyBsb25nIEludGVycnVwdENvbmZpZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50QmxvY2tlZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50TWFzazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50U3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRDbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXJyb3JNYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFcnJvclN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXJyb3JDbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdFcnJNYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0VyclN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdFcnJDbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdEaWFnQ3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgTURJTzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSUJDU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQkNDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFeHRTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEV4dEN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9PdXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9NYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBHUElPU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBHUElPQ2xlYXI7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkJUSFFQOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJTaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckVudFNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdlRJREJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdlRJRENudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2RWdyQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2RWdyQ250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZCdWZCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZCdWZTaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSeEludE1lbUJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJ4SW50TWVtU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2UGFydGl0aW9uS2V5OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZFJjdlsxMF07CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kUElPQnVmQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFBJT1NpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRQSU9CdWZDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRQSU9BdmFpbEFkZHI7CisJdW5zaWduZWQgbG9uZyBsb25nIFR4SW50TWVtQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgVHhJbnRNZW1TaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZFNlbmRbOV07CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRCdWZmZXJFcnJvcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZmZlckVycm9yQ09OVDE7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRCdWZmZXJFcnJvckNPTlQyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kQnVmZmVyRXJyb3JDT05UMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWRTQkVbNF07CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHIwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjI7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHIzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyNDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHI2OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyNzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjg7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkUkhBWzddOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjA7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHIyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjM7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyNDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHI1OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjY7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyNzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHI4OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZFJIVEFbN107CisJdW5zaWduZWQgbG9uZyBsb25nIFN5bmM7CS8qIFNvZnR3YXJlIG9ubHkgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgRHVtcDsJLyogU29mdHdhcmUgb25seSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBTaW1WZXI7CS8qIFNvZnR3YXJlIG9ubHkgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWRTV1s1XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VyZGVzQ29uZmlnMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VyZGVzQ29uZmlnMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VyZGVzU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBYR1hTQ29uZmlnOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZFNXMls0XTsKK307CisKKyNkZWZpbmUgSVBBVEhfS1JFR19PRkZTRVQoZmllbGQpIChvZmZzZXRvZihzdHJ1Y3QgXAorICAgIF9pbmZpbmlwYXRoX2RvX25vdF91c2Vfa2VybmVsX3JlZ3MsIGZpZWxkKSAvIHNpemVvZih1NjQpKQorI2RlZmluZSBJUEFUSF9DUkVHX09GRlNFVChmaWVsZCkgKG9mZnNldG9mKCBcCisgICAgc3RydWN0IGluZmluaXBhdGhfY291bnRlcnMsIGZpZWxkKSAvIHNpemVvZih1NjQpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlwYXRoX2tyZWdzIGlwYXRoX2h0X2tyZWdzID0geworCS5rcl9jb250cm9sID0gSVBBVEhfS1JFR19PRkZTRVQoQ29udHJvbCksCisJLmtyX2NvdW50ZXJyZWdiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoQ291bnRlclJlZ0Jhc2UpLAorCS5rcl9kZWJ1Z3BvcnQgPSBJUEFUSF9LUkVHX09GRlNFVChEZWJ1Z1BvcnQpLAorCS5rcl9kZWJ1Z3BvcnRzZWxlY3QgPSBJUEFUSF9LUkVHX09GRlNFVChEZWJ1Z1BvcnRTZWxlY3QpLAorCS5rcl9lcnJvcmNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JDbGVhciksCisJLmtyX2Vycm9ybWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEVycm9yTWFzayksCisJLmtyX2Vycm9yc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JTdGF0dXMpLAorCS5rcl9leHRjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoRXh0Q3RybCksCisJLmtyX2V4dHN0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKEV4dFN0YXR1cyksCisJLmtyX2dwaW9fY2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPQ2xlYXIpLAorCS5rcl9ncGlvX21hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPTWFzayksCisJLmtyX2dwaW9fb3V0ID0gSVBBVEhfS1JFR19PRkZTRVQoR1BJT091dCksCisJLmtyX2dwaW9fc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoR1BJT1N0YXR1cyksCisJLmtyX2h3ZGlhZ2N0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChId0RpYWdDdHJsKSwKKwkua3JfaHdlcnJjbGVhciA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyQ2xlYXIpLAorCS5rcl9od2Vycm1hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChId0Vyck1hc2spLAorCS5rcl9od2VycnN0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyU3RhdHVzKSwKKwkua3JfaWJjY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKElCQ0N0cmwpLAorCS5rcl9pYmNzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChJQkNTdGF0dXMpLAorCS5rcl9pbnRibG9ja2VkID0gSVBBVEhfS1JFR19PRkZTRVQoSW50QmxvY2tlZCksCisJLmtyX2ludGNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoSW50Q2xlYXIpLAorCS5rcl9pbnRlcnJ1cHRjb25maWcgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRlcnJ1cHRDb25maWcpLAorCS5rcl9pbnRtYXNrID0gSVBBVEhfS1JFR19PRkZTRVQoSW50TWFzayksCisJLmtyX2ludHN0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKEludFN0YXR1cyksCisJLmtyX21kaW8gPSBJUEFUSF9LUkVHX09GRlNFVChNRElPKSwKKwkua3JfcGFnZWFsaWduID0gSVBBVEhfS1JFR19PRkZTRVQoUGFnZUFsaWduKSwKKwkua3JfcGFydGl0aW9ua2V5ID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2UGFydGl0aW9uS2V5KSwKKwkua3JfcG9ydGNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFBvcnRDbnQpLAorCS5rcl9yY3ZidGhxcCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkJUSFFQKSwKKwkua3JfcmN2YnVmYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkJ1ZkJhc2UpLAorCS5rcl9yY3ZidWZzaXplID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QnVmU2l6ZSksCisJLmtyX3JjdmN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZDdHJsKSwKKwkua3JfcmN2ZWdyYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkVnckJhc2UpLAorCS5rcl9yY3ZlZ3JjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZFZ3JDbnQpLAorCS5rcl9yY3ZoZHJjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJDbnQpLAorCS5rcl9yY3ZoZHJlbnRzaXplID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2SGRyRW50U2l6ZSksCisJLmtyX3JjdmhkcnNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJTaXplKSwKKwkua3JfcmN2aW50bWVtYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJ4SW50TWVtQmFzZSksCisJLmtyX3JjdmludG1lbXNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSeEludE1lbVNpemUpLAorCS5rcl9yY3Z0aWRiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2VElEQmFzZSksCisJLmtyX3JjdnRpZGNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdlRJRENudCksCisJLmtyX3JldmlzaW9uID0gSVBBVEhfS1JFR19PRkZTRVQoUmV2aXNpb24pLAorCS5rcl9zY3JhdGNoID0gSVBBVEhfS1JFR19PRkZTRVQoU2NyYXRjaCksCisJLmtyX3NlbmRidWZmZXJlcnJvciA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlbmRCdWZmZXJFcnJvciksCisJLmtyX3NlbmRjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZEN0cmwpLAorCS5rcl9zZW5kcGlvYXZhaWxhZGRyID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT0F2YWlsQWRkciksCisJLmtyX3NlbmRwaW9idWZiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT0J1ZkJhc2UpLAorCS5rcl9zZW5kcGlvYnVmY250ID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT0J1ZkNudCksCisJLmtyX3NlbmRwaW9zaXplID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT1NpemUpLAorCS5rcl9zZW5kcmVnYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlbmRSZWdCYXNlKSwKKwkua3JfdHhpbnRtZW1iYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoVHhJbnRNZW1CYXNlKSwKKwkua3JfdHhpbnRtZW1zaXplID0gSVBBVEhfS1JFR19PRkZTRVQoVHhJbnRNZW1TaXplKSwKKwkua3JfdXNlcnJlZ2Jhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChVc2VyUmVnQmFzZSksCisJLmtyX3NlcmRlc2NvbmZpZzAgPSBJUEFUSF9LUkVHX09GRlNFVChTZXJkZXNDb25maWcwKSwKKwkua3Jfc2VyZGVzY29uZmlnMSA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlcmRlc0NvbmZpZzEpLAorCS5rcl9zZXJkZXNzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChTZXJkZXNTdGF0dXMpLAorCS5rcl94Z3hzY29uZmlnID0gSVBBVEhfS1JFR19PRkZTRVQoWEdYU0NvbmZpZyksCisJLyoKKwkgKiBUaGVzZSBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgdmlhIGlwYXRoX3JlYWRfa3JlZzY0KCksCisJICogdXNlIHRoZW0gd2l0aCBpcGF0aF9yZWFkX2tyZWc2NF9wb3J0KCksCisJICovCisJLmtyX3JjdmhkcmFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJBZGRyMCksCisJLmtyX3JjdmhkcnRhaWxhZGRyID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2SGRyVGFpbEFkZHIwKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpcGF0aF9jcmVncyBpcGF0aF9odF9jcmVncyA9IHsKKwkuY3JfYmFkZm9ybWF0Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhCYWRGb3JtYXRDbnQpLAorCS5jcl9lcnJpY3JjY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhJQ1JDRXJyQ250KSwKKwkuY3JfZXJybGlua2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TGlua1Byb2JsZW1DbnQpLAorCS5jcl9lcnJscGNyY2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TFBDUkNFcnJDbnQpLAorCS5jcl9lcnJwa2V5ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhQS2V5TWlzbWF0Y2hDbnQpLAorCS5jcl9lcnJyY3ZmbG93Y3RybGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4Rmxvd0N0cmxFcnJDbnQpLAorCS5jcl9lcnJfcmxlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TGVuRXJyQ250KSwKKwkuY3JfZXJyc2xlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4TGVuRXJyQ250KSwKKwkuY3JfZXJydGlkZnVsbCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4VElERnVsbEVyckNudCksCisJLmNyX2VycnRpZHZhbGlkID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhUSURWYWxpZEVyckNudCksCisJLmNyX2VycnZjcmNjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeFZDUkNFcnJDbnQpLAorCS5jcl9pYnN0YXR1c2NoYW5nZSA9IElQQVRIX0NSRUdfT0ZGU0VUKElCU3RhdHVzQ2hhbmdlQ250KSwKKwkvKiBjYWxjIGZyb20gUmVnX0NvdW50ZXJSZWdCYXNlICsgb2Zmc2V0ICovCisJLmNyX2ludGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKExCSW50Q250KSwKKwkuY3JfaW52YWxpZHJsZW5jbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeE1heE1pbkxlbkVyckNudCksCisJLmNyX2ludmFsaWRzbGVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhNYXhNaW5MZW5FcnJDbnQpLAorCS5jcl9sYmZsb3dzdGFsbGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKExCRmxvd1N0YWxsQ250KSwKKwkuY3JfcGt0cmN2Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhEYXRhUGt0Q250KSwKKwkuY3JfcGt0cmN2Zmxvd2N0cmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEZsb3dQa3RDbnQpLAorCS5jcl9wa3RzZW5kY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhEYXRhUGt0Q250KSwKKwkuY3JfcGt0c2VuZGZsb3djbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeEZsb3dQa3RDbnQpLAorCS5jcl9wb3J0b3ZmbGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4UDBIZHJFZ3JPdmZsQ250KSwKKwkuY3JfcmN2ZWJwY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhFQlBDbnQpLAorCS5jcl9yY3ZvdmZsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhCdWZPdmZsQ250KSwKKwkuY3Jfc2VuZGRyb3BwZWQgPSBJUEFUSF9DUkVHX09GRlNFVChUeERyb3BwZWRQa3RDbnQpLAorCS5jcl9zZW5kc3RhbGxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeEZsb3dTdGFsbENudCksCisJLmNyX3NlbmR1bmRlcnJ1bmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4VW5kZXJydW5DbnQpLAorCS5jcl93b3JkcmN2Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhEd29yZENudCksCisJLmNyX3dvcmRzZW5kY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhEd29yZENudCksCisJLmNyX3Vuc3VwdmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeFVuc3VwVkxFcnJDbnQpLAorCS5jcl9yeGRyb3Bwa3RjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeERyb3BwZWRQa3RDbnQpLAorCS5jcl9pYmxpbmtlcnJyZWNvdmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKElCTGlua0VyclJlY292ZXJ5Q250KSwKKwkuY3JfaWJsaW5rZG93bmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKElCTGlua0Rvd25lZENudCksCisJLmNyX2lic3ltYm9sZXJyY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJTeW1ib2xFcnJDbnQpCit9OworCisvKiBrcl9pbnRzdGF0dXMsIGtyX2ludGNsZWFyLCBrcl9pbnRtYXNrIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLIDB4MUZGCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLIDB4MUZGCisKKy8qIGtyX2h3ZXJyY2xlYXIsIGtyX2h3ZXJybWFzaywga3JfaHdlcnJzdGF0dXMsIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX01BU0sgMHgzRkZGRkZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQUJZVEUwQ1JDRVJSICAgMHgwMDAwMDAwMDAwODAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ0xOS0FCWVRFMUNSQ0VSUiAgIDB4MDAwMDAwMDAwMTAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENMTktCQllURTBDUkNFUlIgICAweDAwMDAwMDAwMDIwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTE5LQkJZVEUxQ1JDRVJSICAgMHgwMDAwMDAwMDA0MDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI0ICAgICAgICAgIDB4MDAwMDAwMDAwODAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNSAgICAgICAgICAweDAwMDAwMDAwMTAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjYgICAgICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI3ICAgICAgICAgIDB4MDAwMDAwMDA0MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENCVVNUUkVRUEFSSVRZRVJSICAweDAwMDAwMDAwODAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRDQlVTVFJFU1BQQVJJVFlFUlIgMHgwMDAwMDAwMTAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ0JVU0lSRVFQQVJJVFlFUlIgIDB4MDAwMDAwMDIwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCAgICAgICAweDAwODAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9SRlNMSVAgICAgICAgMHgwMTAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQlBMTF9GQlNMSVAgICAgICAgIDB4MDIwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVEJQTExfUkZTTElQICAgICAgICAweDA0MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSFRBUExMX0ZCU0xJUCAgICAgICAgMHgwODAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQVBMTF9SRlNMSVAgICAgICAgIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQgICAgICAweDIwMDAwMDAwMDAwMDAwMDBVTEwKKworLyoga3JfZXh0c3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX0ZSRVFTRUwgMHgyCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19TRVJERVNTRUwgMHg0CisjZGVmaW5lIElORklOSVBBVEhfRVhUU19NRU1CSVNUX0VORFRFU1QgICAgIDB4MDAwMDAwMDAwMDAwNDAwMAorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9DT1JSRUNUICAgICAweDAwMDAwMDAwMDAwMDgwMDAKKworLyoKKyAqIG1hc2tzIGFuZCBiaXRzIHRoYXQgYXJlIGRpZmZlcmVudCBpbiBkaWZmZXJlbnQgY2hpcHMsIG9yIHByZXNlbnQgb25seQorICogaW4gb25lCisgKi8KK3N0YXRpYyBjb25zdCBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2h3ZV9odGNtZW1wYXJpdHllcnJfbWFzayA9CisgICAgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX01BU0s7CitzdGF0aWMgY29uc3QgaXBhdGhfZXJyX3QgaW5maW5pcGF0aF9od2VfaHRjbWVtcGFyaXR5ZXJyX3NoaWZ0ID0KKyAgICBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfU0hJRlQ7CisKK3N0YXRpYyBjb25zdCBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2h3ZV9odGNsbmthYnl0ZTBjcmNlcnIgPQorICAgIElORklOSVBBVEhfSFdFX0hUQ0xOS0FCWVRFMENSQ0VSUjsKK3N0YXRpYyBjb25zdCBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2h3ZV9odGNsbmthYnl0ZTFjcmNlcnIgPQorICAgIElORklOSVBBVEhfSFdFX0hUQ0xOS0FCWVRFMUNSQ0VSUjsKK3N0YXRpYyBjb25zdCBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2h3ZV9odGNsbmtiYnl0ZTBjcmNlcnIgPQorICAgIElORklOSVBBVEhfSFdFX0hUQ0xOS0JCWVRFMENSQ0VSUjsKK3N0YXRpYyBjb25zdCBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2h3ZV9odGNsbmtiYnl0ZTFjcmNlcnIgPQorICAgIElORklOSVBBVEhfSFdFX0hUQ0xOS0JCWVRFMUNSQ0VSUjsKKworI2RlZmluZSBfSVBBVEhfR1BJT19TREFfTlVNIDEKKyNkZWZpbmUgX0lQQVRIX0dQSU9fU0NMX05VTSAwCisKKyNkZWZpbmUgSVBBVEhfR1BJT19TREEgXAorCSgxVUxMIDw8IChfSVBBVEhfR1BJT19TREFfTlVNK0lORklOSVBBVEhfRVhUQ19HUElPT0VfU0hJRlQpKQorI2RlZmluZSBJUEFUSF9HUElPX1NDTCBcCisJKDFVTEwgPDwgKF9JUEFUSF9HUElPX1NDTF9OVU0rSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCkpCisKKy8qIGtlZXAgdGhlIGNvZGUgYmVsb3cgc29tZXdoYXQgbW9yZSByZWFkb25hYmxlOyBub3QgdXNlZCBlbHNld2hlcmUgKi8KKyNkZWZpbmUgX0lQQVRIX0hUTElOSzBfQ1JDQklUUyAoaW5maW5pcGF0aF9od2VfaHRjbG5rYWJ5dGUwY3JjZXJyIHwJXAorCQkJCWluZmluaXBhdGhfaHdlX2h0Y2xua2FieXRlMWNyY2VycikKKyNkZWZpbmUgX0lQQVRIX0hUTElOSzFfQ1JDQklUUyAoaW5maW5pcGF0aF9od2VfaHRjbG5rYmJ5dGUwY3JjZXJyIHwJXAorCQkJCWluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMWNyY2VycikKKyNkZWZpbmUgX0lQQVRIX0hUTEFORTBfQ1JDQklUUyAoaW5maW5pcGF0aF9od2VfaHRjbG5rYWJ5dGUwY3JjZXJyIHwJXAorCQkJCWluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMGNyY2VycikKKyNkZWZpbmUgX0lQQVRIX0hUTEFORTFfQ1JDQklUUyAoaW5maW5pcGF0aF9od2VfaHRjbG5rYWJ5dGUxY3JjZXJyIHwJXAorCQkJCWluZmluaXBhdGhfaHdlX2h0Y2xua2JieXRlMWNyY2VycikKKworc3RhdGljIHZvaWQgaHdlcnJfY3JjYml0cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2Vycl90IGh3ZXJycywKKwkJCSAgY2hhciAqbXNnLCBzaXplX3QgbXNnbCkKK3sKKwljaGFyIGJpdHNtc2dbNjRdOworCWlwYXRoX2Vycl90IGNyY2JpdHMgPSBod2VycnMgJgorCQkoX0lQQVRIX0hUTElOSzBfQ1JDQklUUyB8IF9JUEFUSF9IVExJTksxX0NSQ0JJVFMpOworCS8qIGRvbid0IGNoZWNrIGlmIDhiaXQgSFQgKi8KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfOEJJVF9JTl9IVDApCisJCWNyY2JpdHMgJj0gfmluZmluaXBhdGhfaHdlX2h0Y2xua2FieXRlMWNyY2VycjsKKwkvKiBkb24ndCBjaGVjayBpZiA4Yml0IEhUICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzhCSVRfSU5fSFQxKQorCQljcmNiaXRzICY9IH5pbmZpbmlwYXRoX2h3ZV9odGNsbmtiYnl0ZTFjcmNlcnI7CisJLyoKKwkgKiB3ZSdsbCB3YW50IHRvIGlnbm9yZSBsaW5rIGVycm9ycyBvbiBsaW5rIHRoYXQgaXMKKwkgKiBub3QgaW4gdXNlLCBpZiBhbnkuICBGb3Igbm93LCBjb21wbGFpbiBhYm91dCBib3RoCisJICovCisJaWYgKGNyY2JpdHMpIHsKKwkJdTE2IGN0cmwwLCBjdHJsMTsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csCisJCQkgIltIVCVzIGxhbmUgJXMgQ1JDICglbGx4KTsgaWdub3JlIHRpbGwgcmVsb2FkXSIsCisJCQkgIShjcmNiaXRzICYgX0lQQVRIX0hUTElOSzFfQ1JDQklUUykgPworCQkJICIwIChBKSIgOiAoIShjcmNiaXRzICYgX0lQQVRIX0hUTElOSzBfQ1JDQklUUykKKwkJCQkgICAgPyAiMSAoQikiIDogIjArMSAoQStCKSIpLAorCQkJICEoY3JjYml0cyAmIF9JUEFUSF9IVExBTkUxX0NSQ0JJVFMpID8gIjAiCisJCQkgOiAoIShjcmNiaXRzICYgX0lQQVRIX0hUTEFORTBfQ1JDQklUUykgPyAiMSIgOgorCQkJICAgICIwKzEiKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3JjYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKworCQkvKgorCQkgKiBwcmludCBleHRyYSBpbmZvIGZvciBkZWJ1Z2dpbmcuICBzbGF2ZS9wcmltYXJ5CisJCSAqIGNvbmZpZyB3b3JkIDQsIDggKGxpbmsgY29udHJvbCAwLCAxKQorCQkgKi8KKworCQlpZiAocGNpX3JlYWRfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwKKwkJCQkJIGRkLT5pcGF0aF9odF9zbGF2ZV9vZmYgKyAweDQsCisJCQkJCSAmY3RybDApKQorCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkNvdWxkbid0IHJlYWQgIgorCQkJCSAibGlua2N0cmwwIG9mIHNsYXZlL3ByaW1hcnkgIgorCQkJCSAiY29uZmlnIGJsb2NrXG4iKTsKKwkJZWxzZSBpZiAoIShjdHJsMCAmIDEgPDwgNikpCisJCQkvKiBub3QgaWYgRU9DIGJpdCBzZXQgKi8KKwkJCWlwYXRoX2RiZygiSFQgbGlua2N0cmwwIDB4JXglcyVzXG4iLCBjdHJsMCwKKwkJCQkgICgoY3RybDAgPj4gOCkgJiA3KSA/ICIgQ1JDIiA6ICIiLAorCQkJCSAgKChjdHJsMCA+PiA0KSAmIDEpID8gImxpbmtmYWlsIiA6CisJCQkJICAiIik7CisJCWlmIChwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LAorCQkJCQkgZGQtPmlwYXRoX2h0X3NsYXZlX29mZiArIDB4OCwKKwkJCQkJICZjdHJsMSkpCisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQ291bGRuJ3QgcmVhZCAiCisJCQkJICJsaW5rY3RybDEgb2Ygc2xhdmUvcHJpbWFyeSAiCisJCQkJICJjb25maWcgYmxvY2tcbiIpOworCQllbHNlIGlmICghKGN0cmwxICYgMSA8PCA2KSkKKwkJCS8qIG5vdCBpZiBFT0MgYml0IHNldCAqLworCQkJaXBhdGhfZGJnKCJIVCBsaW5rY3RybDEgMHgleCVzJXNcbiIsIGN0cmwxLAorCQkJCSAgKChjdHJsMSA+PiA4KSAmIDcpID8gIiBDUkMiIDogIiIsCisJCQkJICAoKGN0cmwxID4+IDQpICYgMSkgPyAibGlua2ZhaWwiIDoKKwkJCQkgICIiKTsKKworCQkvKiBkaXNhYmxlIHVudGlsIGRyaXZlciByZWxvYWRlZCAqLworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH5jcmNiaXRzOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJCWlwYXRoX2RiZygiSFQgY3JjIGVycnM6ICVzXG4iLCBtc2cpOworCX0gZWxzZQorCQlpcGF0aF9kYmcoImlnbm9yaW5nIEhUIGNyYyBlcnJvcnMgMHglbGx4LCAiCisJCQkgICJub3QgaW4gdXNlXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAoaHdlcnJzICYgKF9JUEFUSF9IVExJTkswX0NSQ0JJVFMgfAorCQkJCSAgICAgX0lQQVRIX0hUTElOSzFfQ1JDQklUUykpKTsKK30KKworLyoqCisgKiBpcGF0aF9odF9oYW5kbGVfaHdlcnJvcnMgLSBkaXNwbGF5IGhhcmR3YXJlIGVycm9ycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBtc2c6IHRoZSBvdXRwdXQgYnVmZmVyCisgKiBAbXNnbDogdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBVc2Ugc2FtZSBtc2cgYnVmZmVyIGFzIHJlZ3VsYXIgZXJyb3JzIHRvIGF2b2lkCisgKiBleGNlc3NpdmUgc3RhY2sgdXNlLiAgTW9zdCBoYXJkd2FyZSBlcnJvcnMgYXJlIGNhdGFzdHJvcGhpYywgYnV0IGZvcgorICogcmlnaHQgbm93LCB3ZSdsbCBwcmludCB0aGVtIGFuZCBjb250aW51ZS4KKyAqIFdlIHJldXNlIHRoZSBzYW1lIG1lc3NhZ2UgYnVmZmVyIGFzIGlwYXRoX2hhbmRsZV9lcnJvcnMoKSB0byBhdm9pZAorICogZXhjZXNzaXZlIHN0YWNrIHVzYWdlLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9odF9oYW5kbGVfaHdlcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBjaGFyICptc2csCisJCQkJICAgICBzaXplX3QgbXNnbCkKK3sKKwlpcGF0aF9lcnJfdCBod2VycnM7CisJdTMyIGJpdHMsIGN0cmw7CisJaW50IGlzZmF0YWwgPSAwOworCWNoYXIgYml0c21zZ1s2NF07CisKKwlod2VycnMgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycnN0YXR1cyk7CisKKwlpZiAoIWh3ZXJycykgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJDYWxsZWQgYnV0IG5vIGhhcmR3YXJlIGVycm9ycyBzZXRcbiIpOworCQkvKgorCQkgKiBiZXR0ZXIgdGhhbiBwcmludGluZyBjb2Z1c2luZyBtZXNzYWdlcworCQkgKiBUaGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gY2xlYXJpbmcgdGhlIGNyYyBlcnJvciwgb3IKKwkJICogdGhlIHBsbCBlcnJvciBkdXJpbmcgaW5pdC4KKwkJICovCisJCWdvdG8gYmFpbDsKKwl9IGVsc2UgaWYgKGh3ZXJycyA9PSAtMUxMKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJSZWFkIG9mIGhhcmR3YXJlIGVycm9yIHN0YXR1cyBmYWlsZWQgIgorCQkJICAgICAgIihhbGwgYml0cyBzZXQpOyBpZ25vcmluZ1xuIik7CisJCWdvdG8gYmFpbDsKKwl9CisJaXBhdGhfc3RhdHMuc3BzX2h3ZXJycysrOworCisJLyogQWx3YXlzIGNsZWFyIHRoZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIsIGV4Y2VwdCBNRU1CSVNURkFJTCwKKwkgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgY29udGludWUgb3Igc3RvcCB1c2luZyB0aGUgY2hpcC4KKwkgKiBXZSB3YW50IHRoYXQgc2V0IHNvIHdlIGtub3cgaXQgZmFpbGVkLCBldmVuIGFjcm9zcyBkcml2ZXIgcmVsb2FkLgorCSAqIFdlJ2xsIHN0aWxsIGlnbm9yZSBpdCBpbiB0aGUgaHdlcnJtYXNrLiAgV2UgZG8gdGhpcyBwYXJ0bHkgZm9yCisJICogZGlhZ25vc3RpY3MsIGJ1dCBhbHNvIGZvciBzdXBwb3J0ICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycmNsZWFyLAorCQkJIGh3ZXJycyZ+SU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCk7CisKKwlod2VycnMgJj0gZGQtPmlwYXRoX2h3ZXJybWFzazsKKworCS8qCisJICogbWFrZSBzdXJlIHdlIGdldCB0aGlzIG11Y2ggb3V0LCB1bmxlc3MgdG9sZCB0byBiZSBxdWlldCwKKwkgKiBvciBpdCdzIG9jY3VycmVkIHdpdGhpbiB0aGUgbGFzdCA1IHNlY29uZHMKKwkgKi8KKwlpZiAoKGh3ZXJycyAmIH5kZC0+aXBhdGhfbGFzdGh3ZXJyb3IpIHx8CisJICAgIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfVkVSQkRCRykpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJIYXJkd2FyZSBlcnJvcjogaHdlcnI9MHglbGx4ICIKKwkJCSAiKGNsZWFyZWQpXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBod2VycnMpOworCWRkLT5pcGF0aF9sYXN0aHdlcnJvciB8PSBod2VycnM7CisKKwlpZiAoaHdlcnJzICYgfmluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJod2Vycm9yIGludGVycnVwdCB3aXRoIHVua25vd24gZXJyb3JzICIKKwkJCSAgICAgICIlbGx4IHNldFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICAgIChod2VycnMgJiB+aW5maW5pcGF0aF9od2VfYml0c2V4dGFudCkpOworCisJY3RybCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wpOworCWlmIChjdHJsICYgSU5GSU5JUEFUSF9DX0ZSRUVaRU1PREUpIHsKKwkJaWYgKGh3ZXJycykgeworCQkJLyoKKwkJCSAqIGlmIGFueSBzZXQgdGhhdCB3ZSBhcmVuJ3QgaWdub3Jpbmc7IG9ubHkKKwkJCSAqIG1ha2UgdGhlIGNvbXBsYWludCBvbmNlLCBpbiBjYXNlIGl0J3Mgc3R1Y2sKKwkJCSAqIG9yIHJlY3VycmluZywgYW5kIHdlIGdldCBoZXJlIG11bHRpcGxlCisJCQkgKiB0aW1lcy4KKwkJCSAqLworCQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpIHsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmF0YWwgRXJyb3IgKGZyZWV6ZSAiCisJCQkJCSAgICAgICJtb2RlKSwgbm8gbG9uZ2VyIHVzYWJsZVxuIik7CisJCQkJaXNmYXRhbCA9IDE7CisJCQl9CisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9SRUFEWTsKKwkJCS8qIG1hcmsgYXMgaGF2aW5nIGhhZCBlcnJvciAqLworCQkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19IV0VSUk9SOworCQkJLyoKKwkJCSAqIG1hcmsgYXMgbm90IHVzYWJsZSwgYXQgYSBtaW5pbXVtIHVudGlsIGRyaXZlcgorCQkJICogaXMgcmVsb2FkZWQsIHByb2JhYmx5IHVudGlsIHJlYm9vdCwgc2luY2Ugbm8KKwkJCSAqIG90aGVyIHJlc2V0IGlzIHBvc3NpYmxlLgorCQkJICovCisJCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX0lOSVRURUQ7CisJCX0gZWxzZSB7CisJCQlpcGF0aF9kYmcoIkNsZWFyaW5nIGZyZWV6ZW1vZGUgb24gaWdub3JlZCBoYXJkd2FyZSAiCisJCQkJICAiZXJyb3JcbiIpOworCQkJY3RybCAmPSB+SU5GSU5JUEFUSF9DX0ZSRUVaRU1PREU7CisJCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkJCSBjdHJsKTsKKwkJfQorCX0KKworCSptc2cgPSAnXDAnOworCisJLyoKKwkgKiBtYXkgc29tZWRheSB3YW50IHRvIGRlY29kZSBpbnRvIHdoaWNoIGJpdHMgYXJlIHdoaWNoCisJICogZnVuY3Rpb25hbCBhcmVhIGZvciBwYXJpdHkgZXJyb3JzLCBldGMuCisJICovCisJaWYgKGh3ZXJycyAmIChpbmZpbmlwYXRoX2h3ZV9odGNtZW1wYXJpdHllcnJfbWFzaworCQkgICAgICA8PCBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCWJpdHMgPSAodTMyKSAoKGh3ZXJycyA+PgorCQkJICAgICAgIElORklOSVBBVEhfSFdFX0hUQ01FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX01BU0spOworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywgIltIVEMgUGFyaXR5IEVycnMgJXhdICIsCisJCQkgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSworCQkgICAgICA8PCBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCWJpdHMgPSAodTMyKSAoKGh3ZXJycyA+PgorCQkJICAgICAgIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0spOworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywgIltSWEUgUGFyaXR5IEVycnMgJXhdICIsCisJCQkgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSworCQkgICAgICA8PCBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCWJpdHMgPSAodTMyKSAoKGh3ZXJycyA+PgorCQkJICAgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01BU0spOworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywgIltUWEUgUGFyaXR5IEVycnMgJXhdICIsCisJCQkgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCQ0JVU1RPU1BDUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltJQjJJUEFUSCBQYXJpdHldIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCQ0JVU0ZSU1BDUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltJUEFUSDJJQiBQYXJpdHldIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0hUQ0JVU0lSRVFQQVJJVFlFUlIpCisJCXN0cmxjYXQobXNnLCAiW0hUQyBJcmVxIFBhcml0eV0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDQlVTVFJFUVBBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJbSFRDIFRyZXEgUGFyaXR5XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9IVENCVVNUUkVTUFBBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJbSFRDIFRyZXNwIFBhcml0eV0iLCBtc2dsKTsKKworCWlmIChod2VycnMgJiAoX0lQQVRIX0hUTElOSzBfQ1JDQklUUyB8IF9JUEFUSF9IVExJTksxX0NSQ0JJVFMpKQorCQlod2Vycl9jcmNiaXRzKGRkLCBod2VycnMsIG1zZywgbXNnbCk7CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjUpCisJCXN0cmxjYXQobXNnLCAiW0hUIGNvcmUgTWlzYzVdIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI2KQorCQlzdHJsY2F0KG1zZywgIltIVCBjb3JlIE1pc2M2XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNykKKwkJc3RybGNhdChtc2csICJbSFQgY29yZSBNaXNjN10iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCkgeworCQlzdHJsY2F0KG1zZywgIltNZW1vcnkgQklTVCB0ZXN0IGZhaWxlZCwgSFQtNDAwIHVudXNhYmxlXSIsCisJCQltc2dsKTsKKwkJLyogaWdub3JlIGZyb20gbm93IG9uLCBzbyBkaXNhYmxlIHVudGlsIGRyaXZlciByZWxvYWRlZCAqLworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorI2RlZmluZSBfSVBBVEhfUExMX0ZBSUwgKElORklOSVBBVEhfSFdFX0NPUkVQTExfRkJTTElQIHwJXAorCQkJIElORklOSVBBVEhfSFdFX0NPUkVQTExfUkZTTElQIHwJXAorCQkJIElORklOSVBBVEhfSFdFX0hUQlBMTF9GQlNMSVAgfAkJXAorCQkJIElORklOSVBBVEhfSFdFX0hUQlBMTF9SRlNMSVAgfAkJXAorCQkJIElORklOSVBBVEhfSFdFX0hUQVBMTF9GQlNMSVAgfAkJXAorCQkJIElORklOSVBBVEhfSFdFX0hUQVBMTF9SRlNMSVApCisKKwlpZiAoaHdlcnJzICYgX0lQQVRIX1BMTF9GQUlMKSB7CisJCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLAorCQkJICJbUExMIGZhaWxlZCAoJWxseCksIEhULTQwMCB1bnVzYWJsZV0iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIChod2VycnMgJiBfSVBBVEhfUExMX0ZBSUwpKTsKKwkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOworCQkvKiBpZ25vcmUgZnJvbSBub3cgb24sIHNvIGRpc2FibGUgdW50aWwgZHJpdmVyIHJlbG9hZGVkICovCisJCWRkLT5pcGF0aF9od2Vycm1hc2sgJj0gfihod2VycnMgJiBfSVBBVEhfUExMX0ZBSUwpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorCisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCkgeworCQkvKgorCQkgKiBJZiBpdCBvY2N1cnMsIGl0IGlzIGxlZnQgbWFza2VkIHNpbmNlIHRoZSBldGVybmFsCisJCSAqIGludGVyZmFjZSBpcyB1bnVzZWQKKwkJICovCisJCWRkLT5pcGF0aF9od2Vycm1hc2sgJj0gfklORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRDsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2Vycm1hc2ssCisJCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOworCX0KKworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9SWERTWU5DTUVNUEFSSVRZRVJSKQorCQlzdHJsY2F0KG1zZywgIltSeCBEc3luY10iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKQorCQlzdHJsY2F0KG1zZywgIltTZXJEZXMgUExMXSIsIG1zZ2wpOworCisJaXBhdGhfZGV2X2VycihkZCwgIiVzIGhhcmR3YXJlIGVycm9yXG4iLCBtc2cpOworCWlmIChpc2ZhdGFsICYmICFpcGF0aF9kaWFnX2ludXNlICYmIGRkLT5pcGF0aF9mcmVlemVtc2cpCisJCS8qCisJCSAqIGZvciBzdGF0dXMgZmlsZTsgaWYgbm8gdHJhaWxpbmcgYnJhY2UgaXMgY29waWVkLAorCQkgKiB3ZSdsbCBrbm93IGl0IHdhcyB0cnVuY2F0ZWQuCisJCSAqLworCQlzbnByaW50ZihkZC0+aXBhdGhfZnJlZXplbXNnLAorCQkJIGRkLT5pcGF0aF9mcmVlemVsZW4sICJ7JXN9IiwgbXNnKTsKKworYmFpbDo7Cit9CisKKy8qKgorICogaXBhdGhfaHRfYm9hcmRuYW1lIC0gZmlsbCBpbiB0aGUgYm9hcmQgbmFtZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBuYW1lOiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogQG5hbWVsZW46IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogZmlsbCBpbiB0aGUgYm9hcmQgbmFtZSwgYmFzZWQgb24gdGhlIGJvYXJkIHJldmlzaW9uIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfaHRfYm9hcmRuYW1lKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqbmFtZSwKKwkJCSAgICAgIHNpemVfdCBuYW1lbGVuKQoreworCWNoYXIgKm4gPSBOVUxMOworCXU4IGJvYXJkcmV2ID0gZGQtPmlwYXRoX2JvYXJkcmV2OworCWludCByZXQ7CisKKwlzd2l0Y2ggKGJvYXJkcmV2KSB7CisJY2FzZSA0OgkJLyogUG9uZGVyb3NhIGlzIG9uZSBvZiB0aGUgYnJpbmd1cCBib2FyZHMgKi8KKwkJbiA9ICJQb25kZXJvc2EiOworCQlicmVhazsKKwljYXNlIDU6CisJCS8qCisJCSAqIEhULTQ2MCBvcmlnaW5hbCBwcm9kdWN0aW9uIGJvYXJkOyB0d28gcHJvZHVjdGlvbiBsZXZlbHMsIHdpdGgKKwkJICogZGlmZmVyZW50IHNlcmlhbCBudW1iZXIgcmFuZ2VzLiAgIFNlZSBpcGF0aF9odF9lYXJseV9pbml0KCkgZm9yCisJCSAqIGNhc2Ugd2hlcmUgd2UgZW5hYmxlIElQQVRIX0dQSU9fSU5UUiBmb3IgbGF0ZXIgc2VyaWFsICMgcmFuZ2UuCisJCSAqLworCQluID0gIkluZmluaVBhdGhfSFQtNDYwIjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQluID0gIk9FTV9Cb2FyZF8zIjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQkvKiBIVC00NjAgc21hbGwgZm9ybSBmYWN0b3IgcHJvZHVjdGlvbiBib2FyZCAqLworCQluID0gIkluZmluaVBhdGhfSFQtNDY1IjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQluID0gIkxTL1gtMSI7CisJCWJyZWFrOworCWNhc2UgOToJCS8qIENvbXN0b2NrIGJyaW5ndXAgdGVzdCBib2FyZCAqLworCQluID0gIkNvbXN0b2NrIjsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJbiA9ICJPRU1fQm9hcmRfMiI7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCW4gPSAiSW5maW5pUGF0aF9IVC00NzAiOworCQlicmVhazsKKwljYXNlIDEyOgorCQluID0gIk9FTV9Cb2FyZF80IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIGRvbid0IGtub3csIGp1c3QgcHJpbnQgdGhlIG51bWJlciAqLworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRG9uJ3QgeWV0IGtub3cgYWJvdXQgYm9hcmQgIgorCQkJICAgICAgIndpdGggSUQgJXVcbiIsIGJvYXJkcmV2KTsKKwkJc25wcmludGYobmFtZSwgbmFtZWxlbiwgIlVua25vd25fSW5maW5pUGF0aF9IVC00eHhfJXUiLAorCQkJIGJvYXJkcmV2KTsKKwkJYnJlYWs7CisJfQorCWlmIChuKQorCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiJXMiLCBuKTsKKworCWlmIChkZC0+aXBhdGhfbWFqcmV2ICE9IDMgfHwgKGRkLT5pcGF0aF9taW5yZXYgPCAyIHx8IGRkLT5pcGF0aF9taW5yZXYgPiAzKSkgeworCQkvKgorCQkgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBIVC00MDAKKwkJICogUmV2IDMuMgorCQkgKi8KKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJVbnN1cHBvcnRlZCBIVC00MDAgcmV2aXNpb24gJXUuJXUhXG4iLAorCQkJICAgICAgZGQtPmlwYXRoX21hanJldiwgZGQtPmlwYXRoX21pbnJldik7CisJCXJldCA9IDE7CisJCWdvdG8gYmFpbDsKKwl9CisJLyoKKwkgKiBwa3Qvd29yZCBjb3VudGVycyBhcmUgMzIgYml0LCBhbmQgdGhlcmVmb3JlIHdyYXAgZmFzdCBlbm91Z2gKKwkgKiB0aGF0IHdlIHNuYXBzaG90IHRoZW0gZnJvbSBhIHRpbWVyLCBhbmQgbWFpbnRhaW4gNjQgYml0IHNoYWRvdworCSAqIGNvcGllcworCSAqLworCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF8zMkJJVENPVU5URVJTOworCWlmIChkZC0+aXBhdGhfaHRzcGVlZCAhPSA4MDApCisJCWlwYXRoX2Rldl9lcnIoZGQsCisJCQkgICAgICAiSW5jb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgSFQgQCAldU1IelxuIiwKKwkJCSAgICAgIGRkLT5pcGF0aF9odHNwZWVkKTsKKwlpZiAoZGQtPmlwYXRoX2JvYXJkcmV2ID09IDcgfHwgZGQtPmlwYXRoX2JvYXJkcmV2ID09IDExIHx8CisJICAgIGRkLT5pcGF0aF9ib2FyZHJldiA9PSA2KQorCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfR1BJT19JTlRSOworCWVsc2UKKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX1BPTExfUlhfSU5UUjsKKwlpZiAoZGQtPmlwYXRoX2JvYXJkcmV2ID09IDgpIHsJLyogTFMvWC0xICovCisJCXU2NCB2YWw7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2V4dHN0YXR1cyk7CisJCWlmICh2YWwgJiBJTkZJTklQQVRIX0VYVFNfU0VSREVTU0VMKSB7CisJCQkvKgorCQkJICogaGFyZHdhcmUgZGlzYWJsZWQKKwkJCSAqCisJCQkgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNoaXAgaXMgaGFyZHdhcmUgZGlzYWJsZWQsCisJCQkgKiBhbmQgd2lsbCBub3QgYmUgYWJsZSB0byBicmluZyB1cCB0aGUgbGluaywKKwkJCSAqIGluIGFueSBjYXNlLiAgV2Ugc3BlY2lhbCBjYXNlIHRoaXMgYW5kIGFib3J0CisJCQkgKiBlYXJseSwgdG8gYXZvaWQgbGF0ZXIgbWVzc2FnZXMuICBXZSBhbHNvIHNldAorCQkJICogdGhlIERJU0FCTEVEIHN0YXR1cyBiaXQKKwkJCSAqLworCQkJaXBhdGhfZGJnKCJVbml0ICV1IGlzIGhhcmR3YXJlLWRpc2FibGVkXG4iLAorCQkJCSAgZGQtPmlwYXRoX3VuaXQpOworCQkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19ESVNBQkxFRDsKKwkJCS8qIHRoaXMgdmFsdWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSAqLworCQkJcmV0ID0gMjsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX2NoZWNrX2h0bGluayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTggbGlua2VyciwgbGlua19vZmYsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWxpbmtfb2ZmID0gZGQtPmlwYXRoX2h0X3NsYXZlX29mZiArIGkgKiA0ICsgMHhkOworCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGQtPnBjaWRldiwgbGlua19vZmYsICZsaW5rZXJyKSkKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJDb3VsZG4ndCByZWFkICIKKwkJCQkgImxpbmtlcnJvciVkIG9mIEhUIHNsYXZlL3ByaW1hcnkgYmxvY2tcbiIsCisJCQkJIGkpOworCQllbHNlIGlmIChsaW5rZXJyICYgMHhmMCkgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiSFQgbGlua2VyciVkIGJpdHMgMHgleCBzZXQsICIKKwkJCQkgICAiY2xlYXJpbmdcbiIsIGxpbmtlcnIgPj4gNCwgaSk7CisJCQkvKgorCQkJICogd3JpdGluZyB0aGUgbGlua2VyciBiaXRzIHRoYXQgYXJlIHNldCBzaG91bGQKKwkJCSAqIGNsZWFyIHRoZW0KKwkJCSAqLworCQkJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShkZC0+cGNpZGV2LCBsaW5rX29mZiwKKwkJCQkJCSAgbGlua2VycikpCisJCQkJaXBhdGhfZGJnKCJGYWlsZWQgd3JpdGUgdG8gY2xlYXIgSFQgIgorCQkJCQkgICJsaW5rZXJyb3IlZFxuIiwgaSk7CisJCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGQtPnBjaWRldiwgbGlua19vZmYsCisJCQkJCQkgJmxpbmtlcnIpKQorCQkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJCSAiQ291bGRuJ3QgcmVyZWFkIGxpbmtlcnJvciVkIG9mICIKKwkJCQkJICJIVCBzbGF2ZS9wcmltYXJ5IGJsb2NrXG4iLCBpKTsKKwkJCWVsc2UgaWYgKGxpbmtlcnIgJiAweGYwKQorCQkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJCSAiSFQgbGlua2Vycm9yJWQgYml0cyAweCV4ICIKKwkJCQkJICJjb3VsZG4ndCBiZSBjbGVhcmVkXG4iLAorCQkJCQkgaSwgbGlua2VyciA+PiA0KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBpcGF0aF9zZXR1cF9odF9yZXNldChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaXBhdGhfZGJnKCJObyByZXNldCBwb3NzaWJsZSBmb3IgSFQtNDAwXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBIVF9DQVBBQklMSVRZX0lEICAgMHgwOAkvKiBIVCBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQgaW4ga2VybmVsICovCisjZGVmaW5lIEhUX0lOVFJfRElTQ19DT05GSUcgIDB4ODAJLyogSFQgaW50ZXJydXB0IGFuZCBkaXNjb3ZlcnkgY2FwICovCisjZGVmaW5lIEhUX0lOVFJfUkVHX0lOREVYICAgIDIJLyogaW50Y29uZmlnIHJlcXVpcmVzIGluZGlyZWN0IGFjY2Vzc2VzICovCisKKy8qCisgKiBCaXRzIDEzLTE1IG9mIGNvbW1hbmQ9PTAgaXMgc2xhdmUvcHJpbWFyeSBibG9jay4gIENsZWFyIGFueSBIVCBDUkMKKyAqIGVycm9ycy4gIFdlIG9ubHkgYm90aGVyIHRvIGRvIHRoaXMgYXQgbG9hZCB0aW1lLCBiZWNhdXNlIGl0J3MgT0sgaWYKKyAqIGl0IGhhcHBlbmVkIGJlZm9yZSB3ZSB3ZXJlIGxvYWRlZCAoZmlyc3QgdGltZSBhZnRlciBib290L3Jlc2V0KSwKKyAqIGJ1dCBhbnkgdGltZSBhZnRlciB0aGF0LCBpdCdzIGZhdGFsIGFueXdheS4gIEFsc28gbmVlZCB0byBub3QgY2hlY2sKKyAqIGZvciBmb3IgdXBwZXIgYnl0ZSBlcnJvcnMgaWYgd2UgYXJlIGluIDggYml0IG1vZGUsIHNvIGZpZ3VyZSBvdXQKKyAqIG91ciB3aWR0aC4gIEZvciBub3csIGF0IGxlYXN0LCBhbHNvIGNvbXBsYWluIGlmIGl0J3MgOCBiaXQuCisgKi8KK3N0YXRpYyB2b2lkIHNsYXZlX29yX3ByaV9ibGsoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgICAgaW50IHBvcywgdTggY2FwX3R5cGUpCit7CisJdTggbGlua3dpZHRoID0gMCwgbGlua2VyciwgbGlua19hX2Jfb2ZmLCBsaW5rX29mZjsKKwl1MTYgbGlua2N0cmwgPSAwOworCWludCBpOworCisJZGQtPmlwYXRoX2h0X3NsYXZlX29mZiA9IHBvczsKKwkvKiBjb21tYW5kIHdvcmQsIG1hc3Rlcl9ob3N0IGJpdCAqLworCS8qIG1hc3RlciBob3N0IHx8IHNsYXZlICovCisJaWYgKChjYXBfdHlwZSA+PiAyKSAmIDEpCisJCWxpbmtfYV9iX29mZiA9IDQ7CisJZWxzZQorCQlsaW5rX2FfYl9vZmYgPSAwOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkhUJXUgKExpbmsgJWMpIGNvbm5lY3RlZCB0byBwcm9jZXNzb3JcbiIsCisJCSAgIGxpbmtfYV9iX29mZiA/IDEgOiAwLAorCQkgICBsaW5rX2FfYl9vZmYgPyAnQicgOiAnQScpOworCisJbGlua19hX2Jfb2ZmICs9IHBvczsKKworCS8qCisJICogY2hlY2sgYm90aCBsaW5rIGNvbnRyb2wgcmVnaXN0ZXJzOyBjbGVhciBib3RoIEhUIENSQyBzZXRzIGlmCisJICogbmVjZXNzYXJ5LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJbGlua19vZmYgPSBwb3MgKyBpICogNCArIDB4NDsKKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIGxpbmtfb2ZmLCAmbGlua2N0cmwpKQorCQkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IHJlYWQgSFQgbGluayBjb250cm9sJWQgIgorCQkJCSAgICAgICJyZWdpc3RlclxuIiwgaSk7CisJCWVsc2UgaWYgKGxpbmtjdHJsICYgKDB4ZiA8PCA4KSkgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQ2xlYXIgbGlua2N0cmwlZCBDUkMgRXJyb3IgIgorCQkJCSAgICJiaXRzICV4XG4iLCBpLCBsaW5rY3RybCAmICgweGYgPDwgOCkpOworCQkJLyoKKwkJCSAqIG5vdyB3cml0ZSB0aGVtIGJhY2sgdG8gY2xlYXIgdGhlIGVycm9yLgorCQkJICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgbGlua19vZmYsCisJCQkJCSAgICAgIGxpbmtjdHJsICYgKDB4ZiA8PCA4KSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEFzIHdpdGggSFQgQ1JDIGJpdHMsIHNhbWUgZm9yIHByb3RvY29sIGVycm9ycyB0aGF0IG1pZ2h0IG9jY3VyCisJICogZHVyaW5nIGJvb3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlsaW5rX29mZiA9IHBvcyArIGkgKiA0ICsgMHhkOworCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgbGlua19vZmYsICZsaW5rZXJyKSkKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDb3VsZG4ndCByZWFkIGxpbmtlcnJvciVkICIKKwkJCQkgIm9mIEhUIHNsYXZlL3ByaW1hcnkgYmxvY2tcbiIsIGkpOworCQllbHNlIGlmIChsaW5rZXJyICYgMHhmMCkgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiSFQgbGlua2VyciVkIGJpdHMgMHgleCBzZXQsICIKKwkJCQkgICAiY2xlYXJpbmdcbiIsIGxpbmtlcnIgPj4gNCwgaSk7CisJCQkvKgorCQkJICogd3JpdGluZyB0aGUgbGlua2VyciBiaXRzIHRoYXQgYXJlIHNldCB3aWxsIGNsZWFyCisJCQkgKiB0aGVtCisJCQkgKi8KKwkJCWlmIChwY2lfd3JpdGVfY29uZmlnX2J5dGUKKwkJCSAgICAocGRldiwgbGlua19vZmYsIGxpbmtlcnIpKQorCQkJCWlwYXRoX2RiZygiRmFpbGVkIHdyaXRlIHRvIGNsZWFyIEhUICIKKwkJCQkJICAibGlua2Vycm9yJWRcbiIsIGkpOworCQkJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGxpbmtfb2ZmLCAmbGlua2VycikpCisJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlcmVhZCAiCisJCQkJCSAibGlua2Vycm9yJWQgb2YgSFQgc2xhdmUvcHJpbWFyeSAiCisJCQkJCSAiYmxvY2tcbiIsIGkpOworCQkJZWxzZSBpZiAobGlua2VyciAmIDB4ZjApCisJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkhUIGxpbmtlcnJvciVkIGJpdHMgIgorCQkJCQkgIjB4JXggY291bGRuJ3QgYmUgY2xlYXJlZFxuIiwKKwkJCQkJIGksIGxpbmtlcnIgPj4gNCk7CisJCX0KKwl9CisKKwkvKgorCSAqIHRoaXMgaXMganVzdCBmb3Igb3VyIGxpbmsgdG8gdGhlIGhvc3QsIG5vdCBkZXZpY2VzIGNvbm5lY3RlZAorCSAqIHRocm91Z2ggdHVubmVsLgorCSAqLworCisJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGxpbmtfYV9iX29mZiArIDcsICZsaW5rd2lkdGgpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3QgcmVhZCBIVCBsaW5rIHdpZHRoICIKKwkJCSAgICAgICJjb25maWcgcmVnaXN0ZXJcbiIpOworCWVsc2UgeworCQl1MzIgd2lkdGg7CisJCXN3aXRjaCAobGlua3dpZHRoICYgNykgeworCQljYXNlIDU6CisJCQl3aWR0aCA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJd2lkdGggPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXdpZHRoID0gMzI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJd2lkdGggPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCWRlZmF1bHQ6CS8qIGlmIHdyb25nLCBhc3N1bWUgOCBiaXQgKi8KKwkJCXdpZHRoID0gODsKKwkJCWJyZWFrOworCQl9CisKKwkJZGQtPmlwYXRoX2h0d2lkdGggPSB3aWR0aDsKKworCQlpZiAobGlua3dpZHRoICE9IDB4MTEpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJOb3QgY29uZmlndXJlZCBmb3IgMTYgYml0IEhUICIKKwkJCQkgICAgICAiKCV4KVxuIiwgbGlua3dpZHRoKTsKKwkJCWlmICghKGxpbmt3aWR0aCAmIDB4ZikpIHsKKwkJCQlpcGF0aF9kYmcoIldpbGwgaWdub3JlIEhUIGxhbmUxIGVycm9yc1xuIik7CisJCQkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIXzhCSVRfSU5fSFQwOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiB0aGlzIGlzIGp1c3QgZm9yIG91ciBsaW5rIHRvIHRoZSBob3N0LCBub3QgZGV2aWNlcyBjb25uZWN0ZWQKKwkgKiB0aHJvdWdoIHR1bm5lbC4KKwkgKi8KKwlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgbGlua19hX2Jfb2ZmICsgMHhkLCAmbGlua3dpZHRoKSkKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IHJlYWQgSFQgbGluayBmcmVxdWVuY3kgIgorCQkJICAgICAgImNvbmZpZyByZWdpc3RlclxuIik7CisJZWxzZSB7CisJCXUzMiBzcGVlZDsKKwkJc3dpdGNoIChsaW5rd2lkdGggJiAweGYpIHsKKwkJY2FzZSA2OgorCQkJc3BlZWQgPSAxMDAwOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXNwZWVkID0gODAwOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXNwZWVkID0gNjAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXNwZWVkID0gNTAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXNwZWVkID0gNDAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNwZWVkID0gMzAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogYXNzdW1lIHJlc2VydmVkIGFuZCB2ZW5kb3Itc3BlY2lmaWMgYXJlIDIwMC4uLgorCQkJICovCisJCWNhc2UgMDoKKwkJCXNwZWVkID0gMjAwOworCQkJYnJlYWs7CisJCX0KKwkJZGQtPmlwYXRoX2h0c3BlZWQgPSBzcGVlZDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0X2ludF9oYW5kbGVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgaW50IHBvcykKK3sKKwl1MzIgaW50X2hhbmRsZXJfYWRkcl9sb3dlcjsKKwl1MzIgaW50X2hhbmRsZXJfYWRkcl91cHBlcjsKKwl1NjQgaWhhbmRsZXI7CisJdTMyIGludHZlYzsKKworCS8qIHVzZSBpbmRpcmVjdGlvbiByZWdpc3RlciB0byBnZXQgdGhlIGludHIgaGFuZGxlciAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBwb3MgKyBIVF9JTlRSX1JFR19JTkRFWCwgMHgxMCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIDQsICZpbnRfaGFuZGxlcl9hZGRyX2xvd2VyKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgcG9zICsgSFRfSU5UUl9SRUdfSU5ERVgsIDB4MTEpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyA0LCAmaW50X2hhbmRsZXJfYWRkcl91cHBlcik7CisKKwlpaGFuZGxlciA9ICh1NjQpIGludF9oYW5kbGVyX2FkZHJfbG93ZXIgfAorCQkoKHU2NCkgaW50X2hhbmRsZXJfYWRkcl91cHBlciA8PCAzMik7CisKKwkvKgorCSAqIGtlcm5lbHMgd2l0aCBDT05GSUdfUENJX01TSSBzZXQgdGhlIHZlY3RvciBpbiB0aGUgaXJxIGZpZWxkIG9mCisJICogc3RydWN0IHBjaV9kZXZpY2UsIHNvIHdlIHVzZSB0aGF0IHRvIHByb2dyYW0gdGhlIEhULTQwMCBpbnRlcm5hbAorCSAqIGludGVycnVwdCByZWdpc3RlciAobm90IGNvbmZpZyBzcGFjZSkgd2l0aCB0aGF0IHZhbHVlLiBUaGUgQklPUworCSAqIG11c3Qgc3RpbGwgaGF2ZSBkb25lIHRoZSBiYXNpYyBNU0kgc2V0dXAuCisJICovCisJaW50dmVjID0gcGRldi0+aXJxOworCS8qCisJICogY2xlYXIgYW55IHZlY3RvciBiaXRzIHRoZXJlOyBub3JtYWxseSBub3Qgc2V0IGJ1dCB3ZSdsbCBvdmVybG9hZAorCSAqIHRoaXMgZm9yIHNvbWUgZGVidWcgcHVycG9zZXMgKHNldHRpbmcgdGhlIEhUQyBkZWJ1ZyByZWdpc3RlcgorCSAqIHZhbHVlIGZyb20gc29mdHdhcmUsIHJhdGhlciB0aGFuIEdQSU9zKSwgc28gaXQgbWlnaHQgYmUgc2V0IG9uIGEKKwkgKiBkcml2ZXIgcmVsb2FkLgorCSAqLworCWloYW5kbGVyICY9IH4weGZmMDAwMDsKKwkvKiB4ODYgdmVjdG9yIGdvZXMgaW4gaW50cmluZm9bMjM6MTZdICovCisJaWhhbmRsZXIgfD0gaW50dmVjIDw8IDE2OworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImloYW5kbGVyIGxvd2VyICV4LCB1cHBlciAleCwgaW50dmVjICV4LCAiCisJCSAgICJpbnRlcnJ1cHRjb25maWcgJWxseFxuIiwgaW50X2hhbmRsZXJfYWRkcl9sb3dlciwKKwkJICAgaW50X2hhbmRsZXJfYWRkcl91cHBlciwgaW50dmVjLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBpaGFuZGxlcik7CisKKwkvKiBjYW4ndCBwcm9ncmFtIHlldCwgc28gc2F2ZSBmb3IgaW50ZXJydXB0IHNldHVwICovCisJZGQtPmlwYXRoX2ludGNvbmZpZyA9IGloYW5kbGVyOworCS8qIGtlZXAgZ29pbmcsIHNvIHdlIGZpbmQgbGluayBjb250cm9sIHN0dWZmIGFsc28gKi8KKworCXJldHVybiBpaGFuZGxlciAhPSAwOworfQorCisvKioKKyAqIGlwYXRoX3NldHVwX2h0X2NvbmZpZyAtIHNldHVwIHRoZSBpbnRlcnJ1cHRjb25maWcgcmVnaXN0ZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBzZXR1cCB0aGUgaW50ZXJydXB0Y29uZmlnIHJlZ2lzdGVyIGZyb20gdGhlIEhUIGNvbmZpZyBpbmZvLgorICogQWxzbyBjbGVhciBDUkMgZXJyb3JzIGluIEhUIGxpbmtjb250cm9sLCBpZiBuZWNlc3NhcnkuCisgKiBUaGlzIGlzIGRvbmUgb25seSBmb3IgdGhlIHJlYWwgaGFyZHdhcmUuICBJdCBpcyBkb25lIGJlZm9yZQorICogY2hpcCBhZGRyZXNzIHNwYWNlIGlzIGluaXR0ZWQsIHNvIGNhbid0IHRvdWNoIGluZmluaXBhdGggcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfc2V0dXBfaHRfY29uZmlnKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHBvcywgcmV0ID0gMDsKKwlpbnQgaWhhbmRsZXIgPSAwOworCisJLyoKKwkgKiBSZWFkIHRoZSBjYXBhYmlsaXR5IGluZm8gdG8gZmluZCB0aGUgaW50ZXJydXB0IGluZm8sIGFuZCBhbHNvCisJICogaGFuZGxlIGNsZWFyaW5nIENSQyBlcnJvcnMgaW4gbGlua2N0cmwgcmVnaXN0ZXIgaWYgbmVjZXNzYXJ5LiAgV2UKKwkgKiBkbyB0aGlzIGVhcmx5LCBiZWZvcmUgd2UgZXZlciBlbmFibGUgZXJyb3JzIG9yIGhhcmR3YXJlIGVycm9ycywKKwkgKiBtb3N0bHkgdG8gYXZvaWQgY2F1c2luZyB0aGUgY2hpcCB0byBlbnRlciBmcmVlemUgbW9kZS4KKwkgKi8KKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIEhUX0NBUEFCSUxJVFlfSUQpOworCWlmICghcG9zKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCBmaW5kIEh5cGVyVHJhbnNwb3J0ICIKKwkJCSAgICAgICJjYXBhYmlsaXR5OyBubyBpbnRlcnJ1cHRzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWlsOworCX0KKwlkbyB7CisJCXU4IGNhcF90eXBlOworCisJCS8qIHRoZSBIVCBjYXBhYmlsaXR5IHR5cGUgYnl0ZSBpcyAzIGJ5dGVzIGFmdGVyIHRoZQorCQkgKiBjYXBhYmlsaXR5IGJ5dGUuCisJCSAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgcG9zICsgMywgJmNhcF90eXBlKSkgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlYWQgY29uZmlnICIKKwkJCQkgImNvbW1hbmQgQCAlZFxuIiwgcG9zKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghKGNhcF90eXBlICYgMHhFMCkpCisJCQlzbGF2ZV9vcl9wcmlfYmxrKGRkLCBwZGV2LCBwb3MsIGNhcF90eXBlKTsKKwkJZWxzZSBpZiAoY2FwX3R5cGUgPT0gSFRfSU5UUl9ESVNDX0NPTkZJRykKKwkJCWloYW5kbGVyID0gc2V0X2ludF9oYW5kbGVyKGRkLCBwZGV2LCBwb3MpOworCX0gd2hpbGUgKChwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLAorCQkJCQkJIEhUX0NBUEFCSUxJVFlfSUQpKSk7CisKKwlpZiAoIWloYW5kbGVyKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCBmaW5kIGludGVycnVwdCBoYW5kbGVyIGluICIKKwkJCSAgICAgICJjb25maWcgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3NldHVwX2h0X2NsZWFudXAgLSBjbGVhbiB1cCBhbnkgcGVyLWNoaXAgY2hpcC1zcGVjaWZpYyBzdHVmZgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBDYWxsZWQgZHVyaW5nIGRyaXZlciB1bmxvYWQuCisgKiBUaGlzIGlzIGN1cnJlbnRseSBhIG5vcCBmb3IgdGhlIEhULTQwMCwgbm90IGZvciBhbGwgY2hpcHMKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfc2V0dXBfaHRfY2xlYW51cChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7Cit9CisKKy8qKgorICogaXBhdGhfc2V0dXBfaHRfc2V0ZXh0bGVkIC0gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgdHdvIGV4dGVybmFsIExFRHMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbHN0OiB0aGUgTCBzdGF0ZQorICogQGx0c3Q6IHRoZSBMVCBzdGF0ZQorICoKKyAqIFNldCB0aGUgc3RhdGUgb2YgdGhlIHR3byBleHRlcm5hbCBMRURzLCB0byBpbmRpY2F0ZSBwaHlzaWNhbCBhbmQKKyAqIGxvZ2ljYWwgc3RhdGUgb2YgSUIgbGluay4gICBGb3IgdGhpcyBjaGlwIChhdCBsZWFzdCB3aXRoIHJlY29tbWVuZGVkCisgKiBib2FyZCBwaW5vdXRzKSwgTEVEMSBpcyBHcmVlbiAocGh5c2ljYWwgc3RhdGUpLCBhbmQgTEVEMiBpcyBZZWxsb3cKKyAqIChsb2dpY2FsIHN0YXRlKQorICoKKyAqIE5vdGU6ICBXZSB0cnkgdG8gbWF0Y2ggdGhlIE1lbGxhbm94IEhDQSBMRUQgYmVoYXZpb3IgYXMgYmVzdAorICogd2UgY2FuLiAgR3JlZW4gaW5kaWNhdGVzIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgT0sgKHNvbWV0aGluZyBpcworICogcGx1Z2dlZCBpbiwgYW5kIHdlIGNhbiB0cmFpbikuCisgKiBBbWJlciBpbmRpY2F0ZXMgdGhlIGxpbmsgaXMgbG9naWNhbGx5IHVwIChBQ1RJVkUpLgorICogTWVsbGFub3ggZnVydGhlciBibGlua3MgdGhlIGFtYmVyIExFRCB0byBpbmRpY2F0ZSBkYXRhIHBhY2tldAorICogYWN0aXZpdHksIGJ1dCB3ZSBoYXZlIG5vIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoYXQsIHNvIGl0IHdvdWxkCisgKiByZXF1aXJlIHdha2luZyB1cCBldmVyeSAxMC0yMCBtc2VjcyBhbmQgY2hlY2tpbmcgdGhlIGNvdW50ZXJzCisgKiBvbiB0aGUgY2hpcCwgYW5kIHRoZW4gdHVybmluZyB0aGUgTEVEIG9mZiBpZiBhcHByb3ByaWF0ZS4gIFRoYXQncworICogdmlzaWJsZSBvdmVyaGVhZCwgc28gbm90IHNvbWV0aGluZyB3ZSB3aWxsIGRvLgorICoKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfc2V0dXBfaHRfc2V0ZXh0bGVkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgIHU2NCBsc3QsIHU2NCBsdHN0KQoreworCXU2NCBleHRjdGw7CisKKwkvKiB0aGUgZGlhZ3MgdXNlIHRoZSBMRUQgdG8gaW5kaWNhdGUgZGlhZyBpbmZvLCBzbyB3ZSBsZWF2ZQorCSAqIHRoZSBleHRlcm5hbCBMRUQgYWxvbmUgd2hlbiB0aGUgZGlhZ3MgYXJlIHJ1bm5pbmcgKi8KKwlpZiAoaXBhdGhfZGlhZ19pbnVzZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBzdGFydCBieSBzZXR0aW5nIGJvdGggTEVEIGNvbnRyb2wgYml0cyB0byBvZmYsIHRoZW4gdHVybgorCSAqIG9uIHRoZSBhcHByb3ByaWF0ZSBiaXQocykuCisJICovCisJaWYgKGRkLT5pcGF0aF9ib2FyZHJldiA9PSA4KSB7IC8qIExTL1gtMSB1c2VzIGRpZmZlcmVudCBwaW5zICovCisJCS8qCisJCSAqIG1ham9yIGRpZmZlcmVuY2UgaXMgdGhhdCBJTkZJTklQQVRIX0VYVENfTEVER0JMRVJSX09GRgorCQkgKiBpcyBpbnZlcnRlZCwgIGJlY2F1c2UgaXQgaXMgbm9ybWFsbHkgdXNlZCB0byBpbmRpY2F0ZQorCQkgKiBhIGhhcmR3YXJlIGZhdWx0IGF0IHJlc2V0LCBpZiB0aGVyZSB3ZXJlIGVycm9ycworCQkgKi8KKwkJZXh0Y3RsID0gKGRkLT5pcGF0aF9leHRjdHJsICYgfklORklOSVBBVEhfRVhUQ19MRURHQkxPS19PTikKKwkJCXwgSU5GSU5JUEFUSF9FWFRDX0xFREdCTEVSUl9PRkY7CisJCWlmIChsdHN0ID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVApCisJCQlleHRjdGwgJj0gfklORklOSVBBVEhfRVhUQ19MRURHQkxFUlJfT0ZGOworCQlpZiAobHN0ID09IElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVElWRSkKKwkJCWV4dGN0bCB8PSBJTkZJTklQQVRIX0VYVENfTEVER0JMT0tfT047CisJfQorCWVsc2UgeworCQlleHRjdGwgPSBkZC0+aXBhdGhfZXh0Y3RybCAmCisJCQl+KElORklOSVBBVEhfRVhUQ19MRUQxUFJJUE9SVF9PTiB8CisJCQkgIElORklOSVBBVEhfRVhUQ19MRUQyUFJJUE9SVF9PTik7CisJCWlmIChsdHN0ID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVApCisJCQlleHRjdGwgfD0gSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OOworCQlpZiAobHN0ID09IElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVElWRSkKKwkJCWV4dGN0bCB8PSBJTkZJTklQQVRIX0VYVENfTEVEMlBSSVBPUlRfT047CisJfQorCWRkLT5pcGF0aF9leHRjdHJsID0gZXh0Y3RsOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCwgZXh0Y3RsKTsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfaW5pdF9odF92YXJpYWJsZXModm9pZCkKK3sKKwlpcGF0aF9ncGlvX3NkYV9udW0gPSBfSVBBVEhfR1BJT19TREFfTlVNOworCWlwYXRoX2dwaW9fc2NsX251bSA9IF9JUEFUSF9HUElPX1NDTF9OVU07CisJaXBhdGhfZ3Bpb19zZGEgPSBJUEFUSF9HUElPX1NEQTsKKwlpcGF0aF9ncGlvX3NjbCA9IElQQVRIX0dQSU9fU0NMOworCisJaW5maW5pcGF0aF9pX2JpdHNleHRhbnQgPQorCQkoSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLIDw8IElORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpIHwKKwkJSU5GSU5JUEFUSF9JX0VSUk9SIHwgSU5GSU5JUEFUSF9JX1NQSU9TRU5UIHwKKwkJSU5GSU5JUEFUSF9JX1NQSU9CVUZBVkFJTCB8IElORklOSVBBVEhfSV9HUElPOworCisJaW5maW5pcGF0aF9lX2JpdHNleHRhbnQgPQorCQlJTkZJTklQQVRIX0VfUkZPUk1BVEVSUiB8IElORklOSVBBVEhfRV9SVkNSQyB8CisJCUlORklOSVBBVEhfRV9SSUNSQyB8IElORklOSVBBVEhfRV9STUlOUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1JNQVhQS1RMRU4gfCBJTkZJTklQQVRIX0VfUkxPTkdQS1RMRU4gfAorCQlJTkZJTklQQVRIX0VfUlNIT1JUUEtUTEVOIHwgSU5GSU5JUEFUSF9FX1JVTkVYUENIQVIgfAorCQlJTkZJTklQQVRIX0VfUlVOU1VQVkwgfCBJTkZJTklQQVRIX0VfUkVCUCB8CisJCUlORklOSVBBVEhfRV9SSUJGTE9XIHwgSU5GSU5JUEFUSF9FX1JCQURWRVJTSU9OIHwKKwkJSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMIHwgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMIHwKKwkJSU5GSU5JUEFUSF9FX1JCQURUSUQgfCBJTkZJTklQQVRIX0VfUkhEUkxFTiB8CisJCUlORklOSVBBVEhfRV9SSERSIHwgSU5GSU5JUEFUSF9FX1JJQkxPU1RMSU5LIHwKKwkJSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU4gfCBJTkZJTklQQVRIX0VfU01BWFBLVExFTiB8CisJCUlORklOSVBBVEhfRV9TVU5ERVJSVU4gfCBJTkZJTklQQVRIX0VfU1BLVExFTiB8CisJCUlORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVCB8IElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgfAorCQlJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCB8IElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0gfAorCQlJTkZJTklQQVRIX0VfU1VOU1VQVkwgfCBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEIHwKKwkJSU5GSU5JUEFUSF9FX0lOVkFMSURBRERSIHwgSU5GSU5JUEFUSF9FX1JFU0VUIHwKKwkJSU5GSU5JUEFUSF9FX0hBUkRXQVJFOworCisJaW5maW5pcGF0aF9od2VfYml0c2V4dGFudCA9CisJCShJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX1NISUZUKSB8CisJCShJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSB8CisJCShJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSB8CisJCUlORklOSVBBVEhfSFdFX0hUQ0xOS0FCWVRFMENSQ0VSUiB8CisJCUlORklOSVBBVEhfSFdFX0hUQ0xOS0FCWVRFMUNSQ0VSUiB8CisJCUlORklOSVBBVEhfSFdFX0hUQ0xOS0JCWVRFMENSQ0VSUiB8CisJCUlORklOSVBBVEhfSFdFX0hUQ0xOS0JCWVRFMUNSQ0VSUiB8CisJCUlORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI0IHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjUgfCBJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNiB8CisJCUlORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI3IHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDQlVTVFJFUVBBUklUWUVSUiB8CisJCUlORklOSVBBVEhfSFdFX0hUQ0JVU1RSRVNQUEFSSVRZRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRDQlVTSVJFUVBBUklUWUVSUiB8CisJCUlORklOSVBBVEhfSFdFX1JYRFNZTkNNRU1QQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEIHwKKwkJSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9GQlNMSVAgfAorCQlJTkZJTklQQVRIX0hXRV9DT1JFUExMX1JGU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX0hUQlBMTF9GQlNMSVAgfAorCQlJTkZJTklQQVRIX0hXRV9IVEJQTExfUkZTTElQIHwKKwkJSU5GSU5JUEFUSF9IV0VfSFRBUExMX0ZCU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX0hUQVBMTF9SRlNMSVAgfAorCQlJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQgfAorCQlJTkZJTklQQVRIX0hXRV9JQkNCVVNUT1NQQ1BBUklUWUVSUiB8CisJCUlORklOSVBBVEhfSFdFX0lCQ0JVU0ZSU1BDUEFSSVRZRVJSOworCisJaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2sgPSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSzsKKwlpbmZpbmlwYXRoX2lfcmN2dXJnX21hc2sgPSBJTkZJTklQQVRIX0lfUkNWVVJHX01BU0s7Cit9CisKKy8qKgorICogaXBhdGhfaHRfaW5pdF9od2Vycm9ycyAtIGVuYWJsZSBoYXJkd2FyZSBlcnJvcnMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogbm93IHRoYXQgd2UgaGF2ZSBmaW5pc2hlZCBpbml0aWFsaXppbmcgZXZlcnl0aGluZyB0aGF0IG1pZ2h0IHJlYXNvbmFibHkKKyAqIGNhdXNlIGEgaGFyZHdhcmUgZXJyb3IsIGFuZCBjbGVhcmVkIHRob3NlIGVycm9ycyBiaXRzIGFzIHRoZXkgb2NjdXIsCisgKiB3ZSBjYW4gZW5hYmxlIGhhcmR3YXJlIGVycm9ycyBpbiB0aGUgbWFzayAocG90ZW50aWFsbHkgZW5hYmxpbmcKKyAqIGZyZWV6ZSBtb2RlKSwgYW5kIGVuYWJsZSBoYXJkd2FyZSBlcnJvcnMgYXMgZXJyb3JzIChhbG9uZyB3aXRoCisgKiBldmVyeXRoaW5nIGVsc2UpIGluIGVycm9ybWFzaworICovCitzdGF0aWMgdm9pZCBpcGF0aF9odF9pbml0X2h3ZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpcGF0aF9lcnJfdCB2YWw7CisJdTY0IGV4dHN2YWw7CisKKwlleHRzdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0c3RhdHVzKTsKKworCWlmICghKGV4dHN2YWwgJiBJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9FTkRURVNUKSkKKwkJaXBhdGhfZGV2X2VycihkZCwgIk1lbUJJU1QgZGlkIG5vdCBjb21wbGV0ZSFcbiIpOworCisJaXBhdGhfY2hlY2tfaHRsaW5rKGRkKTsKKworCS8qIGJhcnJpbmcgYnVncywgYWxsIGh3ZXJyb3JzIGJlY29tZSBpbnRlcnJ1cHRzLCB3aGljaCBjYW4gKi8KKwl2YWwgPSAtMUxMOworCS8qIGRvbid0IGxvb2sgYXQgY3JjIGxhbmUxIGlmIDggYml0ICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzhCSVRfSU5fSFQwKQorCQl2YWwgJj0gfmluZmluaXBhdGhfaHdlX2h0Y2xua2FieXRlMWNyY2VycjsKKwkvKiBkb24ndCBsb29rIGF0IGNyYyBsYW5lMSBpZiA4IGJpdCAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF84QklUX0lOX0hUMSkKKwkJdmFsICY9IH5pbmZpbmlwYXRoX2h3ZV9odGNsbmtiYnl0ZTFjcmNlcnI7CisKKwkvKgorCSAqIGRpc2FibGUgUlhEU1lOQ01FTVBBUklUWSBiZWNhdXNlIGV4dGVybmFsIHNlcmRlcyBpcyB1bnVzZWQsCisJICogYW5kIHRoZXJlZm9yZSB0aGUgbG9naWMgd2lsbCBuZXZlciBiZSB1c2VkIG9yIGluaXRpYWxpemVkLAorCSAqIGFuZCB1bmluaXRpYWxpemVkIHN0YXRlIHdpbGwgbm9ybWFsbHkgcmVzdWx0IGluIHRoaXMgZXJyb3IKKwkgKiBiZWluZyBhc3NlcnRlZC4gIFNpbWlsYXJseSBmb3IgdGhlIGV4dGVybmFsIHNlcmRlc3MgcGxsCisJICogbG9jayBzaWduYWwuCisJICovCisJdmFsICY9IH4oSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEIHwKKwkJIElORklOSVBBVEhfSFdFX1JYRFNZTkNNRU1QQVJJVFlFUlIpOworCisJLyoKKwkgKiBEaXNhYmxlIE1JU0NFUlI0IGJlY2F1c2Ugb2YgYW4gaW52ZXJzaW9uIGluIHRoZSBIVCBjb3JlCisJICogbG9naWMgY2hlY2tpbmcgZm9yIGVycm9ycyB0aGF0IGNhdXNlIHRoaXMgYml0IHRvIGJlIHNldC4KKwkgKiBUaGUgZXJyYXRhIGNhbiBhbHNvIGNhdXNlIHRoZSBwcm90b2NvbCBlcnJvciBiaXQgdG8gYmUgc2V0CisJICogaW4gdGhlIEhUIGNvbmZpZyBzcGFjZSBsaW5rZXJyb3IgcmVnaXN0ZXIocykuCisJICovCisJdmFsICY9IH5JTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNDsKKworCS8qCisJICogUExMIGlnbm9yZWQgYmVjYXVzZSBNRElPIGludGVyZmFjZSBoYXMgYSBsb2dpYyBwcm9ibGVtCisJICogZm9yIHJlYWRzLCBvbiBDb21zdG9jayBhbmQgUG9uZGVyb3NhLiAgQlJJTkdVUAorCSAqLworCWlmIChkZC0+aXBhdGhfYm9hcmRyZXYgPT0gNCB8fCBkZC0+aXBhdGhfYm9hcmRyZXYgPT0gOSkKKwkJdmFsICY9IH5JTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQ7CisJZGQtPmlwYXRoX2h3ZXJybWFzayA9IHZhbDsKK30KKworLyoqCisgKiBpcGF0aF9odF9icmluZ3VwX3NlcmRlcyAtIGJyaW5nIHVwIHRoZSBzZXJkZXMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfaHRfYnJpbmd1cF9zZXJkZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWwsIGNvbmZpZzE7CisJaW50IHJldCA9IDAsIGNoYW5nZSA9IDA7CisKKwlpcGF0aF9kYmcoIlRyeWluZyB0byBicmluZ3VwIHNlcmRlc1xuIik7CisKKwlpZiAoaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJzdGF0dXMpICYKKwkgICAgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKQorCXsKKwkJaXBhdGhfZGJnKCJBdCBzdGFydCwgc2VyZGVzIFBMTCBmYWlsZWQgYml0IHNldCBpbiAiCisJCQkgICJod2VycnN0YXR1cywgY2xlYXJpbmcgYW5kIGNvbnRpbnVpbmdcbiIpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyY2xlYXIsCisJCQkJIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCk7CisJfQorCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCk7CisJY29uZmlnMSA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzEpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiSW5pdGlhbCBzZXJkZXMgc3RhdHVzIGlzIGNvbmZpZzA9JWxseCAiCisJCSAgICJjb25maWcxPSVsbHgsIHNzdGF0dXM9JWxseCB4Z3hzICVsbHhcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY29uZmlnMSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzc3RhdHVzKSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZykpOworCisJLyogZm9yY2UgcmVzZXQgb24gKi8KKwl2YWwgfD0gSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfUExMCisJCS8qIHwgSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfTUFTSyAqLworCQk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOworCXVkZWxheSgxNSk7CQkvKiBuZWVkIHBsbCByZXNldCBzZXQgYXQgbGVhc3QgZm9yIGEgYml0ICovCisKKwlpZiAodmFsICYgSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfUExMKSB7CisJCXU2NCB2YWwyID0gdmFsICY9IH5JTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9QTEw7CisJCS8qIHNldCBsYW5lIHJlc2V0cywgYW5kIHR4IGlkbGUsIGR1cmluZyBwbGwgcmVzZXQgKi8KKwkJdmFsMiB8PSBJTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9NQVNLIHwKKwkJCUlORklOSVBBVEhfU0VSREMwX1RYSURMRTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQ2xlYXJpbmcgc2VyZGVzIFBMTCByZXNldCAod3JpdGluZyAiCisJCQkgICAiJWxseClcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbDIpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsCisJCQkJIHZhbDIpOworCQkvKgorCQkgKiBiZSBzdXJlIGNoaXAgc2F3IGl0CisJCSAqLworCQl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwkJLyoKKwkJICogbmVlZCBwbGwgcmVzZXQgY2xlYXIgYXQgbGVhc3QgMTEgdXNlYyBiZWZvcmUgbGFuZQorCQkgKiByZXNldHMgY2xlYXJlZDsgZ2l2ZSBpdCBhIGZldyBtb3JlCisJCSAqLworCQl1ZGVsYXkoMTUpOworCQl2YWwgPSB2YWwyOwkvKiBmb3IgY2hlY2sgYmVsb3cgKi8KKwl9CisKKwlpZiAodmFsICYgKElORklOSVBBVEhfU0VSREMwX1JFU0VUX1BMTCB8CisJCSAgIElORklOSVBBVEhfU0VSREMwX1JFU0VUX01BU0sgfAorCQkgICBJTkZJTklQQVRIX1NFUkRDMF9UWElETEUpKSB7CisJCXZhbCAmPSB+KElORklOSVBBVEhfU0VSREMwX1JFU0VUX1BMTCB8CisJCQkgSU5GSU5JUEFUSF9TRVJEQzBfUkVTRVRfTUFTSyB8CisJCQkgSU5GSU5JUEFUSF9TRVJEQzBfVFhJRExFKTsKKwkJLyogY2xlYXIgdGhlbSAqLworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsCisJCQkJIHZhbCk7CisJfQorCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZyk7CisJaWYgKCgodmFsID4+IElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCkgJgorCSAgICAgSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX01BU0spICE9IDMpIHsKKwkJdmFsICY9IH4oSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX01BU0sgPDwKKwkJCSBJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfU0hJRlQpOworCQkvKgorCQkgKiB3ZSB1c2UgYWRkcmVzcyAzCisJCSAqLworCQl2YWwgfD0gM1VMTCA8PCBJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfU0hJRlQ7CisJCWNoYW5nZSA9IDE7CisJfQorCWlmICh2YWwgJiBJTkZJTklQQVRIX1hHWFNfUkVTRVQpIHsKKwkJLyogbm9ybWFsbHkgdHJ1ZSBhZnRlciBib290ICovCisJCXZhbCAmPSB+SU5GSU5JUEFUSF9YR1hTX1JFU0VUOworCQljaGFuZ2UgPSAxOworCX0KKwlpZiAoY2hhbmdlKQorCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcsIHZhbCk7CisKKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKKworCS8qIGNsZWFyIGN1cnJlbnQgYW5kIGRlLWVtcGhhc2lzIGJpdHMgKi8KKwljb25maWcxICY9IH4weDBmZmZmZmZmZjAwVUxMOworCS8qIHNldCBjdXJyZW50IHRvIDIwbWEgKi8KKwljb25maWcxIHw9IDB4MDAwMDAwMDAwMDBVTEw7CisJLyogc2V0IGRlLWVtcGhhc2lzIHRvIC01LjY4ZEIgKi8KKwljb25maWcxIHw9IDB4MGNjY2MwMDAwMDBVTEw7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcxLCBjb25maWcxKTsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkFmdGVyIHNldHVwOiBzZXJkZXMgc3RhdHVzIGlzIGNvbmZpZzA9JWxseCAiCisJCSAgICJjb25maWcxPSVsbHgsIHNzdGF0dXM9JWxseCB4Z3hzICVsbHhcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY29uZmlnMSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzc3RhdHVzKSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZykpOworCisJaWYgKCFpcGF0aF93YWl0Zm9yX21kaW9fY21kcmVhZHkoZGQpKSB7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfbWRpbywKKwkJCQkgaXBhdGhfbWRpb19yZXEoSVBBVEhfTURJT19DTURfUkVBRCwgMzEsCisJCQkJCQlJUEFUSF9NRElPX0NUUkxfWEdYU19SRUdfOCwKKwkJCQkJCTApKTsKKwkJaWYgKGlwYXRoX3dhaXRmb3JfY29tcGxldGUoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfbWRpbywKKwkJCQkJICAgSVBBVEhfTURJT19EQVRBVkFMSUQsICZ2YWwpKQorCQkJaXBhdGhfZGJnKCJOZXZlciBnb3QgTURJTyBkYXRhIGZvciBYR1hTIHN0YXR1cyAiCisJCQkJICAicmVhZFxuIik7CisJCWVsc2UKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIk1ESU8gUmVhZCByZWc4LCAiCisJCQkJICAgIidiYW5rJyAzMSAleFxuIiwgKHUzMikgdmFsKTsKKwl9IGVsc2UKKwkJaXBhdGhfZGJnKCJOZXZlciBnb3QgTURJTyBjbWRyZWFkeSBmb3IgWEdYUyBzdGF0dXMgcmVhZFxuIik7CisKKwlyZXR1cm4gcmV0OwkJLyogZm9yIG5vdywgc2F5IHdlIGFsd2F5cyBzdWNjZWVkZWQgKi8KK30KKworLyoqCisgKiBpcGF0aF9odF9xdWlldF9zZXJkZXMgLSBzZXQgc2VyZGVzIHRvIHR4aWRsZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIGRyaXZlciBpcyBiZWluZyB1bmxvYWRlZAorICovCitzdGF0aWMgdm9pZCBpcGF0aF9odF9xdWlldF9zZXJkZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKKworCXZhbCB8PSBJTkZJTklQQVRIX1NFUkRDMF9UWElETEU7CisJaXBhdGhfZGJnKCJTZXR0aW5nIFR4SWRsZUVuIG9uIHNlcmRlcyAoY29uZmlnMCA9ICVsbHgpXG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOworfQorCitzdGF0aWMgaW50IGlwYXRoX2h0X2ludGNvbmZpZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldDsKKworCWlmICghZGQtPmlwYXRoX2ludGNvbmZpZykgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm8gaW50ZXJydXB0cyBlbmFibGVkLCBjb3VsZG4ndCBzZXR1cCAiCisJCQkgICAgICAiaW50ZXJydXB0IGFkZHJlc3NcbiIpOworCQlyZXQgPSAxOworCQlnb3RvIGJhaWw7CisJfQorCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRlcnJ1cHRjb25maWcsCisJCQkgZGQtPmlwYXRoX2ludGNvbmZpZyk7CS8qIGludGVycnVwdCBhZGRyZXNzICovCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3BlX3B1dF90aWQgLSB3cml0ZSBhIFRJRCBpbiBjaGlwCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHRpZHB0cjogcG9pbnRlciB0byB0aGUgZXhwZWN0ZWQgVElEIChpbiBjaGlwKSB0byB1ZHBhdGUKKyAqIEB0aWR0eXBlOiAwIGZvciBlYWdlciwgMSBmb3IgZXhwZWN0ZWQKKyAqIEBwYTogcGh5c2ljYWwgYWRkcmVzcyBvZiBpbiBtZW1vcnkgYnVmZmVyOyBpcGF0aF90aWRpbnZhbGlkIGlmIGZyZWVpbmcKKyAqCisgKiBUaGlzIGV4aXN0cyBhcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gYWxsb3cgZm9yIHNwZWNpYWwgbG9ja2luZyBldGMuCisgKiBJdCdzIHVzZWQgZm9yIGJvdGggdGhlIGZ1bGwgY2xlYW51cCBvbiBleGl0LCBhcyB3ZWxsIGFzIHRoZSBub3JtYWwKKyAqIHNldHVwIGFuZCB0ZWFyZG93bi4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfaHRfcHV0X3RpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgICAgIHU2NCBfX2lvbWVtICp0aWRwdHIsIHUzMiB0eXBlLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHBhKQoreworCWlmIChwYSAhPSBkZC0+aXBhdGhfdGlkaW52YWxpZCkgeworCQlpZiAodW5saWtlbHkoKHBhICYgfklORklOSVBBVEhfUlRfQUREUl9NQVNLKSkpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJICJwaHlzYWRkciAlbHggaGFzIG1vcmUgdGhhbiAiCisJCQkJICI0MCBiaXRzLCB1c2luZyBvbmx5IDQwISEhXG4iLCBwYSk7CisJCQlwYSAmPSBJTkZJTklQQVRIX1JUX0FERFJfTUFTSzsKKwkJfQorCQlpZiAodHlwZSA9PSAwKQorCQkJcGEgfD0gZGQtPmlwYXRoX3RpZHRlbXBsYXRlOworCQllbHNlIHsKKwkJCS8qIGluIHdvcmRzIChmaXhlZCwgZnVsbCBwYWdlKS4gICovCisJCQl1NjQgbGVudmFsaWQgPSBQQUdFX1NJWkUgPj4gMjsKKwkJCWxlbnZhbGlkIDw8PSBJTkZJTklQQVRIX1JUX0JVRlNJWkVfU0hJRlQ7CisJCQlwYSB8PSBsZW52YWxpZCB8IElORklOSVBBVEhfUlRfVkFMSUQ7CisJCX0KKwl9CisJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJd3JpdGVxKHBhLCB0aWRwdHIpOworfQorCisvKioKKyAqIGlwYXRoX2h0X2NsZWFyX3RpZCAtIGNsZWFyIGFsbCBUSUQgZW50cmllcyBmb3IgYSBwb3J0LCBleHBlY3RlZCBhbmQgZWFnZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcG9ydDogdGhlIHBvcnQKKyAqCisgKiBVc2VkIGZyb20gaXBhdGhfY2xvc2UoKSwgYW5kIGF0IGNoaXAgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2h0X2NsZWFyX3RpZHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBwb3J0KQoreworCXU2NCBfX2lvbWVtICp0aWRiYXNlOworCWludCBpOworCisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCXJldHVybjsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkludmFsaWRhdGUgVElEcyBmb3IgcG9ydCAldVxuIiwgcG9ydCk7CisKKwkvKgorCSAqIG5lZWQgdG8gaW52YWxpZGF0ZSBhbGwgb2YgdGhlIGV4cGVjdGVkIFRJRCBlbnRyaWVzIGZvciB0aGlzCisJICogcG9ydCwgc28gd2UgZG9uJ3QgaGF2ZSB2YWxpZCBlbnRyaWVzIHRoYXQgbWlnaHQgc29tZWhvdyBnZXQKKwkgKiB1c2VkIChlYXJseSBpbiBuZXh0IHVzZSBvZiB0aGlzIHBvcnQsIG9yIHRocm91Z2ggc29tZSBidWcpCisJICovCisJdGlkYmFzZSA9ICh1NjQgX19pb21lbSAqKSAoKGNoYXIgX19pb21lbSAqKShkZC0+aXBhdGhfa3JlZ2Jhc2UpICsKKwkJCQkgICBkZC0+aXBhdGhfcmN2dGlkYmFzZSArCisJCQkJICAgcG9ydCAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQgKgorCQkJCSAgIHNpemVvZigqdGlkYmFzZSkpOworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfcmN2dGlkY250OyBpKyspCisJCWlwYXRoX2h0X3B1dF90aWQoZGQsICZ0aWRiYXNlW2ldLCAxLCBkZC0+aXBhdGhfdGlkaW52YWxpZCk7CisKKwl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopICgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkJCSAgIGRkLT5pcGF0aF9yY3ZlZ3JiYXNlICsKKwkJCQkgICBwb3J0ICogZGQtPmlwYXRoX3JjdmVncmNudCAqCisJCQkJICAgc2l6ZW9mKCp0aWRiYXNlKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX3JjdmVncmNudDsgaSsrKQorCQlpcGF0aF9odF9wdXRfdGlkKGRkLCAmdGlkYmFzZVtpXSwgMCwgZGQtPmlwYXRoX3RpZGludmFsaWQpOworfQorCisvKioKKyAqIGlwYXRoX2h0X3RpZHRlbXBsYXRlIC0gc2V0dXAgY29uc3RhbnRzIGZvciBUSUQgdXBkYXRlcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBXZSBzZXR1cCBzdHVmZiB0aGF0IHdlIHVzZSBhIGxvdCwgdG8gYXZvaWQgY2FsY3VsYXRpbmcgZWFjaCB0aW1lCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2h0X3RpZHRlbXBsYXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlkZC0+aXBhdGhfdGlkdGVtcGxhdGUgPSBkZC0+aXBhdGhfaWJtYXhsZW4gPj4gMjsKKwlkZC0+aXBhdGhfdGlkdGVtcGxhdGUgPDw9IElORklOSVBBVEhfUlRfQlVGU0laRV9TSElGVDsKKwlkZC0+aXBhdGhfdGlkdGVtcGxhdGUgfD0gSU5GSU5JUEFUSF9SVF9WQUxJRDsKKworCS8qCisJICogd29yayBhcm91bmQgY2hpcCBlcnJhdGEgYnVnIDczNTgsIGJ5IG1hcmtpbmcgaW52YWxpZCB0aWRzCisJICogYXMgaGF2aW5nIG1heCBsZW5ndGgKKwkgKi8KKwlkZC0+aXBhdGhfdGlkaW52YWxpZCA9ICgtMUxMICYgSU5GSU5JUEFUSF9SVF9CVUZTSVpFX01BU0spIDw8CisJCUlORklOSVBBVEhfUlRfQlVGU0laRV9TSElGVDsKK30KKworc3RhdGljIGludCBpcGF0aF9odF9lYXJseV9pbml0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1MzIgX19pb21lbSAqcGlvYnVmOworCXUzMiBwaW9pbmNyLCB2YWwzMiwgZWdyc2l6ZTsKKwlpbnQgaTsKKworCS8qCisJICogb25lIGNhY2hlIGxpbmU7IGxvbmcgSUIgaGVhZGVycyB3aWxsIHNwaWxsIG92ZXIgaW50byByZWNlaXZlZAorCSAqIGJ1ZmZlcgorCSAqLworCWRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplID0gMTY7CisJZGQtPmlwYXRoX3JjdmhkcnNpemUgPSBJUEFUSF9ERkxUX1JDVkhEUlNJWkU7CisKKwkvKgorCSAqIEZvciBIVC00MDAsIHdlIGFsbG9jYXRlIGEgc29tZXdoYXQgb3Zlcmx5IGxhcmdlIGVhZ2VyIGJ1ZmZlciwKKwkgKiBzdWNoIHRoYXQgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IHdlIGNhbiByZWNlaXZlIHRoZSBsYXJnZXN0CisJICogcGFja2V0IHRoYXQgd2UgY2FuIHNlbmQgb3V0LiAgVG8gdHJ1bHkgc3VwcG9ydCBhIDRLQiBNVFUsCisJICogd2UgbmVlZCB0byBidW1wIHRoaXMgdG8gYSBsYXJnZSB2YWx1ZS4gIFRvIGRhdGUsIG90aGVyIHRoYW4KKwkgKiB0ZXN0aW5nLCB3ZSBoYXZlIG5ldmVyIGVuY291bnRlcmVkIGFuIEhDQSB0aGF0IGNhbiByZWFsbHkKKwkgKiBzZW5kIDRLQiBNVFUgcGFja2V0cywgc28gd2UgZG8gbm90IGhhbmRsZSB0aGF0ICh3ZSdsbCBnZXQKKwkgKiBlcnJvcnMgaW50ZXJydXB0cyBpZiB3ZSBldmVyIHNlZSBvbmUpLgorCSAqLworCWRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplID0gZGQtPmlwYXRoX3Bpb3NpemUyazsKKwllZ3JzaXplID0gZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemU7CisKKwkvKgorCSAqIHRoZSBtaW4oKSBjaGVjayBoZXJlIGlzIGN1cnJlbnRseSBhIG5vcCwgYnV0IGl0IG1heSBub3QKKwkgKiBhbHdheXMgYmUsIGRlcGVuZGluZyBvbiBqdXN0IGhvdyB3ZSBkbyBpcGF0aF9yY3ZlZ3JidWZzaXplCisJICovCisJZGQtPmlwYXRoX2libWF4bGVuID0gbWluKGRkLT5pcGF0aF9waW9zaXplMmssCisJCQkJIGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplKTsKKwlkZC0+aXBhdGhfaW5pdF9pYm1heGxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbjsKKwlpcGF0aF9odF90aWR0ZW1wbGF0ZShkZCk7CisKKwkvKgorCSAqIHplcm8gYWxsIHRoZSBUSUQgZW50cmllcyBhdCBzdGFydHVwLiAgV2UgZG8gdGhpcyBmb3Igc2FuaXR5LAorCSAqIGluIGNhc2Ugb2YgYSBwcmV2aW91cyBkcml2ZXIgY3Jhc2ggb2Ygc29tZSBraW5kLCBhbmQgYWxzbworCSAqIGJlY2F1c2UgdGhlIGNoaXAgcG93ZXJzIHVwIHdpdGggdGhlc2UgbWVtb3JpZXMgaW4gYW4gdW5rbm93bgorCSAqIHN0YXRlLiAgVXNlIHBvcnRjbnQsIG5vdCBjZmdwb3J0cywgc2luY2UgdGhpcyBpcyBmb3IgdGhlCisJICogZnVsbCBjaGlwLCBub3QgZm9yIGN1cnJlbnQgKHBvc3NpYmx5IGRpZmZlcmVudCkgY29uZmlndXJhdGlvbgorCSAqIHZhbHVlLgorCSAqIENoaXAgRXJyYXRhIGJ1ZyA2NDQ3CisJICovCisJZm9yICh2YWwzMiA9IDA7IHZhbDMyIDwgZGQtPmlwYXRoX3BvcnRjbnQ7IHZhbDMyKyspCisJCWlwYXRoX2h0X2NsZWFyX3RpZHMoZGQsIHZhbDMyKTsKKworCS8qCisJICogd3JpdGUgdGhlIHBiYyBvZiBlYWNoIGJ1ZmZlciwgdG8gYmUgc3VyZSBpdCdzIGluaXRpYWxpemVkLCB0aGVuCisJICogY2FuY2VsIGFsbCB0aGUgYnVmZmVycywgYW5kIGFsc28gYWJvcnQgYW55IHBhY2tldHMgdGhhdCBtaWdodAorCSAqIGhhdmUgYmVlbiBpbiBmbGlnaHQgZm9yIHNvbWUgcmVhc29uICh0aGUgbGF0dGVyIGlzIGZvciBkcml2ZXIKKwkgKiB1bmxvYWQvcmVsb2FkLCBidXQgaXNuJ3QgYSBiYWQgaWRlYSBhdCBmaXJzdCBpbml0KS4JUElPIHNlbmQKKwkgKiBpc24ndCBlbmFibGVkIGF0IHRoaXMgcG9pbnQsIHNvIHRoZXJlIGlzIG5vIGRhbmdlciBvZiBzZW5kaW5nCisJICogdGhlc2Ugb3V0IG9uIHRoZSB3aXJlLgorCSAqIENoaXAgRXJyYXRhIGJ1ZyA2NjEwCisJICovCisJcGlvYnVmID0gKHUzMiBfX2lvbWVtICopICgoKGNoYXIgX19pb21lbSAqKShkZC0+aXBhdGhfa3JlZ2Jhc2UpKSArCisJCQkJICBkZC0+aXBhdGhfcGlvYnVmYmFzZSk7CisJcGlvaW5jciA9IGRkLT5pcGF0aF9wYWxpZ24gLyBzaXplb2YoKnBpb2J1Zik7CisJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9waW9iY250Mms7IGkrKykgeworCQkvKgorCQkgKiByZWFzb25hYmxlIHdvcmQgY291bnQsIGp1c3QgdG8gaW5pdCBwYmMKKwkJICovCisJCXdyaXRlbCgxNiwgcGlvYnVmKTsKKwkJcGlvYnVmICs9IHBpb2luY3I7CisJfQorCS8qCisJICogc2VsZi1jbGVhcmluZworCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgSU5GSU5JUEFUSF9TX0FCT1JUKTsKKworCWlwYXRoX2dldF9lZXByb21faW5mbyhkZCk7CisJaWYoZGQtPmlwYXRoX2JvYXJkcmV2ID09IDUgJiYgZGQtPmlwYXRoX3NlcmlhbFswXSA9PSAnMScgJiYKKwkJZGQtPmlwYXRoX3NlcmlhbFsxXSA9PSAnMicgJiYgZGQtPmlwYXRoX3NlcmlhbFsyXSA9PSAnOCcpIHsKKwkJLyoKKwkJICogTGF0ZXIgcHJvZHVjdGlvbiBIVC00NjAgaGFzIHNhbWUgY2hhbmdlcyBhcyBIVC00NjUsIHNvCisJCSAqIGNhbiB1c2UgR1BJTyBpbnRlcnJ1cHRzLiAgVGhleSBoYXZlIHNlcmlhbCAjJ3Mgc3RhcnRpbmcKKwkJICogd2l0aCAxMjgsIHJhdGhlciB0aGFuIDExMi4KKwkJICovCisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9HUElPX0lOVFI7CisJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfUE9MTF9SWF9JTlRSOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9pbml0X2h0X2dldF9iYXNlX2luZm8gLSBzZXQgY2hpcC1zcGVjaWZpYyBmbGFncyBmb3IgdXNlciBjb2RlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGtiYXNlOiBpcGF0aF9iYXNlX2luZm8gcG9pbnRlcgorICoKKyAqIFdlIHNldCB0aGUgUENJRSBmbGFnIGJlY2F1c2UgdGhlIGxvd2VyIGJhbmR3aWR0aCBvbiBQQ0llIHZzCisgKiBIeXBlclRyYW5zcG9ydCBjYW4gYWZmZWN0IHNvbWUgdXNlciBwYWNrZXQgYWxnb3JpdGhpbXMuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfaHRfZ2V0X2Jhc2VfaW5mbyhzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCB2b2lkICprYmFzZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfYmFzZV9pbmZvICpraW5mbyA9IGtiYXNlOworCisJa2luZm8tPnNwaV9ydW50aW1lX2ZsYWdzIHw9IElQQVRIX1JVTlRJTUVfSFQgfAorCQlJUEFUSF9SVU5USU1FX1JDVkhEUl9DT1BZOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXBhdGhfaW5pdF9odDQwMF9mdW5jcyAtIHNldCB1cCB0aGUgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGdsb2JhbCwgYW5kIGlzIGNhbGxlZCBkaXJlY3RseSBhdCBpbml0IHRvIHNldCB1cCB0aGUKKyAqIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGxhdGVyIHVzZS4KKyAqLwordm9pZCBpcGF0aF9pbml0X2h0NDAwX2Z1bmNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlkZC0+aXBhdGhfZl9pbnRyc2V0dXAgPSBpcGF0aF9odF9pbnRjb25maWc7CisJZGQtPmlwYXRoX2ZfYnVzID0gaXBhdGhfc2V0dXBfaHRfY29uZmlnOworCWRkLT5pcGF0aF9mX3Jlc2V0ID0gaXBhdGhfc2V0dXBfaHRfcmVzZXQ7CisJZGQtPmlwYXRoX2ZfZ2V0X2JvYXJkbmFtZSA9IGlwYXRoX2h0X2JvYXJkbmFtZTsKKwlkZC0+aXBhdGhfZl9pbml0X2h3ZXJyb3JzID0gaXBhdGhfaHRfaW5pdF9od2Vycm9yczsKKwlkZC0+aXBhdGhfZl9pbml0X2h3ZXJyb3JzID0gaXBhdGhfaHRfaW5pdF9od2Vycm9yczsKKwlkZC0+aXBhdGhfZl9lYXJseV9pbml0ID0gaXBhdGhfaHRfZWFybHlfaW5pdDsKKwlkZC0+aXBhdGhfZl9oYW5kbGVfaHdlcnJvcnMgPSBpcGF0aF9odF9oYW5kbGVfaHdlcnJvcnM7CisJZGQtPmlwYXRoX2ZfcXVpZXRfc2VyZGVzID0gaXBhdGhfaHRfcXVpZXRfc2VyZGVzOworCWRkLT5pcGF0aF9mX2JyaW5ndXBfc2VyZGVzID0gaXBhdGhfaHRfYnJpbmd1cF9zZXJkZXM7CisJZGQtPmlwYXRoX2ZfY2xlYXJfdGlkcyA9IGlwYXRoX2h0X2NsZWFyX3RpZHM7CisJZGQtPmlwYXRoX2ZfcHV0X3RpZCA9IGlwYXRoX2h0X3B1dF90aWQ7CisJZGQtPmlwYXRoX2ZfY2xlYW51cCA9IGlwYXRoX3NldHVwX2h0X2NsZWFudXA7CisJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkID0gaXBhdGhfc2V0dXBfaHRfc2V0ZXh0bGVkOworCWRkLT5pcGF0aF9mX2dldF9iYXNlX2luZm8gPSBpcGF0aF9odF9nZXRfYmFzZV9pbmZvOworCisJLyoKKwkgKiBpbml0aWFsaXplIGNoaXAtc3BlY2lmaWMgdmFyaWFibGVzCisJICovCisJZGQtPmlwYXRoX2ZfdGlkdGVtcGxhdGUgPSBpcGF0aF9odF90aWR0ZW1wbGF0ZTsKKworCS8qCisJICogc2V0dXAgdGhlIHJlZ2lzdGVyIG9mZnNldHMsIHNpbmNlIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZWFjaAorCSAqIGNoaXAKKwkgKi8KKwlkZC0+aXBhdGhfa3JlZ3MgPSAmaXBhdGhfaHRfa3JlZ3M7CisJZGQtPmlwYXRoX2NyZWdzID0gJmlwYXRoX2h0X2NyZWdzOworCisJLyoKKwkgKiBkbyB2ZXJ5IGVhcmx5IGluaXQgdGhhdCBpcyBuZWVkZWQgYmVmb3JlIGlwYXRoX2ZfYnVzIGlzCisJICogY2FsbGVkCisJICovCisJaXBhdGhfaW5pdF9odF92YXJpYWJsZXMoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzgzMjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCkBAIC0wLDAgKzEsOTU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworLyoKKyAqIG1pbiBidWZmZXJzIHdlIHdhbnQgdG8gaGF2ZSBwZXIgcG9ydCwgYWZ0ZXIgZHJpdmVyCisgKi8KKyNkZWZpbmUgSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQgOAorCisvKgorICogTnVtYmVyIG9mIHBvcnRzIHdlIGFyZSBjb25maWd1cmVkIHRvIHVzZSAodG8gYWxsb3cgZm9yIG1vcmUgcGlvCisgKiBidWZmZXJzIHBlciBwb3J0LCBldGMuKSAgWmVybyBtZWFucyB1c2UgY2hpcCB2YWx1ZS4KKyAqLworc3RhdGljIHVzaG9ydCBpcGF0aF9jZmdwb3J0czsKKworbW9kdWxlX3BhcmFtX25hbWVkKGNmZ3BvcnRzLCBpcGF0aF9jZmdwb3J0cywgdXNob3J0LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY2ZncG9ydHMsICJTZXQgbWF4IG51bWJlciBvZiBwb3J0cyB0byB1c2UiKTsKKworLyoKKyAqIE51bWJlciBvZiBidWZmZXJzIHJlc2VydmVkIGZvciBkcml2ZXIgKGxheWVyZWQgZHJpdmVycyBhbmQgU01BCisgKiBzZW5kKS4gIFJlc2VydmVkIGF0IGVuZCBvZiBidWZmZXIgbGlzdC4gICBJbml0aWFsaXplZCBiYXNlZCBvbgorICogbnVtYmVyIG9mIFBJTyBidWZmZXJzIGlmIG5vdCBzZXQgdmlhIG1vZHVsZSBpbnRlcmZhY2UuCisgKiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCBpdCdzIGdsb2JhbCwgYnV0IHdlJ2xsIHVzZSBkaWZmZXJlbnQKKyAqIG51bWJlcnMgZm9yIGRpZmZlcmVudCBjaGlwIHR5cGVzLiAgU28gdGhlIGRlZmF1bHQgdmFsdWUgaXMgbm90CisgKiB2ZXJ5IHVzZWZ1bC4gIEkndmUgcmVkZWZpbmVkIGl0IGZvciB0aGUgMS4zIHJlbGVhc2Ugc28gdGhhdCBpdCdzCisgKiB6ZXJvIHVubGVzcyBzZXQgYnkgdGhlIHVzZXIgdG8gc29tZXRoaW5nIGVsc2UsIGluIHdoaWNoIGNhc2Ugd2UKKyAqIHRyeSB0byByZXNwZWN0IGl0LgorICovCitzdGF0aWMgdXNob3J0IGlwYXRoX2twaW9idWZzOworCitzdGF0aWMgaW50IGlwYXRoX3NldF9rcGlvYnVmcyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKworbW9kdWxlX3BhcmFtX2NhbGwoa3Bpb2J1ZnMsIGlwYXRoX3NldF9rcGlvYnVmcywgcGFyYW1fZ2V0X3VzaG9ydCwKKwkJICAmaXBhdGhfa3Bpb2J1ZnMsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moa3Bpb2J1ZnMsICJTZXQgbnVtYmVyIG9mIFBJTyBidWZmZXJzIGZvciBkcml2ZXIiKTsKKworLyoqCisgKiBjcmVhdGVfcG9ydDBfZWdyIC0gYWxsb2NhdGUgdGhlIGVhZ2VyIFRJRCBidWZmZXJzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFRoaXMgY29kZSBpcyBub3cgcXVpdGUgZGlmZmVyZW50IGZvciB1c2VyIGFuZCBrZXJuZWwsIGJlY2F1c2UKKyAqIHRoZSBrZXJuZWwgdXNlcyBza2IncywgZm9yIHRoZSBhY2NlbGVyYXRlZCBuZXR3b3JrIHBlcmZvcm1hbmNlLgorICogVGhpcyBpcyB0aGUga2VybmVsIChwb3J0MCkgdmVyc2lvbi4KKyAqCisgKiBBbGxvY2F0ZSB0aGUgZWFnZXIgVElEIGJ1ZmZlcnMgYW5kIHByb2dyYW0gdGhlbSBpbnRvIGluZmluaXBhdGguCisgKiBXZSB1c2UgdGhlIG5ldHdvcmsgbGF5ZXIgYWxsb2Nfc2tiKCkgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHRoZQorICogbWVtb3J5LCBhbmQgZWl0aGVyIHVzZSB0aGUgYnVmZmVycyBhcyBpcyBmb3IgdGhpbmdzIGxpa2UgU01BCisgKiBwYWNrZXRzLCBvciBwYXNzIHRoZSBidWZmZXJzIHVwIHRvIHRoZSBpcGF0aCBsYXllcmVkIGRyaXZlciBhbmQKKyAqIHRoZW5jZSB0aGUgbmV0d29yayBsYXllciwgcmVwbGFjaW5nIHRoZW0gYXMgd2UgZG8gc28gKHNlZQorICogaXBhdGhfcmN2X2xheWVyKCkpLgorICovCitzdGF0aWMgaW50IGNyZWF0ZV9wb3J0MF9lZ3Ioc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXVuc2lnbmVkIGUsIGVncmNudDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnM7CisJaW50IHJldDsKKworCWVncmNudCA9IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7CisKKwlza2JzID0gdm1hbGxvYyhzaXplb2YoKmRkLT5pcGF0aF9wb3J0MF9za2JzKSAqIGVncmNudCk7CisJaWYgKHNrYnMgPT0gTlVMTCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiYWxsb2NhdGlvbiBlcnJvciBmb3IgZWFnZXIgVElEICIKKwkJCSAgICAgICJza2IgYXJyYXlcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCWZvciAoZSA9IDA7IGUgPCBlZ3JjbnQ7IGUrKykgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgYml0IHRyaWNreSBpbiB0aGF0IHdlIGFsbG9jYXRlIGV4dHJhCisJCSAqIHNwYWNlIGZvciAyIGJ5dGVzIG9mIHRoZSAxNCBieXRlIGV0aGVybmV0IGhlYWRlci4KKwkJICogVGhlc2UgdHdvIGJ5dGVzIGFyZSBwYXNzZWQgaW4gdGhlIGlwYXRoIGhlYWRlciBzbworCQkgKiB0aGUgcmVzdCBvZiB0aGUgZGF0YSBpcyB3b3JkIGFsaWduZWQuICBXZSBhbGxvY2F0ZQorCQkgKiA0IGJ5dGVzIHNvIHRoYXQgdGhlIGRhdGEgYnVmZmVyIHN0YXlzIHdvcmQgYWxpZ25lZC4KKwkJICogU2VlIGlwYXRoX2tyZWNlaXZlKCkgZm9yIG1vcmUgZGV0YWlscy4KKwkJICovCisJCXNrYnNbZV0gPSBpcGF0aF9hbGxvY19za2IoZGQsIEdGUF9LRVJORUwpOworCQlpZiAoIXNrYnNbZV0pIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJTS0IgYWxsb2NhdGlvbiBlcnJvciBmb3IgIgorCQkJCSAgICAgICJlYWdlciBUSUQgJXVcbiIsIGUpOworCQkJd2hpbGUgKGUgIT0gMCkKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYnNbLS1lXSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisJfQorCS8qCisJICogQWZ0ZXIgbG9vcCBhYm92ZSwgc28gd2UgY2FuIHRlc3Qgbm9uLU5VTEwgdG8gc2VlIGlmIHJlYWR5CisJICogdG8gdXNlIGF0IHJlY2VpdmUsIGV0Yy4KKwkgKi8KKwlkZC0+aXBhdGhfcG9ydDBfc2ticyA9IHNrYnM7CisKKwlmb3IgKGUgPSAwOyBlIDwgZWdyY250OyBlKyspIHsKKwkJdW5zaWduZWQgbG9uZyBwaHlzID0KKwkJCXZpcnRfdG9fcGh5cyhkZC0+aXBhdGhfcG9ydDBfc2tic1tlXS0+ZGF0YSk7CisJCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsIGUgKyAodTY0IF9faW9tZW0gKikKKwkJCQkgICAgKChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlICsKKwkJCQkgICAgIGRkLT5pcGF0aF9yY3ZlZ3JiYXNlKSwgMCwgcGh5cyk7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJyaW5ndXBfbGluayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTY0IHZhbCwgaWJjOworCWludCByZXQgPSAwOworCisJLyogaG9sZCBJQkMgaW4gcmVzZXQgKi8KKwlkZC0+aXBhdGhfY29udHJvbCAmPSB+SU5GSU5JUEFUSF9DX0xJTktFTkFCTEU7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLAorCQkJIGRkLT5pcGF0aF9jb250cm9sKTsKKworCS8qCisJICogTm90ZSB0aGF0IHByaW9yIHRvIHRyeSAxNCBvciAxNSBvZiBJQiwgdGhlIGNyZWRpdCBzY2FsaW5nCisJICogd2Fzbid0IHdvcmtpbmcsIGJlY2F1c2UgaXQgd2FzIHN3YXBwZWQgZm9yIHdyaXRlcyB3aXRoIHRoZQorCSAqIDEgYml0IGRlZmF1bHQgbGlua3N0YXRlIGZpZWxkCisJICovCisKKwkvKiBpZ25vcmUgcGJjIGFuZCBhbGlnbiB3b3JkICovCisJdmFsID0gZGQtPmlwYXRoX3Bpb3NpemUyayAtIDIgKiBzaXplb2YodTMyKTsKKwkvKgorCSAqIGZvciBJQ1JDLCB3aGljaCB3ZSBvbmx5IHNlbmQgaW4gZGlhZyB0ZXN0IHBrdCBtb2RlLCBhbmQgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgZm9yIG10dQorCSAqLworCXZhbCArPSAxOworCS8qCisJICogU2V0IHRoZSBJQkMgbWF4cGt0bGVuZ3RoIHRvIHRoZSBzaXplIG9mIG91ciBwaW8gYnVmZmVycyB0aGUKKwkgKiBtYXhwa3RsZW5ndGggaXMgaW4gd29yZHMuICBUaGlzIGlzICpub3QqIHRoZSBJQiBkYXRhIE1UVS4KKwkgKi8KKwlpYmMgPSAodmFsIC8gc2l6ZW9mKHUzMikpIDw8IElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fU0hJRlQ7CisJLyogaW4gS0IgKi8KKwlpYmMgfD0gMHg1VUxMIDw8IElORklOSVBBVEhfSUJDQ19GTE9XQ1RSTFdBVEVSTUFSS19TSElGVDsKKwkvKgorCSAqIEhvdyBvZnRlbiBmbG93Y3RybCBzZW50LiAgTW9yZSBvciBsZXNzIGluIHVzZWNzOyBiYWxhbmNlIGFnYWluc3QKKwkgKiB3YXRlcm1hcmsgdmFsdWUsIHNvIHRoYXQgaW4gdGhlb3J5IHNlbmRlcnMgYWx3YXlzIGdldCBhIGZsb3cKKwkgKiBjb250cm9sIHVwZGF0ZSBpbiB0aW1lIHRvIG5vdCBsZXQgdGhlIElCIGxpbmsgZ28gaWRsZS4KKwkgKi8KKwlpYmMgfD0gMHgzVUxMIDw8IElORklOSVBBVEhfSUJDQ19GTE9XQ1RSTFBFUklPRF9TSElGVDsKKwkvKiBtYXggZXJyb3IgdG9sZXJhbmNlICovCisJaWJjIHw9IDB4ZlVMTCA8PCBJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUOworCS8qIHVzZSAicmVhbCIgYnVmZmVyIHNwYWNlIGZvciAqLworCWliYyB8PSA0VUxMIDw8IElORklOSVBBVEhfSUJDQ19DUkVESVRTQ0FMRV9TSElGVDsKKwkvKiBJQiBjcmVkaXQgZmxvdyBjb250cm9sLiAqLworCWliYyB8PSAweGZVTEwgPDwgSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQ7CisJLyogaW5pdGlhbGx5IGNvbWUgdXAgd2FpdGluZyBmb3IgVFMxLCB3aXRob3V0IHNlbmRpbmcgYW55dGhpbmcuICovCisJZGQtPmlwYXRoX2liY2N0cmwgPSBpYmM7CisJLyoKKwkgKiBXYW50IHRvIHN0YXJ0IG91dCB3aXRoIGJvdGggTElOS0NNRCBhbmQgTElOS0lOSVRDTUQgaW4gTk9QCisJICogKDAgYW5kIDApLiAgRG9uJ3QgcHV0IGxpbmtpbml0Y21kIGluIGlwYXRoX2liY2N0cmwsIHdhbnQgdGhhdAorCSAqIHRvIHN0YXkgYSBOT1AKKwkgKi8KKwlpYmMgfD0gSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUgPDwKKwkJSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIldyaXRpbmcgMHglbGx4IHRvIGliY2N0cmxcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGliYyk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLCBpYmMpOworCisJLy8gYmUgc3VyZSBjaGlwIHNhdyBpdAorCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCisJcmV0ID0gZGQtPmlwYXRoX2ZfYnJpbmd1cF9zZXJkZXMoZGQpOworCisJaWYgKHJldCkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkNvdWxkIG5vdCBpbml0aWFsaXplIFNlckRlcywgIgorCQkJICJub3QgdXNhYmxlXG4iKTsKKwllbHNlIHsKKwkJLyogZW5hYmxlIElCQyAqLworCQlkZC0+aXBhdGhfY29udHJvbCB8PSBJTkZJTklQQVRIX0NfTElOS0VOQUJMRTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLAorCQkJCSBkZC0+aXBhdGhfY29udHJvbCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbml0X2NoaXBfZmlyc3Qoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJICAgc3RydWN0IGlwYXRoX3BvcnRkYXRhICoqcGRwKQoreworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBOVUxMOworCWludCByZXQgPSAwOworCXU2NCB2YWw7CisKKwkvKgorCSAqIHNraXAgY2ZncG9ydHMgc3R1ZmYgYmVjYXVzZSB3ZSBhcmUgbm90IGFsbG9jYXRpbmcgbWVtb3J5LAorCSAqIGFuZCB3ZSBkb24ndCB3YW50IHByb2JsZW1zIGlmIHRoZSBwb3J0Y250IGNoYW5nZWQgZHVlIHRvCisJICogY2ZncG9ydHMuICBXZSBkbyBzdGlsbCBjaGVjayBhbmQgcmVwb3J0IGEgZGlmZmVyZW5jZSwgaWYKKwkgKiBub3Qgc2FtZSAoc2hvdWxkIGJlIGltcG9zc2libGUpLgorCSAqLworCWRkLT5pcGF0aF9wb3J0Y250ID0KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcG9ydGNudCk7CisJaWYgKCFpcGF0aF9jZmdwb3J0cykKKwkJZGQtPmlwYXRoX2NmZ3BvcnRzID0gZGQtPmlwYXRoX3BvcnRjbnQ7CisJZWxzZSBpZiAoaXBhdGhfY2ZncG9ydHMgPD0gZGQtPmlwYXRoX3BvcnRjbnQpIHsKKwkJZGQtPmlwYXRoX2NmZ3BvcnRzID0gaXBhdGhfY2ZncG9ydHM7CisJCWlwYXRoX2RiZygiQ29uZmlndXJlZCB0byB1c2UgJXUgcG9ydHMgb3V0IG9mICV1IGluIGNoaXBcbiIsCisJCQkgIGRkLT5pcGF0aF9jZmdwb3J0cywgZGQtPmlwYXRoX3BvcnRjbnQpOworCX0gZWxzZSB7CisJCWRkLT5pcGF0aF9jZmdwb3J0cyA9IGRkLT5pcGF0aF9wb3J0Y250OworCQlpcGF0aF9kYmcoIlRyaWVkIHRvIGNvbmZpZ3VyZWQgdG8gdXNlICV1IHBvcnRzOyBjaGlwICIKKwkJCSAgIm9ubHkgc3VwcG9ydHMgJXVcbiIsIGlwYXRoX2NmZ3BvcnRzLAorCQkJICBkZC0+aXBhdGhfcG9ydGNudCk7CisJfQorCWRkLT5pcGF0aF9wZCA9IGt6YWxsb2Moc2l6ZW9mKCpkZC0+aXBhdGhfcGQpICogZGQtPmlwYXRoX2NmZ3BvcnRzLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFkZC0+aXBhdGhfcGQpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwb3J0ZGF0YSBhcnJheSwgIgorCQkJICAgICAgImZhaWxpbmdcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJZGQtPmlwYXRoX2xhc3RlZ3JoZWFkcyA9IGt6YWxsb2Moc2l6ZW9mKCpkZC0+aXBhdGhfbGFzdGVncmhlYWRzKQorCQkJCQkgKiBkZC0+aXBhdGhfY2ZncG9ydHMsCisJCQkJCSBHRlBfS0VSTkVMKTsKKwlkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlscyA9CisJCWt6YWxsb2Moc2l6ZW9mKCpkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlscykKKwkJCSogZGQtPmlwYXRoX2NmZ3BvcnRzLCBHRlBfS0VSTkVMKTsKKworCWlmICghZGQtPmlwYXRoX2xhc3RlZ3JoZWFkcyB8fCAhZGQtPmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHMpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlVuYWJsZSB0byBhbGxvY2F0ZSBoZWFkIGFycmF5cywgIgorCQkJICAgICAgImZhaWxpbmdcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJZGQtPmlwYXRoX3BkWzBdID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRkLT5pcGF0aF9wZFswXSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHBvcnRkYXRhIGZvciBwb3J0ICIKKwkJCSAgICAgICIwLCBmYWlsaW5nXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKwlwZCA9IGRkLT5pcGF0aF9wZFswXTsKKwlwZC0+cG9ydF9kZCA9IGRkOworCXBkLT5wb3J0X3BvcnQgPSAwOworCXBkLT5wb3J0X2NudCA9IDE7CisJLyogVGhlIHBvcnQgMCBwa2V5IHRhYmxlIGlzIHVzZWQgYnkgdGhlIGxheWVyIGludGVyZmFjZS4gKi8KKwlwZC0+cG9ydF9wa2V5c1swXSA9IElQU19ERUZBVUxUX1BfS0VZOworCWRkLT5pcGF0aF9yY3Z0aWRjbnQgPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3Z0aWRjbnQpOworCWRkLT5pcGF0aF9yY3Z0aWRiYXNlID0KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2dGlkYmFzZSk7CisJZGQtPmlwYXRoX3JjdmVncmNudCA9CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmVncmNudCk7CisJZGQtPmlwYXRoX3JjdmVncmJhc2UgPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZlZ3JiYXNlKTsKKwlkZC0+aXBhdGhfcGFsaWduID0KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcGFnZWFsaWduKTsKKwlkZC0+aXBhdGhfcGlvYnVmYmFzZSA9CisJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRwaW9idWZiYXNlKTsKKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kcGlvc2l6ZSk7CisJZGQtPmlwYXRoX3Bpb3NpemUyayA9IHZhbCAmIH4wVTsKKwlkZC0+aXBhdGhfcGlvc2l6ZTRrID0gdmFsID4+IDMyOworCWRkLT5pcGF0aF9pYm10dSA9IDQwOTY7CS8qIGRlZmF1bHQgdG8gbGFyZ2VzdCBsZWdhbCBNVFUgKi8KKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kcGlvYnVmY250KTsKKwlkZC0+aXBhdGhfcGlvYmNudDJrID0gdmFsICYgfjBVOworCWRkLT5pcGF0aF9waW9iY250NGsgPSB2YWwgPj4gMzI7CisJZGQtPmlwYXRoX3BpbzJrYmFzZSA9CisJCSh1MzIgX19pb21lbSAqKSAoKChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCQkJIChkZC0+aXBhdGhfcGlvYnVmYmFzZSAmIDB4ZmZmZmZmZmYpKTsKKwlpZiAoZGQtPmlwYXRoX3Bpb2JjbnQ0aykgeworCQlkZC0+aXBhdGhfcGlvNGtiYXNlID0gKHUzMiBfX2lvbWVtICopCisJCQkoKChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCQkgKGRkLT5pcGF0aF9waW9idWZiYXNlID4+IDMyKSk7CisJCS8qCisJCSAqIDRLIGJ1ZmZlcnMgdGFrZSAyIHBhZ2VzOyB3ZSB1c2Ugcm91bmR1cCBqdXN0IHRvIGJlCisJCSAqIHBhcmFub2lkOyB3ZSBjYWxjdWxhdGUgaXQgb25jZSBoZXJlLCByYXRoZXIgdGhhbiBvbgorCQkgKiBldmVyIGJ1ZiBhbGxvY2F0ZQorCQkgKi8KKwkJZGQtPmlwYXRoXzRrYWxpZ24gPSBBTElHTihkZC0+aXBhdGhfcGlvc2l6ZTRrLAorCQkJCQkgIGRkLT5pcGF0aF9wYWxpZ24pOworCQlpcGF0aF9kYmcoIiV1IDJrKCV4KSBwaW9idWZzIEAgJXAsICV1IDRrKCV4KSBAICVwICIKKwkJCSAgIigleCBhbGlnbmVkKVxuIiwKKwkJCSAgZGQtPmlwYXRoX3Bpb2JjbnQyaywgZGQtPmlwYXRoX3Bpb3NpemUyaywKKwkJCSAgZGQtPmlwYXRoX3BpbzJrYmFzZSwgZGQtPmlwYXRoX3Bpb2JjbnQ0aywKKwkJCSAgZGQtPmlwYXRoX3Bpb3NpemU0aywgZGQtPmlwYXRoX3BpbzRrYmFzZSwKKwkJCSAgZGQtPmlwYXRoXzRrYWxpZ24pOworCX0KKwllbHNlIGlwYXRoX2RiZygiJXUgMmsgcGlvYnVmcyBAICVwXG4iLAorCQkgICAgICAgZGQtPmlwYXRoX3Bpb2JjbnQyaywgZGQtPmlwYXRoX3BpbzJrYmFzZSk7CisKKwlzcGluX2xvY2tfaW5pdCgmZGQtPmlwYXRoX3RpZF9sb2NrKTsKKworZG9uZToKKwkqcGRwID0gcGQ7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpbml0X2NoaXBfcmVzZXQgLSByZS1pbml0aWFsaXplIGFmdGVyIGEgcmVzZXQsIG9yIGVuYWJsZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwZHA6IG91dHB1dCBmb3IgcG9ydCBkYXRhCisgKgorICogc2FuaXR5IGNoZWNrIGF0IGxlYXN0IHNvbWUgb2YgdGhlIHZhbHVlcyBhZnRlciByZXNldCwgYW5kCisgKiBlbnN1cmUgbm8gcmVjZWl2ZSBvciB0cmFuc21pdCAoZXhwbGljdGx5LCBpbiBjYXNlIHJlc2V0CisgKiBmYWlsZWQKKyAqLworc3RhdGljIGludCBpbml0X2NoaXBfcmVzZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJICAgc3RydWN0IGlwYXRoX3BvcnRkYXRhICoqcGRwKQoreworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJdTMyIHJ0bXA7CisKKwkqcGRwID0gcGQgPSBkZC0+aXBhdGhfcGRbMF07CisJLyogZW5zdXJlIGNoaXAgZG9lcyBubyBzZW5kcyBvciByZWNlaXZlcyB3aGlsZSB3ZSByZS1pbml0aWFsaXplICovCisJZGQtPmlwYXRoX2NvbnRyb2wgPSBkZC0+aXBhdGhfc2VuZGN0cmwgPSBkZC0+aXBhdGhfcmN2Y3RybCA9IDBVOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwgMCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwgMCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLCAwKTsKKworCXJ0bXAgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wb3J0Y250KTsKKwlpZiAoZGQtPmlwYXRoX3BvcnRjbnQgIT0gcnRtcCkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgInBvcnRjbnQgd2FzICV1IGJlZm9yZSAiCisJCQkgInJlc2V0LCBub3cgJXUsIHVzaW5nIG9yaWdpbmFsXG4iLAorCQkJIGRkLT5pcGF0aF9wb3J0Y250LCBydG1wKTsKKwlydG1wID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2dGlkY250KTsKKwlpZiAocnRtcCAhPSBkZC0+aXBhdGhfcmN2dGlkY250KQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAidGlkY250IHdhcyAldSBiZWZvcmUgIgorCQkJICJyZXNldCwgbm93ICV1LCB1c2luZyBvcmlnaW5hbFxuIiwKKwkJCSBkZC0+aXBhdGhfcmN2dGlkY250LCBydG1wKTsKKwlydG1wID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2dGlkYmFzZSk7CisJaWYgKHJ0bXAgIT0gZGQtPmlwYXRoX3JjdnRpZGJhc2UpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJ0aWRiYXNlIHdhcyAldSBiZWZvcmUgIgorCQkJICJyZXNldCwgbm93ICV1LCB1c2luZyBvcmlnaW5hbFxuIiwKKwkJCSBkZC0+aXBhdGhfcmN2dGlkYmFzZSwgcnRtcCk7CisJcnRtcCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmVncmNudCk7CisJaWYgKHJ0bXAgIT0gZGQtPmlwYXRoX3JjdmVncmNudCkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgImVncmNudCB3YXMgJXUgYmVmb3JlICIKKwkJCSAicmVzZXQsIG5vdyAldSwgdXNpbmcgb3JpZ2luYWxcbiIsCisJCQkgZGQtPmlwYXRoX3JjdmVncmNudCwgcnRtcCk7CisJcnRtcCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmVncmJhc2UpOworCWlmIChydG1wICE9IGRkLT5pcGF0aF9yY3ZlZ3JiYXNlKQorCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiZWdyYmFzZSB3YXMgJXUgYmVmb3JlICIKKwkJCSAicmVzZXQsIG5vdyAldSwgdXNpbmcgb3JpZ2luYWxcbiIsCisJCQkgZGQtPmlwYXRoX3JjdmVncmJhc2UsIHJ0bXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9waW9hdmFpbHJlZ3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQ7CisKKwlkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSA9IGRtYV9hbGxvY19jb2hlcmVudCgKKwkJJmRkLT5wY2lkZXYtPmRldiwgUEFHRV9TSVpFLCAmZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gYWxsb2NhdGUgUElPYXZhaWwgcmVnIGFyZWEgIgorCQkJICAgICAgImluIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIHdlIHJlYWxseSB3YW50IEwyIGNhY2hlIGFsaWduZWQsIGJ1dCBmb3IgY3VycmVudCBDUFVzIG9mCisJICogaW50ZXJlc3QsIHRoZXkgYXJlIHRoZSBzYW1lLgorCSAqLworCWRkLT5pcGF0aF9zdGF0dXNwID0gKHU2NCAqKQorCQkoKGNoYXIgKilkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSArCisJCSAoKDIgKiBMMV9DQUNIRV9CWVRFUyArCisJCSAgIGRkLT5pcGF0aF9waW9hdnJlZ3MgKiBzaXplb2YodTY0KSkgJiB+TDFfQ0FDSEVfQllURVMpKTsKKwkvKiBjb3B5IHRoZSBjdXJyZW50IHZhbHVlIG5vdyB0aGF0IGl0J3MgcmVhbGx5IGFsbG9jYXRlZCAqLworCSpkZC0+aXBhdGhfc3RhdHVzcCA9IGRkLT5faXBhdGhfc3RhdHVzOworCS8qCisJICogc2V0dXAgYnVmZmVyIHRvIGhvbGQgZnJlZXplIG1zZywgYWNjZXNzaWJsZSB0byBhcHBzLAorCSAqIGZvbGxvd2luZyBzdGF0dXNwCisJICovCisJZGQtPmlwYXRoX2ZyZWV6ZW1zZyA9IChjaGFyICopJmRkLT5pcGF0aF9zdGF0dXNwWzFdOworCS8qIGFuZCBpdHMgbGVuZ3RoICovCisJZGQtPmlwYXRoX2ZyZWV6ZWxlbiA9IEwxX0NBQ0hFX0JZVEVTIC0gc2l6ZW9mKGRkLT5pcGF0aF9zdGF0dXNwWzBdKTsKKworCWlmIChkZC0+aXBhdGhfdW5pdCAqIDY0ID4gKElQQVRIX1BPUlQwX1JDVkhEUlRBSUxfU0laRSAtIDY0KSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAidW5pdCAldSB0b28gbGFyZ2UgZm9yIHBvcnQgMCAiCisJCQkgICAgICAicmN2aGRydGFpbCBidWZmZXIgc2l6ZVxuIiwgZGQtPmlwYXRoX3VuaXQpOworCQlyZXQgPSAtRU5PREVWOworCX0KKwllbHNlCisJCXJldCA9IDA7CisKKwkvKiBzbyB3ZSBjYW4gZ2V0IGN1cnJlbnQgdGFpbCBpbiBpcGF0aF9rcmVjZWl2ZSgpLCBwZXIgY2hpcCAqLworCWRkLT5pcGF0aF9oZHJxdGFpbHB0ciA9ICZpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsWworCQlkZC0+aXBhdGhfdW5pdCAqICg2NCAvIHNpemVvZigqaXBhdGhfcG9ydDBfcmN2aGRydGFpbCkpXTsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpbml0X3NoYWRvd190aWRzIC0gYWxsb2NhdGUgdGhlIHNoYWRvdyBUSUQgYXJyYXkKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogYWxsb2NhdGUgdGhlIHNoYWRvdyBUSUQgYXJyYXksIHNvIHdlIGNhbiBpcGF0aF9tdW5sb2NrIHByZXZpb3VzCisgKiBlbnRyaWVzLiAgSXQgbWF5IG1ha2UgbW9yZSBzZW5zZSB0byBtb3ZlIHRoZSBwYWdlc2hhZG93IHRvIHRoZQorICogcG9ydCBkYXRhIHN0cnVjdHVyZSwgc28gd2Ugb25seSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBvcnRzIGFjdHVhbGx5CisgKiBpbiB1c2UsIHNpbmNlIHdlIGF0IDhrIHBlciBwb3J0LCBub3cuCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfc2hhZG93X3RpZHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWRkLT5pcGF0aF9wYWdlc2hhZG93ID0gKHN0cnVjdCBwYWdlICoqKQorCQl2bWFsbG9jKGRkLT5pcGF0aF9jZmdwb3J0cyAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQgKgorCQkJc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwlpZiAoIWRkLT5pcGF0aF9wYWdlc2hhZG93KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIGFsbG9jYXRlIHNoYWRvdyBwYWdlICogIgorCQkJICAgICAgImFycmF5LCBubyBleHBlY3RlZCBzZW5kcyFcbiIpOworCWVsc2UKKwkJbWVtc2V0KGRkLT5pcGF0aF9wYWdlc2hhZG93LCAwLAorCQkgICAgICAgZGQtPmlwYXRoX2NmZ3BvcnRzICogZGQtPmlwYXRoX3JjdnRpZGNudCAqCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfY2hpcChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCBpbnQgcmVpbml0KQoreworCXUzMiB2YWw7CisJaW50IGk7CisKKwlpZiAoIXJlaW5pdCkgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpcGF0aF9zbWFfc3RhdGVfd2FpdCk7CisJfQorCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisKKwkvKiBFbmFibGUgUElPIHNlbmQsIGFuZCB1cGRhdGUgb2YgUElPYXZhaWwgcmVncyB0byBtZW1vcnkuICovCisJZGQtPmlwYXRoX3NlbmRjdHJsID0gSU5GSU5JUEFUSF9TX1BJT0VOQUJMRSB8CisJCUlORklOSVBBVEhfU19QSU9CVUZBVkFJTFVQRDsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7CisKKwkvKgorCSAqIGVuYWJsZSBwb3J0IDAgcmVjZWl2ZSwgYW5kIHJlY2VpdmUgaW50ZXJydXB0LiAgb3RoZXIgcG9ydHMKKwkgKiBkb25lIGFzIHVzZXIgb3BlbnMgYW5kIGluaXRzIHRoZW0uCisJICovCisJZGQtPmlwYXRoX3JjdmN0cmwgPSBJTkZJTklQQVRIX1JfVEFJTFVQRCB8CisJCSgxVUxMIDw8IElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUKSB8CisJCSgxVUxMIDw8IElORklOSVBBVEhfUl9JTlRSQVZBSUxfU0hJRlQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisKKwkvKgorCSAqIG5vdyByZWFkeSBmb3IgdXNlLiAgdGhpcyBzaG91bGQgYmUgY2xlYXJlZCB3aGVuZXZlciB3ZQorCSAqIGRldGVjdCBhIHJlc2V0LCBvciBpbml0aWF0ZSBvbmUuCisJICovCisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0lOSVRURUQ7CisKKwkvKgorCSAqIGluaXQgb3VyIHNoYWRvdyBjb3BpZXMgb2YgaGVhZCBmcm9tIHRhaWwgdmFsdWVzLCBhbmQgd3JpdGUKKwkgKiBoZWFkIHZhbHVlcyB0byBtYXRjaC4KKwkgKi8KKwl2YWwgPSBpcGF0aF9yZWFkX3VyZWczMihkZCwgdXJfcmN2ZWdyaW5kZXh0YWlsLCAwKTsKKwkodm9pZClpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZlZ3JpbmRleGhlYWQsIHZhbCwgMCk7CisJZGQtPmlwYXRoX3BvcnQwaGVhZCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJ0YWlsLCAwKTsKKworCS8qIEluaXRpYWxpemUgc28gd2UgaW50ZXJydXB0IG9uIG5leHQgcGFja2V0IHJlY2VpdmVkICovCisJKHZvaWQpaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwKKwkJCSAgICAgICBkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYgfAorCQkJICAgICAgIGRkLT5pcGF0aF9wb3J0MGhlYWQsIDApOworCisJLyoKKwkgKiBieSBub3cgcGlvYXZhaWwgdXBkYXRlcyB0byBtZW1vcnkgc2hvdWxkIGhhdmUgb2NjdXJyZWQsIHNvCisJICogY29weSB0aGVtIGludG8gb3VyIHdvcmtpbmcvc2hhZG93IHJlZ2lzdGVyczsgdGhpcyBpcyBpbgorCSAqIGNhc2Ugc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBhYm9ydCwgYnV0IG1vc3RseSB0byBnZXQgdGhlCisJICogaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGdlbmVyYXRpb24gYml0IGNvcnJlY3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9waW9hdnJlZ3M7IGkrKykgeworCQlfX2xlNjQgdmFsOworCisJCS8qCisJCSAqIENoaXAgRXJyYXRhIGJ1ZyA2NjQxOyBldmVuIGFuZCBvZGQgcXdvcmRzPjMgYXJlIHN3YXBwZWQuCisJCSAqLworCQlpZiAoaSA+IDMpIHsKKwkJCWlmIChpICYgMSkKKwkJCQl2YWwgPSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYVtpIC0gMV07CisJCQllbHNlCisJCQkJdmFsID0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaSArIDFdOworCQl9CisJCWVsc2UKKwkJCXZhbCA9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2ldOworCQlkZC0+aXBhdGhfcGlvYXZhaWxzaGFkb3dbaV0gPSBsZTY0X3RvX2NwdSh2YWwpOworCX0KKwkvKiBjYW4gZ2V0IGNvdW50ZXJzLCBzdGF0cywgZXRjLiAqLworCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9QUkVTRU5UOworfQorCitzdGF0aWMgaW50IGluaXRfaG91c2VrZWVwaW5nKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCSAgICAgc3RydWN0IGlwYXRoX3BvcnRkYXRhICoqcGRwLCBpbnQgcmVpbml0KQoreworCWNoYXIgYm9hcmRuWzMyXTsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogaGF2ZSB0byBjbGVhciBzaGFkb3cgY29waWVzIG9mIHJlZ2lzdGVycyBhdCBpbml0IHRoYXQgYXJlCisJICogbm90IG90aGVyd2lzZSBzZXQgaGVyZSwgb3IgYWxsIGtpbmRzIG9mIGJpemFycmUgdGhpbmdzCisJICogaGFwcGVuIHdpdGggZHJpdmVyIG9uIGNoaXAgcmVzZXQKKwkgKi8KKwlkZC0+aXBhdGhfcmN2aGRyc2l6ZSA9IDA7CisKKwkvKgorCSAqIERvbid0IGNsZWFyIGlwYXRoX2ZsYWdzIGFzIDhiaXQgbW9kZSB3YXMgc2V0IGJlZm9yZQorCSAqIGVudGVyaW5nIHRoaXMgZnVuYy4gSG93ZXZlciwgd2UgZG8gc2V0IHRoZSBsaW5rc3RhdGUgdG8KKwkgKiB1bmtub3duLCBzbyB3ZSBjYW4gd2F0Y2ggZm9yIGEgdHJhbnNpdGlvbi4KKwkgKiBQUkVTRU5UIGlzIHNldCBiZWNhdXNlIHdlIHdhbnQgcmVnaXN0ZXIgcmVhZHMgdG8gd29yaywKKwkgKiBhbmQgdGhlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSBzYXcgaXQgaW4gY29uZmlnIHNwYWNlOworCSAqIFdlIGNsZWFyIGl0IGlmIHdlIGhhdmUgZmFpbHVyZXMuCisJICovCisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktVTksgfCBJUEFUSF9QUkVTRU5UOworCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0xJTktBQ1RJVkUgfCBJUEFUSF9MSU5LQVJNRUQgfAorCQkJICAgICBJUEFUSF9MSU5LRE9XTiB8IElQQVRIX0xJTktJTklUKTsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlRyeSB0byByZWFkIHNwYyBjaGlwIHJldmlzaW9uXG4iKTsKKwlkZC0+aXBhdGhfcmV2aXNpb24gPQorCQlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yZXZpc2lvbik7CisKKwkvKgorCSAqIHNldCB1cCBmdW5kYW1lbnRhbCBpbmZvIHdlIG5lZWQgdG8gdXNlIHRoZSBjaGlwOyB3ZSBhc3N1bWUKKwkgKiBpZiB0aGUgcmV2aXNpb24gcmVnIGFuZCB0aGVzZSByZWdzIGFyZSBPSywgd2UgZG9uJ3QgbmVlZCB0bworCSAqIHNwZWNpYWwgY2FzZSB0aGUgcmVzdAorCSAqLworCWRkLT5pcGF0aF9zcmVnYmFzZSA9CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRyZWdiYXNlKTsKKwlkZC0+aXBhdGhfY3JlZ2Jhc2UgPQorCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb3VudGVycmVnYmFzZSk7CisJZGQtPmlwYXRoX3VyZWdiYXNlID0KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfdXNlcnJlZ2Jhc2UpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImlwYXRoX2tyZWdiYXNlICVwLCBzZW5kYmFzZSAleCB1c3JiYXNlICV4LCAiCisJCSAgICJjbnRyYmFzZSAleFxuIiwgZGQtPmlwYXRoX2tyZWdiYXNlLCBkZC0+aXBhdGhfc3JlZ2Jhc2UsCisJCSAgIGRkLT5pcGF0aF91cmVnYmFzZSwgZGQtPmlwYXRoX2NyZWdiYXNlKTsKKwlpZiAoKGRkLT5pcGF0aF9yZXZpc2lvbiAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYKKwkgICAgfHwgKGRkLT5pcGF0aF9zcmVnYmFzZSAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYKKwkgICAgfHwgKGRkLT5pcGF0aF9jcmVnYmFzZSAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYKKwkgICAgfHwgKGRkLT5pcGF0aF91cmVnYmFzZSAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlJlZ2lzdGVyIHJlYWQgZmFpbHVyZXMgZnJvbSBjaGlwLCAiCisJCQkgICAgICAiZ2l2aW5nIHVwIGluaXRpYWxpemF0aW9uXG4iKTsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9QUkVTRU5UOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogY2xlYXIgdGhlIGluaXRpYWwgcmVzZXQgZmxhZywgaW4gY2FzZSBmaXJzdCBkcml2ZXIgbG9hZCAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JjbGVhciwKKwkJCSBJTkZJTklQQVRIX0VfUkVTRVQpOworCisJaWYgKHJlaW5pdCkKKwkJcmV0ID0gaW5pdF9jaGlwX3Jlc2V0KGRkLCBwZHApOworCWVsc2UKKwkJcmV0ID0gaW5pdF9jaGlwX2ZpcnN0KGRkLCBwZHApOworCisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUmV2aXNpb24gJWxseCAoUENJICV4KSwgJXUgcG9ydHMsICV1IHRpZHMsICIKKwkJICAgIiV1IGVncnRpZHNcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGRkLT5pcGF0aF9yZXZpc2lvbiwKKwkJICAgZGQtPmlwYXRoX3BjaXJldiwgZGQtPmlwYXRoX3BvcnRjbnQsIGRkLT5pcGF0aF9yY3Z0aWRjbnQsCisJCSAgIGRkLT5pcGF0aF9yY3ZlZ3JjbnQpOworCisJaWYgKCgoZGQtPmlwYXRoX3JldmlzaW9uID4+IElORklOSVBBVEhfUl9TT0ZUV0FSRV9TSElGVCkgJgorCSAgICAgSU5GSU5JUEFUSF9SX1NPRlRXQVJFX01BU0spICE9IElQQVRIX0NISVBfU1dWRVJTSU9OKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJEcml2ZXIgb25seSBoYW5kbGVzIHZlcnNpb24gJWQsICIKKwkJCSAgICAgICJjaGlwIHN3dmVyc2lvbiBpcyAlZCAoJWxseCksIGZhaWxuZ1xuIiwKKwkJCSAgICAgIElQQVRIX0NISVBfU1dWRVJTSU9OLAorCQkJICAgICAgKGludCkoZGQtPmlwYXRoX3JldmlzaW9uID4+CisJCQkJICAgIElORklOSVBBVEhfUl9TT0ZUV0FSRV9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9SX1NPRlRXQVJFX01BU0ssCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBkZC0+aXBhdGhfcmV2aXNpb24pOworCQlyZXQgPSAtRU5PU1lTOworCQlnb3RvIGRvbmU7CisJfQorCWRkLT5pcGF0aF9tYWpyZXYgPSAodTgpICgoZGQtPmlwYXRoX3JldmlzaW9uID4+CisJCQkJICBJTkZJTklQQVRIX1JfQ0hJUFJFVk1BSk9SX1NISUZUKSAmCisJCQkJIElORklOSVBBVEhfUl9DSElQUkVWTUFKT1JfTUFTSyk7CisJZGQtPmlwYXRoX21pbnJldiA9ICh1OCkgKChkZC0+aXBhdGhfcmV2aXNpb24gPj4KKwkJCQkgIElORklOSVBBVEhfUl9DSElQUkVWTUlOT1JfU0hJRlQpICYKKwkJCQkgSU5GSU5JUEFUSF9SX0NISVBSRVZNSU5PUl9NQVNLKTsKKwlkZC0+aXBhdGhfYm9hcmRyZXYgPSAodTgpICgoZGQtPmlwYXRoX3JldmlzaW9uID4+CisJCQkJICAgIElORklOSVBBVEhfUl9CT0FSRElEX1NISUZUKSAmCisJCQkJICAgSU5GSU5JUEFUSF9SX0JPQVJESURfTUFTSyk7CisKKwlyZXQgPSBkZC0+aXBhdGhfZl9nZXRfYm9hcmRuYW1lKGRkLCBib2FyZG4sIHNpemVvZiBib2FyZG4pOworCisJc25wcmludGYoZGQtPmlwYXRoX2JvYXJkdmVyc2lvbiwgc2l6ZW9mKGRkLT5pcGF0aF9ib2FyZHZlcnNpb24pLAorCQkgIkRyaXZlciAldS4ldSwgJXMsIEluZmluaVBhdGgldSAldS4ldSwgUENJICV1LCAiCisJCSAiU1cgQ29tcGF0ICV1XG4iLAorCQkgSVBBVEhfQ0hJUF9WRVJTX01BSiwgSVBBVEhfQ0hJUF9WRVJTX01JTiwgYm9hcmRuLAorCQkgKHVuc2lnbmVkKShkZC0+aXBhdGhfcmV2aXNpb24gPj4gSU5GSU5JUEFUSF9SX0FSQ0hfU0hJRlQpICYKKwkJIElORklOSVBBVEhfUl9BUkNIX01BU0ssCisJCSBkZC0+aXBhdGhfbWFqcmV2LCBkZC0+aXBhdGhfbWlucmV2LCBkZC0+aXBhdGhfcGNpcmV2LAorCQkgKHVuc2lnbmVkKShkZC0+aXBhdGhfcmV2aXNpb24gPj4KKwkJCSAgICBJTkZJTklQQVRIX1JfU09GVFdBUkVfU0hJRlQpICYKKwkJIElORklOSVBBVEhfUl9TT0ZUV0FSRV9NQVNLKTsKKworCWlwYXRoX2RiZygiJXMiLCBkZC0+aXBhdGhfYm9hcmR2ZXJzaW9uKTsKKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogaXBhdGhfaW5pdF9jaGlwIC0gZG8gdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvbiB0aGUgY2hpcAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEByZWluaXQ6IHJlaW5pdGlhbGl6aW5nLCBzbyBkb24ndCBhbGxvY2F0ZSBuZXcgbWVtb3J5CisgKgorICogRG8gdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvbiB0aGUgY2hpcC4gIFRoaXMgaXMgZG9uZQorICogYm90aCBmcm9tIHRoZSBpbml0IHJvdXRpbmUgY2FsbGVkIGZyb20gdGhlIFBDSSBpbmZyYXN0cnVjdHVyZSwgYW5kCisgKiB3aGVuIHdlIHJlc2V0IHRoZSBjaGlwLCBvciBkZXRlY3QgdGhhdCBpdCB3YXMgcmVzZXQgaW50ZXJuYWxseSwKKyAqIG9yIGl0J3MgYWRtaW5pc3RyYXRpdmVseSByZS1lbmFibGVkLgorICoKKyAqIE1lbW9yeSBhbGxvY2F0aW9uIGhlcmUgYW5kIGluIGNhbGxlZCByb3V0aW5lcyBpcyBvbmx5IGRvbmUgaW4KKyAqIHRoZSBmaXJzdCBjYXNlIChyZWluaXQgPT0gMCkuICBXZSBoYXZlIHRvIGJlIGNhcmVmdWwsIGJlY2F1c2UgZXZlbgorICogd2l0aG91dCBtZW1vcnkgYWxsb2NhdGlvbiwgd2UgbmVlZCB0byByZS13cml0ZSBhbGwgdGhlIGNoaXAgcmVnaXN0ZXJzCisgKiBUSURzLCBldGMuIGFmdGVyIHRoZSByZXNldCBvciBlbmFibGUgaGFzIGNvbXBsZXRlZC4KKyAqLworaW50IGlwYXRoX2luaXRfY2hpcChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCByZWluaXQpCit7CisJaW50IHJldCA9IDAsIGk7CisJdTMyIHZhbDMyLCBrcGlvYnVmczsKKwl1NjQgdmFsLCBhdG1wOworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBOVUxMOyAvKiBrZWVwIGdjYzQgaGFwcHkgKi8KKworCXJldCA9IGluaXRfaG91c2VrZWVwaW5nKGRkLCAmcGQsIHJlaW5pdCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiB3ZSBpZ25vcmUgbW9zdCBpc3N1ZXMgYWZ0ZXIgcmVwb3J0aW5nIHRoZW0sIGJ1dCBoYXZlIHRvIHNwZWNpYWxseQorCSAqIGhhbmRsZSBoYXJkd2FyZS1kaXNhYmxlZCBjaGlwcy4KKwkgKi8KKwlpZiAocmV0ID09IDIpIHsKKwkJLyogdW5pcXVlIGVycm9yLCBrbm93biB0byBpcGF0aF9pbml0X29uZSAqLworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIFdlIGNvdWxkIGJ1bXAgdGhpcyB0byBhbGxvdyBmb3IgZnVsbCByY3ZlZ3JjbnQgKyByY3Z0aWRjbnQsCisJICogYnV0IHRoZW4gaXQgbm8gbG9uZ2VyIG5pY2VseSBmaXRzIHBvd2VyIG9mIHR3bywgYW5kIHNpbmNlCisJICogd2Ugbm93IHVzZSByb3V0aW5lcyB0aGF0IGJhY2tlbmQgb250byBfX2dldF9mcmVlX3BhZ2VzLCB0aGUKKwkgKiByZXN0IHdvdWxkIGJlIHdhc3RlZC4KKwkgKi8KKwlkZC0+aXBhdGhfcmN2aGRyY250ID0gZGQtPmlwYXRoX3JjdmVncmNudDsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmNudCwKKwkJCSBkZC0+aXBhdGhfcmN2aGRyY250KTsKKworCS8qCisJICogU2V0IHVwIHRoZSBzaGFkb3cgY29waWVzIG9mIHRoZSBwaW9idWZhdmFpbCByZWdpc3RlcnMsCisJICogd2hpY2ggd2UgY29tcGFyZSBhZ2FpbnN0IHRoZSBjaGlwIHJlZ2lzdGVycyBmb3Igbm93LCBhbmQKKwkgKiB0aGUgaW4gbWVtb3J5IERNQSdlZCBjb3BpZXMgb2YgdGhlIHJlZ2lzdGVycy4gIFRoaXMgaGFzIHRvCisJICogYmUgZG9uZSBlYXJseSwgYmVmb3JlIHdlIGNhbGN1bGF0ZSBsYXN0cG9ydCwgZXRjLgorCSAqLworCXZhbCA9IGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrOworCS8qCisJICogY2FsYyBudW1iZXIgb2YgcGlvYXZhaWwgcmVnaXN0ZXJzLCBhbmQgc2F2ZSBpdDsgd2UgaGF2ZSAyCisJICogYml0cyBwZXIgYnVmZmVyLgorCSAqLworCWRkLT5pcGF0aF9waW9hdnJlZ3MgPSBBTElHTih2YWwsIHNpemVvZih1NjQpICogQklUU19QRVJfQllURSAvIDIpCisJCS8gKHNpemVvZih1NjQpICogQklUU19QRVJfQllURSAvIDIpOworCWlmIChpcGF0aF9rcGlvYnVmcyA9PSAwKSB7CisJCS8qIG5vdCBzZXQgYnkgdXNlciwgb3Igc2V0IGV4cGxpY3RseSB0byBkZWZhdWx0ICAqLworCQlpZiAoKGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrKSA+IDEyOCkKKwkJCWtwaW9idWZzID0gMzI7CisJCWVsc2UKKwkJCWtwaW9idWZzID0gMTY7CisJfQorCWVsc2UKKwkJa3Bpb2J1ZnMgPSBpcGF0aF9rcGlvYnVmczsKKworCWlmIChrcGlvYnVmcyA+CisJICAgIChkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0ayAtCisJICAgICAoZGQtPmlwYXRoX2NmZ3BvcnRzICogSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQpKSkgeworCQlpID0gZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGsgLQorCQkJKGRkLT5pcGF0aF9jZmdwb3J0cyAqIElQQVRIX01JTl9VU0VSX1BPUlRfQlVGQ05UKTsKKwkJaWYgKGkgPCAwKQorCQkJaSA9IDA7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJBbGxvY2F0aW5nICVkIFBJTyBidWZzIGZvciAiCisJCQkgImtlcm5lbCBsZWF2ZXMgdG9vIGZldyBmb3IgJWQgdXNlciBwb3J0cyAiCisJCQkgIiglZCBlYWNoKTsgdXNpbmcgJXVcbiIsIGtwaW9idWZzLAorCQkJIGRkLT5pcGF0aF9jZmdwb3J0cyAtIDEsCisJCQkgSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQsIGkpOworCQkvKgorCQkgKiBzaG91bGRuJ3QgY2hhbmdlIGlwYXRoX2twaW9idWZzLCBiZWNhdXNlIGNvdWxkIGJlCisJCSAqIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGRldmljZXMuLi4KKwkJICovCisJCWtwaW9idWZzID0gaTsKKwl9CisJZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZiA9CisJCWRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrIC0ga3Bpb2J1ZnM7CisJZGQtPmlwYXRoX3BidWZzcG9ydCA9IGRkLT5pcGF0aF9jZmdwb3J0cyA+IDEKKwkJPyBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmIC8gKGRkLT5pcGF0aF9jZmdwb3J0cyAtIDEpCisJCTogMDsKKwl2YWwzMiA9IGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYgLQorCQkoZGQtPmlwYXRoX3BidWZzcG9ydCAqIChkZC0+aXBhdGhfY2ZncG9ydHMgLSAxKSk7CisJaWYgKHZhbDMyID4gMCkgeworCQlpcGF0aF9kYmcoImFsbG9jYXRpbmcgJXUgcGJ1ZnMvcG9ydCBsZWF2ZXMgJXUgdW51c2VkLCAiCisJCQkgICJhZGQgdG8ga2VybmVsXG4iLCBkZC0+aXBhdGhfcGJ1ZnNwb3J0LCB2YWwzMik7CisJCWRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYgLT0gdmFsMzI7CisJCWlwYXRoX2RiZygiJXUgcGJ1ZnMvcG9ydCBsZWF2ZXMgJXUgdW51c2VkLCBhZGQgdG8ga2VybmVsXG4iLAorCQkJICBkZC0+aXBhdGhfcGJ1ZnNwb3J0LCB2YWwzMik7CisJfQorCWRkLT5pcGF0aF9sYXN0cGlvaW5kZXggPSBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIiVkIFBJTyBidWZzIGZvciBrZXJuZWwgb3V0IG9mICVkIHRvdGFsICV1ICIKKwkJICAgImVhY2ggZm9yICV1IHVzZXIgcG9ydHNcbiIsIGtwaW9idWZzLAorCQkgICBkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0aywKKwkJICAgZGQtPmlwYXRoX3BidWZzcG9ydCwgZGQtPmlwYXRoX2NmZ3BvcnRzIC0gMSk7CisKKwlkZC0+aXBhdGhfZl9lYXJseV9pbml0KGRkKTsKKworCS8qIGVhcmx5X2luaXQgc2V0cyByY3ZoZHJlbnRzaXplIGFuZCByY3ZoZHJzaXplLCBzbyB0aGlzIG11c3QgYmUKKwkgKiBkb25lIGFmdGVyIGVhcmx5X2luaXQgKi8KKwlkZC0+aXBhdGhfaGRycWxhc3QgPQorCQlkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSAqIChkZC0+aXBhdGhfcmN2aGRyY250IC0gMSk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJlbnRzaXplLAorCQkJIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnNpemUsCisJCQkgZGQtPmlwYXRoX3JjdmhkcnNpemUpOworCisJaWYgKCFyZWluaXQpIHsKKwkJcmV0ID0gaW5pdF9waW9hdmFpbHJlZ3MoZGQpOworCQlpbml0X3NoYWRvd190aWRzKGRkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkodm9pZClpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRwaW9hdmFpbGFkZHIsCisJCQkgICAgICAgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzKTsKKwkvKgorCSAqIHRoaXMgaXMgdG8gZGV0ZWN0IHMvdyBlcnJvcnMsIHdoaWNoIHRoZSBoL3cgd29ya3MgYXJvdW5kIGJ5CisJICogaWdub3JpbmcgdGhlIGxvdyA2IGJpdHMgb2YgYWRkcmVzcywgaWYgaXQgd2Fzbid0IGFsaWduZWQuCisJICovCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZHBpb2F2YWlsYWRkcik7CisJaWYgKHZhbCAhPSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNhdGFzdHJvcGhpYyBzb2Z0d2FyZSBlcnJvciwgIgorCQkJICAgICAgIlNlbmRQSU9BdmFpbEFkZHIgd3JpdHRlbiBhcyAlbHgsICIKKwkJCSAgICAgICJyZWFkIGJhY2sgYXMgJWxseFxuIiwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMsCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCisJdmFsID0gaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWEgKyBkZC0+aXBhdGhfdW5pdCAqIDY0OworCisJLyogdmVyaWZ5IHRoYXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCB3YXMgbWV0ICovCisJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyLAorCQkJICAgICAgMCwgdmFsKTsKKwlhdG1wID0gaXBhdGhfcmVhZF9rcmVnNjRfcG9ydCgKKwkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsIDApOworCWlmICh2YWwgIT0gYXRtcCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2F0YXN0cm9waGljIHNvZnR3YXJlIGVycm9yLCAiCisJCQkgICAgICAiUmN2SGRyVGFpbEFkZHIwIHdyaXR0ZW4gYXMgJWxseCwgIgorCQkJICAgICAgInJlYWQgYmFjayBhcyAlbGx4IGZyb20gJXhcbiIsCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwsCisJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhdG1wLAorCQkJICAgICAgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkcik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmJ0aHFwLCBJUEFUSF9LRF9RUCk7CisKKwkvKgorCSAqIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IGluIGZyZWV6ZSwgYW5kIFBJTyBzZW5kIGVuYWJsZWQsIHNvCisJICogd3JpdGVzIHRvIHBiYyBoYXBwZW4KKwkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywgMFVMTCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycmNsZWFyLAorCQkJIH4wVUxMJn5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsIDBVTEwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkgSU5GSU5JUEFUSF9TX1BJT0VOQUJMRSk7CisKKwkvKgorCSAqIGJlZm9yZSBlcnJvciBjbGVhcnMsIHNpbmNlIHdlIGV4cGVjdCBzZXJkZXMgcGxsIGVycm9ycyBkdXJpbmcKKwkgKiB0aGlzLCB0aGUgZmlyc3QgdGltZSBhZnRlciByZXNldAorCSAqLworCWlmIChicmluZ3VwX2xpbmsoZGQpKSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJGYWlsZWQgdG8gYnJpbmd1cCBJQiBsaW5rXG4iKTsKKwkJcmV0ID0gLUVORVRET1dOOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBjbGVhciBhbnkgImV4cGVjdGVkIiBod2VycnMgZnJvbSByZXNldCBhbmQvb3IgaW5pdGlhbGl6YXRpb24KKwkgKiBjbGVhciBhbnkgdGhhdCBhcmVuJ3QgZW5hYmxlZCAoYXQgbGVhc3QgdGhpcyBvbmNlKSwgYW5kIHRoZW4KKwkgKiBzZXQgdGhlIGVuYWJsZSBtYXNrCisJICovCisJZGQtPmlwYXRoX2ZfaW5pdF9od2Vycm9ycyhkZCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycmNsZWFyLAorCQkJIH4wVUxMJn5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKworCWRkLT5pcGF0aF9tYXNrZWRlcnJzID0gZGQtPmlwYXRoX2lnbm9yZWRlcnJzOworCS8qIGNsZWFyIGFsbCAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JjbGVhciwgLTFMTCk7CisJLyogZW5hYmxlIGVycm9ycyB0aGF0IGFyZSBtYXNrZWQsIGF0IGxlYXN0IHRoaXMgZmlyc3QgdGltZS4gKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2Vycm9ybWFzaywKKwkJCSB+ZGQtPmlwYXRoX21hc2tlZGVycnMpOworCS8qIGNsZWFyIGFueSBpbnRlcnJ1cHMgdXAgdG8gdGhpcyBwb2ludCAoaW50cyBzdGlsbCBub3QgZW5hYmxlZCkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGNsZWFyLCAtMUxMKTsKKworCWlwYXRoX3N0YXRzLnNwc19saWRbZGQtPmlwYXRoX3VuaXRdID0gZGQtPmlwYXRoX2xpZDsKKworCS8qCisJICogU2V0IHVwIHRoZSBwb3J0IDAgKGtlcm5lbCkgcmN2aGRyIHEgYW5kIGVnciBUSURzLiAgSWYgZG9pbmcKKwkgKiByZS1pbml0LCB0aGUgc2ltcGxlc3Qgd2F5IHRvIGhhbmRsZSB0aGlzIGlzIHRvIGZyZWUKKwkgKiBleGlzdGluZywgYW5kIHJlLWFsbG9jYXRlLgorCSAqLworCWlmIChyZWluaXQpCisJCWlwYXRoX2ZyZWVfcGRkYXRhKGRkLCAwLCAwKTsKKwlkZC0+aXBhdGhfZl90aWR0ZW1wbGF0ZShkZCk7CisJcmV0ID0gaXBhdGhfY3JlYXRlX3JjdmhkcnEoZGQsIHBkKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gY3JlYXRlX3BvcnQwX2VncihkZCk7CisJaWYgKHJldCkKKwkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0IDAgKGtlcm5lbCkgIgorCQkJICAgICAgInJjdmhkcnEgYW5kL29yIGVnciBidWZzXG4iKTsKKwllbHNlCisJCWVuYWJsZV9jaGlwKGRkLCBwZCwgcmVpbml0KTsKKworCS8qCisJICogY2F1c2UgcmV0cmlnZ2VyIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBpZ25vcmVkIGR1cmluZyBpbml0LAorCSAqIGV2ZW4gaWYgd2UgaGFkIGVycm9ycworCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50Y2xlYXIsIDBVTEwpOworCisJaWYoIWRkLT5pcGF0aF9zdGF0c190aW1lcl9hY3RpdmUpIHsKKwkJLyoKKwkJICogZmlyc3QgaW5pdCwgb3IgYWZ0ZXIgYW4gYWRtaW4gZGlzYWJsZS9lbmFibGUKKwkJICogc2V0IHVwIHN0YXRzIHJldHJpZXZhbCB0aW1lciwgZXZlbiBpZiB3ZSBoYWQgZXJyb3JzCisJCSAqIGluIGxhc3QgcG9ydGlvbiBvZiBzZXR1cAorCQkgKi8KKwkJaW5pdF90aW1lcigmZGQtPmlwYXRoX3N0YXRzX3RpbWVyKTsKKwkJZGQtPmlwYXRoX3N0YXRzX3RpbWVyLmZ1bmN0aW9uID0gaXBhdGhfZ2V0X2Zhc3RzdGF0czsKKwkJZGQtPmlwYXRoX3N0YXRzX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGQ7CisJCS8qIGV2ZXJ5IDUgc2Vjb25kczsgKi8KKwkJZGQtPmlwYXRoX3N0YXRzX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgNSAqIEhaOworCQkvKiB0YWtlcyB+MTYgc2Vjb25kcyB0byBvdmVyZmxvdyBhdCBmdWxsIElCIDR4IGJhbmR3ZGl0aCAqLworCQlhZGRfdGltZXIoJmRkLT5pcGF0aF9zdGF0c190aW1lcik7CisJCWRkLT5pcGF0aF9zdGF0c190aW1lcl9hY3RpdmUgPSAxOworCX0KKworZG9uZToKKwlpZiAoIXJldCkgeworCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0NISVBfUFJFU0VOVDsKKwkJaWYgKCFkZC0+aXBhdGhfZl9pbnRyc2V0dXAoZGQpKSB7CisJCQkvKiBub3cgd2UgY2FuIGVuYWJsZSBhbGwgaW50ZXJydXB0cyBmcm9tIHRoZSBjaGlwICovCisJCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludG1hc2ssCisJCQkJCSAtMUxMKTsKKwkJCS8qIGZvcmNlIHJlLWludGVycnVwdCBvZiBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwKKwkJCQkJIDBVTEwpOworCQkJLyogY2hpcCBpcyB1c2FibGU7IG1hcmsgaXQgYXMgaW5pdGlhbGl6ZWQgKi8KKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfSU5JVFRFRDsKKwkJfSBlbHNlCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm8gaW50ZXJydXB0cyBlbmFibGVkLCBjb3VsZG4ndCAiCisJCQkJICAgICAgInNldHVwIGludGVycnVwdCBhZGRyZXNzXG4iKTsKKworCQlpZiAoZGQtPmlwYXRoX2NmZ3BvcnRzID4gaXBhdGhfc3RhdHMuc3BzX25wb3J0cykKKwkJCS8qCisJCQkgKiBzcHNfbnBvcnRzIGlzIGEgZ2xvYmFsLCBzbywgd2Ugc2V0IGl0IHRvCisJCQkgKiB0aGUgaGlnaGVzdCBudW1iZXIgb2YgcG9ydHMgb2YgYW55IG9mIHRoZQorCQkJICogY2hpcHMgd2UgZmluZDsgd2UgbmV2ZXIgZGVjcmVtZW50IGl0LCBhdAorCQkJICogbGVhc3QgZm9yIG5vdy4gIFNpbmNlIHRoaXMgbWlnaHQgaGF2ZSBjaGFuZ2VkCisJCQkgKiBvdmVyIGRpc2FibGUvZW5hYmxlIG9yIHByaW9yIHRvIHJlc2V0LCBhbHdheXMKKwkJCSAqIGRvIHRoZSBjaGVjayBhbmQgcG90ZW50aWFsbHkgYWRqdXN0LgorCQkJICovCisJCQlpcGF0aF9zdGF0cy5zcHNfbnBvcnRzID0gZGQtPmlwYXRoX2NmZ3BvcnRzOworCX0gZWxzZQorCQlpcGF0aF9kYmcoIkZhaWxlZCAoJWQpIHRvIGluaXRpYWxpemUgY2hpcFxuIiwgcmV0KTsKKworCS8qIGlmIHJldCBpcyBub24temVybywgd2UgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWUgY2xlYW51cAorCSAgIGhlcmUuLi4gKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX3NldF9rcGlvYnVmcyhjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHNob3J0IHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gaXBhdGhfcGFyc2VfdXNob3J0KHN0ciwgJnZhbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBiYWlsOworCisJaWYgKHZhbCA9PSAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRkLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJCWNvbnRpbnVlOworCQlpZiAodmFsID4gKGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrIC0KKwkJCSAgIChkZC0+aXBhdGhfY2ZncG9ydHMgKgorCQkJICAgIElQQVRIX01JTl9VU0VSX1BPUlRfQlVGQ05UKSkpCisJCXsKKwkJCWlwYXRoX2Rldl9lcnIoCisJCQkJZGQsCisJCQkJIkFsbG9jYXRpbmcgJWQgUElPIGJ1ZnMgZm9yIGtlcm5lbCBsZWF2ZXMgIgorCQkJCSJ0b28gZmV3IGZvciAlZCB1c2VyIHBvcnRzICglZCBlYWNoKVxuIiwKKwkJCQl2YWwsIGRkLT5pcGF0aF9jZmdwb3J0cyAtIDEsCisJCQkJSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmID0KKwkJCWRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrIC0gdmFsOworCX0KKworCXJldCA9IDA7CitiYWlsOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzJhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0wLDAgKzEsODU0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisKKyNkZWZpbmUgRV9TVU1fUEtURVJSUyBcCisJKElORklOSVBBVEhfRV9SSERSTEVOIHwgSU5GSU5JUEFUSF9FX1JCQURUSUQgfCBcCisJIElORklOSVBBVEhfRV9SQkFEVkVSU0lPTiB8IElORklOSVBBVEhfRV9SSERSIHwgXAorCSBJTkZJTklQQVRIX0VfUkxPTkdQS1RMRU4gfCBJTkZJTklQQVRIX0VfUlNIT1JUUEtUTEVOIHwgXAorCSBJTkZJTklQQVRIX0VfUk1BWFBLVExFTiB8IElORklOSVBBVEhfRV9STUlOUEtUTEVOIHwgXAorCSBJTkZJTklQQVRIX0VfUkZPUk1BVEVSUiB8IElORklOSVBBVEhfRV9SVU5TVVBWTCB8IFwKKwkgSU5GSU5JUEFUSF9FX1JVTkVYUENIQVIgfCBJTkZJTklQQVRIX0VfUkVCUCkKKworI2RlZmluZSBFX1NVTV9FUlJTIFwKKwkoSU5GSU5JUEFUSF9FX1NQSU9BUk1MQVVOQ0ggfCBJTkZJTklQQVRIX0VfU1VORVhQRVJSUEtUTlVNIHwgXAorCSBJTkZJTklQQVRIX0VfU0RST1BQRUREQVRBUEtUIHwgSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUIHwgXAorCSBJTkZJTklQQVRIX0VfU01BWFBLVExFTiB8IElORklOSVBBVEhfRV9TVU5TVVBWTCB8IFwKKwkgSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU4gfCBJTkZJTklQQVRIX0VfU1BLVExFTiB8IFwKKwkgSU5GSU5JUEFUSF9FX0lOVkFMSURBRERSKQorCitzdGF0aWMgdTY0IGhhbmRsZV9lX3N1bV9lcnJzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaXBhdGhfZXJyX3QgZXJycykKK3sKKwl1bnNpZ25lZCBsb25nIHNidWZbNF07CisJdTY0IGlnbm9yZV90aGlzX3RpbWUgPSAwOworCXUzMiBwaW9iY250OworCisJLyogaWYgcG9zc2libGUgdGhhdCBzZW5kYnVmZmVyZXJyb3IgY291bGQgYmUgdmFsaWQgKi8KKwlwaW9iY250ID0gZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGs7CisJLyogcmVhZCB0aGVzZSBiZWZvcmUgd3JpdGluZyBlcnJvcmNsZWFyICovCisJc2J1ZlswXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAorCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IpOworCXNidWZbMV0gPSBpcGF0aF9yZWFkX2tyZWc2NCgKKwkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGJ1ZmZlcmVycm9yICsgMSk7CisJaWYgKHBpb2JjbnQgPiAxMjgpIHsKKwkJc2J1ZlsyXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAorCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGJ1ZmZlcmVycm9yICsgMik7CisJCXNidWZbM10gPSBpcGF0aF9yZWFkX2tyZWc2NCgKKwkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRidWZmZXJlcnJvciArIDMpOworCX0KKworCWlmIChzYnVmWzBdIHx8IHNidWZbMV0gfHwgKHBpb2JjbnQgPiAxMjggJiYgKHNidWZbMl0gfHwgc2J1ZlszXSkpKSB7CisJCWludCBpOworCisJCWlwYXRoX2NkYmcoUEtULCAiU2VuZGJ1ZkVycnMgJWx4ICVseCAiLCBzYnVmWzBdLCBzYnVmWzFdKTsKKwkJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9QS1REQkcgJiYgcGlvYmNudCA+IDEyOCkKKwkJCXByaW50aygiJWx4ICVseCAiLCBzYnVmWzJdLCBzYnVmWzNdKTsKKwkJZm9yIChpID0gMDsgaSA8IHBpb2JjbnQ7IGkrKykgeworCQkJaWYgKHRlc3RfYml0KGksIHNidWYpKSB7CisJCQkJdTMyIF9faW9tZW0gKnBpb2J1ZjsKKwkJCQlpZiAoaSA8IGRkLT5pcGF0aF9waW9iY250MmspCisJCQkJCXBpb2J1ZiA9ICh1MzIgX19pb21lbSAqKQorCQkJCQkJKGRkLT5pcGF0aF9waW8ya2Jhc2UgKworCQkJCQkJIGkgKiBkZC0+aXBhdGhfcGFsaWduKTsKKwkJCQllbHNlCisJCQkJCXBpb2J1ZiA9ICh1MzIgX19pb21lbSAqKQorCQkJCQkJKGRkLT5pcGF0aF9waW80a2Jhc2UgKworCQkJCQkJIChpIC0gZGQtPmlwYXRoX3Bpb2JjbnQyaykgKgorCQkJCQkJIGRkLT5pcGF0aF80a2FsaWduKTsKKworCQkJCWlwYXRoX2NkYmcoUEtULAorCQkJCQkgICAiUElPYnVmWyV1XSBAJXAgcGJjIGlzICV4OyAiLAorCQkJCQkgICBpLCBwaW9idWYsIHJlYWRsKHBpb2J1ZikpOworCisJCQkJaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIGksIDEpOworCQkJfQorCQl9CisJCWlmIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfUEtUREJHKQorCQkJcHJpbnRrKCJcbiIpOworCX0KKwlpZiAoKGVycnMgJiAoSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCB8CisJCSAgICAgSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUIHwKKwkJICAgICBJTkZJTklQQVRIX0VfU01JTlBLVExFTikpICYmCisJICAgICEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FDVElWRSkpIHsKKwkJLyoKKwkJICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gU01BIGlzIHRyeWluZyB0byBicmluZyB0aGUgbGluaworCQkgKiB1cCwgYnV0IHRoZSBJQiBsaW5rIGNoYW5nZXMgc3RhdGUgYXQgdGhlICJ3cm9uZyIgdGltZS4KKwkJICogVGhlIElCIGxvZ2ljIHRoZW4gY29tcGxhaW5zIHRoYXQgdGhlIHBhY2tldCBpc24ndAorCQkgKiB2YWxpZC4gIFdlIGRvbid0IHdhbnQgdG8gY29uZnVzZSBwZW9wbGUsIHNvIHdlIGp1c3QKKwkJICogZG9uJ3QgcHJpbnQgdGhlbSwgZXhjZXB0IGF0IGRlYnVnCisJCSAqLworCQlpcGF0aF9kYmcoIklnbm9yaW5nIHBrdHNlbmQgZXJyb3JzICVsbHgsIGJlY2F1c2Ugbm90ICIKKwkJCSAgInlldCBhY3RpdmVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVycnMpOworCQlpZ25vcmVfdGhpc190aW1lID0gSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCB8CisJCQlJTkZJTklQQVRIX0VfU0RST1BQRURTTVBQS1QgfAorCQkJSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU47CisJfQorCisJcmV0dXJuIGlnbm9yZV90aGlzX3RpbWU7Cit9CisKKy8qIHJldHVybiB0aGUgc3RyaW5ncyBmb3IgdGhlIG1vc3QgY29tbW9uIGxpbmsgc3RhdGVzICovCitzdGF0aWMgY2hhciAqaWJfbGlua3N0YXRlKHUzMiBsaW5rc3RhdGUpCit7CisJY2hhciAqcmV0OworCisJc3dpdGNoIChsaW5rc3RhdGUpIHsKKwljYXNlIElQQVRIX0lCU1RBVEVfSU5JVDoKKwkJcmV0ID0gIkluaXQiOworCQlicmVhazsKKwljYXNlIElQQVRIX0lCU1RBVEVfQVJNOgorCQlyZXQgPSAiQXJtIjsKKwkJYnJlYWs7CisJY2FzZSBJUEFUSF9JQlNUQVRFX0FDVElWRToKKwkJcmV0ID0gIkFjdGl2ZSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9ICJEb3duIjsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgaXBhdGhfZXJyX3QgZXJycywgaW50IG5vcHJpbnQpCit7CisJdTY0IHZhbDsKKwl1MzIgbHRzdGF0ZSwgbHN0YXRlOworCisJLyoKKwkgKiBldmVuIGlmIGRpYWdzIGFyZSBlbmFibGVkLCB3ZSB3YW50IHRvIG5vdGljZSBMSU5LSU5JVCwgZXRjLgorCSAqIFdlIGp1c3QgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIExFRCBzdGF0ZSwgb3IKKwkgKiBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwKKwkgKi8KKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOworCWxzdGF0ZSA9IHZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSzsKKwlpZiAobHN0YXRlID09IElQQVRIX0lCU1RBVEVfSU5JVCB8fCBsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9BUk0gfHwKKwkgICAgbHN0YXRlID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKSB7CisJCS8qCisJCSAqIG9ubHkgcHJpbnQgYXQgU01BIGlmIHRoZXJlIGlzIGEgY2hhbmdlLCBkZWJ1ZyBpZiBub3QKKwkJICogKHNvbWV0aW1lcyB3ZSB3YW50IHRvIGtub3cgdGhhdCwgdXN1YWxseSBub3QpLgorCQkgKi8KKwkJaWYgKGxzdGF0ZSA9PSAoKHVuc2lnbmVkKSBkZC0+aXBhdGhfbGFzdGliY3N0YXQKKwkJCSAgICAgICAmIElQQVRIX0lCU1RBVEVfTUFTSykpIHsKKwkJCWlwYXRoX2RiZygiU3RhdHVzIGNoYW5nZSBpbnRyIGJ1dCBubyBjaGFuZ2UgKCVzKVxuIiwKKwkJCQkgIGliX2xpbmtzdGF0ZShsc3RhdGUpKTsKKwkJfQorCQllbHNlCisJCQlpcGF0aF9jZGJnKFNNQSwgIlVuaXQgJXUgbGluayBzdGF0ZSAlcywgbGFzdCAiCisJCQkJICAgIndhcyAlc1xuIiwgZGQtPmlwYXRoX3VuaXQsCisJCQkJICAgaWJfbGlua3N0YXRlKGxzdGF0ZSksCisJCQkJICAgaWJfbGlua3N0YXRlKCh1bnNpZ25lZCkKKwkJCQkJCWRkLT5pcGF0aF9sYXN0aWJjc3RhdAorCQkJCQkJJiBJUEFUSF9JQlNUQVRFX01BU0spKTsKKwl9CisJZWxzZSB7CisJCWxzdGF0ZSA9IGRkLT5pcGF0aF9sYXN0aWJjc3RhdCAmIElQQVRIX0lCU1RBVEVfTUFTSzsKKwkJaWYgKGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0lOSVQgfHwKKwkJICAgIGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0FSTSB8fAorCQkgICAgbHN0YXRlID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKQorCQkJaXBhdGhfY2RiZyhTTUEsICJVbml0ICV1IGxpbmsgc3RhdGUgZG93biIKKwkJCQkgICAiIChzdGF0ZSAweCV4KSwgZnJvbSAlc1xuIiwKKwkJCQkgICBkZC0+aXBhdGhfdW5pdCwKKwkJCQkgICAodTMyKXZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSywKKwkJCQkgICBpYl9saW5rc3RhdGUobHN0YXRlKSk7CisJCWVsc2UKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVuaXQgJXUgbGluayBzdGF0ZSBjaGFuZ2VkICIKKwkJCQkgICAidG8gMHgleCBmcm9tIGRvd24gKCV4KVxuIiwKKwkJCQkgICBkZC0+aXBhdGhfdW5pdCwgKHUzMikgdmFsLCBsc3RhdGUpOworCX0KKwlsdHN0YXRlID0gKHZhbCA+PiBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0s7CisJbHN0YXRlID0gKHZhbCA+PiBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSAmCisJCUlORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSzsKKworCWlmIChsdHN0YXRlID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMQUNUSVZFIHx8CisJICAgIGx0c3RhdGUgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExRVUlFVCkgeworCQl1MzIgbGFzdF9sdHN0YXRlOworCisJCS8qCisJCSAqIElnbm9yZSBjeWNsaW5nIGJhY2sgYW5kIGZvcnRoIGZyb20gUG9sbGluZy5BY3RpdmUKKwkJICogdG8gUG9sbGluZy5RdWlldCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgb3RoZXIgZW5kIG9mCisJCSAqIHRoZSBsaW5rIHRvIGNvbWUgdXAuIFdlIHdpbGwgY3ljbGUgYmFjayBhbmQgZm9ydGgKKwkJICogYmV0d2VlbiB0aGVtIGlmIG5vIGNhYmxlIGlzIHBsdWdnZWQgaW4sCisJCSAqIHRoZSBvdGhlciBkZXZpY2UgaXMgcG93ZXJlZCBvZmYgb3IgZGlzYWJsZWQsIGV0Yy4KKwkJICovCisJCWxhc3RfbHRzdGF0ZSA9IChkZC0+aXBhdGhfbGFzdGliY3N0YXQgPj4KKwkJCQlJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpCisJCQkmIElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9NQVNLOworCQlpZiAobGFzdF9sdHN0YXRlID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMQUNUSVZFCisJCSAgICB8fCBsYXN0X2x0c3RhdGUgPT0KKwkJICAgIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMUVVJRVQpIHsKKwkJCWlmIChkZC0+aXBhdGhfaWJwb2xsY250ID4gNDApIHsKKwkJCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTk9DQUJMRTsKKwkJCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0KKwkJCQkJSVBBVEhfU1RBVFVTX0lCX05PQ0FCTEU7CisJCQl9IGVsc2UKKwkJCQlkZC0+aXBhdGhfaWJwb2xsY250Kys7CisJCQlnb3RvIHNraXBfaWJjaGFuZ2U7CisJCX0KKwl9CisJZGQtPmlwYXRoX2licG9sbGNudCA9IDA7CS8qIHNvbWUgc3RhdGUgb3RoZXIgdGhhbiAyIG9yIDMgKi8KKwlpcGF0aF9zdGF0cy5zcHNfaWJsaW5rKys7CisJaWYgKGx0c3RhdGUgIT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCkgeworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS0RPV047CisJCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LSU5JVAorCQkJCSAgICAgfCBJUEFUSF9MSU5LQUNUSVZFIHwKKwkJCQkgICAgIElQQVRIX0xJTktBUk1FRCk7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0lCX1JFQURZOworCQlpZiAoIW5vcHJpbnQpIHsKKwkJCWlmICgoKGRkLT5pcGF0aF9sYXN0aWJjc3RhdCA+PgorCQkJICAgICAgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9TSElGVCkgJgorCQkJICAgICBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX01BU0spCisJCQkgICAgPT0gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFKQorCQkJCS8qIGlmIGZyb20gdXAgdG8gZG93biBiZSBtb3JlIHZvY2FsICovCisJCQkJaXBhdGhfY2RiZyhTTUEsCisJCQkJCSAgICJVbml0ICV1IGxpbmsgbm93IGRvd24gKCVzKVxuIiwKKwkJCQkJICAgZGQtPmlwYXRoX3VuaXQsCisJCQkJCSAgIGlwYXRoX2liY3N0YXR1c19zdHJbbHRzdGF0ZV0pOworCQkJZWxzZQorCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVuaXQgJXUgbGluayBpcyAiCisJCQkJCSAgICJkb3duICglcylcbiIsIGRkLT5pcGF0aF91bml0LAorCQkJCQkgICBpcGF0aF9pYmNzdGF0dXNfc3RyW2x0c3RhdGVdKTsKKwkJfQorCisJCWRkLT5pcGF0aF9mX3NldGV4dGxlZChkZCwgbHN0YXRlLCBsdHN0YXRlKTsKKwl9IGVsc2UgaWYgKCh2YWwgJiBJUEFUSF9JQlNUQVRFX01BU0spID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKSB7CisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LQUNUSVZFOworCQlkZC0+aXBhdGhfZmxhZ3MgJj0KKwkJCX4oSVBBVEhfTElOS1VOSyB8IElQQVRIX0xJTktJTklUIHwgSVBBVEhfTElOS0RPV04gfAorCQkJICBJUEFUSF9MSU5LQVJNRUQgfCBJUEFUSF9OT0NBQkxFKTsKKwkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfTk9DQUJMRTsKKwkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9CisJCQlJUEFUSF9TVEFUVVNfSUJfUkVBRFkgfCBJUEFUSF9TVEFUVVNfSUJfQ09ORjsKKwkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOworCisJCV9faXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX0lGX1VQKTsKKwl9IGVsc2UgaWYgKCh2YWwgJiBJUEFUSF9JQlNUQVRFX01BU0spID09IElQQVRIX0lCU1RBVEVfSU5JVCkgeworCQkvKgorCQkgKiBzZXQgSU5JVCBhbmQgRE9XTi4gIERvd24gaXMgY2hlY2tlZCBieSBtb3N0IG9mIHRoZSBvdGhlcgorCQkgKiBjb2RlLCBidXQgSU5JVCBpcyB1c2VmdWwgdG8ga25vdyBpbiBhIGZldyBwbGFjZXMuCisJCSAqLworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LRE9XTjsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9CisJCQl+KElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LQUNUSVZFIHwgSVBBVEhfTElOS0FSTUVECisJCQkgIHwgSVBBVEhfTk9DQUJMRSk7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+KElQQVRIX1NUQVRVU19JQl9OT0NBQkxFCisJCQkJCXwgSVBBVEhfU1RBVFVTX0lCX1JFQURZKTsKKwkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOworCX0gZWxzZSBpZiAoKHZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSykgPT0gSVBBVEhfSUJTVEFURV9BUk0pIHsKKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktBUk1FRDsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9CisJCQl+KElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LRE9XTiB8IElQQVRIX0xJTktJTklUIHwKKwkJCSAgSVBBVEhfTElOS0FDVElWRSB8IElQQVRIX05PQ0FCTEUpOworCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfihJUEFUSF9TVEFUVVNfSUJfTk9DQUJMRQorCQkJCQl8IElQQVRIX1NUQVRVU19JQl9SRUFEWSk7CisJCWRkLT5pcGF0aF9mX3NldGV4dGxlZChkZCwgbHN0YXRlLCBsdHN0YXRlKTsKKwl9IGVsc2UgeworCQlpZiAoIW5vcHJpbnQpCisJCQlpcGF0aF9kYmcoIklCc3RhdHVzY2hhbmdlIHVuaXQgJXU6ICVzICgleClcbiIsCisJCQkJICBkZC0+aXBhdGhfdW5pdCwKKwkJCQkgIGlwYXRoX2liY3N0YXR1c19zdHJbbHRzdGF0ZV0sIGx0c3RhdGUpOworCX0KK3NraXBfaWJjaGFuZ2U6CisJZGQtPmlwYXRoX2xhc3RpYmNzdGF0ID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc3VwcF9tc2dzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCSAgICAgdW5zaWduZWQgc3VwcF9tc2dzLCBjaGFyIG1zZ1s1MTJdKQoreworCS8qCisJICogUHJpbnQgdGhlIG1lc3NhZ2UgdW5sZXNzIGl0J3MgaWJjIHN0YXR1cyBjaGFuZ2Ugb25seSwgd2hpY2gKKwkgKiBoYXBwZW5zIHNvIG9mdGVuIHdlIG5ldmVyIHdhbnQgdG8gY291bnQgaXQuCisJICovCisJaWYgKGRkLT5pcGF0aF9sYXN0ZXJyb3IgJiB+SU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCkgeworCQlpcGF0aF9kZWNvZGVfZXJyKG1zZywgc2l6ZW9mIG1zZywgZGQtPmlwYXRoX2xhc3RlcnJvciAmCisJCQkJIH5JTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKTsKKwkJaWYgKGRkLT5pcGF0aF9sYXN0ZXJyb3IgJgorCQkgICAgfihJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwpKQorCQkJaXBhdGhfZGV2X2VycihkZCwgIlN1cHByZXNzZWQgJXUgbWVzc2FnZXMgZm9yICIKKwkJCQkgICAgICAiZmFzdC1yZXBlYXRpbmcgZXJyb3JzICglcykgKCVsbHgpXG4iLAorCQkJCSAgICAgIHN1cHBfbXNncywgbXNnLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgICAgZGQtPmlwYXRoX2xhc3RlcnJvcik7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIHJjdmVncmZ1bGwgYW5kIHJjdmhkcnFmdWxsIGFyZSAibm9ybWFsIiwgZm9yIHNvbWUKKwkJCSAqIHR5cGVzIG9mIHByb2Nlc3NlcyAobW9zdGx5IGJlbmNobWFya3MpIHRoYXQgc2VuZAorCQkJICogaHVnZSBudW1iZXJzIG9mIG1lc3NhZ2VzLCB3aGlsZSBub3QgcHJvY2Vzc2luZworCQkJICogdGhlbS4gU28gb25seSBjb21wbGFpbiBhYm91dCB0aGVzZSBhdCBkZWJ1ZworCQkJICogbGV2ZWwuCisJCQkgKi8KKwkJCWlwYXRoX2RiZygiU3VwcHJlc3NlZCAldSBtZXNzYWdlcyBmb3IgJXNcbiIsCisJCQkJICBzdXBwX21zZ3MsIG1zZyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBoYW5kbGVfZnJlcXVlbnRfZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgICAgaXBhdGhfZXJyX3QgZXJycywgY2hhciBtc2dbNTEyXSwKKwkJCQkgICAgICAgaW50ICpub3ByaW50KQoreworCXVuc2lnbmVkIGxvbmcgbmM7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dG1zZ190aW1lOworCXN0YXRpYyB1bnNpZ25lZCBubXNncywgc3VwcF9tc2dzOworCisJLyoKKwkgKiBUaHJvdHRsZSBiYWNrICJmYXN0IiBtZXNzYWdlcyB0byBubyBtb3JlIHRoYW4gMTAgcGVyIDUgc2Vjb25kcy4KKwkgKiBUaGlzIGlzbid0IHBlcmZlY3QsIGJ1dCBpdCdzIGEgcmVhc29uYWJsZSBoZXVyaXN0aWMuIElmIHdlIGdldAorCSAqIG1vcmUgdGhhbiAxMCwgZ2l2ZSBhIDZ4IGxvbmdlciBkZWxheS4KKwkgKi8KKwluYyA9IGppZmZpZXM7CisJaWYgKG5tc2dzID4gMTApIHsKKwkJaWYgKHRpbWVfYmVmb3JlKG5jLCBuZXh0bXNnX3RpbWUpKSB7CisJCQkqbm9wcmludCA9IDE7CisJCQlpZiAoIXN1cHBfbXNncysrKQorCQkJCW5leHRtc2dfdGltZSA9IG5jICsgSFogKiAzOworCQl9CisJCWVsc2UgaWYgKHN1cHBfbXNncykgeworCQkJaGFuZGxlX3N1cHBfbXNncyhkZCwgc3VwcF9tc2dzLCBtc2cpOworCQkJc3VwcF9tc2dzID0gMDsKKwkJCW5tc2dzID0gMDsKKwkJfQorCX0KKwllbHNlIGlmICghbm1zZ3MrKyB8fCB0aW1lX2FmdGVyKG5jLCBuZXh0bXNnX3RpbWUpKQorCQluZXh0bXNnX3RpbWUgPSBuYyArIEhaIC8gMjsKKworCXJldHVybiBzdXBwX21zZ3M7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9lcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9lcnJfdCBlcnJzKQoreworCWNoYXIgbXNnWzUxMl07CisJdTY0IGlnbm9yZV90aGlzX3RpbWUgPSAwOworCWludCBpOworCWludCBjaGtlcnJwa3RzID0gMCwgbm9wcmludCA9IDA7CisJdW5zaWduZWQgc3VwcF9tc2dzOworCisJc3VwcF9tc2dzID0gaGFuZGxlX2ZyZXF1ZW50X2Vycm9ycyhkZCwgZXJycywgbXNnLCAmbm9wcmludCk7CisKKwkvKgorCSAqIGRvbid0IHJlcG9ydCBlcnJvcnMgdGhhdCBhcmUgbWFza2VkIChpbmNsdWRlcyB0aG9zZSBhbHdheXMKKwkgKiBpZ25vcmVkKQorCSAqLworCWVycnMgJj0gfmRkLT5pcGF0aF9tYXNrZWRlcnJzOworCisJLyogZG8gdGhlc2UgZmlyc3QsIHRoZXkgYXJlIG1vc3QgaW1wb3J0YW50ICovCisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfSEFSRFdBUkUpIHsKKwkJLyogcmV1c2Ugc2FtZSBtc2cgYnVmICovCisJCWRkLT5pcGF0aF9mX2hhbmRsZV9od2Vycm9ycyhkZCwgbXNnLCBzaXplb2YgbXNnKTsKKwl9CisKKwlpZiAoIW5vcHJpbnQgJiYgKGVycnMgJiB+aW5maW5pcGF0aF9lX2JpdHNleHRhbnQpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiZXJyb3IgaW50ZXJydXB0IHdpdGggdW5rbm93biBlcnJvcnMgIgorCQkJICAgICAgIiVsbHggc2V0XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgICAgKGVycnMgJiB+aW5maW5pcGF0aF9lX2JpdHNleHRhbnQpKTsKKworCWlmIChlcnJzICYgRV9TVU1fRVJSUykKKwkJaWdub3JlX3RoaXNfdGltZSA9IGhhbmRsZV9lX3N1bV9lcnJzKGRkLCBlcnJzKTsKKworCWlmIChzdXBwX21zZ3MgPT0gMjUwMDAwKSB7CisJCS8qCisJCSAqIEl0J3Mgbm90IGVudGlyZWx5IHJlYXNvbmFibGUgYXNzdW1pbmcgdGhhdCB0aGUgZXJyb3JzIHNldAorCQkgKiBpbiB0aGUgbGFzdCBjbGVhciBwZXJpb2QgYXJlIGFsbCByZXNwb25zaWJsZSBmb3IgdGhlCisJCSAqIHByb2JsZW0sIGJ1dCB0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gYXNzdW1lIGl0J3MgdGhlIG9ubHkKKwkJICogb25lcyBvbiB0aGlzIHBhcnRpY3VsYXIgaW50ZXJydXB0LCB3aGljaCBhbHNvIGlzbid0IGdyZWF0CisJCSAqLworCQlkZC0+aXBhdGhfbWFza2VkZXJycyB8PSBkZC0+aXBhdGhfbGFzdGVycm9yIHwgZXJyczsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcm1hc2ssCisJCQkJIH5kZC0+aXBhdGhfbWFza2VkZXJycyk7CisJCWlwYXRoX2RlY29kZV9lcnIobXNnLCBzaXplb2YgbXNnLAorCQkJCSAoZGQtPmlwYXRoX21hc2tlZGVycnMgJiB+ZGQtPgorCQkJCSAgaXBhdGhfaWdub3JlZGVycnMpKTsKKworCQlpZiAoKGRkLT5pcGF0aF9tYXNrZWRlcnJzICYgfmRkLT5pcGF0aF9pZ25vcmVkZXJycykgJgorCQkgICAgfihJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwpKQorCQkJaXBhdGhfZGV2X2VycihkZCwgIkRpc2FibGluZyBlcnJvcihzKSAlbGx4IGJlY2F1c2UgIgorCQkJCSAgICAgICJvY2N1cmluZyB0b28gZnJlcXVlbnRseSAoJXMpXG4iLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgICAgKGRkLT5pcGF0aF9tYXNrZWRlcnJzICYKKwkJCQkgICAgICAgfmRkLT5pcGF0aF9pZ25vcmVkZXJycyksIG1zZyk7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIHJjdmVncmZ1bGwgYW5kIHJjdmhkcnFmdWxsIGFyZSAibm9ybWFsIiwKKwkJCSAqIGZvciBzb21lIHR5cGVzIG9mIHByb2Nlc3NlcyAobW9zdGx5IGJlbmNobWFya3MpCisJCQkgKiB0aGF0IHNlbmQgaHVnZSBudW1iZXJzIG9mIG1lc3NhZ2VzLCB3aGlsZSBub3QKKwkJCSAqIHByb2Nlc3NpbmcgdGhlbS4gIFNvIG9ubHkgY29tcGxhaW4gYWJvdXQKKwkJCSAqIHRoZXNlIGF0IGRlYnVnIGxldmVsLgorCQkJICovCisJCQlpcGF0aF9kYmcoIkRpc2FibGluZyBmcmVxdWVudCBxdWV1ZSBmdWxsIGVycm9ycyAiCisJCQkJICAiKCVzKVxuIiwgbXNnKTsKKwkJfQorCisJCS8qCisJCSAqIFJlLWVuYWJsZSB0aGUgbWFza2VkIGVycm9ycyBhZnRlciBhcm91bmQgMyBtaW51dGVzLiAgaW4KKwkJICogaXBhdGhfZ2V0X2Zhc3RzdGF0cygpLiAgSWYgd2UgaGF2ZSBhIHNlcmllcyBvZiBmYXN0CisJCSAqIHJlcGVhdGluZyBidXQgZGlmZmVyZW50IGVycm9ycywgdGhlIGludGVydmFsIHdpbGwga2VlcAorCQkgKiBzdHJldGNoaW5nIG91dCwgYnV0IHRoYXQncyBPSywgYXMgdGhhdCdzIHByZXR0eQorCQkgKiBjYXRhc3Ryb3BoaWMuCisJCSAqLworCQlkZC0+aXBhdGhfdW5tYXNrdGltZSA9IGppZmZpZXMgKyBIWiAqIDE4MDsKKwl9CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2Vycm9yY2xlYXIsIGVycnMpOworCWlmIChpZ25vcmVfdGhpc190aW1lKQorCQllcnJzICY9IH5pZ25vcmVfdGhpc190aW1lOworCWlmIChlcnJzICYgfmRkLT5pcGF0aF9sYXN0ZXJyb3IpIHsKKwkJZXJycyAmPSB+ZGQtPmlwYXRoX2xhc3RlcnJvcjsKKwkJLyogbmV2ZXIgc3VwcHJlc3MgZHVwbGljYXRlIGh3ZXJyb3JzIG9yIGlic3RhdHVzY2hhbmdlICovCisJCWRkLT5pcGF0aF9sYXN0ZXJyb3IgfD0gZXJycyAmCisJCQl+KElORklOSVBBVEhfRV9IQVJEV0FSRSB8CisJCQkgIElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQpOworCX0KKwlpZiAoIWVycnMpCisJCXJldHVybjsKKworCWlmICghbm9wcmludCkKKwkJLyoKKwkJICogdGhlIG9uZXMgd2UgbWFzayBvZmYgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJlbG93IG9yIGFib3ZlCisJCSAqLworCQlpcGF0aF9kZWNvZGVfZXJyKG1zZywgc2l6ZW9mIG1zZywKKwkJCQkgZXJycyAmIH4oSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCB8CisJCQkJCSAgSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMIHwKKwkJCQkJICBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfAorCQkJCQkgIElORklOSVBBVEhfRV9IQVJEV0FSRSkpOworCWVsc2UKKwkJLyogc28gd2UgZG9uJ3QgbmVlZCBpZiAoIW5vcHJpbnQpIGF0IHN0cmxjYXQncyBiZWxvdyAqLworCQkqbXNnID0gMDsKKworCWlmIChlcnJzICYgRV9TVU1fUEtURVJSUykgeworCQlpcGF0aF9zdGF0cy5zcHNfcGt0ZXJycysrOworCQljaGtlcnJwa3RzID0gMTsKKwl9CisJaWYgKGVycnMgJiBFX1NVTV9FUlJTKQorCQlpcGF0aF9zdGF0cy5zcHNfZXJycysrOworCisJaWYgKGVycnMgJiAoSU5GSU5JUEFUSF9FX1JJQ1JDIHwgSU5GSU5JUEFUSF9FX1JWQ1JDKSkgeworCQlpcGF0aF9zdGF0cy5zcHNfY3JjZXJycysrOworCQljaGtlcnJwa3RzID0gMTsKKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gcHJpbnQgdGhlc2UgdHdvIGFzIHRoZXkgaGFwcGVuLCBvciB3ZSBjYW4gbWFrZQorCSAqIHRoZSBzaXR1YXRpb24gZXZlbiB3b3JzZSwgYmVjYXVzZSBpdCB0YWtlcyBzbyBsb25nIHRvIHByaW50CisJICogbWVzc2FnZXMgdG8gc2VyaWFsIGNvbnNvbGVzLiAgS2VybmVsIHBvcnRzIGdldCBwcmludGVkIGZyb20KKwkgKiBmYXN0X3N0YXRzLCBubyBtb3JlIHRoYW4gZXZlcnkgNSBzZWNvbmRzLCB1c2VyIHBvcnRzIGdldCBwcmludGVkCisJICogb24gY2xvc2UKKwkgKi8KKwlpZiAoZXJycyAmIElORklOSVBBVEhfRV9SUkNWSERSRlVMTCkgeworCQlpbnQgYW55OworCQl1MzIgaGQsIHRsOworCQlpcGF0aF9zdGF0cy5zcHNfaGRycWZ1bGwrKzsKKwkJZm9yIChhbnkgPSBpID0gMDsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CisJCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW2ldOworCQkJaWYgKGkgPT0gMCkgeworCQkJCWhkID0gZGQtPmlwYXRoX3BvcnQwaGVhZDsKKwkJCQl0bCA9ICh1MzIpIGxlNjRfdG9fY3B1KAorCQkJCQkqZGQtPmlwYXRoX2hkcnF0YWlscHRyKTsKKwkJCX0gZWxzZSBpZiAocGQgJiYgcGQtPnBvcnRfY250ICYmCisJCQkJICAgcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIpIHsKKwkJCQkvKgorCQkJCSAqIGRvbid0IHJlcG9ydCBzYW1lIHBvaW50IG11bHRpcGxlIHRpbWVzLAorCQkJCSAqIGV4Y2VwdCBrZXJuZWwKKwkJCQkgKi8KKwkJCQl0bCA9ICh1MzIpICogcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHI7CisJCQkJaWYgKHRsID09IGRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzW2ldKQorCQkJCQljb250aW51ZTsKKwkJCQloZCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJoZWFkLAorCQkJCQkJICAgICAgIGkpOworCQkJfSBlbHNlCisJCQkJY29udGludWU7CisJCQlpZiAoaGQgPT0gKHRsICsgMSkgfHwKKwkJCSAgICAoIWhkICYmIHRsID09IGRkLT5pcGF0aF9oZHJxbGFzdCkpIHsKKwkJCQlkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlsc1tpXSA9IHRsOworCQkJCXBkLT5wb3J0X2hkcnFmdWxsKys7CisJCQkJaWYgKGkgPT0gMCkKKwkJCQkJY2hrZXJycGt0cyA9IDE7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwpIHsKKwkJLyoKKwkJICogc2luY2UgdGhpcyBpcyBvZiBsZXNzIGltcG9ydGFuY2UgYW5kIG5vdCBsaWtlbHkgdG8KKwkJICogaGFwcGVuIHdpdGhvdXQgYWxzbyBnZXR0aW5nIGhkcmZ1bGwsIG9ubHkgY291bnQKKwkJICogb2NjdXJyZW5jZXM7IGRvbid0IGNoZWNrIGVhY2ggcG9ydCAob3IgZXZlbiB0aGUga2VybmVsCisJCSAqIHZzIHVzZXIpCisJCSAqLworCQlpcGF0aF9zdGF0cy5zcHNfZXRpZGZ1bGwrKzsKKwkJaWYgKGRkLT5pcGF0aF9wb3J0MGhlYWQgIT0KKwkJICAgICh1MzIpIGxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKQorCQkJY2hrZXJycGt0cyA9IDE7CisJfQorCisJLyoKKwkgKiBkbyB0aGlzIGJlZm9yZSBJQlNUQVRVU0NIQU5HRUQsIGluIGNhc2UgYm90aCBiaXRzIHNldCBpbiBhIHNpbmdsZQorCSAqIGludGVycnVwdDsgd2Ugd2FudCB0aGUgU1RBVFVTQ0hBTkdFIHRvICJ3aW4iLCBzbyB3ZSBkbyBvdXIKKwkgKiBpbnRlcm5hbCBjb3B5IG9mIHN0YXRlIG1hY2hpbmUgY29ycmVjdGx5CisJICovCisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfUklCTE9TVExJTkspIHsKKwkJLyoKKwkJICogZm9yY2UgdGhyb3VnaCBibG9jayBiZWxvdworCQkgKi8KKwkJZXJycyB8PSBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEOworCQlpcGF0aF9zdGF0cy5zcHNfaWJsaW5rKys7CisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LRE9XTjsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH4oSVBBVEhfTElOS1VOSyB8IElQQVRIX0xJTktJTklUCisJCQkJICAgICB8IElQQVRIX0xJTktBUk1FRCB8IElQQVRIX0xJTktBQ1RJVkUpOworCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9SRUFEWTsKKwkJaWYgKCFub3ByaW50KSB7CisJCQl1NjQgc3QgPSBpcGF0aF9yZWFkX2tyZWc2NCgKKwkJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOworCisJCQlpcGF0aF9kYmcoIkxvc3QgbGluaywgbGluayBub3cgZG93biAoJXMpXG4iLAorCQkJCSAgaXBhdGhfaWJjc3RhdHVzX3N0cltzdCAmIDB4Zl0pOworCQl9CisJfQorCWlmIChlcnJzICYgSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCkKKwkJaGFuZGxlX2VfaWJzdGF0dXNjaGFuZ2VkKGRkLCBlcnJzLCBub3ByaW50KTsKKworCWlmIChlcnJzICYgSU5GSU5JUEFUSF9FX1JFU0VUKSB7CisJCWlmICghbm9wcmludCkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJHb3QgcmVzZXQsIHJlcXVpcmVzIHJlLWluaXQgIgorCQkJCSAgICAgICIodW5sb2FkIGFuZCByZWxvYWQgZHJpdmVyKVxuIik7CisJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSU5JVFRFRDsJLyogbmVlZHMgcmUtaW5pdCAqLworCQkvKiBtYXJrIGFzIGhhdmluZyBoYWQgZXJyb3IgKi8KKwkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19IV0VSUk9SOworCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9DT05GOworCX0KKworCWlmICghbm9wcmludCAmJiAqbXNnKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiJXMgZXJyb3JcbiIsIG1zZyk7CisJaWYgKGRkLT5pcGF0aF9zbWFfc3RhdGVfd2FudGVkICYgZGQtPmlwYXRoX2ZsYWdzKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInNtYSB3YW50ZWQgc3RhdGUgJXgsIGlmbGFncyBub3cgJXgsICIKKwkJCSAgICJ3YWtpbmdcbiIsIGRkLT5pcGF0aF9zbWFfc3RhdGVfd2FudGVkLAorCQkJICAgZGQtPmlwYXRoX2ZsYWdzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpcGF0aF9zbWFfc3RhdGVfd2FpdCk7CisJfQorCisJaWYgKGNoa2VycnBrdHMpCisJCS8qIHByb2Nlc3MgcG9zc2libGUgZXJyb3IgcGFja2V0cyBpbiBoZHJxICovCisJCWlwYXRoX2tyZWNlaXZlKGRkKTsKK30KKworLyogdGhpcyBpcyBzZXBhcmF0ZSB0byBhbGxvdyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBvZiBpcGF0aF9pbnRyKCkgKi8KKworc3RhdGljIHZvaWQgaXBhdGhfYmFkX2ludHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgKiB1bmV4cGVjdHApCit7CisJLyoKKwkgKiBzb21ldGltZXMgaGFwcGVuIGR1cmluZyBkcml2ZXIgaW5pdCBhbmQgdW5sb2FkLCBkb24ndCB3YW50CisJICogdG8gcHJvY2VzcyBhbnkgaW50ZXJydXB0cyBhdCB0aGF0IHBvaW50CisJICovCisKKwkvKiB0aGlzIGlzIGp1c3QgYSBiYW5kYWlkLCBub3QgYSBmaXgsIGlmIHNvbWV0aGluZyBnb2VzIGJhZGx5CisJICogd3JvbmcgKi8KKwlpZiAoKysqdW5leHBlY3RwID4gMTAwKSB7CisJCWlmICgrKyp1bmV4cGVjdHAgPiAxMDUpIHsKKwkJCS8qCisJCQkgKiBvaywgd2UgbXVzdCBiZSB0YWtpbmcgc29tZWJvZHkgZWxzZSdzIGludGVycnVwdHMsCisJCQkgKiBkdWUgdG8gYSBtZXNzZWQgdXAgbXB0YWJsZSBhbmQvb3IgUElSUSB0YWJsZSwgc28KKwkJCSAqIHVucmVnaXN0ZXIgdGhlIGludGVycnVwdC4gIFdlJ3ZlIHNlZW4gdGhpcyBkdXJpbmcKKwkJCSAqIGxpbnV4YmlvcyBkZXZlbG9wbWVudCB3b3JrLCBhbmQgaXQgbWF5IGhhcHBlbiBpbgorCQkJICogdGhlIGZ1dHVyZSBhZ2Fpbi4KKwkJCSAqLworCQkJaWYgKGRkLT5wY2lkZXYgJiYgZGQtPnBjaWRldi0+aXJxKSB7CisJCQkJaXBhdGhfZGV2X2VycihkZCwgIk5vdyAldSB1bmV4cGVjdGVkICIKKwkJCQkJICAgICAgImludGVycnVwdHMsIHVucmVnaXN0ZXJpbmcgIgorCQkJCQkgICAgICAiaW50ZXJydXB0IGhhbmRsZXJcbiIsCisJCQkJCSAgICAgICp1bmV4cGVjdHApOworCQkJCWlwYXRoX2RiZygiZnJlZV9pcnEgb2YgaXJxICV4XG4iLAorCQkJCQkgIGRkLT5wY2lkZXYtPmlycSk7CisJCQkJZnJlZV9pcnEoZGQtPnBjaWRldi0+aXJxLCBkZCk7CisJCQl9CisJCX0KKwkJaWYgKGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludG1hc2spKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiJXUgdW5leHBlY3RlZCBpbnRlcnJ1cHRzLCAiCisJCQkJICAgICAgImRpc2FibGluZyBpbnRlcnJ1cHRzIGNvbXBsZXRlbHlcbiIsCisJCQkJICAgICAgKnVuZXhwZWN0cCk7CisJCQkvKgorCQkJICogZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcKKwkJCSAqLworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRtYXNrLAorCQkJCQkgMFVMTCk7CisJCX0KKwl9IGVsc2UgaWYgKCp1bmV4cGVjdHAgPiAxKQorCQlpcGF0aF9kYmcoIkludGVycnVwdCB3aGVuIG5vdCByZWFkeSwgc2hvdWxkIG5vdCBoYXBwZW4sICIKKwkJCSAgImlnbm9yaW5nXG4iKTsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfYmFkX3JlZ3JlYWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXN0YXRpYyBpbnQgYWxsYml0czsKKworCS8qIHNlcGFyYXRlIHJvdXRpbmUsIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIG9mIGlwYXRoX2ludHIoKSAqLworCisJLyoKKwkgKiBXZSBwcmludCB0aGUgbWVzc2FnZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLCBpbiBob3BlIG9mCisJICogaGF2aW5nIGEgYmV0dGVyIGNoYW5jZSBvZiBkZWJ1Z2dpbmcgdGhlIHByb2JsZW0uCisJICovCisJaXBhdGhfZGV2X2VycihkZCwKKwkJICAgICAgIlJlYWQgb2YgaW50ZXJydXB0IHN0YXR1cyBmYWlsZWQgKGFsbCBiaXRzIHNldClcbiIpOworCWlmIChhbGxiaXRzKyspIHsKKwkJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcgKi8KKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRtYXNrLCAwVUxMKTsKKwkJaWYgKGFsbGJpdHMgPT0gMikgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIlN0aWxsIGJhZCBpbnRlcnJ1cHQgc3RhdHVzLCAiCisJCQkJICAgICAgInVucmVnaXN0ZXJpbmcgaW50ZXJydXB0XG4iKTsKKwkJCWZyZWVfaXJxKGRkLT5wY2lkZXYtPmlycSwgZGQpOworCQl9IGVsc2UgaWYgKGFsbGJpdHMgPiAyKSB7CisJCQlpZiAoKGFsbGJpdHMgJSAxMDAwMCkgPT0gMCkKKwkJCQlwcmludGsoIi4iKTsKKwkJfSBlbHNlCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRGlzYWJsaW5nIGludGVycnVwdHMsICIKKwkJCQkgICAgICAibXVsdGlwbGUgZXJyb3JzXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9wb3J0X3Bpb2F2YWlsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1MzIgaTsKKwkvKgorCSAqIHN0YXJ0IGZyb20gcG9ydCAxLCBzaW5jZSBmb3Igbm93IHBvcnQgMCAgaXMgbmV2ZXIgdXNpbmcKKwkgKiB3YWl0X2V2ZW50IGZvciBQSU8KKwkgKi8KKwlmb3IgKGkgPSAxOyBkZC0+aXBhdGhfcG9ydHBpb3dhaXQgJiYgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CisJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07CisKKwkJaWYgKHBkICYmIHBkLT5wb3J0X2NudCAmJgorCQkgICAgZGQtPmlwYXRoX3BvcnRwaW93YWl0ICYgKDFVIDw8IGkpKSB7CisJCQljbGVhcl9iaXQoaSwgJmRkLT5pcGF0aF9wb3J0cGlvd2FpdCk7CisJCQlpZiAodGVzdF9iaXQoSVBBVEhfUE9SVF9XQUlUSU5HX1BJTywKKwkJCQkgICAgICZwZC0+cG9ydF9mbGFnKSkgeworCQkJCWNsZWFyX2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUElPLAorCQkJCQkgICZwZC0+cG9ydF9mbGFnKTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkLT5wb3J0X3dhaXQpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbGF5ZXJfcGlvYXZhaWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfX2lwYXRoX2xheWVyX2ludHIoZGQsIElQQVRIX0xBWUVSX0lOVF9TRU5EX0NPTlRJTlVFKTsKKwlpZiAocmV0ID4gMCkKKwkJZ290byBzZXQ7CisKKwlyZXQgPSBfX2lwYXRoX3ZlcmJzX3Bpb2J1ZmF2YWlsKGRkKTsKKwlpZiAocmV0ID4gMCkKKwkJZ290byBzZXQ7CisKKwlyZXR1cm47CitzZXQ6CisJc2V0X2JpdChJUEFUSF9TX1BJT0lOVEJVRkFWQUlMLCAmZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgaXN0YXQpCit7CisJdTY0IHBvcnRyOworCWludCBpOworCWludCByY3ZkaW50ID0gMDsKKworCXBvcnRyID0gKChpc3RhdCA+PiBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpICYKKwkJIGluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrKQorCQl8ICgoaXN0YXQgPj4gSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkgJgorCQkgICBpbmZpbmlwYXRoX2lfcmN2dXJnX21hc2spOworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IGkrKykgeworCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW2ldOworCQlpZiAocG9ydHIgJiAoMSA8PCBpKSAmJiBwZCAmJgorCQkgICAgcGQtPnBvcnRfY250KSB7CisJCQlpZiAoaSA9PSAwKQorCQkJCWlwYXRoX2tyZWNlaXZlKGRkKTsKKwkJCWVsc2UgaWYgKHRlc3RfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsCisJCQkJCSAgJnBkLT5wb3J0X2ZsYWcpKSB7CisJCQkJaW50IHJjYml0OworCQkJCWNsZWFyX2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUkNWLAorCQkJCQkgICZwZC0+cG9ydF9mbGFnKTsKKwkJCQlyY2JpdCA9IGkgKyBJTkZJTklQQVRIX1JfSU5UUkFWQUlMX1NISUZUOworCQkJCWNsZWFyX2JpdCgxVUwgPDwgcmNiaXQsICZkZC0+aXBhdGhfcmN2Y3RybCk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwZC0+cG9ydF93YWl0KTsKKwkJCQlyY3ZkaW50ID0gMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAocmN2ZGludCkgeworCQkvKiBvbmx5IHdhbnQgdG8gdGFrZSBvbmUgaW50ZXJydXB0LCBzbyB0dXJuIG9mZiB0aGUgcmN2CisJCSAqIGludGVycnVwdCBmb3IgYWxsIHRoZSBwb3J0cyB0aGF0IHdlIGRpZCB0aGUgd2FrZXVwIG9uCisJCSAqIChidXQgbmV2ZXIgZm9yIGtlcm5lbCBwb3J0KQorCQkgKi8KKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisJfQorfQorCitpcnFyZXR1cm5fdCBpcGF0aF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRhdGE7CisJdTMyIGlzdGF0OworCWlwYXRoX2Vycl90IGVzdGF0ID0gMDsKKwlzdGF0aWMgdW5zaWduZWQgdW5leHBlY3RlZCA9IDA7CisJaXJxcmV0dXJuX3QgcmV0OworCisJaWYoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkgeworCQkvKiB0aGlzIGlzIG1vc3RseSBzbyB3ZSBkb24ndCB0cnkgdG8gdG91Y2ggdGhlIGNoaXAgd2hpbGUKKwkJICogaXQgaXMgYmVpbmcgcmVzZXQgKi8KKwkJLyoKKwkJICogVGhpcyByZXR1cm4gdmFsdWUgaXMgcGVyaGFwcyBvZGQsIGJ1dCB3ZSBkbyBub3Qgd2FudCB0aGUKKwkJICogaW50ZXJydXB0IGNvcmUgY29kZSB0byByZW1vdmUgb3VyIGludGVycnVwdCBoYW5kbGVyCisJCSAqIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZWFyIHRvIGJlIGhhbmRsaW5nIGFuIGludGVycnVwdAorCQkgKiBkdXJpbmcgYSBjaGlwIHJlc2V0LgorCQkgKi8KKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlzdGF0ID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50c3RhdHVzKTsKKwlpZiAodW5saWtlbHkoIWlzdGF0KSkgeworCQlpcGF0aF9zdGF0cy5zcHNfbnVsbGludHIrKzsKKwkJcmV0ID0gSVJRX05PTkU7IC8qIG5vdCBvdXIgaW50ZXJydXB0LCBvciBhbHJlYWR5IGhhbmRsZWQgKi8KKwkJZ290byBiYWlsOworCX0KKwlpZiAodW5saWtlbHkoaXN0YXQgPT0gLTEpKSB7CisJCWlwYXRoX2JhZF9yZWdyZWFkKGRkKTsKKwkJLyogZG9uJ3Qga25vdyBpZiBpdCB3YXMgb3VyIGludGVycnVwdCBvciBub3QgKi8KKwkJcmV0ID0gSVJRX05PTkU7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpcGF0aF9zdGF0cy5zcHNfaW50cysrOworCisJLyoKKwkgKiB0aGlzIG5lZWRzIHRvIGJlIGZsYWdzJmluaXR0ZWQsIG5vdCBzdGF0dXNwLCBzbyB3ZSBrZWVwCisJICogdGFraW5nIGludGVycnVwdHMgZXZlbiBhZnRlciBsaW5rIGdvZXMgZG93biwgZXRjLgorCSAqIEFsc28sIHdlICptdXN0KiBjbGVhciB0aGUgaW50ZXJydXB0IGF0IHNvbWUgcG9pbnQsIG9yIHdlIHdvbid0CisJICogdGFrZSBpdCBhZ2Fpbiwgd2hpY2ggY2FuIGJlIHJlYWwgYmFkIGZvciBlcnJvcnMsIGV0Yy4uLgorCSAqLworCisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpIHsKKwkJaXBhdGhfYmFkX2ludHIoZGQsICZ1bmV4cGVjdGVkKTsKKwkJcmV0ID0gSVJRX05PTkU7CisJCWdvdG8gYmFpbDsKKwl9CisJaWYgKHVuZXhwZWN0ZWQpCisJCXVuZXhwZWN0ZWQgPSAwOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiaW50ciBzdGF0PTB4JXhcbiIsIGlzdGF0KTsKKworCWlmIChpc3RhdCAmIH5pbmZpbmlwYXRoX2lfYml0c2V4dGFudCkKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGludGVycnVwdHMgJXggc2V0XG4iLAorCQkJICAgICAgaXN0YXQgJiAodTMyKSB+IGluZmluaXBhdGhfaV9iaXRzZXh0YW50KTsKKworCWlmIChpc3RhdCAmIElORklOSVBBVEhfSV9FUlJPUikgeworCQlpcGF0aF9zdGF0cy5zcHNfZXJyaW50cysrOworCQllc3RhdCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLAorCQkJCQkgIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JzdGF0dXMpOworCQlpZiAoIWVzdGF0KQorCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgImVycm9yIGludGVycnVwdCAoJXgpLCAiCisJCQkJICJidXQgbm8gZXJyb3IgYml0cyBzZXQhXG4iLCBpc3RhdCk7CisJCWVsc2UgaWYgKGVzdGF0ID09IC0xTEwpCisJCQkvKgorCQkJICogc2hvdWxkIHdlIHRyeSBjbGVhcmluZyBhbGwsIG9yIGhvcGUgbmV4dCByZWFkCisJCQkgKiB3b3Jrcz8KKwkJCSAqLworCQkJaXBhdGhfZGV2X2VycihkZCwgIlJlYWQgb2YgZXJyb3Igc3RhdHVzIGZhaWxlZCAiCisJCQkJICAgICAgIihhbGwgYml0cyBzZXQpOyBpZ25vcmluZ1xuIik7CisJCWVsc2UKKwkJCWhhbmRsZV9lcnJvcnMoZGQsIGVzdGF0KTsKKwl9CisKKwlpZiAoaXN0YXQgJiBJTkZJTklQQVRIX0lfR1BJTykgeworCQlpZiAodW5saWtlbHkoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9HUElPX0lOVFIpKSkgeworCQkJdTMyIGdwaW9zdGF0dXM7CisJCQlncGlvc3RhdHVzID0gaXBhdGhfcmVhZF9rcmVnMzIoCisJCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19zdGF0dXMpOworCQkJaXBhdGhfZGJnKCJVbmV4cGVjdGVkIEdQSU8gaW50ZXJydXB0IGJpdHMgJXhcbiIsCisJCQkJICBncGlvc3RhdHVzKTsKKwkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19jbGVhciwKKwkJCQkJIGdwaW9zdGF0dXMpOworCQl9CisJCWVsc2UgeworCQkJLyogQ2xlYXIgR1BJTyBzdGF0dXMgYml0IDIgKi8KKwkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19jbGVhciwKKwkJCQkJICh1NjQpICgxIDw8IDIpKTsKKworCQkJLyoKKwkJCSAqIFBhY2tldHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcG9ydCAwIHJjdiBxdWV1ZS4KKwkJCSAqIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyB0byBiZSBnZW5lcmFsaXplZCB0byBjaGVjaworCQkJICogSVBBVEhfR1BJT19JTlRSLCBhbmQgdGhlIHNwZWNpZmljIEdQSU8gYml0LCBpZgorCQkJICogR1BJTyBpbnRlcnJ1cHRzIGFyZSB1c2VkIGZvciBhbnl0aGluZyBlbHNlLgorCQkJICovCisJCQlpcGF0aF9rcmVjZWl2ZShkZCk7CisJCX0KKwl9CisKKwkvKgorCSAqIGNsZWFyIHRoZSBvbmVzIHdlIHdpbGwgZGVhbCB3aXRoIG9uIHRoaXMgcm91bmQKKwkgKiBXZSBjbGVhciBpdCBlYXJseSwgbW9zdGx5IGZvciByZWNlaXZlIGludGVycnVwdHMsIHNvIHdlCisJICoga25vdyB0aGUgY2hpcCB3aWxsIGhhdmUgc2VlbiB0aGlzIGJ5IHRoZSB0aW1lIHdlIHByb2Nlc3MKKwkgKiB0aGUgcXVldWUsIGFuZCB3aWxsIHJlLWludGVycnVwdCBpZiBuZWNlc3NhcnkuICBUaGUgcHJvY2Vzc29yCisJICogaXRzZWxmIHdvbid0IHRha2UgdGhlIGludGVycnVwdCBhZ2FpbiB1bnRpbCB3ZSByZXR1cm4uCisJICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgaXN0YXQpOworCisJaWYgKGlzdGF0ICYgSU5GSU5JUEFUSF9JX1NQSU9CVUZBVkFJTCkgeworCQljbGVhcl9iaXQoSVBBVEhfU19QSU9JTlRCVUZBVkFJTCwgJmRkLT5pcGF0aF9zZW5kY3RybCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7CisKKwkJaWYgKGRkLT5pcGF0aF9wb3J0cGlvd2FpdCkKKwkJCWhhbmRsZV9wb3J0X3Bpb2F2YWlsKGRkKTsKKworCQloYW5kbGVfbGF5ZXJfcGlvYXZhaWwoZGQpOworCX0KKworCS8qCisJICogd2UgY2hlY2sgZm9yIGJvdGggdHJhbnNpdGlvbiBmcm9tIGVtcHR5IHRvIG5vbi1lbXB0eSwgYW5kIHVyZ2VudAorCSAqIHBhY2tldHMgKHRob3NlIHdpdGggdGhlIGludGVycnVwdCBiaXQgc2V0IGluIHRoZSBoZWFkZXIpCisJICovCisKKwlpZiAoaXN0YXQgJiAoKGluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrIDw8CisJCSAgICAgIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkKKwkJICAgICB8IChpbmZpbmlwYXRoX2lfcmN2dXJnX21hc2sgPDwKKwkJCUlORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQpKSkKKwkJaGFuZGxlX3JjdihkZCwgaXN0YXQpOworCisJcmV0ID0gSVJRX0hBTkRMRUQ7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDkyZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCkBAIC0wLDAgKzEsODgzIEBACisjaWZuZGVmIF9JUEFUSF9LRVJORUxfSAorI2RlZmluZSBfSVBBVEhfS0VSTkVMX0gKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBpcyB0aGUgYmFzZSBoZWFkZXIgZmlsZSBmb3IgaW5maW5pcGF0aCBrZXJuZWwgY29kZQorICogaXBhdGhfdXNlci5oIHNlcnZlcyBhIHNpbWlsYXIgcHVycG9zZSBmb3IgdXNlciBjb2RlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2RlYnVnLmgiCisjaW5jbHVkZSAiaXBhdGhfcmVnaXN0ZXJzLmgiCisKKy8qIG9ubHkgcy93IG1ham9yIHZlcnNpb24gb2YgSW5maW5pUGF0aCB3ZSBjYW4gaGFuZGxlICovCisjZGVmaW5lIElQQVRIX0NISVBfVkVSU19NQUogMlUKKworLyogZG9uJ3QgY2FyZSBhYm91dCB0aGlzIGV4Y2VwdCBwcmludGluZyAqLworI2RlZmluZSBJUEFUSF9DSElQX1ZFUlNfTUlOIDBVCisKKy8qIHRlbXBvcmFyeSwgbWF5YmUgYWx3YXlzICovCitleHRlcm4gc3RydWN0IGluZmluaXBhdGhfc3RhdHMgaXBhdGhfc3RhdHM7CisKKyNkZWZpbmUgSVBBVEhfQ0hJUF9TV1ZFUlNJT04gSVBBVEhfQ0hJUF9WRVJTX01BSgorCitzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgeworCXZvaWQgKipwb3J0X3JjdmVncmJ1ZjsKKwlkbWFfYWRkcl90ICpwb3J0X3JjdmVncmJ1Zl9waHlzOworCS8qIHJjdmhkcnEgYmFzZSwgbmVlZHMgbW1hcCBiZWZvcmUgdXNlZnVsICovCisJdm9pZCAqcG9ydF9yY3ZoZHJxOworCS8qIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUgaGRycXRhaWwgaXMgdXBkYXRlZCAqLworCXU2NCAqcG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcjsKKwkvKiBwYWdlICogdXNlZCBmb3IgdWFkZHIgKi8KKwlzdHJ1Y3QgcGFnZSAqcG9ydF9yY3ZoZHJ0YWlsX3BhZ2VwOworCS8qCisJICogdGVtcCBidWZmZXIgZm9yIGV4cGVjdGVkIHNlbmQgc2V0dXAsIGFsbG9jYXRlZCBhdCBvcGVuLCBpbnN0ZWFkCisJICogb2YgZWFjaCBzZXR1cCBjYWxsCisJICovCisJdm9pZCAqcG9ydF90aWRfcGdfbGlzdDsKKwkvKiB3aGVuIHdhaXRpbmcgZm9yIHJjdiBvciBwaW9hdmFpbCAqLworCXdhaXRfcXVldWVfaGVhZF90IHBvcnRfd2FpdDsKKwkvKgorCSAqIHJjdmVnciBidWZzIGJhc2UsIHBoeXNpY2FsLCBtdXN0IGZpdAorCSAqIGluIDQ0IGJpdHMgc28gMzIgYml0IHByb2dyYW1zIG1tYXA2NCA0NCBiaXQgd29ya3MpCisJICovCisJZG1hX2FkZHJfdCBwb3J0X3JjdmVncl9waHlzOworCS8qIG1tYXAgb2YgaGRycSwgbXVzdCBmaXQgaW4gNDQgYml0cyAqLworCWRtYV9hZGRyX3QgcG9ydF9yY3ZoZHJxX3BoeXM7CisJLyoKKwkgKiB0aGUgYWN0dWFsIHVzZXIgYWRkcmVzcyB0aGF0IHdlIGlwYXRoX21sb2NrJ2VkLCBzbyB3ZSBjYW4KKwkgKiBpcGF0aF9tdW5sb2NrIGl0IGF0IGNsb3NlCisJICovCisJdW5zaWduZWQgbG9uZyBwb3J0X3JjdmhkcnRhaWxfdWFkZHI7CisJLyoKKwkgKiBudW1iZXIgb2Ygb3BlbnMgb24gdGhpcyBpbnN0YW5jZSAoMCBvciAxOyBpZ25vcmluZyBmb3JrcywgZHVwLAorCSAqIGV0Yy4gZm9yIG5vdykKKwkgKi8KKwlpbnQgcG9ydF9jbnQ7CisJLyoKKwkgKiBob3cgbXVjaCBzcGFjZSB0byBsZWF2ZSBhdCBzdGFydCBvZiBlYWdlciBUSUQgZW50cmllcyBmb3IKKwkgKiBwcm90b2NvbCB1c2UsIG9uIGVhY2ggVElECisJICovCisJLyogaW5zdGVhZCBvZiBjYWxjdWxhdGluZyBpdCAqLworCXVuc2lnbmVkIHBvcnRfcG9ydDsKKwkvKiBjaGlwIG9mZnNldCBvZiBQSU8gYnVmZmVycyBmb3IgdGhpcyBwb3J0ICovCisJdTMyIHBvcnRfcGlvYnVmczsKKwkvKiBob3cgbWFueSBhbGxvY19wYWdlcygpIGNodW5rcyBpbiBwb3J0X3JjdmVncmJ1Zl9wYWdlcyAqLworCXUzMiBwb3J0X3JjdmVncmJ1Zl9jaHVua3M7CisJLyogaG93IG1hbnkgZWdyYnVmcyBwZXIgY2h1bmsgKi8KKwl1MzIgcG9ydF9yY3ZlZ3JidWZzX3BlcmNodW5rOworCS8qIG9yZGVyIGZvciBwb3J0X3JjdmVncmJ1Zl9wYWdlcyAqLworCXNpemVfdCBwb3J0X3JjdmVncmJ1Zl9zaXplOworCS8qIHJjdmhkcnEgc2l6ZSAoZm9yIGZyZWVpbmcpICovCisJc2l6ZV90IHBvcnRfcmN2aGRycV9zaXplOworCS8qIG5leHQgZXhwZWN0ZWQgVElEIHRvIGNoZWNrIHdoZW4gbG9va2luZyBmb3IgZnJlZSAqLworCXUzMiBwb3J0X3RpZGN1cnNvcjsKKwkvKiBuZXh0IGV4cGVjdGVkIFRJRCB0byBjaGVjayAqLworCXVuc2lnbmVkIGxvbmcgcG9ydF9mbGFnOworCS8qIFdBSVRfUkNWIHRoYXQgdGltZWQgb3V0LCBubyBpbnRlcnJ1cHQgKi8KKwl1MzIgcG9ydF9yY3Z3YWl0X3RvOworCS8qIFdBSVRfUElPIHRoYXQgdGltZWQgb3V0LCBubyBpbnRlcnJ1cHQgKi8KKwl1MzIgcG9ydF9waW93YWl0X3RvOworCS8qIFdBSVRfUkNWIGFscmVhZHkgaGFwcGVuZWQsIG5vIHdhaXQgKi8KKwl1MzIgcG9ydF9yY3Zub3dhaXQ7CisJLyogV0FJVF9QSU8gYWxyZWFkeSBoYXBwZW5lZCwgbm8gd2FpdCAqLworCXUzMiBwb3J0X3Bpb25vd2FpdDsKKwkvKiB0b3RhbCBudW1iZXIgb2YgcmN2aGRycWZ1bGwgZXJyb3JzICovCisJdTMyIHBvcnRfaGRycWZ1bGw7CisJLyogcGlkIG9mIHByb2Nlc3MgdXNpbmcgdGhpcyBwb3J0ICovCisJcGlkX3QgcG9ydF9waWQ7CisJLyogc2FtZSBzaXplIGFzIHRhc2tfc3RydWN0IC5jb21tW10gKi8KKwljaGFyIHBvcnRfY29tbVsxNl07CisJLyogcGtleXMgc2V0IGJ5IHRoaXMgdXNlIG9mIHRoaXMgcG9ydCAqLworCXUxNiBwb3J0X3BrZXlzWzRdOworCS8qIHNvIGZpbGUgb3BzIGNhbiBnZXQgYXQgdW5pdCAqLworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpwb3J0X2RkOworfTsKKworc3RydWN0IHNrX2J1ZmY7CisKKy8qCisgKiBjb250cm9sIGluZm9ybWF0aW9uIGZvciBsYXllcmVkIGRyaXZlcnMKKyAqLworc3RydWN0IF9pcGF0aF9sYXllciB7CisJdm9pZCAqbF9hcmc7Cit9OworCisvKiBWZXJicyBsYXllciBpbnRlcmZhY2UgKi8KK3N0cnVjdCBfdmVyYnNfbGF5ZXIgeworCXZvaWQgKmxfYXJnOworCXN0cnVjdCB0aW1lcl9saXN0IGxfdGltZXI7Cit9OworCitzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCBpcGF0aF9saXN0OworCisJc3RydWN0IGlwYXRoX2tyZWdzIGNvbnN0ICppcGF0aF9rcmVnczsKKwlzdHJ1Y3QgaXBhdGhfY3JlZ3MgY29uc3QgKmlwYXRoX2NyZWdzOworCisJLyogbWVtLW1hcHBlZCBwb2ludGVyIHRvIGJhc2Ugb2YgY2hpcCByZWdzICovCisJdTY0IF9faW9tZW0gKmlwYXRoX2tyZWdiYXNlOworCS8qIGVuZCBvZiBtZW0tbWFwcGVkIGNoaXAgc3BhY2U7IHJhbmdlIGNoZWNraW5nICovCisJdTY0IF9faW9tZW0gKmlwYXRoX2tyZWdlbmQ7CisJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjaGlwIGZvciBpb19yZW1hcCwgZXRjLiAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfcGh5c2FkZHI7CisJLyogYmFzZSBvZiBtZW1vcnkgYWxsb2NlZCBmb3IgaXBhdGhfa3JlZ2Jhc2UsIGZvciBmcmVlICovCisJdTY0ICppcGF0aF9rcmVnYWxsb2M7CisJLyoKKwkgKiB2ZXJzaW9uIG9mIGtyZWdiYXNlIHRoYXQgZG9lc24ndCBoYXZlIGhpZ2ggYml0cyBzZXQgKGZvciAzMiBiaXQKKwkgKiBwcm9ncmFtcywgc28gbW1hcDY0IDQ0IGJpdCB3b3JrcykKKwkgKi8KKwl1NjQgX19pb21lbSAqaXBhdGhfa3JlZ3ZpcnQ7CisJLyoKKwkgKiB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUgcG9ydDAgcmN2aGRycXRhaWwgdXBkYXRlZCBmb3IgdGhpcyB1bml0LgorCSAqIG9ubHkgd3JpdHRlbiB0byBieSB0aGUgY2hpcCwgbm90IHRoZSBkcml2ZXIuCisJICovCisJdm9sYXRpbGUgX19sZTY0ICppcGF0aF9oZHJxdGFpbHB0cjsKKwlkbWFfYWRkcl90IGlwYXRoX2RtYV9hZGRyOworCS8qIGlwYXRoX2NmZ3BvcnRzIHBvaW50ZXJzICovCisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICoqaXBhdGhfcGQ7CisJLyogc2tfYnVmZnMgdXNlZCBieSBwb3J0IDAgZWFnZXIgcmVjZWl2ZSBxdWV1ZSAqLworCXN0cnVjdCBza19idWZmICoqaXBhdGhfcG9ydDBfc2ticzsKKwkvKiBrdmlydCBhZGRyZXNzIG9mIDFzdCAyayBwaW8gYnVmZmVyICovCisJdm9pZCBfX2lvbWVtICppcGF0aF9waW8ya2Jhc2U7CisJLyoga3ZpcnQgYWRkcmVzcyBvZiAxc3QgNGsgcGlvIGJ1ZmZlciAqLworCXZvaWQgX19pb21lbSAqaXBhdGhfcGlvNGtiYXNlOworCS8qCisJICogcG9pbnRzIHRvIGFyZWEgd2hlcmUgUElPYXZhaWwgcmVnaXN0ZXJzIHdpbGwgYmUgRE1BJ2VkLgorCSAqIEhhcyB0byBiZSBvbiBhIHBhZ2Ugb2YgaXQncyBvd24sIGJlY2F1c2UgdGhlIHBhZ2Ugd2lsbCBiZQorCSAqIG1hcHBlZCBpbnRvIHVzZXIgcHJvZ3JhbSBzcGFjZS4gIFRoaXMgY29weSBpcyAqT05MWSogZXZlcgorCSAqIHdyaXR0ZW4gYnkgRE1BLCBub3QgYnkgdGhlIGRyaXZlciEgIE5lZWQgYSBjb3B5IHBlciBkZXZpY2UKKwkgKiB3aGVuIHdlIGdldCB0byBtdWx0aXBsZSBkZXZpY2VzCisJICovCisJdm9sYXRpbGUgX19sZTY0ICppcGF0aF9waW9hdmFpbHJlZ3NfZG1hOworCS8qIHBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgdXBkYXRlcyBvY2N1ciAqLworCWRtYV9hZGRyX3QgaXBhdGhfcGlvYXZhaWxyZWdzX3BoeXM7CisJc3RydWN0IF9pcGF0aF9sYXllciBpcGF0aF9sYXllcjsKKwkvKiBzZXR1cCBpbnRyICovCisJaW50ICgqaXBhdGhfZl9pbnRyc2V0dXApKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCS8qIHNldHVwIG9uLWNoaXAgYnVzIGNvbmZpZyAqLworCWludCAoKmlwYXRoX2ZfYnVzKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBzdHJ1Y3QgcGNpX2RldiAqKTsKKwkvKiBoYXJkIHJlc2V0IGNoaXAgKi8KKwlpbnQgKCppcGF0aF9mX3Jlc2V0KShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKwlpbnQgKCppcGF0aF9mX2dldF9ib2FyZG5hbWUpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGNoYXIgKiwKKwkJCQkgICAgIHNpemVfdCk7CisJdm9pZCAoKmlwYXRoX2ZfaW5pdF9od2Vycm9ycykoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisJdm9pZCAoKmlwYXRoX2ZfaGFuZGxlX2h3ZXJyb3JzKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBjaGFyICosCisJCQkJCXNpemVfdCk7CisJdm9pZCAoKmlwYXRoX2ZfcXVpZXRfc2VyZGVzKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKwlpbnQgKCppcGF0aF9mX2JyaW5ndXBfc2VyZGVzKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKwlpbnQgKCppcGF0aF9mX2Vhcmx5X2luaXQpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCXZvaWQgKCppcGF0aF9mX2NsZWFyX3RpZHMpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHVuc2lnbmVkKTsKKwl2b2lkICgqaXBhdGhfZl9wdXRfdGlkKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1NjQgX19pb21lbSosCisJCQkJdTMyLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqaXBhdGhfZl90aWR0ZW1wbGF0ZSkoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisJdm9pZCAoKmlwYXRoX2ZfY2xlYW51cCkoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisJdm9pZCAoKmlwYXRoX2Zfc2V0ZXh0bGVkKShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1NjQsIHU2NCk7CisJLyogZmlsbCBvdXQgY2hpcC1zcGVjaWZpYyBmaWVsZHMgKi8KKwlpbnQgKCppcGF0aF9mX2dldF9iYXNlX2luZm8pKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqLCB2b2lkICopOworCXN0cnVjdCBfdmVyYnNfbGF5ZXIgdmVyYnNfbGF5ZXI7CisJLyogdG90YWwgZHdvcmRzIHNlbnQgKHN1bW1lZCBmcm9tIGNvdW50ZXIpICovCisJdTY0IGlwYXRoX3N3b3JkOworCS8qIHRvdGFsIGR3b3JkcyByY3ZkIChzdW1tZWQgZnJvbSBjb3VudGVyKSAqLworCXU2NCBpcGF0aF9yd29yZDsKKwkvKiB0b3RhbCBwYWNrZXRzIHNlbnQgKHN1bW1lZCBmcm9tIGNvdW50ZXIpICovCisJdTY0IGlwYXRoX3Nwa3RzOworCS8qIHRvdGFsIHBhY2tldHMgcmN2ZCAoc3VtbWVkIGZyb20gY291bnRlcikgKi8KKwl1NjQgaXBhdGhfcnBrdHM7CisJLyogaXBhdGhfc3RhdHVzcCBpbml0aWFsbHkgcG9pbnRzIHRvIHRoaXMuICovCisJdTY0IF9pcGF0aF9zdGF0dXM7CisJLyogR1VJRCBmb3IgdGhpcyBpbnRlcmZhY2UsIGluIG5ldHdvcmsgb3JkZXIgKi8KKwlfX2JlNjQgaXBhdGhfZ3VpZDsKKwkvKgorCSAqIGFnZ3JlZ3JhdGUgb2YgZXJyb3IgYml0cyByZXBvcnRlZCBzaW5jZSBsYXN0IGNsZWFyZWQsIGZvcgorCSAqIGxpbWl0aW5nIG9mIGVycm9yIHJlcG9ydGluZworCSAqLworCWlwYXRoX2Vycl90IGlwYXRoX2xhc3RlcnJvcjsKKwkvKgorCSAqIGFnZ3JlZ3JhdGUgb2YgZXJyb3IgYml0cyByZXBvcnRlZCBzaW5jZSBsYXN0IGNsZWFyZWQsIGZvcgorCSAqIGxpbWl0aW5nIG9mIGh3ZXJyb3IgcmVwb3J0aW5nCisJICovCisJaXBhdGhfZXJyX3QgaXBhdGhfbGFzdGh3ZXJyb3I7CisJLyoKKwkgKiBlcnJvcnMgbWFza2VkIGJlY2F1c2UgdGhleSBvY2N1ciB0b28gZmFzdCwgYWxzbyBpbmNsdWRlcyBlcnJvcnMKKwkgKiB0aGF0IGFyZSBhbHdheXMgaWdub3JlZCAoaXBhdGhfaWdub3JlZGVycnMpCisJICovCisJaXBhdGhfZXJyX3QgaXBhdGhfbWFza2VkZXJyczsKKwkvKiB0aW1lIGluIGppZmZpZXMgYXQgd2hpY2ggdG8gcmUtZW5hYmxlIG1hc2tlZGVycnMgKi8KKwl1bnNpZ25lZCBsb25nIGlwYXRoX3VubWFza3RpbWU7CisJLyoKKwkgKiBlcnJvcnMgYWx3YXlzIGlnbm9yZWQgKG1hc2tlZCksIGF0IGxlYXN0IGZvciBhIGdpdmVuCisJICogY2hpcC9kZXZpY2UsIGJlY2F1c2UgdGhleSBhcmUgd3Jvbmcgb3Igbm90IHVzZWZ1bAorCSAqLworCWlwYXRoX2Vycl90IGlwYXRoX2lnbm9yZWRlcnJzOworCS8qIGNvdW50IG9mIGVncmZ1bGwgZXJyb3JzLCBjb21iaW5lZCBmb3IgYWxsIHBvcnRzICovCisJdTY0IGlwYXRoX2xhc3RfdGlkZnVsbDsKKwkvKiBmb3IgaXBhdGhfcWNoZWNrKCkgKi8KKwl1NjQgaXBhdGhfbGFzdHBvcnQwcmN2X2NudDsKKwkvKiB0ZW1wbGF0ZSBmb3Igd3JpdGluZyBUSURzICAqLworCXU2NCBpcGF0aF90aWR0ZW1wbGF0ZTsKKwkvKiB2YWx1ZSB0byB3cml0ZSB0byBmcmVlIFRJRHMgKi8KKwl1NjQgaXBhdGhfdGlkaW52YWxpZDsKKwkvKiBQRS04MDAgcmN2IGludGVycnVwdCBzZXR1cCAqLworCXU2NCBpcGF0aF9yaGRyaGVhZF9pbnRyX29mZjsKKworCS8qIHNpemUgb2YgbWVtb3J5IGF0IGlwYXRoX2tyZWdiYXNlICovCisJdTMyIGlwYXRoX2tyZWdzaXplOworCS8qIG51bWJlciBvZiByZWdpc3RlcnMgdXNlZCBmb3IgcGlvYXZhaWwgKi8KKwl1MzIgaXBhdGhfcGlvYXZyZWdzOworCS8qIElQQVRIX1BPTEwsIGV0Yy4gKi8KKwl1MzIgaXBhdGhfZmxhZ3M7CisJLyogaXBhdGhfZmxhZ3Mgc21hIGlzIHdhaXRpbmcgZm9yICovCisJdTMyIGlwYXRoX3NtYV9zdGF0ZV93YW50ZWQ7CisJLyogbGFzdCBidWZmZXIgZm9yIHVzZXIgdXNlLCBmaXJzdCBidWYgZm9yIGtlcm5lbCB1c2UgaXMgdGhpcworCSAqIGluZGV4LiAqLworCXUzMiBpcGF0aF9sYXN0cG9ydF9waW9idWY7CisJLyogaXMgYSBzdGF0cyB0aW1lciBhY3RpdmUgKi8KKwl1MzIgaXBhdGhfc3RhdHNfdGltZXJfYWN0aXZlOworCS8qIGR3b3JkcyBzZW50IHJlYWQgZnJvbSBjb3VudGVyICovCisJdTMyIGlwYXRoX2xhc3Rzd29yZDsKKwkvKiBkd29yZHMgcmVjZWl2ZWQgcmVhZCBmcm9tIGNvdW50ZXIgKi8KKwl1MzIgaXBhdGhfbGFzdHJ3b3JkOworCS8qIHNlbnQgcGFja2V0cyByZWFkIGZyb20gY291bnRlciAqLworCXUzMiBpcGF0aF9sYXN0c3BrdHM7CisJLyogcmVjZWl2ZWQgcGFja2V0cyByZWFkIGZyb20gY291bnRlciAqLworCXUzMiBpcGF0aF9sYXN0cnBrdHM7CisJLyogcGlvIGJ1ZnMgYWxsb2NhdGVkIHBlciBwb3J0ICovCisJdTMyIGlwYXRoX3BidWZzcG9ydDsKKwkvKgorCSAqIG51bWJlciBvZiBwb3J0cyBjb25maWd1cmVkIGFzIG1heDsgemVybyBpcyBzZXQgdG8gbnVtYmVyIGNoaXAKKwkgKiBzdXBwb3J0cywgbGVzcyBnaXZlcyBtb3JlIHBpbyBidWZzL3BvcnQsIGV0Yy4KKwkgKi8KKwl1MzIgaXBhdGhfY2ZncG9ydHM7CisJLyogcG9ydDAgcmN2aGRycSBoZWFkIG9mZnNldCAqLworCXUzMiBpcGF0aF9wb3J0MGhlYWQ7CisJLyogY291bnQgb2YgcG9ydCAwIGhkcnFmdWxsIGVycm9ycyAqLworCXUzMiBpcGF0aF9wMF9oZHJxZnVsbDsKKworCS8qCisJICogKCpjZmdwb3J0cykgdXNlZCB0byBzdXBwcmVzcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2Ygc2FtZQorCSAqIHBvcnQgc3RheWluZyBzdHVjayBhdCBzYW1lIHBvaW50CisJICovCisJdTMyICppcGF0aF9sYXN0cmN2aGRycXRhaWxzOworCS8qCisJICogKCpjZmdwb3J0cykgdXNlZCB0byBzdXBwcmVzcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2Ygc2FtZQorCSAqIHBvcnQgc3RheWluZyBzdHVjayBhdCBzYW1lIHBvaW50CisJICovCisJdTMyICppcGF0aF9sYXN0ZWdyaGVhZHM7CisJLyoKKwkgKiBpbmRleCBvZiBsYXN0IHBpb2J1ZmZlciB3ZSB1c2VkLiAgU3BlZWRzIHVwIHNlYXJjaGluZywgYnkKKwkgKiBzdGFydGluZyBhdCB0aGlzIHBvaW50LiAgRG9lc24ndCBtYXR0ZXIgaWYgbXVsdGlwbGUgY3B1J3MgdXNlIGFuZAorCSAqIHVwZGF0ZSwgbGFzdCB1cGRhdGVyIGlzIG9ubHkgd3JpdGUgdGhhdCBtYXR0ZXJzLiAgV2hlbmV2ZXIgaXQKKwkgKiB3cmFwcywgd2UgdXBkYXRlIHNoYWRvdyBjb3BpZXMuICBOZWVkIGEgY29weSBwZXIgZGV2aWNlIHdoZW4gd2UKKwkgKiBnZXQgdG8gbXVsdGlwbGUgZGV2aWNlcworCSAqLworCXUzMiBpcGF0aF9sYXN0cGlvaW5kZXg7CisJLyogbWF4IGxlbmd0aCBvZiBmcmVlemVtc2cgKi8KKwl1MzIgaXBhdGhfZnJlZXplbGVuOworCS8qCisJICogY29uc2VjdXRpdmUgdGltZXMgd2Ugd2FudGVkIGEgUElPIGJ1ZmZlciBidXQgd2VyZSB1bmFibGUgdG8KKwkgKiBnZXQgb25lCisJICovCisJdTMyIGlwYXRoX2NvbnNlY19ub3Bpb2J1ZjsKKwkvKgorCSAqIGhpbnQgdGhhdCB3ZSBzaG91bGQgdXBkYXRlIGlwYXRoX3Bpb2F2YWlsc2hhZG93IGJlZm9yZQorCSAqIGxvb2tpbmcgZm9yIGEgUElPIGJ1ZmZlcgorCSAqLworCXUzMiBpcGF0aF91cGRfcGlvX3NoYWRvdzsKKwkvKiBzbyB3ZSBjYW4gcmV3cml0ZSBpdCBhZnRlciBhIGNoaXAgcmVzZXQgKi8KKwl1MzIgaXBhdGhfcGNpYmFyMDsKKwkvKiBzbyB3ZSBjYW4gcmV3cml0ZSBpdCBhZnRlciBhIGNoaXAgcmVzZXQgKi8KKwl1MzIgaXBhdGhfcGNpYmFyMTsKKwkvKiBzZXF1ZW50aWFsIHRyaWVzIGZvciBTTUEgc2VuZCBhbmQgbm8gYnVmcyAqLworCXUzMiBpcGF0aF9ub3NtYV9idWZzOworCS8qIGR1cmF0aW9uIChzZWNvbmRzKSBpcGF0aF9ub3NtYV9idWZzIHNldCAqLworCXUzMiBpcGF0aF9ub3NtYV9zZWNzOworCisJLyogSFQvUENJIFZlbmRvciBJRCAoaGVyZSBmb3IgTm9kZUluZm8pICovCisJdTE2IGlwYXRoX3ZlbmRvcmlkOworCS8qIEhUL1BDSSBEZXZpY2UgSUQgKGhlcmUgZm9yIE5vZGVJbmZvKSAqLworCXUxNiBpcGF0aF9kZXZpY2VpZDsKKwkvKiBvZmZzZXQgaW4gSFQgY29uZmlnIHNwYWNlIG9mIHNsYXZlL3ByaW1hcnkgaW50ZXJmYWNlIGJsb2NrICovCisJdTggaXBhdGhfaHRfc2xhdmVfb2ZmOworCS8qIGZvciB3cml0ZSBjb21iaW5pbmcgc2V0dGluZ3MgKi8KKwl1bnNpZ25lZCBsb25nIGlwYXRoX3djX2Nvb2tpZTsKKwkvKiByZWYgY291bnQgZm9yIGVhY2ggcGtleSAqLworCWF0b21pY190IGlwYXRoX3BrZXlyZWZzWzRdOworCS8qIHNoYWRvdyBjb3B5IG9mIGFsbCBleHB0aWRzIHBoeXNhZGRyOyB1c2VkIG9ubHkgYnkgZnVuY3NpbSAqLworCXU2NCAqaXBhdGhfdGlkc2ltc2hhZG93OworCS8qIHNoYWRvdyBjb3B5IG9mIHN0cnVjdCBwYWdlIConcyBmb3IgZXhwIHRpZCBwYWdlcyAqLworCXN0cnVjdCBwYWdlICoqaXBhdGhfcGFnZXNoYWRvdzsKKwkvKiBsb2NrIHRvIHdvcmthcm91bmQgY2hpcCBidWcgOTQzNyAqLworCXNwaW5sb2NrX3QgaXBhdGhfdGlkX2xvY2s7CisKKwkvKgorCSAqIElQQVRIX1NUQVRVU18qLAorCSAqIHRoaXMgYWRkcmVzcyBpcyBtYXBwZWQgcmVhZG9ubHkgaW50byB1c2VyIHByb2Nlc3NlcyBzbyB0aGV5IGNhbgorCSAqIGdldCBzdGF0dXMgY2hlYXBseSwgd2hlbmV2ZXIgdGhleSB3YW50LgorCSAqLworCXU2NCAqaXBhdGhfc3RhdHVzcDsKKwkvKiBmcmVlemUgbXNnIGlmIGh3IGVycm9yIHB1dCBjaGlwIGluIGZyZWV6ZSAqLworCWNoYXIgKmlwYXRoX2ZyZWV6ZW1zZzsKKwkvKiBwY2kgYWNjZXNzIGRhdGEgc3RydWN0dXJlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY2RldiAqY2RldjsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJLyogdGltZXIgdXNlZCB0byBwcmV2ZW50IHN0YXRzIG92ZXJmbG93LCBlcnJvciB0aHJvdHRsaW5nLCBldGMuICovCisJc3RydWN0IHRpbWVyX2xpc3QgaXBhdGhfc3RhdHNfdGltZXI7CisJLyogY2hlY2sgZm9yIHN0YWxlIG1lc3NhZ2VzIGluIHJjdiBxdWV1ZSAqLworCS8qIG9ubHkgYWxsb3cgb25lIGludHIgYXQgYSB0aW1lLiAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfcmN2X3BlbmRpbmc7CisKKwkvKgorCSAqIFNoYWRvdyBjb3BpZXMgb2YgcmVnaXN0ZXJzOyBzaXplIGluZGljYXRlcyByZWFkIGFjY2VzcyBzaXplLgorCSAqIE1vc3Qgb2YgdGhlbSBhcmUgcmVhZG9ubHksIGJ1dCBzb21lIGFyZSB3cml0ZS1vbmx5IHJlZ2lzdGVyLAorCSAqIHdoZXJlIHdlIG1hbmlwdWxhdGUgdGhlIGJpdHMgaW4gdGhlIHNoYWRvdyBjb3B5LCBhbmQgdGhlbiB3cml0ZQorCSAqIHRoZSBzaGFkb3cgY29weSB0byBpbmZpbmlwYXRoLgorCSAqCisJICogV2UgZGVsaWJlcmF0ZWx5IG1ha2UgbW9zdCBvZiB0aGVzZSAzMiBiaXRzLCBzaW5jZSB0aGV5IGhhdmUKKwkgKiByZXN0cmljdGVkIHJhbmdlLiAgRm9yIGFueSB0aGF0IHdlIHJlYWQsIHdlIHdvbid0IHRvIGdlbmVyYXRlIDMyCisJICogYml0IGFjY2Vzc2VzLCBzaW5jZSBPcHRlcm9uIHdpbGwgZ2VuZXJhdGUgMiBzZXBhcmF0ZSAzMiBiaXQgSFQKKwkgKiB0cmFuc2FjdGlvbnMgZm9yIGEgNjQgYml0IHJlYWQsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5CisJICogSFQgdHJhbnNhY3Rpb25zLgorCSAqLworCisJLyogVGhpcyBpcyB0aGUgNjQgYml0IGdyb3VwICovCisKKwkvKgorCSAqIHNoYWRvdyBvZiBwaW9hdmFpbCwgY2hlY2sgdG8gYmUgc3VyZSBpdCdzIGxhcmdlIGVub3VnaCBhdAorCSAqIGluaXQgdGltZS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGlwYXRoX3Bpb2F2YWlsc2hhZG93WzhdOworCS8qIHNoYWRvdyBvZiBrcl9ncGlvX291dCwgZm9yIHJtdyBvcHMgKi8KKwl1NjQgaXBhdGhfZ3Bpb19vdXQ7CisJLyoga3JfcmV2aXNpb24gc2hhZG93ICovCisJdTY0IGlwYXRoX3JldmlzaW9uOworCS8qCisJICogc2hhZG93IG9mIGliY2N0cmwsIGZvciBpbnRlcnJ1cHQgaGFuZGxpbmcgb2YgbGluayBjaGFuZ2VzLAorCSAqIGV0Yy4KKwkgKi8KKwl1NjQgaXBhdGhfaWJjY3RybDsKKwkvKgorCSAqIGxhc3QgaWJjc3RhdHVzLCB0byBzdXBwcmVzcyAiZHVwbGljYXRlIiBzdGF0dXMgY2hhbmdlIG1lc3NhZ2VzLAorCSAqIG1vc3RseSBmcm9tIDIgdG8gMworCSAqLworCXU2NCBpcGF0aF9sYXN0aWJjc3RhdDsKKwkvKiBod2Vycm1hc2sgc2hhZG93ICovCisJaXBhdGhfZXJyX3QgaXBhdGhfaHdlcnJtYXNrOworCS8qIGludGVycnVwdCBjb25maWcgcmVnIHNoYWRvdyAqLworCXU2NCBpcGF0aF9pbnRjb25maWc7CisJLyoga3Jfc2VuZHBpb2J1ZmJhc2UgdmFsdWUgKi8KKwl1NjQgaXBhdGhfcGlvYnVmYmFzZTsKKworCS8qIHRoZXNlIGFyZSB0aGUgIjMyIGJpdCIgcmVncyAqLworCisJLyoKKwkgKiBudW1iZXIgb2YgR1VJRHMgaW4gdGhlIGZsYXNoIGZvciB0aGlzIGludGVyZmFjZTsgbWF5IG5lZWQgc29tZQorCSAqIHJldGhpbmtpbmcgZm9yIHNldHRpbmcgb24gb3RoZXIgaWZhY2VzCisJICovCisJdTMyIGlwYXRoX25ndWlkOworCS8qCisJICogdGhlIGZvbGxvd2luZyB0d28gYXJlIDMyLWJpdCBiaXRtYXNrcywgYnV0IHt0ZXN0LGNsZWFyLHNldH1fYml0CisJICogYWxsIGV4cGVjdCBiaXQgZmllbGRzIHRvIGJlICJ1bnNpZ25lZCBsb25nIgorCSAqLworCS8qIHNoYWRvdyBrcl9yY3ZjdHJsICovCisJdW5zaWduZWQgbG9uZyBpcGF0aF9yY3ZjdHJsOworCS8qIHNoYWRvdyBrcl9zZW5kY3RybCAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfc2VuZGN0cmw7CisKKwkvKiB2YWx1ZSB3ZSBwdXQgaW4ga3JfcmN2aGRyY250ICovCisJdTMyIGlwYXRoX3JjdmhkcmNudDsKKwkvKiB2YWx1ZSB3ZSBwdXQgaW4ga3JfcmN2aGRyc2l6ZSAqLworCXUzMiBpcGF0aF9yY3ZoZHJzaXplOworCS8qIHZhbHVlIHdlIHB1dCBpbiBrcl9yY3ZoZHJlbnRzaXplICovCisJdTMyIGlwYXRoX3JjdmhkcmVudHNpemU7CisJLyogb2Zmc2V0IG9mIGxhc3QgZW50cnkgaW4gcmN2aGRycSAqLworCXUzMiBpcGF0aF9oZHJxbGFzdDsKKwkvKiBrcl9wb3J0Y250IHZhbHVlICovCisJdTMyIGlwYXRoX3BvcnRjbnQ7CisJLyoga3JfcGFnZWFsaWduIHZhbHVlICovCisJdTMyIGlwYXRoX3BhbGlnbjsKKwkvKiBudW1iZXIgb2YgIjJLQiIgUElPIGJ1ZmZlcnMgKi8KKwl1MzIgaXBhdGhfcGlvYmNudDJrOworCS8qIHNpemUgaW4gYnl0ZXMgb2YgIjJLQiIgUElPIGJ1ZmZlcnMgKi8KKwl1MzIgaXBhdGhfcGlvc2l6ZTJrOworCS8qIG51bWJlciBvZiAiNEtCIiBQSU8gYnVmZmVycyAqLworCXUzMiBpcGF0aF9waW9iY250NGs7CisJLyogc2l6ZSBpbiBieXRlcyBvZiAiNEtCIiBQSU8gYnVmZmVycyAqLworCXUzMiBpcGF0aF9waW9zaXplNGs7CisJLyoga3JfcmN2ZWdyYmFzZSB2YWx1ZSAqLworCXUzMiBpcGF0aF9yY3ZlZ3JiYXNlOworCS8qIGtyX3JjdmVncmNudCB2YWx1ZSAqLworCXUzMiBpcGF0aF9yY3ZlZ3JjbnQ7CisJLyoga3JfcmN2dGlkYmFzZSB2YWx1ZSAqLworCXUzMiBpcGF0aF9yY3Z0aWRiYXNlOworCS8qIGtyX3JjdnRpZGNudCB2YWx1ZSAqLworCXUzMiBpcGF0aF9yY3Z0aWRjbnQ7CisJLyoga3Jfc2VuZHJlZ2Jhc2UgKi8KKwl1MzIgaXBhdGhfc3JlZ2Jhc2U7CisJLyoga3JfdXNlcnJlZ2Jhc2UgKi8KKwl1MzIgaXBhdGhfdXJlZ2Jhc2U7CisJLyoga3JfY291bnRlcnJlZ2Jhc2UgKi8KKwl1MzIgaXBhdGhfY3JlZ2Jhc2U7CisJLyogc2hhZG93IHRoZSBjb250cm9sIHJlZ2lzdGVyIGNvbnRlbnRzICovCisJdTMyIGlwYXRoX2NvbnRyb2w7CisJLyogc2hhZG93IHRoZSBncGlvIG91dHB1dCBjb250ZW50cyAqLworCXUzMiBpcGF0aF9leHRjdHJsOworCS8qIFBDSSByZXZpc2lvbiByZWdpc3RlciAoSFRDIHJldiBvbiBGUEdBKSAqLworCXUzMiBpcGF0aF9wY2lyZXY7CisKKwkvKiBjaGlwIGFkZHJlc3Mgc3BhY2UgdXNlZCBieSA0ayBwaW8gYnVmZmVycyAqLworCXUzMiBpcGF0aF80a2FsaWduOworCS8qIFRoZSBNVFUgcHJvZ3JhbW1lZCBmb3IgdGhpcyB1bml0ICovCisJdTMyIGlwYXRoX2libXR1OworCS8qCisJICogVGhlIG1heCBzaXplIElCIHBhY2tldCwgaW5jbHVkZWQgSUIgaGVhZGVycyB0aGF0IHdlIGNhbiBzZW5kLgorCSAqIFN0YXJ0cyBzYW1lIGFzIGlwYXRoX3Bpb3NpemUsIGJ1dCBpcyBhZmZlY3RlZCB3aGVuIGlibXR1IGlzCisJICogY2hhbmdlZCwgb3IgYnkgc2l6ZSBvZiBlYWdlciBidWZmZXJzCisJICovCisJdTMyIGlwYXRoX2libWF4bGVuOworCS8qCisJICogaWJtYXhsZW4gYXQgaW5pdCB0aW1lLCBsaW1pdGVkIGJ5IGNoaXAgYW5kIGJ5IHJlY2VpdmUgYnVmZmVyCisJICogc2l6ZS4gIE5vdCBjaGFuZ2VkIGFmdGVyIGluaXQuCisJICovCisJdTMyIGlwYXRoX2luaXRfaWJtYXhsZW47CisJLyogc2l6ZSBvZiBlYWNoIHJjdmVncmJ1ZmZlciAqLworCXUzMiBpcGF0aF9yY3ZlZ3JidWZzaXplOworCS8qIHdpZHRoICgyLDQsOCwxNiwzMikgZnJvbSBIVCBjb25maWcgcmVnICovCisJdTMyIGlwYXRoX2h0d2lkdGg7CisJLyogSFQgc3BlZWQgKDIwMCw0MDAsODAwLDEwMDApIGZyb20gSFQgY29uZmlnICovCisJdTMyIGlwYXRoX2h0c3BlZWQ7CisJLyogcG9ydHMgd2FpdGluZyBmb3IgUElPYXZhaWwgaW50ciAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfcG9ydHBpb3dhaXQ7CisJLyoKKwkgKiBudW1iZXIgb2Ygc2VxdWVudGlhbCBpYmNzdGF0dXMgY2hhbmdlIGZvciBwb2xsaW5nIGFjdGl2ZS9xdWlldAorCSAqIChpLmUuLCBsaW5rIG5vdCBjb21pbmcgdXApLgorCSAqLworCXUzMiBpcGF0aF9pYnBvbGxjbnQ7CisJLyogbG93IGFuZCBoaWdoIHBvcnRpb25zIG9mIE1TSSBjYXBhYmlsaXR5L3ZlY3RvciAqLworCXUzMiBpcGF0aF9tc2lfbG87CisJLyogc2F2ZWQgYWZ0ZXIgUENJZSBpbml0IGZvciByZXN0b3JlIGFmdGVyIHJlc2V0ICovCisJdTMyIGlwYXRoX21zaV9oaTsKKwkvKiBNU0kgZGF0YSAodmVjdG9yKSBzYXZlZCBmb3IgcmVzdG9yZSAqLworCXUxNiBpcGF0aF9tc2lfZGF0YTsKKwkvKiBNTElEIHByb2dyYW1tZWQgZm9yIHRoaXMgaW5zdGFuY2UgKi8KKwl1MTYgaXBhdGhfbWxpZDsKKwkvKiBMSUQgcHJvZ3JhbW1lZCBmb3IgdGhpcyBpbnN0YW5jZSAqLworCXUxNiBpcGF0aF9saWQ7CisJLyogbGlzdCBvZiBwa2V5cyBwcm9ncmFtbWVkOyAwIGlmIG5vdCBzZXQgKi8KKwl1MTYgaXBhdGhfcGtleXNbNF07CisJLyogQVNDSUkgc2VyaWFsIG51bWJlciwgZnJvbSBmbGFzaCAqLworCXU4IGlwYXRoX3NlcmlhbFsxMl07CisJLyogaHVtYW4gcmVhZGFibGUgYm9hcmQgdmVyc2lvbiAqLworCXU4IGlwYXRoX2JvYXJkdmVyc2lvbls4MF07CisJLyogY2hpcCBtYWpvciByZXYsIGZyb20gaXBhdGhfcmV2aXNpb24gKi8KKwl1OCBpcGF0aF9tYWpyZXY7CisJLyogY2hpcCBtaW5vciByZXYsIGZyb20gaXBhdGhfcmV2aXNpb24gKi8KKwl1OCBpcGF0aF9taW5yZXY7CisJLyogYm9hcmQgcmV2LCBmcm9tIGlwYXRoX3JldmlzaW9uICovCisJdTggaXBhdGhfYm9hcmRyZXY7CisJLyogdW5pdCAjIG9mIHRoaXMgY2hpcCwgaWYgcHJlc2VudCAqLworCWludCBpcGF0aF91bml0OworCS8qIHNhdmVkIGZvciByZXN0b3JlIGFmdGVyIHJlc2V0ICovCisJdTggaXBhdGhfcGNpX2NhY2hlbGluZTsKKwkvKiBMSUQgbWFzayBjb250cm9sICovCisJdTggaXBhdGhfbG1jOworfTsKKworZXh0ZXJuIHZvbGF0aWxlIF9fbGU2NCAqaXBhdGhfcG9ydDBfcmN2aGRydGFpbDsKK2V4dGVybiBkbWFfYWRkcl90IGlwYXRoX3BvcnQwX3JjdmhkcnRhaWxfZG1hOworCisjZGVmaW5lIElQQVRIX1BPUlQwX1JDVkhEUlRBSUxfU0laRSBQQUdFX1NJWkUKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaXBhdGhfZGV2X2xpc3Q7CitleHRlcm4gc3BpbmxvY2tfdCBpcGF0aF9kZXZzX2xvY2s7CitleHRlcm4gc3RydWN0IGlwYXRoX2RldmRhdGEgKmlwYXRoX2xvb2t1cChpbnQgdW5pdCk7CisKK2V4dGVybiB1MTYgaXBhdGhfbGF5ZXJfcmN2X29wY29kZTsKK2V4dGVybiBpbnQgX19pcGF0aF9sYXllcl9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMik7CitleHRlcm4gaW50IGlwYXRoX2xheWVyX2ludHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyKTsKK2V4dGVybiBpbnQgX19pcGF0aF9sYXllcl9yY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdm9pZCAqLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiBpbnQgX19pcGF0aF9sYXllcl9yY3ZfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHZvaWQgKik7CitleHRlcm4gaW50IF9faXBhdGhfdmVyYnNfcGlvYnVmYXZhaWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CitleHRlcm4gaW50IF9faXBhdGhfdmVyYnNfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHZvaWQgKiwgdm9pZCAqLCB1MzIpOworCit2b2lkIGlwYXRoX2xheWVyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfbGF5ZXJfZGVsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCitpbnQgaXBhdGhfaW5pdF9jaGlwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGludCk7CitpbnQgaXBhdGhfZW5hYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7Cit2b2lkIGlwYXRoX2Rpc2FibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK2ludCBpcGF0aF9jb3VudF91bml0cyhpbnQgKm5wcmVzZW50cCwgaW50ICpudXBwLCB1MzIgKm1heHBvcnRzcCk7Cit2b2lkIGlwYXRoX3NodXRkb3duX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKworc3RydWN0IGZpbGVfb3BlcmF0aW9uczsKK2ludCBpcGF0aF9jZGV2X2luaXQoaW50IG1pbm9yLCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQkgICAgc3RydWN0IGNkZXYgKipjZGV2cCwgc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApOwordm9pZCBpcGF0aF9jZGV2X2NsZWFudXAoc3RydWN0IGNkZXYgKipjZGV2cCwKKwkJCXN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKTsKKworaW50IGlwYXRoX2RpYWdfaW5pdCh2b2lkKTsKK3ZvaWQgaXBhdGhfZGlhZ19jbGVhbnVwKHZvaWQpOwordm9pZCBpcGF0aF9kaWFnX2JyaW5ndXBfbGluayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKKworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGlwYXRoX3NtYV9zdGF0ZV93YWl0OworCitpbnQgaXBhdGhfdXNlcl9hZGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3ZvaWQgaXBhdGhfdXNlcl9kZWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKKworc3RydWN0IHNrX2J1ZmYgKmlwYXRoX2FsbG9jX3NrYihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGdmcF90KTsKKworZXh0ZXJuIGludCBpcGF0aF9kaWFnX2ludXNlOworCitpcnFyZXR1cm5fdCBpcGF0aF9pbnRyKGludCBpcnEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIGlwYXRoX2RlY29kZV9lcnIoY2hhciAqYnVmLCBzaXplX3QgYmxlbiwgaXBhdGhfZXJyX3QgZXJyKTsKKyNpZiBfX0lQQVRIX0lORk8gfHwgX19JUEFUSF9EQkcKK2V4dGVybiBjb25zdCBjaGFyICppcGF0aF9pYmNzdGF0dXNfc3RyW107CisjZW5kaWYKKworLyogY2xlYW4gdXAgYW55IHBlci1jaGlwIGNoaXAtc3BlY2lmaWMgc3R1ZmYgKi8KK3ZvaWQgaXBhdGhfY2hpcF9jbGVhbnVwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworLyogY2xlYW4gdXAgYW55IGNoaXAgdHlwZS1zcGVjaWZpYyBzdHVmZiAqLwordm9pZCBpcGF0aF9jaGlwX2RvbmUodm9pZCk7CisKKy8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIHRvIGZvcmNlIG9yZGVyaW5nIGZvciB3cml0ZSBjb21iaW5pbmcgKi8KK2ludCBpcGF0aF91bm9yZGVyZWRfd2Modm9pZCk7CisKK3ZvaWQgaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdW5zaWduZWQgZmlyc3QsCisJCQkgIHVuc2lnbmVkIGNudCk7CisKK2ludCBpcGF0aF9jcmVhdGVfcmN2aGRycShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKik7Cit2b2lkIGlwYXRoX2ZyZWVfcGRkYXRhKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgaW50KTsKKworaW50IGlwYXRoX3BhcnNlX3VzaG9ydChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIHNob3J0ICp2YWxwKTsKKworaW50IGlwYXRoX3dhaXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgaW50KTsKK3ZvaWQgaXBhdGhfc2V0X2liX2xzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBpbnQpOwordm9pZCBpcGF0aF9rcmVjZWl2ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2ludCBpcGF0aF9zZXRyY3ZoZHJzaXplKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHVuc2lnbmVkKTsKK2ludCBpcGF0aF9yZXNldF9kZXZpY2UoaW50KTsKK3ZvaWQgaXBhdGhfZ2V0X2Zhc3RzdGF0cyh1bnNpZ25lZCBsb25nKTsKKworLyogZm9yIHVzZSBpbiBzeXN0ZW0gY2FsbHMsIHdoZXJlIHdlIHdhbnQgdG8ga25vdyBkZXZpY2UgdHlwZSwgZXRjLiAqLworI2RlZmluZSBwb3J0X2ZwKGZwKSAoKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqKSAoZnApLT5wcml2YXRlX2RhdGEpCisKKy8qCisgKiB2YWx1ZXMgZm9yIGlwYXRoX2ZsYWdzCisgKi8KKy8qIFRoZSBjaGlwIGlzIHVwIGFuZCBpbml0dGVkICovCisjZGVmaW5lIElQQVRIX0lOSVRURUQgICAgICAgMHgyCisJCS8qIHNldCBpZiBhbnkgdXNlciBjb2RlIGhhcyBzZXQga3JfcmN2aGRyc2l6ZSAqLworI2RlZmluZSBJUEFUSF9SQ1ZIRFJTWl9TRVQgIDB4NAorCQkvKiBUaGUgY2hpcCBpcyBwcmVzZW50IGFuZCB2YWxpZCBmb3IgYWNjZXNzZXMgKi8KKyNkZWZpbmUgSVBBVEhfUFJFU0VOVCAgICAgICAweDgKKwkJLyogSFQgbGluazAgaXMgb25seSA4IGJpdHMgd2lkZSwgaWdub3JlIHVwcGVyIGJ5dGUgY3JjCisJCSAqIGVycm9ycywgZXRjLiAqLworI2RlZmluZSBJUEFUSF84QklUX0lOX0hUMCAgIDB4MTAKKwkJLyogSFQgbGluazEgaXMgb25seSA4IGJpdHMgd2lkZSwgaWdub3JlIHVwcGVyIGJ5dGUgY3JjCisJCSAqIGVycm9ycywgZXRjLiAqLworI2RlZmluZSBJUEFUSF84QklUX0lOX0hUMSAgIDB4MjAKKwkJLyogVGhlIGxpbmsgaXMgZG93biAqLworI2RlZmluZSBJUEFUSF9MSU5LRE9XTiAgICAgIDB4NDAKKwkJLyogVGhlIGxpbmsgbGV2ZWwgaXMgdXAgKDB4MTEpICovCisjZGVmaW5lIElQQVRIX0xJTktJTklUICAgICAgMHg4MAorCQkvKiBUaGUgbGluayBpcyBpbiB0aGUgYXJtZWQgKDB4MjEpIHN0YXRlICovCisjZGVmaW5lIElQQVRIX0xJTktBUk1FRCAgICAgMHgxMDAKKwkJLyogVGhlIGxpbmsgaXMgaW4gdGhlIGFjdGl2ZSAoMHgzMSkgc3RhdGUgKi8KKyNkZWZpbmUgSVBBVEhfTElOS0FDVElWRSAgICAweDIwMAorCQkvKiBsaW5rIGN1cnJlbnQgc3RhdGUgaXMgdW5rbm93biAqLworI2RlZmluZSBJUEFUSF9MSU5LVU5LICAgICAgIDB4NDAwCisJCS8qIG5vIElCIGNhYmxlLCBvciBubyBkZXZpY2Ugb24gSUIgY2FibGUgKi8KKyNkZWZpbmUgSVBBVEhfTk9DQUJMRSAgICAgICAweDQwMDAKKwkJLyogU3VwcG9ydHMgcG9ydCB6ZXJvIHBlciBwYWNrZXQgcmVjZWl2ZSBpbnRlcnJ1cHRzIHZpYQorCQkgKiBHUElPICovCisjZGVmaW5lIElQQVRIX0dQSU9fSU5UUiAgICAgMHg4MDAwCisJCS8qIHVzZXMgdGhlIGNvZGVkIDRieXRlIFRJRCwgbm90IDggYnl0ZSAqLworI2RlZmluZSBJUEFUSF80QllURV9USUQgICAgIDB4MTAwMDAKKwkJLyogcGFja2V0L3dvcmQgY291bnRlcnMgYXJlIDMyIGJpdCwgZWxzZSB0aG9zZSA0IGNvdW50ZXJzCisJCSAqIGFyZSA2NGJpdCAqLworI2RlZmluZSBJUEFUSF8zMkJJVENPVU5URVJTIDB4MjAwMDAKKwkJLyogY2FuIG1pc3MgcG9ydDAgcnggaW50ZXJydXB0cyAqLworI2RlZmluZSBJUEFUSF9QT0xMX1JYX0lOVFIgIDB4NDAwMDAKKyNkZWZpbmUgSVBBVEhfRElTQUJMRUQgICAgICAweDgwMDAwIC8qIGFkbWluaXN0cmF0aXZlbHkgZGlzYWJsZWQgKi8KKworLyogcG9ydGRhdGEgZmxhZyBiaXQgb2Zmc2V0cyAqLworCQkvKiB3YWl0aW5nIGZvciBhIHBhY2tldCB0byBhcnJpdmUgKi8KKyNkZWZpbmUgSVBBVEhfUE9SVF9XQUlUSU5HX1JDViAgIDIKKwkJLyogd2FpdGluZyBmb3IgYSBQSU8gYnVmZmVyIHRvIGJlIGF2YWlsYWJsZSAqLworI2RlZmluZSBJUEFUSF9QT1JUX1dBSVRJTkdfUElPICAgMworCisvKiBmcmVlIHVwIGFueSBhbGxvY2F0ZWQgZGF0YSBhdCBjbG9zZXMgKi8KK3ZvaWQgaXBhdGhfZnJlZV9kYXRhKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqZGQpOworaW50IGlwYXRoX3dhaXRmb3JfbWRpb19jbWRyZWFkeShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2ludCBpcGF0aF93YWl0Zm9yX2NvbXBsZXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGlwYXRoX2tyZWcsIHU2NCwgdTY0ICopOwordTMyIF9faW9tZW0gKmlwYXRoX2dldHBpb2J1ZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MzIgKik7CisvKiBpbml0IFBFLTgwMC1zcGVjaWZpYyBmdW5jICovCit2b2lkIGlwYXRoX2luaXRfcGU4MDBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisvKiBpbml0IEhULTQwMC1zcGVjaWZpYyBmdW5jICovCit2b2lkIGlwYXRoX2luaXRfaHQ0MDBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Cit2b2lkIGlwYXRoX2dldF9lZXByb21faW5mbyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3U2NCBpcGF0aF9zbmFwX2NudHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaXBhdGhfY3JlZyk7CisKKy8qCisgKiBudW1iZXIgb2Ygd29yZHMgdXNlZCBmb3IgcHJvdG9jb2wgaGVhZGVyIGlmIG5vdCBzZXQgYnkgaXBhdGhfdXNlcmluaXQoKTsKKyAqLworI2RlZmluZSBJUEFUSF9ERkxUX1JDVkhEUlNJWkUgOQorCisjZGVmaW5lIElQQVRIX01ESU9fQ01EX1dSSVRFICAgMQorI2RlZmluZSBJUEFUSF9NRElPX0NNRF9SRUFEICAgIDIKKyNkZWZpbmUgSVBBVEhfTURJT19DTERfRElWICAgICAyNQkvKiB0byBnZXQgMi41IE1oeiBtZGlvIGNsb2NrICovCisjZGVmaW5lIElQQVRIX01ESU9fQ01EVkFMSUQgICAgMHg0MDAwMDAwMAkvKiBiaXQgMzAgKi8KKyNkZWZpbmUgSVBBVEhfTURJT19EQVRBVkFMSUQgICAweDgwMDAwMDAwCS8qIGJpdCAzMSAqLworI2RlZmluZSBJUEFUSF9NRElPX0NUUkxfU1REICAgIDB4MAorCitzdGF0aWMgaW5saW5lIHU2NCBpcGF0aF9tZGlvX3JlcShpbnQgY21kLCBpbnQgZGV2LCBpbnQgcmVnLCBpbnQgZGF0YSkKK3sKKwlyZXR1cm4gKCgodTY0KSBJUEFUSF9NRElPX0NMRF9ESVYpIDw8IDMyKSB8CisJCShjbWQgPDwgMjYpIHwKKwkJKGRldiA8PCAyMSkgfAorCQkocmVnIDw8IDE2KSB8CisJCShkYXRhICYgMHhGRkZGKTsKK30KKworCQkvKiBzaWduYWwgYW5kIGZpZm8gc3RhdHVzLCBpbiBiYW5rIDMxICovCisjZGVmaW5lIElQQVRIX01ESU9fQ1RSTF9YR1hTX1JFR184ICAweDgKKwkJLyogY29udHJvbHMgbG9vcGJhY2ssIHJlZHVuZGFuY3kgKi8KKyNkZWZpbmUgSVBBVEhfTURJT19DVFJMXzgzNTVfUkVHXzEgIDB4MTAKKwkJLyogcHJlbXBoLCBlbmNkZWMsIGV0Yy4gKi8KKyNkZWZpbmUgSVBBVEhfTURJT19DVFJMXzgzNTVfUkVHXzIgIDB4MTEKKwkJLyogS2NoYXJzLCBldGMuICovCisjZGVmaW5lIElQQVRIX01ESU9fQ1RSTF84MzU1X1JFR182ICAweDE1CisjZGVmaW5lIElQQVRIX01ESU9fQ1RSTF84MzU1X1JFR185ICAweDE4CisjZGVmaW5lIElQQVRIX01ESU9fQ1RSTF84MzU1X1JFR18xMCAweDFECisKK2ludCBpcGF0aF9nZXRfdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nLCBzaXplX3QsIHN0cnVjdCBwYWdlICoqKTsKK2ludCBpcGF0aF9nZXRfdXNlcl9wYWdlc19ub2NvcHkodW5zaWduZWQgbG9uZywgc3RydWN0IHBhZ2UgKiopOwordm9pZCBpcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMoc3RydWN0IHBhZ2UgKiosIHNpemVfdCk7Cit2b2lkIGlwYXRoX3JlbGVhc2VfdXNlcl9wYWdlc19vbl9jbG9zZShzdHJ1Y3QgcGFnZSAqKiwgc2l6ZV90KTsKK2ludCBpcGF0aF9lZXByb21fcmVhZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1OCwgdm9pZCAqLCBpbnQpOworaW50IGlwYXRoX2VlcHJvbV93cml0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1OCwgY29uc3Qgdm9pZCAqLCBpbnQpOworCisvKiB0aGVzZSBhcmUgdXNlZCBmb3IgdGhlIHJlZ2lzdGVycyB0aGF0IHZhcnkgd2l0aCBwb3J0ICovCit2b2lkIGlwYXRoX3dyaXRlX2tyZWdfcG9ydChjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBpcGF0aF9rcmVnLAorCQkJICAgdW5zaWduZWQsIHU2NCk7Cit1NjQgaXBhdGhfcmVhZF9rcmVnNjRfcG9ydChjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBpcGF0aF9rcmVnLAorCQkJICAgdW5zaWduZWQpOworCisvKgorICogV2UgY291bGQgaGF2ZSBhIHNpbmdsZSByZWdpc3RlciBnZXQvcHV0IHJvdXRpbmUsIHRoYXQgdGFrZXMgYSBncm91cCB0eXBlLAorICogYnV0IHRoaXMgaXMgc29tZXdoYXQgY2xlYXJlciBhbmQgY2xlYW5lci4gIEl0IGFsc28gZ2l2ZXMgdXMgc29tZSBlcnJvcgorICogY2hlY2tpbmcuICA2NCBiaXQgcmVnaXN0ZXIgcmVhZHMgc2hvdWxkIGFsd2F5cyB3b3JrLCBidXQgYXJlIGluZWZmaWNpZW50CisgKiBvbiBvcHRlcm9uICh0aGUgbm9ydGhicmlkZ2UgYWx3YXlzIGdlbmVyYXRlcyAyIHNlcGFyYXRlIEhUIDMyIGJpdCByZWFkcyksCisgKiBzbyB3ZSB1c2Uga3JlZzMyIHdoZXJldmVyIHBvc3NpYmxlLiAgVXNlciByZWdpc3RlciBhbmQgY291bnRlciByZWdpc3RlcgorICogcmVhZHMgYXJlIGFsd2F5cyAzMiBiaXQgcmVhZHMsIHNvIG9ubHkgb25lIGZvcm0gb2YgdGhvc2Ugcm91dGluZXMuCisgKi8KKworLyoKKyAqIEF0IHRoZSBtb21lbnQsIG5vbmUgb2YgdGhlIHMtcmVnaXN0ZXJzIGFyZSB3cml0YWJsZSwgc28gbm8KKyAqIGlwYXRoX3dyaXRlX3NyZWcoKSwgYW5kIG5vbmUgb2YgdGhlIGMtcmVnaXN0ZXJzIGFyZSB3cml0YWJsZSwgc28gbm8KKyAqIGlwYXRoX3dyaXRlX2NyZWcoKS4KKyAqLworCisvKioKKyAqIGlwYXRoX3JlYWRfdXJlZzMyIC0gcmVhZCAzMi1iaXQgdmlydHVhbGl6ZWQgcGVyLXBvcnQgcmVnaXN0ZXIKKyAqIEBkZDogZGV2aWNlCisgKiBAcmVnbm86IHJlZ2lzdGVyIG51bWJlcgorICogQHBvcnQ6IHBvcnQgbnVtYmVyCisgKgorICogUmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHRoYXQgaXMgdmlydHVhbGl6ZWQgdG8gYmUgcGVyIHBvcnQuCisgKiBQcmludHMgYSBkZWJ1ZyBtZXNzYWdlIGFuZCByZXR1cm5zIC0xIG9uIGVycm9ycyAobm90IGRpc3Rpbmd1aXNoYWJsZSBmcm9tCisgKiB2YWxpZCBjb250ZW50cyBhdCBydW50aW1lOyB3ZSBtYXkgYWRkIGEgc2VwYXJhdGUgZXJyb3IgdmFyaWFibGUgYXQgc29tZQorICogcG9pbnQpLgorICoKKyAqIFRoaXMgaXMgbm9ybWFsbHkgbm90IHVzZWQgYnkgdGhlIGtlcm5lbCwgYnV0IG1heSBiZSBmb3IgZGVidWdnaW5nLCBhbmQKKyAqIGhhcyBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiB0aGFuIHVzZXIgbW9kZSwgd2hpY2ggaXMgd2h5IGl0J3Mgbm90IGluCisgKiBfY29tbW9uLmguCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGlwYXRoX3JlYWRfdXJlZzMyKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgaXBhdGhfdXJlZyByZWdubywgaW50IHBvcnQpCit7CisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmVhZGwocmVnbm8gKyAodTY0IF9faW9tZW0gKikKKwkJICAgICAoZGQtPmlwYXRoX3VyZWdiYXNlICsKKwkJICAgICAgKGNoYXIgX19pb21lbSAqKWRkLT5pcGF0aF9rcmVnYmFzZSArCisJCSAgICAgIGRkLT5pcGF0aF9wYWxpZ24gKiBwb3J0KSk7Cit9CisKKy8qKgorICogaXBhdGhfd3JpdGVfdXJlZyAtIHdyaXRlIDMyLWJpdCB2aXJ0dWFsaXplZCBwZXItcG9ydCByZWdpc3RlcgorICogQGRkOiBkZXZpY2UKKyAqIEByZWdubzogcmVnaXN0ZXIgbnVtYmVyCisgKiBAdmFsdWU6IHZhbHVlCisgKiBAcG9ydDogcG9ydAorICoKKyAqIFdyaXRlIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHRoYXQgaXMgdmlydHVhbGl6ZWQgdG8gYmUgcGVyIHBvcnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGF0aF93cml0ZV91cmVnKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgaXBhdGhfdXJlZyByZWdubywgdTY0IHZhbHVlLCBpbnQgcG9ydCkKK3sKKwl1NjQgX19pb21lbSAqdWJhc2UgPSAodTY0IF9faW9tZW0gKikKKwkJKGRkLT5pcGF0aF91cmVnYmFzZSArIChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlICsKKwkJIGRkLT5pcGF0aF9wYWxpZ24gKiBwb3J0KTsKKwlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKQorCQl3cml0ZXEodmFsdWUsICZ1YmFzZVtyZWdub10pOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpcGF0aF9yZWFkX2tyZWczMihjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgIGlwYXRoX2tyZWcgcmVnbm8pCit7CisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiByZWFkbCgodTMyIF9faW9tZW0gKikgJiBkZC0+aXBhdGhfa3JlZ2Jhc2VbcmVnbm9dKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgaXBhdGhfcmVhZF9rcmVnNjQoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICBpcGF0aF9rcmVnIHJlZ25vKQoreworCWlmICghZGQtPmlwYXRoX2tyZWdiYXNlIHx8ICEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUFJFU0VOVCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiByZWFkcSgmZGQtPmlwYXRoX2tyZWdiYXNlW3JlZ25vXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGF0aF93cml0ZV9rcmVnKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgaXBhdGhfa3JlZyByZWdubywgdTY0IHZhbHVlKQoreworCWlmIChkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCXdyaXRlcSh2YWx1ZSwgJmRkLT5pcGF0aF9rcmVnYmFzZVtyZWdub10pOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBpcGF0aF9yZWFkX2NyZWcoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgaXBhdGhfc3JlZyByZWdubykKK3sKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSB8fCAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZWFkcShyZWdubyArICh1NjQgX19pb21lbSAqKQorCQkgICAgIChkZC0+aXBhdGhfY3JlZ2Jhc2UgKworCQkgICAgICAoY2hhciBfX2lvbWVtICopZGQtPmlwYXRoX2tyZWdiYXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGlwYXRoX3JlYWRfY3JlZzMyKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkJIGlwYXRoX3NyZWcgcmVnbm8pCit7CisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlYWRsKHJlZ25vICsgKHU2NCBfX2lvbWVtICopCisJCSAgICAgKGRkLT5pcGF0aF9jcmVnYmFzZSArCisJCSAgICAgIChjaGFyIF9faW9tZW0gKilkZC0+aXBhdGhfa3JlZ2Jhc2UpKTsKK30KKworLyoKKyAqIHN5c2ZzIGludGVyZmFjZS4KKyAqLworCitzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKKworZXh0ZXJuIGNvbnN0IGNoYXIgaXBhdGhfY29yZV92ZXJzaW9uW107CisKK2ludCBpcGF0aF9kcml2ZXJfY3JlYXRlX2dyb3VwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOwordm9pZCBpcGF0aF9kcml2ZXJfcmVtb3ZlX2dyb3VwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworCitpbnQgaXBhdGhfZGV2aWNlX2NyZWF0ZV9ncm91cChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCBpcGF0aF9kZXZpY2VfcmVtb3ZlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CitpbnQgaXBhdGhfZXhwb3NlX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKik7CisKK2ludCBpcGF0aF9pbml0X2lwYXRoZnModm9pZCk7Cit2b2lkIGlwYXRoX2V4aXRfaXBhdGhmcyh2b2lkKTsKK2ludCBpcGF0aGZzX2FkZF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CitpbnQgaXBhdGhmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCisvKgorICogRmx1c2ggd3JpdGUgY29tYmluaW5nIHN0b3JlIGJ1ZmZlcnMgKGlmIHByZXNlbnQpIGFuZCBwZXJmb3JtIGEgd3JpdGUKKyAqIGJhcnJpZXIuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIGlwYXRoX2ZsdXNoX3djKCkgYXNtIHZvbGF0aWxlKCJzZmVuY2UiIDo6OiAibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIGlwYXRoX2ZsdXNoX3djKCkgd21iKCkKKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgaXBhdGhfZGVidWc7IC8qIGRlYnVnZ2luZyBiaXQgbWFzayAqLworCitjb25zdCBjaGFyICppcGF0aF9nZXRfdW5pdF9uYW1lKGludCB1bml0KTsKKworZXh0ZXJuIHN0cnVjdCBtdXRleCBpcGF0aF9tdXRleDsKKworI2RlZmluZSBJUEFUSF9EUlZfTkFNRQkJImlwYXRoX2NvcmUiCisjZGVmaW5lIElQQVRIX01BSk9SCQkyMzMKKyNkZWZpbmUgSVBBVEhfU01BX01JTk9SCQkxMjgKKyNkZWZpbmUgSVBBVEhfRElBR19NSU5PUgkxMjkKKyNkZWZpbmUgSVBBVEhfTk1JTk9SUwkJMTMwCisKKyNkZWZpbmUgaXBhdGhfZGV2X2VycihkZCxmbXQsLi4uKSBcCisJZG8geyBcCisJCWNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpfX2RkID0gKGRkKTsgXAorCQlpZiAoX19kZC0+cGNpZGV2KSBcCisJCQlkZXZfZXJyKCZfX2RkLT5wY2lkZXYtPmRldiwgIiVzOiAiIGZtdCwgXAorCQkJCWlwYXRoX2dldF91bml0X25hbWUoX19kZC0+aXBhdGhfdW5pdCksIFwKKwkJCQkjI19fVkFfQVJHU19fKTsgXAorCQllbHNlIFwKKwkJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRSAiOiAlczogIiBmbXQsIFwKKwkJCSAgICAgICBpcGF0aF9nZXRfdW5pdF9uYW1lKF9fZGQtPmlwYXRoX3VuaXQpLCBcCisJCQkgICAgICAgIyNfX1ZBX0FSR1NfXyk7IFwKKwl9IHdoaWxlICgwKQorCisjaWYgX0lQQVRIX0RFQlVHR0lORworCisjIGRlZmluZSBfX0lQQVRIX0RCR19XSElDSCh3aGljaCxmbXQsLi4uKSBcCisJZG8geyBcCisJCWlmKHVubGlrZWx5KGlwYXRoX2RlYnVnJih3aGljaCkpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBJUEFUSF9EUlZfTkFNRSAiOiAlczogIiBmbXQsIFwKKwkJCSAgICAgICBfX2Z1bmNfXywjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUoMCkKKworIyBkZWZpbmUgaXBhdGhfZGJnKGZtdCwuLi4pIFwKKwlfX0lQQVRIX0RCR19XSElDSChfX0lQQVRIX0RCRyxmbXQsIyNfX1ZBX0FSR1NfXykKKyMgZGVmaW5lIGlwYXRoX2NkYmcod2hpY2gsZm10LC4uLikgXAorCV9fSVBBVEhfREJHX1dISUNIKF9fSVBBVEhfIyN3aGljaCMjREJHLGZtdCwjI19fVkFfQVJHU19fKQorCisjZWxzZSAvKiAhIF9JUEFUSF9ERUJVR0dJTkcgKi8KKworIyBkZWZpbmUgaXBhdGhfZGJnKGZtdCwuLi4pCisjIGRlZmluZSBpcGF0aF9jZGJnKHdoaWNoLGZtdCwuLi4pCisKKyNlbmRpZiAvKiBfSVBBVEhfREVCVUdHSU5HICovCisKKyNlbmRpZgkJCQkvKiBfSVBBVEhfS0VSTkVMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZTg3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKworLyoqCisgKiBpcGF0aF9hbGxvY19sa2V5IC0gYWxsb2NhdGUgYW4gbGtleQorICogQHJrdDogbGtleSB0YWJsZSBpbiB3aGljaCB0byBhbGxvY2F0ZSB0aGUgbGtleQorICogQG1yOiBtZW1vcnkgcmVnaW9uIHRoYXQgdGhpcyBsa2V5IHByb3RlY3RzCisgKgorICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSByZXR1cm5zIDAuCisgKi8KKworaW50IGlwYXRoX2FsbG9jX2xrZXkoc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwgc3RydWN0IGlwYXRoX21yZWdpb24gKm1yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHI7CisJdTMyIG47CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZya3QtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZpbmQgdGhlIG5leHQgYXZhaWxhYmxlIExLRVkgKi8KKwlyID0gbiA9IHJrdC0+bmV4dDsKKwlmb3IgKDs7KSB7CisJCWlmIChya3QtPnRhYmxlW3JdID09IE5VTEwpCisJCQlicmVhazsKKwkJciA9IChyICsgMSkgJiAocmt0LT5tYXggLSAxKTsKKwkJaWYgKHIgPT0gbikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7CisJCQlfVkVSQlNfSU5GTygiTEtFWSB0YWJsZSBmdWxsXG4iKTsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJcmt0LT5uZXh0ID0gKHIgKyAxKSAmIChya3QtPm1heCAtIDEpOworCS8qCisJICogTWFrZSBzdXJlIGxrZXkgaXMgbmV2ZXIgemVybyB3aGljaCBpcyByZXNlcnZlZCB0byBpbmRpY2F0ZSBhbgorCSAqIHVucmVzdHJpY3RlZCBMS0VZLgorCSAqLworCXJrdC0+Z2VuKys7CisJbXItPmxrZXkgPSAociA8PCAoMzIgLSBpYl9pcGF0aF9sa2V5X3RhYmxlX3NpemUpKSB8CisJCSgoKCgxIDw8ICgyNCAtIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSkpIC0gMSkgJiBya3QtPmdlbikKKwkJIDw8IDgpOworCWlmIChtci0+bGtleSA9PSAwKSB7CisJCW1yLT5sa2V5IHw9IDEgPDwgODsKKwkJcmt0LT5nZW4rKzsKKwl9CisJcmt0LT50YWJsZVtyXSA9IG1yOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gMTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2ZyZWVfbGtleSAtIGZyZWUgYW4gbGtleQorICogQHJrdDogdGFibGUgZnJvbSB3aGljaCB0byBmcmVlIHRoZSBsa2V5CisgKiBAbGtleTogbGtleSBpZCB0byBmcmVlCisgKi8KK3ZvaWQgaXBhdGhfZnJlZV9sa2V5KHN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QsIHUzMiBsa2V5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHI7CisKKwlpZiAobGtleSA9PSAwKQorCQlyZXR1cm47CisJciA9IGxrZXkgPj4gKDMyIC0gaWJfaXBhdGhfbGtleV90YWJsZV9zaXplKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmt0LT5sb2NrLCBmbGFncyk7CisJcmt0LT50YWJsZVtyXSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogaXBhdGhfbGtleV9vayAtIGNoZWNrIElCIFNHRSBmb3IgdmFsaWRpdHkgYW5kIGluaXRpYWxpemUKKyAqIEBya3Q6IHRhYmxlIGNvbnRhaW5pbmcgbGtleSB0byBjaGVjayBTR0UgYWdhaW5zdAorICogQGlzZ2U6IG91dGdvaW5nIGludGVybmFsIFNHRQorICogQHNnZTogU0dFIHRvIGNoZWNrCisgKiBAYWNjOiBhY2Nlc3MgZmxhZ3MKKyAqCisgKiBSZXR1cm4gMSBpZiB2YWxpZCBhbmQgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHJldHVybnMgMC4KKyAqCisgKiBDaGVjayB0aGUgSUIgU0dFIGZvciB2YWxpZGl0eSBhbmQgaW5pdGlhbGl6ZSBvdXIgaW50ZXJuYWwgdmVyc2lvbgorICogb2YgaXQuCisgKi8KK2ludCBpcGF0aF9sa2V5X29rKHN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QsIHN0cnVjdCBpcGF0aF9zZ2UgKmlzZ2UsCisJCSAgc3RydWN0IGliX3NnZSAqc2dlLCBpbnQgYWNjKQoreworCXN0cnVjdCBpcGF0aF9tcmVnaW9uICptcjsKKwlzaXplX3Qgb2ZmOworCWludCByZXQ7CisKKwkvKgorCSAqIFdlIHVzZSBMS0VZID09IHplcm8gdG8gbWVhbiBhIHBoeXNpY2FsIGttYWxsb2MoKSBhZGRyZXNzLgorCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrIHNpbmNlIHdlIHJlbHkgb24gZG1hX21hcF9zaW5nbGUoKQorCSAqIGJlaW5nIHJldmVyc2libGUgYnkgY2FsbGluZyBidXNfdG9fdmlydCgpLgorCSAqLworCWlmIChzZ2UtPmxrZXkgPT0gMCkgeworCQlpc2dlLT5tciA9IE5VTEw7CisJCWlzZ2UtPnZhZGRyID0gYnVzX3RvX3ZpcnQoc2dlLT5hZGRyKTsKKwkJaXNnZS0+bGVuZ3RoID0gc2dlLT5sZW5ndGg7CisJCWlzZ2UtPnNnZV9sZW5ndGggPSBzZ2UtPmxlbmd0aDsKKwkJcmV0ID0gMTsKKwkJZ290byBiYWlsOworCX0KKwltciA9IHJrdC0+dGFibGVbKHNnZS0+bGtleSA+PiAoMzIgLSBpYl9pcGF0aF9sa2V5X3RhYmxlX3NpemUpKV07CisJaWYgKHVubGlrZWx5KG1yID09IE5VTEwgfHwgbXItPmxrZXkgIT0gc2dlLT5sa2V5KSkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJb2ZmID0gc2dlLT5hZGRyIC0gbXItPnVzZXJfYmFzZTsKKwlpZiAodW5saWtlbHkoc2dlLT5hZGRyIDwgbXItPnVzZXJfYmFzZSB8fAorCQkgICAgIG9mZiArIHNnZS0+bGVuZ3RoID4gbXItPmxlbmd0aCB8fAorCQkgICAgIChtci0+YWNjZXNzX2ZsYWdzICYgYWNjKSAhPSBhY2MpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvZmYgKz0gbXItPm9mZnNldDsKKwlpc2dlLT5tciA9IG1yOworCWlzZ2UtPm0gPSAwOworCWlzZ2UtPm4gPSAwOworCXdoaWxlIChvZmYgPj0gbXItPm1hcFtpc2dlLT5tXS0+c2Vnc1tpc2dlLT5uXS5sZW5ndGgpIHsKKwkJb2ZmIC09IG1yLT5tYXBbaXNnZS0+bV0tPnNlZ3NbaXNnZS0+bl0ubGVuZ3RoOworCQlpc2dlLT5uKys7CisJCWlmIChpc2dlLT5uID49IElQQVRIX1NFR1NaKSB7CisJCQlpc2dlLT5tKys7CisJCQlpc2dlLT5uID0gMDsKKwkJfQorCX0KKwlpc2dlLT52YWRkciA9IG1yLT5tYXBbaXNnZS0+bV0tPnNlZ3NbaXNnZS0+bl0udmFkZHIgKyBvZmY7CisJaXNnZS0+bGVuZ3RoID0gbXItPm1hcFtpc2dlLT5tXS0+c2Vnc1tpc2dlLT5uXS5sZW5ndGggLSBvZmY7CisJaXNnZS0+c2dlX2xlbmd0aCA9IHNnZS0+bGVuZ3RoOworCisJcmV0ID0gMTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3JrZXlfb2sgLSBjaGVjayB0aGUgSUIgdmlydHVhbCBhZGRyZXNzLCBsZW5ndGgsIGFuZCBSS0VZCisgKiBAZGV2OiBpbmZpbmliYW5kIGRldmljZQorICogQHNzOiBTR0Ugc3RhdGUKKyAqIEBsZW46IGxlbmd0aCBvZiBkYXRhCisgKiBAdmFkZHI6IHZpcnR1YWwgYWRkcmVzcyB0byBwbGFjZSBkYXRhCisgKiBAcmtleTogcmtleSB0byBjaGVjaworICogQGFjYzogYWNjZXNzIGZsYWdzCisgKgorICogUmV0dXJuIDEgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIDAuCisgKi8KK2ludCBpcGF0aF9ya2V5X29rKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJICB1MzIgbGVuLCB1NjQgdmFkZHIsIHUzMiBya2V5LCBpbnQgYWNjKQoreworCXN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QgPSAmZGV2LT5sa190YWJsZTsKKwlzdHJ1Y3QgaXBhdGhfc2dlICpzZ2UgPSAmc3MtPnNnZTsKKwlzdHJ1Y3QgaXBhdGhfbXJlZ2lvbiAqbXI7CisJc2l6ZV90IG9mZjsKKwlpbnQgcmV0OworCisJbXIgPSBya3QtPnRhYmxlWyhya2V5ID4+ICgzMiAtIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSkpXTsKKwlpZiAodW5saWtlbHkobXIgPT0gTlVMTCB8fCBtci0+bGtleSAhPSBya2V5KSkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJb2ZmID0gdmFkZHIgLSBtci0+aW92YTsKKwlpZiAodW5saWtlbHkodmFkZHIgPCBtci0+aW92YSB8fCBvZmYgKyBsZW4gPiBtci0+bGVuZ3RoIHx8CisJCSAgICAgKG1yLT5hY2Nlc3NfZmxhZ3MgJiBhY2MpID09IDApKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvZmYgKz0gbXItPm9mZnNldDsKKwlzZ2UtPm1yID0gbXI7CisJc2dlLT5tID0gMDsKKwlzZ2UtPm4gPSAwOworCXdoaWxlIChvZmYgPj0gbXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoKSB7CisJCW9mZiAtPSBtci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGg7CisJCXNnZS0+bisrOworCQlpZiAoc2dlLT5uID49IElQQVRIX1NFR1NaKSB7CisJCQlzZ2UtPm0rKzsKKwkJCXNnZS0+biA9IDA7CisJCX0KKwl9CisJc2dlLT52YWRkciA9IG1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyICsgb2ZmOworCXNnZS0+bGVuZ3RoID0gbXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoIC0gb2ZmOworCXNnZS0+c2dlX2xlbmd0aCA9IGxlbjsKKwlzcy0+c2dfbGlzdCA9IE5VTEw7CisJc3MtPm51bV9zZ2UgPSAxOworCisJcmV0ID0gMTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWM0YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKQEAgLTAsMCArMSwxNTIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgcm91dGluZXMgdXNlZCBieSBsYXllcmVkIGRyaXZlcnMsIGN1cnJlbnRseSBqdXN0IHRoZQorICogbGF5ZXJlZCBldGhlcm5ldCBkcml2ZXIgYW5kIHZlcmJzIGxheWVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorCisvKiBBY3F1aXJlIGJlZm9yZSBpcGF0aF9kZXZzX2xvY2suICovCitzdGF0aWMgREVGSU5FX01VVEVYKGlwYXRoX2xheWVyX211dGV4KTsKKworc3RhdGljIGludCBpcGF0aF92ZXJic19yZWdpc3RlcmVkOworCit1MTYgaXBhdGhfbGF5ZXJfcmN2X29wY29kZTsKKworc3RhdGljIGludCAoKmxheWVyX2ludHIpKHZvaWQgKiwgdTMyKTsKK3N0YXRpYyBpbnQgKCpsYXllcl9yY3YpKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3N0YXRpYyBpbnQgKCpsYXllcl9yY3ZfbGlkKSh2b2lkICosIHZvaWQgKik7CitzdGF0aWMgaW50ICgqdmVyYnNfcGlvYnVmYXZhaWwpKHZvaWQgKik7CitzdGF0aWMgdm9pZCAoKnZlcmJzX3Jjdikodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdTMyKTsKKworc3RhdGljIHZvaWQgKigqbGF5ZXJfYWRkX29uZSkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3N0YXRpYyB2b2lkICgqbGF5ZXJfcmVtb3ZlX29uZSkodm9pZCAqKTsKK3N0YXRpYyB2b2lkICooKnZlcmJzX2FkZF9vbmUpKGludCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CitzdGF0aWMgdm9pZCAoKnZlcmJzX3JlbW92ZV9vbmUpKHZvaWQgKik7CitzdGF0aWMgdm9pZCAoKnZlcmJzX3RpbWVyX2NiKSh2b2lkICopOworCitpbnQgX19pcGF0aF9sYXllcl9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGFyZykKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChkZC0+aXBhdGhfbGF5ZXIubF9hcmcgJiYgbGF5ZXJfaW50cikKKwkJcmV0ID0gbGF5ZXJfaW50cihkZC0+aXBhdGhfbGF5ZXIubF9hcmcsIGFyZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfbGF5ZXJfaW50cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBhcmcpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKworCXJldCA9IF9faXBhdGhfbGF5ZXJfaW50cihkZCwgYXJnKTsKKworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faXBhdGhfbGF5ZXJfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdm9pZCAqaGRyLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKGRkLT5pcGF0aF9sYXllci5sX2FyZyAmJiBsYXllcl9yY3YpCisJCXJldCA9IGxheWVyX3JjdihkZC0+aXBhdGhfbGF5ZXIubF9hcmcsIGhkciwgc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2lwYXRoX2xheWVyX3Jjdl9saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB2b2lkICpoZHIpCit7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnICYmIGxheWVyX3Jjdl9saWQpCisJCXJldCA9IGxheWVyX3Jjdl9saWQoZGQtPmlwYXRoX2xheWVyLmxfYXJnLCBoZHIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faXBhdGhfdmVyYnNfcGlvYnVmYXZhaWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKGRkLT52ZXJic19sYXllci5sX2FyZyAmJiB2ZXJic19waW9idWZhdmFpbCkKKwkJcmV0ID0gdmVyYnNfcGlvYnVmYXZhaWwoZGQtPnZlcmJzX2xheWVyLmxfYXJnKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2lwYXRoX3ZlcmJzX3JjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgKnJjLCB2b2lkICplYnVmLAorCQkgICAgICB1MzIgdGxlbikKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcgJiYgdmVyYnNfcmN2KSB7CisJCXZlcmJzX3JjdihkZC0+dmVyYnNfbGF5ZXIubF9hcmcsIHJjLCBlYnVmLCB0bGVuKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IG5ld3N0YXRlKQoreworCXUzMiBsc3RhdGU7CisJaW50IHJldDsKKworCXN3aXRjaCAobmV3c3RhdGUpIHsKKwljYXNlIElQQVRIX0lCX0xJTktET1dOOgorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfUE9MTCA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOworCQkvKiBkb24ndCB3YWl0ICovCisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKworCWNhc2UgSVBBVEhfSUJfTElOS0RPV05fU0xFRVA6CisJCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TTEVFUCA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOworCQkvKiBkb24ndCB3YWl0ICovCisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKworCWNhc2UgSVBBVEhfSUJfTElOS0RPV05fRElTQUJMRToKKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwKKwkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUgPDwKKwkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUKTsKKwkJLyogZG9uJ3Qgd2FpdCAqLworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisKKwljYXNlIElQQVRIX0lCX0xJTktJTklUOgorCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0lOSVQpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfSU5JVCA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCk7CisJCWxzdGF0ZSA9IElQQVRIX0xJTktJTklUOworCQlicmVhazsKKworCWNhc2UgSVBBVEhfSUJfTElOS0FSTToKKwkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBUk1FRCkgeworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJgorCQkgICAgICAoSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LQUNUSVZFKSkpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQVJNRUQgPDwKKwkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpOworCQkvKgorCQkgKiBTaW5jZSB0aGUgcG9ydCBjYW4gdHJhbnNpdGlvbiB0byBBQ1RJVkUgYnkgcmVjZWl2aW5nCisJCSAqIGEgbm9uIFZMIDE1IHBhY2tldCwgd2FpdCBmb3IgZWl0aGVyIHN0YXRlLgorCQkgKi8KKwkJbHN0YXRlID0gSVBBVEhfTElOS0FSTUVEIHwgSVBBVEhfTElOS0FDVElWRTsKKwkJYnJlYWs7CisKKwljYXNlIElQQVRIX0lCX0xJTktBQ1RJVkU6CisJCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBiYWlsOworCQl9CisJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBUk1FRCkpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKTsKKwkJbHN0YXRlID0gSVBBVEhfTElOS0FDVElWRTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpcGF0aF9kYmcoIkludmFsaWQgbGlua3N0YXRlIDB4JXggcmVxdWVzdGVkXG4iLCBuZXdzdGF0ZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJcmV0ID0gaXBhdGhfd2FpdF9saW5rc3RhdGUoZGQsIGxzdGF0ZSwgMjAwMCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZSk7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfc2V0X210dSAtIHNldCB0aGUgTVRVCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGFyZzogdGhlIG5ldyBNVFUKKyAqCisgKiB3ZSBjYW4gaGFuZGxlICJhbnkiIGluY29taW5nIHNpemUsIHRoZSBpc3N1ZSBoZXJlIGlzIHdoZXRoZXIgd2UKKyAqIG5lZWQgdG8gcmVzdHJpY3Qgb3VyIG91dGdvaW5nIHNpemUuICAgRm9yIG5vdywgd2UgZG9uJ3QgZG8gYW55CisgKiBzYW5pdHkgY2hlY2tpbmcgb24gdGhpcywgYW5kIHdlIGRvbid0IGRlYWwgd2l0aCB3aGF0IGhhcHBlbnMgdG8KKyAqIHByb2dyYW1zIHRoYXQgYXJlIGFscmVhZHkgcnVubmluZyB3aGVuIHRoZSBzaXplIGNoYW5nZXMuCisgKiBOT1RFOiBjaGFuZ2luZyB0aGUgTVRVIHdpbGwgdXN1YWxseSBjYXVzZSB0aGUgSUJDIHRvIGdvIGJhY2sgdG8KKyAqIGxpbmsgaW5pdGlhbGl6ZSAoSVBBVEhfSUJTVEFURV9JTklUKSBzdGF0ZS4uLgorICovCitpbnQgaXBhdGhfbGF5ZXJfc2V0X210dShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBhcmcpCit7CisJdTMyIHBpb3NpemU7CisJaW50IGNoYW5nZWQgPSAwOworCWludCByZXQ7CisKKwkvKgorCSAqIG10dSBpcyBJQiBkYXRhIHBheWxvYWQgbWF4LiAgSXQncyB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyIGxlc3MKKwkgKiB0aGFuIHBpb3NpemUgKG9yIGV2ZW4gbGFyZ2VyLCBzaW5jZSBpdCBvbmx5IHJlYWxseSBjb250cm9scyB0aGUKKwkgKiBsYXJnZXN0IHdlIGNhbiByZWNlaXZlOyB3ZSBjYW4gc2VuZCB0aGUgbWF4IG9mIHRoZSBtdHUgYW5kCisJICogcGlvc2l6ZSkuICBXZSBjaGVjayB0aGF0IGl0J3Mgb25lIG9mIHRoZSB2YWxpZCBJQiBzaXplcy4KKwkgKi8KKwlpZiAoYXJnICE9IDI1NiAmJiBhcmcgIT0gNTEyICYmIGFyZyAhPSAxMDI0ICYmIGFyZyAhPSAyMDQ4ICYmCisJICAgIGFyZyAhPSA0MDk2KSB7CisJCWlwYXRoX2RiZygiVHJ5aW5nIHRvIHNldCBpbnZhbGlkIG10dSAldSwgZmFpbGluZ1xuIiwgYXJnKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwlpZiAoZGQtPmlwYXRoX2libXR1ID09IGFyZykgeworCQlyZXQgPSAwOwkvKiBzYW1lIGFzIGN1cnJlbnQgKi8KKwkJZ290byBiYWlsOworCX0KKworCXBpb3NpemUgPSBkZC0+aXBhdGhfaWJtYXhsZW47CisJZGQtPmlwYXRoX2libXR1ID0gYXJnOworCisJaWYgKGFyZyA+PSAocGlvc2l6ZSAtIElQQVRIX1BJT19NQVhJQkhEUikpIHsKKwkJLyogT25seSBpZiBpdCdzIG5vdCB0aGUgaW5pdGlhbCB2YWx1ZSAob3IgcmVzZXQgdG8gaXQpICovCisJCWlmIChwaW9zaXplICE9IGRkLT5pcGF0aF9pbml0X2libWF4bGVuKSB7CisJCQlkZC0+aXBhdGhfaWJtYXhsZW4gPSBwaW9zaXplOworCQkJY2hhbmdlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKChhcmcgKyBJUEFUSF9QSU9fTUFYSUJIRFIpICE9IGRkLT5pcGF0aF9pYm1heGxlbikgeworCQlwaW9zaXplID0gYXJnICsgSVBBVEhfUElPX01BWElCSERSOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJpYm1heGxlbiB3YXMgMHgleCwgc2V0dGluZyB0byAweCV4ICIKKwkJCSAgICIobXR1IDB4JXgpXG4iLCBkZC0+aXBhdGhfaWJtYXhsZW4sIHBpb3NpemUsCisJCQkgICBhcmcpOworCQlkZC0+aXBhdGhfaWJtYXhsZW4gPSBwaW9zaXplOworCQljaGFuZ2VkID0gMTsKKwl9CisKKwlpZiAoY2hhbmdlZCkgeworCQkvKgorCQkgKiBzZXQgdGhlIElCQyBtYXhwa3RsZW5ndGggdG8gdGhlIHNpemUgb2Ygb3VyIHBpbworCQkgKiBidWZmZXJzIGluIHdvcmRzCisJCSAqLworCQl1NjQgaWJjID0gZGQtPmlwYXRoX2liY2N0cmw7CisJCWliYyAmPSB+KElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fTUFTSyA8PAorCQkJIElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fU0hJRlQpOworCisJCXBpb3NpemUgPSBwaW9zaXplIC0gMiAqIHNpemVvZih1MzIpOwkvKiBpZ25vcmUgcGJjICovCisJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7CisJCXBpb3NpemUgLz0gc2l6ZW9mKHUzMik7CS8qIGluIHdvcmRzICovCisJCS8qCisJCSAqIGZvciBJQ1JDLCB3aGljaCB3ZSBvbmx5IHNlbmQgaW4gZGlhZyB0ZXN0IHBrdCBtb2RlLCBhbmQKKwkJICogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IGZvciBtdHUKKwkJICovCisJCXBpb3NpemUgKz0gMTsKKworCQlpYmMgfD0gcGlvc2l6ZSA8PCBJTkZJTklQQVRIX0lCQ0NfTUFYUEtUTEVOX1NISUZUOworCQlkZC0+aXBhdGhfaWJjY3RybCA9IGliYzsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAorCQkJCSBkZC0+aXBhdGhfaWJjY3RybCk7CisJCWRkLT5pcGF0aF9mX3RpZHRlbXBsYXRlKGRkKTsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9tdHUpOworCitpbnQgaXBhdGhfc2V0X3Nwc19saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgYXJnLCB1OCBsbWMpCit7CisJaXBhdGhfc3RhdHMuc3BzX2xpZFtkZC0+aXBhdGhfdW5pdF0gPSBhcmc7CisJZGQtPmlwYXRoX2xpZCA9IGFyZzsKKwlkZC0+aXBhdGhfbG1jID0gbG1jOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJaWYgKGRkLT5pcGF0aF9sYXllci5sX2FyZyAmJiBsYXllcl9pbnRyKQorCQlsYXllcl9pbnRyKGRkLT5pcGF0aF9sYXllci5sX2FyZywgSVBBVEhfTEFZRVJfSU5UX0xJRCk7CisKKwltdXRleF91bmxvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9zZXRfc3BzX2xpZCk7CisKK2ludCBpcGF0aF9sYXllcl9zZXRfZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIF9fYmU2NCBndWlkKQoreworCS8qIFhYWCAtIG5lZWQgdG8gaW5mb3JtIGFueW9uZSB3aG8gY2FyZXMgdGhpcyBqdXN0IGhhcHBlbmVkLiAqLworCWRkLT5pcGF0aF9ndWlkID0gZ3VpZDsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X2d1aWQpOworCitfX2JlNjQgaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBkZC0+aXBhdGhfZ3VpZDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2d1aWQpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X25ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX25ndWlkOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbmd1aWQpOworCitpbnQgaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyICogdmVuZG9yLAorCQkJICAgICB1MzIgKiBib2FyZHJldiwgdTMyICogbWFqcmV2LCB1MzIgKiBtaW5yZXYpCit7CisJKnZlbmRvciA9IGRkLT5pcGF0aF92ZW5kb3JpZDsKKwkqYm9hcmRyZXYgPSBkZC0+aXBhdGhfYm9hcmRyZXY7CisJKm1hanJldiA9IGRkLT5pcGF0aF9tYWpyZXY7CisJKm1pbnJldiA9IGRkLT5pcGF0aF9taW5yZXY7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKTsKKwordTMyIGlwYXRoX2xheWVyX2dldF9mbGFncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkLT5pcGF0aF9mbGFnczsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2ZsYWdzKTsKKworc3RydWN0IGRldmljZSAqaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuICZkZC0+cGNpZGV2LT5kZXY7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9kZXZpY2UpOworCit1MTYgaXBhdGhfbGF5ZXJfZ2V0X2RldmljZWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX2RldmljZWlkOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfZGV2aWNlaWQpOworCit1NjQgaXBhdGhfbGF5ZXJfZ2V0X2xhc3RpYmNzdGF0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX2xhc3RpYmNzdGF0OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X2libXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX2libXR1OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfaWJtdHUpOworCit2b2lkIGlwYXRoX2xheWVyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJaWYgKGxheWVyX2FkZF9vbmUpCisJCWRkLT5pcGF0aF9sYXllci5sX2FyZyA9CisJCQlsYXllcl9hZGRfb25lKGRkLT5pcGF0aF91bml0LCBkZCk7CisKKwlpZiAodmVyYnNfYWRkX29uZSkKKwkJZGQtPnZlcmJzX2xheWVyLmxfYXJnID0KKwkJCXZlcmJzX2FkZF9vbmUoZGQtPmlwYXRoX3VuaXQsIGRkKTsKKworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworfQorCit2b2lkIGlwYXRoX2xheWVyX2RlbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJaWYgKGRkLT5pcGF0aF9sYXllci5sX2FyZyAmJiBsYXllcl9yZW1vdmVfb25lKSB7CisJCWxheWVyX3JlbW92ZV9vbmUoZGQtPmlwYXRoX2xheWVyLmxfYXJnKTsKKwkJZGQtPmlwYXRoX2xheWVyLmxfYXJnID0gTlVMTDsKKwl9CisKKwlpZiAoZGQtPnZlcmJzX2xheWVyLmxfYXJnICYmIHZlcmJzX3JlbW92ZV9vbmUpIHsKKwkJdmVyYnNfcmVtb3ZlX29uZShkZC0+dmVyYnNfbGF5ZXIubF9hcmcpOworCQlkZC0+dmVyYnNfbGF5ZXIubF9hcmcgPSBOVUxMOworCX0KKworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworfQorCitpbnQgaXBhdGhfbGF5ZXJfcmVnaXN0ZXIodm9pZCAqKCpsX2FkZCkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKSwKKwkJCSB2b2lkICgqbF9yZW1vdmUpKHZvaWQgKiksCisJCQkgaW50ICgqbF9pbnRyKSh2b2lkICosIHUzMiksCisJCQkgaW50ICgqbF9yY3YpKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKSwKKwkJCSB1MTYgbF9yY3Zfb3Bjb2RlLAorCQkJIGludCAoKmxfcmN2X2xpZCkodm9pZCAqLCB2b2lkICopKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJbGF5ZXJfYWRkX29uZSA9IGxfYWRkOworCWxheWVyX3JlbW92ZV9vbmUgPSBsX3JlbW92ZTsKKwlsYXllcl9pbnRyID0gbF9pbnRyOworCWxheWVyX3JjdiA9IGxfcmN2OworCWxheWVyX3Jjdl9saWQgPSBsX3Jjdl9saWQ7CisJaXBhdGhfbGF5ZXJfcmN2X29wY29kZSA9IGxfcmN2X29wY29kZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnKQorCQkJY29udGludWU7CisKKwkJaWYgKCEoKmRkLT5pcGF0aF9zdGF0dXNwICYgSVBBVEhfU1RBVFVTX1NNQSkpCisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX09JQl9TTUE7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJCWRkLT5pcGF0aF9sYXllci5sX2FyZyA9IGxfYWRkKGRkLT5pcGF0aF91bml0LCBkZCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9yZWdpc3Rlcik7CisKK3ZvaWQgaXBhdGhfbGF5ZXJfdW5yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJaWYgKGRkLT5pcGF0aF9sYXllci5sX2FyZyAmJiBsYXllcl9yZW1vdmVfb25lKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJCWxheWVyX3JlbW92ZV9vbmUoZGQtPmlwYXRoX2xheWVyLmxfYXJnKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwkJCWRkLT5pcGF0aF9sYXllci5sX2FyZyA9IE5VTEw7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWxheWVyX2FkZF9vbmUgPSBOVUxMOworCWxheWVyX3JlbW92ZV9vbmUgPSBOVUxMOworCWxheWVyX2ludHIgPSBOVUxMOworCWxheWVyX3JjdiA9IE5VTEw7CisJbGF5ZXJfcmN2X2xpZCA9IE5VTEw7CisKKwltdXRleF91bmxvY2soJmlwYXRoX2xheWVyX211dGV4KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyB2b2lkIF9faXBhdGhfdmVyYnNfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopIGFyZzsKKworCS8qCisJICogSWYgcG9ydCAwIHJlY2VpdmUgcGFja2V0IGludGVycnVwdHMgYXJlIG5vdCBhdmFpbGFibGUsIG9yCisJICogY2FuIGJlIG1pc3NlZCwgcG9sbCB0aGUgcmVjZWl2ZSBxdWV1ZQorCSAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QT0xMX1JYX0lOVFIpCisJCWlwYXRoX2tyZWNlaXZlKGRkKTsKKworCS8qIEhhbmRsZSB2ZXJicyBsYXllciB0aW1lb3V0cy4gKi8KKwlpZiAoZGQtPnZlcmJzX2xheWVyLmxfYXJnICYmIHZlcmJzX3RpbWVyX2NiKQorCQl2ZXJic190aW1lcl9jYihkZC0+dmVyYnNfbGF5ZXIubF9hcmcpOworCisJbW9kX3RpbWVyKCZkZC0+dmVyYnNfbGF5ZXIubF90aW1lciwgamlmZmllcyArIDEpOworfQorCisvKioKKyAqIGlwYXRoX3ZlcmJzX3JlZ2lzdGVyIC0gdmVyYnMgbGF5ZXIgcmVnaXN0cmF0aW9uCisgKiBAbF9waW9idWZhdmFpbDogY2FsbGJhY2sgZm9yIHdoZW4gUElPIGJ1ZmZlcnMgYmVjb21lIGF2YWlsYWJsZQorICogQGxfcmN2OiBjYWxsYmFjayBmb3IgcmVjZWl2aW5nIGEgcGFja2V0CisgKiBAbF90aW1lcl9jYjogdGltZXIgY2FsbGJhY2sKKyAqIEBpcGF0aF9kZXZkYXRhOiBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgaXMgcHV0IGhlcmUKKyAqLworaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyKHZvaWQgKigqbF9hZGQpKGludCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKiksCisJCQkgdm9pZCAoKmxfcmVtb3ZlKSh2b2lkICphcmcpLAorCQkJIGludCAoKmxfcGlvYnVmYXZhaWwpICh2b2lkICphcmcpLAorCQkJIHZvaWQgKCpsX3JjdikgKHZvaWQgKmFyZywgdm9pZCAqcmhkciwKKwkJCQkJdm9pZCAqZGF0YSwgdTMyIHRsZW4pLAorCQkJIHZvaWQgKCpsX3RpbWVyX2NiKSAodm9pZCAqYXJnKSkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKworCXZlcmJzX2FkZF9vbmUgPSBsX2FkZDsKKwl2ZXJic19yZW1vdmVfb25lID0gbF9yZW1vdmU7CisJdmVyYnNfcGlvYnVmYXZhaWwgPSBsX3Bpb2J1ZmF2YWlsOworCXZlcmJzX3JjdiA9IGxfcmN2OworCXZlcmJzX3RpbWVyX2NiID0gbF90aW1lcl9jYjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZGQtPnZlcmJzX2xheWVyLmxfYXJnKQorCQkJY29udGludWU7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJCWRkLT52ZXJic19sYXllci5sX2FyZyA9IGxfYWRkKGRkLT5pcGF0aF91bml0LCBkZCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKworCWlwYXRoX3ZlcmJzX3JlZ2lzdGVyZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX3ZlcmJzX3JlZ2lzdGVyKTsKKwordm9pZCBpcGF0aF92ZXJic191bnJlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgeworCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19PSUJfU01BOworCisJCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcgJiYgdmVyYnNfcmVtb3ZlX29uZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJCQl2ZXJic19yZW1vdmVfb25lKGRkLT52ZXJic19sYXllci5sX2FyZyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJCQlkZC0+dmVyYnNfbGF5ZXIubF9hcmcgPSBOVUxMOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisKKwl2ZXJic19hZGRfb25lID0gTlVMTDsKKwl2ZXJic19yZW1vdmVfb25lID0gTlVMTDsKKwl2ZXJic19waW9idWZhdmFpbCA9IE5VTEw7CisJdmVyYnNfcmN2ID0gTlVMTDsKKwl2ZXJic190aW1lcl9jYiA9IE5VTEw7CisKKwlpcGF0aF92ZXJic19yZWdpc3RlcmVkID0gMDsKKworCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF92ZXJic191bnJlZ2lzdGVyKTsKKworaW50IGlwYXRoX2xheWVyX29wZW4oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgKiBwa3RtYXgpCit7CisJaW50IHJldDsKKwl1MzIgaW50dmFsID0gMDsKKworCW11dGV4X2xvY2soJmlwYXRoX2xheWVyX211dGV4KTsKKworCWlmICghZGQtPmlwYXRoX2xheWVyLmxfYXJnKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSBpcGF0aF9zZXRyY3ZoZHJzaXplKGRkLCBOVU1fT0ZfRVhUUkFfV09SRFNfSU5fSEVBREVSX1FVRVVFKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGJhaWw7CisKKwkqcGt0bWF4ID0gZGQtPmlwYXRoX2libWF4bGVuOworCisJaWYgKCpkZC0+aXBhdGhfc3RhdHVzcCAmIElQQVRIX1NUQVRVU19JQl9SRUFEWSkKKwkJaW50dmFsIHw9IElQQVRIX0xBWUVSX0lOVF9JRl9VUDsKKwlpZiAoaXBhdGhfc3RhdHMuc3BzX2xpZFtkZC0+aXBhdGhfdW5pdF0pCisJCWludHZhbCB8PSBJUEFUSF9MQVlFUl9JTlRfTElEOworCWlmIChpcGF0aF9zdGF0cy5zcHNfbWxpZFtkZC0+aXBhdGhfdW5pdF0pCisJCWludHZhbCB8PSBJUEFUSF9MQVlFUl9JTlRfQkNBU1Q7CisJLyoKKwkgKiBkbyB0aGlzIG9uIG9wZW4sIGluIGNhc2UgbG93IGxldmVsIGlzIGFscmVhZHkgdXAgYW5kCisJICoganVzdCBsYXllcmVkIGRyaXZlciB3YXMgcmVsb2FkZWQsIGV0Yy4KKwkgKi8KKwlpZiAoaW50dmFsKQorCQlsYXllcl9pbnRyKGRkLT5pcGF0aF9sYXllci5sX2FyZywgaW50dmFsKTsKKworCXJldCA9IDA7CitiYWlsOgorCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfb3Blbik7CisKK3UxNiBpcGF0aF9sYXllcl9nZXRfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX2xpZDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2xpZCk7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfZ2V0X21hYyAtIGdldCB0aGUgTUFDIGFkZHJlc3MKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbWFjOiB0aGUgTUFDIGlzIHB1dCBoZXJlCisgKgorICogVGhpcyBpcyB0aGUgRVVJRC02NCBPVUkgb2N0ZXRzICh0b3AgMyksIHRoZW4KKyAqIHNraXAgdGhlIG5leHQgMiAod2hpY2ggc2hvdWxkIGJvdGggYmUgemVybyBvciAweGZmKS4KKyAqIFRoZSByZXR1cm5lZCBNQUMgaXMgaW4gbmV0d29yayBvcmRlcgorICogbWFjIHBvaW50cyB0byBhdCBsZWFzdCA2IGJ5dGVzIG9mIGJ1ZmZlcgorICogV2UgYXNzdW1lIHRoYXQgYnkgdGhlIHRpbWUgdGhlIExJRCBpcyBzZXQsIHRoYXQgdGhlIEdVSUQgaXMgYXMgdmFsaWQKKyAqIGFzIGl0J3MgZXZlciBnb2luZyB0byBiZSwgcmF0aGVyIHRoYW4gYWRkaW5nIHlldCBhbm90aGVyIHN0YXR1cyBiaXQuCisgKi8KKworaW50IGlwYXRoX2xheWVyX2dldF9tYWMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCAqIG1hYykKK3sKKwl1OCAqZ3VpZDsKKworCWd1aWQgPSAodTggKikgJmRkLT5pcGF0aF9ndWlkOworCisJbWFjWzBdID0gZ3VpZFswXTsKKwltYWNbMV0gPSBndWlkWzFdOworCW1hY1syXSA9IGd1aWRbMl07CisJbWFjWzNdID0gZ3VpZFs1XTsKKwltYWNbNF0gPSBndWlkWzZdOworCW1hY1s1XSA9IGd1aWRbN107CisJaWYgKChndWlkWzNdIHx8IGd1aWRbNF0pICYmICEoZ3VpZFszXSA9PSAweGZmICYmIGd1aWRbNF0gPT0gMHhmZikpCisJCWlwYXRoX2RiZygiV2FybmluZywgZ3VpZCBieXRlcyAzIGFuZCA0IG5vdCAwIG9yIDB4ZmZmZjogIgorCQkJICAiJXggJXhcbiIsIGd1aWRbM10sIGd1aWRbNF0pOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbWFjKTsKKwordTE2IGlwYXRoX2xheWVyX2dldF9iY2FzdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkLT5pcGF0aF9tbGlkOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfYmNhc3QpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBpcGF0aF9yZWFkX2NyZWczMihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJwa2V5KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkpOworCitzdGF0aWMgdm9pZCB1cGRhdGVfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuZ3RoKQoreworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOworCisJc2dlLT52YWRkciArPSBsZW5ndGg7CisJc2dlLT5sZW5ndGggLT0gbGVuZ3RoOworCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW5ndGg7CisJaWYgKHNnZS0+c2dlX2xlbmd0aCA9PSAwKSB7CisJCWlmICgtLXNzLT5udW1fc2dlKQorCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOworCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKKwkJaWYgKCsrc2dlLT5uID49IElQQVRIX1NFR1NaKSB7CisJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJcmV0dXJuOworCQkJc2dlLT5uID0gMDsKKwkJfQorCQlzZ2UtPnZhZGRyID0gc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS52YWRkcjsKKwkJc2dlLT5sZW5ndGggPSBzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLmxlbmd0aDsKKwl9Cit9CisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyBpbmxpbmUgdTMyIGdldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIGRhdGEgPj4gc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIGRhdGEgPDwgc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNsZWFyX3VwcGVyX2J5dGVzKHUzMiBkYXRhLCB1MzIgbiwgdTMyIG9mZikKK3sKKwlkYXRhIDw8PSAoKHNpemVvZih1MzIpIC0gbikgKiBCSVRTX1BFUl9CWVRFKTsKKwlkYXRhID4+PSAoKHNpemVvZih1MzIpIC0gbiAtIG9mZikgKiBCSVRTX1BFUl9CWVRFKTsKKwlyZXR1cm4gZGF0YTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfdXBwZXJfYml0cyh1MzIgZGF0YSwgdTMyIHNoaWZ0KQoreworCXJldHVybiBkYXRhIDw8IHNoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzZXRfdXBwZXJfYml0cyh1MzIgZGF0YSwgdTMyIHNoaWZ0KQoreworCXJldHVybiBkYXRhID4+IHNoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjbGVhcl91cHBlcl9ieXRlcyh1MzIgZGF0YSwgdTMyIG4sIHUzMiBvZmYpCit7CisJZGF0YSA+Pj0gKChzaXplb2YodTMyKSAtIG4pICogQklUU19QRVJfQllURSk7CisJZGF0YSA8PD0gKChzaXplb2YodTMyKSAtIG4gLSBvZmYpICogQklUU19QRVJfQllURSk7CisJcmV0dXJuIGRhdGE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgY29weV9pbyh1MzIgX19pb21lbSAqcGlvYnVmLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJICAgIHUzMiBsZW5ndGgpCit7CisJdTMyIGV4dHJhID0gMDsKKwl1MzIgZGF0YSA9IDA7CisJdTMyIGxhc3Q7CisKKwl3aGlsZSAoMSkgeworCQl1MzIgbGVuID0gc3MtPnNnZS5sZW5ndGg7CisJCXUzMiBvZmY7CisKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IGxlbmd0aDsKKwkJaWYgKGxlbiA+IHNzLT5zZ2Uuc2dlX2xlbmd0aCkKKwkJCWxlbiA9IHNzLT5zZ2Uuc2dlX2xlbmd0aDsKKwkJLyogSWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkLCB0cnkgdG8gYWxpZ24gaXQuICovCisJCW9mZiA9ICh1bnNpZ25lZCBsb25nKXNzLT5zZ2UudmFkZHIgJiAoc2l6ZW9mKHUzMikgLSAxKTsKKwkJaWYgKG9mZikgeworCQkJdTMyICphZGRyID0gKHUzMiAqKSgodW5zaWduZWQgbG9uZylzcy0+c2dlLnZhZGRyICYKKwkJCQkJICAgIH4oc2l6ZW9mKHUzMikgLSAxKSk7CisJCQl1MzIgdiA9IGdldF91cHBlcl9iaXRzKCphZGRyLCBvZmYgKiBCSVRTX1BFUl9CWVRFKTsKKwkJCXUzMiB5OworCisJCQl5ID0gc2l6ZW9mKHUzMikgLSBvZmY7CisJCQlpZiAobGVuID4geSkKKwkJCQlsZW4gPSB5OworCQkJaWYgKGxlbiArIGV4dHJhID49IHNpemVvZih1MzIpKSB7CisJCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBleHRyYSAqCisJCQkJCQkgICAgICAgQklUU19QRVJfQllURSk7CisJCQkJbGVuID0gc2l6ZW9mKHUzMikgLSBleHRyYTsKKwkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQlsYXN0ID0gZGF0YTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBwaW9idWYpOworCQkJCXBpb2J1ZisrOworCQkJCWV4dHJhID0gMDsKKwkJCQlkYXRhID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ2xlYXIgdW51c2VkIHVwcGVyIGJ5dGVzICovCisJCQkJZGF0YSB8PSBjbGVhcl91cHBlcl9ieXRlcyh2LCBsZW4sIGV4dHJhKTsKKwkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQlsYXN0ID0gZGF0YTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWV4dHJhICs9IGxlbjsKKwkJCX0KKwkJfSBlbHNlIGlmIChleHRyYSkgeworCQkJLyogU291cmNlIGFkZHJlc3MgaXMgYWxpZ25lZC4gKi8KKwkJCXUzMiAqYWRkciA9ICh1MzIgKikgc3MtPnNnZS52YWRkcjsKKwkJCWludCBzaGlmdCA9IGV4dHJhICogQklUU19QRVJfQllURTsKKwkJCWludCB1c2hpZnQgPSAzMiAtIHNoaWZ0OworCQkJdTMyIGwgPSBsZW47CisKKwkJCXdoaWxlIChsID49IHNpemVvZih1MzIpKSB7CisJCQkJdTMyIHYgPSAqYWRkcjsKKworCQkJCWRhdGEgfD0gc2V0X3VwcGVyX2JpdHModiwgc2hpZnQpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBwaW9idWYpOworCQkJCWRhdGEgPSBnZXRfdXBwZXJfYml0cyh2LCB1c2hpZnQpOworCQkJCXBpb2J1ZisrOworCQkJCWFkZHIrKzsKKwkJCQlsIC09IHNpemVvZih1MzIpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIHN0aWxsIGhhdmUgJ2V4dHJhJyBudW1iZXIgb2YgYnl0ZXMgbGVmdG92ZXIuCisJCQkgKi8KKwkJCWlmIChsKSB7CisJCQkJdTMyIHYgPSAqYWRkcjsKKworCQkJCWlmIChsICsgZXh0cmEgPj0gc2l6ZW9mKHUzMikpIHsKKwkJCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBzaGlmdCk7CisJCQkJCWxlbiAtPSBsICsgZXh0cmEgLSBzaXplb2YodTMyKTsKKwkJCQkJaWYgKGxlbiA9PSBsZW5ndGgpIHsKKwkJCQkJCWxhc3QgPSBkYXRhOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJX19yYXdfd3JpdGVsKGRhdGEsIHBpb2J1Zik7CisJCQkJCXBpb2J1ZisrOworCQkJCQlleHRyYSA9IDA7CisJCQkJCWRhdGEgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIENsZWFyIHVudXNlZCB1cHBlciBieXRlcyAqLworCQkJCQlkYXRhIHw9IGNsZWFyX3VwcGVyX2J5dGVzKHYsIGwsCisJCQkJCQkJCSAgZXh0cmEpOworCQkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQkJbGFzdCA9IGRhdGE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlleHRyYSArPSBsOworCQkJCX0KKwkJCX0gZWxzZSBpZiAobGVuID09IGxlbmd0aCkgeworCQkJCWxhc3QgPSBkYXRhOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGxlbiA9PSBsZW5ndGgpIHsKKwkJCXUzMiB3OworCisJCQkvKgorCQkJICogTmVlZCB0byByb3VuZCB1cCBmb3IgdGhlIGxhc3QgZHdvcmQgaW4gdGhlCisJCQkgKiBwYWNrZXQuCisJCQkgKi8KKwkJCXcgPSAobGVuICsgMykgPj4gMjsKKwkJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBzcy0+c2dlLnZhZGRyLCB3IC0gMSk7CisJCQlwaW9idWYgKz0gdyAtIDE7CisJCQlsYXN0ID0gKCh1MzIgKikgc3MtPnNnZS52YWRkcilbdyAtIDFdOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl1MzIgdyA9IGxlbiA+PiAyOworCisJCQlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1Ziwgc3MtPnNnZS52YWRkciwgdyk7CisJCQlwaW9idWYgKz0gdzsKKworCQkJZXh0cmEgPSBsZW4gJiAoc2l6ZW9mKHUzMikgLSAxKTsKKwkJCWlmIChleHRyYSkgeworCQkJCXUzMiB2ID0gKCh1MzIgKikgc3MtPnNnZS52YWRkcilbd107CisKKwkJCQkvKiBDbGVhciB1bnVzZWQgdXBwZXIgYnl0ZXMgKi8KKwkJCQlkYXRhID0gY2xlYXJfdXBwZXJfYnl0ZXModiwgZXh0cmEsIDApOworCQkJfQorCQl9CisJCXVwZGF0ZV9zZ2Uoc3MsIGxlbik7CisJCWxlbmd0aCAtPSBsZW47CisJfQorCS8qIFVwZGF0ZSBhZGRyZXNzIGJlZm9yZSBzZW5kaW5nIHBhY2tldC4gKi8KKwl1cGRhdGVfc2dlKHNzLCBsZW5ndGgpOworCS8qIG11c3QgZmx1c2ggZWFybHkgZXZlcnl0aGluZyBiZWZvcmUgdHJpZ2dlciB3b3JkICovCisJaXBhdGhfZmx1c2hfd2MoKTsKKwlfX3Jhd193cml0ZWwobGFzdCwgcGlvYnVmKTsKKwkvKiBiZSBzdXJlIHRyaWdnZXIgd29yZCBpcyB3cml0dGVuICovCisJaXBhdGhfZmx1c2hfd2MoKTsKK30KKworLyoqCisgKiBpcGF0aF92ZXJic19zZW5kIC0gc2VuZCBhIHBhY2tldCBmcm9tIHRoZSB2ZXJicyBsYXllcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBoZHJ3b3JkczogdGhlIG51bWJlciBvZiB3b3JrcyBpbiB0aGUgaGVhZGVyCisgKiBAaGRyOiB0aGUgcGFja2V0IGhlYWRlcgorICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGluIGJ5dGVzCisgKiBAc3M6IHRoZSBTR0UgdG8gc2VuZAorICoKKyAqIFRoaXMgaXMgbGlrZSBpcGF0aF9zbWFfc2VuZF9wa3QoKSBpbiB0aGF0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzZW5kCisgKiBwYWNrZXRzIGFmdGVyIHRoZSBjaGlwIGlzIGluaXRpYWxpemVkIChNQURzKSBidXQgYWxzbyBsaWtlCisgKiBpcGF0aF9sYXllcl9zZW5kX2hkcigpIHNpbmNlIGl0cyB1c2VkIGJ5IHRoZSB2ZXJicyBsYXllci4KKyAqLworaW50IGlwYXRoX3ZlcmJzX3NlbmQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgaGRyd29yZHMsCisJCSAgICAgdTMyICpoZHIsIHUzMiBsZW4sIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzKQoreworCXUzMiBfX2lvbWVtICpwaW9idWY7CisJdTMyIHBsZW47CisJaW50IHJldDsKKworCS8qICsxIGlzIGZvciB0aGUgcXdvcmQgcGFkZGluZyBvZiBwYmMgKi8KKwlwbGVuID0gaGRyd29yZHMgKyAoKGxlbiArIDMpID4+IDIpICsgMTsKKwlpZiAodW5saWtlbHkoKHBsZW4gPDwgMikgPiBkZC0+aXBhdGhfaWJtYXhsZW4pKSB7CisJCWlwYXRoX2RiZygicGFja2V0IGxlbiAweCV4IHRvbyBsb25nLCBmYWlsaW5nXG4iLCBwbGVuKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCS8qIEdldCBhIFBJTyBidWZmZXIgdG8gdXNlLiAqLworCXBpb2J1ZiA9IGlwYXRoX2dldHBpb2J1ZihkZCwgTlVMTCk7CisJaWYgKHVubGlrZWx5KHBpb2J1ZiA9PSBOVUxMKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKgorCSAqIFdyaXRlIGxlbiB0byBjb250cm9sIHF3b3JkLCBubyBmbGFncy4KKwkgKiBXZSBoYXZlIHRvIGZsdXNoIGFmdGVyIHRoZSBQQkMgZm9yIGNvcnJlY3RuZXNzIG9uIHNvbWUgY3B1cworCSAqIG9yIFdDIGJ1ZmZlciBjYW4gYmUgd3JpdHRlbiBvdXQgb2Ygb3JkZXIuCisJICovCisJd3JpdGVxKHBsZW4sIHBpb2J1Zik7CisJaXBhdGhfZmx1c2hfd2MoKTsKKwlwaW9idWYgKz0gMjsKKwlpZiAobGVuID09IDApIHsKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMganVzdCB0aGUgaGVhZGVyIHBvcnRpb24sIG11c3QgZmx1c2ggYmVmb3JlCisJCSAqIHdyaXRpbmcgbGFzdCB3b3JkIG9mIGhlYWRlciBmb3IgY29ycmVjdG5lc3MsIGFuZCBhZnRlcgorCQkgKiB0aGUgbGFzdCBoZWFkZXIgd29yZCAodHJpZ2dlciB3b3JkKS4KKwkJICovCisJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBoZHIsIGhkcndvcmRzIC0gMSk7CisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCV9fcmF3X3dyaXRlbChoZHJbaGRyd29yZHMgLSAxXSwgcGlvYnVmICsgaGRyd29yZHMgLSAxKTsKKwkJaXBhdGhfZmx1c2hfd2MoKTsKKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCX0KKworCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBoZHIsIGhkcndvcmRzKTsKKwlwaW9idWYgKz0gaGRyd29yZHM7CisKKwkvKiBUaGUgY29tbW9uIGNhc2UgaXMgYWxpZ25lZCBhbmQgY29udGFpbmVkIGluIG9uZSBzZWdtZW50LiAqLworCWlmIChsaWtlbHkoc3MtPm51bV9zZ2UgPT0gMSAmJiBsZW4gPD0gc3MtPnNnZS5sZW5ndGggJiYKKwkJICAgISgodW5zaWduZWQgbG9uZylzcy0+c2dlLnZhZGRyICYgKHNpemVvZih1MzIpIC0gMSkpKSkgeworCQl1MzIgdzsKKwkJdTMyICphZGRyID0gKHUzMiAqKSBzcy0+c2dlLnZhZGRyOworCisJCS8qIFVwZGF0ZSBhZGRyZXNzIGJlZm9yZSBzZW5kaW5nIHBhY2tldC4gKi8KKwkJdXBkYXRlX3NnZShzcywgbGVuKTsKKwkJLyogTmVlZCB0byByb3VuZCB1cCBmb3IgdGhlIGxhc3QgZHdvcmQgaW4gdGhlIHBhY2tldC4gKi8KKwkJdyA9IChsZW4gKyAzKSA+PiAyOworCQlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1ZiwgYWRkciwgdyAtIDEpOworCQkvKiBtdXN0IGZsdXNoIGVhcmx5IGV2ZXJ5dGhpbmcgYmVmb3JlIHRyaWdnZXIgd29yZCAqLworCQlpcGF0aF9mbHVzaF93YygpOworCQlfX3Jhd193cml0ZWwoYWRkclt3IC0gMV0sIHBpb2J1ZiArIHcgLSAxKTsKKwkJLyogYmUgc3VyZSB0cmlnZ2VyIHdvcmQgaXMgd3JpdHRlbiAqLworCQlpcGF0aF9mbHVzaF93YygpOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCWNvcHlfaW8ocGlvYnVmLCBzcywgbGVuKTsKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX3ZlcmJzX3NlbmQpOworCitpbnQgaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgKnN3b3JkcywKKwkJCQkgIHU2NCAqcndvcmRzLCB1NjQgKnNwa3RzLCB1NjQgKnJwa3RzLAorCQkJCSAgdTY0ICp4bWl0X3dhaXQpCit7CisJaW50IHJldDsKKworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpKSB7CisJCS8qIG5vIGhhcmR3YXJlLCBmcmVlemUsIGV0Yy4gKi8KKwkJaXBhdGhfZGJnKCJ1bml0ICV1IG5vdCB1c2FibGVcbiIsIGRkLT5pcGF0aF91bml0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwkqc3dvcmRzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250KTsKKwkqcndvcmRzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRyY3ZjbnQpOworCSpzcGt0cyA9IGlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RzZW5kY250KTsKKwkqcnBrdHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KTsKKwkqeG1pdF93YWl0ID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3NlbmRzdGFsbGNudCk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9nZXRfY291bnRlcnMgLSBnZXQgdmFyaW91cyBjaGlwIGNvdW50ZXJzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGNudHJzOiBjb3VudGVycyBhcmUgcGxhY2VkIGhlcmUKKyAqCisgKiBSZXR1cm4gdGhlIGNvdW50ZXJzIG5lZWRlZCBieSByZWN2X3BtYV9nZXRfcG9ydGNvdW50ZXJzKCkuCisgKi8KK2ludCBpcGF0aF9sYXllcl9nZXRfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJICAgICAgc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzICpjbnRycykKK3sKKwlpbnQgcmV0OworCisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpIHsKKwkJLyogbm8gaGFyZHdhcmUsIGZyZWV6ZSwgZXRjLiAqLworCQlpcGF0aF9kYmcoInVuaXQgJXUgbm90IHVzYWJsZVxuIiwgZGQtPmlwYXRoX3VuaXQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCWNudHJzLT5zeW1ib2xfZXJyb3JfY291bnRlciA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYnN5bWJvbGVycmNudCk7CisJY250cnMtPmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYmxpbmtlcnJyZWNvdmNudCk7CisJY250cnMtPmxpbmtfZG93bmVkX2NvdW50ZXIgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfaWJsaW5rZG93bmNudCk7CisJY250cnMtPnBvcnRfcmN2X2Vycm9ycyA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9yeGRyb3Bwa3RjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3Jjdm92ZmxjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BvcnRvdmZsY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJyY3ZmbG93Y3RybGNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJyX3JsZW5jbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2ludmFsaWRybGVuY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJpY3JjY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJ2Y3JjY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJscGNyY2NudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJybGlua2NudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfYmFkZm9ybWF0Y250KTsKKwljbnRycy0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcmN2ZWJwY250KTsKKwljbnRycy0+cG9ydF94bWl0X2Rpc2NhcmRzID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3Vuc3VwdmxjbnQpOworCWNudHJzLT5wb3J0X3htaXRfZGF0YSA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl93b3Jkc2VuZGNudCk7CisJY250cnMtPnBvcnRfcmN2X2RhdGEgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHJjdmNudCk7CisJY250cnMtPnBvcnRfeG1pdF9wYWNrZXRzID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHNlbmRjbnQpOworCWNudHJzLT5wb3J0X3Jjdl9wYWNrZXRzID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHJjdmNudCk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9jb3VudGVycyk7CisKK2ludCBpcGF0aF9sYXllcl93YW50X2J1ZmZlcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc2V0X2JpdChJUEFUSF9TX1BJT0lOVEJVRkFWQUlMLCAmZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfd2FudF9idWZmZXIpOworCitpbnQgaXBhdGhfbGF5ZXJfc2VuZF9oZHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpoZHIpCit7CisJaW50IHJldCA9IDA7CisJdTMyIF9faW9tZW0gKnBpb2J1ZjsKKwl1MzIgcGxlbiwgKnVoZHI7CisJc2l6ZV90IGNvdW50OworCV9fYmUxNiB2bHNsbG5oOworCisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUkNWSERSU1pfU0VUKSkgeworCQlpcGF0aF9kYmcoInNlbmQgd2hpbGUgbm90IG9wZW5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZQorCQlpZiAoKGRkLT5pcGF0aF9mbGFncyAmIChJUEFUSF9MSU5LVU5LIHwgSVBBVEhfTElOS0RPV04pKSB8fAorCQkgICAgZGQtPmlwYXRoX2xpZCA9PSAwKSB7CisJCQkvKgorCQkJICogbGlkIGNoZWNrIGlzIGZvciB3aGVuIHNtYSBoYXNuJ3QgeWV0IGNvbmZpZ3VyZWQKKwkJCSAqLworCQkJcmV0ID0gLUVORVRET1dOOworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAic2VuZCB3aGlsZSBub3QgcmVhZHksICIKKwkJCQkgICAibXlsaWQ9JXUsIGZsYWdzPTB4JXhcbiIsCisJCQkJICAgZGQtPmlwYXRoX2xpZCwgZGQtPmlwYXRoX2ZsYWdzKTsKKwkJfQorCisJdmxzbGxuaCA9ICooKF9fYmUxNiAqKSBoZHIpOworCWlmICh2bHNsbG5oICE9IGh0b25zKElQU19MUkhfQlRIKSkgeworCQlpcGF0aF9kYmcoIldhcm5pbmc6IGxyaFswXSB3cm9uZyAoJXgsIG5vdCAleCk7ICIKKwkJCSAgIm5vdCBzZW5kaW5nXG4iLCBiZTE2X3RvX2NwdSh2bHNsbG5oKSwKKwkJCSAgSVBTX0xSSF9CVEgpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwkvKiBHZXQgYSBQSU8gYnVmZmVyIHRvIHVzZS4gKi8KKwlwaW9idWYgPSBpcGF0aF9nZXRwaW9idWYoZGQsIE5VTEwpOworCWlmIChwaW9idWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlwbGVuID0gKHNpemVvZigqaGRyKSA+PiAyKTsgLyogYWN0dWFsIGxlbmd0aCAqLworCWlwYXRoX2NkYmcoRVBLVCwgIjB4JXgrMXcgcGlvICVwXG4iLCBwbGVuLCBwaW9idWYpOworCisJd3JpdGVxKHBsZW4rMSwgcGlvYnVmKTsgLyogbGVuICgrMSBmb3IgcGFkKSB0byBwYmMsIG5vIGZsYWdzICovCisJaXBhdGhfZmx1c2hfd2MoKTsKKwlwaW9idWYgKz0gMjsKKwl1aGRyID0gKHUzMiAqKWhkcjsKKwljb3VudCA9IHBsZW4tMTsgLyogYW1vdW50IHdlIGNhbiBjb3B5IGJlZm9yZSB0cmlnZ2VyIHdvcmQgKi8KKwlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1ZiwgdWhkciwgY291bnQpOworCWlwYXRoX2ZsdXNoX3djKCk7CisJX19yYXdfd3JpdGVsKHVoZHJbY291bnRdLCBwaW9idWYgKyBjb3VudCk7CisJaXBhdGhfZmx1c2hfd2MoKTsgLyogZW5zdXJlIGl0J3Mgc2VudCwgbm93ICovCisKKwlpcGF0aF9zdGF0cy5zcHNfZXRoZXJfc3BrdHMrKzsJLyogZXRoZXIgcGFja2V0IHNlbnQgKi8KKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZW5kX2hkcik7CisKK2ludCBpcGF0aF9sYXllcl9zZXRfcGlvaW50YnVmYXZhaWxfaW50KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzZXRfYml0KElQQVRIX1NfUElPSU5UQlVGQVZBSUwsICZkZC0+aXBhdGhfc2VuZGN0cmwpOworCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCSBkZC0+aXBhdGhfc2VuZGN0cmwpOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfcGlvaW50YnVmYXZhaWxfaW50KTsKKworaW50IGlwYXRoX2xheWVyX2VuYWJsZV90aW1lcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJLyoKKwkgKiBIVC00MDAgaGFzIGEgZGVzaWduIGZsYXcgd2hlcmUgdGhlIGNoaXAgYW5kIGtlcm5lbCBpZGVhCisJICogb2YgdGhlIHRhaWwgcmVnaXN0ZXIgZG9uJ3QgYWx3YXlzIGFncmVlLCBhbmQgdGhlcmVmb3JlIHdlIHdvbid0CisJICogZ2V0IGFuIGludGVycnVwdCBvbiB0aGUgbmV4dCBwYWNrZXQgcmVjZWl2ZWQuCisJICogSWYgdGhlIGJvYXJkIHN1cHBvcnRzIHBlciBwYWNrZXQgcmVjZWl2ZSBpbnRlcnJ1cHRzLCB1c2UgaXQuCisJICogT3RoZXJ3aXNlLCB0aGUgdGltZXIgZnVuY3Rpb24gcGVyaW9kaWNhbGx5IGNoZWNrcyBmb3IgcGFja2V0cworCSAqIHRvIGNvdmVyIHRoaXMgY2FzZS4KKwkgKiBFaXRoZXIgd2F5LCB0aGUgdGltZXIgaXMgbmVlZGVkIGZvciB2ZXJicyBsYXllciByZWxhdGVkCisJICogcHJvY2Vzc2luZy4KKwkgKi8KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfR1BJT19JTlRSKSB7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZGVidWdwb3J0c2VsZWN0LAorCQkJCSAweDIwNzQwNzY1NDIzMTBVTEwpOworCQkvKiBFbmFibGUgR1BJTyBiaXQgMiBpbnRlcnJ1cHQgKi8KKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX21hc2ssCisJCQkJICh1NjQpICgxIDw8IDIpKTsKKwl9CisKKwlpbml0X3RpbWVyKCZkZC0+dmVyYnNfbGF5ZXIubF90aW1lcik7CisJZGQtPnZlcmJzX2xheWVyLmxfdGltZXIuZnVuY3Rpb24gPSBfX2lwYXRoX3ZlcmJzX3RpbWVyOworCWRkLT52ZXJic19sYXllci5sX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZDsKKwlkZC0+dmVyYnNfbGF5ZXIubF90aW1lci5leHBpcmVzID0gamlmZmllcyArIDE7CisJYWRkX3RpbWVyKCZkZC0+dmVyYnNfbGF5ZXIubF90aW1lcik7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZW5hYmxlX3RpbWVyKTsKKworaW50IGlwYXRoX2xheWVyX2Rpc2FibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCS8qIERpc2FibGUgR1BJTyBiaXQgMiBpbnRlcnJ1cHQgKi8KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfR1BJT19JTlRSKQorCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzaywgMCk7CisKKwlkZWxfdGltZXJfc3luYygmZGQtPnZlcmJzX2xheWVyLmxfdGltZXIpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2Rpc2FibGVfdGltZXIpOworCisvKioKKyAqIGlwYXRoX2xheWVyX3NldF92ZXJic19mbGFncyAtIHNldCB0aGUgdmVyYnMgbGF5ZXIgZmxhZ3MKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAZmxhZ3M6IHRoZSBmbGFncyB0byBzZXQKKyAqLworaW50IGlwYXRoX2xheWVyX3NldF92ZXJic19mbGFncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpzczsKKwl1bnNpZ25lZCBsb25nIGxmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGxmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKKwkJaWYgKCEoc3MtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpCisJCQljb250aW51ZTsKKwkJaWYgKChmbGFncyAmIElQQVRIX1ZFUkJTX0tFUk5FTF9TTUEpICYmCisJCSAgICAhKCpzcy0+aXBhdGhfc3RhdHVzcCAmIElQQVRIX1NUQVRVU19TTUEpKQorCQkJKnNzLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19PSUJfU01BOworCQllbHNlCisJCQkqc3MtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19PSUJfU01BOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgbGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfdmVyYnNfZmxhZ3MpOworCisvKioKKyAqIGlwYXRoX2xheWVyX2dldF9ucGtleXMgLSByZXR1cm4gdGhlIHNpemUgb2YgdGhlIFBLRVkgdGFibGUgZm9yIHBvcnQgMAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqLwordW5zaWduZWQgaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3BrZXlzKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyk7CisKKy8qKgorICogaXBhdGhfbGF5ZXJfZ2V0X3BrZXkgLSByZXR1cm4gdGhlIGluZGV4ZWQgUEtFWSBmcm9tIHRoZSBwb3J0IDAgUEtFWSB0YWJsZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBpbmRleDogdGhlIFBLRVkgaW5kZXgKKyAqLwordW5zaWduZWQgaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBpbmRleCkKK3sKKwl1bnNpZ25lZCByZXQ7CisKKwlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcGtleXMpKQorCQlyZXQgPSAwOworCWVsc2UKKwkJcmV0ID0gZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3BrZXlzW2luZGV4XTsKKworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9wa2V5KTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9nZXRfcGtleXMgLSByZXR1cm4gdGhlIFBLRVkgdGFibGUgZm9yIHBvcnQgMAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwa2V5czogdGhlIHBrZXkgdGFibGUgaXMgcGxhY2VkIGhlcmUKKyAqLworaW50IGlwYXRoX2xheWVyX2dldF9wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiAqIHBrZXlzKQoreworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbMF07CisKKwltZW1jcHkocGtleXMsIHBkLT5wb3J0X3BrZXlzLCBzaXplb2YocGQtPnBvcnRfcGtleXMpKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfcGtleXMpOworCisvKioKKyAqIHJtX3BrZXkgLSBkZWNyZWNtZW50IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBnaXZlbiBQS0VZCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGtleTogdGhlIFBLRVkgaW5kZXgKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHdhcyB0aGUgbGFzdCByZWZlcmVuY2UgYW5kIHRoZSBoYXJkd2FyZSB0YWJsZSBlbnRyeQorICogbmVlZHMgdG8gYmUgY2hhbmdlZC4KKyAqLworc3RhdGljIGludCBybV9wa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2IGtleSkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BrZXlzKTsgaSsrKSB7CisJCWlmIChkZC0+aXBhdGhfcGtleXNbaV0gIT0ga2V5KQorCQkJY29udGludWU7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZC0+aXBhdGhfcGtleXJlZnNbaV0pKSB7CisJCQlkZC0+aXBhdGhfcGtleXNbaV0gPSAwOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYWRkX3BrZXkgLSBhZGQgdGhlIGdpdmVuIFBLRVkgdG8gdGhlIGhhcmR3YXJlIHRhYmxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGtleTogdGhlIFBLRVkKKyAqCisgKiBSZXR1cm4gYW4gZXJyb3IgY29kZSBpZiB1bmFibGUgdG8gYWRkIHRoZSBlbnRyeSwgemVybyBpZiBubyBjaGFuZ2UsCisgKiBvciAxIGlmIHRoZSBoYXJkd2FyZSBQS0VZIHJlZ2lzdGVyIG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgKi8KK3N0YXRpYyBpbnQgYWRkX3BrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYga2V5KQoreworCWludCBpOworCXUxNiBsa2V5ID0ga2V5ICYgMHg3RkZGOworCWludCBhbnkgPSAwOworCWludCByZXQ7CisKKwlpZiAobGtleSA9PSAweDdGRkYpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCX0KKworCS8qIExvb2sgZm9yIGFuIGVtcHR5IHNsb3Qgb3IgYSBtYXRjaGluZyBQS0VZLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGkrKykgeworCQlpZiAoIWRkLT5pcGF0aF9wa2V5c1tpXSkgeworCQkJYW55Kys7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBJZiBpdCBtYXRjaGVzIGV4YWN0bHksIHRyeSB0byBpbmNyZW1lbnQgdGhlIHJlZiBjb3VudCAqLworCQlpZiAoZGQtPmlwYXRoX3BrZXlzW2ldID09IGtleSkgeworCQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZkZC0+aXBhdGhfcGtleXJlZnNbaV0pID4gMSkgeworCQkJCXJldCA9IDA7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJLyogTG9zdCB0aGUgcmFjZS4gTG9vayBmb3IgYW4gZW1wdHkgc2xvdCBiZWxvdy4gKi8KKwkJCWF0b21pY19kZWMoJmRkLT5pcGF0aF9wa2V5cmVmc1tpXSk7CisJCQlhbnkrKzsKKwkJfQorCQkvKgorCQkgKiBJdCBtYWtlcyBubyBzZW5zZSB0byBoYXZlIGJvdGggdGhlIGxpbWl0ZWQgYW5kIHVubGltaXRlZAorCQkgKiBQS0VZIHNldCBhdCB0aGUgc2FtZSB0aW1lIHNpbmNlIHRoZSB1bmxpbWl0ZWQgb25lIHdpbGwKKwkJICogZGlzYWJsZSB0aGUgbGltaXRlZCBvbmUuCisJCSAqLworCQlpZiAoKGRkLT5pcGF0aF9wa2V5c1tpXSAmIDB4N0ZGRikgPT0gbGtleSkgeworCQkJcmV0ID0gLUVFWElTVDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlpZiAoIWFueSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gYmFpbDsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BrZXlzKTsgaSsrKSB7CisJCWlmICghZGQtPmlwYXRoX3BrZXlzW2ldICYmCisJCSAgICBhdG9taWNfaW5jX3JldHVybigmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKSA9PSAxKSB7CisJCQkvKiBmb3IgaXBhdGhzdGF0cywgZXRjLiAqLworCQkJaXBhdGhfc3RhdHMuc3BzX3BrZXlzW2ldID0gbGtleTsKKwkJCWRkLT5pcGF0aF9wa2V5c1tpXSA9IGtleTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJcmV0ID0gLUVCVVNZOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfbGF5ZXJfc2V0X3BrZXlzIC0gc2V0IHRoZSBQS0VZIHRhYmxlIGZvciBwb3J0IDAKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcGtleXM6IHRoZSBQS0VZIHRhYmxlCisgKi8KK2ludCBpcGF0aF9sYXllcl9zZXRfcGtleXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYgKiBwa2V5cykKK3sKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOworCWludCBpOworCWludCBjaGFuZ2VkID0gMDsKKworCXBkID0gZGQtPmlwYXRoX3BkWzBdOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGQtPnBvcnRfcGtleXMpOyBpKyspIHsKKwkJdTE2IGtleSA9IHBrZXlzW2ldOworCQl1MTYgb2tleSA9IHBkLT5wb3J0X3BrZXlzW2ldOworCisJCWlmIChrZXkgPT0gb2tleSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBUaGUgdmFsdWUgb2YgdGhpcyBQS0VZIHRhYmxlIGVudHJ5IGlzIGNoYW5naW5nLgorCQkgKiBSZW1vdmUgdGhlIG9sZCBlbnRyeSBpbiB0aGUgaGFyZHdhcmUncyBhcnJheSBvZiBQS0VZcy4KKwkJICovCisJCWlmIChva2V5ICYgMHg3RkZGKQorCQkJY2hhbmdlZCB8PSBybV9wa2V5KGRkLCBva2V5KTsKKwkJaWYgKGtleSAmIDB4N0ZGRikgeworCQkJaW50IHJldCA9IGFkZF9wa2V5KGRkLCBrZXkpOworCisJCQlpZiAocmV0IDwgMCkKKwkJCQlrZXkgPSAwOworCQkJZWxzZQorCQkJCWNoYW5nZWQgfD0gcmV0OworCQl9CisJCXBkLT5wb3J0X3BrZXlzW2ldID0ga2V5OworCX0KKwlpZiAoY2hhbmdlZCkgeworCQl1NjQgcGtleTsKKworCQlwa2V5ID0gKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzBdIHwKKwkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMV0gPDwgMTYpIHwKKwkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbMl0gPDwgMzIpIHwKKwkJCSgodTY0KSBkZC0+aXBhdGhfcGtleXNbM10gPDwgNDgpOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwMCBuZXcgcGtleSByZWcgJWxseFxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrZXkpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3BhcnRpdGlvbmtleSwKKwkJCQkgcGtleSk7CisJfQorCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfcGtleXMpOworCisvKioKKyAqIGlwYXRoX2xheWVyX2dldF9saW5rZG93bmRlZmF1bHRzdGF0ZSAtIGdldCB0aGUgZGVmYXVsdCBsaW5rZG93biBzdGF0ZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgdGhlIGRlZmF1bHQgaXMgUE9MTCwgMSBpZiB0aGUgZGVmYXVsdCBpcyBTTEVFUC4KKyAqLworaW50IGlwYXRoX2xheWVyX2dldF9saW5rZG93bmRlZmF1bHRzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuICEhKGRkLT5pcGF0aF9pYmNjdHJsICYgSU5GSU5JUEFUSF9JQkNDX0xJTktET1dOREVGQVVMVFNUQVRFKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9zZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUgLSBzZXQgdGhlIGRlZmF1bHQgbGlua2Rvd24gc3RhdGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAc2xlZXA6IHRoZSBuZXcgc3RhdGUKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgbGluayBzdGF0ZSBjaGFuZ2VzLgorICovCitpbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkJIGludCBzbGVlcCkKK3sKKwlpZiAoc2xlZXApCisJCWRkLT5pcGF0aF9pYmNjdHJsIHw9IElORklOSVBBVEhfSUJDQ19MSU5LRE9XTkRFRkFVTFRTVEFURTsKKwllbHNlCisJCWRkLT5pcGF0aF9pYmNjdHJsICY9IH5JTkZJTklQQVRIX0lCQ0NfTElOS0RPV05ERUZBVUxUU1RBVEU7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAorCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKTsKKworaW50IGlwYXRoX2xheWVyX2dldF9waHllcnJ0aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiAoZGQtPmlwYXRoX2liY2N0cmwgPj4KKwkJSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9TSElGVCkgJgorCQlJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX01BU0s7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9waHllcnJ0aHJlc2hvbGQpOworCisvKioKKyAqIGlwYXRoX2xheWVyX3NldF9waHllcnJ0aHJlc2hvbGQgLSBzZXQgdGhlIHBoeXNpY2FsIGVycm9yIHRocmVzaG9sZAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBuOiB0aGUgbmV3IHRocmVzaG9sZAorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB0YWtlIGVmZmVjdCB3aGVuIHRoZSBsaW5rIHN0YXRlIGNoYW5nZXMuCisgKi8KK2ludCBpcGF0aF9sYXllcl9zZXRfcGh5ZXJydGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgbikKK3sKKwl1bnNpZ25lZCB2OworCisJdiA9IChkZC0+aXBhdGhfaWJjY3RybCA+PiBJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUKSAmCisJCUlORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfTUFTSzsKKwlpZiAodiAhPSBuKSB7CisJCWRkLT5pcGF0aF9pYmNjdHJsICY9CisJCQl+KElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfTUFTSyA8PAorCQkJICBJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUKTsKKwkJZGQtPmlwYXRoX2liY2N0cmwgfD0KKwkJCSh1NjQpIG4gPDwgSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9TSElGVDsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAorCQkJCSBkZC0+aXBhdGhfaWJjY3RybCk7CisJfQorCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9zZXRfcGh5ZXJydGhyZXNob2xkKTsKKworaW50IGlwYXRoX2xheWVyX2dldF9vdmVycnVudGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gKGRkLT5pcGF0aF9pYmNjdHJsID4+CisJCUlORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX1NISUZUKSAmCisJCUlORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX01BU0s7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9vdmVycnVudGhyZXNob2xkKTsKKworLyoqCisgKiBpcGF0aF9sYXllcl9zZXRfb3ZlcnJ1bnRocmVzaG9sZCAtIHNldCB0aGUgb3ZlcnJ1biB0aHJlc2hvbGQKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbjogdGhlIG5ldyB0aHJlc2hvbGQKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgbGluayBzdGF0ZSBjaGFuZ2VzLgorICovCitpbnQgaXBhdGhfbGF5ZXJfc2V0X292ZXJydW50aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBuKQoreworCXVuc2lnbmVkIHY7CisKKwl2ID0gKGRkLT5pcGF0aF9pYmNjdHJsID4+IElORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX1NISUZUKSAmCisJCUlORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX01BU0s7CisJaWYgKHYgIT0gbikgeworCQlkZC0+aXBhdGhfaWJjY3RybCAmPQorCQkJfihJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9NQVNLIDw8CisJCQkgIElORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX1NISUZUKTsKKwkJZGQtPmlwYXRoX2liY2N0cmwgfD0KKwkJCSh1NjQpIG4gPDwgSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQ7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjY3RybCwKKwkJCQkgZGQtPmlwYXRoX2liY2N0cmwpOworCX0KKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X292ZXJydW50aHJlc2hvbGQpOworCitpbnQgaXBhdGhfbGF5ZXJfZ2V0X2JvYXJkbmFtZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm5hbWUsCisJCQkgICAgICBzaXplX3QgbmFtZWxlbikKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX2ZfZ2V0X2JvYXJkbmFtZShkZCwgbmFtZSwgbmFtZWxlbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfYm9hcmRuYW1lKTsKKwordTMyIGlwYXRoX2xheWVyX2dldF9yY3ZoZHJlbnRzaXplKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX3JjdmhkcmVudHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfcmN2aGRyZW50c2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZWZkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0lQQVRIX0xBWUVSX0gKKyNkZWZpbmUgX0lQQVRIX0xBWUVSX0gKKworLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgaXMgZm9yIHN5bWJvbHMgc2hhcmVkIGJldHdlZW4gdGhlIGluZmluaXBhdGggZHJpdmVyCisgKiBhbmQgZHJpdmVycyBsYXllcmVkIHVwb24gaXQgKHN1Y2ggYXMgaXBhdGgpLgorICovCisKK3N0cnVjdCBza19idWZmOworc3RydWN0IGlwYXRoX3NnZV9zdGF0ZTsKK3N0cnVjdCBpcGF0aF9kZXZkYXRhOworc3RydWN0IGV0aGVyX2hlYWRlcjsKKworc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIHsKKwl1NjQgc3ltYm9sX2Vycm9yX2NvdW50ZXI7CisJdTY0IGxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlcjsKKwl1NjQgbGlua19kb3duZWRfY291bnRlcjsKKwl1NjQgcG9ydF9yY3ZfZXJyb3JzOworCXU2NCBwb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsKKwl1NjQgcG9ydF94bWl0X2Rpc2NhcmRzOworCXU2NCBwb3J0X3htaXRfZGF0YTsKKwl1NjQgcG9ydF9yY3ZfZGF0YTsKKwl1NjQgcG9ydF94bWl0X3BhY2tldHM7CisJdTY0IHBvcnRfcmN2X3BhY2tldHM7Cit9OworCisvKgorICogQSBzZWdtZW50IGlzIGEgbGluZWFyIHJlZ2lvbiBvZiBsb3cgcGh5c2ljYWwgbWVtb3J5LgorICogWFhYIE1heWJlIHdlIHNob3VsZCB1c2UgcGh5cyBhZGRyIGhlcmUgYW5kIGttYXAoKS9rdW5tYXAoKS4KKyAqIFVzZWQgYnkgdGhlIHZlcmJzIGxheWVyLgorICovCitzdHJ1Y3QgaXBhdGhfc2VnIHsKKwl2b2lkICp2YWRkcjsKKwlzaXplX3QgbGVuZ3RoOworfTsKKworLyogVGhlIG51bWJlciBvZiBpcGF0aF9zZWdzIHRoYXQgZml0IGluIGEgcGFnZS4gKi8KKyNkZWZpbmUgSVBBVEhfU0VHU1ogICAgIChQQUdFX1NJWkUgLyBzaXplb2YgKHN0cnVjdCBpcGF0aF9zZWcpKQorCitzdHJ1Y3QgaXBhdGhfc2VnYXJyYXkgeworCXN0cnVjdCBpcGF0aF9zZWcgc2Vnc1tJUEFUSF9TRUdTWl07Cit9OworCitzdHJ1Y3QgaXBhdGhfbXJlZ2lvbiB7CisJdTY0IHVzZXJfYmFzZTsJCS8qIFVzZXIncyBhZGRyZXNzIGZvciB0aGlzIHJlZ2lvbiAqLworCXU2NCBpb3ZhOwkJLyogSUIgc3RhcnQgYWRkcmVzcyBvZiB0aGlzIHJlZ2lvbiAqLworCXNpemVfdCBsZW5ndGg7CisJdTMyIGxrZXk7CisJdTMyIG9mZnNldDsJCS8qIG9mZnNldCAoYnl0ZXMpIHRvIHN0YXJ0IG9mIHJlZ2lvbiAqLworCWludCBhY2Nlc3NfZmxhZ3M7CisJdTMyIG1heF9zZWdzOwkJLyogbnVtYmVyIG9mIGlwYXRoX3NlZ3MgaW4gYWxsIHRoZSBhcnJheXMgKi8KKwl1MzIgbWFwc3o7CQkvKiBzaXplIG9mIHRoZSBtYXAgYXJyYXkgKi8KKwlzdHJ1Y3QgaXBhdGhfc2VnYXJyYXkgKm1hcFswXTsJLyogdGhlIHNlZ21lbnRzICovCit9OworCisvKgorICogVGhlc2Uga2VlcCB0cmFjayBvZiB0aGUgY29weSBwcm9ncmVzcyB3aXRoaW4gYSBtZW1vcnkgcmVnaW9uLgorICogVXNlZCBieSB0aGUgdmVyYnMgbGF5ZXIuCisgKi8KK3N0cnVjdCBpcGF0aF9zZ2UgeworCXN0cnVjdCBpcGF0aF9tcmVnaW9uICptcjsKKwl2b2lkICp2YWRkcjsJCS8qIGN1cnJlbnQgcG9pbnRlciBpbnRvIHRoZSBzZWdtZW50ICovCisJdTMyIHNnZV9sZW5ndGg7CQkvKiBsZW5ndGggb2YgdGhlIFNHRSAqLworCXUzMiBsZW5ndGg7CQkvKiByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBzZWdtZW50ICovCisJdTE2IG07CQkJLyogY3VycmVudCBpbmRleDogbXItPm1hcFttXSAqLworCXUxNiBuOwkJCS8qIGN1cnJlbnQgaW5kZXg6IG1yLT5tYXBbbV0tPnNlZ3Nbbl0gKi8KK307CisKK3N0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgeworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnX2xpc3Q7CS8qIG5leHQgU0dFIHRvIGJlIHVzZWQgaWYgYW55ICovCisJc3RydWN0IGlwYXRoX3NnZSBzZ2U7CS8qIHByb2dyZXNzIHN0YXRlIGZvciB0aGUgY3VycmVudCBTR0UgKi8KKwl1OCBudW1fc2dlOworfTsKKworaW50IGlwYXRoX2xheWVyX3JlZ2lzdGVyKHZvaWQgKigqbF9hZGQpKGludCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKiksCisJCQkgdm9pZCAoKmxfcmVtb3ZlKSh2b2lkICopLAorCQkJIGludCAoKmxfaW50cikodm9pZCAqLCB1MzIpLAorCQkJIGludCAoKmxfcmN2KSh2b2lkICosIHZvaWQgKiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKSwKKwkJCSB1MTYgcmN2X29wY29kZSwKKwkJCSBpbnQgKCpsX3Jjdl9saWQpKHZvaWQgKiwgdm9pZCAqKSk7CitpbnQgaXBhdGhfdmVyYnNfcmVnaXN0ZXIodm9pZCAqKCpsX2FkZCkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKSwKKwkJCSB2b2lkICgqbF9yZW1vdmUpKHZvaWQgKmFyZyksCisJCQkgaW50ICgqbF9waW9idWZhdmFpbCkodm9pZCAqYXJnKSwKKwkJCSB2b2lkICgqbF9yY3YpKHZvaWQgKmFyZywgdm9pZCAqcmhkciwKKwkJCQkgICAgICAgdm9pZCAqZGF0YSwgdTMyIHRsZW4pLAorCQkJIHZvaWQgKCpsX3RpbWVyX2NiKSh2b2lkICphcmcpKTsKK3ZvaWQgaXBhdGhfbGF5ZXJfdW5yZWdpc3Rlcih2b2lkKTsKK3ZvaWQgaXBhdGhfdmVyYnNfdW5yZWdpc3Rlcih2b2lkKTsKK2ludCBpcGF0aF9sYXllcl9vcGVuKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiAqIHBrdG1heCk7Cit1MTYgaXBhdGhfbGF5ZXJfZ2V0X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX2dldF9tYWMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCAqKTsKK3UxNiBpcGF0aF9sYXllcl9nZXRfYmNhc3Qoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3UzMiBpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBzdGF0ZSk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X210dShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MTYpOworaW50IGlwYXRoX3NldF9zcHNfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgdTgpOworaW50IGlwYXRoX2xheWVyX3NlbmRfaGRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCSBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpoZHIpOworaW50IGlwYXRoX3ZlcmJzX3NlbmQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgaGRyd29yZHMsCisJCSAgICAgdTMyICogaGRyLCB1MzIgbGVuLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcyk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X3Bpb2ludGJ1ZmF2YWlsX2ludChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX2dldF9ib2FyZG5hbWUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBjaGFyICpuYW1lLAorCQkJICAgICAgc2l6ZV90IG5hbWVsZW4pOworaW50IGlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTY0ICpzd29yZHMsCisJCQkJICB1NjQgKnJ3b3JkcywgdTY0ICpzcGt0cywgdTY0ICpycGt0cywKKwkJCQkgIHU2NCAqeG1pdF93YWl0KTsKK2ludCBpcGF0aF9sYXllcl9nZXRfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJICAgICBzdHJ1Y3QgaXBhdGhfbGF5ZXJfY291bnRlcnMgKmNudHJzKTsKK2ludCBpcGF0aF9sYXllcl93YW50X2J1ZmZlcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX3NldF9ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIF9fYmU2NCBndWlkKTsKK19fYmU2NCBpcGF0aF9sYXllcl9nZXRfZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3UzMiBpcGF0aF9sYXllcl9nZXRfbmd1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CitpbnQgaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiAqIHZlbmRvciwKKwkJCSAgICAgdTMyICogYm9hcmRyZXYsIHUzMiAqIG1hanJldiwgdTMyICogbWlucmV2KTsKK3UzMiBpcGF0aF9sYXllcl9nZXRfZmxhZ3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3N0cnVjdCBkZXZpY2UgKmlwYXRoX2xheWVyX2dldF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3UxNiBpcGF0aF9sYXllcl9nZXRfZGV2aWNlaWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3U2NCBpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3UzMiBpcGF0aF9sYXllcl9nZXRfaWJtdHUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK2ludCBpcGF0aF9sYXllcl9lbmFibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK2ludCBpcGF0aF9sYXllcl9kaXNhYmxlX3RpbWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgZmxhZ3MpOwordW5zaWduZWQgaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordW5zaWduZWQgaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBpbmRleCk7CitpbnQgaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2ICpwa2V5cyk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X3BrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2ICpwa2V5cyk7CitpbnQgaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkJIGludCBzbGVlcCk7CitpbnQgaXBhdGhfbGF5ZXJfZ2V0X3BoeWVycnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX3NldF9waHllcnJ0aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBuKTsKK2ludCBpcGF0aF9sYXllcl9nZXRfb3ZlcnJ1bnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgbik7Cit1MzIgaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKKworLyogaXBhdGhfZXRoZXIgaW50ZXJydXB0IHZhbHVlcyAqLworI2RlZmluZSBJUEFUSF9MQVlFUl9JTlRfSUZfVVAgMHgyCisjZGVmaW5lIElQQVRIX0xBWUVSX0lOVF9JRl9ET1dOIDB4NAorI2RlZmluZSBJUEFUSF9MQVlFUl9JTlRfTElEIDB4OAorI2RlZmluZSBJUEFUSF9MQVlFUl9JTlRfU0VORF9DT05USU5VRSAweDEwCisjZGVmaW5lIElQQVRIX0xBWUVSX0lOVF9CQ0FTVCAweDQwCisKKy8qIF92ZXJic19sYXllci5sX2ZsYWdzICovCisjZGVmaW5lIElQQVRIX1ZFUkJTX0tFUk5FTF9TTUEgMHgxCisKK2V4dGVybiB1bnNpZ25lZCBpcGF0aF9kZWJ1ZzsgLyogZGVidWdnaW5nIGJpdCBtYXNrICovCisKKyNlbmRpZgkJCQkvKiBfSVBBVEhfTEFZRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjgzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKQEAgLTAsMCArMSwxMzUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHJkbWEvaWJfc21pLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworI2RlZmluZSBJQl9TTVBfVU5TVVBfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhfQVRUUglfX2NvbnN0YW50X2h0b25zKDB4MDAwQykKKyNkZWZpbmUgSUJfU01QX0lOVkFMSURfRklFTEQJX19jb25zdGFudF9odG9ucygweDAwMUMpCisKK3N0YXRpYyBpbnQgcmVwbHkoc3RydWN0IGliX3NtcCAqc21wKQoreworCS8qCisJICogVGhlIHZlcmJzIGZyYW1ld29yayB3aWxsIGhhbmRsZSB0aGUgZGlyZWN0ZWQvTElEIHJvdXRlCisJICogcGFja2V0IGNoYW5nZXMuCisJICovCisJc21wLT5tZXRob2QgPSBJQl9NR01UX01FVEhPRF9HRVRfUkVTUDsKKwlpZiAoc21wLT5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0RJUkVDVElPTjsKKwlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTIHwgSUJfTUFEX1JFU1VMVF9SRVBMWTsKK30KKworc3RhdGljIGludCByZWN2X3N1Ym5fZ2V0X25vZGVkZXNjcmlwdGlvbihzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJCSBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKK3sKKwlpZiAoc21wLT5hdHRyX21vZCkKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisKKwlzdHJuY3B5KHNtcC0+ZGF0YSwgaWJkZXYtPm5vZGVfZGVzYywgc2l6ZW9mKHNtcC0+ZGF0YSkpOworCisJcmV0dXJuIHJlcGx5KHNtcCk7Cit9CisKK3N0cnVjdCBub2RlaW5mbyB7CisJdTggYmFzZV92ZXJzaW9uOworCXU4IGNsYXNzX3ZlcnNpb247CisJdTggbm9kZV90eXBlOworCXU4IG51bV9wb3J0czsKKwlfX2JlNjQgc3lzX2d1aWQ7CisJX19iZTY0IG5vZGVfZ3VpZDsKKwlfX2JlNjQgcG9ydF9ndWlkOworCV9fYmUxNiBwYXJ0aXRpb25fY2FwOworCV9fYmUxNiBkZXZpY2VfaWQ7CisJX19iZTMyIHJldmlzaW9uOworCXU4IGxvY2FsX3BvcnRfbnVtOworCXU4IHZlbmRvcl9pZFszXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9nZXRfbm9kZWluZm8oc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IG5vZGVpbmZvICpuaXAgPSAoc3RydWN0IG5vZGVpbmZvICopJnNtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSB0b19pZGV2KGliZGV2KS0+ZGQ7CisJdTMyIHZlbmRvciwgYm9hcmRpZCwgbWFqcmV2LCBtaW5yZXY7CisKKwlpZiAoc21wLT5hdHRyX21vZCkKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisKKwluaXAtPmJhc2VfdmVyc2lvbiA9IDE7CisJbmlwLT5jbGFzc192ZXJzaW9uID0gMTsKKwluaXAtPm5vZGVfdHlwZSA9IDE7CS8qIGNoYW5uZWwgYWRhcHRlciAqLworCS8qCisJICogWFhYIFRoZSBudW1fcG9ydHMgdmFsdWUgd2lsbCBuZWVkIGEgbGF5ZXIgZnVuY3Rpb24gdG8gZ2V0CisJICogdGhlIHZhbHVlIGlmIHdlIGV2ZXIgaGF2ZSBtb3JlIHRoYW4gb25lIElCIHBvcnQgb24gYSBjaGlwLgorCSAqIFdlIHdpbGwgYWxzbyBuZWVkIHRvIGdldCB0aGUgR1VJRCBmb3IgdGhlIHBvcnQuCisJICovCisJbmlwLT5udW1fcG9ydHMgPSBpYmRldi0+cGh5c19wb3J0X2NudDsKKwkvKiBUaGlzIGlzIGFscmVhZHkgaW4gbmV0d29yayBvcmRlciAqLworCW5pcC0+c3lzX2d1aWQgPSB0b19pZGV2KGliZGV2KS0+c3lzX2ltYWdlX2d1aWQ7CisJbmlwLT5ub2RlX2d1aWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZCk7CisJbmlwLT5wb3J0X2d1aWQgPSBuaXAtPnN5c19ndWlkOworCW5pcC0+cGFydGl0aW9uX2NhcCA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGQpKTsKKwluaXAtPmRldmljZV9pZCA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZChkZCkpOworCWlwYXRoX2xheWVyX3F1ZXJ5X2RldmljZShkZCwgJnZlbmRvciwgJmJvYXJkaWQsICZtYWpyZXYsICZtaW5yZXYpOworCW5pcC0+cmV2aXNpb24gPSBjcHVfdG9fYmUzMigobWFqcmV2IDw8IDE2KSB8IG1pbnJldik7CisJbmlwLT5sb2NhbF9wb3J0X251bSA9IHBvcnQ7CisJbmlwLT52ZW5kb3JfaWRbMF0gPSAwOworCW5pcC0+dmVuZG9yX2lkWzFdID0gdmVuZG9yID4+IDg7CisJbmlwLT52ZW5kb3JfaWRbMl0gPSB2ZW5kb3I7CisKKwlyZXR1cm4gcmVwbHkoc21wKTsKK30KKworc3RhdGljIGludCByZWN2X3N1Ym5fZ2V0X2d1aWRpbmZvKHN0cnVjdCBpYl9zbXAgKnNtcCwKKwkJCQkgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQoreworCXUzMiBzdGFydGd4ID0gOCAqIGJlMzJfdG9fY3B1KHNtcC0+YXR0cl9tb2QpOworCV9fYmU2NCAqcCA9IChfX2JlNjQgKikgc21wLT5kYXRhOworCisJLyogMzIgYmxvY2tzIG9mIDggNjQtYml0IEdVSURzIHBlciBibG9jayAqLworCisJbWVtc2V0KHNtcC0+ZGF0YSwgMCwgc2l6ZW9mKHNtcC0+ZGF0YSkpOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIEdVSUQgZm9yIG5vdy4gIElmIHRoaXMgY2hhbmdlcywgdGhlCisJICogcG9ydGluZm8uZ3VpZF9jYXAgZmllbGQgbmVlZHMgdG8gYmUgdXBkYXRlZCB0b28uCisJICovCisJaWYgKHN0YXJ0Z3ggPT0gMCkKKwkJLyogVGhlIGZpcnN0IGlzIGEgY29weSBvZiB0aGUgcmVhZC1vbmx5IEhXIEdVSUQuICovCisJCSpwID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQodG9faWRldihpYmRldiktPmRkKTsKKwllbHNlCisJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCisJcmV0dXJuIHJlcGx5KHNtcCk7Cit9CisKK3N0cnVjdCBwb3J0X2luZm8geworCV9fYmU2NCBta2V5OworCV9fYmU2NCBnaWRfcHJlZml4OworCV9fYmUxNiBsaWQ7CisJX19iZTE2IHNtX2xpZDsKKwlfX2JlMzIgY2FwX21hc2s7CisJX19iZTE2IGRpYWdfY29kZTsKKwlfX2JlMTYgbWtleV9sZWFzZV9wZXJpb2Q7CisJdTggbG9jYWxfcG9ydF9udW07CisJdTggbGlua193aWR0aF9lbmFibGVkOworCXU4IGxpbmtfd2lkdGhfc3VwcG9ydGVkOworCXU4IGxpbmtfd2lkdGhfYWN0aXZlOworCXU4IGxpbmtzcGVlZF9wb3J0c3RhdGU7CQkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCBwb3J0cGh5c3N0YXRlX2xpbmtkb3duOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCBta2V5cHJvdF9yZXN2X2xtYzsJCQkvKiAyIGJpdHMsIDMsIDMgKi8KKwl1OCBsaW5rc3BlZWRhY3RpdmVfZW5hYmxlZDsJCS8qIDQgYml0cywgNCBiaXRzICovCisJdTggbmVpZ2hib3JtdHVfbWFzdGVyc21zbDsJCS8qIDQgYml0cywgNCBiaXRzICovCisJdTggdmxjYXBfaW5pdHR5cGU7CQkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCB2bF9oaWdoX2xpbWl0OworCXU4IHZsX2FyYl9oaWdoX2NhcDsKKwl1OCB2bF9hcmJfbG93X2NhcDsKKwl1OCBpbml0dHlwZXJlcGx5X210dWNhcDsJCS8qIDQgYml0cywgNCBiaXRzICovCisJdTggdmxzdGFsbGNudF9ob3FsaWZlOwkJCS8qIDMgYml0cywgNSBiaXRzICovCisJdTggb3BlcmF0aW9uYWx2bF9wZWlfcGVvX2ZwaV9mcG87CS8qIDQgYml0cywgMSwgMSwgMSwgMSAqLworCV9fYmUxNiBta2V5X3Zpb2xhdGlvbnM7CisJX19iZTE2IHBrZXlfdmlvbGF0aW9uczsKKwlfX2JlMTYgcWtleV92aW9sYXRpb25zOworCXU4IGd1aWRfY2FwOworCXU4IGNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG87CQkvKiAxIGJpdCwgMiBiaXRzLCA1ICovCisJdTggcmVzdl9yZXNwdGltZXZhbHVlOwkJCS8qIDMgYml0cywgNSBiaXRzICovCisJdTggbG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9yczsJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwlfX2JlMTYgbWF4X2NyZWRpdF9oaW50OworCXU4IHJlc3Y7CisJdTggbGlua19yb3VuZHRyaXBfbGF0ZW5jeVszXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9nZXRfcG9ydGluZm8oc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXY7CisJc3RydWN0IHBvcnRfaW5mbyAqcGlwID0gKHN0cnVjdCBwb3J0X2luZm8gKilzbXAtPmRhdGE7CisJdTE2IGxpZDsKKwl1OCBpYmNzdGF0OworCXU4IG10dTsKKwlpbnQgcmV0OworCisJaWYgKGJlMzJfdG9fY3B1KHNtcC0+YXR0cl9tb2QpID4gaWJkZXYtPnBoeXNfcG9ydF9jbnQpIHsKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisJCXJldCA9IHJlcGx5KHNtcCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlkZXYgPSB0b19pZGV2KGliZGV2KTsKKworCS8qIENsZWFyIGFsbCBmaWVsZHMuICBPbmx5IHNldCB0aGUgbm9uLXplcm8gZmllbGRzLiAqLworCW1lbXNldChzbXAtPmRhdGEsIDAsIHNpemVvZihzbXAtPmRhdGEpKTsKKworCS8qIE9ubHkgcmV0dXJuIHRoZSBta2V5IGlmIHRoZSBwcm90ZWN0aW9uIGZpZWxkIGFsbG93cyBpdC4gKi8KKwlpZiAoc21wLT5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfU0VUIHx8IGRldi0+bWtleSA9PSBzbXAtPm1rZXkgfHwKKwkgICAgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgPj4gNikgPT0gMCkKKwkJcGlwLT5ta2V5ID0gZGV2LT5ta2V5OworCXBpcC0+Z2lkX3ByZWZpeCA9IGRldi0+Z2lkX3ByZWZpeDsKKwlsaWQgPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpOworCXBpcC0+bGlkID0gbGlkID8gY3B1X3RvX2JlMTYobGlkKSA6IElCX0xJRF9QRVJNSVNTSVZFOworCXBpcC0+c21fbGlkID0gY3B1X3RvX2JlMTYoZGV2LT5zbV9saWQpOworCXBpcC0+Y2FwX21hc2sgPSBjcHVfdG9fYmUzMihkZXYtPnBvcnRfY2FwX2ZsYWdzKTsKKwkvKiBwaXAtPmRpYWdfY29kZTsgKi8KKwlwaXAtPm1rZXlfbGVhc2VfcGVyaW9kID0gY3B1X3RvX2JlMTYoZGV2LT5ta2V5X2xlYXNlX3BlcmlvZCk7CisJcGlwLT5sb2NhbF9wb3J0X251bSA9IHBvcnQ7CisJcGlwLT5saW5rX3dpZHRoX2VuYWJsZWQgPSBkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZDsKKwlwaXAtPmxpbmtfd2lkdGhfc3VwcG9ydGVkID0gMzsJLyogMXggb3IgNHggKi8KKwlwaXAtPmxpbmtfd2lkdGhfYWN0aXZlID0gMjsJLyogNHggKi8KKwlwaXAtPmxpbmtzcGVlZF9wb3J0c3RhdGUgPSAweDEwOwkvKiAyLjVHYnBzICovCisJaWJjc3RhdCA9IGlwYXRoX2xheWVyX2dldF9sYXN0aWJjc3RhdChkZXYtPmRkKTsKKwlwaXAtPmxpbmtzcGVlZF9wb3J0c3RhdGUgfD0gKChpYmNzdGF0ID4+IDQpICYgMHgzKSArIDE7CisJcGlwLT5wb3J0cGh5c3N0YXRlX2xpbmtkb3duID0KKwkJKGlwYXRoX2N2dF9waHlzcG9ydHN0YXRlW2liY3N0YXQgJiAweGZdIDw8IDQpIHwKKwkJKGlwYXRoX2xheWVyX2dldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkKSA/IDEgOiAyKTsKKwlwaXAtPm1rZXlwcm90X3Jlc3ZfbG1jID0gZGV2LT5ta2V5cHJvdF9yZXN2X2xtYzsKKwlwaXAtPmxpbmtzcGVlZGFjdGl2ZV9lbmFibGVkID0gMHgxMTsJLyogMi41R2JwcywgMi41R2JwcyAqLworCXN3aXRjaCAoaXBhdGhfbGF5ZXJfZ2V0X2libXR1KGRldi0+ZGQpKSB7CisJY2FzZSA0MDk2OgorCQltdHUgPSBJQl9NVFVfNDA5NjsKKwkJYnJlYWs7CisJY2FzZSAyMDQ4OgorCQltdHUgPSBJQl9NVFVfMjA0ODsKKwkJYnJlYWs7CisJY2FzZSAxMDI0OgorCQltdHUgPSBJQl9NVFVfMTAyNDsKKwkJYnJlYWs7CisJY2FzZSA1MTI6CisJCW10dSA9IElCX01UVV81MTI7CisJCWJyZWFrOworCWNhc2UgMjU2OgorCQltdHUgPSBJQl9NVFVfMjU2OworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogb29wcywgc29tZXRoaW5nIGlzIHdyb25nICovCisJCW10dSA9IElCX01UVV8yMDQ4OworCQlicmVhazsKKwl9CisJcGlwLT5uZWlnaGJvcm10dV9tYXN0ZXJzbXNsID0gKG10dSA8PCA0KSB8IGRldi0+c21fc2w7CisJcGlwLT52bGNhcF9pbml0dHlwZSA9IDB4MTA7CS8qIFZMQ2FwID0gVkwwLCBJbml0VHlwZSA9IDAgKi8KKwlwaXAtPnZsX2hpZ2hfbGltaXQgPSBkZXYtPnZsX2hpZ2hfbGltaXQ7CisJLyogcGlwLT52bF9hcmJfaGlnaF9jYXA7IC8vIG9ubHkgb25lIFZMICovCisJLyogcGlwLT52bF9hcmJfbG93X2NhcDsgLy8gb25seSBvbmUgVkwgKi8KKwkvKiBJbml0VHlwZVJlcGx5ID0gMCAqLworCXBpcC0+aW5pdHR5cGVyZXBseV9tdHVjYXAgPSBJQl9NVFVfNDA5NjsKKwkvLyBIQ0FzIGlnbm9yZSBWTFN0YWxsQ291bnQgYW5kIEhPUUxpZmUKKwkvKiBwaXAtPnZsc3RhbGxjbnRfaG9xbGlmZTsgKi8KKwlwaXAtPm9wZXJhdGlvbmFsdmxfcGVpX3Blb19mcGlfZnBvID0gMHgxMDsJLyogT1ZMcyA9IDEgKi8KKwlwaXAtPm1rZXlfdmlvbGF0aW9ucyA9IGNwdV90b19iZTE2KGRldi0+bWtleV92aW9sYXRpb25zKTsKKwkvKiBQX0tleVZpb2xhdGlvbnMgYXJlIGNvdW50ZWQgYnkgaGFyZHdhcmUuICovCisJcGlwLT5wa2V5X3Zpb2xhdGlvbnMgPQorCQljcHVfdG9fYmUxNigoaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoZGV2LT5kZCkgLQorCQkJICAgICBkZXYtPm5fcGtleV92aW9sYXRpb25zKSAmIDB4RkZGRik7CisJcGlwLT5xa2V5X3Zpb2xhdGlvbnMgPSBjcHVfdG9fYmUxNihkZXYtPnFrZXlfdmlvbGF0aW9ucyk7CisJLyogT25seSB0aGUgaGFyZHdhcmUgR1VJRCBpcyBzdXBwb3J0ZWQgZm9yIG5vdyAqLworCXBpcC0+Z3VpZF9jYXAgPSAxOworCXBpcC0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byA9IGRldi0+c3VibmV0X3RpbWVvdXQ7CisJLyogMzIuNzY4IHVzZWMuIHJlc3BvbnNlIHRpbWUgKGd1ZXNzaW5nKSAqLworCXBpcC0+cmVzdl9yZXNwdGltZXZhbHVlID0gMzsKKwlwaXAtPmxvY2FscGh5ZXJyb3JzX292ZXJydW5lcnJvcnMgPQorCQkoaXBhdGhfbGF5ZXJfZ2V0X3BoeWVycnRocmVzaG9sZChkZXYtPmRkKSA8PCA0KSB8CisJCWlwYXRoX2xheWVyX2dldF9vdmVycnVudGhyZXNob2xkKGRldi0+ZGQpOworCS8qIHBpcC0+bWF4X2NyZWRpdF9oaW50OyAqLworCS8qIHBpcC0+bGlua19yb3VuZHRyaXBfbGF0ZW5jeVszXTsgKi8KKworCXJldCA9IHJlcGx5KHNtcCk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWN2X3N1Ym5fZ2V0X3BrZXl0YWJsZShzdHJ1Y3QgaWJfc21wICpzbXAsCisJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJdTMyIHN0YXJ0cHggPSAzMiAqIChiZTMyX3RvX2NwdShzbXAtPmF0dHJfbW9kKSAmIDB4ZmZmZik7CisJdTE2ICpwID0gKHUxNiAqKSBzbXAtPmRhdGE7CisJX19iZTE2ICpxID0gKF9fYmUxNiAqKSBzbXAtPmRhdGE7CisKKwkvKiA2NCBibG9ja3Mgb2YgMzIgMTYtYml0IFBfS2V5IGVudHJpZXMgKi8KKworCW1lbXNldChzbXAtPmRhdGEsIDAsIHNpemVvZihzbXAtPmRhdGEpKTsKKwlpZiAoc3RhcnRweCA9PSAwKSB7CisJCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJCXVuc2lnbmVkIGksIG4gPSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpOworCisJCWlwYXRoX2xheWVyX2dldF9wa2V5cyhkZXYtPmRkLCBwKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJcVtpXSA9IGNwdV90b19iZTE2KHBbaV0pOworCX0gZWxzZQorCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKworCXJldHVybiByZXBseShzbXApOworfQorCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9zZXRfZ3VpZGluZm8oc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJLyogVGhlIG9ubHkgR1VJRCB3ZSBzdXBwb3J0IGlzIHRoZSBmaXJzdCByZWFkLW9ubHkgZW50cnkuICovCisJcmV0dXJuIHJlY3Zfc3Vibl9nZXRfZ3VpZGluZm8oc21wLCBpYmRldik7Cit9CisKKy8qKgorICogcmVjdl9zdWJuX3NldF9wb3J0aW5mbyAtIHNldCBwb3J0IGluZm9ybWF0aW9uCisgKiBAc21wOiB0aGUgaW5jb21pbmcgU00gcGFja2V0CisgKiBAaWJkZXY6IHRoZSBpbmZpbmliYW5kIGRldmljZQorICogQHBvcnQ6IHRoZSBwb3J0IG9uIHRoZSBkZXZpY2UKKyAqCisgKiBTZXQgUG9ydGluZm8gKHNlZSBjaC4gMTQuMi41LjYpLgorICovCitzdGF0aWMgaW50IHJlY3Zfc3Vibl9zZXRfcG9ydGluZm8oc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGlwID0gKHN0cnVjdCBwb3J0X2luZm8gKilzbXAtPmRhdGE7CisJc3RydWN0IGliX2V2ZW50IGV2ZW50OworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OworCXUzMiBmbGFnczsKKwljaGFyIGNsaWVudHJlcmVnID0gMDsKKwl1MTYgbGlkLCBzbWxpZDsKKwl1OCBsd2U7CisJdTggbHNlOworCXU4IHN0YXRlOworCXUxNiBsc3RhdGU7CisJdTMyIG10dTsKKwlpbnQgcmV0OworCisJaWYgKGJlMzJfdG9fY3B1KHNtcC0+YXR0cl9tb2QpID4gaWJkZXYtPnBoeXNfcG9ydF9jbnQpCisJCWdvdG8gZXJyOworCisJZGV2ID0gdG9faWRldihpYmRldik7CisJZXZlbnQuZGV2aWNlID0gaWJkZXY7CisJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnQ7CisKKwlkZXYtPm1rZXkgPSBwaXAtPm1rZXk7CisJZGV2LT5naWRfcHJlZml4ID0gcGlwLT5naWRfcHJlZml4OworCWRldi0+bWtleV9sZWFzZV9wZXJpb2QgPSBiZTE2X3RvX2NwdShwaXAtPm1rZXlfbGVhc2VfcGVyaW9kKTsKKworCWxpZCA9IGJlMTZfdG9fY3B1KHBpcC0+bGlkKTsKKwlpZiAobGlkICE9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpIHsKKwkJLyogTXVzdCBiZSBhIHZhbGlkIHVuaWNhc3QgTElEIGFkZHJlc3MuICovCisJCWlmIChsaWQgPT0gMCB8fCBsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSkKKwkJCWdvdG8gZXJyOworCQlpcGF0aF9zZXRfc3BzX2xpZChkZXYtPmRkLCBsaWQsIHBpcC0+bWtleXByb3RfcmVzdl9sbWMgJiA3KTsKKwkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCX0KKworCXNtbGlkID0gYmUxNl90b19jcHUocGlwLT5zbV9saWQpOworCWlmIChzbWxpZCAhPSBkZXYtPnNtX2xpZCkgeworCQkvKiBNdXN0IGJlIGEgdmFsaWQgdW5pY2FzdCBMSUQgYWRkcmVzcy4gKi8KKwkJaWYgKHNtbGlkID09IDAgfHwgc21saWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSkKKwkJCWdvdG8gZXJyOworCQlkZXYtPnNtX2xpZCA9IHNtbGlkOworCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1NNX0NIQU5HRTsKKwkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwl9CisKKwkvKiBPbmx5IDR4IHN1cHBvcnRlZCBidXQgYWxsb3cgMXggb3IgNHggdG8gYmUgc2V0IChzZWUgMTQuMi42LjYpLiAqLworCWx3ZSA9IHBpcC0+bGlua193aWR0aF9lbmFibGVkOworCWlmICgobHdlID49IDQgJiYgbHdlIDw9IDgpIHx8IChsd2UgPj0gMHhDICYmIGx3ZSA8PSAweEZFKSkKKwkJZ290byBlcnI7CisJaWYgKGx3ZSA9PSAweEZGKQorCQlkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IDM7CS8qIDF4IG9yIDR4ICovCisJZWxzZSBpZiAobHdlKQorCQlkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IGx3ZTsKKworCS8qIE9ubHkgMi41IEdicyBzdXBwb3J0ZWQuICovCisJbHNlID0gcGlwLT5saW5rc3BlZWRhY3RpdmVfZW5hYmxlZCAmIDB4RjsKKwlpZiAobHNlID49IDIgJiYgbHNlIDw9IDB4RSkKKwkJZ290byBlcnI7CisKKwkvKiBTZXQgbGluayBkb3duIGRlZmF1bHQgc3RhdGUuICovCisJc3dpdGNoIChwaXAtPnBvcnRwaHlzc3RhdGVfbGlua2Rvd24gJiAweEYpIHsKKwljYXNlIDA6IC8qIE5PUCAqLworCQlicmVhazsKKwljYXNlIDE6IC8qIFNMRUVQICovCisJCWlmIChpcGF0aF9sYXllcl9zZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoZGV2LT5kZCwgMSkpCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJY2FzZSAyOiAvKiBQT0xMICovCisJCWlmIChpcGF0aF9sYXllcl9zZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoZGV2LT5kZCwgMCkpCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBlcnI7CisJfQorCisJZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyA9IHBpcC0+bWtleXByb3RfcmVzdl9sbWM7CisJZGV2LT52bF9oaWdoX2xpbWl0ID0gcGlwLT52bF9oaWdoX2xpbWl0OworCisJc3dpdGNoICgocGlwLT5uZWlnaGJvcm10dV9tYXN0ZXJzbXNsID4+IDQpICYgMHhGKSB7CisJY2FzZSBJQl9NVFVfMjU2OgorCQltdHUgPSAyNTY7CisJCWJyZWFrOworCWNhc2UgSUJfTVRVXzUxMjoKKwkJbXR1ID0gNTEyOworCQlicmVhazsKKwljYXNlIElCX01UVV8xMDI0OgorCQltdHUgPSAxMDI0OworCQlicmVhazsKKwljYXNlIElCX01UVV8yMDQ4OgorCQltdHUgPSAyMDQ4OworCQlicmVhazsKKwljYXNlIElCX01UVV80MDk2OgorCQltdHUgPSA0MDk2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBYWFggV2UgaGF2ZSBhbHJlYWR5IHBhcnRpYWxseSB1cGRhdGVkIG91ciBzdGF0ZSEgKi8KKwkJZ290byBlcnI7CisJfQorCWlwYXRoX2xheWVyX3NldF9tdHUoZGV2LT5kZCwgbXR1KTsKKworCWRldi0+c21fc2wgPSBwaXAtPm5laWdoYm9ybXR1X21hc3RlcnNtc2wgJiAweEY7CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgVkwwICovCisJaWYgKCgocGlwLT5vcGVyYXRpb25hbHZsX3BlaV9wZW9fZnBpX2ZwbyA+PiA0KSAmIDB4RikgPiAxKQorCQlnb3RvIGVycjsKKworCWlmIChwaXAtPm1rZXlfdmlvbGF0aW9ucyA9PSAwKQorCQlkZXYtPm1rZXlfdmlvbGF0aW9ucyA9IDA7CisKKwkvKgorCSAqIEhhcmR3YXJlIGNvdW50ZXIgY2FuJ3QgYmUgcmVzZXQgc28gc25hcHNob3QgYW5kIHN1YnRyYWN0CisJICogbGF0ZXIuCisJICovCisJaWYgKHBpcC0+cGtleV92aW9sYXRpb25zID09IDApCisJCWRldi0+bl9wa2V5X3Zpb2xhdGlvbnMgPQorCQkJaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoZGV2LT5kZCk7CisKKwlpZiAocGlwLT5xa2V5X3Zpb2xhdGlvbnMgPT0gMCkKKwkJZGV2LT5xa2V5X3Zpb2xhdGlvbnMgPSAwOworCisJaWYgKGlwYXRoX2xheWVyX3NldF9waHllcnJ0aHJlc2hvbGQoCisJCSAgICBkZXYtPmRkLAorCQkgICAgKHBpcC0+bG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9ycyA+PiA0KSAmIDB4RikpCisJCWdvdG8gZXJyOworCisJaWYgKGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkKAorCQkgICAgZGV2LT5kZCwKKwkJICAgIChwaXAtPmxvY2FscGh5ZXJyb3JzX292ZXJydW5lcnJvcnMgJiAweEYpKSkKKwkJZ290byBlcnI7CisKKwlkZXYtPnN1Ym5ldF90aW1lb3V0ID0gcGlwLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHgxRjsKKworCWlmIChwaXAtPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKSB7CisJCWNsaWVudHJlcmVnID0gMTsKKwkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCX0KKworCS8qCisJICogRG8gdGhlIHBvcnQgc3RhdGUgY2hhbmdlIG5vdyB0aGF0IHRoZSBvdGhlciBsaW5rIHBhcmFtZXRlcnMKKwkgKiBoYXZlIGJlZW4gc2V0LgorCSAqIENoYW5naW5nIHRoZSBwb3J0IHBoeXNpY2FsIHN0YXRlIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGxpbmsKKwkgKiBpcyBkb3duIG9yIGlzIGJlaW5nIHNldCB0byBkb3duLgorCSAqLworCXN0YXRlID0gcGlwLT5saW5rc3BlZWRfcG9ydHN0YXRlICYgMHhGOworCWZsYWdzID0gaXBhdGhfbGF5ZXJfZ2V0X2ZsYWdzKGRldi0+ZGQpOworCWxzdGF0ZSA9IChwaXAtPnBvcnRwaHlzc3RhdGVfbGlua2Rvd24gPj4gNCkgJiAweEY7CisJaWYgKGxzdGF0ZSAmJiAhKHN0YXRlID09IElCX1BPUlRfRE9XTiB8fCBzdGF0ZSA9PSBJQl9QT1JUX05PUCkpCisJCWdvdG8gZXJyOworCisJLyoKKwkgKiBPbmx5IHN0YXRlIGNoYW5nZXMgb2YgRE9XTiwgQVJNLCBhbmQgQUNUSVZFIGFyZSB2YWxpZAorCSAqIGFuZCBtdXN0IGJlIGluIHRoZSBjb3JyZWN0IHN0YXRlIHRvIHRha2UgZWZmZWN0IChzZWUgNy4yLjYpLgorCSAqLworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIElCX1BPUlRfTk9QOgorCQlpZiAobHN0YXRlID09IDApCisJCQlicmVhazsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIElCX1BPUlRfRE9XTjoKKwkJaWYgKGxzdGF0ZSA9PSAwKQorCQkJaWYgKGlwYXRoX2xheWVyX2dldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkKSkKKwkJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUDsKKwkJCWVsc2UKKwkJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTjsKKwkJZWxzZSBpZiAobHN0YXRlID09IDEpCisJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUDsKKwkJZWxzZSBpZiAobHN0YXRlID09IDIpCisJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTjsKKwkJZWxzZSBpZiAobHN0YXRlID09IDMpCisJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFOworCQllbHNlCisJCQlnb3RvIGVycjsKKwkJaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShkZXYtPmRkLCBsc3RhdGUpOworCQlpZiAoZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSB7CisJCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1BPUlRfRVJSOworCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJfQorCQlicmVhazsKKwljYXNlIElCX1BPUlRfQVJNRUQ6CisJCWlmICghKGZsYWdzICYgKElQQVRIX0xJTktJTklUIHwgSVBBVEhfTElOS0FDVElWRSkpKQorCQkJYnJlYWs7CisJCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGV2LT5kZCwgSVBBVEhfSUJfTElOS0FSTSk7CisJCWlmIChmbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpIHsKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQl9CisJCWJyZWFrOworCWNhc2UgSUJfUE9SVF9BQ1RJVkU6CisJCWlmICghKGZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSkKKwkJCWJyZWFrOworCQlpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktBQ1RJVkUpOworCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1BPUlRfQUNUSVZFOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBYWFggV2UgaGF2ZSBhbHJlYWR5IHBhcnRpYWxseSB1cGRhdGVkIG91ciBzdGF0ZSEgKi8KKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcmVjdl9zdWJuX2dldF9wb3J0aW5mbyhzbXAsIGliZGV2LCBwb3J0KTsKKworCWlmIChjbGllbnRyZXJlZykKKwkJcGlwLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvIHw9IDB4ODA7CisKKwlnb3RvIGRvbmU7CisKK2VycjoKKwlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwlyZXQgPSByZWN2X3N1Ym5fZ2V0X3BvcnRpbmZvKHNtcCwgaWJkZXYsIHBvcnQpOworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9zdWJuX3NldF9wa2V5dGFibGUoc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQoreworCXUzMiBzdGFydHB4ID0gMzIgKiAoYmUzMl90b19jcHUoc21wLT5hdHRyX21vZCkgJiAweGZmZmYpOworCV9fYmUxNiAqcCA9IChfX2JlMTYgKikgc21wLT5kYXRhOworCXUxNiAqcSA9ICh1MTYgKikgc21wLT5kYXRhOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJdW5zaWduZWQgaSwgbiA9IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlxW2ldID0gYmUxNl90b19jcHUocFtpXSk7CisKKwlpZiAoc3RhcnRweCAhPSAwIHx8CisJICAgIGlwYXRoX2xheWVyX3NldF9wa2V5cyhkZXYtPmRkLCBxKSAhPSAwKQorCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKworCXJldHVybiByZWN2X3N1Ym5fZ2V0X3BrZXl0YWJsZShzbXAsIGliZGV2KTsKK30KKworI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSU19FWFQJX19jb25zdGFudF9odG9ucygweDAwMUQpCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUX0VYVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxRSkKKworc3RydWN0IGliX3BlcmYgeworCXU4IGJhc2VfdmVyc2lvbjsKKwl1OCBtZ210X2NsYXNzOworCXU4IGNsYXNzX3ZlcnNpb247CisJdTggbWV0aG9kOworCV9fYmUxNiBzdGF0dXM7CisJX19iZTE2IHVudXNlZDsKKwlfX2JlNjQgdGlkOworCV9fYmUxNiBhdHRyX2lkOworCV9fYmUxNiByZXN2OworCV9fYmUzMiBhdHRyX21vZDsKKwl1OCByZXNlcnZlZFs0MF07CisJdTggZGF0YVsxOTJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpYl9wbWFfY2xhc3Nwb3J0aW5mbyB7CisJdTggYmFzZV92ZXJzaW9uOworCXU4IGNsYXNzX3ZlcnNpb247CisJX19iZTE2IGNhcF9tYXNrOworCXU4IHJlc2VydmVkWzNdOworCXU4IHJlc3BfdGltZV92YWx1ZTsJLyogb25seSBsb3dlciA1IGJpdHMgKi8KKwl1bmlvbiBpYl9naWQgcmVkaXJlY3RfZ2lkOworCV9fYmUzMiByZWRpcmVjdF90Y19zbF9mbDsJLyogOCwgNCwgMjAgYml0cyByZXNwZWN0aXZlbHkgKi8KKwlfX2JlMTYgcmVkaXJlY3RfbGlkOworCV9fYmUxNiByZWRpcmVjdF9wa2V5OworCV9fYmUzMiByZWRpcmVjdF9xcDsJLyogb25seSBsb3dlciAyNCBiaXRzICovCisJX19iZTMyIHJlZGlyZWN0X3FrZXk7CisJdW5pb24gaWJfZ2lkIHRyYXBfZ2lkOworCV9fYmUzMiB0cmFwX3RjX3NsX2ZsOwkvKiA4LCA0LCAyMCBiaXRzIHJlc3BlY3RpdmVseSAqLworCV9fYmUxNiB0cmFwX2xpZDsKKwlfX2JlMTYgdHJhcF9wa2V5OworCV9fYmUzMiB0cmFwX2hsX3FwOwkvKiA4LCAyNCBiaXRzIHJlc3BlY3RpdmVseSAqLworCV9fYmUzMiB0cmFwX3FrZXk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc2NvbnRyb2wgeworCXU4IG9wY29kZTsKKwl1OCBwb3J0X3NlbGVjdDsKKwl1OCB0aWNrOworCXU4IGNvdW50ZXJfd2lkdGg7CS8qIG9ubHkgbG93ZXIgMyBiaXRzICovCisJX19iZTMyIGNvdW50ZXJfbWFzazBfOTsJLyogMiwgMTAgKiAzLCBiaXRzICovCisJX19iZTE2IGNvdW50ZXJfbWFzazEwXzE0OwkvKiAxLCA1ICogMywgYml0cyAqLworCXU4IHNhbXBsZV9tZWNoYW5pc21zOworCXU4IHNhbXBsZV9zdGF0dXM7CS8qIG9ubHkgbG93ZXIgMiBiaXRzICovCisJX19iZTY0IG9wdGlvbl9tYXNrOworCV9fYmU2NCB2ZW5kb3JfbWFzazsKKwlfX2JlMzIgc2FtcGxlX3N0YXJ0OworCV9fYmUzMiBzYW1wbGVfaW50ZXJ2YWw7CisJX19iZTE2IHRhZzsKKwlfX2JlMTYgY291bnRlcl9zZWxlY3RbMTVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpYl9wbWFfcG9ydHNhbXBsZXNyZXN1bHQgeworCV9fYmUxNiB0YWc7CisJX19iZTE2IHNhbXBsZV9zdGF0dXM7CS8qIG9ubHkgbG93ZXIgMiBiaXRzICovCisJX19iZTMyIGNvdW50ZXJbMTVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpYl9wbWFfcG9ydHNhbXBsZXNyZXN1bHRfZXh0IHsKKwlfX2JlMTYgdGFnOworCV9fYmUxNiBzYW1wbGVfc3RhdHVzOwkvKiBvbmx5IGxvd2VyIDIgYml0cyAqLworCV9fYmUzMiBleHRlbmRlZF93aWR0aDsJLyogb25seSB1cHBlciAyIGJpdHMgKi8KKwlfX2JlNjQgY291bnRlclsxNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgeworCXU4IHJlc2VydmVkOworCXU4IHBvcnRfc2VsZWN0OworCV9fYmUxNiBjb3VudGVyX3NlbGVjdDsKKwlfX2JlMTYgc3ltYm9sX2Vycm9yX2NvdW50ZXI7CisJdTggbGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOworCXU4IGxpbmtfZG93bmVkX2NvdW50ZXI7CisJX19iZTE2IHBvcnRfcmN2X2Vycm9yczsKKwlfX2JlMTYgcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CisJX19iZTE2IHBvcnRfcmN2X3N3aXRjaF9yZWxheV9lcnJvcnM7CisJX19iZTE2IHBvcnRfeG1pdF9kaXNjYXJkczsKKwl1OCBwb3J0X3htaXRfY29uc3RyYWludF9lcnJvcnM7CisJdTggcG9ydF9yY3ZfY29uc3RyYWludF9lcnJvcnM7CisJdTggcmVzZXJ2ZWQxOworCXU4IGxsaV9lYm9yX2Vycm9yczsJLyogNCwgNCwgYml0cyAqLworCV9fYmUxNiByZXNlcnZlZDI7CisJX19iZTE2IHZsMTVfZHJvcHBlZDsKKwlfX2JlMzIgcG9ydF94bWl0X2RhdGE7CisJX19iZTMyIHBvcnRfcmN2X2RhdGE7CisJX19iZTMyIHBvcnRfeG1pdF9wYWNrZXRzOworCV9fYmUzMiBwb3J0X3Jjdl9wYWNrZXRzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSUJfUE1BX1NFTF9TWU1CT0xfRVJST1IJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0VSUk9SX1JFQ09WRVJZCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0RPV05FRAkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX0VSUk9SUwkJX19jb25zdGFudF9odG9ucygweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUkVNUEhZU19FUlJPUlMJX19jb25zdGFudF9odG9ucygweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RJU0NBUkRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDA0MCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDEwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJX19jb25zdGFudF9odG9ucygweDIwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQorCitzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVyc19leHQgeworCXU4IHJlc2VydmVkOworCXU4IHBvcnRfc2VsZWN0OworCV9fYmUxNiBjb3VudGVyX3NlbGVjdDsKKwlfX2JlMzIgcmVzZXJ2ZWQxOworCV9fYmU2NCBwb3J0X3htaXRfZGF0YTsKKwlfX2JlNjQgcG9ydF9yY3ZfZGF0YTsKKwlfX2JlNjQgcG9ydF94bWl0X3BhY2tldHM7CisJX19iZTY0IHBvcnRfcmN2X3BhY2tldHM7CisJX19iZTY0IHBvcnRfdW5pY2FzdF94bWl0X3BhY2tldHM7CisJX19iZTY0IHBvcnRfdW5pY2FzdF9yY3ZfcGFja2V0czsKKwlfX2JlNjQgcG9ydF9tdWx0aWNhc3RfeG1pdF9wYWNrZXRzOworCV9fYmU2NCBwb3J0X211bHRpY2FzdF9yY3ZfcGFja2V0czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQQkJX19jb25zdGFudF9odG9ucygweDAwMDIpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1hNSVRfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfUkNWX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwMjApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfWE1JVF9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1JDVl9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDgwKQorCitzdGF0aWMgaW50IHJlY3ZfcG1hX2dldF9jbGFzc3BvcnRpbmZvKHN0cnVjdCBpYl9wZXJmICpwbXApCit7CisJc3RydWN0IGliX3BtYV9jbGFzc3BvcnRpbmZvICpwID0KKwkJKHN0cnVjdCBpYl9wbWFfY2xhc3Nwb3J0aW5mbyAqKXBtcC0+ZGF0YTsKKworCW1lbXNldChwbXAtPmRhdGEsIDAsIHNpemVvZihwbXAtPmRhdGEpKTsKKworCWlmIChwbXAtPmF0dHJfbW9kICE9IDApCisJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCisJLyogSW5kaWNhdGUgQWxsUG9ydFNlbGVjdCBpcyB2YWxpZCAob25seSBvbmUgcG9ydCBhbnl3YXkpICovCisJcC0+Y2FwX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDEgPDwgOCk7CisJcC0+YmFzZV92ZXJzaW9uID0gMTsKKwlwLT5jbGFzc192ZXJzaW9uID0gMTsKKwkvKgorCSAqIEV4cGVjdGVkIHJlc3BvbnNlIHRpbWUgaXMgNC4wOTYgdXNlYy4gKiAyXjE4ID09IDEuMDczNzQxODI0CisJICogc2VjLgorCSAqLworCXAtPnJlc3BfdGltZV92YWx1ZSA9IDE4OworCisJcmV0dXJuIHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7Cit9CisKKy8qCisgKiBUaGUgUG9ydFNhbXBsZXNDb250cm9sLkNvdW50ZXJNYXNrcyBmaWVsZCBpcyBhbiBhcnJheSBvZiAzIGJpdCBmaWVsZHMKKyAqIHdoaWNoIHNwZWNpZnkgdGhlIE4ndGggY291bnRlcidzIGNhcGFiaWxpdGllcy4gU2VlIGNoLiAxNi4xLjMuMi4KKyAqIFdlIHN1cHBvcnQgNSBjb3VudGVycyB3aGljaCBvbmx5IGNvdW50IHRoZSBtYW5kYXRvcnkgcXVhbnRpdGllcy4KKyAqLworI2RlZmluZSBDT1VOVEVSX01BU0socSwgbikgKHEgPDwgKCg5IC0gbikgKiAzKSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLMF85IFwKKwlfX2NvbnN0YW50X2NwdV90b19iZTMyKENPVU5URVJfTUFTSygxLCAwKSB8IFwKKwkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMSkgfCBcCisJCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDIpIHwgXAorCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAzKSB8IFwKKwkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgNCkpCisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzY29udHJvbChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAorCQkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzY29udHJvbCAqcCA9CisJCShzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzY29udHJvbCAqKXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcG9ydF9zZWxlY3QgPSBwLT5wb3J0X3NlbGVjdDsKKworCW1lbXNldChwbXAtPmRhdGEsIDAsIHNpemVvZihwbXAtPmRhdGEpKTsKKworCXAtPnBvcnRfc2VsZWN0ID0gcG9ydF9zZWxlY3Q7CisJaWYgKHBtcC0+YXR0cl9tb2QgIT0gMCB8fAorCSAgICAocG9ydF9zZWxlY3QgIT0gcG9ydCAmJiBwb3J0X3NlbGVjdCAhPSAweEZGKSkKKwkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisJLyoKKwkgKiBUaWNrcyBhcmUgMTB4IHRoZSBsaW5rIHRyYW5zZmVyIHBlcmlvZCB3aGljaCBmb3IgMi41R2JzIGlzIDQKKwkgKiBuc2VjLiAgMCA9PSA0IG5zZWMuLCAxID09IDggbnNlYy4sIC4uLiwgMjU1ID09IDEwMjAgbnNlYy4gIFNhbXBsZQorCSAqIGludGVydmFscyBhcmUgY291bnRlZCBpbiB0aWNrcy4gIFNpbmNlIHdlIHVzZSBMaW51eCB0aW1lcnMsIHRoYXQKKwkgKiBjb3VudCBpbiBqaWZmaWVzLCB3ZSBjYW4ndCBzYW1wbGUgZm9yIGxlc3MgdGhhbiAxMDAwIHRpY2tzIGlmIEhaCisJICogPT0gMTAwMCAoNDAwMCB0aWNrcyBpZiBIWiBpcyAyNTApLgorCSAqLworCS8qIFhYWCBUaGlzIGlzIFdST05HLiAqLworCXAtPnRpY2sgPSAyNTA7CQkvKiAxIHVzZWMuICovCisJcC0+Y291bnRlcl93aWR0aCA9IDQ7CS8qIDMyIGJpdCBjb3VudGVycyAqLworCXAtPmNvdW50ZXJfbWFzazBfOSA9IENPVU5URVJfTUFTSzBfOTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwlwLT5zYW1wbGVfc3RhdHVzID0gZGV2LT5wbWFfc2FtcGxlX3N0YXR1czsKKwlwLT5zYW1wbGVfc3RhcnQgPSBjcHVfdG9fYmUzMihkZXYtPnBtYV9zYW1wbGVfc3RhcnQpOworCXAtPnNhbXBsZV9pbnRlcnZhbCA9IGNwdV90b19iZTMyKGRldi0+cG1hX3NhbXBsZV9pbnRlcnZhbCk7CisJcC0+dGFnID0gY3B1X3RvX2JlMTYoZGV2LT5wbWFfdGFnKTsKKwlwLT5jb3VudGVyX3NlbGVjdFswXSA9IGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzBdOworCXAtPmNvdW50ZXJfc2VsZWN0WzFdID0gZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMV07CisJcC0+Y291bnRlcl9zZWxlY3RbMl0gPSBkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFsyXTsKKwlwLT5jb3VudGVyX3NlbGVjdFszXSA9IGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzNdOworCXAtPmNvdW50ZXJfc2VsZWN0WzRdID0gZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbNF07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworfQorCitzdGF0aWMgaW50IHJlY3ZfcG1hX3NldF9wb3J0c2FtcGxlc2NvbnRyb2woc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCit7CisJc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc2NvbnRyb2wgKnAgPQorCQkoc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc2NvbnRyb2wgKilwbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGFydDsKKwlpbnQgcmV0OworCisJaWYgKHBtcC0+YXR0cl9tb2QgIT0gMCB8fAorCSAgICAocC0+cG9ydF9zZWxlY3QgIT0gcG9ydCAmJiBwLT5wb3J0X3NlbGVjdCAhPSAweEZGKSkgeworCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwkJcmV0ID0gcmVwbHkoKHN0cnVjdCBpYl9zbXAgKikgcG1wKTsKKwkJZ290byBiYWlsOworCX0KKworCXN0YXJ0ID0gYmUzMl90b19jcHUocC0+c2FtcGxlX3N0YXJ0KTsKKwlpZiAoc3RhcnQgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGRldi0+cG1hX3NhbXBsZV9zdGF0dXMgPT0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfRE9ORSkgeworCQkJZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyA9CisJCQkJSUJfUE1BX1NBTVBMRV9TVEFUVVNfU1RBUlRFRDsKKwkJCWRldi0+cG1hX3NhbXBsZV9zdGFydCA9IHN0YXJ0OworCQkJZGV2LT5wbWFfc2FtcGxlX2ludGVydmFsID0KKwkJCQliZTMyX3RvX2NwdShwLT5zYW1wbGVfaW50ZXJ2YWwpOworCQkJZGV2LT5wbWFfdGFnID0gYmUxNl90b19jcHUocC0+dGFnKTsKKwkJCWlmIChwLT5jb3VudGVyX3NlbGVjdFswXSkKKwkJCQlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFswXSA9CisJCQkJCXAtPmNvdW50ZXJfc2VsZWN0WzBdOworCQkJaWYgKHAtPmNvdW50ZXJfc2VsZWN0WzFdKQorCQkJCWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzFdID0KKwkJCQkJcC0+Y291bnRlcl9zZWxlY3RbMV07CisJCQlpZiAocC0+Y291bnRlcl9zZWxlY3RbMl0pCisJCQkJZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMl0gPQorCQkJCQlwLT5jb3VudGVyX3NlbGVjdFsyXTsKKwkJCWlmIChwLT5jb3VudGVyX3NlbGVjdFszXSkKKwkJCQlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFszXSA9CisJCQkJCXAtPmNvdW50ZXJfc2VsZWN0WzNdOworCQkJaWYgKHAtPmNvdW50ZXJfc2VsZWN0WzRdKQorCQkJCWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzRdID0KKwkJCQkJcC0+Y291bnRlcl9zZWxlY3RbNF07CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwl9CisJcmV0ID0gcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzY29udHJvbChwbXAsIGliZGV2LCBwb3J0KTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTY0IGdldF9jb3VudGVyKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBfX2JlMTYgc2VsKQoreworCXU2NCByZXQ7CisKKwlzd2l0Y2ggKHNlbCkgeworCWNhc2UgSUJfUE1BX1BPUlRfWE1JVF9EQVRBOgorCQlyZXQgPSBkZXYtPmlwYXRoX3N3b3JkOworCQlicmVhazsKKwljYXNlIElCX1BNQV9QT1JUX1JDVl9EQVRBOgorCQlyZXQgPSBkZXYtPmlwYXRoX3J3b3JkOworCQlicmVhazsKKwljYXNlIElCX1BNQV9QT1JUX1hNSVRfUEtUUzoKKwkJcmV0ID0gZGV2LT5pcGF0aF9zcGt0czsKKwkJYnJlYWs7CisJY2FzZSBJQl9QTUFfUE9SVF9SQ1ZfUEtUUzoKKwkJcmV0ID0gZGV2LT5pcGF0aF9ycGt0czsKKwkJYnJlYWs7CisJY2FzZSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQ6CisJCXJldCA9IGRldi0+aXBhdGhfeG1pdF93YWl0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzcmVzdWx0KHN0cnVjdCBpYl9wZXJmICpwbXAsCisJCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc3Jlc3VsdCAqcCA9CisJCShzdHJ1Y3QgaWJfcG1hX3BvcnRzYW1wbGVzcmVzdWx0ICopcG1wLT5kYXRhOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJaW50IGk7CisKKwltZW1zZXQocG1wLT5kYXRhLCAwLCBzaXplb2YocG1wLT5kYXRhKSk7CisJcC0+dGFnID0gY3B1X3RvX2JlMTYoZGV2LT5wbWFfdGFnKTsKKwlwLT5zYW1wbGVfc3RhdHVzID0gY3B1X3RvX2JlMTYoZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2LT5wbWFfY291bnRlcl9zZWxlY3QpOyBpKyspCisJCXAtPmNvdW50ZXJbaV0gPSBjcHVfdG9fYmUzMigKKwkJCWdldF9jb3VudGVyKGRldiwgZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbaV0pKTsKKworCXJldHVybiByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworfQorCitzdGF0aWMgaW50IHJlY3ZfcG1hX2dldF9wb3J0c2FtcGxlc3Jlc3VsdF9leHQoc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkJICAgICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCit7CisJc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc3Jlc3VsdF9leHQgKnAgPQorCQkoc3RydWN0IGliX3BtYV9wb3J0c2FtcGxlc3Jlc3VsdF9leHQgKilwbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlpbnQgaTsKKworCW1lbXNldChwbXAtPmRhdGEsIDAsIHNpemVvZihwbXAtPmRhdGEpKTsKKwlwLT50YWcgPSBjcHVfdG9fYmUxNihkZXYtPnBtYV90YWcpOworCXAtPnNhbXBsZV9zdGF0dXMgPSBjcHVfdG9fYmUxNihkZXYtPnBtYV9zYW1wbGVfc3RhdHVzKTsKKwkvKiA2NCBiaXRzICovCisJcC0+ZXh0ZW5kZWRfd2lkdGggPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4ODAwMDAwMDApOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0KTsgaSsrKQorCQlwLT5jb3VudGVyW2ldID0gY3B1X3RvX2JlNjQoCisJCQlnZXRfY291bnRlcihkZXYsIGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0W2ldKSk7CisKKwlyZXR1cm4gcmVwbHkoKHN0cnVjdCBpYl9zbXAgKikgcG1wKTsKK30KKworc3RhdGljIGludCByZWN2X3BtYV9nZXRfcG9ydGNvdW50ZXJzKHN0cnVjdCBpYl9wZXJmICpwbXAsCisJCQkJICAgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVycyAqcCA9IChzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVycyAqKQorCQlwbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlzdHJ1Y3QgaXBhdGhfbGF5ZXJfY291bnRlcnMgY250cnM7CisJdTggcG9ydF9zZWxlY3QgPSBwLT5wb3J0X3NlbGVjdDsKKworCWlwYXRoX2xheWVyX2dldF9jb3VudGVycyhkZXYtPmRkLCAmY250cnMpOworCisJLyogQWRqdXN0IGNvdW50ZXJzIGZvciBhbnkgcmVzZXRzIGRvbmUuICovCisJY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXIgLT0gZGV2LT5uX3N5bWJvbF9lcnJvcl9jb3VudGVyOworCWNudHJzLmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciAtPQorCQlkZXYtPm5fbGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOworCWNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXIgLT0gZGV2LT5uX2xpbmtfZG93bmVkX2NvdW50ZXI7CisJY250cnMucG9ydF9yY3ZfZXJyb3JzICs9IGRldi0+cmN2X2Vycm9yczsKKwljbnRycy5wb3J0X3Jjdl9lcnJvcnMgLT0gZGV2LT5uX3BvcnRfcmN2X2Vycm9yczsKKwljbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyAtPSBkZXYtPm5fcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CisJY250cnMucG9ydF94bWl0X2Rpc2NhcmRzIC09IGRldi0+bl9wb3J0X3htaXRfZGlzY2FyZHM7CisJY250cnMucG9ydF94bWl0X2RhdGEgLT0gZGV2LT5uX3BvcnRfeG1pdF9kYXRhOworCWNudHJzLnBvcnRfcmN2X2RhdGEgLT0gZGV2LT5uX3BvcnRfcmN2X2RhdGE7CisJY250cnMucG9ydF94bWl0X3BhY2tldHMgLT0gZGV2LT5uX3BvcnRfeG1pdF9wYWNrZXRzOworCWNudHJzLnBvcnRfcmN2X3BhY2tldHMgLT0gZGV2LT5uX3BvcnRfcmN2X3BhY2tldHM7CisKKwltZW1zZXQocG1wLT5kYXRhLCAwLCBzaXplb2YocG1wLT5kYXRhKSk7CisKKwlwLT5wb3J0X3NlbGVjdCA9IHBvcnRfc2VsZWN0OworCWlmIChwbXAtPmF0dHJfbW9kICE9IDAgfHwKKwkgICAgKHBvcnRfc2VsZWN0ICE9IHBvcnQgJiYgcG9ydF9zZWxlY3QgIT0gMHhGRikpCisJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCisJaWYgKGNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyID4gMHhGRkZGVUwpCisJCXAtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCWVsc2UKKwkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPQorCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcik7CisJaWYgKGNudHJzLmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA+IDB4RkZVTCkKKwkJcC0+bGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyID0gMHhGRjsKKwllbHNlCisJCXAtPmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9CisJCQkodTgpY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOworCWlmIChjbnRycy5saW5rX2Rvd25lZF9jb3VudGVyID4gMHhGRlVMKQorCQlwLT5saW5rX2Rvd25lZF9jb3VudGVyID0gMHhGRjsKKwllbHNlCisJCXAtPmxpbmtfZG93bmVkX2NvdW50ZXIgPSAodTgpY250cnMubGlua19kb3duZWRfY291bnRlcjsKKwlpZiAoY250cnMucG9ydF9yY3ZfZXJyb3JzID4gMHhGRkZGVUwpCisJCXAtPnBvcnRfcmN2X2Vycm9ycyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwllbHNlCisJCXAtPnBvcnRfcmN2X2Vycm9ycyA9CisJCQljcHVfdG9fYmUxNigodTE2KSBjbnRycy5wb3J0X3Jjdl9lcnJvcnMpOworCWlmIChjbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA+IDB4RkZGRlVMKQorCQlwLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwllbHNlCisJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KKwkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMpOworCWlmIChjbnRycy5wb3J0X3htaXRfZGlzY2FyZHMgPiAweEZGRkZVTCkKKwkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCWVsc2UKKwkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0KKwkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF94bWl0X2Rpc2NhcmRzKTsKKwlpZiAoY250cnMucG9ydF94bWl0X2RhdGEgPiAweEZGRkZGRkZGVUwpCisJCXAtPnBvcnRfeG1pdF9kYXRhID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwllbHNlCisJCXAtPnBvcnRfeG1pdF9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3htaXRfZGF0YSk7CisJaWYgKGNudHJzLnBvcnRfcmN2X2RhdGEgPiAweEZGRkZGRkZGVUwpCisJCXAtPnBvcnRfcmN2X2RhdGEgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCWVsc2UKKwkJcC0+cG9ydF9yY3ZfZGF0YSA9IGNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF9yY3ZfZGF0YSk7CisJaWYgKGNudHJzLnBvcnRfeG1pdF9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQorCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJZWxzZQorCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9CisJCQljcHVfdG9fYmUzMigodTMyKWNudHJzLnBvcnRfeG1pdF9wYWNrZXRzKTsKKwlpZiAoY250cnMucG9ydF9yY3ZfcGFja2V0cyA+IDB4RkZGRkZGRkZVTCkKKwkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJZWxzZQorCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0KKwkJCWNwdV90b19iZTMyKCh1MzIpIGNudHJzLnBvcnRfcmN2X3BhY2tldHMpOworCisJcmV0dXJuIHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRjb3VudGVyc19leHQoc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkJIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQoreworCXN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzX2V4dCAqcCA9CisJCShzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVyc19leHQgKilwbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwl1NjQgc3dvcmRzLCByd29yZHMsIHNwa3RzLCBycGt0cywgeHdhaXQ7CisJdTggcG9ydF9zZWxlY3QgPSBwLT5wb3J0X3NlbGVjdDsKKworCWlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKGRldi0+ZGQsICZzd29yZHMsICZyd29yZHMsICZzcGt0cywKKwkJCQkgICAgICAmcnBrdHMsICZ4d2FpdCk7CisKKwkvKiBBZGp1c3QgY291bnRlcnMgZm9yIGFueSByZXNldHMgZG9uZS4gKi8KKwlzd29yZHMgLT0gZGV2LT5uX3BvcnRfeG1pdF9kYXRhOworCXJ3b3JkcyAtPSBkZXYtPm5fcG9ydF9yY3ZfZGF0YTsKKwlzcGt0cyAtPSBkZXYtPm5fcG9ydF94bWl0X3BhY2tldHM7CisJcnBrdHMgLT0gZGV2LT5uX3BvcnRfcmN2X3BhY2tldHM7CisKKwltZW1zZXQocG1wLT5kYXRhLCAwLCBzaXplb2YocG1wLT5kYXRhKSk7CisKKwlwLT5wb3J0X3NlbGVjdCA9IHBvcnRfc2VsZWN0OworCWlmIChwbXAtPmF0dHJfbW9kICE9IDAgfHwKKwkgICAgKHBvcnRfc2VsZWN0ICE9IHBvcnQgJiYgcG9ydF9zZWxlY3QgIT0gMHhGRikpCisJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCisJcC0+cG9ydF94bWl0X2RhdGEgPSBjcHVfdG9fYmU2NChzd29yZHMpOworCXAtPnBvcnRfcmN2X2RhdGEgPSBjcHVfdG9fYmU2NChyd29yZHMpOworCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gY3B1X3RvX2JlNjQoc3BrdHMpOworCXAtPnBvcnRfcmN2X3BhY2tldHMgPSBjcHVfdG9fYmU2NChycGt0cyk7CisJcC0+cG9ydF91bmljYXN0X3htaXRfcGFja2V0cyA9IGNwdV90b19iZTY0KGRldi0+bl91bmljYXN0X3htaXQpOworCXAtPnBvcnRfdW5pY2FzdF9yY3ZfcGFja2V0cyA9IGNwdV90b19iZTY0KGRldi0+bl91bmljYXN0X3Jjdik7CisJcC0+cG9ydF9tdWx0aWNhc3RfeG1pdF9wYWNrZXRzID0gY3B1X3RvX2JlNjQoZGV2LT5uX211bHRpY2FzdF94bWl0KTsKKwlwLT5wb3J0X211bHRpY2FzdF9yY3ZfcGFja2V0cyA9IGNwdV90b19iZTY0KGRldi0+bl9tdWx0aWNhc3RfcmN2KTsKKworCXJldHVybiByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworfQorCitzdGF0aWMgaW50IHJlY3ZfcG1hX3NldF9wb3J0Y291bnRlcnMoc3RydWN0IGliX3BlcmYgKnBtcCwKKwkJCQkgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQoreworCXN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzICpwID0gKHN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzICopCisJCXBtcC0+ZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXN0cnVjdCBpcGF0aF9sYXllcl9jb3VudGVycyBjbnRyczsKKworCS8qCisJICogU2luY2UgdGhlIEhXIGRvZXNuJ3Qgc3VwcG9ydCBjbGVhcmluZyBjb3VudGVycywgd2Ugc2F2ZSB0aGUKKwkgKiBjdXJyZW50IGNvdW50IGFuZCBzdWJ0cmFjdCBpdCBmcm9tIGZ1dHVyZSByZXNwb25zZXMuCisJICovCisJaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKGRldi0+ZGQsICZjbnRycyk7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUikKKwkJZGV2LT5uX3N5bWJvbF9lcnJvcl9jb3VudGVyID0gY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXI7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkpCisJCWRldi0+bl9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXIgPQorCQkJY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9MSU5LX0RPV05FRCkKKwkJZGV2LT5uX2xpbmtfZG93bmVkX2NvdW50ZXIgPSBjbnRycy5saW5rX2Rvd25lZF9jb3VudGVyOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMpCisJCWRldi0+bl9wb3J0X3Jjdl9lcnJvcnMgPQorCQkJY250cnMucG9ydF9yY3ZfZXJyb3JzICsgZGV2LT5yY3ZfZXJyb3JzOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUykKKwkJZGV2LT5uX3BvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KKwkJCWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMpCisJCWRldi0+bl9wb3J0X3htaXRfZGlzY2FyZHMgPSBjbnRycy5wb3J0X3htaXRfZGlzY2FyZHM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBKQorCQlkZXYtPm5fcG9ydF94bWl0X2RhdGEgPSBjbnRycy5wb3J0X3htaXRfZGF0YTsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQSkKKwkJZGV2LT5uX3BvcnRfcmN2X2RhdGEgPSBjbnRycy5wb3J0X3Jjdl9kYXRhOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUykKKwkJZGV2LT5uX3BvcnRfeG1pdF9wYWNrZXRzID0gY250cnMucG9ydF94bWl0X3BhY2tldHM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMpCisJCWRldi0+bl9wb3J0X3Jjdl9wYWNrZXRzID0gY250cnMucG9ydF9yY3ZfcGFja2V0czsKKworCXJldHVybiByZWN2X3BtYV9nZXRfcG9ydGNvdW50ZXJzKHBtcCwgaWJkZXYsIHBvcnQpOworfQorCitzdGF0aWMgaW50IHJlY3ZfcG1hX3NldF9wb3J0Y291bnRlcnNfZXh0KHN0cnVjdCBpYl9wZXJmICpwbXAsCisJCQkJCSBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVycyAqcCA9IChzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVycyAqKQorCQlwbXAtPmRhdGE7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwl1NjQgc3dvcmRzLCByd29yZHMsIHNwa3RzLCBycGt0cywgeHdhaXQ7CisKKwlpcGF0aF9sYXllcl9zbmFwc2hvdF9jb3VudGVycyhkZXYtPmRkLCAmc3dvcmRzLCAmcndvcmRzLCAmc3BrdHMsCisJCQkJICAgICAgJnJwa3RzLCAmeHdhaXQpOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEpCisJCWRldi0+bl9wb3J0X3htaXRfZGF0YSA9IHN3b3JkczsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxYX1BPUlRfUkNWX0RBVEEpCisJCWRldi0+bl9wb3J0X3Jjdl9kYXRhID0gcndvcmRzOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMpCisJCWRldi0+bl9wb3J0X3htaXRfcGFja2V0cyA9IHNwa3RzOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfUEFDS0VUUykKKwkJZGV2LT5uX3BvcnRfcmN2X3BhY2tldHMgPSBycGt0czsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxYX1BPUlRfVU5JX1hNSVRfUEFDS0VUUykKKwkJZGV2LT5uX3VuaWNhc3RfeG1pdCA9IDA7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMWF9QT1JUX1VOSV9SQ1ZfUEFDS0VUUykKKwkJZGV2LT5uX3VuaWNhc3RfcmN2ID0gMDsKKworCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfWE1JVF9QQUNLRVRTKQorCQlkZXYtPm5fbXVsdGljYXN0X3htaXQgPSAwOworCisJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9SQ1ZfUEFDS0VUUykKKwkJZGV2LT5uX211bHRpY2FzdF9yY3YgPSAwOworCisJcmV0dXJuIHJlY3ZfcG1hX2dldF9wb3J0Y291bnRlcnNfZXh0KHBtcCwgaWJkZXYsIHBvcnQpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Nfc3VibihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IG1hZF9mbGFncywKKwkJCXU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsCisJCQlzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQoreworCXN0cnVjdCBpYl9zbXAgKnNtcCA9IChzdHJ1Y3QgaWJfc21wICopb3V0X21hZDsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCWludCByZXQ7CisKKwkqb3V0X21hZCA9ICppbl9tYWQ7CisJaWYgKHNtcC0+Y2xhc3NfdmVyc2lvbiAhPSAxKSB7CisJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9VTlNVUF9WRVJTSU9OOworCQlyZXQgPSByZXBseShzbXApOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogSXMgdGhlIG1rZXkgaW4gdGhlIHByb2Nlc3Mgb2YgZXhwaXJpbmc/ICovCisJaWYgKGRldi0+bWtleV9sZWFzZV90aW1lb3V0ICYmIGppZmZpZXMgPj0gZGV2LT5ta2V5X2xlYXNlX3RpbWVvdXQpIHsKKwkJLyogQ2xlYXIgdGltZW91dCBhbmQgbWtleSBwcm90ZWN0aW9uIGZpZWxkLiAqLworCQlkZXYtPm1rZXlfbGVhc2VfdGltZW91dCA9IDA7CisJCWRldi0+bWtleXByb3RfcmVzdl9sbWMgJj0gMHgzRjsKKwl9CisKKwkvKgorCSAqIE1fS2V5IGNoZWNraW5nIGRlcGVuZHMgb24KKwkgKiBQb3J0aW5mbzpNX0tleV9wcm90ZWN0X2JpdHMKKwkgKi8KKwlpZiAoKG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfTUtFWSkgPT0gMCAmJiBkZXYtPm1rZXkgIT0gMCAmJgorCSAgICBkZXYtPm1rZXkgIT0gc21wLT5ta2V5ICYmCisJICAgIChzbXAtPm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9TRVQgfHwKKwkgICAgIChzbXAtPm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9HRVQgJiYKKwkgICAgICAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyA+PiA3KSAhPSAwKSkpIHsKKwkJaWYgKGRldi0+bWtleV92aW9sYXRpb25zICE9IDB4RkZGRikKKwkJCSsrZGV2LT5ta2V5X3Zpb2xhdGlvbnM7CisJCWlmIChkZXYtPm1rZXlfbGVhc2VfdGltZW91dCB8fAorCQkgICAgZGV2LT5ta2V5X2xlYXNlX3BlcmlvZCA9PSAwKSB7CisJCQlyZXQgPSBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfAorCQkJCUlCX01BRF9SRVNVTFRfQ09OU1VNRUQ7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJZGV2LT5ta2V5X2xlYXNlX3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCWRldi0+bWtleV9sZWFzZV9wZXJpb2QgKiBIWjsKKwkJLyogRnV0dXJlOiBHZW5lcmF0ZSBhIHRyYXAgbm90aWNlLiAqLworCQlyZXQgPSBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfCBJQl9NQURfUkVTVUxUX0NPTlNVTUVEOworCQlnb3RvIGJhaWw7CisJfSBlbHNlIGlmIChkZXYtPm1rZXlfbGVhc2VfdGltZW91dCkKKwkJZGV2LT5ta2V5X2xlYXNlX3RpbWVvdXQgPSAwOworCisJc3dpdGNoIChzbXAtPm1ldGhvZCkgeworCWNhc2UgSUJfTUdNVF9NRVRIT0RfR0VUOgorCQlzd2l0Y2ggKHNtcC0+YXR0cl9pZCkgeworCQljYXNlIElCX1NNUF9BVFRSX05PREVfREVTQzoKKwkJCXJldCA9IHJlY3Zfc3Vibl9nZXRfbm9kZWRlc2NyaXB0aW9uKHNtcCwgaWJkZXYpOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1NNUF9BVFRSX05PREVfSU5GTzoKKwkJCXJldCA9IHJlY3Zfc3Vibl9nZXRfbm9kZWluZm8oc21wLCBpYmRldiwgcG9ydF9udW0pOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1NNUF9BVFRSX0dVSURfSU5GTzoKKwkJCXJldCA9IHJlY3Zfc3Vibl9nZXRfZ3VpZGluZm8oc21wLCBpYmRldik7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfUE9SVF9JTkZPOgorCQkJcmV0ID0gcmVjdl9zdWJuX2dldF9wb3J0aW5mbyhzbXAsIGliZGV2LCBwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfUEtFWV9UQUJMRToKKwkJCXJldCA9IHJlY3Zfc3Vibl9nZXRfcGtleXRhYmxlKHNtcCwgaWJkZXYpOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1NNUF9BVFRSX1NNX0lORk86CisJCQlpZiAoZGV2LT5wb3J0X2NhcF9mbGFncyAmIElCX1BPUlRfU01fRElTQUJMRUQpIHsKKwkJCQlyZXQgPSBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfAorCQkJCQlJQl9NQURfUkVTVUxUX0NPTlNVTUVEOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCWlmIChkZXYtPnBvcnRfY2FwX2ZsYWdzICYgSUJfUE9SVF9TTSkgeworCQkJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgorCQkJc21wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX01FVEhfQVRUUjsKKwkJCXJldCA9IHJlcGx5KHNtcCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCWNhc2UgSUJfTUdNVF9NRVRIT0RfU0VUOgorCQlzd2l0Y2ggKHNtcC0+YXR0cl9pZCkgeworCQljYXNlIElCX1NNUF9BVFRSX0dVSURfSU5GTzoKKwkJCXJldCA9IHJlY3Zfc3Vibl9zZXRfZ3VpZGluZm8oc21wLCBpYmRldik7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfUE9SVF9JTkZPOgorCQkJcmV0ID0gcmVjdl9zdWJuX3NldF9wb3J0aW5mbyhzbXAsIGliZGV2LCBwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfU01QX0FUVFJfUEtFWV9UQUJMRToKKwkJCXJldCA9IHJlY3Zfc3Vibl9zZXRfcGtleXRhYmxlKHNtcCwgaWJkZXYpOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1NNUF9BVFRSX1NNX0lORk86CisJCQlpZiAoZGV2LT5wb3J0X2NhcF9mbGFncyAmIElCX1BPUlRfU01fRElTQUJMRUQpIHsKKwkJCQlyZXQgPSBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfAorCQkJCQlJQl9NQURfUkVTVUxUX0NPTlNVTUVEOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCWlmIChkZXYtPnBvcnRfY2FwX2ZsYWdzICYgSUJfUE9SVF9TTSkgeworCQkJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgorCQkJc21wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX01FVEhfQVRUUjsKKwkJCXJldCA9IHJlcGx5KHNtcCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCWNhc2UgSUJfTUdNVF9NRVRIT0RfR0VUX1JFU1A6CisJCS8qCisJCSAqIFRoZSBpYl9tYWQgbW9kdWxlIHdpbGwgY2FsbCB1cyB0byBwcm9jZXNzIHJlc3BvbnNlcworCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIGNvbnN1bWVycy4KKwkJICogSnVzdCB0ZWxsIHRoZSBjYWxsZXIgdG8gcHJvY2VzcyBpdCBub3JtYWxseS4KKwkJICovCisJCXJldCA9IElCX01BRF9SRVNVTFRfRkFJTFVSRTsKKwkJZ290byBiYWlsOworCWRlZmF1bHQ6CisJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9VTlNVUF9NRVRIT0Q7CisJCXJldCA9IHJlcGx5KHNtcCk7CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19wZXJmKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0X251bSwKKwkJCXN0cnVjdCBpYl9tYWQgKmluX21hZCwKKwkJCXN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCit7CisJc3RydWN0IGliX3BlcmYgKnBtcCA9IChzdHJ1Y3QgaWJfcGVyZiAqKW91dF9tYWQ7CisJaW50IHJldDsKKworCSpvdXRfbWFkID0gKmluX21hZDsKKwlpZiAocG1wLT5jbGFzc192ZXJzaW9uICE9IDEpIHsKKwkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX1ZFUlNJT047CisJCXJldCA9IHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzd2l0Y2ggKHBtcC0+bWV0aG9kKSB7CisJY2FzZSBJQl9NR01UX01FVEhPRF9HRVQ6CisJCXN3aXRjaCAocG1wLT5hdHRyX2lkKSB7CisJCWNhc2UgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTzoKKwkJCXJldCA9IHJlY3ZfcG1hX2dldF9jbGFzc3BvcnRpbmZvKHBtcCk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MOgorCQkJcmV0ID0gcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzY29udHJvbChwbXAsIGliZGV2LAorCQkJCQkJCSAgICAgIHBvcnRfbnVtKTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVDoKKwkJCXJldCA9IHJlY3ZfcG1hX2dldF9wb3J0c2FtcGxlc3Jlc3VsdChwbXAsIGliZGV2KTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQ6CisJCQlyZXQgPSByZWN2X3BtYV9nZXRfcG9ydHNhbXBsZXNyZXN1bHRfZXh0KHBtcCwKKwkJCQkJCQkJIGliZGV2KTsKKwkJCWdvdG8gYmFpbDsKKwkJY2FzZSBJQl9QTUFfUE9SVF9DT1VOVEVSUzoKKwkJCXJldCA9IHJlY3ZfcG1hX2dldF9wb3J0Y291bnRlcnMocG1wLCBpYmRldiwKKwkJCQkJCQlwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUOgorCQkJcmV0ID0gcmVjdl9wbWFfZ2V0X3BvcnRjb3VudGVyc19leHQocG1wLCBpYmRldiwKKwkJCQkJCQkgICAgcG9ydF9udW0pOworCQkJZ290byBiYWlsOworCQlkZWZhdWx0OgorCQkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX1VOU1VQX01FVEhfQVRUUjsKKwkJCXJldCA9IHJlcGx5KChzdHJ1Y3QgaWJfc21wICopIHBtcCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCWNhc2UgSUJfTUdNVF9NRVRIT0RfU0VUOgorCQlzd2l0Y2ggKHBtcC0+YXR0cl9pZCkgeworCQljYXNlIElCX1BNQV9QT1JUX1NBTVBMRVNfQ09OVFJPTDoKKwkJCXJldCA9IHJlY3ZfcG1hX3NldF9wb3J0c2FtcGxlc2NvbnRyb2wocG1wLCBpYmRldiwKKwkJCQkJCQkgICAgICBwb3J0X251bSk7CisJCQlnb3RvIGJhaWw7CisJCWNhc2UgSUJfUE1BX1BPUlRfQ09VTlRFUlM6CisJCQlyZXQgPSByZWN2X3BtYV9zZXRfcG9ydGNvdW50ZXJzKHBtcCwgaWJkZXYsCisJCQkJCQkJcG9ydF9udW0pOworCQkJZ290byBiYWlsOworCQljYXNlIElCX1BNQV9QT1JUX0NPVU5URVJTX0VYVDoKKwkJCXJldCA9IHJlY3ZfcG1hX3NldF9wb3J0Y291bnRlcnNfZXh0KHBtcCwgaWJkZXYsCisJCQkJCQkJICAgIHBvcnRfbnVtKTsKKwkJCWdvdG8gYmFpbDsKKwkJZGVmYXVsdDoKKwkJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9VTlNVUF9NRVRIX0FUVFI7CisJCQlyZXQgPSByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworCQkJZ290byBiYWlsOworCQl9CisKKwljYXNlIElCX01HTVRfTUVUSE9EX0dFVF9SRVNQOgorCQkvKgorCQkgKiBUaGUgaWJfbWFkIG1vZHVsZSB3aWxsIGNhbGwgdXMgdG8gcHJvY2VzcyByZXNwb25zZXMKKwkJICogYmVmb3JlIGNoZWNraW5nIGZvciBvdGhlciBjb25zdW1lcnMuCisJCSAqIEp1c3QgdGVsbCB0aGUgY2FsbGVyIHRvIHByb2Nlc3MgaXQgbm9ybWFsbHkuCisJCSAqLworCQlyZXQgPSBJQl9NQURfUkVTVUxUX0ZBSUxVUkU7CisJCWdvdG8gYmFpbDsKKwlkZWZhdWx0OgorCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfVU5TVVBfTUVUSE9EOworCQlyZXQgPSByZXBseSgoc3RydWN0IGliX3NtcCAqKSBwbXApOworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3Byb2Nlc3NfbWFkIC0gcHJvY2VzcyBhbiBpbmNvbWluZyBNQUQgcGFja2V0CisgKiBAaWJkZXY6IHRoZSBpbmZpbmliYW5kIGRldmljZSB0aGlzIHBhY2tldCBjYW1lIGluIG9uCisgKiBAbWFkX2ZsYWdzOiBNQUQgZmxhZ3MKKyAqIEBwb3J0X251bTogdGhlIHBvcnQgbnVtYmVyIHRoaXMgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBpbl93YzogdGhlIHdvcmsgY29tcGxldGlvbiBlbnRyeSBmb3IgdGhpcyBwYWNrZXQKKyAqIEBpbl9ncmg6IHRoZSBnbG9iYWwgcm91dGUgaGVhZGVyIGZvciB0aGlzIHBhY2tldAorICogQGluX21hZDogdGhlIGluY29taW5nIE1BRAorICogQG91dF9tYWQ6IGFueSBvdXRnb2luZyBNQUQgcmVwbHkKKyAqCisgKiBSZXR1cm5zIElCX01BRF9SRVNVTFRfU1VDQ0VTUyBpZiB0aGlzIGlzIGEgTUFEIHRoYXQgd2UgYXJlIG5vdAorICogaW50ZXJlc3RlZCBpbiBwcm9jZXNzaW5nLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgdmVyYnMgZnJhbWV3b3JrIGhhcyBhbHJlYWR5IGRvbmUgdGhlIE1BRCBzYW5pdHkgY2hlY2tzLAorICogYW5kIGhvcCBjb3VudC9wb2ludGVyIHVwZGF0aW5nIGZvciBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUKKyAqIE1BRHMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGliX21hZCBtb2R1bGUuCisgKi8KK2ludCBpcGF0aF9wcm9jZXNzX21hZChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IG1hZF9mbGFncywgdTggcG9ydF9udW0sCisJCSAgICAgIHN0cnVjdCBpYl93YyAqaW5fd2MsIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKKwkJICAgICAgc3RydWN0IGliX21hZCAqaW5fbWFkLCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJaW50IHJldDsKKworCS8qCisJICogU25hcHNob3QgY3VycmVudCBIVyBjb3VudGVycyB0byAiY2xlYXIiIHRoZW0uCisJICogVGhpcyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGV4Y2VwdCB0aGF0IGZvcgorCSAqIHNvbWUgcmVhc29uIHdlIGdldCBhIHppbGxpb24gZXJyb3JzIHdoZW4gYnJpbmluZyB1cCB0aGUgbGluay4KKwkgKi8KKwlpZiAoZGV2LT5yY3ZfZXJyb3JzID09IDApIHsKKwkJc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOworCisJCWlwYXRoX2xheWVyX2dldF9jb3VudGVycyh0b19pZGV2KGliZGV2KS0+ZGQsICZjbnRycyk7CisJCWRldi0+cmN2X2Vycm9ycysrOworCQlkZXYtPm5fc3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcjsKKwkJZGV2LT5uX2xpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9CisJCQljbnRycy5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CisJCWRldi0+bl9saW5rX2Rvd25lZF9jb3VudGVyID0gY250cnMubGlua19kb3duZWRfY291bnRlcjsKKwkJZGV2LT5uX3BvcnRfcmN2X2Vycm9ycyA9IGNudHJzLnBvcnRfcmN2X2Vycm9ycyArIDE7CisJCWRldi0+bl9wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9CisJCQljbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsKKwkJZGV2LT5uX3BvcnRfeG1pdF9kaXNjYXJkcyA9IGNudHJzLnBvcnRfeG1pdF9kaXNjYXJkczsKKwkJZGV2LT5uX3BvcnRfeG1pdF9kYXRhID0gY250cnMucG9ydF94bWl0X2RhdGE7CisJCWRldi0+bl9wb3J0X3Jjdl9kYXRhID0gY250cnMucG9ydF9yY3ZfZGF0YTsKKwkJZGV2LT5uX3BvcnRfeG1pdF9wYWNrZXRzID0gY250cnMucG9ydF94bWl0X3BhY2tldHM7CisJCWRldi0+bl9wb3J0X3Jjdl9wYWNrZXRzID0gY250cnMucG9ydF9yY3ZfcGFja2V0czsKKwl9CisJc3dpdGNoIChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcykgeworCWNhc2UgSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFOgorCWNhc2UgSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQ6CisJCXJldCA9IHByb2Nlc3Nfc3VibihpYmRldiwgbWFkX2ZsYWdzLCBwb3J0X251bSwKKwkJCQkgICBpbl9tYWQsIG91dF9tYWQpOworCQlnb3RvIGJhaWw7CisJY2FzZSBJQl9NR01UX0NMQVNTX1BFUkZfTUdNVDoKKwkJcmV0ID0gcHJvY2Vzc19wZXJmKGliZGV2LCBwb3J0X251bSwgaW5fbWFkLCBvdXRfbWFkKTsKKwkJZ290byBiYWlsOworCWRlZmF1bHQ6CisJCXJldCA9IElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmZmVjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHJkbWEvaWJfcGFjay5oPgorI2luY2x1ZGUgPHJkbWEvaWJfc21pLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorCisvKioKKyAqIGlwYXRoX2dldF9kbWFfbXIgLSBnZXQgYSBETUEgbWVtb3J5IHJlZ2lvbgorICogQHBkOiBwcm90ZWN0aW9uIGRvbWFpbiBmb3IgdGhpcyBtZW1vcnkgcmVnaW9uCisgKiBAYWNjOiBhY2Nlc3MgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIHRoZSBtZW1vcnkgcmVnaW9uIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm5vLgorICovCitzdHJ1Y3QgaWJfbXIgKmlwYXRoX2dldF9kbWFfbXIoc3RydWN0IGliX3BkICpwZCwgaW50IGFjYykKK3sKKwlzdHJ1Y3QgaXBhdGhfbXIgKm1yOworCXN0cnVjdCBpYl9tciAqcmV0OworCisJbXIgPSBremFsbG9jKHNpemVvZiAqbXIsIEdGUF9LRVJORUwpOworCWlmICghbXIpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCW1yLT5tci5hY2Nlc3NfZmxhZ3MgPSBhY2M7CisJcmV0ID0gJm1yLT5pYm1yOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBhdGhfbXIgKmFsbG9jX21yKGludCBjb3VudCwKKwkJCQkgc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKmxrX3RhYmxlKQoreworCXN0cnVjdCBpcGF0aF9tciAqbXI7CisJaW50IG0sIGkgPSAwOworCisJLyogQWxsb2NhdGUgc3RydWN0IHBsdXMgcG9pbnRlcnMgdG8gZmlyc3QgbGV2ZWwgcGFnZSB0YWJsZXMuICovCisJbSA9IChjb3VudCArIElQQVRIX1NFR1NaIC0gMSkgLyBJUEFUSF9TRUdTWjsKKwltciA9IGttYWxsb2Moc2l6ZW9mICptciArIG0gKiBzaXplb2YgbXItPm1yLm1hcFswXSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcikKKwkJZ290byBkb25lOworCisJLyogQWxsb2NhdGUgZmlyc3QgbGV2ZWwgcGFnZSB0YWJsZXMuICovCisJZm9yICg7IGkgPCBtOyBpKyspIHsKKwkJbXItPm1yLm1hcFtpXSA9IGttYWxsb2Moc2l6ZW9mICptci0+bXIubWFwWzBdLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtci0+bXIubWFwW2ldKQorCQkJZ290byBiYWlsOworCX0KKwltci0+bXIubWFwc3ogPSBtOworCisJLyoKKwkgKiBpYl9yZWdfcGh5c19tcigpIHdpbGwgaW5pdGlhbGl6ZSBtci0+aWJtciBleGNlcHQgZm9yCisJICogbGtleSBhbmQgcmtleS4KKwkgKi8KKwlpZiAoIWlwYXRoX2FsbG9jX2xrZXkobGtfdGFibGUsICZtci0+bXIpKQorCQlnb3RvIGJhaWw7CisJbXItPmlibXIucmtleSA9IG1yLT5pYm1yLmxrZXkgPSBtci0+bXIubGtleTsKKworCWdvdG8gZG9uZTsKKworYmFpbDoKKwl3aGlsZSAoaSkgeworCQlpLS07CisJCWtmcmVlKG1yLT5tci5tYXBbaV0pOworCX0KKwlrZnJlZShtcik7CisJbXIgPSBOVUxMOworCitkb25lOgorCXJldHVybiBtcjsKK30KKworLyoqCisgKiBpcGF0aF9yZWdfcGh5c19tciAtIHJlZ2lzdGVyIGEgcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbgorICogQHBkOiBwcm90ZWN0aW9uIGRvbWFpbiBmb3IgdGhpcyBtZW1vcnkgcmVnaW9uCisgKiBAYnVmZmVyX2xpc3Q6IHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgcGh5c2ljYWwgYnVmZmVycyB0byByZWdpc3RlcgorICogQG51bV9waHlzX2J1ZjogdGhlIG51bWJlciBvZiBwaHlzaWNhbCBidWZmZXJzIHRvIHJlZ2lzdGVyCisgKiBAaW92YV9zdGFydDogdGhlIHN0YXJ0aW5nIGFkZHJlc3MgcGFzc2VkIG92ZXIgSUIgd2hpY2ggbWFwcyB0byB0aGlzIE1SCisgKgorICogUmV0dXJucyB0aGUgbWVtb3J5IHJlZ2lvbiBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJuby4KKyAqLworc3RydWN0IGliX21yICppcGF0aF9yZWdfcGh5c19tcihzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJCXN0cnVjdCBpYl9waHlzX2J1ZiAqYnVmZmVyX2xpc3QsCisJCQkJaW50IG51bV9waHlzX2J1ZiwgaW50IGFjYywgdTY0ICppb3ZhX3N0YXJ0KQoreworCXN0cnVjdCBpcGF0aF9tciAqbXI7CisJaW50IG4sIG0sIGk7CisJc3RydWN0IGliX21yICpyZXQ7CisKKwltciA9IGFsbG9jX21yKG51bV9waHlzX2J1ZiwgJnRvX2lkZXYocGQtPmRldmljZSktPmxrX3RhYmxlKTsKKwlpZiAobXIgPT0gTlVMTCkgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJbXItPm1yLnVzZXJfYmFzZSA9ICppb3ZhX3N0YXJ0OworCW1yLT5tci5pb3ZhID0gKmlvdmFfc3RhcnQ7CisJbXItPm1yLmxlbmd0aCA9IDA7CisJbXItPm1yLm9mZnNldCA9IDA7CisJbXItPm1yLmFjY2Vzc19mbGFncyA9IGFjYzsKKwltci0+bXIubWF4X3NlZ3MgPSBudW1fcGh5c19idWY7CisKKwltID0gMDsKKwluID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BoeXNfYnVmOyBpKyspIHsKKwkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS52YWRkciA9CisJCQlwaHlzX3RvX3ZpcnQoYnVmZmVyX2xpc3RbaV0uYWRkcik7CisJCW1yLT5tci5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoID0gYnVmZmVyX2xpc3RbaV0uc2l6ZTsKKwkJbXItPm1yLmxlbmd0aCArPSBidWZmZXJfbGlzdFtpXS5zaXplOworCQluKys7CisJCWlmIChuID09IElQQVRIX1NFR1NaKSB7CisJCQltKys7CisJCQluID0gMDsKKwkJfQorCX0KKworCXJldCA9ICZtci0+aWJtcjsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3JlZ191c2VyX21yIC0gcmVnaXN0ZXIgYSB1c2Vyc3BhY2UgbWVtb3J5IHJlZ2lvbgorICogQHBkOiBwcm90ZWN0aW9uIGRvbWFpbiBmb3IgdGhpcyBtZW1vcnkgcmVnaW9uCisgKiBAcmVnaW9uOiB0aGUgdXNlciBtZW1vcnkgcmVnaW9uCisgKiBAbXJfYWNjZXNzX2ZsYWdzOiBhY2Nlc3MgZmxhZ3MgZm9yIHRoaXMgbWVtb3J5IHJlZ2lvbgorICogQHVkYXRhOiB1bnVzZWQgYnkgdGhlIEluZmluaVBhdGggZHJpdmVyCisgKgorICogUmV0dXJucyB0aGUgbWVtb3J5IHJlZ2lvbiBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJuby4KKyAqLworc3RydWN0IGliX21yICppcGF0aF9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJCWludCBtcl9hY2Nlc3NfZmxhZ3MsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IGlwYXRoX21yICptcjsKKwlzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqY2h1bms7CisJaW50IG4sIG0sIGk7CisJc3RydWN0IGliX21yICpyZXQ7CisKKwluID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KQorCQluICs9IGNodW5rLT5uZW50czsKKworCW1yID0gYWxsb2NfbXIobiwgJnRvX2lkZXYocGQtPmRldmljZSktPmxrX3RhYmxlKTsKKwlpZiAoIW1yKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwltci0+bXIudXNlcl9iYXNlID0gcmVnaW9uLT51c2VyX2Jhc2U7CisJbXItPm1yLmlvdmEgPSByZWdpb24tPnZpcnRfYmFzZTsKKwltci0+bXIubGVuZ3RoID0gcmVnaW9uLT5sZW5ndGg7CisJbXItPm1yLm9mZnNldCA9IHJlZ2lvbi0+b2Zmc2V0OworCW1yLT5tci5hY2Nlc3NfZmxhZ3MgPSBtcl9hY2Nlc3NfZmxhZ3M7CisJbXItPm1yLm1heF9zZWdzID0gbjsKKworCW0gPSAwOworCW4gPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZyZWdpb24tPmNodW5rX2xpc3QsIGxpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5ubWFwOyBpKyspIHsKKwkJCW1yLT5tci5tYXBbbV0tPnNlZ3Nbbl0udmFkZHIgPQorCQkJCXBhZ2VfYWRkcmVzcyhjaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UpOworCQkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS5sZW5ndGggPSByZWdpb24tPnBhZ2Vfc2l6ZTsKKwkJCW4rKzsKKwkJCWlmIChuID09IElQQVRIX1NFR1NaKSB7CisJCQkJbSsrOworCQkJCW4gPSAwOworCQkJfQorCQl9CisJfQorCXJldCA9ICZtci0+aWJtcjsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2RlcmVnX21yIC0gdW5yZWdpc3RlciBhbmQgZnJlZSBhIG1lbW9yeSByZWdpb24KKyAqIEBpYm1yOiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBmcmVlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgY2FsbGVkIHRvIGZyZWUgTVJzIGNyZWF0ZWQgYnkgaXBhdGhfZ2V0X2RtYV9tcigpCisgKiBvciBpcGF0aF9yZWdfdXNlcl9tcigpLgorICovCitpbnQgaXBhdGhfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1yKQoreworCXN0cnVjdCBpcGF0aF9tciAqbXIgPSB0b19pbXIoaWJtcik7CisJaW50IGk7CisKKwlpcGF0aF9mcmVlX2xrZXkoJnRvX2lkZXYoaWJtci0+ZGV2aWNlKS0+bGtfdGFibGUsIGlibXItPmxrZXkpOworCWkgPSBtci0+bXIubWFwc3o7CisJd2hpbGUgKGkpIHsKKwkJaS0tOworCQlrZnJlZShtci0+bXIubWFwW2ldKTsKKwl9CisJa2ZyZWUobXIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2FsbG9jX2ZtciAtIGFsbG9jYXRlIGEgZmFzdCBtZW1vcnkgcmVnaW9uCisgKiBAcGQ6IHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBmb3IgdGhpcyBtZW1vcnkgcmVnaW9uCisgKiBAbXJfYWNjZXNzX2ZsYWdzOiBhY2Nlc3MgZmxhZ3MgZm9yIHRoaXMgbWVtb3J5IHJlZ2lvbgorICogQGZtcl9hdHRyOiBmYXN0IG1lbW9yeSByZWdpb24gYXR0cmlidXRlcworICoKKyAqIFJldHVybnMgdGhlIG1lbW9yeSByZWdpb24gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4gZXJybm8uCisgKi8KK3N0cnVjdCBpYl9mbXIgKmlwYXRoX2FsbG9jX2ZtcihzdHJ1Y3QgaWJfcGQgKnBkLCBpbnQgbXJfYWNjZXNzX2ZsYWdzLAorCQkJICAgICAgIHN0cnVjdCBpYl9mbXJfYXR0ciAqZm1yX2F0dHIpCit7CisJc3RydWN0IGlwYXRoX2ZtciAqZm1yOworCWludCBtLCBpID0gMDsKKwlzdHJ1Y3QgaWJfZm1yICpyZXQ7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3QgcGx1cyBwb2ludGVycyB0byBmaXJzdCBsZXZlbCBwYWdlIHRhYmxlcy4gKi8KKwltID0gKGZtcl9hdHRyLT5tYXhfcGFnZXMgKyBJUEFUSF9TRUdTWiAtIDEpIC8gSVBBVEhfU0VHU1o7CisJZm1yID0ga21hbGxvYyhzaXplb2YgKmZtciArIG0gKiBzaXplb2YgZm1yLT5tci5tYXBbMF0sIEdGUF9LRVJORUwpOworCWlmICghZm1yKQorCQlnb3RvIGJhaWw7CisKKwkvKiBBbGxvY2F0ZSBmaXJzdCBsZXZlbCBwYWdlIHRhYmxlcy4gKi8KKwlmb3IgKDsgaSA8IG07IGkrKykgeworCQlmbXItPm1yLm1hcFtpXSA9IGttYWxsb2Moc2l6ZW9mICpmbXItPm1yLm1hcFswXSwKKwkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIWZtci0+bXIubWFwW2ldKQorCQkJZ290byBiYWlsOworCX0KKwlmbXItPm1yLm1hcHN6ID0gbTsKKworCS8qCisJICogaWJfYWxsb2NfZm1yKCkgd2lsbCBpbml0aWFsaXplIGZtci0+aWJmbXIgZXhjZXB0IGZvciBsa2V5ICYKKwkgKiBya2V5LgorCSAqLworCWlmICghaXBhdGhfYWxsb2NfbGtleSgmdG9faWRldihwZC0+ZGV2aWNlKS0+bGtfdGFibGUsICZmbXItPm1yKSkKKwkJZ290byBiYWlsOworCWZtci0+aWJmbXIucmtleSA9IGZtci0+aWJmbXIubGtleSA9IGZtci0+bXIubGtleTsKKwkvKgorCSAqIFJlc291cmNlcyBhcmUgYWxsb2NhdGVkIGJ1dCBubyB2YWxpZCBtYXBwaW5nIChSS0VZIGNhbid0IGJlCisJICogdXNlZCkuCisJICovCisJZm1yLT5tci51c2VyX2Jhc2UgPSAwOworCWZtci0+bXIuaW92YSA9IDA7CisJZm1yLT5tci5sZW5ndGggPSAwOworCWZtci0+bXIub2Zmc2V0ID0gMDsKKwlmbXItPm1yLmFjY2Vzc19mbGFncyA9IG1yX2FjY2Vzc19mbGFnczsKKwlmbXItPm1yLm1heF9zZWdzID0gZm1yX2F0dHItPm1heF9wYWdlczsKKwlmbXItPnBhZ2Vfc2hpZnQgPSBmbXJfYXR0ci0+cGFnZV9zaGlmdDsKKworCXJldCA9ICZmbXItPmliZm1yOworCWdvdG8gZG9uZTsKKworYmFpbDoKKwl3aGlsZSAoaSkKKwkJa2ZyZWUoZm1yLT5tci5tYXBbLS1pXSk7CisJa2ZyZWUoZm1yKTsKKwlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfbWFwX3BoeXNfZm1yIC0gc2V0IHVwIGEgZmFzdCBtZW1vcnkgcmVnaW9uCisgKiBAaWJtZnI6IHRoZSBmYXN0IG1lbW9yeSByZWdpb24gdG8gc2V0IHVwCisgKiBAcGFnZV9saXN0OiB0aGUgbGlzdCBvZiBwYWdlcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZmFzdCBtZW1vcnkgcmVnaW9uCisgKiBAbGlzdF9sZW46IHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGZhc3QgbWVtb3J5IHJlZ2lvbgorICogQGlvdmE6IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmYXN0IG1lbW9yeSByZWdpb24KKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworCitpbnQgaXBhdGhfbWFwX3BoeXNfZm1yKHN0cnVjdCBpYl9mbXIgKmliZm1yLCB1NjQgKiBwYWdlX2xpc3QsCisJCSAgICAgICBpbnQgbGlzdF9sZW4sIHU2NCBpb3ZhKQoreworCXN0cnVjdCBpcGF0aF9mbXIgKmZtciA9IHRvX2lmbXIoaWJmbXIpOworCXN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbSwgbiwgaTsKKwl1MzIgcHM7CisJaW50IHJldDsKKworCWlmIChsaXN0X2xlbiA+IGZtci0+bXIubWF4X3NlZ3MpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwlya3QgPSAmdG9faWRldihpYmZtci0+ZGV2aWNlKS0+bGtfdGFibGU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCWZtci0+bXIudXNlcl9iYXNlID0gaW92YTsKKwlmbXItPm1yLmlvdmEgPSBpb3ZhOworCXBzID0gMSA8PCBmbXItPnBhZ2Vfc2hpZnQ7CisJZm1yLT5tci5sZW5ndGggPSBsaXN0X2xlbiAqIHBzOworCW0gPSAwOworCW4gPSAwOworCXBzID0gMSA8PCBmbXItPnBhZ2Vfc2hpZnQ7CisJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuOyBpKyspIHsKKwkJZm1yLT5tci5tYXBbbV0tPnNlZ3Nbbl0udmFkZHIgPSBwaHlzX3RvX3ZpcnQocGFnZV9saXN0W2ldKTsKKwkJZm1yLT5tci5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoID0gcHM7CisJCWlmICgrK24gPT0gSVBBVEhfU0VHU1opIHsKKwkJCW0rKzsKKwkJCW4gPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF91bm1hcF9mbXIgLSB1bm1hcCBmYXN0IG1lbW9yeSByZWdpb25zCisgKiBAZm1yX2xpc3Q6IHRoZSBsaXN0IG9mIGZhc3QgbWVtb3J5IHJlZ2lvbnMgdG8gdW5tYXAKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IGlwYXRoX3VubWFwX2ZtcihzdHJ1Y3QgbGlzdF9oZWFkICpmbXJfbGlzdCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZm1yICpmbXI7CisJc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbXIsIGZtcl9saXN0LCBpYmZtci5saXN0KSB7CisJCXJrdCA9ICZ0b19pZGV2KGZtci0+aWJmbXIuZGV2aWNlKS0+bGtfdGFibGU7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZya3QtPmxvY2ssIGZsYWdzKTsKKwkJZm1yLT5tci51c2VyX2Jhc2UgPSAwOworCQlmbXItPm1yLmlvdmEgPSAwOworCQlmbXItPm1yLmxlbmd0aCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9kZWFsbG9jX2ZtciAtIGRlYWxsb2NhdGUgYSBmYXN0IG1lbW9yeSByZWdpb24KKyAqIEBpYmZtcjogdGhlIGZhc3QgbWVtb3J5IHJlZ2lvbiB0byBkZWFsbG9jYXRlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBpcGF0aF9kZWFsbG9jX2ZtcihzdHJ1Y3QgaWJfZm1yICppYmZtcikKK3sKKwlzdHJ1Y3QgaXBhdGhfZm1yICpmbXIgPSB0b19pZm1yKGliZm1yKTsKKwlpbnQgaTsKKworCWlwYXRoX2ZyZWVfbGtleSgmdG9faWRldihpYmZtci0+ZGV2aWNlKS0+bGtfdGFibGUsIGliZm1yLT5sa2V5KTsKKwlpID0gZm1yLT5tci5tYXBzejsKKwl3aGlsZSAoaSkKKwkJa2ZyZWUoZm1yLT5tci5tYXBbLS1pXSk7CisJa2ZyZWUoZm1yKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9wZTgwMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3BlODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOGM3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9wZTgwMC5jCkBAIC0wLDAgKzEsMTI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgY29kZSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZQorICogSW5maW5pUGF0aCBQRS04MDAgY2hpcC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBhdGhfcmVnaXN0ZXJzLmgiCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGFuZAorICogYWNjZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIFBhdGhTY2FsZSBQRTgwMCwgdGhlIFBDSS1FeHByZXNzIGNoaXAuCisgKgorICogVGhpcyBsaXN0cyB0aGUgSW5maW5pUGF0aCBQRTgwMCByZWdpc3RlcnMsIGluIHRoZSBhY3R1YWwgY2hpcCBsYXlvdXQuCisgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgbmV2ZXIgYmUgZGlyZWN0bHkgYWNjZXNzZWQuCisgKi8KK3N0cnVjdCBfaW5maW5pcGF0aF9kb19ub3RfdXNlX2tlcm5lbF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmV2aXNpb247CisJdW5zaWduZWQgbG9uZyBsb25nIENvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBsb25nIFBhZ2VBbGlnbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUG9ydENudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRGVidWdQb3J0U2VsZWN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDA7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRSZWdCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBVc2VyUmVnQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgQ291bnRlclJlZ0Jhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFNjcmF0Y2g7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRCbG9ja2VkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRNYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEludENsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFcnJvck1hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEVycm9yU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFcnJvckNsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0Vyck1hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEh3RXJyU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0VyckNsZWFyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0RpYWdDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBNRElPOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQkNTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIElCQ0N0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIEV4dFN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXh0Q3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT091dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT01hc2s7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9TdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9DbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2Q3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2QlRIUVA7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckNudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyRW50U2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2VElEQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2VElEQ250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZFZ3JCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZFZ3JDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkJ1ZkJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkJ1ZlNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJ4SW50TWVtQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUnhJbnRNZW1TaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZQYXJ0aXRpb25LZXk7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkMzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2UGt0TEVEQ250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDRbOF07CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kUElPQnVmQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFBJT1NpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRQSU9CdWZDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRQSU9BdmFpbEFkZHI7CisJdW5zaWduZWQgbG9uZyBsb25nIFR4SW50TWVtQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgVHhJbnRNZW1TaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDU7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSWVSQnVmVGVzdFJlZzA7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSWVSQnVmVGVzdFJlZzE7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkNTFbNl07CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRCdWZmZXJFcnJvcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZmZlckVycm9yQ09OVDE7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkNlNCRVs2XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjA7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHIxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyMjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcjM7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckFkZHI0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDdSSEFbMTFdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjA7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHIyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjM7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkclRhaWxBZGRyNDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQ4UkhUQVsxMV07CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkOVNXWzhdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJkZXNDb25maWcwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJkZXNDb25maWcxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJkZXNTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIFhHWFNDb25maWc7CisJdW5zaWduZWQgbG9uZyBsb25nIElCUExMQ2ZnOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDEwU1cyWzNdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQQ0lFUTBTZXJkZXNDb25maWcwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQQ0lFUTBTZXJkZXNDb25maWcxOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQQ0lFUTBTZXJkZXNTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkMTE7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSUVRMVNlcmRlc0NvbmZpZzA7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSUVRMVNlcmRlc0NvbmZpZzE7CisJdW5zaWduZWQgbG9uZyBsb25nIFBDSUVRMVNlcmRlc1N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQxMjsKK307CisKKyNkZWZpbmUgSVBBVEhfS1JFR19PRkZTRVQoZmllbGQpIChvZmZzZXRvZihzdHJ1Y3QgXAorICAgIF9pbmZpbmlwYXRoX2RvX25vdF91c2Vfa2VybmVsX3JlZ3MsIGZpZWxkKSAvIHNpemVvZih1NjQpKQorI2RlZmluZSBJUEFUSF9DUkVHX09GRlNFVChmaWVsZCkgKG9mZnNldG9mKCBcCisgICAgc3RydWN0IGluZmluaXBhdGhfY291bnRlcnMsIGZpZWxkKSAvIHNpemVvZih1NjQpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlwYXRoX2tyZWdzIGlwYXRoX3BlX2tyZWdzID0geworCS5rcl9jb250cm9sID0gSVBBVEhfS1JFR19PRkZTRVQoQ29udHJvbCksCisJLmtyX2NvdW50ZXJyZWdiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoQ291bnRlclJlZ0Jhc2UpLAorCS5rcl9kZWJ1Z3BvcnRzZWxlY3QgPSBJUEFUSF9LUkVHX09GRlNFVChEZWJ1Z1BvcnRTZWxlY3QpLAorCS5rcl9lcnJvcmNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JDbGVhciksCisJLmtyX2Vycm9ybWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEVycm9yTWFzayksCisJLmtyX2Vycm9yc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JTdGF0dXMpLAorCS5rcl9leHRjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoRXh0Q3RybCksCisJLmtyX2V4dHN0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKEV4dFN0YXR1cyksCisJLmtyX2dwaW9fY2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPQ2xlYXIpLAorCS5rcl9ncGlvX21hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPTWFzayksCisJLmtyX2dwaW9fb3V0ID0gSVBBVEhfS1JFR19PRkZTRVQoR1BJT091dCksCisJLmtyX2dwaW9fc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoR1BJT1N0YXR1cyksCisJLmtyX2h3ZGlhZ2N0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChId0RpYWdDdHJsKSwKKwkua3JfaHdlcnJjbGVhciA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyQ2xlYXIpLAorCS5rcl9od2Vycm1hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChId0Vyck1hc2spLAorCS5rcl9od2VycnN0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyU3RhdHVzKSwKKwkua3JfaWJjY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKElCQ0N0cmwpLAorCS5rcl9pYmNzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChJQkNTdGF0dXMpLAorCS5rcl9pbnRibG9ja2VkID0gSVBBVEhfS1JFR19PRkZTRVQoSW50QmxvY2tlZCksCisJLmtyX2ludGNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoSW50Q2xlYXIpLAorCS5rcl9pbnRtYXNrID0gSVBBVEhfS1JFR19PRkZTRVQoSW50TWFzayksCisJLmtyX2ludHN0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKEludFN0YXR1cyksCisJLmtyX21kaW8gPSBJUEFUSF9LUkVHX09GRlNFVChNRElPKSwKKwkua3JfcGFnZWFsaWduID0gSVBBVEhfS1JFR19PRkZTRVQoUGFnZUFsaWduKSwKKwkua3JfcGFydGl0aW9ua2V5ID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2UGFydGl0aW9uS2V5KSwKKwkua3JfcG9ydGNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFBvcnRDbnQpLAorCS5rcl9yY3ZidGhxcCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkJUSFFQKSwKKwkua3JfcmN2YnVmYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkJ1ZkJhc2UpLAorCS5rcl9yY3ZidWZzaXplID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QnVmU2l6ZSksCisJLmtyX3JjdmN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZDdHJsKSwKKwkua3JfcmN2ZWdyYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkVnckJhc2UpLAorCS5rcl9yY3ZlZ3JjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZFZ3JDbnQpLAorCS5rcl9yY3ZoZHJjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJDbnQpLAorCS5rcl9yY3ZoZHJlbnRzaXplID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2SGRyRW50U2l6ZSksCisJLmtyX3JjdmhkcnNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJTaXplKSwKKwkua3JfcmN2aW50bWVtYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJ4SW50TWVtQmFzZSksCisJLmtyX3JjdmludG1lbXNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSeEludE1lbVNpemUpLAorCS5rcl9yY3Z0aWRiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2VElEQmFzZSksCisJLmtyX3JjdnRpZGNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdlRJRENudCksCisJLmtyX3JldmlzaW9uID0gSVBBVEhfS1JFR19PRkZTRVQoUmV2aXNpb24pLAorCS5rcl9zY3JhdGNoID0gSVBBVEhfS1JFR19PRkZTRVQoU2NyYXRjaCksCisJLmtyX3NlbmRidWZmZXJlcnJvciA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlbmRCdWZmZXJFcnJvciksCisJLmtyX3NlbmRjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZEN0cmwpLAorCS5rcl9zZW5kcGlvYXZhaWxhZGRyID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT0F2YWlsQWRkciksCisJLmtyX3NlbmRwaW9idWZiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT0J1ZkJhc2UpLAorCS5rcl9zZW5kcGlvYnVmY250ID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT0J1ZkNudCksCisJLmtyX3NlbmRwaW9zaXplID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFBJT1NpemUpLAorCS5rcl9zZW5kcmVnYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlbmRSZWdCYXNlKSwKKwkua3JfdHhpbnRtZW1iYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoVHhJbnRNZW1CYXNlKSwKKwkua3JfdHhpbnRtZW1zaXplID0gSVBBVEhfS1JFR19PRkZTRVQoVHhJbnRNZW1TaXplKSwKKwkua3JfdXNlcnJlZ2Jhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChVc2VyUmVnQmFzZSksCisJLmtyX3NlcmRlc2NvbmZpZzAgPSBJUEFUSF9LUkVHX09GRlNFVChTZXJkZXNDb25maWcwKSwKKwkua3Jfc2VyZGVzY29uZmlnMSA9IElQQVRIX0tSRUdfT0ZGU0VUKFNlcmRlc0NvbmZpZzEpLAorCS5rcl9zZXJkZXNzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChTZXJkZXNTdGF0dXMpLAorCS5rcl94Z3hzY29uZmlnID0gSVBBVEhfS1JFR19PRkZTRVQoWEdYU0NvbmZpZyksCisJLmtyX2licGxsY2ZnID0gSVBBVEhfS1JFR19PRkZTRVQoSUJQTExDZmcpLAorCisJLyoKKwkgKiBUaGVzZSBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgdmlhIGlwYXRoX3JlYWRfa3JlZzY0KCksCisJICogdXNlIHRoZW0gd2l0aCBpcGF0aF9yZWFkX2tyZWc2NF9wb3J0KCkKKwkgKi8KKwkua3JfcmN2aGRyYWRkciA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkckFkZHIwKSwKKwkua3JfcmN2aGRydGFpbGFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJUYWlsQWRkcjApLAorCisJLyogVGhpcyBncm91cCBpcyBwZS04MDAtc3BlY2lmaWM7IGFuZCB1c2VkIG9ubHkgaW4gdGhpcyBmaWxlICovCisJLyogVGhlIHJjdnBrdGxlZCByZWdpc3RlciBjb250cm9scyBvbmUgb2YgdGhlIGRlYnVnIHBvcnQgc2lnbmFscywgc28KKwkgKiBhIHBhY2tldCBhY3Rpdml0eSBMRUQgY2FuIGJlIGNvbm5lY3RlZCB0byBpdC4gKi8KKwkua3JfcmN2cGt0bGVkY250ID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2UGt0TEVEQ250KSwKKwkua3JfcGNpZXJidWZ0ZXN0cmVnMCA9IElQQVRIX0tSRUdfT0ZGU0VUKFBDSWVSQnVmVGVzdFJlZzApLAorCS5rcl9wY2llcmJ1ZnRlc3RyZWcxID0gSVBBVEhfS1JFR19PRkZTRVQoUENJZVJCdWZUZXN0UmVnMSksCisJLmtyX3BjaWVxMHNlcmRlc2NvbmZpZzAgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0lFUTBTZXJkZXNDb25maWcwKSwKKwkua3JfcGNpZXEwc2VyZGVzY29uZmlnMSA9IElQQVRIX0tSRUdfT0ZGU0VUKFBDSUVRMFNlcmRlc0NvbmZpZzEpLAorCS5rcl9wY2llcTBzZXJkZXNzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0lFUTBTZXJkZXNTdGF0dXMpLAorCS5rcl9wY2llcTFzZXJkZXNjb25maWcwID0gSVBBVEhfS1JFR19PRkZTRVQoUENJRVExU2VyZGVzQ29uZmlnMCksCisJLmtyX3BjaWVxMXNlcmRlc2NvbmZpZzEgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0lFUTFTZXJkZXNDb25maWcxKSwKKwkua3JfcGNpZXExc2VyZGVzc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoUENJRVExU2VyZGVzU3RhdHVzKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpcGF0aF9jcmVncyBpcGF0aF9wZV9jcmVncyA9IHsKKwkuY3JfYmFkZm9ybWF0Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhCYWRGb3JtYXRDbnQpLAorCS5jcl9lcnJpY3JjY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhJQ1JDRXJyQ250KSwKKwkuY3JfZXJybGlua2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TGlua1Byb2JsZW1DbnQpLAorCS5jcl9lcnJscGNyY2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TFBDUkNFcnJDbnQpLAorCS5jcl9lcnJwa2V5ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhQS2V5TWlzbWF0Y2hDbnQpLAorCS5jcl9lcnJyY3ZmbG93Y3RybGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4Rmxvd0N0cmxFcnJDbnQpLAorCS5jcl9lcnJfcmxlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TGVuRXJyQ250KSwKKwkuY3JfZXJyc2xlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4TGVuRXJyQ250KSwKKwkuY3JfZXJydGlkZnVsbCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4VElERnVsbEVyckNudCksCisJLmNyX2VycnRpZHZhbGlkID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhUSURWYWxpZEVyckNudCksCisJLmNyX2VycnZjcmNjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeFZDUkNFcnJDbnQpLAorCS5jcl9pYnN0YXR1c2NoYW5nZSA9IElQQVRIX0NSRUdfT0ZGU0VUKElCU3RhdHVzQ2hhbmdlQ250KSwKKwkuY3JfaW50Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoTEJJbnRDbnQpLAorCS5jcl9pbnZhbGlkcmxlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TWF4TWluTGVuRXJyQ250KSwKKwkuY3JfaW52YWxpZHNsZW5jbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeE1heE1pbkxlbkVyckNudCksCisJLmNyX2xiZmxvd3N0YWxsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoTEJGbG93U3RhbGxDbnQpLAorCS5jcl9wa3RyY3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeERhdGFQa3RDbnQpLAorCS5jcl9wa3RyY3ZmbG93Y3RybGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4Rmxvd1BrdENudCksCisJLmNyX3BrdHNlbmRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeERhdGFQa3RDbnQpLAorCS5jcl9wa3RzZW5kZmxvd2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4Rmxvd1BrdENudCksCisJLmNyX3BvcnRvdmZsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhQMEhkckVnck92ZmxDbnQpLAorCS5jcl9yY3ZlYnBjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEVCUENudCksCisJLmNyX3Jjdm92ZmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEJ1Zk92ZmxDbnQpLAorCS5jcl9zZW5kZHJvcHBlZCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4RHJvcHBlZFBrdENudCksCisJLmNyX3NlbmRzdGFsbGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4Rmxvd1N0YWxsQ250KSwKKwkuY3Jfc2VuZHVuZGVycnVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhVbmRlcnJ1bkNudCksCisJLmNyX3dvcmRyY3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeER3b3JkQ250KSwKKwkuY3Jfd29yZHNlbmRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeER3b3JkQ250KSwKKwkuY3JfdW5zdXB2bGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4VW5zdXBWTEVyckNudCksCisJLmNyX3J4ZHJvcHBrdGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4RHJvcHBlZFBrdENudCksCisJLmNyX2libGlua2VycnJlY292Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJMaW5rRXJyUmVjb3ZlcnlDbnQpLAorCS5jcl9pYmxpbmtkb3duY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJMaW5rRG93bmVkQ250KSwKKwkuY3JfaWJzeW1ib2xlcnJjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChJQlN5bWJvbEVyckNudCkKK307CisKKy8qIGtyX2ludHN0YXR1cywga3JfaW50Y2xlYXIsIGtyX2ludG1hc2sgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgMHgxRgorI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSyAweDFGCisKKy8qIGtyX2h3ZXJyY2xlYXIsIGtyX2h3ZXJybWFzaywga3JfaHdlcnJzdGF0dXMsIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9NQVNLICAweDAwMDAwMDAwMDAwMDAwM2ZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVQT0lTT05FRFRMUCAgICAgIDB4MDAwMDAwMDAxMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFQ1BMVElNRU9VVCAgICAgICAweDAwMDAwMDAwMjAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhUTEggICAgMHgwMDAwMDAwMDQwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlYQURNICAgIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZUkFETSAgICAweDAwMDAwMDAxMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9GQlNMSVAgICAgICAgMHgwMDgwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0NPUkVQTExfUkZTTElQICAgICAgIDB4MDEwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFMVBMTEZBSUxFRCAgICAgICAweDA0MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRTBQTExGQUlMRUQgICAgICAgMHgwODAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCAgICAgIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAorCisvKiBrcl9leHRzdGF0dXMgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfRlJFUVNFTCAweDIKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX1NFUkRFU1NFTCAweDQKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX01FTUJJU1RfRU5EVEVTVCAgICAgMHgwMDAwMDAwMDAwMDA0MDAwCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19NRU1CSVNUX0ZPVU5EICAgICAgIDB4MDAwMDAwMDAwMDAwODAwMAorCisjZGVmaW5lIF9JUEFUSF9HUElPX1NEQV9OVU0gMQorI2RlZmluZSBfSVBBVEhfR1BJT19TQ0xfTlVNIDAKKworI2RlZmluZSBJUEFUSF9HUElPX1NEQSAoMVVMTCA8PCBcCisJKF9JUEFUSF9HUElPX1NEQV9OVU0rSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCkpCisjZGVmaW5lIElQQVRIX0dQSU9fU0NMICgxVUxMIDw8IFwKKwkoX0lQQVRIX0dQSU9fU0NMX05VTStJTkZJTklQQVRIX0VYVENfR1BJT09FX1NISUZUKSkKKworLyoqCisgKiBpcGF0aF9wZV9oYW5kbGVfaHdlcnJvcnMgLSBkaXNwbGF5IGhhcmR3YXJlIGVycm9ycy4KKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbXNnOiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogQG1zZ2w6IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogVXNlIHNhbWUgbXNnIGJ1ZmZlciBhcyByZWd1bGFyIGVycm9ycyB0byBhdm9pZCBleGNlc3NpdmUgc3RhY2sKKyAqIHVzZS4gIE1vc3QgaGFyZHdhcmUgZXJyb3JzIGFyZSBjYXRhc3Ryb3BoaWMsIGJ1dCBmb3IgcmlnaHQgbm93LAorICogd2UnbGwgcHJpbnQgdGhlbSBhbmQgY29udGludWUuICBXZSByZXVzZSB0aGUgc2FtZSBtZXNzYWdlIGJ1ZmZlciBhcworICogaXBhdGhfaGFuZGxlX2Vycm9ycygpIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBzdGFjayB1c2FnZS4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcGVfaGFuZGxlX2h3ZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqbXNnLAorCQkJCSAgICAgc2l6ZV90IG1zZ2wpCit7CisJaXBhdGhfZXJyX3QgaHdlcnJzOworCXUzMiBiaXRzLCBjdHJsOworCWludCBpc2ZhdGFsID0gMDsKKwljaGFyIGJpdHNtc2dbNjRdOworCisJaHdlcnJzID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJzdGF0dXMpOworCWlmICghaHdlcnJzKSB7CisJCS8qCisJCSAqIGJldHRlciB0aGFuIHByaW50aW5nIGNvZnVzaW5nIG1lc3NhZ2VzCisJCSAqIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBjbGVhcmluZyB0aGUgY3JjIGVycm9yLCBvcgorCQkgKiB0aGUgcGxsIGVycm9yIGR1cmluZyBpbml0LgorCQkgKi8KKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQ2FsbGVkIGJ1dCBubyBoYXJkd2FyZSBlcnJvcnMgc2V0XG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoaHdlcnJzID09IH4wVUxMKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJSZWFkIG9mIGhhcmR3YXJlIGVycm9yIHN0YXR1cyBmYWlsZWQgIgorCQkJICAgICAgIihhbGwgYml0cyBzZXQpOyBpZ25vcmluZ1xuIik7CisJCXJldHVybjsKKwl9CisJaXBhdGhfc3RhdHMuc3BzX2h3ZXJycysrOworCisJLyogQWx3YXlzIGNsZWFyIHRoZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIsIGV4Y2VwdCBNRU1CSVNURkFJTCwKKwkgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgY29udGludWUgb3Igc3RvcCB1c2luZyB0aGUgY2hpcC4KKwkgKiBXZSB3YW50IHRoYXQgc2V0IHNvIHdlIGtub3cgaXQgZmFpbGVkLCBldmVuIGFjcm9zcyBkcml2ZXIgcmVsb2FkLgorCSAqIFdlJ2xsIHN0aWxsIGlnbm9yZSBpdCBpbiB0aGUgaHdlcnJtYXNrLiAgV2UgZG8gdGhpcyBwYXJ0bHkgZm9yCisJICogZGlhZ25vc3RpY3MsIGJ1dCBhbHNvIGZvciBzdXBwb3J0ICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycmNsZWFyLAorCQkJIGh3ZXJycyZ+SU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCk7CisKKwlod2VycnMgJj0gZGQtPmlwYXRoX2h3ZXJybWFzazsKKworCS8qCisJICogbWFrZSBzdXJlIHdlIGdldCB0aGlzIG11Y2ggb3V0LCB1bmxlc3MgdG9sZCB0byBiZSBxdWlldCwKKwkgKiBvciBpdCdzIG9jY3VycmVkIHdpdGhpbiB0aGUgbGFzdCA1IHNlY29uZHMKKwkgKi8KKwlpZiAoKGh3ZXJycyAmIH5kZC0+aXBhdGhfbGFzdGh3ZXJyb3IpIHx8CisJICAgIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfVkVSQkRCRykpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJIYXJkd2FyZSBlcnJvcjogaHdlcnI9MHglbGx4ICIKKwkJCSAiKGNsZWFyZWQpXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBod2VycnMpOworCWRkLT5pcGF0aF9sYXN0aHdlcnJvciB8PSBod2VycnM7CisKKwlpZiAoaHdlcnJzICYgfmluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQpCisJCWlwYXRoX2Rldl9lcnIoZGQsICJod2Vycm9yIGludGVycnVwdCB3aXRoIHVua25vd24gZXJyb3JzICIKKwkJCSAgICAgICIlbGx4IHNldFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICAgIChod2VycnMgJiB+aW5maW5pcGF0aF9od2VfYml0c2V4dGFudCkpOworCisJY3RybCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wpOworCWlmIChjdHJsICYgSU5GSU5JUEFUSF9DX0ZSRUVaRU1PREUpIHsKKwkJaWYgKGh3ZXJycykgeworCQkJLyoKKwkJCSAqIGlmIGFueSBzZXQgdGhhdCB3ZSBhcmVuJ3QgaWdub3Jpbmcgb25seSBtYWtlIHRoZQorCQkJICogY29tcGxhaW50IG9uY2UsIGluIGNhc2UgaXQncyBzdHVjayBvciByZWN1cnJpbmcsCisJCQkgKiBhbmQgd2UgZ2V0IGhlcmUgbXVsdGlwbGUgdGltZXMKKwkJCSAqLworCQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpIHsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmF0YWwgRXJyb3IgKGZyZWV6ZSAiCisJCQkJCSAgICAgICJtb2RlKSwgbm8gbG9uZ2VyIHVzYWJsZVxuIik7CisJCQkJaXNmYXRhbCA9IDE7CisJCQl9CisJCQkvKgorCQkJICogTWFyayBhcyBoYXZpbmcgaGFkIGFuIGVycm9yIGZvciBkcml2ZXIsIGFuZCBhbHNvCisJCQkgKiBmb3IgL3N5cyBhbmQgc3RhdHVzIHdvcmQgbWFwcGVkIHRvIHVzZXIgcHJvZ3JhbXMuCisJCQkgKiBUaGlzIG1hcmtzIHVuaXQgYXMgbm90IHVzYWJsZSwgdW50aWwgcmVzZXQKKwkJCSAqLworCQkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfUkVBRFk7CisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0hXRVJST1I7CisJCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX0lOSVRURUQ7CisJCX0gZWxzZSB7CisJCQlpcGF0aF9kYmcoIkNsZWFyaW5nIGZyZWV6ZW1vZGUgb24gaWdub3JlZCBoYXJkd2FyZSAiCisJCQkJICAiZXJyb3JcbiIpOworCQkJY3RybCAmPSB+SU5GSU5JUEFUSF9DX0ZSRUVaRU1PREU7CisJCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkJCSBjdHJsKTsKKwkJfQorCX0KKworCSptc2cgPSAnXDAnOworCisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQpIHsKKwkJc3RybGNhdChtc2csICJbTWVtb3J5IEJJU1QgdGVzdCBmYWlsZWQsIFBFLTgwMCB1bnVzYWJsZV0iLAorCQkJbXNnbCk7CisJCS8qIGlnbm9yZSBmcm9tIG5vdyBvbiwgc28gZGlzYWJsZSB1bnRpbCBkcml2ZXIgcmVsb2FkZWQgKi8KKwkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19IV0VSUk9SOworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorCWlmIChod2VycnMgJiAoSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0sKKwkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSkgeworCQliaXRzID0gKHUzMikgKChod2VycnMgPj4KKwkJCSAgICAgICBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpICYKKwkJCSAgICAgIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLKTsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csICJbUlhFIFBhcml0eSBFcnJzICV4XSAiLAorCQkJIGJpdHMpOworCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7CisJfQorCWlmIChod2VycnMgJiAoSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01BU0sKKwkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSkgeworCQliaXRzID0gKHUzMikgKChod2VycnMgPj4KKwkJCSAgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpICYKKwkJCSAgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLKTsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csICJbVFhFIFBhcml0eSBFcnJzICV4XSAiLAorCQkJIGJpdHMpOworCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7CisJfQorCWlmIChod2VycnMgJiAoSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9NQVNLCisJCSAgICAgIDw8IElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCWJpdHMgPSAodTMyKSAoKGh3ZXJycyA+PgorCQkJICAgICAgIElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfU0hJRlQpICYKKwkJCSAgICAgIElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfTUFTSyk7CisJCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLAorCQkJICJbUENJZSBNZW0gUGFyaXR5IEVycnMgJXhdICIsIGJpdHMpOworCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7CisJfQorCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9JQkNCVVNUT1NQQ1BBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJbSUIySVBBVEggUGFyaXR5XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9JQkNCVVNGUlNQQ1BBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJbSVBBVEgySUIgUGFyaXR5XSIsIG1zZ2wpOworCisjZGVmaW5lIF9JUEFUSF9QTExfRkFJTCAoSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9GQlNMSVAgfAlcCisJCQkgSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9SRlNMSVAgKQorCisJaWYgKGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCkgeworCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywKKwkJCSAiW1BMTCBmYWlsZWQgKCVsbHgpLCBQRS04MDAgdW51c2FibGVdIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBod2VycnMgJiBfSVBBVEhfUExMX0ZBSUwpOworCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7CisJCS8qIGlnbm9yZSBmcm9tIG5vdyBvbiwgc28gZGlzYWJsZSB1bnRpbCBkcml2ZXIgcmVsb2FkZWQgKi8KKwkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPSB+KGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJtYXNrLAorCQkJCSBkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwl9CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKSB7CisJCS8qCisJCSAqIElmIGl0IG9jY3VycywgaXQgaXMgbGVmdCBtYXNrZWQgc2luY2UgdGhlIGV0ZXJuYWwKKwkJICogaW50ZXJmYWNlIGlzIHVudXNlZAorCQkgKi8KKwkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPSB+SU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorCisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUVQT0lTT05FRFRMUCkKKwkJc3RybGNhdChtc2csICJbUENJZSBQb2lzb25lZCBUTFBdIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUVDUExUSU1FT1VUKQorCQlzdHJsY2F0KG1zZywgIltQQ0llIGNvbXBsZXRpb24gdGltZW91dF0iLCBtc2dsKTsKKworCS8qCisJICogSW4gcHJhY3RpY2UsIGl0J3MgdW5saWtlbHkgd3RoYXQgd2UnbGwgc2VlIFBDSWUgUExMLCBvciBidXMKKwkgKiBwYXJpdHkgb3IgbWVtb3J5IHBhcml0eSBlcnJvciBmYWlsdXJlcywgYmVjYXVzZSBtb3N0IGxpa2VseSB3ZQorCSAqIHdvbid0IGJlIGFibGUgdG8gdGFsayB0byB0aGUgY29yZSBvZiB0aGUgY2hpcC4gIE5vbmV0aGVsZXNzLCB3ZQorCSAqIG1pZ2h0IHNlZSB0aGVtLCBpZiB0aGV5IGFyZSBpbiBwYXJ0cyBvZiB0aGUgUENJZSBjb3JlIHRoYXQgYXJlbid0CisJICogZXNzZW50aWFsLgorCSAqLworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFMVBMTEZBSUxFRCkKKwkJc3RybGNhdChtc2csICJbUENJZVBMTDFdIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUUwUExMRkFJTEVEKQorCQlzdHJsY2F0KG1zZywgIltQQ0llUExMMF0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhUTEgpCisJCXN0cmxjYXQobXNnLCAiW1BDSWUgWFRMSCBjb3JlIHBhcml0eV0iLCBtc2dsKTsKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhBRE0pCisJCXN0cmxjYXQobXNnLCAiW1BDSWUgQURNIFRYIGNvcmUgcGFyaXR5XSIsIG1zZ2wpOworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZUkFETSkKKwkJc3RybGNhdChtc2csICJbUENJZSBBRE0gUlggY29yZSBwYXJpdHldIiwgbXNnbCk7CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUlhEU1lOQ01FTVBBUklUWUVSUikKKwkJc3RybGNhdChtc2csICJbUnggRHN5bmNdIiwgbXNnbCk7CisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCkKKwkJc3RybGNhdChtc2csICJbU2VyRGVzIFBMTF0iLCBtc2dsKTsKKworCWlwYXRoX2Rldl9lcnIoZGQsICIlcyBoYXJkd2FyZSBlcnJvclxuIiwgbXNnKTsKKwlpZiAoaXNmYXRhbCAmJiAhaXBhdGhfZGlhZ19pbnVzZSAmJiBkZC0+aXBhdGhfZnJlZXplbXNnKSB7CisJCS8qCisJCSAqIGZvciAvc3lzIHN0YXR1cyBmaWxlIDsgaWYgbm8gdHJhaWxpbmcgfSBpcyBjb3BpZWQsIHdlJ2xsCisJCSAqIGtub3cgaXQgd2FzIHRydW5jYXRlZC4KKwkJICovCisJCXNucHJpbnRmKGRkLT5pcGF0aF9mcmVlemVtc2csIGRkLT5pcGF0aF9mcmVlemVsZW4sCisJCQkgInslc30iLCBtc2cpOworCX0KK30KKworLyoqCisgKiBpcGF0aF9wZV9ib2FyZG5hbWUgLSBmaWxsIGluIHRoZSBib2FyZCBuYW1lCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQG5hbWU6IHRoZSBvdXRwdXQgYnVmZmVyCisgKiBAbmFtZWxlbjogdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBpbmZvIGlzIGJhc2VkIG9uIHRoZSBib2FyZCByZXZpc2lvbiByZWdpc3RlcgorICovCitzdGF0aWMgaW50IGlwYXRoX3BlX2JvYXJkbmFtZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm5hbWUsCisJCQkgICAgICBzaXplX3QgbmFtZWxlbikKK3sKKwljaGFyICpuID0gTlVMTDsKKwl1OCBib2FyZHJldiA9IGRkLT5pcGF0aF9ib2FyZHJldjsKKwlpbnQgcmV0OworCisJc3dpdGNoIChib2FyZHJldikgeworCWNhc2UgMDoKKwkJbiA9ICJJbmZpbmlQYXRoX0VtdWxhdGlvbiI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbiA9ICJJbmZpbmlQYXRoX1BFLTgwMC1CcmluZ3VwIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQluID0gIkluZmluaVBhdGhfUEUtODgwIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQluID0gIkluZmluaVBhdGhfUEUtODUwIjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQluID0gIkluZmluaVBhdGhfUEUtODYwIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJEb24ndCB5ZXQga25vdyBhYm91dCBib2FyZCB3aXRoIElEICV1XG4iLAorCQkJICAgICAgYm9hcmRyZXYpOworCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiVW5rbm93bl9JbmZpbmlQYXRoX1BFLTh4eF8ldSIsCisJCQkgYm9hcmRyZXYpOworCQlicmVhazsKKwl9CisJaWYgKG4pCisJCXNucHJpbnRmKG5hbWUsIG5hbWVsZW4sICIlcyIsIG4pOworCisJaWYgKGRkLT5pcGF0aF9tYWpyZXYgIT0gNCB8fCBkZC0+aXBhdGhfbWlucmV2ICE9IDEpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlVuc3VwcG9ydGVkIFBFLTgwMCByZXZpc2lvbiAldS4ldSFcbiIsCisJCQkgICAgICBkZC0+aXBhdGhfbWFqcmV2LCBkZC0+aXBhdGhfbWlucmV2KTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcGVfaW5pdF9od2Vycm9ycyAtIGVuYWJsZSBoYXJkd2FyZSBlcnJvcnMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogbm93IHRoYXQgd2UgaGF2ZSBmaW5pc2hlZCBpbml0aWFsaXppbmcgZXZlcnl0aGluZyB0aGF0IG1pZ2h0IHJlYXNvbmFibHkKKyAqIGNhdXNlIGEgaGFyZHdhcmUgZXJyb3IsIGFuZCBjbGVhcmVkIHRob3NlIGVycm9ycyBiaXRzIGFzIHRoZXkgb2NjdXIsCisgKiB3ZSBjYW4gZW5hYmxlIGhhcmR3YXJlIGVycm9ycyBpbiB0aGUgbWFzayAocG90ZW50aWFsbHkgZW5hYmxpbmcKKyAqIGZyZWV6ZSBtb2RlKSwgYW5kIGVuYWJsZSBoYXJkd2FyZSBlcnJvcnMgYXMgZXJyb3JzIChhbG9uZyB3aXRoCisgKiBldmVyeXRoaW5nIGVsc2UpIGluIGVycm9ybWFzaworICovCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9pbml0X2h3ZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpcGF0aF9lcnJfdCB2YWw7CisJdTY0IGV4dHN2YWw7CisKKwlleHRzdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0c3RhdHVzKTsKKworCWlmICghKGV4dHN2YWwgJiBJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9FTkRURVNUKSkKKwkJaXBhdGhfZGV2X2VycihkZCwgIk1lbUJJU1QgZGlkIG5vdCBjb21wbGV0ZSFcbiIpOworCisJdmFsID0gfjBVTEw7CS8qIGJhcnJpbmcgYnVncywgYWxsIGh3ZXJyb3JzIGJlY29tZSBpbnRlcnJ1cHRzLCAqLworCisJaWYgKCFkZC0+aXBhdGhfYm9hcmRyZXYpCS8vIG5vIFBMTCBmb3IgRW11bGF0b3IKKwkJdmFsICY9IH5JTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQ7CisKKwkvKiB3b3JrYXJvdW5kIGJ1ZyA5NDYwIGluIGludGVybmFsIGludGVyZmFjZSBidXMgcGFyaXR5IGNoZWNraW5nICovCisJdmFsICY9IH5JTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZUkFETTsKKworCWRkLT5pcGF0aF9od2Vycm1hc2sgPSB2YWw7Cit9CisKKy8qKgorICogaXBhdGhfcGVfYnJpbmd1cF9zZXJkZXMgLSBicmluZyB1cCB0aGUgc2VyZGVzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICovCitzdGF0aWMgaW50IGlwYXRoX3BlX2JyaW5ndXBfc2VyZGVzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1NjQgdmFsLCB0bXAsIGNvbmZpZzE7CisJaW50IHJldCA9IDAsIGNoYW5nZSA9IDA7CisKKwlpcGF0aF9kYmcoIlRyeWluZyB0byBicmluZ3VwIHNlcmRlc1xuIik7CisKKwlpZiAoaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJzdGF0dXMpICYKKwkgICAgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKSB7CisJCWlwYXRoX2RiZygiQXQgc3RhcnQsIHNlcmRlcyBQTEwgZmFpbGVkIGJpdCBzZXQgIgorCQkJICAiaW4gaHdlcnJzdGF0dXMsIGNsZWFyaW5nIGFuZCBjb250aW51aW5nXG4iKTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2VycmNsZWFyLAorCQkJCSBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpOworCX0KKworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzApOworCWNvbmZpZzEgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcxKTsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlNlckRlcyBzdGF0dXMgY29uZmlnMD0lbGx4IGNvbmZpZzE9JWxseCwgIgorCQkgICAieGd4c2NvbmZpZyAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvbmZpZzEsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgIGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcpKTsKKworCS8qCisJICogRm9yY2UgcmVzZXQgb24sIGFsc28gc2V0IHJ4ZGV0ZWN0IGVuYWJsZS4gIE11c3QgZG8gYmVmb3JlIHJlYWRpbmcKKwkgKiBzZXJkZXNzdGF0dXMgYXQgbGVhc3QgZm9yIHNpbXVsYXRpb24sIG9yIHNvbWUgb2YgdGhlIGJpdHMgaW4KKwkgKiBzZXJkZXMgc3RhdHVzIHdpbGwgY29tZSBiYWNrIGFzIHVuZGVmaW5lZCBhbmQgY2F1c2Ugc2ltdWxhdGlvbgorCSAqIGZhaWx1cmVzCisJICovCisJdmFsIHw9IElORklOSVBBVEhfU0VSREMwX1JFU0VUX1BMTCB8IElORklOSVBBVEhfU0VSREMwX1JYREVURUNUX0VOCisJCXwgSU5GSU5JUEFUSF9TRVJEQzBfTDFQV1JfRE47CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOworCS8qIGJlIHN1cmUgY2hpcCBzYXcgaXQgKi8KKwl0bXAgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwl1ZGVsYXkoNSk7CQkvKiBuZWVkIHBsbCByZXNldCBzZXQgYXQgbGVhc3QgZm9yIGEgYml0ICovCisJLyoKKwkgKiBhZnRlciBQTEwgaXMgcmVzZXQsIHNldCB0aGUgcGVyLWxhbmUgUmVzZXRzIGFuZCBUeElkbGUgYW5kCisJICogY2xlYXIgdGhlIFBMTCByZXNldCBhbmQgcnhkZXRlY3QgKHRvIGdldCBmYWxsaW5nIGVkZ2UpLgorCSAqIExlYXZlIEwxUFdSIGJpdHMgc2V0IChwZXJtYW5lbnRseSkKKwkgKi8KKwl2YWwgJj0gfihJTkZJTklQQVRIX1NFUkRDMF9SWERFVEVDVF9FTiB8IElORklOSVBBVEhfU0VSREMwX1JFU0VUX1BMTAorCQkgfCBJTkZJTklQQVRIX1NFUkRDMF9MMVBXUl9ETik7CisJdmFsIHw9IElORklOSVBBVEhfU0VSREMwX1JFU0VUX01BU0sgfCBJTkZJTklQQVRIX1NFUkRDMF9UWElETEU7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQ2xlYXJpbmcgcGxsIHJlc2V0IGFuZCBzZXR0aW5nIGxhbmUgcmVzZXRzICIKKwkJICAgImFuZCB0eGlkbGUgKCVsbHgpXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCwgdmFsKTsKKwkvKiBiZSBzdXJlIGNoaXAgc2F3IGl0ICovCisJdG1wID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJLyogbmVlZCBQTEwgcmVzZXQgY2xlYXIgZm9yIGF0IGxlYXN0IDExIHVzZWMgYmVmb3JlIGxhbmUKKwkgKiByZXNldHMgY2xlYXJlZDsgZ2l2ZSBpdCBhIGZldyBtb3JlIHRvIGJlIHN1cmUgKi8KKwl1ZGVsYXkoMTUpOworCXZhbCAmPSB+KElORklOSVBBVEhfU0VSREMwX1JFU0VUX01BU0sgfCBJTkZJTklQQVRIX1NFUkRDMF9UWElETEUpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQ2xlYXJpbmcgbGFuZSByZXNldHMgYW5kIHR4aWRsZSAiCisJCSAgICIod3JpdGluZyAlbGx4KVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7CisJLyogYmUgc3VyZSBjaGlwIHNhdyBpdCAqLworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZyk7CisJaWYgKCgodmFsID4+IElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCkgJgorCSAgICAgSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX01BU0spICE9IDMpIHsKKwkJdmFsICY9CisJCQl+KElORklOSVBBVEhfWEdYU19NRElPQUREUl9NQVNLIDw8CisJCQkgIElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCk7CisJCS8qIE1ESU8gYWRkcmVzcyAzICovCisJCXZhbCB8PSAzVUxMIDw8IElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVDsKKwkJY2hhbmdlID0gMTsKKwl9CisJaWYgKHZhbCAmIElORklOSVBBVEhfWEdYU19SRVNFVCkgeworCQl2YWwgJj0gfklORklOSVBBVEhfWEdYU19SRVNFVDsKKwkJY2hhbmdlID0gMTsKKwl9CisJaWYgKGNoYW5nZSkKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnLCB2YWwpOworCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCk7CisKKwkvKiBjbGVhciBjdXJyZW50IGFuZCBkZS1lbXBoYXNpcyBiaXRzICovCisJY29uZmlnMSAmPSB+MHgwZmZmZmZmZmYwMFVMTDsKKwkvKiBzZXQgY3VycmVudCB0byAyMG1hICovCisJY29uZmlnMSB8PSAweDAwMDAwMDAwMDAwVUxMOworCS8qIHNldCBkZS1lbXBoYXNpcyB0byAtNS42OGRCICovCisJY29uZmlnMSB8PSAweDBjY2NjMDAwMDAwVUxMOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMSwgY29uZmlnMSk7CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJkb25lOiBTZXJEZXMgc3RhdHVzIGNvbmZpZzA9JWxseCAiCisJCSAgICJjb25maWcxPSVsbHgsIHNzdGF0dXM9JWxseCB4Z3hzPSVsbHhcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY29uZmlnMSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzc3RhdHVzKSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZykpOworCisJaWYgKCFpcGF0aF93YWl0Zm9yX21kaW9fY21kcmVhZHkoZGQpKSB7CisJCWlwYXRoX3dyaXRlX2tyZWcoCisJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9tZGlvLAorCQkJaXBhdGhfbWRpb19yZXEoSVBBVEhfTURJT19DTURfUkVBRCwgMzEsCisJCQkJICAgICAgIElQQVRIX01ESU9fQ1RSTF9YR1hTX1JFR184LCAwKSk7CisJCWlmIChpcGF0aF93YWl0Zm9yX2NvbXBsZXRlKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX21kaW8sCisJCQkJCSAgIElQQVRIX01ESU9fREFUQVZBTElELCAmdmFsKSkKKwkJCWlwYXRoX2RiZygiTmV2ZXIgZ290IE1ESU8gZGF0YSBmb3IgWEdYUyAiCisJCQkJICAic3RhdHVzIHJlYWRcbiIpOworCQllbHNlCisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJNRElPIFJlYWQgcmVnOCwgIgorCQkJCSAgICInYmFuaycgMzEgJXhcbiIsICh1MzIpIHZhbCk7CisJfSBlbHNlCisJCWlwYXRoX2RiZygiTmV2ZXIgZ290IE1ESU8gY21kcmVhZHkgZm9yIFhHWFMgc3RhdHVzIHJlYWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9wZV9xdWlldF9zZXJkZXMgLSBzZXQgc2VyZGVzIHRvIHR4aWRsZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIENhbGxlZCB3aGVuIGRyaXZlciBpcyBiZWluZyB1bmxvYWRlZAorICovCitzdGF0aWMgdm9pZCBpcGF0aF9wZV9xdWlldF9zZXJkZXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKKworCXZhbCB8PSBJTkZJTklQQVRIX1NFUkRDMF9UWElETEU7CisJaXBhdGhfZGJnKCJTZXR0aW5nIFR4SWRsZUVuIG9uIHNlcmRlcyAoY29uZmlnMCA9ICVsbHgpXG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOworfQorCisvKiB0aGlzIGlzIG5vdCB5ZXQgbmVlZGVkIG9uIHRoZSBQRTgwMCwgc28ganVzdCByZXR1cm4gMC4gKi8KK3N0YXRpYyBpbnQgaXBhdGhfcGVfaW50Y29uZmlnKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9zZXR1cF9wZV9zZXRleHRsZWQgLSBzZXQgdGhlIHN0YXRlIG9mIHRoZSB0d28gZXh0ZXJuYWwgTEVEcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBsc3Q6IHRoZSBMIHN0YXRlCisgKiBAbHRzdDogdGhlIExUIHN0YXRlCisKKyAqIFRoZXNlIExFRHMgaW5kaWNhdGUgdGhlIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHN0YXRlIG9mIElCIGxpbmsuCisgKiBGb3IgdGhpcyBjaGlwIChhdCBsZWFzdCB3aXRoIHJlY29tbWVuZGVkIGJvYXJkIHBpbm91dHMpLCBMRUQxCisgKiBpcyBZZWxsb3cgKGxvZ2ljYWwgc3RhdGUpIGFuZCBMRUQyIGlzIEdyZWVuIChwaHlzaWNhbCBzdGF0ZSksCisgKgorICogTm90ZTogIFdlIHRyeSB0byBtYXRjaCB0aGUgTWVsbGFub3ggSENBIExFRCBiZWhhdmlvciBhcyBiZXN0CisgKiB3ZSBjYW4uICBHcmVlbiBpbmRpY2F0ZXMgcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBPSyAoc29tZXRoaW5nIGlzCisgKiBwbHVnZ2VkIGluLCBhbmQgd2UgY2FuIHRyYWluKS4KKyAqIEFtYmVyIGluZGljYXRlcyB0aGUgbGluayBpcyBsb2dpY2FsbHkgdXAgKEFDVElWRSkuCisgKiBNZWxsYW5veCBmdXJ0aGVyIGJsaW5rcyB0aGUgYW1iZXIgTEVEIHRvIGluZGljYXRlIGRhdGEgcGFja2V0CisgKiBhY3Rpdml0eSwgYnV0IHdlIGhhdmUgbm8gaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhhdCwgc28gaXQgd291bGQKKyAqIHJlcXVpcmUgd2FraW5nIHVwIGV2ZXJ5IDEwLTIwIG1zZWNzIGFuZCBjaGVja2luZyB0aGUgY291bnRlcnMKKyAqIG9uIHRoZSBjaGlwLCBhbmQgdGhlbiB0dXJuaW5nIHRoZSBMRUQgb2ZmIGlmIGFwcHJvcHJpYXRlLiAgVGhhdCdzCisgKiB2aXNpYmxlIG92ZXJoZWFkLCBzbyBub3Qgc29tZXRoaW5nIHdlIHdpbGwgZG8uCisgKgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9zZXR1cF9wZV9zZXRleHRsZWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgbHN0LAorCQkJCSAgICAgdTY0IGx0c3QpCit7CisJdTY0IGV4dGN0bDsKKworCS8qIHRoZSBkaWFncyB1c2UgdGhlIExFRCB0byBpbmRpY2F0ZSBkaWFnIGluZm8sIHNvIHdlIGxlYXZlCisJICogdGhlIGV4dGVybmFsIExFRCBhbG9uZSB3aGVuIHRoZSBkaWFncyBhcmUgcnVubmluZyAqLworCWlmIChpcGF0aF9kaWFnX2ludXNlKQorCQlyZXR1cm47CisKKwlleHRjdGwgPSBkZC0+aXBhdGhfZXh0Y3RybCAmIH4oSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OIHwKKwkJCQkgICAgICAgSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OKTsKKworCWlmIChsdHN0ICYgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCkKKwkJZXh0Y3RsIHw9IElORklOSVBBVEhfRVhUQ19MRUQyUFJJUE9SVF9PTjsKKwlpZiAobHN0ID09IElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVElWRSkKKwkJZXh0Y3RsIHw9IElORklOSVBBVEhfRVhUQ19MRUQxUFJJUE9SVF9PTjsKKwlkZC0+aXBhdGhfZXh0Y3RybCA9IGV4dGN0bDsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2V4dGN0cmwsIGV4dGN0bCk7Cit9CisKKy8qKgorICogaXBhdGhfc2V0dXBfcGVfY2xlYW51cCAtIGNsZWFuIHVwIGFueSBwZXItY2hpcCBjaGlwLXNwZWNpZmljIHN0dWZmCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBkcml2ZXIgdW5sb2FkLgorICogV2UgZG8gdGhlIHBjaV9kaXNhYmxlX21zaSBoZXJlLCBub3QgaW4gZ2VuZXJpYyBjb2RlLCBiZWNhdXNlIGl0CisgKiBpc24ndCB1c2VkIGZvciB0aGUgSFQtNDAwLiBJZiB3ZSBkbyBlbmQgdXAgbmVlZGluZyBwY2lfZW5hYmxlX21zaQorICogYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlIGZvciBIVC00MDAsIHdlJ2xsIG1vdmUgdGhlIGNhbGwgYmFjaworICogaW50byB0aGUgbWFpbiBpbml0X29uZSBjb2RlLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9zZXR1cF9wZV9jbGVhbnVwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlkZC0+aXBhdGhfbXNpX2xvID0gMDsJLyoganVzdCBpbiBjYXNlIHVubG9hZCBmYWlscyAqLworCXBjaV9kaXNhYmxlX21zaShkZC0+cGNpZGV2KTsKK30KKworLyoqCisgKiBpcGF0aF9zZXR1cF9wZV9jb25maWcgLSBzZXR1cCBQQ0llIGNvbmZpZyByZWxhdGVkIHN0dWZmCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBkZXY6IHRoZSBQQ0kgZGV2aWNlCisgKgorICogVGhlIHBjaV9lbmFibGVfbXNpKCkgY2FsbCB3aWxsIGZhaWwgb24gc3lzdGVtcyB3aXRoIE1TSSBxdWlya3MKKyAqIHN1Y2ggYXMgdGhvc2Ugd2l0aCBBTUQ4MTMxLCBldmVuIGlmIHRoZSBkZXZpY2Ugb2YgaW50ZXJlc3QgaXMgbm90CisgKiBhdHRhY2hlZCB0byB0aGF0IGRldmljZSwgKGluIHRoZSAyLjYuMTMgLSAyLjYuMTUga2VybmVscywgYXQgbGVhc3QsIGZpeGVkCisgKiBsYXRlIGluIDIuNi4xNikuCisgKiBBbGwgdGhhdCBjYW4gYmUgZG9uZSBpcyB0byBlZGl0IHRoZSBrZXJuZWwgc291cmNlIHRvIHJlbW92ZSB0aGUgcXVpcmsKKyAqIGNoZWNrIHVudGlsIHRoYXQgaXMgZml4ZWQuCisgKiBXZSBkbyBub3QgbmVlZCB0byBjYWxsIGVuYWJsZV9tc2koKSBmb3Igb3VyIEh5cGVyVHJhbnNwb3J0IGNoaXAgKEhULTQwMCksCisgKiBldmVuIHRob3NlIGl0IHVzZXMgTVNJLCBhbmQgd2Ugd2FudCB0byBhdm9pZCB0aGUgcXVpcmsgd2FybmluZywgc28KKyAqIFNvIHdlIGNhbGwgZW5hYmxlX21zaSBvbmx5IGZvciB0aGUgUEUtODAwLiAgSWYgd2UgZG8gZW5kIHVwIG5lZWRpbmcKKyAqIHBjaV9lbmFibGVfbXNpIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSBmb3IgSFQtNDAwLCB3ZSdsbCBtb3ZlIHRoZQorICogY2FsbCBiYWNrIGludG8gdGhlIG1haW4gaW5pdF9vbmUgY29kZS4KKyAqIFdlIHNhdmUgdGhlIG1zaSBsbyBhbmQgaGkgdmFsdWVzLCBzbyB3ZSBjYW4gcmVzdG9yZSB0aGVtIGFmdGVyCisgKiBjaGlwIHJlc2V0ICh0aGUga2VybmVsIFBDSSBpbmZyYXN0cnVjdHVyZSBkb2Vzbid0IHlldCBoYW5kbGUgdGhhdAorICogY29ycmVjdGx5KS4KKyAqLworc3RhdGljIGludCBpcGF0aF9zZXR1cF9wZV9jb25maWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcG9zLCByZXQ7CisKKwlkZC0+aXBhdGhfbXNpX2xvID0gMDsJLyogdXNlZCBhcyBhIGZsYWcgZHVyaW5nIHJlc2V0IHByb2Nlc3NpbmcgKi8KKwlyZXQgPSBwY2lfZW5hYmxlX21zaShkZC0+cGNpZGV2KTsKKwlpZiAocmV0KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAicGNpX2VuYWJsZV9tc2kgZmFpbGVkOiAlZCwgIgorCQkJICAgICAgImludGVycnVwdHMgbWF5IG5vdCB3b3JrXG4iLCByZXQpOworCS8qIGNvbnRpbnVlIGV2ZW4gaWYgaXQgZmFpbHMsIHdlIG1heSBzdGlsbCBiZSBPSy4uLiAqLworCisJaWYgKChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRkLT5wY2lkZXYsIFBDSV9DQVBfSURfTVNJKSkpIHsKKwkJdTE2IGNvbnRyb2w7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfTE8sCisJCQkJICAgICAgJmRkLT5pcGF0aF9tc2lfbG8pOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0hJLAorCQkJCSAgICAgICZkZC0+aXBhdGhfbXNpX2hpKTsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX01TSV9GTEFHUywKKwkJCQkgICAgICZjb250cm9sKTsKKwkJLyogbm93IHNhdmUgdGhlIGRhdGEgKHZlY3RvcikgaW5mbyAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LAorCQkJCSAgICAgcG9zICsgKChjb250cm9sICYgUENJX01TSV9GTEFHU182NEJJVCkKKwkJCQkJICAgID8gMTIgOiA4KSwKKwkJCQkgICAgICZkZC0+aXBhdGhfbXNpX2RhdGEpOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZWFkIG1zaSBkYXRhIDB4JXggZnJvbSBjb25maWcgb2Zmc2V0ICIKKwkJCSAgICIweCV4LCBjb250cm9sPTB4JXhcbiIsIGRkLT5pcGF0aF9tc2lfZGF0YSwKKwkJCSAgIHBvcyArICgoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpID8gMTIgOiA4KSwKKwkJCSAgIGNvbnRyb2wpOworCQkvKiB3ZSBzYXZlIHRoZSBjYWNoZWxpbmVzaXplIGFsc28sIGFsdGhvdWdoIGl0IGRvZXNuJ3QKKwkJICogcmVhbGx5IG1hdHRlciAqLworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZC0+cGNpZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLAorCQkJCSAgICAgJmRkLT5pcGF0aF9wY2lfY2FjaGVsaW5lKTsKKwl9IGVsc2UKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNhbid0IGZpbmQgTVNJIGNhcGFiaWxpdHksICIKKwkJCSAgICAgICJjYW4ndCBzYXZlIE1TSSBzZXR0aW5ncyBmb3IgcmVzZXRcbiIpOworCWlmICgocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZC0+cGNpZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpKSB7CisJCXUxNiBsaW5rc3RhdDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX0VYUF9MTktTVEEsCisJCQkJICAgICAmbGlua3N0YXQpOworCQlsaW5rc3RhdCA+Pj0gNDsKKwkJbGlua3N0YXQgJj0gMHgxZjsKKwkJaWYgKGxpbmtzdGF0ICE9IDgpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiUENJZSB3aWR0aCAldSwgIgorCQkJCSAgICAgICJwZXJmb3JtYW5jZSByZWR1Y2VkXG4iLCBsaW5rc3RhdCk7CisJfQorCWVsc2UKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNhbid0IGZpbmQgUENJIEV4cHJlc3MgIgorCQkJICAgICAgImNhcGFiaWxpdHkhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfaW5pdF9wZV92YXJpYWJsZXModm9pZCkKK3sKKwkvKgorCSAqIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsCisJICogdXNlZCBmb3IgSTJDIHNlcmlhbCBmbGFzaAorCSAqLworCWlwYXRoX2dwaW9fc2RhX251bSA9IF9JUEFUSF9HUElPX1NEQV9OVU07CisJaXBhdGhfZ3Bpb19zY2xfbnVtID0gX0lQQVRIX0dQSU9fU0NMX05VTTsKKwlpcGF0aF9ncGlvX3NkYSA9IElQQVRIX0dQSU9fU0RBOworCWlwYXRoX2dwaW9fc2NsID0gSVBBVEhfR1BJT19TQ0w7CisKKwkvKiB2YXJpYWJsZXMgZm9yIHNhbml0eSBjaGVja2luZyBpbnRlcnJ1cHQgYW5kIGVycm9ycyAqLworCWluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQgPQorCQkoSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0sgPDwKKwkJIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCkgfAorCQkoSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX1NISUZUKSB8CisJCUlORklOSVBBVEhfSFdFX1BDSUUxUExMRkFJTEVEIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRTBQTExGQUlMRUQgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFUE9JU09ORURUTFAgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFQ1BMVElNRU9VVCB8CisJCUlORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlYVExIIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhBRE0gfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZUkFETSB8CisJCUlORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQgfAorCQlJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX0NPUkVQTExfUkZTTElQIHwKKwkJSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEIHwKKwkJSU5GSU5JUEFUSF9IV0VfSUJDQlVTVE9TUENQQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9JQkNCVVNGUlNQQ1BBUklUWUVSUjsKKwlpbmZpbmlwYXRoX2lfYml0c2V4dGFudCA9CisJCShJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgPDwgSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkgfAorCQkoSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgPDwKKwkJIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkgfAorCQlJTkZJTklQQVRIX0lfRVJST1IgfCBJTkZJTklQQVRIX0lfU1BJT1NFTlQgfAorCQlJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMIHwgSU5GSU5JUEFUSF9JX0dQSU87CisJaW5maW5pcGF0aF9lX2JpdHNleHRhbnQgPQorCQlJTkZJTklQQVRIX0VfUkZPUk1BVEVSUiB8IElORklOSVBBVEhfRV9SVkNSQyB8CisJCUlORklOSVBBVEhfRV9SSUNSQyB8IElORklOSVBBVEhfRV9STUlOUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1JNQVhQS1RMRU4gfCBJTkZJTklQQVRIX0VfUkxPTkdQS1RMRU4gfAorCQlJTkZJTklQQVRIX0VfUlNIT1JUUEtUTEVOIHwgSU5GSU5JUEFUSF9FX1JVTkVYUENIQVIgfAorCQlJTkZJTklQQVRIX0VfUlVOU1VQVkwgfCBJTkZJTklQQVRIX0VfUkVCUCB8CisJCUlORklOSVBBVEhfRV9SSUJGTE9XIHwgSU5GSU5JUEFUSF9FX1JCQURWRVJTSU9OIHwKKwkJSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMIHwgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMIHwKKwkJSU5GSU5JUEFUSF9FX1JCQURUSUQgfCBJTkZJTklQQVRIX0VfUkhEUkxFTiB8CisJCUlORklOSVBBVEhfRV9SSERSIHwgSU5GSU5JUEFUSF9FX1JJQkxPU1RMSU5LIHwKKwkJSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU4gfCBJTkZJTklQQVRIX0VfU01BWFBLVExFTiB8CisJCUlORklOSVBBVEhfRV9TVU5ERVJSVU4gfCBJTkZJTklQQVRIX0VfU1BLVExFTiB8CisJCUlORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVCB8IElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgfAorCQlJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCB8IElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0gfAorCQlJTkZJTklQQVRIX0VfU1VOU1VQVkwgfCBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEIHwKKwkJSU5GSU5JUEFUSF9FX0lOVkFMSURBRERSIHwgSU5GSU5JUEFUSF9FX1JFU0VUIHwKKwkJSU5GSU5JUEFUSF9FX0hBUkRXQVJFOworCisJaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2sgPSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSzsKKwlpbmZpbmlwYXRoX2lfcmN2dXJnX21hc2sgPSBJTkZJTklQQVRIX0lfUkNWVVJHX01BU0s7Cit9CisKKy8qIHNldHVwIHRoZSBNU0kgc3R1ZmYgYWdhaW4gYWZ0ZXIgYSByZXNldC4gIEknZCBsaWtlIHRvIGp1c3QgY2FsbAorICogcGNpX2VuYWJsZV9tc2koKSBhbmQgcmVxdWVzdF9pcnEoKSBhZ2FpbiwgYnV0IHdoZW4gSSBkbyB0aGF0LAorICogdGhlIE1TSSBlbmFibGUgYml0IGRvZXNuJ3QgZ2V0IHNldCBpbiB0aGUgY29tbWFuZCB3b3JkLCBhbmQKKyAqIHdlIHN3aXRjaCB0byB0byBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgdmVjdG9yLCB3aGljaCBpcyBjb25mdXNpbmcsCisgKiBzbyBJIGluc3RlYWQganVzdCBkbyBpdCBhbGwgaW5saW5lLiAgUGVyaGFwcyBzb21laG93IGNhbiB0aWUgdGhpcworICogaW50byB0aGUgUENJZSBob3RwbHVnIHN1cHBvcnQgYXQgc29tZSBwb2ludAorICogTm90ZSwgYmVjYXVzZSBJJ20gZG9pbmcgaXQgYWxsIGhlcmUsIEkgZG9uJ3QgY2FsbCBwY2lfZGlzYWJsZV9tc2koKQorICogb3IgZnJlZV9pcnEoKSBhdCB0aGUgc3RhcnQgb2YgaXBhdGhfc2V0dXBfcGVfcmVzZXQoKS4KKyAqLworc3RhdGljIGludCBpcGF0aF9yZWluaXRfbXNpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcG9zOworCXUxNiBjb250cm9sOworCWludCByZXQ7CisKKwlpZiAoIWRkLT5pcGF0aF9tc2lfbG8pIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkNhbid0IHJlc3RvcmUgTVNJIGNvbmZpZywgIgorCQkJICJpbml0aWFsIHNldHVwIGZhaWxlZD9cbiIpOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKCEocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZC0+cGNpZGV2LCBQQ0lfQ0FQX0lEX01TSSkpKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJDYW4ndCBmaW5kIE1TSSBjYXBhYmlsaXR5LCAiCisJCQkgICAgICAiY2FuJ3QgcmVzdG9yZSBNU0kgc2V0dGluZ3NcbiIpOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCWlwYXRoX2NkYmcoVkVSQk9TRSwgIldyaXRpbmcgbXNpX2xvIDB4JXggdG8gY29uZmlnIG9mZnNldCAweCV4XG4iLAorCQkgICBkZC0+aXBhdGhfbXNpX2xvLCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfTE8pOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0xPLAorCQkJICAgICAgIGRkLT5pcGF0aF9tc2lfbG8pOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIldyaXRpbmcgbXNpX2xvIDB4JXggdG8gY29uZmlnIG9mZnNldCAweCV4XG4iLAorCQkgICBkZC0+aXBhdGhfbXNpX2hpLCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEkpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0hJLAorCQkJICAgICAgIGRkLT5pcGF0aF9tc2lfaGkpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsIHBvcyArIFBDSV9NU0lfRkxBR1MsICZjb250cm9sKTsKKwlpZiAoIShjb250cm9sICYgUENJX01TSV9GTEFHU19FTkFCTEUpKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIk1TSSBjb250cm9sIGF0IG9mZiAleCB3YXMgJXgsICIKKwkJCSAgICJzZXR0aW5nIE1TSSBlbmFibGUgKCV4KVxuIiwgcG9zICsgUENJX01TSV9GTEFHUywKKwkJCSAgIGNvbnRyb2wsIGNvbnRyb2wgfCBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSk7CisJCWNvbnRyb2wgfD0gUENJX01TSV9GTEFHU19FTkFCTEU7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLAorCQkJCSAgICAgIGNvbnRyb2wpOworCX0KKwkvKiBub3cgcmV3cml0ZSB0aGUgZGF0YSAodmVjdG9yKSBpbmZvICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsIHBvcyArCisJCQkgICAgICAoKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKSA/IDEyIDogOCksCisJCQkgICAgICBkZC0+aXBhdGhfbXNpX2RhdGEpOworCS8qIHdlIHJlc3RvcmUgdGhlIGNhY2hlbGluZXNpemUgYWxzbywgYWx0aG91Z2ggaXQgZG9lc24ndCByZWFsbHkKKwkgKiBtYXR0ZXIgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGQtPnBjaWRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKKwkJCSAgICAgIGRkLT5pcGF0aF9wY2lfY2FjaGVsaW5lKTsKKwkvKiBhbmQgbm93IHNldCB0aGUgcGNpIG1hc3RlciBiaXQgYWdhaW4gKi8KKwlwY2lfc2V0X21hc3RlcihkZC0+cGNpZGV2KTsKKwlyZXQgPSAxOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgcm91dGluZSBzbGVlcHMsIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgbm90CisgKiBmcm9tIGludGVycnVwdCBjb250ZXh0LiAgSWYgd2UgbmVlZCBpbnRlcnJ1cHQgY29udGV4dCwgd2UgY2FuIHNwbGl0CisgKiBpdCBpbnRvIHR3byByb3V0aW5lcy4KKyovCitzdGF0aWMgaW50IGlwYXRoX3NldHVwX3BlX3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1NjQgdmFsOworCWludCBpOworCWludCByZXQ7CisKKwkvKiBVc2UgRVJST1Igc28gaXQgc2hvd3MgdXAgaW4gbG9ncywgZXRjLiAqLworCWlwYXRoX2Rldl9lcnIoZGQsICJSZXNldHRpbmcgUEUtODAwIHVuaXQgJXVcbiIsCisJCSAgICAgIGRkLT5pcGF0aF91bml0KTsKKwkvKiBrZWVwIGNoaXAgZnJvbSBiZWluZyBhY2Nlc3NlZCBpbiBhIGZldyBwbGFjZXMgKi8KKwlkZC0+aXBhdGhfZmxhZ3MgJj0gfihJUEFUSF9JTklUVEVEfElQQVRIX1BSRVNFTlQpOworCXZhbCA9IGRkLT5pcGF0aF9jb250cm9sIHwgSU5GSU5JUEFUSF9DX1JFU0VUOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwgdmFsKTsKKwltYigpOworCisJZm9yIChpID0gMTsgaSA8PSA1OyBpKyspIHsKKwkJaW50IHI7CisJCS8qIGFsbG93IE1CSVNULCBldGMuIHRvIGNvbXBsZXRlOyBsb25nZXIgb24gZWFjaCByZXRyeS4KKwkJICogV2Ugc29tZXRpbWVzIGdldCBtYWNoaW5lIGNoZWNrcyBmcm9tIGJ1cyB0aW1lb3V0IGlmIG5vCisJCSAqIHJlc3BvbnNlLCBzbyBmb3Igbm93LCBtYWtlIGl0ICpyZWFsbHkqIGxvbmcuCisJCSAqLworCQltc2xlZXAoMTAwMCArICgxICsgaSkgKiAyMDAwKTsKKwkJaWYgKChyID0KKwkJICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRkLT5wY2lkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwKKwkJCQkJICAgIGRkLT5pcGF0aF9wY2liYXIwKSkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAicmV3cml0ZSBvZiBCQVIwIGZhaWxlZDogJWRcbiIsCisJCQkJICAgICAgcik7CisJCWlmICgociA9CisJCSAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZC0+cGNpZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzEsCisJCQkJCSAgICBkZC0+aXBhdGhfcGNpYmFyMSkpKQorCQkJaXBhdGhfZGV2X2VycihkZCwgInJld3JpdGUgb2YgQkFSMSBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgICAgIHIpOworCQkvKiBub3cgcmUtZW5hYmxlIG1lbW9yeSBhY2Nlc3MgKi8KKwkJaWYgKChyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGQtPnBjaWRldikpKQorCQkJaXBhdGhfZGV2X2VycihkZCwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBhZnRlciAiCisJCQkJICAgICAgInJlc2V0OiAlZFxuIiwgcik7CisJCS8qIHdoZXRoZXIgaXQgd29ya2VkIG9yIG5vdCwgbWFyayBhcyBwcmVzZW50LCBhZ2FpbiAqLworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfUFJFU0VOVDsKKwkJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmV2aXNpb24pOworCQlpZiAodmFsID09IGRkLT5pcGF0aF9yZXZpc2lvbikgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiR290IG1hdGNoaW5nIHJldmlzaW9uICIKKwkJCQkgICAicmVnaXN0ZXIgJWxseCBvbiB0cnkgJWRcbiIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLCBpKTsKKwkJCXJldCA9IGlwYXRoX3JlaW5pdF9tc2koZGQpOworCQkJZ290byBiYWlsOworCQl9CisJCS8qIFByb2JhYmx5IGdldHRpbmcgLTEgYmFjayAqLworCQlpcGF0aF9kYmcoIkRpZG4ndCBnZXQgZXhwZWN0ZWQgcmV2aXNpb24gcmVnaXN0ZXIsICIKKwkJCSAgImdvdCAlbGx4LCB0cnkgJWRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwKKwkJCSAgaSArIDEpOworCX0KKwlyZXQgPSAwOyAvKiBmYWlsZWQgKi8KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3BlX3B1dF90aWQgLSB3cml0ZSBhIFRJRCBpbiBjaGlwCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHRpZHB0cjogcG9pbnRlciB0byB0aGUgZXhwZWN0ZWQgVElEIChpbiBjaGlwKSB0byB1ZHBhdGUKKyAqIEB0aWR0eXBlOiAwIGZvciBlYWdlciwgMSBmb3IgZXhwZWN0ZWQKKyAqIEBwYTogcGh5c2ljYWwgYWRkcmVzcyBvZiBpbiBtZW1vcnkgYnVmZmVyOyBpcGF0aF90aWRpbnZhbGlkIGlmIGZyZWVpbmcKKyAqCisgKiBUaGlzIGV4aXN0cyBhcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gYWxsb3cgZm9yIHNwZWNpYWwgbG9ja2luZyBldGMuCisgKiBJdCdzIHVzZWQgZm9yIGJvdGggdGhlIGZ1bGwgY2xlYW51cCBvbiBleGl0LCBhcyB3ZWxsIGFzIHRoZSBub3JtYWwKKyAqIHNldHVwIGFuZCB0ZWFyZG93bi4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcGVfcHV0X3RpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCBfX2lvbWVtICp0aWRwdHIsCisJCQkgICAgIHUzMiB0eXBlLCB1bnNpZ25lZCBsb25nIHBhKQoreworCXUzMiBfX2lvbWVtICp0aWRwMzIgPSAodTMyIF9faW9tZW0gKil0aWRwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7IC8qIGtlZXAgZ2NjIHF1aWV0ICovCisKKwlpZiAocGEgIT0gZGQtPmlwYXRoX3RpZGludmFsaWQpIHsKKwkJaWYgKHBhICYgKCgxVSA8PCAxMSkgLSAxKSkgeworCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkJVRzogcGh5c2FkZHIgJWx4ICIKKwkJCQkgIm5vdCA0S0IgYWxpZ25lZCFcbiIsIHBhKTsKKwkJCXJldHVybjsKKwkJfQorCQlwYSA+Pj0gMTE7CisJCS8qIHBhcmFub2lhIGNoZWNrICovCisJCWlmIChwYSAmICg3PDwyOSkpCisJCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJCSAgICAgICJCVUc6IFBoeXNpY2FsIHBhZ2UgYWRkcmVzcyAweCVseCAiCisJCQkJICAgICAgImhhcyBiaXRzIHNldCBpbiAzMS0yOVxuIiwgcGEpOworCisJCWlmICh0eXBlID09IDApCisJCQlwYSB8PSBkZC0+aXBhdGhfdGlkdGVtcGxhdGU7CisJCWVsc2UgLyogZm9yIG5vdywgYWx3YXlzIGZ1bGwgNEtCIHBhZ2UgKi8KKwkJCXBhIHw9IDIgPDwgMjk7CisJfQorCisJLyogd29ya2Fyb3VuZCBjaGlwIGJ1ZyA5NDM3IGJ5IHdyaXRpbmcgZWFjaCBUSUQgdHdpY2UKKwkgKiBhbmQgaG9sZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB0aGUgd3JpdGVzLCBzbyB0aGV5IGRvbid0CisJICogaW50ZXJtaXggd2l0aCBvdGhlciBUSUQgKGVhZ2VyIG9yIGV4cGVjdGVkKSB3cml0ZXMKKwkgKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNhbGwgY2FuIGJlIGRvbmUgZnJvbSBpbnRlcnJ1cHQgbGV2ZWwKKwkgKiBmb3IgdGhlIHBvcnQgMCBlYWdlciBUSURzLCBzbyB3ZSBoYXZlIHRvIHVzZSBpcnFzYXZlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF90aWRfbG9jaywgZmxhZ3MpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCwgMHhmZWVkZGVhZik7CisJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJd3JpdGVsKHBhLCB0aWRwMzIpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCwgMHhkZWFkYmVlZik7CisJbW1pb3diKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3RpZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogaXBhdGhfcGVfY2xlYXJfdGlkIC0gY2xlYXIgYWxsIFRJRCBlbnRyaWVzIGZvciBhIHBvcnQsIGV4cGVjdGVkIGFuZCBlYWdlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwb3J0OiB0aGUgcG9ydAorICoKKyAqIGNsZWFyIGFsbCBUSUQgZW50cmllcyBmb3IgYSBwb3J0LCBleHBlY3RlZCBhbmQgZWFnZXIuCisgKiBVc2VkIGZyb20gaXBhdGhfY2xvc2UoKS4gIE9uIFBFODAwLCBUSURzIGFyZSBvbmx5IDMyIGJpdHMsCisgKiBub3QgNjQsIGJ1dCB0aGV5IGFyZSBzdGlsbCBvbiA2NCBiaXQgYm91bmRhcmllcywgc28gdGlkYmFzZQorICogaXMgZGVjbGFyZWQgYXMgdTY0ICogZm9yIHRoZSBwb2ludGVyIG1hdGgsIGV2ZW4gdGhvdWdoIHdlIHdyaXRlIDMyIGJpdHMKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcGVfY2xlYXJfdGlkcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIHBvcnQpCit7CisJdTY0IF9faW9tZW0gKnRpZGJhc2U7CisJdW5zaWduZWQgbG9uZyB0aWRpbnY7CisJaW50IGk7CisKKwlpZiAoIWRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJcmV0dXJuOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiSW52YWxpZGF0ZSBUSURzIGZvciBwb3J0ICV1XG4iLCBwb3J0KTsKKworCXRpZGludiA9IGRkLT5pcGF0aF90aWRpbnZhbGlkOworCXRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikKKwkJKChjaGFyIF9faW9tZW0gKikoZGQtPmlwYXRoX2tyZWdiYXNlKSArCisJCSBkZC0+aXBhdGhfcmN2dGlkYmFzZSArCisJCSBwb3J0ICogZGQtPmlwYXRoX3JjdnRpZGNudCAqIHNpemVvZigqdGlkYmFzZSkpOworCisJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9yY3Z0aWRjbnQ7IGkrKykKKwkJaXBhdGhfcGVfcHV0X3RpZChkZCwgJnRpZGJhc2VbaV0sIDAsIHRpZGludik7CisKKwl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopCisJCSgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkgZGQtPmlwYXRoX3JjdmVncmJhc2UgKworCQkgcG9ydCAqIGRkLT5pcGF0aF9yY3ZlZ3JjbnQgKiBzaXplb2YoKnRpZGJhc2UpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfcmN2ZWdyY250OyBpKyspCisJCWlwYXRoX3BlX3B1dF90aWQoZGQsICZ0aWRiYXNlW2ldLCAxLCB0aWRpbnYpOworfQorCisvKioKKyAqIGlwYXRoX3BlX3RpZHRlbXBsYXRlIC0gc2V0dXAgY29uc3RhbnRzIGZvciBUSUQgdXBkYXRlcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBXZSBzZXR1cCBzdHVmZiB0aGF0IHdlIHVzZSBhIGxvdCwgdG8gYXZvaWQgY2FsY3VsYXRpbmcgZWFjaCB0aW1lCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3BlX3RpZHRlbXBsYXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1MzIgZWdyc2l6ZSA9IGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplOworCisJLyogRm9yIG5vdywgd2UgYWx3YXlzIGFsbG9jYXRlIDRLQiBidWZmZXJzIChhdCBpbml0KSBzbyB3ZSBjYW4KKwkgKiByZWNlaXZlIG1heCBzaXplIHBhY2tldHMuICBXZSBtYXkgd2FudCBhIG1vZHVsZSBwYXJhbWV0ZXIgdG8KKwkgKiBzcGVjaWZ5IDJLQiBvciA0S0IgYW5kL29yIG1ha2UgYmUgcGVyIHBvcnQgaW5zdGVhZCBvZiBwZXIgZGV2aWNlCisJICogZm9yIHRob3NlIHdobyB3YW50IHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50LiAgTm90ZSB0aGF0IHRoZQorCSAqIGlwYXRoX3JjdmhkcmVudHNpemUgc2l6ZSBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBsYXJnZXN0CisJICogSUIgaGVhZGVyIChjdXJyZW50bHkgOTYgYnl0ZXMpIHRoYXQgd2UgZXhwZWN0IHRvIGhhbmRsZSAocGx1cyBvZgorCSAqIGNvdXJzZSB0aGUgMiBkd29yZHMgb2YgUkhGKS4KKwkgKi8KKwlpZiAoZWdyc2l6ZSA9PSAyMDQ4KQorCQlkZC0+aXBhdGhfdGlkdGVtcGxhdGUgPSAxVSA8PCAyOTsKKwllbHNlIGlmIChlZ3JzaXplID09IDQwOTYpCisJCWRkLT5pcGF0aF90aWR0ZW1wbGF0ZSA9IDJVIDw8IDI5OworCWVsc2UgeworCQllZ3JzaXplID0gNDA5NjsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkJVRzogdW5zdXBwb3J0ZWQgZWdyYnVmc2l6ZSAiCisJCQkgIiV1LCB1c2luZyAldVxuIiwgZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUsCisJCQkgZWdyc2l6ZSk7CisJCWRkLT5pcGF0aF90aWR0ZW1wbGF0ZSA9IDJVIDw8IDI5OworCX0KKwlkZC0+aXBhdGhfdGlkaW52YWxpZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfcGVfZWFybHlfaW5pdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIXzRCWVRFX1RJRDsKKworCS8qCisJICogRm9yIG9wZW5pYiwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBhbiBJQiBoZWFkZXIgb2YgOTYgYnl0ZXMKKwkgKiBvciAyNCBkd29yZHMuICBIVC00MDAgaGFzIGFyYml0cmFyeSBzaXplZCByZWNlaXZlIGJ1ZmZlcnMsIHNvIHdlCisJICogbWFkZSB0aGVtIHRoZSBzYW1lIHNpemUgYXMgdGhlIFBJTyBidWZmZXJzLiAgVGhlIFBFLTgwMCBkb2VzIG5vdAorCSAqIGhhbmRsZSBhcmJpdHJhcnkgc2l6ZSBidWZmZXJzLCBzbyB3ZSBuZWVkIHRoZSBoZWFkZXIgbGFyZ2UgZW5vdWdoCisJICogdG8gaGFuZGxlIGxhcmdlc3QgSUIgaGVhZGVyLCBidXQgc3RpbGwgaGF2ZSByb29tIGZvciBhIDJLQiBNVFUKKwkgKiBzdGFuZGFyZCBJQiBwYWNrZXQuCisJICovCisJZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgPSAyNDsKKwlkZC0+aXBhdGhfcmN2aGRyc2l6ZSA9IElQQVRIX0RGTFRfUkNWSERSU0laRTsKKworCS8qIEZvciBIVC00MDAsIHdlIGFsbG9jYXRlIGEgc29tZXdoYXQgb3Zlcmx5IGxhcmdlIGVhZ2VyIGJ1ZmZlciwKKwkgKiBzdWNoIHRoYXQgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IHdlIGNhbiByZWNlaXZlIHRoZSBsYXJnZXN0IHBhY2tldAorCSAqIHRoYXQgd2UgY2FuIHNlbmQgb3V0LiAgVG8gdHJ1bHkgc3VwcG9ydCBhIDRLQiBNVFUsIHdlIG5lZWQgdG8KKwkgKiBidW1wIHRoaXMgdG8gYSBsYXJnZXIgdmFsdWUuICBXZSdsbCBkbyB0aGlzIHdoZW4gSSBnZXQgYXJvdW5kIHRvCisJICogdGVzdGluZyA0S0Igc2VuZHMgb24gdGhlIFBFLTgwMCwgd2hpY2ggSSBoYXZlIG5vdCB5ZXQgZG9uZS4KKwkgKi8KKwlkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZSA9IDIwNDg7CisJLyoKKwkgKiB0aGUgbWluKCkgY2hlY2sgaGVyZSBpcyBjdXJyZW50bHkgYSBub3AsIGJ1dCBpdCBtYXkgbm90IGFsd2F5cworCSAqIGJlLCBkZXBlbmRpbmcgb24ganVzdCBob3cgd2UgZG8gaXBhdGhfcmN2ZWdyYnVmc2l6ZQorCSAqLworCWRkLT5pcGF0aF9pYm1heGxlbiA9IG1pbihkZC0+aXBhdGhfcGlvc2l6ZTJrLAorCQkJCSBkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZSArCisJCQkJIChkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSA8PCAyKSk7CisJZGQtPmlwYXRoX2luaXRfaWJtYXhsZW4gPSBkZC0+aXBhdGhfaWJtYXhsZW47CisKKwkvKgorCSAqIEZvciBQRS04MDAsIHdlIGNhbiByZXF1ZXN0IGEgcmVjZWl2ZSBpbnRlcnJ1cHQgZm9yIDEgb3IKKwkgKiBtb3JlIHBhY2tldHMgZnJvbSBjdXJyZW50IG9mZnNldC4gIEZvciBub3csIHdlIHNldCB0aGlzCisJICogdXAgZm9yIGEgc2luZ2xlIHBhY2tldCwgdG8gbWF0Y2ggdGhlIEhULTQwMCBiZWhhdmlvci4KKwkgKi8KKwlkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYgPSAxVUxMPDwzMjsKKworCWlwYXRoX2dldF9lZXByb21faW5mbyhkZCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBpcGF0aF91bm9yZGVyZWRfd2Modm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9pbml0X3BlX2dldF9iYXNlX2luZm8gLSBzZXQgY2hpcC1zcGVjaWZpYyBmbGFncyBmb3IgdXNlciBjb2RlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGtiYXNlOiBpcGF0aF9iYXNlX2luZm8gcG9pbnRlcgorICoKKyAqIFdlIHNldCB0aGUgUENJRSBmbGFnIGJlY2F1c2UgdGhlIGxvd2VyIGJhbmR3aWR0aCBvbiBQQ0llIHZzCisgKiBIeXBlclRyYW5zcG9ydCBjYW4gYWZmZWN0IHNvbWUgdXNlciBwYWNrZXQgYWxnb3JpdGhpbXMuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfcGVfZ2V0X2Jhc2VfaW5mbyhzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCB2b2lkICprYmFzZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfYmFzZV9pbmZvICpraW5mbyA9IGtiYXNlOworCisJaWYgKGlwYXRoX3Vub3JkZXJlZF93YygpKSB7CisJCWtpbmZvLT5zcGlfcnVudGltZV9mbGFncyB8PSBJUEFUSF9SVU5USU1FX0ZPUkNFX1dDX09SREVSOworCQlpcGF0aF9jZGJnKFBST0MsICJJbnRlbCBwcm9jZXNzb3IsIGZvcmNpbmcgV0Mgb3JkZXJcbiIpOworCX0KKwllbHNlCisJCWlwYXRoX2NkYmcoUFJPQywgIk5vdCBJbnRlbCBwcm9jZXNzb3IsIFdDIG9yZGVyZWRcbiIpOworCisJa2luZm8tPnNwaV9ydW50aW1lX2ZsYWdzIHw9IElQQVRIX1JVTlRJTUVfUENJRTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2luaXRfcGU4MDBfZnVuY3MgLSBzZXQgdXAgdGhlIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogVGhpcyBpcyBnbG9iYWwsIGFuZCBpcyBjYWxsZWQgZGlyZWN0bHkgYXQgaW5pdCB0byBzZXQgdXAgdGhlCisgKiBjaGlwLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBsYXRlciB1c2UuCisgKi8KK3ZvaWQgaXBhdGhfaW5pdF9wZTgwMF9mdW5jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJZGQtPmlwYXRoX2ZfaW50cnNldHVwID0gaXBhdGhfcGVfaW50Y29uZmlnOworCWRkLT5pcGF0aF9mX2J1cyA9IGlwYXRoX3NldHVwX3BlX2NvbmZpZzsKKwlkZC0+aXBhdGhfZl9yZXNldCA9IGlwYXRoX3NldHVwX3BlX3Jlc2V0OworCWRkLT5pcGF0aF9mX2dldF9ib2FyZG5hbWUgPSBpcGF0aF9wZV9ib2FyZG5hbWU7CisJZGQtPmlwYXRoX2ZfaW5pdF9od2Vycm9ycyA9IGlwYXRoX3BlX2luaXRfaHdlcnJvcnM7CisJZGQtPmlwYXRoX2ZfZWFybHlfaW5pdCA9IGlwYXRoX3BlX2Vhcmx5X2luaXQ7CisJZGQtPmlwYXRoX2ZfaGFuZGxlX2h3ZXJyb3JzID0gaXBhdGhfcGVfaGFuZGxlX2h3ZXJyb3JzOworCWRkLT5pcGF0aF9mX3F1aWV0X3NlcmRlcyA9IGlwYXRoX3BlX3F1aWV0X3NlcmRlczsKKwlkZC0+aXBhdGhfZl9icmluZ3VwX3NlcmRlcyA9IGlwYXRoX3BlX2JyaW5ndXBfc2VyZGVzOworCWRkLT5pcGF0aF9mX2NsZWFyX3RpZHMgPSBpcGF0aF9wZV9jbGVhcl90aWRzOworCWRkLT5pcGF0aF9mX3B1dF90aWQgPSBpcGF0aF9wZV9wdXRfdGlkOworCWRkLT5pcGF0aF9mX2NsZWFudXAgPSBpcGF0aF9zZXR1cF9wZV9jbGVhbnVwOworCWRkLT5pcGF0aF9mX3NldGV4dGxlZCA9IGlwYXRoX3NldHVwX3BlX3NldGV4dGxlZDsKKwlkZC0+aXBhdGhfZl9nZXRfYmFzZV9pbmZvID0gaXBhdGhfcGVfZ2V0X2Jhc2VfaW5mbzsKKworCS8qIGluaXRpYWxpemUgY2hpcC1zcGVjaWZpYyB2YXJpYWJsZXMgKi8KKwlkZC0+aXBhdGhfZl90aWR0ZW1wbGF0ZSA9IGlwYXRoX3BlX3RpZHRlbXBsYXRlOworCisJLyoKKwkgKiBzZXR1cCB0aGUgcmVnaXN0ZXIgb2Zmc2V0cywgc2luY2UgdGhleSBhcmUgZGlmZmVyZW50IGZvciBlYWNoCisJICogY2hpcAorCSAqLworCWRkLT5pcGF0aF9rcmVncyA9ICZpcGF0aF9wZV9rcmVnczsKKwlkZC0+aXBhdGhfY3JlZ3MgPSAmaXBhdGhfcGVfY3JlZ3M7CisKKwlpcGF0aF9pbml0X3BlX3ZhcmlhYmxlcygpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmODg1NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKQEAgLTAsMCArMSw5MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKyNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisKKyNkZWZpbmUgQklUU19QRVJfUEFHRQkJKFBBR0VfU0laRSpCSVRTX1BFUl9CWVRFKQorI2RlZmluZSBCSVRTX1BFUl9QQUdFX01BU0sJKEJJVFNfUEVSX1BBR0UtMSkKKyNkZWZpbmUgbWtfcXBuKHFwdCwgbWFwLCBvZmYpCSgoKG1hcCkgLSAocXB0KS0+bWFwKSAqIEJJVFNfUEVSX1BBR0UgKyBcCisJCQkJIChvZmYpKQorI2RlZmluZSBmaW5kX25leHRfb2Zmc2V0KG1hcCwgb2ZmKSBmaW5kX25leHRfemVyb19iaXQoKG1hcCktPnBhZ2UsIFwKKwkJCQkJCSAgICAgIEJJVFNfUEVSX1BBR0UsIG9mZikKKworI2RlZmluZSBUUkFOU19JTlZBTElECTAKKyNkZWZpbmUgVFJBTlNfQU5ZMlJTVAkxCisjZGVmaW5lIFRSQU5TX1JTVDJJTklUCTIKKyNkZWZpbmUgVFJBTlNfSU5JVDJJTklUCTMKKyNkZWZpbmUgVFJBTlNfSU5JVDJSVFIJNAorI2RlZmluZSBUUkFOU19SVFIyUlRTCTUKKyNkZWZpbmUgVFJBTlNfUlRTMlJUUwk2CisjZGVmaW5lIFRSQU5TX1NRRVJSMlJUUwk3CisjZGVmaW5lIFRSQU5TX0FOWTJFUlIJOAorI2RlZmluZSBUUkFOU19SVFMyU1FECTkgIC8qIFhYWCBXYWl0IGZvciBleHBlY3RlZCBBQ0tzICYgc2lnbmFsIGV2ZW50ICovCisjZGVmaW5lIFRSQU5TX1NRRDJTUUQJMTAgLyogZXJyb3IgaWYgbm90IGRyYWluZWQgJiBwYXJhbWV0ZXIgY2hhbmdlICovCisjZGVmaW5lIFRSQU5TX1NRRDJSVFMJMTEgLyogZXJyb3IgaWYgbm90IGRyYWluZWQgKi8KKworLyoKKyAqIENvbnZlcnQgdGhlIEFFVEggY3JlZGl0IGNvZGUgaW50byB0aGUgbnVtYmVyIG9mIGNyZWRpdHMuCisgKi8KK3N0YXRpYyB1MzIgY3JlZGl0X3RhYmxlWzMxXSA9IHsKKwkwLAkJCS8qIDAgKi8KKwkxLAkJCS8qIDEgKi8KKwkyLAkJCS8qIDIgKi8KKwkzLAkJCS8qIDMgKi8KKwk0LAkJCS8qIDQgKi8KKwk2LAkJCS8qIDUgKi8KKwk4LAkJCS8qIDYgKi8KKwkxMiwJCQkvKiA3ICovCisJMTYsCQkJLyogOCAqLworCTI0LAkJCS8qIDkgKi8KKwkzMiwJCQkvKiBBICovCisJNDgsCQkJLyogQiAqLworCTY0LAkJCS8qIEMgKi8KKwk5NiwJCQkvKiBEICovCisJMTI4LAkJCS8qIEUgKi8KKwkxOTIsCQkJLyogRiAqLworCTI1NiwJCQkvKiAxMCAqLworCTM4NCwJCQkvKiAxMSAqLworCTUxMiwJCQkvKiAxMiAqLworCTc2OCwJCQkvKiAxMyAqLworCTEwMjQsCQkJLyogMTQgKi8KKwkxNTM2LAkJCS8qIDE1ICovCisJMjA0OCwJCQkvKiAxNiAqLworCTMwNzIsCQkJLyogMTcgKi8KKwk0MDk2LAkJCS8qIDE4ICovCisJNjE0NCwJCQkvKiAxOSAqLworCTgxOTIsCQkJLyogMUEgKi8KKwkxMjI4OCwJCQkvKiAxQiAqLworCTE2Mzg0LAkJCS8qIDFDICovCisJMjQ1NzYsCQkJLyogMUQgKi8KKwkzMjc2OAkJCS8qIDFFICovCit9OworCitzdGF0aWMgdTMyIGFsbG9jX3FwbihzdHJ1Y3QgaXBhdGhfcXBfdGFibGUgKnFwdCkKK3sKKwl1MzIgaSwgb2Zmc2V0LCBtYXhfc2NhbiwgcXBuOworCXN0cnVjdCBxcG5fbWFwICptYXA7CisJdTMyIHJldDsKKworCXFwbiA9IHFwdC0+bGFzdCArIDE7CisJaWYgKHFwbiA+PSBRUE5fTUFYKQorCQlxcG4gPSAyOworCW9mZnNldCA9IHFwbiAmIEJJVFNfUEVSX1BBR0VfTUFTSzsKKwltYXAgPSAmcXB0LT5tYXBbcXBuIC8gQklUU19QRVJfUEFHRV07CisJbWF4X3NjYW4gPSBxcHQtPm5tYXBzIC0gIW9mZnNldDsKKwlmb3IgKGkgPSAwOzspIHsKKwkJaWYgKHVubGlrZWx5KCFtYXAtPnBhZ2UpKSB7CisJCQl1bnNpZ25lZCBsb25nIHBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkvKgorCQkJICogRnJlZSB0aGUgcGFnZSBpZiBzb21lb25lIHJhY2VkIHdpdGggdXMKKwkJCSAqIGluc3RhbGxpbmcgaXQ6CisJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZxcHQtPmxvY2ssIGZsYWdzKTsKKwkJCWlmIChtYXAtPnBhZ2UpCisJCQkJZnJlZV9wYWdlKHBhZ2UpOworCQkJZWxzZQorCQkJCW1hcC0+cGFnZSA9ICh2b2lkICopcGFnZTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKHVubGlrZWx5KCFtYXAtPnBhZ2UpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChsaWtlbHkoYXRvbWljX3JlYWQoJm1hcC0+bl9mcmVlKSkpIHsKKwkJCWRvIHsKKwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQob2Zmc2V0LCBtYXAtPnBhZ2UpKSB7CisJCQkJCWF0b21pY19kZWMoJm1hcC0+bl9mcmVlKTsKKwkJCQkJcXB0LT5sYXN0ID0gcXBuOworCQkJCQlyZXQgPSBxcG47CisJCQkJCWdvdG8gYmFpbDsKKwkJCQl9CisJCQkJb2Zmc2V0ID0gZmluZF9uZXh0X29mZnNldChtYXAsIG9mZnNldCk7CisJCQkJcXBuID0gbWtfcXBuKHFwdCwgbWFwLCBvZmZzZXQpOworCQkJCS8qCisJCQkJICogVGhpcyB0ZXN0IGRpZmZlcnMgZnJvbSBhbGxvY19waWRtYXAoKS4KKwkJCQkgKiBJZiBmaW5kX25leHRfb2Zmc2V0KCkgZG9lcyBmaW5kIGEgemVybworCQkJCSAqIGJpdCwgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgUVBOCisJCQkJICogd3JhcHBpbmcgYXJvdW5kIHBhc3Qgb3VyIHN0YXJ0aW5nIFFQTi4KKwkJCQkgKiBXZSBqdXN0IG5lZWQgdG8gYmUgc3VyZSB3ZSBkb24ndCBsb29wCisJCQkJICogZm9yZXZlci4KKwkJCQkgKi8KKwkJCX0gd2hpbGUgKG9mZnNldCA8IEJJVFNfUEVSX1BBR0UgJiYgcXBuIDwgUVBOX01BWCk7CisJCX0KKwkJLyoKKwkJICogSW4gb3JkZXIgdG8ga2VlcCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGFsbG9jYXRlZCB0byBhCisJCSAqIG1pbmltdW0sIHdlIHNjYW4gdGhlIGFsbCBleGlzdGluZyBwYWdlcyBiZWZvcmUgaW5jcmVhc2luZworCQkgKiB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwIHRhYmxlLgorCQkgKi8KKwkJaWYgKCsraSA+IG1heF9zY2FuKSB7CisJCQlpZiAocXB0LT5ubWFwcyA9PSBRUE5NQVBfRU5UUklFUykKKwkJCQlicmVhazsKKwkJCW1hcCA9ICZxcHQtPm1hcFtxcHQtPm5tYXBzKytdOworCQkJb2Zmc2V0ID0gMDsKKwkJfSBlbHNlIGlmIChtYXAgPCAmcXB0LT5tYXBbcXB0LT5ubWFwc10pIHsKKwkJCSsrbWFwOworCQkJb2Zmc2V0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCW1hcCA9ICZxcHQtPm1hcFswXTsKKwkJCW9mZnNldCA9IDI7CisJCX0KKwkJcXBuID0gbWtfcXBuKHFwdCwgbWFwLCBvZmZzZXQpOworCX0KKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9xcG4oc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQsIHUzMiBxcG4pCit7CisJc3RydWN0IHFwbl9tYXAgKm1hcDsKKworCW1hcCA9IHFwdC0+bWFwICsgcXBuIC8gQklUU19QRVJfUEFHRTsKKwlpZiAobWFwLT5wYWdlKQorCQljbGVhcl9iaXQocXBuICYgQklUU19QRVJfUEFHRV9NQVNLLCBtYXAtPnBhZ2UpOworCWF0b21pY19pbmMoJm1hcC0+bl9mcmVlKTsKK30KKworLyoqCisgKiBpcGF0aF9hbGxvY19xcG4gLSBhbGxvY2F0ZSBhIFFQIG51bWJlcgorICogQHFwdDogdGhlIFFQIHRhYmxlCisgKiBAcXA6IHRoZSBRUAorICogQHR5cGU6IHRoZSBRUCB0eXBlIChJQl9RUFRfU01JIGFuZCBJQl9RUFRfR1NJIGFyZSBzcGVjaWFsKQorICoKKyAqIEFsbG9jYXRlIHRoZSBuZXh0IGF2YWlsYWJsZSBRUE4gYW5kIHB1dCB0aGUgUVAgaW50byB0aGUgaGFzaCB0YWJsZS4KKyAqIFRoZSBoYXNoIHRhYmxlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBRUC4KKyAqLworc3RhdGljIGludCBpcGF0aF9hbGxvY19xcG4oc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQsIHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCQkgICBlbnVtIGliX3FwX3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBxcG47CisJaW50IHJldDsKKworCWlmICh0eXBlID09IElCX1FQVF9TTUkpCisJCXFwbiA9IDA7CisJZWxzZSBpZiAodHlwZSA9PSBJQl9RUFRfR1NJKQorCQlxcG4gPSAxOworCWVsc2UgeworCQkvKiBBbGxvY2F0ZSB0aGUgbmV4dCBhdmFpbGFibGUgUVBOICovCisJCXFwbiA9IGFsbG9jX3FwbihxcHQpOworCQlpZiAocXBuID09IDApIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJcXAtPmlicXAucXBfbnVtID0gcXBuOworCisJLyogQWRkIHRoZSBRUCB0byB0aGUgaGFzaCB0YWJsZS4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXB0LT5sb2NrLCBmbGFncyk7CisKKwlxcG4gJT0gcXB0LT5tYXg7CisJcXAtPm5leHQgPSBxcHQtPnRhYmxlW3Fwbl07CisJcXB0LT50YWJsZVtxcG5dID0gcXA7CisJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9mcmVlX3FwIC0gcmVtb3ZlIGEgUVAgZnJvbSB0aGUgUVAgdGFibGUKKyAqIEBxcHQ6IHRoZSBRUCB0YWJsZQorICogQHFwOiB0aGUgUVAgdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlIHRoZSBRUCBmcm9tIHRoZSB0YWJsZSBzbyBpdCBjYW4ndCBiZSBmb3VuZCBhc3luY2hyb25vdXNseSBieQorICogdGhlIHJlY2VpdmUgaW50ZXJydXB0IHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2ZyZWVfcXAoc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQsIHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJc3RydWN0IGlwYXRoX3FwICpxLCAqKnFwcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBmbmQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCisJLyogUmVtb3ZlIFFQIGZyb20gdGhlIGhhc2ggdGFibGUuICovCisJcXBwID0gJnFwdC0+dGFibGVbcXAtPmlicXAucXBfbnVtICUgcXB0LT5tYXhdOworCWZvciAoOyAocSA9ICpxcHApICE9IE5VTEw7IHFwcCA9ICZxLT5uZXh0KSB7CisJCWlmIChxID09IHFwKSB7CisJCQkqcXBwID0gcXAtPm5leHQ7CisJCQlxcC0+bmV4dCA9IE5VTEw7CisJCQlhdG9taWNfZGVjKCZxcC0+cmVmY291bnQpOworCQkJZm5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXB0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWZuZCkKKwkJcmV0dXJuOworCisJLyogSWYgUVBOIGlzIG5vdCByZXNlcnZlZCwgbWFyayBRUE4gZnJlZSBpbiB0aGUgYml0bWFwLiAqLworCWlmIChxcC0+aWJxcC5xcF9udW0gPiAxKQorCQlmcmVlX3FwbihxcHQsIHFwLT5pYnFwLnFwX251bSk7CisKKwl3YWl0X2V2ZW50KHFwLT53YWl0LCAhYXRvbWljX3JlYWQoJnFwLT5yZWZjb3VudCkpOworfQorCisvKioKKyAqIGlwYXRoX2ZyZWVfYWxsX3FwcyAtIHJlbW92ZSBhbGwgUVBzIGZyb20gdGhlIHRhYmxlCisgKiBAcXB0OiB0aGUgUVAgdGFibGUgdG8gZW1wdHkKKyAqLwordm9pZCBpcGF0aF9mcmVlX2FsbF9xcHMoc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwLCAqbnFwOworCXUzMiBuOworCisJZm9yIChuID0gMDsgbiA8IHFwdC0+bWF4OyBuKyspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCQlxcCA9IHFwdC0+dGFibGVbbl07CisJCXFwdC0+dGFibGVbbl0gPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcHQtPmxvY2ssIGZsYWdzKTsKKworCQl3aGlsZSAocXApIHsKKwkJCW5xcCA9IHFwLT5uZXh0OworCQkJaWYgKHFwLT5pYnFwLnFwX251bSA+IDEpCisJCQkJZnJlZV9xcG4ocXB0LCBxcC0+aWJxcC5xcF9udW0pOworCQkJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpIHx8CisJCQkgICAgIWlwYXRoX2Rlc3Ryb3lfcXAoJnFwLT5pYnFwKSkKKwkJCQlfVkVSQlNfSU5GTygiUVAgbWVtb3J5IGxlYWshXG4iKTsKKwkJCXFwID0gbnFwOworCQl9CisJfQorCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUocXB0LT5tYXApOyBuKyspIHsKKwkJaWYgKHFwdC0+bWFwW25dLnBhZ2UpCisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcXB0LT5tYXBbbl0ucGFnZSk7CisJfQorfQorCisvKioKKyAqIGlwYXRoX2xvb2t1cF9xcG4gLSByZXR1cm4gdGhlIFFQIHdpdGggdGhlIGdpdmVuIFFQTgorICogQHFwdDogdGhlIFFQIHRhYmxlCisgKiBAcXBuOiB0aGUgUVAgbnVtYmVyIHRvIGxvb2sgdXAKKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZWNyZW1lbnRpbmcgdGhlIFFQIHJlZmVyZW5jZSBjb3VudAorICogd2hlbiBkb25lLgorICovCitzdHJ1Y3QgaXBhdGhfcXAgKmlwYXRoX2xvb2t1cF9xcG4oc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQsIHUzMiBxcG4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwdC0+bG9jaywgZmxhZ3MpOworCisJZm9yIChxcCA9IHFwdC0+dGFibGVbcXBuICUgcXB0LT5tYXhdOyBxcDsgcXAgPSBxcC0+bmV4dCkgeworCQlpZiAocXAtPmlicXAucXBfbnVtID09IHFwbikgeworCQkJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXB0LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHFwOworfQorCisvKioKKyAqIGlwYXRoX3Jlc2V0X3FwIC0gaW5pdGlhbGl6ZSB0aGUgUVAgc3RhdGUgdG8gdGhlIHJlc2V0IHN0YXRlCisgKiBAcXA6IHRoZSBRUCB0byByZXNldAorICovCitzdGF0aWMgdm9pZCBpcGF0aF9yZXNldF9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwKQoreworCXFwLT5yZW1vdGVfcXBuID0gMDsKKwlxcC0+cWtleSA9IDA7CisJcXAtPnFwX2FjY2Vzc19mbGFncyA9IDA7CisJcXAtPnNfaGRyd29yZHMgPSAwOworCXFwLT5zX3BzbiA9IDA7CisJcXAtPnJfcHNuID0gMDsKKwlhdG9taWNfc2V0KCZxcC0+bXNuLCAwKTsKKwlpZiAocXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfUkMpIHsKKwkJcXAtPnNfc3RhdGUgPSBJQl9PUENPREVfUkNfU0VORF9MQVNUOworCQlxcC0+cl9zdGF0ZSA9IElCX09QQ09ERV9SQ19TRU5EX0xBU1Q7CisJfSBlbHNlIHsKKwkJcXAtPnNfc3RhdGUgPSBJQl9PUENPREVfVUNfU0VORF9MQVNUOworCQlxcC0+cl9zdGF0ZSA9IElCX09QQ09ERV9VQ19TRU5EX0xBU1Q7CisJfQorCXFwLT5zX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKKwlxcC0+c19uYWtfc3RhdGUgPSAwOworCXFwLT5zX3Jucl90aW1lb3V0ID0gMDsKKwlxcC0+c19oZWFkID0gMDsKKwlxcC0+c190YWlsID0gMDsKKwlxcC0+c19jdXIgPSAwOworCXFwLT5zX2xhc3QgPSAwOworCXFwLT5zX3NzbiA9IDE7CisJcXAtPnNfbHNuID0gMDsKKwlxcC0+cl9ycS5oZWFkID0gMDsKKwlxcC0+cl9ycS50YWlsID0gMDsKKwlxcC0+cl9yZXVzZV9zZ2UgPSAwOworfQorCisvKioKKyAqIGlwYXRoX2Vycm9yX3FwIC0gcHV0IGEgUVAgaW50byBhbiBlcnJvciBzdGF0ZQorICogQHFwOiB0aGUgUVAgdG8gcHV0IGludG8gYW4gZXJyb3Igc3RhdGUKKyAqCisgKiBGbHVzaGVzIGJvdGggc2VuZCBhbmQgcmVjZWl2ZSB3b3JrIHF1ZXVlcy4KKyAqIFFQIHJfcnEubG9jayBhbmQgc19sb2NrIHNob3VsZCBiZSBoZWxkLgorICovCisKK3N0YXRpYyB2b2lkIGlwYXRoX2Vycm9yX3FwKHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3RydWN0IGliX3djIHdjOworCisJX1ZFUkJTX0lORk8oIlFQJWQvJWQgaW4gZXJyb3Igc3RhdGVcbiIsCisJCSAgICBxcC0+aWJxcC5xcF9udW0sIHFwLT5yZW1vdGVfcXBuKTsKKworCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCS8qIFhYWCBXaGF0IGlmIGl0cyBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHRpbWVvdXQgY29kZT8gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT50aW1lcndhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+dGltZXJ3YWl0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT5waW93YWl0KSkKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnBpb3dhaXQpOworCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisKKwl3Yy5zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CisJd2MudmVuZG9yX2VyciA9IDA7CisJd2MuYnl0ZV9sZW4gPSAwOworCXdjLmltbV9kYXRhID0gMDsKKwl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJd2Muc3JjX3FwID0gMDsKKwl3Yy53Y19mbGFncyA9IDA7CisJd2MucGtleV9pbmRleCA9IDA7CisJd2Muc2xpZCA9IDA7CisJd2Muc2wgPSAwOworCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKKwl3Yy5wb3J0X251bSA9IDA7CisKKwl3aGlsZSAocXAtPnNfbGFzdCAhPSBxcC0+c19oZWFkKSB7CisJCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworCisJCXdjLndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJd2Mub3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJaWYgKCsrcXAtPnNfbGFzdCA+PSBxcC0+c19zaXplKQorCQkJcXAtPnNfbGFzdCA9IDA7CisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5zZW5kX2NxKSwgJndjLCAxKTsKKwl9CisJcXAtPnNfY3VyID0gcXAtPnNfdGFpbCA9IHFwLT5zX2hlYWQ7CisJcXAtPnNfaGRyd29yZHMgPSAwOworCXFwLT5zX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKKworCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJd2hpbGUgKHFwLT5yX3JxLnRhaWwgIT0gcXAtPnJfcnEuaGVhZCkgeworCQl3Yy53cl9pZCA9IGdldF9yd3FlX3B0cigmcXAtPnJfcnEsIHFwLT5yX3JxLnRhaWwpLT53cl9pZDsKKwkJaWYgKCsrcXAtPnJfcnEudGFpbCA+PSBxcC0+cl9ycS5zaXplKQorCQkJcXAtPnJfcnEudGFpbCA9IDA7CisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLCAxKTsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfbW9kaWZ5X3FwIC0gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgcXVldWUgcGFpcgorICogQGlicXA6IHRoZSBxdWV1ZSBwYWlyIHdobydzIGF0dHJpYnV0ZXMgd2UncmUgbW9kaWZ5aW5nCisgKiBAYXR0cjogdGhlIG5ldyBhdHRyaWJ1dGVzCisgKiBAYXR0cl9tYXNrOiB0aGUgbWFzayBvZiBhdHRyaWJ1dGVzIHRvIG1vZGlmeQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJuby4KKyAqLworaW50IGlwYXRoX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAorCQkgICAgaW50IGF0dHJfbWFzaykKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJxcC0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCWVudW0gaWJfcXBfc3RhdGUgY3VyX3N0YXRlLCBuZXdfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCisJY3VyX3N0YXRlID0gYXR0cl9tYXNrICYgSUJfUVBfQ1VSX1NUQVRFID8KKwkJYXR0ci0+Y3VyX3FwX3N0YXRlIDogcXAtPnN0YXRlOworCW5ld19zdGF0ZSA9IGF0dHJfbWFzayAmIElCX1FQX1NUQVRFID8gYXR0ci0+cXBfc3RhdGUgOiBjdXJfc3RhdGU7CisKKwlpZiAoIWliX21vZGlmeV9xcF9pc19vayhjdXJfc3RhdGUsIG5ld19zdGF0ZSwgaWJxcC0+cXBfdHlwZSwKKwkJCQlhdHRyX21hc2spKQorCQlnb3RvIGludmFsOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FWKQorCQlpZiAoYXR0ci0+YWhfYXR0ci5kbGlkID09IDAgfHwKKwkJICAgIGF0dHItPmFoX2F0dHIuZGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFKQorCQkJZ290byBpbnZhbDsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QS0VZX0lOREVYKQorCQlpZiAoYXR0ci0+cGtleV9pbmRleCA+PSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpKQorCQkJZ290byBpbnZhbDsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NSU5fUk5SX1RJTUVSKQorCQlpZiAoYXR0ci0+bWluX3Jucl90aW1lciA+IDMxKQorCQkJZ290byBpbnZhbDsKKworCXN3aXRjaCAobmV3X3N0YXRlKSB7CisJY2FzZSBJQl9RUFNfUkVTRVQ6CisJCWlwYXRoX3Jlc2V0X3FwKHFwKTsKKwkJYnJlYWs7CisKKwljYXNlIElCX1FQU19FUlI6CisJCWlwYXRoX2Vycm9yX3FwKHFwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QS0VZX0lOREVYKQorCQlxcC0+c19wa2V5X2luZGV4ID0gYXR0ci0+cGtleV9pbmRleDsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9ERVNUX1FQTikKKwkJcXAtPnJlbW90ZV9xcG4gPSBhdHRyLT5kZXN0X3FwX251bTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9TUV9QU04pIHsKKwkJcXAtPnNfbmV4dF9wc24gPSBhdHRyLT5zcV9wc247CisJCXFwLT5zX2xhc3RfcHNuID0gcXAtPnNfbmV4dF9wc24gLSAxOworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9SUV9QU04pCisJCXFwLT5yX3BzbiA9IGF0dHItPnJxX3BzbjsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BQ0NFU1NfRkxBR1MpCisJCXFwLT5xcF9hY2Nlc3NfZmxhZ3MgPSBhdHRyLT5xcF9hY2Nlc3NfZmxhZ3M7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQVYpCisJCXFwLT5yZW1vdGVfYWhfYXR0ciA9IGF0dHItPmFoX2F0dHI7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NVFUpCisJCXFwLT5wYXRoX210dSA9IGF0dHItPnBhdGhfbXR1OworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1JFVFJZX0NOVCkKKwkJcXAtPnNfcmV0cnkgPSBxcC0+c19yZXRyeV9jbnQgPSBhdHRyLT5yZXRyeV9jbnQ7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUk5SX1JFVFJZKSB7CisJCXFwLT5zX3Jucl9yZXRyeSA9IGF0dHItPnJucl9yZXRyeTsKKwkJaWYgKHFwLT5zX3Jucl9yZXRyeSA+IDcpCisJCQlxcC0+c19ybnJfcmV0cnkgPSA3OworCQlxcC0+c19ybnJfcmV0cnlfY250ID0gcXAtPnNfcm5yX3JldHJ5OworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NSU5fUk5SX1RJTUVSKQorCQlxcC0+c19taW5fcm5yX3RpbWVyID0gYXR0ci0+bWluX3Jucl90aW1lcjsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9RS0VZKQorCQlxcC0+cWtleSA9IGF0dHItPnFrZXk7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEtFWV9JTkRFWCkKKwkJcXAtPnNfcGtleV9pbmRleCA9IGF0dHItPnBrZXlfaW5kZXg7CisKKwlxcC0+c3RhdGUgPSBuZXdfc3RhdGU7CisJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogSWYgUVAxIGNoYW5nZWQgdG8gdGhlIFJUUyBzdGF0ZSwgdHJ5IHRvIG1vdmUgdG8gdGhlIGxpbmsgdG8gSU5JVAorCSAqIGV2ZW4gaWYgaXQgd2FzIEFDVElWRSBzbyB0aGUgU00gd2lsbCByZWluaXRpYWxpemUgdGhlIFNNQSdzCisJICogc3RhdGUuCisJICovCisJaWYgKHFwLT5pYnFwLnFwX251bSA9PSAxICYmIG5ld19zdGF0ZSA9PSBJQl9RUFNfUlRTKSB7CisJCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnFwLT5kZXZpY2UpOworCisJCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGV2LT5kZCwgSVBBVEhfSUJfTElOS0RPV04pOworCX0KKwlyZXQgPSAwOworCWdvdG8gYmFpbDsKKworaW52YWw6CisJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwlyZXQgPSAtRUlOVkFMOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9xdWVyeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAorCQkgICBpbnQgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIpCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IHRvX2lxcChpYnFwKTsKKworCWF0dHItPnFwX3N0YXRlID0gcXAtPnN0YXRlOworCWF0dHItPmN1cl9xcF9zdGF0ZSA9IGF0dHItPnFwX3N0YXRlOworCWF0dHItPnBhdGhfbXR1ID0gcXAtPnBhdGhfbXR1OworCWF0dHItPnBhdGhfbWlnX3N0YXRlID0gMDsKKwlhdHRyLT5xa2V5ID0gcXAtPnFrZXk7CisJYXR0ci0+cnFfcHNuID0gcXAtPnJfcHNuOworCWF0dHItPnNxX3BzbiA9IHFwLT5zX25leHRfcHNuOworCWF0dHItPmRlc3RfcXBfbnVtID0gcXAtPnJlbW90ZV9xcG47CisJYXR0ci0+cXBfYWNjZXNzX2ZsYWdzID0gcXAtPnFwX2FjY2Vzc19mbGFnczsKKwlhdHRyLT5jYXAubWF4X3NlbmRfd3IgPSBxcC0+c19zaXplIC0gMTsKKwlhdHRyLT5jYXAubWF4X3JlY3Zfd3IgPSBxcC0+cl9ycS5zaXplIC0gMTsKKwlhdHRyLT5jYXAubWF4X3NlbmRfc2dlID0gcXAtPnNfbWF4X3NnZTsKKwlhdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0gcXAtPnJfcnEubWF4X3NnZTsKKwlhdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKKwlhdHRyLT5haF9hdHRyID0gcXAtPnJlbW90ZV9haF9hdHRyOworCW1lbXNldCgmYXR0ci0+YWx0X2FoX2F0dHIsIDAsIHNpemVvZihhdHRyLT5hbHRfYWhfYXR0cikpOworCWF0dHItPnBrZXlfaW5kZXggPSBxcC0+c19wa2V5X2luZGV4OworCWF0dHItPmFsdF9wa2V5X2luZGV4ID0gMDsKKwlhdHRyLT5lbl9zcWRfYXN5bmNfbm90aWZ5ID0gMDsKKwlhdHRyLT5zcV9kcmFpbmluZyA9IDA7CisJYXR0ci0+bWF4X3JkX2F0b21pYyA9IDE7CisJYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljID0gMTsKKwlhdHRyLT5taW5fcm5yX3RpbWVyID0gcXAtPnNfbWluX3Jucl90aW1lcjsKKwlhdHRyLT5wb3J0X251bSA9IDE7CisJYXR0ci0+dGltZW91dCA9IDA7CisJYXR0ci0+cmV0cnlfY250ID0gcXAtPnNfcmV0cnlfY250OworCWF0dHItPnJucl9yZXRyeSA9IHFwLT5zX3Jucl9yZXRyeTsKKwlhdHRyLT5hbHRfcG9ydF9udW0gPSAwOworCWF0dHItPmFsdF90aW1lb3V0ID0gMDsKKworCWluaXRfYXR0ci0+ZXZlbnRfaGFuZGxlciA9IHFwLT5pYnFwLmV2ZW50X2hhbmRsZXI7CisJaW5pdF9hdHRyLT5xcF9jb250ZXh0ID0gcXAtPmlicXAucXBfY29udGV4dDsKKwlpbml0X2F0dHItPnNlbmRfY3EgPSBxcC0+aWJxcC5zZW5kX2NxOworCWluaXRfYXR0ci0+cmVjdl9jcSA9IHFwLT5pYnFwLnJlY3ZfY3E7CisJaW5pdF9hdHRyLT5zcnEgPSBxcC0+aWJxcC5zcnE7CisJaW5pdF9hdHRyLT5jYXAgPSBhdHRyLT5jYXA7CisJaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSA9CisJCShxcC0+c19mbGFncyAmICgxIDw8IElQQVRIX1NfU0lHTkFMX1JFUV9XUikpCisJCT8gSUJfU0lHTkFMX1JFUV9XUiA6IDA7CisJaW5pdF9hdHRyLT5xcF90eXBlID0gcXAtPmlicXAucXBfdHlwZTsKKwlpbml0X2F0dHItPnBvcnRfbnVtID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9jb21wdXRlX2FldGggLSBjb21wdXRlIHRoZSBBRVRIIChzeW5kcm9tZSArIE1TTikKKyAqIEBxcDogdGhlIHF1ZXVlIHBhaXIgdG8gY29tcHV0ZSB0aGUgQUVUSCBmb3IKKyAqCisgKiBSZXR1cm5zIHRoZSBBRVRILgorICoKKyAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKi8KK19fYmUzMiBpcGF0aF9jb21wdXRlX2FldGgoc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwl1MzIgYWV0aCA9IGF0b21pY19yZWFkKCZxcC0+bXNuKSAmIElQU19NU05fTUFTSzsKKworCWlmIChxcC0+c19uYWtfc3RhdGUpIHsKKwkJYWV0aCB8PSBxcC0+c19uYWtfc3RhdGUgPDwgSVBTX0FFVEhfQ1JFRElUX1NISUZUOworCX0gZWxzZSBpZiAocXAtPmlicXAuc3JxKSB7CisJCS8qCisJCSAqIFNoYXJlZCByZWNlaXZlIHF1ZXVlcyBkb24ndCBnZW5lcmF0ZSBjcmVkaXRzLgorCQkgKiBTZXQgdGhlIGNyZWRpdCBmaWVsZCB0byB0aGUgaW52YWxpZCB2YWx1ZS4KKwkJICovCisJCWFldGggfD0gSVBTX0FFVEhfQ1JFRElUX0lOVkFMIDw8IElQU19BRVRIX0NSRURJVF9TSElGVDsKKwl9IGVsc2UgeworCQl1MzIgbWluLCBtYXgsIHg7CisJCXUzMiBjcmVkaXRzOworCisJCS8qCisJCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBjcmVkaXRzIGF2YWlsYWJsZSAoUldRRXMpLgorCQkgKiBYWFggTm90IGhvbGRpbmcgdGhlIHJfcnEubG9jayBoZXJlIHNvIHRoZXJlIGlzIGEgc21hbGwKKwkJICogY2hhbmNlIHRoYXQgdGhlIHBhaXIgb2YgcmVhZHMgYXJlIG5vdCBhdG9taWMuCisJCSAqLworCQljcmVkaXRzID0gcXAtPnJfcnEuaGVhZCAtIHFwLT5yX3JxLnRhaWw7CisJCWlmICgoaW50KWNyZWRpdHMgPCAwKQorCQkJY3JlZGl0cyArPSBxcC0+cl9ycS5zaXplOworCQkvKgorCQkgKiBCaW5hcnkgc2VhcmNoIHRoZSBjcmVkaXQgdGFibGUgdG8gZmluZCB0aGUgY29kZSB0bworCQkgKiB1c2UuCisJCSAqLworCQltaW4gPSAwOworCQltYXggPSAzMTsKKwkJZm9yICg7OykgeworCQkJeCA9IChtaW4gKyBtYXgpIC8gMjsKKwkJCWlmIChjcmVkaXRfdGFibGVbeF0gPT0gY3JlZGl0cykKKwkJCQlicmVhazsKKwkJCWlmIChjcmVkaXRfdGFibGVbeF0gPiBjcmVkaXRzKQorCQkJCW1heCA9IHg7CisJCQllbHNlIGlmIChtaW4gPT0geCkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQltaW4gPSB4OworCQl9CisJCWFldGggfD0geCA8PCBJUFNfQUVUSF9DUkVESVRfU0hJRlQ7CisJfQorCXJldHVybiBjcHVfdG9fYmUzMihhZXRoKTsKK30KKworLyoqCisgKiBpcGF0aF9jcmVhdGVfcXAgLSBjcmVhdGUgYSBxdWV1ZSBwYWlyIGZvciBhIGRldmljZQorICogQGlicGQ6IHRoZSBwcm90ZWN0aW9uIGRvbWFpbiB3aG8ncyBkZXZpY2Ugd2UgY3JlYXRlIHRoZSBxdWV1ZSBwYWlyIGZvcgorICogQGluaXRfYXR0cjogdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHF1ZXVlIHBhaXIKKyAqIEB1ZGF0YTogdW51c2VkIGJ5IEluZmluaVBhdGgKKyAqCisgKiBSZXR1cm5zIHRoZSBxdWV1ZSBwYWlyIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm5vLgorICoKKyAqIENhbGxlZCBieSB0aGUgaWJfY3JlYXRlX3FwKCkgY29yZSB2ZXJicyBmdW5jdGlvbi4KKyAqLworc3RydWN0IGliX3FwICppcGF0aF9jcmVhdGVfcXAoc3RydWN0IGliX3BkICppYnBkLAorCQkJICAgICAgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyLAorCQkJICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwOworCWludCBlcnI7CisJc3RydWN0IGlwYXRoX3N3cWUgKnN3cSA9IE5VTEw7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXY7CisJc2l6ZV90IHN6OworCXN0cnVjdCBpYl9xcCAqcmV0OworCisJaWYgKGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSA+IDI1NSB8fAorCSAgICBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2UgPiAyNTUpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCXN3aXRjaCAoaW5pdF9hdHRyLT5xcF90eXBlKSB7CisJY2FzZSBJQl9RUFRfVUM6CisJY2FzZSBJQl9RUFRfUkM6CisJCXN6ID0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpICoKKwkJCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSArCisJCQlzaXplb2Yoc3RydWN0IGlwYXRoX3N3cWUpOworCQlzd3EgPSB2bWFsbG9jKChpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciArIDEpICogc3opOworCQlpZiAoc3dxID09IE5VTEwpIHsKKwkJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIElCX1FQVF9VRDoKKwljYXNlIElCX1FQVF9TTUk6CisJY2FzZSBJQl9RUFRfR1NJOgorCQlxcCA9IGttYWxsb2Moc2l6ZW9mKCpxcCksIEdGUF9LRVJORUwpOworCQlpZiAoIXFwKSB7CisJCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQkJZ290byBiYWlsOworCQl9CisJCXFwLT5yX3JxLnNpemUgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciArIDE7CisJCXN6ID0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpICoKKwkJCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSArCisJCQlzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpOworCQlxcC0+cl9ycS53cSA9IHZtYWxsb2MocXAtPnJfcnEuc2l6ZSAqIHN6KTsKKwkJaWYgKCFxcC0+cl9ycS53cSkgeworCQkJa2ZyZWUocXApOworCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCS8qCisJCSAqIGliX2NyZWF0ZV9xcCgpIHdpbGwgaW5pdGlhbGl6ZSBxcC0+aWJxcAorCQkgKiBleGNlcHQgZm9yIHFwLT5pYnFwLnFwX251bS4KKwkJICovCisJCXNwaW5fbG9ja19pbml0KCZxcC0+c19sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnFwLT5yX3JxLmxvY2spOworCQlhdG9taWNfc2V0KCZxcC0+cmVmY291bnQsIDApOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxcC0+d2FpdCk7CisJCXRhc2tsZXRfaW5pdCgmcXAtPnNfdGFzaywKKwkJCSAgICAgaW5pdF9hdHRyLT5xcF90eXBlID09IElCX1FQVF9SQyA/CisJCQkgICAgIGlwYXRoX2RvX3JjX3NlbmQgOiBpcGF0aF9kb191Y19zZW5kLAorCQkJICAgICAodW5zaWduZWQgbG9uZylxcCk7CisJCUlOSVRfTElTVF9IRUFEKCZxcC0+cGlvd2FpdCk7CisJCUlOSVRfTElTVF9IRUFEKCZxcC0+dGltZXJ3YWl0KTsKKwkJcXAtPnN0YXRlID0gSUJfUVBTX1JFU0VUOworCQlxcC0+c193cSA9IHN3cTsKKwkJcXAtPnNfc2l6ZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICsgMTsKKwkJcXAtPnNfbWF4X3NnZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZTsKKwkJcXAtPnJfcnEubWF4X3NnZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZTsKKwkJcXAtPnNfZmxhZ3MgPSBpbml0X2F0dHItPnNxX3NpZ190eXBlID09IElCX1NJR05BTF9SRVFfV1IgPworCQkJMSA8PCBJUEFUSF9TX1NJR05BTF9SRVFfV1IgOiAwOworCQlkZXYgPSB0b19pZGV2KGlicGQtPmRldmljZSk7CisJCWVyciA9IGlwYXRoX2FsbG9jX3FwbigmZGV2LT5xcF90YWJsZSwgcXAsCisJCQkJICAgICAgaW5pdF9hdHRyLT5xcF90eXBlKTsKKwkJaWYgKGVycikgeworCQkJdmZyZWUoc3dxKTsKKwkJCXZmcmVlKHFwLT5yX3JxLndxKTsKKwkJCWtmcmVlKHFwKTsKKwkJCXJldCA9IEVSUl9QVFIoZXJyKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9yZXNldF9xcChxcCk7CisKKwkJLyogVGVsbCB0aGUgY29yZSBkcml2ZXIgdGhhdCB0aGUga2VybmVsIFNNQSBpcyBwcmVzZW50LiAqLworCQlpZiAoaW5pdF9hdHRyLT5xcF90eXBlID09IElCX1FQVF9TTUkpCisJCQlpcGF0aF9sYXllcl9zZXRfdmVyYnNfZmxhZ3MoZGV2LT5kZCwKKwkJCQkJCSAgICBJUEFUSF9WRVJCU19LRVJORUxfU01BKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBEb24ndCBzdXBwb3J0IHJhdyBRUHMgKi8KKwkJcmV0ID0gRVJSX1BUUigtRU5PU1lTKTsKKwkJZ290byBiYWlsOworCX0KKworCWluaXRfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IDA7CisKKwlyZXQgPSAmcXAtPmlicXA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9kZXN0cm95X3FwIC0gZGVzdHJveSBhIHF1ZXVlIHBhaXIKKyAqIEBpYnFwOiB0aGUgcXVldWUgcGFpciB0byBkZXN0cm95CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCB3aGlsZSB0aGUgUVAgaXMgYWN0aXZlbHkgc2VuZGluZyBvcgorICogcmVjZWl2aW5nIQorICovCitpbnQgaXBhdGhfZGVzdHJveV9xcChzdHJ1Y3QgaWJfcXAgKmlicXApCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IHRvX2lxcChpYnFwKTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJxcC0+ZGV2aWNlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogVGVsbCB0aGUgY29yZSBkcml2ZXIgdGhhdCB0aGUga2VybmVsIFNNQSBpcyBnb25lLiAqLworCWlmIChxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9TTUkpCisJCWlwYXRoX2xheWVyX3NldF92ZXJic19mbGFncyhkZXYtPmRkLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKKwlxcC0+c3RhdGUgPSBJQl9RUFNfRVJSOworCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisKKwkvKiBTdG9wIHRoZSBzZW5kaW5nIHRhc2tsZXQuICovCisJdGFza2xldF9raWxsKCZxcC0+c190YXNrKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgUVAgaXNuJ3Qgb24gdGhlIHRpbWVvdXQgbGlzdC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT50aW1lcndhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+dGltZXJ3YWl0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT5waW93YWl0KSkKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnBpb3dhaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBRUCBpcyBub3QgaW4gdGhlIFFQTiB0YWJsZSBzbyByZWNlaXZlCisJICogaW50ZXJydXB0cyB3aWxsIGRpc2NhcmQgcGFja2V0cyBmb3IgdGhpcyBRUC4gIFhYWCBBbHNvIHJlbW92ZSBRUAorCSAqIGZyb20gbXVsdGljYXN0IHRhYmxlLgorCSAqLworCWlmIChhdG9taWNfcmVhZCgmcXAtPnJlZmNvdW50KSAhPSAwKQorCQlpcGF0aF9mcmVlX3FwKCZkZXYtPnFwX3RhYmxlLCBxcCk7CisKKwl2ZnJlZShxcC0+c193cSk7CisJdmZyZWUocXAtPnJfcnEud3EpOworCWtmcmVlKHFwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9pbml0X3FwX3RhYmxlIC0gaW5pdGlhbGl6ZSB0aGUgUVAgdGFibGUgZm9yIGEgZGV2aWNlCisgKiBAaWRldjogdGhlIGRldmljZSB3aG8ncyBRUCB0YWJsZSB3ZSdyZSBpbml0aWFsaXppbmcKKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgUVAgdGFibGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4gZXJybm8uCisgKi8KK2ludCBpcGF0aF9pbml0X3FwX3RhYmxlKHN0cnVjdCBpcGF0aF9pYmRldiAqaWRldiwgaW50IHNpemUpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCWlkZXYtPnFwX3RhYmxlLmxhc3QgPSAxOwkvKiBRUE4gMCBhbmQgMSBhcmUgc3BlY2lhbC4gKi8KKwlpZGV2LT5xcF90YWJsZS5tYXggPSBzaXplOworCWlkZXYtPnFwX3RhYmxlLm5tYXBzID0gMTsKKwlpZGV2LT5xcF90YWJsZS50YWJsZSA9IGt6YWxsb2Moc2l6ZSAqIHNpemVvZigqaWRldi0+cXBfdGFibGUudGFibGUpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoaWRldi0+cXBfdGFibGUudGFibGUgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRldi0+cXBfdGFibGUubWFwKTsgaSsrKSB7CisJCWF0b21pY19zZXQoJmlkZXYtPnFwX3RhYmxlLm1hcFtpXS5uX2ZyZWUsIEJJVFNfUEVSX1BBR0UpOworCQlpZGV2LT5xcF90YWJsZS5tYXBbaV0ucGFnZSA9IE5VTEw7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3NxZXJyb3JfcXAgLSBwdXQgYSBRUCdzIHNlbmQgcXVldWUgaW50byBhbiBlcnJvciBzdGF0ZQorICogQHFwOiBRUCB3aG8ncyBzZW5kIHF1ZXVlIHdpbGwgYmUgcHV0IGludG8gYW4gZXJyb3Igc3RhdGUKKyAqIEB3YzogdGhlIFdDIHJlc3BvbnNpYmxlIGZvciBwdXR0aW5nIHRoZSBRUCBpbiB0aGlzIHN0YXRlCisgKgorICogRmx1c2hlcyB0aGUgc2VuZCB3b3JrIHF1ZXVlLgorICogVGhlIFFQIHNfbG9jayBzaG91bGQgYmUgaGVsZC4KKyAqLworCit2b2lkIGlwYXRoX3NxZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3djICp3YykKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19sYXN0KTsKKworCV9WRVJCU19JTkZPKCJTZW5kIHF1ZXVlIGVycm9yIG9uIFFQJWQvJWQ6IGVycjogJWRcbiIsCisJCSAgICBxcC0+aWJxcC5xcF9udW0sIHFwLT5yZW1vdGVfcXBuLCB3Yy0+c3RhdHVzKTsKKworCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCS8qIFhYWCBXaGF0IGlmIGl0cyBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHRpbWVvdXQgY29kZT8gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT50aW1lcndhaXQpKQorCQlsaXN0X2RlbF9pbml0KCZxcC0+dGltZXJ3YWl0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFwLT5waW93YWl0KSkKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnBpb3dhaXQpOworCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisKKwlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAuc2VuZF9jcSksIHdjLCAxKTsKKwlpZiAoKytxcC0+c19sYXN0ID49IHFwLT5zX3NpemUpCisJCXFwLT5zX2xhc3QgPSAwOworCisJd2MtPnN0YXR1cyA9IElCX1dDX1dSX0ZMVVNIX0VSUjsKKworCXdoaWxlIChxcC0+c19sYXN0ICE9IHFwLT5zX2hlYWQpIHsKKwkJd2MtPndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJd2MtPm9wY29kZSA9IGliX2lwYXRoX3djX29wY29kZVt3cWUtPndyLm9wY29kZV07CisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5zZW5kX2NxKSwgd2MsIDEpOworCQlpZiAoKytxcC0+c19sYXN0ID49IHFwLT5zX3NpemUpCisJCQlxcC0+c19sYXN0ID0gMDsKKwkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19sYXN0KTsKKwl9CisJcXAtPnNfY3VyID0gcXAtPnNfdGFpbCA9IHFwLT5zX2hlYWQ7CisJcXAtPnN0YXRlID0gSUJfUVBTX1NRRTsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfY3JlZGl0IC0gZmx1c2ggdGhlIHNlbmQgd29yayBxdWV1ZSBvZiBhIFFQCisgKiBAcXA6IHRoZSBxcCB3aG8ncyBzZW5kIHdvcmsgcXVldWUgdG8gZmx1c2gKKyAqIEBhZXRoOiB0aGUgQWNrbm93bGVkZ2UgRXh0ZW5kZWQgVHJhbnNwb3J0IEhlYWRlcgorICoKKyAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKi8KK3ZvaWQgaXBhdGhfZ2V0X2NyZWRpdChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgYWV0aCkKK3sKKwl1MzIgY3JlZGl0ID0gKGFldGggPj4gSVBTX0FFVEhfQ1JFRElUX1NISUZUKSAmIElQU19BRVRIX0NSRURJVF9NQVNLOworCisJLyoKKwkgKiBJZiB0aGUgY3JlZGl0IGlzIGludmFsaWQsIHdlIGNhbiBzZW5kCisJICogYXMgbWFueSBwYWNrZXRzIGFzIHdlIGxpa2UuICBPdGhlcndpc2UsIHdlIGhhdmUgdG8KKwkgKiBob25vciB0aGUgY3JlZGl0IGZpZWxkLgorCSAqLworCWlmIChjcmVkaXQgPT0gSVBTX0FFVEhfQ1JFRElUX0lOVkFMKSB7CisJCXFwLT5zX2xzbiA9ICh1MzIpIC0xOworCX0gZWxzZSBpZiAocXAtPnNfbHNuICE9ICh1MzIpIC0xKSB7CisJCS8qIENvbXB1dGUgbmV3IExTTiAoaS5lLiwgTVNOICsgY3JlZGl0KSAqLworCQljcmVkaXQgPSAoYWV0aCArIGNyZWRpdF90YWJsZVtjcmVkaXRdKSAmIElQU19NU05fTUFTSzsKKwkJaWYgKGlwYXRoX2NtcDI0KGNyZWRpdCwgcXAtPnNfbHNuKSA+IDApCisJCQlxcC0+c19sc24gPSBjcmVkaXQ7CisJfQorCisJLyogUmVzdGFydCBzZW5kaW5nIGlmIGl0IHdhcyBibG9ja2VkIGR1ZSB0byBsYWNrIG9mIGNyZWRpdHMuICovCisJaWYgKHFwLT5zX2N1ciAhPSBxcC0+c19oZWFkICYmCisJICAgIChxcC0+c19sc24gPT0gKHUzMikgLTEgfHwKKwkgICAgIGlwYXRoX2NtcDI0KGdldF9zd3FlX3B0cihxcCwgcXAtPnNfY3VyKS0+c3NuLAorCQkJIHFwLT5zX2xzbiArIDEpIDw9IDApKQorCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZxcC0+c190YXNrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzYjE4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCkBAIC0wLDAgKzEsMTg1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworLyogY3V0IGRvd24gcmlkaWN1bG91c2x5IGxvbmcgSUIgbWFjcm8gbmFtZXMgKi8KKyNkZWZpbmUgT1AoeCkgSUJfT1BDT0RFX1JDXyMjeAorCisvKioKKyAqIGlwYXRoX2luaXRfcmVzdGFydC0gaW5pdGlhbGl6ZSB0aGUgcXAtPnNfc2dlIGFmdGVyIGEgcmVzdGFydAorICogQHFwOiB0aGUgUVAgd2hvJ3MgU0dFIHdlJ3JlIHJlc3RhcnRpbmcKKyAqIEB3cWU6IHRoZSB3b3JrIHF1ZXVlIHRvIGluaXRpYWxpemUgdGhlIFFQJ3MgU0dFIGZyb20KKyAqCisgKiBUaGUgUVAgc19sb2NrIHNob3VsZCBiZSBoZWxkLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9pbml0X3Jlc3RhcnQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGlwYXRoX3N3cWUgKndxZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldjsKKwl1MzIgbGVuOworCisJbGVuID0gKChxcC0+c19wc24gLSB3cWUtPnBzbikgJiBJUFNfUFNOX01BU0spICoKKwkJaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CisJcXAtPnNfc2dlLnNnZSA9IHdxZS0+c2dfbGlzdFswXTsKKwlxcC0+c19zZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7CisJcXAtPnNfc2dlLm51bV9zZ2UgPSB3cWUtPndyLm51bV9zZ2U7CisJaXBhdGhfc2tpcF9zZ2UoJnFwLT5zX3NnZSwgbGVuKTsKKwlxcC0+c19sZW4gPSB3cWUtPmxlbmd0aCAtIGxlbjsKKwlkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJnFwLT50aW1lcndhaXQpKQorCQlsaXN0X2FkZF90YWlsKCZxcC0+dGltZXJ3YWl0LAorCQkJICAgICAgJmRldi0+cGVuZGluZ1tkZXYtPnBlbmRpbmdfaW5kZXhdKTsKKwlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworfQorCisvKioKKyAqIGlwYXRoX21ha2VfcmNfYWNrIC0gY29uc3RydWN0IGEgcmVzcG9uc2UgcGFja2V0IChBQ0ssIE5BSywgb3IgUkRNQSByZWFkKQorICogQHFwOiBhIHBvaW50ZXIgdG8gdGhlIFFQCisgKiBAb2hkcjogYSBwb2ludGVyIHRvIHRoZSBJQiBoZWFkZXIgYmVpbmcgY29uc3RydWN0ZWQKKyAqIEBwbXR1OiB0aGUgcGF0aCBNVFUKKyAqCisgKiBSZXR1cm4gYnRoMCBpZiBjb25zdHJ1Y3RlZDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KKyAqIE5vdGUgdGhlIFFQIHNfbG9jayBtdXN0IGJlIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGlwYXRoX21ha2VfcmNfYWNrKHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCQkJICAgIHN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyLAorCQkJCSAgICB1MzIgcG10dSkKK3sKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzczsKKwl1MzIgaHdvcmRzOworCXUzMiBsZW47CisJdTMyIGJ0aDA7CisKKwkvKiBoZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMgTFJIK0JUSCA9ICg4KzEyKS80LiAqLworCWh3b3JkcyA9IDU7CisKKwkvKgorCSAqIFNlbmQgYSByZXNwb25zZS4gIE5vdGUgdGhhdCB3ZSBhcmUgaW4gdGhlIHJlc3BvbmRlcidzCisJICogc2lkZSBvZiB0aGUgUVAgY29udGV4dC4KKwkgKi8KKwlzd2l0Y2ggKHFwLT5zX2Fja19zdGF0ZSkgeworCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgorCQlzcyA9ICZxcC0+c19yZG1hX3NnZTsKKwkJbGVuID0gcXAtPnNfcmRtYV9sZW47CisJCWlmIChsZW4gPiBwbXR1KSB7CisJCQlsZW4gPSBwbXR1OworCQkJcXAtPnNfYWNrX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKTsKKwkJfQorCQllbHNlCisJCQlxcC0+c19hY2tfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfT05MWSk7CisJCXFwLT5zX3JkbWFfbGVuIC09IGxlbjsKKwkJYnRoMCA9IHFwLT5zX2Fja19zdGF0ZSA8PCAyNDsKKwkJb2hkci0+dS5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKKwkJaHdvcmRzKys7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpOgorCQlxcC0+c19hY2tfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTUlERExFKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9NSURETEUpOgorCQlzcyA9ICZxcC0+c19yZG1hX3NnZTsKKwkJbGVuID0gcXAtPnNfcmRtYV9sZW47CisJCWlmIChsZW4gPiBwbXR1KQorCQkJbGVuID0gcG10dTsKKwkJZWxzZSB7CisJCQlvaGRyLT51LmFldGggPSBpcGF0aF9jb21wdXRlX2FldGgocXApOworCQkJaHdvcmRzKys7CisJCQlxcC0+c19hY2tfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk7CisJCX0KKwkJcXAtPnNfcmRtYV9sZW4gLT0gbGVuOworCQlidGgwID0gcXAtPnNfYWNrX3N0YXRlIDw8IDI0OworCQlicmVhazsKKworCWNhc2UgT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOgorCWNhc2UgT1AoUkRNQV9SRUFEX1JFU1BPTlNFX09OTFkpOgorCQkvKgorCQkgKiBXZSBoYXZlIHRvIHByZXZlbnQgbmV3IHJlcXVlc3RzIGZyb20gY2hhbmdpbmcKKwkJICogdGhlIHJfc2dlIHN0YXRlIHdoaWxlIGEgaXBhdGhfdmVyYnNfc2VuZCgpCisJCSAqIGlzIGluIHByb2dyZXNzLgorCQkgKiBDaGFuZ2luZyByX3N0YXRlIGFsbG93cyB0aGUgcmVjZWl2ZXIKKwkJICogdG8gY29udGludWUgcHJvY2Vzc2luZyBuZXcgcGFja2V0cy4KKwkJICogV2UgZG8gaXQgaGVyZSBub3cgaW5zdGVhZCBvZiBhYm92ZSBzbworCQkgKiB0aGF0IHdlIGFyZSBzdXJlIHRoZSBwYWNrZXQgd2FzIHNlbnQgYmVmb3JlCisJCSAqIGNoYW5naW5nIHRoZSBzdGF0ZS4KKwkJICovCisJCXFwLT5yX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOworCQlxcC0+c19hY2tfc3RhdGUgPSBPUChBQ0tOT1dMRURHRSk7CisJCXJldHVybiAwOworCisJY2FzZSBPUChDT01QQVJFX1NXQVApOgorCWNhc2UgT1AoRkVUQ0hfQUREKToKKwkJc3MgPSBOVUxMOworCQlsZW4gPSAwOworCQlxcC0+cl9zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKEFDS05PV0xFREdFKTsKKwkJYnRoMCA9IElCX09QQ09ERV9BVE9NSUNfQUNLTk9XTEVER0UgPDwgMjQ7CisJCW9oZHItPnUuYXQuYWV0aCA9IGlwYXRoX2NvbXB1dGVfYWV0aChxcCk7CisJCW9oZHItPnUuYXQuYXRvbWljX2Fja19ldGggPSBjcHVfdG9fYmU2NChxcC0+c19hY2tfYXRvbWljKTsKKwkJaHdvcmRzICs9IHNpemVvZihvaGRyLT51LmF0KSAvIDQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogU2VuZCBhIHJlZ3VsYXIgQUNLLiAqLworCQlzcyA9IE5VTEw7CisJCWxlbiA9IDA7CisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKEFDS05PV0xFREdFKTsKKwkJYnRoMCA9IHFwLT5zX2Fja19zdGF0ZSA8PCAyNDsKKwkJb2hkci0+dS5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKKwkJaHdvcmRzKys7CisJfQorCXFwLT5zX2hkcndvcmRzID0gaHdvcmRzOworCXFwLT5zX2N1cl9zZ2UgPSBzczsKKwlxcC0+c19jdXJfc2l6ZSA9IGxlbjsKKworCXJldHVybiBidGgwOworfQorCisvKioKKyAqIGlwYXRoX21ha2VfcmNfcmVxIC0gY29uc3RydWN0IGEgcmVxdWVzdCBwYWNrZXQgKFNFTkQsIFJETUEgci93LCBBVE9NSUMpCisgKiBAcXA6IGEgcG9pbnRlciB0byB0aGUgUVAKKyAqIEBvaGRyOiBhIHBvaW50ZXIgdG8gdGhlIElCIGhlYWRlciBiZWluZyBjb25zdHJ1Y3RlZAorICogQHBtdHU6IHRoZSBwYXRoIE1UVQorICogQGJ0aDBwOiBwb2ludGVyIHRvIHRoZSBCVEggb3Bjb2RlIHdvcmQKKyAqIEBidGgycDogcG9pbnRlciB0byB0aGUgQlRIIFBTTiB3b3JkCisgKgorICogUmV0dXJuIDEgaWYgY29uc3RydWN0ZWQ7IG90aGVyd2lzZSwgcmV0dXJuIDAuCisgKiBOb3RlIHRoZSBRUCBzX2xvY2sgbXVzdCBiZSBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpcGF0aF9tYWtlX3JjX3JlcShzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkJCSAgICBzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkciwKKwkJCQkgICAgdTMyIHBtdHUsIHUzMiAqYnRoMHAsIHUzMiAqYnRoMnApCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3M7CisJc3RydWN0IGlwYXRoX3N3cWUgKndxZTsKKwl1MzIgaHdvcmRzOworCXUzMiBsZW47CisJdTMyIGJ0aDA7CisJdTMyIGJ0aDI7CisJY2hhciBuZXdyZXE7CisKKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BST0NFU1NfU0VORF9PSykgfHwKKwkgICAgcXAtPnNfcm5yX3RpbWVvdXQpCisJCWdvdG8gZG9uZTsKKworCS8qIGhlYWRlciBzaXplIGluIDMyLWJpdCB3b3JkcyBMUkgrQlRIID0gKDgrMTIpLzQuICovCisJaHdvcmRzID0gNTsKKwlidGgwID0gMDsKKworCS8qIFNlbmQgYSByZXF1ZXN0LiAqLworCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfY3VyKTsKKwlzd2l0Y2ggKHFwLT5zX3N0YXRlKSB7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogUmVzZW5kIGFuIG9sZCByZXF1ZXN0IG9yIHN0YXJ0IGEgbmV3IG9uZS4KKwkJICoKKwkJICogV2Uga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBTV1FFIHNvIHRoYXQKKwkJICogd2UgZG9uJ3QgcmVzZXQgdGhlICJmdXJ0aGVzdCBwcm9ncmVzcyIgc3RhdGUKKwkJICogaWYgd2UgbmVlZCB0byBiYWNrIHVwLgorCQkgKi8KKwkJbmV3cmVxID0gMDsKKwkJaWYgKHFwLT5zX2N1ciA9PSBxcC0+c190YWlsKSB7CisJCQkvKiBDaGVjayBpZiBzZW5kIHdvcmsgcXVldWUgaXMgZW1wdHkuICovCisJCQlpZiAocXAtPnNfdGFpbCA9PSBxcC0+c19oZWFkKQorCQkJCWdvdG8gZG9uZTsKKwkJCXFwLT5zX3BzbiA9IHdxZS0+cHNuID0gcXAtPnNfbmV4dF9wc247CisJCQluZXdyZXEgPSAxOworCQl9CisJCS8qCisJCSAqIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIG1vZGlmeSB0aGUKKwkJICogb3JpZ2luYWwgd29yayByZXF1ZXN0IHNpbmNlIHdlIG1heSBuZWVkIHRvIHJlc2VuZAorCQkgKiBpdC4KKwkJICovCisJCXFwLT5zX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJCXFwLT5zX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwkJcXAtPnNfc2dlLm51bV9zZ2UgPSB3cWUtPndyLm51bV9zZ2U7CisJCXFwLT5zX2xlbiA9IGxlbiA9IHdxZS0+bGVuZ3RoOworCQlzcyA9ICZxcC0+c19zZ2U7CisJCWJ0aDIgPSAwOworCQlzd2l0Y2ggKHdxZS0+d3Iub3Bjb2RlKSB7CisJCWNhc2UgSUJfV1JfU0VORDoKKwkJY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgorCQkJLyogSWYgbm8gY3JlZGl0LCByZXR1cm4uICovCisJCQlpZiAocXAtPnNfbHNuICE9ICh1MzIpIC0xICYmCisJCQkgICAgaXBhdGhfY21wMjQod3FlLT5zc24sIHFwLT5zX2xzbiArIDEpID4gMCkKKwkJCQlnb3RvIGRvbmU7CisJCQl3cWUtPmxwc24gPSB3cWUtPnBzbjsKKwkJCWlmIChsZW4gPiBwbXR1KSB7CisJCQkJd3FlLT5scHNuICs9IChsZW4gLSAxKSAvIHBtdHU7CisJCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0ZJUlNUKTsKKwkJCQlsZW4gPSBwbXR1OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1NFTkQpCisJCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX09OTFkpOworCQkJZWxzZSB7CisJCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpOworCQkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBCVEggKi8KKwkJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCQlod29yZHMgKz0gMTsKKwkJCX0KKwkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQlidGgwIHw9IDEgPDwgMjM7CisJCQlidGgyID0gMSA8PCAzMTsJLyogUmVxdWVzdCBBQ0suICovCisJCQlpZiAoKytxcC0+c19jdXIgPT0gcXAtPnNfc2l6ZSkKKwkJCQlxcC0+c19jdXIgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJaWYgKG5ld3JlcSkKKwkJCQlxcC0+c19sc24rKzsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKKwkJCS8qIElmIG5vIGNyZWRpdCwgcmV0dXJuLiAqLworCQkJaWYgKHFwLT5zX2xzbiAhPSAodTMyKSAtMSAmJgorCQkJICAgIGlwYXRoX2NtcDI0KHdxZS0+c3NuLCBxcC0+c19sc24gKyAxKSA+IDApCisJCQkJZ290byBkb25lOworCQkJb2hkci0+dS5yYy5yZXRoLnZhZGRyID0KKwkJCQljcHVfdG9fYmU2NCh3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIpOworCQkJb2hkci0+dS5yYy5yZXRoLnJrZXkgPQorCQkJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IucmRtYS5ya2V5KTsKKwkJCW9oZHItPnUucmMucmV0aC5sZW5ndGggPSBjcHVfdG9fYmUzMihsZW4pOworCQkJaHdvcmRzICs9IHNpemVvZihzdHJ1Y3QgaWJfcmV0aCkgLyA0OworCQkJd3FlLT5scHNuID0gd3FlLT5wc247CisJCQlpZiAobGVuID4gcG10dSkgeworCQkJCXdxZS0+bHBzbiArPSAobGVuIC0gMSkgLyBwbXR1OworCQkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9XUklURV9GSVJTVCk7CisJCQkJbGVuID0gcG10dTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFKQorCQkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9XUklURV9PTkxZKTsKKwkJCWVsc2UgeworCQkJCXFwLT5zX3N0YXRlID0KKwkJCQkJT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKTsKKwkJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcworCQkJCSAqIGFmdGVyIFJFVEggKi8KKwkJCQlvaGRyLT51LnJjLmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCQlod29yZHMgKz0gMTsKKwkJCQlpZiAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCQkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJCX0KKwkJCWJ0aDIgPSAxIDw8IDMxOwkvKiBSZXF1ZXN0IEFDSy4gKi8KKwkJCWlmICgrK3FwLT5zX2N1ciA9PSBxcC0+c19zaXplKQorCQkJCXFwLT5zX2N1ciA9IDA7CisJCQlicmVhazsKKworCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCW9oZHItPnUucmMucmV0aC52YWRkciA9CisJCQkJY3B1X3RvX2JlNjQod3FlLT53ci53ci5yZG1hLnJlbW90ZV9hZGRyKTsKKwkJCW9oZHItPnUucmMucmV0aC5ya2V5ID0KKwkJCQljcHVfdG9fYmUzMih3cWUtPndyLndyLnJkbWEucmtleSk7CisJCQlvaGRyLT51LnJjLnJldGgubGVuZ3RoID0gY3B1X3RvX2JlMzIobGVuKTsKKwkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFUVVFU1QpOworCQkJaHdvcmRzICs9IHNpemVvZihvaGRyLT51LnJjLnJldGgpIC8gNDsKKwkJCWlmIChuZXdyZXEpIHsKKwkJCQlxcC0+c19sc24rKzsKKwkJCQkvKgorCQkJCSAqIEFkanVzdCBzX25leHRfcHNuIHRvIGNvdW50IHRoZQorCQkJCSAqIGV4cGVjdGVkIG51bWJlciBvZiByZXNwb25zZXMuCisJCQkJICovCisJCQkJaWYgKGxlbiA+IHBtdHUpCisJCQkJCXFwLT5zX25leHRfcHNuICs9IChsZW4gLSAxKSAvIHBtdHU7CisJCQkJd3FlLT5scHNuID0gcXAtPnNfbmV4dF9wc24rKzsKKwkJCX0KKwkJCXNzID0gTlVMTDsKKwkJCWxlbiA9IDA7CisJCQlpZiAoKytxcC0+c19jdXIgPT0gcXAtPnNfc2l6ZSkKKwkJCQlxcC0+c19jdXIgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1A6CisJCWNhc2UgSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BREQ6CisJCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQKQorCQkJCXFwLT5zX3N0YXRlID0gT1AoQ09NUEFSRV9TV0FQKTsKKwkJCWVsc2UKKwkJCQlxcC0+c19zdGF0ZSA9IE9QKEZFVENIX0FERCk7CisJCQlvaGRyLT51LmF0b21pY19ldGgudmFkZHIgPSBjcHVfdG9fYmU2NCgKKwkJCQl3cWUtPndyLndyLmF0b21pYy5yZW1vdGVfYWRkcik7CisJCQlvaGRyLT51LmF0b21pY19ldGgucmtleSA9IGNwdV90b19iZTMyKAorCQkJCXdxZS0+d3Iud3IuYXRvbWljLnJrZXkpOworCQkJb2hkci0+dS5hdG9taWNfZXRoLnN3YXBfZGF0YSA9IGNwdV90b19iZTY0KAorCQkJCXdxZS0+d3Iud3IuYXRvbWljLnN3YXApOworCQkJb2hkci0+dS5hdG9taWNfZXRoLmNvbXBhcmVfZGF0YSA9IGNwdV90b19iZTY0KAorCQkJCXdxZS0+d3Iud3IuYXRvbWljLmNvbXBhcmVfYWRkKTsKKwkJCWh3b3JkcyArPSBzaXplb2Yoc3RydWN0IGliX2F0b21pY19ldGgpIC8gNDsKKwkJCWlmIChuZXdyZXEpIHsKKwkJCQlxcC0+c19sc24rKzsKKwkJCQl3cWUtPmxwc24gPSB3cWUtPnBzbjsKKwkJCX0KKwkJCWlmICgrK3FwLT5zX2N1ciA9PSBxcC0+c19zaXplKQorCQkJCXFwLT5zX2N1ciA9IDA7CisJCQlzcyA9IE5VTEw7CisJCQlsZW4gPSAwOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAobmV3cmVxKSB7CisJCQlxcC0+c190YWlsKys7CisJCQlpZiAocXAtPnNfdGFpbCA+PSBxcC0+c19zaXplKQorCQkJCXFwLT5zX3RhaWwgPSAwOworCQl9CisJCWJ0aDIgfD0gcXAtPnNfcHNuKysgJiBJUFNfUFNOX01BU0s7CisJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQorCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CisJCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCQlsaXN0X2FkZF90YWlsKCZxcC0+dGltZXJ3YWl0LAorCQkJCSAgICAgICZkZXYtPnBlbmRpbmdbZGV2LT5wZW5kaW5nX2luZGV4XSk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpOgorCQkvKgorCQkgKiBUaGlzIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2VuZCBpcyByZXN0YXJ0ZWQuICBTZWUKKwkJICogaXBhdGhfcmVzdGFydF9yYygpLgorCQkgKi8KKwkJaXBhdGhfaW5pdF9yZXN0YXJ0KHFwLCB3cWUpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoU0VORF9GSVJTVCk6CisJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9NSURETEUpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoU0VORF9NSURETEUpOgorCQlidGgyID0gcXAtPnNfcHNuKysgJiBJUFNfUFNOX01BU0s7CisJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQorCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CisJCXNzID0gJnFwLT5zX3NnZTsKKwkJbGVuID0gcXAtPnNfbGVuOworCQlpZiAobGVuID4gcG10dSkgeworCQkJLyoKKwkJCSAqIFJlcXVlc3QgYW4gQUNLIGV2ZXJ5IDEvMiBNQiB0byBhdm9pZCByZXRyYW5zbWl0CisJCQkgKiB0aW1lb3V0cy4KKwkJCSAqLworCQkJaWYgKCgod3FlLT5sZW5ndGggLSBsZW4pICUgKDUxMiAqIDEwMjQpKSA9PSAwKQorCQkJCWJ0aDIgfD0gMSA8PCAzMTsKKwkJCWxlbiA9IHBtdHU7CisJCQlicmVhazsKKwkJfQorCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfU0VORCkKKwkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJZWxzZSB7CisJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVF9XSVRIX0lNTUVESUFURSk7CisJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciB0aGUgQlRIICovCisJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCWh3b3JkcyArPSAxOworCQl9CisJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCWJ0aDAgfD0gMSA8PCAyMzsKKwkJYnRoMiB8PSAxIDw8IDMxOwkvKiBSZXF1ZXN0IEFDSy4gKi8KKwkJcXAtPnNfY3VyKys7CisJCWlmIChxcC0+c19jdXIgPj0gcXAtPnNfc2l6ZSkKKwkJCXFwLT5zX2N1ciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk6CisJCS8qCisJCSAqIFRoaXMgY2FzZSBjYW4gb25seSBoYXBwZW4gaWYgYSBSRE1BIHdyaXRlIGlzIHJlc3RhcnRlZC4KKwkJICogU2VlIGlwYXRoX3Jlc3RhcnRfcmMoKS4KKwkJICovCisJCWlwYXRoX2luaXRfcmVzdGFydChxcCwgd3FlKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgorCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfTUlERExFKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKKwkJYnRoMiA9IHFwLT5zX3BzbisrICYgSVBTX1BTTl9NQVNLOworCQlpZiAoKGludCkocXAtPnNfcHNuIC0gcXAtPnNfbmV4dF9wc24pID4gMCkKKwkJCXFwLT5zX25leHRfcHNuID0gcXAtPnNfcHNuOworCQlzcyA9ICZxcC0+c19zZ2U7CisJCWxlbiA9IHFwLT5zX2xlbjsKKwkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCS8qCisJCQkgKiBSZXF1ZXN0IGFuIEFDSyBldmVyeSAxLzIgTUIgdG8gYXZvaWQgcmV0cmFuc21pdAorCQkJICogdGltZW91dHMuCisJCQkgKi8KKwkJCWlmICgoKHdxZS0+bGVuZ3RoIC0gbGVuKSAlICg1MTIgKiAxMDI0KSkgPT0gMCkKKwkJCQlidGgyIHw9IDEgPDwgMzE7CisJCQlsZW4gPSBwbXR1OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1JETUFfV1JJVEUpCisJCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfTEFTVCk7CisJCWVsc2UgeworCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpOworCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLworCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQlod29yZHMgKz0gMTsKKwkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQlidGgwIHw9IDEgPDwgMjM7CisJCX0KKwkJYnRoMiB8PSAxIDw8IDMxOwkvKiBSZXF1ZXN0IEFDSy4gKi8KKwkJcXAtPnNfY3VyKys7CisJCWlmIChxcC0+c19jdXIgPj0gcXAtPnNfc2l6ZSkKKwkJCXFwLT5zX2N1ciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTUlERExFKToKKwkJLyoKKwkJICogVGhpcyBjYXNlIGNhbiBvbmx5IGhhcHBlbiBpZiBhIFJETUEgcmVhZCBpcyByZXN0YXJ0ZWQuCisJCSAqIFNlZSBpcGF0aF9yZXN0YXJ0X3JjKCkuCisJCSAqLworCQlpcGF0aF9pbml0X3Jlc3RhcnQocXAsIHdxZSk7CisJCWxlbiA9ICgocXAtPnNfcHNuIC0gd3FlLT5wc24pICYgSVBTX1BTTl9NQVNLKSAqIHBtdHU7CisJCW9oZHItPnUucmMucmV0aC52YWRkciA9CisJCQljcHVfdG9fYmU2NCh3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIgKyBsZW4pOworCQlvaGRyLT51LnJjLnJldGgucmtleSA9CisJCQljcHVfdG9fYmUzMih3cWUtPndyLndyLnJkbWEucmtleSk7CisJCW9oZHItPnUucmMucmV0aC5sZW5ndGggPSBjcHVfdG9fYmUzMihxcC0+c19sZW4pOworCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVFVRVNUKTsKKwkJaHdvcmRzICs9IHNpemVvZihvaGRyLT51LnJjLnJldGgpIC8gNDsKKwkJYnRoMiA9IHFwLT5zX3BzbisrICYgSVBTX1BTTl9NQVNLOworCQlpZiAoKGludCkocXAtPnNfcHNuIC0gcXAtPnNfbmV4dF9wc24pID4gMCkKKwkJCXFwLT5zX25leHRfcHNuID0gcXAtPnNfcHNuOworCQlzcyA9IE5VTEw7CisJCWxlbiA9IDA7CisJCXFwLT5zX2N1cisrOworCQlpZiAocXAtPnNfY3VyID09IHFwLT5zX3NpemUpCisJCQlxcC0+c19jdXIgPSAwOworCQlicmVhazsKKworCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgorCWNhc2UgT1AoQ09NUEFSRV9TV0FQKToKKwljYXNlIE9QKEZFVENIX0FERCk6CisJCS8qCisJCSAqIFdlIHNob3VsZG4ndCBzdGFydCBhbnl0aGluZyBuZXcgdW50aWwgdGhpcyByZXF1ZXN0IGlzCisJCSAqIGZpbmlzaGVkLiAgVGhlIEFDSyB3aWxsIGhhbmRsZSByZXNjaGVkdWxpbmcgdXMuICBYWFggVGhlCisJCSAqIG51bWJlciBvZiBvdXRzdGFuZGluZyBvbmVzIGlzIG5lZ290aWF0ZWQgYXQgY29ubmVjdGlvbgorCQkgKiBzZXR1cCB0aW1lIChzZWUgcGcuIDI1OCwyODkpPyAgWFhYIEFsc28sIGlmIHdlIHN1cHBvcnQKKwkJICogbXVsdGlwbGUgb3V0c3RhbmRpbmcgcmVxdWVzdHMsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIFdRRQorCQkgKiBJQl9TRU5EX0ZFTkNFIGZsYWcgYW5kIG5vdCBzZW5kIGEgbmV3IHJlcXVlc3QgaWYgYSBSRE1BCisJCSAqIHJlYWQgb3IgYXRvbWljIGlzIHBlbmRpbmcuCisJCSAqLworCQlnb3RvIGRvbmU7CisJfQorCXFwLT5zX2xlbiAtPSBsZW47CisJcXAtPnNfaGRyd29yZHMgPSBod29yZHM7CisJcXAtPnNfY3VyX3NnZSA9IHNzOworCXFwLT5zX2N1cl9zaXplID0gbGVuOworCSpidGgwcCA9IGJ0aDAgfCAocXAtPnNfc3RhdGUgPDwgMjQpOworCSpidGgycCA9IGJ0aDI7CisJcmV0dXJuIDE7CisKK2RvbmU6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGF0aF9tYWtlX3JjX2dyaChzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkJCSAgICAgc3RydWN0IGliX2dsb2JhbF9yb3V0ZSAqZ3JoLAorCQkJCSAgICAgdTMyIG53b3JkcykKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKworCS8qIEdSSCBoZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMuICovCisJcXAtPnNfaGRyd29yZHMgKz0gMTA7CisJcXAtPnNfaGRyLnUubC5ncmgudmVyc2lvbl90Y2xhc3NfZmxvdyA9CisJCWNwdV90b19iZTMyKCg2IDw8IDI4KSB8CisJCQkgICAgKGdyaC0+dHJhZmZpY19jbGFzcyA8PCAyMCkgfAorCQkJICAgIGdyaC0+Zmxvd19sYWJlbCk7CisJcXAtPnNfaGRyLnUubC5ncmgucGF5bGVuID0KKwkJY3B1X3RvX2JlMTYoKChxcC0+c19oZHJ3b3JkcyAtIDEyKSArIG53b3JkcyArCisJCQkgICAgIFNJWkVfT0ZfQ1JDKSA8PCAyKTsKKwkvKiBuZXh0X2hkciBpcyBkZWZpbmVkIGJ5IEM4LTcgaW4gY2guIDguNC4xICovCisJcXAtPnNfaGRyLnUubC5ncmgubmV4dF9oZHIgPSAweDFCOworCXFwLT5zX2hkci51LmwuZ3JoLmhvcF9saW1pdCA9IGdyaC0+aG9wX2xpbWl0OworCS8qIFRoZSBTR0lEIGlzIDMyLWJpdCBhbGlnbmVkLiAqLworCXFwLT5zX2hkci51LmwuZ3JoLnNnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXggPSBkZXYtPmdpZF9wcmVmaXg7CisJcXAtPnNfaGRyLnUubC5ncmguc2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkID0KKwkJaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGV2LT5kZCk7CisJcXAtPnNfaGRyLnUubC5ncmguZGdpZCA9IGdyaC0+ZGdpZDsKK30KKworLyoqCisgKiBpcGF0aF9kb19yY19zZW5kIC0gcGVyZm9ybSBhIHNlbmQgb24gYW4gUkMgUVAKKyAqIEBkYXRhOiBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIFFQCisgKgorICogUHJvY2VzcyBlbnRyaWVzIGluIHRoZSBzZW5kIHdvcmsgcXVldWUgdW50aWwgY3JlZGl0IG9yIHF1ZXVlIGlzCisgKiBleGhhdXN0ZWQuICBPbmx5IGFsbG93IG9uZSBDUFUgdG8gc2VuZCBhIHBhY2tldCBwZXIgUVAgKHRhc2tsZXQpLgorICogT3RoZXJ3aXNlLCBhZnRlciB3ZSBkcm9wIHRoZSBRUCBzX2xvY2ssIHR3byB0aHJlYWRzIGNvdWxkIHNlbmQKKyAqIHBhY2tldHMgb3V0IG9mIG9yZGVyLgorICovCit2b2lkIGlwYXRoX2RvX3JjX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSAoc3RydWN0IGlwYXRoX3FwICopZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBscmgwOworCXUzMiBud29yZHM7CisJdTMyIGV4dHJhX2J5dGVzOworCXUzMiBidGgwOworCXUzMiBidGgyOworCXUzMiBwbXR1ID0gaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CisJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHI7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncykpCisJCWdvdG8gYmFpbDsKKworCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCA9PQorCQkgICAgIGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7CisJCXN0cnVjdCBpYl93YyB3YzsKKworCQkvKgorCQkgKiBQYXNzIGluIGFuIHVuaW5pdGlhbGl6ZWQgaWJfd2MgdG8gYmUgY29uc2lzdGVudCB3aXRoCisJCSAqIG90aGVyIHBsYWNlcyB3aGVyZSBpcGF0aF9ydWNfbG9vcGJhY2soKSBpcyBjYWxsZWQuCisJCSAqLworCQlpcGF0aF9ydWNfbG9vcGJhY2socXAsICZ3Yyk7CisJCWdvdG8gY2xlYXI7CisJfQorCisJb2hkciA9ICZxcC0+c19oZHIudS5vdGg7CisJaWYgKHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkKKwkJb2hkciA9ICZxcC0+c19oZHIudS5sLm90aDsKKworYWdhaW46CisJLyogQ2hlY2sgZm9yIGEgY29uc3RydWN0ZWQgcGFja2V0IHRvIGJlIHNlbnQuICovCisJaWYgKHFwLT5zX2hkcndvcmRzICE9IDApIHsKKwkJLyoKKwkJICogSWYgbm8gUElPIGJ1ZnMgYXJlIGF2YWlsYWJsZSwgcmV0dXJuLiAgQW4gaW50ZXJydXB0IHdpbGwKKwkJICogY2FsbCBpcGF0aF9pYl9waW9idWZhdmFpbCgpIHdoZW4gb25lIGlzIGF2YWlsYWJsZS4KKwkJICovCisJCV9WRVJCU19JTkZPKCJoICV1ICVwXG4iLCBxcC0+c19oZHJ3b3JkcywgJnFwLT5zX2hkcik7CisJCV9WRVJCU19JTkZPKCJkICV1ICVwICV1ICVwICV1ICV1ICV1ICV1XG4iLCBxcC0+c19jdXJfc2l6ZSwKKwkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ19saXN0LAorCQkJICAgIHFwLT5zX2N1cl9zZ2UtPm51bV9zZ2UsCisJCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLnZhZGRyLAorCQkJICAgIHFwLT5zX2N1cl9zZ2UtPnNnZS5zZ2VfbGVuZ3RoLAorCQkJICAgIHFwLT5zX2N1cl9zZ2UtPnNnZS5sZW5ndGgsCisJCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLm0sCisJCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLm4pOworCQlpZiAoaXBhdGhfdmVyYnNfc2VuZChkZXYtPmRkLCBxcC0+c19oZHJ3b3JkcywKKwkJCQkgICAgICh1MzIgKikgJnFwLT5zX2hkciwgcXAtPnNfY3VyX3NpemUsCisJCQkJICAgICBxcC0+c19jdXJfc2dlKSkgeworCQkJaXBhdGhfbm9fYnVmc19hdmFpbGFibGUocXAsIGRldik7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJZGV2LT5uX3VuaWNhc3RfeG1pdCsrOworCQkvKiBSZWNvcmQgdGhhdCB3ZSBzZW50IHRoZSBwYWNrZXQgYW5kIHNfaGRyIGlzIGVtcHR5LiAqLworCQlxcC0+c19oZHJ3b3JkcyA9IDA7CisJfQorCisJLyoKKwkgKiBUaGUgbG9jayBpcyBuZWVkZWQgdG8gc3luY2hyb25pemUgYmV0d2VlbiBzZXR0aW5nCisJICogcXAtPnNfYWNrX3N0YXRlLCByZXNlbmQgdGltZXIsIGFuZCBwb3N0X3NlbmQoKS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCisJLyogU2VuZGluZyByZXNwb25zZXMgaGFzIGhpZ2hlciBwcmlvcml0eSBvdmVyIHNlbmRpbmcgcmVxdWVzdHMuICovCisJaWYgKHFwLT5zX2Fja19zdGF0ZSAhPSBPUChBQ0tOT1dMRURHRSkgJiYKKwkgICAgKGJ0aDAgPSBpcGF0aF9tYWtlX3JjX2FjayhxcCwgb2hkciwgcG10dSkpICE9IDApCisJCWJ0aDIgPSBxcC0+c19hY2tfcHNuKysgJiBJUFNfUFNOX01BU0s7CisJZWxzZSBpZiAoIWlwYXRoX21ha2VfcmNfcmVxKHFwLCBvaGRyLCBwbXR1LCAmYnRoMCwgJmJ0aDIpKQorCQlnb3RvIGRvbmU7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwkvKiBDb25zdHJ1Y3QgdGhlIGhlYWRlci4gKi8KKwlleHRyYV9ieXRlcyA9ICg0IC0gcXAtPnNfY3VyX3NpemUpICYgMzsKKwlud29yZHMgPSAocXAtPnNfY3VyX3NpemUgKyBleHRyYV9ieXRlcykgPj4gMjsKKwlscmgwID0gSVBTX0xSSF9CVEg7CisJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKKwkJaXBhdGhfbWFrZV9yY19ncmgocXAsICZxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLCBud29yZHMpOworCQlscmgwID0gSVBTX0xSSF9HUkg7CisJfQorCWxyaDAgfD0gcXAtPnJlbW90ZV9haF9hdHRyLnNsIDw8IDQ7CisJcXAtPnNfaGRyLmxyaFswXSA9IGNwdV90b19iZTE2KGxyaDApOworCXFwLT5zX2hkci5scmhbMV0gPSBjcHVfdG9fYmUxNihxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCk7CisJcXAtPnNfaGRyLmxyaFsyXSA9IGNwdV90b19iZTE2KHFwLT5zX2hkcndvcmRzICsgbndvcmRzICsKKwkJCQkgICAgICAgU0laRV9PRl9DUkMpOworCXFwLT5zX2hkci5scmhbM10gPSBjcHVfdG9fYmUxNihpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKTsKKwlidGgwIHw9IGlwYXRoX2xheWVyX2dldF9wa2V5KGRldi0+ZGQsIHFwLT5zX3BrZXlfaW5kZXgpOworCWJ0aDAgfD0gZXh0cmFfYnl0ZXMgPDwgMjA7CisJb2hkci0+YnRoWzBdID0gY3B1X3RvX2JlMzIoYnRoMCk7CisJb2hkci0+YnRoWzFdID0gY3B1X3RvX2JlMzIocXAtPnJlbW90ZV9xcG4pOworCW9oZHItPmJ0aFsyXSA9IGNwdV90b19iZTMyKGJ0aDIpOworCisJLyogQ2hlY2sgZm9yIG1vcmUgd29yayB0byBkby4gKi8KKwlnb3RvIGFnYWluOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKK2NsZWFyOgorCWNsZWFyX2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncyk7CitiYWlsOgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2VuZF9yY19hY2soc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwl1MTYgbHJoMDsKKwl1MzIgYnRoMDsKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKworCS8qIENvbnN0cnVjdCB0aGUgaGVhZGVyLiAqLworCW9oZHIgPSAmcXAtPnNfaGRyLnUub3RoOworCWxyaDAgPSBJUFNfTFJIX0JUSDsKKwkvKiBoZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMgTFJIK0JUSCtBRVRIID0gKDgrMTIrNCkvNC4gKi8KKwlxcC0+c19oZHJ3b3JkcyA9IDY7CisJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKKwkJaXBhdGhfbWFrZV9yY19ncmgocXAsICZxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLCAwKTsKKwkJb2hkciA9ICZxcC0+c19oZHIudS5sLm90aDsKKwkJbHJoMCA9IElQU19MUkhfR1JIOworCX0KKwlidGgwID0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7CisJb2hkci0+dS5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKKwlpZiAocXAtPnNfYWNrX3N0YXRlID49IE9QKENPTVBBUkVfU1dBUCkpIHsKKwkJYnRoMCB8PSBJQl9PUENPREVfQVRPTUlDX0FDS05PV0xFREdFIDw8IDI0OworCQlvaGRyLT51LmF0LmF0b21pY19hY2tfZXRoID0gY3B1X3RvX2JlNjQocXAtPnNfYWNrX2F0b21pYyk7CisJCXFwLT5zX2hkcndvcmRzICs9IHNpemVvZihvaGRyLT51LmF0LmF0b21pY19hY2tfZXRoKSAvIDQ7CisJfQorCWVsc2UKKwkJYnRoMCB8PSBPUChBQ0tOT1dMRURHRSkgPDwgMjQ7CisJbHJoMCB8PSBxcC0+cmVtb3RlX2FoX2F0dHIuc2wgPDwgNDsKKwlxcC0+c19oZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7CisJcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKKwlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYocXAtPnNfaGRyd29yZHMgKyBTSVpFX09GX0NSQyk7CisJcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOworCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOworCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKKwlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+c19hY2tfcHNuICYgSVBTX1BTTl9NQVNLKTsKKworCS8qCisJICogSWYgd2UgY2FuIHNlbmQgdGhlIEFDSywgY2xlYXIgdGhlIEFDSyBzdGF0ZS4KKwkgKi8KKwlpZiAoaXBhdGhfdmVyYnNfc2VuZChkZXYtPmRkLCBxcC0+c19oZHJ3b3JkcywgKHUzMiAqKSAmcXAtPnNfaGRyLAorCQkJICAgICAwLCBOVUxMKSA9PSAwKSB7CisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKEFDS05PV0xFREdFKTsKKwkJZGV2LT5uX3JjX3FhY2tzKys7CisJCWRldi0+bl91bmljYXN0X3htaXQrKzsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfcmVzdGFydF9yYyAtIGJhY2sgdXAgcmVxdWVzdGVyIHRvIHJlc2VuZCB0aGUgbGFzdCB1bi1BQ0tlZCByZXF1ZXN0CisgKiBAcXA6IHRoZSBRUCB0byByZXN0YXJ0CisgKiBAcHNuOiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGZvciB0aGUgcmVxdWVzdAorICogQHdjOiB0aGUgd29yayBjb21wbGV0aW9uIHJlcXVlc3QKKyAqCisgKiBUaGUgUVAgc19sb2NrIHNob3VsZCBiZSBoZWxkLgorICovCit2b2lkIGlwYXRoX3Jlc3RhcnRfcmMoc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIHBzbiwgc3RydWN0IGliX3djICp3YykKK3sKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19sYXN0KTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldjsKKwl1MzIgbjsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIHJlcXVlc3RzIHBlbmRpbmcsIHdlIGFyZSBkb25lLgorCSAqLworCWlmIChpcGF0aF9jbXAyNChwc24sIHFwLT5zX25leHRfcHNuKSA+PSAwIHx8CisJICAgIHFwLT5zX2xhc3QgPT0gcXAtPnNfdGFpbCkKKwkJZ290byBkb25lOworCisJaWYgKHFwLT5zX3JldHJ5ID09IDApIHsKKwkJd2MtPndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJd2MtPnN0YXR1cyA9IElCX1dDX1JFVFJZX0VYQ19FUlI7CisJCXdjLT5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOworCQl3Yy0+dmVuZG9yX2VyciA9IDA7CisJCXdjLT5ieXRlX2xlbiA9IDA7CisJCXdjLT5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJCXdjLT5zcmNfcXAgPSBxcC0+cmVtb3RlX3FwbjsKKwkJd2MtPnBrZXlfaW5kZXggPSAwOworCQl3Yy0+c2xpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCQl3Yy0+c2wgPSBxcC0+cmVtb3RlX2FoX2F0dHIuc2w7CisJCXdjLT5kbGlkX3BhdGhfYml0cyA9IDA7CisJCXdjLT5wb3J0X251bSA9IDA7CisJCWlwYXRoX3NxZXJyb3JfcXAocXAsIHdjKTsKKwkJZ290byBiYWlsOworCX0KKwlxcC0+c19yZXRyeS0tOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIFFQIGZyb20gdGhlIHRpbWVvdXQgcXVldWUuCisJICogTm90ZTogaXQgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJlbW92ZWQgYnkgaXBhdGhfaWJfdGltZXIoKS4KKwkgKi8KKwlkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZxcC0+dGltZXJ3YWl0KSkKKwkJbGlzdF9kZWxfaW5pdCgmcXAtPnRpbWVyd2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKworCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQUQpCisJCWRldi0+bl9yY19yZXNlbmRzKys7CisJZWxzZQorCQlkZXYtPm5fcmNfcmVzZW5kcyArPSAoaW50KXFwLT5zX3BzbiAtIChpbnQpcHNuOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgc3RhcnRpbmcgdGhlIHJlcXVlc3QgZnJvbSB0aGUgYmVnaW5uaW5nLCBsZXQgdGhlIG5vcm1hbAorCSAqIHNlbmQgY29kZSBoYW5kbGUgaW5pdGlhbGl6YXRpb24uCisJICovCisJcXAtPnNfY3VyID0gcXAtPnNfbGFzdDsKKwlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPD0gMCkgeworCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCXFwLT5zX3BzbiA9IHdxZS0+cHNuOworCX0gZWxzZSB7CisJCW4gPSBxcC0+c19jdXI7CisJCWZvciAoOzspIHsKKwkJCWlmICgrK24gPT0gcXAtPnNfc2l6ZSkKKwkJCQluID0gMDsKKwkJCWlmIChuID09IHFwLT5zX3RhaWwpIHsKKwkJCQlpZiAoaXBhdGhfY21wMjQocHNuLCBxcC0+c19uZXh0X3BzbikgPj0gMCkgeworCQkJCQlxcC0+c19jdXIgPSBuOworCQkJCQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIG4pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJCQlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPCAwKQorCQkJCWJyZWFrOworCQkJcXAtPnNfY3VyID0gbjsKKwkJfQorCQlxcC0+c19wc24gPSBwc247CisKKwkJLyoKKwkJICogUmVzZXQgdGhlIHN0YXRlIHRvIHJlc3RhcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHJlcXVlc3QuCisJCSAqIERvbid0IGNoYW5nZSB0aGUgc19zZ2UsIHNfY3VyX3NnZSwgb3Igc19jdXJfc2l6ZS4KKwkJICogU2VlIGlwYXRoX2RvX3JjX3NlbmQoKS4KKwkJICovCisJCXN3aXRjaCAod3FlLT53ci5vcGNvZGUpIHsKKwkJY2FzZSBJQl9XUl9TRU5EOgorCQljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06CisJCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk7CisJCQlicmVhazsKKworCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKKwkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJCQlxcC0+c19zdGF0ZSA9CisJCQkJT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIFRoaXMgY2FzZSBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIGl0cyBvbmx5CisJCQkgKiBvbmUgUFNOIHBlciByZXEuCisJCQkgKi8KKwkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJfQorCX0KKworZG9uZToKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZxcC0+c190YXNrKTsKKworYmFpbDoKKwlyZXR1cm47Cit9CisKKy8qKgorICogcmVzZXRfcHNuIC0gcmVzZXQgdGhlIFFQIHN0YXRlIHRvIHNlbmQgc3RhcnRpbmcgZnJvbSBQU04KKyAqIEBxcDogdGhlIFFQCisgKiBAcHNuOiB0aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciB0byByZXN0YXJ0IGF0CisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9yY19yY3YoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIFJDIEFDSworICogZm9yIHRoZSBnaXZlbiBRUC4KKyAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwgd2l0aCB0aGUgUVAgc19sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X3BzbihzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgcHNuKQoreworCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7CisJdTMyIG47CisKKwluID0gcXAtPnNfY3VyOworCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJZm9yICg7OykgeworCQlpZiAoKytuID09IHFwLT5zX3NpemUpCisJCQluID0gMDsKKwkJaWYgKG4gPT0gcXAtPnNfdGFpbCkgeworCQkJaWYgKGlwYXRoX2NtcDI0KHBzbiwgcXAtPnNfbmV4dF9wc24pID49IDApIHsKKwkJCQlxcC0+c19jdXIgPSBuOworCQkJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIG4pOworCQlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPCAwKQorCQkJYnJlYWs7CisJCXFwLT5zX2N1ciA9IG47CisJfQorCXFwLT5zX3BzbiA9IHBzbjsKKworCS8qCisJICogU2V0IHRoZSBzdGF0ZSB0byByZXN0YXJ0IGluIHRoZSBtaWRkbGUgb2YgYQorCSAqIHJlcXVlc3QuICBEb24ndCBjaGFuZ2UgdGhlIHNfc2dlLCBzX2N1cl9zZ2UsIG9yCisJICogc19jdXJfc2l6ZS4gIFNlZSBpcGF0aF9kb19yY19zZW5kKCkuCisJICovCisJc3dpdGNoICh3cWUtPndyLm9wY29kZSkgeworCWNhc2UgSUJfV1JfU0VORDoKKwljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06CisJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKTsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgorCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKTsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTUlERExFKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBUaGlzIGNhc2Ugc2hvdWxkbid0IGhhcHBlbiBzaW5jZSBpdHMgb25seQorCQkgKiBvbmUgUFNOIHBlciByZXEuCisJCSAqLworCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJfQorfQorCisvKioKKyAqIGRvX3JjX2FjayAtIHByb2Nlc3MgYW4gaW5jb21pbmcgUkMgQUNLCisgKiBAcXA6IHRoZSBRUCB0aGUgQUNLIGNhbWUgaW4gb24KKyAqIEBwc246IHRoZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBBQ0sKKyAqIEBvcGNvZGU6IHRoZSBvcGNvZGUgb2YgdGhlIHJlcXVlc3QgdGhhdCByZXN1bHRlZCBpbiB0aGUgQUNLCisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9yY19yY3YoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIFJDIEFDSworICogZm9yIHRoZSBnaXZlbiBRUC4KKyAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwgd2l0aCB0aGUgUVAgc19sb2NrIGhlbGQuCisgKiBSZXR1cm5zIDEgaWYgT0ssIDAgaWYgY3VycmVudCBvcGVyYXRpb24gc2hvdWxkIGJlIGFib3J0ZWQgKE5BSykuCisgKi8KK3N0YXRpYyBpbnQgZG9fcmNfYWNrKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiBhZXRoLCB1MzIgcHNuLCBpbnQgb3Bjb2RlKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIFFQIGZyb20gdGhlIHRpbWVvdXQgcXVldWUgKG9yIFJOUiB0aW1lb3V0IHF1ZXVlKS4KKwkgKiBJZiBpcGF0aF9pYl90aW1lcigpIGhhcyBhbHJlYWR5IHJlbW92ZWQgaXQsCisJICogaXQncyBPSyBzaW5jZSB3ZSBob2xkIHRoZSBRUCBzX2xvY2sgYW5kIGlwYXRoX3Jlc3RhcnRfcmMoKQorCSAqIGp1c3Qgd29uJ3QgZmluZCBhbnl0aGluZyB0byByZXN0YXJ0IGlmIHdlIEFDSyBldmVyeXRoaW5nLgorCSAqLworCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOworCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBOQUtzIGltcGxpY2l0bHkgQUNLIG91dHN0YW5kaW5nIFNFTkQgYW5kIFJETUEgd3JpdGUKKwkgKiByZXF1ZXN0cyBhbmQgaW1wbGljaXRseSBOQUsgUkRNQSByZWFkIGFuZCBhdG9taWMgcmVxdWVzdHMgaXNzdWVkCisJICogYmVmb3JlIHRoZSBOQUsnZWQgcmVxdWVzdC4gIFRoZSBNU04gd29uJ3QgaW5jbHVkZSB0aGUgTkFLJ2VkCisJICogcmVxdWVzdCBidXQgd2lsbCBpbmNsdWRlIGFuIEFDSydlZCByZXF1ZXN0KHMpLgorCSAqLworCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfbGFzdCk7CisKKwkvKiBOb3RoaW5nIGlzIHBlbmRpbmcgdG8gQUNLL05BSy4gKi8KKwlpZiAocXAtPnNfbGFzdCA9PSBxcC0+c190YWlsKQorCQlnb3RvIGJhaWw7CisKKwkvKgorCSAqIFRoZSBNU04gbWlnaHQgYmUgZm9yIGEgbGF0ZXIgV1FFIHRoYW4gdGhlIFBTTiBpbmRpY2F0ZXMgc28KKwkgKiBvbmx5IGNvbXBsZXRlIFdRRXMgdGhhdCB0aGUgUFNOIGZpbmlzaGVzLgorCSAqLworCXdoaWxlIChpcGF0aF9jbXAyNChwc24sIHdxZS0+bHBzbikgPj0gMCkgeworCQkvKiBJZiB3ZSBhcmUgQUNLaW5nIGEgV1FFLCB0aGUgTVNOIHNob3VsZCBiZSA+PSB0aGUgU1NOLiAqLworCQlpZiAoaXBhdGhfY21wMjQoYWV0aCwgd3FlLT5zc24pIDwgMCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBJZiB0aGlzIHJlcXVlc3QgaXMgYSBSRE1BIHJlYWQgb3IgYXRvbWljLCBhbmQgdGhlIEFDSyBpcworCQkgKiBmb3IgYSBsYXRlciBvcGVyYXRpb24sIHRoaXMgQUNLIE5BS3MgdGhlIFJETUEgcmVhZCBvcgorCQkgKiBhdG9taWMuICBJbiBvdGhlciB3b3Jkcywgb25seSBhIFJETUFfUkVBRF9MQVNUIG9yIE9OTFkKKwkJICogY2FuIEFDSyBhIFJETUEgcmVhZCBhbmQgbGlrZXdpc2UgZm9yIGF0b21pYyBvcHMuICBOb3RlCisJCSAqIHRoYXQgdGhlIE5BSyBjYXNlIGNhbiBvbmx5IGhhcHBlbiBpZiByZWxheGVkIG9yZGVyaW5nIGlzCisJCSAqIHVzZWQgYW5kIHJlcXVlc3RzIGFyZSBzZW50IGFmdGVyIGFuIFJETUEgcmVhZCBvciBhdG9taWMKKwkJICogaXMgc2VudCBidXQgYmVmb3JlIHRoZSByZXNwb25zZSBpcyByZWNlaXZlZC4KKwkJICovCisJCWlmICgod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEICYmCisJCSAgICAgb3Bjb2RlICE9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKSkgfHwKKwkJICAgICgod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQIHx8CisJCSAgICAgIHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREKSAmJgorCQkgICAgIChvcGNvZGUgIT0gT1AoQVRPTUlDX0FDS05PV0xFREdFKSB8fAorCQkgICAgICBpcGF0aF9jbXAyNCh3cWUtPnBzbiwgcHNuKSAhPSAwKSkpIHsKKwkJCS8qCisJCQkgKiBUaGUgbGFzdCB2YWxpZCBQU04gc2VlbiBpcyB0aGUgcHJldmlvdXMKKwkJCSAqIHJlcXVlc3Qncy4KKwkJCSAqLworCQkJcXAtPnNfbGFzdF9wc24gPSB3cWUtPnBzbiAtIDE7CisJCQkvKiBSZXRyeSB0aGlzIHJlcXVlc3QuICovCisJCQlpcGF0aF9yZXN0YXJ0X3JjKHFwLCB3cWUtPnBzbiwgJndjKTsKKwkJCS8qCisJCQkgKiBObyBuZWVkIHRvIHByb2Nlc3MgdGhlIEFDSy9OQUsgc2luY2Ugd2UgYXJlCisJCQkgKiByZXN0YXJ0aW5nIGFuIGVhcmxpZXIgcmVxdWVzdC4KKwkJCSAqLworCQkJZ290byBiYWlsOworCQl9CisJCS8qIFBvc3QgYSBzZW5kIGNvbXBsZXRpb24gcXVldWUgZW50cnkgaWYgcmVxdWVzdGVkLiAqLworCQlpZiAoIXRlc3RfYml0KElQQVRIX1NfU0lHTkFMX1JFUV9XUiwgJnFwLT5zX2ZsYWdzKSB8fAorCQkgICAgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU0lHTkFMRUQpKSB7CisJCQl3Yy53cl9pZCA9IHdxZS0+d3Iud3JfaWQ7CisJCQl3Yy5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCQkJd2Mub3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJCXdjLnZlbmRvcl9lcnIgPSAwOworCQkJd2MuYnl0ZV9sZW4gPSB3cWUtPmxlbmd0aDsKKwkJCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwkJCXdjLnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQkJd2MucGtleV9pbmRleCA9IDA7CisJCQl3Yy5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7CisJCQl3Yy5zbCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJCXdjLnBvcnRfbnVtID0gMDsKKwkJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5zZW5kX2NxKSwgJndjLCAwKTsKKwkJfQorCQlxcC0+c19yZXRyeSA9IHFwLT5zX3JldHJ5X2NudDsKKwkJLyoKKwkJICogSWYgd2UgYXJlIGNvbXBsZXRpbmcgYSByZXF1ZXN0IHdoaWNoIGlzIGluIHRoZSBwcm9jZXNzIG9mCisJCSAqIGJlaW5nIHJlc2VudCwgd2UgY2FuIHN0b3AgcmVzZW5kaW5nIGl0IHNpbmNlIHdlIGtub3cgdGhlCisJCSAqIHJlc3BvbmRlciBoYXMgYWxyZWFkeSBzZWVuIGl0LgorCQkgKi8KKwkJaWYgKHFwLT5zX2xhc3QgPT0gcXAtPnNfY3VyKSB7CisJCQlpZiAoKytxcC0+c19jdXIgPj0gcXAtPnNfc2l6ZSkKKwkJCQlxcC0+c19jdXIgPSAwOworCQkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19jdXIpOworCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCQkJcXAtPnNfcHNuID0gd3FlLT5wc247CisJCX0KKwkJaWYgKCsrcXAtPnNfbGFzdCA+PSBxcC0+c19zaXplKQorCQkJcXAtPnNfbGFzdCA9IDA7CisJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfbGFzdCk7CisJCWlmIChxcC0+c19sYXN0ID09IHFwLT5zX3RhaWwpCisJCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGFldGggPj4gMjkpIHsKKwljYXNlIDA6CQkvKiBBQ0sgKi8KKwkJZGV2LT5uX3JjX2Fja3MrKzsKKwkJLyogSWYgdGhpcyBpcyBhIHBhcnRpYWwgQUNLLCByZXNldCB0aGUgcmV0cmFuc21pdCB0aW1lci4gKi8KKwkJaWYgKHFwLT5zX2xhc3QgIT0gcXAtPnNfdGFpbCkgeworCQkJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZxcC0+dGltZXJ3YWl0LAorCQkJCSAgICAgICZkZXYtPnBlbmRpbmdbZGV2LT5wZW5kaW5nX2luZGV4XSk7CisJCQlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQl9CisJCWlwYXRoX2dldF9jcmVkaXQocXAsIGFldGgpOworCQlxcC0+c19ybnJfcmV0cnkgPSBxcC0+c19ybnJfcmV0cnlfY250OworCQlxcC0+c19yZXRyeSA9IHFwLT5zX3JldHJ5X2NudDsKKwkJcXAtPnNfbGFzdF9wc24gPSBwc247CisJCXJldCA9IDE7CisJCWdvdG8gYmFpbDsKKworCWNhc2UgMToJCS8qIFJOUiBOQUsgKi8KKwkJZGV2LT5uX3Jucl9uYWtzKys7CisJCWlmIChxcC0+c19ybnJfcmV0cnkgPT0gMCkgeworCQkJaWYgKHFwLT5zX2xhc3QgPT0gcXAtPnNfdGFpbCkKKwkJCQlnb3RvIGJhaWw7CisKKwkJCXdjLnN0YXR1cyA9IElCX1dDX1JOUl9SRVRSWV9FWENfRVJSOworCQkJZ290byBjbGFzc19iOworCQl9CisJCWlmIChxcC0+c19ybnJfcmV0cnlfY250IDwgNykKKwkJCXFwLT5zX3Jucl9yZXRyeS0tOworCQlpZiAocXAtPnNfbGFzdCA9PSBxcC0+c190YWlsKQorCQkJZ290byBiYWlsOworCisJCS8qIFRoZSBsYXN0IHZhbGlkIFBTTiBzZWVuIGlzIHRoZSBwcmV2aW91cyByZXF1ZXN0J3MuICovCisJCXFwLT5zX2xhc3RfcHNuID0gd3FlLT5wc24gLSAxOworCisJCWRldi0+bl9yY19yZXNlbmRzICs9IChpbnQpcXAtPnNfcHNuIC0gKGludClwc247CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIHN0YXJ0aW5nIHRoZSByZXF1ZXN0IGZyb20gdGhlIGJlZ2lubmluZywgbGV0CisJCSAqIHRoZSBub3JtYWwgc2VuZCBjb2RlIGhhbmRsZSBpbml0aWFsaXphdGlvbi4KKwkJICovCisJCXFwLT5zX2N1ciA9IHFwLT5zX2xhc3Q7CisJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfY3VyKTsKKwkJaWYgKGlwYXRoX2NtcDI0KHBzbiwgd3FlLT5wc24pIDw9IDApIHsKKwkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJCXFwLT5zX3BzbiA9IHdxZS0+cHNuOworCQl9IGVsc2UKKwkJCXJlc2V0X3BzbihxcCwgcHNuKTsKKworCQlxcC0+c19ybnJfdGltZW91dCA9CisJCQlpYl9pcGF0aF9ybnJfdGFibGVbKGFldGggPj4gSVBTX0FFVEhfQ1JFRElUX1NISUZUKSAmCisJCQkJCSAgIElQU19BRVRIX0NSRURJVF9NQVNLXTsKKwkJaXBhdGhfaW5zZXJ0X3Jucl9xdWV1ZShxcCk7CisJCWdvdG8gYmFpbDsKKworCWNhc2UgMzoJCS8qIE5BSyAqLworCQkvKiBUaGUgbGFzdCB2YWxpZCBQU04gc2VlbiBpcyB0aGUgcHJldmlvdXMgcmVxdWVzdCdzLiAqLworCQlpZiAocXAtPnNfbGFzdCAhPSBxcC0+c190YWlsKQorCQkJcXAtPnNfbGFzdF9wc24gPSB3cWUtPnBzbiAtIDE7CisJCXN3aXRjaCAoKGFldGggPj4gSVBTX0FFVEhfQ1JFRElUX1NISUZUKSAmCisJCQlJUFNfQUVUSF9DUkVESVRfTUFTSykgeworCQljYXNlIDA6CS8qIFBTTiBzZXF1ZW5jZSBlcnJvciAqLworCQkJZGV2LT5uX3NlcV9uYWtzKys7CisJCQkvKgorCQkJICogQmFjayB1cCB0byB0aGUgcmVzcG9uZGVyJ3MgZXhwZWN0ZWQgUFNOLiAgWFhYCisJCQkgKiBOb3RlIHRoYXQgd2UgbWlnaHQgZ2V0IGEgTkFLIGluIHRoZSBtaWRkbGUgb2YgYW4KKwkJCSAqIFJETUEgUkVBRCByZXNwb25zZSB3aGljaCB0ZXJtaW5hdGVzIHRoZSBSRE1BCisJCQkgKiBSRUFELgorCQkJICovCisJCQlpZiAocXAtPnNfbGFzdCA9PSBxcC0+c190YWlsKQorCQkJCWJyZWFrOworCisJCQlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPCAwKQorCQkJCWJyZWFrOworCisJCQkvKiBSZXRyeSB0aGUgcmVxdWVzdC4gKi8KKwkJCWlwYXRoX3Jlc3RhcnRfcmMocXAsIHBzbiwgJndjKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMToJLyogSW52YWxpZCBSZXF1ZXN0ICovCisJCQl3Yy5zdGF0dXMgPSBJQl9XQ19SRU1fSU5WX1JFUV9FUlI7CisJCQlkZXYtPm5fb3RoZXJfbmFrcysrOworCQkJZ290byBjbGFzc19iOworCisJCWNhc2UgMjoJLyogUmVtb3RlIEFjY2VzcyBFcnJvciAqLworCQkJd2Muc3RhdHVzID0gSUJfV0NfUkVNX0FDQ0VTU19FUlI7CisJCQlkZXYtPm5fb3RoZXJfbmFrcysrOworCQkJZ290byBjbGFzc19iOworCisJCWNhc2UgMzoJLyogUmVtb3RlIE9wZXJhdGlvbiBFcnJvciAqLworCQkJd2Muc3RhdHVzID0gSUJfV0NfUkVNX09QX0VSUjsKKwkJCWRldi0+bl9vdGhlcl9uYWtzKys7CisJCWNsYXNzX2I6CisJCQl3Yy53cl9pZCA9IHdxZS0+d3Iud3JfaWQ7CisJCQl3Yy5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOworCQkJd2MudmVuZG9yX2VyciA9IDA7CisJCQl3Yy5ieXRlX2xlbiA9IDA7CisJCQl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJCQl3Yy5zcmNfcXAgPSBxcC0+cmVtb3RlX3FwbjsKKwkJCXdjLnBrZXlfaW5kZXggPSAwOworCQkJd2Muc2xpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCQkJd2Muc2wgPSBxcC0+cmVtb3RlX2FoX2F0dHIuc2w7CisJCQl3Yy5kbGlkX3BhdGhfYml0cyA9IDA7CisJCQl3Yy5wb3J0X251bSA9IDA7CisJCQlpcGF0aF9zcWVycm9yX3FwKHFwLCAmd2MpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIElnbm9yZSBvdGhlciByZXNlcnZlZCBOQUsgZXJyb3IgY29kZXMgKi8KKwkJCWdvdG8gcmVzZXJ2ZWQ7CisJCX0KKwkJcXAtPnNfcm5yX3JldHJ5ID0gcXAtPnNfcm5yX3JldHJ5X2NudDsKKwkJZ290byBiYWlsOworCisJZGVmYXVsdDoJCS8qIDI6IHJlc2VydmVkICovCisJcmVzZXJ2ZWQ6CisJCS8qIElnbm9yZSByZXNlcnZlZCBOQUsgY29kZXMuICovCisJCWdvdG8gYmFpbDsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9yY19yY3ZfcmVzcCAtIHByb2Nlc3MgYW4gaW5jb21pbmcgUkMgcmVzcG9uc2UgcGFja2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHRoaXMgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBvaGRyOiB0aGUgb3RoZXIgaGVhZGVycyBmb3IgdGhpcyBwYWNrZXQKKyAqIEBkYXRhOiB0aGUgcGFja2V0IGRhdGEKKyAqIEB0bGVuOiB0aGUgcGFja2V0IGxlbmd0aAorICogQHFwOiB0aGUgUVAgZm9yIHRoaXMgcGFja2V0CisgKiBAb3Bjb2RlOiB0aGUgb3Bjb2RlIGZvciB0aGlzIHBhY2tldAorICogQHBzbjogdGhlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgcGFja2V0CisgKiBAaGRyc2l6ZTogdGhlIGhlYWRlciBsZW5ndGgKKyAqIEBwbXR1OiB0aGUgcGF0aCBNVFUKKyAqIEBoZWFkZXJfaW5fZGF0YTogdHJ1ZSBpZiBwYXJ0IG9mIHRoZSBoZWFkZXIgZGF0YSBpcyBpbiB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3JjX3JjdigpIHRvIHByb2Nlc3MgYW4gaW5jb21pbmcgUkMgcmVzcG9uc2UKKyAqIHBhY2tldCBmb3IgdGhlIGdpdmVuIFFQLgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlwYXRoX3JjX3Jjdl9yZXNwKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LAorCQkJCSAgICAgc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHIsCisJCQkJICAgICB2b2lkICpkYXRhLCB1MzIgdGxlbiwKKwkJCQkgICAgIHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCQkJICAgICB1MzIgb3Bjb2RlLAorCQkJCSAgICAgdTMyIHBzbiwgdTMyIGhkcnNpemUsIHUzMiBwbXR1LAorCQkJCSAgICAgaW50IGhlYWRlcl9pbl9kYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGliX3djIHdjOworCWludCBkaWZmOworCXUzMiBwYWQ7CisJdTMyIGFldGg7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCisJLyogSWdub3JlIGludmFsaWQgcmVzcG9uc2VzLiAqLworCWlmIChpcGF0aF9jbXAyNChwc24sIHFwLT5zX25leHRfcHNuKSA+PSAwKQorCQlnb3RvIGFja19kb25lOworCisJLyogSWdub3JlIGR1cGxpY2F0ZSByZXNwb25zZXMuICovCisJZGlmZiA9IGlwYXRoX2NtcDI0KHBzbiwgcXAtPnNfbGFzdF9wc24pOworCWlmICh1bmxpa2VseShkaWZmIDw9IDApKSB7CisJCS8qIFVwZGF0ZSBjcmVkaXRzIGZvciAiZ2hvc3QiIEFDS3MgKi8KKwkJaWYgKGRpZmYgPT0gMCAmJiBvcGNvZGUgPT0gT1AoQUNLTk9XTEVER0UpKSB7CisJCQlpZiAoIWhlYWRlcl9pbl9kYXRhKQorCQkJCWFldGggPSBiZTMyX3RvX2NwdShvaGRyLT51LmFldGgpOworCQkJZWxzZSB7CisJCQkJYWV0aCA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopIGRhdGEpWzBdKTsKKwkJCQlkYXRhICs9IHNpemVvZihfX2JlMzIpOworCQkJfQorCQkJaWYgKChhZXRoID4+IDI5KSA9PSAwKQorCQkJCWlwYXRoX2dldF9jcmVkaXQocXAsIGFldGgpOworCQl9CisJCWdvdG8gYWNrX2RvbmU7CisJfQorCisJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIE9QKEFDS05PV0xFREdFKToKKwljYXNlIE9QKEFUT01JQ19BQ0tOT1dMRURHRSk6CisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpOgorCQlpZiAoIWhlYWRlcl9pbl9kYXRhKQorCQkJYWV0aCA9IGJlMzJfdG9fY3B1KG9oZHItPnUuYWV0aCk7CisJCWVsc2UgeworCQkJYWV0aCA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopIGRhdGEpWzBdKTsKKwkJCWRhdGEgKz0gc2l6ZW9mKF9fYmUzMik7CisJCX0KKwkJaWYgKG9wY29kZSA9PSBPUChBVE9NSUNfQUNLTk9XTEVER0UpKQorCQkJKih1NjQgKikgcXAtPnNfc2dlLnNnZS52YWRkciA9ICoodTY0ICopIGRhdGE7CisJCWlmICghZG9fcmNfYWNrKHFwLCBhZXRoLCBwc24sIG9wY29kZSkgfHwKKwkJICAgIG9wY29kZSAhPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpKQorCQkJZ290byBhY2tfZG9uZTsKKwkJaGRyc2l6ZSArPSA0OworCQkvKgorCQkgKiBkb19yY19hY2soKSBoYXMgYWxyZWFkeSBjaGVja2VkIHRoZSBQU04gc28gc2tpcAorCQkgKiB0aGUgc2VxdWVuY2UgY2hlY2suCisJCSAqLworCQlnb3RvIHJkbWFfcmVhZDsKKworCWNhc2UgT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk6CisJCS8qIG5vIEFFVEgsIG5vIEFDSyAqLworCQlpZiAodW5saWtlbHkoaXBhdGhfY21wMjQocHNuLCBxcC0+c19sYXN0X3BzbiArIDEpKSkgeworCQkJZGV2LT5uX3JkbWFfc2VxKys7CisJCQlpcGF0aF9yZXN0YXJ0X3JjKHFwLCBxcC0+c19sYXN0X3BzbiArIDEsICZ3Yyk7CisJCQlnb3RvIGFja19kb25lOworCQl9CisJcmRtYV9yZWFkOgorCWlmICh1bmxpa2VseShxcC0+c19zdGF0ZSAhPSBPUChSRE1BX1JFQURfUkVRVUVTVCkpKQorCQlnb3RvIGFja19kb25lOworCWlmICh1bmxpa2VseSh0bGVuICE9IChoZHJzaXplICsgcG10dSArIDQpKSkKKwkJZ290byBhY2tfZG9uZTsKKwlpZiAodW5saWtlbHkocG10dSA+PSBxcC0+c19sZW4pKQorCQlnb3RvIGFja19kb25lOworCS8qIFdlIGdvdCBhIHJlc3BvbnNlIHNvIHVwZGF0ZSB0aGUgdGltZW91dC4gKi8KKwlpZiAodW5saWtlbHkocXAtPnNfbGFzdCA9PSBxcC0+c190YWlsIHx8CisJCSAgICAgZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19sYXN0KS0+d3Iub3Bjb2RlICE9CisJCSAgICAgSUJfV1JfUkRNQV9SRUFEKSkKKwkJZ290byBhY2tfZG9uZTsKKwlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwlpZiAocXAtPnNfcm5yX3RpbWVvdXQgPT0gMCAmJiAhbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCWxpc3RfbW92ZV90YWlsKCZxcC0+dGltZXJ3YWl0LAorCQkJICAgICAgICZkZXYtPnBlbmRpbmdbZGV2LT5wZW5kaW5nX2luZGV4XSk7CisJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwkvKgorCSAqIFVwZGF0ZSB0aGUgUkRNQSByZWNlaXZlIHN0YXRlIGJ1dCBkbyB0aGUgY29weSB3L28gaG9sZGluZyB0aGUKKwkgKiBsb2NrcyBhbmQgYmxvY2tpbmcgaW50ZXJydXB0cy4gIFhYWCBZZXQgYW5vdGhlciBwbGFjZSB0aGF0CisJICogYWZmZWN0cyByZWxheGVkIFJETUEgb3JkZXIgc2luY2Ugd2UgZG9uJ3Qgd2FudCBzX3NnZSBtb2RpZmllZC4KKwkgKi8KKwlxcC0+c19sZW4gLT0gcG10dTsKKwlxcC0+c19sYXN0X3BzbiA9IHBzbjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJaXBhdGhfY29weV9zZ2UoJnFwLT5zX3NnZSwgZGF0YSwgcG10dSk7CisJZ290byBiYWlsOworCisJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk6CisJCS8qIEFDS3MgUkVBRCByZXEuICovCisJCWlmICh1bmxpa2VseShpcGF0aF9jbXAyNChwc24sIHFwLT5zX2xhc3RfcHNuICsgMSkpKSB7CisJCQlkZXYtPm5fcmRtYV9zZXErKzsKKwkJCWlwYXRoX3Jlc3RhcnRfcmMocXAsIHFwLT5zX2xhc3RfcHNuICsgMSwgJndjKTsKKwkJCWdvdG8gYWNrX2RvbmU7CisJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFJETUFfUkVBRF9SRVNQT05TRV9PTkxZKToKKwkJaWYgKHVubGlrZWx5KHFwLT5zX3N0YXRlICE9IE9QKFJETUFfUkVBRF9SRVFVRVNUKSkpCisJCQlnb3RvIGFja19kb25lOworCQkvKgorCQkgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5LgorCQkgKi8KKwkJcGFkID0gKGJlMzJfdG9fY3B1KG9oZHItPmJ0aFswXSkgPj4gMjApICYgMzsKKwkJLyoKKwkJICogQ2hlY2sgdGhhdCB0aGUgZGF0YSBzaXplIGlzID49IDEgJiYgPD0gcG10dS4KKwkJICogUmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdGhlIEFFVEggaGVhZGVyICg0KSBhbmQKKwkJICogSUNSQyAoNCkuCisJCSAqLworCQlpZiAodW5saWtlbHkodGxlbiA8PSAoaGRyc2l6ZSArIHBhZCArIDgpKSkgeworCQkJLyoKKwkJCSAqIFhYWCBOZWVkIHRvIGdlbmVyYXRlIGFuIGVycm9yIENRCisJCQkgKiBlbnRyeS4KKwkJCSAqLworCQkJZ290byBhY2tfZG9uZTsKKwkJfQorCQl0bGVuIC09IGhkcnNpemUgKyBwYWQgKyA4OworCQlpZiAodW5saWtlbHkodGxlbiAhPSBxcC0+c19sZW4pKSB7CisJCQkvKgorCQkJICogWFhYIE5lZWQgdG8gZ2VuZXJhdGUgYW4gZXJyb3IgQ1EKKwkJCSAqIGVudHJ5LgorCQkJICovCisJCQlnb3RvIGFja19kb25lOworCQl9CisJCWlmICghaGVhZGVyX2luX2RhdGEpCisJCQlhZXRoID0gYmUzMl90b19jcHUob2hkci0+dS5hZXRoKTsKKwkJZWxzZSB7CisJCQlhZXRoID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOworCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKKwkJfQorCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnNfc2dlLCBkYXRhLCB0bGVuKTsKKwkJaWYgKGRvX3JjX2FjayhxcCwgYWV0aCwgcHNuLCBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCkpKSB7CisJCQkvKgorCQkJICogQ2hhbmdlIHRoZSBzdGF0ZSBzbyB3ZSBjb250aW11ZQorCQkJICogcHJvY2Vzc2luZyBuZXcgcmVxdWVzdHMuCisJCQkgKi8KKwkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJfQorCQlnb3RvIGFja19kb25lOworCX0KKworYWNrX2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworYmFpbDoKKwlyZXR1cm47Cit9CisKKy8qKgorICogaXBhdGhfcmNfcmN2X2Vycm9yIC0gcHJvY2VzcyBhbiBpbmNvbWluZyBkdXBsaWNhdGUgb3IgZXJyb3IgUkMgcGFja2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHRoaXMgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBvaGRyOiB0aGUgb3RoZXIgaGVhZGVycyBmb3IgdGhpcyBwYWNrZXQKKyAqIEBkYXRhOiB0aGUgcGFja2V0IGRhdGEKKyAqIEBxcDogdGhlIFFQIGZvciB0aGlzIHBhY2tldAorICogQG9wY29kZTogdGhlIG9wY29kZSBmb3IgdGhpcyBwYWNrZXQKKyAqIEBwc246IHRoZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIHBhY2tldAorICogQGRpZmY6IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFBTTiBhbmQgdGhlIGV4cGVjdGVkIFBTTgorICogQGhlYWRlcl9pbl9kYXRhOiB0cnVlIGlmIHBhcnQgb2YgdGhlIGhlYWRlciBkYXRhIGlzIGluIHRoZSBkYXRhIGJ1ZmZlcgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2KCkgdG8gcHJvY2VzcyBhbiB1bmV4cGVjdGVkCisgKiBpbmNvbWluZyBSQyBwYWNrZXQgZm9yIHRoZSBnaXZlbiBRUC4KKyAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwuCisgKiBSZXR1cm4gMSBpZiBubyBtb3JlIHByb2Nlc3NpbmcgaXMgbmVlZGVkOyBvdGhlcndpc2UgcmV0dXJuIDAgdG8KKyAqIHNjaGVkdWxlIGEgcmVzcG9uc2UgdG8gYmUgc2VudCBhbmQgdGhlIHNfbG9jayB1bmxvY2tlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXBhdGhfcmNfcmN2X2Vycm9yKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LAorCQkJCSAgICAgc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHIsCisJCQkJICAgICB2b2lkICpkYXRhLAorCQkJCSAgICAgc3RydWN0IGlwYXRoX3FwICpxcCwKKwkJCQkgICAgIHUzMiBvcGNvZGUsCisJCQkJICAgICB1MzIgcHNuLAorCQkJCSAgICAgaW50IGRpZmYsCisJCQkJICAgICBpbnQgaGVhZGVyX2luX2RhdGEpCit7CisJc3RydWN0IGliX3JldGggKnJldGg7CisKKwlpZiAoZGlmZiA+IDApIHsKKwkJLyoKKwkJICogUGFja2V0IHNlcXVlbmNlIGVycm9yLgorCQkgKiBBIE5BSyB3aWxsIEFDSyBlYXJsaWVyIHNlbmRzIGFuZCBSRE1BIHdyaXRlcy4KKwkJICogRG9uJ3QgcXVldWUgdGhlIE5BSyBpZiBhIFJETUEgcmVhZCwgYXRvbWljLCBvcgorCQkgKiBOQUsgaXMgcGVuZGluZyB0aG91Z2guCisJCSAqLworCQlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCQlpZiAoKHFwLT5zX2Fja19zdGF0ZSA+PSBPUChSRE1BX1JFQURfUkVRVUVTVCkgJiYKKwkJICAgICBxcC0+c19hY2tfc3RhdGUgIT0gSUJfT1BDT0RFX0FDS05PV0xFREdFKSB8fAorCQkgICAgcXAtPnNfbmFrX3N0YXRlICE9IDApIHsKKwkJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlxcC0+c19hY2tfc3RhdGUgPSBPUChTRU5EX09OTFkpOworCQlxcC0+c19uYWtfc3RhdGUgPSBJQl9OQUtfUFNOX0VSUk9SOworCQkvKiBVc2UgdGhlIGV4cGVjdGVkIFBTTi4gKi8KKwkJcXAtPnNfYWNrX3BzbiA9IHFwLT5yX3BzbjsKKwkJZ290byByZXNjaGVkOworCX0KKworCS8qCisJICogSGFuZGxlIGEgZHVwbGljYXRlIHJlcXVlc3QuICBEb24ndCByZS1leGVjdXRlIFNFTkQsIFJETUEKKwkgKiB3cml0ZSBvciBhdG9taWMgb3AuICBEb24ndCBOQUsgZXJyb3JzLCBqdXN0IHNpbGVudGx5IGRyb3AKKwkgKiB0aGUgZHVwbGljYXRlIHJlcXVlc3QuICBOb3RlIHRoYXQgcl9zZ2UsIHJfbGVuLCBhbmQKKwkgKiByX3Jjdl9sZW4gbWF5IGJlIGluIHVzZSBzbyBkb24ndCBtb2RpZnkgdGhlbS4KKwkgKgorCSAqIFdlIGFyZSBzdXBwb3NlZCB0byBBQ0sgdGhlIGVhcmxpZXN0IGR1cGxpY2F0ZSBQU04gYnV0IHdlCisJICogY2FuIGNvYWxlc2NlIGFuIG91dHN0YW5kaW5nIGR1cGxpY2F0ZSBBQ0suICBXZSBoYXZlIHRvCisJICogc2VuZCB0aGUgZWFybGllc3Qgc28gdGhhdCBSRE1BIHJlYWRzIGNhbiBiZSByZXN0YXJ0ZWQgYXQKKwkgKiB0aGUgcmVxdWVzdGVyJ3MgZXhwZWN0ZWQgUFNOLgorCSAqLworCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisJaWYgKHFwLT5zX2Fja19zdGF0ZSAhPSBJQl9PUENPREVfQUNLTk9XTEVER0UgJiYKKwkgICAgaXBhdGhfY21wMjQocHNuLCBxcC0+c19hY2tfcHNuKSA+PSAwKSB7CisJCWlmIChxcC0+c19hY2tfc3RhdGUgPCBJQl9PUENPREVfUkRNQV9SRUFEX1JFUVVFU1QpCisJCQlxcC0+c19hY2tfcHNuID0gcHNuOworCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCWdvdG8gZG9uZTsKKwl9CisJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIE9QKFJETUFfUkVBRF9SRVFVRVNUKToKKwkJLyoKKwkJICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIG5vdCBjaGFuZ2Ugc19yZG1hX3NnZQorCQkgKiB3aGlsZSBpcGF0aF9kb19yY19zZW5kKCkgaXMgdXNpbmcgaXQgYW5kIG5vdAorCQkgKiBob2xkaW5nIHRoZSBzX2xvY2suCisJCSAqLworCQlpZiAocXAtPnNfYWNrX3N0YXRlICE9IE9QKEFDS05PV0xFREdFKSAmJgorCQkgICAgcXAtPnNfYWNrX3N0YXRlID49IElCX09QQ09ERV9SRE1BX1JFQURfUkVRVUVTVCkgeworCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQkJZGV2LT5uX3JkbWFfZHVwX2J1c3krKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBSRVRIIGNvbWVzIGFmdGVyIEJUSCAqLworCQlpZiAoIWhlYWRlcl9pbl9kYXRhKQorCQkJcmV0aCA9ICZvaGRyLT51LnJjLnJldGg7CisJCWVsc2UgeworCQkJcmV0aCA9IChzdHJ1Y3QgaWJfcmV0aCAqKWRhdGE7CisJCQlkYXRhICs9IHNpemVvZigqcmV0aCk7CisJCX0KKwkJcXAtPnNfcmRtYV9sZW4gPSBiZTMyX3RvX2NwdShyZXRoLT5sZW5ndGgpOworCQlpZiAocXAtPnNfcmRtYV9sZW4gIT0gMCkgeworCQkJdTMyIHJrZXkgPSBiZTMyX3RvX2NwdShyZXRoLT5ya2V5KTsKKwkJCXU2NCB2YWRkciA9IGJlNjRfdG9fY3B1KHJldGgtPnZhZGRyKTsKKwkJCWludCBvazsKKworCQkJLyoKKwkJCSAqIEFkZHJlc3MgcmFuZ2UgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUgb3JpZ2luYWwKKwkJCSAqIHJlcXVlc3QgYW5kIHN0YXJ0IG9uIHBtdHUgYm91bmRhcmllcy4KKwkJCSAqLworCQkJb2sgPSBpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5zX3JkbWFfc2dlLAorCQkJCQkgICBxcC0+c19yZG1hX2xlbiwgdmFkZHIsIHJrZXksCisJCQkJCSAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7CisJCQlpZiAodW5saWtlbHkoIW9rKSkKKwkJCQlnb3RvIGRvbmU7CisJCX0gZWxzZSB7CisJCQlxcC0+c19yZG1hX3NnZS5zZ19saXN0ID0gTlVMTDsKKwkJCXFwLT5zX3JkbWFfc2dlLm51bV9zZ2UgPSAwOworCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLm1yID0gTlVMTDsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnZS52YWRkciA9IE5VTEw7CisJCQlxcC0+c19yZG1hX3NnZS5zZ2UubGVuZ3RoID0gMDsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnZS5zZ2VfbGVuZ3RoID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgT1AoQ09NUEFSRV9TV0FQKToKKwljYXNlIE9QKEZFVENIX0FERCk6CisJCS8qCisJCSAqIENoZWNrIGZvciB0aGUgUFNOIG9mIHRoZSBsYXN0IGF0b21pYyBvcGVyYXRpb25zCisJCSAqIHBlcmZvcm1lZCBhbmQgcmVzZW5kIHRoZSByZXN1bHQgaWYgZm91bmQuCisJCSAqLworCQlpZiAoKHBzbiAmIElQU19QU05fTUFTSykgIT0gcXAtPnJfYXRvbWljX3BzbikgeworCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQkJZ290byBkb25lOworCQl9CisJCXFwLT5zX2Fja19hdG9taWMgPSBxcC0+cl9hdG9taWNfZGF0YTsKKwkJYnJlYWs7CisJfQorCXFwLT5zX2Fja19zdGF0ZSA9IG9wY29kZTsKKwlxcC0+c19uYWtfc3RhdGUgPSAwOworCXFwLT5zX2Fja19wc24gPSBwc247CityZXNjaGVkOgorCXJldHVybiAwOworCitkb25lOgorCXJldHVybiAxOworfQorCisvKioKKyAqIGlwYXRoX3JjX3JjdiAtIHByb2Nlc3MgYW4gaW5jb21pbmcgUkMgcGFja2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHRoaXMgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBoZHI6IHRoZSBoZWFkZXIgb2YgdGhpcyBwYWNrZXQKKyAqIEBoYXNfZ3JoOiB0cnVlIGlmIHRoZSBoZWFkZXIgaGFzIGEgR1JICisgKiBAZGF0YTogdGhlIHBhY2tldCBkYXRhCisgKiBAdGxlbjogdGhlIHBhY2tldCBsZW5ndGgKKyAqIEBxcDogdGhlIFFQIGZvciB0aGlzIHBhY2tldAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcXBfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBwYWNrZXQKKyAqIGZvciB0aGUgZ2l2ZW4gUVAuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsLgorICovCit2b2lkIGlwYXRoX3JjX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAorCQkgIGludCBoYXNfZ3JoLCB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKwl1MzIgb3Bjb2RlOworCXUzMiBoZHJzaXplOworCXUzMiBwc247CisJdTMyIHBhZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpYl93YyB3YzsKKwl1MzIgcG10dSA9IGliX210dV9lbnVtX3RvX2ludChxcC0+cGF0aF9tdHUpOworCWludCBkaWZmOworCXN0cnVjdCBpYl9yZXRoICpyZXRoOworCWludCBoZWFkZXJfaW5fZGF0YTsKKworCS8qIENoZWNrIGZvciBHUkggKi8KKwlpZiAoIWhhc19ncmgpIHsKKwkJb2hkciA9ICZoZHItPnUub3RoOworCQloZHJzaXplID0gOCArIDEyOwkvKiBMUkggKyBCVEggKi8KKwkJcHNuID0gYmUzMl90b19jcHUob2hkci0+YnRoWzJdKTsKKwkJaGVhZGVyX2luX2RhdGEgPSAwOworCX0gZWxzZSB7CisJCW9oZHIgPSAmaGRyLT51Lmwub3RoOworCQloZHJzaXplID0gOCArIDQwICsgMTI7CS8qIExSSCArIEdSSCArIEJUSCAqLworCQkvKgorCQkgKiBUaGUgaGVhZGVyIHdpdGggR1JIIGlzIDYwIGJ5dGVzIGFuZCB0aGUgY29yZSBkcml2ZXIgc2V0cworCQkgKiB0aGUgZWFnZXIgaGVhZGVyIGJ1ZmZlciBzaXplIHRvIDU2IGJ5dGVzIHNvIHRoZSBsYXN0IDQKKwkJICogYnl0ZXMgb2YgdGhlIEJUSCBoZWFkZXIgKFBTTikgaXMgaW4gdGhlIGRhdGEgYnVmZmVyLgorCQkgKi8KKwkJaGVhZGVyX2luX2RhdGEgPQorCQkJaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUoZGV2LT5kZCkgPT0gMTY7CisJCWlmIChoZWFkZXJfaW5fZGF0YSkgeworCQkJcHNuID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOworCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKKwkJfSBlbHNlCisJCQlwc24gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMl0pOworCX0KKwkvKgorCSAqIFRoZSBvcGNvZGUgaXMgaW4gdGhlIGxvdyBieXRlIHdoZW4gaXRzIGluIG5ldHdvcmsgb3JkZXIKKwkgKiAodG9wIGJ5dGUgd2hlbiBpbiBob3N0IG9yZGVyKS4KKwkgKi8KKwlvcGNvZGUgPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDI0OworCisJLyoKKwkgKiBQcm9jZXNzIHJlc3BvbnNlcyAoQUNLcykgYmVmb3JlIGFueXRoaW5nIGVsc2UuICBOb3RlIHRoYXQgdGhlCisJICogcGFja2V0IHNlcXVlbmNlIG51bWJlciB3aWxsIGJlIGZvciBzb21ldGhpbmcgaW4gdGhlIHNlbmQgd29yaworCSAqIHF1ZXVlIHJhdGhlciB0aGFuIHRoZSBleHBlY3RlZCByZWNlaXZlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIuCisJICogSW4gb3RoZXIgd29yZHMsIHRoaXMgUVAgaXMgdGhlIHJlcXVlc3Rlci4KKwkgKi8KKwlpZiAob3Bjb2RlID49IE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCkgJiYKKwkgICAgb3Bjb2RlIDw9IE9QKEFUT01JQ19BQ0tOT1dMRURHRSkpIHsKKwkJaXBhdGhfcmNfcmN2X3Jlc3AoZGV2LCBvaGRyLCBkYXRhLCB0bGVuLCBxcCwgb3Bjb2RlLCBwc24sCisJCQkJICBoZHJzaXplLCBwbXR1LCBoZWFkZXJfaW5fZGF0YSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCisJLyogQ29tcHV0ZSAyNCBiaXRzIHdvcnRoIG9mIGRpZmZlcmVuY2UuICovCisJZGlmZiA9IGlwYXRoX2NtcDI0KHBzbiwgcXAtPnJfcHNuKTsKKwlpZiAodW5saWtlbHkoZGlmZikpIHsKKwkJaWYgKGlwYXRoX3JjX3Jjdl9lcnJvcihkZXYsIG9oZHIsIGRhdGEsIHFwLCBvcGNvZGUsCisJCQkJICAgICAgIHBzbiwgZGlmZiwgaGVhZGVyX2luX2RhdGEpKQorCQkJZ290byBkb25lOworCQlnb3RvIHJlc2NoZWQ7CisJfQorCisJLyogQ2hlY2sgZm9yIG9wY29kZSBzZXF1ZW5jZSBlcnJvcnMuICovCisJc3dpdGNoIChxcC0+cl9zdGF0ZSkgeworCWNhc2UgT1AoU0VORF9GSVJTVCk6CisJY2FzZSBPUChTRU5EX01JRERMRSk6CisJCWlmIChvcGNvZGUgPT0gT1AoU0VORF9NSURETEUpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoU0VORF9MQVNUKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfTEFTVF9XSVRIX0lNTUVESUFURSkpCisJCQlicmVhazsKKwluYWNrX2ludjoKKwkvKgorCSAqIEEgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEgd3JpdGVzLiAgRG9uJ3QgcXVldWUgdGhlCisJICogTkFLIGlmIGEgUkRNQSByZWFkLCBhdG9taWMsIG9yIE5BSyBpcyBwZW5kaW5nIHRob3VnaC4KKwkgKi8KKwlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCWlmIChxcC0+c19hY2tfc3RhdGUgPj0gT1AoUkRNQV9SRUFEX1JFUVVFU1QpICYmCisJICAgIHFwLT5zX2Fja19zdGF0ZSAhPSBJQl9PUENPREVfQUNLTk9XTEVER0UpIHsKKwkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQlnb3RvIGRvbmU7CisJfQorCS8qIFhYWCBGbHVzaCBXUUVzICovCisJcXAtPnN0YXRlID0gSUJfUVBTX0VSUjsKKwlxcC0+c19hY2tfc3RhdGUgPSBPUChTRU5EX09OTFkpOworCXFwLT5zX25ha19zdGF0ZSA9IElCX05BS19JTlZBTElEX1JFUVVFU1Q7CisJcXAtPnNfYWNrX3BzbiA9IHFwLT5yX3BzbjsKKwlnb3RvIHJlc2NoZWQ7CisKKwljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgorCWNhc2UgT1AoUkRNQV9XUklURV9NSURETEUpOgorCQlpZiAob3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTUlERExFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpKQorCQkJYnJlYWs7CisJCWdvdG8gbmFja19pbnY7CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVFVRVNUKToKKwljYXNlIE9QKENPTVBBUkVfU1dBUCk6CisJY2FzZSBPUChGRVRDSF9BREQpOgorCQkvKgorCQkgKiBEcm9wIGFsbCBuZXcgcmVxdWVzdHMgdW50aWwgYSByZXNwb25zZSBoYXMgYmVlbiBzZW50LiAgQQorCQkgKiBuZXcgcmVxdWVzdCB0aGVuIEFDS3MgdGhlIFJETUEgcmVzcG9uc2Ugd2Ugc2VudC4gIFJlbGF4ZWQKKwkJICogb3JkZXJpbmcgd291bGQgYWxsb3cgbmV3IHJlcXVlc3RzIHRvIGJlIHByb2Nlc3NlZCBidXQgd2UKKwkJICogd291bGQgbmVlZCB0byBrZWVwIGEgcXVldWUgb2YgcndxZSdzIGZvciBhbGwgdGhhdCBhcmUgaW4KKwkJICogcHJvZ3Jlc3MuICBOb3RlIHRoYXQgd2UgY2FuJ3QgUk5SIE5BSyB0aGlzIHJlcXVlc3Qgc2luY2UKKwkJICogdGhlIFJETUEgUkVBRCBvciBhdG9taWMgcmVzcG9uc2UgaXMgYWxyZWFkeSBxdWV1ZWQgdG8gYmUKKwkJICogc2VudCAodW5sZXNzIHdlIGltcGxlbWVudCBhIHJlc3BvbnNlIHNlbmQgcXVldWUpLgorCQkgKi8KKwkJZ290byBkb25lOworCisJZGVmYXVsdDoKKwkJaWYgKG9wY29kZSA9PSBPUChTRU5EX01JRERMRSkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChTRU5EX0xBU1QpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoU0VORF9MQVNUX1dJVEhfSU1NRURJQVRFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTUlERExFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpKQorCQkJZ290byBuYWNrX2ludjsKKwkJYnJlYWs7CisJfQorCisJd2MuaW1tX2RhdGEgPSAwOworCXdjLndjX2ZsYWdzID0gMDsKKworCS8qIE9LLCBwcm9jZXNzIHRoZSBwYWNrZXQuICovCisJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIE9QKFNFTkRfRklSU1QpOgorCQlpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAwKSkgeworCQlybnJfbmFrOgorCQkJLyoKKwkJCSAqIEEgUk5SIE5BSyB3aWxsIEFDSyBlYXJsaWVyIHNlbmRzIGFuZCBSRE1BIHdyaXRlcy4KKwkJCSAqIERvbid0IHF1ZXVlIHRoZSBOQUsgaWYgYSBSRE1BIHJlYWQgb3IgYXRvbWljCisJCQkgKiBpcyBwZW5kaW5nIHRob3VnaC4KKwkJCSAqLworCQkJc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKKwkJCWlmIChxcC0+c19hY2tfc3RhdGUgPj0KKwkJCSAgICBPUChSRE1BX1JFQURfUkVRVUVTVCkgJiYKKwkJCSAgICBxcC0+c19hY2tfc3RhdGUgIT0gSUJfT1BDT0RFX0FDS05PV0xFREdFKSB7CisJCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJCQlxcC0+c19uYWtfc3RhdGUgPSBJQl9STlJfTkFLIHwgcXAtPnNfbWluX3Jucl90aW1lcjsKKwkJCXFwLT5zX2Fja19wc24gPSBxcC0+cl9wc247CisJCQlnb3RvIHJlc2NoZWQ7CisJCX0KKwkJcXAtPnJfcmN2X2xlbiA9IDA7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX01JRERMRSk6CisJY2FzZSBPUChSRE1BX1dSSVRFX01JRERMRSk6CisJc2VuZF9taWRkbGU6CisJCS8qIENoZWNrIGZvciBpbnZhbGlkIGxlbmd0aCBQTVRVIG9yIHBvc3RlZCByd3FlIGxlbi4gKi8KKwkJaWYgKHVubGlrZWx5KHRsZW4gIT0gKGhkcnNpemUgKyBwbXR1ICsgNCkpKQorCQkJZ290byBuYWNrX2ludjsKKwkJcXAtPnJfcmN2X2xlbiArPSBwbXR1OworCQlpZiAodW5saWtlbHkocXAtPnJfcmN2X2xlbiA+IHFwLT5yX2xlbikpCisJCQlnb3RvIG5hY2tfaW52OworCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBkYXRhLCBwbXR1KTsKKwkJYnJlYWs7CisKKwljYXNlIE9QKFJETUFfV1JJVEVfTEFTVF9XSVRIX0lNTUVESUFURSk6CisJCS8qIGNvbnN1bWUgUldRRSAqLworCQlpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAxKSkKKwkJCWdvdG8gcm5yX25hazsKKwkJZ290byBzZW5kX2xhc3RfaW1tOworCisJY2FzZSBPUChTRU5EX09OTFkpOgorCWNhc2UgT1AoU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKToKKwkJaWYgKCFpcGF0aF9nZXRfcndxZShxcCwgMCkpCisJCQlnb3RvIHJucl9uYWs7CisJCXFwLT5yX3Jjdl9sZW4gPSAwOworCQlpZiAob3Bjb2RlID09IE9QKFNFTkRfT05MWSkpCisJCQlnb3RvIHNlbmRfbGFzdDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFNFTkRfTEFTVF9XSVRIX0lNTUVESUFURSk6CisJc2VuZF9sYXN0X2ltbToKKwkJaWYgKGhlYWRlcl9pbl9kYXRhKSB7CisJCQl3Yy5pbW1fZGF0YSA9ICooX19iZTMyICopIGRhdGE7CisJCQlkYXRhICs9IHNpemVvZihfX2JlMzIpOworCQl9IGVsc2UgeworCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgQlRIICovCisJCQl3Yy5pbW1fZGF0YSA9IG9oZHItPnUuaW1tX2RhdGE7CisJCX0KKwkJaGRyc2l6ZSArPSA0OworCQl3Yy53Y19mbGFncyA9IElCX1dDX1dJVEhfSU1NOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoU0VORF9MQVNUKToKKwljYXNlIE9QKFJETUFfV1JJVEVfTEFTVCk6CisJc2VuZF9sYXN0OgorCQkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5LiAqLworCQlwYWQgPSAoYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyMCkgJiAzOworCQkvKiBDaGVjayBmb3IgaW52YWxpZCBsZW5ndGguICovCisJCS8qIFhYWCBMQVNUIGxlbiBzaG91bGQgYmUgPj0gMSAqLworCQlpZiAodW5saWtlbHkodGxlbiA8IChoZHJzaXplICsgcGFkICsgNCkpKQorCQkJZ290byBuYWNrX2ludjsKKwkJLyogRG9uJ3QgY291bnQgdGhlIENSQy4gKi8KKwkJdGxlbiAtPSAoaGRyc2l6ZSArIHBhZCArIDQpOworCQl3Yy5ieXRlX2xlbiA9IHRsZW4gKyBxcC0+cl9yY3ZfbGVuOworCQlpZiAodW5saWtlbHkod2MuYnl0ZV9sZW4gPiBxcC0+cl9sZW4pKQorCQkJZ290byBuYWNrX2ludjsKKwkJaXBhdGhfY29weV9zZ2UoJnFwLT5yX3NnZSwgZGF0YSwgdGxlbik7CisJCWF0b21pY19pbmMoJnFwLT5tc24pOworCQlpZiAob3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX09OTFkpKQorCQkJYnJlYWs7CisJCXdjLndyX2lkID0gcXAtPnJfd3JfaWQ7CisJCXdjLnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJCXdjLnZlbmRvcl9lcnIgPSAwOworCQl3Yy5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJCXdjLnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQl3Yy5wa2V5X2luZGV4ID0gMDsKKwkJd2Muc2xpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCQl3Yy5zbCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJd2MuZGxpZF9wYXRoX2JpdHMgPSAwOworCQl3Yy5wb3J0X251bSA9IDA7CisJCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCisJCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCisJCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKKwljYXNlIE9QKFJETUFfV1JJVEVfT05MWSk6CisJY2FzZSBPUChSRE1BX1dSSVRFX09OTFlfV0lUSF9JTU1FRElBVEUpOgorCQkvKiBjb25zdW1lIFJXUUUgKi8KKwkJLyogUkVUSCBjb21lcyBhZnRlciBCVEggKi8KKwkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKKwkJCXJldGggPSAmb2hkci0+dS5yYy5yZXRoOworCQllbHNlIHsKKwkJCXJldGggPSAoc3RydWN0IGliX3JldGggKilkYXRhOworCQkJZGF0YSArPSBzaXplb2YoKnJldGgpOworCQl9CisJCWhkcnNpemUgKz0gc2l6ZW9mKCpyZXRoKTsKKwkJcXAtPnJfbGVuID0gYmUzMl90b19jcHUocmV0aC0+bGVuZ3RoKTsKKwkJcXAtPnJfcmN2X2xlbiA9IDA7CisJCWlmIChxcC0+cl9sZW4gIT0gMCkgeworCQkJdTMyIHJrZXkgPSBiZTMyX3RvX2NwdShyZXRoLT5ya2V5KTsKKwkJCXU2NCB2YWRkciA9IGJlNjRfdG9fY3B1KHJldGgtPnZhZGRyKTsKKwkJCWludCBvazsKKworCQkJLyogQ2hlY2sgcmtleSAmIE5BSyAqLworCQkJb2sgPSBpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5yX3NnZSwKKwkJCQkJICAgcXAtPnJfbGVuLCB2YWRkciwgcmtleSwKKwkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSk7CisJCQlpZiAodW5saWtlbHkoIW9rKSkgeworCQkJbmFja19hY2M6CisJCQkJLyoKKwkJCQkgKiBBIE5BSyB3aWxsIEFDSyBlYXJsaWVyIHNlbmRzIGFuZCBSRE1BCisJCQkJICogd3JpdGVzLiAgRG9uJ3QgcXVldWUgdGhlIE5BSyBpZiBhIFJETUEKKwkJCQkgKiByZWFkLCBhdG9taWMsIG9yIE5BSyBpcyBwZW5kaW5nIHRob3VnaC4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCQkJCWlmIChxcC0+c19hY2tfc3RhdGUgPj0KKwkJCQkgICAgT1AoUkRNQV9SRUFEX1JFUVVFU1QpICYmCisJCQkJICAgIHFwLT5zX2Fja19zdGF0ZSAhPQorCQkJCSAgICBJQl9PUENPREVfQUNLTk9XTEVER0UpIHsKKwkJCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJCS8qIFhYWCBGbHVzaCBXUUVzICovCisJCQkJcXAtPnN0YXRlID0gSUJfUVBTX0VSUjsKKwkJCQlxcC0+c19hY2tfc3RhdGUgPSBPUChSRE1BX1dSSVRFX09OTFkpOworCQkJCXFwLT5zX25ha19zdGF0ZSA9CisJCQkJCUlCX05BS19SRU1PVEVfQUNDRVNTX0VSUk9SOworCQkJCXFwLT5zX2Fja19wc24gPSBxcC0+cl9wc247CisJCQkJZ290byByZXNjaGVkOworCQkJfQorCQl9IGVsc2UgeworCQkJcXAtPnJfc2dlLnNnX2xpc3QgPSBOVUxMOworCQkJcXAtPnJfc2dlLnNnZS5tciA9IE5VTEw7CisJCQlxcC0+cl9zZ2Uuc2dlLnZhZGRyID0gTlVMTDsKKwkJCXFwLT5yX3NnZS5zZ2UubGVuZ3RoID0gMDsKKwkJCXFwLT5yX3NnZS5zZ2Uuc2dlX2xlbmd0aCA9IDA7CisJCX0KKwkJaWYgKHVubGlrZWx5KCEocXAtPnFwX2FjY2Vzc19mbGFncyAmCisJCQkgICAgICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSkpKQorCQkJZ290byBuYWNrX2FjYzsKKwkJaWYgKG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX0ZJUlNUKSkKKwkJCWdvdG8gc2VuZF9taWRkbGU7CisJCWVsc2UgaWYgKG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX09OTFkpKQorCQkJZ290byBzZW5kX2xhc3Q7CisJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDEpKQorCQkJZ290byBybnJfbmFrOworCQlnb3RvIHNlbmRfbGFzdF9pbW07CisKKwljYXNlIE9QKFJETUFfUkVBRF9SRVFVRVNUKToKKwkJLyogUkVUSCBjb21lcyBhZnRlciBCVEggKi8KKwkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKKwkJCXJldGggPSAmb2hkci0+dS5yYy5yZXRoOworCQllbHNlIHsKKwkJCXJldGggPSAoc3RydWN0IGliX3JldGggKilkYXRhOworCQkJZGF0YSArPSBzaXplb2YoKnJldGgpOworCQl9CisJCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CisJCWlmIChxcC0+c19hY2tfc3RhdGUgIT0gT1AoQUNLTk9XTEVER0UpICYmCisJCSAgICBxcC0+c19hY2tfc3RhdGUgPj0gSUJfT1BDT0RFX1JETUFfUkVBRF9SRVFVRVNUKSB7CisJCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJcXAtPnNfcmRtYV9sZW4gPSBiZTMyX3RvX2NwdShyZXRoLT5sZW5ndGgpOworCQlpZiAocXAtPnNfcmRtYV9sZW4gIT0gMCkgeworCQkJdTMyIHJrZXkgPSBiZTMyX3RvX2NwdShyZXRoLT5ya2V5KTsKKwkJCXU2NCB2YWRkciA9IGJlNjRfdG9fY3B1KHJldGgtPnZhZGRyKTsKKwkJCWludCBvazsKKworCQkJLyogQ2hlY2sgcmtleSAmIE5BSyAqLworCQkJb2sgPSBpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5zX3JkbWFfc2dlLAorCQkJCQkgICBxcC0+c19yZG1hX2xlbiwgdmFkZHIsIHJrZXksCisJCQkJCSAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7CisJCQlpZiAodW5saWtlbHkoIW9rKSkgeworCQkJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwkJCQlnb3RvIG5hY2tfYWNjOworCQkJfQorCQkJLyoKKwkJCSAqIFVwZGF0ZSB0aGUgbmV4dCBleHBlY3RlZCBQU04uICBXZSBhZGQgMSBsYXRlcgorCQkJICogYmVsb3csIHNvIG9ubHkgYWRkIHRoZSByZW1haW5kZXIgaGVyZS4KKwkJCSAqLworCQkJaWYgKHFwLT5zX3JkbWFfbGVuID4gcG10dSkKKwkJCQlxcC0+cl9wc24gKz0gKHFwLT5zX3JkbWFfbGVuIC0gMSkgLyBwbXR1OworCQl9IGVsc2UgeworCQkJcXAtPnNfcmRtYV9zZ2Uuc2dfbGlzdCA9IE5VTEw7CisJCQlxcC0+c19yZG1hX3NnZS5udW1fc2dlID0gMDsKKwkJCXFwLT5zX3JkbWFfc2dlLnNnZS5tciA9IE5VTEw7CisJCQlxcC0+c19yZG1hX3NnZS5zZ2UudmFkZHIgPSBOVUxMOworCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLmxlbmd0aCA9IDA7CisJCQlxcC0+c19yZG1hX3NnZS5zZ2Uuc2dlX2xlbmd0aCA9IDA7CisJCX0KKwkJaWYgKHVubGlrZWx5KCEocXAtPnFwX2FjY2Vzc19mbGFncyAmCisJCQkgICAgICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEKSkpCisJCQlnb3RvIG5hY2tfYWNjOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGluY3JlbWVudCB0aGUgTVNOIGhlcmUgaW5zdGVhZCBvZiB3aGVuIHdlCisJCSAqIGZpbmlzaCBzZW5kaW5nIHRoZSByZXN1bHQgc2luY2UgYSBkdXBsaWNhdGUgcmVxdWVzdCB3b3VsZAorCQkgKiBpbmNyZW1lbnQgaXQgbW9yZSB0aGFuIG9uY2UuCisJCSAqLworCQlhdG9taWNfaW5jKCZxcC0+bXNuKTsKKwkJcXAtPnNfYWNrX3N0YXRlID0gb3Bjb2RlOworCQlxcC0+c19uYWtfc3RhdGUgPSAwOworCQlxcC0+c19hY2tfcHNuID0gcHNuOworCQlxcC0+cl9wc24rKzsKKwkJcXAtPnJfc3RhdGUgPSBvcGNvZGU7CisJCWdvdG8gcmRtYWRvbmU7CisKKwljYXNlIE9QKENPTVBBUkVfU1dBUCk6CisJY2FzZSBPUChGRVRDSF9BREQpOiB7CisJCXN0cnVjdCBpYl9hdG9taWNfZXRoICphdGV0aDsKKwkJdTY0IHZhZGRyOworCQl1NjQgc2RhdGE7CisJCXUzMiBya2V5OworCisJCWlmICghaGVhZGVyX2luX2RhdGEpCisJCQlhdGV0aCA9ICZvaGRyLT51LmF0b21pY19ldGg7CisJCWVsc2UgeworCQkJYXRldGggPSAoc3RydWN0IGliX2F0b21pY19ldGggKilkYXRhOworCQkJZGF0YSArPSBzaXplb2YoKmF0ZXRoKTsKKwkJfQorCQl2YWRkciA9IGJlNjRfdG9fY3B1KGF0ZXRoLT52YWRkcik7CisJCWlmICh1bmxpa2VseSh2YWRkciAmIChzaXplb2YodTY0KSAtIDEpKSkKKwkJCWdvdG8gbmFja19pbnY7CisJCXJrZXkgPSBiZTMyX3RvX2NwdShhdGV0aC0+cmtleSk7CisJCS8qIENoZWNrIHJrZXkgJiBOQUsgKi8KKwkJaWYgKHVubGlrZWx5KCFpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5yX3NnZSwKKwkJCQkJICAgIHNpemVvZih1NjQpLCB2YWRkciwgcmtleSwKKwkJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSkpCisJCQlnb3RvIG5hY2tfYWNjOworCQlpZiAodW5saWtlbHkoIShxcC0+cXBfYWNjZXNzX2ZsYWdzICYKKwkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX0FUT01JQykpKQorCQkJZ290byBuYWNrX2FjYzsKKwkJLyogUGVyZm9ybSBhdG9taWMgT1AgYW5kIHNhdmUgcmVzdWx0LiAqLworCQlzZGF0YSA9IGJlNjRfdG9fY3B1KGF0ZXRoLT5zd2FwX2RhdGEpOworCQlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwkJcXAtPnJfYXRvbWljX2RhdGEgPSAqKHU2NCAqKSBxcC0+cl9zZ2Uuc2dlLnZhZGRyOworCQlpZiAob3Bjb2RlID09IE9QKEZFVENIX0FERCkpCisJCQkqKHU2NCAqKSBxcC0+cl9zZ2Uuc2dlLnZhZGRyID0KKwkJCQlxcC0+cl9hdG9taWNfZGF0YSArIHNkYXRhOworCQllbHNlIGlmIChxcC0+cl9hdG9taWNfZGF0YSA9PQorCQkJIGJlNjRfdG9fY3B1KGF0ZXRoLT5jb21wYXJlX2RhdGEpKQorCQkJKih1NjQgKikgcXAtPnJfc2dlLnNnZS52YWRkciA9IHNkYXRhOworCQlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQlhdG9taWNfaW5jKCZxcC0+bXNuKTsKKwkJcXAtPnJfYXRvbWljX3BzbiA9IHBzbiAmIElQU19QU05fTUFTSzsKKwkJcHNuIHw9IDEgPDwgMzE7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCS8qIERyb3AgcGFja2V0IGZvciB1bmtub3duIG9wY29kZXMuICovCisJCWdvdG8gZG9uZTsKKwl9CisJcXAtPnJfcHNuKys7CisJcXAtPnJfc3RhdGUgPSBvcGNvZGU7CisJLyogU2VuZCBhbiBBQ0sgaWYgcmVxdWVzdGVkIG9yIHJlcXVpcmVkLiAqLworCWlmIChwc24gJiAoMSA8PCAzMSkpIHsKKwkJLyoKKwkJICogQ29hbGVzY2UgQUNLcyB1bmxlc3MgdGhlcmUgaXMgYSBSRE1BIFJFQUQgb3IKKwkJICogQVRPTUlDIHBlbmRpbmcuCisJCSAqLworCQlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCQlpZiAocXAtPnNfYWNrX3N0YXRlID09IE9QKEFDS05PV0xFREdFKSB8fAorCQkgICAgcXAtPnNfYWNrX3N0YXRlIDwgSUJfT1BDT0RFX1JETUFfUkVBRF9SRVFVRVNUKSB7CisJCQlxcC0+c19hY2tfc3RhdGUgPSBvcGNvZGU7CisJCQlxcC0+c19uYWtfc3RhdGUgPSAwOworCQkJcXAtPnNfYWNrX3BzbiA9IHBzbjsKKwkJCXFwLT5zX2Fja19hdG9taWMgPSBxcC0+cl9hdG9taWNfZGF0YTsKKwkJCWdvdG8gcmVzY2hlZDsKKwkJfQorCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJfQorZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJZ290byBiYWlsOworCityZXNjaGVkOgorCS8qCisJICogVHJ5IHRvIHNlbmQgQUNLIHJpZ2h0IGF3YXkgYnV0IG5vdCBpZiBpcGF0aF9kb19yY19zZW5kKCkgaXMKKwkgKiBhY3RpdmUuCisJICovCisJaWYgKHFwLT5zX2hkcndvcmRzID09IDAgJiYKKwkgICAgKHFwLT5zX2Fja19zdGF0ZSA8IElCX09QQ09ERV9SRE1BX1JFQURfUkVRVUVTVCB8fAorCSAgICAgcXAtPnNfYWNrX3N0YXRlID49IElCX09QQ09ERV9DT01QQVJFX1NXQVApKQorCQlzZW5kX3JjX2FjayhxcCk7CisKK3JkbWFkb25lOgorCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisKKwkvKiBDYWxsIGlwYXRoX2RvX3JjX3NlbmQoKSBpbiBhbm90aGVyIHRocmVhZC4gKi8KKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZxcC0+c190YXNrKTsKKworYmFpbDoKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyMTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0lQQVRIX1JFR0lTVEVSU19ICisjZGVmaW5lIF9JUEFUSF9SRUdJU1RFUlNfSAorCisvKgorICogVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGJ5IGtlcm5lbCBzb3VyY2UsIGFuZCBieSB0aGUgZGlhZ3MuICBJdAorICogZGVmaW5lcyB0aGUgcmVnaXN0ZXJzLCBhbmQgdGhlaXIgY29udGVudHMsIGZvciB0aGUgSW5maW5pUGF0aCBIVC00MDAKKyAqIGNoaXAuCisgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgSW5maW5pUGF0aCByZWdpc3RlciBhbmQgYnVmZmVyIGJpdCBkZWZpbml0aW9ucywKKyAqIHRoYXQgYXJlIHZpc2libGUgdG8gc29mdHdhcmUsIGFuZCBuZWVkZWQgb25seSBieSB0aGUga2VybmVsCisgKiBhbmQgZGlhZyBjb2RlLiAgQSBmZXcsIHRoYXQgYXJlIHZpc2libGUgdG8gcHJvdG9jb2wgYW5kIHVzZXIKKyAqIGNvZGUgYXJlIGluIGlwYXRoX2NvbW1vbi5oLiAgU29tZSBiaXRzIGFyZSBzcGVjaWZpYworICogdG8gYSBnaXZlbiBjaGlwIGltcGxlbWVudGF0aW9uLCBhbmQgaGF2ZSBiZWVuIG1vdmVkIHRvIHRoZQorICogY2hpcC1zcGVjaWZpYyBzb3VyY2UgZmlsZQorICovCisKKy8qIGtyX3JldmlzaW9uIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0NISVBSRVZNSU5PUl9NQVNLIDB4RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0NISVBSRVZNSU5PUl9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfUl9DSElQUkVWTUFKT1JfTUFTSyAweEZGCisjZGVmaW5lIElORklOSVBBVEhfUl9DSElQUkVWTUFKT1JfU0hJRlQgOAorI2RlZmluZSBJTkZJTklQQVRIX1JfQVJDSF9NQVNLIDB4RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0FSQ0hfU0hJRlQgMTYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX1NPRlRXQVJFX01BU0sgMHhGRgorI2RlZmluZSBJTkZJTklQQVRIX1JfU09GVFdBUkVfU0hJRlQgMjQKKyNkZWZpbmUgSU5GSU5JUEFUSF9SX0JPQVJESURfTUFTSyAweEZGCisjZGVmaW5lIElORklOSVBBVEhfUl9CT0FSRElEX1NISUZUIDMyCisKKy8qIGtyX2NvbnRyb2wgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0NfRlJFRVpFTU9ERSAweDAwMDAwMDAyCisjZGVmaW5lIElORklOSVBBVEhfQ19MSU5LRU5BQkxFIDB4MDAwMDAwMDQKKyNkZWZpbmUgSU5GSU5JUEFUSF9DX1JFU0VUIDB4MDAwMDAwMDEKKworLyoga3Jfc2VuZGN0cmwgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1NfRElTQVJNUElPQlVGX1NISUZUIDE2CisKKyNkZWZpbmUgSVBBVEhfU19BQk9SVAkJMAorI2RlZmluZSBJUEFUSF9TX1BJT0lOVEJVRkFWQUlMCTEKKyNkZWZpbmUgSVBBVEhfU19QSU9CVUZBVkFJTFVQRAkyCisjZGVmaW5lIElQQVRIX1NfUElPRU5BQkxFCTMKKyNkZWZpbmUgSVBBVEhfU19ESVNBUk0JCTMxCisKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX0FCT1JUCQkoMVUgPDwgSVBBVEhfU19BQk9SVCkKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX1BJT0lOVEJVRkFWQUlMCSgxVSA8PCBJUEFUSF9TX1BJT0lOVEJVRkFWQUlMKQorI2RlZmluZSBJTkZJTklQQVRIX1NfUElPQlVGQVZBSUxVUEQJKDFVIDw8IElQQVRIX1NfUElPQlVGQVZBSUxVUEQpCisjZGVmaW5lIElORklOSVBBVEhfU19QSU9FTkFCTEUJCSgxVSA8PCBJUEFUSF9TX1BJT0VOQUJMRSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX0RJU0FSTQkJKDFVIDw8IElQQVRIX1NfRElTQVJNKQorCisvKiBrcl9yY3ZjdHJsIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgMAorI2RlZmluZSBJTkZJTklQQVRIX1JfSU5UUkFWQUlMX1NISUZUIDE2CisjZGVmaW5lIElORklOSVBBVEhfUl9UQUlMVVBEICAgMHg4MDAwMDAwMAorCisvKiBrcl9pbnRzdGF0dXMsIGtyX2ludGNsZWFyLCBrcl9pbnRtYXNrIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCAxMgorI2RlZmluZSBJTkZJTklQQVRIX0lfRVJST1IgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1NQSU9TRU5UICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfSV9TUElPQlVGQVZBSUwgMHgyMDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX0lfR1BJTyAgICAgICAgIDB4MTAwMDAwMDAKKworLyoga3JfZXJyb3JzdGF0dXMsIGtyX2Vycm9yY2xlYXIsIGtyX2Vycm9ybWFzayBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfRV9SRk9STUFURVJSICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SVkNSQyAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAyVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SSUNSQyAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDA0VUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9STUlOUEtUTEVOICAgICAgMHgwMDAwMDAwMDAwMDAwMDA4VUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9STUFYUEtUTEVOICAgICAgMHgwMDAwMDAwMDAwMDAwMDEwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9STE9OR1BLVExFTiAgICAgMHgwMDAwMDAwMDAwMDAwMDIwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4gICAgMHgwMDAwMDAwMDAwMDAwMDQwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SVU5FWFBDSEFSICAgICAgMHgwMDAwMDAwMDAwMDAwMDgwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SVU5TVVBWTCAgICAgICAgMHgwMDAwMDAwMDAwMDAwMTAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SRUJQICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SSUJGTE9XICAgICAgICAgMHgwMDAwMDAwMDAwMDAwNDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SQkFEVkVSU0lPTiAgICAgMHgwMDAwMDAwMDAwMDAwODAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCAgICAgMHgwMDAwMDAwMDAwMDAxMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SUkNWSERSRlVMTCAgICAgMHgwMDAwMDAwMDAwMDAyMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SQkFEVElEICAgICAgICAgMHgwMDAwMDAwMDAwMDA0MDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SSERSTEVOICAgICAgICAgMHgwMDAwMDAwMDAwMDA4MDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SSERSICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDEwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SSUJMT1NUTElOSyAgICAgMHgwMDAwMDAwMDAwMDIwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TTUlOUEtUTEVOICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TTUFYUEtUTEVOICAgICAgMHgwMDAwMDAwMDQwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TVU5ERVJSVU4gICAgICAgMHgwMDAwMDAwMDgwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TUEtUTEVOICAgICAgICAgMHgwMDAwMDAwMTAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVCAgMHgwMDAwMDAwMjAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgMHgwMDAwMDAwNDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TUElPQVJNTEFVTkNIICAgMHgwMDAwMDAwODAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0gMHgwMDAwMDAxMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TVU5TVVBWTCAgICAgICAgMHgwMDAwMDAyMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQgMHgwMDAxMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9JTlZBTElEQUREUiAgICAgMHgwMDAyMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SRVNFVCAgICAgICAgICAgMHgwMDA0MDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9IQVJEV0FSRSAgICAgICAgMHgwMDA4MDAwMDAwMDAwMDAwVUxMCisKKy8qIGtyX2h3ZXJyY2xlYXIsIGtyX2h3ZXJybWFzaywga3JfaHdlcnJzdGF0dXMsIGJpdHMgKi8KKy8qIFRYRU1FTVBBUklUWUVSUiBiaXQgMDogUElPYnVmLCAxOiBQSU9wYmMsIDI6IGxhdW5jaGZpZm8KKyAqIFJYRU1FTVBBUklUWUVSUiBiaXQgMDogcmN2YnVmLCAxOiBsb29rdXBxLCAyOiBlYWdlclRJRCwgMzogZXhwVElECisgKiAJCWJpdCA0OiBmbGFnIGJ1ZmZlciwgNTogZGF0YWluZm8sIDY6IGhlYWRlciBpbmZvICovCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLIDB4RlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQgNDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0sgMHg3RlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQgNDQKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhEU1lOQ01FTVBBUklUWUVSUiAgMHgwMDAwMDAwNDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQgICAgICAgIDB4MDA0MDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9JQkNCVVNUT1NQQ1BBUklUWUVSUiAweDQwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSUJDQlVTRlJTUENQQVJJVFlFUlIgMHg4MDAwMDAwMDAwMDAwMDAwVUxMCisKKy8qIGtyX2h3ZGlhZ2N0cmwgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0RDX0ZPUkNFVFhFTUVNUEFSSVRZRVJSX01BU0sgMHhGVUxMCisjZGVmaW5lIElORklOSVBBVEhfRENfRk9SQ0VUWEVNRU1QQVJJVFlFUlJfU0hJRlQgNDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9EQ19GT1JDRVJYRU1FTVBBUklUWUVSUl9NQVNLIDB4N0ZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9EQ19GT1JDRVJYRU1FTVBBUklUWUVSUl9TSElGVCA0NAorI2RlZmluZSBJTkZJTklQQVRIX0RDX0ZPUkNFUlhEU1lOQ01FTVBBUklUWUVSUiAgMHgwMDAwMDAwNDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRENfQ09VTlRFUkRJU0FCTEUgICAgICAgICAgICAweDEwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9EQ19DT1VOVEVSV1JFTiAgICAgICAgICAgICAgIDB4MjAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0RDX0ZPUkNFSUJDQlVTVE9TUENQQVJJVFlFUlIgMHg0MDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRENfRk9SQ0VJQkNCVVNGUlNQQ1BBUklUWUVSUiAweDgwMDAwMDAwMDAwMDAwMDBVTEwKKworLyoga3JfaWJjY3RybCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19GTE9XQ1RSTFBFUklPRF9NQVNLIDB4RkZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0ZMT1dDVFJMUEVSSU9EX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0ZMT1dDVFJMV0FURVJNQVJLX01BU0sgMHhGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfRkxPV0NUUkxXQVRFUk1BUktfU0hJRlQgOAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfTUFTSyAweDNVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUgMQorLyogY3ljbGUgdGhyb3VnaCBUUzEvVFMyIHRpbGwgT0sgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1BPTEwgMgorLyogd2FpdCBmb3IgVFMxLCB0aGVuIGdvIG9uICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TTEVFUCAzCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCAxNgorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9NQVNLIDB4M1VMTAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9JTklUIDEJLyogbW92ZSB0byAweDExICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0FSTUVEIDIJLyogbW92ZSB0byAweDIxICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0FDVElWRSAzCS8qIG1vdmUgdG8gMHgzMSAqLworI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCAxOAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTUFYUEtUTEVOX01BU0sgMHg3RkZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9TSElGVCAyMAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX01BU0sgMHhGVUxMCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQgMzIKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfTUFTSyAweEZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQgMzYKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0NSRURJVFNDQUxFX01BU0sgMHg3VUxMCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19DUkVESVRTQ0FMRV9TSElGVCA0MAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTE9PUEJBQ0sgICAgICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LRE9XTkRFRkFVTFRTVEFURSAweDQwMDAwMDAwMDAwMDAwMDBVTEwKKworLyoga3JfaWJjc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0sgMHhGCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSyAweDcKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9TSElGVCA0CisjZGVmaW5lIElORklOSVBBVEhfSUJDU19UWFJFQURZICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX1RYQ1JFRElUT0sgICAgMHg4MDAwMDAwMAorLyogbGluayB0cmFpbmluZyBzdGF0ZXMgKHNoaWZ0IGJ5CisgICBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpICovCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9ESVNBQkxFRAkweDAwCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVAJCTB4MDEKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExBQ1RJVkUJMHgwMgorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUE9MTFFVSUVUCTB4MDMKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1NMRUVQREVMQVkJMHgwNAorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfU0xFRVBRVUlFVAkweDA1CisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdERUJPVU5DRQkweDA4CisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdSQ1ZGQ0ZHCTB4MDkKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR1dBSVRSTVQJMHgwYQorI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfQ0ZHSURMRQkweDBiCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9SRUNPVkVSUkVUUkFJTgkweDBjCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9SRUNPVkVSV0FJVFJNVAkweDBlCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MVF9TVEFURV9SRUNPVkVSSURMRQkweDBmCisvKiBsaW5rIHN0YXRlIG1hY2hpbmUgc3RhdGVzIChzaGlmdCBieSBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSAqLworI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9ET1dOCQkweDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfSU5JVAkJMHgxCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FSTQkJMHgyCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVElWRQkJMHgzCisjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVF9ERUZFUgkweDQKKworLyogY29tYmluYXRpb24gbGluayBzdGF0dXMgc3RhdGVzIHRoYXQgd2UgdXNlIHdpdGggc29tZSBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgSVBBVEhfSUJTVEFURV9NQVNLICgoSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0sgXAorCQk8PCBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSB8IFwKKwkJKElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSyBcCisJCTw8SU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSkKKyNkZWZpbmUgSVBBVEhfSUJTVEFURV9JTklUICgoSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfSU5JVCBcCisJCTw8IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpIHwgXAorCQkoSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCBcCisJCTw8SU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSkKKyNkZWZpbmUgSVBBVEhfSUJTVEFURV9BUk0gKChJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BUk0gXAorCQk8PCBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSB8IFwKKwkJKElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVAgXAorCQk8PElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkpCisjZGVmaW5lIElQQVRIX0lCU1RBVEVfQUNUSVZFICgoSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFIFwKKwkJPDwgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9TSElGVCkgfCBcCisJCShJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQIFwKKwkJPDxJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpKQorCisvKiBrcl9leHRzdGF0dXMgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfU0VSREVTUExMTE9DSyAweDEKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX0dQSU9JTl9NQVNLIDB4RkZGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfR1BJT0lOX1NISUZUIDQ4CisKKy8qIGtyX2V4dGN0cmwgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX0VYVENfR1BJT0lOVkVSVF9NQVNLIDB4RkZGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfR1BJT0lOVkVSVF9TSElGVCAzMgorI2RlZmluZSBJTkZJTklQQVRIX0VYVENfR1BJT09FX01BU0sgMHhGRkZGVUxMCisjZGVmaW5lIElORklOSVBBVEhfRVhUQ19HUElPT0VfU0hJRlQgNDgKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0VOQUJMRSAgICAgICAgIDB4ODAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0NPTk5FQ1QgICAgICAgIDB4NDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0VOVFJVTktJTkcgICAgIDB4MjAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0RJU1JYRklGTyAgICAgIDB4MTAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0VOUExQQksxICAgICAgIDB4MDgwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0VOUExQQksyICAgICAgIDB4MDQwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX1NFUkRFU0VORU5DREVDICAgICAgIDB4MDIwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0xFRDFTRUNQT1JUX09OICAgICAgIDB4MDAwMDAwMjBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0xFRDJTRUNQT1JUX09OICAgICAgIDB4MDAwMDAwMTBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OICAgICAgIDB4MDAwMDAwMDhVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OICAgICAgIDB4MDAwMDAwMDRVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0xFREdCTE9LX09OICAgICAgICAgIDB4MDAwMDAwMDJVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRDX0xFREdCTEVSUl9PRkYgICAgICAgIDB4MDAwMDAwMDFVTEwKKworLyoga3JfbWRpbyBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfTURJT19DTEtESVZfTUFTSyAweDdGVUxMCisjZGVmaW5lIElORklOSVBBVEhfTURJT19DTEtESVZfU0hJRlQgMzIKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0NPTU1BTkRfTUFTSyAweDdVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0NPTU1BTkRfU0hJRlQgMjYKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX0RFVkFERFJfTUFTSyAweDFGVUxMCisjZGVmaW5lIElORklOSVBBVEhfTURJT19ERVZBRERSX1NISUZUIDIxCisjZGVmaW5lIElORklOSVBBVEhfTURJT19SRUdBRERSX01BU0sgMHgxRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fUkVHQUREUl9TSElGVCAxNgorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fREFUQV9NQVNLIDB4RkZGRlVMTAorI2RlZmluZSBJTkZJTklQQVRIX01ESU9fREFUQV9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfTURJT19DTURWQUxJRCAgICAweDAwMDAwMDAwNDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9NRElPX1JEREFUQVZBTElEIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAorCisvKiBrcl9wYXJ0aXRpb25rZXkgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1BLRVlfU0laRSAxNgorI2RlZmluZSBJTkZJTklQQVRIX1BLRVlfTUFTSyAweEZGRkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9QS0VZX0RFRkFVTFRfUEtFWSAweEZGRkYKKworLyoga3Jfc2VyZGVzY29uZmlnMCBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfU0VSREMwX1JFU0VUX01BU0sgIDB4ZlVMTAkvKiBvdmVyYWwgcmVzZXQgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1NFUkRDMF9SRVNFVF9QTEwgICAweDEwMDAwMDAwVUxMCS8qIHBsbCByZXNldCAqLworLyogdHggaWRsZSBlbmFibGVzIChwZXIgbGFuZSkgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9TRVJEQzBfVFhJRExFICAgICAgMHhGMDAwVUxMCisvKiByeCBkZXRlY3QgZW5hYmxlcyAocGVyIGxhbmUpICovCisjZGVmaW5lIElORklOSVBBVEhfU0VSREMwX1JYREVURUNUX0VOIDB4RjAwMDBVTEwKKy8qIEwxIFBvd2VyIGRvd247IHVzZSB3aXRoIFJYREVURUNULCBPdGhlcndpc2Ugbm90IHVzZWQgb24gSUIgc2lkZSAqLworI2RlZmluZSBJTkZJTklQQVRIX1NFUkRDMF9MMVBXUl9ETgkgMHhGMFVMTAorCisvKiBrcl94Z3hzY29uZmlnIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX1JFU0VUICAgICAgICAgIDB4N1VMTAorI2RlZmluZSBJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfTUFTSyAgMHhmVUxMCisjZGVmaW5lIElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCA0CisKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9BRERSX01BU0sgMHhGRkZGRkZGRkZGVUxMCS8qIDQwIGJpdHMgdmFsaWQgKi8KKworLyogVElEIGVudHJpZXMgKG1lbW9yeSksIEhUNDAwLW9ubHkgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9WQUxJRCAweDgwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9BRERSX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9CVUZTSVpFX01BU0sgMHgzRkZGCisjZGVmaW5lIElORklOSVBBVEhfUlRfQlVGU0laRV9TSElGVCA0OAorCisvKgorICogSVBBVEhfUElPX01BWElCSERSIGlzIHRoZSBtYXggSUIgaGVhZGVyIHNpemUgYWxsb3dlZCBmb3IgaW4gb3VyCisgKiBQSU8gc2VuZCBidWZmZXJzLiAgVGhpcyBpcyB3ZWxsIGJleW9uZCBhbnl0aGluZyBjdXJyZW50bHkKKyAqIGRlZmluZWQgaW4gdGhlIEluZmluaUJhbmQgc3BlYy4KKyAqLworI2RlZmluZSBJUEFUSF9QSU9fTUFYSUJIRFIgMTI4CisKK3R5cGVkZWYgdTY0IGlwYXRoX2Vycl90OworCisvKiBtYXNrIG9mIGRlZmluZWQgYml0cyBmb3IgdmFyaW91cyByZWdpc3RlcnMgKi8KK2V4dGVybiB1NjQgaW5maW5pcGF0aF9pX2JpdHNleHRhbnQ7CitleHRlcm4gaXBhdGhfZXJyX3QgaW5maW5pcGF0aF9lX2JpdHNleHRhbnQsIGluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQ7CisKKy8qIG1hc2tzIHRoYXQgYXJlIGRpZmZlcmVudCBpbiB2YXJpb3VzIGNoaXBzLCBvciBvbmx5IGV4aXN0IGluIHNvbWUgY2hpcHMgKi8KK2V4dGVybiB1MzIgaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2ssIGluZmluaXBhdGhfaV9yY3Z1cmdfbWFzazsKKworLyoKKyAqIHJlZ2lzdGVyIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsIHVzZWQgZm9yIEkyQyBzZXJpYWwKKyAqIGZsYXNoCisgKi8KK2V4dGVybiB1MTYgaXBhdGhfZ3Bpb19zZGFfbnVtLCBpcGF0aF9ncGlvX3NjbF9udW07CitleHRlcm4gdTY0IGlwYXRoX2dwaW9fc2RhLCBpcGF0aF9ncGlvX3NjbDsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgaW5maW5pcGF0aCBnZW5lcmFsIHJlZ2lzdGVyIG51bWJlcnMgKG5vdCBvZmZzZXRzKS4KKyAqIFRoZSBrZXJuZWwgcmVnaXN0ZXJzIGFyZSB1c2VkIGRpcmVjdGx5LCB0aG9zZSBiZXlvbmQgdGhlIGtlcm5lbAorICogcmVnaXN0ZXJzIGFyZSBjYWxjdWxhdGVkIGZyb20gb25lIG9mIHRoZSBiYXNlIHJlZ2lzdGVycy4gIFRoZSB1c2Ugb2YKKyAqIGFuIGludGVnZXIgdHlwZSBkb2Vzbid0IGFsbG93IHR5cGUtY2hlY2tpbmcgYXMgdGhvcm91Z2ggYXMsIHNheSwKKyAqIGFuIGVudW0gYnV0IGFsbG93cyBmb3IgYmV0dGVyIGhpZGluZyBvZiBjaGlwIGRpZmZlcmVuY2VzLgorICovCit0eXBlZGVmIGNvbnN0IHUxNiBpcGF0aF9rcmVnLAkvKiBpbmZpbmlwYXRoIGdlbmVyYWwgcmVnaXN0ZXJzICovCisgaXBhdGhfY3JlZywJCQkvKiBpbmZpbmlwYXRoIGNvdW50ZXIgcmVnaXN0ZXJzICovCisgaXBhdGhfc3JlZzsJCQkvKiBrZXJuZWwtb25seSwgaW5maW5pcGF0aCBzZW5kIHJlZ2lzdGVycyAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSBjaGlwIHJlZ2lzdGVycyBjb21tb24gdG8gYWxsIGluZmluaXBhdGggY2hpcHMsIGFuZAorICogdXNlZCBib3RoIGJ5IHRoZSBrZXJuZWwgYW5kIHRoZSBkaWFnbm9zdGljcyBvciBvdGhlciB1c2VyIGNvZGUuCisgKiBUaGV5IGFyZSBhbGwgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IDY0IGJpdCBhY2Nlc3NlcyB3b3JrLgorICogU29tZSBpbXBsZW1lbnQgbm8gbW9yZSB0aGFuIDMyIGJpdHMuICBCZWNhdXNlIDY0IGJpdCByZWFkcworICogcmVxdWlyZSAyIEhUIGNtZHMgb24gb3B0ZXJvbiwgd2UgYWNjZXNzIHRob3NlIHdpdGggMzIgYml0CisgKiByZWFkcyBmb3IgZWZmaWNpZW5jeSAodGhleSBhcmUgd3JpdHRlbiBhcyA2NCBiaXRzLCBzaW5jZQorICogdGhlIGV4dHJhIDMyIGJpdHMgYXJlIG5lYXJseSBmcmVlIG9uIHdyaXRlcywgYW5kIGl0IHNsaWdodGx5IHJlZHVjZXMKKyAqIGNvbXBsZXhpdHkpLiAgVGhlIHJlc3QgYXJlIGFsbCBhY2Nlc3NlZCBhcyA2NCBiaXRzLgorICovCitzdHJ1Y3QgaXBhdGhfa3JlZ3MgeworCS8qIFRoZXNlIGFyZSB0aGUgMzIgYml0IGdyb3VwICovCisJaXBhdGhfa3JlZyBrcl9jb250cm9sOworCWlwYXRoX2tyZWcga3JfY291bnRlcnJlZ2Jhc2U7CisJaXBhdGhfa3JlZyBrcl9pbnRtYXNrOworCWlwYXRoX2tyZWcga3JfaW50c3RhdHVzOworCWlwYXRoX2tyZWcga3JfcGFnZWFsaWduOworCWlwYXRoX2tyZWcga3JfcG9ydGNudDsKKwlpcGF0aF9rcmVnIGtyX3JjdnRpZGJhc2U7CisJaXBhdGhfa3JlZyBrcl9yY3Z0aWRjbnQ7CisJaXBhdGhfa3JlZyBrcl9yY3ZlZ3JiYXNlOworCWlwYXRoX2tyZWcga3JfcmN2ZWdyY250OworCWlwYXRoX2tyZWcga3Jfc2NyYXRjaDsKKwlpcGF0aF9rcmVnIGtyX3NlbmRjdHJsOworCWlwYXRoX2tyZWcga3Jfc2VuZHBpb2J1ZmJhc2U7CisJaXBhdGhfa3JlZyBrcl9zZW5kcGlvYnVmY250OworCWlwYXRoX2tyZWcga3Jfc2VuZHBpb3NpemU7CisJaXBhdGhfa3JlZyBrcl9zZW5kcmVnYmFzZTsKKwlpcGF0aF9rcmVnIGtyX3VzZXJyZWdiYXNlOworCS8qIFRoZXNlIGFyZSB0aGUgNjQgYml0IGdyb3VwICovCisJaXBhdGhfa3JlZyBrcl9kZWJ1Z3BvcnQ7CisJaXBhdGhfa3JlZyBrcl9kZWJ1Z3BvcnRzZWxlY3Q7CisJaXBhdGhfa3JlZyBrcl9lcnJvcmNsZWFyOworCWlwYXRoX2tyZWcga3JfZXJyb3JtYXNrOworCWlwYXRoX2tyZWcga3JfZXJyb3JzdGF0dXM7CisJaXBhdGhfa3JlZyBrcl9leHRjdHJsOworCWlwYXRoX2tyZWcga3JfZXh0c3RhdHVzOworCWlwYXRoX2tyZWcga3JfZ3Bpb19jbGVhcjsKKwlpcGF0aF9rcmVnIGtyX2dwaW9fbWFzazsKKwlpcGF0aF9rcmVnIGtyX2dwaW9fb3V0OworCWlwYXRoX2tyZWcga3JfZ3Bpb19zdGF0dXM7CisJaXBhdGhfa3JlZyBrcl9od2RpYWdjdHJsOworCWlwYXRoX2tyZWcga3JfaHdlcnJjbGVhcjsKKwlpcGF0aF9rcmVnIGtyX2h3ZXJybWFzazsKKwlpcGF0aF9rcmVnIGtyX2h3ZXJyc3RhdHVzOworCWlwYXRoX2tyZWcga3JfaWJjY3RybDsKKwlpcGF0aF9rcmVnIGtyX2liY3N0YXR1czsKKwlpcGF0aF9rcmVnIGtyX2ludGJsb2NrZWQ7CisJaXBhdGhfa3JlZyBrcl9pbnRjbGVhcjsKKwlpcGF0aF9rcmVnIGtyX2ludGVycnVwdGNvbmZpZzsKKwlpcGF0aF9rcmVnIGtyX21kaW87CisJaXBhdGhfa3JlZyBrcl9wYXJ0aXRpb25rZXk7CisJaXBhdGhfa3JlZyBrcl9yY3ZidGhxcDsKKwlpcGF0aF9rcmVnIGtyX3JjdmJ1ZmJhc2U7CisJaXBhdGhfa3JlZyBrcl9yY3ZidWZzaXplOworCWlwYXRoX2tyZWcga3JfcmN2Y3RybDsKKwlpcGF0aF9rcmVnIGtyX3JjdmhkcmNudDsKKwlpcGF0aF9rcmVnIGtyX3JjdmhkcmVudHNpemU7CisJaXBhdGhfa3JlZyBrcl9yY3ZoZHJzaXplOworCWlwYXRoX2tyZWcga3JfcmN2aW50bWVtYmFzZTsKKwlpcGF0aF9rcmVnIGtyX3JjdmludG1lbXNpemU7CisJaXBhdGhfa3JlZyBrcl9yZXZpc2lvbjsKKwlpcGF0aF9rcmVnIGtyX3NlbmRidWZmZXJlcnJvcjsKKwlpcGF0aF9rcmVnIGtyX3NlbmRwaW9hdmFpbGFkZHI7CisJaXBhdGhfa3JlZyBrcl9zZXJkZXNjb25maWcwOworCWlwYXRoX2tyZWcga3Jfc2VyZGVzY29uZmlnMTsKKwlpcGF0aF9rcmVnIGtyX3NlcmRlc3N0YXR1czsKKwlpcGF0aF9rcmVnIGtyX3R4aW50bWVtYmFzZTsKKwlpcGF0aF9rcmVnIGtyX3R4aW50bWVtc2l6ZTsKKwlpcGF0aF9rcmVnIGtyX3hneHNjb25maWc7CisJaXBhdGhfa3JlZyBrcl9pYnBsbGNmZzsKKwkvKiB1c2UgdGhlc2UgdHdvIChhbmQgdGhlIGZvbGxvd2luZyBOIHBvcnRzKSBvbmx5IHdpdGgKKwkgKiBpcGF0aF9rKl9rcmVnNjRfcG9ydCgpOyBub3QgKmtyZWc2NCgpICovCisJaXBhdGhfa3JlZyBrcl9yY3ZoZHJhZGRyOworCWlwYXRoX2tyZWcga3JfcmN2aGRydGFpbGFkZHI7CisKKwkvKiByZW1haW5pbmcgcmVnaXN0ZXJzIGFyZSBub3QgcHJlc2VudCBvbiBhbGwgdHlwZXMgb2YgaW5maW5pcGF0aAorCSAgIGNoaXBzICAqLworCWlwYXRoX2tyZWcga3JfcmN2cGt0bGVkY250OworCWlwYXRoX2tyZWcga3JfcGNpZXJidWZ0ZXN0cmVnMDsKKwlpcGF0aF9rcmVnIGtyX3BjaWVyYnVmdGVzdHJlZzE7CisJaXBhdGhfa3JlZyBrcl9wY2llcTBzZXJkZXNjb25maWcwOworCWlwYXRoX2tyZWcga3JfcGNpZXEwc2VyZGVzY29uZmlnMTsKKwlpcGF0aF9rcmVnIGtyX3BjaWVxMHNlcmRlc3N0YXR1czsKKwlpcGF0aF9rcmVnIGtyX3BjaWVxMXNlcmRlc2NvbmZpZzA7CisJaXBhdGhfa3JlZyBrcl9wY2llcTFzZXJkZXNjb25maWcxOworCWlwYXRoX2tyZWcga3JfcGNpZXExc2VyZGVzc3RhdHVzOworfTsKKworc3RydWN0IGlwYXRoX2NyZWdzIHsKKwlpcGF0aF9jcmVnIGNyX2JhZGZvcm1hdGNudDsKKwlpcGF0aF9jcmVnIGNyX2VycmljcmNjbnQ7CisJaXBhdGhfY3JlZyBjcl9lcnJsaW5rY250OworCWlwYXRoX2NyZWcgY3JfZXJybHBjcmNjbnQ7CisJaXBhdGhfY3JlZyBjcl9lcnJwa2V5OworCWlwYXRoX2NyZWcgY3JfZXJycmN2Zmxvd2N0cmxjbnQ7CisJaXBhdGhfY3JlZyBjcl9lcnJfcmxlbmNudDsKKwlpcGF0aF9jcmVnIGNyX2VycnNsZW5jbnQ7CisJaXBhdGhfY3JlZyBjcl9lcnJ0aWRmdWxsOworCWlwYXRoX2NyZWcgY3JfZXJydGlkdmFsaWQ7CisJaXBhdGhfY3JlZyBjcl9lcnJ2Y3JjY250OworCWlwYXRoX2NyZWcgY3JfaWJzdGF0dXNjaGFuZ2U7CisJaXBhdGhfY3JlZyBjcl9pbnRjbnQ7CisJaXBhdGhfY3JlZyBjcl9pbnZhbGlkcmxlbmNudDsKKwlpcGF0aF9jcmVnIGNyX2ludmFsaWRzbGVuY250OworCWlwYXRoX2NyZWcgY3JfbGJmbG93c3RhbGxjbnQ7CisJaXBhdGhfY3JlZyBjcl9pYmxpbmtkb3duY250OworCWlwYXRoX2NyZWcgY3JfaWJsaW5rZXJycmVjb3ZjbnQ7CisJaXBhdGhfY3JlZyBjcl9pYnN5bWJvbGVycmNudDsKKwlpcGF0aF9jcmVnIGNyX3BrdHJjdmNudDsKKwlpcGF0aF9jcmVnIGNyX3BrdHJjdmZsb3djdHJsY250OworCWlwYXRoX2NyZWcgY3JfcGt0c2VuZGNudDsKKwlpcGF0aF9jcmVnIGNyX3BrdHNlbmRmbG93Y250OworCWlwYXRoX2NyZWcgY3JfcG9ydG92ZmxjbnQ7CisJaXBhdGhfY3JlZyBjcl9yY3ZlYnBjbnQ7CisJaXBhdGhfY3JlZyBjcl9yY3ZvdmZsY250OworCWlwYXRoX2NyZWcgY3Jfcnhkcm9wcGt0Y250OworCWlwYXRoX2NyZWcgY3Jfc2VuZGRyb3BwZWQ7CisJaXBhdGhfY3JlZyBjcl9zZW5kc3RhbGxjbnQ7CisJaXBhdGhfY3JlZyBjcl9zZW5kdW5kZXJydW5jbnQ7CisJaXBhdGhfY3JlZyBjcl91bnN1cHZsY250OworCWlwYXRoX2NyZWcgY3Jfd29yZHJjdmNudDsKKwlpcGF0aF9jcmVnIGNyX3dvcmRzZW5kY250OworfTsKKworI2VuZGlmCQkJCS8qIF9JUEFUSF9SRUdJU1RFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKQEAgLTAsMCArMSw1NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKworLyoKKyAqIENvbnZlcnQgdGhlIEFFVEggUk5SIHRpbWVvdXQgY29kZSBpbnRvIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICovCitjb25zdCB1MzIgaWJfaXBhdGhfcm5yX3RhYmxlWzMyXSA9IHsKKwk2NTYsCQkJLyogMCAqLworCTEsCQkJLyogMSAqLworCTEsCQkJLyogMiAqLworCTEsCQkJLyogMyAqLworCTEsCQkJLyogNCAqLworCTEsCQkJLyogNSAqLworCTEsCQkJLyogNiAqLworCTEsCQkJLyogNyAqLworCTEsCQkJLyogOCAqLworCTEsCQkJLyogOSAqLworCTEsCQkJLyogQSAqLworCTEsCQkJLyogQiAqLworCTEsCQkJLyogQyAqLworCTEsCQkJLyogRCAqLworCTIsCQkJLyogRSAqLworCTIsCQkJLyogRiAqLworCTMsCQkJLyogMTAgKi8KKwk0LAkJCS8qIDExICovCisJNiwJCQkvKiAxMiAqLworCTgsCQkJLyogMTMgKi8KKwkxMSwJCQkvKiAxNCAqLworCTE2LAkJCS8qIDE1ICovCisJMjEsCQkJLyogMTYgKi8KKwkzMSwJCQkvKiAxNyAqLworCTQxLAkJCS8qIDE4ICovCisJNjIsCQkJLyogMTkgKi8KKwk4MiwJCQkvKiAxQSAqLworCTEyMywJCQkvKiAxQiAqLworCTE2NCwJCQkvKiAxQyAqLworCTI0NiwJCQkvKiAxRCAqLworCTMyOCwJCQkvKiAxRSAqLworCTQ5MgkJCS8qIDFGICovCit9OworCisvKioKKyAqIGlwYXRoX2luc2VydF9ybnJfcXVldWUgLSBwdXQgUVAgb24gdGhlIFJOUiB0aW1lb3V0IGxpc3QgZm9yIHRoZSBkZXZpY2UKKyAqIEBxcDogdGhlIFFQCisgKgorICogWFhYIFVzZSBhIHNpbXBsZSBsaXN0IGZvciBub3cuICBXZSBtaWdodCBuZWVkIGEgcHJpb3JpdHkKKyAqIHF1ZXVlIGlmIHdlIGhhdmUgbG90cyBvZiBRUHMgd2FpdGluZyBmb3IgUk5SIHRpbWVvdXRzCisgKiBidXQgdGhhdCBzaG91bGQgYmUgcmFyZS4KKyAqLwordm9pZCBpcGF0aF9pbnNlcnRfcm5yX3F1ZXVlKHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZkZXYtPnJucndhaXQpKQorCQlsaXN0X2FkZCgmcXAtPnRpbWVyd2FpdCwgJmRldi0+cm5yd2FpdCk7CisJZWxzZSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmwgPSAmZGV2LT5ybnJ3YWl0OworCQlzdHJ1Y3QgaXBhdGhfcXAgKm5xcCA9IGxpc3RfZW50cnkobC0+bmV4dCwgc3RydWN0IGlwYXRoX3FwLAorCQkJCQkJICB0aW1lcndhaXQpOworCisJCXdoaWxlIChxcC0+c19ybnJfdGltZW91dCA+PSBucXAtPnNfcm5yX3RpbWVvdXQpIHsKKwkJCXFwLT5zX3Jucl90aW1lb3V0IC09IG5xcC0+c19ybnJfdGltZW91dDsKKwkJCWwgPSBsLT5uZXh0OworCQkJaWYgKGwtPm5leHQgPT0gJmRldi0+cm5yd2FpdCkKKwkJCQlicmVhazsKKwkJCW5xcCA9IGxpc3RfZW50cnkobC0+bmV4dCwgc3RydWN0IGlwYXRoX3FwLAorCQkJCQkgdGltZXJ3YWl0KTsKKwkJfQorCQlsaXN0X2FkZCgmcXAtPnRpbWVyd2FpdCwgbCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogaXBhdGhfZ2V0X3J3cWUgLSBjb3B5IHRoZSBuZXh0IFJXUUUgaW50byB0aGUgUVAncyBSV1FFCisgKiBAcXA6IHRoZSBRUAorICogQHdyX2lkX29ubHk6IHVwZGF0ZSB3cl9pZCBvbmx5LCBub3QgU0dFcworICoKKyAqIFJldHVybiAwIGlmIG5vIFJXUUUgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgcmV0dXJuIDEuCisgKgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbCB3aXRoIHRoZSBRUCByX3JxLmxvY2sgaGVsZC4KKyAqLworaW50IGlwYXRoX2dldF9yd3FlKHN0cnVjdCBpcGF0aF9xcCAqcXAsIGludCB3cl9pZF9vbmx5KQoreworCXN0cnVjdCBpcGF0aF9ycSAqcnE7CisJc3RydWN0IGlwYXRoX3NycSAqc3JxOworCXN0cnVjdCBpcGF0aF9yd3FlICp3cWU7CisJaW50IHJldDsKKworCWlmICghcXAtPmlicXAuc3JxKSB7CisJCXJxID0gJnFwLT5yX3JxOworCQlpZiAodW5saWtlbHkocnEtPnRhaWwgPT0gcnEtPmhlYWQpKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBiYWlsOworCQl9CisJCXdxZSA9IGdldF9yd3FlX3B0cihycSwgcnEtPnRhaWwpOworCQlxcC0+cl93cl9pZCA9IHdxZS0+d3JfaWQ7CisJCWlmICghd3JfaWRfb25seSkgeworCQkJcXAtPnJfc2dlLnNnZSA9IHdxZS0+c2dfbGlzdFswXTsKKwkJCXFwLT5yX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwkJCXFwLT5yX3NnZS5udW1fc2dlID0gd3FlLT5udW1fc2dlOworCQkJcXAtPnJfbGVuID0gd3FlLT5sZW5ndGg7CisJCX0KKwkJaWYgKCsrcnEtPnRhaWwgPj0gcnEtPnNpemUpCisJCQlycS0+dGFpbCA9IDA7CisJCXJldCA9IDE7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzcnEgPSB0b19pc3JxKHFwLT5pYnFwLnNycSk7CisJcnEgPSAmc3JxLT5ycTsKKwlzcGluX2xvY2soJnJxLT5sb2NrKTsKKwlpZiAodW5saWtlbHkocnEtPnRhaWwgPT0gcnEtPmhlYWQpKSB7CisJCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisJd3FlID0gZ2V0X3J3cWVfcHRyKHJxLCBycS0+dGFpbCk7CisJcXAtPnJfd3JfaWQgPSB3cWUtPndyX2lkOworCWlmICghd3JfaWRfb25seSkgeworCQlxcC0+cl9zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCQlxcC0+cl9zZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7CisJCXFwLT5yX3NnZS5udW1fc2dlID0gd3FlLT5udW1fc2dlOworCQlxcC0+cl9sZW4gPSB3cWUtPmxlbmd0aDsKKwl9CisJaWYgKCsrcnEtPnRhaWwgPj0gcnEtPnNpemUpCisJCXJxLT50YWlsID0gMDsKKwlpZiAoc3JxLT5pYnNycS5ldmVudF9oYW5kbGVyKSB7CisJCXN0cnVjdCBpYl9ldmVudCBldjsKKwkJdTMyIG47CisKKwkJaWYgKHJxLT5oZWFkIDwgcnEtPnRhaWwpCisJCQluID0gcnEtPnNpemUgKyBycS0+aGVhZCAtIHJxLT50YWlsOworCQllbHNlCisJCQluID0gcnEtPmhlYWQgLSBycS0+dGFpbDsKKwkJaWYgKG4gPCBzcnEtPmxpbWl0KSB7CisJCQlzcnEtPmxpbWl0ID0gMDsKKwkJCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQlldi5kZXZpY2UgPSBxcC0+aWJxcC5kZXZpY2U7CisJCQlldi5lbGVtZW50LnNycSA9IHFwLT5pYnFwLnNycTsKKwkJCWV2LmV2ZW50ID0gSUJfRVZFTlRfU1JRX0xJTUlUX1JFQUNIRUQ7CisJCQlzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIoJmV2LAorCQkJCQkJIHNycS0+aWJzcnEuc3JxX2NvbnRleHQpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJcmV0ID0gMTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3J1Y19sb29wYmFjayAtIGhhbmRsZSBVQyBhbmQgUkMgbG9va2JhY2sgcmVxdWVzdHMKKyAqIEBzcXA6IHRoZSBsb29wYmFjayBRUAorICogQHdjOiB0aGUgd29yayBjb21wbGV0aW9uIGVudHJ5CisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9kb191Y19zZW5kKCkgb3IgaXBhdGhfZG9fcmNfc2VuZCgpIHRvCisgKiBmb3J3YXJkIGEgV1FFIGFkZHJlc3NlZCB0byB0aGUgc2FtZSBIQ0EuCisgKiBOb3RlIHRoYXQgYWx0aG91Z2ggd2UgYXJlIHNpbmdsZSB0aHJlYWRlZCBkdWUgdG8gdGhlIHRhc2tsZXQsIHdlIHN0aWxsCisgKiBoYXZlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3N0X3NlbmQoKS4gIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIHJlY2VpdmUgaW50ZXJydXB0cyBzaW5jZSB0aGlzIGlzIGEgY29ubmVjdGVkIHByb3RvY29sIGFuZCBhbGwgcGFja2V0cworICogd2lsbCBwYXNzIHRocm91Z2ggaGVyZS4KKyAqLwordm9pZCBpcGF0aF9ydWNfbG9vcGJhY2soc3RydWN0IGlwYXRoX3FwICpzcXAsIHN0cnVjdCBpYl93YyAqd2MpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHNxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9xcCAqcXA7CisJc3RydWN0IGlwYXRoX3N3cWUgKndxZTsKKwlzdHJ1Y3QgaXBhdGhfc2dlICpzZ2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgc2RhdGE7CisKKwlxcCA9IGlwYXRoX2xvb2t1cF9xcG4oJmRldi0+cXBfdGFibGUsIHNxcC0+cmVtb3RlX3Fwbik7CisJaWYgKCFxcCkgeworCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCXJldHVybjsKKwl9CisKK2FnYWluOgorCXNwaW5fbG9ja19pcnFzYXZlKCZzcXAtPnNfbG9jaywgZmxhZ3MpOworCisJaWYgKCEoaWJfaXBhdGhfc3RhdGVfb3BzW3NxcC0+c3RhdGVdICYgSVBBVEhfUFJPQ0VTU19TRU5EX09LKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcXAtPnNfbG9jaywgZmxhZ3MpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogR2V0IHRoZSBuZXh0IHNlbmQgcmVxdWVzdC4gKi8KKwlpZiAoc3FwLT5zX2xhc3QgPT0gc3FwLT5zX2hlYWQpIHsKKwkJLyogU2VuZCB3b3JrIHF1ZXVlIGlzIGVtcHR5LiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcXAtPnNfbG9jaywgZmxhZ3MpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBXZSBjYW4gcmVseSBvbiB0aGUgZW50cnkgbm90IGNoYW5naW5nIHdpdGhvdXQgdGhlIHNfbG9jaworCSAqIGJlaW5nIGhlbGQgdW50aWwgd2UgdXBkYXRlIHNfbGFzdC4KKwkgKi8KKwl3cWUgPSBnZXRfc3dxZV9wdHIoc3FwLCBzcXAtPnNfbGFzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3FwLT5zX2xvY2ssIGZsYWdzKTsKKworCXdjLT53Y19mbGFncyA9IDA7CisJd2MtPmltbV9kYXRhID0gMDsKKworCXNxcC0+c19zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCXNxcC0+c19zZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7CisJc3FwLT5zX3NnZS5udW1fc2dlID0gd3FlLT53ci5udW1fc2dlOworCXNxcC0+c19sZW4gPSB3cWUtPmxlbmd0aDsKKwlzd2l0Y2ggKHdxZS0+d3Iub3Bjb2RlKSB7CisJY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgorCQl3Yy0+d2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJd2MtPmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIElCX1dSX1NFTkQ6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDApKSB7CisJCXJucl9uYWs6CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJCQkvKiBIYW5kbGUgUk5SIE5BSyAqLworCQkJaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1VDKQorCQkJCWdvdG8gc2VuZF9jb21wOworCQkJaWYgKHNxcC0+c19ybnJfcmV0cnkgPT0gMCkgeworCQkJCXdjLT5zdGF0dXMgPSBJQl9XQ19STlJfUkVUUllfRVhDX0VSUjsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWlmIChzcXAtPnNfcm5yX3JldHJ5X2NudCA8IDcpCisJCQkJc3FwLT5zX3Jucl9yZXRyeS0tOworCQkJZGV2LT5uX3Jucl9uYWtzKys7CisJCQlzcXAtPnNfcm5yX3RpbWVvdXQgPQorCQkJCWliX2lwYXRoX3Jucl90YWJsZVtzcXAtPnNfbWluX3Jucl90aW1lcl07CisJCQlpcGF0aF9pbnNlcnRfcm5yX3F1ZXVlKHNxcCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCQlicmVhazsKKworCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKKwkJd2MtPndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07CisJCXdjLT5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDEpKQorCQkJZ290byBybnJfbmFrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQlpZiAod3FlLT5sZW5ndGggPT0gMCkKKwkJCWJyZWFrOworCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnJfc2dlLCB3cWUtPmxlbmd0aCwKKwkJCQkJICAgIHdxZS0+d3Iud3IucmRtYS5yZW1vdGVfYWRkciwKKwkJCQkJICAgIHdxZS0+d3Iud3IucmRtYS5ya2V5LAorCQkJCQkgICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSkpKSB7CisJCWFjY19lcnI6CisJCQl3Yy0+c3RhdHVzID0gSUJfV0NfUkVNX0FDQ0VTU19FUlI7CisJCWVycjoKKwkJCXdjLT53cl9pZCA9IHdxZS0+d3Iud3JfaWQ7CisJCQl3Yy0+b3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJCXdjLT52ZW5kb3JfZXJyID0gMDsKKwkJCXdjLT5ieXRlX2xlbiA9IDA7CisJCQl3Yy0+cXBfbnVtID0gc3FwLT5pYnFwLnFwX251bTsKKwkJCXdjLT5zcmNfcXAgPSBzcXAtPnJlbW90ZV9xcG47CisJCQl3Yy0+cGtleV9pbmRleCA9IDA7CisJCQl3Yy0+c2xpZCA9IHNxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZDsKKwkJCXdjLT5zbCA9IHNxcC0+cmVtb3RlX2FoX2F0dHIuc2w7CisJCQl3Yy0+ZGxpZF9wYXRoX2JpdHMgPSAwOworCQkJd2MtPnBvcnRfbnVtID0gMDsKKwkJCWlwYXRoX3NxZXJyb3JfcXAoc3FwLCB3Yyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJaWYgKHVubGlrZWx5KCFpcGF0aF9ya2V5X29rKGRldiwgJnNxcC0+c19zZ2UsIHdxZS0+bGVuZ3RoLAorCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJlbW90ZV9hZGRyLAorCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJrZXksCisJCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpKSkKKwkJCWdvdG8gYWNjX2VycjsKKwkJaWYgKHVubGlrZWx5KCEocXAtPnFwX2FjY2Vzc19mbGFncyAmCisJCQkgICAgICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEKSkpCisJCQlnb3RvIGFjY19lcnI7CisJCXFwLT5yX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07CisJCXFwLT5yX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwkJcXAtPnJfc2dlLm51bV9zZ2UgPSB3cWUtPndyLm51bV9zZ2U7CisJCWJyZWFrOworCisJY2FzZSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1A6CisJY2FzZSBJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERDoKKwkJaWYgKHVubGlrZWx5KCFpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5yX3NnZSwgc2l6ZW9mKHU2NCksCisJCQkJCSAgICB3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIsCisJCQkJCSAgICB3cWUtPndyLndyLnJkbWEucmtleSwKKwkJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSkpCisJCQlnb3RvIGFjY19lcnI7CisJCS8qIFBlcmZvcm0gYXRvbWljIE9QIGFuZCBzYXZlIHJlc3VsdC4gKi8KKwkJc2RhdGEgPSB3cWUtPndyLndyLmF0b21pYy5zd2FwOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwkJcXAtPnJfYXRvbWljX2RhdGEgPSAqKHU2NCAqKSBxcC0+cl9zZ2Uuc2dlLnZhZGRyOworCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BREQpCisJCQkqKHU2NCAqKSBxcC0+cl9zZ2Uuc2dlLnZhZGRyID0KKwkJCQlxcC0+cl9hdG9taWNfZGF0YSArIHNkYXRhOworCQllbHNlIGlmIChxcC0+cl9hdG9taWNfZGF0YSA9PSB3cWUtPndyLndyLmF0b21pYy5jb21wYXJlX2FkZCkKKwkJCSoodTY0ICopIHFwLT5yX3NnZS5zZ2UudmFkZHIgPSBzZGF0YTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwkJKih1NjQgKikgc3FwLT5zX3NnZS5zZ2UudmFkZHIgPSBxcC0+cl9hdG9taWNfZGF0YTsKKwkJZ290byBzZW5kX2NvbXA7CisKKwlkZWZhdWx0OgorCQlnb3RvIGRvbmU7CisJfQorCisJc2dlID0gJnNxcC0+c19zZ2Uuc2dlOworCXdoaWxlIChzcXAtPnNfbGVuKSB7CisJCXUzMiBsZW4gPSBzcXAtPnNfbGVuOworCisJCWlmIChsZW4gPiBzZ2UtPmxlbmd0aCkKKwkJCWxlbiA9IHNnZS0+bGVuZ3RoOworCQlCVUdfT04obGVuID09IDApOworCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBzZ2UtPnZhZGRyLCBsZW4pOworCQlzZ2UtPnZhZGRyICs9IGxlbjsKKwkJc2dlLT5sZW5ndGggLT0gbGVuOworCQlzZ2UtPnNnZV9sZW5ndGggLT0gbGVuOworCQlpZiAoc2dlLT5zZ2VfbGVuZ3RoID09IDApIHsKKwkJCWlmICgtLXNxcC0+c19zZ2UubnVtX3NnZSkKKwkJCQkqc2dlID0gKnNxcC0+c19zZ2Uuc2dfbGlzdCsrOworCQl9IGVsc2UgaWYgKHNnZS0+bGVuZ3RoID09IDAgJiYgc2dlLT5tciAhPSBOVUxMKSB7CisJCQlpZiAoKytzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJCWJyZWFrOworCQkJCXNnZS0+biA9IDA7CisJCQl9CisJCQlzZ2UtPnZhZGRyID0KKwkJCQlzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyOworCQkJc2dlLT5sZW5ndGggPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoOworCQl9CisJCXNxcC0+c19sZW4gLT0gbGVuOworCX0KKworCWlmICh3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFIHx8CisJICAgIHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1JETUFfUkVBRCkKKwkJZ290byBzZW5kX2NvbXA7CisKKwlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkKKwkJd2MtPm9wY29kZSA9IElCX1dDX1JFQ1ZfUkRNQV9XSVRIX0lNTTsKKwllbHNlCisJCXdjLT5vcGNvZGUgPSBJQl9XQ19SRUNWOworCXdjLT53cl9pZCA9IHFwLT5yX3dyX2lkOworCXdjLT5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCXdjLT52ZW5kb3JfZXJyID0gMDsKKwl3Yy0+Ynl0ZV9sZW4gPSB3cWUtPmxlbmd0aDsKKwl3Yy0+cXBfbnVtID0gcXAtPmlicXAucXBfbnVtOworCXdjLT5zcmNfcXAgPSBxcC0+cmVtb3RlX3FwbjsKKwkvKiBYWFggZG8gd2Uga25vdyB3aGljaCBwa2V5IG1hdGNoZWQ/IE9ubHkgbmVlZGVkIGZvciBHU0kuICovCisJd2MtPnBrZXlfaW5kZXggPSAwOworCXdjLT5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7CisJd2MtPnNsID0gcXAtPnJlbW90ZV9haF9hdHRyLnNsOworCXdjLT5kbGlkX3BhdGhfYml0cyA9IDA7CisJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLworCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgd2MsCisJCSAgICAgICB3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCk7CisKK3NlbmRfY29tcDoKKwlzcXAtPnNfcm5yX3JldHJ5ID0gc3FwLT5zX3Jucl9yZXRyeV9jbnQ7CisKKwlpZiAoIXRlc3RfYml0KElQQVRIX1NfU0lHTkFMX1JFUV9XUiwgJnNxcC0+c19mbGFncykgfHwKKwkgICAgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU0lHTkFMRUQpKSB7CisJCXdjLT53cl9pZCA9IHdxZS0+d3Iud3JfaWQ7CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCQl3Yy0+b3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJd2MtPnZlbmRvcl9lcnIgPSAwOworCQl3Yy0+Ynl0ZV9sZW4gPSB3cWUtPmxlbmd0aDsKKwkJd2MtPnFwX251bSA9IHNxcC0+aWJxcC5xcF9udW07CisJCXdjLT5zcmNfcXAgPSAwOworCQl3Yy0+cGtleV9pbmRleCA9IDA7CisJCXdjLT5zbGlkID0gMDsKKwkJd2MtPnNsID0gMDsKKwkJd2MtPmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJd2MtPnBvcnRfbnVtID0gMDsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHNxcC0+aWJxcC5zZW5kX2NxKSwgd2MsIDApOworCX0KKworCS8qIFVwZGF0ZSBzX2xhc3Qgbm93IHRoYXQgd2UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIFNXUUUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3FwLT5zX2xvY2ssIGZsYWdzKTsKKwlpZiAoKytzcXAtPnNfbGFzdCA+PSBzcXAtPnNfc2l6ZSkKKwkJc3FwLT5zX2xhc3QgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNxcC0+c19sb2NrLCBmbGFncyk7CisJZ290byBhZ2FpbjsKKworZG9uZToKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJd2FrZV91cCgmcXAtPndhaXQpOworfQorCisvKioKKyAqIGlwYXRoX25vX2J1ZnNfYXZhaWxhYmxlIC0gdGVsbCB0aGUgbGF5ZXIgZHJpdmVyIHdlIG5lZWQgYnVmZmVycworICogQHFwOiB0aGUgUVAgdGhhdCBjYXVzZWQgdGhlIHByb2JsZW0KKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2UgcmFuIG91dCBvZiBidWZmZXJzIG9uCisgKgorICogQ2FsbGVkIHdoZW4gd2UgcnVuIG91dCBvZiBQSU8gYnVmZmVycy4KKyAqLwordm9pZCBpcGF0aF9ub19idWZzX2F2YWlsYWJsZShzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJnFwLT5waW93YWl0KSkKKwkJbGlzdF9hZGRfdGFpbCgmcXAtPnBpb3dhaXQsICZkZXYtPnBpb3dhaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBOb3RlIHRoYXQgYXMgc29vbiBhcyBpcGF0aF9sYXllcl93YW50X2J1ZmZlcigpIGlzIGNhbGxlZCBhbmQKKwkgKiBwb3NzaWJseSBiZWZvcmUgaXQgcmV0dXJucywgaXBhdGhfaWJfcGlvYnVmYXZhaWwoKQorCSAqIGNvdWxkIGJlIGNhbGxlZC4gIElmIHdlIGFyZSBzdGlsbCBpbiB0aGUgdGFza2xldCBmdW5jdGlvbiwKKwkgKiB0YXNrbGV0X2hpX3NjaGVkdWxlKCkgd2lsbCBub3QgY2FsbCB1cyB1bnRpbCB0aGUgbmV4dCB0aW1lCisJICogdGFza2xldF9oaV9zY2hlZHVsZSgpIGlzIGNhbGxlZC4KKwkgKiBXZSBjbGVhciB0aGUgdGFza2xldCBmbGFnIG5vdyBzaW5jZSB3ZSBhcmUgY29tbWl0dGluZyB0byByZXR1cm4KKwkgKiBmcm9tIHRoZSB0YXNrbGV0IGZ1bmN0aW9uLgorCSAqLworCWNsZWFyX2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncyk7CisJdGFza2xldF91bmxvY2soJnFwLT5zX3Rhc2spOworCWlwYXRoX2xheWVyX3dhbnRfYnVmZmVyKGRldi0+ZGQpOworCWRldi0+bl9waW93YWl0Kys7Cit9CisKKy8qKgorICogaXBhdGhfcG9zdF9yY19zZW5kIC0gcG9zdCBSQyBhbmQgVUMgc2VuZHMKKyAqIEBxcDogdGhlIFFQIHRvIHBvc3Qgb24KKyAqIEB3cjogdGhlIHdvcmsgcmVxdWVzdCB0byBzZW5kCisgKi8KK2ludCBpcGF0aF9wb3N0X3JjX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyKQoreworCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbmV4dDsKKwlpbnQgaSwgajsKKwlpbnQgYWNjOworCWludCByZXQ7CisKKwkvKgorCSAqIERvbid0IGFsbG93IFJETUEgcmVhZHMgb3IgYXRvbWljIG9wZXJhdGlvbnMgb24gVUMgb3IKKwkgKiB1bmRlZmluZWQgb3BlcmF0aW9ucy4KKwkgKiBNYWtlIHN1cmUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQgZm9yIGF0b21pY3MuCisJICovCisJaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1VDKSB7CisJCWlmICgodW5zaWduZWQpIHdyLT5vcGNvZGUgPj0gSUJfV1JfUkRNQV9SRUFEKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBiYWlsOworCQl9CisJfSBlbHNlIGlmICgodW5zaWduZWQpIHdyLT5vcGNvZGUgPiBJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfSBlbHNlIGlmICh3ci0+b3Bjb2RlID49IElCX1dSX0FUT01JQ19DTVBfQU5EX1NXUCAmJgorCQkgICAod3ItPm51bV9zZ2UgPT0gMCB8fAorCQkgICAgd3ItPnNnX2xpc3RbMF0ubGVuZ3RoIDwgc2l6ZW9mKHU2NCkgfHwKKwkJICAgIHdyLT5zZ19saXN0WzBdLmFkZHIgJiAoc2l6ZW9mKHU2NCkgLSAxKSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwkvKiBJQiBzcGVjIHNheXMgdGhhdCBudW1fc2dlID09IDAgaXMgT0suICovCisJaWYgKHdyLT5udW1fc2dlID4gcXAtPnNfbWF4X3NnZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJbmV4dCA9IHFwLT5zX2hlYWQgKyAxOworCWlmIChuZXh0ID49IHFwLT5zX3NpemUpCisJCW5leHQgPSAwOworCWlmIChuZXh0ID09IHFwLT5zX2xhc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBxcC0+c19oZWFkKTsKKwl3cWUtPndyID0gKndyOworCXdxZS0+c3NuID0gcXAtPnNfc3NuKys7CisJd3FlLT5zZ19saXN0WzBdLm1yID0gTlVMTDsKKwl3cWUtPnNnX2xpc3RbMF0udmFkZHIgPSBOVUxMOworCXdxZS0+c2dfbGlzdFswXS5sZW5ndGggPSAwOworCXdxZS0+c2dfbGlzdFswXS5zZ2VfbGVuZ3RoID0gMDsKKwl3cWUtPmxlbmd0aCA9IDA7CisJYWNjID0gd3ItPm9wY29kZSA+PSBJQl9XUl9SRE1BX1JFQUQgPyBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgOiAwOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgd3ItPm51bV9zZ2U7IGkrKykgeworCQlpZiAodG9faXBkKHFwLT5pYnFwLnBkKS0+dXNlciAmJiB3ci0+c2dfbGlzdFtpXS5sa2V5ID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaWYgKHdyLT5zZ19saXN0W2ldLmxlbmd0aCA9PSAwKQorCQkJY29udGludWU7CisJCWlmICghaXBhdGhfbGtleV9vaygmdG9faWRldihxcC0+aWJxcC5kZXZpY2UpLT5sa190YWJsZSwKKwkJCQkgICAmd3FlLT5zZ19saXN0W2pdLCAmd3ItPnNnX2xpc3RbaV0sCisJCQkJICAgYWNjKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQl3cWUtPmxlbmd0aCArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7CisJCWorKzsKKwl9CisJd3FlLT53ci5udW1fc2dlID0gajsKKwlxcC0+c19oZWFkID0gbmV4dDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwlpZiAocXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfVUMpCisJCWlwYXRoX2RvX3VjX3NlbmQoKHVuc2lnbmVkIGxvbmcpIHFwKTsKKwllbHNlCisJCWlwYXRoX2RvX3JjX3NlbmQoKHVuc2lnbmVkIGxvbmcpIHFwKTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWM0YzZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisKKy8qKgorICogaXBhdGhfcG9zdF9zcnFfcmVjZWl2ZSAtIHBvc3QgYSByZWNlaXZlIG9uIGEgc2hhcmVkIHJlY2VpdmUgcXVldWUKKyAqIEBpYnNycTogdGhlIFNSUSB0byBwb3N0IHRoZSByZWNlaXZlIG9uCisgKiBAd3I6IHRoZSBsaXN0IG9mIHdvcmsgcmVxdWVzdHMgdG8gcG9zdAorICogQGJhZF93cjogdGhlIGZpcnN0IFdSIHRvIGNhdXNlIGEgcHJvYmxlbSBpcyBwdXQgaGVyZQorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCitpbnQgaXBhdGhfcG9zdF9zcnFfcmVjZWl2ZShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3JlY3Zfd3IgKndyLAorCQkJICAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfd3IpCit7CisJc3RydWN0IGlwYXRoX3NycSAqc3JxID0gdG9faXNycShpYnNycSk7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGlic3JxLT5kZXZpY2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWZvciAoOyB3cjsgd3IgPSB3ci0+bmV4dCkgeworCQlzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlOworCQl1MzIgbmV4dDsKKwkJaW50IGksIGo7CisKKwkJaWYgKHdyLT5udW1fc2dlID4gc3JxLT5ycS5tYXhfc2dlKSB7CisJCQkqYmFkX3dyID0gd3I7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOworCQluZXh0ID0gc3JxLT5ycS5oZWFkICsgMTsKKwkJaWYgKG5leHQgPj0gc3JxLT5ycS5zaXplKQorCQkJbmV4dCA9IDA7CisJCWlmIChuZXh0ID09IHNycS0+cnEudGFpbCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7CisJCQkqYmFkX3dyID0gd3I7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisKKwkJd3FlID0gZ2V0X3J3cWVfcHRyKCZzcnEtPnJxLCBzcnEtPnJxLmhlYWQpOworCQl3cWUtPndyX2lkID0gd3ItPndyX2lkOworCQl3cWUtPnNnX2xpc3RbMF0ubXIgPSBOVUxMOworCQl3cWUtPnNnX2xpc3RbMF0udmFkZHIgPSBOVUxMOworCQl3cWUtPnNnX2xpc3RbMF0ubGVuZ3RoID0gMDsKKwkJd3FlLT5zZ19saXN0WzBdLnNnZV9sZW5ndGggPSAwOworCQl3cWUtPmxlbmd0aCA9IDA7CisJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgd3ItPm51bV9zZ2U7IGkrKykgeworCQkJLyogQ2hlY2sgTEtFWSAqLworCQkJaWYgKHRvX2lwZChzcnEtPmlic3JxLnBkKS0+dXNlciAmJgorCQkJICAgIHdyLT5zZ19saXN0W2ldLmxrZXkgPT0gMCkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJKmJhZF93ciA9IHdyOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJaWYgKHdyLT5zZ19saXN0W2ldLmxlbmd0aCA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpcGF0aF9sa2V5X29rKCZkZXYtPmxrX3RhYmxlLAorCQkJCQkgICAmd3FlLT5zZ19saXN0W2pdLAorCQkJCQkgICAmd3ItPnNnX2xpc3RbaV0sCisJCQkJCSAgIElCX0FDQ0VTU19MT0NBTF9XUklURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCSpiYWRfd3IgPSB3cjsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCXdxZS0+bGVuZ3RoICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKKwkJCWorKzsKKwkJfQorCQl3cWUtPm51bV9zZ2UgPSBqOworCQlzcnEtPnJxLmhlYWQgPSBuZXh0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX2NyZWF0ZV9zcnEgLSBjcmVhdGUgYSBzaGFyZWQgcmVjZWl2ZSBxdWV1ZQorICogQGlicGQ6IHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBvZiB0aGUgU1JRIHRvIGNyZWF0ZQorICogQGF0dHI6IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBTUlEKKyAqIEB1ZGF0YTogbm90IHVzZWQgYnkgdGhlIEluZmluaVBhdGggdmVyYnMgZHJpdmVyCisgKi8KK3N0cnVjdCBpYl9zcnEgKmlwYXRoX2NyZWF0ZV9zcnEoc3RydWN0IGliX3BkICppYnBkLAorCQkJCXN0cnVjdCBpYl9zcnFfaW5pdF9hdHRyICpzcnFfaW5pdF9hdHRyLAorCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IGlwYXRoX3NycSAqc3JxOworCXUzMiBzejsKKwlzdHJ1Y3QgaWJfc3JxICpyZXQ7CisKKwlpZiAoc3JxX2luaXRfYXR0ci0+YXR0ci5tYXhfc2dlIDwgMSkgeworCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIGJhaWw7CisJfQorCisJc3JxID0ga21hbGxvYyhzaXplb2YoKnNycSksIEdGUF9LRVJORUwpOworCWlmICghc3JxKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKgorCSAqIE5lZWQgdG8gdXNlIHZtYWxsb2MoKSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbGFyZ2UgI3Mgb2YgZW50cmllcy4KKwkgKi8KKwlzcnEtPnJxLnNpemUgPSBzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF93ciArIDE7CisJc3ogPSBzaXplb2Yoc3RydWN0IGlwYXRoX3NnZSkgKiBzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF9zZ2UgKworCQlzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpOworCXNycS0+cnEud3EgPSB2bWFsbG9jKHNycS0+cnEuc2l6ZSAqIHN6KTsKKwlpZiAoIXNycS0+cnEud3EpIHsKKwkJa2ZyZWUoc3JxKTsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogaWJfY3JlYXRlX3NycSgpIHdpbGwgaW5pdGlhbGl6ZSBzcnEtPmlic3JxLgorCSAqLworCXNwaW5fbG9ja19pbml0KCZzcnEtPnJxLmxvY2spOworCXNycS0+cnEuaGVhZCA9IDA7CisJc3JxLT5ycS50YWlsID0gMDsKKwlzcnEtPnJxLm1heF9zZ2UgPSBzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF9zZ2U7CisJc3JxLT5saW1pdCA9IHNycV9pbml0X2F0dHItPmF0dHIuc3JxX2xpbWl0OworCisJcmV0ID0gJnNycS0+aWJzcnE7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9tb2RpZnlfc3JxIC0gbW9kaWZ5IGEgc2hhcmVkIHJlY2VpdmUgcXVldWUKKyAqIEBpYnNycTogdGhlIFNSUSB0byBtb2RpZnkKKyAqIEBhdHRyOiB0aGUgbmV3IGF0dHJpYnV0ZXMgb2YgdGhlIFNSUQorICogQGF0dHJfbWFzazogaW5kaWNhdGVzIHdoaWNoIGF0dHJpYnV0ZXMgdG8gbW9kaWZ5CisgKi8KK2ludCBpcGF0aF9tb2RpZnlfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKmF0dHIsCisJCSAgICAgZW51bSBpYl9zcnFfYXR0cl9tYXNrIGF0dHJfbWFzaykKK3sKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnEgPSB0b19pc3JxKGlic3JxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX0xJTUlUKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwkJc3JxLT5saW1pdCA9IGF0dHItPnNycV9saW1pdDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7CisJfQorCWlmIChhdHRyX21hc2sgJiBJQl9TUlFfTUFYX1dSKSB7CisJCXUzMiBzaXplID0gYXR0ci0+bWF4X3dyICsgMTsKKwkJc3RydWN0IGlwYXRoX3J3cWUgKndxLCAqcDsKKwkJdTMyIG47CisJCXUzMiBzejsKKworCQlpZiAoYXR0ci0+bWF4X3NnZSA8IHNycS0+cnEubWF4X3NnZSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXN6ID0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9yd3FlKSArCisJCQlhdHRyLT5tYXhfc2dlICogc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpOworCQl3cSA9IHZtYWxsb2Moc2l6ZSAqIHN6KTsKKwkJaWYgKCF3cSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwkJaWYgKHNycS0+cnEuaGVhZCA8IHNycS0+cnEudGFpbCkKKwkJCW4gPSBzcnEtPnJxLnNpemUgKyBzcnEtPnJxLmhlYWQgLSBzcnEtPnJxLnRhaWw7CisJCWVsc2UKKwkJCW4gPSBzcnEtPnJxLmhlYWQgLSBzcnEtPnJxLnRhaWw7CisJCWlmIChzaXplIDw9IG4gfHwgc2l6ZSA8PSBzcnEtPmxpbWl0KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwkJCXZmcmVlKHdxKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJbiA9IDA7CisJCXAgPSB3cTsKKwkJd2hpbGUgKHNycS0+cnEudGFpbCAhPSBzcnEtPnJxLmhlYWQpIHsKKwkJCXN0cnVjdCBpcGF0aF9yd3FlICp3cWU7CisJCQlpbnQgaTsKKworCQkJd3FlID0gZ2V0X3J3cWVfcHRyKCZzcnEtPnJxLCBzcnEtPnJxLnRhaWwpOworCQkJcC0+d3JfaWQgPSB3cWUtPndyX2lkOworCQkJcC0+bGVuZ3RoID0gd3FlLT5sZW5ndGg7CisJCQlwLT5udW1fc2dlID0gd3FlLT5udW1fc2dlOworCQkJZm9yIChpID0gMDsgaSA8IHdxZS0+bnVtX3NnZTsgaSsrKQorCQkJCXAtPnNnX2xpc3RbaV0gPSB3cWUtPnNnX2xpc3RbaV07CisJCQluKys7CisJCQlwID0gKHN0cnVjdCBpcGF0aF9yd3FlICopKChjaGFyICopIHAgKyBzeik7CisJCQlpZiAoKytzcnEtPnJxLnRhaWwgPj0gc3JxLT5ycS5zaXplKQorCQkJCXNycS0+cnEudGFpbCA9IDA7CisJCX0KKwkJdmZyZWUoc3JxLT5ycS53cSk7CisJCXNycS0+cnEud3EgPSB3cTsKKwkJc3JxLT5ycS5zaXplID0gc2l6ZTsKKwkJc3JxLT5ycS5oZWFkID0gbjsKKwkJc3JxLT5ycS50YWlsID0gMDsKKwkJc3JxLT5ycS5tYXhfc2dlID0gYXR0ci0+bWF4X3NnZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfcXVlcnlfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKmF0dHIpCit7CisJc3RydWN0IGlwYXRoX3NycSAqc3JxID0gdG9faXNycShpYnNycSk7CisKKwlhdHRyLT5tYXhfd3IgPSBzcnEtPnJxLnNpemUgLSAxOworCWF0dHItPm1heF9zZ2UgPSBzcnEtPnJxLm1heF9zZ2U7CisJYXR0ci0+c3JxX2xpbWl0ID0gc3JxLT5saW1pdDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF9kZXN0cm95X3NycSAtIGRlc3Ryb3kgYSBzaGFyZWQgcmVjZWl2ZSBxdWV1ZQorICogQGlic3JxOiB0aGUgU1JRIHRvIGRlc3Ryb3kKKyAqLworaW50IGlwYXRoX2Rlc3Ryb3lfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxKQoreworCXN0cnVjdCBpcGF0aF9zcnEgKnNycSA9IHRvX2lzcnEoaWJzcnEpOworCisJdmZyZWUoc3JxLT5ycS53cSk7CisJa2ZyZWUoc3JxKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIwOTEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKworc3RydWN0IGluZmluaXBhdGhfc3RhdHMgaXBhdGhfc3RhdHM7CisKKy8qKgorICogaXBhdGhfc25hcF9jbnRyIC0gc25hcHNob3QgYSBjaGlwIGNvdW50ZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAY3JlZzogdGhlIGNvdW50ZXIgdG8gc25hcHNob3QKKyAqCisgKiBjYWxsZWQgZnJvbSBhZGRfdGltZXIgYW5kIHVzZXIgY291bnRlciByZWFkIGNhbGxzLCB0byBkZWFsIHdpdGgKKyAqIGNvdW50ZXJzIHRoYXQgd3JhcCBpbiAiaHVtYW4gdGltZSIuICBUaGUgd29yZHMgc2VudCBhbmQgcmVjZWl2ZWQsIGFuZAorICogdGhlIHBhY2tldHMgc2VudCBhbmQgcmVjZWl2ZWQgYXJlIGFsbCB0aGF0IHdlIHdvcnJ5IGFib3V0LiAgRm9yIG5vdywKKyAqIGF0IGxlYXN0LCB3ZSBkb24ndCB3b3JyeSBhYm91dCBlcnJvciBjb3VudGVycywgYmVjYXVzZSBpZiB0aGV5IHdyYXAKKyAqIHRoYXQgcXVpY2tseSwgd2UgcHJvYmFibHkgZG9uJ3QgY2FyZS4gIFdlIG1heSBldmVudHVhbGx5IGp1c3QgbWFrZSB0aGlzCisgKiBoYW5kbGUgYWxsIHRoZSBjb3VudGVycy4gIHdvcmQgY291bnRlcnMgY2FuIHdyYXAgaW4gYWJvdXQgMjAgc2Vjb25kcworICogb2YgZnVsbCBiYW5kd2lkdGggdHJhZmZpYywgcGFja2V0IGNvdW50ZXJzIGluIGEgZmV3IGhvdXJzLgorICovCisKK3U2NCBpcGF0aF9zbmFwX2NudHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9jcmVnIGNyZWcpCit7CisJdTMyIHZhbCwgcmVnNjQgPSAwOworCXU2NCB2YWw2NDsKKwl1bnNpZ25lZCBsb25nIHQwLCB0MTsKKwl1NjQgcmV0OworCisJdDAgPSBqaWZmaWVzOworCS8qIElmIGZhc3QgaW5jcmVtZW50IGNvdW50ZXJzIGFyZSBvbmx5IDMyIGJpdHMsIHNuYXBzaG90IHRoZW0sCisJICogYW5kIG1haW50YWluIHRoZW0gYXMgNjRiaXQgdmFsdWVzIGluIHRoZSBkcml2ZXIgKi8KKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF8zMkJJVENPVU5URVJTKSAmJgorCSAgICAoY3JlZyA9PSBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250IHx8CisJICAgICBjcmVnID09IGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHJjdmNudCB8fAorCSAgICAgY3JlZyA9PSBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHNlbmRjbnQgfHwKKwkgICAgIGNyZWcgPT0gZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RyY3ZjbnQpKSB7CisJCXZhbDY0ID0gaXBhdGhfcmVhZF9jcmVnKGRkLCBjcmVnKTsKKwkJdmFsID0gdmFsNjQgPT0gfjBVTEwgPyB+MFUgOiAwOworCQlyZWc2NCA9IDE7CisJfSBlbHNlCQkJLyogdmFsNjQganVzdCB0byBrZWVwIGdjYyBxdWlldC4uLiAqLworCQl2YWw2NCA9IHZhbCA9IGlwYXRoX3JlYWRfY3JlZzMyKGRkLCBjcmVnKTsKKwkvKgorCSAqIFNlZSBpZiBhIHNlY29uZCBoYXMgcGFzc2VkLiAgVGhpcyBpcyBqdXN0IGEgd2F5IHRvIGRldGVjdCB0aGluZ3MKKwkgKiB0aGF0IGFyZSBxdWl0ZSBicm9rZW4uICBOb3JtYWxseSB0aGlzIHNob3VsZCB0YWtlIGp1c3QgYSBmZXcKKwkgKiBjeWNsZXMgKHRoZSBjaGVjayBpcyBmb3IgbG9uZyBlbm91Z2ggdGhhdCB3ZSBkb24ndCBjYXJlIGlmIHdlIGdldAorCSAqIHByZS1lbXB0ZWQuKSAgQW4gT3B0ZXJvbiBIVCBPIHJlYWQgdGltZW91dCBpcyA0IHNlY29uZHMgd2l0aAorCSAqIG5vcm1hbCBOQiB2YWx1ZXMKKwkgKi8KKwl0MSA9IGppZmZpZXM7CisJaWYgKHRpbWVfYmVmb3JlKHQwICsgSFosIHQxKSAmJiB2YWwgPT0gLTEpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkVycm9yISAgUmVhZCBjb3VudGVyIDB4JXggdGltZWQgb3V0XG4iLAorCQkJICAgICAgY3JlZyk7CisJCXJldCA9IDBVTEw7CisJCWdvdG8gYmFpbDsKKwl9CisJaWYgKHJlZzY0KSB7CisJCXJldCA9IHZhbDY0OworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGNyZWcgPT0gZGQtPmlwYXRoX2NyZWdzLT5jcl93b3Jkc2VuZGNudCkgeworCQlpZiAodmFsICE9IGRkLT5pcGF0aF9sYXN0c3dvcmQpIHsKKwkJCWRkLT5pcGF0aF9zd29yZCArPSB2YWwgLSBkZC0+aXBhdGhfbGFzdHN3b3JkOworCQkJZGQtPmlwYXRoX2xhc3Rzd29yZCA9IHZhbDsKKwkJfQorCQl2YWw2NCA9IGRkLT5pcGF0aF9zd29yZDsKKwl9IGVsc2UgaWYgKGNyZWcgPT0gZGQtPmlwYXRoX2NyZWdzLT5jcl93b3JkcmN2Y250KSB7CisJCWlmICh2YWwgIT0gZGQtPmlwYXRoX2xhc3Ryd29yZCkgeworCQkJZGQtPmlwYXRoX3J3b3JkICs9IHZhbCAtIGRkLT5pcGF0aF9sYXN0cndvcmQ7CisJCQlkZC0+aXBhdGhfbGFzdHJ3b3JkID0gdmFsOworCQl9CisJCXZhbDY0ID0gZGQtPmlwYXRoX3J3b3JkOworCX0gZWxzZSBpZiAoY3JlZyA9PSBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHNlbmRjbnQpIHsKKwkJaWYgKHZhbCAhPSBkZC0+aXBhdGhfbGFzdHNwa3RzKSB7CisJCQlkZC0+aXBhdGhfc3BrdHMgKz0gdmFsIC0gZGQtPmlwYXRoX2xhc3RzcGt0czsKKwkJCWRkLT5pcGF0aF9sYXN0c3BrdHMgPSB2YWw7CisJCX0KKwkJdmFsNjQgPSBkZC0+aXBhdGhfc3BrdHM7CisJfSBlbHNlIGlmIChjcmVnID09IGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KSB7CisJCWlmICh2YWwgIT0gZGQtPmlwYXRoX2xhc3RycGt0cykgeworCQkJZGQtPmlwYXRoX3Jwa3RzICs9IHZhbCAtIGRkLT5pcGF0aF9sYXN0cnBrdHM7CisJCQlkZC0+aXBhdGhfbGFzdHJwa3RzID0gdmFsOworCQl9CisJCXZhbDY0ID0gZGQtPmlwYXRoX3Jwa3RzOworCX0gZWxzZQorCQl2YWw2NCA9ICh1NjQpIHZhbDsKKworCXJldCA9IHZhbDY0OworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfcWNoZWNrIC0gcHJpbnQgZGVsdGEgb2YgZWdyZnVsbC9oZHJxZnVsbCBlcnJvcnMgZm9yIGtlcm5lbCBwb3J0cworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBwcmludCB0aGUgZGVsdGEgb2YgZWdyZnVsbC9oZHJxZnVsbCBlcnJvcnMgZm9yIGtlcm5lbCBwb3J0cyBubyBtb3JlIHRoYW4KKyAqIGV2ZXJ5IDUgc2Vjb25kcy4gIFVzZXIgcHJvY2Vzc2VzIGFyZSBwcmludGVkIGF0IGNsb3NlLCBidXQga2VybmVsIGRvZXNuJ3QKKyAqIGNsb3NlLCBzby4uLiAgU2VwYXJhdGUgcm91dGluZSBzbyBtYXkgY2FsbCBmcm9tIG90aGVyIHBsYWNlcyBzb21lZGF5LCBhbmQKKyAqIHNvIGZ1bmN0aW9uIG5hbWUgd2hlbiBwcmludGVkIGJ5IF9JUEFUSF9JTkZPIGlzIG1lYW5pbmdmdWxsCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3FjaGVjayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc3RhdGljIHU2NCBsYXN0X3RvdF9oZHJxZnVsbDsKKwlzaXplX3QgYmxlbiA9IDA7CisJY2hhciBidWZbMTI4XTsKKworCSpidWYgPSAwOworCWlmIChkZC0+aXBhdGhfcGRbMF0tPnBvcnRfaGRycWZ1bGwgIT0gZGQtPmlwYXRoX3AwX2hkcnFmdWxsKSB7CisJCWJsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICJwb3J0IDAgaGRycWZ1bGwgJXUiLAorCQkJCWRkLT5pcGF0aF9wZFswXS0+cG9ydF9oZHJxZnVsbCAtCisJCQkJZGQtPmlwYXRoX3AwX2hkcnFmdWxsKTsKKwkJZGQtPmlwYXRoX3AwX2hkcnFmdWxsID0gZGQtPmlwYXRoX3BkWzBdLT5wb3J0X2hkcnFmdWxsOworCX0KKwlpZiAoaXBhdGhfc3RhdHMuc3BzX2V0aWRmdWxsICE9IGRkLT5pcGF0aF9sYXN0X3RpZGZ1bGwpIHsKKwkJYmxlbiArPSBzbnByaW50ZihidWYgKyBibGVuLCBzaXplb2YgYnVmIC0gYmxlbiwKKwkJCQkgIiVzcmN2ZWdyZnVsbCAlbGx1IiwKKwkJCQkgYmxlbiA/ICIsICIgOiAiIiwKKwkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgKGlwYXRoX3N0YXRzLnNwc19ldGlkZnVsbCAtCisJCQkJICBkZC0+aXBhdGhfbGFzdF90aWRmdWxsKSk7CisJCWRkLT5pcGF0aF9sYXN0X3RpZGZ1bGwgPSBpcGF0aF9zdGF0cy5zcHNfZXRpZGZ1bGw7CisJfQorCisJLyoKKwkgKiB0aGlzIGlzIGFjdHVhbGx5IHRoZSBudW1iZXIgb2YgaGRycSBmdWxsIGludGVycnVwdHMsIG5vdCBhY3R1YWwKKwkgKiBldmVudHMsIGJ1dCBhdCB0aGUgbW9tZW50IHRoYXQncyBtb3N0bHkgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi4KKwkgKiBBY3R1YWwgY291bnQsIGV0Yy4gaXMgaW4gdGhlIGNvdW50ZXJzLCBpZiBuZWVkZWQuICBGb3IgcHJvZHVjdGlvbgorCSAqIHVzZXJzIHRoaXMgd29uJ3Qgb3JkaW5hcmlseSBiZSBwcmludGVkLgorCSAqLworCisJaWYgKChpcGF0aF9kZWJ1ZyAmIChfX0lQQVRIX1BLVERCRyB8IF9fSVBBVEhfREJHKSkgJiYKKwkgICAgaXBhdGhfc3RhdHMuc3BzX2hkcnFmdWxsICE9IGxhc3RfdG90X2hkcnFmdWxsKSB7CisJCWJsZW4gKz0gc25wcmludGYoYnVmICsgYmxlbiwgc2l6ZW9mIGJ1ZiAtIGJsZW4sCisJCQkJICIlc2hkcnFmdWxsICVsbHUgKGFsbCBwb3J0cykiLAorCQkJCSBibGVuID8gIiwgIiA6ICIiLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAoaXBhdGhfc3RhdHMuc3BzX2hkcnFmdWxsIC0KKwkJCQkgIGxhc3RfdG90X2hkcnFmdWxsKSk7CisJCWxhc3RfdG90X2hkcnFmdWxsID0gaXBhdGhfc3RhdHMuc3BzX2hkcnFmdWxsOworCX0KKwlpZiAoYmxlbikKKwkJaXBhdGhfZGJnKCIlc1xuIiwgYnVmKTsKKworCWlmIChkZC0+aXBhdGhfcG9ydDBoZWFkICE9ICh1MzIpCisJICAgIGxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKSB7CisJCWlmIChkZC0+aXBhdGhfbGFzdHBvcnQwcmN2X2NudCA9PQorCQkgICAgaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0cykgeworCQkJaXBhdGhfY2RiZyhQS1QsICJtaXNzaW5nIHJjdiBpbnRlcnJ1cHRzPyAiCisJCQkJICAgInBvcnQwIGhkPSVsbHggdGw9JXg7IHBvcnQwcGt0cyAlbGx4XG4iLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0ciksCisJCQkJICAgZGQtPmlwYXRoX3BvcnQwaGVhZCwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAgIGlwYXRoX3N0YXRzLnNwc19wb3J0MHBrdHMpOworCQkJaXBhdGhfa3JlY2VpdmUoZGQpOworCQl9CisJCWRkLT5pcGF0aF9sYXN0cG9ydDByY3ZfY250ID0gaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0czsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfZ2V0X2Zhc3RzdGF0cyAtIGdldCB3b3JkIGNvdW50ZXJzIGZyb20gY2hpcCBiZWZvcmUgdGhleSBvdmVyZmxvdworICogQG9wYXF1ZSAtIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgaW5maW5pcGF0aCBkZXZpY2UgaXBhdGhfZGV2ZGF0YQorICoKKyAqIGNhbGxlZCBmcm9tIGFkZF90aW1lcgorICovCit2b2lkIGlwYXRoX2dldF9mYXN0c3RhdHModW5zaWduZWQgbG9uZyBvcGFxdWUpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopIG9wYXF1ZTsKKwl1MzIgdmFsOworCXN0YXRpYyB1bnNpZ25lZCBjbnQ7CisKKwkvKgorCSAqIGRvbid0IGFjY2VzcyB0aGUgY2hpcCB3aGlsZSBydW5uaW5nIGRpYWdzLCBvciBtZW1vcnkgZGlhZ3MgY2FuCisJICogZmFpbAorCSAqLworCWlmICghZGQtPmlwYXRoX2tyZWdiYXNlIHx8ICEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUFJFU0VOVCkgfHwKKwkgICAgaXBhdGhfZGlhZ19pbnVzZSkKKwkJLyogYnV0IHJlLWFybSB0aGUgdGltZXIsIGZvciBkaWFncyBjYXNlOyB3b24ndCBodXJ0IG90aGVyICovCisJCWdvdG8gZG9uZTsKKworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF8zMkJJVENPVU5URVJTKSB7CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl93b3Jkc2VuZGNudCk7CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl93b3JkcmN2Y250KTsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHNlbmRjbnQpOworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KTsKKwl9CisKKwlpcGF0aF9xY2hlY2soZGQpOworCisJLyoKKwkgKiBkZWFsIHdpdGggcmVwZWF0IGVycm9yIHN1cHByZXNzaW9uLiAgRG9lc24ndCByZWFsbHkgbWF0dGVyIGlmCisJICogbGFzdCBlcnJvciB3YXMgYWxtb3N0IGEgZnVsbCBpbnRlcnZhbCBhZ28sIG9yIGp1c3QgYSBmZXcgdXNlY3MKKwkgKiBhZ287IHN0aWxsIHdvbid0IGdldCBtb3JlIHRoYW4gMiBwZXIgaW50ZXJ2YWwuICBXZSBtYXkgd2FudAorCSAqIGxvbmdlciBpbnRlcnZhbHMgZm9yIHRoaXMgZXZlbnR1YWxseSwgY291bGQgZG8gd2l0aCBtb2QsIGNvdW50ZXIKKwkgKiBvciBzZXBhcmF0ZSB0aW1lci4gIEFsc28gc2VlIGNvZGUgaW4gaXBhdGhfaGFuZGxlX2Vycm9ycygpIGFuZAorCSAqIGlwYXRoX2hhbmRsZV9od2Vycm9ycygpLgorCSAqLworCisJaWYgKGRkLT5pcGF0aF9sYXN0ZXJyb3IpCisJCWRkLT5pcGF0aF9sYXN0ZXJyb3IgPSAwOworCWlmIChkZC0+aXBhdGhfbGFzdGh3ZXJyb3IpCisJCWRkLT5pcGF0aF9sYXN0aHdlcnJvciA9IDA7CisJaWYgKChkZC0+aXBhdGhfbWFza2VkZXJycyAmIH5kZC0+aXBhdGhfaWdub3JlZGVycnMpCisJICAgICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZGQtPmlwYXRoX3VubWFza3RpbWUpKSB7CisJCWNoYXIgZWJ1ZlsyNTZdOworCQlpcGF0aF9kZWNvZGVfZXJyKGVidWYsIHNpemVvZiBlYnVmLAorCQkJCSAoZGQtPmlwYXRoX21hc2tlZGVycnMgJiB+ZGQtPgorCQkJCSAgaXBhdGhfaWdub3JlZGVycnMpKTsKKwkJaWYgKChkZC0+aXBhdGhfbWFza2VkZXJycyAmIH5kZC0+aXBhdGhfaWdub3JlZGVycnMpICYKKwkJICAgIH4oSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMIHwgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMKSkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJSZS1lbmFibGluZyBtYXNrZWQgZXJyb3JzICIKKwkJCQkgICAgICAiKCVzKVxuIiwgZWJ1Zik7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIHJjdmVncmZ1bGwgYW5kIHJjdmhkcnFmdWxsIGFyZSAibm9ybWFsIiwgZm9yIHNvbWUKKwkJCSAqIHR5cGVzIG9mIHByb2Nlc3NlcyAobW9zdGx5IGJlbmNobWFya3MpIHRoYXQgc2VuZAorCQkJICogaHVnZSBudW1iZXJzIG9mIG1lc3NhZ2VzLCB3aGlsZSBub3QgcHJvY2Vzc2luZworCQkJICogdGhlbS4gIFNvIG9ubHkgY29tcGxhaW4gYWJvdXQgdGhlc2UgYXQgZGVidWcKKwkJCSAqIGxldmVsLgorCQkJICovCisJCQlpcGF0aF9kYmcoIkRpc2FibGluZyBmcmVxdWVudCBxdWV1ZSBmdWxsIGVycm9ycyAiCisJCQkJICAiKCVzKVxuIiwgZWJ1Zik7CisJCX0KKwkJZGQtPmlwYXRoX21hc2tlZGVycnMgPSBkZC0+aXBhdGhfaWdub3JlZGVycnM7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JtYXNrLAorCQkJCSB+ZGQtPmlwYXRoX21hc2tlZGVycnMpOworCX0KKworCS8qIGxpbWl0IHFmdWxsIG1lc3NhZ2VzIHRvIH5vbmUgcGVyIG1pbnV0ZSBwZXIgcG9ydCAqLworCWlmICgoKytjbnQgJiAweDEwKSkgeworCQlmb3IgKHZhbCA9IGRkLT5pcGF0aF9jZmdwb3J0cyAtIDE7ICgoaW50KXZhbCkgPj0gMDsKKwkJICAgICB2YWwtLSkgeworCQkJaWYgKGRkLT5pcGF0aF9sYXN0ZWdyaGVhZHNbdmFsXSAhPSAtMSkKKwkJCQlkZC0+aXBhdGhfbGFzdGVncmhlYWRzW3ZhbF0gPSAtMTsKKwkJCWlmIChkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlsc1t2YWxdICE9IC0xKQorCQkJCWRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzW3ZhbF0gPSAtMTsKKwkJfQorCX0KKworCWlmIChkZC0+aXBhdGhfbm9zbWFfYnVmcykgeworCQlkZC0+aXBhdGhfbm9zbWFfc2VjcyArPSA1OworCQlpZiAoZGQtPmlwYXRoX25vc21hX3NlY3MgPj0gMzApIHsKKwkJCWlwYXRoX2NkYmcoU01BLCAiTm8gU01BIGJ1ZnMgYXZhaWwgJXUgc2Vjb25kczsgIgorCQkJCSAgICJjYW5jZWxsaW5nIHBlbmRpbmcgc2VuZHNcbiIsCisJCQkJICAgZGQtPmlwYXRoX25vc21hX3NlY3MpOworCQkJLyoKKwkJCSAqIGlzc3VlIGFuIGFib3J0IGFzIHdlbGwsIGluIGNhc2Ugd2UgaGF2ZSBhIHBhY2tldAorCQkJICogc3R1Y2sgaW4gbGF1bmNoIGZpZm8uICBUaGlzIGNvdWxkIGNvcnJ1cHQgYW4KKwkJCSAqIG91dGdvaW5nIHVzZXIgcGFja2V0IGluIHRoZSB3b3JzdCBjYXNlLAorCQkJICogYnV0IHRoaXMgaXMgYSBwcmV0dHkgY2F0YXN0cm9waGljLCBhbnl3YXkuCisJCQkgKi8KKwkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkJCSBJTkZJTklQQVRIX1NfQUJPUlQpOworCQkJaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYsCisJCQkJCSAgICAgZGQtPmlwYXRoX3Bpb2JjbnQyayArCisJCQkJCSAgICAgZGQtPmlwYXRoX3Bpb2JjbnQ0ayAtCisJCQkJCSAgICAgZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1Zik7CisJCQkvKiBzdGFydCBhZ2FpbiwgaWYgbmVjZXNzYXJ5ICovCisJCQlkZC0+aXBhdGhfbm9zbWFfc2VjcyA9IDA7CisJCX0gZWxzZQorCQkJaXBhdGhfY2RiZyhTTUEsICJObyBTTUEgYnVmcyBhdmFpbCAldSB0cmllcywgIgorCQkJCSAgICJhZnRlciAldSBzZWNvbmRzXG4iLAorCQkJCSAgIGRkLT5pcGF0aF9ub3NtYV9idWZzLAorCQkJCSAgIGRkLT5pcGF0aF9ub3NtYV9zZWNzKTsKKwl9CisKK2RvbmU6CisJbW9kX3RpbWVyKCZkZC0+aXBhdGhfc3RhdHNfdGltZXIsIGppZmZpZXMgKyBIWiAqIDUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzIzNzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMKQEAgLTAsMCArMSw3OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorCisvKioKKyAqIGlwYXRoX3BhcnNlX3VzaG9ydCAtIHBhcnNlIGFuIHVuc2lnbmVkIHNob3J0IHZhbHVlIGluIGFuIGFyYml0cmFyeSBiYXNlCisgKiBAc3RyOiB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG51bWJlcgorICogQHZhbHA6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0CisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkLCBvciBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcgorICovCitpbnQgaXBhdGhfcGFyc2VfdXNob3J0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgc2hvcnQgKnZhbHApCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJY2hhciAqZW5kOworCWludCByZXQ7CisKKwlpZiAoIWlzZGlnaXQoc3RyWzBdKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kLCAwKTsKKworCWlmICh2YWwgPiAweGZmZmYpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCSp2YWxwID0gdmFsOworCisJcmV0ID0gZW5kICsgMSAtIHN0cjsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IC1FSU5WQUw7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd192ZXJzaW9uKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwkvKiBUaGUgc3RyaW5nIHByaW50ZWQgaGVyZSBpcyBhbHJlYWR5IG5ld2xpbmUtdGVybWluYXRlZC4gKi8KKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXMiLCBpcGF0aF9jb3JlX3ZlcnNpb24pOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X251bV91bml0cyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2LCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkJIGlwYXRoX2NvdW50X3VuaXRzKE5VTEwsIE5VTEwsIE5VTEwpKTsKK30KKworI2RlZmluZSBEUklWRVJfU1RBVChuYW1lLCBhdHRyKSBcCisJc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0XyMjbmFtZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2LCBcCisJCQkJCWNoYXIgKmJ1ZikgXAorCXsgXAorCQlyZXR1cm4gc2NucHJpbnRmKCBcCisJCQlidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsIFwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGlwYXRoX3N0YXRzLnNwc18gIyNhdHRyKTsgXAorCX0gXAorCXN0YXRpYyBEUklWRVJfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X3N0YXRfIyNuYW1lLCBOVUxMKQorCitEUklWRVJfU1RBVChpbnRycywgaW50cyk7CitEUklWRVJfU1RBVChlcnJfaW50cnMsIGVycmludHMpOworRFJJVkVSX1NUQVQoZXJycywgZXJycyk7CitEUklWRVJfU1RBVChwa3RfZXJycywgcGt0ZXJycyk7CitEUklWRVJfU1RBVChjcmNfZXJycywgY3JjZXJycyk7CitEUklWRVJfU1RBVChod19lcnJzLCBod2VycnMpOworRFJJVkVSX1NUQVQoaWJfbGluaywgaWJsaW5rKTsKK0RSSVZFUl9TVEFUKHBvcnQwX3BrdHMsIHBvcnQwcGt0cyk7CitEUklWRVJfU1RBVChldGhlcl9zcGt0cywgZXRoZXJfc3BrdHMpOworRFJJVkVSX1NUQVQoZXRoZXJfcnBrdHMsIGV0aGVyX3Jwa3RzKTsKK0RSSVZFUl9TVEFUKHNtYV9zcGt0cywgc21hX3Nwa3RzKTsKK0RSSVZFUl9TVEFUKHNtYV9ycGt0cywgc21hX3Jwa3RzKTsKK0RSSVZFUl9TVEFUKGhkcnFfZnVsbCwgaGRycWZ1bGwpOworRFJJVkVSX1NUQVQoZXRpZF9mdWxsLCBldGlkZnVsbCk7CitEUklWRVJfU1RBVChub19waW9idWZzLCBub3Bpb2J1ZnMpOworRFJJVkVSX1NUQVQocG9ydHMsIHBvcnRzKTsKK0RSSVZFUl9TVEFUKHBrZXkwLCBwa2V5c1swXSk7CitEUklWRVJfU1RBVChwa2V5MSwgcGtleXNbMV0pOworRFJJVkVSX1NUQVQocGtleTIsIHBrZXlzWzJdKTsKK0RSSVZFUl9TVEFUKHBrZXkzLCBwa2V5c1szXSk7CisvKiBYWFggZml4IHRoZSBmb2xsb3dpbmcgd2hlbiBkeW5hbWljIHRhYmxlIG9mIGRldmljZXMgdXNlZCAqLworRFJJVkVSX1NUQVQobGlkMCwgbGlkWzBdKTsKK0RSSVZFUl9TVEFUKGxpZDEsIGxpZFsxXSk7CitEUklWRVJfU1RBVChsaWQyLCBsaWRbMl0pOworRFJJVkVSX1NUQVQobGlkMywgbGlkWzNdKTsKKworRFJJVkVSX1NUQVQobnBvcnRzLCBucG9ydHMpOworRFJJVkVSX1NUQVQobnVsbF9pbnRyLCBudWxsaW50cik7CitEUklWRVJfU1RBVChtYXhfcGt0c19jYWxsLCBtYXhwa3RzX2NhbGwpOworRFJJVkVSX1NUQVQoYXZnX3BrdHNfY2FsbCwgYXZncGt0c19jYWxsKTsKK0RSSVZFUl9TVEFUKHBhZ2VfbG9ja3MsIHBhZ2Vsb2Nrcyk7CitEUklWRVJfU1RBVChwYWdlX3VubG9ja3MsIHBhZ2V1bmxvY2tzKTsKK0RSSVZFUl9TVEFUKGtyZHJvcHMsIGtyZHJvcHMpOworLyogWFhYIGZpeCB0aGUgZm9sbG93aW5nIHdoZW4gZHluYW1pYyB0YWJsZSBvZiBkZXZpY2VzIHVzZWQgKi8KK0RSSVZFUl9TVEFUKG1saWQwLCBtbGlkWzBdKTsKK0RSSVZFUl9TVEFUKG1saWQxLCBtbGlkWzFdKTsKK0RSSVZFUl9TVEFUKG1saWQyLCBtbGlkWzJdKTsKK0RSSVZFUl9TVEFUKG1saWQzLCBtbGlkWzNdKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRyaXZlcl9zdGF0X2F0dHJpYnV0ZXNbXSA9IHsKKwkmZHJpdmVyX2F0dHJfaW50cnMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfZXJyX2ludHJzLmF0dHIsCisJJmRyaXZlcl9hdHRyX2VycnMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcGt0X2VycnMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfY3JjX2VycnMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfaHdfZXJycy5hdHRyLAorCSZkcml2ZXJfYXR0cl9pYl9saW5rLmF0dHIsCisJJmRyaXZlcl9hdHRyX3BvcnQwX3BrdHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfZXRoZXJfc3BrdHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfZXRoZXJfcnBrdHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfc21hX3Nwa3RzLmF0dHIsCisJJmRyaXZlcl9hdHRyX3NtYV9ycGt0cy5hdHRyLAorCSZkcml2ZXJfYXR0cl9oZHJxX2Z1bGwuYXR0ciwKKwkmZHJpdmVyX2F0dHJfZXRpZF9mdWxsLmF0dHIsCisJJmRyaXZlcl9hdHRyX25vX3Bpb2J1ZnMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcG9ydHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcGtleTAuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcGtleTEuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcGtleTIuYXR0ciwKKwkmZHJpdmVyX2F0dHJfcGtleTMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbGlkMC5hdHRyLAorCSZkcml2ZXJfYXR0cl9saWQxLmF0dHIsCisJJmRyaXZlcl9hdHRyX2xpZDIuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbGlkMy5hdHRyLAorCSZkcml2ZXJfYXR0cl9ucG9ydHMuYXR0ciwKKwkmZHJpdmVyX2F0dHJfbnVsbF9pbnRyLmF0dHIsCisJJmRyaXZlcl9hdHRyX21heF9wa3RzX2NhbGwuYXR0ciwKKwkmZHJpdmVyX2F0dHJfYXZnX3BrdHNfY2FsbC5hdHRyLAorCSZkcml2ZXJfYXR0cl9wYWdlX2xvY2tzLmF0dHIsCisJJmRyaXZlcl9hdHRyX3BhZ2VfdW5sb2Nrcy5hdHRyLAorCSZkcml2ZXJfYXR0cl9rcmRyb3BzLmF0dHIsCisJJmRyaXZlcl9hdHRyX21saWQwLmF0dHIsCisJJmRyaXZlcl9hdHRyX21saWQxLmF0dHIsCisJJmRyaXZlcl9hdHRyX21saWQyLmF0dHIsCisJJmRyaXZlcl9hdHRyX21saWQzLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZHJpdmVyX3N0YXRfYXR0cl9ncm91cCA9IHsKKwkubmFtZSA9ICJzdGF0cyIsCisJLmF0dHJzID0gZHJpdmVyX3N0YXRfYXR0cmlidXRlcworfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCByZXQ7CisKKwlpZiAoIWRkLT5pcGF0aF9zdGF0dXNwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCVsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSAqKGRkLT5pcGF0aF9zdGF0dXNwKSk7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmlwYXRoX3N0YXR1c19zdHJbXSA9IHsKKwkiSW5pdHRlZCIsCisJIkRpc2FibGVkIiwKKwkiQWRtaW5fRGlzYWJsZWQiLAorCSJPSUJfU01BIiwKKwkiU01BIiwKKwkiUHJlc2VudCIsCisJIklCX2xpbmtfdXAiLAorCSJJQl9jb25maWd1cmVkIiwKKwkiTm9JQmNhYmxlIiwKKwkiRmF0YWxfSGFyZHdhcmVfRXJyb3IiLAorCU5VTEwsCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1c19zdHIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaSwgYW55OworCXU2NCBzOworCXNzaXplX3QgcmV0OworCisJaWYgKCFkZC0+aXBhdGhfc3RhdHVzcCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJcyA9ICooZGQtPmlwYXRoX3N0YXR1c3ApOworCSpidWYgPSAnXDAnOworCWZvciAoYW55ID0gaSA9IDA7IHMgJiYgaXBhdGhfc3RhdHVzX3N0cltpXTsgaSsrKSB7CisJCWlmIChzICYgMSkgeworCQkJaWYgKGFueSAmJiBzdHJsY2F0KGJ1ZiwgIiAiLCBQQUdFX1NJWkUpID49CisJCQkgICAgUEFHRV9TSVpFKQorCQkJCS8qIG92ZXJmbG93ICovCisJCQkJYnJlYWs7CisJCQlpZiAoc3RybGNhdChidWYsIGlwYXRoX3N0YXR1c19zdHJbaV0sCisJCQkJICAgIFBBR0VfU0laRSkgPj0gUEFHRV9TSVpFKQorCQkJCWJyZWFrOworCQkJYW55ID0gMTsKKwkJfQorCQlzID4+PSAxOworCX0KKwlpZiAoYW55KQorCQlzdHJsY2F0KGJ1ZiwgIlxuIiwgUEFHRV9TSVpFKTsKKworCXJldCA9IHN0cmxlbihidWYpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYm9hcmR2ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJLyogVGhlIHN0cmluZyBwcmludGVkIGhlcmUgaXMgYWxyZWFkeSBuZXdsaW5lLXRlcm1pbmF0ZWQuICovCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzIiwgZGQtPmlwYXRoX2JvYXJkdmVyc2lvbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbGlkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JXhcbiIsIGRkLT5pcGF0aF9saWQpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9saWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgbGlkOworCWludCByZXQ7CisKKwlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoYnVmLCAmbGlkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBpbnZhbGlkOworCisJaWYgKGxpZCA9PSAwIHx8IGxpZCA+PSAweGMwMDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBpbnZhbGlkOworCX0KKworCWlwYXRoX3NldF9zcHNfbGlkKGRkLCBsaWQsIDApOworCisJZ290byBiYWlsOworaW52YWxpZDoKKwlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBMSURcbiIpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X21saWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCV4XG4iLCBkZC0+aXBhdGhfbWxpZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX21saWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgdW5pdDsKKwl1MTYgbWxpZDsKKwlpbnQgcmV0OworCisJcmV0ID0gaXBhdGhfcGFyc2VfdXNob3J0KGJ1ZiwgJm1saWQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGludmFsaWQ7CisKKwl1bml0ID0gZGQtPmlwYXRoX3VuaXQ7CisKKwlkZC0+aXBhdGhfbWxpZCA9IG1saWQ7CisJaXBhdGhfc3RhdHMuc3BzX21saWRbdW5pdF0gPSBtbGlkOworCWlwYXRoX2xheWVyX2ludHIoZGQsIElQQVRIX0xBWUVSX0lOVF9CQ0FTVCk7CisKKwlnb3RvIGJhaWw7CitpbnZhbGlkOgorCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHNldCBpbnZhbGlkIE1MSURcbiIpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2d1aWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1OCAqZ3VpZDsKKworCWd1aWQgPSAodTggKikgJiAoZGQtPmlwYXRoX2d1aWQpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJCSAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJIGd1aWRbMF0sIGd1aWRbMV0sIGd1aWRbMl0sIGd1aWRbM10sCisJCQkgZ3VpZFs0XSwgZ3VpZFs1XSwgZ3VpZFs2XSwgZ3VpZFs3XSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2d1aWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBzaG9ydCBndWlkWzhdOworCV9fYmU2NCBuZ3VpZDsKKwl1OCAqbmc7CisJaW50IGk7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVoeDolaHg6JWh4OiVoeDolaHg6JWh4OiVoeDolaHgiLAorCQkgICAmZ3VpZFswXSwgJmd1aWRbMV0sICZndWlkWzJdLCAmZ3VpZFszXSwKKwkJICAgJmd1aWRbNF0sICZndWlkWzVdLCAmZ3VpZFs2XSwgJmd1aWRbN10pICE9IDgpCisJCWdvdG8gaW52YWxpZDsKKworCW5nID0gKHU4ICopICZuZ3VpZDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKGd1aWRbaV0gPiAweGZmKQorCQkJZ290byBpbnZhbGlkOworCQluZ1tpXSA9IGd1aWRbaV07CisJfQorCisJZGQtPmlwYXRoX2d1aWQgPSBuZ3VpZDsKKwlkZC0+aXBhdGhfbmd1aWQgPSAxOworCisJcmV0ID0gc3RybGVuKGJ1Zik7CisJZ290byBiYWlsOworCitpbnZhbGlkOgorCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHNldCBpbnZhbGlkIEdVSURcbiIpOworCXJldCA9IC1FSU5WQUw7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19uZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIGRkLT5pcGF0aF9uZ3VpZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2VyaWFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJYnVmW3NpemVvZiBkZC0+aXBhdGhfc2VyaWFsXSA9ICdcMCc7CisJbWVtY3B5KGJ1ZiwgZGQtPmlwYXRoX3NlcmlhbCwgc2l6ZW9mIGRkLT5pcGF0aF9zZXJpYWwpOworCXN0cmNhdChidWYsICJcbiIpOworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd191bml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKK30KKworI2RlZmluZSBERVZJQ0VfQ09VTlRFUihuYW1lLCBhdHRyKSBcCisJc3RhdGljIHNzaXplX3Qgc2hvd19jb3VudGVyXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJCQkJICAgY2hhciAqYnVmKSBcCisJeyBcCisJCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOyBcCisJCXJldHVybiBzY25wcmludGYoXAorCQkJYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBcCisJCQlpcGF0aF9zbmFwX2NudHIoIFwKKwkJCQlkZCwgb2Zmc2V0b2Yoc3RydWN0IGluZmluaXBhdGhfY291bnRlcnMsIFwKKwkJCQkJICAgICBhdHRyKSAvIHNpemVvZih1NjQpKSk7CVwKKwl9IFwKKwlzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19jb3VudGVyXyMjbmFtZSwgTlVMTCk7CisKK0RFVklDRV9DT1VOVEVSKGliX2xpbmtfZG93bmVkcywgSUJMaW5rRG93bmVkQ250KTsKK0RFVklDRV9DT1VOVEVSKGliX2xpbmtfZXJyX3JlY292ZXJpZXMsIElCTGlua0VyclJlY292ZXJ5Q250KTsKK0RFVklDRV9DT1VOVEVSKGliX3N0YXR1c19jaGFuZ2VzLCBJQlN0YXR1c0NoYW5nZUNudCk7CitERVZJQ0VfQ09VTlRFUihpYl9zeW1ib2xfZXJycywgSUJTeW1ib2xFcnJDbnQpOworREVWSUNFX0NPVU5URVIobGJfZmxvd19zdGFsbHMsIExCRmxvd1N0YWxsQ250KTsKK0RFVklDRV9DT1VOVEVSKGxiX2ludHMsIExCSW50Q250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X2JhZF9mb3JtYXRzLCBSeEJhZEZvcm1hdENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9idWZfb3ZmbHMsIFJ4QnVmT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9kYXRhX3BrdHMsIFJ4RGF0YVBrdENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9kcm9wcGVkX3BrdHMsIFJ4RHJvcHBlZFBrdENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9kd29yZHMsIFJ4RHdvcmRDbnQpOworREVWSUNFX0NPVU5URVIocnhfZWJwcywgUnhFQlBDbnQpOworREVWSUNFX0NPVU5URVIocnhfZmxvd19jdHJsX2VycnMsIFJ4Rmxvd0N0cmxFcnJDbnQpOworREVWSUNFX0NPVU5URVIocnhfZmxvd19wa3RzLCBSeEZsb3dQa3RDbnQpOworREVWSUNFX0NPVU5URVIocnhfaWNyY19lcnJzLCBSeElDUkNFcnJDbnQpOworREVWSUNFX0NPVU5URVIocnhfbGVuX2VycnMsIFJ4TGVuRXJyQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X2xpbmtfcHJvYmxlbXMsIFJ4TGlua1Byb2JsZW1DbnQpOworREVWSUNFX0NPVU5URVIocnhfbHBjcmNfZXJycywgUnhMUENSQ0VyckNudCk7CitERVZJQ0VfQ09VTlRFUihyeF9tYXhfbWluX2xlbl9lcnJzLCBSeE1heE1pbkxlbkVyckNudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wMF9oZHJfZWdyX292ZmxzLCBSeFAwSGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wMV9oZHJfZWdyX292ZmxzLCBSeFAxSGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wMl9oZHJfZWdyX292ZmxzLCBSeFAySGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wM19oZHJfZWdyX292ZmxzLCBSeFAzSGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wNF9oZHJfZWdyX292ZmxzLCBSeFA0SGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wNV9oZHJfZWdyX292ZmxzLCBSeFA1SGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wNl9oZHJfZWdyX292ZmxzLCBSeFA2SGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wN19oZHJfZWdyX292ZmxzLCBSeFA3SGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wOF9oZHJfZWdyX292ZmxzLCBSeFA4SGRyRWdyT3ZmbENudCk7CitERVZJQ0VfQ09VTlRFUihyeF9wa2V5X21pc21hdGNoZXMsIFJ4UEtleU1pc21hdGNoQ250KTsKK0RFVklDRV9DT1VOVEVSKHJ4X3RpZF9mdWxsX2VycnMsIFJ4VElERnVsbEVyckNudCk7CitERVZJQ0VfQ09VTlRFUihyeF90aWRfdmFsaWRfZXJycywgUnhUSURWYWxpZEVyckNudCk7CitERVZJQ0VfQ09VTlRFUihyeF92Y3JjX2VycnMsIFJ4VkNSQ0VyckNudCk7CitERVZJQ0VfQ09VTlRFUih0eF9kYXRhX3BrdHMsIFR4RGF0YVBrdENudCk7CitERVZJQ0VfQ09VTlRFUih0eF9kcm9wcGVkX3BrdHMsIFR4RHJvcHBlZFBrdENudCk7CitERVZJQ0VfQ09VTlRFUih0eF9kd29yZHMsIFR4RHdvcmRDbnQpOworREVWSUNFX0NPVU5URVIodHhfZmxvd19wa3RzLCBUeEZsb3dQa3RDbnQpOworREVWSUNFX0NPVU5URVIodHhfZmxvd19zdGFsbHMsIFR4Rmxvd1N0YWxsQ250KTsKK0RFVklDRV9DT1VOVEVSKHR4X2xlbl9lcnJzLCBUeExlbkVyckNudCk7CitERVZJQ0VfQ09VTlRFUih0eF9tYXhfbWluX2xlbl9lcnJzLCBUeE1heE1pbkxlbkVyckNudCk7CitERVZJQ0VfQ09VTlRFUih0eF91bmRlcnJ1bnMsIFR4VW5kZXJydW5DbnQpOworREVWSUNFX0NPVU5URVIodHhfdW5zdXBfdmxfZXJycywgVHhVbnN1cFZMRXJyQ250KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRldl9jb3VudGVyX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfaWJfbGlua19kb3duZWRzLmF0dHIsCisJJmRldl9hdHRyX2liX2xpbmtfZXJyX3JlY292ZXJpZXMuYXR0ciwKKwkmZGV2X2F0dHJfaWJfc3RhdHVzX2NoYW5nZXMuYXR0ciwKKwkmZGV2X2F0dHJfaWJfc3ltYm9sX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfbGJfZmxvd19zdGFsbHMuYXR0ciwKKwkmZGV2X2F0dHJfbGJfaW50cy5hdHRyLAorCSZkZXZfYXR0cl9yeF9iYWRfZm9ybWF0cy5hdHRyLAorCSZkZXZfYXR0cl9yeF9idWZfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfZGF0YV9wa3RzLmF0dHIsCisJJmRldl9hdHRyX3J4X2Ryb3BwZWRfcGt0cy5hdHRyLAorCSZkZXZfYXR0cl9yeF9kd29yZHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfZWJwcy5hdHRyLAorCSZkZXZfYXR0cl9yeF9mbG93X2N0cmxfZXJycy5hdHRyLAorCSZkZXZfYXR0cl9yeF9mbG93X3BrdHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfaWNyY19lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X2xlbl9lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X2xpbmtfcHJvYmxlbXMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfbHBjcmNfZXJycy5hdHRyLAorCSZkZXZfYXR0cl9yeF9tYXhfbWluX2xlbl9lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X3AwX2hkcl9lZ3Jfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcDFfaGRyX2Vncl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9wMl9oZHJfZWdyX292ZmxzLmF0dHIsCisJJmRldl9hdHRyX3J4X3AzX2hkcl9lZ3Jfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcDRfaGRyX2Vncl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9wNV9oZHJfZWdyX292ZmxzLmF0dHIsCisJJmRldl9hdHRyX3J4X3A2X2hkcl9lZ3Jfb3ZmbHMuYXR0ciwKKwkmZGV2X2F0dHJfcnhfcDdfaGRyX2Vncl9vdmZscy5hdHRyLAorCSZkZXZfYXR0cl9yeF9wOF9oZHJfZWdyX292ZmxzLmF0dHIsCisJJmRldl9hdHRyX3J4X3BrZXlfbWlzbWF0Y2hlcy5hdHRyLAorCSZkZXZfYXR0cl9yeF90aWRfZnVsbF9lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X3RpZF92YWxpZF9lcnJzLmF0dHIsCisJJmRldl9hdHRyX3J4X3ZjcmNfZXJycy5hdHRyLAorCSZkZXZfYXR0cl90eF9kYXRhX3BrdHMuYXR0ciwKKwkmZGV2X2F0dHJfdHhfZHJvcHBlZF9wa3RzLmF0dHIsCisJJmRldl9hdHRyX3R4X2R3b3Jkcy5hdHRyLAorCSZkZXZfYXR0cl90eF9mbG93X3BrdHMuYXR0ciwKKwkmZGV2X2F0dHJfdHhfZmxvd19zdGFsbHMuYXR0ciwKKwkmZGV2X2F0dHJfdHhfbGVuX2VycnMuYXR0ciwKKwkmZGV2X2F0dHJfdHhfbWF4X21pbl9sZW5fZXJycy5hdHRyLAorCSZkZXZfYXR0cl90eF91bmRlcnJ1bnMuYXR0ciwKKwkmZGV2X2F0dHJfdHhfdW5zdXBfdmxfZXJycy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRldl9jb3VudGVyX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSAiY291bnRlcnMiLAorCS5hdHRycyA9IGRldl9jb3VudGVyX2F0dHJpYnV0ZXMKK307CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY29uc3QgY2hhciAqYnVmLAorCQkJICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCWlmIChjb3VudCA8IDUgfHwgbWVtY21wKGJ1ZiwgInJlc2V0IiwgNSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9ESVNBQkxFRCkgeworCQkvKgorCQkgKiBwb3N0LXJlc2V0IGluaXQgd291bGQgcmUtZW5hYmxlIGludGVycnVwdHMsIGV0Yy4KKwkJICogc28gZG9uJ3QgYWxsb3cgcmVzZXQgb24gZGlzYWJsZWQgZGV2aWNlcy4gIE5vdAorCQkgKiBwZXJmZWN0IGVycm9yLCBidXQgYWJvdXQgdGhlIGJlc3QgY2hvaWNlLgorCQkgKi8KKwkJZGV2X2luZm8oZGV2LCJVbml0ICVkIGlzIGRpc2FibGVkLCBjYW4ndCByZXNldFxuIiwKKwkJCSBkZC0+aXBhdGhfdW5pdCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldCA9IGlwYXRoX3Jlc2V0X2RldmljZShkZC0+aXBhdGhfdW5pdCk7CitiYWlsOgorCXJldHVybiByZXQ8MCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9saW5rX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY29uc3QgY2hhciAqYnVmLAorCQkJICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCwgcjsKKwl1MTYgc3RhdGU7CisKKwlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoYnVmLCAmc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGludmFsaWQ7CisKKwlyID0gaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShkZCwgc3RhdGUpOworCWlmIChyIDwgMCkgeworCQlyZXQgPSByOworCQlnb3RvIGJhaWw7CisJfQorCisJZ290byBiYWlsOworaW52YWxpZDoKKwlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBsaW5rIHN0YXRlXG4iKTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19tdHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIGRkLT5pcGF0aF9pYm10dSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX210dShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgcmV0OworCXUxNiBtdHUgPSAwOworCWludCByOworCisJcmV0ID0gaXBhdGhfcGFyc2VfdXNob3J0KGJ1ZiwgJm10dSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gaW52YWxpZDsKKworCXIgPSBpcGF0aF9sYXllcl9zZXRfbXR1KGRkLCBtdHUpOworCWlmIChyIDwgMCkKKwkJcmV0ID0gcjsKKworCWdvdG8gYmFpbDsKK2ludmFsaWQ6CisJaXBhdGhfZGV2X2VycihkZCwgImF0dGVtcHQgdG8gc2V0IGludmFsaWQgTVRVXG4iKTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9ESVNBQkxFRCkgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IHJldDsKKwl1MTYgZW5hYmxlID0gMDsKKworCXJldCA9IGlwYXRoX3BhcnNlX3VzaG9ydChidWYsICZlbmFibGUpOworCWlmIChyZXQgPCAwKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHVzZSBub24tbnVtZXJpYyBvbiBlbmFibGVcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9ESVNBQkxFRCkpCisJCQlnb3RvIGJhaWw7CisKKwkJZGV2X2luZm8oZGV2LCAiRW5hYmxpbmcgdW5pdCAlZFxuIiwgZGQtPmlwYXRoX3VuaXQpOworCQkvKiBzYW1lIGFzIHBvc3QtcmVzZXQgKi8KKwkJcmV0ID0gaXBhdGhfaW5pdF9jaGlwKGRkLCAxKTsKKwkJaWYgKHJldCkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdG8gZW5hYmxlIHVuaXQgJWRcbiIsCisJCQkJICAgICAgZGQtPmlwYXRoX3VuaXQpOworCQllbHNlIHsKKwkJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfRElTQUJMRUQ7CisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19BRE1JTl9ESVNBQkxFRDsKKwkJfQorCX0KKwllbHNlIGlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0RJU0FCTEVEKSkgeworCQlkZXZfaW5mbyhkZXYsICJEaXNhYmxpbmcgdW5pdCAlZFxuIiwgZGQtPmlwYXRoX3VuaXQpOworCQlpcGF0aF9zaHV0ZG93bl9kZXZpY2UoZGQpOworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfRElTQUJMRUQ7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfQURNSU5fRElTQUJMRUQ7CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUihudW1fdW5pdHMsIFNfSVJVR08sIHNob3dfbnVtX3VuaXRzLCBOVUxMKTsKK3N0YXRpYyBEUklWRVJfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBzaG93X3ZlcnNpb24sIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHJpdmVyX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZHJpdmVyX2F0dHJfbnVtX3VuaXRzLmF0dHIsCisJJmRyaXZlcl9hdHRyX3ZlcnNpb24uYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkcml2ZXJfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBkcml2ZXJfYXR0cmlidXRlcworfTsKKworc3RhdGljIERFVklDRV9BVFRSKGd1aWQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2d1aWQsIHN0b3JlX2d1aWQpOworc3RhdGljIERFVklDRV9BVFRSKGxpZCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbGlkLCBzdG9yZV9saWQpOworc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2xpbmtfc3RhdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1saWQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X21saWQsIHN0b3JlX21saWQpOworc3RhdGljIERFVklDRV9BVFRSKG10dSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbXR1LCBzdG9yZV9tdHUpOworc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2VuYWJsZWQsIHN0b3JlX2VuYWJsZWQpOworc3RhdGljIERFVklDRV9BVFRSKG5ndWlkLCBTX0lSVUdPLCBzaG93X25ndWlkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNldCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfcmVzZXQpOworc3RhdGljIERFVklDRV9BVFRSKHNlcmlhbCwgU19JUlVHTywgc2hvd19zZXJpYWwsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN0YXR1cywgU19JUlVHTywgc2hvd19zdGF0dXMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN0YXR1c19zdHIsIFNfSVJVR08sIHNob3dfc3RhdHVzX3N0ciwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmR2ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2JvYXJkdmVyc2lvbiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodW5pdCwgU19JUlVHTywgc2hvd191bml0LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRldl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2d1aWQuYXR0ciwKKwkmZGV2X2F0dHJfbGlkLmF0dHIsCisJJmRldl9hdHRyX2xpbmtfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfbWxpZC5hdHRyLAorCSZkZXZfYXR0cl9tdHUuYXR0ciwKKwkmZGV2X2F0dHJfbmd1aWQuYXR0ciwKKwkmZGV2X2F0dHJfc2VyaWFsLmF0dHIsCisJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl9zdGF0dXNfc3RyLmF0dHIsCisJJmRldl9hdHRyX2JvYXJkdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl91bml0LmF0dHIsCisJJmRldl9hdHRyX2VuYWJsZWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBkZXZfYXR0cmlidXRlcworfTsKKworLyoqCisgKiBpcGF0aF9leHBvc2VfcmVzZXQgLSBjcmVhdGUgYSBkZXZpY2UgcmVzZXQgZmlsZQorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBPbmx5IGV4cG9zZSBhIGZpbGUgdGhhdCBsZXRzIHVzIHJlc2V0IHRoZSBkZXZpY2UgYWZ0ZXIgc29tZW9uZQorICogZW50ZXJzIGRpYWcgbW9kZS4gIEEgZGV2aWNlIHJlc2V0IGlzIHF1aXRlIGxpa2VseSB0byBjcmFzaCB0aGUKKyAqIG1hY2hpbmUgZW50aXJlbHksIHNvIHdlIGRvbid0IHdhbnQgdG8gbm9ybWFsbHkgbWFrZSBpdAorICogYXZhaWxhYmxlLgorICoKKyAqIENhbGxlZCB3aXRoIGlwYXRoX211dGV4IGhlbGQuCisgKi8KK2ludCBpcGF0aF9leHBvc2VfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0YXRpYyBpbnQgZXhwb3NlZDsKKwlpbnQgcmV0OworCisJaWYgKCFleHBvc2VkKSB7CisJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXNldCk7CisJCWV4cG9zZWQgPSAxOworCX0KKwllbHNlCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfZHJpdmVyX2NyZWF0ZV9ncm91cChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRydi0+a29iaiwgJmRyaXZlcl9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIGJhaWw7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRydi0+a29iaiwgJmRyaXZlcl9zdGF0X2F0dHJfZ3JvdXApOworCWlmIChyZXQpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZHJ2LT5rb2JqLCAmZHJpdmVyX2F0dHJfZ3JvdXApOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXBhdGhfZHJpdmVyX3JlbW92ZV9ncm91cChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZHJ2LT5rb2JqLCAmZHJpdmVyX3N0YXRfYXR0cl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkcnYtPmtvYmosICZkcml2ZXJfYXR0cl9ncm91cCk7Cit9CisKK2ludCBpcGF0aF9kZXZpY2VfY3JlYXRlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQ7CisJY2hhciB1bml0WzVdOworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZkZXZfYXR0cl9ncm91cCk7CisJaWYgKHJldCkKKwkJZ290byBiYWlsOworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZkZXZfY291bnRlcl9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIGJhaWxfYXR0cnM7CisKKwlzbnByaW50Zih1bml0LCBzaXplb2YodW5pdCksICIlMDJkIiwgZGQtPmlwYXRoX3VuaXQpOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXYtPmRyaXZlci0+a29iaiwgJmRldi0+a29iaiwgdW5pdCk7CisJaWYgKHJldCA9PSAwKQorCQlnb3RvIGJhaWw7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9jb3VudGVyX2F0dHJfZ3JvdXApOworYmFpbF9hdHRyczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9hdHRyX2dyb3VwKTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcGF0aF9kZXZpY2VfcmVtb3ZlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWNoYXIgdW5pdFs1XTsKKworCXNucHJpbnRmKHVuaXQsIHNpemVvZih1bml0KSwgIiUwMmQiLCBkZC0+aXBhdGhfdW5pdCk7CisJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+ZHJpdmVyLT5rb2JqLCB1bml0KTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2NvdW50ZXJfYXR0cl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkZXZfYXR0cl9ncm91cCk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVzZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDZkYmMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKQEAgLTAsMCArMSw2NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKyNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisKKy8qIGN1dCBkb3duIHJpZGljdWxvdXNseSBsb25nIElCIG1hY3JvIG5hbWVzICovCisjZGVmaW5lIE9QKHgpIElCX09QQ09ERV9VQ18jI3gKKworc3RhdGljIHZvaWQgY29tcGxldGVfbGFzdF9zZW5kKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpcGF0aF9zd3FlICp3cWUsCisJCQkgICAgICAgc3RydWN0IGliX3djICp3YykKK3sKKwlpZiAoKytxcC0+c19sYXN0ID09IHFwLT5zX3NpemUpCisJCXFwLT5zX2xhc3QgPSAwOworCWlmICghdGVzdF9iaXQoSVBBVEhfU19TSUdOQUxfUkVRX1dSLCAmcXAtPnNfZmxhZ3MpIHx8CisJICAgICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NJR05BTEVEKSkgeworCQl3Yy0+d3JfaWQgPSB3cWUtPndyLndyX2lkOworCQl3Yy0+c3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKwkJd2MtPm9wY29kZSA9IGliX2lwYXRoX3djX29wY29kZVt3cWUtPndyLm9wY29kZV07CisJCXdjLT52ZW5kb3JfZXJyID0gMDsKKwkJd2MtPmJ5dGVfbGVuID0gd3FlLT5sZW5ndGg7CisJCXdjLT5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07CisJCXdjLT5zcmNfcXAgPSBxcC0+cmVtb3RlX3FwbjsKKwkJd2MtPnBrZXlfaW5kZXggPSAwOworCQl3Yy0+c2xpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCQl3Yy0+c2wgPSBxcC0+cmVtb3RlX2FoX2F0dHIuc2w7CisJCXdjLT5kbGlkX3BhdGhfYml0cyA9IDA7CisJCXdjLT5wb3J0X251bSA9IDA7CisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5zZW5kX2NxKSwgd2MsIDApOworCX0KKwl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworfQorCisvKioKKyAqIGlwYXRoX2RvX3VjX3NlbmQgLSBkbyBhIHNlbmQgb24gYSBVQyBxdWV1ZQorICogQGRhdGE6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgUVAgdG8gc2VuZCBvbgorICoKKyAqIFByb2Nlc3MgZW50cmllcyBpbiB0aGUgc2VuZCB3b3JrIHF1ZXVlIHVudGlsIHRoZSBxdWV1ZSBpcyBleGhhdXN0ZWQuCisgKiBPbmx5IGFsbG93IG9uZSBDUFUgdG8gc2VuZCBhIHBhY2tldCBwZXIgUVAgKHRhc2tsZXQpLgorICogT3RoZXJ3aXNlLCBhZnRlciB3ZSBkcm9wIHRoZSBRUCBsb2NrLCB0d28gdGhyZWFkcyBjb3VsZCBzZW5kCisgKiBwYWNrZXRzIG91dCBvZiBvcmRlci4KKyAqIFRoaXMgaXMgc2ltaWxhciB0byBpcGF0aF9kb19yY19zZW5kKCkgYmVsb3cgZXhjZXB0IHdlIGRvbid0IGhhdmUKKyAqIHRpbWVvdXRzIG9yIHJlc2VuZHMuCisgKi8KK3ZvaWQgaXBhdGhfZG9fdWNfc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IChzdHJ1Y3QgaXBhdGhfcXAgKilkYXRhOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgbHJoMDsKKwl1MzIgaHdvcmRzOworCXUzMiBud29yZHM7CisJdTMyIGV4dHJhX2J5dGVzOworCXUzMiBidGgwOworCXUzMiBidGgyOworCXUzMiBwbXR1ID0gaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CisJdTMyIGxlbjsKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncykpCisJCWdvdG8gYmFpbDsKKworCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCA9PQorCQkgICAgIGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7CisJCS8qIFBhc3MgaW4gYW4gdW5pbml0aWFsaXplZCBpYl93YyB0byBzYXZlIHN0YWNrIHNwYWNlLiAqLworCQlpcGF0aF9ydWNfbG9vcGJhY2socXAsICZ3Yyk7CisJCWNsZWFyX2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvaGRyID0gJnFwLT5zX2hkci51Lm90aDsKKwlpZiAocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKQorCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOworCithZ2FpbjoKKwkvKiBDaGVjayBmb3IgYSBjb25zdHJ1Y3RlZCBwYWNrZXQgdG8gYmUgc2VudC4gKi8KKwlpZiAocXAtPnNfaGRyd29yZHMgIT0gMCkgeworCQkJLyoKKwkJCSAqIElmIG5vIFBJTyBidWZzIGFyZSBhdmFpbGFibGUsIHJldHVybi4KKwkJCSAqIEFuIGludGVycnVwdCB3aWxsIGNhbGwgaXBhdGhfaWJfcGlvYnVmYXZhaWwoKQorCQkJICogd2hlbiBvbmUgaXMgYXZhaWxhYmxlLgorCQkJICovCisJCQlpZiAoaXBhdGhfdmVyYnNfc2VuZChkZXYtPmRkLCBxcC0+c19oZHJ3b3JkcywKKwkJCQkJICAgICAodTMyICopICZxcC0+c19oZHIsCisJCQkJCSAgICAgcXAtPnNfY3VyX3NpemUsCisJCQkJCSAgICAgcXAtPnNfY3VyX3NnZSkpIHsKKwkJCQlpcGF0aF9ub19idWZzX2F2YWlsYWJsZShxcCwgZGV2KTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7CisJCS8qIFJlY29yZCB0aGF0IHdlIHNlbnQgdGhlIHBhY2tldCBhbmQgc19oZHIgaXMgZW1wdHkuICovCisJCXFwLT5zX2hkcndvcmRzID0gMDsKKwl9CisKKwlscmgwID0gSVBTX0xSSF9CVEg7CisJLyogaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzIExSSCtCVEggPSAoOCsxMikvNC4gKi8KKwlod29yZHMgPSA1OworCisJLyoKKwkgKiBUaGUgbG9jayBpcyBuZWVkZWQgdG8gc3luY2hyb25pemUgYmV0d2VlbgorCSAqIHNldHRpbmcgcXAtPnNfYWNrX3N0YXRlIGFuZCBwb3N0X3NlbmQoKS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCisJaWYgKCEoaWJfaXBhdGhfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBJUEFUSF9QUk9DRVNTX1NFTkRfT0spKQorCQlnb3RvIGRvbmU7CisKKwlidGgwID0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7CisKKwkvKiBTZW5kIGEgcmVxdWVzdC4gKi8KKwl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOworCXN3aXRjaCAocXAtPnNfc3RhdGUpIHsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBTaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGxhc3Qgc2VuZCAoaWYgdGhlcmUgaXMKKwkJICogb25lKS4KKwkJICovCisJCWlmIChxcC0+c19sYXN0ICE9IHFwLT5zX3RhaWwpCisJCQljb21wbGV0ZV9sYXN0X3NlbmQocXAsIHdxZSwgJndjKTsKKworCQkvKiBDaGVjayBpZiBzZW5kIHdvcmsgcXVldWUgaXMgZW1wdHkuICovCisJCWlmIChxcC0+c190YWlsID09IHFwLT5zX2hlYWQpCisJCQlnb3RvIGRvbmU7CisJCS8qCisJCSAqIFN0YXJ0IGEgbmV3IHJlcXVlc3QuCisJCSAqLworCQlxcC0+c19wc24gPSB3cWUtPnBzbiA9IHFwLT5zX25leHRfcHNuOworCQlxcC0+c19zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCQlxcC0+c19zZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7CisJCXFwLT5zX3NnZS5udW1fc2dlID0gd3FlLT53ci5udW1fc2dlOworCQlxcC0+c19sZW4gPSBsZW4gPSB3cWUtPmxlbmd0aDsKKwkJc3dpdGNoICh3cWUtPndyLm9wY29kZSkgeworCQljYXNlIElCX1dSX1NFTkQ6CisJCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lNTToKKwkJCWlmIChsZW4gPiBwbXR1KSB7CisJCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0ZJUlNUKTsKKwkJCQlsZW4gPSBwbXR1OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1NFTkQpCisJCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX09OTFkpOworCQkJZWxzZSB7CisJCQkJcXAtPnNfc3RhdGUgPQorCQkJCQlPUChTRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpOworCQkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBCVEggKi8KKwkJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCQlod29yZHMgKz0gMTsKKwkJCX0KKwkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQlidGgwIHw9IDEgPDwgMjM7CisJCQlicmVhazsKKworCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKKwkJCW9oZHItPnUucmMucmV0aC52YWRkciA9CisJCQkJY3B1X3RvX2JlNjQod3FlLT53ci53ci5yZG1hLnJlbW90ZV9hZGRyKTsKKwkJCW9oZHItPnUucmMucmV0aC5ya2V5ID0KKwkJCQljcHVfdG9fYmUzMih3cWUtPndyLndyLnJkbWEucmtleSk7CisJCQlvaGRyLT51LnJjLnJldGgubGVuZ3RoID0gY3B1X3RvX2JlMzIobGVuKTsKKwkJCWh3b3JkcyArPSBzaXplb2Yoc3RydWN0IGliX3JldGgpIC8gNDsKKwkJCWlmIChsZW4gPiBwbXR1KSB7CisJCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX0ZJUlNUKTsKKwkJCQlsZW4gPSBwbXR1OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1JETUFfV1JJVEUpCisJCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX09OTFkpOworCQkJZWxzZSB7CisJCQkJcXAtPnNfc3RhdGUgPQorCQkJCQlPUChSRE1BX1dSSVRFX09OTFlfV0lUSF9JTU1FRElBVEUpOworCQkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBSRVRIICovCisJCQkJb2hkci0+dS5yYy5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQkJaHdvcmRzICs9IDE7CisJCQkJaWYgKHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQorCQkJCQlidGgwIHw9IDEgPDwgMjM7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZ290byBkb25lOworCQl9CisJCWlmICgrK3FwLT5zX3RhaWwgPj0gcXAtPnNfc2l6ZSkKKwkJCXFwLT5zX3RhaWwgPSAwOworCQlicmVhazsKKworCWNhc2UgT1AoU0VORF9GSVJTVCk6CisJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9NSURETEUpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgT1AoU0VORF9NSURETEUpOgorCQlsZW4gPSBxcC0+c19sZW47CisJCWlmIChsZW4gPiBwbXR1KSB7CisJCQlsZW4gPSBwbXR1OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHdxZS0+d3Iub3Bjb2RlID09IElCX1dSX1NFTkQpCisJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCWVsc2UgeworCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1RfV0lUSF9JTU1FRElBVEUpOworCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLworCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQlod29yZHMgKz0gMTsKKwkJfQorCQlpZiAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCQlidGgwIHw9IDEgPDwgMjM7CisJCWJyZWFrOworCisJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKKwkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1dSSVRFX01JRERMRSk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChSRE1BX1dSSVRFX01JRERMRSk6CisJCWxlbiA9IHFwLT5zX2xlbjsKKwkJaWYgKGxlbiA+IHBtdHUpIHsKKwkJCWxlbiA9IHBtdHU7CisJCQlicmVhazsKKwkJfQorCQlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURSkKKwkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9XUklURV9MQVNUKTsKKwkJZWxzZSB7CisJCQlxcC0+c19zdGF0ZSA9CisJCQkJT1AoUkRNQV9XUklURV9MQVNUX1dJVEhfSU1NRURJQVRFKTsKKwkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBCVEggKi8KKwkJCW9oZHItPnUuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJaHdvcmRzICs9IDE7CisJCQlpZiAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCQkJYnRoMCB8PSAxIDw8IDIzOworCQl9CisJCWJyZWFrOworCX0KKwlidGgyID0gcXAtPnNfbmV4dF9wc24rKyAmIElQU19QU05fTUFTSzsKKwlxcC0+c19sZW4gLT0gbGVuOworCWJ0aDAgfD0gcXAtPnNfc3RhdGUgPDwgMjQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwkvKiBDb25zdHJ1Y3QgdGhlIGhlYWRlci4gKi8KKwlleHRyYV9ieXRlcyA9ICg0IC0gbGVuKSAmIDM7CisJbndvcmRzID0gKGxlbiArIGV4dHJhX2J5dGVzKSA+PiAyOworCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpKSB7CisJCS8qIEhlYWRlciBzaXplIGluIDMyLWJpdCB3b3Jkcy4gKi8KKwkJaHdvcmRzICs9IDEwOworCQlscmgwID0gSVBTX0xSSF9HUkg7CisJCXFwLT5zX2hkci51LmwuZ3JoLnZlcnNpb25fdGNsYXNzX2Zsb3cgPQorCQkJY3B1X3RvX2JlMzIoKDYgPDwgMjgpIHwKKwkJCQkgICAgKHFwLT5yZW1vdGVfYWhfYXR0ci5ncmgudHJhZmZpY19jbGFzcworCQkJCSAgICAgPDwgMjApIHwKKwkJCQkgICAgcXAtPnJlbW90ZV9haF9hdHRyLmdyaC5mbG93X2xhYmVsKTsKKwkJcXAtPnNfaGRyLnUubC5ncmgucGF5bGVuID0KKwkJCWNwdV90b19iZTE2KCgoaHdvcmRzIC0gMTIpICsgbndvcmRzICsKKwkJCQkgICAgIFNJWkVfT0ZfQ1JDKSA8PCAyKTsKKwkJLyogbmV4dF9oZHIgaXMgZGVmaW5lZCBieSBDOC03IGluIGNoLiA4LjQuMSAqLworCQlxcC0+c19oZHIudS5sLmdyaC5uZXh0X2hkciA9IDB4MUI7CisJCXFwLT5zX2hkci51LmwuZ3JoLmhvcF9saW1pdCA9CisJCQlxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLmhvcF9saW1pdDsKKwkJLyogVGhlIFNHSUQgaXMgMzItYml0IGFsaWduZWQuICovCisJCXFwLT5zX2hkci51LmwuZ3JoLnNnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXggPQorCQkJZGV2LT5naWRfcHJlZml4OworCQlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQgPQorCQkJaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGV2LT5kZCk7CisJCXFwLT5zX2hkci51LmwuZ3JoLmRnaWQgPSBxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLmRnaWQ7CisJfQorCXFwLT5zX2hkcndvcmRzID0gaHdvcmRzOworCXFwLT5zX2N1cl9zZ2UgPSAmcXAtPnNfc2dlOworCXFwLT5zX2N1cl9zaXplID0gbGVuOworCWxyaDAgfD0gcXAtPnJlbW90ZV9haF9hdHRyLnNsIDw8IDQ7CisJcXAtPnNfaGRyLmxyaFswXSA9IGNwdV90b19iZTE2KGxyaDApOworCS8qIERFU1QgTElEICovCisJcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKKwlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYoaHdvcmRzICsgbndvcmRzICsgU0laRV9PRl9DUkMpOworCXFwLT5zX2hkci5scmhbM10gPSBjcHVfdG9fYmUxNihpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKTsKKwlidGgwIHw9IGV4dHJhX2J5dGVzIDw8IDIwOworCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOworCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKKwlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihidGgyKTsKKworCS8qIENoZWNrIGZvciBtb3JlIHdvcmsgdG8gZG8uICovCisJZ290byBhZ2FpbjsKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKKworYmFpbDoKKwlyZXR1cm47Cit9CisKKy8qKgorICogaXBhdGhfdWNfcmN2IC0gaGFuZGxlIGFuIGluY29taW5nIFVDIHBhY2tldAorICogQGRldjogdGhlIGRldmljZSB0aGUgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBoZHI6IHRoZSBoZWFkZXIgb2YgdGhlIHBhY2tldAorICogQGhhc19ncmg6IHRydWUgaWYgdGhlIHBhY2tldCBoYXMgYSBHUkgKKyAqIEBkYXRhOiB0aGUgcGFja2V0IGRhdGEKKyAqIEB0bGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQKKyAqIEBxcDogdGhlIFFQIGZvciB0aGlzIHBhY2tldC4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3FwX3JjdigpIHRvIHByb2Nlc3MgYW4gaW5jb21pbmcgVUMgcGFja2V0CisgKiBmb3IgdGhlIGdpdmVuIFFQLgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbC4KKyAqLwordm9pZCBpcGF0aF91Y19yY3Yoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgKmhkciwKKwkJICBpbnQgaGFzX2dyaCwgdm9pZCAqZGF0YSwgdTMyIHRsZW4sIHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHI7CisJaW50IG9wY29kZTsKKwl1MzIgaGRyc2l6ZTsKKwl1MzIgcHNuOworCXUzMiBwYWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJdTMyIHBtdHUgPSBpYl9tdHVfZW51bV90b19pbnQocXAtPnBhdGhfbXR1KTsKKwlzdHJ1Y3QgaWJfcmV0aCAqcmV0aDsKKwlpbnQgaGVhZGVyX2luX2RhdGE7CisKKwkvKiBDaGVjayBmb3IgR1JIICovCisJaWYgKCFoYXNfZ3JoKSB7CisJCW9oZHIgPSAmaGRyLT51Lm90aDsKKwkJaGRyc2l6ZSA9IDggKyAxMjsJLyogTFJIICsgQlRIICovCisJCXBzbiA9IGJlMzJfdG9fY3B1KG9oZHItPmJ0aFsyXSk7CisJCWhlYWRlcl9pbl9kYXRhID0gMDsKKwl9IGVsc2UgeworCQlvaGRyID0gJmhkci0+dS5sLm90aDsKKwkJaGRyc2l6ZSA9IDggKyA0MCArIDEyOwkvKiBMUkggKyBHUkggKyBCVEggKi8KKwkJLyoKKwkJICogVGhlIGhlYWRlciB3aXRoIEdSSCBpcyA2MCBieXRlcyBhbmQgdGhlCisJCSAqIGNvcmUgZHJpdmVyIHNldHMgdGhlIGVhZ2VyIGhlYWRlciBidWZmZXIKKwkJICogc2l6ZSB0byA1NiBieXRlcyBzbyB0aGUgbGFzdCA0IGJ5dGVzIG9mCisJCSAqIHRoZSBCVEggaGVhZGVyIChQU04pIGlzIGluIHRoZSBkYXRhIGJ1ZmZlci4KKwkJICovCisJCWhlYWRlcl9pbl9kYXRhID0KKwkJCWlwYXRoX2xheWVyX2dldF9yY3ZoZHJlbnRzaXplKGRldi0+ZGQpID09IDE2OworCQlpZiAoaGVhZGVyX2luX2RhdGEpIHsKKwkJCXBzbiA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopIGRhdGEpWzBdKTsKKwkJCWRhdGEgKz0gc2l6ZW9mKF9fYmUzMik7CisJCX0gZWxzZQorCQkJcHNuID0gYmUzMl90b19jcHUob2hkci0+YnRoWzJdKTsKKwl9CisJLyoKKwkgKiBUaGUgb3Bjb2RlIGlzIGluIHRoZSBsb3cgYnl0ZSB3aGVuIGl0cyBpbiBuZXR3b3JrIG9yZGVyCisJICogKHRvcCBieXRlIHdoZW4gaW4gaG9zdCBvcmRlcikuCisJICovCisJb3Bjb2RlID0gYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyNDsKKworCXdjLmltbV9kYXRhID0gMDsKKwl3Yy53Y19mbGFncyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCisJLyogQ29tcGFyZSB0aGUgUFNOIHZlcnNlcyB0aGUgZXhwZWN0ZWQgUFNOLiAqLworCWlmICh1bmxpa2VseShpcGF0aF9jbXAyNChwc24sIHFwLT5yX3BzbikgIT0gMCkpIHsKKwkJLyoKKwkJICogSGFuZGxlIGEgc2VxdWVuY2UgZXJyb3IuCisJCSAqIFNpbGVudGx5IGRyb3AgYW55IGN1cnJlbnQgbWVzc2FnZS4KKwkJICovCisJCXFwLT5yX3BzbiA9IHBzbjsKKwlpbnY6CisJCXFwLT5yX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKKwkJc3dpdGNoIChvcGNvZGUpIHsKKwkJY2FzZSBPUChTRU5EX0ZJUlNUKToKKwkJY2FzZSBPUChTRU5EX09OTFkpOgorCQljYXNlIE9QKFNFTkRfT05MWV9XSVRIX0lNTUVESUFURSk6CisJCQlnb3RvIHNlbmRfZmlyc3Q7CisKKwkJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKKwkJY2FzZSBPUChSRE1BX1dSSVRFX09OTFkpOgorCQljYXNlIE9QKFJETUFfV1JJVEVfT05MWV9XSVRIX0lNTUVESUFURSk6CisJCQlnb3RvIHJkbWFfZmlyc3Q7CisKKwkJZGVmYXVsdDoKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCS8qIENoZWNrIGZvciBvcGNvZGUgc2VxdWVuY2UgZXJyb3JzLiAqLworCXN3aXRjaCAocXAtPnJfc3RhdGUpIHsKKwljYXNlIE9QKFNFTkRfRklSU1QpOgorCWNhc2UgT1AoU0VORF9NSURETEUpOgorCQlpZiAob3Bjb2RlID09IE9QKFNFTkRfTUlERExFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfTEFTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChTRU5EX0xBU1RfV0lUSF9JTU1FRElBVEUpKQorCQkJYnJlYWs7CisJCWdvdG8gaW52OworCisJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKKwljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKKwkJaWYgKG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX01JRERMRSkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX0xBU1QpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9MQVNUX1dJVEhfSU1NRURJQVRFKSkKKwkJCWJyZWFrOworCQlnb3RvIGludjsKKworCWRlZmF1bHQ6CisJCWlmIChvcGNvZGUgPT0gT1AoU0VORF9GSVJTVCkgfHwKKwkJICAgIG9wY29kZSA9PSBPUChTRU5EX09OTFkpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfRklSU1QpIHx8CisJCSAgICBvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9PTkxZKSB8fAorCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfT05MWV9XSVRIX0lNTUVESUFURSkpCisJCQlicmVhazsKKwkJZ290byBpbnY7CisJfQorCisJLyogT0ssIHByb2Nlc3MgdGhlIHBhY2tldC4gKi8KKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgT1AoU0VORF9GSVJTVCk6CisJY2FzZSBPUChTRU5EX09OTFkpOgorCWNhc2UgT1AoU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKToKKwlzZW5kX2ZpcnN0OgorCQlpZiAocXAtPnJfcmV1c2Vfc2dlKSB7CisJCQlxcC0+cl9yZXVzZV9zZ2UgPSAwOworCQkJcXAtPnJfc2dlID0gcXAtPnNfcmRtYV9zZ2U7CisJCX0gZWxzZSBpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAwKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCS8qIFNhdmUgdGhlIFdRRSBzbyB3ZSBjYW4gcmV1c2UgaXQgaW4gY2FzZSBvZiBhbiBlcnJvci4gKi8KKwkJcXAtPnNfcmRtYV9zZ2UgPSBxcC0+cl9zZ2U7CisJCXFwLT5yX3Jjdl9sZW4gPSAwOworCQlpZiAob3Bjb2RlID09IE9QKFNFTkRfT05MWSkpCisJCQlnb3RvIHNlbmRfbGFzdDsKKwkJZWxzZSBpZiAob3Bjb2RlID09IE9QKFNFTkRfT05MWV9XSVRIX0lNTUVESUFURSkpCisJCQlnb3RvIHNlbmRfbGFzdF9pbW07CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX01JRERMRSk6CisJCS8qIENoZWNrIGZvciBpbnZhbGlkIGxlbmd0aCBQTVRVIG9yIHBvc3RlZCByd3FlIGxlbi4gKi8KKwkJaWYgKHVubGlrZWx5KHRsZW4gIT0gKGhkcnNpemUgKyBwbXR1ICsgNCkpKSB7CisJCQlxcC0+cl9yZXVzZV9zZ2UgPSAxOworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCXFwLT5yX3Jjdl9sZW4gKz0gcG10dTsKKwkJaWYgKHVubGlrZWx5KHFwLT5yX3Jjdl9sZW4gPiBxcC0+cl9sZW4pKSB7CisJCQlxcC0+cl9yZXVzZV9zZ2UgPSAxOworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIGRhdGEsIHBtdHUpOworCQlicmVhazsKKworCWNhc2UgT1AoU0VORF9MQVNUX1dJVEhfSU1NRURJQVRFKToKKwlzZW5kX2xhc3RfaW1tOgorCQlpZiAoaGVhZGVyX2luX2RhdGEpIHsKKwkJCXdjLmltbV9kYXRhID0gKihfX2JlMzIgKikgZGF0YTsKKwkJCWRhdGEgKz0gc2l6ZW9mKF9fYmUzMik7CisJCX0gZWxzZSB7CisJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciBCVEggKi8KKwkJCXdjLmltbV9kYXRhID0gb2hkci0+dS5pbW1fZGF0YTsKKwkJfQorCQloZHJzaXplICs9IDQ7CisJCXdjLndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBPUChTRU5EX0xBU1QpOgorCXNlbmRfbGFzdDoKKwkJLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIG1lc3NhZ2Ugd2FzIHBhZGRlZCBieS4gKi8KKwkJcGFkID0gKGJlMzJfdG9fY3B1KG9oZHItPmJ0aFswXSkgPj4gMjApICYgMzsKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgbGVuZ3RoLiAqLworCQkvKiBYWFggTEFTVCBsZW4gc2hvdWxkIGJlID49IDEgKi8KKwkJaWYgKHVubGlrZWx5KHRsZW4gPCAoaGRyc2l6ZSArIHBhZCArIDQpKSkgeworCQkJcXAtPnJfcmV1c2Vfc2dlID0gMTsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBEb24ndCBjb3VudCB0aGUgQ1JDLiAqLworCQl0bGVuIC09IChoZHJzaXplICsgcGFkICsgNCk7CisJCXdjLmJ5dGVfbGVuID0gdGxlbiArIHFwLT5yX3Jjdl9sZW47CisJCWlmICh1bmxpa2VseSh3Yy5ieXRlX2xlbiA+IHFwLT5yX2xlbikpIHsKKwkJCXFwLT5yX3JldXNlX3NnZSA9IDE7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogWFhYIE5lZWQgdG8gZnJlZSBTR0VzICovCisJbGFzdF9pbW06CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIGRhdGEsIHRsZW4pOworCQl3Yy53cl9pZCA9IHFwLT5yX3dyX2lkOworCQl3Yy5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCQl3Yy5vcGNvZGUgPSBJQl9XQ19SRUNWOworCQl3Yy52ZW5kb3JfZXJyID0gMDsKKwkJd2MucXBfbnVtID0gcXAtPmlicXAucXBfbnVtOworCQl3Yy5zcmNfcXAgPSBxcC0+cmVtb3RlX3FwbjsKKwkJd2MucGtleV9pbmRleCA9IDA7CisJCXdjLnNsaWQgPSBxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZDsKKwkJd2Muc2wgPSBxcC0+cmVtb3RlX2FoX2F0dHIuc2w7CisJCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJd2MucG9ydF9udW0gPSAwOworCQkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCisJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAorCQkJICAgICAgIChvaGRyLT5idGhbMF0gJgorCQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQlicmVhazsKKworCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CisJY2FzZSBPUChSRE1BX1dSSVRFX09OTFkpOgorCWNhc2UgT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKTogLyogY29uc3VtZSBSV1FFICovCisJcmRtYV9maXJzdDoKKwkJLyogUkVUSCBjb21lcyBhZnRlciBCVEggKi8KKwkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKKwkJCXJldGggPSAmb2hkci0+dS5yYy5yZXRoOworCQllbHNlIHsKKwkJCXJldGggPSAoc3RydWN0IGliX3JldGggKilkYXRhOworCQkJZGF0YSArPSBzaXplb2YoKnJldGgpOworCQl9CisJCWhkcnNpemUgKz0gc2l6ZW9mKCpyZXRoKTsKKwkJcXAtPnJfbGVuID0gYmUzMl90b19jcHUocmV0aC0+bGVuZ3RoKTsKKwkJcXAtPnJfcmN2X2xlbiA9IDA7CisJCWlmIChxcC0+cl9sZW4gIT0gMCkgeworCQkJdTMyIHJrZXkgPSBiZTMyX3RvX2NwdShyZXRoLT5ya2V5KTsKKwkJCXU2NCB2YWRkciA9IGJlNjRfdG9fY3B1KHJldGgtPnZhZGRyKTsKKworCQkJLyogQ2hlY2sgcmtleSAqLworCQkJaWYgKHVubGlrZWx5KCFpcGF0aF9ya2V5X29rKAorCQkJCQkgICAgIGRldiwgJnFwLT5yX3NnZSwgcXAtPnJfbGVuLAorCQkJCQkgICAgIHZhZGRyLCBya2V5LAorCQkJCQkgICAgIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpKSkgeworCQkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlxcC0+cl9zZ2Uuc2dfbGlzdCA9IE5VTEw7CisJCQlxcC0+cl9zZ2Uuc2dlLm1yID0gTlVMTDsKKwkJCXFwLT5yX3NnZS5zZ2UudmFkZHIgPSBOVUxMOworCQkJcXAtPnJfc2dlLnNnZS5sZW5ndGggPSAwOworCQkJcXAtPnJfc2dlLnNnZS5zZ2VfbGVuZ3RoID0gMDsKKwkJfQorCQlpZiAodW5saWtlbHkoIShxcC0+cXBfYWNjZXNzX2ZsYWdzICYKKwkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSkpIHsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAob3Bjb2RlID09IE9QKFJETUFfV1JJVEVfT05MWSkpCisJCQlnb3RvIHJkbWFfbGFzdDsKKwkJZWxzZSBpZiAob3Bjb2RlID09CisJCQkgT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKSkKKwkJCWdvdG8gcmRtYV9sYXN0X2ltbTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgbGVuZ3RoIFBNVFUgb3IgcG9zdGVkIHJ3cWUgbGVuLiAqLworCQlpZiAodW5saWtlbHkodGxlbiAhPSAoaGRyc2l6ZSArIHBtdHUgKyA0KSkpIHsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlxcC0+cl9yY3ZfbGVuICs9IHBtdHU7CisJCWlmICh1bmxpa2VseShxcC0+cl9yY3ZfbGVuID4gcXAtPnJfbGVuKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIGRhdGEsIHBtdHUpOworCQlicmVhazsKKworCWNhc2UgT1AoUkRNQV9XUklURV9MQVNUX1dJVEhfSU1NRURJQVRFKToKKwlyZG1hX2xhc3RfaW1tOgorCQkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5LiAqLworCQlwYWQgPSAoYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyMCkgJiAzOworCQkvKiBDaGVjayBmb3IgaW52YWxpZCBsZW5ndGguICovCisJCS8qIFhYWCBMQVNUIGxlbiBzaG91bGQgYmUgPj0gMSAqLworCQlpZiAodW5saWtlbHkodGxlbiA8IChoZHJzaXplICsgcGFkICsgNCkpKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogRG9uJ3QgY291bnQgdGhlIENSQy4gKi8KKwkJdGxlbiAtPSAoaGRyc2l6ZSArIHBhZCArIDQpOworCQlpZiAodW5saWtlbHkodGxlbiArIHFwLT5yX3Jjdl9sZW4gIT0gcXAtPnJfbGVuKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChxcC0+cl9yZXVzZV9zZ2UpIHsKKwkJCXFwLT5yX3JldXNlX3NnZSA9IDA7CisJCX0gZWxzZSBpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAxKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChoZWFkZXJfaW5fZGF0YSkgeworCQkJd2MuaW1tX2RhdGEgPSAqKF9fYmUzMiAqKSBkYXRhOworCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIEJUSCAqLworCQkJd2MuaW1tX2RhdGEgPSBvaGRyLT51LmltbV9kYXRhOworCQl9CisJCWhkcnNpemUgKz0gNDsKKwkJd2Mud2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJd2MuYnl0ZV9sZW4gPSAwOworCQlnb3RvIGxhc3RfaW1tOworCisJY2FzZSBPUChSRE1BX1dSSVRFX0xBU1QpOgorCXJkbWFfbGFzdDoKKwkJLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIG1lc3NhZ2Ugd2FzIHBhZGRlZCBieS4gKi8KKwkJcGFkID0gKGJlMzJfdG9fY3B1KG9oZHItPmJ0aFswXSkgPj4gMjApICYgMzsKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgbGVuZ3RoLiAqLworCQkvKiBYWFggTEFTVCBsZW4gc2hvdWxkIGJlID49IDEgKi8KKwkJaWYgKHVubGlrZWx5KHRsZW4gPCAoaGRyc2l6ZSArIHBhZCArIDQpKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBkb25lOworCQl9CisJCS8qIERvbid0IGNvdW50IHRoZSBDUkMuICovCisJCXRsZW4gLT0gKGhkcnNpemUgKyBwYWQgKyA0KTsKKwkJaWYgKHVubGlrZWx5KHRsZW4gKyBxcC0+cl9yY3ZfbGVuICE9IHFwLT5yX2xlbikpIHsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBkYXRhLCB0bGVuKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBEcm9wIHBhY2tldCBmb3IgdW5rbm93biBvcGNvZGVzLiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBiYWlsOworCX0KKwlxcC0+cl9wc24rKzsKKwlxcC0+cl9zdGF0ZSA9IG9wY29kZTsKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCitiYWlsOgorCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwNmRhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHJkbWEvaWJfc21pLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworLyoqCisgKiBpcGF0aF91ZF9sb29wYmFjayAtIGhhbmRsZSBzZW5kIG9uIGxvb3BiYWNrIFFQcworICogQHNxcDogdGhlIFFQCisgKiBAc3M6IHRoZSBTR0Ugc3RhdGUKKyAqIEBsZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gc2VuZAorICogQHdyOiB0aGUgd29yayByZXF1ZXN0CisgKiBAd2M6IHRoZSB3b3JrIGNvbXBsZXRpb24gZW50cnkKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3Bvc3RfdWRfc2VuZCgpIHRvIGZvcndhcmQgYSBXUUUgYWRkcmVzc2VkCisgKiB0byB0aGUgc2FtZSBIQ0EuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX3VkX2xvb3BiYWNrKHN0cnVjdCBpcGF0aF9xcCAqc3FwLAorCQkJICAgICAgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsCisJCQkgICAgICB1MzIgbGVuZ3RoLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsCisJCQkgICAgICBzdHJ1Y3QgaWJfd2MgKndjKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihzcXAtPmlicXAuZGV2aWNlKTsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwOworCXN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlwYXRoX3JxICpycTsKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnE7CisJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSByc2dlOworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZTsKKwlzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlOworCisJcXAgPSBpcGF0aF9sb29rdXBfcXBuKCZkZXYtPnFwX3RhYmxlLCB3ci0+d3IudWQucmVtb3RlX3Fwbik7CisJaWYgKCFxcCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBxa2V5IG1hdGNoZXMgKGV4Y2VwdCBmb3IgUVAwLCBzZWUgOS42LjEuNC4xKS4KKwkgKiBRa2V5cyB3aXRoIHRoZSBoaWdoIG9yZGVyIGJpdCBzZXQgbWVhbiB1c2UgdGhlCisJICogcWtleSBmcm9tIHRoZSBRUCBjb250ZXh0IGluc3RlYWQgb2YgdGhlIFdSIChzZWUgMTAuMi41KS4KKwkgKi8KKwlpZiAodW5saWtlbHkocXAtPmlicXAucXBfbnVtICYmCisJCSAgICAgKChpbnQpIHdyLT53ci51ZC5yZW1vdGVfcWtleSA8IDAKKwkJICAgICAgPyBxcC0+cWtleSA6IHdyLT53ci51ZC5yZW1vdGVfcWtleSkgIT0gcXAtPnFrZXkpKSB7CisJCS8qIFhYWCBPSyB0byBsb3NlIGEgY291bnQgb25jZSBpbiBhIHdoaWxlLiAqLworCQlkZXYtPnFrZXlfdmlvbGF0aW9ucysrOworCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZWQgdGhlIGRhdGEgZXZlbiBpZiBub3QKKwkgKiBwcmVzZW50IG9uIHRoZSB3aXJlLgorCSAqLworCXdjLT5ieXRlX2xlbiA9IGxlbmd0aCArIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKTsKKworCWlmICh3ci0+b3Bjb2RlID09IElCX1dSX1NFTkRfV0lUSF9JTU0pIHsKKwkJd2MtPndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07CisJCXdjLT5pbW1fZGF0YSA9IHdyLT5pbW1fZGF0YTsKKwl9IGVsc2UgeworCQl3Yy0+d2NfZmxhZ3MgPSAwOworCQl3Yy0+aW1tX2RhdGEgPSAwOworCX0KKworCS8qCisJICogR2V0IHRoZSBuZXh0IHdvcmsgcmVxdWVzdCBlbnRyeSB0byBmaW5kIHdoZXJlIHRvIHB1dCB0aGUgZGF0YS4KKwkgKiBOb3RlIHRoYXQgaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGFmdGVyIGNoYW5naW5nIHJxLT50YWlsCisJICogc2luY2UgaXBhdGhfcG9zdF9yZWNlaXZlKCkgd29uJ3QgZmlsbCB0aGUgZW1wdHkgc2xvdC4KKwkgKi8KKwlpZiAocXAtPmlicXAuc3JxKSB7CisJCXNycSA9IHRvX2lzcnEocXAtPmlicXAuc3JxKTsKKwkJcnEgPSAmc3JxLT5ycTsKKwl9IGVsc2UgeworCQlzcnEgPSBOVUxMOworCQlycSA9ICZxcC0+cl9ycTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJaWYgKHJxLT50YWlsID09IHJxLT5oZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBkb25lOworCX0KKwkvKiBTaWxlbnRseSBkcm9wIHBhY2tldHMgd2hpY2ggYXJlIHRvbyBiaWcuICovCisJd3FlID0gZ2V0X3J3cWVfcHRyKHJxLCBycS0+dGFpbCk7CisJaWYgKHdjLT5ieXRlX2xlbiA+IHdxZS0+bGVuZ3RoKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBkb25lOworCX0KKwl3Yy0+d3JfaWQgPSB3cWUtPndyX2lkOworCXJzZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCXJzZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7CisJcnNnZS5udW1fc2dlID0gd3FlLT5udW1fc2dlOworCWlmICgrK3JxLT50YWlsID49IHJxLT5zaXplKQorCQlycS0+dGFpbCA9IDA7CisJaWYgKHNycSAmJiBzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIpIHsKKwkJdTMyIG47CisKKwkJaWYgKHJxLT5oZWFkIDwgcnEtPnRhaWwpCisJCQluID0gcnEtPnNpemUgKyBycS0+aGVhZCAtIHJxLT50YWlsOworCQllbHNlCisJCQluID0gcnEtPmhlYWQgLSBycS0+dGFpbDsKKwkJaWYgKG4gPCBzcnEtPmxpbWl0KSB7CisJCQlzdHJ1Y3QgaWJfZXZlbnQgZXY7CisKKwkJCXNycS0+bGltaXQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJCWV2LmRldmljZSA9IHFwLT5pYnFwLmRldmljZTsKKwkJCWV2LmVsZW1lbnQuc3JxID0gcXAtPmlicXAuc3JxOworCQkJZXYuZXZlbnQgPSBJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRDsKKwkJCXNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcigmZXYsCisJCQkJCQkgc3JxLT5pYnNycS5zcnFfY29udGV4dCk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlhaF9hdHRyID0gJnRvX2lhaCh3ci0+d3IudWQuYWgpLT5hdHRyOworCWlmIChhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkgeworCQlpcGF0aF9jb3B5X3NnZSgmcnNnZSwgJmFoX2F0dHItPmdyaCwgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpKTsKKwkJd2MtPndjX2ZsYWdzIHw9IElCX1dDX0dSSDsKKwl9IGVsc2UKKwkJaXBhdGhfc2tpcF9zZ2UoJnJzZ2UsIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKSk7CisJc2dlID0gJnNzLT5zZ2U7CisJd2hpbGUgKGxlbmd0aCkgeworCQl1MzIgbGVuID0gc2dlLT5sZW5ndGg7CisKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IGxlbmd0aDsKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJaXBhdGhfY29weV9zZ2UoJnJzZ2UsIHNnZS0+dmFkZHIsIGxlbik7CisJCXNnZS0+dmFkZHIgKz0gbGVuOworCQlzZ2UtPmxlbmd0aCAtPSBsZW47CisJCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW47CisJCWlmIChzZ2UtPnNnZV9sZW5ndGggPT0gMCkgeworCQkJaWYgKC0tc3MtPm51bV9zZ2UpCisJCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOworCQl9IGVsc2UgaWYgKHNnZS0+bGVuZ3RoID09IDAgJiYgc2dlLT5tciAhPSBOVUxMKSB7CisJCQlpZiAoKytzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJCWJyZWFrOworCQkJCXNnZS0+biA9IDA7CisJCQl9CisJCQlzZ2UtPnZhZGRyID0KKwkJCQlzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyOworCQkJc2dlLT5sZW5ndGggPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoOworCQl9CisJCWxlbmd0aCAtPSBsZW47CisJfQorCXdjLT5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCXdjLT5vcGNvZGUgPSBJQl9XQ19SRUNWOworCXdjLT52ZW5kb3JfZXJyID0gMDsKKwl3Yy0+cXBfbnVtID0gcXAtPmlicXAucXBfbnVtOworCXdjLT5zcmNfcXAgPSBzcXAtPmlicXAucXBfbnVtOworCS8qIFhYWCBkbyB3ZSBrbm93IHdoaWNoIHBrZXkgbWF0Y2hlZD8gT25seSBuZWVkZWQgZm9yIEdTSS4gKi8KKwl3Yy0+cGtleV9pbmRleCA9IDA7CisJd2MtPnNsaWQgPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpIHwKKwkJKGFoX2F0dHItPnNyY19wYXRoX2JpdHMgJgorCQkgKCgxIDw8IChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNykpIC0gMSkpOworCXdjLT5zbCA9IGFoX2F0dHItPnNsOworCXdjLT5kbGlkX3BhdGhfYml0cyA9CisJCWFoX2F0dHItPmRsaWQgJiAoKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKKwkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCisJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCB3YywKKwkJICAgICAgIHdyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpOworCitkb25lOgorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpKQorCQl3YWtlX3VwKCZxcC0+d2FpdCk7Cit9CisKKy8qKgorICogaXBhdGhfcG9zdF91ZF9zZW5kIC0gcG9zdCBhIFVEIHNlbmQgb24gUVAKKyAqIEBxcDogdGhlIFFQCisgKiBAd3I6IHRoZSB3b3JrIHJlcXVlc3QKKyAqCisgKiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgc2VuZCB0aGUgZGF0YSBhcyBpdCBpcyBwb3N0ZWQgaW5zdGVhZCBvZiBwdXR0aW5nCisgKiB0aGUgcmVxdWVzdCBpbnRvIGEgcmluZyBidWZmZXIuICBJZiB3ZSB3YW50ZWQgdG8gdXNlIGEgcmluZyBidWZmZXIsCisgKiB3ZSB3b3VsZCBuZWVkIHRvIHNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIFNXUUUuCisgKi8KK2ludCBpcGF0aF9wb3N0X3VkX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOworCXN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyOworCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgc3M7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dfbGlzdDsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJdTMyIGh3b3JkczsKKwl1MzIgbndvcmRzOworCXUzMiBsZW47CisJdTMyIGV4dHJhX2J5dGVzOworCXUzMiBidGgwOworCXUxNiBscmgwOworCXUxNiBsaWQ7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmICghKGliX2lwYXRoX3N0YXRlX29wc1txcC0+c3RhdGVdICYgSVBBVEhfUFJPQ0VTU19TRU5EX09LKSkgeworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogSUIgc3BlYyBzYXlzIHRoYXQgbnVtX3NnZSA9PSAwIGlzIE9LLiAqLworCWlmICh3ci0+bnVtX3NnZSA+IHFwLT5zX21heF9zZ2UpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmICh3ci0+bnVtX3NnZSA+IDEpIHsKKwkJc2dfbGlzdCA9IGttYWxsb2MoKHFwLT5zX21heF9zZ2UgLSAxKSAqIHNpemVvZigqc2dfbGlzdCksCisJCQkJICBHRlBfQVRPTUlDKTsKKwkJaWYgKCFzZ19saXN0KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisJfSBlbHNlCisJCXNnX2xpc3QgPSBOVUxMOworCisJLyogQ2hlY2sgdGhlIGJ1ZmZlciB0byBzZW5kLiAqLworCXNzLnNnX2xpc3QgPSBzZ19saXN0OworCXNzLnNnZS5tciA9IE5VTEw7CisJc3Muc2dlLnZhZGRyID0gTlVMTDsKKwlzcy5zZ2UubGVuZ3RoID0gMDsKKwlzcy5zZ2Uuc2dlX2xlbmd0aCA9IDA7CisJc3MubnVtX3NnZSA9IDA7CisJbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7IGkrKykgeworCQkvKiBDaGVjayBMS0VZICovCisJCWlmICh0b19pcGQocXAtPmlicXAucGQpLT51c2VyICYmIHdyLT5zZ19saXN0W2ldLmxrZXkgPT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCWlmICh3ci0+c2dfbGlzdFtpXS5sZW5ndGggPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlwYXRoX2xrZXlfb2soJmRldi0+bGtfdGFibGUsIHNzLm51bV9zZ2UgPworCQkJCSAgIHNnX2xpc3QgKyBzcy5udW1fc2dlIC0gMSA6ICZzcy5zZ2UsCisJCQkJICAgJndyLT5zZ19saXN0W2ldLCAwKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlsZW4gKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOworCQlzcy5udW1fc2dlKys7CisJfQorCWV4dHJhX2J5dGVzID0gKDQgLSBsZW4pICYgMzsKKwlud29yZHMgPSAobGVuICsgZXh0cmFfYnl0ZXMpID4+IDI7CisKKwkvKiBDb25zdHJ1Y3QgdGhlIGhlYWRlci4gKi8KKwlhaF9hdHRyID0gJnRvX2lhaCh3ci0+d3IudWQuYWgpLT5hdHRyOworCWlmIChhaF9hdHRyLT5kbGlkID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwlpZiAoYWhfYXR0ci0+ZGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFKSB7CisJCWlmIChhaF9hdHRyLT5kbGlkICE9IElQU19QRVJNSVNTSVZFX0xJRCkKKwkJCWRldi0+bl9tdWx0aWNhc3RfeG1pdCsrOworCQllbHNlCisJCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7CisJfSBlbHNlIHsKKwkJZGV2LT5uX3VuaWNhc3RfeG1pdCsrOworCQlsaWQgPSBhaF9hdHRyLT5kbGlkICYKKwkJCX4oKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKKwkJaWYgKHVubGlrZWx5KGxpZCA9PSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKSkgeworCQkJLyoKKwkJCSAqIFBhc3MgaW4gYW4gdW5pbml0aWFsaXplZCBpYl93YyB0byBzYXZlIHN0YWNrCisJCQkgKiBzcGFjZS4KKwkJCSAqLworCQkJaXBhdGhfdWRfbG9vcGJhY2socXAsICZzcywgbGVuLCB3ciwgJndjKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlpZiAoYWhfYXR0ci0+YWhfZmxhZ3MgJiBJQl9BSF9HUkgpIHsKKwkJLyogSGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzLiAqLworCQlod29yZHMgPSAxNzsKKwkJbHJoMCA9IElQU19MUkhfR1JIOworCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOworCQlxcC0+c19oZHIudS5sLmdyaC52ZXJzaW9uX3RjbGFzc19mbG93ID0KKwkJCWNwdV90b19iZTMyKCg2IDw8IDI4KSB8CisJCQkJICAgIChhaF9hdHRyLT5ncmgudHJhZmZpY19jbGFzcyA8PCAyMCkgfAorCQkJCSAgICBhaF9hdHRyLT5ncmguZmxvd19sYWJlbCk7CisJCXFwLT5zX2hkci51LmwuZ3JoLnBheWxlbiA9CisJCQljcHVfdG9fYmUxNigoKHdyLT5vcGNvZGUgPT0KKwkJCQkgICAgICBJQl9XUl9TRU5EX1dJVEhfSU1NID8gNiA6IDUpICsKKwkJCQkgICAgIG53b3JkcyArIFNJWkVfT0ZfQ1JDKSA8PCAyKTsKKwkJLyogbmV4dF9oZHIgaXMgZGVmaW5lZCBieSBDOC03IGluIGNoLiA4LjQuMSAqLworCQlxcC0+c19oZHIudS5sLmdyaC5uZXh0X2hkciA9IDB4MUI7CisJCXFwLT5zX2hkci51LmwuZ3JoLmhvcF9saW1pdCA9IGFoX2F0dHItPmdyaC5ob3BfbGltaXQ7CisJCS8qIFRoZSBTR0lEIGlzIDMyLWJpdCBhbGlnbmVkLiAqLworCQlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5zdWJuZXRfcHJlZml4ID0KKwkJCWRldi0+Z2lkX3ByZWZpeDsKKwkJcXAtPnNfaGRyLnUubC5ncmguc2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkID0KKwkJCWlwYXRoX2xheWVyX2dldF9ndWlkKGRldi0+ZGQpOworCQlxcC0+c19oZHIudS5sLmdyaC5kZ2lkID0gYWhfYXR0ci0+Z3JoLmRnaWQ7CisJCS8qCisJCSAqIERvbid0IHdvcnJ5IGFib3V0IHNlbmRpbmcgdG8gbG9jYWxseSBhdHRhY2hlZCBtdWx0aWNhc3QKKwkJICogUVBzLiAgSXQgaXMgdW5zcGVjaWZpZWQgYnkgdGhlIHNwZWMuIHdoYXQgaGFwcGVucy4KKwkJICovCisJfSBlbHNlIHsKKwkJLyogSGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzLiAqLworCQlod29yZHMgPSA3OworCQlscmgwID0gSVBTX0xSSF9CVEg7CisJCW9oZHIgPSAmcXAtPnNfaGRyLnUub3RoOworCX0KKwlpZiAod3ItPm9wY29kZSA9PSBJQl9XUl9TRU5EX1dJVEhfSU1NKSB7CisJCW9oZHItPnUudWQuaW1tX2RhdGEgPSB3ci0+aW1tX2RhdGE7CisJCXdjLmltbV9kYXRhID0gd3ItPmltbV9kYXRhOworCQlod29yZHMgKz0gMTsKKwkJYnRoMCA9IElCX09QQ09ERV9VRF9TRU5EX09OTFlfV0lUSF9JTU1FRElBVEUgPDwgMjQ7CisJfSBlbHNlIGlmICh3ci0+b3Bjb2RlID09IElCX1dSX1NFTkQpIHsKKwkJd2MuaW1tX2RhdGEgPSAwOworCQlidGgwID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWSA8PCAyNDsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCWxyaDAgfD0gYWhfYXR0ci0+c2wgPDwgNDsKKwlpZiAocXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfU01JKQorCQlscmgwIHw9IDB4RjAwMDsJLyogU2V0IFZMIChzZWUgY2guIDEzLjUuMy4xKSAqLworCXFwLT5zX2hkci5scmhbMF0gPSBjcHVfdG9fYmUxNihscmgwKTsKKwlxcC0+c19oZHIubHJoWzFdID0gY3B1X3RvX2JlMTYoYWhfYXR0ci0+ZGxpZCk7CS8qIERFU1QgTElEICovCisJcXAtPnNfaGRyLmxyaFsyXSA9IGNwdV90b19iZTE2KGh3b3JkcyArIG53b3JkcyArIFNJWkVfT0ZfQ1JDKTsKKwlsaWQgPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpOworCWlmIChsaWQpIHsKKwkJbGlkIHw9IGFoX2F0dHItPnNyY19wYXRoX2JpdHMgJgorCQkJKCgxIDw8IChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNykpIC0gMSk7CisJCXFwLT5zX2hkci5scmhbM10gPSBjcHVfdG9fYmUxNihsaWQpOworCX0gZWxzZQorCQlxcC0+c19oZHIubHJoWzNdID0gSUJfTElEX1BFUk1JU1NJVkU7CisJaWYgKHdyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCWJ0aDAgfD0gMSA8PCAyMzsKKwlidGgwIHw9IGV4dHJhX2J5dGVzIDw8IDIwOworCWJ0aDAgfD0gcXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfU01JID8gSVBTX0RFRkFVTFRfUF9LRVkgOgorCQlpcGF0aF9sYXllcl9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKKwlvaGRyLT5idGhbMF0gPSBjcHVfdG9fYmUzMihidGgwKTsKKwkvKgorCSAqIFVzZSB0aGUgbXVsdGljYXN0IFFQIGlmIHRoZSBkZXN0aW5hdGlvbiBMSUQgaXMgYSBtdWx0aWNhc3QgTElELgorCSAqLworCW9oZHItPmJ0aFsxXSA9IGFoX2F0dHItPmRsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSAmJgorCQlhaF9hdHRyLT5kbGlkICE9IElQU19QRVJNSVNTSVZFX0xJRCA/CisJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoSVBTX01VTFRJQ0FTVF9RUE4pIDoKKwkJY3B1X3RvX2JlMzIod3ItPndyLnVkLnJlbW90ZV9xcG4pOworCS8qIFhYWCBDb3VsZCBsb3NlIGEgUFNOIGNvdW50IGJ1dCBub3Qgd29ydGggbG9ja2luZyAqLworCW9oZHItPmJ0aFsyXSA9IGNwdV90b19iZTMyKHFwLT5zX25leHRfcHNuKysgJiBJUFNfUFNOX01BU0spOworCS8qCisJICogUWtleXMgd2l0aCB0aGUgaGlnaCBvcmRlciBiaXQgc2V0IG1lYW4gdXNlIHRoZQorCSAqIHFrZXkgZnJvbSB0aGUgUVAgY29udGV4dCBpbnN0ZWFkIG9mIHRoZSBXUiAoc2VlIDEwLjIuNSkuCisJICovCisJb2hkci0+dS51ZC5kZXRoWzBdID0gY3B1X3RvX2JlMzIoKGludCl3ci0+d3IudWQucmVtb3RlX3FrZXkgPCAwID8KKwkJCQkJIHFwLT5xa2V5IDogd3ItPndyLnVkLnJlbW90ZV9xa2V5KTsKKwlvaGRyLT51LnVkLmRldGhbMV0gPSBjcHVfdG9fYmUzMihxcC0+aWJxcC5xcF9udW0pOworCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIGh3b3JkcywgKHUzMiAqKSAmcXAtPnNfaGRyLAorCQkJICAgICBsZW4sICZzcykpCisJCWRldi0+bl9ub19waW9idWYrKzsKKworZG9uZToKKwkvKiBRdWV1ZSB0aGUgY29tcGxldGlvbiBzdGF0dXMgZW50cnkuICovCisJaWYgKCF0ZXN0X2JpdChJUEFUSF9TX1NJR05BTF9SRVFfV1IsICZxcC0+c19mbGFncykgfHwKKwkgICAgKHdyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TSUdOQUxFRCkpIHsKKwkJd2Mud3JfaWQgPSB3ci0+d3JfaWQ7CisJCXdjLnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CisJCXdjLnZlbmRvcl9lcnIgPSAwOworCQl3Yy5vcGNvZGUgPSBJQl9XQ19TRU5EOworCQl3Yy5ieXRlX2xlbiA9IGxlbjsKKwkJd2MucXBfbnVtID0gcXAtPmlicXAucXBfbnVtOworCQl3Yy5zcmNfcXAgPSAwOworCQl3Yy53Y19mbGFncyA9IDA7CisJCS8qIFhYWCBpbml0aWFsaXplIG90aGVyIGZpZWxkcz8gKi8KKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDApOworCX0KKwlrZnJlZShzZ19saXN0KTsKKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF91ZF9yY3YgLSByZWNlaXZlIGFuIGluY29taW5nIFVEIHBhY2tldAorICogQGRldjogdGhlIGRldmljZSB0aGUgcGFja2V0IGNhbWUgaW4gb24KKyAqIEBoZHI6IHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAaGFzX2dyaDogdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyBhIEdSSAorICogQGRhdGE6IHRoZSBwYWNrZXQgZGF0YQorICogQHRsZW46IHRoZSBwYWNrZXQgbGVuZ3RoCisgKiBAcXA6IHRoZSBRUCB0aGUgcGFja2V0IGNhbWUgb24KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3FwX3JjdigpIHRvIHByb2Nlc3MgYW4gaW5jb21pbmcgVUQgcGFja2V0CisgKiBmb3IgdGhlIGdpdmVuIFFQLgorICogQ2FsbGVkIGF0IGludGVycnVwdCBsZXZlbC4KKyAqLwordm9pZCBpcGF0aF91ZF9yY3Yoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgKmhkciwKKwkJICBpbnQgaGFzX2dyaCwgdm9pZCAqZGF0YSwgdTMyIHRsZW4sIHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHI7CisJaW50IG9wY29kZTsKKwl1MzIgaGRyc2l6ZTsKKwl1MzIgcGFkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGliX3djIHdjOworCXUzMiBxa2V5OworCXUzMiBzcmNfcXA7CisJc3RydWN0IGlwYXRoX3JxICpycTsKKwlzdHJ1Y3QgaXBhdGhfc3JxICpzcnE7CisJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKKwl1MTYgZGxpZDsKKwlpbnQgaGVhZGVyX2luX2RhdGE7CisKKwkvKiBDaGVjayBmb3IgR1JIICovCisJaWYgKCFoYXNfZ3JoKSB7CisJCW9oZHIgPSAmaGRyLT51Lm90aDsKKwkJaGRyc2l6ZSA9IDggKyAxMiArIDg7CS8qIExSSCArIEJUSCArIERFVEggKi8KKwkJcWtleSA9IGJlMzJfdG9fY3B1KG9oZHItPnUudWQuZGV0aFswXSk7CisJCXNyY19xcCA9IGJlMzJfdG9fY3B1KG9oZHItPnUudWQuZGV0aFsxXSk7CisJCWhlYWRlcl9pbl9kYXRhID0gMDsKKwl9IGVsc2UgeworCQlvaGRyID0gJmhkci0+dS5sLm90aDsKKwkJaGRyc2l6ZSA9IDggKyA0MCArIDEyICsgODsgLyogTFJIICsgR1JIICsgQlRIICsgREVUSCAqLworCQkvKgorCQkgKiBUaGUgaGVhZGVyIHdpdGggR1JIIGlzIDY4IGJ5dGVzIGFuZCB0aGUgY29yZSBkcml2ZXIgc2V0cworCQkgKiB0aGUgZWFnZXIgaGVhZGVyIGJ1ZmZlciBzaXplIHRvIDU2IGJ5dGVzIHNvIHRoZSBsYXN0IDEyCisJCSAqIGJ5dGVzIG9mIHRoZSBJQiBoZWFkZXIgaXMgaW4gdGhlIGRhdGEgYnVmZmVyLgorCQkgKi8KKwkJaGVhZGVyX2luX2RhdGEgPQorCQkJaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUoZGV2LT5kZCkgPT0gMTY7CisJCWlmIChoZWFkZXJfaW5fZGF0YSkgeworCQkJcWtleSA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopIGRhdGEpWzFdKTsKKwkJCXNyY19xcCA9IGJlMzJfdG9fY3B1KCgoX19iZTMyICopIGRhdGEpWzJdKTsKKwkJCWRhdGEgKz0gMTI7CisJCX0gZWxzZSB7CisJCQlxa2V5ID0gYmUzMl90b19jcHUob2hkci0+dS51ZC5kZXRoWzBdKTsKKwkJCXNyY19xcCA9IGJlMzJfdG9fY3B1KG9oZHItPnUudWQuZGV0aFsxXSk7CisJCX0KKwl9CisJc3JjX3FwICY9IElQU19RUE5fTUFTSzsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgcGVybWlzc2l2ZSBMSUQgaXMgb25seSB1c2VkIG9uIFFQMAorCSAqIGFuZCB0aGUgUUtFWSBtYXRjaGVzIChzZWUgOS42LjEuNC4xIGFuZCA5LjYuMS41LjEpLgorCSAqLworCWlmIChxcC0+aWJxcC5xcF9udW0pIHsKKwkJaWYgKHVubGlrZWx5KGhkci0+bHJoWzFdID09IElCX0xJRF9QRVJNSVNTSVZFIHx8CisJCQkgICAgIGhkci0+bHJoWzNdID09IElCX0xJRF9QRVJNSVNTSVZFKSkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBiYWlsOworCQl9CisJCWlmICh1bmxpa2VseShxa2V5ICE9IHFwLT5xa2V5KSkgeworCQkJLyogWFhYIE9LIHRvIGxvc2UgYSBjb3VudCBvbmNlIGluIGEgd2hpbGUuICovCisJCQlkZXYtPnFrZXlfdmlvbGF0aW9ucysrOworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBiYWlsOworCQl9CisJfSBlbHNlIGlmIChoZHItPmxyaFsxXSA9PSBJQl9MSURfUEVSTUlTU0lWRSB8fAorCQkgICBoZHItPmxyaFszXSA9PSBJQl9MSURfUEVSTUlTU0lWRSkgeworCQlzdHJ1Y3QgaWJfc21wICpzbXAgPSAoc3RydWN0IGliX3NtcCAqKSBkYXRhOworCisJCWlmIChzbXAtPm1nbXRfY2xhc3MgIT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSB7CisJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisKKwkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5LiAqLworCXBhZCA9IChiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDIwKSAmIDM7CisJaWYgKHVubGlrZWx5KHRsZW4gPCAoaGRyc2l6ZSArIHBhZCArIDQpKSkgeworCQkvKiBEcm9wIGluY29tcGxldGUgcGFja2V0cy4gKi8KKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGJhaWw7CisJfQorCXRsZW4gLT0gaGRyc2l6ZSArIHBhZCArIDQ7CisKKwkvKiBEcm9wIGludmFsaWQgTUFEIHBhY2tldHMgKHNlZSAxMy41LjMuMSkuICovCisJaWYgKHVubGlrZWx5KChxcC0+aWJxcC5xcF9udW0gPT0gMCAmJgorCQkgICAgICAodGxlbiAhPSAyNTYgfHwKKwkJICAgICAgIChiZTE2X3RvX2NwdShoZHItPmxyaFswXSkgPj4gMTIpICE9IDE1KSkgfHwKKwkJICAgICAocXAtPmlicXAucXBfbnVtID09IDEgJiYKKwkJICAgICAgKHRsZW4gIT0gMjU2IHx8CisJCSAgICAgICAoYmUxNl90b19jcHUoaGRyLT5scmhbMF0pID4+IDEyKSA9PSAxNSkpKSkgeworCQlkZXYtPm5fcGt0X2Ryb3BzKys7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKgorCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZWQgdGhlIGRhdGEgZXZlbiBpZiBub3QKKwkgKiBwcmVzZW50IG9uIHRoZSB3aXJlLgorCSAqLworCXdjLmJ5dGVfbGVuID0gdGxlbiArIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKTsKKworCS8qCisJICogVGhlIG9wY29kZSBpcyBpbiB0aGUgbG93IGJ5dGUgd2hlbiBpdHMgaW4gbmV0d29yayBvcmRlcgorCSAqICh0b3AgYnl0ZSB3aGVuIGluIGhvc3Qgb3JkZXIpLgorCSAqLworCW9wY29kZSA9IGJlMzJfdG9fY3B1KG9oZHItPmJ0aFswXSkgPj4gMjQ7CisJaWYgKHFwLT5pYnFwLnFwX251bSA+IDEgJiYKKwkgICAgb3Bjb2RlID09IElCX09QQ09ERV9VRF9TRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpIHsKKwkJaWYgKGhlYWRlcl9pbl9kYXRhKSB7CisJCQl3Yy5pbW1fZGF0YSA9ICooX19iZTMyICopIGRhdGE7CisJCQlkYXRhICs9IHNpemVvZihfX2JlMzIpOworCQl9IGVsc2UKKwkJCXdjLmltbV9kYXRhID0gb2hkci0+dS51ZC5pbW1fZGF0YTsKKwkJd2Mud2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJaGRyc2l6ZSArPSBzaXplb2YodTMyKTsKKwl9IGVsc2UgaWYgKG9wY29kZSA9PSBJQl9PUENPREVfVURfU0VORF9PTkxZKSB7CisJCXdjLmltbV9kYXRhID0gMDsKKwkJd2Mud2NfZmxhZ3MgPSAwOworCX0gZWxzZSB7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogR2V0IHRoZSBuZXh0IHdvcmsgcmVxdWVzdCBlbnRyeSB0byBmaW5kIHdoZXJlIHRvIHB1dCB0aGUgZGF0YS4KKwkgKiBOb3RlIHRoYXQgaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGFmdGVyIGNoYW5naW5nIHJxLT50YWlsCisJICogc2luY2UgaXBhdGhfcG9zdF9yZWNlaXZlKCkgd29uJ3QgZmlsbCB0aGUgZW1wdHkgc2xvdC4KKwkgKi8KKwlpZiAocXAtPmlicXAuc3JxKSB7CisJCXNycSA9IHRvX2lzcnEocXAtPmlicXAuc3JxKTsKKwkJcnEgPSAmc3JxLT5ycTsKKwl9IGVsc2UgeworCQlzcnEgPSBOVUxMOworCQlycSA9ICZxcC0+cl9ycTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJaWYgKHJxLT50YWlsID09IHJxLT5oZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJZ290byBiYWlsOworCX0KKwkvKiBTaWxlbnRseSBkcm9wIHBhY2tldHMgd2hpY2ggYXJlIHRvbyBiaWcuICovCisJd3FlID0gZ2V0X3J3cWVfcHRyKHJxLCBycS0+dGFpbCk7CisJaWYgKHdjLmJ5dGVfbGVuID4gd3FlLT5sZW5ndGgpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlnb3RvIGJhaWw7CisJfQorCXdjLndyX2lkID0gd3FlLT53cl9pZDsKKwlxcC0+cl9zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOworCXFwLT5yX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKKwlxcC0+cl9zZ2UubnVtX3NnZSA9IHdxZS0+bnVtX3NnZTsKKwlpZiAoKytycS0+dGFpbCA+PSBycS0+c2l6ZSkKKwkJcnEtPnRhaWwgPSAwOworCWlmIChzcnEgJiYgc3JxLT5pYnNycS5ldmVudF9oYW5kbGVyKSB7CisJCXUzMiBuOworCisJCWlmIChycS0+aGVhZCA8IHJxLT50YWlsKQorCQkJbiA9IHJxLT5zaXplICsgcnEtPmhlYWQgLSBycS0+dGFpbDsKKwkJZWxzZQorCQkJbiA9IHJxLT5oZWFkIC0gcnEtPnRhaWw7CisJCWlmIChuIDwgc3JxLT5saW1pdCkgeworCQkJc3RydWN0IGliX2V2ZW50IGV2OworCisJCQlzcnEtPmxpbWl0ID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCQlldi5kZXZpY2UgPSBxcC0+aWJxcC5kZXZpY2U7CisJCQlldi5lbGVtZW50LnNycSA9IHFwLT5pYnFwLnNycTsKKwkJCWV2LmV2ZW50ID0gSUJfRVZFTlRfU1JRX0xJTUlUX1JFQUNIRUQ7CisJCQlzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIoJmV2LAorCQkJCQkJIHNycS0+aWJzcnEuc3JxX2NvbnRleHQpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJaWYgKGhhc19ncmgpIHsKKwkJaXBhdGhfY29weV9zZ2UoJnFwLT5yX3NnZSwgJmhkci0+dS5sLmdyaCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGliX2dyaCkpOworCQl3Yy53Y19mbGFncyB8PSBJQl9XQ19HUkg7CisJfSBlbHNlCisJCWlwYXRoX3NraXBfc2dlKCZxcC0+cl9zZ2UsIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKSk7CisJaXBhdGhfY29weV9zZ2UoJnFwLT5yX3NnZSwgZGF0YSwKKwkJICAgICAgIHdjLmJ5dGVfbGVuIC0gc2l6ZW9mKHN0cnVjdCBpYl9ncmgpKTsKKwl3Yy5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOworCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJd2MudmVuZG9yX2VyciA9IDA7CisJd2MucXBfbnVtID0gcXAtPmlicXAucXBfbnVtOworCXdjLnNyY19xcCA9IHNyY19xcDsKKwkvKiBYWFggZG8gd2Uga25vdyB3aGljaCBwa2V5IG1hdGNoZWQ/IE9ubHkgbmVlZGVkIGZvciBHU0kuICovCisJd2MucGtleV9pbmRleCA9IDA7CisJd2Muc2xpZCA9IGJlMTZfdG9fY3B1KGhkci0+bHJoWzNdKTsKKwl3Yy5zbCA9IChiZTE2X3RvX2NwdShoZHItPmxyaFswXSkgPj4gNCkgJiAweEY7CisJZGxpZCA9IGJlMTZfdG9fY3B1KGhkci0+bHJoWzFdKTsKKwkvKgorCSAqIFNhdmUgdGhlIExNQyBsb3dlciBiaXRzIGlmIHRoZSBkZXN0aW5hdGlvbiBMSUQgaXMgYSB1bmljYXN0IExJRC4KKwkgKi8KKwl3Yy5kbGlkX3BhdGhfYml0cyA9IGRsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSA/IDAgOgorCQlkbGlkICYgKCgxIDw8IChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNykpIC0gMSk7CisJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLworCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAorCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCisJCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKworYmFpbDo7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmIwOGFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisKK3N0YXRpYyB2b2lkIF9faXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKHN0cnVjdCBwYWdlICoqcCwgc2l6ZV90IG51bV9wYWdlcywKKwkJCQkgICBpbnQgZGlydHkpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKKwkJaXBhdGhfY2RiZyhNTSwgIiVsdS8lbHUgcHV0X3BhZ2UgJXBcbiIsICh1bnNpZ25lZCBsb25nKSBpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIG51bV9wYWdlcywgcFtpXSk7CisJCWlmIChkaXJ0eSkKKwkJCXNldF9wYWdlX2RpcnR5X2xvY2socFtpXSk7CisJCXB1dF9wYWdlKHBbaV0pOworCX0KK30KKworLyogY2FsbCB3aXRoIGN1cnJlbnQtPm1tLT5tbWFwX3NlbSBoZWxkICovCitzdGF0aWMgaW50IF9fZ2V0X3VzZXJfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLCBzaXplX3QgbnVtX3BhZ2VzLAorCQkJc3RydWN0IHBhZ2UgKipwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWEpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrX2xpbWl0OworCXNpemVfdCBnb3Q7CisJaW50IHJldDsKKworI2lmIDAKKwkvKgorCSAqIFhYWCAtIGNhdXNlcyBNUEkgcHJvZ3JhbXMgdG8gZmFpbCwgaGF2ZW4ndCBoYWQgdGltZSB0byBjaGVjaworCSAqIHlldAorCSAqLworCWlmICghY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBiYWlsOworCX0KKyNlbmRpZgorCisJbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgPj4KKwkJUEFHRV9TSElGVDsKKworCWlmIChudW1fcGFnZXMgPiBsb2NrX2xpbWl0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJwaW4gJWx4IHBhZ2VzIGZyb20gdmFkZHIgJWx4XG4iLAorCQkgICAodW5zaWduZWQgbG9uZykgbnVtX3BhZ2VzLCBzdGFydF9wYWdlKTsKKworCWZvciAoZ290ID0gMDsgZ290IDwgbnVtX3BhZ2VzOyBnb3QgKz0gcmV0KSB7CisJCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkJCSAgICAgc3RhcnRfcGFnZSArIGdvdCAqIFBBR0VfU0laRSwKKwkJCQkgICAgIG51bV9wYWdlcyAtIGdvdCwgMSwgMSwKKwkJCQkgICAgIHAgKyBnb3QsIHZtYSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBiYWlsX3JlbGVhc2U7CisJfQorCisJY3VycmVudC0+bW0tPmxvY2tlZF92bSArPSBudW1fcGFnZXM7CisKKwlyZXQgPSAwOworCWdvdG8gYmFpbDsKKworYmFpbF9yZWxlYXNlOgorCV9faXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKHAsIGdvdCwgMCk7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZ2V0X3VzZXJfcGFnZXMgLSBsb2NrIHVzZXIgcGFnZXMgaW50byBtZW1vcnkKKyAqIEBzdGFydF9wYWdlOiB0aGUgc3RhcnQgcGFnZQorICogQG51bV9wYWdlczogdGhlIG51bWJlciBvZiBwYWdlcworICogQHA6IHRoZSBvdXRwdXQgcGFnZSBzdHJ1Y3R1cmVzCisgKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGdpdmVuIHN0YXJ0IHBhZ2UgKHBhZ2UgYWxpZ25lZCB1c2VyIHZpcnR1YWwKKyAqIGFkZHJlc3MpIGFuZCBwaW5zIGl0IGFuZCB0aGUgZm9sbG93aW5nIHNwZWNpZmllZCBudW1iZXIgb2YgcGFnZXMuICBGb3IKKyAqIG5vdywgbnVtX3BhZ2VzIGlzIGFsd2F5cyAxLCBidXQgdGhhdCB3aWxsIHByb2JhYmx5IGNoYW5nZSBhdCBzb21lIHBvaW50CisgKiAoYmVjYXVzZSBjYWxsZXIgaXMgZG9pbmcgZXhwZWN0ZWQgc2VuZHMgb24gYSBzaW5nbGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMKKyAqIGJ1ZmZlciwgc28gd2UgY2FuIGRvIGFsbCBwYWdlcyBhdCBvbmNlKS4KKyAqLworaW50IGlwYXRoX2dldF91c2VyX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSwgc2l6ZV90IG51bV9wYWdlcywKKwkJCSBzdHJ1Y3QgcGFnZSAqKnApCit7CisJaW50IHJldDsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlyZXQgPSBfX2dldF91c2VyX3BhZ2VzKHN0YXJ0X3BhZ2UsIG51bV9wYWdlcywgcCwgTlVMTCk7CisKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZ2V0X3VzZXJfcGFnZXNfbm9jb3B5IC0gbG9jayBhIHNpbmdsZSBwYWdlIGZvciBJL08gYW5kIG1hcmsgc2hhcmVkCisgKiBAc3RhcnRfcGFnZTogdGhlIHBhZ2UgdG8gbG9jaworICogQHA6IHRoZSBvdXRwdXQgcGFnZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gaXBhdGhfZ2V0X3VzZXJfcGFnZXMsIGJ1dCBpdCdzIGFsd2F5cyBvbmUgcGFnZSwgYW5kIHdlCisgKiBtYXJrIHRoZSBwYWdlIGFzIGxvY2tlZCBmb3IgSS9PLCBhbmQgc2hhcmVkLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUgdXNlcgorICogcHJvY2VzcyBwYWdlIHRoYXQgY29udGFpbnMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSByY3ZoZHJxIHRhaWwKKyAqIHVwZGF0ZSwgc28gd2UgbmVlZCB0byBoYXZlIHRoZSB2bWEuIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBwYWdlIGNhbiBiZQorICogdGFrZW4gYXdheSBmcm9tIHVzIG9uIGZvcmssIGV2ZW4gaWYgdGhlIGNoaWxkIG5ldmVyIHRvdWNoZXMgaXQsIGFuZCB0aGVuCisgKiB0aGUgdXNlciBwcm9jZXNzIG5ldmVyIHNlZXMgdGhlIHRhaWwgcmVnaXN0ZXIgdXBkYXRlcy4KKyAqLworaW50IGlwYXRoX2dldF91c2VyX3BhZ2VzX25vY29weSh1bnNpZ25lZCBsb25nIHBhZ2UsIHN0cnVjdCBwYWdlICoqcCkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXJldCA9IF9fZ2V0X3VzZXJfcGFnZXMocGFnZSwgMSwgcCwgJnZtYSk7CisKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKHN0cnVjdCBwYWdlICoqcCwgc2l6ZV90IG51bV9wYWdlcykKK3sKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJX19pcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMocCwgbnVtX3BhZ2VzLCAxKTsKKworCWN1cnJlbnQtPm1tLT5sb2NrZWRfdm0gLT0gbnVtX3BhZ2VzOworCisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Cit9CisKK3N0cnVjdCBpcGF0aF91c2VyX3BhZ2VzX3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOworfTsKKworc3RhdGljIHZvaWQgdXNlcl9wYWdlc19hY2NvdW50KHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgaXBhdGhfdXNlcl9wYWdlc193b3JrICp3b3JrID0gcHRyOworCisJZG93bl93cml0ZSgmd29yay0+bW0tPm1tYXBfc2VtKTsKKwl3b3JrLT5tbS0+bG9ja2VkX3ZtIC09IHdvcmstPm51bV9wYWdlczsKKwl1cF93cml0ZSgmd29yay0+bW0tPm1tYXBfc2VtKTsKKwltbXB1dCh3b3JrLT5tbSk7CisJa2ZyZWUod29yayk7Cit9CisKK3ZvaWQgaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKHN0cnVjdCBwYWdlICoqcCwgc2l6ZV90IG51bV9wYWdlcykKK3sKKwlzdHJ1Y3QgaXBhdGhfdXNlcl9wYWdlc193b3JrICp3b3JrOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCisJX19pcGF0aF9yZWxlYXNlX3VzZXJfcGFnZXMocCwgbnVtX3BhZ2VzLCAxKTsKKworCW1tID0gZ2V0X3Rhc2tfbW0oY3VycmVudCk7CisJaWYgKCFtbSkKKwkJZ290byBiYWlsOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3b3JrKQorCQlnb3RvIGJhaWxfbW07CisKKwlnb3RvIGJhaWw7CisKKwlJTklUX1dPUksoJndvcmstPndvcmssIHVzZXJfcGFnZXNfYWNjb3VudCwgd29yayk7CisJd29yay0+bW0gPSBtbTsKKwl3b3JrLT5udW1fcGFnZXMgPSBudW1fcGFnZXM7CisKK2JhaWxfbW06CisJbW1wdXQobW0pOworYmFpbDoKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZmRiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtMCwwICsxLDEyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8cmRtYS9pYl9tYWQuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3VzZXJfdmVyYnMuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorI2luY2x1ZGUgImlwc19jb21tb24uaCIKKworLyogTm90IHN0YXRpYywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBjb21waWxlciByZW1vdmluZyBpdCAqLworY29uc3QgY2hhciBpcGF0aF92ZXJic192ZXJzaW9uW10gPSAiaXBhdGhfdmVyYnMgIiBJUEFUSF9JRFNUUjsKKworc3RhdGljIHVuc2lnbmVkIGludCBpYl9pcGF0aF9xcF90YWJsZV9zaXplID0gMjUxOworbW9kdWxlX3BhcmFtX25hbWVkKHFwX3RhYmxlX3NpemUsIGliX2lwYXRoX3FwX3RhYmxlX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhxcF90YWJsZV9zaXplLCAiUVAgdGFibGUgc2l6ZSIpOworCit1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbGtleV90YWJsZV9zaXplID0gMTI7Cittb2R1bGVfcGFyYW1fbmFtZWQobGtleV90YWJsZV9zaXplLCBpYl9pcGF0aF9sa2V5X3RhYmxlX3NpemUsIHVpbnQsCisJCSAgIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhsa2V5X3RhYmxlX3NpemUsCisJCSAiTEtFWSB0YWJsZSBzaXplIGluIGJpdHMgKDJebiwgMSA8PSBuIDw9IDIzKSIpOworCit1bnNpZ25lZCBpbnQgaWJfaXBhdGhfZGVidWc7CS8qIGRlYnVnIG1hc2sgKi8KK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaWJfaXBhdGhfZGVidWcsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJWZXJicyBkZWJ1ZyBtYXNrIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBhdGhTY2FsZSA8c3VwcG9ydEBwYXRoc2NhbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQYXRoc2NhbGUgSW5maW5pUGF0aCBkcml2ZXIiKTsKKworY29uc3QgaW50IGliX2lwYXRoX3N0YXRlX29wc1tJQl9RUFNfRVJSICsgMV0gPSB7CisJW0lCX1FQU19SRVNFVF0gPSAwLAorCVtJQl9RUFNfSU5JVF0gPSBJUEFUSF9QT1NUX1JFQ1ZfT0ssCisJW0lCX1FQU19SVFJdID0gSVBBVEhfUE9TVF9SRUNWX09LIHwgSVBBVEhfUFJPQ0VTU19SRUNWX09LLAorCVtJQl9RUFNfUlRTXSA9IElQQVRIX1BPU1RfUkVDVl9PSyB8IElQQVRIX1BST0NFU1NfUkVDVl9PSyB8CisJICAgIElQQVRIX1BPU1RfU0VORF9PSyB8IElQQVRIX1BST0NFU1NfU0VORF9PSywKKwlbSUJfUVBTX1NRRF0gPSBJUEFUSF9QT1NUX1JFQ1ZfT0sgfCBJUEFUSF9QUk9DRVNTX1JFQ1ZfT0sgfAorCSAgICBJUEFUSF9QT1NUX1NFTkRfT0ssCisJW0lCX1FQU19TUUVdID0gSVBBVEhfUE9TVF9SRUNWX09LIHwgSVBBVEhfUFJPQ0VTU19SRUNWX09LLAorCVtJQl9RUFNfRVJSXSA9IDAsCit9OworCisvKgorICogVHJhbnNsYXRlIGliX3dyX29wY29kZSBpbnRvIGliX3djX29wY29kZS4KKyAqLworY29uc3QgZW51bSBpYl93Y19vcGNvZGUgaWJfaXBhdGhfd2Nfb3Bjb2RlW10gPSB7CisJW0lCX1dSX1JETUFfV1JJVEVdID0gSUJfV0NfUkRNQV9XUklURSwKKwlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0gPSBJQl9XQ19SRE1BX1dSSVRFLAorCVtJQl9XUl9TRU5EXSA9IElCX1dDX1NFTkQsCisJW0lCX1dSX1NFTkRfV0lUSF9JTU1dID0gSUJfV0NfU0VORCwKKwlbSUJfV1JfUkRNQV9SRUFEXSA9IElCX1dDX1JETUFfUkVBRCwKKwlbSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQXSA9IElCX1dDX0NPTVBfU1dBUCwKKwlbSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BRERdID0gSUJfV0NfRkVUQ0hfQURECit9OworCisvKgorICogU3lzdGVtIGltYWdlIEdVSUQuCisgKi8KK3N0YXRpYyBfX2JlNjQgc3lzX2ltYWdlX2d1aWQ7CisKKy8qKgorICogaXBhdGhfY29weV9zZ2UgLSBjb3B5IGRhdGEgdG8gU0dFIG1lbW9yeQorICogQHNzOiB0aGUgU0dFIHN0YXRlCisgKiBAZGF0YTogdGhlIGRhdGEgdG8gY29weQorICogQGxlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorICovCit2b2lkIGlwYXRoX2NvcHlfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB2b2lkICpkYXRhLCB1MzIgbGVuZ3RoKQoreworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOworCisJd2hpbGUgKGxlbmd0aCkgeworCQl1MzIgbGVuID0gc2dlLT5sZW5ndGg7CisKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IGxlbmd0aDsKKwkJbWVtY3B5KHNnZS0+dmFkZHIsIGRhdGEsIGxlbik7CisJCXNnZS0+dmFkZHIgKz0gbGVuOworCQlzZ2UtPmxlbmd0aCAtPSBsZW47CisJCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW47CisJCWlmIChzZ2UtPnNnZV9sZW5ndGggPT0gMCkgeworCQkJaWYgKC0tc3MtPm51bV9zZ2UpCisJCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOworCQl9IGVsc2UgaWYgKHNnZS0+bGVuZ3RoID09IDAgJiYgc2dlLT5tciAhPSBOVUxMKSB7CisJCQlpZiAoKytzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJCWJyZWFrOworCQkJCXNnZS0+biA9IDA7CisJCQl9CisJCQlzZ2UtPnZhZGRyID0KKwkJCQlzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyOworCQkJc2dlLT5sZW5ndGggPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoOworCQl9CisJCWRhdGEgKz0gbGVuOworCQlsZW5ndGggLT0gbGVuOworCX0KK30KKworLyoqCisgKiBpcGF0aF9za2lwX3NnZSAtIHNraXAgb3ZlciBTR0UgbWVtb3J5IC0gWFhYIGFsbW9zdCBkdXAgb2YgcHJldiBmdW5jCisgKiBAc3M6IHRoZSBTR0Ugc3RhdGUKKyAqIEBsZW5ndGg6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcAorICovCit2b2lkIGlwYXRoX3NraXBfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuZ3RoKQoreworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOworCisJd2hpbGUgKGxlbmd0aCA+IHNnZS0+c2dlX2xlbmd0aCkgeworCQlsZW5ndGggLT0gc2dlLT5zZ2VfbGVuZ3RoOworCQlzcy0+c2dlID0gKnNzLT5zZ19saXN0Kys7CisJfQorCXdoaWxlIChsZW5ndGgpIHsKKwkJdTMyIGxlbiA9IHNnZS0+bGVuZ3RoOworCisJCUJVR19PTihsZW4gPT0gMCk7CisJCWlmIChsZW4gPiBsZW5ndGgpCisJCQlsZW4gPSBsZW5ndGg7CisJCXNnZS0+dmFkZHIgKz0gbGVuOworCQlzZ2UtPmxlbmd0aCAtPSBsZW47CisJCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW47CisJCWlmIChzZ2UtPnNnZV9sZW5ndGggPT0gMCkgeworCQkJaWYgKC0tc3MtPm51bV9zZ2UpCisJCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOworCQl9IGVsc2UgaWYgKHNnZS0+bGVuZ3RoID09IDAgJiYgc2dlLT5tciAhPSBOVUxMKSB7CisJCQlpZiAoKytzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJCWJyZWFrOworCQkJCXNnZS0+biA9IDA7CisJCQl9CisJCQlzZ2UtPnZhZGRyID0KKwkJCQlzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyOworCQkJc2dlLT5sZW5ndGggPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoOworCQl9CisJCWxlbmd0aCAtPSBsZW47CisJfQorfQorCisvKioKKyAqIGlwYXRoX3Bvc3Rfc2VuZCAtIHBvc3QgYSBzZW5kIG9uIGEgUVAKKyAqIEBpYnFwOiB0aGUgUVAgdG8gcG9zdCB0aGUgc2VuZCBvbgorICogQHdyOiB0aGUgbGlzdCBvZiB3b3JrIHJlcXVlc3RzIHRvIHBvc3QKKyAqIEBiYWRfd3I6IHRoZSBmaXJzdCBiYWQgV1IgaXMgcHV0IGhlcmUKKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworc3RhdGljIGludCBpcGF0aF9wb3N0X3NlbmQoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsCisJCQkgICBzdHJ1Y3QgaWJfc2VuZF93ciAqKmJhZF93cikKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCWludCBlcnIgPSAwOworCisJLyogQ2hlY2sgdGhhdCBzdGF0ZSBpcyBPSyB0byBwb3N0IHNlbmQuICovCisJaWYgKCEoaWJfaXBhdGhfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBJUEFUSF9QT1NUX1NFTkRfT0spKSB7CisJCSpiYWRfd3IgPSB3cjsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWZvciAoOyB3cjsgd3IgPSB3ci0+bmV4dCkgeworCQlzd2l0Y2ggKHFwLT5pYnFwLnFwX3R5cGUpIHsKKwkJY2FzZSBJQl9RUFRfVUM6CisJCWNhc2UgSUJfUVBUX1JDOgorCQkJZXJyID0gaXBhdGhfcG9zdF9yY19zZW5kKHFwLCB3cik7CisJCQlicmVhazsKKworCQljYXNlIElCX1FQVF9TTUk6CisJCWNhc2UgSUJfUVBUX0dTSToKKwkJY2FzZSBJQl9RUFRfVUQ6CisJCQllcnIgPSBpcGF0aF9wb3N0X3VkX3NlbmQocXAsIHdyKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWlmIChlcnIpIHsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCWJyZWFrOworCQl9CisJfQorCitiYWlsOgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaXBhdGhfcG9zdF9yZWNlaXZlIC0gcG9zdCBhIHJlY2VpdmUgb24gYSBRUAorICogQGlicXA6IHRoZSBRUCB0byBwb3N0IHRoZSByZWNlaXZlIG9uCisgKiBAd3I6IHRoZSBXUiB0byBwb3N0CisgKiBAYmFkX3dyOiB0aGUgZmlyc3QgYmFkIFdSIGlzIHB1dCBoZXJlCisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfcG9zdF9yZWNlaXZlKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3JlY3Zfd3IgKndyLAorCQkJICAgICAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfd3IpCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IHRvX2lxcChpYnFwKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBDaGVjayB0aGF0IHN0YXRlIGlzIE9LIHRvIHBvc3QgcmVjZWl2ZS4gKi8KKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BPU1RfUkVDVl9PSykpIHsKKwkJKmJhZF93ciA9IHdyOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJZm9yICg7IHdyOyB3ciA9IHdyLT5uZXh0KSB7CisJCXN0cnVjdCBpcGF0aF9yd3FlICp3cWU7CisJCXUzMiBuZXh0OworCQlpbnQgaSwgajsKKworCQlpZiAod3ItPm51bV9zZ2UgPiBxcC0+cl9ycS5tYXhfc2dlKSB7CisJCQkqYmFkX3dyID0gd3I7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBiYWlsOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJbmV4dCA9IHFwLT5yX3JxLmhlYWQgKyAxOworCQlpZiAobmV4dCA+PSBxcC0+cl9ycS5zaXplKQorCQkJbmV4dCA9IDA7CisJCWlmIChuZXh0ID09IHFwLT5yX3JxLnRhaWwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQl3cWUgPSBnZXRfcndxZV9wdHIoJnFwLT5yX3JxLCBxcC0+cl9ycS5oZWFkKTsKKwkJd3FlLT53cl9pZCA9IHdyLT53cl9pZDsKKwkJd3FlLT5zZ19saXN0WzBdLm1yID0gTlVMTDsKKwkJd3FlLT5zZ19saXN0WzBdLnZhZGRyID0gTlVMTDsKKwkJd3FlLT5zZ19saXN0WzBdLmxlbmd0aCA9IDA7CisJCXdxZS0+c2dfbGlzdFswXS5zZ2VfbGVuZ3RoID0gMDsKKwkJd3FlLT5sZW5ndGggPSAwOworCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHdyLT5udW1fc2dlOyBpKyspIHsKKwkJCS8qIENoZWNrIExLRVkgKi8KKwkJCWlmICh0b19pcGQocXAtPmlicXAucGQpLT51c2VyICYmCisJCQkgICAgd3ItPnNnX2xpc3RbaV0ubGtleSA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJKmJhZF93ciA9IHdyOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJaWYgKHdyLT5zZ19saXN0W2ldLmxlbmd0aCA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpcGF0aF9sa2V5X29rKAorCQkJCSAgICAmdG9faWRldihxcC0+aWJxcC5kZXZpY2UpLT5sa190YWJsZSwKKwkJCQkgICAgJndxZS0+c2dfbGlzdFtqXSwgJndyLT5zZ19saXN0W2ldLAorCQkJCSAgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJKmJhZF93ciA9IHdyOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBiYWlsOworCQkJfQorCQkJd3FlLT5sZW5ndGggKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOworCQkJaisrOworCQl9CisJCXdxZS0+bnVtX3NnZSA9IGo7CisJCXFwLT5yX3JxLmhlYWQgPSBuZXh0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJfQorCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9xcF9yY3YgLSBwcm9jZXNzaW5nIGFuIGluY29taW5nIHBhY2tldCBvbiBhIFFQCisgKiBAZGV2OiB0aGUgZGV2aWNlIHRoZSBwYWNrZXQgY2FtZSBvbgorICogQGhkcjogdGhlIHBhY2tldCBoZWFkZXIKKyAqIEBoYXNfZ3JoOiB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIGEgR1JICisgKiBAZGF0YTogdGhlIHBhY2tldCBkYXRhCisgKiBAdGxlbjogdGhlIHBhY2tldCBsZW5ndGgKKyAqIEBxcDogdGhlIFFQIHRoZSBwYWNrZXQgY2FtZSBvbgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfaWJfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBwYWNrZXQKKyAqIGZvciB0aGUgZ2l2ZW4gUVAuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9xcF9yY3Yoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsCisJCQkgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLCBpbnQgaGFzX2dyaCwKKwkJCSB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCkKK3sKKwkvKiBDaGVjayBmb3IgdmFsaWQgcmVjZWl2ZSBzdGF0ZS4gKi8KKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BST0NFU1NfUkVDVl9PSykpIHsKKwkJZGV2LT5uX3BrdF9kcm9wcysrOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChxcC0+aWJxcC5xcF90eXBlKSB7CisJY2FzZSBJQl9RUFRfU01JOgorCWNhc2UgSUJfUVBUX0dTSToKKwljYXNlIElCX1FQVF9VRDoKKwkJaXBhdGhfdWRfcmN2KGRldiwgaGRyLCBoYXNfZ3JoLCBkYXRhLCB0bGVuLCBxcCk7CisJCWJyZWFrOworCisJY2FzZSBJQl9RUFRfUkM6CisJCWlwYXRoX3JjX3JjdihkZXYsIGhkciwgaGFzX2dyaCwgZGF0YSwgdGxlbiwgcXApOworCQlicmVhazsKKworCWNhc2UgSUJfUVBUX1VDOgorCQlpcGF0aF91Y19yY3YoZGV2LCBoZHIsIGhhc19ncmgsIGRhdGEsIHRsZW4sIHFwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfaWJfcmN2IC0gcHJvY2VzcyBhbmQgaW5jb21pbmcgcGFja2V0CisgKiBAYXJnOiB0aGUgZGV2aWNlIHBvaW50ZXIKKyAqIEByaGRyOiB0aGUgaGVhZGVyIG9mIHRoZSBwYWNrZXQKKyAqIEBkYXRhOiB0aGUgcGFja2V0IGRhdGEKKyAqIEB0bGVuOiB0aGUgcGFja2V0IGxlbmd0aAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfa3JlY2VpdmUoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIHBhY2tldCBhdAorICogaW50ZXJydXB0IGxldmVsLiBUbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciArIGRhdGEgKyBDUkMgaW4gYnl0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoX2liX3Jjdih2b2lkICphcmcsIHZvaWQgKnJoZHIsIHZvaWQgKmRhdGEsIHUzMiB0bGVuKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKSBhcmc7CisJc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyID0gcmhkcjsKKwlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwOworCXUzMiBxcF9udW07CisJaW50IGxuaDsKKwl1OCBvcGNvZGU7CisJdTE2IGxpZDsKKworCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCkpCisJCWdvdG8gYmFpbDsKKworCWlmICh1bmxpa2VseSh0bGVuIDwgMjQpKSB7CS8qIExSSCtCVEgrQ1JDICovCisJCWRldi0+cmN2X2Vycm9ycysrOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogQ2hlY2sgZm9yIGEgdmFsaWQgZGVzdGluYXRpb24gTElEIChzZWUgY2guIDcuMTEuMSkuICovCisJbGlkID0gYmUxNl90b19jcHUoaGRyLT5scmhbMV0pOworCWlmIChsaWQgPCBJUFNfTVVMVElDQVNUX0xJRF9CQVNFKSB7CisJCWxpZCAmPSB+KCgxIDw8IChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNykpIC0gMSk7CisJCWlmICh1bmxpa2VseShsaWQgIT0gaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSkpIHsKKwkJCWRldi0+cmN2X2Vycm9ycysrOworCQkJZ290byBiYWlsOworCQl9CisJfQorCisJLyogQ2hlY2sgZm9yIEdSSCAqLworCWxuaCA9IGJlMTZfdG9fY3B1KGhkci0+bHJoWzBdKSAmIDM7CisJaWYgKGxuaCA9PSBJUFNfTFJIX0JUSCkKKwkJb2hkciA9ICZoZHItPnUub3RoOworCWVsc2UgaWYgKGxuaCA9PSBJUFNfTFJIX0dSSCkKKwkJb2hkciA9ICZoZHItPnUubC5vdGg7CisJZWxzZSB7CisJCWRldi0+cmN2X2Vycm9ycysrOworCQlnb3RvIGJhaWw7CisJfQorCisJb3Bjb2RlID0gYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyNDsKKwlkZXYtPm9wc3RhdHNbb3Bjb2RlXS5uX2J5dGVzICs9IHRsZW47CisJZGV2LT5vcHN0YXRzW29wY29kZV0ubl9wYWNrZXRzKys7CisKKwkvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIFFQIG51bWJlci4gKi8KKwlxcF9udW0gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMV0pICYgSVBTX1FQTl9NQVNLOworCWlmIChxcF9udW0gPT0gSVBTX01VTFRJQ0FTVF9RUE4pIHsKKwkJc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdDsKKwkJc3RydWN0IGlwYXRoX21jYXN0X3FwICpwOworCisJCW1jYXN0ID0gaXBhdGhfbWNhc3RfZmluZCgmaGRyLT51LmwuZ3JoLmRnaWQpOworCQlpZiAobWNhc3QgPT0gTlVMTCkgeworCQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkJZ290byBiYWlsOworCQl9CisJCWRldi0+bl9tdWx0aWNhc3RfcmN2Kys7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsICZtY2FzdC0+cXBfbGlzdCwgbGlzdCkKKwkJCWlwYXRoX3FwX3JjdihkZXYsIGhkciwgbG5oID09IElQU19MUkhfR1JILCBkYXRhLAorCQkJCSAgICAgdGxlbiwgcC0+cXApOworCQkvKgorCQkgKiBOb3RpZnkgaXBhdGhfbXVsdGljYXN0X2RldGFjaCgpIGlmIGl0IGlzIHdhaXRpbmcgZm9yIHVzCisJCSAqIHRvIGZpbmlzaC4KKwkJICovCisJCWlmIChhdG9taWNfZGVjX3JldHVybigmbWNhc3QtPnJlZmNvdW50KSA8PSAxKQorCQkJd2FrZV91cCgmbWNhc3QtPndhaXQpOworCX0gZWxzZSB7CisJCXFwID0gaXBhdGhfbG9va3VwX3FwbigmZGV2LT5xcF90YWJsZSwgcXBfbnVtKTsKKwkJaWYgKHFwKSB7CisJCQlkZXYtPm5fdW5pY2FzdF9yY3YrKzsKKwkJCWlwYXRoX3FwX3JjdihkZXYsIGhkciwgbG5oID09IElQU19MUkhfR1JILCBkYXRhLAorCQkJCSAgICAgdGxlbiwgcXApOworCQkJLyoKKwkJCSAqIE5vdGlmeSBpcGF0aF9kZXN0cm95X3FwKCkgaWYgaXQgaXMgd2FpdGluZworCQkJICogZm9yIHVzIHRvIGZpbmlzaC4KKwkJCSAqLworCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkpCisJCQkJd2FrZV91cCgmcXAtPndhaXQpOworCQl9IGVsc2UKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwl9CisKK2JhaWw6OworfQorCisvKioKKyAqIGlwYXRoX2liX3RpbWVyIC0gdmVyYnMgdGltZXIKKyAqIEBhcmc6IHRoZSBkZXZpY2UgcG9pbnRlcgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfZG9fcmN2X3RpbWVyKCkgYXQgaW50ZXJydXB0IGxldmVsIHRvIGNoZWNrIGZvcgorICogUVBzIHdoaWNoIG5lZWQgcmV0cmFuc21pdHMgYW5kIHRvIGNvbGxlY3QgcGVyZm9ybWFuY2UgbnVtYmVycy4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfaWJfdGltZXIodm9pZCAqYXJnKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKSBhcmc7CisJc3RydWN0IGlwYXRoX3FwICpyZXNlbmQgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmxhc3Q7CisJc3RydWN0IGlwYXRoX3FwICpxcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwkvKiBTdGFydCBmaWxsaW5nIHRoZSBuZXh0IHBlbmRpbmcgcXVldWUuICovCisJaWYgKCsrZGV2LT5wZW5kaW5nX2luZGV4ID49IEFSUkFZX1NJWkUoZGV2LT5wZW5kaW5nKSkKKwkJZGV2LT5wZW5kaW5nX2luZGV4ID0gMDsKKwkvKiBTYXZlIGFueSByZXF1ZXN0cyBzdGlsbCBpbiB0aGUgbmV3IHF1ZXVlLCB0aGV5IGhhdmUgdGltZWQgb3V0LiAqLworCWxhc3QgPSAmZGV2LT5wZW5kaW5nW2Rldi0+cGVuZGluZ19pbmRleF07CisJd2hpbGUgKCFsaXN0X2VtcHR5KGxhc3QpKSB7CisJCXFwID0gbGlzdF9lbnRyeShsYXN0LT5uZXh0LCBzdHJ1Y3QgaXBhdGhfcXAsIHRpbWVyd2FpdCk7CisJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOworCQlxcC0+dGltZXJfbmV4dCA9IHJlc2VuZDsKKwkJcmVzZW5kID0gcXA7CisJCWF0b21pY19pbmMoJnFwLT5yZWZjb3VudCk7CisJfQorCWxhc3QgPSAmZGV2LT5ybnJ3YWl0OworCWlmICghbGlzdF9lbXB0eShsYXN0KSkgeworCQlxcCA9IGxpc3RfZW50cnkobGFzdC0+bmV4dCwgc3RydWN0IGlwYXRoX3FwLCB0aW1lcndhaXQpOworCQlpZiAoLS1xcC0+c19ybnJfdGltZW91dCA9PSAwKSB7CisJCQlkbyB7CisJCQkJbGlzdF9kZWxfaW5pdCgmcXAtPnRpbWVyd2FpdCk7CisJCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcXAtPnNfdGFzayk7CisJCQkJaWYgKGxpc3RfZW1wdHkobGFzdCkpCisJCQkJCWJyZWFrOworCQkJCXFwID0gbGlzdF9lbnRyeShsYXN0LT5uZXh0LCBzdHJ1Y3QgaXBhdGhfcXAsCisJCQkJCQl0aW1lcndhaXQpOworCQkJfSB3aGlsZSAocXAtPnNfcm5yX3RpbWVvdXQgPT0gMCk7CisJCX0KKwl9CisJLyoKKwkgKiBXZSBzaG91bGQgb25seSBiZSBpbiB0aGUgc3RhcnRlZCBzdGF0ZSBpZiBwbWFfc2FtcGxlX3N0YXJ0ICE9IDAKKwkgKi8KKwlpZiAoZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyA9PSBJQl9QTUFfU0FNUExFX1NUQVRVU19TVEFSVEVEICYmCisJICAgIC0tZGV2LT5wbWFfc2FtcGxlX3N0YXJ0ID09IDApIHsKKwkJZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyA9IElCX1BNQV9TQU1QTEVfU1RBVFVTX1JVTk5JTkc7CisJCWlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKGRldi0+ZGQsICZkZXYtPmlwYXRoX3N3b3JkLAorCQkJCQkgICAgICAmZGV2LT5pcGF0aF9yd29yZCwKKwkJCQkJICAgICAgJmRldi0+aXBhdGhfc3BrdHMsCisJCQkJCSAgICAgICZkZXYtPmlwYXRoX3Jwa3RzLAorCQkJCQkgICAgICAmZGV2LT5pcGF0aF94bWl0X3dhaXQpOworCX0KKwlpZiAoZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyA9PSBJQl9QTUFfU0FNUExFX1NUQVRVU19SVU5OSU5HKSB7CisJCWlmIChkZXYtPnBtYV9zYW1wbGVfaW50ZXJ2YWwgPT0gMCkgeworCQkJdTY0IHRhLCB0YiwgdGMsIHRkLCB0ZTsKKworCQkJZGV2LT5wbWFfc2FtcGxlX3N0YXR1cyA9IElCX1BNQV9TQU1QTEVfU1RBVFVTX0RPTkU7CisJCQlpcGF0aF9sYXllcl9zbmFwc2hvdF9jb3VudGVycyhkZXYtPmRkLCAmdGEsICZ0YiwKKwkJCQkJCSAgICAgICZ0YywgJnRkLCAmdGUpOworCisJCQlkZXYtPmlwYXRoX3N3b3JkID0gdGEgLSBkZXYtPmlwYXRoX3N3b3JkOworCQkJZGV2LT5pcGF0aF9yd29yZCA9IHRiIC0gZGV2LT5pcGF0aF9yd29yZDsKKwkJCWRldi0+aXBhdGhfc3BrdHMgPSB0YyAtIGRldi0+aXBhdGhfc3BrdHM7CisJCQlkZXYtPmlwYXRoX3Jwa3RzID0gdGQgLSBkZXYtPmlwYXRoX3Jwa3RzOworCQkJZGV2LT5pcGF0aF94bWl0X3dhaXQgPSB0ZSAtIGRldi0+aXBhdGhfeG1pdF93YWl0OworCQl9CisJCWVsc2UKKwkJCWRldi0+cG1hX3NhbXBsZV9pbnRlcnZhbC0tOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBlbmRpbmdfbG9jaywgZmxhZ3MpOworCisJLyogWFhYIFdoYXQgaWYgdGltZXIgZmlyZXMgYWdhaW4gd2hpbGUgdGhpcyBpcyBydW5uaW5nPyAqLworCWZvciAocXAgPSByZXNlbmQ7IHFwICE9IE5VTEw7IHFwID0gcXAtPnRpbWVyX25leHQpIHsKKwkJc3RydWN0IGliX3djIHdjOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJCWlmIChxcC0+c19sYXN0ICE9IHFwLT5zX3RhaWwgJiYgcXAtPnN0YXRlID09IElCX1FQU19SVFMpIHsKKwkJCWRldi0+bl90aW1lb3V0cysrOworCQkJaXBhdGhfcmVzdGFydF9yYyhxcCwgcXAtPnNfbGFzdF9wc24gKyAxLCAmd2MpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKworCQkvKiBOb3RpZnkgaXBhdGhfZGVzdHJveV9xcCgpIGlmIGl0IGlzIHdhaXRpbmcuICovCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpKQorCQkJd2FrZV91cCgmcXAtPndhaXQpOworCX0KK30KKworLyoqCisgKiBpcGF0aF9pYl9waW9idWZhdmFpbCAtIGNhbGxiYWNrIHdoZW4gYSBQSU8gYnVmZmVyIGlzIGF2YWlsYWJsZQorICogQGFyZzogdGhlIGRldmljZSBwb2ludGVyCisgKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9pbnRyKCkgYXQgaW50ZXJydXB0IGxldmVsIHdoZW4gYSBQSU8gYnVmZmVyIGlzCisgKiBhdmFpbGFibGUgYWZ0ZXIgaXBhdGhfdmVyYnNfc2VuZCgpIHJldHVybmVkIGFuIGVycm9yIHRoYXQgbm8gYnVmZmVycyB3ZXJlCisgKiBhdmFpbGFibGUuICBSZXR1cm4gMSBpZiB3ZSBjb25zdW1lZCBhbGwgdGhlIFBJTyBidWZmZXJzIGFuZCB3ZSBzdGlsbCBoYXZlCisgKiBRUHMgd2FpdGluZyBmb3IgYnVmZmVycyAoZm9yIG5vdywganVzdCBkbyBhIHRhc2tsZXRfaGlfc2NoZWR1bGUgYW5kCisgKiByZXR1cm4gemVybykuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfaWJfcGlvYnVmYXZhaWwodm9pZCAqYXJnKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKSBhcmc7CisJc3RydWN0IGlwYXRoX3FwICpxcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlnb3RvIGJhaWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+cGlvd2FpdCkpIHsKKwkJcXAgPSBsaXN0X2VudHJ5KGRldi0+cGlvd2FpdC5uZXh0LCBzdHJ1Y3QgaXBhdGhfcXAsCisJCQkJcGlvd2FpdCk7CisJCWxpc3RfZGVsX2luaXQoJnFwLT5waW93YWl0KTsKKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmcXAtPnNfdGFzayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisKK2JhaWw6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfcXVlcnlfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJICAgICAgc3RydWN0IGliX2RldmljZV9hdHRyICpwcm9wcykKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCXUzMiB2ZW5kb3IsIGJvYXJkcmV2LCBtYWpyZXYsIG1pbnJldjsKKworCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKCpwcm9wcykpOworCisJcHJvcHMtPmRldmljZV9jYXBfZmxhZ3MgPSBJQl9ERVZJQ0VfQkFEX1BLRVlfQ05UUiB8CisJCUlCX0RFVklDRV9CQURfUUtFWV9DTlRSIHwgSUJfREVWSUNFX1NIVVRET1dOX1BPUlQgfAorCQlJQl9ERVZJQ0VfU1lTX0lNQUdFX0dVSUQ7CisJaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKGRldi0+ZGQsICZ2ZW5kb3IsICZib2FyZHJldiwKKwkJCQkgJm1hanJldiwgJm1pbnJldik7CisJcHJvcHMtPnZlbmRvcl9pZCA9IHZlbmRvcjsKKwlwcm9wcy0+dmVuZG9yX3BhcnRfaWQgPSBib2FyZHJldjsKKwlwcm9wcy0+aHdfdmVyID0gYm9hcmRyZXYgPDwgMTYgfCBtYWpyZXYgPDwgOCB8IG1pbnJldjsKKworCXByb3BzLT5zeXNfaW1hZ2VfZ3VpZCA9IGRldi0+c3lzX2ltYWdlX2d1aWQ7CisKKwlwcm9wcy0+bWF4X21yX3NpemUgPSB+MHVsbDsKKwlwcm9wcy0+bWF4X3FwID0gMHhmZmZmOworCXByb3BzLT5tYXhfcXBfd3IgPSAweGZmZmY7CisJcHJvcHMtPm1heF9zZ2UgPSAyNTU7CisJcHJvcHMtPm1heF9jcSA9IDB4ZmZmZjsKKwlwcm9wcy0+bWF4X2NxZSA9IDB4ZmZmZjsKKwlwcm9wcy0+bWF4X21yID0gMHhmZmZmOworCXByb3BzLT5tYXhfcGQgPSAweGZmZmY7CisJcHJvcHMtPm1heF9xcF9yZF9hdG9tID0gMTsKKwlwcm9wcy0+bWF4X3FwX2luaXRfcmRfYXRvbSA9IDE7CisJLyogcHJvcHMtPm1heF9yZXNfcmRfYXRvbSAqLworCXByb3BzLT5tYXhfc3JxID0gMHhmZmZmOworCXByb3BzLT5tYXhfc3JxX3dyID0gMHhmZmZmOworCXByb3BzLT5tYXhfc3JxX3NnZSA9IDI1NTsKKwkvKiBwcm9wcy0+bG9jYWxfY2FfYWNrX2RlbGF5ICovCisJcHJvcHMtPmF0b21pY19jYXAgPSBJQl9BVE9NSUNfSENBOworCXByb3BzLT5tYXhfcGtleXMgPSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpOworCXByb3BzLT5tYXhfbWNhc3RfZ3JwID0gMHhmZmZmOworCXByb3BzLT5tYXhfbWNhc3RfcXBfYXR0YWNoID0gMHhmZmZmOworCXByb3BzLT5tYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoID0gcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggKgorCQlwcm9wcy0+bWF4X21jYXN0X2dycDsKKworCXJldHVybiAwOworfQorCitjb25zdCB1OCBpcGF0aF9jdnRfcGh5c3BvcnRzdGF0ZVsxNl0gPSB7CisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9ESVNBQkxFRF0gPSAzLAorCVtJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQXSA9IDUsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMQUNUSVZFXSA9IDIsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMUVVJRVRdID0gMiwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1NMRUVQREVMQVldID0gMSwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1NMRUVQUVVJRVRdID0gMSwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR0RFQk9VTkNFXSA9IDQsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdSQ1ZGQ0ZHXSA9IDQsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdXQUlUUk1UXSA9IDQsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdJRExFXSA9IDQsCisJW0lORklOSVBBVEhfSUJDU19MVF9TVEFURV9SRUNPVkVSUkVUUkFJTl0gPSA2LAorCVtJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUkVDT1ZFUldBSVRSTVRdID0gNiwKKwlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJJRExFXSA9IDYsCit9OworCitzdGF0aWMgaW50IGlwYXRoX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkgICAgdTggcG9ydCwgc3RydWN0IGliX3BvcnRfYXR0ciAqcHJvcHMpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKKwllbnVtIGliX210dSBtdHU7CisJdTE2IGxpZCA9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCk7CisJdTY0IGliY3N0YXQ7CisKKwltZW1zZXQocHJvcHMsIDAsIHNpemVvZigqcHJvcHMpKTsKKwlwcm9wcy0+bGlkID0gbGlkID8gbGlkIDogX19jb25zdGFudF9iZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CisJcHJvcHMtPmxtYyA9IGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3OworCXByb3BzLT5zbV9saWQgPSBkZXYtPnNtX2xpZDsKKwlwcm9wcy0+c21fc2wgPSBkZXYtPnNtX3NsOworCWliY3N0YXQgPSBpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoZGV2LT5kZCk7CisJcHJvcHMtPnN0YXRlID0gKChpYmNzdGF0ID4+IDQpICYgMHgzKSArIDE7CisJLyogU2VlIHBoeXNfc3RhdGVfc2hvdygpICovCisJcHJvcHMtPnBoeXNfc3RhdGUgPSBpcGF0aF9jdnRfcGh5c3BvcnRzdGF0ZVsKKwkJaXBhdGhfbGF5ZXJfZ2V0X2xhc3RpYmNzdGF0KGRldi0+ZGQpICYgMHhmXTsKKwlwcm9wcy0+cG9ydF9jYXBfZmxhZ3MgPSBkZXYtPnBvcnRfY2FwX2ZsYWdzOworCXByb3BzLT5naWRfdGJsX2xlbiA9IDE7CisJcHJvcHMtPm1heF9tc2dfc3ogPSA0MDk2OworCXByb3BzLT5wa2V5X3RibF9sZW4gPSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpOworCXByb3BzLT5iYWRfcGtleV9jbnRyID0gaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoZGV2LT5kZCkgLQorCQlkZXYtPm5fcGtleV92aW9sYXRpb25zOworCXByb3BzLT5xa2V5X3Zpb2xfY250ciA9IGRldi0+cWtleV92aW9sYXRpb25zOworCXByb3BzLT5hY3RpdmVfd2lkdGggPSBJQl9XSURUSF80WDsKKwkvKiBTZWUgcmF0ZV9zaG93KCkgKi8KKwlwcm9wcy0+YWN0aXZlX3NwZWVkID0gMTsJLyogUmVndWxhciAxME1icyBzcGVlZC4gKi8KKwlwcm9wcy0+bWF4X3ZsX251bSA9IDE7CQkvKiBWTENhcCA9IFZMMCAqLworCXByb3BzLT5pbml0X3R5cGVfcmVwbHkgPSAwOworCisJcHJvcHMtPm1heF9tdHUgPSBJQl9NVFVfNDA5NjsKKwlzd2l0Y2ggKGlwYXRoX2xheWVyX2dldF9pYm10dShkZXYtPmRkKSkgeworCWNhc2UgNDA5NjoKKwkJbXR1ID0gSUJfTVRVXzQwOTY7CisJCWJyZWFrOworCWNhc2UgMjA0ODoKKwkJbXR1ID0gSUJfTVRVXzIwNDg7CisJCWJyZWFrOworCWNhc2UgMTAyNDoKKwkJbXR1ID0gSUJfTVRVXzEwMjQ7CisJCWJyZWFrOworCWNhc2UgNTEyOgorCQltdHUgPSBJQl9NVFVfNTEyOworCQlicmVhazsKKwljYXNlIDI1NjoKKwkJbXR1ID0gSUJfTVRVXzI1NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXR1ID0gSUJfTVRVXzIwNDg7CisJfQorCXByb3BzLT5hY3RpdmVfbXR1ID0gbXR1OworCXByb3BzLT5zdWJuZXRfdGltZW91dCA9IGRldi0+c3VibmV0X3RpbWVvdXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcGF0aF9tb2RpZnlfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKKwkJCSAgICAgICBpbnQgZGV2aWNlX21vZGlmeV9tYXNrLAorCQkJICAgICAgIHN0cnVjdCBpYl9kZXZpY2VfbW9kaWZ5ICpkZXZpY2VfbW9kaWZ5KQoreworCWludCByZXQ7CisKKwlpZiAoZGV2aWNlX21vZGlmeV9tYXNrICYgfihJQl9ERVZJQ0VfTU9ESUZZX1NZU19JTUFHRV9HVUlEIHwKKwkJCQkgICBJQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQykpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoZGV2aWNlX21vZGlmeV9tYXNrICYgSUJfREVWSUNFX01PRElGWV9OT0RFX0RFU0MpCisJCW1lbWNweShkZXZpY2UtPm5vZGVfZGVzYywgZGV2aWNlX21vZGlmeS0+bm9kZV9kZXNjLCA2NCk7CisKKwlpZiAoZGV2aWNlX21vZGlmeV9tYXNrICYgSUJfREVWSUNFX01PRElGWV9TWVNfSU1BR0VfR1VJRCkKKwkJdG9faWRldihkZXZpY2UpLT5zeXNfaW1hZ2VfZ3VpZCA9CisJCQljcHVfdG9fYmU2NChkZXZpY2VfbW9kaWZ5LT5zeXNfaW1hZ2VfZ3VpZCk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfbW9kaWZ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkgICAgIHU4IHBvcnQsIGludCBwb3J0X21vZGlmeV9tYXNrLAorCQkJICAgICBzdHJ1Y3QgaWJfcG9ydF9tb2RpZnkgKnByb3BzKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisKKwlkZXYtPnBvcnRfY2FwX2ZsYWdzIHw9IHByb3BzLT5zZXRfcG9ydF9jYXBfbWFzazsKKwlkZXYtPnBvcnRfY2FwX2ZsYWdzICY9IH5wcm9wcy0+Y2xyX3BvcnRfY2FwX21hc2s7CisJaWYgKHBvcnRfbW9kaWZ5X21hc2sgJiBJQl9QT1JUX1NIVVRET1dOKQorCQlpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktET1dOKTsKKwlpZiAocG9ydF9tb2RpZnlfbWFzayAmIElCX1BPUlRfUkVTRVRfUUtFWV9DTlRSKQorCQlkZXYtPnFrZXlfdmlvbGF0aW9ucyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfcXVlcnlfZ2lkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LAorCQkJICAgaW50IGluZGV4LCB1bmlvbiBpYl9naWQgKmdpZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOworCWludCByZXQ7CisKKwlpZiAoaW5kZXggPj0gMSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCWdpZC0+Z2xvYmFsLnN1Ym5ldF9wcmVmaXggPSBkZXYtPmdpZF9wcmVmaXg7CisJZ2lkLT5nbG9iYWwuaW50ZXJmYWNlX2lkID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGV2LT5kZCk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfcGQgKmlwYXRoX2FsbG9jX3BkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJCSAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJICAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IGlwYXRoX3BkICpwZDsKKwlzdHJ1Y3QgaWJfcGQgKnJldDsKKworCXBkID0ga21hbGxvYyhzaXplb2YgKnBkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBpYl9hbGxvY19wZCgpIHdpbGwgaW5pdGlhbGl6ZSBwZC0+aWJwZC4gKi8KKwlwZC0+dXNlciA9IHVkYXRhICE9IE5VTEw7CisKKwlyZXQgPSAmcGQtPmlicGQ7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9kZWFsbG9jX3BkKHN0cnVjdCBpYl9wZCAqaWJwZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfcGQgKnBkID0gdG9faXBkKGlicGQpOworCisJa2ZyZWUocGQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXBhdGhfY3JlYXRlX2FoIC0gY3JlYXRlIGFuIGFkZHJlc3MgaGFuZGxlCisgKiBAcGQ6IHRoZSBwcm90ZWN0aW9uIGRvbWFpbgorICogQGFoX2F0dHI6IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBBSAorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCitzdGF0aWMgc3RydWN0IGliX2FoICppcGF0aF9jcmVhdGVfYWgoc3RydWN0IGliX3BkICpwZCwKKwkJCQkgICAgIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKQoreworCXN0cnVjdCBpcGF0aF9haCAqYWg7CisJc3RydWN0IGliX2FoICpyZXQ7CisKKwkvKiBBIG11bHRpY2FzdCBhZGRyZXNzIHJlcXVpcmVzIGEgR1JIIChzZWUgY2guIDguNC4xKS4gKi8KKwlpZiAoYWhfYXR0ci0+ZGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFICYmCisJICAgIGFoX2F0dHItPmRsaWQgIT0gSVBTX1BFUk1JU1NJVkVfTElEICYmCisJICAgICEoYWhfYXR0ci0+YWhfZmxhZ3MgJiBJQl9BSF9HUkgpKSB7CisJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlhaCA9IGttYWxsb2Moc2l6ZW9mICphaCwgR0ZQX0FUT01JQyk7CisJaWYgKCFhaCkgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogaWJfY3JlYXRlX2FoKCkgd2lsbCBpbml0aWFsaXplIGFoLT5pYmFoLiAqLworCWFoLT5hdHRyID0gKmFoX2F0dHI7CisKKwlyZXQgPSAmYWgtPmliYWg7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9kZXN0cm95X2FoIC0gZGVzdHJveSBhbiBhZGRyZXNzIGhhbmRsZQorICogQGliYWg6IHRoZSBBSCB0byBkZXN0cm95CisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfZGVzdHJveV9haChzdHJ1Y3QgaWJfYWggKmliYWgpCit7CisJc3RydWN0IGlwYXRoX2FoICphaCA9IHRvX2lhaChpYmFoKTsKKworCWtmcmVlKGFoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwYXRoX3F1ZXJ5X2FoKHN0cnVjdCBpYl9haCAqaWJhaCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCit7CisJc3RydWN0IGlwYXRoX2FoICphaCA9IHRvX2lhaChpYmFoKTsKKworCSphaF9hdHRyID0gYWgtPmF0dHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcGF0aF9xdWVyeV9wa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LCB1MTYgaW5kZXgsCisJCQkgICAgdTE2ICpwa2V5KQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CisJaW50IHJldDsKKworCWlmIChpbmRleCA+PSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkqcGtleSA9IGlwYXRoX2xheWVyX2dldF9wa2V5KGRldi0+ZGQsIGluZGV4KTsKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBpcGF0aF9hbGxvY191Y29udGV4dCAtIGFsbG9jYXRlIGEgdWNvbnRlc3QKKyAqIEBpYmRldjogdGhlIGluZmluaWJhbmQgZGV2aWNlCisgKiBAdWRhdGE6IG5vdCB1c2VkIGJ5IHRoZSBJbmZpbmlQYXRoIGRyaXZlcgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaWJfdWNvbnRleHQgKmlwYXRoX2FsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaXBhdGhfdWNvbnRleHQgKmNvbnRleHQ7CisJc3RydWN0IGliX3Vjb250ZXh0ICpyZXQ7CisKKwljb250ZXh0ID0ga21hbGxvYyhzaXplb2YgKmNvbnRleHQsIEdGUF9LRVJORUwpOworCWlmICghY29udGV4dCkgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gJmNvbnRleHQtPmlidWNvbnRleHQ7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlrZnJlZSh0b19pdWNvbnRleHQoY29udGV4dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpYl9kZXZpY2UgKmRldik7CisKKy8qKgorICogaXBhdGhfcmVnaXN0ZXJfaWJfZGV2aWNlIC0gcmVnaXN0ZXIgb3VyIGRldmljZSB3aXRoIHRoZSBpbmZpbmliYW5kIGNvcmUKKyAqIEB1bml0OiB0aGUgZGV2aWNlIG51bWJlciB0byByZWdpc3RlcgorICogQGRkOiB0aGUgZGV2aWNlIGRhdGEgc3RydWN0dXJlCisgKiBSZXR1cm4gdGhlIGFsbG9jYXRlZCBpcGF0aF9pYmRldiBwb2ludGVyIG9yIE5VTEwgb24gZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkICppcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2UoaW50IHVuaXQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmlkZXY7CisJc3RydWN0IGliX2RldmljZSAqZGV2OworCWludCByZXQ7CisKKwlpZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKWliX2FsbG9jX2RldmljZShzaXplb2YgKmlkZXYpOworCWlmIChpZGV2ID09IE5VTEwpCisJCWdvdG8gYmFpbDsKKworCWRldiA9ICZpZGV2LT5pYmRldjsKKworCS8qIE9ubHkgbmVlZCB0byBpbml0aWFsaXplIG5vbi16ZXJvIGZpZWxkcy4gKi8KKwlzcGluX2xvY2tfaW5pdCgmaWRldi0+cXBfdGFibGUubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlkZXYtPmxrX3RhYmxlLmxvY2spOworCWlkZXYtPnNtX2xpZCA9IF9fY29uc3RhbnRfYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOworCS8qIFNldCB0aGUgcHJlZml4IHRvIHRoZSBkZWZhdWx0IHZhbHVlIChzZWUgY2guIDQuMS4xKSAqLworCWlkZXYtPmdpZF9wcmVmaXggPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4ZmU4MDAwMDAwMDAwMDAwMFVMTCk7CisKKwlyZXQgPSBpcGF0aF9pbml0X3FwX3RhYmxlKGlkZXYsIGliX2lwYXRoX3FwX3RhYmxlX3NpemUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3FwOworCisJLyoKKwkgKiBUaGUgdG9wIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSBiaXRzIGFyZSB1c2VkIHRvIGluZGV4IHRoZQorCSAqIHRhYmxlLiAgVGhlIGxvd2VyIDggYml0cyBjYW4gYmUgb3duZWQgYnkgdGhlIHVzZXIgKGNvcGllZCBmcm9tCisJICogdGhlIExLRVkpLiAgVGhlIHJlbWFpbmluZyBiaXRzIGFjdCBhcyBhIGdlbmVyYXRpb24gbnVtYmVyIG9yIHRhZy4KKwkgKi8KKwlpZGV2LT5sa190YWJsZS5tYXggPSAxIDw8IGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZTsKKwlpZGV2LT5sa190YWJsZS50YWJsZSA9IGt6YWxsb2MoaWRldi0+bGtfdGFibGUubWF4ICoKKwkJCQkgICAgICAgc2l6ZW9mKCppZGV2LT5sa190YWJsZS50YWJsZSksCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChpZGV2LT5sa190YWJsZS50YWJsZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2xrOworCX0KKwlzcGluX2xvY2tfaW5pdCgmaWRldi0+cGVuZGluZ19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaWRldi0+cGVuZGluZ1swXSk7CisJSU5JVF9MSVNUX0hFQUQoJmlkZXYtPnBlbmRpbmdbMV0pOworCUlOSVRfTElTVF9IRUFEKCZpZGV2LT5wZW5kaW5nWzJdKTsKKwlJTklUX0xJU1RfSEVBRCgmaWRldi0+cGlvd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJmlkZXYtPnJucndhaXQpOworCWlkZXYtPnBlbmRpbmdfaW5kZXggPSAwOworCWlkZXYtPnBvcnRfY2FwX2ZsYWdzID0KKwkJSUJfUE9SVF9TWVNfSU1BR0VfR1VJRF9TVVAgfCBJQl9QT1JUX0NMSUVOVF9SRUdfU1VQOworCWlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFswXSA9IElCX1BNQV9QT1JUX1hNSVRfREFUQTsKKwlpZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMV0gPSBJQl9QTUFfUE9SVF9SQ1ZfREFUQTsKKwlpZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMl0gPSBJQl9QTUFfUE9SVF9YTUlUX1BLVFM7CisJaWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzNdID0gSUJfUE1BX1BPUlRfUkNWX1BLVFM7CisJaWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzVdID0gSUJfUE1BX1BPUlRfWE1JVF9XQUlUOworCWlkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IDM7CS8qIDF4IG9yIDR4ICovCisKKwkvKgorCSAqIFRoZSBzeXN0ZW0gaW1hZ2UgR1VJRCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsCisJICogSUIgSENBcyBpbiBhIHNpbmdsZSBzeXN0ZW0gYnV0IHNpbmNlIHRoZXJlIGNhbiBiZSBvdGhlcgorCSAqIGRldmljZSB0eXBlcyBpbiB0aGUgc3lzdGVtLCB3ZSBjYW4ndCBiZSBzdXJlIHRoaXMgaXMgdW5pcXVlLgorCSAqLworCWlmICghc3lzX2ltYWdlX2d1aWQpCisJCXN5c19pbWFnZV9ndWlkID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGQpOworCWlkZXYtPnN5c19pbWFnZV9ndWlkID0gc3lzX2ltYWdlX2d1aWQ7CisJaWRldi0+aWJfdW5pdCA9IHVuaXQ7CisJaWRldi0+ZGQgPSBkZDsKKworCXN0cmxjcHkoZGV2LT5uYW1lLCAiaXBhdGglZCIsIElCX0RFVklDRV9OQU1FX01BWCk7CisJZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCWRldi0+bm9kZV9ndWlkID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGQpOworCWRldi0+dXZlcmJzX2FiaV92ZXIgPSBJUEFUSF9VVkVSQlNfQUJJX1ZFUlNJT047CisJZGV2LT51dmVyYnNfY21kX21hc2sgPQorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfREVWSUNFKQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BPUlQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0FMTE9DX1BEKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX1BEKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQUgpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQUgpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX0FIKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfTVIpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFUkVHX01SKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ09NUF9DSEFOTkVMKSB8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUSkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUkVTSVpFX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9QT0xMX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9SRVFfTk9USUZZX0NRKQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUVApCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TRU5EKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1JFQ1YpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVCkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVRBQ0hfTUNBU1QpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1NSUSkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1NSUSkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1NSUSkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TUlFfUkVDVik7CisJZGV2LT5ub2RlX3R5cGUgPSBJQl9OT0RFX0NBOworCWRldi0+cGh5c19wb3J0X2NudCA9IDE7CisJZGV2LT5kbWFfZGV2aWNlID0gaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShkZCk7CisJZGV2LT5jbGFzc19kZXYuZGV2ID0gZGV2LT5kbWFfZGV2aWNlOworCWRldi0+cXVlcnlfZGV2aWNlID0gaXBhdGhfcXVlcnlfZGV2aWNlOworCWRldi0+bW9kaWZ5X2RldmljZSA9IGlwYXRoX21vZGlmeV9kZXZpY2U7CisJZGV2LT5xdWVyeV9wb3J0ID0gaXBhdGhfcXVlcnlfcG9ydDsKKwlkZXYtPm1vZGlmeV9wb3J0ID0gaXBhdGhfbW9kaWZ5X3BvcnQ7CisJZGV2LT5xdWVyeV9wa2V5ID0gaXBhdGhfcXVlcnlfcGtleTsKKwlkZXYtPnF1ZXJ5X2dpZCA9IGlwYXRoX3F1ZXJ5X2dpZDsKKwlkZXYtPmFsbG9jX3Vjb250ZXh0ID0gaXBhdGhfYWxsb2NfdWNvbnRleHQ7CisJZGV2LT5kZWFsbG9jX3Vjb250ZXh0ID0gaXBhdGhfZGVhbGxvY191Y29udGV4dDsKKwlkZXYtPmFsbG9jX3BkID0gaXBhdGhfYWxsb2NfcGQ7CisJZGV2LT5kZWFsbG9jX3BkID0gaXBhdGhfZGVhbGxvY19wZDsKKwlkZXYtPmNyZWF0ZV9haCA9IGlwYXRoX2NyZWF0ZV9haDsKKwlkZXYtPmRlc3Ryb3lfYWggPSBpcGF0aF9kZXN0cm95X2FoOworCWRldi0+cXVlcnlfYWggPSBpcGF0aF9xdWVyeV9haDsKKwlkZXYtPmNyZWF0ZV9zcnEgPSBpcGF0aF9jcmVhdGVfc3JxOworCWRldi0+bW9kaWZ5X3NycSA9IGlwYXRoX21vZGlmeV9zcnE7CisJZGV2LT5xdWVyeV9zcnEgPSBpcGF0aF9xdWVyeV9zcnE7CisJZGV2LT5kZXN0cm95X3NycSA9IGlwYXRoX2Rlc3Ryb3lfc3JxOworCWRldi0+Y3JlYXRlX3FwID0gaXBhdGhfY3JlYXRlX3FwOworCWRldi0+bW9kaWZ5X3FwID0gaXBhdGhfbW9kaWZ5X3FwOworCWRldi0+cXVlcnlfcXAgPSBpcGF0aF9xdWVyeV9xcDsKKwlkZXYtPmRlc3Ryb3lfcXAgPSBpcGF0aF9kZXN0cm95X3FwOworCWRldi0+cG9zdF9zZW5kID0gaXBhdGhfcG9zdF9zZW5kOworCWRldi0+cG9zdF9yZWN2ID0gaXBhdGhfcG9zdF9yZWNlaXZlOworCWRldi0+cG9zdF9zcnFfcmVjdiA9IGlwYXRoX3Bvc3Rfc3JxX3JlY2VpdmU7CisJZGV2LT5jcmVhdGVfY3EgPSBpcGF0aF9jcmVhdGVfY3E7CisJZGV2LT5kZXN0cm95X2NxID0gaXBhdGhfZGVzdHJveV9jcTsKKwlkZXYtPnJlc2l6ZV9jcSA9IGlwYXRoX3Jlc2l6ZV9jcTsKKwlkZXYtPnBvbGxfY3EgPSBpcGF0aF9wb2xsX2NxOworCWRldi0+cmVxX25vdGlmeV9jcSA9IGlwYXRoX3JlcV9ub3RpZnlfY3E7CisJZGV2LT5nZXRfZG1hX21yID0gaXBhdGhfZ2V0X2RtYV9tcjsKKwlkZXYtPnJlZ19waHlzX21yID0gaXBhdGhfcmVnX3BoeXNfbXI7CisJZGV2LT5yZWdfdXNlcl9tciA9IGlwYXRoX3JlZ191c2VyX21yOworCWRldi0+ZGVyZWdfbXIgPSBpcGF0aF9kZXJlZ19tcjsKKwlkZXYtPmFsbG9jX2ZtciA9IGlwYXRoX2FsbG9jX2ZtcjsKKwlkZXYtPm1hcF9waHlzX2ZtciA9IGlwYXRoX21hcF9waHlzX2ZtcjsKKwlkZXYtPnVubWFwX2ZtciA9IGlwYXRoX3VubWFwX2ZtcjsKKwlkZXYtPmRlYWxsb2NfZm1yID0gaXBhdGhfZGVhbGxvY19mbXI7CisJZGV2LT5hdHRhY2hfbWNhc3QgPSBpcGF0aF9tdWx0aWNhc3RfYXR0YWNoOworCWRldi0+ZGV0YWNoX21jYXN0ID0gaXBhdGhfbXVsdGljYXN0X2RldGFjaDsKKwlkZXYtPnByb2Nlc3NfbWFkID0gaXBhdGhfcHJvY2Vzc19tYWQ7CisKKwlzbnByaW50ZihkZXYtPm5vZGVfZGVzYywgc2l6ZW9mKGRldi0+bm9kZV9kZXNjKSwKKwkJIElQQVRIX0lEU1RSICIgJXMga2VybmVsX1NNQSIsIHN5c3RlbV91dHNuYW1lLm5vZGVuYW1lKTsKKworCXJldCA9IGliX3JlZ2lzdGVyX2RldmljZShkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZzsKKworCWlmIChpcGF0aF92ZXJic19yZWdpc3Rlcl9zeXNmcyhkZXYpKQorCQlnb3RvIGVycl9jbGFzczsKKworCWlwYXRoX2xheWVyX2VuYWJsZV90aW1lcihkZCk7CisKKwlnb3RvIGJhaWw7CisKK2Vycl9jbGFzczoKKwlpYl91bnJlZ2lzdGVyX2RldmljZShkZXYpOworZXJyX3JlZzoKKwlrZnJlZShpZGV2LT5sa190YWJsZS50YWJsZSk7CitlcnJfbGs6CisJa2ZyZWUoaWRldi0+cXBfdGFibGUudGFibGUpOworZXJyX3FwOgorCWliX2RlYWxsb2NfZGV2aWNlKGRldik7CisJX1ZFUkJTX0VSUk9SKCJpYl9pcGF0aCVkIGNhbm5vdCByZWdpc3RlciB2ZXJicyAoJWQpIVxuIiwKKwkJICAgICB1bml0LCAtcmV0KTsKKwlpZGV2ID0gTlVMTDsKKworYmFpbDoKKwlyZXR1cm4gaWRldjsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfdW5yZWdpc3Rlcl9pYl9kZXZpY2Uodm9pZCAqYXJnKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKSBhcmc7CisJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSAmZGV2LT5pYmRldjsKKworCWlwYXRoX2xheWVyX2Rpc2FibGVfdGltZXIoZGV2LT5kZCk7CisKKwlpYl91bnJlZ2lzdGVyX2RldmljZShpYmRldik7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ1swXSkgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ1sxXSkgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ1syXSkpCisJCV9WRVJCU19FUlJPUigiaXBhdGglZCBwZW5kaW5nIGxpc3Qgbm90IGVtcHR5IVxuIiwKKwkJCSAgICAgZGV2LT5pYl91bml0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cGlvd2FpdCkpCisJCV9WRVJCU19FUlJPUigiaXBhdGglZCBwaW93YWl0IGxpc3Qgbm90IGVtcHR5IVxuIiwKKwkJCSAgICAgZGV2LT5pYl91bml0KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cm5yd2FpdCkpCisJCV9WRVJCU19FUlJPUigiaXBhdGglZCBybnJ3YWl0IGxpc3Qgbm90IGVtcHR5IVxuIiwKKwkJCSAgICAgZGV2LT5pYl91bml0KTsKKwlpZiAoIWlwYXRoX21jYXN0X3RyZWVfZW1wdHkoKSkKKwkJX1ZFUkJTX0VSUk9SKCJpcGF0aCVkIG11bHRpY2FzdCB0YWJsZSBtZW1vcnkgbGVhayFcbiIsCisJCQkgICAgIGRldi0+aWJfdW5pdCk7CisJLyoKKwkgKiBOb3RlIHRoYXQgaXBhdGhfdW5yZWdpc3Rlcl9pYl9kZXZpY2UoKSBjYW4gYmUgY2FsbGVkIGJlZm9yZSBhbGwKKwkgKiB0aGUgUVBzIGFyZSBkZXN0cm95ZWQhCisJICovCisJaXBhdGhfZnJlZV9hbGxfcXBzKCZkZXYtPnFwX3RhYmxlKTsKKwlrZnJlZShkZXYtPnFwX3RhYmxlLnRhYmxlKTsKKwlrZnJlZShkZXYtPmxrX3RhYmxlLnRhYmxlKTsKKwlpYl9kZWFsbG9jX2RldmljZShpYmRldik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlwYXRoX3ZlcmJzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaXBhdGhfdmVyYnNfcmVnaXN0ZXIoaXBhdGhfcmVnaXN0ZXJfaWJfZGV2aWNlLAorCQkJCSAgICBpcGF0aF91bnJlZ2lzdGVyX2liX2RldmljZSwKKwkJCQkgICAgaXBhdGhfaWJfcGlvYnVmYXZhaWwsIGlwYXRoX2liX3JjdiwKKwkJCQkgICAgaXBhdGhfaWJfdGltZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXBhdGhfdmVyYnNfY2xlYW51cCh2b2lkKQoreworCWlwYXRoX3ZlcmJzX3VucmVnaXN0ZXIoKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0KKwkJY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYuY2xhc3NfZGV2KTsKKwlpbnQgdmVuZG9yLCBib2FyZHJldiwgbWFqcmV2LCBtaW5yZXY7CisKKwlpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2UoZGV2LT5kZCwgJnZlbmRvciwgJmJvYXJkcmV2LAorCQkJCSAmbWFqcmV2LCAmbWlucmV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgbWFqcmV2LCBtaW5yZXYpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQorCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBpcGF0aF9sYXllcl9nZXRfYm9hcmRuYW1lKGRldi0+ZGQsIGJ1ZiwgMTI4KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBiYWlsOworCXN0cmNhdChidWYsICJcbiIpOworCXJldCA9IHN0cmxlbihidWYpOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHMoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0KKwkJY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYuY2xhc3NfZGV2KTsKKwlpbnQgaTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihidWYsCisJCSAgICAgICJSQyByZXNlbmRzICAlZFxuIgorCQkgICAgICAiUkMgbm8gUUFDSyAgJWRcbiIKKwkJICAgICAgIlJDIEFDS3MgICAgICVkXG4iCisJCSAgICAgICJSQyBTRVEgTkFLcyAlZFxuIgorCQkgICAgICAiUkMgUkRNQSBzZXEgJWRcbiIKKwkJICAgICAgIlJDIFJOUiBOQUtzICVkXG4iCisJCSAgICAgICJSQyBPVEggTkFLcyAlZFxuIgorCQkgICAgICAiUkMgdGltZW91dHMgJWRcbiIKKwkJICAgICAgIlJDIFJETUEgZHVwICVkXG4iCisJCSAgICAgICJwaW9idWYgd2FpdCAlZFxuIgorCQkgICAgICAibm8gcGlvYnVmICAgJWRcbiIKKwkJICAgICAgIlBLVCBkcm9wcyAgICVkXG4iCisJCSAgICAgICJXUUUgZXJycyAgICAlZFxuIiwKKwkJICAgICAgZGV2LT5uX3JjX3Jlc2VuZHMsIGRldi0+bl9yY19xYWNrcywgZGV2LT5uX3JjX2Fja3MsCisJCSAgICAgIGRldi0+bl9zZXFfbmFrcywgZGV2LT5uX3JkbWFfc2VxLCBkZXYtPm5fcm5yX25ha3MsCisJCSAgICAgIGRldi0+bl9vdGhlcl9uYWtzLCBkZXYtPm5fdGltZW91dHMsCisJCSAgICAgIGRldi0+bl9yZG1hX2R1cF9idXN5LCBkZXYtPm5fcGlvd2FpdCwKKwkJICAgICAgZGV2LT5uX25vX3Bpb2J1ZiwgZGV2LT5uX3BrdF9kcm9wcywgZGV2LT5uX3dxZV9lcnJzKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPm9wc3RhdHMpOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGlwYXRoX29wY29kZV9zdGF0cyAqc2kgPSAmZGV2LT5vcHN0YXRzW2ldOworCisJCWlmICghc2ktPm5fcGFja2V0cyAmJiAhc2ktPm5fYnl0ZXMpCisJCQljb250aW51ZTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCAlbGx1LyVsbHVcbiIsIGksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2ktPm5fcGFja2V0cywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzaS0+bl9ieXRlcyk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihod19yZXYsIFNfSVJVR08sIHNob3dfcmV2LCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsIE5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc3RhdHMsIFNfSVJVR08sIHNob3dfc3RhdHMsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmlwYXRoX2NsYXNzX2F0dHJpYnV0ZXNbXSA9IHsKKwkmY2xhc3NfZGV2aWNlX2F0dHJfaHdfcmV2LAorCSZjbGFzc19kZXZpY2VfYXR0cl9oY2FfdHlwZSwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfaWQsCisJJmNsYXNzX2RldmljZV9hdHRyX3N0YXRzCit9OworCitzdGF0aWMgaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpYl9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXBhdGhfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkKKwkJaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tpXSkpIHsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaXBhdGhfdmVyYnNfaW5pdCk7Cittb2R1bGVfZXhpdChpcGF0aF92ZXJic19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4ZDU5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC0wLDAgKzEsNjkzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJUEFUSF9WRVJCU19ICisjZGVmaW5lIElQQVRIX1ZFUkJTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3BhY2suaD4KKworI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisjaW5jbHVkZSAidmVyYnNfZGVidWcuaCIKKworI2RlZmluZSBRUE5fTUFYICAgICAgICAgICAgICAgICAoMSA8PCAyNCkKKyNkZWZpbmUgUVBOTUFQX0VOVFJJRVMgICAgICAgICAgKFFQTl9NQVggLyBQQUdFX1NJWkUgLyBCSVRTX1BFUl9CWVRFKQorCisvKgorICogSW5jcmVtZW50IHRoaXMgdmFsdWUgaWYgYW55IGNoYW5nZXMgdGhhdCBicmVhayB1c2Vyc3BhY2UgQUJJCisgKiBjb21wYXRpYmlsaXR5IGFyZSBtYWRlLgorICovCisjZGVmaW5lIElQQVRIX1VWRVJCU19BQklfVkVSU0lPTiAgICAgICAxCisKKy8qCisgKiBEZWZpbmUgYW4gaWJfY3Ffbm90aWZ5IHZhbHVlIHRoYXQgaXMgbm90IHZhbGlkIHNvIHdlIGtub3cgd2hlbiBDUQorICogbm90aWZpY2F0aW9ucyBhcmUgYXJtZWQuCisgKi8KKyNkZWZpbmUgSUJfQ1FfTk9ORQkoSUJfQ1FfTkVYVF9DT01QICsgMSkKKworI2RlZmluZSBJQl9STlJfTkFLCQkJMHgyMAorI2RlZmluZSBJQl9OQUtfUFNOX0VSUk9SCQkweDYwCisjZGVmaW5lIElCX05BS19JTlZBTElEX1JFUVVFU1QJCTB4NjEKKyNkZWZpbmUgSUJfTkFLX1JFTU9URV9BQ0NFU1NfRVJST1IJMHg2MgorI2RlZmluZSBJQl9OQUtfUkVNT1RFX09QRVJBVElPTkFMX0VSUk9SIDB4NjMKKyNkZWZpbmUgSUJfTkFLX0lOVkFMSURfUkRfUkVRVUVTVAkweDY0CisKKyNkZWZpbmUgSVBBVEhfUE9TVF9TRU5EX09LCQkweDAxCisjZGVmaW5lIElQQVRIX1BPU1RfUkVDVl9PSwkJMHgwMgorI2RlZmluZSBJUEFUSF9QUk9DRVNTX1JFQ1ZfT0sJCTB4MDQKKyNkZWZpbmUgSVBBVEhfUFJPQ0VTU19TRU5EX09LCQkweDA4CisKKy8qIElCIFBlcmZvcm1hbmNlIE1hbmFnZXIgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBJQl9QTUFfU0FNUExFX1NUQVRVU19ET05FCTB4MDAKKyNkZWZpbmUgSUJfUE1BX1NBTVBMRV9TVEFUVVNfU1RBUlRFRAkweDAxCisjZGVmaW5lIElCX1BNQV9TQU1QTEVfU1RBVFVTX1JVTk5JTkcJMHgwMgorCisvKiBNYW5kYXRvcnkgSUIgcGVyZm9ybWFuY2UgY291bnRlciBzZWxlY3QgdmFsdWVzLiAqLworI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDEpCisjZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9EQVRBCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDMpCisjZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9QS1RTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQJX19jb25zdGFudF9odG9ucygweDAwMDUpCisKK3N0cnVjdCBpYl9yZXRoIHsKKwlfX2JlNjQgdmFkZHI7CisJX19iZTMyIHJrZXk7CisJX19iZTMyIGxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWJfYXRvbWljX2V0aCB7CisJX19iZTY0IHZhZGRyOworCV9fYmUzMiBya2V5OworCV9fYmU2NCBzd2FwX2RhdGE7CisJX19iZTY0IGNvbXBhcmVfZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyB7CisJX19iZTMyIGJ0aFszXTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2JlMzIgZGV0aFsyXTsKKwkJCV9fYmUzMiBpbW1fZGF0YTsKKwkJfSB1ZDsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpYl9yZXRoIHJldGg7CisJCQlfX2JlMzIgaW1tX2RhdGE7CisJCX0gcmM7CisJCXN0cnVjdCB7CisJCQlfX2JlMzIgYWV0aDsKKwkJCV9fYmU2NCBhdG9taWNfYWNrX2V0aDsKKwkJfSBhdDsKKwkJX19iZTMyIGltbV9kYXRhOworCQlfX2JlMzIgYWV0aDsKKwkJc3RydWN0IGliX2F0b21pY19ldGggYXRvbWljX2V0aDsKKwl9IHU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIE5vdGUgdGhhdCBVRCBwYWNrZXRzIHdpdGggYSBHUkggaGVhZGVyIGFyZSA4KzQwKzEyKzggPSA2OCBieXRlcworICogbG9uZyAoNzIgdy8gaW1tX2RhdGEpLiAgT25seSB0aGUgZmlyc3QgNTYgYnl0ZXMgb2YgdGhlIElCIGhlYWRlcgorICogd2lsbCBiZSBpbiB0aGUgZWFnZXIgaGVhZGVyIGJ1ZmZlci4gIFRoZSByZW1haW5pbmcgMTIgb3IgMTYgYnl0ZXMKKyAqIGFyZSBpbiB0aGUgZGF0YSBidWZmZXIuCisgKi8KK3N0cnVjdCBpcGF0aF9pYl9oZWFkZXIgeworCV9fYmUxNiBscmhbNF07CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGliX2dyaCBncmg7CisJCQlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyBvdGg7CisJCX0gbDsKKwkJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgb3RoOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogVGhlcmUgaXMgb25lIHN0cnVjdCBpcGF0aF9tY2FzdCBmb3IgZWFjaCBtdWx0aWNhc3QgR0lELgorICogQWxsIGF0dGFjaGVkIFFQcyBhcmUgdGhlbiBzdG9yZWQgYXMgYSBsaXN0IG9mCisgKiBzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAuCisgKi8KK3N0cnVjdCBpcGF0aF9tY2FzdF9xcCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpcGF0aF9xcCAqcXA7Cit9OworCitzdHJ1Y3QgaXBhdGhfbWNhc3QgeworCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisJdW5pb24gaWJfZ2lkIG1naWQ7CisJc3RydWN0IGxpc3RfaGVhZCBxcF9saXN0OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJYXRvbWljX3QgcmVmY291bnQ7Cit9OworCisvKiBNZW1vcnkgcmVnaW9uICovCitzdHJ1Y3QgaXBhdGhfbXIgeworCXN0cnVjdCBpYl9tciBpYm1yOworCXN0cnVjdCBpcGF0aF9tcmVnaW9uIG1yOwkvKiBtdXN0IGJlIGxhc3QgKi8KK307CisKKy8qIEZhc3QgbWVtb3J5IHJlZ2lvbiAqLworc3RydWN0IGlwYXRoX2ZtciB7CisJc3RydWN0IGliX2ZtciBpYmZtcjsKKwl1OCBwYWdlX3NoaWZ0OworCXN0cnVjdCBpcGF0aF9tcmVnaW9uIG1yOwkvKiBtdXN0IGJlIGxhc3QgKi8KK307CisKKy8qIFByb3RlY3Rpb24gZG9tYWluICovCitzdHJ1Y3QgaXBhdGhfcGQgeworCXN0cnVjdCBpYl9wZCBpYnBkOworCWludCB1c2VyOwkJLyogbm9uLXplcm8gaWYgY3JlYXRlZCBmcm9tIHVzZXIgc3BhY2UgKi8KK307CisKKy8qIEFkZHJlc3MgSGFuZGxlICovCitzdHJ1Y3QgaXBhdGhfYWggeworCXN0cnVjdCBpYl9haCBpYmFoOworCXN0cnVjdCBpYl9haF9hdHRyIGF0dHI7Cit9OworCisvKgorICogUXVpY2sgZGVzY3JpcHRpb24gb2Ygb3VyIENRL1FQIGxvY2tpbmcgc2NoZW1lOgorICoKKyAqIFdlIGhhdmUgb25lIGdsb2JhbCBsb2NrIHRoYXQgcHJvdGVjdHMgZGV2LT5jcS9xcF90YWJsZS4gIEVhY2gKKyAqIHN0cnVjdCBpcGF0aF9jcS9xcCBhbHNvIGhhcyBpdHMgb3duIGxvY2suICBBbiBpbmRpdmlkdWFsIHFwIGxvY2sKKyAqIG1heSBiZSB0YWtlbiBpbnNpZGUgb2YgYW4gaW5kaXZpZHVhbCBjcSBsb2NrLiAgQm90aCBjcXMgYXR0YWNoZWQgdG8KKyAqIGEgcXAgbWF5IGJlIGxvY2tlZCwgd2l0aCB0aGUgc2VuZCBjcSBsb2NrZWQgZmlyc3QuICBObyBvdGhlcgorICogbmVzdGluZyBzaG91bGQgYmUgZG9uZS4KKyAqCisgKiBFYWNoIHN0cnVjdCBpcGF0aF9jcS9xcCBhbHNvIGhhcyBhbiBhdG9taWNfdCByZWYgY291bnQuICBUaGUKKyAqIHBvaW50ZXIgZnJvbSB0aGUgY3EvcXBfdGFibGUgdG8gdGhlIHN0cnVjdCBjb3VudHMgYXMgb25lIHJlZmVyZW5jZS4KKyAqIFRoaXMgcmVmZXJlbmNlIGFsc28gaXMgZ29vZCBmb3IgYWNjZXNzIHRocm91Z2ggdGhlIGNvbnN1bWVyIEFQSSwgc28KKyAqIG1vZGlmeWluZyB0aGUgQ1EvUVAgZXRjIGRvZXNuJ3QgbmVlZCB0byB0YWtlIGFub3RoZXIgcmVmZXJlbmNlLgorICogQWNjZXNzIGJlY2F1c2Ugb2YgYSBjb21wbGV0aW9uIGJlaW5nIHBvbGxlZCBkb2VzIG5lZWQgYSByZWZlcmVuY2UuCisgKgorICogRmluYWxseSwgZWFjaCBzdHJ1Y3QgaXBhdGhfY3EvcXAgaGFzIGEgd2FpdF9xdWV1ZV9oZWFkX3QgZm9yIHRoZQorICogZGVzdHJveSBmdW5jdGlvbiB0byBzbGVlcCBvbi4KKyAqCisgKiBUaGlzIG1lYW5zIHRoYXQgYWNjZXNzIGZyb20gdGhlIGNvbnN1bWVyIEFQSSByZXF1aXJlcyBub3RoaW5nIGJ1dAorICogdGFraW5nIHRoZSBzdHJ1Y3QncyBsb2NrLgorICoKKyAqIEFjY2VzcyBiZWNhdXNlIG9mIGEgY29tcGxldGlvbiBldmVudCBzaG91bGQgZ28gYXMgZm9sbG93czoKKyAqIC0gbG9jayBjcS9xcF90YWJsZSBhbmQgbG9vayB1cCBzdHJ1Y3QKKyAqIC0gaW5jcmVtZW50IHJlZiBjb3VudCBpbiBzdHJ1Y3QKKyAqIC0gZHJvcCBjcS9xcF90YWJsZSBsb2NrCisgKiAtIGxvY2sgc3RydWN0LCBkbyB5b3VyIHRoaW5nLCBhbmQgdW5sb2NrIHN0cnVjdAorICogLSBkZWNyZW1lbnQgcmVmIGNvdW50OyBpZiB6ZXJvLCB3YWtlIHVwIHdhaXRlcnMKKyAqCisgKiBUbyBkZXN0cm95IGEgQ1EvUVAsIHdlIGNhbiBkbyB0aGUgZm9sbG93aW5nOgorICogLSBsb2NrIGNxL3FwX3RhYmxlLCByZW1vdmUgcG9pbnRlciwgdW5sb2NrIGNxL3FwX3RhYmxlIGxvY2sKKyAqIC0gZGVjcmVtZW50IHJlZiBjb3VudAorICogLSB3YWl0X2V2ZW50IHVudGlsIHJlZiBjb3VudCBpcyB6ZXJvCisgKgorICogSXQgaXMgdGhlIGNvbnN1bWVyJ3MgcmVzcG9uc2liaWx0eSB0byBtYWtlIHN1cmUgdGhhdCBubyBRUAorICogb3BlcmF0aW9ucyAoV1FFIHBvc3Rpbmcgb3Igc3RhdGUgbW9kaWZpY2F0aW9uKSBhcmUgcGVuZGluZyB3aGVuIHRoZQorICogUVAgaXMgZGVzdHJveWVkLiAgQWxzbywgdGhlIGNvbnN1bWVyIG11c3QgbWFrZSBzdXJlIHRoYXQgY2FsbHMgdG8KKyAqIHFwX21vZGlmeSBhcmUgc2VyaWFsaXplZC4KKyAqCisgKiBQb3NzaWJsZSBvcHRpbWl6YXRpb25zICh3YWl0IGZvciBwcm9maWxlIGRhdGEgdG8gc2VlIGlmL3doZXJlIHdlCisgKiBoYXZlIGxvY2tzIGJvdW5jaW5nIGJldHdlZW4gQ1BVcyk6CisgKiAtIHNwbGl0IGNxL3FwIHRhYmxlIGxvY2sgaW50byBuIHNlcGFyYXRlIChjYWNoZS1hbGlnbmVkKSBsb2NrcywKKyAqICAgaW5kZXhlZCAoc2F5KSBieSB0aGUgcGFnZSBpbiB0aGUgdGFibGUKKyAqLworCitzdHJ1Y3QgaXBhdGhfY3EgeworCXN0cnVjdCBpYl9jcSBpYmNxOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjb21wdGFzazsKKwlzcGlubG9ja190IGxvY2s7CisJdTggbm90aWZ5OworCXU4IHRyaWdnZXJlZDsKKwl1MzIgaGVhZDsJCS8qIG5ldyByZWNvcmRzIGFkZGVkIHRvIHRoZSBoZWFkICovCisJdTMyIHRhaWw7CQkvKiBwb2xsX2NxKCkgcmVhZHMgZnJvbSBoZXJlLiAqLworCXN0cnVjdCBpYl93YyAqcXVldWU7CS8qIHRoaXMgaXMgYWN0dWFsbHkgaWJjcS5jcWUgKyAxICovCit9OworCisvKgorICogU2VuZCB3b3JrIHJlcXVlc3QgcXVldWUgZW50cnkuCisgKiBUaGUgc2l6ZSBvZiB0aGUgc2dfbGlzdCBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIFFQIGlzIGNyZWF0ZWQgYW5kIHN0b3JlZAorICogaW4gcXAtPnNfbWF4X3NnZS4KKyAqLworc3RydWN0IGlwYXRoX3N3cWUgeworCXN0cnVjdCBpYl9zZW5kX3dyIHdyOwkvKiBkb24ndCB1c2Ugd3Iuc2dfbGlzdCAqLworCXUzMiBwc247CQkvKiBmaXJzdCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisJdTMyIGxwc247CQkvKiBsYXN0IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MzIgc3NuOwkJLyogc2VuZCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MzIgbGVuZ3RoOwkJLyogdG90YWwgbGVuZ3RoIG9mIGRhdGEgaW4gc2dfbGlzdCAqLworCXN0cnVjdCBpcGF0aF9zZ2Ugc2dfbGlzdFswXTsKK307CisKKy8qCisgKiBSZWNlaXZlIHdvcmsgcmVxdWVzdCBxdWV1ZSBlbnRyeS4KKyAqIFRoZSBzaXplIG9mIHRoZSBzZ19saXN0IGlzIGRldGVybWluZWQgd2hlbiB0aGUgUVAgaXMgY3JlYXRlZCBhbmQgc3RvcmVkCisgKiBpbiBxcC0+cl9tYXhfc2dlLgorICovCitzdHJ1Y3QgaXBhdGhfcndxZSB7CisJdTY0IHdyX2lkOworCXUzMiBsZW5ndGg7CQkvKiB0b3RhbCBsZW5ndGggb2YgZGF0YSBpbiBzZ19saXN0ICovCisJdTggbnVtX3NnZTsKKwlzdHJ1Y3QgaXBhdGhfc2dlIHNnX2xpc3RbMF07Cit9OworCitzdHJ1Y3QgaXBhdGhfcnEgeworCXNwaW5sb2NrX3QgbG9jazsKKwl1MzIgaGVhZDsJCS8qIG5ldyB3b3JrIHJlcXVlc3RzIHBvc3RlZCB0byB0aGUgaGVhZCAqLworCXUzMiB0YWlsOwkJLyogcmVjZWl2ZXMgcHVsbCByZXF1ZXN0cyBmcm9tIGhlcmUuICovCisJdTMyIHNpemU7CQkvKiBzaXplIG9mIFJXUUUgYXJyYXkgKi8KKwl1OCBtYXhfc2dlOworCXN0cnVjdCBpcGF0aF9yd3FlICp3cTsJLyogUldRRSBhcnJheSAqLworfTsKKworc3RydWN0IGlwYXRoX3NycSB7CisJc3RydWN0IGliX3NycSBpYnNycTsKKwlzdHJ1Y3QgaXBhdGhfcnEgcnE7CisJLyogc2VuZCBzaWduYWwgd2hlbiBudW1iZXIgb2YgUldRRXMgPCBsaW1pdCAqLworCXUzMiBsaW1pdDsKK307CisKKy8qCisgKiBWYXJpYWJsZXMgcHJlZml4ZWQgd2l0aCBzXyBhcmUgZm9yIHRoZSByZXF1ZXN0ZXIgKHNlbmRlcikuCisgKiBWYXJpYWJsZXMgcHJlZml4ZWQgd2l0aCByXyBhcmUgZm9yIHRoZSByZXNwb25kZXIgKHJlY2VpdmVyKS4KKyAqIFZhcmlhYmxlcyBwcmVmaXhlZCB3aXRoIGFja18gYXJlIGZvciByZXNwb25kZXIgcmVwbGllcy4KKyAqCisgKiBDb21tb24gdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQgYnkgYm90aCByX3JxLmxvY2sgYW5kIHNfbG9jayBpbiB0aGF0IG9yZGVyCisgKiB3aGljaCBvbmx5IGhhcHBlbnMgaW4gbW9kaWZ5X3FwKCkgb3IgY2hhbmdpbmcgdGhlIFFQICdzdGF0ZScuCisgKi8KK3N0cnVjdCBpcGF0aF9xcCB7CisJc3RydWN0IGliX3FwIGlicXA7CisJc3RydWN0IGlwYXRoX3FwICpuZXh0OwkJLyogbGluayBsaXN0IGZvciBRUE4gaGFzaCB0YWJsZSAqLworCXN0cnVjdCBpcGF0aF9xcCAqdGltZXJfbmV4dDsJLyogbGluayBsaXN0IGZvciBpcGF0aF9pYl90aW1lcigpICovCisJc3RydWN0IGxpc3RfaGVhZCBwaW93YWl0OwkvKiBsaW5rIGZvciB3YWl0IFBJTyBidWYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRpbWVyd2FpdDsJLyogbGluayBmb3Igd2FpdGluZyBmb3IgdGltZW91dHMgKi8KKwlzdHJ1Y3QgaWJfYWhfYXR0ciByZW1vdGVfYWhfYXR0cjsKKwlzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyIHNfaGRyOwkvKiBuZXh0IHBhY2tldCBoZWFkZXIgdG8gc2VuZCAqLworCWF0b21pY190IHJlZmNvdW50OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNfdGFzazsKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzX2N1cl9zZ2U7CisJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSBzX3NnZTsJLyogY3VycmVudCBzZW5kIHJlcXVlc3QgZGF0YSAqLworCS8qIGN1cnJlbnQgUkRNQSByZWFkIHNlbmQgZGF0YSAqLworCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgc19yZG1hX3NnZTsKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlIHJfc2dlOwkvKiBjdXJyZW50IHJlY2VpdmUgZGF0YSAqLworCXNwaW5sb2NrX3Qgc19sb2NrOworCXVuc2lnbmVkIGxvbmcgc19mbGFnczsKKwl1MzIgc19oZHJ3b3JkczsJCS8qIHNpemUgb2Ygc19oZHIgaW4gMzIgYml0IHdvcmRzICovCisJdTMyIHNfY3VyX3NpemU7CQkvKiBzaXplIG9mIHNlbmQgcGFja2V0IGluIGJ5dGVzICovCisJdTMyIHNfbGVuOwkJLyogdG90YWwgbGVuZ3RoIG9mIHNfc2dlICovCisJdTMyIHNfcmRtYV9sZW47CQkvKiB0b3RhbCBsZW5ndGggb2Ygc19yZG1hX3NnZSAqLworCXUzMiBzX25leHRfcHNuOwkJLyogUFNOIGZvciBuZXh0IHJlcXVlc3QgKi8KKwl1MzIgc19sYXN0X3BzbjsJCS8qIGxhc3QgcmVzcG9uc2UgUFNOIHByb2Nlc3NlZCAqLworCXUzMiBzX3BzbjsJCS8qIGN1cnJlbnQgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworCXUzMiBzX3Jucl90aW1lb3V0OwkvKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZvciBSTlIgdGltZW91dCAqLworCXUzMiBzX2Fja19wc247CQkvKiBQU04gZm9yIG5leHQgQUNLIG9yIFJETUFfUkVBRCAqLworCXU2NCBzX2Fja19hdG9taWM7CS8qIGRhdGEgZm9yIGF0b21pYyBBQ0sgKi8KKwl1NjQgcl93cl9pZDsJCS8qIElEIGZvciBjdXJyZW50IHJlY2VpdmUgV1FFICovCisJdTY0IHJfYXRvbWljX2RhdGE7CS8qIGRhdGEgZm9yIGxhc3QgYXRvbWljIG9wICovCisJdTMyIHJfYXRvbWljX3BzbjsJLyogUFNOIG9mIGxhc3QgYXRvbWljIG9wICovCisJdTMyIHJfbGVuOwkJLyogdG90YWwgbGVuZ3RoIG9mIHJfc2dlICovCisJdTMyIHJfcmN2X2xlbjsJCS8qIHJlY2VpdmUgZGF0YSBsZW4gcHJvY2Vzc2VkICovCisJdTMyIHJfcHNuOwkJLyogZXhwZWN0ZWQgcmN2IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1OCBzdGF0ZTsJCS8qIFFQIHN0YXRlICovCisJdTggc19zdGF0ZTsJCS8qIG9wY29kZSBvZiBsYXN0IHBhY2tldCBzZW50ICovCisJdTggc19hY2tfc3RhdGU7CQkvKiBvcGNvZGUgb2YgcGFja2V0IHRvIEFDSyAqLworCXU4IHNfbmFrX3N0YXRlOwkJLyogbm9uLXplcm8gaWYgTkFLIGlzIHBlbmRpbmcgKi8KKwl1OCByX3N0YXRlOwkJLyogb3Bjb2RlIG9mIGxhc3QgcGFja2V0IHJlY2VpdmVkICovCisJdTggcl9yZXVzZV9zZ2U7CQkvKiBmb3IgVUMgcmVjZWl2ZSBlcnJvcnMgKi8KKwl1OCByX3NnZV9pbng7CQkvKiBjdXJyZW50IGluZGV4IGludG8gc2dfbGlzdCAqLworCXU4IHNfbWF4X3NnZTsJCS8qIHNpemUgb2Ygc193cS0+c2dfbGlzdCAqLworCXU4IHFwX2FjY2Vzc19mbGFnczsKKwl1OCBzX3JldHJ5X2NudDsJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSAqLworCXU4IHNfcm5yX3JldHJ5X2NudDsKKwl1OCBzX21pbl9ybnJfdGltZXI7CisJdTggc19yZXRyeTsJCS8qIHJlcXVlc3RlciByZXRyeSBjb3VudGVyICovCisJdTggc19ybnJfcmV0cnk7CQkvKiByZXF1ZXN0ZXIgUk5SIHJldHJ5IGNvdW50ZXIgKi8KKwl1OCBzX3BrZXlfaW5kZXg7CS8qIFBLRVkgaW5kZXggdG8gdXNlICovCisJZW51bSBpYl9tdHUgcGF0aF9tdHU7CisJYXRvbWljX3QgbXNuOwkJLyogbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MzIgcmVtb3RlX3FwbjsKKwl1MzIgcWtleTsJCS8qIFFLRVkgZm9yIHRoaXMgUVAgKGZvciBVRCBvciBSRCkgKi8KKwl1MzIgc19zaXplOwkJLyogc2VuZCB3b3JrIHF1ZXVlIHNpemUgKi8KKwl1MzIgc19oZWFkOwkJLyogbmV3IGVudHJpZXMgYWRkZWQgaGVyZSAqLworCXUzMiBzX3RhaWw7CQkvKiBuZXh0IGVudHJ5IHRvIHByb2Nlc3MgKi8KKwl1MzIgc19jdXI7CQkvKiBjdXJyZW50IHdvcmsgcXVldWUgZW50cnkgKi8KKwl1MzIgc19sYXN0OwkJLyogbGFzdCB1bi1BQ0snZWQgZW50cnkgKi8KKwl1MzIgc19zc247CQkvKiBTU04gb2YgdGFpbCBlbnRyeSAqLworCXUzMiBzX2xzbjsJCS8qIGxpbWl0IHNlcXVlbmNlIG51bWJlciAoY3JlZGl0KSAqLworCXN0cnVjdCBpcGF0aF9zd3FlICpzX3dxOwkvKiBzZW5kIHdvcmsgcXVldWUgKi8KKwlzdHJ1Y3QgaXBhdGhfcnEgcl9ycTsJLyogcmVjZWl2ZSB3b3JrIHF1ZXVlICovCit9OworCisvKgorICogQml0IGRlZmluaXRpb25zIGZvciBzX2ZsYWdzLgorICovCisjZGVmaW5lIElQQVRIX1NfQlVTWQkJMAorI2RlZmluZSBJUEFUSF9TX1NJR05BTF9SRVFfV1IJMQorCisvKgorICogU2luY2Ugc3RydWN0IGlwYXRoX3N3cWUgaXMgbm90IGEgZml4ZWQgc2l6ZSwgd2UgY2FuJ3Qgc2ltcGx5IGluZGV4IGludG8KKyAqIHN0cnVjdCBpcGF0aF9xcC5zX3dxLiAgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhcnJheSBpbmRleCBjb21wdXRhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfc3dxZSAqZ2V0X3N3cWVfcHRyKHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCQkJCSAgICAgIHVuc2lnbmVkIG4pCit7CisJcmV0dXJuIChzdHJ1Y3QgaXBhdGhfc3dxZSAqKSgoY2hhciAqKXFwLT5zX3dxICsKKwkJCQkgICAgIChzaXplb2Yoc3RydWN0IGlwYXRoX3N3cWUpICsKKwkJCQkgICAgICBxcC0+c19tYXhfc2dlICoKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwYXRoX3NnZSkpICogbik7Cit9CisKKy8qCisgKiBTaW5jZSBzdHJ1Y3QgaXBhdGhfcndxZSBpcyBub3QgYSBmaXhlZCBzaXplLCB3ZSBjYW4ndCBzaW1wbHkgaW5kZXggaW50bworICogc3RydWN0IGlwYXRoX3JxLndxLiAgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhcnJheSBpbmRleCBjb21wdXRhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfcndxZSAqZ2V0X3J3cWVfcHRyKHN0cnVjdCBpcGF0aF9ycSAqcnEsCisJCQkJCSAgICAgIHVuc2lnbmVkIG4pCit7CisJcmV0dXJuIChzdHJ1Y3QgaXBhdGhfcndxZSAqKQorCQkoKGNoYXIgKikgcnEtPndxICsKKwkJIChzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpICsKKwkJICBycS0+bWF4X3NnZSAqIHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKSkgKiBuKTsKK30KKworLyoKKyAqIFFQTi1tYXAgcGFnZXMgc3RhcnQgb3V0IGFzIE5VTEwsIHRoZXkgZ2V0IGFsbG9jYXRlZCB1cG9uCisgKiBmaXJzdCB1c2UgYW5kIGFyZSBuZXZlciBkZWFsbG9jYXRlZC4gVGhpcyB3YXksCisgKiBsYXJnZSBiaXRtYXBzIGFyZSBub3QgYWxsb2NhdGVkIHVubGVzcyBsYXJnZSBudW1iZXJzIG9mIFFQcyBhcmUgdXNlZC4KKyAqLworc3RydWN0IHFwbl9tYXAgeworCWF0b21pY190IG5fZnJlZTsKKwl2b2lkICpwYWdlOworfTsKKworc3RydWN0IGlwYXRoX3FwX3RhYmxlIHsKKwlzcGlubG9ja190IGxvY2s7CisJdTMyIGxhc3Q7CQkvKiBsYXN0IFFQIG51bWJlciBhbGxvY2F0ZWQgKi8KKwl1MzIgbWF4OwkJLyogc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSAqLworCXUzMiBubWFwczsJCS8qIHNpemUgb2YgdGhlIG1hcCB0YWJsZSAqLworCXN0cnVjdCBpcGF0aF9xcCAqKnRhYmxlOworCS8qIGJpdCBtYXAgb2YgZnJlZSBudW1iZXJzICovCisJc3RydWN0IHFwbl9tYXAgbWFwW1FQTk1BUF9FTlRSSUVTXTsKK307CisKK3N0cnVjdCBpcGF0aF9sa2V5X3RhYmxlIHsKKwlzcGlubG9ja190IGxvY2s7CisJdTMyIG5leHQ7CQkvKiBuZXh0IHVudXNlZCBpbmRleCAoc3BlZWRzIHNlYXJjaCkgKi8KKwl1MzIgZ2VuOwkJLyogZ2VuZXJhdGlvbiBjb3VudCAqLworCXUzMiBtYXg7CQkvKiBzaXplIG9mIHRoZSB0YWJsZSAqLworCXN0cnVjdCBpcGF0aF9tcmVnaW9uICoqdGFibGU7Cit9OworCitzdHJ1Y3QgaXBhdGhfb3Bjb2RlX3N0YXRzIHsKKwl1NjQgbl9wYWNrZXRzOwkJLyogbnVtYmVyIG9mIHBhY2tldHMgKi8KKwl1NjQgbl9ieXRlczsJCS8qIHRvdGFsIG51bWJlciBvZiBieXRlcyAqLworfTsKKworc3RydWN0IGlwYXRoX2liZGV2IHsKKwlzdHJ1Y3QgaWJfZGV2aWNlIGliZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCWludCBpYl91bml0OwkJLyogVGhpcyBpcyB0aGUgZGV2aWNlIG51bWJlciAqLworCXUxNiBzbV9saWQ7CQkvKiBpbiBob3N0IG9yZGVyICovCisJdTggc21fc2w7CisJdTggbWtleXByb3RfcmVzdl9sbWM7CisJLyogbm9uLXplcm8gd2hlbiB0aW1lciBpcyBzZXQgKi8KKwl1bnNpZ25lZCBsb25nIG1rZXlfbGVhc2VfdGltZW91dDsKKworCS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZWFsbHkgcGVyIHBvcnQuICovCisJc3RydWN0IGlwYXRoX3FwX3RhYmxlIHFwX3RhYmxlOworCXN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlIGxrX3RhYmxlOworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ1szXTsJLyogRklGTyBvZiBRUHMgd2FpdGluZyBmb3IgQUNLcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGlvd2FpdDsJLyogbGlzdCBmb3Igd2FpdCBQSU8gYnVmICovCisJLyogbGlzdCBvZiBRUHMgd2FpdGluZyBmb3IgUk5SIHRpbWVyICovCisJc3RydWN0IGxpc3RfaGVhZCBybnJ3YWl0OworCXNwaW5sb2NrX3QgcGVuZGluZ19sb2NrOworCV9fYmU2NCBzeXNfaW1hZ2VfZ3VpZDsJLyogaW4gbmV0d29yayBvcmRlciAqLworCV9fYmU2NCBnaWRfcHJlZml4OwkvKiBpbiBuZXR3b3JrIG9yZGVyICovCisJX19iZTY0IG1rZXk7CisJdTY0IGlwYXRoX3N3b3JkOwkvKiB0b3RhbCBkd29yZHMgc2VudCAoc2FtcGxlIHJlc3VsdCkgKi8KKwl1NjQgaXBhdGhfcndvcmQ7CS8qIHRvdGFsIGR3b3JkcyByZWNlaXZlZCAoc2FtcGxlIHJlc3VsdCkgKi8KKwl1NjQgaXBhdGhfc3BrdHM7CS8qIHRvdGFsIHBhY2tldHMgc2VudCAoc2FtcGxlIHJlc3VsdCkgKi8KKwl1NjQgaXBhdGhfcnBrdHM7CS8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQgKHNhbXBsZSByZXN1bHQpICovCisJLyogIyBvZiB0aWNrcyBubyBkYXRhIHNlbnQgKHNhbXBsZSByZXN1bHQpICovCisJdTY0IGlwYXRoX3htaXRfd2FpdDsKKwl1NjQgcmN2X2Vycm9yczsJCS8qICMgb2YgcGFja2V0cyB3aXRoIFNXIGRldGVjdGVkIHJjdiBlcnJzICovCisJdTY0IG5fdW5pY2FzdF94bWl0OwkvKiB0b3RhbCB1bmljYXN0IHBhY2tldHMgc2VudCAqLworCXU2NCBuX3VuaWNhc3RfcmN2OwkvKiB0b3RhbCB1bmljYXN0IHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1NjQgbl9tdWx0aWNhc3RfeG1pdDsJLyogdG90YWwgbXVsdGljYXN0IHBhY2tldHMgc2VudCAqLworCXU2NCBuX211bHRpY2FzdF9yY3Y7CS8qIHRvdGFsIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkICovCisJdTY0IG5fc3ltYm9sX2Vycm9yX2NvdW50ZXI7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9saW5rX2Rvd25lZF9jb3VudGVyOwkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCisJdTY0IG5fcG9ydF9yY3ZfZXJyb3JzOwkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCisJdTY0IG5fcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9wb3J0X3htaXRfZGlzY2FyZHM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9wb3J0X3htaXRfZGF0YTsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX3BvcnRfcmN2X2RhdGE7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgbl9wb3J0X3htaXRfcGFja2V0czsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCBuX3BvcnRfcmN2X3BhY2tldHM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1MzIgbl9wa2V5X3Zpb2xhdGlvbnM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1MzIgbl9yY19yZXNlbmRzOworCXUzMiBuX3JjX2Fja3M7CisJdTMyIG5fcmNfcWFja3M7CisJdTMyIG5fc2VxX25ha3M7CisJdTMyIG5fcmRtYV9zZXE7CisJdTMyIG5fcm5yX25ha3M7CisJdTMyIG5fb3RoZXJfbmFrczsKKwl1MzIgbl90aW1lb3V0czsKKwl1MzIgbl9wa3RfZHJvcHM7CisJdTMyIG5fd3FlX2VycnM7CisJdTMyIG5fcmRtYV9kdXBfYnVzeTsKKwl1MzIgbl9waW93YWl0OworCXUzMiBuX25vX3Bpb2J1ZjsKKwl1MzIgcG9ydF9jYXBfZmxhZ3M7CisJdTMyIHBtYV9zYW1wbGVfc3RhcnQ7CisJdTMyIHBtYV9zYW1wbGVfaW50ZXJ2YWw7CisJX19iZTE2IHBtYV9jb3VudGVyX3NlbGVjdFs1XTsKKwl1MTYgcG1hX3RhZzsKKwl1MTYgcWtleV92aW9sYXRpb25zOworCXUxNiBta2V5X3Zpb2xhdGlvbnM7CisJdTE2IG1rZXlfbGVhc2VfcGVyaW9kOworCXUxNiBwZW5kaW5nX2luZGV4OwkvKiB3aGljaCBwZW5kaW5nIHF1ZXVlIGlzIGFjdGl2ZSAqLworCXU4IHBtYV9zYW1wbGVfc3RhdHVzOworCXU4IHN1Ym5ldF90aW1lb3V0OworCXU4IGxpbmtfd2lkdGhfZW5hYmxlZDsKKwl1OCB2bF9oaWdoX2xpbWl0OworCXN0cnVjdCBpcGF0aF9vcGNvZGVfc3RhdHMgb3BzdGF0c1sxMjhdOworfTsKKworc3RydWN0IGlwYXRoX3Vjb250ZXh0IHsKKwlzdHJ1Y3QgaWJfdWNvbnRleHQgaWJ1Y29udGV4dDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX21yICp0b19pbXIoc3RydWN0IGliX21yICppYm1yKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJtciwgc3RydWN0IGlwYXRoX21yLCBpYm1yKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfZm1yICp0b19pZm1yKHN0cnVjdCBpYl9mbXIgKmliZm1yKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJmbXIsIHN0cnVjdCBpcGF0aF9mbXIsIGliZm1yKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfcGQgKnRvX2lwZChzdHJ1Y3QgaWJfcGQgKmlicGQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnBkLCBzdHJ1Y3QgaXBhdGhfcGQsIGlicGQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9haCAqdG9faWFoKHN0cnVjdCBpYl9haCAqaWJhaCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGliYWgsIHN0cnVjdCBpcGF0aF9haCwgaWJhaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX2NxICp0b19pY3Eoc3RydWN0IGliX2NxICppYmNxKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJjcSwgc3RydWN0IGlwYXRoX2NxLCBpYmNxKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfc3JxICp0b19pc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJzcnEsIHN0cnVjdCBpcGF0aF9zcnEsIGlic3JxKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfcXAgKnRvX2lxcChzdHJ1Y3QgaWJfcXAgKmlicXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgaXBhdGhfcXAsIGlicXApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9pYmRldiAqdG9faWRldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgaXBhdGhfaWJkZXYsIGliZGV2KTsKK30KKworaW50IGlwYXRoX3Byb2Nlc3NfbWFkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkgICAgICBpbnQgbWFkX2ZsYWdzLAorCQkgICAgICB1OCBwb3J0X251bSwKKwkJICAgICAgc3RydWN0IGliX3djICppbl93YywKKwkJICAgICAgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAorCQkgICAgICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF91Y29udGV4dCAqdG9faXVjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dAorCQkJCQkJICAqaWJ1Y29udGV4dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlidWNvbnRleHQsIHN0cnVjdCBpcGF0aF91Y29udGV4dCwgaWJ1Y29udGV4dCk7Cit9CisKKy8qCisgKiBDb21wYXJlIHRoZSBsb3dlciAyNCBiaXRzIG9mIHRoZSB0d28gdmFsdWVzLgorICogUmV0dXJucyBhbiBpbnRlZ2VyIDwsID09LCBvciA+IHRoYW4gemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXBhdGhfY21wMjQodTMyIGEsIHUzMiBiKQoreworCXJldHVybiAoKChpbnQpIGEpIC0gKChpbnQpIGIpKSA8PCA4OworfQorCitzdHJ1Y3QgaXBhdGhfbWNhc3QgKmlwYXRoX21jYXN0X2ZpbmQodW5pb24gaWJfZ2lkICptZ2lkKTsKKworaW50IGlwYXRoX211bHRpY2FzdF9hdHRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCk7CisKK2ludCBpcGF0aF9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOworCitpbnQgaXBhdGhfbWNhc3RfdHJlZV9lbXB0eSh2b2lkKTsKKworX19iZTMyIGlwYXRoX2NvbXB1dGVfYWV0aChzdHJ1Y3QgaXBhdGhfcXAgKnFwKTsKKworc3RydWN0IGlwYXRoX3FwICppcGF0aF9sb29rdXBfcXBuKHN0cnVjdCBpcGF0aF9xcF90YWJsZSAqcXB0LCB1MzIgcXBuKTsKKworc3RydWN0IGliX3FwICppcGF0aF9jcmVhdGVfcXAoc3RydWN0IGliX3BkICppYnBkLAorCQkJICAgICAgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyLAorCQkJICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CisKK2ludCBpcGF0aF9kZXN0cm95X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCk7CisKK2ludCBpcGF0aF9tb2RpZnlfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwKKwkJICAgIGludCBhdHRyX21hc2spOworCitpbnQgaXBhdGhfcXVlcnlfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwKKwkJICAgaW50IGF0dHJfbWFzaywgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyKTsKKwordm9pZCBpcGF0aF9mcmVlX2FsbF9xcHMoc3RydWN0IGlwYXRoX3FwX3RhYmxlICpxcHQpOworCitpbnQgaXBhdGhfaW5pdF9xcF90YWJsZShzdHJ1Y3QgaXBhdGhfaWJkZXYgKmlkZXYsIGludCBzaXplKTsKKwordm9pZCBpcGF0aF9zcWVycm9yX3FwKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpYl93YyAqd2MpOworCit2b2lkIGlwYXRoX2dldF9jcmVkaXQoc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIGFldGgpOworCit2b2lkIGlwYXRoX2RvX3JjX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKTsKKwordm9pZCBpcGF0aF9kb191Y19zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3ZvaWQgaXBhdGhfY3FfZW50ZXIoc3RydWN0IGlwYXRoX2NxICpjcSwgc3RydWN0IGliX3djICplbnRyeSwgaW50IHNpZyk7CisKK2ludCBpcGF0aF9ya2V5X29rKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJICB1MzIgbGVuLCB1NjQgdmFkZHIsIHUzMiBya2V5LCBpbnQgYWNjKTsKKworaW50IGlwYXRoX2xrZXlfb2soc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwgc3RydWN0IGlwYXRoX3NnZSAqaXNnZSwKKwkJICBzdHJ1Y3QgaWJfc2dlICpzZ2UsIGludCBhY2MpOworCit2b2lkIGlwYXRoX2NvcHlfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB2b2lkICpkYXRhLCB1MzIgbGVuZ3RoKTsKKwordm9pZCBpcGF0aF9za2lwX3NnZShzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywgdTMyIGxlbmd0aCk7CisKK2ludCBpcGF0aF9wb3N0X3JjX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyKTsKKwordm9pZCBpcGF0aF91Y19yY3Yoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgKmhkciwKKwkJICBpbnQgaGFzX2dyaCwgdm9pZCAqZGF0YSwgdTMyIHRsZW4sIHN0cnVjdCBpcGF0aF9xcCAqcXApOworCit2b2lkIGlwYXRoX3JjX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAorCQkgIGludCBoYXNfZ3JoLCB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCk7CisKK3ZvaWQgaXBhdGhfcmVzdGFydF9yYyhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgcHNuLCBzdHJ1Y3QgaWJfd2MgKndjKTsKKworaW50IGlwYXRoX3Bvc3RfdWRfc2VuZChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IpOworCit2b2lkIGlwYXRoX3VkX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAorCQkgIGludCBoYXNfZ3JoLCB2b2lkICpkYXRhLCB1MzIgdGxlbiwgc3RydWN0IGlwYXRoX3FwICpxcCk7CisKK2ludCBpcGF0aF9hbGxvY19sa2V5KHN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QsCisJCSAgICAgc3RydWN0IGlwYXRoX21yZWdpb24gKm1yKTsKKwordm9pZCBpcGF0aF9mcmVlX2xrZXkoc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwgdTMyIGxrZXkpOworCitpbnQgaXBhdGhfbGtleV9vayhzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0LCBzdHJ1Y3QgaXBhdGhfc2dlICppc2dlLAorCQkgIHN0cnVjdCBpYl9zZ2UgKnNnZSwgaW50IGFjYyk7CisKK2ludCBpcGF0aF9ya2V5X29rKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJICB1MzIgbGVuLCB1NjQgdmFkZHIsIHUzMiBya2V5LCBpbnQgYWNjKTsKKworaW50IGlwYXRoX3Bvc3Rfc3JxX3JlY2VpdmUoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9yZWN2X3dyICp3ciwKKwkJCSAgIHN0cnVjdCBpYl9yZWN2X3dyICoqYmFkX3dyKTsKKworc3RydWN0IGliX3NycSAqaXBhdGhfY3JlYXRlX3NycShzdHJ1Y3QgaWJfcGQgKmlicGQsCisJCQkJc3RydWN0IGliX3NycV9pbml0X2F0dHIgKnNycV9pbml0X2F0dHIsCisJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CisKK2ludCBpcGF0aF9tb2RpZnlfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKmF0dHIsCisJCSAgICAgZW51bSBpYl9zcnFfYXR0cl9tYXNrIGF0dHJfbWFzayk7CisKK2ludCBpcGF0aF9xdWVyeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0cik7CisKK2ludCBpcGF0aF9kZXN0cm95X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSk7CisKK3ZvaWQgaXBhdGhfY3FfZW50ZXIoc3RydWN0IGlwYXRoX2NxICpjcSwgc3RydWN0IGliX3djICplbnRyeSwgaW50IHNpZyk7CisKK2ludCBpcGF0aF9wb2xsX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgaW50IG51bV9lbnRyaWVzLCBzdHJ1Y3QgaWJfd2MgKmVudHJ5KTsKKworc3RydWN0IGliX2NxICppcGF0aF9jcmVhdGVfY3Eoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBlbnRyaWVzLAorCQkJICAgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CisKK2ludCBpcGF0aF9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqaWJjcSk7CisKK2ludCBpcGF0aF9yZXFfbm90aWZ5X2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnkgbm90aWZ5KTsKKworaW50IGlwYXRoX3Jlc2l6ZV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGludCBjcWUsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCitzdHJ1Y3QgaWJfbXIgKmlwYXRoX2dldF9kbWFfbXIoc3RydWN0IGliX3BkICpwZCwgaW50IGFjYyk7CisKK3N0cnVjdCBpYl9tciAqaXBhdGhfcmVnX3BoeXNfbXIoc3RydWN0IGliX3BkICpwZCwKKwkJCQlzdHJ1Y3QgaWJfcGh5c19idWYgKmJ1ZmZlcl9saXN0LAorCQkJCWludCBudW1fcGh5c19idWYsIGludCBhY2MsIHU2NCAqaW92YV9zdGFydCk7CisKK3N0cnVjdCBpYl9tciAqaXBhdGhfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnJlZ2lvbiwKKwkJCQlpbnQgbXJfYWNjZXNzX2ZsYWdzLAorCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCitpbnQgaXBhdGhfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1yKTsKKworc3RydWN0IGliX2ZtciAqaXBhdGhfYWxsb2NfZm1yKHN0cnVjdCBpYl9wZCAqcGQsIGludCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkgICAgICAgc3RydWN0IGliX2Ztcl9hdHRyICpmbXJfYXR0cik7CisKK2ludCBpcGF0aF9tYXBfcGh5c19mbXIoc3RydWN0IGliX2ZtciAqaWJmbXIsIHU2NCAqIHBhZ2VfbGlzdCwKKwkJICAgICAgIGludCBsaXN0X2xlbiwgdTY0IGlvdmEpOworCitpbnQgaXBhdGhfdW5tYXBfZm1yKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KTsKKworaW50IGlwYXRoX2RlYWxsb2NfZm1yKHN0cnVjdCBpYl9mbXIgKmliZm1yKTsKKwordm9pZCBpcGF0aF9ub19idWZzX2F2YWlsYWJsZShzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldik7CisKK3ZvaWQgaXBhdGhfaW5zZXJ0X3Jucl9xdWV1ZShzdHJ1Y3QgaXBhdGhfcXAgKnFwKTsKKworaW50IGlwYXRoX2dldF9yd3FlKHN0cnVjdCBpcGF0aF9xcCAqcXAsIGludCB3cl9pZF9vbmx5KTsKKwordm9pZCBpcGF0aF9ydWNfbG9vcGJhY2soc3RydWN0IGlwYXRoX3FwICpzcXAsIHN0cnVjdCBpYl93YyAqd2MpOworCitleHRlcm4gY29uc3QgZW51bSBpYl93Y19vcGNvZGUgaWJfaXBhdGhfd2Nfb3Bjb2RlW107CisKK2V4dGVybiBjb25zdCB1OCBpcGF0aF9jdnRfcGh5c3BvcnRzdGF0ZVtdOworCitleHRlcm4gY29uc3QgaW50IGliX2lwYXRoX3N0YXRlX29wc1tdOworCitleHRlcm4gdW5zaWduZWQgaW50IGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZTsKKworZXh0ZXJuIGNvbnN0IHUzMiBpYl9pcGF0aF9ybnJfdGFibGVbXTsKKworI2VuZGlmCQkJCS8qIElQQVRIX1ZFUkJTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMzFkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKworLyoKKyAqIEdsb2JhbCB0YWJsZSBvZiBHSUQgdG8gYXR0YWNoZWQgUVBzLgorICogVGhlIHRhYmxlIGlzIGdsb2JhbCB0byBhbGwgaXBhdGggZGV2aWNlcyBzaW5jZSBhIHNlbmQgZnJvbSBvbmUgUVAvZGV2aWNlCisgKiBuZWVkcyB0byBiZSBsb2NhbGx5IHJvdXRlZCB0byBhbnkgbG9jYWxseSBhdHRhY2hlZCBRUHMgb24gdGhlIHNhbWUKKyAqIG9yIGRpZmZlcmVudCBkZXZpY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBtY2FzdF90cmVlOworc3RhdGljIERFRklORV9TUElOTE9DSyhtY2FzdF9sb2NrKTsKKworLyoqCisgKiBpcGF0aF9tY2FzdF9xcF9hbGxvYyAtIGFsbG9jIGEgc3RydWN0IHRvIGxpbmsgYSBRUCB0byBtY2FzdCBHSUQgc3RydWN0CisgKiBAcXA6IHRoZSBRUCB0byBsaW5rCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKmlwYXRoX21jYXN0X3FwX2FsbG9jKHN0cnVjdCBpcGF0aF9xcCAqcXApCit7CisJc3RydWN0IGlwYXRoX21jYXN0X3FwICptcXA7CisKKwltcXAgPSBrbWFsbG9jKHNpemVvZiAqbXFwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1xcCkKKwkJZ290byBiYWlsOworCisJbXFwLT5xcCA9IHFwOworCWF0b21pY19pbmMoJnFwLT5yZWZjb3VudCk7CisKK2JhaWw6CisJcmV0dXJuIG1xcDsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfbWNhc3RfcXBfZnJlZShzdHJ1Y3QgaXBhdGhfbWNhc3RfcXAgKm1xcCkKK3sKKwlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gbXFwLT5xcDsKKworCS8qIE5vdGlmeSBpcGF0aF9kZXN0cm95X3FwKCkgaWYgaXQgaXMgd2FpdGluZy4gKi8KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJd2FrZV91cCgmcXAtPndhaXQpOworCisJa2ZyZWUobXFwKTsKK30KKworLyoqCisgKiBpcGF0aF9tY2FzdF9hbGxvYyAtIGFsbG9jYXRlIHRoZSBtdWx0aWNhc3QgR0lEIHN0cnVjdHVyZQorICogQG1naWQ6IHRoZSBtdWx0aWNhc3QgR0lECisgKgorICogQSBsaXN0IG9mIFFQcyB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoaXMgc3RydWN0dXJlLgorICovCitzdGF0aWMgc3RydWN0IGlwYXRoX21jYXN0ICppcGF0aF9tY2FzdF9hbGxvYyh1bmlvbiBpYl9naWQgKm1naWQpCit7CisJc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdDsKKworCW1jYXN0ID0ga21hbGxvYyhzaXplb2YgKm1jYXN0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jYXN0KQorCQlnb3RvIGJhaWw7CisKKwltY2FzdC0+bWdpZCA9ICptZ2lkOworCUlOSVRfTElTVF9IRUFEKCZtY2FzdC0+cXBfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWNhc3QtPndhaXQpOworCWF0b21pY19zZXQoJm1jYXN0LT5yZWZjb3VudCwgMCk7CisKK2JhaWw6CisJcmV0dXJuIG1jYXN0OworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9tY2FzdF9mcmVlKHN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3QpCit7CisJc3RydWN0IGlwYXRoX21jYXN0X3FwICpwLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJm1jYXN0LT5xcF9saXN0LCBsaXN0KQorCQlpcGF0aF9tY2FzdF9xcF9mcmVlKHApOworCisJa2ZyZWUobWNhc3QpOworfQorCisvKioKKyAqIGlwYXRoX21jYXN0X2ZpbmQgLSBzZWFyY2ggdGhlIGdsb2JhbCB0YWJsZSBmb3IgdGhlIGdpdmVuIG11bHRpY2FzdCBHSUQKKyAqIEBtZ2lkOiB0aGUgbXVsdGljYXN0IEdJRCB0byBzZWFyY2ggZm9yCisgKgorICogUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZWNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBpZiBmb3VuZC4KKyAqLworc3RydWN0IGlwYXRoX21jYXN0ICppcGF0aF9tY2FzdF9maW5kKHVuaW9uIGliX2dpZCAqbWdpZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3Q7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCW4gPSBtY2FzdF90cmVlLnJiX25vZGU7CisJd2hpbGUgKG4pIHsKKwkJaW50IHJldDsKKworCQltY2FzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpcGF0aF9tY2FzdCwgcmJfbm9kZSk7CisKKwkJcmV0ID0gbWVtY21wKG1naWQtPnJhdywgbWNhc3QtPm1naWQucmF3LAorCQkJICAgICBzaXplb2YodW5pb24gaWJfZ2lkKSk7CisJCWlmIChyZXQgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJldCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJYXRvbWljX2luYygmbWNhc3QtPnJlZmNvdW50KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisKKwltY2FzdCA9IE5VTEw7CisKK2JhaWw6CisJcmV0dXJuIG1jYXN0OworfQorCisvKioKKyAqIGlwYXRoX21jYXN0X2FkZCAtIGluc2VydCBtY2FzdCBHSUQgaW50byB0YWJsZSBhbmQgYXR0YWNoIFFQIHN0cnVjdAorICogQG1jYXN0OiB0aGUgbWNhc3QgR0lEIHRhYmxlCisgKiBAbXFwOiB0aGUgUVAgdG8gYXR0YWNoCisgKgorICogUmV0dXJuIHplcm8gaWYgYm90aCB3ZXJlIGFkZGVkLiAgUmV0dXJuIEVFWElTVCBpZiB0aGUgR0lEIHdhcyBhbHJlYWR5IGluCisgKiB0aGUgdGFibGUgYnV0IHRoZSBRUCB3YXMgYWRkZWQuICBSZXR1cm4gRVNSQ0ggaWYgdGhlIFFQIHdhcyBhbHJlYWR5CisgKiBhdHRhY2hlZCBhbmQgbmVpdGhlciBzdHJ1Y3R1cmUgd2FzIGFkZGVkLgorICovCitzdGF0aWMgaW50IGlwYXRoX21jYXN0X2FkZChzdHJ1Y3QgaXBhdGhfbWNhc3QgKm1jYXN0LAorCQkJICAgc3RydWN0IGlwYXRoX21jYXN0X3FwICptcXApCit7CisJc3RydWN0IHJiX25vZGUgKipuID0gJm1jYXN0X3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcG4gPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoKm4pIHsKKwkJc3RydWN0IGlwYXRoX21jYXN0ICp0bWNhc3Q7CisJCXN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqcDsKKworCQlwbiA9ICpuOworCQl0bWNhc3QgPSByYl9lbnRyeShwbiwgc3RydWN0IGlwYXRoX21jYXN0LCByYl9ub2RlKTsKKworCQlyZXQgPSBtZW1jbXAobWNhc3QtPm1naWQucmF3LCB0bWNhc3QtPm1naWQucmF3LAorCQkJICAgICBzaXplb2YodW5pb24gaWJfZ2lkKSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQluID0gJnBuLT5yYl9sZWZ0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJldCA+IDApIHsKKwkJCW4gPSAmcG4tPnJiX3JpZ2h0OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTZWFyY2ggdGhlIFFQIGxpc3QgdG8gc2VlIGlmIHRoaXMgaXMgYWxyZWFkeSB0aGVyZS4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJnRtY2FzdC0+cXBfbGlzdCwgbGlzdCkgeworCQkJaWYgKHAtPnFwID09IG1xcC0+cXApIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisJCQkJcmV0ID0gRVNSQ0g7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZtcXAtPmxpc3QsICZ0bWNhc3QtPnFwX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisJCXJldCA9IEVFWElTVDsKKwkJZ290byBiYWlsOworCX0KKworCWxpc3RfYWRkX3RhaWxfcmN1KCZtcXAtPmxpc3QsICZtY2FzdC0+cXBfbGlzdCk7CisKKwlhdG9taWNfaW5jKCZtY2FzdC0+cmVmY291bnQpOworCXJiX2xpbmtfbm9kZSgmbWNhc3QtPnJiX25vZGUsIHBuLCBuKTsKKwlyYl9pbnNlcnRfY29sb3IoJm1jYXN0LT5yYl9ub2RlLCAmbWNhc3RfdHJlZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcGF0aF9tdWx0aWNhc3RfYXR0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCit7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IHRvX2lxcChpYnFwKTsKKwlzdHJ1Y3QgaXBhdGhfbWNhc3QgKm1jYXN0OworCXN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqbXFwOworCWludCByZXQ7CisKKwkvKgorCSAqIEFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBzaW5jZSBpdHMgYmV0dGVyIHRvIGRvIHRoaXMgb3V0c2lkZSBvZgorCSAqIHNwaW4gbG9ja3MgYW5kIGl0IHdpbGwgbW9zdCBsaWtlbHkgYmUgbmVlZGVkLgorCSAqLworCW1jYXN0ID0gaXBhdGhfbWNhc3RfYWxsb2MoZ2lkKTsKKwlpZiAobWNhc3QgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCW1xcCA9IGlwYXRoX21jYXN0X3FwX2FsbG9jKHFwKTsKKwlpZiAobXFwID09IE5VTEwpIHsKKwkJaXBhdGhfbWNhc3RfZnJlZShtY2FzdCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJc3dpdGNoIChpcGF0aF9tY2FzdF9hZGQobWNhc3QsIG1xcCkpIHsKKwljYXNlIEVTUkNIOgorCQkvKiBOZWl0aGVyIHdhcyB1c2VkOiBjYW4ndCBhdHRhY2ggdGhlIHNhbWUgUVAgdHdpY2UuICovCisJCWlwYXRoX21jYXN0X3FwX2ZyZWUobXFwKTsKKwkJaXBhdGhfbWNhc3RfZnJlZShtY2FzdCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwljYXNlIEVFWElTVDoJCS8qIFRoZSBtY2FzdCB3YXNuJ3QgdXNlZCAqLworCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfbXVsdGljYXN0X2RldGFjaChzdHJ1Y3QgaWJfcXAgKmlicXAsIHVuaW9uIGliX2dpZCAqZ2lkLCB1MTYgbGlkKQoreworCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSB0b19pcXAoaWJxcCk7CisJc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdCA9IE5VTEw7CisJc3RydWN0IGlwYXRoX21jYXN0X3FwICpwLCAqdG1wOworCXN0cnVjdCByYl9ub2RlICpuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxhc3QgPSAwOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCisJLyogRmluZCB0aGUgR0lEIGluIHRoZSBtY2FzdCB0YWJsZS4gKi8KKwluID0gbWNhc3RfdHJlZS5yYl9ub2RlOworCXdoaWxlICgxKSB7CisJCWlmIChuID09IE5VTEwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQltY2FzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpcGF0aF9tY2FzdCwgcmJfbm9kZSk7CisJCXJldCA9IG1lbWNtcChnaWQtPnJhdywgbWNhc3QtPm1naWQucmF3LAorCQkJICAgICBzaXplb2YodW5pb24gaWJfZ2lkKSk7CisJCWlmIChyZXQgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJldCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCS8qIFNlYXJjaCB0aGUgUVAgbGlzdC4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmbWNhc3QtPnFwX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHAtPnFwICE9IHFwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFdlIGZvdW5kIGl0LCBzbyByZW1vdmUgaXQsIGJ1dCBkb24ndCBwb2lzb24gdGhlIGZvcndhcmQKKwkJICogbGluayB1bnRpbCB3ZSBhcmUgc3VyZSB0aGVyZSBhcmUgbm8gbGlzdCB3YWxrZXJzLgorCQkgKi8KKwkJbGlzdF9kZWxfcmN1KCZwLT5saXN0KTsKKworCQkvKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBhdHRhY2hlZCBRUCwgcmVtb3ZlIHRoZSBHSUQgdG9vLiAqLworCQlpZiAobGlzdF9lbXB0eSgmbWNhc3QtPnFwX2xpc3QpKSB7CisJCQlyYl9lcmFzZSgmbWNhc3QtPnJiX25vZGUsICZtY2FzdF90cmVlKTsKKwkJCWxhc3QgPSAxOworCQl9CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwKSB7CisJCS8qCisJCSAqIFdhaXQgZm9yIGFueSBsaXN0IHdhbGtlcnMgdG8gZmluaXNoIGJlZm9yZSBmcmVlaW5nIHRoZQorCQkgKiBsaXN0IGVsZW1lbnQuCisJCSAqLworCQl3YWl0X2V2ZW50KG1jYXN0LT53YWl0LCBhdG9taWNfcmVhZCgmbWNhc3QtPnJlZmNvdW50KSA8PSAxKTsKKwkJaXBhdGhfbWNhc3RfcXBfZnJlZShwKTsKKwl9CisJaWYgKGxhc3QpIHsKKwkJYXRvbWljX2RlYygmbWNhc3QtPnJlZmNvdW50KTsKKwkJd2FpdF9ldmVudChtY2FzdC0+d2FpdCwgIWF0b21pY19yZWFkKCZtY2FzdC0+cmVmY291bnQpKTsKKwkJaXBhdGhfbWNhc3RfZnJlZShtY2FzdCk7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfbWNhc3RfdHJlZV9lbXB0eSh2b2lkKQoreworCXJldHVybiBtY2FzdF90cmVlLnJiX25vZGUgPT0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y194ODZfNjQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y194ODZfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM1MzIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3g4Nl82NC5jCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBjb25kaXRpb25hbGx5IGJ1aWx0IG9uIHg4Nl82NCBvbmx5LiAgT3RoZXJ3aXNlIHdlYWsgc3ltYm9sCisgKiB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gaGVyZSBhcmUgdXNlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKKworLyoqCisgKiBpcGF0aF9lbmFibGVfd2MgLSBlbmFibGUgd3JpdGUgY29tYmluaW5nIGZvciBNTUlPIHdyaXRlcyB0byB0aGUgZGV2aWNlCisgKiBAZGQ6IGluZmluaXBhdGggZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHg4Nl82NC1zcGVjaWZpYzsgaXQgdHdpZGRsZXMgdGhlIENQVSdzIE1UUlJzIHRvIGVuYWJsZQorICogd3JpdGUgY29tYmluaW5nLgorICovCitpbnQgaXBhdGhfZW5hYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1NjQgcGlvYWRkciwgcGlvbGVuOworCXVuc2lnbmVkIGJpdHM7CisJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRkLT5wY2lkZXYsIDApOworCWNvbnN0IHNpemVfdCBsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRkLT5wY2lkZXYsIDApOworCisJLyoKKwkgKiBTZXQgdGhlIFBJTyBidWZmZXJzIHRvIGJlIFdDQ09NQiwgc28gd2UgZ2V0IEhUIGJ1cnN0cyB0byB0aGUKKwkgKiBjaGlwLiAgTGludXggKHBvc3NpYmx5IHRoZSBoYXJkd2FyZSkgcmVxdWlyZXMgaXQgdG8gYmUgb24gYSBwb3dlcgorCSAqIG9mIDIgYWRkcmVzcyBtYXRjaGluZyB0aGUgbGVuZ3RoICh3aGljaCBoYXMgdG8gYmUgYSBwb3dlciBvZiAyKS4KKwkgKiBGb3IgcmV2MSwgdGhhdCBtZWFucyB0aGUgYmFzZSBhZGRyZXNzLCBmb3IgcmV2MiwgaXQgd2lsbCBiZSBqdXN0CisJICogdGhlIFBJTyBidWZmZXJzIHRoZW1zZWx2ZXMuCisJICovCisJcGlvYWRkciA9IGFkZHIgKyBkZC0+aXBhdGhfcGlvYnVmYmFzZTsKKwlwaW9sZW4gPSAoZGQtPmlwYXRoX3Bpb2JjbnQyayArCisJCSAgZGQtPmlwYXRoX3Bpb2JjbnQ0aykgKgorCQlBTElHTihkZC0+aXBhdGhfcGlvYmNudDJrICsKKwkJICAgICAgZGQtPmlwYXRoX3Bpb2JjbnQ0aywgZGQtPmlwYXRoX3BhbGlnbik7CisKKwlmb3IgKGJpdHMgPSAwOyAhKHBpb2xlbiAmICgxVUxMIDw8IGJpdHMpKTsgYml0cysrKQorCQkvKiBkbyBub3RoaW5nICovIDsKKworCWlmIChwaW9sZW4gIT0gKDFVTEwgPDwgYml0cykpIHsKKwkJcGlvbGVuID4+PSBiaXRzOworCQl3aGlsZSAocGlvbGVuID4+PSAxKQorCQkJYml0cysrOworCQlwaW9sZW4gPSAxVUxMIDw8IChiaXRzICsgMSk7CisJfQorCWlmIChwaW9hZGRyICYgKHBpb2xlbiAtIDEpKSB7CisJCXU2NCBhdG1wOworCQlpcGF0aF9kYmcoInBpb2FkZHIgJWxseCBub3Qgb24gcmlnaHQgYm91bmRhcnkgZm9yIHNpemUgIgorCQkJICAiJWxseCwgZml4aW5nXG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9hZGRyLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9sZW4pOworCQlhdG1wID0gcGlvYWRkciAmIH4ocGlvbGVuIC0gMSk7CisJCWlmIChhdG1wIDwgYWRkciB8fCAoYXRtcCArIHBpb2xlbikgPiAoYWRkciArIGxlbikpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJObyB3YXkgdG8gYWxpZ24gYWRkcmVzcy9zaXplICIKKwkJCQkgICAgICAiKCVsbHgvJWxseCksIG5vIFdDIG10cnJcbiIsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXRtcCwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9sZW4gPDwgMSk7CisJCQlyZXQgPSAtRU5PREVWOworCQl9IGVsc2UgeworCQkJaXBhdGhfZGJnKCJjaGFuZ2luZyBXQyBiYXNlIGZyb20gJWxseCB0byAlbGx4LCAiCisJCQkJICAibGVuIGZyb20gJWxseCB0byAlbGx4XG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGlvYWRkciwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGF0bXAsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9sZW4sCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9sZW4gPDwgMSk7CisJCQlwaW9hZGRyID0gYXRtcDsKKwkJCXBpb2xlbiA8PD0gMTsKKwkJfQorCX0KKworCWlmICghcmV0KSB7CisJCWludCBjb29raWU7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlNldHRpbmcgbXRyciBmb3IgY2hpcCB0byBXQyAiCisJCQkgICAiKGFkZHIgJWxseCwgbGVuPTB4JWxseClcbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwaW9hZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGlvbGVuKTsKKwkJY29va2llID0gbXRycl9hZGQocGlvYWRkciwgcGlvbGVuLCBNVFJSX1RZUEVfV1JDT01CLCAwKTsKKwkJaWYgKGNvb2tpZSA8IDApIHsKKwkJCXsKKwkJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJCQkgIm10cnJfYWRkKCkgIFdDIGZvciBQSU8gYnVmcyAiCisJCQkJCSAiZmFpbGVkICglZClcbiIsCisJCQkJCSBjb29raWUpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJTZXQgbXRyciBmb3IgY2hpcCB0byBXQywgIgorCQkJCSAgICJjb29raWUgaXMgJWRcbiIsIGNvb2tpZSk7CisJCQlkZC0+aXBhdGhfd2NfY29va2llID0gY29va2llOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF9kaXNhYmxlX3djIC0gZGlzYWJsZSB3cml0ZSBjb21iaW5pbmcgZm9yIE1NSU8gd3JpdGVzIHRvIHRoZSBkZXZpY2UKKyAqIEBkZDogaW5maW5pcGF0aCBkZXZpY2UKKyAqLwordm9pZCBpcGF0aF9kaXNhYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpZiAoZGQtPmlwYXRoX3djX2Nvb2tpZSkgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJ1bmRvaW5nIFdDQ09NQiBvbiBwaW8gYnVmZmVyc1xuIik7CisJCW10cnJfZGVsKGRkLT5pcGF0aF93Y19jb29raWUsIDAsIDApOworCQlkZC0+aXBhdGhfd2NfY29va2llID0gMDsKKwl9Cit9CisKKy8qKgorICogaXBhdGhfdW5vcmRlcmVkX3djIC0gaW5kaWNhdGUgd2hldGhlciB3cml0ZSBjb21iaW5pbmcgaXMgb3JkZXJlZAorICoKKyAqIEJlY2F1c2Ugb3VyIHBlcmZvcm1hbmNlIGRlcGVuZHMgb24gb3VyIGFiaWxpdHkgdG8gZG8gd3JpdGUgY29tYmluaW5nIG1taW8KKyAqIHdyaXRlcyBpbiB0aGUgbW9zdCBlZmZpY2llbnQgd2F5LCB3ZSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIG9uIGFuIEludGVsCisgKiBvciBBTUQgeDg2XzY0IHByb2Nlc3Nvci4gIEFNRCB4ODZfNjQgcHJvY2Vzc29ycyBmbHVzaCBXQyBidWZmZXJzIG91dCBpbgorICogdGhlIG9yZGVyIGNvbXBsZXRlZCwgYW5kIHNvIG5vIHNwZWNpYWwgZmx1c2hpbmcgaXMgcmVxdWlyZWQgdG8gZ2V0CisgKiBjb3JyZWN0IG9yZGVyaW5nLiAgSW50ZWwgcHJvY2Vzc29ycywgaG93ZXZlciwgd2lsbCBmbHVzaCB3cml0ZSBidWZmZXJzCisgKiBvdXQgaW4gInJhbmRvbSIgb3JkZXJzLCBhbmQgc28gZXhwbGljaXQgb3JkZXJpbmcgaXMgbmVlZGVkIGF0IHRpbWVzLgorICovCitpbnQgaXBhdGhfdW5vcmRlcmVkX3djKHZvaWQpCit7CisJcmV0dXJuIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcHNfY29tbW9uLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBzX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiN2NiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBzX2NvbW1vbi5oCkBAIC0wLDAgKzEsMjYzIEBACisjaWZuZGVmIElQU19DT01NT05fSAorI2RlZmluZSBJUFNfQ09NTU9OX0gKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCisKK3N0cnVjdCBpcGF0aF9oZWFkZXIgeworCS8qCisJICogVmVyc2lvbiAtIDQgYml0cywgUG9ydCAtIDQgYml0cywgVElEIC0gMTAgYml0cyBhbmQgT2Zmc2V0IC0KKwkgKiAxNCBiaXRzIGJlZm9yZSBFQ08gY2hhbmdlIH4yOCBEZWMgMDMuICBBZnRlciB0aGF0LCBWZXJzIDQsCisJICogUG9ydCAzLCBUSUQgMTEsIG9mZnNldCAxNC4KKwkgKi8KKwlfX2xlMzIgdmVyX3BvcnRfdGlkX29mZnNldDsKKwlfX2xlMTYgY2hrc3VtOworCV9fbGUxNiBwa3RfZmxhZ3M7Cit9OworCitzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyIHsKKwlfX2JlMTYgbHJoWzRdOworCV9fYmUzMiBidGhbM107CisJLyogZmllbGRzIGJlbG93IHRoaXMgcG9pbnQgYXJlIGluIGhvc3QgYnl0ZSBvcmRlciAqLworCXN0cnVjdCBpcGF0aF9oZWFkZXIgaXBoOworCV9fdTggc3ViX29wY29kZTsKKwlfX3U4IGZsYWdzOworCV9fdTE2IHNyY19yYW5rOworCS8qIDI0IGJpdHMuIFRoZSB1cHBlciA4IGJpdCBpcyBhdmFpbGFibGUgZm9yIG90aGVyIHVzZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGFja19zZXFfbnVtOjI0OworCQkJdW5zaWduZWQgcG9ydDo0OworCQkJdW5zaWduZWQgdW51c2VkOjQ7CisJCX07CisJCV9fdTMyIGFja19zZXFfbnVtX29yZzsKKwl9OworCV9fdTggZXhwZWN0ZWRfdGlkX3Nlc3Npb25faWQ7CisJX191OCB0aW55bGVuOwkJLyogdG8gYWlkIE1QSSAqLworCXVuaW9uIHsKKwkgICAgX191MTYgdGFnOwkJLyogdG8gYWlkIE1QSSAqLworCSAgICBfX3UxNiBtcWhkcjsJLyogZm9yIFBTTSBNUSAqLworCX07CisJdW5pb24geworCQlfX3UzMiBtcGlbNF07CS8qIHRvIGFpZCBNUEkgKi8KKwkJX191MzIgZGF0YVs0XTsKKwkJX191NjQgbXFbMl07CS8qIGZvciBQU00gTVEgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTE2IG10dTsKKwkJCV9fdTggbWFqb3JfdmVyOworCQkJX191OCBtaW5vcl92ZXI7CisJCQlfX3UzMiBub3RfdXNlZDsJLy9mcmVlCisJCQlfX3UzMiBydW5faWQ7CisJCQlfX3UzMiBjbGllbnRfdmVyOworCQl9OworCX07Cit9OworCitzdHJ1Y3QgZXRoZXJfaGVhZGVyIHsKKwlfX2JlMTYgbHJoWzRdOworCV9fYmUzMiBidGhbM107CisJc3RydWN0IGlwYXRoX2hlYWRlciBpcGg7CisJX191OCBzdWJfb3Bjb2RlOworCV9fdTggY21kOworCV9fYmUxNiBsaWQ7CisJX191MTYgbWFjWzNdOworCV9fdTggZnJhZ19udW07CisJX191OCBzZXFfbnVtOworCV9fbGUzMiBsZW47CisJLyogTVVTVCBiZSBvZiB3b3JkIHNpemUgZHVlIHRvIFBJTyB3cml0ZSByZXF1aXJlbWVudHMgKi8KKwlfX2xlMzIgY3N1bTsKKwlfX2xlMTYgY3N1bV9vZmZzZXQ7CisJX19sZTE2IGZsYWdzOworCV9fdTE2IGZpcnN0XzJfYnl0ZXM7CisJX191OCB1bnVzZWRbMl07CQkvKiBjdXJyZW50bHkgdW51c2VkICovCit9OworCisvKgorICogVGhlIFBJTyBidWZmZXIgdXNlZCBmb3Igc2VuZGluZyBpbmZpbmlwYXRoIG1lc3NhZ2VzIG11c3Qgb25seSBiZSB3cml0dGVuCisgKiBpbiAzMi1iaXQgd29yZHMsIGFsbCB0aGUgZGF0YSBtdXN0IGJlIHdyaXR0ZW4sIGFuZCBubyB3cml0ZXMgY2FuIG9jY3VyCisgKiBhZnRlciB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4gKHdoaWNoIHRyYW5zZmVycyAib3duZXJzaGlwIiBvZiB0aGUgYnVmZmVyCisgKiB0byB0aGUgY2hpcCBhbmQgdHJpZ2dlcnMgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCkuCisgKiBTaW5jZSB0aGUgTGludXggc2tfYnVmZiBzdHJ1Y3R1cmUgY2FuIGJlIHJlY3Vyc2l2ZSwgbm9uLWFsaWduZWQsIGFuZAorICogYW55IG51bWJlciBvZiBieXRlcyBpbiBlYWNoIHNlZ21lbnQsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZQorICogdG8ga2VlcCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgY29weSBvcGVyYXRpb24uCisgKiBUaGlzIGlzIHVzZWQgdG8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHN0b3JlIHRoZSBjaGVja3N1bQorICogaW4gdGhlIHJpZ2h0IHBsYWNlIGJlZm9yZSBzZW5kaW5nIHRoZSBsYXN0IHdvcmQgdG8gdGhlIGhhcmR3YXJlIGFuZAorICogdG8gYnVmZmVyIHRoZSBsYXN0IDAtMyBieXRlcyBvZiBub24td29yZCBzaXplZCBzZWdtZW50cy4KKyAqLworc3RydWN0IGNvcHlfZGF0YV9zIHsKKwlzdHJ1Y3QgZXRoZXJfaGVhZGVyICpoZHI7CisJLyogYWRkciBvZiBQSU8gYnVmIHRvIHdyaXRlIGNzdW0gdG8gKi8KKwlfX3UzMiBfX2lvbWVtICpjc3VtX3BpbzsKKwlfX3UzMiBfX2lvbWVtICp0bzsJLyogYWRkciBvZiBQSU8gYnVmIHRvIHdyaXRlIGRhdGEgdG8gKi8KKwlfX3UzMiBkZXZpY2U7CQkvKiB3aGljaCBkZXZpY2UgdG8gYWxsb2NhdGUgUElPIGJ1ZnMgZnJvbSAqLworCV9fczMyIGVycm9yOwkJLyogc2V0IGlmIHRoZXJlIGlzIGFuIGVycm9yLiAqLworCV9fczMyIGV4dHJhOwkJLyogYW1vdW50IG9mIGRhdGEgc2F2ZWQgaW4gdS5idWYgYmVsb3cgKi8KKwlfX3UzMiBsZW47CQkvKiB0b3RhbCBsZW5ndGggdG8gc2VuZCBpbiBieXRlcyAqLworCV9fdTMyIGZsZW47CQkvKiBmcmFtZW50IGxlbmd0aCBpbiB3b3JkcyAqLworCV9fdTMyIGNzdW07CQkvKiBwYXJ0aWFsIElQIGNoZWNrc3VtICovCisJX191MzIgcG9zOwkJLyogcG9zaXRpb24gZm9yIHBhcnRpYWwgY2hlY2tzdW0gKi8KKwlfX3UzMiBvZmZzZXQ7CQkvKiBvZmZzZXQgdG8gd2hlcmUgZGF0YSBjdXJyZW50bHkgc3RhcnRzICovCisJX19zMzIgY2hlY2tzdW1fY2FsYzsJLyogc2V0IHRvIDEgd2hlbiBjc3VtIGhhcyBiZWVuIGNhbGN1bGF0ZWQgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuaW9uIHsKKwkJX191MzIgdzsKKwkJX191OCBidWZbNF07CisJfSB1OworfTsKKworLyogSUIgLSBMUkggaGVhZGVyIGNvbnN0cyAqLworI2RlZmluZSBJUFNfTFJIX0dSSCAweDAwMDMJLyogMS4gd29yZCBvZiBJQiBMUkggLSBuZXh0IGhlYWRlcjogR1JIICovCisjZGVmaW5lIElQU19MUkhfQlRIIDB4MDAwMgkvKiAxLiB3b3JkIG9mIElCIExSSCAtIG5leHQgaGVhZGVyOiBCVEggKi8KKworI2RlZmluZSBJUFNfT0ZGU0VUICAwCisKKy8qCisgKiBkZWZpbmVzIHRoZSBjdXQtb2ZmIHBvaW50IGJldHdlZW4gdGhlIGhlYWRlciBxdWV1ZSBhbmQgZWFnZXIvZXhwZWN0ZWQKKyAqIFRJRCBxdWV1ZQorICovCisjZGVmaW5lIE5VTV9PRl9FWFRSQV9XT1JEU19JTl9IRUFERVJfUVVFVUUgXAorCSgoc2l6ZW9mKHN0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIpIC0gXAorCSAgb2Zmc2V0b2Yoc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlciwgaXBoKSkgPj4gMikKKworLyogT3BDb2RlcyAgKi8KKyNkZWZpbmUgT1BDT0RFX0lQUyAweEMwCisjZGVmaW5lIE9QQ09ERV9JVEg0WCAweEMxCisKKy8qIE9wQ29kZSAzMCBpcyB1c2UgYnkgc3RhbmQtYWxvbmUgdGVzdCBwcm9ncmFtcyAgKi8KKyNkZWZpbmUgT1BDT0RFX1JBV19EQVRBIDB4REUKKy8qIGxhc3QgT3BDb2RlICgzMSkgaXMgcmVzZXJ2ZWQgZm9yIHRlc3QgICovCisjZGVmaW5lIE9QQ09ERV9URVNUIDB4REYKKworLyogc3ViIE9wQ29kZXMgLSBpcHMgICovCisjZGVmaW5lIE9QQ09ERV9TRVFfREFUQSAweDAxCisjZGVmaW5lIE9QQ09ERV9TRVFfQ1RSTCAweDAyCisKKyNkZWZpbmUgT1BDT0RFX1NFUV9NUV9EQVRBIDB4MDMKKyNkZWZpbmUgT1BDT0RFX1NFUV9NUV9DVFJMIDB4MDQKKworI2RlZmluZSBPUENPREVfQUNLIDB4MTAKKyNkZWZpbmUgT1BDT0RFX05BSyAweDExCisKKyNkZWZpbmUgT1BDT0RFX0VSUl9DSEsgMHgyMAorI2RlZmluZSBPUENPREVfRVJSX0NIS19QTFMgMHgyMQorCisjZGVmaW5lIE9QQ09ERV9TVEFSVFVQIDB4MzAKKyNkZWZpbmUgT1BDT0RFX1NUQVJUVVBfQUNLIDB4MzEKKyNkZWZpbmUgT1BDT0RFX1NUQVJUVVBfTkFLIDB4MzIKKworI2RlZmluZSBPUENPREVfU1RBUlRVUF9FWFQgMHgzNAorI2RlZmluZSBPUENPREVfU1RBUlRVUF9BQ0tfRVhUIDB4MzUKKyNkZWZpbmUgT1BDT0RFX1NUQVJUVVBfTkFLX0VYVCAweDM2CisKKyNkZWZpbmUgT1BDT0RFX1RJRFNfUkVMRUFTRSAweDQwCisjZGVmaW5lIE9QQ09ERV9USURTX1JFTEVBU0VfQ09ORklSTSAweDQxCisKKyNkZWZpbmUgT1BDT0RFX0NMT1NFIDB4NTAKKyNkZWZpbmUgT1BDT0RFX0NMT1NFX0FDSyAweDUxCisvKgorICogbGlrZSBPUENPREVfQ0xPU0UsIGJ1dCBubyBjb21wbGFpbnQgaWYgb3RoZXIgc2lkZSBoYXMgYWxyZWFkeSBjbG9zZWQuCisgKiBVc2VkIHdoZW4gZG9pbmcgYWJvcnQoKSwgTVBJX0Fib3J0KCksIGV0Yy4KKyAqLworI2RlZmluZSBPUENPREVfQUJPUlQgMHg1MgorCisvKiBzdWIgT3BDb2RlcyAtIGl0aDR4ICAqLworI2RlZmluZSBPUENPREVfRU5DQVAgMHg4MQorI2RlZmluZSBPUENPREVfTElEX0FSUCAweDgyCisKKy8qIFJlY2VpdmUgSGVhZGVyIFF1ZXVlOiByZWNlaXZlIHR5cGUgKGZyb20gaW5maW5pcGF0aCkgKi8KKyNkZWZpbmUgUkNWSFFfUkNWX1RZUEVfRVhQRUNURUQgIDAKKyNkZWZpbmUgUkNWSFFfUkNWX1RZUEVfRUFHRVIgICAgIDEKKyNkZWZpbmUgUkNWSFFfUkNWX1RZUEVfTk9OX0tEICAgIDIKKyNkZWZpbmUgUkNWSFFfUkNWX1RZUEVfRVJST1IgICAgIDMKKworLyogbWlzYy4gKi8KKyNkZWZpbmUgU0laRV9PRl9DUkMgMQorCisjZGVmaW5lIEVBR0VSX1RJRF9JRCBJTkZJTklQQVRIX0lfVElEX01BU0sKKworI2RlZmluZSBJUFNfREVGQVVMVF9QX0tFWSAweEZGRkYKKworI2RlZmluZSBJUFNfUEVSTUlTU0lWRV9MSUQgMHhGRkZGCisjZGVmaW5lIElQU19NVUxUSUNBU1RfTElEX0JBU0UgMHhDMDAwCisKKyNkZWZpbmUgSVBTX0FFVEhfQ1JFRElUX1NISUZUIDI0CisjZGVmaW5lIElQU19BRVRIX0NSRURJVF9NQVNLIDB4MUYKKyNkZWZpbmUgSVBTX0FFVEhfQ1JFRElUX0lOVkFMIDB4MUYKKworI2RlZmluZSBJUFNfUFNOX01BU0sgMHhGRkZGRkYKKyNkZWZpbmUgSVBTX01TTl9NQVNLIDB4RkZGRkZGCisjZGVmaW5lIElQU19RUE5fTUFTSyAweEZGRkZGRgorI2RlZmluZSBJUFNfTVVMVElDQVNUX1FQTiAweEZGRkZGRgorCisvKiBmdW5jdGlvbnMgZm9yIGV4dHJhY3RpbmcgZmllbGRzIGZyb20gcmN2aGRycSBlbnRyaWVzICovCitzdGF0aWMgaW5saW5lIF9fdTMyIGlwc19nZXRfaGRyX2Vycl9mbGFncyhjb25zdCBfX2xlMzIgKiByYnVmKQoreworCXJldHVybiBfX2xlMzJfdG9fY3B1KHJidWZbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fdTMyIGlwc19nZXRfaW5kZXgoY29uc3QgX19sZTMyICogcmJ1ZikKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUocmJ1ZlswXSkgPj4gSU5GSU5JUEFUSF9SSEZfRUdSSU5ERVhfU0hJRlQpCisJICAgICYgSU5GSU5JUEFUSF9SSEZfRUdSSU5ERVhfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBfX3UzMiBpcHNfZ2V0X3Jjdl90eXBlKGNvbnN0IF9fbGUzMiAqIHJidWYpCit7CisJcmV0dXJuIChfX2xlMzJfdG9fY3B1KHJidWZbMF0pID4+IElORklOSVBBVEhfUkhGX1JDVlRZUEVfU0hJRlQpCisJICAgICYgSU5GSU5JUEFUSF9SSEZfUkNWVFlQRV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIF9fdTMyIGlwc19nZXRfbGVuZ3RoX2luX2J5dGVzKGNvbnN0IF9fbGUzMiAqIHJidWYpCit7CisJcmV0dXJuICgoX19sZTMyX3RvX2NwdShyYnVmWzBdKSA+PiBJTkZJTklQQVRIX1JIRl9MRU5HVEhfU0hJRlQpCisJCSYgSU5GSU5JUEFUSF9SSEZfTEVOR1RIX01BU0spIDw8IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaXBzX2dldF9maXJzdF9wcm90b2NvbF9oZWFkZXIoY29uc3QgX191MzIgKiByYnVmKQoreworCXJldHVybiAodm9pZCAqKSZyYnVmWzJdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIgKmlwc19nZXRfaXBzX2hlYWRlcihjb25zdCBfX3UzMiAqCisJCQkJCQkJICAgIHJidWYpCit7CisJcmV0dXJuIChzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyICopJnJidWZbMl07Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBzX2dldF9pcGF0aF92ZXIoX19sZTMyIGhkcndvcmQpCit7CisJcmV0dXJuIChfX2xlMzJfdG9fY3B1KGhkcndvcmQpID4+IElORklOSVBBVEhfSV9WRVJTX1NISUZUKQorCSAgICAmIElORklOSVBBVEhfSV9WRVJTX01BU0s7Cit9CisKKyNlbmRpZgkJCQkvKiBJUFNfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC92ZXJic19kZWJ1Zy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL3ZlcmJzX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNjkzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC92ZXJic19kZWJ1Zy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfVkVSQlNfREVCVUdfSAorI2RlZmluZSBfVkVSQlNfREVCVUdfSAorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRyYWNpbmcgY29kZSBmb3IgdGhlIGliX2lwYXRoIGtlcm5lbCBtb2R1bGUuCisgKi8KKyNpZm5kZWYgX1ZFUkJTX0RFQlVHR0lORwkvKiB0cmFjaW5nIGVuYWJsZWQgb3Igbm90ICovCisjZGVmaW5lIF9WRVJCU19ERUJVR0dJTkcgMQorI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBpYl9pcGF0aF9kZWJ1ZzsKKworI2RlZmluZSBfVkVSQlNfRVJST1IoZm10LC4uLikgXAorCWRvIHsgXAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCwgImliX2lwYXRoIiwgIyNfX1ZBX0FSR1NfXyk7IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgX1ZFUkJTX1VOSVRfRVJST1IodW5pdCxmbXQsLi4uKSBcCisJZG8geyBcCisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCAiaWJfaXBhdGgiLCAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUoMCkKKworI2lmIF9WRVJCU19ERUJVR0dJTkcKKworLyoKKyAqIE1hc2sgdmFsdWVzIGZvciBkZWJ1Z2dpbmcuICBUaGUgc2NoZW1lIGFsbG93cyB1cyB0byBjb21waWxlIG91dCBhbnkKKyAqIG9mIHRoZSBkZWJ1ZyB0cmFjaW5nIHN0dWZmLCBhbmQgaWYgY29tcGlsZWQgaW4sIHRvIGVuYWJsZSBvcgorICogZGlzYWJsZSBkeW5hbWljYWxseS4KKyAqIFRoaXMgY2FuIGJlIHNldCBhdCBtb2Rwcm9iZSB0aW1lIGFsc286CisgKiAgICAgIG1vZHByb2JlIGliX3BhdGggaWJfaXBhdGhfZGVidWc9MworICovCisKKyNkZWZpbmUgX19WRVJCU19JTkZPICAgICAgICAweDEJLyogZ2VuZXJpYyBsb3cgdmVyYm9zaXR5IHN0dWZmICovCisjZGVmaW5lIF9fVkVSQlNfREJHICAgICAgICAgMHgyCS8qIGdlbmVyaWMgZGVidWcgKi8KKyNkZWZpbmUgX19WRVJCU19WREJHICAgICAgICAweDQJLyogdmVyYm9zZSBkZWJ1ZyAqLworI2RlZmluZSBfX1ZFUkJTX1NNQURCRyAgICAgIDB4ODAwMAkvKiBzbWEgcGFja2V0IGRlYnVnICovCisKKyNkZWZpbmUgX1ZFUkJTX0lORk8oZm10LC4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoaWJfaXBhdGhfZGVidWcmX19WRVJCU19JTkZPKSkgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCJpYl9pcGF0aCIsIFwKKwkJCSAgICAgICAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBfVkVSQlNfREJHKGZtdCwuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKHVubGlrZWx5KGliX2lwYXRoX2RlYnVnJl9fVkVSQlNfREJHKSkgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18sIFwKKwkJCSAgICAgICAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBfVkVSQlNfVkRCRyhmbXQsLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseShpYl9pcGF0aF9kZWJ1ZyZfX1ZFUkJTX1ZEQkcpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXywgXAorCQkJICAgICAgICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIF9WRVJCU19TTUFEQkcoZm10LC4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoaWJfaXBhdGhfZGVidWcmX19WRVJCU19TTUFEQkcpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXywgXAorCQkJICAgICAgICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSgwKQorCisjZWxzZSAvKiAhIF9WRVJCU19ERUJVR0dJTkcgKi8KKworI2RlZmluZSBfVkVSQlNfSU5GTyhmbXQsLi4uKQorI2RlZmluZSBfVkVSQlNfREJHKGZtdCwuLi4pCisjZGVmaW5lIF9WRVJCU19WREJHKGZtdCwuLi4pCisjZGVmaW5lIF9WRVJCU19TTUFEQkcoZm10LC4uLikKKworI2VuZGlmIC8qIF9WRVJCU19ERUJVR0dJTkcgKi8KKworI2VuZGlmIC8qIF9WRVJCU19ERUJVR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnCmluZGV4IGU4OGJlODUuLjlhYTVhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnCkBAIC03LDEwICs3LDExIEBACiAJICAoIlRhdm9yIikgYW5kIHRoZSBNVDI1MjA4IFBDSSBFeHByZXNzIEhDQSAoIkFyYmVsIikuCiAKIGNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHCi0JYm9vbCAiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IgorCWJvb2wgIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIElORklOSUJBTkRfTVRIQ0EKLQlkZWZhdWx0IG4KKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIG10aGNhIGRyaXZlciBwcm9kdWNlIGEgYnVuY2ggb2YgZGVidWcKLQkgIG1lc3NhZ2VzLiAgU2VsZWN0IHRoaXMgaXMgeW91IGFyZSBkZXZlbG9waW5nIHRoZSBkcml2ZXIgb3IKLQkgIHRyeWluZyB0byBkaWFnbm9zZSBhIHByb2JsZW0uCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgZGVidWdnaW5nIGNvZGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUKKwkgIG10aGNhIGRyaXZlci4gIFRoZSBvdXRwdXQgY2FuIGJlIHR1cm5lZCBvbiB2aWEgdGhlCisJICBkZWJ1Z19sZXZlbCBtb2R1bGUgcGFyYW1ldGVyICh3aGljaCBjYW4gYWxzbyBiZSBzZXQgYWZ0ZXIKKwkgIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHRocm91Z2ggc3lzZnMpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL01ha2VmaWxlCmluZGV4IDQ3ZWM1YTcuLmUzODhkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvTWFrZWZpbGUKQEAgLTEsNyArMSwzIEBACi1pZmRlZiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRwotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCi0KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX01USENBKSArPSBpYl9tdGhjYS5vCiAKIGliX210aGNhLXkgOj0JbXRoY2FfbWFpbi5vIG10aGNhX2NtZC5vIG10aGNhX3Byb2ZpbGUubyBtdGhjYV9yZXNldC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2F2LmMKaW5kZXggYmM1YmRjYmU1Li5iMTJhYTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYwpAQCAtNDIsNiArNDIsMjAgQEAKIAogI2luY2x1ZGUgIm10aGNhX2Rldi5oIgogCitlbnVtIHsKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfRlVMTCAgID0gMCwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfMVggICAgID0gMSwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfNFggICAgID0gMiwKKyAgICAgIE1USENBX1JBVEVfVEFWT1JfMVhfRERSID0gMworfTsKKworZW51bSB7CisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfRlVMTCAgICA9IDAsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfUVVBUlRFUiA9IDEsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfRUlHSFRIICA9IDIsCisgICAgICBNVEhDQV9SQVRFX01FTUZSRUVfSEFMRiAgICA9IDMKK307CisKIHN0cnVjdCBtdGhjYV9hdiB7CiAJX19iZTMyIHBvcnRfcGQ7CiAJdTggICAgIHJlc2VydmVkMTsKQEAgLTU1LDYgKzY5LDkwIEBACiAJX19iZTMyIGRnaWRbNF07CiB9OwogCitzdGF0aWMgZW51bSBpYl9yYXRlIG1lbWZyZWVfcmF0ZV90b19pYih1OCBtdGhjYV9yYXRlLCB1OCBwb3J0X3JhdGUpCit7CisJc3dpdGNoIChtdGhjYV9yYXRlKSB7CisJY2FzZSBNVEhDQV9SQVRFX01FTUZSRUVfRUlHSFRIOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAzKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9RVUFSVEVSOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAyKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9IQUxGOgorCQlyZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSA+PiAxKTsKKwljYXNlIE1USENBX1JBVEVfTUVNRlJFRV9GVUxMOgorCWRlZmF1bHQ6CisJCXJldHVybiBtdWx0X3RvX2liX3JhdGUocG9ydF9yYXRlKTsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGliX3JhdGUgdGF2b3JfcmF0ZV90b19pYih1OCBtdGhjYV9yYXRlLCB1OCBwb3J0X3JhdGUpCit7CisJc3dpdGNoIChtdGhjYV9yYXRlKSB7CisJY2FzZSBNVEhDQV9SQVRFX1RBVk9SXzFYOiAgICAgcmV0dXJuIElCX1JBVEVfMl81X0dCUFM7CisJY2FzZSBNVEhDQV9SQVRFX1RBVk9SXzFYX0REUjogcmV0dXJuIElCX1JBVEVfNV9HQlBTOworCWNhc2UgTVRIQ0FfUkFURV9UQVZPUl80WDogICAgIHJldHVybiBJQl9SQVRFXzEwX0dCUFM7CisJZGVmYXVsdDoJCSAgICAgIHJldHVybiBwb3J0X3JhdGU7CisJfQorfQorCitlbnVtIGliX3JhdGUgbXRoY2FfcmF0ZV90b19pYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IG10aGNhX3JhdGUsIHU4IHBvcnQpCit7CisJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkgeworCQkvKiBIYW5kbGUgb2xkIEFyYmVsIEZXICovCisJCWlmIChkZXYtPmxpbWl0cy5zdGF0X3JhdGVfc3VwcG9ydCA9PSAweDMgJiYgbXRoY2FfcmF0ZSkKKwkJCXJldHVybiBJQl9SQVRFXzJfNV9HQlBTOworCisJCXJldHVybiBtZW1mcmVlX3JhdGVfdG9faWIobXRoY2FfcmF0ZSwgZGV2LT5yYXRlW3BvcnQgLSAxXSk7CisJfSBlbHNlCisJCXJldHVybiB0YXZvcl9yYXRlX3RvX2liKG10aGNhX3JhdGUsIGRldi0+cmF0ZVtwb3J0IC0gMV0pOworfQorCitzdGF0aWMgdTggaWJfcmF0ZV90b19tZW1mcmVlKHU4IHJlcV9yYXRlLCB1OCBjdXJfcmF0ZSkKK3sKKwlpZiAoY3VyX3JhdGUgPD0gcmVxX3JhdGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJbnRlci1wYWNrZXQgZGVsYXkgKElQRCkgdG8gZ2V0IGZyb20gcmF0ZSBYIGRvd24gdG8gYSByYXRlCisJICogbm8gbW9yZSB0aGFuIFkgaXMgKFggLSAxKSAvIFkuCisJICovCisJc3dpdGNoICgoY3VyX3JhdGUgLSAxKSAvIHJlcV9yYXRlKSB7CisJY2FzZSAwOgkgcmV0dXJuIE1USENBX1JBVEVfTUVNRlJFRV9GVUxMOworCWNhc2UgMToJIHJldHVybiBNVEhDQV9SQVRFX01FTUZSRUVfSEFMRjsKKwljYXNlIDI6CSAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDM6CSByZXR1cm4gTVRIQ0FfUkFURV9NRU1GUkVFX1FVQVJURVI7CisJZGVmYXVsdDogcmV0dXJuIE1USENBX1JBVEVfTUVNRlJFRV9FSUdIVEg7CisJfQorfQorCitzdGF0aWMgdTggaWJfcmF0ZV90b190YXZvcih1OCBzdGF0aWNfcmF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRpY19yYXRlKSB7CisJY2FzZSBJQl9SQVRFXzJfNV9HQlBTOiByZXR1cm4gTVRIQ0FfUkFURV9UQVZPUl8xWDsKKwljYXNlIElCX1JBVEVfNV9HQlBTOiAgIHJldHVybiBNVEhDQV9SQVRFX1RBVk9SXzFYX0REUjsKKwljYXNlIElCX1JBVEVfMTBfR0JQUzogIHJldHVybiBNVEhDQV9SQVRFX1RBVk9SXzRYOworCWRlZmF1bHQ6CSAgICAgICByZXR1cm4gTVRIQ0FfUkFURV9UQVZPUl9GVUxMOworCX0KK30KKwordTggbXRoY2FfZ2V0X3JhdGUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgc3RhdGljX3JhdGUsIHU4IHBvcnQpCit7CisJdTggcmF0ZTsKKworCWlmICghc3RhdGljX3JhdGUgfHwgaWJfcmF0ZV90b19tdWx0KHN0YXRpY19yYXRlKSA+PSBkZXYtPnJhdGVbcG9ydCAtIDFdKQorCQlyZXR1cm4gMDsKKworCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCisJCXJhdGUgPSBpYl9yYXRlX3RvX21lbWZyZWUoaWJfcmF0ZV90b19tdWx0KHN0YXRpY19yYXRlKSwKKwkJCQkJICBkZXYtPnJhdGVbcG9ydCAtIDFdKTsKKwllbHNlCisJCXJhdGUgPSBpYl9yYXRlX3RvX3Rhdm9yKHN0YXRpY19yYXRlKTsKKworCWlmICghKGRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ICYgKDEgPDwgcmF0ZSkpKQorCQlyYXRlID0gMTsKKworCXJldHVybiByYXRlOworfQorCiBpbnQgbXRoY2FfY3JlYXRlX2FoKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJICAgIHN0cnVjdCBtdGhjYV9wZCAqcGQsCiAJCSAgICBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0ciwKQEAgLTEwNyw3ICsyMDUsNyBAQAogCWF2LT5nX3NsaWQgID0gYWhfYXR0ci0+c3JjX3BhdGhfYml0czsKIAlhdi0+ZGxpZCAgICA9IGNwdV90b19iZTE2KGFoX2F0dHItPmRsaWQpOwogCWF2LT5tc2dfc3IgID0gKDMgPDwgNCkgfCAvKiAySyBtZXNzYWdlICovCi0JCWFoX2F0dHItPnN0YXRpY19yYXRlOworCQltdGhjYV9nZXRfcmF0ZShkZXYsIGFoX2F0dHItPnN0YXRpY19yYXRlLCBhaF9hdHRyLT5wb3J0X251bSk7CiAJYXYtPnNsX3RjbGFzc19mbG93bGFiZWwgPSBjcHVfdG9fYmUzMihhaF9hdHRyLT5zbCA8PCAyOCk7CiAJaWYgKGFoX2F0dHItPmFoX2ZsYWdzICYgSUJfQUhfR1JIKSB7CiAJCWF2LT5nX3NsaWQgfD0gMHg4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCAzNDNlY2E1Li43OThlMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAl1OCAgICAgICAgICAgICAgICBzdGF0dXM7CiB9OwogCi1zdGF0aWMgaW50IGZ3X2NtZF9kb29yYmVsbCA9IDE7CitzdGF0aWMgaW50IGZ3X2NtZF9kb29yYmVsbCA9IDA7CiBtb2R1bGVfcGFyYW0oZndfY21kX2Rvb3JiZWxsLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmd19jbWRfZG9vcmJlbGwsICJwb3N0IEZXIGNvbW1hbmRzIHRocm91Z2ggZG9vcmJlbGwgcGFnZSBpZiBub256ZXJvICIKIAkJICIoYW5kIHN1cHBvcnRlZCBieSBGVykiKTsKQEAgLTk2NSw2ICs5NjUsNyBAQAogCXUzMiAqb3V0Ym94OwogCXU4IGZpZWxkOwogCXUxNiBzaXplOworCXUxNiBzdGF0X3JhdGU7CiAJaW50IGVycjsKIAogI2RlZmluZSBRVUVSWV9ERVZfTElNX09VVF9TSVpFICAgICAgICAgICAgIDB4MTAwCkBAIC05OTUsNiArOTk2LDcgQEAKICNkZWZpbmUgUVVFUllfREVWX0xJTV9NVFVfV0lEVEhfT0ZGU0VUICAgICAgMHgzNgogI2RlZmluZSBRVUVSWV9ERVZfTElNX1ZMX1BPUlRfT0ZGU0VUICAgICAgICAweDM3CiAjZGVmaW5lIFFVRVJZX0RFVl9MSU1fTUFYX0dJRF9PRkZTRVQgICAgICAgIDB4M2IKKyNkZWZpbmUgUVVFUllfREVWX0xJTV9SQVRFX1NVUFBPUlRfT0ZGU0VUICAgMHgzYwogI2RlZmluZSBRVUVSWV9ERVZfTElNX01BWF9QS0VZX09GRlNFVCAgICAgICAweDNmCiAjZGVmaW5lIFFVRVJZX0RFVl9MSU1fRkxBR1NfT0ZGU0VUICAgICAgICAgIDB4NDQKICNkZWZpbmUgUVVFUllfREVWX0xJTV9SU1ZEX1VBUl9PRkZTRVQgICAgICAgMHg0OApAQCAtMTA4Niw2ICsxMDg4LDggQEAKIAlkZXZfbGltLT5udW1fcG9ydHMgPSBmaWVsZCAmIDB4ZjsKIAlNVEhDQV9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0xJTV9NQVhfR0lEX09GRlNFVCk7CiAJZGV2X2xpbS0+bWF4X2dpZHMgPSAxIDw8IChmaWVsZCAmIDB4Zik7CisJTVRIQ0FfR0VUKHN0YXRfcmF0ZSwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX1JBVEVfU1VQUE9SVF9PRkZTRVQpOworCWRldl9saW0tPnN0YXRfcmF0ZV9zdXBwb3J0ID0gc3RhdF9yYXRlOwogCU1USENBX0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01BWF9QS0VZX09GRlNFVCk7CiAJZGV2X2xpbS0+bWF4X3BrZXlzID0gMSA8PCAoZmllbGQgJiAweGYpOwogCU1USENBX0dFVChkZXZfbGltLT5mbGFncywgb3V0Ym94LCBRVUVSWV9ERVZfTElNX0ZMQUdTX09GRlNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmgKaW5kZXggZTRlYzM1Yy4uMmY5NzZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuaApAQCAtMTQ2LDYgKzE0Niw3IEBACiAJaW50IG1heF92bDsKIAlpbnQgbnVtX3BvcnRzOwogCWludCBtYXhfZ2lkczsKKwl1MTYgc3RhdF9yYXRlX3N1cHBvcnQ7CiAJaW50IG1heF9wa2V5czsKIAl1MzIgZmxhZ3M7CiAJaW50IHJlc2VydmVkX3VhcnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCmluZGV4IDMxMmNmOTAuLjIwNTg1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC0yMzgsOSArMjM4LDkgQEAKIAlzcGluX2xvY2soJmRldi0+Y3FfdGFibGUubG9jayk7CiAKIAljcSA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5jcV90YWJsZS5jcSwgY3FuICYgKGRldi0+bGltaXRzLm51bV9jcXMgLSAxKSk7Ci0KIAlpZiAoY3EpCi0JCWF0b21pY19pbmMoJmNxLT5yZWZjb3VudCk7CisJCSsrY3EtPnJlZmNvdW50OworCiAJc3Bpbl91bmxvY2soJmRldi0+Y3FfdGFibGUubG9jayk7CiAKIAlpZiAoIWNxKSB7CkBAIC0yNTQsOCArMjU0LDEwIEBACiAJaWYgKGNxLT5pYmNxLmV2ZW50X2hhbmRsZXIpCiAJCWNxLT5pYmNxLmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBjcS0+aWJjcS5jcV9jb250ZXh0KTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjcS0+cmVmY291bnQpKQorCXNwaW5fbG9jaygmZGV2LT5jcV90YWJsZS5sb2NrKTsKKwlpZiAoIS0tY3EtPnJlZmNvdW50KQogCQl3YWtlX3VwKCZjcS0+d2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+Y3FfdGFibGUubG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3JlY3ZfY3FlKHN0cnVjdCBtdGhjYV9jcWUgKmNxZSkKQEAgLTI2NywyMyArMjY5LDEzIEBACiAJCXJldHVybiAhKGNxZS0+aXNfc2VuZCAmIDB4ODApOwogfQogCi12b2lkIG10aGNhX2NxX2NsZWFuKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGNxbiwgdTMyIHFwbiwKK3ZvaWQgbXRoY2FfY3FfY2xlYW4oc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfY3EgKmNxLCB1MzIgcXBuLAogCQkgICAgc3RydWN0IG10aGNhX3NycSAqc3JxKQogewotCXN0cnVjdCBtdGhjYV9jcSAqY3E7CiAJc3RydWN0IG10aGNhX2NxZSAqY3FlOwogCXUzMiBwcm9kX2luZGV4OwogCWludCBuZnJlZWQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKLQljcSA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5jcV90YWJsZS5jcSwgY3FuICYgKGRldi0+bGltaXRzLm51bV9jcXMgLSAxKSk7Ci0JaWYgKGNxKQotCQlhdG9taWNfaW5jKCZjcS0+cmVmY291bnQpOwotCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKLQotCWlmICghY3EpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKIAogCS8qCkBAIC0zMDEsNyArMjkzLDcgQEAKIAogCWlmICgwKQogCQltdGhjYV9kYmcoZGV2LCAiQ2xlYW5pbmcgUVBOICUwNnggZnJvbSBDUU4gJTA2eDsgY2kgJWQsIHBpICVkXG4iLAotCQkJICBxcG4sIGNxbiwgY3EtPmNvbnNfaW5kZXgsIHByb2RfaW5kZXgpOworCQkJICBxcG4sIGNxLT5jcW4sIGNxLT5jb25zX2luZGV4LCBwcm9kX2luZGV4KTsKIAogCS8qCiAJICogTm93IHN3ZWVwIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBDUSwgcmVtb3ZpbmcgQ1EgZW50cmllcwpAQCAtMzI1LDggKzMxNyw2IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNxLT5yZWZjb3VudCkpCi0JCXdha2VfdXAoJmNxLT53YWl0KTsKIH0KIAogdm9pZCBtdGhjYV9jcV9yZXNpemVfY29weV9jcWVzKHN0cnVjdCBtdGhjYV9jcSAqY3EpCkBAIC04MjEsNyArODExLDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmY3EtPmxvY2spOwotCWF0b21pY19zZXQoJmNxLT5yZWZjb3VudCwgMSk7CisJY3EtPnJlZmNvdW50ID0gMTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjcS0+d2FpdCk7CiAKIAltZW1zZXQoY3FfY29udGV4dCwgMCwgc2l6ZW9mICpjcV9jb250ZXh0KTsKQEAgLTg5Niw2ICs4ODYsMTcgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW5saW5lIGludCBnZXRfY3FfcmVmY291bnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfY3EgKmNxKQoreworCWludCBjOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKKwljID0gY3EtPnJlZmNvdW50OworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKKworCXJldHVybiBjOworfQorCiB2b2lkIG10aGNhX2ZyZWVfY3Eoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkgICBzdHJ1Y3QgbXRoY2FfY3EgKmNxKQogewpAQCAtOTI5LDYgKzkzMCw3IEBACiAJc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKIAltdGhjYV9hcnJheV9jbGVhcigmZGV2LT5jcV90YWJsZS5jcSwKIAkJCSAgY3EtPmNxbiAmIChkZXYtPmxpbWl0cy5udW1fY3FzIC0gMSkpOworCS0tY3EtPnJlZmNvdW50OwogCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKIAogCWlmIChkZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19NU0lfWCkKQEAgLTkzNiw4ICs5MzgsNyBAQAogCWVsc2UKIAkJc3luY2hyb25pemVfaXJxKGRldi0+cGRldi0+aXJxKTsKIAotCWF0b21pY19kZWMoJmNxLT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChjcS0+d2FpdCwgIWF0b21pY19yZWFkKCZjcS0+cmVmY291bnQpKTsKKwl3YWl0X2V2ZW50KGNxLT53YWl0LCAhZ2V0X2NxX3JlZmNvdW50KGRldiwgY3EpKTsKIAogCWlmIChjcS0+aXNfa2VybmVsKSB7CiAJCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgJmNxLT5idWYsIGNxLT5pYmNxLmNxZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKaW5kZXggYWQ1MmVkYi4uZjgxNjBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtMTUxLDYgKzE1MSw3IEBACiAJaW50ICAgICAgcmVzZXJ2ZWRfcXBzOwogCWludCAgICAgIG51bV9zcnFzOwogCWludCAgICAgIG1heF9zcnFfd3FlczsKKwlpbnQgICAgICBtYXhfc3JxX3NnZTsKIAlpbnQgICAgICByZXNlcnZlZF9zcnFzOwogCWludCAgICAgIG51bV9lZWNzOwogCWludCAgICAgIHJlc2VydmVkX2VlY3M7CkBAIC0xNzIsNiArMTczLDcgQEAKIAlpbnQgICAgICByZXNlcnZlZF9wZHM7CiAJdTMyICAgICAgcGFnZV9zaXplX2NhcDsKIAl1MzIgICAgICBmbGFnczsKKwl1MTYgICAgICBzdGF0X3JhdGVfc3VwcG9ydDsKIAl1OCAgICAgICBwb3J0X3dpZHRoX2NhcDsKIH07CiAKQEAgLTM1MywxMCArMzU1LDI0IEBACiAJc3RydWN0IGliX21hZF9hZ2VudCAgKnNlbmRfYWdlbnRbTVRIQ0FfTUFYX1BPUlRTXVsyXTsKIAlzdHJ1Y3QgaWJfYWggICAgICAgICAqc21fYWhbTVRIQ0FfTUFYX1BPUlRTXTsKIAlzcGlubG9ja190ICAgICAgICAgICAgc21fbG9jazsKKwl1OCAgICAgICAgICAgICAgICAgICAgcmF0ZVtNVEhDQV9NQVhfUE9SVFNdOwogfTsKIAotI2RlZmluZSBtdGhjYV9kYmcobWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlkZXZfZGJnKCZtZGV2LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHCitleHRlcm4gaW50IG10aGNhX2RlYnVnX2xldmVsOworCisjZGVmaW5lIG10aGNhX2RiZyhtZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChtdGhjYV9kZWJ1Z19sZXZlbCkJCQkJCVwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgKi8KKworI2RlZmluZSBtdGhjYV9kYmcobWRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgKHZvaWQpIG1kZXY7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRyAqLworCiAjZGVmaW5lIG10aGNhX2VycihtZGV2LCBmb3JtYXQsIGFyZy4uLikgXAogCWRldl9lcnIoJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCiAjZGVmaW5lIG10aGNhX2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKQEAgLTQ4MCw3ICs0OTYsNyBAQAogdm9pZCBtdGhjYV9jcV9jb21wbGV0aW9uKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGNxbik7CiB2b2lkIG10aGNhX2NxX2V2ZW50KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGNxbiwKIAkJICAgIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudF90eXBlKTsKLXZvaWQgbXRoY2FfY3FfY2xlYW4oc3RydWN0IG10aGNhX2RldiAqZGV2LCB1MzIgY3FuLCB1MzIgcXBuLAordm9pZCBtdGhjYV9jcV9jbGVhbihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcSAqY3EsIHUzMiBxcG4sCiAJCSAgICBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpOwogdm9pZCBtdGhjYV9jcV9yZXNpemVfY29weV9jcWVzKHN0cnVjdCBtdGhjYV9jcSAqY3EpOwogaW50IG10aGNhX2FsbG9jX2NxX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwgaW50IG5lbnQpOwpAQCAtNDkyLDYgKzUwOCw3IEBACiBpbnQgbXRoY2FfbW9kaWZ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICphdHRyLAogCQkgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2spOwogaW50IG10aGNhX3F1ZXJ5X3NycShzdHJ1Y3QgaWJfc3JxICpzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqc3JxX2F0dHIpOworaW50IG10aGNhX21heF9zcnFfc2dlKHN0cnVjdCBtdGhjYV9kZXYgKmRldik7CiB2b2lkIG10aGNhX3NycV9ldmVudChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHUzMiBzcnFuLAogCQkgICAgIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudF90eXBlKTsKIHZvaWQgbXRoY2FfZnJlZV9zcnFfd3FlKHN0cnVjdCBtdGhjYV9zcnEgKnNycSwgdTMyIHdxZV9hZGRyKTsKQEAgLTU0Miw2ICs1NTksOCBAQAogCQkgIHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlcik7CiBpbnQgbXRoY2FfYWhfcXVlcnkoc3RydWN0IGliX2FoICppYmFoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYXR0cik7CiBpbnQgbXRoY2FfYWhfZ3JoX3ByZXNlbnQoc3RydWN0IG10aGNhX2FoICphaCk7Cit1OCBtdGhjYV9nZXRfcmF0ZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIGludCBzdGF0aWNfcmF0ZSwgdTggcG9ydCk7CitlbnVtIGliX3JhdGUgbXRoY2FfcmF0ZV90b19pYihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IG10aGNhX3JhdGUsIHU4IHBvcnQpOwogCiBpbnQgbXRoY2FfbXVsdGljYXN0X2F0dGFjaChzdHJ1Y3QgaWJfcXAgKmlicXAsIHVuaW9uIGliX2dpZCAqZ2lkLCB1MTYgbGlkKTsKIGludCBtdGhjYV9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCmluZGV4IGRmYjQ4MmUuLjQ3MzA4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKQEAgLTQ5LDYgKzQ5LDMwIEBACiAJTVRIQ0FfVkVORE9SX0NMQVNTMiA9IDB4YQogfTsKIAorc3RhdGljIGludCBtdGhjYV91cGRhdGVfcmF0ZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBpYl9wb3J0X2F0dHIgKnRwcm9wcyA9IE5VTEw7CisJaW50ICAgICAgICAgICAgICAgICAgcmV0OworCisJdHByb3BzID0ga21hbGxvYyhzaXplb2YgKnRwcm9wcywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cHJvcHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gaWJfcXVlcnlfcG9ydCgmZGV2LT5pYl9kZXYsIHBvcnRfbnVtLCB0cHJvcHMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWJfcXVlcnlfcG9ydCBmYWlsZWQgKCVkKSBmb3IgJXMgcG9ydCAlZFxuIiwKKwkJICAgICAgIHJldCwgZGV2LT5pYl9kZXYubmFtZSwgcG9ydF9udW0pOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXYtPnJhdGVbcG9ydF9udW0gLSAxXSA9IHRwcm9wcy0+YWN0aXZlX3NwZWVkICoKKwkJCQkgIGliX3dpZHRoX2VudW1fdG9faW50KHRwcm9wcy0+YWN0aXZlX3dpZHRoKTsKKworb3V0OgorCWtmcmVlKHRwcm9wcyk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX3NtX2FoKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJCSB1OCBwb3J0X251bSwgdTE2IGxpZCwgdTggc2wpCiB7CkBAIC05MCw2ICsxMTQsNyBAQAogCSAgICAgbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkgJiYKIAkgICAgbWFkLT5tYWRfaGRyLm1ldGhvZCAgICAgPT0gSUJfTUdNVF9NRVRIT0RfU0VUKSB7CiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8pIHsKKwkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLAogCQkJCSAgICAgYmUxNl90b19jcHVwKChfX2JlMTYgKikgKG1hZC0+ZGF0YSArIDU4KSksCiAJCQkJICAgICAoKih1OCAqKSAobWFkLT5kYXRhICsgNzYpKSAmIDB4Zik7CkBAIC0yNDYsNiArMjcxLDcgQEAKIHsKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudDsKIAlpbnQgcCwgcTsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c21fbG9jayk7CiAKQEAgLTI1NSwxMSArMjgxLDIzIEBACiAJCQkJCQkgICAgICBxID8gSUJfUVBUX0dTSSA6IElCX1FQVF9TTUksCiAJCQkJCQkgICAgICBOVUxMLCAwLCBzZW5kX2hhbmRsZXIsCiAJCQkJCQkgICAgICBOVUxMLCBOVUxMKTsKLQkJCWlmIChJU19FUlIoYWdlbnQpKQorCQkJaWYgKElTX0VSUihhZ2VudCkpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKGFnZW50KTsKIAkJCQlnb3RvIGVycjsKKwkJCX0KIAkJCWRldi0+c2VuZF9hZ2VudFtwXVtxXSA9IGFnZW50OwogCQl9CiAKKworCWZvciAocCA9IDE7IHAgPD0gZGV2LT5saW1pdHMubnVtX3BvcnRzOyArK3ApIHsKKwkJcmV0ID0gbXRoY2FfdXBkYXRlX3JhdGUoZGV2LCBwKTsKKwkJaWYgKHJldCkgeworCQkJbXRoY2FfZXJyKGRldiwgIkZhaWxlZCB0byBvYnRhaW4gcG9ydCAlZCByYXRlLiIKKwkJCQkgICIgYWJvcnRpbmcuXG4iLCBwKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGVycjoKQEAgLTI2OCw3ICszMDYsNyBAQAogCQkJaWYgKGRldi0+c2VuZF9hZ2VudFtwXVtxXSkKIAkJCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChkZXYtPnNlbmRfYWdlbnRbcF1bcV0pOwogCi0JcmV0dXJuIFBUUl9FUlIoYWdlbnQpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgX19kZXZleGl0IG10aGNhX2ZyZWVfYWdlbnRzKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDI2NmYzNDcuLjliOWZmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtNTIsNiArNTIsMTQgQEAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAorI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHCisKK2ludCBtdGhjYV9kZWJ1Z19sZXZlbCA9IDA7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbGV2ZWwsIG10aGNhX2RlYnVnX2xldmVsLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIkVuYWJsZSBkZWJ1ZyB0cmFjaW5nIGlmID4gMCIpOworCisjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUcgKi8KKwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAKIHN0YXRpYyBpbnQgbXNpX3ggPSAwOwpAQCAtNjksNiArNzcsMTAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiAKK3N0YXRpYyBpbnQgdHVuZV9wY2kgPSAwOworbW9kdWxlX3BhcmFtKHR1bmVfcGNpLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh0dW5lX3BjaSwgImluY3JlYXNlIFBDSSBidXJzdCBmcm9tIHRoZSBkZWZhdWx0IHNldCBieSBCSU9TIGlmIG5vbnplcm8iKTsKKwogc3RhdGljIGNvbnN0IGNoYXIgbXRoY2FfdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCURSVl9OQU1FICI6IE1lbGxhbm94IEluZmluaUJhbmQgSENBIGRyaXZlciB2IgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CkBAIC05MCw2ICsxMDIsOSBAQAogCWludCBjYXA7CiAJdTE2IHZhbDsKIAorCWlmICghdHVuZV9wY2kpCisJCXJldHVybiAwOworCiAJLyogRmlyc3QgdHJ5IHRvIG1heCBvdXQgUmVhZCBCeXRlIENvdW50ICovCiAJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShtZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwogCWlmIChjYXApIHsKQEAgLTE3Niw2ICsxOTEsNyBAQAogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9zcnFzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9zcnFzOwogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9lZWNzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9lZWNzOwogCW1kZXYtPmxpbWl0cy5tYXhfZGVzY19zeiAgICAgICAgPSBkZXZfbGltLT5tYXhfZGVzY19zejsKKwltZGV2LT5saW1pdHMubWF4X3NycV9zZ2UJPSBtdGhjYV9tYXhfc3JxX3NnZShtZGV2KTsKIAkvKgogCSAqIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGltaXQgYmVjYXVzZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEKIAkgKiBzcGFyZSBDUUUgc28gdGhlIEhDQSBIVyBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuCkBAIC0xOTEsNiArMjA3LDE4IEBACiAJbWRldi0+bGltaXRzLnBvcnRfd2lkdGhfY2FwICAgICA9IGRldl9saW0tPm1heF9wb3J0X3dpZHRoOwogCW1kZXYtPmxpbWl0cy5wYWdlX3NpemVfY2FwICAgICAgPSB+KHUzMikgKGRldl9saW0tPm1pbl9wYWdlX3N6IC0gMSk7CiAJbWRldi0+bGltaXRzLmZsYWdzICAgICAgICAgICAgICA9IGRldl9saW0tPmZsYWdzOworCS8qCisJICogRm9yIG9sZCBGVyB0aGF0IGRvZXNuJ3QgcmV0dXJuIHN0YXRpYyByYXRlIHN1cHBvcnQsIHVzZSBhCisJICogdmFsdWUgb2YgMHgzIChvbmx5IHN0YXRpYyByYXRlIHZhbHVlcyBvZiAwIG9yIDEgYXJlIGhhbmRsZWQpLAorCSAqIGV4Y2VwdCBvbiBTaW5haSwgd2hlcmUgZXZlbiBvbGQgRlcgY2FuIGhhbmRsZSBzdGF0aWMgcmF0ZQorCSAqIHZhbHVlcyBvZiAyIGFuZCAzLgorCSAqLworCWlmIChkZXZfbGltLT5zdGF0X3JhdGVfc3VwcG9ydCkKKwkJbWRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ID0gZGV2X2xpbS0+c3RhdF9yYXRlX3N1cHBvcnQ7CisJZWxzZSBpZiAobWRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NJTkFJX09QVCkKKwkJbWRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ID0gMHhmOworCWVsc2UKKwkJbWRldi0+bGltaXRzLnN0YXRfcmF0ZV9zdXBwb3J0ID0gMHgzOwogCiAJLyogSUJfREVWSUNFX1JFU0laRV9NQVhfV1Igbm90IHN1cHBvcnRlZCBieSBkcml2ZXIuCiAJICAgTWF5IGJlIGRvYWJsZSBzaW5jZSBoYXJkd2FyZSBzdXBwb3J0cyBpdCBmb3IgU1JRLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYwppbmRleCAyNWUxYzFkLi5hNDg2ZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYwpAQCAtNzYxLDYgKzc2MSw3IEBACiAKIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9tcl90YWJsZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpCiB7CisJdW5zaWduZWQgbG9uZyBhZGRyOwogCWludCBlcnIsIGk7CiAKIAllcnIgPSBtdGhjYV9hbGxvY19pbml0KCZkZXYtPm1yX3RhYmxlLm1wdF9hbGxvYywKQEAgLTc5Niw5ICs3OTcsMTIgQEAKIAkJCWdvdG8gZXJyX2Ztcl9tcHQ7CiAJCX0KIAorCQlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgNCkgKworCQkJKChwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgNCkgLSAxKSAmCisJCQkgZGV2LT5tcl90YWJsZS5tcHRfYmFzZSk7CisKIAkJZGV2LT5tcl90YWJsZS50YXZvcl9mbXIubXB0X2Jhc2UgPQotCQkJaW9yZW1hcChkZXYtPm1yX3RhYmxlLm1wdF9iYXNlLAotCQkJCSgxIDw8IGkpICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbXB0X2VudHJ5KSk7CisJCQlpb3JlbWFwKGFkZHIsICgxIDw8IGkpICogc2l6ZW9mKHN0cnVjdCBtdGhjYV9tcHRfZW50cnkpKTsKIAogCQlpZiAoIWRldi0+bXJfdGFibGUudGF2b3JfZm1yLm1wdF9iYXNlKSB7CiAJCQltdGhjYV93YXJuKGRldiwgIk1QVCBpb3JlbWFwIGZvciBGTVIgZmFpbGVkLlxuIik7CkBAIC04MDYsOSArODEwLDEyIEBACiAJCQlnb3RvIGVycl9mbXJfbXB0OwogCQl9CiAKKwkJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDQpICsKKwkJCSgocGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDQpIC0gMSkgJgorCQkJIGRldi0+bXJfdGFibGUubXR0X2Jhc2UpOworCiAJCWRldi0+bXJfdGFibGUudGF2b3JfZm1yLm10dF9iYXNlID0KLQkJCWlvcmVtYXAoZGV2LT5tcl90YWJsZS5tdHRfYmFzZSwKLQkJCQkoMSA8PCBpKSAqIE1USENBX01UVF9TRUdfU0laRSk7CisJCQlpb3JlbWFwKGFkZHIsICgxIDw8IGkpICogTVRIQ0FfTVRUX1NFR19TSVpFKTsKIAkJaWYgKCFkZXYtPm1yX3RhYmxlLnRhdm9yX2Ztci5tdHRfYmFzZSkgewogCQkJbXRoY2Ffd2FybihkZXYsICJNVFQgaW9yZW1hcCBmb3IgRk1SIGZhaWxlZC5cbiIpOwogCQkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggMmMyNTBiYy4uYTJlYWU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXByb3BzLT5tYXhfcmVzX3JkX2F0b20gICAgID0gcHJvcHMtPm1heF9xcF9yZF9hdG9tICogcHJvcHMtPm1heF9xcDsKIAlwcm9wcy0+bWF4X3NycSAgICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5udW1fc3JxcyAtIG1kZXYtPmxpbWl0cy5yZXNlcnZlZF9zcnFzOwogCXByb3BzLT5tYXhfc3JxX3dyICAgICAgICAgID0gbWRldi0+bGltaXRzLm1heF9zcnFfd3FlczsKLQlwcm9wcy0+bWF4X3NycV9zZ2UgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfc2c7CisJcHJvcHMtPm1heF9zcnFfc2dlICAgICAgICAgPSBtZGV2LT5saW1pdHMubWF4X3NycV9zZ2U7CiAJcHJvcHMtPmxvY2FsX2NhX2Fja19kZWxheSAgPSBtZGV2LT5saW1pdHMubG9jYWxfY2FfYWNrX2RlbGF5OwogCXByb3BzLT5hdG9taWNfY2FwICAgICAgICAgID0gbWRldi0+bGltaXRzLmZsYWdzICYgREVWX0xJTV9GTEFHX0FUT01JQyA/CiAJCQkJCUlCX0FUT01JQ19IQ0EgOiBJQl9BVE9NSUNfTk9ORTsKQEAgLTMwNiw3ICszMDYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltZW1jcHkoZ2lkLT5yYXcgKyA4LCBvdXRfbWFkLT5kYXRhICsgKGluZGV4ICUgOCkgKiAxNiwgOCk7CisJbWVtY3B5KGdpZC0+cmF3ICsgOCwgb3V0X21hZC0+ZGF0YSArIChpbmRleCAlIDgpICogOCwgOCk7CiAKICBvdXQ6CiAJa2ZyZWUoaW5fbWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKaW5kZXggMmU3ZjUyMS4uMTc5YThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAgKiBhIHFwIG1heSBiZSBsb2NrZWQsIHdpdGggdGhlIHNlbmQgY3EgbG9ja2VkIGZpcnN0LiAgTm8gb3RoZXIKICAqIG5lc3Rpbmcgc2hvdWxkIGJlIGRvbmUuCiAgKgotICogRWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgYWxzbyBoYXMgYW4gYXRvbWljX3QgcmVmIGNvdW50LiAgVGhlCi0gKiBwb2ludGVyIGZyb20gdGhlIGNxL3FwX3RhYmxlIHRvIHRoZSBzdHJ1Y3QgY291bnRzIGFzIG9uZSByZWZlcmVuY2UuCi0gKiBUaGlzIHJlZmVyZW5jZSBhbHNvIGlzIGdvb2QgZm9yIGFjY2VzcyB0aHJvdWdoIHRoZSBjb25zdW1lciBBUEksIHNvCi0gKiBtb2RpZnlpbmcgdGhlIENRL1FQIGV0YyBkb2Vzbid0IG5lZWQgdG8gdGFrZSBhbm90aGVyIHJlZmVyZW5jZS4KLSAqIEFjY2VzcyBiZWNhdXNlIG9mIGEgY29tcGxldGlvbiBiZWluZyBwb2xsZWQgZG9lcyBuZWVkIGEgcmVmZXJlbmNlLgorICogRWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgYWxzbyBoYXMgYW4gcmVmIGNvdW50LCBwcm90ZWN0ZWQgYnkgdGhlCisgKiBjb3JyZXNwb25kaW5nIHRhYmxlIGxvY2suICBUaGUgcG9pbnRlciBmcm9tIHRoZSBjcS9xcF90YWJsZSB0byB0aGUKKyAqIHN0cnVjdCBjb3VudHMgYXMgb25lIHJlZmVyZW5jZS4gIFRoaXMgcmVmZXJlbmNlIGFsc28gaXMgZ29vZCBmb3IKKyAqIGFjY2VzcyB0aHJvdWdoIHRoZSBjb25zdW1lciBBUEksIHNvIG1vZGlmeWluZyB0aGUgQ1EvUVAgZXRjIGRvZXNuJ3QKKyAqIG5lZWQgdG8gdGFrZSBhbm90aGVyIHJlZmVyZW5jZS4gIEFjY2VzcyB0byBhIFFQIGJlY2F1c2Ugb2YgYQorICogY29tcGxldGlvbiBiZWluZyBwb2xsZWQgZG9lcyBub3QgbmVlZCBhIHJlZmVyZW5jZSBlaXRoZXIuCiAgKgogICogRmluYWxseSwgZWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgaGFzIGEgd2FpdF9xdWV1ZV9oZWFkX3QgZm9yIHRoZQogICogZGVzdHJveSBmdW5jdGlvbiB0byBzbGVlcCBvbi4KQEAgLTE1OSw4ICsxNjAsOSBAQAogICogLSBkZWNyZW1lbnQgcmVmIGNvdW50OyBpZiB6ZXJvLCB3YWtlIHVwIHdhaXRlcnMKICAqCiAgKiBUbyBkZXN0cm95IGEgQ1EvUVAsIHdlIGNhbiBkbyB0aGUgZm9sbG93aW5nOgotICogLSBsb2NrIGNxL3FwX3RhYmxlLCByZW1vdmUgcG9pbnRlciwgdW5sb2NrIGNxL3FwX3RhYmxlIGxvY2sKLSAqIC0gZGVjcmVtZW50IHJlZiBjb3VudAorICogLSBsb2NrIGNxL3FwX3RhYmxlCisgKiAtIHJlbW92ZSBwb2ludGVyIGFuZCBkZWNyZW1lbnQgcmVmIGNvdW50CisgKiAtIHVubG9jayBjcS9xcF90YWJsZSBsb2NrCiAgKiAtIHdhaXRfZXZlbnQgdW50aWwgcmVmIGNvdW50IGlzIHplcm8KICAqCiAgKiBJdCBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbHR5IHRvIG1ha2Ugc3VyZSB0aGF0IG5vIFFQCkBAIC0xOTcsNyArMTk5LDcgQEAKIHN0cnVjdCBtdGhjYV9jcSB7CiAJc3RydWN0IGliX2NxCQlpYmNxOwogCXNwaW5sb2NrX3QJCWxvY2s7Ci0JYXRvbWljX3QJCXJlZmNvdW50OworCWludAkJCXJlZmNvdW50OwogCWludAkJCWNxbjsKIAl1MzIJCQljb25zX2luZGV4OwogCXN0cnVjdCBtdGhjYV9jcV9idWYJYnVmOwpAQCAtMjE3LDcgKzIxOSw3IEBACiBzdHJ1Y3QgbXRoY2Ffc3JxIHsKIAlzdHJ1Y3QgaWJfc3JxCQlpYnNycTsKIAlzcGlubG9ja190CQlsb2NrOwotCWF0b21pY190CQlyZWZjb3VudDsKKwlpbnQJCQlyZWZjb3VudDsKIAlpbnQJCQlzcnFuOwogCWludAkJCW1heDsKIAlpbnQJCQltYXhfZ3M7CkBAIC0yNTQsOSArMjU2LDExIEBACiAKIHN0cnVjdCBtdGhjYV9xcCB7CiAJc3RydWN0IGliX3FwICAgICAgICAgICBpYnFwOwotCWF0b21pY190ICAgICAgICAgICAgICAgcmVmY291bnQ7CisJaW50ICAgICAgICAgICAgICAgICAgICByZWZjb3VudDsKIAl1MzIgICAgICAgICAgICAgICAgICAgIHFwbjsKIAlpbnQgICAgICAgICAgICAgICAgICAgIGlzX2RpcmVjdDsKKwl1OCAgICAgICAgICAgICAgICAgICAgIHBvcnQ7IC8qIGZvciBTUVAgYW5kIG1lbWZyZWUgdXNlIG9ubHkgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgIGFsdF9wb3J0OyAvKiBmb3IgbWVtZnJlZSB1c2Ugb25seSAqLwogCXU4ICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0OwogCXU4ICAgICAgICAgICAgICAgICAgICAgc3RhdGU7CiAJdTggICAgICAgICAgICAgICAgICAgICBhdG9taWNfcmRfZW47CkBAIC0yNzgsNyArMjgyLDYgQEAKIAogc3RydWN0IG10aGNhX3NxcCB7CiAJc3RydWN0IG10aGNhX3FwIHFwOwotCWludCAgICAgICAgICAgICBwb3J0OwogCWludCAgICAgICAgICAgICBwa2V5X2luZGV4OwogCXUzMiAgICAgICAgICAgICBxa2V5OwogCXUzMiAgICAgICAgICAgICBzZW5kX3BzbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggMDU3YzhlNi4uMDdjMTNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXNwaW5fbG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKIAlxcCA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5xcF90YWJsZS5xcCwgcXBuICYgKGRldi0+bGltaXRzLm51bV9xcHMgLSAxKSk7CiAJaWYgKHFwKQotCQlhdG9taWNfaW5jKCZxcC0+cmVmY291bnQpOworCQkrK3FwLT5yZWZjb3VudDsKIAlzcGluX3VubG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKIAogCWlmICghcXApIHsKQEAgLTI0OCwxNCArMjQ4LDE5IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoZXZlbnRfdHlwZSA9PSBJQl9FVkVOVF9QQVRIX01JRykKKwkJcXAtPnBvcnQgPSBxcC0+YWx0X3BvcnQ7CisKIAlldmVudC5kZXZpY2UgICAgICA9ICZkZXYtPmliX2RldjsKIAlldmVudC5ldmVudCAgICAgICA9IGV2ZW50X3R5cGU7CiAJZXZlbnQuZWxlbWVudC5xcCAgPSAmcXAtPmlicXA7CiAJaWYgKHFwLT5pYnFwLmV2ZW50X2hhbmRsZXIpCiAJCXFwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBxcC0+aWJxcC5xcF9jb250ZXh0KTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZxcC0+cmVmY291bnQpKQorCXNwaW5fbG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKKwlpZiAoIS0tcXAtPnJlZmNvdW50KQogCQl3YWtlX3VwKCZxcC0+d2FpdCk7CisJc3Bpbl91bmxvY2soJmRldi0+cXBfdGFibGUubG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdG9fbXRoY2Ffc3RhdGUoZW51bSBpYl9xcF9zdGF0ZSBpYl9zdGF0ZSkKQEAgLTM5MiwxMCArMzk3LDE2IEBACiB7CiAJbWVtc2V0KGliX2FoX2F0dHIsIDAsIHNpemVvZiAqcGF0aCk7CiAJaWJfYWhfYXR0ci0+cG9ydF9udW0gCSAgPSAoYmUzMl90b19jcHUocGF0aC0+cG9ydF9wa2V5KSA+PiAyNCkgJiAweDM7CisKKwlpZiAoaWJfYWhfYXR0ci0+cG9ydF9udW0gPT0gMCB8fCBpYl9haF9hdHRyLT5wb3J0X251bSA+IGRldi0+bGltaXRzLm51bV9wb3J0cykKKwkJcmV0dXJuOworCiAJaWJfYWhfYXR0ci0+ZGxpZCAgICAgCSAgPSBiZTE2X3RvX2NwdShwYXRoLT5ybGlkKTsKIAlpYl9haF9hdHRyLT5zbCAgICAgICAJICA9IGJlMzJfdG9fY3B1KHBhdGgtPnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OwogCWliX2FoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBwYXRoLT5nX215bG1jICYgMHg3ZjsKLQlpYl9haF9hdHRyLT5zdGF0aWNfcmF0ZSAgID0gcGF0aC0+c3RhdGljX3JhdGUgJiAweDc7CisJaWJfYWhfYXR0ci0+c3RhdGljX3JhdGUgICA9IG10aGNhX3JhdGVfdG9faWIoZGV2LAorCQkJCQkJICAgICBwYXRoLT5zdGF0aWNfcmF0ZSAmIDB4NywKKwkJCQkJCSAgICAgaWJfYWhfYXR0ci0+cG9ydF9udW0pOwogCWliX2FoX2F0dHItPmFoX2ZsYWdzICAgICAgPSAocGF0aC0+Z19teWxtYyAmICgxIDw8IDcpKSA/IElCX0FIX0dSSCA6IDA7CiAJaWYgKGliX2FoX2F0dHItPmFoX2ZsYWdzKSB7CiAJCWliX2FoX2F0dHItPmdyaC5zZ2lkX2luZGV4ID0gcGF0aC0+bWdpZF9pbmRleCAmIChkZXYtPmxpbWl0cy5naWRfdGFibGVfbGVuIC0gMSk7CkBAIC00NTUsOCArNDY2LDEwIEBACiAJcXBfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSAgICA9IHFwLT5ycS5tYXhfZ3M7CiAJcXBfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IHFwLT5tYXhfaW5saW5lX2RhdGE7CiAKLQl0b19pYl9haF9hdHRyKGRldiwgJnFwX2F0dHItPmFoX2F0dHIsICZjb250ZXh0LT5wcmlfcGF0aCk7Ci0JdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5hbHRfYWhfYXR0ciwgJmNvbnRleHQtPmFsdF9wYXRoKTsKKwlpZiAocXAtPnRyYW5zcG9ydCA9PSBSQyB8fCBxcC0+dHJhbnNwb3J0ID09IFVDKSB7CisJCXRvX2liX2FoX2F0dHIoZGV2LCAmcXBfYXR0ci0+YWhfYXR0ciwgJmNvbnRleHQtPnByaV9wYXRoKTsKKwkJdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5hbHRfYWhfYXR0ciwgJmNvbnRleHQtPmFsdF9wYXRoKTsKKwl9CiAKIAlxcF9hdHRyLT5wa2V5X2luZGV4ICAgICA9IGJlMzJfdG9fY3B1KGNvbnRleHQtPnByaV9wYXRoLnBvcnRfcGtleSkgJiAweDdmOwogCXFwX2F0dHItPmFsdF9wa2V5X2luZGV4ID0gYmUzMl90b19jcHUoY29udGV4dC0+YWx0X3BhdGgucG9ydF9wa2V5KSAmIDB4N2Y7CkBAIC00ODQsMTEgKzQ5NywxMSBAQAogfQogCiBzdGF0aWMgaW50IG10aGNhX3BhdGhfc2V0KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IGliX2FoX2F0dHIgKmFoLAotCQkJICBzdHJ1Y3QgbXRoY2FfcXBfcGF0aCAqcGF0aCkKKwkJCSAgc3RydWN0IG10aGNhX3FwX3BhdGggKnBhdGgsIHU4IHBvcnQpCiB7CiAJcGF0aC0+Z19teWxtYyAgICAgPSBhaC0+c3JjX3BhdGhfYml0cyAmIDB4N2Y7CiAJcGF0aC0+cmxpZCAgICAgICAgPSBjcHVfdG9fYmUxNihhaC0+ZGxpZCk7Ci0JcGF0aC0+c3RhdGljX3JhdGUgPSAhIWFoLT5zdGF0aWNfcmF0ZTsKKwlwYXRoLT5zdGF0aWNfcmF0ZSA9IG10aGNhX2dldF9yYXRlKGRldiwgYWgtPnN0YXRpY19yYXRlLCBwb3J0KTsKIAogCWlmIChhaC0+YWhfZmxhZ3MgJiBJQl9BSF9HUkgpIHsKIAkJaWYgKGFoLT5ncmguc2dpZF9pbmRleCA+PSBkZXYtPmxpbWl0cy5naWRfdGFibGVfbGVuKSB7CkBAIC02MzQsNyArNjQ3LDcgQEAKIAogCWlmIChxcC0+dHJhbnNwb3J0ID09IE1MWCkKIAkJcXBfY29udGV4dC0+cHJpX3BhdGgucG9ydF9wa2V5IHw9Ci0JCQljcHVfdG9fYmUzMih0b19tc3FwKHFwKS0+cG9ydCA8PCAyNCk7CisJCQljcHVfdG9fYmUzMihxcC0+cG9ydCA8PCAyNCk7CiAJZWxzZSB7CiAJCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSB7CiAJCQlxcF9jb250ZXh0LT5wcmlfcGF0aC5wb3J0X3BrZXkgfD0KQEAgLTY1Nyw3ICs2NzAsOCBAQAogCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikgewotCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWhfYXR0ciwgJnFwX2NvbnRleHQtPnByaV9wYXRoKSkKKwkJaWYgKG10aGNhX3BhdGhfc2V0KGRldiwgJmF0dHItPmFoX2F0dHIsICZxcF9jb250ZXh0LT5wcmlfcGF0aCwKKwkJCQkgICBhdHRyX21hc2sgJiBJQl9RUF9QT1JUID8gYXR0ci0+cG9ydF9udW0gOiBxcC0+cG9ydCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX1BSSU1BUllfQUREUl9QQVRIKTsKQEAgLTY4MSw3ICs2OTUsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAobXRoY2FfcGF0aF9zZXQoZGV2LCAmYXR0ci0+YWx0X2FoX2F0dHIsICZxcF9jb250ZXh0LT5hbHRfcGF0aCkpCisJCWlmIChtdGhjYV9wYXRoX3NldChkZXYsICZhdHRyLT5hbHRfYWhfYXR0ciwgJnFwX2NvbnRleHQtPmFsdF9wYXRoLAorCQkJCSAgIGF0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXFwX2NvbnRleHQtPmFsdF9wYXRoLnBvcnRfcGtleSB8PSBjcHVfdG9fYmUzMihhdHRyLT5hbHRfcGtleV9pbmRleCB8CkBAIC03OTEsNiArODA2LDEwIEBACiAJCXFwLT5hdG9taWNfcmRfZW4gPSBhdHRyLT5xcF9hY2Nlc3NfZmxhZ3M7CiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9ERVNUX1JEX0FUT01JQykKIAkJcXAtPnJlc3BfZGVwdGggPSBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWM7CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BPUlQpCisJCXFwLT5wb3J0ID0gYXR0ci0+cG9ydF9udW07CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FMVF9QQVRIKQorCQlxcC0+YWx0X3BvcnQgPSBhdHRyLT5hbHRfcG9ydF9udW07CiAKIAlpZiAoaXNfc3FwKGRldiwgcXApKQogCQlzdG9yZV9hdHRycyh0b19tc3FwKHFwKSwgYXR0ciwgYXR0cl9tYXNrKTsKQEAgLTgwMiwxMyArODIxLDEzIEBACiAJaWYgKGlzX3FwMChkZXYsIHFwKSkgewogCQlpZiAoY3VyX3N0YXRlICE9IElCX1FQU19SVFIgJiYKIAkJICAgIG5ld19zdGF0ZSA9PSBJQl9RUFNfUlRSKQotCQkJaW5pdF9wb3J0KGRldiwgdG9fbXNxcChxcCktPnBvcnQpOworCQkJaW5pdF9wb3J0KGRldiwgcXAtPnBvcnQpOwogCiAJCWlmIChjdXJfc3RhdGUgIT0gSUJfUVBTX1JFU0VUICYmCiAJCSAgICBjdXJfc3RhdGUgIT0gSUJfUVBTX0VSUiAmJgogCQkgICAgKG5ld19zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgfHwKIAkJICAgICBuZXdfc3RhdGUgPT0gSUJfUVBTX0VSUikpCi0JCQltdGhjYV9DTE9TRV9JQihkZXYsIHRvX21zcXAocXApLT5wb3J0LCAmc3RhdHVzKTsKKwkJCW10aGNhX0NMT1NFX0lCKGRldiwgcXAtPnBvcnQsICZzdGF0dXMpOwogCX0KIAogCS8qCkBAIC04MTYsMTAgKzgzNSwxMCBAQAogCSAqIGVudHJpZXMgYW5kIHJlaW5pdGlhbGl6ZSB0aGUgUVAuCiAJICovCiAJaWYgKG5ld19zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgJiYgIXFwLT5pYnFwLnVvYmplY3QpIHsKLQkJbXRoY2FfY3FfY2xlYW4oZGV2LCB0b19tY3EocXAtPmlicXAuc2VuZF9jcSktPmNxbiwgcXAtPnFwbiwKKwkJbXRoY2FfY3FfY2xlYW4oZGV2LCB0b19tY3EocXAtPmlicXAuc2VuZF9jcSksIHFwLT5xcG4sCiAJCQkgICAgICAgcXAtPmlicXAuc3JxID8gdG9fbXNycShxcC0+aWJxcC5zcnEpIDogTlVMTCk7CiAJCWlmIChxcC0+aWJxcC5zZW5kX2NxICE9IHFwLT5pYnFwLnJlY3ZfY3EpCi0JCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5yZWN2X2NxKS0+Y3FuLCBxcC0+cXBuLAorCQkJbXRoY2FfY3FfY2xlYW4oZGV2LCB0b19tY3EocXAtPmlicXAucmVjdl9jcSksIHFwLT5xcG4sCiAJCQkJICAgICAgIHFwLT5pYnFwLnNycSA/IHRvX21zcnEocXAtPmlicXAuc3JxKSA6IE5VTEwpOwogCiAJCW10aGNhX3dxX2luaXQoJnFwLT5zcSk7CkBAIC0xMDc5LDcgKzEwOTgsNyBAQAogCWludCByZXQ7CiAJaW50IGk7CiAKLQlhdG9taWNfc2V0KCZxcC0+cmVmY291bnQsIDEpOworCXFwLT5yZWZjb3VudCA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcXAtPndhaXQpOwogCXFwLT5zdGF0ZSAgICAJID0gSUJfUVBTX1JFU0VUOwogCXFwLT5hdG9taWNfcmRfZW4gPSAwOwpAQCAtMTIxMiw2ICsxMjMxLDkgQEAKIAlpZiAocXAtPnFwbiA9PSAtMSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBpbml0aWFsaXplIHBvcnQgdG8gemVybyBmb3IgZXJyb3ItY2F0Y2hpbmcuICovCisJcXAtPnBvcnQgPSAwOworCiAJZXJyID0gbXRoY2FfYWxsb2NfcXBfY29tbW9uKGRldiwgcGQsIHNlbmRfY3EsIHJlY3ZfY3EsCiAJCQkJICAgIHNlbmRfcG9saWN5LCBxcCk7CiAJaWYgKGVycikgewpAQCAtMTI2MSw3ICsxMjgzLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlzcXAtPnBvcnQgPSBwb3J0OworCXNxcC0+cXAucG9ydCAgICAgID0gcG9ydDsKIAlzcXAtPnFwLnFwbiAgICAgICA9IG1xcG47CiAJc3FwLT5xcC50cmFuc3BvcnQgPSBNTFg7CiAKQEAgLTEyOTgsNiArMTMyMCwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9xcF9yZWZjb3VudChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9xcCAqcXApCit7CisJaW50IGM7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnFwX3RhYmxlLmxvY2spOworCWMgPSBxcC0+cmVmY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnFwX3RhYmxlLmxvY2spOworCisJcmV0dXJuIGM7Cit9CisKIHZvaWQgbXRoY2FfZnJlZV9xcChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCiAJCSAgIHN0cnVjdCBtdGhjYV9xcCAqcXApCiB7CkBAIC0xMzE5LDE0ICsxMzUyLDE0IEBACiAJc3Bpbl9sb2NrKCZkZXYtPnFwX3RhYmxlLmxvY2spOwogCW10aGNhX2FycmF5X2NsZWFyKCZkZXYtPnFwX3RhYmxlLnFwLAogCQkJICBxcC0+cXBuICYgKGRldi0+bGltaXRzLm51bV9xcHMgLSAxKSk7CisJLS1xcC0+cmVmY291bnQ7CiAJc3Bpbl91bmxvY2soJmRldi0+cXBfdGFibGUubG9jayk7CiAKIAlpZiAoc2VuZF9jcSAhPSByZWN2X2NxKQogCQlzcGluX3VubG9jaygmcmVjdl9jcS0+bG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKIAotCWF0b21pY19kZWMoJnFwLT5yZWZjb3VudCk7Ci0Jd2FpdF9ldmVudChxcC0+d2FpdCwgIWF0b21pY19yZWFkKCZxcC0+cmVmY291bnQpKTsKKwl3YWl0X2V2ZW50KHFwLT53YWl0LCAhZ2V0X3FwX3JlZmNvdW50KGRldiwgcXApKTsKIAogCWlmIChxcC0+c3RhdGUgIT0gSUJfUVBTX1JFU0VUKQogCQltdGhjYV9NT0RJRllfUVAoZGV2LCBxcC0+c3RhdGUsIElCX1FQU19SRVNFVCwgcXAtPnFwbiwgMCwKQEAgLTEzMzgsMTAgKzEzNzEsMTAgQEAKIAkgKiB1bnJlZiB0aGUgbWVtLWZyZWUgdGFibGVzIGFuZCBmcmVlIHRoZSBRUE4gaW4gb3VyIHRhYmxlLgogCSAqLwogCWlmICghcXAtPmlicXAudW9iamVjdCkgewotCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5zZW5kX2NxKS0+Y3FuLCBxcC0+cXBuLAorCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5zZW5kX2NxKSwgcXAtPnFwbiwKIAkJCSAgICAgICBxcC0+aWJxcC5zcnEgPyB0b19tc3JxKHFwLT5pYnFwLnNycSkgOiBOVUxMKTsKIAkJaWYgKHFwLT5pYnFwLnNlbmRfY3EgIT0gcXAtPmlicXAucmVjdl9jcSkKLQkJCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnJlY3ZfY3EpLT5jcW4sIHFwLT5xcG4sCisJCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5yZWN2X2NxKSwgcXAtPnFwbiwKIAkJCQkgICAgICAgcXAtPmlicXAuc3JxID8gdG9fbXNycShxcC0+aWJxcC5zcnEpIDogTlVMTCk7CiAKIAkJbXRoY2FfZnJlZV9tZW1mcmVlKGRldiwgcXApOwpAQCAtMTQwNCwxMCArMTQzNywxMCBAQAogCQlzcXAtPnVkX2hlYWRlci5scmguc291cmNlX2xpZCA9IElCX0xJRF9QRVJNSVNTSVZFOwogCXNxcC0+dWRfaGVhZGVyLmJ0aC5zb2xpY2l0ZWRfZXZlbnQgPSAhISh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKTsKIAlpZiAoIXNxcC0+cXAuaWJxcC5xcF9udW0pCi0JCWliX2dldF9jYWNoZWRfcGtleSgmZGV2LT5pYl9kZXYsIHNxcC0+cG9ydCwKKwkJaWJfZ2V0X2NhY2hlZF9wa2V5KCZkZXYtPmliX2Rldiwgc3FwLT5xcC5wb3J0LAogCQkJCSAgIHNxcC0+cGtleV9pbmRleCwgJnBrZXkpOwogCWVsc2UKLQkJaWJfZ2V0X2NhY2hlZF9wa2V5KCZkZXYtPmliX2Rldiwgc3FwLT5wb3J0LAorCQlpYl9nZXRfY2FjaGVkX3BrZXkoJmRldi0+aWJfZGV2LCBzcXAtPnFwLnBvcnQsCiAJCQkJICAgd3ItPndyLnVkLnBrZXlfaW5kZXgsICZwa2V5KTsKIAlzcXAtPnVkX2hlYWRlci5idGgucGtleSA9IGNwdV90b19iZTE2KHBrZXkpOwogCXNxcC0+dWRfaGVhZGVyLmJ0aC5kZXN0aW5hdGlvbl9xcG4gPSBjcHVfdG9fYmUzMih3ci0+d3IudWQucmVtb3RlX3Fwbik7CkBAIC0xNjk0LDIzICsxNzI3LDcgQEAKIAogCWluZCA9IHFwLT5ycS5uZXh0X2luZDsKIAotCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKLQkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7Ci0JCQlucmVxID0gMDsKLQotCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMigocXAtPnJxLm5leHRfaW5kIDw8IHFwLT5ycS53cWVfc2hpZnQpIHwgc2l6ZTApOwotCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihxcC0+cXBuIDw8IDgpOwotCi0JCQl3bWIoKTsKLQotCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKLQkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCi0JCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOwotCi0JCQlxcC0+cnEuaGVhZCArPSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQjsKLQkJCXNpemUwID0gMDsKLQkJfQotCisJZm9yIChucmVxID0gMDsgd3I7IHdyID0gd3ItPm5leHQpIHsKIAkJaWYgKG10aGNhX3dxX292ZXJmbG93KCZxcC0+cnEsIG5yZXEsIHFwLT5pYnFwLnJlY3ZfY3EpKSB7CiAJCQltdGhjYV9lcnIoZGV2LCAiUlEgJTA2eCBmdWxsICgldSBoZWFkLCAldSB0YWlsLCIKIAkJCQkJIiAlZCBtYXgsICVkIG5yZXEpXG4iLCBxcC0+cXBuLApAQCAtMTc2NCw2ICsxNzgxLDIzIEBACiAJCSsraW5kOwogCQlpZiAodW5saWtlbHkoaW5kID49IHFwLT5ycS5tYXgpKQogCQkJaW5kIC09IHFwLT5ycS5tYXg7CisKKwkJKytucmVxOworCQlpZiAodW5saWtlbHkobnJlcSA9PSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQikpIHsKKwkJCW5yZXEgPSAwOworCisJCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKChxcC0+cnEubmV4dF9pbmQgPDwgcXAtPnJxLndxZV9zaGlmdCkgfCBzaXplMCk7CisJCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKHFwLT5xcG4gPDwgOCk7CisKKwkJCXdtYigpOworCisJCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAorCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKKwkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7CisKKwkJCXFwLT5ycS5oZWFkICs9IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCOworCQkJc2l6ZTAgPSAwOworCQl9CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKaW5kZXggMmRkM2FlYS4uYjI5MmZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAKIAkvKiBTYW5pdHkgY2hlY2sgU1JRIHNpemUgYmVmb3JlIHByb2NlZWRpbmcgKi8KIAlpZiAoYXR0ci0+bWF4X3dyICA+IGRldi0+bGltaXRzLm1heF9zcnFfd3FlcyB8fAotCSAgICBhdHRyLT5tYXhfc2dlID4gZGV2LT5saW1pdHMubWF4X3NnKQorCSAgICBhdHRyLT5tYXhfc2dlID4gZGV2LT5saW1pdHMubWF4X3NycV9zZ2UpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3JxLT5tYXggICAgICA9IGF0dHItPm1heF93cjsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCQlnb3RvIGVycl9vdXRfbWFpbGJveDsKIAogCXNwaW5fbG9ja19pbml0KCZzcnEtPmxvY2spOwotCWF0b21pY19zZXQoJnNycS0+cmVmY291bnQsIDEpOworCXNycS0+cmVmY291bnQgPSAxOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNycS0+d2FpdCk7CiAKIAlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQpAQCAtMzA4LDYgKzMwOCwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zcnFfcmVmY291bnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpCit7CisJaW50IGM7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnNycV90YWJsZS5sb2NrKTsKKwljID0gc3JxLT5yZWZjb3VudDsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+c3JxX3RhYmxlLmxvY2spOworCisJcmV0dXJuIGM7Cit9CisKIHZvaWQgbXRoY2FfZnJlZV9zcnEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpCiB7CiAJc3RydWN0IG10aGNhX21haWxib3ggKm1haWxib3g7CkBAIC0zMjksMTAgKzM0MCwxMCBAQAogCXNwaW5fbG9ja19pcnEoJmRldi0+c3JxX3RhYmxlLmxvY2spOwogCW10aGNhX2FycmF5X2NsZWFyKCZkZXYtPnNycV90YWJsZS5zcnEsCiAJCQkgIHNycS0+c3JxbiAmIChkZXYtPmxpbWl0cy5udW1fc3JxcyAtIDEpKTsKKwktLXNycS0+cmVmY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnNycV90YWJsZS5sb2NrKTsKIAotCWF0b21pY19kZWMoJnNycS0+cmVmY291bnQpOwotCXdhaXRfZXZlbnQoc3JxLT53YWl0LCAhYXRvbWljX3JlYWQoJnNycS0+cmVmY291bnQpKTsKKwl3YWl0X2V2ZW50KHNycS0+d2FpdCwgIWdldF9zcnFfcmVmY291bnQoZGV2LCBzcnEpKTsKIAogCWlmICghc3JxLT5pYnNycS51b2JqZWN0KSB7CiAJCW10aGNhX2ZyZWVfc3JxX2J1ZihkZXYsIHNycSk7CkBAIC00MTQsNyArNDI1LDcgQEAKIAlzcGluX2xvY2soJmRldi0+c3JxX3RhYmxlLmxvY2spOwogCXNycSA9IG10aGNhX2FycmF5X2dldCgmZGV2LT5zcnFfdGFibGUuc3JxLCBzcnFuICYgKGRldi0+bGltaXRzLm51bV9zcnFzIC0gMSkpOwogCWlmIChzcnEpCi0JCWF0b21pY19pbmMoJnNycS0+cmVmY291bnQpOworCQkrK3NycS0+cmVmY291bnQ7CiAJc3Bpbl91bmxvY2soJmRldi0+c3JxX3RhYmxlLmxvY2spOwogCiAJaWYgKCFzcnEpIHsKQEAgLTQzMSw4ICs0NDIsMTAgQEAKIAlzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBzcnEtPmlic3JxLnNycV9jb250ZXh0KTsKIAogb3V0OgotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzcnEtPnJlZmNvdW50KSkKKwlzcGluX2xvY2soJmRldi0+c3JxX3RhYmxlLmxvY2spOworCWlmICghLS1zcnEtPnJlZmNvdW50KQogCQl3YWtlX3VwKCZzcnEtPndhaXQpOworCXNwaW5fdW5sb2NrKCZkZXYtPnNycV90YWJsZS5sb2NrKTsKIH0KIAogLyoKQEAgLTQ3NywyNiArNDkwLDcgQEAKIAogCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAotCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKLQkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7Ci0JCQlucmVxID0gMDsKLQotCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihmaXJzdF9pbmQgPDwgc3JxLT53cWVfc2hpZnQpOwotCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihzcnEtPnNycW4gPDwgOCk7Ci0KLQkJCS8qCi0JCQkgKiBNYWtlIHN1cmUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgd3JpdHRlbgotCQkJICogYmVmb3JlIGRvb3JiZWxsIGlzIHJ1bmcuCi0JCQkgKi8KLQkJCXdtYigpOwotCi0JCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAotCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKLQkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7Ci0KLQkJCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKLQkJfQotCisJZm9yIChucmVxID0gMDsgd3I7IHdyID0gd3ItPm5leHQpIHsKIAkJaW5kID0gc3JxLT5maXJzdF9mcmVlOwogCiAJCWlmIChpbmQgPCAwKSB7CkBAIC01NTYsNiArNTUwLDI2IEBACiAKIAkJc3JxLT53cmlkW2luZF0gID0gd3ItPndyX2lkOwogCQlzcnEtPmZpcnN0X2ZyZWUgPSBuZXh0X2luZDsKKworCQkrK25yZXE7CisJCWlmICh1bmxpa2VseShucmVxID09IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCKSkgeworCQkJbnJlcSA9IDA7CisKKwkJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoZmlyc3RfaW5kIDw8IHNycS0+d3FlX3NoaWZ0KTsKKwkJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoc3JxLT5zcnFuIDw8IDgpOworCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoYXQgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4KKwkJCSAqIGJlZm9yZSBkb29yYmVsbCBpcyBydW5nLgorCQkJICovCisJCQl3bWIoKTsKKworCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKKwkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCisJCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOworCisJCQlmaXJzdF9pbmQgPSBzcnEtPmZpcnN0X2ZyZWU7CisJCX0KIAl9CiAKIAlpZiAobGlrZWx5KG5yZXEpKSB7CkBAIC02NjAsNiArNjc0LDMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IG10aGNhX21heF9zcnFfc2dlKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKK3sKKwlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQlyZXR1cm4gZGV2LT5saW1pdHMubWF4X3NnOworCisJLyoKKwkgKiBTUlEgYWxsb2NhdGlvbnMgYXJlIGJhc2VkIG9uIHBvd2VycyBvZiAyIGZvciBUYXZvciwKKwkgKiAoYWx0aG91Z2ggdGhleSBvbmx5IG5lZWQgdG8gYmUgbXVsdGlwbGVzIG9mIDE2IGJ5dGVzKS4KKwkgKgorCSAqIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBiYXNlIHRoZSBtYXggbnVtYmVyIG9mIHNnIGVudHJpZXMgb24KKwkgKiB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyIGRlc2NyaXB0b3Igc2l6ZSB0aGF0IGlzIDw9IHRvIHRoZQorCSAqIGFjdHVhbCBtYXggV1FFIGRlc2NyaXB0b3Igc2l6ZSwgcmF0aGVyIHRoYW4gcmV0dXJuIHRoZQorCSAqIG1heF9zZyB2YWx1ZSBnaXZlbiBieSB0aGUgZmlybXdhcmUgKHdoaWNoIGlzIGJhc2VkIG9uIFdRRQorCSAqIHNpemVzIGFzIG11bHRpcGxlcyBvZiAxNiwgbm90IHBvd2VycyBvZiAyKS4KKwkgKgorCSAqIElmIFNSUSBpbXBsZW1lbnRhdGlvbiBpcyBjaGFuZ2VkIGZvciBUYXZvciB0byBiZSBiYXNlZCBvbgorCSAqIG11bHRpcGxlcyBvZiAxNiwgdGhlIGNhbGN1bGF0aW9uIGJlbG93IGNhbiBiZSBkZWxldGVkIGFuZAorCSAqIHRoZSBGVyBtYXhfc2cgdmFsdWUgcmV0dXJuZWQuCisJICovCisJcmV0dXJuIG1pbl90KGludCwgZGV2LT5saW1pdHMubWF4X3NnLAorCQkgICAgICgoMSA8PCAoZmxzKGRldi0+bGltaXRzLm1heF9kZXNjX3N6KSAtIDEpKSAtCisJCSAgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSkgLworCQkgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKSk7Cit9CisKIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9zcnFfdGFibGUoc3RydWN0IG10aGNhX2RldiAqZGV2KQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcKaW5kZXggOGQyZTA0Yy4uMTNkNmQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZwpAQCAtMTAsOCArMTAsOSBAQAogCSAgZ3JvdXA6IDxodHRwOi8vd3d3LmlldGYub3JnL2h0bWwuY2hhcnRlcnMvaXBvaWItY2hhcnRlci5odG1sPi4KIAogY29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUcKLQlib29sICJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nIgorCWJvb2wgIklQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmciIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBJTkZJTklCQU5EX0lQT0lCCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gY2F1c2VzIGRlYnVnZ2luZyBjb2RlIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlCiAJICBJUG9JQiBkcml2ZXIuICBUaGUgb3V0cHV0IGNhbiBiZSB0dXJuZWQgb24gdmlhIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IGI2NDAxMDcuLjEyYTFlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTY1LDYgKzY1LDggQEAKIAogCUlQT0lCX1JYX1JJTkdfU0laRSAJICA9IDEyOCwKIAlJUE9JQl9UWF9SSU5HX1NJWkUgCSAgPSA2NCwKKwlJUE9JQl9NQVhfUVVFVUVfU0laRQkgID0gODE5MiwKKwlJUE9JQl9NSU5fUVVFVUVfU0laRQkgID0gMiwKIAogCUlQT0lCX05VTV9XQyAJCSAgPSA0LAogCkBAIC0yMzAsNiArMjMyLDkgQEAKIAkJCQkgICAgIElORklOSUJBTkRfQUxFTiwgc2l6ZW9mKHZvaWQgKikpOwogfQogCitzdHJ1Y3QgaXBvaWJfbmVpZ2ggKmlwb2liX25laWdoX2FsbG9jKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKTsKK3ZvaWQgaXBvaWJfbmVpZ2hfZnJlZShzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoKTsKKwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcG9pYl93b3JrcXVldWU7CiAKIC8qIGZ1bmN0aW9ucyAqLwpAQCAtMzI5LDYgKzMzNCw4IEBACiAjZGVmaW5lIGlwb2liX3dhcm4ocHJpdiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJaXBvaWJfcHJpbnRrKEtFUk5fV0FSTklORywgcHJpdiwgZm9ybWF0ICwgIyMgYXJnKQogCitleHRlcm4gaW50IGlwb2liX3NlbmRxX3NpemU7CitleHRlcm4gaW50IGlwb2liX3JlY3ZxX3NpemU7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogZXh0ZXJuIGludCBpcG9pYl9kZWJ1Z19sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYwppbmRleCA2ODUyNThlLi41ZGRlMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJICAgZ2lkX2J1ZiwgcGF0aC5wYXRocmVjLmRsaWQgPyAieWVzIiA6ICJubyIpOwogCiAJaWYgKHBhdGgucGF0aHJlYy5kbGlkKSB7Ci0JCXJhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OworCQlyYXRlID0gaWJfcmF0ZV90b19tdWx0KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OwogCiAJCXNlcV9wcmludGYoZmlsZSwKIAkJCSAgICIgIERMSUQ6ICAgICAweCUwNHhcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwppbmRleCBlZDY1MjAyLi44NDA2ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IElQT0lCX1JYX1JJTkdfU0laRTsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGlwb2liX3JlY3ZxX3NpemU7ICsraSkgewogCQlpZiAoaXBvaWJfYWxsb2Nfcnhfc2tiKGRldiwgaSkpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWNlaXZlIGJ1ZmZlciAlZFxuIiwgaSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmICh3cl9pZCAmIElQT0lCX09QX1JFQ1YpIHsKIAkJd3JfaWQgJj0gfklQT0lCX09QX1JFQ1Y7CiAKLQkJaWYgKHdyX2lkIDwgSVBPSUJfUlhfUklOR19TSVpFKSB7CisJCWlmICh3cl9pZCA8IGlwb2liX3JlY3ZxX3NpemUpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgID0gcHJpdi0+cnhfcmluZ1t3cl9pZF0uc2tiOwogCQkJZG1hX2FkZHJfdCAgICAgIGFkZHIgPSBwcml2LT5yeF9yaW5nW3dyX2lkXS5tYXBwaW5nOwogCkBAIC0yNTIsOSArMjUyLDkgQEAKIAkJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCWlmICh3cl9pZCA+PSBJUE9JQl9UWF9SSU5HX1NJWkUpIHsKKwkJaWYgKHdyX2lkID49IGlwb2liX3NlbmRxX3NpemUpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImNvbXBsZXRpb24gZXZlbnQgd2l0aCB3cmlkICVkICg+ICVkKVxuIiwKLQkJCQkgICB3cl9pZCwgSVBPSUJfVFhfUklOR19TSVpFKTsKKwkJCQkgICB3cl9pZCwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjc1LDcgKzI3NSw4IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJCSsrcHJpdi0+dHhfdGFpbDsKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgotCQkgICAgcHJpdi0+dHhfaGVhZCAtIHByaXYtPnR4X3RhaWwgPD0gSVBPSUJfVFhfUklOR19TSVpFIC8gMikKKwkJICAgIHRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fVVAsICZwcml2LT5mbGFncykgJiYKKwkJICAgIHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsIDw9IGlwb2liX3NlbmRxX3NpemUgPj4gMSkKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCkBAIC0zNDQsMTMgKzM0NSwxMyBAQAogCSAqIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgcmVjb3JkZWQgYW5kCiAJICogb3VyIHN0YXRlIGlzIGNvbnNpc3RlbnQgYmVmb3JlIHdlIGNhbGwgcG9zdF9zZW5kKCkuCiAJICovCi0JdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChJUE9JQl9UWF9SSU5HX1NJWkUgLSAxKV07CisJdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCXR4X3JlcS0+c2tiID0gc2tiOwogCWFkZHIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwogCXBjaV91bm1hcF9hZGRyX3NldCh0eF9yZXEsIG1hcHBpbmcsIGFkZHIpOwogCi0JaWYgKHVubGlrZWx5KHBvc3Rfc2VuZChwcml2LCBwcml2LT50eF9oZWFkICYgKElQT0lCX1RYX1JJTkdfU0laRSAtIDEpLAorCWlmICh1bmxpa2VseShwb3N0X3NlbmQocHJpdiwgcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSksCiAJCQkgICAgICAgYWRkcmVzcy0+YWgsIHFwbiwgYWRkciwgc2tiLT5sZW4pKSkgewogCQlpcG9pYl93YXJuKHByaXYsICJwb3N0X3NlbmQgZmFpbGVkXG4iKTsKIAkJKytwcml2LT5zdGF0cy50eF9lcnJvcnM7CkBAIC0zNjMsNyArMzY0LDcgQEAKIAkJYWRkcmVzcy0+bGFzdF9zZW5kID0gcHJpdi0+dHhfaGVhZDsKIAkJKytwcml2LT50eF9oZWFkOwogCi0JCWlmIChwcml2LT50eF9oZWFkIC0gcHJpdi0+dHhfdGFpbCA9PSBJUE9JQl9UWF9SSU5HX1NJWkUpIHsKKwkJaWYgKHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsID09IGlwb2liX3NlbmRxX3NpemUpIHsKIAkJCWlwb2liX2RiZyhwcml2LCAiVFggcmluZyBmdWxsLCBzdG9wcGluZyBrZXJuZWwgbmV0IHF1ZXVlXG4iKTsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJfQpAQCAtNDg4LDcgKzQ4OSw3IEBACiAJaW50IHBlbmRpbmcgPSAwOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IElQT0lCX1JYX1JJTkdfU0laRTsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBpcG9pYl9yZWN2cV9zaXplOyArK2kpCiAJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikKIAkJCSsrcGVuZGluZzsKIApAQCAtNTI3LDcgKzUyOCw3IEBACiAJCQkgKi8KIAkJCXdoaWxlICgoaW50KSBwcml2LT50eF90YWlsIC0gKGludCkgcHJpdi0+dHhfaGVhZCA8IDApIHsKIAkJCQl0eF9yZXEgPSAmcHJpdi0+dHhfcmluZ1twcml2LT50eF90YWlsICYKLQkJCQkJCQkoSVBPSUJfVFhfUklOR19TSVpFIC0gMSldOworCQkJCQkJCShpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCQkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EtPmRtYV9kZXZpY2UsCiAJCQkJCQkgcGNpX3VubWFwX2FkZHIodHhfcmVxLCBtYXBwaW5nKSwKIAkJCQkJCSB0eF9yZXEtPnNrYi0+bGVuLApAQCAtNTM2LDcgKzUzNyw3IEBACiAJCQkJKytwcml2LT50eF90YWlsOwogCQkJfQogCi0JCQlmb3IgKGkgPSAwOyBpIDwgSVBPSUJfUlhfUklOR19TSVpFOyArK2kpCisJCQlmb3IgKGkgPSAwOyBpIDwgaXBvaWJfcmVjdnFfc2l6ZTsgKytpKQogCQkJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikgewogCQkJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLAogCQkJCQkJCSBwY2lfdW5tYXBfYWRkcigmcHJpdi0+cnhfcmluZ1tpXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggOWIwYmQ3Yy4uY2IwNzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBGb3IgQVJQSFJEX3h4eCAqLwogCkBAIC01Myw2ICs1NCwxNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUC1vdmVyLUluZmluaUJhbmQgbmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogCitpbnQgaXBvaWJfc2VuZHFfc2l6ZSBfX3JlYWRfbW9zdGx5ID0gSVBPSUJfVFhfUklOR19TSVpFOworaW50IGlwb2liX3JlY3ZxX3NpemUgX19yZWFkX21vc3RseSA9IElQT0lCX1JYX1JJTkdfU0laRTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHNlbmRfcXVldWVfc2l6ZSwgaXBvaWJfc2VuZHFfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZF9xdWV1ZV9zaXplLCAiTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHNlbmQgcXVldWUiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZWN2X3F1ZXVlX3NpemUsIGlwb2liX3JlY3ZxX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlY3ZfcXVldWVfc2l6ZSwgIk51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByZWNlaXZlIHF1ZXVlIik7CisKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogaW50IGlwb2liX2RlYnVnX2xldmVsOwogCkBAIC0yNTIsOCArMjYxLDggQEAKIAkJICovCiAJCWlmIChuZWlnaC0+YWgpCiAJCQlpcG9pYl9wdXRfYWgobmVpZ2gtPmFoKTsKLQkJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKLQkJa2ZyZWUobmVpZ2gpOworCisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTMyNyw5ICszMzYsOCBAQAogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwb2liX3BhdGggKnBhdGgsICp0cDsKIAlMSVNUX0hFQUQocmVtb3ZlX2xpc3QpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJbGlzdF9zcGxpY2UoJnByaXYtPnBhdGhfbGlzdCwgJnJlbW92ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cGF0aF9saXN0KTsKQEAgLTMzNywxNCArMzQ1LDE1IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmcmVtb3ZlX2xpc3QsIGxpc3QpCiAJCXJiX2VyYXNlKCZwYXRoLT5yYl9ub2RlLCAmcHJpdi0+cGF0aF90cmVlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYXRoLCB0cCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CiAJCWlmIChwYXRoLT5xdWVyeSkKIAkJCWliX3NhX2NhbmNlbF9xdWVyeShwYXRoLT5xdWVyeV9pZCwgcGF0aC0+cXVlcnkpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwYXRoLT5kb25lKTsKIAkJcGF0aF9mcmVlKGRldiwgcGF0aCk7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwYXRoX3JlY19jb21wbGV0aW9uKGludCBzdGF0dXMsCkBAIC0zNzMsMTYgKzM4Miw5IEBACiAJCXN0cnVjdCBpYl9haF9hdHRyIGF2ID0gewogCQkJLmRsaWQgCSAgICAgICA9IGJlMTZfdG9fY3B1KHBhdGhyZWMtPmRsaWQpLAogCQkJLnNsIAkgICAgICAgPSBwYXRocmVjLT5zbCwKLQkJCS5wb3J0X251bSAgICAgID0gcHJpdi0+cG9ydAorCQkJLnBvcnRfbnVtICAgICAgPSBwcml2LT5wb3J0LAorCQkJLnN0YXRpY19yYXRlICAgPSBwYXRocmVjLT5yYXRlCiAJCX07Ci0JCWludCBwYXRoX3JhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGhyZWMtPnJhdGUpOwotCi0JCWlmIChwYXRoX3JhdGUgPiAwICYmIHByaXYtPmxvY2FsX3JhdGUgPiBwYXRoX3JhdGUpCi0JCQlhdi5zdGF0aWNfcmF0ZSA9IChwcml2LT5sb2NhbF9yYXRlIC0gMSkgLyBwYXRoX3JhdGU7Ci0KLQkJaXBvaWJfZGJnKHByaXYsICJzdGF0aWNfcmF0ZSAlZCBmb3IgbG9jYWwgcG9ydCAlZFgsIHBhdGggJWRYXG4iLAotCQkJICBhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKLQkJCSAgaWJfc2FfcmF0ZV9lbnVtX3RvX2ludChwYXRocmVjLT5yYXRlKSk7CiAKIAkJYWggPSBpcG9pYl9jcmVhdGVfYWgoZGV2LCBwcml2LT5wZCwgJmF2KTsKIAl9CkBAIC00ODEsNyArNDgzLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoOwogCi0JbmVpZ2ggPSBrbWFsbG9jKHNpemVvZiAqbmVpZ2gsIEdGUF9BVE9NSUMpOworCW5laWdoID0gaXBvaWJfbmVpZ2hfYWxsb2Moc2tiLT5kc3QtPm5laWdoYm91cik7CiAJaWYgKCFuZWlnaCkgewogCQkrK3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC00ODksOCArNDkxLDYgQEAKIAl9CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZuZWlnaC0+cXVldWUpOwotCW5laWdoLT5uZWlnaGJvdXIgPSBza2ItPmRzdC0+bmVpZ2hib3VyOwotCSp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSA9IG5laWdoOwogCiAJLyoKIAkgKiBXZSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBpcG9pYl9zdGFydF94bWl0LCBzbyB3ZSdyZQpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LAogCQkJCSAgICAgICAodW5pb24gaWJfZ2lkICopIChza2ItPmRzdC0+bmVpZ2hib3VyLT5oYSArIDQpKTsKIAkJaWYgKCFwYXRoKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9wYXRoOwogCiAJCV9fcGF0aF9hZGQoZGV2LCBwYXRoKTsKIAl9CkBAIC01MjEsMTcgKzUyMSwxNyBAQAogCQlfX3NrYl9xdWV1ZV90YWlsKCZuZWlnaC0+cXVldWUsIHNrYik7CiAKIAkJaWYgKCFwYXRoLT5xdWVyeSAmJiBwYXRoX3JlY19zdGFydChkZXYsIHBhdGgpKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9saXN0OwogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm47CiAKLWVycjoKLQkqdG9faXBvaWJfbmVpZ2goc2tiLT5kc3QtPm5laWdoYm91cikgPSBOVUxMOworZXJyX2xpc3Q6CiAJbGlzdF9kZWwoJm5laWdoLT5saXN0KTsKLQlrZnJlZShuZWlnaCk7CiAKK2Vycl9wYXRoOgorCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCSsrcHJpdi0+c3RhdHMudHhfZHJvcHBlZDsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCkBAIC03NjMsOCArNzYzLDcgQEAKIAkJaWYgKG5laWdoLT5haCkKIAkJCWFoID0gbmVpZ2gtPmFoOwogCQlsaXN0X2RlbCgmbmVpZ2gtPmxpc3QpOwotCQkqdG9faXBvaWJfbmVpZ2gobikgPSBOVUxMOwotCQlrZnJlZShuZWlnaCk7CisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTc3Myw2ICs3NzIsMjYgQEAKIAkJaXBvaWJfcHV0X2FoKGFoKTsKIH0KIAorc3RydWN0IGlwb2liX25laWdoICppcG9pYl9uZWlnaF9hbGxvYyhzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaGJvdXIpCit7CisJc3RydWN0IGlwb2liX25laWdoICpuZWlnaDsKKworCW5laWdoID0ga21hbGxvYyhzaXplb2YgKm5laWdoLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5laWdoKQorCQlyZXR1cm4gTlVMTDsKKworCW5laWdoLT5uZWlnaGJvdXIgPSBuZWlnaGJvdXI7CisJKnRvX2lwb2liX25laWdoKG5laWdoYm91cikgPSBuZWlnaDsKKworCXJldHVybiBuZWlnaDsKK30KKwordm9pZCBpcG9pYl9uZWlnaF9mcmVlKHN0cnVjdCBpcG9pYl9uZWlnaCAqbmVpZ2gpCit7CisJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKKwlrZnJlZShuZWlnaCk7Cit9CisKIHN0YXRpYyBpbnQgaXBvaWJfbmVpZ2hfc2V0dXBfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpCiB7CiAJcGFybXMtPm5laWdoX2Rlc3RydWN0b3IgPSBpcG9pYl9uZWlnaF9kZXN0cnVjdG9yOwpAQCAtNzg1LDIwICs4MDQsMTkgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQWxsb2NhdGUgUlgvVFggInJpbmdzIiB0byBob2xkIHF1ZXVlZCBza2JzICovCi0KLQlwcml2LT5yeF9yaW5nID0Ja3phbGxvYyhJUE9JQl9SWF9SSU5HX1NJWkUgKiBzaXplb2YgKHN0cnVjdCBpcG9pYl9yeF9idWYpLAorCXByaXYtPnJ4X3JpbmcgPQlremFsbG9jKGlwb2liX3JlY3ZxX3NpemUgKiBzaXplb2YgKnByaXYtPnJ4X3JpbmcsCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5yeF9yaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgUlggcmluZyAoJWQgZW50cmllcylcbiIsCi0JCSAgICAgICBjYS0+bmFtZSwgSVBPSUJfUlhfUklOR19TSVpFKTsKKwkJICAgICAgIGNhLT5uYW1lLCBpcG9pYl9yZWN2cV9zaXplKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcHJpdi0+dHhfcmluZyA9IGt6YWxsb2MoSVBPSUJfVFhfUklOR19TSVpFICogc2l6ZW9mIChzdHJ1Y3QgaXBvaWJfdHhfYnVmKSwKKwlwcml2LT50eF9yaW5nID0ga3phbGxvYyhpcG9pYl9zZW5kcV9zaXplICogc2l6ZW9mICpwcml2LT50eF9yaW5nLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+dHhfcmluZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFRYIHJpbmcgKCVkIGVudHJpZXMpXG4iLAotCQkgICAgICAgY2EtPm5hbWUsIElQT0lCX1RYX1JJTkdfU0laRSk7CisJCSAgICAgICBjYS0+bmFtZSwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCWdvdG8gb3V0X3J4X3JpbmdfY2xlYW51cDsKIAl9CiAKQEAgLTg2Niw3ICs4ODQsNyBAQAogCWRldi0+aGFyZF9oZWFkZXJfbGVuIAkgPSBJUE9JQl9FTkNBUF9MRU4gKyBJTkZJTklCQU5EX0FMRU47CiAJZGV2LT5hZGRyX2xlbiAJCSA9IElORklOSUJBTkRfQUxFTjsKIAlkZXYtPnR5cGUgCQkgPSBBUlBIUkRfSU5GSU5JQkFORDsKLQlkZXYtPnR4X3F1ZXVlX2xlbiAJID0gSVBPSUJfVFhfUklOR19TSVpFICogMjsKKwlkZXYtPnR4X3F1ZXVlX2xlbiAJID0gaXBvaWJfc2VuZHFfc2l6ZSAqIDI7CiAJZGV2LT5mZWF0dXJlcyAgICAgICAgICAgID0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfCBORVRJRl9GX0xMVFg7CiAKIAkvKiBNVFUgd2lsbCBiZSByZXNldCB3aGVuIG1jYXN0IGpvaW4gaGFwcGVucyAqLwpAQCAtMTExOCw2ICsxMTM2LDE0IEBACiB7CiAJaW50IHJldDsKIAorCWlwb2liX3JlY3ZxX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oaXBvaWJfcmVjdnFfc2l6ZSk7CisJaXBvaWJfcmVjdnFfc2l6ZSA9IG1pbihpcG9pYl9yZWN2cV9zaXplLCBJUE9JQl9NQVhfUVVFVUVfU0laRSk7CisJaXBvaWJfcmVjdnFfc2l6ZSA9IG1heChpcG9pYl9yZWN2cV9zaXplLCBJUE9JQl9NSU5fUVVFVUVfU0laRSk7CisKKwlpcG9pYl9zZW5kcV9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKGlwb2liX3NlbmRxX3NpemUpOworCWlwb2liX3NlbmRxX3NpemUgPSBtaW4oaXBvaWJfc2VuZHFfc2l6ZSwgSVBPSUJfTUFYX1FVRVVFX1NJWkUpOworCWlwb2liX3NlbmRxX3NpemUgPSBtYXgoaXBvaWJfc2VuZHFfc2l6ZSwgSVBPSUJfTUlOX1FVRVVFX1NJWkUpOworCiAJcmV0ID0gaXBvaWJfcmVnaXN0ZXJfZGVidWdmcygpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCA5M2M0NjJlLi4xZGFlNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTExNCw4ICsxMTQsNyBAQAogCQkgKi8KIAkJaWYgKG5laWdoLT5haCkKIAkJCWlwb2liX3B1dF9haChuZWlnaC0+YWgpOwotCQkqdG9faXBvaWJfbmVpZ2gobmVpZ2gtPm5laWdoYm91cikgPSBOVUxMOwotCQlrZnJlZShuZWlnaCk7CisJCWlwb2liX25laWdoX2ZyZWUobmVpZ2gpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTI1MSw2ICsyNTAsNyBAQAogCQkJLnBvcnRfbnVtICAgICAgPSBwcml2LT5wb3J0LAogCQkJLnNsCSAgICAgICA9IG1jYXN0LT5tY21lbWJlci5zbCwKIAkJCS5haF9mbGFncyAgICAgID0gSUJfQUhfR1JILAorCQkJLnN0YXRpY19yYXRlICAgPSBtY2FzdC0+bWNtZW1iZXIucmF0ZSwKIAkJCS5ncmgJICAgICAgID0gewogCQkJCS5mbG93X2xhYmVsICAgID0gYmUzMl90b19jcHUobWNhc3QtPm1jbWVtYmVyLmZsb3dfbGFiZWwpLAogCQkJCS5ob3BfbGltaXQgICAgID0gbWNhc3QtPm1jbWVtYmVyLmhvcF9saW1pdCwKQEAgLTI1OCwxNyArMjU4LDggQEAKIAkJCQkudHJhZmZpY19jbGFzcyA9IG1jYXN0LT5tY21lbWJlci50cmFmZmljX2NsYXNzCiAJCQl9CiAJCX07Ci0JCWludCBwYXRoX3JhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKTsKLQogCQlhdi5ncmguZGdpZCA9IG1jYXN0LT5tY21lbWJlci5tZ2lkOwogCi0JCWlmIChwYXRoX3JhdGUgPiAwICYmIHByaXYtPmxvY2FsX3JhdGUgPiBwYXRoX3JhdGUpCi0JCQlhdi5zdGF0aWNfcmF0ZSA9IChwcml2LT5sb2NhbF9yYXRlIC0gMSkgLyBwYXRoX3JhdGU7Ci0KLQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJzdGF0aWNfcmF0ZSAlZCBmb3IgbG9jYWwgcG9ydCAlZFgsIG1jbWVtYmVyICVkWFxuIiwKLQkJCQlhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKLQkJCQlpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKSk7Ci0KIAkJYWggPSBpcG9pYl9jcmVhdGVfYWgoZGV2LCBwcml2LT5wZCwgJmF2KTsKIAkJaWYgKCFhaCkgewogCQkJaXBvaWJfd2Fybihwcml2LCAiaWJfYWRkcmVzc19jcmVhdGUgZmFpbGVkXG4iKTsKQEAgLTYxOCw2ICs2MDksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgd2FpdF9mb3JfbWNhc3Rfam9pbihzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGlwb2liX21jYXN0ICptY2FzdCkKK3sKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlpZiAobWNhc3QgJiYgbWNhc3QtPnF1ZXJ5KSB7CisJCWliX3NhX2NhbmNlbF9xdWVyeShtY2FzdC0+cXVlcnlfaWQsIG1jYXN0LT5xdWVyeSk7CisJCW1jYXN0LT5xdWVyeSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJCWlwb2liX2RiZ19tY2FzdChwcml2LCAid2FpdGluZyBmb3IgTUdJRCAiIElQT0lCX0dJRF9GTVQgIlxuIiwKKwkJCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKKwl9CisJZWxzZQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworfQorCiBpbnQgaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC02MzcsMjggKzY0NCwxMCBAQAogCWlmIChmbHVzaCkKIAkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQlpZiAocHJpdi0+YnJvYWRjYXN0ICYmIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpIHsKLQkJaWJfc2FfY2FuY2VsX3F1ZXJ5KHByaXYtPmJyb2FkY2FzdC0+cXVlcnlfaWQsIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpOwotCQlwcml2LT5icm9hZGNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJ3YWl0aW5nIGZvciBiY2FzdFxuIik7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByaXYtPmJyb2FkY2FzdC0+ZG9uZSk7Ci0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJd2FpdF9mb3JfbWNhc3Rfam9pbihwcml2LCBwcml2LT5icm9hZGNhc3QpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtY2FzdCwgJnByaXYtPm11bHRpY2FzdF9saXN0LCBsaXN0KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCQlpZiAobWNhc3QtPnF1ZXJ5KSB7Ci0JCQlpYl9zYV9jYW5jZWxfcXVlcnkobWNhc3QtPnF1ZXJ5X2lkLCBtY2FzdC0+cXVlcnkpOwotCQkJbWNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIndhaXRpbmcgZm9yIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCi0JCQkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmcHJpdi0+bXVsdGljYXN0X2xpc3QsIGxpc3QpCisJCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NzIsMTMgKzc2MSwxMSBAQAogCQlpZiAoc2tiLT5kc3QgICAgICAgICAgICAmJgogCQkgICAgc2tiLT5kc3QtPm5laWdoYm91ciAmJgogCQkgICAgISp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSkgewotCQkJc3RydWN0IGlwb2liX25laWdoICpuZWlnaCA9IGttYWxsb2Moc2l6ZW9mICpuZWlnaCwgR0ZQX0FUT01JQyk7CisJCQlzdHJ1Y3QgaXBvaWJfbmVpZ2ggKm5laWdoID0gaXBvaWJfbmVpZ2hfYWxsb2Moc2tiLT5kc3QtPm5laWdoYm91cik7CiAKIAkJCWlmIChuZWlnaCkgewogCQkJCWtyZWZfZ2V0KCZtY2FzdC0+YWgtPnJlZik7CiAJCQkJbmVpZ2gtPmFoICAJPSBtY2FzdC0+YWg7Ci0JCQkJbmVpZ2gtPm5laWdoYm91ciA9IHNrYi0+ZHN0LT5uZWlnaGJvdXI7Ci0JCQkJKnRvX2lwb2liX25laWdoKHNrYi0+ZHN0LT5uZWlnaGJvdXIpID0gbmVpZ2g7CiAJCQkJbGlzdF9hZGRfdGFpbCgmbmVpZ2gtPmxpc3QsICZtY2FzdC0+bmVpZ2hfbGlzdCk7CiAJCQl9CiAJCX0KQEAgLTkxMyw2ICs5MDAsNyBAQAogCiAJLyogV2UgaGF2ZSB0byBjYW5jZWwgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWNhc3QsIHRtY2FzdCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CisJCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwogCQlpcG9pYl9tY2FzdF9sZWF2ZShtY2FzdC0+ZGV2LCBtY2FzdCk7CiAJCWlwb2liX21jYXN0X2ZyZWUobWNhc3QpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYwppbmRleCA1ZjAzODgwLi4xZDQ5ZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCkBAIC0xNTksOCArMTU5LDggQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgaW5pdF9hdHRyID0gewogCQkuY2FwID0gewotCQkJLm1heF9zZW5kX3dyICA9IElQT0lCX1RYX1JJTkdfU0laRSwKLQkJCS5tYXhfcmVjdl93ciAgPSBJUE9JQl9SWF9SSU5HX1NJWkUsCisJCQkubWF4X3NlbmRfd3IgID0gaXBvaWJfc2VuZHFfc2l6ZSwKKwkJCS5tYXhfcmVjdl93ciAgPSBpcG9pYl9yZWN2cV9zaXplLAogCQkJLm1heF9zZW5kX3NnZSA9IDEsCiAJCQkubWF4X3JlY3Zfc2dlID0gMQogCQl9LApAQCAtMTc1LDcgKzE3NSw3IEBACiAJfQogCiAJcHJpdi0+Y3EgPSBpYl9jcmVhdGVfY3EocHJpdi0+Y2EsIGlwb2liX2liX2NvbXBsZXRpb24sIE5VTEwsIGRldiwKLQkJCQlJUE9JQl9UWF9SSU5HX1NJWkUgKyBJUE9JQl9SWF9SSU5HX1NJWkUgKyAxKTsKKwkJCQlpcG9pYl9zZW5kcV9zaXplICsgaXBvaWJfcmVjdnFfc2l6ZSArIDEpOwogCWlmIChJU19FUlIocHJpdi0+Y3EpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIENRXG4iLCBjYS0+bmFtZSk7CiAJCWdvdG8gb3V0X2ZyZWVfcGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCmluZGV4IDRjYTE3NTUuLmY4ODc3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCkBAIC0xNTgsMTAgKzE1OCw4IEBACiAJCWlmIChwcml2LT5wa2V5ID09IHBrZXkpIHsKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAJCQlpcG9pYl9kZXZfY2xlYW51cChwcml2LT5kZXYpOwotCiAJCQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7Ci0KLQkJCWtmcmVlKHByaXYpOworCQkJZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKIAogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCBmZDhhOTVhLi45Y2JkZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMzQwLDcgKzM0MCwxMCBAQAogCS8qIFhYWCBzaG91bGQgc2VuZCBTUlBfSV9MT0dPVVQgcmVxdWVzdCAqLwogCiAJaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPmRvbmUpOwotCWliX3NlbmRfY21fZHJlcSh0YXJnZXQtPmNtX2lkLCBOVUxMLCAwKTsKKwlpZiAoaWJfc2VuZF9jbV9kcmVxKHRhcmdldC0+Y21faWQsIE5VTEwsIDApKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiU2VuZGluZyBDTSBEUkVRIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CiAJd2FpdF9mb3JfY29tcGxldGlvbigmdGFyZ2V0LT5kb25lKTsKIH0KIApAQCAtMzUxLDcgKzM1NCw2IEBACiAJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAodGFyZ2V0LT5zdGF0ZSAhPSBTUlBfVEFSR0VUX0RFQUQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCQlzY3NpX2hvc3RfcHV0KHRhcmdldC0+c2NzaV9ob3N0KTsKIAkJcmV0dXJuOwogCX0KIAl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9SRU1PVkVEOwpAQCAtMzY1LDggKzM2Nyw2IEBACiAJaWJfZGVzdHJveV9jbV9pZCh0YXJnZXQtPmNtX2lkKTsKIAlzcnBfZnJlZV90YXJnZXRfaWIodGFyZ2V0KTsKIAlzY3NpX2hvc3RfcHV0KHRhcmdldC0+c2NzaV9ob3N0KTsKLQkvKiBBbmQgYW5vdGhlciBwdXQgdG8gcmVhbGx5IGZyZWUgdGhlIHRhcmdldCBwb3J0Li4uICovCi0Jc2NzaV9ob3N0X3B1dCh0YXJnZXQtPnNjc2lfaG9zdCk7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX2Nvbm5lY3RfdGFyZ2V0KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKQEAgLTQwOSw2ICs0MDksMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNycF91bm1hcF9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLAorCQkJICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCWludCBuZW50czsKKworCWlmICghc2NtbmQtPnJlcXVlc3RfYnVmZmVyIHx8CisJICAgIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSAmJgorCSAgICAgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSkpCisJCXJldHVybjsKKworCS8qCisJICogVGhpcyBoYW5kbGluZyBvZiBub24tU0cgY29tbWFuZHMgY2FuIGJlIGtpbGxlZCB3aGVuIHRoZQorCSAqIFNDU0kgbWlkbGF5ZXIgbm8gbG9uZ2VyIGdlbmVyYXRlcyBub24tU0cgY29tbWFuZHMuCisJICovCisJaWYgKGxpa2VseShzY21uZC0+dXNlX3NnKSkgeworCQluZW50cyA9IHNjbW5kLT51c2Vfc2c7CisJCXNjYXQgID0gc2NtbmQtPnJlcXVlc3RfYnVmZmVyOworCX0gZWxzZSB7CisJCW5lbnRzID0gMTsKKwkJc2NhdCAgPSAmcmVxLT5mYWtlX3NnOworCX0KKworCWRtYV91bm1hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIHNjYXQsIG5lbnRzLAorCQkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Cit9CisKIHN0YXRpYyBpbnQgc3JwX3JlY29ubmVjdF90YXJnZXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogewogCXN0cnVjdCBpYl9jbV9pZCAqbmV3X2NtX2lkOwpAQCAtNDU1LDE2ICs0ODMsMTYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJnRhcmdldC0+cmVxX3F1ZXVlLCBsaXN0KSB7CiAJCXJlcS0+c2NtbmQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKIAkJcmVxLT5zY21uZC0+c2NzaV9kb25lKHJlcS0+c2NtbmQpOworCQlzcnBfdW5tYXBfZGF0YShyZXEtPnNjbW5kLCB0YXJnZXQsIHJlcSk7CiAJfQogCiAJdGFyZ2V0LT5yeF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF90YWlsICA9IDA7Ci0JdGFyZ2V0LT5yZXFfaGVhZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNSUF9TUV9TSVpFIC0gMTsgKytpKQotCQl0YXJnZXQtPnJlcV9yaW5nW2ldLm5leHQgPSBpICsgMTsKLQl0YXJnZXQtPnJlcV9yaW5nW1NSUF9TUV9TSVpFIC0gMV0ubmV4dCA9IC0xOworCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfcmVxcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+cmVxX3F1ZXVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgU1JQX1NRX1NJWkU7ICsraSkKKwkJbGlzdF9hZGRfdGFpbCgmdGFyZ2V0LT5yZXFfcmluZ1tpXS5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOwogCiAJcmV0ID0gc3JwX2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7CiAJaWYgKHJldCkKQEAgLTU4OSwzMiArNjE3LDEwIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3VubWFwX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsCi0JCQkgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIHNycF9yZW1vdmVfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OwotCWludCBuZW50czsKLQotCWlmICghc2NtbmQtPnJlcXVlc3RfYnVmZmVyIHx8Ci0JICAgIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSAmJgotCSAgICAgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSkpCi0JCXJldHVybjsKLQotCS8qCi0JICogVGhpcyBoYW5kbGluZyBvZiBub24tU0cgY29tbWFuZHMgY2FuIGJlIGtpbGxlZCB3aGVuIHRoZQotCSAqIFNDU0kgbWlkbGF5ZXIgbm8gbG9uZ2VyIGdlbmVyYXRlcyBub24tU0cgY29tbWFuZHMuCi0JICovCi0JaWYgKGxpa2VseShzY21uZC0+dXNlX3NnKSkgewotCQluZW50cyA9IHNjbW5kLT51c2Vfc2c7Ci0JCXNjYXQgID0gc2NtbmQtPnJlcXVlc3RfYnVmZmVyOwotCX0gZWxzZSB7Ci0JCW5lbnRzID0gMTsKLQkJc2NhdCAgPSAmcmVxLT5mYWtlX3NnOwotCX0KLQotCWRtYV91bm1hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIHNjYXQsIG5lbnRzLAotCQkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJc3JwX3VubWFwX2RhdGEocmVxLT5zY21uZCwgdGFyZ2V0LCByZXEpOworCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX3JzcChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcnNwICpyc3ApCkBAIC02MzksNyArNjQ1LDcgQEAKIAkJCXJlcS0+dHNrX3N0YXR1cyA9IHJzcC0+ZGF0YVszXTsKIAkJY29tcGxldGUoJnJlcS0+ZG9uZSk7CiAJfSBlbHNlIHsKLQkJc2NtbmQgCSAgICAgID0gcmVxLT5zY21uZDsKKwkJc2NtbmQgPSByZXEtPnNjbW5kOwogCQlpZiAoIXNjbW5kKQogCQkJcHJpbnRrKEtFUk5fRVJSICJOdWxsIHNjbW5kIGZvciBSU1Agdy90YWcgJTAxNmxseFxuIiwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSByc3AtPnRhZyk7CkBAIC02NTcsMTYgKzY2MywxMSBAQAogCQllbHNlIGlmIChyc3AtPmZsYWdzICYgKFNSUF9SU1BfRkxBR19ESU9WRVIgfCBTUlBfUlNQX0ZMQUdfRElVTkRFUikpCiAJCQlzY21uZC0+cmVzaWQgPSBiZTMyX3RvX2NwdShyc3AtPmRhdGFfaW5fcmVzX2NudCk7CiAKLQkJc3JwX3VubWFwX2RhdGEoc2NtbmQsIHRhcmdldCwgcmVxKTsKLQogCQlpZiAoIXJlcS0+dHNrX21nbXQpIHsKLQkJCXJlcS0+c2NtbmQgPSBOVUxMOwogCQkJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAodm9pZCAqKSAtMUw7CiAJCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKIAotCQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCQlyZXEtPm5leHQgPSB0YXJnZXQtPnJlcV9oZWFkOwotCQkJdGFyZ2V0LT5yZXFfaGVhZCA9IHJzcC0+dGFnICYgflNSUF9UQUdfVFNLX01HTVQ7CisJCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CiAJCX0gZWxzZQogCQkJcmVxLT5jbWRfZG9uZSA9IDE7CiAJfQpAQCAtODUzLDcgKzg1NCw2IEBACiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAJc3RydWN0IHNycF9jbWQgKmNtZDsKLQlsb25nIHJlcV9pbmRleDsKIAlpbnQgbGVuOwogCiAJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9DT05ORUNUSU5HKQpAQCAtODczLDIyICs4NzMsMjAgQEAKIAlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCiAJCQkJU1JQX01BWF9JVV9MRU4sIERNQV9UT19ERVZJQ0UpOwogCi0JcmVxX2luZGV4ID0gdGFyZ2V0LT5yZXFfaGVhZDsKKwlyZXEgPSBsaXN0X2VudHJ5KHRhcmdldC0+ZnJlZV9yZXFzLm5leHQsIHN0cnVjdCBzcnBfcmVxdWVzdCwgbGlzdCk7CiAKIAlzY21uZC0+c2NzaV9kb25lICAgICA9IGRvbmU7CiAJc2NtbmQtPnJlc3VsdCAgICAgICAgPSAwOwotCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikgcmVxX2luZGV4OworCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikgKGxvbmcpIHJlcS0+aW5kZXg7CiAKIAljbWQgPSBpdS0+YnVmOwogCW1lbXNldChjbWQsIDAsIHNpemVvZiAqY21kKTsKIAogCWNtZC0+b3Bjb2RlID0gU1JQX0NNRDsKIAljbWQtPmx1biAgICA9IGNwdV90b19iZTY0KCh1NjQpIHNjbW5kLT5kZXZpY2UtPmx1biA8PCA0OCk7Ci0JY21kLT50YWcgICAgPSByZXFfaW5kZXg7CisJY21kLT50YWcgICAgPSByZXEtPmluZGV4OwogCW1lbWNweShjbWQtPmNkYiwgc2NtbmQtPmNtbmQsIHNjbW5kLT5jbWRfbGVuKTsKIAotCXJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW3JlcV9pbmRleF07Ci0KIAlyZXEtPnNjbW5kICAgID0gc2NtbmQ7CiAJcmVxLT5jbWQgICAgICA9IGl1OwogCXJlcS0+Y21kX2RvbmUgPSAwOwpAQCAtOTEzLDggKzkxMSw3IEBACiAJCWdvdG8gZXJyX3VubWFwOwogCX0KIAotCXRhcmdldC0+cmVxX2hlYWQgPSByZXEtPm5leHQ7Ci0JbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5yZXFfcXVldWUpOworCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPnJlcV9xdWV1ZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTEzNywzMCArMTEzNCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNycF9zZW5kX3Rza19tZ210KHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLCB1OCBmdW5jKQorc3RhdGljIGludCBzcnBfc2VuZF90c2tfbWdtdChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgICAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCB1OCBmdW5jKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOwotCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzcnBfaXUgKml1OwogCXN0cnVjdCBzcnBfdHNrX21nbXQgKnRza19tZ210OwotCWludCByZXFfaW5kZXg7Ci0JaW50IHJldCA9IEZBSUxFRDsKIAogCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpIHsKLQkJc2NtbmQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQlyZXEtPnNjbW5kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHNjbW5kLT5ob3N0X3NjcmliYmxlID09ICh2b2lkICopIC0xTCkKLQkJZ290byBvdXQ7Ci0KLQlyZXFfaW5kZXggPSAobG9uZykgc2NtbmQtPmhvc3Rfc2NyaWJibGU7Ci0JcHJpbnRrKEtFUk5fRVJSICJBYm9ydCBmb3IgcmVxX2luZGV4ICVkXG4iLCByZXFfaW5kZXgpOwotCi0JcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbcmVxX2luZGV4XTsKIAlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CiAKIAlpdSA9IF9fc3JwX2dldF90eF9pdSh0YXJnZXQpOwpAQCAtMTE3MSwxMCArMTE1OCwxMCBAQAogCW1lbXNldCh0c2tfbWdtdCwgMCwgc2l6ZW9mICp0c2tfbWdtdCk7CiAKIAl0c2tfbWdtdC0+b3Bjb2RlIAk9IFNSUF9UU0tfTUdNVDsKLQl0c2tfbWdtdC0+bHVuIAkJPSBjcHVfdG9fYmU2NCgodTY0KSBzY21uZC0+ZGV2aWNlLT5sdW4gPDwgNDgpOwotCXRza19tZ210LT50YWcgCQk9IHJlcV9pbmRleCB8IFNSUF9UQUdfVFNLX01HTVQ7CisJdHNrX21nbXQtPmx1biAJCT0gY3B1X3RvX2JlNjQoKHU2NCkgcmVxLT5zY21uZC0+ZGV2aWNlLT5sdW4gPDwgNDgpOworCXRza19tZ210LT50YWcgCQk9IHJlcS0+aW5kZXggfCBTUlBfVEFHX1RTS19NR01UOwogCXRza19tZ210LT50c2tfbWdtdF9mdW5jID0gZnVuYzsKLQl0c2tfbWdtdC0+dGFza190YWcgCT0gcmVxX2luZGV4OworCXRza19tZ210LT50YXNrX3RhZyAJPSByZXEtPmluZGV4OwogCiAJaWYgKF9fc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBzaXplb2YgKnRza19tZ210KSkKIAkJZ290byBvdXQ7CkBAIC0xMTgyLDM5ICsxMTY5LDg1IEBACiAJcmVxLT50c2tfbWdtdCA9IGl1OwogCiAJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJlcS0+ZG9uZSwKIAkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoU1JQX0FCT1JUX1RJTUVPVVRfTVMpKSkKLQkJcmV0dXJuIEZBSUxFRDsKLQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCQlyZXR1cm4gLTE7CiAKLQlpZiAocmVxLT5jbWRfZG9uZSkgewotCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKLQkJcmVxLT5uZXh0ID0gdGFyZ2V0LT5yZXFfaGVhZDsKLQkJdGFyZ2V0LT5yZXFfaGVhZCA9IHJlcV9pbmRleDsKLQotCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKLQl9IGVsc2UgaWYgKCFyZXEtPnRza19zdGF0dXMpIHsKLQkJc2NtbmQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLQkJcmV0ID0gU1VDQ0VTUzsKLQl9CisJcmV0dXJuIDA7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgc3JwX2ZpbmRfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKKwkJCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLAorCQkJc3RydWN0IHNycF9yZXF1ZXN0ICoqcmVxKQoreworCWlmIChzY21uZC0+aG9zdF9zY3JpYmJsZSA9PSAodm9pZCAqKSAtMUwpCisJCXJldHVybiAtMTsKKworCSpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1sobG9uZykgc2NtbmQtPmhvc3Rfc2NyaWJibGVdOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOworCWludCByZXQgPSBTVUNDRVNTOworCiAJcHJpbnRrKEtFUk5fRVJSICJTUlAgYWJvcnQgY2FsbGVkXG4iKTsKIAotCXJldHVybiBzcnBfc2VuZF90c2tfbWdtdChzY21uZCwgU1JQX1RTS19BQk9SVF9UQVNLKTsKKwlpZiAoc3JwX2ZpbmRfcmVxKHRhcmdldCwgc2NtbmQsICZyZXEpKQorCQlyZXR1cm4gRkFJTEVEOworCWlmIChzcnBfc2VuZF90c2tfbWdtdCh0YXJnZXQsIHJlcSwgU1JQX1RTS19BQk9SVF9UQVNLKSkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CisKKwlpZiAocmVxLT5jbWRfZG9uZSkgeworCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CisJCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOworCX0gZWxzZSBpZiAoIXJlcS0+dHNrX3N0YXR1cykgeworCQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CisJCXNjbW5kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJfSBlbHNlCisJCXJldCA9IEZBSUxFRDsKKworCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzY21uZC0+ZGV2aWNlLT5ob3N0KTsKKwlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgKnRtcDsKKwogCXByaW50ayhLRVJOX0VSUiAiU1JQIHJlc2V0X2RldmljZSBjYWxsZWRcbiIpOwogCi0JcmV0dXJuIHNycF9zZW5kX3Rza19tZ210KHNjbW5kLCBTUlBfVFNLX0xVTl9SRVNFVCk7CisJaWYgKHNycF9maW5kX3JlcSh0YXJnZXQsIHNjbW5kLCAmcmVxKSkKKwkJcmV0dXJuIEZBSUxFRDsKKwlpZiAoc3JwX3NlbmRfdHNrX21nbXQodGFyZ2V0LCByZXEsIFNSUF9UU0tfTFVOX1JFU0VUKSkKKwkJcmV0dXJuIEZBSUxFRDsKKwlpZiAocmVxLT50c2tfc3RhdHVzKQorCQlyZXR1cm4gRkFJTEVEOworCisJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnRhcmdldC0+cmVxX3F1ZXVlLCBsaXN0KQorCQlpZiAocmVxLT5zY21uZC0+ZGV2aWNlID09IHNjbW5kLT5kZXZpY2UpIHsKKwkJCXJlcS0+c2NtbmQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKKwkJCXJlcS0+c2NtbmQtPnNjc2lfZG9uZShyZXEtPnNjbW5kKTsKKwkJCXNycF9yZW1vdmVfcmVxKHRhcmdldCwgcmVxKTsKKwkJfQorCisJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKIHN0YXRpYyBpbnQgc3JwX3Jlc2V0X2hvc3Qoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQpCkBAIC0xNDM0LDYgKzE0NjcsNyBAQAogCQkJcCA9IG1hdGNoX3N0cmR1cChhcmdzKTsKIAkJCWlmIChzdHJsZW4ocCkgIT0gMzIpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiYmFkIGRlc3QgR0lEIHBhcmFtZXRlciAnJXMnXG4iLCBwKTsKKwkJCQlrZnJlZShwKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIApAQCAtMTUxMywxMCArMTU0NywxMiBAQAogCiAJSU5JVF9XT1JLKCZ0YXJnZXQtPndvcmssIHNycF9yZWNvbm5lY3Rfd29yaywgdGFyZ2V0KTsKIAotCWZvciAoaSA9IDA7IGkgPCBTUlBfU1FfU0laRSAtIDE7ICsraSkKLQkJdGFyZ2V0LT5yZXFfcmluZ1tpXS5uZXh0ID0gaSArIDE7Ci0JdGFyZ2V0LT5yZXFfcmluZ1tTUlBfU1FfU0laRSAtIDFdLm5leHQgPSAtMTsKKwlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3JlcXMpOwogCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPnJlcV9xdWV1ZSk7CisJZm9yIChpID0gMDsgaSA8IFNSUF9TUV9TSVpFOyArK2kpIHsKKwkJdGFyZ2V0LT5yZXFfcmluZ1tpXS5pbmRleCA9IGk7CisJCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+cmVxX3JpbmdbaV0ubGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKKwl9CiAKIAlyZXQgPSBzcnBfcGFyc2Vfb3B0aW9ucyhidWYsIHRhcmdldCk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKaW5kZXggYmQ3ZjdjMy4uYzVjZDQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCSAqLwogCXN0cnVjdCBzY2F0dGVybGlzdAlmYWtlX3NnOwogCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7Ci0Jc2hvcnQJCQluZXh0OworCXNob3J0CQkJaW5kZXg7CiAJdTgJCQljbWRfZG9uZTsKIAl1OAkJCXRza19zdGF0dXM7CiB9OwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdW5zaWduZWQJCXR4X3RhaWw7CiAJc3RydWN0IHNycF9pdQkgICAgICAgKnR4X3JpbmdbU1JQX1NRX1NJWkUgKyAxXTsKIAotCWludAkJCXJlcV9oZWFkOworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9yZXFzOwogCXN0cnVjdCBsaXN0X2hlYWQJcmVxX3F1ZXVlOwogCXN0cnVjdCBzcnBfcmVxdWVzdAlyZXFfcmluZ1tTUlBfU1FfU0laRV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZidWcuYyBiL2RyaXZlcnMvaW5wdXQvZXZidWcuYwppbmRleCBkNzgyODkzLi4wNzM1OGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2YnVnLmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmJ1Zy5jCkBAIC00OSw5ICs0OSw4IEBACiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlOwogCi0JaWYgKCEoaGFuZGxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShoYW5kbGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5wdXRfaGFuZGxlKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoaGFuZGxlLCAwLCBzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSkpOwogCiAJaGFuZGxlLT5kZXYgPSBkZXY7CiAJaGFuZGxlLT5oYW5kbGVyID0gaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCA3NDU5NzlmLi5iYTMyNWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0xMzAsOSArMTMwLDggQEAKIAlpZiAoKGFjY2VwdF9lcnIgPSBpbnB1dF9hY2NlcHRfcHJvY2VzcygmKGV2ZGV2X3RhYmxlW2ldLT5oYW5kbGUpLCBmaWxlKSkpCiAJCXJldHVybiBhY2NlcHRfZXJyOwogCi0JaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBldmRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXZkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgZXZkZXZfbGlzdCkpOwogCiAJbGlzdC0+ZXZkZXYgPSBldmRldl90YWJsZVtpXTsKIAlsaXN0X2FkZF90YWlsKCZsaXN0LT5ub2RlLCAmZXZkZXZfdGFibGVbaV0tPmxpc3QpOwpAQCAtNDA0LDYgKzQwMywyNyBAQAogCQljYXNlIEVWSU9DR0lEOgogCQkJaWYgKGNvcHlfdG9fdXNlcihwLCAmZGV2LT5pZCwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9pZCkpKQogCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBFVklPQ0dSRVA6CisJCQlpZiAoIXRlc3RfYml0KEVWX1JFUCwgZGV2LT5ldmJpdCkpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlpZiAocHV0X3VzZXIoZGV2LT5yZXBbUkVQX0RFTEFZXSwgaXApKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHB1dF91c2VyKGRldi0+cmVwW1JFUF9QRVJJT0RdLCBpcCArIDEpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBFVklPQ1NSRVA6CisJCQlpZiAoIXRlc3RfYml0KEVWX1JFUCwgZGV2LT5ldmJpdCkpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlpZiAoZ2V0X3VzZXIodSwgaXApKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKGdldF91c2VyKHYsIGlwICsgMSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlucHV0X2V2ZW50KGRldiwgRVZfUkVQLCBSRVBfREVMQVksIHUpOworCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9SRVAsIFJFUF9QRVJJT0QsIHYpOwogCiAJCQlyZXR1cm4gMDsKIApAQCAtNjA5LDkgKzYyOSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICghKGV2ZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGV2ZGV2KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGV2ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGV2ZGV2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoZXZkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZXZkZXYpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZldmRldi0+bGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZkZXYtPndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCmluZGV4IGI3NjVhMTU1Li4zNjY0NGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogSFogKi8KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiNpbmNsdWRlIDxhc20vaW8uaD4qLwogCkBAIC00MywxMCArNDQsMTAgQEAKIEVYUE9SVF9TWU1CT0woZ2FtZXBvcnRfc3RvcF9wb2xsaW5nKTsKIAogLyoKLSAqIGdhbWVwb3J0X3NlbSBwcm90ZWN0cyBlbnRpcmUgZ2FtZXBvcnQgc3Vic3lzdGVtIGFuZCBpcyB0YWtlbgorICogZ2FtZXBvcnRfbXV0ZXggcHJvdGVjdHMgZW50aXJlIGdhbWVwb3J0IHN1YnN5c3RlbSBhbmQgaXMgdGFrZW4KICAqIGV2ZXJ5IHRpbWUgZ2FtZXBvcnQgcG9ydCBvciBkcml2ZXIgcmVnaXN0cmVyZWQgb3IgdW5yZWdpc3RlcmVkLgogICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChnYW1lcG9ydF9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChnYW1lcG9ydF9tdXRleCk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoZ2FtZXBvcnRfbGlzdCk7CiAKQEAgLTI2NSw2ICsyNjYsNyBAQAogCWlmICgoZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQpLCBHRlBfQVRPTUlDKSkpIHsKIAkJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImdhbWVwb3J0OiBDYW4ndCBnZXQgbW9kdWxlIHJlZmVyZW5jZSwgZHJvcHBpbmcgZXZlbnQgJWRcbiIsIGV2ZW50X3R5cGUpOworCQkJa2ZyZWUoZXZlbnQpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMzQyLDcgKzM0NCw3IEBACiAJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpnYW1lcG9ydF9kcnY7CiAKLQlkb3duKCZnYW1lcG9ydF9zZW0pOworCW11dGV4X2xvY2soJmdhbWVwb3J0X211dGV4KTsKIAogCS8qCiAJICogTm90ZSB0aGF0IHdlIGhhbmRsZSBvbmx5IG9uZSBldmVudCBoZXJlIHRvIGdpdmUgc3dzdXNwCkBAIC0zNzksNyArMzgxLDcgQEAKIAkJZ2FtZXBvcnRfZnJlZV9ldmVudChldmVudCk7CiAJfQogCi0JdXAoJmdhbWVwb3J0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYW1lcG9ydF9tdXRleCk7CiB9CiAKIC8qCkBAIC00NjQsNyArNDY2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBkb3duX2ludGVycnVwdGlibGUoJmdhbWVwb3J0X3NlbSk7CisJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnYW1lcG9ydF9tdXRleCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtNDg0LDcgKzQ4Niw3IEBACiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQogCi0JdXAoJmdhbWVwb3J0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYW1lcG9ydF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNTIxLDcgKzUyMyw3IEBACiAKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCi0JaW5pdF9NVVRFWCgmZ2FtZXBvcnQtPmRydl9zZW0pOworCW11dGV4X2luaXQoJmdhbWVwb3J0LT5kcnZfbXV0ZXgpOwogCWRldmljZV9pbml0aWFsaXplKCZnYW1lcG9ydC0+ZGV2KTsKIAlzbnByaW50ZihnYW1lcG9ydC0+ZGV2LmJ1c19pZCwgc2l6ZW9mKGdhbWVwb3J0LT5kZXYuYnVzX2lkKSwKIAkJICJnYW1lcG9ydCVsdSIsICh1bnNpZ25lZCBsb25nKWF0b21pY19pbmNfcmV0dXJuKCZnYW1lcG9ydF9ubykgLSAxKTsKQEAgLTY2MSwxMCArNjYzLDEwIEBACiAgKi8KIHZvaWQgZ2FtZXBvcnRfdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCiB7Ci0JZG93bigmZ2FtZXBvcnRfc2VtKTsKKwltdXRleF9sb2NrKCZnYW1lcG9ydF9tdXRleCk7CiAJZ2FtZXBvcnRfZGlzY29ubmVjdF9wb3J0KGdhbWVwb3J0KTsKIAlnYW1lcG9ydF9kZXN0cm95X3BvcnQoZ2FtZXBvcnQpOwotCXVwKCZnYW1lcG9ydF9zZW0pOworCW11dGV4X3VubG9jaygmZ2FtZXBvcnRfbXV0ZXgpOwogfQogCiAKQEAgLTcxNyw3ICs3MTksNyBAQAogewogCXN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQ7CiAKLQlkb3duKCZnYW1lcG9ydF9zZW0pOworCW11dGV4X2xvY2soJmdhbWVwb3J0X211dGV4KTsKIAlkcnYtPmlnbm9yZSA9IDE7CS8qIHNvIGdhbWVwb3J0X2ZpbmRfZHJpdmVyIGlnbm9yZXMgaXQgKi8KIAogc3RhcnRfb3ZlcjoKQEAgLTczMSw3ICs3MzMsNyBAQAogCX0KIAogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0JdXAoJmdhbWVwb3J0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZnYW1lcG9ydF9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2FtZXBvcnRfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKQEAgLTc0Myw5ICs3NDUsOSBAQAogCiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9zZXRfZHJ2KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQsIHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKIHsKLQlkb3duKCZnYW1lcG9ydC0+ZHJ2X3NlbSk7CisJbXV0ZXhfbG9jaygmZ2FtZXBvcnQtPmRydl9tdXRleCk7CiAJZ2FtZXBvcnQtPmRydiA9IGRydjsKLQl1cCgmZ2FtZXBvcnQtPmRydl9zZW0pOworCW11dGV4X3VubG9jaygmZ2FtZXBvcnQtPmRydl9tdXRleCk7CiB9CiAKIGludCBnYW1lcG9ydF9vcGVuKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQsIHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydiwgaW50IG1vZGUpCkBAIC03OTYsNSArNzk4LDUgQEAKIAlrdGhyZWFkX3N0b3AoZ2FtZXBvcnRfdGFzayk7CiB9CiAKLW1vZHVsZV9pbml0KGdhbWVwb3J0X2luaXQpOworc3Vic3lzX2luaXRjYWxsKGdhbWVwb3J0X2luaXQpOwogbW9kdWxlX2V4aXQoZ2FtZXBvcnRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMKaW5kZXggZDJlNTVkYy4uM2UyZDI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9uczU1OC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYwpAQCAtMjUyLDE0ICsyNTIsMTQgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQgPSAwOwotCiBzdGF0aWMgaW50IF9faW5pdCBuczU1OF9pbml0KHZvaWQpCiB7CiAJaW50IGkgPSAwOworCWludCBlcnJvcjsKIAotCWlmIChwbnBfcmVnaXN0ZXJfZHJpdmVyKCZuczU1OF9wbnBfZHJpdmVyKSA+PSAwKQotCQlwbnBfcmVnaXN0ZXJlZCA9IDE7CisJZXJyb3IgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZuczU1OF9wbnBfZHJpdmVyKTsKKwlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT0RFVikJLyogc2hvdWxkIGJlIEVOT1NZUyByZWFsbHkgKi8KKwkJcmV0dXJuIGVycm9yOwogCiAvKgogICogUHJvYmUgSVNBIHBvcnRzIGFmdGVyIFBuUCwgc28gdGhhdCBQblAgcG9ydHMgdGhhdCBhcmUgYWxyZWFkeQpAQCAtMjcwLDcgKzI3MCw3IEBACiAJd2hpbGUgKG5zNTU4X2lzYV9wb3J0bGlzdFtpXSkKIAkJbnM1NThfaXNhX3Byb2JlKG5zNTU4X2lzYV9wb3J0bGlzdFtpKytdKTsKIAotCXJldHVybiAobGlzdF9lbXB0eSgmbnM1NThfbGlzdCkgJiYgIXBucF9yZWdpc3RlcmVkKSA/IC1FTk9ERVYgOiAwOworCXJldHVybiBsaXN0X2VtcHR5KCZuczU1OF9saXN0KSAmJiBlcnJvciA/IC1FTk9ERVYgOiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbnM1NThfZXhpdCh2b2lkKQpAQCAtMjgzLDggKzI4Myw3IEBACiAJCWtmcmVlKG5zNTU4KTsKIAl9CiAKLQlpZiAocG5wX3JlZ2lzdGVyZWQpCi0JCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmbnM1NThfcG5wX2RyaXZlcik7CisJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZuczU1OF9wbnBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobnM1NThfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggZjhhZjA5NC4uMzAzOGMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtMTgsOSArMTgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBNT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnB1dCBjb3JlIik7CkBAIC0xNTMsNiArMTU1LDkgQEAKIAkJCWlmIChjb2RlID4gU05EX01BWCB8fCAhdGVzdF9iaXQoY29kZSwgZGV2LT5zbmRiaXQpKQogCQkJCXJldHVybjsKIAorCQkJaWYgKCEhdGVzdF9iaXQoY29kZSwgZGV2LT5zbmQpICE9ICEhdmFsdWUpCisJCQkJY2hhbmdlX2JpdChjb2RlLCBkZXYtPnNuZCk7CisKIAkJCWlmIChkZXYtPmV2ZW50KSBkZXYtPmV2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwogCiAJCQlicmVhazsKQEAgLTIyNCw3ICsyMjksNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhhbmRsZS0+ZGV2OwogCWludCBlcnI7CiAKLQllcnIgPSBkb3duX2ludGVycnVwdGlibGUoJmRldi0+c2VtKTsKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+bXV0ZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTIzNiw3ICsyNDEsNyBAQAogCWlmIChlcnIpCiAJCWhhbmRsZS0+b3Blbi0tOwogCi0JdXAoJmRldi0+c2VtKTsKKwltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI1NSwxMyArMjYwLDEzIEBACiAKIAlpbnB1dF9yZWxlYXNlX2RldmljZShoYW5kbGUpOwogCi0JZG93bigmZGV2LT5zZW0pOworCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCiAJaWYgKCEtLWRldi0+dXNlcnMgJiYgZGV2LT5jbG9zZSkKIAkJZGV2LT5jbG9zZShkZXYpOwogCWhhbmRsZS0+b3Blbi0tOwogCi0JdXAoJmRldi0+c2VtKTsKKwltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpbnB1dF9saW5rX2hhbmRsZShzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpCkBAIC0yODQsMTkgKzI4OSwxOSBAQAogCWZvciAoOyBpZC0+ZmxhZ3MgfHwgaWQtPmRyaXZlcl9pbmZvOyBpZCsrKSB7CiAKIAkJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9CVVMpCi0JCQlpZiAoaWQtPmlkLmJ1c3R5cGUgIT0gZGV2LT5pZC5idXN0eXBlKQorCQkJaWYgKGlkLT5idXN0eXBlICE9IGRldi0+aWQuYnVzdHlwZSkKIAkJCQljb250aW51ZTsKIAogCQlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFTkRPUikKLQkJCWlmIChpZC0+aWQudmVuZG9yICE9IGRldi0+aWQudmVuZG9yKQorCQkJaWYgKGlkLT52ZW5kb3IgIT0gZGV2LT5pZC52ZW5kb3IpCiAJCQkJY29udGludWU7CiAKIAkJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKQotCQkJaWYgKGlkLT5pZC5wcm9kdWN0ICE9IGRldi0+aWQucHJvZHVjdCkKKwkJCWlmIChpZC0+cHJvZHVjdCAhPSBkZXYtPmlkLnByb2R1Y3QpCiAJCQkJY29udGludWU7CiAKIAkJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRVJTSU9OKQotCQkJaWYgKGlkLT5pZC52ZXJzaW9uICE9IGRldi0+aWQudmVyc2lvbikKKwkJCWlmIChpZC0+dmVyc2lvbiAhPSBkZXYtPmlkLnZlcnNpb24pCiAJCQkJY29udGludWU7CiAKIAkJTUFUQ0hfQklUKGV2Yml0LCAgRVZfTUFYKTsKQEAgLTMxNSwyMSArMzIwLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBpbnB1dF9wcmludF9iaXRtYXAoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG1heCkKLXsKLQlpbnQgaTsKLQlpbnQgbGVuID0gMDsKLQotCWZvciAoaSA9IE5CSVRTKG1heCkgLSAxOyBpID4gMDsgaS0tKQotCQlpZiAoYml0bWFwW2ldKQotCQkJYnJlYWs7Ci0KLQlmb3IgKDsgaSA+PSAwOyBpLS0pCi0JCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChidWZfc2l6ZSAtIGxlbiwgMCksCi0JCQkJIiVseCVzIiwgYml0bWFwW2ldLCBpID4gMCA/ICIgIiA6ICIiKTsKLQlyZXR1cm4gbGVuOwotfQotCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19idXNfaW5wdXRfZGlyOwpAQCAtMzQyLDcgKzMzMiw3IEBACiAJd2FrZV91cCgmaW5wdXRfZGV2aWNlc19wb2xsX3dhaXQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlucHV0X2RldmljZXNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRfcHJvY19kZXZpY2VzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJaW50IHN0YXRlID0gaW5wdXRfZGV2aWNlc19zdGF0ZTsKIAlwb2xsX3dhaXQoZmlsZSwgJmlucHV0X2RldmljZXNfcG9sbF93YWl0LCB3YWl0KTsKQEAgLTM1MSwxMTUgKzM0MSwxNzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBTUFJJTlRGX0JJVChldiwgYm0pCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiQjogJXM9IiwgI2V2KTsJCVwKLQkJbGVuICs9IGlucHV0X3ByaW50X2JpdG1hcChidWYgKyBsZW4sIElOVF9NQVgsCQlcCi0JCQkJCWRldi0+Ym0jI2JpdCwgZXYjI19NQVgpOwlcCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlxuIik7CQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVEVTVF9BTkRfU1BSSU5URl9CSVQoZXYsIGJtKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKHRlc3RfYml0KEVWXyMjZXYsIGRldi0+ZXZiaXQpKQkJCVwKLQkJCVNQUklOVEZfQklUKGV2LCBibSk7CQkJCVwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50IGlucHV0X2RldmljZXNfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfZ2V0X250aF9lbGVtZW50KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOworCWxvZmZfdCBpID0gMDsKKworCWxpc3RfZm9yX2VhY2gobm9kZSwgbGlzdCkKKwkJaWYgKGkrKyA9PSAqcG9zKQorCQkJcmV0dXJuIG5vZGU7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfZ2V0X25leHRfZWxlbWVudChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50LCBsb2ZmX3QgKnBvcykKK3sKKwlpZiAoZWxlbWVudC0+bmV4dCA9PSBsaXN0KQorCQlyZXR1cm4gTlVMTDsKKworCSsrKCpwb3MpOworCXJldHVybiBlbGVtZW50LT5uZXh0OworfQorCitzdGF0aWMgdm9pZCAqaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCS8qIGFjcXVpcmUgbG9jayBoZXJlIC4uLiBZZXMsIHdlIGRvIG5lZWQgbG9ja2luZywgSSBrbm93aSwgSSBrbm93Li4uICovCisKKwlyZXR1cm4gbGlzdF9nZXRfbnRoX2VsZW1lbnQoJmlucHV0X2Rldl9saXN0LCBwb3MpOworfQorCitzdGF0aWMgdm9pZCAqaW5wdXRfZGV2aWNlc19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIGxpc3RfZ2V0X25leHRfZWxlbWVudCgmaW5wdXRfZGV2X2xpc3QsIHYsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGlucHV0X2RldmljZXNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJLyogcmVsZWFzZSBsb2NrIGhlcmUgKi8KK30KKworc3RhdGljIHZvaWQgaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBtYXgpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBOQklUUyhtYXgpIC0gMTsgaSA+IDA7IGktLSkKKwkJaWYgKGJpdG1hcFtpXSkKKwkJCWJyZWFrOworCisJc2VxX3ByaW50ZihzZXEsICJCOiAlcz0iLCBuYW1lKTsKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCXNlcV9wcmludGYoc2VxLCAiJWx4JXMiLCBiaXRtYXBbaV0sIGkgPiAwID8gIiAiIDogIiIpOworCXNlcV9wdXRjKHNlcSwgJ1xuJyk7Cit9CisKK3N0YXRpYyBpbnQgaW5wdXRfZGV2aWNlc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBjb250YWluZXJfb2Yodiwgc3RydWN0IGlucHV0X2Rldiwgbm9kZSk7CisJY29uc3QgY2hhciAqcGF0aCA9IGtvYmplY3RfZ2V0X3BhdGgoJmRldi0+Y2Rldi5rb2JqLCBHRlBfS0VSTkVMKTsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGU7Ci0JY29uc3QgY2hhciAqcGF0aDsKIAotCW9mZl90IGF0ID0gMDsKLQlpbnQgbGVuLCBjbnQgPSAwOworCXNlcV9wcmludGYoc2VxLCAiSTogQnVzPSUwNHggVmVuZG9yPSUwNHggUHJvZHVjdD0lMDR4IFZlcnNpb249JTA0eFxuIiwKKwkJICAgZGV2LT5pZC5idXN0eXBlLCBkZXYtPmlkLnZlbmRvciwgZGV2LT5pZC5wcm9kdWN0LCBkZXYtPmlkLnZlcnNpb24pOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZpbnB1dF9kZXZfbGlzdCwgbm9kZSkgeworCXNlcV9wcmludGYoc2VxLCAiTjogTmFtZT1cIiVzXCJcbiIsIGRldi0+bmFtZSA/IGRldi0+bmFtZSA6ICIiKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlA6IFBoeXM9JXNcbiIsIGRldi0+cGh5cyA/IGRldi0+cGh5cyA6ICIiKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlM6IFN5c2ZzPSVzXG4iLCBwYXRoID8gcGF0aCA6ICIiKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkg6IEhhbmRsZXJzPSIpOwogCi0JCXBhdGggPSBrb2JqZWN0X2dldF9wYXRoKCZkZXYtPmNkZXYua29iaiwgR0ZQX0tFUk5FTCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGUsICZkZXYtPmhfbGlzdCwgZF9ub2RlKQorCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIGhhbmRsZS0+bmFtZSk7CisJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAotCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkk6IEJ1cz0lMDR4IFZlbmRvcj0lMDR4IFByb2R1Y3Q9JTA0eCBWZXJzaW9uPSUwNHhcbiIsCi0JCQlkZXYtPmlkLmJ1c3R5cGUsIGRldi0+aWQudmVuZG9yLCBkZXYtPmlkLnByb2R1Y3QsIGRldi0+aWQudmVyc2lvbik7CisJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJFViIsIGRldi0+ZXZiaXQsIEVWX01BWCk7CisJaWYgKHRlc3RfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCkpCisJCWlucHV0X3NlcV9wcmludF9iaXRtYXAoc2VxLCAiS0VZIiwgZGV2LT5rZXliaXQsIEtFWV9NQVgpOworCWlmICh0ZXN0X2JpdChFVl9SRUwsIGRldi0+ZXZiaXQpKQorCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIlJFTCIsIGRldi0+cmVsYml0LCBSRUxfTUFYKTsKKwlpZiAodGVzdF9iaXQoRVZfQUJTLCBkZXYtPmV2Yml0KSkKKwkJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJBQlMiLCBkZXYtPmFic2JpdCwgQUJTX01BWCk7CisJaWYgKHRlc3RfYml0KEVWX01TQywgZGV2LT5ldmJpdCkpCisJCWlucHV0X3NlcV9wcmludF9iaXRtYXAoc2VxLCAiTVNDIiwgZGV2LT5tc2NiaXQsIE1TQ19NQVgpOworCWlmICh0ZXN0X2JpdChFVl9MRUQsIGRldi0+ZXZiaXQpKQorCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIkxFRCIsIGRldi0+bGVkYml0LCBMRURfTUFYKTsKKwlpZiAodGVzdF9iaXQoRVZfU05ELCBkZXYtPmV2Yml0KSkKKwkJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJTTkQiLCBkZXYtPnNuZGJpdCwgU05EX01BWCk7CisJaWYgKHRlc3RfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KSkKKwkJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJGRiIsIGRldi0+ZmZiaXQsIEZGX01BWCk7CisJaWYgKHRlc3RfYml0KEVWX1NXLCBkZXYtPmV2Yml0KSkKKwkJaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzZXEsICJTVyIsIGRldi0+c3diaXQsIFNXX01BWCk7CiAKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiTjogTmFtZT1cIiVzXCJcbiIsIGRldi0+bmFtZSA/IGRldi0+bmFtZSA6ICIiKTsKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiUDogUGh5cz0lc1xuIiwgZGV2LT5waHlzID8gZGV2LT5waHlzIDogIiIpOwotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJTOiBTeXNmcz0lc1xuIiwgcGF0aCA/IHBhdGggOiAiIik7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkg6IEhhbmRsZXJzPSIpOworCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGUsICZkZXYtPmhfbGlzdCwgZF9ub2RlKQotCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXMgIiwgaGFuZGxlLT5uYW1lKTsKLQotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbiIpOwotCi0JCVNQUklOVEZfQklUKEVWLCBldik7Ci0JCVRFU1RfQU5EX1NQUklOVEZfQklUKEtFWSwga2V5KTsKLQkJVEVTVF9BTkRfU1BSSU5URl9CSVQoUkVMLCByZWwpOwotCQlURVNUX0FORF9TUFJJTlRGX0JJVChBQlMsIGFicyk7Ci0JCVRFU1RfQU5EX1NQUklOVEZfQklUKE1TQywgbXNjKTsKLQkJVEVTVF9BTkRfU1BSSU5URl9CSVQoTEVELCBsZWQpOwotCQlURVNUX0FORF9TUFJJTlRGX0JJVChTTkQsIHNuZCk7Ci0JCVRFU1RfQU5EX1NQUklOVEZfQklUKEZGLCBmZik7Ci0JCVRFU1RfQU5EX1NQUklOVEZfQklUKFNXLCBzdyk7Ci0KLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG4iKTsKLQotCQlhdCArPSBsZW47Ci0KLQkJaWYgKGF0ID49IHBvcykgewotCQkJaWYgKCEqc3RhcnQpIHsKLQkJCQkqc3RhcnQgPSBidWYgKyAocG9zIC0gKGF0IC0gbGVuKSk7Ci0JCQkJY250ID0gYXQgLSBwb3M7Ci0JCQl9IGVsc2UgIGNudCArPSBsZW47Ci0JCQlidWYgKz0gbGVuOwotCQkJaWYgKGNudCA+PSBjb3VudCkKLQkJCQlicmVhazsKLQkJfQotCi0JCWtmcmVlKHBhdGgpOwotCX0KLQotCWlmICgmZGV2LT5ub2RlID09ICZpbnB1dF9kZXZfbGlzdCkKLQkJKmVvZiA9IDE7Ci0KLQlyZXR1cm4gKGNvdW50ID4gY250KSA/IGNudCA6IGNvdW50OworCWtmcmVlKHBhdGgpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlucHV0X2hhbmRsZXJzX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfZGV2aWNlc19zZXFfb3BzID0geworCS5zdGFydAk9IGlucHV0X2RldmljZXNfc2VxX3N0YXJ0LAorCS5uZXh0CT0gaW5wdXRfZGV2aWNlc19zZXFfbmV4dCwKKwkuc3RvcAk9IGlucHV0X2RldmljZXNfc2VxX3N0b3AsCisJLnNob3cJPSBpbnB1dF9kZXZpY2VzX3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBpbnB1dF9wcm9jX2RldmljZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlcjsKLQotCW9mZl90IGF0ID0gMDsKLQlpbnQgbGVuID0gMCwgY250ID0gMDsKLQlpbnQgaSA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpbnB1dF9oYW5kbGVyX2xpc3QsIG5vZGUpIHsKLQotCQlpZiAoaGFuZGxlci0+Zm9wcykKLQkJCWxlbiA9IHNwcmludGYoYnVmLCAiTjogTnVtYmVyPSVkIE5hbWU9JXMgTWlub3I9JWRcbiIsCi0JCQkJaSsrLCBoYW5kbGVyLT5uYW1lLCBoYW5kbGVyLT5taW5vcik7Ci0JCWVsc2UKLQkJCWxlbiA9IHNwcmludGYoYnVmLCAiTjogTnVtYmVyPSVkIE5hbWU9JXNcbiIsCi0JCQkJaSsrLCBoYW5kbGVyLT5uYW1lKTsKLQotCQlhdCArPSBsZW47Ci0KLQkJaWYgKGF0ID49IHBvcykgewotCQkJaWYgKCEqc3RhcnQpIHsKLQkJCQkqc3RhcnQgPSBidWYgKyAocG9zIC0gKGF0IC0gbGVuKSk7Ci0JCQkJY250ID0gYXQgLSBwb3M7Ci0JCQl9IGVsc2UgIGNudCArPSBsZW47Ci0JCQlidWYgKz0gbGVuOwotCQkJaWYgKGNudCA+PSBjb3VudCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQlpZiAoJmhhbmRsZXItPm5vZGUgPT0gJmlucHV0X2hhbmRsZXJfbGlzdCkKLQkJKmVvZiA9IDE7Ci0KLQlyZXR1cm4gKGNvdW50ID4gY250KSA/IGNudCA6IGNvdW50OworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW5wdXRfZGV2aWNlc19zZXFfb3BzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW5wdXRfZmlsZW9wczsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlucHV0X2RldmljZXNfZmlsZW9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaW5wdXRfcHJvY19kZXZpY2VzX29wZW4sCisJLnBvbGwJCT0gaW5wdXRfcHJvY19kZXZpY2VzX3BvbGwsCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCS8qIGFjcXVpcmUgbG9jayBoZXJlIC4uLiBZZXMsIHdlIGRvIG5lZWQgbG9ja2luZywgSSBrbm93aSwgSSBrbm93Li4uICovCisJc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykqcG9zOworCXJldHVybiBsaXN0X2dldF9udGhfZWxlbWVudCgmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOworfQorCitzdGF0aWMgdm9pZCAqaW5wdXRfaGFuZGxlcnNfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKCpwb3MgKyAxKTsKKwlyZXR1cm4gbGlzdF9nZXRfbmV4dF9lbGVtZW50KCZpbnB1dF9oYW5kbGVyX2xpc3QsIHYsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCS8qIHJlbGVhc2UgbG9jayBoZXJlICovCit9CisKK3N0YXRpYyBpbnQgaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIgPSBjb250YWluZXJfb2Yodiwgc3RydWN0IGlucHV0X2hhbmRsZXIsIG5vZGUpOworCisJc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JWxkIE5hbWU9JXMiLAorCQkgICAodW5zaWduZWQgbG9uZylzZXEtPnByaXZhdGUsIGhhbmRsZXItPm5hbWUpOworCWlmIChoYW5kbGVyLT5mb3BzKQorCQlzZXFfcHJpbnRmKHNlcSwgIiBNaW5vcj0lZCIsIGhhbmRsZXItPm1pbm9yKTsKKwlzZXFfcHV0YyhzZXEsICdcbicpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlucHV0X2hhbmRsZXJzX3NlcV9vcHMgPSB7CisJLnN0YXJ0CT0gaW5wdXRfaGFuZGxlcnNfc2VxX3N0YXJ0LAorCS5uZXh0CT0gaW5wdXRfaGFuZGxlcnNfc2VxX25leHQsCisJLnN0b3AJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RvcCwKKwkuc2hvdwk9IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBpbnB1dF9wcm9jX2hhbmRsZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbnB1dF9oYW5kbGVyc19zZXFfb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW5wdXRfaGFuZGxlcnNfZmlsZW9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaW5wdXRfcHJvY19oYW5kbGVyc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbnB1dF9wcm9jX2luaXQodm9pZCkKIHsKQEAgLTQ3MSwyMCArNTE3LDE5IEBACiAKIAlwcm9jX2J1c19pbnB1dF9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQllbnRyeSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImRldmljZXMiLCAwLCBwcm9jX2J1c19pbnB1dF9kaXIsIGlucHV0X2RldmljZXNfcmVhZCwgTlVMTCk7CisJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGV2aWNlcyIsIDAsIHByb2NfYnVzX2lucHV0X2Rpcik7CiAJaWYgKCFlbnRyeSkKIAkJZ290byBmYWlsMTsKIAogCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwotCWlucHV0X2ZpbGVvcHMgPSAqZW50cnktPnByb2NfZm9wczsKLQlpbnB1dF9maWxlb3BzLnBvbGwgPSBpbnB1dF9kZXZpY2VzX3BvbGw7Ci0JZW50cnktPnByb2NfZm9wcyA9ICZpbnB1dF9maWxlb3BzOworCWVudHJ5LT5wcm9jX2ZvcHMgPSAmaW5wdXRfZGV2aWNlc19maWxlb3BzOwogCi0JZW50cnkgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJoYW5kbGVycyIsIDAsIHByb2NfYnVzX2lucHV0X2RpciwgaW5wdXRfaGFuZGxlcnNfcmVhZCwgTlVMTCk7CisJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiaGFuZGxlcnMiLCAwLCBwcm9jX2J1c19pbnB1dF9kaXIpOwogCWlmICghZW50cnkpCiAJCWdvdG8gZmFpbDI7CiAKIAllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwllbnRyeS0+cHJvY19mb3BzID0gJmlucHV0X2hhbmRsZXJzX2ZpbGVvcHM7CiAKIAlyZXR1cm4gMDsKIApAQCAtNTEyLDEzICs1NTcsMTQgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSB0b19pbnB1dF9kZXYoZGV2KTsJCQlcCiAJaW50IHJldHZhbDsJCQkJCQkJCVwKIAkJCQkJCQkJCQlcCi0JcmV0dmFsID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZpbnB1dF9kZXYtPnNlbSk7CQkJCVwKKwlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X2Rldi0+bXV0ZXgpOwkJCVwKIAlpZiAocmV0dmFsKQkJCQkJCQkJXAogCQlyZXR1cm4gcmV0dmFsOwkJCQkJCQlcCiAJCQkJCQkJCQkJXAotCXJldHZhbCA9IHNwcmludGYoYnVmLCAiJXNcbiIsIGlucHV0X2Rldi0+bmFtZSA/IGlucHV0X2Rldi0+bmFtZSA6ICIiKTsJXAorCXJldHZhbCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwJCQkJCVwKKwkJCSAgICIlc1xuIiwgaW5wdXRfZGV2LT5uYW1lID8gaW5wdXRfZGV2LT5uYW1lIDogIiIpOwlcCiAJCQkJCQkJCQkJXAotCXVwKCZpbnB1dF9kZXYtPnNlbSk7CQkJCQkJCVwKKwltdXRleF91bmxvY2soJmlucHV0X2Rldi0+bXV0ZXgpOwkJCQkJXAogCQkJCQkJCQkJCVwKIAlyZXR1cm4gcmV0dmFsOwkJCQkJCQkJXAogfQkJCQkJCQkJCQlcCkBAIC01MjgsNDYgKzU3NCw1MSBAQAogSU5QVVRfREVWX1NUUklOR19BVFRSX1NIT1cocGh5cyk7CiBJTlBVVF9ERVZfU1RSSU5HX0FUVFJfU0hPVyh1bmlxKTsKIAotc3RhdGljIGludCBwcmludF9tb2RhbGlhc19iaXRzKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGNoYXIgcHJlZml4LCB1bnNpZ25lZCBsb25nICphcnIsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKK3N0YXRpYyBpbnQgaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhjaGFyICpidWYsIGludCBzaXplLAorCQkJCSAgICAgY2hhciBuYW1lLCB1bnNpZ25lZCBsb25nICpibSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtaW5fYml0LCB1bnNpZ25lZCBpbnQgbWF4X2JpdCkKIHsKLQlpbnQgbGVuLCBpOworCWludCBsZW4gPSAwLCBpOwogCi0JbGVuID0gc25wcmludGYoYnVmLCBzaXplLCAiJWMiLCBwcmVmaXgpOwotCWZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQotCQlpZiAoYXJyW0xPTkcoaSldICYgQklUKGkpKQotCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgIiVYLCIsIGkpOworCWxlbiArPSBzbnByaW50ZihidWYsIG1heChzaXplLCAwKSwgIiVjIiwgbmFtZSk7CisJZm9yIChpID0gbWluX2JpdDsgaSA8IG1heF9iaXQ7IGkrKykKKwkJaWYgKGJtW0xPTkcoaSldICYgQklUKGkpKQorCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KHNpemUgLSBsZW4sIDApLCAiJVgsIiwgaSk7CiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGludCBwcmludF9tb2RhbGlhcyhjaGFyICpidWYsIGludCBzaXplLCBzdHJ1Y3QgaW5wdXRfZGV2ICppZCkKK3N0YXRpYyBpbnQgaW5wdXRfcHJpbnRfbW9kYWxpYXMoY2hhciAqYnVmLCBpbnQgc2l6ZSwgc3RydWN0IGlucHV0X2RldiAqaWQsCisJCQkJaW50IGFkZF9jcikKIHsKIAlpbnQgbGVuOwogCi0JbGVuID0gc25wcmludGYoYnVmLCBzaXplLCAiaW5wdXQ6YiUwNFh2JTA0WHAlMDRYZSUwNFgtIiwKLQkJICAgICAgIGlkLT5pZC5idXN0eXBlLAotCQkgICAgICAgaWQtPmlkLnZlbmRvciwKLQkJICAgICAgIGlkLT5pZC5wcm9kdWN0LAotCQkgICAgICAgaWQtPmlkLnZlcnNpb24pOworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgbWF4KHNpemUsIDApLAorCQkgICAgICAgImlucHV0OmIlMDRYdiUwNFhwJTA0WGUlMDRYLSIsCisJCSAgICAgICBpZC0+aWQuYnVzdHlwZSwgaWQtPmlkLnZlbmRvciwKKwkJICAgICAgIGlkLT5pZC5wcm9kdWN0LCBpZC0+aWQudmVyc2lvbik7CiAKLQlsZW4gKz0gcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sICdlJywgaWQtPmV2Yml0LAotCQkJCSAgIDAsIEVWX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAnaycsIGlkLT5rZXliaXQsCi0JCQkJICAgS0VZX01JTl9JTlRFUkVTVElORywgS0VZX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAncicsIGlkLT5yZWxiaXQsCi0JCQkJICAgMCwgUkVMX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAnYScsIGlkLT5hYnNiaXQsCi0JCQkJICAgMCwgQUJTX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAnbScsIGlkLT5tc2NiaXQsCi0JCQkJICAgMCwgTVNDX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAnbCcsIGlkLT5sZWRiaXQsCi0JCQkJICAgMCwgTEVEX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAncycsIGlkLT5zbmRiaXQsCi0JCQkJICAgMCwgU05EX01BWCk7Ci0JbGVuICs9IHByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAnZicsIGlkLT5mZmJpdCwKLQkJCQkgICAwLCBGRl9NQVgpOwotCWxlbiArPSBwcmludF9tb2RhbGlhc19iaXRzKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgJ3cnLCBpZC0+c3diaXQsCi0JCQkJICAgMCwgU1dfTUFYKTsKKwlsZW4gKz0gaW5wdXRfcHJpbnRfbW9kYWxpYXNfYml0cyhidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJJ2UnLCBpZC0+ZXZiaXQsIDAsIEVWX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdrJywgaWQtPmtleWJpdCwgS0VZX01JTl9JTlRFUkVTVElORywgS0VZX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdyJywgaWQtPnJlbGJpdCwgMCwgUkVMX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdhJywgaWQtPmFic2JpdCwgMCwgQUJTX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdtJywgaWQtPm1zY2JpdCwgMCwgTVNDX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdsJywgaWQtPmxlZGJpdCwgMCwgTEVEX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdzJywgaWQtPnNuZGJpdCwgMCwgU05EX01BWCk7CisJbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzX2JpdHMoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSdmJywgaWQtPmZmYml0LCAwLCBGRl9NQVgpOworCWxlbiArPSBpbnB1dF9wcmludF9tb2RhbGlhc19iaXRzKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCQkndycsIGlkLT5zd2JpdCwgMCwgU1dfTUFYKTsKKworCWlmIChhZGRfY3IpCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChzaXplIC0gbGVuLCAwKSwgIlxuIik7CisKIAlyZXR1cm4gbGVuOwogfQogCkBAIC01NzYsOSArNjI3LDkgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZCA9IHRvX2lucHV0X2RldihkZXYpOwogCXNzaXplX3QgbGVuOwogCi0JbGVuID0gcHJpbnRfbW9kYWxpYXMoYnVmLCBQQUdFX1NJWkUsIGlkKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUtbGVuLCAiXG4iKTsKLQlyZXR1cm4gbGVuOworCWxlbiA9IGlucHV0X3ByaW50X21vZGFsaWFzKGJ1ZiwgUEFHRV9TSVpFLCBpZCwgMSk7CisKKwlyZXR1cm4gbWF4X3QoaW50LCBsZW4sIFBBR0VfU0laRSk7CiB9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobW9kYWxpYXMsIFNfSVJVR08sIGlucHV0X2Rldl9zaG93X21vZGFsaWFzLCBOVUxMKTsKIApAQCAtNTk4LDcgKzY0OSw3IEBACiBzdGF0aWMgc3NpemVfdCBpbnB1dF9kZXZfc2hvd19pZF8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQkJXAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHRvX2lucHV0X2RldihkZXYpOwkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDR4XG4iLCBpbnB1dF9kZXYtPmlkLm5hbWUpOwkJCVwKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTA0eFxuIiwgaW5wdXRfZGV2LT5pZC5uYW1lKTsJCVwKIH0JCQkJCQkJCQkJXAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGlucHV0X2Rldl9zaG93X2lkXyMjbmFtZSwgTlVMTCk7CiAKQEAgLTYyMCwxMSArNjcxLDMzIEBACiAJLmF0dHJzCT0gaW5wdXRfZGV2X2lkX2F0dHJzLAogfTsKIAorc3RhdGljIGludCBpbnB1dF9wcmludF9iaXRtYXAoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKKwkJCSAgICAgIGludCBtYXgsIGludCBhZGRfY3IpCit7CisJaW50IGk7CisJaW50IGxlbiA9IDA7CisKKwlmb3IgKGkgPSBOQklUUyhtYXgpIC0gMTsgaSA+IDA7IGktLSkKKwkJaWYgKGJpdG1hcFtpXSkKKwkJCWJyZWFrOworCisJZm9yICg7IGkgPj0gMDsgaS0tKQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmX3NpemUgLSBsZW4sIDApLAorCQkJCSIlbHglcyIsIGJpdG1hcFtpXSwgaSA+IDAgPyAiICIgOiAiIik7CisKKwlpZiAoYWRkX2NyKQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmX3NpemUgLSBsZW4sIDApLCAiXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKICNkZWZpbmUgSU5QVVRfREVWX0NBUF9BVFRSKGV2LCBibSkJCQkJCQlcCiBzdGF0aWMgc3NpemVfdCBpbnB1dF9kZXZfc2hvd19jYXBfIyNibShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCQlcCiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CQkJXAotCXJldHVybiBpbnB1dF9wcmludF9iaXRtYXAoYnVmLCBQQUdFX1NJWkUsIGlucHV0X2Rldi0+Ym0jI2JpdCwgZXYjI19NQVgpO1wKKwlpbnQgbGVuID0gaW5wdXRfcHJpbnRfYml0bWFwKGJ1ZiwgUEFHRV9TSVpFLAkJCQlcCisJCQkJICAgICBpbnB1dF9kZXYtPmJtIyNiaXQsIGV2IyNfTUFYLCAxKTsJCVwKKwlyZXR1cm4gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSk7CQkJCQlcCiB9CQkJCQkJCQkJCVwKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihibSwgU19JUlVHTywgaW5wdXRfZGV2X3Nob3dfY2FwXyMjYm0sIE5VTEwpOwogCkBAIC02NjksOCArNzQyLDggQEAKICAqIGRldmljZSBiaXRmaWVsZHMuCiAgKi8KIHN0YXRpYyBpbnQgaW5wdXRfYWRkX3VldmVudF9ibV92YXIoY2hhciAqKmVudnAsIGludCBudW1fZW52cCwgaW50ICpjdXJfaW5kZXgsCi0JCQkJICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBpbnQgKmN1cl9sZW4sCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG1heCkKKwkJCQkgICBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgaW50ICpjdXJfbGVuLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG1heCkKIHsKIAlpZiAoKmN1cl9pbmRleCA+PSBudW1fZW52cCAtIDEpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjc4LDEyICs3NTEsMzYgQEAKIAllbnZwWypjdXJfaW5kZXhdID0gYnVmZmVyICsgKmN1cl9sZW47CiAKIAkqY3VyX2xlbiArPSBzbnByaW50ZihidWZmZXIgKyAqY3VyX2xlbiwgbWF4KGJ1ZmZlcl9zaXplIC0gKmN1cl9sZW4sIDApLCBuYW1lKTsKLQlpZiAoKmN1cl9sZW4gPiBidWZmZXJfc2l6ZSkKKwlpZiAoKmN1cl9sZW4gPj0gYnVmZmVyX3NpemUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKmN1cl9sZW4gKz0gaW5wdXRfcHJpbnRfYml0bWFwKGJ1ZmZlciArICpjdXJfbGVuLAogCQkJCQltYXgoYnVmZmVyX3NpemUgLSAqY3VyX2xlbiwgMCksCi0JCQkJCWJpdG1hcCwgbWF4KSArIDE7CisJCQkJCWJpdG1hcCwgbWF4LCAwKSArIDE7CisJaWYgKCpjdXJfbGVuID4gYnVmZmVyX3NpemUpCisJCXJldHVybiAtRU5PTUVNOworCisJKCpjdXJfaW5kZXgpKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5wdXRfYWRkX3VldmVudF9tb2RhbGlhc192YXIoY2hhciAqKmVudnAsIGludCBudW1fZW52cCwgaW50ICpjdXJfaW5kZXgsCisJCQkJCSBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgaW50ICpjdXJfbGVuLAorCQkJCQkgc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWlmICgqY3VyX2luZGV4ID49IG51bV9lbnZwIC0gMSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllbnZwWypjdXJfaW5kZXhdID0gYnVmZmVyICsgKmN1cl9sZW47CisKKwkqY3VyX2xlbiArPSBzbnByaW50ZihidWZmZXIgKyAqY3VyX2xlbiwgbWF4KGJ1ZmZlcl9zaXplIC0gKmN1cl9sZW4sIDApLAorCQkJICAgICAiTU9EQUxJQVM9Iik7CisJaWYgKCpjdXJfbGVuID49IGJ1ZmZlcl9zaXplKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSpjdXJfbGVuICs9IGlucHV0X3ByaW50X21vZGFsaWFzKGJ1ZmZlciArICpjdXJfbGVuLAorCQkJCQkgbWF4KGJ1ZmZlcl9zaXplIC0gKmN1cl9sZW4sIDApLAorCQkJCQkgZGV2LCAwKSArIDE7CiAJaWYgKCpjdXJfbGVuID4gYnVmZmVyX3NpemUpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02OTMsNyArNzkwLDcgQEAKIAogI2RlZmluZSBJTlBVVF9BRERfSE9UUExVR19WQVIoZm10LCB2YWwuLi4pCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWludCBlcnIgPSBhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCVwKKwkJaW50IGVyciA9IGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwJCVwKIAkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbiwJXAogCQkJCQlmbXQsIHZhbCk7CQkJXAogCQlpZiAoZXJyKQkJCQkJCVwKQEAgLTcwOSw2ICs4MDYsMTYgQEAKIAkJCXJldHVybiBlcnI7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBJTlBVVF9BRERfSE9UUExVR19NT0RBTElBU19WQVIoZGV2KQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgZXJyID0gaW5wdXRfYWRkX3VldmVudF9tb2RhbGlhc192YXIoZW52cCwJCVwKKwkJCQkJbnVtX2VudnAsICZpLAkJCVwKKwkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbiwJXAorCQkJCQlkZXYpOwkJCQlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCiBzdGF0aWMgaW50IGlucHV0X2Rldl91ZXZlbnQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqKmVudnAsCiAJCQkgICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKIHsKQEAgLTc0NCw5ICs4NTEsNyBAQAogCWlmICh0ZXN0X2JpdChFVl9TVywgZGV2LT5ldmJpdCkpCiAJCUlOUFVUX0FERF9IT1RQTFVHX0JNX1ZBUigiU1c9IiwgZGV2LT5zd2JpdCwgU1dfTUFYKTsKIAotCWVudnBbaSsrXSA9IGJ1ZmZlciArIGxlbjsKLQlsZW4gKz0gc25wcmludGYoYnVmZmVyICsgbGVuLCBidWZmZXJfc2l6ZSAtIGxlbiwgIk1PREFMSUFTPSIpOwotCWxlbiArPSBwcmludF9tb2RhbGlhcyhidWZmZXIgKyBsZW4sIGJ1ZmZlcl9zaXplIC0gbGVuLCBkZXYpICsgMTsKKwlJTlBVVF9BRERfSE9UUExVR19NT0RBTElBU19WQVIoZGV2KTsKIAogCWVudnBbaV0gPSBOVUxMOwogCXJldHVybiAwOwpAQCAtNzkwLDcgKzg5NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluaXRfTVVURVgoJmRldi0+c2VtKTsKKwltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKIAlzZXRfYml0KEVWX1NZTiwgZGV2LT5ldmJpdCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggMjBlMjk3Mi4uOTQ5YmRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC0xNzEsOSArMTcxLDggQEAKIAlpZiAoaSA+PSBKT1lERVZfTUlOT1JTIHx8ICFqb3lkZXZfdGFibGVbaV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqb3lkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShsaXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGpveWRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBqb3lkZXZfbGlzdCkpOwogCiAJbGlzdC0+am95ZGV2ID0gam95ZGV2X3RhYmxlW2ldOwogCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZqb3lkZXZfdGFibGVbaV0tPmxpc3QpOwpAQCAtNDU3LDkgKzQ1Niw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICghKGpveWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqb3lkZXYpLCBHRlBfS0VSTkVMKSkpCisJaWYgKCEoam95ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGpveWRldiksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGpveWRldiwgMCwgc2l6ZW9mKHN0cnVjdCBqb3lkZXYpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZqb3lkZXYtPmxpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmpveWRldi0+d2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYwppbmRleCBlYzU1YTI5Li43MjQ5ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CkBAIC01Miw3ICs1Myw3IEBACiBfX29ic29sZXRlX3NldHVwKCJhbWlqb3k9Iik7CiAKIHN0YXRpYyBpbnQgYW1pam95X3VzZWQ7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChhbWlqb3lfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYW1pam95X211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICphbWlqb3lfZGV2WzJdOwogc3RhdGljIGNoYXIgKmFtaWpveV9waHlzWzJdID0geyAiYW1pam95L2lucHV0MCIsICJhbWlqb3kvaW5wdXQxIiB9OwogCkBAIC04NSw3ICs4Niw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRvd25faW50ZXJydXB0aWJsZSgmYW1pam95X3NlbSk7CisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhbWlqb3lfbXV0ZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTk3LDE2ICs5OCwxNiBAQAogCiAJYW1pam95X3VzZWQrKzsKIG91dDoKLQl1cCgmYW1pam95X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZhbWlqb3lfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGFtaWpveV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7Ci0JZG93bigmYW1pam95X3NlbSk7CisJbXV0ZXhfbG9jaygmYW1pam95X211dGV4KTsKIAlpZiAoIS0tYW1pam95X3VzZWQpCiAJCWZyZWVfaXJxKElSUV9BTUlHQV9WRVJUQiwgYW1pam95X2ludGVycnVwdCk7Ci0JdXAoJmFtaWpveV9zZW0pOworCW11dGV4X3VubG9jaygmYW1pam95X211dGV4KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYW1pam95X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCmluZGV4IGRjZmZjMzQuLmU2MTg5NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBNT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0YXJpLCBBbXN0cmFkLCBDb21tb2RvcmUsIEFtaWdhLCBTZWdhLCBldGMuIGpveXN0aWNrIGRyaXZlciIpOwpAQCAtMTExLDcgKzExMiw3IEBACiAJc3RydWN0IHBhcmRldmljZSAqcGQ7CiAJaW50IG1vZGU7CiAJaW50IHVzZWQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IG11dGV4OwogCWNoYXIgcGh5c1tEQjlfTUFYX0RFVklDRVNdWzMyXTsKIH07CiAKQEAgLTUyNSw3ICs1MjYsNyBAQAogCXN0cnVjdCBwYXJwb3J0ICpwb3J0ID0gZGI5LT5wZC0+cG9ydDsKIAlpbnQgZXJyOwogCi0JZXJyID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZkYjktPnNlbSk7CisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkYjktPm11dGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01MzksNyArNTQwLDcgQEAKIAkJbW9kX3RpbWVyKCZkYjktPnRpbWVyLCBqaWZmaWVzICsgREI5X1JFRlJFU0hfVElNRSk7CiAJfQogCi0JdXAoJmRiOS0+c2VtKTsKKwltdXRleF91bmxvY2soJmRiOS0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC01NDgsMTQgKzU0OSwxNCBAQAogCXN0cnVjdCBkYjkgKmRiOSA9IGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgcGFycG9ydCAqcG9ydCA9IGRiOS0+cGQtPnBvcnQ7CiAKLQlkb3duKCZkYjktPnNlbSk7CisJbXV0ZXhfbG9jaygmZGI5LT5tdXRleCk7CiAJaWYgKCEtLWRiOS0+dXNlZCkgewogCQlkZWxfdGltZXJfc3luYygmZGI5LT50aW1lcik7CiAJCXBhcnBvcnRfd3JpdGVfY29udHJvbChwb3J0LCAweDAwKTsKIAkJcGFycG9ydF9kYXRhX2ZvcndhcmQocG9ydCk7CiAJCXBhcnBvcnRfcmVsZWFzZShkYjktPnBkKTsKIAl9Ci0JdXAoJmRiOS0+c2VtKTsKKwltdXRleF91bmxvY2soJmRiOS0+bXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IGRiOSBfX2luaXQgKmRiOV9wcm9iZShpbnQgcGFycG9ydCwgaW50IG1vZGUpCkBAIC02MDMsNyArNjA0LDcgQEAKIAkJZ290byBlcnJfdW5yZWdfcGFyZGV2OwogCX0KIAotCWluaXRfTVVURVgoJmRiOS0+c2VtKTsKKwltdXRleF9pbml0KCZkYjktPm11dGV4KTsKIAlkYjktPnBkID0gcGQ7CiAJZGI5LT5tb2RlID0gbW9kZTsKIAlpbml0X3RpbWVyKCZkYjktPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKaW5kZXggOTAwNTg3YS4uZWNiZGI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKQEAgLTcsNiArNyw3IEBACiAgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6CiAgKglBbmRyZWUgQm9ycm1hbm4JCUpvaG4gRGFobHN0cm9tCiAgKglEYXZpZCBLdWRlcgkJTmF0aGFuIEhhbmQKKyAqCVJhcGhhZWwgQXNzZW5hdAogICovCiAKIC8qCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTkVTLCBTTkVTLCBONjQsIE11bHRpU3lzdGVtLCBQU1ggZ2FtZXBhZCBkcml2ZXIiKTsKQEAgLTcyLDggKzc0LDkgQEAKICNkZWZpbmUgR0NfTjY0CQk2CiAjZGVmaW5lIEdDX1BTWAkJNwogI2RlZmluZSBHQ19ERFIJCTgKKyNkZWZpbmUgR0NfU05FU01PVVNFCTkKIAotI2RlZmluZSBHQ19NQVgJCTgKKyNkZWZpbmUgR0NfTUFYCQk5CiAKICNkZWZpbmUgR0NfUkVGUkVTSF9USU1FCUhaLzEwMAogCkBAIC04Myw3ICs4Niw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdW5zaWduZWQgY2hhciBwYWRzW0dDX01BWCArIDFdOwogCWludCB1c2VkOwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBtdXRleDsKIAljaGFyIHBoeXNbR0NfTUFYX0RFVklDRVNdWzMyXTsKIH07CiAKQEAgLTkzLDcgKzk2LDcgQEAKIAogc3RhdGljIGNoYXIgKmdjX25hbWVzW10gPSB7IE5VTEwsICJTTkVTIHBhZCIsICJORVMgcGFkIiwgIk5FUyBGb3VyUG9ydCIsICJNdWx0aXN5c3RlbSBqb3lzdGljayIsCiAJCQkJIk11bHRpc3lzdGVtIDItYnV0dG9uIGpveXN0aWNrIiwgIk42NCBjb250cm9sbGVyIiwgIlBTWCBjb250cm9sbGVyIiwKLQkJCQkiUFNYIEREUiBjb250cm9sbGVyIiB9OworCQkJCSJQU1ggRERSIGNvbnRyb2xsZXIiLCAiU05FUyBtb3VzZSIgfTsKIC8qCiAgKiBONjQgc3VwcG9ydC4KICAqLwpAQCAtMjA1LDkgKzIwOCwxMiBAQAogICogTkVTL1NORVMgc3VwcG9ydC4KICAqLwogCi0jZGVmaW5lIEdDX05FU19ERUxBWQk2CS8qIERlbGF5IGJldHdlZW4gYml0cyAtIDZ1cyAqLwotI2RlZmluZSBHQ19ORVNfTEVOR1RICTgJLyogVGhlIE5FUyBwYWRzIHVzZSA4IGJpdHMgb2YgZGF0YSAqLwotI2RlZmluZSBHQ19TTkVTX0xFTkdUSAkxMgkvKiBUaGUgU05FUyB0cnVlIGxlbmd0aCBpcyAxNiwgYnV0IHRoZSBsYXN0IDQgYml0cyBhcmUgdW51c2VkICovCisjZGVmaW5lIEdDX05FU19ERUxBWQkJNgkvKiBEZWxheSBiZXR3ZWVuIGJpdHMgLSA2dXMgKi8KKyNkZWZpbmUgR0NfTkVTX0xFTkdUSAkJOAkvKiBUaGUgTkVTIHBhZHMgdXNlIDggYml0cyBvZiBkYXRhICovCisjZGVmaW5lIEdDX1NORVNfTEVOR1RICQkxMgkvKiBUaGUgU05FUyB0cnVlIGxlbmd0aCBpcyAxNiwgYnV0IHRoZQorCQkJCQkgICBsYXN0IDQgYml0cyBhcmUgdW51c2VkICovCisjZGVmaW5lIEdDX1NORVNNT1VTRV9MRU5HVEgJMzIJLyogVGhlIFNORVMgbW91c2UgdXNlcyAzMiBiaXRzLCB0aGUgZmlyc3QKKwkJCQkJICAgMTYgYml0cyBhcmUgZXF1aXZhbGVudCB0byBhIGdhbWVwYWQgKi8KIAogI2RlZmluZSBHQ19ORVNfUE9XRVIJMHhmYwogI2RlZmluZSBHQ19ORVNfQ0xPQ0sJMHgwMQpAQCAtMjQyLDExICsyNDgsMTUgQEAKIAogc3RhdGljIHZvaWQgZ2NfbmVzX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBnYyAqZ2MpCiB7Ci0JdW5zaWduZWQgY2hhciBkYXRhW0dDX1NORVNfTEVOR1RIXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfU05FU01PVVNFX0xFTkdUSF07CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwotCWludCBpLCBqLCBzOworCWludCBpLCBqLCBzLCBsZW47CisJY2hhciB4X3JlbCwgeV9yZWw7CiAKLQlnY19uZXNfcmVhZF9wYWNrZXQoZ2MsIGdjLT5wYWRzW0dDX1NORVNdID8gR0NfU05FU19MRU5HVEggOiBHQ19ORVNfTEVOR1RILCBkYXRhKTsKKwlsZW4gPSBnYy0+cGFkc1tHQ19TTkVTTU9VU0VdID8gR0NfU05FU01PVVNFX0xFTkdUSCA6CisJCQkoZ2MtPnBhZHNbR0NfU05FU10gPyBHQ19TTkVTX0xFTkdUSCA6IEdDX05FU19MRU5HVEgpOworCisJZ2NfbmVzX3JlYWRfcGFja2V0KGdjLCBsZW4sIGRhdGEpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKIApAQCAtMjY5LDYgKzI3OSw0NCBAQAogCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2Nfc25lc19idG5bal0sIHMgJiBkYXRhW2djX3NuZXNfYnl0ZXNbal1dKTsKIAorCQlpZiAocyAmIGdjLT5wYWRzW0dDX1NORVNNT1VTRV0pIHsKKwkJCS8qCisJCQkgKiBUaGUgNCB1bnVzZWQgYml0cyBmcm9tIFNORVMgY29udHJvbGxlcnMgYXBwZWFyIHRvIGJlIElEIGJpdHMKKwkJCSAqIHNvIHVzZSB0aGVtIHRvIG1ha2Ugc3VyZSBpd2UgYXJlIGRlYWxpbmcgd2l0aCBhIG1vdXNlLgorCQkJICogZ2FtZXBhZCBpcyBjb25uZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlCisJCQkgKiBteSBTTkVTIGdhbWVwYWQgc2VuZHMgMSdzIGZvciBiaXRzIDE2LTMxLCB3aGljaAorCQkJICogY2F1c2UgdGhlIG1vdXNlIHBvaW50ZXIgdG8gcXVpY2tseSBtb3ZlIHRvIHRoZQorCQkJICogdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbi4KKwkJCSAqLworCQkJaWYgKCEocyAmIGRhdGFbMTJdKSAmJiAhKHMgJiBkYXRhWzEzXSkgJiYKKwkJCSAgICAhKHMgJiBkYXRhWzE0XSkgJiYgKHMgJiBkYXRhWzE1XSkpIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIHMgJiBkYXRhWzldKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCBzICYgZGF0YVs4XSk7CisKKwkJCQl4X3JlbCA9IHlfcmVsID0gMDsKKwkJCQlmb3IgKGogPSAwOyBqIDwgNzsgaisrKSB7CisJCQkJCXhfcmVsIDw8PSAxOworCQkJCQlpZiAoZGF0YVsyNSArIGpdICYgcykKKwkJCQkJCXhfcmVsIHw9IDE7CisKKwkJCQkJeV9yZWwgPDw9IDE7CisJCQkJCWlmIChkYXRhWzE3ICsgal0gJiBzKQorCQkJCQkJeV9yZWwgfD0gMTsKKwkJCQl9CisKKwkJCQlpZiAoeF9yZWwpIHsKKwkJCQkJaWYgKGRhdGFbMjRdICYgcykKKwkJCQkJCXhfcmVsID0gLXhfcmVsOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIHhfcmVsKTsKKwkJCQl9CisKKwkJCQlpZiAoeV9yZWwpIHsKKwkJCQkJaWYgKGRhdGFbMTZdICYgcykKKwkJCQkJCXlfcmVsID0gLXlfcmVsOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIHlfcmVsKTsKKwkJCQl9CisJCQl9CisJCX0KIAkJaW5wdXRfc3luYyhkZXYpOwogCX0KIH0KQEAgLTUyNCwxMCArNTcyLDEwIEBACiAJCWdjX242NF9wcm9jZXNzX3BhY2tldChnYyk7CiAKIC8qCi0gKiBORVMgYW5kIFNORVMgcGFkcworICogTkVTIGFuZCBTTkVTIHBhZHMgb3IgbW91c2UKICAqLwogCi0JaWYgKGdjLT5wYWRzW0dDX05FU10gfHwgZ2MtPnBhZHNbR0NfU05FU10pCisJaWYgKGdjLT5wYWRzW0dDX05FU10gfHwgZ2MtPnBhZHNbR0NfU05FU10gfHwgZ2MtPnBhZHNbR0NfU05FU01PVVNFXSkKIAkJZ2NfbmVzX3Byb2Nlc3NfcGFja2V0KGdjKTsKIAogLyoKQEAgLTU1Miw3ICs2MDAsNyBAQAogCXN0cnVjdCBnYyAqZ2MgPSBkZXYtPnByaXZhdGU7CiAJaW50IGVycjsKIAotCWVyciA9IGRvd25faW50ZXJydXB0aWJsZSgmZ2MtPnNlbSk7CisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnYy0+bXV0ZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTU2Miw3ICs2MTAsNyBAQAogCQltb2RfdGltZXIoJmdjLT50aW1lciwgamlmZmllcyArIEdDX1JFRlJFU0hfVElNRSk7CiAJfQogCi0JdXAoJmdjLT5zZW0pOworCW11dGV4X3VubG9jaygmZ2MtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTcwLDEzICs2MTgsMTMgQEAKIHsKIAlzdHJ1Y3QgZ2MgKmdjID0gZGV2LT5wcml2YXRlOwogCi0JZG93bigmZ2MtPnNlbSk7CisJbXV0ZXhfbG9jaygmZ2MtPm11dGV4KTsKIAlpZiAoIS0tZ2MtPnVzZWQpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJmdjLT50aW1lcik7CiAJCXBhcnBvcnRfd3JpdGVfY29udHJvbChnYy0+cGQtPnBvcnQsIDB4MDApOwogCQlwYXJwb3J0X3JlbGVhc2UoZ2MtPnBkKTsKIAl9Ci0JdXAoJmdjLT5zZW0pOworCW11dGV4X3VubG9jaygmZ2MtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZ2Nfc2V0dXBfcGFkKHN0cnVjdCBnYyAqZ2MsIGludCBpZHgsIGludCBwYWRfdHlwZSkKQEAgLTYwOSwxMCArNjU3LDEzIEBACiAJaW5wdXRfZGV2LT5vcGVuID0gZ2Nfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gZ2NfY2xvc2U7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlpZiAocGFkX3R5cGUgIT0gR0NfU05FU01PVVNFKSB7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCArIGksIC0xLCAxLCAwLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ggKyBpLCAtMSwgMSwgMCwgMCk7CisJfSBlbHNlCisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwogCiAJZ2MtPnBhZHNbMF0gfD0gZ2Nfc3RhdHVzX2JpdFtpZHhdOwogCWdjLT5wYWRzW3BhZF90eXBlXSB8PSBnY19zdGF0dXNfYml0W2lkeF07CkBAIC02MzAsNiArNjgxLDEzIEBACiAKIAkJCWJyZWFrOwogCisJCWNhc2UgR0NfU05FU01PVVNFOgorCQkJc2V0X2JpdChCVE5fTEVGVCwgaW5wdXRfZGV2LT5rZXliaXQpOworCQkJc2V0X2JpdChCVE5fUklHSFQsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJCXNldF9iaXQoUkVMX1gsIGlucHV0X2Rldi0+cmVsYml0KTsKKwkJCXNldF9iaXQoUkVMX1ksIGlucHV0X2Rldi0+cmVsYml0KTsKKwkJCWJyZWFrOworCiAJCWNhc2UgR0NfU05FUzoKIAkJCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCiAJCQkJc2V0X2JpdChnY19zbmVzX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwpAQCAtNjkzLDcgKzc1MSw3IEBACiAJCWdvdG8gZXJyX3VucmVnX3BhcmRldjsKIAl9CiAKLQlpbml0X01VVEVYKCZnYy0+c2VtKTsKKwltdXRleF9pbml0KCZnYy0+bXV0ZXgpOwogCWdjLT5wZCA9IHBkOwogCWluaXRfdGltZXIoJmdjLT50aW1lcik7CiAJZ2MtPnRpbWVyLmRhdGEgPSAobG9uZykgZ2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtZmYuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCmluZGV4IDQ2NzhiNmQuLjJiOGU4NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCkBAIC00MiwxNCArNDIsMTQgQEAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbM107CiAKIAlpZiAoIW5vX2FsbG9jKSB7Ci0JCWRvd24oJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCQlpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJihpZm9yY2UtPmRldmljZV9tZW1vcnkpLCBtb2RfY2h1bmssIDIsCiAJCQlpZm9yY2UtPmRldmljZV9tZW1vcnkuc3RhcnQsIGlmb3JjZS0+ZGV2aWNlX21lbW9yeS5lbmQsIDJMLAogCQkJTlVMTCwgTlVMTCkpIHsKLQkJCXVwKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXVwKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCX0KIAogCWRhdGFbMF0gPSBMTyhtb2RfY2h1bmstPnN0YXJ0KTsKQEAgLTc1LDE0ICs3NSwxNCBAQAogCXBlcmlvZCA9IFRJTUVfU0NBTEUocGVyaW9kKTsKIAogCWlmICghbm9fYWxsb2MpIHsKLQkJZG93bigmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQltdXRleF9sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmKGlmb3JjZS0+ZGV2aWNlX21lbW9yeSksIG1vZF9jaHVuaywgMHgwYywKIAkJCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5zdGFydCwgaWZvcmNlLT5kZXZpY2VfbWVtb3J5LmVuZCwgMkwsCiAJCQlOVUxMLCBOVUxMKSkgewotCQkJdXAoJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJdXAoJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJfQogCiAJZGF0YVswXSA9IExPKG1vZF9jaHVuay0+c3RhcnQpOwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAKIAlmYWRlX2R1cmF0aW9uID0gVElNRV9TQ0FMRShmYWRlX2R1cmF0aW9uKTsKIAogCWlmICghbm9fYWxsb2MpIHsKLQkJZG93bigmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQltdXRleF9sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmKGlmb3JjZS0+ZGV2aWNlX21lbW9yeSksIG1vZF9jaHVuaywgMHgwZSwKIAkJCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5zdGFydCwgaWZvcmNlLT5kZXZpY2VfbWVtb3J5LmVuZCwgMkwsCiAJCQlOVUxMLCBOVUxMKSkgewotCQkJdXAoJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaWZvcmNlLT5tZW1fbXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJdXAoJmlmb3JjZS0+bWVtX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJfQogCiAJZGF0YVswXSA9IExPKG1vZF9jaHVuay0+c3RhcnQpOwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMTBdOwogCiAJaWYgKCFub19hbGxvYykgewotCQlkb3duKCZpZm9yY2UtPm1lbV9tdXRleCk7CisJCW11dGV4X2xvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKCYoaWZvcmNlLT5kZXZpY2VfbWVtb3J5KSwgbW9kX2NodW5rLCA4LAogCQkJaWZvcmNlLT5kZXZpY2VfbWVtb3J5LnN0YXJ0LCBpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kLCAyTCwKIAkJCU5VTEwsIE5VTEwpKSB7Ci0JCQl1cCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl1cCgmaWZvcmNlLT5tZW1fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmlmb3JjZS0+bWVtX211dGV4KTsKIAl9CiAKIAlkYXRhWzBdID0gTE8obW9kX2NodW5rLT5zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwppbmRleCBiNmJjMDQ5Li5hYjBhMjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaWZvcmNlLT53YWl0KTsKIAlzcGluX2xvY2tfaW5pdCgmaWZvcmNlLT54bWl0X2xvY2spOwotCWluaXRfTVVURVgoJmlmb3JjZS0+bWVtX211dGV4KTsKKwltdXRleF9pbml0KCZpZm9yY2UtPm1lbV9tdXRleCk7CiAJaWZvcmNlLT54bWl0LmJ1ZiA9IGlmb3JjZS0+eG1pdF9kYXRhOwogCWlmb3JjZS0+ZGV2ID0gaW5wdXRfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaCBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS5oCmluZGV4IDE0NmY0MDYuLjY2OGYyNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS5oCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhcmJpdHJhcnkgcmVzb3VyY2UgbWFuYWdlbWVudCByb3V0aW5lcy4KICAqIEkgdXNlIGl0IHRvIG1hbmFnZSB0aGUgZGV2aWNlJ3MgbWVtb3J5LgpAQCAtNDUsNiArNDUsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKKwogI2RlZmluZSBJRk9SQ0VfTUFYX0xFTkdUSAkxNgogCiAvKiBpZm9yY2U6OmJ1cyAqLwpAQCAtMTQ2LDcgKzE0Nyw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3QgcmVzb3VyY2UgZGV2aWNlX21lbW9yeTsKIAlzdHJ1Y3QgaWZvcmNlX2NvcmVfZWZmZWN0IGNvcmVfZWZmZWN0c1tGRl9FRkZFQ1RTX01BWF07Ci0Jc3RydWN0IHNlbWFwaG9yZSBtZW1fbXV0ZXg7CisJc3RydWN0IG11dGV4IG1lbV9tdXRleDsKIH07CiAKIC8qIEdldCBoaSBhbmQgbG93IGJ5dGVzIG9mIGEgMTYtYml0cyBpbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc2lkZXdpbmRlci5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMKaW5kZXggMmIyZWMxMC4uOTVjMGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogCXN0cnVjdCBzdyAqc3c7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBpLCBqLCBrLCBsOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsJLyogW1NXX0xFTkdUSF0gKi8KIAl1bnNpZ25lZCBjaGFyICppZGJ1ZiA9IE5VTEw7CS8qIFtTV19MRU5HVEhdICovCiAJdW5zaWduZWQgY2hhciBtID0gMTsKQEAgLTc3Niw3ICs3NzYsMTAgQEAKIAkJCWdvdG8gZmFpbDQ7CiAJfQogCi0JcmV0dXJuIDA7Cisgb3V0OglrZnJlZShidWYpOworCWtmcmVlKGlkYnVmKTsKKworCXJldHVybiBlcnI7CiAKICBmYWlsNDoJaW5wdXRfZnJlZV9kZXZpY2Uoc3ctPmRldltpXSk7CiAgZmFpbDM6CXdoaWxlICgtLWkgPj0gMCkKQEAgLTc4NCw5ICs3ODcsNyBAQAogIGZhaWwyOglnYW1lcG9ydF9jbG9zZShnYW1lcG9ydCk7CiAgZmFpbDE6CWdhbWVwb3J0X3NldF9kcnZkYXRhKGdhbWVwb3J0LCBOVUxMKTsKIAlrZnJlZShzdyk7Ci0Ja2ZyZWUoYnVmKTsKLQlrZnJlZShpZGJ1Zik7Ci0JcmV0dXJuIGVycjsKKwlnb3RvIG91dDsKIH0KIAogc3RhdGljIHZvaWQgc3dfZGlzY29ubmVjdChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90dXJib2dyYWZ4LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYwppbmRleCBiMTU0OTM4Li41NTcwZmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVHVyYm9HcmFGWCBwYXJhbGxlbCBwb3J0IGludGVyZmFjZSBkcml2ZXIiKTsKQEAgLTg2LDcgKzg3LDcgQEAKIAljaGFyIHBoeXNbVEdGWF9NQVhfREVWSUNFU11bMzJdOwogCWludCBzdGlja3M7CiAJaW50IHVzZWQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IHNlbTsKIH0gKnRnZnhfYmFzZVtUR0ZYX01BWF9QT1JUU107CiAKIC8qCkBAIC0xMjgsNyArMTI5LDcgQEAKIAlzdHJ1Y3QgdGdmeCAqdGdmeCA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyOwogCi0JZXJyID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZ0Z2Z4LT5zZW0pOworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdGdmeC0+c2VtKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xMzgsNyArMTM5LDcgQEAKIAkJbW9kX3RpbWVyKCZ0Z2Z4LT50aW1lciwgamlmZmllcyArIFRHRlhfUkVGUkVTSF9USU1FKTsKIAl9CiAKLQl1cCgmdGdmeC0+c2VtKTsKKwltdXRleF91bmxvY2soJnRnZngtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NiwxMyArMTQ3LDEzIEBACiB7CiAJc3RydWN0IHRnZnggKnRnZnggPSBkZXYtPnByaXZhdGU7CiAKLQlkb3duKCZ0Z2Z4LT5zZW0pOworCW11dGV4X2xvY2soJnRnZngtPnNlbSk7CiAJaWYgKCEtLXRnZngtPnVzZWQpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJnRnZngtPnRpbWVyKTsKIAkJcGFycG9ydF93cml0ZV9jb250cm9sKHRnZngtPnBkLT5wb3J0LCAweDAwKTsKIAkJcGFycG9ydF9yZWxlYXNlKHRnZngtPnBkKTsKIAl9Ci0JdXAoJnRnZngtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ0Z2Z4LT5zZW0pOwogfQogCiAKQEAgLTE5MSw3ICsxOTIsNyBAQAogCQlnb3RvIGVycl91bnJlZ19wYXJkZXY7CiAJfQogCi0JaW5pdF9NVVRFWCgmdGdmeC0+c2VtKTsKKwltdXRleF9pbml0KCZ0Z2Z4LT5zZW0pOwogCXRnZngtPnBkID0gcGQ7CiAJaW5pdF90aW1lcigmdGdmeC0+dGltZXIpOwogCXRnZngtPnRpbWVyLmRhdGEgPSAobG9uZykgdGdmeDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCAzYjBhYzNiLi5hOWRkYTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0xMyw3ICsxMyw3IEBACiBpZiBJTlBVVF9LRVlCT0FSRAogCiBjb25maWcgS0VZQk9BUkRfQVRLQkQKLQl0cmlzdGF0ZSAiQVQga2V5Ym9hcmQiIGlmICFYODZfUEMKKwl0cmlzdGF0ZSAiQVQga2V5Ym9hcmQiIGlmIEVNQkVEREVEIHx8ICFYODZfUEMKIAlkZWZhdWx0IHkKIAlzZWxlY3QgU0VSSU8KIAlzZWxlY3QgU0VSSU9fTElCUFMyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggZmZhY2Y2ZS4uZmFkMDRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlicHMyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBEUklWRVJfREVTQwkiQVQgYW5kIFBTLzIga2V5Ym9hcmQgZHJpdmVyIgogCkBAIC0yMTYsNyArMjE3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWU7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGV2ZW50X3NlbTsKKwlzdHJ1Y3QgbXV0ZXggZXZlbnRfbXV0ZXg7CiAJdW5zaWduZWQgbG9uZyBldmVudF9tYXNrOwogfTsKIApAQCAtMzAyLDE5ICszMDMsMTkgQEAKIAlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQpIHsKIAogCQlpZiAoYXRrYmQtPmVtdWwgfHwKLQkJICAgICEoY29kZSA9PSBBVEtCRF9SRVRfRU1VTDAgfHwgY29kZSA9PSBBVEtCRF9SRVRfRU1VTDEgfHwKLQkJICAgICAgY29kZSA9PSBBVEtCRF9SRVRfSEFOR1VFTCB8fCBjb2RlID09IEFUS0JEX1JFVF9IQU5KQSB8fAotCQkgICAgIChjb2RlID09IEFUS0JEX1JFVF9FUlIgJiYgIWF0a2JkLT5lcnJfeGwpIHx8Ci0JICAgICAgICAgICAgIChjb2RlID09IEFUS0JEX1JFVF9CQVQgJiYgIWF0a2JkLT5iYXRfeGwpKSkgeworCQkgICAgKGNvZGUgIT0gQVRLQkRfUkVUX0VNVUwwICYmIGNvZGUgIT0gQVRLQkRfUkVUX0VNVUwxICYmCisJCSAgICAgY29kZSAhPSBBVEtCRF9SRVRfSEFOR1VFTCAmJiBjb2RlICE9IEFUS0JEX1JFVF9IQU5KQSAmJgorCQkgICAgIChjb2RlICE9IEFUS0JEX1JFVF9FUlIgfHwgYXRrYmQtPmVycl94bCkgJiYKKwkgICAgICAgICAgICAgKGNvZGUgIT0gQVRLQkRfUkVUX0JBVCB8fCBhdGtiZC0+YmF0X3hsKSkpIHsKIAkJCWF0a2JkLT5yZWxlYXNlID0gY29kZSA+PiA3OwogCQkJY29kZSAmPSAweDdmOwogCQl9CiAKIAkJaWYgKCFhdGtiZC0+ZW11bCkgewogCQkgICAgIGlmICgoY29kZSAmIDB4N2YpID09IChBVEtCRF9SRVRfQkFUICYgMHg3ZikpCi0JCQlhdGtiZC0+YmF0X3hsID0gIWF0a2JkLT5yZWxlYXNlOworCQkJYXRrYmQtPmJhdF94bCA9ICEoZGF0YSA+PiA3KTsKIAkJICAgICBpZiAoKGNvZGUgJiAweDdmKSA9PSAoQVRLQkRfUkVUX0VSUiAmIDB4N2YpKQotCQkJYXRrYmQtPmVycl94bCA9ICFhdGtiZC0+cmVsZWFzZTsKKwkJCWF0a2JkLT5lcnJfeGwgPSAhKGRhdGEgPj4gNyk7CiAJCX0KIAl9CiAKQEAgLTQ0OSw3ICs0NTAsNyBAQAogCXVuc2lnbmVkIGNoYXIgcGFyYW1bMl07CiAJaW50IGksIGo7CiAKLQlkb3duKCZhdGtiZC0+ZXZlbnRfc2VtKTsKKwltdXRleF9sb2NrKCZhdGtiZC0+ZXZlbnRfbXV0ZXgpOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKSB7CiAJCXBhcmFtWzBdID0gKHRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPyAxIDogMCkKQEAgLTQ4MCw3ICs0ODEsNyBAQAogCQlwczJfY29tbWFuZCgmYXRrYmQtPnBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRSRVApOwogCX0KIAotCXVwKCZhdGtiZC0+ZXZlbnRfc2VtKTsKKwltdXRleF91bmxvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiB9CiAKIC8qCkBAIC04NDYsNyArODQ3LDcgQEAKIAlhdGtiZC0+ZGV2ID0gZGV2OwogCXBzMl9pbml0KCZhdGtiZC0+cHMyZGV2LCBzZXJpbyk7CiAJSU5JVF9XT1JLKCZhdGtiZC0+ZXZlbnRfd29yaywgYXRrYmRfZXZlbnRfd29yaywgYXRrYmQpOwotCWluaXRfTVVURVgoJmF0a2JkLT5ldmVudF9zZW0pOworCW11dGV4X2luaXQoJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKIAlzd2l0Y2ggKHNlcmlvLT5pZC50eXBlKSB7CiAKQEAgLTg2Miw5ICs4NjMsNiBAQAogCWF0a2JkLT5zb2Z0cmVwZWF0ID0gYXRrYmRfc29mdHJlcGVhdDsKIAlhdGtiZC0+c2Nyb2xsID0gYXRrYmRfc2Nyb2xsOwogCi0JaWYgKCFhdGtiZC0+d3JpdGUpCi0JCWF0a2JkLT5zb2Z0cmVwZWF0ID0gMTsKLQogCWlmIChhdGtiZC0+c29mdHJlcGVhdCkKIAkJYXRrYmQtPnNvZnRyYXcgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKaW5kZXggZTMwMWVlNC4uMWYwZTcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwpAQCAtMjksMTEgKzI5LDExIEBACiAjZGVmaW5lIEtCX0NPTFMJCQkJMTIKICNkZWZpbmUgS0JfUk9XTUFTSyhyKQkJKDEgPDwgKHIpKQogI2RlZmluZSBTQ0FOQ09ERShyLGMpCQkoICgocik8PDQpICsgKGMpICsgMSApCi0vKiB6ZXJvIGNvZGUsIDEyNCBzY2FuY29kZXMgKyAzIGhpbmdlIGNvbWJpbmF0aW9ucyAqLwotI2RlZmluZQlOUl9TQ0FOQ09ERVMJCSggU0NBTkNPREUoS0JfUk9XUy0xLEtCX0NPTFMtMSkgKzEgKzEgKzMgKQotI2RlZmluZSBTQ0FOX0lOVEVSVkFMCQkoSFovMTApCisvKiB6ZXJvIGNvZGUsIDEyNCBzY2FuY29kZXMgKi8KKyNkZWZpbmUJTlJfU0NBTkNPREVTCQkoIFNDQU5DT0RFKEtCX1JPV1MtMSxLQl9DT0xTLTEpICsxICsxICkKIAotI2RlZmluZSBISU5HRV9TQ0FOX0lOVEVSVkFMCQkoSFovNCkKKyNkZWZpbmUgU0NBTl9JTlRFUlZBTAkJKDUwKSAvKiBtcyAqLworI2RlZmluZSBISU5HRV9TQ0FOX0lOVEVSVkFMCSgyNTApIC8qIG1zICovCiAKICNkZWZpbmUgQ09SR0lfS0VZX0NBTEVOREVSCUtFWV9GMQogI2RlZmluZSBDT1JHSV9LRVlfQUREUkVTUwlLRVlfRjIKQEAgLTQ5LDkgKzQ5LDYgQEAKICNkZWZpbmUgQ09SR0lfS0VZX01BSUwJCUtFWV9GMTAKICNkZWZpbmUgQ09SR0lfS0VZX09LCQlLRVlfRjExCiAjZGVmaW5lIENPUkdJX0tFWV9NRU5VCQlLRVlfRjEyCi0jZGVmaW5lIENPUkdJX0hJTkdFXzAJCUtFWV9LUDAKLSNkZWZpbmUgQ09SR0lfSElOR0VfMQkJS0VZX0tQMQotI2RlZmluZSBDT1JHSV9ISU5HRV8yCQlLRVlfS1AyCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvcmdpa2JkX2tleWNvZGVbTlJfU0NBTkNPREVTXSA9IHsKIAkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwICovCkBAIC02Myw3ICs2MCw2IEBACiAJQ09SR0lfS0VZX01BSUwsIEtFWV9aLCBLRVlfWCwgS0VZX01JTlVTLCBLRVlfU1BBQ0UsIEtFWV9DT01NQSwgMCwgS0VZX1VQLCAwLCAwLCAwLCBDT1JHSV9LRVlfRk4sIDAsIDAsIDAsIDAsICAgICAgICAgICAgLyogODEtOTYgKi8KIAlLRVlfU1lTUlEsIENPUkdJX0tFWV9KQVAxLCBDT1JHSV9LRVlfSkFQMiwgQ09SR0lfS0VZX0NBTkNFTCwgQ09SR0lfS0VZX09LLCBDT1JHSV9LRVlfTUVOVSwgS0VZX0xFRlQsIEtFWV9ET1dOLCBLRVlfUklHSFQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAvKiA5Ny0xMTIgKi8KIAlDT1JHSV9LRVlfT0ZGLCBDT1JHSV9LRVlfRVhPSywgQ09SR0lfS0VZX0VYQ0FOQ0VMLCBDT1JHSV9LRVlfRVhKT0dET1dOLCBDT1JHSV9LRVlfRVhKT0dVUCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAvKiAxMTMtMTI0ICovCi0JQ09SR0lfSElOR0VfMCwgQ09SR0lfSElOR0VfMSwgQ09SR0lfSElOR0VfMgkgIC8qIDEyNS0xMjcgKi8KIH07CiAKIApAQCAtMTg3LDcgKzE4Myw3IEBACiAKIAkvKiBpZiBhbnkga2V5cyBhcmUgcHJlc3NlZCwgZW5hYmxlIHRoZSB0aW1lciAqLwogCWlmIChudW1fcHJlc3NlZCkKLQkJbW9kX3RpbWVyKCZjb3JnaWtiZF9kYXRhLT50aW1lciwgamlmZmllcyArIFNDQU5fSU5URVJWQUwpOworCQltb2RfdGltZXIoJmNvcmdpa2JkX2RhdGEtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhTQ0FOX0lOVEVSVkFMKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JnaWtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0yMjgsNiArMjI0LDcgQEAKICAqICAgICAgICAgIDB4MGMgLSBLZXlib2FyZCBhbmQgU2NyZWVuIENsb3NlZAogICovCiAKKyNkZWZpbmUgUkVBRF9HUElPX0JJVCh4KSAgICAoR1BMUih4KSAmIEdQSU9fYml0KHgpKQogI2RlZmluZSBISU5HRV9TVEFCTEVfQ09VTlQgMgogc3RhdGljIGludCBzaGFycHNsX2hpbmdlX3N0YXRlOwogc3RhdGljIGludCBoaW5nZV9jb3VudDsKQEAgLTIzOSw2ICsyMzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlncHJyID0gcmVhZF9zY29vcF9yZWcoJmNvcmdpc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BSUikgJiAoQ09SR0lfU0NQX1NXQSB8IENPUkdJX1NDUF9TV0IpOworCWdwcnIgfD0gKFJFQURfR1BJT19CSVQoQ09SR0lfR1BJT19BS19JTlQpICE9IDApOwogCWlmIChncHJyICE9IHNoYXJwc2xfaGluZ2Vfc3RhdGUpIHsKIAkJaGluZ2VfY291bnQgPSAwOwogCQlzaGFycHNsX2hpbmdlX3N0YXRlID0gZ3BycjsKQEAgLTI0NywyOSArMjQ1LDQwIEBACiAJCWlmIChoaW5nZV9jb3VudCA+PSBISU5HRV9TVEFCTEVfQ09VTlQpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JnaWtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CiAKLQkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXXzAsICgoc2hhcnBzbF9oaW5nZV9zdGF0ZSAmIENPUkdJX1NDUF9TV0EpICE9IDApKTsKLQkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXXzEsICgoc2hhcnBzbF9oaW5nZV9zdGF0ZSAmIENPUkdJX1NDUF9TV0IpICE9IDApKTsKKwkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXX0xJRCwgKChzaGFycHNsX2hpbmdlX3N0YXRlICYgQ09SR0lfU0NQX1NXQSkgIT0gMCkpOworCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChjb3JnaWtiZF9kYXRhLT5pbnB1dCwgU1dfVEFCTEVUX01PREUsICgoc2hhcnBzbF9oaW5nZV9zdGF0ZSAmIENPUkdJX1NDUF9TV0IpICE9IDApKTsKKwkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXX0hFQURQSE9ORV9JTlNFUlQsIChSRUFEX0dQSU9fQklUKENPUkdJX0dQSU9fQUtfSU5UKSAhPSAwKSk7CiAJCQlpbnB1dF9zeW5jKGNvcmdpa2JkX2RhdGEtPmlucHV0KTsKIAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZ2lrYmRfZGF0YS0+bG9jaywgZmxhZ3MpOwogCQl9CiAJfQotCW1vZF90aW1lcigmY29yZ2lrYmRfZGF0YS0+aHRpbWVyLCBqaWZmaWVzICsgSElOR0VfU0NBTl9JTlRFUlZBTCk7CisJbW9kX3RpbWVyKCZjb3JnaWtiZF9kYXRhLT5odGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhJTkdFX1NDQU5fSU5URVJWQUwpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBjb3JnaWtiZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCWludCBpOwogCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCiAJY29yZ2lrYmQtPnN1c3BlbmRlZCA9IDE7CisJLyogc3Ryb2JlIDAgaXMgdGhlIHBvd2VyIGtleSBzbyB0aGlzIGNhbid0IGJlIG1hZGUgYW4gaW5wdXQgZm9yCisJICAgcG93ZXJzYXZpbmcgdGhlcmVmb3JlIGkgPSAxICovCisJZm9yIChpID0gMTsgaSA8IENPUkdJX0tFWV9TVFJPQkVfTlVNOyBpKyspCisJCXB4YV9ncGlvX21vZGUoQ09SR0lfR1BJT19LRVlfU1RST0JFKGkpIHwgR1BJT19JTik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjb3JnaWtiZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCWludCBpOwogCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCisJZm9yIChpID0gMTsgaSA8IENPUkdJX0tFWV9TVFJPQkVfTlVNOyBpKyspCisJCXB4YV9ncGlvX21vZGUoQ09SR0lfR1BJT19LRVlfU1RST0JFKGkpIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisKIAkvKiBVcG9uIHJlc3VtZSwgaWdub3JlIHRoZSBzdXNwZW5kIGtleSBmb3IgYSBzaG9ydCB3aGlsZSAqLwogCWNvcmdpa2JkLT5zdXNwZW5kX2ppZmZpZXM9amlmZmllczsKIAljb3JnaWtiZC0+c3VzcGVuZGVkID0gMDsKQEAgLTMzMSwxMiArMzQwLDEzIEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29yZ2lrYmRfa2V5Y29kZSk7IGkrKykKIAkJc2V0X2JpdChjb3JnaWtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0Jc2V0X2JpdChTV18wLCBpbnB1dF9kZXYtPnN3Yml0KTsKLQlzZXRfYml0KFNXXzEsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfTElELCBpbnB1dF9kZXYtPnN3Yml0KTsKKwlzZXRfYml0KFNXX1RBQkxFVF9NT0RFLCBpbnB1dF9kZXYtPnN3Yml0KTsKKwlzZXRfYml0KFNXX0hFQURQSE9ORV9JTlNFUlQsIGlucHV0X2Rldi0+c3diaXQpOwogCiAJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNvcmdpa2JkLT5pbnB1dCk7CiAKLQltb2RfdGltZXIoJmNvcmdpa2JkLT5odGltZXIsIGppZmZpZXMgKyBISU5HRV9TQ0FOX0lOVEVSVkFMKTsKKwltb2RfdGltZXIoJmNvcmdpa2JkLT5odGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhJTkdFX1NDQU5fSU5URVJWQUwpKTsKIAogCS8qIFNldHVwIHNlbnNlIGludGVycnVwdHMgLSBSaXNpbmdFZGdlIERldGVjdCwgc2Vuc2UgbGluZXMgYXMgaW5wdXRzICovCiAJZm9yIChpID0gMDsgaSA8IENPUkdJX0tFWV9TRU5TRV9OVU07IGkrKykgewpAQCAtMzUxLDYgKzM2MSw5IEBACiAJZm9yIChpID0gMDsgaSA8IENPUkdJX0tFWV9TVFJPQkVfTlVNOyBpKyspCiAJCXB4YV9ncGlvX21vZGUoQ09SR0lfR1BJT19LRVlfU1RST0JFKGkpIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CiAKKwkvKiBTZXR1cCB0aGUgaGVhZHBob25lIGphY2sgYXMgYW4gaW5wdXQgKi8KKwlweGFfZ3Bpb19tb2RlKENPUkdJX0dQSU9fQUtfSU5UIHwgR1BJT19JTik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYwppbmRleCA2M2YzODdlLi4yZTRhYmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYwpAQCAtMjUwLDE2ICsyNTAsMTkgQEAKIAlzdHJ1Y3QgaGlsX2tiZAkqa2JkOwogCXVpbnQ4X3QJCWRpZCwgKmlkZDsKIAlpbnQJCWk7Ci0JCisKIAlrYmQgPSBremFsbG9jKHNpemVvZigqa2JkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYmQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJa2JkLT5kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWtiZC0+ZGV2KSBnb3RvIGJhaWwxOworCWlmICgha2JkLT5kZXYpCisJCWdvdG8gYmFpbDA7CisKIAlrYmQtPmRldi0+cHJpdmF0ZSA9IGtiZDsKIAotCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcnYpKSBnb3RvIGJhaWwwOworCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcnYpKQorCQlnb3RvIGJhaWwxOwogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIGtiZCk7CiAJa2JkLT5zZXJpbyA9IHNlcmlvOwpAQCAtMzQ3LDExICszNTAsMTEgQEAKIAlyZXR1cm4gMDsKICBiYWlsMjoKIAlzZXJpb19jbG9zZShzZXJpbyk7CisJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwogIGJhaWwxOgogCWlucHV0X2ZyZWVfZGV2aWNlKGtiZC0+ZGV2KTsKICBiYWlsMDoKIAlrZnJlZShrYmQpOwotCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDgzOTk5ZDUuLmM1ZDAzZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgU0NBTkNPREUocixjKQkJKCgocik8PDQpICsgKGMpICsgMSkKICNkZWZpbmUJTlJfU0NBTkNPREVTCQkoKEtCX1JPV1M8PDQpICsgMSkKIAorI2RlZmluZSBTQ0FOX0lOVEVSVkFMCQkoNTApIC8qIG1zICovCiAjZGVmaW5lIEhJTkdFX1NDQU5fSU5URVJWQUwJKDE1MCkgLyogbXMgKi8KIAogI2RlZmluZSBTUElUWl9LRVlfQ0FMRU5ERVIJS0VZX0YxCkBAIC01Miw4ICs1Myw4IEBACiAJS0VZX0xFRlRDVFJMLCBLRVlfMSwgS0VZXzMsIEtFWV81LCBLRVlfNiwgS0VZXzcsIEtFWV85LCBLRVlfMCwgS0VZX0JBQ0tTUEFDRSwgU1BJVFpfS0VZX0VYT0ssIFNQSVRaX0tFWV9FWENBTkNFTCwgMCwgMCwgMCwgMCwgMCwgIC8qIDEtMTYgKi8KIAkwLCBLRVlfMiwgS0VZXzQsIEtFWV9SLCBLRVlfWSwgS0VZXzgsIEtFWV9JLCBLRVlfTywgS0VZX1AsIFNQSVRaX0tFWV9FWEpPR0RPV04sIFNQSVRaX0tFWV9FWEpPR1VQLCAwLCAwLCAwLCAwLCAwLCAvKiAxNy0zMiAqLwogCUtFWV9UQUIsIEtFWV9RLCBLRVlfRSwgS0VZX1QsIEtFWV9HLCBLRVlfVSwgS0VZX0osIEtFWV9LLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMzLTQ4ICovCi0JU1BJVFpfS0VZX0NBTEVOREVSLCBLRVlfVywgS0VZX1MsIEtFWV9GLCBLRVlfViwgS0VZX0gsIEtFWV9NLCBLRVlfTCwgMCwgS0VZX1JJR0hUU0hJRlQsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgLyogNDktNjQgKi8KLQlTUElUWl9LRVlfQUREUkVTUywgS0VZX0EsIEtFWV9ELCBLRVlfQywgS0VZX0IsIEtFWV9OLCBLRVlfRE9ULCAwLCBLRVlfRU5URVIsIEtFWV9MRUZUU0hJRlQsIDAsIDAsIDAsIDAsIDAsIDAsCSAgLyogNjUtODAgKi8KKwlTUElUWl9LRVlfQUREUkVTUywgS0VZX1csIEtFWV9TLCBLRVlfRiwgS0VZX1YsIEtFWV9ILCBLRVlfTSwgS0VZX0wsIDAsIEtFWV9SSUdIVFNISUZULCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgIC8qIDQ5LTY0ICovCisJU1BJVFpfS0VZX0NBTEVOREVSLCBLRVlfQSwgS0VZX0QsIEtFWV9DLCBLRVlfQiwgS0VZX04sIEtFWV9ET1QsIDAsIEtFWV9FTlRFUiwgS0VZX0xFRlRTSElGVCwgMCwgMCwgMCwgMCwgMCwgMCwJICAvKiA2NS04MCAqLwogCVNQSVRaX0tFWV9NQUlMLCBLRVlfWiwgS0VZX1gsIEtFWV9NSU5VUywgS0VZX1NQQUNFLCBLRVlfQ09NTUEsIDAsIEtFWV9VUCwgMCwgMCwgU1BJVFpfS0VZX0ZOLCAwLCAwLCAwLCAwLCAwLCAgICAgIC8qIDgxLTk2ICovCiAJS0VZX1NZU1JRLCBTUElUWl9LRVlfSkFQMSwgU1BJVFpfS0VZX0pBUDIsIFNQSVRaX0tFWV9DQU5DRUwsIFNQSVRaX0tFWV9PSywgU1BJVFpfS0VZX01FTlUsIEtFWV9MRUZULCBLRVlfRE9XTiwgS0VZX1JJR0hULCAwLCAwLCAwLCAwLCAwLCAwLCAwICAvKiA5Ny0xMTIgKi8KIH07CkBAIC0yMzAsNyArMjMxLDcgQEAKIAogCS8qIGlmIGFueSBrZXlzIGFyZSBwcmVzc2VkLCBlbmFibGUgdGhlIHRpbWVyICovCiAJaWYgKG51bV9wcmVzc2VkKQotCQltb2RfdGltZXIoJnNwaXR6a2JkX2RhdGEtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwkJbW9kX3RpbWVyKCZzcGl0emtiZF9kYXRhLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoU0NBTl9JTlRFUlZBTCkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BpdHprYmRfZGF0YS0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjg3LDYgKzI4OCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN0YXRlID0gR1BMUihTUElUWl9HUElPX1NXQSkgJiAoR1BJT19iaXQoU1BJVFpfR1BJT19TV0EpfEdQSU9fYml0KFNQSVRaX0dQSU9fU1dCKSk7CisJc3RhdGUgfD0gKEdQTFIoU1BJVFpfR1BJT19BS19JTlQpICYgR1BJT19iaXQoU1BJVFpfR1BJT19BS19JTlQpKTsKIAlpZiAoc3RhdGUgIT0gc2hhcnBzbF9oaW5nZV9zdGF0ZSkgewogCQloaW5nZV9jb3VudCA9IDA7CiAJCXNoYXJwc2xfaGluZ2Vfc3RhdGUgPSBzdGF0ZTsKQEAgLTI5Nyw4ICsyOTksOSBAQAogCWlmIChoaW5nZV9jb3VudCA+PSBISU5HRV9TVEFCTEVfQ09VTlQpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNwaXR6a2JkX2RhdGEtPmxvY2ssIGZsYWdzKTsKIAotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKHNwaXR6a2JkX2RhdGEtPmlucHV0LCBTV18wLCAoKEdQTFIoU1BJVFpfR1BJT19TV0EpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TV0EpKSAhPSAwKSk7Ci0JCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXXzEsICgoR1BMUihTUElUWl9HUElPX1NXQikgJiBHUElPX2JpdChTUElUWl9HUElPX1NXQikpICE9IDApKTsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChzcGl0emtiZF9kYXRhLT5pbnB1dCwgU1dfTElELCAoKEdQTFIoU1BJVFpfR1BJT19TV0EpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TV0EpKSAhPSAwKSk7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXX1RBQkxFVF9NT0RFLCAoKEdQTFIoU1BJVFpfR1BJT19TV0IpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TV0IpKSAhPSAwKSk7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXX0hFQURQSE9ORV9JTlNFUlQsICgoR1BMUihTUElUWl9HUElPX0FLX0lOVCkgJiBHUElPX2JpdChTUElUWl9HUElPX0FLX0lOVCkpICE9IDApKTsKIAkJaW5wdXRfc3luYyhzcGl0emtiZF9kYXRhLT5pbnB1dCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BpdHprYmRfZGF0YS0+bG9jaywgZmxhZ3MpOwpAQCAtMzk1LDggKzM5OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BpdHprYmRfa2V5Y29kZSk7IGkrKykKIAkJc2V0X2JpdChzcGl0emtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0Jc2V0X2JpdChTV18wLCBpbnB1dF9kZXYtPnN3Yml0KTsKLQlzZXRfYml0KFNXXzEsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfTElELCBpbnB1dF9kZXYtPnN3Yml0KTsKKwlzZXRfYml0KFNXX1RBQkxFVF9NT0RFLCBpbnB1dF9kZXYtPnN3Yml0KTsKKwlzZXRfYml0KFNXX0hFQURQSE9ORV9JTlNFUlQsIGlucHV0X2Rldi0+c3diaXQpOwogCiAJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAKQEAgLTQzMiw2ICs0MzYsOSBAQAogCXJlcXVlc3RfaXJxKFNQSVRaX0lSUV9HUElPX1NXQiwgc3BpdHprYmRfaGluZ2VfaXNyLAogCQkgICAgU0FfSU5URVJSVVBUIHwgU0FfVFJJR0dFUl9SSVNJTkcgfCBTQV9UUklHR0VSX0ZBTExJTkcsCiAJCSAgICAiU3BpdHprYmQgU1dCIiwgc3BpdHprYmQpOworIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19BS19JTlQsIHNwaXR6a2JkX2hpbmdlX2lzciwKKwkJICAgIFNBX0lOVEVSUlVQVCB8IFNBX1RSSUdHRVJfUklTSU5HIHwgU0FfVFJJR0dFUl9GQUxMSU5HLAorCQkgICAgIlNwaXR6a2JkIEhQIiwgc3BpdHprYmQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6IFNwaXR6IEtleWJvYXJkIFJlZ2lzdGVyZWRcbiIpOwogCkBAIC00NTAsNiArNDU3LDcgQEAKIAlmcmVlX2lycShTUElUWl9JUlFfR1BJT19PTl9LRVksIHNwaXR6a2JkKTsKIAlmcmVlX2lycShTUElUWl9JUlFfR1BJT19TV0EsIHNwaXR6a2JkKTsKIAlmcmVlX2lycShTUElUWl9JUlFfR1BJT19TV0IsIHNwaXR6a2JkKTsKKwlmcmVlX2lycShTUElUWl9JUlFfR1BJT19BS19JTlQsIHNwaXR6a2JkKTsKIAogCWRlbF90aW1lcl9zeW5jKCZzcGl0emtiZC0+aHRpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmc3BpdHprYmQtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9wY3Nwa3IuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wY3Nwa3IuYwppbmRleCAxZWY0NzdmLi5hZmQzMjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvcGNzcGtyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3Bjc3Brci5jCkBAIC0yNCw3ICsyNCw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDIFNwZWFrZXIgYmVlcGVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGNzcGtyX3BsYXRmb3JtX2RldmljZTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaTgyNTNfYmVlcF9sb2NrKTsKIAogc3RhdGljIGludCBwY3Nwa3JfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKQEAgLTEzNSwzNSArMTM0LDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBjc3Brcl9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNzcGtyX3BsYXRmb3JtX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXBjc3Brcl9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInBjc3BrciIsIC0xKTsKLQlpZiAoIXBjc3Brcl9wbGF0Zm9ybV9kZXZpY2UpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI7Ci0JfQotCi0JZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwY3Nwa3JfcGxhdGZvcm1fZGV2aWNlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlX2RldmljZTsKLQotCXJldHVybiAwOwotCi0gZXJyX2ZyZWVfZGV2aWNlOgotCXBsYXRmb3JtX2RldmljZV9wdXQocGNzcGtyX3BsYXRmb3JtX2RldmljZSk7Ci0gZXJyX3VucmVnaXN0ZXJfZHJpdmVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY3Nwa3JfcGxhdGZvcm1fZHJpdmVyKTsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNzcGtyX3BsYXRmb3JtX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwY3Nwa3JfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBjc3Brcl9wbGF0Zm9ybV9kZXZpY2UpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY3Nwa3JfcGxhdGZvcm1fZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCmluZGV4IDU0NmVkOWI0Li5kNzIzZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlpZiAoIW5ld2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpbml0X01VVEVYKCZuZXdkZXYtPnNlbSk7CisJbXV0ZXhfaW5pdCgmbmV3ZGV2LT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJm5ld2Rldi0+cmVxdWVzdHNfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbmV3ZGV2LT5yZXF1ZXN0c193YWl0cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbmV3ZGV2LT53YWl0cSk7CkBAIC0zNDAsNyArMzQwLDcgQEAKIAlzdHJ1Y3QgdWlucHV0X2RldmljZSAqdWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZ1ZGV2LT5zZW0pOworCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdWRldi0+bXV0ZXgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTM0OCw3ICszNDgsNyBAQAogCQkJdWlucHV0X2luamVjdF9ldmVudCh1ZGV2LCBidWZmZXIsIGNvdW50KSA6CiAJCQl1aW5wdXRfc2V0dXBfZGV2aWNlKHVkZXYsIGJ1ZmZlciwgY291bnQpOwogCi0JdXAoJnVkZXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1ZGV2LT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMzY5LDcgKzM2OSw3IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmdWRldi0+c2VtKTsKKwlyZXR2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVkZXYtPm11dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0zODgsNyArMzg4LDcgQEAKIAl9CiAKICBvdXQ6Ci0JdXAoJnVkZXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1ZGV2LT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDM5LDcgKzQzOSw3IEBACiAKIAl1ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JcmV0dmFsID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZ1ZGV2LT5zZW0pOworCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdWRldi0+bXV0ZXgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTU4OSw3ICs1ODksNyBAQAogCX0KIAogIG91dDoKLQl1cCgmdWRldi0+c2VtKTsKKwltdXRleF91bmxvY2soJnVkZXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKaW5kZXggNGI0MTVkOWIuLmU0ZTViZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKQEAgLTI3Myw2ICsyNzMsMTggQEAKIAl7IEtFX0VORCwgIDAgfQogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX2Z1aml0c3VfbjM1MTBbXSA9IHsKKwl7IEtFX0tFWSwgMHgxMSwgS0VZX1BST0cxIH0sCisJeyBLRV9LRVksIDB4MTIsIEtFWV9QUk9HMiB9LAorCXsgS0VfS0VZLCAweDM2LCBLRVlfV1dXIH0sCisJeyBLRV9LRVksIDB4MzEsIEtFWV9NQUlMIH0sCisJeyBLRV9LRVksIDB4NzEsIEtFWV9TVE9QQ0QgfSwKKwl7IEtFX0tFWSwgMHg3MiwgS0VZX1BMQVlQQVVTRSB9LAorCXsgS0VfS0VZLCAweDc0LCBLRVlfUkVXSU5EIH0sCisJeyBLRV9LRVksIDB4NzgsIEtFWV9GT1JXQVJEIH0sCisJeyBLRV9FTkQsIDAgfQorfTsKKwogc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX3dpc3Ryb25fbXMyMTQxW10gPSB7CiAJeyBLRV9LRVksICAweDExLCBLRVlfUFJPRzEgfSwKIAl7IEtFX0tFWSwgIDB4MTIsIEtFWV9QUk9HMiB9LApAQCAtMzA2LDYgKzMxOCwxNiBAQAogCXsgS0VfRU5ELCAwIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IGtleW1hcF9hb3Blbl8xNTU5YXNbXSA9IHsKKwl7IEtFX0tFWSwgIDB4MDEsIEtFWV9IRUxQIH0sCisJeyBLRV9LRVksICAweDA2LCBLRVlfUFJPRzMgfSwKKwl7IEtFX0tFWSwgIDB4MTEsIEtFWV9QUk9HMSB9LAorCXsgS0VfS0VZLCAgMHgxMiwgS0VZX1BST0cyIH0sCisJeyBLRV9XSUZJLCAweDMwLCAwIH0sCisJeyBLRV9LRVksICAweDMxLCBLRVlfTUFJTCB9LAorCXsgS0VfS0VZLCAgMHgzNiwgS0VZX1dXVyB9LAorfTsKKwogLyoKICAqIElmIHlvdXIgbWFjaGluZSBpcyBub3QgaGVyZSAod2hpY2ggaXMgY3VycmVudGx5IHJhdGhlciBsaWtlbHkpLCBwbGVhc2Ugc2VuZAogICogYSBsaXN0IG9mIGJ1dHRvbnMgYW5kIHRoZWlyIGtleSBjb2RlcyAocmVwb3J0ZWQgd2hlbiBsb2FkaW5nIHRoaXMgbW9kdWxlCkBAIC0zMjMsNiArMzQ1LDI0IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIE03NDAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gTSAgICAgICAgIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9IGtleW1hcF9mc19hbWlsb19wcm9fdjIwMDAKKwl9LAorCXsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJGdWppdHN1IE4zNTEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4zNTEwIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9IGtleW1hcF9mdWppdHN1X24zNTEwCisJfSwKKwl7CisJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAogCQkuaWRlbnQgPSAiQWNlciBBc3BpcmUgMTUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLApAQCAtMzM5LDYgKzM3OSwxNSBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEgPSBrZXltYXBfYWNlcl90cmF2ZWxtYXRlXzI0MAogCX0sCisgICAgICAgIHsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJBT3BlbiAxNTU5QVMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRTJVIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJFMlUiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2FvcGVuXzE1NTlhcworCX0sCiAJeyBOVUxMLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IDIxNDE1MDEuLmEwZTJlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAl9CiAKIAlpZiAocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX09MRFBST1RPKSB7Ci0JCWxlZnQgPSBwYWNrZXRbMl0gJiAweDA4OwotCQlyaWdodCA9IHBhY2tldFsyXSAmIDB4MTA7CisJCWxlZnQgPSBwYWNrZXRbMl0gJiAweDEwOworCQlyaWdodCA9IHBhY2tldFsyXSAmIDB4MDg7CiAJCW1pZGRsZSA9IDA7CiAJCXggPSBwYWNrZXRbMV0gfCAoKHBhY2tldFswXSAmIDB4MDcpIDw8IDcpOwogCQl5ID0gcGFja2V0WzRdIHwgKChwYWNrZXRbM10gJiAweDA3KSA8PCA3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKaW5kZXggYmZiNTY0Zi4uNjlmMDIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKQEAgLTI0OSwxMCArMjQ5LDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcHRyLT5kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXB0ci0+ZGV2KSBnb3RvIGJhaWwwOworCWlmICghcHRyLT5kZXYpCisJCWdvdG8gYmFpbDA7CisKIAlwdHItPmRldi0+cHJpdmF0ZSA9IHB0cjsKIAotCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcml2ZXIpKSBnb3RvIGJhaWwxOworCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcml2ZXIpKQorCQlnb3RvIGJhaWwxOwogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIHB0cik7CiAJcHRyLT5zZXJpbyA9IHNlcmlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCmluZGV4IDVjY2MzZWYuLmMxNDM5NWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0yMiwxMiArMjIsMzYgQEAKIAogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGxpZmVib29rX2RtaV90YWJsZVtdID0gewogICAgICAgIHsKKyAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlQm9vayBCIiwKKyAgICAgICAgICAgICAgIC5tYXRjaGVzID0geworICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIgU2VyaWVzIiksCisgICAgICAgICAgICAgICB9LAorICAgICAgIH0sCisgICAgICAgewogICAgICAgICAgICAgICAgLmlkZW50ID0gIkxpZmVib29rIEIiLAogICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTElGRUJPT0sgQiBTZXJpZXMiKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CisgICAgICAgICAgICAgICAuaWRlbnQgPSAiTGlmZWJvb2sgQjIxM3gvQjIxNTAiLAorICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGlmZUJvb2sgQjIxMzEvQjIxMzMvQjIxNTAiKSwKKyAgICAgICAgICAgICAgIH0sCisgICAgICAgfSwKKyAgICAgICB7CisgICAgICAgICAgICAgICAuaWRlbnQgPSAiWmVwaHlyIiwKKyAgICAgICAgICAgICAgIC5tYXRjaGVzID0geworICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlpFUEhZUiIpLAorICAgICAgICAgICAgICAgfSwKKyAgICAgICB9LAorICAgICAgIHsKKyAgICAgICAgICAgICAgIC5pZGVudCA9ICJDRi0xOCIsCisgICAgICAgICAgICAgICAubWF0Y2hlcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRi0xOCIpLAorICAgICAgICAgICAgICAgfSwKKyAgICAgICB9LAorICAgICAgIHsKICAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKICAgICAgICAgICAgICAgIC5tYXRjaGVzID0gewogICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIxNDIiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IDQwMzMzZDYuLjJmMGQyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBQUzJQUF9LSU5EX1dIRUVMCTEKICNkZWZpbmUgUFMyUFBfS0lORF9NWAkJMgogI2RlZmluZSBQUzJQUF9LSU5EX1RQMwkJMworI2RlZmluZSBQUzJQUF9LSU5EX1RSQUNLTUFOCTQKIAogLyogTG9naXRlY2ggbW91c2UgZmVhdHVyZXMgKi8KICNkZWZpbmUgUFMyUFBfV0hFRUwJCTB4MDEKQEAgLTIyMyw2ICsyMjQsNyBAQAogCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCisJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCiAJCXsgODAsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1NJREVfQlROIHwgUFMyUFBfV0hFRUwgfSwKIAkJeyA4MSwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKIAkJeyA4MywJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKQEAgLTI5OCw2ICszMDAsMTAgQEAKIAkJCXBzbW91c2UtPm5hbWUgPSAiVG91Y2hQYWQgMyI7CiAJCQlicmVhazsKIAorCQljYXNlIFBTMlBQX0tJTkRfVFJBQ0tNQU46CisJCQlwc21vdXNlLT5uYW1lID0gIlRyYWNrTWFuIjsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQkvKgogCQkJICogU2V0IG5hbWUgdG8gIk1vdXNlIiBvbmx5IHdoZW4gdXNpbmcgUFMyKyssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCBhZDYyMTc0Li4xMzYzMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saWJwczIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSAicHNtb3VzZS5oIgogI2luY2x1ZGUgInN5bmFwdGljcy5oIgogI2luY2x1ZGUgImxvZ2lwczJwcC5oIgpAQCAtOTgsMTMgKzEwMCwxMyBAQAogX19vYnNvbGV0ZV9zZXR1cCgicHNtb3VzZV9yYXRlPSIpOwogCiAvKgotICogcHNtb3VzZV9zZW0gcHJvdGVjdHMgYWxsIG9wZXJhdGlvbnMgY2hhbmdpbmcgc3RhdGUgb2YgbW91c2UKKyAqIHBzbW91c2VfbXV0ZXggcHJvdGVjdHMgYWxsIG9wZXJhdGlvbnMgY2hhbmdpbmcgc3RhdGUgb2YgbW91c2UKICAqIChjb25uZWN0aW5nLCBkaXNjb25uZWN0aW5nLCBjaGFuZ2luZyByYXRlIG9yIHJlc29sdXRpb24gdmlhCiAgKiBzeXNmcykuIFdlIGNvdWxkIHVzZSBhIHBlci1kZXZpY2Ugc2VtYXBob3JlIGJ1dCBzaW5jZSB0aGVyZQogICogcmFyZWx5IG1vcmUgdGhhbiBvbmUgUFMvMiBtb3VzZSBjb25uZWN0ZWQgYW5kIHNpbmNlIHNlbWFwaG9yZQogICogaXMgdGFrZW4gaW4gInNsb3ciIHBhdGhzIGl0IGlzIG5vdCB3b3J0aCBpdC4KICAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgocHNtb3VzZV9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChwc21vdXNlX211dGV4KTsKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprcHNtb3VzZWRfd3E7CiAKQEAgLTMwMCw4ICszMDIsMTAgQEAKICAqIENoZWNrIGlmIHRoaXMgaXMgYSBuZXcgZGV2aWNlIGFubm91bmNlbWVudCAoMHhBQSAweDAwKQogICovCiAJaWYgKHVubGlrZWx5KHBzbW91c2UtPnBhY2tldFswXSA9PSBQU01PVVNFX1JFVF9CQVQgJiYgcHNtb3VzZS0+cGt0Y250IDw9IDIpKSB7Ci0JCWlmIChwc21vdXNlLT5wa3RjbnQgPT0gMSkKKwkJaWYgKHBzbW91c2UtPnBrdGNudCA9PSAxKSB7CisJCQlwc21vdXNlLT5sYXN0ID0gamlmZmllczsKIAkJCWdvdG8gb3V0OworCQl9CiAKIAkJaWYgKHBzbW91c2UtPnBhY2tldFsxXSA9PSBQU01PVVNFX1JFVF9JRCkgewogCQkJX19wc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lHTk9SRSk7CkBAIC04NjgsNyArODcyLDcgQEAKIAlpbnQgZmFpbGVkID0gMCwgZW5hYmxlZCA9IDA7CiAJaW50IGk7CiAKLQlkb3duKCZwc21vdXNlX3NlbSk7CisJbXV0ZXhfbG9jaygmcHNtb3VzZV9tdXRleCk7CiAKIAlpZiAocHNtb3VzZS0+c3RhdGUgIT0gUFNNT1VTRV9SRVNZTkNJTkcpCiAJCWdvdG8gb3V0OwpAQCAtOTQ4LDcgKzk1Miw3IEBACiAJaWYgKHBhcmVudCkKIAkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOwogIG91dDoKLQl1cCgmcHNtb3VzZV9zZW0pOworCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiB9CiAKIC8qCkBAIC05NzQsMTQgKzk3OCwxNCBAQAogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZXJpby0+ZGV2LmtvYmosICZwc21vdXNlX2F0dHJpYnV0ZV9ncm91cCk7CiAKLQlkb3duKCZwc21vdXNlX3NlbSk7CisJbXV0ZXhfbG9jaygmcHNtb3VzZV9tdXRleCk7CiAKIAlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0NNRF9NT0RFKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgcmVzeW5jIGluIHByb2dyZXNzICovCi0JdXAoJnBzbW91c2Vfc2VtKTsKKwltdXRleF91bmxvY2soJnBzbW91c2VfbXV0ZXgpOwogCWZsdXNoX3dvcmtxdWV1ZShrcHNtb3VzZWRfd3EpOwotCWRvd24oJnBzbW91c2Vfc2VtKTsKKwltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKIAogCWlmIChzZXJpby0+cGFyZW50ICYmIHNlcmlvLT5pZC50eXBlID09IFNFUklPX1BTX1BTVEhSVSkgewogCQlwYXJlbnQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpby0+cGFyZW50KTsKQEAgLTEwMDQsNyArMTAwOCw3IEBACiAJaWYgKHBhcmVudCkKIAkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOwogCi0JdXAoJnBzbW91c2Vfc2VtKTsKKwltdXRleF91bmxvY2soJnBzbW91c2VfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHBzbW91c2Vfc3dpdGNoX3Byb3RvY29sKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBzdHJ1Y3QgcHNtb3VzZV9wcm90b2NvbCAqcHJvdG8pCkBAIC0xMDc2LDcgKzEwODAsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCWRvd24oJnBzbW91c2Vfc2VtKTsKKwltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKIAogCS8qCiAJICogSWYgdGhpcyBpcyBhIHBhc3MtdGhyb3VnaCBwb3J0IGRlYWN0aXZhdGUgcGFyZW50IHNvIHRoZSBkZXZpY2UKQEAgLTExNDQsNyArMTE0OCw3IEBACiAJaWYgKHBhcmVudCkKIAkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOwogCi0JdXAoJnBzbW91c2Vfc2VtKTsKKwltdXRleF91bmxvY2soJnBzbW91c2VfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTExNjEsNyArMTE2NSw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlkb3duKCZwc21vdXNlX3NlbSk7CisJbXV0ZXhfbG9jaygmcHNtb3VzZV9tdXRleCk7CiAKIAlpZiAoc2VyaW8tPnBhcmVudCAmJiBzZXJpby0+aWQudHlwZSA9PSBTRVJJT19QU19QU1RIUlUpIHsKIAkJcGFyZW50ID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8tPnBhcmVudCk7CkBAIC0xMTk1LDcgKzExOTksNyBAQAogCWlmIChwYXJlbnQpCiAJCXBzbW91c2VfYWN0aXZhdGUocGFyZW50KTsKIAotCXVwKCZwc21vdXNlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwc21vdXNlX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEyNzMsNyArMTI3Nyw3IEBACiAJCWdvdG8gb3V0X3VucGluOwogCX0KIAotCXJldHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSgmcHNtb3VzZV9zZW0pOworCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHNtb3VzZV9tdXRleCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXRfdW5waW47CiAKQEAgLTEyODEsNyArMTI4NSw3IEBACiAKIAlpZiAocHNtb3VzZS0+c3RhdGUgPT0gUFNNT1VTRV9JR05PUkUpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBvdXRfdXA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlpZiAoc2VyaW8tPnBhcmVudCAmJiBzZXJpby0+aWQudHlwZSA9PSBTRVJJT19QU19QU1RIUlUpIHsKQEAgLTEyOTksOCArMTMwMyw4IEBACiAJaWYgKHBhcmVudCkKIAkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOwogCi0gb3V0X3VwOgotCXVwKCZwc21vdXNlX3NlbSk7Cisgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnBzbW91c2VfbXV0ZXgpOwogIG91dF91bnBpbjoKIAlzZXJpb191bnBpbl9kcml2ZXIoc2VyaW8pOwogCXJldHVybiByZXR2YWw7CkBAIC0xMzU3LDExICsxMzYxLDExIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCXVwKCZwc21vdXNlX3NlbSk7CisJCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiAJCXNlcmlvX3VucGluX2RyaXZlcihzZXJpbyk7CiAJCXNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydChzZXJpbyk7CiAJCXNlcmlvX3Bpbl9kcml2ZXJfdW5pbnRlcnJ1cHRpYmxlKHNlcmlvKTsKLQkJZG93bigmcHNtb3VzZV9zZW0pOworCQltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKIAogCQlpZiAoc2VyaW8tPmRydiAhPSAmcHNtb3VzZV9kcnYpIHsKIAkJCWlucHV0X2ZyZWVfZGV2aWNlKG5ld19kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggMjA1MWJlYy4uYWQ1ZDBhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC0yNDcsMTQgKzI0NywxMiBAQAogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKLQlzZXJpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpbyksIEdGUF9LRVJORUwpOworCXNlcmlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZXJpbykgewogCQlwcmludGsoS0VSTl9FUlIgInN5bmFwdGljczogbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgcGFzcy10aHJvdWdoIHBvcnRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtc2V0KHNlcmlvLCAwLCBzaXplb2Yoc3RydWN0IHNlcmlvKSk7Ci0KIAlzZXJpby0+aWQudHlwZSA9IFNFUklPX1BTX1BTVEhSVTsKIAlzdHJsY3B5KHNlcmlvLT5uYW1lLCAiU3luYXB0aWNzIHBhc3MtdGhyb3VnaCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwogCXN0cmxjcHkoc2VyaW8tPnBoeXMsICJzeW5hcHRpY3MtcHQvc2VyaW8wIiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CkBAIC02MDUsMTQgKzYwMywyMSBAQAogCQkuaWRlbnQgPSAiVG9zaGliYSBTYXRlbGxpdGUiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FICwgIlNhdGVsbGl0ZSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTYXRlbGxpdGUiKSwKIAkJfSwKIAl9LAogCXsKIAkJLmlkZW50ID0gIlRvc2hpYmEgRHluYWJvb2siLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FICwgImR5bmFib29rIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgImR5bmFib29rIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJUb3NoaWJhIFBvcnRlZ2UgTTMwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiVE9TSElCQSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQT1JURUdFIE0zMDAiKSwKIAkJfSwKIAl9LAogCXsgfQpAQCAtNjIzLDEwICs2MjgsOSBAQAogewogCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdjsKIAotCXBzbW91c2UtPnByaXZhdGUgPSBwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN5bmFwdGljc19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJcHNtb3VzZS0+cHJpdmF0ZSA9IHByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtMTsKLQltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBzeW5hcHRpY3NfZGF0YSkpOwogCiAJaWYgKHN5bmFwdGljc19xdWVyeV9oYXJkd2FyZShwc21vdXNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBxdWVyeSBTeW5hcHRpY3MgaGFyZHdhcmUuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCA5YWJlZDE4Li5iNjg1YTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC00MTIsOSArNDEyLDggQEAKIAlpZiAoaSA+PSBNT1VTRURFVl9NSU5PUlMgfHwgIW1vdXNlZGV2X3RhYmxlW2ldKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghKGxpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW91c2VkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShsaXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vdXNlZGV2X2xpc3QpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChsaXN0LCAwLCBzaXplb2Yoc3RydWN0IG1vdXNlZGV2X2xpc3QpKTsKIAogCXNwaW5fbG9ja19pbml0KCZsaXN0LT5wYWNrZXRfbG9jayk7CiAJbGlzdC0+cG9zX3ggPSB4cmVzIC8gMjsKQEAgLTYyNiw5ICs2MjUsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoIShtb3VzZWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3VzZWRldiksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShtb3VzZWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3VzZWRldiksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KG1vdXNlZGV2LCAwLCBzaXplb2Yoc3RydWN0IG1vdXNlZGV2KSk7CiAKIAlJTklUX0xJU1RfSEVBRCgmbW91c2VkZXYtPmxpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1vdXNlZGV2LT53YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvcG93ZXIuYyBiL2RyaXZlcnMvaW5wdXQvcG93ZXIuYwppbmRleCBiZmM1YzYzLi41MjZlNjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3Bvd2VyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9wb3dlci5jCkBAIC0xMDMsOSArMTAzLDggQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGU7CiAKLQlpZiAoIShoYW5kbGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5wdXRfaGFuZGxlKSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGhhbmRsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnB1dF9oYW5kbGUpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChoYW5kbGUsIDAsIHNpemVvZihzdHJ1Y3QgaW5wdXRfaGFuZGxlKSk7CiAKIAloYW5kbGUtPmRldiA9IGRldjsKIAloYW5kbGUtPmhhbmRsZXIgPSBoYW5kbGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYwppbmRleCBlYTQ5OTc4Li5iYmJlMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYwpAQCAtODcyLDkgKzg3Miw4IEBACiAJZm9yIChpID0gMDsgaSA8IEhJTF9NTENfREVWTUVNOyBpKyspIHsKIAkJc3RydWN0IHNlcmlvICptbGNfc2VyaW87CiAJCWhpbF9tbGNfY29weV9kaV9zY3JhdGNoKG1sYywgaSk7Ci0JCW1sY19zZXJpbyA9IGttYWxsb2Moc2l6ZW9mKCptbGNfc2VyaW8pLCBHRlBfS0VSTkVMKTsKKwkJbWxjX3NlcmlvID0ga3phbGxvYyhzaXplb2YoKm1sY19zZXJpbyksIEdGUF9LRVJORUwpOwogCQltbGMtPnNlcmlvW2ldID0gbWxjX3NlcmlvOwotCQltZW1zZXQobWxjX3NlcmlvLCAwLCBzaXplb2YoKm1sY19zZXJpbykpOwogCQltbGNfc2VyaW8tPmlkCQkJPSBoaWxfbWxjX3NlcmlvX2lkOwogCQltbGNfc2VyaW8tPndyaXRlCQk9IGhpbF9tbGNfc2VyaW9fd3JpdGU7CiAJCW1sY19zZXJpby0+b3BlbgkJCT0gaGlsX21sY19zZXJpb19vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCmluZGV4IDlhOTIyMTYuLmNjMjE5MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKQEAgLTY3LDE0ICs2NywxNCBAQAogICogT24gc29tZSBwbGF0Zm9ybXMgdG91Y2hpbmcgdGhlIGk4MDQyIGRhdGEgcmVnaXN0ZXIgcmVnaW9uIGNhbiBkbyByZWFsbHkKICAqIGJhZCB0aGluZ3MuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgcmVnaW9uIGlzIGFsd2F5cyByZXNlcnZlZCBvbiBzdWNoIGJveGVzLgogICovCi0jaWYgIWRlZmluZWQoX19zaF9fKSAmJiAhZGVmaW5lZChfX2FscGhhX18pICYmICFkZWZpbmVkKF9fbWlwc19fKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDNjQpCisjaWYgIWRlZmluZWQoX19zaF9fKSAmJiAhZGVmaW5lZChfX2FscGhhX18pICYmICFkZWZpbmVkKF9fbWlwc19fKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQogCWlmICghcmVxdWVzdF9yZWdpb24oSTgwNDJfREFUQV9SRUcsIDE2LCAiaTgwNDIiKSkKIAkJcmV0dXJuIC1FQlVTWTsKICNlbmRpZgogCiAgICAgICAgIGk4MDQyX3Jlc2V0ID0gMTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChJODA0Ml9EQVRBX1JFRykpCiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihJODA0Ml9EQVRBX1JFRywgMTYsICJpODA0MiIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTRjNmYzNS4uZjYwNmU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0xOTIsNyArMTkyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIAogc3RhdGljIGludCBpODA0Ml9wbnBfa2JkX3JlZ2lzdGVyZWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX3BucF9rYmRfZGV2aWNlczsKIHN0YXRpYyBpbnQgaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkOworc3RhdGljIHVuc2lnbmVkIGludCBpODA0Ml9wbnBfYXV4X2RldmljZXM7CiAKIHN0YXRpYyBpbnQgaTgwNDJfcG5wX2NvbW1hbmRfcmVnOwogc3RhdGljIGludCBpODA0Ml9wbnBfZGF0YV9yZWc7CkBAIC0yMTksNiArMjIxLDcgQEAKIAkJc3RybmNhdChpODA0Ml9wbnBfa2JkX25hbWUsIHBucF9kZXZfbmFtZShkZXYpLCBzaXplb2YoaTgwNDJfcG5wX2tiZF9uYW1lKSk7CiAJfQogCisJaTgwNDJfcG5wX2tiZF9kZXZpY2VzKys7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOSw2ICsyNDIsNyBAQAogCQlzdHJuY2F0KGk4MDQyX3BucF9hdXhfbmFtZSwgcG5wX2Rldl9uYW1lKGRldiksIHNpemVvZihpODA0Ml9wbnBfYXV4X25hbWUpKTsKIAl9CiAKKwlpODA0Ml9wbnBfYXV4X2RldmljZXMrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg3LDIxICsyOTEsMjMgQEAKIAogc3RhdGljIGludCBfX2luaXQgaTgwNDJfcG5wX2luaXQodm9pZCkKIHsKLQlpbnQgcmVzdWx0X2tiZCA9IDAsIHJlc3VsdF9hdXggPSAwOwogCWNoYXIga2JkX2lycV9zdHJbNF0gPSB7IDAgfSwgYXV4X2lycV9zdHJbNF0gPSB7IDAgfTsKKwlpbnQgZXJyOwogCiAJaWYgKGk4MDQyX25vcG5wKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImk4MDQyOiBQTlAgZGV0ZWN0aW9uIGRpc2FibGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKChyZXN1bHRfa2JkID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmaTgwNDJfcG5wX2tiZF9kcml2ZXIpKSA+PSAwKQorCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9rYmRfZHJpdmVyKTsKKwlpZiAoIWVycikKIAkJaTgwNDJfcG5wX2tiZF9yZWdpc3RlcmVkID0gMTsKIAotCWlmICgocmVzdWx0X2F1eCA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9hdXhfZHJpdmVyKSkgPj0gMCkKKwllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZpODA0Ml9wbnBfYXV4X2RyaXZlcik7CisJaWYgKCFlcnIpCiAJCWk4MDQyX3BucF9hdXhfcmVnaXN0ZXJlZCA9IDE7CiAKLQlpZiAocmVzdWx0X2tiZCA8PSAwICYmIHJlc3VsdF9hdXggPD0gMCkgeworCWlmICghaTgwNDJfcG5wX2tiZF9kZXZpY2VzICYmICFpODA0Ml9wbnBfYXV4X2RldmljZXMpIHsKIAkJaTgwNDJfcG5wX2V4aXQoKTsKICNpZiBkZWZpbmVkKF9faWE2NF9fKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTMxMSwyNCArMzE3LDI0IEBACiAjZW5kaWYKIAl9CiAKLQlpZiAocmVzdWx0X2tiZCA+IDApCisJaWYgKGk4MDQyX3BucF9rYmRfZGV2aWNlcykKIAkJc25wcmludGYoa2JkX2lycV9zdHIsIHNpemVvZihrYmRfaXJxX3N0ciksCiAJCQkiJWQiLCBpODA0Ml9wbnBfa2JkX2lycSk7Ci0JaWYgKHJlc3VsdF9hdXggPiAwKQorCWlmIChpODA0Ml9wbnBfYXV4X2RldmljZXMpCiAJCXNucHJpbnRmKGF1eF9pcnFfc3RyLCBzaXplb2YoYXV4X2lycV9zdHIpLAogCQkJIiVkIiwgaTgwNDJfcG5wX2F1eF9pcnEpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUE5QOiBQUy8yIENvbnRyb2xsZXIgWyVzJXMlc10gYXQgJSN4LCUjeCBpcnEgJXMlcyVzXG4iLAotCQlpODA0Ml9wbnBfa2JkX25hbWUsIChyZXN1bHRfa2JkID4gMCAmJiByZXN1bHRfYXV4ID4gMCkgPyAiLCIgOiAiIiwKKwkJaTgwNDJfcG5wX2tiZF9uYW1lLCAoaTgwNDJfcG5wX2tiZF9kZXZpY2VzICYmIGk4MDQyX3BucF9hdXhfZGV2aWNlcykgPyAiLCIgOiAiIiwKIAkJaTgwNDJfcG5wX2F1eF9uYW1lLAogCQlpODA0Ml9wbnBfZGF0YV9yZWcsIGk4MDQyX3BucF9jb21tYW5kX3JlZywKLQkJa2JkX2lycV9zdHIsIChyZXN1bHRfa2JkID4gMCAmJiByZXN1bHRfYXV4ID4gMCkgPyAiLCIgOiAiIiwKKwkJa2JkX2lycV9zdHIsIChpODA0Ml9wbnBfa2JkX2RldmljZXMgJiYgaTgwNDJfcG5wX2F1eF9kZXZpY2VzKSA/ICIsIiA6ICIiLAogCQlhdXhfaXJxX3N0cik7CiAKICNpZiBkZWZpbmVkKF9faWE2NF9fKQotCWlmIChyZXN1bHRfa2JkIDw9IDApCisJaWYgKCFpODA0Ml9wbnBfa2JkX2RldmljZXMpCiAJCWk4MDQyX25va2JkID0gMTsKLQlpZiAocmVzdWx0X2F1eCA8PSAwKQorCWlmICghaTgwNDJfcG5wX2F1eF9kZXZpY2VzKQogCQlpODA0Ml9ub2F1eCA9IDE7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKaW5kZXggZDRjOTkwZi4uNzljOTdmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCkBAIC04NCw3ICs4NCw3IEBACiAJCW1heGJ5dGVzID0gc2l6ZW9mKHBzMmRldi0+Y21kYnVmKTsKIAl9CiAKLQlkb3duKCZwczJkZXYtPmNtZF9zZW0pOworCW11dGV4X2xvY2soJnBzMmRldi0+Y21kX211dGV4KTsKIAogCXNlcmlvX3BhdXNlX3J4KHBzMmRldi0+c2VyaW8pOwogCXBzMmRldi0+ZmxhZ3MgPSBQUzJfRkxBR19DTUQ7CkBAIC05NCw3ICs5NCw3IEBACiAJd2FpdF9ldmVudF90aW1lb3V0KHBzMmRldi0+d2FpdCwKIAkJCSAgICEocHMyZGV2LT5mbGFncyAmIFBTMl9GTEFHX0NNRCksCiAJCQkgICBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKTsKLQl1cCgmcHMyZGV2LT5jbWRfc2VtKTsKKwltdXRleF91bmxvY2soJnBzMmRldi0+Y21kX211dGV4KTsKIH0KIAogLyoKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JZG93bigmcHMyZGV2LT5jbWRfc2VtKTsKKwltdXRleF9sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CiAKIAlzZXJpb19wYXVzZV9yeChwczJkZXYtPnNlcmlvKTsKIAlwczJkZXYtPmZsYWdzID0gY29tbWFuZCA9PSBQUzJfQ01EX0dFVElEID8gUFMyX0ZMQUdfV0FJVElEIDogMDsKQEAgLTIyOSw3ICsyMjksNyBAQAogCXBzMmRldi0+ZmxhZ3MgPSAwOwogCXNlcmlvX2NvbnRpbnVlX3J4KHBzMmRldi0+c2VyaW8pOwogCi0JdXAoJnBzMmRldi0+Y21kX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yODEsNyArMjgxLDcgQEAKIAogdm9pZCBwczJfaW5pdChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7Ci0JaW5pdF9NVVRFWCgmcHMyZGV2LT5jbWRfc2VtKTsKKwltdXRleF9pbml0KCZwczJkZXYtPmNtZF9tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHMyZGV2LT53YWl0KTsKIAlwczJkZXYtPnNlcmlvID0gc2VyaW87CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3BhcmtiZC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9wYXJrYmQuYwppbmRleCAxZDE1YzI4Li5hNWMxZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3BhcmtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGFya2JkLmMKQEAgLTE3MSw5ICsxNzEsOCBAQAogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKLQlzZXJpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpbyksIEdGUF9LRVJORUwpOworCXNlcmlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNlcmlvKSB7Ci0JCW1lbXNldChzZXJpbywgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpbykpOwogCQlzZXJpby0+aWQudHlwZSA9IHBhcmtiZF9tb2RlOwogCQlzZXJpby0+d3JpdGUgPSBwYXJrYmRfd3JpdGUsCiAJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJQQVJLQkQgQVQvWFQga2V5Ym9hcmQgYWRhcHRlciIsIHNpemVvZihzZXJpby0+bmFtZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKaW5kZXggYTNiZDExNS4uNTEzZDM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCkBAIC0xMTEsMTEgKzExMSwxMCBAQAogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKLQlzZXJpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpbyksIEdGUF9LRVJORUwpOworCXNlcmlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZXJpbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoc2VyaW8sIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaW8pKTsKIAlzZXJpby0+aWQudHlwZQkJPSBTRVJJT184MDQyOwogCXNlcmlvLT53cml0ZQkJPSBycGNrYmRfd3JpdGU7CiAJc2VyaW8tPm9wZW4JCT0gcnBja2JkX29wZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggMmY3NjgxMy4uNjUyMTAzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBNT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNlcmlvIGFic3RyYWN0aW9uIGNvcmUiKTsKQEAgLTUyLDEwICs1MywxMCBAQAogRVhQT1JUX1NZTUJPTChzZXJpb19yZWNvbm5lY3QpOwogCiAvKgotICogc2VyaW9fc2VtIHByb3RlY3RzIGVudGlyZSBzZXJpbyBzdWJzeXN0ZW0gYW5kIGlzIHRha2VuIGV2ZXJ5IHRpbWUKKyAqIHNlcmlvX211dGV4IHByb3RlY3RzIGVudGlyZSBzZXJpbyBzdWJzeXN0ZW0gYW5kIGlzIHRha2VuIGV2ZXJ5IHRpbWUKICAqIHNlcmlvIHBvcnQgb3IgZHJpdmVyIHJlZ2lzdHJlcmVkIG9yIHVucmVnaXN0ZXJlZC4KICAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgoc2VyaW9fc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoc2VyaW9fbXV0ZXgpOwogCiBzdGF0aWMgTElTVF9IRUFEKHNlcmlvX2xpc3QpOwogCkBAIC03MCw5ICs3MSw5IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWRvd24oJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpby0+ZHJ2X211dGV4KTsKIAlyZXR2YWwgPSBkcnYtPmNvbm5lY3Qoc2VyaW8sIGRydik7Ci0JdXAoJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTgxLDIwICs4MiwyMCBAQAogewogCWludCByZXR2YWwgPSAtMTsKIAotCWRvd24oJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpby0+ZHJ2X211dGV4KTsKIAlpZiAoc2VyaW8tPmRydiAmJiBzZXJpby0+ZHJ2LT5yZWNvbm5lY3QpCiAJCXJldHZhbCA9IHNlcmlvLT5kcnYtPnJlY29ubmVjdChzZXJpbyk7Ci0JdXAoJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgc2VyaW9fZGlzY29ubmVjdF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKLQlkb3duKCZzZXJpby0+ZHJ2X3NlbSk7CisJbXV0ZXhfbG9jaygmc2VyaW8tPmRydl9tdXRleCk7CiAJaWYgKHNlcmlvLT5kcnYpCiAJCXNlcmlvLT5kcnYtPmRpc2Nvbm5lY3Qoc2VyaW8pOwotCXVwKCZzZXJpby0+ZHJ2X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpby0+ZHJ2X211dGV4KTsKIH0KIAogc3RhdGljIGludCBzZXJpb19tYXRjaF9wb3J0KGNvbnN0IHN0cnVjdCBzZXJpb19kZXZpY2VfaWQgKmlkcywgc3RydWN0IHNlcmlvICpzZXJpbykKQEAgLTE5NSw2ICsxOTYsNyBAQAogCWlmICgoZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW9fZXZlbnQpLCBHRlBfQVRPTUlDKSkpIHsKIAkJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNlcmlvOiBDYW4ndCBnZXQgbW9kdWxlIHJlZmVyZW5jZSwgZHJvcHBpbmcgZXZlbnQgJWRcbiIsIGV2ZW50X3R5cGUpOworCQkJa2ZyZWUoZXZlbnQpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMjcyLDcgKzI3NCw3IEBACiAJc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpzZXJpb19kcnY7CiAKLQlkb3duKCZzZXJpb19zZW0pOworCW11dGV4X2xvY2soJnNlcmlvX211dGV4KTsKIAogCS8qCiAJICogTm90ZSB0aGF0IHdlIGhhbmRsZSBvbmx5IG9uZSBldmVudCBoZXJlIHRvIGdpdmUgc3dzdXNwCkBAIC0zMTQsNyArMzE2LDcgQEAKIAkJc2VyaW9fZnJlZV9ldmVudChldmVudCk7CiAJfQogCi0JdXAoJnNlcmlvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19tdXRleCk7CiB9CiAKIC8qCkBAIC00NDksNyArNDUxLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBkb3duX2ludGVycnVwdGlibGUoJnNlcmlvX3NlbSk7CisJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXJpb19tdXRleCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtNDY5LDcgKzQ3MSw3IEBACiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQogCi0JdXAoJnNlcmlvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNTI0LDcgKzUyNiw3IEBACiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIAogCXNwaW5fbG9ja19pbml0KCZzZXJpby0+bG9jayk7Ci0JaW5pdF9NVVRFWCgmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X2luaXQoJnNlcmlvLT5kcnZfbXV0ZXgpOwogCWRldmljZV9pbml0aWFsaXplKCZzZXJpby0+ZGV2KTsKIAlzbnByaW50ZihzZXJpby0+ZGV2LmJ1c19pZCwgc2l6ZW9mKHNlcmlvLT5kZXYuYnVzX2lkKSwKIAkJICJzZXJpbyVsZCIsIChsb25nKWF0b21pY19pbmNfcmV0dXJuKCZzZXJpb19ubykgLSAxKTsKQEAgLTY2MSwxMCArNjYzLDEwIEBACiAgKi8KIHZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7Ci0JZG93bigmc2VyaW9fc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpb19tdXRleCk7CiAJc2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTsKIAlzZXJpb19kZXN0cm95X3BvcnQoc2VyaW8pOwotCXVwKCZzZXJpb19zZW0pOworCW11dGV4X3VubG9jaygmc2VyaW9fbXV0ZXgpOwogfQogCiAvKgpAQCAtNjcyLDE3ICs2NzQsMTcgQEAKICAqLwogdm9pZCBzZXJpb191bnJlZ2lzdGVyX2NoaWxkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKLQlkb3duKCZzZXJpb19zZW0pOworCW11dGV4X2xvY2soJnNlcmlvX211dGV4KTsKIAlpZiAoc2VyaW8tPmNoaWxkKSB7CiAJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpby0+Y2hpbGQpOwogCQlzZXJpb19kZXN0cm95X3BvcnQoc2VyaW8tPmNoaWxkKTsKIAl9Ci0JdXAoJnNlcmlvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19tdXRleCk7CiB9CiAKIC8qCiAgKiBTdWJtaXRzIHJlZ2lzdGVyIHJlcXVlc3QgdG8ga3NlcmlvZCBmb3Igc3Vic2VxdWVudCBleGVjdXRpb24uCi0gKiBDYW4gYmUgdXNlZCB3aGVuIGl0IGlzIG5vdCBvYnZpb3VzIHdoZXRoZXIgdGhlIHNlcmlvX3NlbSBpcworICogQ2FuIGJlIHVzZWQgd2hlbiBpdCBpcyBub3Qgb2J2aW91cyB3aGV0aGVyIHRoZSBzZXJpb19tdXRleCBpcwogICogdGFrZW4gb3Igbm90IGFuZCB3aGVuIGRlbGF5ZWQgZXhlY3V0aW9uIGlzIGZlYXNpYmxlLgogICovCiB2b2lkIF9fc2VyaW9fdW5yZWdpc3Rlcl9wb3J0X2RlbGF5ZWQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpCkBAIC03NjUsNyArNzY3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogCi0JZG93bigmc2VyaW9fc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpb19tdXRleCk7CiAJZHJ2LT5tYW51YWxfYmluZCA9IDE7CS8qIHNvIHNlcmlvX2ZpbmRfZHJpdmVyIGlnbm9yZXMgaXQgKi8KIAogc3RhcnRfb3ZlcjoKQEAgLTc3OSw3ICs3ODEsNyBAQAogCX0KIAogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0JdXAoJnNlcmlvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlvX3NldF9kcnYoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQpAQCAtODU4LDcgKzg2MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIHNlcmlvX2RyaXZlci0+Y29ubmVjdC9kaXNjb25uZWN0IG1ldGhvZHMgdW5kZXIgc2VyaW9fc2VtICovCisvKiBjYWxsZWQgZnJvbSBzZXJpb19kcml2ZXItPmNvbm5lY3QvZGlzY29ubmVjdCBtZXRob2RzIHVuZGVyIHNlcmlvX211dGV4ICovCiBpbnQgc2VyaW9fb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCiB7CiAJc2VyaW9fc2V0X2RydihzZXJpbywgZHJ2KTsKQEAgLTg3MCw3ICs4NzIsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsZWQgZnJvbSBzZXJpb19kcml2ZXItPmNvbm5lY3QvZGlzY29ubmVjdCBtZXRob2RzIHVuZGVyIHNlcmlvX3NlbSAqLworLyogY2FsbGVkIGZyb20gc2VyaW9fZHJpdmVyLT5jb25uZWN0L2Rpc2Nvbm5lY3QgbWV0aG9kcyB1bmRlciBzZXJpb19tdXRleCAqLwogdm9pZCBzZXJpb19jbG9zZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCWlmIChzZXJpby0+Y2xvc2UpCkBAIC05MjMsNSArOTI1LDUgQEAKIAlrdGhyZWFkX3N0b3Aoc2VyaW9fdGFzayk7CiB9CiAKLW1vZHVsZV9pbml0KHNlcmlvX2luaXQpOworc3Vic3lzX2luaXRjYWxsKHNlcmlvX2luaXQpOwogbW9kdWxlX2V4aXQoc2VyaW9fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwppbmRleCA0N2UwOGRlLi41YTI3MDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJIlJhdyBzZXJpbyBkcml2ZXIiCiAKQEAgLTQ2LDcgKzQ3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9OwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChzZXJpb19yYXdfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoc2VyaW9fcmF3X211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQoc2VyaW9fcmF3X2xpc3QpOwogc3RhdGljIHVuc2lnbmVkIGludCBzZXJpb19yYXdfbm87CiAKQEAgLTgxLDcgKzgyLDcgQEAKIAlzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QgKmxpc3Q7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlyZXR2YWwgPSBkb3duX2ludGVycnVwdGlibGUoJnNlcmlvX3Jhd19zZW0pOworCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc2VyaW9fcmF3X211dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC05NSwxMiArOTYsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpb19yYXdfbGlzdCksIEdGUF9LRVJORUwpKSkgeworCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QpLCBHRlBfS0VSTkVMKSkpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QpKTsKIAlsaXN0LT5zZXJpb19yYXcgPSBzZXJpb19yYXc7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbGlzdDsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmbGlzdC0+bm9kZSwgJnNlcmlvX3Jhdy0+bGlzdCk7CiAKIG91dDoKLQl1cCgmc2VyaW9fcmF3X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19yYXdfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAJc3RydWN0IHNlcmlvX3Jhd19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzZXJpb19yYXcgKnNlcmlvX3JhdyA9IGxpc3QtPnNlcmlvX3JhdzsKIAotCWRvd24oJnNlcmlvX3Jhd19zZW0pOworCW11dGV4X2xvY2soJnNlcmlvX3Jhd19tdXRleCk7CiAKIAlzZXJpb19yYXdfZmFzeW5jKC0xLCBmaWxlLCAwKTsKIAlzZXJpb19yYXdfY2xlYW51cChzZXJpb19yYXcpOwogCi0JdXAoJnNlcmlvX3Jhd19zZW0pOworCW11dGV4X3VubG9jaygmc2VyaW9fcmF3X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBACiAJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlyZXR2YWwgPSBkb3duX2ludGVycnVwdGlibGUoJnNlcmlvX3Jhd19zZW0pOworCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc2VyaW9fcmF3X211dGV4KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0yMTksNyArMjE5LDcgQEAKIAl9OwogCiBvdXQ6Ci0JdXAoJnNlcmlvX3Jhd19zZW0pOworCW11dGV4X3VubG9jaygmc2VyaW9fcmF3X211dGV4KTsKIAlyZXR1cm4gd3JpdHRlbjsKIH0KIApAQCAtMjc1LDE0ICsyNzUsMTMgQEAKIAlzdHJ1Y3Qgc2VyaW9fcmF3ICpzZXJpb19yYXc7CiAJaW50IGVycjsKIAotCWlmICghKHNlcmlvX3JhdyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpb19yYXcpLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShzZXJpb19yYXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW9fcmF3KSwgR0ZQX0tFUk5FTCkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2VyaW9fcmF3LmM6IGNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkb3duKCZzZXJpb19yYXdfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJpb19yYXdfbXV0ZXgpOwogCi0JbWVtc2V0KHNlcmlvX3JhdywgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpb19yYXcpKTsKIAlzbnByaW50ZihzZXJpb19yYXctPm5hbWUsIHNpemVvZihzZXJpb19yYXctPm5hbWUpLCAic2VyaW9fcmF3JWQiLCBzZXJpb19yYXdfbm8rKyk7CiAJc2VyaW9fcmF3LT5yZWZjbnQgPSAxOwogCXNlcmlvX3Jhdy0+c2VyaW8gPSBzZXJpbzsKQEAgLTMyNSw3ICszMjQsNyBAQAogCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKIAlrZnJlZShzZXJpb19yYXcpOwogb3V0OgotCXVwKCZzZXJpb19yYXdfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvX3Jhd19tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzUwLDcgKzM0OSw3IEBACiB7CiAJc3RydWN0IHNlcmlvX3JhdyAqc2VyaW9fcmF3OwogCi0JZG93bigmc2VyaW9fcmF3X3NlbSk7CisJbXV0ZXhfbG9jaygmc2VyaW9fcmF3X211dGV4KTsKIAogCXNlcmlvX3JhdyA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIApAQCAtMzYxLDcgKzM2MCw3IEBACiAJaWYgKCFzZXJpb19yYXdfY2xlYW51cChzZXJpb19yYXcpKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNlcmlvX3Jhdy0+d2FpdCk7CiAKLQl1cCgmc2VyaW9fcmF3X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJpb19yYXdfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IHNlcmlvX2RldmljZV9pZCBzZXJpb19yYXdfc2VyaW9faWRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDQ2ZDFmZWMuLjE2MWFmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC0yLDYgKzIsOCBAQAogICogQURTNzg0NiBiYXNlZCB0b3VjaHNjcmVlbiBhbmQgc2Vuc29yIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChjKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBWYXJpb3VzIGNoYW5nZXM6IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KICAqCiAgKiBVc2luZyBjb2RlIGZyb206CiAgKiAgLSBjb3JnaV90cy5jCkBAIC0zNCwxNyArMzYsMjIgQEAKIAogCiAvKgotICogVGhpcyBjb2RlIGhhcyBiZWVuIGxpZ2h0bHkgdGVzdGVkIG9uIGFuIGFkczc4NDYuCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gaGVhdmlseSB0ZXN0ZWQgb24gYSBOb2tpYSA3NzAsIGFuZCBsaWdodGx5CisgKiB0ZXN0ZWQgb24gb3RoZXIgYWRzNzg0NiBkZXZpY2VzIChPU0svTWlzdHJhbCwgTHViYm9jaykuCiAgKiBTdXBwb3J0IGZvciBhZHM3ODQzIGFuZCBhZHM3ODQ1IGhhcyBvbmx5IGJlZW4gc3R1YmJlZCBpbi4KICAqCi0gKiBOb3QgeWV0IGRvbmU6ICBpbnZlc3RpZ2F0ZSB0aGUgdmFsdWVzIHJlcG9ydGVkLiAgQXJlIHgveS9wcmVzc3VyZQotICogZXZlbnQgdmFsdWVzIHNhbmUgZW5vdWdoIGZvciBYMTE/ICBIb3cgYWNjdXJhdGUgYXJlIHRoZSB0ZW1wZXJhdHVyZQotICogYW5kIHZvbHRhZ2UgcmVhZGluZ3M/ICAoU3lzdGVtLXNwZWNpZmljIGNhbGlicmF0aW9uIHNob3VsZCBzdXBwb3J0Ci0gKiBhY2N1cmFjeSBvZiAwLjMgZGVncmVlcyBDOyBvdGhlcndpc2UgaXQncyAyLjAgZGVncmVlcy4pCisgKiBJUlEgaGFuZGxpbmcgbmVlZHMgYSB3b3JrYXJvdW5kIGJlY2F1c2Ugb2YgYSBzaG9ydGNvbWluZyBpbiBoYW5kbGluZworICogZWRnZSB0cmlnZ2VyZWQgSVJRcyBvbiBzb21lIHBsYXRmb3JtcyBsaWtlIHRoZSBPTUFQMS8yLiBUaGVzZQorICogcGxhdGZvcm1zIGRvbid0IGhhbmRsZSB0aGUgQVJNIGxhenkgSVJRIGRpc2FibGluZyBwcm9wZXJseSwgdGh1cyB3ZQorICogaGF2ZSB0byBtYWludGFpbiBvdXIgb3duIFNXIElSUSBkaXNhYmxlZCBzdGF0dXMuIFRoaXMgc2hvdWxkIGJlCisgKiByZW1vdmVkIGFzIHNvb24gYXMgdGhlIGFmZmVjdGVkIHBsYXRmb3JtJ3MgSVJRIGhhbmRsaW5nIGlzIGZpeGVkLgogICoKICAqIGFwcCBub3RlIHNiYWEwMzYgdGFsa3MgaW4gbW9yZSBkZXRhaWwgYWJvdXQgYWNjdXJhdGUgc2FtcGxpbmcuLi4KICAqIHRoYXQgb3VnaHQgdG8gaGVscCBpbiBzaXR1YXRpb25zIGxpa2UgTENEcyBpbmR1Y2luZyBub2lzZSAod2hpY2gKICAqIGNhbiBhbHNvIGJlIGhlbHBlZCBieSB1c2luZyBzeW5jaCBzaWduYWxzKSBhbmQgbW9yZSBnZW5lcmFsbHkuCisgKiBUaGlzIGRyaXZlciB0cmllcyB0byB1dGlsaXplIHRoZSBtZWFzdXJlcyBkZXNjcmliZWQgaW4gdGhlIGFwcAorICogbm90ZS4gVGhlIHN0cmVuZ3RoIG9mIGZpbHRlcmluZyBjYW4gYmUgc2V0IGluIHRoZSBib2FyZC0qIHNwZWNpZmljCisgKiBmaWxlcy4KICAqLwogCiAjZGVmaW5lCVRTX1BPTExfUEVSSU9ECW1zZWNzX3RvX2ppZmZpZXMoMTApCkBAIC02MSw2ICs2OCw3IEBACiAJX19iZTE2IHg7CiAJX19iZTE2IHk7CiAJX19iZTE2IHoxLCB6MjsKKwlpbnQgICAgaWdub3JlOwogfTsKIAogc3RydWN0IGFkczc4NDYgewpAQCAtNzEsMTIgKzc5LDIzIEBACiAJdTE2CQkJbW9kZWw7CiAJdTE2CQkJdnJlZl9kZWxheV91c2VjczsKIAl1MTYJCQl4X3BsYXRlX29obXM7CisJdTE2CQkJcHJlc3N1cmVfbWF4OwogCi0JdTgJCQlyZWFkX3gsIHJlYWRfeSwgcmVhZF96MSwgcmVhZF96MjsKKwl1OAkJCXJlYWRfeCwgcmVhZF95LCByZWFkX3oxLCByZWFkX3oyLCBwd3Jkb3duOworCXUxNgkJCWR1bW15OwkJLyogZm9yIHRoZSBwd3Jkb3duIHJlYWQgKi8KIAlzdHJ1Y3QgdHNfZXZlbnQJCXRjOwogCi0Jc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzhdOwotCXN0cnVjdCBzcGlfbWVzc2FnZQltc2c7CisJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzEwXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnWzVdOworCXN0cnVjdCBzcGlfbWVzc2FnZQkqbGFzdF9tc2c7CisJaW50CQkJbXNnX2lkeDsKKwlpbnQJCQlyZWFkX2NudDsKKwlpbnQJCQlyZWFkX3JlcDsKKwlpbnQJCQlsYXN0X3JlYWQ7CisKKwl1MTYJCQlkZWJvdW5jZV9tYXg7CisJdTE2CQkJZGVib3VuY2VfdG9sOworCXUxNgkJCWRlYm91bmNlX3JlcDsKIAogCXNwaW5sb2NrX3QJCWxvY2s7CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CQkvKiBQOiBsb2NrICovCkBAIC04NCw2ICsxMDMsOSBAQAogCXVuc2lnbmVkCQlwZW5kaW5nOjE7CS8qIFA6IGxvY2sgKi8KIC8vIEZJWE1FIHJlbW92ZSAiaXJxX2Rpc2FibGVkIgogCXVuc2lnbmVkCQlpcnFfZGlzYWJsZWQ6MTsJLyogUDogbG9jayAqLworCXVuc2lnbmVkCQlkaXNhYmxlZDoxOworCisJaW50CQkJKCpnZXRfcGVuZG93bl9zdGF0ZSkodm9pZCk7CiB9OwogCiAvKiBsZWF2ZSBjaGlwIHNlbGVjdGVkIHdoZW4gd2UncmUgZG9uZSwgZm9yIHF1aWNrZXIgcmUtc2VsZWN0PyAqLwpAQCAtMTI1LDcgKzE0Nyw5IEBACiAjZGVmaW5lCVJFQURfWQkoUkVBRF8xMkJJVF9ERlIoeSkgIHwgQURTX1BEMTBfQURDX09OKQogI2RlZmluZQlSRUFEX1oxCShSRUFEXzEyQklUX0RGUih6MSkgfCBBRFNfUEQxMF9BRENfT04pCiAjZGVmaW5lCVJFQURfWjIJKFJFQURfMTJCSVRfREZSKHoyKSB8IEFEU19QRDEwX0FEQ19PTikKLSNkZWZpbmUJUkVBRF9YCShSRUFEXzEyQklUX0RGUih4KSAgfCBBRFNfUEQxMF9QRE9XTikJLyogTEFTVCAqLworCisjZGVmaW5lCVJFQURfWAkoUkVBRF8xMkJJVF9ERlIoeCkgIHwgQURTX1BEMTBfQURDX09OKQorI2RlZmluZQlQV1JET1dOCShSRUFEXzEyQklUX0RGUih5KSAgfCBBRFNfUEQxMF9QRE9XTikJLyogTEFTVCAqLwogCiAvKiBzaW5nbGUtZW5kZWQgc2FtcGxlcyBuZWVkIHRvIGZpcnN0IHBvd2VyIHVwIHJlZmVyZW5jZSB2b2x0YWdlOwogICogd2UgbGVhdmUgYm90aCBBREMgYW5kIFZSRUYgcG93ZXJlZApAQCAtMTUyLDYgKzE3NiwxNSBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlcls2XTsKIH07CiAKK3N0YXRpYyB2b2lkIGFkczc4NDZfZW5hYmxlKHN0cnVjdCBhZHM3ODQ2ICp0cyk7CitzdGF0aWMgdm9pZCBhZHM3ODQ2X2Rpc2FibGUoc3RydWN0IGFkczc4NDYgKnRzKTsKKworc3RhdGljIGludCBkZXZpY2Vfc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRzNzg0NiAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9PTiB8fCB0cy0+ZGlzYWJsZWQ7Cit9CisKIHN0YXRpYyBpbnQgYWRzNzg0Nl9yZWFkMTJfc2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY29tbWFuZCkKIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwpAQCAtMTY0LDcgKzE5Nyw3IEBACiAJaWYgKCFyZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JSU5JVF9MSVNUX0hFQUQoJnJlcS0+bXNnLnRyYW5zZmVycyk7CisJc3BpX21lc3NhZ2VfaW5pdCgmcmVxLT5tc2cpOwogCiAJLyogYWN0aXZhdGUgcmVmZXJlbmNlLCBzbyBpdCBoYXMgdGltZSB0byBzZXR0bGU7ICovCiAJcmVxLT5yZWZfb24gPSBSRUZfT047CkBAIC0yMDQsMTYgKzIzNywyMSBAQAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZyZXEtPnhmZXJbaV0sICZyZXEtPm1zZyk7CiAKKwl0cy0+aXJxX2Rpc2FibGVkID0gMTsKIAlkaXNhYmxlX2lycShzcGktPmlycSk7CiAJc3RhdHVzID0gc3BpX3N5bmMoc3BpLCAmcmVxLT5tc2cpOworCXRzLT5pcnFfZGlzYWJsZWQgPSAwOwogCWVuYWJsZV9pcnEoc3BpLT5pcnEpOwogCiAJaWYgKHJlcS0+bXNnLnN0YXR1cykKIAkJc3RhdHVzID0gcmVxLT5tc2cuc3RhdHVzOwotCXNhbXBsZSA9IGJlMTZfdG9fY3B1KHJlcS0+c2FtcGxlKTsKLQlzYW1wbGUgPSBzYW1wbGUgPj4gNDsKLQlrZnJlZShyZXEpOwogCisJLyogb24td2lyZSBpcyBhIG11c3QtaWdub3JlIGJpdCwgYSBCRTEyIHZhbHVlLCB0aGVuIHBhZGRpbmcgKi8KKwlzYW1wbGUgPSBiZTE2X3RvX2NwdShyZXEtPnNhbXBsZSk7CisJc2FtcGxlID0gc2FtcGxlID4+IDM7CisJc2FtcGxlICY9IDB4MGZmZjsKKworCWtmcmVlKHJlcSk7CiAJcmV0dXJuIHN0YXR1cyA/IHN0YXR1cyA6IHNhbXBsZTsKIH0KIApAQCAtMjMzLDYgKzI3MSw1MiBAQAogU0hPVyh2YXV4KQogU0hPVyh2YmF0dCkKIAorc3RhdGljIGludCBpc19wZW5fZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkczc4NDYJCSp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHRzLT5wZW5kb3duOworfQorCitzdGF0aWMgc3NpemVfdCBhZHM3ODQ2X3Blbl9kb3duX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgaXNfcGVuX2Rvd24oZGV2KSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwZW5fZG93biwgU19JUlVHTywgYWRzNzg0Nl9wZW5fZG93bl9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgYWRzNzg0Nl9kaXNhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWRzNzg0NgkqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB0cy0+ZGlzYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHM3ODQ2X2Rpc2FibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWRzNzg0NiAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICplbmRwOworCWludCBpOworCisJaSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDEwKTsKKwlzcGluX2xvY2tfaXJxKCZ0cy0+bG9jayk7CisKKwlpZiAoaSkKKwkJYWRzNzg0Nl9kaXNhYmxlKHRzKTsKKwllbHNlCisJCWFkczc4NDZfZW5hYmxlKHRzKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdHMtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZGlzYWJsZSwgMDY2NCwgYWRzNzg0Nl9kaXNhYmxlX3Nob3csIGFkczc4NDZfZGlzYWJsZV9zdG9yZSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgpAQCAtMjUyLDE5ICszMzYsMTkgQEAKIAl1MTYJCQl4LCB5LCB6MSwgejI7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKLQkvKiBhZGp1c3Q6ICAxMiBiaXQgc2FtcGxlcyAobGVmdCBhbGlnbmVkKSwgYnVpbHQgZnJvbQotCSAqIHR3byA4IGJpdCB2YWx1ZXMgd3JpdGVuIG1zYi1maXJzdC4KKwkvKiBhZGp1c3Q6ICBvbi13aXJlIGlzIGEgbXVzdC1pZ25vcmUgYml0LCBhIEJFMTIgdmFsdWUsIHRoZW4gcGFkZGluZzsKKwkgKiBidWlsdCBmcm9tIHR3byA4IGJpdCB2YWx1ZXMgd3JpdHRlbiBtc2ItZmlyc3QuCiAJICovCi0JeCA9IGJlMTZfdG9fY3B1KHRzLT50Yy54KSA+PiA0OwotCXkgPSBiZTE2X3RvX2NwdSh0cy0+dGMueSkgPj4gNDsKLQl6MSA9IGJlMTZfdG9fY3B1KHRzLT50Yy56MSkgPj4gNDsKLQl6MiA9IGJlMTZfdG9fY3B1KHRzLT50Yy56MikgPj4gNDsKKwl4ID0gKGJlMTZfdG9fY3B1KHRzLT50Yy54KSA+PiAzKSAmIDB4MGZmZjsKKwl5ID0gKGJlMTZfdG9fY3B1KHRzLT50Yy55KSA+PiAzKSAmIDB4MGZmZjsKKwl6MSA9IChiZTE2X3RvX2NwdSh0cy0+dGMuejEpID4+IDMpICYgMHgwZmZmOworCXoyID0gKGJlMTZfdG9fY3B1KHRzLT50Yy56MikgPj4gMykgJiAweDBmZmY7CiAKIAkvKiByYW5nZSBmaWx0ZXJpbmcgKi8KIAlpZiAoeCA9PSBNQVhfMTJCSVQpCiAJCXggPSAwOwogCi0JaWYgKHggJiYgejEgJiYgdHMtPnNwaS0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OKSB7CisJaWYgKGxpa2VseSh4ICYmIHoxICYmICFkZXZpY2Vfc3VzcGVuZGVkKCZ0cy0+c3BpLT5kZXYpKSkgewogCQkvKiBjb21wdXRlIHRvdWNoIHByZXNzdXJlIHJlc2lzdGFuY2UgdXNpbmcgZXF1YXRpb24gIzIgKi8KIAkJUnQgPSB6MjsKIAkJUnQgLT0gejE7CkBAIC0yNzUsNiArMzU5LDE0IEBACiAJfSBlbHNlCiAJCVJ0ID0gMDsKIAorCS8qIFNhbXBsZSBmb3VuZCBpbmNvbnNpc3RlbnQgYnkgZGVib3VuY2luZyBvciBwcmVzc3VyZSBpcyBiZXlvbmQKKwkqIHRoZSBtYXhpbXVtLiBEb24ndCByZXBvcnQgaXQgdG8gdXNlciBzcGFjZSwgcmVwZWF0IGF0IGxlYXN0CisJKiBvbmNlIG1vcmUgdGhlIG1lYXN1cmVtZW50ICovCisJaWYgKHRzLT50Yy5pZ25vcmUgfHwgUnQgPiB0cy0+cHJlc3N1cmVfbWF4KSB7CisJCW1vZF90aW1lcigmdHMtPnRpbWVyLCBqaWZmaWVzICsgVFNfUE9MTF9QRVJJT0QpOworCQlyZXR1cm47CisJfQorCiAJLyogTk9URTogICJwZW5kb3duIiBpcyBpbmZlcnJlZCBmcm9tIHByZXNzdXJlOyB3ZSBkb24ndCByZWx5IG9uCiAJICogYmVpbmcgYWJsZSB0byBjaGVjayBuUEVOSVJRIHN0YXR1cywgb3IgImZyaWVuZGx5IiB0cmlnZ2VyIG1vZGVzCiAJICogKGJvdGgtZWRnZXMgaXMgbXVjaCBiZXR0ZXIgdGhhbiBqdXN0LWZhbGxpbmcgb3IgbG93LWxldmVsKS4KQEAgLTI5NiwxMSArMzg4LDEzIEBACiAJaWYgKFJ0KSB7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWCwgeCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWSwgeSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIFJ0KTsKIAkJc3luYyA9IDE7CiAJfQotCWlmIChzeW5jKQorCisJaWYgKHN5bmMpIHsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgUnQpOwogCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7CisJfQogCiAjaWZkZWYJVkVSQk9TRQogCWlmIChSdCB8fCB0cy0+cGVuZG93bikKQEAgLTMwOCw4MCArNDAyLDEzNyBAQAogCQkJeCwgeSwgUnQsIFJ0ID8gIiIgOiAiIFVQIik7CiAjZW5kaWYKIAotCS8qIGRvbid0IHJldHJpZ2dlciB3aGlsZSB3ZSdyZSBzdXNwZW5kZWQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHMtPmxvY2ssIGZsYWdzKTsKIAogCXRzLT5wZW5kb3duID0gKFJ0ICE9IDApOwotCXRzLT5wZW5kaW5nID0gMDsKLQotCWlmICh0cy0+c3BpLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pIHsKLQkJaWYgKHRzLT5wZW5kb3duKQotCQkJbW9kX3RpbWVyKCZ0cy0+dGltZXIsIGppZmZpZXMgKyBUU19QT0xMX1BFUklPRCk7Ci0JCWVsc2UgaWYgKHRzLT5pcnFfZGlzYWJsZWQpIHsKLQkJCXRzLT5pcnFfZGlzYWJsZWQgPSAwOwotCQkJZW5hYmxlX2lycSh0cy0+c3BpLT5pcnEpOwotCQl9Ci0JfQorCW1vZF90aW1lcigmdHMtPnRpbWVyLCBqaWZmaWVzICsgVFNfUE9MTF9QRVJJT0QpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHMtPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgYWRzNzg0Nl9kZWJvdW5jZSh2b2lkICphZHMpCit7CisJc3RydWN0IGFkczc4NDYJCSp0cyA9IGFkczsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJKm07CisJc3RydWN0IHNwaV90cmFuc2ZlcgkqdDsKKwlpbnQJCQl2YWw7CisJaW50CQkJc3RhdHVzOworCisJbSA9ICZ0cy0+bXNnW3RzLT5tc2dfaWR4XTsKKwl0ID0gbGlzdF9lbnRyeShtLT50cmFuc2ZlcnMucHJldiwgc3RydWN0IHNwaV90cmFuc2ZlciwgdHJhbnNmZXJfbGlzdCk7CisJdmFsID0gKGJlMTZfdG9fY3B1KCooX19iZTE2ICopdC0+cnhfYnVmKSA+PiAzKSAmIDB4MGZmZjsKKwlpZiAoIXRzLT5yZWFkX2NudCB8fCAoYWJzKHRzLT5sYXN0X3JlYWQgLSB2YWwpID4gdHMtPmRlYm91bmNlX3RvbCkpIHsKKwkJLyogUmVwZWF0IGl0LCBpZiB0aGlzIHdhcyB0aGUgZmlyc3QgcmVhZCBvciB0aGUgcmVhZAorCQkgKiB3YXNuJ3QgY29uc2lzdGVudCBlbm91Z2guICovCisJCWlmICh0cy0+cmVhZF9jbnQgPCB0cy0+ZGVib3VuY2VfbWF4KSB7CisJCQl0cy0+bGFzdF9yZWFkID0gdmFsOworCQkJdHMtPnJlYWRfY250Kys7CisJCX0gZWxzZSB7CisJCQkvKiBNYXhpbXVtIG51bWJlciBvZiBkZWJvdW5jaW5nIHJlYWNoZWQgYW5kIHN0aWxsCisJCQkgKiBub3QgZW5vdWdoIG51bWJlciBvZiBjb25zaXN0ZW50IHJlYWRpbmdzLiBBYm9ydAorCQkJICogdGhlIHdob2xlIHNhbXBsZSwgcmVwZWF0IGl0IGluIHRoZSBuZXh0IHNhbXBsaW5nCisJCQkgKiBwZXJpb2QuCisJCQkgKi8KKwkJCXRzLT50Yy5pZ25vcmUgPSAxOworCQkJdHMtPnJlYWRfY250ID0gMDsKKwkJCS8qIExhc3QgbWVzc2FnZSB3aWxsIGNvbnRhaW4gYWRzNzg0Nl9yeCgpIGFzIHRoZQorCQkJICogY29tcGxldGlvbiBmdW5jdGlvbi4KKwkJCSAqLworCQkJbSA9IHRzLT5sYXN0X21zZzsKKwkJfQorCQkvKiBTdGFydCBvdmVyIGNvbGxlY3RpbmcgY29uc2lzdGVudCByZWFkaW5ncy4gKi8KKwkJdHMtPnJlYWRfcmVwID0gMDsKKwl9IGVsc2UgeworCQlpZiAoKyt0cy0+cmVhZF9yZXAgPiB0cy0+ZGVib3VuY2VfcmVwKSB7CisJCQkvKiBHb3QgYSBnb29kIHJlYWRpbmcgZm9yIHRoaXMgY29vcmRpbmF0ZSwKKwkJCSAqIGdvIGZvciB0aGUgbmV4dCBvbmUuICovCisJCQl0cy0+dGMuaWdub3JlID0gMDsKKwkJCXRzLT5tc2dfaWR4Kys7CisJCQl0cy0+cmVhZF9jbnQgPSAwOworCQkJdHMtPnJlYWRfcmVwID0gMDsKKwkJCW0rKzsKKwkJfSBlbHNlCisJCQkvKiBSZWFkIG1vcmUgdmFsdWVzIHRoYXQgYXJlIGNvbnNpc3RlbnQuICovCisJCQl0cy0+cmVhZF9jbnQrKzsKKwl9CisJc3RhdHVzID0gc3BpX2FzeW5jKHRzLT5zcGksIG0pOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoJnRzLT5zcGktPmRldiwgInNwaV9hc3luYyAtLT4gJWRcbiIsCisJCQkJc3RhdHVzKTsKK30KKwogc3RhdGljIHZvaWQgYWRzNzg0Nl90aW1lcih1bnNpZ25lZCBsb25nIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgYWRzNzg0NgkqdHMgPSAodm9pZCAqKWhhbmRsZTsKIAlpbnQJCXN0YXR1cyA9IDA7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cy0+bG9jaywgZmxhZ3MpOwotCWlmICghdHMtPnBlbmRpbmcpIHsKLQkJdHMtPnBlbmRpbmcgPSAxOwotCQlpZiAoIXRzLT5pcnFfZGlzYWJsZWQpIHsKLQkJCXRzLT5pcnFfZGlzYWJsZWQgPSAxOwotCQkJZGlzYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwlzcGluX2xvY2tfaXJxKCZ0cy0+bG9jayk7CisKKwlpZiAodW5saWtlbHkodHMtPm1zZ19pZHggJiYgIXRzLT5wZW5kb3duKSkgeworCQkvKiBtZWFzdXJlbWVudCBjeWNsZSBlbmRlZCAqLworCQlpZiAoIWRldmljZV9zdXNwZW5kZWQoJnRzLT5zcGktPmRldikpIHsKKwkJCXRzLT5pcnFfZGlzYWJsZWQgPSAwOworCQkJZW5hYmxlX2lycSh0cy0+c3BpLT5pcnEpOwogCQl9Ci0JCXN0YXR1cyA9IHNwaV9hc3luYyh0cy0+c3BpLCAmdHMtPm1zZyk7CisJCXRzLT5wZW5kaW5nID0gMDsKKwkJdHMtPm1zZ19pZHggPSAwOworCX0gZWxzZSB7CisJCS8qIHBlbiBpcyBzdGlsbCBkb3duLCBjb250aW51ZSB3aXRoIHRoZSBtZWFzdXJlbWVudCAqLworCQl0cy0+bXNnX2lkeCA9IDA7CisJCXN0YXR1cyA9IHNwaV9hc3luYyh0cy0+c3BpLCAmdHMtPm1zZ1swXSk7CiAJCWlmIChzdGF0dXMpCi0JCQlkZXZfZXJyKCZ0cy0+c3BpLT5kZXYsICJzcGlfYXN5bmMgLS0+ICVkXG4iLAotCQkJCQlzdGF0dXMpOworCQkJZGV2X2VycigmdHMtPnNwaS0+ZGV2LCAic3BpX2FzeW5jIC0tPiAlZFxuIiwgc3RhdHVzKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHMtPmxvY2ssIGZsYWdzKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdHMtPmxvY2spOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWRzNzg0Nl9pcnEoaW50IGlycSwgdm9pZCAqaGFuZGxlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlhZHM3ODQ2X3RpbWVyKCh1bnNpZ25lZCBsb25nKSBoYW5kbGUpOworCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGhhbmRsZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRzLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpa2VseSh0cy0+Z2V0X3BlbmRvd25fc3RhdGUoKSkpIHsKKwkJaWYgKCF0cy0+aXJxX2Rpc2FibGVkKSB7CisJCQkvKiBUaGUgQVJNIGRvX3NpbXBsZV9JUlEoKSBkaXNwYXRjaGVyIGRvZXNuJ3QgYWN0CisJCQkgKiBsaWtlIHRoZSBvdGhlciBkaXNwYXRjaGVyczogIGl0IHdpbGwgcmVwb3J0IElSUXMKKwkJCSAqIGV2ZW4gYWZ0ZXIgdGhleSd2ZSBiZWVuIGRpc2FibGVkLiAgV2Ugd29yayBhcm91bmQKKwkJCSAqIHRoYXQgaGVyZS4gIChUaGUgImdlbmVyaWMgaXJxIiBmcmFtZXdvcmsgbWF5IGhlbHAuLi4pCisJCQkgKi8KKwkJCXRzLT5pcnFfZGlzYWJsZWQgPSAxOworCQkJZGlzYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwkJCXRzLT5wZW5kaW5nID0gMTsKKwkJCW1vZF90aW1lcigmdHMtPnRpbWVyLCBqaWZmaWVzKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludAotYWRzNzg0Nl9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0cy0+bG9jayBoZWxkICovCitzdGF0aWMgdm9pZCBhZHM3ODQ2X2Rpc2FibGUoc3RydWN0IGFkczc4NDYgKnRzKQogewotCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaWYgKHRzLT5kaXNhYmxlZCkKKwkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzLT5sb2NrLCBmbGFncyk7Ci0KLQlzcGktPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc3NhZ2U7CisJdHMtPmRpc2FibGVkID0gMTsKIAogCS8qIGFyZSB3ZSB3YWl0aW5nIGZvciBJUlEsIG9yIHBvbGxpbmc/ICovCi0JaWYgKCF0cy0+cGVuZG93bikgewotCQlpZiAoIXRzLT5pcnFfZGlzYWJsZWQpIHsKLQkJCXRzLT5pcnFfZGlzYWJsZWQgPSAxOwotCQkJZGlzYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKLQkJfQorCWlmICghdHMtPnBlbmRpbmcpIHsKKwkJdHMtPmlycV9kaXNhYmxlZCA9IDE7CisJCWRpc2FibGVfaXJxKHRzLT5zcGktPmlycSk7CiAJfSBlbHNlIHsKLQkJLyogcG9sbGluZzsgZm9yY2UgYSBmaW5hbCBTUEkgY29tcGxldGlvbjsKLQkJICogdGhhdCB3aWxsIGNsZWFuIHRoaW5ncyB1cCBuZWF0bHkKKwkJLyogdGhlIHRpbWVyIHdpbGwgcnVuIGF0IGxlYXN0IG9uY2UgbW9yZSwgYW5kCisJCSAqIGxlYXZlIGV2ZXJ5dGhpbmcgaW4gYSBjbGVhbiBzdGF0ZSwgSVJRIGRpc2FibGVkCiAJCSAqLwotCQlpZiAoIXRzLT5wZW5kaW5nKQotCQkJbW9kX3RpbWVyKCZ0cy0+dGltZXIsIGppZmZpZXMpOwotCi0JCXdoaWxlICh0cy0+cGVuZG93biB8fCB0cy0+cGVuZGluZykgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHMtPmxvY2ssIGZsYWdzKTsKLQkJCXVkZWxheSgxMCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHMtPmxvY2ssIGZsYWdzKTsKKwkJd2hpbGUgKHRzLT5wZW5kaW5nKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnRzLT5sb2NrKTsKKwkJCW1zbGVlcCgxKTsKKwkJCXNwaW5fbG9ja19pcnEoJnRzLT5sb2NrKTsKIAkJfQogCX0KIApAQCAtMzg5LDE3ICs1NDAsNDUgQEAKIAkgKiBsZWF2ZSBpdCB0aGF0IHdheSBhZnRlciBldmVyeSByZXF1ZXN0CiAJICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRzLT5sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIGFkczc4NDZfZW5hYmxlKHN0cnVjdCBhZHM3ODQ2ICp0cykKK3sKKwlpZiAoIXRzLT5kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJdHMtPmRpc2FibGVkID0gMDsKKwl0cy0+aXJxX2Rpc2FibGVkID0gMDsKKwllbmFibGVfaXJxKHRzLT5zcGktPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJc3Bpbl9sb2NrX2lycSgmdHMtPmxvY2spOworCisJc3BpLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtZXNzYWdlOworCWFkczc4NDZfZGlzYWJsZSh0cyk7CisKKwlzcGluX3VubG9ja19pcnEoJnRzLT5sb2NrKTsKKwogCXJldHVybiAwOworCiB9CiAKIHN0YXRpYyBpbnQgYWRzNzg0Nl9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWRzNzg0NiAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAotCXRzLT5pcnFfZGlzYWJsZWQgPSAwOwotCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwlzcGluX2xvY2tfaXJxKCZ0cy0+bG9jayk7CisKIAlzcGktPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJYWRzNzg0Nl9lbmFibGUodHMpOworCisJc3Bpbl91bmxvY2tfaXJxKCZ0cy0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA4LDYgKzU4Nyw3IEBACiAJc3RydWN0IGFkczc4NDYJCQkqdHM7CiAJc3RydWN0IGlucHV0X2RldgkJKmlucHV0X2RldjsKIAlzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNwaV9tZXNzYWdlCQkqbTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCQkqeDsKIAlpbnQJCQkJZXJyOwogCkBAIC00MjgsMTEgKzYwOCwyMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBXZSdkIHNldCB0aGUgd29yZHNpemUgdG8gMTIgYml0cyAuLi4gZXhjZXB0IHRoYXQgc29tZSBjb250cm9sbGVycwotCSAqIHdpbGwgdGhlbiB0cmVhdCB0aGUgOCBiaXQgY29tbWFuZCB3b3JkcyBhcyAxMiBiaXRzIChhbmQgZHJvcCB0aGUKLQkgKiBmb3VyIE1TQnMgb2YgdGhlIDEyIGJpdCByZXN1bHQpLiAgUmVzdWx0OiBpbnB1dHMgbXVzdCBiZSBzaGlmdGVkCi0JICogdG8gZGlzY2FyZCB0aGUgZm91ciBnYXJiYWdlIExTQnMuCisJLyogUkVWSVNJVCB3aGVuIHRoZSBpcnEgY2FuIGJlIHRyaWdnZXJlZCBhY3RpdmUtbG93LCBvciBpZiBmb3Igc29tZQorCSAqIHJlYXNvbiB0aGUgdG91Y2hzY3JlZW4gaXNuJ3QgaG9va2VkIHVwLCB3ZSBkb24ndCBuZWVkIHRvIGFjY2VzcworCSAqIHRoZSBwZW5kb3duIHN0YXRlLgogCSAqLworCWlmIChwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUgPT0gTlVMTCkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIm5vIGdldF9wZW5kb3duX3N0YXRlIGZ1bmN0aW9uP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlJ2Qgc2V0IFRYIHdvcmRzaXplIDggYml0cyBhbmQgUlggd29yZHNpemUgdG8gMTMgYml0cyAuLi4gZXhjZXB0CisJICogdGhhdCBldmVuIGlmIHRoZSBoYXJkd2FyZSBjYW4gZG8gdGhhdCwgdGhlIFNQSSBjb250cm9sbGVyIGRyaXZlcgorCSAqIG1heSBub3QuICBTbyB3ZSBzdGljayB0byB2ZXJ5LXBvcnRhYmxlIDggYml0IHdvcmRzLCBib3RoIFJYIGFuZCBUWC4KKwkgKi8KKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwogCiAJdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWRzNzg0NiksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtNDUxLDkgKzY0MCwyMSBAQAogCXRzLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHRzOwogCXRzLT50aW1lci5mdW5jdGlvbiA9IGFkczc4NDZfdGltZXI7CiAKKwlzcGluX2xvY2tfaW5pdCgmdHMtPmxvY2spOworCiAJdHMtPm1vZGVsID0gcGRhdGEtPm1vZGVsID8gOiA3ODQ2OwogCXRzLT52cmVmX2RlbGF5X3VzZWNzID0gcGRhdGEtPnZyZWZfZGVsYXlfdXNlY3MgPyA6IDEwMDsKIAl0cy0+eF9wbGF0ZV9vaG1zID0gcGRhdGEtPnhfcGxhdGVfb2htcyA/IDogNDAwOworCXRzLT5wcmVzc3VyZV9tYXggPSBwZGF0YS0+cHJlc3N1cmVfbWF4ID8gOiB+MDsKKwlpZiAocGRhdGEtPmRlYm91bmNlX21heCkgeworCQl0cy0+ZGVib3VuY2VfbWF4ID0gcGRhdGEtPmRlYm91bmNlX21heDsKKwkJdHMtPmRlYm91bmNlX3RvbCA9IHBkYXRhLT5kZWJvdW5jZV90b2w7CisJCXRzLT5kZWJvdW5jZV9yZXAgPSBwZGF0YS0+ZGVib3VuY2VfcmVwOworCQlpZiAodHMtPmRlYm91bmNlX3JlcCA+IHRzLT5kZWJvdW5jZV9tYXggKyAxKQorCQkJdHMtPmRlYm91bmNlX3JlcCA9IHRzLT5kZWJvdW5jZV9tYXggLSAxOworCX0gZWxzZQorCQl0cy0+ZGVib3VuY2VfdG9sID0gfjA7CisJdHMtPmdldF9wZW5kb3duX3N0YXRlID0gcGRhdGEtPmdldF9wZW5kb3duX3N0YXRlOwogCiAJc25wcmludGYodHMtPnBoeXMsIHNpemVvZih0cy0+cGh5cyksICIlcy9pbnB1dDAiLCBzcGktPmRldi5idXNfaWQpOwogCkBAIC00NzcsNjQgKzY3OCwxMDQgQEAKIAkvKiBzZXQgdXAgdGhlIHRyYW5zZmVycyB0byByZWFkIHRvdWNoc2NyZWVuIHN0YXRlOyB0aGlzIGFzc3VtZXMgd2UKIAkgKiB1c2UgZm9ybXVsYSAjMiBmb3IgcHJlc3N1cmUsIG5vdCAjMy4KIAkgKi8KLQlJTklUX0xJU1RfSEVBRCgmdHMtPm1zZy50cmFuc2ZlcnMpOworCW0gPSAmdHMtPm1zZ1swXTsKIAl4ID0gdHMtPnhmZXI7CiAKKwlzcGlfbWVzc2FnZV9pbml0KG0pOworCiAJLyogeS0gc3RpbGwgb247IHR1cm4gb24gb25seSB5KyAoYW5kIEFEQykgKi8KIAl0cy0+cmVhZF95ID0gUkVBRF9ZOwogCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF95OwogCXgtPmxlbiA9IDE7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJeCsrOwogCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueTsKIAl4LT5sZW4gPSAyOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsICZ0cy0+bXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAotCS8qIHR1cm4geSsgb2ZmLCB4LSBvbjsgd2UnbGwgdXNlIGZvcm11bGEgIzIgKi8KLQlpZiAodHMtPm1vZGVsID09IDc4NDYpIHsKLQkJeCsrOwotCQl0cy0+cmVhZF96MSA9IFJFQURfWjE7Ci0JCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF96MTsKLQkJeC0+bGVuID0gMTsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOworCW0tPmNvbXBsZXRlID0gYWRzNzg0Nl9kZWJvdW5jZTsKKwltLT5jb250ZXh0ID0gdHM7CiAKLQkJeCsrOwotCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoxOwotCQl4LT5sZW4gPSAyOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCAmdHMtPm1zZyk7Ci0KLQkJeCsrOwotCQl0cy0+cmVhZF96MiA9IFJFQURfWjI7Ci0JCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF96MjsKLQkJeC0+bGVuID0gMTsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOwotCi0JCXgrKzsKLQkJeC0+cnhfYnVmID0gJnRzLT50Yy56MjsKLQkJeC0+bGVuID0gMjsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOwotCX0KKwltKys7CisJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAogCS8qIHR1cm4geS0gb2ZmLCB4KyBvbiwgdGhlbiBsZWF2ZSBpbiBsb3dwb3dlciAqLwogCXgrKzsKIAl0cy0+cmVhZF94ID0gUkVBRF9YOwogCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF94OwogCXgtPmxlbiA9IDE7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJeCsrOwogCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueDsKIAl4LT5sZW4gPSAyOwotCUNTX0NIQU5HRSgqeCk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJnRzLT5tc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCi0JdHMtPm1zZy5jb21wbGV0ZSA9IGFkczc4NDZfcng7Ci0JdHMtPm1zZy5jb250ZXh0ID0gdHM7CisJbS0+Y29tcGxldGUgPSBhZHM3ODQ2X2RlYm91bmNlOworCW0tPmNvbnRleHQgPSB0czsKKworCS8qIHR1cm4geSsgb2ZmLCB4LSBvbjsgd2UnbGwgdXNlIGZvcm11bGEgIzIgKi8KKwlpZiAodHMtPm1vZGVsID09IDc4NDYpIHsKKwkJbSsrOworCQlzcGlfbWVzc2FnZV9pbml0KG0pOworCisJCXgrKzsKKwkJdHMtPnJlYWRfejEgPSBSRUFEX1oxOworCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejE7CisJCXgtPmxlbiA9IDE7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCisJCXgrKzsKKwkJeC0+cnhfYnVmID0gJnRzLT50Yy56MTsKKwkJeC0+bGVuID0gMjsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CisKKwkJbS0+Y29tcGxldGUgPSBhZHM3ODQ2X2RlYm91bmNlOworCQltLT5jb250ZXh0ID0gdHM7CisKKwkJbSsrOworCQlzcGlfbWVzc2FnZV9pbml0KG0pOworCisJCXgrKzsKKwkJdHMtPnJlYWRfejIgPSBSRUFEX1oyOworCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejI7CisJCXgtPmxlbiA9IDE7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOworCisJCXgrKzsKKwkJeC0+cnhfYnVmID0gJnRzLT50Yy56MjsKKwkJeC0+bGVuID0gMjsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CisKKwkJbS0+Y29tcGxldGUgPSBhZHM3ODQ2X2RlYm91bmNlOworCQltLT5jb250ZXh0ID0gdHM7CisJfQorCisJLyogcG93ZXIgZG93biAqLworCW0rKzsKKwlzcGlfbWVzc2FnZV9pbml0KG0pOworCisJeCsrOworCXRzLT5wd3Jkb3duID0gUFdSRE9XTjsKKwl4LT50eF9idWYgPSAmdHMtPnB3cmRvd247CisJeC0+bGVuID0gMTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKworCXgrKzsKKwl4LT5yeF9idWYgPSAmdHMtPmR1bW15OworCXgtPmxlbiA9IDI7CisJQ1NfQ0hBTkdFKCp4KTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKKworCW0tPmNvbXBsZXRlID0gYWRzNzg0Nl9yeDsKKwltLT5jb250ZXh0ID0gdHM7CisKKwl0cy0+bGFzdF9tc2cgPSBtOwogCiAJaWYgKHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBhZHM3ODQ2X2lycSwKIAkJCVNBX1NBTVBMRV9SQU5ET00gfCBTQV9UUklHR0VSX0ZBTExJTkcsCi0JCQlzcGktPmRldi5idXNfaWQsIHRzKSkgeworCQkJc3BpLT5kZXYuZHJpdmVyLT5uYW1lLCB0cykpIHsKIAkJZGV2X2RiZygmc3BpLT5kZXYsICJpcnEgJWQgYnVzeT9cbiIsIHNwaS0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9mcmVlX21lbTsKQEAgLTU1OSwxMyArODAwLDI3IEBACiAJCWRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl92YmF0dCk7CiAJZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZhdXgpOwogCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3Blbl9kb3duKTsKKworCWRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9kaXNhYmxlKTsKKwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOworCQlnb3RvIGVycl9yZW1vdmVfYXR0cjsKIAogCXJldHVybiAwOwogCi0gZXJyX2ZyZWVfaXJxOgorIGVycl9yZW1vdmVfYXR0cjoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfZGlzYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3Blbl9kb3duKTsKKwlpZiAodHMtPm1vZGVsID09IDc4NDYpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3RlbXAxKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3RlbXAwKTsKKwl9CisJaWYgKHRzLT5tb2RlbCAhPSA3ODQ1KQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdmJhdHQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl92YXV4KTsKKwogCWZyZWVfaXJxKHNwaS0+aXJxLCB0cyk7CiAgZXJyX2ZyZWVfbWVtOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CkBAIC01NzcsMjAgKzgzMiwyNCBAQAogewogCXN0cnVjdCBhZHM3ODQ2CQkqdHMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAotCWFkczc4NDZfc3VzcGVuZChzcGksIFBNU0dfU1VTUEVORCk7Ci0JZnJlZV9pcnEodHMtPnNwaS0+aXJxLCB0cyk7Ci0JaWYgKHRzLT5pcnFfZGlzYWJsZWQpCi0JCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0cy0+aW5wdXQpOwogCisJYWRzNzg0Nl9zdXNwZW5kKHNwaSwgUE1TR19TVVNQRU5EKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9kaXNhYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfcGVuX2Rvd24pOwogCWlmICh0cy0+bW9kZWwgPT0gNzg0NikgewotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdGVtcDApOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdGVtcDEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdGVtcDApOwogCX0KIAlpZiAodHMtPm1vZGVsICE9IDc4NDUpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl92YmF0dCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZhdXgpOwogCi0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodHMtPmlucHV0KTsKKwlmcmVlX2lycSh0cy0+c3BpLT5pcnEsIHRzKTsKKwkvKiBzdXNwZW5kIGxlZnQgdGhlIElSUSBkaXNhYmxlZCAqLworCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKKwogCWtmcmVlKHRzKTsKIAogCWRldl9kYmcoJnNwaS0+ZGV2LCAidW5yZWdpc3RlcmVkIHRvdWNoc2NyZWVuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwppbmRleCAxMDQyOTg3Li41MDEzNzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KKy8vI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90c2Rldi5jIGIvZHJpdmVycy9pbnB1dC90c2Rldi5jCmluZGV4IGNhMTU0NzkuLmQ2NzhkMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdHNkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L3RzZGV2LmMKQEAgLTE1Nyw5ICsxNTcsOCBAQAogCWlmIChpID49IFRTREVWX01JTk9SUyB8fCAhdHNkZXZfdGFibGVbaSAmIFRTREVWX01JTk9SX01BU0tdKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghKGxpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHNkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKKwlpZiAoIShsaXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRzZGV2X2xpc3QpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChsaXN0LCAwLCBzaXplb2Yoc3RydWN0IHRzZGV2X2xpc3QpKTsKIAogCWxpc3QtPnJhdyA9IChpID49IFRTREVWX01JTk9SUy8yKSA/IDEgOiAwOwogCkBAIC0zNzksOSArMzc4LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCEodHNkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHNkZXYpLCBHRlBfS0VSTkVMKSkpCisJaWYgKCEodHNkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHNkZXYpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldCh0c2RldiwgMCwgc2l6ZW9mKHN0cnVjdCB0c2RldikpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnRzZGV2LT5saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0c2Rldi0+d2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggOWI0OTNmMC4uMTczYzg5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMTQ5OSw3ICsxNDk5LDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpMjA6IHVuYWJsZSB0byBnZXQgbWFqb3IgJWRcbiIsIGNhcGlfbWFqb3IpOwogCQlyZXR1cm4gbWFqb3JfcmV0OwogCX0KLQljYXBpX21ham9yID0gbWFqb3JfcmV0OwogCWNhcGlfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJjYXBpIik7CiAJaWYgKElTX0VSUihjYXBpX2NsYXNzKSkgewogCQl1bnJlZ2lzdGVyX2NocmRldihjYXBpX21ham9yLCAiY2FwaTIwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwppbmRleCA1M2M0ZmI2Li41YjIwM2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKQEAgLTMsOCArMyw4IEBACiAKIGNvbmZpZyBJU0ROX0RSVl9HSUdBU0VUCiAJdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IChpc2RuKSIKLQlkZXBlbmRzIG9uIElTRE5fSTRMICYmIG0KLSMJZGVwZW5kcyBvbiBJU0ROX0k0TCAmJiBNT0RVTEVTCisJZGVwZW5kcyBvbiBJU0ROX0k0TAorCXNlbGVjdCBDUkNfQ0NJVFQKIAloZWxwCiAJICBTYXkgbSBoZXJlIGlmIHlvdSBoYXZlIGEgR2lnYXNldCBvciBTaW51cyBpc2RuIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYwppbmRleCAxNzFmOGI3Li5jZTNjZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgYnkgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCi0gKiAgICAgICAgICAgICAgICAgICAgICAgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgU3RlZmFuIEVpbGVycy4KICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExLDEwICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGFzeW5jZGF0YS5jLHYgMS4yLjIuNyAyMDA1LzExLzEzIDIzOjA1OjE4IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTQ1LDcgKzQxLDcgQEAKICAqCW51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMKICAqLwogc3RhdGljIGlubGluZSBpbnQgY21kX2xvb3AodW5zaWduZWQgY2hhciBjLCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBudW1ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKKwkJCSAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAl1bnNpZ25lZCBjYnl0ZXMgICAgICA9IGNzLT5jYnl0ZXM7CkBAIC01NSwxMCArNTEsMTEgQEAKIAlmb3IgKDs7KSB7CiAJCWNzLT5yZXNwZGF0YVtjYnl0ZXNdID0gYzsKIAkJaWYgKGMgPT0gMTAgfHwgYyA9PSAxMykgewotCQkJZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAotCQkJICAgIF9fZnVuY19fLCBjYnl0ZXMpOworCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIiVzOiBFbmQgb2YgQ29tbWFuZCAoJWQgQnl0ZXMpIiwKKwkJCQlfX2Z1bmNfXywgY2J5dGVzKTsKIAkJCWNzLT5jYnl0ZXMgPSBjYnl0ZXM7Ci0JCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7IC8qIGNhbiBjaGFuZ2UgY3MtPmRsZSAqLworCQkJZ2lnYXNldF9oYW5kbGVfbW9kZW1fcmVzcG9uc2UoY3MpOyAvKiBjYW4gY2hhbmdlCisJCQkJCQkJICAgICAgY3MtPmRsZSAqLwogCQkJY2J5dGVzID0gMDsKIAogCQkJaWYgKGNzLT5kbGUgJiYKQEAgLTcxLDcgKzY4LDcgQEAKIAkJCWlmIChjYnl0ZXMgPCBNQVhfUkVTUF9TSVpFIC0gMSkKIAkJCQljYnl0ZXMrKzsKIAkJCWVsc2UKLQkJCQl3YXJuKCJyZXNwb25zZSB0b28gbGFyZ2UiKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlXG4iKTsKIAkJfQogCiAJCWlmICghbnVtYnl0ZXMpCkBAIC05NiwxMSArOTMsMTIgQEAKICAqCW51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMKICAqLwogc3RhdGljIGlubGluZSBpbnQgbG9ja19sb29wKHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKKwkJCSAgICBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CiAKLQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfTE9DS0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwgbnVtYnl0ZXMsIHNyYywgMCk7CisJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0xPQ0tDTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCisJCQkgICBudW1ieXRlcywgc3JjKTsKIAlnaWdhc2V0X2lmX3JlY2VpdmUoY3MsIHNyYywgbnVtYnl0ZXMpOwogCiAJcmV0dXJuIG51bWJ5dGVzOwpAQCAtMTE1LDI0ICsxMTMsMTggQEAKICAqCW51bWJ5dGVzIChhbGwgYnl0ZXMgcHJvY2Vzc2VkKSBvbiBlcnJvciAtLUZJWE1FCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGhkbGNfbG9vcCh1bnNpZ25lZCBjaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IG51bWJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKKwkJCSAgICBzdHJ1Y3QgaW5idWZfdCAqaW5idWYpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBpbmJ1Zi0+Y3M7CiAJc3RydWN0IGJjX3N0YXRlICpiY3MgPSBpbmJ1Zi0+YmNzOwotCWludCBpbnB1dHN0YXRlOwotCV9fdTE2IGZjczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOworCV9fdTE2IGZjcyA9IGJjcy0+ZmNzOworCXN0cnVjdCBza19idWZmICpza2IgPSBiY3MtPnNrYjsKIAl1bnNpZ25lZCBjaGFyIGVycm9yOwogCXN0cnVjdCBza19idWZmICpjb21wc2tiOwogCWludCBzdGFydGJ5dGVzID0gbnVtYnl0ZXM7CiAJaW50IGw7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCBudW1ieXRlcyk7Ci0JaW5wdXRzdGF0ZSA9IGJjcy0+aW5wdXRzdGF0ZTsKLQlmY3MgPSBiY3MtPmZjczsKLQlza2IgPSBiY3MtPnNrYjsKLQlJRk5VTExSRVRWQUwoc2tiLCBudW1ieXRlcyk7Ci0KIAlpZiAodW5saWtlbHkoaW5wdXRzdGF0ZSAmIElOU19ieXRlX3N0dWZmKSkgewogCQlpbnB1dHN0YXRlICY9IH5JTlNfYnl0ZV9zdHVmZjsKIAkJZ290byBieXRlX3N0dWZmOwpAQCAtMTU2LDM5ICsxNDgsMzcgQEAKIAkJCWMgXj0gUFBQX1RSQU5TOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQlpZiAodW5saWtlbHkoIW11c3RzdHVmZihjKSkpCi0JCQkJZGJnKERFQlVHX0hETEMsCi0JCQkJICAgICJieXRlIHN0dWZmZWQ6IDB4JTAyeCIsIGMpOworCQkJCWdpZ19kYmcoREVCVUdfSERMQywgImJ5dGUgc3R1ZmZlZDogMHglMDJ4IiwgYyk7CiAjZW5kaWYKIAkJfSBlbHNlIGlmICh1bmxpa2VseShjID09IFBQUF9GTEFHKSkgewogCQkJaWYgKHVubGlrZWx5KGlucHV0c3RhdGUgJiBJTlNfc2tpcF9mcmFtZSkpIHsKIAkJCQlpZiAoIShpbnB1dHN0YXRlICYgSU5TX2hhdmVfZGF0YSkpIHsgLyogN0UgN0UgKi8KLQkJCQkJLy9kYmcoREVCVUdfSERMQywgIig3ZSk3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQkJCSsrYmNzLT5lbXB0eWNvdW50OwogI2VuZGlmCiAJCQkJfSBlbHNlCi0JCQkJCWRiZyhERUJVR19IRExDLAorCQkJCQlnaWdfZGJnKERFQlVHX0hETEMsCiAJCQkJCSAgICAiN2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAKIAkJCQkvKiBlbmQgb2YgZnJhbWUgKi8KIAkJCQllcnJvciA9IDE7CiAJCQkJZ2lnYXNldF9yY3ZfZXJyb3IoTlVMTCwgY3MsIGJjcyk7CiAJCQl9IGVsc2UgaWYgKCEoaW5wdXRzdGF0ZSAmIElOU19oYXZlX2RhdGEpKSB7IC8qIDdFIDdFICovCi0JCQkJLy9kYmcoREVCVUdfSERMQywgIig3ZSk3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQkJKytiY3MtPmVtcHR5Y291bnQ7CiAjZW5kaWYKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7Ci0JCQkJZGJnKERFQlVHX0hETEMsCi0JCQkJICAgICI3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkJCQlnaWdfZGJnKERFQlVHX0hETEMsCisJCQkJCSI3ZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKIAogCQkJCS8qIGVuZCBvZiBmcmFtZSAqLwogCQkJCWVycm9yID0gMDsKIAogCQkJCWlmICh1bmxpa2VseShmY3MgIT0gUFBQX0dPT0RGQ1MpKSB7Ci0JCQkJCWVycigiUGFja2V0IGNoZWNrc3VtIGF0ICVsdSBmYWlsZWQsICIKLQkJCQkJICAgICJwYWNrZXQgaXMgY29ycnVwdGVkICgldSBieXRlcykhIiwKKwkJCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCQkgICAgIlBhY2tldCBjaGVja3N1bSBhdCAlbHUgZmFpbGVkLCAiCisJCQkJCSAgICAicGFja2V0IGlzIGNvcnJ1cHRlZCAoJXUgYnl0ZXMpIVxuIiwKIAkJCQkJICAgIGJjcy0+cmN2Ynl0ZXMsIHNrYi0+bGVuKTsKIAkJCQkJY29tcHNrYiA9IE5VTEw7CiAJCQkJCWdpZ2FzZXRfcmN2X2Vycm9yKGNvbXBza2IsIGNzLCBiY3MpOwpAQCAtMjAyLDkgKzE5MiwxMSBAQAogCQkJCQkJc2tiID0gTlVMTDsKIAkJCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQkJCQlpZiAobCA9PSAxKSB7Ci0JCQkJCQkJZXJyKCJpbnZhbGlkIHBhY2tldCBzaXplICgxKSEiKTsKKwkJCQkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCQkgICJpbnZhbGlkIHBhY2tldCBzaXplICgxKSFcbiIpOwogCQkJCQkJCWVycm9yID0gMTsKLQkJCQkJCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLCBjcywgYmNzKTsKKwkJCQkJCQlnaWdhc2V0X3Jjdl9lcnJvcihOVUxMLAorCQkJCQkJCQljcywgYmNzKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlpZiAobGlrZWx5KCEoZXJyb3IgfHwKQEAgLTIyNyw3ICsyMTksOCBAQAogCQkJfSBlbHNlIGlmIChsaWtlbHkoKHNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKSkgIT0gTlVMTCkpIHsKIAkJCQlza2JfcmVzZXJ2ZShza2IsIEhXX0hEUl9MRU4pOwogCQkJfSBlbHNlIHsKLQkJCQl3YXJuKCJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IHNrYiIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiY291bGQgbm90IGFsbG9jYXRlIG5ldyBza2JcbiIpOwogCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQl9CiAKQEAgLTIzNSw3ICsyMjgsNyBAQAogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCX0gZWxzZSBpZiAodW5saWtlbHkobXVzdHN0dWZmKGMpKSkgewogCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uIFBvc3NpYmxlIGFmdGVyIFpETEU9MTxDUj48TEY+LiAqLwotCQkJZGJnKERFQlVHX0hETEMsICJub3QgYnl0ZSBzdHVmZmVkOiAweCUwMngiLCBjKTsKKwkJCWdpZ19kYmcoREVCVUdfSERMQywgIm5vdCBieXRlIHN0dWZmZWQ6IDB4JTAyeCIsIGMpOwogI2VuZGlmCiAJCX0KIApAQCAtMjQzLDggKzIzNiw4IEBACiAKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCQlpZiAodW5saWtlbHkoIShpbnB1dHN0YXRlICYgSU5TX2hhdmVfZGF0YSkpKSB7Ci0JCQlkYmcoREVCVUdfSERMQywKLQkJCSAgICAiN2UgKCVkIHgpID09PT09PT09PT09PT09PT0iLCBiY3MtPmVtcHR5Y291bnQpOworCQkJZ2lnX2RiZyhERUJVR19IRExDLCAiN2UgKCVkIHgpID09PT09PT09PT09PT09PT0iLAorCQkJCWJjcy0+ZW1wdHljb3VudCk7CiAJCQliY3MtPmVtcHR5Y291bnQgPSAwOwogCQl9CiAjZW5kaWYKQEAgLTI1MywxNCArMjQ2LDEzIEBACiAKIAkJaWYgKGxpa2VseSghKGlucHV0c3RhdGUgJiBJTlNfc2tpcF9mcmFtZSkpKSB7CiAJCQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPT0gU0JVRlNJWkUpKSB7Ci0JCQkJd2FybigicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nIik7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwgInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIik7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQlza2IgPSBOVUxMOwogCQkJCWlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkqZ2lnYXNldF9za2JfcHV0X3F1aWNrKHNrYiwgMSkgPSBjOwotCQkJLyogKl9fc2tiX3B1dCAoc2tiLCAxKSA9IGM7ICovCisJCQkqX19za2JfcHV0KHNrYiwgMSkgPSBjOwogCQkJZmNzID0gY3JjX2NjaXR0X2J5dGUoZmNzLCBjKTsKIAkJfQogCkBAIC0yODksMTkgKzI4MSwxNCBAQAogICoJbnVtYnl0ZXMgKGFsbCBieXRlcyBwcm9jZXNzZWQpIG9uIGVycm9yIC0tRklYTUUKICAqLwogc3RhdGljIGlubGluZSBpbnQgaXJhd19sb29wKHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbnVtYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluYnVmX3QgKmluYnVmKQorCQkJICAgIHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IGluYnVmLT5iY3M7Ci0JaW50IGlucHV0c3RhdGU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaW5wdXRzdGF0ZSA9IGJjcy0+aW5wdXRzdGF0ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmNzLT5za2I7CiAJaW50IHN0YXJ0Ynl0ZXMgPSBudW1ieXRlczsKIAotCUlGTlVMTFJFVFZBTChiY3MsIG51bWJ5dGVzKTsKLQlpbnB1dHN0YXRlID0gYmNzLT5pbnB1dHN0YXRlOwotCXNrYiA9IGJjcy0+c2tiOwotCUlGTlVMTFJFVFZBTChza2IsIG51bWJ5dGVzKTsKLQogCWZvciAoOzspIHsKIAkJLyogYWRkIGNoYXJhY3RlciAqLwogCQlpbnB1dHN0YXRlIHw9IElOU19oYXZlX2RhdGE7CkBAIC0zMDksMTMgKzI5NiwxMyBAQAogCQlpZiAobGlrZWx5KCEoaW5wdXRzdGF0ZSAmIElOU19za2lwX2ZyYW1lKSkpIHsKIAkJCWlmICh1bmxpa2VseShza2ItPmxlbiA9PSBTQlVGU0laRSkpIHsKIAkJCQkvL0ZJWE1FIGp1c3QgcGFzcyBza2IgdXAgYW5kIGFsbG9jYXRlIGEgbmV3IG9uZQotCQkJCXdhcm4oInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZyIpOworCQkJCWRldl93YXJuKGNzLT5kZXYsICJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmdcbiIpOwogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJc2tiID0gTlVMTDsKIAkJCQlpbnB1dHN0YXRlIHw9IElOU19za2lwX2ZyYW1lOwogCQkJCWJyZWFrOwogCQkJfQotCQkJKmdpZ2FzZXRfc2tiX3B1dF9xdWljayhza2IsIDEpID0gZ2lnYXNldF9pbnZ0YWJbY107CisJCQkqX19za2JfcHV0KHNrYiwgMSkgPSBnaWdhc2V0X2ludnRhYltjXTsKIAkJfQogCiAJCWlmICh1bmxpa2VseSghbnVtYnl0ZXMpKQpAQCAtMzQzLDcgKzMzMCw3IEBACiAJCQkJICAhPSBOVUxMKSkgewogCQkJc2tiX3Jlc2VydmUoc2tiLCBIV19IRFJfTEVOKTsKIAkJfSBlbHNlIHsKLQkJCXdhcm4oImNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgc2tiIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIG5ldyBza2JcbiIpOwogCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJfQogCX0KQEAgLTM2NCwxMyArMzUxLDEzIEBACiAKIAloZWFkID0gYXRvbWljX3JlYWQoJmluYnVmLT5oZWFkKTsKIAl0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKTsKLQlkYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKKwlnaWdfZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CiAKIAlpZiAoaGVhZCAhPSB0YWlsKSB7CiAJCWNzID0gaW5idWYtPmNzOwogCQlzcmMgPSBpbmJ1Zi0+ZGF0YSArIGhlYWQ7CiAJCW51bWJ5dGVzID0gKGhlYWQgPiB0YWlsID8gUkJVRlNJWkUgOiB0YWlsKSAtIGhlYWQ7Ci0JCWRiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKIAogCQl3aGlsZSAobnVtYnl0ZXMpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgPT0gTVNfTE9DS0VEKSB7CkBAIC0zOTIsOCArMzc5LDcgQEAKIAogCQkJCWlmICghKGluYnVmLT5pbnB1dHN0YXRlICYgSU5TX0RMRV9jaGFyKSkgewogCi0JCQkJCS8qIEZJWE1FIEVpbmZhY2ggamUgbmFjaCBNb2R1cyBGdW5rdGlvbnN6ZWlnZXIgaW4gY3Mgc2V0emVuIFtoaWVyK2hkbGNfbG9vcF0/ICAqLwotCQkJCQkvKiBGSVhNRSBTcGFydCBmb2xnZW5kZXMgImlmIiB1bmQgZXJtb2VnbGljaHQgYW5kZXJlIFByb3Rva29sbGUgKi8KKwkJCQkJLyogRklYTUUgdXNlIGZ1bmN0aW9uIHBvaW50ZXJzPyAgKi8KIAkJCQkJaWYgKGluYnVmLT5pbnB1dHN0YXRlICYgSU5TX2NvbW1hbmQpCiAJCQkJCQlwcm9jYnl0ZXMgPSBjbWRfbG9vcChjLCBzcmMsIG51bWJ5dGVzLCBpbmJ1Zik7CiAJCQkJCWVsc2UgaWYgKGluYnVmLT5iY3MtPnByb3RvMiA9PSBJU0ROX1BST1RPX0wyX0hETEMpCkBAIC00MDMsMTMgKzM4OSwxNCBAQAogCiAJCQkJCXNyYyArPSBwcm9jYnl0ZXM7CiAJCQkJCW51bWJ5dGVzIC09IHByb2NieXRlczsKLQkJCQl9IGVsc2UgeyAgLyogRExFLWNoYXIgKi8KKwkJCQl9IGVsc2UgeyAgLyogRExFIGNoYXIgKi8KIAkJCQkJaW5idWYtPmlucHV0c3RhdGUgJj0gfklOU19ETEVfY2hhcjsKIAkJCQkJc3dpdGNoIChjKSB7CiAJCQkJCWNhc2UgJ1gnOiAvKmJlZ2luIG9mIGNvbW1hbmQqLwogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQkJCQlpZiAoaW5idWYtPmlucHV0c3RhdGUgJiBJTlNfY29tbWFuZCkKLQkJCQkJCQllcnIoInJlY2VpdmVkIDxETEU+ICdYJyBpbiBjb21tYW5kIG1vZGUiKTsKKwkJCQkJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJCSJyZWNlaXZlZCA8RExFPiAnWCcgaW4gY29tbWFuZCBtb2RlXG4iKTsKICNlbmRpZgogCQkJCQkJaW5idWYtPmlucHV0c3RhdGUgfD0KIAkJCQkJCQlJTlNfY29tbWFuZCB8IElOU19ETEVfY29tbWFuZDsKQEAgLTQxNyw3ICs0MDQsOCBAQAogCQkJCQljYXNlICcuJzogLyplbmQgb2YgY29tbWFuZCovCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAkJCQkJCWlmICghKGluYnVmLT5pbnB1dHN0YXRlICYgSU5TX2NvbW1hbmQpKQotCQkJCQkJCWVycigicmVjZWl2ZWQgPERMRT4gJy4nIGluIGhkbGMgbW9kZSIpOworCQkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJInJlY2VpdmVkIDxETEU+ICcuJyBpbiBoZGxjIG1vZGVcbiIpOwogI2VuZGlmCiAJCQkJCQlpbmJ1Zi0+aW5wdXRzdGF0ZSAmPSBjcy0+ZGxlID8KIAkJCQkJCQl+KElOU19ETEVfY29tbWFuZHxJTlNfY29tbWFuZCkKQEAgLTQyNSw3ICs0MTMsOSBAQAogCQkJCQkJYnJlYWs7CiAJCQkJCS8vY2FzZSBETEVfRkxBRzogLypETEVfRkxBRyBpbiBkYXRhIHN0cmVhbSovIC8qIHNjaG9uIG9iZW4gYmVoYW5kZWx0ISAqLwogCQkJCQlkZWZhdWx0OgotCQkJCQkJZXJyKCJyZWNlaXZlZCAweDEwIDB4JTAyeCEiLCAoaW50KSBjKTsKKwkJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJCSAgICAgICJyZWNlaXZlZCAweDEwIDB4JTAyeCFcbiIsCisJCQkJCQkJKGludCkgYyk7CiAJCQkJCQkvKiBGSVhNRTogcmVzZXQgZHJpdmVyPz8gKi8KIAkJCQkJfQogCQkJCX0KQEAgLTQ0NCw3ICs0MzQsNyBAQAogCQkJfQogCQl9CiAKLQkJZGJnKERFQlVHX0lOVFIsICJzZXR0aW5nIGhlYWQgdG8gJXUiLCBoZWFkKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAic2V0dGluZyBoZWFkIHRvICV1IiwgaGVhZCk7CiAJCWF0b21pY19zZXQoJmluYnVmLT5oZWFkLCBoZWFkKTsKIAl9CiB9CkBAIC00NzksMTQgKzQ2OSwxMyBAQAogCQkJc3R1Zl9jbnQrKzsKIAkJZmNzID0gY3JjX2NjaXR0X2J5dGUoZmNzLCAqY3ArKyk7CiAJfQotCWZjcyBePSAweGZmZmY7ICAgICAgICAgICAgICAgICAvKiBjb21wbGVtZW50ICovCisJZmNzIF49IDB4ZmZmZjsJCQkvKiBjb21wbGVtZW50ICovCiAKIAkvKiBzaXplIG9mIG5ldyBidWZmZXI6IG9yaWdpbmFsIHNpemUgKyBudW1iZXIgb2Ygc3R1ZmZpbmcgYnl0ZXMKIAkgKiArIDIgYnl0ZXMgRkNTICsgMiBzdHVmZmluZyBieXRlcyBmb3IgRkNTIChpZiBuZWVkZWQpICsgMiBmbGFnIGJ5dGVzCiAJICovCiAJaGRsY19za2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgc3R1Zl9jbnQgKyA2ICsgdGFpbCArIGhlYWQpOwogCWlmICghaGRsY19za2IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBIRExDIGVuY29kaW5nISIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTUwOCw3ICs0OTcsNyBAQAogCX0KIAogCS8qIEZpbmFsbHkgYWRkIEZDUyAoYnl0ZSBzdHVmZmVkKSBhbmQgZmxhZyBzZXF1ZW5jZSAqLwotCWMgPSAoZmNzICYgMHgwMGZmKTsgICAgICAvKiBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0ICovCisJYyA9IChmY3MgJiAweDAwZmYpOwkvKiBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0ICovCiAJaWYgKG11c3RzdHVmZihjKSkgewogCQkqKHNrYl9wdXQoaGRsY19za2IsIDEpKSA9IFBQUF9FU0NBUEU7CiAJCWMgXj0gUFBQX1RSQU5TOwpAQCAtNTQ2LDcgKzUzNSw2IEBACiAJLyogd29yc3QgY2FzZTogZXZlcnkgYnl0ZSBtdXN0IGJlIHN0dWZmZWQgKi8KIAlpcmF3X3NrYiA9IGRldl9hbGxvY19za2IoMipza2ItPmxlbiArIHRhaWwgKyBoZWFkKTsKIAlpZiAoIWlyYXdfc2tiKSB7Ci0JCWVycigidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgSERMQyBlbmNvZGluZyEiKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01NzcsMjEgKzU2NSwyMyBAQAogICovCiBpbnQgZ2lnYXNldF9tMTB4X3NlbmRfc2tiKHN0cnVjdCBiY19zdGF0ZSAqYmNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXVuc2lnbmVkIGxlbjsKLQotCUlGTlVMTFJFVFZBTChiY3MsIC1FRkFVTFQpOwotCUlGTlVMTFJFVFZBTChza2IsIC1FRkFVTFQpOwotCWxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoYmNzLT5wcm90bzIgPT0gSVNETl9QUk9UT19MMl9IRExDKQogCQlza2IgPSBIRExDX0VuY29kZShza2IsIEhXX0hEUl9MRU4sIDApOwogCWVsc2UKIAkJc2tiID0gaXJhd19lbmNvZGUoc2tiLCBIV19IRFJfTEVOLCAwKTsKLQlpZiAoIXNrYikKKwlpZiAoIXNrYikgeworCQllcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGVuY29kaW5nIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXNrYl9xdWV1ZV90YWlsKCZiY3MtPnNxdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZiY3MtPmNzLT53cml0ZV90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCWlmIChiY3MtPmNzLT5jb25uZWN0ZWQpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmJjcy0+Y3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBsZW47CS8qIG9rIHNvIGZhciAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKaW5kZXggMzFmMGYwNy4uZWI0MWFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCkBAIC0zLDkgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMSBieSBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwKLSAqICAgICAgICAgICAgICAgICAgICAgICBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPi4KLSAqCi0gKiBCYXNlZCBvbiB1c2ItZ2lnYXNldC5jLgorICogICAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbiBFaWxlcnMuCiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMywxMCArMTEsNiBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBiYXMtZ2lnYXNldC5jLHYgMS41Mi40LjE5IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgpAQCAtMzAsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgSGFuc2pvZXJnIExpcHAgPGhqbGlwcEB3ZWIuZGU+LCBTdGVmYW4gRWlsZXJzIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIERyaXZlciBmb3IgR2lnYXNldCAzMDd4IgogCiAKQEAgLTUwLDE5ICs0NCwyMCBAQAogI2RlZmluZSBHSUdBU0VUX0RFVkZTTkFNRSAgImdpZy9iYXMvIgogI2RlZmluZSBHSUdBU0VUX0RFVk5BTUUgICAgInR0eUdCIgogCi0jZGVmaW5lIElGX1dSSVRFQlVGIDI1NiAvL0ZJWE1FCisvKiBsZW5ndGggbGltaXQgYWNjb3JkaW5nIHRvIFNpZW1lbnMgMzA3MHVzYi1wcm90b2tvbGwuZG9jIGNoLiAyLjEgKi8KKyNkZWZpbmUgSUZfV1JJVEVCVUYgMjY0CiAKIC8qIFZhbHVlcyBmb3IgdGhlIEdpZ2FzZXQgMzA3eCAqLwogI2RlZmluZSBVU0JfR0lHQV9WRU5ET1JfSUQgICAgICAweDA2ODEKLSNkZWZpbmUgVVNCX0dJR0FfUFJPRFVDVF9JRCAgICAgMHgwMDAxCi0jZGVmaW5lIFVTQl80MTc1X1BST0RVQ1RfSUQgICAgIDB4MDAwMgorI2RlZmluZSBVU0JfMzA3MF9QUk9EVUNUX0lEICAgICAweDAwMDEKKyNkZWZpbmUgVVNCXzMwNzVfUFJPRFVDVF9JRCAgICAgMHgwMDAyCiAjZGVmaW5lIFVTQl9TWDMwM19QUk9EVUNUX0lEICAgIDB4MDAyMQogI2RlZmluZSBVU0JfU1gzNTNfUFJPRFVDVF9JRCAgICAweDAwMjIKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdpZ2FzZXRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKFVTQl9HSUdBX1ZFTkRPUl9JRCwgVVNCX0dJR0FfUFJPRFVDVF9JRCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX0dJR0FfVkVORE9SX0lELCBVU0JfNDE3NV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShVU0JfR0lHQV9WRU5ET1JfSUQsIFVTQl8zMDcwX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9HSUdBX1ZFTkRPUl9JRCwgVVNCXzMwNzVfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX0dJR0FfVkVORE9SX0lELCBVU0JfU1gzMDNfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX0dJR0FfVkVORE9SX0lELCBVU0JfU1gzNTNfUFJPRFVDVF9JRCkgfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTcwLDkgKzY1LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdpZ2FzZXRfdGFibGUpOwogCi0vKiBHZXQgYSBtaW5vciByYW5nZSBmb3IgeW91ciBkZXZpY2VzIGZyb20gdGhlIHVzYiBtYWludGFpbmVyICovCi0jZGVmaW5lIFVTQl9TS0VMX01JTk9SX0JBU0UJMjAwCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT0gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdG8gdGhlIFVTQiBwb3J0LiBJdApAQCAtODQsMjkgKzc2LDMzIEBACiAvKiBGdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgZGV2aWNlIGlzIHVucGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgZ2lnYXNldF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCitzdGF0aWMgdm9pZCByZWFkX2N0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyB2b2lkIHN0b3B1cmJzKHN0cnVjdCBiYXNfYmNfc3RhdGUgKik7CitzdGF0aWMgaW50IGF0d3JpdGVfc3VibWl0KHN0cnVjdCBjYXJkc3RhdGUgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworc3RhdGljIGludCBzdGFydF9jYnNlbmQoc3RydWN0IGNhcmRzdGF0ZSAqKTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKnVkZXY7CQkvKiBVU0IgZGV2aWNlIHBvaW50ZXIgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAgICAqaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkvKiBVU0IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCiAJdW5zaWduZWQgY2hhcgkJbWlub3I7CQkvKiBzdGFydGluZyBtaW5vciBudW1iZXIgKi8KIAotCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmJfY3RybDsJLyogY29udHJvbCBwaXBlIGRlZmF1bHQgVVJCICovCisJc3RydWN0IHVyYgkJKnVyYl9jdHJsOwkvKiBjb250cm9sIHBpcGUgZGVmYXVsdCBVUkIgKi8KIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CWRyX2N0cmw7CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXJfY3RybDsJLyogY29udHJvbCByZXF1ZXN0IHRpbWVvdXQgKi8KIAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyX2F0cmR5OwkvKiBBVCBjb21tYW5kIHJlYWR5IHRpbWVvdXQgKi8KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiX2NtZF9vdXQ7CS8qIGZvciBzZW5kaW5nIEFUIGNvbW1hbmRzICovCisJc3RydWN0IHVyYgkJKnVyYl9jbWRfb3V0OwkvKiBmb3Igc2VuZGluZyBBVCBjb21tYW5kcyAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHJfY21kX291dDsKIAlpbnQJCQlyZXRyeV9jbWRfb3V0OwogCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYl9jbWRfaW47CS8qIGZvciByZWNlaXZpbmcgQVQgcmVwbGllcyAqLworCXN0cnVjdCB1cmIJCSp1cmJfY21kX2luOwkvKiBmb3IgcmVjZWl2aW5nIEFUIHJlcGxpZXMgKi8KIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CWRyX2NtZF9pbjsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcl9jbWRfaW47CS8qIHJlY2VpdmUgcmVxdWVzdCB0aW1lb3V0ICovCi0JdW5zaWduZWQgY2hhciAgICAgICAgICAgKnJjdmJ1ZjsJLyogQVQgcmVwbHkgcmVjZWl2ZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCQkqcmN2YnVmOwkvKiBBVCByZXBseSByZWNlaXZlIGJ1ZmZlciAqLwogCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYl9pbnRfaW47CS8qIFVSQiBmb3IgaW50ZXJydXB0IHBpcGUgKi8KKwlzdHJ1Y3QgdXJiCQkqdXJiX2ludF9pbjsJLyogVVJCIGZvciBpbnRlcnJ1cHQgcGlwZSAqLwogCXVuc2lnbmVkIGNoYXIJCWludF9pbl9idWZbM107CiAKIAlzcGlubG9ja190CQlsb2NrOwkJLyogbG9ja3MgYWxsIGZvbGxvd2luZyAqLwpAQCAtMTE4LDEyICsxMTQsMTQgQEAKIH07CiAKIC8qIHN0YXR1cyBvZiBkaXJlY3QgVVNCIGNvbm5lY3Rpb24gdG8gMzA3eCBiYXNlIChiaXRzIGluIGJhc3N0YXRlKSAqLwotI2RlZmluZSBCU19BVE9QRU4JMHgwMDEKLSNkZWZpbmUgQlNfQjFPUEVOCTB4MDAyCi0jZGVmaW5lIEJTX0IyT1BFTgkweDAwNAotI2RlZmluZSBCU19BVFJFQURZCTB4MDA4Ci0jZGVmaW5lIEJTX0lOSVQJCTB4MDEwCi0jZGVmaW5lIEJTX0FUVElNRVIJMHgwMjAKKyNkZWZpbmUgQlNfQVRPUEVOCTB4MDAxCS8qIEFUIGNoYW5uZWwgb3BlbiAqLworI2RlZmluZSBCU19CMU9QRU4JMHgwMDIJLyogQiBjaGFubmVsIDEgb3BlbiAqLworI2RlZmluZSBCU19CMk9QRU4JMHgwMDQJLyogQiBjaGFubmVsIDIgb3BlbiAqLworI2RlZmluZSBCU19BVFJFQURZCTB4MDA4CS8qIGJhc2UgcmVhZHkgZm9yIEFUIGNvbW1hbmQgKi8KKyNkZWZpbmUgQlNfSU5JVAkJMHgwMTAJLyogYmFzZSBoYXMgc2lnbmFsbGVkIElOSVRfT0sgKi8KKyNkZWZpbmUgQlNfQVRUSU1FUgkweDAyMAkvKiB3YWl0aW5nIGZvciBIRF9SRUFEWV9TRU5EX0FUREFUQSAqLworI2RlZmluZSBCU19BVFJEUEVORAkweDA0MAkvKiB1cmJfY21kX2luIGluIHVzZSAqLworI2RlZmluZSBCU19BVFdSUEVORAkweDA4MAkvKiB1cmJfY21kX291dCBpbiB1c2UgKi8KIAogCiBzdGF0aWMgc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcml2ZXIgPSBOVUxMOwpAQCAtMTM3LDYgKzEzNSw0NyBAQAogCS5pZF90YWJsZSA9ICAgICBnaWdhc2V0X3RhYmxlLAogfTsKIAorLyogZ2V0IG1lc3NhZ2UgdGV4dCBmb3IgdXNiX3N1Ym1pdF91cmIgcmV0dXJuIGNvZGUKKyAqLworc3RhdGljIGNoYXIgKmdldF91c2JfcmNtc2coaW50IHJjKQoreworCXN0YXRpYyBjaGFyIHVua21zZ1syOF07CisKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gInN1Y2Nlc3MiOworCWNhc2UgLUVOT01FTToKKwkJcmV0dXJuICJvdXQgb2YgbWVtb3J5IjsKKwljYXNlIC1FTk9ERVY6CisJCXJldHVybiAiZGV2aWNlIG5vdCBwcmVzZW50IjsKKwljYXNlIC1FTk9FTlQ6CisJCXJldHVybiAiZW5kcG9pbnQgbm90IHByZXNlbnQiOworCWNhc2UgLUVOWElPOgorCQlyZXR1cm4gIlVSQiB0eXBlIG5vdCBzdXBwb3J0ZWQiOworCWNhc2UgLUVJTlZBTDoKKwkJcmV0dXJuICJpbnZhbGlkIGFyZ3VtZW50IjsKKwljYXNlIC1FQUdBSU46CisJCXJldHVybiAic3RhcnQgZnJhbWUgdG9vIGVhcmx5IG9yIHRvbyBtdWNoIHNjaGVkdWxlZCI7CisJY2FzZSAtRUZCSUc6CisJCXJldHVybiAidG9vIG1hbnkgaXNvY2hyb25vdXMgZnJhbWVzIHJlcXVlc3RlZCI7CisJY2FzZSAtRVBJUEU6CisJCXJldHVybiAiZW5kcG9pbnQgc3RhbGxlZCI7CisJY2FzZSAtRU1TR1NJWkU6CisJCXJldHVybiAiaW52YWxpZCBwYWNrZXQgc2l6ZSI7CisJY2FzZSAtRU5PU1BDOgorCQlyZXR1cm4gIndvdWxkIG92ZXJjb21taXQgVVNCIGJhbmR3aWR0aCI7CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm4gImRldmljZSBzaHV0IGRvd24iOworCWNhc2UgLUVQRVJNOgorCQlyZXR1cm4gInJlamVjdCBmbGFnIHNldCI7CisJY2FzZSAtRUhPU1RVTlJFQUNIOgorCQlyZXR1cm4gImRldmljZSBzdXNwZW5kZWQiOworCWRlZmF1bHQ6CisJCXNucHJpbnRmKHVua21zZywgc2l6ZW9mKHVua21zZyksICJ1bmtub3duIGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gdW5rbXNnOworCX0KK30KKwogLyogZ2V0IG1lc3NhZ2UgdGV4dCBmb3IgVVNCIHN0YXR1cyBjb2RlCiAgKi8KIHN0YXRpYyBjaGFyICpnZXRfdXNiX3N0YXRtc2coaW50IHN0YXR1cykKQEAgLTE0Nyw0MyArMTg2LDM3IEBACiAJY2FzZSAwOgogCQlyZXR1cm4gInN1Y2Nlc3MiOwogCWNhc2UgLUVOT0VOVDoKLQkJcmV0dXJuICJjYW5jZWxlZCI7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQkJcmV0dXJuICJjYW5jZWxlZCAoYXN5bmMpIjsKKwkJcmV0dXJuICJ1bmxpbmtlZCAoc3luYykiOwogCWNhc2UgLUVJTlBST0dSRVNTOgogCQlyZXR1cm4gInBlbmRpbmciOwogCWNhc2UgLUVQUk9UTzoKLQkJcmV0dXJuICJiaXQgc3R1ZmZpbmcgb3IgdW5rbm93biBVU0IgZXJyb3IiOworCQlyZXR1cm4gImJpdCBzdHVmZmluZyBlcnJvciwgdGltZW91dCwgb3IgdW5rbm93biBVU0IgZXJyb3IiOwogCWNhc2UgLUVJTFNFUToKLQkJcmV0dXJuICJJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKENSQyBtaXNtYXRjaCkiOwotCWNhc2UgLUVQSVBFOgotCQlyZXR1cm4gImJhYmJsZSBkZXRlY3Qgb3IgZW5kcG9pbnQgc3RhbGxlZCI7Ci0JY2FzZSAtRU5PU1I6Ci0JCXJldHVybiAiYnVmZmVyIGVycm9yIjsKKwkJcmV0dXJuICJDUkMgbWlzbWF0Y2gsIHRpbWVvdXQsIG9yIHVua25vd24gVVNCIGVycm9yIjsKIAljYXNlIC1FVElNRURPVVQ6CiAJCXJldHVybiAidGltZWQgb3V0IjsKLQljYXNlIC1FTk9ERVY6Ci0JCXJldHVybiAiZGV2aWNlIG5vdCBwcmVzZW50IjsKKwljYXNlIC1FUElQRToKKwkJcmV0dXJuICJlbmRwb2ludCBzdGFsbGVkIjsKKwljYXNlIC1FQ09NTToKKwkJcmV0dXJuICJJTiBidWZmZXIgb3ZlcnJ1biI7CisJY2FzZSAtRU5PU1I6CisJCXJldHVybiAiT1VUIGJ1ZmZlciB1bmRlcnJ1biI7CisJY2FzZSAtRU9WRVJGTE9XOgorCQlyZXR1cm4gInRvbyBtdWNoIGRhdGEiOwogCWNhc2UgLUVSRU1PVEVJTzoKIAkJcmV0dXJuICJzaG9ydCBwYWNrZXQgZGV0ZWN0ZWQiOworCWNhc2UgLUVOT0RFVjoKKwkJcmV0dXJuICJkZXZpY2UgcmVtb3ZlZCI7CiAJY2FzZSAtRVhERVY6CiAJCXJldHVybiAicGFydGlhbCBpc29jaHJvbm91cyB0cmFuc2ZlciI7CiAJY2FzZSAtRUlOVkFMOgogCQlyZXR1cm4gImludmFsaWQgYXJndW1lbnQiOwotCWNhc2UgLUVOWElPOgotCQlyZXR1cm4gIlVSQiBhbHJlYWR5IHF1ZXVlZCI7Ci0JY2FzZSAtRUFHQUlOOgotCQlyZXR1cm4gImlzb2Nocm9ub3VzIHN0YXJ0IGZyYW1lIHRvbyBlYXJseSBvciB0b28gbXVjaCBzY2hlZHVsZWQiOwotCWNhc2UgLUVGQklHOgotCQlyZXR1cm4gInRvbyBtYW55IGlzb2Nocm9ub3VzIGZyYW1lcyByZXF1ZXN0ZWQiOwotCWNhc2UgLUVNU0dTSVpFOgotCQlyZXR1cm4gImVuZHBvaW50IG1lc3NhZ2Ugc2l6ZSB6ZXJvIjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCQlyZXR1cm4gInVubGlua2VkIChhc3luYykiOwogCWNhc2UgLUVTSFVURE9XTjoKLQkJcmV0dXJuICJlbmRwb2ludCBzaHV0ZG93biI7Ci0JY2FzZSAtRUJVU1k6Ci0JCXJldHVybiAiYW5vdGhlciByZXF1ZXN0IHBlbmRpbmciOworCQlyZXR1cm4gImRldmljZSBzaHV0IGRvd24iOwogCWRlZmF1bHQ6Ci0JCXNucHJpbnRmKHVua21zZywgc2l6ZW9mKHVua21zZyksICJ1bmtub3duIGVycm9yICVkIiwgc3RhdHVzKTsKKwkJc25wcmludGYodW5rbXNnLCBzaXplb2YodW5rbXNnKSwgInVua25vd24gc3RhdHVzICVkIiwgc3RhdHVzKTsKIAkJcmV0dXJuIHVua21zZzsKIAl9CiB9CkBAIC0yMDgsNTMgKzI0MSw1NCBAQAogICogd3JpdGUgY29udGVudCBvZiBVUkIgdG8gc3lzbG9nIGZvciBkZWJ1Z2dpbmcKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfdXJiKGVudW0gZGVidWdsZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1cmIgKnVyYikKKwkJCSAgICBzdHJ1Y3QgdXJiICp1cmIpCiB7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAlpbnQgaTsKLQlJRk5VTExSRVQodGFnKTsKLQlkYmcobGV2ZWwsICIlcyB1cmIoMHglMDhseCktPnsiLCB0YWcsICh1bnNpZ25lZCBsb25nKSB1cmIpOworCWdpZ19kYmcobGV2ZWwsICIlcyB1cmIoMHglMDhseCktPnsiLCB0YWcsICh1bnNpZ25lZCBsb25nKSB1cmIpOwogCWlmICh1cmIpIHsKLQkJZGJnKGxldmVsLAotCQkgICAgIiAgZGV2PTB4JTA4bHgsIHBpcGU9JXM6RVAlZC9EViVkOiVzLCAiCi0JCSAgICAic3RhdHVzPSVkLCBoY3ByaXY9MHglMDhseCwgdHJhbnNmZXJfZmxhZ3M9MHgleCwiLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpIHVyYi0+ZGV2LAotCQkgICAgdXNiX3BpcGV0eXBlX3N0cih1cmItPnBpcGUpLAotCQkgICAgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLCB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLAotCQkgICAgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAotCQkgICAgdXJiLT5zdGF0dXMsICh1bnNpZ25lZCBsb25nKSB1cmItPmhjcHJpdiwKLQkJICAgIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCQlkYmcobGV2ZWwsCi0JCSAgICAiICB0cmFuc2Zlcl9idWZmZXI9MHglMDhseFslZF0sIGFjdHVhbF9sZW5ndGg9JWQsICIKLQkJICAgICJiYW5kd2lkdGg9JWQsIHNldHVwX3BhY2tldD0weCUwOGx4LCIsCi0JCSAgICAodW5zaWduZWQgbG9uZykgdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCwKLQkJICAgIHVyYi0+YmFuZHdpZHRoLCAodW5zaWduZWQgbG9uZykgdXJiLT5zZXR1cF9wYWNrZXQpOwotCQlkYmcobGV2ZWwsCi0JCSAgICAiICBzdGFydF9mcmFtZT0lZCwgbnVtYmVyX29mX3BhY2tldHM9JWQsIGludGVydmFsPSVkLCAiCi0JCSAgICAiZXJyb3JfY291bnQ9JWQsIiwKLQkJICAgIHVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMsIHVyYi0+aW50ZXJ2YWwsCi0JCSAgICB1cmItPmVycm9yX2NvdW50KTsKLQkJZGJnKGxldmVsLAotCQkgICAgIiAgY29udGV4dD0weCUwOGx4LCBjb21wbGV0ZT0weCUwOGx4LCBpc29fZnJhbWVfZGVzY1tdPXsiLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpIHVyYi0+Y29udGV4dCwKLQkJICAgICh1bnNpZ25lZCBsb25nKSB1cmItPmNvbXBsZXRlKTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIGRldj0weCUwOGx4LCBwaXBlPSVzOkVQJWQvRFYlZDolcywgIgorCQkJInN0YXR1cz0lZCwgaGNwcml2PTB4JTA4bHgsIHRyYW5zZmVyX2ZsYWdzPTB4JXgsIiwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cmItPmRldiwKKwkJCXVzYl9waXBldHlwZV9zdHIodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCXVyYi0+c3RhdHVzLCAodW5zaWduZWQgbG9uZykgdXJiLT5oY3ByaXYsCisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIHRyYW5zZmVyX2J1ZmZlcj0weCUwOGx4WyVkXSwgYWN0dWFsX2xlbmd0aD0lZCwgIgorCQkJImJhbmR3aWR0aD0lZCwgc2V0dXBfcGFja2V0PTB4JTA4bHgsIiwKKwkJCSh1bnNpZ25lZCBsb25nKSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJdXJiLT5iYW5kd2lkdGgsICh1bnNpZ25lZCBsb25nKSB1cmItPnNldHVwX3BhY2tldCk7CisJCWdpZ19kYmcobGV2ZWwsCisJCQkiICBzdGFydF9mcmFtZT0lZCwgbnVtYmVyX29mX3BhY2tldHM9JWQsIGludGVydmFsPSVkLCAiCisJCQkiZXJyb3JfY291bnQ9JWQsIiwKKwkJCXVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMsIHVyYi0+aW50ZXJ2YWwsCisJCQl1cmItPmVycm9yX2NvdW50KTsKKwkJZ2lnX2RiZyhsZXZlbCwKKwkJCSIgIGNvbnRleHQ9MHglMDhseCwgY29tcGxldGU9MHglMDhseCwgIgorCQkJImlzb19mcmFtZV9kZXNjW109eyIsCisJCQkodW5zaWduZWQgbG9uZykgdXJiLT5jb250ZXh0LAorCQkJKHVuc2lnbmVkIGxvbmcpIHVyYi0+Y29tcGxldGUpOwogCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGlmZCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOwotCQkJZGJnKGxldmVsLAotCQkJICAgICIgICAge29mZnNldD0ldSwgbGVuZ3RoPSV1LCBhY3R1YWxfbGVuZ3RoPSV1LCAiCi0JCQkgICAgInN0YXR1cz0ldX0iLAotCQkJICAgIHBpZmQtPm9mZnNldCwgcGlmZC0+bGVuZ3RoLCBwaWZkLT5hY3R1YWxfbGVuZ3RoLAotCQkJICAgIHBpZmQtPnN0YXR1cyk7CisJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGlmZAorCQkJCT0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCQlnaWdfZGJnKGxldmVsLAorCQkJCSIgICAge29mZnNldD0ldSwgbGVuZ3RoPSV1LCBhY3R1YWxfbGVuZ3RoPSV1LCAiCisJCQkJInN0YXR1cz0ldX0iLAorCQkJCXBpZmQtPm9mZnNldCwgcGlmZC0+bGVuZ3RoLCBwaWZkLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXBpZmQtPnN0YXR1cyk7CiAJCX0KIAl9Ci0JZGJnKGxldmVsLCAifX0iKTsKKwlnaWdfZGJnKGxldmVsLCAifX0iKTsKICNlbmRpZgogfQogCiAvKiByZWFkL3NldCBtb2RlbSBjb250cm9sIGJpdHMgZXRjLiAobTEweCBvbmx5KSAqLwogc3RhdGljIGludCBnaWdhc2V0X3NldF9tb2RlbV9jdHJsKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBvbGRfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3X3N0YXRlKQorCQkJCSAgdW5zaWduZWQgbmV3X3N0YXRlKQogewogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjgwLDQzICszMTQsMzkgQEAKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGJjcy0+Y3M7CiAKLQlkYmcoREVCVUdfQU5ZLAotCSAgICAiJXM6IHNjaGVkdWxpbmcgSFVQIGZvciBjaGFubmVsICVkIiwgX19mdW5jX18sIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19BTlksICIlczogc2NoZWR1bGluZyBIVVAgZm9yIGNoYW5uZWwgJWQiLAorCQlfX2Z1bmNfXywgYmNzLT5jaGFubmVsKTsKIAotCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLCBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKSB7Ci0JCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/Ci0JCXJldHVybjsKLQl9CisJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpCisJCWRldl9lcnIoY3MtPmRldiwgImV2ZW50IHF1ZXVlIGZ1bGxcbiIpOwogCiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiB9CiAKIC8qIGVycm9yX3Jlc2V0CiAgKiByZXNldCBHaWdhc2V0IGRldmljZSBiZWNhdXNlIG9mIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0IGFuZCB0YWtlcyBjYXJlIG9mIHNjaGVkdWxpbmcKLSAqIHRoZSBuZWNlc3NhcnkgYWN0aW9ucyBmb3IgZXhlY3V0aW9uIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQuCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCwgYW5kIHNob3VsZCB0YWtlIGNhcmUgb2YKKyAqIHNjaGVkdWxpbmcgdGhlIG5lY2Vzc2FyeSBhY3Rpb25zIGZvciBleGVjdXRpb24gb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIFJpZ2h0IG5vdywgaXQganVzdCBnZW5lcmF0ZXMgYSBrZXJuZWwgbWVzc2FnZSBjYWxsaW5nIGZvciBoZWxwLgogICogYXJndW1lbnQ6CiAgKgljb250cm9sbGVyIHN0YXRlIHN0cnVjdHVyZQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZXJyb3JfcmVzZXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7CiAJLy9GSVhNRSB0cnkgdG8gcmVjb3ZlciB3aXRob3V0IGJvdGhlcmluZyB0aGUgdXNlcgotCWVycigidW5yZWNvdmVyYWJsZSBlcnJvciAtIHBsZWFzZSBkaXNjb25uZWN0IHRoZSBHaWdhc2V0IGJhc2UgdG8gcmVzZXQiKTsKKwlkZXZfZXJyKGNzLT5kZXYsCisJICAgICJ1bnJlY292ZXJhYmxlIGVycm9yIC0gcGxlYXNlIGRpc2Nvbm5lY3QgR2lnYXNldCBiYXNlIHRvIHJlc2V0XG4iKTsKIH0KIAogLyogY2hlY2tfcGVuZGluZwogICogY2hlY2sgZm9yIGNvbXBsZXRpb24gb2YgcGVuZGluZyBjb250cm9sIHJlcXVlc3QKICAqIHBhcmFtZXRlcjoKLSAqCXVyYglVU0IgcmVxdWVzdCBibG9jayBvZiBjb21wbGV0ZWQgcmVxdWVzdAotICoJCXVyYi0+Y29udGV4dCA9IGhhcmR3YXJlIHNwZWNpZmljIGNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCisgKgl1Y3MJaGFyZHdhcmUgc3BlY2lmaWMgY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIHZvaWQgY2hlY2tfcGVuZGluZyhzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVQodWNzKTsKLQlJRk5VTExSRVQoY2FyZHN0YXRlKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAlzd2l0Y2ggKHVjcy0+cGVuZGluZykgewogCWNhc2UgMDoKQEAgLTMzNiw4ICszNjYsNiBAQAogCWNhc2UgSERfQ0xPU0VfQVRDSEFOTkVMOgogCQlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19BVE9QRU4pKQogCQkJdWNzLT5wZW5kaW5nID0gMDsKLQkJLy93YWtlX3VwX2ludGVycnVwdGlibGUoY3MtPmluaXR3YWl0KTsKLQkJLy9GSVhNRSBuZWVkIG93biB3YWl0IHF1ZXVlPwogCQlicmVhazsKIAljYXNlIEhEX0NMT1NFX0IxQ0hBTk5FTDoKIAkJaWYgKCEoYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpICYgQlNfQjFPUEVOKSkKQEAgLTM1NCw3ICszODIsOSBAQAogCSAqIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYW5kIHNob3VsZCBuZXZlciBlbmQgdXAgaGVyZQogCSAqLwogCWRlZmF1bHQ6Ci0JCXdhcm4oInVua25vd24gcGVuZGluZyByZXF1ZXN0IDB4JTAyeCBjbGVhcmVkIiwgdWNzLT5wZW5kaW5nKTsKKwkJZGV2X3dhcm4oJnVjcy0+aW50ZXJmYWNlLT5kZXYsCisJCQkgInVua25vd24gcGVuZGluZyByZXF1ZXN0IDB4JTAyeCBjbGVhcmVkXG4iLAorCQkJIHVjcy0+cGVuZGluZyk7CiAJCXVjcy0+cGVuZGluZyA9IDA7CiAJfQogCkBAIC0zNzIsNTggKzQwMiw1MyBAQAogc3RhdGljIHZvaWQgY21kX2luX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgZGF0YTsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KIAlpZiAoIXVjcy0+cmN2YnVmX3NpemUpIHsKLQkJZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzIiwgX19mdW5jX18pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKLQllcnIoInRpbWVvdXQgcmVhZGluZyBBVCByZXNwb25zZSIpOworCWRldl9lcnIoY3MtPmRldiwgInRpbWVvdXQgcmVhZGluZyBBVCByZXNwb25zZVxuIik7CiAJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJldHJ5PwogfQogCisvKiBzZXQvY2xlYXIgYml0cyBpbiBiYXNlIGNvbm5lY3Rpb24gc3RhdGUsIHJldHVybiBwcmV2aW91cyBzdGF0ZQorICovCitpbmxpbmUgc3RhdGljIGludCB1cGRhdGVfYmFzc3RhdGUoc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcywKKwkJCQkgIGludCBzZXQsIGludCBjbGVhcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0ZTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKKwlzdGF0ZSA9IGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKTsKKwlhdG9taWNfc2V0KCZ1Y3MtPmJhc3N0YXRlLCAoc3RhdGUgJiB+Y2xlYXIpIHwgc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc3RhdGU7Cit9CiAKIC8qIGF0cmVhZF9zdWJtaXQKLSAqIHN1Ym1pdCBhbiBIRF9SRUFEX0FUTUVTU0FHRSBjb21tYW5kIFVSQgorICogc3VibWl0IGFuIEhEX1JFQURfQVRNRVNTQUdFIGNvbW1hbmQgVVJCIGFuZCBvcHRpb25hbGx5IHN0YXJ0IGEgdGltZW91dAogICogcGFyYW1ldGVyczoKICAqCWNzCWNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCiAgKgl0aW1lb3V0CXRpbWVvdXQgaW4gMS8xMCBzZWMuLCAwOiBub25lCiAgKiByZXR1cm4gdmFsdWU6CiAgKgkwIG9uIHN1Y2Nlc3MKLSAqCS1FSU5WQUwgaWYgYSBOVUxMIHBvaW50ZXIgaXMgZW5jb3VudGVyZWQgc29tZXdoZXJlCiAgKgktRUJVU1kgaWYgYW5vdGhlciByZXF1ZXN0IGlzIHBlbmRpbmcKICAqCWFueSBVUkIgc3VibWlzc2lvbiBlcnJvciBjb2RlCiAgKi8KIHN0YXRpYyBpbnQgYXRyZWFkX3N1Ym1pdChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IHRpbWVvdXQpCiB7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAlpbnQgcmV0OwogCi0JSUZOVUxMUkVUVkFMKGNzLCAtRUlOVkFMKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1Y3MsIC1FSU5WQUwpOwotCUlGTlVMTFJFVFZBTCh1Y3MtPnVyYl9jbWRfaW4sIC1FSU5WQUwpOworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiLS0tLS0tLT4gSERfUkVBRF9BVE1FU1NBR0UgKCVkKSIsCisJCXVjcy0+cmN2YnVmX3NpemUpOwogCi0JZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1JFQURfQVRNRVNTQUdFICglZCkiLCB1Y3MtPnJjdmJ1Zl9zaXplKTsKLQotCWlmICh1Y3MtPnVyYl9jbWRfaW4tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX1JFQURfQVRNRVNTQUdFOiBVUkIgYnVzeSIpOworCWlmICh1cGRhdGVfYmFzc3RhdGUodWNzLCBCU19BVFJEUEVORCwgMCkgJiBCU19BVFJEUEVORCkgeworCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkiY291bGQgbm90IHN1Ym1pdCBIRF9SRUFEX0FUTUVTU0FHRTogVVJCIGJ1c3lcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNDMzLDE5ICs0NTgsMjAgQEAKIAl1Y3MtPmRyX2NtZF9pbi53SW5kZXggPSAwOwogCXVjcy0+ZHJfY21kX2luLndMZW5ndGggPSBjcHVfdG9fbGUxNih1Y3MtPnJjdmJ1Zl9zaXplKTsKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1Y3MtPnVyYl9jbWRfaW4sIHVjcy0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUodWNzLT51ZGV2LCAwKSwKLQkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopICYgdWNzLT5kcl9jbWRfaW4sCi0JICAgICAgICAgICAgICAgICAgICAgdWNzLT5yY3ZidWYsIHVjcy0+cmN2YnVmX3NpemUsCi0JICAgICAgICAgICAgICAgICAgICAgcmVhZF9jdHJsX2NhbGxiYWNrLCBjcy0+aW5idWYpOworCQkJICAgICB1c2JfcmN2Y3RybHBpcGUodWNzLT51ZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIqKSAmIHVjcy0+ZHJfY21kX2luLAorCQkJICAgICB1Y3MtPnJjdmJ1ZiwgdWNzLT5yY3ZidWZfc2l6ZSwKKwkJCSAgICAgcmVhZF9jdHJsX2NhbGxiYWNrLCBjcy0+aW5idWYpOwogCiAJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnVyYl9jbWRfaW4sIFNMQUJfQVRPTUlDKSkgIT0gMCkgewotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgSERfUkVBRF9BVE1FU1NBR0U6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKKwkJdXBkYXRlX2Jhc3N0YXRlKHVjcywgMCwgQlNfQVRSRFBFTkQpOworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3Qgc3VibWl0IEhEX1JFQURfQVRNRVNTQUdFOiAlc1xuIiwKKwkJCWdldF91c2Jfc3RhdG1zZyhyZXQpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAodGltZW91dCA+IDApIHsKLQkJZGJnKERFQlVHX1VTQlJFUSwgInNldHRpbmcgdGltZW91dCBvZiAlZC8xMCBzZWNzIiwgdGltZW91dCk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAic2V0dGluZyB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCB0aW1lb3V0KTsKIAkJdWNzLT50aW1lcl9jbWRfaW4uZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0ICogSFogLyAxMDsKIAkJdWNzLT50aW1lcl9jbWRfaW4uZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjczsKIAkJdWNzLT50aW1lcl9jbWRfaW4uZnVuY3Rpb24gPSBjbWRfaW5fdGltZW91dDsKQEAgLTQ1NCwyNiArNDgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3RvcHVyYnMoc3RydWN0IGJhc19iY19zdGF0ZSAqKTsKLXN0YXRpYyBpbnQgc3RhcnRfY2JzZW5kKHN0cnVjdCBjYXJkc3RhdGUgKik7Ci0KLS8qIHNldC9jbGVhciBiaXRzIGluIGJhc2UgY29ubmVjdGlvbiBzdGF0ZQotICovCi1pbmxpbmUgc3RhdGljIHZvaWQgdXBkYXRlX2Jhc3N0YXRlKHN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MsCi0JCQkJICAgaW50IHNldCwgaW50IGNsZWFyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHN0YXRlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOwotCXN0YXRlID0gYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpOwotCXN0YXRlICY9IH5jbGVhcjsKLQlzdGF0ZSB8PSBzZXQ7Ci0JYXRvbWljX3NldCgmdWNzLT5iYXNzdGF0ZSwgc3RhdGUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVjcy0+bG9jaywgZmxhZ3MpOwotfQotCi0KIC8qIHJlYWRfaW50X2NhbGxiYWNrCiAgKiBVU0IgY29tcGxldGlvbiBoYW5kbGVyIGZvciBpbnRlcnJ1cHQgcGlwZSBpbnB1dAogICogY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGluIGludGVycnVwdCBjb250ZXh0CkBAIC00ODMsNDggKzQ4OSw0OSBAQAogICovCiBzdGF0aWMgdm9pZCByZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CiAJc3RydWN0IGJjX3N0YXRlICpiY3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc3RhdHVzOworCWludCByYzsKIAl1bnNpZ25lZCBsOwogCWludCBjaGFubmVsOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGNzKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwotCi0JaWYgKHVubGlrZWx5KCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpKSB7Ci0JCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KIAkJYnJlYWs7Ci0JY2FzZSAtRU5PRU5UOgkJCS8qIGNhbmNlbGVkICovCi0JY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGVkIChhc3luYykgKi8KKwljYXNlIC1FTk9FTlQ6CQkJLyogY2FuY2VsbGVkICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGxlZCAoYXN5bmMpICovCiAJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBwZW5kaW5nICovCiAJCS8qIGlnbm9yZSBzaWxlbnRseSAqLwotCQlkYmcoREVCVUdfVVNCUkVRLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogJXMiLAorCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlyZXR1cm47CisJY2FzZSAtRU5PREVWOgkJCS8qIGRldmljZSByZW1vdmVkICovCisJY2FzZSAtRVNIVVRET1dOOgkJLyogZGV2aWNlIHNodXQgZG93biAqLworCQkvL0ZJWE1FIHVzZSB0aGlzIGFzIGRpc2Nvbm5lY3QgaW5kaWNhdG9yPworCQlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIiVzOiBkZXZpY2UgZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJZGVmYXVsdDoJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCXdhcm4oImludGVycnVwdCByZWFkOiAlcyIsIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiaW50ZXJydXB0IHJlYWQ6ICVzXG4iLAorCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkvL0ZJWE1FIGNvcnJlY3RpdmUgYWN0aW9uPyByZXN1Ym1pc3Npb24gYWx3YXlzIG9rPwogCQlnb3RvIHJlc3VibWl0OwogCX0KIAorCS8qIGRyb3AgaW5jb21wbGV0ZSBwYWNrZXRzIGV2ZW4gaWYgdGhlIG1pc3NpbmcgYnl0ZXMgd291bGRuJ3QgbWF0dGVyICovCisJaWYgKHVubGlrZWx5KHVyYi0+YWN0dWFsX2xlbmd0aCA8IDMpKSB7CisJCWRldl93YXJuKGNzLT5kZXYsICJpbmNvbXBsZXRlIGludGVycnVwdCBwYWNrZXQgKCVkIGJ5dGVzKVxuIiwKKwkJCSB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIHJlc3VibWl0OworCX0KKwogCWwgPSAodW5zaWduZWQpIHVjcy0+aW50X2luX2J1ZlsxXSArCiAJICAgICgoKHVuc2lnbmVkKSB1Y3MtPmludF9pbl9idWZbMl0pIDw8IDgpOwogCi0JZGJnKERFQlVHX1VTQlJFUSwKLQkgICAgIjwtLS0tLS0tJWQ6IDB4JTAyeCAoJXUgWzB4JTAyeCAweCUwMnhdKSIsIHVyYi0+YWN0dWFsX2xlbmd0aCwKLQkgICAgKGludCl1Y3MtPmludF9pbl9idWZbMF0sIGwsCi0JICAgIChpbnQpdWNzLT5pbnRfaW5fYnVmWzFdLCAoaW50KXVjcy0+aW50X2luX2J1ZlsyXSk7CisJZ2lnX2RiZyhERUJVR19VU0JSRVEsICI8LS0tLS0tLSVkOiAweCUwMnggKCV1IFsweCUwMnggMHglMDJ4XSkiLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsIChpbnQpdWNzLT5pbnRfaW5fYnVmWzBdLCBsLAorCQkoaW50KXVjcy0+aW50X2luX2J1ZlsxXSwgKGludCl1Y3MtPmludF9pbl9idWZbMl0pOwogCiAJY2hhbm5lbCA9IDA7CiAKQEAgLTU3MCw2MiArNTc3LDY4IEBACiAJY2FzZSBIRF9CMV9GTE9XX0NPTlRST0w6CiAJCWJjcyA9IGNzLT5iY3MgKyBjaGFubmVsOwogCQlhdG9taWNfYWRkKChsIC0gQkFTX05PUk1GUkFNRSkgKiBCQVNfQ09SUkZSQU1FUywKLQkJICAgICAgICAgICAmYmNzLT5ody5iYXMtPmNvcnJieXRlcyk7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiRmxvdyBjb250cm9sIChjaGFubmVsICVkLCBzdWIgJWQpOiAweCUwMnggPT4gJWQiLAotCQkgICAgY2hhbm5lbCwgYmNzLT5ody5iYXMtPm51bXN1YiwgbCwKLQkJICAgIGF0b21pY19yZWFkKCZiY3MtPmh3LmJhcy0+Y29ycmJ5dGVzKSk7CisJCQkgICAmYmNzLT5ody5iYXMtPmNvcnJieXRlcyk7CisJCWdpZ19kYmcoREVCVUdfSVNPLAorCQkJIkZsb3cgY29udHJvbCAoY2hhbm5lbCAlZCwgc3ViICVkKTogMHglMDJ4ID0+ICVkIiwKKwkJCWNoYW5uZWwsIGJjcy0+aHcuYmFzLT5udW1zdWIsIGwsCisJCQlhdG9taWNfcmVhZCgmYmNzLT5ody5iYXMtPmNvcnJieXRlcykpOwogCQlicmVhazsKIAogCWNhc2UgSERfUkVDRUlWRUFUREFUQV9BQ0s6CS8qIEFUIHJlc3BvbnNlIHJlYWR5IHRvIGJlIHJlY2VpdmVkICovCiAJCWlmICghbCkgewotCQkJd2FybigiSERfUkVDRUlWRUFUREFUQV9BQ0sgd2l0aCBsZW5ndGggMCBpZ25vcmVkIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSJIRF9SRUNFSVZFQVREQVRBX0FDSyB3aXRoIGxlbmd0aCAwIGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWlmICh1Y3MtPnJjdmJ1Zl9zaXplKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJZXJyKCJyZWNlaXZlIEFUIGRhdGEgb3ZlcnJ1biwgJWQgYnl0ZXMgbG9zdCIsIGwpOwotCQkJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJlc2NoZWR1bGUKLQkJCWJyZWFrOworCQkJLyogdGhyb3cgYXdheSBwcmV2aW91cyBidWZmZXIgLSB3ZSBoYXZlIG5vIHF1ZXVlICovCisJCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkJInJlY2VpdmUgQVQgZGF0YSBvdmVycnVuLCAlZCBieXRlcyBsb3N0XG4iLAorCQkJCXVjcy0+cmN2YnVmX3NpemUpOworCQkJa2ZyZWUodWNzLT5yY3ZidWYpOworCQkJdWNzLT5yY3ZidWZfc2l6ZSA9IDA7CiAJCX0KIAkJaWYgKCh1Y3MtPnJjdmJ1ZiA9IGttYWxsb2MobCwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQllcnIoIiVzOiBvdXQgb2YgbWVtb3J5LCAlZCBieXRlcyBsb3N0IiwgX19mdW5jX18sIGwpOwotCQkJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJlc2NoZWR1bGUKKwkJCWRldl9lcnIoY3MtPmRldiwgIm91dCBvZiBtZW1vcnkgcmVjZWl2aW5nIEFUIGRhdGFcbiIpOworCQkJZXJyb3JfcmVzZXQoY3MpOwogCQkJYnJlYWs7CiAJCX0KIAkJdWNzLT5yY3ZidWZfc2l6ZSA9IGw7CiAJCXVjcy0+cmV0cnlfY21kX2luID0gMDsKLQkJaWYgKChzdGF0dXMgPSBhdHJlYWRfc3VibWl0KGNzLCBCQVNfVElNRU9VVCkpIDwgMCkgeworCQlpZiAoKHJjID0gYXRyZWFkX3N1Ym1pdChjcywgQkFTX1RJTUVPVVQpKSA8IDApIHsKIAkJCWtmcmVlKHVjcy0+cmN2YnVmKTsKIAkJCXVjcy0+cmN2YnVmID0gTlVMTDsKIAkJCXVjcy0+cmN2YnVmX3NpemUgPSAwOwotCQkJZXJyb3JfcmVzZXQoY3MpOwkvL0ZJWE1FIHJlc2NoZWR1bGUKKwkJCWlmIChyYyAhPSAtRU5PREVWKQorCQkJCS8vRklYTUUgY29ycmVjdGl2ZSBhY3Rpb24/CisJCQkJZXJyb3JfcmVzZXQoY3MpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9SRVNFVF9JTlRFUlJVUFRfUElQRV9BQ0s6Ci0JCWRiZyhERUJVR19VU0JSRVEsICJIRF9SRVNFVF9JTlRFUlJVUFRfUElQRV9BQ0siKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJIRF9SRVNFVF9JTlRFUlJVUFRfUElQRV9BQ0siKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhEX1NVU1BFTkRfRU5EOgotCQlkYmcoREVCVUdfVVNCUkVRLCAiSERfU1VTUEVORF9FTkQiKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJIRF9TVVNQRU5EX0VORCIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oInVua25vd24gR2lnYXNldCBzaWduYWwgMHglMDJ4ICgldSkgaWdub3JlZCIsCi0JCSAgICAgKGludCkgdWNzLT5pbnRfaW5fYnVmWzBdLCBsKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSAidW5rbm93biBHaWdhc2V0IHNpZ25hbCAweCUwMnggKCV1KSBpZ25vcmVkXG4iLAorCQkJIChpbnQpIHVjcy0+aW50X2luX2J1ZlswXSwgbCk7CiAJfQogCiAJY2hlY2tfcGVuZGluZyh1Y3MpOwogCiByZXN1Ym1pdDoKLQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoc3RhdHVzKSkgewotCQllcnIoImNvdWxkIG5vdCByZXN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlcyIsCi0JCSAgICBnZXRfdXNiX3N0YXRtc2coc3RhdHVzKSk7CisJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkocmMgIT0gMCAmJiByYyAhPSAtRU5PREVWKSkgeworCQlkZXZfZXJyKGNzLT5kZXYsICJjb3VsZCBub3QgcmVzdWJtaXQgaW50ZXJydXB0IFVSQjogJXNcbiIsCisJCQlnZXRfdXNiX3JjbXNnKHJjKSk7CiAJCWVycm9yX3Jlc2V0KGNzKTsKIAl9CiB9CkBAIC02MzksMzEgKzY1MiwxNyBAQAogICovCiBzdGF0aWMgdm9pZCByZWFkX2N0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwotCXVuc2lnbmVkIG51bWJ5dGVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGluYnVmX3QgKmluYnVmOworCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGluYnVmLT5jczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAlpbnQgaGF2ZV9kYXRhID0gMDsKKwl1bnNpZ25lZCBudW1ieXRlczsKKwlpbnQgcmM7CiAKLQlJRk5VTExSRVQodXJiKTsKLQlpbmJ1ZiA9IChzdHJ1Y3QgaW5idWZfdCAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGluYnVmKTsKLQljcyA9IGluYnVmLT5jczsKLQlJRk5VTExSRVQoY3MpOwotCXVjcyA9IGNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHVjcyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQl3YXJuKCIlczogZGlzY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIDAsIEJTX0FUUkRQRU5EKTsKIAogCWlmICghdWNzLT5yY3ZidWZfc2l6ZSkgewotCQl3YXJuKCIlczogbm8gcmVjZWl2ZSBpbiBwcm9ncmVzcyIsIF9fZnVuY19fKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIiVzOiBubyByZWNlaXZlIGluIHByb2dyZXNzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3MywxMiArNjcyLDE0IEBACiAJY2FzZSAwOgkJCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLwogCQludW1ieXRlcyA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAkJaWYgKHVubGlrZWx5KG51bWJ5dGVzID09IDApKSB7Ci0JCQl3YXJuKCJjb250cm9sIHJlYWQ6IGVtcHR5IGJsb2NrIHJlY2VpdmVkIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiY29udHJvbCByZWFkOiBlbXB0eSBibG9jayByZWNlaXZlZFxuIik7CiAJCQlnb3RvIHJldHJ5OwogCQl9CiAJCWlmICh1bmxpa2VseShudW1ieXRlcyAhPSB1Y3MtPnJjdmJ1Zl9zaXplKSkgewotCQkJd2FybigiY29udHJvbCByZWFkOiByZWNlaXZlZCAlZCBjaGFycywgZXhwZWN0ZWQgJWQiLAotCQkJICAgICBudW1ieXRlcywgdWNzLT5yY3ZidWZfc2l6ZSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICAgICAgICJjb250cm9sIHJlYWQ6IHJlY2VpdmVkICVkIGNoYXJzLCBleHBlY3RlZCAlZFxuIiwKKwkJCQkgbnVtYnl0ZXMsIHVjcy0+cmN2YnVmX3NpemUpOwogCQkJaWYgKG51bWJ5dGVzID4gdWNzLT5yY3ZidWZfc2l6ZSkKIAkJCQludW1ieXRlcyA9IHVjcy0+cmN2YnVmX3NpemU7CiAJCX0KQEAgLTY5NCwyNyArNjk1LDMyIEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIC1FTk9FTlQ6CQkJLyogY2FuY2VsZWQgKi8KLQljYXNlIC1FQ09OTlJFU0VUOgkJLyogY2FuY2VsZWQgKGFzeW5jKSAqLworCWNhc2UgLUVOT0VOVDoJCQkvKiBjYW5jZWxsZWQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogY2FuY2VsbGVkIChhc3luYykgKi8KIAljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHBlbmRpbmcgKi8KKwljYXNlIC1FTk9ERVY6CQkJLyogZGV2aWNlIHJlbW92ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkZXZpY2Ugc2h1dCBkb3duICovCiAJCS8qIG5vIGFjdGlvbiBuZWNlc3NhcnkgKi8KLQkJZGJnKERFQlVHX1VTQlJFUSwKLQkJICAgICIlczogJXMiLCBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6ICVzIiwKKwkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgkJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCXdhcm4oImNvbnRyb2wgcmVhZDogJXMiLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgImNvbnRyb2wgcmVhZDogJXNcbiIsCisJCQkgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJcmV0cnk6CiAJCWlmICh1Y3MtPnJldHJ5X2NtZF9pbisrIDwgQkFTX1JFVFJZKSB7Ci0JCQlub3RpY2UoImNvbnRyb2wgcmVhZDogcmV0cnkgJWQiLCB1Y3MtPnJldHJ5X2NtZF9pbik7Ci0JCQlpZiAoYXRyZWFkX3N1Ym1pdChjcywgQkFTX1RJTUVPVVQpID49IDApIHsKLQkJCQkvKiByZXN1Ym1pdHRlZCAtIGJ5cGFzcyByZWd1bGFyIGV4aXQgYmxvY2sgKi8KLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCQkJZGV2X25vdGljZShjcy0+ZGV2LCAiY29udHJvbCByZWFkOiByZXRyeSAlZFxuIiwKKwkJCQkgICB1Y3MtPnJldHJ5X2NtZF9pbik7CisJCQlyYyA9IGF0cmVhZF9zdWJtaXQoY3MsIEJBU19USU1FT1VUKTsKKwkJCWlmIChyYyA+PSAwIHx8IHJjID09IC1FTk9ERVYpCisJCQkJLyogcmVzdWJtaXR0ZWQgb3IgZGlzY29ubmVjdGVkICovCisJCQkJLyogLSBieXBhc3MgcmVndWxhciBleGl0IGJsb2NrICovCiAJCQkJcmV0dXJuOwotCQkJfQogCQl9IGVsc2UgewotCQkJZXJyKCJjb250cm9sIHJlYWQ6IGdpdmluZyB1cCBhZnRlciAlZCB0cmllcyIsCi0JCQkgICAgdWNzLT5yZXRyeV9jbWRfaW4pOworCQkJZGV2X2Vycihjcy0+ZGV2LAorCQkJCSJjb250cm9sIHJlYWQ6IGdpdmluZyB1cCBhZnRlciAlZCB0cmllc1xuIiwKKwkJCQl1Y3MtPnJldHJ5X2NtZF9pbik7CiAJCX0KIAkJZXJyb3JfcmVzZXQoY3MpOwogCX0KQEAgLTcyMiw5ICs3MjgsOCBAQAogCWtmcmVlKHVjcy0+cmN2YnVmKTsKIAl1Y3MtPnJjdmJ1ZiA9IE5VTEw7CiAJdWNzLT5yY3ZidWZfc2l6ZSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaGF2ZV9kYXRhKSB7Ci0JCWRiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJfQogfQpAQCAtNzQzLDIxICs3NDgsMTkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCByYzsKIAotCUlGTlVMTFJFVCh1cmIpOwotCUlGTlVMTFJFVCh1cmItPmNvbnRleHQpOwotCUlGTlVMTFJFVChjYXJkc3RhdGUpOwotCiAJLyogc3RhdHVzIGNvZGVzIG5vdCB3b3J0aCBib3RoZXJpbmcgdGhlIHRhc2tsZXQgd2l0aCAqLwotCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8IHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8Ci0JICAgICAgICAgICAgIHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpIHsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICIlczogJXMiLCBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCQkgICAgIHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUyB8fAorCQkgICAgIHVyYi0+c3RhdHVzID09IC1FTk9ERVYgfHwKKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgeworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlcyIsCisJCQlfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CiAJCXJldHVybjsKIAl9CiAKLQliY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIHVyYi0+Y29udGV4dDsKKwliY3MgPSB1cmItPmNvbnRleHQ7CiAJdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWJjLT5pc29pbmxvY2ssIGZsYWdzKTsKIAlpZiAobGlrZWx5KHViYy0+aXNvaW5kb25lID09IE5VTEwpKSB7CkBAIC03NzAsMjEgKzc3MywyNCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQkFTX05VTUZSQU1FUzsgaSsrKSB7CiAJCQl1YmMtPmlzb2lubG9zdCArPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CiAJCQlpZiAodW5saWtlbHkodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gMCAmJgotCQkJCSAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSkgeworCQkJCSAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0KKwkJCQkJCQkJLUVJTlBST0dSRVNTKSkKIAkJCQl1YmMtPmxvc3RzdGF0dXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKLQkJCX0KIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CiAJCX0KIAkJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmdWJjLT5ydW5uaW5nKSkpIHsKLQkJCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwkvKiBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQkJLyogdXJiLT5kZXYgaXMgY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwkJCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwogCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKIAkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBCQVNfTlVNRlJBTUVTOwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBpc29jIHJlYWQgb3ZlcnJ1bi9yZXN1Ym1pdCIsIF9fZnVuY19fKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IGlzb2MgcmVhZCBvdmVycnVuL3Jlc3VibWl0IiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOwotCQkJaWYgKHVubGlrZWx5KHJjICE9IDApKSB7Ci0JCQkJZXJyKCJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkI6ICVzIiwKLQkJCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7CisJCQlpZiAodW5saWtlbHkocmMgIT0gMCAmJiByYyAhPSAtRU5PREVWKSkgeworCQkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LAorCQkJCQkiY291bGQgbm90IHJlc3VibWl0IGlzb2Nocm9ub3VzIHJlYWQgIgorCQkJCQkiVVJCOiAlc1xuIiwgZ2V0X3VzYl9yY21zZyhyYykpOwogCQkJCWR1bXBfdXJiKERFQlVHX0lTTywgImlzb2MgcmVhZCIsIHVyYik7CiAJCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQl9CkBAIC04MDYsMjMgKzgxMiwyMCBAQAogCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JSUZOVUxMUkVUKHVyYi0+Y29udGV4dCk7Ci0JSUZOVUxMUkVUKGNhcmRzdGF0ZSk7Ci0KIAkvKiBzdGF0dXMgY29kZXMgbm90IHdvcnRoIGJvdGhlcmluZyB0aGUgdGFza2xldCB3aXRoICovCi0JaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkgICAgICAgICAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkgewotCQlkYmcoREVCVUdfSVNPLAotCQkgICAgIiVzOiAlcyIsIF9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8CisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVOT0RFViB8fAorCQkgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6ICVzIiwKKwkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHBhc3MgVVJCIGNvbnRleHQgdG8gdGFza2xldCAqLwotCXVjeCA9IChzdHJ1Y3QgaXNvd191cmJjdHhfdCAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKHVjeC0+YmNzKTsKKwl1Y3ggPSB1cmItPmNvbnRleHQ7CiAJdWJjID0gdWN4LT5iY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAl1YmMtPmlzb291dG92ZmwgPSB1YmMtPmlzb291dGRvbmU7CkBAIC04NDEsMTUgKzg0NCwxMSBAQAogICovCiBzdGF0aWMgaW50IHN0YXJ0dXJicyhzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKIAlzdHJ1Y3QgdXJiICp1cmI7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCWludCBqLCBrOwogCWludCByYzsKIAotCUlGTlVMTFJFVFZBTChiY3MsIC1FRkFVTFQpOwotCXViYyA9IGJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1YmMsIC1FRkFVTFQpOwotCiAJLyogaW5pdGlhbGl6ZSBMMiByZWNlcHRpb24gKi8KIAlpZiAoYmNzLT5wcm90bzIgPT0gSVNETl9QUk9UT19MMl9IRExDKQogCQliY3MtPmlucHV0c3RhdGUgfD0gSU5TX2ZsYWdfaHVudDsKQEAgLTg1OSw3ICs4NTgsNiBAQAogCWZvciAoayA9IDA7IGsgPCBCQVNfSU5VUkJTOyBrKyspIHsKIAkJdXJiID0gdWJjLT5pc29pbnVyYnNba107CiAJCWlmICghdXJiKSB7Ci0JCQllcnIoImlzb2ludXJic1slZF09PU5VTEwiLCBrKTsKIAkJCXJjID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTg4MSwxMSArODc5LDggQEAKIAkJfQogCiAJCWR1bXBfdXJiKERFQlVHX0lTTywgIkluaXRpYWwgaXNvYyByZWFkIiwgdXJiKTsKLQkJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkIgJWQ6ICVzIiwKLQkJCSAgICBrLCBnZXRfdXNiX3N0YXRtc2cocmMpKTsKKwkJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpKSAhPSAwKQogCQkJZ290byBlcnJvcjsKLQkJfQogCX0KIAogCS8qIGluaXRpYWxpemUgTDIgdHJhbnNtaXNzaW9uICovCkBAIC04OTUsNyArODkwLDYgQEAKIAlmb3IgKGsgPSAwOyBrIDwgQkFTX09VVFVSQlM7ICsraykgewogCQl1cmIgPSB1YmMtPmlzb291dHVyYnNba10udXJiOwogCQlpZiAoIXVyYikgewotCQkJZXJyKCJpc29vdXR1cmJzWyVkXS51cmI9PU5VTEwiLCBrKTsKIAkJCXJjID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTkyMSwxMSArOTE1LDggQEAKIAlmb3IgKGsgPSAwOyBrIDwgMjsgKytrKSB7CiAJCWR1bXBfdXJiKERFQlVHX0lTTywgIkluaXRpYWwgaXNvYyB3cml0ZSIsIHVyYik7CiAJCXJjID0gdXNiX3N1Ym1pdF91cmIodWJjLT5pc29vdXR1cmJzW2tdLnVyYiwgU0xBQl9BVE9NSUMpOwotCQlpZiAocmMgIT0gMCkgewotCQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IGlzb2Nocm9ub3VzIHdyaXRlIFVSQiAlZDogJXMiLAotCQkJICAgIGssIGdldF91c2Jfc3RhdG1zZyhyYykpOworCQlpZiAocmMgIT0gMCkKIAkJCWdvdG8gZXJyb3I7Ci0JCX0KIAl9CiAJZHVtcF91cmIoREVCVUdfSVNPLCAiSW5pdGlhbCBpc29jIHdyaXRlIChmcmVlKSIsIHVyYik7CiAJdWJjLT5pc29vdXRmcmVlID0gJnViYy0+aXNvb3V0dXJic1syXTsKQEAgLTk0NiwyMCArOTM3LDIwIEBACiB7CiAJaW50IGssIHJjOwogCi0JSUZOVUxMUkVUKHViYyk7Ci0KIAlhdG9taWNfc2V0KCZ1YmMtPnJ1bm5pbmcsIDApOwogCiAJZm9yIChrID0gMDsgayA8IEJBU19JTlVSQlM7ICsraykgewogCQlyYyA9IHVzYl91bmxpbmtfdXJiKHViYy0+aXNvaW51cmJzW2tdKTsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiBpc29jIGlucHV0IFVSQiAlZCB1bmxpbmtlZCwgcmVzdWx0ID0gJWQiLAotCQkgICAgX19mdW5jX18sIGssIHJjKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkiJXM6IGlzb2MgaW5wdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlcyIsCisJCQlfX2Z1bmNfXywgaywgZ2V0X3VzYl9yY21zZyhyYykpOwogCX0KIAogCWZvciAoayA9IDA7IGsgPCBCQVNfT1VUVVJCUzsgKytrKSB7CiAJCXJjID0gdXNiX3VubGlua191cmIodWJjLT5pc29vdXR1cmJzW2tdLnVyYik7Ci0JCWRiZyhERUJVR19JU08sICIlczogaXNvYyBvdXRwdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlZCIsCi0JCSAgICBfX2Z1bmNfXywgaywgcmMpOworCQlnaWdfZGJnKERFQlVHX0lTTywKKwkJCSIlczogaXNvYyBvdXRwdXQgVVJCICVkIHVubGlua2VkLCByZXN1bHQgPSAlcyIsCisJCQlfX2Z1bmNfXywgaywgZ2V0X3VzYl9yY21zZyhyYykpOwogCX0KIH0KIApAQCAtOTY5LDcgKzk2MCw3IEBACiAvKiBzdWJtaXRfaXNvX3dyaXRlX3VyYgogICogZmlsbCBhbmQgc3VibWl0IHRoZSBuZXh0IGlzb2Nocm9ub3VzIHdyaXRlIFVSQgogICogcGFyYW1ldGVyczoKLSAqCWJjcwlCIGNoYW5uZWwgc3RhdGUgc3RydWN0dXJlCisgKgl1Y3gJY29udGV4dCBzdHJ1Y3R1cmUgY29udGFpbmluZyBVUkIKICAqIHJldHVybiB2YWx1ZToKICAqCW51bWJlciBvZiBmcmFtZXMgc3VibWl0dGVkIGluIFVSQgogICoJMCBpZiBVUkIgbm90IHN1Ym1pdHRlZCBiZWNhdXNlIG5vIGRhdGEgYXZhaWxhYmxlIChpc29vdXRidWYgYnVzeSkKQEAgLTk3NywxOSArOTY4LDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgc3VibWl0X2lzb193cml0ZV91cmIoc3RydWN0IGlzb3dfdXJiY3R4X3QgKnVjeCkKIHsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOworCXN0cnVjdCB1cmIgKnVyYiA9IHVjeC0+dXJiOworCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IHVjeC0+YmNzLT5ody5iYXM7CiAJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlmZDsKIAlpbnQgY29ycmJ5dGVzLCBuZnJhbWUsIHJjOwogCi0JSUZOVUxMUkVUVkFMKHVjeCwgLUVGQVVMVCk7Ci0JdXJiID0gdWN4LT51cmI7Ci0JSUZOVUxMUkVUVkFMKHVyYiwgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHVjeC0+YmNzLCAtRUZBVUxUKTsKLQl1YmMgPSB1Y3gtPmJjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1YmMsIC1FRkFVTFQpOwotCi0JdXJiLT5kZXYgPSB1Y3gtPmJjcy0+Y3MtPmh3LmJhcy0+dWRldjsJLyogY2xvYmJlcmVkIGJ5IFVTQiBzdWJzeXN0ZW0gKi8KKwkvKiB1cmItPmRldiBpcyBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCXVyYi0+ZGV2ID0gdWN4LT5iY3MtPmNzLT5ody5iYXMtPnVkZXY7CiAJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHViYy0+aXNvb3V0YnVmLT5kYXRhOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZih1YmMtPmlzb291dGJ1Zi0+ZGF0YSk7CkBAIC0xMDAwLDcgKzk4NSw4IEBACiAJCS8qIGNvbXB1dGUgZnJhbWUgbGVuZ3RoIGFjY29yZGluZyB0byBmbG93IGNvbnRyb2wgKi8KIAkJaWZkLT5sZW5ndGggPSBCQVNfTk9STUZSQU1FOwogCQlpZiAoKGNvcnJieXRlcyA9IGF0b21pY19yZWFkKCZ1YmMtPmNvcnJieXRlcykpICE9IDApIHsKLQkJCWRiZyhERUJVR19JU08sICIlczogY29ycmJ5dGVzPSVkIiwgX19mdW5jX18sIGNvcnJieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBjb3JyYnl0ZXM9JWQiLAorCQkJCV9fZnVuY19fLCBjb3JyYnl0ZXMpOwogCQkJaWYgKGNvcnJieXRlcyA+IEJBU19ISUdIRlJBTUUgLSBCQVNfTk9STUZSQU1FKQogCQkJCWNvcnJieXRlcyA9IEJBU19ISUdIRlJBTUUgLSBCQVNfTk9STUZSQU1FOwogCQkJZWxzZSBpZiAoY29ycmJ5dGVzIDwgQkFTX0xPV0ZSQU1FIC0gQkFTX05PUk1GUkFNRSkKQEAgLTEwMDgsMTggKzk5NCwyMSBAQAogCQkJaWZkLT5sZW5ndGggKz0gY29ycmJ5dGVzOwogCQkJYXRvbWljX2FkZCgtY29ycmJ5dGVzLCAmdWJjLT5jb3JyYnl0ZXMpOwogCQl9Ci0JCS8vZGJnKERFQlVHX0lTTywgIiVzOiBmcmFtZSAlZCBsZW5ndGg9JWQiLCBfX2Z1bmNfXywgbmZyYW1lLCBpZmQtPmxlbmd0aCk7CiAKIAkJLyogcmV0cmlldmUgYmxvY2sgb2YgZGF0YSB0byBzZW5kICovCi0JCWlmZC0+b2Zmc2V0ID0gZ2lnYXNldF9pc293YnVmX2dldGJ5dGVzKHViYy0+aXNvb3V0YnVmLCBpZmQtPmxlbmd0aCk7CisJCWlmZC0+b2Zmc2V0ID0gZ2lnYXNldF9pc293YnVmX2dldGJ5dGVzKHViYy0+aXNvb3V0YnVmLAorCQkJCQkJICAgICAgIGlmZC0+bGVuZ3RoKTsKIAkJaWYgKGlmZC0+b2Zmc2V0IDwgMCkgewogCQkJaWYgKGlmZC0+b2Zmc2V0ID09IC1FQlVTWSkgewotCQkJCWRiZyhERUJVR19JU08sICIlczogYnVmZmVyIGJ1c3kgYXQgZnJhbWUgJWQiLAotCQkJCSAgICBfX2Z1bmNfXywgbmZyYW1lKTsKLQkJCQkvKiB0YXNrbGV0IHdpbGwgYmUgcmVzdGFydGVkIGZyb20gZ2lnYXNldF9zZW5kX3NrYigpICovCisJCQkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkJCSIlczogYnVmZmVyIGJ1c3kgYXQgZnJhbWUgJWQiLAorCQkJCQlfX2Z1bmNfXywgbmZyYW1lKTsKKwkJCQkvKiB0YXNrbGV0IHdpbGwgYmUgcmVzdGFydGVkIGZyb20KKwkJCQkgICBnaWdhc2V0X3NlbmRfc2tiKCkgKi8KIAkJCX0gZWxzZSB7Ci0JCQkJZXJyKCIlczogYnVmZmVyIGVycm9yICVkIGF0IGZyYW1lICVkIiwKLQkJCQkgICAgX19mdW5jX18sIGlmZC0+b2Zmc2V0LCBuZnJhbWUpOworCQkJCWRldl9lcnIodWN4LT5iY3MtPmNzLT5kZXYsCisJCQkJCSIlczogYnVmZmVyIGVycm9yICVkIGF0IGZyYW1lICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaWZkLT5vZmZzZXQsIG5mcmFtZSk7CiAJCQkJcmV0dXJuIGlmZC0+b2Zmc2V0OwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMDI4LDE1ICsxMDE3LDIyIEBACiAJCWlmZC0+c3RhdHVzID0gMDsKIAkJaWZkLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAl9Ci0JaWYgKCh1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbmZyYW1lKSA+IDApIHsKLQkJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgd3JpdGUgVVJCOiAlcyIsCi0JCQkgICAgZ2V0X3VzYl9zdGF0bXNnKHJjKSk7Ci0JCQlkdW1wX3VyYihERUJVR19JU08sICJpc29jIHdyaXRlIiwgdXJiKTsKLQkJCXJldHVybiByYzsKLQkJfQotCQkrK3ViYy0+bnVtc3ViOworCWlmICh1bmxpa2VseShuZnJhbWUgPT0gMCkpCisJCXJldHVybiAwOwkvKiBubyBkYXRhIHRvIHNlbmQgKi8KKwl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbmZyYW1lOworCisJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCWlmIChyYyA9PSAtRU5PREVWKQorCQkJLyogZGV2aWNlIHJlbW92ZWQgLSBnaXZlIHVwIHNpbGVudGx5ICovCisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRldl9lcnIodWN4LT5iY3MtPmNzLT5kZXYsCisJCQkJImNvdWxkIG5vdCBzdWJtaXQgaXNvY2hyb25vdXMgd3JpdGUgVVJCOiAlc1xuIiwKKwkJCQlnZXRfdXNiX3JjbXNnKHJjKSk7CisJCXJldHVybiByYzsKIAl9CisJKyt1YmMtPm51bXN1YjsKIAlyZXR1cm4gbmZyYW1lOwogfQogCkBAIC0xMDQ4LDkgKzEwNDQsOSBAQAogICovCiBzdGF0aWMgdm9pZCB3cml0ZV9pc29fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGJjX3N0YXRlICpiY3M7Ci0Jc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOworCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOworCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYyA9IGJjcy0+aHcuYmFzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYmNzLT5jczsKIAlzdHJ1Y3QgaXNvd191cmJjdHhfdCAqZG9uZSwgKm5leHQsICpvdmZsOwogCXN0cnVjdCB1cmIgKnVyYjsKIAlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaWZkOwpAQCAtMTA1OSwyMyArMTA1NSwxMiBAQAogCWludCBpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGxlbjsKLQotCWJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKLQlJRk5VTExSRVQoYmNzKTsKLQl1YmMgPSBiY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWJjKTsKLQljcyA9IGJjcy0+Y3M7Ci0JSUZOVUxMUkVUKGNzKTsKKwlpbnQgcmM7CiAKIAkvKiBsb29wIHdoaWxlIGNvbXBsZXRlZCBVUkJzIGFycml2ZSBpbiB0aW1lICovCiAJZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkpIHsKLQkJCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQogCQlpZiAodW5saWtlbHkoIShhdG9taWNfcmVhZCgmdWJjLT5ydW5uaW5nKSkpKSB7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IG5vdCBydW5uaW5nIiwgX19mdW5jX18pOworCQkJZ2lnX2RiZyhERUJVR19JU08sICIlczogbm90IHJ1bm5pbmciLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTA4Nyw3ICsxMDcyLDcgQEAKIAkJdWJjLT5pc29vdXRvdmZsID0gTlVMTDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJCWlmIChvdmZsKSB7Ci0JCQllcnIoImlzb2Nocm9ub3VzIHdyaXRlIGJ1ZmZlciB1bmRlcnJ1biAtIGJ1eSBhIGZhc3RlciBtYWNoaW5lIDotKSIpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgd3JpdGUgYnVmZmVyIHVuZGVycnVuXG4iKTsKIAkJCWVycm9yX2hhbmd1cChiY3MpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTExMDAsNyArMTA4NSw4IEBACiAJCXViYy0+aXNvb3V0ZnJlZSA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnViYy0+aXNvb3V0bG9jaywgZmxhZ3MpOwogCQlpZiAobmV4dCkgewotCQkJaWYgKHN1Ym1pdF9pc29fd3JpdGVfdXJiKG5leHQpIDw9IDApIHsKKwkJCXJjID0gc3VibWl0X2lzb193cml0ZV91cmIobmV4dCk7CisJCQlpZiAodW5saWtlbHkocmMgPD0gMCAmJiByYyAhPSAtRU5PREVWKSkgewogCQkJCS8qIGNvdWxkIG5vdCBzdWJtaXQgVVJCLCBwdXQgaXQgYmFjayAqLwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ1YmMtPmlzb291dGxvY2ssIGZsYWdzKTsKIAkJCQlpZiAodWJjLT5pc29vdXRmcmVlID09IE5VTEwpIHsKQEAgLTExMTAsNyArMTA5Niw4IEBACiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJCQkJaWYgKG5leHQpIHsKIAkJCQkJLyogY291bGRuJ3QgcHV0IGl0IGJhY2sgKi8KLQkJCQkJZXJyKCJsb3NpbmcgaXNvY2hyb25vdXMgd3JpdGUgVVJCIik7CisJCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJICAgICAgImxvc2luZyBpc29jaHJvbm91cyB3cml0ZSBVUkJcbiIpOwogCQkJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCQl9CiAJCQl9CkBAIC0xMTE5LDI2ICsxMTA2LDMwIEBACiAJCS8qIHByb2Nlc3MgY29tcGxldGVkIFVSQiAqLwogCQl1cmIgPSBkb25lLT51cmI7CiAJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAtRVhERVY6CQkJLyogcGFydGlhbCBjb21wbGV0aW9uICovCisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgcGFydGlhbGx5IGNvbXBsZXRlZCIsCisJCQkJX19mdW5jX18pOworCQkJLyogZmFsbCB0aHJvdWdoIC0gd2hhdCdzIHRoZSBkaWZmZXJlbmNlIGFueXdheT8gKi8KIAkJY2FzZSAwOgkJCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVYREVWOgkJCS8qIGluc3BlY3QgaW5kaXZpZHVhbCBmcmFtZXMgKi8KLQkJCS8qIGFzc3VtcHRpb25zIChmb3IgbGFjayBvZiBkb2N1bWVudGF0aW9uKToKLQkJCSAqIC0gYWN0dWFsX2xlbmd0aCBieXRlcyBvZiB0aGUgZnJhbWUgaW4gZXJyb3IgYXJlIHN1Y2Nlc3NmdWxseSBzZW50CisJCQkvKiBpbnNwZWN0IGluZGl2aWR1YWwgZnJhbWVzCisJCQkgKiBhc3N1bXB0aW9ucyAoZm9yIGxhY2sgb2YgZG9jdW1lbnRhdGlvbik6CisJCQkgKiAtIGFjdHVhbF9sZW5ndGggYnl0ZXMgb2YgZmlyc3QgZnJhbWUgaW4gZXJyb3IgYXJlCisJCQkgKiAgIHN1Y2Nlc3NmdWxseSBzZW50CiAJCQkgKiAtIGFsbCBmb2xsb3dpbmcgZnJhbWVzIGFyZSBub3Qgc2VudCBhdCBhbGwKIAkJCSAqLwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgcGFydGlhbGx5IGNvbXBsZXRlZCIsIF9fZnVuY19fKTsKLQkJCW9mZnNldCA9IGRvbmUtPmxpbWl0OwkvKiBqdXN0IGluIGNhc2UgKi8KKwkJCW9mZnNldCA9IGRvbmUtPmxpbWl0OwkvKiBkZWZhdWx0IChubyBlcnJvcikgKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBCQVNfTlVNRlJBTUVTOyBpKyspIHsKIAkJCQlpZmQgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKIAkJCQlpZiAoaWZkLT5zdGF0dXMgfHwKIAkJCQkgICAgaWZkLT5hY3R1YWxfbGVuZ3RoICE9IGlmZC0+bGVuZ3RoKSB7Ci0JCQkJCXdhcm4oImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKLQkJCQkJICAgICAib25seSAlZCBvZiAlZCBieXRlcyBzZW50IiwKKwkJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICAgICAiaXNvY2hyb25vdXMgd3JpdGU6IGZyYW1lICVkOiAlcywgIgorCQkJCQkgICAgICJvbmx5ICVkIG9mICVkIGJ5dGVzIHNlbnRcbiIsCiAJCQkJCSAgICAgaSwgZ2V0X3VzYl9zdGF0bXNnKGlmZC0+c3RhdHVzKSwKIAkJCQkJICAgICBpZmQtPmFjdHVhbF9sZW5ndGgsIGlmZC0+bGVuZ3RoKTsKIAkJCQkJb2Zmc2V0ID0gKGlmZC0+b2Zmc2V0ICsKLQkJCQkJICAgICAgICAgIGlmZC0+YWN0dWFsX2xlbmd0aCkKLQkJCQkJICAgICAgICAgJSBCQVNfT1VUQlVGU0laRTsKKwkJCQkJCSAgaWZkLT5hY3R1YWxfbGVuZ3RoKQorCQkJCQkJICUgQkFTX09VVEJVRlNJWkU7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTExNDgsMjUgKzExMzksMjYgQEAKIAkJCQlpZmQgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKIAkJCQlpZiAoaWZkLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTCiAJCQkJICAgIHx8IGlmZC0+YWN0dWFsX2xlbmd0aCAhPSAwKSB7Ci0JCQkJCXdhcm4oImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKLQkJCQkJICAgICAiJWQgb2YgJWQgYnl0ZXMgc2VudCIsCisJCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAgICAgImlzb2Nocm9ub3VzIHdyaXRlOiBmcmFtZSAlZDogJXMsICIKKwkJCQkJICAgICAiJWQgb2YgJWQgYnl0ZXMgc2VudFxuIiwKIAkJCQkJICAgICBpLCBnZXRfdXNiX3N0YXRtc2coaWZkLT5zdGF0dXMpLAogCQkJCQkgICAgIGlmZC0+YWN0dWFsX2xlbmd0aCwgaWZkLT5sZW5ndGgpOwogCQkJCQlvZmZzZXQgPSAoaWZkLT5vZmZzZXQgKwotCQkJCQkgICAgICAgICAgaWZkLT5hY3R1YWxfbGVuZ3RoKQotCQkJCQkgICAgICAgICAlIEJBU19PVVRCVUZTSVpFOworCQkJCQkJICBpZmQtPmFjdHVhbF9sZW5ndGgpCisJCQkJCQkgJSBCQVNfT1VUQlVGU0laRTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQogI2VuZGlmCiAJCQlicmVhazsKLQkJY2FzZSAtRVBJUEU6CQkJLy9GSVhNRSBpcyB0aGlzIHRoZSBjb2RlIGZvciAidW5kZXJydW4iPwotCQkJZXJyKCJpc29jaHJvbm91cyB3cml0ZSBzdGFsbGVkIik7CisJCWNhc2UgLUVQSVBFOgkJCS8qIHN0YWxsIC0gcHJvYmFibHkgdW5kZXJydW4gKi8KKwkJCWRldl9lcnIoY3MtPmRldiwgImlzb2Nocm9ub3VzIHdyaXRlIHN0YWxsZWRcbiIpOwogCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoJCQkvKiBzZXZlcmUgdHJvdWJsZSAqLwotCQkJd2FybigiaXNvY2hyb25vdXMgd3JpdGU6ICVzIiwKLQkJCSAgICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LCAiaXNvY2hyb25vdXMgd3JpdGU6ICVzXG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJfQogCiAJCS8qIG1hcmsgdGhlIHdyaXRlIGJ1ZmZlciBhcmVhIGNvdmVyZWQgYnkgdGhpcyBVUkIgYXMgZnJlZSAqLwpAQCAtMTE4MCw3ICsxMTcyLDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29vdXRsb2NrLCBmbGFncyk7CiAJCWlmIChuZXh0KSB7CiAJCQkvKiBvbmx5IG9uZSBVUkIgc3RpbGwgYWN0aXZlIC0gcmVzdWJtaXQgb25lICovCi0JCQlpZiAoc3VibWl0X2lzb193cml0ZV91cmIobmV4dCkgPD0gMCkgeworCQkJcmMgPSBzdWJtaXRfaXNvX3dyaXRlX3VyYihuZXh0KTsKKwkJCWlmICh1bmxpa2VseShyYyA8PSAwICYmIHJjICE9IC1FTk9ERVYpKSB7CiAJCQkJLyogY291bGRuJ3Qgc3VibWl0ICovCiAJCQkJZXJyb3JfaGFuZ3VwKGJjcyk7CiAJCQl9CkBAIC0xMTk0LDggKzExODcsOCBAQAogCQlpZiAoZ2lnYXNldF9pc29jX2J1aWxkZnJhbWUoYmNzLCBza2ItPmRhdGEsIGxlbikgPT0gLUVBR0FJTikgewogCQkJLyogaW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSwgcHVzaCBiYWNrIG9udG8gcXVldWUgKi8KIAkJCXNrYl9xdWV1ZV9oZWFkKCZiY3MtPnNxdWV1ZSwgc2tiKTsKLQkJCWRiZyhERUJVR19JU08sICIlczogc2tiIHJlcXVldWVkLCBxbGVuPSVkIiwKLQkJCSAgICBfX2Z1bmNfXywgc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKTsKKwkJCWdpZ19kYmcoREVCVUdfSVNPLCAiJXM6IHNrYiByZXF1ZXVlZCwgcWxlbj0lZCIsCisJCQkJX19mdW5jX18sIHNrYl9xdWV1ZV9sZW4oJmJjcy0+c3F1ZXVlKSk7CiAJCQlicmVhazsKIAkJfQogCQlza2JfcHVsbChza2IsIGxlbik7CkBAIC0xMjE1LDI4ICsxMjA4LDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlYWRfaXNvX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKKwlzdHJ1Y3QgYmNfc3RhdGUgKmJjcyA9IChzdHJ1Y3QgYmNfc3RhdGUgKikgZGF0YTsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGJjcy0+Y3M7CiAJc3RydWN0IHVyYiAqdXJiOwogCWNoYXIgKnJjdmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0b3RsZWZ0LCBudW1ieXRlcywgb2Zmc2V0LCBmcmFtZSwgcmM7CiAKLQliY3MgPSAoc3RydWN0IGJjX3N0YXRlICopIGRhdGE7Ci0JSUZOVUxMUkVUKGJjcyk7Ci0JdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7Ci0JY3MgPSBiY3MtPmNzOwotCUlGTlVMTFJFVChjcyk7Ci0KIAkvKiBsb29wIHdoaWxlIG1vcmUgY29tcGxldGVkIFVSQnMgYXJyaXZlIGluIHRoZSBtZWFudGltZSAqLwogCWZvciAoOzspIHsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJCXdhcm4oIiVzOiBkaXNjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQogCQkvKiByZXRyaWV2ZSBVUkIgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnViYy0+aXNvaW5sb2NrLCBmbGFncyk7CiAJCWlmICghKHVyYiA9IHViYy0+aXNvaW5kb25lKSkgewpAQCAtMTI0NSwzOCArMTIyNiw0NCBAQAogCQl9CiAJCXViYy0+aXNvaW5kb25lID0gTlVMTDsKIAkJaWYgKHVubGlrZWx5KHViYy0+bG9zdHN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpKSB7Ci0JCQl3YXJuKCJpc29jaHJvbm91cyByZWFkIG92ZXJydW4sIGRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcywgJWQgYnl0ZXMgbG9zdCIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1YmMtPmxvc3RzdGF0dXMpLCB1YmMtPmlzb2lubG9zdCk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiaXNvY2hyb25vdXMgcmVhZCBvdmVycnVuLCAiCisJCQkJICJkcm9wcGVkIFVSQiB3aXRoIHN0YXR1czogJXMsICVkIGJ5dGVzIGxvc3RcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1YmMtPmxvc3RzdGF0dXMpLAorCQkJCSB1YmMtPmlzb2lubG9zdCk7CiAJCQl1YmMtPmxvc3RzdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJjLT5pc29pbmxvY2ssIGZsYWdzKTsKIAogCQlpZiAodW5saWtlbHkoIShhdG9taWNfcmVhZCgmdWJjLT5ydW5uaW5nKSkpKSB7Ci0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IGNoYW5uZWwgbm90IHJ1bm5pbmcsIGRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcyIsCi0JCQkgICAgX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkJZ2lnX2RiZyhERUJVR19JU08sCisJCQkJIiVzOiBjaGFubmVsIG5vdCBydW5uaW5nLCAiCisJCQkJImRyb3BwZWQgVVJCIHdpdGggc3RhdHVzOiAlcyIsCisJCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJc3dpdGNoICh1cmItPnN0YXR1cykgewogCQljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCiAJCQlicmVhazsKLQkJY2FzZSAtRVhERVY6CQkJLyogaW5zcGVjdCBpbmRpdmlkdWFsIGZyYW1lcyAod2UgZG8gdGhhdCBhbnl3YXkpICovCi0JCQlkYmcoREVCVUdfSVNPLCAiJXM6IFVSQiBwYXJ0aWFsbHkgY29tcGxldGVkIiwgX19mdW5jX18pOworCQljYXNlIC1FWERFVjoJCQkvKiBpbnNwZWN0IGluZGl2aWR1YWwgZnJhbWVzCisJCQkJCQkgICAod2UgZG8gdGhhdCBhbnl3YXkpICovCisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgcGFydGlhbGx5IGNvbXBsZXRlZCIsCisJCQkJX19mdW5jX18pOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVOT0VOVDoKIAkJY2FzZSAtRUNPTk5SRVNFVDoKLQkJCWRiZyhERUJVR19JU08sICIlczogVVJCIGNhbmNlbGVkIiwgX19mdW5jX18pOwotCQkJY29udGludWU7CQkvKiAtPiBza2lwICovCi0JCWNhc2UgLUVJTlBST0dSRVNTOgkJLyogaHVoPyAqLwotCQkJZGJnKERFQlVHX0lTTywgIiVzOiBVUkIgc3RpbGwgcGVuZGluZyIsIF9fZnVuY19fKTsKKwkJY2FzZSAtRUlOUFJPR1JFU1M6CisJCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlcyIsCisJCQkJX19mdW5jX18sIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkJY29udGludWU7CQkvKiAtPiBza2lwICovCiAJCWNhc2UgLUVQSVBFOgotCQkJZXJyKCJpc29jaHJvbm91cyByZWFkIHN0YWxsZWQiKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgImlzb2Nocm9ub3VzIHJlYWQgc3RhbGxlZFxuIik7CiAJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJCWNvbnRpbnVlOwkJLyogLT4gc2tpcCAqLwogCQlkZWZhdWx0OgkJCS8qIHNldmVyZSB0cm91YmxlICovCi0JCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiAlcyIsCi0JCQkgICAgIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOworCQkJZGV2X3dhcm4oY3MtPmRldiwgImlzb2Nocm9ub3VzIHJlYWQ6ICVzXG4iLAorCQkJCSBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIApAQCAtMTI4NCwzMyArMTI3MSw0NCBAQAogCQl0b3RsZWZ0ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQlmb3IgKGZyYW1lID0gMDsgdG90bGVmdCA+IDAgJiYgZnJhbWUgPCBCQVNfTlVNRlJBTUVTOyBmcmFtZSsrKSB7CiAJCQlpZiAodW5saWtlbHkodXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzKSkgewotCQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAlcyIsCi0JCQkJICAgICBmcmFtZSwgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLnN0YXR1cykpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICVzXG4iLAorCQkJCQkgZnJhbWUsCisJCQkJCSBnZXRfdXNiX3N0YXRtc2coCisJCQkJCSAgICB1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5zdGF0dXMpKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW51bWJ5dGVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uYWN0dWFsX2xlbmd0aDsKIAkJCWlmICh1bmxpa2VseShudW1ieXRlcyA+IEJBU19NQVhGUkFNRSkpIHsKLQkJCQl3YXJuKCJpc29jaHJvbm91cyByZWFkOiBmcmFtZSAlZDogbnVtYnl0ZXMgKCVkKSA+IEJBU19NQVhGUkFNRSIsCi0JCQkJICAgICBmcmFtZSwgbnVtYnl0ZXMpOworCQkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6ICIKKwkJCQkJICJudW1ieXRlcyAoJWQpID4gQkFTX01BWEZSQU1FXG4iLAorCQkJCQkgZnJhbWUsIG51bWJ5dGVzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmICh1bmxpa2VseShudW1ieXRlcyA+IHRvdGxlZnQpKSB7Ci0JCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogZnJhbWUgJWQ6IG51bWJ5dGVzICglZCkgPiB0b3RsZWZ0ICglZCkiLAotCQkJCSAgICAgZnJhbWUsIG51bWJ5dGVzLCB0b3RsZWZ0KTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAiCisJCQkJCSAibnVtYnl0ZXMgKCVkKSA+IHRvdGxlZnQgKCVkKVxuIiwKKwkJCQkJIGZyYW1lLCBudW1ieXRlcywgdG90bGVmdCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlvZmZzZXQgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5vZmZzZXQ7CiAJCQlpZiAodW5saWtlbHkob2Zmc2V0ICsgbnVtYnl0ZXMgPiBCQVNfSU5CVUZTSVpFKSkgewotCQkJCXdhcm4oImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiBvZmZzZXQgKCVkKSArIG51bWJ5dGVzICglZCkgPiBCQVNfSU5CVUZTSVpFIiwKLQkJCQkgICAgIGZyYW1lLCBvZmZzZXQsIG51bWJ5dGVzKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCQkgImlzb2Nocm9ub3VzIHJlYWQ6IGZyYW1lICVkOiAiCisJCQkJCSAib2Zmc2V0ICglZCkgKyBudW1ieXRlcyAoJWQpICIKKwkJCQkJICI+IEJBU19JTkJVRlNJWkVcbiIsCisJCQkJCSBmcmFtZSwgb2Zmc2V0LCBudW1ieXRlcyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlnaWdhc2V0X2lzb2NfcmVjZWl2ZShyY3ZidWYgKyBvZmZzZXQsIG51bWJ5dGVzLCBiY3MpOwogCQkJdG90bGVmdCAtPSBudW1ieXRlczsKIAkJfQogCQlpZiAodW5saWtlbHkodG90bGVmdCA+IDApKQotCQkJd2FybigiaXNvY2hyb25vdXMgcmVhZDogJWQgZGF0YSBieXRlcyBtaXNzaW5nIiwKLQkJCSAgICAgdG90bGVmdCk7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiaXNvY2hyb25vdXMgcmVhZDogJWQgZGF0YSBieXRlcyBtaXNzaW5nXG4iLAorCQkJCSB0b3RsZWZ0KTsKIAogCWVycm9yOgogCQkvKiBVUkIgcHJvY2Vzc2VkLCByZXN1Ym1pdCAqLwpAQCAtMTMxOCwxMiArMTMxNiwxNSBAQAogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzID0gMDsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLmFjdHVhbF9sZW5ndGggPSAwOwogCQl9Ci0JCXVyYi0+ZGV2ID0gYmNzLT5jcy0+aHcuYmFzLT51ZGV2OwkvKiBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQkvKiB1cmItPmRldiBpcyBjbG9iYmVyZWQgYnkgVVNCIHN1YnN5c3RlbSAqLworCQl1cmItPmRldiA9IGJjcy0+Y3MtPmh3LmJhcy0+dWRldjsKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKIAkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEJBU19OVU1GUkFNRVM7Ci0JCWlmICgocmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKSkgIT0gMCkgewotCQkJZXJyKCJjb3VsZCBub3QgcmVzdWJtaXQgaXNvY2hyb25vdXMgcmVhZCBVUkI6ICVzIiwKLQkJCSAgICBnZXRfdXNiX3N0YXRtc2cocmMpKTsKKwkJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwkJaWYgKHVubGlrZWx5KHJjICE9IDAgJiYgcmMgIT0gLUVOT0RFVikpIHsKKwkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkiY291bGQgbm90IHJlc3VibWl0IGlzb2Nocm9ub3VzIHJlYWQgVVJCOiAlc1xuIiwKKwkJCQlnZXRfdXNiX3JjbXNnKHJjKSk7CiAJCQlkdW1wX3VyYihERUJVR19JU08sICJyZXN1Ym1pdCBpc28gcmVhZCIsIHVyYik7CiAJCQllcnJvcl9oYW5ndXAoYmNzKTsKIAkJfQpAQCAtMTM0MSwxNSArMTM0MiwxMCBAQAogc3RhdGljIHZvaWQgcmVxX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gKHN0cnVjdCBiY19zdGF0ZSAqKSBkYXRhOwotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGJjcy0+Y3MtPmh3LmJhczsKIAlpbnQgcGVuZGluZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKGJjcyk7Ci0JSUZOVUxMUkVUKGJjcy0+Y3MpOwotCXVjcyA9IGJjcy0+Y3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQogCWNoZWNrX3BlbmRpbmcodWNzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKQEAgLTEzNTksMzMgKzEzNTUsMzQgQEAKIAogCXN3aXRjaCAocGVuZGluZykgewogCWNhc2UgMDoJCQkJCS8qIG5vIHBlbmRpbmcgcmVxdWVzdCAqLwotCQlkYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vIHJlcXVlc3QgcGVuZGluZyIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogbm8gcmVxdWVzdCBwZW5kaW5nIiwgX19mdW5jX18pOwogCQlicmVhazsKIAogCWNhc2UgSERfT1BFTl9BVENIQU5ORUw6Ci0JCWVycigidGltZW91dCBvcGVuaW5nIEFUIGNoYW5uZWwiKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IG9wZW5pbmcgQVQgY2hhbm5lbFxuIik7CiAJCWVycm9yX3Jlc2V0KGJjcy0+Y3MpOwogCQlicmVhazsKIAogCWNhc2UgSERfT1BFTl9CMkNIQU5ORUw6CiAJY2FzZSBIRF9PUEVOX0IxQ0hBTk5FTDoKLQkJZXJyKCJ0aW1lb3V0IG9wZW5pbmcgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCArIDEpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgInRpbWVvdXQgb3BlbmluZyBjaGFubmVsICVkXG4iLAorCQkJYmNzLT5jaGFubmVsICsgMSk7CiAJCWVycm9yX2hhbmd1cChiY3MpOwogCQlicmVhazsKIAogCWNhc2UgSERfQ0xPU0VfQVRDSEFOTkVMOgotCQllcnIoInRpbWVvdXQgY2xvc2luZyBBVCBjaGFubmVsIik7Ci0JCS8vd2FrZV91cF9pbnRlcnJ1cHRpYmxlKGNzLT5pbml0d2FpdCk7Ci0JCS8vRklYTUUgbmVlZCBvd24gd2FpdCBxdWV1ZT8KKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IGNsb3NpbmcgQVQgY2hhbm5lbFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBIRF9DTE9TRV9CMkNIQU5ORUw6CiAJY2FzZSBIRF9DTE9TRV9CMUNIQU5ORUw6Ci0JCWVycigidGltZW91dCBjbG9zaW5nIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwgKyAxKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJ0aW1lb3V0IGNsb3NpbmcgY2hhbm5lbCAlZFxuIiwKKwkJCWJjcy0+Y2hhbm5lbCArIDEpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oInJlcXVlc3QgMHglMDJ4IHRpbWVkIG91dCwgY2xlYXJpbmciLCBwZW5kaW5nKTsKKwkJZGV2X3dhcm4oYmNzLT5jcy0+ZGV2LCAicmVxdWVzdCAweCUwMnggdGltZWQgb3V0LCBjbGVhcmluZ1xuIiwKKwkJCSBwZW5kaW5nKTsKIAl9CiB9CiAKQEAgLTEzOTgsMTggKzEzOTUsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgd3JpdGVfY3RybF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IHVyYi0+Y29udGV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKHVyYik7Ci0JSUZOVUxMUkVUKHVyYi0+Y29udGV4dCk7Ci0JSUZOVUxMUkVUKGNhcmRzdGF0ZSk7Ci0KLQl1Y3MgPSAoc3RydWN0IGJhc19jYXJkc3RhdGUgKikgdXJiLT5jb250ZXh0OwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAodXJiLT5zdGF0dXMgJiYgdWNzLT5wZW5kaW5nKSB7Ci0JCWVycigiY29udHJvbCByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6ICVzIiwKLQkJICAgIHVjcy0+cGVuZGluZywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWRldl9lcnIoJnVjcy0+aW50ZXJmYWNlLT5kZXYsCisJCQkiY29udHJvbCByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6ICVzXG4iLAorCQkJdWNzLT5wZW5kaW5nLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJZGVsX3RpbWVyKCZ1Y3MtPnRpbWVyX2N0cmwpOwogCQl1Y3MtPnBlbmRpbmcgPSAwOwogCX0KQEAgLTE0MzIsMzQgKzE0MjUsMjQgQEAKICAqCXRpbWVvdXQJdGltZW91dCBpbiBzZWNvbmRzICgwOiBubyB0aW1lb3V0KQogICogcmV0dXJuIHZhbHVlOgogICoJMCBvbiBzdWNjZXNzCi0gKgktRUlOVkFMIGlmIGEgTlVMTCBwb2ludGVyIGlzIGVuY291bnRlcmVkIHNvbWV3aGVyZQogICoJLUVCVVNZIGlmIGFub3RoZXIgcmVxdWVzdCBpcyBwZW5kaW5nCiAgKglhbnkgVVJCIHN1Ym1pc3Npb24gZXJyb3IgY29kZQogICovCiBzdGF0aWMgaW50IHJlcV9zdWJtaXQoc3RydWN0IGJjX3N0YXRlICpiY3MsIGludCByZXEsIGludCB2YWwsIGludCB0aW1lb3V0KQogewotCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3M7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGJjcy0+Y3MtPmh3LmJhczsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUlOVkFMKTsKLQlJRk5VTExSRVRWQUwoYmNzLT5jcywgLUVJTlZBTCk7Ci0JdWNzID0gYmNzLT5jcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1Y3MsIC1FSU5WQUwpOwotCUlGTlVMTFJFVFZBTCh1Y3MtPnVyYl9jdHJsLCAtRUlOVkFMKTsKLQotCWRiZyhERUJVR19VU0JSRVEsICItLS0tLS0tPiAweCUwMnggKCVkKSIsIHJlcSwgdmFsKTsKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IDB4JTAyeCAoJWQpIiwgcmVxLCB2YWwpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVjcy0+bG9jaywgZmxhZ3MpOwogCWlmICh1Y3MtPnBlbmRpbmcpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWNzLT5sb2NrLCBmbGFncyk7Ci0JCWVycigic3VibWlzc2lvbiBvZiByZXF1ZXN0IDB4JTAyeCBmYWlsZWQ6IHJlcXVlc3QgMHglMDJ4IHN0aWxsIHBlbmRpbmciLAotCQkgICAgcmVxLCB1Y3MtPnBlbmRpbmcpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlpZiAodWNzLT51cmJfY3RybC0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Y3MtPmxvY2ssIGZsYWdzKTsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHJlcXVlc3QgMHglMDJ4OiBVUkIgYnVzeSIsIHJlcSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LAorCQkJInN1Ym1pc3Npb24gb2YgcmVxdWVzdCAweCUwMnggZmFpbGVkOiAiCisJCQkicmVxdWVzdCAweCUwMnggc3RpbGwgcGVuZGluZ1xuIiwKKwkJCXJlcSwgdWNzLT5wZW5kaW5nKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTE0NjksMTkgKzE0NTIsMTkgQEAKIAl1Y3MtPmRyX2N0cmwud0luZGV4ID0gMDsKIAl1Y3MtPmRyX2N0cmwud0xlbmd0aCA9IDA7CiAJdXNiX2ZpbGxfY29udHJvbF91cmIodWNzLT51cmJfY3RybCwgdWNzLT51ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKSAmdWNzLT5kcl9jdHJsLCBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9jdHJsX2NhbGxiYWNrLCB1Y3MpOworCQkJICAgICB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIqKSAmdWNzLT5kcl9jdHJsLCBOVUxMLCAwLAorCQkJICAgICB3cml0ZV9jdHJsX2NhbGxiYWNrLCB1Y3MpOwogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY3RybCwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCByZXF1ZXN0IDB4JTAyeDogJXMiLAotCQkgICAgcmVxLCBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCByZXF1ZXN0IDB4JTAyeDogJXNcbiIsCisJCQlyZXEsIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByZXQ7CiAJfQogCXVjcy0+cGVuZGluZyA9IHJlcTsKIAogCWlmICh0aW1lb3V0ID4gMCkgewotCQlkYmcoREVCVUdfVVNCUkVRLCAic2V0dGluZyB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCB0aW1lb3V0KTsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICJzZXR0aW5nIHRpbWVvdXQgb2YgJWQvMTAgc2VjcyIsIHRpbWVvdXQpOwogCQl1Y3MtPnRpbWVyX2N0cmwuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0ICogSFogLyAxMDsKIAkJdWNzLT50aW1lcl9jdHJsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYmNzOwogCQl1Y3MtPnRpbWVyX2N0cmwuZnVuY3Rpb24gPSByZXFfdGltZW91dDsKQEAgLTE1MDMsMjMgKzE0ODYsMzYgQEAKIHN0YXRpYyBpbnQgZ2lnYXNldF9pbml0X2JjaGFubmVsKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWludCByZXEsIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVJTlZBTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoIWJjcy0+Y3MtPmNvbm5lY3RlZCkpIHsKKwkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlpZiAoKHJldCA9IHN0YXJ0dXJicyhiY3MpKSA8IDApIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3RhcnQgaXNvY2hyb25vdXMgSS9PIGZvciBjaGFubmVsICVkIiwKLQkJICAgIGJjcy0+Y2hhbm5lbCArIDEpOwotCQllcnJvcl9oYW5ndXAoYmNzKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsCisJCQkiY291bGQgbm90IHN0YXJ0IGlzb2Nocm9ub3VzIEkvTyBmb3IgY2hhbm5lbCBCJWQ6ICVzXG4iLAorCQkJYmNzLT5jaGFubmVsICsgMSwKKwkJCXJldCA9PSAtRUZBVUxUID8gIm51bGwgVVJCIiA6IGdldF91c2JfcmNtc2cocmV0KSk7CisJCWlmIChyZXQgIT0gLUVOT0RFVikKKwkJCWVycm9yX2hhbmd1cChiY3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmVxID0gYmNzLT5jaGFubmVsID8gSERfT1BFTl9CMkNIQU5ORUwgOiBIRF9PUEVOX0IxQ0hBTk5FTDsKIAlpZiAoKHJldCA9IHJlcV9zdWJtaXQoYmNzLCByZXEsIDAsIEJBU19USU1FT1VUKSkgPCAwKSB7Ci0JCWVycigiY291bGQgbm90IG9wZW4gY2hhbm5lbCAlZDogJXMiLAotCQkgICAgYmNzLT5jaGFubmVsICsgMSwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBvcGVuIGNoYW5uZWwgQiVkXG4iLAorCQkJYmNzLT5jaGFubmVsICsgMSk7CiAJCXN0b3B1cmJzKGJjcy0+aHcuYmFzKTsKLQkJZXJyb3JfaGFuZ3VwKGJjcyk7CisJCWlmIChyZXQgIT0gLUVOT0RFVikKKwkJCWVycm9yX2hhbmd1cChiY3MpOwogCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTM2LDIwICsxNTMyLDMwIEBACiBzdGF0aWMgaW50IGdpZ2FzZXRfY2xvc2VfYmNoYW5uZWwoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJaW50IHJlcSwgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJRk5VTExSRVRWQUwoYmNzLCAtRUlOVkFMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseSghYmNzLT5jcy0+Y29ubmVjdGVkKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWlmICghKGF0b21pY19yZWFkKCZiY3MtPmNzLT5ody5iYXMtPmJhc3N0YXRlKSAmCiAJICAgICAgKGJjcy0+Y2hhbm5lbCA/IEJTX0IyT1BFTiA6IEJTX0IxT1BFTikpKSB7CiAJCS8qIGNoYW5uZWwgbm90IHJ1bm5pbmc6IGp1c3Qgc2lnbmFsIGNvbW1vbi5jICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJZ2lnYXNldF9iY2hhbm5lbF9kb3duKGJjcyk7CiAJCXJldHVybiAwOwogCX0KIAorCS8qIGNoYW5uZWwgcnVubmluZzogdGVsbCBkZXZpY2UgdG8gY2xvc2UgaXQgKi8KIAlyZXEgPSBiY3MtPmNoYW5uZWwgPyBIRF9DTE9TRV9CMkNIQU5ORUwgOiBIRF9DTE9TRV9CMUNIQU5ORUw7CiAJaWYgKChyZXQgPSByZXFfc3VibWl0KGJjcywgcmVxLCAwLCBCQVNfVElNRU9VVCkpIDwgMCkKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IEhEX0NMT1NFX0J4Q0hBTk5FTCByZXF1ZXN0OiAlcyIsCi0JCSAgICBnZXRfdXNiX3N0YXRtc2cocmV0KSk7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY2xvc2luZyBjaGFubmVsIEIlZCBmYWlsZWRcbiIsCisJCQliY3MtPmNoYW5uZWwgKyAxKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTY0LDE3ICsxNTcwLDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGNvbXBsZXRlX2NiKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCXN0cnVjdCBjbWRidWZfdCAqY2I7Ci0KLQlJRk5VTExSRVQoY3MpOwotCWNiID0gY3MtPmNtZGJ1ZjsKLQlJRk5VTExSRVQoY2IpOworCXN0cnVjdCBjbWRidWZfdCAqY2IgPSBjcy0+Y21kYnVmOwogCiAJLyogdW5xdWV1ZSBjb21wbGV0ZWQgYnVmZmVyICovCiAJY3MtPmNtZGJ5dGVzIC09IGNzLT5jdXJsZW47Ci0JZGJnKERFQlVHX1RSQU5TQ01EIHwgREVCVUdfTE9DS0NNRCwKLQkgICAgIndyaXRlX2NvbW1hbmQ6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAotCSAgICBjcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUR8REVCVUdfTE9DS0NNRCwKKwkJIndyaXRlX2NvbW1hbmQ6IHNlbnQgJXUgYnl0ZXMsICV1IGxlZnQiLAorCQljcy0+Y3VybGVuLCBjcy0+Y21kYnl0ZXMpOwogCWlmICgoY3MtPmNtZGJ1ZiA9IGNiLT5uZXh0KSAhPSBOVUxMKSB7CiAJCWNzLT5jbWRidWYtPnByZXYgPSBOVUxMOwogCQljcy0+Y3VybGVuID0gY3MtPmNtZGJ1Zi0+bGVuOwpAQCAtMTU4OSw4ICsxNTkxLDYgQEAKIAlrZnJlZShjYik7CiB9CiAKLXN0YXRpYyBpbnQgYXR3cml0ZV9zdWJtaXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci0KIC8qIHdyaXRlX2NvbW1hbmRfY2FsbGJhY2sKICAqIFVTQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEFUIGNvbW1hbmQgdHJhbnNtaXNzaW9uCiAgKiBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gaW4gaW50ZXJydXB0IGNvbnRleHQKQEAgLTE2MDAsNDAgKzE2MDAsNDMgQEAKICAqLwogc3RhdGljIHZvaWQgd3JpdGVfY29tbWFuZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBjYXJkc3RhdGUgKmNzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKIAotCUlGTlVMTFJFVCh1cmIpOwotCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdXJiLT5jb250ZXh0OwotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKKwl1cGRhdGVfYmFzc3RhdGUodWNzLCAwLCBCU19BVFdSUEVORCk7CiAKIAkvKiBjaGVjayBzdGF0dXMgKi8KIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgkJCQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KIAkJYnJlYWs7Ci0JY2FzZSAtRU5PRU5UOgkJCS8qIGNhbmNlbGVkICovCi0JY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGVkIChhc3luYykgKi8KKwljYXNlIC1FTk9FTlQ6CQkJLyogY2FuY2VsbGVkICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGxlZCAoYXN5bmMpICovCiAJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBwZW5kaW5nICovCisJY2FzZSAtRU5PREVWOgkJCS8qIGRldmljZSByZW1vdmVkICovCisJY2FzZSAtRVNIVVRET1dOOgkJLyogZGV2aWNlIHNodXQgZG93biAqLwogCQkvKiBpZ25vcmUgc2lsZW50bHkgKi8KLQkJZGJnKERFQlVHX1VTQlJFUSwKLQkJICAgICIlczogJXMiLCBfX2Z1bmNfXywgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6ICVzIiwKKwkJCV9fZnVuY19fLCBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CQkJCS8qIGFueSBmYWlsdXJlICovCiAJCWlmICgrK3Vjcy0+cmV0cnlfY21kX291dCA+IEJBU19SRVRSWSkgewotCQkJd2FybigiY29tbWFuZCB3cml0ZTogJXMsIGdpdmluZyB1cCBhZnRlciAlZCByZXRyaWVzIiwKLQkJCSAgICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSwgdWNzLT5yZXRyeV9jbWRfb3V0KTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJjb21tYW5kIHdyaXRlOiAlcywgIgorCQkJCSAiZ2l2aW5nIHVwIGFmdGVyICVkIHJldHJpZXNcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cyksCisJCQkJIHVjcy0+cmV0cnlfY21kX291dCk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoY3MtPmNtZGJ1ZiA9PSBOVUxMKSB7Ci0JCQl3YXJuKCJjb21tYW5kIHdyaXRlOiAlcywgY2Fubm90IHJldHJ5IC0gY21kYnVmIGdvbmUiLAotCQkJICAgICBnZXRfdXNiX3N0YXRtc2codXJiLT5zdGF0dXMpKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkJICJjb21tYW5kIHdyaXRlOiAlcywgIgorCQkJCSAiY2Fubm90IHJldHJ5IC0gY21kYnVmIGdvbmVcbiIsCisJCQkJIGdldF91c2Jfc3RhdG1zZyh1cmItPnN0YXR1cykpOwogCQkJYnJlYWs7CiAJCX0KLQkJbm90aWNlKCJjb21tYW5kIHdyaXRlOiAlcywgcmV0cnkgJWQiLAotCQkgICAgICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSwgdWNzLT5yZXRyeV9jbWRfb3V0KTsKKwkJZGV2X25vdGljZShjcy0+ZGV2LCAiY29tbWFuZCB3cml0ZTogJXMsIHJldHJ5ICVkXG4iLAorCQkJICAgZ2V0X3VzYl9zdGF0bXNnKHVyYi0+c3RhdHVzKSwgdWNzLT5yZXRyeV9jbWRfb3V0KTsKIAkJaWYgKGF0d3JpdGVfc3VibWl0KGNzLCBjcy0+Y21kYnVmLT5idWYsIGNzLT5jbWRidWYtPmxlbikgPj0gMCkKIAkJCS8qIHJlc3VibWl0dGVkIC0gYnlwYXNzIHJlZ3VsYXIgZXhpdCBibG9jayAqLwogCQkJcmV0dXJuOwpAQCAtMTY1NSwxMyArMTY1OCw5IEBACiBzdGF0aWMgdm9pZCBhdHJkeV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIGRhdGE7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQotCXdhcm4oInRpbWVvdXQgd2FpdGluZyBmb3IgSERfUkVBRFlfU0VORF9BVERBVEEiKTsKKwlkZXZfd2Fybihjcy0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBIRF9SRUFEWV9TRU5EX0FUREFUQVxuIik7CiAKIAkvKiBmYWtlIHRoZSBtaXNzaW5nIHNpZ25hbCAtIHdoYXQgZWxzZSBjYW4gSSBkbz8gKi8KIAl1cGRhdGVfYmFzc3RhdGUodWNzLCBCU19BVFJFQURZLCBCU19BVFRJTUVSKTsKQEAgLTE2NzYsMjQgKzE2NzUsMTkgQEAKICAqCWxlbglsZW5ndGggb2YgY29tbWFuZCB0byBzZW5kCiAgKiByZXR1cm4gdmFsdWU6CiAgKgkwIG9uIHN1Y2Nlc3MKLSAqCS1FRkFVTFQgaWYgYSBOVUxMIHBvaW50ZXIgaXMgZW5jb3VudGVyZWQgc29tZXdoZXJlCiAgKgktRUJVU1kgaWYgYW5vdGhlciByZXF1ZXN0IGlzIHBlbmRpbmcKICAqCWFueSBVUkIgc3VibWlzc2lvbiBlcnJvciBjb2RlCiAgKi8KIHN0YXRpYyBpbnQgYXR3cml0ZV9zdWJtaXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwotCWludCByZXQ7CisJc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjcyA9IGNzLT5ody5iYXM7CisJaW50IHJjOwogCi0JSUZOVUxMUkVUVkFMKGNzLCAtRUZBVUxUKTsKLQl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVFZBTCh1Y3MsIC1FRkFVTFQpOwotCUlGTlVMTFJFVFZBTCh1Y3MtPnVyYl9jbWRfb3V0LCAtRUZBVUxUKTsKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgIi0tLS0tLS0+IEhEX1dSSVRFX0FUTUVTU0FHRSAoJWQpIiwgbGVuKTsKIAotCWRiZyhERUJVR19VU0JSRVEsICItLS0tLS0tPiBIRF9XUklURV9BVE1FU1NBR0UgKCVkKSIsIGxlbik7Ci0KLQlpZiAodWNzLT51cmJfY21kX291dC0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgSERfV1JJVEVfQVRNRVNTQUdFOiBVUkIgYnVzeSIpOworCWlmICh1cGRhdGVfYmFzc3RhdGUodWNzLCBCU19BVFdSUEVORCwgMCkgJiBCU19BVFdSUEVORCkgeworCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkiY291bGQgbm90IHN1Ym1pdCBIRF9XUklURV9BVE1FU1NBR0U6IFVSQiBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTE3MDYsMjUgKzE3MDAsMjIgQEAKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHVjcy0+dWRldiwgMCksCiAJCQkgICAgICh1bnNpZ25lZCBjaGFyKikgJnVjcy0+ZHJfY21kX291dCwgYnVmLCBsZW4sCiAJCQkgICAgIHdyaXRlX2NvbW1hbmRfY2FsbGJhY2ssIGNzKTsKLQotCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfY21kX291dCwgU0xBQl9BVE9NSUMpKSAhPSAwKSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCBIRF9XUklURV9BVE1FU1NBR0U6ICVzIiwKLQkJICAgIGdldF91c2Jfc3RhdG1zZyhyZXQpKTsKLQkJcmV0dXJuIHJldDsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+dXJiX2NtZF9vdXQsIFNMQUJfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIDAsIEJTX0FUV1JQRU5EKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCBIRF9XUklURV9BVE1FU1NBR0U6ICVzXG4iLAorCQkJZ2V0X3VzYl9yY21zZyhyYykpOworCQlyZXR1cm4gcmM7CiAJfQogCi0JLyogc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSAqLwotCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIDAsIEJTX0FUUkVBRFkpOwotCi0JLyogc3RhcnQgdGltZW91dCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIShhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19BVFRJTUVSKSkgewotCQlkYmcoREVCVUdfT1VUUFVULAotCQkgICAgInNldHRpbmcgQVRSRUFEWSB0aW1lb3V0IG9mICVkLzEwIHNlY3MiLCBBVFJEWV9USU1FT1VUKTsKKwkvKiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LCBzdGFydCB0aW1lb3V0IGlmIG5lY2Vzc2FyeSAqLworCWlmICghKHVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIEJTX0FUVElNRVIsIEJTX0FUUkVBRFkpICYgQlNfQVRUSU1FUikpIHsKKwkJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJzZXR0aW5nIEFUUkVBRFkgdGltZW91dCBvZiAlZC8xMCBzZWNzIiwKKwkJCUFUUkRZX1RJTUVPVVQpOwogCQl1Y3MtPnRpbWVyX2F0cmR5LmV4cGlyZXMgPSBqaWZmaWVzICsgQVRSRFlfVElNRU9VVCAqIEhaIC8gMTA7CiAJCXVjcy0+dGltZXJfYXRyZHkuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjczsKIAkJdWNzLT50aW1lcl9hdHJkeS5mdW5jdGlvbiA9IGF0cmR5X3RpbWVvdXQ7CiAJCWFkZF90aW1lcigmdWNzLT50aW1lcl9hdHJkeSk7Ci0JCXVwZGF0ZV9iYXNzdGF0ZSh1Y3MsIEJTX0FUVElNRVIsIDApOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE3NDAsMjEgKzE3MzEsMTYgQEAKIHN0YXRpYyBpbnQgc3RhcnRfY2JzZW5kKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewogCXN0cnVjdCBjbWRidWZfdCAqY2I7Ci0Jc3RydWN0IGJhc19jYXJkc3RhdGUgKnVjczsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAlpbnQgcmV0dmFsID0gMDsKIAotCUlGTlVMTFJFVFZBTChjcywgLUVGQVVMVCk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVRWQUwodWNzLCAtRUZBVUxUKTsKLQogCS8qIGNoZWNrIGlmIEFUIGNoYW5uZWwgaXMgb3BlbiAqLwogCWlmICghKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0FUT1BFTikpIHsKLQkJZGJnKERFQlVHX1RSQU5TQ01EIHwgREVCVUdfTE9DS0NNRCwgIkFUIGNoYW5uZWwgbm90IG9wZW4iKTsKKwkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRHxERUJVR19MT0NLQ01ELCAiQVQgY2hhbm5lbCBub3Qgb3BlbiIpOwogCQlyYyA9IHJlcV9zdWJtaXQoY3MtPmJjcywgSERfT1BFTl9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJZXJyKCJjb3VsZCBub3Qgb3BlbiBBVCBjaGFubmVsIik7CiAJCQkvKiBmbHVzaCBjb21tYW5kIHF1ZXVlICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAkJCXdoaWxlIChjcy0+Y21kYnVmICE9IE5VTEwpCkBAIC0xNzkyLDI3ICsxNzc4LDIzIEBACiAgKgljcwkJY29udHJvbGxlciBzdGF0ZSBzdHJ1Y3R1cmUKICAqCWJ1ZgkJY29tbWFuZCBzdHJpbmcgdG8gc2VuZAogICoJbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAobWF4LiBJRl9XUklURUJVRikKLSAqCXdha2VfdGFza2xldAl0YXNrbGV0IHRvIHJ1biB3aGVuIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZWQgKE5VTEwgaWYgbm9uZSkKKyAqCXdha2VfdGFza2xldAl0YXNrbGV0IHRvIHJ1biB3aGVuIHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZWQKKyAqCQkJKE5VTEwgaWYgbm9uZSkKICAqIHJldHVybiB2YWx1ZToKICAqCW51bWJlciBvZiBieXRlcyBxdWV1ZWQgb24gc3VjY2VzcwogICoJZXJyb3IgY29kZSA8IDAgb24gZXJyb3IKICAqLwogc3RhdGljIGludCBnaWdhc2V0X3dyaXRlX2NtZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKIHsKIAlzdHJ1Y3QgY21kYnVmX3QgKmNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKIAogCWdpZ2FzZXRfZGJnX2J1ZmZlcihhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEID8KLQkgICAgICAgICAgICAgICAgICAgICBERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCi0JICAgICAgICAgICAgICAgICAgICJDTUQgVHJhbnNtaXQiLCBsZW4sIGJ1ZiwgMCk7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQllcnIoIiVzOiBub3QgY29ubmVjdGVkIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJCQkgICAgIERFQlVHX1RSQU5TQ01EIDogREVCVUdfTE9DS0NNRCwKKwkJCSAgICJDTUQgVHJhbnNtaXQiLCBsZW4sIGJ1Zik7CiAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiAwOwkJCS8qIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTE4MjAsNyArMTgwMiw3IEBACiAJaWYgKGxlbiA+IElGX1dSSVRFQlVGKQogCQlsZW4gPSBJRl9XUklURUJVRjsKIAlpZiAoIShjYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRidWZfdCkgKyBsZW4sIEdGUF9BVE9NSUMpKSkgewotCQllcnIoIiVzOiBvdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4NDIsMTQgKzE4MjQsMjEgQEAKIAljcy0+bGFzdGNtZGJ1ZiA9IGNiOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5jbWRsb2NrLCBmbGFncyk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoIWNzLT5jb25uZWN0ZWQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAlzdGF0dXMgPSBzdGFydF9jYnNlbmQoY3MpOwotCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc3RhdHVzIDwgMCA/IHN0YXR1cyA6IGxlbjsKIH0KIAogLyogZ2lnYXNldF93cml0ZV9yb29tCiAgKiB0dHlfZHJpdmVyLndyaXRlX3Jvb20gaW50ZXJmYWNlIHJvdXRpbmUKLSAqIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGUgZHJpdmVyIHdpbGwgYWNjZXB0IHRvIGJlIHdyaXR0ZW4gdmlhIGdpZ2FzZXRfd3JpdGVfY21kCisgKiByZXR1cm4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlIGRyaXZlciB3aWxsIGFjY2VwdCB0byBiZSB3cml0dGVuIHZpYQorICogZ2lnYXNldF93cml0ZV9jbWQKICAqIHBhcmFtZXRlcjoKICAqCWNvbnRyb2xsZXIgc3RhdGUgc3RydWN0dXJlCiAgKiByZXR1cm4gdmFsdWU6CkBAIC0xOTA0LDEyICsxODkzLDMyIEBACiAgKi8KIHN0YXRpYyBpbnQgZ2lnYXNldF9mcmVlYmNzaHcoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7Ci0JaWYgKCFiY3MtPmh3LmJhcykKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKKwlpbnQgaTsKKworCWlmICghdWJjKQogCQlyZXR1cm4gMDsKIAotCWlmIChiY3MtPmh3LmJhcy0+aXNvb3V0YnVmKQotCQlrZnJlZShiY3MtPmh3LmJhcy0+aXNvb3V0YnVmKTsKLQlrZnJlZShiY3MtPmh3LmJhcyk7CisJLyoga2lsbCBVUkJzIGFuZCB0YXNrbGV0cyBiZWZvcmUgZnJlZWluZyAtIGJldHRlciBzYWZlIHRoYW4gc29ycnkgKi8KKwlhdG9taWNfc2V0KCZ1YmMtPnJ1bm5pbmcsIDApOworCWZvciAoaSA9IDA7IGkgPCBCQVNfT1VUVVJCUzsgKytpKQorCQlpZiAodWJjLT5pc29vdXR1cmJzW2ldLnVyYikgeworCQkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGtpbGxpbmcgaXNvIG91dCBVUkIgJWQiLAorCQkJCV9fZnVuY19fLCBpKTsKKwkJCXVzYl9raWxsX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKKwkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKKwkJfQorCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpCisJCWlmICh1YmMtPmlzb2ludXJic1tpXSkgeworCQkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGtpbGxpbmcgaXNvIGluIFVSQiAlZCIsCisJCQkJX19mdW5jX18sIGkpOworCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvaW51cmJzW2ldKTsKKwkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb2ludXJic1tpXSk7CisJCX0KKwl0YXNrbGV0X2tpbGwoJnViYy0+c2VudF90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnViYy0+cmN2ZF90YXNrbGV0KTsKKwlrZnJlZSh1YmMtPmlzb291dGJ1Zik7CisJa2ZyZWUodWJjKTsKIAliY3MtPmh3LmJhcyA9IE5VTEw7CiAJcmV0dXJuIDE7CiB9CkBAIC0xOTQ3LDcgKzE5NTYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJdGFza2xldF9pbml0KCZ1YmMtPnNlbnRfdGFza2xldCwKLQkgICAgICAgICAgICAgJndyaXRlX2lzb190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgYmNzKTsKKwkJICAgICAmd3JpdGVfaXNvX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBiY3MpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnViYy0+aXNvaW5sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgQkFTX0lOVVJCUzsgKytpKQpAQCAtMTk2OCw3ICsxOTc3LDcgQEAKIAl1YmMtPnNoYXJlZDBzID0gMDsKIAl1YmMtPnN0b2xlbjBzID0gMDsKIAl0YXNrbGV0X2luaXQoJnViYy0+cmN2ZF90YXNrbGV0LAotCSAgICAgICAgICAgICAmcmVhZF9pc29fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGJjcyk7CisJCSAgICAgJnJlYWRfaXNvX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBiY3MpOwogCXJldHVybiAxOwogfQogCkBAIC0xOTg2LDEzICsxOTk1LDkgQEAKIAogc3RhdGljIHZvaWQgZ2lnYXNldF9mcmVlY3NodyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LmJhczsKLQotCWRlbF90aW1lcigmdWNzLT50aW1lcl9jdHJsKTsKLQlkZWxfdGltZXIoJnVjcy0+dGltZXJfYXRyZHkpOwotCWRlbF90aW1lcigmdWNzLT50aW1lcl9jbWRfaW4pOwotCisJLyogdGltZXJzLCBVUkJzIGFuZCByY3ZidWYgYXJlIGRpc3Bvc2VkIG9mIGluIGRpc2Nvbm5lY3QgKi8KIAlrZnJlZShjcy0+aHcuYmFzKTsKKwljcy0+aHcuYmFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBnaWdhc2V0X2luaXRjc2h3KHN0cnVjdCBjYXJkc3RhdGUgKmNzKQpAQCAtMjAyNyw1NyArMjAzMiw1NiBAQAogICovCiBzdGF0aWMgdm9pZCBmcmVldXJicyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOworCXN0cnVjdCBiYXNfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcuYmFzOwogCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKIAlpbnQgaSwgajsKIAotCUlGTlVMTFJFVChjcyk7Ci0JdWNzID0gY3MtPmh3LmJhczsKLQlJRk5VTExSRVQodWNzKTsKLQogCWZvciAoaiA9IDA7IGogPCAyOyArK2opIHsKIAkJdWJjID0gY3MtPmJjc1tqXS5ody5iYXM7Ci0JCUlGTlVMTENPTlQodWJjKTsKIAkJZm9yIChpID0gMDsgaSA8IEJBU19PVVRVUkJTOyArK2kpCiAJCQlpZiAodWJjLT5pc29vdXR1cmJzW2ldLnVyYikgewogCQkJCXVzYl9raWxsX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKLQkJCQlkYmcoREVCVUdfSU5JVCwKLQkJCQkgICAgIiVzOiBpc29jIG91dHB1dCBVUkIgJWQvJWQgdW5saW5rZWQiLAotCQkJCSAgICBfX2Z1bmNfXywgaiwgaSk7CisJCQkJZ2lnX2RiZyhERUJVR19JTklULAorCQkJCQkiJXM6IGlzb2Mgb3V0cHV0IFVSQiAlZC8lZCB1bmxpbmtlZCIsCisJCQkJCV9fZnVuY19fLCBqLCBpKTsKIAkJCQl1c2JfZnJlZV91cmIodWJjLT5pc29vdXR1cmJzW2ldLnVyYik7CiAJCQkJdWJjLT5pc29vdXR1cmJzW2ldLnVyYiA9IE5VTEw7CiAJCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpCiAJCQlpZiAodWJjLT5pc29pbnVyYnNbaV0pIHsKIAkJCQl1c2Jfa2lsbF91cmIodWJjLT5pc29pbnVyYnNbaV0pOwotCQkJCWRiZyhERUJVR19JTklULAotCQkJCSAgICAiJXM6IGlzb2MgaW5wdXQgVVJCICVkLyVkIHVubGlua2VkIiwKLQkJCQkgICAgX19mdW5jX18sIGosIGkpOworCQkJCWdpZ19kYmcoREVCVUdfSU5JVCwKKwkJCQkJIiVzOiBpc29jIGlucHV0IFVSQiAlZC8lZCB1bmxpbmtlZCIsCisJCQkJCV9fZnVuY19fLCBqLCBpKTsKIAkJCQl1c2JfZnJlZV91cmIodWJjLT5pc29pbnVyYnNbaV0pOwogCQkJCXViYy0+aXNvaW51cmJzW2ldID0gTlVMTDsKIAkJCX0KIAl9CiAJaWYgKHVjcy0+dXJiX2ludF9pbikgewogCQl1c2Jfa2lsbF91cmIodWNzLT51cmJfaW50X2luKTsKLQkJZGJnKERFQlVHX0lOSVQsICIlczogaW50ZXJydXB0IGlucHV0IFVSQiB1bmxpbmtlZCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGludGVycnVwdCBpbnB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfaW50X2luKTsKIAkJdWNzLT51cmJfaW50X2luID0gTlVMTDsKIAl9CiAJaWYgKHVjcy0+dXJiX2NtZF9vdXQpIHsKIAkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIG91dHB1dCBVUkIgdW5saW5rZWQiLCBfX2Z1bmNfXyk7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIG91dHB1dCBVUkIgdW5saW5rZWQiLAorCQkJX19mdW5jX18pOwogCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX291dCk7CiAJCXVjcy0+dXJiX2NtZF9vdXQgPSBOVUxMOwogCX0KIAlpZiAodWNzLT51cmJfY21kX2luKSB7CiAJCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9jbWRfaW4pOwotCQlkYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIGlucHV0IFVSQiB1bmxpbmtlZCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGNvbW1hbmQgaW5wdXQgVVJCIHVubGlua2VkIiwKKwkJCV9fZnVuY19fKTsKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2NtZF9pbik7CiAJCXVjcy0+dXJiX2NtZF9pbiA9IE5VTEw7CiAJfQogCWlmICh1Y3MtPnVyYl9jdHJsKSB7CiAJCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9jdHJsKTsKLQkJZGJnKERFQlVHX0lOSVQsICIlczogY29udHJvbCBvdXRwdXQgVVJCIHVubGlua2VkIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogY29udHJvbCBvdXRwdXQgVVJCIHVubGlua2VkIiwKKwkJCV9fZnVuY19fKTsKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2N0cmwpOwogCQl1Y3MtPnVyYl9jdHJsID0gTlVMTDsKIAl9CkBAIC0yMDk3LDM1ICsyMTAxLDI0IEBACiAJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJaW50IGksIGo7Ci0JaW50IHJldDsKKwlpbnQgcmM7CiAKLQlJRk5VTExSRVRWQUwodWRldiwgLUVOT0RFVik7Ci0KLQlkYmcoREVCVUdfQU5ZLAotCSAgICAiJXM6IENoZWNrIGlmIGRldmljZSBtYXRjaGVzIC4uIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKLQkgICAgX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCi0JLyogU2VlIGlmIHRoZSBkZXZpY2Ugb2ZmZXJlZCB1cyBtYXRjaGVzIHdoYXQgd2UgY2FuIGFjY2VwdCAqLwotCWlmICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgICE9IFVTQl9HSUdBX1ZFTkRPUl9JRCkgfHwKLQkgICAgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfR0lHQV9QUk9EVUNUX0lEICYmCi0JICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCXzQxNzVfUFJPRFVDVF9JRCAmJgotCSAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9TWDMwM19QUk9EVUNUX0lEICYmCi0JICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX1NYMzUzX1BST0RVQ1RfSUQpKSB7Ci0JCWRiZyhERUJVR19BTlksICIlczogdW5tYXRjaGVkIElEIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkiJXM6IENoZWNrIGlmIGRldmljZSBtYXRjaGVzIC4uIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKKwkJX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCiAJLyogc2V0IHJlcXVpcmVkIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKIAlpZiAoaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDMpIHsKLQkJZGJnKERFQlVHX0FOWSwKLQkJICAgICIlczogd3JvbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQgLSB0cnlpbmcgdG8gc3dpdGNoIiwKLQkJICAgIF9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCSIlczogd3JvbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQgLSB0cnlpbmcgdG8gc3dpdGNoIiwKKwkJCV9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOwogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UodWRldiwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDMpIDwgMCkgewotCQkJd2FybigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCBkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQiLAotCQkJICAgICB1ZGV2LT5kZXZudW0sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAotCQkJICAgICBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwgInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgIgorCQkJCSAiZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAorCQkJCSB1ZGV2LT5kZXZudW0sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCSBob3N0aWYtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAkJaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKQEAgLTIxMzQsNjggKzIxMjcsNTAgQEAKIAkvKiBSZWplY3QgYXBwbGljYXRpb24gc3BlY2lmaWMgaW50ZXJmYWNlcwogCSAqLwogCWlmIChob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDI1NSkgewotCQl3YXJuKCIlczogYkludGVyZmFjZUNsYXNzID09ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICIlczogYkludGVyZmFjZUNsYXNzID09ICVkXG4iLAorCQkJIF9fZnVuY19fLCBob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiJXM6IERldmljZSBtYXRjaGVkIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKLQkgICAgIF9fZnVuY19fLCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJICIlczogRGV2aWNlIG1hdGNoZWQgKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleClcbiIsCisJCSBfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCiAJY3MgPSBnaWdhc2V0X2dldHVuYXNzaWduZWRjcyhkcml2ZXIpOwogCWlmICghY3MpIHsKLQkJZXJyKCIlczogbm8gZnJlZSBjYXJkc3RhdGUiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgIm5vIGZyZWUgY2FyZHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXVjcyA9IGNzLT5ody5iYXM7CisKKwkvKiBzYXZlIG9mZiBkZXZpY2Ugc3RydWN0dXJlIHB0cnMgZm9yIGxhdGVyIHVzZSAqLworCXVzYl9nZXRfZGV2KHVkZXYpOwogCXVjcy0+dWRldiA9IHVkZXY7CiAJdWNzLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJY3MtPmRldiA9ICZpbnRlcmZhY2UtPmRldjsKIAogCS8qIGFsbG9jYXRlIFVSQnM6CiAJICogLSBvbmUgZm9yIHRoZSBpbnRlcnJ1cHQgcGlwZQogCSAqIC0gdGhyZWUgZm9yIHRoZSBkaWZmZXJlbnQgdXNlcyBvZiB0aGUgZGVmYXVsdCBjb250cm9sIHBpcGUKIAkgKiAtIHRocmVlIGZvciBlYWNoIGlzb2Nocm9ub3VzIHBpcGUKIAkgKi8KLQl1Y3MtPnVyYl9pbnRfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKLQlpZiAoIXVjcy0+dXJiX2ludF9pbikgewotCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdWNzLT51cmJfY21kX2luID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCk7Ci0JaWYgKCF1Y3MtPnVyYl9jbWRfaW4pIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXVjcy0+dXJiX2NtZF9vdXQgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKLQlpZiAoIXVjcy0+dXJiX2NtZF9vdXQpIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXVjcy0+dXJiX2N0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKLQlpZiAoIXVjcy0+dXJiX2N0cmwpIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCWlmICghKHVjcy0+dXJiX2ludF9pbiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpKSB8fAorCSAgICAhKHVjcy0+dXJiX2NtZF9pbiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpKSB8fAorCSAgICAhKHVjcy0+dXJiX2NtZF9vdXQgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKSkgfHwKKwkgICAgISh1Y3MtPnVyYl9jdHJsID0gdXNiX2FsbG9jX3VyYigwLCBTTEFCX0tFUk5FTCkpKQorCQlnb3RvIGFsbG9jZXJyOwogCiAJZm9yIChqID0gMDsgaiA8IDI7ICsraikgewogCQl1YmMgPSBjcy0+YmNzW2pdLmh3LmJhczsKLQkJZm9yIChpID0gMDsgaSA8IEJBU19PVVRVUkJTOyArK2kpIHsKLQkJCXViYy0+aXNvb3V0dXJic1tpXS51cmIgPQotCQkJCXVzYl9hbGxvY191cmIoQkFTX05VTUZSQU1FUywgU0xBQl9LRVJORUwpOwotCQkJaWYgKCF1YmMtPmlzb291dHVyYnNbaV0udXJiKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgQkFTX0lOVVJCUzsgKytpKSB7Ci0JCQl1YmMtPmlzb2ludXJic1tpXSA9Ci0JCQkJdXNiX2FsbG9jX3VyYihCQVNfTlVNRlJBTUVTLCBTTEFCX0tFUk5FTCk7Ci0JCQlpZiAoIXViYy0+aXNvaW51cmJzW2ldKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQkFTX09VVFVSQlM7ICsraSkKKwkJCWlmICghKHViYy0+aXNvb3V0dXJic1tpXS51cmIgPQorCQkJICAgICAgdXNiX2FsbG9jX3VyYihCQVNfTlVNRlJBTUVTLCBTTEFCX0tFUk5FTCkpKQorCQkJCWdvdG8gYWxsb2NlcnI7CisJCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpCisJCQlpZiAoISh1YmMtPmlzb2ludXJic1tpXSA9CisJCQkgICAgICB1c2JfYWxsb2NfdXJiKEJBU19OVU1GUkFNRVMsIFNMQUJfS0VSTkVMKSkpCisJCQkJZ290byBhbGxvY2VycjsKIAl9CiAKIAl1Y3MtPnJjdmJ1ZiA9IE5VTEw7CkBAIC0yMjA0LDM1ICsyMTc5LDM3IEBACiAJLyogRmlsbCB0aGUgaW50ZXJydXB0IHVyYiBhbmQgc2VuZCBpdCB0byB0aGUgY29yZSAqLwogCWVuZHBvaW50ID0gJmhvc3RpZi0+ZW5kcG9pbnRbMF0uZGVzYzsKIAl1c2JfZmlsbF9pbnRfdXJiKHVjcy0+dXJiX2ludF9pbiwgdWRldiwKLQkgICAgICAgICAgICAgICAgIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpICYgMHgwZiksCi0JICAgICAgICAgICAgICAgICB1Y3MtPmludF9pbl9idWYsIDMsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKLQkgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+dXJiX2ludF9pbiwgU0xBQl9LRVJORUwpOwotCWlmIChyZXQpIHsKLQkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IGludGVycnVwdCBVUkI6ICVzIiwgZ2V0X3VzYl9zdGF0bXNnKHJldCkpOworCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsCisJCQkJCShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgJiAweDBmKSwKKwkJCSB1Y3MtPmludF9pbl9idWYsIDMsIHJlYWRfaW50X2NhbGxiYWNrLCBjcywKKwkJCSBlbmRwb2ludC0+YkludGVydmFsKTsKKwlpZiAoKHJjID0gdXNiX3N1Ym1pdF91cmIodWNzLT51cmJfaW50X2luLCBTTEFCX0tFUk5FTCkpICE9IDApIHsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlc1xuIiwKKwkJCWdldF91c2JfcmNtc2cocmMpKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiB0ZWxsIHRoZSBkZXZpY2UgdGhhdCB0aGUgZHJpdmVyIGlzIHJlYWR5ICovCi0JaWYgKChyZXQgPSByZXFfc3VibWl0KGNzLT5iY3MsIEhEX0RFVklDRV9JTklUX0FDSywgMCwgMCkpICE9IDApCisJaWYgKChyYyA9IHJlcV9zdWJtaXQoY3MtPmJjcywgSERfREVWSUNFX0lOSVRfQUNLLCAwLCAwKSkgIT0gMCkKIAkJZ290byBlcnJvcjsKIAogCS8qIHRlbGwgY29tbW9uIHBhcnQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5ICovCiAJaWYgKHN0YXJ0bW9kZSA9PSBTTV9MT0NLRUQpCiAJCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX0xPQ0tFRCk7Ci0JaWYgKCFnaWdhc2V0X3N0YXJ0KGNzKSkKLQkJZ290byBlcnJvcjsKIAogCS8qIHNhdmUgYWRkcmVzcyBvZiBjb250cm9sbGVyIHN0cnVjdHVyZSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjcyk7CiAKLQkvKiBzZXQgdXAgZGV2aWNlIHN5c2ZzICovCi0JZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhpbnRlcmZhY2UpOworCWlmICghZ2lnYXNldF9zdGFydChjcykpCisJCWdvdG8gZXJyb3I7CisKIAlyZXR1cm4gMDsKIAorYWxsb2NlcnI6CisJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIFVSQnNcbiIpOwogZXJyb3I6CiAJZnJlZXVyYnMoY3MpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAlnaWdhc2V0X3VuYXNzaWduKGNzKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTIyNDQsMjQgKzIyMjEsMzggQEAKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzOwotCi0JLyogY2xlYXIgZGV2aWNlIHN5c2ZzICovCi0JZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhpbnRlcmZhY2UpOworCWludCBqOwogCiAJY3MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCi0JSUZOVUxMUkVUKGNzKTsKIAl1Y3MgPSBjcy0+aHcuYmFzOwotCUlGTlVMTFJFVCh1Y3MpOwogCi0JaW5mbygiZGlzY29ubmVjdGluZyBHaWdhU2V0IGJhc2UiKTsKKwlkZXZfaW5mbyhjcy0+ZGV2LCAiZGlzY29ubmVjdGluZyBHaWdhc2V0IGJhc2VcbiIpOworCisJLyogbWFyayBiYXNlIGFzIG5vdCByZWFkeSwgYWxsIGNoYW5uZWxzIGRpc2Nvbm5lY3RlZCAqLworCWF0b21pY19zZXQoJnVjcy0+YmFzc3RhdGUsIDApOworCisJLyogdGVsbCBMTCBhbGwgY2hhbm5lbHMgYXJlIGRvd24gKi8KKwkvL0ZJWE1FIHNob3VsZG4ndCBnaWdhc2V0X3N0b3AoKSBkbyB0aGlzPworCWZvciAoaiA9IDA7IGogPCAyOyArK2opCisJCWdpZ2FzZXRfYmNoYW5uZWxfZG93bihjcy0+YmNzICsgaik7CisKKwkvKiBzdG9wIGRyaXZlciAoY29tbW9uIHBhcnQpICovCiAJZ2lnYXNldF9zdG9wKGNzKTsKKworCS8qIHN0b3AgdGltZXJzIGFuZCBVUkJzLCBmcmVlIHJlc3NvdXJjZXMgKi8KKwlkZWxfdGltZXJfc3luYygmdWNzLT50aW1lcl9jdHJsKTsKKwlkZWxfdGltZXJfc3luYygmdWNzLT50aW1lcl9hdHJkeSk7CisJZGVsX3RpbWVyX3N5bmMoJnVjcy0+dGltZXJfY21kX2luKTsKIAlmcmVldXJicyhjcyk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCWtmcmVlKHVjcy0+cmN2YnVmKTsKIAl1Y3MtPnJjdmJ1ZiA9IE5VTEw7CiAJdWNzLT5yY3ZidWZfc2l6ZSA9IDA7Ci0JYXRvbWljX3NldCgmdWNzLT5iYXNzdGF0ZSwgMCk7CisJdXNiX3B1dF9kZXYodWNzLT51ZGV2KTsKKwl1Y3MtPmludGVyZmFjZSA9IE5VTEw7CisJdWNzLT51ZGV2ID0gTlVMTDsKKwljcy0+ZGV2ID0gTlVMTDsKIAlnaWdhc2V0X3VuYXNzaWduKGNzKTsKIH0KIApAQCAtMjI5MywxMyArMjI4NCwxNCBAQAogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZHJpdmVyIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KIAlpZiAoKGRyaXZlciA9IGdpZ2FzZXRfaW5pdGRyaXZlcihHSUdBU0VUX01JTk9SLCBHSUdBU0VUX01JTk9SUywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJR0FTRVRfREVWRlNOQU1FLCAmZ2lnb3BzLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSElTX01PRFVMRSkpID09IE5VTEwpCisJCQkJICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAorCQkJCSAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJmdpZ29wcywKKwkJCQkgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQogCQlnb3RvIGVycm9yOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KLQljYXJkc3RhdGUgPSBnaWdhc2V0X2luaXRjcyhkcml2ZXIsIDIsIDAsIDAsIGNpZG1vZGUsIEdJR0FTRVRfTU9EVUxFTkFNRSk7CisJY2FyZHN0YXRlID0gZ2lnYXNldF9pbml0Y3MoZHJpdmVyLCAyLCAwLCAwLCBjaWRtb2RlLAorCQkJCSAgIEdJR0FTRVRfTU9EVUxFTkFNRSk7CiAJaWYgKCFjYXJkc3RhdGUpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTIzMjgsMjIgKzIzMjAsMzUgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IGJhc19naWdhc2V0X2V4aXQodm9pZCkKIHsKKwlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqdWNzID0gY2FyZHN0YXRlLT5ody5iYXM7CisKIAlnaWdhc2V0X2Jsb2NrZHJpdmVyKGRyaXZlcik7IC8qID0+IHByb2JlIHdpbGwgZmFpbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPT4gbm8gZ2lnYXNldF9zdGFydCBhbnkgbW9yZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJICAgICAgKiA9PiBubyBnaWdhc2V0X3N0YXJ0IGFueSBtb3JlCisJCQkJICAgICAgKi8KIAogCWdpZ2FzZXRfc2h1dGRvd24oY2FyZHN0YXRlKTsKIAkvKiBmcm9tIG5vdyBvbiwgbm8gaXNkbiBjYWxsYmFjayBzaG91bGQgYmUgcG9zc2libGUgKi8KIAotCWlmIChhdG9taWNfcmVhZCgmY2FyZHN0YXRlLT5ody5iYXMtPmJhc3N0YXRlKSAmIEJTX0FUT1BFTikgewotCQlkYmcoREVCVUdfQU5ZLCAiY2xvc2luZyBBVCBjaGFubmVsIik7Ci0JCWlmIChyZXFfc3VibWl0KGNhcmRzdGF0ZS0+YmNzLAotCQkgICAgICAgICAgICAgICBIRF9DTE9TRV9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKSA+PSAwKSB7Ci0JCQkvKiBzdWNjZXNzZnVsbHkgc3VibWl0dGVkIC0gd2FpdCBmb3IgY29tcGxldGlvbiAqLwotCQkJLy93YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY3MtPmluaXR3YWl0LCAhY3MtPmh3LmJhcy0+cGVuZGluZyk7Ci0JCQkvL0ZJWE1FIG5lZWQgb3duIHdhaXQgcXVldWU/IHdha2V1cD8KLQkJfQorCS8qIGNsb3NlIGFsbCBzdGlsbCBvcGVuIGNoYW5uZWxzICovCisJaWYgKGF0b21pY19yZWFkKCZ1Y3MtPmJhc3N0YXRlKSAmIEJTX0IxT1BFTikgeworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbG9zaW5nIEIxIGNoYW5uZWwiKTsKKwkJdXNiX2NvbnRyb2xfbXNnKHVjcy0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHVjcy0+dWRldiwgMCksCisJCQkJSERfQ0xPU0VfQjFDSEFOTkVMLCBPVVRfVkVORE9SX1JFUSwgMCwgMCwKKwkJCQlOVUxMLCAwLCBCQVNfVElNRU9VVCk7CiAJfQorCWlmIChhdG9taWNfcmVhZCgmdWNzLT5iYXNzdGF0ZSkgJiBCU19CMk9QRU4pIHsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiY2xvc2luZyBCMiBjaGFubmVsIik7CisJCXVzYl9jb250cm9sX21zZyh1Y3MtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSh1Y3MtPnVkZXYsIDApLAorCQkJCUhEX0NMT1NFX0IyQ0hBTk5FTCwgT1VUX1ZFTkRPUl9SRVEsIDAsIDAsCisJCQkJTlVMTCwgMCwgQkFTX1RJTUVPVVQpOworCX0KKwlpZiAoYXRvbWljX3JlYWQoJnVjcy0+YmFzc3RhdGUpICYgQlNfQVRPUEVOKSB7CisJCWdpZ19kYmcoREVCVUdfSU5JVCwgImNsb3NpbmcgQVQgY2hhbm5lbCIpOworCQl1c2JfY29udHJvbF9tc2codWNzLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUodWNzLT51ZGV2LCAwKSwKKwkJCQlIRF9DTE9TRV9BVENIQU5ORUwsIE9VVF9WRU5ET1JfUkVRLCAwLCAwLAorCQkJCU5VTEwsIDAsIEJBU19USU1FT1VUKTsKKwl9CisJYXRvbWljX3NldCgmdWNzLT5iYXNzdGF0ZSwgMCk7CiAKIAkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAl1c2JfZGVyZWdpc3RlcigmZ2lnYXNldF91c2JfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKaW5kZXggNjQzNzE5OS4uZTU1NzY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiwKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKQEAgLTExLDEwICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGNvbW1vbi5jLHYgMS4xMDQuNC4yMiAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTIzLDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4iCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPiwgU3RlZmFuIEVpbGVycyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkRyaXZlciBmb3IgR2lnYXNldCAzMDd4IgogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtMzIsMjEgKzI4LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGdpZ2FzZXRfZGVidWdsZXZlbCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsIik7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBQcm90b3R5cGVzIG9mIGludGVybmFsIGZ1bmN0aW9ucwotICovCi0KLS8vc3RhdGljIHZvaWQgZ2lnYXNldF9wcm9jZXNzX3Jlc3BvbnNlKGludCByZXNwX2NvZGUsIGludCBwYXJhbWV0ZXIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqIHBzdHJpbmcpOwotc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmFsbG9jX2NzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KTsKLXN0YXRpYyB2b2lkIGZyZWVfY3Moc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwotc3RhdGljIHZvaWQgbWFrZV92YWxpZChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgbWFzayk7Ci1zdGF0aWMgdm9pZCBtYWtlX2ludmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spOwotCi0jZGVmaW5lIFZBTElEX01JTk9SICAgICAgIDB4MDEKLSNkZWZpbmUgVkFMSURfSUQgICAgICAgICAgMHgwMgotI2RlZmluZSBBU1NJR05FRCAgICAgICAgICAweDA0CisvKiBkcml2ZXIgc3RhdGUgZmxhZ3MgKi8KKyNkZWZpbmUgVkFMSURfTUlOT1IJMHgwMQorI2RlZmluZSBWQUxJRF9JRAkweDAyCisjZGVmaW5lIEFTU0lHTkVECTB4MDQKIAogLyogYml0d2lzZSBieXRlIGludmVyc2lvbiB0YWJsZSAqLwogX191OCBnaWdhc2V0X2ludnRhYlsyNTZdID0gewpAQCAtODYsNDIgKzcxLDQwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ludnRhYik7CiAKIHZvaWQgZ2lnYXNldF9kYmdfYnVmZmVyKGVudW0gZGVidWdsZXZlbCBsZXZlbCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZnJvbV91c2VyKQorCQkJc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGNoYXIgb3V0YnVmWzgwXTsKLQl1bnNpZ25lZCBjaGFyIGluYnVmWzgwIC0gMV07Ci0Jc2l6ZV90IG51bWluOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluOworCXVuc2lnbmVkIGNoYXIgYzsKIAlzaXplX3Qgc3BhY2UgPSBzaXplb2Ygb3V0YnVmIC0gMTsKIAl1bnNpZ25lZCBjaGFyICpvdXQgPSBvdXRidWY7CisJc2l6ZV90IG51bWluID0gbGVuOwogCi0JaWYgKCFmcm9tX3VzZXIpIHsKLQkJaW4gPSBidWY7Ci0JCW51bWluID0gbGVuOwotCX0gZWxzZSB7Ci0JCW51bWluID0gbGVuIDwgc2l6ZW9mIGluYnVmID8gbGVuIDogc2l6ZW9mIGluYnVmOwotCQlpbiA9IGluYnVmOwotCQlpZiAoY29weV9mcm9tX3VzZXIoaW5idWYsIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSBidWYsIG51bWluKSkgewotCQkJc3RybmNweShpbmJ1ZiwgIjxGQVVMVD4iLCBzaXplb2YgaW5idWYpOwotCQkJbnVtaW4gPSBzaXplb2YgIjxGQVVMVD4iIC0gMTsKKwl3aGlsZSAobnVtaW4tLSkgeworCQljID0gKmJ1ZisrOworCQlpZiAoYyA9PSAnficgfHwgYyA9PSAnXicgfHwgYyA9PSAnXFwnKSB7CisJCQlpZiAoIXNwYWNlLS0pCisJCQkJYnJlYWs7CisJCQkqb3V0KysgPSAnXFwnOwogCQl9Ci0JfQotCi0JZm9yICg7IG51bWluICYmIHNwYWNlOyAtLW51bWluLCArK2luKSB7Ci0JCS0tc3BhY2U7Ci0JCWlmICgqaW4gPj0gMzIpCi0JCQkqb3V0KysgPSAqaW47Ci0JCWVsc2UgeworCQlpZiAoYyAmIDB4ODApIHsKKwkJCWlmICghc3BhY2UtLSkKKwkJCQlicmVhazsKKwkJCSpvdXQrKyA9ICd+JzsKKwkJCWMgXj0gMHg4MDsKKwkJfQorCQlpZiAoYyA8IDB4MjAgfHwgYyA9PSAweDdmKSB7CisJCQlpZiAoIXNwYWNlLS0pCisJCQkJYnJlYWs7CiAJCQkqb3V0KysgPSAnXic7Ci0JCQlpZiAoc3BhY2UpIHsKLQkJCQkqb3V0KysgPSAnQCcgKyAqaW47Ci0JCQkJLS1zcGFjZTsKLQkJCX0KKwkJCWMgXj0gMHg0MDsKIAkJfQorCQlpZiAoIXNwYWNlLS0pCisJCQlicmVhazsKKwkJKm91dCsrID0gYzsKIAl9CiAJKm91dCA9IDA7CiAKLQlkYmcobGV2ZWwsICIlcyAoJXUgYnl0ZXMpOiAlcyIsIG1zZywgKHVuc2lnbmVkKSBsZW4sIG91dGJ1Zik7CisJZ2lnX2RiZyhsZXZlbCwgIiVzICgldSBieXRlcyk6ICVzIiwgbXNnLCAodW5zaWduZWQpIGxlbiwgb3V0YnVmKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfZGJnX2J1ZmZlcik7CiAKQEAgLTE0NiwxMSArMTI5LDYgQEAKIHsKIAlpbnQgaSwgcjsKIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigibm90IGNvbm5lY3RlZCEiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWNzLT5jb250cm9sX3N0YXRlID0gVElPQ01fUlRTOyAvL0ZJWE1FCiAKIAlyID0gc2V0ZmxhZ3MoY3MsIFRJT0NNX0RUUiwgMjAwKTsKQEAgLTE3NCw3ICsxNTIsNyBAQAogCXJldHVybiAwOwogCiBlcnJvcjoKLQllcnIoImVycm9yICVkIG9uIHNldHVhcnRiaXRzIVxuIiwgLXIpOworCWRldl9lcnIoY3MtPmRldiwgImVycm9yICVkIG9uIHNldHVhcnRiaXRzXG4iLCAtcik7CiAJY3MtPmNvbnRyb2xfc3RhdGUgPSBUSU9DTV9SVFN8VElPQ01fRFRSOyAvLyBGSVhNRSBpcyB0aGlzIGEgZ29vZCB2YWx1ZT8KIAljcy0+b3BzLT5zZXRfbW9kZW1fY3RybChjcywgMCwgVElPQ01fUlRTfFRJT0NNX0RUUik7CiAKQEAgLTE4NywxMyArMTY1LDEzIEBACiAJCXJldHVybiAwOwogCiAJaWYgKC0tYXRfc3RhdGUtPnRpbWVyX2V4cGlyZXMpIHsKLQkJZGJnKERFQlVHX01DTUQsICJkZWNyZWFzZWQgdGltZXIgb2YgJXAgdG8gJWx1IiwKLQkJICAgIGF0X3N0YXRlLCBhdF9zdGF0ZS0+dGltZXJfZXhwaXJlcyk7CisJCWdpZ19kYmcoREVCVUdfTUNNRCwgImRlY3JlYXNlZCB0aW1lciBvZiAlcCB0byAlbHUiLAorCQkJYXRfc3RhdGUsIGF0X3N0YXRlLT50aW1lcl9leHBpcmVzKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChhdF9zdGF0ZS0+Y3MsIGF0X3N0YXRlLCBFVl9USU1FT1VULCBOVUxMLAotCSAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljX3JlYWQoJmF0X3N0YXRlLT50aW1lcl9pbmRleCksIE5VTEwpKSB7CisJCQkgICAgICAgYXRfc3RhdGUtPnRpbWVyX2luZGV4LCBOVUxMKSkgewogCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCX0KIApAQCAtMjIxLDEwICsxOTksMTAgQEAKIAkJaWYgKHRlc3RfdGltZW91dChhdF9zdGF0ZSkpCiAJCQl0aW1lb3V0ID0gMTsKIAotCWlmIChhdG9taWNfcmVhZCgmY3MtPnJ1bm5pbmcpKSB7Ci0JCW1vZF90aW1lcigmY3MtPnRpbWVyLCBqaWZmaWVzICsgR0lHX1RJQ0spOworCWlmIChjcy0+cnVubmluZykgeworCQltb2RfdGltZXIoJmNzLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoR0lHX1RJQ0spKTsKIAkJaWYgKHRpbWVvdXQpIHsKLQkJCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIHRpbWVvdXQiKTsKKwkJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyB0aW1lb3V0Iik7CiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+ZXZlbnRfdGFza2xldCk7CiAJCX0KIAl9CkBAIC0yMzgsMTMgKzIxNiwxNCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoYmNzLT51c2VfY291bnQpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbCAlZCIsCisJCQliY3MtPmNoYW5uZWwpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KIAkrK2Jjcy0+dXNlX2NvdW50OwogCWJjcy0+YnVzeSA9IDE7Ci0JZGJnKERFQlVHX0FOWSwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0FOWSwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CkBAIC0yNTUsMTMgKzIzNCwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIWJjcy0+YnVzeSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGZyZWUgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGZyZWUgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAktLWJjcy0+dXNlX2NvdW50OwogCWJjcy0+YnVzeSA9IDA7Ci0JZGJnKERFQlVHX0FOWSwgImZyZWVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiZnJlZWQgY2hhbm5lbCAlZCIsIGJjcy0+Y2hhbm5lbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yNzQsMTQgKzI1MywxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJaWYgKGNzLT5iY3NbaV0udXNlX2NvdW50KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwotCQkJZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBhbGwgY2hhbm5lbHMiKTsKIAkJCXJldHVybiAwOwogCQl9CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQkrK2NzLT5iY3NbaV0udXNlX2NvdW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKLQlkYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGFsbCBjaGFubmVscyIpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGFsbCBjaGFubmVscyIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yOTEsNyArMjcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JZGJnKERFQlVHX0FOWSwgInVuYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJ1bmJsb2NraW5nIGFsbCBjaGFubmVscyIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJLS1jcy0+YmNzW2ldLnVzZV9jb3VudDsKQEAgLTMwMyw3ICsyODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlkYmcoREVCVUdfQU5ZLCAiYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19BTlksICJibG9ja2luZyBhbGwgY2hhbm5lbHMiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCSsrY3MtPmJjc1tpXS51c2VfY291bnQ7CkBAIC0zMTQsMjUgKzI5MywyNyBAQAogewogCXN0cnVjdCBldmVudF90ICpldjsKIAl1bnNpZ25lZCBoZWFkLCB0YWlsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBubyBsb2NraW5nIG5lZWRlZCAobm8gcmVhZGVyL3dyaXRlciBhbGxvd2VkKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCi0JaGVhZCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfaGVhZCk7Ci0JdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJaGVhZCA9IGNzLT5ldl9oZWFkOworCXRhaWwgPSBjcy0+ZXZfdGFpbDsKIAogCXdoaWxlICh0YWlsICE9IGhlYWQpIHsKIAkJZXYgPSBjcy0+ZXZlbnRzICsgaGVhZDsKIAkJa2ZyZWUoZXYtPnB0cik7Ci0KIAkJaGVhZCA9IChoZWFkICsgMSkgJSBNQVhfRVZFTlRTOwogCX0KIAotCWF0b21pY19zZXQoJmNzLT5ldl9oZWFkLCB0YWlsKTsKKwljcy0+ZXZfaGVhZCA9IHRhaWw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogfQogCiBzdHJ1Y3QgZXZlbnRfdCAqZ2lnYXNldF9hZGRfZXZlbnQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBpbnQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZykKKwkJCQkgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgaW50IHR5cGUsCisJCQkJICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIG5leHQsIHRhaWw7CkBAIC0zNDAsOSArMzIxLDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCi0JdGFpbCA9IGF0b21pY19yZWFkKCZjcy0+ZXZfdGFpbCk7CisJdGFpbCA9IGNzLT5ldl90YWlsOwogCW5leHQgPSAodGFpbCArIDEpICUgTUFYX0VWRU5UUzsKLQlpZiAodW5saWtlbHkobmV4dCA9PSBhdG9taWNfcmVhZCgmY3MtPmV2X2hlYWQpKSkKKwlpZiAodW5saWtlbHkobmV4dCA9PSBjcy0+ZXZfaGVhZCkpCiAJCWVycigiZXZlbnQgcXVldWUgZnVsbCIpOwogCWVsc2UgewogCQlldmVudCA9IGNzLT5ldmVudHMgKyB0YWlsOwpAQCAtMzUyLDcgKzMzMyw3IEBACiAJCWV2ZW50LT5wdHIgPSBwdHI7CiAJCWV2ZW50LT5hcmcgPSBhcmc7CiAJCWV2ZW50LT5wYXJhbWV0ZXIgPSBwYXJhbWV0ZXI7Ci0JCWF0b21pY19zZXQoJmNzLT5ldl90YWlsLCBuZXh0KTsKKwkJY3MtPmV2X3RhaWwgPSBuZXh0OwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CkBAIC0zOTEsMTQgKzM3MiwxNCBAQAogewogCWludCBpOwogCi0JZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1slZF0tPmh3IiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1slZF0tPmh3IiwgYmNzLT5jaGFubmVsKTsKIAlpZiAoIWJjcy0+Y3MtPm9wcy0+ZnJlZWJjc2h3KGJjcykpIHsKLQkJZGJnKERFQlVHX0lOSVQsICJmYWlsZWQiKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiZmFpbGVkIik7CiAJfQogCi0JZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBiY3NbJWRdLT5hdF9zdGF0ZSIsIGJjcy0+Y2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiY2xlYXJpbmcgYmNzWyVkXS0+YXRfc3RhdGUiLCBiY3MtPmNoYW5uZWwpOwogCWNsZWFyX2F0X3N0YXRlKCZiY3MtPmF0X3N0YXRlKTsKLQlkYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzWyVkXS0+c2tiIiwgYmNzLT5jaGFubmVsKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGJjc1slZF0tPnNrYiIsIGJjcy0+Y2hhbm5lbCk7CiAKIAlpZiAoYmNzLT5za2IpCiAJCWRldl9rZnJlZV9za2IoYmNzLT5za2IpOwpAQCAtNDA4LDYgKzM4OSw1MiBAQAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmFsbG9jX2NzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaTsKKwlzdGF0aWMgc3RydWN0IGNhcmRzdGF0ZSAqcmV0ID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5taW5vcnM7ICsraSkgeworCQlpZiAoIShkcnYtPmZsYWdzW2ldICYgVkFMSURfTUlOT1IpKSB7CisJCQlkcnYtPmZsYWdzW2ldID0gVkFMSURfTUlOT1I7CisJCQlyZXQgPSBkcnYtPmNzICsgaTsKKwkJfQorCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY3Moc3RydWN0IGNhcmRzdGF0ZSAqY3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfdmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSB8PSBtYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX2ludmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydiA9IGNzLT5kcml2ZXI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgZmxhZ3MpOworCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSAmPSB+bWFzazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKK30KKwogdm9pZCBnaWdhc2V0X2ZyZWVjcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKIAlpbnQgaTsKQEAgLTQxNiw3ICs0NDMsNyBAQAogCWlmICghY3MpCiAJCXJldHVybjsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5iY3MpCiAJCWdvdG8gZl9jczsKQEAgLTQyNCw4ICs0NTEsOSBAQAogCQlnb3RvIGZfYmNzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JYXRvbWljX3NldCgmY3MtPnJ1bm5pbmcsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7IC8qIGV2ZW50IGhhbmRsZXIgYW5kIHRpbWVyIGFyZSBub3QgcmVzY2hlZHVsZWQgYmVsb3cgKi8KKwljcy0+cnVubmluZyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsgLyogZXZlbnQgaGFuZGxlciBhbmQgdGltZXIgYXJlCisJCQkJCQkgICAgIG5vdCByZXNjaGVkdWxlZCBiZWxvdyAqLwogCiAJdGFza2xldF9raWxsKCZjcy0+ZXZlbnRfdGFza2xldCk7CiAJZGVsX3RpbWVyX3N5bmMoJmNzLT50aW1lcik7CkBAIC00MzQsNyArNDYyLDcgQEAKIAlkZWZhdWx0OgogCQlnaWdhc2V0X2lmX2ZyZWUoY3MpOwogCi0JCWRiZyhERUJVR19JTklULCAiY2xlYXJpbmcgaHciKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAiY2xlYXJpbmcgaHciKTsKIAkJY3MtPm9wcy0+ZnJlZWNzaHcoY3MpOwogCiAJCS8vRklYTUUgY21kYnVmCkBAIC00NDMsMzYgKzQ3MSwzNiBAQAogCWNhc2UgMjogLyogZXJyb3IgaW4gaW5pdGNzaHcgKi8KIAkJLyogRGVyZWdpc3RlciBmcm9tIExMICovCiAJCW1ha2VfaW52YWxpZChjcywgVkFMSURfSUQpOwotCQlkYmcoREVCVUdfSU5JVCwgImNsZWFyaW5nIGlpZiIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBpaWYiKTsKIAkJZ2lnYXNldF9pNGxfY21kKGNzLCBJU0ROX1NUQVRfVU5MT0FEKTsKIAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIDE6IC8qIGVycm9yIHdoZW4gcmVnZXN0ZXJpbmcgdG8gTEwgKi8KLQkJZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBhdF9zdGF0ZSIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJjbGVhcmluZyBhdF9zdGF0ZSIpOwogCQljbGVhcl9hdF9zdGF0ZSgmY3MtPmF0X3N0YXRlKTsKIAkJZGVhbGxvY19hdF9zdGF0ZXMoY3MpOwogCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMDogLyogZXJyb3IgaW4gb25lIGNhbGwgdG8gaW5pdGJjcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpIHsKLQkJCWRiZyhERUJVR19JTklULCAiY2xlYXJpbmcgYmNzWyVkXSIsIGkpOworCQkJZ2lnX2RiZyhERUJVR19JTklULCAiY2xlYXJpbmcgYmNzWyVkXSIsIGkpOwogCQkJZ2lnYXNldF9mcmVlYmNzKGNzLT5iY3MgKyBpKTsKIAkJfQogCiAJCWNsZWFyX2V2ZW50cyhjcyk7Ci0JCWRiZyhERUJVR19JTklULCAiZnJlZWluZyBpbmJ1ZiIpOworCQlnaWdfZGJnKERFQlVHX0lOSVQsICJmcmVlaW5nIGluYnVmIik7CiAJCWtmcmVlKGNzLT5pbmJ1Zik7CiAJfQotZl9iY3M6CWRiZyhERUJVR19JTklULCAiZnJlZWluZyBiY3NbXSIpOworZl9iY3M6CWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgYmNzW10iKTsKIAlrZnJlZShjcy0+YmNzKTsKLWZfY3M6CWRiZyhERUJVR19JTklULCAiZnJlZWluZyBjcyIpOwotCXVwKCZjcy0+c2VtKTsKK2ZfY3M6CWdpZ19kYmcoREVCVUdfSU5JVCwgImZyZWVpbmcgY3MiKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJZnJlZV9jcyhjcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ZyZWVjcyk7CiAKIHZvaWQgZ2lnYXNldF9hdF9pbml0KHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgc3RydWN0IGJjX3N0YXRlICpiY3MsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKKwkJICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCkKIHsKIAlpbnQgaTsKIApAQCAtNDgyLDggKzUxMCw4IEBACiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgPSAwOwogCWF0X3N0YXRlLT50aW1lcl9leHBpcmVzID0gMDsKIAlhdF9zdGF0ZS0+dGltZXJfYWN0aXZlID0gMDsKLQlhdG9taWNfc2V0KCZhdF9zdGF0ZS0+dGltZXJfaW5kZXgsIDApOwotCWF0b21pY19zZXQoJmF0X3N0YXRlLT5zZXFfaW5kZXgsIDApOworCWF0X3N0YXRlLT50aW1lcl9pbmRleCA9IDA7CisJYXRfc3RhdGUtPnNlcV9pbmRleCA9IDA7CiAJYXRfc3RhdGUtPkNvblN0YXRlID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgU1RSX05VTTsgKytpKQogCQlhdF9zdGF0ZS0+c3RyX3ZhcltpXSA9IE5VTEw7CkBAIC01MDEsNyArNTI5LDcgQEAKIAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2luYnVmX2luaXQoc3RydWN0IGluYnVmX3QgKmluYnVmLCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGlucHV0c3RhdGUpCisJCQkgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBpbnB1dHN0YXRlKQogLyogaW5idWYtPnJlYWQgbXVzdCBiZSBhbGxvY2F0ZWQgYmVmb3JlISAqLwogewogCWF0b21pY19zZXQoJmluYnVmLT5oZWFkLCAwKTsKQEAgLTUxMiw5ICs1NDAsNTAgQEAKIAlpbmJ1Zi0+aW5wdXRzdGF0ZSA9IGlucHV0c3RhdGU7CiB9CiAKKy8qIGFwcGVuZCByZWNlaXZlZCBieXRlcyB0byBpbmJ1ZiAqLworaW50IGdpZ2FzZXRfZmlsbF9pbmJ1ZihzdHJ1Y3QgaW5idWZfdCAqaW5idWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIG51bWJ5dGVzKQoreworCXVuc2lnbmVkIG4sIGhlYWQsIHRhaWwsIGJ5dGVzbGVmdDsKKworCWdpZ19kYmcoREVCVUdfSU5UUiwgInJlY2VpdmVkICV1IGJ5dGVzIiwgbnVtYnl0ZXMpOworCisJaWYgKCFudW1ieXRlcykKKwkJcmV0dXJuIDA7CisKKwlieXRlc2xlZnQgPSBudW1ieXRlczsKKwl0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKTsKKwloZWFkID0gYXRvbWljX3JlYWQoJmluYnVmLT5oZWFkKTsKKwlnaWdfZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CisKKwl3aGlsZSAoYnl0ZXNsZWZ0KSB7CisJCWlmIChoZWFkID4gdGFpbCkKKwkJCW4gPSBoZWFkIC0gMSAtIHRhaWw7CisJCWVsc2UgaWYgKGhlYWQgPT0gMCkKKwkJCW4gPSAoUkJVRlNJWkUtMSkgLSB0YWlsOworCQllbHNlCisJCQluID0gUkJVRlNJWkUgLSB0YWlsOworCQlpZiAoIW4pIHsKKwkJCWRldl9lcnIoaW5idWYtPmNzLT5kZXYsCisJCQkJImJ1ZmZlciBvdmVyZmxvdyAoJXUgYnl0ZXMgbG9zdCkiLCBieXRlc2xlZnQpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG4gPiBieXRlc2xlZnQpCisJCQluID0gYnl0ZXNsZWZ0OworCQltZW1jcHkoaW5idWYtPmRhdGEgKyB0YWlsLCBzcmMsIG4pOworCQlieXRlc2xlZnQgLT0gbjsKKwkJdGFpbCA9ICh0YWlsICsgbikgJSBSQlVGU0laRTsKKwkJc3JjICs9IG47CisJfQorCWdpZ19kYmcoREVCVUdfSU5UUiwgInNldHRpbmcgdGFpbCB0byAldSIsIHRhaWwpOworCWF0b21pY19zZXQoJmluYnVmLT50YWlsLCB0YWlsKTsKKwlyZXR1cm4gbnVtYnl0ZXMgIT0gYnl0ZXNsZWZ0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9maWxsX2luYnVmKTsKKwogLyogSW5pdGlhbGl6ZSB0aGUgYi1jaGFubmVsIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBiY19zdGF0ZSAqZ2lnYXNldF9pbml0YmNzKHN0cnVjdCBiY19zdGF0ZSAqYmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2hhbm5lbCkKKwkJCQkJc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaGFubmVsKQogewogCWludCBpOwogCkBAIC01MjYsNyArNTk1LDcgQEAKIAliY3MtPnRyYW5zX2Rvd24gPSAwOwogCWJjcy0+dHJhbnNfdXAgPSAwOwogCi0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGJjc1slZF0tPmF0X3N0YXRlIiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBiY3NbJWRdLT5hdF9zdGF0ZSIsIGNoYW5uZWwpOwogCWdpZ2FzZXRfYXRfaW5pdCgmYmNzLT5hdF9zdGF0ZSwgYmNzLCBjcywgLTEpOwogCiAJYmNzLT5yY3ZieXRlcyA9IDA7CkBAIC01MzUsNyArNjA0LDcgQEAKIAliY3MtPmVtcHR5Y291bnQgPSAwOwogI2VuZGlmCiAKLQlkYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgYmNzWyVkXS0+c2tiIiwgY2hhbm5lbCk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBiY3NbJWRdLT5za2IiLCBjaGFubmVsKTsKIAliY3MtPmZjcyA9IFBQUF9JTklURkNTOwogCWJjcy0+aW5wdXRzdGF0ZSA9IDA7CiAJaWYgKGNzLT5pZ25vcmVmcmFtZXMpIHsKQEAgLTU0NCw3ICs2MTMsNyBAQAogCX0gZWxzZSBpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJZWxzZSB7Ci0JCXdhcm4oImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCQliY3MtPmlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJfQogCkBAIC01NTksMTQgKzYyOCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBBVF9OVU07ICsraSkKIAkJYmNzLT5jb21tYW5kc1tpXSA9IE5VTEw7CiAKLQlkYmcoREVCVUdfSU5JVCwgIiAgc2V0dGluZyB1cCBiY3NbJWRdLT5odyIsIGNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgIiAgc2V0dGluZyB1cCBiY3NbJWRdLT5odyIsIGNoYW5uZWwpOwogCWlmIChjcy0+b3BzLT5pbml0YmNzaHcoYmNzKSkKIAkJcmV0dXJuIGJjczsKIAotLy9lcnJvcjoKLQlkYmcoREVCVUdfSU5JVCwgIiAgZmFpbGVkIik7CisJZ2lnX2RiZyhERUJVR19JTklULCAiICBmYWlsZWQiKTsKIAotCWRiZyhERUJVR19JTklULCAiICBmcmVlaW5nIGJjc1slZF0tPnNrYiIsIGNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgIiAgZnJlZWluZyBiY3NbJWRdLT5za2IiLCBjaGFubmVsKTsKIAlpZiAoYmNzLT5za2IpCiAJCWRldl9rZnJlZV9za2IoYmNzLT5za2IpOwogCkBAIC01NzgsOSArNjQ2LDEwIEBACiAgKiBDYWxscyBoYXJkd2FyZSBkZXBlbmRlbnQgZ2lnYXNldF9pbml0Y3NodygpIGZ1bmN0aW9uCiAgKiBDYWxscyBCIGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZ2lnYXNldF9pbml0YmNzKCkgZm9yIGVhY2ggQiBjaGFubmVsCiAgKiBwYXJhbWV0ZXJzOgotICogICAgICBkcnYJCWhhcmR3YXJlIGRyaXZlciB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8KKyAqCWRydgkJaGFyZHdhcmUgZHJpdmVyIHRoZSBkZXZpY2UgYmVsb25ncyB0bwogICoJY2hhbm5lbHMJbnVtYmVyIG9mIEIgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IGRldmljZQotICoJb25lY2hhbm5lbAkhPTA6IEIgY2hhbm5lbCBkYXRhIGFuZCBBVCBjb21tYW5kcyBzaGFyZSBvbmUgY29tbXVuaWNhdGlvbiBjaGFubmVsCisgKglvbmVjaGFubmVsCSE9MDogQiBjaGFubmVsIGRhdGEgYW5kIEFUIGNvbW1hbmRzIHNoYXJlIG9uZQorICoJCQkgICAgIGNvbW11bmljYXRpb24gY2hhbm5lbAogICoJCQk9PTA6IEIgY2hhbm5lbHMgaGF2ZSBzZXBhcmF0ZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzCiAgKglpZ25vcmVmcmFtZXMJbnVtYmVyIG9mIGZyYW1lcyB0byBpZ25vcmUgYWZ0ZXIgc2V0dGluZyB1cCBCIGNoYW5uZWwKICAqCWNpZG1vZGUJCSE9MDogc3RhcnQgaW4gQ2FsbElEIG1vZGUKQEAgLTU5MywxNyArNjYyLDE4IEBACiAJCQkJIGludCBjaWRtb2RlLCBjb25zdCBjaGFyICptb2R1bGVuYW1lKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGNzIik7CisJZ2lnX2RiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBjcyIpOwogCWNzID0gYWxsb2NfY3MoZHJ2KTsKIAlpZiAoIWNzKQogCQlnb3RvIGVycm9yOwotCWRiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBiY3NbMC4uJWRdIiwgY2hhbm5lbHMgLSAxKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1swLi4lZF0iLCBjaGFubmVscyAtIDEpOwogCWNzLT5iY3MgPSBrbWFsbG9jKGNoYW5uZWxzICogc2l6ZW9mKHN0cnVjdCBiY19zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghY3MtPmJjcykKIAkJZ290byBlcnJvcjsKLQlkYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgaW5idWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGluYnVmIik7CiAJY3MtPmluYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGluYnVmX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzLT5pbmJ1ZikKIAkJZ290byBlcnJvcjsKQEAgLTYxMywxOSArNjgzLDIzIEBACiAJY3MtPm9uZWNoYW5uZWwgPSBvbmVjaGFubmVsOwogCWNzLT5pZ25vcmVmcmFtZXMgPSBpZ25vcmVmcmFtZXM7CiAJSU5JVF9MSVNUX0hFQUQoJmNzLT50ZW1wX2F0X3N0YXRlcyk7Ci0JYXRvbWljX3NldCgmY3MtPnJ1bm5pbmcsIDApOworCWNzLT5ydW5uaW5nID0gMDsKIAlpbml0X3RpbWVyKCZjcy0+dGltZXIpOyAvKiBjbGVhciBuZXh0ICYgcHJldiAqLwogCXNwaW5fbG9ja19pbml0KCZjcy0+ZXZfbG9jayk7Ci0JYXRvbWljX3NldCgmY3MtPmV2X3RhaWwsIDApOwotCWF0b21pY19zZXQoJmNzLT5ldl9oZWFkLCAwKTsKLQlpbml0X01VVEVYX0xPQ0tFRCgmY3MtPnNlbSk7Ci0JdGFza2xldF9pbml0KCZjcy0+ZXZlbnRfdGFza2xldCwgJmdpZ2FzZXRfaGFuZGxlX2V2ZW50LCAodW5zaWduZWQgbG9uZykgY3MpOworCWNzLT5ldl90YWlsID0gMDsKKwljcy0+ZXZfaGVhZCA9IDA7CisJbXV0ZXhfaW5pdCgmY3MtPm11dGV4KTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOworCisJdGFza2xldF9pbml0KCZjcy0+ZXZlbnRfdGFza2xldCwgJmdpZ2FzZXRfaGFuZGxlX2V2ZW50LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBjcyk7CiAJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDApOwogCWNzLT5jdXJfYXRfc2VxID0gMDsKIAljcy0+Z290Znd2ZXIgPSAtMTsKIAljcy0+b3Blbl9jb3VudCA9IDA7CisJY3MtPmRldiA9IE5VTEw7CiAJY3MtPnR0eSA9IE5VTEw7Ci0JYXRvbWljX3NldCgmY3MtPmNpZG1vZGUsIGNpZG1vZGUgIT0gMCk7CisJY3MtPmNpZG1vZGUgPSBjaWRtb2RlICE9IDA7CiAKIAkvL2lmKG9uZWNoYW5uZWwpIHsgLy9GSVhNRQogCQljcy0+dGFibm9jaWQgPSBnaWdhc2V0X3RhYl9ub2NpZF9tMTB4OwpAQCAtNjQyLDUwICs3MTYsNDMgQEAKIAlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19VTklOSVRJQUxJWkVEKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgKytpKSB7Ci0JCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBiY3NbJWRdLnJlYWQiLCBpKTsKKwkJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBiY3NbJWRdLnJlYWQiLCBpKTsKIAkJaWYgKCFnaWdhc2V0X2luaXRiY3MoY3MtPmJjcyArIGksIGNzLCBpKSkKIAkJCWdvdG8gZXJyb3I7CiAJfQogCiAJKytjcy0+Y3NfaW5pdDsKIAotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBhdF9zdGF0ZSIpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgYXRfc3RhdGUiKTsKIAlzcGluX2xvY2tfaW5pdCgmY3MtPmxvY2spOwogCWdpZ2FzZXRfYXRfaW5pdCgmY3MtPmF0X3N0YXRlLCBOVUxMLCBjcywgMCk7CiAJY3MtPmRsZSA9IDA7CiAJY3MtPmNieXRlcyA9IDA7CiAKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgaW5idWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGluYnVmIik7CiAJaWYgKG9uZWNoYW5uZWwpIHsJCQkvL0ZJWE1FIGRpc3RpbmN0aW9uIG5lY2Vzc2FyeT8KIAkJZ2lnYXNldF9pbmJ1Zl9pbml0KGNzLT5pbmJ1ZiwgY3MtPmJjcywgY3MsIElOU19jb21tYW5kKTsKIAl9IGVsc2UKIAkJZ2lnYXNldF9pbmJ1Zl9pbml0KGNzLT5pbmJ1ZiwgTlVMTCwgICAgY3MsIElOU19jb21tYW5kKTsKIAotCWF0b21pY19zZXQoJmNzLT5jb25uZWN0ZWQsIDApOworCWNzLT5jb25uZWN0ZWQgPSAwOworCWNzLT5pc2RuX3VwID0gMDsKIAotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBjbWRidWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGNtZGJ1ZiIpOwogCWNzLT5jbWRidWYgPSBjcy0+bGFzdGNtZGJ1ZiA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmNzLT5jbWRsb2NrKTsKIAljcy0+Y3VybGVuID0gMDsKIAljcy0+Y21kYnl0ZXMgPSAwOwogCi0JLyoKLQkgKiBUZWxsIHRoZSBJU0RONExpbnV4IHN1YnN5c3RlbSAodGhlIExMKSB0aGF0Ci0JICogYSBkcml2ZXIgZm9yIGEgVVNCLURldmljZSBpcyBhdmFpbGFibGUgIQotCSAqIElmIHRoaXMgaXMgZG9uZSwgImlzZG5jdHJsIiBpcyBhYmxlIHRvIGJpbmQgYSBkZXZpY2UgZm9yIHRoaXMgZHJpdmVyIGV2ZW4KLQkgKiBpZiBubyBwaHlzaWNhbCB1c2ItZGV2aWNlIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQuCi0JICogQnV0IHRoaXMgZGV2aWNlIHdpbGwganVzdCBiZSBhY2Nlc3NhYmxlIGlmIGEgcGh5c2ljYWwgVVNCIGRldmljZSBpcyBjb25uZWN0ZWQKLQkgKiAodmlhICJnaWdhc2V0X3Byb2JlIikgLgotCSAqLwotCWRiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBpaWYiKTsKKwlnaWdfZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGlpZiIpOwogCWlmICghZ2lnYXNldF9yZWdpc3Rlcl90b19MTChjcywgbW9kdWxlbmFtZSkpIHsKLQkJZXJyKCJyZWdpc3Rlcl9pc2RuPT5lcnJvciIpOworCQllcnIoInJlZ2lzdGVyX2lzZG4gZmFpbGVkIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJbWFrZV92YWxpZChjcywgVkFMSURfSUQpOwogCSsrY3MtPmNzX2luaXQ7Ci0JZGJnKERFQlVHX0lOSVQsICJzZXR0aW5nIHVwIGh3Iik7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBodyIpOwogCWlmICghY3MtPm9wcy0+aW5pdGNzaHcoY3MpKQogCQlnb3RvIGVycm9yOwogCkBAIC02OTMsMjcgKzc2MCwyOCBAQAogCiAJZ2lnYXNldF9pZl9pbml0KGNzKTsKIAotCWF0b21pY19zZXQoJmNzLT5ydW5uaW5nLCAxKTsKLQljcy0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjczsKLQljcy0+dGltZXIuZnVuY3Rpb24gPSB0aW1lcl90aWNrOwotCWNzLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEdJR19USUNLOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWNzLT5ydW5uaW5nID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCXNldHVwX3RpbWVyKCZjcy0+dGltZXIsIHRpbWVyX3RpY2ssICh1bnNpZ25lZCBsb25nKSBjcyk7CisJY3MtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhHSUdfVElDSyk7CiAJLyogRklYTUU6IGNhbiBqaWZmaWVzIGluY3JlYXNlIHRvbyBtdWNoIHVudGlsIHRoZSB0aW1lciBpcyBhZGRlZD8KIAkgKiBTYW1lIHByb2JsZW0oPykgd2l0aCBtb2RfdGltZXIoKSBpbiB0aW1lcl90aWNrKCkuICovCiAJYWRkX3RpbWVyKCZjcy0+dGltZXIpOwogCi0JZGJnKERFQlVHX0lOSVQsICJjcyBpbml0aWFsaXplZCEiKTsKLQl1cCgmY3MtPnNlbSk7CisJZ2lnX2RiZyhERUJVR19JTklULCAiY3MgaW5pdGlhbGl6ZWQiKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAJcmV0dXJuIGNzOwogCiBlcnJvcjoJaWYgKGNzKQotCQl1cCgmY3MtPnNlbSk7Ci0JZGJnKERFQlVHX0lOSVQsICJmYWlsZWQiKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOworCWdpZ19kYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOwogCWdpZ2FzZXRfZnJlZWNzKGNzKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW5pdGNzKTsKIAotLyogUmVJbml0aWFsaXplIHRoZSBiLWNoYW5uZWwgc3RydWN0dXJlICovIC8qIGUuZy4gY2FsbGVkIG9uIGhhbmd1cCwgZGlzY29ubmVjdCAqLworLyogUmVJbml0aWFsaXplIHRoZSBiLWNoYW5uZWwgc3RydWN0dXJlIG9uIGhhbmd1cCAqLwogdm9pZCBnaWdhc2V0X2Jjc19yZWluaXQoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTcyMywxMiArNzkxLDEyIEBACiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYmNzLT5zcXVldWUpKSAhPSBOVUxMKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsgLy9GSVhNRQorCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWNsZWFyX2F0X3N0YXRlKCZiY3MtPmF0X3N0YXRlKTsKIAliY3MtPmF0X3N0YXRlLkNvblN0YXRlID0gMDsKIAliY3MtPmF0X3N0YXRlLnRpbWVyX2FjdGl2ZSA9IDA7CiAJYmNzLT5hdF9zdGF0ZS50aW1lcl9leHBpcmVzID0gMDsKLQliY3MtPmF0X3N0YXRlLmNpZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgIC8qIE5vIENJRCBkZWZpbmVkICovCisJYmNzLT5hdF9zdGF0ZS5jaWQgPSAtMTsJCQkvKiBObyBDSUQgZGVmaW5lZCAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAKIAliY3MtPmlucHV0c3RhdGUgPSAwOwpAQCAtODAzLDExICs4NzEsMTQgQEAKIAogaW50IGdpZ2FzZXRfc3RhcnQoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCi0JCXJldHVybiAwOwotCS8vaW5mbygiVVNCIGRldmljZSBmb3IgR2lnYXNldCAzMDd4IG5vdyBhdHRhY2hlZCB0byBEZXYgJWQiLCB1Y3MtPm1pbm9yKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYXRvbWljX3NldCgmY3MtPmNvbm5lY3RlZCwgMSk7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwljcy0+Y29ubmVjdGVkID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpIHsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIDAsIFRJT0NNX0RUUnxUSU9DTV9SVFMpOwpAQCAtODI2LDIzICs4OTcsMjYgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTVEFSVCIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBTVEFSVCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwogCi0JdXAoJmNzLT5zZW0pOworCS8qIHNldCB1cCBkZXZpY2Ugc3lzZnMgKi8KKwlnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKGNzKTsKKworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gMTsKIAogZXJyb3I6Ci0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfc3RhcnQpOwogCiB2b2lkIGdpZ2FzZXRfc2h1dGRvd24oc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7Ci0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWNzLT53YWl0aW5nID0gMTsKIApAQCAtODUxLDExICs5MjUsMTEgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNIVVRET1dOIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNIVVRET1dOIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZykpIHsKLQkJd2FybigiYWJvcnRlZCIpOworCQl3YXJuKCIlczogYWJvcnRlZCIsIF9fZnVuY19fKTsKIAkJLy9GSVhNRQogCX0KIApAQCAtODcyLDE1ICs5NDYsMTMgQEAKIAljbGVhbnVwX2NzKGNzKTsKIAogZXhpdDoKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9zaHV0ZG93bik7CiAKIHZvaWQgZ2lnYXNldF9zdG9wKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWRvd24oJmNzLT5zZW0pOwotCi0JYXRvbWljX3NldCgmY3MtPmNvbm5lY3RlZCwgMCk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWNzLT53YWl0aW5nID0gMTsKIApAQCAtODg5LDIxICs5NjEsMjEgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUT1AiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU1RPUCIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpKSB7Ci0JCXdhcm4oImFib3J0ZWQiKTsKKwkJd2FybigiJXM6IGFib3J0ZWQiLCBfX2Z1bmNfXyk7CiAJCS8vRklYTUUKIAl9CiAKLQkvKiBUZWxsIHRoZSBMTCB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSAuLiAqLwotCWdpZ2FzZXRfaTRsX2NtZChjcywgSVNETl9TVEFUX1NUT1ApOyAvLyBGSVhNRSBtb3ZlIHRvIGV2ZW50IGxheWVyPworCS8qIGNsZWFyIGRldmljZSBzeXNmcyAqLworCWdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoY3MpOwogCiAJY2xlYW51cF9jcyhjcyk7CiAKIGV4aXQ6Ci0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfc3RvcCk7CiAKQEAgLTk0NywzMSArMTAxOSwyNSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZkcml2ZXJzLCBsaXN0KSB7Ci0JCWRiZyhERUJVR19EUklWRVIsICJkcml2ZXIgJXAiLCBkcnYpOworCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgImRyaXZlciAlcCIsIGRydik7CiAJCXNwaW5fbG9jaygmZHJ2LT5sb2NrKTsKIAkJZm9yIChpID0gMDsgaSA8IGRydi0+bWlub3JzOyArK2kpIHsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgIGluZGV4ICV1IiwgaSk7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIGZsYWdzIDB4JTAyeCIsIGRydi0+ZmxhZ3NbaV0pOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgIGluZGV4ICV1IiwgaSk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBmbGFncyAweCUwMngiLAorCQkJCWRydi0+ZmxhZ3NbaV0pOwogCQkJY3MgPSBkcnYtPmNzICsgaTsKLQkJCWRiZyhERUJVR19EUklWRVIsICIgICAgY2FyZHN0YXRlICVwIiwgY3MpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBtaW5vcl9pbmRleCAldSIsIGNzLT5taW5vcl9pbmRleCk7Ci0JCQlkYmcoREVCVUdfRFJJVkVSLCAiICAgIGRyaXZlciAlcCIsIGNzLT5kcml2ZXIpOwotCQkJZGJnKERFQlVHX0RSSVZFUiwgIiAgICBpNGwgaWQgJWQiLCBjcy0+bXlpZCk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBjYXJkc3RhdGUgJXAiLCBjcyk7CisJCQlnaWdfZGJnKERFQlVHX0RSSVZFUiwgIiAgICBtaW5vcl9pbmRleCAldSIsCisJCQkJY3MtPm1pbm9yX2luZGV4KTsKKwkJCWdpZ19kYmcoREVCVUdfRFJJVkVSLCAiICAgIGRyaXZlciAlcCIsIGNzLT5kcml2ZXIpOworCQkJZ2lnX2RiZyhERUJVR19EUklWRVIsICIgICAgaTRsIGlkICVkIiwgY3MtPm15aWQpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZkcnYtPmxvY2spOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9kZWJ1Z2RyaXZlcnMpOwogCi1zdHJ1Y3QgY2FyZHN0YXRlICpnaWdhc2V0X2dldF9jc19ieV90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlpZiAodHR5LT5pbmRleCA8IDAgfHwgdHR5LT5pbmRleCA+PSB0dHktPmRyaXZlci0+bnVtKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZ2lnYXNldF9nZXRfY3NfYnlfbWlub3IodHR5LT5pbmRleCArIHR0eS0+ZHJpdmVyLT5taW5vcl9zdGFydCk7Ci19Ci0KLXN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHVuc2lnbmVkIG1pbm9yKQorc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHVuc2lnbmVkIG1pbm9yKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKnJldCA9IE5VTEw7CkBAIC05OTQsNiArMTA2MCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWlmICh0dHktPmluZGV4IDwgMCB8fCB0dHktPmluZGV4ID49IHR0eS0+ZHJpdmVyLT5udW0pCisJCXJldHVybiBOVUxMOworCXJldHVybiBnaWdhc2V0X2dldF9jc19ieV9taW5vcih0dHktPmluZGV4ICsgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0KTsKK30KKwogdm9pZCBnaWdhc2V0X2ZyZWVkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwMTQsMjAgKzEwODcsMjAgQEAKIC8qIGdpZ2FzZXRfaW5pdGRyaXZlcgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZ2lnYXNldF9kcml2ZXIgc3RydWN0dXJlLiBJbml0aWFsaXplIGludGVyZmFjZS4KICAqIHBhcmFtZXRlcnM6Ci0gKiAgICAgIG1pbm9yICAgICAgICAgICBGaXJzdCBtaW5vciBudW1iZXIKLSAqICAgICAgbWlub3JzICAgICAgICAgIE51bWJlciBvZiBtaW5vcnMgdGhpcyBkcml2ZXIgY2FuIGhhbmRsZQotICogICAgICBwcm9jbmFtZSAgICAgICAgTmFtZSBvZiB0aGUgZHJpdmVyIChlLmcuIGZvciAvcHJvYy90dHkvZHJpdmVycywgcGF0aCBpbiAvcHJvYy9kcml2ZXIpCi0gKiAgICAgIGRldm5hbWUgICAgICAgICBOYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgKHByZWZpeCB3aXRob3V0IG1pbm9yIG51bWJlcikKLSAqICAgICAgZGV2ZnNuYW1lICAgICAgIERldmZzIG5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyB3aXRob3V0ICVkCisgKgltaW5vcgkJRmlyc3QgbWlub3IgbnVtYmVyCisgKgltaW5vcnMJCU51bWJlciBvZiBtaW5vcnMgdGhpcyBkcml2ZXIgY2FuIGhhbmRsZQorICoJcHJvY25hbWUJTmFtZSBvZiB0aGUgZHJpdmVyCisgKglkZXZuYW1lCQlOYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgKHByZWZpeCB3aXRob3V0IG1pbm9yIG51bWJlcikKKyAqCWRldmZzbmFtZQlEZXZmcyBuYW1lIG9mIHRoZSBkZXZpY2UgZmlsZXMgd2l0aG91dCAlZAogICogcmV0dXJuIHZhbHVlOgotICogICAgICBQb2ludGVyIHRvIHRoZSBnaWdhc2V0X2RyaXZlciBzdHJ1Y3R1cmUgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICoJUG9pbnRlciB0byB0aGUgZ2lnYXNldF9kcml2ZXIgc3RydWN0dXJlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpnaWdhc2V0X2luaXRkcml2ZXIodW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIG1pbm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmZzbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpCisJCQkJCSAgY29uc3QgY2hhciAqcHJvY25hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICpkZXZmc25hbWUsCisJCQkJCSAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCisJCQkJCSAgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7CiAJc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwMzYsOCArMTEwOSw5IEBACiAJZHJ2ID0ga21hbGxvYyhzaXplb2YgKmRydiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnYpCiAJCXJldHVybiBOVUxMOworCiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dDE7CiAKIAlkcnYtPmNzID0gTlVMTDsKIAlkcnYtPmhhdmVfdHR5ID0gMDsKQEAgLTEwNTEsMTAgKzExMjUsMTEgQEAKIAogCWRydi0+Y3MgPSBrbWFsbG9jKG1pbm9ycyAqIHNpemVvZiAqZHJ2LT5jcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnYtPmNzKQotCQlnb3RvIG91dDE7CisJCWdvdG8gb3V0MjsKKwogCWRydi0+ZmxhZ3MgPSBrbWFsbG9jKG1pbm9ycyAqIHNpemVvZiAqZHJ2LT5mbGFncywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnYtPmZsYWdzKQotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0MzsKIAogCWZvciAoaSA9IDA7IGkgPCBtaW5vcnM7ICsraSkgewogCQlkcnYtPmZsYWdzW2ldID0gMDsKQEAgLTEwNzEsNjEgKzExNDYsMTYgQEAKIAogCXJldHVybiBkcnY7CiAKLW91dDI6CitvdXQzOgogCWtmcmVlKGRydi0+Y3MpOworb3V0MjoKKwltb2R1bGVfcHV0KG93bmVyKTsKIG91dDE6CiAJa2ZyZWUoZHJ2KTsKLQltb2R1bGVfcHV0KG93bmVyKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaW5pdGRyaXZlcik7CiAKLXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICphbGxvY19jcyhzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGk7Ci0Jc3RhdGljIHN0cnVjdCBjYXJkc3RhdGUgKnJldCA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGRydi0+bWlub3JzOyArK2kpIHsKLQkJaWYgKCEoZHJ2LT5mbGFnc1tpXSAmIFZBTElEX01JTk9SKSkgewotCQkJZHJ2LT5mbGFnc1tpXSA9IFZBTElEX01JTk9SOwotCQkJcmV0ID0gZHJ2LT5jcyArIGk7Ci0JCX0KLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2NzKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYgPSBjcy0+ZHJpdmVyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlkcnYtPmZsYWdzW2NzLT5taW5vcl9pbmRleF0gPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlX3ZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYgPSBjcy0+ZHJpdmVyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlkcnYtPmZsYWdzW2NzLT5taW5vcl9pbmRleF0gfD0gbWFzazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgbWFrZV9pbnZhbGlkKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYgPSBjcy0+ZHJpdmVyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGZsYWdzKTsKLQlkcnYtPmZsYWdzW2NzLT5taW5vcl9pbmRleF0gJj0gfm1hc2s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIEZvciBkcml2ZXJzIHdpdGhvdXQgZml4ZWQgYXNzaWdubWVudCBkZXZpY2U8LT5jYXJkc3RhdGUgKHVzYikgKi8KIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0dW5hc3NpZ25lZGNzKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKaW5kZXggZmRjYjgwYi4uMThlMDVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN0dWZmIHVzZWQgYnkgYWxsIHZhcmlhbnRzIG9mIHRoZSBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4sCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgU3RlZmFuIEVpbGVycywKICAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgPHRpbG1hbkBpbWFwLmNjPi4KICAqCkBAIC0xMSw4MiArMTEsNzggQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogZXYtbGF5ZXIuYyx2IDEuNC4yLjE4IDIwMDYvMDIvMDQgMTg6Mjg6MTYgaGpsaXBwIEV4cCAkCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaW5jbHVkZSAiZ2lnYXNldC5oIgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBiaXQgbWFza3MgZm9yIHBlbmRpbmcgY29tbWFuZHMgKi8KLSNkZWZpbmUgUENfSU5JVCAgICAgICAweDAwNAotI2RlZmluZSBQQ19ETEUwICAgICAgIDB4MDA4Ci0jZGVmaW5lIFBDX0RMRTEgICAgICAgMHgwMTAKLSNkZWZpbmUgUENfQ0lEICAgICAgICAweDA4MAotI2RlZmluZSBQQ19OT0NJRCAgICAgIDB4MTAwCi0jZGVmaW5lIFBDX0hVUCAgICAgICAgMHgwMDIKLSNkZWZpbmUgUENfRElBTCAgICAgICAweDAwMQotI2RlZmluZSBQQ19BQ0NFUFQgICAgIDB4MDQwCi0jZGVmaW5lIFBDX1NIVVRET1dOICAgMHgwMjAKLSNkZWZpbmUgUENfQ0lETU9ERSAgICAweDIwMAotI2RlZmluZSBQQ19VTU1PREUgICAgIDB4NDAwCisjZGVmaW5lIFBDX0RJQUwJCTB4MDAxCisjZGVmaW5lIFBDX0hVUAkJMHgwMDIKKyNkZWZpbmUgUENfSU5JVAkJMHgwMDQKKyNkZWZpbmUgUENfRExFMAkJMHgwMDgKKyNkZWZpbmUgUENfRExFMQkJMHgwMTAKKyNkZWZpbmUgUENfU0hVVERPV04JMHgwMjAKKyNkZWZpbmUgUENfQUNDRVBUCTB4MDQwCisjZGVmaW5lIFBDX0NJRAkJMHgwODAKKyNkZWZpbmUgUENfTk9DSUQJMHgxMDAKKyNkZWZpbmUgUENfQ0lETU9ERQkweDIwMAorI2RlZmluZSBQQ19VTU1PREUJMHg0MDAKIAogLyogdHlwZXMgb2YgbW9kZW0gcmVzcG9uc2VzICovCi0jZGVmaW5lIFJUX05PVEhJTkcgMAotI2RlZmluZSBSVF9aU0FVICAgIDEKLSNkZWZpbmUgUlRfUklORyAgICAyCi0jZGVmaW5lIFJUX05VTUJFUiAgMwotI2RlZmluZSBSVF9TVFJJTkcgIDQKLSNkZWZpbmUgUlRfSEVYICAgICA1Ci0jZGVmaW5lIFJUX1pDQVUgICAgNgorI2RlZmluZSBSVF9OT1RISU5HCTAKKyNkZWZpbmUgUlRfWlNBVQkJMQorI2RlZmluZSBSVF9SSU5HCQkyCisjZGVmaW5lIFJUX05VTUJFUgkzCisjZGVmaW5lIFJUX1NUUklORwk0CisjZGVmaW5lIFJUX0hFWAkJNQorI2RlZmluZSBSVF9aQ0FVCQk2CiAKIC8qIFBvc3NpYmxlIEFTQ0lJIHJlc3BvbnNlcyAqLwotI2RlZmluZSBSU1BfT0sgICAgICAgICAgIDAKLS8vI2RlZmluZSBSU1BfQlVTWSAgICAgICAxCi0vLyNkZWZpbmUgUlNQX0NPTk5FQ1QgICAgMgotI2RlZmluZSBSU1BfWkdDSSAgICAgICAgIDMKLSNkZWZpbmUgUlNQX1JJTkcgICAgICAgICA0Ci0jZGVmaW5lIFJTUF9aQU9DICAgICAgICAgNQotI2RlZmluZSBSU1BfWkNTVFIgICAgICAgIDYKLSNkZWZpbmUgUlNQX1pDRkdUICAgICAgICA3Ci0jZGVmaW5lIFJTUF9aQ0ZHICAgICAgICAgOAotI2RlZmluZSBSU1BfWkNDUiAgICAgICAgIDkKLSNkZWZpbmUgUlNQX0VNUFRZICAgICAgICAxMAotI2RlZmluZSBSU1BfWkxPRyAgICAgICAgIDExCi0jZGVmaW5lIFJTUF9aQ0FVICAgICAgICAgMTIKLSNkZWZpbmUgUlNQX1pNV0kgICAgICAgICAxMwotI2RlZmluZSBSU1BfWkFCSU5GTyAgICAgIDE0Ci0jZGVmaW5lIFJTUF9aU01MU1RDSEcgICAgMTUKLSNkZWZpbmUgUlNQX1ZBUiAgICAgICAgICAxMDAKLSNkZWZpbmUgUlNQX1pTQVUgICAgICAgICAoUlNQX1ZBUiArIFZBUl9aU0FVKQotI2RlZmluZSBSU1BfWkRMRSAgICAgICAgIChSU1BfVkFSICsgVkFSX1pETEUpCi0jZGVmaW5lIFJTUF9aVkxTICAgICAgICAgKFJTUF9WQVIgKyBWQVJfWlZMUykKLSNkZWZpbmUgUlNQX1pDVFAgICAgICAgICAoUlNQX1ZBUiArIFZBUl9aQ1RQKQotI2RlZmluZSBSU1BfU1RSICAgICAgICAgIChSU1BfVkFSICsgVkFSX05VTSkKLSNkZWZpbmUgUlNQX05NQlIgICAgICAgICAoUlNQX1NUUiArIFNUUl9OTUJSKQotI2RlZmluZSBSU1BfWkNQTiAgICAgICAgIChSU1BfU1RSICsgU1RSX1pDUE4pCi0jZGVmaW5lIFJTUF9aQ09OICAgICAgICAgKFJTUF9TVFIgKyBTVFJfWkNPTikKLSNkZWZpbmUgUlNQX1pCQyAgICAgICAgICAoUlNQX1NUUiArIFNUUl9aQkMpCi0jZGVmaW5lIFJTUF9aSExDICAgICAgICAgKFJTUF9TVFIgKyBTVFJfWkhMQykKLSNkZWZpbmUgUlNQX0VSUk9SICAgICAgIC0xICAgICAgIC8qIEVSUk9SICAgICAgICAgICAgICAqLwotI2RlZmluZSBSU1BfV1JPTkdfQ0lEICAgLTIgICAgICAgLyogdW5rbm93biBjaWQgaW4gY21kICovCi0vLyNkZWZpbmUgUlNQX0VNUFRZICAgICAtMwotI2RlZmluZSBSU1BfVU5LTk9XTiAgICAgLTQgICAgICAgLyogdW5rbm93biByZXNwb25zZSAgICovCi0jZGVmaW5lIFJTUF9GQUlMICAgICAgICAtNSAgICAgICAvKiBpbnRlcm5hbCBlcnJvciAgICAgKi8KLSNkZWZpbmUgUlNQX0lOVkFMICAgICAgIC02ICAgICAgIC8qIGludmFsaWQgcmVzcG9uc2UgICAqLworI2RlZmluZSBSU1BfT0sJCTAKKy8vI2RlZmluZSBSU1BfQlVTWQkxCisvLyNkZWZpbmUgUlNQX0NPTk5FQ1QJMgorI2RlZmluZSBSU1BfWkdDSQkzCisjZGVmaW5lIFJTUF9SSU5HCTQKKyNkZWZpbmUgUlNQX1pBT0MJNQorI2RlZmluZSBSU1BfWkNTVFIJNgorI2RlZmluZSBSU1BfWkNGR1QJNworI2RlZmluZSBSU1BfWkNGRwk4CisjZGVmaW5lIFJTUF9aQ0NSCTkKKyNkZWZpbmUgUlNQX0VNUFRZCTEwCisjZGVmaW5lIFJTUF9aTE9HCTExCisjZGVmaW5lIFJTUF9aQ0FVCTEyCisjZGVmaW5lIFJTUF9aTVdJCTEzCisjZGVmaW5lIFJTUF9aQUJJTkZPCTE0CisjZGVmaW5lIFJTUF9aU01MU1RDSEcJMTUKKyNkZWZpbmUgUlNQX1ZBUgkJMTAwCisjZGVmaW5lIFJTUF9aU0FVCShSU1BfVkFSICsgVkFSX1pTQVUpCisjZGVmaW5lIFJTUF9aRExFCShSU1BfVkFSICsgVkFSX1pETEUpCisjZGVmaW5lIFJTUF9aVkxTCShSU1BfVkFSICsgVkFSX1pWTFMpCisjZGVmaW5lIFJTUF9aQ1RQCShSU1BfVkFSICsgVkFSX1pDVFApCisjZGVmaW5lIFJTUF9TVFIJCShSU1BfVkFSICsgVkFSX05VTSkKKyNkZWZpbmUgUlNQX05NQlIJKFJTUF9TVFIgKyBTVFJfTk1CUikKKyNkZWZpbmUgUlNQX1pDUE4JKFJTUF9TVFIgKyBTVFJfWkNQTikKKyNkZWZpbmUgUlNQX1pDT04JKFJTUF9TVFIgKyBTVFJfWkNPTikKKyNkZWZpbmUgUlNQX1pCQwkJKFJTUF9TVFIgKyBTVFJfWkJDKQorI2RlZmluZSBSU1BfWkhMQwkoUlNQX1NUUiArIFNUUl9aSExDKQorI2RlZmluZSBSU1BfRVJST1IJLTEJLyogRVJST1IgICAgICAgICAgICAgICovCisjZGVmaW5lIFJTUF9XUk9OR19DSUQJLTIJLyogdW5rbm93biBjaWQgaW4gY21kICovCisvLyNkZWZpbmUgUlNQX0VNUFRZCS0zCisjZGVmaW5lIFJTUF9VTktOT1dOCS00CS8qIHVua25vd24gcmVzcG9uc2UgICAqLworI2RlZmluZSBSU1BfRkFJTAktNQkvKiBpbnRlcm5hbCBlcnJvciAgICAgKi8KKyNkZWZpbmUgUlNQX0lOVkFMCS02CS8qIGludmFsaWQgcmVzcG9uc2UgICAqLwogCi0jZGVmaW5lIFJTUF9OT05FICAgICAgICAtMTkKLSNkZWZpbmUgUlNQX1NUUklORyAgICAgIC0yMAotI2RlZmluZSBSU1BfTlVMTCAgICAgICAgLTIxCi0vLyNkZWZpbmUgUlNQX1JFVFJZRkFJTCAtMjIKLS8vI2RlZmluZSBSU1BfUkVUUlkgICAgIC0yMwotLy8jZGVmaW5lIFJTUF9TS0lQICAgICAgLTI0Ci0jZGVmaW5lIFJTUF9JTklUICAgICAgICAtMjcKLSNkZWZpbmUgUlNQX0FOWSAgICAgICAgIC0yNgotI2RlZmluZSBSU1BfTEFTVCAgICAgICAgLTI4Ci0jZGVmaW5lIFJTUF9OT0RFViAgICAgICAtOQorI2RlZmluZSBSU1BfTk9ORQktMTkKKyNkZWZpbmUgUlNQX1NUUklORwktMjAKKyNkZWZpbmUgUlNQX05VTEwJLTIxCisvLyNkZWZpbmUgUlNQX1JFVFJZRkFJTAktMjIKKy8vI2RlZmluZSBSU1BfUkVUUlkJLTIzCisvLyNkZWZpbmUgUlNQX1NLSVAJLTI0CisjZGVmaW5lIFJTUF9JTklUCS0yNworI2RlZmluZSBSU1BfQU5ZCQktMjYKKyNkZWZpbmUgUlNQX0xBU1QJLTI4CisjZGVmaW5lIFJTUF9OT0RFVgktOQogCiAvKiBhY3Rpb25zIGZvciBwcm9jZXNzX3Jlc3BvbnNlICovCiAjZGVmaW5lIEFDVF9OT1RISU5HCQkwCkBAIC0xMTIsNyArMTA4LDcgQEAKICNkZWZpbmUgQUNUX0RJU0NPTk5FQ1QJCTIwCiAjZGVmaW5lIEFDVF9DT05ORUNUCQkyMQogI2RlZmluZSBBQ1RfUkVNT1RFUkVKRUNUCTIyCi0jZGVmaW5lIEFDVF9DT05OVElNRU9VVCAgICAgICAgIDIzCisjZGVmaW5lIEFDVF9DT05OVElNRU9VVAkJMjMKICNkZWZpbmUgQUNUX1JFTU9URUhVUAkJMjQKICNkZWZpbmUgQUNUX0FCT1JUSFVQCQkyNQogI2RlZmluZSBBQ1RfSUNBTEwJCTI2CkBAIC0xMjcsNDAgKzEyMyw0MCBAQAogI2RlZmluZSBBQ1RfRVJST1IJCTM1CiAjZGVmaW5lIEFDVF9BQk9SVENJRAkJMzYKICNkZWZpbmUgQUNUX1pDQVUJCTM3Ci0jZGVmaW5lIEFDVF9OT1RJRllfQkNfRE9XTiAgICAgIDM4Ci0jZGVmaW5lIEFDVF9OT1RJRllfQkNfVVAgICAgICAgIDM5Ci0jZGVmaW5lIEFDVF9ESUFMICAgICAgICAgICAgICAgIDQwCi0jZGVmaW5lIEFDVF9BQ0NFUFQgICAgICAgICAgICAgIDQxCi0jZGVmaW5lIEFDVF9QUk9UT19MMiAgICAgICAgICAgIDQyCi0jZGVmaW5lIEFDVF9IVVAgICAgICAgICAgICAgICAgIDQzCi0jZGVmaW5lIEFDVF9JRl9MT0NLICAgICAgICAgICAgIDQ0Ci0jZGVmaW5lIEFDVF9TVEFSVCAgICAgICAgICAgICAgIDQ1Ci0jZGVmaW5lIEFDVF9TVE9QICAgICAgICAgICAgICAgIDQ2Ci0jZGVmaW5lIEFDVF9GQUtFRExFMCAgICAgICAgICAgIDQ3Ci0jZGVmaW5lIEFDVF9GQUtFSFVQICAgICAgICAgICAgIDQ4Ci0jZGVmaW5lIEFDVF9GQUtFU0RPV04gICAgICAgICAgIDQ5Ci0jZGVmaW5lIEFDVF9TSFVURE9XTiAgICAgICAgICAgIDUwCi0jZGVmaW5lIEFDVF9QUk9DX0NJRE1PREUgICAgICAgIDUxCi0jZGVmaW5lIEFDVF9VTU9ERVNFVCAgICAgICAgICAgIDUyCi0jZGVmaW5lIEFDVF9GQUlMVU1PREUgICAgICAgICAgIDUzCi0jZGVmaW5lIEFDVF9DTU9ERVNFVCAgICAgICAgICAgIDU0Ci0jZGVmaW5lIEFDVF9GQUlMQ01PREUgICAgICAgICAgIDU1Ci0jZGVmaW5lIEFDVF9JRl9WRVIgICAgICAgICAgICAgIDU2CisjZGVmaW5lIEFDVF9OT1RJRllfQkNfRE9XTgkzOAorI2RlZmluZSBBQ1RfTk9USUZZX0JDX1VQCTM5CisjZGVmaW5lIEFDVF9ESUFMCQk0MAorI2RlZmluZSBBQ1RfQUNDRVBUCQk0MQorI2RlZmluZSBBQ1RfUFJPVE9fTDIJCTQyCisjZGVmaW5lIEFDVF9IVVAJCQk0MworI2RlZmluZSBBQ1RfSUZfTE9DSwkJNDQKKyNkZWZpbmUgQUNUX1NUQVJUCQk0NQorI2RlZmluZSBBQ1RfU1RPUAkJNDYKKyNkZWZpbmUgQUNUX0ZBS0VETEUwCQk0NworI2RlZmluZSBBQ1RfRkFLRUhVUAkJNDgKKyNkZWZpbmUgQUNUX0ZBS0VTRE9XTgkJNDkKKyNkZWZpbmUgQUNUX1NIVVRET1dOCQk1MAorI2RlZmluZSBBQ1RfUFJPQ19DSURNT0RFCTUxCisjZGVmaW5lIEFDVF9VTU9ERVNFVAkJNTIKKyNkZWZpbmUgQUNUX0ZBSUxVTU9ERQkJNTMKKyNkZWZpbmUgQUNUX0NNT0RFU0VUCQk1NAorI2RlZmluZSBBQ1RfRkFJTENNT0RFCQk1NQorI2RlZmluZSBBQ1RfSUZfVkVSCQk1NgogI2RlZmluZSBBQ1RfQ01ECQkJMTAwCiAKIC8qIGF0IGNvbW1hbmQgc2VxdWVuY2VzICovCi0jZGVmaW5lIFNFUV9OT05FICAgICAgMAotI2RlZmluZSBTRVFfSU5JVCAgICAgIDEwMAotI2RlZmluZSBTRVFfRExFMCAgICAgIDIwMAotI2RlZmluZSBTRVFfRExFMSAgICAgIDI1MAotI2RlZmluZSBTRVFfQ0lEICAgICAgIDMwMAotI2RlZmluZSBTRVFfTk9DSUQgICAgIDM1MAotI2RlZmluZSBTRVFfSFVQICAgICAgIDQwMAotI2RlZmluZSBTRVFfRElBTCAgICAgIDYwMAotI2RlZmluZSBTRVFfQUNDRVBUICAgIDcyMAotI2RlZmluZSBTRVFfU0hVVERPV04gIDUwMAotI2RlZmluZSBTRVFfQ0lETU9ERSAgIDEwCi0jZGVmaW5lIFNFUV9VTU1PREUgICAgMTEKKyNkZWZpbmUgU0VRX05PTkUJMAorI2RlZmluZSBTRVFfSU5JVAkxMDAKKyNkZWZpbmUgU0VRX0RMRTAJMjAwCisjZGVmaW5lIFNFUV9ETEUxCTI1MAorI2RlZmluZSBTRVFfQ0lECQkzMDAKKyNkZWZpbmUgU0VRX05PQ0lECTM1MAorI2RlZmluZSBTRVFfSFVQCQk0MDAKKyNkZWZpbmUgU0VRX0RJQUwJNjAwCisjZGVmaW5lIFNFUV9BQ0NFUFQJNzIwCisjZGVmaW5lIFNFUV9TSFVURE9XTgk1MDAKKyNkZWZpbmUgU0VRX0NJRE1PREUJMTAKKyNkZWZpbmUgU0VRX1VNTU9ERQkxMQogCiAKIC8vIDEwMDogaW5pdCwgMjAwOiBkbGUwLCAyNTA6ZGxlMSwgMzAwOiBnZXQgY2lkIChkaWFsKSwgMzUwOiAiaHVwIiAobm8gY2lkKSwgNDAwOiBodXAsIDUwMDogcmVzZXQsIDYwMDogZGlhbCwgNzAwOiByaW5nCkBAIC0xNzUsNyArMTcxLDcgQEAKIAkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FDVF9USU1FT1VUfX0sCiAKIAl7UlNQX0lOSVQsICAgICAtMSwgLTEsU0VRX0lOSVQsICAgICAgICAgICAxMDAsIElOSVRfVElNRU9VVCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBQ1RfVElNRU9VVH19LCAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIGRldmljZSBpcyByZWFkeSAqLworCQkJCQkJCSAge0FDVF9USU1FT1VUfX0sICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCiAKIAl7RVZfVElNRU9VVCwgIDEwMCwxMDAsIC0xLCAgICAgICAgICAgICAgICAxMDEsIDMsIHswfSwgICAgICAgICAgICAgIlpcciJ9LCAgICAgICAvKiBkZXZpY2UgaW4gdHJhbnNwYXJlbnQgbW9kZT8gdHJ5IHRvIGluaXRpYWxpemUgaXQuICovCiAJe1JTUF9PSywgICAgICAxMDEsMTAzLCAtMSwgICAgICAgICAgICAgICAgMTIwLCA1LCB7QUNUX0dFVFNUUklOR30sICIrR01SXHIifSwgICAgLyogZ2V0IHZlcnNpb24gKi8KQEAgLTE5MCw4ICsxODYsOCBAQAogCXtSU1BfRVJST1IsICAgMTA4LDEwOCwgLTEsICAgICAgICAgICAgICAgICAgMCwgMCwge0FDVF9GQUlMSU5JVH19LAogCiAJe0VWX1RJTUVPVVQsICAxMDgsMTA4LCAtMSwgICAgICAgICAgICAgICAgMTA1LCAyLCB7QUNUX1NFVERMRTAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNUX0hVUE1PREVNLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVF9USU1FT1VUfX0sICAgICAgICAgICAgICAgIC8qIHN0aWxsIHRpbWVvdXQgPT4gY29ubmVjdGlvbiBpbiB1bmltb2RlbSBtb2RlPyAqLworCQkJCQkJCSAgIEFDVF9IVVBNT0RFTSwKKwkJCQkJCQkgICBBQ1RfVElNRU9VVH19LCAgICAgICAgICAgICAgICAvKiBzdGlsbCB0aW1lb3V0ID0+IGNvbm5lY3Rpb24gaW4gdW5pbW9kZW0gbW9kZT8gKi8KIAl7RVZfVElNRU9VVCwgIDEwNSwxMDUsIC0xLCAgICAgICAgICAgICAgICAxMDMsIDUsIHswfSwgICAgICAgICAgICAgIlpcciJ9LAogCiAJe1JTUF9FUlJPUiwgICAxMDIsMTAyLCAtMSwgICAgICAgICAgICAgICAgMTA3LCA1LCB7MH0sICAgICAgICAgICAgICJeR0VUUFJFXHIifSwgLyogRVJST1Igb24gQVRaID0+IG1heWJlIGluIGNvbmZpZyBtb2RlPyAqLwpAQCAtMzc3LDYgKzM3Myw5IEBACiAKIAl7RVZfVElNRU9VVCwgIDc1MCw3NTAsIC0xLCAgICAgICAgICAgICAgICAgIDAsIDAsIHtBQ1RfQ09OTlRJTUVPVVR9fSwKIAorCS8qIEIgY2hhbm5lbCBjbG9zZWQgKGdlbmVyYWwgY2FzZSkgKi8KKwl7RVZfQkNfQ0xPU0VELCAtMSwgLTEsIC0xLCAgICAgICAgICAgICAgICAgLTEsLTEsIHtBQ1RfTk9USUZZX0JDX0RPV059fSwgLy9GSVhNRQorCiAJLyogbWlzYy4gKi8KIAl7RVZfUFJPVE9fTDIsICAtMSwgLTEsIC0xLCAgICAgICAgICAgICAgICAgLTEsLTEsIHtBQ1RfUFJPVE9fTDJ9fSwgLy9GSVhNRQogCkBAIC0zOTMsNyArMzkyLDcgQEAKIAogCiAjaWYgMAotc3RhdGljIHN0cnVjdCByZXBseV90IHRhYl9ub2NpZFtdPSAvKiBubyBkbGUgbW9kZSAqLyAvL0ZJWE1FIGFlbmRlcnVuZ2VuIHVlYmVybmVobWVuCitzdGF0aWMgc3RydWN0IHJlcGx5X3QgdGFiX25vY2lkW109IC8qIG5vIGRsZSBtb2RlICovIC8vRklYTUUKIHsKIAkvKiByZXNwX2NvZGUsIG1pbl9Db25TdGF0ZSwgbWF4X0NvblN0YXRlLCBwYXJhbWV0ZXIsIG5ld19Db25TdGF0ZSwgdGltZW91dCwgYWN0aW9uLCBjb21tYW5kICovCiAKQEAgLTQwMSw3ICs0MDAsNyBAQAogCXtSU1BfTEFTVCwwLDAsMCwwLDAsMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVwbHlfdCB0YWJfY2lkW10gPSAvKiBubyBkbGUgbW9kZSAqLyAvL0ZJWE1FIGFlbmRlcnVuZ2VuIHVlYmVybmVobWVuCitzdGF0aWMgc3RydWN0IHJlcGx5X3QgdGFiX2NpZFtdID0gLyogbm8gZGxlIG1vZGUgKi8gLy9GSVhNRQogewogCS8qIHJlc3BfY29kZSwgbWluX0NvblN0YXRlLCBtYXhfQ29uU3RhdGUsIHBhcmFtZXRlciwgbmV3X0NvblN0YXRlLCB0aW1lb3V0LCBhY3Rpb24sIGNvbW1hbmQgKi8KIApAQCAtNDEyLDMwICs0MTEsMzAgQEAKIAogc3RhdGljIHN0cnVjdCByZXNwX3R5cGVfdCByZXNwX3R5cGVbXT0KIHsKLQkvKnsiIiwgICAgICAgICAgUlNQX0VNUFRZLCAgUlRfTk9USElOR30sKi8KLQl7Ik9LIiwgICAgICAgIFJTUF9PSywgICAgIFJUX05PVEhJTkd9LAotCXsiRVJST1IiLCAgICAgUlNQX0VSUk9SLCAgUlRfTk9USElOR30sCi0JeyJaU0FVIiwgICAgICBSU1BfWlNBVSwgICBSVF9aU0FVfSwKLQl7IlpDQVUiLCAgICAgIFJTUF9aQ0FVLCAgIFJUX1pDQVV9LAotCXsiUklORyIsICAgICAgUlNQX1JJTkcsICAgUlRfUklOR30sCi0JeyJaR0NJIiwgICAgICBSU1BfWkdDSSwgICBSVF9OVU1CRVJ9LAotCXsiWlZMUyIsICAgICAgUlNQX1pWTFMsICAgUlRfTlVNQkVSfSwKLQl7IlpDVFAiLCAgICAgIFJTUF9aQ1RQLCAgIFJUX05VTUJFUn0sCi0JeyJaRExFIiwgICAgICBSU1BfWkRMRSwgICBSVF9OVU1CRVJ9LAotCXsiWkNGR1QiLCAgICAgUlNQX1pDRkdULCAgUlRfTlVNQkVSfSwKLQl7IlpDQ1IiLCAgICAgIFJTUF9aQ0NSLCAgIFJUX05VTUJFUn0sCi0JeyJaTVdJIiwgICAgICBSU1BfWk1XSSwgICBSVF9OVU1CRVJ9LAotCXsiWkhMQyIsICAgICAgUlNQX1pITEMsICAgUlRfU1RSSU5HfSwKLQl7IlpCQyIsICAgICAgIFJTUF9aQkMsICAgIFJUX1NUUklOR30sCi0JeyJOTUJSIiwgICAgICBSU1BfTk1CUiwgICBSVF9TVFJJTkd9LAotCXsiWkNQTiIsICAgICAgUlNQX1pDUE4sICAgUlRfU1RSSU5HfSwKLQl7IlpDT04iLCAgICAgIFJTUF9aQ09OLCAgIFJUX1NUUklOR30sCi0JeyJaQU9DIiwgICAgICBSU1BfWkFPQywgICBSVF9TVFJJTkd9LAotCXsiWkNTVFIiLCAgICAgUlNQX1pDU1RSLCAgUlRfU1RSSU5HfSwKLQl7IlpDRkciLCAgICAgIFJTUF9aQ0ZHLCAgIFJUX0hFWH0sCi0JeyJaTE9HIiwgICAgICBSU1BfWkxPRywgICBSVF9OT1RISU5HfSwKLQl7IlpBQklORk8iLCAgIFJTUF9aQUJJTkZPLCBSVF9OT1RISU5HfSwKLQl7IlpTTUxTVENIRyIsIFJTUF9aU01MU1RDSEcsIFJUX05PVEhJTkd9LAorCS8qeyIiLAkJUlNQX0VNUFRZLAlSVF9OT1RISU5HfSwqLworCXsiT0siLAkJUlNQX09LLAkJUlRfTk9USElOR30sCisJeyJFUlJPUiIsCVJTUF9FUlJPUiwJUlRfTk9USElOR30sCisJeyJaU0FVIiwJUlNQX1pTQVUsCVJUX1pTQVV9LAorCXsiWkNBVSIsCVJTUF9aQ0FVLAlSVF9aQ0FVfSwKKwl7IlJJTkciLAlSU1BfUklORywJUlRfUklOR30sCisJeyJaR0NJIiwJUlNQX1pHQ0ksCVJUX05VTUJFUn0sCisJeyJaVkxTIiwJUlNQX1pWTFMsCVJUX05VTUJFUn0sCisJeyJaQ1RQIiwJUlNQX1pDVFAsCVJUX05VTUJFUn0sCisJeyJaRExFIiwJUlNQX1pETEUsCVJUX05VTUJFUn0sCisJeyJaQ0ZHVCIsCVJTUF9aQ0ZHVCwJUlRfTlVNQkVSfSwKKwl7IlpDQ1IiLAlSU1BfWkNDUiwJUlRfTlVNQkVSfSwKKwl7IlpNV0kiLAlSU1BfWk1XSSwJUlRfTlVNQkVSfSwKKwl7IlpITEMiLAlSU1BfWkhMQywJUlRfU1RSSU5HfSwKKwl7IlpCQyIsCQlSU1BfWkJDLAlSVF9TVFJJTkd9LAorCXsiTk1CUiIsCVJTUF9OTUJSLAlSVF9TVFJJTkd9LAorCXsiWkNQTiIsCVJTUF9aQ1BOLAlSVF9TVFJJTkd9LAorCXsiWkNPTiIsCVJTUF9aQ09OLAlSVF9TVFJJTkd9LAorCXsiWkFPQyIsCVJTUF9aQU9DLAlSVF9TVFJJTkd9LAorCXsiWkNTVFIiLAlSU1BfWkNTVFIsCVJUX1NUUklOR30sCisJeyJaQ0ZHIiwJUlNQX1pDRkcsCVJUX0hFWH0sCisJeyJaTE9HIiwJUlNQX1pMT0csCVJUX05PVEhJTkd9LAorCXsiWkFCSU5GTyIsCVJTUF9aQUJJTkZPLAlSVF9OT1RISU5HfSwKKwl7IlpTTUxTVENIRyIsCVJTUF9aU01MU1RDSEcsCVJUX05PVEhJTkd9LAogCXtOVUxMLDAsMH0KIH07CiAKQEAgLTQ0Niw5ICs0NDUsNyBAQAogewogCWludCB2ID0gLTE7CiAKLQlJRk5VTExSRVRWQUwocCwgLTEpOwotCi0JZGJnKERFQlVHX1RSQU5TQ01ELCAic3RyaW5nOiAlcyIsIHApOworCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CiAKIAl3aGlsZSAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykKIAkJdiA9ICgodiA8IDApID8gMCA6ICh2ICogMTApKSArIChpbnQpICgoKnArKykgLSAnMCcpOwpAQCAtNDY1LDkgKzQ2Miw3IEBACiAJaW50IHYgPSAwOwogCWludCBjOwogCi0JSUZOVUxMUkVUVkFMKHAsIC0xKTsKLQotCWRiZyhERUJVR19UUkFOU0NNRCwgInN0cmluZzogJXMiLCBwKTsKKwlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAic3RyaW5nOiAlcyIsIHApOwogCiAJaWYgKCEqcCkKIAkJcmV0dXJuIC0xOwpAQCAtNDkwLDE0ICs0ODUsNiBAQAogCXJldHVybiB2OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV3X2luZGV4KGF0b21pY190ICppbmRleCwgaW50IG1heCkKLXsKLQlpZiAoYXRvbWljX3JlYWQoaW5kZXgpID09IG1heCkJLy9GSVhNRSByYWNlPwotCQlhdG9taWNfc2V0KGluZGV4LCAwKTsKLQllbHNlCi0JCWF0b21pY19pbmMoaW5kZXgpOwotfQotCiAvKiByZXRyaWV2ZSBDSUQgZnJvbSBwYXJzZWQgcmVzcG9uc2UKICAqIHJldHVybnMgMCBpZiBubyBDSUQsIC0xIGlmIGludmFsaWQgQ0lELCBvciBDSUQgdmFsdWUgMS4uNjU1MzUKICAqLwpAQCAtNTM2LDE2ICs1MjMsMTQgQEAKIAlpbnQgY2lkOwogCWludCByYXdzdHJpbmc7CiAKLQlJRk5VTExSRVQoY3MpOwotCiAJbGVuID0gY3MtPmNieXRlczsKIAlpZiAoIWxlbikgewogCQkvKiBpZ25vcmUgYWRkaXRpb25hbCBMRnMvQ1JzIChNMTB4IGNvbmZpZyBtb2RlIG9yIGN4MTAwKSAqLwotCQlkYmcoREVCVUdfTUNNRCwgInNraXBwZWQgRU9MIFslMDJYXSIsIGNzLT5yZXNwZGF0YVtsZW5dKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAic2tpcHBlZCBFT0wgWyUwMlhdIiwgY3MtPnJlc3BkYXRhW2xlbl0pOwogCQlyZXR1cm47CiAJfQogCWNzLT5yZXNwZGF0YVtsZW5dID0gMDsKLQlkYmcoREVCVUdfVFJBTlNDTUQsICJyYXcgc3RyaW5nOiAnJXMnIiwgY3MtPnJlc3BkYXRhKTsKKwlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAicmF3IHN0cmluZzogJyVzJyIsIGNzLT5yZXNwZGF0YSk7CiAJYXJndlswXSA9IGNzLT5yZXNwZGF0YTsKIAlwYXJhbXMgPSAxOwogCWlmIChjcy0+YXRfc3RhdGUuZ2V0c3RyaW5nKSB7CkBAIC01NjEsNyArNTQ2LDggQEAKIAkJCWNhc2UgJywnOgogCQkJY2FzZSAnPSc6CiAJCQkJaWYgKHBhcmFtcyA+IE1BWF9SRUNfUEFSQU1TKSB7Ci0JCQkJCXdhcm4oInRvbyBtYW55IHBhcmFtZXRlcnMgaW4gcmVzcG9uc2UiKTsKKwkJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICAgInRvbyBtYW55IHBhcmFtZXRlcnMgaW4gcmVzcG9uc2VcbiIpOwogCQkJCQkvKiBuZWVkIGxhc3QgcGFyYW1ldGVyIChtaWdodCBiZSBDSUQpICovCiAJCQkJCXBhcmFtcy0tOwogCQkJCX0KQEAgLTU3MiwzMyArNTU4LDMzIEBACiAJCWNpZCA9IHBhcmFtcyA+IDEgPyBjaWRfb2ZfcmVzcG9uc2UoYXJndltwYXJhbXMtMV0pIDogMDsKIAkJaWYgKGNpZCA8IDApIHsKIAkJCWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBSU1BfSU5WQUwsCi0JCQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMKTsKKwkJCQkJICBOVUxMLCAwLCBOVUxMKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCWZvciAoaiA9IDE7IGogPCBwYXJhbXM7ICsraikKIAkJCWFyZ3Zbal1bLTFdID0gMDsKIAotCQlkYmcoREVCVUdfVFJBTlNDTUQsICJDTUQgcmVjZWl2ZWQ6ICVzIiwgYXJndlswXSk7CisJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJDTUQgcmVjZWl2ZWQ6ICVzIiwgYXJndlswXSk7CiAJCWlmIChjaWQpIHsKIAkJCS0tcGFyYW1zOwotCQkJZGJnKERFQlVHX1RSQU5TQ01ELCAiQ0lEOiAlcyIsIGFyZ3ZbcGFyYW1zXSk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiQ0lEOiAlcyIsIGFyZ3ZbcGFyYW1zXSk7CiAJCX0KLQkJZGJnKERFQlVHX1RSQU5TQ01ELCAiYXZhaWxhYmxlIHBhcmFtczogJWQiLCBwYXJhbXMgLSAxKTsKKwkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgImF2YWlsYWJsZSBwYXJhbXM6ICVkIiwgcGFyYW1zIC0gMSk7CiAJCWZvciAoaiA9IDE7IGogPCBwYXJhbXM7IGorKykKLQkJCWRiZyhERUJVR19UUkFOU0NNRCwgInBhcmFtICVkOiAlcyIsIGosIGFyZ3Zbal0pOworCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInBhcmFtICVkOiAlcyIsIGosIGFyZ3Zbal0pOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwotCWhlYWQgPSBhdG9taWNfcmVhZCgmY3MtPmV2X2hlYWQpOwotCXRhaWwgPSBhdG9taWNfcmVhZCgmY3MtPmV2X3RhaWwpOworCWhlYWQgPSBjcy0+ZXZfaGVhZDsKKwl0YWlsID0gY3MtPmV2X3RhaWw7CiAKIAlhYm9ydCA9IDE7CiAJY3VyYXJnID0gMDsKIAl3aGlsZSAoY3VyYXJnIDwgcGFyYW1zKSB7CiAJCW5leHQgPSAodGFpbCArIDEpICUgTUFYX0VWRU5UUzsKIAkJaWYgKHVubGlrZWx5KG5leHQgPT0gaGVhZCkpIHsKLQkJCWVycigiZXZlbnQgcXVldWUgZnVsbCIpOworCQkJZGV2X2Vycihjcy0+ZGV2LCAiZXZlbnQgcXVldWUgZnVsbFxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC02MTksOCArNjA1LDkgQEAKIAogCQkJaWYgKCFydC0+cmVzcG9uc2UpIHsKIAkJCQlldmVudC0+dHlwZSA9IFJTUF9VTktOT1dOOwotCQkJCXdhcm4oInVua25vd24gbW9kZW0gcmVzcG9uc2U6ICVzIiwKLQkJCQkgICAgIGFyZ3ZbY3VyYXJnXSk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJICJ1bmtub3duIG1vZGVtIHJlc3BvbnNlOiAlc1xuIiwKKwkJCQkJIGFyZ3ZbY3VyYXJnXSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTYzNiw3ICs2MjMsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUlRfUklORzoKIAkJCWlmICghY2lkKSB7Ci0JCQkJZXJyKCJyZWNlaXZlZCBSSU5HIHdpdGhvdXQgQ0lEISIpOworCQkJCWRldl9lcnIoY3MtPmRldiwKKwkJCQkJInJlY2VpdmVkIFJJTkcgd2l0aG91dCBDSUQhXG4iKTsKIAkJCQlldmVudC0+dHlwZSA9IFJTUF9JTlZBTDsKIAkJCQlhYm9ydCA9IDE7CiAJCQl9IGVsc2UgewpAQCAtNjY0LDI3ICs2NTIsMjUgQEAKIAkJCQlldmVudC0+cGFyYW1ldGVyID0gWlNBVV9ESVNDT05ORUNUX1JFUTsKIAkJCWVsc2UgewogCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSBaU0FVX1VOS05PV047Ci0JCQkJd2FybigiJXM6IHVua25vd24gcGFyYW1ldGVyICVzIGFmdGVyIFpTQVUiLAotCQkJCSAgICAgX19mdW5jX18sIGFyZ3ZbY3VyYXJnXSk7CisJCQkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCQkJIiVzOiB1bmtub3duIHBhcmFtZXRlciAlcyBhZnRlciBaU0FVXG4iLAorCQkJCQkgX19mdW5jX18sIGFyZ3ZbY3VyYXJnXSk7CiAJCQl9CiAJCQkrK2N1cmFyZzsKIAkJCWJyZWFrOwogCQljYXNlIFJUX1NUUklORzoKIAkJCWlmIChjdXJhcmcgPCBwYXJhbXMpIHsKLQkJCQlsZW4gPSBzdHJsZW4oYXJndltjdXJhcmddKSArIDE7Ci0JCQkJZXZlbnQtPnB0ciA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQkJCQlpZiAoZXZlbnQtPnB0cikKLQkJCQkJbWVtY3B5KGV2ZW50LT5wdHIsIGFyZ3ZbY3VyYXJnXSwgbGVuKTsKLQkJCQllbHNlCi0JCQkJCWVycigibm8gbWVtb3J5IGZvciBzdHJpbmchIik7CisJCQkJZXZlbnQtPnB0ciA9IGtzdHJkdXAoYXJndltjdXJhcmddLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIWV2ZW50LT5wdHIpCisJCQkJCWRldl9lcnIoY3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJCSsrY3VyYXJnOwogCQkJfQogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJCQlpZiAoIWV2ZW50LT5wdHIpCi0JCQkJZGJnKERFQlVHX0NNRCwgInN0cmluZz09TlVMTCIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAic3RyaW5nPT1OVUxMIik7CiAJCQllbHNlCi0JCQkJZGJnKERFQlVHX0NNRCwKLQkJCQkgICAgInN0cmluZz09JXMiLCAoY2hhciAqKSBldmVudC0+cHRyKTsKKwkJCQlnaWdfZGJnKERFQlVHX0NNRCwgInN0cmluZz09JXMiLAorCQkJCQkoY2hhciAqKSBldmVudC0+cHRyKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUlRfWkNBVToKQEAgLTY5NCw3ICs2ODAsNyBAQAogCQkJCWogPSBpc2RuX2dldGhleChhcmd2W2N1cmFyZyArIDFdKTsKIAkJCQlpZiAoaSA+PSAwICYmIGkgPCAyNTYgJiYgaiA+PSAwICYmIGogPCAyNTYpCiAJCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAodW5zaWduZWQpIGkgPDwgOAotCQkJCQkgICAgICAgICAgICAgICAgICAgfCBqOworCQkJCQkJCSAgIHwgajsKIAkJCQljdXJhcmcgKz0gMjsKIAkJCX0gZWxzZQogCQkJCWN1cmFyZyA9IHBhcmFtcyAtIDE7CkBAIC03MTIsNyArNjk4LDcgQEAKIAkJCX0gZWxzZQogCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAtMTsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotCQkJZGJnKERFQlVHX0NNRCwgInBhcmFtZXRlcj09JWQiLCBldmVudC0+cGFyYW1ldGVyKTsKKwkJCWdpZ19kYmcoREVCVUdfQ01ELCAicGFyYW1ldGVyPT0lZCIsIGV2ZW50LT5wYXJhbWV0ZXIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJfQpAQCAtNzI0LDEyICs3MTAsMTMgQEAKIAkJCWJyZWFrOwogCX0KIAotCWF0b21pY19zZXQoJmNzLT5ldl90YWlsLCB0YWlsKTsKKwljcy0+ZXZfdGFpbCA9IHRhaWw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKIAogCWlmIChjdXJhcmcgIT0gcGFyYW1zKQotCQlkYmcoREVCVUdfQU5ZLCAiaW52YWxpZCBudW1iZXIgb2YgcHJvY2Vzc2VkIHBhcmFtZXRlcnM6ICVkLyVkIiwKLQkJICAgIGN1cmFyZywgcGFyYW1zKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkiaW52YWxpZCBudW1iZXIgb2YgcHJvY2Vzc2VkIHBhcmFtZXRlcnM6ICVkLyVkIiwKKwkJCWN1cmFyZywgcGFyYW1zKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKTsKIApAQCAtNzM5LDIzICs3MjYsMTkgQEAKIHN0YXRpYyB2b2lkIGRpc2Nvbm5lY3Qoc3RydWN0IGF0X3N0YXRlX3QgKiphdF9zdGF0ZV9wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGJjX3N0YXRlICpiY3M7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CisJc3RydWN0IGJjX3N0YXRlICpiY3MgPSAoKmF0X3N0YXRlX3ApLT5iY3M7CisJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSAoKmF0X3N0YXRlX3ApLT5jczsKIAotCUlGTlVMTFJFVChhdF9zdGF0ZV9wKTsKLQlJRk5VTExSRVQoKmF0X3N0YXRlX3ApOwotCWJjcyA9ICgqYXRfc3RhdGVfcCktPmJjczsKLQljcyA9ICgqYXRfc3RhdGVfcCktPmNzOwotCUlGTlVMTFJFVChjcyk7Ci0KLQluZXdfaW5kZXgoJigqYXRfc3RhdGVfcCktPnNlcV9pbmRleCwgTUFYX1NFUV9JTkRFWCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJKysoKmF0X3N0YXRlX3ApLT5zZXFfaW5kZXg7CiAKIAkvKiByZXZlcnQgdG8gc2VsZWN0ZWQgaWRsZSBtb2RlICovCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNpZG1vZGUpKSB7CisJaWYgKCFjcy0+Y2lkbW9kZSkgewogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19VTU1PREU7CiAJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsgLy9GSVhNRQotCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19VTU1PREUiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGJjcykgewogCQkvKiBCIGNoYW5uZWwgYXNzaWduZWQ6IGludm9rZSBoYXJkd2FyZSBzcGVjaWZpYyBoYW5kbGVyICovCkBAIC03NzcsNyArNzYwLDcgQEAKICAqIFRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGZyZWVkIGJ5IGNhbGxpbmcgZGlzY29ubmVjdCgpIGFmdGVyIHVzZS4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRfc3RhdGVfdCAqZ2V0X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNpZCkKKwkJCQkJCSAgaW50IGNpZCkKIC8qIGNpZHM6ID4wOiBzaWVtZW5zLWNpZAogCSAgMDogd2l0aG91dCBjaWQKIAkgLTE6IG5vIGNpZCBhc3NpZ25lZCB5ZXQKQEAgLTgyNiw3ICs4MDksNyBAQAogc3RhdGljIHZvaWQgc2NoZWR1bGVfaW5pdChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IHN0YXRlKQogewogCWlmIChjcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyAmIFBDX0lOSVQpIHsKLQkJZGJnKERFQlVHX0NNRCwgIm5vdCBzY2hlZHVsaW5nIFBDX0lOSVQgYWdhaW4iKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJub3Qgc2NoZWR1bGluZyBQQ19JTklUIGFnYWluIik7CiAJCXJldHVybjsKIAl9CiAJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgc3RhdGUpOwpAQCAtODM0LDUyICs4MTcsNTYgQEAKIAlnaWdhc2V0X2Jsb2NrX2NoYW5uZWxzKGNzKTsKIAljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19JTklUOwogCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKLQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19JTklUIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0lOSVQiKTsKIH0KIAotLyogQWRkICJBVCIgdG8gYSBjb21tYW5kLCBhZGQgdGhlIGNpZCwgZGxlIGVuY29kZSBpdCwgc2VuZCB0aGUgcmVzdWx0IHRvIHRoZSBoYXJkd2FyZS4gKi8KKy8qIEFkZCAiQVQiIHRvIGEgY29tbWFuZCwgYWRkIHRoZSBjaWQsIGRsZSBlbmNvZGUgaXQsIHNlbmQgdGhlIHJlc3VsdCB0byB0aGUKKyAgIGhhcmR3YXJlLiAqLwogc3RhdGljIHZvaWQgc2VuZF9jb21tYW5kKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBjb25zdCBjaGFyICpjbWQsIGludCBjaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRsZSwgZ2ZwX3Qga21hbGxvY2ZsYWdzKQorCQkJIGludCBkbGUsIGdmcF90IGttYWxsb2NmbGFncykKIHsKIAlzaXplX3QgY21kbGVuLCBidWZsZW47CiAJY2hhciAqY21kcG9zLCAqY21kYnVmLCAqY21kdGFpbDsKIAogCWNtZGxlbiA9IHN0cmxlbihjbWQpOwogCWJ1ZmxlbiA9IDExICsgY21kbGVuOworCWlmICh1bmxpa2VseShidWZsZW4gPD0gY21kbGVuKSkgeworCQlkZXZfZXJyKGNzLT5kZXYsICJpbnRlZ2VyIG92ZXJmbG93IGluIGJ1ZmxlblxuIik7CisJCXJldHVybjsKKwl9CiAKLQlpZiAobGlrZWx5KGJ1ZmxlbiA+IGNtZGxlbikpIHsKLQkJY21kYnVmID0ga21hbGxvYyhidWZsZW4sIGttYWxsb2NmbGFncyk7Ci0JCWlmIChsaWtlbHkoY21kYnVmICE9IE5VTEwpKSB7Ci0JCQljbWRwb3MgPSBjbWRidWYgKyA5OwotCQkJY21kdGFpbCA9IGNtZHBvcyArIGNtZGxlbjsKLQkJCW1lbWNweShjbWRwb3MsIGNtZCwgY21kbGVuKTsKKwljbWRidWYgPSBrbWFsbG9jKGJ1Zmxlbiwga21hbGxvY2ZsYWdzKTsKKwlpZiAodW5saWtlbHkoIWNtZGJ1ZikpIHsKKwkJZGV2X2Vycihjcy0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CiAKLQkJCWlmIChjaWQgPiAwICYmIGNpZCA8PSA2NTUzNSkgewotCQkJCWRvIHsKLQkJCQkJKi0tY21kcG9zID0gJzAnICsgY2lkICUgMTA7Ci0JCQkJCWNpZCAvPSAxMDsKLQkJCQkJKytjbWRsZW47Ci0JCQkJfSB3aGlsZSAoY2lkKTsKLQkJCX0KKwljbWRwb3MgPSBjbWRidWYgKyA5OworCWNtZHRhaWwgPSBjbWRwb3MgKyBjbWRsZW47CisJbWVtY3B5KGNtZHBvcywgY21kLCBjbWRsZW4pOwogCi0JCQljbWRsZW4gKz0gMjsKLQkJCSotLWNtZHBvcyA9ICdUJzsKLQkJCSotLWNtZHBvcyA9ICdBJzsKKwlpZiAoY2lkID4gMCAmJiBjaWQgPD0gNjU1MzUpIHsKKwkJZG8geworCQkJKi0tY21kcG9zID0gJzAnICsgY2lkICUgMTA7CisJCQljaWQgLz0gMTA7CisJCQkrK2NtZGxlbjsKKwkJfSB3aGlsZSAoY2lkKTsKKwl9CiAKLQkJCWlmIChkbGUpIHsKLQkJCQljbWRsZW4gKz0gNDsKLQkJCQkqLS1jbWRwb3MgPSAnKCc7Ci0JCQkJKi0tY21kcG9zID0gMHgxMDsKLQkJCQkqY21kdGFpbCsrID0gMHgxMDsKLQkJCQkqY21kdGFpbCsrID0gJyknOwotCQkJfQorCWNtZGxlbiArPSAyOworCSotLWNtZHBvcyA9ICdUJzsKKwkqLS1jbWRwb3MgPSAnQSc7CiAKLQkJCWNzLT5vcHMtPndyaXRlX2NtZChjcywgY21kcG9zLCBjbWRsZW4sIE5VTEwpOwotCQkJa2ZyZWUoY21kYnVmKTsKLQkJfSBlbHNlCi0JCQllcnIoIm5vIG1lbW9yeSBmb3IgY29tbWFuZCBidWZmZXIiKTsKLQl9IGVsc2UKLQkJZXJyKCJvdmVyZmxvdyBpbiBidWZsZW4iKTsKKwlpZiAoZGxlKSB7CisJCWNtZGxlbiArPSA0OworCQkqLS1jbWRwb3MgPSAnKCc7CisJCSotLWNtZHBvcyA9IDB4MTA7CisJCSpjbWR0YWlsKysgPSAweDEwOworCQkqY21kdGFpbCsrID0gJyknOworCX0KKworCWNzLT5vcHMtPndyaXRlX2NtZChjcywgY21kcG9zLCBjbWRsZW4sIE5VTEwpOworCWtmcmVlKGNtZGJ1Zik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGVfZnJvbV9jaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBjaWQpCkBAIC05MTAsOSArODk3LDYgQEAKIAogc3RhdGljIHZvaWQgYmNoYW5uZWxfZG93bihzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKLQlJRk5VTExSRVQoYmNzKTsKLQlJRk5VTExSRVQoYmNzLT5jcyk7Ci0KIAlpZiAoYmNzLT5jaHN0YXRlICYgQ0hTX0JfVVApIHsKIAkJYmNzLT5jaHN0YXRlICY9IH5DSFNfQl9VUDsKIAkJZ2lnYXNldF9pNGxfY2hhbm5lbF9jbWQoYmNzLCBJU0ROX1NUQVRfQkhVUCk7CkBAIC05MzAsMTYgKzkxNCwxNSBAQAogCiBzdGF0aWMgdm9pZCBiY2hhbm5lbF91cChzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKLQlJRk5VTExSRVQoYmNzKTsKLQogCWlmICghKGJjcy0+Y2hzdGF0ZSAmIENIU19EX1VQKSkgewotCQlub3RpY2UoIiVzOiBEIGNoYW5uZWwgbm90IHVwIiwgX19mdW5jX18pOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgIiVzOiBEIGNoYW5uZWwgbm90IHVwXG4iLCBfX2Z1bmNfXyk7CiAJCWJjcy0+Y2hzdGF0ZSB8PSBDSFNfRF9VUDsKIAkJZ2lnYXNldF9pNGxfY2hhbm5lbF9jbWQoYmNzLCBJU0ROX1NUQVRfRENPTk4pOwogCX0KIAogCWlmIChiY3MtPmNoc3RhdGUgJiBDSFNfQl9VUCkgewotCQlub3RpY2UoIiVzOiBCIGNoYW5uZWwgYWxyZWFkeSB1cCIsIF9fZnVuY19fKTsKKwkJZGV2X25vdGljZShiY3MtPmNzLT5kZXYsICIlczogQiBjaGFubmVsIGFscmVhZHkgdXBcbiIsCisJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk0NywxNyArOTMwLDIxIEBACiAJZ2lnYXNldF9pNGxfY2hhbm5lbF9jbWQoYmNzLCBJU0ROX1NUQVRfQkNPTk4pOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF9kaWFsKHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgdm9pZCAqZGF0YSwgaW50IHNlcV9pbmRleCkKK3N0YXRpYyB2b2lkIHN0YXJ0X2RpYWwoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzZXFfaW5kZXgpCiB7CiAJc3RydWN0IGJjX3N0YXRlICpiY3MgPSBhdF9zdGF0ZS0+YmNzOwogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gYXRfc3RhdGUtPmNzOwogCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWJjcy0+Y2hzdGF0ZSB8PSBDSFNfTk9USUZZX0xMOwotCS8vYXRvbWljX3NldCgmYmNzLT5zdGF0dXMsIEJDU19JTklUKTsKIAotCWlmIChhdG9taWNfcmVhZCgmYXRfc3RhdGUtPnNlcV9pbmRleCkgIT0gc2VxX2luZGV4KQorCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOworCWlmIChhdF9zdGF0ZS0+c2VxX2luZGV4ICE9IHNlcV9pbmRleCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlnb3RvIGVycm9yOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dmFsID0gZ2lnYXNldF9pc2RuX3NldHVwX2RpYWwoYXRfc3RhdGUsIGRhdGEpOwogCWlmIChyZXR2YWwgIT0gMCkKQEAgLTk2NSwyMCArOTUyLDE0IEBACiAKIAogCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRDsKLQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSUQiKTsKLS8vI2lmZGVmIEdJR19NQVlJTklUT05ESUFMCi0vLwlpZiAoYXRvbWljX3JlYWQoJmNzLT5NU3RhdGUpID09IE1TX1VOS05PV04pIHsKLS8vCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19JTklUOwotLy8JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0lOSVQiKTsKLS8vCX0KLS8vI2VuZGlmCi0JYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCisJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0NJRCIpOworCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKIAlyZXR1cm47CiAKIGVycm9yOgogCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX05PQ0lEOwotCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX05PQ0lEIik7Ci0JYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCisJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX05PQ0lEIik7CisJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCXJldHVybjsKIH0KIApAQCAtOTkxLDEzICs5NzIsMTMgQEAKIAogCWlmIChyZXR2YWwgPT0gMCkgewogCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19BQ0NFUFQ7Ci0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0FDQ0VQVCIpOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0FDQ0VQVCIpOworCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKIAkJLy9GSVhNRQogCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19IVVA7Ci0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOworCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJfQogfQogCkBAIC0xMDA4LDkgKzk4OSwxMCBAQAogCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEKQogCQlzY2hlZHVsZV9pbml0KGNzLCBNU19JTklUKTsKIAorCWNzLT5pc2RuX3VwID0gMTsKIAlnaWdhc2V0X2k0bF9jbWQoY3MsIElTRE5fU1RBVF9SVU4pOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IG5vdCBpbiBsb2NrZWQgbW9kZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgMjogb25seSBhZnRlciBpbml0IHNlcXVlbmNlCisJCQkJCS8vIEZJWE1FOiBub3QgaW4gbG9ja2VkIG1vZGUKKwkJCQkJLy8gRklYTUUgMjogb25seSBhZnRlciBpbml0IHNlcXVlbmNlCiAKIAljcy0+d2FpdGluZyA9IDA7CiAJd2FrZV91cCgmY3MtPndhaXRxdWV1ZSk7CkBAIC0xMDIzLDYgKzEwMDUsMTIgQEAKIAkJYXRvbWljX3NldCgmY3MtPm1vZGUsIE1fVU5LTk9XTik7CiAJfQogCisJLyogVGVsbCB0aGUgTEwgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUgLi4gKi8KKwlpZiAoY3MtPmlzZG5fdXApIHsKKwkJY3MtPmlzZG5fdXAgPSAwOworCQlnaWdhc2V0X2k0bF9jbWQoY3MsIElTRE5fU1RBVF9TVE9QKTsKKwl9CisKIAkvKiBUaGUgcmVzdCBpcyBkb25lIGJ5IGNsZWFudXBfY3MgKCkgaW4gdXNlciBtb2RlLiAqLwogCiAJY3MtPmNtZF9yZXN1bHQgPSAtRU5PREVWOwpAQCAtMTAzNywxNSArMTAyNSwyMCBAQAogCWlmIChhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgPT0gTVNfUkVBRFkpIHsKIAkJYXRvbWljX3NldCgmY3MtPm1zdGF0ZSwgTVNfU0hVVERPV04pOwogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19TSFVURE9XTjsKLQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCi0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1NIVVRET1dOIik7IC8vRklYTUUKLQkJLy9naWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsgLy9GSVhNRQorCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19TSFVURE9XTiIpOwogCX0gZWxzZQogCQlmaW5pc2hfc2h1dGRvd24oY3MpOwogfQogCiBzdGF0aWMgdm9pZCBkb19zdG9wKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwljcy0+Y29ubmVjdGVkID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCiAJZG9fc2h1dGRvd24oY3MpOwogfQogCkBAIC0xMDY5LDkgKzEwNjIsMTEgQEAKIAkJCXJldHVybiAwOwogCiAJaWYgKGNoYW5uZWwgPCAwKQotCQl3YXJuKCJDb3VsZCBub3QgZW50ZXIgY2lkIG1vZGUuIFJlaW5pdCBkZXZpY2UgYW5kIHRyeSBhZ2Fpbi4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJICAgICJDb3VsZCBub3QgZW50ZXIgY2lkIG1vZGUuIFJlaW5pdCBkZXZpY2UgYW5kIHRyeSBhZ2Fpbi5cbiIpOwogCWVsc2UgewotCQl3YXJuKCJDb3VsZCBub3QgZ2V0IGEgY2FsbCBpZC4gUmVpbml0IGRldmljZSBhbmQgdHJ5IGFnYWluLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkgICAgIkNvdWxkIG5vdCBnZXQgYSBjYWxsIGlkLiBSZWluaXQgZGV2aWNlIGFuZCB0cnkgYWdhaW4uXG4iKTsKIAkJY3MtPmJjc1tjaGFubmVsXS5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRDsKIAl9CiAJc2NoZWR1bGVfaW5pdChjcywgTVNfSU5JVCk7CkBAIC0xMDc5LDcgKzEwNzQsNyBAQAogfQogCiBzdGF0aWMgaW50IGF0X3N0YXRlX2ludmFsaWQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0X3N0YXRlX3QgKnRlc3RfcHRyKQorCQkJICAgIHN0cnVjdCBhdF9zdGF0ZV90ICp0ZXN0X3B0cikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYW5uZWw7CkBAIC0xMTE2LDcgKzExMTEsNyBAQAogCWNhc2UgSUNBTExfQUNDRVBUOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoImludGVybmFsIGVycm9yOiBkaXNwb3NpdGlvbj0lZCIsIHJldHZhbCk7CisJCWRldl9lcnIoY3MtPmRldiwgImludGVybmFsIGVycm9yOiBkaXNwb3NpdGlvbj0lZFxuIiwgcmV0dmFsKTsKIAkJLyogLS12LS0gZmFsbCB0aHJvdWdoIC0tdi0tICovCiAJY2FzZSBJQ0FMTF9JR05PUkU6CiAJY2FzZSBJQ0FMTF9SRUpFQ1Q6CkBAIC0xMTYwLDcgKzExNTUsNiBAQAogCW1vZGUgPSBhdG9taWNfcmVhZCgmY3MtPm1vZGUpOwogCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX0xPQ0tFRCk7CiAJYXRvbWljX3NldCgmY3MtPm1vZGUsIE1fVU5LTk9XTik7Ci0JLy9GSVhNRSByZXNldCBjYXJkIHN0YXRlIC8gYXQgc3RhdGVzIC8gYmNzIHN0YXRlcwogCiAJcmV0dXJuIG1vZGU7CiB9CkBAIC0xMTczLDggKzExNjcsNyBAQAogCWF0b21pY19zZXQoJmNzLT5tc3RhdGUsIE1TX1VOSU5JVElBTElaRUQpOwogCWF0b21pY19zZXQoJmNzLT5tb2RlLCBNX1VOS05PV04pOwogCWdpZ2FzZXRfZnJlZV9jaGFubmVscyhjcyk7Ci0JLy9GSVhNRSByZXNldCBjYXJkIHN0YXRlIC8gYXQgc3RhdGVzIC8gYmNzIHN0YXRlcwotCWlmIChhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpCisJaWYgKGNzLT5jb25uZWN0ZWQpCiAJCXNjaGVkdWxlX2luaXQoY3MsIE1TX0lOSVQpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjAzLDIxICsxMTk2LDIzIEBACiAJCWF0X3N0YXRlLT53YWl0aW5nID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfSU5JVDoKLQkJLy9GSVhNRSBzZXR1cCBldmVyeXRoaW5nCiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICY9IH5QQ19JTklUOwogCQljcy0+Y3VyX2F0X3NlcSA9IFNFUV9OT05FOwogCQlhdG9taWNfc2V0KCZjcy0+bW9kZSwgTV9VTklNT0RFTSk7Ci0JCWlmICghYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFjcy0+Y2lkbW9kZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCWdpZ2FzZXRfZnJlZV9jaGFubmVscyhjcyk7CiAJCQlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19SRUFEWSk7CiAJCQlicmVhazsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSURNT0RFOwotCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7IC8vRklYTUUKLQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOworCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CiAJCWJyZWFrOwogCWNhc2UgQUNUX0ZBSUxJTklUOgotCQl3YXJuKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiQ291bGQgbm90IGluaXRpYWxpemUgdGhlIGRldmljZS5cbiIpOwogCQljcy0+ZGxlID0gMDsKIAkJaW5pdF9mYWlsZWQoY3MsIE1fVU5LTk9XTik7CiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7CkBAIC0xMjczLDggKzEyNjgsOCBAQAogCQkvKiBnZXQgZnJlc2ggQVQgc3RhdGUgc3RydWN0dXJlIGZvciBuZXcgQ0lEICovCiAJCWF0X3N0YXRlMiA9IGdldF9mcmVlX2NoYW5uZWwoY3MsIGV2LT5wYXJhbWV0ZXIpOwogCQlpZiAoIWF0X3N0YXRlMikgewotCQkJd2FybigiUklORyBpZ25vcmVkOiAiCi0JCQkgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbCBzdHJ1Y3R1cmUiKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsCisJCQkiUklORyBpZ25vcmVkOiBjb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbCBzdHJ1Y3R1cmVcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTMwMiw3ICsxMjk3LDcgQEAKIAkJYXRfc3RhdGUgPSAqcF9hdF9zdGF0ZTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfRkFJTFNET1dOOgotCQl3YXJuKCJDb3VsZCBub3Qgc2h1dCBkb3duIHRoZSBkZXZpY2UuIik7CisJCWRldl93YXJuKGNzLT5kZXYsICJDb3VsZCBub3Qgc2h1dCBkb3duIHRoZSBkZXZpY2UuXG4iKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBQ1RfRkFLRVNET1dOOgogCWNhc2UgQUNUX1NET1dOOgpAQCAtMTM1NSw3ICsxMzUwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfQUJPUlRIVVA6CiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7Ci0JCXdhcm4oIkNvdWxkIG5vdCBoYW5nIHVwLiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LCAiQ291bGQgbm90IGhhbmcgdXAuXG4iKTsKIAkJYXRfc3RhdGUtPmNpZCA9IC0xOwogCQlpZiAoYmNzICYmIGNzLT5vbmVjaGFubmVsKQogCQkJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfRExFMDsKQEAgLTEzNjcsMTQgKzEzNjIsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfRkFJTERMRTA6CiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7Ci0JCXdhcm4oIkNvdWxkIG5vdCBsZWF2ZSBETEUgbW9kZS4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgIkNvdWxkIG5vdCBsZWF2ZSBETEUgbW9kZS5cbiIpOwogCQlhdF9zdGF0ZTIgPSAmY3MtPmJjc1tjcy0+Y3VyY2hhbm5lbF0uYXRfc3RhdGU7CiAJCWRpc2Nvbm5lY3QoJmF0X3N0YXRlMik7CiAJCXNjaGVkdWxlX2luaXQoY3MsIE1TX1JFQ09WRVIpOwogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMRExFMToKIAkJY3MtPmN1cl9hdF9zZXEgPSBTRVFfTk9ORTsKLQkJd2FybigiQ291bGQgbm90IGVudGVyIERMRSBtb2RlLiBUcnkgdG8gaGFuZyB1cC4iKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJCSAiQ291bGQgbm90IGVudGVyIERMRSBtb2RlLiBUcnlpbmcgdG8gaGFuZyB1cC5cbiIpOwogCQljaGFubmVsID0gY3MtPmN1cmNoYW5uZWw7CiAJCWNzLT5iY3NbY2hhbm5lbF0uYXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19IVVA7CiAJCWF0b21pY19zZXQoJmNzLT5jb21tYW5kc19wZW5kaW5nLCAxKTsKQEAgLTEzOTUsNyArMTM5MSw4IEBACiAJCWNzLT5jdXJfYXRfc2VxID0gU0VRX05PTkU7CiAJCWNoYW5uZWwgPSBjcy0+Y3VyY2hhbm5lbDsKIAkJaWYgKCFyZWluaXRfYW5kX3JldHJ5KGNzLCBjaGFubmVsKSkgewotCQkJd2FybigiQ291bGQgbm90IGdldCBhIGNhbGwgaWQuIERpYWxpbmcgbm90IHBvc3NpYmxlIik7CisJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAiQ291bGQgbm90IGdldCBhIGNhbGwgSUQuIENhbm5vdCBkaWFsLlxuIik7CiAJCQlhdF9zdGF0ZTIgPSAmY3MtPmJjc1tjaGFubmVsXS5hdF9zdGF0ZTsKIAkJCWRpc2Nvbm5lY3QoJmF0X3N0YXRlMik7CiAJCX0KQEAgLTE0MjgsNyArMTQyNSw4IEBACiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKIAkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCQlicmVhazsKLQljYXNlIEFDVF9HRVRTVFJJTkc6IC8qIHdhcm5pbmc6IFJJTkcsIFpETEUsIC4uLiBhcmUgbm90IGhhbmRsZWQgcHJvcGVybHkgYW55IG1vcmUgKi8KKwljYXNlIEFDVF9HRVRTVFJJTkc6IC8qIHdhcm5pbmc6IFJJTkcsIFpETEUsIC4uLgorCQkJICAgICAgIGFyZSBub3QgaGFuZGxlZCBwcm9wZXJseSBhbnltb3JlICovCiAJCWF0X3N0YXRlLT5nZXRzdHJpbmcgPSAxOwogCQlicmVhazsKIAljYXNlIEFDVF9TRVRWRVI6CkBAIC0xNDY5LDE2ICsxNDY3LDE2IEBACiAJY2FzZSBBQ1RfR09UVkVSOgogCQlpZiAoY3MtPmdvdGZ3dmVyID09IDApIHsKIAkJCWNzLT5nb3Rmd3ZlciA9IDE7Ci0JCQlkYmcoREVCVUdfQU5ZLAotCQkJICAgICJmaXJtd2FyZSB2ZXJzaW9uICUwMmQuJTAzZC4lMDJkLiUwMmQiLAotCQkJICAgIGNzLT5md3ZlclswXSwgY3MtPmZ3dmVyWzFdLAotCQkJICAgIGNzLT5md3ZlclsyXSwgY3MtPmZ3dmVyWzNdKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJCSJmaXJtd2FyZSB2ZXJzaW9uICUwMmQuJTAzZC4lMDJkLiUwMmQiLAorCQkJCWNzLT5md3ZlclswXSwgY3MtPmZ3dmVyWzFdLAorCQkJCWNzLT5md3ZlclsyXSwgY3MtPmZ3dmVyWzNdKTsKIAkJCWJyZWFrOwogCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQUNUX0ZBSUxWRVI6CiAJCWNzLT5nb3Rmd3ZlciA9IC0xOwotCQllcnIoImNvdWxkIG5vdCByZWFkIGZpcm13YXJlIHZlcnNpb24uIik7CisJCWRldl9lcnIoY3MtPmRldiwgImNvdWxkIG5vdCByZWFkIGZpcm13YXJlIHZlcnNpb24uXG4iKTsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAljYXNlIEFDVF9FUlJPUjoKQEAgLTE0OTYsMTYgKzE0OTQsMTYgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAljYXNlIEFDVF9ERUJVRzoKLQkJZGJnKERFQlVHX0FOWSwgIiVzOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQiLAorCQlnaWdfZGJnKERFQlVHX0FOWSwgIiVzOiByZXNwX2NvZGUgJWQgaW4gQ29uU3RhdGUgJWQiLAogCQkJX19mdW5jX18sIGV2LT50eXBlLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOwogCQlicmVhazsKIAljYXNlIEFDVF9XQVJOOgotCQl3YXJuKCIlczogcmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkISIsCi0JCQlfX2Z1bmNfXywgZXYtPnR5cGUsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CisJCWRldl93YXJuKGNzLT5kZXYsICIlczogcmVzcF9jb2RlICVkIGluIENvblN0YXRlICVkIVxuIiwKKwkJCSBfX2Z1bmNfXywgZXYtPnR5cGUsIGF0X3N0YXRlLT5Db25TdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgQUNUX1pDQVU6Ci0JCXdhcm4oImNhdXNlIGNvZGUgJTA0eCBpbiBjb25uZWN0aW9uIHN0YXRlICVkLiIsCi0JCSAgICAgZXYtPnBhcmFtZXRlciwgYXRfc3RhdGUtPkNvblN0YXRlKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwgImNhdXNlIGNvZGUgJTA0eCBpbiBjb25uZWN0aW9uIHN0YXRlICVkLlxuIiwKKwkJCSBldi0+cGFyYW1ldGVyLCBhdF9zdGF0ZS0+Q29uU3RhdGUpOwogCQlicmVhazsKIAogCS8qIGV2ZW50cyBmcm9tIHRoZSBMTCAqLwpAQCAtMTUxNiwxNCArMTUxNCwxNCBAQAogCQlzdGFydF9hY2NlcHQoYXRfc3RhdGUpOwogCQlicmVhazsKIAljYXNlIEFDVF9QUk9UT19MMjoKLQkJZGJnKERFQlVHX0NNRCwKLQkJICAgICJzZXQgcHJvdG9jb2wgdG8gJXUiLCAodW5zaWduZWQpIGV2LT5wYXJhbWV0ZXIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNldCBwcm90b2NvbCB0byAldSIsCisJCQkodW5zaWduZWQpIGV2LT5wYXJhbWV0ZXIpOwogCQlhdF9zdGF0ZS0+YmNzLT5wcm90bzIgPSBldi0+cGFyYW1ldGVyOwogCQlicmVhazsKIAljYXNlIEFDVF9IVVA6CiAJCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0hVUDsKLQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOyAvL0ZJWE1FCi0JCWRiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOworCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKIAkJYnJlYWs7CiAKIAkvKiBob3RwbHVnIGV2ZW50cyAqLwpAQCAtMTU1NSwxNyArMTU1MywxOSBAQAogCiAJLyogZXZlbnRzIGZyb20gdGhlIHByb2MgZmlsZSBzeXN0ZW0gKi8gLy8gRklYTUUgd2l0aG91dCBBQ1RfeHh4eD8KIAljYXNlIEFDVF9QUk9DX0NJRE1PREU6Ci0JCWlmIChldi0+cGFyYW1ldGVyICE9IGF0b21pY19yZWFkKCZjcy0+Y2lkbW9kZSkpIHsKLQkJCWF0b21pY19zZXQoJmNzLT5jaWRtb2RlLCBldi0+cGFyYW1ldGVyKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCWlmIChldi0+cGFyYW1ldGVyICE9IGNzLT5jaWRtb2RlKSB7CisJCQljcy0+Y2lkbW9kZSA9IGV2LT5wYXJhbWV0ZXI7CiAJCQlpZiAoZXYtPnBhcmFtZXRlcikgewogCQkJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7Ci0JCQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CiAJCQl9IGVsc2UgewogCQkJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX1VNTU9ERTsKLQkJCQlkYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19VTU1PREUiKTsKKwkJCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfVU1NT0RFIik7CiAJCQl9CiAJCQlhdG9taWNfc2V0KCZjcy0+Y29tbWFuZHNfcGVuZGluZywgMSk7CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJY3MtPndhaXRpbmcgPSAwOwogCQl3YWtlX3VwKCZjcy0+d2FpdHF1ZXVlKTsKIAkJYnJlYWs7CkBAIC0xNTkwLDcgKzE1OTAsNyBAQAogCQkJCSpwX3Jlc3BfY29kZSA9IFJTUF9OVUxMOwogCQkJfQogCQl9IGVsc2UKLQkJCWVycigiJXM6IGFjdGlvbj09JWQhIiwgX19mdW5jX18sIGFjdGlvbik7CisJCQlkZXZfZXJyKGNzLT5kZXYsICIlczogYWN0aW9uPT0lZCFcbiIsIF9fZnVuY19fLCBhY3Rpb24pOwogCX0KIH0KIApAQCAtMTYwOSw0NyArMTYwOSw0NiBAQAogCWludCBjdXJhY3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVChjcyk7Ci0JSUZOVUxMUkVUKGV2KTsKLQogCWlmIChldi0+Y2lkID49IDApIHsKIAkJYXRfc3RhdGUgPSBhdF9zdGF0ZV9mcm9tX2NpZChjcywgZXYtPmNpZCk7CiAJCWlmICghYXRfc3RhdGUpIHsKIAkJCWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBSU1BfV1JPTkdfQ0lELAotCQkJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCk7CisJCQkJCSAgTlVMTCwgMCwgTlVMTCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewogCQlhdF9zdGF0ZSA9IGV2LT5hdF9zdGF0ZTsKIAkJaWYgKGF0X3N0YXRlX2ludmFsaWQoY3MsIGF0X3N0YXRlKSkgewotCQkJZGJnKERFQlVHX0FOWSwKLQkJCSAgICAiZXZlbnQgZm9yIGludmFsaWQgYXRfc3RhdGUgJXAiLCBhdF9zdGF0ZSk7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgImV2ZW50IGZvciBpbnZhbGlkIGF0X3N0YXRlICVwIiwKKwkJCQlhdF9zdGF0ZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQlkYmcoREVCVUdfQ01ELAotCSAgICAiY29ubmVjdGlvbiBzdGF0ZSAlZCwgZXZlbnQgJWQiLCBhdF9zdGF0ZS0+Q29uU3RhdGUsIGV2LT50eXBlKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgImNvbm5lY3Rpb24gc3RhdGUgJWQsIGV2ZW50ICVkIiwKKwkJYXRfc3RhdGUtPkNvblN0YXRlLCBldi0+dHlwZSk7CiAKIAliY3MgPSBhdF9zdGF0ZS0+YmNzOwogCXNlbmRjaWQgPSBhdF9zdGF0ZS0+Y2lkOwogCiAJLyogU2V0dGluZyB0aGUgcG9pbnRlciB0byB0aGUgZGlhbCBhcnJheSAqLwogCXJlcCA9IGF0X3N0YXRlLT5yZXBseXN0cnVjdDsKLQlJRk5VTExSRVQocmVwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmIChldi0+dHlwZSA9PSBFVl9USU1FT1VUKSB7Ci0JCWlmIChldi0+cGFyYW1ldGVyICE9IGF0b21pY19yZWFkKCZhdF9zdGF0ZS0+dGltZXJfaW5kZXgpCisJCWlmIChldi0+cGFyYW1ldGVyICE9IGF0X3N0YXRlLT50aW1lcl9pbmRleAogCQkgICAgfHwgIWF0X3N0YXRlLT50aW1lcl9hY3RpdmUpIHsKIAkJCWV2LT50eXBlID0gUlNQX05PTkU7IC8qIG9sZCB0aW1lb3V0ICovCi0JCQlkYmcoREVCVUdfQU5ZLCAib2xkIHRpbWVvdXQiKTsKKwkJCWdpZ19kYmcoREVCVUdfQU5ZLCAib2xkIHRpbWVvdXQiKTsKIAkJfSBlbHNlIGlmICghYXRfc3RhdGUtPndhaXRpbmcpCi0JCQlkYmcoREVCVUdfQU5ZLCAidGltZW91dCBvY2N1cmVkIik7CisJCQlnaWdfZGJnKERFQlVHX0FOWSwgInRpbWVvdXQgb2NjdXJyZWQiKTsKIAkJZWxzZQotCQkJZGJnKERFQlVHX0FOWSwgInN0b3BwZWQgd2FpdGluZyIpOworCQkJZ2lnX2RiZyhERUJVR19BTlksICJzdG9wcGVkIHdhaXRpbmciKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAotCS8qIGlmIHRoZSByZXNwb25zZSBiZWxvbmdzIHRvIGEgdmFyaWFibGUgaW4gYXRfc3RhdGUtPmludF92YXJbVkFSX1hYWFhdIG9yIGF0X3N0YXRlLT5zdHJfdmFyW1NUUl9YWFhYXSwgc2V0IGl0ICovCisJLyogaWYgdGhlIHJlc3BvbnNlIGJlbG9uZ3MgdG8gYSB2YXJpYWJsZSBpbiBhdF9zdGF0ZS0+aW50X3ZhcltWQVJfWFhYWF0KKwkgICBvciBhdF9zdGF0ZS0+c3RyX3ZhcltTVFJfWFhYWF0sIHNldCBpdCAqLwogCWlmIChldi0+dHlwZSA+PSBSU1BfVkFSICYmIGV2LT50eXBlIDwgUlNQX1ZBUiArIFZBUl9OVU0pIHsKIAkJaW5kZXggPSBldi0+dHlwZSAtIFJTUF9WQVI7CiAJCWF0X3N0YXRlLT5pbnRfdmFyW2luZGV4XSA9IGV2LT5wYXJhbWV0ZXI7CkBAIC0xNjU3LDIwICsxNjU2LDIyIEBACiAJCWluZGV4ID0gZXYtPnR5cGUgLSBSU1BfU1RSOwogCQlrZnJlZShhdF9zdGF0ZS0+c3RyX3ZhcltpbmRleF0pOwogCQlhdF9zdGF0ZS0+c3RyX3ZhcltpbmRleF0gPSBldi0+cHRyOwotCQlldi0+cHRyID0gTlVMTDsgLyogcHJldmVudCBwcm9jZXNzX2V2ZW50cygpIGZyb20gZGVhbGxvY2F0aW5nIHB0ciAqLworCQlldi0+cHRyID0gTlVMTDsgLyogcHJldmVudCBwcm9jZXNzX2V2ZW50cygpIGZyb20KKwkJCQkgICBkZWFsbG9jYXRpbmcgcHRyICovCiAJfQogCiAJaWYgKGV2LT50eXBlID09IEVWX1RJTUVPVVQgfHwgZXYtPnR5cGUgPT0gUlNQX1NUUklORykKIAkJYXRfc3RhdGUtPmdldHN0cmluZyA9IDA7CiAKLQkvKiBTZWFyY2ggcm93IGluIGRpYWwgYXJyYXkgd2hpY2ggbWF0Y2hlcyBtb2RlbSByZXNwb25zZSBhbmQgY3VycmVudCBjb25zdGF0ZSAqLworCS8qIFNlYXJjaCByb3cgaW4gZGlhbCBhcnJheSB3aGljaCBtYXRjaGVzIG1vZGVtIHJlc3BvbnNlIGFuZCBjdXJyZW50CisJICAgY29uc3RhdGUgKi8KIAlmb3IgKDs7IHJlcCsrKSB7CiAJCXJjb2RlID0gcmVwLT5yZXNwX2NvZGU7Ci0JCS8qIGRiZyAoREVCVUdfQU5ZLCAicmNvZGUgJWQiLCByY29kZSk7ICovCiAJCWlmIChyY29kZSA9PSBSU1BfTEFTVCkgewogCQkJLyogZm91bmQgbm90aGluZy4uLiovCi0JCQl3YXJuKCIlczogcmNvZGU9UlNQX0xBU1Q6IHJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCEiLAotCQkJCV9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKKwkJCWRldl93YXJuKGNzLT5kZXYsICIlczogcmNvZGU9UlNQX0xBU1Q6ICIKKwkJCQkJInJlc3BfY29kZSAlZCBpbiBDb25TdGF0ZSAlZCFcbiIsCisJCQkJIF9fZnVuY19fLCBldi0+dHlwZSwgYXRfc3RhdGUtPkNvblN0YXRlKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoKHJjb2RlID09IFJTUF9BTlkgfHwgcmNvZGUgPT0gZXYtPnR5cGUpCkBAIC0xNzA2LDE0ICsxNzA3LDE0IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBTZW5kIGNvbW1hbmQgdG8gbW9kZW0gaWYgbm90IE5VTEwuLi4gKi8KIAkJCWlmIChwX2NvbW1hbmQvKnJlcC0+Y29tbWFuZCovKSB7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkKKwkJCQlpZiAoY3MtPmNvbm5lY3RlZCkKIAkJCQkJc2VuZF9jb21tYW5kKGNzLCBwX2NvbW1hbmQsCi0JCQkJCSAgICAgICAgICAgICBzZW5kY2lkLCBjcy0+ZGxlLAotCQkJCQkgICAgICAgICAgICAgR0ZQX0FUT01JQyk7CisJCQkJCQkgICAgIHNlbmRjaWQsIGNzLT5kbGUsCisJCQkJCQkgICAgIEdGUF9BVE9NSUMpOwogCQkJCWVsc2UKIAkJCQkJZ2lnYXNldF9hZGRfZXZlbnQoY3MsIGF0X3N0YXRlLAotCQkJCQkgICAgICAgICAgICAgICAgICBSU1BfTk9ERVYsCi0JCQkJCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwpOworCQkJCQkJCSAgUlNQX05PREVWLAorCQkJCQkJCSAgTlVMTCwgMCwgTlVMTCk7CiAJCQl9CiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwpAQCAtMTcyMyw4ICsxNzI0LDcgQEAKIAkJCX0gZWxzZSBpZiAocmVwLT50aW1lb3V0ID4gMCkgeyAvKiBuZXcgdGltZW91dCAqLwogCQkJCWF0X3N0YXRlLT50aW1lcl9leHBpcmVzID0gcmVwLT50aW1lb3V0ICogMTA7CiAJCQkJYXRfc3RhdGUtPnRpbWVyX2FjdGl2ZSA9IDE7Ci0JCQkJbmV3X2luZGV4KCZhdF9zdGF0ZS0+dGltZXJfaW5kZXgsCi0JCQkJICAgICAgICAgIE1BWF9USU1FUl9JTkRFWCk7CisJCQkJKythdF9zdGF0ZS0+dGltZXJfaW5kZXg7CiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQl9CkBAIC0xNzQ0LDE3ICsxNzQ0LDE2IEBACiAJc3RydWN0IGJjX3N0YXRlICpiY3M7CiAJaW50IGk7CiAJaW50IHNlcXVlbmNlOwotCi0JSUZOVUxMUkVUKGNzKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDApOwogCiAJaWYgKGNzLT5jdXJfYXRfc2VxKSB7Ci0JCWRiZyhERUJVR19DTUQsICJub3Qgc2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kczogYnVzeSIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgIm5vdCBzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzOiBidXN5Iik7CiAJCXJldHVybjsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kcyIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kcyIpOwogCiAJc2VxdWVuY2UgPSBTRVFfTk9ORTsKIApAQCAtMTc5NSw4ICsxNzk0LDkgQEAKIAl9CiAKIAkvKiBvbmx5IHN3aXRjaCBiYWNrIHRvIHVuaW1vZGVtIG1vZGUsIGlmIG5vIGNvbW1hbmRzIGFyZSBwZW5kaW5nIGFuZCBubyBjaGFubmVscyBhcmUgdXAgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgPT0gUENfVU1NT0RFCi0JICAgICYmICFhdG9taWNfcmVhZCgmY3MtPmNpZG1vZGUpCisJICAgICYmICFjcy0+Y2lkbW9kZQogCSAgICAmJiBsaXN0X2VtcHR5KCZjcy0+dGVtcF9hdF9zdGF0ZXMpCiAJICAgICYmIGF0b21pY19yZWFkKCZjcy0+bW9kZSkgPT0gTV9DSUQpIHsKIAkJc2VxdWVuY2UgPSBTRVFfVU1NT0RFOwpAQCAtMTgxMCw2ICsxODEwLDcgQEAKIAkJCX0KIAkJfQogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICY9IH5QQ19VTU1PREU7CiAJaWYgKHNlcXVlbmNlICE9IFNFUV9OT05FKSB7CiAJCXNjaGVkdWxlX3NlcXVlbmNlKGNzLCBhdF9zdGF0ZSwgc2VxdWVuY2UpOwpAQCAtMTg2NSwxMSArMTg2Niw3IEBACiAJaWYgKGNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzICYgUENfQ0lETU9ERSkgewogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyAmPSB+UENfQ0lETU9ERTsKIAkJaWYgKGF0b21pY19yZWFkKCZjcy0+bW9kZSkgPT0gTV9VTklNT0RFTSkgewotI2lmIDAKLQkJCWNzLT5yZXRyeV9jb3VudCA9IDI7Ci0jZWxzZQogCQkJY3MtPnJldHJ5X2NvdW50ID0gMTsKLSNlbmRpZgogCQkJc2NoZWR1bGVfc2VxdWVuY2UoY3MsICZjcy0+YXRfc3RhdGUsIFNFUV9DSURNT0RFKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTg5Nyw3ICsxODk0LDcgQEAKIAkJCXN3aXRjaCAoYXRvbWljX3JlYWQoJmNzLT5tb2RlKSkgewogCQkJY2FzZSBNX1VOSU1PREVNOgogCQkJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7Ci0JCQkJZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOworCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CiAJCQkJYXRvbWljX3NldCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcsIDEpOwogCQkJCXJldHVybjsKICNpZmRlZiBHSUdfTUFZSU5JVE9ORElBTApAQCAtMTkyNiwxOCArMTkyMywyMSBAQAogCWludCBpOwogCWludCBjaGVja19mbGFncyA9IDA7CiAJaW50IHdhc19idXN5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBubyBsb2NraW5nIG5lZWRlZCAob25seSBvbmUgcmVhZGVyKSAqLwotCWhlYWQgPSBhdG9taWNfcmVhZCgmY3MtPmV2X2hlYWQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOworCWhlYWQgPSBjcy0+ZXZfaGVhZDsKIAogCWZvciAoaSA9IDA7IGkgPCAyICogTUFYX0VWRU5UUzsgKytpKSB7Ci0JCXRhaWwgPSBhdG9taWNfcmVhZCgmY3MtPmV2X3RhaWwpOworCQl0YWlsID0gY3MtPmV2X3RhaWw7CiAJCWlmICh0YWlsID09IGhlYWQpIHsKIAkJCWlmICghY2hlY2tfZmxhZ3MgJiYgIWF0b21pY19yZWFkKCZjcy0+Y29tbWFuZHNfcGVuZGluZykpCiAJCQkJYnJlYWs7CiAJCQljaGVja19mbGFncyA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCQkJcHJvY2Vzc19jb21tYW5kX2ZsYWdzKGNzKTsKLQkJCXRhaWwgPSBhdG9taWNfcmVhZCgmY3MtPmV2X3RhaWwpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CisJCQl0YWlsID0gY3MtPmV2X3RhaWw7CiAJCQlpZiAodGFpbCA9PSBoZWFkKSB7CiAJCQkJaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbW1hbmRzX3BlbmRpbmcpKQogCQkJCQlicmVhazsKQEAgLTE5NDcsMTggKzE5NDcsMjMgQEAKIAogCQlldiA9IGNzLT5ldmVudHMgKyBoZWFkOwogCQl3YXNfYnVzeSA9IGNzLT5jdXJfYXRfc2VxICE9IFNFUV9OT05FOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCQlwcm9jZXNzX2V2ZW50KGNzLCBldik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCQlrZnJlZShldi0+cHRyKTsKIAkJZXYtPnB0ciA9IE5VTEw7CiAJCWlmICh3YXNfYnVzeSAmJiBjcy0+Y3VyX2F0X3NlcSA9PSBTRVFfTk9ORSkKIAkJCWNoZWNrX2ZsYWdzID0gMTsKIAogCQloZWFkID0gKGhlYWQgKyAxKSAlIE1BWF9FVkVOVFM7Ci0JCWF0b21pY19zZXQoJmNzLT5ldl9oZWFkLCBoZWFkKTsKKwkJY3MtPmV2X2hlYWQgPSBoZWFkOwogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5ldl9sb2NrLCBmbGFncyk7CisKIAlpZiAoaSA9PSAyICogTUFYX0VWRU5UUykgewotCQllcnIoImluZmluaXRlIGxvb3AgaW4gcHJvY2Vzc19ldmVudHM7IGFib3J0aW5nLiIpOworCQlkZXZfZXJyKGNzLT5kZXYsCisJCQkiaW5maW5pdGUgbG9vcCBpbiBwcm9jZXNzX2V2ZW50czsgYWJvcnRpbmcuXG4iKTsKIAl9CiB9CiAKQEAgLTE5NzAsMTIgKzE5NzUsOSBAQAogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgZGF0YTsKIAotCUlGTlVMTFJFVChjcyk7Ci0JSUZOVUxMUkVUKGNzLT5pbmJ1Zik7Ci0KIAkvKiBoYW5kbGUgaW5jb21pbmcgZGF0YSBvbiBjb250cm9sL2NvbW1vbiBjaGFubmVsICovCiAJaWYgKGF0b21pY19yZWFkKCZjcy0+aW5idWYtPmhlYWQpICE9IGF0b21pY19yZWFkKCZjcy0+aW5idWYtPnRhaWwpKSB7Ci0JCWRiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyBuZXcgZGF0YSIpOworCQlnaWdfZGJnKERFQlVHX0lOVFIsICJwcm9jZXNzaW5nIG5ldyBkYXRhIik7CiAJCWNzLT5vcHMtPmhhbmRsZV9pbnB1dChjcy0+aW5idWYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCmluZGV4IDcyOWVkY2QuLjIyYjk2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaAorKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKQEAgLTEsMTEgKzEsMTYgQEAKLS8qIFNpZW1lbnMgR2lnYXNldCAzMDd4IGRyaXZlcgorLyoKKyAqIFNpZW1lbnMgR2lnYXNldCAzMDd4IGRyaXZlcgogICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBhbGwgY29ubmVjdGlvbiB2YXJpYW50cwogICoKLSAqIFdyaXR0ZW4gYnkgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4KKyAqIFdyaXR0ZW4gYnkgU3RlZmFuIEVpbGVycwogICogICAgICAgIGFuZCBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4KICAqCi0gKiBWZXJzaW9uOiAkSWQ6IGdpZ2FzZXQuaCx2IDEuOTcuNC4yNiAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogCiAjaWZuZGVmIEdJR0FTRVRfSApAQCAtMTUsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuaWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KQEAgLTI3LDIxICszMSwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjZGVmaW5lIEdJR19WRVJTSU9OIHswLDUsMCwwfQogI2RlZmluZSBHSUdfQ09NUEFUICB7MCw0LDAsMH0KIAotI2RlZmluZSBNQVhfUkVDX1BBUkFNUyAxMCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXguIG51bWJlciBvZiBwYXJhbXMgaW4gcmVzcG9uc2Ugc3RyaW5nICovCi0jZGVmaW5lIE1BWF9SRVNQX1NJWkUgNTEyICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heC4gc2l6ZSBvZiBhIHJlc3BvbnNlIHN0cmluZyAqLwotI2RlZmluZSBIV19IRFJfTEVOIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZWFkZXIgc2l6ZSB1c2VkIHRvIHN0b3JlIGFjayBpbmZvICovCisjZGVmaW5lIE1BWF9SRUNfUEFSQU1TIDEwCS8qIE1heC4gbnVtYmVyIG9mIHBhcmFtcyBpbiByZXNwb25zZSBzdHJpbmcgKi8KKyNkZWZpbmUgTUFYX1JFU1BfU0laRSA1MTIJLyogTWF4LiBzaXplIG9mIGEgcmVzcG9uc2Ugc3RyaW5nICovCisjZGVmaW5lIEhXX0hEUl9MRU4gMgkJLyogSGVhZGVyIHNpemUgdXNlZCB0byBzdG9yZSBhY2sgaW5mbyAqLwogCi0jZGVmaW5lIE1BWF9FVkVOVFMgNjQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgZXZlbnQgcXVldWUgKi8KKyNkZWZpbmUgTUFYX0VWRU5UUyA2NAkJLyogc2l6ZSBvZiBldmVudCBxdWV1ZSAqLwogCiAjZGVmaW5lIFJCVUZTSVpFIDgxOTIKLSNkZWZpbmUgU0JVRlNJWkUgNDA5NgkJCQkvKiBza19idWZmIHBheWxvYWQgc2l6ZSAqLworI2RlZmluZSBTQlVGU0laRSA0MDk2CQkvKiBza19idWZmIHBheWxvYWQgc2l6ZSAqLwogCi0jZGVmaW5lIE1BWF9CVUZfU0laRSAoU0JVRlNJWkUgLSAyKQkJLyogTWF4LiBzaXplIG9mIGEgZGF0YSBwYWNrZXQgZnJvbSBMTCAqLwotI2RlZmluZSBUUkFOU0JVRlNJWkUgNzY4CQkJLyogYnl0ZXMgcGVyIHNrYiBmb3IgdHJhbnNwYXJlbnQgcmVjZWl2ZSAqLworI2RlZmluZSBUUkFOU0JVRlNJWkUgNzY4CS8qIGJ5dGVzIHBlciBza2IgZm9yIHRyYW5zcGFyZW50IHJlY2VpdmUgKi8KKyNkZWZpbmUgTUFYX0JVRl9TSVpFIChTQlVGU0laRSAtIDIpCS8qIE1heC4gc2l6ZSBvZiBhIGRhdGEgcGFja2V0IGZyb20gTEwgKi8KIAogLyogY29tcGlsZSB0aW1lIG9wdGlvbnMgKi8KICNkZWZpbmUgR0lHX01BSk9SIDAKQEAgLTUwLDEwICs1NSw3IEBACiAjZGVmaW5lIEdJR19SRVRSWUNJRAogI2RlZmluZSBHSUdfWDc1CiAKLSNkZWZpbmUgTUFYX1RJTUVSX0lOREVYIDEwMDAKLSNkZWZpbmUgTUFYX1NFUV9JTkRFWCAgIDEwMDAKLQotI2RlZmluZSBHSUdfVElDSyAoSFogLyAxMCkKKyNkZWZpbmUgR0lHX1RJQ0sgMTAwCQkvKiBpbiBtaWxsaXNlY29uZHMgKi8KIAogLyogdGltZW91dCB2YWx1ZXMgKHVuaXQ6IDEgc2VjKSAqLwogI2RlZmluZSBJTklUX1RJTUVPVVQgMQpAQCAtNjcsNzQgKzY5LDg5IEBACiAKICNkZWZpbmUgTUFYQUNUIDMKIAotI2RlZmluZSBJRk5VTEwoYSkgICAgICAgICBpZiAodW5saWtlbHkoIShhKSkpCi0jZGVmaW5lIElGTlVMTFJFVChhKSAgICAgIGlmICh1bmxpa2VseSghKGEpKSkge2VycigiJXM9PU5VTEwgYXQgJXM6JWQhIiwgI2EsIF9fRklMRV9fLCBfX0xJTkVfXyk7IHJldHVybjsgfQotI2RlZmluZSBJRk5VTExSRVRWQUwoYSxiKSBpZiAodW5saWtlbHkoIShhKSkpIHtlcnIoIiVzPT1OVUxMIGF0ICVzOiVkISIsICNhLCBfX0ZJTEVfXywgX19MSU5FX18pOyByZXR1cm4gKGIpOyB9Ci0jZGVmaW5lIElGTlVMTENPTlQoYSkgICAgIGlmICh1bmxpa2VseSghKGEpKSkge2VycigiJXM9PU5VTEwgYXQgJXM6JWQhIiwgI2EsIF9fRklMRV9fLCBfX0xJTkVfXyk7IGNvbnRpbnVlOyB9Ci0jZGVmaW5lIElGTlVMTEdPVE8oYSxiKSAgIGlmICh1bmxpa2VseSghKGEpKSkge2VycigiJXM9PU5VTEwgYXQgJXM6JWQhIiwgI2EsIF9fRklMRV9fLCBfX0xJTkVfXyk7IGdvdG8gYjsgfQotCiBleHRlcm4gaW50IGdpZ2FzZXRfZGVidWdsZXZlbDsJLyogIm5lZWRzIiBjYXN0IHRvIChlbnVtIGRlYnVnbGV2ZWwpICovCiAKLS8qIGFueSBjb21iaW5hdGlvbiBvZiB0aGVzZSBjYW4gYmUgZ2l2ZW4gd2l0aCB0aGUgJ2RlYnVnPScgcGFyYW1ldGVyIHRvIGluc21vZCwgZS5nLgotICogJ2luc21vZCB1c2JfZ2lnYXNldC5vIGRlYnVnPTB4MmMnIHdpbGwgc2V0IERFQlVHX09QRU4sIERFQlVHX0NNRCBhbmQgREVCVUdfSU5UUi4gKi8KLWVudW0gZGVidWdsZXZlbCB7IC8qIHVwIHRvIDI0IGJpdHMgKGF0b21pY190KSAqLworLyogYW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlIGNhbiBiZSBnaXZlbiB3aXRoIHRoZSAnZGVidWc9JyBwYXJhbWV0ZXIgdG8gaW5zbW9kLAorICogZS5nLiAnaW5zbW9kIHVzYl9naWdhc2V0Lm8gZGVidWc9MHgyYycgd2lsbCBzZXQgREVCVUdfT1BFTiwgREVCVUdfQ01EIGFuZAorICogREVCVUdfSU5UUi4KKyAqLworZW51bSBkZWJ1Z2xldmVsIHsKIAlERUJVR19SRUcJICA9IDB4MDAwMiwgLyogc2VyaWFsIHBvcnQgSS9PIHJlZ2lzdGVyIG9wZXJhdGlvbnMgKi8KIAlERUJVR19PUEVOCSAgPSAweDAwMDQsIC8qIG9wZW4vY2xvc2Ugc2VyaWFsIHBvcnQgKi8KIAlERUJVR19JTlRSCSAgPSAweDAwMDgsIC8qIGludGVycnVwdCBwcm9jZXNzaW5nICovCi0JREVCVUdfSU5UUl9EVU1QICAgPSAweDAwMTAsIC8qIEFjdGl2YXRpbmcgaGV4ZHVtcCBkZWJ1ZyBvdXRwdXQgb24gaW50ZXJydXB0Ci0JCQkJICAgICAgcmVxdWVzdHMsIG5vdCBhdmFpbGFibGUgYXMgcnVuLXRpbWUgb3B0aW9uICovCisJREVCVUdfSU5UUl9EVU1QCSAgPSAweDAwMTAsIC8qIEFjdGl2YXRpbmcgaGV4ZHVtcCBkZWJ1ZyBvdXRwdXQgb24KKwkJCQkgICAgICAgaW50ZXJydXB0IHJlcXVlc3RzLCBub3QgYXZhaWxhYmxlIGFzCisJCQkJICAgICAgIHJ1bi10aW1lIG9wdGlvbiAqLwogCURFQlVHX0NNRAkgID0gMHgwMDAyMCwgLyogc2VudC9yZWNlaXZlZCBMTCBjb21tYW5kcyAqLwogCURFQlVHX1NUUkVBTQkgID0gMHgwMDA0MCwgLyogYXBwbGljYXRpb24gZGF0YSBzdHJlYW0gSS9PIGV2ZW50cyAqLwogCURFQlVHX1NUUkVBTV9EVU1QID0gMHgwMDA4MCwgLyogYXBwbGljYXRpb24gZGF0YSBzdHJlYW0gY29udGVudCAqLwogCURFQlVHX0xMREFUQQkgID0gMHgwMDEwMCwgLyogc2VudC9yZWNlaXZlZCBMTCBkYXRhICovCi0JREVCVUdfSU5UUl8wCSAgPSAweDAwMjAwLCAvKiBzZXJpYWwgcG9ydCBvdXRwdXQgaW50ZXJydXB0IHByb2Nlc3NpbmcgKi8KKwlERUJVR19JTlRSXzAJICA9IDB4MDAyMDAsIC8qIHNlcmlhbCBwb3J0IGludGVycnVwdCBwcm9jZXNzaW5nICovCiAJREVCVUdfRFJJVkVSCSAgPSAweDAwNDAwLCAvKiBkcml2ZXIgc3RydWN0dXJlICovCiAJREVCVUdfSERMQwkgID0gMHgwMDgwMCwgLyogTTEweCBIRExDIHByb2Nlc3NpbmcgKi8KIAlERUJVR19XUklURQkgID0gMHgwMTAwMCwgLyogTTEwNSBkYXRhIHdyaXRlICovCi0JREVCVUdfVFJBTlNDTUQgICAgPSAweDAyMDAwLCAvKkFULUNPTU1BTkRTK1JFU1BPTlNFUyovCi0JREVCVUdfTUNNRCAgICAgICAgPSAweDA0MDAwLCAvKkNPTU1BTkRTIFRIQVQgQVJFIFNFTlQgVkVSWSBPRlRFTiovCi0JREVCVUdfSU5JVAkgID0gMHgwODAwMCwgLyogKGRlKWFsbG9jYXRpb24raW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzICovCisJREVCVUdfVFJBTlNDTUQJICA9IDB4MDIwMDAsIC8qIEFULUNPTU1BTkRTK1JFU1BPTlNFUyAqLworCURFQlVHX01DTUQJICA9IDB4MDQwMDAsIC8qIENPTU1BTkRTIFRIQVQgQVJFIFNFTlQgVkVSWSBPRlRFTiAqLworCURFQlVHX0lOSVQJICA9IDB4MDgwMDAsIC8qIChkZSlhbGxvY2F0aW9uK2luaXRpYWxpemF0aW9uIG9mIGRhdGEKKwkJCQkJc3RydWN0dXJlcyAqLwogCURFQlVHX0xPQ0sJICA9IDB4MTAwMDAsIC8qIHNlbWFwaG9yZSBvcGVyYXRpb25zICovCiAJREVCVUdfT1VUUFVUCSAgPSAweDIwMDAwLCAvKiBvdXRwdXQgdG8gZGV2aWNlICovCi0JREVCVUdfSVNPICAgICAgICAgPSAweDQwMDAwLCAvKiBpc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KKwlERUJVR19JU08JICA9IDB4NDAwMDAsIC8qIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLwogCURFQlVHX0lGCSAgPSAweDgwMDAwLCAvKiBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKi8KLQlERUJVR19VU0JSRVEJICA9IDB4MTAwMDAwLCAvKiBVU0IgY29tbXVuaWNhdGlvbiAoZXhjZXB0IHBheWxvYWQgZGF0YSkgKi8KLQlERUJVR19MT0NLQ01EICAgICA9IDB4MjAwMDAwLCAvKiBBVCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIHdoZW4gTVNfTE9DS0VEICovCisJREVCVUdfVVNCUkVRCSAgPSAweDEwMDAwMCwgLyogVVNCIGNvbW11bmljYXRpb24gKGV4Y2VwdCBwYXlsb2FkCisJCQkJCSBkYXRhKSAqLworCURFQlVHX0xPQ0tDTUQJICA9IDB4MjAwMDAwLCAvKiBBVCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIHdoZW4KKwkJCQkJIE1TX0xPQ0tFRCAqLwogCi0JREVCVUdfQU5ZCSAgPSAweDNmZmZmZiwgLyogcHJpbnQgbWVzc2FnZSBpZiBhbnkgb2YgdGhlIG90aGVycyBpcyBhY3RpdmF0ZWQgKi8KKwlERUJVR19BTlkJICA9IDB4M2ZmZmZmLCAvKiBwcmludCBtZXNzYWdlIGlmIGFueSBvZiB0aGUgb3RoZXJzIGlzCisJCQkJCSBhY3RpdmF0ZWQgKi8KIH07CiAKLSNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotI2RlZmluZSBERUJVR19ERUZBVUxUIChERUJVR19JTklUIHwgREVCVUdfVFJBTlNDTUQgfCBERUJVR19DTUQgfCBERUJVR19VU0JSRVEpCi0vLyNkZWZpbmUgREVCVUdfREVGQVVMVCAoREVCVUdfTE9DSyB8IERFQlVHX0lOSVQgfCBERUJVR19UUkFOU0NNRCB8IERFQlVHX0NNRCB8IERFQlVGX0lGIHwgREVCVUdfRFJJVkVSIHwgREVCVUdfT1VUUFVUIHwgREVCVUdfSU5UUikKLSNlbHNlCi0jZGVmaW5lIERFQlVHX0RFRkFVTFQgMAorLyogbWlzc2luZyBmcm9tIGxpbnV4L2RldmljZS5oIC4uLiAqLworI2lmbmRlZiBkZXZfbm90aWNlCisjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfcHJpbnRrKEtFUk5fTk9USUNFICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogI2VuZGlmCiAKLS8qIHJlZGVmaW5lIHN5c2xvZyBtYWNyb3MgdG8gcHJlcGVuZCBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIGVudGlyZSBzb3VyY2UgcGF0aCAqLwotLyogVGhlIHNwYWNlIGJlZm9yZSB0aGUgY29tbWEgaW4gIiwgIyMiIGlzIG5lZWRlZCBieSBnY2MgMi45NSAqLwotI3VuZGVmIGluZm8KLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0ICJcbiIsIFRISVNfTU9EVUxFID8gVEhJU19NT0RVTEUtPm5hbWUgOiAiZ2lnYXNldF9odyIgLCAjIyBhcmcpCi0KLSN1bmRlZiBub3RpY2UKLSNkZWZpbmUgbm90aWNlKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKQotCi0jdW5kZWYgd2FybgotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQgIlxuIiwgVEhJU19NT0RVTEUgPyBUSElTX01PRFVMRS0+bmFtZSA6ICJnaWdhc2V0X2h3IiAsICMjIGFyZykKLQorLyogS2VybmVsIG1lc3NhZ2UgbWFjcm9zIGZvciBzaXR1YXRpb25zIHdoZXJlIGRldl9wcmludGsgYW5kIGZyaWVuZHMgY2Fubm90IGJlCisgKiB1c2VkIGZvciBsYWNrIG9mIHJlbGlhYmxlIGFjY2VzcyB0byBhIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBsaW51eC91c2IuaCBhbHJlYWR5IGNvbnRhaW5zIHRoZXNlIGJ1dCBpbiBhbiBvYnNvbGV0ZSBmb3JtIHdoaWNoIGNsdXR0ZXJzCisgKiB0aGUgbG9nIG5lZWRsZXNzbHksIGFuZCBhY2NvcmRpbmcgdG8gdGhlIFVTQiBtYWludGFpbmVyIHRob3NlIHNob3VsZCBiZQorICogcmVtb3ZlZCByYXRoZXIgdGhhbiBmaXhlZCBhbnl3YXkuCisgKi8KICN1bmRlZiBlcnIKLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKQorI3VuZGVmIGluZm8KKyN1bmRlZiB3YXJuCisjdW5kZWYgbm90aWNlCiAKLSN1bmRlZiBkYmcKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUgIjogIiBcCisJZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIG5vdGljZShmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fTk9USUNFIEtCVUlMRF9NT0ROQU1FICI6ICIgXAorCWZvcm1hdCAiXG4iICwgIyMgYXJnKQorCiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKLSNkZWZpbmUgZGJnKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAodW5saWtlbHkoKChlbnVtIGRlYnVnbGV2ZWwpZ2lnYXNldF9kZWJ1Z2xldmVsKSAmIChsZXZlbCkpKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iLCBUSElTX01PRFVMRSA/IFRISVNfTU9EVUxFLT5uYW1lIDogImdpZ2FzZXRfaHciICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBnaWdfZGJnKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoKChlbnVtIGRlYnVnbGV2ZWwpZ2lnYXNldF9kZWJ1Z2xldmVsKSAmIChsZXZlbCkpKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiAiIGZvcm1hdCAiXG4iLCBcCisJCQkgICAgICAgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHX0RFRkFVTFQgKERFQlVHX1RSQU5TQ01EIHwgREVCVUdfQ01EIHwgREVCVUdfVVNCUkVRKQorCiAjZWxzZQotI2RlZmluZSBkYmcobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKworI2RlZmluZSBnaWdfZGJnKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHX0RFRkFVTFQgMAorCiAjZW5kaWYKIAogdm9pZCBnaWdhc2V0X2RiZ19idWZmZXIoZW51bSBkZWJ1Z2xldmVsIGxldmVsLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBmcm9tX3VzZXIpOworCQkJc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKTsKIAogLyogY29ubmVjdGlvbiBzdGF0ZSAqLwogI2RlZmluZSBaU0FVX05PTkUJCQkwCkBAIC0xNDgsMTMgKzE2NSwxNCBAQAogI2RlZmluZSBaU0FVX1VOS05PV04JCQktMQogCiAvKiBVU0IgY29udHJvbCB0cmFuc2ZlciByZXF1ZXN0cyAqLwotI2RlZmluZSBPVVRfVkVORE9SX1JFUQkJCShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCkKLSNkZWZpbmUgSU5fVkVORE9SX1JFUQkJCShVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQorI2RlZmluZSBPVVRfVkVORE9SX1JFUQkoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCisjZGVmaW5lIElOX1ZFTkRPUl9SRVEJKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCiAKIC8qIGludC1pbi1ldmVudHMgMzA3MCAqLwogI2RlZmluZSBIRF9CMV9GTE9XX0NPTlRST0wJCTB4ODAKICNkZWZpbmUgSERfQjJfRkxPV19DT05UUk9MCQkweDgxCi0jZGVmaW5lIEhEX1JFQ0VJVkVBVERBVEFfQUNLCQkoMHgzNSkJCS8vIDMwNzAJCS8vIGF0dDogSERfUkVDRUlWRT4+QVQ8PERBVEFfQUNLCisjZGVmaW5lIEhEX1JFQ0VJVkVBVERBVEFfQUNLCQkoMHgzNSkJCS8vIDMwNzAKKwkJCQkJCS8vIGF0dDogSERfUkVDRUlWRT4+QVQ8PERBVEFfQUNLCiAjZGVmaW5lIEhEX1JFQURZX1NFTkRfQVREQVRBCQkoMHgzNikJCS8vIDMwNzAKICNkZWZpbmUgSERfT1BFTl9BVENIQU5ORUxfQUNLCQkoMHgzNykJCS8vIDMwNzAKICNkZWZpbmUgSERfQ0xPU0VfQVRDSEFOTkVMX0FDSwkJKDB4MzgpCQkvLyAzMDcwCkBAIC0xODEsMTcgKzE5OSwxOCBAQAogI2RlZmluZQlIRF9DTE9TRV9BVENIQU5ORUwJCSgweDI5KQkJLy8gMzA3MAogCiAvKiBVU0IgZnJhbWVzIGZvciBpc29jaHJvbm91cyB0cmFuc2ZlciAqLwotI2RlZmluZSBCQVNfRlJBTUVUSU1FCTEJCS8qIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBmcmFtZXMgKi8KLSNkZWZpbmUgQkFTX05VTUZSQU1FUwk4CQkvKiBudW1iZXIgb2YgZnJhbWVzIHBlciBVUkIgKi8KLSNkZWZpbmUgQkFTX01BWEZSQU1FCTE2CQkvKiBhbGxvY2F0ZWQgYnl0ZXMgcGVyIGZyYW1lICovCi0jZGVmaW5lIEJBU19OT1JNRlJBTUUJOAkJLyogc2VuZCBzaXplIHdpdGhvdXQgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIEJBU19ISUdIRlJBTUUJMTAJCS8qICIgICAgIiAgICB3aXRoIHBvc2l0aXZlIGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBCQVNfTE9XRlJBTUUJNQkJLyogIiAgICAiICAgIHdpdGggbmVnYXRpdmUgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIEJBU19DT1JSRlJBTUVTCTQJCS8qIGZsb3cgY29udHJvbCBtdWx0aXBsaWNhdG9yICovCisjZGVmaW5lIEJBU19GUkFNRVRJTUUJMQkvKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gZnJhbWVzICovCisjZGVmaW5lIEJBU19OVU1GUkFNRVMJOAkvKiBudW1iZXIgb2YgZnJhbWVzIHBlciBVUkIgKi8KKyNkZWZpbmUgQkFTX01BWEZSQU1FCTE2CS8qIGFsbG9jYXRlZCBieXRlcyBwZXIgZnJhbWUgKi8KKyNkZWZpbmUgQkFTX05PUk1GUkFNRQk4CS8qIHNlbmQgc2l6ZSB3aXRob3V0IGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCQVNfSElHSEZSQU1FCTEwCS8qICIgICAgIiAgICB3aXRoIHBvc2l0aXZlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCQVNfTE9XRlJBTUUJNQkvKiAiICAgICIgICAgd2l0aCBuZWdhdGl2ZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkFTX0NPUlJGUkFNRVMJNAkvKiBmbG93IGNvbnRyb2wgbXVsdGlwbGljYXRvciAqLwogCi0jZGVmaW5lIEJBU19JTkJVRlNJWkUJKEJBU19NQVhGUkFNRSAqIEJBU19OVU1GUkFNRVMpIC8qIHNpemUgb2YgaXNvY2hyb25vdXMgaW5wdXQgYnVmZmVyIHBlciBVUkIgKi8KLSNkZWZpbmUgQkFTX09VVEJVRlNJWkUJNDA5NgkJLyogc2l6ZSBvZiBjb21tb24gaXNvY2hyb25vdXMgb3V0cHV0IGJ1ZmZlciAqLwotI2RlZmluZSBCQVNfT1VUQlVGUEFECUJBU19NQVhGUkFNRQkvKiBzaXplIG9mIHBhZCBhcmVhIGZvciBpc29jaHJvbm91cyBvdXRwdXQgYnVmZmVyICovCisjZGVmaW5lIEJBU19JTkJVRlNJWkUJKEJBU19NQVhGUkFNRSAqIEJBU19OVU1GUkFNRVMpCisJCQkJCS8qIHNpemUgb2YgaXNvYyBpbiBidWYgcGVyIFVSQiAqLworI2RlZmluZSBCQVNfT1VUQlVGU0laRQk0MDk2CQkvKiBzaXplIG9mIGNvbW1vbiBpc29jIG91dCBidWZmZXIgKi8KKyNkZWZpbmUgQkFTX09VVEJVRlBBRAlCQVNfTUFYRlJBTUUJLyogc2l6ZSBvZiBwYWQgYXJlYSBmb3IgaXNvYyBvdXQgYnVmICovCiAKICNkZWZpbmUgQkFTX0lOVVJCUwkzCiAjZGVmaW5lIEJBU19PVVRVUkJTCTMKQEAgLTIwNyw0MCArMjI2LDQwIEBACiAjZGVmaW5lIEFUX05VTQkJNwogCiAvKiB2YXJpYWJsZXMgaW4gc3RydWN0IGF0X3N0YXRlX3QgKi8KLSNkZWZpbmUgVkFSX1pTQVUgICAwCi0jZGVmaW5lIFZBUl9aRExFICAgMQotI2RlZmluZSBWQVJfWlZMUyAgIDIKLSNkZWZpbmUgVkFSX1pDVFAgICAzCi0jZGVmaW5lIFZBUl9OVU0gICAgNAorI2RlZmluZSBWQVJfWlNBVQkwCisjZGVmaW5lIFZBUl9aRExFCTEKKyNkZWZpbmUgVkFSX1pWTFMJMgorI2RlZmluZSBWQVJfWkNUUAkzCisjZGVmaW5lIFZBUl9OVU0JCTQKIAotI2RlZmluZSBTVFJfTk1CUiAgIDAKLSNkZWZpbmUgU1RSX1pDUE4gICAxCi0jZGVmaW5lIFNUUl9aQ09OICAgMgotI2RlZmluZSBTVFJfWkJDICAgIDMKLSNkZWZpbmUgU1RSX1pITEMgICA0Ci0jZGVmaW5lIFNUUl9OVU0gICAgNQorI2RlZmluZSBTVFJfTk1CUgkwCisjZGVmaW5lIFNUUl9aQ1BOCTEKKyNkZWZpbmUgU1RSX1pDT04JMgorI2RlZmluZSBTVFJfWkJDCQkzCisjZGVmaW5lIFNUUl9aSExDCTQKKyNkZWZpbmUgU1RSX05VTQkJNQogCi0jZGVmaW5lIEVWX1RJTUVPVVQgICAgICAtMTA1Ci0jZGVmaW5lIEVWX0lGX1ZFUiAgICAgICAtMTA2Ci0jZGVmaW5lIEVWX1BST0NfQ0lETU9ERSAtMTA3Ci0jZGVmaW5lIEVWX1NIVVRET1dOICAgICAtMTA4Ci0jZGVmaW5lIEVWX1NUQVJUICAgICAgICAtMTEwCi0jZGVmaW5lIEVWX1NUT1AgICAgICAgICAtMTExCi0jZGVmaW5lIEVWX0lGX0xPQ0sgICAgICAtMTEyCi0jZGVmaW5lIEVWX1BST1RPX0wyICAgICAtMTEzCi0jZGVmaW5lIEVWX0FDQ0VQVCAgICAgICAtMTE0Ci0jZGVmaW5lIEVWX0RJQUwgICAgICAgICAtMTE1Ci0jZGVmaW5lIEVWX0hVUCAgICAgICAgICAtMTE2Ci0jZGVmaW5lIEVWX0JDX09QRU4gICAgICAtMTE3Ci0jZGVmaW5lIEVWX0JDX0NMT1NFRCAgICAtMTE4CisjZGVmaW5lIEVWX1RJTUVPVVQJLTEwNQorI2RlZmluZSBFVl9JRl9WRVIJLTEwNgorI2RlZmluZSBFVl9QUk9DX0NJRE1PREUJLTEwNworI2RlZmluZSBFVl9TSFVURE9XTgktMTA4CisjZGVmaW5lIEVWX1NUQVJUCS0xMTAKKyNkZWZpbmUgRVZfU1RPUAkJLTExMQorI2RlZmluZSBFVl9JRl9MT0NLCS0xMTIKKyNkZWZpbmUgRVZfUFJPVE9fTDIJLTExMworI2RlZmluZSBFVl9BQ0NFUFQJLTExNAorI2RlZmluZSBFVl9ESUFMCQktMTE1CisjZGVmaW5lIEVWX0hVUAkJLTExNgorI2RlZmluZSBFVl9CQ19PUEVOCS0xMTcKKyNkZWZpbmUgRVZfQkNfQ0xPU0VECS0xMTgKIAogLyogaW5wdXQgc3RhdGUgKi8KLSNkZWZpbmUgSU5TX2NvbW1hbmQgICAgIDB4MDAwMQotI2RlZmluZSBJTlNfRExFX2NoYXIgICAgMHgwMDAyCi0jZGVmaW5lIElOU19ieXRlX3N0dWZmICAweDAwMDQKLSNkZWZpbmUgSU5TX2hhdmVfZGF0YSAgIDB4MDAwOAotI2RlZmluZSBJTlNfc2tpcF9mcmFtZSAgMHgwMDEwCi0jZGVmaW5lIElOU19ETEVfY29tbWFuZCAweDAwMjAKKyNkZWZpbmUgSU5TX2NvbW1hbmQJMHgwMDAxCisjZGVmaW5lIElOU19ETEVfY2hhcgkweDAwMDIKKyNkZWZpbmUgSU5TX2J5dGVfc3R1ZmYJMHgwMDA0CisjZGVmaW5lIElOU19oYXZlX2RhdGEJMHgwMDA4CisjZGVmaW5lIElOU19za2lwX2ZyYW1lCTB4MDAxMAorI2RlZmluZSBJTlNfRExFX2NvbW1hbmQJMHgwMDIwCiAjZGVmaW5lIElOU19mbGFnX2h1bnQJMHgwMDQwCiAKIC8qIGNoYW5uZWwgc3RhdGUgKi8KQEAgLTI0OCwyNyArMjY3LDI3IEBACiAjZGVmaW5lIENIU19CX1VQCTB4MDIKICNkZWZpbmUgQ0hTX05PVElGWV9MTAkweDA0CiAKLSNkZWZpbmUgSUNBTExfUkVKRUNUICAwCi0jZGVmaW5lIElDQUxMX0FDQ0VQVCAgMQotI2RlZmluZSBJQ0FMTF9JR05PUkUgIDIKKyNkZWZpbmUgSUNBTExfUkVKRUNUCTAKKyNkZWZpbmUgSUNBTExfQUNDRVBUCTEKKyNkZWZpbmUgSUNBTExfSUdOT1JFCTIKIAogLyogZGV2aWNlIHN0YXRlICovCi0jZGVmaW5lIE1TX1VOSU5JVElBTElaRUQgICAgICAgIDAKLSNkZWZpbmUgTVNfSU5JVCAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNU19MT0NLRUQgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1TX1NIVVRET1dOICAgICAgICAgICAgIDMKLSNkZWZpbmUgTVNfUkVDT1ZFUiAgICAgICAgICAgICAgNAotI2RlZmluZSBNU19SRUFEWSAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1TX1VOSU5JVElBTElaRUQJMAorI2RlZmluZSBNU19JTklUCQkJMQorI2RlZmluZSBNU19MT0NLRUQJCTIKKyNkZWZpbmUgTVNfU0hVVERPV04JCTMKKyNkZWZpbmUgTVNfUkVDT1ZFUgkJNAorI2RlZmluZSBNU19SRUFEWQkJNQogCiAvKiBtb2RlICovCi0jZGVmaW5lIE1fVU5LTk9XTiAgICAgICAwCi0jZGVmaW5lIE1fQ09ORklHICAgICAgICAxCi0jZGVmaW5lIE1fVU5JTU9ERU0gICAgICAyCi0jZGVmaW5lIE1fQ0lEICAgICAgICAgICAzCisjZGVmaW5lIE1fVU5LTk9XTgkwCisjZGVmaW5lIE1fQ09ORklHCTEKKyNkZWZpbmUgTV9VTklNT0RFTQkyCisjZGVmaW5lIE1fQ0lECQkzCiAKIC8qIHN0YXJ0IG1vZGUgKi8KLSNkZWZpbmUgU01fTE9DS0VEICAgICAgIDAKLSNkZWZpbmUgU01fSVNETiAgICAgICAgIDEgLyogZGVmYXVsdCAqLworI2RlZmluZSBTTV9MT0NLRUQJMAorI2RlZmluZSBTTV9JU0ROCQkxIC8qIGRlZmF1bHQgKi8KIAogc3RydWN0IGdpZ2FzZXRfb3BzOwogc3RydWN0IGdpZ2FzZXRfZHJpdmVyOwpAQCAtMjgzLDI3ICszMDIsMjYgQEAKIHN0cnVjdCBiYXNfYmNfc3RhdGU7CiAKIHN0cnVjdCByZXBseV90IHsKLQlpbnQJcmVzcF9jb2RlOyAgICAgIC8qIFJTUF9YWFhYICovCi0JaW50CW1pbl9Db25TdGF0ZTsgICAvKiA8MCA9PiBpZ25vcmUgKi8KLQlpbnQJbWF4X0NvblN0YXRlOyAgIC8qIDwwID0+IGlnbm9yZSAqLwotCWludAlwYXJhbWV0ZXI7ICAgICAgLyogZS5nLiBaU0FVX1hYWFggPDA6IGlnbm9yZSovCi0JaW50CW5ld19Db25TdGF0ZTsgICAvKiA8MCA9PiBpZ25vcmUgKi8KLQlpbnQJdGltZW91dDsgICAgICAgIC8qID4wID0+ICpIWjsgPD0wID0+IFRPVVRfWFhYWCovCi0JaW50CWFjdGlvbltNQVhBQ1RdOyAvKiBBQ1RfWFhYWCAqLwotCWNoYXIgKmNvbW1hbmQ7ICAgICAgICAvKiBOVUxMPT1ub25lICovCisJaW50CXJlc3BfY29kZTsJLyogUlNQX1hYWFggKi8KKwlpbnQJbWluX0NvblN0YXRlOwkvKiA8MCA9PiBpZ25vcmUgKi8KKwlpbnQJbWF4X0NvblN0YXRlOwkvKiA8MCA9PiBpZ25vcmUgKi8KKwlpbnQJcGFyYW1ldGVyOwkvKiBlLmcuIFpTQVVfWFhYWCA8MDogaWdub3JlKi8KKwlpbnQJbmV3X0NvblN0YXRlOwkvKiA8MCA9PiBpZ25vcmUgKi8KKwlpbnQJdGltZW91dDsJLyogPjAgPT4gKkhaOyA8PTAgPT4gVE9VVF9YWFhYKi8KKwlpbnQJYWN0aW9uW01BWEFDVF07CS8qIEFDVF9YWFhYICovCisJY2hhcgkqY29tbWFuZDsJLyogTlVMTD09bm9uZSAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCByZXBseV90IGdpZ2FzZXRfdGFiX2NpZF9tMTB4W107CiBleHRlcm4gc3RydWN0IHJlcGx5X3QgZ2lnYXNldF90YWJfbm9jaWRfbTEweFtdOwogCiBzdHJ1Y3QgaW5idWZfdCB7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgKnJjdmJ1ZjsgICAgICAgICAgICAgICAgLyogdXNiLWdpZ2FzZXQgcmVjZWl2ZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCQkqcmN2YnVmOwkvKiB1c2ItZ2lnYXNldCByZWNlaXZlIGJ1ZmZlciAqLwogCXN0cnVjdCBiY19zdGF0ZQkJKmJjczsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKLQlpbnQgaW5wdXRzdGF0ZTsKLQotCWF0b21pY190IGhlYWQsIHRhaWw7Ci0JdW5zaWduZWQgY2hhciBkYXRhW1JCVUZTSVpFXTsKKwlzdHJ1Y3QgY2FyZHN0YXRlCSpjczsKKwlpbnQJCQlpbnB1dHN0YXRlOworCWF0b21pY190CQloZWFkLCB0YWlsOworCXVuc2lnbmVkIGNoYXIJCWRhdGFbUkJVRlNJWkVdOwogfTsKIAogLyogaXNvY2hyb25vdXMgd3JpdGUgYnVmZmVyIHN0cnVjdHVyZQpAQCAtMzE5LDE2ICszMzcsOSBAQAogICogICBpZiB3cml0ZXNlbSA8PSAwLCBkYXRhW3dyaXRlLi5yZWFkLTFdIGlzIGN1cnJlbnRseSBiZWluZyB3cml0dGVuIHRvCiAgKiAtIGlkbGUgY29udGFpbnMgdGhlIGJ5dGUgdmFsdWUgdG8gcmVwZWF0IHdoZW4gdGhlIGVuZCBvZiB2YWxpZCBkYXRhIGlzCiAgKiAgIHJlYWNoZWQ7IGlmIG5leHRyZWFkPT13cml0ZSAoYnVmZmVyIGNvbnRhaW5zIG5vIGRhdGEgdG8gc2VuZCksIGVpdGhlciB0aGUKLSAqICAgQkFTX09VVEJVRlBBRCBieXRlcyBpbW1lZGlhdGVseSBiZWZvcmUgZGF0YVt3cml0ZV0gKGlmIHdyaXRlPj1CQVNfT1VUQlVGUEFEKQotICogICBvciB0aG9zZSBvZiB0aGUgcGFkIGFyZWEgKGlmIHdyaXRlPEJBU19PVVRCVUZQQUQpIGFyZSBhbHNvIGZpbGxlZCB3aXRoIHRoYXQKLSAqICAgdmFsdWUKLSAqIC0gb3B0aW9uYWxseSwgdGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIG9uIHRoZSBidWZmZXIncyB1c2FnZSBjYW4gYmUgY29sbGVjdGVkOgotICogICBtYXhmaWxsOiBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvY2N1cGllZAotICogICBpZGxlZmlsbHM6IG51bWJlciBvZiB0aW1lcyBhIGZyYW1lIG9mIGlkbGUgYnl0ZXMgaXMgcHJlcGFyZWQKLSAqICAgZW1wdHlnZXRzOiBudW1iZXIgb2YgdGltZXMgdGhlIGJ1ZmZlciB3YXMgZW1wdHkgd2hlbiBhIGRhdGEgZnJhbWUgd2FzIHJlcXVlc3RlZAotICogICBiYWNrdG9iYWNrOiBudW1iZXIgb2YgdGltZXMgdHdvIGRhdGEgcGFja2V0cyB3ZXJlIGVudGVyZWQgaW50byB0aGUgYnVmZmVyCi0gKiAgICB3aXRob3V0IGludGVydmVuaW5nIGlkbGUgZmxhZ3MKLSAqICAgbmFrZWRiYWNrOiBzZXQgaWYgbm8gaWRsZSBmbGFncyBoYXZlIGJlZW4gaW5zZXJ0ZWQgc2luY2UgdGhlIGxhc3QgZGF0YSBwYWNrZXQKKyAqICAgQkFTX09VVEJVRlBBRCBieXRlcyBpbW1lZGlhdGVseSBiZWZvcmUgZGF0YVt3cml0ZV0gKGlmCisgKiAgIHdyaXRlPj1CQVNfT1VUQlVGUEFEKSBvciB0aG9zZSBvZiB0aGUgcGFkIGFyZWEgKGlmIHdyaXRlPEJBU19PVVRCVUZQQUQpCisgKiAgIGFyZSBhbHNvIGZpbGxlZCB3aXRoIHRoYXQgdmFsdWUKICAqLwogc3RydWN0IGlzb3didWZfdCB7CiAJYXRvbWljX3QJcmVhZDsKQEAgLTM1OCwzNCArMzY5LDI4IEBACiAgKiBpdCBpcyBjdXJyZW50bHkgYXNzaWduZWQgYSBCIGNoYW5uZWwKICAqLwogc3RydWN0IGF0X3N0YXRlX3QgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgd2FpdGluZzsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBnZXRzdHJpbmc7Ci0JYXRvbWljX3QJCXRpbWVyX2luZGV4OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlpbnQJCQl3YWl0aW5nOworCWludAkJCWdldHN0cmluZzsKKwl1bnNpZ25lZAkJdGltZXJfaW5kZXg7CiAJdW5zaWduZWQgbG9uZwkJdGltZXJfZXhwaXJlczsKIAlpbnQJCQl0aW1lcl9hY3RpdmU7Ci0JdW5zaWduZWQgaW50CQlDb25TdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGF0ZSBvZiBjb25uZWN0aW9uICovCi0Jc3RydWN0IHJlcGx5X3QgICAgICAgICAgKnJlcGx5c3RydWN0OwotCWludCAgICAgICAgICAgICAgICAgICAgIGNpZDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBpbnRfdmFyW1ZBUl9OVU1dOyAgIC8qIHNlZSBWQVJfWFhYWCAqLwotCWNoYXIgICAgICAgICAgICAgICAgICAgICpzdHJfdmFyW1NUUl9OVU1dOyAgLyogc2VlIFNUUl9YWFhYICovCi0JdW5zaWduZWQgICAgICAgICAgICAgICAgcGVuZGluZ19jb21tYW5kczsgICAvKiBzZWUgUENfWFhYWCAqLwotCWF0b21pY190ICAgICAgICAgICAgICAgIHNlcV9pbmRleDsKKwl1bnNpZ25lZCBpbnQJCUNvblN0YXRlOwkvKiBTdGF0ZSBvZiBjb25uZWN0aW9uICovCisJc3RydWN0IHJlcGx5X3QJCSpyZXBseXN0cnVjdDsKKwlpbnQJCQljaWQ7CisJaW50CQkJaW50X3ZhcltWQVJfTlVNXTsJLyogc2VlIFZBUl9YWFhYICovCisJY2hhcgkJCSpzdHJfdmFyW1NUUl9OVU1dOwkvKiBzZWUgU1RSX1hYWFggKi8KKwl1bnNpZ25lZAkJcGVuZGluZ19jb21tYW5kczsJLyogc2VlIFBDX1hYWFggKi8KKwl1bnNpZ25lZAkJc2VxX2luZGV4OwogCi0Jc3RydWN0IGNhcmRzdGF0ZSAgICAqY3M7Ci0Jc3RydWN0IGJjX3N0YXRlICAgICAgICAgKmJjczsKKwlzdHJ1Y3QgY2FyZHN0YXRlCSpjczsKKwlzdHJ1Y3QgYmNfc3RhdGUJCSpiY3M7CiB9OwogCiBzdHJ1Y3QgcmVzcF90eXBlX3QgewogCXVuc2lnbmVkIGNoYXIJKnJlc3BvbnNlOwotCWludAkJcmVzcF9jb2RlOyAgICAgICAgICAgLyogUlNQX1hYWFggKi8KLQlpbnQJCXR5cGU7ICAgICAgICAgICAgICAgIC8qIFJUX1hYWFggKi8KLX07Ci0KLXN0cnVjdCBwcm90X3NrYiB7Ci0JYXRvbWljX3QJCWVtcHR5OwotCXN0cnVjdCBzZW1hcGhvcmUJKnNlbTsKLQlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlpbnQJCXJlc3BfY29kZTsJLyogUlNQX1hYWFggKi8KKwlpbnQJCXR5cGU7CQkvKiBSVF9YWFhYICovCiB9OwogCiBzdHJ1Y3QgZXZlbnRfdCB7CkBAIC0zOTgsMjkgKzQwMywyOSBAQAogCiAvKiBUaGlzIGJ1ZmZlciBob2xkcyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZWQgQi1DaGFubmVsICovCiBzdHJ1Y3QgYmNfc3RhdGUgewotCXN0cnVjdCBza19idWZmICp0eF9za2I7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCB0cmFuc2ZlciBidWZmZXIgdG8gbW9kZW0gKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNxdWV1ZTsJICAgICAgICAgICAgICAgLyogQi1DaGFubmVsIHNlbmQgUXVldWUgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwkJLyogQ3VycmVudCB0cmFuc2ZlciBidWZmZXIgdG8gbW9kZW0gKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNxdWV1ZTsJLyogQi1DaGFubmVsIHNlbmQgUXVldWUgKi8KIAogCS8qIFZhcmlhYmxlcyBmb3IgZGVidWdnaW5nIC4uICovCi0JaW50IGNvcnJ1cHRlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgZm9yIGNvcnJ1cHRlZCBwYWNrYWdlcyAqLwotCWludCB0cmFuc19kb3duOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIG9mIHBhY2thZ2VzIChkb3duc3RyZWFtKSAqLwotCWludCB0cmFuc191cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIG9mIHBhY2thZ2VzICh1cHN0cmVhbSkgKi8KKwlpbnQgY29ycnVwdGVkOwkJCS8qIENvdW50ZXIgZm9yIGNvcnJ1cHRlZCBwYWNrYWdlcyAqLworCWludCB0cmFuc19kb3duOwkJCS8qIENvdW50ZXIgb2YgcGFja2FnZXMgKGRvd25zdHJlYW0pICovCisJaW50IHRyYW5zX3VwOwkJCS8qIENvdW50ZXIgb2YgcGFja2FnZXMgKHVwc3RyZWFtKSAqLwogCiAJc3RydWN0IGF0X3N0YXRlX3QgYXRfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyByY3ZieXRlczsKIAogCV9fdTE2IGZjczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBpbnB1dHN0YXRlOyAvKiBzZWUgSU5TX1hYWFggKi8KKwlpbnQgaW5wdXRzdGF0ZTsJCQkvKiBzZWUgSU5TX1hYWFggKi8KIAogCWludCBjaGFubmVsOwogCiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAKLQl1bnNpZ25lZCBjaHN0YXRlOwkJCS8qIGJpdG1hcCAoQ0hTXyopICovCisJdW5zaWduZWQgY2hzdGF0ZTsJCS8qIGJpdG1hcCAoQ0hTXyopICovCiAJaW50IGlnbm9yZTsKLQl1bnNpZ25lZAlwcm90bzI7CQkJLyogTGF5ZXIgMiBwcm90b2NvbCAoSVNETl9QUk9UT19MMl8qKSAqLwotCWNoYXIJCSpjb21tYW5kc1tBVF9OVU1dOyAvKiBzZWUgQVRfWFhYWCAqLworCXVuc2lnbmVkIHByb3RvMjsJCS8qIExheWVyIDIgcHJvdG9jb2wgKElTRE5fUFJPVE9fTDJfKikgKi8KKwljaGFyICpjb21tYW5kc1tBVF9OVU1dOwkJLyogc2VlIEFUX1hYWFggKi8KIAogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCiAJaW50IGVtcHR5Y291bnQ7CkBAIC00MjgsMzcgKzQzMywzOSBAQAogCWludCBidXN5OwogCWludCB1c2VfY291bnQ7CiAKLQkvKiBoYXJkd2FyZSBkcml2ZXJzICovCisJLyogcHJpdmF0ZSBkYXRhIG9mIGhhcmR3YXJlIGRyaXZlcnMgKi8KIAl1bmlvbiB7Ci0JCXN0cnVjdCBzZXJfYmNfc3RhdGUgKnNlcjsJCSAvKiBwcml2YXRlIGRhdGEgb2Ygc2VyaWFsIGhhcmR3YXJlIGRyaXZlciAqLwotCQlzdHJ1Y3QgdXNiX2JjX3N0YXRlICp1c2I7CQkgLyogcHJpdmF0ZSBkYXRhIG9mIHVzYiBoYXJkd2FyZSBkcml2ZXIgKi8KLQkJc3RydWN0IGJhc19iY19zdGF0ZSAqYmFzOworCQlzdHJ1Y3Qgc2VyX2JjX3N0YXRlICpzZXI7CS8qIHNlcmlhbCBoYXJkd2FyZSBkcml2ZXIgKi8KKwkJc3RydWN0IHVzYl9iY19zdGF0ZSAqdXNiOwkvKiB1c2IgaGFyZHdhcmUgZHJpdmVyIChtMTA1KSAqLworCQlzdHJ1Y3QgYmFzX2JjX3N0YXRlICpiYXM7CS8qIHVzYiBoYXJkd2FyZSBkcml2ZXIgKGJhc2UpICovCiAJfSBodzsKIH07CiAKIHN0cnVjdCBjYXJkc3RhdGUgewogCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJpdmVyOwogCXVuc2lnbmVkIG1pbm9yX2luZGV4OworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCWNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzOwogCiAJLyogU3R1ZmYgdG8gaGFuZGxlIGNvbW11bmljYXRpb24gKi8KLQkvL3dhaXRfcXVldWVfaGVhZF90IGluaXR3YWl0OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxdWV1ZTsKIAlpbnQgd2FpdGluZzsKLQlhdG9taWNfdCBtb2RlOyAgICAgICAgICAgICAgICAgICAgICAgLyogc2VlIE1fWFhYWCAqLwotCWF0b21pY190IG1zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBzdGF0ZTogc2VlIE1TX1hYWFggKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSBjaGFuZ2VkIGJ5IHRoZSBldmVudCBsYXllciAqLworCWF0b21pY190IG1vZGU7CQkJLyogc2VlIE1fWFhYWCAqLworCWF0b21pY190IG1zdGF0ZTsJCS8qIE1vZGVtIHN0YXRlOiBzZWUgTVNfWFhYWCAqLworCQkJCQkvKiBvbmx5IGNoYW5nZWQgYnkgdGhlIGV2ZW50IGxheWVyICovCiAJaW50IGNtZF9yZXN1bHQ7CiAKIAlpbnQgY2hhbm5lbHM7Ci0Jc3RydWN0IGJjX3N0YXRlICpiY3M7ICAgICAgICAgICAgICAgIC8qIEFycmF5IG9mIHN0cnVjdCBiY19zdGF0ZSAqLworCXN0cnVjdCBiY19zdGF0ZSAqYmNzOwkJLyogQXJyYXkgb2Ygc3RydWN0IGJjX3N0YXRlICovCiAKLQlpbnQgb25lY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBhbmQgY29tbWFuZHMgdHJhbnNtaXR0ZWQgaW4gb25lIHN0cmVhbSAoTTEweCkgKi8KKwlpbnQgb25lY2hhbm5lbDsJCQkvKiBkYXRhIGFuZCBjb21tYW5kcyB0cmFuc21pdHRlZCBpbiBvbmUKKwkJCQkJICAgc3RyZWFtIChNMTB4KSAqLwogCiAJc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBhdF9zdGF0ZV90IGF0X3N0YXRlOyAgICAgICAgICAvKiBhdF9zdGF0ZV90IGZvciBjaWQgPT0gMCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdGVtcF9hdF9zdGF0ZXM7ICAgICAvKiBsaXN0IG9mIHRlbXBvcmFyeSAic3RydWN0IGF0X3N0YXRlX3QicyB3aXRob3V0IEIgY2hhbm5lbCAqLworCXN0cnVjdCBhdF9zdGF0ZV90IGF0X3N0YXRlOwkvKiBhdF9zdGF0ZV90IGZvciBjaWQgPT0gMCAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGVtcF9hdF9zdGF0ZXM7LyogbGlzdCBvZiB0ZW1wb3JhcnkgInN0cnVjdAorCQkJCQkgICBhdF9zdGF0ZV90InMgd2l0aG91dCBCIGNoYW5uZWwgKi8KIAogCXN0cnVjdCBpbmJ1Zl90ICppbmJ1ZjsKIApAQCAtNDc0LDU4ICs0ODEsNjkgQEAKIAl1bnNpZ25lZCBmd3Zlcls0XTsKIAlpbnQgZ290Znd2ZXI7CiAKLQlhdG9taWNfdCBydW5uaW5nOyAgICAgICAgICAgICAgICAgICAgLyogIT0wIGlmIGV2ZW50cyBhcmUgaGFuZGxlZCAqLwotCWF0b21pY190IGNvbm5lY3RlZDsgICAgICAgICAgICAgICAgICAvKiAhPTAgaWYgaGFyZHdhcmUgaXMgY29ubmVjdGVkICovCisJdW5zaWduZWQgcnVubmluZzsJCS8qICE9MCBpZiBldmVudHMgYXJlIGhhbmRsZWQgKi8KKwl1bnNpZ25lZCBjb25uZWN0ZWQ7CQkvKiAhPTAgaWYgaGFyZHdhcmUgaXMgY29ubmVjdGVkICovCisJdW5zaWduZWQgaXNkbl91cDsJCS8qICE9MCBhZnRlciBJU0ROX1NUQVRfUlVOICovCiAKLQlhdG9taWNfdCBjaWRtb2RlOworCXVuc2lnbmVkIGNpZG1vZGU7CiAKLQlpbnQgbXlpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBMTCAqLworCWludCBteWlkOwkJCS8qIGlkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggTEwgKi8KIAlpc2RuX2lmIGlpZjsKIAogCXN0cnVjdCByZXBseV90ICp0YWJub2NpZDsKIAlzdHJ1Y3QgcmVwbHlfdCAqdGFiY2lkOwogCWludCBjc19pbml0OwotCWludCBpZ25vcmVmcmFtZXM7ICAgICAgICAgICAgICAgICAgICAvKiBmcmFtZXMgdG8gaWdub3JlIGFmdGVyIHNldHRpbmcgdXAgdGhlIEIgY2hhbm5lbCAqLwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOyAgICAgICAgICAgICAgICAvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZTogKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBjb25uZWN0ZWQgaXMgbm90IGNoYW5nZWQsICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgaGFyZHdhcmVfdXAgaXMgbm90IGNoYW5nZWQsICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgTVN0YXRlIGlzIG5vdCBjaGFuZ2VkIHRvIG9yIGZyb20gTVNfTE9DS0VEICovCisJaW50IGlnbm9yZWZyYW1lczsJCS8qIGZyYW1lcyB0byBpZ25vcmUgYWZ0ZXIgc2V0dGluZyB1cCB0aGUKKwkJCQkJICAgQiBjaGFubmVsICovCisJc3RydWN0IG11dGV4IG11dGV4OwkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmU6CisJCQkJCSAqICAgY29ubmVjdGVkIGlzIG5vdCBjaGFuZ2VkLAorCQkJCQkgKiAgIGhhcmR3YXJlX3VwIGlzIG5vdCBjaGFuZ2VkLAorCQkJCQkgKiAgIE1TdGF0ZSBpcyBub3QgY2hhbmdlZCB0byBvciBmcm9tCisJCQkJCSAqICAgTVNfTE9DS0VEICovCiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlpbnQgcmV0cnlfY291bnQ7Ci0JaW50IGRsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICE9MCBpZiBtb2RlbSBjb21tYW5kcy9yZXNwb25zZXMgYXJlIGRsZSBlbmNvZGVkICovCi0JaW50IGN1cl9hdF9zZXE7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcXVlbmNlIG9mIEFUIGNvbW1hbmRzIGJlaW5nIHByb2Nlc3NlZCAqLwotCWludCBjdXJjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsLCB0aG9zZSBjb21tYW5kcyBhcmUgbWVhbnQgZm9yICovCi0JYXRvbWljX3QgY29tbWFuZHNfcGVuZGluZzsgICAgICAgICAgIC8qIGZsYWcocykgaW4geHh4LmNvbW1hbmRzX3BlbmRpbmcgaGF2ZSBiZWVuIHNldCAqLwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBldmVudF90YXNrbGV0OyAvKiB0YXNrbGV0IGZvciBzZXJpYWxpemluZyBBVCBjb21tYW5kcy4gU2NoZWR1bGVkCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgLT4gZm9yIG1vZGVtIHJlcG9uc2VzIChhbmQgaW5jb21taW5nIGRhdGEgZm9yIE0xMHgpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgLT4gb24gdGltZW91dAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIC0+IGFmdGVyIHNldHRpbmcgYml0cyBpbiB4eHguYXRfc3RhdGUucGVuZGluZ19jb21tYW5kCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgKGUuZy4gY29tbWFuZCBmcm9tIExMKSAqLwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3cml0ZV90YXNrbGV0OyAvKiB0YXNrbGV0IGZvciBzZXJpYWwgb3V0cHV0Ci0JCQkJCSAgICAgICogKG5vdCB1c2VkIGluIGJhc2UgZHJpdmVyKSAqLworCWludCBkbGU7CQkJLyogIT0wIGlmIG1vZGVtIGNvbW1hbmRzL3Jlc3BvbnNlcyBhcmUKKwkJCQkJICAgZGxlIGVuY29kZWQgKi8KKwlpbnQgY3VyX2F0X3NlcTsJCQkvKiBzZXF1ZW5jZSBvZiBBVCBjb21tYW5kcyBiZWluZworCQkJCQkgICBwcm9jZXNzZWQgKi8KKwlpbnQgY3VyY2hhbm5lbDsJCQkvKiBjaGFubmVsIHRob3NlIGNvbW1hbmRzIGFyZSBtZWFudAorCQkJCQkgICBmb3IgKi8KKwlhdG9taWNfdCBjb21tYW5kc19wZW5kaW5nOwkvKiBmbGFnKHMpIGluIHh4eC5jb21tYW5kc19wZW5kaW5nIGhhdmUKKwkJCQkJICAgYmVlbiBzZXQgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfdGFza2xldDsKKwkJCQkJLyogdGFza2xldCBmb3Igc2VyaWFsaXppbmcgQVQgY29tbWFuZHMuCisJCQkJCSAqIFNjaGVkdWxlZAorCQkJCQkgKiAgIC0+IGZvciBtb2RlbSByZXBvbnNlcyAoYW5kCisJCQkJCSAqICAgICAgaW5jb21pbmcgZGF0YSBmb3IgTTEweCkKKwkJCQkJICogICAtPiBvbiB0aW1lb3V0CisJCQkJCSAqICAgLT4gYWZ0ZXIgc2V0dGluZyBiaXRzIGluCisJCQkJCSAqICAgICAgeHh4LmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZAorCQkJCQkgKiAgICAgIChlLmcuIGNvbW1hbmQgZnJvbSBMTCkgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgd3JpdGVfdGFza2xldDsKKwkJCQkJLyogdGFza2xldCBmb3Igc2VyaWFsIG91dHB1dAorCQkJCQkgKiAobm90IHVzZWQgaW4gYmFzZSBkcml2ZXIpICovCiAKIAkvKiBldmVudCBxdWV1ZSAqLwogCXN0cnVjdCBldmVudF90IGV2ZW50c1tNQVhfRVZFTlRTXTsKLQlhdG9taWNfdCBldl90YWlsLCBldl9oZWFkOworCXVuc2lnbmVkIGV2X3RhaWwsIGV2X2hlYWQ7CiAJc3BpbmxvY2tfdCBldl9sb2NrOwogCiAJLyogY3VycmVudCBtb2RlbSByZXNwb25zZSAqLwogCXVuc2lnbmVkIGNoYXIgcmVzcGRhdGFbTUFYX1JFU1BfU0laRV07CiAJdW5zaWduZWQgY2J5dGVzOwogCi0JLyogaGFyZHdhcmUgZHJpdmVycyAqLworCS8qIHByaXZhdGUgZGF0YSBvZiBoYXJkd2FyZSBkcml2ZXJzICovCiAJdW5pb24gewotCQlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdXNiOyAvKiBwcml2YXRlIGRhdGEgb2YgVVNCIGhhcmR3YXJlIGRyaXZlciAqLwotCQlzdHJ1Y3Qgc2VyX2NhcmRzdGF0ZSAqc2VyOyAvKiBwcml2YXRlIGRhdGEgb2Ygc2VyaWFsIGhhcmR3YXJlIGRyaXZlciAqLwotCQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqYmFzOyAvKiBwcml2YXRlIGRhdGEgb2YgYmFzZSBoYXJkd2FyZSBkcml2ZXIgKi8KKwkJc3RydWN0IHVzYl9jYXJkc3RhdGUgKnVzYjsgLyogVVNCIGhhcmR3YXJlIGRyaXZlciAobTEwNSkgKi8KKwkJc3RydWN0IHNlcl9jYXJkc3RhdGUgKnNlcjsgLyogc2VyaWFsIGhhcmR3YXJlIGRyaXZlciAqLworCQlzdHJ1Y3QgYmFzX2NhcmRzdGF0ZSAqYmFzOyAvKiBVU0IgaGFyZHdhcmUgZHJpdmVyIChiYXNlKSAqLwogCX0gaHc7CiB9OwogCiBzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2NrcyBtaW5vciB0YWJsZXMgYW5kIGJsb2NrZWQgKi8KLQkvL3N0cnVjdCBzZW1hcGhvcmUgc2VtOyAgICAgICAgICAgICAgICAvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCXNwaW5sb2NrX3QgbG9jazsJCS8qIGxvY2tzIG1pbm9yIHRhYmxlcyBhbmQgYmxvY2tlZCAqLwogCXN0cnVjdCB0dHlfZHJpdmVyICp0dHk7CiAJdW5zaWduZWQgaGF2ZV90dHk7CiAJdW5zaWduZWQgbWlub3I7CkBAIC01NTMsMzcgKzU3MSw0MiBAQAogCXN0cnVjdCBpc293X3VyYmN0eF90CWlzb291dHVyYnNbQkFTX09VVFVSQlNdOwogCXN0cnVjdCBpc293X3VyYmN0eF90CSppc29vdXRkb25lLCAqaXNvb3V0ZnJlZSwgKmlzb291dG92Zmw7CiAJc3RydWN0IGlzb3didWZfdAkqaXNvb3V0YnVmOwotCXVuc2lnbmVkIG51bXN1YjsJCQkvKiBzdWJtaXR0ZWQgVVJCIGNvdW50ZXIgKGZvciBkaWFnbm9zdGljIG1lc3NhZ2VzIG9ubHkpICovCisJdW5zaWduZWQgbnVtc3ViOwkJLyogc3VibWl0dGVkIFVSQiBjb3VudGVyCisJCQkJCSAgIChmb3IgZGlhZ25vc3RpYyBtZXNzYWdlcyBvbmx5KSAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlzZW50X3Rhc2tsZXQ7CiAKIAkvKiBpc29jaHJvbm91cyBpbnB1dCBzdGF0ZSAqLwogCXNwaW5sb2NrX3QgaXNvaW5sb2NrOwogCXN0cnVjdCB1cmIgKmlzb2ludXJic1tCQVNfSU5VUkJTXTsKIAl1bnNpZ25lZCBjaGFyIGlzb2luYnVmW0JBU19JTkJVRlNJWkUgKiBCQVNfSU5VUkJTXTsKLQlzdHJ1Y3QgdXJiICppc29pbmRvbmU7CSAgICAgICAgICAgICAgICAvKiBjb21wbGV0ZWQgaXNvYyByZWFkIFVSQiAqLwotCWludCBsb3N0c3RhdHVzOwkJCQkvKiBzdGF0dXMgb2YgZHJvcHBlZCBVUkIgKi8KLQl1bnNpZ25lZCBpc29pbmxvc3Q7CQkJLyogbnVtYmVyIG9mIGJ5dGVzIGxvc3QgKi8KLQkvKiBzdGF0ZSBvZiBiaXQgdW5zdHVmZmluZyBhbGdvcml0aG0gKGluIGFkZGl0aW9uIHRvIEJDX3N0YXRlLmlucHV0c3RhdGUpICovCi0JdW5zaWduZWQgc2VxbGVuOwkJCS8qIG51bWJlciBvZiAnMScgYml0cyBub3QgeWV0IHVuc3R1ZmZlZCAqLwotCXVuc2lnbmVkIGluYnl0ZSwgaW5iaXRzOwkJLyogY29sbGVjdGVkIGJpdHMgZm9yIG5leHQgYnl0ZSAqLworCXN0cnVjdCB1cmIgKmlzb2luZG9uZTsJCS8qIGNvbXBsZXRlZCBpc29jIHJlYWQgVVJCICovCisJaW50IGxvc3RzdGF0dXM7CQkJLyogc3RhdHVzIG9mIGRyb3BwZWQgVVJCICovCisJdW5zaWduZWQgaXNvaW5sb3N0OwkJLyogbnVtYmVyIG9mIGJ5dGVzIGxvc3QgKi8KKwkvKiBzdGF0ZSBvZiBiaXQgdW5zdHVmZmluZyBhbGdvcml0aG0KKwkgICAoaW4gYWRkaXRpb24gdG8gQkNfc3RhdGUuaW5wdXRzdGF0ZSkgKi8KKwl1bnNpZ25lZCBzZXFsZW47CQkvKiBudW1iZXIgb2YgJzEnIGJpdHMgbm90IHlldAorCQkJCQkgICB1bnN0dWZmZWQgKi8KKwl1bnNpZ25lZCBpbmJ5dGUsIGluYml0czsJLyogY29sbGVjdGVkIGJpdHMgZm9yIG5leHQgYnl0ZSAqLwogCS8qIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBnb29kYnl0ZXM7CQkJLyogYnl0ZXMgY29ycmVjdGx5IHJlY2VpdmVkICovCi0JdW5zaWduZWQgYWxpZ25lcnJzOwkJCS8qIGZyYW1lcyB3aXRoIGluY29tcGxldGUgYnl0ZSBhdCBlbmQgKi8KLQl1bnNpZ25lZCBmY3NlcnJzOwkJCS8qIEZDUyBlcnJvcnMgKi8KLQl1bnNpZ25lZCBmcmFtZWVycnM7CQkJLyogZnJhbWluZyBlcnJvcnMgKi8KLQl1bnNpZ25lZCBnaWFudHM7CQkJLyogbG9uZyBmcmFtZXMgKi8KLQl1bnNpZ25lZCBydW50czsJCQkJLyogc2hvcnQgZnJhbWVzICovCi0JdW5zaWduZWQgYWJvcnRzOwkJCS8qIEhETEMgYWJvcnRzICovCi0JdW5zaWduZWQgc2hhcmVkMHM7CQkJLyogJzAnIGJpdHMgc2hhcmVkIGJldHdlZW4gZmxhZ3MgKi8KLQl1bnNpZ25lZCBzdG9sZW4wczsJCQkvKiAnMCcgc3R1ZmYgYml0cyBhbHNvIHNlcnZpbmcgYXMgbGVhZGluZyBmbGFnIGJpdHMgKi8KKwl1bnNpZ25lZCBnb29kYnl0ZXM7CQkvKiBieXRlcyBjb3JyZWN0bHkgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBhbGlnbmVycnM7CQkvKiBmcmFtZXMgd2l0aCBpbmNvbXBsZXRlIGJ5dGUgYXQgZW5kICovCisJdW5zaWduZWQgZmNzZXJyczsJCS8qIEZDUyBlcnJvcnMgKi8KKwl1bnNpZ25lZCBmcmFtZWVycnM7CQkvKiBmcmFtaW5nIGVycm9ycyAqLworCXVuc2lnbmVkIGdpYW50czsJCS8qIGxvbmcgZnJhbWVzICovCisJdW5zaWduZWQgcnVudHM7CQkJLyogc2hvcnQgZnJhbWVzICovCisJdW5zaWduZWQgYWJvcnRzOwkJLyogSERMQyBhYm9ydHMgKi8KKwl1bnNpZ25lZCBzaGFyZWQwczsJCS8qICcwJyBiaXRzIHNoYXJlZCBiZXR3ZWVuIGZsYWdzICovCisJdW5zaWduZWQgc3RvbGVuMHM7CQkvKiAnMCcgc3R1ZmYgYml0cyBhbHNvIHNlcnZpbmcgYXMKKwkJCQkJICAgbGVhZGluZyBmbGFnIGJpdHMgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcmN2ZF90YXNrbGV0OwogfTsKIAogc3RydWN0IGdpZ2FzZXRfb3BzIHsKLQkvKiBDYWxsZWQgZnJvbSBldi1sYXllci5jL2ludGVyZmFjZS5jIGZvciBzZW5kaW5nIEFUIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKi8KKwkvKiBDYWxsZWQgZnJvbSBldi1sYXllci5jL2ludGVyZmFjZS5jIGZvciBzZW5kaW5nIEFUIGNvbW1hbmRzIHRvIHRoZQorCSAgIGRldmljZSAqLwogCWludCAoKndyaXRlX2NtZCkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0JICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0JICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCk7CisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KTsKIAogCS8qIENhbGxlZCBmcm9tIGludGVyZmFjZS5jIGZvciBhZGRpdGlvbmFsIGRldmljZSBjb250cm9sICovCiAJaW50ICgqd3JpdGVfcm9vbSkoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwpAQCAtNjA0LDcgKzYyNyw3IEBACiAJLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfZnJlZWNzKCkgZm9yIGZyZWVpbmcgYmNzLT5ody54eHggKi8KIAlpbnQgKCpmcmVlYmNzaHcpKHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIAotCS8qIENhbGxlZCBieSBnaWdhc2V0X3N0b3AoKSBvciBnaWdhc2V0X2JjaGFubmVsX2Rvd24oKSBmb3IgcmVzZXR0aW5nIGJjcy0+aHcueHh4ICovCisJLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfYmNoYW5uZWxfZG93bigpIGZvciByZXNldHRpbmcgYmNzLT5ody54eHggKi8KIAl2b2lkICgqcmVpbml0YmNzaHcpKHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIAogCS8qIENhbGxlZCBieSBnaWdhc2V0X2luaXRjcygpIGZvciBzZXR0aW5nIHVwIGNzLT5ody54eHggKi8KQEAgLTYxMywxMyArNjM2LDEwIEBACiAJLyogQ2FsbGVkIGJ5IGdpZ2FzZXRfZnJlZWNzKCkgZm9yIGZyZWVpbmcgY3MtPmh3Lnh4eCAqLwogCXZvaWQgKCpmcmVlY3Nodykoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogCi0JLy8vKiBDYWxsZWQgYnkgZ2lnYXNldF9zdG9wKCkgZm9yIGtpbGxpbmcgVVJCcywgc2h1dHRpbmcgZG93biB0aGUgZGV2aWNlLCAuLi4KLQkvLyAgIGhhcmR3YXJldXA6ID09MDogZG9uJ3QgdHJ5IHRvIHNodXQgZG93biB0aGUgZGV2aWNlLCBoYXJkd2FyZSBpcyByZWFsbHkgbm90IGFjY2Vzc2libGUKLQkvLwkgICAgICAgIT0wOiBoYXJkd2FyZSBzdGlsbCB1cCAqLwotCS8vdm9pZCAoKnN0b3Bodykoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBoYXJkd2FyZXVwKTsKLQotCS8qIENhbGxlZCBmcm9tIGNvbW1vbi5jL2ludGVyZmFjZS5jIGZvciBhZGRpdGlvbmFsIHNlcmlhbCBwb3J0IGNvbnRyb2wgKi8KLQlpbnQgKCpzZXRfbW9kZW1fY3RybCkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwgdW5zaWduZWQgbmV3X3N0YXRlKTsKKwkvKiBDYWxsZWQgZnJvbSBjb21tb24uYy9pbnRlcmZhY2UuYyBmb3IgYWRkaXRpb25hbCBzZXJpYWwgcG9ydAorCSAgIGNvbnRyb2wgKi8KKwlpbnQgKCpzZXRfbW9kZW1fY3RybCkoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIG5ld19zdGF0ZSk7CiAJaW50ICgqYmF1ZF9yYXRlKShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpOwogCWludCAoKnNldF9saW5lX2N0cmwpKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZyk7CiAKQEAgLTYzOSw3ICs2NTksNyBAQAogICogPERMRV9GTEFHPjogIDB4MTAKICAqIDxFVkVOVD46ICAgICAoKGEteikqIHwgKEEtWikqIHwgKDAtMTApKikrCiAgKi8KLSNkZWZpbmUgRExFX0ZMQUcgICAgICAgMHgxMAorI2RlZmluZSBETEVfRkxBRwkweDEwCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogIEZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBhc3luY2RhdGEuYwpAQCAtNjY3LDcgKzY4Nyw4IEBACiAKIC8qIENhbGxlZCBmcm9tIGJhcy1naWdhc2V0LmMgdG8gcHJvY2VzcyBhIGJsb2NrIG9mIGRhdGEKICAqIHJlY2VpdmVkIHRocm91Z2ggdGhlIGlzb2Nocm9ub3VzIGNoYW5uZWwgKi8KLXZvaWQgZ2lnYXNldF9pc29jX3JlY2VpdmUodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjb3VudCwgc3RydWN0IGJjX3N0YXRlICpiY3MpOwordm9pZCBnaWdhc2V0X2lzb2NfcmVjZWl2ZSh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNvdW50LAorCQkJICBzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiAKIC8qIENhbGxlZCBmcm9tIGJhcy1naWdhc2V0LmMgdG8gcHV0IGEgYmxvY2sgb2YgZGF0YQogICogaW50byB0aGUgaXNvY2hyb25vdXMgb3V0cHV0IGJ1ZmZlciAqLwpAQCAtNzAzLDcgKzcyNCw3IEBACiAJaXNkbl9jdHJsIHJlc3BvbnNlOwogCiAJLyogZXJyb3IgLT4gTEwgKi8KLQlkYmcoREVCVUdfQ01ELCAic2VuZGluZyBMMUVSUiIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2VuZGluZyBMMUVSUiIpOwogCXJlc3BvbnNlLmRyaXZlciA9IGJjcy0+Y3MtPm15aWQ7CiAJcmVzcG9uc2UuY29tbWFuZCA9IElTRE5fU1RBVF9MMUVSUjsKIAlyZXNwb25zZS5hcmcgPSBiY3MtPmNoYW5uZWw7CkBAIC03MjcsOCArNzQ4LDggQEAKICAqLwogCiAvKiBpbml0aWFsaXplIHN5c2ZzIGZvciBkZXZpY2UgKi8KLXZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKLXZvaWQgZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3ZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7Cit2b2lkIGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoc3RydWN0IGNhcmRzdGF0ZSAqY3MpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gY29tbW9uLmMvZ2lnYXNldC5oCkBAIC03MzYsNyArNzU3LDcgQEAKIAogdm9pZCBnaWdhc2V0X2Jjc19yZWluaXQoc3RydWN0IGJjX3N0YXRlICpiY3MpOwogdm9pZCBnaWdhc2V0X2F0X2luaXQoc3RydWN0IGF0X3N0YXRlX3QgKmF0X3N0YXRlLCBzdHJ1Y3QgYmNfc3RhdGUgKmJjcywKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgY2lkKTsKKwkJICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywgaW50IGNpZCk7CiBpbnQgZ2lnYXNldF9nZXRfY2hhbm5lbChzdHJ1Y3QgYmNfc3RhdGUgKmJjcyk7CiB2b2lkIGdpZ2FzZXRfZnJlZV9jaGFubmVsKHN0cnVjdCBiY19zdGF0ZSAqYmNzKTsKIGludCBnaWdhc2V0X2dldF9jaGFubmVscyhzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7CkBAIC03NDUsMTYgKzc2NiwxNSBAQAogCiAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkcml2ZXIgc3RydWN0dXJlLiAqLwogc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpnaWdhc2V0X2luaXRkcml2ZXIodW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIG1pbm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmZzbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCQkJCQkgIGNvbnN0IGNoYXIgKnByb2NuYW1lLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGV2ZnNuYW1lLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBnaWdhc2V0X29wcyAqb3BzLAorCQkJCQkgIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKIAogLyogRGVhbGxvY2F0ZSBkcml2ZXIgc3RydWN0dXJlLiAqLwogdm9pZCBnaWdhc2V0X2ZyZWVkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwogdm9pZCBnaWdhc2V0X2RlYnVnZHJpdmVycyh2b2lkKTsKLXN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X21pbm9yKHVuc2lnbmVkIG1pbm9yKTsKIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0cnVjdCBjYXJkc3RhdGUgKmdpZ2FzZXRfZ2V0X2NzX2J5X2lkKGludCBpZCk7CiAKQEAgLTc2Myw3ICs3ODMsOCBAQAogdm9pZCBnaWdhc2V0X3VuYXNzaWduKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIHZvaWQgZ2lnYXNldF9ibG9ja2RyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydik7CiAKLS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGNhcmQgc3RhdGUuIENhbGxzIGhhcmR3YXJlIGRlcGVuZGVudCBnaWdhc2V0X2luaXRbYl1jcygpLiAqLworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgY2FyZCBzdGF0ZS4gQ2FsbHMgaGFyZHdhcmUgZGVwZW5kZW50CisgICBnaWdhc2V0X2luaXRbYl1jcygpLiAqLwogc3RydWN0IGNhcmRzdGF0ZSAqZ2lnYXNldF9pbml0Y3Moc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGludCBjaGFubmVscywKIAkJCQkgaW50IG9uZWNoYW5uZWwsIGludCBpZ25vcmVmcmFtZXMsCiAJCQkJIGludCBjaWRtb2RlLCBjb25zdCBjaGFyICptb2R1bGVuYW1lKTsKQEAgLTc4OCw4ICs4MDksOCBAQAogICogcHRyIG11c3QgYmUga21hbGxvYygpZWQgKGFuZCBub3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlcikuCiAgKi8KIHN0cnVjdCBldmVudF90ICpnaWdhc2V0X2FkZF9ldmVudChzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRfc3RhdGVfdCAqYXRfc3RhdGUsIGludCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0ciwgaW50IHBhcmFtZXRlciwgdm9pZCAqYXJnKTsKKwkJCQkgIHN0cnVjdCBhdF9zdGF0ZV90ICphdF9zdGF0ZSwgaW50IHR5cGUsCisJCQkJICB2b2lkICpwdHIsIGludCBwYXJhbWV0ZXIsIHZvaWQgKmFyZyk7CiAKIC8qIENhbGxlZCBvbiBDT05GSUcxIGNvbW1hbmQgZnJvbSBmcm9udGVuZC4gKi8KIGludCBnaWdhc2V0X2VudGVyY29uZmlnbW9kZShzdHJ1Y3QgY2FyZHN0YXRlICpjcyk7IC8vMDogc3VjY2VzcyA8MDogZXJyb3Jjb2RlCkBAIC03OTksNyArODIwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwotCWlmIChhdG9taWNfcmVhZCgmY3MtPnJ1bm5pbmcpKQorCWlmIChjcy0+cnVubmluZykKIAkJdGFza2xldF9zY2hlZHVsZSgmY3MtPmV2ZW50X3Rhc2tsZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiB9CkBAIC04MTAsNyArODMxLDcgQEAKIHsKIAlnaWdhc2V0X2FkZF9ldmVudChiY3MtPmNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfQkNfQ0xPU0VELCBOVUxMLCAwLCBOVUxMKTsKIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX0NMT1NFRCIpOworCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19DTE9TRUQiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGJjcy0+Y3MpOwogfQogCkBAIC04MjAsMzYgKzg0MSwxOSBAQAogewogCWdpZ2FzZXRfYWRkX2V2ZW50KGJjcy0+Y3MsICZiY3MtPmF0X3N0YXRlLCBFVl9CQ19PUEVOLCBOVUxMLCAwLCBOVUxMKTsKIAotCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEJDX09QRU4iKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQkNfT1BFTiIpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoYmNzLT5jcyk7CiB9CiAKIC8qIGhhbmRsaW5nIHJvdXRpbmVzIGZvciBza19idWZmICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCi0vKiBwcml2YXRlIHZlcnNpb24gb2YgX19za2JfcHV0KCkKLSAqIGFwcGVuZCAnbGVuJyBieXRlcyB0byB0aGUgY29udGVudCBvZiAnc2tiJywgYWxyZWFkeSBrbm93aW5nIHRoYXQgdGhlCi0gKiBleGlzdGluZyBidWZmZXIgY2FuIGFjY29tb2RhdGUgdGhlbQotICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBuZXcgYnl0ZXMgc2hvdWxkIGJlIGNvcGllZCB0bwotICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIGFueSBsb2NrcyBzbyBpdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZQotICogYXBwcm9wcmlhdGUgbG9ja3MgaGVsZCBvbmx5LgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKmdpZ2FzZXRfc2tiX3B1dF9xdWljayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBjaGFyICp0bXAgPSBza2ItPnRhaWw7Ci0JLypTS0JfTElORUFSX0FTU0VSVChza2IpOyovCQkvKiBub3QgbmVlZGVkIGhlcmUgKi8KLQlza2ItPnRhaWwgKz0gbGVuOwotCXNrYi0+bGVuICs9IGxlbjsKLQlyZXR1cm4gdG1wOwotfQotCiAvKiBwYXNzIHJlY2VpdmVkIHNrYiB0byBMTAogICogV2FybmluZzogc2tiIG11c3Qgbm90IGJlIGFjY2Vzc2VkIGFueW1vcmUhCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnaWdhc2V0X3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJCSAgIHN0cnVjdCBjYXJkc3RhdGUgKmNzLAorCQkJCSAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWNzLT5paWYucmN2Y2FsbGJfc2tiKGNzLT5teWlkLCBiY3MtPmNoYW5uZWwsIHNrYik7CiAJYmNzLT50cmFuc19kb3duKys7CkBAIC04NTksOCArODYzLDggQEAKICAqIFdhcm5pbmc6IHNrYiBtdXN0IG5vdCBiZSBhY2Nlc3NlZCBhbnltb3JlIQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2lnYXNldF9yY3ZfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnByb2Nza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNhcmRzdGF0ZSAqY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJjX3N0YXRlICpiY3MpCisJCQkJICAgICBzdHJ1Y3QgY2FyZHN0YXRlICpjcywKKwkJCQkgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWlmIChwcm9jc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHByb2Nza2IpOwpAQCAtODc3LDQ2ICs4ODEsOSBAQAogLyogYml0d2lzZSBieXRlIGludmVyc2lvbiB0YWJsZSAqLwogZXh0ZXJuIF9fdTggZ2lnYXNldF9pbnZ0YWJbXTsJLyogaW4gY29tbW9uLmMgKi8KIAotCiAvKiBhcHBlbmQgcmVjZWl2ZWQgYnl0ZXMgdG8gaW5idWYgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdpZ2FzZXRfZmlsbF9pbmJ1ZihzdHJ1Y3QgaW5idWZfdCAqaW5idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJ5dGVzKQotewotCXVuc2lnbmVkIG4sIGhlYWQsIHRhaWwsIGJ5dGVzbGVmdDsKLQotCWRiZyhERUJVR19JTlRSLCAicmVjZWl2ZWQgJXUgYnl0ZXMiLCBudW1ieXRlcyk7Ci0KLQlpZiAoIW51bWJ5dGVzKQotCQlyZXR1cm4gMDsKLQotCWJ5dGVzbGVmdCA9IG51bWJ5dGVzOwotCXRhaWwgPSBhdG9taWNfcmVhZCgmaW5idWYtPnRhaWwpOwotCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOwotCWRiZyhERUJVR19JTlRSLCAiYnVmZmVyIHN0YXRlOiAldSAtPiAldSIsIGhlYWQsIHRhaWwpOwotCi0Jd2hpbGUgKGJ5dGVzbGVmdCkgewotCQlpZiAoaGVhZCA+IHRhaWwpCi0JCQluID0gaGVhZCAtIDEgLSB0YWlsOwotCQllbHNlIGlmIChoZWFkID09IDApCi0JCQluID0gKFJCVUZTSVpFLTEpIC0gdGFpbDsKLQkJZWxzZQotCQkJbiA9IFJCVUZTSVpFIC0gdGFpbDsKLQkJaWYgKCFuKSB7Ci0JCQllcnIoImJ1ZmZlciBvdmVyZmxvdyAoJXUgYnl0ZXMgbG9zdCkiLCBieXRlc2xlZnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG4gPiBieXRlc2xlZnQpCi0JCQluID0gYnl0ZXNsZWZ0OwotCQltZW1jcHkoaW5idWYtPmRhdGEgKyB0YWlsLCBzcmMsIG4pOwotCQlieXRlc2xlZnQgLT0gbjsKLQkJdGFpbCA9ICh0YWlsICsgbikgJSBSQlVGU0laRTsKLQkJc3JjICs9IG47Ci0JfQotCWRiZyhERUJVR19JTlRSLCAic2V0dGluZyB0YWlsIHRvICV1IiwgdGFpbCk7Ci0JYXRvbWljX3NldCgmaW5idWYtPnRhaWwsIHRhaWwpOwotCXJldHVybiBudW1ieXRlcyAhPSBieXRlc2xlZnQ7Ci19CitpbnQgZ2lnYXNldF9maWxsX2luYnVmKHN0cnVjdCBpbmJ1Zl90ICppbmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgbnVtYnl0ZXMpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICBGdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gaW50ZXJmYWNlLmMKQEAgLTkyNCw3ICs4OTEsNyBAQAogCiAvKiBpbml0aWFsaXplIGludGVyZmFjZSAqLwogdm9pZCBnaWdhc2V0X2lmX2luaXRkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKTsKKwkJCSAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNvbnN0IGNoYXIgKmRldmZzbmFtZSk7CiAvKiByZWxlYXNlIGludGVyZmFjZSAqLwogdm9pZCBnaWdhc2V0X2lmX2ZyZWVkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYpOwogLyogYWRkIG1pbm9yICovCkBAIC05MzMsNiArOTAwLDYgQEAKIHZvaWQgZ2lnYXNldF9pZl9mcmVlKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIC8qIGRldmljZSByZWNlaXZlZCBkYXRhICovCiB2b2lkIGdpZ2FzZXRfaWZfcmVjZWl2ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2k0bC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKaW5kZXggNzMxYTY3NS4uMTY1NGZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIChFaWxlcnMuU3RlZmFuQGVwb3N0LmRlKSwKLSAqICAgICAgICAgICAgICAgICAgICAgICBIYW5zam9lcmcgTGlwcCAoaGpsaXBwQHdlYi5kZSksCi0gKiAgICAgICAgICAgICAgICAgICAgICAgVGlsbWFuIFNjaG1pZHQgKHRpbG1hbkBpbWFwLmNjKS4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAorICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKKyAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEsMTUgKzExLDExIEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRvRG86IC4uLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBWZXJzaW9uOiAkSWQ6IGk0bC5jLHYgMS4zLjIuOSAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKIAotLyogPT0gSGFuZGxpbmcgb2YgSTRMIElPID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogPT0gSGFuZGxpbmcgb2YgSTRMIElPID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogd3JpdGVidWZfZnJvbV9MTAogICogY2FsbGVkIGJ5IExMIHRvIHRyYW5zbWl0IGRhdGEgb24gYW4gb3BlbiBjaGFubmVsCkBAIC0yOSwxNCArMjUsMTYgQEAKICAqIHBhcmFtZXRlcnM6CiAgKglkcml2ZXJJRAlkcml2ZXIgSUQgYXMgYXNzaWduZWQgYnkgTEwKICAqCWNoYW5uZWwJCWNoYW5uZWwgbnVtYmVyCi0gKglhY2sJCWlmICE9IDAgTEwgd2FudHMgdG8gYmUgbm90aWZpZWQgb24gY29tcGxldGlvbiB2aWEgc3RhdGNhbGxiKElTRE5fU1RBVF9CU0VOVCkKKyAqCWFjawkJaWYgIT0gMCBMTCB3YW50cyB0byBiZSBub3RpZmllZCBvbiBjb21wbGV0aW9uIHZpYQorICoJCQlzdGF0Y2FsbGIoSVNETl9TVEFUX0JTRU5UKQogICoJc2tiCQlza2IgY29udGFpbmluZyBkYXRhIHRvIHNlbmQKICAqIHJldHVybiB2YWx1ZToKICAqCW51bWJlciBvZiBhY2NlcHRlZCBieXRlcwogICoJMCBpZiB0ZW1wb3JhcmlseSB1bmFibGUgdG8gYWNjZXB0IGRhdGEgKG91dCBvZiBidWZmZXIgc3BhY2UpCiAgKgk8MCBvbiBlcnJvciAoZWcuIC1FSU5WQUwpCiAgKi8KLXN0YXRpYyBpbnQgd3JpdGVidWZfZnJvbV9MTChpbnQgZHJpdmVySUQsIGludCBjaGFubmVsLCBpbnQgYWNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCB3cml0ZWJ1Zl9mcm9tX0xMKGludCBkcml2ZXJJRCwgaW50IGNoYW5uZWwsIGludCBhY2ssCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlzdHJ1Y3QgYmNfc3RhdGUgKmJjczsKQEAgLTU0LDI4ICs1MiwyNSBAQAogCWJjcyA9ICZjcy0+YmNzW2NoYW5uZWxdOwogCWxlbiA9IHNrYi0+bGVuOwogCi0JZGJnKERFQlVHX0xMREFUQSwKLQkgICAgIlJlY2VpdmluZyBkYXRhIGZyb20gTEwgKGlkOiAlZCwgY2hhbm5lbDogJWQsIGFjazogJWQsIHNpemU6ICVkKSIsCi0JICAgIGRyaXZlcklELCBjaGFubmVsLCBhY2ssIGxlbik7CisJZ2lnX2RiZyhERUJVR19MTERBVEEsCisJCSJSZWNlaXZpbmcgZGF0YSBmcm9tIExMIChpZDogJWQsIGNoOiAlZCwgYWNrOiAlZCwgc3o6ICVkKSIsCisJCWRyaXZlcklELCBjaGFubmVsLCBhY2ssIGxlbik7CiAKIAlpZiAoIWxlbikgewogCQlpZiAoYWNrKQotCQkJd2Fybigibm90IEFDS2luZyBlbXB0eSBwYWNrZXQgZnJvbSBMTCIpOworCQkJbm90aWNlKCIlczogbm90IEFDS2luZyBlbXB0eSBwYWNrZXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAobGVuID4gTUFYX0JVRl9TSVpFKSB7Ci0JCWVycigiJXM6IHBhY2tldCB0b28gbGFyZ2UgKCVkIGJ5dGVzKSIsIF9fZnVuY19fLCBjaGFubmVsKTsKKwkJZXJyKCIlczogcGFja2V0IHRvbyBsYXJnZSAoJWQgYnl0ZXMpIiwgX19mdW5jX18sIGxlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXNrYmxlbiA9IGFjayA/IGxlbiA6IDA7CiAJc2tiLT5oZWFkWzBdID0gc2tibGVuICYgMHhmZjsKIAlza2ItPmhlYWRbMV0gPSBza2JsZW4gPj4gODsKLQlkYmcoREVCVUdfTUNNRCwgInNrYjogbGVuPSV1LCBza2JsZW49JXU6ICUwMnggJTAyeCIsIGxlbiwgc2tibGVuLAotCSAgICAgKHVuc2lnbmVkKSBza2ItPmhlYWRbMF0sICh1bnNpZ25lZCkgc2tiLT5oZWFkWzFdKTsKKwlnaWdfZGJnKERFQlVHX01DTUQsICJza2I6IGxlbj0ldSwgc2tibGVuPSV1OiAlMDJ4ICUwMngiLAorCQlsZW4sIHNrYmxlbiwgKHVuc2lnbmVkKSBza2ItPmhlYWRbMF0sICh1bnNpZ25lZCkgc2tiLT5oZWFkWzFdKTsKIAogCS8qIHBhc3MgdG8gZGV2aWNlLXNwZWNpZmljIG1vZHVsZSAqLwogCXJldHVybiBjcy0+b3BzLT5zZW5kX3NrYihiY3MsIHNrYik7CkBAIC04OSwxNCArODQsMTQgQEAKIAkrK2Jjcy0+dHJhbnNfdXA7CiAKIAlpZiAoc2tiLT5sZW4pCi0JCXdhcm4oIiVzOiBza2ItPmxlbj09JWQiLCBfX2Z1bmNfXywgc2tiLT5sZW4pOworCQlkZXZfd2FybihiY3MtPmNzLT5kZXYsICIlczogc2tiLT5sZW49PSVkXG4iLAorCQkJIF9fZnVuY19fLCBza2ItPmxlbik7CiAKIAlsZW4gPSAodW5zaWduZWQgY2hhcikgc2tiLT5oZWFkWzBdIHwKIAkgICAgICAodW5zaWduZWQpICh1bnNpZ25lZCBjaGFyKSBza2ItPmhlYWRbMV0gPDwgODsKIAlpZiAobGVuKSB7Ci0JCWRiZyhERUJVR19NQ01ELAotCQkgICAgIkFja25vd2xlZGdlIHNlbmRpbmcgdG8gTEwgKGlkOiAlZCwgY2hhbm5lbDogJWQgc2l6ZTogJXUpIiwKLQkJICAgIGJjcy0+Y3MtPm15aWQsIGJjcy0+Y2hhbm5lbCwgbGVuKTsKKwkJZ2lnX2RiZyhERUJVR19NQ01ELCAiQUNLaW5nIHRvIExMIChpZDogJWQsIGNoOiAlZCwgc3o6ICV1KSIsCisJCQliY3MtPmNzLT5teWlkLCBiY3MtPmNoYW5uZWwsIGxlbik7CiAKIAkJcmVzcG9uc2UuZHJpdmVyID0gYmNzLT5jcy0+bXlpZDsKIAkJcmVzcG9uc2UuY29tbWFuZCA9IElTRE5fU1RBVF9CU0VOVDsKQEAgLTExOSwxNSArMTE0LDEyIEBACiAJc3RydWN0IGJjX3N0YXRlICpiY3M7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHNldHVwX3Bhcm0gKnNwOworCXVuc2lnbmVkIHBhcmFtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvL2RiZyhERUJVR19BTlksICJHaWdhc2V0X0hXOiBSZWNlaXZpbmcgY29tbWFuZCIpOwogCWdpZ2FzZXRfZGVidWdkcml2ZXJzKCk7CiAKLQkvKiBUZXJtaW5hdGUgdGhpcyBjYWxsIGlmIG5vIGRldmljZSBpcyBwcmVzZW50LiBCdCBpZiB0aGUgY29tbWFuZCBpcyAiSVNETl9DTURfTE9DSyIgb3IKLQkgKiAiSVNETl9DTURfVU5MT0NLIiB0aGVuIGV4ZWN1dGUgaXQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgZGV2aWNlIGluZGVwZW5kZW50ICEKLQkgKi8KLQkvL0ZJWE1FICJyZW1vdmUgdGVzdCBmb3IgJmNvbm5lY3RlZCIKLQlpZiAoKCFjcyB8fCAhYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSkgeworCWlmICghY3MpIHsKIAkJd2FybigiTEwgdHJpZWQgdG8gYWNjZXNzIHVua25vd24gZGV2aWNlIHdpdGggbnIuICVkIiwKIAkJICAgICBjbnRybC0+ZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMzUsMjkgKzEyNywzMCBAQAogCiAJc3dpdGNoIChjbnRybC0+Y29tbWFuZCkgewogCWNhc2UgSVNETl9DTURfSU9DVEw6Ci0KLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0lPQ1RMIChkcml2ZXI6JWQsYXJnOiAlbGQpIiwKLQkJICAgIGNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0lPQ1RMIChkcml2ZXI6ICVkLCBhcmc6ICVsZCkiLAorCQkJY250cmwtPmRyaXZlciwgY250cmwtPmFyZyk7CiAKIAkJd2FybigiSVNETl9DTURfSU9DVEwgaXMgbm90IHN1cHBvcnRlZC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXNlIElTRE5fQ01EX0RJQUw6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9ESUFMIChkcml2ZXI6ICVkLCBjaGFubmVsOiAlbGQsICIKLQkJICAgICJwaG9uZTogJXMsb3dubXNuOiAlcywgc2kxOiAlZCwgc2kyOiAlZCkiLAotCQkgICAgY250cmwtPmRyaXZlciwgY250cmwtPmFyZywKLQkJICAgIGNudHJsLT5wYXJtLnNldHVwLnBob25lLCBjbnRybC0+cGFybS5zZXR1cC5lYXptc24sCi0JCSAgICBjbnRybC0+cGFybS5zZXR1cC5zaTEsIGNudHJsLT5wYXJtLnNldHVwLnNpMik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkJIklTRE5fQ01EX0RJQUwgKGRyaXZlcjogJWQsIGNoOiAlbGQsICIKKwkJCSJwaG9uZTogJXMsIG93bm1zbjogJXMsIHNpMTogJWQsIHNpMjogJWQpIiwKKwkJCWNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsCisJCQljbnRybC0+cGFybS5zZXR1cC5waG9uZSwgY250cmwtPnBhcm0uc2V0dXAuZWF6bXNuLAorCQkJY250cmwtPnBhcm0uc2V0dXAuc2kxLCBjbnRybC0+cGFybS5zZXR1cC5zaTIpOwogCiAJCWlmIChjbnRybC0+YXJnID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCVkKSIsIChpbnQpIGNudHJsLT5hcmcpOworCQkJZXJyKCJJU0ROX0NNRF9ESUFMOiBpbnZhbGlkIGNoYW5uZWwgKCVkKSIsCisJCQkgICAgKGludCkgY250cmwtPmFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWJjcyA9IGNzLT5iY3MgKyBjbnRybC0+YXJnOwogCiAJCWlmICghZ2lnYXNldF9nZXRfY2hhbm5lbChiY3MpKSB7Ci0JCQllcnIoImNoYW5uZWwgbm90IGZyZWUiKTsKKwkJCWVycigiSVNETl9DTURfRElBTDogY2hhbm5lbCBub3QgZnJlZSIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCkBAIC0xNjksNDIgKzE2Miw0NiBAQAogCQl9CiAJCSpzcCA9IGNudHJsLT5wYXJtLnNldHVwOwogCi0JCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLCBFVl9ESUFMLCBzcCwKLQkJCSAgICAgICAgICAgICAgIGF0b21pY19yZWFkKCZiY3MtPmF0X3N0YXRlLnNlcV9pbmRleCksCi0JCQkgICAgICAgICAgICAgICBOVUxMKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwkJcGFyYW0gPSBiY3MtPmF0X3N0YXRlLnNlcV9pbmRleDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfRElBTCwgc3AsIHBhcmFtLAorCQkJCSAgICAgICBOVUxMKSkgewogCQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KIAkJCWtmcmVlKHNwKTsKIAkJCWdpZ2FzZXRfZnJlZV9jaGFubmVsKGJjcyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIERJQUwiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIERJQUwiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfQUNDRVBURDogLy9GSVhNRQotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUNDRVBURCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FDQ0VQVEQiKTsKIAogCQlpZiAoY250cmwtPmFyZyA+PSBjcy0+Y2hhbm5lbHMpIHsKLQkJCWVycigiaW52YWxpZCBjaGFubmVsICglZCkiLCAoaW50KSBjbnRybC0+YXJnKTsKKwkJCWVycigiSVNETl9DTURfQUNDRVBURDogaW52YWxpZCBjaGFubmVsICglZCkiLAorCQkJICAgIChpbnQpIGNudHJsLT5hcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmJjc1tjbnRybC0+YXJnXS5hdF9zdGF0ZSwKLQkJCSAgICAgICAgICAgICAgIEVWX0FDQ0VQVCwgTlVMTCwgMCwgTlVMTCkpIHsKKwkJCQkgICAgICAgRVZfQUNDRVBULCBOVUxMLCAwLCBOVUxMKSkgewogCQkJLy9GSVhNRSB3aGF0IHNob3VsZCB3ZSBkbz8KIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgQUNDRVBUIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBBQ0NFUFQiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9BQ0NFUFRCOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUNDRVBUQiIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FDQ0VQVEIiKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9IQU5HVVA6Ci0JCWRiZyhERUJVR19BTlksCi0JCSAgICAiSVNETl9DTURfSEFOR1VQIChjaGFubmVsOiAlZCkiLCAoaW50KSBjbnRybC0+YXJnKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9IQU5HVVAgKGNoOiAlZCkiLAorCQkJKGludCkgY250cmwtPmFyZyk7CiAKIAkJaWYgKGNudHJsLT5hcmcgPj0gY3MtPmNoYW5uZWxzKSB7CiAJCQllcnIoIklTRE5fQ01EX0hBTkdVUDogaW52YWxpZCBjaGFubmVsICgldSkiLApAQCAtMjEzLDY2ICsyMTAsNjggQEAKIAkJfQogCiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YmNzW2NudHJsLT5hcmddLmF0X3N0YXRlLAotCQkJICAgICAgICAgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgeworCQkJCSAgICAgICBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpKSB7CiAJCQkvL0ZJWE1FIHdoYXQgc2hvdWxkIHdlIGRvPwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBIVVAiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEhVUCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQlicmVhazsKLQljYXNlIElTRE5fQ01EX0NMUkVBWjogICAgICAgICAgICAgICAvKiBEbyBub3Qgc2lnbmFsIGluY29taW5nIHNpZ25hbHMgKi8gLy9GSVhNRQotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQ0xSRUFaIik7CisJY2FzZSBJU0ROX0NNRF9DTFJFQVo6IC8qIERvIG5vdCBzaWduYWwgaW5jb21pbmcgc2lnbmFscyAqLyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQ0xSRUFaIik7CiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfU0VURUFaOiAgICAgICAgICAgICAgIC8qIFNpZ25hbCBpbmNvbWluZyBjYWxscyBmb3IgZ2l2ZW4gTVNOICovIC8vRklYTUUKLQkJZGJnKERFQlVHX0FOWSwKLQkJICAgICJJU0ROX0NNRF9TRVRFQVogKGlkOiVkLCBjaGFubmVsOiAlbGQsIG51bWJlcjogJXMpIiwKLQkJICAgIGNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsIGNudHJsLT5wYXJtLm51bSk7CisJY2FzZSBJU0ROX0NNRF9TRVRFQVo6IC8qIFNpZ25hbCBpbmNvbWluZyBjYWxscyBmb3IgZ2l2ZW4gTVNOICovIC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkiSVNETl9DTURfU0VURUFaIChpZDogJWQsIGNoOiAlbGQsIG51bWJlcjogJXMpIiwKKwkJCWNudHJsLT5kcml2ZXIsIGNudHJsLT5hcmcsIGNudHJsLT5wYXJtLm51bSk7CiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfU0VUTDI6ICAgICAgICAgICAgICAgIC8qIFNldCBMMiB0byBnaXZlbiBwcm90b2NvbCAqLwotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDIgKENoYW5uZWw6ICVsZCwgUHJvdG86ICVseCkiLAotCQkgICAgIGNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CisJY2FzZSBJU0ROX0NNRF9TRVRMMjogLyogU2V0IEwyIHRvIGdpdmVuIHByb3RvY29sICovCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDIgKGNoOiAlbGQsIHByb3RvOiAlbHgpIiwKKwkJCWNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CiAKIAkJaWYgKChjbnRybC0+YXJnICYgMHhmZikgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJXUpIiwKKwkJCWVycigiSVNETl9DTURfU0VUTDI6IGludmFsaWQgY2hhbm5lbCAoJXUpIiwKIAkJCSAgICAodW5zaWduZWQpIGNudHJsLT5hcmcgJiAweGZmKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY250cmwtPmFyZyAmIDB4ZmZdLmF0X3N0YXRlLAotCQkgICAgICAgICAgICAgICAgICAgICAgIEVWX1BST1RPX0wyLCBOVUxMLCBjbnRybC0+YXJnID4+IDgsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpIHsKKwkJCQkgICAgICAgRVZfUFJPVE9fTDIsIE5VTEwsIGNudHJsLT5hcmcgPj4gOCwKKwkJCQkgICAgICAgTlVMTCkpIHsKIAkJCS8vRklYTUUgd2hhdCBzaG91bGQgd2UgZG8/CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFBST1RPX0wyIik7CisJCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9UT19MMiIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9TRVRMMzogICAgICAgICAgICAgIC8qIFNldCBMMyB0byBnaXZlbiBwcm90b2NvbCAqLwotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDMgKENoYW5uZWw6ICVsZCwgUHJvdG86ICVseCkiLAotCQkgICAgIGNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CisJY2FzZSBJU0ROX0NNRF9TRVRMMzogLyogU2V0IEwzIHRvIGdpdmVuIHByb3RvY29sICovCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUTDMgKGNoOiAlbGQsIHByb3RvOiAlbHgpIiwKKwkJCWNudHJsLT5hcmcgJiAweGZmLCAoY250cmwtPmFyZyA+PiA4KSk7CiAKIAkJaWYgKChjbnRybC0+YXJnICYgMHhmZikgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQllcnIoImludmFsaWQgY2hhbm5lbCAoJXUpIiwKKwkJCWVycigiSVNETl9DTURfU0VUTDM6IGludmFsaWQgY2hhbm5lbCAoJXUpIiwKIAkJCSAgICAodW5zaWduZWQpIGNudHJsLT5hcmcgJiAweGZmKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKGNudHJsLT5hcmcgPj4gOCAhPSBJU0ROX1BST1RPX0wzX1RSQU5TKSB7Ci0JCQllcnIoImludmFsaWQgcHJvdG9jb2wgJWx1IiwgY250cmwtPmFyZyA+PiA4KTsKKwkJCWVycigiSVNETl9DTURfU0VUTDM6IGludmFsaWQgcHJvdG9jb2wgJWx1IiwKKwkJCSAgICBjbnRybC0+YXJnID4+IDgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1BST0NFRUQ6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9DRUVEIik7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9DRUVEIik7IC8vRklYTUUKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9BTEVSVDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0FMRVJUIik7IC8vRklYTUUKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9BTEVSVCIpOyAvL0ZJWE1FCiAJCWlmIChjbnRybC0+YXJnID49IGNzLT5jaGFubmVscykgewotCQkJZXJyKCJpbnZhbGlkIGNoYW5uZWwgKCVkKSIsIChpbnQpIGNudHJsLT5hcmcpOworCQkJZXJyKCJJU0ROX0NNRF9BTEVSVDogaW52YWxpZCBjaGFubmVsICglZCkiLAorCQkJICAgIChpbnQpIGNudHJsLT5hcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLy9iY3MgPSBjcy0+YmNzICsgY250cmwtPmFyZzsKQEAgLTI4MCwzMiArMjc5LDMxIEBACiAJCS8vIEZJWE1FCiAJCWJyZWFrOwogCWNhc2UgSVNETl9DTURfUkVESVI6Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9SRURJUiIpOyAvL0ZJWE1FCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUkVESVIiKTsgLy9GSVhNRQogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1BST1RfSU86Ci0JCWRiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9UX0lPIik7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUFJPVF9JTyIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0ZBWENNRDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0ZBWENNRCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0ZBWENNRCIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVEwyOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDIiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMiIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVEwzOgotCQlkYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDMiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMyIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVEVBWjoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEVBWiIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVEVBWiIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX1NFVFNJTDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVFNJTCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1NFVFNJTCIpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0dFVFNJTDoKLQkJZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVFNJTCIpOworCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVFNJTCIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVua25vd24gY29tbWFuZCAlZCBmcm9tIExMIiwKLQkJICAgICBjbnRybC0+Y29tbWFuZCk7CisJCWVycigidW5rbm93biBjb21tYW5kICVkIGZyb20gTEwiLCBjbnRybC0+Y29tbWFuZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzUwLDcgKzM0OCw4IEBACiAJCXByb3RvID0gMjsgLyogMDogQml0c3luY2hyb24sIDE6IEhETEMsIDI6IHZvaWNlICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiaW52YWxpZCBwcm90b2NvbDogJXUiLCBiY3MtPnByb3RvMik7CisJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiJXM6IGludmFsaWQgTDIgcHJvdG9jb2w6ICV1XG4iLAorCQkJX19mdW5jX18sIGJjcy0+cHJvdG8yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNzgsNyArMzc3LDcgQEAKIAkJYmNzLT5jb21tYW5kc1tpXSA9IE5VTEw7CiAJCWlmIChsZW5ndGhbaV0gJiYKIAkJICAgICEoYmNzLT5jb21tYW5kc1tpXSA9IGttYWxsb2MobGVuZ3RoW2ldLCBHRlBfQVRPTUlDKSkpIHsKLQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQpAQCAtMzk2LDEwICszOTUsMTQgQEAKIAl9CiAKIAlpZiAoYmNzLT5jb21tYW5kc1tBVF9NU05dKQotCQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX01TTl0sIGxlbmd0aFtBVF9NU05dLCAiXlNNU049JXNcciIsIHNwLT5lYXptc24pOwotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfQkMgICBdLCBsZW5ndGhbQVRfQkMgICBdLCAiXlNCQz0lc1xyIiwgYmMpOwotCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfUFJPVE9dLCBsZW5ndGhbQVRfUFJPVE9dLCAiXlNCUFI9JXVcciIsIHByb3RvKTsKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0lTTyAgXSwgbGVuZ3RoW0FUX0lTTyAgXSwgIl5TSVNPPSV1XHIiLCAodW5zaWduZWQpYmNzLT5jaGFubmVsICsgMSk7CisJCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfTVNOXSwgbGVuZ3RoW0FUX01TTl0sCisJCQkgIl5TTVNOPSVzXHIiLCBzcC0+ZWF6bXNuKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0JDICAgXSwgbGVuZ3RoW0FUX0JDICAgXSwKKwkJICJeU0JDPSVzXHIiLCBiYyk7CisJc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9QUk9UT10sIGxlbmd0aFtBVF9QUk9UT10sCisJCSAiXlNCUFI9JXVcciIsIHByb3RvKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX0lTTyAgXSwgbGVuZ3RoW0FUX0lTTyAgXSwKKwkJICJeU0lTTz0ldVxyIiwgKHVuc2lnbmVkKWJjcy0+Y2hhbm5lbCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTksNyArNDIyLDggQEAKIAkJcHJvdG8gPSAyOyAvKiAwOiBCaXRzeW5jaHJvbiwgMTogSERMQywgMjogdm9pY2UgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJpbnZhbGlkIHByb3RvY29sOiAldSIsIGJjcy0+cHJvdG8yKTsKKwkJZGV2X2VycihhdF9zdGF0ZS0+Y3MtPmRldiwgIiVzOiBpbnZhbGlkIHByb3RvY29sOiAldVxuIiwKKwkJCV9fZnVuY19fLCBiY3MtPnByb3RvMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDM2LDEzICs0NDAsMTUgQEAKIAkJYmNzLT5jb21tYW5kc1tpXSA9IE5VTEw7CiAJCWlmIChsZW5ndGhbaV0gJiYKIAkJICAgICEoYmNzLT5jb21tYW5kc1tpXSA9IGttYWxsb2MobGVuZ3RoW2ldLCBHRlBfQVRPTUlDKSkpIHsKLQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJZGV2X2VycihhdF9zdGF0ZS0+Y3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CiAKLQlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX1BST1RPXSwgbGVuZ3RoW0FUX1BST1RPXSwgIl5TQlBSPSV1XHIiLCBwcm90byk7Ci0Jc25wcmludGYoYmNzLT5jb21tYW5kc1tBVF9JU08gIF0sIGxlbmd0aFtBVF9JU08gIF0sICJeU0lTTz0ldVxyIiwgKHVuc2lnbmVkKSBiY3MtPmNoYW5uZWwgKyAxKTsKKwlzbnByaW50ZihiY3MtPmNvbW1hbmRzW0FUX1BST1RPXSwgbGVuZ3RoW0FUX1BST1RPXSwKKwkJICJeU0JQUj0ldVxyIiwgcHJvdG8pOworCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfSVNPICBdLCBsZW5ndGhbQVRfSVNPICBdLAorCQkgIl5TSVNPPSV1XHIiLCAodW5zaWduZWQpIGJjcy0+Y2hhbm5lbCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzMsNyArNDc5LDcgQEAKIAkJcmVzcG9uc2UucGFybS5zZXR1cC5zaTEgPSAxOwogCQlyZXNwb25zZS5wYXJtLnNldHVwLnNpMiA9IDI7CiAJfSBlbHNlIHsKLQkJd2FybigiUklORyBpZ25vcmVkIC0gdW5zdXBwb3J0ZWQgQkMgJXMiLAorCQlkZXZfd2Fybihjcy0+ZGV2LCAiUklORyBpZ25vcmVkIC0gdW5zdXBwb3J0ZWQgQkMgJXNcbiIsCiAJCSAgICAgYXRfc3RhdGUtPnN0cl92YXJbU1RSX1pCQ10pOwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwogCX0KQEAgLTQ5MSwxOCArNDk3LDE3IEBACiAJCXJlc3BvbnNlLnBhcm0uc2V0dXAuZWF6bXNuWzBdID0gMDsKIAogCWlmICghYmNzKSB7Ci0JCW5vdGljZSgibm8gY2hhbm5lbCBmb3IgaW5jb21pbmcgY2FsbCIpOwotCQlkYmcoREVCVUdfQ01ELCAiU2VuZGluZyBJQ0FMTFciKTsKKwkJZGV2X25vdGljZShjcy0+ZGV2LCAibm8gY2hhbm5lbCBmb3IgaW5jb21pbmcgY2FsbFxuIik7CiAJCXJlc3BvbnNlLmNvbW1hbmQgPSBJU0ROX1NUQVRfSUNBTExXOwogCQlyZXNwb25zZS5hcmcgPSAwOyAvL0ZJWE1FCiAJfSBlbHNlIHsKLQkJZGJnKERFQlVHX0NNRCwgIlNlbmRpbmcgSUNBTEwiKTsKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJTZW5kaW5nIElDQUxMIik7CiAJCXJlc3BvbnNlLmNvbW1hbmQgPSBJU0ROX1NUQVRfSUNBTEw7CiAJCXJlc3BvbnNlLmFyZyA9IGJjcy0+Y2hhbm5lbDsgLy9GSVhNRQogCX0KIAlyZXNwb25zZS5kcml2ZXIgPSBjcy0+bXlpZDsKIAlyZXR2YWwgPSBjcy0+aWlmLnN0YXRjYWxsYigmcmVzcG9uc2UpOwotCWRiZyhERUJVR19DTUQsICJSZXNwb25zZTogJWQiLCByZXR2YWwpOworCWdpZ19kYmcoREVCVUdfQ01ELCAiUmVzcG9uc2U6ICVkIiwgcmV0dmFsKTsKIAlzd2l0Y2ggKHJldHZhbCkgewogCWNhc2UgMDoJLyogbm8gdGFrZXJzICovCiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CkBAIC01MTIsNyArNTE3LDggQEAKIAljYXNlIDI6CS8qIHJlamVjdCAqLwogCQlyZXR1cm4gSUNBTExfUkVKRUNUOwogCWNhc2UgMzoJLyogaW5jb21wbGV0ZSAqLwotCQl3YXJuKCJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogSW5jb21wbGV0ZSBOdW1iZXIiKTsKKwkJZGV2X3dhcm4oY3MtPmRldiwKKwkJICAgICAgICJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogSW5jb21wbGV0ZSBOdW1iZXJcbiIpOwogCQlyZXR1cm4gSUNBTExfSUdOT1JFOwogCWNhc2UgNDoJLyogcHJvY2VlZGluZyAqLwogCQkvKiBHaWdhc2V0IHdpbGwgc2VuZCBBTEVSVElORyBhbnl3YXkuCkBAIC01MjAsMTAgKzUyNiwxMSBAQAogCQkgKi8KIAkJcmV0dXJuIElDQUxMX0FDQ0VQVDsKIAljYXNlIDU6CS8qIGRlZmxlY3QgKi8KLQkJd2FybigiTEwgcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmU6IENhbGwgRGVmbGVjdGlvbiIpOworCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJICJMTCByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZTogQ2FsbCBEZWZsZWN0aW9uXG4iKTsKIAkJcmV0dXJuIElDQUxMX0lHTk9SRTsKIAlkZWZhdWx0OgotCQllcnIoIkxMIGVycm9yICVkIG9uIElDQUxMIiwgcmV0dmFsKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiTEwgZXJyb3IgJWQgb24gSUNBTExcbiIsIHJldHZhbCk7CiAJCXJldHVybiBJQ0FMTF9JR05PUkU7CiAJfQogfQpAQCAtNTMzLDcgKzU0MCw3IEBACiB7CiAJaXNkbl9pZiAqaWlmID0gJmNzLT5paWY7CiAKLQlkYmcoREVCVUdfQU5ZLCAiUmVnaXN0ZXIgZHJpdmVyIGNhcGFiaWxpdGllcyB0byBMTCIpOworCWdpZ19kYmcoREVCVUdfQU5ZLCAiUmVnaXN0ZXIgZHJpdmVyIGNhcGFiaWxpdGllcyB0byBMTCIpOwogCiAJLy9paWYtPmlkW3NpemVvZihpaWYtPmlkKSAtIDFdPTA7CiAJLy9zdHJuY3B5KGlpZi0+aWQsIGlzZG5pZCwgc2l6ZW9mKGlpZi0+aWQpIC0gMSk7CkBAIC01NDIsMjYgKzU0OSwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsgLy9GSVhNRSBFSU5WQUwvLi4uPz8KIAogCWlpZi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlpaWYtPmNoYW5uZWxzID0gY3MtPmNoYW5uZWxzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEkgYW0gc3VwcG9ydGluZyBqdXN0IG9uZSBjaGFubmVsICovLyogSSB3YXMgc3VwcG9ydGluZy4uLiovCisJaWlmLT5jaGFubmVscyA9IGNzLT5jaGFubmVsczsKIAlpaWYtPm1heGJ1ZnNpemUgPSBNQVhfQlVGX1NJWkU7Ci0JaWlmLT5mZWF0dXJlcyA9IElTRE5fRkVBVFVSRV9MMl9UUkFOUyB8ICAgLyogT3VyIGRldmljZSBpcyB2ZXJ5IGFkdmFuY2VkLCB0aGVyZWZvcmUgKi8KKwlpaWYtPmZlYXR1cmVzID0gSVNETl9GRUFUVVJFX0wyX1RSQU5TIHwKIAkJSVNETl9GRUFUVVJFX0wyX0hETEMgfAogI2lmZGVmIEdJR19YNzUKIAkJSVNETl9GRUFUVVJFX0wyX1g3NUkgfAogI2VuZGlmCiAJCUlTRE5fRkVBVFVSRV9MM19UUkFOUyB8CiAJCUlTRE5fRkVBVFVSRV9QX0VVUk87Ci0JaWlmLT5obF9oZHJsZW4gPSBIV19IRFJfTEVOOyAgICAgICAgICAgICAgLyogQXJlYSBmb3Igc3RvcmluZyBhY2sgKi8KKwlpaWYtPmhsX2hkcmxlbiA9IEhXX0hEUl9MRU47CQkvKiBBcmVhIGZvciBzdG9yaW5nIGFjayAqLwogCWlpZi0+Y29tbWFuZCA9IGNvbW1hbmRfZnJvbV9MTDsKIAlpaWYtPndyaXRlYnVmX3NrYiA9IHdyaXRlYnVmX2Zyb21fTEw7Ci0JaWlmLT53cml0ZWNtZCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3Qgc3VwcG9ydCBpc2RuY3RybCAqLwotCWlpZi0+cmVhZHN0YXQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHN1cHBvcnQgaXNkbmN0cmwgKi8KLQlpaWYtPnJjdmNhbGxiX3NrYiA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBXaWxsIGJlIHNldCBieSBMTCAqLwotCWlpZi0+c3RhdGNhbGxiID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIC8qIFdpbGwgYmUgc2V0IGJ5IExMICovCisJaWlmLT53cml0ZWNtZCA9IE5VTEw7CQkJLyogRG9uJ3Qgc3VwcG9ydCBpc2RuY3RybCAqLworCWlpZi0+cmVhZHN0YXQgPSBOVUxMOwkJCS8qIERvbid0IHN1cHBvcnQgaXNkbmN0cmwgKi8KKwlpaWYtPnJjdmNhbGxiX3NrYiA9IE5VTEw7CQkvKiBXaWxsIGJlIHNldCBieSBMTCAqLworCWlpZi0+c3RhdGNhbGxiID0gTlVMTDsJCQkvKiBXaWxsIGJlIHNldCBieSBMTCAqLwogCiAJaWYgKCFyZWdpc3Rlcl9pc2RuKGlpZikpCiAJCXJldHVybiAwOwogCi0JY3MtPm15aWQgPSBpaWYtPmNoYW5uZWxzOyAgICAgICAgICAgICAgICAgLyogU2V0IG15IGRldmljZSBpZCAqLworCWNzLT5teWlkID0gaWlmLT5jaGFubmVsczsJCS8qIFNldCBteSBkZXZpY2UgaWQgKi8KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKaW5kZXggM2E4MWQ5Yy4uMDhlNGM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKQEAgLTksOCArOSw2IEBACiAgKiAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogaW50ZXJmYWNlLmMsdiAxLjE0LjQuMTUgMjAwNi8wMi8wNCAxODoyODoxNiBoamxpcHAgRXhwICQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKICNpbmNsdWRlICJnaWdhc2V0LmgiCkBAIC0yNCw3ICsyMiw3IEBACiB7CiAJaW50IGNtZCA9ICphcmc7CiAKLQlkYmcoREVCVUdfSUYsICIldTogaWZfbG9jayAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZfbG9jayAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOwogCiAJaWYgKGNtZCA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzUsNyArMzMsNyBAQAogCX0KIAogCWlmICghY21kICYmIGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSA9PSBNU19MT0NLRUQKLQkgICAgJiYgYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7CisJICAgICYmIGNzLT5jb25uZWN0ZWQpIHsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIDAsIFRJT0NNX0RUUnxUSU9DTV9SVFMpOwogCQljcy0+b3BzLT5iYXVkX3JhdGUoY3MsIEIxMTUyMDApOwogCQljcy0+b3BzLT5zZXRfbGluZV9jdHJsKGNzLCBDUzgpOwpAQCAtNDQsMTIgKzQyLDEyIEBACiAKIAljcy0+d2FpdGluZyA9IDE7CiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfSUZfTE9DSywKLQkJICAgICAgICAgICAgICAgTlVMTCwgY21kLCBOVUxMKSkgeworCQkJICAgICAgIE5VTEwsIGNtZCwgTlVMTCkpIHsKIAkJY3MtPndhaXRpbmcgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9MT0NLIik7CisJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX0xPQ0siKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTY4LDcgKzY2LDcgQEAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY29tcGF0WzRdID0gR0lHX0NPTVBBVDsKIAl1bnNpZ25lZCBjbWQgPSBhcmdbMF07CiAKLQlkYmcoREVCVUdfSUYsICIldTogaWZfdmVyc2lvbiAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZfdmVyc2lvbiAoJWQpIiwgY3MtPm1pbm9yX2luZGV4LCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEdJR1ZFUl9EUklWRVI6CkBAIC04MCwxMiArNzgsMTIgQEAKIAljYXNlIEdJR1ZFUl9GV0JBU0U6CiAJCWNzLT53YWl0aW5nID0gMTsKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5hdF9zdGF0ZSwgRVZfSUZfVkVSLAotCQkJICAgICAgICAgICAgICAgTlVMTCwgMCwgYXJnKSkgeworCQkJCSAgICAgICBOVUxMLCAwLCBhcmcpKSB7CiAJCQljcy0+d2FpdGluZyA9IDA7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWRiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIElGX1ZFUiIpOworCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSUZfVkVSIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTEwMSw3ICs5OSw3IEBACiAKIHN0YXRpYyBpbnQgaWZfY29uZmlnKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBpbnQgKmFyZykKIHsKLQlkYmcoREVCVUdfSUYsICIldTogaWZfY29uZmlnICglZCkiLCBjcy0+bWlub3JfaW5kZXgsICphcmcpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZfY29uZmlnICglZCkiLCBjcy0+bWlub3JfaW5kZXgsICphcmcpOwogCiAJaWYgKCphcmcgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDksNiArMTA3LDExIEBACiAJaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZXJyKCJub3QgY29ubmVjdGVkISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkqYXJnID0gMDsKIAlyZXR1cm4gZ2lnYXNldF9lbnRlcmNvbmZpZ21vZGUoY3MpOwogfQpAQCAtMTE5LDcgKzEyMiw3IEBACiBzdGF0aWMgaW50ICBpZl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIGlmX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQgIGlmX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgIGlmX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgaW50ICBpZl9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBpZl90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKQEAgLTEyNyw5ICsxMzAsOSBAQAogc3RhdGljIHZvaWQgaWZfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCk7CiBzdGF0aWMgaW50ICBpZl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50ICBpZl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CisJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgaWZfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKKwkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgaWZfb3BzID0gewogCS5vcGVuID0JCQlpZl9vcGVuLApAQCAtMTUzLDggKzE1Niw4IEBACiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRiZyhERUJVR19JRiwgIiVkKyVkOiAlcygpIiwgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0LCB0dHktPmluZGV4LAotCSAgICBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIlZCslZDogJXMoKSIsCisJCXR0eS0+ZHJpdmVyLT5taW5vcl9zdGFydCwgdHR5LT5pbmRleCwgX19mdW5jX18pOwogCiAJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKQEAgLTE2Miw3ICsxNjUsNyBAQAogCWlmICghY3MpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBjczsKIApAQCAtMTczLDEwICsxNzYsOSBAQAogCQljcy0+dHR5ID0gdHR5OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQl0dHktPmxvd19sYXRlbmN5ID0gMTsgLy9GSVhNRSB0ZXN0Ci0JCS8vRklYTUUKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xODcsMzAgKzE4OSwyOSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19GVU5DVElPTl9fKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fKTsKIAotCWRvd24oJmNzLT5zZW0pOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSB7CiAJCWlmICghLS1jcy0+b3Blbl9jb3VudCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCQljcy0+dHR5ID0gTlVMTDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQkvL0ZJWE1FCiAJCX0KIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGlmX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzOwogCWludCByZXR2YWwgPSAtRU5PREVWOwpAQCAtMjIwLDE3ICsyMjEsMTcgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYmcoREVCVUdfSUYsICIldTogJXMoMHgleCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXywgY21kKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAiJXU6ICVzKDB4JXgpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXywgY21kKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWlmICghY3MtPm9wZW5fY291bnQpCi0JCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXdhcm4oIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fZnVuY19fKTsKIAllbHNlIHsKIAkJcmV0dmFsID0gMDsKIAkJc3dpdGNoIChjbWQpIHsKQEAgLTI1MCwzNyArMjUxLDQwIEBACiAJCQlicmVhazsKIAkJY2FzZSBHSUdBU0VUX0JSS0NIQVJTOgogCQkJLy9GSVhNRSB0ZXN0IGlmIE1TX0xPQ0tFRAotCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0lGLCAiR0lHQVNFVF9CUktDSEFSUyIsCi0JCQkgICAgICAgICAgICAgICAgICAgNiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYXJnLCAxKTsKLQkJCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCQkJZGJnKERFQlVHX0FOWSwgImNhbid0IGNvbW11bmljYXRlIHdpdGggdW5wbHVnZ2VkIGRldmljZSIpOworCQkJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCQkJZ2lnX2RiZyhERUJVR19BTlksCisJCQkJICAgICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJCQlyZXR2YWwgPSAtRU5PREVWOwogCQkJCWJyZWFrOwogCQkJfQogCQkJcmV0dmFsID0gY29weV9mcm9tX3VzZXIoJmJ1ZiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSBhcmcsIDYpCi0JCQkgICAgICAgICA/IC1FRkFVTFQgOiAwOwotCQkJaWYgKHJldHZhbCA+PSAwKQorCQkJCQkoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKikgYXJnLCA2KQorCQkJCT8gLUVGQVVMVCA6IDA7CisJCQlpZiAocmV0dmFsID49IDApIHsKKwkJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfSUYsICJHSUdBU0VUX0JSS0NIQVJTIiwKKwkJCQkJCTYsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFyZyk7CiAJCQkJcmV0dmFsID0gY3MtPm9wcy0+YnJrY2hhcnMoY3MsIGJ1Zik7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBHSUdBU0VUX1ZFUlNJT046Ci0JCQlyZXR2YWwgPSBjb3B5X2Zyb21fdXNlcih2ZXJzaW9uLCAodW5zaWduZWQgX191c2VyICopIGFyZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiB2ZXJzaW9uKSA/IC1FRkFVTFQgOiAwOworCQkJcmV0dmFsID0gY29weV9mcm9tX3VzZXIodmVyc2lvbiwKKwkJCQkJKHVuc2lnbmVkIF9fdXNlciAqKSBhcmcsIHNpemVvZiB2ZXJzaW9uKQorCQkJCT8gLUVGQVVMVCA6IDA7CiAJCQlpZiAocmV0dmFsID49IDApCiAJCQkJcmV0dmFsID0gaWZfdmVyc2lvbihjcywgdmVyc2lvbik7CiAJCQlpZiAocmV0dmFsID49IDApCi0JCQkJcmV0dmFsID0gY29weV90b191c2VyKCh1bnNpZ25lZCBfX3VzZXIgKikgYXJnLCB2ZXJzaW9uLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgdmVyc2lvbikKLQkJCQkgICAgICAgICA/IC1FRkFVTFQgOiAwOworCQkJCXJldHZhbCA9IGNvcHlfdG9fdXNlcigodW5zaWduZWQgX191c2VyICopIGFyZywKKwkJCQkJCSAgICAgIHZlcnNpb24sIHNpemVvZiB2ZXJzaW9uKQorCQkJCQk/IC1FRkFVTFQgOiAwOwogCQkJYnJlYWs7Ci0JICAgICAgICBkZWZhdWx0OgotCQkJZGJnKERFQlVHX0FOWSwgIiVzOiBhcmcgbm90IHN1cHBvcnRlZCAtIDB4JTA0eCIsCi0JCQkgICAgX19GVU5DVElPTl9fLCBjbWQpOworCQlkZWZhdWx0OgorCQkJZ2lnX2RiZyhERUJVR19BTlksICIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLAorCQkJCV9fZnVuY19fLCBjbWQpOwogCQkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOwogCQl9CiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0yOTIsMjUgKzI5NiwyNSBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJLy8gRklYTUUgcmVhZCBmcm9tIGRldmljZT8KIAlyZXR2YWwgPSBjcy0+Y29udHJvbF9zdGF0ZSAmIChUSU9DTV9SVFN8VElPQ01fRFRSKTsKIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IGlmX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJaW50IHJldHZhbDsKQEAgLTMxOCwxOCArMzIyLDE4IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLAotCSAgICAiJXU6ICVzKDB4JXgsIDB4JXgpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18sIHNldCwgY2xlYXIpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoMHgleCwgMHgleCkiLAorCQljcy0+bWlub3JfaW5kZXgsIF9fZnVuY19fLCBzZXQsIGNsZWFyKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAl9IGVsc2UgewogCQltYyA9IChjcy0+Y29udHJvbF9zdGF0ZSB8IHNldCkgJiB+Y2xlYXIgJiAoVElPQ01fUlRTfFRJT0NNX0RUUik7CkBAIC0zMzcsNyArMzQxLDcgQEAKIAkJY3MtPmNvbnRyb2xfc3RhdGUgPSBtYzsKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM0OSwyOSArMzUzLDI5IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkgewogCQl3YXJuKCJjYW4ndCB3cml0ZSB0byB1bmxvY2tlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOwotCX0gZWxzZSBpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOworCX0gZWxzZSBpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsgLy9GSVhNRQogCX0gZWxzZSB7CiAJCXJldHZhbCA9IGNzLT5vcHMtPndyaXRlX2NtZChjcywgYnVmLCBjb3VudCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcy0+aWZfd2FrZV90YXNrbGV0KTsKKwkJCQkJICAgICZjcy0+aWZfd2FrZV90YXNrbGV0KTsKIAl9CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM4MywyNyArMzg3LDI3IEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjcy0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOyAvLyBGSVhNRSAtRUlOVFI/CiAKIAlpZiAoIWNzLT5vcGVuX2NvdW50KQotCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQl3YXJuKCIlczogZGV2aWNlIG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCkgewogCQl3YXJuKCJjYW4ndCB3cml0ZSB0byB1bmxvY2tlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOyAvL0ZJWE1FCi0JfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWRiZyhERUJVR19BTlksICJjYW4ndCB3cml0ZSB0byB1bnBsdWdnZWQgZGV2aWNlIik7CisJfSBlbHNlIGlmICghY3MtPmNvbm5lY3RlZCkgeworCQlnaWdfZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKIAkJcmV0dmFsID0gLUVCVVNZOyAvL0ZJWE1FCiAJfSBlbHNlCiAJCXJldHZhbCA9IGNzLT5vcHMtPndyaXRlX3Jvb20oY3MpOwogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC00MTUsMjcgKzQxOSwyNyBAQAogCiAJY3MgPSAoc3RydWN0IGNhcmRzdGF0ZSAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICghY3MpIHsKLQkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY3MtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZjcy0+bXN0YXRlKSAhPSBNU19MT0NLRUQpIHsKIAkJd2FybigiY2FuJ3Qgd3JpdGUgdG8gdW5sb2NrZWQgZGV2aWNlIik7CiAJCXJldHZhbCA9IC1FQlVTWTsKLQl9IGVsc2UgaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZGJnKERFQlVHX0FOWSwgImNhbid0IHdyaXRlIHRvIHVucGx1Z2dlZCBkZXZpY2UiKTsKKwl9IGVsc2UgaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3Qgd3JpdGUgdG8gdW5wbHVnZ2VkIGRldmljZSIpOwogCQlyZXR2YWwgPSAtRUJVU1k7IC8vRklYTUUKIAl9IGVsc2UKIAkJcmV0dmFsID0gY3MtPm9wcy0+Y2hhcnNfaW5fYnVmZmVyKGNzKTsKIAotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDQ2LDIxICs0NTAsMjEgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgewogCQkvL0ZJWE1FCiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaWZfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDY5LDIxICs0NzMsMjEgQEAKIAogCWNzID0gKHN0cnVjdCBjYXJkc3RhdGUgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNzKSB7Ci0JCWVycigiY3M9PU5VTEwgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JZGJnKERFQlVHX0lGLCAiJXU6ICVzKCkiLCBjcy0+bWlub3JfaW5kZXgsIF9fRlVOQ1RJT05fXyk7CisJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX2Z1bmNfXyk7CiAKLQlkb3duKCZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZjcy0+bXV0ZXgpOwogCiAJaWYgKCFjcy0+b3Blbl9jb3VudCkKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCWVsc2UgewogCQkvL0ZJWE1FCiAJfQogCi0JdXAoJmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaWZfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCkKQEAgLTQ5NiwyMSArNTAwLDIxIEBACiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewotCQllcnIoImNzPT1OVUxMIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCJjcz09TlVMTCBpbiAlcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWRiZyhERUJVR19JRiwgIiV1OiAlcygpIiwgY3MtPm1pbm9yX2luZGV4LCBfX0ZVTkNUSU9OX18pOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JZG93bigmY3MtPnNlbSk7CisJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAogCWlmICghY3MtPm9wZW5fY291bnQpIHsKLQkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJd2FybigiJXM6IGRldmljZSBub3Qgb3BlbmVkIiwgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWF0b21pY19yZWFkKCZjcy0+Y29ubmVjdGVkKSkgewotCQlkYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CisJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB1bnBsdWdnZWQgZGV2aWNlIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTE4LDggKzUyMiw4IEBACiAJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CiAJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJb2xkX2NmbGFnID0gb2xkID8gb2xkLT5jX2NmbGFnIDogY2ZsYWc7IC8vRklYTUU/Ci0JZGJnKERFQlVHX0lGLCAiJXU6IGlmbGFnICV4IGNmbGFnICV4IG9sZCAleCIsIGNzLT5taW5vcl9pbmRleCwKLQkgICAgaWZsYWcsIGNmbGFnLCBvbGRfY2ZsYWcpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogaWZsYWcgJXggY2ZsYWcgJXggb2xkICV4IiwKKwkJY3MtPm1pbm9yX2luZGV4LCBpZmxhZywgY2ZsYWcsIG9sZF9jZmxhZyk7CiAKIAkvKiBnZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBjdXJyZW50IHBvcnQgc2V0dGluZ3MgKi8KIAljb250cm9sX3N0YXRlID0gY3MtPmNvbnRyb2xfc3RhdGU7CkBAIC01MzEsMTQgKzUzNSwxNSBAQAogCSAqIFByZW1hdHVyZSBvcHRpbWl6YXRpb24gaXMgdGhlIHJvb3Qgb2YgYWxsIGV2aWwuCiAJICovCiAKLSAgICAgICAgLyogcmVhc3NlcnQgRFRSIGFuZCAobWF5YmUpIFJUUyBvbiB0cmFuc2l0aW9uIGZyb20gQjAgKi8KKwkvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLwogCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCW5ld19zdGF0ZSA9IGNvbnRyb2xfc3RhdGUgfCBUSU9DTV9EVFI7CiAJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCiAJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKQogCQkJbmV3X3N0YXRlIHw9IFRJT0NNX1JUUzsKLQkJZGJnKERFQlVHX0lGLCAiJXU6IGZyb20gQjAgLSBzZXQgRFRSJXMiLCBjcy0+bWlub3JfaW5kZXgsCi0JCSAgICAobmV3X3N0YXRlICYgVElPQ01fUlRTKSA/ICIgb25seSIgOiAiL1JUUyIpOworCQlnaWdfZGJnKERFQlVHX0lGLCAiJXU6IGZyb20gQjAgLSBzZXQgRFRSJXMiLAorCQkJY3MtPm1pbm9yX2luZGV4LAorCQkJKG5ld19zdGF0ZSAmIFRJT0NNX1JUUykgPyAiIG9ubHkiIDogIi9SVFMiKTsKIAkJY3MtPm9wcy0+c2V0X21vZGVtX2N0cmwoY3MsIGNvbnRyb2xfc3RhdGUsIG5ld19zdGF0ZSk7CiAJCWNvbnRyb2xfc3RhdGUgPSBuZXdfc3RhdGU7CiAJfQpAQCAtNTQ3LDcgKzU1Miw3IEBACiAKIAlpZiAoKGNmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KLQkJZGJnKERFQlVHX0lGLCAiJXU6IHRvIEIwIC0gZHJvcCBEVFIvUlRTIiwgY3MtPm1pbm9yX2luZGV4KTsKKwkJZ2lnX2RiZyhERUJVR19JRiwgIiV1OiB0byBCMCAtIGRyb3AgRFRSL1JUUyIsIGNzLT5taW5vcl9pbmRleCk7CiAJCW5ld19zdGF0ZSA9IGNvbnRyb2xfc3RhdGUgJiB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CiAJCWNzLT5vcHMtPnNldF9tb2RlbV9jdHJsKGNzLCBjb250cm9sX3N0YXRlLCBuZXdfc3RhdGUpOwogCQljb250cm9sX3N0YXRlID0gbmV3X3N0YXRlOwpAQCAtNTY3LDE1ICs1NzIsMTcgQEAKIAkgKiBKdXN0IGRvIHdoYXQgd2UgaGF2ZSBzZWVuIHdpdGggU25pZmZVU0Igb24gV2luOTguCiAJICovCiAJLyogRHJvcCBEVFIvUlRTIGlmIG5vIGZsb3cgY29udHJvbCBvdGhlcndpc2UgYXNzZXJ0ICovCi0JZGJnKERFQlVHX0lGLCAiJXU6IGNvbnRyb2xfc3RhdGUgJXgiLCBjcy0+bWlub3JfaW5kZXgsIGNvbnRyb2xfc3RhdGUpOworCWdpZ19kYmcoREVCVUdfSUYsICIldTogY29udHJvbF9zdGF0ZSAleCIsCisJCWNzLT5taW5vcl9pbmRleCwgY29udHJvbF9zdGF0ZSk7CiAJbmV3X3N0YXRlID0gY29udHJvbF9zdGF0ZTsKIAlpZiAoKGlmbGFnICYgSVhPRkYpIHx8IChpZmxhZyAmIElYT04pIHx8IChjZmxhZyAmIENSVFNDVFMpKQogCQluZXdfc3RhdGUgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTOwogCWVsc2UKIAkJbmV3X3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAlpZiAobmV3X3N0YXRlICE9IGNvbnRyb2xfc3RhdGUpIHsKLQkJZGJnKERFQlVHX0lGLCAiJXU6IG5ld19zdGF0ZSAleCIsIGNzLT5taW5vcl9pbmRleCwgbmV3X3N0YXRlKTsKLQkJZ2lnYXNldF9zZXRfbW9kZW1fY3RybChjcywgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlKTsgLy8gRklYTUU6IG1jdF91MjMyLmMgc2V0cyB0aGUgb2xkIHN0YXRlIGhlcmUuIGlzIHRoaXMgYSBidWc/CisJCWdpZ19kYmcoREVCVUdfSUYsICIldTogbmV3X3N0YXRlICV4IiwKKwkJCWNzLT5taW5vcl9pbmRleCwgbmV3X3N0YXRlKTsKKwkJZ2lnYXNldF9zZXRfbW9kZW1fY3RybChjcywgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlKTsKIAkJY29udHJvbF9zdGF0ZSA9IG5ld19zdGF0ZTsKIAl9CiAjZW5kaWYKQEAgLTU4NCw3ICs1OTEsNyBAQAogCWNzLT5jb250cm9sX3N0YXRlID0gY29udHJvbF9zdGF0ZTsKIAogb3V0OgotCXVwKCZjcy0+c2VtKTsKKwltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiAKIApAQCAtNjAwLDcgKzYwNyw3IEBACiAKIAlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKIAkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJZGJnKERFQlVHX0lGLCAid3JpdGUgd2FrZXVwIGNhbGwiKTsKKwkJZ2lnX2RiZyhERUJVR19JRiwgIndyaXRlIHdha2V1cCBjYWxsIik7CiAJCXR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKHR0eSk7CiAJfQogCkBAIC02MzUsMTQgKzY0MiwxNCBAQAogfQogCiB2b2lkIGdpZ2FzZXRfaWZfcmVjZWl2ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbikKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoKHR0eSA9IGNzLT50dHkpID09IE5VTEwpCi0JCWRiZyhERUJVR19BTlksICJyZWNlaXZlIG9uIGNsb3NlZCBkZXZpY2UiKTsKKwkJZ2lnX2RiZyhERUJVR19BTlksICJyZWNlaXZlIG9uIGNsb3NlZCBkZXZpY2UiKTsKIAllbHNlIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW4pOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgYnVmZmVyLCBsZW4pOwpAQCAtNjU1LDEzICs2NjIsMTMgQEAKIC8qIGdpZ2FzZXRfaWZfaW5pdGRyaXZlcgogICogSW5pdGlhbGl6ZSB0dHkgaW50ZXJmYWNlLgogICogcGFyYW1ldGVyczoKLSAqICAgICAgZHJ2ICAgICAgICAgICAgIERyaXZlcgotICogICAgICBwcm9jbmFtZSAgICAgICAgTmFtZSBvZiB0aGUgZHJpdmVyIChlLmcuIGZvciAvcHJvYy90dHkvZHJpdmVycykKLSAqICAgICAgZGV2bmFtZSAgICAgICAgIE5hbWUgb2YgdGhlIGRldmljZSBmaWxlcyAocHJlZml4IHdpdGhvdXQgbWlub3IgbnVtYmVyKQotICogICAgICBkZXZmc25hbWUgICAgICAgRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKKyAqCWRydgkJRHJpdmVyCisgKglwcm9jbmFtZQlOYW1lIG9mIHRoZSBkcml2ZXIgKGUuZy4gZm9yIC9wcm9jL3R0eS9kcml2ZXJzKQorICoJZGV2bmFtZQkJTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCisgKglkZXZmc25hbWUJRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKICAqLwogdm9pZCBnaWdhc2V0X2lmX2luaXRkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKQorCQkJICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKQogewogCXVuc2lnbmVkIG1pbm9ycyA9IGRydi0+bWlub3JzOwogCWludCByZXQ7CkBAIC02OTYsNyArNzAzLDcgQEAKIAkJd2FybigiZmFpbGVkIHRvIHJlZ2lzdGVyIHR0eSBkcml2ZXIgKGVycm9yICVkKSIsIHJldCk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRiZyhERUJVR19JRiwgInR0eSBkcml2ZXIgaW5pdGlhbGl6ZWQiKTsKKwlnaWdfZGJnKERFQlVHX0lGLCAidHR5IGRyaXZlciBpbml0aWFsaXplZCIpOwogCWRydi0+aGF2ZV90dHkgPSAxOwogCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKaW5kZXggNTc0NGViOS4uODY2N2RhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCkBAIC0xMCwxMCArMTAsNiBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBpc29jZGF0YS5jLHYgMS4yLjIuNSAyMDA1LzExLzEzIDIzOjA1OjE5IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTg3LDE0ICs4MywxNCBAQAogewogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmaXdiLT53cml0ZXNlbSkpIHsKIAkJYXRvbWljX2luYygmaXdiLT53cml0ZXNlbSk7Ci0JCWRiZyhERUJVR19JU08sCi0JCSAgICAiJXM6IGNvdWxkbid0IGFjcXVpcmUgaXNvIHdyaXRlIHNlbWFwaG9yZSIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogY291bGRuJ3QgYWNxdWlyZSBpc28gd3JpdGUgc2VtYXBob3JlIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19HSUdBU0VUX0RFQlVHCi0JZGJnKERFQlVHX0lTTywKLQkgICAgIiVzOiBhY3F1aXJlZCBpc28gd3JpdGUgc2VtYXBob3JlLCBkYXRhW3dyaXRlXT0lMDJ4LCBuYml0cz0lZCIsCi0JICAgIF9fZnVuY19fLCBpd2ItPmRhdGFbYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpXSwgaXdiLT53Yml0cyk7CisJZ2lnX2RiZyhERUJVR19JU08sCisJCSIlczogYWNxdWlyZWQgaXNvIHdyaXRlIHNlbWFwaG9yZSwgZGF0YVt3cml0ZV09JTAyeCwgbmJpdHM9JWQiLAorCQlfX2Z1bmNfXywgaXdiLT5kYXRhW2F0b21pY19yZWFkKCZpd2ItPndyaXRlKV0sIGl3Yi0+d2JpdHMpOwogI2VuZGlmCiAJcmV0dXJuIDE7CiB9CkBAIC0xNDcsNyArMTQzLDcgQEAKIAkvKiByZWNvdmVyIHRoZSBpZGxlIGZsYWcgYnl0ZSAqLwogCXdyaXRlID0gYXRvbWljX3JlYWQoJml3Yi0+d3JpdGUpOwogCWl3Yi0+aWRsZSA9IGl3Yi0+ZGF0YVt3cml0ZV07Ci0JZGJnKERFQlVHX0lTTywgImlkbGUgZmlsbCBieXRlICUwMngiLCBpd2ItPmlkbGUpOworCWdpZ19kYmcoREVCVUdfSVNPLCAiaWRsZSBmaWxsIGJ5dGUgJTAyeCIsIGl3Yi0+aWRsZSk7CiAJLyogbWFzayBleHRyYW5lb3VzIGJpdHMgaW4gYnVmZmVyICovCiAJaXdiLT5kYXRhW3dyaXRlXSAmPSAoMSA8PCBpd2ItPndiaXRzKSAtIDE7CiB9CkBAIC0xNjYsMTUgKzE2MiwxNCBAQAogCXJlYWQgPSBhdG9taWNfcmVhZCgmaXdiLT5uZXh0cmVhZCk7CiAJd3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSk7CiAJaWYgKGxpa2VseShyZWFkID09IHdyaXRlKSkgewotCQkvL2RiZyhERUJVR19TVFJFQU0sICIlczogc2VuZCBidWZmZXIgZW1wdHkiLCBfX2Z1bmNfXyk7CiAJCS8qIHJldHVybiBpZGxlIGZyYW1lICovCiAJCXJldHVybiByZWFkIDwgQkFTX09VVEJVRlBBRCA/Ci0JCSAgICAgICAgQkFTX09VVEJVRlNJWkUgOiByZWFkIC0gQkFTX09VVEJVRlBBRDsKKwkJCUJBU19PVVRCVUZTSVpFIDogcmVhZCAtIEJBU19PVVRCVUZQQUQ7CiAJfQogCiAJbGltaXQgPSByZWFkICsgc2l6ZTsKLQlkYmcoREVCVUdfU1RSRUFNLAotCSAgICAiJXM6IHJlYWQ9JWQgd3JpdGU9JWQgbGltaXQ9JWQiLCBfX2Z1bmNfXywgcmVhZCwgd3JpdGUsIGxpbWl0KTsKKwlnaWdfZGJnKERFQlVHX1NUUkVBTSwgIiVzOiByZWFkPSVkIHdyaXRlPSVkIGxpbWl0PSVkIiwKKwkJX19mdW5jX18sIHJlYWQsIHdyaXRlLCBsaW1pdCk7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfREVCVUcKIAlpZiAodW5saWtlbHkoc2l6ZSA8IDAgfHwgc2l6ZSA+IEJBU19PVVRCVUZQQUQpKSB7CiAJCWVycigiaW52YWxpZCBzaXplICVkIiwgc2l6ZSk7CkBAIC0xOTYsMTEgKzE5MSwxMiBAQAogCQkJCXJldHVybiAtRUJVU1k7CiAJCQkvKiB3cml0ZSBwb3NpdGlvbiBjb3VsZCBoYXZlIGNoYW5nZWQgKi8KIAkJCWlmIChsaW1pdCA+PSAod3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSkpKSB7Ci0JCQkJcGJ5dGUgPSBpd2ItPmRhdGFbd3JpdGVdOyAvKiBzYXZlIHBhcnRpYWwgYnl0ZSAqLworCQkJCXBieXRlID0gaXdiLT5kYXRhW3dyaXRlXTsgLyogc2F2ZQorCQkJCQkJCSAgICAgcGFydGlhbCBieXRlICovCiAJCQkJbGltaXQgPSB3cml0ZSArIEJBU19PVVRCVUZQQUQ7Ci0JCQkJZGJnKERFQlVHX1NUUkVBTSwKLQkJCQkgICAgIiVzOiBmaWxsaW5nICVkLT4lZCB3aXRoICUwMngiLAotCQkJCSAgICBfX2Z1bmNfXywgd3JpdGUsIGxpbWl0LCBpd2ItPmlkbGUpOworCQkJCWdpZ19kYmcoREVCVUdfU1RSRUFNLAorCQkJCQkiJXM6IGZpbGxpbmcgJWQtPiVkIHdpdGggJTAyeCIsCisJCQkJCV9fZnVuY19fLCB3cml0ZSwgbGltaXQsIGl3Yi0+aWRsZSk7CiAJCQkJaWYgKHdyaXRlICsgQkFTX09VVEJVRlBBRCA8IEJBU19PVVRCVUZTSVpFKQogCQkJCQltZW1zZXQoaXdiLT5kYXRhICsgd3JpdGUsIGl3Yi0+aWRsZSwKIAkJCQkJICAgICAgIEJBU19PVVRCVUZQQUQpOwpAQCAtMjExLDkgKzIwNywxMSBAQAogCQkJCQkgICAgICAgLSB3cml0ZSk7CiAJCQkJCWxpbWl0ID0gMDsKIAkJCQl9Ci0JCQkJZGJnKERFQlVHX1NUUkVBTSwgIiVzOiByZXN0b3JpbmcgJTAyeCBhdCAlZCIsCi0JCQkJICAgIF9fZnVuY19fLCBwYnl0ZSwgbGltaXQpOwotCQkJCWl3Yi0+ZGF0YVtsaW1pdF0gPSBwYnl0ZTsgLyogcmVzdG9yZSBwYXJ0aWFsIGJ5dGUgKi8KKwkJCQlnaWdfZGJnKERFQlVHX1NUUkVBTSwKKwkJCQkJIiVzOiByZXN0b3JpbmcgJTAyeCBhdCAlZCIsCisJCQkJCV9fZnVuY19fLCBwYnl0ZSwgbGltaXQpOworCQkJCWl3Yi0+ZGF0YVtsaW1pdF0gPSBwYnl0ZTsgLyogcmVzdG9yZQorCQkJCQkJCSAgICAgcGFydGlhbCBieXRlICovCiAJCQkJYXRvbWljX3NldCgmaXdiLT53cml0ZSwgbGltaXQpOwogCQkJfQogCQkJaXNvd2J1Zl9kb25ld3JpdGUoaXdiKTsKQEAgLTI0MiwxOSArMjQwLDE3IEBACiAgKiB3cml0ZSBoZXggYnl0ZXMgdG8gc3lzbG9nIGZvciBkZWJ1Z2dpbmcKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYnl0ZXMoZW51bSBkZWJ1Z2xldmVsIGxldmVsLCBjb25zdCBjaGFyICp0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGNvdW50KQorCQkJICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMsIGludCBjb3VudCkKIHsKICNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwogCXVuc2lnbmVkIGNoYXIgYzsKIAlzdGF0aWMgY2hhciBkYmdsaW5lWzMgKiAzMiArIDFdOwogCXN0YXRpYyBjb25zdCBjaGFyIGhleGRpZ2l0W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAJaW50IGkgPSAwOwotCUlGTlVMTFJFVCh0YWcpOwotCUlGTlVMTFJFVChieXRlcyk7CiAJd2hpbGUgKGNvdW50LS0gPiAwKSB7CiAJCWlmIChpID4gc2l6ZW9mKGRiZ2xpbmUpIC0gNCkgewogCQkJZGJnbGluZVtpXSA9ICdcMCc7Ci0JCQlkYmcobGV2ZWwsICIlczolcyIsIHRhZywgZGJnbGluZSk7CisJCQlnaWdfZGJnKGxldmVsLCAiJXM6JXMiLCB0YWcsIGRiZ2xpbmUpOwogCQkJaSA9IDA7CiAJCX0KIAkJYyA9ICpieXRlcysrOwpAQCAtMjY0LDcgKzI2MCw3IEBACiAJCWRiZ2xpbmVbaSsrXSA9IGhleGRpZ2l0W2MgJiAweDBmXTsKIAl9CiAJZGJnbGluZVtpXSA9ICdcMCc7Ci0JZGJnKGxldmVsLCAiJXM6JXMiLCB0YWcsIGRiZ2xpbmUpOworCWdpZ19kYmcobGV2ZWwsICIlczolcyIsIHRhZywgZGJnbGluZSk7CiAjZW5kaWYKIH0KIApAQCAtMzgwLDcgKzM3Niw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgaGRsY19iaXRzdHVmZl9ieXRlKHN0cnVjdCBpc293YnVmX3QgKml3YiwgdW5zaWduZWQgY2hhciBjaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9uZXMpCisJCQkJICAgICBpbnQgb25lcykKIHsKIAl1MTYgc3R1ZmY7CiAJaW50IHNoaWZ0aW5jLCBuZXdvbmVzOwpAQCAtNDIyLDcgKzQxOCw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgaGRsY19idWlsZGZyYW1lKHN0cnVjdCBpc293YnVmX3QgKml3YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppbiwgaW50IGNvdW50KQorCQkJCSAgdW5zaWduZWQgY2hhciAqaW4sIGludCBjb3VudCkKIHsKIAlpbnQgb25lczsKIAl1MTYgZmNzOwpAQCAtNDMxLDggKzQyNyw4IEBACiAKIAlpZiAoaXNvd2J1Zl9mcmVlYnl0ZXMoaXdiKSA8IGNvdW50ICsgY291bnQgLyA1ICsgNiB8fAogCSAgICAhaXNvd2J1Zl9zdGFydHdyaXRlKGl3YikpIHsKLQkJZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBmcmVlIC0+IC1FQUdBSU4iLAotCQkgICAgX19mdW5jX18sIGlzb3didWZfZnJlZWJ5dGVzKGl3YikpOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBmcmVlIC0+IC1FQUdBSU4iLAorCQkJX19mdW5jX18sIGlzb3didWZfZnJlZWJ5dGVzKGl3YikpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTQ4NCwxMSArNDgwLDExIEBACiAKIAlpZiAoaXNvd2J1Zl9mcmVlYnl0ZXMoaXdiKSA8IGNvdW50IHx8CiAJICAgICFpc293YnVmX3N0YXJ0d3JpdGUoaXdiKSkgewotCQlkYmcoREVCVUdfSVNPLCAiY2FuJ3QgcHV0ICVkIGJ5dGVzIiwgY291bnQpOworCQlnaWdfZGJnKERFQlVHX0lTTywgImNhbid0IHB1dCAlZCBieXRlcyIsIGNvdW50KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JZGJnKERFQlVHX1NUUkVBTSwgInB1dCAlZCBieXRlcyIsIGNvdW50KTsKKwlnaWdfZGJnKERFQlVHX1NUUkVBTSwgInB1dCAlZCBieXRlcyIsIGNvdW50KTsKIAl3cml0ZSA9IGF0b21pY19yZWFkKCZpd2ItPndyaXRlKTsKIAlkbyB7CiAJCWMgPSBnaWdhc2V0X2ludnRhYlsqaW4rK107CkBAIC01MDgsMTEgKzUwNCwxMyBAQAogCXN3aXRjaCAoYmNzLT5wcm90bzIpIHsKIAljYXNlIElTRE5fUFJPVE9fTDJfSERMQzoKIAkJcmVzdWx0ID0gaGRsY19idWlsZGZyYW1lKGJjcy0+aHcuYmFzLT5pc29vdXRidWYsIGluLCBsZW4pOwotCQlkYmcoREVCVUdfSVNPLCAiJXM6ICVkIGJ5dGVzIEhETEMgLT4gJWQiLCBfX2Z1bmNfXywgbGVuLCByZXN1bHQpOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyBIRExDIC0+ICVkIiwKKwkJCV9fZnVuY19fLCBsZW4sIHJlc3VsdCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkJLyogYXNzdW1lIHRyYW5zcGFyZW50ICovCiAJCXJlc3VsdCA9IHRyYW5zX2J1aWxkZnJhbWUoYmNzLT5ody5iYXMtPmlzb291dGJ1ZiwgaW4sIGxlbik7Ci0JCWRiZyhERUJVR19JU08sICIlczogJWQgYnl0ZXMgdHJhbnMgLT4gJWQiLCBfX2Z1bmNfXywgbGVuLCByZXN1bHQpOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiAlZCBieXRlcyB0cmFucyAtPiAlZCIsCisJCQlfX2Z1bmNfXywgbGVuLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtNTI4LDEzICs1MjYsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAodW5saWtlbHkoYmNzLT5za2ItPmxlbiA9PSBTQlVGU0laRSkpIHsKLQkJd2FybigicmVjZWl2ZWQgb3ZlcnNpemVkIHBhY2tldCBkaXNjYXJkZWQiKTsKKwkJZGV2X3dhcm4oYmNzLT5jcy0+ZGV2LCAicmVjZWl2ZWQgb3ZlcnNpemVkIHBhY2tldCBkaXNjYXJkZWRcbiIpOwogCQliY3MtPmh3LmJhcy0+Z2lhbnRzKys7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+c2tiKTsKIAkJYmNzLT5za2IgPSBOVUxMOwogCQlyZXR1cm47CiAJfQotCSpnaWdhc2V0X3NrYl9wdXRfcXVpY2soYmNzLT5za2IsIDEpID0gYzsKKwkqX19za2JfcHV0KGJjcy0+c2tiLCAxKSA9IGM7CiB9CiAKIC8qIGhkbGNfZmx1c2gKQEAgLTU0OSw3ICs1NDcsNyBAQAogCQlpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQkJc2tiX3Jlc2VydmUoYmNzLT5za2IsIEhXX0hEUl9MRU4pOwogCQllbHNlCi0JCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJfQogCiAJLyogcmVzZXQgcGFja2V0IHN0YXRlICovCkBAIC01NzEsMjMgKzU2OSwyNSBAQAogCiAJaWYgKChwcm9jc2tiID0gYmNzLT5za2IpID09IE5VTEwpIHsKIAkJLyogcHJldmlvdXMgZXJyb3IgKi8KLQkJZGJnKERFQlVHX0lTTywgIiVzOiBza2I9TlVMTCIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JU08sICIlczogc2tiPU5VTEwiLCBfX2Z1bmNfXyk7CiAJCWdpZ2FzZXRfcmN2X2Vycm9yKE5VTEwsIGJjcy0+Y3MsIGJjcyk7CiAJfSBlbHNlIGlmIChwcm9jc2tiLT5sZW4gPCAyKSB7Ci0JCW5vdGljZSgicmVjZWl2ZWQgc2hvcnQgZnJhbWUgKCVkIG9jdGV0cykiLCBwcm9jc2tiLT5sZW4pOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgInJlY2VpdmVkIHNob3J0IGZyYW1lICglZCBvY3RldHMpXG4iLAorCQkJICAgcHJvY3NrYi0+bGVuKTsKIAkJYmNzLT5ody5iYXMtPnJ1bnRzKys7CiAJCWdpZ2FzZXRfcmN2X2Vycm9yKHByb2Nza2IsIGJjcy0+Y3MsIGJjcyk7CiAJfSBlbHNlIGlmIChiY3MtPmZjcyAhPSBQUFBfR09PREZDUykgewotCQlub3RpY2UoImZyYW1lIGNoZWNrIGVycm9yICgweCUwNHgpIiwgYmNzLT5mY3MpOworCQlkZXZfbm90aWNlKGJjcy0+Y3MtPmRldiwgImZyYW1lIGNoZWNrIGVycm9yICgweCUwNHgpXG4iLAorCQkJICAgYmNzLT5mY3MpOwogCQliY3MtPmh3LmJhcy0+ZmNzZXJycysrOwogCQlnaWdhc2V0X3Jjdl9lcnJvcihwcm9jc2tiLCBiY3MtPmNzLCBiY3MpOwogCX0gZWxzZSB7CiAJCXByb2Nza2ItPmxlbiAtPSAyOwkJLyogc3VidHJhY3QgRkNTICovCiAJCXByb2Nza2ItPnRhaWwgLT0gMjsKLQkJZGJnKERFQlVHX0lTTywKLQkJICAgICIlczogZ29vZCBmcmFtZSAoJWQgb2N0ZXRzKSIsIF9fZnVuY19fLCBwcm9jc2tiLT5sZW4pOworCQlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBnb29kIGZyYW1lICglZCBvY3RldHMpIiwKKwkJCV9fZnVuY19fLCBwcm9jc2tiLT5sZW4pOwogCQlkdW1wX2J5dGVzKERFQlVHX1NUUkVBTSwKLQkJICAgICAgICAgICAicmN2IGRhdGEiLCBwcm9jc2tiLT5kYXRhLCBwcm9jc2tiLT5sZW4pOworCQkJICAgInJjdiBkYXRhIiwgcHJvY3NrYi0+ZGF0YSwgcHJvY3NrYi0+bGVuKTsKIAkJYmNzLT5ody5iYXMtPmdvb2RieXRlcyArPSBwcm9jc2tiLT5sZW47CiAJCWdpZ2FzZXRfcmN2X3NrYihwcm9jc2tiLCBiY3MtPmNzLCBiY3MpOwogCX0KQEAgLTU5NSw3ICs1OTUsNyBAQAogCWlmICgoYmNzLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTikpICE9IE5VTEwpCiAJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKIAllbHNlCi0JCWVycigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOworCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCWJjcy0+ZmNzID0gUFBQX0lOSVRGQ1M7CiB9CiAKQEAgLTYxMCwxNCArNjEwLDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlub3RpY2UoInJlY2VpdmVkIHBhcnRpYWwgYnl0ZSAoJWQgYml0cykiLCBpbmJpdHMpOworCWRldl9ub3RpY2UoYmNzLT5jcy0+ZGV2LCAicmVjZWl2ZWQgcGFydGlhbCBieXRlICglZCBiaXRzKVxuIiwgaW5iaXRzKTsKIAliY3MtPmh3LmJhcy0+YWxpZ25lcnJzKys7CiAJZ2lnYXNldF9yY3ZfZXJyb3IoYmNzLT5za2IsIGJjcy0+Y3MsIGJjcyk7CiAKIAlpZiAoKGJjcy0+c2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pKSAhPSBOVUxMKQogCQlza2JfcmVzZXJ2ZShiY3MtPnNrYiwgSFdfSERSX0xFTik7CiAJZWxzZQotCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJZGV2X2VycihiY3MtPmNzLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKIAliY3MtPmZjcyA9IFBQUF9JTklURkNTOwogfQogCkBAIC02NTksMTYgKzY1OSwxMiBAQAogICoJYmNzCXJlY2VpdmluZyBCIGNoYW5uZWwgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3VucGFjayh1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCXN0cnVjdCBiYXNfYmNfc3RhdGUgKnViYzsKKwlzdHJ1Y3QgYmFzX2JjX3N0YXRlICp1YmMgPSBiY3MtPmh3LmJhczsKIAlpbnQgaW5wdXRzdGF0ZTsKIAl1bnNpZ25lZCBzZXFsZW4sIGluYnl0ZSwgaW5iaXRzOwogCi0JSUZOVUxMUkVUKGJjcyk7Ci0JdWJjID0gYmNzLT5ody5iYXM7Ci0JSUZOVUxMUkVUKHViYyk7Ci0KIAkvKiBsb2FkIHByZXZpb3VzIHN0YXRlOgogCSAqIGlucHV0c3RhdGUgPSBzZXQgb2YgZmxhZyBiaXRzOgogCSAqIC0gSU5TX2ZsYWdfaHVudDogbm8gY29tcGxldGUgb3BlbmluZyBmbGFnIHJlY2VpdmVkIHNpbmNlIGNvbm5lY3Rpb24gc2V0dXAgb3IgbGFzdCBhYm9ydApAQCAtODU2LDcgKzg1Miw3IEBACiAgKgliY3MJcmVjZWl2aW5nIEIgY2hhbm5lbCBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHRyYW5zX3JlY2VpdmUodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBiY19zdGF0ZSAqYmNzKQorCQkJCSBzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBkb2J5dGVzOwpAQCAtODcwLDcgKzg2Niw3IEBACiAJaWYgKHVubGlrZWx5KChza2IgPSBiY3MtPnNrYikgPT0gTlVMTCkpIHsKIAkJYmNzLT5za2IgPSBza2IgPSBkZXZfYWxsb2Nfc2tiKFNCVUZTSVpFICsgSFdfSERSX0xFTik7CiAJCWlmICghc2tiKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJCWRldl9lcnIoYmNzLT5jcy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJc2tiX3Jlc2VydmUoc2tiLCBIV19IRFJfTEVOKTsKQEAgLTg4OCw3ICs4ODQsOCBAQAogCQkJZ2lnYXNldF9yY3Zfc2tiKHNrYiwgYmNzLT5jcywgYmNzKTsKIAkJCWJjcy0+c2tiID0gc2tiID0gZGV2X2FsbG9jX3NrYihTQlVGU0laRSArIEhXX0hEUl9MRU4pOwogCQkJaWYgKCFza2IpIHsKLQkJCQllcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBza2IiKTsKKwkJCQlkZXZfZXJyKGJjcy0+Y3MtPmRldiwKKwkJCQkJImNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYl9yZXNlcnZlKGJjcy0+c2tiLCBIV19IRFJfTEVOKTsKQEAgLTkyMSw4ICs5MTgsOCBAQAogCQljYXNlICdccic6CiAJCWNhc2UgJ1xuJzoKIAkJCS8qIGVuZCBvZiBsaW5lICovCi0JCQlkYmcoREVCVUdfVFJBTlNDTUQsICIlczogRW5kIG9mIENvbW1hbmQgKCVkIEJ5dGVzKSIsCi0JCQkgICAgX19mdW5jX18sIGNieXRlcyk7CisJCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAiJXM6IEVuZCBvZiBDb21tYW5kICglZCBCeXRlcykiLAorCQkJCV9fZnVuY19fLCBjYnl0ZXMpOwogCQkJY3MtPmNieXRlcyA9IGNieXRlczsKIAkJCWdpZ2FzZXRfaGFuZGxlX21vZGVtX3Jlc3BvbnNlKGNzKTsKIAkJCWNieXRlcyA9IDA7CkBAIC05MzIsNyArOTI5LDcgQEAKIAkJCWlmIChjYnl0ZXMgPCBNQVhfUkVTUF9TSVpFIC0gMSkKIAkJCQljYnl0ZXMrKzsKIAkJCWVsc2UKLQkJCQl3YXJuKCJyZXNwb25zZSB0b28gbGFyZ2UiKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlXG4iKTsKIAkJfQogCX0KIApAQCAtOTUxLDI3ICs5NDgsMjcgQEAKIAogCWhlYWQgPSBhdG9taWNfcmVhZCgmaW5idWYtPmhlYWQpOwogCXdoaWxlIChoZWFkICE9ICh0YWlsID0gYXRvbWljX3JlYWQoJmluYnVmLT50YWlsKSkpIHsKLQkJZGJnKERFQlVHX0lOVFIsICJidWZmZXIgc3RhdGU6ICV1IC0+ICV1IiwgaGVhZCwgdGFpbCk7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgImJ1ZmZlciBzdGF0ZTogJXUgLT4gJXUiLCBoZWFkLCB0YWlsKTsKIAkJaWYgKGhlYWQgPiB0YWlsKQogCQkJdGFpbCA9IFJCVUZTSVpFOwogCQlzcmMgPSBpbmJ1Zi0+ZGF0YSArIGhlYWQ7CiAJCW51bWJ5dGVzID0gdGFpbCAtIGhlYWQ7Ci0JCWRiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAicHJvY2Vzc2luZyAldSBieXRlcyIsIG51bWJ5dGVzKTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpID09IE1TX0xPQ0tFRCkgewogCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0xPQ0tDTUQsICJyZWNlaXZlZCByZXNwb25zZSIsCi0JCQkgICAgICAgICAgICAgICAgICAgbnVtYnl0ZXMsIHNyYywgMCk7CisJCQkJCSAgIG51bWJ5dGVzLCBzcmMpOwogCQkJZ2lnYXNldF9pZl9yZWNlaXZlKGluYnVmLT5jcywgc3JjLCBudW1ieXRlcyk7CiAJCX0gZWxzZSB7CiAJCQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLAotCQkJICAgICAgICAgICAgICAgICAgIG51bWJ5dGVzLCBzcmMsIDApOworCQkJCQkgICBudW1ieXRlcywgc3JjKTsKIAkJCWNtZF9sb29wKHNyYywgbnVtYnl0ZXMsIGluYnVmKTsKIAkJfQogCiAJCWhlYWQgKz0gbnVtYnl0ZXM7CiAJCWlmIChoZWFkID09IFJCVUZTSVpFKQogCQkJaGVhZCA9IDA7Ci0JCWRiZyhERUJVR19JTlRSLCAic2V0dGluZyBoZWFkIHRvICV1IiwgaGVhZCk7CisJCWdpZ19kYmcoREVCVUdfSU5UUiwgInNldHRpbmcgaGVhZCB0byAldSIsIGhlYWQpOwogCQlhdG9taWNfc2V0KCZpbmJ1Zi0+aGVhZCwgaGVhZCk7CiAJfQogfQpAQCAtOTkyLDE4ICs5ODksMjIgQEAKICAqLwogaW50IGdpZ2FzZXRfaXNvY19zZW5kX3NrYihzdHJ1Y3QgYmNfc3RhdGUgKmJjcywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgbGVuOworCWludCBsZW4gPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUVkFMKGJjcywgLUVGQVVMVCk7Ci0JSUZOVUxMUkVUVkFMKHNrYiwgLUVGQVVMVCk7Ci0JbGVuID0gc2tiLT5sZW47CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWJjcy0+Y3MtPmNvbm5lY3RlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCXNrYl9xdWV1ZV90YWlsKCZiY3MtPnNxdWV1ZSwgc2tiKTsKLQlkYmcoREVCVUdfSVNPLAotCSAgICAiJXM6IHNrYiBxdWV1ZWQsIHFsZW49JWQiLCBfX2Z1bmNfXywgc2tiX3F1ZXVlX2xlbigmYmNzLT5zcXVldWUpKTsKKwlnaWdfZGJnKERFQlVHX0lTTywgIiVzOiBza2IgcXVldWVkLCBxbGVuPSVkIiwKKwkJX19mdW5jX18sIHNrYl9xdWV1ZV9sZW4oJmJjcy0+c3F1ZXVlKSk7CiAKIAkvKiB0YXNrbGV0IHN1Ym1pdHMgVVJCIGlmIG5lY2Vzc2FyeSAqLwogCXRhc2tsZXRfc2NoZWR1bGUoJmJjcy0+aHcuYmFzLT5zZW50X3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBsZW47CS8qIG9rIHNvIGZhciAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jCmluZGV4IGM2OTE1ZmEuLmQyNjdhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3R1ZmYgdXNlZCBieSBhbGwgdmFyaWFudHMgb2YgdGhlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPiwKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzLAogICogICAgICAgICAgICAgICAgICAgICAgIEhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwKICAqICAgICAgICAgICAgICAgICAgICAgICBUaWxtYW4gU2NobWlkdCA8dGlsbWFuQGltYXAuY2M+LgogICoKQEAgLTExLDI2ICsxMSwyOSBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUb0RvOiAuLi4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVmVyc2lvbjogJElkOiBwcm9jLmMsdiAxLjUuMi4xMyAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCi1zdGF0aWMgc3NpemVfdCBzaG93X2NpZG1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19jaWRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYXRvbWljX3JlYWQoJmNzLT5jaWRtb2RlKSk7IC8vIEZJWE1FIHVzZSBzY25wcmludGYgZm9yIDEzNjA3IGJpdCBhcmNoaXRlY3R1cmVzIChpZiBQQUdFX1NJWkU9PTQwOTYpCisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjcy0+Y2lkbW9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF9jaWRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2V0X2NpZG1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWxvbmcgaW50IHZhbHVlOwogCWNoYXIgKmVuZDsKIApAQCAtNDEsMjMgKzQ0LDIzIEBACiAJaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8vIEZJWE1FIC1FSU5UUj8KIAogCWNzLT53YWl0aW5nID0gMTsKIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9QUk9DX0NJRE1PREUsCi0JCSAgICAgICAgICAgICAgIE5VTEwsIHZhbHVlLCBOVUxMKSkgeworCQkJICAgICAgIE5VTEwsIHZhbHVlLCBOVUxMKSkgewogCQljcy0+d2FpdGluZyA9IDA7Ci0JCXVwKCZjcy0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBQUk9DX0NJRE1PREUiKTsKKwlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgUFJPQ19DSURNT0RFIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CiAKLQl1cCgmY3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNjUsMTcgKzY4LDE1IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoY2lkbW9kZSwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2NpZG1vZGUsIHNldF9jaWRtb2RlKTsKIAogLyogZnJlZSBzeXNmcyBmb3IgZGV2aWNlICovCi12b2lkIGdpZ2FzZXRfZnJlZV9kZXZfc3lzZnMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3ZvaWQgZ2lnYXNldF9mcmVlX2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlkYmcoREVCVUdfSU5JVCwgInJlbW92aW5nIHN5c2ZzIGVudHJpZXMiKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CisJZ2lnX2RiZyhERUJVR19JTklULCAicmVtb3Zpbmcgc3lzZnMgZW50cmllcyIpOworCWRldmljZV9yZW1vdmVfZmlsZShjcy0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKTsKIAogLyogaW5pdGlhbGl6ZSBzeXNmcyBmb3IgZGV2aWNlICovCi12b2lkIGdpZ2FzZXRfaW5pdF9kZXZfc3lzZnMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3ZvaWQgZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhzdHJ1Y3QgY2FyZHN0YXRlICpjcykKIHsKLQlkYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgc3lzZnMiKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CisJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBzeXNmcyIpOworCWRldmljZV9jcmVhdGVfZmlsZShjcy0+ZGV2LCAmZGV2X2F0dHJfY2lkbW9kZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChnaWdhc2V0X2luaXRfZGV2X3N5c2ZzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCmluZGV4IDMyM2ZjNzMuLmQ4NmFiNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBVU0IgZHJpdmVyIGZvciBHaWdhc2V0IDMwN3ggZGlyZWN0bHkgb3IgdXNpbmcgTTEwNSBEYXRhLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBieSBTdGVmYW4gRWlsZXJzIDxFaWxlcnMuU3RlZmFuQGVwb3N0LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IFN0ZWZhbiBFaWxlcnMKICAqICAgICAgICAgICAgICAgICAgIGFuZCBIYW5zam9lcmcgTGlwcCA8aGpsaXBwQHdlYi5kZT4uCiAgKgogICogVGhpcyBkcml2ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgVVNCIHNrZWxldG9uIGRyaXZlciBieQpAQCAtMTMsMTAgKzEzLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9EbzogLi4uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFZlcnNpb246ICRJZDogdXNiLWdpZ2FzZXQuYyx2IDEuODUuNC4xOCAyMDA2LzAyLzA0IDE4OjI4OjE2IGhqbGlwcCBFeHAgJAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKQEAgLTI5LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgU3RlZmFuIEVpbGVycyA8RWlsZXJzLlN0ZWZhbkBlcG9zdC5kZT4iCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhbnNqb2VyZyBMaXBwIDxoamxpcHBAd2ViLmRlPiwgU3RlZmFuIEVpbGVycyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBEcml2ZXIgZm9yIEdpZ2FzZXQgMzA3eCB1c2luZyBNMTA1IgogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtNjIsMTAgKzU4LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdpZ2FzZXRfdGFibGUpOwogCi0vKiBHZXQgYSBtaW5vciByYW5nZSBmb3IgeW91ciBkZXZpY2VzIGZyb20gdGhlIHVzYiBtYWludGFpbmVyICovCi0jZGVmaW5lIFVTQl9TS0VMX01JTk9SX0JBU0UJMjAwCi0KLQogLyoKICAqIENvbnRyb2wgcmVxdWVzdHMgKGVtcHR5IGZpZWxkczogMDApCiAgKgpAQCAtMTE0LDcgKzEwNiw3IEBACiAgKi8KIAogc3RhdGljIGludCBnaWdhc2V0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgZ2lnYXNldF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiBzdGF0aWMgc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcml2ZXIgPSBOVUxMOwpAQCAtMTIyLDI5ICsxMTQsMjkgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdpZ2FzZXRfdXNiX2RyaXZlciA9IHsKLQkubmFtZSA9ICAgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLAotCS5wcm9iZSA9ICAgICAgICBnaWdhc2V0X3Byb2JlLAotCS5kaXNjb25uZWN0ID0gICBnaWdhc2V0X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gICAgIGdpZ2FzZXRfdGFibGUsCisJLm5hbWUgPQkJR0lHQVNFVF9NT0RVTEVOQU1FLAorCS5wcm9iZSA9CWdpZ2FzZXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlnaWdhc2V0X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JZ2lnYXNldF90YWJsZSwKIH07CiAKIHN0cnVjdCB1c2JfY2FyZHN0YXRlIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdWRldjsgICAgICAgICAgICAgICAgICAvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgICAgKmludGVyZmFjZTsgICAgICAgICAgICAgLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KLQlhdG9taWNfdCAgICAgICAgICAgICAgICBidXN5OyAgICAgICAgICAgICAgICAgICAvKiBidWxrIG91dHB1dCBpbiBwcm9ncmVzcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwkJLyogdXNiIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsJLyogaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCWF0b21pY190CQlidXN5OwkJLyogYnVsayBvdXRwdXQgaW4gcHJvZ3Jlc3MgKi8KIAotCS8qIE91dHB1dCBidWZmZXIgZm9yIGNvbW1hbmRzIChNMTA1OiBhbmQgZGF0YSkqLwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICpidWxrX291dF9idWZmZXI7ICAgICAgIC8qIHRoZSBidWZmZXIgdG8gc2VuZCBkYXRhICovCi0JaW50ICAgICAgICAgICAgICAgICAgICAgYnVsa19vdXRfc2l6ZTsgICAgICAgICAgLyogdGhlIHNpemUgb2YgdGhlIHNlbmQgYnVmZmVyICovCi0JX191OCAgICAgICAgICAgICAgICAgICAgYnVsa19vdXRfZW5kcG9pbnRBZGRyOyAgLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKmJ1bGtfb3V0X3VyYjsgICAgICAgICAgLyogdGhlIHVyYiB1c2VkIHRvIHRyYW5zbWl0IGRhdGEgKi8KKwkvKiBPdXRwdXQgYnVmZmVyICovCisJdW5zaWduZWQgY2hhcgkJKmJ1bGtfb3V0X2J1ZmZlcjsKKwlpbnQJCQlidWxrX291dF9zaXplOworCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHI7CisJc3RydWN0IHVyYgkJKmJ1bGtfb3V0X3VyYjsKIAotCS8qIElucHV0IGJ1ZmZlciBmb3IgY29tbWFuZCByZXNwb25zZXMgKE0xMDU6IGFuZCBkYXRhKSovCi0JaW50ICAgICAgICAgICAgICAgICAgICAgcmN2YnVmX3NpemU7ICAgICAgICAgICAgLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnJlYWRfdXJiOyAgICAgICAgICAgICAgLyogdGhlIHVyYiB1c2VkIHRvIHJlY2VpdmUgZGF0YSAqLwotCV9fdTggICAgICAgICAgICAgICAgICAgIGludF9pbl9lbmRwb2ludEFkZHI7ICAgIC8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJLyogSW5wdXQgYnVmZmVyICovCisJaW50CQkJcmN2YnVmX3NpemU7CisJc3RydWN0IHVyYgkJKnJlYWRfdXJiOworCV9fdTgJCQlpbnRfaW5fZW5kcG9pbnRBZGRyOwogCi0JY2hhciAgICAgICAgICAgICAgICAgICAgYmNoYXJzWzZdOyAgICAgICAgICAgICAgLyogcmVxLiAweDE5ICovCisJY2hhcgkJCWJjaGFyc1s2XTsJCS8qIGZvciByZXF1ZXN0IDB4MTkgKi8KIH07CiAKIHN0cnVjdCB1c2JfYmNfc3RhdGUge307CkBAIC0xNTcsMTkgKzE0OSwyMCBAQAogI2lmZGVmIENPTkZJR19HSUdBU0VUX1VORE9DUkVRCiAvKiBXQVJOSU5HOiBFWFBFUklNRU5UQUwhICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdfc3RhdGUpCisJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjcy0+aHcudXNiLT51ZGV2OwogCXVuc2lnbmVkIG1hc2ssIHZhbDsKIAlpbnQgcjsKIAogCW1hc2sgPSB0aW9jbV90b19naWdhc2V0KG9sZF9zdGF0ZSBeIG5ld19zdGF0ZSk7CiAJdmFsID0gdGlvY21fdG9fZ2lnYXNldChuZXdfc3RhdGUpOwogCi0JZGJnKERFQlVHX1VTQlJFUSwgInNldCBmbGFncyAweCUwMnggd2l0aCBtYXNrIDB4JTAyeCIsIHZhbCwgbWFzayk7Ci0JciA9IHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgdXNiX3NuZGN0cmxwaXBlKGNzLT5ody51c2ItPnVkZXYsIDApLCA3LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgKHZhbCAmIDB4ZmYpIHwgKChtYXNrICYgMHhmZikgPDwgOCksIDAsCi0JICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAyMDAwIC8qdGltZW91dD8/Ki8pOyAvLyBkb24ndCB1c2UgdGhpcyBpbiBhbiBpbnRlcnJ1cHQvQkgKKwlnaWdfZGJnKERFQlVHX1VTQlJFUSwgInNldCBmbGFncyAweCUwMnggd2l0aCBtYXNrIDB4JTAyeCIsIHZhbCwgbWFzayk7CisJLy8gZG9uJ3QgdXNlIHRoaXMgaW4gYW4gaW50ZXJydXB0L0JICisJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDcsIDB4NDEsCisJCQkgICAgKHZhbCAmIDB4ZmYpIHwgKChtYXNrICYgMHhmZikgPDwgOCksIDAsCisJCQkgICAgTlVMTCwgMCwgMjAwMCAvKiB0aW1lb3V0PyAqLyk7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIAkvLy4uCkBAIC0xNzgsMzAgKzE3MSwyOSBAQAogCiBzdGF0aWMgaW50IHNldF92YWx1ZShzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdTggcmVxLCB1MTYgdmFsKQogeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY3MtPmh3LnVzYi0+dWRldjsKIAlpbnQgciwgcjI7CiAKLQlkYmcoREVCVUdfVVNCUkVRLCAicmVxdWVzdCAlMDJ4ICglMDR4KSIsICh1bnNpZ25lZClyZXEsICh1bnNpZ25lZCl2YWwpOwotCXIgPSB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgMHgxMiwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgIDB4ZiAvKj8qLywgMCwKLQkgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIDIwMDAgLyo/Ki8pOyAvKiBubyBpZGVhLCB3aGF0IHRoaXMgZG9lcyAqLworCWdpZ19kYmcoREVCVUdfVVNCUkVRLCAicmVxdWVzdCAlMDJ4ICglMDR4KSIsCisJCSh1bnNpZ25lZClyZXEsICh1bnNpZ25lZCl2YWwpOworCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDEyLCAweDQxLAorCQkJICAgIDB4ZiAvKj8qLywgMCwgTlVMTCwgMCwgMjAwMCAvKj8qLyk7CisJCQkgICAgLyogbm8gaWRlYSB3aGF0IHRoaXMgZG9lcyAqLwogCWlmIChyIDwgMCkgewotCQllcnIoImVycm9yICVkIG9uIHJlcXVlc3QgMHgxMiIsIC1yKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXJyb3IgJWQgb24gcmVxdWVzdCAweDEyXG4iLCAtcik7CiAJCXJldHVybiByOwogCX0KIAotCXIgPSB1c2JfY29udHJvbF9tc2coY3MtPmh3LnVzYi0+dWRldiwKLQkgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgcmVxLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgdmFsLCAwLAotCSAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMjAwMCAvKj8qLyk7CisJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIHJlcSwgMHg0MSwKKwkJCSAgICB2YWwsIDAsIE5VTEwsIDAsIDIwMDAgLyo/Ki8pOwogCWlmIChyIDwgMCkKLQkJZXJyKCJlcnJvciAlZCBvbiByZXF1ZXN0IDB4JTAyeCIsIC1yLCAodW5zaWduZWQpcmVxKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXJyb3IgJWQgb24gcmVxdWVzdCAweCUwMnhcbiIsCisJCQktciwgKHVuc2lnbmVkKXJlcSk7CiAKLQlyMiA9IHVzYl9jb250cm9sX21zZyhjcy0+aHcudXNiLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShjcy0+aHcudXNiLT51ZGV2LCAwKSwgMHgxOSwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjcy0+aHcudXNiLT5iY2hhcnMsIDYsIDIwMDAgLyo/Ki8pOworCXIyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxOSwgMHg0MSwKKwkJCSAgICAgMCwgMCwgY3MtPmh3LnVzYi0+YmNoYXJzLCA2LCAyMDAwIC8qPyovKTsKIAlpZiAocjIgPCAwKQotCQllcnIoImVycm9yICVkIG9uIHJlcXVlc3QgMHgxOSIsIC1yMik7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImVycm9yICVkIG9uIHJlcXVlc3QgMHgxOVxuIiwgLXIyKTsKIAogCXJldHVybiByIDwgMCA/IHIgOiAocjIgPCAwID8gcjIgOiAwKTsKIH0KQEAgLTIyOSw4ICsyMjEsOCBAQAogCWNhc2UgQjExNTIwMDogcmF0ZSA9ICAxMTUyMDA7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCXJhdGUgPSAgOTYwMDsKLQkJZXJyKCJ1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0IDB4JXgsIgotCQkgICAgIiB1c2luZyBkZWZhdWx0IG9mIEI5NjAwIiwgY2ZsYWcpOworCQlkZXZfZXJyKGNzLT5kZXYsICJ1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0IDB4JXgsIgorCQkJIiB1c2luZyBkZWZhdWx0IG9mIEI5NjAwXG4iLCBjZmxhZyk7CiAJfQogCiAJdmFsID0gMHgzODNmZmYgLyByYXRlICsgMTsKQEAgLTI1OSw3ICsyNTEsNyBAQAogCWNhc2UgQ1M4OgogCQl2YWwgfD0gOCA8PCA4OyBicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCWRldl9lcnIoY3MtPmRldiwgIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJdmFsIHw9IDggPDwgODsKIAkJYnJlYWs7CiAJfQpAQCAtMjc3LDcgKzI2OSw3IEBACiAKICNlbHNlCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdfc3RhdGUpCisJCQkJICB1bnNpZ25lZCBuZXdfc3RhdGUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMDksMTUgKzMwMSwxMiBAQAogCXJldHVybiAwOwogfQogCi0vL3ZvaWQgc2VuZF9hY2tfdG9fTEwodm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IHdyaXRlX21vZGVtKHN0cnVjdCBjYXJkc3RhdGUgKmNzKTsKIHN0YXRpYyBpbnQgc2VuZF9jYihzdHJ1Y3QgY2FyZHN0YXRlICpjcywgc3RydWN0IGNtZGJ1Zl90ICpjYik7CiAKIAotLyogSGFuZGxpbmcgb2Ygc2VuZCBxdWV1ZS4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNrYiBvcGVuZWQsIHB1dCBkYXRhIHRvCi0gKiB0aGUgdHJhbnNmZXIgYnVmZmVyIGJ5IGNhbGxpbmcgIndyaXRlX21vZGVtIi4gT3RoZXJ3aXNlIHRha2UgYSBuZXcgc2tiIG91dCBvZiB0aGUgcXVldWUuCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBJU1IgdmlhICJ0cmFuc21pdF9jaGFycyIgKFVTQjogQi1DaGFubmVsIEJ1bGsgY2FsbGJhY2sgaGFuZGxlcgotICogdmlhIGltbWVkaWF0ZSB0YXNrIHF1ZXVlKSBvciBieSB3cml0ZWJ1Zl9mcm9tX0xMIGlmIHRoZSBMTCB3YW50cyB0byB0cmFuc21pdCBkYXRhLgorLyogV3JpdGUgdGFza2xldCBoYW5kbGVyOiBDb250aW51ZSBzZW5kaW5nIGN1cnJlbnQgc2tiLCBvciBzZW5kIGNvbW1hbmQsIG9yCisgKiBzdGFydCBzZW5kaW5nIGFuIHNrYiBmcm9tIHRoZSBzZW5kIHF1ZXVlLgogICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X21vZGVtX2ZpbGwodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMzI3LDEwICszMTYsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBhZ2FpbjsKIAotCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsIik7CisJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsIik7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNzLT5ody51c2ItPmJ1c3kpKSB7Ci0JCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiBidXN5Iik7CisJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogYnVzeSIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNDEsMjYgKzMzMCwyNyBAQAogCQkJY2IgPSBjcy0+Y21kYnVmOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAkJCWlmIChjYikgeyAvKiBjb21tYW5kcyB0byBzZW5kPyAqLwotCQkJCWRiZyhERUJVR19PVVRQVVQsICJtb2RlbV9maWxsOiBjYiIpOworCQkJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogY2IiKTsKIAkJCQlpZiAoc2VuZF9jYihjcywgY2IpIDwgMCkgewotCQkJCQlkYmcoREVCVUdfT1VUUFVULAotCQkJCQkgICAgIm1vZGVtX2ZpbGw6IHNlbmRfY2IgZmFpbGVkIik7Ci0JCQkJCWFnYWluID0gMTsgLyogbm8gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQhICovCisJCQkJCWdpZ19kYmcoREVCVUdfT1VUUFVULAorCQkJCQkJIm1vZGVtX2ZpbGw6IHNlbmRfY2IgZmFpbGVkIik7CisJCQkJCWFnYWluID0gMTsgLyogbm8gY2FsbGJhY2sgd2lsbCBiZQorCQkJCQkJICAgICAgY2FsbGVkISAqLwogCQkJCX0KIAkJCX0gZWxzZSB7IC8qIHNrYnMgdG8gc2VuZD8gKi8KIAkJCQliY3MtPnR4X3NrYiA9IHNrYl9kZXF1ZXVlKCZiY3MtPnNxdWV1ZSk7CiAJCQkJaWYgKGJjcy0+dHhfc2tiKQotCQkJCQlkYmcoREVCVUdfSU5UUiwKLQkJCQkJICAgICJEZXF1ZXVlZCBza2IgKEFkcjogJWx4KSEiLAotCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGJjcy0+dHhfc2tiKTsKKwkJCQkJZ2lnX2RiZyhERUJVR19JTlRSLAorCQkJCQkJIkRlcXVldWVkIHNrYiAoQWRyOiAlbHgpISIsCisJCQkJCQkodW5zaWduZWQgbG9uZykgYmNzLT50eF9za2IpOwogCQkJfQogCQl9CiAKIAkJaWYgKGJjcy0+dHhfc2tiKSB7Ci0JCQlkYmcoREVCVUdfT1VUUFVULCAibW9kZW1fZmlsbDogdHhfc2tiIik7CisJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgIm1vZGVtX2ZpbGw6IHR4X3NrYiIpOwogCQkJaWYgKHdyaXRlX21vZGVtKGNzKSA8IDApIHsKLQkJCQlkYmcoREVCVUdfT1VUUFVULAotCQkJCSAgICAibW9kZW1fZmlsbDogd3JpdGVfbW9kZW0gZmFpbGVkIik7CisJCQkJZ2lnX2RiZyhERUJVR19PVVRQVVQsCisJCQkJCSJtb2RlbV9maWxsOiB3cml0ZV9tb2RlbSBmYWlsZWQiKTsKIAkJCQkvLyBGSVhNRSBzaG91bGQgd2UgdGVsbCB0aGUgTEw/CiAJCQkJYWdhaW4gPSAxOyAvKiBubyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCEgKi8KIAkJCX0KQEAgLTM3MSw4OCArMzYxLDg1IEBACiAvKioKICAqCWdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2sKICAqCi0gKiAgICAgIEl0IGlzIGNhbGxlZCBpZiB0aGUgZGF0YSB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIGlzIGFsbW9zdCBzaW1pbGlhciB0bwotICogICAgICB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBpbiB0aGUgc2VyaWFsIGRldmljZS4KKyAqCUl0IGlzIGNhbGxlZCBpZiB0aGUgZGF0YSB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLgogICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IGluYnVmX3QgKmluYnVmID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCWludCByZXN1Ym1pdCA9IDA7CiAJaW50IHI7Ci0Jc3RydWN0IGNhcmRzdGF0ZSAqY3M7CiAJdW5zaWduZWQgbnVtYnl0ZXM7CiAJdW5zaWduZWQgY2hhciAqc3JjOwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaW5idWZfdCAqaW5idWY7Ci0KLQlJRk5VTExSRVQodXJiKTsKLQlpbmJ1ZiA9IChzdHJ1Y3QgaW5idWZfdCAqKSB1cmItPmNvbnRleHQ7Ci0JSUZOVUxMUkVUKGluYnVmKTsKLQkvL3NwaW5fbG9ja19pcnFzYXZlKCZpbmJ1Zi0+bG9jaywgZmxhZ3MpOwotCWNzID0gaW5idWYtPmNzOwotCUlGTlVMTEdPVE8oY3MsIGV4aXQpOwotCUlGTlVMTEdPVE8oY2FyZHN0YXRlLCBleGl0KTsKLQotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJZ290byBleGl0OwotCX0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCF1cmItPnN0YXR1cykgeworCQlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwkJCWVycigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJcmV0dXJuOworCQl9CisKIAkJbnVtYnl0ZXMgPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAKIAkJaWYgKG51bWJ5dGVzKSB7CiAJCQlzcmMgPSBpbmJ1Zi0+cmN2YnVmOwogCQkJaWYgKHVubGlrZWx5KCpzcmMpKQotCQkJCXdhcm4oIiVzOiBUaGVyZSB3YXMgbm8gbGVhZGluZyAwLCBidXQgMHglMDJ4ISIsCi0JCQkJICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkKSAqc3JjKTsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LAorCQkJCSAgICAiJXM6IFRoZXJlIHdhcyBubyBsZWFkaW5nIDAsIGJ1dCAweCUwMnghXG4iLAorCQkJCQkgX19mdW5jX18sICh1bnNpZ25lZCkgKnNyYyk7CiAJCQkrK3NyYzsgLyogc2tpcCBsZWFkaW5nIDB4MDAgKi8KIAkJCS0tbnVtYnl0ZXM7CiAJCQlpZiAoZ2lnYXNldF9maWxsX2luYnVmKGluYnVmLCBzcmMsIG51bWJ5dGVzKSkgewotCQkJCWRiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKKwkJCQlnaWdfZGJnKERFQlVHX0lOVFIsICIlcy0tPkJIIiwgX19mdW5jX18pOwogCQkJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoaW5idWYtPmNzKTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlkYmcoREVCVUdfSU5UUiwgIlJlY2VpdmVkIHplcm8gYmxvY2sgbGVuZ3RoIik7CisJCQlnaWdfZGJnKERFQlVHX0lOVFIsICJSZWNlaXZlZCB6ZXJvIGJsb2NrIGxlbmd0aCIpOwogCQlyZXN1Ym1pdCA9IDE7CiAJfSBlbHNlIHsKIAkJLyogVGhlIHVyYiBtaWdodCBoYXZlIGJlZW4ga2lsbGVkLiAqLwotCQlkYmcoREVCVUdfQU5ZLCAiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAvKiBub3Qga2lsbGVkICovCisJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSB7IC8qIG5vdCBraWxsZWQgKi8KKwkJCWlmICghY3MtPmNvbm5lY3RlZCkgeworCQkJCWVycigiJXM6IGRpc2Nvbm5lY3RlZCIsIF9fZnVuY19fKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJCXJldHVybjsKKwkJCX0KIAkJCXJlc3VibWl0ID0gMTsKKwkJfQogCX0KLWV4aXQ6Ci0JLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmJ1Zi0+bG9jaywgZmxhZ3MpOworCiAJaWYgKHJlc3VibWl0KSB7Ci0JCXIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCXIgPSBjcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQykgOiAtRU5PREVWOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlpZiAocikKLQkJCWVycigiZXJyb3IgJWQgd2hlbiByZXN1Ym1pdHRpbmcgdXJiLiIsIC1yKTsKKwkJCWRldl9lcnIoY3MtPmRldiwgImVycm9yICVkIHdoZW4gcmVzdWJtaXR0aW5nIHVyYi5cbiIsCisJCQkJLXIpOwogCX0KIH0KIAogCi0vKiBUaGlzIGNhbGxiYWNrIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gZGF0YSB3YXMgdHJhbnNtaXR0ZWQgdG8gYSBCLUNoYW5uZWwuCi0gKiBUaGVyZWZvcmUgaXQgaGFzIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgdG8gdHJhbnNtaXQuIFRoaXMKLSAqIGhhcHBlbnMgYnkgY2FsbGluZyBtb2RlbV9maWxsIHZpYSB0YXNrIHF1ZXVlLgotICoKLSAqLworLyogVGhpcyBjYWxsYmFjayByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGRhdGEgd2FzIHRyYW5zbWl0dGVkIHRvIHRoZSBkZXZpY2UuICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSUZOVUxMUkVUKGNzKTsKLSNpZmRlZiBDT05GSUdfR0lHQVNFVF9ERUJVRwotCWlmICghYXRvbWljX3JlYWQoJmNzLT5jb25uZWN0ZWQpKSB7Ci0JCWVycigiJXM6bm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgogCWlmICh1cmItPnN0YXR1cykKLQkJZXJyKCJidWxrIHRyYW5zZmVyIGZhaWxlZCAoc3RhdHVzICVkKSIsIC11cmItPnN0YXR1cyk7IC8qIFRoYXQncyBhbGwgd2UgY2FuIGRvLiBDb21tdW5pY2F0aW9uIHByb2JsZW1zCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGhhbmRlbGVkIGJ5IHRpbWVvdXRzIG9yIG5ldHdvcmsgcHJvdG9jb2xzICovCisJCWRldl9lcnIoY3MtPmRldiwgImJ1bGsgdHJhbnNmZXIgZmFpbGVkIChzdGF0dXMgJWQpXG4iLAorCQkJLXVyYi0+c3RhdHVzKTsKKwkJLyogVGhhdCdzIGFsbCB3ZSBjYW4gZG8uIENvbW11bmljYXRpb24gcHJvYmxlbXMKKwkJICAgYXJlIGhhbmRsZWQgYnkgdGltZW91dHMgb3IgbmV0d29yayBwcm90b2NvbHMuICovCiAKLQlhdG9taWNfc2V0KCZjcy0+aHcudXNiLT5idXN5LCAwKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZjcy0+d3JpdGVfdGFza2xldCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJaWYgKCFjcy0+Y29ubmVjdGVkKSB7CisJCWVycigiJXM6IG5vdCBjb25uZWN0ZWQiLCBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJYXRvbWljX3NldCgmY3MtPmh3LnVzYi0+YnVzeSwgMCk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBzZW5kX2NiKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBzdHJ1Y3QgY21kYnVmX3QgKmNiKQpAQCAtNDY5LDggKzQ1Niw4IEBACiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwogCQkJY3MtPmNtZGJ5dGVzIC09IGNzLT5jdXJsZW47Ci0JCQlkYmcoREVCVUdfT1VUUFVULCAic2VuZF9jYjogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCi0JCQkgICAgY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKKwkJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAic2VuZF9jYjogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCisJCQkJY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKIAkJCWNzLT5jbWRidWYgPSBjYiA9IGNiLT5uZXh0OwogCQkJaWYgKGNiKSB7CiAJCQkJY2ItPnByZXYgPSBOVUxMOwpAQCAtNDg3LDUyICs0NzQsNTEgQEAKIAkJfQogCQlpZiAoY2IpIHsKIAkJCWNvdW50ID0gbWluKGNiLT5sZW4sIHVjcy0+YnVsa19vdXRfc2l6ZSk7CisJCQlnaWdfZGJnKERFQlVHX09VVFBVVCwgInNlbmRfY2I6IHNlbmQgJWQgYnl0ZXMiLCBjb3VudCk7CisKIAkJCXVzYl9maWxsX2J1bGtfdXJiKHVjcy0+YnVsa19vdXRfdXJiLCB1Y3MtPnVkZXYsCi0JCQkgICAgICAgICAgICAgICAgICB1c2Jfc25kYnVsa3BpcGUodWNzLT51ZGV2LAotCQkJICAgICAgICAgICAgICAgICAgICAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKLQkJCSAgICAgICAgICAgICAgICAgIGNiLT5idWYgKyBjYi0+b2Zmc2V0LCBjb3VudCwKLQkJCSAgICAgICAgICAgICAgICAgIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgY3MpOworCQkJCQkgIHVzYl9zbmRidWxrcGlwZSh1Y3MtPnVkZXYsCisJCQkJCSAgICAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKKwkJCQkJICBjYi0+YnVmICsgY2ItPm9mZnNldCwgY291bnQsCisJCQkJCSAgZ2lnYXNldF93cml0ZV9idWxrX2NhbGxiYWNrLCBjcyk7CiAKIAkJCWNiLT5vZmZzZXQgKz0gY291bnQ7CiAJCQljYi0+bGVuIC09IGNvdW50OwogCQkJYXRvbWljX3NldCgmdWNzLT5idXN5LCAxKTsKLQkJCWRiZyhERUJVR19PVVRQVVQsICJzZW5kX2NiOiBzZW5kICVkIGJ5dGVzIiwgY291bnQpOwogCi0JCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgU0xBQl9BVE9NSUMpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CisJCQlzdGF0dXMgPSBjcy0+Y29ubmVjdGVkID8gdXNiX3N1Ym1pdF91cmIodWNzLT5idWxrX291dF91cmIsIFNMQUJfQVRPTUlDKSA6IC1FTk9ERVY7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOworCiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJYXRvbWljX3NldCgmdWNzLT5idXN5LCAwKTsKLQkJCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgdXJiIChlcnJvciAlZCkuIiwKKwkJCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgdXJiIChlcnJvciAlZClcbiIsCiAJCQkJICAgIC1zdGF0dXMpOwotCQkJCWNiLT5sZW4gPSAwOyAvKiBza2lwIHVyYiA9PiByZW1vdmUgY2Ird2FrZXVwIGluIG5leHQgbG9vcCBjeWNsZSAqLworCQkJCWNiLT5sZW4gPSAwOyAvKiBza2lwIHVyYiA9PiByZW1vdmUgY2Ird2FrZXVwCisJCQkJCQlpbiBuZXh0IGxvb3AgY3ljbGUgKi8KIAkJCX0KIAkJfQotCX0gd2hpbGUgKGNiICYmIHN0YXR1cyk7IC8qIGJlaSBGZWhsZXIgbmFlY2hzdGVyIEJlZmVobCAvL0ZJWE1FOiBpc3QgZGFzIE9LPyAqLworCX0gd2hpbGUgKGNiICYmIHN0YXR1cyk7IC8qIG5leHQgY29tbWFuZCBvbiBlcnJvciAqLwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogV3JpdGUgc3RyaW5nIGludG8gdHJhbnNidWYgYW5kIHNlbmQgaXQgdG8gbW9kZW0uCi0gKi8KKy8qIFNlbmQgY29tbWFuZCB0byBkZXZpY2UuICovCiBzdGF0aWMgaW50IGdpZ2FzZXRfd3JpdGVfY21kKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqd2FrZV90YXNrbGV0KQorCQkJICAgICBpbnQgbGVuLCBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKndha2VfdGFza2xldCkKIHsKIAlzdHJ1Y3QgY21kYnVmX3QgKmNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlnaWdhc2V0X2RiZ19idWZmZXIoYXRvbWljX3JlYWQoJmNzLT5tc3RhdGUpICE9IE1TX0xPQ0tFRCA/Ci0JICAgICAgICAgICAgICAgICAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAotCSAgICAgICAgICAgICAgICAgICAiQ01EIFRyYW5zbWl0IiwgbGVuLCBidWYsIDApOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmY3MtPmNvbm5lY3RlZCkpIHsKLQkJZXJyKCIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCQkJICAgICBERUJVR19UUkFOU0NNRCA6IERFQlVHX0xPQ0tDTUQsCisJCQkgICAiQ01EIFRyYW5zbWl0IiwgbGVuLCBidWYpOwogCiAJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm4gMDsKIAogCWlmICghKGNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNtZGJ1Zl90KSArIGxlbiwgR0ZQX0FUT01JQykpKSB7Ci0JCWVycigiJXM6IG91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTU0LDcgKzU0MCwxMCBAQAogCWNzLT5sYXN0Y21kYnVmID0gY2I7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAotCXRhc2tsZXRfc2NoZWR1bGUoJmNzLT53cml0ZV90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3MtPmNvbm5lY3RlZCkKKwkJdGFza2xldF9zY2hlZHVsZSgmY3MtPndyaXRlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGxlbjsKIH0KIApAQCAtNTc4LDExICs1NjcsMTIgQEAKIHN0YXRpYyBpbnQgZ2lnYXNldF9icmtjaGFycyhzdHJ1Y3QgY2FyZHN0YXRlICpjcywgY29uc3QgdW5zaWduZWQgY2hhciBidWZbNl0pCiB7CiAjaWZkZWYgQ09ORklHX0dJR0FTRVRfVU5ET0NSRVEKLQlnaWdhc2V0X2RiZ19idWZmZXIoREVCVUdfVVNCUkVRLCAiYnJrY2hhcnMiLCA2LCBidWYsIDApOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY3MtPmh3LnVzYi0+dWRldjsKKworCWdpZ2FzZXRfZGJnX2J1ZmZlcihERUJVR19VU0JSRVEsICJicmtjaGFycyIsIDYsIGJ1Zik7CiAJbWVtY3B5KGNzLT5ody51c2ItPmJjaGFycywgYnVmLCA2KTsKLQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGNzLT5ody51c2ItPnVkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoY3MtPmh3LnVzYi0+dWRldiwgMCksIDB4MTksIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAmYnVmLCA2LCAyMDAwKTsKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxOSwgMHg0MSwKKwkJCSAgICAgICAwLCAwLCAmYnVmLCA2LCAyMDAwKTsKICNlbHNlCiAJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKQEAgLTYwNCw3ICs1OTQsNiBAQAogCWlmICghYmNzLT5ody51c2IpCiAJCXJldHVybiAwOwogCi0JLy9iY3MtPmh3LnVzYi0+dHJhbnNfZmxnID0gUkVBRFlfVE9fVFJOU01JVDsgLyogQi1DaGFubmVsIHJlYWR5IHRvIHRyYW5zbWl0ICovCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYxNCw3ICs2MDMsNiBAQAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2ZyZWVjc2h3KHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCS8vRklYTUUKIAl0YXNrbGV0X2tpbGwoJmNzLT53cml0ZV90YXNrbGV0KTsKIAlrZnJlZShjcy0+aHcudXNiKTsKIH0KQEAgLTYzOSwzMyArNjI3LDIxIEBACiAJLy91Y3MtPnVyYl9jbWRfb3V0ID0gTlVMTDsKIAl1Y3MtPnJlYWRfdXJiID0gTlVMTDsKIAl0YXNrbGV0X2luaXQoJmNzLT53cml0ZV90YXNrbGV0LAotCSAgICAgICAgICAgICAmZ2lnYXNldF9tb2RlbV9maWxsLCAodW5zaWduZWQgbG9uZykgY3MpOworCQkgICAgICZnaWdhc2V0X21vZGVtX2ZpbGwsICh1bnNpZ25lZCBsb25nKSBjcyk7CiAKIAlyZXR1cm4gMTsKIH0KIAotLyogV3JpdGVzIHRoZSBkYXRhIG9mIHRoZSBjdXJyZW50IG9wZW4gc2tiIGludG8gdGhlIG1vZGVtLgotICogV2UgaGF2ZSB0byBwcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgY2FsbHMgdW50aWwgdGhlCi0gKiBjYWxsYmFjayBoYW5kbGVyICgpIGlzIGNhbGxlZCAsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlCi0gKiBhcmUganVzdCBhbGxvd2VkIHRvIHNlbmQgZGF0YSBvbmNlIHRvIGFuIGVuZHBvaW50LiBUaGVyZWZvcmUKLSAqIHdlIHVzaW5nICJ0cmFuc19mbGciIHRvIHN5bmNob25pemUgLi4uCi0gKi8KKy8qIFNlbmQgZGF0YSBmcm9tIGN1cnJlbnQgc2tiIHRvIHRoZSBkZXZpY2UuICovCiBzdGF0aWMgaW50IHdyaXRlX21vZGVtKHN0cnVjdCBjYXJkc3RhdGUgKmNzKQogewotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAJaW50IGNvdW50OwogCXN0cnVjdCBiY19zdGF0ZSAqYmNzID0gJmNzLT5iY3NbMF07IC8qIG9ubHkgb25lIGNoYW5uZWwgKi8KIAlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdWNzID0gY3MtPmh3LnVzYjsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlGTlVMTFJFVFZBTChiY3MtPnR4X3NrYiwgLUVJTlZBTCk7Ci0KLQlkYmcoREVCVUdfV1JJVEUsICJsZW46ICVkLi4uIiwgYmNzLT50eF9za2ItPmxlbik7Ci0KLQlyZXQgPSAtRU5PREVWOwotCUlGTlVMTEdPVE8odWNzLT5idWxrX291dF9idWZmZXIsIGVycm9yKTsKLQlJRk5VTExHT1RPKHVjcy0+YnVsa19vdXRfdXJiLCBlcnJvcik7Ci0JcmV0ID0gMDsKKwlnaWdfZGJnKERFQlVHX1dSSVRFLCAibGVuOiAlZC4uLiIsIGJjcy0+dHhfc2tiLT5sZW4pOwogCiAJaWYgKCFiY3MtPnR4X3NrYi0+bGVuKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+dHhfc2tiKTsKQEAgLTY3OSw0MCArNjU1LDQyIEBACiAJY291bnQgPSBtaW4oYmNzLT50eF9za2ItPmxlbiwgKHVuc2lnbmVkKSB1Y3MtPmJ1bGtfb3V0X3NpemUpOwogCW1lbWNweSh1Y3MtPmJ1bGtfb3V0X2J1ZmZlciwgYmNzLT50eF9za2ItPmRhdGEsIGNvdW50KTsKIAlza2JfcHVsbChiY3MtPnR4X3NrYiwgY291bnQpOwotCi0JdXNiX2ZpbGxfYnVsa191cmIodWNzLT5idWxrX291dF91cmIsIHVjcy0+dWRldiwKLQkgICAgICAgICAgICAgICAgICB1c2Jfc25kYnVsa3BpcGUodWNzLT51ZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y3MtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmIDB4MGYpLAotCSAgICAgICAgICAgICAgICAgIHVjcy0+YnVsa19vdXRfYnVmZmVyLCBjb3VudCwKLQkgICAgICAgICAgICAgICAgICBnaWdhc2V0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIGNzKTsKIAlhdG9taWNfc2V0KCZ1Y3MtPmJ1c3ksIDEpOwotCWRiZyhERUJVR19PVVRQVVQsICJ3cml0ZV9tb2RlbTogc2VuZCAlZCBieXRlcyIsIGNvdW50KTsKKwlnaWdfZGJnKERFQlVHX09VVFBVVCwgIndyaXRlX21vZGVtOiBzZW5kICVkIGJ5dGVzIiwgY291bnQpOwogCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIodWNzLT5idWxrX291dF91cmIsIFNMQUJfQVRPTUlDKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3MtPmNvbm5lY3RlZCkgeworCQl1c2JfZmlsbF9idWxrX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgdWNzLT51ZGV2LAorCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKHVjcy0+dWRldiwKKwkJCQkJCSAgdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiAweDBmKSwKKwkJCQkgIHVjcy0+YnVsa19vdXRfYnVmZmVyLCBjb3VudCwKKwkJCQkgIGdpZ2FzZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgY3MpOworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPmJ1bGtfb3V0X3VyYiwgU0xBQl9BVE9NSUMpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CisKIAlpZiAocmV0KSB7Ci0JCWVycigiY291bGQgbm90IHN1Ym1pdCB1cmIgKGVycm9yICVkKS4iLCAtcmV0KTsKKwkJZXJyKCJjb3VsZCBub3Qgc3VibWl0IHVyYiAoZXJyb3IgJWQpXG4iLCAtcmV0KTsKIAkJYXRvbWljX3NldCgmdWNzLT5idXN5LCAwKTsKIAl9CisKIAlpZiAoIWJjcy0+dHhfc2tiLT5sZW4pIHsKIAkJLyogc2tiIHNlbnQgY29tcGxldGVseSAqLwogCQlnaWdhc2V0X3NrYl9zZW50KGJjcywgYmNzLT50eF9za2IpOyAvL0ZJWE1FIGFsc28sIHdoZW4gcmV0PDA/CiAKLQkJZGJnKERFQlVHX0lOVFIsCi0JCSAgICAia2ZyZWUgc2tiIChBZHI6ICVseCkhIiwgKHVuc2lnbmVkIGxvbmcpIGJjcy0+dHhfc2tiKTsKKwkJZ2lnX2RiZyhERUJVR19JTlRSLCAia2ZyZWUgc2tiIChBZHI6ICVseCkhIiwKKwkJCSh1bnNpZ25lZCBsb25nKSBiY3MtPnR4X3NrYik7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+dHhfc2tiKTsKIAkJYmNzLT50eF9za2IgPSBOVUxMOwogCX0KIAogCXJldHVybiByZXQ7Ci1lcnJvcjoKLQlkZXZfa2ZyZWVfc2tiX2FueShiY3MtPnR4X3NrYik7Ci0JYmNzLT50eF9za2IgPSBOVUxMOwotCXJldHVybiByZXQ7Ci0KIH0KIAogc3RhdGljIGludCBnaWdhc2V0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwpAQCAtNzIwLDIyICs2OTgsMjAgQEAKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWY7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3MgPSBOVUxMOwogCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1Y3MgPSBOVUxMOwotCS8vc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWZhY2VfZGVzYzsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCS8vaXNkbl9jdHJsIGNvbW1hbmQ7CiAJaW50IGJ1ZmZlcl9zaXplOwogCWludCBhbHQ7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaW5mbygiJXM6IENoZWNrIGlmIGRldmljZSBtYXRjaGVzIC4uIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKLQkgICAgX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCWdpZ19kYmcoREVCVUdfQU5ZLAorCQkiJXM6IENoZWNrIGlmIGRldmljZSBtYXRjaGVzIC4uIChWZW5kb3I6IDB4JXgsIFByb2R1Y3Q6IDB4JXgpIiwKKwkJX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCiAJcmV0dmFsID0gLUVOT0RFVjsgLy9GSVhNRQogCiAJLyogU2VlIGlmIHRoZSBkZXZpY2Ugb2ZmZXJlZCB1cyBtYXRjaGVzIHdoYXQgd2UgY2FuIGFjY2VwdCAqLwotCWlmICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciAgIT0gVVNCX00xMDVfVkVORE9SX0lEKSkgfHwKLQkgICAgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IFVTQl9NMTA1X1BST0RVQ1RfSUQpKSkKKwlpZiAoKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICAhPSBVU0JfTTEwNV9WRU5ET1JfSUQpIHx8CisJICAgIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX00xMDVfUFJPRFVDVF9JRCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogdGhpcyBzdGFydHMgdG8gYmVjb21lIGFzY2lpIGFydC4uLiAqLwpAQCAtNzQ0LDcgKzcyMCw3IEBACiAJaWZudW0gPSBob3N0aWYtPmRlc2MuYkludGVyZmFjZU51bWJlcjsgLy8gRklYTUUgPwogCiAJaWYgKGFsdCAhPSAwIHx8IGlmbnVtICE9IDApIHsKLQkJd2FybigiaWZudW0gJWQsIGFsdCAlZCIsIGlmbnVtLCBhbHQpOworCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiaWZudW0gJWQsIGFsdCAlZFxuIiwgaWZudW0sIGFsdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzUyLDQyICs3MjgsMjkgQEAKIAkgKgogCSAqLwogCWlmIChob3N0aWYtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDI1NSkgewotCQlpbmZvKCIlczogRGV2aWNlIG1hdGNoZWQsIGJ1dCBpZmFjZV9kZXNjWyVkXS0+YkludGVyZmFjZUNsYXNzPT0lZCAhIiwKLQkJICAgICAgIF9fZnVuY19fLCBpZm51bSwgaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCSIlczogRGV2aWNlIG1hdGNoZWQgYnV0IGlmYWNlX2Rlc2NbJWRdLT5iSW50ZXJmYWNlQ2xhc3M9PSVkIVxuIiwKKwkJCSBfX2Z1bmNfXywgaWZudW0sIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCIlczogRGV2aWNlIG1hdGNoZWQgLi4uICEiLCBfX2Z1bmNfXyk7CisJZGV2X2luZm8oJnVkZXYtPmRldiwgIiVzOiBEZXZpY2UgbWF0Y2hlZCAuLi4gIVxuIiwgX19mdW5jX18pOwogCiAJY3MgPSBnaWdhc2V0X2dldHVuYXNzaWduZWRjcyhkcml2ZXIpOwogCWlmICghY3MpIHsKLQkJd2FybigiTm8gZnJlZSBjYXJkc3RhdGUhIik7CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJubyBmcmVlIGNhcmRzdGF0ZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAl1Y3MgPSBjcy0+aHcudXNiOwogCi0jaWYgMAotCWlmICh1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgdWRldi0+Y29uZmlnWzBdLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSkgPCAwKSB7Ci0JCXdhcm4oInNldF9jb25maWd1cmF0aW9uIGZhaWxlZCIpOwotCQlnb3RvIGVycm9yOwotCX0KKwkvKiBzYXZlIG9mZiBkZXZpY2Ugc3RydWN0dXJlIHB0cnMgZm9yIGxhdGVyIHVzZSAqLworCXVzYl9nZXRfZGV2KHVkZXYpOworCXVjcy0+dWRldiA9IHVkZXY7CisJdWNzLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJY3MtPmRldiA9ICZpbnRlcmZhY2UtPmRldjsKIAotCi0JaWYgKHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGlmbnVtLyo9PTAqLywgYWx0Lyo9PTAqLykgPCAwKSB7Ci0JCXdhcm4oInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIiwKLQkJICAgICB1ZGV2LT5kZXZudW0sIGlmbnVtLCBhbHQpOwotCQlnb3RvIGVycm9yOwotCX0KLSNlbmRpZgotCi0JLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwotCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCi0JLyogV2Ugd2lsbCBnZXQgMiBlbmRwb2ludHM6IE9uZSBmb3Igc2VuZGluZyBjb21tYW5kcyB0byB0aGUgZGV2aWNlIChidWxrIG91dCkgYW5kIG9uZSB0bwotCSAqIHBvbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGV2aWNlKGludCBpbikuCi0JICogVGhlcmVmb3JlIHdlIHdpbGwgaGF2ZSBhbiBhbG1vc3Qgc2ltaWxpYXIgc2l0dWF0aW9uIGFzIHdpdGggb3VyIHNlcmlhbCBwb3J0IGhhbmRsZXIuCi0JICogSWYgYW4gY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkLCB3ZSB3aWxsIGhhdmUgdG8gY3JlYXRlIGRhdGEgaW4vb3V0IHBpcGVzCi0JICogZHluYW1pY2FsbHkuLi4KLQkgKi8KKwkvKiBzYXZlIGFkZHJlc3Mgb2YgY29udHJvbGxlciBzdHJ1Y3R1cmUgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgY3MpOyAvLyBkZXZfc2V0X2RydmRhdGEoJmludGVyZmFjZS0+ZGV2LCBjcyk7CiAKIAllbmRwb2ludCA9ICZob3N0aWYtPmVuZHBvaW50WzBdLmRlc2M7CiAKQEAgLTc5NiwxNCArNzU5LDE0IEBACiAJdWNzLT5idWxrX291dF9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAl1Y3MtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghdWNzLT5idWxrX291dF9idWZmZXIpIHsKLQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXIiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19vdXRfYnVmZmVyXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAl1Y3MtPmJ1bGtfb3V0X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9LRVJORUwpOwogCWlmICghdWNzLT5idWxrX291dF91cmIpIHsKLQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXIiKTsKKwkJZGV2X2Vycihjcy0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19vdXRfdXJiXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC04MTEsMTIgKzc3NCwxMCBAQAogCWVuZHBvaW50ID0gJmhvc3RpZi0+ZW5kcG9pbnRbMV0uZGVzYzsKIAogCWF0b21pY19zZXQoJnVjcy0+YnVzeSwgMCk7Ci0JdWNzLT51ZGV2ID0gdWRldjsKLQl1Y3MtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAogCXVjcy0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIFNMQUJfS0VSTkVMKTsKIAlpZiAoIXVjcy0+cmVhZF91cmIpIHsKLQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWRldl9lcnIoY3MtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTgyNSwzOCArNzg2LDMzIEBACiAJdWNzLT5pbnRfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CiAJY3MtPmluYnVmWzBdLnJjdmJ1ZiA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghY3MtPmluYnVmWzBdLnJjdmJ1ZikgewotCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHJjdmJ1ZiIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSByY3ZidWZcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAkvKiBGaWxsIHRoZSBpbnRlcnJ1cHQgdXJiIGFuZCBzZW5kIGl0IHRvIHRoZSBjb3JlICovCiAJdXNiX2ZpbGxfaW50X3VyYih1Y3MtPnJlYWRfdXJiLCB1ZGV2LAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUodWRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiksCi0JICAgICAgICAgICAgICAgICBjcy0+aW5idWZbMF0ucmN2YnVmLCBidWZmZXJfc2l6ZSwKLQkgICAgICAgICAgICAgICAgIGdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2ssCi0JICAgICAgICAgICAgICAgICBjcy0+aW5idWYgKyAwLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LAorCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYpLAorCQkJIGNzLT5pbmJ1ZlswXS5yY3ZidWYsIGJ1ZmZlcl9zaXplLAorCQkJIGdpZ2FzZXRfcmVhZF9pbnRfY2FsbGJhY2ssCisJCQkgY3MtPmluYnVmICsgMCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CiAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1Y3MtPnJlYWRfdXJiLCBTTEFCX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIkNvdWxkIG5vdCBzdWJtaXQgVVJCISIpOworCQlkZXZfZXJyKGNzLT5kZXYsICJDb3VsZCBub3Qgc3VibWl0IFVSQiAoZXJyb3IgJWQpXG4iLCAtcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiB0ZWxsIGNvbW1vbiBwYXJ0IHRoYXQgdGhlIGRldmljZSBpcyByZWFkeSAqLwogCWlmIChzdGFydG1vZGUgPT0gU01fTE9DS0VEKQogCQlhdG9taWNfc2V0KCZjcy0+bXN0YXRlLCBNU19MT0NLRUQpOworCiAJaWYgKCFnaWdhc2V0X3N0YXJ0KGNzKSkgewogCQl0YXNrbGV0X2tpbGwoJmNzLT53cml0ZV90YXNrbGV0KTsKIAkJcmV0dmFsID0gLUVOT0RFVjsgLy9GSVhNRQogCQlnb3RvIGVycm9yOwogCX0KLQotCS8qIHNhdmUgYWRkcmVzcyBvZiBjb250cm9sbGVyIHN0cnVjdHVyZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBjcyk7Ci0KLQkvKiBzZXQgdXAgZGV2aWNlIHN5c2ZzICovCi0JZ2lnYXNldF9pbml0X2Rldl9zeXNmcyhpbnRlcmZhY2UpOwogCXJldHVybiAwOwogCiBlcnJvcjoKQEAgLTg2OCw0OCArODI0LDQ1IEBACiAJa2ZyZWUoY3MtPmluYnVmWzBdLnJjdmJ1Zik7CiAJaWYgKHVjcy0+cmVhZF91cmIgIT0gTlVMTCkKIAkJdXNiX2ZyZWVfdXJiKHVjcy0+cmVhZF91cmIpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl1Y3MtPnJlYWRfdXJiID0gdWNzLT5idWxrX291dF91cmIgPSBOVUxMOwogCWNzLT5pbmJ1ZlswXS5yY3ZidWYgPSB1Y3MtPmJ1bGtfb3V0X2J1ZmZlciA9IE5VTEw7CisJdXNiX3B1dF9kZXYodWNzLT51ZGV2KTsKKwl1Y3MtPnVkZXYgPSBOVUxMOworCXVjcy0+aW50ZXJmYWNlID0gTlVMTDsKIAlnaWdhc2V0X3VuYXNzaWduKGNzKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKioKLSAqCXNrZWxfZGlzY29ubmVjdAotICovCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAlzdHJ1Y3QgdXNiX2NhcmRzdGF0ZSAqdWNzOwogCiAJY3MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0KLQkvKiBjbGVhciBkZXZpY2Ugc3lzZnMgKi8KLQlnaWdhc2V0X2ZyZWVfZGV2X3N5c2ZzKGludGVyZmFjZSk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJdWNzID0gY3MtPmh3LnVzYjsKIAl1c2Jfa2lsbF91cmIodWNzLT5yZWFkX3VyYik7Ci0JLy9pbmZvKCJHaWdhU2V0IFVTQiBkZXZpY2UgIyVkIHdpbGwgYmUgZGlzY29ubmVjdGVkIiwgbWlub3IpOwogCiAJZ2lnYXNldF9zdG9wKGNzKTsKIAorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl0YXNrbGV0X2tpbGwoJmNzLT53cml0ZV90YXNrbGV0KTsKIAotCXVzYl9raWxsX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYik7ICAvKiBGSVhNRTogbnVyLCB3ZW5uIG5vZXRpZyAqLwotCS8vdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOyAgLyogRklYTUU6IG51ciwgd2VubiBub2V0aWcgKi8KKwl1c2Jfa2lsbF91cmIodWNzLT5idWxrX291dF91cmIpOwkvKiBGSVhNRTogb25seSBpZiBhY3RpdmU/ICovCiAKIAlrZnJlZSh1Y3MtPmJ1bGtfb3V0X2J1ZmZlcik7CiAJaWYgKHVjcy0+YnVsa19vdXRfdXJiICE9IE5VTEwpCiAJCXVzYl9mcmVlX3VyYih1Y3MtPmJ1bGtfb3V0X3VyYik7Ci0JLy9pZih1Y3MtPnVyYl9jbWRfb3V0ICE9IE5VTEwpCi0JLy8JdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOwogCWtmcmVlKGNzLT5pbmJ1ZlswXS5yY3ZidWYpOwogCWlmICh1Y3MtPnJlYWRfdXJiICE9IE5VTEwpCiAJCXVzYl9mcmVlX3VyYih1Y3MtPnJlYWRfdXJiKTsKLQl1Y3MtPnJlYWRfdXJiID0gdWNzLT5idWxrX291dF91cmIvKj11Y3MtPnVyYl9jbWRfb3V0Ki89TlVMTDsKKwl1Y3MtPnJlYWRfdXJiID0gdWNzLT5idWxrX291dF91cmIgPSBOVUxMOwogCWNzLT5pbmJ1ZlswXS5yY3ZidWYgPSB1Y3MtPmJ1bGtfb3V0X2J1ZmZlciA9IE5VTEw7CiAKKwl1c2JfcHV0X2Rldih1Y3MtPnVkZXYpOworCXVjcy0+aW50ZXJmYWNlID0gTlVMTDsKKwl1Y3MtPnVkZXYgPSBOVUxMOworCWNzLT5kZXYgPSBOVUxMOwogCWdpZ2FzZXRfdW5hc3NpZ24oY3MpOwogfQogCkBAIC05NDIsOSArODk1LDkgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRyaXZlciBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAJaWYgKChkcml2ZXIgPSBnaWdhc2V0X2luaXRkcml2ZXIoR0lHQVNFVF9NSU5PUiwgR0lHQVNFVF9NSU5PUlMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJm9wcywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQorCQkJCSAgICAgICBHSUdBU0VUX01PRFVMRU5BTUUsIEdJR0FTRVRfREVWTkFNRSwKKwkJCQkgICAgICAgR0lHQVNFVF9ERVZGU05BTUUsICZvcHMsCisJCQkJICAgICAgIFRISVNfTU9EVUxFKSkgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCkBAIC05ODEsOCArOTM0LDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1c2JfZ2lnYXNldF9leGl0KHZvaWQpCiB7CiAJZ2lnYXNldF9ibG9ja2RyaXZlcihkcml2ZXIpOyAvKiA9PiBwcm9iZSB3aWxsIGZhaWwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqID0+IG5vIGdpZ2FzZXRfc3RhcnQgYW55IG1vcmUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCSAgICAgICogPT4gbm8gZ2lnYXNldF9zdGFydCBhbnkgbW9yZQorCQkJCSAgICAgICovCiAKIAlnaWdhc2V0X3NodXRkb3duKGNhcmRzdGF0ZSk7CiAJLyogZnJvbSBub3cgb24sIG5vIGlzZG4gY2FsbGJhY2sgc2hvdWxkIGJlIHBvc3NpYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwppbmRleCAyYTJiMDNmLi43YmJmZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKQEAgLTUxLDggKzUxLDggQEAKICAgIGhhbmRsZXIuCiAqLwogCi1zdGF0aWMgdm9pZCBhdm1jc19jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBhdm1jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBhdm1jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYXZtY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKQEAgLTY1LDEwICs2NSwxMCBAQAogLyoKICAgIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlIHNrZWxldG9uIGRldmljZS4gIEVhY2ggYWN0dWFsCiAgICBQQ01DSUEgY2FyZCBjb3JyZXNwb25kcyB0byBvbmUgZGV2aWNlIGluc3RhbmNlLCBhbmQgaXMgZGVzY3JpYmVkCi0gICBieSBvbmUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCisgICBieSBvbmUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgogCiAgICBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGZvciB0aGlzIC0tIGZvciBleGFtcGxlLCB0aGUKLSAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIGRldl9saW5rX3QgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCisgICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKICAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KICovCiAKQEAgLTc4LDcgKzc4LDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgY2FuJ3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LgogKi8KQEAgLTk5LDU0ICs5OSwzOCBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgYXZtY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXZtY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbDsKIAotICAgIC8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0gICAgbGluayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFsaW5rKQotICAgICAgICBnb3RvIGVycjsKLSAgICBtZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7Ci0KICAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisgICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDE2OworICAgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCi0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKKyAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CiAKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7Ci0gICAgCisgICAgcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KLSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKLSAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKLSAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKKyAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROworICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKyAgICBwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IDE7CisgICAgcF9kZXYtPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KICAgICBsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogICAgIGlmICghbG9jYWwpCi0gICAgICAgIGdvdG8gZXJyX2tmcmVlOworICAgICAgICBnb3RvIGVycjsKICAgICBtZW1zZXQobG9jYWwsIDAsIHNpemVvZihsb2NhbF9pbmZvX3QpKTsKLSAgICBsaW5rLT5wcml2ID0gbG9jYWw7CisgICAgcF9kZXYtPnByaXYgPSBsb2NhbDsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7CisgICAgcmV0dXJuIGF2bWNzX2NvbmZpZyhwX2Rldik7CiAKLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBhdm1jc19jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKLQotIGVycl9rZnJlZToKLSAgICBrZnJlZShsaW5rKTsKICBlcnI6Ci0gICAgcmV0dXJuIC1FSU5WQUw7CisgICAgcmV0dXJuIC1FTk9NRU07CiB9IC8qIGF2bWNzX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1OCwxNSArMTQyLDEwIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhdm1jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgYXZtY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKIAlhdm1jc19yZWxlYXNlKGxpbmspOwotCi0gICAga2ZyZWUobGluay0+cHJpdik7Ci0gICAga2ZyZWUobGluayk7CisJa2ZyZWUobGluay0+cHJpdik7CiB9IC8qIGF2bWNzX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE3Nyw3ICsxNTYsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBnZXRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAJCSAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7CkBAIC0xODUsNyArMTY0LDcgQEAKICAgICByZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAJCSAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMTkzLDcgKzE3Miw3IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKIAkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKQEAgLTIwMSw5ICsxODAsOCBAQAogICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgdm9pZCBhdm1jc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYXZtY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwogICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CkBAIC0yMTMsOCArMTkxLDcgQEAKICAgICBjaGFyIGRldm5hbWVbMTI4XTsKICAgICBpbnQgY2FyZHR5cGU7CiAgICAgaW50ICgqYWRkY2FyZCkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlycSk7Ci0gICAgCi0gICAgaGFuZGxlID0gbGluay0+aGFuZGxlOworCiAgICAgZGV2ID0gbGluay0+cHJpdjsKIAogICAgIC8qCkBAIC0yMjMsMjUgKzIwMCwyMSBAQAogICAgICovCiAgICAgZG8gewogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpOworCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKTsKKwlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0JaSA9IHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlpID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSBicmVhazsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICB9IHdoaWxlICgwKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBQYXJzZVR1cGxlLCBpKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCXJldHVybjsKKwljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBpKTsKKwlyZXR1cm4gLUVOT0RFVjsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCiAgICAgZG8gewogCkBAIC0yNTIsNyArMjI1LDcgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwogCiAJZGV2bmFtZVswXSA9IDA7Ci0JaWYoICFmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAmJiBwYXJzZS52ZXJzaW9uXzEubnMgPiAxICkgeworCWlmKCAhZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICYmIHBhcnNlLnZlcnNpb25fMS5ucyA+IDEgKSB7CiAJICAgIHN0cmxjcHkoZGV2bmFtZSxwYXJzZS52ZXJzaW9uXzEuc3RyICsgcGFyc2UudmVyc2lvbl8xLm9mc1sxXSwgCiAJCQlzaXplb2YoZGV2bmFtZSkpOwogCX0KQEAgLTI2Myw3ICsyMzYsNyBAQAogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCXdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKIAkgICAgaWYgKGNmLT5pby5ud2luID4gMCkgewogCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwpAQCAtMjczLDM2ICsyNDYsMzYgQEAKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJhdm1fY3M6IHRlc3RpbmcgaS9vICUjeC0lI3hcbiIsCiAJCQlsaW5rLT5pby5CYXNlUG9ydDEsCiAJCSAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCWlmIChpID09IENTX1NVQ0NFU1MpIGdvdG8gZm91bmRfcG9ydDsKIAkgICAgfQotCSAgICBpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkgICAgaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogCX0KIAogZm91bmRfcG9ydDoKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkgICAgYnJlYWs7CiAJfQotCQorCiAJLyoKIAkgKiBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZQogCSAqLwotCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SVJRLCBpKTsKLQkgICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKKwkgICAgLyogdW5kbyAqLworCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJICAgIGJyZWFrOwogCX0KLQkKKwogCS8qCiAgICAgICAgICAqIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldAogCSAgKi8KLQlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKLQkgICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJICAgIGJyZWFrOwogCX0KIApAQCAtMzMxLDEzICszMDQsMTIgQEAKIAogICAgIGRldi0+bm9kZS5tYWpvciA9IDY0OwogICAgIGRldi0+bm9kZS5taW5vciA9IDA7Ci0gICAgbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKLSAgICAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworICAgIGxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKwogICAgIC8qIElmIGFueSBzdGVwIGZhaWxlZCwgcmVsZWFzZSBhbnkgcGFydGlhbGx5IGNvbmZpZ3VyZWQgc3RhdGUgKi8KICAgICBpZiAoaSAhPSAwKSB7CiAJYXZtY3NfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogCiAKQEAgLTM1MSw5ICszMjMsMTAgQEAKICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJhdm1fY3M6IGZhaWxlZCB0byBhZGQgQVZNLSVzLUNvbnRyb2xsZXIgYXQgaS9vICUjeCwgaXJxICVkXG4iLAogCQlkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAlhdm1jc19yZWxlYXNlKGxpbmspOwotCXJldHVybjsKKwlyZXR1cm4gLUVOT0RFVjsKICAgICB9CiAgICAgZGV2LT5ub2RlLm1pbm9yID0gaTsKKyAgICByZXR1cm4gMDsKIAogfSAvKiBhdm1jc19jb25maWcgKi8KIApAQCAtMzY1LDU2ICszMzgsMTIgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhdm1jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBhdm1jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGIxcGNtY2lhX2RlbGNhcmQobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwotCi0gICAgLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLSAgICBsaW5rLT5kZXYgPSBOVUxMOwotICAgIAotICAgIC8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCWIxcGNtY2lhX2RlbGNhcmQobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogYXZtY3NfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IGF2bWNzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdm1jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZSBjYXJkIHN0YXR1cyBldmVudCBoYW5kbGVyLiAgTW9zdGx5LCB0aGlzIHNjaGVkdWxlcyBvdGhlcgotICAgIHN0dWZmIHRvIHJ1biBhZnRlciBhbiBldmVudCBpcyByZWNlaXZlZC4gIEEgQ0FSRF9SRU1PVkFMIGV2ZW50Ci0gICAgYWxzbyBzZXRzIHNvbWUgZmxhZ3MgdG8gZGlzY291cmFnZSB0aGUgbmV0IGRyaXZlcnMgZnJvbSB0cnlpbmcKLSAgICB0byB0YWxrIHRvIHRoZSBjYXJkIGFueSBtb3JlLgotCi0gICAgV2hlbiBhIENBUkRfUkVNT1ZBTCBldmVudCBpcyByZWNlaXZlZCwgd2UgaW1tZWRpYXRlbHkgc2V0IGEgZmxhZwotICAgIHRvIGJsb2NrIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGlzIGRldmljZS4gIEFsbCB0aGUgZnVuY3Rpb25zIHRoYXQKLSAgICBhY3R1YWxseSBhY2Nlc3MgdGhlIGRldmljZSBzaG91bGQgY2hlY2sgdGhpcyBmbGFnIHRvIG1ha2Ugc3VyZQotICAgIHRoZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQuCi0gICAgCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgYXZtY3NfaWRzW10gPSB7CiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFWTSIsICJJU0ROLUNvbnRyb2xsZXIgQjEiLCAweDk1ZDQyMDA4LCAweDg0NWRjMzM1KSwKQEAgLTQyOSwxMSArMzU4LDkgQEAKIAkuZHJ2CT0gewogCQkubmFtZQk9ICJhdm1fY3MiLAogCX0sCi0JLnByb2JlID0gYXZtY3NfYXR0YWNoLAorCS5wcm9iZSA9IGF2bWNzX3Byb2JlLAogCS5yZW1vdmUJPSBhdm1jc19kZXRhY2gsCiAJLmlkX3RhYmxlID0gYXZtY3NfaWRzLAotCS5zdXNwZW5kPSBhdm1jc19zdXNwZW5kLAotCS5yZXN1bWUgPSBhdm1jc19yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdm1jc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCmluZGV4IDk2OWRhNDAuLmFjMjhlMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCkBAIC02Nyw4ICs2Nyw4IEBACiAgICBoYW5kbGVyLgogKi8KIAotc3RhdGljIHZvaWQgYXZtYTFjc19jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBhdm1hMWNzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGF2bWExY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGF2bWExY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKQEAgLTgyLDEwICs4MiwxMCBAQAogLyoKICAgIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlIHNrZWxldG9uIGRldmljZS4gIEVhY2ggYWN0dWFsCiAgICBQQ01DSUEgY2FyZCBjb3JyZXNwb25kcyB0byBvbmUgZGV2aWNlIGluc3RhbmNlLCBhbmQgaXMgZGVzY3JpYmVkCi0gICBieSBvbmUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCisgICBieSBvbmUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgogCiAgICBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGZvciB0aGlzIC0tIGZvciBleGFtcGxlLCB0aGUKLSAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIGRldl9saW5rX3QgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCisgICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKICAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KICovCiAKQEAgLTk1LDcgKzk1LDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgY2FuJ3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LgogKi8KQEAgLTExNiw1NSArMTE2LDQwIEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBhdm1hMWNzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGF2bWExY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbDsKIAogICAgIERFQlVHKDAsICJhdm1hMWNzX2F0dGFjaCgpXG4iKTsKIAotICAgIC8qIEluaXRpYWxpemUgdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlICovCi0gICAgbGluayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFsaW5rKQotCXJldHVybiAtRU5PTUVNOwotICAgIG1lbXNldChsaW5rLCAwLCBzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpKTsKLQogICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAgICAgbG9jYWwgPSBrbWFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWxvY2FsKSB7Ci0Ja2ZyZWUobGluayk7CisgICAgaWYgKCFsb2NhbCkKIAlyZXR1cm4gLUVOT01FTTsKLSAgICB9CisKICAgICBtZW1zZXQobG9jYWwsIDAsIHNpemVvZihsb2NhbF9pbmZvX3QpKTsKLSAgICBsaW5rLT5wcml2ID0gbG9jYWw7CisgICAgcF9kZXYtPnByaXYgPSBsb2NhbDsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMyID0gMTY7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworICAgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSAxNjsKKyAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMTY7CisgICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CiAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKyAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKIAotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKyAgICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwotICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwotICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwotICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOworICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisgICAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworICAgIHBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKyAgICBwX2Rldi0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgYXZtYTFjc19jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYXZtYTFjc19jb25maWcocF9kZXYpOwogfSAvKiBhdm1hMWNzX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE3NiwxNyArMTYxLDExIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhdm1hMWNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBhdm1hMWNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQotICAgIERFQlVHKDAsICJhdm1hMWNzX2RldGFjaCgweCVwKVxuIiwgbGluayk7Ci0KLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCSAgICBhdm1hMWNzX3JlbGVhc2UobGluayk7Ci0KLSAgICBrZnJlZShsaW5rLT5wcml2KTsKLSAgICBrZnJlZShsaW5rKTsKKwlERUJVRygwLCAiYXZtYTFjc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCWF2bWExY3NfcmVsZWFzZShsaW5rKTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIH0gLyogYXZtYTFjc19kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTcsNyArMTc2LDcgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGdldF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogCQkgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjA1LDcgKzE4NCw3IEBACiAgICAgcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogCQkgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKTsKQEAgLTIxMyw3ICsxOTIsNyBAQAogICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgaW50IG5leHRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAJCSAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CkBAIC0yMjEsOSArMjAwLDggQEAKICAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIHZvaWQgYXZtYTFjc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYXZtYTFjc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKQEAgLTIzMyw4ICsyMTEsNyBAQAogICAgIGNoYXIgZGV2bmFtZVsxMjhdOwogICAgIElzZG5DYXJkX3QJaWNhcmQ7CiAgICAgaW50IGJ1c3kgPSAwOwotICAgIAotICAgIGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKKwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAiYXZtYTFjc19jb25maWcoMHglcClcbiIsIGxpbmspOwpAQCAtMjQ1LDI1ICsyMjIsMjEgQEAKICAgICAqLwogICAgIGRvIHsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKKwlpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIGJyZWFrOwogCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSk7CisJaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIGJyZWFrOwotCWkgPSBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgfSB3aGlsZSAoMCk7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUGFyc2VUdXBsZSwgaSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47CisJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgaSk7CisJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQotICAgIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKIAogICAgIGRvIHsKIApAQCAtMjc0LDcgKzI0Nyw3IEBACiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKIAogCWRldm5hbWVbMF0gPSAwOwotCWlmKCAhZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgJiYgcGFyc2UudmVyc2lvbl8xLm5zID4gMSApIHsKKwlpZiggIWZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAmJiBwYXJzZS52ZXJzaW9uXzEubnMgPiAxICkgewogCSAgICBzdHJsY3B5KGRldm5hbWUscGFyc2UudmVyc2lvbl8xLnN0ciArIHBhcnNlLnZlcnNpb25fMS5vZnNbMV0sIAogCQkJc2l6ZW9mKGRldm5hbWUpKTsKIAl9CkBAIC0yODUsNyArMjU4LDcgQEAKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7IHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAl3aGlsZSAoaSA9PSBDU19TVUNDRVNTKSB7CiAJICAgIGlmIChjZi0+aW8ubndpbiA+IDApIHsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKQEAgLTI5NSwzNiArMjY4LDM2IEBACiAJCXByaW50ayhLRVJOX0lORk8gImF2bWExX2NzOiB0ZXN0aW5nIGkvbyAlI3gtJSN4XG4iLAogCQkJbGluay0+aW8uQmFzZVBvcnQxLAogCQkJbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgZ290byBmb3VuZF9wb3J0OwogCSAgICB9Ci0JICAgIGkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCSAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAJfQogCiBmb3VuZF9wb3J0OgogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCSAgICBicmVhazsKIAl9CiAJCiAJLyoKIAkgKiBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZQogCSAqLwotCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SVJRLCBpKTsKLQkgICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKKwkgICAgLyogdW5kbyAqLworCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJICAgIGJyZWFrOwogCX0KLQkKKwogCS8qCiAJICogY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0CiAJICovCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7Ci0JICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQkgICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCSAgICBicmVhazsKIAl9CiAKQEAgLTMzNiwxMyArMzA5LDEyIEBACiAgICAgc3RyY3B5KGRldi0+bm9kZS5kZXZfbmFtZSwgIkExIik7CiAgICAgZGV2LT5ub2RlLm1ham9yID0gNDU7CiAgICAgZGV2LT5ub2RlLm1pbm9yID0gMDsKLSAgICBsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisgICAgbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCiAgICAgLyogSWYgYW55IHN0ZXAgZmFpbGVkLCByZWxlYXNlIGFueSBwYXJ0aWFsbHkgY29uZmlndXJlZCBzdGF0ZSAqLwogICAgIGlmIChpICE9IDApIHsKIAlhdm1hMWNzX3JlbGVhc2UobGluayk7Ci0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogICAgIH0KIAogICAgIHByaW50ayhLRVJOX05PVElDRSAiYXZtYTFfY3M6IGNoZWNraW5nIGF0IGkvbyAlI3gsIGlycSAlZFxuIiwKQEAgLTM1NywxMCArMzI5LDExIEBACiAgICAgaWYgKGkgPCAwKSB7CiAgICAgCXByaW50ayhLRVJOX0VSUiAiYXZtYTFfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIEFWTSBBMSBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwgaSwgbGluay0+aW8uQmFzZVBvcnQxKTsKIAlhdm1hMWNzX3JlbGVhc2UobGluayk7Ci0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogICAgIH0KICAgICBkZXYtPm5vZGUubWlub3IgPSBpOwogCisgICAgcmV0dXJuIDA7CiB9IC8qIGF2bWExY3NfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzcxLDQ3ICszNDQsMTggQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhdm1hMWNzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGF2bWExY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKwlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJhdm1hMWNzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCURFQlVHKDAsICJhdm1hMWNzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgLyogbm8gdW5yZWdpc3RlciBmdW5jdGlvbiB3aXRoIGhpc2F4ICovCi0gICAgSGlTYXhfY2xvc2VjYXJkKGxvY2FsLT5ub2RlLm1pbm9yKTsKKwkvKiBub3cgdW5yZWdpc3RlciBmdW5jdGlvbiB3aXRoIGhpc2F4ICovCisJSGlTYXhfY2xvc2VjYXJkKGxvY2FsLT5ub2RlLm1pbm9yKTsKIAotICAgIC8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0gICAgbGluay0+ZGV2ID0gTlVMTDsKLSAgICAKLSAgICAvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9IC8qIGF2bWExY3NfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IGF2bWExY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF2bWExY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgYXZtYTFjc19pZHNbXSA9IHsKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVZNIiwgIklTRE4gQSIsIDB4OTVkNDIwMDgsIDB4YWRjOWQ0YmIpLApAQCAtNDI1LDEzICszNjksMTEgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiYXZtYTFfY3MiLAogCX0sCi0JLnByb2JlCQk9IGF2bWExY3NfYXR0YWNoLAorCS5wcm9iZQkJPSBhdm1hMWNzX3Byb2JlLAogCS5yZW1vdmUJCT0gYXZtYTFjc19kZXRhY2gsCiAJLmlkX3RhYmxlCT0gYXZtYTFjc19pZHMsCi0JLnN1c3BlbmQJPSBhdm1hMWNzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBhdm1hMWNzX3Jlc3VtZSwKIH07Ci0gCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2F2bWExX2NzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwppbmRleCAwNjJmYjhmLi5lMThlNzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKQEAgLTk0LDggKzk0LDggQEAKICAgIGhhbmRsZXIuCiAqLwogCi1zdGF0aWMgdm9pZCBlbHNhX2NzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGVsc2FfY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgZWxzYV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZWxzYV9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogLyoKICAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQpAQCAtMTExLDcgKzExMSw3IEBACiAgICBleGFtcGxlLCBldGhlcm5ldCBjYXJkcywgbW9kZW1zKS4gIEluIG90aGVyIGNhc2VzLCB0aGVyZSBtYXkgYmUKICAgIG1hbnkgYWN0dWFsIG9yIGxvZ2ljYWwgZGV2aWNlcyAoU0NTSSBhZGFwdGVycywgbWVtb3J5IGNhcmRzIHdpdGgKICAgIG11bHRpcGxlIHBhcnRpdGlvbnMpLiAgVGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlcyBuZWVkIHRvIGJlIGtlcHQKLSAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgZGV2X2xpbmtfdAorICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBzdHJ1Y3QgcGNtY2lhX2RldmljZQogICAgc3RydWN0dXJlLiAgV2UgYWxsb2NhdGUgdGhlbSBpbiB0aGUgY2FyZCdzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsCiAgICBiZWNhdXNlIHRoZXkgZ2VuZXJhbGx5IHNob3VsZG4ndCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCiAgICBJbiB0aGlzIGNhc2UsIHdlIGFsc28gcHJvdmlkZSBhIGZsYWcgdG8gaW5kaWNhdGUgaWYgYSBkZXZpY2UgaXMKQEAgLTEyMSw3ICsxMjEsNyBAQAogKi8KIAogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKLSAgICBkZXZfbGlua190ICAgICAgICAgIGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QgICAgICAgICAgbm9kZTsKICAgICBpbnQgICAgICAgICAgICAgICAgIGJ1c3k7CiAgICAgaW50CQkJY2FyZG5yOwpAQCAtMTM5LDkgKzEzOSw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGVsc2FfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgZWxzYV9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWw7CiAKICAgICBERUJVRygwLCAiZWxzYV9jc19hdHRhY2goKVxuIik7CkBAIC0xNTAsOCArMTQ5LDExIEBACiAgICAgbG9jYWwgPSBrbWFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWxvY2FsKSByZXR1cm4gLUVOT01FTTsKICAgICBtZW1zZXQobG9jYWwsIDAsIHNpemVvZihsb2NhbF9pbmZvX3QpKTsKKworICAgIGxvY2FsLT5wX2RldiA9IGxpbms7CisgICAgbGluay0+cHJpdiA9IGxvY2FsOworCiAgICAgbG9jYWwtPmNhcmRuciA9IC0xOwotICAgIGxpbmsgPSAmbG9jYWwtPmxpbms7IGxpbmstPnByaXYgPSBsb2NhbDsKIAogICAgIC8qIEludGVycnVwdCBzZXR1cCAqLwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CkBAIC0xNzAsMTYgKzE3Miw5IEBACiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAzOwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgZWxzYV9jc19jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZWxzYV9jc19jb25maWcobGluayk7CiB9IC8qIGVsc2FfY3NfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTkxLDIwICsxODYsMTYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGVsc2FfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGVsc2FfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotICAgIGxvY2FsX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CisJbG9jYWxfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJlbHNhX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMCwgImVsc2FfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkgICAgaW5mby0+YnVzeSA9IDE7Ci0JICAgIGVsc2FfY3NfcmVsZWFzZShsaW5rKTsKLSAgICB9CisJaW5mby0+YnVzeSA9IDE7CisJZWxzYV9jc19yZWxlYXNlKGxpbmspOwogCi0gICAga2ZyZWUoaW5mbyk7Ci0KKwlrZnJlZShpbmZvKTsKIH0gLyogZWxzYV9jc19kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMTQsNyArMjA1LDcgQEAKICAgICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCBnZXRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjIyLDcgKzIxMyw3IEBACiAgICAgcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAgICAgaW50IGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjMwLDcgKzIyMSw3IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKK3N0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwpAQCAtMjM4LDkgKzIyOSw4IEBACiAgICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVsc2FfY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGVsc2FfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwogICAgIGxvY2FsX2luZm9fdCAqZGV2OwpAQCAtMjUwLDcgKzI0MCw2IEBACiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAogICAgIERFQlVHKDAsICJlbHNhX2NvbmZpZygweCVwKVxuIiwgbGluayk7Ci0gICAgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKICAgICAvKgpAQCAtMjYyLDcgKzI1MSw3IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAgICAgICAgIGxhc3RfZm4gPSBQYXJzZVR1cGxlOwogCWdvdG8gY3NfZmFpbGVkOwpAQCAtMjcwLDMyICsyNTksMjkgQEAKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIGkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKyAgICBpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogICAgIHdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKICAgICAgICAgaWYgKCAoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIihlbHNhX2NzOiBsb29rcyBsaWtlIHRoZSA5NiBtb2RlbClcbiIpOwogICAgICAgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKICAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisgICAgICAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAgICAgICAgIGlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIihlbHNhX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOwogICAgICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewogICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gajsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisgICAgICAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAgICAgICAgIGlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKyAgICAgICAgaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogICAgIH0KIAogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKQEAgLTMwMywxNCArMjg5LDE0IEBACiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQogCi0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwogICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogICAgICAgbGFzdF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOwogICAgICAgZ290byBjc19mYWlsZWQ7CkBAIC0zMjEsMTQgKzMwNywxMSBAQAogICAgIHNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAiZWxzYSIpOwogICAgIGRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDB4MDsKIAotICAgIGxpbmstPmRldiA9ICZkZXYtPm5vZGU7CisgICAgbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwogCiAgICAgLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0gICAgICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCwKLSAgICAgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLSAgICBpZiAobGluay0+Y29uZi5WcHAxKQotICAgICAgICBwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCisgICAgICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAgICAgaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKICAgICAgICAgcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKQEAgLTMzOSw4ICszMjIsNiBAQAogICAgICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKICAgICBwcmludGsoIlxuIik7CiAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+aW8uQmFzZVBvcnQxOwogICAgIGljYXJkLnByb3RvY29sID0gcHJvdG9jb2w7CkBAIC0zNTQsMTAgKzMzNSwxMSBAQAogICAgIH0gZWxzZQogICAgIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmNhcmRuciA9IGk7CiAKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBpKTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBpKTsKICAgICBlbHNhX2NzX3JlbGVhc2UobGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGVsc2FfY3NfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzY4LDcgKzM1MCw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBlbHNhX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGVsc2FfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKIApAQCAtMzgwLDM5ICszNjIsMjMgQEAKIAkgICAgSGlTYXhfY2xvc2VjYXJkKGxvY2FsLT5jYXJkbnIpOwogCX0KICAgICB9Ci0gICAgLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLSAgICBsaW5rLT5kZXYgPSBOVUxMOwogCi0gICAgLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGlmIChsaW5rLT53aW4pCi0gICAgICAgIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfSAvKiBlbHNhX2NzX3JlbGVhc2UgKi8KIAotc3RhdGljIGludCBlbHNhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBlbHNhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAgICAgICAgIGRldi0+YnVzeSA9IDE7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWxzYV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBlbHNhX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKICAgICAgICAgZGV2LT5idXN5ID0gMDsKIAogCXJldHVybiAwOwpAQCAtNDMwLDcgKzM5Niw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImVsc2FfY3MiLAogCX0sCi0JLnByb2JlCQk9IGVsc2FfY3NfYXR0YWNoLAorCS5wcm9iZQkJPSBlbHNhX2NzX3Byb2JlLAogCS5yZW1vdmUJCT0gZWxzYV9jc19kZXRhY2gsCiAJLmlkX3RhYmxlCT0gZWxzYV9pZHMsCiAJLnN1c3BlbmQJPSBlbHNhX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKaW5kZXggNmY1MjEzYS4uOWJiMThmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwpAQCAtOTUsOCArOTUsOCBAQAogICAgZXZlbnQgaGFuZGxlci4gCiAqLwogCi1zdGF0aWMgdm9pZCBzZWRsYmF1ZXJfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgc2VkbGJhdWVyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHNlZGxiYXVlcl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgc2VkbGJhdWVyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKgogICAgVGhlIGF0dGFjaCgpIGFuZCBkZXRhY2goKSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95CkBAIC0xMTksNyArMTE5LDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgc2hvdWxkbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KIApAQCAtMTMwLDcgKzEzMCw3IEBACiAqLwogICAgCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QJCW5vZGU7CiAgICAgaW50CQkJc3RvcDsKICAgICBpbnQJCQljYXJkbnI7CkBAIC0xNDgsMTEgKzE0OCwxMCBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc2VkbGJhdWVyX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNlZGxiYXVlcl9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsOwotICAgIGRldl9saW5rX3QgKmxpbms7Ci0gICAgCisKICAgICBERUJVRygwLCAic2VkbGJhdWVyX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCkBAIC0xNjAsOCArMTU5LDEwIEBACiAgICAgaWYgKCFsb2NhbCkgcmV0dXJuIC1FTk9NRU07CiAgICAgbWVtc2V0KGxvY2FsLCAwLCBzaXplb2YobG9jYWxfaW5mb190KSk7CiAgICAgbG9jYWwtPmNhcmRuciA9IC0xOwotICAgIGxpbmsgPSAmbG9jYWwtPmxpbms7IGxpbmstPnByaXYgPSBsb2NhbDsKLSAgICAKKworICAgIGxvY2FsLT5wX2RldiA9IGxpbms7CisgICAgbGluay0+cHJpdiA9IGxvY2FsOworCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAgICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwpAQCAtMTgyLDE4ICsxODMsMTAgQEAKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMzsKIAotCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIHNlZGxiYXVlcl9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2VkbGJhdWVyX2NvbmZpZyhsaW5rKTsKIH0gLyogc2VkbGJhdWVyX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwNSwxOSArMTk4LDE1IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBzZWRsYmF1ZXJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNlZGxiYXVlcl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CisJREVCVUcoMCwgInNlZGxiYXVlcl9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgREVCVUcoMCwgInNlZGxiYXVlcl9kZXRhY2goMHglcClcbiIsIGxpbmspOworCSgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOworCXNlZGxiYXVlcl9yZWxlYXNlKGxpbmspOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCSAgICAoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5zdG9wID0gMTsKLQkgICAgc2VkbGJhdWVyX3JlbGVhc2UobGluayk7Ci0gICAgfQotCi0gICAgLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCi0gICAga2ZyZWUobGluay0+cHJpdik7CisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJa2ZyZWUobGluay0+cHJpdik7CiB9IC8qIHNlZGxiYXVlcl9kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsOSArMjE5LDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgc2VkbGJhdWVyX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHR1cGxlX3QgdHVwbGU7CiAgICAgY2lzcGFyc2VfdCBwYXJzZTsKQEAgLTI1NCwxOCArMjQyLDEzIEBACiAgICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotICAgIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKIAotICAgIC8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0gICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOworICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwogCiAgICAgLyoKICAgICAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCkBAIC0yODAsMTIgKzI2MywxMiBAQAogICAgICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgogICAgICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKDEpIHsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDAgfHwKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCSAgICBnb3RvIG5leHRfZW50cnk7CiAKIAlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpIGRmbHQgPSAqY2ZnOwpAQCAtMzA5LDEwICsyOTIsMTAgQEAKIAl9CiAJICAgIAogCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJICAgIGxpbmstPmNvbmYuVnBwID0KIAkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJICAgIGxpbmstPmNvbmYuVnBwID0KIAkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAkKIAkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KQEAgLTMzOSwxMyArMzIyLDEzIEBACiAJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwogCSAgICB9CiAJICAgIC8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JICAgIGlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkgICAgaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJZ290byBuZXh0X2VudHJ5OwogCX0KIAogCS8qCiAJICBOb3cgc2V0IHVwIGEgY29tbW9uIG1lbW9yeSB3aW5kb3csIGlmIG5lZWRlZC4gIFRoZXJlIGlzIHJvb20KLQkgIGluIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSBmb3Igb25lIG1lbW9yeSB3aW5kb3cgaGFuZGxlLAorCSAgaW4gdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSBmb3Igb25lIG1lbW9yeSB3aW5kb3cgaGFuZGxlLAogCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQogCSAgd2luZG93cyBhcmUgbmVlZGVkLCB0aGUgaW5mbyBzaG91bGQgZ28gaW4gdGhlIHByaXZhdGUgZGF0YQogCSAgc3RydWN0dXJlIGZvciB0aGlzIGRldmljZS4KQEAgLTM2Niw3ICszNDksNyBAQAogICAgICAgICAgICAgICAgIHJlcS5TaXplID0gMHgxMDAwOwogKi8KIAkgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKLQkgICAgaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQorCSAgICBpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQogCQlnb3RvIG5leHRfZW50cnk7CiAJICAgIG1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CiAJICAgIGlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkgIT0gMCkKQEAgLTM3NCwyOSArMzU3LDI1IEBACiAJfQogCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KIAlicmVhazsKLQkKKwogICAgIG5leHRfZW50cnk6Ci0vKiBuZXcgaW4gZHVtbXkuY3MgMjAwMS8wMS8yOCBNTiAKLSAgICAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLSAgICAgICAgICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotKi8KLQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQogICAgICAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQogICAgICAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAgICAgKi8KICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCQogICAgIC8qCiAgICAgICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKICAgICAgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAgICAgICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KICAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAgICAgLyoKICAgICAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCkBAIC00MDQsMTQgKzM4MywxMyBAQAogICAgICovCiAgICAgc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJzZWRsYmF1ZXIiKTsKICAgICBkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOwotICAgIGxpbmstPmRldiA9ICZkZXYtPm5vZGU7CisgICAgbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwogCiAgICAgLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0JICAgZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4LAotCSAgIGxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7Ci0gICAgaWYgKGxpbmstPmNvbmYuVnBwMSkKLQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IiwKKwkgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworICAgIGlmIChsaW5rLT5jb25mLlZwcCkKKwlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAvMTAsIGxpbmstPmNvbmYuVnBwJTEwKTsKICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEpCkBAIC00MjQsOCArNDAyLDYgQEAKIAlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAogCSAgICAgICByZXEuQmFzZStyZXEuU2l6ZS0xKTsKICAgICBwcmludGsoIlxuIik7Ci0gICAgCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKIAogICAgIGljYXJkLnBhcmFbMF0gPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgaWNhcmQucGFyYVsxXSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKQEAgLTQzNywxNCArNDEzLDE2IEBACiAgICAgCXByaW50ayhLRVJOX0VSUiAic2VkbGJhdWVyX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBTRURMQkFVRVIgUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsCiAgICAgCQlsYXN0X3JldCwgbGluay0+aW8uQmFzZVBvcnQxKTsKICAgICAJc2VkbGJhdWVyX3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiAgICAgfSBlbHNlCiAgICAgCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+Y2FyZG5yID0gbGFzdF9yZXQ7CiAKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAgICAgc2VkbGJhdWVyX3JlbGVhc2UobGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiAKIH0gLyogc2VkbGJhdWVyX2NvbmZpZyAqLwogCkBAIC00NTYsNyArNDM0LDcgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBzZWRsYmF1ZXJfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgc2VkbGJhdWVyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAgICAgREVCVUcoMCwgInNlZGxiYXVlcl9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKQEAgLTQ2Nyw0NiArNDQ1LDIzIEBACiAJICAgIEhpU2F4X2Nsb3NlY2FyZChsb2NhbC0+Y2FyZG5yKTsKIAl9CiAgICAgfQotICAgIC8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0gICAgbGluay0+ZGV2ID0gTlVMTDsKIAotICAgIC8qCi0gICAgICBJbiBhIG5vcm1hbCBkcml2ZXIsIGFkZGl0aW9uYWwgY29kZSBtYXkgYmUgbmVlZGVkIHRvIHJlbGVhc2UKLSAgICAgIG90aGVyIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLiAKLSAgICAqLwotICAgIAotICAgIC8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBpZiAobGluay0+d2luKQotCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQotCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogc2VkbGJhdWVyX3JlbGVhc2UgKi8KIAotc3RhdGljIGludCBzZWRsYmF1ZXJfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNlZGxiYXVlcl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwogCWRldi0+c3RvcCA9IDE7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VkbGJhdWVyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNlZGxiYXVlcl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CiAJZGV2LT5zdG9wID0gMDsKIAogCXJldHVybiAwOwpAQCAtNTMwLDcgKzQ4NSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInNlZGxiYXVlcl9jcyIsCiAJfSwKLQkucHJvYmUJCT0gc2VkbGJhdWVyX2F0dGFjaCwKKwkucHJvYmUJCT0gc2VkbGJhdWVyX3Byb2JlLAogCS5yZW1vdmUJCT0gc2VkbGJhdWVyX2RldGFjaCwKIAkuaWRfdGFibGUJPSBzZWRsYmF1ZXJfaWRzLAogCS5zdXNwZW5kCT0gc2VkbGJhdWVyX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCmluZGV4IDRlNWMxNGMuLmFmY2MyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCkBAIC03NSw4ICs3NSw4IEBACiAgICBoYW5kbGVyLgogKi8KIAotc3RhdGljIHZvaWQgdGVsZXNfY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgdGVsZXNfY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgdGVsZXNfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIHRlbGVzX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKgogICAgVGhlIGF0dGFjaCgpIGFuZCBkZXRhY2goKSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95CkBAIC04OSwxMCArODksMTAgQEAKIC8qCiAgICBBIGxpbmtlZCBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSB0ZWxlc19jcyBkZXZpY2UuICBFYWNoIGFjdHVhbAogICAgUENNQ0lBIGNhcmQgY29ycmVzcG9uZHMgdG8gb25lIGRldmljZSBpbnN0YW5jZSwgYW5kIGlzIGRlc2NyaWJlZAotICAgYnkgb25lIGRldl9saW5rX3Qgc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgorICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBkZXZfbGlua190IHBvaW50ZXJzLCB3aGVyZSBtaW5vcgorICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjbWNpYV9kZXZpY2UgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCiAgICBkZXZpY2UgbnVtYmVycyBhcmUgdXNlZCB0byBkZXJpdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgaW5kZXguCiAqLwogCkBAIC0xMDIsNyArMTAyLDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgc2hvdWxkbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KICAgIEluIHRoaXMgY2FzZSwgd2UgYWxzbyBwcm92aWRlIGEgZmxhZyB0byBpbmRpY2F0ZSBpZiBhIGRldmljZSBpcwpAQCAtMTEyLDcgKzExMiw3IEBACiAqLwogCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewotICAgIGRldl9saW5rX3QgICAgICAgICAgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCAgICAgICAgICBub2RlOwogICAgIGludCAgICAgICAgICAgICAgICAgYnVzeTsKICAgICBpbnQJCQljYXJkbnI7CkBAIC0xMzAsOSArMTMwLDggQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgdGVsZXNfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgdGVsZXNfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsOwogCiAgICAgREVCVUcoMCwgInRlbGVzX2F0dGFjaCgpXG4iKTsKQEAgLTE0Miw3ICsxNDEsOSBAQAogICAgIGlmICghbG9jYWwpIHJldHVybiAtRU5PTUVNOwogICAgIG1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwogICAgIGxvY2FsLT5jYXJkbnIgPSAtMTsKLSAgICBsaW5rID0gJmxvY2FsLT5saW5rOyBsaW5rLT5wcml2ID0gbG9jYWw7CisKKyAgICBsb2NhbC0+cF9kZXYgPSBsaW5rOworICAgIGxpbmstPnByaXYgPSBsb2NhbDsKIAogICAgIC8qIEludGVycnVwdCBzZXR1cCAqLwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CkBAIC0xNjEsMTYgKzE2Miw5IEBACiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgdGVsZXNfY3NfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRlbGVzX2NzX2NvbmZpZyhsaW5rKTsKIH0gLyogdGVsZXNfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTgyLDIwICsxNzYsMTYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHRlbGVzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCB0ZWxlc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0gICAgbG9jYWxfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKKwlsb2NhbF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0gICAgREVCVUcoMCwgInRlbGVzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMCwgInRlbGVzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JICAgIGluZm8tPmJ1c3kgPSAxOwotCSAgICB0ZWxlc19jc19yZWxlYXNlKGxpbmspOwotICAgIH0KKwlpbmZvLT5idXN5ID0gMTsKKwl0ZWxlc19jc19yZWxlYXNlKGxpbmspOwogCi0gICAga2ZyZWUoaW5mbyk7Ci0KKwlrZnJlZShpbmZvKTsKIH0gLyogdGVsZXNfZGV0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA1LDcgKzE5NSw3IEBACiAgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBnZXRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKQEAgLTIxMyw3ICsyMDMsNyBAQAogICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKTsKQEAgLTIyMSw3ICsyMTEsNyBAQAogICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgaW50IG5leHRfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCitzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSkKIHsKICAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKQEAgLTIyOSw5ICsyMTksOCBAQAogICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogfQogCi1zdGF0aWMgdm9pZCB0ZWxlc19jc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgdGVsZXNfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwogICAgIGxvY2FsX2luZm9fdCAqZGV2OwpAQCAtMjQxLDcgKzIzMCw2IEBACiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAogICAgIERFQlVHKDAsICJ0ZWxlc19jb25maWcoMHglcClcbiIsIGxpbmspOwotICAgIGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgLyoKQEAgLTI1Myw3ICsyNDEsNyBAQAogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogICAgICAgICBsYXN0X2ZuID0gUGFyc2VUdXBsZTsKIAlnb3RvIGNzX2ZhaWxlZDsKQEAgLTI2MSwzMiArMjQ5LDI5IEBACiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7IHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICBpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKICAgICB3aGlsZSAoaSA9PSBDU19TVUNDRVNTKSB7CiAgICAgICAgIGlmICggKGNmLT5pby5ud2luID4gMCkgJiYgY2YtPmlvLndpblswXS5iYXNlKSB7CiAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIodGVsZXNfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7CiAgICAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwogICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOwogICAgICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7CiAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewogICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gajsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisgICAgICAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAgICAgICAgIGlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKyAgICAgICAgaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwogICAgIH0KIAogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKQEAgLTI5NCwxNCArMjc5LDE0IEBACiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQogCi0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwogICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogICAgICAgbGFzdF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOwogICAgICAgZ290byBjc19mYWlsZWQ7CkBAIC0zMTIsMTQgKzI5NywxMSBAQAogICAgIHNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAidGVsZXMiKTsKICAgICBkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAweDA7CiAKLSAgICBsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOworICAgIGxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKIAogICAgIC8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLSAgICBwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotICAgICAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0gICAgICAgICAgIGxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7Ci0gICAgaWYgKGxpbmstPmNvbmYuVnBwMSkKLSAgICAgICAgcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKKyAgICBwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiIsCisgICAgICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAgICAgaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKICAgICAgICAgcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKQEAgLTMzMCw4ICszMTIsNiBAQAogICAgICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKICAgICBwcmludGsoIlxuIik7CiAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+aW8uQmFzZVBvcnQxOwogICAgIGljYXJkLnByb3RvY29sID0gcHJvdG9jb2w7CkBAIC0zNDIsMTMgKzMyMiwxNiBAQAogICAgIAlwcmludGsoS0VSTl9FUlIgInRlbGVzX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBUZWxlcyBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwKICAgICAJCWksIGxpbmstPmlvLkJhc2VQb3J0MSk7CiAgICAgCXRlbGVzX2NzX3JlbGVhc2UobGluayk7Ci0gICAgfSBlbHNlCi0gICAgCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+Y2FyZG5yID0gaTsKKwlyZXR1cm4gLUVOT0RFVjsKKyAgICB9CiAKLSAgICByZXR1cm47CisgICAgKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5jYXJkbnIgPSBpOworICAgIHJldHVybiAwOworCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBpKTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBpKTsKICAgICB0ZWxlc19jc19yZWxlYXNlKGxpbmspOworICAgIHJldHVybiAtRU5PREVWOwogfSAvKiB0ZWxlc19jc19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNTksNyArMzQyLDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHRlbGVzX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHRlbGVzX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKQEAgLTM3MSwzOSArMzU0LDIzIEBACiAJICAgIEhpU2F4X2Nsb3NlY2FyZChsb2NhbC0+Y2FyZG5yKTsKIAl9CiAgICAgfQotICAgIC8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0gICAgbGluay0+ZGV2ID0gTlVMTDsKIAotICAgIC8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBpZiAobGluay0+d2luKQotICAgICAgICBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogdGVsZXNfY3NfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IHRlbGVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB0ZWxlc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwogICAgICAgICBkZXYtPmJ1c3kgPSAxOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlbGVzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHRlbGVzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKICAgICAgICAgZGV2LT5idXN5ID0gMDsKIAogCXJldHVybiAwOwpAQCAtNDIxLDcgKzM4OCw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInRlbGVzX2NzIiwKIAl9LAotCS5wcm9iZQkJPSB0ZWxlc19hdHRhY2gsCisJLnByb2JlCQk9IHRlbGVzX3Byb2JlLAogCS5yZW1vdmUJCT0gdGVsZXNfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHRlbGVzX2lkcywKIAkuc3VzcGVuZAk9IHRlbGVzX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggYTA5MjdkMS4uOTE4NzQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiB7CiAJc3RydWN0IGlwcHBfc3RydWN0ICppczsKIAotCWlmIChscC0+cHBwX3Nsb3QgPCAwIHx8IGxwLT5wcHBfc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHBwcF9zbG90KCVkKSBvdXQgb2YgcmFuZ2VcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGxwLT5wcHBfc2xvdCk7CiAJCXJldHVybiAwOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJbHAtPm5ldGRldi0+cGItPnJlZl9jdC0tOwogCXNwaW5fdW5sb2NrKCZscC0+bmV0ZGV2LT5wYi0+bG9jayk7CiAjZW5kaWYgLyogQ09ORklHX0lTRE5fTVBQICovCi0JaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID4gSVNETl9NQVhfQ0hBTk5FTFMpIHsKKwlpZiAobHAtPnBwcF9zbG90IDwgMCB8fCBscC0+cHBwX3Nsb3QgPj0gSVNETl9NQVhfQ0hBTk5FTFMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcHBwX3Nsb3QoJWQpIG5vdyBpbnZhbGlkXG4iLAogCQkJX19GVU5DVElPTl9fLCBscC0+cHBwX3Nsb3QpOwogCQlyZXR1cm4gMDsKQEAgLTI3OSw3ICsyNzksNyBAQAogCWludCBzbG90OwogCXN0cnVjdCBpcHBwX3N0cnVjdCAqaXM7CiAKLQlpZiAobWluIDwgMCB8fCBtaW4gPiBJU0ROX01BWF9DSEFOTkVMUykKKwlpZiAobWluIDwgMCB8fCBtaW4gPj0gSVNETl9NQVhfQ0hBTk5FTFMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc2xvdCA9IGlzZG5fcHBwX2dldF9zbG90KCk7CkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogIAlpZiAobHAtPm1hc3RlcikgeyAvLyBGSVhNRT8KIAkJbWxwID0gKGlzZG5fbmV0X2xvY2FsICopIGxwLT5tYXN0ZXItPnByaXY7CiAgCQlzbG90ID0gbWxwLT5wcHBfc2xvdDsKLSAJCWlmIChzbG90IDwgMCB8fCBzbG90ID4gSVNETl9NQVhfQ0hBTk5FTFMpIHsKKyAJCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAgCQkJcHJpbnRrKEtFUk5fRVJSICJpc2RuX3BwcF9wdXNoX2hpZ2hlcjogbWFzdGVyLT5wcHBfc2xvdCglZClcbiIsCiAgCQkJCWxwLT5wcHBfc2xvdCk7CiAJCQlnb3RvIGRyb3BfcGFja2V0OwpAQCAtMTI2NCw3ICsxMjY0LDcgQEAKIAkvKiB3ZSBoYXZlIG91ciBscCBsb2NrZWQgZnJvbSBub3cgb24gKi8KIAogCXNsb3QgPSBscC0+cHBwX3Nsb3Q7Ci0JaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXNkbl9wcHBfeG1pdDogbHAtPnBwcF9zbG90KCVkKVxuIiwKIAkJCWxwLT5wcHBfc2xvdCk7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKICAgICAJbXAgPSBuZXRfZGV2LT5wYjsKICAgICAgICAgc3RhdHMgPSAmbXAtPnN0YXRzOwogCXNsb3QgPSBscC0+cHBwX3Nsb3Q7Ci0JaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGxwLT5wcHBfc2xvdCglZClcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGxwLT5wcHBfc2xvdCk7CiAJCXN0YXRzLT5mcmFtZV9kcm9wcysrOwpAQCAtMTY0MCw3ICsxNjQwLDcgQEAKIAlpcy0+bGFzdF9saW5rX3NlcW5vID0gbWluc2VxID0gbmV3c2VxOwogCWZvciAobHBxID0gbmV0X2Rldi0+cXVldWU7OykgewogCQlzbG90ID0gbHBxLT5wcHBfc2xvdDsKLQkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbHBxLT5wcHBfc2xvdCglZClcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBscHEtPnBwcF9zbG90KTsKIAkJfSBlbHNlIHsKQEAgLTI2NDgsNyArMjY0OCw3IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiUmVjZWl2ZWQgQ0NQIGZyYW1lIGZyb20gcGVlciBzbG90KCVkKVxuIiwKIAkJbHAtPnBwcF9zbG90KTsKLQlpZiAobHAtPnBwcF9zbG90IDwgMCB8fCBscC0+cHBwX3Nsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCWlmIChscC0+cHBwX3Nsb3QgPCAwIHx8IGxwLT5wcHBfc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBscC0+cHBwX3Nsb3QoJWQpIG91dCBvZiByYW5nZVxuIiwKIAkJCV9fRlVOQ1RJT05fXywgbHAtPnBwcF9zbG90KTsKIAkJcmV0dXJuOwpAQCAtMjY1OCw3ICsyNjU4LDcgQEAKIAogCWlmKGxwLT5tYXN0ZXIpIHsKIAkJaW50IHNsb3QgPSAoKGlzZG5fbmV0X2xvY2FsICopIChscC0+bWFzdGVyLT5wcml2KSktPnBwcF9zbG90OwotCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+IElTRE5fTUFYX0NIQU5ORUxTKSB7CisJCWlmIChzbG90IDwgMCB8fCBzbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzbG90KCVkKSBvdXQgb2YgcmFuZ2VcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBzbG90KTsKIAkJCXJldHVybjsKQEAgLTI4NDUsNyArMjg0NSw3IEBACiAKIAlpZiAobHAtPm1hc3RlcikgewogCQlzbG90ID0gKChpc2RuX25ldF9sb2NhbCAqKSAobHAtPm1hc3Rlci0+cHJpdikpLT5wcHBfc2xvdDsKLQkJaWYgKHNsb3QgPCAwIHx8IHNsb3QgPiBJU0ROX01BWF9DSEFOTkVMUykgeworCQlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogc2xvdCglZCkgb3V0IG9mIHJhbmdlXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgc2xvdCk7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKaW5kZXggMzU4NWZiMS4uMmFjOTAyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwpAQCAtMjg4MCw3ICsyODgwLDcgQEAKIAkJCXBbMF0rKzsKIAkJCWkgPSAwOwogCQkJd2hpbGUgKCpwWzBdICYmIChzdHJjaHIoIjAxMjM0NTY3ODksLSpbXT87IiwgKnBbMF0pKSAmJgotCQkJICAgICAgIChpIDwgSVNETl9MTVNOTEVOKSkKKwkJCSAgICAgICAoaSA8IElTRE5fTE1TTkxFTiAtIDEpKQogCQkJCW0tPmxtc25baSsrXSA9ICpwWzBdKys7CiAJCQltLT5sbXNuW2ldID0gJ1wwJzsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCAyYzRmMjBiLi42MjY1MDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtNCw4ICs0LDExIEBACiBjb25maWcgTkVXX0xFRFMKIAlib29sICJMRUQgU3VwcG9ydCIKIAloZWxwCi0JICBTYXkgWSB0byBlbmFibGUgTGludXggTEVEIHN1cHBvcnQuICBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHN0YW5kYXJkCi0JICBrZXlib2FyZCBMRURzIHdoaWNoIGFyZSBjb250cm9sbGVkIHZpYSB0aGUgaW5wdXQgc3lzdGVtLgorCSAgU2F5IFkgdG8gZW5hYmxlIExpbnV4IExFRCBzdXBwb3J0LiAgVGhpcyBhbGxvd3MgY29udHJvbCBvZiBzdXBwb3J0ZWQKKwkgIExFRHMgZnJvbSBib3RoIHVzZXJzcGFjZSBhbmQgb3B0aW9uYWxseSwgYnkga2VybmVsIGV2ZW50cyAodHJpZ2dlcnMpLgorCisJICBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHN0YW5kYXJkIGtleWJvYXJkIExFRHMgd2hpY2ggYXJlIGNvbnRyb2xsZWQKKwkgIHZpYSB0aGUgaW5wdXQgc3lzdGVtLgogCiBjb25maWcgTEVEU19DTEFTUwogCXRyaXN0YXRlICJMRUQgQ2xhc3MgU3VwcG9ydCIKQEAgLTE0LDEzICsxNyw3IEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBsZWQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLiAgWW91J2xsCiAJICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBMRURTX1RSSUdHRVJTCi0JYm9vbCAiTEVEIFRyaWdnZXIgc3VwcG9ydCIKLQlkZXBlbmRzIE5FV19MRURTCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0cmlnZ2VyIHN1cHBvcnQgZm9yIHRoZSBsZWRzIGNsYXNzLgotCSAgVGhlc2UgdHJpZ2dlcnMgYWxsb3cga2VybmVsIGV2ZW50cyB0byBkcml2ZSB0aGUgTEVEcyBhbmQgY2FuCi0JICBiZSBjb25maWd1cmVkIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS4KK2NvbW1lbnQgIkxFRCBkcml2ZXJzIgogCiBjb25maWcgTEVEU19DT1JHSQogCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgdGhlIFNoYXJwIFNMLUM3eDAgc2VyaWVzIgpAQCAtNTksNiArNTYsMjMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMgb24gU2hhcnAgWmF1cnVzCiAJICBTTC02MDAwIHNlcmllcy4KIAorY29uZmlnIExFRFNfUzNDMjRYWAorCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0MyNFhYIEdQSU8gTEVEcyIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgQVJDSF9TM0MyNDEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byBHUElPIGxpbmVzCisJICBvbiBTYW1zdW5nIFMzQzI0WFggc2VyaWVzIENQVXMsIHN1Y2ggYXMgdGhlIFMzQzI0MTAgYW5kIFMzQzI0NDAuCisKK2NvbW1lbnQgIkxFRCBUcmlnZ2VycyIKKworY29uZmlnIExFRFNfVFJJR0dFUlMKKwlib29sICJMRUQgVHJpZ2dlciBzdXBwb3J0IgorCWRlcGVuZHMgTkVXX0xFRFMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRyaWdnZXIgc3VwcG9ydCBmb3IgdGhlIGxlZHMgY2xhc3MuCisJICBUaGVzZSB0cmlnZ2VycyBhbGxvdyBrZXJuZWwgZXZlbnRzIHRvIGRyaXZlIHRoZSBMRURzIGFuZCBjYW4KKwkgIGJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLiBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSCiAJdHJpc3RhdGUgIkxFRCBUaW1lciBUcmlnZ2VyIgogCWRlcGVuZHMgTEVEU19UUklHR0VSUwpAQCAtNjcsNyArODEsNyBAQAogCSAgdmlhIHN5c2ZzLiBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgTEVEU19UUklHR0VSX0lERV9ESVNLCi0JYm9vbCAiTEVEIFRpbWVyIFRyaWdnZXIiCisJYm9vbCAiTEVEIElERSBEaXNrIFRyaWdnZXIiCiAJZGVwZW5kcyBMRURTX1RSSUdHRVJTICYmIEJMS19ERVZfSURFRElTSwogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBJREUgZGlzayBhY3Rpdml0eS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCA0MDY5OWQzLi40MGYwNDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfTEVEU19TUElUWikJCSs9IGxlZHMtc3BpdHoubwogb2JqLSQoQ09ORklHX0xFRFNfSVhQNFhYKQkJKz0gbGVkcy1peHA0eHgtZ3Bpby5vCiBvYmotJChDT05GSUdfTEVEU19UT1NBKQkJCSs9IGxlZHMtdG9zYS5vCitvYmotJChDT05GSUdfTEVEU19TM0MyNFhYKQkJKz0gbGVkcy1zM2MyNHh4Lm8KIAogIyBMRUQgVHJpZ2dlcnMKIG9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIpCSs9IGxlZHRyaWctdGltZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCmluZGV4IGIwYjVkMDUuLmM3NWQwZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgImxlZHMuaCIKIApAQCAtNDMsOSArNDQsMTMgQEAKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiAJY2hhciAqYWZ0ZXI7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmFmdGVyLCAxMCk7CisJc2l6ZV90IGNvdW50ID0gYWZ0ZXIgLSBidWY7CiAKLQlpZiAoYWZ0ZXIgLSBidWYgPiAwKSB7Ci0JCXJldCA9IGFmdGVyIC0gYnVmOworCWlmICgqYWZ0ZXIgJiYgaXNzcGFjZSgqYWZ0ZXIpKQorCQljb3VudCsrOworCisJaWYgKGNvdW50ID09IHNpemUpIHsKKwkJcmV0ID0gY291bnQ7CiAJCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qIGRyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYworICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIC0gTEVEcyBHUElPIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbGVkcy1ncGlvLmg+CisKKy8qIG91ciBjb250ZXh0ICovCisKK3N0cnVjdCBzM2MyNHh4X2dwaW9fbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2CQkgY2RldjsKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEJKnBkYXRhOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqcGRldl90b19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqdG9fZ3BpbyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCwgY2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0eHhfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQgPSB0b19ncGlvKGxlZF9jZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgKnBkID0gbGVkLT5wZGF0YTsKKworCS8qIHRoZXJlIHdpbGwgYmUgYSBzb3J0IGRlbGF5IGJldHdlZW4gc2V0dGluZyB0aGUgb3V0cHV0IGFuZAorCSAqIGdvaW5nIGZyb20gb3V0cHV0IHRvIGlucHV0IHdoZW4gdXNpbmcgdHJpc3RhdGUuICovCisKKwlzM2MyNDEwX2dwaW9fc2V0cGluKHBkLT5ncGlvLCAodmFsdWUgPyAxIDogMCkgXgorCQkJICAgIChwZC0+ZmxhZ3MgJiBTM0MyNFhYX0xFREZfQUNUTE9XKSk7CisKKwlpZiAocGQtPmZsYWdzICYgUzNDMjRYWF9MRURGX1RSSVNUQVRFKQorCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkLT5ncGlvLAorCQkJCSAgICB2YWx1ZSA/IFMzQzI0MTBfR1BJT19PVVRQVVQgOiBTM0MyNDEwX0dQSU9fSU5QVVQpOworCit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gcGRldl90b19ncGlvKGRldik7CisKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2KTsKKwlrZnJlZShsZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQ7CisJaW50IHJldDsKKworCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGxlZCk7CisKKwlsZWQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBzM2MyNHh4X2xlZF9zZXQ7CisJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHBkYXRhLT5kZWZfdHJpZ2dlcjsKKwlsZWQtPmNkZXYubmFtZSA9IHBkYXRhLT5uYW1lOworCisJbGVkLT5wZGF0YSA9IHBkYXRhOworCisJLyogbm8gcG9pbnQgaW4gaGF2aW5nIGEgcHVsbC11cCBpZiB3ZSBhcmUgYWx3YXlzIGRyaXZpbmcgKi8KKworCWlmIChwZGF0YS0+ZmxhZ3MgJiBTM0MyNFhYX0xFREZfVFJJU1RBVEUpIHsKKwkJczNjMjQxMF9ncGlvX3NldHBpbihwZGF0YS0+Z3BpbywgMCk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4ocGRhdGEtPmdwaW8sIFMzQzI0MTBfR1BJT19JTlBVVCk7CisJfSBlbHNlIHsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChwZGF0YS0+Z3BpbywgMCk7CisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4ocGRhdGEtPmdwaW8sIDApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkYXRhLT5ncGlvLCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKwl9CisKKwkvKiByZWdpc3RlciBvdXIgbmV3IGxlZCBkZXZpY2UgKi8KKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmZGV2LT5kZXYsICZsZWQtPmNkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibGVkX2NsYXNzZGV2X3JlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdF9lcnIxOworCX0KKworCXJldHVybiAwOworCisgZXhpdF9lcnIxOgorCWtmcmVlKGxlZCk7CisJcmV0dXJuIHJldDsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzYzI0eHhfbGVkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHMzYzI0eHhfZ3Bpb19sZWQgKmxlZCA9IHBkZXZfdG9fZ3BpbyhkZXYpOworCisJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJmxlZC0+Y2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9sZWRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ncGlvX2xlZCAqbGVkID0gcGRldl90b19ncGlvKGRldik7CisKKwlsZWRfY2xhc3NkZXZfcmVzdW1lKCZsZWQtPmNkZXYpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgczNjMjR4eF9sZWRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfbGVkX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9sZWRfZHJpdmVyID0geworCS5wcm9iZQkJPSBzM2MyNHh4X2xlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzYzI0eHhfbGVkX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzYzI0eHhfbGVkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNHh4X2xlZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9sZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0eHhfbGVkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNHh4X2xlZF9leGl0KHZvaWQpCit7CisgCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNHh4X2xlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzM2MyNHh4X2xlZF9pbml0KTsKK21vZHVsZV9leGl0KHMzYzI0eHhfbGVkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0WFggTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKaW5kZXggZjQ4NGI1ZDYuLmZiZjE0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSAibGVkcy5oIgogCkBAIC02OSwxMSArNzAsMTUgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAljaGFyICphZnRlcjsKIAl1bnNpZ25lZCBsb25nIHN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmYWZ0ZXIsIDEwKTsKKwlzaXplX3QgY291bnQgPSBhZnRlciAtIGJ1ZjsKIAotCWlmIChhZnRlciAtIGJ1ZiA+IDApIHsKKwlpZiAoKmFmdGVyICYmIGlzc3BhY2UoKmFmdGVyKSkKKwkJY291bnQrKzsKKworCWlmIChjb3VudCA9PSBzaXplKSB7CiAJCXRpbWVyX2RhdGEtPmRlbGF5X29uID0gc3RhdGU7CiAJCW1vZF90aW1lcigmdGltZXJfZGF0YS0+dGltZXIsIGppZmZpZXMgKyAxKTsKLQkJcmV0ID0gYWZ0ZXIgLSBidWY7CisJCXJldCA9IGNvdW50OwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05NywxMSArMTAyLDE1IEBACiAJaW50IHJldCA9IC1FSU5WQUw7CiAJY2hhciAqYWZ0ZXI7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmFmdGVyLCAxMCk7CisJc2l6ZV90IGNvdW50ID0gYWZ0ZXIgLSBidWY7CiAKLQlpZiAoYWZ0ZXIgLSBidWYgPiAwKSB7CisJaWYgKCphZnRlciAmJiBpc3NwYWNlKCphZnRlcikpCisJCWNvdW50Kys7CisKKwlpZiAoY291bnQgPT0gc2l6ZSkgewogCQl0aW1lcl9kYXRhLT5kZWxheV9vZmYgPSBzdGF0ZTsKIAkJbW9kX3RpbWVyKCZ0aW1lcl9kYXRhLT50aW1lciwgamlmZmllcyArIDEpOwotCQlyZXQgPSBhZnRlciAtIGJ1ZjsKKwkJcmV0ID0gY291bnQ7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA1ZWJmZDFkLi41MjgyZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC02MjcsOCArNjI3LDggQEAKIAlpZih0aGVybV90eXBlID09IEFEVDc0NjApCiAJCWRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyX2Zhbl9zcGVlZCk7CiAKLSNpZm5kZWYgQ09ORklHX0kyQ19LRVlXRVNUCi0JcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisjaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CiAjZW5kaWYKIAogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IGZkMmFhZTEuLmFjMjVhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTEzOSwxMSArMTM5LDEyIEBACiAJICBpcyBvbmxpbmUuICBIb3dldmVyIGl0IGlzIHN0aWxsIEVYUEVSSU1FTlRBTCBjb2RlLiAgSXQgc2hvdWxkCiAJICB3b3JrLCBidXQgcGxlYXNlIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBiYWNrdXBzLgogCi0JICBZb3Ugd2lsbCBuZWVkIGEgdmVyc2lvbiBvZiBtZGFkbSBuZXdlciB0aGFuIDIuMy4xLiAgIER1cmluZyB0aGUKLQkgIGVhcmx5IHN0YWdlIG9mIHJlc2hhcGUgdGhlcmUgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YQotCSAgaXMgYmVpbmcgb3Zlci13cml0dGVuLiAgQSBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUKLQkgIGZvciByZWNvdmVyeS4gIFRoZSBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlCi0JICBjcml0aWNhbCBzZWN0aW9uIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KKwkgIFlvdSB3aWxsIG5lZWQgbWRhZG0gdmVyaW9uIDIuNC4xIG9yIGxhdGVyIHRvIHVzZSB0aGlzCisJICBmZWF0dXJlIHNhZmVseS4gIER1cmluZyB0aGUgZWFybHkgc3RhZ2Ugb2YgcmVzaGFwZSB0aGVyZSBpcworCSAgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YSBpcyBiZWluZyBvdmVyLXdyaXR0ZW4uICBBCisJICBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUgZm9yIHJlY292ZXJ5LiAgVGhlCisJICBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24KKwkgIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KIAogCSAgVGhlIG1kYWRtIHVzYWdlIGlzIGUuZy4KIAkgICAgICAgbWRhZG0gLS1ncm93IC9kZXYvbWQxIC0tcmFpZC1kaXNrcz02CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jIGIvZHJpdmVycy9tZC9kbS10YXJnZXQuYwppbmRleCBhZWNkOWUwLi42NGZkOGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMKQEAgLTc4LDggKzc4LDcgQEAKIAlpZiAoLS10aS0+dXNlID09IDApCiAJCW1vZHVsZV9wdXQodGktPnR0Lm1vZHVsZSk7CiAKLQlpZiAodGktPnVzZSA8IDApCi0JCUJVRygpOworCUJVR19PTih0aS0+dXNlIDwgMCk7CiAJdXBfcmVhZCgmX2xvY2spOwogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDFlZDUxNTIuLmYxOWI4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTE2Myw5ICsxNjMsMTkgQEAKIHsKIAlhdG9taWNfaW5jKCZtZF9ldmVudF9jb3VudCk7CiAJd2FrZV91cCgmbWRfZXZlbnRfd2FpdGVycyk7CisJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfYWN0aW9uIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9uZXdfZXZlbnQpOwogCisvKiBBbHRlcm5hdGUgdmVyc2lvbiB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzCisgKiB3aGVuIGNhbGxpbmcgc3lzZnNfbm90aWZ5IGlzbid0IG5lZWRlZC4KKyAqLwordm9pZCBtZF9uZXdfZXZlbnRfaW5pbnRyKG1kZGV2X3QgKm1kZGV2KQoreworCWF0b21pY19pbmMoJm1kX2V2ZW50X2NvdW50KTsKKwl3YWtlX3VwKCZtZF9ldmVudF93YWl0ZXJzKTsKK30KKwogLyoKICAqIEVuYWJsZXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBleGlzdGluZyBtZCBhcnJheXMKICAqIGFsbF9tZGRldnNfbG9jayBwcm90ZWN0cyB0aGlzIGxpc3QuCkBAIC0yNzgsMTEgKzI4OCw2IEBACiAJcmV0dXJuIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1kZGV2X2xvY2tfdW5pbnRlcnJ1cHRpYmxlKG1kZGV2X3QgKiBtZGRldikKLXsKLQltdXRleF9sb2NrKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBtZGRldl90cnlsb2NrKG1kZGV2X3QgKiBtZGRldikKIHsKIAlyZXR1cm4gbXV0ZXhfdHJ5bG9jaygmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKQEAgLTIyNTYsNyArMjI2MSw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKGNtZF9tYXRjaChwYWdlLCAiY2hlY2siKSkKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssICZtZGRldi0+cmVjb3ZlcnkpOwotCQllbHNlIGlmIChjbWRfbWF0Y2gocGFnZSwgInJlcGFpciIpKQorCQllbHNlIGlmICghY21kX21hdGNoKHBhZ2UsICJyZXBhaXIiKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC0yNDU3LDkgKzI0NjIsMTEgQEAKIAogCWlmICghZW50cnktPnNob3cpCiAJCXJldHVybiAtRUlPOwotCW1kZGV2X2xvY2sobWRkZXYpOwotCXJ2ID0gZW50cnktPnNob3cobWRkZXYsIHBhZ2UpOwotCW1kZGV2X3VubG9jayhtZGRldik7CisJcnYgPSBtZGRldl9sb2NrKG1kZGV2KTsKKwlpZiAoIXJ2KSB7CisJCXJ2ID0gZW50cnktPnNob3cobWRkZXYsIHBhZ2UpOworCQltZGRldl91bmxvY2sobWRkZXYpOworCX0KIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTI0NzMsOSArMjQ4MCwxMSBAQAogCiAJaWYgKCFlbnRyeS0+c3RvcmUpCiAJCXJldHVybiAtRUlPOwotCW1kZGV2X2xvY2sobWRkZXYpOwotCXJ2ID0gZW50cnktPnN0b3JlKG1kZGV2LCBwYWdlLCBsZW5ndGgpOwotCW1kZGV2X3VubG9jayhtZGRldik7CisJcnYgPSBtZGRldl9sb2NrKG1kZGV2KTsKKwlpZiAoIXJ2KSB7CisJCXJ2ID0gZW50cnktPnN0b3JlKG1kZGV2LCBwYWdlLCBsZW5ndGgpOworCQltZGRldl91bmxvY2sobWRkZXYpOworCX0KIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTQxNDksNyArNDE1OCw3IEBACiAJc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKLQltZF9uZXdfZXZlbnQobWRkZXYpOworCW1kX25ld19ldmVudF9pbmludHIobWRkZXYpOwogfQogCiAvKiBzZXFfZmlsZSBpbXBsZW1lbnRhdGlvbiAvcHJvYy9tZHN0YXQgKi8KQEAgLTQzNDAsOCArNDM0OSw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChtZGRldl9sb2NrKG1kZGV2KSE9MCkgCisJaWYgKG1kZGV2X2xvY2sobWRkZXYpIDwgMCkKIAkJcmV0dXJuIC1FSU5UUjsKKwogCWlmIChtZGRldi0+cGVycyB8fCBtZGRldi0+cmFpZF9kaXNrcyB8fCAhbGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSkgewogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIDogJXNhY3RpdmUiLCBtZG5hbWUobWRkZXYpLAogCQkJCQkJbWRkZXYtPnBlcnMgPyAiIiA6ICJpbiIpOwpAQCAtNTAyNyw4ICs1MDM3LDEwIEBACiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiBzdG9wcGluZyBhbGwgbWQgZGV2aWNlcy5cbiIpOwogCiAJCUlURVJBVEVfTURERVYobWRkZXYsdG1wKQotCQkJaWYgKG1kZGV2X3RyeWxvY2sobWRkZXYpKQorCQkJaWYgKG1kZGV2X3RyeWxvY2sobWRkZXYpKSB7CiAJCQkJZG9fbWRfc3RvcCAobWRkZXYsIDEpOworCQkJCW1kZGV2X3VubG9jayhtZGRldik7CisJCQl9CiAJCS8qCiAJCSAqIGNlcnRhaW4gbW9yZSBleG90aWMgU0NTSSBkZXZpY2VzIGFyZSBrbm93biB0byBiZQogCQkgKiB2b2xhdGlsZSB3cnQgdG9vIGVhcmx5IHN5c3RlbSByZWJvb3RzLiBXaGlsZSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCA2NzhmNGRiLi5jYjhjNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC0zMzEsMTMgKzMzMSwxNCBAQAogCQlnb3RvIG91dF9mcmVlX2NvbmY7CiAJc2l6ZSA9IGNvbmYtPnN0cmlwX3pvbmVbY3VyXS5zaXplOwogCi0JZm9yIChpPTA7IGk8IG5iX3pvbmU7IGkrKykgewotCQljb25mLT5oYXNoX3RhYmxlW2ldID0gY29uZi0+c3RyaXBfem9uZSArIGN1cjsKKwljb25mLT5oYXNoX3RhYmxlWzBdID0gY29uZi0+c3RyaXBfem9uZSArIGN1cjsKKwlmb3IgKGk9MTsgaTwgbmJfem9uZTsgaSsrKSB7CiAJCXdoaWxlIChzaXplIDw9IGNvbmYtPmhhc2hfc3BhY2luZykgewogCQkJY3VyKys7CiAJCQlzaXplICs9IGNvbmYtPnN0cmlwX3pvbmVbY3VyXS5zaXplOwogCQl9CiAJCXNpemUgLT0gY29uZi0+aGFzaF9zcGFjaW5nOworCQljb25mLT5oYXNoX3RhYmxlW2ldID0gY29uZi0+c3RyaXBfem9uZSArIGN1cjsKIAl9CiAJaWYgKGNvbmYtPnByZXNoaWZ0KSB7CiAJCWNvbmYtPmhhc2hfc3BhY2luZyA+Pj0gY29uZi0+cHJlc2hpZnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggOWIzNzRjOS4uNDA3MGVmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtMzE1LDEwICszMTUsMTEgQEAKIAkJaWYgKHIxX2Jpby0+Ymlvc1ttaXJyb3JdID09IGJpbykKIAkJCWJyZWFrOwogCi0JaWYgKGVycm9yID09IC1FTk9UU1VQUCAmJiB0ZXN0X2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSkpIHsKKwlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFAgJiYgdGVzdF9iaXQoUjFCSU9fQmFycmllciwgJnIxX2Jpby0+c3RhdGUpKSB7CiAJCXNldF9iaXQoQmFycmllcnNOb3RzdXBwLCAmY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYtPmZsYWdzKTsKIAkJc2V0X2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKTsKIAkJcjFfYmlvLT5tZGRldi0+YmFycmllcnNfd29yayA9IDA7CisJCS8qIERvbid0IHJkZXZfZGVjX3BlbmRpbmcgaW4gdGhpcyBicmFuY2ggLSBrZWVwIGl0IGZvciB0aGUgcmV0cnkgKi8KIAl9IGVsc2UgewogCQkvKgogCQkgKiB0aGlzIGJyYW5jaCBpcyBvdXIgJ29uZSBtaXJyb3IgSU8gaGFzIGZpbmlzaGVkJyBldmVudCBoYW5kbGVyOgpAQCAtMzY1LDYgKzM2Niw3IEBACiAJCQkJfQogCQkJfQogCQl9CisJCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYsIGNvbmYtPm1kZGV2KTsKIAl9CiAJLyoKIAkgKgpAQCAtMzc0LDExICszNzYsOSBAQAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyMV9iaW8tPnJlbWFpbmluZykpIHsKIAkJaWYgKHRlc3RfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpKSB7CiAJCQlyZXNjaGVkdWxlX3JldHJ5KHIxX2Jpbyk7Ci0JCQkvKiBEb24ndCBkZWNfcGVuZGluZyB5ZXQsIHdlIHdhbnQgdG8gaG9sZAotCQkJICogdGhlIHJlZmVyZW5jZSBvdmVyIHRoZSByZXRyeQotCQkJICovCiAJCQlnb3RvIG91dDsKIAkJfQorCQkvKiBpdCByZWFsbHkgaXMgdGhlIGVuZCBvZiB0aGlzIHJlcXVlc3QgKi8KIAkJaWYgKHRlc3RfYml0KFIxQklPX0JlaGluZElPLCAmcjFfYmlvLT5zdGF0ZSkpIHsKIAkJCS8qIGZyZWUgZXh0cmEgY29weSBvZiB0aGUgZGF0YSBwYWdlcyAqLwogCQkJaW50IGkgPSBiaW8tPmJpX3ZjbnQ7CkBAIC0zOTMsOCArMzkzLDYgQEAKIAkJbWRfd3JpdGVfZW5kKHIxX2Jpby0+bWRkZXYpOwogCQlyYWlkX2VuZF9iaW9faW8ocjFfYmlvKTsKIAl9Ci0KLQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2LCBjb25mLT5tZGRldik7CiAgb3V0OgogCWlmICh0b19wdXQpCiAJCWJpb19wdXQodG9fcHV0KTsKQEAgLTc1MywxOCArNzUxLDI0IEBACiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CiAJaW50IGRvX2JhcnJpZXJzOwogCi0JaWYgKHVubGlrZWx5KCFtZGRldi0+YmFycmllcnNfd29yayAmJiBiaW9fYmFycmllcihiaW8pKSkgewotCQliaW9fZW5kaW8oYmlvLCBiaW8tPmJpX3NpemUsIC1FT1BOT1RTVVBQKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJLyoKIAkgKiBSZWdpc3RlciB0aGUgbmV3IHJlcXVlc3QgYW5kIHdhaXQgaWYgdGhlIHJlY29uc3RydWN0aW9uCiAJICogdGhyZWFkIGhhcyBwdXQgdXAgYSBiYXIgZm9yIG5ldyByZXF1ZXN0cy4KIAkgKiBDb250aW51ZSBpbW1lZGlhdGVseSBpZiBubyByZXN5bmMgaXMgYWN0aXZlIGN1cnJlbnRseS4KKwkgKiBXZSB0ZXN0IGJhcnJpZXJzX3dvcmsgKmFmdGVyKiBtZF93cml0ZV9zdGFydCBhcyBtZF93cml0ZV9zdGFydAorCSAqIG1heSBjYXVzZSB0aGUgZmlyc3Qgc3VwZXJibG9jayB3cml0ZSwgYW5kIHRoYXQgd2lsbCBjaGVjayBvdXQKKwkgKiBpZiBiYXJyaWVycyB3b3JrLgogCSAqLworCiAJbWRfd3JpdGVfc3RhcnQobWRkZXYsIGJpbyk7IC8qIHdhaXQgb24gc3VwZXJibG9jayB1cGRhdGUgZWFybHkgKi8KIAorCWlmICh1bmxpa2VseSghbWRkZXYtPmJhcnJpZXJzX3dvcmsgJiYgYmlvX2JhcnJpZXIoYmlvKSkpIHsKKwkJaWYgKHJ3ID09IFdSSVRFKQorCQkJbWRfd3JpdGVfZW5kKG1kZGV2KTsKKwkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXplLCAtRU9QTk9UU1VQUCk7CisJCXJldHVybiAwOworCX0KKwogCXdhaXRfYmFycmllcihjb25mKTsKIAogCWRpc2tfc3RhdF9pbmMobWRkZXYtPmdlbmRpc2ssIGlvc1tyd10pOwpAQCAtMTQwNCwxMCArMTQwOCwxMSBAQAogCQkJdW5wbHVnID0gMTsKIAkJfSBlbHNlIGlmICh0ZXN0X2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKSkgewogCQkJLyogc29tZSByZXF1ZXN0cyBpbiB0aGUgcjFiaW8gd2VyZSBCSU9fUldfQkFSUklFUgotCQkJICogcmVxdWVzdHMgd2hpY2ggZmFpbGVkIHdpdGggLUVOT1RTVVBQLiAgSG9odW1tLi4KKwkJCSAqIHJlcXVlc3RzIHdoaWNoIGZhaWxlZCB3aXRoIC1FT1BOT1RTVVBQLiAgSG9odW1tLi4KIAkJCSAqIEJldHRlciByZXN1Ym1pdCB3aXRob3V0IHRoZSBiYXJyaWVyLgogCQkJICogV2Uga25vdyB3aGljaCBkZXZpY2VzIHRvIHJlc3VibWl0IGZvciwgYmVjYXVzZQogCQkJICogYWxsIG90aGVycyBoYXZlIGhhZCB0aGVpciBiaW9zW10gZW50cnkgY2xlYXJlZC4KKwkJCSAqIFdlIGFscmVhZHkgaGF2ZSBhIG5yX3BlbmRpbmcgcmVmZXJlbmNlIG9uIHRoZXNlIHJkZXZzLgogCQkJICovCiAJCQlpbnQgaTsKIAkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKTsKQEAgLTE1NTgsOCArMTU2Myw3IEBACiAJaW50IGJ1ZmZzOwogCiAJYnVmZnMgPSBSRVNZTkNfV0lORE9XIC8gUkVTWU5DX0JMT0NLX1NJWkU7Ci0JaWYgKGNvbmYtPnIxYnVmX3Bvb2wpCi0JCUJVRygpOworCUJVR19PTihjb25mLT5yMWJ1Zl9wb29sKTsKIAljb25mLT5yMWJ1Zl9wb29sID0gbWVtcG9vbF9jcmVhdGUoYnVmZnMsIHIxYnVmX3Bvb2xfYWxsb2MsIHIxYnVmX3Bvb2xfZnJlZSwKIAkJCQkJICBjb25mLT5wb29saW5mbyk7CiAJaWYgKCFjb25mLT5yMWJ1Zl9wb29sKQpAQCAtMTczMiw4ICsxNzM2LDcgQEAKIAkJCSAgICAhY29uZi0+ZnVsbHN5bmMgJiYKIAkJCSAgICAhdGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJCQlicmVhazsKLQkJCWlmIChzeW5jX2Jsb2NrcyA8IChQQUdFX1NJWkU+PjkpKQotCQkJCUJVRygpOworCQkJQlVHX09OKHN5bmNfYmxvY2tzIDwgKFBBR0VfU0laRT4+OSkpOwogCQkJaWYgKGxlbiA+IChzeW5jX2Jsb2Nrczw8OSkpCiAJCQkJbGVuID0gc3luY19ibG9ja3M8PDk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IGFiOTBhNmQuLjE0NDA5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMTExNyw4ICsxMTE3LDcgQEAKIAlmb3IgKGk9MDsgaTxjb25mLT5jb3BpZXM7IGkrKykKIAkJaWYgKHIxMF9iaW8tPmRldnNbaV0uYmlvID09IGJpbykKIAkJCWJyZWFrOwotCWlmIChpID09IGNvbmYtPmNvcGllcykKLQkJQlVHKCk7CisJQlVHX09OKGkgPT0gY29uZi0+Y29waWVzKTsKIAl1cGRhdGVfaGVhZF9wb3MoaSwgcjEwX2Jpbyk7CiAJZCA9IHIxMF9iaW8tPmRldnNbaV0uZGV2bnVtOwogCkBAIC0xNDA4LDQzICsxNDA3LDU0IEBACiAJCQkJaWYgKHMgPiAoUEFHRV9TSVpFPj45KSkKIAkJCQkJcyA9IFBBR0VfU0laRSA+PiA5OwogCisJCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJCWRvIHsKIAkJCQkJaW50IGQgPSByMTBfYmlvLT5kZXZzW3NsXS5kZXZudW07Ci0JCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7CisJCQkJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkXS5yZGV2KTsKIAkJCQkJaWYgKHJkZXYgJiYKLQkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKLQkJCQkJICAgIHN5bmNfcGFnZV9pbyhyZGV2LT5iZGV2LAotCQkJCQkJCSByMTBfYmlvLT5kZXZzW3NsXS5hZGRyICsKLQkJCQkJCQkgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0LAotCQkJCQkJCSBzPDw5LAotCQkJCQkJCSBjb25mLT50bXBwYWdlLCBSRUFEKSkKLQkJCQkJCXN1Y2Nlc3MgPSAxOwotCQkJCQllbHNlIHsKLQkJCQkJCXNsKys7Ci0JCQkJCQlpZiAoc2wgPT0gY29uZi0+Y29waWVzKQotCQkJCQkJCXNsID0gMDsKKwkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJCQkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOworCQkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJCQlzdWNjZXNzID0gc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsCisJCQkJCQkJCSAgICAgICByMTBfYmlvLT5kZXZzW3NsXS5hZGRyICsKKwkJCQkJCQkJICAgICAgIHNlY3QgKyByZGV2LT5kYXRhX29mZnNldCwKKwkJCQkJCQkJICAgICAgIHM8PDksCisJCQkJCQkJCSAgICAgICBjb25mLT50bXBwYWdlLCBSRUFEKTsKKwkJCQkJCXJkZXZfZGVjX3BlbmRpbmcocmRldiwgbWRkZXYpOworCQkJCQkJcmN1X3JlYWRfbG9jaygpOworCQkJCQkJaWYgKHN1Y2Nlc3MpCisJCQkJCQkJYnJlYWs7CiAJCQkJCX0KKwkJCQkJc2wrKzsKKwkJCQkJaWYgKHNsID09IGNvbmYtPmNvcGllcykKKwkJCQkJCXNsID0gMDsKIAkJCQl9IHdoaWxlICghc3VjY2VzcyAmJiBzbCAhPSByMTBfYmlvLT5yZWFkX3Nsb3QpOworCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCQkJaWYgKHN1Y2Nlc3MpIHsKIAkJCQkJaW50IHN0YXJ0ID0gc2w7CiAJCQkJCS8qIHdyaXRlIGl0IGJhY2sgYW5kIHJlLXJlYWQgKi8KKwkJCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJCQl3aGlsZSAoc2wgIT0gcjEwX2Jpby0+cmVhZF9zbG90KSB7CiAJCQkJCQlpbnQgZDsKIAkJCQkJCWlmIChzbD09MCkKIAkJCQkJCQlzbCA9IGNvbmYtPmNvcGllczsKIAkJCQkJCXNsLS07CiAJCQkJCQlkID0gcjEwX2Jpby0+ZGV2c1tzbF0uZGV2bnVtOwotCQkJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKLQkJCQkJCWF0b21pY19hZGQocywgJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpOworCQkJCQkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2RdLnJkZXYpOwogCQkJCQkJaWYgKHJkZXYgJiYKIAkJCQkJCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCQkJCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CisJCQkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJCQkJYXRvbWljX2FkZChzLCAmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CiAJCQkJCQkJaWYgKHN5bmNfcGFnZV9pbyhyZGV2LT5iZGV2LAogCQkJCQkJCQkJIHIxMF9iaW8tPmRldnNbc2xdLmFkZHIgKwogCQkJCQkJCQkJIHNlY3QgKyByZGV2LT5kYXRhX29mZnNldCwKIAkJCQkJCQkJCSBzPDw5LCBjb25mLT50bXBwYWdlLCBXUklURSkgPT0gMCkKIAkJCQkJCQkJLyogV2VsbCwgdGhpcyBkZXZpY2UgaXMgZGVhZCAqLwogCQkJCQkJCQltZF9lcnJvcihtZGRldiwgcmRldik7CisJCQkJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7CisJCQkJCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCXNsID0gc3RhcnQ7CkBAIC0xNDU0LDE3ICsxNDY0LDIyIEBACiAJCQkJCQkJc2wgPSBjb25mLT5jb3BpZXM7CiAJCQkJCQlzbC0tOwogCQkJCQkJZCA9IHIxMF9iaW8tPmRldnNbc2xdLmRldm51bTsKLQkJCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7CisJCQkJCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZF0ucmRldik7CiAJCQkJCQlpZiAocmRldiAmJgogCQkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJCQkJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKKwkJCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsCiAJCQkJCQkJCQkgcjEwX2Jpby0+ZGV2c1tzbF0uYWRkciArCiAJCQkJCQkJCQkgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0LAogCQkJCQkJCQkJIHM8PDksIGNvbmYtPnRtcHBhZ2UsIFJFQUQpID09IDApCiAJCQkJCQkJCS8qIFdlbGwsIHRoaXMgZGV2aWNlIGlzIGRlYWQgKi8KIAkJCQkJCQkJbWRfZXJyb3IobWRkZXYsIHJkZXYpOworCQkJCQkJCXJkZXZfZGVjX3BlbmRpbmcocmRldiwgbWRkZXYpOworCQkJCQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCQkJCX0KIAkJCQkJfQorCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQl9IGVsc2UgewogCQkJCQkvKiBDYW5ub3QgcmVhZCBmcm9tIGFueXdoZXJlIC0tIGJ5ZSBieWUgYXJyYXkgKi8KIAkJCQkJbWRfZXJyb3IobWRkZXYsIGNvbmYtPm1pcnJvcnNbcjEwX2Jpby0+ZGV2c1tyMTBfYmlvLT5yZWFkX3Nsb3RdLmRldm51bV0ucmRldik7CkBAIC0xNTE4LDggKzE1MzMsNyBAQAogCWludCBidWZmczsKIAogCWJ1ZmZzID0gUkVTWU5DX1dJTkRPVyAvIFJFU1lOQ19CTE9DS19TSVpFOwotCWlmIChjb25mLT5yMTBidWZfcG9vbCkKLQkJQlVHKCk7CisJQlVHX09OKGNvbmYtPnIxMGJ1Zl9wb29sKTsKIAljb25mLT5yMTBidWZfcG9vbCA9IG1lbXBvb2xfY3JlYXRlKGJ1ZmZzLCByMTBidWZfcG9vbF9hbGxvYywgcjEwYnVmX3Bvb2xfZnJlZSwgY29uZik7CiAJaWYgKCFjb25mLT5yMTBidWZfcG9vbCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggZGFlNzQwYS4uMzE4NDM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtNzMsMTAgKzczLDggQEAKIHN0YXRpYyB2b2lkIF9fcmVsZWFzZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzaC0+Y291bnQpKSB7Ci0JCWlmICghbGlzdF9lbXB0eSgmc2gtPmxydSkpCi0JCQlCVUcoKTsKLQkJaWYgKGF0b21pY19yZWFkKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk9PTApCi0JCQlCVUcoKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSk7CisJCUJVR19PTihhdG9taWNfcmVhZCgmY29uZi0+YWN0aXZlX3N0cmlwZXMpPT0wKTsKIAkJaWYgKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKSB7CiAJCQlpZiAodGVzdF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpKQogCQkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5kZWxheWVkX2xpc3QpOwpAQCAtMTg0LDEwICsxODIsOCBAQAogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkgIT0gMCkKLQkJQlVHKCk7Ci0JaWYgKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKQotCQlCVUcoKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnNoLT5jb3VudCkgIT0gMCk7CisJQlVHX09OKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKTsKIAkKIAlDSEVDS19ERVZMT0NLKCk7CiAJUFJJTlRLKCJpbml0X3N0cmlwZSBjYWxsZWQsIHN0cmlwZSAlbGx1XG4iLCAKQEAgLTI2OSw4ICsyNjUsNyBAQAogCQkJCWluaXRfc3RyaXBlKHNoLCBzZWN0b3IsIHBkX2lkeCwgZGlza3MpOwogCQl9IGVsc2UgewogCQkJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKSB7Ci0JCQkJaWYgKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSkKLQkJCQkJQlVHKCk7CisJCQkgIEJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoIXRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKQogCQkJCQlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC00NjUsOCArNDYwLDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlpZiAoIXNoKQogCQlyZXR1cm4gMDsKLQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpCi0JCUJVRygpOworCUJVR19PTihhdG9taWNfcmVhZCgmc2gtPmNvdW50KSk7CiAJc2hyaW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnBvb2xfc2l6ZSk7CiAJa21lbV9jYWNoZV9mcmVlKGNvbmYtPnNsYWJfY2FjaGUsIHNoKTsKIAlhdG9taWNfZGVjKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC04ODIsOCArODc2LDcgQEAKIAlwdHJbMF0gPSBwYWdlX2FkZHJlc3Moc2gtPmRldltwZF9pZHhdLnBhZ2UpOwogCXN3aXRjaChtZXRob2QpIHsKIAljYXNlIFJFQURfTU9ESUZZX1dSSVRFOgotCQlpZiAoIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltwZF9pZHhdLmZsYWdzKSkKLQkJCUJVRygpOworCQlCVUdfT04oIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltwZF9pZHhdLmZsYWdzKSk7CiAJCWZvciAoaT1kaXNrcyA7IGktLSA7KSB7CiAJCQlpZiAoaT09cGRfaWR4KQogCQkJCWNvbnRpbnVlOwpAQCAtODk2LDcgKzg4OSw3IEBACiAJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9PdmVybGFwLCAmc2gtPmRldltpXS5mbGFncykpCiAJCQkJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwogCi0JCQkJaWYgKHNoLT5kZXZbaV0ud3JpdHRlbikgQlVHKCk7CisJCQkJQlVHX09OKHNoLT5kZXZbaV0ud3JpdHRlbik7CiAJCQkJc2gtPmRldltpXS53cml0dGVuID0gY2hvc2VuOwogCQkJCWNoZWNrX3hvcigpOwogCQkJfQpAQCAtOTEyLDcgKzkwNSw3IEBACiAJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9PdmVybGFwLCAmc2gtPmRldltpXS5mbGFncykpCiAJCQkJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwogCi0JCQkJaWYgKHNoLT5kZXZbaV0ud3JpdHRlbikgQlVHKCk7CisJCQkJQlVHX09OKHNoLT5kZXZbaV0ud3JpdHRlbik7CiAJCQkJc2gtPmRldltpXS53cml0dGVuID0gY2hvc2VuOwogCQkJfQogCQlicmVhazsKQEAgLTk5NSw4ICs5ODgsNyBAQAogCWlmICgqYmlwICYmICgqYmlwKS0+Ymlfc2VjdG9yIDwgYmktPmJpX3NlY3RvciArICgoYmktPmJpX3NpemUpPj45KSkKIAkJZ290byBvdmVybGFwOwogCi0JaWYgKCpiaXAgJiYgYmktPmJpX25leHQgJiYgKCpiaXApICE9IGJpLT5iaV9uZXh0KQotCQlCVUcoKTsKKwlCVUdfT04oKmJpcCAmJiBiaS0+YmlfbmV4dCAmJiAoKmJpcCkgIT0gYmktPmJpX25leHQpOwogCWlmICgqYmlwKQogCQliaS0+YmlfbmV4dCA9ICpiaXA7CiAJKmJpcCA9IGJpOwpAQCAtMTQzMCw4ICsxNDIyLDcgQEAKIAkJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIAkJaWYgKGZhaWxlZCA9PSAwKSB7CiAJCQljaGFyICpwYWdlYTsKLQkJCWlmICh1cHRvZGF0ZSAhPSBkaXNrcykKLQkJCQlCVUcoKTsKKwkJCUJVR19PTih1cHRvZGF0ZSAhPSBkaXNrcyk7CiAJCQljb21wdXRlX3Bhcml0eShzaCwgQ0hFQ0tfUEFSSVRZKTsKIAkJCXVwdG9kYXRlLS07CiAJCQlwYWdlYSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W3NoLT5wZF9pZHhdLnBhZ2UpOwpAQCAtMjA5Niw4ICsyMDg3LDcgQEAKIAogCQlsaXN0X2RlbF9pbml0KGZpcnN0KTsKIAkJYXRvbWljX2luYygmc2gtPmNvdW50KTsKLQkJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpIT0gMSkKLQkJCUJVRygpOworCQlCVUdfT04oYXRvbWljX3JlYWQoJnNoLT5jb3VudCkhPSAxKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQogCQloYW5kbGVkKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jIGIvZHJpdmVycy9tZC9yYWlkNm1haW4uYwppbmRleCBhYjY0YjM3Li5iYzY5MzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKQEAgLTkxLDEwICs5MSw4IEBACiBzdGF0aWMgdm9pZCBfX3JlbGVhc2Vfc3RyaXBlKHJhaWQ2X2NvbmZfdCAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2gtPmNvdW50KSkgewotCQlpZiAoIWxpc3RfZW1wdHkoJnNoLT5scnUpKQotCQkJQlVHKCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmY29uZi0+YWN0aXZlX3N0cmlwZXMpPT0wKQotCQkJQlVHKCk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkpOworCQlCVUdfT04oYXRvbWljX3JlYWQoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKT09MCk7CiAJCWlmICh0ZXN0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKSkgewogCQkJaWYgKHRlc3RfYml0KFNUUklQRV9ERUxBWUVELCAmc2gtPnN0YXRlKSkKIAkJCQlsaXN0X2FkZF90YWlsKCZzaC0+bHJ1LCAmY29uZi0+ZGVsYXllZF9saXN0KTsKQEAgLTIwMiwxMCArMjAwLDggQEAKIAlyYWlkNl9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3MsIGk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkgIT0gMCkKLQkJQlVHKCk7Ci0JaWYgKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKQotCQlCVUcoKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnNoLT5jb3VudCkgIT0gMCk7CisJQlVHX09OKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKTsKIAogCUNIRUNLX0RFVkxPQ0soKTsKIAlQUklOVEsoImluaXRfc3RyaXBlIGNhbGxlZCwgc3RyaXBlICVsbHVcbiIsCkBAIC0yODQsMTMgKzI4MCwxMSBAQAogCQkJCWluaXRfc3RyaXBlKHNoLCBzZWN0b3IsIHBkX2lkeCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpIHsKLQkJCQlpZiAoIWxpc3RfZW1wdHkoJnNoLT5scnUpKQotCQkJCQlCVUcoKTsKKwkJCQlCVUdfT04oIWxpc3RfZW1wdHkoJnNoLT5scnUpKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKCF0ZXN0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKSkKIAkJCQkJYXRvbWljX2luYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwotCQkJCWlmIChsaXN0X2VtcHR5KCZzaC0+bHJ1KSkKLQkJCQkJQlVHKCk7CisJCQkJQlVHX09OKGxpc3RfZW1wdHkoJnNoLT5scnUpKTsKIAkJCQlsaXN0X2RlbF9pbml0KCZzaC0+bHJ1KTsKIAkJCX0KIAkJfQpAQCAtMzUzLDggKzM0Nyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJaWYgKCFzaCkKIAkJcmV0dXJuIDA7Ci0JaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKQotCQlCVUcoKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpOwogCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKTsKIAlrbWVtX2NhY2hlX2ZyZWUoY29uZi0+c2xhYl9jYWNoZSwgc2gpOwogCWF0b21pY19kZWMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKQEAgLTc4MCw3ICs3NzMsNyBAQAogCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVfT3ZlcmxhcCwgJnNoLT5kZXZbaV0uZmxhZ3MpKQogCQkJCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAotCQkJCWlmIChzaC0+ZGV2W2ldLndyaXR0ZW4pIEJVRygpOworCQkJCUJVR19PTihzaC0+ZGV2W2ldLndyaXR0ZW4pOwogCQkJCXNoLT5kZXZbaV0ud3JpdHRlbiA9IGNob3NlbjsKIAkJCX0KIAkJYnJlYWs7CkBAIC05NzAsOCArOTYzLDcgQEAKIAlpZiAoKmJpcCAmJiAoKmJpcCktPmJpX3NlY3RvciA8IGJpLT5iaV9zZWN0b3IgKyAoKGJpLT5iaV9zaXplKT4+OSkpCiAJCWdvdG8gb3ZlcmxhcDsKIAotCWlmICgqYmlwICYmIGJpLT5iaV9uZXh0ICYmICgqYmlwKSAhPSBiaS0+YmlfbmV4dCkKLQkJQlVHKCk7CisJQlVHX09OKCpiaXAgJiYgYmktPmJpX25leHQgJiYgKCpiaXApICE9IGJpLT5iaV9uZXh0KTsKIAlpZiAoKmJpcCkKIAkJYmktPmJpX25leHQgPSAqYmlwOwogCSpiaXAgPSBiaTsKQEAgLTE5MDYsOCArMTg5OCw3IEBACiAKIAkJbGlzdF9kZWxfaW5pdChmaXJzdCk7CiAJCWF0b21pY19pbmMoJnNoLT5jb3VudCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSE9IDEpCi0JCQlCVUcoKTsKKwkJQlVHX09OKGF0b21pY19yZWFkKCZzaC0+Y291bnQpIT0gMSk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCiAJCWhhbmRsZWQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwppbmRleCBiYWE5ZjU4Li4zNDRkODNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCkBAIC04LDIyICs4LDU0IEBACiAJdHJpc3RhdGUgIlZpZGVvIEZvciBMaW51eCIKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBhdWRpby92aWRlbyBjYXB0dXJlIGFuZCBvdmVybGF5IGRldmljZXMgYW5kIEZNIHJhZGlvCi0JICBjYXJkcy4gVGhlIGV4YWN0IGNhcGFiaWxpdGllcyBvZiBlYWNoIGRldmljZSB2YXJ5LiBVc2VyIHRvb2xzIGZvcgotCSAgdGhpcyBhcmUgYXZhaWxhYmxlIGZyb20KLQkgIDxmdHA6Ly9mdHAudWsubGludXgub3JnL3B1Yi9saW51eC92aWRlbzRsaW51eC8+LgorCSAgY2FyZHMuIFRoZSBleGFjdCBjYXBhYmlsaXRpZXMgb2YgZWFjaCBkZXZpY2UgdmFyeS4KIAogCSAgVGhpcyBrZXJuZWwgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIG5ldyBWaWRlbyBmb3IgTGludXggVHdvIEFQSSwKIAkgIChWNEwyKSBhcyB3ZWxsIGFzIHRoZSBvcmlnaW5hbCBzeXN0ZW0uIERyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucwogCSAgbmVlZCB0byBiZSByZXdyaXR0ZW4gdG8gdXNlIFY0TDIsIGJ1dCBkcml2ZXJzIGZvciBwb3B1bGFyIGNhcmRzCiAJICBhbmQgYXBwbGljYXRpb25zIGZvciBtb3N0IHZpZGVvIGNhcHR1cmUgZnVuY3Rpb25zIGFscmVhZHkgZXhpc3QuCiAKLQkgIERvY3VtZW50YXRpb24gZm9yIHRoZSBvcmlnaW5hbCBBUEkgaXMgaW5jbHVkZWQgaW4gdGhlIGZpbGUKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LiAgRG9jdW1lbnRhdGlvbiBmb3IgVjRMMiBpcwotCSAgYXZhaWxhYmxlIG9uIHRoZSB3ZWIgYXQgPGh0dHA6Ly9ieXRlc2V4Lm9yZy92NGwvPi4KKwkgIEFkZGl0aW9uYWwgaW5mbyBhbmQgZG9jcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSB3ZWIgYXQKKwkgIDxodHRwOi8vbGludXh0di5vcmc+CisKKwkgIERvY3VtZW50YXRpb24gZm9yIFY0TDIgaXMgYWxzbyBhdmFpbGFibGUgb24gdGhlIHdlYiBhdAorCSAgPGh0dHA6Ly9ieXRlc2V4Lm9yZy92NGwvPi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmlkZW9kZXYuCiAKK2NvbmZpZyBWSURFT19WNEwxCisJYm9vbGVhbiAiRW5hYmxlIFZpZGVvIEZvciBMaW51eCBBUEkgMSAoREVQUkVDQVRFRCkiCisJZGVwZW5kcyBvbiBWSURFT19ERVYKKwlzZWxlY3QgVklERU9fVjRMMV9DT01QQVQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBFbmFibGVzIGEgY29tcGF0aWJpbGl0eSBBUEkgdXNlZCBieSBtb3N0IFY0TDIgZGV2aWNlcyB0byBhbGxvdworCSAgaXRzIHVzYWdlIHdpdGggbGVnYWN5IGFwcGxpY2F0aW9ucyB0aGF0IHN1cHBvcnRzIG9ubHkgVjRMMSBhcGkuCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIFkuCisKK2NvbmZpZyBWSURFT19WNEwxX0NPTVBBVAorCWJvb2xlYW4gIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgY29tcGF0aWJsZSBMYXllciIKKwlkZXBlbmRzIG9uIFZJREVPX0RFVgorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYXBpIHdlcmUgZGV2ZWxvcGVkIHRvIGJlIHVzZWQgYXQgS2VybmVsIDIuMiBhbmQgMi40LCBidXQKKwkgIGxhY2tzIHN1cHBvcnQgZm9yIHNldmVyYWwgdmlkZW8gc3RhbmRhcmRzLiBUaGVyZSBhcmUgc2V2ZXJhbAorCSAgZHJpdmVycyBhdCBrZXJuZWwgdGhhdCBzdGlsbCBkZXBlbmRzIG9uIGl0LgorCisJICBEb2N1bWVudGF0aW9uIGZvciB0aGUgb3JpZ2luYWwgQVBJIGlzIGluY2x1ZGVkIGluIHRoZSBmaWxlCisJICA8RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFVzZXIgdG9vbHMgZm9yIHRoaXMgYXJlIGF2YWlsYWJsZSBmcm9tCisJICA8ZnRwOi8vZnRwLnVrLmxpbnV4Lm9yZy9wdWIvbGludXgvdmlkZW80bGludXgvPi4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgYXMgdG8gd2hldGhlciB0aGlzIGlzIHJlcXVpcmVkLCBhbnN3ZXIgWS4KKworY29uZmlnIFZJREVPX1Y0TDIKKwl0cmlzdGF0ZQorCWRlZmF1bHQgeQorCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWciCkBAIC01MSwxOCArODMsMTcgQEAKIAl0cmlzdGF0ZQogCiBjb25maWcgVVNCX0RBQlVTQgotICAgICAgICB0cmlzdGF0ZSAiREFCVVNCIGRyaXZlciIKLSAgICAgICAgZGVwZW5kcyBvbiBVU0IKLSAgICAgICAgLS0taGVscC0tLQotICAgICAgICAgIEEgRGlnaXRhbCBBdWRpbyBCcm9hZGNhc3RpbmcgKERBQikgUmVjZWl2ZXIgZm9yIFVTQiBhbmQgTGludXgKLSAgICAgICAgICBicm91Z2h0IHRvIHlvdSBieSB0aGUgREFCLVRlYW0KLSAgICAgICAgICA8aHR0cDovL3d3d2JvZGUuY3MudHVtLmVkdS9QYXIvYXJjaC9kYWIvPi4gIFRoaXMgZHJpdmVyIGNhbiBiZSB0YWtlbgotICAgICAgICAgIGFzIGFuIGV4YW1wbGUgZm9yIFVSQi1iYXNlZCBidWxrLCBjb250cm9sLCBhbmQgaXNvY2hyb25vdXMKLSAgICAgICAgICB0cmFuc2FjdGlvbnMuIFVSQidzIGFyZSBleHBsYWluZWQgaW4KLSAgICAgICAgICA8RG9jdW1lbnRhdGlvbi91c2IvVVJCLnR4dD4uCisJdHJpc3RhdGUgIkRBQlVTQiBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBBIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpIFJlY2VpdmVyIGZvciBVU0IgYW5kIExpbnV4CisJICBicm91Z2h0IHRvIHlvdSBieSB0aGUgREFCLVRlYW0KKwkgIDxodHRwOi8vd3d3Ym9kZS5jcy50dW0uZWR1L1Bhci9hcmNoL2RhYi8+LiAgVGhpcyBkcml2ZXIgY2FuIGJlIHRha2VuCisJICBhcyBhbiBleGFtcGxlIGZvciBVUkItYmFzZWQgYnVsaywgY29udHJvbCwgYW5kIGlzb2Nocm9ub3VzCisJICB0cmFuc2FjdGlvbnMuIFVSQidzIGFyZSBleHBsYWluZWQgaW4KKwkgIDxEb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0Pi4KIAotICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotICAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkYWJ1c2IuCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkYWJ1c2IuCiAKIGVuZG1lbnUKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcKaW5kZXggNmE5MDFhMC4uMWEwNGRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnCkBAIC0xLDkgKzEsMTAgQEAKIGNvbmZpZyBWSURFT19TQUE3MTQ2CiAJdHJpc3RhdGUKLQlzZWxlY3QgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFZJREVPX1NBQTcxNDZfVlYKIAl0cmlzdGF0ZQorCXNlbGVjdCBWSURFT19WNEwyCiAJc2VsZWN0IFZJREVPX0JVRgogCXNlbGVjdCBWSURFT19WSURFT0JVRgogCXNlbGVjdCBWSURFT19TQUE3MTQ2CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwppbmRleCAzZjBlYzZiLi5hOTdjOGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKQEAgLTIyLDI2ICsyMiwyNiBAQAogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9LY29uZmlnIgogCiBjb21tZW50ICJTdXBwb3J0ZWQgU0FBNzE0NiBiYXNlZCBQQ0kgQWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZyIKIAogY29tbWVudCAiU3VwcG9ydGVkIFVTQiBBZGFwdGVycyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCICYmIEkyQwogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL0tjb25maWciCiAKIGNvbW1lbnQgIlN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgKFBDSSB8fCBVU0IpCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiAoUENJIHx8IFVTQikgJiYgSTJDCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZyIKIAogY29tbWVudCAiU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWciCiAKIGNvbW1lbnQgIlN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL0tjb25maWciCiAKIGNvbW1lbnQgIlN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IDI5NjM2MDUuLmQ3ZjFmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRFZCX0IyQzJfRkxFWENPUAogCXRyaXN0YXRlICJUZWNobmlzYXQvQjJDMiBGbGV4Q29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJc2VsZWN0IERWQl9TVFYwMjk5CiAJc2VsZWN0IERWQl9NVDM1MgogCXNlbGVjdCBEVkJfTVQzMTIKQEAgLTE2LDcgKzE2LDcgQEAKIAogY29uZmlnIERWQl9CMkMyX0ZMRVhDT1BfUENJCiAJdHJpc3RhdGUgIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIgotCWRlcGVuZHMgb24gRFZCX0IyQzJfRkxFWENPUCAmJiBQQ0kKKwlkZXBlbmRzIG9uIERWQl9CMkMyX0ZMRVhDT1AgJiYgUENJICYmIEkyQwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBBaXIvU2t5L0NhYmxlU3RhcjIgUENJIGNhcmQgKERWQi9BVFNDKSBieSBUZWNobmlzYXQvQjJDMi4KIApAQCAtMjQsNyArMjQsNyBAQAogCiBjb25maWcgRFZCX0IyQzJfRkxFWENPUF9VU0IKIAl0cmlzdGF0ZSAiVGVjaG5pc2F0L0IyQzIgQWlyL1NreS9DYWJsZTJQQyBVU0IiCi0JZGVwZW5kcyBvbiBEVkJfQjJDMl9GTEVYQ09QICYmIFVTQgorCWRlcGVuZHMgb24gRFZCX0IyQzJfRkxFWENPUCAmJiBVU0IgJiYgSTJDCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIEFpci9Ta3kvQ2FibGUyUEMgVVNCMS4xIGJveCAoRFZCL0FUU0MpIGJ5IFRlY2huaXNhdC9CMkMyLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwppbmRleCAyMzM3YjQxLi5mMzk0MDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKQEAgLTEsMTIgKzEsMTQgQEAKIGNvbmZpZyBEVkJfQlQ4WFgKIAl0cmlzdGF0ZSAiQlQ4eHggYmFzZWQgUENJIGNhcmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIFZJREVPX0JUODQ4CisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX0JUODQ4CiAJc2VsZWN0IERWQl9NVDM1MgogCXNlbGVjdCBEVkJfU1A4ODdYCiAJc2VsZWN0IERWQl9OWFQ2MDAwCiAJc2VsZWN0IERWQl9DWDI0MTEwCiAJc2VsZWN0IERWQl9PUjUxMjExCiAJc2VsZWN0IERWQl9MR0RUMzMwWAorCXNlbGVjdCBEVkJfWkwxMDM1MworCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIEJ0OHh4IFBDSSBicmlkZ2UuIEV4YW1wbGVzIGFyZQogCSAgdGhlIE5lYnVsYSBjYXJkcywgdGhlIFBpbm5hY2xlIFBDVFYgY2FyZHMsIHRoZSBUd2luaGFuIERTVCBjYXJkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggYmFhODIyNy4uY2NjN2IyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJ0ODc4IF9faW5pdCAqZHZiX2J0OHh4Xzg3OF9tYXRjaCh1bnNpZ25lZCBpbnQgYnR0dl9uciwgc3RydWN0IHBjaV9kZXYqIGJ0dHZfcGNpX2RldikKK3N0YXRpYyBzdHJ1Y3QgYnQ4NzggX19kZXZpbml0ICpkdmJfYnQ4eHhfODc4X21hdGNoKHVuc2lnbmVkIGludCBidHR2X25yLCBzdHJ1Y3QgcGNpX2RldiogYnR0dl9wY2lfZGV2KQogewogCXVuc2lnbmVkIGludCBjYXJkX25yOwogCkBAIC03MDksNyArNzA5LDcgQEAKIAkJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkdmJfYnQ4eHhfbG9hZF9jYXJkKHN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZCwgdTMyIHR5cGUpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkdmJfYnQ4eHhfbG9hZF9jYXJkKHN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZCwgdTMyIHR5cGUpCiB7CiAJaW50IHJlc3VsdDsKIApAQCAtNzk0LDcgKzc5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHZiX2J0OHh4X3Byb2JlKHN0cnVjdCBidHR2X3N1Yl9kZXZpY2UgKnN1YikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGR2Yl9idDh4eF9wcm9iZShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpCiB7CiAJc3RydWN0IGR2Yl9idDh4eF9jYXJkICpjYXJkOwogCXN0cnVjdCBwY2lfZGV2KiBidHR2X3BjaV9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKaW5kZXggNzFiNTc1ZC4uOTMyNWQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwpAQCAtOTAyLDcgKzkwMiwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkdmJfcmVnaXN0ZXJfYWRhcHRlcigmY2luZXJneXQyLT5hZGFwdGVyLCBEUklWRVJfTkFNRSwgVEhJU19NT0RVTEUpOworCWlmICgoZXJyID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlciwgRFJJVkVSX05BTUUsIFRISVNfTU9EVUxFKSkgPCAwKSB7CisJCWtmcmVlKGNpbmVyZ3l0Mik7CisJCXJldHVybiBlcnI7CisJfQogCiAJY2luZXJneXQyLT5kZW11eC5wcml2ID0gY2luZXJneXQyOwogCWNpbmVyZ3l0Mi0+ZGVtdXguZmlsdGVybnVtID0gMjU2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCAwOWU5NmU5Li4wNDU3OGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMTQxLDEyICsxNDEsMTggQEAKIAl9CiAKIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKSB7Ci0JCXZvaWQgKm1lbSA9IHZtYWxsb2MoRFZSX0JVRkZFUl9TSVpFKTsKKwkJdm9pZCAqbWVtOworCQlpZiAoIWR2YmRldi0+cmVhZGVycykgeworCQkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJbWVtID0gdm1hbGxvYyhEVlJfQlVGRkVSX1NJWkUpOwogCQlpZiAoIW1lbSkgewogCQkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRteGRldi0+ZHZyX2J1ZmZlciwgbWVtLCBEVlJfQlVGRkVSX1NJWkUpOworCQlkdmJkZXYtPnJlYWRlcnMtLTsKIAl9CiAKIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7CkBAIC0xODQsNiArMTkwLDcgQEAKIAkJCQkJCWRteGRldi0+ZHZyX29yaWdfZmUpOwogCX0KIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKSB7CisJCWR2YmRldi0+cmVhZGVycysrOwogCQlpZiAoZG14ZGV2LT5kdnJfYnVmZmVyLmRhdGEpIHsKIAkJCXZvaWQgKm1lbSA9IGRteGRldi0+ZHZyX2J1ZmZlci5kYXRhOwogCQkJbWIoKTsKQEAgLTEwMjksOCArMTAzNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2RldmljZSBkdmJkZXZfZHZyID0gewogCS5wcml2ID0gTlVMTCwKLQkudXNlcnMgPSAxLAotCS53cml0ZXJzID0gMSwKKwkucmVhZGVycyA9IDEsCiAJLmZvcHMgPSAmZHZiX2R2cl9mb3BzCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IDJjM2VhOGYuLmEwNTE3OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC0xMDUsNiArMTA1LDkgQEAKIAlmZV9zdGF0dXNfdCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyB0dW5lX21vZGVfZmxhZ3M7CiAJdW5zaWduZWQgaW50IGRlbGF5OworCXVuc2lnbmVkIGludCByZWluaXRpYWxpc2U7CisJaW50IHRvbmU7CisJaW50IHZvbHRhZ2U7CiAKIAkvKiBzd3ppZ3phZyB2YWx1ZXMgKi8KIAl1bnNpZ25lZCBpbnQgc3RhdGU7CkBAIC0xMjEsNiArMTI0LDcgQEAKIAl1bnNpZ25lZCBpbnQgY2hlY2tfd3JhcHBlZDsKIH07CiAKK3N0YXRpYyB2b2lkIGR2Yl9mcm9udGVuZF93YWtldXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwogCiBzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfYWRkX2V2ZW50KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCBzdGF0dXMpCiB7CkBAIC0yMTMsNiArMjE3LDE1IEBACiAJCWZlLT5vcHMtPmluaXQoZmUpOwogfQogCit2b2lkIGR2Yl9mcm9udGVuZF9yZWluaXRpYWxpc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKworCWZlcHJpdi0+cmVpbml0aWFsaXNlID0gMTsKKwlkdmJfZnJvbnRlbmRfd2FrZXVwKGZlKTsKK30KK0VYUE9SVF9TWU1CT0woZHZiX2Zyb250ZW5kX3JlaW5pdGlhbGlzZSk7CisKIHN0YXRpYyB2b2lkIGR2Yl9mcm9udGVuZF9zd3ppZ3phZ191cGRhdGVfZGVsYXkoc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYsIGludCBsb2NrZWQpCiB7CiAJaW50IHEyOwpAQCAtNTA1LDggKzUxOCw4IEBACiAJZmVwcml2LT5xdWFsaXR5ID0gMDsKIAlmZXByaXYtPmRlbGF5ID0gMypIWjsKIAlmZXByaXYtPnN0YXR1cyA9IDA7Ci0JZHZiX2Zyb250ZW5kX2luaXQoZmUpOwogCWZlcHJpdi0+d2FrZXVwID0gMDsKKwlmZXByaXYtPnJlaW5pdGlhbGlzZSA9IDE7CiAKIAl3aGlsZSAoMSkgewogCQl1cCgmZmVwcml2LT5zZW0pOwkgICAgLyogaXMgbG9ja2VkIHdoZW4gd2UgZW50ZXIgdGhlIHRocmVhZC4uLiAqLwpAQCAtNTI0LDYgKzUzNywxNyBAQAogCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZmZXByaXYtPnNlbSkpCiAJCQlicmVhazsKIAorCQlpZiAoZmVwcml2LT5yZWluaXRpYWxpc2UpIHsKKwkJCWR2Yl9mcm9udGVuZF9pbml0KGZlKTsKKwkJCWlmIChmZXByaXYtPnRvbmUgIT0gLTEpIHsKKwkJCQlmZS0+b3BzLT5zZXRfdG9uZShmZSwgZmVwcml2LT50b25lKTsKKwkJCX0KKwkJCWlmIChmZXByaXYtPnZvbHRhZ2UgIT0gLTEpIHsKKwkJCQlmZS0+b3BzLT5zZXRfdm9sdGFnZShmZSwgZmVwcml2LT52b2x0YWdlKTsKKwkJCX0KKwkJCWZlcHJpdi0+cmVpbml0aWFsaXNlID0gMDsKKwkJfQorCiAJCS8qIGRvIGFuIGl0ZXJhdGlvbiBvZiB0aGUgdHVuaW5nIGxvb3AgKi8KIAkJaWYgKGZlLT5vcHMtPnR1bmUpIHsKIAkJCS8qIGhhdmUgd2UgYmVlbiBhc2tlZCB0byByZXR1bmU/ICovCkBAIC03NzIsNiArNzk2LDcgQEAKIAljYXNlIEZFX1NFVF9UT05FOgogCQlpZiAoZmUtPm9wcy0+c2V0X3RvbmUpIHsKIAkJCWVyciA9IGZlLT5vcHMtPnNldF90b25lKGZlLCAoZmVfc2VjX3RvbmVfbW9kZV90KSBwYXJnKTsKKwkJCWZlcHJpdi0+dG9uZSA9IChmZV9zZWNfdG9uZV9tb2RlX3QpIHBhcmc7CiAJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9ESVNFUUM7CiAJCQlmZXByaXYtPnN0YXR1cyA9IDA7CiAJCX0KQEAgLTc4MCw2ICs4MDUsNyBAQAogCWNhc2UgRkVfU0VUX1ZPTFRBR0U6CiAJCWlmIChmZS0+b3BzLT5zZXRfdm9sdGFnZSkgewogCQkJZXJyID0gZmUtPm9wcy0+c2V0X3ZvbHRhZ2UoZmUsIChmZV9zZWNfdm9sdGFnZV90KSBwYXJnKTsKKwkJCWZlcHJpdi0+dm9sdGFnZSA9IChmZV9zZWNfdm9sdGFnZV90KSBwYXJnOwogCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfRElTRVFDOwogCQkJZmVwcml2LT5zdGF0dXMgPSAwOwogCQl9CkBAIC05NzksNiArMTAwNSw4IEBACiAKIAkJLyogbm9ybWFsIHR1bmUgbW9kZSB3aGVuIG9wZW5lZCBSL1cgKi8KIAkJZmVwcml2LT50dW5lX21vZGVfZmxhZ3MgJj0gfkZFX1RVTkVfTU9ERV9PTkVTSE9UOworCQlmZXByaXYtPnRvbmUgPSAtMTsKKwkJZmVwcml2LT52b2x0YWdlID0gLTE7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggZDVhZWU1YS4uNTkyNmEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTExMiw2ICsxMTIsOCBAQAogCiBleHRlcm4gaW50IGR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAorZXh0ZXJuIHZvaWQgZHZiX2Zyb250ZW5kX3JlaW5pdGlhbGlzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisKIGV4dGVybiB2b2lkIGR2Yl9mcm9udGVuZF9zbGVlcF91bnRpbChzdHJ1Y3QgdGltZXZhbCAqd2FrZXRpbWUsIHUzMiBhZGRfdXNlYyk7CiBleHRlcm4gczMyIHRpbWV2YWxfdXNlY19kaWZmKHN0cnVjdCB0aW1ldmFsIGxhc3R0aW1lLCBzdHJ1Y3QgdGltZXZhbCBjdXJ0aW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCA5NmZlMGVjLi4zODUyNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMjE5LDggKzIxOSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwotCiAJbWVtY3B5KGR2YmRldiwgdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgZHZiX2RldmljZSkpOwogCWR2YmRldi0+dHlwZSA9IHR5cGU7CiAJZHZiZGV2LT5pZCA9IGlkOwpAQCAtMjMxLDYgKzIyOSw4IEBACiAKIAlsaXN0X2FkZF90YWlsICgmZHZiZGV2LT5saXN0X2hlYWQsICZhZGFwLT5kZXZpY2VfbGlzdCk7CiAKKwltdXRleF91bmxvY2soJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKKwogCWRldmZzX21rX2NkZXYoTUtERVYoRFZCX01BSk9SLCBudW1zMm1pbm9yKGFkYXAtPm51bSwgdHlwZSwgaWQpKSwKIAkJCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiwKIAkJCSJkdmIvYWRhcHRlciVkLyVzJWQiLCBhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IGQzZGYxMjAuLmUzODhmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRFZCX1VTQgogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB2YXJpb3VzIFVTQiBEVkIgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCICYmIEkyQwogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBCeSBlbmFibGluZyB0aGlzIHlvdSB3aWxsIGJlIGFibGUgdG8gY2hvb3NlIHRoZSB2YXJpb3VzIHN1cHBvcnRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCmluZGV4IGExNGU3MzcuLjFmMGQzZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTE1MCw2ICsxNTAsMTUgQEAKIAkJcmV0dXJuIGN4dXNiX2N0cmxfbXNnKGQsIENNRF9QT1dFUl9PRkYsICZiLCAxLCBOVUxMLCAwKTsKIH0KIAorc3RhdGljIGludCBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCXU4IGIgPSAwOworCWlmIChvbm9mZikKKwkJcmV0dXJuIGN4dXNiX2N0cmxfbXNnKGQsIENNRF9QT1dFUl9PTiwgJmIsIDEsIE5VTEwsIDApOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3h1c2Jfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCiB7CiAJdTggYnVmWzJdID0geyAweDAzLCAweDAwIH07CkBAIC0yMzMsNiArMjQyLDQ1IEBACiAJeyAweGZlLCAweDRlLCBLRVlfUE9XRVIgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZHZpY29fcG9ydGFibGVfcmNfa2V5c1tdID0geworCXsgMHhmYywgMHgwMiwgS0VZX1NFVFVQIH0sICAgICAgIC8qIFByb2ZpbGUgKi8KKwl7IDB4ZmMsIDB4NDMsIEtFWV9QT1dFUjIgfSwKKwl7IDB4ZmMsIDB4MDYsIEtFWV9FUEcgfSwKKwl7IDB4ZmMsIDB4NWEsIEtFWV9CQUNLIH0sCisJeyAweGZjLCAweDA1LCBLRVlfTUVOVSB9LAorCXsgMHhmYywgMHg0NywgS0VZX0lORk8gfSwKKwl7IDB4ZmMsIDB4MDEsIEtFWV9UQUIgfSwKKwl7IDB4ZmMsIDB4NDIsIEtFWV9QUkVWSU9VU1NPTkcgfSwvKiBSZXBsYXkgKi8KKwl7IDB4ZmMsIDB4NDksIEtFWV9WT0xVTUVVUCB9LAorCXsgMHhmYywgMHgwOSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ZmMsIDB4NTQsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4ZmMsIDB4MGIsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHhmYywgMHgxNiwgS0VZX0NBTUVSQSB9LAorCXsgMHhmYywgMHg0MCwgS0VZX1RVTkVSIH0sCS8qIEFUVi9EVFYgKi8KKwl7IDB4ZmMsIDB4NDUsIEtFWV9PUEVOIH0sCisJeyAweGZjLCAweDE5LCBLRVlfMSB9LAorCXsgMHhmYywgMHgxOCwgS0VZXzIgfSwKKwl7IDB4ZmMsIDB4MWIsIEtFWV8zIH0sCisJeyAweGZjLCAweDFhLCBLRVlfNCB9LAorCXsgMHhmYywgMHg1OCwgS0VZXzUgfSwKKwl7IDB4ZmMsIDB4NTksIEtFWV82IH0sCisJeyAweGZjLCAweDE1LCBLRVlfNyB9LAorCXsgMHhmYywgMHgxNCwgS0VZXzggfSwKKwl7IDB4ZmMsIDB4MTcsIEtFWV85IH0sCisJeyAweGZjLCAweDQ0LCBLRVlfQU5HTEUgfSwJLyogQXNwZWN0ICovCisJeyAweGZjLCAweDU1LCBLRVlfMCB9LAorCXsgMHhmYywgMHgwNywgS0VZX1pPT00gfSwKKwl7IDB4ZmMsIDB4MGEsIEtFWV9SRVdJTkQgfSwKKwl7IDB4ZmMsIDB4MDgsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4ZmMsIDB4NGIsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHhmYywgMHg1YiwgS0VZX01VVEUgfSwKKwl7IDB4ZmMsIDB4MDQsIEtFWV9TVE9QIH0sCisJeyAweGZjLCAweDU2LCBLRVlfUkVDT1JEIH0sCisJeyAweGZjLCAweDU3LCBLRVlfUE9XRVIgfSwKKwl7IDB4ZmMsIDB4NDEsIEtFWV9VTktOT1dOIH0sICAgIC8qIElOUFVUICovCisJeyAweGZjLCAweDAwLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBIRCAqLworfTsKKwogc3RhdGljIGludCBjeHVzYl9kZWUxNjAxX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CiAJc3RhdGljIHU4IGNsb2NrX2NvbmZpZyBbXSAgPSB7IENMT0NLX0NUTCwgIDB4MzgsIDB4MjggfTsKQEAgLTUwNSwxMiArNTUzLDE3IEBACiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKIAogCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9wb3dlcl9jdHJsLAorCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2xnZHQzMzAzX2Zyb250ZW5kX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2xnaDA2NGZfdHVuZXJfYXR0YWNoLAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCiAKKwkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKKwkucmNfa2V5X21hcCAgICAgICA9IGR2aWNvX3BvcnRhYmxlX3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGR2aWNvX3BvcnRhYmxlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkudXJiID0gewpAQCAtNTQ1LDcgKzU5OCw3IEBACiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKIAogCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9wb3dlcl9jdHJsLAorCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2RlZTE2MDFfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfZGVlMTYwMV90dW5lcl9hdHRhY2gsCiAKQEAgLTU5NCwxMiArNjQ3LDE3IEBACiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKIAogCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9wb3dlcl9jdHJsLAorCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX210MzUyX2Zyb250ZW5kX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2xnejIwMV90dW5lcl9hdHRhY2gsCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKIAorCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gZHZpY29fcG9ydGFibGVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZHZpY29fcG9ydGFibGVfcmNfa2V5cyksCisJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKKwogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCS51cmIgPSB7CkBAIC02MzQsMTIgKzY5MiwxNyBAQAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCiAKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfcG93ZXJfY3RybCwKKwkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9kdHQ3NTc5X3R1bmVyX2F0dGFjaCwKIAogCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAogCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBkdmljb19wb3J0YWJsZV9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkdmljb19wb3J0YWJsZV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJLnVyYiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKaW5kZXggMTJlYmFmOC4uNzBhZmNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKQEAgLTk0LDEyICs5NCwxNCBAQAogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkdHQyMDB1X3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB3dDIyMHVfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHd0MjIwdV96bDAzNTNfcHJvcGVydGllczsKIAogc3RhdGljIGludCBkdHQyMDB1X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCWlmIChkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmR0dDIwMHVfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwIHx8Ci0JCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50Ziwmd3QyMjB1X3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCkKKwkJZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZ3dDIyMHVfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwIHx8CisJCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50Ziwmd3QyMjB1X3psMDM1M19wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDApCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTAsNiArMTEyLDggQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9EVFQyMDBVX1dBUk0pIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsIFVTQl9QSURfV1QyMjBVX0NPTEQpICB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9XQVJNKSAgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9XVDIyMFVfWkwwMzUzX0NPTEQpICB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9aTDAzNTNfV0FSTSkgIH0sCiAJeyAwIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGR0dDIwMHVfdXNiX3RhYmxlKTsKQEAgLTE5Niw2ICsyMDAsNDcgQEAKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB3dDIyMHVfemwwMzUzX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcsCisJLnBpZF9maWx0ZXJfY291bnQgPSAxNSwKKworCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAorCS5maXJtd2FyZSA9ICJkdmItdXNiLXd0MjIwdS16bDAzNTMtMDEuZnciLAorCisJLnBvd2VyX2N0cmwgICAgICA9IGR0dDIwMHVfcG93ZXJfY3RybCwKKwkuc3RyZWFtaW5nX2N0cmwgID0gZHR0MjAwdV9zdHJlYW1pbmdfY3RybCwKKwkucGlkX2ZpbHRlciAgICAgID0gZHR0MjAwdV9waWRfZmlsdGVyLAorCS5mcm9udGVuZF9hdHRhY2ggPSBkdHQyMDB1X2Zyb250ZW5kX2F0dGFjaCwKKworCS5yY19pbnRlcnZhbCAgICAgPSAzMDAsCisJLnJjX2tleV9tYXAgICAgICA9IGR0dDIwMHVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShkdHQyMDB1X3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKworCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkudXJiID0geworCQkudHlwZSA9IERWQl9VU0JfQlVMSywKKwkJLmNvdW50ID0gNywKKwkJLmVuZHBvaW50ID0gMHgwMiwKKwkJLnUgPSB7CisJCQkuYnVsayA9IHsKKwkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQl9CisJCX0KKwl9LAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7IC5uYW1lID0gIldpZGVWaWV3IFdULTIyMFUgUGVuVHlwZSBSZWNlaXZlciAoYmFzZWQgb24gWkwzNTMpIiwKKwkJICAuY29sZF9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVs0XSwgTlVMTCB9LAorCQkgIC53YXJtX2lkcyA9IHsgJmR0dDIwMHVfdXNiX3RhYmxlWzVdLCBOVUxMIH0sCisJCX0sCisJCXsgTlVMTCB9LAorCX0KK307CisKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkdHQyMDB1X3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImR2Yl91c2JfZHR0MjAwdSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggNGExYjllNzcuLmNiMjM5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTgzLDYgKzgzLDggQEAKICNkZWZpbmUgVVNCX1BJRF9EVFQyMDBVX1dBUk0JCQkJMHgwMzAxCiAjZGVmaW5lIFVTQl9QSURfV1QyMjBVX0NPTEQJCQkJCTB4MDIyMgogI2RlZmluZSBVU0JfUElEX1dUMjIwVV9XQVJNCQkJCQkweDAyMjEKKyNkZWZpbmUgVVNCX1BJRF9XVDIyMFVfWkwwMzUzX0NPTEQJCQkweDAyMmEKKyNkZWZpbmUgVVNCX1BJRF9XVDIyMFVfWkwwMzUzX1dBUk0JCQkweDAyMmIKICNkZWZpbmUgVVNCX1BJRF9XSU5UVl9OT1ZBX1RfVVNCMl9DT0xECQkweDkzMDAKICNkZWZpbmUgVVNCX1BJRF9XSU5UVl9OT1ZBX1RfVVNCMl9XQVJNCQkweDkzMDEKICNkZWZpbmUgVVNCX1BJRF9ORUJVTEFfRElHSVRWCQkJCTB4MDIwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMKaW5kZXggYjZkOTVlMS4uMmE4OWY4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYwpAQCAtMTQ3LDggKzE0Nyw5IEBACiAJY21kWzRdID0gKHNyID4+IDQpICAmIDB4ZmY7CiAJY21kWzVdID0gKHNyIDw8IDQpICAmIDB4ZjA7CiAKLQlkZWJfZmUoInNldHRpbmcgZnJvbnRlbmQgdG86ICV1IC0+ICV1ICgleCkgTE5CLWJhc2VkIEdIeiwgc3ltYm9scmF0ZTogJWQgLT4gJUx1ICglTHgpXG4iLAotCQkJZmVwLT5mcmVxdWVuY3ksZnJlcSxmcmVxLCBmZXAtPnUucXBzay5zeW1ib2xfcmF0ZSwgc3IsIHNyKTsKKwlkZWJfZmUoInNldHRpbmcgZnJvbnRlbmQgdG86ICV1IC0+ICV1ICgleCkgTE5CLWJhc2VkIEdIeiwgc3ltYm9scmF0ZTogJWQgLT4gJWx1ICglbHgpXG4iLAorCQkJZmVwLT5mcmVxdWVuY3ksZnJlcSxmcmVxLCBmZXAtPnUucXBzay5zeW1ib2xfcmF0ZSwKKwkJCSh1bnNpZ25lZCBsb25nKSBzciwgKHVuc2lnbmVkIGxvbmcpIHNyKTsKIAogLyoJaWYgKGZlcC0+aW52ZXJzaW9uID09IElOVkVSU0lPTl9PTikKIAkJY21kWzZdIHw9IDB4ODA7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDk0MjMzMTYuLjM3ZDVlMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0xODEsNiArMTgxLDExIEBACiAJaGVscAogCSAgQW4gQVRTQyA4VlNCIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKKwkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kCisJICAiPGtlcm5lbGRpcj4vRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBvcjUxMjExIiB0bworCSAgZG93bmxvYWQgaXQsIGFuZCB0aGVuIGNvcHkgaXQgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZQorCSAgb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCisKIGNvbmZpZyBEVkJfT1I1MTEzMgogCXRyaXN0YXRlICJPcmVuIE9SNTExMzIgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQpAQCAtMTg5LDYgKzE5NCwxMyBAQAogCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CiAJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKKwkgIFRoaXMgZHJpdmVyIG5lZWRzIGV4dGVybmFsIGZpcm13YXJlLiBQbGVhc2UgdXNlIHRoZSBjb21tYW5kcworCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgb3I1MTEzMl92c2IiIGFuZC9vcgorCSAgIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgb3I1MTEzMl9xYW0iIHRvCisJICBkb3dubG9hZCBmaXJtd2FyZXMgZm9yIDhWU0IgYW5kIFFBTTY0LzI1NiwgcmVzcGVjdGl2ZWx5LiBDb3B5IHRoZW0gdG8KKwkgIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZSAoZGVwZW5kaW5nIG9uCisJICBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgorCiBjb25maWcgRFZCX0JDTTM1MTAKIAl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNMzUxMCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwppbmRleCBkNjYxYzZmLi42OTFkYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDI0MTIzLmgiCiAKKyNkZWZpbmUgWFRBTCAxMDExMTAwMAorCitzdGF0aWMgaW50IGZvcmNlX2JhbmQ7CiBzdGF0aWMgaW50IGRlYnVnOwogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKIAlkbyB7IFwKQEAgLTUyLDYgKzU1LDcgQEAKIAl1MzIgVkdBYXJnOwogCXUzMiBiYW5kc2VsZWN0YXJnOwogCXUzMiBwbGxhcmc7CisJdTMyIEZJTFR1bmU7CiAKIAkvKiBUaGUgRGVtb2QvVHVuZXIgY2FuJ3QgZWFzaWx5IHByb3ZpZGUgdGhlc2UsIHdlIGNhY2hlIHRoZW0gKi8KIAl1MzIgY3VycmVudGZyZXE7CkBAIC02Myw0MyArNjcsMzMgQEAKIHsKIAl1MzIgc3ltYm9scmF0ZV9sb3c7CiAJdTMyIHN5bWJvbHJhdGVfaGlnaDsKLQl1MzIgVkNBc2xvcGU7Ci0JdTMyIFZDQW9mZnNldDsKLQl1MzIgVkdBMW9mZnNldDsKLQl1MzIgVkdBMm9mZnNldDsKIAl1MzIgVkNBcHJvZ2RhdGE7CiAJdTMyIFZHQXByb2dkYXRhOworCXUzMiBGSUxUdW5lOwogfSBjeDI0MTIzX0FHQ192YWxzW10gPQogewogCXsKIAkJLnN5bWJvbHJhdGVfbG93CQk9IDEwMDAwMDAsCiAJCS5zeW1ib2xyYXRlX2hpZ2gJPSA0OTk5OTk5LAotCQkuVkNBc2xvcGUJCT0gMHgwNywKLQkJLlZDQW9mZnNldAkJPSAweDBmLAotCQkuVkdBMW9mZnNldAkJPSAweDFmOCwKLQkJLlZHQTJvZmZzZXQJCT0gMHgxZjgsCi0JCS5WR0Fwcm9nZGF0YQkJPSAoMiA8PCAxOCkgfCAoMHgxZjggPDwgOSkgfCAweDFmOCwKLQkJLlZDQXByb2dkYXRhCQk9ICg0IDw8IDE4KSB8ICgweDA3IDw8IDkpIHwgMHgwNywKKwkJLyogdGhlIHNwZWNzIHJlY29tbWVuZCBvdGhlciB2YWx1ZXMgZm9yIFZHQSBvZmZzZXRzLAorCQkgICBidXQgdGVzdHMgc2hvdyB0aGV5IGFyZSB3cm9uZyAqLworCQkuVkdBcHJvZ2RhdGEJCT0gKDEgPDwgMTkpIHwgKDB4MTgwIDw8IDkpIHwgMHgxZTAsCisJCS5WQ0Fwcm9nZGF0YQkJPSAoMiA8PCAxOSkgfCAoMHgwNyA8PCA5KSB8IDB4MDcsCisJCS5GSUxUdW5lCQk9IDB4MjdmIC8qIDAuNDEgViAqLwogCX0sCiAJewogCQkuc3ltYm9scmF0ZV9sb3cJCT0gIDUwMDAwMDAsCiAJCS5zeW1ib2xyYXRlX2hpZ2gJPSAxNDk5OTk5OSwKLQkJLlZDQXNsb3BlCQk9IDB4MWYsCi0JCS5WQ0FvZmZzZXQJCT0gMHgxZiwKLQkJLlZHQTFvZmZzZXQJCT0gMHgxZTAsCi0JCS5WR0Eyb2Zmc2V0CQk9IDB4MTgwLAotCQkuVkdBcHJvZ2RhdGEJCT0gKDIgPDwgMTgpIHwgKDB4MTgwIDw8IDkpIHwgMHgxZTAsCi0JCS5WQ0Fwcm9nZGF0YQkJPSAoNCA8PCAxOCkgfCAoMHgwNyA8PCA5KSB8IDB4MWYsCisJCS5WR0Fwcm9nZGF0YQkJPSAoMSA8PCAxOSkgfCAoMHgxODAgPDwgOSkgfCAweDFlMCwKKwkJLlZDQXByb2dkYXRhCQk9ICgyIDw8IDE5KSB8ICgweDA3IDw8IDkpIHwgMHgxZiwKKwkJLkZJTFR1bmUJCT0gMHgzMTcgLyogMC45MCBWICovCiAJfSwKIAl7CiAJCS5zeW1ib2xyYXRlX2xvdwkJPSAxNTAwMDAwMCwKIAkJLnN5bWJvbHJhdGVfaGlnaAk9IDQ1MDAwMDAwLAotCQkuVkNBc2xvcGUJCT0gMHgzZiwKLQkJLlZDQW9mZnNldAkJPSAweDNmLAotCQkuVkdBMW9mZnNldAkJPSAweDE4MCwKLQkJLlZHQTJvZmZzZXQJCT0gMHgxMDAsCi0JCS5WR0Fwcm9nZGF0YQkJPSAoMiA8PCAxOCkgfCAoMHgxMDAgPDwgOSkgfCAweDE4MCwKLQkJLlZDQXByb2dkYXRhCQk9ICg0IDw8IDE4KSB8ICgweDA3IDw8IDkpIHwgMHgzZiwKKwkJLlZHQXByb2dkYXRhCQk9ICgxIDw8IDE5KSB8ICgweDEwMCA8PCA5KSB8IDB4MTgwLAorCQkuVkNBcHJvZ2RhdGEJCT0gKDIgPDwgMTkpIHwgKDB4MDcgPDwgOSkgfCAweDNmLAorCQkuRklMVHVuZQkJPSAweDE0NSAvKiAyLjcwIFYgKi8KIAl9LAogfTsKIApAQCAtMTEyLDkxICsxMDYsODAgQEAKIHsKIAl1MzIgZnJlcV9sb3c7CiAJdTMyIGZyZXFfaGlnaDsKLQl1MzIgYmFuZHNlbGVjdDsKIAl1MzIgVkNPZGl2aWRlcjsKLQl1MzIgVkNPbnVtYmVyOwogCXUzMiBwcm9nZGF0YTsKIH0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbXSA9CiB7CisJLyogYmFuZCAxICovCiAJewogCQkuZnJlcV9sb3cJPSA5NTAwMDAsCi0JCS5mcmVxX2hpZ2gJPSAxMDE4OTk5LAotCQkuYmFuZHNlbGVjdAk9IDB4NDAsCi0JCS5WQ09kaXZpZGVyCT0gNCwKLQkJLlZDT251bWJlcgk9IDcsCi0JCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgwIDw8IDkpIHwgMHg0MCwKLQl9LAotCXsKLQkJLmZyZXFfbG93CT0gMTAxOTAwMCwKIAkJLmZyZXFfaGlnaAk9IDEwNzQ5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHg4MCwKIAkJLlZDT2RpdmlkZXIJPSA0LAotCQkuVkNPbnVtYmVyCT0gOCwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDAgPDwgOSkgfCAweDgwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMCA8PCA5KSB8IDB4NDAsCiAJfSwKKworCS8qIGJhbmQgMiAqLwogCXsKIAkJLmZyZXFfbG93CT0gMTA3NTAwMCwKLQkJLmZyZXFfaGlnaAk9IDEyMjc5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgwMSwKLQkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gMSwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDAxLAorCQkuZnJlcV9oaWdoCT0gMTE3Nzk5OSwKKwkJLlZDT2RpdmlkZXIJPSA0LAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMCA8PCA5KSB8IDB4ODAsCiAJfSwKKworCS8qIGJhbmQgMyAqLwogCXsKLQkJLmZyZXFfbG93CT0gMTIyODAwMCwKLQkJLmZyZXFfaGlnaAk9IDEzNDk5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgwMiwKKwkJLmZyZXFfbG93CT0gMTE3ODAwMCwKKwkJLmZyZXFfaGlnaAk9IDEyOTU5OTksCiAJCS5WQ09kaXZpZGVyCT0gMiwKLQkJLlZDT251bWJlcgk9IDIsCi0JCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHgwMiwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTkpIHwgKDEgPDwgOSkgfCAweDAxLAogCX0sCisKKwkvKiBiYW5kIDQgKi8KIAl7Ci0JCS5mcmVxX2xvdwk9IDEzNTAwMDAsCi0JCS5mcmVxX2hpZ2gJPSAxNDgxOTk5LAotCQkuYmFuZHNlbGVjdAk9IDB4MDQsCisJCS5mcmVxX2xvdwk9IDEyOTYwMDAsCisJCS5mcmVxX2hpZ2gJPSAxNDMxOTk5LAogCQkuVkNPZGl2aWRlcgk9IDIsCi0JCS5WQ09udW1iZXIJPSAzLAotCQkucHJvZ2RhdGEJPSAoMCA8PCAxOCkgfCAoMSA8PCA5KSB8IDB4MDQsCisJCS5wcm9nZGF0YQk9ICgwIDw8IDE5KSB8ICgxIDw8IDkpIHwgMHgwMiwKIAl9LAorCisJLyogYmFuZCA1ICovCiAJewotCQkuZnJlcV9sb3cJPSAxNDgyMDAwLAotCQkuZnJlcV9oaWdoCT0gMTU5NTk5OSwKLQkJLmJhbmRzZWxlY3QJPSAweDA4LAorCQkuZnJlcV9sb3cJPSAxNDMyMDAwLAorCQkuZnJlcV9oaWdoCT0gMTU3NTk5OSwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNCwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDA4LAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MDQsCiAJfSwKKworCS8qIGJhbmQgNiAqLwogCXsKLQkJLmZyZXFfbG93CT0gMTU5NjAwMCwKKwkJLmZyZXFfbG93CT0gMTU3NjAwMCwKIAkJLmZyZXFfaGlnaAk9IDE3MTc5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgxMCwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNSwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDEwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MDgsCiAJfSwKKworCS8qIGJhbmQgNyAqLwogCXsKIAkJLmZyZXFfbG93CT0gMTcxODAwMCwKIAkJLmZyZXFfaGlnaAk9IDE4NTU5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHgyMCwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNiwKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDIwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MTAsCiAJfSwKKworCS8qIGJhbmQgOCAqLwogCXsKIAkJLmZyZXFfbG93CT0gMTg1NjAwMCwKIAkJLmZyZXFfaGlnaAk9IDIwMzU5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHg0MCwKIAkJLlZDT2RpdmlkZXIJPSAyLAotCQkuVkNPbnVtYmVyCT0gNywKLQkJLnByb2dkYXRhCT0gKDAgPDwgMTgpIHwgKDEgPDwgOSkgfCAweDQwLAorCQkucHJvZ2RhdGEJPSAoMCA8PCAxOSkgfCAoMSA8PCA5KSB8IDB4MjAsCiAJfSwKKworCS8qIGJhbmQgOSAqLwogCXsKIAkJLmZyZXFfbG93CT0gMjAzNjAwMCwKLQkJLmZyZXFfaGlnaAk9IDIxNDk5OTksCi0JCS5iYW5kc2VsZWN0CT0gMHg4MCwKKwkJLmZyZXFfaGlnaAk9IDIxNTAwMDAsCiAJCS5WQ09kaXZpZGVyCT0gMiwKLQkJLlZDT251bWJlcgk9IDgsCi0JCS5wcm9nZGF0YQk9ICgwIDw8IDE4KSB8ICgxIDw8IDkpIHwgMHg4MCwKKwkJLnByb2dkYXRhCT0gKDAgPDwgMTkpIHwgKDEgPDwgOSkgfCAweDQwLAogCX0sCiB9OwogCkBAIC0yMDcsNDkgKzE5MCw0NCBAQAogewogCXsweDAwLCAweDAzfSwgLyogUmVzZXQgc3lzdGVtICovCiAJezB4MDAsIDB4MDB9LCAvKiBDbGVhciByZXNldCAqLwotCXsweDAxLCAweDNifSwgLyogQXBwbHkgc2Vuc2libGUgZGVmYXVsdHMsIGZyb20gYW4gaTJjIHNuaWZmZXIgKi8KLQl7MHgwMywgMHgwN30sCi0JezB4MDQsIDB4MTB9LAotCXsweDA1LCAweDA0fSwKLQl7MHgwNiwgMHgzMX0sCi0JezB4MGQsIDB4MDJ9LAotCXsweDBlLCAweDAzfSwKLQl7MHgwZiwgMHhmZX0sCi0JezB4MTAsIDB4MDF9LAotCXsweDE0LCAweDAxfSwKLQl7MHgxNSwgMHg5OH0sCi0JezB4MTYsIDB4MDB9LAotCXsweDE3LCAweDAxfSwKLQl7MHgxYiwgMHgwNX0sCi0JezB4MWMsIDB4ODB9LAotCXsweDFkLCAweDAwfSwKLQl7MHgxZSwgMHgwMH0sCi0JezB4MjAsIDB4NDF9LAotCXsweDIxLCAweDE1fSwKLQl7MHgyNywgMHgxNH0sCi0JezB4MjgsIDB4NDZ9LAotCXsweDI5LCAweDAwfSwKLQl7MHgyYSwgMHhiMH0sCi0JezB4MmIsIDB4NzN9LAotCXsweDJjLCAweDAwfSwKKwl7MHgwMywgMHgwN30sIC8qIFFQU0ssIERWQiwgQXV0byBBY3F1aXNpdGlvbiAoZGVmYXVsdCkgKi8KKwl7MHgwNCwgMHgxMH0sIC8qIE1QRUcgKi8KKwl7MHgwNSwgMHgwNH0sIC8qIE1QRUcgKi8KKwl7MHgwNiwgMHgzMX0sIC8qIE1QRUcgKGRlZmF1bHQpICovCisJezB4MGIsIDB4MDB9LCAvKiBGcmVxIHNlYXJjaCBzdGFydCBwb2ludCAoZGVmYXVsdCkgKi8KKwl7MHgwYywgMHgwMH0sIC8qIERlbW9kdWxhdG9yIHNhbXBsZSBnYWluIChkZWZhdWx0KSAqLworCXsweDBkLCAweDAyfSwgLyogRnJlcXVlbmN5IHNlYXJjaCByYW5nZSA9IEZzeW1ib2wgLyA0IChkZWZhdWx0KSAqLworCXsweDBlLCAweDAzfSwgLyogRGVmYXVsdCBub24taW52ZXJ0ZWQsIEZFQyAzLzQgKGRlZmF1bHQpICovCisJezB4MGYsIDB4ZmV9LCAvKiBGRUMgc2VhcmNoIG1hc2sgKGFsbCBzdXBwb3J0ZWQgY29kZXMpICovCisJezB4MTAsIDB4MDF9LCAvKiBEZWZhdWx0IHNlYXJjaCBpbnZlcnNpb24sIG5vIHJlcGVhdCAoZGVmYXVsdCkgKi8KKwl7MHgxNiwgMHgwMH0sIC8qIEVuYWJsZSByZWFkaW5nIG9mIGZyZXF1ZW5jeSAqLworCXsweDE3LCAweDAxfSwgLyogRW5hYmxlIEVzTk8gUmVhZHkgQ291bnRlciAqLworCXsweDFjLCAweDgwfSwgLyogRW5hYmxlIGVycm9yIGNvdW50ZXIgKi8KKwl7MHgyMCwgMHgwMH0sIC8qIFR1bmVyIGJ1cnN0IGNsb2NrIHJhdGUgPSA1MDBLSHogKi8KKwl7MHgyMSwgMHgxNX0sIC8qIFR1bmVyIGJ1cnN0IG1vZGUsIHdvcmQgbGVuZ3RoID0gMHgxNSAqLworCXsweDI4LCAweDAwfSwgLyogRW5hYmxlIEZJTFRFUlYgd2l0aCBwb3NpdGl2ZSBwb2wuLCBEaVNFcUMgMi54IG9mZiAqLworCXsweDI5LCAweDAwfSwgLyogRGlTRXFDIExOQl9EQyBvZmYgKi8KKwl7MHgyYSwgMHhiMH0sIC8qIERpU0VxQyBQYXJhbWV0ZXJzIChkZWZhdWx0KSAqLworCXsweDJiLCAweDczfSwgLyogRGlTRXFDIFRvbmUgRnJlcXVlbmN5IChkZWZhdWx0KSAqLworCXsweDJjLCAweDAwfSwgLyogRGlTRXFDIE1lc3NhZ2UgKDB4MmMgLSAweDMxKSAqLwogCXsweDJkLCAweDAwfSwKIAl7MHgyZSwgMHgwMH0sCiAJezB4MmYsIDB4MDB9LAogCXsweDMwLCAweDAwfSwKIAl7MHgzMSwgMHgwMH0sCi0JezB4MzIsIDB4OGN9LAotCXsweDMzLCAweDAwfSwKKwl7MHgzMiwgMHg4Y30sIC8qIERpU0VxQyBQYXJhbWV0ZXJzIChkZWZhdWx0KSAqLworCXsweDMzLCAweDAwfSwgLyogSW50ZXJydXB0cyBvZmYgKDB4MzMgLSAweDM0KSAqLwogCXsweDM0LCAweDAwfSwKLQl7MHgzNSwgMHgwM30sCi0JezB4MzYsIDB4MDJ9LAotCXsweDM3LCAweDNhfSwKLQl7MHgzYSwgMHgwMH0sCS8qIEVuYWJsZSBBR0MgYWNjdW11bGF0b3IgKi8KLQl7MHg0NCwgMHgwMH0sCi0JezB4NDUsIDB4MDB9LAotCXsweDQ2LCAweDA1fSwKLQl7MHg1NiwgMHg0MX0sCi0JezB4NTcsIDB4ZmZ9LAotCXsweDY3LCAweDgzfSwKKwl7MHgzNSwgMHgwM30sIC8qIERpU0VxQyBUb25lIEFtcGxpdHVkZSAoZGVmYXVsdCkgKi8KKwl7MHgzNiwgMHgwMn0sIC8qIERpU0VxQyBQYXJhbWV0ZXJzIChkZWZhdWx0KSAqLworCXsweDM3LCAweDNhfSwgLyogRGlTRXFDIFBhcmFtZXRlcnMgKGRlZmF1bHQpICovCisJezB4M2EsIDB4MDB9LCAvKiBFbmFibGUgQUdDIGFjY3VtdWxhdG9yIChmb3Igc2lnbmFsIHN0cmVuZ3RoKSAqLworCXsweDQ0LCAweDAwfSwgLyogQ29uc3RlbGxhdGlvbiAoZGVmYXVsdCkgKi8KKwl7MHg0NSwgMHgwMH0sIC8qIFN5bWJvbCBjb3VudCAoZGVmYXVsdCkgKi8KKwl7MHg0NiwgMHgwZH0sIC8qIFN5bWJvbCByYXRlIGVzdGltYXRvciBvbiAoZGVmYXVsdCkgKi8KKwl7MHg1NiwgMHg0MX0sIC8qIFZhcmlvdXMgKGRlZmF1bHQpICovCisJezB4NTcsIDB4ZmZ9LCAvKiBFcnJvciBDb3VudGVyIFdpbmRvdyAoZGVmYXVsdCkgKi8KKwl7MHg2NywgMHg4M30sIC8qIE5vbi1EQ0lJIHN5bWJvbCBjbG9jayAqLwogfTsKIAogc3RhdGljIGludCBjeDI0MTIzX3dyaXRlcmVnKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgaW50IHJlZywgaW50IGRhdGEpCkBAIC0yNTgsNiArMjM2LDEwIEBACiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CiAJaW50IGVycjsKIAorCWlmIChkZWJ1Zz4xKQorCQlwcmludGsoImN4MjQxMjM6ICVzOiAgd3JpdGUgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAorCQkJCQkJX19GVU5DVElPTl9fLHJlZywgZGF0YSk7CisKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewogCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgogCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX0ZVTkNUSU9OX18sIGVyciwgcmVnLCBkYXRhKTsKQEAgLTI3NCw2ICsyNTYsMTAgQEAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKIAlpbnQgZXJyOwogCisJaWYgKGRlYnVnPjEpCisJCXByaW50aygiY3gyNDEyMzogJXM6ICB3cml0ZWxuIGFkZHI9MHgwOCwgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAorCQkJCQkJX19GVU5DVElPTl9fLHJlZywgZGF0YSk7CisKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewogCQlwcmludGsoIiVzOiB3cml0ZWxuYnJlZyBlcnJvciAoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKIAkJCSAiIGRhdGEgPT0gMHglMDJ4KVxuIiwgX19GVU5DVElPTl9fLCBlcnIsIHJlZywgZGF0YSk7CkBAIC0zMDMsNiArMjg5LDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAoZGVidWc+MSkKKwkJcHJpbnRrKCJjeDI0MTIzOiByZWFkIHJlZyAweCUwMngsIHZhbHVlIDB4JTAyeFxuIixyZWcsIHJldCk7CisKIAlyZXR1cm4gYjFbMF07CiB9CiAKQEAgLTMxMywxNyArMzAyLDIzIEBACiAKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQogeworCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpOworCXU4IGF1dG9fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDEwKTsKKwogCXN3aXRjaCAoaW52ZXJzaW9uKSB7CiAJY2FzZSBJTlZFUlNJT05fT0ZGOgotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgMHg3Zik7Ci0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCkgfCAweDgwKTsKKwkJZHByaW50aygiJXM6ICBpbnZlcnNpb24gb2ZmXG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgJiB+MHg4MCk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGF1dG9fcmVnIHwgMHg4MCk7CiAJCWJyZWFrOwogCWNhc2UgSU5WRVJTSU9OX09OOgotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpIHwgMHg4MCk7Ci0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCkgfCAweDgwKTsKKwkJZHByaW50aygiJXM6ICBpbnZlcnNpb24gb25cbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZSwgbm9tX3JlZyB8IDB4ODApOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDEwLCBhdXRvX3JlZyB8IDB4ODApOwogCQlicmVhazsKIAljYXNlIElOVkVSU0lPTl9BVVRPOgotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDEwLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTApICYgMHg3Zik7CisJCWRwcmludGsoIiVzOiAgaW52ZXJzaW9uIGF1dG9cbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgxMCwgYXV0b19yZWcgJiB+MHg4MCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzM4LDkyICszMzMsMTkxIEBACiAKIAl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWIpID4+IDc7CiAKLQlpZiAodmFsID09IDApCisJaWYgKHZhbCA9PSAwKSB7CisJCWRwcmludGsoIiVzOiAgcmVhZCBpbnZlcnNpb24gb2ZmXG4iLF9fRlVOQ1RJT05fXyk7CiAJCSppbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOwotCWVsc2UKKwl9IGVsc2UgeworCQlkcHJpbnRrKCIlczogIHJlYWQgaW52ZXJzaW9uIG9uXG4iLF9fRlVOQ1RJT05fXyk7CiAJCSppbnZlcnNpb24gPSBJTlZFUlNJT05fT047CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgZmVjKQogeworCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgfjB4MDc7CisKIAlpZiAoIChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSApCiAJCWZlYyA9IEZFQ19BVVRPOwogCi0JLyogSGFyZHdhcmUgaGFzIDUvMTEgYW5kIDMvNSBidXQgYXJlIG5ldmVyIHVudXNlZCAqLwogCXN3aXRjaCAoZmVjKSB7Ci0JY2FzZSBGRUNfTk9ORToKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDEpOwogCWNhc2UgRkVDXzFfMjoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDIpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gMS8yXG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgfCAweDAxKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHgwMik7CisJCWJyZWFrOwogCWNhc2UgRkVDXzJfMzoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDQpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gMi8zXG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgfCAweDAyKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHgwNCk7CisJCWJyZWFrOwogCWNhc2UgRkVDXzNfNDoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MDgpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gMy80XG4iLF9fRlVOQ1RJT05fXyk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGUsIG5vbV9yZWcgfCAweDAzKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHgwOCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzRfNToKKwkJZHByaW50aygiJXM6ICBzZXQgRkVDIHRvIDQvNVxuIixfX0ZVTkNUSU9OX18pOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBub21fcmVnIHwgMHgwNCk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MTApOworCQlicmVhazsKIAljYXNlIEZFQ181XzY6Ci0JCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDIwKTsKKwkJZHByaW50aygiJXM6ICBzZXQgRkVDIHRvIDUvNlxuIixfX0ZVTkNUSU9OX18pOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBlLCBub21fcmVnIHwgMHgwNSk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4MjApOworCQlicmVhazsKKwljYXNlIEZFQ182Xzc6CisJCWRwcmludGsoIiVzOiAgc2V0IEZFQyB0byA2LzdcbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZSwgbm9tX3JlZyB8IDB4MDYpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDQwKTsKKwkJYnJlYWs7CiAJY2FzZSBGRUNfN184OgotCQlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZiwgMHg4MCk7CisJCWRwcmludGsoIiVzOiAgc2V0IEZFQyB0byA3LzhcbiIsX19GVU5DVElPTl9fKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwZSwgbm9tX3JlZyB8IDB4MDcpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweDgwKTsKKwkJYnJlYWs7CiAJY2FzZSBGRUNfQVVUTzoKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGYsIDB4YWUpOworCQlkcHJpbnRrKCIlczogIHNldCBGRUMgdG8gYXV0b1xuIixfX0ZVTkNUSU9OX18pOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBmLCAweGZlKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLX0KLQotc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQotewotCWludCByZXQ7Ci0JdTggdmFsOwotCi0JcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JdmFsID0gcmV0ICYgMHgwNzsKLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMToKLQkJKmZlYyA9IEZFQ18xXzI7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJKmZlYyA9IEZFQ18yXzM7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKmZlYyA9IEZFQ18zXzQ7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJKmZlYyA9IEZFQ180XzU7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJKmZlYyA9IEZFQ181XzY7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJKmZlYyA9IEZFQ183Xzg7Ci0JCWJyZWFrOwotCWNhc2UgMjoJLyogKmZlYyA9IEZFQ18zXzU7IGJyZWFrOyAqLwotCWNhc2UgMDoJLyogKmZlYyA9IEZFQ181XzExOyBicmVhazsgKi8KLQkJKmZlYyA9IEZFQ19BVVRPOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqZmVjID0gRkVDX05PTkU7IC8vIGNhbid0IGhhcHBlbgotCX0KIAogCXJldHVybiAwOwogfQogCi0vKiBmaXhtZTogU3ltYm9sIHJhdGVzIDwgM01TcHMgbWF5IG5vdCB3b3JrIGJlY2F1c2Ugb2YgcHJlY2lzaW9uIGxvc3MgKi8KK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgKmZlYykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gcmV0ICYgMHgwNzsKKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAxOgorCQkqZmVjID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqZmVjID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkqZmVjID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqZmVjID0gRkVDXzRfNTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQkqZmVjID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQkqZmVjID0gRkVDXzZfNzsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQkqZmVjID0gRkVDXzdfODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlcmUncyBubyBsb2NrICovCisJCSpmZWMgPSBGRUNfTk9ORTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogQXBwcm94aW1hdGlvbiBvZiBjbG9zZXN0IGludGVnZXIgb2YgbG9nMihhL2IpLiBJdCBhY3R1YWxseSBnaXZlcyB0aGUKKyAgIGxvd2VzdCBpbnRlZ2VyIGkgc3VjaCB0aGF0IDJeaSA+PSByb3VuZChhL2IpICovCitzdGF0aWMgdTMyIGN4MjQxMjNfaW50X2xvZzIodTMyIGEsIHUzMiBiKQoreworCXUzMiBleHAsIG5lYXJlc3QgPSAwOworCXUzMiBkaXYgPSBhIC8gYjsKKwlpZihhICUgYiA+PSBiIC8gMikgKytkaXY7CisJaWYoZGl2IDwgKDEgPDwgMzEpKQorCXsKKwkJZm9yKGV4cCA9IDE7IGRpdiA+IGV4cDsgbmVhcmVzdCsrKQorCQkJZXhwICs9IGV4cDsKKwl9CisJcmV0dXJuIG5lYXJlc3Q7Cit9CisKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIHUzMiBzcmF0ZSkKIHsKLQl1MzIgdmFsOworCXUzMiB0bXAsIHNhbXBsZV9yYXRlLCByYXRpbywgc2FtcGxlX2dhaW47CisJdTggcGxsX211bHQ7CiAKLQl2YWwgPSAoc3JhdGUgLyAxMTg1KSAqIDEwMDsKKwkvKiAgY2hlY2sgaWYgc3ltYm9sIHJhdGUgaXMgd2l0aGluIGxpbWl0cyAqLworCWlmICgoc3JhdGUgPiBzdGF0ZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSB8fAorCSAgICAoc3JhdGUgPCBzdGF0ZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOzsKIAotCS8qIENvbXBlbnNhdGUgZm9yIHNjYWxpbmcgdXAsIGJ5IHJlbW92aW5nIDE3IHN5bWJvbHMgcGVyIDFNc3BzICovCi0JdmFsID0gdmFsIC0gKDE3ICogKHNyYXRlIC8gMTAwMDAwMCkpOworCS8qIGNob29zZSB0aGUgc2FtcGxpbmcgcmF0ZSBoaWdoIGVub3VnaCBmb3IgdGhlIHJlcXVpcmVkIG9wZXJhdGlvbiwKKwkgICB3aGlsZSBvcHRpbWl6aW5nIHRoZSBwb3dlciBjb25zdW1lZCBieSB0aGUgZGVtb2R1bGF0b3IgKi8KKwlpZiAoc3JhdGUgPCAoWFRBTCoyKS8yKQorCQlwbGxfbXVsdCA9IDI7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCozKS8yKQorCQlwbGxfbXVsdCA9IDM7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo0KS8yKQorCQlwbGxfbXVsdCA9IDQ7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo1KS8yKQorCQlwbGxfbXVsdCA9IDU7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo2KS8yKQorCQlwbGxfbXVsdCA9IDY7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo3KS8yKQorCQlwbGxfbXVsdCA9IDc7CisJZWxzZSBpZiAoc3JhdGUgPCAoWFRBTCo4KS8yKQorCQlwbGxfbXVsdCA9IDg7CisJZWxzZQorCQlwbGxfbXVsdCA9IDk7CiAKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA4LCAodmFsID4+IDE2KSAmIDB4ZmYgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAodmFsID4+ICA4KSAmIDB4ZmYgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBhLCAodmFsICAgICAgKSAmIDB4ZmYgKTsKKworCXNhbXBsZV9yYXRlID0gcGxsX211bHQgKiBYVEFMOworCisJLyoKKwkgICAgU1lTU3ltYm9sUmF0ZVsyMTowXSA9IChzcmF0ZSA8PCAyMykgLyBzYW1wbGVfcmF0ZQorCisJICAgIFdlIGhhdmUgdG8gdXNlIDMyIGJpdCB1bnNpZ25lZCBhcml0aG1ldGljIHdpdGhvdXQgcHJlY2lzaW9uIGxvc3MuCisJICAgIFRoZSBtYXhpbXVtIHNyYXRlIGlzIDQ1MDAwMDAwIG9yIDB4MDJBRUE1NDAuIFRoaXMgbnVtYmVyIGhhcworCSAgICBvbmx5IDYgY2xlYXIgYml0cyBvbiB0b3AsIGhlbmNlIHdlIGNhbiBzaGlmdCBpdCBsZWZ0IG9ubHkgNiBiaXRzCisJICAgIGF0IGEgdGltZS4gQm9ycm93ZWQgZnJvbSBjeDI0MTEwLmMKKwkqLworCisJdG1wID0gc3JhdGUgPDwgNjsKKwlyYXRpbyA9IHRtcCAvIHNhbXBsZV9yYXRlOworCisJdG1wID0gKHRtcCAlIHNhbXBsZV9yYXRlKSA8PCA2OworCXJhdGlvID0gKHJhdGlvIDw8IDYpICsgKHRtcCAvIHNhbXBsZV9yYXRlKTsKKworCXRtcCA9ICh0bXAgJSBzYW1wbGVfcmF0ZSkgPDwgNjsKKwlyYXRpbyA9IChyYXRpbyA8PCA2KSArICh0bXAgLyBzYW1wbGVfcmF0ZSk7CisKKwl0bXAgPSAodG1wICUgc2FtcGxlX3JhdGUpIDw8IDU7CisJcmF0aW8gPSAocmF0aW8gPDwgNSkgKyAodG1wIC8gc2FtcGxlX3JhdGUpOworCisKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAxLCBwbGxfbXVsdCAqIDYpOworCisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOCwgKHJhdGlvID4+IDE2KSAmIDB4M2YgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAocmF0aW8gPj4gIDgpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsIChyYXRpbyAgICAgICkgJiAweGZmICk7CisKKwkvKiBhbHNvIHNldCB0aGUgZGVtb2R1bGF0b3Igc2FtcGxlIGdhaW4gKi8KKwlzYW1wbGVfZ2FpbiA9IGN4MjQxMjNfaW50X2xvZzIoc2FtcGxlX3JhdGUsIHNyYXRlKTsKKwl0bXAgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGMpICYgfjB4ZTA7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwYywgdG1wIHwgc2FtcGxlX2dhaW4gPDwgNSk7CisKKwlkcHJpbnRrKCIlczogc3JhdGU9JWQsIHJhdGlvPTB4JTA4eCwgc2FtcGxlX3JhdGU9JWkgc2FtcGxlX2dhaW49JWRcbiIsIF9fRlVOQ1RJT05fXywgc3JhdGUsIHJhdGlvLCBzYW1wbGVfcmF0ZSwgc2FtcGxlX2dhaW4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzcsNiArNTMxLDkgQEAKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgbmRpdiA9IDAsIGFkaXYgPSAwLCB2Y29fZGl2ID0gMDsKIAlpbnQgaSA9IDA7CisJaW50IHB1bXAgPSAyOworCWludCBiYW5kID0gMDsKKwlpbnQgbnVtX2JhbmRzID0gc2l6ZW9mKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKSAvIHNpemVvZihjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXSk7CiAKIAkvKiBEZWZhdWx0cyBmb3IgbG93IGZyZXEsIGxvdyByYXRlICovCiAJc3RhdGUtPlZDQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbMF0uVkNBcHJvZ2RhdGE7CkBAIC00NDQsMzggKzU0MSw0OSBAQAogCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbMF0ucHJvZ2RhdGE7CiAJdmNvX2RpdiA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLlZDT2RpdmlkZXI7CiAKLQkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbGVyYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSBhbmQgVkdBIHByb2dyYW1taW5nIGJpdHMgKi8KKwkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZCBGSUxUVU5FIHByb2dyYW1taW5nIGJpdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfQUdDX3ZhbHMpIC8gc2l6ZW9mKGN4MjQxMjNfQUdDX3ZhbHNbMF0pOyBpKyspCiAJewogCQlpZiAoKGN4MjQxMjNfQUdDX3ZhbHNbaV0uc3ltYm9scmF0ZV9sb3cgPD0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSAmJgotCQkJCShjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfaGlnaCA+PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICkgeworCQkgICAgKGN4MjQxMjNfQUdDX3ZhbHNbaV0uc3ltYm9scmF0ZV9oaWdoID49IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgKSB7CiAJCQlzdGF0ZS0+VkNBYXJnID0gY3gyNDEyM19BR0NfdmFsc1tpXS5WQ0Fwcm9nZGF0YTsKIAkJCXN0YXRlLT5WR0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzW2ldLlZHQXByb2dkYXRhOworCQkJc3RhdGUtPkZJTFR1bmUgPSBjeDI0MTIzX0FHQ192YWxzW2ldLkZJTFR1bmU7CiAJCX0KIAl9CiAKLQkvKiBGb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeSwgZGV0ZXJtaW5lIHRoZSBiYW5kc2VsZWN0IHByb2dyYW1taW5nIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKSAvIHNpemVvZihjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXSk7IGkrKykKKwkvKiBkZXRlcm1pbmUgdGhlIGJhbmQgdG8gdXNlICovCisJaWYoZm9yY2VfYmFuZCA8IDEgfHwgZm9yY2VfYmFuZCA+IG51bV9iYW5kcykKIAl7Ci0JCWlmICgoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgotCQkJCShjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2hpZ2ggPj0gcC0+ZnJlcXVlbmN5KSApIHsKLQkJCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0ucHJvZ2RhdGE7Ci0JCQl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uVkNPZGl2aWRlcjsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5kczsgaSsrKQorCQl7CisJCQlpZiAoKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2ldLmZyZXFfbG93IDw9IHAtPmZyZXF1ZW5jeSkgJiYKKwkJCSAgICAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9oaWdoID49IHAtPmZyZXF1ZW5jeSkgKQorCQkJCWJhbmQgPSBpOwogCQl9CiAJfQorCWVsc2UKKwkJYmFuZCA9IGZvcmNlX2JhbmQgLSAxOworCisJc3RhdGUtPmJhbmRzZWxlY3RhcmcgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5wcm9nZGF0YTsKKwl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uVkNPZGl2aWRlcjsKKworCS8qIGRldGVybWluZSB0aGUgY2hhcmdlIHB1bXAgY3VycmVudCAqLworCWlmICggcC0+ZnJlcXVlbmN5IDwgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfbG93ICsgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9oaWdoKS8yICkKKwkJcHVtcCA9IDB4MDE7CisJZWxzZQorCQlwdW1wID0gMHgwMjsKIAogCS8qIERldGVybWluZSB0aGUgTi9BIGRpdmlkZXJzIGZvciB0aGUgcmVxdWVzdGVkIGxiYW5kIGZyZXEgKGluIGtIeikuICovCi0JLyogTm90ZTogMTAxMTEgKGtIeikgaXMgdGhlIENyeXN0YWwgRnJlcSBhbmQgZGl2aWRlciBvZiAxMC4gKi8KLQluZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYpIC8gKDEwMTExIC8gMTApIC8gMikgLyAzMikgJiAweDFmZjsKLQlhZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYpIC8gKDEwMTExIC8gMTApIC8gMikgJSAzMikgJiAweDFmOworCS8qIE5vdGU6IHRoZSByZWZlcmVuY2UgZGl2aWRlciBSPTEwLCBmcmVxdWVuY3kgaXMgaW4gS0h6LCBYVEFMIGlzIGluIEh6ICovCisJbmRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpIC8gMzIpICYgMHgxZmY7CisJYWRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKIAogCWlmIChhZGl2ID09IDApCi0JCWFkaXYrKzsKKwkJbmRpdisrOwogCi0JLyogZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBsbCBmcmVxdWVuY3kgdmFsdWVzLiAqLwotCS8qIENvbW1hbmQgMTEsIHJlZmRpdiAxMSwgY3B1bXAgcG9sYXJpdHkgMSwgY3B1bXAgY3VycmVudCAzbUEgMTAuICovCi0Jc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgyIDw8IDE0KTsKLQlzdGF0ZS0+cGxsYXJnIHw9IChuZGl2IDw8IDUpIHwgYWRpdjsKKwkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwgY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLworCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfCAocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4OSw2ICs1OTcsOCBAQAogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAorCWRwcmludGsoIiVzOiAgcGxsIHdyaXRlcmVnIGNhbGxlZCwgZGF0YT0weCUwOHhcbiIsX19GVU5DVElPTl9fLGRhdGEpOworCiAJLyogYWxpZ24gdGhlIDIxIGJ5dGVzIGludG8gdG8gYml0MjMgYm91bmRhcnkgKi8KIAlkYXRhID0gZGF0YSA8PCAzOwogCkBAIC01MzgsNiArNjQ4LDkgQEAKIHN0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKworCWRwcmludGsoImZyZXF1ZW5jeT0laVxuIiwgcC0+ZnJlcXVlbmN5KTsKIAogCWlmIChjeDI0MTIzX3BsbF9jYWxjdWxhdGUoZmUsIHApICE9IDApIHsKIAkJcHJpbnRrKCIlczogY3gyNDEyM19wbGxfY2FsY3V0YXRlIGZhaWxlZFxuIixfX0ZVTkNUSU9OX18pOwpAQCAtNTUyLDYgKzY2NSwxNCBAQAogCWN4MjQxMjNfcGxsX3dyaXRlcmVnKGZlLCBwLCBzdGF0ZS0+YmFuZHNlbGVjdGFyZyk7CiAJY3gyNDEyM19wbGxfd3JpdGVyZWcoZmUsIHAsIHN0YXRlLT5wbGxhcmcpOwogCisJLyogc2V0IHRoZSBGSUxUVU5FIHZvbHRhZ2UgKi8KKwl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjgpICYgfjB4MzsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI3LCBzdGF0ZS0+RklMVHVuZSA+PiAyKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI4LCB2YWwgfCAoc3RhdGUtPkZJTFR1bmUgJiAweDMpKTsKKworCWRwcmludGsoIiVzOiAgcGxsIHR1bmUgVkNBPSVkLCBiYW5kPSVkLCBwbGw9JWRcbiIsX19GVU5DVElPTl9fLHN0YXRlLT5WQ0FhcmcsCisJCQlzdGF0ZS0+YmFuZHNlbGVjdGFyZyxzdGF0ZS0+cGxsYXJnKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01NjAsNiArNjgxLDggQEAKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKIAorCWRwcmludGsoIiVzOiAgaW5pdCBmcm9udGVuZFxuIixfX0ZVTkNUSU9OX18pOworCiAJLyogQ29uZmlndXJlIHRoZSBkZW1vZCB0byBhIGdvb2Qgc2V0IG9mIGRlZmF1bHRzICovCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihjeDI0MTIzX3JlZ2RhdGEpIC8gc2l6ZW9mKGN4MjQxMjNfcmVnZGF0YVswXSk7IGkrKykKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgY3gyNDEyM19yZWdkYXRhW2ldLnJlZywgY3gyNDEyM19yZWdkYXRhW2ldLmRhdGEpOwpAQCAtNTg3LDEwICs3MTAsMTMgQEAKIAogCQlzd2l0Y2ggKHZvbHRhZ2UpIHsKIAkJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJCWRwcmludGsoIiVzOiAgaXNsNjQyMSB2b2x0YWdlID0gMTNWXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgJiAweDMyKTsgLyogViAxM3YgKi8KIAkJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJCWRwcmludGsoIiVzOiAgaXNsNjQyMSB2b2x0YWdlID0gMThWXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gY3gyNDEyM193cml0ZWxuYnJlZyhzdGF0ZSwgMHgwLCB2YWwgfCAweDA0KTsgLyogSCAxOHYgKi8KIAkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCQlkcHJpbnRrKCIlczogIGlzbDU0MjEgdm9sdGFnZSBvZmZcbiIsX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBjeDI0MTIzX3dyaXRlbG5icmVnKHN0YXRlLCAweDAsIHZhbCAmIDB4MzApOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MjQsMTMgKzc1MCw5MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJCSAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKKy8qIHdhaXQgZm9yIGRpc2VxYyBxdWV1ZSB0byBiZWNvbWUgcmVhZHkgKG9yIHRpbWVvdXQpICovCitzdGF0aWMgdm9pZCBjeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUpCiB7Ci0JLyogZml4bWU6IEltcGxlbWVudCBkaXNlcWMgKi8KLQlwcmludGsoIiVzOiBObyBzdXBwb3J0IHlldFxuIixfX0ZVTkNUSU9OX18pOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMCk7CisJd2hpbGUgKCEoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDI5KSAmIDB4NDApKSB7CisJCWlmKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByaW50aygiJXM6IGRpc2VxYyBxdWV1ZSBub3QgcmVhZHksIGNvbW1hbmQgbWF5IGJlIGxvc3QuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9Cit9CiAKLQlyZXR1cm4gLUVOT1RTVVBQOworc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqY21kKQoreworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpLCB2YWw7CisKKwlkcHJpbnRrKCIlczpcbiIsX19GVU5DVElPTl9fKTsKKworCS8qIGNoZWNrIGlmIGNvbnRpbnVvdXMgdG9uZSBoYXMgYmVlbiBzdG9wcGVkICovCisJaWYgKHN0YXRlLT5jb25maWctPnVzZV9pc2w2NDIxKQorCQl2YWwgPSBjeDI0MTIzX3JlYWRsbmJyZWcoc3RhdGUsIDB4MDApICYgMHgxMDsKKwllbHNlCisJCXZhbCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSkgJiAweDEwOworCisKKwlpZiAodmFsKSB7CisJCXByaW50aygiJXM6IEVSUk9SOiBhdHRlbXB0IHRvIHNlbmQgZGlzZXFjIGNvbW1hbmQgYmVmb3JlIHRvbmUgaXMgb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCS8qIHdhaXQgZm9yIGRpc2VxYyBxdWV1ZSByZWFkeSAqLworCWN4MjQxMjNfd2FpdF9mb3JfZGlzZXFjKHN0YXRlKTsKKworCS8qIHNlbGVjdCB0b25lIG1vZGUgKi8KKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDJhLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MmEpICYgMHhmOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5tc2dfbGVuOyBpKyspCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MkMgKyBpLCBjbWQtPm1zZ1tpXSk7CisKKwl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwKSB8ICgoY21kLT5tc2dfbGVuLTMpICYgMykpOworCisJLyogd2FpdCBmb3IgZGlzZXFjIG1lc3NhZ2UgdG8gZmluaXNoIHNlbmRpbmcgKi8KKwljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTIzX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3sKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgdmFsOworCisJZHByaW50aygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogY2hlY2sgaWYgY29udGludW91cyB0b25lIGhhcyBiZWVuIHN0b3BlZCAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT51c2VfaXNsNjQyMSkKKwkJdmFsID0gY3gyNDEyM19yZWFkbG5icmVnKHN0YXRlLCAweDAwKSAmIDB4MTA7CisJZWxzZQorCQl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpICYgMHgxMDsKKworCisJaWYgKHZhbCkgeworCQlwcmludGsoIiVzOiBFUlJPUjogYXR0ZW1wdCB0byBzZW5kIGRpc2VxYyBjb21tYW5kIGJlZm9yZSB0b25lIGlzIG9mZlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CisKKwkvKiBzZWxlY3QgdG9uZSBtb2RlICovCisJdmFsID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDJhKSAmIDB4Zjg7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyYSwgdmFsIHwgMHgwNCk7CisKKwl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpOworCisJaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0EpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwIHwgMHgwMCkpOworCWVsc2UgaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0IpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwIHwgMHgwOCkpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQpAQCAtNjQyLDEzICs4NDgsMTUgQEAKIAogCSpzdGF0dXMgPSAwOwogCWlmIChsb2NrICYgMHgwMSkKLQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAoc3luYyAmIDB4MDIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CiAJaWYgKHN5bmMgJiAweDA0KQogCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwogCWlmIChzeW5jICYgMHgwOCkKLQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKIAlpZiAoc3luYyAmIDB4ODApCi0JCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKwkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKIAogCXJldHVybiAwOwogfQpAQCAtNjgxLDYgKzg4OSw4IEBACiAJZWxzZQogCQlzdGF0ZS0+c25yID0gMDsKIAorCWRwcmludGsoIiVzOiAgQkVSID0gJWQsIFMvTiBpbmRleCA9ICVkXG4iLF9fRlVOQ1RJT05fXyxzdGF0ZS0+bGFzdGJlciwgc3RhdGUtPnNucik7CisKIAkqYmVyID0gc3RhdGUtPmxhc3RiZXI7CiAKIAlyZXR1cm4gMDsKQEAgLTY5MSw2ICs5MDEsOCBAQAogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCSpzaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4M2IpIDw8IDg7IC8qIGxhcmdlciA9IGJldHRlciAqLwogCisJZHByaW50aygiJXM6ICBTaWduYWwgc3RyZW5ndGggPSAlZFxuIixfX0ZVTkNUSU9OX18sKnNpZ25hbF9zdHJlbmd0aCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk5LDYgKzkxMSw4IEBACiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJKnNuciA9IHN0YXRlLT5zbnI7CiAKKwlkcHJpbnRrKCIlczogIHJlYWQgUy9OIGluZGV4ID0gJWRcbiIsX19GVU5DVElPTl9fLCpzbnIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwNyw2ICs5MjEsOCBAQAogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCSp1Y2Jsb2NrcyA9IHN0YXRlLT5sYXN0YmVyOwogCisJZHByaW50aygiJXM6ICB1Y2Jsb2NrcyAoYmVyKSA9ICVkXG4iLF9fRlVOQ1RJT05fXywqdWNibG9ja3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxNCw2ICs5MzAsOCBAQAogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCisJZHByaW50aygiJXM6ICBzZXRfZnJvbnRlbmRcbiIsX19GVU5DVElPTl9fKTsKKwogCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQogCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKIApAQCAtNzM3LDYgKzk1NSw4IEBACiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKKwlkcHJpbnRrKCIlczogIGdldF9mcm9udGVuZFxuIixfX0ZVTkNUSU9OX18pOworCiAJaWYgKGN4MjQxMjNfZ2V0X2ludmVyc2lvbihzdGF0ZSwgJnAtPmludmVyc2lvbikgIT0gMCkgewogCQlwcmludGsoIiVzOiBGYWlsZWQgdG8gZ2V0IGludmVyc2lvbiBzdGF0dXNcbiIsX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CkBAIC03NjMsOCArOTgzLDEwIEBACiAKIAkJc3dpdGNoICh0b25lKSB7CiAJCWNhc2UgU0VDX1RPTkVfT046CisJCQlkcHJpbnRrKCIlczogIGlzbDY0MjEgc2VjIHRvbmUgb25cbiIsX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBjeDI0MTIzX3dyaXRlbG5icmVnKHN0YXRlLCAweDAsIHZhbCB8IDB4MTApOwogCQljYXNlIFNFQ19UT05FX09GRjoKKwkJCWRwcmludGsoIiVzOiAgaXNsNjQyMSBzZWMgdG9uZSBvZmZcbiIsX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBjeDI0MTIzX3dyaXRlbG5icmVnKHN0YXRlLCAweDAsIHZhbCAmIDB4MmYpOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKCIlczogQ0FTRSByZWFjaGVkIGRlZmF1bHQgd2l0aCB0b25lPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHRvbmUpOwpAQCAtODU1LDEyICsxMDc3LDEzIEBACiAJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAogCQkuZnJlcXVlbmN5X21heCA9IDIxNTAwMDAsCiAJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAxMDExLCAvKiBrSHogZm9yIFFQU0sgZnJvbnRlbmRzICovCi0JCS5mcmVxdWVuY3lfdG9sZXJhbmNlID0gMjk1MDAsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlID0gNTAwMCwKIAkJLnN5bWJvbF9yYXRlX21pbiA9IDEwMDAwMDAsCiAJCS5zeW1ib2xfcmF0ZV9tYXggPSA0NTAwMDAwMCwKIAkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAogCQkJRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKLQkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX0ZFQ180XzUgfCBGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfNl83IHwKKwkJCUZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKIAkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1JFQ09WRVIKIAl9LAogCkBAIC04NzUsMTIgKzEwOTgsMTYgQEAKIAkucmVhZF9zbnIgPSBjeDI0MTIzX3JlYWRfc25yLAogCS5yZWFkX3VjYmxvY2tzID0gY3gyNDEyM19yZWFkX3VjYmxvY2tzLAogCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gY3gyNDEyM19zZW5kX2Rpc2VxY19tc2csCisJLmRpc2VxY19zZW5kX2J1cnN0ID0gY3gyNDEyM19kaXNlcWNfc2VuZF9idXJzdCwKIAkuc2V0X3RvbmUgPSBjeDI0MTIzX3NldF90b25lLAogCS5zZXRfdm9sdGFnZSA9IGN4MjQxMjNfc2V0X3ZvbHRhZ2UsCiB9OwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOworCittb2R1bGVfcGFyYW0oZm9yY2VfYmFuZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfYmFuZCwgIkZvcmNlIGEgc3BlY2lmaWMgYmFuZCBzZWxlY3QgKDEtOSwgZGVmYXVsdDpvZmYpLiIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50IGN4MjQxMjMvY3gyNDEwOSBoYXJkd2FyZSIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IGI2ZTJjMzguLjc5MTcwNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtMjM1LDggKzIzNSw4IEBACiAJLm1heCAgID0gODYzMDAwMDAwLAogCS5jb3VudCA9IDMsCiAJLmVudHJpZXMgPSB7Ci0JCXsgIDE2MDAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAxIH0sCi0JCXsgIDQ1NTAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAyIH0sCisJCXsgIDE2NTAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAxIH0sCisJCXsgIDQ1MDAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDAyIH0sCiAJCXsgIDk5OTk5OTk5OSwgNDQwMDAwMDAsIDYyNTAwLCAweGNlLCAweDA0IH0sCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCmluZGV4IDhlOGRmN2IuLmI4M2RhZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAogCS8qIHByaXZhdGUgZGVtb2QgZGF0YSAqLwotCXU4IGluaXRpYWxpc2VkOwogCWVudW0gdGRhMTAwNHhfZGVtb2QgZGVtb2RfdHlwZTsKIH07CiAKQEAgLTU5NCw5ICs1OTMsNiBAQAogCiAJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAoc3RhdGUtPmluaXRpYWxpc2VkKQotCQlyZXR1cm4gMDsKLQogCWlmICh0ZGExMDA0NV9md3VwbG9hZChmZSkpIHsKIAkJcHJpbnRrKCJ0ZGExMDA0eDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtNjI2LDcgKzYyMiw2IEBACiAKIAl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCAweDFmLCAweDAxLCBzdGF0ZS0+Y29uZmlnLT5pbnZlcnRfb2Nsayk7CiAKLQlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC02MzUsOSArNjMwLDYgQEAKIAlzdHJ1Y3QgdGRhMTAwNHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAoc3RhdGUtPmluaXRpYWxpc2VkKQotCQlyZXR1cm4gMDsKLQogCWlmICh0ZGExMDA0Nl9md3VwbG9hZChmZSkpIHsKIAkJcHJpbnRrKCJ0ZGExMDA0eDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTY5Nyw3ICs2ODksNiBAQAogCS8vIHRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIDB4NTAsIDB4ODAsIDB4ODApOyAgICAgICAgIC8vIGhhbmRsZSBvdXQgb2YgZ3VhcmQgZWNob2VzCiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgMHgzYSwgMHg4MCwgc3RhdGUtPmNvbmZpZy0+aW52ZXJ0X29jbGsgPDwgNyk7CiAKLQlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC0xMjA3LDcgKzExOTgsNiBAQAogCQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDEsIDEpOwogCQlicmVhazsKIAl9Ci0Jc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI3MSw3ICsxMjYxLDYgQEAKIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwogCXN0YXRlLT5pMmMgPSBpMmM7CiAJbWVtY3B5KCZzdGF0ZS0+b3BzLCAmdGRhMTAwNDVfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAwOwogCXN0YXRlLT5kZW1vZF90eXBlID0gVERBMTAwNFhfREVNT0RfVERBMTAwNDU7CiAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KQEAgLTEzMzAsNyArMTMxOSw2IEBACiAJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKIAlzdGF0ZS0+aTJjID0gaTJjOwogCW1lbWNweSgmc3RhdGUtPm9wcywgJnRkYTEwMDQ2X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7Ci0Jc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKIAlzdGF0ZS0+ZGVtb2RfdHlwZSA9IFREQTEwMDRYX0RFTU9EX1REQTEwMDQ2OwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCmluZGV4IDg0ZjhmOWYuLjdkOGU2ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIERWQl9QTFVUTzIKIAl0cmlzdGF0ZSAiUGx1dG8yIGNhcmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCi0Jc2VsZWN0IEkyQworCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBEVkJfVERBMTAwNFgKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvTWFrZWZpbGUKaW5kZXggODZjYTg0Yi4uY2U2YTlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKLW9iai0kKENPTkZJR19EVkJfUExVVE8yKSA9IHBsdXRvMi5vCitvYmotJChDT05GSUdfRFZCX1BMVVRPMikgKz0gcGx1dG8yLm8KIAogRVhUUkFfQ0ZMQUdTID0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCA1YjJhYWRiLi5iNWFjN2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTEsOCArMSw3IEBACiBjb25maWcgRFZCX0FWNzExMAogCXRyaXN0YXRlICJBVjcxMTAgY2FyZHMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMQogCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgVklERU9fREVWCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKIAlzZWxlY3QgRFZCX1ZFUzE4MjAKIAlzZWxlY3QgRFZCX1ZFUzFYOTMKQEAgLTU5LDcgKzU4LDcgQEAKIAogY29uZmlnIERWQl9CVURHRVQKIAl0cmlzdGF0ZSAiQnVkZ2V0IGNhcmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fU0FBNzE0NgogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVkVTMVg5MwpAQCAtODAsNyArNzksNyBAQAogCiBjb25maWcgRFZCX0JVREdFVF9DSQogCXRyaXN0YXRlICJCdWRnZXQgY2FyZHMgd2l0aCBvbmJvYXJkIENJIGNvbm5lY3RvciIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDYKIAlzZWxlY3QgRFZCX1NUVjAyOTcKIAlzZWxlY3QgRFZCX1NUVjAyOTkKQEAgLTEwMCw4ICs5OSw3IEBACiAKIGNvbmZpZyBEVkJfQlVER0VUX0FWCiAJdHJpc3RhdGUgIkJ1ZGdldCBjYXJkcyB3aXRoIGFuYWxvZyB2aWRlbyBpbnB1dHMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kKLQlzZWxlY3QgVklERU9fREVWCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVERBMTAwNFgKQEAgLTExOSw3ICsxMTcsNyBAQAogCiBjb25maWcgRFZCX0JVREdFVF9QQVRDSAogCXRyaXN0YXRlICJBVjcxMTAgY2FyZHMgd2l0aCBCdWRnZXQgUGF0Y2giCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBEVkJfQlVER0VUCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBEVkJfQlVER0VUICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgRFZCX0FWNzExMAogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVkVTMVg5MwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCA4NDBlZmVjLi5kMDI4MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtODcsNiArODcsNyBAQAogc3RhdGljIGludCBidWRnZXRwYXRjaDsKIHN0YXRpYyBpbnQgd3NzX2NmZ180XzMgPSAweDQwMDg7CiBzdGF0aWMgaW50IHdzc19jZmdfMTZfOSA9IDB4MDAwNzsKK3N0YXRpYyBpbnQgdHZfc3RhbmRhcmQ7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXY3MTEwX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsIChiaXRtYXNrLCBkZWZhdWx0IDApIik7CkBAIC0xMDksNiArMTEwLDggQEAKIE1PRFVMRV9QQVJNX0RFU0Mod3NzX2NmZ180XzMsICJXU1MgNDozIC0gZGVmYXVsdCAweDQwMDggLSBiaXQgMTU6IGRpc2FibGUsIDE0OiBidXJzdCBtb2RlLCAxMy4uMDogd3NzIGRhdGEiKTsKIG1vZHVsZV9wYXJhbSh3c3NfY2ZnXzE2XzksIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdzc19jZmdfMTZfOSwgIldTUyAxNjo5IC0gZGVmYXVsdCAweDAwMDcgLSBiaXQgMTU6IGRpc2FibGUsIDE0OiBidXJzdCBtb2RlLCAxMy4uMDogd3NzIGRhdGEiKTsKK21vZHVsZV9wYXJhbSh0dl9zdGFuZGFyZCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHZfc3RhbmRhcmQsICJUViBzdGFuZGFyZDogMCBQQUwgKGRlZmF1bHQpLCAxIE5UU0MiKTsKIAogc3RhdGljIHZvaWQgcmVzdGFydF9mZWVkcyhzdHJ1Y3QgYXY3MTEwICphdjcxMTApOwogCkBAIC0yMTIzLDcgKzIxMjYsNyBAQAogCQkJCQkJCXJlYWRfcHdtKGF2NzExMCkpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAwMDM6Ci0JCQkJLyogSGF1cGF1Z2UgRFZCLUMgMi4xIFZFUzE4MjAvQUxQUyBUREJFMiAqLworCQkJCS8qIEhhdXBwYXVnZSBEVkItQyAyLjEgVkVTMTgyMC9BTFBTIFREQkUyICovCiAJCQkJYXY3MTEwLT5mZSA9IHZlczE4MjBfYXR0YWNoKCZhbHBzX3RkYmUyX2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXAsCiAJCQkJCQkJcmVhZF9wd20oYXY3MTEwKSk7CiAJCQkJYnJlYWs7CkBAIC0yNTQzLDYgKzI1NDYsOSBAQAogCWF2NzExMC0+b3Nkd2luID0gMTsKIAltdXRleF9pbml0KCZhdjcxMTAtPm9zZF9tdXRleCk7CiAKKwkvKiBUViBzdGFuZGFyZCAqLworCWF2NzExMC0+dmlkbW9kZSA9IHR2X3N0YW5kYXJkID09IDEgPyBWSURFT19NT0RFX05UU0MgOiBWSURFT19NT0RFX1BBTDsKKwogCS8qIEFSTSAid2F0Y2hkb2ciICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYXY3MTEwLT5hcm1fd2FpdCk7CiAJYXY3MTEwLT5hcm1fdGhyZWFkID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKaW5kZXggNDAwZmFjZS4uMmVmZjA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKQEAgLTE0NzksOCArMTQ3OSw2IEBACiAJdm9pZCAoKnBsYXlbXSkodTggKiwgaW50LCB2b2lkICopID0geyBwbGF5X2F1ZGlvX2NiLCBwbGF5X3ZpZGVvX2NiIH07CiAJaW50IGksIHJldDsKIAotCWF2NzExMC0+dmlkbW9kZSA9IFZJREVPX01PREVfUEFMOwotCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlzdHJ1Y3QgaXBhY2sgKmlwYWNrID0gYXY3MTEwLT5pcGFjayArIGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggOWRkNDc0NS4uOGE3Y2Q3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTYwLDExICs2MCwxMSBAQAogCXN0cnVjdCBkdmJfY2FfZW41MDIyMSBjYTsKIH07CiAKLS8qIEdQSU8gQ0kgQ29ubmVjdGlvbnM6Ci0gKiAwIC0gVmNjL1Jlc2V0IChSZXNldCBpcyBjb250cm9sbGVkIGJ5IGNhcGFjaXRvcikKLSAqIDEgLSBBdHRyaWJ1dGUgTWVtb3J5Ci0gKiAyIC0gQ2FyZCBFbmFibGUgKEFjdGl2ZSBMb3cpCi0gKiAzIC0gQ2FyZCBEZXRlY3QKKy8qIEdQSU8gQ29ubmVjdGlvbnM6CisgKiAwIC0gVmNjL1Jlc2V0IChSZXNldCBpcyBjb250cm9sbGVkIGJ5IGNhcGFjaXRvcikuIFJlc2V0cyB0aGUgZnJvbnRlbmQgKkFTIFdFTEwqIQorICogMSAtIENJIG1lbW9yeSBzZWxlY3QgMD0+SU8gbWVtb3J5LCAxPT5BdHRyaWJ1dGUgTWVtb3J5CisgKiAyIC0gQ0kgQ2FyZCBFbmFibGUgKEFjdGl2ZSBMb3cpCisgKiAzIC0gQ0kgQ2FyZCBEZXRlY3QKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjE0LDYgKzIxNCw5IEBACiAJd2hpbGUgKC0tdGltZW91dCA+IDAgJiYgY2lpbnRmX3JlYWRfYXR0cmlidXRlX21lbShjYSwgc2xvdCwgMCkgIT0gMHgxZCkKIAkJbXNsZWVwKDEwMCk7CiAKKwkvKiByZWluaXRpYWxpc2UgdGhlIGZyb250ZW5kICovCisJZHZiX2Zyb250ZW5kX3JlaW5pdGlhbGlzZShidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOworCiAJaWYgKHRpbWVvdXQgPD0gMCkKIAl7CiAJCXByaW50ayhLRVJOX0VSUiAiYnVkZ2V0LWF2OiBjYW0gcmVzZXQgZmFpbGVkICh0aW1lb3V0KS5cbiIpOwpAQCAtMTE4Nyw4ICsxMTkwLDYgQEAKIAkJCQkJCVNBQTcxNDZfSFBTX1NZTkNfUE9SVF9BKTsKIAogCQlzYWE3MTEzX3NldGlucHV0KGJ1ZGdldF9hdiwgMCk7Ci0JfSBlbHNlIHsKLQkJY2lpbnRmX2luaXQoYnVkZ2V0X2F2KTsKIAl9CiAKIAkvKiBmaXhtZTogZmluZCBzb21lIHNhbmUgdmFsdWVzIGhlcmUuLi4gKi8KQEAgLTEyMDgsNiArMTIwOSwxMCBAQAogCWJ1ZGdldF9hdi0+YnVkZ2V0LmR2Yl9hZGFwdGVyLnByaXYgPSBidWRnZXRfYXY7CiAJZnJvbnRlbmRfaW5pdChidWRnZXRfYXYpOwogCisJaWYgKCFidWRnZXRfYXYtPmhhc19zYWE3MTEzKSB7CisJCWNpaW50Zl9pbml0KGJ1ZGdldF9hdik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggNWY5MTAzNi4uZTY0YTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTcxLDYgKzcxLDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbXNwNDMwX2lycV90YXNrbGV0OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjaWludGZfaXJxX3Rhc2tsZXQ7CiAJaW50IHNsb3Rfc3RhdHVzOworCWludCBjaV9pcnE7CiAJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOwogCWNoYXIgaXJfZGV2X25hbWVbNTBdOwogCXU4IHR1bmVyX3BsbF9hZGRyZXNzOyAvKiB1c2VkIGZvciBwaGlsaXBzX3RkbTEzMTZsIGNvbmZpZ3MgKi8KQEAgLTI3Niw4ICsyNzcsMTAgQEAKIAlpZiAoc2xvdCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8vIHRyaWdnZXIgb24gUklTSU5HIGVkZ2UgZHVyaW5nIHJlc2V0IHNvIHdlIGtub3cgd2hlbiBSRUFEWSBpcyByZS1hc3NlcnRlZAotCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JUlFISSk7CisJaWYgKGJ1ZGdldF9jaS0+Y2lfaXJxKSB7CisJCS8vIHRyaWdnZXIgb24gUklTSU5HIGVkZ2UgZHVyaW5nIHJlc2V0IHNvIHdlIGtub3cgd2hlbiBSRUFEWSBpcyByZS1hc3NlcnRlZAorCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fSVJRSEkpOworCX0KIAlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19SRVNFVDsKIAl0dHBjaV9idWRnZXRfZGViaXdyaXRlKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSUNJQ1RMLCBERUJJQUREUl9DSUNPTlRST0wsIDEsIDAsIDEsIDApOwogCW1zbGVlcCgxKTsKQEAgLTM3MCwxMSArMzczLDUwIEBACiAJfQogfQogCitzdGF0aWMgaW50IGNpaW50Zl9wb2xsX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90LCBpbnQgb3BlbikKK3sKKwlzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kgPSAoc3RydWN0IGJ1ZGdldF9jaSAqKSBjYS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwkvLyBlbnN1cmUgd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzIElSUXMgZHVyaW5nIGluaXRpYWxpc2F0aW9uCisJaWYgKCFidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vIHJlYWQgdGhlIENBTSBzdGF0dXMKKwlmbGFncyA9IHR0cGNpX2J1ZGdldF9kZWJpcmVhZCgmYnVkZ2V0X2NpLT5idWRnZXQsIERFQklDSUNUTCwgREVCSUFERFJfQ0lDT05UUk9MLCAxLCAxLCAwKTsKKwlpZiAoZmxhZ3MgJiBDSUNPTlRST0xfQ0FNREVURUNUKSB7CisJCS8vIG1hcmsgaXQgYXMgcHJlc2VudCBpZiBpdCB3YXNuJ3QgYmVmb3JlCisJCWlmIChidWRnZXRfY2ktPnNsb3Rfc3RhdHVzICYgU0xPVFNUQVRVU19OT05FKSB7CisJCQlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19QUkVTRU5UOworCQl9CisKKwkJLy8gZHVyaW5nIGEgUkVTRVQsIHdlIGNoZWNrIGlmIHdlIGNhbiByZWFkIGZyb20gSU8gbWVtb3J5IHRvIHNlZSB3aGVuIENBTSBpcyByZWFkeQorCQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAmIFNMT1RTVEFUVVNfUkVTRVQpIHsKKwkJCWlmIChjaWludGZfcmVhZF9hdHRyaWJ1dGVfbWVtKGNhLCBzbG90LCAwKSA9PSAweDFkKSB7CisJCQkJYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyA9IFNMT1RTVEFUVVNfUkVBRFk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19OT05FOworCX0KKworCWlmIChidWRnZXRfY2ktPnNsb3Rfc3RhdHVzICE9IFNMT1RTVEFUVVNfTk9ORSkgeworCQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAmIFNMT1RTVEFUVVNfUkVBRFkpIHsKKwkJCXJldHVybiBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9QUkVTRU5UIHwgRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUkVBRFk7CisJCX0KKwkJcmV0dXJuIERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1BSRVNFTlQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2lpbnRmX2luaXQoc3RydWN0IGJ1ZGdldF9jaSAqYnVkZ2V0X2NpKQogewogCXN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhID0gYnVkZ2V0X2NpLT5idWRnZXQuZGV2OwogCWludCBmbGFnczsKIAlpbnQgcmVzdWx0OworCWludCBjaV92ZXJzaW9uOworCWludCBjYV9mbGFnczsKIAogCW1lbXNldCgmYnVkZ2V0X2NpLT5jYSwgMCwgc2l6ZW9mKHN0cnVjdCBkdmJfY2FfZW41MDIyMSkpOwogCkBAIC0zODIsMTYgKzQyNCwyOSBAQAogCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIHNhYTcxNDZfcmVhZChzYWEsIE1DMSkgfCAoMHg4MDAgPDwgMTYpIHwgMHg4MDApOwogCiAJLy8gdGVzdCBpZiBpdCBpcyB0aGVyZQotCWlmICgodHRwY2lfYnVkZ2V0X2RlYmlyZWFkKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSUNJQ1RMLCBERUJJQUREUl9DSVZFUlNJT04sIDEsIDEsIDApICYgMHhhMCkgIT0gMHhhMCkgeworCWNpX3ZlcnNpb24gPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJVkVSU0lPTiwgMSwgMSwgMCk7CisJaWYgKChjaV92ZXJzaW9uICYgMHhhMCkgIT0gMHhhMCkgewogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yOwogCX0KKwogCS8vIGRldGVybWluZSB3aGV0aGVyIGEgQ0FNIGlzIHByZXNlbnQgb3Igbm90CiAJZmxhZ3MgPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJQ09OVFJPTCwgMSwgMSwgMCk7CiAJYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyA9IFNMT1RTVEFUVVNfTk9ORTsKIAlpZiAoZmxhZ3MgJiBDSUNPTlRST0xfQ0FNREVURUNUKQogCQlidWRnZXRfY2ktPnNsb3Rfc3RhdHVzID0gU0xPVFNUQVRVU19QUkVTRU5UOwogCisJLy8gdmVyc2lvbiAweGEyIG9mIHRoZSBDSSBmaXJtd2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMKKwlpZiAoY2lfdmVyc2lvbiA9PSAweGEyKSB7CisJCWNhX2ZsYWdzID0gMDsKKwkJYnVkZ2V0X2NpLT5jaV9pcnEgPSAwOworCX0gZWxzZSB7CisJCWNhX2ZsYWdzID0gRFZCX0NBX0VONTAyMjFfRkxBR19JUlFfQ0FNQ0hBTkdFIHwKKwkJCQlEVkJfQ0FfRU41MDIyMV9GTEFHX0lSUV9GUiB8CisJCQkJRFZCX0NBX0VONTAyMjFfRkxBR19JUlFfREE7CisJCWJ1ZGdldF9jaS0+Y2lfaXJxID0gMTsKKwl9CisKIAkvLyByZWdpc3RlciBDSSBpbnRlcmZhY2UKIAlidWRnZXRfY2ktPmNhLm93bmVyID0gVEhJU19NT0RVTEU7CiAJYnVkZ2V0X2NpLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0gPSBjaWludGZfcmVhZF9hdHRyaWJ1dGVfbWVtOwpAQCAtNDAxLDIzICs0NTYsMjcgQEAKIAlidWRnZXRfY2ktPmNhLnNsb3RfcmVzZXQgPSBjaWludGZfc2xvdF9yZXNldDsKIAlidWRnZXRfY2ktPmNhLnNsb3Rfc2h1dGRvd24gPSBjaWludGZfc2xvdF9zaHV0ZG93bjsKIAlidWRnZXRfY2ktPmNhLnNsb3RfdHNfZW5hYmxlID0gY2lpbnRmX3Nsb3RfdHNfZW5hYmxlOworCWJ1ZGdldF9jaS0+Y2EucG9sbF9zbG90X3N0YXR1cyA9IGNpaW50Zl9wb2xsX3Nsb3Rfc3RhdHVzOwogCWJ1ZGdldF9jaS0+Y2EuZGF0YSA9IGJ1ZGdldF9jaTsKIAlpZiAoKHJlc3VsdCA9IGR2Yl9jYV9lbjUwMjIxX2luaXQoJmJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9hZGFwdGVyLAogCQkJCQkgICZidWRnZXRfY2ktPmNhLAotCQkJCQkgIERWQl9DQV9FTjUwMjIxX0ZMQUdfSVJRX0NBTUNIQU5HRSB8Ci0JCQkJCSAgRFZCX0NBX0VONTAyMjFfRkxBR19JUlFfRlIgfAotCQkJCQkgIERWQl9DQV9FTjUwMjIxX0ZMQUdfSVJRX0RBLCAxKSkgIT0gMCkgeworCQkJCQkgIGNhX2ZsYWdzLCAxKSkgIT0gMCkgewogCQlwcmludGsoImJ1ZGdldF9jaTogQ0kgaW50ZXJmYWNlIGRldGVjdGVkLCBidXQgaW5pdGlhbGlzYXRpb24gZmFpbGVkLlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQorCiAJLy8gU2V0dXAgQ0kgc2xvdCBJUlEKLQl0YXNrbGV0X2luaXQoJmJ1ZGdldF9jaS0+Y2lpbnRmX2lycV90YXNrbGV0LCBjaWludGZfaW50ZXJydXB0LCAodW5zaWduZWQgbG9uZykgYnVkZ2V0X2NpKTsKLQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAhPSBTTE9UU1RBVFVTX05PTkUpIHsKLQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMCwgU0FBNzE0Nl9HUElPX0lSUUxPKTsKLQl9IGVsc2UgewotCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fSVJRSEkpOworCWlmIChidWRnZXRfY2ktPmNpX2lycSkgeworCQl0YXNrbGV0X2luaXQoJmJ1ZGdldF9jaS0+Y2lpbnRmX2lycV90YXNrbGV0LCBjaWludGZfaW50ZXJydXB0LCAodW5zaWduZWQgbG9uZykgYnVkZ2V0X2NpKTsKKwkJaWYgKGJ1ZGdldF9jaS0+c2xvdF9zdGF0dXMgIT0gU0xPVFNUQVRVU19OT05FKSB7CisJCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fSVJRTE8pOworCQl9IGVsc2UgeworCQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMCwgU0FBNzE0Nl9HUElPX0lSUUhJKTsKKwkJfQorCQlzYWE3MTQ2X3dyaXRlKHNhYSwgSUVSLCBzYWE3MTQ2X3JlYWQoc2FhLCBJRVIpIHwgTUFTS18wMyk7CiAJfQotCXNhYTcxNDZfd3JpdGUoc2FhLCBJRVIsIHNhYTcxNDZfcmVhZChzYWEsIElFUikgfCBNQVNLXzAzKTsKKworCS8vIGVuYWJsZSBpbnRlcmZhY2UKIAl0dHBjaV9idWRnZXRfZGViaXdyaXRlKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSUNJQ1RMLCBERUJJQUREUl9DSUNPTlRST0wsIDEsCiAJCQkgICAgICAgQ0lDT05UUk9MX1JFU0VULCAxLCAwKTsKIApAQCAtNDI2LDEwICs0ODUsMTIgQEAKIAlidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50ID0gMTsKIAogCS8vIGZvcmdlIGEgZmFrZSBDSSBJUlEgc28gdGhlIENBTSBzdGF0ZSBpcyBzZXR1cCBjb3JyZWN0bHkKLQlmbGFncyA9IERWQl9DQV9FTjUwMjIxX0NBTUNIQU5HRV9SRU1PVkVEOwotCWlmIChidWRnZXRfY2ktPnNsb3Rfc3RhdHVzICE9IFNMT1RTVEFUVVNfTk9ORSkKLQkJZmxhZ3MgPSBEVkJfQ0FfRU41MDIyMV9DQU1DSEFOR0VfSU5TRVJURUQ7Ci0JZHZiX2NhX2VuNTAyMjFfY2FtY2hhbmdlX2lycSgmYnVkZ2V0X2NpLT5jYSwgMCwgZmxhZ3MpOworCWlmIChidWRnZXRfY2ktPmNpX2lycSkgeworCQlmbGFncyA9IERWQl9DQV9FTjUwMjIxX0NBTUNIQU5HRV9SRU1PVkVEOworCQlpZiAoYnVkZ2V0X2NpLT5zbG90X3N0YXR1cyAhPSBTTE9UU1RBVFVTX05PTkUpCisJCQlmbGFncyA9IERWQl9DQV9FTjUwMjIxX0NBTUNIQU5HRV9JTlNFUlRFRDsKKwkJZHZiX2NhX2VuNTAyMjFfY2FtY2hhbmdlX2lycSgmYnVkZ2V0X2NpLT5jYSwgMCwgZmxhZ3MpOworCX0KIAogCXJldHVybiAwOwogCkBAIC00NDMsOSArNTA0LDEzIEBACiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXRfY2ktPmJ1ZGdldC5kZXY7CiAKIAkvLyBkaXNhYmxlIENJIGludGVycnVwdHMKLQlzYWE3MTQ2X3dyaXRlKHNhYSwgSUVSLCBzYWE3MTQ2X3JlYWQoc2FhLCBJRVIpICYgfk1BU0tfMDMpOwotCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JTlBVVCk7Ci0JdGFza2xldF9raWxsKCZidWRnZXRfY2ktPmNpaW50Zl9pcnFfdGFza2xldCk7CisJaWYgKGJ1ZGdldF9jaS0+Y2lfaXJxKSB7CisJCXNhYTcxNDZfd3JpdGUoc2FhLCBJRVIsIHNhYTcxNDZfcmVhZChzYWEsIElFUikgJiB+TUFTS18wMyk7CisJCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JTlBVVCk7CisJCXRhc2tsZXRfa2lsbCgmYnVkZ2V0X2NpLT5jaWludGZfaXJxX3Rhc2tsZXQpOworCX0KKworCS8vIHJlc2V0IGludGVyZmFjZQogCXR0cGNpX2J1ZGdldF9kZWJpd3JpdGUoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJQ09OVFJPTCwgMSwgMCwgMSwgMCk7CiAJbXNsZWVwKDEpOwogCXR0cGNpX2J1ZGdldF9kZWJpd3JpdGUoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJQ09OVFJPTCwgMSwKQEAgLTQ3Myw3ICs1MzgsNyBAQAogCWlmICgqaXNyICYgTUFTS18xMCkKIAkJdHRwY2lfYnVkZ2V0X2lycTEwX2hhbmRsZXIoZGV2LCBpc3IpOwogCi0JaWYgKCgqaXNyICYgTUFTS18wMykgJiYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmNpX3ByZXNlbnQpKQorCWlmICgoKmlzciAmIE1BU0tfMDMpICYmIChidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50KSAmJiAoYnVkZ2V0X2NpLT5jaV9pcnEpKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZidWRnZXRfY2ktPmNpaW50Zl9pcnFfdGFza2xldCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCmluZGV4IDYzM2U2OGMuLmVhMjA2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYwpAQCAtMzksOSArMzksMjEgQEAKICNpbmNsdWRlICJidWRnZXQuaCIKICNpbmNsdWRlICJ0dHBjaS1lZXByb20uaCIKIAorI2RlZmluZSBUU19XSURUSAkJKDIgKiBUU19TSVpFKQorI2RlZmluZSBUU19XSURUSF9BQ1RJVlkJCVRTX1NJWkUKKyNkZWZpbmUgVFNfSEVJR0hUX01BU0sJCTB4ZjAwCisjZGVmaW5lIFRTX0hFSUdIVF9NQVNLX0FDVElWWQkweGMwMAorI2RlZmluZSBUU19NSU5fQlVGU0laRV9LCTE4OAorI2RlZmluZSBUU19NQVhfQlVGU0laRV9LCTE0MTAKKyNkZWZpbmUgVFNfTUFYX0JVRlNJWkVfS19BQ1RJVlkJNTY0CisjZGVmaW5lIEJVRkZFUl9XQVJOSU5HX1dBSVQJKDMwKkhaKQorCiBpbnQgYnVkZ2V0X2RlYnVnOworc3RhdGljIGludCBkbWFfYnVmZmVyX3NpemUgPSBUU19NSU5fQlVGU0laRV9LOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBidWRnZXRfZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYnVmc2l6ZSwgZG1hX2J1ZmZlcl9zaXplLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGJ1ZGdldCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYnVmc2l6ZSwgIkRNQSBidWZmZXIgc2l6ZSBpbiBLQiwgZGVmYXVsdDogMTg4LCBtaW46IDE4OCwgbWF4OiAxNDEwIChBY3Rpdnk6IDU2NCkiKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRUIGJ1ZGdldCAvIFdpblRWIE5vdmEKQEAgLTcwLDExICs4MiwxMCBAQAogCiAJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgTUFTS18yMCk7CS8vIERNQTMgb2ZmCiAKLQltZW1zZXQoYnVkZ2V0LT5ncmFiYmluZywgMHgwMCwgVFNfSEVJR0hUICogVFNfV0lEVEgpOworCW1lbXNldChidWRnZXQtPmdyYWJiaW5nLCAweDAwLCBidWRnZXQtPmJ1ZmZlcl9zaXplKTsKIAogCXNhYTcxNDZfd3JpdGUoZGV2LCBQQ0lfQlRfVjEsIDB4MDAxYzAwMDAgfCAoc2FhNzE0Nl9yZWFkKGRldiwgUENJX0JUX1YxKSAmIH4weDAwMWYwMDAwKSk7CiAKLQlidWRnZXQtPnRzZiA9IDB4ZmY7CiAJYnVkZ2V0LT50dGJwID0gMDsKIAogCS8qCkBAIC0xMTUsMTYgKzEyNiwxMiBAQAogCiAJc2FhNzE0Nl93cml0ZShkZXYsIEJBU0VfT0REMywgMCk7CiAJc2FhNzE0Nl93cml0ZShkZXYsIEJBU0VfRVZFTjMsIDApOwotCXNhYTcxNDZfd3JpdGUoZGV2LCBQUk9UX0FERFIzLCBUU19XSURUSCAqIFRTX0hFSUdIVCk7CisJc2FhNzE0Nl93cml0ZShkZXYsIFBST1RfQUREUjMsIGJ1ZGdldC0+YnVmZmVyX3NpemUpOwogCXNhYTcxNDZfd3JpdGUoZGV2LCBCQVNFX1BBR0UzLCBidWRnZXQtPnB0LmRtYSB8IE1FMSB8IDB4OTApOwogCi0JaWYgKGJ1ZGdldC0+Y2FyZC0+dHlwZSA9PSBCVURHRVRfRlNfQUNUSVZZKSB7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBQSVRDSDMsIFRTX1dJRFRIIC8gMik7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBOVU1fTElORV9CWVRFMywgKChUU19IRUlHSFQgKiAyKSA8PCAxNikgfCAoVFNfV0lEVEggLyAyKSk7Ci0JfSBlbHNlIHsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIFBJVENIMywgVFNfV0lEVEgpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTlVNX0xJTkVfQllURTMsIChUU19IRUlHSFQgPDwgMTYpIHwgVFNfV0lEVEgpOwotCX0KKwlzYWE3MTQ2X3dyaXRlKGRldiwgUElUQ0gzLCBidWRnZXQtPmJ1ZmZlcl93aWR0aCk7CisJc2FhNzE0Nl93cml0ZShkZXYsIE5VTV9MSU5FX0JZVEUzLAorCQkJKGJ1ZGdldC0+YnVmZmVyX2hlaWdodCA8PCAxNikgfCBidWRnZXQtPmJ1ZmZlcl93aWR0aCk7CiAKIAlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCAoTUFTS18wNCB8IE1BU0tfMjApKTsKIApAQCAtMTQxLDExICsxNDgsMTIgQEAKIAl1OCAqbWVtID0gKHU4ICopIChidWRnZXQtPmdyYWJiaW5nKTsKIAl1MzIgb2xkZG1hID0gYnVkZ2V0LT50dGJwOwogCXUzMiBuZXdkbWEgPSBzYWE3MTQ2X3JlYWQoYnVkZ2V0LT5kZXYsIFBDSV9WRFAzKTsKKwl1MzIgY291bnQ7CiAKIAkvKiBuZWFyZXN0IGxvd2VyIHBvc2l0aW9uIGRpdmlzaWJsZSBieSAxODggKi8KIAluZXdkbWEgLT0gbmV3ZG1hICUgMTg4OwogCi0JaWYgKG5ld2RtYSA+PSBUU19CVUZMRU4pCisJaWYgKG5ld2RtYSA+PSBidWRnZXQtPmJ1ZmZlcl9zaXplKQogCQlyZXR1cm47CiAKIAlidWRnZXQtPnR0YnAgPSBuZXdkbWE7CkBAIC0xNTQsMTEgKzE2MiwyNCBAQAogCQlyZXR1cm47CiAKIAlpZiAobmV3ZG1hID4gb2xkZG1hKSB7CS8qIG5vIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5uZXdkbWEgKi8KLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4LCBtZW0gKyBvbGRkbWEsIChuZXdkbWEgLSBvbGRkbWEpIC8gMTg4KTsKKwkJY291bnQgPSBuZXdkbWEgLSBvbGRkbWE7CisJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmYnVkZ2V0LT5kZW11eCwgbWVtICsgb2xkZG1hLCBjb3VudCAvIDE4OCk7CiAJfSBlbHNlIHsJCS8qIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5idWZsZW4gYW5kIDAuLm5ld2RtYSAqLwotCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmJ1ZGdldC0+ZGVtdXgsIG1lbSArIG9sZGRtYSwgKFRTX0JVRkxFTiAtIG9sZGRtYSkgLyAxODgpOworCQljb3VudCA9IGJ1ZGdldC0+YnVmZmVyX3NpemUgLSBvbGRkbWE7CisJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmYnVkZ2V0LT5kZW11eCwgbWVtICsgb2xkZG1hLCBjb3VudCAvIDE4OCk7CisJCWNvdW50ICs9IG5ld2RtYTsKIAkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4LCBtZW0sIG5ld2RtYSAvIDE4OCk7CiAJfQorCisJaWYgKGNvdW50ID4gYnVkZ2V0LT5idWZmZXJfd2FybmluZ190aHJlc2hvbGQpCisJCWJ1ZGdldC0+YnVmZmVyX3dhcm5pbmdzKys7CisKKwlpZiAoYnVkZ2V0LT5idWZmZXJfd2FybmluZ3MgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBidWRnZXQtPmJ1ZmZlcl93YXJuaW5nX3RpbWUpKSB7CisJCXByaW50aygiJXMgJXM6IHVzZWQgJWQgdGltZXMgPjgwJSUgb2YgYnVmZmVyICgldSBieXRlcyBub3cpXG4iLAorCQkJYnVkZ2V0LT5kZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywgYnVkZ2V0LT5idWZmZXJfd2FybmluZ3MsIGNvdW50KTsKKwkJYnVkZ2V0LT5idWZmZXJfd2FybmluZ190aW1lID0gamlmZmllcyArIEJVRkZFUl9XQVJOSU5HX1dBSVQ7CisJCWJ1ZGdldC0+YnVmZmVyX3dhcm5pbmdzID0gMDsKKwl9CiB9CiAKIApAQCAtMzQxLDkgKzM2MiwxMCBAQAogCQkgICAgICBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8sCiAJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewotCWludCBsZW5ndGggPSBUU19XSURUSCAqIFRTX0hFSUdIVDsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVkZ2V0X2luZm8gKmJpID0gaW5mby0+ZXh0X3ByaXY7CisJaW50IG1heF9idWZzaXplOworCWludCBoZWlnaHRfbWFzazsKIAogCW1lbXNldChidWRnZXQsIDAsIHNpemVvZihzdHJ1Y3QgYnVkZ2V0KSk7CiAKQEAgLTM1Miw2ICszNzQsMzIgQEAKIAlidWRnZXQtPmNhcmQgPSBiaTsKIAlidWRnZXQtPmRldiA9IChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKikgZGV2OwogCisJaWYgKGJ1ZGdldC0+Y2FyZC0+dHlwZSA9PSBCVURHRVRfRlNfQUNUSVZZKSB7CisJCWJ1ZGdldC0+YnVmZmVyX3dpZHRoID0gVFNfV0lEVEhfQUNUSVZZOworCQltYXhfYnVmc2l6ZSA9IFRTX01BWF9CVUZTSVpFX0tfQUNUSVZZOworCQloZWlnaHRfbWFzayA9IFRTX0hFSUdIVF9NQVNLX0FDVElWWTsKKwl9IGVsc2UgeworCQlidWRnZXQtPmJ1ZmZlcl93aWR0aCA9IFRTX1dJRFRIOworCQltYXhfYnVmc2l6ZSA9IFRTX01BWF9CVUZTSVpFX0s7CisJCWhlaWdodF9tYXNrID0gVFNfSEVJR0hUX01BU0s7CisJfQorCisJaWYgKGRtYV9idWZmZXJfc2l6ZSA8IFRTX01JTl9CVUZTSVpFX0spCisJCWRtYV9idWZmZXJfc2l6ZSA9IFRTX01JTl9CVUZTSVpFX0s7CisJZWxzZSBpZiAoZG1hX2J1ZmZlcl9zaXplID4gbWF4X2J1ZnNpemUpCisJCWRtYV9idWZmZXJfc2l6ZSA9IG1heF9idWZzaXplOworCisJYnVkZ2V0LT5idWZmZXJfaGVpZ2h0ID0gZG1hX2J1ZmZlcl9zaXplICogMTAyNCAvIGJ1ZGdldC0+YnVmZmVyX3dpZHRoOworCWJ1ZGdldC0+YnVmZmVyX2hlaWdodCAmPSBoZWlnaHRfbWFzazsKKwlidWRnZXQtPmJ1ZmZlcl9zaXplID0gYnVkZ2V0LT5idWZmZXJfaGVpZ2h0ICogYnVkZ2V0LT5idWZmZXJfd2lkdGg7CisJYnVkZ2V0LT5idWZmZXJfd2FybmluZ190aHJlc2hvbGQgPSBidWRnZXQtPmJ1ZmZlcl9zaXplICogODAvMTAwOworCWJ1ZGdldC0+YnVmZmVyX3dhcm5pbmdzID0gMDsKKwlidWRnZXQtPmJ1ZmZlcl93YXJuaW5nX3RpbWUgPSBqaWZmaWVzOworCisJZHByaW50aygyLCAiJXM6IHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLAorCQlidWRnZXQtPmRldi0+bmFtZSwgYnVkZ2V0LT5idWZmZXJfd2lkdGgsIGJ1ZGdldC0+YnVmZmVyX2hlaWdodCk7CisJcHJpbnRrKCIlczogZG1hIGJ1ZmZlciBzaXplICV1XG4iLCBidWRnZXQtPmRldi0+bmFtZSwgYnVkZ2V0LT5idWZmZXJfc2l6ZSk7CisKIAlkdmJfcmVnaXN0ZXJfYWRhcHRlcigmYnVkZ2V0LT5kdmJfYWRhcHRlciwgYnVkZ2V0LT5jYXJkLT5uYW1lLCBvd25lcik7CiAKIAkvKiBzZXQgZGQxIHN0cmVhbSBhICYgYiAqLwpAQCAtMzkyLDcgKzQ0MCw3IEBACiAJdHRwY2lfZWVwcm9tX3BhcnNlX21hYygmYnVkZ2V0LT5pMmNfYWRhcCwgYnVkZ2V0LT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMpOwogCiAJaWYgKE5VTEwgPT0KLQkgICAgKGJ1ZGdldC0+Z3JhYmJpbmcgPSBzYWE3MTQ2X3ZtYWxsb2NfYnVpbGRfcGd0YWJsZShkZXYtPnBjaSwgbGVuZ3RoLCAmYnVkZ2V0LT5wdCkpKSB7CisJICAgIChidWRnZXQtPmdyYWJiaW5nID0gc2FhNzE0Nl92bWFsbG9jX2J1aWxkX3BndGFibGUoZGV2LT5wY2ksIGJ1ZGdldC0+YnVmZmVyX3NpemUsICZidWRnZXQtPnB0KSkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwppbmRleCA5ZmM5MTg1Li4xYjNhYWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwpAQCAtNTc3LDIwICs1NzcsNiBAQAogCXNhYTcxNDZfc2V0Z3BpbyhkZXYsIDMsIFNBQTcxNDZfR1BJT19PVVRMTyk7CiAJLy8gU2V0IFJQUzEgQWRkcmVzcyByZWdpc3RlciB0byBwb2ludCB0byBSUFMgY29kZSAgICAgICAgICAgICAgIChyMTA4IHA0MikKIAlzYWE3MTQ2X3dyaXRlKGRldiwgUlBTX0FERFIxLCBkZXYtPmRfcnBzMS5kbWFfaGFuZGxlKTsKLQkvLyBTZXQgU291cmNlIExpbmUgQ291bnRlciBUaHJlc2hvbGQsIHVzaW5nIEJSUyAgICAgICAgICAgICAgICAgKHJDQyBwNDMpCi0JLy8gSXQgZ2VuZXJhdGVzIEhTIGV2ZW50IGV2ZXJ5IFRTX0hFSUdIVCBsaW5lcwotCS8vIHRoaXMgaXMgcmVsYXRlZCB0byBUU19XSURUSCBzZXQgaW4gcmVnaXN0ZXIKLQkvLyBOVU1fTElORV9CWVRFMyBpbiBidWRnZXQtY29yZS5jLiBJZiBOVU1fTElORV9CWVRFCi0JLy8gbG93IDE2IGJpdHMgYXJlIHNldCB0byBUU19XSURUSCBieXRlcyAoVFNfV0lEVEg9MioxODgKLQkvLyx0aGVuIFJQU19USFJFU0gxCi0JLy8gc2hvdWxkIGJlIHNldCB0byB0cmlnZ2VyIGV2ZXJ5IFRTX0hFSUdIVCAoNTEyKSBsaW5lcy4KLQkvLwotCXNhYTcxNDZfd3JpdGUoZGV2LCBSUFNfVEhSRVNIMSwgKFRTX0hFSUdIVCoxKSB8IE1BU0tfMTIgKTsKLQotCS8vIHNhYTcxNDZfd3JpdGUoZGV2LCBSUFNfVEhSRVNIMCwgKChUU19IRUlHSFQvMik8PDE2KSB8TUFTS18yOHwgKFRTX0hFSUdIVC8yKSB8TUFTS18xMiApOwotCS8vIEVuYWJsZSBSUFMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAockZDIHAzMykKLQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMxLCAoTUFTS18xMyB8IE1BU0tfMjkpKTsKLQogCiAJaWYgKCEoYnVkZ2V0ID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBidWRnZXRfcGF0Y2gpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjAyLDYgKzU4OCwyMCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8vIFNldCBTb3VyY2UgTGluZSBDb3VudGVyIFRocmVzaG9sZCwgdXNpbmcgQlJTICAgICAgICAgICAgICAgICAockNDIHA0MykKKwkvLyBJdCBnZW5lcmF0ZXMgSFMgZXZlbnQgZXZlcnkgVFNfSEVJR0hUIGxpbmVzCisJLy8gdGhpcyBpcyByZWxhdGVkIHRvIFRTX1dJRFRIIHNldCBpbiByZWdpc3RlcgorCS8vIE5VTV9MSU5FX0JZVEUzIGluIGJ1ZGdldC1jb3JlLmMuIElmIE5VTV9MSU5FX0JZVEUKKwkvLyBsb3cgMTYgYml0cyBhcmUgc2V0IHRvIFRTX1dJRFRIIGJ5dGVzIChUU19XSURUSD0yKjE4OAorCS8vLHRoZW4gUlBTX1RIUkVTSDEKKwkvLyBzaG91bGQgYmUgc2V0IHRvIHRyaWdnZXIgZXZlcnkgVFNfSEVJR0hUICg1MTIpIGxpbmVzLgorCS8vCisJc2FhNzE0Nl93cml0ZShkZXYsIFJQU19USFJFU0gxLCBidWRnZXQtPmJ1ZmZlcl9oZWlnaHQgfCBNQVNLXzEyICk7CisKKwkvLyBzYWE3MTQ2X3dyaXRlKGRldiwgUlBTX1RIUkVTSDAsICgoVFNfSEVJR0hULzIpPDwxNikgfE1BU0tfMjh8IChUU19IRUlHSFQvMikgfE1BU0tfMTIgKTsKKwkvLyBFbmFibGUgUlBTMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJGQyBwMzMpCisJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgKE1BU0tfMTMgfCBNQVNLXzI5KSk7CisKIAogCWRldi0+ZXh0X3ByaXYgPSBidWRnZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKaW5kZXggNGFjMGY0ZC4uZWNlYTNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKQEAgLTU4LDcgKzU4LDEzIEBACiAJaW50IGNpX3ByZXNlbnQ7CiAJaW50IHZpZGVvX3BvcnQ7CiAKLQl1OCB0c2Y7CisJdTMyIGJ1ZmZlcl93aWR0aDsKKwl1MzIgYnVmZmVyX2hlaWdodDsKKwl1MzIgYnVmZmVyX3NpemU7CisJdTMyIGJ1ZmZlcl93YXJuaW5nX3RocmVzaG9sZDsKKwl1MzIgYnVmZmVyX3dhcm5pbmdzOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3dhcm5pbmdfdGltZTsKKwogCXUzMiB0dGJwOwogCWludCBmZWVkaW5nOwogCkBAIC03OSwxMSArODUsNiBAQAogCS5leHRfcHJpdiA9ICZ4X3ZhciAjIyBfaW5mbywgXAogCS5leHQgPSAmYnVkZ2V0X2V4dGVuc2lvbiB9OwogCi0jZGVmaW5lIFRTX1dJRFRIICAoMzc2KQotI2RlZmluZSBUU19IRUlHSFQgKDUxMikKLSNkZWZpbmUgVFNfQlVGTEVOIChUU19XSURUSCpUU19IRUlHSFQpCi0jZGVmaW5lIFRTX01BWF9QQUNLRVRTIChUU19CVUZMRU4vVFNfU0laRSkKLQogI2RlZmluZSBCVURHRVRfVFQJCSAgIDAKICNkZWZpbmUgQlVER0VUX1RUX0hXX0RJU0VRQwkgICAxCiAjZGVmaW5lIEJVREdFVF9QQVRDSAkJICAgMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKaW5kZXggMjQ4ZmRjNy4uNmNlYWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCkBAIC0xNTA3LDcgKzE1MDcsMTEgQEAKIAogCW11dGV4X3VubG9jaygmdHR1c2ItPnNlbWkyYyk7CiAKLQlkdmJfcmVnaXN0ZXJfYWRhcHRlcigmdHR1c2ItPmFkYXB0ZXIsICJUZWNobm90cmVuZC9IYXVwcGF1Z2UgTm92YS1VU0IiLCBUSElTX01PRFVMRSk7CisJaWYgKChyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmdHR1c2ItPmFkYXB0ZXIsICJUZWNobm90cmVuZC9IYXVwcGF1Z2UgTm92YS1VU0IiLCBUSElTX01PRFVMRSkpIDwgMCkgeworCQl0dHVzYl9mcmVlX2lzb191cmJzKHR0dXNiKTsKKwkJa2ZyZWUodHR1c2IpOworCQlyZXR1cm4gcmVzdWx0OworCX0KIAl0dHVzYi0+YWRhcHRlci5wcml2ID0gdHR1c2I7CiAKIAkvKiBpMmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCBkMzE4YmUzLi4zZmZmNzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC03LDcgKzcsNyBAQAogCiBjb25maWcgUkFESU9fQ0FERVQKIAl0cmlzdGF0ZSAiQURTIENhZGV0IEFNL0ZNIFR1bmVyIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBBTS9GTSByYWRpbyBjYXJkcywgYW5kIHRoZW4KIAkgIGZpbGwgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTI1LDcgKzI1LDcgQEAKIAogY29uZmlnIFJBRElPX1JUUkFDSwogCXRyaXN0YXRlICJBSU1TbGFiIFJhZGlvVHJhY2sgKGFrYSBSYWRpb1JldmVhbCkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgRk0gcmFkaW8gY2FyZHMsIGFuZCB0aGVuIGZpbGwKIAkgIGluIHRoZSBwb3J0IGFkZHJlc3MgYmVsb3cuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBSQURJT19SVFJBQ0syCiAJdHJpc3RhdGUgIkFJTVNsYWIgUmFkaW9UcmFjayBJSSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIHRoaXMgRk0gcmFkaW8gY2FyZCwgYW5kIHRoZW4gZmlsbCBpbiB0aGUKIAkgIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTgyLDcgKzgyLDcgQEAKIAogY29uZmlnIFJBRElPX0FaVEVDSAogCXRyaXN0YXRlICJBenRlY2gvUGFja2FyZCBCZWxsIFJhZGlvIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcywgYW5kIHRoZW4gZmlsbAogCSAgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBjb25maWcgUkFESU9fR0VNVEVLCiAJdHJpc3RhdGUgIkdlbVRlayBSYWRpbyBDYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBGTSByYWRpbyBjYXJkLCBhbmQgdGhlbiBmaWxsIGluIHRoZQogCSAgcG9ydCBhZGRyZXNzIGJlbG93LgpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIGNvbmZpZyBSQURJT19HRU1URUtfUENJCiAJdHJpc3RhdGUgIkdlbVRlayBQQ0kgUmFkaW8gQ2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSQorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIHRoaXMgUENJIEZNIHJhZGlvIGNhcmQuCiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiBjb25maWcgUkFESU9fTUFYSVJBRElPCiAJdHJpc3RhdGUgIkd1aWxsZW1vdCBNQVhJIFJhZGlvIEZNIDIwMDAgcmFkaW8iCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyByYWRpbyBjYXJkLiAgVGhpcyBjYXJkIG1heSBhbHNvIGJlCiAJICBmb3VuZCBhcyBHZW10ZWsgUENJIEZNLgpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIGNvbmZpZyBSQURJT19NQUVTVFJPCiAJdHJpc3RhdGUgIk1hZXN0cm8gb24gYm9hcmQgcmFkaW8iCi0JZGVwZW5kcyBvbiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIHRvIGRpcmVjdGx5IHN1cHBvcnQgdGhlIG9uLWJvYXJkIHJhZGlvIHR1bmVyIG9uIHRoZQogCSAgTWFlc3RybyAyIG9yIDJFIHNvdW5kIGNhcmQuCkBAIC0xNzUsNyArMTc1LDcgQEAKIAogY29uZmlnIFJBRElPX01JUk9QQ00yMAogCXRyaXN0YXRlICJtaXJvU09VTkQgUENNMjAgcmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWICYmIFNPVU5EX0FDSV9NSVhFUgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEgJiYgU09VTkRfQUNJX01JWEVSCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGlzIEZNIHJhZGlvIGNhcmQuIFlvdSBhbHNvIG5lZWQgdG8gc2F5IFkKIAkgIHRvICJBQ0kgbWl4ZXIgKG1pcm9TT1VORCBQQ00xLXByby9QQ00xMi9QQ00yMCByYWRpbykiIChpbiAiU291bmQiKQpAQCAtMjA4LDcgKzIwOCw3IEBACiAKIGNvbmZpZyBSQURJT19TRjE2Rk1JCiAJdHJpc3RhdGUgIlNGMTZGTUkgUmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIEZNIHJhZGlvIGNhcmRzLiAgSWYgeW91CiAJICBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsIGFuZCB5b3VyIGNhcmQgaXMgbm90IFBuUCBvbmUsIHlvdQpAQCAtMjI1LDcgKzIyNSw3IEBACiAKIGNvbmZpZyBSQURJT19TRjE2Rk1SMgogCXRyaXN0YXRlICJTRjE2Rk1SMiBSYWRpbyIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgRk0gcmFkaW8gY2FyZHMuCiAKQEAgLTIzOSw3ICsyMzksNyBAQAogCiBjb25maWcgUkFESU9fVEVSUkFURUMKIAl0cmlzdGF0ZSAiVGVycmFUZWMgQWN0aXZlUmFkaW8gSVNBIFN0YW5kYWxvbmUiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBGTSByYWRpbyBjYXJkLCBhbmQgdGhlbiBmaWxsIGluIHRoZQogCSAgcG9ydCBhZGRyZXNzIGJlbG93LiAoVE9ETykKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiBjb25maWcgUkFESU9fVFJVU1QKIAl0cmlzdGF0ZSAiVHJ1c3QgRk0gcmFkaW8gY2FyZCIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFRydXN0IEZNIHJhZGlvIGNhcmRzLiBTYXkgWSBpZiB5b3UgaGF2ZQogCSAgc3VjaCBhIGNhcmQgYW5kIHdhbnQgdG8gdXNlIGl0IHVuZGVyIExpbnV4LgpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIGNvbmZpZyBSQURJT19UWVBIT09OCiAJdHJpc3RhdGUgIlR5cGhvb24gUmFkaW8gKGEuay5hLiBFY29SYWRpbykiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIEZNIHJhZGlvIGNhcmRzLCBhbmQgdGhlbiBmaWxsCiAJICBpbiB0aGUgcG9ydCBhZGRyZXNzIGFuZCB0aGUgZnJlcXVlbmN5IHVzZWQgZm9yIG11dGluZyBiZWxvdy4KQEAgLTMzMCw3ICszMzAsNyBAQAogCiBjb25maWcgUkFESU9fWk9MVFJJWAogCXRyaXN0YXRlICJab2x0cml4IFJhZGlvIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX0RFVgorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcywgYW5kIHRoZW4gZmlsbAogCSAgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCBmMzFhMTk4Li42YjQxOTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0yLDEwICsyLDEwIEBACiAjIE11bHRpbWVkaWEgVmlkZW8gZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiVmlkZW8gRm9yIExpbnV4IgorbWVudSAiVmlkZW8gQ2FwdHVyZSBBZGFwdGVycyIKIAlkZXBlbmRzIG9uIFZJREVPX0RFVgogCi1jb21tZW50ICJWaWRlbyBBZGFwdGVycyIKK2NvbW1lbnQgIlZpZGVvIENhcHR1cmUgQWRhcHRlcnMiCiAKIGNvbmZpZyBWSURFT19BRFZfREVCVUcKIAlib29sICJFbmFibGUgYWR2YW5jZWQgZGVidWcgZnVuY3Rpb25hbGl0eSIKQEAgLTE2LDExICsxNiwyMyBAQAogCSAgVjRMIGRldmljZXMuCiAJICBJbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBWSURFT19WSVZJCisJdHJpc3RhdGUgIlZpcnR1YWwgVmlkZW8gRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiAhU1BBUkMzMiAmJiAhU1BBUkM2NAorCXNlbGVjdCBWSURFT19CVUYKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBFbmFibGVzIGEgdmlydHVhbCB2aWRlbyBkcml2ZXIuIFRoaXMgZGV2aWNlIHNob3dzIGEgY29sb3IgYmFyCisJICBhbmQgYSB0aW1lc3RhbXAsIGFzIGEgcmVhbCBkZXZpY2Ugd291bGQgZ2VuZXJhdGUgYnkgdXNpbmcgVjRMMgorCSAgYXBpLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0ZXN0IHZpZGVvIGFwcHMgb3IgZGVidWcgVjRMIGRldmljZXMuCisJICBJbiBkb3VidCwgc2F5IE4uCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fU0FBNjU4OAogCXRyaXN0YXRlICJTQUE2NTg4IFJhZGlvIENoaXAgUkRTIGRlY29kZXIgc3VwcG9ydCBvbiBCVDg0OCBjYXJkcyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgVklERU9fQlQ4NDgKKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19CVDg0OAogCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgIFJhZGlvIERhdGEgU3lzdGVtIChSRFMpIGRlY29kZXIuIFRoaXMgYWxsb3dzIHNlZWluZwpAQCAtMzIsNyArNDQsNyBAQAogCiBjb25maWcgVklERU9fUE1TCiAJdHJpc3RhdGUgIk1lZGlhdmlzaW9uIFBybyBNb3ZpZSBTdHVkaW8gVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIElTQQorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgdGhpbmcuCiAKQEAgLTQxLDcgKzUzLDcgQEAKIAogY29uZmlnIFZJREVPX1BMQU5CCiAJdHJpc3RhdGUgIlBsYW5CIFZpZGVvLUluIG9uIFBvd2VyTWFjIgotCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgVklERU9fREVWICYmIEJST0tFTgorCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgVklERU9fVjRMMSAmJiBCUk9LRU4KIAloZWxwCiAJICBQbGFuQiBpcyB0aGUgVjRMIGRyaXZlciBmb3IgdGhlIFBvd2VyTWFjIDd4MDAvOHgwMCBzZXJpZXMgdmlkZW8KIAkgIGlucHV0IGhhcmR3YXJlLiBJZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGggdGhpcywgc2F5IFkuCkBAIC01Miw3ICs2NCw3IEBACiAKIGNvbmZpZyBWSURFT19CV1FDQU0KIAl0cmlzdGF0ZSAiUXVpY2tjYW0gQlcgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBBUlBPUlQKKwlkZXBlbmRzIG9uIFBBUlBPUlQgJiYgVklERU9fVjRMMQogCWhlbHAKIAkgIFNheSBZIGhhdmUgaWYgeW91IHRoZSBibGFjayBhbmQgd2hpdGUgdmVyc2lvbiBvZiB0aGUgUXVpY2tDYW0KIAkgIGNhbWVyYS4gU2VlIHRoZSBuZXh0IG9wdGlvbiBmb3IgdGhlIGNvbG9yIHZlcnNpb24uCkBAIC02Miw3ICs3NCw3IEBACiAKIGNvbmZpZyBWSURFT19DUUNBTQogCXRyaXN0YXRlICJRdWlja0NhbSBDb2xvdXIgVmlkZW8gRm9yIExpbnV4IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFZJREVPX0RFViAmJiBQQVJQT1JUCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUEFSUE9SVCAmJiBWSURFT19WNEwxCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgY29sb3VyIHZlcnNpb24gb2YgdGhlCiAJICBDb25uZWN0aXggUXVpY2tDYW0uICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgY2FtZXJhcywgc2F5IFkgaGVyZSwKQEAgLTczLDcgKzg1LDcgQEAKIAogY29uZmlnIFZJREVPX1c5OTY2CiAJdHJpc3RhdGUgIlc5OTY2Q0YgV2ViY2FtIChGbHlDYW0gU3VwcmEgYW5kIG90aGVycykgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gUEFSUE9SVF8xMjg0ICYmIFZJREVPX0RFViAmJiBQQVJQT1JUCisJZGVwZW5kcyBvbiBQQVJQT1JUXzEyODQgJiYgUEFSUE9SVCAmJiBWSURFT19WNEwxCiAJaGVscAogCSAgVmlkZW80bGludXggZHJpdmVyIGZvciBXaW5ib25kJ3Mgdzk5NjYgYmFzZWQgV2ViY2Ftcy4KIAkgIEN1cnJlbnRseSB0ZXN0ZWQgd2l0aCB0aGUgTGlmZVZpZXcgRmx5Q2FtIFN1cHJhLgpAQCAtODYsNyArOTgsNyBAQAogCiBjb25maWcgVklERU9fQ1BJQQogCXRyaXN0YXRlICJDUGlBIFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFVgorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgY2FtZXJhcyBiYXNlZCBvbiBWaXNpb24ncyBDUGlBCiAJICAoQ29sb3VyIFByb2Nlc3NvciBJbnRlcmZhY2UgQVNJQyksIHN1Y2ggYXMgdGhlIENyZWF0aXZlIExhYnMgVmlkZW8KQEAgLTEyMyw3ICsxMzUsNyBAQAogCiBjb25maWcgVklERU9fU0FBNTI0NkEKIAl0cmlzdGF0ZSAiU0FBNTI0NkEsIFNBQTUyODEgVGVsZXRleHQgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQworCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJMkMgYnVzIGJhc2VkIHRlbGV0ZXh0IHVzaW5nIHRoZSBTQUE1MjQ2QSBvciBTQUE1MjgxCiAJICBjaGlwLiBVc2VmdWwgb25seSBpZiB5b3UgbGl2ZSBpbiBFdXJvcGUuCkBAIC0xNTAsNyArMTYyLDcgQEAKIAogY29uZmlnIFZJREVPX1ZJTk8KIAl0cmlzdGF0ZSAiU0dJIFZpbm8gVmlkZW8gRm9yIExpbnV4IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBTR0lfSVAyMiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBTR0lfSVAyMiAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQogCXNlbGVjdCBJMkNfQUxHT19TR0kKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGJ1aWxkIGluIHN1cHBvcnQgZm9yIHRoZSBWaW5vIHZpZGVvIGlucHV0IHN5c3RlbSBmb3VuZApAQCAtMTU4LDcgKzE3MCw3IEBACiAKIGNvbmZpZyBWSURFT19TVFJBRElTCiAJdHJpc3RhdGUgIlN0cmFkaXMgNDoyOjIgTVBFRy0yIHZpZGVvIGRyaXZlciAgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgVklERU9fREVWICYmIFBDSQorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFBDSSAmJiBWSURFT19WNEwxICYmICFQUEM2NAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTdHJhZGlzIDQ6MjoyIE1QRUctMiB2aWRlbwogCSAgZHJpdmVyIGZvciBQQ0kuICBUaGVyZSBpcyBhIHByb2R1Y3QgcGFnZSBhdApAQCAtMTY2LDcgKzE3OCw3IEBACiAKIGNvbmZpZyBWSURFT19aT1JBTgogCXRyaXN0YXRlICJab3JhbiBaUjM2MDU3LzM2MDY3IFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDX0FMR09CSVQKKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwxICYmICFQUEM2NAogCWhlbHAKIAkgIFNheSBZIGZvciBzdXBwb3J0IGZvciBNSlBFRyBjYXB0dXJlIGNhcmRzIGJhc2VkIG9uIHRoZSBab3JhbgogCSAgMzYwNTcvMzYwNjcgUENJIGNvbnRyb2xsZXIgY2hpcHNldC4gVGhpcyBpbmNsdWRlcyB0aGUgSW9tZWdhCkBAIC0yMTQsNyArMjI2LDcgQEAKIAogY29uZmlnIFZJREVPX1pSMzYxMjAKIAl0cmlzdGF0ZSAiWm9yYW4gWlIzNjEyMC8zNjEyNSBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBCUk9LRU4KKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMSAmJiBCUk9LRU4KIAloZWxwCiAJICBTdXBwb3J0IGZvciBaUjM2MTIwL1pSMzYxMjUgYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4KIAkgIFRoaXMgaW5jbHVkZXMgdGhlIFZpY3RvciBJSSwgV2F2ZVdhdGNoZXIsIFZpZGVvIFdvbmRlciwgTWF4aS1UViwKQEAgLTIyNiw3ICsyMzgsNyBAQAogCiBjb25maWcgVklERU9fTUVZRQogCXRyaXN0YXRlICJTb255IFZhaW8gUGljdHVyZWJvb2sgTW90aW9uIEV5ZSBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIFNPTllQSQorCWRlcGVuZHMgb24gUENJICYmIFNPTllQSSAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgTW90aW9uIEV5ZSBjYW1lcmEgZm91bmQKIAkgIGluIHRoZSBWYWlvIFBpY3R1cmVib29rIGxhcHRvcHMuIFBsZWFzZSByZWFkIHRoZSBtYXRlcmlhbCBpbgpAQCAtMjQyLDcgKzI1NCw3IEBACiAKIGNvbmZpZyBWSURFT19NWEIKIAl0cmlzdGF0ZSAiU2llbWVucy1OaXhkb3JmICdNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCciCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJLS0taGVscC0tLQpAQCAtMjU0LDggKzI2Niw5IEBACiAKIGNvbmZpZyBWSURFT19EUEMKIAl0cmlzdGF0ZSAiUGhpbGlwcy1TZW1pY29uZHVjdG9ycyAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkJyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKKwlzZWxlY3QgVklERU9fVjRMMgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uCiAJICBib2FyZCcgYnkgUGhpbGlwcy1TZW1pY29uZHVjdG9ycy4gSXQncyB0aGUgcmVmZXJlbmNlIGRlc2lnbgpAQCAtMjY4LDggKzI4MSw5IEBACiAKIGNvbmZpZyBWSURFT19IRVhJVU1fT1JJT04KIAl0cmlzdGF0ZSAiSGV4aXVtIEhWLVBDSTYgYW5kIE9yaW9uIGZyYW1lIGdyYWJiZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCisJc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgSGV4aXVtIEhWLVBDSTYgYW5kCiAJICBPcmlvbiBmcmFtZSBncmFiYmVyIGNhcmRzIGJ5IEhleGl1bS4KQEAgLTI3OSw4ICsyOTMsOSBAQAogCiBjb25maWcgVklERU9fSEVYSVVNX0dFTUlOSQogCXRyaXN0YXRlICJIZXhpdW0gR2VtaW5pIGZyYW1lIGdyYWJiZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCisJc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgSGV4aXVtIEdlbWluaSBmcmFtZQogCSAgZ3JhYmJlciBjYXJkIGJ5IEhleGl1bS4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgR2VtaW5pIER1YWwKQEAgLTI5MywxOCArMzA4LDE4IEBACiAKIGNvbmZpZyBWSURFT19PVkNBTUNISVAKIAl0cmlzdGF0ZSAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQworCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgT21uaVZpc2lvbiBPVjZ4eHggYW5kIE9WN3h4eCBzZXJpZXMgb2YgY2FtZXJhIGNoaXBzLgogCSAgVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBvdjUxMSBhbmQgdzk5NjhjZiBVU0IKIAkgIGNhbWVyYSBkcml2ZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdmNhbWNoaXAKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdmNhbWNoaXAuCiAKIGNvbmZpZyBWSURFT19NMzJSX0FSCiAJdHJpc3RhdGUgIkFSIGRldmljZXMiCi0JZGVwZW5kcyBvbiBNMzJSCisJZGVwZW5kcyBvbiBNMzJSICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgUmVuZXNhcyBBUiAoQXJ0aWZpY2lhbCBSZXRpbmEpCiAJICBjYW1lcmEgbW9kdWxlLgpAQCAtMzE2LDYgKzMzMSwxMyBAQAogCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIFJlbmVzYXMgTTY0Mjc4RS04MDAgY2FtZXJhIG1vZHVsZSwKIAkgIHdoaWNoIHN1cHBvcnRzIFZHQSg2NDB4NDgwIHBpeGNlbHMpIHNpemUgb2YgaW1hZ2VzLgogCisjCisjIEVuY29kZXIgLyBEZWNvZGVyIG1vZHVsZSBjb25maWd1cmF0aW9uCisjCisKK21lbnUgIkVuY29kZXJzIGFuZCBEZWNvZGVycyIKKwlkZXBlbmRzIG9uIFZJREVPX0RFVgorCiBjb25maWcgVklERU9fTVNQMzQwMAogCXRyaXN0YXRlICJNaWNyb25hcyBNU1AzNHh4IGF1ZGlvIGRlY29kZXJzIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwpAQCAtMzIzLDcgKzM0NSw3IEBACiAJICBTdXBwb3J0IGZvciB0aGUgTWljcm9uYXMgTVNQMzR4eCBzZXJpZXMgb2YgYXVkaW8gZGVjb2RlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1zcDM0MDAKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtc3AzNDAwLgogCiBjb25maWcgVklERU9fQ1M1M0wzMkEKIAl0cmlzdGF0ZSAiQ2lycnVzIExvZ2ljIENTNTNMMzJBIGF1ZGlvIEFEQyIKQEAgLTMzMywzNyArMzU1LDcyIEBACiAJICBzdGVyZW8gQS9EIGNvbnZlcnRlci4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3M1M2wzMmEKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjczUzbDMyYS4KIAogY29uZmlnIFZJREVPX1dNODc3NQotCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004Nzc1IGF1ZGlvIEFEQyIKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODc3NSBhdWRpbyBBREMgd2l0aCBpbnB1dCBtaXhlciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg3NzUKLQkgIGhpZ2ggcGVyZm9ybWFuY2Ugc3RlcmVvIEEvRCBDb252ZXJ0ZXIuCisJICBTdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODc3NSBoaWdoCisJICBwZXJmb3JtYW5jZSBzdGVyZW8gQS9EIENvbnZlcnRlciB3aXRoIGEgNCBjaGFubmVsIGlucHV0IG1peGVyLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3bTg3NzUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3bTg3NzUuCisKK2NvbmZpZyBWSURFT19XTTg3MzkKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODczOSBzdGVyZW8gYXVkaW8gQURDIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODczOQorCSAgc3RlcmVvIEEvRCBDb252ZXJ0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODczOS4KIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvS2NvbmZpZyIKIAogY29uZmlnIFZJREVPX1NBQTcxMVgKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMy80LzUgdmlkZW8gZGVjb2RlcnMgKE9CU09MRVRFRCkiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycy4KKwkgIE9sZCBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEzLzQgdmlkZW8gZGVjb2RlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTE1LgogCiBjb25maWcgVklERU9fU0FBNzEyNwogCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTI3CisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzEyNy4KKworY29uZmlnIFZJREVPX1VQRDY0MDMxQQorCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbgorCSAgdmlkZW8gY2hpcC4gSXQgaXMgbW9zdCBvZnRlbiBmb3VuZCBpbiBOVFNDIFRWIGNhcmRzIG1hZGUgZm9yCisJICBKYXBhbiBhbmQgaXMgdXNlZCB0byByZWR1Y2UgdGhlICdnaG9zdGluZycgZWZmZWN0IHRoYXQgY2FuCisJICBiZSBwcmVzZW50IGluIGFuYWxvZyBUViBicm9hZGNhc3RzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1cGQ2NDAzMWEuCisKK2NvbmZpZyBWSURFT19VUEQ2NDA4MworCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0MKKwkgIHNlcGFyYXRpb24gdmlkZW8gY2hpcC4gSXQgaXMgdXNlZCB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mCisJICB0aGUgY29sb3JzIG9mIGEgY29tcG9zaXRlIHNpZ25hbC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXBkNjQwODMuCisKK2VuZG1lbnUgIyBlbmNvZGVyIC8gZGVjb2RlciBjaGlwcwogCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCkBAIC0zNzQsMTU3ICs0MzEsNjIgQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgogCi1jb25maWcgVVNCX1ZJQ0FNCi0JdHJpc3RhdGUgIlVTQiAzY29tIEhvbWVDb25uZWN0IChha2EgdmljYW0pIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgM2NvbSBob21lY29ubmVjdCBjYW1lcmEgKHZpY2FtKS4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpY2FtLgotCiBjb25maWcgVVNCX0RTQlIKIAl0cmlzdGF0ZSAiRC1MaW5rIFVTQiBGTSByYWRpbyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgcmFkaW8gdG8geW91cgogCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gTm90ZSB0aGF0IHRoZSBhdWRpbyBpcyBub3QgZGlnaXRhbCwgYW5kCiAJICB5b3UgbXVzdCBjb25uZWN0IHRoZSBsaW5lIG91dCBjb25uZWN0b3IgdG8gYSBzb3VuZCBjYXJkIG9yIGEKIAkgIHNldCBvZiBzcGVha2Vycy4KIAotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQotCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCi0JICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KLQkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRzYnIxMDAuCiAKLWNvbmZpZyBVU0JfRVQ2MVgyNTEKLQl0cmlzdGF0ZSAiVVNCIEVUNjFYWzEyXTUxIFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIEV0b21zIEVUNjFYMTUxCi0JICBvciBFVDYxWDI1MSBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZyIKIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2V0NjF4MjUxLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCi0JICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV0NjF4MjUxLgotCi1jb25maWcgVVNCX0lCTUNBTQotCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCi0JICAiWGlybGluayBQQyBDYW1lcmEiIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIEZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0Pi4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQotCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCi0JICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KLQkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlibWNhbS4KLQotCSAgVGhpcyBjYW1lcmEgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoCi0JICBjYW4gYmUgc3BlY2lmaWVkIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZS4gUmVhZAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dD4gdG8gbGVhcm4gbW9yZS4KLQotY29uZmlnIFVTQl9LT05JQ0FXQwotCXRyaXN0YXRlICJVU0IgS29uaWNhIFdlYmNhbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3Igd2ViY2FtcyBiYXNlZCBvbiBhIEtvbmljYQotCSAgY2hpcHNldC4gVGhpcyBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIEludGVsIFlDNzYgd2ViY2FtLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCi0JICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKLQkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bwotCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0Ci0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29uaWNhd2MuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZyIKIAogY29uZmlnIFVTQl9PVjUxMQogCXRyaXN0YXRlICJVU0IgT1Y1MTEgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCi0JICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCi0JICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L292NTExLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdjUxMS4KIAogY29uZmlnIFVTQl9TRTQwMQogCXRyaXN0YXRlICJVU0IgU0U0MDEgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zZTQwMS50eHQ+CisJICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2U0MDEuCiAKLWNvbmZpZyBVU0JfU045QzEwMgotCXRyaXN0YXRlICJVU0IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBTT05pWCBTTjlDMTAxLAotCSAgU045QzEwMiBvciBTTjlDMTAzIFBDIENhbWVyYSBDb250cm9sbGVycy4KLQotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc245YzEwMi4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWciCiAKIGNvbmZpZyBVU0JfU1RWNjgwCiAJdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaW5jbHVkZXMgdGhlIFBlbmNhbSBsaW5lIG9mIGNhbWVyYXMuCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGZvcgotCSAgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCi0JICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgTXVsdGltZWRpYSBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCi0JICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCi0JICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3N0djY4MC50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uCisJICBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3R2NjgwLgogCiBjb25maWcgVVNCX1c5OTY4Q0YKIAl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxICYmIEkyQworCXNlbGVjdCBWSURFT19PVkNBTUNISVAKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gT1Y2ODEgb3IKIAkgIFdpbmJvbmQgVzk5NjdDRi9XOTk2OENGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcHMuCkBAIC01MzQsNjQgKzQ5NiwxNCBAQAogCSAgcmVzb2x1dGlvbnMgYW5kIGZyYW1lcmF0ZXMsIGJ1dCBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG9mZmljaWFsCiAJICBMaW51eCBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2VzLgogCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IGFuZCB0aGUgSTJDIEFQSXMuIEl0IG5lZWRzIHRoZQotCSAgT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IGFzIHdlbGwuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiLCAiSTJDIFN1cHBvcnQiIGFuZCAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcAotCSAgc3VwcG9ydCIgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjhjZi50eHQ+IGZvciBtb3JlIGluZm8uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHc5OTY4Y2YuCiAKLWNvbmZpZyBVU0JfWkMwMzAxCi0JdHJpc3RhdGUgIlVTQiBaQzAzMDEgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFpDMDMwMQotCSAgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWciCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi96YzAzMDEudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemMwMzAxLgotCi1jb25maWcgVVNCX1BXQwotCXRyaXN0YXRlICJVU0IgUGhpbGlwcyBDYW1lcmFzIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZXNlIFBoaWxpcHMgJiBPRU0KLQkgIHdlYmNhbXM6Ci0JICAgKiBQaGlsaXBzIFBDQTY0NSwgUENBNjQ2Ci0JICAgKiBQaGlsaXBzIFBDVkM2NzUsIFBDVkM2ODAsIFBDVkM2OTAKLQkgICAqIFBoaWxpcHMgUENWQzcyMC80MCwgUENWQzczMCwgUENWQzc0MCwgUENWQzc1MAotCSAgICogQXNrZXkgVkMwMTAKLQkgICAqIExvZ2l0ZWNoIFF1aWNrQ2FtIFBybyAzMDAwLCA0MDAwLCAnWm9vbScsICdOb3RlYm9vayBQcm8nCi0JICAgICBhbmQgJ09yYml0Jy8nU3BoZXJlJwotCSAgICogU2Ftc3VuZyBNUEMtQzEwLCBNUEMtQzMwCi0JICAgKiBDcmVhdGl2ZSBXZWJjYW0gNSwgUHJvIEV4Ci0JICAgKiBTT1RFQyBBZmluYSBFeWUKLQkgICAqIFZpc2lvbml0ZSBWQ1MtVUMzMDAsIFZDUy1VTTEwMAotCi0JICBUaGUgUENBNjM1LCBQQ1ZDNjY1IGFuZCBQQ1ZDNzIwLzIwIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCi0JICBhbmQgbmV2ZXIgd2lsbCBiZSwgYnV0IHRoZSA2NjUgYW5kIDcyMC8yMCBhcmUgc3VwcG9ydGVkIGJ5IG90aGVyCi0JICBkcml2ZXJzLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcGhpbGlwcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAotCSAgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KLQotCSAgVGhlIGJ1aWx0LWluIG1pY3JvcGhvbmUgaXMgZW5hYmxlZCBieSBzZWxlY3RpbmcgVVNCIEF1ZGlvIHN1cHBvcnQuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB3Yy4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZyIKIAogZW5kbWVudSAjIFY0TCBVU0IgZGV2aWNlcwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCAxYzBlNzJlLi5lNWJmMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDExIEBACiAKIG1zcDM0MDAtb2Jqcwk6PQltc3AzNDAwLWRyaXZlci5vIG1zcDM0MDAta3RocmVhZHMubwogCi1vYmotJChDT05GSUdfVklERU9fREVWKSArPSB2aWRlb2Rldi5vIHY0bDItY29tbW9uLm8gdjRsMS1jb21wYXQubyBjb21wYXRfaW9jdGwzMi5vCitvYmotJChDT05GSUdfVklERU9fREVWKSArPSB2aWRlb2Rldi5vIHY0bDItY29tbW9uLm8gY29tcGF0X2lvY3RsMzIubworCitpZmVxICgkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkseSkKKyAgb2JqLSQoQ09ORklHX1ZJREVPX0RFVikgKz0gdjRsMS1jb21wYXQubworZW5kaWYKIAogb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSBidDh4eC8KIG9iai0kKENPTkZJR19WSURFT19CVDg0OCkgKz0gdHZhdWRpby5vIHRkYTc0MzIubyB0ZGE5ODc1Lm8gaXIta2JkLWkyYy5vCkBAIC00NSw2ICs0OSw3IEBACiBvYmotJChDT05GSUdfVklERU9fTVNQMzQwMCkgKz0gbXNwMzQwMC5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1M0wzMkEpICs9IGNzNTNsMzJhLm8KIG9iai0kKENPTkZJR19WSURFT19XTTg3NzUpICs9IHdtODc3NS5vCitvYmotJChDT05GSUdfVklERU9fV004NzM5KSArPSB3bTg3Mzkubwogb2JqLSQoQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCkgKz0gb3ZjYW1jaGlwLwogb2JqLSQoQ09ORklHX1ZJREVPX0NQSUEyKSArPSBjcGlhMi8KIG9iai0kKENPTkZJR19WSURFT19NWEIpICs9IHNhYTcxMTEubyB0ZGE5ODQwLm8gdGVhNjQxNWMubyB0ZWE2NDIwLm8gbXhiLm8KQEAgLTY0LDkgKzY5LDggQEAKIG9iai0kKENPTkZJR19WSURFT19DWDI1ODQwKSArPSBjeDI1ODQwLwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMVgpICs9IHNhYTcxMTUubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMjcpICs9IHNhYTcxMjcubwotCi1ldDYxeDI1MS1vYmpzICAgOj0gZXQ2MXgyNTFfY29yZS5vIGV0NjF4MjUxX3RhczUxMzBkMWIubwotemMwMzAxLW9ianMgICAgIDo9IHpjMDMwMV9jb3JlLm8gemMwMzAxX3BhczIwMmJjYi5vCitvYmotJChDT05GSUdfVklERU9fVVBENjQwMzFBKSArPSB1cGQ2NDAzMWEubworb2JqLSQoQ09ORklHX1ZJREVPX1VQRDY0MDgzKSArPSB1cGQ2NDA4My5vCiAKIG9iai0kKENPTkZJR19VU0JfREFCVVNCKSAgICAgICAgKz0gZGFidXNiLm8KIG9iai0kKENPTkZJR19VU0JfRFNCUikgICAgICAgICAgKz0gZHNicjEwMC5vCkBAIC04NCw0ICs4OCw4IEBACiBvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB1c2J2aWRlby8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorb2JqLSQoQ09ORklHX1ZJREVPX1ZJVkkpICs9IHZpdmkubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKSArPSAtRENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggMDg1NDc3Yy4uMTUzZjZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19CVDg0OAogCXRyaXN0YXRlICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMgogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgVklERU9fQlRDWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUKaW5kZXggOTQzNTBmMi4uYTA5NmEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L01ha2VmaWxlCkBAIC04LDUgKzgsNSBAQAogCiBvYmotJChDT05GSUdfVklERU9fQlQ4NDgpICs9IGJ0dHYubwogCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IGYyMDlhNzQuLjJiNjRhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC0yOTkxLDEzICsyOTkxLDEzIEBACiAKIAlpZiAoVU5TRVQgIT0gYXVkaW9tdXhbMF0pIHsKIAkJZ3Bpb2JpdHMgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtpXSA9IGF1ZGlvbXV4W2ldOwogCQkJZ3Bpb2JpdHMgfD0gYXVkaW9tdXhbaV07CiAJCX0KIAl9IGVsc2UgewogCQlncGlvYml0cyA9IGF1ZGlvYWxsOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtpXSA9IGF1ZGlvYWxsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDc0ZGVmOWMuLjQyM2U5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTk3MywxMiArOTczLDEyIEBACiAJCSAgIEZvciBub3cgdGhpcyBpcyBzdWZmaWNpZW50LiAqLwogCQlzd2l0Y2ggKGlucHV0KSB7CiAJCWNhc2UgVFZBVURJT19JTlBVVF9SQURJTzoKLQkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVF8yLCBNU1BfSU5fVFVORVJfMSwKLQkJCQkgICAgTVNQX0RTUF9PVVRfU0NBUlQsIE1TUF9EU1BfT1VUX1NDQVJUKTsKKwkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVDIsIE1TUF9JTl9UVU5FUjEsCisJCQkJICAgIE1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVFZBVURJT19JTlBVVF9FWFRFUk46Ci0JCQlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMSwgTVNQX0lOX1RVTkVSXzEsCi0JCQkJICAgIE1TUF9EU1BfT1VUX1NDQVJULCBNU1BfRFNQX09VVF9TQ0FSVCk7CisJCQlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVChNU1BfSU5fU0NBUlQxLCBNU1BfSU5fVFVORVIxLAorCQkJCSAgICBNU1BfRFNQX0lOX1NDQVJULCBNU1BfRFNQX0lOX1NDQVJUKTsKIAkJCWJyZWFrOwogCQljYXNlIFRWQVVESU9fSU5QVVRfSU5URVJOOgogCQkJLyogWWVzLCB0aGlzIGlzIHRoZSBzYW1lIGlucHV0IGFzIGZvciBSQURJTy4gSSBkb3VidApAQCAtOTg2LDggKzk4Niw4IEBACiAJCQkgICBpbnB1dCBpcyB0aGUgQlRUVl9CT0FSRF9BVkVSTUVESUE5OC4gSSB3b25kZXIgaG93CiAJCQkgICB0aGF0IHdhcyB0ZXN0ZWQuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHdob2xlIElOVEVSTgogCQkJICAgaW5wdXQgZG9lcyBub3Qgd29yay4gKi8KLQkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVF8yLCBNU1BfSU5fVFVORVJfMSwKLQkJCQkgICAgTVNQX0RTUF9PVVRfU0NBUlQsIE1TUF9EU1BfT1VUX1NDQVJUKTsKKwkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVDIsIE1TUF9JTl9UVU5FUjEsCisJCQkJICAgIE1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVFZBVURJT19JTlBVVF9UVU5FUjoKIAkJZGVmYXVsdDoKQEAgLTEwMjMsMTQgKzEwMjMsMTEgQEAKIHN0YXRpYyB2b2lkCiBpMmNfdmlkaW9jc2NoYW4oc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjOworCXY0bDJfc3RkX2lkIHN0ZCA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0udjRsMl9pZDsKIAotCW1lbXNldCgmYywwLHNpemVvZihjKSk7Ci0JYy5ub3JtICAgID0gYnR2LT50dm5vcm07Ci0JYy5jaGFubmVsID0gYnR2LT5pbnB1dDsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LFZJRElPQ1NDSEFOLCZjKTsKKwlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19TVEQsICZzdGQpOwogCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNKQotCQlidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsYy5ub3JtKTsKKwkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LGJ0di0+dHZub3JtKTsKIH0KIAogc3RhdGljIGludApAQCAtMTE4NCwxMSArMTE4MSwyNyBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPT0gQlRUVl9DVExTKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSA+PSA0ICYmIGkgPD0gOCkgeworCWlmIChidHYtPmF1ZGlvX2hvb2sgJiYgaSA+PSA0ICYmIGkgPD0gOCkgewogCQltZW1zZXQoJnZhLDAsc2l6ZW9mKHZhKSk7Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKLQkJaWYgKGJ0di0+YXVkaW9faG9vaykKLQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOworCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwwKTsKKwkJc3dpdGNoIChjLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQljLT52YWx1ZSA9IChWSURFT19BVURJT19NVVRFICYgdmEuZmxhZ3MpID8gMSA6IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQljLT52YWx1ZSA9IHZhLnZvbHVtZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCQljLT52YWx1ZSA9IHZhLmJhbGFuY2U7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQkJYy0+dmFsdWUgPSB2YS5iYXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQkJYy0+dmFsdWUgPSB2YS50cmVibGU7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKIAl9CiAJc3dpdGNoIChjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKQEAgLTEyMDUsMTkgKzEyMTgsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWMtPnZhbHVlID0gKFZJREVPX0FVRElPX01VVEUgJiB2YS5mbGFncykgPyAxIDogMDsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWMtPnZhbHVlID0gdmEudm9sdW1lOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWMtPnZhbHVlID0gdmEuYmFsYW5jZTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljLT52YWx1ZSA9IHZhLmJhc3M7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQljLT52YWx1ZSA9IHZhLnRyZWJsZTsKKwkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixWSURJT0NfR19DVFJMLGMpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfUFJJVkFURV9DSFJPTUFfQUdDOgpAQCAtMTI2OSwxMSArMTI3NCwzNSBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPT0gQlRUVl9DVExTKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaSA+PSA0ICYmIGkgPD0gOCkgeworCWlmIChidHYtPmF1ZGlvX2hvb2sgJiYgaSA+PSA0ICYmIGkgPD0gOCkgewogCQltZW1zZXQoJnZhLDAsc2l6ZW9mKHZhKSk7Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKLQkJaWYgKGJ0di0+YXVkaW9faG9vaykKLQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOworCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwwKTsKKwkJc3dpdGNoIChjLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQlpZiAoYy0+dmFsdWUpIHsKKwkJCQl2YS5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOworCQkJCWF1ZGlvX211dGUoYnR2LCAxKTsKKwkJCX0gZWxzZSB7CisJCQkJdmEuZmxhZ3MgJj0gflZJREVPX0FVRElPX01VVEU7CisJCQkJYXVkaW9fbXV0ZShidHYsIDApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQl2YS52b2x1bWUgPSBjLT52YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCQl2YS5iYWxhbmNlID0gYy0+dmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQkJdmEuYmFzcyA9IGMtPnZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQkJdmEudHJlYmxlID0gYy0+dmFsdWU7CisJCQlicmVhazsKKwkJfQorCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwxKTsKKwkJcmV0dXJuIDA7CiAJfQogCXN3aXRjaCAoYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC0xMjg5LDI2ICsxMzE4LDEzIEBACiAJCWJ0ODQ4X3NhdChidHYsYy0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWlmIChjLT52YWx1ZSkgewotCQkJdmEuZmxhZ3MgfD0gVklERU9fQVVESU9fTVVURTsKLQkJCWF1ZGlvX211dGUoYnR2LCAxKTsKLQkJfSBlbHNlIHsKLQkJCXZhLmZsYWdzICY9IH5WSURFT19BVURJT19NVVRFOwotCQkJYXVkaW9fbXV0ZShidHYsIDApOwotCQl9Ci0JCWJyZWFrOwotCisJCWF1ZGlvX211dGUoYnR2LCBjLT52YWx1ZSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQl2YS52b2x1bWUgPSBjLT52YWx1ZTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQl2YS5iYWxhbmNlID0gYy0+dmFsdWU7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJdmEuYmFzcyA9IGMtPnZhbHVlOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJdmEudHJlYmxlID0gYy0+dmFsdWU7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DX1NfQ1RSTCxjKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ0hST01BX0FHQzoKQEAgLTEzNjQsMTEgKzEzODAsNiBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoaSA+PSA0ICYmIGkgPD0gOCkgewotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NTQVVESU8sICZ2YSk7Ci0JCWlmIChidHYtPmF1ZGlvX2hvb2spCi0JCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwxKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OTEsMTIgKzE2MDIsMTYgQEAKIAl9CiAJY2FzZSBWSURJT0NTRlJFUToKIAl7Ci0JCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmcmVxOworCisJCW1lbXNldCgmZnJlcSwgMCwgc2l6ZW9mKGZyZXEpKTsKKwkJZnJlcS5mcmVxdWVuY3kgPSAqKHVuc2lnbmVkIGxvbmcgKilhcmc7CiAJCW11dGV4X2xvY2soJmJ0di0+bG9jayk7Ci0JCWJ0di0+ZnJlcT0qZnJlcTsKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixWSURJT0NTRlJFUSxmcmVxKTsKKwkJZnJlcS50eXBlID0gYnR2LT5yYWRpb191c2VyID8gVjRMMl9UVU5FUl9SQURJTyA6IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQlidHYtPmZyZXEgPSAqKHVuc2lnbmVkIGxvbmcgKilhcmc7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DX1NfRlJFUVVFTkNZLCZmcmVxKTsKIAkJaWYgKGJ0di0+aGFzX21hdGNoYm94ICYmIGJ0di0+cmFkaW9fdXNlcikKLQkJCXRlYTU3NTdfc2V0X2ZyZXEoYnR2LCpmcmVxKTsKKwkJCXRlYTU3NTdfc2V0X2ZyZXEoYnR2LCoodW5zaWduZWQgbG9uZyAqKWFyZyk7CiAJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTgyNywzMyArMTg0MiwyNiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CiAJCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSh0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwotCQl0LT50eXBlICAgICAgID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOwogCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfVFVORVIsIHQpOworCQlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CisJCXQtPnR5cGUgICAgICAgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAkJaWYgKGJ0cmVhZChCVDg0OF9EU1RBVFVTKSZCVDg0OF9EU1RBVFVTX0hMT0MpCiAJCQl0LT5zaWduYWwgPSAweGZmZmY7Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB0dW5lcjsKIAotCQkJbWVtc2V0KCZ0dW5lciwgMCwgc2l6ZW9mICh0dW5lcikpOwotCQkJdHVuZXIucmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwotCQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DR1RVTkVSLCAmdHVuZXIpOwotCQkJdC0+cmFuZ2Vsb3cgPSB0dW5lci5yYW5nZWxvdzsKLQkJCXQtPnJhbmdlaGlnaCA9IHR1bmVyLnJhbmdlaGlnaDsKLQkJfQotCQl7CisJCWlmIChidHYtPmF1ZGlvX2hvb2spIHsKIAkJCS8qIEhtbW0gLi4uICovCiAJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdmE7CiAJCQltZW1zZXQoJnZhLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2F1ZGlvKSk7Ci0JCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NHQVVESU8sICZ2YSk7Ci0JCQlpZiAoYnR2LT5hdWRpb19ob29rKQotCQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOworCQkJYnR2LT5hdWRpb19ob29rKGJ0diwmdmEsMCk7CisJCQl0LT5hdWRtb2RlICAgID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJCWlmKHZhLm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIHsKLQkJCQl0LT5hdWRtb2RlICAgICA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCQkJdC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQkJdC0+YXVkbW9kZSAgICA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJCX0KLQkJCWlmKHZhLm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkgeworCQkJaWYodmEubW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKSB7CiAJCQkJdC0+YXVkbW9kZSAgICA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKIAkJCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEKIAkJCQkJfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKQEAgLTE4NzIsMTAgKzE4ODAsMTAgQEAKIAkJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKLQkJeworCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19UVU5FUiwgdCk7CisJCWlmIChidHYtPmF1ZGlvX2hvb2spIHsKIAkJCXN0cnVjdCB2aWRlb19hdWRpbyB2YTsKIAkJCW1lbXNldCgmdmEsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYXVkaW8pKTsKLQkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKIAkJCWlmICh0LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9NT05PKQogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9NT05POwogCQkJZWxzZSBpZiAodC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHx8CkBAIC0xODg1LDkgKzE4OTMsNyBAQAogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9MQU5HMTsKIAkJCWVsc2UgaWYgKHQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcyKQogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9MQU5HMjsKLQkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ1NBVURJTywgJnZhKTsKLQkJCWlmIChidHYtPmF1ZGlvX2hvb2spCi0JCQkJYnR2LT5hdWRpb19ob29rKGJ0diwmdmEsMSk7CisJCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwxKTsKIAkJfQogCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCXJldHVybiAwOwpAQCAtMTkxMiw3ICsxOTE4LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQltdXRleF9sb2NrKCZidHYtPmxvY2spOwogCQlidHYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DU0ZSRVEsJmJ0di0+ZnJlcSk7CisJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsVklESU9DX1NfRlJFUVVFTkNZLGYpOwogCQlpZiAoYnR2LT5oYXNfbWF0Y2hib3ggJiYgYnR2LT5yYWRpb191c2VyKQogCQkJdGVhNTc1N19zZXRfZnJlcShidHYsYnR2LT5mcmVxKTsKIAkJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwpAQCAtMTkyMCw3ICsxOTI2LDkgQEAKIAl9CiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKIAl7CisJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIGJ0di0+Yy5uciwgYnR2LT5jLm5yKTsKIAkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6ID09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBidHYtPmMubnIsIGJ0di0+Yy5ucik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjg3MCwxMiArMjg3OCwxMCBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJKmMgPSBidHR2X2N0bHNbaV07Ci0JCWlmIChpID49IDQgJiYgaSA8PSA4KSB7CisJCWlmIChidHYtPmF1ZGlvX2hvb2sgJiYgaSA+PSA0ICYmIGkgPD0gOCkgewogCQkJc3RydWN0IHZpZGVvX2F1ZGlvIHZhOwogCQkJbWVtc2V0KCZ2YSwwLHNpemVvZih2YSkpOwotCQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DR0FVRElPLCAmdmEpOwotCQkJaWYgKGJ0di0+YXVkaW9faG9vaykKLQkJCQlidHYtPmF1ZGlvX2hvb2soYnR2LCZ2YSwwKTsKKwkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDApOwogCQkJc3dpdGNoIChidHR2X2N0bHNbaV0uaWQpIHsKIAkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQkJCWlmICghKHZhLmZsYWdzICYgVklERU9fQVVESU9fVk9MVU1FKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCmluZGV4IDE2MzIzYTUuLmFmY2ZlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCSAgY29uc3Qgc3RydWN0IGJ0dHZfZm9ybWF0ICpmbXQsIHN0cnVjdCBidHR2X292ZXJsYXkgKm92LAogCQkgIGludCBza2lwX2V2ZW4sIGludCBza2lwX29kZCkKIHsKLQlpbnQgaW5zdHJ1Y3Rpb25zLHJjLGxpbmUsbWF4eSxzdGFydCxlbmQsc2tpcCxuc2tpcHM7CisJaW50IGR3b3JkcyxyYyxsaW5lLG1heHksc3RhcnQsZW5kLHNraXAsbnNraXBzOwogCXN0cnVjdCBidGN4X3NraXBsaXN0ICpza2lwczsKIAl1MzIgKnJwLHJpLHJhOwogCXUzMiBhZGRyOwpAQCAtMjQyLDEyICsyNDIsMTIgQEAKIAlpZiAoTlVMTCA9PSAoc2tpcHMgPSBrbWFsbG9jKHNpemVvZigqc2tpcHMpICogb3YtPm5jbGlwcyxHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogZXN0aW1hdGUgcmlzYyBtZW06IHdvcnN0IGNhc2UgaXMgKGNsaXArMSkgKiBsaW5lcyBpbnN0cnVjdGlvbnMKKwkvKiBlc3RpbWF0ZSByaXNjIG1lbTogd29yc3QgY2FzZSBpcyAoMS41KmNsaXArMSkgKiBsaW5lcyBpbnN0cnVjdGlvbnMKIAkgICArIHN5bmMgKyBqdW1wIChhbGwgMiBkd29yZHMpICovCi0JaW5zdHJ1Y3Rpb25zICA9IChvdi0+bmNsaXBzICsgMSkgKgotCQkoKHNraXBfZXZlbiB8fCBza2lwX29kZCkgPyBvdi0+dy5oZWlnaHQ+PjEgOiAgb3YtPncuaGVpZ2h0KTsKLQlpbnN0cnVjdGlvbnMgKz0gMjsKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKGJ0di0+Yy5wY2kscmlzYyxpbnN0cnVjdGlvbnMqOCkpIDwgMCkgeworCWR3b3JkcyAgPSAoMyAqIG92LT5uY2xpcHMgKyAyKSAqCisJCSgoc2tpcF9ldmVuIHx8IHNraXBfb2RkKSA/IChvdi0+dy5oZWlnaHQrMSk+PjEgOiAgb3YtPncuaGVpZ2h0KTsKKwlkd29yZHMgKz0gNDsKKwlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKGJ0di0+Yy5wY2kscmlzYyxkd29yZHMqNCkpIDwgMCkgewogCQlrZnJlZShza2lwcyk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0yNzYsOCArMjc2LDYgQEAKIAkJaWYgKGxpbmUgPiBtYXh5KQogCQkJYnRjeF9jYWxjX3NraXBzKGxpbmUsIG92LT53LndpZHRoLCAmbWF4eSwKIAkJCQkJc2tpcHMsICZuc2tpcHMsIG92LT5jbGlwcywgb3YtPm5jbGlwcyk7Ci0JCWVsc2UKLQkJCW5za2lwcyA9IDA7CiAKIAkJLyogd3JpdGUgb3V0IHJpc2MgY29kZSAqLwogCQlmb3IgKHN0YXJ0ID0gMCwgc2tpcCA9IDA7IHN0YXJ0IDwgb3YtPncud2lkdGg7IHN0YXJ0ID0gZW5kKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKaW5kZXggZTIwZmYyMy4uOGM5ZjBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCS0gdHZub3JtLT52YmlzdGFydFswXTsKIAljb3VudDEgPSAoczY0KSBmLT5mbXQudmJpLnN0YXJ0WzFdICsgZi0+Zm10LnZiaS5jb3VudFsxXQogCQktIHR2bm9ybS0+dmJpc3RhcnRbMV07Ci0JY291bnQgID0gY2xhbXAgKG1heCAoY291bnQwLCBjb3VudDEpLCAxTEwsIChzNjQpIFZCSV9NQVhMSU5FUyk7CisJY291bnQgID0gY2xhbXAgKG1heCAoY291bnQwLCBjb3VudDEpLCAoczY0KSAxLCAoczY0KSBWQklfTUFYTElORVMpOwogCiAJZi0+Zm10LnZiaS5zdGFydFswXSA9IHR2bm9ybS0+dmJpc3RhcnRbMF07CiAJZi0+Zm10LnZiaS5zdGFydFsxXSA9IHR2bm9ybS0+dmJpc3RhcnRbMV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IDIyMjdjNTYuLjg1ZDg0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCkBAIC02NCwxNCArNjQsMTMgQEAKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ2aWRlbyIpOwogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjb2xvcnNwYWNlX2NvbnYgPSAwOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbG9yc3BhY2VfY29udjsKIG1vZHVsZV9wYXJhbShjb2xvcnNwYWNlX2NvbnYsIHVzaG9ydCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNvbG9yc3BhY2VfY29udiwKLQkJICJcbjxuPiBDb2xvcnNwYWNlIGNvbnZlcnNpb246IgotCQkgIlxuMCA9IGRpc2FibGUiCi0JCSAiXG4xID0gZW5hYmxlIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAwIgotCQkgIlxuIik7CisgICAgICAgICAgICAgICAgICIgQ29sb3JzcGFjZSBjb252ZXJzaW9uOiIKKyAgICAgICAgICAgICAgICAgIlxuICAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSIKKyAgICAgICAgICAgICAgICAgIlxuICBEZWZhdWx0IHZhbHVlIGlzIDAiCisgICAgICAgICAgICAgICAgICk7CiAKICNkZWZpbmUgQUJPVVQgIlY0TC1Ecml2ZXIgZm9yIFZpc2lvbiBDUGlBIGJhc2VkIGNhbWVyYXMiCiAKQEAgLTQwNDIsNyArNDA0MSw3IEBACiAJICAgICAgICJhbGxvd2VkLCBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IG5vdy4gVXNlcnMgc2hvdWxkIGZpeCB0aGUgIgogCSAgICAgICAiYXBwbGljYXRpb25zIGluIGNhc2UgdGhleSBkb24ndCB3b3JrIHdpdGhvdXQgY29udmVyc2lvbiAiCiAJICAgICAgICJyZWVuYWJsZWQgYnkgc2V0dGluZyB0aGUgJ2NvbG9yc3BhY2VfY29udicgbW9kdWxlICIKLQkgICAgICAgInBhcmFtZXRlciB0byAxIik7CisJICAgICAgICJwYXJhbWV0ZXIgdG8gMVxuIik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXByb2NfY3BpYV9jcmVhdGUoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaAppbmRleCA4Mzk0MjgzLi4xNzY0OTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oCkBAIC00NTYsNyArNDU2LDcgQEAKIGludCBjcGlhMl9hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKIHZvaWQgY3BpYTJfZnJlZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKIGxvbmcgY3BpYTJfcmVhZChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKLQkJY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbm9ibG9jayk7CisJCWNoYXIgX191c2VyICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBub2Jsb2NrKTsKIHVuc2lnbmVkIGludCBjcGlhMl9wb2xsKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLAogCQkJc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpOwogaW50IGNwaWEyX3JlbWFwX2J1ZmZlcihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlCmluZGV4IDMyYTg5NmMuLjZlODY2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAKIG9iai0kKENPTkZJR19WSURFT19DWDI1ODQwKSArPSBjeDI1ODQwLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwppbmRleCBhNDU0MGU4Li45YTRiODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKQEAgLTE5LDggKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAotI2luY2x1ZGUgImN4MjU4NDAuaCIKKyNpbmNsdWRlICJjeDI1ODQwLWNvcmUuaCIKIAogc3RhdGljIGludCBzZXRfYXVkY2xrX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGZyZXEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggYTY1YjNjYy4uYTk2MWJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtMzIsOCArMzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgogCi0jaW5jbHVkZSAiY3gyNTg0MC5oIgorI2luY2x1ZGUgImN4MjU4NDAtY29yZS5oIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbmV4YW50IENYMjU4NDAgYXVkaW8vdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlVsZiBFa2x1bmQsIENocmlzIEtlbm5lZHksIEhhbnMgVmVya3VpbCwgVHlsZXIgVHJhZmZvcmQiKTsKQEAgLTY2OCw2ICs2NjksNyBAQAogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7CiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwpAQCAtNzQ5LDE5ICs3NTEsMjEgQEAKIAkJc3RhdGUtPnJhZGlvID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCQkqKGludCAqKWFyZyA9IHN0YXRlLT52aWRfaW5wdXQ7CisJY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKKwkJcm91dGUtPmlucHV0ID0gc3RhdGUtPnZpZF9pbnB1dDsKKwkJcm91dGUtPm91dHB1dCA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJcmV0dXJuIHNldF9pbnB1dChjbGllbnQsICooZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0ICopYXJnLCBzdGF0ZS0+YXVkX2lucHV0KTsKKwljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgorCQlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgcm91dGUtPmlucHV0LCBzdGF0ZS0+YXVkX2lucHV0KTsKIAotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqaW5wdXQgPSBhcmc7CisJY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKKwkJcm91dGUtPmlucHV0ID0gc3RhdGUtPmF1ZF9pbnB1dDsKKwkJcm91dGUtPm91dHB1dCA9IDA7CisJCWJyZWFrOwogCi0JCXJldHVybiBzZXRfaW5wdXQoY2xpZW50LCBzdGF0ZS0+dmlkX2lucHV0LCBpbnB1dC0+aW5kZXgpOwotCX0KKwljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgorCQlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgc3RhdGUtPnZpZF9pbnB1dCwgcm91dGUtPmlucHV0KTsKIAogCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCQlpbnB1dF9jaGFuZ2UoY2xpZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCmluZGV4IGRkNzA2NjQuLjE3MzY5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCkBAIC0xLDQgKzEsNCBAQAotLyogY3gyNTg0MCBBUEkgaGVhZGVyCisvKiBjeDI1ODQwIGludGVybmFsIEFQSSBoZWFkZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBDaHJpcyBLZW5uZWR5CiAgKgpAQCAtMTcsOCArMTcsOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NYMjU4NDBfSF8KLSNkZWZpbmUgX0NYMjU4NDBfSF8KKyNpZm5kZWYgX0NYMjU4NDBfQ09SRV9IXworI2RlZmluZSBfQ1gyNTg0MF9DT1JFX0hfCiAKIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpAQCAtMzIsNDYgKzMyLDYgQEAKICAgIHByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uLiAqLwogI2RlZmluZSBDWDI1ODQwX0NJRF9FTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSswKQogCi1lbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgewotCS8qIENvbXBvc2l0ZSB2aWRlbyBpbnB1dHMgSW4xLUluOCAqLwotCUNYMjU4NDBfQ09NUE9TSVRFMSA9IDEsCi0JQ1gyNTg0MF9DT01QT1NJVEUyLAotCUNYMjU4NDBfQ09NUE9TSVRFMywKLQlDWDI1ODQwX0NPTVBPU0lURTQsCi0JQ1gyNTg0MF9DT01QT1NJVEU1LAotCUNYMjU4NDBfQ09NUE9TSVRFNiwKLQlDWDI1ODQwX0NPTVBPU0lURTcsCi0JQ1gyNTg0MF9DT01QT1NJVEU4LAotCi0JLyogUy1WaWRlbyBpbnB1dHMgY29uc2lzdCBvZiBvbmUgbHVtYSBpbnB1dCAoSW4xLUluNCkgT1JlZCB3aXRoIG9uZQotCSAgIGNocm9tYSBpbnB1dCAoSW41LUluOCkgKi8KLQlDWDI1ODQwX1NWSURFT19MVU1BMSA9IDB4MTAsCi0JQ1gyNTg0MF9TVklERU9fTFVNQTIgPSAweDIwLAotCUNYMjU4NDBfU1ZJREVPX0xVTUEzID0gMHgzMCwKLQlDWDI1ODQwX1NWSURFT19MVU1BNCA9IDB4NDAsCi0JQ1gyNTg0MF9TVklERU9fQ0hST01BNCA9IDB4NDAwLAotCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTUgPSAweDUwMCwKLQlDWDI1ODQwX1NWSURFT19DSFJPTUE2ID0gMHg2MDAsCi0JQ1gyNTg0MF9TVklERU9fQ0hST01BNyA9IDB4NzAwLAotCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTggPSAweDgwMCwKLQotCS8qIFMtVmlkZW8gYWxpYXNlcyBmb3IgY29tbW9uIGx1bWEvY2hyb21hIGNvbWJpbmF0aW9ucyAqLwotCUNYMjU4NDBfU1ZJREVPMSA9IDB4NTEwLAotCUNYMjU4NDBfU1ZJREVPMiA9IDB4NjIwLAotCUNYMjU4NDBfU1ZJREVPMyA9IDB4NzMwLAotCUNYMjU4NDBfU1ZJREVPNCA9IDB4ODQwLAotfTsKLQotZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IHsKLQkvKiBBdWRpbyBpbnB1dHM6IHNlcmlhbCBvciBJbjQtSW44ICovCi0JQ1gyNTg0MF9BVURJT19TRVJJQUwsCi0JQ1gyNTg0MF9BVURJTzQgPSA0LAotCUNYMjU4NDBfQVVESU81LAotCUNYMjU4NDBfQVVESU82LAotCUNYMjU4NDBfQVVESU83LAotCUNYMjU4NDBfQVVESU84LAotfTsKLQogc3RydWN0IGN4MjU4NDBfc3RhdGUgewogCWludCBwdnIxNTBfd29ya2Fyb3VuZDsKIAlpbnQgcmFkaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtZmlybXdhcmUuYwppbmRleCBlMWE3ODIzLi4xOTU4ZDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWZpcm13YXJlLmMKQEAgLTIwLDM3ICsyMCwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CiAKLSNpbmNsdWRlICJjeDI1ODQwLmgiCisjaW5jbHVkZSAiY3gyNTg0MC1jb3JlLmgiCiAKICNkZWZpbmUgRldGSUxFICJ2NGwtY3gyNTg0MC5mdyIKLSNkZWZpbmUgRldTRU5EIDEwMjQKKworLyoKKyAqIE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4gLSBUaGUgRldTRU5EIHBhcmFtZXRlciBjb250cm9scyB0aGUKKyAqIHNpemUgb2YgdGhlIGZpcm13YXJlIGNodW5rcyBzZW50IGRvd24gdGhlIEkyQyBidXMgdG8gdGhlIGNoaXAuCisgKiBQcmV2aW91c2x5IHRoaXMgaGFkIGJlZW4gc2V0IHRvIDEwMjQgYnV0IHVuZm9ydHVuYXRlbHkgc29tZSBJMkMKKyAqIGltcGxlbWVudGF0aW9ucyBjYW4ndCB0cmFuc2ZlciBkYXRhIGluIHN1Y2ggYmlnIGd1bHBzLgorICogU3BlY2lmaWNhbGx5LCB0aGUgcHZydXNiMiBkcml2ZXIgaGFzIGEgaGFyZCBsaW1pdCBvZiBhcm91bmQgNjAKKyAqIGJ5dGVzLCBkdWUgdG8gdGhlIGVuY2Fwc3VsYXRpb24gdGhlcmUgb2YgSTJDIHRyYWZmaWMgaW50byBVU0IKKyAqIG1lc3NhZ2VzLiAgU28gd2UgaGF2ZSB0byBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGlzIHBhcmFtZXRlci4KKyAqLworI2RlZmluZSBGV1NFTkQgNDgKIAogI2RlZmluZSBGV0RFVih4KSAmKCh4KS0+YWRhcHRlci0+ZGV2KQogCi1zdGF0aWMgaW50IGZhc3RmdyA9IDE7CiBzdGF0aWMgY2hhciAqZmlybXdhcmUgPSBGV0ZJTEU7CiAKLW1vZHVsZV9wYXJhbShmYXN0ZncsIGJvb2wsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGZpcm13YXJlLCBjaGFycCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MoZmFzdGZ3LCAiTG9hZCBmaXJtd2FyZSBmYXN0IFswPTEwME1IeiAxPTMzM01IeiAoZGVmYXVsdCldIik7CiBNT0RVTEVfUEFSTV9ERVNDKGZpcm13YXJlLCAiRmlybXdhcmUgaW1hZ2UgW2RlZmF1bHQ6ICIgRldGSUxFICJdIik7CiAKLXN0YXRpYyB2b2lkIHNldF9pMmNfZGVsYXkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRlbGF5KQotewotCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWxnb2QgPSBjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YTsKLQotCS8qIFdlIGFyZW4ndCBndWFyYW50ZWVkIHRvIGJlIHVzaW5nIGFsZ29fYml0LAotCSAqIHNvIGF2b2lkIHRoZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UKLQkgKiBhbmQgZGlzYWJsZSB0aGUgJ2Zhc3QgZmlybXdhcmUgbG9hZCcgKi8KLQlpZiAoYWxnb2QpIHsKLQkJYWxnb2QtPnVkZWxheSA9IGRlbGF5OwotCX0gZWxzZSB7Ci0JCWZhc3RmdyA9IDA7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBzdGFydF9md19sb2FkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJLyogRExfQUREUl9MQj0wIERMX0FERFJfSEI9MCAqLwpAQCAtNjAsMTYgKzU0LDEwIEBACiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4ODAzLCAweDBiKTsKIAkvKiBBVVRPX0lOQ19ESVM9MSAqLwogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDAwMCwgMHgyMCk7Ci0KLQlpZiAoZmFzdGZ3KQotCQlzZXRfaTJjX2RlbGF5KGNsaWVudCwgMyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuZF9md19sb2FkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaWYgKGZhc3RmdykKLQkJc2V0X2kyY19kZWxheShjbGllbnQsIDEwKTsKLQogCS8qIEFVVE9fSU5DX0RJUz0wICovCiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MDAwLCAweDAwKTsKIAkvKiBETF9FTkFCTEU9MCAqLwpAQCAtOTYsMzAgKzg0LDggQEAKIAlpbnQgc2VudDsKIAogCWlmICgoc2VudCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIHNpemUpKSA8IHNpemUpIHsKLQotCQlpZiAoZmFzdGZ3KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgIjMzM01IeiBpMmMgZmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOwotCQkJZmFzdGZ3ID0gMDsKLQkJCXNldF9pMmNfZGVsYXkoY2xpZW50LCAxMCk7Ci0KLQkJCWlmIChzZW50ID4gMikgewotCQkJCXUxNiBkbF9hZGRyID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MDEpIDw8IDg7Ci0JCQkJZGxfYWRkciB8PSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwMCk7Ci0JCQkJZGxfYWRkciAtPSBzZW50IC0gMjsKLQkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4MDEsIGRsX2FkZHIgPj4gOCk7Ci0JCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4ODAwLCBkbF9hZGRyICYgMHhmZik7Ci0JCQl9Ci0KLQkJCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBzaXplKSA8IHNpemUpIHsKLQkJCQl2NGxfZXJyKGNsaWVudCwgIjEwME1IeiBpMmMgZmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOwotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImZpcm13YXJlIGxvYWQgaTJjIGZhaWx1cmVcbiIpOwotCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCX0KLQorCQl2NGxfZXJyKGNsaWVudCwgImZpcm13YXJlIGxvYWQgaTJjIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKaW5kZXggZTk2ZmQxZi4uNTdmZWNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKQEAgLTE5LDggKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAotI2luY2x1ZGUgImN4MjU4NDAuaCIKKyNpbmNsdWRlICJjeDI1ODQwLWNvcmUuaCIKIAogc3RhdGljIGludCBvZGRfcGFyaXR5KHU4IGMpCiB7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAl7CiAJCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IsIDAsCS8qIDEgKi8KKwkJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KIAkJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KIAkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LAkvKiA2ICovCiAJCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KQEAgLTIzMSw3ICsyMzIsNyBAQAogCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKIAkJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7CiAJCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9COgorCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKIAkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgpAQCAtMjgyLDcgKzI4Myw3IEBACiAKIAkJc3dpdGNoIChpZDIpIHsKIAkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0I7CisJCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKIAkJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IGZmMGY3MjMuLjYzMDI3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC0xLDMgKzEsNyBAQAorY29uZmlnIFZJREVPX0NYODhfVlAzMDU0CisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmIERWQl9NVDM1MgorCiBjb25maWcgVklERU9fQ1g4OAogCXRyaXN0YXRlICJDb25leGFudCAyMzg4eCAoYnQ4Nzggc3VjY2Vzc29yKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMKQEAgLTI1LDcgKzI5LDcgQEAKIAogCSAgSXQgb25seSB3b3JrcyB3aXRoIGJvYXJkcyB3aXRoIGZ1bmN0aW9uIDAxIGVuYWJsZWQuCiAJICBUbyBjaGVjayBpZiB5b3VyIGJvYXJkIHN1cHBvcnRzLCB1c2UgbHNwY2kgLW4uCi0JICBJZiBzdXBwb3J0ZWQsIHlvdSBzaG91bGQgc2VlIDE0NzE6ODgwMSBvciAxNDcxOjg4MTEKKwkgIElmIHN1cHBvcnRlZCwgeW91IHNob3VsZCBzZWUgMTRmMTo4ODAxIG9yIDE0ZjE6ODgxMQogCSAgUENJIGRldmljZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCkBAIC03MywxMCArNzcsMTEgQEAKIAkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTVQzNTIgZGVtb2R1bGF0b3IuCiAKLWNvbmZpZyBWSURFT19DWDg4X1ZQMzA1NAotCXRyaXN0YXRlICJWUC0zMDU0IFNlY29uZGFyeSBJMkMgQnVzIFN1cHBvcnQiCi0JZGVmYXVsdCBtCi0JZGVwZW5kcyBvbiBEVkJfTVQzNTIKK2NvbmZpZyBWSURFT19DWDg4X0RWQl9WUDMwNTQKKwlib29sICJWUC0zMDU0IFNlY29uZGFyeSBJMkMgQnVzIFN1cHBvcnQiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBWSURFT19DWDg4X0RWQl9NVDM1MgorCXNlbGVjdCBWSURFT19DWDg4X1ZQMzA1NAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTVQzNTIgZGVtb2R1bGF0b3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggNjQ4MmI5YS4uMGRjZDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtOCw5ICs4LDkgQEAKIG9iai0kKENPTkZJR19WSURFT19DWDg4X0FMU0EpICs9IGN4ODgtYWxzYS5vCiBvYmotJChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpICs9IGN4ODgtdnAzMDU0LWkyYy5vCiAKLUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKIAogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX0JVRl9EVkIpICs9IC1ESEFWRV9WSURFT19CVUZfRFZCPTEKIGV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfQ1gyMjcwMikgICArPSAtREhBVkVfQ1gyMjcwMj0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKaW5kZXggZjlkODdiOC4uMzIwYjNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpAQCAtNjE2LDcgKzYxNiw3IEBACiAgKiBPbmx5IGJvYXJkcyB3aXRoIGVlcHJvbSBhbmQgYnl0ZSAxIGF0IGVlcHJvbT0xIGhhdmUgaXQKICAqLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4OF9hdWRpb19wY2lfdGJsW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4OF9hdWRpb19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7MHgxNGYxLDB4ODgwMSxQQ0lfQU5ZX0lELFBDSV9BTllfSUQsMCwwLDB9LAogCXsweDE0ZjEsMHg4ODExLFBDSV9BTllfSUQsUENJX0FOWV9JRCwwLDAsMH0sCiAJezAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGM3MDQyY2YuLmY4MDE1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAJfSwKIAlbQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gInBjSERUViBIRDMwMDAgSERUViIsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RIT01TT05fRFRUNzYxMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEhPTVNPTl9EVFQ3NjFYLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggMmMzZDlmMS4uZTEwOTJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtMTQ2LDkgKzE0NiwxMSBAQAogCQlmaWVsZHMrKzsKIAogCS8qIGVzdGltYXRlIHJpc2MgbWVtOiB3b3JzdCBjYXNlIGlzIG9uZSB3cml0ZSBwZXIgcGFnZSBib3JkZXIgKwotCSAgIG9uZSB3cml0ZSBwZXIgc2NhbiBsaW5lICsgc3luY3MgKyBqdW1wIChhbGwgMiBkd29yZHMpICovCi0JaW5zdHJ1Y3Rpb25zICA9IChicGwgKiBsaW5lcyAqIGZpZWxkcykgLyBQQUdFX1NJWkUgKyBsaW5lcyAqIGZpZWxkczsKLQlpbnN0cnVjdGlvbnMgKz0gMyArIDQ7CisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jcyArIGp1bXAgKGFsbCAyIGR3b3JkcykuICBQYWRkaW5nCisJICAgY2FuIGNhdXNlIG5leHQgYnBsIHRvIHN0YXJ0IGNsb3NlIHRvIGEgcGFnZSBib3JkZXIuICBGaXJzdCBETUEKKwkgICByZWdpb24gbWF5IGJlIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgKi8KKwlpbnN0cnVjdGlvbnMgID0gZmllbGRzICogKDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXMpOworCWluc3RydWN0aW9ucyArPSAyOwogCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjgpKSA8IDApCiAJCXJldHVybiByYzsKIApAQCAtMTc2LDkgKzE3OCwxMSBAQAogCWludCByYzsKIAogCS8qIGVzdGltYXRlIHJpc2MgbWVtOiB3b3JzdCBjYXNlIGlzIG9uZSB3cml0ZSBwZXIgcGFnZSBib3JkZXIgKwotCSAgIG9uZSB3cml0ZSBwZXIgc2NhbiBsaW5lICsgc3luY3MgKyBqdW1wIChhbGwgMiBkd29yZHMpICovCi0JaW5zdHJ1Y3Rpb25zICA9IChicGwgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lczsKLQlpbnN0cnVjdGlvbnMgKz0gMyArIDQ7CisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jcyArIGp1bXAgKGFsbCAyIGR3b3JkcykuICBIZXJlCisJICAgdGhlcmUgaXMgbm8gcGFkZGluZyBhbmQgbm8gc3luYy4gIEZpcnN0IERNQSByZWdpb24gbWF5IGJlIHNtYWxsZXIKKwkgICB0aGFuIFBBR0VfU0laRSAqLworCWluc3RydWN0aW9ucyAgPSAxICsgKGJwbCAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzOworCWluc3RydWN0aW9ucyArPSAxOwogCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjgpKSA8IDApCiAJCXJldHVybiByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBmMGVhOWI1Li4zNjE5YTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiBzdGF0aWMgc3RydWN0IG9yNTExMzJfY29uZmlnIHBjaGR0dl9oZDMwMDAgPSB7CiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDE1LAogCS5wbGxfYWRkcmVzcyAgICAgID0gMHg2MSwKLQkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzYxMCwKKwkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzYxeCwKIAkuc2V0X3RzX3BhcmFtcyAgICA9IG9yNTExMzJfc2V0X3RzX3BhcmFtLAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggNzJhNDE3Yi4uNjk0ZDFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC0zNSw4ICszNSwxMCBAQAogI2luY2x1ZGUgImN4ODguaCIKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAvKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggNWE3OTNhZS4uZGZiMTViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX0VNMjhYWAogCXRyaXN0YXRlICJFbXBpYSBFTTI4MDAvMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVVNCICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBVU0IgJiYgSTJDCiAJc2VsZWN0IFZJREVPX0JVRgogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQppbmRleCBkYTQ1N2EwLi44MjZkMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IGY2MmZkNzA2Yi4uM2JhMzQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTE1MSw4ICsxNTEsOCBAQAogCQl9LHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IDIsCi0JCQkuYW11eCAgICAgPSBNU1BfSU5QVVQoTVNQX0lOX1NDQVJUXzEsIE1TUF9JTl9UVU5FUl8xLAotCQkJCQlNU1BfRFNQX09VVF9TQ0FSVCwgTVNQX0RTUF9PVVRfU0NBUlQpLAorCQkJLmFtdXggICAgID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVDEsIE1TUF9JTl9UVU5FUjEsCisJCQkJCU1TUF9EU1BfSU5fU0NBUlQsIE1TUF9EU1BfSU5fU0NBUlQpLAogCQl9fSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMl0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IGRmYmEzM2QuLmNmN2NkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJaWYgKGRldi0+aTJzX3NwZWVkKQogCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRLCAmZGV2LT5pMnNfc3BlZWQpOwogCQlyb3V0ZS5pbnB1dCA9IGRldi0+Y3RsX2FpbnB1dDsKLQkJcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVChNU1BfT1VUX1NDQVJUMV9EQSk7CisJCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpOwogCQkvKiBOb3RlOiB0aGlzIGlzIG1zcDM0MDAgc3BlY2lmaWMgKi8KIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKIAkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKQEAgLTExNDEsMjYgKzExNDEsMTYgQEAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCWludCBzdGF0dXMgPSAwOwogCiAJCWlmICgwICE9IHQtPmluZGV4KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwogCQlzdHJjcHkodC0+bmFtZSwgIlR1bmVyIik7Ci0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07Ci0JCXQtPnJhbmdlaGlnaCA9IDB4ZmZmZmZmZmZVTDsJLyogRklYTUU6IHNldCBjb3JyZWN0IHJhbmdlICovCi0vKgkJdC0+c2lnbmFsID0gMHhmZmZmOyovCi0vKgkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LFZJRElPQ19HX1RVTkVSLHQpOyovCi0JCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLwogCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfR0VUX1NUQVRVUywKLQkJCQkJJnN0YXR1cyk7CisJCS8qIGxldCBjbGllbnRzIGZpbGwgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGlzIHN0cnVjdCAqLworCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIGNtZCwgdCk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJdC0+c2lnbmFsID0KLQkJCShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSAhPSAwID8gMHhmZmZmIDogMDsKLQogCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPX0dfVFVORVI6IHNpZ25hbD0leCwgYWZjPSV4XG4iLCB0LT5zaWduYWwsCiAJCQkJdC0+YWZjKTsKIAkJcmV0dXJuIDA7CkBAIC0xMTY4LDI2ICsxMTU4LDEzIEBACiAJY2FzZSBWSURJT0NfU19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQlpbnQgc3RhdHVzID0gMDsKIAogCQlpZiAoMCAhPSB0LT5pbmRleCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSh0LT5uYW1lLCAiVHVuZXIiKTsKLQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKLQkJdC0+cmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwkvKiBGSVhNRTogc2V0IGNvcnJlY3QgcmFuZ2UgKi8KLS8qCQl0LT5zaWduYWwgPSAweGZmZmY7ICovCi0JCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLwogCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfR0VUX1NUQVRVUywKLQkJCQkJJnN0YXR1cyk7CisJCS8qIGxldCBjbGllbnRzIGhhbmRsZSB0aGlzICovCisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgY21kLCB0KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQl0LT5zaWduYWwgPQotCQkJKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpICE9IDAgPyAweGZmZmYgOiAwOwotCi0JCWVtMjh4eF92aWRlb2RiZygiVklESU9fU19UVU5FUjogc2lnbmFsPSV4LCBhZmM9JXhcbiIsCi0JCQkJdC0+c2lnbmFsLCB0LT5hZmMpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CkBAIC0xNTk5LDggKzE1NzYsOCBAQAogCWVyckNvZGUgPSBlbTI4eHhfY29uZmlnKGRldik7CiAJaWYgKGVyckNvZGUpIHsKIAkJZW0yOHh4X2VycmRldigiZXJyb3IgY29uZmlndXJpbmcgZGV2aWNlXG4iKTsKLQkJa2ZyZWUoZGV2KTsKIAkJZW0yOHh4X2RldnVzZWQmPX4oMTw8ZGV2LT5kZXZubyk7CisJCWtmcmVlKGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTYyNiw4ICsxNjAzLDggQEAKIAlkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoTlVMTCA9PSBkZXYtPnZkZXYpIHsKIAkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOwotCQlrZnJlZShkZXYpOwogCQllbTI4eHhfZGV2dXNlZCY9figxPDxkZXYtPmRldm5vKTsKKwkJa2ZyZWUoZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNjM1LDggKzE2MTIsOCBAQAogCWlmIChOVUxMID09IGRldi0+dmJpX2RldikgewogCQllbTI4eHhfZXJyZGV2KCJjYW5ub3QgYWxsb2NhdGUgdmlkZW9fZGV2aWNlLlxuIik7CiAJCWtmcmVlKGRldi0+dmRldik7Ci0JCWtmcmVlKGRldik7CiAJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PGRldi0+ZGV2bm8pOworCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE2NzMsOCArMTY1MCw4IEBACiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7Ci0JCWtmcmVlKGRldik7CiAJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PGRldi0+ZGV2bm8pOworCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE2ODUsOCArMTY2Miw4IEBACiAJCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZiaV9kZXYpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOwotCQlrZnJlZShkZXYpOwogCQllbTI4eHhfZGV2dXNlZCY9figxPDxkZXYtPmRldm5vKTsKKwkJa2ZyZWUoZGV2KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJyZWdpc3RlcmVkIFZCSVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiZmY3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgVVNCX0VUNjFYMjUxCisJdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gRXRvbXMgRVQ2MVgxNTEKKwkgIG9yIEVUNjFYMjUxIFBDIENhbWVyYSBDb250cm9sbGVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0PiBmb3IgbW9yZSBpbmZvLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV0NjF4MjUxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCA5NWJhY2Y0My4uN2U2NmQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTQxMSw2ICs0MTEsOSBAQAogCWNhc2UgSTJDX0hXX0JfQlQ4NDg6CiAJCXByb2JlID0gcHJvYmVfYnR0djsKIAkJYnJlYWs7CisJY2FzZSBJMkNfSFdfQl9DWDIzNDFYOgorCQlwcm9iZSA9IHByb2JlX2J0dHY7CisJCWJyZWFrOwogCWNhc2UgSTJDX0hXX1NBQTcxMzQ6CiAJCXByb2JlID0gcHJvYmVfc2FhNzEzNDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKaW5kZXggYzQwZThiYS4uYjgwNjk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwpAQCAtMjc5LDIwICsyNzksOCBAQAogCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDEzLCBzdGF0ZS0+YWNiKTsKIAogCS8qIFNldHMgSTJTIHNwZWVkIDAgPSAxLjAyNCBNYnBzLCAxID0gMi4wNDggTWJwcyAqLwotCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOwotfQotCi12b2lkIG1zcF9zZXRfbXV0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibXV0ZSBhdWRpb1xuIik7Ci0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwMCwgMCk7Ci0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwNywgMSk7Ci0JaWYgKHN0YXRlLT5oYXNfc2NhcnQyX291dF92b2x1bWUpCi0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwNDAsIDEpOwotCWlmIChzdGF0ZS0+aGFzX2hlYWRwaG9uZXMpCi0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDYsIDApOworCWlmIChzdGF0ZS0+aGFzX2kyc19jb25mKQorCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHg0MCwgc3RhdGUtPmkyc19tb2RlKTsKIH0KIAogdm9pZCBtc3Bfc2V0X2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC0zMDAsMTcgKzI4OCwxOSBAQAogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGJhbCA9IDAsIGJhc3MsIHRyZWJsZSwgbG91ZG5lc3M7CiAJaW50IHZhbCA9IDA7CisJaW50IHJlYWxseW11dGVkID0gc3RhdGUtPm11dGVkIHwgc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3M7CiAKLQlpZiAoIXN0YXRlLT5tdXRlZCkKKwlpZiAoIXJlYWxseW11dGVkKQogCQl2YWwgPSAoc3RhdGUtPnZvbHVtZSAqIDB4N2YgLyA2NTUzNSkgPDwgODsKIAotCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJtdXRlPSVzIHZvbHVtZT0lZFxuIiwKLQkJc3RhdGUtPm11dGVkID8gIm9uIiA6ICJvZmYiLCBzdGF0ZS0+dm9sdW1lKTsKKwl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibXV0ZT0lcyBzY2FubmluZz0lcyB2b2x1bWU9JWRcbiIsCisJCXN0YXRlLT5tdXRlZCA/ICJvbiIgOiAib2ZmIiwgc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPyAieWVzIiA6ICJubyIsCisJCXN0YXRlLT52b2x1bWUpOwogCiAJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwMCwgdmFsKTsKLQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA3LCBzdGF0ZS0+bXV0ZWQgPyAweDEgOiAodmFsIHwgMHgxKSk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwNywgcmVhbGx5bXV0ZWQgPyAweDEgOiAodmFsIHwgMHgxKSk7CiAJaWYgKHN0YXRlLT5oYXNfc2NhcnQyX291dF92b2x1bWUpCi0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwNDAsIHN0YXRlLT5tdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDA0MCwgcmVhbGx5bXV0ZWQgPyAweDEgOiAodmFsIHwgMHgxKSk7CiAJaWYgKHN0YXRlLT5oYXNfaGVhZHBob25lcykKIAkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwNiwgdmFsKTsKIAlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKQEAgLTM0Niw3ICszMzYsNiBAQAogCiAJaWYgKE5VTEwgPT0gc3RhdGUtPmt0aHJlYWQpCiAJCXJldHVybjsKLQltc3Bfc2V0X211dGUoY2xpZW50KTsKIAlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMDsKIAlzdGF0ZS0+cmVzdGFydCA9IDE7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzdGF0ZS0+d3EpOwpAQCAtMzc0LDE5ICszNjMsMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgbXNwX21vZGVfdjRsMl90b192NGwxKGludCByeHN1YmNoYW5zKQorc3RhdGljIGludCBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoaW50IHJ4c3ViY2hhbnMsIGludCBhdWRtb2RlKQogewotCWludCBtb2RlID0gMDsKLQotCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQotCQltb2RlIHw9IFZJREVPX1NPVU5EX1NURVJFTzsKLQlpZiAocnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKQotCQltb2RlIHw9IFZJREVPX1NPVU5EX0xBTkcyIHwgVklERU9fU09VTkRfU1RFUkVPOwotCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzEpCi0JCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9TVEVSRU87Ci0JaWYgKG1vZGUgPT0gMCkKLQkJbW9kZSB8PSBWSURFT19TT1VORF9NT05POwotCXJldHVybiBtb2RlOworCWlmIChyeHN1YmNoYW5zID09IFY0TDJfVFVORVJfU1VCX01PTk8pCisJCXJldHVybiBWSURFT19TT1VORF9NT05POworCWlmIChyeHN1YmNoYW5zID09IFY0TDJfVFVORVJfU1VCX1NURVJFTykKKwkJcmV0dXJuIFZJREVPX1NPVU5EX1NURVJFTzsKKwlpZiAoYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzIpCisJCXJldHVybiBWSURFT19TT1VORF9MQU5HMjsKKwlyZXR1cm4gVklERU9fU09VTkRfTEFORzE7CiB9CiAKIHN0YXRpYyBpbnQgbXNwX21vZGVfdjRsMV90b192NGwyKGludCBtb2RlKQpAQCAtNjA1LDcgKzU5MCw3IEBACiAJCQlicmVhazsKIAkJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpCiAJCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwotCQl2YS0+bW9kZSA9IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShzdGF0ZS0+cnhzdWJjaGFucyk7CisJCXZhLT5tb2RlID0gbXNwX21vZGVfdjRsMl90b192NGwxKHN0YXRlLT5yeHN1YmNoYW5zLCBzdGF0ZS0+YXVkbW9kZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNjIwLDcgKzYwNSw4IEBACiAJCXN0YXRlLT50cmVibGUgPSB2YS0+dHJlYmxlOwogCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CiAKLQkJaWYgKHZhLT5tb2RlICE9IDAgJiYgc3RhdGUtPnJhZGlvID09IDApIHsKKwkJaWYgKHZhLT5tb2RlICE9IDAgJiYgc3RhdGUtPnJhZGlvID09IDAgJiYKKwkJICAgIHN0YXRlLT5hdWRtb2RlICE9IG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpIHsKIAkJCXN0YXRlLT5hdWRtb2RlID0gbXNwX21vZGVfdjRsMV90b192NGwyKHZhLT5tb2RlKTsKIAkJCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOwogCQl9CkBAIC02ODcsMjEgKzY3MywyMyBAQAogCQlpbnQgc2NfaW4gPSBydC0+aW5wdXQgJiAweDc7CiAJCWludCBzYzFfb3V0ID0gcnQtPm91dHB1dCAmIDB4ZjsKIAkJaW50IHNjMl9vdXQgPSAocnQtPm91dHB1dCA+PiA0KSAmIDB4ZjsKLQkJdTE2IHZhbDsKKwkJdTE2IHZhbCwgcmVnOwogCisJCWlmIChzdGF0ZS0+cm91dGluZy5pbnB1dCA9PSBydC0+aW5wdXQgJiYKKwkJICAgIHN0YXRlLT5yb3V0aW5nLm91dHB1dCA9PSBydC0+b3V0cHV0KQorCQkJYnJlYWs7CiAJCXN0YXRlLT5yb3V0aW5nID0gKnJ0OwotCQlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkgewotCQkJdmFsID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHgzMCkgJiB+MHgxMDA7Ci0JCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgzMCwgdmFsIHwgKHR1bmVyID8gMHgxMDAgOiAwKSk7Ci0JCX0gZWxzZSB7Ci0JCQl2YWwgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCAweGJiKSAmIH4weDEwMDsKLQkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweGJiLCB2YWwgfCAodHVuZXIgPyAweDEwMCA6IDApKTsKLQkJfQogCQltc3Bfc2V0X3NjYXJ0KGNsaWVudCwgc2NfaW4sIDApOwogCQltc3Bfc2V0X3NjYXJ0KGNsaWVudCwgc2MxX291dCwgMSk7CiAJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzYzJfb3V0LCAyKTsKIAkJbXNwX3NldF9hdWRtb2RlKGNsaWVudCk7Ci0JCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCQlyZWcgPSAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkgPyAweDMwIDogMHhiYjsKKwkJdmFsID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgcmVnKTsKKwkJaWYgKHR1bmVyICE9ICgodmFsID4+IDgpICYgMSkpIHsKKwkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCByZWcsICh2YWwgJiB+MHgxMDApIHwgKHR1bmVyIDw8IDgpKTsKKwkJCS8qIHdha2UgdGhyZWFkIHdoZW4gYSBuZXcgdHVuZXIgaW5wdXQgaXMgY2hvc2VuICovCisJCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwkJfQogCQlicmVhazsKIAl9CiAKQEAgLTcxNSw3ICs3MDMsNyBAQAogCQkJbXNwX2RldGVjdF9zdGVyZW8oY2xpZW50KTsKIAkJdnQtPmF1ZG1vZGUgICAgPSBzdGF0ZS0+YXVkbW9kZTsKIAkJdnQtPnJ4c3ViY2hhbnMgPSBzdGF0ZS0+cnhzdWJjaGFuczsKLQkJdnQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQl2dC0+Y2FwYWJpbGl0eSB8PSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAogCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKIAkJYnJlYWs7CiAJfQpAQCAtNzI2LDYgKzcxNCw4IEBACiAKIAkJaWYgKHN0YXRlLT5yYWRpbykgIC8qIFRPRE86IGFkZCBtb25vL3N0ZXJlbyBzdXBwb3J0IGZvciByYWRpbyAqLwogCQkJYnJlYWs7CisJCWlmIChzdGF0ZS0+YXVkbW9kZSA9PSB2dC0+YXVkbW9kZSkKKwkJCWJyZWFrOwogCQlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwogCQkvKiBvbmx5IHNldCBhdWRtb2RlICovCiAJCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOwpAQCAtODg3LDcgKzg3Nyw3IEBACiAKIAltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKIAlzdGF0ZS0+djRsMl9zdGQgPSBWNEwyX1NURF9OVFNDOwotCXN0YXRlLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOworCXN0YXRlLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAlzdGF0ZS0+dm9sdW1lID0gNTg4ODA7CS8qIDBkYiBnYWluICovCiAJc3RhdGUtPmJhbGFuY2UgPSAzMjc2ODsJLyogMGRiIGdhaW4gKi8KIAlzdGF0ZS0+YmFzcyA9IDMyNzY4OwpAQCAtOTMxLDEzICs5MjEsMTYgQEAKIAlzdGF0ZS0+aGFzX3JhZGlvID0gbXNwX3JldmlzaW9uID49ICdHJzsKIAkvKiBIYXMgaGVhZHBob25lcyBvdXRwdXQ6IG5vdCBmb3Igc3RyaXBwZWQgZG93biBwcm9kdWN0cyAqLwogCXN0YXRlLT5oYXNfaGVhZHBob25lcyA9IG1zcF9wcm9kX2xvIDwgNTsKKwkvKiBIYXMgc2NhcnQyIGlucHV0OiBub3QgaW4gc3RyaXBwZWQgZG93biBwcm9kdWN0cyBvZiB0aGUgJzMnIGZhbWlseSAqLworCXN0YXRlLT5oYXNfc2NhcnQyID0gbXNwX2ZhbWlseSA+PSA0IHx8IG1zcF9wcm9kX2xvIDwgNzsKKwkvKiBIYXMgc2NhcnQzIGlucHV0OiBub3QgaW4gc3RyaXBwZWQgZG93biBwcm9kdWN0cyBvZiB0aGUgJzMnIGZhbWlseSAqLworCXN0YXRlLT5oYXNfc2NhcnQzID0gbXNwX2ZhbWlseSA+PSA0IHx8IG1zcF9wcm9kX2xvIDwgNTsKIAkvKiBIYXMgc2NhcnQ0IGlucHV0OiBub3QgaW4gcHJlIEQgcmV2aXNpb25zLCBub3QgaW4gc3RyaXBwZWQgRCByZXZzICovCiAJc3RhdGUtPmhhc19zY2FydDQgPSBtc3BfZmFtaWx5ID49IDQgfHwgKG1zcF9yZXZpc2lvbiA+PSAnRCcgJiYgbXNwX3Byb2RfbG8gPCA1KTsKLQkvKiBIYXMgc2NhcnQyIGFuZCBzY2FydDMgaW5wdXRzIGFuZCBzY2FydDIgb3V0cHV0OiBub3QgaW4gc3RyaXBwZWQKLQkgICBkb3duIHByb2R1Y3RzIG9mIHRoZSAnMycgZmFtaWx5ICovCi0Jc3RhdGUtPmhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQgPSBtc3BfZmFtaWx5ID49IDQgfHwgbXNwX3Byb2RfbG8gPCA1OworCS8qIEhhcyBzY2FydDIgb3V0cHV0OiBub3QgaW4gc3RyaXBwZWQgZG93biBwcm9kdWN0cyBvZiB0aGUgJzMnIGZhbWlseSAqLworCXN0YXRlLT5oYXNfc2NhcnQyX291dCA9IG1zcF9mYW1pbHkgPj0gNCB8fCBtc3BfcHJvZF9sbyA8IDU7CiAJLyogSGFzIHNjYXJ0MiBhIHZvbHVtZSBjb250cm9sPyBOb3QgaW4gcHJlLUQgcmV2aXNpb25zLiAqLwotCXN0YXRlLT5oYXNfc2NhcnQyX291dF92b2x1bWUgPSBtc3BfcmV2aXNpb24gPiAnQycgJiYgc3RhdGUtPmhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQ7CisJc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSA9IG1zcF9yZXZpc2lvbiA+ICdDJyAmJiBzdGF0ZS0+aGFzX3NjYXJ0Ml9vdXQ7CiAJLyogSGFzIGEgY29uZmlndXJhYmxlIGkycyBvdXQ/ICovCiAJc3RhdGUtPmhhc19pMnNfY29uZiA9IG1zcF9yZXZpc2lvbiA+PSAnRycgJiYgbXNwX3Byb2RfbG8gPCA3OwogCS8qIEhhcyBzdWJ3b29mZXIgb3V0cHV0OiBub3QgaW4gcHJlLUQgcmV2cyBhbmQgbm90IGluIHN0cmlwcGVkIGRvd24gcHJvZHVjdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaAppbmRleCAxOTQwNzQ4Li40ZTQ1MTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oCkBAIC01NCw4ICs1NCwxMCBAQAogCXU4IGhhc19yYWRpbzsKIAl1OCBoYXNfaGVhZHBob25lczsKIAl1OCBoYXNfbnRzY19qcF9kX2szOworCXU4IGhhc19zY2FydDI7CisJdTggaGFzX3NjYXJ0MzsKIAl1OCBoYXNfc2NhcnQ0OwotCXU4IGhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQ7CisJdTggaGFzX3NjYXJ0Ml9vdXQ7CiAJdTggaGFzX3NjYXJ0Ml9vdXRfdm9sdW1lOwogCXU4IGhhc19pMnNfY29uZjsKIAl1OCBoYXNfc3Vid29vZmVyOwpAQCAtODMsNiArODUsNyBAQAogCWludCB2b2x1bWUsIG11dGVkOwogCWludCBiYWxhbmNlLCBsb3VkbmVzczsKIAlpbnQgYmFzcywgdHJlYmxlOworCWludCBzY2FuX2luX3Byb2dyZXNzOwogCiAJLyogdGhyZWFkICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICAgKmt0aHJlYWQ7CkBAIC05OCw3ICsxMDEsNiBAQAogaW50IG1zcF9yZWFkX2RzcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkcik7CiBpbnQgbXNwX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogdm9pZCBtc3Bfc2V0X3NjYXJ0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBpbiwgaW50IG91dCk7Ci12b2lkIG1zcF9zZXRfbXV0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHZvaWQgbXNwX3NldF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIGludCBtc3Bfc2xlZXAoc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUsIGludCB0aW1lb3V0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwppbmRleCBjMzk4NGVhLi42MzNhMTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwYSwgc3JjKTsKIAltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBiLCBzcmMpOwogCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGMsIHNyYyk7Ci0JaWYgKHN0YXRlLT5oYXNfc2NhcnQyM19pbl9zY2FydDJfb3V0KQorCWlmIChzdGF0ZS0+aGFzX3NjYXJ0Ml9vdXQpCiAJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwNDEsIHNyYyk7CiB9CiAKQEAgLTIyOCw2ICsyMjgsNyBAQAogCWNoYXIgKm1vZGVzdHIgPSAoc3RhdGUtPmF1ZG1vZGUgPj0gMCAmJiBzdGF0ZS0+YXVkbW9kZSA8IDUpID8KIAkJc3RybW9kZVtzdGF0ZS0+YXVkbW9kZV0gOiAidW5rbm93biI7CiAJaW50IHNyYyA9IDA7CS8qIGNoYW5uZWwgc291cmNlOiBGTS9BTSwgbmljYW0gb3IgU0NBUlQgKi8KKwlpbnQgYXVkbW9kZSA9IHN0YXRlLT5hdWRtb2RlOwogCiAJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpIHsKIAkJLyogdGhpcyBtZXRob2Qgd291bGQgYnJlYWsgZXZlcnl0aGluZywgbGV0J3MgbWFrZSBzdXJlCkBAIC0yMzksMTEgKzI0MCwyOSBAQAogCQlyZXR1cm47CiAJfQogCisJLyogTm90ZTogZm9yIHRoZSBDIGFuZCBEIHJldnMgbm8gTlRTQyBzdGVyZW8gKyBTQVAgaXMgcG9zc2libGUgYXMKKwkgICB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBTQVAuIFNvIHRoZSByeHN1YmNoYW5zIGNvbWJpbmF0aW9uCisJICAgb2YgU1RFUkVPIHwgTEFORzIgZG9lcyBub3Qgb2NjdXIuICovCisKKwkvKiBzd2l0Y2ggdG8gbW9ubyBpZiBvbmx5IG1vbm8gaXMgYXZhaWxhYmxlICovCisJaWYgKHN0YXRlLT5yeHN1YmNoYW5zID09IFY0TDJfVFVORVJfU1VCX01PTk8pCisJCWF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwkvKiBpZiBiaWxpbmd1YWwgKi8KKwllbHNlIGlmIChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKSB7CisJCS8qIGFuZCBtb25vIG9yIHN0ZXJlbywgdGhlbiBmYWxsYmFjayB0byBsYW5nMSAqLworCQlpZiAoYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTU9OTyB8fAorCQkgICAgYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPKQorCQkJYXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKKwl9CisJLyogaWYgc3RlcmVvLCBhbmQgYXVkbW9kZSBpcyBub3QgbW9ubywgdGhlbiBzd2l0Y2ggdG8gc3RlcmVvICovCisJZWxzZSBpZiAoYXVkbW9kZSAhPSBWNEwyX1RVTkVSX01PREVfTU9OTykKKwkJYXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisKIAkvKiBzd2l0Y2ggZGVtb2R1bGF0b3IgKi8KIAlzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7CiAJY2FzZSBNU1BfTU9ERV9GTV9URVJSQToKIAkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIkZNIHNldF9hdWRtb2RlOiAlc1xuIiwgbW9kZXN0cik7Ci0JCXN3aXRjaCAoc3RhdGUtPmF1ZG1vZGUpIHsKKwkJc3dpdGNoIChhdWRtb2RlKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKIAkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGUsIDB4MzAwMSk7CiAJCQlicmVhazsKQEAgLTI1Nyw3ICsyNzYsNyBAQAogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0ZNX1NBVDoKIAkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIlNBVCBzZXRfYXVkbW9kZTogJXNcbiIsIG1vZGVzdHIpOwotCQlzd2l0Y2ggKHN0YXRlLT5hdWRtb2RlKSB7CisJCXN3aXRjaCAoYXVkbW9kZSkgewogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgogCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpKTsKIAkJCWJyZWFrOwpAQCAtMjk2LDcgKzMxNSw4IEBACiAJfQogCiAJLyogc3dpdGNoIGF1ZGlvICovCi0Jc3dpdGNoIChzdGF0ZS0+YXVkbW9kZSkgeworCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZXQgYXVkbW9kZSAlZFxuIiwgYXVkbW9kZSk7CisJc3dpdGNoIChhdWRtb2RlKSB7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgogCQlzcmMgfD0gMHgwMDIwOwpAQCAtMzE0LDEwICszMzQsNiBAQAogCQkJc3JjID0gMHgwMDMwOwogCQlicmVhazsKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJLyogc3dpdGNoIHRvIHN0ZXJlbyBmb3Igc3RlcmVvIHRyYW5zbWlzc2lvbiwgb3RoZXJ3aXNlCi0JCSAgIGtlZXAgZmlyc3QgbGFuZ3VhZ2UgKi8KLQkJaWYgKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQotCQkJc3JjIHw9IDB4MDAyMDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CiAJCXNyYyB8PSAweDAwMTA7CkBAIC0zNjcsNyArMzgzLDcgQEAKIAkJaWYgKHZhbCA+IDMyNzY3KQogCQkJdmFsIC09IDY1NTM2OwogCQl2NGxfZGJnKDIsIG1zcF9kZWJ1ZywgY2xpZW50LCAic3RlcmVvIGRldGVjdCByZWdpc3RlcjogJWRcbiIsIHZhbCk7Ci0JCWlmICh2YWwgPiA0MDk2KSB7CisJCWlmICh2YWwgPiA4MTkyKSB7CiAJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCQl9IGVsc2UgaWYgKHZhbCA8IC00MDk2KSB7CiAJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKQEAgLTQ2NCwxOSArNDgwLDIyIEBACiAJCWlmIChzdGF0ZS0+cmFkaW8gfHwgTVNQX01PREVfRVhURVJOID09IHN0YXRlLT5tb2RlKSB7CiAJCQkvKiBubyBjYXJyaWVyIHNjYW4sIGp1c3QgdW5tdXRlICovCiAJCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidGhyZWFkOiBubyBjYXJyaWVyIHNjYW5cbiIpOworCQkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAwOwogCQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBtdXRlICovCi0JCW1zcF9zZXRfbXV0ZShjbGllbnQpOworCQkvKiBtdXRlIGF1ZGlvICovCisJCXN0YXRlLT5zY2FuX2luX3Byb2dyZXNzID0gMTsKKwkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCiAJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfQU1fREVURUNUKTsKIAkJdmFsMSA9IHZhbDIgPSAwOwogCQltYXgxID0gbWF4MiA9IC0xOwogCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMDsKIAkJc3RhdGUtPm5pY2FtX29uID0gMDsKIAotCQkvKiBzb21lIHRpbWUgZm9yIHRoZSB0dW5lciB0byBzeW5jICovCisJCS8qIHdhaXQgZm9yIHR1bmVyIHRvIHNldHRsZSBkb3duIGFmdGVyIGEgY2hhbm5lbCBjaGFuZ2UgKi8KIAkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgMjAwKSkKIAkJCWdvdG8gcmVzdGFydDsKIApAQCAtNTUyLDcgKzU3MSw2IEBACiAJCQkJLyogQi9HIE5JQ0FNICovCiAJCQkJc3RhdGUtPnNlY29uZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzU1W21heDJdLmNkbzsKIAkJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMSk7Ci0JCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CiAJCQkJc3RhdGUtPm5pY2FtX29uID0gMTsKIAkJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCX0gZWxzZSB7CkBAIC01NjMsNyArNTgxLDYgQEAKIAkJCS8qIFBBTCBJIE5JQ0FNICovCiAJCQlzdGF0ZS0+c2Vjb25kID0gTVNQX0NBUlJJRVIoNi41NTIpOwogCQkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9OSUNBTTIpOwotCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CiAJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwogCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQlicmVhazsKQEAgLTU3NywxMyArNTk0LDExIEBACiAJCQkJLyogTCBOSUNBTSBvciBBTS1tb25vICovCiAJCQkJc3RhdGUtPnNlY29uZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzY1W21heDJdLmNkbzsKIAkJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0FNX05JQ0FNKTsKLQkJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAkJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCX0gZWxzZSBpZiAobWF4MiA9PSAwICYmIHN0YXRlLT5oYXNfbmljYW0pIHsKIAkJCQkvKiBEL0sgTklDQU0gKi8KIAkJCQlzdGF0ZS0+c2Vjb25kID0gbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOwogCQkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0xKTsKLQkJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAkJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwogCQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJfSBlbHNlIHsKQEAgLTU5NSwyNSArNjEwLDI1IEBACiAJCW5vX3NlY29uZDoKIAkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluW21heDFdLmNkbzsKIAkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fVEVSUkEpOwotCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7Ci0JCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCQlicmVhazsKIAkJfQorCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAogCQkvKiB1bm11dGUgKi8KLQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7CiAJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCk7CisJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKIAogCQlpZiAobXNwX2RlYnVnKQogCQkJbXNwMzQwMGNfcHJpbnRfbW9kZShjbGllbnQpOwogCiAJCS8qIG1vbml0b3IgdHYgYXVkaW8gbW9kZSwgdGhlIGZpcnN0IHRpbWUgZG9uJ3Qgd2FpdAogCQkgICBzbyBsb25nIHRvIGdldCBhIHF1aWNrIHN0ZXJlby9iaWxpbmd1YWwgcmVzdWx0ICovCi0JCWlmIChtc3Bfc2xlZXAoc3RhdGUsIDEwMDApKQotCQkJZ290byByZXN0YXJ0OworCQljb3VudCA9IDM7CiAJCXdoaWxlIChzdGF0ZS0+d2F0Y2hfc3RlcmVvKSB7Ci0JCQlpZiAobXNwX3NsZWVwKHN0YXRlLCA1MDAwKSkKKwkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIGNvdW50ID8gMTAwMCA6IDUwMDApKQogCQkJCWdvdG8gcmVzdGFydDsKKwkJCWlmIChjb3VudCkgY291bnQtLTsKIAkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOwogCQl9CiAJfQpAQCAtNjI2LDcgKzY0MSw3IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGE7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgdmFsLCBpLCBzdGQ7CisJaW50IHZhbCwgaSwgc3RkLCBjb3VudDsKIAogCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJtc3AzNDEwIGRhZW1vbiBzdGFydGVkXG4iKTsKIApAQCAtNjQ0LDE2ICs2NTksMTQgQEAKIAkJaWYgKHN0YXRlLT5tb2RlID09IE1TUF9NT0RFX0VYVEVSTikgewogCQkJLyogbm8gY2FycmllciBzY2FuIG5lZWRlZCwganVzdCB1bm11dGUgKi8KIAkJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7CisJCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7CiAJCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIHB1dCBpbnRvIHNhbmUgc3RhdGUgKGFuZCBtdXRlKSAqLwotCQltc3BfcmVzZXQoY2xpZW50KTsKLQotCQkvKiBzb21lIHRpbWUgZm9yIHRoZSB0dW5lciB0byBzeW5jICovCi0JCWlmIChtc3Bfc2xlZXAoc3RhdGUsMjAwKSkKLQkJCWdvdG8gcmVzdGFydDsKKwkJLyogbXV0ZSBhdWRpbyAqLworCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDE7CisJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKIAogCQkvKiBzdGFydCBhdXRvZGV0ZWN0LiBOb3RlOiBhdXRvZGV0ZWN0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yCiAJCSAgIE5UU0MtTSBhbmQgcmFkaW8sIGhlbmNlIHdlIGZvcmNlIHRoZSBzdGFuZGFyZCBpbiB0aG9zZSBjYXNlcy4gKi8KQEAgLTY2NCw2ICs2NzcsMTAgQEAKIAkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDA7CiAJCXN0YXRlLT5uaWNhbV9vbiA9IDA7CiAKKwkJLyogd2FpdCBmb3IgdHVuZXIgdG8gc2V0dGxlIGRvd24gYWZ0ZXIgYSBjaGFubmVsIGNoYW5nZSAqLworCQlpZiAobXNwX3NsZWVwKHN0YXRlLCAyMDApKQorCQkJZ290byByZXN0YXJ0OworCiAJCWlmIChtc3BfZGVidWcpCiAJCQl2NGxfZGJnKDIsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2V0dGluZyBzdGFuZGFyZDogJXMgKDB4JTA0eClcbiIsCiAJCQkgICAgICAgbXNwX3N0YW5kYXJkX3N0ZF9uYW1lKHN0ZCksIHN0ZCk7CkBAIC02OTMsNiArNzEwLDcgQEAKIAkJc3RhdGUtPm1haW4gICA9IG1zcF9zdGRsaXN0W2ldLm1haW47CiAJCXN0YXRlLT5zZWNvbmQgPSBtc3Bfc3RkbGlzdFtpXS5zZWNvbmQ7CiAJCXN0YXRlLT5zdGQgPSB2YWw7CisJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAogCQlpZiAobXNwX2Ftc291bmQgJiYgIXN0YXRlLT5yYWRpbyAmJiAoc3RhdGUtPnY0bDJfc3RkICYgVjRMMl9TVERfU0VDQU0pICYmCiAJCQkJKHZhbCAhPSAweDAwMDkpKSB7CkBAIC03MTQsMjAgKzczMiwxNyBAQAogCQkJZWxzZQogCQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fTklDQU0xOwogCQkJLyoganVzdCB0dXJuIG9uIHN0ZXJlbyAqLwotCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwogCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAweDAwMDk6CiAJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0FNX05JQ0FNOwotCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCQkJc3RhdGUtPm5pY2FtX29uID0gMTsKIAkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDIwOiAvKiBCVFNDICovCiAJCQkvKiBUaGUgcHJlLSdHJyBtb2RlbHMgb25seSBoYXZlIEJUU0MtbW9ubyAqLwogCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9CVFNDOwotCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDQwOiAvKiBGTSByYWRpbyAqLwogCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9GTV9SQURJTzsKQEAgLTczNywxNSArNzUyLDEyIEBACiAJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1JBRElPKTsKIAkJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoMTAuNyksCiAJCQkJCSAgICBNU1BfQ0FSUklFUigxMC43KSk7Ci0JCQkvKiBzY2FydCByb3V0aW5nICh0aGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUgSSB0aGluaykgKi8KLQkJCW1zcF9zZXRfc2NhcnQoY2xpZW50LFNDQVJUX0lOMiwwKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDAwMjoKIAkJY2FzZSAweDAwMDM6CiAJCWNhc2UgMHgwMDA0OgogCQljYXNlIDB4MDAwNToKIAkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fVEVSUkE7Ci0JCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC03NTksMjAgKzc3MSwxOSBAQAogCQlpZiAoc3RhdGUtPmhhc19pMnNfY29uZikKIAkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOwogCi0JCS8qIHVubXV0ZSwgcmVzdG9yZSBtaXNjIHJlZ2lzdGVycyAqLwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7Ci0KLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIHN0YXRlLT5hY2IpOworCQkvKiB1bm11dGUgKi8KIAkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50KTsKKwkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAwOworCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CiAKIAkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlLCB0aGUgZmlyc3QgdGltZSBkb24ndCB3YWl0CiAJCSAgIHNvIGxvbmcgdG8gZ2V0IGEgcXVpY2sgc3RlcmVvL2JpbGluZ3VhbCByZXN1bHQgKi8KLQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgMTAwMCkpCi0JCQlnb3RvIHJlc3RhcnQ7CisJCWNvdW50ID0gMzsKIAkJd2hpbGUgKHN0YXRlLT53YXRjaF9zdGVyZW8pIHsKLQkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOwotCQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgNTAwMCkpCisJCQlpZiAobXNwX3NsZWVwKHN0YXRlLCBjb3VudCA/IDEwMDAgOiA1MDAwKSkKIAkJCQlnb3RvIHJlc3RhcnQ7CisJCQlpZiAoY291bnQpIGNvdW50LS07CisJCQl3YXRjaF9zdGVyZW8oY2xpZW50KTsKIAkJfQogCX0KIAl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidGhyZWFkOiBleGl0XG4iKTsKQEAgLTgyOSwyNyArODQwLDI3IEBACiAJCXNvdXJjZSA9IDA7IC8qIG1vbm8gb25seSAqLwogCQltYXRyaXggPSAweDMwOwogCQlicmVhazsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJc291cmNlID0gMzsgLyogc3RlcmVvIG9yIEEgKi8KLQkJbWF0cml4ID0gMHgwMDsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CiAJCXNvdXJjZSA9IDQ7IC8qIHN0ZXJlbyBvciBCICovCiAJCW1hdHJpeCA9IDB4MTA7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKLQlkZWZhdWx0OgogCQlzb3VyY2UgPSAxOyAvKiBzdGVyZW8gb3IgQXxCICovCiAJCW1hdHJpeCA9IDB4MjA7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwlkZWZhdWx0OgorCQlzb3VyY2UgPSAzOyAvKiBzdGVyZW8gb3IgQSAqLworCQltYXRyaXggPSAweDAwOworCQlicmVhazsKIAl9CiAKLQlpZiAoaW4gPT0gTVNQX0RTUF9PVVRfVFVORVIpCisJaWYgKGluID09IE1TUF9EU1BfSU5fVFVORVIpCiAJCXNvdXJjZSA9IChzb3VyY2UgPDwgOCkgfCAweDIwOwogCS8qIHRoZSBtc3AzNHgyZyBwdXRzIHRoZSBNQUlOX0FWQywgTUFJTiBhbmQgQVVYIHNvdXJjZXMgaW4gMTIsIDEzLCAxNAogCSAgIGluc3RlYWQgb2YgMTEsIDEyLCAxMy4gU28gd2UgYWRkIG9uZSBmb3IgdGhhdCBtc3AgdmVyc2lvbi4gKi8KLQllbHNlIGlmIChpbiA+PSBNU1BfRFNQX09VVF9NQUlOX0FWQyAmJiBzdGF0ZS0+aGFzX2RvbGJ5X3Byb19sb2dpYykKKwllbHNlIGlmIChpbiA+PSBNU1BfRFNQX0lOX01BSU5fQVZDICYmIHN0YXRlLT5oYXNfZG9sYnlfcHJvX2xvZ2ljKQogCQlzb3VyY2UgPSAoKGluICsgMSkgPDwgOCkgfCBtYXRyaXg7CiAJZWxzZQogCQlzb3VyY2UgPSAoaW4gPDwgOCkgfCBtYXRyaXg7CkBAIC04NjksNyArODgwLDcgQEAKIAltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgMHgwMDBjLCAoaW4gPj4gNCkgJiAweGYpOwogCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCAweDAwMDksIChpbiA+PiA4KSAmIDB4Zik7CiAJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDAwYSwgKGluID4+IDEyKSAmIDB4Zik7Ci0JaWYgKHN0YXRlLT5oYXNfc2NhcnQyM19pbl9zY2FydDJfb3V0KQorCWlmIChzdGF0ZS0+aGFzX3NjYXJ0Ml9vdXQpCiAJCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCAweDAwNDEsIChpbiA+PiAxNikgJiAweGYpOwogCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCAweDAwMGIsIChpbiA+PiAyMCkgJiAweGYpOwogfQpAQCAtODg3LDEwICs4OTgsNiBAQAogCiAJbXNwX3Jlc2V0KGNsaWVudCk7CiAKLQkvKiBtYWtlIHN1cmUgdGhhdCBpbnB1dC9vdXRwdXQgaXMgbXV0ZWQgKHBhcmFub2lkIG1vZGUpICovCi0JLyogQUNCLCBtdXRlIERTUCBpbnB1dCwgbXV0ZSBTQ0FSVCAxICovCi0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIDB4MGYyMCk7Ci0KIAlpZiAoc3RhdGUtPmhhc19pMnNfY29uZikKIAkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7CiAKQEAgLTEwMjgsNyArMTAzNSw3IEBACiAKIAlpZiAoc3RhdGUtPnN0ZCA9PSAweDIwKSB7CiAJICAgICAgIGlmICgoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TQVApICYmCi0JCSAgIChzdGF0ZS0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHx8CisJCSAgIChzdGF0ZS0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgfHwKIAkJICAgIHN0YXRlLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikpIHsKIAkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCAweDIxKTsKIAkgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzY2JjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCkBAIC0wLDAgKzEsMjggQEAKK2NvbmZpZyBVU0JfUFdDCisJdHJpc3RhdGUgIlVTQiBQaGlsaXBzIENhbWVyYXMiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZXNlIFBoaWxpcHMgJiBPRU0KKwkgIHdlYmNhbXM6CisJICAgKiBQaGlsaXBzIFBDQTY0NSwgUENBNjQ2CisJICAgKiBQaGlsaXBzIFBDVkM2NzUsIFBDVkM2ODAsIFBDVkM2OTAKKwkgICAqIFBoaWxpcHMgUENWQzcyMC80MCwgUENWQzczMCwgUENWQzc0MCwgUENWQzc1MAorCSAgICogQXNrZXkgVkMwMTAKKwkgICAqIExvZ2l0ZWNoIFF1aWNrQ2FtIFBybyAzMDAwLCA0MDAwLCAnWm9vbScsICdOb3RlYm9vayBQcm8nCisJICAgICBhbmQgJ09yYml0Jy8nU3BoZXJlJworCSAgICogU2Ftc3VuZyBNUEMtQzEwLCBNUEMtQzMwCisJICAgKiBDcmVhdGl2ZSBXZWJjYW0gNSwgUHJvIEV4CisJICAgKiBTT1RFQyBBZmluYSBFeWUKKwkgICAqIFZpc2lvbml0ZSBWQ1MtVUMzMDAsIFZDUy1VTTEwMAorCisJICBUaGUgUENBNjM1LCBQQ1ZDNjY1IGFuZCBQQ1ZDNzIwLzIwIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJICBhbmQgbmV2ZXIgd2lsbCBiZSwgYnV0IHRoZSA2NjUgYW5kIDcyMC8yMCBhcmUgc3VwcG9ydGVkIGJ5IG90aGVyCisJICBkcml2ZXJzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcGhpbGlwcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAorCSAgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KKworCSAgVGhlIGJ1aWx0LWluIG1pY3JvcGhvbmUgaXMgZW5hYmxlZCBieSBzZWxlY3RpbmcgVVNCIEF1ZGlvIHN1cHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB3Yy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvTWFrZWZpbGUKaW5kZXggODMyNjY4NC4uMzNkNjAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvTWFrZWZpbGUKQEAgLTEsMjAgKzEsMyBAQAotaWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQotCiBwd2Mtb2Jqcwk6PSBwd2MtaWYubyBwd2MtbWlzYy5vIHB3Yy1jdHJsLm8gcHdjLXVuY29tcHJlc3MubyBwd2MtdGltb24ubyBwd2Mta2lhcmEubwogCiBvYmotJChDT05GSUdfVVNCX1BXQykgKz0gcHdjLm8KLQotZWxzZQotCi1LRElSIDo9IC9saWIvbW9kdWxlcy8kKHNoZWxsIHVuYW1lIC1yKS9idWlsZAotUFdEIDo9ICQoc2hlbGwgcHdkKQotCi1kZWZhdWx0OgotCSQoTUFLRSkgLUMgJChLRElSKSBTVUJESVJTPSQoUFdEKSBtb2R1bGVzCi0KLWVuZGlmCi0KLWNsZWFuOgotCXJtIC1mICouW29hc10gLiouZmxhZ3MgKi5rbyAuKi5jbWQgLiouZCAuKi50bXAgKi5tb2QuYwotCXJtIC1yZiAudG1wX3ZlcnNpb25zCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggYjA1MDE1Mi4uZGNlZWJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTMvU0FBNzExNC9TQUE3MTE1IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CkBAIC01Myw3ICs1NCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkJMHg0YSA+PjEsIDB4NDggPj4xLAkvKiBTQUE3MTEzICovCisJCTB4NGEgPj4gMSwgMHg0OCA+PiAxLAkvKiBTQUE3MTEzICovCiAJCTB4NDIgPj4gMSwgMHg0MCA+PiAxLAkvKiBTQUE3MTE0IGFuZCBTQUE3MTE1ICovCiAJCUkyQ19DTElFTlRfRU5EIH07CiAKQEAgLTcyMiwxNiArNzIzLDE2IEBACiAJMTAwIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICBOVFNDLUphcGFuICgzLjU4TUh6KQogCSovCiAJaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKLQkJdTggcmVnID0gIHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MGUpICYgMHg4ZjsKKwkJdTggcmVnID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMHgwZSkgJiAweDhmOwogCiAJCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMX00pIHsKLQkJCXJlZ3w9MHgzMDsKKwkJCXJlZyB8PSAweDMwOwogCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTikgewotCQkJcmVnfD0weDIwOworCQkJcmVnIHw9IDB4MjA7CiAJCX0gZWxzZSBpZiAoc3RkID09IFY0TDJfU1REX1BBTF82MCkgewotCQkJcmVnfD0weDEwOworCQkJcmVnIHw9IDB4MTA7CiAJCX0gZWxzZSBpZiAoc3RkID09IFY0TDJfU1REX05UU0NfTV9KUCkgewotCQkJcmVnfD0weDQwOworCQkJcmVnIHw9IDB4NDA7CiAJCX0KIAkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MGUsIHJlZyk7CiAJfQpAQCAtODExLDcgKzgxMiw3IEBACiAJdTggbGNyWzI0XTsKIAlpbnQgaSwgeDsKIAotCS8qIHNhYTcxMTMvNzExNDQgZG9lc24ndCB5ZXQgc3VwcG9ydCBWQkkgKi8KKwkvKiBzYWE3MTEzLzcxMTQgZG9lc24ndCB5ZXQgc3VwcG9ydCBWQkkgKi8KIAlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkKIAkJcmV0dXJuOwogCkBAIC04NTEsNyArODUyLDcgQEAKIAkJCQkJY2FzZSAwOgogCQkJCQkJbGNyW2ldIHw9IDB4ZiA8PCAoNCAqIHgpOwogCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0I6CisJCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKIAkJCQkJCWxjcltpXSB8PSAxIDw8ICg0ICogeCk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNToKQEAgLTg4MCw3ICs4ODEsNyBAQAogc3RhdGljIGludCBzYWE3MTE1X2dldF92NGxmbXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJc3RhdGljIHUxNiBsY3IydmJpW10gPSB7Ci0JCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CLCAwLAkvKiAxICovCisJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KIAkJMCwgVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDQgKi8KIAkJVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJCS8qIDUgKi8KIAkJVjRMMl9TTElDRURfVlBTLCAwLCAwLCAwLCAwLAkvKiA3ICovCkBAIC0xMDQ1LDcgKzEwNDYsNyBAQAogCS8qIGRlY29kZSBwYXlsb2FkcyAqLwogCXN3aXRjaCAoaWQyKSB7CiAJY2FzZSAxOgotCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQjsKKwkJdmJpLT50eXBlID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlpZiAoIXNhYTcxMTVfb2RkX3Bhcml0eShwWzBdKSB8fCAhc2FhNzExNV9vZGRfcGFyaXR5KHBbMV0pKQpAQCAtMTE4MCw2ICsxMTgxLDQ2IEBACiAJCXN0YXRlLT5yYWRpbyA9IDE7CiAJCWJyZWFrOwogCisJY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKKwl7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCisJCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT5pbnB1dDsKKwkJcm91dGUtPm91dHB1dCA9IDA7CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6CisJeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJkZWNvZGVyIHNldCBpbnB1dCAlZFxuIiwgcm91dGUtPmlucHV0KTsKKwkJLyogc2FhNzExMyBkb2VzIG5vdCBoYXZlIHRoZXNlIGlucHV0cyAqLworCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMyAmJgorCQkgICAgKHJvdXRlLT5pbnB1dCA9PSBTQUE3MTE1X0NPTVBPU0lURTQgfHwKKwkJICAgICByb3V0ZS0+aW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU1KSkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHJvdXRlLT5pbnB1dCA+IFNBQTcxMTVfU1ZJREVPMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoc3RhdGUtPmlucHV0ID09IHJvdXRlLT5pbnB1dCkKKwkJCWJyZWFrOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3cgc2V0dGluZyAlcyBpbnB1dFxuIiwKKwkJCShyb3V0ZS0+aW5wdXQgPj0gU0FBNzExNV9TVklERU8wKSA/ICJTLVZpZGVvIiA6ICJDb21wb3NpdGUiKTsKKwkJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OworCisJCS8qIHNlbGVjdCBtb2RlICovCisJCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDAyLAorCQkJICAgICAgKHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MDIpICYgMHhmMCkgfAorCQkJICAgICAgIHN0YXRlLT5pbnB1dCk7CisKKwkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIFMtVmlkZW8gbW9kZXMgKi8KKwkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MDksCisJCQkgICAgICAoc2FhNzExNV9yZWFkKGNsaWVudCwgMHgwOSkgJiAweDdmKSB8CisJCQkgICAgICAgKHN0YXRlLT5pbnB1dCA+PSBTQUE3MTE1X1NWSURFTzAgPyAweDgwIDogMHgwKSk7CisJCWJyZWFrOworCX0KKwogCWNhc2UgVklESU9DX0dfSU5QVVQ6CiAJCSooaW50ICopYXJnID0gc3RhdGUtPmlucHV0OwogCQlicmVhazsKQEAgLTEzMjEsNyArMTM2Miw3IEBACiAKIAlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMCwgNSk7CiAJY2hpcF9pZCA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDApICYgMHgwZjsKLQlpZiAoY2hpcF9pZCA8MyAmJiBjaGlwX2lkID4gNSkgeworCWlmIChjaGlwX2lkIDwgMyAmJiBjaGlwX2lkID4gNSkgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzYWE3MTE1IG5vdCBmb3VuZFxuIik7CiAJCWtmcmVlKGNsaWVudCk7CiAJCXJldHVybiAwOwpAQCAtMTM2MCw3ICsxNDAxLDcgQEAKIAl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0aW5nIGluaXQgdmFsdWVzXG4iKTsKIAogCS8qIGluaXQgdG8gNjBoei80OGtoeiAqLwotCWlmIChzdGF0ZS0+aWRlbnQ9PVY0TDJfSURFTlRfU0FBNzExMykKKwlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMykKIAkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTEzX2luaXRfYXV0b19pbnB1dCk7CiAJZWxzZQogCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfaW5pdF9hdXRvX2lucHV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggOTkyYzcxNy4uYzI3MWUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3NhYTcxMjcuaD4KIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7CiBzdGF0aWMgaW50IHRlc3RfaW1hZ2UgPSAwOwpAQCAtMTQxLDYgKzE0Miw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyOV9pbml0X2NvbmZpZ19leHRyYVtdID0gewogCXsgU0FBNzEyN19SRUdfT1VUUFVUX1BPUlRfQ09OVFJPTCwgCQkweDM4IH0sCiAJeyBTQUE3MTI3X1JFR19WVFJJRywgCQkJCTB4ZmEgfSwKKwl7IDAsIDAgfQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfY29tbW9uW10gPSB7CkBAIC0yMjIsMjIgKzIyNCw2IEBACiAJeyAwLCAwIH0KIH07CiAKLS8qIEVudW1lcmF0aW9uIGZvciB0aGUgU3VwcG9ydGVkIGlucHV0IHR5cGVzICovCi1lbnVtIHNhYTcxMjdfaW5wdXRfdHlwZSB7Ci0JU0FBNzEyN19JTlBVVF9UWVBFX05PUk1BTCwKLQlTQUE3MTI3X0lOUFVUX1RZUEVfVEVTVF9JTUFHRQotfTsKLQotLyogRW51bWVyYXRpb24gZm9yIHRoZSBTdXBwb3J0ZWQgT3V0cHV0IHNpZ25hbCB0eXBlcyAqLwotZW51bSBzYWE3MTI3X291dHB1dF90eXBlIHsKLQlTQUE3MTI3X09VVFBVVF9UWVBFX0JPVEgsCi0JU0FBNzEyN19PVVRQVVRfVFlQRV9DT01QT1NJVEUsCi0JU0FBNzEyN19PVVRQVVRfVFlQRV9TVklERU8sCi0JU0FBNzEyN19PVVRQVVRfVFlQRV9SR0IsCi0JU0FBNzEyN19PVVRQVVRfVFlQRV9ZVVZfQywKLQlTQUE3MTI3X09VVFBVVF9UWVBFX1lVVl9WCi19OwotCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC01NjEsNyArNTQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQlpbnQgKmlhcmcgPSBhcmc7CisJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1NfU1REOgpAQCAtNTczLDE1ICs1NTksMjMgQEAKIAkJKih2NGwyX3N0ZF9pZCAqKWFyZyA9IHN0YXRlLT5zdGQ7CiAJCWJyZWFrOwogCi0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJaWYgKHN0YXRlLT5pbnB1dF90eXBlID09ICppYXJnKQotCQkJYnJlYWs7Ci0JCXJldHVybiBzYWE3MTI3X3NldF9pbnB1dF90eXBlKGNsaWVudCwgKmlhcmcpOworCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6CisJCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT5pbnB1dF90eXBlOworCQlyb3V0ZS0+b3V0cHV0ID0gc3RhdGUtPm91dHB1dF90eXBlOworCQlicmVhazsKIAotCWNhc2UgVklESU9DX1NfT1VUUFVUOgotCQlpZiAoc3RhdGUtPm91dHB1dF90eXBlID09ICppYXJnKQotCQkJYnJlYWs7Ci0JCXJldHVybiBzYWE3MTI3X3NldF9vdXRwdXRfdHlwZShjbGllbnQsICppYXJnKTsKKwljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgorCXsKKwkJaW50IHJjID0gMDsKKworCQlpZiAoc3RhdGUtPmlucHV0X3R5cGUgIT0gcm91dGUtPmlucHV0KSB7CisJCQlyYyA9IHNhYTcxMjdfc2V0X2lucHV0X3R5cGUoY2xpZW50LCByb3V0ZS0+aW5wdXQpOworCQl9CisJCWlmIChyYyA9PSAwICYmIHN0YXRlLT5vdXRwdXRfdHlwZSAhPSByb3V0ZS0+b3V0cHV0KSB7CisJCQlyYyA9IHNhYTcxMjdfc2V0X291dHB1dF90eXBlKGNsaWVudCwgcm91dGUtPm91dHB1dCk7CisJCX0KKwkJcmV0dXJuIHJjOworCX0KIAogCWNhc2UgVklESU9DX1NUUkVBTU9OOgogCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKaW5kZXggODY2NzFhNC4uZTFjMTgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKQEAgLTM5LDYgKzM5LDcgQEAKIAl0cmlzdGF0ZSAiRFZCL0FUU0MgU3VwcG9ydCBmb3Igc2FhNzEzNCBiYXNlZCBUViBjYXJkcyIKIAlkZXBlbmRzIG9uIFZJREVPX1NBQTcxMzQgJiYgRFZCX0NPUkUKIAlzZWxlY3QgVklERU9fQlVGX0RWQgorCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKaW5kZXggMWJhOTk4NC4uYmU3YjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQpAQCAtMTEsOSArMTEsOSBAQAogCiBvYmotJChDT05GSUdfVklERU9fU0FBNzEzNF9EVkIpICs9IHNhYTcxMzQtZHZiLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCi1FWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwogCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fQlVGX0RWQikgKz0gLURIQVZFX1ZJREVPX0JVRl9EVkI9MQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9NVDM1MikgICAgICs9IC1ESEFWRV9NVDM1Mj0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCBmZGQ3ZjQ4Li44NmVhZTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCVtTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk1dID0gewogCQkvKiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAoTFIyMTRXRikgKi8KIAkJLyogIlBldGVyIE1pc3NlbCA8cGV0ZXIubWlzc2VsQG9ubGluZWhvbWUuZGU+ICovCi0JCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSIsCisJCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAvIEdvbGQiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULApAQCAtMjY2MCw3ICsyNjYwLDcgQEAKIAkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKIAkJLmlucHV0cyA9IHt7CiAJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKLQkJCS52bXV4ICAgPSAwLAorCQkJLnZtdXggICA9IDEsCiAJCQkuYW11eCAgID0gTElORTEsCiAJCX0sewogCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLApAQCAtMjY3MSw3ICsyNjcxLDcgQEAKIAlbU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0xSMzAxXSA9IHsKIAkJLyogTGlmZVZpZXcgRmx5RFZCLVQgKi8KIAkJLyogR2lhbXBpZXJvIEdpYW5jaXBvbGkgPGdpYW5jaUBsaWJlcm8uaXQ+ICovCi0JCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlEVkItVCIsCisJCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlEVkItVCAvIEdlbml1cyBWaWRlb1dvbmRlciBEVkItVCIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCkBAIC0yODA4LDYgKzI4MDgsNDAgQEAKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTXSA9IHsKKwkJLm5hbWUJCT0gIkxpZmVWaWV3IEZseURWQi1UIEh5YnJpZCBDYXJkYnVzIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDA2MDAwMDAsIC8qIEJpdCAyMSAwPVJhZGlvLCBCaXQgMjIgMD1UViAqLworCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgyMDAwMDAsCS8qIEdQSU8yMT1IaWdoIGZvciBUViBpbnB1dCAqLworCQkJLnR2ICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCS8qIFMtVmlkZW8gc2lnbmFsIG9uIFMtVmlkZW8gaW5wdXQgKi8KKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAkvKiBDb21wb3NpdGUgc2lnbmFsIG9uIFMtVmlkZW8gaW5wdXQgKi8KKwkJCS52bXV4ID0gMCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAyLAkvKiBDb21wb3NpdGUgaW5wdXQgKi8KKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAwMDAwMCwJLyogR1BJTzIxPUxvdyBmb3IgRk0gcmFkaW8gYW50ZW5uYSAqLworCQl9LAorCX0sCiB9OwogCiBjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzEzNF9iY291bnQgPSBBUlJBWV9TSVpFKHNhYTcxMzRfYm9hcmRzKTsKQEAgLTMzMzMsNiArMzM2NywzMCBAQAogCQkuc3ViZGV2aWNlICAgID0gMHgwMDA1LAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9NRDcxMzRfQlJJREdFXzIsCiAJfSx7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciA9IDB4MTQ4OSwKKwkJLnN1YmRldmljZSA9IDB4MDMwMSwKKwkJLmRyaXZlcl9kYXRhID0gU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0xSMzAxLAorCX0seworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgPSAweDUxNjgsIC8qIEFuaW1hdGlvbiBUZWNobm9sb2dpZXMgKExpZmVWaWV3KSAqLworCQkuc3ViZGV2aWNlID0gMHgwMzA0LAorCQkuZHJpdmVyX2RhdGEgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk0sCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OCwKKwkJLnN1YmRldmljZSAgICA9IDB4MzMwNiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9IWUJSSURfQ0FSREJVUywKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHg1MTY4LAorCQkuc3ViZGV2aWNlICAgID0gMHgzNTAyLCAgLyogd2hhdHMgdGhlIGRpZmZlcmVuY2UgdG8gMHgzMzA2ID8qLworCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTLAorCX0sewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC0zNDQ2LDYgKzM1MDQsNyBAQAogCQkvKiBwb3dlci11cCB0dW5lciBjaGlwICovCiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDQwMDAwLCAweDAwMDQwMDAwKTsKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwNDAwMDAsIDB4MDAwMDAwMDApOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfMzAwSV9EVkJUX1BBTDoKIAkJLyogdGhpcyB0dXJucyB0aGUgcmVtb3RlIGNvbnRyb2wgY2hpcCBvZmYgdG8gd29yayBhcm91bmQgYSBidWcgaW4gaXQgKi8KIAkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMSwgMHg4MCk7CkBAIC0zNDYyLDYgKzM1MjEsNyBAQAogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzMsIDB4MDYpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0RVT19DQVJEQlVTX1BUVjMzMToKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9IWUJSSURfQ0FSREJVUzoKIAkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgMHgwOCk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMywgMHgwMCk7CiAJCWJyZWFrOwpAQCAtMzYzMyw2ICszNjkzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0RVT19DQVJEQlVTX1BUVjMzMToKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9IWUJSSURfQ0FSREJVUzoKIAkJLyogbWFrZSB0aGUgdGRhMTAwNDYgZmluZCBpdHMgZWVwcm9tICovCiAJCXsKIAkJdTggZGF0YVtdID0geyAweDNjLCAweDMzLCAweDYyfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCBjOTg1NzFjLi5mMGMyMTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgogI2luY2x1ZGUgInNhYTcxMzQuaCIKQEAgLTU0Nyw2ICs1NDgsOCBAQAogCQlpZiAocmVwb3J0ICYgU0FBNzEzNF9JUlFfUkVQT1JUX0dQSU8xNikgewogCQkJc3dpdGNoIChkZXYtPmhhc19yZW1vdGUpIHsKIAkJCQljYXNlIFNBQTcxMzRfUkVNT1RFX0dQSU86CisJCQkJCWlmICghZGV2LT5yZW1vdGUpCisJCQkJCQlicmVhazsKIAkJCQkJaWYgIChkZXYtPnJlbW90ZS0+bWFza19rZXlkb3duICYgMHgxMDAwMCkgewogCQkJCQkJc2FhNzEzNF9pbnB1dF9pcnEoZGV2KTsKIAkJCQkJfQpAQCAtNTYzLDYgKzU2Niw4IEBACiAJCWlmIChyZXBvcnQgJiBTQUE3MTM0X0lSUV9SRVBPUlRfR1BJTzE4KSB7CiAJCQlzd2l0Y2ggKGRldi0+aGFzX3JlbW90ZSkgewogCQkJCWNhc2UgU0FBNzEzNF9SRU1PVEVfR1BJTzoKKwkJCQkJaWYgKCFkZXYtPnJlbW90ZSkKKwkJCQkJCWJyZWFrOwogCQkJCQlpZiAoKGRldi0+cmVtb3RlLT5tYXNrX2tleWRvd24gJiAweDQwMDAwKSB8fAogCQkJCQkgICAgKGRldi0+cmVtb3RlLT5tYXNrX2tleXVwICYgMHg0MDAwMCkpIHsKIAkJCQkJCXNhYTcxMzRfaW5wdXRfaXJxKGRldik7CkBAIC02NzUsNyArNjgwLDcgQEAKIAkJU0FBNzEzNF9JUlEyX0lOVEVfUEUgICAgICB8CiAJCVNBQTcxMzRfSVJRMl9JTlRFX0FSOwogCi0JaWYgKGRldi0+aGFzX3JlbW90ZSA9PSBTQUE3MTM0X1JFTU9URV9HUElPKSB7CisJaWYgKGRldi0+aGFzX3JlbW90ZSA9PSBTQUE3MTM0X1JFTU9URV9HUElPICYmIGRldi0+cmVtb3RlKSB7CiAJCWlmIChkZXYtPnJlbW90ZS0+bWFza19rZXlkb3duICYgMHgxMDAwMCkKIAkJCWlycTJfbWFzayB8PSBTQUE3MTM0X0lSUTJfSU5URV9HUElPMTY7CiAJCWVsc2UgaWYgKGRldi0+cmVtb3RlLT5tYXNrX2tleWRvd24gJiAweDQwMDAwKQpAQCAtODcwLDcgKzg3NSw3IEBACiAJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpLCBkZXYtPnBjaV9yZXYsIHBjaV9kZXYtPmlycSwKIAkgICAgICAgZGV2LT5wY2lfbGF0LHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApKTsKIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKLQlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKHBjaV9kZXYsMHhmZmZmZmZmZikpIHsKKwlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKHBjaV9kZXYsIERNQV8zMkJJVF9NQVNLKSkgewogCQlwcmludGsoIiVzOiBPb3BzOiBubyAzMmJpdCBQQ0kgRE1BID8/P1xuIixkZXYtPm5hbWUpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGZhaWwxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCA4NmNmZGI4Li4yMjJhMzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMTA2NCw2ICsxMDY0LDEwIEBACiAJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZ0ZXZpb25fZHZidDIyMHJmX2NvbmZpZywKIAkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmYWRzX3RlY2hfZHVvX2NvbmZpZywKKwkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9OWFQyMDBYCiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BVkVSVFZIRF9BMTgwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggYWVlZjgwZi4uZTQxNTZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0zMSw4ICszMSwxMCBAQAogI2luY2x1ZGUgInNhYTcxMzQuaCIKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAvKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggMzFiYTI5My4uMzUzYWYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0yMjAsNiArMjIwLDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2OV9CIDkxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNjlfQjEgOTIKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9NRDcxMzRfQlJJREdFXzIgICAgIDkzCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9IWUJSSURfQ0FSREJVUyA5NAogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjU1MmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorY29uZmlnIFVTQl9TTjlDMTAyCisJdHJpc3RhdGUgIlVTQiBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBTT05pWCBTTjlDMTAxLAorCSAgU045QzEwMiBvciBTTjlDMTAzIFBDIENhbWVyYSBDb250cm9sbGVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQ+IGZvciBtb3JlIGluZm8uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNuOWMxMDIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IGRmMTk1YzkuLjEwMTNiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAl9CiAJdHVuZXJfaW5mbygiVHVuZXIgbW9kZTogICAgICAlc1xuIiwgcCk7CiAJdHVuZXJfaW5mbygiRnJlcXVlbmN5OiAgICAgICAlbHUuJTAybHUgTUh6XG4iLCBmcmVxLCBmcmVxX2ZyYWN0aW9uKTsKLQl0dW5lcl9pbmZvKCJTdGFuZGFyZDogICAgICAgIDB4JTA4bGx4XG4iLCB0LT5zdGQpOworCXR1bmVyX2luZm8oIlN0YW5kYXJkOiAgICAgICAgMHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpdC0+c3RkKTsKIAlpZiAodC0+bW9kZSAhPSBWNEwyX1RVTkVSX1JBRElPKQogCSAgICAgICByZXR1cm47CiAJaWYgKHQtPmhhc19zaWduYWwpIHsKQEAgLTU1OCwxMCArNTU4LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Y0bDIoc3RydWN0IHR1bmVyICp0KQogewotCWlmICh0LT51c2luZ192NGwyKSB7Ci0JCXR1bmVyX2RiZyAoImlnbm9yZSB2NGwxIGNhbGxcbiIpOwotCQlyZXR1cm4gRUlOVkFMOwotCX0KKwkvKiBidHR2IHN0aWxsIHVzZXMgYm90aCB2NGwxIGFuZCB2NGwyIGNhbGxzIHRvIHRoZSB0dW5lciAodjRsMiBmb3IKKwkgICBUViwgdjRsMSBmb3IgcmFkaW8pLCB1bnRpbCB0aGF0IGlzIGZpeGVkIHRoaXMgY29kZSBpcyBkaXNhYmxlZC4KKwkgICBPdGhlcndpc2UgdGhlIHJhZGlvICh2NGwxKSB3b3VsZG4ndCB0dW5lIGFmdGVyIHVzaW5nIHRoZSBUViAodjRsMikKKwkgICBmaXJzdC4gKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ0LDYgKzc0NCw4IEBACiAJCQlzd2l0Y2hfdjRsMigpOwogCiAJCQl0dW5lci0+dHlwZSA9IHQtPm1vZGU7CisJCQlpZiAodC0+bW9kZSA9PSBWNEwyX1RVTkVSX0FOQUxPR19UVikKKwkJCQl0dW5lci0+Y2FwYWJpbGl0eSB8PSBWNEwyX1RVTkVSX0NBUF9OT1JNOwogCQkJaWYgKHQtPm1vZGUgIT0gVjRMMl9UVU5FUl9SQURJTykgewogCQkJCXR1bmVyLT5yYW5nZWxvdyA9IHR2X3JhbmdlWzBdICogMTY7CiAJCQkJdHVuZXItPnJhbmdlaGlnaCA9IHR2X3JhbmdlWzFdICogMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKaW5kZXggNzJlMGYwMWQuLmExYWUwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKQEAgLTg3Nyw4ICs4NzcsOCBAQAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX0xHX1REVlNfSDA2MkYgLSBJTkZJTkVPTiBBVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3R1YTYwMzRfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDEgfSwKLQl7IDE2ICogNDU1LjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDIgfSwKKwl7IDE2ICogMTY1LjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDEgfSwKKwl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDIgfSwKIAl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDQgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggMzU2YmZmNC4uYzJiNzU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTE3MDYsMjEgKzE3MDYsNiBAQAogCQlicmVhazsKIAl9CiAKLQljYXNlIFZJRElPQ19TX0FVRElPOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKnNhcmcgPSBhcmc7Ci0KLQkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkgfHwgc2FyZy0+aW5kZXggPj0gNCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogVGhlcmUgYXJlIGZvdXIgaW5wdXRzOiB0dW5lciwgcmFkaW8sIGV4dGVybiBhbmQgaW50ZXJuLiAqLwotCQljaGlwLT5pbnB1dCA9IHNhcmctPmluZGV4OwotCQlpZiAoY2hpcC0+bXV0ZWQpCi0JCQlicmVhazsKLQkJY2hpcF93cml0ZV9tYXNrZWQoY2hpcCwgZGVzYy0+aW5wdXRyZWcsCi0JCQkJZGVzYy0+aW5wdXRtYXBbY2hpcC0+aW5wdXRdLCBkZXNjLT5pbnB1dG1hc2spOwotCQlicmVhazsKLQl9Ci0KIAljYXNlIFZJRElPQ19TX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IGUwZDJmZjguLmI0NjNlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCS8qIDExMC0xMTkgKi8KIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUaG9tcHNvbiBEVFQ3NTEwNSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIkNvbmV4YW50X0NYMjQxMDkifSwKLQl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgTTI1MjNfNU5fRSJ9LAorCXsgVFVORVJfVENMXzIwMDJOLCAgICAgIlRDTCBNMjUyM181Tl9FIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIE0yNTIzXzNEQl9FIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiUGhpbGlwcyA4Mjc1QSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIk1pY3JvdHVuZSBNVDIwNjAifSwKQEAgLTc1Nyw5ICs3NTcsOSBAQAogc3RhdGljIGludAogdHZlZXByb21fYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpZiAoYWRhcHRlci0+aWQgIT0gSTJDX0hXX0JfQlQ4NDgpCi0JCXJldHVybiAwOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgdHZlZXByb21fZGV0ZWN0X2NsaWVudCk7CisJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKKwkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCB0dmVlcHJvbV9kZXRlY3RfY2xpZW50KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwppbmRleCA2OWQwZmUxLi5kYWI0OTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwpAQCAtNTMsNyArNTMsNyBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMjU1LAogCQkuc3RlcCA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCiAJCS5mbGFncyA9IDAsCiAJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTYyLDcgKzYyLDcgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgPSAweDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCiAJCS5mbGFncyA9IDAsCiAJfSwgewogCQkgLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTiwKQEAgLTcxLDcgKzcxLDcgQEAKIAkJIC5taW5pbXVtID0gMCwKIAkJIC5tYXhpbXVtID0gMjU1LAogCQkgLnN0ZXAgPSAweDEsCi0JCSAuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCisJCSAuZGVmYXVsdF92YWx1ZSA9IDEyOCwKIAkJIC5mbGFncyA9IDAsCiAJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCkBAIC04MCw3ICs4MCw3IEBACiAJCS5taW5pbXVtID0gLTEyOCwKIAkJLm1heGltdW0gPSAxMjcsCiAJCS5zdGVwID0gMHgxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkJLmZsYWdzID0gMCwKIAl9CiB9OwpAQCAtNTAwLDE2ICs1MDAsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSB2YmlfcmFtX2RlZmF1bHRbXSA9CiB7CisJLyogRklYTUU6IEN1cnJlbnQgYXBpIGRvZXNuJ3QgaGFuZGxlIGFsbCBWQkkgdHlwZXMsIHRob3NlIG5vdAorCSAgIHlldCBzdXBwb3J0ZWQgYXJlIHBsYWNlZCB1bmRlciAjaWYgMCAqLworI2lmIDAKIAl7MHgwMTAsIC8qIFRlbGV0ZXh0LCBTRUNBTSwgV1NUIFN5c3RlbSBBICovCiAJCXtWNEwyX1NMSUNFRF9URUxFVEVYVF9TRUNBTSw2LDIzLDF9LAogCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjYsCiAJCSAgMHhlNiwgMHhiNCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCB9CiAJfSwKKyNlbmRpZgogCXsweDAzMCwgLyogVGVsZXRleHQsIFBBTCwgV1NUIFN5c3RlbSBCICovCi0JCXtWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQiw2LDIyLDF9LAorCQl7VjRMMl9TTElDRURfVEVMRVRFWFRfQiw2LDIyLDF9LAogCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYsIDB4MjcsIDB4MmUsIDB4MjAsIDB4MmIsCiAJCSAgMHhhNiwgMHg3MiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCB9CiAJfSwKKyNpZiAwCiAJezB4MDUwLCAvKiBUZWxldGV4dCwgUEFMLCBXU1QgU3lzdGVtIEMgKi8KIAkJe1Y0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9DLDYsMjIsMX0sCiAJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiwgMHhlNywgMHgyZSwgMHgyMCwgMHgyMiwKQEAgLTUzNSw2ICs1NDAsNyBAQAogCQl7IDB4YWEsIDB4MmEsIDB4ZmYsIDB4M2YsIDB4MDQsIDB4NTEsIDB4NmUsIDB4MDIsCiAJCSAgMHhhNiwgMHg3YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNywgMHgwMCB9CiAJfSwKKyNlbmRpZgogCXsweDBmMCwgLyogQ2xvc2VkIENhcHRpb24sIE5UU0MgKi8KIAkJe1Y0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LDIxLDIxLDF9LAogCQl7IDB4YWEsIDB4MmEsIDB4ZmYsIDB4M2YsIDB4MDQsIDB4NTEsIDB4NmUsIDB4MDIsCkBAIC01NDUsNiArNTUxLDcgQEAKIAkJeyAweDViLCAweDU1LCAweGM1LCAweGZmLCAweDAwLCAweDcxLCAweDZlLCAweDQyLAogCQkgIDB4YTYsIDB4Y2QsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAgfQogCX0sCisjaWYgMAogCXsweDEzMCwgLyogV2lkZSBTY3JlZW4gU2lnbmFsLCBOVFNDIEMgKi8KIAkJe1Y0TDJfU0xJQ0VEX1dTU181MjUsMjAsMjAsMX0sCiAJCXsgMHgzOCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHg3MSwgMHg2ZSwgMHg0MywKQEAgLTU2MCw2ICs1NjcsNyBAQAogCQl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4NmQsIDB4NDksCiAJCSAgMHg2OSwgMHg5NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMCB9CiAJfSwKKyNlbmRpZgogCXsweDE5MCwgLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0gKFZQUyksIFBBTCAqLwogCQl7VjRMMl9TTElDRURfVlBTLDE2LDE2LDB9LAogCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYsIDB4YmEsIDB4Y2UsIDB4MmIsIDB4MGQsCkBAIC04NTAsNyArODU4LDYgQEAKIAogCWNhc2UgMDoKIAljYXNlIFZJRElPQ19JTlRfUkVTRVQ6Ci0JY2FzZSBERUNPREVSX0lOSVQ6CiAJCXR2cDUxNTBfcmVzZXQoYyk7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DX1NfU1REOgpAQCAtOTQ5LDk5ICs5NTYsMTUgQEAKICNlbmRpZgogCiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQljYXNlIERFQ09ERVJfRFVNUDoKIAkJZHVtcF9yZWcoYyk7CiAJCWJyZWFrOwogCi0JY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CisJY2FzZSBWSURJT0NfR19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOworCQkJaW50IHN0YXR1cyA9IHR2cDUxNTBfcmVhZChjLCAweDg4KTsKIAotCQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKLQkJCSAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfAotCQkJICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8IFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJCWNhcC0+aW5wdXRzID0gMzsKLQkJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCQl7Ci0JCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCQlpbnQgc3RhdHVzOwotCQkJaW50IHJlcz0wOwotCQkJc3RhdHVzID0gdHZwNTE1MF9yZWFkKGMsIDB4ODgpOwotCQkJaWYoc3RhdHVzJjB4MDgpewotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJCX0KLQkJCWlmKHN0YXR1cyYweDA0ICYmIHN0YXR1cyYweDAyKXsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKLQkJCX0KLQkJCSppYXJnPXJlczsKLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0dQSU86Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX1NFVF9WQklfQllQQVNTOgotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfTk9STToKLQkJewotCQkJaW50ICppYXJnID0gYXJnOwotCi0JCQlzd2l0Y2ggKCppYXJnKSB7Ci0KLQkJCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJCWJyZWFrOwotCi0JCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJCWJyZWFrOwotCi0JCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQl9Ci0JCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaWFyZyA9IGFyZzsKLQkJCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiAzKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7Ci0JCQl0dnA1MTUwX3NlbG11eChjLCBkZWNvZGVyLT5pbnB1dCk7Ci0KLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JCXsKLQkJCWludCAqaWFyZyA9IGFyZzsKLQotCQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJCWlmICgqaWFyZyAhPSAwKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCQl7Ci0JCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJCWRlY29kZXItPmVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKLQotCQkJdHZwNTE1MF9zZWxtdXgoYywgZGVjb2Rlci0+aW5wdXQpOwotCisJCQl2dC0+c2lnbmFsID0gKChzdGF0dXMgJiAweDA0KSAmJiAoc3RhdHVzICYgMHgwMikpID8gMHhmZmZmIDogMHgwOwogCQkJYnJlYWs7CiAJCX0KIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CkBAIC0xMDg3LDM1ICsxMDEwLDYgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0JCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgewotCQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0JSSUdIVF9DVEwsCi0JCQkJCSAgICAgIGRlY29kZXItPmJyaWdodCA+PiA4KTsKLQkJCX0KLQkJCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwotCQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ09OVFJBU1RfQ1RMLAotCQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA4KTsKLQkJCX0KLQkJCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCi0JCQkJZGVjb2Rlci0+c2F0ID0gcGljLT5jb2xvdXI7Ci0JCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMLAotCQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA4KTsKLQkJCX0KLQkJCWlmIChkZWNvZGVyLT5odWUgIT0gcGljLT5odWUpIHsKLQkJCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7Ci0JCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0hVRV9DVEwsCi0JCQkJCSAgICAgIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTIyMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogdXBkNjQwMzFBIC0gTkVDIEVsZWN0cm9uaWNzIEdob3N0IFJlZHVjdGlvbiBmb3IgTlRTQyBpbiBKYXBhbgorICoKKyAqIDIwMDMgYnkgVC5BZGFjaGkgPHRhZGFjaGlAdGFkYWNoaS1uZXQuY29tPgorICogMjAwMyBieSBUYWtlcnUgS09NT1JJWUEgPGtvbW9yaXlhQHBha2VuLm9yZz4KKyAqIDIwMDYgYnkgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdXBkNjQwMzFhLmg+CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZWFkIHJlZ2lzdGVycyBmdW5jdGlvbnMgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIGJpdCBtYXNrcyAqLworI2RlZmluZSBHUl9NT0RFX01BU0sgICAgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgRElSRUNUXzNEWUNTX0NPTk5FQ1RfTUFTSyAweGMwCisjZGVmaW5lIFNZTkNfQ0lSQ1VJVF9NQVNLICAgICAgICAgMHhhMAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNT0RVTEVfREVTQ1JJUFRJT04oInVQRDY0MDMxQSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlQuIEFkYWNoaSwgVGFrZXJ1IEtPTU9SSVlBLCBIYW5zIFZlcmt1aWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI0ID4+IDEsIDB4MjYgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKKworCitJMkNfQ0xJRU5UX0lOU01PRDsKKworZW51bSB7CisJUjAwID0gMCwgUjAxLCBSMDIsIFIwMywgUjA0LAorCVIwNSwgUjA2LCBSMDcsIFIwOCwgUjA5LAorCVIwQSwgUjBCLCBSMEMsIFIwRCwgUjBFLCBSMEYsCisJLyogdW51c2VkIHJlZ2lzdGVycworCSBSMTAsIFIxMSwgUjEyLCBSMTMsIFIxNCwKKwkgUjE1LCBSMTYsIFIxNywKKwkgKi8KKwlUT1RfUkVHUworfTsKKworc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSB7CisJdTggcmVnc1tUT1RfUkVHU107CisJdTggZ3JfbW9kZTsKKwl1OCBkaXJlY3RfM2R5Y3NfY29ubmVjdDsKKwl1OCBleHRfY29tcF9zeW5jOworCXU4IGV4dF92ZXJ0X3N5bmM7Cit9OworCitzdGF0aWMgdTggdXBkNjQwMzFhX2luaXRbXSA9IHsKKwkweDAwLCAweGI4LCAweDQ4LCAweGQyLCAweGU2LAorCTB4MDMsIDB4MTAsIDB4MGIsIDB4YWYsIDB4N2YsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHg1ZSwgMHgwMCwKKwkweGQwCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHU4IHVwZDY0MDMxYV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwl1OCBidWZbMl07CisKKwlpZiAocmVnID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gMHhmZjsKKwlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIDIpOworCXJldHVybiBidWZbcmVnXTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIHVwZDY0MDMxYV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3sKKwl1OCBidWZbMl07CisKKwlidWZbMF0gPSByZWc7CisJYnVmWzFdID0gdmFsOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRpbmcgcmVnIGFkZHI6ICUwMlggdmFsOiAlMDJYXG4iLCByZWcsIHZhbCk7CisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikgIT0gMikKKwkJdjRsX2VycihjbGllbnQsICJJL08gZXJyb3Igd3JpdGUgMHglMDJ4LzB4JTAyeFxuIiwgcmVnLCB2YWwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGlucHV0IGNoYW5nZWQgZHVlIHRvIG5ldyBpbnB1dCBvciBjaGFubmVsIGNoYW5nZWQgKi8KK3N0YXRpYyB2b2lkIHVwZDY0MDMxYV9jaGFuZ2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IHJlZyA9IHN0YXRlLT5yZWdzW1IwMF07CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGFuZ2VkIGlucHV0IG9yIGNoYW5uZWxcbiIpOworCXVwZDY0MDMxYV93cml0ZShjbGllbnQsIFIwMCwgcmVnIHwgMHgxMCk7CisJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgUjAwLCByZWcgJiB+MHgxMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHVwZDY0MDMxYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJdXBkNjQwMzFhX2NoYW5nZShjbGllbnQpOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6CisJCXJvdXRlLT5pbnB1dCA9IChzdGF0ZS0+Z3JfbW9kZSA+PiA2KSB8CisJCQkoc3RhdGUtPmRpcmVjdF8zZHljc19jb25uZWN0ID4+IDQpIHwKKwkJCShzdGF0ZS0+ZXh0X2NvbXBfc3luYyA+PiAxKSB8CisJCQkoc3RhdGUtPmV4dF92ZXJ0X3N5bmMgPj4gMik7CisJCXJvdXRlLT5vdXRwdXQgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6CisJeworCQl1OCByMDAsIHIwNSwgcjA4OworCisJCXN0YXRlLT5ncl9tb2RlID0gKHJvdXRlLT5pbnB1dCAmIDMpIDw8IDY7CisJCXN0YXRlLT5kaXJlY3RfM2R5Y3NfY29ubmVjdCA9IChyb3V0ZS0+aW5wdXQgJiAweGMpIDw8IDQ7CisJCXN0YXRlLT5leHRfY29tcF9zeW5jID0gKHJvdXRlLT5pbnB1dCAmIFVQRDY0MDMxQV9DT01QT1NJVEVfRVhURVJOQUwpIDw8IDE7CisJCXN0YXRlLT5leHRfdmVydF9zeW5jID0gKHJvdXRlLT5pbnB1dCAmIFVQRDY0MDMxQV9WRVJUSUNBTF9FWFRFUk5BTCkgPDwgMjsKKwkJcjAwID0gKHN0YXRlLT5yZWdzW1IwMF0gJiB+R1JfTU9ERV9NQVNLKSB8IHN0YXRlLT5ncl9tb2RlOworCQlyMDUgPSAoc3RhdGUtPnJlZ3NbUjAwXSAmIH5TWU5DX0NJUkNVSVRfTUFTSykgfAorCQkJc3RhdGUtPmV4dF9jb21wX3N5bmMgfCBzdGF0ZS0+ZXh0X3ZlcnRfc3luYzsKKwkJcjA4ID0gKHN0YXRlLT5yZWdzW1IwOF0gJiB+RElSRUNUXzNEWUNTX0NPTk5FQ1RfTUFTSykgfAorCQkJc3RhdGUtPmRpcmVjdF8zZHljc19jb25uZWN0OworCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBSMDAsIHIwMCk7CisJCXVwZDY0MDMxYV93cml0ZShjbGllbnQsIFIwNSwgcjA1KTsKKwkJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgUjA4LCByMDgpOworCQl1cGQ2NDAzMWFfY2hhbmdlKGNsaWVudCk7CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CisJCXY0bF9pbmZvKGNsaWVudCwgIlN0YXR1czogU0EwMD0weCUwMnggU0EwMT0weCUwMnhcbiIsCisJCQl1cGQ2NDAzMWFfcmVhZChjbGllbnQsIDApLCB1cGQ2NDAzMWFfcmVhZChjbGllbnQsIDEpKTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6CisJeworCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCisJCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfVVBENjQwMzFBKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlZy0+dmFsID0gdXBkNjQwMzFhX3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKKwl7CisJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7CisJCXU4IGFkZHIgPSByZWctPnJlZyAmIDB4ZmY7CisJCXU4IHZhbCA9IHJlZy0+dmFsICYgMHhmZjsKKworCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1VQRDY0MDMxQSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBhZGRyLCB2YWwpOworCQlicmVhazsKKwl9CisjZW5kaWYKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcjsKKworc3RhdGljIGludCB1cGQ2NDAzMWFfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSAqc3RhdGU7CisJaW50IGk7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXI7CisJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJ1UEQ2NDAzMUEiKTsKKworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCW1lbWNweShzdGF0ZS0+cmVncywgdXBkNjQwMzFhX2luaXQsIHNpemVvZihzdGF0ZS0+cmVncykpOworCXN0YXRlLT5ncl9tb2RlID0gVVBENjQwMzFBX0dSX09OIDw8IDY7CisJc3RhdGUtPmRpcmVjdF8zZHljc19jb25uZWN0ID0gVVBENjQwMzFBXzNEWUNTX0NPTVBPU0lURSA8PCA0OworCXN0YXRlLT5leHRfY29tcF9zeW5jID0gc3RhdGUtPmV4dF92ZXJ0X3N5bmMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBUT1RfUkVHUzsgaSsrKSB7CisJCXVwZDY0MDMxYV93cml0ZShjbGllbnQsIGksIHN0YXRlLT5yZWdzW2ldKTsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkNjQwMzFhX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQorCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHVwZDY0MDMxYV9hdHRhY2gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZDY0MDMxYV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ1cGQ2NDAzMWEiLAorCX0sCisJLmlkID0gSTJDX0RSSVZFUklEX1VQRDY0MDMxQSwKKwkuYXR0YWNoX2FkYXB0ZXIgPSB1cGQ2NDAzMWFfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgID0gdXBkNjQwMzFhX2RldGFjaCwKKwkuY29tbWFuZCA9IHVwZDY0MDMxYV9jb21tYW5kLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCB1cGQ2NDAzMWFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXBkNjQwMzFhX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1cGQ2NDAzMWFfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQodXBkNjQwMzFhX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E3ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogdXBkNjQwOHggLSBORUMgRWxlY3Ryb25pY3MgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiBkcml2ZXIKKyAqCisgKiAyMDAzIGJ5IFQuQWRhY2hpICh0YWRhY2hpQHRhZGFjaGktbmV0LmNvbSkKKyAqIDIwMDMgYnkgVGFrZXJ1IEtPTU9SSVlBIDxrb21vcml5YUBwYWtlbi5vcmc+CisgKiAyMDA2IGJ5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdXBkNjQwODMuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJ1UEQ2NDA4MyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlQuIEFkYWNoaSwgVGFrZXJ1IEtPTU9SSVlBLCBIYW5zIFZlcmt1aWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHhiOCA+PiAxLCAweGJhID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKKworSTJDX0NMSUVOVF9JTlNNT0Q7CisKK2VudW0geworCVIwMCA9IDAsIFIwMSwgUjAyLCBSMDMsIFIwNCwKKwlSMDUsIFIwNiwgUjA3LCBSMDgsIFIwOSwKKwlSMEEsIFIwQiwgUjBDLCBSMEQsIFIwRSwgUjBGLAorCVIxMCwgUjExLCBSMTIsIFIxMywgUjE0LAorCVIxNSwgUjE2LAorCVRPVF9SRUdTCit9OworCitzdHJ1Y3QgdXBkNjQwODNfc3RhdGUgeworCXU4IG1vZGU7CisJdTggZXh0X3lfYWRjOworCXU4IHJlZ3NbVE9UX1JFR1NdOworfTsKKworLyogSW5pdGlhbCB2YWx1ZXMgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCisgICBORUMgdXBkNjQwMzFhIGdob3N0IHJlZHVjdGlvbiBjaGlwLiAqLworc3RhdGljIHU4IHVwZDY0MDgzX2luaXRbXSA9IHsKKwkweDFmLCAweDAxLCAweGEwLCAweDJkLCAweDI5LCAgLyogd2UgdXNlIEVYQ1NTPTAgKi8KKwkweDM2LCAweGRkLCAweDA1LCAweDU2LCAweDQ4LAorCTB4MDAsIDB4M2EsIDB4YTAsIDB4MDUsIDB4MDgsCisJMHg0NCwgMHg2MCwgMHgwOCwgMHg1MiwgMHhmOCwKKwkweDUzLCAweDYwLCAweDEwCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgdXBkNjQwODNfbG9nX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXU4IGJ1Zls3XTsKKworCWkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgNyk7CisJdjRsX2luZm8oY2xpZW50LCAiU3RhdHVzOiBTQTAwPSUwMnggU0EwMT0lMDJ4IFNBMDI9JTAyeCBTQTAzPSUwMnggIgorCQkgICAgICAiU0EwND0lMDJ4IFNBMDU9JTAyeCBTQTA2PSUwMnhcbiIsCisJCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCB1cGQ2NDA4M193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3sKKwl1OCBidWZbMl07CisKKwlidWZbMF0gPSByZWc7CisJYnVmWzFdID0gdmFsOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRpbmcgcmVnIGFkZHI6ICUwMnggdmFsOiAlMDJ4XG4iLCByZWcsIHZhbCk7CisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikgIT0gMikKKwkJdjRsX2VycihjbGllbnQsICJJL08gZXJyb3Igd3JpdGUgMHglMDJ4LzB4JTAyeFxuIiwgcmVnLCB2YWwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyB1OCB1cGQ2NDA4M19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwl1OCBidWZbN107CisKKwlpZiAocmVnID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gMHhmZjsKKwlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIHNpemVvZihidWYpKTsKKwlyZXR1cm4gYnVmW3JlZ107Cit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgdXBkNjQwODNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHVwZDY0MDgzX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgorCQlyb3V0ZS0+aW5wdXQgPSAoc3RhdGUtPm1vZGUgPj4gNikgfCAoc3RhdGUtPmV4dF95X2FkYyA+PiAzKTsKKwkJcm91dGUtPm91dHB1dCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKKwl7CisJCXU4IHIwMCwgcjAyOworCisJCWlmIChyb3V0ZS0+aW5wdXQgPiA3IHx8IChyb3V0ZS0+aW5wdXQgJiA2KSA9PSA2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXN0YXRlLT5tb2RlID0gKHJvdXRlLT5pbnB1dCAmIDMpIDw8IDY7CisJCXN0YXRlLT5leHRfeV9hZGMgPSAocm91dGUtPmlucHV0ICYgVVBENjQwODNfRVhUX1lfQURDKSA8PCAzOworCQlyMDAgPSAoc3RhdGUtPnJlZ3NbUjAwXSAmIH4oMyA8PCA2KSkgfCBzdGF0ZS0+bW9kZTsKKwkJcjAyID0gKHN0YXRlLT5yZWdzW1IwMl0gJiB+KDEgPDwgNSkpIHwgc3RhdGUtPmV4dF95X2FkYzsKKwkJdXBkNjQwODNfd3JpdGUoY2xpZW50LCBSMDAsIHIwMCk7CisJCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgUjAyLCByMDIpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCQl1cGQ2NDA4M19sb2dfc3RhdHVzKGNsaWVudCk7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgorCXsKKwkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKKworCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1VQRDY0MDgzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlZy0+dmFsID0gdXBkNjQwODNfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgorCXsKKwkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKKwkJdTggYWRkciA9IHJlZy0+cmVnICYgMHhmZjsKKwkJdTggdmFsID0gcmVnLT52YWwgJiAweGZmOworCisJCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfVVBENjQwODMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJdXBkNjQwODNfd3JpdGUoY2xpZW50LCBhZGRyLCB2YWwpOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcjsKKworc3RhdGljIGludCB1cGQ2NDA4M19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdXBkNjQwODNfc3RhdGUgKnN0YXRlOworCWludCBpOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAidVBENjQwODMiKTsKKworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1cGQ2NDA4M19zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzdGF0ZSk7CisJLyogSW5pdGlhbGx5IGFzc3VtZSB0aGF0IGEgZ2hvc3QgcmVkdWN0aW9uIGNoaXAgaXMgcHJlc2VudCAqLworCXN0YXRlLT5tb2RlID0gMDsgIC8qIFlDUyBtb2RlICovCisJc3RhdGUtPmV4dF95X2FkYyA9ICgxIDw8IDUpOworCW1lbWNweShzdGF0ZS0+cmVncywgdXBkNjQwODNfaW5pdCwgVE9UX1JFR1MpOworCWZvciAoaSA9IDA7IGkgPCBUT1RfUkVHUzsgaSsrKSB7CisJCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgaSwgc3RhdGUtPnJlZ3NbaV0pOworCX0KKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkNjQwODNfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgdXBkNjQwODNfYXR0YWNoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGQ2NDA4M19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ1cGQ2NDA4MyIsCisJfSwKKwkuaWQgPSBJMkNfRFJJVkVSSURfVVBENjQwODMsCisJLmF0dGFjaF9hZGFwdGVyID0gdXBkNjQwODNfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgID0gdXBkNjQwODNfZGV0YWNoLAorCS5jb21tYW5kID0gdXBkNjQwODNfY29tbWFuZCwKK307CisKKworc3RhdGljIGludCBfX2luaXQgdXBkNjQwODNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXBkNjQwODNfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVwZDY0MDgzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHVwZDY0MDgzX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI2OWEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnCkBAIC0wLDAgKzEsMzggQEAKK2NvbmZpZyBWSURFT19VU0JWSURFTworCXRyaXN0YXRlCisKK2NvbmZpZyBVU0JfVklDQU0KKwl0cmlzdGF0ZSAiVVNCIDNjb20gSG9tZUNvbm5lY3QgKGFrYSB2aWNhbSkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBWSURFT19VU0JWSURFTworCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgM2NvbSBob21lY29ubmVjdCBjYW1lcmEgKHZpY2FtKS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmljYW0uCisKK2NvbmZpZyBVU0JfSUJNQ0FNCisJdHJpc3RhdGUgIlVTQiBJQk0gKFhpcmxpbmspIEMtaXQgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCXNlbGVjdCBWSURFT19VU0JWSURFTworCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCisJICAiWGlybGluayBQQyBDYW1lcmEiIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWJtY2FtLgorCisJICBUaGlzIGNhbWVyYSBoYXMgc2V2ZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2hpY2gKKwkgIGNhbiBiZSBzcGVjaWZpZWQgd2hlbiB5b3UgbG9hZCB0aGUgbW9kdWxlLiBSZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2libWNhbS50eHQ+IHRvIGxlYXJuIG1vcmUuCisKK2NvbmZpZyBVU0JfS09OSUNBV0MKKwl0cmlzdGF0ZSAiVVNCIEtvbmljYSBXZWJjYW0gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxCisJc2VsZWN0IFZJREVPX1VTQlZJREVPCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB3ZWJjYW1zIGJhc2VkIG9uIGEgS29uaWNhCisJICBjaGlwc2V0LiBUaGlzIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgSW50ZWwgWUM3NiB3ZWJjYW0uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtvbmljYXdjLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vTWFrZWZpbGUKaW5kZXggZWQ0MTBhNS4uYmI1MmViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pICAgICAgICArPSBpYm1jYW0ubyB1c2J2aWRlby5vIHVsdHJhY2FtLm8KLW9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0ga29uaWNhd2MubyB1c2J2aWRlby5vCi1vYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHZpY2FtLm8gdXNidmlkZW8ubwotCitvYmotJChDT05GSUdfVklERU9fVVNCVklERU8pICAgICs9IHVzYnZpZGVvLm8KK29iai0kKENPTkZJR19VU0JfSUJNQ0FNKSAgICAgICAgKz0gaWJtY2FtLm8gdWx0cmFjYW0ubworb2JqLSQoQ09ORklHX1VTQl9LT05JQ0FXQykgICAgICArPSBrb25pY2F3Yy5vCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHZpY2FtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCAxMWE5N2YzLi5kMzMwZmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIAlbX0lPQ19OUihUVU5FUl9TRVRfU1RBTkRCWSldICAgICAgICAgICA9ICJUVU5FUl9TRVRfU1RBTkRCWSIsCiAJW19JT0NfTlIoVERBOTg4N19TRVRfQ09ORklHKV0gICAgICAgICAgPSAiVERBOTg4N19TRVRfQ09ORklHIiwKIAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19UVU5FUl9NT0RFKV0gICAgID0gIlZJRElPQ19JTlRfU19UVU5FUl9NT0RFIiwKIAlbX0lPQ19OUihWSURJT0NfSU5UX1NfUkVHSVNURVIpXSAgICAgICA9ICJWSURJT0NfSU5UX1NfUkVHSVNURVIiLAogCVtfSU9DX05SKFZJRElPQ19JTlRfR19SRUdJU1RFUildICAgICAgID0gIlZJRElPQ19JTlRfR19SRUdJU1RFUiIsCiAJW19JT0NfTlIoVklESU9DX0lOVF9SRVNFVCldICAgICAgICAgICAgPSAiVklESU9DX0lOVF9SRVNFVCIsCkBAIC0zMjUsNyArMzI2LDEyIEBACiAJW19JT0NfTlIoVklESU9DX0lOVF9TX1ZCSV9EQVRBKV0gICAgICAgPSAiVklESU9DX0lOVF9TX1ZCSV9EQVRBIiwKIAlbX0lPQ19OUihWSURJT0NfSU5UX0dfVkJJX0RBVEEpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfVkJJX0RBVEEiLAogCVtfSU9DX05SKFZJRElPQ19JTlRfR19DSElQX0lERU5UKV0gICAgID0gIlZJRElPQ19JTlRfR19DSElQX0lERU5UIiwKLQlbX0lPQ19OUihWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRKV0gICA9ICJWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRIgorCVtfSU9DX05SKFZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEpXSAgID0gIlZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19TVEFOREJZKV0gICAgICAgID0gIlZJRElPQ19JTlRfU19TVEFOREJZIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyIsCisJW19JT0NfTlIoVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkcpXSAgPSAiVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkciLAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HKV0gID0gIlZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyIKIH07CiAjZGVmaW5lIFY0TDJfSU5UX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW50X2lvY3RscykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKaW5kZXggZDJjYTBmMC4uYWNjNWVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCkBAIC0zOTksMTkgKzM5OSwyNSBAQAogaW50IHZpZGVvYnVmX3BjaV9kbWFfbWFwKHN0cnVjdCBwY2lfZGV2ICpwY2ksc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQogewogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBxOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgcW9wczsKIAogCXEuZGV2PXBjaTsKLQlxLm9wcy0+dmJfbWFwX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV91bm1hcF9zZzsKKwlxb3BzLnZiX21hcF9zZz0odmJfbWFwX3NnX3QgKilwY2lfbWFwX3NnOworCXFvcHMudmJfdW5tYXBfc2c9KHZiX21hcF9zZ190ICopcGNpX3VubWFwX3NnOworCXEub3BzID0gJnFvcHM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX2RtYV91bm1hcCgmcSxkbWEpKTsKKwlyZXR1cm4gKHZpZGVvYnVmX2RtYV9tYXAoJnEsZG1hKSk7CiB9CiAKIGludCB2aWRlb2J1Zl9wY2lfZG1hX3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwY2ksc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQogewogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBxOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgcW9wczsKIAogCXEuZGV2PXBjaTsKLQlxLm9wcy0+dmJfbWFwX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV91bm1hcF9zZzsKKwlxb3BzLnZiX21hcF9zZz0odmJfbWFwX3NnX3QgKilwY2lfbWFwX3NnOworCXFvcHMudmJfdW5tYXBfc2c9KHZiX21hcF9zZ190ICopcGNpX3VubWFwX3NnOworCXEub3BzID0gJnFvcHM7CiAKIAlyZXR1cm4gKHZpZGVvYnVmX2RtYV91bm1hcCgmcSxkbWEpKTsKIH0KQEAgLTkyMyw3ICs5MjksNyBAQAogCQkvKiBuZWVkIHRvIGNhcHR1cmUgYSBuZXcgZnJhbWUgKi8KIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJcS0+cmVhZF9idWYgPSB2aWRlb2J1Zl9hbGxvYyhxLT5tc2l6ZSk7Ci0JCWRwcmludGsoMSwidmlkZW8gYWxsb2M9MHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpIHEtPnJlYWRfYnVmKTsKKwkJZHByaW50aygxLCJ2aWRlbyBhbGxvYz0weCVwXG4iLCBxLT5yZWFkX2J1Zik7CiAJCWlmIChOVUxMID09IHEtPnJlYWRfYnVmKQogCQkJZ290byBkb25lOwogCQlxLT5yZWFkX2J1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfVVNFUlBUUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggNWU4MTM0MC4uNzc5ZGIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTI2LDYgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisvKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWI1OWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIHdtODczOQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBULiBBZGFjaGkgPHRhZGFjaGlAdGFkYWNoaS1uZXQuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqIC0gQ2xlYW51cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigid204NzM5IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVC4gQWRhY2hpLCBIYW5zIFZlcmt1aWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM0ID4+IDEsIDB4MzYgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKKworCitJMkNfQ0xJRU5UX0lOU01PRDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2VudW0geworCVIwID0gMCwgUjEsCisJUjUgPSA1LCBSNiwgUjcsIFI4LCBSOSwgUjE1ID0gMTUsCisJVE9UX1JFR1MKK307CisKK3N0cnVjdCB3bTg3Mzlfc3RhdGUgeworCXUzMiBjbG9ja19mcmVxOworCXU4IG11dGVkOworCXUxNiB2b2x1bWU7CisJdTE2IGJhbGFuY2U7CisJdTggdm9sX2w7IAkJLyogKzEyZEIgdG8gLTM0LjVkQiAxLjVkQiBzdGVwICg1Yml0KSBkZWY6MGRCICovCisJdTggdm9sX3I7IAkJLyogKzEyZEIgdG8gLTM0LjVkQiAxLjVkQiBzdGVwICg1Yml0KSBkZWY6MGRCICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB3bTg3Mzlfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlpbnQgaTsKKworCWlmIChyZWcgPCAwIHx8IHJlZyA+PSBUT1RfUkVHUykgeworCQl2NGxfZXJyKGNsaWVudCwgIkludmFsaWQgcmVnaXN0ZXIgUiVkXG4iLCByZWcpOworCQlyZXR1cm4gLTE7CisJfQorCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAid3JpdGU6ICUwMnggJTAyeFxuIiwgcmVnLCB2YWwpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIChyZWcgPDwgMSkgfAorCQkJCQkodmFsID4+IDgpLCB2YWwgJiAweGZmKSA9PSAwKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwl2NGxfZXJyKGNsaWVudCwgIkkyQzogY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCB2YWwsIHJlZyk7CisJcmV0dXJuIC0xOworfQorCisvKiB3cml0ZSByZWdzIHRvIHNldCBhdWRpbyB2b2x1bWUgZXRjICovCitzdGF0aWMgdm9pZCB3bTg3Mzlfc2V0X2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1MTYgbXV0ZSA9IHN0YXRlLT5tdXRlZCA/IDB4ODAgOiAwOworCisJLyogVm9sdW1lIHNldHRpbmc6IGJpdHMgMC00LCAweDFmID0gMTIgZEIsIDB4MDAgPSAtMzQuNSBkQgorCSAqIERlZmF1bHQgc2V0dGluZzogMHgxNyA9IDAgZEIKKwkgKi8KKwl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSMCwgKHN0YXRlLT52b2xfbCAmIDB4MWYpIHwgbXV0ZSk7CisJd204NzM5X3dyaXRlKGNsaWVudCwgUjEsIChzdGF0ZS0+dm9sX3IgJiAweDFmKSB8IG11dGUpOworfQorCitzdGF0aWMgaW50IHdtODczOV9nZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5tdXRlZDsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+dm9sdW1lOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YmFsYW5jZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzM5X3NldF9jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBpbnQgd29ya19sLCB3b3JrX3I7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlzdGF0ZS0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJc3RhdGUtPnZvbHVtZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJc3RhdGUtPmJhbGFuY2UgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBub3JtYWxpemUgKCA2NTUzNSB0byAwIC0+IDMxIHRvIDAgKDEyZEIgdG8gLTM0LjVkQikgKSAqLworCXdvcmtfbCA9IChtaW4oNjU1MzYgLSBzdGF0ZS0+YmFsYW5jZSwgMzI3NjgpICogc3RhdGUtPnZvbHVtZSkgLyAzMjc2ODsKKwl3b3JrX3IgPSAobWluKHN0YXRlLT5iYWxhbmNlLCAodTE2KTMyNzY4KSAqIHN0YXRlLT52b2x1bWUpIC8gMzI3Njg7CisKKwlzdGF0ZS0+dm9sX2wgPSAobG9uZyl3b3JrX2wgKiAzMSAvIDY1NTM1OworCXN0YXRlLT52b2xfciA9IChsb25nKXdvcmtfciAqIDMxIC8gNjU1MzU7CisKKwkvKiBzZXQgYXVkaW8gdm9sdW1lIGV0Yy4gKi8KKwl3bTg3Mzlfc2V0X2F1ZGlvKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHdtODczOV9xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gNTg4ODAsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCisJCS5uYW1lICAgICAgICAgID0gIkJhbGFuY2UiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCisJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB3bTg3MzlfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6CisJeworCQl1MzIgYXVkaW9mcmVxID0gKih1MzIgKilhcmc7CisKKwkJc3RhdGUtPmNsb2NrX2ZyZXEgPSBhdWRpb2ZyZXE7CisJCXdtODczOV93cml0ZShjbGllbnQsIFI5LCAweDAwMCk7CS8qIGRlLWFjdGl2YXRlICovCisJCXN3aXRjaCAoYXVkaW9mcmVxKSB7CisJCWNhc2UgNDQxMDA6CisJCQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOCwgMHgwMjApOyAvKiAyNTZmcHMsIGZzPTQ0LjFrICAgICAqLworCQkJYnJlYWs7CisJCWNhc2UgNDgwMDA6CisJCQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOCwgMHgwMDApOyAvKiAyNTZmcHMsIGZzPTQ4ayAgICAgICAqLworCQkJYnJlYWs7CisJCWNhc2UgMzIwMDA6CisJCQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOCwgMHgwMTgpOyAvKiAyNTZmcHMsIGZzPTMyayAgICAgICAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOSwgMHgwMDEpOwkvKiBhY3RpdmF0ZSAqLworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19HX0NUUkw6CisJCXJldHVybiB3bTg3MzlfZ2V0X2N0cmwoY2xpZW50LCBhcmcpOworCisJY2FzZSBWSURJT0NfU19DVFJMOgorCQlyZXR1cm4gd204NzM5X3NldF9jdHJsKGNsaWVudCwgYXJnKTsKKworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczOV9xY3RybCk7IGkrKykKKwkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHdtODczOV9xY3RybFtpXS5pZCkgeworCQkJCW1lbWNweShxYywgJndtODczOV9xY3RybFtpXSwgc2l6ZW9mKCpxYykpOworCQkJCXJldHVybiAwOworCQkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCQl2NGxfaW5mbyhjbGllbnQsICJGcmVxdWVuY3k6ICV1IEh6XG4iLCBzdGF0ZS0+Y2xvY2tfZnJlcSk7CisJCXY0bF9pbmZvKGNsaWVudCwgIlZvbHVtZSBMOiAgJTAyeCVzXG4iLCBzdGF0ZS0+dm9sX2wgJiAweDFmLAorCQkJCXN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7CisJCXY0bF9pbmZvKGNsaWVudCwgIlZvbHVtZSBSOiAgJTAyeCVzXG4iLCBzdGF0ZS0+dm9sX3IgJiAweDFmLAorCQkJCXN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBpMmMgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXI7CisKK3N0YXRpYyBpbnQgd204NzM5X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbGllbnQtPmFkZHIgPSBhZGRyZXNzOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcjsKKwlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgIndtODczOSIpOworCisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdtODczOV9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzdGF0ZS0+dm9sX2wgPSAweDE3OyAvKiAwZEIgKi8KKwlzdGF0ZS0+dm9sX3IgPSAweDE3OyAvKiAwZEIgKi8KKwlzdGF0ZS0+bXV0ZWQgPSAwOworCXN0YXRlLT5iYWxhbmNlID0gMzI3Njg7CisJLyogbm9ybWFsaXplICgxMmRCKDMxKSB0byAtMzQuNWRCKDApIFswZEIoMjMpXSAtPiA2NTUzNSB0byAwKSAqLworCXN0YXRlLT52b2x1bWUgPSAoKGxvbmcpc3RhdGUtPnZvbF9sICsgMSkgKiA2NTUzNSAvIDMxOworCXN0YXRlLT5jbG9ja19mcmVxID0gNDgwMDA7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCisJLyogaW5pdGlhbGl6ZSB3bTg3MzkgKi8KKwl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSMTUsIDB4MDApOyAvKiByZXNldCAqLworCXdtODczOV93cml0ZShjbGllbnQsIFI1LCAweDAwMCk7IC8qIGZpbHRlciBzZXR0aW5nLCBoaWdoIHBhdGgsIG9mZmV0IGNsZWFyICovCisJd204NzM5X3dyaXRlKGNsaWVudCwgUjYsIDB4MDAwKTsgLyogQURDLCBPU0MsIFBvd2VyIE9mZiBtb2RlIERpc2FibGUgKi8KKwl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSNywgMHgwNDkpOyAvKiBEaWdpdGFsIEF1ZGlvIGludGVyZmFjZSBmb3JtYXQgKi8KKwkJCQkJIC8qIEVuYWJsZSBNYXN0ZXIgbW9kZSAqLworCQkJCQkgLyogMjQgYml0LCBNU0IgZmlyc3QvbGVmdCBqdXN0aWZpZWQgKi8KKwl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOCwgMHgwMDApOyAvKiBzYW1wbGluZyBjb250cm9sICovCisJCQkJCSAvKiBub3JtYWwsIDI1NmZzLCA0OEtIeiBzYW1wbGluZyByYXRlICovCisJd204NzM5X3dyaXRlKGNsaWVudCwgUjksIDB4MDAxKTsgLyogYWN0aXZhdGUgKi8KKwl3bTg3Mzlfc2V0X2F1ZGlvKGNsaWVudCk7IAkgLyogc2V0IHZvbHVtZS9tdXRlICovCisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzM5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQorCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHdtODczOV9hdHRhY2gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODczOV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg3MzkiLAorCX0sCisJLmlkID0gSTJDX0RSSVZFUklEX1dNODczOSwKKwkuYXR0YWNoX2FkYXB0ZXIgPSB3bTg3MzlfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgID0gd204NzM5X2RldGFjaCwKKwkuY29tbWFuZCA9IHdtODczOV9jb21tYW5kLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCB3bTg3MzlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd204NzM5X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3bTg3MzlfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQod204NzM5X2NsZWFudXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNTgzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBVU0JfWkMwMzAxCisJdHJpc3RhdGUgIlVTQiBaQzAzMDEgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBaQzAzMDEKKwkgIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96YzAzMDEudHh0PiBmb3IgbW9yZSBpbmZvLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6YzAzMDEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDI2NjQxNGMuLmEzMDA4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xMTg5LDcgKzExODksNiBAQAogCWlvYy0+ZGlhZ1BlbmRpbmcgPSAwOwogCXNwaW5fbG9ja19pbml0KCZpb2MtPmRpYWdMb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmaW9jLT5mY19ycG9ydF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW9jLT5pbml0aWFsaXppbmdfaGJhX2xvY2spOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZXZlbnQgbG9nZ2luZy4KQEAgLTE2MDYsNiArMTYwNSwyMSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQKK21wdF9zaWduYWxfcmVzZXQoaW50IGluZGV4LCBNUFRfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCit7CisJaWYgKChNcHREcml2ZXJDbGFzc1tpbmRleF0gPT0gTVBUU1BJX0RSSVZFUiAmJgorCSAgICAgaW9jLT5idXNfdHlwZSAhPSBTUEkpIHx8CisJICAgIChNcHREcml2ZXJDbGFzc1tpbmRleF0gPT0gTVBURkNfRFJJVkVSICYmCisJICAgICBpb2MtPmJ1c190eXBlICE9IEZDKSB8fAorCSAgICAoTXB0RHJpdmVyQ2xhc3NbaW5kZXhdID09IE1QVFNBU19EUklWRVIgJiYKKwkgICAgIGlvYy0+YnVzX3R5cGUgIT0gU0FTKSkKKwkJLyogbWFrZSBzdXJlIHdlIG9ubHkgY2FsbCB0aGUgcmVsZXZhbnQgcmVzZXQgaGFuZGxlcgorCQkgKiBmb3IgdGhlIGJ1cyAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gKE1wdFJlc2V0SGFuZGxlcnNbaW5kZXhdKShpb2MsIHJlc2V0X3BoYXNlKTsKK30KKwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKICAqCW1wdF9kb19pb2NfcmVjb3ZlcnkgLSBJbml0aWFsaXplIG9yIHJlY292ZXIgTVBUIGFkYXB0ZXIuCkBAIC0xODg2LDE0ICsxOTAwLDE0IEBACiAJCQlpZiAoKHJldCA9PSAwKSAmJiBNcHRSZXNldEhhbmRsZXJzW2lpXSkgewogCQkJCWRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkNhbGxpbmcgSU9DIHBvc3RfcmVzZXQgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQlpb2MtPm5hbWUsIGlpKSk7Ci0JCQkJcmMgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MsIE1QVF9JT0NfUE9TVF9SRVNFVCk7CisJCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOwogCQkJCWhhbmRsZXJzKys7CiAJCQl9CiAKIAkJCWlmIChhbHRfaW9jX3JlYWR5ICYmIE1wdFJlc2V0SGFuZGxlcnNbaWldKSB7CiAJCQkJZHJzcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIGFsdC0lcyBwb3N0X3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJaW9jLT5uYW1lLCBpb2MtPmFsdF9pb2MtPm5hbWUsIGlpKSk7Ci0JCQkJcmMgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MtPmFsdF9pb2MsIE1QVF9JT0NfUE9TVF9SRVNFVCk7CisJCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOwogCQkJCWhhbmRsZXJzKys7CiAJCQl9CiAJCX0KQEAgLTMyNjgsMTEgKzMyODIsMTEgQEAKIAkJCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tpaV0pIHsKIAkJCQkJZHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBJT0MgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJCWlvYy0+bmFtZSwgaWkpKTsKLQkJCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYywgTVBUX0lPQ19QUkVfUkVTRVQpOworCQkJCQlyICs9IG1wdF9zaWduYWxfcmVzZXQoaWksIGlvYywgTVBUX0lPQ19QUkVfUkVTRVQpOwogCQkJCQlpZiAoaW9jLT5hbHRfaW9jKSB7CiAJCQkJCQlkcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIGFsdC0lcyBwcmVfcmVzZXQgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQkJCWlvYy0+bmFtZSwgaW9jLT5hbHRfaW9jLT5uYW1lLCBpaSkpOwotCQkJCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QUkVfUkVTRVQpOworCQkJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGlpLCBpb2MtPmFsdF9pb2MsIE1QVF9JT0NfUFJFX1JFU0VUKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTU3MDcsMTEgKzU3MjEsMTEgQEAKIAkJCWlmIChNcHRSZXNldEhhbmRsZXJzW2lpXSkgewogCQkJCWR0bXByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBJT0MgcmVzZXRfc2V0dXAgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQlpb2MtPm5hbWUsIGlpKSk7Ci0JCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYywgTVBUX0lPQ19TRVRVUF9SRVNFVCk7CisJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGlpLCBpb2MsIE1QVF9JT0NfU0VUVVBfUkVTRVQpOwogCQkJCWlmIChpb2MtPmFsdF9pb2MpIHsKIAkJCQkJZHRtcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIGFsdC0lcyBzZXR1cCByZXNldCBoYW5kbGVyICMlZFxuIiwKIAkJCQkJCQlpb2MtPm5hbWUsIGlvYy0+YWx0X2lvYy0+bmFtZSwgaWkpKTsKLQkJCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYy0+YWx0X2lvYywgTVBUX0lPQ19TRVRVUF9SRVNFVCk7CisJCQkJCXIgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1NFVFVQX1JFU0VUKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTU3MzYsMTEgKzU3NTAsMTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyMgZGVmaW5lIEVWRU5UX0RFU0NSX1NUUl9TWgkJMTAwCisKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIHN0YXRpYyB2b2lkCiBFdmVudERlc2NyaXB0aW9uU3RyKHU4IGV2ZW50LCB1MzIgZXZEYXRhMCwgY2hhciAqZXZTdHIpCiB7Ci0JY2hhciAqZHM7CisJY2hhciAqZHMgPSBOVUxMOwogCiAJc3dpdGNoKGV2ZW50KSB7CiAJY2FzZSBNUElfRVZFTlRfTk9ORToKQEAgLTU3NzcsOSArNTc5Myw5IEBACiAJCWlmIChldkRhdGEwID09IE1QSV9FVkVOVF9MT09QX1NUQVRFX0NIQU5HRV9MSVApCiAJCQlkcyA9ICJMb29wIFN0YXRlKExJUCkgQ2hhbmdlIjsKIAkJZWxzZSBpZiAoZXZEYXRhMCA9PSBNUElfRVZFTlRfTE9PUF9TVEFURV9DSEFOR0VfTFBFKQotCQkJZHMgPSAiTG9vcCBTdGF0ZShMUEUpIENoYW5nZSI7CQkJLyogPz8/ICovCisJCQlkcyA9ICJMb29wIFN0YXRlKExQRSkgQ2hhbmdlIjsJCS8qID8/PyAqLwogCQllbHNlCi0JCQlkcyA9ICJMb29wIFN0YXRlKExQQikgQ2hhbmdlIjsJCQkvKiA/Pz8gKi8KKwkJCWRzID0gIkxvb3AgU3RhdGUoTFBCKSBDaGFuZ2UiOwkJLyogPz8/ICovCiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX0xPR09VVDoKIAkJZHMgPSAiTG9nb3V0IjsKQEAgLTU4NDEsMjcgKzU4NTcsMzIgQEAKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgogCXsKLQkJY2hhciBidWZbNTBdOwogCQl1OCBpZCA9ICh1OCkoZXZEYXRhMCk7CiAJCXU4IFJlYXNvbkNvZGUgPSAodTgpKGV2RGF0YTAgPj4gMTYpOwogCQlzd2l0Y2ggKFJlYXNvbkNvZGUpIHsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FEREVEOgotCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogQWRkZWQ6IGlkPSVkIiwgaWQpOworCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBBZGRlZDogaWQ9JWQiLCBpZCk7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PVF9SRVNQT05ESU5HOgotCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogRGVsZXRlZDogaWQ9JWQiLCBpZCk7CisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IERlbGV0ZWQ6IGlkPSVkIiwgaWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBOgotCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogU01BUlQgRGF0YTogaWQ9JWQiLCBpZCk7CisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IFNNQVJUIERhdGE6IGlkPSVkIiwKKwkJCSAgICBpZCk7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PX1BFUlNJU1RfQURERUQ6Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBObyBQZXJzaXN0YW5jeSBBZGRlZDogaWQ9JWQiLCBpZCk7CisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IE5vIFBlcnNpc3RhbmN5ICIKKwkJCSAgICAiQWRkZWQ6IGlkPSVkIiwgaWQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBVbmtub3duOiBpZD0lZCIsIGlkKTsKLQkJYnJlYWs7CisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IFVua25vd246IGlkPSVkIiwgaWQpOworCQkJYnJlYWs7CiAJCX0KLQkJZHMgPSBidWY7CiAJCWJyZWFrOwogCX0KIAljYXNlIE1QSV9FVkVOVF9PTl9CVVNfVElNRVJfRVhQSVJFRDoKQEAgLTU4NzgsNDEgKzU4OTksNDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfU0FTX1BIWV9MSU5LX1NUQVRVUzoKIAl7Ci0JCWNoYXIgYnVmWzUwXTsKIAkJdTggTGlua1JhdGVzID0gKHU4KShldkRhdGEwID4+IDgpOwogCQl1OCBQaHlOdW1iZXIgPSAodTgpKGV2RGF0YTApOwogCQlMaW5rUmF0ZXMgPSAoTGlua1JhdGVzICYgTVBJX0VWRU5UX1NBU19QTFNfTFJfQ1VSUkVOVF9NQVNLKSA+PgogCQkJTVBJX0VWRU5UX1NBU19QTFNfTFJfQ1VSUkVOVF9TSElGVDsKIAkJc3dpdGNoIChMaW5rUmF0ZXMpIHsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFX1VOS05PV046Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCQkgICAiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKIAkJCSAgICIgUmF0ZSBVbmtub3duIixQaHlOdW1iZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV9QSFlfRElTQUJMRUQ6Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCQkgICAiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKIAkJCSAgICIgUGh5IERpc2FibGVkIixQaHlOdW1iZXIpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV9GQUlMRURfU1BFRURfTkVHT1RJQVRJT046Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCQkgICAiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKIAkJCSAgICIgRmFpbGVkIFNwZWVkIE5lZ28iLFBoeU51bWJlcik7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFX1NBVEFfT09CX0NPTVBMRVRFOgotCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCiAJCQkgICAiIFNhdGEgT09CIENvbXBsZXRlZCIsUGh5TnVtYmVyKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSV9FVkVOVF9TQVNfUExTX0xSX1JBVEVfMV81OgotCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQlzbnByaW50ZihldlN0ciwgRVZFTlRfREVTQ1JfU1RSX1NaLAorCQkJICAgIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCiAJCQkgICAiIFJhdGUgMS41IEdicHMiLFBoeU51bWJlcik7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFXzNfMDoKLQkJCXNwcmludGYoYnVmLCJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgorCQkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJCSAgICJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgogCQkJICAgIiBSYXRlIDMuMCBHcGJzIixQaHlOdW1iZXIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkIiwgUGh5TnVtYmVyKTsKKwkJCXNucHJpbnRmKGV2U3RyLCBFVkVOVF9ERVNDUl9TVFJfU1osCisJCQkgICAiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkIiwgUGh5TnVtYmVyKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWRzID0gYnVmOwogCQlicmVhazsKIAl9CiAJY2FzZSBNUElfRVZFTlRfU0FTX0RJU0NPVkVSWV9FUlJPUjoKQEAgLTU5MjEsOSArNTk0Nyw4IEBACiAJY2FzZSBNUElfRVZFTlRfSVJfUkVTWU5DX1VQREFURToKIAl7CiAJCXU4IHJlc3luY19jb21wbGV0ZSA9ICh1OCkoZXZEYXRhMCA+PiAxNik7Ci0JCWNoYXIgYnVmWzQwXTsKLQkJc3ByaW50ZihidWYsIklSIFJlc3luYyBVcGRhdGU6IENvbXBsZXRlID0gJWQ6IixyZXN5bmNfY29tcGxldGUpOwotCQlkcyA9IGJ1ZjsKKwkJc25wcmludGYoZXZTdHIsIEVWRU5UX0RFU0NSX1NUUl9TWiwKKwkJICAgICJJUiBSZXN5bmMgVXBkYXRlOiBDb21wbGV0ZSA9ICVkOiIscmVzeW5jX2NvbXBsZXRlKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJX0VWRU5UX0lSMjoKQEAgLTU5NzYsNyArNjAwMSw4IEBACiAJCWRzID0gIlVua25vd24iOwogCQlicmVhazsKIAl9Ci0Jc3RyY3B5KGV2U3RyLGRzKTsKKwlpZiAoZHMpCisJCXN0cm5jcHkoZXZTdHIsIGRzLCBFVkVOVF9ERVNDUl9TVFJfU1opOwogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCkBAIC01OTk4LDcgKzYwMjQsNyBAQAogCWludCBpaTsKIAlpbnQgciA9IDA7CiAJaW50IGhhbmRsZXJzID0gMDsKLQljaGFyIGV2U3RyWzEwMF07CisJY2hhciBldlN0cltFVkVOVF9ERVNDUl9TVFJfU1pdOwogCXU4IGV2ZW50OwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggYmU3ZTg1MC4uZjY3M2NjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTc2LDggKzc2LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjAzLjA4IgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDMuMDgiCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wMy4wOSIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjAzLjA5IgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApAQCAtNDg5LDcgKzQ4OSw2IEBACiAKICNkZWZpbmUgTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRAkweDAxCS8qIHJwb3J0IHJlZ2lzdGVyZWQgKi8KICNkZWZpbmUgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORwkweDAyCS8qIG1pc3NpbmcgZnJvbSBEZXZQYWdlMCBzY2FuICovCi0jZGVmaW5lIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01BUFBFRF9WREVWIDB4MDQJLyogdGFyZ2V0IG1hcHBlZCBpbiB2ZGV2ICovCiAKIC8qCiAgKiBkYXRhIGFsbG9jYXRlZCBmb3IgZWFjaCBmYyBycG9ydCBkZXZpY2UKQEAgLTUwMSw3ICs1MDAsNiBAQAogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIAlGQ0RldmljZVBhZ2UwX3QgcGcwOwogCXU4CQlmbGFnczsKLQl1OAkJcmVtYXBfbmVlZGVkOwogfTsKIAogLyoKQEAgLTYyOCwxMSArNjI2LDExIEBACiAJc3RydWN0IHdvcmtfc3RydWN0CSBtcHRzY3NpaF9wZXJzaXN0VGFzazsKIAogCXN0cnVjdCBsaXN0X2hlYWQJIGZjX3Jwb3J0czsKLQlzcGlubG9ja190CQkgZmNfcnBvcnRfbG9jazsgLyogbGlzdCBhbmQgcmkgZmxhZ3MgKi8KIAlzcGlubG9ja190CQkgZmNfcmVzY2FuX3dvcmtfbG9jazsKIAlpbnQJCQkgZmNfcmVzY2FuX3dvcmtfY291bnQ7CiAJc3RydWN0IHdvcmtfc3RydWN0CSBmY19yZXNjYW5fd29yazsKLQorCWNoYXIJCQkgZmNfcmVzY2FuX3dvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmY19yZXNjYW5fd29ya19xOwogfSBNUFRfQURBUFRFUjsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwppbmRleCBiMzQzZjJhLi44NTY0ODc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCkBAIC0zNDEsOSArMzQxLDYgQEAKIAlyaWQtPnBvcnRfbmFtZSA9ICgodTY0KXBnMC0+V1dQTi5IaWdoKSA8PCAzMiB8ICh1NjQpcGcwLT5XV1BOLkxvdzsKIAlyaWQtPnBvcnRfaWQgPSAgIHBnMC0+UG9ydElkZW50aWZpZXI7CiAJcmlkLT5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKLQlyaWQtPnJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKLQlpZiAocGcwLT5Qcm90b2NvbCAmIE1QSV9GQ19ERVZJQ0VfUEFHRTBfUFJPVF9GQ1BfSU5JVElBVE9SKQotCQlyaWQtPnJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX0lOSVRJQVRPUjsKIAogCXJldHVybiAwOwogfQpAQCAtMzU1LDE1ICszNTIsMTggQEAKIAlzdHJ1Y3QgZmNfcnBvcnQJCSpycG9ydDsKIAlzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbwkqcmk7CiAJaW50CQkJbmV3X3JpID0gMTsKLQl1NjQJCQlwbjsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1NjQJCQlwbiwgbm47CiAJVmlydFRhcmdldAkJKnZ0YXJnZXQ7CisJdTMyCQkJcm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047CiAKIAlpZiAobXB0ZmNfZ2VuZXJhdGVfcnBvcnRfaWRzKHBnMCwgJnJwb3J0X2lkcykgPCAwKQogCQlyZXR1cm47CiAKKwlyb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7CisJaWYgKHBnMC0+UHJvdG9jb2wgJiBNUElfRkNfREVWSUNFX1BBR0UwX1BST1RfRkNQX0lOSVRJQVRPUikKKwkJcm9sZXMgfD0gRkNfUlBPUlRfUk9MRV9GQ1BfSU5JVElBVE9SOworCiAJLyogc2NhbiBsaXN0IGxvb2tpbmcgZm9yIGEgbWF0Y2ggKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19ycG9ydF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyaSwgJmlvYy0+ZmNfcnBvcnRzLCBsaXN0KSB7CiAJCXBuID0gKHU2NClyaS0+cGcwLldXUE4uSGlnaCA8PCAzMiB8ICh1NjQpcmktPnBnMC5XV1BOLkxvdzsKIAkJaWYgKHBuID09IHJwb3J0X2lkcy5wb3J0X25hbWUpIHsJLyogbWF0Y2ggKi8KQEAgLTM3MywxMSArMzczLDkgQEAKIAkJfQogCX0KIAlpZiAobmV3X3JpKSB7CS8qIGFsbG9jYXRlIG9uZSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZjX3Jwb3J0X2xvY2ssIGZsYWdzKTsKIAkJcmkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXJpKQogCQkJcmV0dXJuOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19ycG9ydF9sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJnJpLT5saXN0LCAmaW9jLT5mY19ycG9ydHMpOwogCX0KIApAQCAtMzg3LDE0ICszODUsMTEgQEAKIAkvKiBNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEIC0gcnBvcnQgbm90IHByZXZpb3VzbHkgZGVsZXRlZCAqLwogCWlmICghKHJpLT5mbGFncyAmIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX1JFR0lTVEVSRUQpKSB7CiAJCXJpLT5mbGFncyB8PSBNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZjX3Jwb3J0X2xvY2ssIGZsYWdzKTsKIAkJcnBvcnQgPSBmY19yZW1vdGVfcG9ydF9hZGQoaW9jLT5zaCwgY2hhbm5lbCwgJnJwb3J0X2lkcyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZjX3Jwb3J0X2xvY2ssIGZsYWdzKTsKIAkJaWYgKHJwb3J0KSB7CiAJCQlyaS0+cnBvcnQgPSBycG9ydDsKIAkJCWlmIChuZXdfcmkpIC8qIG1heSBoYXZlIGJlZW4gcmVzZXQgYnkgdXNlciAqLwogCQkJCXJwb3J0LT5kZXZfbG9zc190bW8gPSBtcHRmY19kZXZfbG9zc190bW87Ci0JCQkqKChzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqKilycG9ydC0+ZGRfZGF0YSkgPSByaTsKIAkJCS8qCiAJCQkgKiBpZiBhbHJlYWR5IG1hcHBlZCwgcmVtYXAgaGVyZS4gIElmIG5vdCBtYXBwZWQsCiAJCQkgKiB0YXJnZXRfYWxsb2Mgd2lsbCBhbGxvY2F0ZSB2dGFyZ2V0IGFuZCBtYXAsCkBAIC00MDYsMTYgKzQwMSwyMSBAQAogCQkJCQl2dGFyZ2V0LT50YXJnZXRfaWQgPSBwZzAtPkN1cnJlbnRUYXJnZXRJRDsKIAkJCQkJdnRhcmdldC0+YnVzX2lkID0gcGcwLT5DdXJyZW50QnVzOwogCQkJCX0KLQkJCQlyaS0+cmVtYXBfbmVlZGVkID0gMDsKIAkJCX0KKwkJCSooKHN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICoqKXJwb3J0LT5kZF9kYXRhKSA9IHJpOworCQkJLyogc2NhbiB3aWxsIGJlIHNjaGVkdWxlZCBvbmNlIHJwb3J0IGJlY29tZXMgYSB0YXJnZXQgKi8KKwkJCWZjX3JlbW90ZV9wb3J0X3JvbGVjaGcocnBvcnQscm9sZXMpOworCisJCQlwbiA9ICh1NjQpcmktPnBnMC5XV1BOLkhpZ2ggPDwgMzIgfCAodTY0KXJpLT5wZzAuV1dQTi5Mb3c7CisJCQlubiA9ICh1NjQpcmktPnBnMC5XV05OLkhpZ2ggPDwgMzIgfCAodTY0KXJpLT5wZzAuV1dOTi5Mb3c7CiAJCQlkZmNwcmludGsgKChNWUlPQ19zX0lORk9fRk1UCiAJCQkJIm1wdGZjX3JlZ19kZXYuJWQ6ICV4LCAlbGx4IC8gJWxseCwgdGlkICVkLCAiCiAJCQkJInJwb3J0IHRpZCAlZCwgdG1vICVkXG4iLAogCQkJCQlpb2MtPm5hbWUsCiAJCQkJCWlvYy0+c2gtPmhvc3Rfbm8sCiAJCQkJCXBnMC0+UG9ydElkZW50aWZpZXIsCi0JCQkJCXBnMC0+V1dOTiwKLQkJCQkJcGcwLT5XV1BOLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKW5uLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBuLAogCQkJCQlwZzAtPkN1cnJlbnRUYXJnZXRJRCwKIAkJCQkJcmktPnJwb3J0LT5zY3NpX3RhcmdldF9pZCwKIAkJCQkJcmktPnJwb3J0LT5kZXZfbG9zc190bW8pKTsKQEAgLTQyNSw4ICs0MjUsNiBAQAogCQkJcmkgPSBOVUxMOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZmNfcnBvcnRfbG9jayxmbGFncyk7Ci0KIH0KIAogLyoKQEAgLTQ3Niw3ICs0NzQsNiBAQAogCQkJdnRhcmdldC0+dGFyZ2V0X2lkID0gcmktPnBnMC5DdXJyZW50VGFyZ2V0SUQ7CiAJCQl2dGFyZ2V0LT5idXNfaWQgPSByaS0+cGcwLkN1cnJlbnRCdXM7CiAJCQlyaS0+c3RhcmdldCA9IHN0YXJnZXQ7Ci0JCQlyaS0+cmVtYXBfbmVlZGVkID0gMDsKIAkJCXJjID0gMDsKIAkJfQogCX0KQEAgLTUwMiwxMCArNDk5LDEwIEBACiAJVmlydERldmljZQkJKnZkZXY7CiAJc3RydWN0IHNjc2lfdGFyZ2V0CSpzdGFyZ2V0OwogCXN0cnVjdCBmY19ycG9ydAkJKnJwb3J0OwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAKLQlycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2RldikpOworCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKKwlycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc3RhcmdldCk7CiAKIAlpZiAoIXJwb3J0IHx8IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTUxOSwxMCArNTE2LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhkLT5pb2MtPmZjX3Jwb3J0X2xvY2ssZmxhZ3MpOwogCiAJc2Rldi0+aG9zdGRhdGEgPSB2ZGV2OwotCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAl2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CiAKIAlpZiAodnRhcmdldC0+bnVtX2x1bnMgPT0gMCkgewpAQCAtNTM1LDE0ICs1MzAsMTYgQEAKIAl2ZGV2LT52dGFyZ2V0ID0gdnRhcmdldDsKIAl2ZGV2LT5sdW4gPSBzZGV2LT5sdW47CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZC0+aW9jLT5mY19ycG9ydF9sb2NrLGZsYWdzKTsKLQogCXZ0YXJnZXQtPm51bV9sdW5zKys7CiAKKwogI2lmZGVmIERNUFRfREVCVUdfRkMKLQkgeworCXsKKwl1NjQgbm4sIHBuOwogCXN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICpyaTsKIAlyaSA9ICooKHN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICoqKXJwb3J0LT5kZF9kYXRhKTsKKwlwbiA9ICh1NjQpcmktPnBnMC5XV1BOLkhpZ2ggPDwgMzIgfCAodTY0KXJpLT5wZzAuV1dQTi5Mb3c7CisJbm4gPSAodTY0KXJpLT5wZzAuV1dOTi5IaWdoIDw8IDMyIHwgKHU2NClyaS0+cGcwLldXTk4uTG93OwogCWRmY3ByaW50ayAoKE1ZSU9DX3NfSU5GT19GTVQKIAkJIm1wdGZjX3Nsdl9hbGxvYy4lZDogbnVtX2x1bnMgJWQsIHNkZXYuaWQgJWQsICIKIAkgICAgICAgICJDdXJyZW50VGFyZ2V0SUQgJWQsICV4ICVsbHggJWxseFxuIiwKQEAgLTU1MCw3ICs1NDcsOSBAQAogCQlzZGV2LT5ob3N0LT5ob3N0X25vLAogCQl2dGFyZ2V0LT5udW1fbHVucywKIAkJc2Rldi0+aWQsIHJpLT5wZzAuQ3VycmVudFRhcmdldElELAotCQlyaS0+cGcwLlBvcnRJZGVudGlmaWVyLCByaS0+cGcwLldXUE4sIHJpLT5wZzAuV1dOTikpOworCQlyaS0+cGcwLlBvcnRJZGVudGlmaWVyLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXBuLAorCQkodW5zaWduZWQgbG9uZyBsb25nKW5uKSk7CiAJfQogI2VuZGlmCiAKQEAgLTU3MCwxMSArNTY5LDMxIEBACiAJCWRvbmUoU0NwbnQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmkgPSAqKChzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqKilycG9ydC0+ZGRfZGF0YSk7Ci0JaWYgKHVubGlrZWx5KHJpLT5yZW1hcF9uZWVkZWQpKQotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAotCXJldHVybiBtcHRzY3NpaF9xY21kKFNDcG50LGRvbmUpOworCS8qIGRkX2RhdGEgaXMgbnVsbCB1bnRpbCBmaW5pc2hlZCBhZGRpbmcgdGFyZ2V0ICovCisJcmkgPSAqKChzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqKilycG9ydC0+ZGRfZGF0YSk7CisJaWYgKHVubGlrZWx5KCFyaSkpIHsKKwkJZGZjcHJpbnRrICgoTVlJT0Nfc19JTkZPX0ZNVAorCQkJIm1wdGZjX3FjbWQuJWQ6ICVkOiVkLCBkZF9kYXRhIGlzIG51bGwuXG4iLAorCQkJKChNUFRfU0NTSV9IT1NUICopIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhKS0+aW9jLT5uYW1lLAorCQkJKChNUFRfU0NTSV9IT1NUICopIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhKS0+aW9jLT5zaC0+aG9zdF9ubywKKwkJCVNDcG50LT5kZXZpY2UtPmlkLFNDcG50LT5kZXZpY2UtPmx1bikpOworCQlTQ3BudC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKKwkJZG9uZShTQ3BudCk7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IG1wdHNjc2loX3FjbWQoU0NwbnQsZG9uZSk7CisjaWZkZWYgRE1QVF9ERUJVR19GQworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWRmY3ByaW50ayAoKE1ZSU9DX3NfSU5GT19GTVQKKwkJCSJtcHRmY19xY21kLiVkOiAlZDolZCwgbXB0c2NzaWhfcWNtZCByZXR1cm5zIG5vbi16ZXJvLlxuIiwKKwkJCSgoTVBUX1NDU0lfSE9TVCAqKSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSktPmlvYy0+bmFtZSwKKwkJCSgoTVBUX1NDU0lfSE9TVCAqKSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSktPmlvYy0+c2gtPmhvc3Rfbm8sCisJCQlTQ3BudC0+ZGV2aWNlLT5pZCxTQ3BudC0+ZGV2aWNlLT5sdW4pKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjE1LDE4ICs2MzQsMTcgQEAKIAlNUFRfQURBUFRFUgkJKmlvYyA9IChNUFRfQURBUFRFUiAqKWFyZzsKIAlpbnQJCQlpaTsKIAlpbnQJCQl3b3JrX3RvX2RvOworCXU2NAkJCXBuOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICpyaTsKIAogCWRvIHsKIAkJLyogc3RhcnQgYnkgdGFnZ2luZyBhbGwgcG9ydHMgYXMgbWlzc2luZyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19ycG9ydF9sb2NrLGZsYWdzKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyaSwgJmlvYy0+ZmNfcnBvcnRzLCBsaXN0KSB7CiAJCQlpZiAocmktPmZsYWdzICYgTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRCkgewogCQkJCXJpLT5mbGFncyB8PSBNUFRfUlBPUlRfSU5GT19GTEFHU19NSVNTSU5HOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZmNfcnBvcnRfbG9jayxmbGFncyk7CiAKIAkJLyoKIAkJICogbm93IHJlc2NhbiBkZXZpY2VzIGtub3duIHRvIGFkYXB0ZXIsCkBAIC02MzksMzMgKzY1NywyNCBAQAogCQl9CiAKIAkJLyogZGVsZXRlIGRldmljZXMgc3RpbGwgbWlzc2luZyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19ycG9ydF9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmksICZpb2MtPmZjX3Jwb3J0cywgbGlzdCkgewogCQkJLyogaWYgbmV3bHkgbWlzc2luZywgZGVsZXRlIGl0ICovCi0JCQlpZiAoKHJpLT5mbGFncyAmIChNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEIHwKLQkJCQkJICBNUFRfUlBPUlRfSU5GT19GTEFHU19NSVNTSU5HKSkKLQkJCSAgPT0gKE1QVF9SUE9SVF9JTkZPX0ZMQUdTX1JFR0lTVEVSRUQgfAotCQkJICAgICAgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORykpIHsKKwkJCWlmIChyaS0+ZmxhZ3MgJiBNUFRfUlBPUlRfSU5GT19GTEFHU19NSVNTSU5HKSB7CiAKIAkJCQlyaS0+ZmxhZ3MgJj0gfihNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEfAogCQkJCQkgICAgICAgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORyk7Ci0JCQkJcmktPnJlbWFwX25lZWRlZCA9IDE7Ci0JCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJpLT5ycG9ydCk7Ci0JCQkJLyoKLQkJCQkgKiByZW1vdGUgcG9ydCBub3QgcmVhbGx5IGRlbGV0ZWQgJ2NhdXNlCi0JCQkJICogYmluZGluZyBpcyBieSBXV1BOIGFuZCBkcml2ZXIgb25seQotCQkJCSAqIHJlZ2lzdGVycyBGQ1BfVEFSR0VUcyBidXQgY2Fubm90IHRydXN0Ci0JCQkJICogZGF0YSBzdHJ1Y3R1cmVzLgotCQkJCSAqLworCQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShyaS0+cnBvcnQpOwkvKiB3b24ndCBzbGVlcCAqLwogCQkJCXJpLT5ycG9ydCA9IE5VTEw7CisKKwkJCQlwbiA9ICh1NjQpcmktPnBnMC5XV1BOLkhpZ2ggPDwgMzIgfAorCQkJCSAgICAgKHU2NClyaS0+cGcwLldXUE4uTG93OwogCQkJCWRmY3ByaW50ayAoKE1ZSU9DX3NfSU5GT19GTVQKIAkJCQkJIm1wdGZjX3Jlc2Nhbi4lZDogJWxseCBkZWxldGVkXG4iLAogCQkJCQlpb2MtPm5hbWUsCiAJCQkJCWlvYy0+c2gtPmhvc3Rfbm8sCi0JCQkJCXJpLT5wZzAuV1dQTikpOworCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBuKSk7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19ycG9ydF9sb2NrLGZsYWdzKTsKIAogCQkvKgogCQkgKiBhbGxvdyBtdWx0aXBsZSBwYXNzZXMgYXMgdGFyZ2V0IHN0YXRlCkBAIC04NzAsMTAgKzg3OSwyMyBAQAogCQlnb3RvIG91dF9tcHRmY19wcm9iZTsKIAl9CiAKLQlmb3IgKGlpPTA7IGlpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpaSsrKSB7Ci0JCW1wdGZjX2luaXRfaG9zdF9hdHRyKGlvYyxpaSk7Ci0JCW1wdGZjX0dldEZjRGV2UGFnZTAoaW9jLGlpLG1wdGZjX3JlZ2lzdGVyX2Rldik7Ci0JfQorCS8qIGluaXRpYWxpemUgd29ya3F1ZXVlICovCisKKwlzbnByaW50Zihpb2MtPmZjX3Jlc2Nhbl93b3JrX3FfbmFtZSwgS09CSl9OQU1FX0xFTiwgIm1wdGZjX3dxXyVkIiwKKwkJc2gtPmhvc3Rfbm8pOworCWlvYy0+ZmNfcmVzY2FuX3dvcmtfcSA9CisJCWNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcV9uYW1lKTsKKwlpZiAoIWlvYy0+ZmNfcmVzY2FuX3dvcmtfcSkKKwkJZ290byBvdXRfbXB0ZmNfcHJvYmU7CisKKwkvKgorCSAqIHNjYW4gZm9yIHJwb3J0cyAtCisJICoJYnkgZG9pbmcgaXQgdmlhIHRoZSB3b3JrcXVldWUsIHNvbWUgbG9ja2luZyBpcyBlbGltaW5hdGVkCisJICovCisKKwlpb2MtPmZjX3Jlc2Nhbl93b3JrX2NvdW50ID0gMTsKKwlxdWV1ZV93b3JrKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSwgJmlvYy0+ZmNfcmVzY2FuX3dvcmspOworCWZsdXNoX3dvcmtxdWV1ZShpb2MtPmZjX3Jlc2Nhbl93b3JrX3EpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk0OSw4ICs5NzEsMTggQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdAogbXB0ZmNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCU1QVF9BREFQVEVSICppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG1wdGZjX3Jwb3J0X2luZm8gKnAsICpuOworCU1QVF9BREFQVEVSCQkqaW9jID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtcHRmY19ycG9ydF9pbmZvCSpwLCAqbjsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya19xOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJLyogZGVzdHJveSB3b3JrcXVldWUgKi8KKwlpZiAoKHdvcmtfcT1pb2MtPmZjX3Jlc2Nhbl93b3JrX3EpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZjX3Jlc2Nhbl93b3JrX2xvY2ssIGZsYWdzKTsKKwkJaW9jLT5mY19yZXNjYW5fd29ya19xID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHdvcmtfcSk7CisJfQogCiAJZmNfcmVtb3ZlX2hvc3QoaW9jLT5zaCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCmluZGV4IDAxMGQ0YTMuLmFmNmVjNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtOTEsNiArOTEsNyBAQAogCU1QVFNBU19ERUxfREVWSUNFLAogCU1QVFNBU19BRERfUkFJRCwKIAlNUFRTQVNfREVMX1JBSUQsCisJTVBUU0FTX0lHTk9SRV9FVkVOVCwKIH07CiAKIHN0cnVjdCBtcHRzYXNfaG90cGx1Z19ldmVudCB7CkBAIC0yOTgsNiArMjk5LDI2IEBACiAJcmV0dXJuIHJjOwogfQogCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgc2NzaSBlbmQgZGV2aWNlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CittcHRzYXNfaXNfZW5kX2RldmljZShzdHJ1Y3QgbXB0c2FzX2RldmluZm8gKiBhdHRhY2hlZCkKK3sKKwlpZiAoKGF0dGFjaGVkLT5oYW5kbGUpICYmCisJICAgIChhdHRhY2hlZC0+ZGV2aWNlX2luZm8gJgorCSAgICBNUElfU0FTX0RFVklDRV9JTkZPX0VORF9ERVZJQ0UpICYmCisJICAgICgoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKKwkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKSB8CisJICAgIChhdHRhY2hlZC0+ZGV2aWNlX2luZm8gJgorCSAgICBNUElfU0FTX0RFVklDRV9JTkZPX1NUUF9UQVJHRVQpIHwKKwkgICAgKGF0dGFjaGVkLT5kZXZpY2VfaW5mbyAmCisJICAgIE1QSV9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UpKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogbXB0c2FzX3Nhc19lbmNsb3N1cmVfcGcwKE1QVF9BREFQVEVSICppb2MsIHN0cnVjdCBtcHRzYXNfZW5jbG9zdXJlICplbmNsb3N1cmUsCiAJCXUzMiBmb3JtLCB1MzIgZm9ybV9zcGVjaWZpYykKQEAgLTM2Niw3ICszODcsMTUgQEAKIHN0YXRpYyBpbnQKIG1wdHNhc19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3QgPSBzZGV2LT5ob3N0OworCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7CisKKwkvKgorCSAqIFJBSUQgdm9sdW1lcyBwbGFjZWQgYmV5b25kIHRoZSBsYXN0IGV4cGVjdGVkIHBvcnQuCisJICogSWdub3JlIHNlbmRpbmcgc2FzIG1vZGUgcGFnZXMgaW4gdGhhdCBjYXNlLi4KKwkgKi8KKwlpZiAoc2Rldi0+Y2hhbm5lbCA8IGhkLT5pb2MtPm51bV9wb3J0cykKKwkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CiAKIAlyZXR1cm4gbXB0c2NzaWhfc2xhdmVfY29uZmlndXJlKHNkZXYpOwogfQpAQCAtODY0LDcgKzg5MywxMSBAQAogCVNhc0RldmljZVBhZ2UwX3QgKmJ1ZmZlcjsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJX19sZTY0IHNhc19hZGRyZXNzOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3I9MDsKKworCWlmIChpb2MtPnNhc19kaXNjb3ZlcnlfcnVudGltZSAmJgorCQltcHRzYXNfaXNfZW5kX2RldmljZShkZXZpY2VfaW5mbykpCisJCQlnb3RvIG91dDsKIAogCWhkci5QYWdlVmVyc2lvbiA9IE1QSV9TQVNERVZJQ0UwX1BBR0VWRVJTSU9OOwogCWhkci5FeHRQYWdlTGVuZ3RoID0gMDsKQEAgLTEwMDEsNyArMTAzNCwxMSBAQAogCUNPTkZJR1BBUk1TIGNmZzsKIAlTYXNFeHBhbmRlclBhZ2UxX3QgKmJ1ZmZlcjsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Ci0JaW50IGVycm9yOworCWludCBlcnJvcj0wOworCisJaWYgKGlvYy0+c2FzX2Rpc2NvdmVyeV9ydW50aW1lICYmCisJCW1wdHNhc19pc19lbmRfZGV2aWNlKCZwaHlfaW5mby0+YXR0YWNoZWQpKQorCQkJZ290byBvdXQ7CiAKIAloZHIuUGFnZVZlcnNpb24gPSBNUElfU0FTRVhQQU5ERVIwX1BBR0VWRVJTSU9OOwogCWhkci5FeHRQYWdlTGVuZ3RoID0gMDsKQEAgLTEwNjAsMjYgKzEwOTcsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHNjc2kgZW5kIGRldmljZQotICovCi1zdGF0aWMgaW5saW5lIGludAotbXB0c2FzX2lzX2VuZF9kZXZpY2Uoc3RydWN0IG1wdHNhc19kZXZpbmZvICogYXR0YWNoZWQpCi17Ci0JaWYgKChhdHRhY2hlZC0+aGFuZGxlKSAmJgotCSAgICAoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKLQkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFKSAmJgotCSAgICAoKGF0dGFjaGVkLT5kZXZpY2VfaW5mbyAmCi0JICAgIE1QSV9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkgfAotCSAgICAoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKLQkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19TVFBfVEFSR0VUKSB8Ci0JICAgIChhdHRhY2hlZC0+ZGV2aWNlX2luZm8gJgotCSAgICBNUElfU0FTX0RFVklDRV9JTkZPX1NBVEFfREVWSUNFKSkpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBtcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oc3RydWN0IHNhc19pZGVudGlmeSAqaWRlbnRpZnksCiAJCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyAqZGV2aWNlX2luZm8pCkBAIC0xNzI5LDYgKzE3NDYsOSBAQAogCQlicmVhazsKIAljYXNlIE1QVFNBU19BRERfREVWSUNFOgogCisJCWlmIChldi0+cGh5c19kaXNrX251bV92YWxpZCkKKwkJCW1wdF9maW5kSW1Wb2x1bWVzKGlvYyk7CisKIAkJLyoKIAkJICogUmVmcmVzaCBzYXMgZGV2aWNlIHBnMCBkYXRhCiAJCSAqLwpAQCAtMTg2MCw2ICsxODgwLDkgQEAKIAkJc2NzaV9kZXZpY2VfcHV0KHNkZXYpOwogCQltcHRfZmluZEltVm9sdW1lcyhpb2MpOwogCQlicmVhazsKKwljYXNlIE1QVFNBU19JR05PUkVfRVZFTlQ6CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJa2ZyZWUoZXYpOwpAQCAtMTkzMiw3ICsxOTU1LDggQEAKIAkJRVZFTlRfREFUQV9SQUlEICpyYWlkX2V2ZW50X2RhdGEpCiB7CiAJc3RydWN0IG1wdHNhc19ob3RwbHVnX2V2ZW50ICpldjsKLQlSQUlEX1ZPTDBfU1RBVFVTICogdm9sdW1lU3RhdHVzOworCWludCBzdGF0dXMgPSBsZTMyX3RvX2NwdShyYWlkX2V2ZW50X2RhdGEtPlNldHRpbmdzU3RhdHVzKTsKKwlpbnQgc3RhdGUgPSAoc3RhdHVzID4+IDgpICYgMHhmZjsKIAogCWlmIChpb2MtPmJ1c190eXBlICE9IFNBUykKIAkJcmV0dXJuOwpAQCAtMTk0Nyw2ICsxOTcxLDcgQEAKIAlJTklUX1dPUksoJmV2LT53b3JrLCBtcHRzYXNfaG90cGx1Z193b3JrLCBldik7CiAJZXYtPmlvYyA9IGlvYzsKIAlldi0+aWQgPSByYWlkX2V2ZW50X2RhdGEtPlZvbHVtZUlEOworCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0lHTk9SRV9FVkVOVDsKIAogCXN3aXRjaCAocmFpZF9ldmVudF9kYXRhLT5SZWFzb25Db2RlKSB7CiAJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19QSFlTRElTS19ERUxFVEVEOgpAQCAtMTk1OCw2ICsxOTgzLDI1IEBACiAJCWV2LT5waHlzX2Rpc2tfbnVtID0gcmFpZF9ldmVudF9kYXRhLT5QaHlzRGlza051bTsKIAkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfREVMX0RFVklDRTsKIAkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19QSFlTRElTS19TVEFUVVNfQ0hBTkdFRDoKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIE1QSV9QRF9TVEFURV9PTkxJTkU6CisJCQlpb2MtPnJhaWRfZGF0YS5pc1JhaWQgPSAxOworCQkJZXYtPnBoeXNfZGlza19udW1fdmFsaWQgPSAxOworCQkJZXYtPnBoeXNfZGlza19udW0gPSByYWlkX2V2ZW50X2RhdGEtPlBoeXNEaXNrTnVtOworCQkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfQUREX0RFVklDRTsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9QRF9TVEFURV9NSVNTSU5HOgorCQljYXNlIE1QSV9QRF9TVEFURV9OT1RfQ09NUEFUSUJMRToKKwkJY2FzZSBNUElfUERfU1RBVEVfT0ZGTElORV9BVF9IT1NUX1JFUVVFU1Q6CisJCWNhc2UgTVBJX1BEX1NUQVRFX0ZBSUxFRF9BVF9IT1NUX1JFUVVFU1Q6CisJCWNhc2UgTVBJX1BEX1NUQVRFX09GRkxJTkVfRk9SX0FOT1RIRVJfUkVBU09OOgorCQkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfREVMX0RFVklDRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19WT0xVTUVfREVMRVRFRDoKIAkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfREVMX1JBSUQ7CiAJCWJyZWFrOwpAQCAtMTk2NSwxMSArMjAwOSwxOCBAQAogCQlldi0+ZXZlbnRfdHlwZSA9IE1QVFNBU19BRERfUkFJRDsKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfUkFJRF9SQ19WT0xVTUVfU1RBVFVTX0NIQU5HRUQ6Ci0JCXZvbHVtZVN0YXR1cyA9IChSQUlEX1ZPTDBfU1RBVFVTICopICYKLQkJICAgIHJhaWRfZXZlbnRfZGF0YS0+U2V0dGluZ3NTdGF0dXM7Ci0JCWV2LT5ldmVudF90eXBlID0gKHZvbHVtZVN0YXR1cy0+U3RhdGUgPT0KLQkJICAgIE1QSV9SQUlEVk9MMF9TVEFUVVNfU1RBVEVfRkFJTEVEKSA/Ci0JCSAgICBNUFRTQVNfREVMX1JBSUQgOiBNUFRTQVNfQUREX1JBSUQ7CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBNUElfUkFJRFZPTDBfU1RBVFVTX1NUQVRFX0ZBSUxFRDoKKwkJY2FzZSBNUElfUkFJRFZPTDBfU1RBVFVTX1NUQVRFX01JU1NJTkc6CisJCQlldi0+ZXZlbnRfdHlwZSA9IE1QVFNBU19ERUxfUkFJRDsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9SQUlEVk9MMF9TVEFUVVNfU1RBVEVfT1BUSU1BTDoKKwkJY2FzZSBNUElfUkFJRFZPTDBfU1RBVFVTX1NUQVRFX0RFR1JBREVEOgorCQkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfQUREX1JBSUQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDM3MjkwNjIuLjg0ZmEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTYzMiw3ICs2MzIsMTEgQEAKIAogCQljYXNlIE1QSV9JT0NTVEFUVVNfU0NTSV9ERVZJQ0VfTk9UX1RIRVJFOgkvKiAweDAwNDMgKi8KIAkJCS8qIFNwb29mIHRvIFNDU0kgU2VsZWN0aW9uIFRpbWVvdXQhICovCi0JCQlzYy0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCQlpZiAoaW9jLT5idXNfdHlwZSAhPSBGQykKKwkJCQlzYy0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCQkvKiBlbHNlIGZpYnJlLCBqdXN0IHN0YWxsIHVudGlsIHJlc2NhbiBldmVudCAqLworCQkJZWxzZQorCQkJCXNjLT5yZXN1bHQgPSBESURfUkVRVUVVRSA8PCAxNjsKIAogCQkJaWYgKGhkLT5zZWxfdGltZW91dFtwU2NzaVJlcS0+VGFyZ2V0SURdIDwgMHhGRkZGKQogCQkJCWhkLT5zZWxfdGltZW91dFtwU2NzaVJlcS0+VGFyZ2V0SURdKys7CkBAIC04NzcsNyArODgxLDcgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzYzsKIAogCWRzcHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogc2VhcmNoX3J1bm5pbmcgdGFyZ2V0ICVkIGx1biAlZCBtYXggJWRcbiIsCi0JCQl2ZGV2aWNlLT50YXJnZXRfaWQsIHZkZXZpY2UtPmx1biwgbWF4KSk7CisJCQl2ZGV2aWNlLT52dGFyZ2V0LT50YXJnZXRfaWQsIHZkZXZpY2UtPmx1biwgbWF4KSk7CiAKIAlmb3IgKGlpPTA7IGlpIDwgbWF4OyBpaSsrKSB7CiAJCWlmICgoc2MgPSBoZC0+U2NzaUxvb2t1cFtpaV0pICE9IE5VTEwpIHsKQEAgLTE2NDUsNyArMTY0OSw2IEBACiBtcHRzY3NpaF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQpCiB7CiAJTVBUX1NDU0lfSE9TVAkqaGQ7Ci0JTVBUX0FEQVBURVIJKmlvYzsKIAlNUFRfRlJBTUVfSERSCSptZjsKIAl1MzIJCSBjdHgyYWJvcnQ7CiAJaW50CQkgc2NwbnRfaWR4OwpAQCAtMTY2MywxNCArMTY2Niw2IEBACiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0JaW9jID0gaGQtPmlvYzsKLQlpZiAoaGQtPnJlc2V0UGVuZGluZykgewotCQlyZXR1cm4gRkFJTEVEOwotCX0KLQotCWlmIChoZC0+dGltZW91dHMgPCAtMSkKLQkJaGQtPnRpbWVvdXRzKys7Ci0KIAkvKiBGaW5kIHRoaXMgY29tbWFuZAogCSAqLwogCWlmICgoc2NwbnRfaWR4ID0gU0NQTlRfVE9fTE9PS1VQX0lEWChTQ3BudCkpIDwgMCkgewpAQCAtMTY4NCw2ICsxNjc5LDEzIEBACiAJCXJldHVybiBTVUNDRVNTOwogCX0KIAorCWlmIChoZC0+cmVzZXRQZW5kaW5nKSB7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJaWYgKGhkLT50aW1lb3V0cyA8IC0xKQorCQloZC0+dGltZW91dHMrKzsKKwogCXByaW50ayhLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IGF0dGVtcHRpbmcgdGFzayBhYm9ydCEgKHNjPSVwKVxuIiwKIAkgICAgICAgaGQtPmlvYy0+bmFtZSwgU0NwbnQpOwogCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CkBAIC0xNzAzLDcgKzE3MDUsNyBAQAogCXZkZXYgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlyZXR2YWwgPSBtcHRzY3NpaF9UTUhhbmRsZXIoaGQsIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSywKIAkJdmRldi0+dnRhcmdldC0+YnVzX2lkLCB2ZGV2LT52dGFyZ2V0LT50YXJnZXRfaWQsIHZkZXYtPmx1biwKLQkJY3R4MmFib3J0LCBtcHRzY3NpaF9nZXRfdG1fdGltZW91dChpb2MpKTsKKwkJY3R4MmFib3J0LCBtcHRzY3NpaF9nZXRfdG1fdGltZW91dChoZC0+aW9jKSk7CiAKIAlwcmludGsgKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogdGFzayBhYm9ydDogJXMgKHNjPSVwKVxuIiwKIAkJaGQtPmlvYy0+bmFtZSwKQEAgLTI1MjEsMTUgKzI1MjMsMTUgQEAKIAogCQkvKiA3LiBGQzogUmVzY2FuIGZvciBibG9ja2VkIHJwb3J0cyB3aGljaCBtaWdodCBoYXZlIHJldHVybmVkLgogCQkgKi8KLQkJZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykgewotCQkJaW50IHdvcmtfY291bnQ7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisJCWlmIChpb2MtPmJ1c190eXBlID09IEZDKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7Ci0JCQl3b3JrX2NvdW50ID0gKytpb2MtPmZjX3Jlc2Nhbl93b3JrX2NvdW50OworCQkJaWYgKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSkgeworCQkJCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX2NvdW50KysgPT0gMCkgeworCQkJCQlxdWV1ZV93b3JrKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSwKKwkJCQkJCSAgICZpb2MtPmZjX3Jlc2Nhbl93b3JrKTsKKwkJCQl9CisJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZjX3Jlc2Nhbl93b3JrX2xvY2ssIGZsYWdzKTsKLQkJCWlmICh3b3JrX2NvdW50ID09IDEpCi0JCQkJc2NoZWR1bGVfd29yaygmaW9jLT5mY19yZXNjYW5fd29yayk7CiAJCX0KIAkJZHRtcHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UICJQb3N0LVJlc2V0IGNvbXBsZXRlLlxuIiwgaW9jLT5uYW1lKSk7CiAKQEAgLTI1NDQsNyArMjU0Niw2IEBACiB7CiAJTVBUX1NDU0lfSE9TVCAqaGQ7CiAJdTggZXZlbnQgPSBsZTMyX3RvX2NwdShwRXZSZXBseS0+RXZlbnQpICYgMHhGRjsKLQlpbnQgd29ya19jb3VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGV2dHZlcmJvc2VwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIk1QVCBldmVudCAoPSUwMlhoKSByb3V0ZWQgdG8gU0NTSSBob3N0IGRyaXZlciFcbiIsCkBAIC0yNTY5LDEwICsyNTcwLDEzIEBACiAKIAljYXNlIE1QSV9FVkVOVF9SRVNDQU46CQkJCS8qIDA2ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZjX3Jlc2Nhbl93b3JrX2xvY2ssIGZsYWdzKTsKLQkJd29ya19jb3VudCA9ICsraW9jLT5mY19yZXNjYW5fd29ya19jb3VudDsKKwkJaWYgKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSkgeworCQkJaWYgKGlvYy0+ZmNfcmVzY2FuX3dvcmtfY291bnQrKyA9PSAwKSB7CisJCQkJcXVldWVfd29yayhpb2MtPmZjX3Jlc2Nhbl93b3JrX3EsCisJCQkJCSAgICZpb2MtPmZjX3Jlc2Nhbl93b3JrKTsKKwkJCX0KKwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZjX3Jlc2Nhbl93b3JrX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHdvcmtfY291bnQgPT0gMSkKLQkJCXNjaGVkdWxlX3dvcmsoJmlvYy0+ZmNfcmVzY2FuX3dvcmspOwogCQlicmVhazsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggMDljNzQ1Yi4uMzIwMWRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC03ODMsNiArNzgzLDcyIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1wdHNwaV9wY2lfdGFibGUpOwogCisKKy8qCisgKiByZW5lZ290aWF0ZSBmb3IgYSBnaXZlbiB0YXJnZXQKKyAqLworc3RhdGljIHZvaWQKK21wdHNwaV9kdl9yZW5lZ290aWF0ZV93b3JrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdvcmtfcXVldWVfd3JhcHBlciAqd3F3ID0gKHN0cnVjdCB3b3JrX3F1ZXVlX3dyYXBwZXIgKilkYXRhOworCXN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqaGQgPSB3cXctPmhkOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKworCWtmcmVlKHdxdyk7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaGQtPmlvYy0+c2gpCisJCW1wdHNwaV9kdl9kZXZpY2UoaGQsIHNkZXYpOworfQorCitzdGF0aWMgdm9pZAorbXB0c3BpX2R2X3JlbmVnb3RpYXRlKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqaGQpCit7CisJc3RydWN0IHdvcmtfcXVldWVfd3JhcHBlciAqd3F3ID0ga21hbGxvYyhzaXplb2YoKndxdyksIEdGUF9BVE9NSUMpOworCisJaWYgKCF3cXcpCisJCXJldHVybjsKKworCUlOSVRfV09SSygmd3F3LT53b3JrLCBtcHRzcGlfZHZfcmVuZWdvdGlhdGVfd29yaywgd3F3KTsKKwl3cXctPmhkID0gaGQ7CisKKwlzY2hlZHVsZV93b3JrKCZ3cXctPndvcmspOworfQorCisvKgorICogc3BpIG1vZHVsZSByZXNldCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpbnQKK21wdHNwaV9pb2NfcmVzZXQoTVBUX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKQoreworCXN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqaGQgPSAoc3RydWN0IF9NUFRfU0NTSV9IT1NUICopaW9jLT5zaC0+aG9zdGRhdGE7CisJaW50IHJjOworCisJcmMgPSBtcHRzY3NpaF9pb2NfcmVzZXQoaW9jLCByZXNldF9waGFzZSk7CisKKwlpZiAocmVzZXRfcGhhc2UgPT0gTVBUX0lPQ19QT1NUX1JFU0VUKQorCQltcHRzcGlfZHZfcmVuZWdvdGlhdGUoaGQpOworCisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX1BNCisvKgorICogc3BpIG1vZHVsZSByZXN1bWUgaGFuZGxlcgorICovCitzdGF0aWMgaW50CittcHRzcGlfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCU1QVF9BREFQVEVSIAkqaW9jID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqaGQgPSAoc3RydWN0IF9NUFRfU0NTSV9IT1NUICopaW9jLT5zaC0+aG9zdGRhdGE7CisJaW50IHJjOworCisJcmMgPSBtcHRzY3NpaF9yZXN1bWUocGRldik7CisJbXB0c3BpX2R2X3JlbmVnb3RpYXRlKGhkKTsKKworCXJldHVybiByYzsKK30KKyNlbmRpZgorCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKgpAQCAtMTAzMiw3ICsxMDk4LDcgQEAKIAkuc2h1dGRvd24JPSBtcHRzY3NpaF9zaHV0ZG93biwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IG1wdHNjc2loX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBtcHRzY3NpaF9yZXN1bWUsCisJLnJlc3VtZQkJPSBtcHRzcGlfcmVzdW1lLAogI2VuZGlmCiB9OwogCkBAIC0xMDYxLDcgKzExMjcsNyBAQAogCQkgICI6IFJlZ2lzdGVyZWQgZm9yIElPQyBldmVudCBub3RpZmljYXRpb25zXG4iKSk7CiAJfQogCi0JaWYgKG1wdF9yZXNldF9yZWdpc3RlcihtcHRzcGlEb25lQ3R4LCBtcHRzY3NpaF9pb2NfcmVzZXQpID09IDApIHsKKwlpZiAobXB0X3Jlc2V0X3JlZ2lzdGVyKG1wdHNwaURvbmVDdHgsIG1wdHNwaV9pb2NfcmVzZXQpID09IDApIHsKIAkJZHByaW50aygoS0VSTl9JTkZPIE1ZTkFNCiAJCSAgIjogUmVnaXN0ZXJlZCBmb3IgSU9DIHJlc2V0IG5vdGlmaWNhdGlvbnNcbiIpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKaW5kZXggNWVhMTMzYy4uN2JkNGQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYwpAQCAtNTUsNiArNTUsNyBAQAogCXUzMiBtOwkJCS8qIG1lc3NhZ2UgaWQgKi8KIAlzdHJ1Y3QgaTJvX21lc3NhZ2UgKm1zZzsJLyogcG9pbnRlciB0byB0aGUgcmVwbHkgbWVzc2FnZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbm9kZSBpbiBnbG9iYWwgd2FpdCBsaXN0ICovCisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIGJlZm9yZSBtb2RpZnlpbmcgKi8KIH07CiAKIC8qIFdvcmsgc3RydWN0IG5lZWRlZCB0byBoYW5kbGUgTENUIE5PVElGWSByZXBsaWVzICovCkBAIC04Nyw2ICs4OCw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJSU5JVF9MSVNUX0hFQUQoJndhaXQtPmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZ3YWl0LT5sb2NrKTsKIAogCXJldHVybiB3YWl0OwogfTsKQEAgLTEyNSw2ICsxMjcsNyBAQAogCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKIAlzdHJ1Y3QgaTJvX2V4ZWNfd2FpdCAqd2FpdDsKIAlzdGF0aWMgdTMyIHRjbnR4dCA9IDB4ODAwMDAwMDA7CisJbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCiAJd2FpdCA9IGkyb19leGVjX3dhaXRfYWxsb2MoKTsKQEAgLTE0NiwzMyArMTQ5LDI4IEBACiAJd2FpdC0+dGNudHh0ID0gdGNudHh0Kys7CiAJbXNnLT51LnMudGNudHh0ID0gY3B1X3RvX2xlMzIod2FpdC0+dGNudHh0KTsKIAorCXdhaXQtPndxID0gJndxOworCS8qCisJICogd2UgYWRkIGVsZW1lbnRzIHRvIHRoZSBoZWFkLCBiZWNhdXNlIGlmIGEgZW50cnkgaW4gdGhlIGxpc3Qgd2lsbAorCSAqIG5ldmVyIGJlIHJlbW92ZWQsIHdlIGhhdmUgdG8gaXRlcmF0ZSBvdmVyIGl0IGV2ZXJ5IHRpbWUKKwkgKi8KKwlsaXN0X2FkZCgmd2FpdC0+bGlzdCwgJmkyb19leGVjX3dhaXRfbGlzdCk7CisKIAkvKgogCSAqIFBvc3QgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbnRyb2xsZXIuIEF0IHNvbWUgcG9pbnQgbGF0ZXIgaXQgd2lsbAogCSAqIHJldHVybi4gSWYgd2UgdGltZSBvdXQgYmVmb3JlIGl0IHJldHVybnMgdGhlbiBjb21wbGV0ZSB3aWxsIGJlIHplcm8uCiAJICovCiAJaTJvX21zZ19wb3N0KGMsIG1zZyk7CiAKLQlpZiAoIXdhaXQtPmNvbXBsZXRlKSB7Ci0JCXdhaXQtPndxID0gJndxOwotCQkvKgotCQkgKiB3ZSBhZGQgZWxlbWVudHMgYWRkIHRoZSBoZWFkLCBiZWNhdXNlIGlmIGEgZW50cnkgaW4gdGhlIGxpc3QKLQkJICogd2lsbCBuZXZlciBiZSByZW1vdmVkLCB3ZSBoYXZlIHRvIGl0ZXJhdGUgb3ZlciBpdCBldmVyeSB0aW1lCi0JCSAqLwotCQlsaXN0X2FkZCgmd2FpdC0+bGlzdCwgJmkyb19leGVjX3dhaXRfbGlzdCk7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIHdhaXQtPmNvbXBsZXRlLCB0aW1lb3V0ICogSFopOwogCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCB3YWl0LT5jb21wbGV0ZSwKLQkJCQkJCSB0aW1lb3V0ICogSFopOworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CiAKLQkJd2FpdC0+d3EgPSBOVUxMOwotCX0KKwl3YWl0LT53cSA9IE5VTEw7CiAKLQliYXJyaWVyKCk7Ci0KLQlpZiAod2FpdC0+Y29tcGxldGUpIHsKKwlpZiAod2FpdC0+Y29tcGxldGUpCiAJCXJjID0gbGUzMl90b19jcHUod2FpdC0+bXNnLT5ib2R5WzBdKSA+PiAyNDsKLQkJaTJvX2ZsdXNoX3JlcGx5KGMsIHdhaXQtPm0pOwotCQlpMm9fZXhlY193YWl0X2ZyZWUod2FpdCk7Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJLyoKIAkJICogV2UgY2Fubm90IHJlbW92ZSBpdCBub3cuIFRoaXMgaXMgaW1wb3J0YW50LiBXaGVuIGl0IGRvZXMKIAkJICogdGVybWluYXRlICh3aGljaCBpdCBtdXN0IGRvIGlmIHRoZSBjb250cm9sbGVyIGhhcyBub3QKQEAgLTE4Niw2ICsxODQsMTMgQEAKIAkJcmMgPSAtRVRJTUVET1VUOwogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhaXQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyYyAhPSAtRVRJTUVET1VUKSB7CisJCWkyb19mbHVzaF9yZXBseShjLCB3YWl0LT5tKTsKKwkJaTJvX2V4ZWNfd2FpdF9mcmVlKHdhaXQpOworCX0KKwogCXJldHVybiByYzsKIH07CiAKQEAgLTIxMyw3ICsyMTgsNiBAQAogewogCXN0cnVjdCBpMm9fZXhlY193YWl0ICp3YWl0LCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RhdGljIHNwaW5sb2NrX3QgbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKIAlpbnQgcmMgPSAxOwogCiAJLyoKQEAgLTIyMywyMyArMjI3LDI0IEBACiAJICogYWxyZWFkeSBleHBpcmVkLiBOb3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdCBleGNlcHQgbG9nIGl0IGZvcgogCSAqIGRlYnVnIHB1cnBvc2VzLCBpbmNyZWFzZSB0aW1lb3V0LCBhbmQgcmVjb21waWxlLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhaXQsIHRtcCwgJmkyb19leGVjX3dhaXRfbGlzdCwgbGlzdCkgewogCQlpZiAod2FpdC0+dGNudHh0ID09IGNvbnRleHQpIHsKLQkJCWxpc3RfZGVsKCZ3YWl0LT5saXN0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CiAKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZGVsKCZ3YWl0LT5saXN0KTsKIAogCQkJd2FpdC0+bSA9IG07CiAJCQl3YWl0LT5tc2cgPSBtc2c7CiAJCQl3YWl0LT5jb21wbGV0ZSA9IDE7CiAKLQkJCWJhcnJpZXIoKTsKLQotCQkJaWYgKHdhaXQtPndxKSB7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHdhaXQtPndxKTsKKwkJCWlmICh3YWl0LT53cSkKIAkJCQlyYyA9IDA7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQorCQkJCXJjID0gLTE7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhaXQtPmxvY2ssIGZsYWdzKTsKKworCQkJaWYgKHJjKSB7CiAJCQkJc3RydWN0IGRldmljZSAqZGV2OwogCiAJCQkJZGV2ID0gJmMtPnBkZXYtPmRldjsKQEAgLTI0OCwxNSArMjUzLDEzIEBACiAJCQkJCSBjLT5uYW1lKTsKIAkJCQlpMm9fZG1hX2ZyZWUoZGV2LCAmd2FpdC0+ZG1hKTsKIAkJCQlpMm9fZXhlY193YWl0X2ZyZWUod2FpdCk7Ci0JCQkJcmMgPSAtMTsKLQkJCX0KKwkJCX0gZWxzZQorCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSh3YWl0LT53cSk7CiAKIAkJCXJldHVybiByYzsKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKLQogCW9zbV93YXJuKCIlczogQm9ndXMgcmVwbHkgaW4gUE9TVCBXQUlUICh0ci1jb250ZXh0OiAlMDh4KSFcbiIsIGMtPm5hbWUsCiAJCSBjb250ZXh0KTsKIApAQCAtMzIyLDE0ICszMjUsOSBAQAogc3RhdGljIGludCBpMm9fZXhlY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyb19kZXZpY2UgKmkyb19kZXYgPSB0b19pMm9fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGkyb19jb250cm9sbGVyICpjID0gaTJvX2Rldi0+aW9wOwogCiAJaTJvX2V2ZW50X3JlZ2lzdGVyKGkyb19kZXYsICZpMm9fZXhlY19kcml2ZXIsIDAsIDB4ZmZmZmZmZmYpOwogCi0JYy0+ZXhlYyA9IGkyb19kZXY7Ci0KLQlpMm9fZXhlY19sY3Rfbm90aWZ5KGMsIGMtPmxjdC0+Y2hhbmdlX2luZCArIDEpOwotCiAJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcl9pZCk7CiAJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3RfaWQpOwogCkBAIC01MjMsNiArNTIxLDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CiAKKwlkb3duKCZjLT5sY3RfbG9jayk7CisKIAlkZXYgPSAmYy0+cGRldi0+ZGV2OwogCiAJaWYgKGkyb19kbWFfcmVhbGxvYwpAQCAtNTQ1LDYgKzU0NSw4IEBACiAKIAlpMm9fbXNnX3Bvc3QoYywgbXNnKTsKIAorCXVwKCZjLT5sY3RfbG9jayk7CisKIAlyZXR1cm4gMDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCmluZGV4IDQ5MjE2NzQuLmZlYmJkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwpAQCAtODA0LDggKzgwNCw2IEBACiAKIAkvKiBBc2sgdGhlIElPUCB0byBzd2l0Y2ggdG8gUkVTRVQgc3RhdGUgKi8KIAlpMm9faW9wX3Jlc2V0KGMpOwotCi0JcHV0X2RldmljZSgmYy0+ZGV2aWNlKTsKIH0KIAogLyoqCkBAIC0xMDU5LDcgKzEwNTcsNyBAQAogCiAJc25wcmludGYocG9vbG5hbWUsIHNpemVvZihwb29sbmFtZSksICJpMm9fJXNfbXNnX2lucG9vbCIsIGMtPm5hbWUpOwogCWlmIChpMm9fcG9vbF9hbGxvYwotCSAgICAoJmMtPmluX21zZywgcG9vbG5hbWUsIEkyT19JTkJPVU5EX01TR19GUkFNRV9TSVpFICogNCwKKwkgICAgKCZjLT5pbl9tc2csIHBvb2xuYW1lLCBJMk9fSU5CT1VORF9NU0dfRlJBTUVfU0laRSAqIDQgKyBzaXplb2YodTMyKSwKIAkgICAgIEkyT19NU0dfSU5QT09MX01JTikpIHsKIAkJa2ZyZWUoYyk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL0tjb25maWcKaW5kZXggN2NjMTYyZS4uNDViY2YwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9LY29uZmlnCkBAIC04NCwxMSArODQsMjkgQEAKIAogY29uZmlnIE1NQ19BVTFYCiAJdHJpc3RhdGUgIkFsY2hlbXkgQVUxWFgwIE1NQyBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0FVMVgwMCAmJiBNTUMKKwlkZXBlbmRzIG9uIE1NQyAmJiBTT0NfQVUxMjAwCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBBTUQgQWxjaGVteShSKSBNdWx0aW1lZGlhIGNhcmQgaW50ZXJmYWNlLgogCSAgSWYgeW91IGhhdmUgYSBBbGNoZW15IHBsYXRmb3JtIHdpdGggYSBNTUMgc2xvdCwgc2F5IFkgb3IgTSBoZXJlLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX0FUOTFSTTkyMDAKKwl0cmlzdGF0ZSAiQVQ5MVJNOTIwMCBTRC9NTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMCAmJiBNTUMKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIEFUOTFSTTkyMDAgTUNJIGNvbnRyb2xsZXIuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBNTUNfSU1YCisJdHJpc3RhdGUgIk1vdG9yb2xhIGkuTVggTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9JTVggJiYgTU1DCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHRoZSBNb3Rvcm9sYSBpLk1YIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCisJICBJZiB5b3UgaGF2ZSBhIGkuTVggcGxhdGZvcm0gd2l0aCBhIE11bHRpbWVkaWEgQ2FyZCBzbG90LAorCSAgc2F5IFkgb3IgTSBoZXJlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL01ha2VmaWxlCmluZGV4IGM3YzM0YWEuLmQyOTU3ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL01ha2VmaWxlCkBAIC0xNywxMCArMTcsMTIgQEAKICMKIG9iai0kKENPTkZJR19NTUNfQVJNTU1DSSkJKz0gbW1jaS5vCiBvYmotJChDT05GSUdfTU1DX1BYQSkJCSs9IHB4YW1jaS5vCitvYmotJChDT05GSUdfTU1DX0lNWCkJCSs9IGlteG1tYy5vCiBvYmotJChDT05GSUdfTU1DX1NESENJKQkJKz0gc2RoY2kubwogb2JqLSQoQ09ORklHX01NQ19XQlNEKQkJKz0gd2JzZC5vCiBvYmotJChDT05GSUdfTU1DX0FVMVgpCQkrPSBhdTF4bW1jLm8KIG9iai0kKENPTkZJR19NTUNfT01BUCkJCSs9IG9tYXAubworb2JqLSQoQ09ORklHX01NQ19BVDkxUk05MjAwKQkrPSBhdDkxX21jaS5vCiAKIG1tY19jb3JlLXkgOj0gbW1jLm8gbW1jX3F1ZXVlLm8gbW1jX3N5c2ZzLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYyBiL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmMGVlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKQEAgLTAsMCArMSw5ODUgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYyAtIEFUTUVMIEFUOTFSTTkyMDAgTUNJIERyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQ291Z2FyIENyZWVrIENvbXB1dGluZyBEZXZpY2VzIEx0ZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFsY29sbSBOb3llcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAgIFRoaXMgaXMgdGhlIEFUOTFSTTkyMDAgTUNJIGRyaXZlciB0aGF0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIGJvdGggTU1DIGNhcmRzCisgICBhbmQgU0QtY2FyZHMuICBCb2FyZHMgdGhhdCBzdXBwb3J0IHdyaXRlIHByb3RlY3QgYXJlIG5vdyBzdXBwb3J0ZWQuCisgICBUaGUgQ0NBVDkxU0JDMDAxIGJvYXJkIGRvZXMgbm90IHN1cHBvcnQgU0QgY2FyZHMuCisKKyAgIFRoZSB0aHJlZSBlbnRyeSBwb2ludHMgYXJlIGF0OTFfbWNpX3JlcXVlc3QsIGF0OTFfbWNpX3NldF9pb3MKKyAgIGFuZCBhdDkxX21jaV9nZXRfcm8uCisKKyAgIFNFVCBJT1MKKyAgICAgVGhpcyBjb25maWd1cmVzIHRoZSBkZXZpY2UgdG8gcHV0IGl0IGludG8gdGhlIGNvcnJlY3QgbW9kZSBhbmQgY2xvY2sgc3BlZWQKKyAgICAgcmVxdWlyZWQuCisKKyAgIE1DSSBSRVFVRVNUCisgICAgIE1DSSByZXF1ZXN0IHByb2Nlc3NlcyB0aGUgY29tbWFuZHMgc2VudCBpbiB0aGUgbW1jX3JlcXVlc3Qgc3RydWN0dXJlLiBUaGlzCisgICAgIGNhbiBjb25zaXN0IG9mIGEgcHJvY2Vzc2luZyBjb21tYW5kIGFuZCBhIHN0b3AgY29tbWFuZCBpbiB0aGUgY2FzZSBvZgorICAgICBtdWx0aXBsZSBibG9jayB0cmFuc2ZlcnMuCisKKyAgICAgVGhlcmUgYXJlIHRocmVlIG1haW4gdHlwZXMgb2YgcmVxdWVzdCwgY29tbWFuZHMsIHJlYWRzIGFuZCB3cml0ZXMuCisKKyAgICAgQ29tbWFuZHMgYXJlIHN0cmFpZ2h0IGZvcndhcmQuIFRoZSBjb21tYW5kIGlzIHN1Ym1pdHRlZCB0byB0aGUgY29udHJvbGxlciBhbmQKKyAgICAgdGhlIHJlcXVlc3QgZnVuY3Rpb24gcmV0dXJucy4gV2hlbiB0aGUgY29udHJvbGxlciBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IHRvIGluZGljYXRlCisgICAgIHRoZSBjb21tYW5kIGlzIGZpbmlzaGVkLCB0aGUgcmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQgYXJlIHJlYWQgYW5kIHRoZSBtbWNfcmVxdWVzdF9kb25lCisgICAgIGZ1bmN0aW9uIGNhbGxlZCB0byBlbmQgdGhlIHJlcXVlc3QuCisKKyAgICAgUmVhZHMgYW5kIHdyaXRlcyB3b3JrIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gbm9ybWFsIGNvbW1hbmRzIGJ1dCBpbnZvbHZlIHRoZSBQREMgKERNQSkKKyAgICAgY29udHJvbGxlciB0byBtYW5hZ2UgdGhlIHRyYW5zZmVycy4KKworICAgICBBIHJlYWQgaXMgZG9uZSBmcm9tIHRoZSBjb250cm9sbGVyIGRpcmVjdGx5IHRvIHRoZSBzY2F0dGVybGlzdCBwYXNzZWQgaW4gZnJvbSB0aGUgcmVxdWVzdC4KKyAgICAgRHVlIHRvIGEgYnVnIGluIHRoZSBjb250cm9sbGVyLCB3aGVuIGEgcmVhZCBpcyBjb21wbGV0ZWQsIGFsbCB0aGUgd29yZHMgYXJlIGJ5dGUKKyAgICAgc3dhcHBlZCBpbiB0aGUgc2NhdHRlcmxpc3QgYnVmZmVycy4KKworICAgICBUaGUgc2VxdWVuY2Ugb2YgcmVhZCBpbnRlcnJ1cHRzIGlzOiBFTkRSWCwgUlhCVUZGLCBDTURSRFkKKworICAgICBBIHdyaXRlIGlzIHNsaWdodGx5IGRpZmZlcmVudCBpbiB0aGF0IHRoZSBieXRlcyB0byB3cml0ZSBhcmUgcmVhZCBmcm9tIHRoZSBzY2F0dGVybGlzdAorICAgICBpbnRvIGEgZG1hIG1lbW9yeSBidWZmZXIgKHRoaXMgaXMgaW4gY2FzZSB0aGUgc291cmNlIGJ1ZmZlciBzaG91bGQgYmUgcmVhZCBvbmx5KS4gVGhlCisgICAgIGVudGlyZSB3cml0ZSBidWZmZXIgaXMgdGhlbiBkb25lIGZyb20gdGhpcyBzaW5nbGUgZG1hIG1lbW9yeSBidWZmZXIuCisKKyAgICAgVGhlIHNlcXVlbmNlIG9mIHdyaXRlIGludGVycnVwdHMgaXM6IEVORFRYLCBUWEJVRkUsIE5PVEJVU1ksIENNRFJEWQorCisgICBHRVQgUk8KKyAgICAgR2V0cyB0aGUgc3RhdHVzIG9mIHRoZSB3cml0ZSBwcm90ZWN0IHBpbiwgaWYgYXZhaWxhYmxlLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXJtOTIwMF9tY2kuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwX3BkYy5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJhdDkxX21jaSIKKworI3VuZGVmCVNVUFBPUlRfNFdJUkUKKworI2lmZGVmIENPTkZJR19NTUNfREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikJXAorCXByaW50ayhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjbGsgKm1jaV9jbGs7CisKKyNkZWZpbmUgRkxfU0VOVF9DT01NQU5EICgxIDw8IDApCisjZGVmaW5lIEZMX1NFTlRfU1RPUCAoMSA8PCAxKQorCisKKworLyoKKyAqIFJlYWQgZnJvbSBhIE1DSSByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfbWNpX3JlYWQodW5zaWduZWQgaW50IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKm1jaV9iYXNlID0gKHZvaWQgX19pb21lbSAqKUFUOTFfVkFfQkFTRV9NQ0k7CisKKwlyZXR1cm4gX19yYXdfcmVhZGwobWNpX2Jhc2UgKyByZWcpOworfQorCisvKgorICogV3JpdGUgdG8gYSBNQ0kgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX21jaV93cml0ZSh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworICAgICAgICB2b2lkIF9faW9tZW0gKm1jaV9iYXNlID0gKHZvaWQgX19pb21lbSAqKUFUOTFfVkFfQkFTRV9NQ0k7CisKKyAgICAgICAgX19yYXdfd3JpdGVsKHZhbHVlLCBtY2lfYmFzZSArIHJlZyk7Cit9CisKKy8qCisgKiBMb3cgbGV2ZWwgdHlwZSBmb3IgdGhpcyBkcml2ZXIKKyAqLworc3RydWN0IGF0OTFtY2lfaG9zdAoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxdWVzdDsKKworCXN0cnVjdCBhdDkxX21tY19kYXRhICpib2FyZDsKKwlpbnQgcHJlc2VudDsKKworCS8qCisJICogRmxhZyBpbmRpY2F0aW5nIHdoZW4gdGhlIGNvbW1hbmQgaGFzIGJlZW4gc2VudC4gVGhpcyBpcyB1c2VkIHRvCisJICogd29yayBvdXQgd2hldGhlciBvciBub3QgdG8gc2VuZCB0aGUgc3RvcAorCSAqLworCXVuc2lnbmVkIGludCBmbGFnczsKKwkvKiBmbGFnIGZvciBjdXJyZW50IGJ1cyBzZXR0aW5ncyAqLworCXUzMiBidXNfbW9kZTsKKworCS8qIERNQSBidWZmZXIgdXNlZCBmb3IgdHJhbnNtaXR0aW5nICovCisJdW5zaWduZWQgaW50KiBidWZmZXI7CisJZG1hX2FkZHJfdCBwaHlzaWNhbF9hZGRyZXNzOworCXVuc2lnbmVkIGludCB0b3RhbF9sZW5ndGg7CisKKwkvKiBMYXRlc3QgaW4gdGhlIHNjYXR0ZXJsaXN0IHRoYXQgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdHJhbnNmZXIsIGJ1dCBub3QgZnJlZWQgKi8KKwlpbnQgaW5fdXNlX2luZGV4OworCisJLyogTGF0ZXN0IGluIHRoZSBzY2F0dGVybGlzdCB0aGF0IGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRyYW5zZmVyICovCisJaW50IHRyYW5zZmVyX2luZGV4OworfTsKKworLyoKKyAqIENvcHkgZnJvbSBzZyB0byBhIGRtYSBibG9jayAtIHVzZWQgZm9yIHRyYW5zZmVycworICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MW1jaV9zZ190b19kbWEoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGludCBsZW4sIGksIHNpemU7CisJdW5zaWduZWQgKmRtYWJ1ZiA9IGhvc3QtPmJ1ZmZlcjsKKworCXNpemUgPSBob3N0LT50b3RhbF9sZW5ndGg7CisJbGVuID0gZGF0YS0+c2dfbGVuOworCisJLyoKKwkgKiBKdXN0IGxvb3AgdGhyb3VnaCBhbGwgZW50cmllcy4gU2l6ZSBtaWdodCBub3QKKwkgKiBiZSB0aGUgZW50aXJlIGxpc3QgdGhvdWdoIHNvIG1ha2Ugc3VyZSB0aGF0CisJICogd2UgZG8gbm90IHRyYW5zZmVyIHRvbyBtdWNoLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCQlpbnQgYW1vdW50OworCQlpbnQgaW5kZXg7CisJCXVuc2lnbmVkIGludCAqc2didWZmZXI7CisKKwkJc2cgPSAmZGF0YS0+c2dbaV07CisKKwkJc2didWZmZXIgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fQklPX1NSQ19JUlEpICsgc2ctPm9mZnNldDsKKwkJYW1vdW50ID0gbWluKHNpemUsIHNnLT5sZW5ndGgpOworCQlzaXplIC09IGFtb3VudDsKKwkJYW1vdW50IC89IDQ7CisKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYW1vdW50OyBpbmRleCsrKQorCQkJKmRtYWJ1ZisrID0gc3dhYjMyKHNnYnVmZmVyW2luZGV4XSk7CisKKwkJa3VubWFwX2F0b21pYyhzZ2J1ZmZlciwgS01fQklPX1NSQ19JUlEpOworCisJCWlmIChzaXplID09IDApCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBhIHJlcXVlc3QgdG8gdHJhbnNmZXIKKwkgKiBtb3JlIGRhdGEgdGhhbiBjYW4gZml0IGludG8gdGhlIFNHIGxpc3QuCisJICovCisJQlVHX09OKHNpemUgIT0gMCk7Cit9CisKKy8qCisgKiBQcmVwYXJlIGEgZG1hIHJlYWQKKyAqLworc3RhdGljIHZvaWQgYXQ5MW1jaV9wcmVfZG1hX3JlYWQoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKworCURCRygicHJlIGRtYSByZWFkXG4iKTsKKworCWNtZCA9IGhvc3QtPmNtZDsKKwlpZiAoIWNtZCkgeworCQlEQkcoIm5vIGNvbW1hbmRcbiIpOworCQlyZXR1cm47CisJfQorCisJZGF0YSA9IGNtZC0+ZGF0YTsKKwlpZiAoIWRhdGEpIHsKKwkJREJHKCJubyBkYXRhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJLyogbm90aGluZyBsZWZ0IHRvIHRyYW5zZmVyICovCisJCWlmIChob3N0LT50cmFuc2Zlcl9pbmRleCA+PSBkYXRhLT5zZ19sZW4pIHsKKwkJCURCRygiTm90aGluZyBsZWZ0IHRvIHRyYW5zZmVyIChpbmRleCA9ICVkKVxuIiwgaG9zdC0+dHJhbnNmZXJfaW5kZXgpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGVjayB0byBzZWUgaWYgdGhpcyBuZWVkcyBmaWxsaW5nICovCisJCWlmIChpID09IDApIHsKKwkJCWlmIChhdDkxX21jaV9yZWFkKEFUOTFfUERDX1JDUikgIT0gMCkgeworCQkJCURCRygiVHJhbnNmZXIgYWN0aXZlIGluIGN1cnJlbnRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJaWYgKGF0OTFfbWNpX3JlYWQoQVQ5MV9QRENfUk5DUikgIT0gMCkgeworCQkJCURCRygiVHJhbnNmZXIgYWN0aXZlIGluIG5leHRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJLyogU2V0dXAgdGhlIG5leHQgdHJhbnNmZXIgKi8KKwkJREJHKCJVc2luZyB0cmFuc2ZlciBpbmRleCAlZFxuIiwgaG9zdC0+dHJhbnNmZXJfaW5kZXgpOworCisJCXNnID0gJmRhdGEtPnNnW2hvc3QtPnRyYW5zZmVyX2luZGV4KytdOworCQlEQkcoInNnID0gJXBcbiIsIHNnKTsKKworCQlzZy0+ZG1hX2FkZHJlc3MgPSBkbWFfbWFwX3BhZ2UoTlVMTCwgc2ctPnBhZ2UsIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJREJHKCJkbWEgYWRkcmVzcyA9ICUwOFgsIGxlbmd0aCA9ICVkXG4iLCBzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgpOworCisJCWlmIChpID09IDApIHsKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JQUiwgc2ctPmRtYV9hZGRyZXNzKTsKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JDUiwgc2ctPmxlbmd0aCAvIDQpOworCQl9CisJCWVsc2UgeworCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUk5QUiwgc2ctPmRtYV9hZGRyZXNzKTsKKwkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JOQ1IsIHNnLT5sZW5ndGggLyA0KTsKKwkJfQorCX0KKworCURCRygicHJlIGRtYSByZWFkIGRvbmVcbiIpOworfQorCisvKgorICogSGFuZGxlIGFmdGVyIGEgZG1hIHJlYWQKKyAqLworc3RhdGljIHZvaWQgYXQ5MW1jaV9wb3N0X2RtYV9yZWFkKHN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CisJc3RydWN0IG1tY19kYXRhICpkYXRhOworCisJREJHKCJwb3N0IGRtYSByZWFkXG4iKTsKKworCWNtZCA9IGhvc3QtPmNtZDsKKwlpZiAoIWNtZCkgeworCQlEQkcoIm5vIGNvbW1hbmRcbiIpOworCQlyZXR1cm47CisJfQorCisJZGF0YSA9IGNtZC0+ZGF0YTsKKwlpZiAoIWRhdGEpIHsKKwkJREJHKCJubyBkYXRhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChob3N0LT5pbl91c2VfaW5kZXggPCBob3N0LT50cmFuc2Zlcl9pbmRleCkgeworCQl1bnNpZ25lZCBpbnQgKmJ1ZmZlcjsKKwkJaW50IGluZGV4OworCQlpbnQgbGVuOworCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwkJREJHKCJmaW5pc2hpbmcgaW5kZXggJWRcbiIsIGhvc3QtPmluX3VzZV9pbmRleCk7CisKKwkJc2cgPSAmZGF0YS0+c2dbaG9zdC0+aW5fdXNlX2luZGV4KytdOworCisJCURCRygiVW5tYXBwaW5nIHBhZ2UgJTA4WFxuIiwgc2ctPmRtYV9hZGRyZXNzKTsKKworCQlkbWFfdW5tYXBfcGFnZShOVUxMLCBzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogU3dhcCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciAqLworCQlidWZmZXIgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fQklPX1NSQ19JUlEpICsgc2ctPm9mZnNldDsKKwkJREJHKCJidWZmZXIgPSAlcCwgbGVuZ3RoID0gJWRcbiIsIGJ1ZmZlciwgc2ctPmxlbmd0aCk7CisKKwkJZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IHNnLT5sZW5ndGg7CisKKwkJbGVuID0gc2ctPmxlbmd0aCAvIDQ7CisKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7CisJCQlidWZmZXJbaW5kZXhdID0gc3dhYjMyKGJ1ZmZlcltpbmRleF0pOworCQl9CisJCWt1bm1hcF9hdG9taWMoYnVmZmVyLCBLTV9CSU9fU1JDX0lSUSk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHNnLT5wYWdlKTsKKwl9CisKKwkvKiBJcyB0aGVyZSBhbm90aGVyIHRyYW5zZmVyIHRvIHRyaWdnZXI/ICovCisJaWYgKGhvc3QtPnRyYW5zZmVyX2luZGV4IDwgZGF0YS0+c2dfbGVuKQorCQlhdDkxbWNpX3ByZV9kbWFfcmVhZChob3N0KTsKKwllbHNlIHsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9SWEJVRkYpOworCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOworCX0KKworCURCRygicG9zdCBkbWEgcmVhZCBkb25lXG4iKTsKK30KKworLyoKKyAqIEhhbmRsZSB0cmFuc21pdHRlZCBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIGF0OTFfbWNpX2hhbmRsZV90cmFuc21pdHRlZChzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKworCURCRygiSGFuZGxpbmcgdGhlIHRyYW5zbWl0XG4iKTsKKworCS8qIERpc2FibGUgdGhlIHRyYW5zZmVyICovCisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfUlhURElTIHwgQVQ5MV9QRENfVFhURElTKTsKKworCS8qIE5vdyB3YWl0IGZvciBjbWQgcmVhZHkgKi8KKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIEFUOTFfTUNJX1RYQlVGRSk7CisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9OT1RCVVNZKTsKKworCWNtZCA9IGhvc3QtPmNtZDsKKwlpZiAoIWNtZCkgcmV0dXJuOworCisJZGF0YSA9IGNtZC0+ZGF0YTsKKwlpZiAoIWRhdGEpIHJldHVybjsKKworCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGhvc3QtPnRvdGFsX2xlbmd0aDsKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgY29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCBhdDkxX21jaV9lbmFibGUodm9pZCkKK3sKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRU4pOworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lEUiwgMHhGRkZGRkZGRik7CisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfRFRPUiwgQVQ5MV9NQ0lfRFRPTVVMXzFNIHwgQVQ5MV9NQ0lfRFRPQ1lDKTsKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9NUiwgMHg4MzRBKTsKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9TRENSLCAweDApOworfQorCisvKgorICogRGlzYWJsZSB0aGUgY29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCBhdDkxX21jaV9kaXNhYmxlKHZvaWQpCit7CisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQ1IsIEFUOTFfTUNJX01DSURJUyB8IEFUOTFfTUNJX1NXUlNUKTsKK30KKworLyoKKyAqIFNlbmQgYSBjb21tYW5kCisgKiByZXR1cm4gdGhlIGludGVycnVwdHMgdG8gZW5hYmxlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MV9tY2lfc2VuZF9jb21tYW5kKHN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQoreworCXVuc2lnbmVkIGludCBjbWRyLCBtcjsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfbGVuZ3RoOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGNtZC0+ZGF0YTsKKworCXVuc2lnbmVkIGludCBibG9ja3M7CisJdW5zaWduZWQgaW50IGllciA9IDA7CisKKwlob3N0LT5jbWQgPSBjbWQ7CisKKwkvKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIG5lZWRlZCAqLworI2lmIDAKKwlpZiAoKGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfU1IpICYgQVQ5MV9NQ0lfUlRPRSkgJiYgKGNtZC0+b3Bjb2RlID09IDEpKSB7CisJCURCRygiQ2xlYXJpbmcgdGltZW91dFxuIik7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0FSR1IsIDApOworCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DTURSLCBBVDkxX01DSV9PUERDTUQpOworCQl3aGlsZSAoIShhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1NSKSAmIEFUOTFfTUNJX0NNRFJEWSkpIHsKKwkJCS8qIHNwaW4gKi8KKwkJCURCRygiQ2xlYXJpbmc6IFNSID0gJTA4WFxuIiwgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TUikpOworCQl9CisJfQorI2VuZGlmCisJY21kciA9IGNtZC0+b3Bjb2RlOworCisJaWYgKG1tY19yZXNwX3R5cGUoY21kKSA9PSBNTUNfUlNQX05PTkUpCisJCWNtZHIgfD0gQVQ5MV9NQ0lfUlNQVFlQX05PTkU7CisJZWxzZSB7CisJCS8qIGlmIGEgcmVzcG9uc2UgaXMgZXhwZWN0ZWQgdGhlbiBhbGxvdyBtYXhpbXVtIHJlc3BvbnNlIGxhdGFuY3kgKi8KKwkJY21kciB8PSBBVDkxX01DSV9NQVhMQVQ7CisJCS8qIHNldCAxMzYgYml0IHJlc3BvbnNlIGZvciBSMiwgNDggYml0IHJlc3BvbnNlIG90aGVyd2lzZSAqLworCQlpZiAobW1jX3Jlc3BfdHlwZShjbWQpID09IE1NQ19SU1BfUjIpCisJCQljbWRyIHw9IEFUOTFfTUNJX1JTUFRZUF8xMzY7CisJCWVsc2UKKwkJCWNtZHIgfD0gQVQ5MV9NQ0lfUlNQVFlQXzQ4OworCX0KKworCWlmIChkYXRhKSB7CisJCWJsb2NrX2xlbmd0aCA9IDEgPDwgZGF0YS0+Ymxrc3pfYml0czsKKwkJYmxvY2tzID0gZGF0YS0+YmxvY2tzOworCisJCS8qIGFsd2F5cyBzZXQgZGF0YSBzdGFydCAtIGFsc28gc2V0IGRpcmVjdGlvbiBmbGFnIGZvciByZWFkICovCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCQljbWRyIHw9IChBVDkxX01DSV9UUkRJUiB8IEFUOTFfTUNJX1RSQ01EX1NUQVJUKTsKKwkJZWxzZSBpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJCWNtZHIgfD0gQVQ5MV9NQ0lfVFJDTURfU1RBUlQ7CisKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfU1RSRUFNKQorCQkJY21kciB8PSBBVDkxX01DSV9UUlRZUF9TVFJFQU07CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX01VTFRJKQorCQkJY21kciB8PSBBVDkxX01DSV9UUlRZUF9NVUxUSVBMRTsKKwl9CisJZWxzZSB7CisJCWJsb2NrX2xlbmd0aCA9IDA7CisJCWJsb2NrcyA9IDA7CisJfQorCisJaWYgKGNtZC0+b3Bjb2RlID09IE1NQ19TVE9QX1RSQU5TTUlTU0lPTikKKwkJY21kciB8PSBBVDkxX01DSV9UUkNNRF9TVE9QOworCisJaWYgKGhvc3QtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTikKKwkJY21kciB8PSBBVDkxX01DSV9PUERDTUQ7CisKKwkvKgorCSAqIFNldCB0aGUgYXJndW1lbnRzIGFuZCBzZW5kIHRoZSBjb21tYW5kCisJICovCisJREJHKCJTZW5kaW5nIGNvbW1hbmQgJWQgYXMgJTA4WCwgYXJnID0gJTA4WCwgYmxvY2tzID0gJWQsIGxlbmd0aCA9ICVkIChNUiA9ICUwOGxYKVxuIiwKKwkJY21kLT5vcGNvZGUsIGNtZHIsIGNtZC0+YXJnLCBibG9ja3MsIGJsb2NrX2xlbmd0aCwgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9NUikpOworCisJaWYgKCFkYXRhKSB7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1RYVERJUyB8IEFUOTFfUERDX1JYVERJUyk7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JQUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JDUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JOUFIsIDApOworCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19STkNSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVFBSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVENSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVE5QUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1ROQ1IsIDApOworCisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0FSR1IsIGNtZC0+YXJnKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQ01EUiwgY21kcik7CisJCXJldHVybiBBVDkxX01DSV9DTURSRFk7CisJfQorCisJbXIgPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX01SKSAmIDB4N2ZmZjsJLyogemVybyBibG9jayBsZW5ndGggYW5kIFBEQyBtb2RlICovCisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfTVIsIG1yIHwgKGJsb2NrX2xlbmd0aCA8PCAxNikgfCBBVDkxX01DSV9QRENNT0RFKTsKKworCS8qCisJICogRGlzYWJsZSB0aGUgUERDIGNvbnRyb2xsZXIKKwkgKi8KKwlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOworCisJaWYgKGNtZHIgJiBBVDkxX01DSV9UUkNNRF9TVEFSVCkgeworCQlkYXRhLT5ieXRlc194ZmVyZWQgPSAwOworCQlob3N0LT50cmFuc2Zlcl9pbmRleCA9IDA7CisJCWhvc3QtPmluX3VzZV9pbmRleCA9IDA7CisJCWlmIChjbWRyICYgQVQ5MV9NQ0lfVFJESVIpIHsKKwkJCS8qCisJCQkgKiBIYW5kbGUgYSByZWFkCisJCQkgKi8KKwkJCWhvc3QtPmJ1ZmZlciA9IE5VTEw7CisJCQlob3N0LT50b3RhbF9sZW5ndGggPSAwOworCisJCQlhdDkxbWNpX3ByZV9kbWFfcmVhZChob3N0KTsKKwkJCWllciA9IEFUOTFfTUNJX0VORFJYIC8qIHwgQVQ5MV9NQ0lfUlhCVUZGICovOworCQl9CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIEhhbmRsZSBhIHdyaXRlCisJCQkgKi8KKwkJCWhvc3QtPnRvdGFsX2xlbmd0aCA9IGJsb2NrX2xlbmd0aCAqIGJsb2NrczsKKwkJCWhvc3QtPmJ1ZmZlciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLAorCQkJCQkJICBob3N0LT50b3RhbF9sZW5ndGgsCisJCQkJCQkgICZob3N0LT5waHlzaWNhbF9hZGRyZXNzLCBHRlBfS0VSTkVMKTsKKworCQkJYXQ5MW1jaV9zZ190b19kbWEoaG9zdCwgZGF0YSk7CisKKwkJCURCRygiVHJhbnNtaXR0aW5nICVkIGJ5dGVzXG4iLCBob3N0LT50b3RhbF9sZW5ndGgpOworCisJCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19UUFIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOworCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVENSLCBob3N0LT50b3RhbF9sZW5ndGggLyA0KTsKKwkJCWllciA9IEFUOTFfTUNJX1RYQlVGRTsKKwkJfQorCX0KKworCS8qCisJICogU2VuZCB0aGUgY29tbWFuZCBhbmQgdGhlbiBlbmFibGUgdGhlIFBEQyAtIG5vdCB0aGUgb3RoZXIgd2F5IHJvdW5kIGFzCisJICogdGhlIGRhdGEgc2hlZXQgc2F5cworCSAqLworCisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQVJHUiwgY21kLT5hcmcpOworCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0NNRFIsIGNtZHIpOworCisJaWYgKGNtZHIgJiBBVDkxX01DSV9UUkNNRF9TVEFSVCkgeworCQlpZiAoY21kciAmIEFUOTFfTUNJX1RSRElSKQorCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfUlhURU4pOworCQllbHNlCisJCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19UWFRFTik7CisJfQorCXJldHVybiBpZXI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhIGNvbW1hbmQgdG8gY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQgYXQ5MW1jaV9wcm9jZXNzX2NvbW1hbmQoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGllcjsKKworCWllciA9IGF0OTFfbWNpX3NlbmRfY29tbWFuZChob3N0LCBjbWQpOworCisJREJHKCJzZXR0aW5nIGllciB0byAlMDhYXG4iLCBpZXIpOworCisJLyogU3RvcCBvbiBlcnJvcnMgb3IgdGhlIHJlcXVpcmVkIHZhbHVlICovCisJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSUVSLCAweGZmZmYwMDAwIHwgaWVyKTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIG5leHQgc3RlcCBpbiB0aGUgcmVxdWVzdAorICovCitzdGF0aWMgdm9pZCBhdDkxbWNpX3Byb2Nlc3NfbmV4dChzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0KQoreworCWlmICghKGhvc3QtPmZsYWdzICYgRkxfU0VOVF9DT01NQU5EKSkgeworCQlob3N0LT5mbGFncyB8PSBGTF9TRU5UX0NPTU1BTkQ7CisJCWF0OTFtY2lfcHJvY2Vzc19jb21tYW5kKGhvc3QsIGhvc3QtPnJlcXVlc3QtPmNtZCk7CisJfQorCWVsc2UgaWYgKCghKGhvc3QtPmZsYWdzICYgRkxfU0VOVF9TVE9QKSkgJiYgaG9zdC0+cmVxdWVzdC0+c3RvcCkgeworCQlob3N0LT5mbGFncyB8PSBGTF9TRU5UX1NUT1A7CisJCWF0OTFtY2lfcHJvY2Vzc19jb21tYW5kKGhvc3QsIGhvc3QtPnJlcXVlc3QtPnN0b3ApOworCX0KKwllbHNlCisJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBob3N0LT5yZXF1ZXN0KTsKK30KKworLyoKKyAqIEhhbmRsZSBhIGNvbW1hbmQgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqLworc3RhdGljIHZvaWQgYXQ5MW1jaV9jb21wbGV0ZWRfY29tbWFuZChzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIDB4ZmZmZmZmZmYpOworCisJY21kLT5yZXNwWzBdID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9SU1BSKDApKTsKKwljbWQtPnJlc3BbMV0gPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1JTUFIoMSkpOworCWNtZC0+cmVzcFsyXSA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfUlNQUigyKSk7CisJY21kLT5yZXNwWzNdID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9SU1BSKDMpKTsKKworCWlmIChob3N0LT5idWZmZXIpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgaG9zdC0+dG90YWxfbGVuZ3RoLCBob3N0LT5idWZmZXIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOworCQlob3N0LT5idWZmZXIgPSBOVUxMOworCX0KKworCXN0YXR1cyA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfU1IpOworCisJREJHKCJTdGF0dXMgPSAlMDhYIFslMDhYICUwOFggJTA4WCAlMDhYXVxuIiwKKwkJIHN0YXR1cywgY21kLT5yZXNwWzBdLCBjbWQtPnJlc3BbMV0sIGNtZC0+cmVzcFsyXSwgY21kLT5yZXNwWzNdKTsKKworCWlmIChzdGF0dXMgJiAoQVQ5MV9NQ0lfUklOREUgfCBBVDkxX01DSV9SRElSRSB8IEFUOTFfTUNJX1JDUkNFIHwKKwkJCUFUOTFfTUNJX1JFTkRFIHwgQVQ5MV9NQ0lfUlRPRSB8IEFUOTFfTUNJX0RDUkNFIHwKKwkJCUFUOTFfTUNJX0RUT0UgfCBBVDkxX01DSV9PVlJFIHwgQVQ5MV9NQ0lfVU5SRSkpIHsKKwkJaWYgKChzdGF0dXMgJiBBVDkxX01DSV9SQ1JDRSkgJiYKKwkJCSgoY21kLT5vcGNvZGUgPT0gTU1DX1NFTkRfT1BfQ09ORCkgfHwgKGNtZC0+b3Bjb2RlID09IFNEX0FQUF9PUF9DT05EKSkpIHsKKwkJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX05PTkU7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAoc3RhdHVzICYgKEFUOTFfTUNJX1JUT0UgfCBBVDkxX01DSV9EVE9FKSkKKwkJCQljbWQtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOworCQkJZWxzZSBpZiAoc3RhdHVzICYgKEFUOTFfTUNJX1JDUkNFIHwgQVQ5MV9NQ0lfRENSQ0UpKQorCQkJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKKwkJCWVsc2UgaWYgKHN0YXR1cyAmIChBVDkxX01DSV9PVlJFIHwgQVQ5MV9NQ0lfVU5SRSkpCisJCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfRklGTzsKKwkJCWVsc2UKKwkJCQljbWQtPmVycm9yID0gTU1DX0VSUl9GQUlMRUQ7CisKKwkJCURCRygiRXJyb3IgZGV0ZWN0ZWQgYW5kIHNldCB0byAlZCAoY21kID0gJWQsIHJldHJpZXMgPSAlZClcbiIsCisJCQkJIGNtZC0+ZXJyb3IsIGNtZC0+b3Bjb2RlLCBjbWQtPnJldHJpZXMpOworCQl9CisJfQorCWVsc2UKKwkJY21kLT5lcnJvciA9IE1NQ19FUlJfTk9ORTsKKworCWF0OTFtY2lfcHJvY2Vzc19uZXh0KGhvc3QpOworfQorCisvKgorICogSGFuZGxlIGFuIE1NQyByZXF1ZXN0CisgKi8KK3N0YXRpYyB2b2lkIGF0OTFfbWNpX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPnJlcXVlc3QgPSBtcnE7CisJaG9zdC0+ZmxhZ3MgPSAwOworCisJYXQ5MW1jaV9wcm9jZXNzX25leHQoaG9zdCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIElPUworICovCitzdGF0aWMgdm9pZCBhdDkxX21jaV9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCWludCBjbGtkaXY7CisJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBhdDkxX21hc3Rlcl9jbG9jayA9IGNsa19nZXRfcmF0ZShtY2lfY2xrKTsKKworCWlmIChob3N0KQorCQlob3N0LT5idXNfbW9kZSA9IGlvcy0+YnVzX21vZGU7CisJZWxzZQorCQlwcmludGsoIk1NQzogTm8gaG9zdCBmb3IgYnVzX21vZGVcbiIpOworCisJaWYgKGlvcy0+Y2xvY2sgPT0gMCkgeworCQkvKiBEaXNhYmxlIHRoZSBNQ0kgY29udHJvbGxlciAqLworCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRElTKTsKKwkJY2xrZGl2ID0gMDsKKwl9CisJZWxzZSB7CisJCS8qIEVuYWJsZSB0aGUgTUNJIGNvbnRyb2xsZXIgKi8KKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQ1IsIEFUOTFfTUNJX01DSUVOKTsKKworCQlpZiAoKGF0OTFfbWFzdGVyX2Nsb2NrICUgKGlvcy0+Y2xvY2sgKiAyKSkgPT0gMCkKKwkJCWNsa2RpdiA9ICgoYXQ5MV9tYXN0ZXJfY2xvY2sgLyBpb3MtPmNsb2NrKSAvIDIpIC0gMTsKKwkJZWxzZQorCQkJY2xrZGl2ID0gKGF0OTFfbWFzdGVyX2Nsb2NrIC8gaW9zLT5jbG9jaykgLyAyOworCisJCURCRygiY2xrZGl2ID0gJWQuIG1jY2sgPSAlbGRcbiIsIGNsa2RpdiwKKwkJCWF0OTFfbWFzdGVyX2Nsb2NrIC8gKDIgKiAoY2xrZGl2ICsgMSkpKTsKKwl9CisJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCAmJiBob3N0LT5ib2FyZC0+d2lyZTQpIHsKKwkJREJHKCJNTUM6IFNldHRpbmcgY29udHJvbGxlciBidXMgd2lkdGggdG8gNFxuIik7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX1NEQ1IsIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfU0RDUikgfCBBVDkxX01DSV9TRENCVVMpOworCX0KKwllbHNlIHsKKwkJREJHKCJNTUM6IFNldHRpbmcgY29udHJvbGxlciBidXMgd2lkdGggdG8gMVxuIik7CisJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX1NEQ1IsIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfU0RDUikgJiB+QVQ5MV9NQ0lfU0RDQlVTKTsKKwl9CisKKwkvKiBTZXQgdGhlIGNsb2NrIGRpdmlkZXIgKi8KKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9NUiwgKGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfTVIpICYgfkFUOTFfTUNJX0NMS0RJVikgfCBjbGtkaXYpOworCisJLyogbWF5YmUgc3dpdGNoIHBvd2VyIHRvIHRoZSBjYXJkICovCisJaWYgKGhvc3QgJiYgaG9zdC0+Ym9hcmQtPnZjY19waW4pIHsKKwkJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKKwkJCWNhc2UgTU1DX1BPV0VSX09GRjoKKwkJCQlhdDkxX3NldF9ncGlvX291dHB1dChob3N0LT5ib2FyZC0+dmNjX3BpbiwgMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE1NQ19QT1dFUl9VUDoKKwkJCWNhc2UgTU1DX1BPV0VSX09OOgorCQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGhvc3QtPmJvYXJkLT52Y2NfcGluLCAxKTsKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIEhhbmRsZSBhbiBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IGF0OTFfbWNpX2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCA9IGRldmlkOworCWludCBjb21wbGV0ZWQgPSAwOworCisJdW5zaWduZWQgaW50IGludF9zdGF0dXM7CisKKwlpZiAoaG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlpbnRfc3RhdHVzID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TUik7CisJREJHKCJNQ0kgaXJxOiBzdGF0dXMgPSAlMDhYLCAlMDhsWCwgJTA4bFhcbiIsIGludF9zdGF0dXMsIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfSU1SKSwKKwkJaW50X3N0YXR1cyAmIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfSU1SKSk7CisKKwlpZiAoKGludF9zdGF0dXMgJiBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX0lNUikpICYgMHhmZmZmMDAwMCkKKwkJY29tcGxldGVkID0gMTsKKworCWludF9zdGF0dXMgJj0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9JTVIpOworCisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9VTlJFKQorCQlEQkcoIk1NQzogVW5kZXJydW4gZXJyb3JcbiIpOworCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfT1ZSRSkKKwkJREJHKCJNTUM6IE92ZXJydW4gZXJyb3JcbiIpOworCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRFRPRSkKKwkJREJHKCJNTUM6IERhdGEgdGltZW91dFxuIik7CisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9EQ1JDRSkKKwkJREJHKCJNTUM6IENSQyBlcnJvciBpbiBkYXRhXG4iKTsKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JUT0UpCisJCURCRygiTU1DOiBSZXNwb25zZSB0aW1lb3V0XG4iKTsKKwlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JFTkRFKQorCQlEQkcoIk1NQzogUmVzcG9uc2UgZW5kIGJpdCBlcnJvclxuIik7CisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SQ1JDRSkKKwkJREJHKCJNTUM6IFJlc3BvbnNlIENSQyBlcnJvclxuIik7CisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SRElSRSkKKwkJREJHKCJNTUM6IFJlc3BvbnNlIGRpcmVjdGlvbiBlcnJvclxuIik7CisJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SSU5ERSkKKwkJREJHKCJNTUM6IFJlc3BvbnNlIGluZGV4IGVycm9yXG4iKTsKKworCS8qIE9ubHkgY29udGludWUgcHJvY2Vzc2luZyBpZiBubyBlcnJvcnMgKi8KKwlpZiAoIWNvbXBsZXRlZCkgeworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1RYQlVGRSkgeworCQkJREJHKCJUWCBidWZmZXIgZW1wdHlcbiIpOworCQkJYXQ5MV9tY2lfaGFuZGxlX3RyYW5zbWl0dGVkKGhvc3QpOworCQl9CisKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SWEJVRkYpIHsKKwkJCURCRygiUlggYnVmZmVyIGZ1bGxcbiIpOworCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9DTURSRFkpOworCQl9CisKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9FTkRUWCkgeworCQkJREJHKCJUcmFuc21pdCBoYXMgZW5kZWRcbiIpOworCQl9CisKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9FTkRSWCkgeworCQkJREJHKCJSZWNlaXZlIGhhcyBlbmRlZFxuIik7CisJCQlhdDkxbWNpX3Bvc3RfZG1hX3JlYWQoaG9zdCk7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX05PVEJVU1kpIHsKKwkJCURCRygiQ2FyZCBpcyByZWFkeVxuIik7CisJCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIEFUOTFfTUNJX0NNRFJEWSk7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0RUSVApIHsKKwkJCURCRygiRGF0YSB0cmFuc2ZlciBpbiBwcm9ncmVzc1xuIik7CisJCX0KKworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0JMS0UpIHsKKwkJCURCRygiQmxvY2sgdHJhbnNmZXIgaGFzIGVuZGVkXG4iKTsKKwkJfQorCisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfVFhSRFkpIHsKKwkJCURCRygiUmVhZHkgdG8gdHJhbnNtaXRcbiIpOworCQl9CisKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SWFJEWSkgeworCQkJREJHKCJSZWFkeSB0byByZWNlaXZlXG4iKTsKKwkJfQorCisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfQ01EUkRZKSB7CisJCQlEQkcoIkNvbW1hbmQgcmVhZHlcbiIpOworCQkJY29tcGxldGVkID0gMTsKKwkJfQorCX0KKwlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIGludF9zdGF0dXMpOworCisJaWYgKGNvbXBsZXRlZCkgeworCQlEQkcoIkNvbXBsZXRlZCBjb21tYW5kXG4iKTsKKwkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSURSLCAweGZmZmZmZmZmKTsKKwkJYXQ5MW1jaV9jb21wbGV0ZWRfY29tbWFuZChob3N0KTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdDkxX21tY19kZXRfaXJxKGludCBpcnEsIHZvaWQgKl9ob3N0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0ID0gX2hvc3Q7CisJaW50IHByZXNlbnQgPSAhYXQ5MV9nZXRfZ3Bpb192YWx1ZShpcnEpOworCisJLyoKKwkgKiB3ZSBleHBlY3QgdGhpcyBpcnEgb24gYm90aCBpbnNlcnQgYW5kIHJlbW92ZSwKKwkgKiBhbmQgdXNlIGEgc2hvcnQgZGVsYXkgdG8gZGVib3VuY2UuCisJICovCisJaWYgKHByZXNlbnQgIT0gaG9zdC0+cHJlc2VudCkgeworCQlob3N0LT5wcmVzZW50ID0gcHJlc2VudDsKKwkJREJHKCIlczogY2FyZCAlc1xuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksCisJCQlwcmVzZW50ID8gImluc2VydCIgOiAicmVtb3ZlIik7CisJCWlmICghcHJlc2VudCkgeworCQkJREJHKCIqKioqKiogUmVzZXR0aW5nIFNELWNhcmQgYnVzIHdpZHRoICoqKioqKlxuIik7CisJCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9TRENSLCAwKTsKKwkJfQorCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IGF0OTFfbWNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlpbnQgcmVhZF9vbmx5ID0gMDsKKwlzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChob3N0LT5ib2FyZC0+d3BfcGluKSB7CisJCXJlYWRfb25seSA9IGF0OTFfZ2V0X2dwaW9fdmFsdWUoaG9zdC0+Ym9hcmQtPndwX3Bpbik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYXJkIGlzICVzXG4iLCBtbWNfaG9zdG5hbWUobW1jKSwKKwkJCQkocmVhZF9vbmx5ID8gInJlYWQtb25seSIgOiAicmVhZC13cml0ZSIpICk7CisJfQorCWVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaG9zdCBkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgcmVhZC1vbmx5ICIKKwkJCQkic3dpdGNoLiAgQXNzdW1pbmcgd3JpdGUtZW5hYmxlLlxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOworCX0KKwlyZXR1cm4gcmVhZF9vbmx5OworfQorCitzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBhdDkxX21jaV9vcHMgPSB7CisJLnJlcXVlc3QJPSBhdDkxX21jaV9yZXF1ZXN0LAorCS5zZXRfaW9zCT0gYXQ5MV9tY2lfc2V0X2lvcywKKwkuZ2V0X3JvCQk9IGF0OTFfbWNpX2dldF9ybywKK307CisKKy8qCisgKiBQcm9iZSBmb3IgdGhlIGRldmljZQorICovCitzdGF0aWMgaW50IGF0OTFfbWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdDsKKwlpbnQgcmV0OworCisJREJHKCJQcm9iZSBNQ0kgZGV2aWNlc1xuIik7CisJYXQ5MV9tY2lfZGlzYWJsZSgpOworCWF0OTFfbWNpX2VuYWJsZSgpOworCisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBhdDkxbWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlEQkcoIkZhaWxlZCB0byBhbGxvY2F0ZSBtbWMgaG9zdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1tYy0+b3BzID0gJmF0OTFfbWNpX29wczsKKwltbWMtPmZfbWluID0gMzc1MDAwOworCW1tYy0+Zl9tYXggPSAyNTAwMDAwMDsKKwltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+bW1jID0gbW1jOworCWhvc3QtPmJ1ZmZlciA9IE5VTEw7CisJaG9zdC0+YnVzX21vZGUgPSAwOworCWhvc3QtPmJvYXJkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKGhvc3QtPmJvYXJkLT53aXJlNCkgeworI2lmZGVmIFNVUFBPUlRfNFdJUkUKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKyNlbHNlCisJCXByaW50aygiTU1DOiA0IHdpcmUgYnVzIG1vZGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAtIHVzaW5nIDEgd2lyZVxuIik7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIEdldCBDbG9jaworCSAqLworCW1jaV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtY2lfY2xrIik7CisJaWYgKCFtY2lfY2xrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVQ5MSBNTUM6IG5vIGNsb2NrIGRlZmluZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNsa19lbmFibGUobWNpX2Nsayk7CQkJLyogRW5hYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrICovCisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBNQ0kgaW50ZXJydXB0CisJICovCisJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MV9JRF9NQ0ksIGF0OTFfbWNpX2lycSwgU0FfU0hJUlEsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlpZiAocmV0KSB7CisJCURCRygiRmFpbGVkIHRvIHJlcXVlc3QgTUNJIGludGVycnVwdFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKworCS8qCisJICogQWRkIGhvc3QgdG8gTU1DIGxheWVyCisJICovCisJaWYgKGhvc3QtPmJvYXJkLT5kZXRfcGluKQorCQlob3N0LT5wcmVzZW50ID0gIWF0OTFfZ2V0X2dwaW9fdmFsdWUoaG9zdC0+Ym9hcmQtPmRldF9waW4pOworCWVsc2UKKwkJaG9zdC0+cHJlc2VudCA9IC0xOworCisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwkvKgorCSAqIG1vbml0b3IgY2FyZCBpbnNlcnRpb24vcmVtb3ZhbCBpZiB3ZSBjYW4KKwkgKi8KKwlpZiAoaG9zdC0+Ym9hcmQtPmRldF9waW4pIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+Ym9hcmQtPmRldF9waW4sIGF0OTFfbW1jX2RldF9pcnEsCisJCQkJU0FfU0FNUExFX1JBTkRPTSwgRFJJVkVSX05BTUUsIGhvc3QpOworCQlpZiAocmV0KQorCQkJREJHKCJjb3VsZG4ndCBhbGxvY2F0ZSBNTUMgZGV0ZWN0IGlycVxuIik7CisJfQorCisJREJHKEtFUk5fSU5GTyAiQWRkZWQgTUNJIGRyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBhIGRldmljZQorICovCitzdGF0aWMgaW50IGF0OTFfbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdDsKKworCWlmICghbW1jKQorCQlyZXR1cm4gLTE7CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChob3N0LT5wcmVzZW50ICE9IC0xKSB7CisJCWZyZWVfaXJxKGhvc3QtPmJvYXJkLT5kZXRfcGluLCBob3N0KTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+bW1jLT5kZXRlY3QpOworCX0KKworCW1tY19yZW1vdmVfaG9zdChtbWMpOworCWF0OTFfbWNpX2Rpc2FibGUoKTsKKwlmcmVlX2lycShBVDkxX0lEX01DSSwgaG9zdCk7CisJbW1jX2ZyZWVfaG9zdChtbWMpOworCisJY2xrX2Rpc2FibGUobWNpX2Nsayk7CQkJCS8qIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2sgKi8KKwljbGtfcHV0KG1jaV9jbGspOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlEQkcoIlJlbW92ZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXQ5MV9tY2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtbWMpCisJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0OTFfbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldCA9IDA7CisKKwlpZiAobW1jKQorCQlyZXQgPSBtbWNfcmVzdW1lX2hvc3QobW1jKTsKKworCXJldHVybiByZXQ7Cit9CisjZWxzZQorI2RlZmluZSBhdDkxX21jaV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYXQ5MV9tY2lfcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9tY2lfZHJpdmVyID0geworCS5wcm9iZQkJPSBhdDkxX21jaV9wcm9iZSwKKwkucmVtb3ZlCQk9IGF0OTFfbWNpX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGF0OTFfbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdDkxX21jaV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX21jaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXQ5MV9tY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0OTFfbWNpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXQ5MV9tY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXQ5MV9tY2lfaW5pdCk7Cittb2R1bGVfZXhpdChhdDkxX21jaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBVDkxIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIFJhbmRlbGwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2F1MXhtbWMuYyBiL2RyaXZlcnMvbW1jL2F1MXhtbWMuYwppbmRleCBjMDMyNmJiLi41ZGM0YmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9hdTF4bW1jLmMKKysrIGIvZHJpdmVycy9tbWMvYXUxeG1tYy5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJfQogCQllbHNlCiAJCQlkYXRhLT5ieXRlc194ZmVyZWQgPQotCQkJCShkYXRhLT5ibG9ja3MgKiAoMSA8PCBkYXRhLT5ibGtzel9iaXRzKSkgLQorCQkJCShkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzeikgLQogCQkJCWhvc3QtPnBpby5sZW47CiAJfQogCkBAIC01NzUsNyArNTc1LDcgQEAKIGF1MXhtbWNfcHJlcGFyZV9kYXRhKHN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAotCWludCBkYXRhbGVuID0gZGF0YS0+YmxvY2tzICogKDEgPDwgZGF0YS0+Ymxrc3pfYml0cyk7CisJaW50IGRhdGFsZW4gPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKIAogCWlmIChkbWEgIT0gMCkKIAkJaG9zdC0+ZmxhZ3MgfD0gSE9TVF9GX0RNQTsKQEAgLTU5Niw3ICs1OTYsNyBAQAogCWlmIChob3N0LT5kbWEubGVuID09IDApCiAJCXJldHVybiBNTUNfRVJSX1RJTUVPVVQ7CiAKLQlhdV93cml0ZWwoKDEgPDwgZGF0YS0+Ymxrc3pfYml0cykgLSAxLCBIT1NUX0JMS1NJWkUoaG9zdCkpOworCWF1X3dyaXRlbChkYXRhLT5ibGtzeiAtIDEsIEhPU1RfQkxLU0laRShob3N0KSk7CiAKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBIT1NUX0ZfRE1BKSB7CiAJCWludCBpOwpAQCAtNzIwLDEwICs3MjAsNiBAQAogewogCXN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JREJHKCJzZXRfaW9zIChwb3dlcj0ldSwgY2xvY2s9JXVIeiwgdmRkPSV1LCBtb2RlPSV1KVxuIiwKLQkgICAgICBob3N0LT5pZCwgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPmNsb2NrLCBpb3MtPnZkZCwKLQkgICAgICBpb3MtPmJ1c19tb2RlKTsKLQogCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikKIAkJYXUxeG1tY19zZXRfcG93ZXIoaG9zdCwgMCk7CiAJZWxzZSBpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PTikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaW14bW1jLmMgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGViMWQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaW14bW1jLmMKQEAgLTAsMCArMSwxMTI4IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbW1jL2lteG1tYy5jIC0gTW90b3JvbGEgaS5NWCBNTUNJIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCA8c2FzY2hhQHNhc2NoYWhhdWVyLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNiBQYXZlbCBQaXNhLCBQaUtST04gPHBwaXNhQHBpa3Jvbi5jb20+CisgKgorICogIGRlcml2ZWQgZnJvbSBweGFtY2kuYyBieSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAyMDA1LTA0LTE3IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KKyAqICAgICAgICAgICAgIENoYW5nZWQgdG8gY29uZm9ybSByZWRlc2lnbmVkIGkuTVggc2NhdHRlciBnYXRoZXIgRE1BIGludGVyZmFjZQorICoKKyAqICAyMDA1LTExLTA0IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KKyAqICAgICAgICAgICAgIFVwZGF0ZWQgZm9yIDIuNi4xNCBrZXJuZWwKKyAqCisgKiAgMjAwNS0xMi0xMyBKYXkgTW9ua21hbiA8anRtQHNtb290aHNtb290aGllLmNvbT4KKyAqICAgICAgICAgICAgIEZvdW5kIGFuZCBjb3JyZWN0ZWQgcHJvYmxlbXMgaW4gdGhlIHdyaXRlIHBhdGgKKyAqCisgKiAgMjAwNS0xMi0zMCBQYXZlbCBQaXNhIDxwaXNhQGNtcC5mZWxrLmN2dXQuY3o+CisgKiAgICAgICAgICAgICBUaGUgZXZlbnQgaGFuZGxpbmcgcmV3cml0dGVuIHJpZ2h0IHdheSBpbiBzb2Z0aXJxLgorICogICAgICAgICAgICAgQWRkZWQgbWFueSB1Z2x5IGhhY2tzIGFuZCBkZWxheXMgdG8gb3ZlcmNvbWUgU0RIQworICogICAgICAgICAgICAgZGVmaWNpZW5jaWVzCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZWxzZQorI3VuZGVmICBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LWRtYS5oPgorCisjaW5jbHVkZSAiaW14bW1jLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImlteC1tbWMiCisKKyNkZWZpbmUgSU1YTUNJX0lOVF9NQVNLX0RFRkFVTFQgKElOVF9NQVNLX0JVRl9SRUFEWSB8IElOVF9NQVNLX0RBVEFfVFJBTiB8IFwKKwkgICAgICAgICAgICAgIElOVF9NQVNLX1dSSVRFX09QX0RPTkUgfCBJTlRfTUFTS19FTkRfQ01EX1JFUyB8IFwKKwkJICAgICAgSU5UX01BU0tfQVVUT19DQVJEX0RFVEVDVCB8IElOVF9NQVNLX0RBVDBfRU4gfCBJTlRfTUFTS19TRElPKQorCitzdHJ1Y3QgaW14bWNpX2hvc3QgeworCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKwlpbnQJCQlpcnE7CisJaW14X2RtYWNoX3QJCWRtYTsKKwl1bnNpZ25lZCBpbnQJCWNsa3J0OworCXVuc2lnbmVkIGludAkJY21kYXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50CWltYXNrOworCXVuc2lnbmVkIGludAkJcG93ZXJfbW9kZTsKKwl1bnNpZ25lZCBpbnQJCXByZXNlbnQ7CisJc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXN0cnVjdCBtbWNfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBtbWNfY29tbWFuZAkqY21kOworCXN0cnVjdCBtbWNfZGF0YQkJKmRhdGE7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGFza2xldDsKKwl1bnNpZ25lZCBpbnQJCXN0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZwkJcGVuZGluZ19ldmVudHM7CisJLyogTmV4dCB0byBmaWVsZHMgYXJlIHRoZXJlIGZvciBDUFUgZHJpdmVuIHRyYW5zZmVycyB0byBvdmVyY29tZSBTREhDIGRlZmljaWVuY2llcyAqLworCXUxNgkJCSpkYXRhX3B0cjsKKwl1bnNpZ25lZCBpbnQJCWRhdGFfY250OworCWF0b21pY190CQlzdHVja190aW1lb3V0OworCisJdW5zaWduZWQgaW50CQlkbWFfbmVudHM7CisJdW5zaWduZWQgaW50CQlkbWFfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWRtYV9kaXI7CisJaW50CQkJZG1hX2FsbG9jYXRlZDsKKworCXVuc2lnbmVkIGNoYXIJCWFjdHVhbF9idXNfd2lkdGg7Cit9OworCisjZGVmaW5lIElNWE1DSV9QRU5EX0lSUV9iCTAKKyNkZWZpbmUgSU1YTUNJX1BFTkRfRE1BX0VORF9iCTEKKyNkZWZpbmUgSU1YTUNJX1BFTkRfRE1BX0VSUl9iCTIKKyNkZWZpbmUgSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IJMworI2RlZmluZSBJTVhNQ0lfUEVORF9ETUFfREFUQV9iCTQKKyNkZWZpbmUgSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYgk1CisjZGVmaW5lIElNWE1DSV9QRU5EX0NBUkRfWENIR19iCTYKKyNkZWZpbmUgSU1YTUNJX1BFTkRfU0VUX0lOSVRfYgk3CisjZGVmaW5lIElNWE1DSV9QRU5EX1NUQVJURURfYgk4CisKKyNkZWZpbmUgSU1YTUNJX1BFTkRfSVJRX20JKDEgPDwgSU1YTUNJX1BFTkRfSVJRX2IpCisjZGVmaW5lIElNWE1DSV9QRU5EX0RNQV9FTkRfbQkoMSA8PCBJTVhNQ0lfUEVORF9ETUFfRU5EX2IpCisjZGVmaW5lIElNWE1DSV9QRU5EX0RNQV9FUlJfbQkoMSA8PCBJTVhNQ0lfUEVORF9ETUFfRVJSX2IpCisjZGVmaW5lIElNWE1DSV9QRU5EX1dBSVRfUkVTUF9tCSgxIDw8IElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iKQorI2RlZmluZSBJTVhNQ0lfUEVORF9ETUFfREFUQV9tCSgxIDw8IElNWE1DSV9QRU5EX0RNQV9EQVRBX2IpCisjZGVmaW5lIElNWE1DSV9QRU5EX0NQVV9EQVRBX20JKDEgPDwgSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfQ0FSRF9YQ0hHX20JKDEgPDwgSU1YTUNJX1BFTkRfQ0FSRF9YQ0hHX2IpCisjZGVmaW5lIElNWE1DSV9QRU5EX1NFVF9JTklUX20JKDEgPDwgSU1YTUNJX1BFTkRfU0VUX0lOSVRfYikKKyNkZWZpbmUgSU1YTUNJX1BFTkRfU1RBUlRFRF9tCSgxIDw8IElNWE1DSV9QRU5EX1NUQVJURURfYikKKworc3RhdGljIHZvaWQgaW14bWNpX3N0b3BfY2xvY2soc3RydWN0IGlteG1jaV9ob3N0ICpob3N0KQoreworCWludCBpID0gMDsKKwlNTUNfU1RSX1NUUF9DTEsgJj0gflNUUl9TVFBfQ0xLX1NUQVJUX0NMSzsKKwl3aGlsZShpIDwgMHgxMDAwKSB7CisJICAgICAgICBpZighKGkgJiAweDdmKSkKKwkJCU1NQ19TVFJfU1RQX0NMSyB8PSBTVFJfU1RQX0NMS19TVE9QX0NMSzsKKworCQlpZighKE1NQ19TVEFUVVMgJiBTVEFUVVNfQ0FSRF9CVVNfQ0xLX1JVTikpIHsKKwkJCS8qIENoZWNrIHR3aWNlIGJlZm9yZSBjdXQgKi8KKwkJCWlmKCEoTU1DX1NUQVRVUyAmIFNUQVRVU19DQVJEX0JVU19DTEtfUlVOKSkKKwkJCQlyZXR1cm47CisJCX0KKworCQlpKys7CisJfQorCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX3N0b3BfY2xvY2sgYmxvY2tlZCwgbm8gbHVja1xuIik7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX3N0YXJ0X2Nsb2NrKHN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBpbnQgdHJpYWxzID0gMDsKKwl1bnNpZ25lZCBpbnQgZGVsYXlfbGltaXQgPSAxMjg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCU1NQ19TVFJfU1RQX0NMSyAmPSB+U1RSX1NUUF9DTEtfU1RPUF9DTEs7CisKKwljbGVhcl9iaXQoSU1YTUNJX1BFTkRfU1RBUlRFRF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCisJLyoKKwkgKiBDb21tYW5kIHN0YXJ0IG9mIHRoZSBjbG9jaywgdGhpcyB1c3VhbGx5IHN1Y2NlZWRzIGluIGxlc3MKKwkgKiB0aGVuIDYgZGVsYXkgbG9vcHMsIGJ1dCBkdXJpbmcgY2FyZCBkZXRlY3Rpb24gKGxvdyBjbG9ja3JhdGUpCisJICogaXQgdGFrZXMgdXAgdG8gNTAwMCBkZWxheSBsb29wcyBhbmQgc29tZXRpbWVzIGZhaWxzIGZvciB0aGUgZmlyc3QgdGltZQorCSAqLworCU1NQ19TVFJfU1RQX0NMSyB8PSBTVFJfU1RQX0NMS19TVEFSVF9DTEs7CisKKwlkbyB7CisJCXVuc2lnbmVkIGludCBkZWxheSA9IGRlbGF5X2xpbWl0OworCisJCXdoaWxlKGRlbGF5LS0peworCQkJaWYoTU1DX1NUQVRVUyAmIFNUQVRVU19DQVJEX0JVU19DTEtfUlVOKQorCQkJCS8qIENoZWNrIHR3aWNlIGJlZm9yZSBjdXQgKi8KKwkJCQlpZihNTUNfU1RBVFVTICYgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4pCisJCQkJCXJldHVybiAwOworCisJCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9TVEFSVEVEX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJcmV0dXJuIDA7CisJCX0KKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCS8qCisJCSAqIEVuc3VyZSwgdGhhdCByZXF1ZXN0IGlzIG5vdCBkb3VibGVkIHVuZGVyIGFsbCBwb3NzaWJsZSBjaXJjdW1zdGFuY2VzLgorCQkgKiBJdCBpcyBwb3NzaWJsZSwgdGhhdCBjb2NrIHJ1bm5pbmcgc3RhdGUgaXMgbWlzc2VkLCBiZWNhdXNlIHNvbWUgb3RoZXIKKwkJICogSVJRIG9yIHNjaGVkdWxlIGRlbGF5cyB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGlvbiBhbmQgdGhlIGNsb2NrcyBoYXMKKwkJICogYmVlbiBhbHJlYWR5IHN0b3BwZWQgYnkgb3RoZXIgbWVhbnMgKHJlc3BvbnNlIHByb2Nlc3NpbmcsIFNESEMgSFcpCisJCSAqLworCQlpZighdGVzdF9iaXQoSU1YTUNJX1BFTkRfU1RBUlRFRF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX1NUQVJUX0NMSzsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJfSB3aGlsZSgrK3RyaWFsczwyNTYpOworCisJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfc3RhcnRfY2xvY2sgYmxvY2tlZCwgbm8gbHVja1xuIik7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9zb2Z0cmVzZXQodm9pZCkKK3sKKwkvKiByZXNldCBzZXF1ZW5jZSAqLworCU1NQ19TVFJfU1RQX0NMSyA9IDB4ODsKKwlNTUNfU1RSX1NUUF9DTEsgPSAweEQ7CisJTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKKwlNTUNfU1RSX1NUUF9DTEsgPSAweDU7CisJTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKKwlNTUNfU1RSX1NUUF9DTEsgPSAweDU7CisJTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKKworCU1NQ19SRVNfVE8gPSAweGZmOworCU1NQ19CTEtfTEVOID0gNTEyOworCU1NQ19OT0IgPSAxOworfQorCitzdGF0aWMgaW50IGlteG1jaV9idXN5X3dhaXRfZm9yX3N0YXR1cyhzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QsCisJCQl1bnNpZ25lZCBpbnQgKnBzdGF0LCB1bnNpZ25lZCBpbnQgc3RhdF9tYXNrLAorCQkJaW50IHRpbWVvdXQsIGNvbnN0IGNoYXIgKndoZXJlKQoreworCWludCBsb29wcz0wOworCXdoaWxlKCEoKnBzdGF0ICYgc3RhdF9tYXNrKSkgeworCQlsb29wcys9MjsKKwkJaWYobG9vcHMgPj0gdGltZW91dCkgeworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJidXN5IHdhaXQgdGltZW91dCBpbiAlcywgU1RBVFVTID0gMHgleCAoMHgleClcbiIsCisJCQkJd2hlcmUsICpwc3RhdCwgc3RhdF9tYXNrKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQl1ZGVsYXkoMik7CisJCSpwc3RhdCB8PSBNTUNfU1RBVFVTOworCX0KKwlpZighbG9vcHMpCisJCXJldHVybiAwOworCisJLyogVGhlIGJ1c3ktd2FpdCBpcyBleHBlY3RlZCB0aGVyZSBmb3IgY2xvY2sgPDhNSHogZHVlIHRvIFNESEMgaGFyZHdhcmUgZmxhd3MgKi8KKwlpZighKHN0YXRfbWFzayAmIFNUQVRVU19FTkRfQ01EX1JFU1ApIHx8IChob3N0LT5tbWMtPmlvcy5jbG9jaz49ODAwMDAwMCkpCisJCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+bW1jKSwgImJ1c3kgd2FpdCBmb3IgJWQgdXNlYyBpbiAlcywgU1RBVFVTID0gMHgleCAoMHgleClcbiIsCisJCQlsb29wcywgd2hlcmUsICpwc3RhdCwgc3RhdF9tYXNrKTsKKwlyZXR1cm4gbG9vcHM7Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9zZXR1cF9kYXRhKHN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGludCBub2IgPSBkYXRhLT5ibG9ja3M7CisJdW5zaWduZWQgaW50IGJsa3N6ID0gMSA8PCBkYXRhLT5ibGtzel9iaXRzOworCXVuc2lnbmVkIGludCBkYXRhc3ogPSBub2IgKiBibGtzejsKKwlpbnQgaTsKKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1NUUkVBTSkKKwkJbm9iID0gMHhmZmZmOworCisJaG9zdC0+ZGF0YSA9IGRhdGE7CisJZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsKKworCU1NQ19OT0IgPSBub2I7CisJTU1DX0JMS19MRU4gPSBibGtzejsKKworCS8qCisJICogRE1BIGNhbm5vdCBiZSB1c2VkIGZvciBzbWFsbCBibG9jayBzaXplcywgd2UgaGF2ZSB0byB1c2UgQ1BVIGRyaXZlbiB0cmFuc2ZlcnMgb3RoZXJ3aXNlLgorCSAqIFdlIGFyZSBpbiBiaWcgdHJvdWJsZXMgZm9yIG5vbi01MTIgYnl0ZSB0cmFuc2ZlcnMgYWNjb3JkaW5nIHRvIG5vdGUgaW4gdGhlIHBhcmFncmFwaAorCSAqIDIwLjYuNyBvZiBVc2VyIE1hbnVhbCBhbnl3YXksIGJ1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gdHJhbnNmZXIgU0NSIGF0IGxlYXN0LgorCSAqIFRoZSBzaXR1YXRpb24gaXMgZXZlbiBtb3JlIGNvbXBsZXggaW4gcmVhbGl0eS4gVGhlIFNESEMgaW4gbm90IGFibGUgdG8gaGFuZGxlIHdsbAorCSAqIHBhcnRpYWwgRklGTyBmaWxscyBhbmQgcmVhZHMuIFRoZSBsZW5ndGggaGFzIHRvIGJlIHJvdW5kZWQgdXAgdG8gYnVyc3Qgc2l6ZSBtdWx0aXBsZS4KKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBTQ1IgcmVhZCBhdCBsZWFzdC4KKwkgKi8KKwlpZiAoZGF0YXN6IDwgNjQpIHsKKwkJaG9zdC0+ZG1hX3NpemUgPSBkYXRhc3o7CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCWhvc3QtPmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisKKwkJCS8qIEhhY2sgdG8gZW5hYmxlIHJlYWQgU0NSICovCisJCQlpZihkYXRhc3ogPCAxNikgeworCQkJCU1NQ19OT0IgPSAxOworCQkJCU1NQ19CTEtfTEVOID0gMTY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlob3N0LT5kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKKwkJfQorCisJCS8qIENvbnZlcnQgYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MgKi8KKwkJaG9zdC0+ZGF0YV9wdHIgPSAodTE2KikocGFnZV9hZGRyZXNzKGRhdGEtPnNnLT5wYWdlKSArIGRhdGEtPnNnLT5vZmZzZXQpOworCQlob3N0LT5kYXRhX2NudCA9IDA7CisKKwkJY2xlYXJfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCXNldF9iaXQoSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKworCQlyZXR1cm47CisJfQorCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgeworCQlob3N0LT5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFOworCQlob3N0LT5kbWFfbmVudHMgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCisJCQkJCQlkYXRhLT5zZ19sZW4sICBob3N0LT5kbWFfZGlyKTsKKworCQlpbXhfZG1hX3NldHVwX3NnKGhvc3QtPmRtYSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGF0YXN6LAorCQkJaG9zdC0+cmVzLT5zdGFydCArIE1NQ19CVUZGRVJfQUNDRVNTX09GUywgRE1BX01PREVfUkVBRCk7CisKKwkJLyppbXhfZG1hX3NldHVwX21lbTJkZXZfY2NyKGhvc3QtPmRtYSwgRE1BX01PREVfUkVBRCwgSU1YX0RNQV9XSURUSF8xNiwgQ0NSX1JFTik7Ki8KKwkJQ0NSKGhvc3QtPmRtYSkgPSBDQ1JfRE1PRF9MSU5FQVIgfCBDQ1JfRFNJWl8zMiB8IENDUl9TTU9EX0ZJRk8gfCBDQ1JfU1NJWl8xNiB8IENDUl9SRU47CisJfSBlbHNlIHsKKwkJaG9zdC0+ZG1hX2RpciA9IERNQV9UT19ERVZJQ0U7CisKKwkJaG9zdC0+ZG1hX25lbnRzID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAorCQkJCQkJZGF0YS0+c2dfbGVuLCAgaG9zdC0+ZG1hX2Rpcik7CisKKwkJaW14X2RtYV9zZXR1cF9zZyhob3N0LT5kbWEsIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sIGRhdGFzeiwKKwkJCWhvc3QtPnJlcy0+c3RhcnQgKyBNTUNfQlVGRkVSX0FDQ0VTU19PRlMsIERNQV9NT0RFX1dSSVRFKTsKKworCQkvKmlteF9kbWFfc2V0dXBfbWVtMmRldl9jY3IoaG9zdC0+ZG1hLCBETUFfTU9ERV9XUklURSwgSU1YX0RNQV9XSURUSF8xNiwgQ0NSX1JFTik7Ki8KKwkJQ0NSKGhvc3QtPmRtYSkgPSBDQ1JfU01PRF9MSU5FQVIgfCBDQ1JfU1NJWl8zMiB8IENDUl9ETU9EX0ZJRk8gfCBDQ1JfRFNJWl8xNiB8IENDUl9SRU47CisJfQorCisjaWYgMQkvKiBUaGlzIGNvZGUgaXMgdGhlcmUgb25seSBmb3IgY29uc2lzdGVuY3kgY2hlY2tpbmcgYW5kIGNhbiBiZSBkaXNhYmxlZCBpbiBmdXR1cmUgKi8KKwlob3N0LT5kbWFfc2l6ZSA9IDA7CisJZm9yKGk9MDsgaTxob3N0LT5kbWFfbmVudHM7IGkrKykKKwkJaG9zdC0+ZG1hX3NpemUrPWRhdGEtPnNnW2ldLmxlbmd0aDsKKworCWlmIChkYXRhc3ogPiBob3N0LT5kbWFfc2l6ZSkgeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9zZXR1cF9kYXRhIGRhdGFzeiAweCV4ID4gMHgleCBkbV9zaXplXG4iLAorCQkgICAgICAgZGF0YXN6LCBob3N0LT5kbWFfc2l6ZSk7CisJfQorI2VuZGlmCisKKwlob3N0LT5kbWFfc2l6ZSA9IGRhdGFzejsKKworCXdtYigpOworCisJaWYoaG9zdC0+YWN0dWFsX2J1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCUJMUihob3N0LT5kbWEpID0gMDsJLyogYnVyc3QgNjQgYnl0ZSByZWFkIC8gNjQgYnl0ZXMgd3JpdGUgKi8KKwllbHNlCisJCUJMUihob3N0LT5kbWEpID0gMTY7CS8qIGJ1cnN0IDE2IGJ5dGUgcmVhZCAvIDE2IGJ5dGVzIHdyaXRlICovCisKKwlSU1NSKGhvc3QtPmRtYSkgPSBETUFfUkVRX1NESEM7CisKKwlzZXRfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJY2xlYXJfYml0KElNWE1DSV9QRU5EX0NQVV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisKKwkvKiBzdGFydCBETUEgZW5naW5lIGZvciByZWFkLCB3cml0ZSBpcyBkZWxheWVkIGFmdGVyIGluaXRpYWwgcmVzcG9uc2UgKi8KKwlpZiAoaG9zdC0+ZG1hX2RpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJaW14X2RtYV9lbmFibGUoaG9zdC0+ZG1hKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9zdGFydF9jbWQoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwgdW5zaWduZWQgaW50IGNtZGF0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGltYXNrOworCisJV0FSTl9PTihob3N0LT5jbWQgIT0gTlVMTCk7CisJaG9zdC0+Y21kID0gY21kOworCisJLyogRW5zdXJlLCB0aGF0IGNsb2NrIGFyZSBzdG9wcGVkIGVsc2UgY29tbWFuZCBwcm9ncmFtbWluZyBhbmQgc3RhcnQgZmFpbHMgKi8KKwlpbXhtY2lfc3RvcF9jbG9jayhob3N0KTsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQorCQljbWRhdCB8PSBDTURfREFUX0NPTlRfQlVTWTsKKworCXN3aXRjaCAobW1jX3Jlc3BfdHlwZShjbWQpKSB7CisJY2FzZSBNTUNfUlNQX1IxOiAvKiBzaG9ydCBDUkMsIE9QQ09ERSAqLworCWNhc2UgTU1DX1JTUF9SMUI6Lyogc2hvcnQgQ1JDLCBPUENPREUsIEJVU1kgKi8KKwkJY21kYXQgfD0gQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SMTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IyOiAvKiBsb25nIDEzNiBiaXQgKyBDUkMgKi8KKwkJY21kYXQgfD0gQ01EX0RBVF9DT05UX1JFU1BPTlNFX0ZPUk1BVF9SMjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IzOiAvKiBzaG9ydCAqLworCQljbWRhdCB8PSBDTURfREFUX0NPTlRfUkVTUE9OU0VfRk9STUFUX1IzOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjY6IC8qIHNob3J0IENSQyAqLworCQljbWRhdCB8PSBDTURfREFUX0NPTlRfUkVTUE9OU0VfRk9STUFUX1I2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoIHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9TRVRfSU5JVF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpICkKKwkJY21kYXQgfD0gQ01EX0RBVF9DT05UX0lOSVQ7IC8qIFRoaXMgY29tbWFuZCBuZWVkcyBpbml0ICovCisKKwlpZiAoIGhvc3QtPmFjdHVhbF9idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80ICkKKwkJY21kYXQgfD0gQ01EX0RBVF9DT05UX0JVU19XSURUSF80OworCisJTU1DX0NNRCA9IGNtZC0+b3Bjb2RlOworCU1NQ19BUkdIID0gY21kLT5hcmcgPj4gMTY7CisJTU1DX0FSR0wgPSBjbWQtPmFyZyAmIDB4ZmZmZjsKKwlNTUNfQ01EX0RBVF9DT05UID0gY21kYXQ7CisKKwlhdG9taWNfc2V0KCZob3N0LT5zdHVja190aW1lb3V0LCAwKTsKKwlzZXRfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCisKKwlpbWFzayA9IElNWE1DSV9JTlRfTUFTS19ERUZBVUxUOworCWltYXNrICY9IH5JTlRfTUFTS19FTkRfQ01EX1JFUzsKKwlpZiAoIGNtZGF0ICYgQ01EX0RBVF9DT05UX0RBVEFfRU5BQkxFICkgeworCQkvKmltYXNrICY9IH5JTlRfTUFTS19CVUZfUkVBRFk7Ki8KKwkJaW1hc2sgJj0gfklOVF9NQVNLX0RBVEFfVFJBTjsKKwkJaWYgKCBjbWRhdCAmIENNRF9EQVRfQ09OVF9XUklURSApCisJCQlpbWFzayAmPSB+SU5UX01BU0tfV1JJVEVfT1BfRE9ORTsKKwkJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCWltYXNrICY9IH5JTlRfTUFTS19CVUZfUkVBRFk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlob3N0LT5pbWFzayA9IGltYXNrOworCU1NQ19JTlRfTUFTSyA9IGhvc3QtPmltYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiQ01EJTAyZCAoMHglMDJ4KSBtYXNrIHNldCB0byAweCUwNHhcbiIsCisJCWNtZC0+b3Bjb2RlLCBjbWQtPm9wY29kZSwgaW1hc2spOworCisJaW14bWNpX3N0YXJ0X2Nsb2NrKGhvc3QpOworfQorCitzdGF0aWMgdm9pZCBpbXhtY2lfZmluaXNoX3JlcXVlc3Qoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWhvc3QtPnBlbmRpbmdfZXZlbnRzICY9IH4oSU1YTUNJX1BFTkRfV0FJVF9SRVNQX20gfCBJTVhNQ0lfUEVORF9ETUFfRU5EX20gfAorCQkJSU1YTUNJX1BFTkRfRE1BX0RBVEFfbSB8IElNWE1DSV9QRU5EX0NQVV9EQVRBX20pOworCisJaG9zdC0+aW1hc2sgPSBJTVhNQ0lfSU5UX01BU0tfREVGQVVMVDsKKwlNTUNfSU5UX01BU0sgPSBob3N0LT5pbWFzazsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWhvc3QtPnJlcSA9IE5VTEw7CisJaG9zdC0+Y21kID0gTlVMTDsKKwlob3N0LT5kYXRhID0gTlVMTDsKKwltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgcmVxKTsKK30KKworc3RhdGljIGludCBpbXhtY2lfZmluaXNoX2RhdGEoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgc3RhdCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCWludCBkYXRhX2Vycm9yOworCisJaWYodGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpeworCQlpbXhfZG1hX2Rpc2FibGUoaG9zdC0+ZG1hKTsKKwkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGhvc3QtPmRtYV9uZW50cywKKwkJCSAgICAgaG9zdC0+ZG1hX2Rpcik7CisJfQorCisJaWYgKCBzdGF0ICYgU1RBVFVTX0VSUl9NQVNLICkgeworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgInJlcXVlc3QgZmFpbGVkLiBzdGF0dXM6IDB4JTA4eFxuIixzdGF0KTsKKwkJaWYoc3RhdCAmIChTVEFUVVNfQ1JDX1JFQURfRVJSIHwgU1RBVFVTX0NSQ19XUklURV9FUlIpKQorCQkJZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKKwkJZWxzZSBpZihzdGF0ICYgU1RBVFVTX1RJTUVfT1VUX1JFQUQpCisJCQlkYXRhLT5lcnJvciA9IE1NQ19FUlJfVElNRU9VVDsKKwkJZWxzZQorCQkJZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKKwl9IGVsc2UgeworCQlkYXRhLT5ieXRlc194ZmVyZWQgPSBob3N0LT5kbWFfc2l6ZTsKKwl9CisKKwlkYXRhX2Vycm9yID0gZGF0YS0+ZXJyb3I7CisKKwlob3N0LT5kYXRhID0gTlVMTDsKKworCXJldHVybiBkYXRhX2Vycm9yOworfQorCitzdGF0aWMgaW50IGlteG1jaV9jbWRfZG9uZShzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBzdGF0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kOworCWludCBpOworCXUzMiBhLGIsYzsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCisJaWYgKCFjbWQpCisJCXJldHVybiAwOworCisJaG9zdC0+Y21kID0gTlVMTDsKKworCWlmIChzdGF0ICYgU1RBVFVTX1RJTUVfT1VUX1JFU1ApIHsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJDTUQgVElNRU9VVFxuIik7CisJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX1RJTUVPVVQ7CisJfSBlbHNlIGlmIChzdGF0ICYgU1RBVFVTX1JFU1BfQ1JDX0VSUiAmJiBjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpIHsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJjbWQgY3JjIGVycm9yXG4iKTsKKwkJY21kLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOworCX0KKworCWlmKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJaWYoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJdTMyIGEgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7CisJCQkJdTMyIGIgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7CisJCQkJY21kLT5yZXNwW2ldID0gYTw8MTYgfCBiOworCQkJfQorCQl9IGVsc2UgeworCQkJYSA9IE1NQ19SRVNfRklGTyAmIDB4ZmZmZjsKKwkJCWIgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7CisJCQljID0gTU1DX1JFU19GSUZPICYgMHhmZmZmOworCQkJY21kLT5yZXNwWzBdID0gYTw8MjQgfCBiPDw4IHwgYz4+ODsKKwkJfQorCX0KKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiUkVTUCAweCUwOHgsIDB4JTA4eCwgMHglMDh4LCAweCUwOHgsIGVycm9yICVkXG4iLAorCQljbWQtPnJlc3BbMF0sIGNtZC0+cmVzcFsxXSwgY21kLT5yZXNwWzJdLCBjbWQtPnJlc3BbM10sIGNtZC0+ZXJyb3IpOworCisJaWYgKGRhdGEgJiYgKGNtZC0+ZXJyb3IgPT0gTU1DX0VSUl9OT05FKSAmJiAhKHN0YXQgJiBTVEFUVVNfRVJSX01BU0spKSB7CisJCWlmIChob3N0LT5yZXEtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKKworCQkJLyogV2FpdCBmb3IgRklGTyB0byBiZSBlbXB0eSBiZWZvcmUgc3RhcnRpbmcgRE1BIHdyaXRlICovCisKKwkJCXN0YXQgPSBNTUNfU1RBVFVTOworCQkJaWYoaW14bWNpX2J1c3lfd2FpdF9mb3Jfc3RhdHVzKGhvc3QsICZzdGF0LAorCQkJCVNUQVRVU19BUFBMX0JVRkZfRkUsCisJCQkJNDAsICJpbXhtY2lfY21kX2RvbmUgRE1BIFdSIikgPCAwKSB7CisJCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfRklGTzsKKwkJCQlpbXhtY2lfZmluaXNoX2RhdGEoaG9zdCwgc3RhdCk7CisJCQkJaWYoaG9zdC0+cmVxKQorCQkJCQlpbXhtY2lfZmluaXNoX3JlcXVlc3QoaG9zdCwgaG9zdC0+cmVxKTsKKwkJCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksICJTVEFUVVMgPSAweCUwNHhcbiIsCisJCQkJICAgICAgIHN0YXQpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisJCQkJaW14X2RtYV9lbmFibGUoaG9zdC0+ZG1hKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxOworCQlpbXhtY2lfc3RvcF9jbG9jayhob3N0KTsKKwkJcmVxID0gaG9zdC0+cmVxOworCisJCWlmKGRhdGEpCisJCQlpbXhtY2lfZmluaXNoX2RhdGEoaG9zdCwgc3RhdCk7CisKKwkJaWYoIHJlcSApIHsKKwkJCWlteG1jaV9maW5pc2hfcmVxdWVzdChob3N0LCByZXEpOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX2NtZF9kb25lOiBubyByZXF1ZXN0IHRvIGZpbmlzaFxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpbXhtY2lfZGF0YV9kb25lKHN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHN0YXQpCit7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKKwlpbnQgZGF0YV9lcnJvcjsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlkYXRhX2Vycm9yID0gaW14bWNpX2ZpbmlzaF9kYXRhKGhvc3QsIHN0YXQpOworCisJaWYgKGhvc3QtPnJlcS0+c3RvcCkgeworCQlpbXhtY2lfc3RvcF9jbG9jayhob3N0KTsKKwkJaW14bWNpX3N0YXJ0X2NtZChob3N0LCBob3N0LT5yZXEtPnN0b3AsIDApOworCX0gZWxzZSB7CisJCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxOworCQlyZXEgPSBob3N0LT5yZXE7CisJCWlmKCByZXEgKSB7CisJCQlpbXhtY2lfZmluaXNoX3JlcXVlc3QoaG9zdCwgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9kYXRhX2RvbmU6IG5vIHJlcXVlc3QgdG8gZmluaXNoXG4iKTsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlteG1jaV9jcHVfZHJpdmVuX2RhdGEoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgKnBzdGF0KQoreworCWludCBpOworCWludCBidXJzdF9sZW47CisJaW50IGZsdXNoX2xlbjsKKwlpbnQgdHJhbnNfZG9uZSA9IDA7CisJdW5zaWduZWQgaW50IHN0YXQgPSAqcHN0YXQ7CisKKwlpZihob3N0LT5hY3R1YWxfYnVzX3dpZHRoICE9IE1NQ19CVVNfV0lEVEhfNCkKKwkJYnVyc3RfbGVuID0gMTY7CisJZWxzZQorCQlidXJzdF9sZW4gPSA2NDsKKworCS8qIFRoaXMgaXMgdW5mb3J0dW5hdGVseSByZXF1aXJlZCAqLworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX2NwdV9kcml2ZW5fZGF0YSBydW5uaW5nIFNUQVRVUyA9IDB4JXhcbiIsCisJCXN0YXQpOworCisJaWYoaG9zdC0+ZG1hX2RpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJaW14bWNpX2J1c3lfd2FpdF9mb3Jfc3RhdHVzKGhvc3QsICZzdGF0LAorCQkJCVNUQVRVU19BUFBMX0JVRkZfRkYgfCBTVEFUVVNfREFUQV9UUkFOU19ET05FLAorCQkJCTIwLCAiaW14bWNpX2NwdV9kcml2ZW5fZGF0YSByZWFkIik7CisKKwkJd2hpbGUoKHN0YXQgJiAoU1RBVFVTX0FQUExfQlVGRl9GRiB8ICBTVEFUVVNfREFUQV9UUkFOU19ET05FKSkgJiYKKwkJICAgICAgKGhvc3QtPmRhdGFfY250IDwgaG9zdC0+ZG1hX3NpemUpKSB7CisJCQlpZihidXJzdF9sZW4gPj0gaG9zdC0+ZG1hX3NpemUgLSBob3N0LT5kYXRhX2NudCkgeworCQkJCWZsdXNoX2xlbiA9IGJ1cnN0X2xlbjsKKwkJCQlidXJzdF9sZW4gPSBob3N0LT5kbWFfc2l6ZSAtIGhvc3QtPmRhdGFfY250OworCQkJCWZsdXNoX2xlbiAtPSBidXJzdF9sZW47CisJCQkJaG9zdC0+ZGF0YV9jbnQgPSBob3N0LT5kbWFfc2l6ZTsKKwkJCQl0cmFuc19kb25lID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJZmx1c2hfbGVuID0gMDsKKwkJCQlob3N0LT5kYXRhX2NudCArPSBidXJzdF9sZW47CisJCQl9CisKKwkJCWZvcihpID0gYnVyc3RfbGVuOyBpPj0yIDsgaS09MikgeworCQkJCSooaG9zdC0+ZGF0YV9wdHIrKykgPSBNTUNfQlVGRkVSX0FDQ0VTUzsKKwkJCQl1ZGVsYXkoMjApOwkvKiByZXF1aXJlZCBmb3IgY2xvY2tzIDwgOE1IeiovCisJCQl9CisKKwkJCWlmKGkgPT0gMSkKKwkJCQkqKHU4KikoaG9zdC0+ZGF0YV9wdHIpID0gTU1DX0JVRkZFUl9BQ0NFU1M7CisKKwkJCXN0YXQgPSBNTUNfU1RBVFVTOworCisJCQkvKiBGbHVzaCBleHRyYSBieXRlcyBmcm9tIEZJRk8gKi8KKwkJCXdoaWxlKGZsdXNoX2xlbiAmJiAhKHN0YXQgJiBTVEFUVVNfREFUQV9UUkFOU19ET05FKSl7CisJCQkJaSA9IE1NQ19CVUZGRVJfQUNDRVNTOworCQkJCXN0YXQgPSBNTUNfU1RBVFVTOworCQkJCXN0YXQgJj0gflNUQVRVU19DUkNfUkVBRF9FUlI7IC8qIFN0dXBpZCBidXQgcmVxdWlyZWQgdGhlcmUgKi8KKwkJCX0KKworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJlYWQgYnVyc3QgJWQgU1RBVFVTID0gMHgleFxuIiwKKwkJCQlidXJzdF9sZW4sIHN0YXQpOworCQl9CisJfSBlbHNlIHsKKwkJaW14bWNpX2J1c3lfd2FpdF9mb3Jfc3RhdHVzKGhvc3QsICZzdGF0LAorCQkJCVNUQVRVU19BUFBMX0JVRkZfRkUsCisJCQkJMjAsICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHdyaXRlIik7CisKKwkJd2hpbGUoKHN0YXQgJiBTVEFUVVNfQVBQTF9CVUZGX0ZFKSAmJgorCQkgICAgICAoaG9zdC0+ZGF0YV9jbnQgPCBob3N0LT5kbWFfc2l6ZSkpIHsKKwkJCWlmKGJ1cnN0X2xlbiA+PSBob3N0LT5kbWFfc2l6ZSAtIGhvc3QtPmRhdGFfY250KSB7CisJCQkJYnVyc3RfbGVuID0gaG9zdC0+ZG1hX3NpemUgLSBob3N0LT5kYXRhX2NudDsKKwkJCQlob3N0LT5kYXRhX2NudCA9IGhvc3QtPmRtYV9zaXplOworCQkJCXRyYW5zX2RvbmUgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlob3N0LT5kYXRhX2NudCArPSBidXJzdF9sZW47CisJCQl9CisKKwkJCWZvcihpID0gYnVyc3RfbGVuOyBpPjAgOyBpLT0yKQorCQkJCU1NQ19CVUZGRVJfQUNDRVNTID0gKihob3N0LT5kYXRhX3B0cisrKTsKKworCQkJc3RhdCA9IE1NQ19TVEFUVVM7CisKKwkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX2NwdV9kcml2ZW5fZGF0YSB3cml0ZSBidXJzdCAlZCBTVEFUVVMgPSAweCV4XG4iLAorCQkJCWJ1cnN0X2xlbiwgc3RhdCk7CisJCX0KKwl9CisKKwkqcHN0YXQgPSBzdGF0OworCisJcmV0dXJuIHRyYW5zX2RvbmU7Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9kbWFfaXJxKGludCBkbWEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBkZXZpZDsKKwl1aW50MzJfdCBzdGF0ID0gTU1DX1NUQVRVUzsKKworCWF0b21pY19zZXQoJmhvc3QtPnN0dWNrX3RpbWVvdXQsIDApOworCWhvc3QtPnN0YXR1c19yZWcgPSBzdGF0OworCXNldF9iaXQoSU1YTUNJX1BFTkRfRE1BX0VORF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPnRhc2tsZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW14bWNpX2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGlteG1jaV9ob3N0ICpob3N0ID0gZGV2aWQ7CisJdWludDMyX3Qgc3RhdCA9IE1NQ19TVEFUVVM7CisJaW50IGhhbmRsZWQgPSAxOworCisJTU1DX0lOVF9NQVNLID0gaG9zdC0+aW1hc2sgfCBJTlRfTUFTS19TRElPIHwgSU5UX01BU0tfQVVUT19DQVJEX0RFVEVDVDsKKworCWF0b21pY19zZXQoJmhvc3QtPnN0dWNrX3RpbWVvdXQsIDApOworCWhvc3QtPnN0YXR1c19yZWcgPSBzdGF0OworCXNldF9iaXQoSU1YTUNJX1BFTkRfSVJRX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJc2V0X2JpdChJTVhNQ0lfUEVORF9TVEFSVEVEX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTs7Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV90YXNrbGV0X2ZuYyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlteG1jaV9ob3N0ICpob3N0ID0gKHN0cnVjdCBpbXhtY2lfaG9zdCAqKWRhdGE7CisJdTMyIHN0YXQ7CisJdW5zaWduZWQgaW50IGRhdGFfZGlyX21hc2sgPSAwOwkvKiBTVEFUVVNfV1JfQ1JDX0VSUk9SX0NPREVfTUFTSyAqLworCWludCB0aW1lb3V0ID0gMDsKKworCWlmKGF0b21pY19yZWFkKCZob3N0LT5zdHVja190aW1lb3V0KSA+IDQpIHsKKwkJY2hhciAqd2hhdDsKKwkJdGltZW91dCA9IDE7CisJCXN0YXQgPSBNTUNfU1RBVFVTOworCQlob3N0LT5zdGF0dXNfcmVnID0gc3RhdDsKKwkJaWYgKHRlc3RfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJaWYgKHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJd2hhdCA9ICJSRVNQK0RNQSI7CisJCQllbHNlCisJCQkJd2hhdCA9ICJSRVNQIjsKKwkJZWxzZQorCQkJaWYgKHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0VORF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJCQl3aGF0ID0gIkRBVEEiOworCQkJCWVsc2UKKwkJCQkJd2hhdCA9ICJETUEiOworCQkJZWxzZQorCQkJCXdoYXQgPSAiPz8/IjsKKworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIFRJTUVPVVQsIGhhcmR3YXJlIHN0dWNrZWQgU1RBVFVTID0gMHglMDR4IElNQVNLID0gMHglMDR4XG4iLAorCQkgICAgICAgd2hhdCwgc3RhdCwgTU1DX0lOVF9NQVNLKTsKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJDTURfREFUX0NPTlQgPSAweCUwNHgsIE1NQ19CTEtfTEVOID0gMHglMDR4LCBNTUNfTk9CID0gMHglMDR4LCBETUFfQ0NSID0gMHglMDh4XG4iLAorCQkgICAgICAgTU1DX0NNRF9EQVRfQ09OVCwgTU1DX0JMS19MRU4sIE1NQ19OT0IsIENDUihob3N0LT5kbWEpKTsKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJDTUQlZCwgYnVzICVkLWJpdCwgZG1hX3NpemUgPSAweCV4XG4iLAorCQkgICAgICAgaG9zdC0+Y21kP2hvc3QtPmNtZC0+b3Bjb2RlOjAsIDE8PGhvc3QtPmFjdHVhbF9idXNfd2lkdGgsIGhvc3QtPmRtYV9zaXplKTsKKwl9CisKKwlpZighaG9zdC0+cHJlc2VudCB8fCB0aW1lb3V0KQorCQlob3N0LT5zdGF0dXNfcmVnID0gU1RBVFVTX1RJTUVfT1VUX1JFU1AgfCBTVEFUVVNfVElNRV9PVVRfUkVBRCB8CisJCQkJICAgIFNUQVRVU19DUkNfUkVBRF9FUlIgfCBTVEFUVVNfQ1JDX1dSSVRFX0VSUjsKKworCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX0lSUV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpIHx8IHRpbWVvdXQpIHsKKwkJY2xlYXJfYml0KElNWE1DSV9QRU5EX0lSUV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCisJCXN0YXQgPSBNTUNfU1RBVFVTOworCQkvKgorCQkgKiBUaGlzIGlzIG5vdCByZXF1aXJlZCBpbiB0aGVvcnksIGJ1dCB0aGVyZSBpcyBjaGFuY2UgdG8gbWlzcyBzb21lIGZsYWcKKwkJICogd2hpY2ggY2xlYXJzIGF1dG9tYXRpY2FsbHkgYnkgbWFzayB3cml0ZSwgRnJlZVNjYWxlIG9yaWdpbmFsIGNvZGUga2VlcHMKKwkJICogc3RhdCBmcm9tIElSUSB0aW1lIHNvIGRvIEkKKwkJICovCisJCXN0YXQgfD0gaG9zdC0+c3RhdHVzX3JlZzsKKworCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgeworCQkJaW14bWNpX2J1c3lfd2FpdF9mb3Jfc3RhdHVzKGhvc3QsICZzdGF0LAorCQkJCQlTVEFUVVNfRU5EX0NNRF9SRVNQIHwgU1RBVFVTX0VSUl9NQVNLLAorCQkJCQkyMCwgImlteG1jaV90YXNrbGV0X2ZuYyByZXNwIChFUlJBVFVNICM0KSIpOworCQl9CisKKwkJaWYoc3RhdCAmIChTVEFUVVNfRU5EX0NNRF9SRVNQIHwgU1RBVFVTX0VSUl9NQVNLKSkgeworCQkJaWYodGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJCWlteG1jaV9jbWRfZG9uZShob3N0LCBzdGF0KTsKKwkJCWlmKGhvc3QtPmRhdGEgJiYgKHN0YXQgJiBTVEFUVVNfRVJSX01BU0spKQorCQkJCWlteG1jaV9kYXRhX2RvbmUoaG9zdCwgc3RhdCk7CisJCX0KKworCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9DUFVfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisJCQlzdGF0IHw9IE1NQ19TVEFUVVM7CisJCQlpZihpbXhtY2lfY3B1X2RyaXZlbl9kYXRhKGhvc3QsICZzdGF0KSl7CisJCQkJaWYodGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJCQlpbXhtY2lfY21kX2RvbmUoaG9zdCwgc3RhdCk7CisJCQkJYXRvbWljX2NsZWFyX21hc2soSU1YTUNJX1BFTkRfSVJRX218SU1YTUNJX1BFTkRfQ1BVX0RBVEFfbSwKKwkJCQkJCQkmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCQkJCWlteG1jaV9kYXRhX2RvbmUoaG9zdCwgc3RhdCk7CisJCQl9CisJCX0KKwl9CisKKwlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykgJiYKKwkgICAhdGVzdF9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKworCQlzdGF0ID0gTU1DX1NUQVRVUzsKKwkJLyogU2FtZSBhcyBhYm92ZSAqLworCQlzdGF0IHw9IGhvc3QtPnN0YXR1c19yZWc7CisKKwkJaWYoaG9zdC0+ZG1hX2RpciA9PSBETUFfVE9fREVWSUNFKSB7CisJCQlkYXRhX2Rpcl9tYXNrID0gU1RBVFVTX1dSSVRFX09QX0RPTkU7CisJCX0gZWxzZSB7CisJCQlkYXRhX2Rpcl9tYXNrID0gU1RBVFVTX0RBVEFfVFJBTlNfRE9ORTsKKwkJfQorCisJCWlmKHN0YXQgJiBkYXRhX2Rpcl9tYXNrKSB7CisJCQljbGVhcl9iaXQoSU1YTUNJX1BFTkRfRE1BX0VORF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCQkJaW14bWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKKwkJfQorCX0KKworCWlmKHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9DQVJEX1hDSEdfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgeworCisJCWlmKGhvc3QtPmNtZCkKKwkJCWlteG1jaV9jbWRfZG9uZShob3N0LCBTVEFUVVNfVElNRV9PVVRfUkVTUCk7CisKKwkJaWYoaG9zdC0+ZGF0YSkKKwkJCWlteG1jaV9kYXRhX2RvbmUoaG9zdCwgU1RBVFVTX1RJTUVfT1VUX1JFQUQgfAorCQkJCQkgU1RBVFVTX0NSQ19SRUFEX0VSUiB8IFNUQVRVU19DUkNfV1JJVEVfRVJSKTsKKworCQlpZihob3N0LT5yZXEpCisJCQlpbXhtY2lfZmluaXNoX3JlcXVlc3QoaG9zdCwgaG9zdC0+cmVxKTsKKworCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlteG1jaV9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXVuc2lnbmVkIGludCBjbWRhdDsKKworCVdBUk5fT04oaG9zdC0+cmVxICE9IE5VTEwpOworCisJaG9zdC0+cmVxID0gcmVxOworCisJY21kYXQgPSAwOworCisJaWYgKHJlcS0+ZGF0YSkgeworCQlpbXhtY2lfc2V0dXBfZGF0YShob3N0LCByZXEtPmRhdGEpOworCisJCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9EQVRBX0VOQUJMRTsKKworCQlpZiAocmVxLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJY21kYXQgfD0gQ01EX0RBVF9DT05UX1dSSVRFOworCisJCWlmIChyZXEtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfU1RSRUFNKSB7CisJCQljbWRhdCB8PSBDTURfREFUX0NPTlRfU1RSRUFNX0JMT0NLOworCQl9CisJfQorCisJaW14bWNpX3N0YXJ0X2NtZChob3N0LCByZXEtPmNtZCwgY21kYXQpOworfQorCisjZGVmaW5lIENMS19SQVRFIDE5MjAwMDAwCisKK3N0YXRpYyB2b2lkIGlteG1jaV9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IHByZXNjYWxlcjsKKworCWlmKCBpb3MtPmJ1c193aWR0aD09TU1DX0JVU19XSURUSF80ICkgeworCQlob3N0LT5hY3R1YWxfYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF80OworCQlpbXhfZ3Bpb19tb2RlKFBCMTFfUEZfU0RfREFUMyk7CisJfWVsc2V7CisJCWhvc3QtPmFjdHVhbF9idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzE7CisJCWlteF9ncGlvX21vZGUoR1BJT19QT1JUQiB8IEdQSU9fSU4gfCBHUElPX1BVRU4gfCAxMSk7CisJfQorCisJaWYgKCBob3N0LT5wb3dlcl9tb2RlICE9IGlvcy0+cG93ZXJfbW9kZSApIHsKKwkJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKKwkJY2FzZSBNTUNfUE9XRVJfT0ZGOgorICAgICAgICAJCWJyZWFrOworCQljYXNlIE1NQ19QT1dFUl9VUDoKKwkJCXNldF9iaXQoSU1YTUNJX1BFTkRfU0VUX0lOSVRfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKyAgICAgICAgCQlicmVhazsKKwkJY2FzZSBNTUNfUE9XRVJfT046CisgICAgICAgIAkJYnJlYWs7CisJCX0KKwkJaG9zdC0+cG93ZXJfbW9kZSA9IGlvcy0+cG93ZXJfbW9kZTsKKwl9CisKKwlpZiAoIGlvcy0+Y2xvY2sgKSB7CisJCXVuc2lnbmVkIGludCBjbGs7CisKKwkJLyogVGhlIHByZXNjYWxlciBpcyA1IGZvciBQRVJDTEsyIGVxdWFsIHRvIDk2TUh6CisJCSAqIHRoZW4gOTZNSHogLyA1ID0gMTkuMiBNSHoKKwkJICovCisJCWNsaz1pbXhfZ2V0X3BlcmNsazIoKTsKKwkJcHJlc2NhbGVyPShjbGsrKENMS19SQVRFKjcpLzgpL0NMS19SQVRFOworCQlzd2l0Y2gocHJlc2NhbGVyKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOglwcmVzY2FsZXIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoJcHJlc2NhbGVyID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CXByZXNjYWxlciA9IDI7CisJCQlicmVhazsKKwkJY2FzZSA0OglwcmVzY2FsZXIgPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgNToJcHJlc2NhbGVyID0gNTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJQRVJDTEsyICVkIE1IeiAtPiBwcmVzY2FsZXIgJWRcbiIsCisJCQljbGssIHByZXNjYWxlcik7CisKKwkJZm9yKGNsaz0wOyBjbGs8ODsgY2xrKyspIHsKKwkJCWludCB4OworCQkJeCA9IENMS19SQVRFIC8gKDE8PGNsayk7CisJCQlpZiggeCA8PSBpb3MtPmNsb2NrKQorCQkJCWJyZWFrOworCQl9CisKKwkJTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX0VOQUJMRTsgLyogZW5hYmxlIGNvbnRyb2xsZXIgKi8KKworCQlpbXhtY2lfc3RvcF9jbG9jayhob3N0KTsKKwkJTU1DX0NMS19SQVRFID0gKHByZXNjYWxlcjw8MykgfCBjbGs7CisJCS8qCisJCSAqIFVuZGVyIG15IHVuZGVyc3RhbmRpbmcsIGNsb2NrIHNob3VsZCBub3QgYmUgc3RhcnRlZCB0aGVyZSwgYmVjYXVzZSBpdCB3b3VsZAorCQkgKiBpbml0aWF0ZSBTREhDIHNlcXVlbmNlciBhbmQgc2VuZCBsYXN0IG9yIHJhbmRvbSBjb21tYW5kIGludG8gY2FyZAorCQkgKi8KKwkJLyppbXhtY2lfc3RhcnRfY2xvY2soaG9zdCk7Ki8KKworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1NQ19DTEtfUkFURTogMHglMDh4XG4iLCBNTUNfQ0xLX1JBVEUpOworCX0gZWxzZSB7CisJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgaW14bWNpX29wcyA9IHsKKwkucmVxdWVzdAk9IGlteG1jaV9yZXF1ZXN0LAorCS5zZXRfaW9zCT0gaW14bWNpX3NldF9pb3MsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9kZXZpY2VfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbWFzaywgaW50IG5yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3Jlc291cmNlczsgaSsrKQorCQlpZiAoZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9PSBtYXNrICYmIG5yLS0gPT0gMCkKKwkJCXJldHVybiAmZGV2LT5yZXNvdXJjZVtpXTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybV9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IG5yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3Jlc291cmNlczsgaSsrKQorCQlpZiAoZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9PSBJT1JFU09VUkNFX0lSUSAmJiBuci0tID09IDApCisJCQlyZXR1cm4gZGV2LT5yZXNvdXJjZVtpXS5zdGFydDsKKwlyZXR1cm4gTk9fSVJROworfQorCitzdGF0aWMgdm9pZCBpbXhtY2lfY2hlY2tfc3RhdHVzKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSAoc3RydWN0IGlteG1jaV9ob3N0ICopZGF0YTsKKworCWlmKCBob3N0LT5wZGF0YS0+Y2FyZF9wcmVzZW50KCkgIT0gaG9zdC0+cHJlc2VudCApIHsKKwkJaG9zdC0+cHJlc2VudCBePSAxOworCQlkZXZfaW5mbyhtbWNfZGV2KGhvc3QtPm1tYyksICJjYXJkICVzXG4iLAorCQkgICAgICBob3N0LT5wcmVzZW50ID8gImluc2VydGVkIiA6ICJyZW1vdmVkIik7CisKKwkJc2V0X2JpdChJTVhNQ0lfUEVORF9DQVJEX1hDSEdfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7CisJfQorCisJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykgfHwKKwkgICB0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisJCWF0b21pY19pbmMoJmhvc3QtPnN0dWNrX3RpbWVvdXQpOworCQlpZihhdG9taWNfcmVhZCgmaG9zdC0+c3R1Y2tfdGltZW91dCkgPiA0KQorCQkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7CisJfSBlbHNlIHsKKwkJYXRvbWljX3NldCgmaG9zdC0+c3R1Y2tfdGltZW91dCwgMCk7CisKKwl9CisKKwltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgKEhaPj4xKSk7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IGlteG1jaV9ob3N0ICpob3N0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCA9IDAsIGlycTsKKworCXByaW50ayhLRVJOX0lORk8gImkuTVggbW1jIGRyaXZlclxuIik7CisKKwlyID0gcGxhdGZvcm1fZGV2aWNlX3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9kZXZpY2VfaXJxKHBkZXYsIDApOworCWlmICghciB8fCBpcnEgPT0gTk9fSVJRKQorCQlyZXR1cm4gLUVOWElPOworCisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgMHgxMDAsICJJTVhNQ0kiKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRUJVU1k7CisKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IGlteG1jaV9ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbW1jLT5vcHMgPSAmaW14bWNpX29wczsKKwltbWMtPmZfbWluID0gMTUwMDAwOworCW1tYy0+Zl9tYXggPSBDTEtfUkFURS8yOworCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMzsKKwltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworCisJLyogTU1DIGNvcmUgdHJhbnNmZXIgc2l6ZXMgdHVuYWJsZSBwYXJhbWV0ZXJzICovCisJbW1jLT5tYXhfaHdfc2VncyA9IDY0OworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDY0OworCW1tYy0+bWF4X3NlY3RvcnMgPSA2NDsJCS8qIGRlZmF1bHQgMSA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIDkpICovCisJbW1jLT5tYXhfc2VnX3NpemUgPSA2NCo1MTI7CS8qIGRlZmF1bHQgUEFHRV9DQUNIRV9TSVpFICovCisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5tbWMgPSBtbWM7CisJaG9zdC0+ZG1hX2FsbG9jYXRlZCA9IDA7CisJaG9zdC0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKKwlob3N0LT5yZXMgPSByOworCWhvc3QtPmlycSA9IGlycTsKKworCWlteF9ncGlvX21vZGUoUEI4X1BGX1NEX0RBVDApOworCWlteF9ncGlvX21vZGUoUEI5X1BGX1NEX0RBVDEpOworCWlteF9ncGlvX21vZGUoUEIxMF9QRl9TRF9EQVQyKTsKKwkvKiBDb25maWd1cmVkIGFzIEdQSU8gd2l0aCBwdWxsLXVwIHRvIGVuc3VyZSByaWdodCBNQ0MgY2FyZCBtb2RlICovCisJLyogU3dpdGNoZWQgdG8gUEIxMV9QRl9TRF9EQVQzIGlmIDQgYml0IGJ1cyBpcyBjb25maWd1cmVkICovCisJaW14X2dwaW9fbW9kZShHUElPX1BPUlRCIHwgR1BJT19JTiB8IEdQSU9fUFVFTiB8IDExKTsKKwkvKiBpbXhfZ3Bpb19tb2RlKFBCMTFfUEZfU0RfREFUMyk7ICovCisJaW14X2dwaW9fbW9kZShQQjEyX1BGX1NEX0NMSyk7CisJaW14X2dwaW9fbW9kZShQQjEzX1BGX1NEX0NNRCk7CisKKwlpbXhtY2lfc29mdHJlc2V0KCk7CisKKwlpZiAoIE1NQ19SRVZfTk8gIT0gMHgzOTAgKSB7CisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAid3JvbmcgcmV2Lm5vLiAweCUwOHguIGFib3J0aW5nLlxuIiwKKwkJICAgICAgICBNTUNfUkVWX05PKTsKKwkJZ290byBvdXQ7CisJfQorCisJTU1DX1JFQURfVE8gPSAweDJkYjQ7IC8qIHJlY29tbWVuZGVkIGluIGRhdGEgc2hlZXQgKi8KKworCWhvc3QtPmltYXNrID0gSU1YTUNJX0lOVF9NQVNLX0RFRkFVTFQ7CisJTU1DX0lOVF9NQVNLID0gaG9zdC0+aW1hc2s7CisKKworCWlmKGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKCZob3N0LT5kbWEsIERSSVZFUl9OQU1FLCBETUFfUFJJT19MT1cpPDApeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteF9kbWFfcmVxdWVzdF9ieV9wcmlvIGZhaWxlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCWhvc3QtPmRtYV9hbGxvY2F0ZWQ9MTsKKwlpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGhvc3QtPmRtYSwgaW14bWNpX2RtYV9pcnEsIE5VTEwsIGhvc3QpOworCisJdGFza2xldF9pbml0KCZob3N0LT50YXNrbGV0LCBpbXhtY2lfdGFza2xldF9mbmMsICh1bnNpZ25lZCBsb25nKWhvc3QpOworCWhvc3QtPnN0YXR1c19yZWc9MDsKKwlob3N0LT5wZW5kaW5nX2V2ZW50cz0wOworCisJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBpbXhtY2lfaXJxLCAwLCBEUklWRVJfTkFNRSwgaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlob3N0LT5wcmVzZW50ID0gaG9zdC0+cGRhdGEtPmNhcmRfcHJlc2VudCgpOworCWluaXRfdGltZXIoJmhvc3QtPnRpbWVyKTsKKwlob3N0LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zdDsKKwlob3N0LT50aW1lci5mdW5jdGlvbiA9IGlteG1jaV9jaGVja19zdGF0dXM7CisJYWRkX3RpbWVyKCZob3N0LT50aW1lcik7CisJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIChIWj4+MSkpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKworCW1tY19hZGRfaG9zdChtbWMpOworCisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAoaG9zdCkgeworCQlpZihob3N0LT5kbWFfYWxsb2NhdGVkKXsKKwkJCWlteF9kbWFfZnJlZShob3N0LT5kbWEpOworCQkJaG9zdC0+ZG1hX2FsbG9jYXRlZD0wOworCQl9CisJfQorCWlmIChtbWMpCisJCW1tY19mcmVlX2hvc3QobW1jKTsKKwlyZWxlYXNlX3Jlc291cmNlKHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14bWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWlmIChtbWMpIHsKKwkJc3RydWN0IGlteG1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCQl0YXNrbGV0X2Rpc2FibGUoJmhvc3QtPnRhc2tsZXQpOworCisJCWRlbF90aW1lcl9zeW5jKCZob3N0LT50aW1lcik7CisJCW1tY19yZW1vdmVfaG9zdChtbWMpOworCisJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisJCWlmKGhvc3QtPmRtYV9hbGxvY2F0ZWQpeworCQkJaW14X2RtYV9mcmVlKGhvc3QtPmRtYSk7CisJCQlob3N0LT5kbWFfYWxsb2NhdGVkPTA7CisJCX0KKworCQl0YXNrbGV0X2tpbGwoJmhvc3QtPnRhc2tsZXQpOworCisJCXJlbGVhc2VfcmVzb3VyY2UoaG9zdC0+cmVzKTsKKworCQltbWNfZnJlZV9ob3N0KG1tYyk7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGlteG1jaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtbWMpCisJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlteG1jaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3Q7CisJaW50IHJldCA9IDA7CisKKwlpZiAobW1jKSB7CisJCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCQlpZihob3N0KQorCQkJc2V0X2JpdChJTVhNQ0lfUEVORF9TRVRfSU5JVF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCQlyZXQgPSBtbWNfcmVzdW1lX2hvc3QobW1jKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2Vsc2UKKyNkZWZpbmUgaW14bWNpX3N1c3BlbmQgIE5VTEwKKyNkZWZpbmUgaW14bWNpX3Jlc3VtZSAgIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14bWNpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gaW14bWNpX3Byb2JlLAorCS5yZW1vdmUJCT0gaW14bWNpX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGlteG1jaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gaW14bWNpX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW14bWNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbXhtY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteG1jaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlteG1jaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpbXhtY2lfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhtY2lfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaW14bW1jLmggYi9kcml2ZXJzL21tYy9pbXhtbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMzOWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaW14bW1jLmgKQEAgLTAsMCArMSw2NyBAQAorCisjIGRlZmluZSBfX1JFRzE2KHgpCSgqKCh2b2xhdGlsZSB1MTYgKilJT19BRERSRVNTKHgpKSkKKworI2RlZmluZSBNTUNfU1RSX1NUUF9DTEsgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgwMCkKKyNkZWZpbmUgTU1DX1NUQVRVUyAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MDQpCisjZGVmaW5lIE1NQ19DTEtfUkFURSAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDA4KQorI2RlZmluZSBNTUNfQ01EX0RBVF9DT05UIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgwQykKKyNkZWZpbmUgTU1DX1JFU19UTyAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MTApCisjZGVmaW5lIE1NQ19SRUFEX1RPICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDE0KQorI2RlZmluZSBNTUNfQkxLX0xFTiAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgxOCkKKyNkZWZpbmUgTU1DX05PQiAgICAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MUMpCisjZGVmaW5lIE1NQ19SRVZfTk8gICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDIwKQorI2RlZmluZSBNTUNfSU5UX01BU0sgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgyNCkKKyNkZWZpbmUgTU1DX0NNRCAgICAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MjgpCisjZGVmaW5lIE1NQ19BUkdIICAgICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDJDKQorI2RlZmluZSBNTUNfQVJHTCAgICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgzMCkKKyNkZWZpbmUgTU1DX1JFU19GSUZPICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MzQpCisjZGVmaW5lIE1NQ19CVUZGRVJfQUNDRVNTIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgzOCkKKyNkZWZpbmUgTU1DX0JVRkZFUl9BQ0NFU1NfT0ZTIDB4MzgKKworCisjZGVmaW5lIFNUUl9TVFBfQ0xLX0VORElBTiAgICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIFNUUl9TVFBfQ0xLX1JFU0VUICAgICAgICAgICAgICAgKDE8PDMpCisjZGVmaW5lIFNUUl9TVFBfQ0xLX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIFNUUl9TVFBfQ0xLX1NUQVJUX0NMSyAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIFNUUl9TVFBfQ0xLX1NUT1BfQ0xLICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIFNUQVRVU19DQVJEX1BSRVNFTkNFICAgICAgICAgICAgKDE8PDE1KQorI2RlZmluZSBTVEFUVVNfU0RJT19JTlRfQUNUSVZFICAgICAgICAgICgxPDwxNCkKKyNkZWZpbmUgU1RBVFVTX0VORF9DTURfUkVTUCAgICAgICAgICAgICAoMTw8MTMpCisjZGVmaW5lIFNUQVRVU19XUklURV9PUF9ET05FICAgICAgICAgICAgKDE8PDEyKQorI2RlZmluZSBTVEFUVVNfREFUQV9UUkFOU19ET05FICAgICAgICAgICgxPDwxMSkKKyNkZWZpbmUgU1RBVFVTX1dSX0NSQ19FUlJPUl9DT0RFX01BU0sgICAoMzw8MTApCisjZGVmaW5lIFNUQVRVU19DQVJEX0JVU19DTEtfUlVOICAgICAgICAgKDE8PDgpCisjZGVmaW5lIFNUQVRVU19BUFBMX0JVRkZfRkYgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIFNUQVRVU19BUFBMX0JVRkZfRkUgICAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIFNUQVRVU19SRVNQX0NSQ19FUlIgICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIFNUQVRVU19DUkNfUkVBRF9FUlIgICAgICAgICAgICAgKDE8PDMpCisjZGVmaW5lIFNUQVRVU19DUkNfV1JJVEVfRVJSICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIFNUQVRVU19USU1FX09VVF9SRVNQICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIFNUQVRVU19USU1FX09VVF9SRUFEICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIFNUQVRVU19FUlJfTUFTSyAgICAgICAgICAgICAgICAgMHgyZgorI2RlZmluZSBDTEtfUkFURV9QUkVTQ0FMRVIoeCkgICAgICAgICAgICgoeCkgJiAweDcpCisjZGVmaW5lIENMS19SQVRFX0NMS19SQVRFKHgpICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDMpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9DTURfUkVTUF9MT05HX09GRiAgKDE8PDEyKQorI2RlZmluZSBDTURfREFUX0NPTlRfU1RPUF9SRUFEV0FJVCAgICAgICgxPDwxMSkKKyNkZWZpbmUgQ01EX0RBVF9DT05UX1NUQVJUX1JFQURXQUlUICAgICAoMTw8MTApCisjZGVmaW5lIENNRF9EQVRfQ09OVF9CVVNfV0lEVEhfMSAgICAgICAgKDA8PDgpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9CVVNfV0lEVEhfNCAgICAgICAgKDI8PDgpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9JTklUICAgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9CVVNZICAgICAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9TVFJFQU1fQkxPQ0sgICAgICAgKDE8PDUpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9XUklURSAgICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9EQVRBX0VOQUJMRSAgICAgICAgKDE8PDMpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjEgKDEpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjIgKDIpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjMgKDMpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjQgKDQpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjUgKDUpCisjZGVmaW5lIENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjYgKDYpCisjZGVmaW5lIElOVF9NQVNLX0FVVE9fQ0FSRF9ERVRFQ1QgICAgICAgKDE8PDYpCisjZGVmaW5lIElOVF9NQVNLX0RBVDBfRU4gICAgICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIElOVF9NQVNLX1NESU8gICAgICAgICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIElOVF9NQVNLX0JVRl9SRUFEWSAgICAgICAgICAgICAgKDE8PDMpCisjZGVmaW5lIElOVF9NQVNLX0VORF9DTURfUkVTICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIElOVF9NQVNLX1dSSVRFX09QX0RPTkUgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIElOVF9NQVNLX0RBVEFfVFJBTiAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIElOVF9BTEwgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N2YpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWMuYyBiL2RyaXZlcnMvbW1jL21tYy5jCmluZGV4IGRhNmRkZDkuLjYyMDFmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL21tYy5jCkBAIC01OSwyMSArNTksMjMgQEAKIAogCiAvKioKLSAqCW1tY19yZXF1ZXN0X2RvbmUgLSBmaW5pc2ggcHJvY2Vzc2luZyBhbiBNTUMgY29tbWFuZAotICoJQGhvc3Q6IE1NQyBob3N0IHdoaWNoIGNvbXBsZXRlZCBjb21tYW5kCi0gKglAbXJxOiBNTUMgcmVxdWVzdCB3aGljaCBjb21wbGV0ZWQKKyAqCW1tY19yZXF1ZXN0X2RvbmUgLSBmaW5pc2ggcHJvY2Vzc2luZyBhbiBNTUMgcmVxdWVzdAorICoJQGhvc3Q6IE1NQyBob3N0IHdoaWNoIGNvbXBsZXRlZCByZXF1ZXN0CisgKglAbXJxOiBNTUMgcmVxdWVzdCB3aGljaCByZXF1ZXN0CiAgKgogICoJTU1DIGRyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZXkgaGF2ZSBjb21wbGV0ZWQKLSAqCXRoZWlyIHByb2Nlc3Npbmcgb2YgYSBjb21tYW5kLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUKLSAqCWRhdGEgcGFydCBvZiB0aGUgY29tbWFuZCBoYXMgY29tcGxldGVkLgorICoJdGhlaXIgcHJvY2Vzc2luZyBvZiBhIHJlcXVlc3QuCiAgKi8KIHZvaWQgbW1jX3JlcXVlc3RfZG9uZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQogewogCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gbXJxLT5jbWQ7Ci0JaW50IGVyciA9IG1ycS0+Y21kLT5lcnJvcjsKLQlwcl9kZWJ1ZygiTU1DOiByZXEgZG9uZSAoJTAyeCk6ICVkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkgY21kLT5vcGNvZGUsIGVyciwgY21kLT5yZXNwWzBdLCBjbWQtPnJlc3BbMV0sCi0JCSBjbWQtPnJlc3BbMl0sIGNtZC0+cmVzcFszXSk7CisJaW50IGVyciA9IGNtZC0+ZXJyb3I7CisKKwlwcl9kZWJ1ZygiJXM6IHJlcSBkb25lIChDTUQldSk6ICVkLyVkLyVkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBjbWQtPm9wY29kZSwgZXJyLAorCQkgbXJxLT5kYXRhID8gbXJxLT5kYXRhLT5lcnJvciA6IDAsCisJCSBtcnEtPnN0b3AgPyBtcnEtPnN0b3AtPmVycm9yIDogMCwKKwkJIGNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sIGNtZC0+cmVzcFszXSk7CiAKIAlpZiAoZXJyICYmIGNtZC0+cmV0cmllcykgewogCQljbWQtPnJldHJpZXMtLTsKQEAgLTk3LDggKzk5LDkgQEAKIHZvaWQKIG1tY19zdGFydF9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7Ci0JcHJfZGVidWcoIk1NQzogc3RhcnRpbmcgY21kICUwMnggYXJnICUwOHggZmxhZ3MgJTA4eFxuIiwKLQkJIG1ycS0+Y21kLT5vcGNvZGUsIG1ycS0+Y21kLT5hcmcsIG1ycS0+Y21kLT5mbGFncyk7CisJcHJfZGVidWcoIiVzOiBzdGFydGluZyBDTUQldSBhcmcgJTA4eCBmbGFncyAlMDh4XG4iLAorCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBtcnEtPmNtZC0+b3Bjb2RlLAorCQkgbXJxLT5jbWQtPmFyZywgbXJxLT5jbWQtPmZsYWdzKTsKIAogCVdBUk5fT04oaG9zdC0+Y2FyZF9idXN5ID09IE5VTEwpOwogCkBAIC0zMTIsNiArMzE1LDE4IEBACiAKIEVYUE9SVF9TWU1CT0wobW1jX3JlbGVhc2VfaG9zdCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19pb3MgKmlvcyA9ICZob3N0LT5pb3M7CisKKwlwcl9kZWJ1ZygiJXM6IGNsb2NrICV1SHogYnVzbW9kZSAldSBwb3dlcm1vZGUgJXUgY3MgJXUgVmRkICV1IHdpZHRoICV1XG4iLAorCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLAorCQkgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPmNoaXBfc2VsZWN0LCBpb3MtPnZkZCwKKwkJIGlvcy0+YnVzX3dpZHRoKTsKKwkKKwlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgaW9zKTsKK30KKwogc3RhdGljIGludCBtbWNfc2VsZWN0X2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJaW50IGVycjsKQEAgLTM2NCw3ICszNzksNyBAQAogCQl9CiAJfQogCi0JaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsICZob3N0LT5pb3MpOworCW1tY19zZXRfaW9zKGhvc3QpOwogCiAJcmV0dXJuIE1NQ19FUlJfTk9ORTsKIH0KQEAgLTQxNSw3ICs0MzAsNyBAQAogCQlvY3IgPSAzIDw8IGJpdDsKIAogCQlob3N0LT5pb3MudmRkID0gYml0OwotCQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJCW1tY19zZXRfaW9zKGhvc3QpOwogCX0gZWxzZSB7CiAJCW9jciA9IDA7CiAJfQpAQCAtNTQ5LDYgKzU2NCw3IEBACiAJCWNzZC0+cmVhZF9wYXJ0aWFsID0gVU5TVFVGRl9CSVRTKHJlc3AsIDc5LCAxKTsKIAkJY3NkLT53cml0ZV9taXNhbGlnbiA9IFVOU1RVRkZfQklUUyhyZXNwLCA3OCwgMSk7CiAJCWNzZC0+cmVhZF9taXNhbGlnbiA9IFVOU1RVRkZfQklUUyhyZXNwLCA3NywgMSk7CisJCWNzZC0+cjJ3X2ZhY3RvciA9IFVOU1RVRkZfQklUUyhyZXNwLCAyNiwgMyk7CiAJCWNzZC0+d3JpdGVfYmxrYml0cyA9IFVOU1RVRkZfQklUUyhyZXNwLCAyMiwgNCk7CiAJCWNzZC0+d3JpdGVfcGFydGlhbCA9IFVOU1RVRkZfQklUUyhyZXNwLCAyMSwgMSk7CiAJfSBlbHNlIHsKQEAgLTU4Myw2ICs1OTksNyBAQAogCQljc2QtPnJlYWRfcGFydGlhbCA9IFVOU1RVRkZfQklUUyhyZXNwLCA3OSwgMSk7CiAJCWNzZC0+d3JpdGVfbWlzYWxpZ24gPSBVTlNUVUZGX0JJVFMocmVzcCwgNzgsIDEpOwogCQljc2QtPnJlYWRfbWlzYWxpZ24gPSBVTlNUVUZGX0JJVFMocmVzcCwgNzcsIDEpOworCQljc2QtPnIyd19mYWN0b3IgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjYsIDMpOwogCQljc2QtPndyaXRlX2Jsa2JpdHMgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjIsIDQpOwogCQljc2QtPndyaXRlX3BhcnRpYWwgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjEsIDEpOwogCX0KQEAgLTY2Niw3ICs2ODMsNyBAQAogCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQ7CiAKIAlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfSElHSDsKLQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJbW1jX3NldF9pb3MoaG9zdCk7CiAKIAltbWNfZGVsYXkoMSk7CiAKQEAgLTY3OSw3ICs2OTYsNyBAQAogCW1tY19kZWxheSgxKTsKIAogCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKLQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJbW1jX3NldF9pb3MoaG9zdCk7CiAKIAltbWNfZGVsYXkoMSk7CiB9CkBAIC03MDQsMTMgKzcyMSwxMyBAQAogCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKIAlob3N0LT5pb3MucG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9VUDsKIAlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwotCWhvc3QtPm9wcy0+c2V0X2lvcyhob3N0LCAmaG9zdC0+aW9zKTsKKwltbWNfc2V0X2lvcyhob3N0KTsKIAogCW1tY19kZWxheSgxKTsKIAogCWhvc3QtPmlvcy5jbG9jayA9IGhvc3QtPmZfbWluOwogCWhvc3QtPmlvcy5wb3dlcl9tb2RlID0gTU1DX1BPV0VSX09OOwotCWhvc3QtPm9wcy0+c2V0X2lvcyhob3N0LCAmaG9zdC0+aW9zKTsKKwltbWNfc2V0X2lvcyhob3N0KTsKIAogCW1tY19kZWxheSgyKTsKIH0KQEAgLTcyMyw3ICs3NDAsNyBAQAogCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ET05UQ0FSRTsKIAlob3N0LT5pb3MucG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9PRkY7CiAJaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKLQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJbW1jX3NldF9pb3MoaG9zdCk7CiB9CiAKIHN0YXRpYyBpbnQgbW1jX3NlbmRfb3BfY29uZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IsIHUzMiAqcm9jcikKQEAgLTkzNCw2ICs5NTEsNyBAQAogCQlkYXRhLnRpbWVvdXRfbnMgPSBjYXJkLT5jc2QudGFjY19ucyAqIDEwOwogCQlkYXRhLnRpbWVvdXRfY2xrcyA9IGNhcmQtPmNzZC50YWNjX2Nsa3MgKiAxMDsKIAkJZGF0YS5ibGtzel9iaXRzID0gMzsKKwkJZGF0YS5ibGtzeiA9IDEgPDwgMzsKIAkJZGF0YS5ibG9ja3MgPSAxOwogCQlkYXRhLmZsYWdzID0gTU1DX0RBVEFfUkVBRDsKIAkJZGF0YS5zZyA9ICZzZzsKQEAgLTk3MSw3ICs5ODksOCBAQAogCQlpZiAoIW1tY19jYXJkX2RlYWQoY2FyZCkgJiYgbWF4X2R0ciA+IGNhcmQtPmNzZC5tYXhfZHRyKQogCQkJbWF4X2R0ciA9IGNhcmQtPmNzZC5tYXhfZHRyOwogCi0JcHJfZGVidWcoIk1NQzogc2VsZWN0ZWQgJWQuJTAzZE1IeiB0cmFuc2ZlciByYXRlXG4iLAorCXByX2RlYnVnKCIlczogc2VsZWN0ZWQgJWQuJTAzZE1IeiB0cmFuc2ZlciByYXRlXG4iLAorCQkgbW1jX2hvc3RuYW1lKGhvc3QpLAogCQkgbWF4X2R0ciAvIDEwMDAwMDAsIChtYXhfZHRyIC8gMTAwMCkgJSAxMDAwKTsKIAogCXJldHVybiBtYXhfZHRyOwpAQCAtMTA0Niw3ICsxMDY1LDcgQEAKIAl9IGVsc2UgewogCQlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9PUEVORFJBSU47CiAJCWhvc3QtPmlvcy5jbG9jayA9IGhvc3QtPmZfbWluOwotCQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJCW1tY19zZXRfaW9zKGhvc3QpOwogCiAJCS8qCiAJCSAqIFdlIHNob3VsZCByZW1lbWJlciB0aGUgT0NSIG1hc2sgZnJvbSB0aGUgZXhpc3RpbmcKQEAgLTEwODIsNyArMTEwMSw3IEBACiAJICogT2ssIG5vdyBzd2l0Y2ggdG8gcHVzaC1wdWxsIG1vZGUuCiAJICovCiAJaG9zdC0+aW9zLmJ1c19tb2RlID0gTU1DX0JVU01PREVfUFVTSFBVTEw7Ci0JaG9zdC0+b3BzLT5zZXRfaW9zKGhvc3QsICZob3N0LT5pb3MpOworCW1tY19zZXRfaW9zKGhvc3QpOwogCiAJbW1jX3JlYWRfY3Nkcyhob3N0KTsKIApAQCAtMTEyOCw3ICsxMTQ3LDcgQEAKIAkJICogYXR0YWNoZWQgY2FyZHMgYW5kIHRoZSBob3N0IHN1cHBvcnQuCiAJCSAqLwogCQlob3N0LT5pb3MuY2xvY2sgPSBtbWNfY2FsY3VsYXRlX2Nsb2NrKGhvc3QpOwotCQlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgJmhvc3QtPmlvcyk7CisJCW1tY19zZXRfaW9zKGhvc3QpOwogCX0KIAogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWNfYmxvY2suYyBiL2RyaXZlcnMvbW1jL21tY19ibG9jay5jCmluZGV4IDhlYjJhMmUuLjU4NzQ1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL21tY19ibG9jay5jCisrKyBiL2RyaXZlcnMvbW1jL21tY19ibG9jay5jCkBAIC0xNzUsNiArMTc1LDcgQEAKIAkJYnJxLmRhdGEudGltZW91dF9ucyA9IGNhcmQtPmNzZC50YWNjX25zICogMTA7CiAJCWJycS5kYXRhLnRpbWVvdXRfY2xrcyA9IGNhcmQtPmNzZC50YWNjX2Nsa3MgKiAxMDsKIAkJYnJxLmRhdGEuYmxrc3pfYml0cyA9IG1kLT5ibG9ja19iaXRzOworCQlicnEuZGF0YS5ibGtzeiA9IDEgPDwgbWQtPmJsb2NrX2JpdHM7CiAJCWJycS5kYXRhLmJsb2NrcyA9IHJlcS0+bnJfc2VjdG9ycyA+PiAobWQtPmJsb2NrX2JpdHMgLSA5KTsKIAkJYnJxLnN0b3Aub3Bjb2RlID0gTU1DX1NUT1BfVFJBTlNNSVNTSU9OOwogCQlicnEuc3RvcC5hcmcgPSAwOwpAQCAtMTg3LDYgKzE4OCwxMiBAQAogCQkJYnJxLmNtZC5vcGNvZGUgPSBNTUNfV1JJVEVfQkxPQ0s7CiAJCQlicnEuZGF0YS5mbGFncyB8PSBNTUNfREFUQV9XUklURTsKIAkJCWJycS5kYXRhLmJsb2NrcyA9IDE7CisKKwkJCS8qCisJCQkgKiBTY2FsZSB1cCB0aGUgdGltZW91dCBieSB0aGUgcjJ3IGZhY3RvcgorCQkJICovCisJCQlicnEuZGF0YS50aW1lb3V0X25zIDw8PSBjYXJkLT5jc2QucjJ3X2ZhY3RvcjsKKwkJCWJycS5kYXRhLnRpbWVvdXRfY2xrcyA8PD0gY2FyZC0+Y3NkLnIyd19mYWN0b3I7CiAJCX0KIAogCQlpZiAoYnJxLmRhdGEuYmxvY2tzID4gMSkgewpAQCAtMzQ2LDcgKzM1Myw3IEBACiAJCQkgKi8KIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBzZWxlY3QgYmxvY2sgc2l6ZSBmb3IgIgogCQkJCSJ3cml0aW5nIChyYiV1IHdiJXUgcnAldSB3cCV1KVxuIiwKLQkJCQltZC0+ZGlzay0+ZGlza19uYW1lLAorCQkJCW1tY19jYXJkX2lkKGNhcmQpLAogCQkJCTEgPDwgY2FyZC0+Y3NkLnJlYWRfYmxrYml0cywKIAkJCQkxIDw8IGNhcmQtPmNzZC53cml0ZV9ibGtiaXRzLAogCQkJCWNhcmQtPmNzZC5yZWFkX3BhcnRpYWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWNpLmMgYi9kcml2ZXJzL21tYy9tbWNpLmMKaW5kZXggZGY3ZTg2MWUuLmRhOGU0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL21tY2kuYworKysgYi9kcml2ZXJzL21tYy9tbWNpLmMKQEAgLTQwMiw5ICs0MDIsNiBAQAogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXUzMiBjbGsgPSAwLCBwd3IgPSAwOwogCi0JREJHKGhvc3QsICJjbG9jayAldUh6IGJ1c21vZGUgJXUgcG93ZXJtb2RlICV1IFZkZCAldVxuIiwKLQkgICAgaW9zLT5jbG9jaywgaW9zLT5idXNfbW9kZSwgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPnZkZCk7Ci0KIAlpZiAoaW9zLT5jbG9jaykgewogCQlpZiAoaW9zLT5jbG9jayA+PSBob3N0LT5tY2xrKSB7CiAJCQljbGsgPSBNQ0lfQ0xLX0JZUEFTUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKaW5kZXggZWI5YTg4Mi4uYjQ5MzY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKQEAgLTY1LDExICs2NSw2IEBACiAJdW5zaWduZWQgaW50CQlkbWFfZGlyOwogfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnNfdG9fY2xvY2tzKHVuc2lnbmVkIGludCBucykKLXsKLQlyZXR1cm4gKG5zICogKENMT0NLUkFURSAvIDEwMDAwMDApICsgOTk5KSAvIDEwMDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHB4YW1jaV9zdG9wX2Nsb2NrKHN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCkKIHsKIAlpZiAocmVhZGwoaG9zdC0+YmFzZSArIE1NQ19TVEFUKSAmIFNUQVRfQ0xLX0VOKSB7CkBAIC0xMTMsNiArMTA4LDcgQEAKIHN0YXRpYyB2b2lkIHB4YW1jaV9zZXR1cF9kYXRhKHN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGludCBub2IgPSBkYXRhLT5ibG9ja3M7CisJdW5zaWduZWQgbG9uZyBsb25nIGNsa3M7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJdTMyIGRjbWQ7CiAJaW50IGk7CkBAIC0xMjMsOSArMTE5LDExIEBACiAJCW5vYiA9IDB4ZmZmZjsKIAogCXdyaXRlbChub2IsIGhvc3QtPmJhc2UgKyBNTUNfTk9CKTsKLQl3cml0ZWwoMSA8PCBkYXRhLT5ibGtzel9iaXRzLCBob3N0LT5iYXNlICsgTU1DX0JMS0xFTik7CisJd3JpdGVsKGRhdGEtPmJsa3N6LCBob3N0LT5iYXNlICsgTU1DX0JMS0xFTik7CiAKLQl0aW1lb3V0ID0gbnNfdG9fY2xvY2tzKGRhdGEtPnRpbWVvdXRfbnMpICsgZGF0YS0+dGltZW91dF9jbGtzOworCWNsa3MgPSAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEtPnRpbWVvdXRfbnMgKiBDTE9DS1JBVEU7CisJZG9fZGl2KGNsa3MsIDEwMDAwMDAwMDBVTCk7CisJdGltZW91dCA9ICh1bnNpZ25lZCBpbnQpY2xrcyArIChkYXRhLT50aW1lb3V0X2Nsa3MgPDwgaG9zdC0+Y2xrcnQpOwogCXdyaXRlbCgodGltZW91dCArIDI1NSkgLyAyNTYsIGhvc3QtPmJhc2UgKyBNTUNfUkRUTyk7CiAKIAlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CkBAIC0yMDAsNyArMTk4LDYgQEAKIAogc3RhdGljIHZvaWQgcHhhbWNpX2ZpbmlzaF9yZXF1ZXN0KHN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7Ci0JcHJfZGVidWcoIlBYQU1DSTogcmVxdWVzdCBkb25lXG4iKTsKIAlob3N0LT5tcnEgPSBOVUxMOwogCWhvc3QtPmNtZCA9IE5VTEw7CiAJaG9zdC0+ZGF0YSA9IE5VTEw7CkBAIC0yODYsMTQgKzI4MywxNCBAQAogCSAqIGRhdGEgYmxvY2tzIGFzIGJlaW5nIGluIGVycm9yLgogCSAqLwogCWlmIChkYXRhLT5lcnJvciA9PSBNTUNfRVJSX05PTkUpCi0JCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyA8PCBkYXRhLT5ibGtzel9iaXRzOworCQlkYXRhLT5ieXRlc194ZmVyZWQgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKIAllbHNlCiAJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IDA7CiAKIAlweGFtY2lfZGlzYWJsZV9pcnEoaG9zdCwgREFUQV9UUkFOX0RPTkUpOwogCiAJaG9zdC0+ZGF0YSA9IE5VTEw7Ci0JaWYgKGhvc3QtPm1ycS0+c3RvcCAmJiBkYXRhLT5lcnJvciA9PSBNTUNfRVJSX05PTkUpIHsKKwlpZiAoaG9zdC0+bXJxLT5zdG9wKSB7CiAJCXB4YW1jaV9zdG9wX2Nsb2NrKGhvc3QpOwogCQlweGFtY2lfc3RhcnRfY21kKGhvc3QsIGhvc3QtPm1ycS0+c3RvcCwgMCk7CiAJfSBlbHNlIHsKQEAgLTMxMSwxMiArMzA4LDEwIEBACiAKIAlpcmVnID0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ19JX1JFRyk7CiAKLQlwcl9kZWJ1ZygiUFhBTUNJOiBpcnEgJTA4eFxuIiwgaXJlZyk7Ci0KIAlpZiAoaXJlZykgewogCQl1bnNpZ25lZCBzdGF0ID0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ19TVEFUKTsKIAotCQlwcl9kZWJ1ZygiUFhBTUNJOiBzdGF0ICUwOHhcbiIsIHN0YXQpOworCQlwcl9kZWJ1ZygiUFhBTUNJOiBpcnEgJTA4eCBzdGF0ICUwOHhcbiIsIGlyZWcsIHN0YXQpOwogCiAJCWlmIChpcmVnICYgRU5EX0NNRF9SRVMpCiAJCQloYW5kbGVkIHw9IHB4YW1jaV9jbWRfZG9uZShob3N0LCBzdGF0KTsKQEAgLTM3MCwxMCArMzY1LDYgQEAKIHsKIAlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JcHJfZGVidWcoInB4YW1jaV9zZXRfaW9zOiBjbG9jayAldSBwb3dlciAldSB2ZGQgJXUuJTAydVxuIiwKLQkJIGlvcy0+Y2xvY2ssIGlvcy0+cG93ZXJfbW9kZSwgaW9zLT52ZGQgLyAxMDAsCi0JCSBpb3MtPnZkZCAlIDEwMCk7Ci0KIAlpZiAoaW9zLT5jbG9jaykgewogCQl1bnNpZ25lZCBpbnQgY2xrID0gQ0xPQ0tSQVRFIC8gaW9zLT5jbG9jazsKIAkJaWYgKENMT0NLUkFURSAvIGNsayA+IGlvcy0+Y2xvY2spCkBAIC0zOTksNyArMzkwLDcgQEAKIAkJCWhvc3QtPmNtZGF0IHw9IENNREFUX0lOSVQ7CiAJfQogCi0JcHJfZGVidWcoInB4YW1jaV9zZXRfaW9zOiBjbGtydCA9ICV4IGNtZGF0ID0gJXhcbiIsCisJcHJfZGVidWcoIlBYQU1DSTogY2xrcnQgPSAleCBjbWRhdCA9ICV4XG4iLAogCQkgaG9zdC0+Y2xrcnQsIGhvc3QtPmNtZGF0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKaW5kZXggYmRiZmNhMC4uYjAwNTMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9zZGhjaS5jCkBAIC01NzAsMTAgKzU3MCw2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCi0JREJHKCJjbG9jayAldUh6IGJ1c21vZGUgJXUgcG93ZXJtb2RlICV1IGNzICV1IFZkZCAldSB3aWR0aCAldVxuIiwKLQkgICAgIGlvcy0+Y2xvY2ssIGlvcy0+YnVzX21vZGUsIGlvcy0+cG93ZXJfbW9kZSwgaW9zLT5jaGlwX3NlbGVjdCwKLQkgICAgIGlvcy0+dmRkLCBpb3MtPmJ1c193aWR0aCk7Ci0KIAkvKgogCSAqIFJlc2V0IHRoZSBjaGlwIG9uIGVhY2ggcG93ZXIgb2ZmLgogCSAqIFNob3VsZCBjbGVhciBvdXQgYW55IHdlaXJkIHN0YXRlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3dic2QuYyBiL2RyaXZlcnMvbW1jL3dic2QuYwppbmRleCA1MTFmN2IwLi44MTY3MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy93YnNkLmMKKysrIGIvZHJpdmVycy9tbWMvd2JzZC5jCkBAIC02NjIsMTQgKzY2MiwxNCBAQAogCXVuc2lnbmVkIGxvbmcgZG1hZmxhZ3M7CiAKIAlEQkdGKCJibGtzeiAlMDR4IGJsa3MgJTA0eCBmbGFncyAlMDh4XG4iLAotCQkxIDw8IGRhdGEtPmJsa3N6X2JpdHMsIGRhdGEtPmJsb2NrcywgZGF0YS0+ZmxhZ3MpOworCQlkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5mbGFncyk7CiAJREJHRigidHNhYyAlZCBtcyBuc2FjICVkIGNsa1xuIiwKIAkJZGF0YS0+dGltZW91dF9ucyAvIDEwMDAwMDAsIGRhdGEtPnRpbWVvdXRfY2xrcyk7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSBzaXplLgogCSAqLwotCWhvc3QtPnNpemUgPSBkYXRhLT5ibG9ja3MgPDwgZGF0YS0+Ymxrc3pfYml0czsKKwlob3N0LT5zaXplID0gZGF0YS0+YmxvY2tzICogZGF0YS0+Ymxrc3o7CiAKIAkvKgogCSAqIENoZWNrIHRpbWVvdXQgdmFsdWVzIGZvciBvdmVyZmxvdy4KQEAgLTY5NiwxMiArNjk2LDEyIEBACiAJICogVHdvIGJ5dGVzIGFyZSBuZWVkZWQgZm9yIGVhY2ggZGF0YSBsaW5lLgogCSAqLwogCWlmIChob3N0LT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF8xKSB7Ci0JCWJsa3NpemUgPSAoMSA8PCBkYXRhLT5ibGtzel9iaXRzKSArIDI7CisJCWJsa3NpemUgPSBkYXRhLT5ibGtzeiArIDI7CiAKIAkJd2JzZF93cml0ZV9pbmRleChob3N0LCBXQlNEX0lEWF9QQlNNU0IsIChibGtzaXplID4+IDQpICYgMHhGMCk7CiAJCXdic2Rfd3JpdGVfaW5kZXgoaG9zdCwgV0JTRF9JRFhfUEJTTFNCLCBibGtzaXplICYgMHhGRik7CiAJfSBlbHNlIGlmIChob3N0LT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7Ci0JCWJsa3NpemUgPSAoMSA8PCBkYXRhLT5ibGtzel9iaXRzKSArIDIgKiA0OworCQlibGtzaXplID0gZGF0YS0+Ymxrc3ogKyAyICogNDsKIAogCQl3YnNkX3dyaXRlX2luZGV4KGhvc3QsIFdCU0RfSURYX1BCU01TQiwKIAkJCSgoYmxrc2l6ZSA+PiA0KSAmIDB4RjApIHwgV0JTRF9EQVRBX1dJRFRIKTsKQEAgLTkzMSwxMCArOTMxLDYgQEAKIAlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAl1OCBjbGssIHNldHVwLCBwd3I7CiAKLQlEQkdGKCJjbG9jayAldUh6IGJ1c21vZGUgJXUgcG93ZXJtb2RlICV1IGNzICV1IFZkZCAldSB3aWR0aCAldVxuIiwKLQkJaW9zLT5jbG9jaywgaW9zLT5idXNfbW9kZSwgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPmNoaXBfc2VsZWN0LAotCQlpb3MtPnZkZCwgaW9zLT5idXNfd2lkdGgpOwotCiAJc3Bpbl9sb2NrX2JoKCZob3N0LT5sb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwppbmRleCAwZjZiYjJlLi5hN2VjNTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKQEAgLTIwMCwyNyArMjAwLDYgQEAKIAkgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIG9uZSBvZiB0aG9zZSBjb21tYW5kIHNldHMsIHVzZWQgb24gY2hpcHMKIAkgIGluY2x1ZGluZyB0aGUgQU1EIEFtMjlMVjMyMC4KIAotY29uZmlnIE1URF9DRklfQU1EU1REX1JFVFJZCi0JaW50ICJSZXRyeSBmYWlsZWQgY29tbWFuZHMgKGVyYXNlL3Byb2dyYW0pIgotCWRlcGVuZHMgb24gTVREX0NGSV9BTURTVEQKLQlkZWZhdWx0ICIwIgotCWhlbHAKLQkgIFNvbWUgY2hpcHMsIHdoZW4gYXR0YWNoZWQgdG8gYSBzaGFyZWQgYnVzLCBkb24ndCBwcm9wZXJseSBmaWx0ZXIKLQkgIGJ1cyB0cmFmZmljIHRoYXQgaXMgZGVzdGluZWQgdG8gb3RoZXIgZGV2aWNlcy4gIFRoaXMgYnJva2VuCi0JICBiZWhhdmlvciBjYXVzZXMgZXJhc2UgYW5kIHByb2dyYW0gc2VxdWVuY2VzIHRvIGJlIGFib3J0ZWQgd2hlbgotCSAgdGhlIHNlcXVlbmNlcyBhcmUgbWl4ZWQgd2l0aCB0cmFmZmljIGZvciBvdGhlciBkZXZpY2VzLgotCi0JICBTU1Q0OUxGMDQwIChhbmQgcmVsYXRlZCkgY2hpcHMgYXJlIGtub3cgdG8gYmUgYnJva2VuLgotCi1jb25maWcgTVREX0NGSV9BTURTVERfUkVUUllfTUFYCi0JaW50ICJNYXggcmV0cmllcyBvZiBmYWlsZWQgY29tbWFuZHMgKGVyYXNlL3Byb2dyYW0pIgotCWRlcGVuZHMgb24gTVREX0NGSV9BTURTVERfUkVUUlkKLQlkZWZhdWx0ICIwIgotCWhlbHAKLQkgIElmIHlvdSBoYXZlIGFuIFNTVDQ5TEYwNDAgKG9yIHJlbGF0ZWQgY2hpcCkgdGhlbiB0aGlzIHZhbHVlIHNob3VsZAotCSAgYmUgc2V0IHRvIGF0IGxlYXN0IDEuICBUaGlzIGNhbiBhbHNvIGJlIGFkanVzdGVkIGF0IGRyaXZlciBsb2FkCi0JICB0aW1lIHdpdGggdGhlIHJldHJ5X2NtZF9tYXggbW9kdWxlIHBhcmFtZXRlci4KLQogY29uZmlnIE1URF9DRklfU1RBQQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBTVCAoQWR2YW5jZWQgQXJjaGl0ZWN0dXJlKSBmbGFzaCBjaGlwcyIKIAlkZXBlbmRzIG9uIE1URF9HRU5fUFJPQkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCBkZDYyOGNiLi43ZmFjNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC0xMjksOCArMTI5LDggQEAKIAkgIGFsbG9jYXRpbmcgc3BhY2UgZnJvbSBMaW51eCdzIGF2YWlsYWJsZSBtZW1vcnkuIE90aGVyd2lzZSwgbGVhdmUKIAkgIHRoaXMgc2V0IHRvIHplcm8uIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byBsZWF2ZSB0aGlzIGFzIHplcm8uCiAKLWNvbmZpZyBNVERfQkxLTVRECi0JdHJpc3RhdGUgIk1URCBlbXVsYXRpb24gdXNpbmcgYmxvY2sgZGV2aWNlIgorY29uZmlnIE1URF9CTE9DSzJNVEQKKwl0cmlzdGF0ZSAiTVREIHVzaW5nIGJsb2NrIGRldmljZSIKIAlkZXBlbmRzIG9uIE1URAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyBhIGJsb2NrIGRldmljZSB0byBhcHBlYXIgYXMgYW4gTVRELiBJdCB3b3VsZApAQCAtMTQxLDE1ICsxNDEsNiBAQAogCSAgVGVzdGluZyBNVEQgdXNlcnMgKGVnIEpGRlMyKSBvbiBsYXJnZSBtZWRpYSBhbmQgbWVkaWEgdGhhdCBtaWdodAogCSAgYmUgcmVtb3ZlZCBkdXJpbmcgYSB3cml0ZSAodXNpbmcgdGhlIGZsb3BweSBkcml2ZSkuCiAKLWNvbmZpZyBNVERfQkxPQ0syTVRECi0JdHJpc3RhdGUgIk1URCB1c2luZyBibG9jayBkZXZpY2UgKHJld3JpdGUpIgotCWRlcGVuZHMgb24gTVREICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhdCBNVERfQkxLTVREIGFib3ZlLCBidXQKLQkgIGV4cGVyaWVuY2VkIHNvbWUgaW50ZXJmYWNlIGNoYW5nZXMgcGx1cyBzZXJpb3VzIHNwZWVkdXBzLiAgSW4KLQkgIHRoZSBsb25nIHRlcm0sIGl0IHNob3VsZCByZXBsYWNlIE1URF9CTEtNVEQuICBSaWdodCBub3csIHlvdQotCSAgc2hvdWxkbid0IGVudHJ1c3QgaW1wb3J0YW50IGRhdGEgdG8gaXQgeWV0LgotCiBjb21tZW50ICJEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMiCiAKIGNvbmZpZyBNVERfRE9DMjAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKaW5kZXggN2M1ZWQyMS4uYjY1NzM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw2IEBACiBvYmotJChDT05GSUdfTVREX01TMDJOVikJKz0gbXMwMi1udi5vCiBvYmotJChDT05GSUdfTVREX01URFJBTSkJKz0gbXRkcmFtLm8KIG9iai0kKENPTkZJR19NVERfTEFSVCkJCSs9IGxhcnQubwotb2JqLSQoQ09ORklHX01URF9CTEtNVEQpCSs9IGJsa210ZC5vCiBvYmotJChDT05GSUdfTVREX0JMT0NLMk1URCkJKz0gYmxvY2sybXRkLm8KIG9iai0kKENPTkZJR19NVERfREFUQUZMQVNIKQkrPSBtdGRfZGF0YWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTTI1UDgwKQkrPSBtMjVwODAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxrbXRkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjJlMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibGttdGQuYworKysgL2Rldi9udWxsCkBAIC0xLDgxOSArMCwwIEBACi0vKgotICogJElkOiBibGttdGQuYyx2IDEuMjcgMjAwNS8xMS8wNyAxMToxNDoyNCBnbGVpeG5lciBFeHAgJAotICoKLSAqIGJsa210ZC5jIC0gdXNlIGEgYmxvY2sgZGV2aWNlIGFzIGEgZmFrZSBNVEQKLSAqCi0gKiBBdXRob3I6IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgU2ltb24gRXZhbnMKLSAqCi0gKiBMaWNlbmNlOiBHUEwKLSAqCi0gKiBIb3cgaXQgd29ya3M6Ci0gKglUaGUgZHJpdmVyIHVzZXMgcmF3L2lvIHRvIHJlYWQvd3JpdGUgdGhlIGRldmljZSBhbmQgdGhlIHBhZ2UKLSAqCWNhY2hlIHRvIGNhY2hlIGFjY2Vzcy4gV3JpdGVzIHVwZGF0ZSB0aGUgcGFnZSBjYWNoZSB3aXRoIHRoZQotICoJbmV3IGRhdGEgYW5kIG1hcmsgaXQgZGlydHkgYW5kIGFkZCB0aGUgcGFnZSBpbnRvIGEgQklPIHdoaWNoCi0gKglpcyB0aGVuIHdyaXR0ZW4gb3V0LgotICoKLSAqCUl0IGNhbiBiZSBsb2FkZWQgUmVhZC1Pbmx5IHRvIHByZXZlbnQgZXJhc2VzIGFuZCB3cml0ZXMgdG8gdGhlCi0gKgltZWRpdW0uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiYmxrbXRkOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJibGttdGQ6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGNyaXQoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0NSSVQgImJsa210ZDogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLQotCi0vKiBEZWZhdWx0IGVyYXNlIHNpemUgaW4gSywgYWx3YXlzIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKi8KLSNkZWZpbmUgQ09ORklHX01URF9CTEtERVZfRVJBU0VTSVpFICgxMjggPDwgMTApCS8qIDEyOEtpQiAqLwotI2RlZmluZSBWRVJTSU9OICIkUmV2aXNpb246IDEuMjcgJCIKLQotLyogSW5mbyBmb3IgdGhlIGJsb2NrIGRldmljZSAqLwotc3RydWN0IGJsa210ZF9kZXYgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpibGtkZXY7Ci0Jc3RydWN0IG10ZF9pbmZvIG10ZF9pbmZvOwotCXN0cnVjdCBtdXRleCB3cmJ1Zl9tdXRleDsKLX07Ci0KLQotLyogU3RhdGljIGluZm8gYWJvdXQgdGhlIE1URCwgdXNlZCBpbiBjbGVhbnVwX21vZHVsZSAqLwotc3RhdGljIExJU1RfSEVBRChibGttdGRfZGV2aWNlX2xpc3QpOwotCi0KLXN0YXRpYyB2b2lkIGJsa210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQotI2RlZmluZSBNQVhfREVWSUNFUyA0Ci0KLS8qIE1vZHVsZSBwYXJhbWV0ZXJzIHBhc3NlZCBieSBpbnNtb2QvbW9kcHJvYmUgKi8KLXN0YXRpYyBjaGFyICpkZXZpY2VbTUFYX0RFVklDRVNdOyAgICAvKiB0aGUgYmxvY2sgZGV2aWNlIHRvIHVzZSAqLwotc3RhdGljIGludCBlcmFzZXN6W01BWF9ERVZJQ0VTXTsgICAgIC8qIG9wdGlvbmFsIGRlZmF1bHQgZXJhc2Ugc2l6ZSAqLwotc3RhdGljIGludCByb1tNQVhfREVWSUNFU107ICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgb25seSBmbGFnICovCi1zdGF0aWMgaW50IHN5bmM7Ci0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU2ltb24gRXZhbnMgPHNwc2VAc2VjcmV0Lm9yZy51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRW11bGF0ZSBhbiBNVEQgdXNpbmcgYSBibG9jayBkZXZpY2UiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShkZXZpY2UsIGNoYXJwLCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGV2aWNlLCAiYmxvY2sgZGV2aWNlIHRvIHVzZSIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGVyYXNlc3osIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVyYXNlc3osICJvcHRpb25hbCBlcmFzZSBzaXplIHRvIHVzZSBpbiBLaUIuIGVnIDQ9NEtpQi4iKTsKLW1vZHVsZV9wYXJhbV9hcnJheShybywgYm9vbCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJvLCAiMT1SZWFkIG9ubHksIHdyaXRlcyBhbmQgZXJhc2VzIGNhdXNlIGVycm9ycyIpOwotbW9kdWxlX3BhcmFtKHN5bmMsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzeW5jLCAiMT1TeW5jaHJvbm91cyB3cml0ZXMiKTsKLQotCi0vKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEJJTyByZWFkcyAqLwotc3RhdGljIGludCBiaV9yZWFkX2NvbXBsZXRlKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKLXsKLQlpZiAoYmlvLT5iaV9zaXplKQotCQlyZXR1cm4gMTsKLQotCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiopYmlvLT5iaV9wcml2YXRlKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEJJTyB3cml0ZXMgKi8KLXN0YXRpYyBpbnQgYmlfd3JpdGVfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQotewotCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwotCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX3ZjbnQgLSAxOwotCi0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlpZighdXB0b2RhdGUpCi0JCWVycigiYmlfd3JpdGVfY29tcGxldGU6IG5vdCB1cHRvZGF0ZVxuIik7Ci0KLQlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKLQkJREVCVUcoMywgIkNsZWFuaW5nIHVwIHBhZ2UgJWxkXG4iLCBwYWdlLT5pbmRleCk7Ci0JCWlmICgtLWJ2ZWMgPj0gYmlvLT5iaV9pb192ZWMpCi0JCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKLQotCQlpZiAodXB0b2RhdGUpIHsKLQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJfSBlbHNlIHsKLQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCQl9Ci0JCWNsZWFyX3BhZ2VfZGlydHkocGFnZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JfSB3aGlsZSAoYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYyk7Ci0KLQljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24qKWJpby0+YmlfcHJpdmF0ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogcmVhZCBvbmUgcGFnZSBmcm9tIHRoZSBibG9jayBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgYmxrbXRkX3JlYWRwYWdlKHN0cnVjdCBibGttdGRfZGV2ICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmKFBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQlERUJVRygyLCAiYmxrbXRkOiByZWFkcGFnZSBwYWdlICVsZCBpcyBhbHJlYWR5IHVwdG8gZGF0ZVxuIiwgcGFnZS0+aW5kZXgpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7Ci0JQ2xlYXJQYWdlRXJyb3IocGFnZSk7Ci0KLQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgMSk7Ci0JaWYoYmlvKSB7Ci0JCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCQliaW8tPmJpX2JkZXYgPSBkZXYtPmJsa2RldjsKLQkJYmlvLT5iaV9zZWN0b3IgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9TSElGVC05KTsKLQkJYmlvLT5iaV9wcml2YXRlID0gJmV2ZW50OwotCQliaW8tPmJpX2VuZF9pbyA9IGJpX3JlYWRfY29tcGxldGU7Ci0JCWlmKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIFBBR0VfU0laRSwgMCkgPT0gUEFHRV9TSVpFKSB7Ci0JCQlzdWJtaXRfYmlvKFJFQURfU1lOQywgYmlvKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2ZW50KTsKLQkJCWVyciA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpID8gMCA6IC1FSU87Ci0JCQliaW9fcHV0KGJpbyk7Ci0JCX0KLQl9Ci0KLQlpZihlcnIpCi0JCVNldFBhZ2VFcnJvcihwYWdlKTsKLQllbHNlCi0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHdyaXRlIG91dCB0aGUgY3VycmVudCBCSU8gYW5kIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLwotc3RhdGljIGludCBibGttdGRfd3JpdGVfb3V0KHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKLQlpbnQgZXJyOwotCi0JaWYoIWJpby0+YmlfdmNudCkgewotCQliaW9fcHV0KGJpbyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWluaXRfY29tcGxldGlvbigmZXZlbnQpOwotCWJpby0+YmlfcHJpdmF0ZSA9ICZldmVudDsKLQliaW8tPmJpX2VuZF9pbyA9IGJpX3dyaXRlX2NvbXBsZXRlOwotCXN1Ym1pdF9iaW8oV1JJVEVfU1lOQywgYmlvKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCk7Ci0JREVCVUcoMywgInN1Ym1pdF9iaW8gY29tcGxldGVkLCBiaV92Y250ID0gJWRcbiIsIGJpby0+YmlfdmNudCk7Ci0JZXJyID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykgPyAwIDogLUVJTzsKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKioKLSAqIGJsa210ZF9hZGRfcGFnZSAtIGFkZCBhIHBhZ2UgdG8gdGhlIGN1cnJlbnQgQklPCi0gKiBAYmlvOiBiaW8gdG8gYWRkIHRvIChOVUxMIHRvIGFsbG9jIGluaXRpYWwgYmlvKQotICogQGJsa2RldjogYmxvY2sgZGV2aWNlCi0gKiBAcGFnZTogcGFnZSB0byBhZGQKLSAqIEBwYWdlY250OiBwYWdlcyBsZWZ0IHRvIGFkZAotICoKLSAqIEFkZHMgYSBwYWdlIHRvIHRoZSBjdXJyZW50IGJpbywgYWxsb2NhdGluZyBpdCBpZiBuZWNlc3NhcnkuIElmIGl0IGNhbm5vdCBiZQotICogYWRkZWQsIHRoZSBjdXJyZW50IGJpbyBpcyB3cml0dGVuIG91dCBhbmQgYSBuZXcgb25lIGlzIGFsbG9jYXRlZC4gUmV0dXJucwotICogdGhlIG5ldyBiaW8gdG8gYWRkIG9yIE5VTEwgb24gZXJyb3IKLSAqLwotc3RhdGljIHN0cnVjdCBiaW8gKmJsa210ZF9hZGRfcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJsa2RldiwKLQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VjbnQpCi17Ci0KLSByZXRyeToKLQlpZighYmlvKSB7Ci0JCWJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBwYWdlY250KTsKLQkJaWYoIWJpbykKLQkJCXJldHVybiBOVUxMOwotCQliaW8tPmJpX3NlY3RvciA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX1NISUZULTkpOwotCQliaW8tPmJpX2JkZXYgPSBibGtkZXY7Ci0JfQotCi0JaWYoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgUEFHRV9TSVpFLCAwKSAhPSBQQUdFX1NJWkUpIHsKLQkJYmxrbXRkX3dyaXRlX291dChiaW8pOwotCQliaW8gPSBOVUxMOwotCQlnb3RvIHJldHJ5OwotCX0KLQlyZXR1cm4gYmlvOwotfQotCi0KLS8qKgotICogd3JpdGVfcGFnZXMgLSB3cml0ZSBibG9jayBvZiBkYXRhIHRvIGRldmljZSB2aWEgdGhlIHBhZ2UgY2FjaGUKLSAqIEBkZXY6IGRldmljZSB0byB3cml0ZSB0bwotICogQGJ1ZjogZGF0YSBzb3VyY2Ugb3IgTlVMTCBpZiBlcmFzZSAob3V0cHV0IGlzIHNldCB0byAweGZmKQotICogQHRvOiBvZmZzZXQgaW50byBvdXRwdXQgZGV2aWNlCi0gKiBAbGVuOiBhbW91bnQgdG8gZGF0YSB0byB3cml0ZQotICogQHJldGxlbjogYW1vdW50IG9mIGRhdGEgd3JpdHRlbgotICoKLSAqIEdyYWIgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBhbmQgZmlsbCB0aGVtIHdpdGggdGhlIHNvdXJjZSBkYXRhLgotICogTm9uIHBhZ2UgYWxpZ25lZCBzdGFydCBhbmQgZW5kIHJlc3VsdCBpbiBhIHJlYWRpbiBvZiB0aGUgcGFnZSBhbmQKLSAqIHBhcnQgb2YgdGhlIHBhZ2UgYmVpbmcgbW9kaWZpZWQuIFBhZ2VzIGFyZSBhZGRlZCB0byB0aGUgYmlvIGFuZCB0aGVuIHdyaXR0ZW4KLSAqIG91dC4KLSAqLwotc3RhdGljIGludCB3cml0ZV9wYWdlcyhzdHJ1Y3QgYmxrbXRkX2RldiAqZGV2LCBjb25zdCB1X2NoYXIgKmJ1ZiwgbG9mZl90IHRvLAotCQkgICAgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4pCi17Ci0JaW50IHBhZ2Vuciwgb2Zmc2V0OwotCXNpemVfdCBzdGFydF9sZW4gPSAwLCBlbmRfbGVuOwotCWludCBwYWdlY250ID0gMDsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwotCXNpemVfdCB0aGlzbGVuID0gMDsKLQotCXBhZ2VuciA9IHRvID4+IFBBR0VfU0hJRlQ7Ci0Jb2Zmc2V0ID0gdG8gJiB+UEFHRV9NQVNLOwotCi0JREVCVUcoMiwgImJsa210ZDogd3JpdGVfcGFnZXM6IGJ1ZiA9ICVwIHRvID0gJWxkIGxlbiA9ICV6ZCBwYWdlbnIgPSAlZCBvZmZzZXQgPSAlZFxuIiwKLQkgICAgICBidWYsIChsb25nKXRvLCBsZW4sIHBhZ2Vuciwgb2Zmc2V0KTsKLQotCS8qIHNlZSBpZiB3ZSBoYXZlIHRvIGRvIGEgcGFydGlhbCB3cml0ZSBhdCB0aGUgc3RhcnQgKi8KLQlpZihvZmZzZXQpIHsKLQkJc3RhcnRfbGVuID0gKChvZmZzZXQgKyBsZW4pID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSAtIG9mZnNldCA6IGxlbjsKLQkJbGVuIC09IHN0YXJ0X2xlbjsKLQl9Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgb3RoZXIgdHdvIHJlZ2lvbnMgKi8KLQllbmRfbGVuID0gbGVuICYgflBBR0VfTUFTSzsKLQlsZW4gLT0gZW5kX2xlbjsKLQotCWlmKHN0YXJ0X2xlbikKLQkJcGFnZWNudCsrOwotCi0JaWYobGVuKQotCQlwYWdlY250ICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCi0JaWYoZW5kX2xlbikKLQkJcGFnZWNudCsrOwotCi0JbXV0ZXhfbG9jaygmZGV2LT53cmJ1Zl9tdXRleCk7Ci0KLQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogc3RhcnRfbGVuID0gJXpkIGxlbiA9ICV6ZCBlbmRfbGVuID0gJXpkIHBhZ2VjbnQgPSAlZFxuIiwKLQkgICAgICBzdGFydF9sZW4sIGxlbiwgZW5kX2xlbiwgcGFnZWNudCk7Ci0KLQlpZihzdGFydF9sZW4pIHsKLQkJLyogZG8gcGFydGlhbCBzdGFydCByZWdpb24gKi8KLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGRvaW5nIHBhcnRpYWwgc3RhcnQsIHBhZ2UgPSAlZCBsZW4gPSAlemQgb2Zmc2V0ID0gJWRcbiIsCi0JCSAgICAgIHBhZ2Vuciwgc3RhcnRfbGVuLCBvZmZzZXQpOwotCi0JCUJVR19PTighYnVmKTsKLQkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yLCAoZmlsbGVyX3QgKilibGttdGRfcmVhZHBhZ2UsIGRldik7Ci0JCWxvY2tfcGFnZShwYWdlKTsKLQkJaWYoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQllcnIoInRvID0gJWxsZCBzdGFydF9sZW4gPSAlemQgbGVuID0gJXpkIGVuZF9sZW4gPSAlemQgcGFnZW5yID0gJWRcbiIsCi0JCQkgICAgdG8sIHN0YXJ0X2xlbiwgbGVuLCBlbmRfbGVuLCBwYWdlbnIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhwYWdlKStvZmZzZXQsIGJ1Ziwgc3RhcnRfbGVuKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJYnVmICs9IHN0YXJ0X2xlbjsKLQkJdGhpc2xlbiA9IHN0YXJ0X2xlbjsKLQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQlpZighYmlvKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCWdvdG8gd3JpdGVfZXJyOwotCQl9Ci0JCXBhZ2VjbnQtLTsKLQkJcGFnZW5yKys7Ci0JfQotCi0JLyogTm93IGRvIHRoZSBtYWluIGxvb3AgdG8gYSBwYWdlIGFsaWduZWQsIG4gcGFnZSBzaXplZCBvdXRwdXQgKi8KLQlpZihsZW4pIHsKLQkJaW50IHBhZ2VzYyA9IGxlbiA+PiBQQUdFX1NISUZUOwotCQlERUJVRygzLCAiYmxrbXRkOiB3cml0ZTogd2hvbGUgcGFnZXMgc3RhcnQgPSAlZCwgY291bnQgPSAlZFxuIiwKLQkJICAgICAgcGFnZW5yLCBwYWdlc2MpOwotCQl3aGlsZShwYWdlc2MpIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCQkvKiBzZWUgaWYgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZSAqLwotCQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGdyYWJiaW5nIHBhZ2UgJWQgZnJvbSBwYWdlIGNhY2hlXG4iLCBwYWdlbnIpOwotCQkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgcGFnZW5yKTsKLQkJCWlmKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJCUJVRygpOwotCQkJfQotCQkJaWYoIXBhZ2UpIHsKLQkJCQl3YXJuKCJ3cml0ZTogY2Fubm90IGdyYWIgY2FjaGUgcGFnZSAlZCIsIHBhZ2Vucik7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIHdyaXRlX2VycjsKLQkJCX0KLQkJCWlmKCFidWYpIHsKLQkJCQltZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpLCAweGZmLCBQQUdFX1NJWkUpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1jcHkocGFnZV9hZGRyZXNzKHBhZ2UpLCBidWYsIFBBR0VfU0laRSk7Ci0JCQkJYnVmICs9IFBBR0VfU0laRTsKLQkJCX0KLQkJCWJpbyA9IGJsa210ZF9hZGRfcGFnZShiaW8sIGRldi0+YmxrZGV2LCBwYWdlLCBwYWdlY250KTsKLQkJCWlmKCFiaW8pIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWVycigiYmlvX2FkZF9wYWdlIGZhaWxlZFxuIik7Ci0JCQkJZ290byB3cml0ZV9lcnI7Ci0JCQl9Ci0JCQlwYWdlbnIrKzsKLQkJCXBhZ2VjbnQtLTsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJcGFnZXNjLS07Ci0JCQl0aGlzbGVuICs9IFBBR0VfU0laRTsKLQkJfQotCX0KLQotCWlmKGVuZF9sZW4pIHsKLQkJLyogZG8gdGhlIHRoaXJkIHJlZ2lvbiAqLwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJREVCVUcoMywgImJsa210ZDogd3JpdGU6IGRvaW5nIHBhcnRpYWwgZW5kLCBwYWdlID0gJWQgbGVuID0gJXpkXG4iLAotCQkgICAgICBwYWdlbnIsIGVuZF9sZW4pOwotCQlCVUdfT04oIWJ1Zik7Ci0JCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIHBhZ2VuciwgKGZpbGxlcl90ICopYmxrbXRkX3JlYWRwYWdlLCBkZXYpOwotCQlsb2NrX3BhZ2UocGFnZSk7Ci0JCWlmKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJZXJyKCJ0byA9ICVsbGQgc3RhcnRfbGVuID0gJXpkIGxlbiA9ICV6ZCBlbmRfbGVuID0gJXpkIHBhZ2VuciA9ICVkXG4iLAotCQkJICAgIHRvLCBzdGFydF9sZW4sIGxlbiwgZW5kX2xlbiwgcGFnZW5yKTsKLQkJCUJVRygpOwotCQl9Ci0JCW1lbWNweShwYWdlX2FkZHJlc3MocGFnZSksIGJ1ZiwgZW5kX2xlbik7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiB3cml0aW5nIG91dCBwYXJ0aWFsIGVuZFxuIik7Ci0JCXRoaXNsZW4gKz0gZW5kX2xlbjsKLQkJYmlvID0gYmxrbXRkX2FkZF9wYWdlKGJpbywgZGV2LT5ibGtkZXYsIHBhZ2UsIHBhZ2VjbnQpOwotCQlpZighYmlvKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZXJyKCJiaW9fYWRkX3BhZ2UgZmFpbGVkXG4iKTsKLQkJCWdvdG8gd3JpdGVfZXJyOwotCQl9Ci0JCXBhZ2VucisrOwotCX0KLQotCURFQlVHKDMsICJibGttdGQ6IHdyaXRlOiBnb3QgJWQgdmVjdG9ycyB0byB3cml0ZVxuIiwgYmlvLT5iaV92Y250KTsKLSB3cml0ZV9lcnI6Ci0JaWYoYmlvKQotCQlibGttdGRfd3JpdGVfb3V0KGJpbyk7Ci0KLQlERUJVRygyLCAiYmxrbXRkOiB3cml0ZTogZW5kLCByZXRsZW4gPSAlemQsIGVyciA9ICVkXG4iLCAqcmV0bGVuLCBlcnIpOwotCW11dGV4X3VubG9jaygmZGV2LT53cmJ1Zl9tdXRleCk7Ci0KLQlpZihyZXRsZW4pCi0JCSpyZXRsZW4gPSB0aGlzbGVuOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogZXJhc2UgYSBzcGVjaWZpZWQgcGFydCBvZiB0aGUgZGV2aWNlICovCi1zdGF0aWMgaW50IGJsa210ZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqZWluZm8gPSBtdGQtPmVyYXNlcmVnaW9uczsKLQlpbnQgbnVtcmVnaW9ucyA9IG10ZC0+bnVtZXJhc2VyZWdpb25zOwotCXNpemVfdCBmcm9tOwotCXVfbG9uZyBsZW47Ci0JaW50IGVyciA9IC1FSU87Ci0Jc2l6ZV90IHJldGxlbjsKLQotCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwotCWZyb20gPSBpbnN0ci0+YWRkcjsKLQlsZW4gPSBpbnN0ci0+bGVuOwotCi0JLyogY2hlY2sgZXJhc2UgcmVnaW9uIGhhcyB2YWxpZCBzdGFydCBhbmQgbGVuZ3RoICovCi0JREVCVUcoMiwgImJsa210ZDogZXJhc2U6IGRldiA9IGAlcycgZnJvbSA9IDB4JXp4IGxlbiA9IDB4JWx4XG4iLAotCSAgICAgIG10ZC0+bmFtZSs5LCBmcm9tLCBsZW4pOwotCXdoaWxlKG51bXJlZ2lvbnMpIHsKLQkJREVCVUcoMywgImJsa210ZDogY2hlY2tpbmcgZXJhc2UgcmVnaW9uID0gMHglMDhYIHNpemUgPSAweCVYIG51bSA9IDB4JXhcbiIsCi0JCSAgICAgIGVpbmZvLT5vZmZzZXQsIGVpbmZvLT5lcmFzZXNpemUsIGVpbmZvLT5udW1ibG9ja3MpOwotCQlpZihmcm9tID49IGVpbmZvLT5vZmZzZXQKLQkJICAgJiYgZnJvbSA8IGVpbmZvLT5vZmZzZXQgKyAoZWluZm8tPmVyYXNlc2l6ZSAqIGVpbmZvLT5udW1ibG9ja3MpKSB7Ci0JCQlpZihsZW4gPT0gZWluZm8tPmVyYXNlc2l6ZQotCQkJICAgJiYgKCAoZnJvbSAtIGVpbmZvLT5vZmZzZXQpICUgZWluZm8tPmVyYXNlc2l6ZSA9PSAwKSkKLQkJCQlicmVhazsKLQkJfQotCQludW1yZWdpb25zLS07Ci0JCWVpbmZvKys7Ci0JfQotCi0JaWYoIW51bXJlZ2lvbnMpIHsKLQkJLyogTm90IGEgdmFsaWQgZXJhc2UgYmxvY2sgKi8KLQkJZXJyKCJlcmFzZTogaW52YWxpZCBlcmFzZSByZXF1ZXN0IDB4JWxYIEAgMHglMDh6WCIsIGxlbiwgZnJvbSk7Ci0JCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCWVyciA9IC1FSU87Ci0JfQotCi0JaWYoaW5zdHItPnN0YXRlICE9IE1URF9FUkFTRV9GQUlMRUQpIHsKLQkJLyogZG8gdGhlIGVyYXNlICovCi0JCURFQlVHKDMsICJEb2luZyBlcmFzZSBmcm9tID0gJXpkIGxlbiA9ICVsZFxuIiwgZnJvbSwgbGVuKTsKLQkJZXJyID0gd3JpdGVfcGFnZXMoZGV2LCBOVUxMLCBmcm9tLCBsZW4sICZyZXRsZW4pOwotCQlpZihlcnIgfHwgcmV0bGVuICE9IGxlbikgewotCQkJZXJyKCJlcmFzZSBmYWlsZWQgZXJyID0gJWQiLCBlcnIpOwotCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJfSBlbHNlIHsKLQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwotCQl9Ci0JfQotCi0JREVCVUcoMywgImJsa210ZDogZXJhc2U6IGNoZWNraW5nIGNhbGxiYWNrXG4iKTsKLQltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOwotCURFQlVHKDIsICJibGttdGQ6IGVyYXNlOiBmaW5pc2hlZCAoZXJyID0gJWQpXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogcmVhZCBhIHJhbmdlIG9mIHRoZSBkYXRhIHZpYSB0aGUgcGFnZSBjYWNoZSAqLwotc3RhdGljIGludCBibGttdGRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCSAgICAgICBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IG10ZC0+cHJpdjsKLQlpbnQgZXJyID0gMDsKLQlpbnQgb2Zmc2V0OwotCWludCBwYWdlbnIsIHBhZ2VzOwotCXNpemVfdCB0aGlzbGVuID0gMDsKLQotCURFQlVHKDIsICJibGttdGQ6IHJlYWQ6IGRldiA9IGAlcycgZnJvbSA9ICVsbGQgbGVuID0gJXpkIGJ1ZiA9ICVwXG4iLAotCSAgICAgIG10ZC0+bmFtZSs5LCBmcm9tLCBsZW4sIGJ1Zik7Ci0KLQlpZihmcm9tID4gbXRkLT5zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZihmcm9tICsgbGVuID4gbXRkLT5zaXplKQotCQlsZW4gPSBtdGQtPnNpemUgLSBmcm9tOwotCi0JcGFnZW5yID0gZnJvbSA+PiBQQUdFX1NISUZUOwotCW9mZnNldCA9IGZyb20gLSAocGFnZW5yIDw8IFBBR0VfU0hJRlQpOwotCi0JcGFnZXMgPSAob2Zmc2V0K2xlbitQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKLQlERUJVRygzLCAiYmxrbXRkOiByZWFkOiBwYWdlbnIgPSAlZCBvZmZzZXQgPSAlZCwgcGFnZXMgPSAlZFxuIiwKLQkgICAgICBwYWdlbnIsIG9mZnNldCwgcGFnZXMpOwotCi0Jd2hpbGUocGFnZXMpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCWludCBjcHlsZW47Ci0KLQkJREVCVUcoMywgImJsa210ZDogcmVhZDogbG9va2luZyBmb3IgcGFnZTogJWRcbiIsIHBhZ2Vucik7Ci0JCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIHBhZ2VuciwgKGZpbGxlcl90ICopYmxrbXRkX3JlYWRwYWdlLCBkZXYpOwotCQlpZihJU19FUlIocGFnZSkpIHsKLQkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIHJlYWRlcnI7Ci0JCX0KLQotCQljcHlsZW4gPSAoUEFHRV9TSVpFID4gbGVuKSA/IGxlbiA6IFBBR0VfU0laRTsKLQkJaWYob2Zmc2V0K2NweWxlbiA+IFBBR0VfU0laRSkKLQkJCWNweWxlbiA9IFBBR0VfU0laRS1vZmZzZXQ7Ci0KLQkJbWVtY3B5KGJ1ZiArIHRoaXNsZW4sIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgY3B5bGVuKTsKLQkJb2Zmc2V0ID0gMDsKLQkJbGVuIC09IGNweWxlbjsKLQkJdGhpc2xlbiArPSBjcHlsZW47Ci0JCXBhZ2VucisrOwotCQlwYWdlcy0tOwotCQlpZighUGFnZURpcnR5KHBhZ2UpKQotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCX0KLQotIHJlYWRlcnI6Ci0JaWYocmV0bGVuKQotCQkqcmV0bGVuID0gdGhpc2xlbjsKLQlERUJVRygyLCAiYmxrbXRkOiBlbmQgcmVhZDogcmV0bGVuID0gJXpkLCBlcnIgPSAlZFxuIiwgdGhpc2xlbiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qIHdyaXRlIGRhdGEgdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNlICovCi1zdGF0aWMgaW50IGJsa210ZF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBibGttdGRfZGV2ICpkZXYgPSBtdGQtPnByaXY7Ci0JaW50IGVycjsKLQotCWlmKCFsZW4pCi0JCXJldHVybiAwOwotCi0JREVCVUcoMiwgImJsa210ZDogd3JpdGU6IGRldiA9IGAlcycgdG8gPSAlbGxkIGxlbiA9ICV6ZCBidWYgPSAlcFxuIiwKLQkgICAgICBtdGQtPm5hbWUrOSwgdG8sIGxlbiwgYnVmKTsKLQotCWlmKHRvID49IG10ZC0+c2l6ZSkgewotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlpZih0byArIGxlbiA+IG10ZC0+c2l6ZSkgewotCQlsZW4gPSBtdGQtPnNpemUgLSB0bzsKLQl9Ci0KLQllcnIgPSB3cml0ZV9wYWdlcyhkZXYsIGJ1ZiwgdG8sIGxlbiwgcmV0bGVuKTsKLQlpZihlcnIgPiAwKQotCQllcnIgPSAwOwotCURFQlVHKDIsICJibGttdGQ6IHdyaXRlOiBlbmQsIGVyciA9ICVkXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyogc3luYyB0aGUgZGV2aWNlIC0gd2FpdCB1bnRpbCB0aGUgd3JpdGUgcXVldWUgaXMgZW1wdHkgKi8KLXN0YXRpYyB2b2lkIGJsa210ZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCS8qIEN1cnJlbnRseSBhbGwgd3JpdGVzIGFyZSBzeW5jaHJvbm91cyAqLwotfQotCi0KLXN0YXRpYyB2b2lkIGZyZWVfZGV2aWNlKHN0cnVjdCBibGttdGRfZGV2ICpkZXYpCi17Ci0JREVCVUcoMiwgImJsa210ZDogZnJlZV9kZXZpY2UoKSBkZXYgPSAlcFxuIiwgZGV2KTsKLQlpZihkZXYpIHsKLQkJa2ZyZWUoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMpOwotCQlrZnJlZShkZXYtPm10ZF9pbmZvLm5hbWUpOwotCQlpZihkZXYtPmJsa2RldikgewotCQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyhkZXYtPmJsa2Rldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7Ci0JCQljbG9zZV9iZGV2X2V4Y2woZGV2LT5ibGtkZXYpOwotCQl9Ci0JCWtmcmVlKGRldik7Ci0JfQotfQotCi0KLS8qIEZvciBhIGdpdmVuIHNpemUgYW5kIGluaXRpYWwgZXJhc2Ugc2l6ZSwgY2FsY3VsYXRlIHRoZSBudW1iZXIKLSAqIGFuZCBzaXplIG9mIGVhY2ggZXJhc2UgcmVnaW9uLiBHb2VzIHJvdW5kIHRoZSBsb29wIHR3aWNlLAotICogb25jZSB0byBmaW5kIG91dCBob3cgbWFueSByZWdpb25zLCB0aGVuIGFsbG9jYXRlcyBzcGFjZSwKLSAqIHRoZW4gcm91bmQgdGhlIGxvb3AgYWdhaW4gdG8gZmlsbCBpdCBpbi4KLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmNhbGNfZXJhc2VfcmVnaW9ucygKLQlzaXplX3QgZXJhc2Vfc2l6ZSwgc2l6ZV90IHRvdGFsX3NpemUsIGludCAqcmVnaW9ucykKLXsKLQlzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICppbmZvID0gTlVMTDsKLQotCURFQlVHKDIsICJjYWxjX2VyYXNlX3JlZ2lvbnMsIGVzID0gJXpkIHNpemUgPSAlemQgcmVnaW9ucyA9ICVkXG4iLAotCSAgICAgIGVyYXNlX3NpemUsIHRvdGFsX3NpemUsICpyZWdpb25zKTsKLQkvKiBNYWtlIGFueSB1c2VyIHNwZWNpZmllZCBlcmFzZXNpemUgYmUgYSBwb3dlciBvZiAyCi0JICAgYW5kIGF0IGxlYXN0IFBBR0VfU0laRSAqLwotCWlmKGVyYXNlX3NpemUpIHsKLQkJaW50IGVzID0gZXJhc2Vfc2l6ZTsKLQkJZXJhc2Vfc2l6ZSA9IDE7Ci0JCXdoaWxlKGVzICE9IDEpIHsKLQkJCWVzID4+PSAxOwotCQkJZXJhc2Vfc2l6ZSA8PD0gMTsKLQkJfQotCQlpZihlcmFzZV9zaXplIDwgUEFHRV9TSVpFKQotCQkJZXJhc2Vfc2l6ZSA9IFBBR0VfU0laRTsKLQl9IGVsc2UgewotCQllcmFzZV9zaXplID0gQ09ORklHX01URF9CTEtERVZfRVJBU0VTSVpFOwotCX0KLQotCSpyZWdpb25zID0gMDsKLQotCWRvIHsKLQkJaW50IHRvdF9zaXplID0gdG90YWxfc2l6ZTsKLQkJaW50IGVyX3NpemUgPSBlcmFzZV9zaXplOwotCQlpbnQgY291bnQgPSAwLCBvZmZzZXQgPSAwLCByZWdjbnQgPSAwOwotCi0JCXdoaWxlKHRvdF9zaXplKSB7Ci0JCQljb3VudCA9IHRvdF9zaXplIC8gZXJfc2l6ZTsKLQkJCWlmKGNvdW50KSB7Ci0JCQkJdG90X3NpemUgPSB0b3Rfc2l6ZSAlIGVyX3NpemU7Ci0JCQkJaWYoaW5mbykgewotCQkJCQlERUJVRygyLCAiYWRkaW5nIHRvIGVyYXNlIGluZm8gb2ZmPSVkIGVyPSVkIGNudD0lZFxuIiwKLQkJCQkJICAgICAgb2Zmc2V0LCBlcl9zaXplLCBjb3VudCk7Ci0JCQkJCShpbmZvK3JlZ2NudCktPm9mZnNldCA9IG9mZnNldDsKLQkJCQkJKGluZm8rcmVnY250KS0+ZXJhc2VzaXplID0gZXJfc2l6ZTsKLQkJCQkJKGluZm8rcmVnY250KS0+bnVtYmxvY2tzID0gY291bnQ7Ci0JCQkJCSgqcmVnaW9ucykrKzsKLQkJCQl9Ci0JCQkJcmVnY250Kys7Ci0JCQkJb2Zmc2V0ICs9IChjb3VudCAqIGVyX3NpemUpOwotCQkJfQotCQkJd2hpbGUoZXJfc2l6ZSA+IHRvdF9zaXplKQotCQkJCWVyX3NpemUgPj49IDE7Ci0JCX0KLQkJaWYoaW5mbyA9PSBOVUxMKSB7Ci0JCQlpbmZvID0ga21hbGxvYyhyZWdjbnQgKiBzaXplb2Yoc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyksIEdGUF9LRVJORUwpOwotCQkJaWYoIWluZm8pCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlKCEoKnJlZ2lvbnMpKTsKLQlERUJVRygyLCAiY2FsY19lcmFzZV9yZWdpb25zIGRvbmUsIGVzID0gJXpkIHNpemUgPSAlemQgcmVnaW9ucyA9ICVkXG4iLAotCSAgICAgIGVyYXNlX3NpemUsIHRvdGFsX3NpemUsICpyZWdpb25zKTsKLQlyZXR1cm4gaW5mbzsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGJsa210ZF9kZXYgKmFkZF9kZXZpY2UoY2hhciAqZGV2bmFtZSwgaW50IHJlYWRvbmx5LCBpbnQgZXJhc2Vfc2l6ZSkKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCWludCBtb2RlOwotCXN0cnVjdCBibGttdGRfZGV2ICpkZXY7Ci0KLQlpZighZGV2bmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBHZXQgYSBoYW5kbGUgb24gdGhlIGRldmljZSAqLwotCi0KLSNpZmRlZiBNT0RVTEUKLQltb2RlID0gKHJlYWRvbmx5KSA/IE9fUkRPTkxZIDogT19SRFdSOwotCWJkZXYgPSBvcGVuX2JkZXZfZXhjbChkZXZuYW1lLCBtb2RlLCBOVUxMKTsKLSNlbHNlCi0JbW9kZSA9IChyZWFkb25seSkgPyBGTU9ERV9SRUFEIDogRk1PREVfV1JJVEU7Ci0JYmRldiA9IG9wZW5fYnlfZGV2bnVtKG5hbWVfdG9fZGV2X3QoZGV2bmFtZSksIG1vZGUpOwotI2VuZGlmCi0JaWYoSVNfRVJSKGJkZXYpKSB7Ci0JCWVycigiZXJyb3I6IGNhbm5vdCBvcGVuIGRldmljZSAlcyIsIGRldm5hbWUpOwotCQlERUJVRygyLCAiYmxrbXRkOiBvcGVuaW5nIGJkZXYgcmV0dXJuZWQgJWxkXG4iLCBQVFJfRVJSKGJkZXYpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JREVCVUcoMSwgImJsa210ZDogZm91bmQgYSBibG9jayBkZXZpY2UgbWFqb3IgPSAlZCwgbWlub3IgPSAlZFxuIiwKLQkgICAgICBNQUpPUihiZGV2LT5iZF9kZXYpLCBNSU5PUihiZGV2LT5iZF9kZXYpKTsKLQotCWlmKE1BSk9SKGJkZXYtPmJkX2RldikgPT0gTVREX0JMT0NLX01BSk9SKSB7Ci0JCWVycigiYXR0ZW1wdGluZyB0byB1c2UgYW4gTVREIGRldmljZSBhcyBhIGJsb2NrIGRldmljZSIpOwotCQlibGtkZXZfcHV0KGJkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldiksIEdGUF9LRVJORUwpOwotCWlmKGRldiA9PSBOVUxMKSB7Ci0JCWJsa2Rldl9wdXQoYmRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgYmxrbXRkX2RldikpOwotCWRldi0+YmxrZGV2ID0gYmRldjsKLQlpZighcmVhZG9ubHkpIHsKLQkJbXV0ZXhfaW5pdCgmZGV2LT53cmJ1Zl9tdXRleCk7Ci0JfQotCi0JZGV2LT5tdGRfaW5mby5zaXplID0gZGV2LT5ibGtkZXYtPmJkX2lub2RlLT5pX3NpemUgJiBQQUdFX01BU0s7Ci0KLQkvKiBTZXR1cCB0aGUgTVREIHN0cnVjdHVyZSAqLwotCS8qIG1ha2UgdGhlIG5hbWUgY29udGFpbiB0aGUgYmxvY2sgZGV2aWNlIGluICovCi0JZGV2LT5tdGRfaW5mby5uYW1lID0ga21hbGxvYyhzaXplb2YoImJsa210ZDogIikgKyBzdHJsZW4oZGV2bmFtZSksIEdGUF9LRVJORUwpOwotCWlmKGRldi0+bXRkX2luZm8ubmFtZSA9PSBOVUxMKQotCQlnb3RvIGRldmluaXRfZXJyOwotCi0Jc3ByaW50ZihkZXYtPm10ZF9pbmZvLm5hbWUsICJibGttdGQ6ICVzIiwgZGV2bmFtZSk7Ci0JZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPSBjYWxjX2VyYXNlX3JlZ2lvbnMoZXJhc2Vfc2l6ZSwgZGV2LT5tdGRfaW5mby5zaXplLAotCQkJCQkJCSZkZXYtPm10ZF9pbmZvLm51bWVyYXNlcmVnaW9ucyk7Ci0JaWYoZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMgPT0gTlVMTCkKLQkJZ290byBkZXZpbml0X2VycjsKLQotCWRldi0+bXRkX2luZm8uZXJhc2VzaXplID0gZGV2LT5tdGRfaW5mby5lcmFzZXJlZ2lvbnMtPmVyYXNlc2l6ZTsKLQlERUJVRygxLCAiYmxrbXRkOiBpbml0OiBmb3VuZCAlZCBlcmFzZSByZWdpb25zXG4iLAotCSAgICAgIGRldi0+bXRkX2luZm8ubnVtZXJhc2VyZWdpb25zKTsKLQotCWlmKHJlYWRvbmx5KSB7Ci0JCWRldi0+bXRkX2luZm8udHlwZSA9IE1URF9ST007Ci0JCWRldi0+bXRkX2luZm8uZmxhZ3MgPSBNVERfQ0FQX1JPTTsKLQl9IGVsc2UgewotCQlkZXYtPm10ZF9pbmZvLnR5cGUgPSBNVERfUkFNOwotCQlkZXYtPm10ZF9pbmZvLmZsYWdzID0gTVREX0NBUF9SQU07Ci0JCWRldi0+bXRkX2luZm8uZXJhc2UgPSBibGttdGRfZXJhc2U7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGUgPSBibGttdGRfd3JpdGU7Ci0JCWRldi0+bXRkX2luZm8ud3JpdGV2ID0gZGVmYXVsdF9tdGRfd3JpdGV2OwotCQlkZXYtPm10ZF9pbmZvLnN5bmMgPSBibGttdGRfc3luYzsKLQl9Ci0JZGV2LT5tdGRfaW5mby5yZWFkID0gYmxrbXRkX3JlYWQ7Ci0JZGV2LT5tdGRfaW5mby5yZWFkdiA9IGRlZmF1bHRfbXRkX3JlYWR2OwotCWRldi0+bXRkX2luZm8ucHJpdiA9IGRldjsKLQlkZXYtPm10ZF9pbmZvLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlsaXN0X2FkZCgmZGV2LT5saXN0LCAmYmxrbXRkX2RldmljZV9saXN0KTsKLQlpZiAoYWRkX210ZF9kZXZpY2UoJmRldi0+bXRkX2luZm8pKSB7Ci0JCS8qIERldmljZSBkaWRudCBnZXQgYWRkZWQsIHNvIGZyZWUgdGhlIGVudHJ5ICovCi0JCWxpc3RfZGVsKCZkZXYtPmxpc3QpOwotCQlnb3RvIGRldmluaXRfZXJyOwotCX0gZWxzZSB7Ci0JCWluZm8oIm10ZCVkOiBbJXNdIGVyYXNlX3NpemUgPSAlZEtpQiAlcyIsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5pbmRleCwgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpLAotCQkgICAgIGRldi0+bXRkX2luZm8uZXJhc2VzaXplID4+IDEwLAotCQkgICAgIHJlYWRvbmx5ID8gIihyZWFkLW9ubHkpIiA6ICIiKTsKLQl9Ci0KLQlyZXR1cm4gZGV2OwotCi0gZGV2aW5pdF9lcnI6Ci0JZnJlZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKiBDbGVhbnVwIGFuZCBleGl0IC0gc3luYyB0aGUgZGV2aWNlIGFuZCBraWxsIG9mIHRoZSBrZXJuZWwgdGhyZWFkICovCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgY2xlYW51cF9ibGttdGQodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wMSwgKnRlbXAyOwotCi0JLyogUmVtb3ZlIHRoZSBNVEQgZGV2aWNlcyAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZSh0ZW1wMSwgdGVtcDIsICZibGttdGRfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGJsa210ZF9kZXYgKmRldiA9IGxpc3RfZW50cnkodGVtcDEsIHN0cnVjdCBibGttdGRfZGV2LAotCQkJCQkJICAgIGxpc3QpOwotCQlibGttdGRfc3luYygmZGV2LT5tdGRfaW5mbyk7Ci0JCWRlbF9tdGRfZGV2aWNlKCZkZXYtPm10ZF9pbmZvKTsKLQkJaW5mbygibXRkJWQ6IFslc10gcmVtb3ZlZCIsIGRldi0+bXRkX2luZm8uaW5kZXgsCi0JCSAgICAgZGV2LT5tdGRfaW5mby5uYW1lICsgc3RybGVuKCJibGttdGQ6ICIpKTsKLQkJbGlzdF9kZWwoJmRldi0+bGlzdCk7Ci0JCWZyZWVfZGV2aWNlKGRldik7Ci0JfQotfQotCi0jaWZuZGVmIE1PRFVMRQotCi0vKiBIYW5kbGUga2VybmVsIGJvb3QgcGFyYW1zICovCi0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2RldmljZShjaGFyICpzdHIpCi17Ci0JaW50IGk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBNQVhfREVWSUNFUzsgaSsrKSB7Ci0JCWRldmljZVtpXSA9IHN0cjsKLQkJREVCVUcoMiwgImJsa210ZDogZGV2aWNlIHNldHVwOiAlZCA9ICVzXG4iLCBpLCBkZXZpY2VbaV0pOwotCQlzdHJzZXAoJnN0ciwgIiwiKTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIGludCBfX2luaXQgcGFyYW1fYmxrbXRkX2VyYXNlc3ooY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCWVyYXNlc3pbaV0gPSBzaW1wbGVfc3RydG91bCh2YWwsIE5VTEwsIDApOwotCQlERUJVRygyLCAiYmxrbXRkOiBlcmFzZXN6IHNldHVwOiAlZCA9ICVkXG4iLCBpLCBlcmFzZXN6W2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfcm8oY2hhciAqc3RyKQotewotCWludCBpOwotCWZvcihpID0gMDsgaSA8IE1BWF9ERVZJQ0VTOyBpKyspIHsKLQkJY2hhciAqdmFsID0gc3Ryc2VwKCZzdHIsICIsIik7Ci0JCWlmKHZhbCkKLQkJCXJvW2ldID0gc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKLQkJREVCVUcoMiwgImJsa210ZDogcm8gc2V0dXA6ICVkID0gJWRcbiIsIGksIHJvW2ldKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJhbV9ibGttdGRfc3luYyhjaGFyICpzdHIpCi17Ci0JaWYoc3RyWzBdID09ICcxJykKLQkJc3luYyA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImJsa210ZF9kZXZpY2U9IiwgcGFyYW1fYmxrbXRkX2RldmljZSk7Ci1fX3NldHVwKCJibGttdGRfZXJhc2Vzej0iLCBwYXJhbV9ibGttdGRfZXJhc2Vzeik7Ci1fX3NldHVwKCJibGttdGRfcm89IiwgcGFyYW1fYmxrbXRkX3JvKTsKLV9fc2V0dXAoImJsa210ZF9zeW5jPSIsIHBhcmFtX2Jsa210ZF9zeW5jKTsKLQotI2VuZGlmCi0KLQotLyogU3RhcnR1cCAqLwotc3RhdGljIGludCBfX2luaXQgaW5pdF9ibGttdGQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWluZm8oInZlcnNpb24gIiBWRVJTSU9OKTsKLQkvKiBDaGVjayBhcmdzIC0gZGV2aWNlWzBdIGlzIHRoZSBiYXJlIG1pbmltdW0qLwotCWlmKCFkZXZpY2VbMF0pIHsKLQkJZXJyKCJlcnJvcjogbWlzc2luZyBgZGV2aWNlJyBuYW1lXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yKGkgPSAwOyBpIDwgTUFYX0RFVklDRVM7IGkrKykKLQkJYWRkX2RldmljZShkZXZpY2VbaV0sIHJvW2ldLCBlcmFzZXN6W2ldIDw8IDEwKTsKLQotCWlmKGxpc3RfZW1wdHkoJmJsa210ZF9kZXZpY2VfbGlzdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfYmxrbXRkKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfYmxrbXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCmluZGV4IDhiYmM3NTEuLmQyN2Y0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwpAQCAtNTQsNyArNTQsNyBAQAogI2RlZmluZSBNQVhfUENNQ0lBX0FERFIJMHg0MDAwMDAwCiAKIHN0cnVjdCBwY21jaWFtdGRfZGV2IHsKLQlkZXZfbGlua190CWxpbms7CQkvKiBQQ01DSUEgbGluayAqLworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90CW5vZGU7CQkvKiBkZXZpY2Ugbm9kZSAqLwogCWNhZGRyX3QJCXdpbl9iYXNlOwkvKiBpb3JlbWFwcGVkIGFkZHJlc3Mgb2YgUENNQ0lBIHdpbmRvdyAqLwogCXVuc2lnbmVkIGludAl3aW5fc2l6ZTsJLyogc2l6ZSBvZiB3aW5kb3cgKi8KQEAgLTExMSw4ICsxMTEsOCBAQAogCW1lbXJlcV90IG1ycTsKIAlpbnQgcmV0OwogCi0JaWYoIShkZXYtPmxpbmsuc3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKLQkJREVCVUcoMSwgImRldmljZSByZW1vdmVkIHN0YXRlID0gMHglNC40WCIsIGRldi0+bGluay5zdGF0ZSk7CisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQoZGV2LT5wX2RldikpIHsKKwkJREVCVUcoMSwgImRldmljZSByZW1vdmVkIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTIyLDcgKzEyMiw3IEBACiAJCSAgICAgIGRldi0+b2Zmc2V0LCBtcnEuQ2FyZE9mZnNldCk7CiAJCW1ycS5QYWdlID0gMDsKIAkJaWYoIChyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHdpbiwgJm1ycSkpICE9IENTX1NVQ0NFU1MpIHsKLQkJCWNzX2Vycm9yKGRldi0+bGluay5oYW5kbGUsIE1hcE1lbVBhZ2UsIHJldCk7CisJCQljc19lcnJvcihkZXYtPnBfZGV2LCBNYXBNZW1QYWdlLCByZXQpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJZGV2LT5vZmZzZXQgPSBtcnEuQ2FyZE9mZnNldDsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCiAvKiByZWFkL3dyaXRlezgsMTZ9IGNvcHlfe2Zyb20sdG99IHJvdXRpbmVzIHdpdGggZGlyZWN0IGFjY2VzcyAqLwogCi0jZGVmaW5lIERFVl9SRU1PVkVEKHgpICAoISgqKHVfaW50ICopeC0+bWFwX3ByaXZfMSAmIERFVl9QUkVTRU5UKSkKKyNkZWZpbmUgREVWX1JFTU9WRUQoeCkgICghKHBjbWNpYV9kZXZfcHJlc2VudCgoKHN0cnVjdCBwY21jaWFtdGRfZGV2ICopbWFwLT5tYXBfcHJpdl8xKS0+cF9kZXYpKSkKIAogc3RhdGljIG1hcF93b3JkIHBjbWNpYV9yZWFkOChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyBvZnMpCiB7CkBAIC0zMTksNyArMzE5LDcgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYW10ZF9zZXRfdnBwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgb24pCiB7CiAJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiA9IChzdHJ1Y3QgcGNtY2lhbXRkX2RldiAqKW1hcC0+bWFwX3ByaXZfMTsKLQlkZXZfbGlua190ICpsaW5rID0gJmRldi0+bGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGRldi0+cF9kZXY7CiAJbW9kY29uZl90IG1vZDsKIAlpbnQgcmV0OwogCkBAIC0zMjgsOSArMzI4LDkgQEAKIAltb2QuVnBwMSA9IG1vZC5WcHAyID0gb24gPyBkZXYtPnZwcCA6IDA7CiAKIAlERUJVRygyLCAiZGV2ID0gJXAgb24gPSAlZCB2cHAgPSAlZFxuIiwgZGV2LCBvbiwgZGV2LT52cHApOwotCXJldCA9IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZtb2QpOworCXJldCA9IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihsaW5rLCAmbW9kKTsKIAlpZihyZXQgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIE1vZGlmeUNvbmZpZ3VyYXRpb24sIHJldCk7CisJCWNzX2Vycm9yKGxpbmssIE1vZGlmeUNvbmZpZ3VyYXRpb24sIHJldCk7CiAJfQogfQogCkBAIC0zNDAsNyArMzQwLDcgQEAKICAqIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogICovCiAKLXN0YXRpYyB2b2lkIHBjbWNpYW10ZF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBwY21jaWFtdGRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgcGNtY2lhbXRkX2RldiAqZGV2ID0gbGluay0+cHJpdjsKIApAQCAtMzUzLDEyICszNTMsMTEgQEAKIAkJfQogCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKIAl9Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBjYXJkX3NldHRpbmdzKHN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYsIGRldl9saW5rX3QgKmxpbmssIGludCAqbmV3X25hbWUpCitzdGF0aWMgdm9pZCBjYXJkX3NldHRpbmdzKHN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgKm5ld19uYW1lKQogewogCWludCByYzsKIAl0dXBsZV90IHR1cGxlOwpAQCAtMzcxLDE2ICszNzAsMTYgQEAKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwogCi0JcmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmstPmhhbmRsZSwgJnR1cGxlKTsKKwlyYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKIAl3aGlsZShyYyA9PSBDU19TVUNDRVNTKSB7Ci0JCXJjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmstPmhhbmRsZSwgJnR1cGxlKTsKKwkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAkJaWYocmMgIT0gQ1NfU1VDQ0VTUykgewotCQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBHZXRUdXBsZURhdGEsIHJjKTsKKwkJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmMpOwogCQkJYnJlYWs7CiAJCX0KLQkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCXJjID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKIAkJaWYocmMgIT0gQ1NfU1VDQ0VTUykgewotCQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBQYXJzZVR1cGxlLCByYyk7CisJCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCByYyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC00NTEsNyArNDUwLDcgQEAKIAkJCURFQlVHKDIsICJVbmtub3duIHR1cGxlIGNvZGUgJWQiLCB0dXBsZS5UdXBsZUNvZGUpOwogCQl9CiAKLQkJcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUpOworCQlyYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwogCX0KIAlpZighZGV2LT5wY21jaWFfbWFwLnNpemUpCiAJCWRldi0+cGNtY2lhX21hcC5zaXplID0gTUFYX1BDTUNJQV9BRERSOwpAQCAtNDg4LDcgKzQ4Nyw3IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHBjbWNpYW10ZF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgcGNtY2lhbXRkX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgcGNtY2lhbXRkX2RldiAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IE5VTEw7CkBAIC01MDQsMTMgKzUwMywxMCBAQAogCiAJREVCVUcoMywgImxpbms9MHglcCIsIGxpbmspOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAJREVCVUcoMiwgIlZhbGlkYXRpbmcgQ0lTIik7Ci0JcmV0ID0gcGNtY2lhX3ZhbGlkYXRlX2NpcyhsaW5rLT5oYW5kbGUsICZjaXNpbmZvKTsKKwlyZXQgPSBwY21jaWFfdmFsaWRhdGVfY2lzKGxpbmssICZjaXNpbmZvKTsKIAlpZihyZXQgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIEdldFR1cGxlRGF0YSwgcmV0KTsKKwkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByZXQpOwogCX0gZWxzZSB7CiAJCURFQlVHKDIsICJWYWxpZGF0ZUNJUyBmb3VuZCAlZCBjaGFpbnMiLCBjaXNpbmZvLkNoYWlucyk7CiAJfQpAQCAtNTM4LDcgKzUzNCw3IEBACiAJcmVxLkF0dHJpYnV0ZXMgfD0gKGRldi0+cGNtY2lhX21hcC5iYW5rd2lkdGggPT0gMSkgPyBXSU5fREFUQV9XSURUSF84IDogV0lOX0RBVEFfV0lEVEhfMTY7CiAJcmVxLkJhc2UgPSAwOwogCXJlcS5BY2Nlc3NTcGVlZCA9IG1lbV9zcGVlZDsKLQlsaW5rLT53aW4gPSAod2luZG93X2hhbmRsZV90KWxpbmstPmhhbmRsZTsKKwlsaW5rLT53aW4gPSAod2luZG93X2hhbmRsZV90KWxpbms7CiAJcmVxLlNpemUgPSAoZm9yY2Vfc2l6ZSkgPyBmb3JjZV9zaXplIDw8IDIwIDogTUFYX1BDTUNJQV9BRERSOwogCWRldi0+d2luX3NpemUgPSAwOwogCkBAIC01NDYsNyArNTQyLDcgQEAKIAkJaW50IHJldDsKIAkJREVCVUcoMiwgInJlcXVlc3Rpbmcgd2luZG93IHdpdGggc2l6ZSA9ICVkS2lCIG1lbXNwZWVkID0gJWQiLAogCQkgICAgICByZXEuU2l6ZSA+PiAxMCwgcmVxLkFjY2Vzc1NwZWVkKTsKLQkJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pOworCQlyZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwogCQlERUJVRygyLCAicmV0ID0gJWQgZGV2LT53aW5fc2l6ZSA9ICVkIiwgcmV0LCBkZXYtPndpbl9zaXplKTsKIAkJaWYocmV0KSB7CiAJCQlyZXEuU2l6ZSA+Pj0gMTsKQEAgLTU2MiwxOSArNTU4LDE5IEBACiAJaWYoIWRldi0+d2luX3NpemUpIHsKIAkJZXJyKCJDYW50IGFsbG9jYXRlIG1lbW9yeSB3aW5kb3ciKTsKIAkJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCURFQlVHKDEsICJBbGxvY2F0ZWQgYSB3aW5kb3cgb2YgJWRLaUIiLCBkZXYtPndpbl9zaXplID4+IDEwKTsKIAogCS8qIEdldCB3cml0ZSBwcm90ZWN0IHN0YXR1cyAqLwotCUNTX0NIRUNLKEdldFN0YXR1cywgcGNtY2lhX2dldF9zdGF0dXMobGluay0+aGFuZGxlLCAmc3RhdHVzKSk7CisJQ1NfQ0hFQ0soR2V0U3RhdHVzLCBwY21jaWFfZ2V0X3N0YXR1cyhsaW5rLCAmc3RhdHVzKSk7CiAJREVCVUcoMiwgInN0YXR1cyB2YWx1ZTogMHgleCB3aW5kb3cgaGFuZGxlID0gMHglOC44bHgiLAogCSAgICAgIHN0YXR1cy5DYXJkU3RhdGUsICh1bnNpZ25lZCBsb25nKWxpbmstPndpbik7CiAJZGV2LT53aW5fYmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAlpZighZGV2LT53aW5fYmFzZSkgewogCQllcnIoImlvcmVtYXAoJWx1LCAldSkgZmFpbGVkIiwgcmVxLkJhc2UsIHJlcS5TaXplKTsKIAkJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCURFQlVHKDEsICJtYXBwZWQgd2luZG93IGRldiA9ICVwIHJlcS5iYXNlID0gMHglbHggYmFzZSA9ICVwIHNpemUgPSAweCV4IiwKIAkgICAgICBkZXYsIHJlcS5CYXNlLCBkZXYtPndpbl9iYXNlLCByZXEuU2l6ZSk7CkBAIC01ODQsMTcgKzU4MCwxNCBAQAogCWRldi0+cGNtY2lhX21hcC5tYXBfcHJpdl8yID0gKHVuc2lnbmVkIGxvbmcpbGluay0+d2luOwogCiAJREVCVUcoMiwgIkdldHRpbmcgY29uZmlndXJhdGlvbiIpOwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLT5oYW5kbGUsICZ0KSk7CisJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZ0KSk7CiAJREVCVUcoMiwgIlZjYyA9ICVkIFZwcDEgPSAlZCBWcHAyID0gJWQiLCB0LlZjYywgdC5WcHAxLCB0LlZwcDIpOwogCWRldi0+dnBwID0gKHZwcCkgPyB2cHAgOiB0LlZwcDE7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKLQlsaW5rLT5jb25mLlZjYyA9IHQuVmNjOwogCWlmKHNldHZwcCA9PSAyKSB7Ci0JCWxpbmstPmNvbmYuVnBwMSA9IGRldi0+dnBwOwotCQlsaW5rLT5jb25mLlZwcDIgPSBkZXYtPnZwcDsKKwkJbGluay0+Y29uZi5WcHAgPSBkZXYtPnZwcDsKIAl9IGVsc2UgewotCQlsaW5rLT5jb25mLlZwcDEgPSAwOwotCQlsaW5rLT5jb25mLlZwcDIgPSAwOworCQlsaW5rLT5jb25mLlZwcCA9IDA7CiAJfQogCiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWTsKQEAgLTYwNiw5ICs1OTksMTAgQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMDsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSB0LlByZXNlbnQ7CiAJREVCVUcoMiwgIlNldHRpbmcgQ29uZmlndXJhdGlvbiIpOwotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYocmV0ICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcmV0KTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIHJldCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmKG1lbV90eXBlID09IDEpIHsKQEAgLTYyOSw3ICs2MjMsNyBAQAogCWlmKCFtdGQpIHsKIAkJREVCVUcoMSwgIkNhbnQgZmluZCBhbiBNVEQiKTsKIAkJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZGV2LT5tdGRfaW5mbyA9IG10ZDsKQEAgLTY1NCw3ICs2NDgsNiBAQAogCSAgIHVzZSB0aGUgZmFzdGVyIG5vbi1yZW1hcHBpbmcgcmVhZC93cml0ZSBmdW5jdGlvbnMgKi8KIAlpZihtdGQtPnNpemUgPD0gZGV2LT53aW5fc2l6ZSkgewogCQlERUJVRygxLCAiVXNpbmcgbm9uIHJlbWFwcGluZyBtZW1vcnkgZnVuY3Rpb25zIik7Ci0JCWRldi0+cGNtY2lhX21hcC5tYXBfcHJpdl8xID0gKHVuc2lnbmVkIGxvbmcpJihkZXYtPmxpbmsuc3RhdGUpOwogCQlkZXYtPnBjbWNpYV9tYXAubWFwX3ByaXZfMiA9ICh1bnNpZ25lZCBsb25nKWRldi0+d2luX2Jhc2U7CiAJCWlmIChkZXYtPnBjbWNpYV9tYXAuYmFua3dpZHRoID09IDEpIHsKIAkJCWRldi0+cGNtY2lhX21hcC5yZWFkID0gcGNtY2lhX3JlYWQ4OwpAQCAtNjcyLDE5ICs2NjUsMTggQEAKIAkJZGV2LT5tdGRfaW5mbyA9IE5VTEw7CiAJCWVycigiQ291bGRudCByZWdpc3RlciBNVEQgZGV2aWNlIik7CiAJCXBjbWNpYW10ZF9yZWxlYXNlKGxpbmspOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlzbnByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsIHNpemVvZihkZXYtPm5vZGUuZGV2X25hbWUpLCAibXRkJWQiLCBtdGQtPmluZGV4KTsKIAlpbmZvKCJtdGQlZDogJXMiLCBtdGQtPmluZGV4LCBtdGQtPm5hbWUpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKLQlyZXR1cm47CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCXJldHVybiAwOwogCiAgY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAllcnIoIkNTIEVycm9yLCBleGl0aW5nIik7CiAJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7Ci0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogfQogCiAKQEAgLTcxMywyMSArNzA1LDE4IEBACiAgKiB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgcGNtY2lhbXRkX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBwY21jaWFtdGRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOworCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYgPSBsaW5rLT5wcml2OwogCiAJREVCVUcoMywgImxpbms9MHglcCIsIGxpbmspOwogCi0JaWYobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYgPSBsaW5rLT5wcml2OwotCQlpZihkZXYtPm10ZF9pbmZvKSB7Ci0JCQlkZWxfbXRkX2RldmljZShkZXYtPm10ZF9pbmZvKTsKLQkJCWluZm8oIm10ZCVkOiBSZW1vdmVkIiwgZGV2LT5tdGRfaW5mby0+aW5kZXgpOwotCQl9Ci0KLQkJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7CisJaWYoZGV2LT5tdGRfaW5mbykgeworCQlkZWxfbXRkX2RldmljZShkZXYtPm10ZF9pbmZvKTsKKwkJaW5mbygibXRkJWQ6IFJlbW92ZWQiLCBkZXYtPm10ZF9pbmZvLT5pbmRleCk7CiAJfQorCisJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7CiB9CiAKIApAQCAtNzM2LDEwICs3MjUsOSBAQAogICogd2l0aCBDYXJkIFNlcnZpY2VzLgogICovCiAKLXN0YXRpYyBpbnQgcGNtY2lhbXRkX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHBjbWNpYW10ZF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgcGNtY2lhbXRkX2RldiAqZGV2OwotCWRldl9saW5rX3QgKmxpbms7CiAKIAkvKiBDcmVhdGUgbmV3IG1lbW9yeSBjYXJkIGRldmljZSAqLwogCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKQEAgLTc0NywyMCArNzM1LDEzIEBACiAJREVCVUcoMSwgImRldj0weCVwIiwgZGV2KTsKIAogCW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7Ci0JbGluayA9ICZkZXYtPmxpbms7CisJZGV2LT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWTsKIAotCWxpbmstPm5leHQgPSBOVUxMOwotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlwY21jaWFtdGRfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBjbWNpYW10ZF9jb25maWcobGluayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBwY21jaWFtdGRfaWRzW10gPSB7CkBAIC03OTQsNyArNzc1LDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAicGNtY2lhbXRkIgogCX0sCi0JLnByb2JlCQk9IHBjbWNpYW10ZF9hdHRhY2gsCisJLnByb2JlCQk9IHBjbWNpYW10ZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHBjbWNpYW10ZF9kZXRhY2gsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZQk9IHBjbWNpYW10ZF9pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGNlOTk4NDUuLjA2NmUyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC01MzksOCArNTM5LDcgQEAKIAkJdW5zaWduZWQgYnVmbGVuOwogCiAJCXNrYiA9IGNwLT5yeF9za2JbcnhfdGFpbF0uc2tiOwotCQlpZiAoIXNrYikKLQkJCUJVRygpOworCQlCVUdfT04oIXNrYik7CiAKIAkJZGVzYyA9ICZjcC0+cnhfcmluZ1tyeF90YWlsXTsKIAkJc3RhdHVzID0gbGUzMl90b19jcHUoZGVzYy0+b3B0czEpOwpAQCAtNzIzLDggKzcyMiw3IEBACiAJCQlicmVhazsKIAogCQlza2IgPSBjcC0+dHhfc2tiW3R4X3RhaWxdLnNrYjsKLQkJaWYgKCFza2IpCi0JCQlCVUcoKTsKKwkJQlVHX09OKCFza2IpOwogCiAJCXBjaV91bm1hcF9zaW5nbGUoY3AtPnBkZXYsIGNwLT50eF9za2JbdHhfdGFpbF0ubWFwcGluZywKIAkJCQkgY3AtPnR4X3NrYlt0eF90YWlsXS5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTU1MCw4ICsxNTQ4LDcgQEAKIAl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KG5pY19zdGF0cy0+dHhfYWJvcnQpOwogCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUobmljX3N0YXRzLT50eF91bmRlcnJ1bik7CiAJdG1wX3N0YXRzW2krK10gPSBjcC0+Y3Bfc3RhdHMucnhfZnJhZ3M7Ci0JaWYgKGkgIT0gQ1BfTlVNX1NUQVRTKQotCQlCVUcoKTsKKwlCVUdfT04oaSAhPSBDUF9OVU1fU1RBVFMpOwogCiAJcGNpX2ZyZWVfY29uc2lzdGVudChjcC0+cGRldiwgc2l6ZW9mKCpuaWNfc3RhdHMpLCBuaWNfc3RhdHMsIGRtYSk7CiB9CkBAIC0xODU2LDggKzE4NTMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghZGV2KQotCQlCVUcoKTsKKwlCVUdfT04oIWRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpb3VubWFwKGNwLT5yZWdzKTsKIAlpZiAoY3AtPndvbF9lbmFibGVkKSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChwZGV2LCBQQ0lfRDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCmluZGV4IDY0ZTJjYWYzLi5mYWJjMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC03NjUsOCArNzY1LDcgQEAKIAlCVUdNU0coRF9EVVJJTkcsICJpbiBhcmNuZXRfaW50ZXJydXB0XG4iKTsKIAkKIAlscCA9IGRldi0+cHJpdjsKLQlpZiAoIWxwKQotCQlCVUcoKTsKKwlCVUdfT04oIWxwKTsKIAkJCiAJc3Bpbl9sb2NrKCZscC0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MHh4LmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tOTB4eC5jCmluZGV4IDQzMTUwYjIuLjBkNDU1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MHh4LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTkweHguYwpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlpZiAoIWlvICYmICFpcnEgJiYgIXNobWVtICYmICEqZGV2aWNlICYmIGNvbTkweHhfc2tpcF9wcm9iZSkKIAkJcmV0dXJuOwogCi0Jc2htZW1zID0ga3phbGxvYygoKDB4MTAwMDAtMHhhMDAwMCkgLyAweDgwMCkgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJc2htZW1zID0ga3phbGxvYygoKDB4MTAwMDAwLTB4YTAwMDApIC8gMHg4MDApICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAogCQkJIEdGUF9LRVJORUwpOwogCWlmICghc2htZW1zKQogCQlyZXR1cm47Ci0JaW9tZW0gPSBremFsbG9jKCgoMHgxMDAwMC0weGEwMDAwKSAvIDB4ODAwKSAqIHNpemVvZih2b2lkIF9faW9tZW0gKiksCisJaW9tZW0gPSBremFsbG9jKCgoMHgxMDAwMDAtMHhhMDAwMCkgLyAweDgwMCkgKiBzaXplb2Yodm9pZCBfX2lvbWVtICopLAogCQkJIEdGUF9LRVJORUwpOwogCWlmICghaW9tZW0pIHsKIAkJa2ZyZWUoc2htZW1zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCAxMzYzMDgzLi4xNGRiYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTIwNzAsMjMgKzIwNzEsNiBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotCi1zdGF0aWMgdW5zaWduZWQgY29uc3QgZXRoZXJuZXRfcG9seW5vbWlhbCA9IDB4MDRjMTFkYjdVOwotc3RhdGljIGlubGluZSB1MzIgZXRoZXJfY3JjKGludCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCi17Ci0gICAgaW50IGNyYyA9IC0xOwotCi0gICAgd2hpbGUoLS1sZW5ndGggPj0gMCkgewotCQl1bnNpZ25lZCBjaGFyIGN1cnJlbnRfb2N0ZXQgPSAqZGF0YSsrOwotCQlpbnQgYml0OwotCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrLCBjdXJyZW50X29jdGV0ID4+PSAxKQotCQkJY3JjID0gKGNyYyA8PCAxKSBeCi0JCQkJKChjcmMgPCAwKSBeIChjdXJyZW50X29jdGV0ICYgMSkgPyAKLQkJCQkgZXRoZXJuZXRfcG9seW5vbWlhbCA6IDApOwotICAgIH0KLSAgICByZXR1cm4gY3JjOwotfQotCiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDE1MDMyZjIuLmQ4MjMzZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0yLDYgKzIsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKiBGaXhlZCBieSBQZWtrYSBQaWV0aWthaW5lbiAocHBAZWUub3VsdS5maSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KICAqCiAgKiBEaXN0cmlidXRlIHVuZGVyIEdQTC4KICAqLwpAQCAtMjgsOCArMjksOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImI0NCIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC45NyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJOb3YgMzAsIDIwMDUiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS4wMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJBcHIgNywgMjAwNiIKIAogI2RlZmluZSBCNDRfREVGX01TR19FTkFCTEUJICBcCiAJKE5FVElGX01TR19EUlYJCXwgXApAQCAtMTM2LDcgKzEzNyw3IEBACiAJcmV0dXJuIHJlYWRsKGJwLT5yZWdzICsgcmVnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJ3MzIoY29uc3Qgc3RydWN0IGI0NCAqYnAsIAorc3RhdGljIGlubGluZSB2b2lkIGJ3MzIoY29uc3Qgc3RydWN0IGI0NCAqYnAsCiAJCQl1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJd3JpdGVsKHZhbCwgYnAtPnJlZ3MgKyByZWcpOwpAQCAtMjg2LDEzICsyODcsMTMgQEAKIAl2YWwgfD0gKCh1MzIpIGRhdGFbNF0pIDw8ICA4OwogCXZhbCB8PSAoKHUzMikgZGF0YVs1XSkgPDwgIDA7CiAJYnczMihicCwgQjQ0X0NBTV9EQVRBX0xPLCB2YWwpOwotCXZhbCA9IChDQU1fREFUQV9ISV9WQUxJRCB8IAorCXZhbCA9IChDQU1fREFUQV9ISV9WQUxJRCB8CiAJICAgICAgICgoKHUzMikgZGF0YVswXSkgPDwgOCkgfAogCSAgICAgICAoKCh1MzIpIGRhdGFbMV0pIDw8IDApKTsKIAlidzMyKGJwLCBCNDRfQ0FNX0RBVEFfSEksIHZhbCk7CiAJYnczMihicCwgQjQ0X0NBTV9DVFJMLCAoQ0FNX0NUUkxfV1JJVEUgfAogCQkJICAgIChpbmRleCA8PCBDQU1fQ1RSTF9JTkRFWF9TSElGVCkpKTsKLQliNDRfd2FpdF9iaXQoYnAsIEI0NF9DQU1fQ1RSTCwgQ0FNX0NUUkxfQlVTWSwgMTAwLCAxKTsJCisJYjQ0X3dhaXRfYml0KGJwLCBCNDRfQ0FNX0NUUkwsIENBTV9DVFJMX0JVU1ksIDEwMCwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2I0NF9kaXNhYmxlX2ludHMoc3RydWN0IGI0NCAqYnApCkBAIC00MTAsMjUgKzQxMSwxOCBAQAogCiBzdGF0aWMgdm9pZCBiNDRfc2V0X2Zsb3dfY3RybChzdHJ1Y3QgYjQ0ICpicCwgdTMyIGxvY2FsLCB1MzIgcmVtb3RlKQogewotCXUzMiBwYXVzZV9lbmFiID0gYnAtPmZsYWdzICYgKEI0NF9GTEFHX1RYX1BBVVNFIHwKLQkJCQkgICAgICBCNDRfRkxBR19SWF9QQVVTRSk7CisJdTMyIHBhdXNlX2VuYWIgPSAwOwogCi0JaWYgKGxvY2FsICYgQURWRVJUSVNFX1BBVVNFX0NBUCkgewotCQlpZiAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkgewotCQkJaWYgKHJlbW90ZSAmIExQQV9QQVVTRV9DQVApCi0JCQkJcGF1c2VfZW5hYiB8PSAoQjQ0X0ZMQUdfVFhfUEFVU0UgfAotCQkJCQkgICAgICAgQjQ0X0ZMQUdfUlhfUEFVU0UpOwotCQkJZWxzZSBpZiAocmVtb3RlICYgTFBBX1BBVVNFX0FTWU0pCi0JCQkJcGF1c2VfZW5hYiB8PSBCNDRfRkxBR19SWF9QQVVTRTsKLQkJfSBlbHNlIHsKLQkJCWlmIChyZW1vdGUgJiBMUEFfUEFVU0VfQ0FQKQotCQkJCXBhdXNlX2VuYWIgfD0gKEI0NF9GTEFHX1RYX1BBVVNFIHwKLQkJCQkJICAgICAgIEI0NF9GTEFHX1JYX1BBVVNFKTsKLQkJfQotCX0gZWxzZSBpZiAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkgewotCQlpZiAoKHJlbW90ZSAmIExQQV9QQVVTRV9DQVApICYmCi0JCSAgICAocmVtb3RlICYgTFBBX1BBVVNFX0FTWU0pKQotCQkJcGF1c2VfZW5hYiB8PSBCNDRfRkxBR19UWF9QQVVTRTsKKwkvKiBUaGUgZHJpdmVyIHN1cHBvcnRzIG9ubHkgcnggcGF1c2UgYnkgZGVmYXVsdCBiZWNhdXNlCisJICAgdGhlIGI0NCBtYWMgdHggcGF1c2UgbWVjaGFuaXNtIGdlbmVyYXRlcyBleGNlc3NpdmUKKwkgICBwYXVzZSBmcmFtZXMuCisJICAgVXNlIGV0aHRvb2wgdG8gdHVybiBvbiBiNDQgdHggcGF1c2UgaWYgbmVjZXNzYXJ5LgorCSAqLworCWlmICgobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQ0FQKSAmJgorCSAgICAobG9jYWwgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkpeworCQlpZiAoKHJlbW90ZSAmIExQQV9QQVVTRV9BU1lNKSAmJgorCQkgICAgIShyZW1vdGUgJiBMUEFfUEFVU0VfQ0FQKSkKKwkJCXBhdXNlX2VuYWIgfD0gQjQ0X0ZMQUdfUlhfUEFVU0U7CiAJfQogCiAJX19iNDRfc2V0X2Zsb3dfY3RybChicCwgcGF1c2VfZW5hYik7CkBAIC02MDgsOCArNjAyLDcgQEAKIAkJc3RydWN0IHJpbmdfaW5mbyAqcnAgPSAmYnAtPnR4X2J1ZmZlcnNbY29uc107CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBycC0+c2tiOwogCi0JCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHNrYiA9PSBOVUxMKTsKIAogCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAogCQkJCSBwY2lfdW5tYXBfYWRkcihycCwgbWFwcGluZyksCkBAIC02NTcsOSArNjUwLDExIEBACiAKIAkvKiBIYXJkd2FyZSBidWcgd29yay1hcm91bmQsIHRoZSBjaGlwIGlzIHVuYWJsZSB0byBkbyBQQ0kgRE1BCiAJICAgdG8vZnJvbSBhbnl0aGluZyBhYm92ZSAxR0IgOi0oICovCi0JaWYgKG1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8CisJCW1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CiAJCS8qIFNpZ2guLi4gKi8KLQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQorCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlza2IgPSBfX2Rldl9hbGxvY19za2IoUlhfUEtUX0JVRl9TWixHRlBfRE1BKTsKIAkJaWYgKHNrYiA9PSBOVUxMKQpAQCAtNjY3LDggKzY2MiwxMCBAQAogCQltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCQkJIFJYX1BLVF9CVUZfU1osCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAobWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBCNDRfRE1BX01BU0spIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsIFJYX1BLVF9CVUZfU1osUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8CisJCQltYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IEI0NF9ETUFfTUFTSykgeworCQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTk3NCw5ICs5NzEsMTAgQEAKIAl9CiAKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAobWFwcGluZyArIGxlbiA+IEI0NF9ETUFfTUFTSykgeworCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CiAJCS8qIENoaXAgY2FuJ3QgaGFuZGxlIERNQSB0by9mcm9tID4xR0IsIHVzZSBib3VuY2UgYnVmZmVyICovCi0JCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmICghZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpCisJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2IoVFhfUEtUX0JVRl9TWiwKIAkJCQkJICAgICBHRlBfQVRPTUlDfEdGUF9ETUEpOwpAQCAtOTg1LDggKzk4Myw5IEBACiAKIAkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBib3VuY2Vfc2tiLT5kYXRhLAogCQkJCQkgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKG1hcHBpbmcgKyBsZW4gPiBCNDRfRE1BX01BU0spIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsCisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQorCQkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIG1hcHBpbmcsCiAJCQkJCSBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoYm91bmNlX3NrYik7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0xMDY0LDcgKzEwNjMsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xMjEwLDcgKzEyMDksOCBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiAKLQkJaWYgKHJ4X3JpbmdfZG1hICsgc2l6ZSA+IEI0NF9ETUFfTUFTSykgeworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IocnhfcmluZ19kbWEpIHx8CisJCQlyeF9yaW5nX2RtYSArIHNpemUgPiBCNDRfRE1BX01BU0spIHsKIAkJCWtmcmVlKHJ4X3JpbmcpOwogCQkJZ290byBvdXRfZXJyOwogCQl9CkBAIC0xMjM2LDcgKzEyMzYsOCBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAotCQlpZiAodHhfcmluZ19kbWEgKyBzaXplID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcih0eF9yaW5nX2RtYSkgfHwKKwkJCXR4X3JpbmdfZG1hICsgc2l6ZSA+IEI0NF9ETUFfTUFTSykgewogCQkJa2ZyZWUodHhfcmluZyk7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KQEAgLTEzODIsNyArMTM4Myw3IEBACiAJYnczMihicCwgQjQ0X0RNQVJYX0FERFIsIGJwLT5yeF9yaW5nX2RtYSArIGJwLT5kbWFfb2Zmc2V0KTsKIAogCWJ3MzIoYnAsIEI0NF9ETUFSWF9QVFIsIGJwLT5yeF9wZW5kaW5nKTsKLQlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwkKKwlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwogCiAJYnczMihicCwgQjQ0X01JQl9DVFJMLCBNSUJfQ1RSTF9DTFJfT05fUkVBRCk7CiAKQEAgLTE1NTQsOSArMTU1NSw5IEBACiAJCQl2YWwgfD0gUlhDT05GSUdfQUxMTVVMVEk7CiAJCWVsc2UKIAkJCWkgPSBfX2I0NF9sb2FkX21jYXN0KGJwLCBkZXYpOwotCQkKKwogCQlmb3IgKDsgaSA8IDY0OyBpKyspIHsKLQkJCV9fYjQ0X2NhbV93cml0ZShicCwgemVybywgaSk7CQkJCisJCQlfX2I0NF9jYW1fd3JpdGUoYnAsIHplcm8sIGkpOwogCQl9CiAJCWJ3MzIoYnAsIEI0NF9SWENPTkZJRywgdmFsKTsKICAgICAgICAgCXZhbCA9IGJyMzIoYnAsIEI0NF9DQU1fQ1RSTCk7CkBAIC0xNzM4LDcgKzE3MzksNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xNzgzLDcgKzE3ODQsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xODk5LDcgKzE5MDAsNyBAQAogCWJwLT5jb3JlX3VuaXQgPSBzc2JfY29yZV91bml0KGJwKTsKIAlicC0+ZG1hX29mZnNldCA9IFNCX1BDSV9ETUE7CiAKLQkvKiBYWFggLSByZWFsbHkgcmVxdWlyZWQ/IAorCS8qIFhYWCAtIHJlYWxseSByZXF1aXJlZD8KIAkgICBicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfQlVHR1lfVFhQVFI7CiAgICAgICAgICAqLwogb3V0OgpAQCAtMTk0Nyw3ICsxOTQ4LDcgQEAKIAkJICAgICAgICJhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQotCQorCiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIEI0NF9ETUFfTUFTSyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sICIKQEAgLTIwNDIsOSArMjA0Myw5IEBACiAKIAlwY2lfc2F2ZV9zdGF0ZShicC0+cGRldik7CiAKLQkvKiBDaGlwIHJlc2V0IHByb3ZpZGVzIHBvd2VyIHRvIHRoZSBiNDQgTUFDICYgUENJIGNvcmVzLCB3aGljaCAKKwkvKiBDaGlwIHJlc2V0IHByb3ZpZGVzIHBvd2VyIHRvIHRoZSBiNDQgTUFDICYgUENJIGNvcmVzLCB3aGljaAogCSAqIGlzIG5lY2Vzc2FyeSBmb3IgTUFDIHJlZ2lzdGVyIGFjY2Vzcy4KLQkgKi8gCisJICovCiAJYjQ0X2NoaXBfcmVzZXQoYnApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY29tIDQ0MDAgMTAvMTAwQmFzZVQgRXRoZXJuZXQgIiwgZGV2LT5uYW1lKTsKQEAgLTIwOTIsMTAgKzIwOTMsMTAgQEAKIAogCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYnAtPmxvY2spOyAKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CiAKIAliNDRfaGFsdChicCk7Ci0JbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7IAorCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOwogCW5ldGlmX2RldmljZV9kZXRhY2goYnAtPmRldik7CiAJYjQ0X2ZyZWVfcmluZ3MoYnApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMjY3MWRhMi4uNTQxNjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTUsMTUgKzU1LDE1IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjM5IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hcmNoIDIyLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC40MCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgMjIsIDIwMDYiCiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgICg1KkhaKQogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBHaWdhYml0IEV0aGVybmV0IERyaXZlciAiIERSVl9NT0RVTEVfTkFNRSAiIHYiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBDaGFuIDxtY2hhbkBicm9hZGNvbS5jb20+Iik7CkBAIC0yOTQ1LDcgKzI5NDUsNyBAQAogCQlpbnQgYnVmX3NpemUpCiB7CiAJdTMyIHdyaXR0ZW4sIG9mZnNldDMyLCBsZW4zMjsKLQl1OCAqYnVmLCBzdGFydFs0XSwgZW5kWzRdOworCXU4ICpidWYsIHN0YXJ0WzRdLCBlbmRbNF0sICpmbGFzaF9idWZmZXIgPSBOVUxMOwogCWludCByYyA9IDA7CiAJaW50IGFsaWduX3N0YXJ0LCBhbGlnbl9lbmQ7CiAKQEAgLTI5ODUsMTIgKzI5ODUsMTkgQEAKIAkJbWVtY3B5KGJ1ZiArIGFsaWduX3N0YXJ0LCBkYXRhX2J1ZiwgYnVmX3NpemUpOwogCX0KIAorCWlmIChicC0+Zmxhc2hfaW5mby0+YnVmZmVyZWQgPT0gMCkgeworCQlmbGFzaF9idWZmZXIgPSBrbWFsbG9jKDI2NCwgR0ZQX0tFUk5FTCk7CisJCWlmIChmbGFzaF9idWZmZXIgPT0gTlVMTCkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBudnJhbV93cml0ZV9lbmQ7CisJCX0KKwl9CisKIAl3cml0dGVuID0gMDsKIAl3aGlsZSAoKHdyaXR0ZW4gPCBsZW4zMikgJiYgKHJjID09IDApKSB7CiAJCXUzMiBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgZGF0YV9zdGFydCwgZGF0YV9lbmQ7CiAJCXUzMiBhZGRyLCBjbWRfZmxhZ3M7CiAJCWludCBpOwotCQl1OCBmbGFzaF9idWZmZXJbMjY0XTsKIAogCSAgICAgICAgLyogRmluZCB0aGUgcGFnZV9zdGFydCBhZGRyICovCiAJCXBhZ2Vfc3RhcnQgPSBvZmZzZXQzMiArIHdyaXR0ZW47CkBAIC0zMDYxLDcgKzMwNjgsNyBAQAogCQl9CiAKIAkJLyogTG9vcCB0byB3cml0ZSB0aGUgbmV3IGRhdGEgZnJvbSBkYXRhX3N0YXJ0IHRvIGRhdGFfZW5kICovCi0JCWZvciAoYWRkciA9IGRhdGFfc3RhcnQ7IGFkZHIgPCBkYXRhX2VuZDsgYWRkciArPSA0LCBpKyspIHsKKwkJZm9yIChhZGRyID0gZGF0YV9zdGFydDsgYWRkciA8IGRhdGFfZW5kOyBhZGRyICs9IDQsIGkgKz0gNCkgewogCQkJaWYgKChhZGRyID09IHBhZ2VfZW5kIC0gNCkgfHwKIAkJCQkoKGJwLT5mbGFzaF9pbmZvLT5idWZmZXJlZCkgJiYKIAkJCQkgKGFkZHIgPT0gZGF0YV9lbmQgLSA0KSkpIHsKQEAgLTMxMDksNiArMzExNiw5IEBACiAJfQogCiBudnJhbV93cml0ZV9lbmQ6CisJaWYgKGJwLT5mbGFzaF9pbmZvLT5idWZmZXJlZCA9PSAwKQorCQlrZnJlZShmbGFzaF9idWZmZXIpOworCiAJaWYgKGFsaWduX3N0YXJ0IHx8IGFsaWduX2VuZCkKIAkJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2hlbHNpby9NYWtlZmlsZQppbmRleCA5MWU5Mjc4Li41NGM3OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai0kKENPTkZJR19DSEVMU0lPX1QxKSArPSBjeGdiLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JJChUT1BESVIpL2RyaXZlcnMvbmV0L2NoZWxzaW8gJChERUJVR19GTEFHUykKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbmV0L2NoZWxzaW8gJChERUJVR19GTEFHUykKIAogCiBjeGdiLW9ianMgOj0gY3hnYjIubyBlc3BpLm8gcG0zMzkzLm8gc2dlLm8gc3Vici5vIG12ODh4MjAxeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCAzMGZmOGVhLi40MzkxYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTEwOTMsOCArMTA5Myw3IEBACiAJCWlmIChsaWtlbHkoZS0+RGF0YVZhbGlkKSkgewogCQkJc3RydWN0IGZyZWVsUSAqZmwgPSAmc2dlLT5mcmVlbFFbZS0+RnJlZWxpc3RRaWRdOwogCi0JCQlpZiAodW5saWtlbHkoIWUtPlNvcCB8fCAhZS0+RW9wKSkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighZS0+U29wIHx8ICFlLT5Fb3ApOwogCQkJaWYgKHVubGlrZWx5KGUtPk9mZmxvYWQpKQogCQkJCXVuZXhwZWN0ZWRfb2ZmbG9hZChhZGFwdGVyLCBmbCk7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggMWYzNjI3NC4uMDM4NDQ3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgRFJWX1ZFUlNJT04JInYxLjE3YiIKICNkZWZpbmUgRFJWX1JFTERBVEUJIjIwMDYvMDMvMTAiCiAjaW5jbHVkZSAiZGwyay5oIgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KICAgICAgIEtFUk5fSU5GTyBEUlZfTkFNRSAiICIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICJcbiI7CQpAQCAtNzY1LDcgKzc2Niw3IEBACiAJCQlicmVhazsKIAkJc2tiID0gbnAtPnR4X3NrYnVmZltlbnRyeV07CiAJCXBjaV91bm1hcF9zaW5nbGUgKG5wLT5wZGV2LAotCQkJCSAgbnAtPnR4X3JpbmdbZW50cnldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJICBucC0+dHhfcmluZ1tlbnRyeV0uZnJhZ2luZm8gJiBETUFfNDhCSVRfTUFTSywKIAkJCQkgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaWYgKGlycSkKIAkJCWRldl9rZnJlZV9za2JfaXJxIChza2IpOwpAQCAtODkzLDcgKzg5NCw3IEBACiAJCQkvKiBTbWFsbCBza2J1ZmZzIGZvciBzaG9ydCBwYWNrZXRzICovCiAJCQlpZiAocGt0X2xlbiA+IGNvcHlfdGhyZXNoKSB7CiAJCQkJcGNpX3VubWFwX3NpbmdsZSAobnAtPnBkZXYsCi0JCQkJCQkgIGRlc2MtPmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCQkgIGRlc2MtPmZyYWdpbmZvICYgRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiX3B1dCAoc2tiID0gbnAtPnJ4X3NrYnVmZltlbnRyeV0sIHBrdF9sZW4pOwpAQCAtOTAxLDcgKzkwMiw3IEBACiAJCQl9IGVsc2UgaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3RfbGVuICsgMikpICE9IE5VTEwpIHsKIAkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobnAtPnBkZXYsCiAJCQkJICAJCQkgICAgZGVzYy0+ZnJhZ2luZm8gJiAKLQkJCQkJCQkgICAgCTB4ZmZmZmZmZmZmZmZmLAorCQkJCQkJCSAgICAJRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkJICAgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC05MTMsNyArOTE0LDcgQEAKIAkJCQlza2JfcHV0IChza2IsIHBrdF9sZW4pOwogCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShucC0+cGRldiwKIAkJCQkgIAkJCSAgICAgICBkZXNjLT5mcmFnaW5mbyAmCi0JCQkJCQkJICAgICAgIAkgMHhmZmZmZmZmZmZmZmYsCisJCQkJCQkJICAgICAgIAkgRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkJICAgICAgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl9CkBAIC0xODAwLDcgKzE4MDEsNyBAQAogCQlza2IgPSBucC0+cnhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LCAKLQkJCQkJIG5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCSBucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyAmIERNQV80OEJJVF9NQVNLLAogCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiIChza2IpOwogCQkJbnAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CkBAIC0xODEwLDcgKzE4MTEsNyBAQAogCQlza2IgPSBucC0+dHhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LCAKLQkJCQkJIG5wLT50eF9yaW5nW2ldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCSBucC0+dHhfcmluZ1tpXS5mcmFnaW5mbyAmIERNQV80OEJJVF9NQVNLLAogCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCW5wLT50eF9za2J1ZmZbaV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IGVjY2NjYTMuLmQxYzcwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTg3MCwxMyArODcwLDE2IEBACiAJKmRhdGEgPSAwOwogCiAJLyogSG9vayB1cCB0ZXN0IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLwotIAlpZiAoIXJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CisJaWYgKCFyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIFNBX1BST0JFSVJRLCBuZXRkZXYtPm5hbWUsCisJICAgICAgICAgICAgICAgICBuZXRkZXYpKSB7CiAgCQlzaGFyZWRfaW50ID0gRkFMU0U7CiAgCX0gZWxzZSBpZiAocmVxdWVzdF9pcnEoaXJxLCAmZTEwMDBfdGVzdF9pbnRyLCBTQV9TSElSUSwKIAkJCSAgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSl7CiAJCSpkYXRhID0gMTsKIAkJcmV0dXJuIC0xOwogCX0KKwlEUFJJTlRLKFBST0JFLElORk8sICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKKwkgICAgICAgIChzaGFyZWRfaW50ID8gInNoYXJlZCIgOiAidW5zaGFyZWQiKSk7CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhGRkZGRkZGRik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggNDljZDA5Ni4uOTdlNzFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjIwLDYgKzIyMCw3IEBACiBzdGF0aWMgaW50IGUxMDAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBzdGF0aWMgaW50IGUxMDAwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZW5kaWYKK3N0YXRpYyB2b2lkIGUxMDAwX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKiBmb3IgbmV0ZHVtcCAvIG5ldCBjb25zb2xlICovCkBAIC0yMzUsOCArMjM2LDkgQEAKIAkvKiBQb3dlciBNYW5hZ21lbnQgSG9va3MgKi8KICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCAgPSBlMTAwMF9zdXNwZW5kLAotCS5yZXN1bWUgICA9IGUxMDAwX3Jlc3VtZQorCS5yZXN1bWUgICA9IGUxMDAwX3Jlc3VtZSwKICNlbmRpZgorCS5zaHV0ZG93biA9IGUxMDAwX3NodXRkb3duCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwpAQCAtMzMwOCw4ICszMzEwLDcgQEAKIAogCXdoaWxlIChwb2xsX2RldiAhPSAmYWRhcHRlci0+cG9sbGluZ19uZXRkZXZbaV0pIHsKIAkJaSsrOwotCQlpZiAodW5saWtlbHkoaSA9PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzKSkKLQkJCUJVRygpOworCQlCVUdfT04oaSA9PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKIAl9CiAKIAlpZiAobGlrZWx5KGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPT0gMSkpIHsKQEAgLTM1MTgsNyArMzUxOSw3IEBACiAJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAKIAl3aGlsZSAocnhfZGVzYy0+c3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfREQpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHRfc2tiOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1OCBzdGF0dXM7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKQEAgLTM1MzYsOCArMzUzNyw2IEBACiAJCXByZWZldGNoKG5leHRfcnhkKTsKIAogCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKLQkJbmV4dF9za2IgPSBuZXh0X2J1ZmZlci0+c2tiOwotCQlwcmVmZXRjaChuZXh0X3NrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CiAKIAkJY2xlYW5lZCA9IFRSVUU7CiAJCWNsZWFuZWRfY291bnQrKzsKQEAgLTM2NjcsNyArMzY2Niw3IEBACiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKIAlzdHJ1Y3QgZTEwMDBfcHNfcGFnZSAqcHNfcGFnZTsKIAlzdHJ1Y3QgZTEwMDBfcHNfcGFnZV9kbWEgKnBzX3BhZ2VfZG1hOwotCXN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpLCBqOwogCXVpbnQzMl90IGxlbmd0aCwgc3RhdGVycjsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CkBAIC0zNjk2LDggKzM2OTUsNiBAQAogCQlwcmVmZXRjaChuZXh0X3J4ZCk7CiAKIAkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07Ci0JCW5leHRfc2tiID0gbmV4dF9idWZmZXItPnNrYjsKLQkJcHJlZmV0Y2gobmV4dF9za2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOwogCiAJCWNsZWFuZWQgPSBUUlVFOwogCQljbGVhbmVkX2NvdW50Kys7CkBAIC0zNzY5LDYgKzM3NjYsNyBAQAogCQkJcHNfcGFnZS0+cHNfcGFnZVtqXSA9IE5VTEw7CiAJCQlza2ItPmxlbiArPSBsZW5ndGg7CiAJCQlza2ItPmRhdGFfbGVuICs9IGxlbmd0aDsKKwkJCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOwogCQl9CiAKIGNvcHlkb25lOgpAQCAtNDYxMSw2ICs0NjA5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKKworc3RhdGljIHZvaWQgZTEwMDBfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJZTEwMDBfc3VzcGVuZChwZGV2LCBQTVNHX1NVU1BFTkQpOworfQorCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qCiAgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBuZXRjb25zb2xlIHRvIHNlbmQgc2ticwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXFsLmMgYi9kcml2ZXJzL25ldC9lcWwuYwppbmRleCBhYTE1NjkxLi44MTU0MzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcWwuYworKysgYi9kcml2ZXJzL25ldC9lcWwuYwpAQCAtMjAzLDggKzIwMyw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbWVtYmVyIHRvIHR1cm4gb2ZmIFZhbi1KYWNvYnNvbiBjb21wcmVzc2lvbiBvbiAiCiAJICAgICAgICJ5b3VyIHNsYXZlIGRldmljZXMuXG4iLCBkZXYtPm5hbWUpOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZlcWwtPnF1ZXVlLmFsbF9zbGF2ZXMpKQotCQlCVUcoKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmVxbC0+cXVldWUuYWxsX3NsYXZlcykpOwogCiAJZXFsLT5taW5fc2xhdmVzID0gMTsKIAllcWwtPm1heF9zbGF2ZXMgPSBFUUxfREVGQVVMVF9NQVhfU0xBVkVTOyAvKiA0IHVzdWFsbHkuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggNzYyN2E3NS4uZmViNWIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTEwNSw2ICsxMDUsOCBAQAogICoJMC41MDogMjAgSmFuIDIwMDY6IEFkZCA4MDIxcHEgdGFnZ2luZyBzdXBwb3J0LgogICoJMC41MTogMjAgSmFuIDIwMDY6IEFkZCA2NGJpdCBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZvciByaW5ncy4KICAqCTAuNTI6IDIwIEphbiAyMDA2OiBBZGQgTVNJL01TSVggc3VwcG9ydC4KKyAqCTAuNTM6IDE5IE1hciAyMDA2OiBGaXggaW5pdCBmcm9tIGxvdyBwb3dlciBtb2RlIGFuZCBhZGQgaHcgcmVzZXQuCisgKgkwLjU0OiAyMSBNYXIgMjAwNjogRml4IHNwaW4gbG9ja3MgZm9yIG11bHRpIGlycXMgYW5kIGNsZWFudXAuCiAgKgogICogS25vd24gYnVnczoKICAqIFdlIHN1c3BlY3QgdGhhdCBvbiBzb21lIGhhcmR3YXJlIG5vIFRYIGRvbmUgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLgpAQCAtMTE2LDcgKzExOCw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC41MiIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjU0IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2MCw2ICsxNjIsNyBAQAogI2RlZmluZSBERVZfSEFTX1ZMQU4gICAgICAgICAgICAweDAwMjAgIC8qIGRldmljZSBzdXBwb3J0cyB2bGFuIHRhZ2dpbmcgYW5kIHN0cmlwaW5nICovCiAjZGVmaW5lIERFVl9IQVNfTVNJICAgICAgICAgICAgIDB4MDA0MCAgLyogZGV2aWNlIHN1cHBvcnRzIE1TSSAqLwogI2RlZmluZSBERVZfSEFTX01TSV9YICAgICAgICAgICAweDAwODAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0ktWCAqLworI2RlZmluZSBERVZfSEFTX1BPV0VSX0NOVFJMICAgICAweDAxMDAgIC8qIGRldmljZSBzdXBwb3J0cyBwb3dlciBzYXZpbmdzICovCiAKIGVudW0gewogCU52UmVnSXJxU3RhdHVzID0gMHgwMDAsCkBAIC0yMDMsNiArMjA2LDggQEAKICNkZWZpbmUgTlZSRUdfTUlTQzFfSEQJCTB4MDIKICNkZWZpbmUgTlZSRUdfTUlTQzFfRk9SQ0UJMHgzYjBmM2MKIAorCU52UmVnTWFjUmVzZXQgPSAweDNjLAorI2RlZmluZSBOVlJFR19NQUNfUkVTRVRfQVNTRVJUCTB4MEYzCiAJTnZSZWdUcmFuc21pdHRlckNvbnRyb2wgPSAweDA4NCwKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9TVEFSVAkweDAxCiAJTnZSZWdUcmFuc21pdHRlclN0YXR1cyA9IDB4MDg4LApAQCAtMzI2LDYgKzMzMSwxMCBAQAogCU52UmVnTVNJWE1hcDAgPSAweDNlMCwKIAlOdlJlZ01TSVhNYXAxID0gMHgzZTQsCiAJTnZSZWdNU0lYSXJxU3RhdHVzID0gMHgzZjAsCisKKwlOdlJlZ1Bvd2VyU3RhdGUyID0gMHg2MDAsCisjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEUyX1BPV0VSVVBfTUFTSwkJMHgwRjExCisjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEUyX1BPV0VSVVBfUkVWX0EzCTB4MDAwMQogfTsKIAogLyogQmlnIGVuZGlhbjogc2hvdWxkIHdvcmssIGJ1dCBpcyB1bnRlc3RlZCAqLwpAQCAtNDE0LDcgKzQyMyw4IEBACiAjZGVmaW5lIE5WX1JYM19WTEFOX1RBR19NQVNLCSgweDAwMDBGRkZGKQogCiAvKiBNaXNjZWxhbmVvdXMgaGFyZHdhcmUgcmVsYXRlZCBkZWZpbmVzOiAqLwotI2RlZmluZSBOVl9QQ0lfUkVHU1oJCTB4MjcwCisjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIxICAgICAgCTB4MjcwCisjZGVmaW5lIE5WX1BDSV9SRUdTWl9WRVIyICAgICAgCTB4NjA0CiAKIC8qIHZhcmlvdXMgdGltZW91dCBkZWxheXM6IGFsbCBpbiB1c2VjICovCiAjZGVmaW5lIE5WX1RYUlhfUkVTRVRfREVMQVkJNApAQCAtNDMxLDYgKzQ0MSw3IEBACiAjZGVmaW5lIE5WX01JSUJVU1lfREVMQVkJNTAKICNkZWZpbmUgTlZfTUlJUEhZX0RFTEFZCTEwCiAjZGVmaW5lIE5WX01JSVBIWV9ERUxBWU1BWAkxMDAwMAorI2RlZmluZSBOVl9NQUNfUkVTRVRfREVMQVkJNjQKIAogI2RlZmluZSBOVl9XQUtFVVBQQVRURVJOUwk1CiAjZGVmaW5lIE5WX1dBS0VVUE1BU0tFTlRSSUVTCTQKQEAgLTU1Miw2ICs1NjMsOCBAQAogCXUzMiBkZXNjX3ZlcjsKIAl1MzIgdHhyeGN0bF9iaXRzOwogCXUzMiB2bGFuY3RsX2JpdHM7CisJdTMyIGRyaXZlcl9kYXRhOworCXUzMiByZWdpc3Rlcl9zaXplOwogCiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCkBAIC02OTgsNiArNzExLDcyIEBACiAJfQogfQogCitzdGF0aWMgaW50IHVzaW5nX211bHRpX2lycXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKKwkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYKKwkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG52X2VuYWJsZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IpOworCQllbHNlCisJCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwl9IGVsc2UgeworCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CisJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yKTsKKwkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOworCX0KK30KKworc3RhdGljIHZvaWQgbnZfZGlzYWJsZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CisJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJfQorfQorCisvKiBJbiBNU0lYIG1vZGUsIGEgd3JpdGUgdG8gaXJxbWFzayBiZWhhdmVzIGFzIFhPUiAqLworc3RhdGljIHZvaWQgbnZfZW5hYmxlX2h3X2ludGVycnVwdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG1hc2spCit7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKworCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKK30KKworc3RhdGljIHZvaWQgbnZfZGlzYWJsZV9od19pbnRlcnJ1cHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBtYXNrKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCisJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7CisJCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9IGVsc2UgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9FTkFCTEVEKQorCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSUlycU1hc2spOworCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfQorfQorCiAjZGVmaW5lIE1JSV9SRUFECSgtMSkKIC8qIG1paV9ydzogcmVhZC93cml0ZSBhIHJlZ2lzdGVyIG9uIHRoZSBQSFkuCiAgKgpAQCAtOTE5LDYgKzk5OCwyNCBAQAogCXBjaV9wdXNoKGJhc2UpOwogfQogCitzdGF0aWMgdm9pZCBudl9tYWNfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9tYWNfcmVzZXRcbiIsIGRldi0+bmFtZSk7CisJd3JpdGVsKE5WUkVHX1RYUlhDVExfQklUMiB8IE5WUkVHX1RYUlhDVExfUkVTRVQgfCBucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJcGNpX3B1c2goYmFzZSk7CisJd3JpdGVsKE5WUkVHX01BQ19SRVNFVF9BU1NFUlQsIGJhc2UgKyBOdlJlZ01hY1Jlc2V0KTsKKwlwY2lfcHVzaChiYXNlKTsKKwl1ZGVsYXkoTlZfTUFDX1JFU0VUX0RFTEFZKTsKKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnTWFjUmVzZXQpOworCXBjaV9wdXNoKGJhc2UpOworCXVkZWxheShOVl9NQUNfUkVTRVRfREVMQVkpOworCXdyaXRlbChOVlJFR19UWFJYQ1RMX0JJVDIgfCBucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJcGNpX3B1c2goYmFzZSk7Cit9CisKIC8qCiAgKiBudl9nZXRfc3RhdHM6IGRldi0+Z2V0X3N0YXRzIGZ1bmN0aW9uCiAgKiBHZXQgbGF0ZXN0IHN0YXRzIHZhbHVlIGZyb20gdGhlIG5pYy4KQEAgLTk4OSwyNCArMTA4NiwyNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0KLQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCi0JICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7Ci0JCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJfQogCWlmIChudl9hbGxvY19yeChkZXYpKSB7Ci0JCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCWlmICghbnAtPmluX3NodXRkb3duKQogCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJfQotCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB8fAotCSAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSAmJiAKLQkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpIHsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikpIHsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQorCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZW5hYmxlX2lycShkZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOwogCX0KQEAgLTEzMzEsNyArMTQyOSw3IEBACiAJCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylucC0+cmluZ19hZGRyLAogCQkJCW5wLT5uZXh0X3R4LCBucC0+bmljX3R4KTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER1bXBpbmcgdHggcmVnaXN0ZXJzXG4iLCBkZXYtPm5hbWUpOwotCQlmb3IgKGk9MDtpPDB4NDAwO2krPSAzMikgeworCQlmb3IgKGk9MDtpPD1ucC0+cmVnaXN0ZXJfc2l6ZTtpKz0gMzIpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiUzeDogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAogCQkJCQlpLAogCQkJCQlyZWFkbChiYXNlICsgaSArIDApLCByZWFkbChiYXNlICsgaSArIDQpLApAQCAtMTYzOCwxNSArMTczNiw3IEBACiAJCSAqIGd1ZXNzZWQsIHRoZXJlIGlzIHByb2JhYmx5IGEgc2ltcGxlciBhcHByb2FjaC4KIAkJICogQ2hhbmdpbmcgdGhlIE1UVSBpcyBhIHJhcmUgZXZlbnQsIGl0IHNob3VsZG4ndCBtYXR0ZXIuCiAJCSAqLwotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkJICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpICYmIAotCQkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpIHsKLQkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKLQkJfSBlbHNlIHsKLQkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7Ci0JCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwotCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yKTsKLQkJfQorCQludl9kaXNhYmxlX2lycShkZXYpOwogCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwpAQCAtMTY3OSwxNSArMTc2OSw3IEBACiAJCW52X3N0YXJ0X3R4KGRldik7CiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7Ci0JCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB8fAotCQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCi0JCSAgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSA9PSAweDEpKSkgewotCQkJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JCX0gZWxzZSB7Ci0JCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7Ci0JCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7Ci0JCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7Ci0JCX0KKwkJbnZfZW5hYmxlX2lycShkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwNzgsMTYgKzIxNjAsMTYgQEAKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7CiAKLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJbnZfdHhfZG9uZShkZXYpOwotCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCiAJCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpIHsKIAkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKIAkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKIAkJfQogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwogCQkJd3JpdGVsKE5WUkVHX0lSUV9UWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CkBAIC0yMDk3LDcgKzIxNzksNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfdHguXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjEyNywxNCArMjIwOSwxNCBAQAogCQkKIAkJbnZfcnhfcHJvY2VzcyhkZXYpOwogCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKIAkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQl9CiAJCQogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwogCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CkBAIC0yMTQ0LDcgKzIyMjYsNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfcnguXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjE3MywxNCArMjI1NSwxNCBAQAogCQkJYnJlYWs7CiAJCQogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJfQogCQlpZiAobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnZfbGlua2NoYW5nZShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CiAJCX0KIAkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpIHsKQEAgLTIxODgsNyArMjI3MCw3IEBACiAJCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7CiAJCX0KIAkJaWYgKGkgPiBtYXhfaW50ZXJydXB0X3dvcmspIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KIAkJCXdyaXRlbChOVlJFR19JUlFfT1RIRVIsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CkBAIC0yMTk4LDcgKzIyODAsNyBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfb3RoZXIuXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjIyMSwxMCArMjMwMywxMSBAQAogCSAqIG52X25pY19pcnEgYmVjYXVzZSB0aGF0IG1heSBkZWNpZGUgdG8gZG8gb3RoZXJ3aXNlCiAJICovCiAKLQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCi0JICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7Ci0JCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCQltYXNrID0gbnAtPmlycW1hc2s7CiAJfSBlbHNlIHsKIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfUlhfQUxMKSB7CkBAIC0yMjQ3LDExICsyMzMwLDEyIEBACiAJd3JpdGVsKG1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCXBjaV9wdXNoKGJhc2UpOwogCi0JaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHx8IAotCSAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSAmJiAKLQkgICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykgPT0gMHgxKSkpIHsKKwlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgewogCQludl9uaWNfaXJxKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CisJCWVsc2UKKwkJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JYX0FMTCkgewogCQkJbnZfbmljX2lycV9yeCgoaW50KSAwLCAodm9pZCAqKSBkYXRhLCAoc3RydWN0IHB0X3JlZ3MgKikgTlVMTCk7CkBAIC0yNDg4LDExICsyNTcyLDExIEBACiB9CiAKICNkZWZpbmUgRk9SQ0VERVRIX1JFR1NfVkVSCTEKLSNkZWZpbmUgRk9SQ0VERVRIX1JFR1NfU0laRQkweDQwMCAvKiAyNTYgMzItYml0IHJlZ2lzdGVycyAqLwogCiBzdGF0aWMgaW50IG52X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBGT1JDRURFVEhfUkVHU19TSVpFOworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG5wLT5yZWdpc3Rlcl9zaXplOwogfQogCiBzdGF0aWMgdm9pZCBudl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpidWYpCkBAIC0yNTA0LDcgKzI1ODgsNyBAQAogCiAJcmVncy0+dmVyc2lvbiA9IEZPUkNFREVUSF9SRUdTX1ZFUjsKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7Ci0JZm9yIChpPTA7aTxGT1JDRURFVEhfUkVHU19TSVpFL3NpemVvZih1MzIpO2krKykKKwlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJcmJ1ZltpXSA9IHJlYWRsKGJhc2UgKyBpKnNpemVvZih1MzIpKTsKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIH0KQEAgLTI1MzEsNiArMjYxNSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBORVRJRl9GX1RTTworc3RhdGljIGludCBudl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSkKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIHZhbHVlKTsKKwllbHNlCisJCXJldHVybiB2YWx1ZSA/IC1FT1BOT1RTVVBQIDogMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBudl9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtMjU0Miw2ICsyNjM4LDEwIEBACiAJLmdldF9yZWdzID0gbnZfZ2V0X3JlZ3MsCiAJLm53YXlfcmVzZXQgPSBudl9ud2F5X3Jlc2V0LAogCS5nZXRfcGVybV9hZGRyID0gZXRodG9vbF9vcF9nZXRfcGVybV9hZGRyLAorI2lmZGVmIE5FVElGX0ZfVFNPCisJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gPSBudl9zZXRfdHNvCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIG52X3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKQEAgLTI1OTgsNiArMjY5OCwxMTMgQEAKIAl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnTVNJWE1hcDEpIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOwogfQogCitzdGF0aWMgaW50IG52X3JlcXVlc3RfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJaW50IHJldCA9IDE7CisJaW50IGk7CisKKwlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIHsKKwkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7CisJCQlucC0+bXNpX3hfZW50cnlbaV0uZW50cnkgPSBpOworCQl9CisJCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5wLT5wY2lfZGV2LCBucC0+bXNpX3hfZW50cnksIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSkpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKKwkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKSB7CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CisJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOworCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJfQorCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZnJlZV9yeDsKKwkJCQl9CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKKwkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdvdG8gb3V0X2ZyZWVfdHg7CisJCQkJfQorCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmVjdG9yICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfUlgsIE5WUkVHX0lSUV9SWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfVFgsIE5WUkVHX0lSUV9UWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfT1RIRVIsIE5WUkVHX0lSUV9PVEhFUik7CisJCQl9IGVsc2UgeworCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwgaW50ZXJydXB0cyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZXJyOworCQkJCX0KKworCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJfQorCQl9CisJfQorCWlmIChyZXQgIT0gMCAmJiBucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0NBUEFCTEUpIHsKKwkJaWYgKChyZXQgPSBwY2lfZW5hYmxlX21zaShucC0+cGNpX2RldikpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0VOQUJMRUQ7CisJCQlpZiAocmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCXBjaV9kaXNhYmxlX21zaShucC0+cGNpX2Rldik7CisJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX0VOQUJMRUQ7CisJCQkJZ290byBvdXRfZXJyOworCQkJfQorCisJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB2ZWN0b3IgMCAqLworCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSU1hcDApOworCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSU1hcDEpOworCQkJLyogZW5hYmxlIG1zaSB2ZWN0b3IgMCAqLworCQkJd3JpdGVsKE5WUkVHX01TSV9WRUNUT1JfMF9FTkFCTEVELCBiYXNlICsgTnZSZWdNU0lJcnFNYXNrKTsKKwkJfQorCX0KKwlpZiAocmV0ICE9IDApIHsKKwkJaWYgKHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0dXJuIDA7CitvdXRfZnJlZV90eDoKKwlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsIGRldik7CitvdXRfZnJlZV9yeDoKKwlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsIGRldik7CitvdXRfZXJyOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBudl9mcmVlX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKKwkJCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsIGRldik7CisJCX0KKwkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJZnJlZV9pcnEobnAtPnBjaV9kZXYtPmlycSwgZGV2KTsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkgeworCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKKwkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IG52X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjYwOCw2ICsyODE1LDggQEAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIm52X29wZW46IGJlZ2luXG4iKTsKIAogCS8qIDEpIGVyYXNlIHByZXZpb3VzIG1pc2NvbmZpZ3VyYXRpb24gKi8KKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRSTCkKKwkJbnZfbWFjX3Jlc2V0KGRldik7CiAJLyogNC4xLTE6IHN0b3AgYWRhcHRlcjogaWdub3JlZCwgNC4zIHNlZW1zIHRvIGJlIG92ZXJraWxsICovCiAJd3JpdGVsKE5WUkVHX01DQVNUQUREUkFfRk9SQ0UsIGJhc2UgKyBOdlJlZ011bHRpY2FzdEFkZHJBKTsKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnTXVsdGljYXN0QWRkckIpOwpAQCAtMjY4OCw4NiArMjg5NywxOCBAQAogCXVkZWxheSgxMCk7CiAJd3JpdGVsKHJlYWRsKGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUpIHwgTlZSRUdfUE9XRVJTVEFURV9WQUxJRCwgYmFzZSArIE52UmVnUG93ZXJTdGF0ZSk7CiAKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJbnZfZGlzYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgbnAtPmlycW1hc2spOwogCXBjaV9wdXNoKGJhc2UpOwogCXdyaXRlbChOVlJFR19NSUlTVEFUX01BU0syLCBiYXNlICsgTnZSZWdNSUlTdGF0dXMpOwogCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CiAJcGNpX3B1c2goYmFzZSk7CiAKLQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIHsKLQkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7Ci0JCQlucC0+bXNpX3hfZW50cnlbaV0uZW50cnkgPSBpOwotCQl9Ci0JCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5wLT5wY2lfZGV2LCBucC0+bXNpX3hfZW50cnksIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSkpID09IDApIHsKLQkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKLQkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKSB7Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9kcmFpbjsKLQkJCQl9Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIHR4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgJm52X25pY19pcnFfdHgsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9kcmFpbjsKLQkJCQl9Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKLQkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JCQkJCWdvdG8gb3V0X2RyYWluOwotCQkJCX0KLQotCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmVjdG9yICovCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOwotCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfUlgsIE5WUkVHX0lSUV9SWF9BTEwpOwotCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfVFgsIE5WUkVHX0lSUV9UWF9BTEwpOwotCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfT1RIRVIsIE5WUkVHX0lSUV9PVEhFUik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwgaW50ZXJydXB0cyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKLQkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKLQkJCQkJZ290byBvdXRfZHJhaW47Ci0JCQkJfQotCi0JCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDApOwotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAwICYmIG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfQ0FQQUJMRSkgewotCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpKG5wLT5wY2lfZGV2KSkgPT0gMCkgewotCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfRU5BQkxFRDsKLQkJCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKLQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKLQkJCQlnb3RvIG91dF9kcmFpbjsKLQkJCX0KLQotCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAwKTsKLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAxKTsKLQkJCS8qIGVuYWJsZSBtc2kgdmVjdG9yIDAgKi8KLQkJCXdyaXRlbChOVlJFR19NU0lfVkVDVE9SXzBfRU5BQkxFRCwgYmFzZSArIE52UmVnTVNJSXJxTWFzayk7Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKQotCQkJZ290byBvdXRfZHJhaW47CisJaWYgKG52X3JlcXVlc3RfaXJxKGRldikpIHsKKwkJZ290byBvdXRfZHJhaW47CiAJfQogCiAJLyogYXNrIGZvciBpbnRlcnJ1cHRzICovCi0Jd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAl3cml0ZWwoTlZSRUdfTUNBU1RBRERSQV9GT1JDRSwgYmFzZSArIE52UmVnTXVsdGljYXN0QWRkckEpOwpAQCAtMjgxMSw3ICsyOTUyLDYgQEAKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2U7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJbnAtPmluX3NodXRkb3duID0gMTsKQEAgLTI4MjksMzEgKzI5NjksMTMgQEAKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljIG9yIHdlIHdpbGwgbG9jayB1cCAqLwogCWJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7Ci0JCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JfSBlbHNlIHsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkKLQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lJcnFNYXNrKTsKLQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCX0KKwludl9kaXNhYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CiAJcGNpX3B1c2goYmFzZSk7CiAJZHByaW50ayhLRVJOX0lORk8gIiVzOiBJcnFtYXNrIGlzIHplcm8gYWdhaW5cbiIsIGRldi0+bmFtZSk7CiAKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAotCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgewotCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKLQkJCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsIGRldik7Ci0JCX0KLQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JfSBlbHNlIHsKLQkJZnJlZV9pcnEobnAtPnBjaV9kZXYtPmlycSwgZGV2KTsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkgewotCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKLQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOwotCQl9Ci0JfQorCW52X2ZyZWVfaXJxKGRldik7CiAKIAlkcmFpbl9yaW5nKGRldik7CiAKQEAgLTI4NzgsNiArMzAwMCw3IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXU4IF9faW9tZW0gKmJhc2U7CiAJaW50IGVyciwgaTsKKwl1MzIgcG93ZXJzdGF0ZTsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVfcHJpdikpOwogCWVyciA9IC1FTk9NRU07CkBAIC0yOTEwLDYgKzMwMzMsMTEgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZGlzYWJsZTsKIAorCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiAoREVWX0hBU19WTEFOfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTCkpCisJCW5wLT5yZWdpc3Rlcl9zaXplID0gTlZfUENJX1JFR1NaX1ZFUjI7CisJZWxzZQorCQlucC0+cmVnaXN0ZXJfc2l6ZSA9IE5WX1BDSV9SRUdTWl9WRVIxOworCiAJZXJyID0gLUVJTlZBTDsKIAlhZGRyID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKQEAgLTI5MTgsNyArMzA0Niw3IEBACiAJCQkJcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCBpKSwKIAkJCQlwY2lfcmVzb3VyY2VfZmxhZ3MocGNpX2RldiwgaSkpOwogCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBjaV9kZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0gJiYKLQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIGkpID49IE5WX1BDSV9SRUdTWikgeworCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgaSkgPj0gbnAtPnJlZ2lzdGVyX3NpemUpIHsKIAkJCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgaSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMjkyOSwyNCArMzA1NywyNSBAQAogCQlnb3RvIG91dF9yZWxyZWc7CiAJfQogCisJLyogY29weSBvZiBkcml2ZXIgZGF0YSAqLworCW5wLT5kcml2ZXJfZGF0YSA9IGlkLT5kcml2ZXJfZGF0YTsKKwogCS8qIGhhbmRsZSBkaWZmZXJlbnQgZGVzY3JpcHRvciB2ZXJzaW9ucyAqLwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0hJR0hfRE1BKSB7CiAJCS8qIHBhY2tldCBmb3JtYXQgMzogc3VwcG9ydHMgNDAtYml0IGFkZHJlc3NpbmcgKi8KIAkJbnAtPmRlc2NfdmVyID0gREVTQ19WRVJfMzsKKwkJbnAtPnR4cnhjdGxfYml0cyA9IE5WUkVHX1RYUlhDVExfREVTQ18zOwogCQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfMzlCSVRfTUFTSykpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSBmYWlsZWQsIHVzaW5nIDMyLWJpdCBhZGRyZXNzaW5nIGZvciBkZXZpY2UgJXMuXG4iLAogCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIDB4MDAwMDAwN2ZmZmZmZmZmZlVMTCkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IDY0LWJpdCBETUEgKGNvbnNpc3RlbnQpIGZhaWxlZCBmb3IgZGV2aWNlICVzLlxuIiwKLQkJCQkJcGNpX25hbWUocGNpX2RldikpOwotCQkJCWdvdG8gb3V0X3JlbHJlZzsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2luZyBISUdIRE1BXG4iKTsKLQkJCX0KKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2luZyBISUdIRE1BXG4iKTsKIAkJfQotCQlucC0+dHhyeGN0bF9iaXRzID0gTlZSRUdfVFhSWENUTF9ERVNDXzM7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpX2RldiwgMHgwMDAwMDA3ZmZmZmZmZmZmVUxMKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIChjb25zaXN0ZW50KSBmYWlsZWQgZm9yIGRldmljZSAlcy5cbiIsCisJCQkgICAgICAgcGNpX25hbWUocGNpX2RldikpOworCQl9CiAJfSBlbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0xBUkdFREVTQykgewogCQkvKiBwYWNrZXQgZm9ybWF0IDI6IHN1cHBvcnRzIGp1bWJvIGZyYW1lcyAqLwogCQlucC0+ZGVzY192ZXIgPSBERVNDX1ZFUl8yOwpAQCAtMjk4Niw3ICszMTE1LDcgQEAKIAl9CiAKIAllcnIgPSAtRU5PTUVNOwotCW5wLT5iYXNlID0gaW9yZW1hcChhZGRyLCBOVl9QQ0lfUkVHU1opOworCW5wLT5iYXNlID0gaW9yZW1hcChhZGRyLCBucC0+cmVnaXN0ZXJfc2l6ZSk7CiAJaWYgKCFucC0+YmFzZSkKIAkJZ290byBvdXRfcmVscmVnOwogCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpbnAtPmJhc2U7CkBAIC0zMDYyLDYgKzMxOTEsMjAgQEAKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOwogCW5wLT53b2xlbmFibGVkID0gMDsKIAorCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BPV0VSX0NOVFJMKSB7CisJCXU4IHJldmlzaW9uX2lkOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXZpc2lvbl9pZCk7CisKKwkJLyogdGFrZSBwaHkgYW5kIG5pYyBvdXQgb2YgbG93IHBvd2VyIG1vZGUgKi8KKwkJcG93ZXJzdGF0ZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKKwkJcG93ZXJzdGF0ZSAmPSB+TlZSRUdfUE9XRVJTVEFURTJfUE9XRVJVUF9NQVNLOworCQlpZiAoKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEyIHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpICYmCisJCSAgICByZXZpc2lvbl9pZCA+PSAweEEzKQorCQkJcG93ZXJzdGF0ZSB8PSBOVlJFR19QT1dFUlNUQVRFMl9QT1dFUlVQX1JFVl9BMzsKKwkJd3JpdGVsKHBvd2Vyc3RhdGUsIGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKKwl9CisKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpIHsKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFhfVkFMSUQ7CiAJfSBlbHNlIHsKQEAgLTMyMjMsMTkgKzMzNjYsMTkgQEAKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTCwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTCwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkwsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMLAogCX0sCiAJezAsfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggNzcxZTI1ZC4uMjE4ZDMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMjEwLDcgKzIxMCw4IEBACiAJCWdvdG8gcmVnc19mYWlsOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhsb2NrKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKQEAgLTUxNSwxMSArNTE2LDEzIEBACiAJcGh5X3N0b3AocHJpdi0+cGh5ZGV2KTsKIAogCS8qIExvY2sgaXQgZG93biAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKIAogCWdmYXJfaGFsdChkZXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZwcml2LT5yeGxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJLyogRnJlZSB0aGUgSVJRcyAqLwogCWlmIChwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSKSB7CkBAIC02MDUsMTQgKzYwOCwxNSBAQAogCXRlbXB2YWwgfD0gRE1BQ1RSTF9JTklUX1NFVFRJTkdTOwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmRtYWN0cmwsIHRlbXB2YWwpOwogCi0JLyogQ2xlYXIgVEhMVCwgc28gdGhhdCB0aGUgRE1BIHN0YXJ0cyBwb2xsaW5nIG5vdyAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPnRzdGF0LCBUU1RBVF9DTEVBUl9USEFMVCk7Ci0KIAkvKiBNYWtlIHN1cmUgd2UgYXJlbid0IHN0b3BwZWQgKi8KIAl0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5kbWFjdHJsKTsKIAl0ZW1wdmFsICY9IH4oRE1BQ1RSTF9HUlMgfCBETUFDVFJMX0dUUyk7CiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+ZG1hY3RybCwgdGVtcHZhbCk7CiAKKwkvKiBDbGVhciBUSExUL1JITFQsIHNvIHRoYXQgdGhlIERNQSBzdGFydHMgcG9sbGluZyBub3cgKi8KKwlnZmFyX3dyaXRlKCZyZWdzLT50c3RhdCwgVFNUQVRfQ0xFQVJfVEhBTFQpOworCWdmYXJfd3JpdGUoJnJlZ3MtPnJzdGF0LCBSU1RBVF9DTEVBUl9SSEFMVCk7CisKIAkvKiBVbm1hc2sgdGhlIGludGVycnVwdHMgd2UgbG9vayBmb3IgKi8KIAlnZmFyX3dyaXRlKCZyZWdzLT5pbWFzaywgSU1BU0tfREVGQVVMVCk7CiB9CkBAIC05MjgsMTIgKzkzMiwxMyBAQAogCXN0cnVjdCB0eGZjYiAqZmNiID0gTlVMTDsKIAlzdHJ1Y3QgdHhiZDggKnR4YmRwOwogCXUxNiBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFVwZGF0ZSB0cmFuc21pdCBzdGF0cyAqLwogCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJLyogTG9jayBwcml2IG5vdyAqLwotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCS8qIFBvaW50IGF0IHRoZSBmaXJzdCBmcmVlIHR4IGRlc2NyaXB0b3IgKi8KIAl0eGJkcCA9IHByaXYtPmN1cl90eDsKQEAgLTEwMDQsNyArMTAwOSw3IEBACiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+dHN0YXQsIFRTVEFUX0NMRUFSX1RIQUxUKTsKIAogCS8qIFVubG9jayBwcml2ICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA0OSw3ICsxMDU0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAKIAlwcml2LT52bGdycCA9IGdycDsKIApAQCAtMTA3Niw3ICsxMDgxLDcgQEAKIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cmN0cmwsIHRlbXB2YWwpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC0xMDg1LDEyICsxMDkwLDEyIEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCiAJaWYgKHByaXYtPnZsZ3JwKQogCQlwcml2LT52bGdycC0+dmxhbl9kZXZpY2VzW3ZpZF0gPSBOVUxMOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogfQogCiAKQEAgLTExNzksNyArMTE4NCw3IEBACiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfVFhfTUFTSyk7CiAKIAkvKiBMb2NrIHByaXYgKi8KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXNwaW5fbG9jaygmcHJpdi0+dHhsb2NrKTsKIAliZHAgPSBwcml2LT5kaXJ0eV90eDsKIAl3aGlsZSAoKGJkcC0+c3RhdHVzICYgVFhCRF9SRUFEWSkgPT0gMCkgewogCQkvKiBJZiBkaXJ0eV90eCBhbmQgY3VyX3R4IGFyZSB0aGUgc2FtZSwgdGhlbiBlaXRoZXIgdGhlICovCkBAIC0xMjI0LDcgKzEyMjksNyBAQAogCWVsc2UKIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+dHhpYywgMCk7CiAKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJc3Bpbl91bmxvY2soJnByaXYtPnR4bG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMzA1LDkgKzEzMTAsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQogI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAl1MzIgdGVtcHZhbDsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBmbGFnczsKICNlbmRpZgogCiAJLyogQ2xlYXIgSUVWRU5ULCBzbyByeCBpbnRlcnJ1cHQgaXNuJ3QgY2FsbGVkIGFnYWluCkBAIC0xMzMwLDcgKzEzMzYsNyBAQAogCX0KICNlbHNlCiAKLQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlnZmFyX2NsZWFuX3J4X3JpbmcoZGV2LCBwcml2LT5yeF9yaW5nX3NpemUpOwogCiAJLyogSWYgd2UgYXJlIGNvYWxlc2NpbmcgaW50ZXJydXB0cywgdXBkYXRlIHRoZSB0aW1lciAqLwpAQCAtMTM0MSw3ICsxMzQ3LDcgQEAKIAllbHNlCiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOwogCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xNDkwLDEzICsxNDk2LDYgQEAKIAkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcnhiZCBwb2ludGVyIHRvIGJlIHRoZSBuZXh0IG9uZSAqLwogCXByaXYtPmN1cl9yeCA9IGJkcDsKIAotCS8qIElmIG5vIHBhY2tldHMgaGF2ZSBhcnJpdmVkIHNpbmNlIHRoZQotCSAqIGxhc3Qgb25lIHdlIHByb2Nlc3NlZCwgY2xlYXIgdGhlIElFVkVOVCBSWCBhbmQKLQkgKiBCU1kgYml0cyBzbyB0aGF0IGFub3RoZXIgaW50ZXJydXB0IHdvbid0IGJlCi0JICogZ2VuZXJhdGVkIHdoZW4gd2Ugc2V0IElNQVNLICovCi0JaWYgKGJkcC0+c3RhdHVzICYgUlhCRF9FTVBUWSkKLQkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfUlhfTUFTSyk7Ci0KIAlyZXR1cm4gaG93bWFueTsKIH0KIApAQCAtMTUxNiw3ICsxNTE1LDcgQEAKIAlyeF93b3JrX2xpbWl0IC09IGhvd21hbnk7CiAJKmJ1ZGdldCAtPSBob3dtYW55OwogCi0JaWYgKHJ4X3dvcmtfbGltaXQgPj0gMCkgeworCWlmIChyeF93b3JrX2xpbWl0ID4gMCkgewogCQluZXRpZl9yeF9jb21wbGV0ZShkZXYpOwogCiAJCS8qIENsZWFyIHRoZSBoYWx0IGJpdCBpbiBSU1RBVCAqLwpAQCAtMTUzMyw3ICsxNTMyLDggQEAKIAkJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOwogCX0KIAotCXJldHVybiAocnhfd29ya19saW1pdCA8IDApID8gMSA6IDA7CisJLyogUmV0dXJuIDEgaWYgdGhlcmUncyBtb3JlIHdvcmsgdG8gZG8gKi8KKwlyZXR1cm4gKHJ4X3dvcmtfbGltaXQgPiAwKSA/IDAgOiAxOwogfQogI2VuZGlmCiAKQEAgLTE2MjksNyArMTYyOSw3IEBACiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnBoeWRldjsKIAlpbnQgbmV3X3N0YXRlID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCWlmIChwaHlkZXYtPmxpbmspIHsKIAkJdTMyIHRlbXB2YWwgPSBnZmFyX3JlYWQoJnJlZ3MtPm1hY2NmZzIpOwogCQl1MzIgZWNudHJsID0gZ2Zhcl9yZWFkKCZyZWdzLT5lY250cmwpOwpAQCAtMTY5NCw3ICsxNjk0LDcgQEAKIAlpZiAobmV3X3N0YXRlICYmIG5ldGlmX21zZ19saW5rKHByaXYpKQogCQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiB9CiAKIC8qIFVwZGF0ZSB0aGUgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgY3VycmVudCBsaXN0IG9mIG11bHRpY2FzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGQzN2Q1NDAuLjEyN2M5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTY1Niw0MyArNjU2LDYyIEBACiAgKiB0aGUgYnVmZmVyIGRlc2NyaXB0b3IgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIGNvbmRpdGlvbi4KICAqLwogc3RydWN0IGdmYXJfcHJpdmF0ZSB7Ci0JLyogcG9pbnRlcnMgdG8gYXJyYXlzIG9mIHNrYnVmZnMgZm9yIHR4IGFuZCByeCAqLworCS8qIEZpZWxkcyBjb250cm9sbGVkIGJ5IFRYIGxvY2sgKi8KKwlzcGlubG9ja190IHR4bG9jazsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIHNrYnVmZnMgKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqKiB0eF9za2J1ZmY7Ci0Jc3RydWN0IHNrX2J1ZmYgKiogcnhfc2tidWZmOwogCi0JLyogaW5kaWNlcyBwb2ludGluZyB0byB0aGUgbmV4dCBmcmVlIHNiayBpbiBza2IgYXJyYXlzICovCisJLyogbmV4dCBmcmVlIHNrYiBpbiB0aGUgYXJyYXkgKi8KIAl1MTYgc2tiX2N1cnR4OwotCXUxNiBza2JfY3Vycng7CiAKLQkvKiBpbmRleCBvZiB0aGUgZmlyc3Qgc2tiIHdoaWNoIGhhc24ndCBiZWVuIHRyYW5zbWl0dGVkCi0JICogeWV0LiAqLworCS8qIEZpcnN0IHNrYiBpbiBsaW5lIHRvIGJlIHRyYW5zbWl0dGVkICovCiAJdTE2IHNrYl9kaXJ0eXR4OwogCiAJLyogQ29uZmlndXJhdGlvbiBpbmZvIGZvciB0aGUgY29hbGVzY2luZyBmZWF0dXJlcyAqLwogCXVuc2lnbmVkIGNoYXIgdHhjb2FsZXNjaW5nOwogCXVuc2lnbmVkIHNob3J0IHR4Y291bnQ7CiAJdW5zaWduZWQgc2hvcnQgdHh0aW1lOworCisJLyogQnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgdHhiZDggKnR4X2JkX2Jhc2U7CS8qIEZpcnN0IHR4IGJ1ZmZlciBkZXNjcmlwdG9yICovCisJc3RydWN0IHR4YmQ4ICpjdXJfdHg7CSAgICAgICAgLyogTmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KKwlzdHJ1Y3QgdHhiZDggKmRpcnR5X3R4OwkJLyogRmlyc3QgYnVmZmVyIGluIGxpbmUKKwkJCQkJICAgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl1bnNpZ25lZCBpbnQgdHhfcmluZ19zaXplOworCisJLyogUlggTG9ja2VkIGZpZWxkcyAqLworCXNwaW5sb2NrX3Qgcnhsb2NrOworCisJLyogc2tiIGFycmF5IGFuZCBpbmRleCAqLworCXN0cnVjdCBza19idWZmICoqIHJ4X3NrYnVmZjsKKwl1MTYgc2tiX2N1cnJ4OworCisJLyogUlggQ29hbGVzY2luZyB2YWx1ZXMgKi8KIAl1bnNpZ25lZCBjaGFyIHJ4Y29hbGVzY2luZzsKIAl1bnNpZ25lZCBzaG9ydCByeGNvdW50OwogCXVuc2lnbmVkIHNob3J0IHJ4dGltZTsKIAotCS8qIEdGQVIgYWRkcmVzc2VzICovCi0Jc3RydWN0IHJ4YmQ4ICpyeF9iZF9iYXNlOwkvKiBCYXNlIGFkZHJlc3NlcyBvZiBSeCBhbmQgVHggQnVmZmVycyAqLwotCXN0cnVjdCB0eGJkOCAqdHhfYmRfYmFzZTsKKwlzdHJ1Y3QgcnhiZDggKnJ4X2JkX2Jhc2U7CS8qIEZpcnN0IFJ4IGJ1ZmZlcnMgKi8KIAlzdHJ1Y3QgcnhiZDggKmN1cl9yeDsgICAgICAgICAgIC8qIE5leHQgZnJlZSByeCByaW5nIGVudHJ5ICovCi0Jc3RydWN0IHR4YmQ4ICpjdXJfdHg7CSAgICAgICAgLyogTmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KLQlzdHJ1Y3QgdHhiZDggKmRpcnR5X3R4OwkJLyogVGhlIFJpbmcgZW50cnkgdG8gYmUgZnJlZWQuICovCi0Jc3RydWN0IGdmYXIgX19pb21lbSAqcmVnczsJLyogUG9pbnRlciB0byB0aGUgR0ZBUiBtZW1vcnkgbWFwcGVkIFJlZ2lzdGVycyAqLwotCXUzMiBfX2lvbWVtICpoYXNoX3JlZ3NbMTZdOwotCWludCBoYXNoX3dpZHRoOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOyAvKiBsaW51eCBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgZ2Zhcl9leHRyYV9zdGF0cyBleHRyYV9zdGF0czsKLQlzcGlubG9ja190IGxvY2s7CisKKwkvKiBSWCBwYXJhbWV0ZXJzICovCisJdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcnhfYnVmZmVyX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX2luZGV4OwotCXVuc2lnbmVkIGludCB0eF9yaW5nX3NpemU7Ci0JdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZTsKKworCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKKworCS8qIFVucHJvdGVjdGVkIGZpZWxkcyAqLworCS8qIFBvaW50ZXIgdG8gdGhlIEdGQVIgbWVtb3J5IG1hcHBlZCBSZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICpyZWdzOworCisJLyogSGFzaCByZWdpc3RlcnMgYW5kIHRoZWlyIHdpZHRoICovCisJdTMyIF9faW9tZW0gKmhhc2hfcmVnc1sxNl07CisJaW50IGhhc2hfd2lkdGg7CisKKwkvKiBnbG9iYWwgcGFyYW1ldGVycyAqLwogCXVuc2lnbmVkIGludCBmaWZvX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgZmlmb19zdGFydmU7CiAJdW5zaWduZWQgaW50IGZpZm9fc3RhcnZlX29mZjsKQEAgLTcwMiwxMyArNzIxLDE1IEBACiAJCWV4dGVuZGVkX2hhc2g6MSwKIAkJYmRfc3Rhc2hfZW46MTsKIAl1bnNpZ25lZCBzaG9ydCBwYWRkaW5nOwotCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKLQkvKiBJbmZvIHN0cnVjdHVyZSBpbml0aWFsaXplZCBieSBib2FyZCBzZXR1cCBjb2RlICovCisKIAl1bnNpZ25lZCBpbnQgaW50ZXJydXB0VHJhbnNtaXQ7CiAJdW5zaWduZWQgaW50IGludGVycnVwdFJlY2VpdmU7CiAJdW5zaWduZWQgaW50IGludGVycnVwdEVycm9yOworCisJLyogaW5mbyBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgYnkgcGxhdGZvcm0gY29kZSAqLwogCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKmVpbmZvOwogCisJLyogUEhZIHN0dWZmICovCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsKIAlpbnQgb2xkc3BlZWQ7CkBAIC03MTYsNiArNzM3LDEwIEBACiAJaW50IG9sZGxpbms7CiAKIAl1aW50MzJfdCBtc2dfZW5hYmxlOworCisJLyogTmV0d29yayBTdGF0aXN0aWNzICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IGdmYXJfZXh0cmFfc3RhdHMgZXh0cmFfc3RhdHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHUzMiBnZmFyX3JlYWQodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggNWRlN2IyZS4uZDY5Njk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTQ1NSwxMCArNDU1LDE0IEBACiAKIAkJLyogSGFsdCBUWCBhbmQgUlgsIGFuZCBwcm9jZXNzIHRoZSBmcmFtZXMgd2hpY2gKIAkJICogaGF2ZSBhbHJlYWR5IGJlZW4gcmVjZWl2ZWQgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2soJnByaXYtPnJ4bG9jayk7CisKIAkJZ2Zhcl9oYWx0KGRldik7CiAJCWdmYXJfY2xlYW5fcnhfcmluZyhkZXYsIHByaXYtPnJ4X3Jpbmdfc2l6ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlzcGluX3VubG9jaygmcHJpdi0+cnhsb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAKIAkJLyogTm93IHdlIHRha2UgZG93biB0aGUgcmluZ3MgdG8gcmVidWlsZCB0aGVtICovCiAJCXN0b3BfZ2ZhcihkZXYpOwpAQCAtNDg4LDEwICs0OTIsMTQgQEAKIAogCQkvKiBIYWx0IFRYIGFuZCBSWCwgYW5kIHByb2Nlc3MgdGhlIGZyYW1lcyB3aGljaAogCQkgKiBoYXZlIGFscmVhZHkgYmVlbiByZWNlaXZlZCAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CisJCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKKwogCQlnZmFyX2hhbHQoZGV2KTsKIAkJZ2Zhcl9jbGVhbl9yeF9yaW5nKGRldiwgcHJpdi0+cnhfcmluZ19zaXplKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCXNwaW5fdW5sb2NrKCZwcml2LT5yeGxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCQkvKiBOb3cgd2UgdGFrZSBkb3duIHRoZSByaW5ncyB0byByZWJ1aWxkIHRoZW0gKi8KIAkJc3RvcF9nZmFyKGRldik7CkBAIC01MjMsNyArNTMxLDcgQEAKIAlpZiAoIShwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAJZ2Zhcl9oYWx0KGRldik7CiAKIAlpZiAoZGF0YSkKQEAgLTUzMiw3ICs1NDAsNyBAQAogCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07CiAKIAlnZmFyX3N0YXJ0KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggNTFlZjE4MS4uYTZkNWM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtODIsNyArODIsNyBAQAogCWVsc2UKIAkJcmV0dXJuIGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAKIAkvKiBTZXQgdGhlIG5ldyBzdGFzaGluZyB2YWx1ZSAqLwogCXByaXYtPmJkX3N0YXNoX2VuID0gbmV3X3NldHRpbmc7CkBAIC05Niw3ICs5Niw3IEBACiAKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5hdHRyLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlpZiAobGVuZ3RoID4gcHJpdi0+cnhfYnVmZmVyX3NpemUpCiAJCXJldHVybiBjb3VudDsKIApAQCAtMTQyLDcgKzE0Miw3IEBACiAKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5hdHRyLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTE2Niw3ICsxNjYsNyBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIAlpZiAoaW5kZXggPiBwcml2LT5yeF9zdGFzaF9zaXplKQogCQlyZXR1cm4gY291bnQ7CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogCXRlbXAgfD0gQVRUUkVMSV9FSShpbmRleCk7CiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+YXR0cmVsaSwgZmxhZ3MpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjA1LDcgKzIwNSw3IEBACiAJaWYgKGxlbmd0aCA+IEdGQVJfTUFYX0ZJRk9fVEhSRVNIT0xEKQogCQlyZXR1cm4gY291bnQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXByaXYtPmZpZm9fdGhyZXNob2xkID0gbGVuZ3RoOwogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl0ZW1wIHw9IGxlbmd0aDsKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5maWZvX3R4X3RociwgdGVtcCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAKIAlpZiAobnVtID4gR0ZBUl9NQVhfRklGT19TVEFSVkUpCiAJCXJldHVybiBjb3VudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+Zmlmb19zdGFydmUgPSBudW07CiAKQEAgLTI0OSw3ICsyNDksNyBAQAogCXRlbXAgfD0gbnVtOwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmZpZm9fdHhfc3RhcnZlLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTI3NCw3ICsyNzQsNyBAQAogCWlmIChudW0gPiBHRkFSX01BWF9GSUZPX1NUQVJWRV9PRkYpCiAJCXJldHVybiBjb3VudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+Zmlmb19zdGFydmVfb2ZmID0gbnVtOwogCkBAIC0yODMsNyArMjgzLDcgQEAKIAl0ZW1wIHw9IG51bTsKIAlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5maWZvX3R4X3N0YXJ2ZV9zaHV0b2ZmLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKaW5kZXggNzlhOGZiYy4uMGQ1ZmNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKQEAgLTU4Miw3ICs1ODIsNiBAQAogCQlJTklUX1dPUksoJnByaXYtPnJ4X3dvcmssIHJ4X2JoLCBwcml2KTsKIAkJZGV2LT5wcml2ID0gcHJpdjsKIAkJc3ByaW50ZihkZXYtPm5hbWUsICJkbWFzY2MlaSIsIDIgKiBuICsgaSk7Ci0JCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAkJZGV2LT5iYXNlX2FkZHIgPSBjYXJkX2Jhc2U7CiAJCWRldi0+aXJxID0gaXJxOwogCQlkZXYtPm9wZW4gPSBzY2Nfb3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKaW5kZXggNmFjZTBlOS4uNTkyNzc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKQEAgLTE1NTAsNyArMTU1MCw2IEBACiAKIHN0YXRpYyB2b2lkIHNjY19uZXRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICAgPSAxNjsJLyogc2hvdWxkIGJlIGVub3VnaC4uLiAqLwogCiAJZGV2LT5vcGVuICAgICAgICAgICAgPSBzY2NfbmV0X29wZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCmluZGV4IGZlMjI0NzkuLmI0OTg4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCkBAIC0xMDk4LDcgKzEwOTgsNiBAQAogCiAJZGV2LT5iYXNlX2FkZHIgPSB5cC0+aW9iYXNlOwogCWRldi0+aXJxID0geXAtPmlycTsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAKIAlkZXYtPm9wZW4gPSB5YW1fb3BlbjsKIAlkZXYtPnN0b3AgPSB5YW1fY2xvc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeWRyYS5oIGIvZHJpdmVycy9uZXQvaHlkcmEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0MTQxNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9oeWRyYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCSRMaW51eDogaHlkcmEuaCx2IDEuMCAxOTk0LzEwLzI2IDAyOjAzOjQ3IGNnZCBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk0IFRpbW8gUm9zc2kKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSAgVGltbyBSb3NzaQotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogVGhlIEh5ZHJhIFN5c3RlbXMgY2FyZCB1c2VzIHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yCi0gKiA4MzkwIE5JQyAoTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlcikgY2hpcCwgbG9jYXRlZAotICogYXQgY2FyZCBiYXNlIGFkZHJlc3MgKyAweGZmZTEuIE5JQyByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUKLSAqIG9ubHkgYXQgb2RkIGJ5dGUgYWRkcmVzc2VzLCBzbyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBtdXN0Ci0gKiBiZSBtdWx0aXBsaWVkIGJ5IHR3by4KLSAqCi0gKiBDYXJkIGFkZHJlc3MgUFJPTSBpcyBsb2NhdGVkIGF0IGNhcmQgYmFzZSArIDB4ZmZjMCAoZXZlbiBieXRlIGFkZHJlc3NlcykKLSAqCi0gKiBSQU0gc3RhcnRzIGF0IHRoZSBjYXJkIGJhc2UgYWRkcmVzcywgYW5kIGlzIDE2SyBvciA2NEsuCi0gKiBUaGUgY3VycmVudCBBbWlnYSBOZXRCU0QgaHlkcmEgZHJpdmVyIGlzIGhhcmR3aXJlZCBmb3IgMTZLLgotICogSXQgc2VlbXMgdGhhdCB0aGUgUkFNIHNob3VsZCBiZSBhY2Nlc3NlZCBhcyB3b3JkcyBvciBsb25nd29yZHMgb25seS4KLSAqCi0gKi8KLQotLyogYWRhcHRlZCBmb3IgTGludXggYnkgVG9waSBLYW5lcnZhIDAzLzI5Lzk1Ci0gICB3aXRoIG9yaWdpbmFsIGF1dGhvcidzIHBlcm1pc3Npb24gICAgICAgICAgKi8KLQotI2RlZmluZSBIWURSQV9OSUNfQkFTRSAweGZmZTEKLQotLyogUGFnZTAgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgTklDX0NSICAgICAwICAgICAgIC8qIENvbW1hbmQgcmVnaXN0ZXIgICAqLwotI2RlZmluZSBOSUNfUFNUQVJUICgxKjIpICAgLyogUGFnZSBzdGFydCAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19QU1RPUCAgKDIqMikgICAvKiBQYWdlIHN0b3AgKHdyaXRlKSAgKi8KLSNkZWZpbmUgTklDX0JORFJZICAoMyoyKSAgIC8qIEJvdW5kYXJ5IHBvaW50ZXIgICAqLwotI2RlZmluZSBOSUNfVFNSICAgICg0KjIpICAgLyogVHJhbnNtaXQgc3RhdHVzIChyZWFkKSAqLwotI2RlZmluZSBOSUNfVFBTUiAgICg0KjIpICAgLyogVHJhbnNtaXQgcGFnZSBzdGFydCAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19OQ1IgICAgKDUqMikgICAvKiBOdW1iZXIgb2YgY29sbGlzaW9ucywgcmVhZCAgKi8KLSNkZWZpbmUgTklDX1RCQ1IwICAoNSoyKSAgIC8qIFRyYW5zbWl0IGJ5dGUgY291bnQgbG93ICh3cml0ZSkgICovCi0jZGVmaW5lIE5JQ19GSUZPICAgKDYqMikgICAvKiBGSUZPIHJlZy4gKHJlYWQpICAgKi8KLSNkZWZpbmUgTklDX1RCQ1IxICAoNioyKSAgIC8qIFRyYW5zbWl0IGJ5dGUgY291bnQgaGlnaCAod3JpdGUpICovCi0jZGVmaW5lIE5JQ19JU1IgICAgKDcqMikgICAvKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE5JQ19SQkNSMCAgKDB4YSoyKSAvKiBSZW1vdGUgYnl0ZSBjb3VudCBsb3cgKHdyaXRlKSAgKi8KLSNkZWZpbmUgTklDX1JCQ1IxICAoMHhiKjIpIC8qIFJlbW90ZSBieXRlIGNvdW50IGhpZ2ggKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfUlNSICAgICgweGMqMikgLyogUmVjZWl2ZSBzdGF0dXMgKHJlYWQpICAqLwotI2RlZmluZSBOSUNfUkNSICAgICgweGMqMikgLyogUmVjZWl2ZSBjb25maWcgKHdyaXRlKSAqLwotI2RlZmluZSBOSUNfQ05UUjAgICgweGQqMikgLyogRnJhbWUgYWxpZ25tZW50IGVycm9yIGNvdW50IChyZWFkKSAqLwotI2RlZmluZSBOSUNfVENSICAgICgweGQqMikgLyogVHJhbnNtaXQgY29uZmlnICh3cml0ZSkgICovCi0jZGVmaW5lIE5JQ19DTlRSMSAgKDB4ZSoyKSAvKiBDUkMgZXJyb3IgY291bnRlciAocmVhZCkgKi8KLSNkZWZpbmUgTklDX0RDUiAgICAoMHhlKjIpIC8qIERhdGEgY29uZmlnICh3cml0ZSkgKi8KLSNkZWZpbmUgTklDX0NOVFIyICAoMHhmKjIpIC8qIG1pc3NlZCBwYWNrZXQgY291bnRlciAocmVhZCkgKi8KLSNkZWZpbmUgTklDX0lNUiAgICAoMHhmKjIpIC8qIEludGVycnVwdCBtYXNrIHJlZy4gKHdyaXRlKSAgKi8KLQotLyogUGFnZTEgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgTklDX1BBUjAgICAoMSoyKSAgIC8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KLSNkZWZpbmUgTklDX1BBUjEgICAoMioyKQotI2RlZmluZSBOSUNfUEFSMiAgICgzKjIpCi0jZGVmaW5lIE5JQ19QQVIzICAgKDQqMikKLSNkZWZpbmUgTklDX1BBUjQgICAoNSoyKQotI2RlZmluZSBOSUNfUEFSNSAgICg2KjIpCi0jZGVmaW5lIE5JQ19DVVJSICAgKDcqMikgICAvKiBDdXJyZW50IFJYIHJpbmctYnVmZmVyIHBhZ2UgKi8KLSNkZWZpbmUgTklDX01BUjAgICAoOCoyKSAgIC8qIE11bHRpY2FzdCBhZGRyZXNzICovCi0jZGVmaW5lIE5JQ19NQVIxICAgKDkqMikKLSNkZWZpbmUgTklDX01BUjIgICAoMHhhKjIpCi0jZGVmaW5lIE5JQ19NQVIzICAgKDB4YioyKQotI2RlZmluZSBOSUNfTUFSNCAgICgweGMqMikKLSNkZWZpbmUgTklDX01BUjUgICAoMHhkKjIpCi0jZGVmaW5lIE5JQ19NQVI2ICAgKDB4ZSoyKQotI2RlZmluZSBOSUNfTUFSNyAgICgweGYqMikKLQotLyogQ29tbWFuZCByZWdpc3RlciBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIENSX1NUT1AgICAweDAxIC8qIFN0b3AgLS0gc29mdHdhcmUgcmVzZXQgY29tbWFuZCAqLwotI2RlZmluZSBDUl9TVEFSVCAgMHgwMiAvKiBTdGFydCAqLwotI2RlZmluZSBDUl9UWFAgICAweDA0IC8qIFRyYW5zbWl0IHBhY2tldCAqLwotCi0jZGVmaW5lIENSX1JEMCAgICAweDA4IC8qIFJlbW90ZSBETUEgY21kICovCi0jZGVmaW5lIENSX1JEMSAgICAweDEwCi0jZGVmaW5lIENSX1JEMiAgICAweDIwCi0KLSNkZWZpbmUgQ1JfTk9ETUEgIENSX1JEMgotCi0jZGVmaW5lIENSX1BTMCAgICAweDQwIC8qIFBhZ2Ugc2VsZWN0ICovCi0jZGVmaW5lIENSX1BTMSAgICAweDgwCi0KLSNkZWZpbmUgQ1JfUEFHRTAgIDAKLSNkZWZpbmUgQ1JfUEFHRTEgIENSX1BTMAotI2RlZmluZSBDUl9QQUdFMiAgQ1JfUFMxCi0KLS8qIEludGVycnVwdCBzdGF0dXMgcmVnLiBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIElTUl9QUlggICAweDAxIC8qIFBhY2tldCByZWNlaXZlZCB3aXRob3V0IGVycm9ycyAqLwotI2RlZmluZSBJU1JfUFRYICAgMHgwMiAvKiBQYWNrZXQgdHJhbnNtaXR0ZWQgd2l0aG91dCBlcnJvcnMgKi8KLSNkZWZpbmUgSVNSX1JYRSAgIDB4MDQgLyogUmVjZWl2ZSBlcnJvciAgKi8KLSNkZWZpbmUgSVNSX1RYRSAgIDB4MDggLyogVHJhbnNtaXQgZXJyb3IgKi8KLSNkZWZpbmUgSVNSX09WVyAgIDB4MTAgLyogUmluZyBidWZmZXIgb3ZlcnJ1biAqLwotI2RlZmluZSBJU1JfQ05UICAgMHgyMCAvKiBDb3VudGVyIG92ZXJmbG93ICAgICovCi0jZGVmaW5lIElTUl9SREMgICAweDQwIC8qIFJlbW90ZSBETUEgY29tcGlsZSAqLwotI2RlZmluZSBJU1JfUlNUICAgMHg4MCAvKiBSZXNldCBzdGF0dXMgICAgICAqLwotCi0vKiBEYXRhIGNvbmZpZyByZWcuIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgRENSX1dUUyAgIDB4MDEgLyogV29yZCB0cmFuc2ZlciBzZWxlY3QgICovCi0jZGVmaW5lIERDUl9CT1MgICAweDAyIC8qIEJ5dGUgb3JkZXIgc2VsZWN0ICAgICAqLwotI2RlZmluZSBEQ1JfTEFTICAgMHgwNCAvKiBMb25nIGFkZHJlc3Mgc2VsZWN0ICAgKi8KLSNkZWZpbmUgRENSX0xTICAgIDB4MDggLyogTG9vcGJhY2sgc2VsZWN0ICAgICAgICovCi0jZGVmaW5lIERDUl9BUiAgICAweDEwIC8qIEF1dG8taW5pdCByZW1vdGUgICAgICAqLwotI2RlZmluZSBEQ1JfRlQwICAgMHgyMCAvKiBGSUZPIHRocmVzaG9sZCBzZWxlY3QgKi8KLSNkZWZpbmUgRENSX0ZUMSAgIDB4NDAKLQotLyogVHJhbnNtaXQgY29uZmlnIHJlZy4gZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBUQ1JfQ1JDICAweDAxIC8qIEluaGliaXQgQ1JDICovCi0jZGVmaW5lIFRDUl9MQjAgIDB4MDIgLyogTG9vcGJhY2sgY29udHJvbCAqLwotI2RlZmluZSBUQ1JfTEIxICAweDA0Ci0jZGVmaW5lIFRDUl9BVEQgIDB4MDggLyogQXV0byB0cmFuc21pdCBkaXNhYmxlICovCi0jZGVmaW5lIFRDUl9PRlNUIDB4MTAgLyogQ29sbGlzaW9uIG9mZnNldCBlbmFibGUgKi8KLQotLyogVHJhbnNtaXQgc3RhdHVzIHJlZy4gZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBUU1JfUFRYICAweDAxIC8qIFBhY2tldCB0cmFuc21pdHRlZCAqLwotI2RlZmluZSBUU1JfQ09MICAweDA0IC8qIFRyYW5zbWl0IGNvbGxpZGVkICovCi0jZGVmaW5lIFRTUl9BQlQgIDB4MDggLyogVHJhbnNtaXQgYWJvcnRlZCAqLwotI2RlZmluZSBUU1JfQ1JTICAweDEwIC8qIENhcnJpZXIgc2Vuc2UgbG9zdCAqLwotI2RlZmluZSBUU1JfRlUgICAweDIwIC8qIEZJRk8gdW5kZXJydW4gKi8KLSNkZWZpbmUgVFNSX0NESCAgMHg0MCAvKiBDRCBIZWFydGJlYXQgKi8KLSNkZWZpbmUgVFNSX09XQyAgMHg4MCAvKiBPdXQgb2YgV2luZG93IENvbGxpc2lvbiAqLwotCi0vKiBSZWNlaXZlciBjb25maWcgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBSQ1JfU0VQICAweDAxIC8qIFNhdmUgZXJyb3JlZCBwYWNrZXRzICovCi0jZGVmaW5lIFJDUl9BUiAgIDB4MDIgLyogQWNjZXB0IHJ1bnQgcGFja2V0cyAqLwotI2RlZmluZSBSQ1JfQUIgICAweDA0IC8qIEFjY2VwdCBicm9hZGNhc3QgKi8KLSNkZWZpbmUgUkNSX0FNICAgMHgwOCAvKiBBY2NlcHQgbXVsdGljYXN0ICovCi0jZGVmaW5lIFJDUl9QUk8gIDB4MTAgLyogUHJvbWlzY3VvdXMgbW9kZSAqLwotI2RlZmluZSBSQ1JfTU9OICAweDIwIC8qIE1vbml0b3IgbW9kZSAqLwotCi0vKiBSZWNlaXZlciBzdGF0dXMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBSU1JfUFJYICAweDAxIC8qIFBhY2tldCByZWNlaXZlZCB3aXRob3V0IGVycm9yICovCi0jZGVmaW5lIFJTUl9DUkMgIDB4MDIgLyogQ1JDIGVycm9yICovCi0jZGVmaW5lIFJTUl9GQUUgIDB4MDQgLyogRnJhbWUgYWxpZ25tZW50IGVycm9yICovCi0jZGVmaW5lIFJTUl9GTyAgIDB4MDggLyogRklGTyBvdmVycnVuICovCi0jZGVmaW5lIFJTUl9NUEEgIDB4MTAgLyogTWlzc2VkIHBhY2tldCAqLwotI2RlZmluZSBSU1JfUEhZICAweDIwIC8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KLSNkZWZpbmUgUlNSX0RJUyAgMHg0MCAvKiBSZWNlaXZlZCBkaXNhYmxlZCAqLwotI2RlZmluZSBSU1JfREZSICAweDgwIC8qIERlZmVycmluZyAoamFiYmVyKSAqLwotCi0vKiBIeWRyYSBTeXN0ZW0gY2FyZCBhZGRyZXNzIFBST00gb2Zmc2V0ICovCi0KLSNkZWZpbmUgSFlEUkFfQUREUlBST00gMHhmZmMwCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGNlYjk4ZmQuLjUyZDAxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCiAJCWxwYXJfcmMgPSBoX2FkZF9sb2dpY2FsX2xhbl9idWZmZXIoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLCBkZXNjLmRlc2MpOwogCQkgICAgCi0JCWlmKGxwYXJfcmMgIT0gSF9TdWNjZXNzKSB7CisJCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCQlwb29sLT5mcmVlX21hcFtmcmVlX2luZGV4XSA9IGluZGV4OwogCQkJcG9vbC0+c2tidWZmW2luZGV4XSA9IE5VTEw7CiAJCQlwb29sLT5jb25zdW1lcl9pbmRleC0tOwpAQCAtMzczLDcgKzM3Myw3IEBACiAKIAlscGFyX3JjID0gaF9hZGRfbG9naWNhbF9sYW5fYnVmZmVyKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgZGVzYy5kZXNjKTsKIAkJICAgIAotCWlmKGxwYXJfcmMgIT0gSF9TdWNjZXNzKSB7CisJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MpIHsKIAkJaWJtdmV0aF9kZWJ1Z19wcmludGsoImhfYWRkX2xvZ2ljYWxfbGFuX2J1ZmZlciBmYWlsZWQgZHVyaW5nIHJlY3ljbGUgcmM9JWxkIiwgbHBhcl9yYyk7CiAJCWlibXZldGhfcmVtb3ZlX2J1ZmZlcl9mcm9tX3Bvb2woYWRhcHRlciwgYWRhcHRlci0+cnhfcXVldWUucXVldWVfYWRkclthZGFwdGVyLT5yeF9xdWV1ZS5pbmRleF0uY29ycmVsYXRvcik7CiAJfQpAQCAtNTExLDcgKzUxMSw3IEBACiAJCQkJCSBhZGFwdGVyLT5maWx0ZXJfbGlzdF9kbWEsCiAJCQkJCSBtYWNfYWRkcmVzcyk7CiAKLQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJoX3JlZ2lzdGVyX2xvZ2ljYWxfbGFuIGZhaWxlZCB3aXRoICVsZFxuIiwgbHBhcl9yYyk7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJidWZmZXIgVENFOjB4JWx4IGZpbHRlciBUQ0U6MHglbHggcnhxIGRlc2M6MHglbHggTUFDOjB4JWx4XG4iLAogCQkJCSAgICAgYWRhcHRlci0+YnVmZmVyX2xpc3RfZG1hLApAQCAtNTI3LDcgKzUyNyw3IEBACiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJ1bmFibGUgdG8gcmVxdWVzdCBpcnEgMHgleCwgcmMgJWRcbiIsIG5ldGRldi0+aXJxLCByYyk7CiAJCWRvIHsKIAkJCXJjID0gaF9mcmVlX2xvZ2ljYWxfbGFuKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcyk7Ci0JCX0gd2hpbGUgKEhfaXNMb25nQnVzeShyYykgfHwgKHJjID09IEhfQnVzeSkpOworCQl9IHdoaWxlIChIX0lTX0xPTkdfQlVTWShyYykgfHwgKHJjID09IEhfQlVTWSkpOwogCiAJCWlibXZldGhfY2xlYW51cChhZGFwdGVyKTsKIAkJcmV0dXJuIHJjOwpAQCAtNTU2LDkgKzU1Niw5IEBACiAKIAlkbyB7CiAJCWxwYXJfcmMgPSBoX2ZyZWVfbG9naWNhbF9sYW4oYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzKTsKLQl9IHdoaWxlIChIX2lzTG9uZ0J1c3kobHBhcl9yYykgfHwgKGxwYXJfcmMgPT0gSF9CdXN5KSk7CisJfSB3aGlsZSAoSF9JU19MT05HX0JVU1kobHBhcl9yYykgfHwgKGxwYXJfcmMgPT0gSF9CVVNZKSk7CiAKLQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykKKwlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykKIAl7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJoX2ZyZWVfbG9naWNhbF9sYW4gZmFpbGVkIHdpdGggJWx4LCBjb250aW51aW5nIHdpdGggY2xvc2VcbiIsCiAJCQkJICAgICBscGFyX3JjKTsKQEAgLTY5Myw5ICs2OTMsOSBAQAogCQkJCQkgICAgIGRlc2NbNF0uZGVzYywKIAkJCQkJICAgICBkZXNjWzVdLmRlc2MsCiAJCQkJCSAgICAgY29ycmVsYXRvcik7Ci0JfSB3aGlsZSAoKGxwYXJfcmMgPT0gSF9CdXN5KSAmJiAocmV0cnlfY291bnQtLSkpOworCX0gd2hpbGUgKChscGFyX3JjID09IEhfQlVTWSkgJiYgKHJldHJ5X2NvdW50LS0pKTsKICAgICAKLQlpZihscGFyX3JjICE9IEhfU3VjY2VzcyAmJiBscGFyX3JjICE9IEhfRHJvcHBlZCkgeworCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTICYmIGxwYXJfcmMgIT0gSF9EUk9QUEVEKSB7CiAJCWludCBpOwogCQlpYm12ZXRoX2Vycm9yX3ByaW50aygidHg6IGhfc2VuZF9sb2dpY2FsX2xhbiBmYWlsZWQgd2l0aCByYz0lbGRcbiIsIGxwYXJfcmMpOwogCQlmb3IoaSA9IDA7IGkgPCA2OyBpKyspIHsKQEAgLTc4NiwxNCArNzg2LDE0IEBACiAJLyogd2UgdGhpbmsgd2UgYXJlIGRvbmUgLSByZWVuYWJsZSBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIG9uY2UgbW9yZSB0byBtYWtlIHN1cmUgd2UgYXJlIGRvbmUgKi8KIAlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgVklPX0lSUV9FTkFCTEUpOwogCi0JaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1N1Y2Nlc3MpOworCWlibXZldGhfYXNzZXJ0KGxwYXJfcmMgPT0gSF9TVUNDRVNTKTsKIAogCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldik7CiAKIAlpZihpYm12ZXRoX3J4cV9wZW5kaW5nX2J1ZmZlcihhZGFwdGVyKSAmJiBuZXRpZl9yeF9yZXNjaGVkdWxlKG5ldGRldiwgZnJhbWVzX3Byb2Nlc3NlZCkpCiAJewogCQlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywgVklPX0lSUV9ESVNBQkxFKTsKLQkJaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1N1Y2Nlc3MpOworCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7CiAJCW1vcmVfd29yayA9IDE7CiAJCWdvdG8gcmVzdGFydF9wb2xsOwogCX0KQEAgLTgxMyw3ICs4MTMsNyBAQAogCiAJaWYobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYpKSB7CiAJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLCBWSU9fSVJRX0RJU0FCTEUpOwotCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU3VjY2Vzcyk7CisJCWlibXZldGhfYXNzZXJ0KGxwYXJfcmMgPT0gSF9TVUNDRVNTKTsKIAkJX19uZXRpZl9yeF9zY2hlZHVsZShuZXRkZXYpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC04MzUsNyArODM1LDcgQEAKIAkJCQkJICAgSWJtVmV0aE1jYXN0RW5hYmxlUmVjdiB8CiAJCQkJCSAgIElibVZldGhNY2FzdERpc2FibGVGaWx0ZXJpbmcsCiAJCQkJCSAgIDApOwotCQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCQlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykgewogCQkJaWJtdmV0aF9lcnJvcl9wcmludGsoImhfbXVsdGljYXN0X2N0cmwgcmM9JWxkIHdoZW4gZW50ZXJpbmcgcHJvbWlzYyBtb2RlXG4iLCBscGFyX3JjKTsKIAkJfQogCX0gZWxzZSB7CkBAIC04NDcsNyArODQ3LDcgQEAKIAkJCQkJICAgSWJtVmV0aE1jYXN0RGlzYWJsZUZpbHRlcmluZyB8CiAJCQkJCSAgIElibVZldGhNY2FzdENsZWFyRmlsdGVyVGFibGUsCiAJCQkJCSAgIDApOwotCQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCQlpZihscGFyX3JjICE9IEhfU1VDQ0VTUykgewogCQkJaWJtdmV0aF9lcnJvcl9wcmludGsoImhfbXVsdGljYXN0X2N0cmwgcmM9JWxkIHdoZW4gYXR0ZW1wdGluZyB0byBjbGVhciBmaWx0ZXIgdGFibGVcbiIsIGxwYXJfcmMpOwogCQl9CiAJCS8qIGFkZCB0aGUgYWRkcmVzc2VzIHRvIHRoZSBmaWx0ZXIgdGFibGUgKi8KQEAgLTg1OCw3ICs4NTgsNyBAQAogCQkJbHBhcl9yYyA9IGhfbXVsdGljYXN0X2N0cmwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkJICAgSWJtVmV0aE1jYXN0QWRkRmlsdGVyLAogCQkJCQkJICAgbWNhc3RfYWRkcik7Ci0JCQlpZihscGFyX3JjICE9IEhfU3VjY2VzcykgeworCQkJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MpIHsKIAkJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygiaF9tdWx0aWNhc3RfY3RybCByYz0lbGQgd2hlbiBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIGZpbHRlciB0YWJsZVxuIiwgbHBhcl9yYyk7CiAJCQl9CiAJCX0KQEAgLTg2Nyw3ICs4NjcsNyBAQAogCQlscGFyX3JjID0gaF9tdWx0aWNhc3RfY3RybChhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsCiAJCQkJCSAgIElibVZldGhNY2FzdEVuYWJsZUZpbHRlcmluZywKIAkJCQkJICAgMCk7Ci0JCWlmKGxwYXJfcmMgIT0gSF9TdWNjZXNzKSB7CisJCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygiaF9tdWx0aWNhc3RfY3RybCByYz0lbGQgd2hlbiBlbmFibGluZyBmaWx0ZXJpbmdcbiIsIGxwYXJfcmMpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCmluZGV4IDVlNmQwMDcuLmNmZjg1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKQEAgLTMzLDcgKzMzLDcgQEAKIAogY29uZmlnIEVTSV9ET05HTEUKIAl0cmlzdGF0ZSAiRVNJIEpldEV5ZSBQQyBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgRXh0ZW5kZWQgU3lzdGVtcwogCSAgSmV0RXllIFBDIGRvbmdsZS4gIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBFU0kKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogY29uZmlnIEFDVElTWVNfRE9OR0xFCiAJdHJpc3RhdGUgIkFDVGlTWVMgSVItMjIwTCBhbmQgSVIyMjBMKyBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgQUNUaVNZUyBJUi0yMjBMIGFuZAogCSAgSVIyMjBMKyBkb25nbGVzLiAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlCkBAIC01NSw3ICs1NSw3IEBACiAKIGNvbmZpZyBURUtSQU1fRE9OR0xFCiAJdHJpc3RhdGUgIlRla3JhbSBJck1hdGUgMjEwQiBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgVGVrcmFtIElyTWF0ZSAyMTBCCiAJICBkb25nbGUuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgVGVrcmFtIGRvbmdsZQpAQCAtNjYsNyArNjYsNyBAQAogCiBjb25maWcgVE9JTTMyMzJfRE9OR0xFCiAJdHJpc3RhdGUgIlRPSU0zMjMyIElyRGEgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFZpc2hheS9UZW1pYwogCSAgVE9JTTMyMzIgYW5kIFRPSU00MjMyIGJhc2VkIGRvbmdsZXMuCkBAIC03NCw3ICs3NCw3IEBACiAKIGNvbmZpZyBMSVRFTElOS19ET05HTEUKIAl0cmlzdGF0ZSAiUGFyYWxsYXggTGl0ZUxpbmsgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFBhcmFsbGF4IExpdGVsaW5rCiAJICBkb25nbGUuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIFBhcmFsbGF4CkBAIC04NSw3ICs4NSw3IEBACiAKIGNvbmZpZyBNQTYwMF9ET05HTEUKIAl0cmlzdGF0ZSAiTW9iaWxlIEFjdGlvbiBNQTYwMCBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBNb2JpbGUgQWN0aW9uIE1BNjAwCiAJICBkb25nbGUuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgTUE2MDAgZG9uZ2xlCkBAIC05OCw3ICs5OCw3IEBACiAKIGNvbmZpZyBHSVJCSUxfRE9OR0xFCiAJdHJpc3RhdGUgIkdyZWVud2ljaCBHSXJCSUwgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgR3JlZW53aWNoIEdJckJJTAogCSAgZG9uZ2xlLiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KQEAgLTEwOSw3ICsxMDksNyBAQAogCiBjb25maWcgTUNQMjEyMF9ET05HTEUKIAl0cmlzdGF0ZSAiTWljcm9jaGlwIE1DUDIxMjAiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgTUNQMjEyMAogCSAgZG9uZ2xlLiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KQEAgLTEyMyw3ICsxMjMsNyBAQAogCiBjb25maWcgT0xEX0JFTEtJTl9ET05HTEUKIAl0cmlzdGF0ZSAiT2xkIEJlbGtpbiBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBBZGFwdGVjIEFpcnBvcnQgMTAwMAogCSAgYW5kIDIwMDAgZG9uZ2xlcy4gIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZQpAQCAtMTMyLDcgKzEzMiw3IEBACiAKIGNvbmZpZyBBQ1QyMDBMX0RPTkdMRQogCXRyaXN0YXRlICJBQ1RpU1lTIElSLTIwMEwgZG9uZ2xlIgotCWRlcGVuZHMgb24gRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgQUNUaVNZUyBJUi0yMDBMCiAJICBkb25nbGUuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQppbmRleCAyN2FiNzVmLi5jMWNlMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKQEAgLTQ2LDQgKzQ2LDQgQEAKIG9iai0kKENPTkZJR19UT0lNMzIzMl9ET05HTEUpCSs9IHRvaW0zMjMyLXNpci5vCiAKICMgVGhlIFNJUiBoZWxwZXIgbW9kdWxlCi1zaXItZGV2LW9ianMgOj0gc2lyX2Rldi5vIHNpcl9kb25nbGUubyBzaXJfa3RocmVhZC5vCitzaXItZGV2LW9ianMgOj0gc2lyX2Rldi5vIHNpcl9kb25nbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IDZlMmVjNTYuLmNkODc1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGaWxlbmFtZTogICAgICBpcmRhLXVzYi5jCi0gKiBWZXJzaW9uOiAgICAgICAwLjliCisgKiBWZXJzaW9uOiAgICAgICAwLjEwCiAgKiBEZXNjcmlwdGlvbjogICBJckRBLVVTQiBEcml2ZXIKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbCAKICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CkBAIC05LDYgKzksOSBAQAogICoJQ29weXJpZ2h0IChDKSAyMDAwLCBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4KICAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxLCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNCwgU2lnbWFUZWwsIEluYy4gPGlycXVhbGl0eUBzaWdtYXRlbC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgTWlsYW4gQmVubyA8YmVub0Bwb2JveC5zaz4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA2LCBOaWNrIEZlZGNoaWsgPG5pY2tAZmVkY2hpay5vcmcudWE+CiAgKiAgICAgICAgICAKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjEsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAiaXJkYS11c2IuaCIKIApAQCAtNzgsOCArODIsMTIgQEAKIAl7IFVTQl9ERVZJQ0UoMHg1MGYsIDB4MTgwKSwgLmRyaXZlcl9pbmZvID0gSVVDX1NQRUVEX0JVRyB8IElVQ19OT19XSU5ET1cgfSwKIAkvKiBFeHRlbmRlZCBTeXN0ZW1zLCBJbmMuLCAgWFROREFjY2VzcyBJckRBIFVTQiAoRVNJLTk2ODUpICovCiAJeyBVU0JfREVWSUNFKDB4OGU5LCAweDEwMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TUEVFRF9CVUcgfCBJVUNfTk9fV0lORE9XIH0sCisJLyogU2lnbWFUZWwgU1RJUjQyMTAvNDIyMC80MTE2IFVTQiBJckRBIChWRklSKSBCcmlkZ2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDIxMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSXzQyMTAgfCBJVUNfU1BFRURfQlVHIH0sCisJeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMjApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUl80MjEwIHwgSVVDX1NQRUVEX0JVRyB9LAorCXsgVVNCX0RFVklDRSgweDY2ZiwgMHg0MTE2KSwgLmRyaXZlcl9pbmZvID0gSVVDX1NUSVJfNDIxMCB8IElVQ19TUEVFRF9CVUcgfSwKIAl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKLQkgICAgICAgICAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAogCSAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BUFBfU1BFQywKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfQ0xBU1NfSVJEQSwKIAkgIC5kcml2ZXJfaW5mbyA9IElVQ19ERUZBVUxULCB9LApAQCAtOTksNiArMTA3LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZCBpcmRhX3VzYl9pbml0X3FvcyhzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYpIDsKIHN0YXRpYyBzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICppcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2Moc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBzdGF0aWMgdm9pZCBpcmRhX3VzYl9jaGFuZ2Vfc3BlZWRfeGJvZnMoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKTsKQEAgLTE0MSw3ICsxNTAsMjQgQEAKIAkJCQkgIF9fdTggKmhlYWRlciwKIAkJCQkgIGludAlmb3JjZSkKIHsKLQkvKiBTZXQgdGhlIG5lZ290aWF0ZWQgbGluayBzcGVlZCAqLworCS8qIEhlcmUgd2UgY2hlY2sgaWYgd2UgaGF2ZSBhbiBTVElSNDIxeCBjaGlwLAorCSAqIGFuZCBpZiBlaXRoZXIgc3BlZWQgb3IgeGJvZnMgKG9yIGJvdGgpIG5lZWRzCisJICogdG8gYmUgY2hhbmdlZC4KKwkgKi8KKwlpZiAoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgJiYKKwkgICAgKChzZWxmLT5uZXdfc3BlZWQgIT0gLTEpIHx8IChzZWxmLT5uZXdfeGJvZnMgIT0gLTEpKSkgeworCisJCS8qIFdpdGggU1RJUjQyMXgsIHNwZWVkIGFuZCB4Qk9GcyBtdXN0IGJlIHNldCBhdCB0aGUgc2FtZQorCQkgKiB0aW1lLCBldmVuIGlmIG9ubHkgb25lIG9mIHRoZW0gY2hhbmdlcy4KKwkJICovCisJCWlmIChzZWxmLT5uZXdfc3BlZWQgPT0gLTEpCisJCQlzZWxmLT5uZXdfc3BlZWQgPSBzZWxmLT5zcGVlZCA7CisKKwkJaWYgKHNlbGYtPm5ld194Ym9mcyA9PSAtMSkKKwkJCXNlbGYtPm5ld194Ym9mcyA9IHNlbGYtPnhib2ZzIDsKKwl9CisKKwkvKiBTZXQgdGhlIGxpbmsgc3BlZWQgKi8KIAlpZiAoc2VsZi0+bmV3X3NwZWVkICE9IC0xKSB7CiAJCS8qIEh1bS4uLiBVZ2x5IGhhY2sgOi0oCiAJCSAqIFNvbWUgZGV2aWNlIGFyZSBub3QgY29tcGxpYW50IHdpdGggdGhlIHNwZWMgYW5kIGNoYW5nZQpAQCAtMTkxLDcgKzIxNywxMSBAQAogCQkgICAgICAgICpoZWFkZXIgPSBTUEVFRF80MDAwMDAwOwogCQkJc2VsZi0+bmV3X3hib2ZzID0gMDsKIAkJCWJyZWFrOwotCQl9CisJCWNhc2UgMTYwMDAwMDA6CisJCQkqaGVhZGVyID0gU1BFRURfMTYwMDAwMDA7CisgIAkJCXNlbGYtPm5ld194Ym9mcyA9IDA7CisgIAkJCWJyZWFrOworICAJCX0KIAl9IGVsc2UKIAkJLyogTm8gY2hhbmdlICovCiAJCSpoZWFkZXIgPSAwOwpAQCAtMjM1LDYgKzI2NSwzMiBAQAogCX0KIH0KIAorLyoKKyogICBjYWxjdWxhdGUgdHVybmFyb3VuZCB0aW1lIGZvciBTaWdtYVRlbCBoZWFkZXIKKyovCitzdGF0aWMgX191OCBnZXRfdHVybmFyb3VuZF90aW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHR1cm5hcm91bmRfdGltZSA9IGlyZGFfZ2V0X210dChza2IpOworCisJaWYgKCB0dXJuYXJvdW5kX3RpbWUgPT0gMCApCisJCXJldHVybiAwOworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gMTAgKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDUwICkKKwkJcmV0dXJuIDI7CisJZWxzZSBpZiAoIHR1cm5hcm91bmRfdGltZSA8PSAxMDAgKQorCQlyZXR1cm4gMzsKKwllbHNlIGlmICggdHVybmFyb3VuZF90aW1lIDw9IDUwMCApCisJCXJldHVybiA0OworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gMTAwMCApCisJCXJldHVybiA1OworCWVsc2UgaWYgKCB0dXJuYXJvdW5kX3RpbWUgPD0gNTAwMCApCisJCXJldHVybiA2OworCWVsc2UKKwkJcmV0dXJuIDc7Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFNlbmQgYSBjb21tYW5kIHRvIGNoYW5nZSB0aGUgc3BlZWQgb2YgdGhlIGRvbmdsZQpAQCAtMjYyLDEyICszMTgsMTggQEAKIAkvKiBTZXQgdGhlIG5ldyBzcGVlZCBhbmQgeGJvZnMgaW4gdGhpcyBmYWtlIGZyYW1lICovCiAJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIGZyYW1lLCAxKTsKIAorCWlmICggc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgKSB7CisJCWlmIChmcmFtZVswXSA9PSAwKSByZXR1cm4gOyAvLyBkbyBub3RoaW5nIGlmIG5vIGNoYW5nZQorCQlmcmFtZVsxXSA9IDA7IC8vIG90aGVyIHBhcmFtZXRlcnMgZG9uJ3QgY2hhbmdlIGhlcmUKKwkJZnJhbWVbMl0gPSAwOworCX0KKwogCS8qIFN1Ym1pdCB0aGUgMCBsZW5ndGggSXJEQSBmcmFtZSB0byB0cmlnZ2VyIG5ldyBzcGVlZCBzZXR0aW5ncyAqLwogICAgICAgICB1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlbGYtPnVzYmRldiwKIAkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlbGYtPnVzYmRldiwgc2VsZi0+YnVsa19vdXRfZXApLAogICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLCBJUkRBX1VTQl9TUEVFRF9NVFUsCiAgICAgICAgICAgICAgICAgICAgICAgc3BlZWRfYnVsa19jYWxsYmFjaywgc2VsZik7Ci0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVNCX0lSREFfSEVBREVSOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNlbGYtPmhlYWRlcl9sZW5ndGg7CiAJdXJiLT50cmFuc2Zlcl9mbGFncyA9IDA7CiAKIAkvKiBJcnEgZGlzYWJsZWQgLT4gR0ZQX0FUT01JQyAqLwpAQCAtMzgzLDE2ICs0NDUsMzUgQEAKIAkgKiBhbGxvY2F0aW9uIHdpbGwgYmUgZG9uZSBsb3dlciBpbiBza2JfcHVzaCgpLgogCSAqIEFsc28sIHdlIGRvbid0IHVzZSBkaXJlY3RseSBza2JfY293KCksIGJlY2F1c2UgaXQgcmVxdWlyZQogCSAqIGhlYWRyb29tID49IDE2LCB3aGljaCBmb3JjZSB1bm5lY2Vzc2FyeSBjb3BpZXMgLSBKZWFuIElJICovCi0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgVVNCX0lSREFfSEVBREVSKSB7CisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2VsZi0+aGVhZGVyX2xlbmd0aCkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBJbnN1ZmljaWVudCBza2IgaGVhZHJvb20uXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlpZiAoc2tiX2Nvdyhza2IsIFVTQl9JUkRBX0hFQURFUikpIHsKKwkJaWYgKHNrYl9jb3coc2tiLCBzZWxmLT5oZWFkZXJfbGVuZ3RoKSkgewogCQkJSVJEQV9XQVJOSU5HKCIlcygpLCBmYWlsZWQgc2tiX2NvdygpICEhIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCX0KIAogCS8qIENoYW5nZSBzZXR0aW5nIGZvciBuZXh0IGZyYW1lICovCi0JaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIHNrYl9wdXNoKHNrYiwgVVNCX0lSREFfSEVBREVSKSwgMCk7CisKKwlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkgeworCQlfX3U4IHR1cm5hcm91bmRfdGltZTsKKwkJX191OCogZnJhbWU7CisJCXR1cm5hcm91bmRfdGltZSA9IGdldF90dXJuYXJvdW5kX3RpbWUoIHNrYiApOworCQlmcmFtZT0gc2tiX3B1c2goc2tiLCBzZWxmLT5oZWFkZXJfbGVuZ3RoKTsKKwkJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIGZyYW1lLCAwKTsKKwkJZnJhbWVbMl0gPSB0dXJuYXJvdW5kX3RpbWU7CisJCWlmICgoc2tiLT5sZW4gIT0gMCkgJiYKKwkJICAgICgoc2tiLT5sZW4gJSAxMjgpID09IDApICYmCisJCSAgICAoKHNrYi0+bGVuICUgNTEyKSAhPSAwKSkgeworCQkJLyogYWRkIGV4dHJhIGJ5dGUgZm9yIHNwZWNpYWwgU2lnbWFUZWwgZmVhdHVyZSAqLworCQkJZnJhbWVbMV0gPSAxOworCQkJc2tiX3B1dChza2IsIDEpOworCQl9IGVsc2UgeworCQkJZnJhbWVbMV0gPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIHNrYl9wdXNoKHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCksIDApOworCX0KIAogCS8qIEZJWE1FOiBNYWtlIG1hY3JvIG91dCBvZiB0aGlzIG9uZSAqLwogCSgoc3RydWN0IGlyZGFfc2tiX2NiICopc2tiLT5jYiktPmNvbnRleHQgPSBzZWxmOwpAQCAtNzk1LDcgKzg3Niw3IEBACiAJfQogCQogCS8qIENoZWNrIGZvciBlbXB0eSBmcmFtZXMgKi8KLQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IFVTQl9JUkRBX0hFQURFUikgeworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gc2VsZi0+aGVhZGVyX2xlbmd0aCkgewogCQlJUkRBX1dBUk5JTkcoIiVzKCksIGVtcHR5IGZyYW1lIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTgxNiw3ICs4OTcsMTEgQEAKIAlkb2NvcHkgPSAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgSVJEQV9SWF9DT1BZX1RIUkVTSE9MRCk7CiAKIAkvKiBBbGxvY2F0ZSBhIG5ldyBza2IgKi8KLQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKGRvY29weSA/IHVyYi0+YWN0dWFsX2xlbmd0aCA6IElSREFfU0tCX01BWF9NVFUpOworCWlmICggc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgKQorCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKGRvY29weSA/IHVyYi0+YWN0dWFsX2xlbmd0aCA6IElSREFfU0tCX01BWF9NVFUgKyBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIpOworCWVsc2UKKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVKTsKKwogCWlmICghbmV3c2tiKSAgewogCQlzZWxmLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCS8qIFdlIGNvdWxkIGRlbGl2ZXIgdGhlIGN1cnJlbnQgc2tiLCBidXQgdGhpcyB3b3VsZCBzdGFsbApAQCAtODQ1LDcgKzkzMCw3IEBACiAKIAkvKiBTZXQgcHJvcGVyIGxlbmd0aCBvbiBza2IgJiByZW1vdmUgVVNCLUlyREEgaGVhZGVyICovCiAJc2tiX3B1dChkYXRhc2tiLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCXNrYl9wdWxsKGRhdGFza2IsIFVTQl9JUkRBX0hFQURFUik7CisJc2tiX3B1bGwoZGF0YXNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCk7CiAKIAkvKiBBc2sgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgdG8gcXVldWUgdGhlIHBhY2tldCBmb3IgdGhlIElyREEgc3RhY2sgKi8KIAlkYXRhc2tiLT5kZXYgPSBzZWxmLT5uZXRkZXY7CkBAIC05MzcsNiArMTAyMiwxOTEgQEAKIAlyZXR1cm4gMDsgLyogRm9yIG5vdyAqLwogfQogCisKKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUiAgICAgICAiUHJvZHVjdCBWZXJzaW9uOiAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0NPTVBPTkVOVF9WRVJTSU9OX1NUUiAgICAgIkNvbXBvbmVudCBWZXJzaW9uOiAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0RBVEFfVEFHX1NUUiAgICAgICAgICAgICAgIlNUTVAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX0ZJTEVfVkVSU0lPTl9NQVhfT0ZGU0VUICAgNTEyICAgICAvKiB2ZXJzaW9uIGluZm8gaXMgYmVmb3JlIGhlcmUgKi8KKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUICAgICA1MTIgICAgIC8qIHBhdGNoIGltYWdlIHN0YXJ0cyBiZWZvcmUgaGVyZSAqLworI2RlZmluZSBTVElSNDIxWF9QQVRDSF9GSUxFX0VORF9PRl9IRUFERVJfVEFHICAgIDB4MUEgICAgLyogbWFya3MgZW5kIG9mIHBhdGNoIGZpbGUgaGVhZGVyIChQQyBET1MgdGV4dCBmaWxlIEVPRiBjaGFyYWN0ZXIpICovCisKKy8qCisgKiBLbm93biBmaXJtd2FyZSBwYXRjaGVzIGZvciBTVElSNDIxeCBkb25nbGVzCisgKi8KK3N0YXRpYyBjaGFyICogc3RpcjQyMXhfcGF0Y2hlc1tdID0geworCSI0MjEwMTAwMS5zYiIsCisJIjQyMTAxMDAyLnNiIiwKK307CisKK3N0YXRpYyBpbnQgc3RpcjQyMXhfZ2V0X3BhdGNoX3ZlcnNpb24odW5zaWduZWQgY2hhciAqIHBhdGNoLCBjb25zdCB1bnNpZ25lZCBsb25nIHBhdGNoX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB2ZXJzaW9uX21ham9yLCB2ZXJzaW9uX21pbm9yLCB2ZXJzaW9uX2J1aWxkOworCXVuc2lnbmVkIGNoYXIgKiB2ZXJzaW9uX3N0YXJ0OworCWludCB2ZXJzaW9uX2ZvdW5kID0gMDsKKworCWZvciAodmVyc2lvbl9vZmZzZXQgPSAwOworCSAgICAgdmVyc2lvbl9vZmZzZXQgPCBTVElSNDIxWF9QQVRDSF9GSUxFX0VORF9PRl9IRUFERVJfVEFHOworCSAgICAgdmVyc2lvbl9vZmZzZXQrKykgeworCQlpZiAoIW1lbWNtcChwYXRjaCArIHZlcnNpb25fb2Zmc2V0LAorCQkJICAgIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIsCisJCQkgICAgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIpIC0gMSkpIHsKKwkJCQkgICAgdmVyc2lvbl9mb3VuZCA9IDE7CisJCQkJICAgIHZlcnNpb25fc3RhcnQgPSBwYXRjaCArCisJCQkJCSAgICB2ZXJzaW9uX29mZnNldCArCisJCQkJCSAgICBzaXplb2YoU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUikgLSAxOworCQkJCSAgICBicmVhazsKKwkJfQorCX0KKworCS8qIFdlIGNvdWxkbid0IGZpbmQgYSBwcm9kdWN0IHZlcnNpb24gb24gdGhpcyBwYXRjaCAqLworCWlmICghdmVyc2lvbl9mb3VuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBMZXQncyBjaGVjayBpZiB0aGUgcHJvZHVjdCB2ZXJzaW9uIGlzIGRvdHRlZCAqLworCWlmICh2ZXJzaW9uX3N0YXJ0WzNdICE9ICcuJyB8fAorCSAgICB2ZXJzaW9uX3N0YXJ0WzddICE9ICcuJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ZXJzaW9uX21ham9yID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCwgTlVMTCwgMTApOworCXZlcnNpb25fbWlub3IgPSBzaW1wbGVfc3RydG91bCh2ZXJzaW9uX3N0YXJ0ICsgNCwgTlVMTCwgMTApOworCXZlcnNpb25fYnVpbGQgPSBzaW1wbGVfc3RydG91bCh2ZXJzaW9uX3N0YXJ0ICsgOCwgTlVMTCwgMTApOworCisJSVJEQV9ERUJVRygyLCAiJXMoKSwgTWFqb3I6ICVsZCBNaW5vcjogJWxkIEJ1aWxkOiAlbGRcbiIsCisJCSAgIF9fRlVOQ1RJT05fXywKKwkJICAgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vciwgdmVyc2lvbl9idWlsZCk7CisKKwlyZXR1cm4gKCgodmVyc2lvbl9tYWpvcikgPDwgMTIpICsKKwkJKCh2ZXJzaW9uX21pbm9yKSA8PCA4KSArCisJCSgodmVyc2lvbl9idWlsZCAvIDEwKSA8PCA0KSArCisJCSh2ZXJzaW9uX2J1aWxkICUgMTApKTsKKworfQorCisKK3N0YXRpYyBpbnQgc3RpcjQyMXhfdXBsb2FkX3BhdGNoIChzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYsCisJCQkJICB1bnNpZ25lZCBjaGFyICogcGF0Y2gsCisJCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgcGF0Y2hfbGVuKQoreworICAgIGludCByZXR2YWwgPSAwOworICAgIGludCBhY3R1YWxfbGVuOworICAgIHVuc2lnbmVkIGludCBpID0gMCwgZG93bmxvYWRfYW1vdW50ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICogcGF0Y2hfY2h1bms7CisKKyAgICBJUkRBX0RFQlVHICgyLCAiJXMoKSwgVXBsb2FkaW5nIFNUSVI0MjF4IFBhdGNoXG4iLCBfX0ZVTkNUSU9OX18pOworCisgICAgcGF0Y2hfY2h1bmsgPSBremFsbG9jKFNUSVI0MjFYX01BWF9QQVRDSF9ET1dOTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAocGF0Y2hfY2h1bmsgPT0gTlVMTCkKKwkgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAvKiBicmVhayB1cCBwYXRjaCBpbnRvIDEwMjMtYnl0ZSBzZWN0aW9ucyAqLworICAgIGZvciAoaSA9IDA7IHJldHZhbCA+PSAwICYmIGkgPCBwYXRjaF9sZW47IGkgKz0gZG93bmxvYWRfYW1vdW50KSB7CisJICAgIGRvd25sb2FkX2Ftb3VudCA9IHBhdGNoX2xlbiAtIGk7CisJICAgIGlmIChkb3dubG9hZF9hbW91bnQgPiBTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRSkKKwkJICAgIGRvd25sb2FkX2Ftb3VudCA9IFNUSVI0MjFYX01BWF9QQVRDSF9ET1dOTE9BRF9TSVpFOworCisJICAgIC8qIGRvd25sb2FkIHRoZSBwYXRjaCBzZWN0aW9uICovCisJICAgIG1lbWNweShwYXRjaF9jaHVuaywgcGF0Y2ggKyBpLCBkb3dubG9hZF9hbW91bnQpOworCisJICAgIHJldHZhbCA9IHVzYl9idWxrX21zZyAoc2VsZi0+dXNiZGV2LAorCQkJCSAgIHVzYl9zbmRidWxrcGlwZSAoc2VsZi0+dXNiZGV2LAorCQkJCQkJICAgIHNlbGYtPmJ1bGtfb3V0X2VwKSwKKwkJCQkgICBwYXRjaF9jaHVuaywgZG93bmxvYWRfYW1vdW50LAorCQkJCSAgICZhY3R1YWxfbGVuLCBtc2Vjc190b19qaWZmaWVzICg1MDApKTsKKwkgICAgSVJEQV9ERUJVRyAoMiwgIiVzKCksIFNlbnQgJXUgYnl0ZXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWFjdHVhbF9sZW4pOworCSAgICBpZiAocmV0dmFsID09IDApCisJCSAgICBtZGVsYXkoMTApOworICAgIH0KKworICAgIGtmcmVlKHBhdGNoX2NodW5rKTsKKworICAgIGlmIChpICE9IHBhdGNoX2xlbikgeworCSAgICBJUkRBX0VSUk9SICgiJXMoKSwgUHVzaGVkICVkIGJ5dGVzICghPSBwYXRjaF9sZW4gKCVkKSlcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGksIHBhdGNoX2xlbik7CisJICAgIHJldHZhbCA9IC1FSU87CisgICAgfQorCisgICAgaWYgKHJldHZhbCA8IDApCisJICAgIC8qIHRvZG8gLSBtYXJrIGRldmljZSBhcyBub3QgcmVhZHkgKi8KKwkgICAgSVJEQV9FUlJPUiAoIiVzKCksIFNUSVI0MjF4IHBhdGNoIHVwbG9hZCBmYWlsZWQgKCVkKVxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIGludCBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKQoreworCXVuc2lnbmVkIGludCBpLCBwYXRjaF9mb3VuZCA9IDAsIGRhdGFfZm91bmQgPSAwLCBkYXRhX29mZnNldDsKKwlpbnQgcGF0Y2hfdmVyc2lvbiwgcmV0ID0gMDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RpcjQyMXhfcGF0Y2hlcyk7IGkrKykgeworCQlpZihyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgc3RpcjQyMXhfcGF0Y2hlc1tpXSwgJnNlbGYtPnVzYmRldi0+ZGV2KSAhPSAwKSB7CisJCQlJUkRBX0VSUk9SKCAiJXMoKSwgUGF0Y2ggJXMgaXMgbm90IGF2YWlsYWJsZVxuIiwgX19GVU5DVElPTl9fLCBzdGlyNDIxeF9wYXRjaGVzW2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKyAgICAgICAgICAgICAgICAvKiBXZSBmb3VuZCBhIHBhdGNoIGZyb20gdXNlcnNwYWNlICovCisJCXBhdGNoX3ZlcnNpb24gPSBzdGlyNDIxeF9nZXRfcGF0Y2hfdmVyc2lvbiAoZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKworCQlpZiAocGF0Y2hfdmVyc2lvbiA8IDApIHsKKwkJCS8qIENvdWxkbid0IGZldGNoIGEgdmVyc2lvbiwgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmaWxlICovCisJCQlJUkRBX0VSUk9SKCIlcygpLCB2ZXJzaW9uIHBhcnNpbmcgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0ID0gcGF0Y2hfdmVyc2lvbjsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGF0Y2hfdmVyc2lvbiAhPSBzZWxmLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSB7CisJCQkvKiBQYXRjaCB2ZXJzaW9uIGFuZCBkZXZpY2UgZG9uJ3QgbWF0Y2ggKi8KKwkJCUlSREFfRVJST1IgKCIlcygpLCB3cm9uZyBwYXRjaCB2ZXJzaW9uICglZCA8LT4gJWQpXG4iLAorCQkJCSAgICBfX0ZVTkNUSU9OX18sCisJCQkJICAgIHBhdGNoX3ZlcnNpb24sIHNlbGYtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiB3ZSdyZSBoZXJlLCB3ZSd2ZSBmb3VuZCBhIGNvcnJlY3QgcGF0Y2ggKi8KKwkJcGF0Y2hfZm91bmQgPSAxOworCQlicmVhazsKKworCX0KKworCS8qIFdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBmaXJtd2FyZSwgbGV0J3MgbGVhdmUgKi8KKwlpZiAoIXBhdGNoX2ZvdW5kKQorCQlyZXR1cm4gcmV0OworCisJLyogVGhlIGFjdHVhbCBpbWFnZSBzdGFydHMgYWZ0ZXIgdGhlICJTVE1QIiBrZXl3b3JkICovCisJZm9yIChkYXRhX29mZnNldCA9IDA7IGRhdGFfb2Zmc2V0IDwgU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUOyBkYXRhX29mZnNldCsrKSB7CisJCWlmICghbWVtY21wKGZ3X2VudHJ5LT5kYXRhICsgZGF0YV9vZmZzZXQsCisJCQkgICAgU1RJUjQyMVhfUEFUQ0hfREFUQV9UQUdfU1RSLAorCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpKSkgeworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZm91bmQgcGF0Y2ggZGF0YSBmb3IgU1RJUjQyMXggYXQgb2Zmc2V0ICVkXG4iLAorCQkJCSAgIF9fRlVOQ1RJT05fXywgZGF0YV9vZmZzZXQpOworCQkJZGF0YV9mb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFdlIGNvdWxkbid0IGZpbmQgIlNUTVAiIGZyb20gdGhlIGhlYWRlciAqLworCWlmICghZGF0YV9mb3VuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBMZXQncyB1cGxvYWQgdGhlIHBhdGNoIHRvIHRoZSB0YXJnZXQgKi8KKwlyZXQgPSBzdGlyNDIxeF91cGxvYWRfcGF0Y2goc2VsZiwKKwkJCQkgICAgJmZ3X2VudHJ5LT5kYXRhW2RhdGFfb2Zmc2V0ICsgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVCldLAorCQkJCSAgICBmd19lbnRyeS0+c2l6ZSAtIChkYXRhX29mZnNldCArIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpKSk7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCXJldHVybiByZXQ7CisKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKiBJUkRBIERFVklDRSBDQUxMQkFDS1MgKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBNYWluIGNhbGxzIGZyb20gdGhlIElyREEvTmV0d29yayBzdWJzeXN0ZW0uCkBAIC05NzIsNiArMTI0MiwxMSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYoc2VsZi0+bmVlZHNwYXRjaCkgeworCQlJUkRBX1dBUk5JTkcoIiVzKCksIGRldmljZSBuZWVkcyBwYXRjaFxuIiwgX19GVU5DVElPTl9fKSA7CisJCXJldHVybiAtRUlPIDsKKwl9CisKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgc3BlZWQgYW5kIHhib2ZzIHZhbHVlCiAJICogKElyTEFQIHdpbGwgY2hhbmdlIHRoYXQgc29vbikgKi8KIAlzZWxmLT5zcGVlZCA9IC0xOwpAQCAtMTA1MCw3ICsxMzI1LDcgQEAKIAlkZWxfdGltZXIoJnNlbGYtPnJ4X2RlZmVyX3RpbWVyKTsKIAogCS8qIERlYWxsb2NhdGUgYWxsIHRoZSBSeCBwYXRoIGJ1ZmZlcnMgKFVSQnMgYW5kIHNrYikgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5tYXhfcnhfdXJiOyBpKyspIHsKIAkJc3RydWN0IHVyYiAqdXJiID0gc2VsZi0+cnhfdXJiW2ldOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi0+Y29udGV4dDsKIAkJLyogQ2FuY2VsIHRoZSByZWNlaXZlIGNvbW1hbmQgKi8KQEAgLTE0MjYsOCArMTcwMSwyMiBAQAogCXNwaW5fbG9ja19pbml0KCZzZWxmLT5sb2NrKTsKIAlpbml0X3RpbWVyKCZzZWxmLT5yeF9kZWZlcl90aW1lcik7CiAKKwlzZWxmLT5jYXBhYmlsaXR5ID0gaWQtPmRyaXZlcl9pbmZvOworCXNlbGYtPm5lZWRzcGF0Y2ggPSAoKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwKSAhPSAwKSA7CisKIAkvKiBDcmVhdGUgYWxsIG9mIHRoZSBuZWVkZWQgdXJicyAqLwotCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKSB7CisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwKSB7CisJCXNlbGYtPm1heF9yeF91cmIgPSBJVV9TSUdNQVRFTF9NQVhfUlhfVVJCUzsKKwkJc2VsZi0+aGVhZGVyX2xlbmd0aCA9IFVTQl9JUkRBX1NJR01BVEVMX0hFQURFUjsKKwl9IGVsc2UgeworCQlzZWxmLT5tYXhfcnhfdXJiID0gSVVfTUFYX1JYX1VSQlM7CisJCXNlbGYtPmhlYWRlcl9sZW5ndGggPSBVU0JfSVJEQV9IRUFERVI7CisJfQorCisJc2VsZi0+cnhfdXJiID0ga3phbGxvYyhzZWxmLT5tYXhfcnhfdXJiICogc2l6ZW9mKHN0cnVjdCB1cmIgKiksCisJCQkJR0ZQX0tFUk5FTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKSB7CiAJCXNlbGYtPnJ4X3VyYltpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VsZi0+cnhfdXJiW2ldKSB7CiAJCQlnb3RvIGVycl9vdXRfMTsKQEAgLTE0NzksMTcgKzE3NjgsMjggQEAKIAkJZ290byBlcnJfb3V0XzM7CiAJfQogCisJc2VsZi0+dXNiZGV2ID0gZGV2OworCiAJLyogRmluZCBJckRBIGNsYXNzIGRlc2NyaXB0b3IgKi8KIAlpcmRhX2Rlc2MgPSBpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2MoaW50Zik7CiAJcmV0ID0gLUVOT0RFVjsKIAlpZiAoaXJkYV9kZXNjID09IE5VTEwpCiAJCWdvdG8gZXJyX291dF8zOwogCisJaWYgKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnIChzZWxmLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSAoc2VsZi0+dXNiZGV2LCAwKSwKKwkJCQkgICAgICAgMHgwMiwgMHg0MCwgMCwgMCwgTlVMTCwgMCwgNTAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUlSREFfREVCVUcgKDAsICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICVkXG4iLCByZXQpOworCQkJZ290byBlcnJfb3V0XzM7CisJCX0gZWxzZSB7CisJCQltZGVsYXkoMTApOworCQl9CisJfQorCiAJc2VsZi0+aXJkYV9kZXNjID0gIGlyZGFfZGVzYzsKIAlzZWxmLT5wcmVzZW50ID0gMTsKIAlzZWxmLT5uZXRvcGVuID0gMDsKLQlzZWxmLT5jYXBhYmlsaXR5ID0gaWQtPmRyaXZlcl9pbmZvOwotCXNlbGYtPnVzYmRldiA9IGRldjsKIAlzZWxmLT51c2JpbnRmID0gaW50ZjsKIAogCS8qIEFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIHNwZWVkIGNoYW5nZXMgKi8KQEAgLTE1MDgsOCArMTgwOCwzMiBAQAogCiAJSVJEQV9NRVNTQUdFKCJJckRBOiBSZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgbmV0LT5uYW1lKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHNlbGYpOworCisJaWYgKHNlbGYtPm5lZWRzcGF0Y2gpIHsKKwkJLyogTm93IHdlIGZldGNoIGFuZCB1cGxvYWQgdGhlIGZpcm13YXJlIHBhdGNoICovCisJCXJldCA9IHN0aXI0MjF4X3BhdGNoX2RldmljZShzZWxmKTsKKwkJc2VsZi0+bmVlZHNwYXRjaCA9IChyZXQgPCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50aygicGF0Y2hfZGV2aWNlIGZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9vdXRfNTsKKwkJfQorCisJCS8qIHJlcGxhY2UgSXJEQSBjbGFzcyBkZXNjcmlwdG9yIHdpdGggd2hhdCBwYXRjaGVkIGRldmljZSBpcyBub3cgcmVwb3J0aW5nICovCisJCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyAoc2VsZi0+dXNiaW50Zik7CisJCWlmIChpcmRhX2Rlc2MgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX291dF81OworCQl9CisJCWlmIChzZWxmLT5pcmRhX2Rlc2MpCisJCQlrZnJlZSAoc2VsZi0+aXJkYV9kZXNjKTsKKwkJc2VsZi0+aXJkYV9kZXNjID0gaXJkYV9kZXNjOworCQlpcmRhX3VzYl9pbml0X3FvcyhzZWxmKTsKKwl9CisKIAlyZXR1cm4gMDsKIAorZXJyX291dF81OgorCXVucmVnaXN0ZXJfbmV0ZGV2KHNlbGYtPm5ldGRldik7CiBlcnJfb3V0XzQ6CiAJa2ZyZWUoc2VsZi0+c3BlZWRfYnVmZik7CiBlcnJfb3V0XzM6CkBAIC0xNTE4LDcgKzE4NDIsNyBAQAogZXJyX291dF8yOgogCXVzYl9mcmVlX3VyYihzZWxmLT50eF91cmIpOwogZXJyX291dF8xOgotCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykgewogCQlpZiAoc2VsZi0+cnhfdXJiW2ldKQogCQkJdXNiX2ZyZWVfdXJiKHNlbGYtPnJ4X3VyYltpXSk7CiAJfQpAQCAtMTU3MSw3ICsxODk1LDcgQEAKIAkJLypuZXRpZl9kZXZpY2VfZGV0YWNoKHNlbGYtPm5ldGRldik7Ki8KIAkJbmV0aWZfc3RvcF9xdWV1ZShzZWxmLT5uZXRkZXYpOwogCQkvKiBTdG9wIGFsbCB0aGUgcmVjZWl2ZSBVUkJzLiBNdXN0IGJlIHN5bmNocm9ub3VzLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IHNlbGYtPm1heF9yeF91cmI7IGkrKykKIAkJCXVzYl9raWxsX3VyYihzZWxmLT5yeF91cmJbaV0pOwogCQkvKiBDYW5jZWwgVHggYW5kIHNwZWVkIFVSQi4KIAkJICogTWFrZSBzdXJlIGl0J3Mgc3luY2hyb25vdXMgdG8gYXZvaWQgcmFjZXMuICovCkBAIC0xNTg2LDggKzE5MTAsOSBAQAogCXNlbGYtPnVzYmludGYgPSBOVUxMOwogCiAJLyogQ2xlYW4gdXAgb3VyIHVyYnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVVfTUFYX1JYX1VSQlM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bWF4X3J4X3VyYjsgaSsrKQogCQl1c2JfZnJlZV91cmIoc2VsZi0+cnhfdXJiW2ldKTsKKwlrZnJlZShzZWxmLT5yeF91cmIpOwogCS8qIENsZWFuIHVwIFR4IGFuZCBzcGVlZCBVUkIgKi8KIAl1c2JfZnJlZV91cmIoc2VsZi0+dHhfdXJiKTsKIAl1c2JfZnJlZV91cmIoc2VsZi0+c3BlZWRfdXJiKTsKQEAgLTE2NDgsNiArMTk3Myw2IEBACiAgKi8KIG1vZHVsZV9wYXJhbShxb3NfbXR0X2JpdHMsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHFvc19tdHRfYml0cywgIk1pbmltdW0gVHVybiBUaW1lIik7Ci1NT0RVTEVfQVVUSE9SKCJSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+LCBEYWcgQnJhdHRsaSA8ZGFnQGJyYXR0bGkubmV0PiBhbmQgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJckRBLVVTQiBEb25nbGUgRHJpdmVyIik7IAorTU9EVUxFX0FVVEhPUigiUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PiwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4sIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4gYW5kIE5pY2sgRmVkY2hpayA8bmlja0BmZWRjaGlrLm9yZy51YT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSXJEQS1VU0IgRG9uZ2xlIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCmluZGV4IDQwMjZhZjQuLmQ4MzNkYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGaWxlbmFtZTogICAgICBpcmRhLXVzYi5oCi0gKiBWZXJzaW9uOiAgICAgICAwLjliCisgKiBWZXJzaW9uOiAgICAgICAwLjEwCiAgKiBEZXNjcmlwdGlvbjogICBJckRBLVVTQiBEcml2ZXIKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbCAKICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdAYnJhdHRsaS5uZXQ+CkBAIC05LDYgKzksOSBAQAogICoJQ29weXJpZ2h0IChDKSAyMDAxLCBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CiAgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMCwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4KICAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxLCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNCwgU2lnbWFUZWwsIEluYy4gPGlycXVhbGl0eUBzaWdtYXRlbC5jb20+CisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgTWlsYW4gQmVubyA8YmVub0Bwb2JveC5zaz4KKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDA2LCBOaWNrIEZFZGNoaWsgPG5pY2tAZmVkY2hpay5vcmcudWE+CiAgKiAgICAgICAgICAKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzEsNiArMzQsOSBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPiAgICAgIC8qIHN0cnVjdCBpcmxhcF9jYiAqLwogCisjZGVmaW5lIFBBVENIX0ZJTEVfU0laRV9NQVggICAgIDY1NTM2CisjZGVmaW5lIFBBVENIX0ZJTEVfU0laRV9NSU4gICAgIDgwCisKICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQgMjAwCiAjZGVmaW5lIElSREFfVVNCX01BWF9NVFUgMjA1MQogI2RlZmluZSBJUkRBX1VTQl9TUEVFRF9NVFUgNjQJCS8qIFdlaXJkLCBidXQgd29yayBsaWtlIHRoaXMgKi8KQEAgLTc5LDE1ICs4NSwxNiBAQAogLyogSW5ib3VuZCBoZWFkZXIgKi8KICNkZWZpbmUgTUVESUFfQlVTWSAgICAweDgwCiAKLSNkZWZpbmUgU1BFRURfMjQwMCAgICAweDAxCi0jZGVmaW5lIFNQRUVEXzk2MDAgICAgMHgwMgotI2RlZmluZSBTUEVFRF8xOTIwMCAgIDB4MDMKLSNkZWZpbmUgU1BFRURfMzg0MDAgICAweDA0Ci0jZGVmaW5lIFNQRUVEXzU3NjAwICAgMHgwNQotI2RlZmluZSBTUEVFRF8xMTUyMDAgIDB4MDYKLSNkZWZpbmUgU1BFRURfNTc2MDAwICAweDA3Ci0jZGVmaW5lIFNQRUVEXzExNTIwMDAgMHgwOAotI2RlZmluZSBTUEVFRF80MDAwMDAwIDB4MDkKKyNkZWZpbmUgU1BFRURfMjQwMCAgICAgMHgwMQorI2RlZmluZSBTUEVFRF85NjAwICAgICAweDAyCisjZGVmaW5lIFNQRUVEXzE5MjAwICAgIDB4MDMKKyNkZWZpbmUgU1BFRURfMzg0MDAgICAgMHgwNAorI2RlZmluZSBTUEVFRF81NzYwMCAgICAweDA1CisjZGVmaW5lIFNQRUVEXzExNTIwMCAgIDB4MDYKKyNkZWZpbmUgU1BFRURfNTc2MDAwICAgMHgwNworI2RlZmluZSBTUEVFRF8xMTUyMDAwICAweDA4CisjZGVmaW5lIFNQRUVEXzQwMDAwMDAgIDB4MDkKKyNkZWZpbmUgU1BFRURfMTYwMDAwMDAgMHgwYQogCiAvKiBCYXNpYyBjYXBhYmlsaXRpZXMgKi8KICNkZWZpbmUgSVVDX0RFRkFVTFQJMHgwMAkvKiBCYXNpYyBkZXZpY2UgY29tcGxpYW50IHdpdGggMS4wIHNwZWMgKi8KQEAgLTEwMCwxMSArMTA3LDE0IEBACiAjZGVmaW5lIElVQ19TTUFMTF9QS1QJMHgxMAkvKiBEZXZpY2UgZG9lc24ndCBiZWhhdmUgd2l0aCBiaWcgUnggcGFja2V0cyAqLwogI2RlZmluZSBJVUNfTUFYX1dJTkRPVwkweDIwCS8qIERldmljZSB1bmRlcmVzdGltYXRlIHRoZSBSeCB3aW5kb3cgKi8KICNkZWZpbmUgSVVDX01BWF9YQk9GUwkweDQwCS8qIERldmljZSBuZWVkIG1vcmUgeGJvZnMgdGhhbiBhZHZlcnRpc2VkICovCisjZGVmaW5lIElVQ19TVElSXzQyMTAJMHg4MAkvKiBTaWdtYVRlbCA0MjEwLzQyMjAvNDExNiBWRklSICovCiAKIC8qIFVTQiBjbGFzcyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBVU0JfSVJEQV9IRUFERVIgICAweDAxCi0jZGVmaW5lIFVTQl9DTEFTU19JUkRBICAgIDB4MDIgLyogVVNCX0NMQVNTX0FQUF9TUEVDIHN1YmNsYXNzICovIAotI2RlZmluZSBVU0JfRFRfSVJEQSAgICAgICAweDIxCisjZGVmaW5lIFVTQl9JUkRBX0hFQURFUiAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVVNCX0NMQVNTX0lSREEgICAgICAgICAgICAgMHgwMiAvKiBVU0JfQ0xBU1NfQVBQX1NQRUMgc3ViY2xhc3MgKi8KKyNkZWZpbmUgVVNCX0RUX0lSREEgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIgICAweDAzCisjZGVmaW5lIElVX1NJR01BVEVMX01BWF9SWF9VUkJTICAgIChJVV9NQVhfQUNUSVZFX1JYX1VSQlMgKyBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIpCiAKIHN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgewogCV9fdTggIGJMZW5ndGg7CkBAIC0xMjMsNiArMTMzLDcgQEAKICAqICg2LjIuNSwgVVNCLUlyREEgY2xhc3Mgc3BlYyAxLjApICovCiAKICNkZWZpbmUgSVVfUkVRX0dFVF9DTEFTU19ERVNDCTB4MDYKKyNkZWZpbmUgU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkUgMTAyMwogCiBzdHJ1Y3QgaXJkYV91c2JfY2IgewogCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmlyZGFfZGVzYzsKQEAgLTEzNiw3ICsxNDcsOCBAQAogCV9fdTE2IGJ1bGtfb3V0X210dTsJCS8qIE1heCBUeCBwYWNrZXQgc2l6ZSBpbiBieXRlcyAqLwogCV9fdTggIGJ1bGtfaW50X2VwOwkJLyogSW50ZXJydXB0IEVuZHBvaW50IGFzc2lnbm1lbnRzICovCiAKLQlzdHJ1Y3QgdXJiICpyeF91cmJbSVVfTUFYX1JYX1VSQlNdOwkvKiBVUkJzIHVzZWQgdG8gcmVjZWl2ZSBkYXRhIGZyYW1lcyAqLworCV9fdTggIG1heF9yeF91cmI7CisJc3RydWN0IHVyYiAqKnJ4X3VyYjsJICAgICAgICAvKiBVUkJzIHVzZWQgdG8gcmVjZWl2ZSBkYXRhIGZyYW1lcyAqLwogCXN0cnVjdCB1cmIgKmlkbGVfcnhfdXJiOwkvKiBQb2ludGVyIHRvIGlkbGUgVVJCIGluIFJ4IHBhdGggKi8KIAlzdHJ1Y3QgdXJiICp0eF91cmI7CQkvKiBVUkIgdXNlZCB0byBzZW5kIGRhdGEgZnJhbWVzICovCiAJc3RydWN0IHVyYiAqc3BlZWRfdXJiOwkJLyogVVJCIHVzZWQgdG8gc2VuZCBzcGVlZCBjb21tYW5kcyAqLwpAQCAtMTU3LDYgKzE2OSw5IEBACiAJX191MzIgc3BlZWQ7CQkJLyogQ3VycmVudCBzcGVlZCAqLwogCV9fczMyIG5ld19zcGVlZDsJCS8qIHNwZWVkIHdlIG5lZWQgdG8gc2V0ICovCiAKKwlfX3U4IGhlYWRlcl9sZW5ndGg7ICAgICAgICAgICAgIC8qIFVTQi1JckRBIGZyYW1lIGhlYWRlciBzaXplICovCisJaW50IG5lZWRzcGF0Y2g7ICAgICAgICAJCS8qIGRldmljZSBuZWVkcyBmaXJtd2FyZSBwYXRjaCAqLworCiAJc3RydWN0IHRpbWVyX2xpc3QgcnhfZGVmZXJfdGltZXI7CS8qIFdhaXQgZm9yIFJ4IGVycm9yIHRvIGNsZWFyICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwppbmRleCA2M2QzOGZiLi5mNTMwNjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKQEAgLTY5NSw4ICs2OTUsNyBAQAogCQkvKgogCQkgKiBXZSBtdXN0IG5vdCBiZSB0cmFuc21pdHRpbmcuLi4KIAkJICovCi0JCWlmIChzaS0+dHhza2IpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHNpLT50eHNrYik7CiAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npci1kZXYuaCBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyLWRldi5oCmluZGV4IGY2OWZiNGMuLjlmYTI5NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyLWRldi5oCkBAIC0xNSwyMyArMTUsMTQgQEAKICNkZWZpbmUgSVJEQV9TSVJfSAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4JCS8vIGlvYnVmZl90CiAKLS8qIEZJWE1FOiB1bmlmeSBpcmRhX3JlcXVlc3Qgd2l0aCBzaXJfZnNtISAqLwotCi1zdHJ1Y3QgaXJkYV9yZXF1ZXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxoX3JlcXVlc3Q7Ci0JdW5zaWduZWQgbG9uZyBwZW5kaW5nOwotCXZvaWQgKCpmdW5jKSh2b2lkICopOwotCXZvaWQgKmRhdGE7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCiBzdHJ1Y3Qgc2lyX2ZzbSB7CiAJc3RydWN0IHNlbWFwaG9yZQlzZW07Ci0Jc3RydWN0IGlyZGFfcmVxdWVzdAlycTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICB3b3JrOwogCXVuc2lnbmVkCQlzdGF0ZSwgc3Vic3RhdGU7CiAJaW50CQkJcGFyYW07CiAJaW50CQkJcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwppbmRleCBlYTdjOTQ2Li4zYjU4NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwpAQCAtMjMsNiArMjMsMjk4IEBACiAKICNpbmNsdWRlICJzaXItZGV2LmgiCiAKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcmRhX3Npcl93cTsKKworLyogU1RBVEUgTUFDSElORSAqLworCisvKiBzdWJzdGF0ZSBoYW5kbGVyIG9mIHRoZSBjb25maWctZnNtIHRvIGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2Ugd2FudAorICogdG8gd2FpdCBmb3IgdHJhbnNtaXQgY29tcGxldGlvbiBiZWZvcmUgY2hhbmdpbmcgdGhlIHBvcnQgY29uZmlndXJhdGlvbgorICovCisKK3N0YXRpYyBpbnQgc2lyZGV2X3R4X2NvbXBsZXRlX2ZzbShzdHJ1Y3Qgc2lyX2RldiAqZGV2KQoreworCXN0cnVjdCBzaXJfZnNtICpmc20gPSAmZGV2LT5mc207CisJdW5zaWduZWQgbmV4dF9zdGF0ZSwgZGVsYXk7CisJdW5zaWduZWQgYnl0ZXNfbGVmdDsKKworCWRvIHsKKwkJbmV4dF9zdGF0ZSA9IGZzbS0+c3Vic3RhdGU7CS8qIGRlZmF1bHQ6IHN0YXkgaW4gY3VycmVudCBzdWJzdGF0ZSAqLworCQlkZWxheSA9IDA7CisKKwkJc3dpdGNoKGZzbS0+c3Vic3RhdGUpIHsKKworCQljYXNlIFNJUkRFVl9TVEFURV9XQUlUX1hNSVQ6CisJCQlpZiAoZGV2LT5kcnYtPmNoYXJzX2luX2J1ZmZlcikKKwkJCQlieXRlc19sZWZ0ID0gZGV2LT5kcnYtPmNoYXJzX2luX2J1ZmZlcihkZXYpOworCQkJZWxzZQorCQkJCWJ5dGVzX2xlZnQgPSAwOworCQkJaWYgKCFieXRlc19sZWZ0KSB7CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9XQUlUX1VOVElMX1NFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChkZXYtPnNwZWVkID4gMTE1MjAwKQorCQkJCWRlbGF5ID0gKGJ5dGVzX2xlZnQqOCoxMDAwMCkgLyAoZGV2LT5zcGVlZC8xMDApOworCQkJZWxzZSBpZiAoZGV2LT5zcGVlZCA+IDApCisJCQkJZGVsYXkgPSAoYnl0ZXNfbGVmdCoxMCoxMDAwMCkgLyAoZGV2LT5zcGVlZC8xMDApOworCQkJZWxzZQorCQkJCWRlbGF5ID0gMDsKKwkJCS8qIGV4cGVjdGVkIGRlbGF5ICh1c2VjKSB1bnRpbCByZW1haW5pbmcgYnl0ZXMgYXJlIHNlbnQgKi8KKwkJCWlmIChkZWxheSA8IDEwMCkgeworCQkJCXVkZWxheShkZWxheSk7CisJCQkJZGVsYXkgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogc2xlZXAgc29tZSBsb25nZXIgZGVsYXkgKG1zZWMpICovCisJCQlkZWxheSA9IChkZWxheSs5OTkpIC8gMTAwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX1dBSVRfVU5USUxfU0VOVDoKKwkJCS8qIGJsb2NrIHVudGlsIHVuZGVybGF5aW5nIGhhcmR3YXJlIGJ1ZmZlciBhcmUgZW1wdHkgKi8KKwkJCWlmIChkZXYtPmRydi0+d2FpdF91bnRpbF9zZW50KQorCQkJCWRldi0+ZHJ2LT53YWl0X3VudGlsX3NlbnQoZGV2KTsKKwkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfVFhfRE9ORTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX1RYX0RPTkU6CisJCQlyZXR1cm4gMDsKKworCQlkZWZhdWx0OgorCQkJSVJEQV9FUlJPUigiJXMgLSB1bmRlZmluZWQgc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlmc20tPnN1YnN0YXRlID0gbmV4dF9zdGF0ZTsKKwl9IHdoaWxlIChkZWxheSA9PSAwKTsKKwlyZXR1cm4gZGVsYXk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBzaXJkZXZfY29uZmlnX2ZzbQorICoKKyAqIFN0YXRlIG1hY2hpbmUgdG8gaGFuZGxlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2UgKGFuZCBhdHRhY2hlZCBkb25nbGUsIGlmIGFueSkuCisgKiBUaGlzIGhhbmRsZXIgaXMgc2NoZWR1bGVkIGZvciBleGVjdXRpb24gaW4ga0lyREFkIGNvbnRleHQsIHNvIHdlIGNhbiBzbGVlcC4KKyAqIGhvd2V2ZXIsIGtJckRBZCBpcyBzaGFyZWQgYnkgYWxsIHNpcl9kZXYgZGV2aWNlcyBzbyB3ZSBiZXR0ZXIgZG9uJ3Qgc2xlZXAgdGhlcmUgdG9vCisgKiBsb25nLiBJbnN0ZWFkLCBmb3IgbG9uZ2VyIGRlbGF5cyB3ZSBzdGFydCBhIHRpbWVyIHRvIHJlc2NoZWR1bGUgdXMgbGF0ZXIuCisgKiBPbiBlbnRyeSwgZnNtLT5zZW0gaXMgYWx3YXlzIGxvY2tlZCBhbmQgdGhlIG5ldGRldiB4bWl0IHF1ZXVlIHN0b3BwZWQuCisgKiBCb3RoIG11c3QgYmUgdW5sb2NrZWQvcmVzdGFydGVkIG9uIGNvbXBsZXRpb24gLSBidXQgb25seSBvbiBmaW5hbCBleGl0LgorICovCisKK3N0YXRpYyB2b2lkIHNpcmRldl9jb25maWdfZnNtKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNpcl9kZXYgKmRldiA9IGRhdGE7CisJc3RydWN0IHNpcl9mc20gKmZzbSA9ICZkZXYtPmZzbTsKKwlpbnQgbmV4dF9zdGF0ZTsKKwlpbnQgcmV0ID0gLTE7CisJdW5zaWduZWQgZGVsYXk7CisKKwlJUkRBX0RFQlVHKDIsICIlcygpLCA8JWxkPlxuIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsKKworCWRvIHsKKwkJSVJEQV9ERUJVRygzLCAiJXMgLSBzdGF0ZT0weCUwNHggLyBzdWJzdGF0ZT0weCUwNHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGZzbS0+c3RhdGUsIGZzbS0+c3Vic3RhdGUpOworCisJCW5leHRfc3RhdGUgPSBmc20tPnN0YXRlOworCQlkZWxheSA9IDA7CisKKwkJc3dpdGNoKGZzbS0+c3RhdGUpIHsKKworCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfT1BFTjoKKwkJCWlmIChkZXYtPmRvbmdsZV9kcnYgIT0gTlVMTCkgeworCQkJCXJldCA9IHNpcmRldl9wdXRfZG9uZ2xlKGRldik7CisJCQkJaWYgKHJldCkgeworCQkJCQlmc20tPnJlc3VsdCA9IC1FSU5WQUw7CisJCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogSW5pdGlhbGl6ZSBkb25nbGUgKi8KKwkJCXJldCA9IHNpcmRldl9nZXRfZG9uZ2xlKGRldiwgZnNtLT5wYXJhbSk7CisJCQlpZiAocmV0KSB7CisJCQkJZnNtLT5yZXN1bHQgPSByZXQ7CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogRG9uZ2xlcyBhcmUgcG93ZXJlZCB0aHJvdWdoIHRoZSBtb2RlbSBjb250cm9sIGxpbmVzIHdoaWNoCisJCQkgKiB3ZXJlIGp1c3Qgc2V0IGR1cmluZyBvcGVuLiBCZWZvcmUgcmVzZXR0aW5nLCBsZXQncyB3YWl0IGZvcgorCQkJICogdGhlIHBvd2VyIHRvIHN0YWJpbGl6ZS4gVGhpcyBpcyB3aGF0IHNvbWUgZG9uZ2xlIGRyaXZlcnMgZGlkCisJCQkgKiBpbiBvcGVuIGJlZm9yZSwgd2hpbGUgb3RoZXJzIGRpZG4ndCAtIHNob3VsZCBiZSBzYWZlIGFueXdheS4KKwkJCSAqLworCisJCQlkZWxheSA9IDUwOworCQkJZnNtLT5zdWJzdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7CisJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9SRVNFVDsKKworCQkJZnNtLT5wYXJhbSA9IDk2MDA7CisKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9DTE9TRToKKwkJCS8qIHNob3VsZG4ndCB3ZSBqdXN0IHRyZWF0IHRoaXMgYXMgc3VjY2Vzcz0/ICovCisJCQlpZiAoZGV2LT5kb25nbGVfZHJ2ID09IE5VTEwpIHsKKwkJCQlmc20tPnJlc3VsdCA9IC1FSU5WQUw7CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmV0ID0gc2lyZGV2X3B1dF9kb25nbGUoZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlmc20tPnJlc3VsdCA9IHJldDsKKwkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0VSUk9SOworCQkJCWJyZWFrOworCQkJfQorCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05FOworCQkJYnJlYWs7CisKKwkJY2FzZSBTSVJERVZfU1RBVEVfU0VUX0RUUl9SVFM6CisJCQlyZXQgPSBzaXJkZXZfc2V0X2R0cl9ydHMoZGV2LAorCQkJCShmc20tPnBhcmFtJjB4MDIpID8gVFJVRSA6IEZBTFNFLAorCQkJCShmc20tPnBhcmFtJjB4MDEpID8gVFJVRSA6IEZBTFNFKTsKKwkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9ORTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX1NFVF9TUEVFRDoKKwkJCWZzbS0+c3Vic3RhdGUgPSBTSVJERVZfU1RBVEVfV0FJVF9YTUlUOworCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfQ0hFQ0s7CisJCQlicmVhazsKKworCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfQ0hFQ0s6CisJCQlyZXQgPSBzaXJkZXZfdHhfY29tcGxldGVfZnNtKGRldik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWZzbS0+cmVzdWx0ID0gcmV0OworCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKGRlbGF5PXJldCkgIT0gMCkKKwkJCQlicmVhazsKKworCQkJaWYgKGRldi0+ZG9uZ2xlX2RydikgeworCQkJCWZzbS0+c3Vic3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOworCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOworCQkJfQorCQkJZWxzZSB7CisJCQkJZGV2LT5zcGVlZCA9IGZzbS0+cGFyYW07CisJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9QT1JUX1NQRUVEOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOgorCQkJaWYgKGRldi0+ZG9uZ2xlX2Rydi0+cmVzZXQpIHsKKwkJCQlyZXQgPSBkZXYtPmRvbmdsZV9kcnYtPnJlc2V0KGRldik7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZnNtLT5yZXN1bHQgPSByZXQ7CisJCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCQlyZXQgPSAwOworCQkJaWYgKChkZWxheT1yZXQpID09IDApIHsKKwkJCQkvKiBzZXQgc2VyaWFsIHBvcnQgYWNjb3JkaW5nIHRvIGRvbmdsZSBkZWZhdWx0IHNwZWVkICovCisJCQkJaWYgKGRldi0+ZHJ2LT5zZXRfc3BlZWQpCisJCQkJCWRldi0+ZHJ2LT5zZXRfc3BlZWQoZGV2LCBkZXYtPnNwZWVkKTsKKwkJCQlmc20tPnN1YnN0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKKwkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDoKKwkJCWlmIChkZXYtPmRvbmdsZV9kcnYtPnJlc2V0KSB7CisJCQkJcmV0ID0gZGV2LT5kb25nbGVfZHJ2LT5zZXRfc3BlZWQoZGV2LCBmc20tPnBhcmFtKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlmc20tPnJlc3VsdCA9IHJldDsKKwkJCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCXJldCA9IDA7CisJCQlpZiAoKGRlbGF5PXJldCkgPT0gMCkKKwkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX1BPUlRfU1BFRUQ7CisJCQlicmVhazsKKworCQljYXNlIFNJUkRFVl9TVEFURV9QT1JUX1NQRUVEOgorCQkJLyogRmluYWxseSB3ZSBhcmUgcmVhZHkgdG8gY2hhbmdlIHRoZSBzZXJpYWwgcG9ydCBzcGVlZCAqLworCQkJaWYgKGRldi0+ZHJ2LT5zZXRfc3BlZWQpCisJCQkJZGV2LT5kcnYtPnNldF9zcGVlZChkZXYsIGRldi0+c3BlZWQpOworCQkJZGV2LT5uZXdfc3BlZWQgPSAwOworCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05FOworCQkJYnJlYWs7CisKKwkJY2FzZSBTSVJERVZfU1RBVEVfRE9ORToKKwkJCS8qIFNpZ25hbCBuZXR3b3JrIGxheWVyIHNvIGl0IGNhbiBzZW5kIG1vcmUgZnJhbWVzICovCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0ZGV2KTsKKwkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfQ09NUExFVEU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJSVJEQV9FUlJPUigiJXMgLSB1bmRlZmluZWQgc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlmc20tPnJlc3VsdCA9IC1FSU5WQUw7CisJCQkvKiBmYWxsIHRocnUgKi8KKworCQljYXNlIFNJUkRFVl9TVEFURV9FUlJPUjoKKwkJCUlSREFfRVJST1IoIiVzIC0gZXJyb3I6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGZzbS0+cmVzdWx0KTsKKworI2lmIDAJLyogZG9uJ3QgZW5hYmxlIHRoaXMgYmVmb3JlIHdlIGhhdmUgbmV0ZGV2LT50eF90aW1lb3V0IHRvIHJlY292ZXIgKi8KKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2LT5uZXRkZXYpOworI2Vsc2UKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXRkZXYpOworI2VuZGlmCisJCQkvKiBmYWxsIHRocnUgKi8KKworCQljYXNlIFNJUkRFVl9TVEFURV9DT01QTEVURToKKwkJCS8qIGNvbmZpZyBjaGFuZ2UgZmluaXNoZWQsIHNvIHdlIGFyZSBub3QgYnVzeSBhbnkgbG9uZ2VyICovCisJCQlzaXJkZXZfZW5hYmxlX3J4KGRldik7CisJCQl1cCgmZnNtLT5zZW0pOworCQkJcmV0dXJuOworCQl9CisJCWZzbS0+c3RhdGUgPSBuZXh0X3N0YXRlOworCX0gd2hpbGUoIWRlbGF5KTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhpcmRhX3Npcl93cSwgJmZzbS0+d29yaywgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworfQorCisvKiBzY2hlZHVsZSBzb21lIGRldmljZSBjb25maWd1cmF0aW9uIHRhc2sgZm9yIGV4ZWN1dGlvbiBieSBrSXJEQWQKKyAqIG9uIGJlaGFsZiBvZiB0aGUgYWJvdmUgc3RhdGUgbWFjaGluZS4KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIG9yIGludGVycnVwdC90YXNrbGV0IGNvbnRleHQuCisgKi8KKworaW50IHNpcmRldl9zY2hlZHVsZV9yZXF1ZXN0KHN0cnVjdCBzaXJfZGV2ICpkZXYsIGludCBpbml0aWFsX3N0YXRlLCB1bnNpZ25lZCBwYXJhbSkKK3sKKwlzdHJ1Y3Qgc2lyX2ZzbSAqZnNtID0gJmRldi0+ZnNtOworCisJSVJEQV9ERUJVRygyLCAiJXMgLSBzdGF0ZT0weCUwNHggLyBwYXJhbT0ldVxuIiwgX19GVU5DVElPTl9fLCBpbml0aWFsX3N0YXRlLCBwYXJhbSk7CisKKwlpZiAoZG93bl90cnlsb2NrKCZmc20tPnNlbSkpIHsKKwkJaWYgKGluX2ludGVycnVwdCgpICB8fCAgaW5fYXRvbWljKCkgIHx8ICBpcnFzX2Rpc2FibGVkKCkpIHsKKwkJCUlSREFfREVCVUcoMSwgIiVzKCksIHN0YXRlIG1hY2hpbmUgYnVzeSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVXT1VMREJMT0NLOworCQl9IGVsc2UKKwkJCWRvd24oJmZzbS0+c2VtKTsKKwl9CisKKwlpZiAoZnNtLT5zdGF0ZSA9PSBTSVJERVZfU1RBVEVfREVBRCkgeworCQkvKiByYWNlIHdpdGggc2lyZGV2X2Nsb3NlIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJSVJEQV9FUlJPUigiJXMoKSwgaW5zdGFuY2Ugc3RhbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJdXAoJmZzbS0+c2VtKTsKKwkJcmV0dXJuIC1FU1RBTEU7CQkvKiBvciBiZXR0ZXIgRVBJUEU/ICovCisJfQorCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYtPm5ldGRldik7CisJYXRvbWljX3NldCgmZGV2LT5lbmFibGVfcngsIDApOworCisJZnNtLT5zdGF0ZSA9IGluaXRpYWxfc3RhdGU7CisJZnNtLT5wYXJhbSA9IHBhcmFtOworCWZzbS0+cmVzdWx0ID0gMDsKKworCUlOSVRfV09SSygmZnNtLT53b3JrLCBzaXJkZXZfY29uZmlnX2ZzbSwgZGV2KTsKKwlxdWV1ZV93b3JrKGlyZGFfc2lyX3dxLCAmZnNtLT53b3JrKTsKKwlyZXR1cm4gMDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkIHNpcmRldl9lbmFibGVfcngoc3RydWN0IHNpcl9kZXYgKmRldikKQEAgLTYxOSwxMCArOTExLDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT50eF9sb2NrKTsKIAlpbml0X01VVEVYKCZkZXYtPmZzbS5zZW0pOwogCi0JSU5JVF9MSVNUX0hFQUQoJmRldi0+ZnNtLnJxLmxoX3JlcXVlc3QpOwotCWRldi0+ZnNtLnJxLnBlbmRpbmcgPSAwOwotCWluaXRfdGltZXIoJmRldi0+ZnNtLnJxLnRpbWVyKTsKLQogCWRldi0+ZHJ2ID0gZHJ2OwogCWRldi0+bmV0ZGV2ID0gbmRldjsKIApAQCAtNjgyLDMgKzk3MCwyMiBAQAogfQogRVhQT1JUX1NZTUJPTChzaXJkZXZfcHV0X2luc3RhbmNlKTsKIAorc3RhdGljIGludCBfX2luaXQgc2lyX3dxX2luaXQodm9pZCkKK3sKKwlpcmRhX3Npcl93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJpcmRhX3Npcl93cSIpOworCWlmICghaXJkYV9zaXJfd3EpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2lyX3dxX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShpcmRhX3Npcl93cSk7Cit9CisKK21vZHVsZV9pbml0KHNpcl93cV9pbml0KTsKK21vZHVsZV9leGl0KHNpcl93cV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFydGluIERpZWhsIDxpbmZvQG1kaWVobC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSXJEQSBTSVIgY29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfa3RocmVhZC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfa3RocmVhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzkwNGQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2t0aHJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJc2lyX2t0aHJlYWQuYzoJCWRlZGljYXRlZCB0aHJlYWQgdG8gcHJvY2VzcyBzY2hlZHVsZWQKLSAqCQkJCXNpciBkZXZpY2Ugc2V0dXAgcmVxdWVzdHMKLSAqCi0gKglDb3B5cmlnaHQgKGMpIDIwMDIgTWFydGluIERpZWhsCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCi0gKgl0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgIAotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgotCi0jaW5jbHVkZSAic2lyLWRldi5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBrSXJEQWQga2VybmVsIHRocmVhZCBhbmQgY29uZmlnIHN0YXRlIG1hY2hpbmUKLSAqCi0gKi8KLQotc3RydWN0IGlyZGFfcmVxdWVzdF9xdWV1ZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXRhc2tfdCAqdGhyZWFkOwotCXN0cnVjdCBjb21wbGV0aW9uIGV4aXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qga2ljaywgZG9uZTsKLQlhdG9taWNfdCBudW1fcGVuZGluZzsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJkYV9yZXF1ZXN0X3F1ZXVlIGlyZGFfcnFfcXVldWU7Ci0KLXN0YXRpYyBpbnQgaXJkYV9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpcmRhX3JlcXVlc3QgKnJxKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJnJxLT5wZW5kaW5nKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJkYV9ycV9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJnJxLT5saF9yZXF1ZXN0LCAmaXJkYV9ycV9xdWV1ZS5yZXF1ZXN0X2xpc3QpOwotCQl3YWtlX3VwKCZpcmRhX3JxX3F1ZXVlLmtpY2spOwotCQlhdG9taWNfaW5jKCZpcmRhX3JxX3F1ZXVlLm51bV9wZW5kaW5nKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJkYV9ycV9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IDE7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyZGFfcmVxdWVzdF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGlyZGFfcmVxdWVzdCAqcnEgPSAoc3RydWN0IGlyZGFfcmVxdWVzdCAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJkYV9ycV9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcnEtPmxoX3JlcXVlc3QsICZpcmRhX3JxX3F1ZXVlLnJlcXVlc3RfbGlzdCk7Ci0Jd2FrZV91cCgmaXJkYV9ycV9xdWV1ZS5raWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBpcmRhX3F1ZXVlX2RlbGF5ZWRfcmVxdWVzdChzdHJ1Y3QgaXJkYV9yZXF1ZXN0ICpycSwgdW5zaWduZWQgbG9uZyBkZWxheSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmcnEtPnRpbWVyOwotCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZycS0+cGVuZGluZykpIHsKLQkJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZGVsYXk7Ci0JCXRpbWVyLT5mdW5jdGlvbiA9IGlyZGFfcmVxdWVzdF90aW1lcjsKLQkJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZylycTsKLQkJYXRvbWljX2luYygmaXJkYV9ycV9xdWV1ZS5udW1fcGVuZGluZyk7Ci0JCWFkZF90aW1lcih0aW1lcik7Ci0JCXJldCA9IDE7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bl9pcmRhX3F1ZXVlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKnRtcDsKLQlzdHJ1Y3QgaXJkYV9yZXF1ZXN0ICpycTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJmlyZGFfcnFfcXVldWUucmVxdWVzdF9saXN0KSB7Ci0JCXJxID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGlyZGFfcmVxdWVzdCwgbGhfcmVxdWVzdCk7Ci0JCWxpc3RfZGVsX2luaXQoZW50cnkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQotCQljbGVhcl9iaXQoMCwgJnJxLT5wZW5kaW5nKTsKLQkJcnEtPmZ1bmMocnEtPmRhdGEpOwotCi0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpcmRhX3JxX3F1ZXVlLm51bV9wZW5kaW5nKSkKLQkJCXdha2VfdXAoJmlyZGFfcnFfcXVldWUuZG9uZSk7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlyZGFfcnFfcXVldWUubG9jaywgZmxhZ3MpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcmRhX3JxX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLX0JCQotCi1zdGF0aWMgaW50IGlyZGFfdGhyZWFkKHZvaWQgKnN0YXJ0dXApCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlkYWVtb25pemUoImtJckRBZCIpOwotCi0JaXJkYV9ycV9xdWV1ZS50aHJlYWQgPSBjdXJyZW50OwotCi0JY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopc3RhcnR1cCk7Ci0KLQl3aGlsZSAoaXJkYV9ycV9xdWV1ZS50aHJlYWQgIT0gTlVMTCkgewotCi0JCS8qIFdlIHVzZSBUQVNLX0lOVEVSUlVQVElCTEUsIHJhdGhlciB0aGFuCi0JCSAqIFRBU0tfVU5JTlRFUlJVUFRJQkxFLiAgQW5kcmV3IE1vcnRvbiBtYWRlIHRoaXMKLQkJICogY2hhbmdlIDsgaGUgdG9sZCBtZSB0aGF0IGl0IGlzIHNhZmUsIGJlY2F1c2UgInNpZ25hbAotCQkgKiBibG9ja2luZyBpcyBub3cgaGFuZGxlZCBpbiBkYWVtb25pemUoKSIsIGhlIGFkZGVkCi0JCSAqIHRoYXQgdGhlIHByb2JsZW0gaXMgdGhhdCAidW5pbnRlcnJ1cHRpYmxlIHNsZWVwCi0JCSAqIGNvbnRyaWJ1dGVzIHRvIGxvYWQgYXZlcmFnZSIsIG1ha2luZyB1c2VyIHdvcnJ5LgotCQkgKiBKZWFuIElJICovCi0JCXNldF90YXNrX3N0YXRlKGN1cnJlbnQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWFkZF93YWl0X3F1ZXVlKCZpcmRhX3JxX3F1ZXVlLmtpY2ssICZ3YWl0KTsKLQkJaWYgKGxpc3RfZW1wdHkoJmlyZGFfcnFfcXVldWUucmVxdWVzdF9saXN0KSkKLQkJCXNjaGVkdWxlKCk7Ci0JCWVsc2UKLQkJCV9fc2V0X3Rhc2tfc3RhdGUoY3VycmVudCwgVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmlyZGFfcnFfcXVldWUua2ljaywgJndhaXQpOwotCi0JCS8qIG1ha2Ugc3dzdXNwIGhhcHB5IHdpdGggb3VyIHRocmVhZCAqLwotCQl0cnlfdG9fZnJlZXplKCk7Ci0KLQkJcnVuX2lyZGFfcXVldWUoKTsKLQl9Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMzUpCi0JcmVwYXJlbnRfdG9faW5pdCgpOwotI2VuZGlmCi0JY29tcGxldGVfYW5kX2V4aXQoJmlyZGFfcnFfcXVldWUuZXhpdCwgMCk7Ci0JLyogbmV2ZXIgcmVhY2hlZCAqLwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGZsdXNoX2lyZGFfcXVldWUodm9pZCkKLXsKLQlpZiAoYXRvbWljX3JlYWQoJmlyZGFfcnFfcXVldWUubnVtX3BlbmRpbmcpKSB7Ci0KLQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZpcmRhX3JxX3F1ZXVlLnJlcXVlc3RfbGlzdCkpCi0JCQlydW5faXJkYV9xdWV1ZSgpOwotCi0JCXNldF90YXNrX3N0YXRlKGN1cnJlbnQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJYWRkX3dhaXRfcXVldWUoJmlyZGFfcnFfcXVldWUuZG9uZSwgJndhaXQpOwotCQlpZiAoYXRvbWljX3JlYWQoJmlyZGFfcnFfcXVldWUubnVtX3BlbmRpbmcpKQotCQkJc2NoZWR1bGUoKTsKLQkJZWxzZQotCQkJX19zZXRfdGFza19zdGF0ZShjdXJyZW50LCBUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaXJkYV9ycV9xdWV1ZS5kb25lLCAmd2FpdCk7Ci0JfQotfQotCi0vKiBzdWJzdGF0ZSBoYW5kbGVyIG9mIHRoZSBjb25maWctZnNtIHRvIGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2Ugd2FudAotICogdG8gd2FpdCBmb3IgdHJhbnNtaXQgY29tcGxldGlvbiBiZWZvcmUgY2hhbmdpbmcgdGhlIHBvcnQgY29uZmlndXJhdGlvbgotICovCi0KLXN0YXRpYyBpbnQgaXJkYV90eF9jb21wbGV0ZV9mc20oc3RydWN0IHNpcl9kZXYgKmRldikKLXsKLQlzdHJ1Y3Qgc2lyX2ZzbSAqZnNtID0gJmRldi0+ZnNtOwotCXVuc2lnbmVkIG5leHRfc3RhdGUsIGRlbGF5OwotCXVuc2lnbmVkIGJ5dGVzX2xlZnQ7Ci0KLQlkbyB7Ci0JCW5leHRfc3RhdGUgPSBmc20tPnN1YnN0YXRlOwkvKiBkZWZhdWx0OiBzdGF5IGluIGN1cnJlbnQgc3Vic3RhdGUgKi8KLQkJZGVsYXkgPSAwOwotCi0JCXN3aXRjaChmc20tPnN1YnN0YXRlKSB7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfV0FJVF9YTUlUOgotCQkJaWYgKGRldi0+ZHJ2LT5jaGFyc19pbl9idWZmZXIpCi0JCQkJYnl0ZXNfbGVmdCA9IGRldi0+ZHJ2LT5jaGFyc19pbl9idWZmZXIoZGV2KTsKLQkJCWVsc2UKLQkJCQlieXRlc19sZWZ0ID0gMDsKLQkJCWlmICghYnl0ZXNfbGVmdCkgewotCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfV0FJVF9VTlRJTF9TRU5UOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoZGV2LT5zcGVlZCA+IDExNTIwMCkKLQkJCQlkZWxheSA9IChieXRlc19sZWZ0KjgqMTAwMDApIC8gKGRldi0+c3BlZWQvMTAwKTsKLQkJCWVsc2UgaWYgKGRldi0+c3BlZWQgPiAwKQotCQkJCWRlbGF5ID0gKGJ5dGVzX2xlZnQqMTAqMTAwMDApIC8gKGRldi0+c3BlZWQvMTAwKTsKLQkJCWVsc2UKLQkJCQlkZWxheSA9IDA7Ci0JCQkvKiBleHBlY3RlZCBkZWxheSAodXNlYykgdW50aWwgcmVtYWluaW5nIGJ5dGVzIGFyZSBzZW50ICovCi0JCQlpZiAoZGVsYXkgPCAxMDApIHsKLQkJCQl1ZGVsYXkoZGVsYXkpOwotCQkJCWRlbGF5ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIHNsZWVwIHNvbWUgbG9uZ2VyIGRlbGF5IChtc2VjKSAqLwotCQkJZGVsYXkgPSAoZGVsYXkrOTk5KSAvIDEwMDA7Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9XQUlUX1VOVElMX1NFTlQ6Ci0JCQkvKiBibG9jayB1bnRpbCB1bmRlcmxheWluZyBoYXJkd2FyZSBidWZmZXIgYXJlIGVtcHR5ICovCi0JCQlpZiAoZGV2LT5kcnYtPndhaXRfdW50aWxfc2VudCkKLQkJCQlkZXYtPmRydi0+d2FpdF91bnRpbF9zZW50KGRldik7Ci0JCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX1RYX0RPTkU7Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9UWF9ET05FOgotCQkJcmV0dXJuIDA7Ci0KLQkJZGVmYXVsdDoKLQkJCUlSREFfRVJST1IoIiVzIC0gdW5kZWZpbmVkIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZnNtLT5zdWJzdGF0ZSA9IG5leHRfc3RhdGU7Ci0JfSB3aGlsZSAoZGVsYXkgPT0gMCk7Ci0JcmV0dXJuIGRlbGF5OwotfQotCi0vKgotICogRnVuY3Rpb24gaXJkYV9jb25maWdfZnNtCi0gKgotICogU3RhdGUgbWFjaGluZSB0byBoYW5kbGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZSAoYW5kIGF0dGFjaGVkIGRvbmdsZSwgaWYgYW55KS4KLSAqIFRoaXMgaGFuZGxlciBpcyBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbiBpbiBrSXJEQWQgY29udGV4dCwgc28gd2UgY2FuIHNsZWVwLgotICogaG93ZXZlciwga0lyREFkIGlzIHNoYXJlZCBieSBhbGwgc2lyX2RldiBkZXZpY2VzIHNvIHdlIGJldHRlciBkb24ndCBzbGVlcCB0aGVyZSB0b28KLSAqIGxvbmcuIEluc3RlYWQsIGZvciBsb25nZXIgZGVsYXlzIHdlIHN0YXJ0IGEgdGltZXIgdG8gcmVzY2hlZHVsZSB1cyBsYXRlci4KLSAqIE9uIGVudHJ5LCBmc20tPnNlbSBpcyBhbHdheXMgbG9ja2VkIGFuZCB0aGUgbmV0ZGV2IHhtaXQgcXVldWUgc3RvcHBlZC4KLSAqIEJvdGggbXVzdCBiZSB1bmxvY2tlZC9yZXN0YXJ0ZWQgb24gY29tcGxldGlvbiAtIGJ1dCBvbmx5IG9uIGZpbmFsIGV4aXQuCi0gKi8KLQotc3RhdGljIHZvaWQgaXJkYV9jb25maWdfZnNtKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHNpcl9kZXYgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHNpcl9mc20gKmZzbSA9ICZkZXYtPmZzbTsKLQlpbnQgbmV4dF9zdGF0ZTsKLQlpbnQgcmV0ID0gLTE7Ci0JdW5zaWduZWQgZGVsYXk7Ci0KLQlJUkRBX0RFQlVHKDIsICIlcygpLCA8JWxkPlxuIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsgCi0KLQlkbyB7Ci0JCUlSREFfREVCVUcoMywgIiVzIC0gc3RhdGU9MHglMDR4IC8gc3Vic3RhdGU9MHglMDR4XG4iLAotCQkJX19GVU5DVElPTl9fLCBmc20tPnN0YXRlLCBmc20tPnN1YnN0YXRlKTsKLQotCQluZXh0X3N0YXRlID0gZnNtLT5zdGF0ZTsKLQkJZGVsYXkgPSAwOwotCi0JCXN3aXRjaChmc20tPnN0YXRlKSB7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfRE9OR0xFX09QRU46Ci0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2ICE9IE5VTEwpIHsKLQkJCQlyZXQgPSBzaXJkZXZfcHV0X2RvbmdsZShkZXYpOwotCQkJCWlmIChyZXQpIHsKLQkJCQkJZnNtLT5yZXN1bHQgPSAtRUlOVkFMOwotCQkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0VSUk9SOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIEluaXRpYWxpemUgZG9uZ2xlICovCi0JCQlyZXQgPSBzaXJkZXZfZ2V0X2RvbmdsZShkZXYsIGZzbS0+cGFyYW0pOwotCQkJaWYgKHJldCkgewotCQkJCWZzbS0+cmVzdWx0ID0gcmV0OwotCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIERvbmdsZXMgYXJlIHBvd2VyZWQgdGhyb3VnaCB0aGUgbW9kZW0gY29udHJvbCBsaW5lcyB3aGljaAotCQkJICogd2VyZSBqdXN0IHNldCBkdXJpbmcgb3Blbi4gQmVmb3JlIHJlc2V0dGluZywgbGV0J3Mgd2FpdCBmb3IKLQkJCSAqIHRoZSBwb3dlciB0byBzdGFiaWxpemUuIFRoaXMgaXMgd2hhdCBzb21lIGRvbmdsZSBkcml2ZXJzIGRpZAotCQkJICogaW4gb3BlbiBiZWZvcmUsIHdoaWxlIG90aGVycyBkaWRuJ3QgLSBzaG91bGQgYmUgc2FmZSBhbnl3YXkuCi0JCQkgKi8KLQotCQkJZGVsYXkgPSA1MDsKLQkJCWZzbS0+c3Vic3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX1JFU0VUOwotCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7Ci0KLQkJCWZzbS0+cGFyYW0gPSA5NjAwOwotCi0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfQ0xPU0U6Ci0JCQkvKiBzaG91bGRuJ3Qgd2UganVzdCB0cmVhdCB0aGlzIGFzIHN1Y2Nlc3M9PyAqLwotCQkJaWYgKGRldi0+ZG9uZ2xlX2RydiA9PSBOVUxMKSB7Ci0JCQkJZnNtLT5yZXN1bHQgPSAtRUlOVkFMOwotCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXJldCA9IHNpcmRldl9wdXRfZG9uZ2xlKGRldik7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9ORTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0lSREVWX1NUQVRFX1NFVF9EVFJfUlRTOgotCQkJcmV0ID0gc2lyZGV2X3NldF9kdHJfcnRzKGRldiwKLQkJCQkoZnNtLT5wYXJhbSYweDAyKSA/IFRSVUUgOiBGQUxTRSwKLQkJCQkoZnNtLT5wYXJhbSYweDAxKSA/IFRSVUUgOiBGQUxTRSk7Ci0JCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkU7Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9TRVRfU1BFRUQ6Ci0JCQlmc20tPnN1YnN0YXRlID0gU0lSREVWX1NUQVRFX1dBSVRfWE1JVDsKLQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9OR0xFX0NIRUNLOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfRE9OR0xFX0NIRUNLOgotCQkJcmV0ID0gaXJkYV90eF9jb21wbGV0ZV9mc20oZGV2KTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9FUlJPUjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgoZGVsYXk9cmV0KSAhPSAwKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2KSB7Ci0JCQkJZnNtLT5zdWJzdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7Ci0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlkZXYtPnNwZWVkID0gZnNtLT5wYXJhbTsKLQkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX1BPUlRfU1BFRUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFNJUkRFVl9TVEFURV9ET05HTEVfUkVTRVQ6Ci0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2LT5yZXNldCkgewotCQkJCXJldCA9IGRldi0+ZG9uZ2xlX2Rydi0+cmVzZXQoZGV2KTsJCi0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCQlyZXQgPSAwOwotCQkJaWYgKChkZWxheT1yZXQpID09IDApIHsKLQkJCQkvKiBzZXQgc2VyaWFsIHBvcnQgYWNjb3JkaW5nIHRvIGRvbmdsZSBkZWZhdWx0IHNwZWVkICovCi0JCQkJaWYgKGRldi0+ZHJ2LT5zZXRfc3BlZWQpCi0JCQkJCWRldi0+ZHJ2LT5zZXRfc3BlZWQoZGV2LCBkZXYtPnNwZWVkKTsKLQkJCQlmc20tPnN1YnN0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKLQkJCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDoJCQkJCi0JCQlpZiAoZGV2LT5kb25nbGVfZHJ2LT5yZXNldCkgewotCQkJCXJldCA9IGRldi0+ZG9uZ2xlX2Rydi0+c2V0X3NwZWVkKGRldiwgZnNtLT5wYXJhbSk7Ci0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJZnNtLT5yZXN1bHQgPSByZXQ7Ci0JCQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRVJST1I7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCQlyZXQgPSAwOwotCQkJaWYgKChkZWxheT1yZXQpID09IDApCi0JCQkJbmV4dF9zdGF0ZSA9IFNJUkRFVl9TVEFURV9QT1JUX1NQRUVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTSVJERVZfU1RBVEVfUE9SVF9TUEVFRDoKLQkJCS8qIEZpbmFsbHkgd2UgYXJlIHJlYWR5IHRvIGNoYW5nZSB0aGUgc2VyaWFsIHBvcnQgc3BlZWQgKi8KLQkJCWlmIChkZXYtPmRydi0+c2V0X3NwZWVkKQotCQkJCWRldi0+ZHJ2LT5zZXRfc3BlZWQoZGV2LCBkZXYtPnNwZWVkKTsKLQkJCWRldi0+bmV3X3NwZWVkID0gMDsKLQkJCW5leHRfc3RhdGUgPSBTSVJERVZfU1RBVEVfRE9ORTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0lSREVWX1NUQVRFX0RPTkU6Ci0JCQkvKiBTaWduYWwgbmV0d29yayBsYXllciBzbyBpdCBjYW4gc2VuZCBtb3JlIGZyYW1lcyAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldGRldik7Ci0JCQluZXh0X3N0YXRlID0gU0lSREVWX1NUQVRFX0NPTVBMRVRFOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCUlSREFfRVJST1IoIiVzIC0gdW5kZWZpbmVkIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJZnNtLT5yZXN1bHQgPSAtRUlOVkFMOwotCQkJLyogZmFsbCB0aHJ1ICovCi0KLQkJY2FzZSBTSVJERVZfU1RBVEVfRVJST1I6Ci0JCQlJUkRBX0VSUk9SKCIlcyAtIGVycm9yOiAlZFxuIiwgX19GVU5DVElPTl9fLCBmc20tPnJlc3VsdCk7Ci0KLSNpZiAwCS8qIGRvbid0IGVuYWJsZSB0aGlzIGJlZm9yZSB3ZSBoYXZlIG5ldGRldi0+dHhfdGltZW91dCB0byByZWNvdmVyICovCi0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldi0+bmV0ZGV2KTsKLSNlbHNlCi0JCQluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0ZGV2KTsKLSNlbmRpZgotCQkJLyogZmFsbCB0aHJ1ICovCi0KLQkJY2FzZSBTSVJERVZfU1RBVEVfQ09NUExFVEU6Ci0JCQkvKiBjb25maWcgY2hhbmdlIGZpbmlzaGVkLCBzbyB3ZSBhcmUgbm90IGJ1c3kgYW55IGxvbmdlciAqLwotCQkJc2lyZGV2X2VuYWJsZV9yeChkZXYpOwotCQkJdXAoJmZzbS0+c2VtKTsKLQkJCXJldHVybjsKLQkJfQotCQlmc20tPnN0YXRlID0gbmV4dF9zdGF0ZTsKLQl9IHdoaWxlKCFkZWxheSk7Ci0KLQlpcmRhX3F1ZXVlX2RlbGF5ZWRfcmVxdWVzdCgmZnNtLT5ycSwgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOwotfQotCi0vKiBzY2hlZHVsZSBzb21lIGRldmljZSBjb25maWd1cmF0aW9uIHRhc2sgZm9yIGV4ZWN1dGlvbiBieSBrSXJEQWQKLSAqIG9uIGJlaGFsZiBvZiB0aGUgYWJvdmUgc3RhdGUgbWFjaGluZS4KLSAqIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIG9yIGludGVycnVwdC90YXNrbGV0IGNvbnRleHQuCi0gKi8KLQotaW50IHNpcmRldl9zY2hlZHVsZV9yZXF1ZXN0KHN0cnVjdCBzaXJfZGV2ICpkZXYsIGludCBpbml0aWFsX3N0YXRlLCB1bnNpZ25lZCBwYXJhbSkKLXsKLQlzdHJ1Y3Qgc2lyX2ZzbSAqZnNtID0gJmRldi0+ZnNtOwotCWludCB4bWl0X3dhc19kb3duOwotCi0JSVJEQV9ERUJVRygyLCAiJXMgLSBzdGF0ZT0weCUwNHggLyBwYXJhbT0ldVxuIiwgX19GVU5DVElPTl9fLCBpbml0aWFsX3N0YXRlLCBwYXJhbSk7Ci0KLQlpZiAoZG93bl90cnlsb2NrKCZmc20tPnNlbSkpIHsKLQkJaWYgKGluX2ludGVycnVwdCgpICB8fCAgaW5fYXRvbWljKCkgIHx8ICBpcnFzX2Rpc2FibGVkKCkpIHsKLQkJCUlSREFfREVCVUcoMSwgIiVzKCksIHN0YXRlIG1hY2hpbmUgYnVzeSFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQl9IGVsc2UKLQkJCWRvd24oJmZzbS0+c2VtKTsKLQl9Ci0KLQlpZiAoZnNtLT5zdGF0ZSA9PSBTSVJERVZfU1RBVEVfREVBRCkgewotCQkvKiByYWNlIHdpdGggc2lyZGV2X2Nsb3NlIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJSVJEQV9FUlJPUigiJXMoKSwgaW5zdGFuY2Ugc3RhbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJdXAoJmZzbS0+c2VtKTsKLQkJcmV0dXJuIC1FU1RBTEU7CQkvKiBvciBiZXR0ZXIgRVBJUEU/ICovCi0JfQotCi0JeG1pdF93YXNfZG93biA9IG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2LT5uZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2LT5uZXRkZXYpOwotCWF0b21pY19zZXQoJmRldi0+ZW5hYmxlX3J4LCAwKTsKLQotCWZzbS0+c3RhdGUgPSBpbml0aWFsX3N0YXRlOwotCWZzbS0+cGFyYW0gPSBwYXJhbTsKLQlmc20tPnJlc3VsdCA9IDA7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZnNtLT5ycS5saF9yZXF1ZXN0KTsKLQlmc20tPnJxLnBlbmRpbmcgPSAwOwotCWZzbS0+cnEuZnVuYyA9IGlyZGFfY29uZmlnX2ZzbTsKLQlmc20tPnJxLmRhdGEgPSBkZXY7Ci0KLQlpZiAoIWlyZGFfcXVldWVfcmVxdWVzdCgmZnNtLT5ycSkpIHsJLyogcmV0dXJucyAwIG9uIGVycm9yISAqLwotCQlhdG9taWNfc2V0KCZkZXYtPmVuYWJsZV9yeCwgMSk7Ci0JCWlmICgheG1pdF93YXNfZG93bikKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXRkZXYpOwkJCi0JCXVwKCZmc20tPnNlbSk7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaXJkYV90aHJlYWRfY3JlYXRlKHZvaWQpCi17Ci0Jc3RydWN0IGNvbXBsZXRpb24gc3RhcnR1cDsKLQlpbnQgcGlkOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmlyZGFfcnFfcXVldWUubG9jayk7Ci0JaXJkYV9ycV9xdWV1ZS50aHJlYWQgPSBOVUxMOwotCUlOSVRfTElTVF9IRUFEKCZpcmRhX3JxX3F1ZXVlLnJlcXVlc3RfbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaXJkYV9ycV9xdWV1ZS5raWNrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpcmRhX3JxX3F1ZXVlLmRvbmUpOwotCWF0b21pY19zZXQoJmlyZGFfcnFfcXVldWUubnVtX3BlbmRpbmcsIDApOwotCi0JaW5pdF9jb21wbGV0aW9uKCZzdGFydHVwKTsKLQlwaWQgPSBrZXJuZWxfdGhyZWFkKGlyZGFfdGhyZWFkLCAmc3RhcnR1cCwgQ0xPTkVfRlN8Q0xPTkVfRklMRVMpOwotCWlmIChwaWQgPD0gMCkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JZWxzZQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzdGFydHVwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXJkYV90aHJlYWRfam9pbih2b2lkKQotewotCWlmIChpcmRhX3JxX3F1ZXVlLnRocmVhZCkgewotCQlmbHVzaF9pcmRhX3F1ZXVlKCk7Ci0JCWluaXRfY29tcGxldGlvbigmaXJkYV9ycV9xdWV1ZS5leGl0KTsKLQkJaXJkYV9ycV9xdWV1ZS50aHJlYWQgPSBOVUxMOwotCQl3YWtlX3VwKCZpcmRhX3JxX3F1ZXVlLmtpY2spOwkJCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlyZGFfcnFfcXVldWUuZXhpdCk7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpcmRhX3RocmVhZF9jcmVhdGUpOwotbW9kdWxlX2V4aXQoaXJkYV90aHJlYWRfam9pbik7Ci0KLU1PRFVMRV9BVVRIT1IoIk1hcnRpbiBEaWVobCA8aW5mb0BtZGllaGwuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIklyREEgU0lSIGNvcmUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBlYzk0ZWNkLi5hNDY3NDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMTEsNiArMTEsNyBAQAogICogICAgIENvcHlyaWdodCAoYykgMjAwMiAgICAgIERhbmllbGUgUGVyaQogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAyICAgICAgSmVhbiBUb3VycmlsaGVzCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDA2ICAgICAgTGludXMgV2FsbGVpagogICoKICAqCiAgKiBCYXNlZCBvbiBzbWMtaXJjYy5jOgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC02MSw2ICs2Myw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaWZkZWYgQ09ORklHX1BDSQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQvaXJkYS93cmFwcGVyLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpAQCAtMTAwLDYgKzEwNSwyMiBAQAogCiAvKiBUeXBlcyAqLwogCisjaWZkZWYgQ09ORklHX1BDSQorc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiB7CisJdW5zaWduZWQgc2hvcnQgdmVuZG9yOyAvKiBQQ0kgdmVuZG9yIElEICovCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlOyAvKiBQQ0kgdmVuZG9yIElEICovCisJdW5zaWduZWQgc2hvcnQgc3VidmVuZG9yOyAvKiBQQ0kgc3Vic3lzdGVtIHZlbmRvciBJRCAqLworCXVuc2lnbmVkIHNob3J0IHN1YmRldmljZTsgLyogUENJIHN5YnN5c3RlbSBkZXZpY2UgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzaXJfaW87IC8qIEkvTyBwb3J0IGZvciBTSVIgKi8KKwl1bnNpZ25lZCBzaG9ydCBmaXJfaW87IC8qIEkvTyBwb3J0IGZvciBGSVIgKi8KKwl1bnNpZ25lZCBjaGFyICBmaXJfaXJxOyAvKiBGSVIgSVJRICovCisJdW5zaWduZWQgY2hhciAgZmlyX2RtYTsgLyogRklSIERNQSAqLworCXVuc2lnbmVkIHNob3J0IGNmZ19iYXNlOyAvKiBJL08gcG9ydCBmb3IgY2hpcCBjb25maWd1cmF0aW9uICovCisJaW50ICgqcHJlY29uZmlndXJlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsgLyogUHJlY29uZmlnIGZ1bmN0aW9uICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBzaG93biBhcyBpbmZvICovCit9OworI2VuZGlmCisKIHN0cnVjdCBzbXNjX3RyYW5zY2VpdmVyIHsKIAljaGFyICpuYW1lOwogCXZvaWQgKCpzZXRfZm9yX3NwZWVkKShpbnQgZmlyX2Jhc2UsIHUzMiBzcGVlZCk7CkBAIC0yMDIsNiArMjIzLDE4IEBACiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fcGFnZWQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKIHN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19mZGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOwogc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2xwYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCk7CitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfaXJxKTsKKyNlbmRpZgogCiAvKiBUcmFuc2NlaXZlcnMgc3BlY2lmaWMgZnVuY3Rpb25zICovCiAKQEAgLTMyNiw2ICszNTksMTYgQEAKICAgICAgICAgICAgICAgIGlvYmFzZSArIElSQ0NfTUFTVEVSKTsKIH0KIAorI2lmZGVmCUNPTkZJR19QTlAKKy8qIFBOUCBob3RwbHVnIHN1cHBvcnQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbXNjX2lyY2NfcG5wX3RhYmxlW10gPSB7CisJeyAuaWQgPSAiU01DZjAxMCIsIC5kcml2ZXJfZGF0YSA9IDAgfSwKKwkvKiBhbmQgcHJlc3VtYWJseSBvdGhlcnMgKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc21zY19pcmNjX3BucF90YWJsZSk7CisjZW5kaWYKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM1Myw2ICszOTYsMTMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKyNpZmRlZiBDT05GSUdfUENJCisJaWYgKHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyhpcmNjX2NmZywgaXJjY19maXIsIGlyY2Nfc2lyLCBpcmNjX2RtYSwgaXJjY19pcnEpIDwgMCkgeworCQkvKiBJZ25vcmUgZXJyb3JzIGZyb20gcHJlY29uZmlndXJhdGlvbiAqLworCQlJUkRBX0VSUk9SKCIlcywgUHJlY29uZmlndXJhdGlvbiBmYWlsZWQgIVxuIiwgZHJpdmVyX25hbWUpOworCX0KKyNlbmRpZgorCiAJZGV2X2NvdW50ID0gMDsKIAogCWlmIChpcmNjX2ZpciA+IDAgJiYgaXJjY19zaXIgPiAwKSB7CkBAIC0yMDMzLDcgKzIwODMsOCBAQAogCiAvKiBQUk9CSU5HCiAgKgotICoKKyAqIFJFVklTSVQgd2UgY2FuIGJlIHRvbGQgYWJvdXQgdGhlIGRldmljZSBieSBQTlAsIGFuZCBzaG91bGQgdXNlIHRoYXQgaW5mbworICogaW5zdGVhZCBvZiBwcm9iaW5nIGhhcmR3YXJlIGFuZCBjcmVhdGluZyBhIHBsYXRmb3JtX2RldmljZSAuLi4KICAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfbG9va19mb3JfY2hpcHModm9pZCkKQEAgLTIyODUsNiArMjMzNiw0OTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogTG9vayBmb3Igc29tZSBzcGVjaWZpYyBzdWJzeXN0ZW0gc2V0dXBzIHRoYXQgbmVlZAorICogcHJlLWNvbmZpZ3VyYXRpb24gbm90IHByb3Blcmx5IGRvbmUgYnkgdGhlIEJJT1MgKGVzcGVjaWFsbHkgbGFwdG9wcykKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHNtY2luaXQuYywgdG9zaDE4MDAtc21jaW5pdC5jCisgKiBhbmQgdG9zaDI0NTAtc21jaW5pdC5jLiBUaGUgdGFibGUgbGlzdHMgdGhlIGRldmljZSBlbnRyaWVzCisgKiBmb3IgSVNBIGJyaWRnZXMgd2l0aCBhbiBMUEMgKExvdyBQaW4gQ291bnQpIGNvbnRyb2xsZXIgd2hpY2gKKyAqIGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgU01TQyBkZXZpY2UuIEFmdGVyIHRoZSBMUEMKKyAqIGNvbnRyb2xsZXIgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCBQQ0ksIHRoZSBTTVNDIGRldmljZSBpcyBpbml0aWFsaXplZAorICogdGhyb3VnaCBhIGRlZGljYXRlZCBwb3J0IGluIHRoZSBJU0EgcG9ydC1tYXBwZWQgSS9PIGFyZWEsIHRoaXMgbGF0dGVyCisgKiBhcmVhIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBTTVNDIGRldmljZSB3aXRoIGRlZmF1bHQKKyAqIFNJUiBhbmQgRklSIEkvTyBwb3J0cywgRE1BIGFuZCBJUlEuIERpZmZlcmVudCB2ZW5kb3JzIGhhdmUKKyAqIHVzZWQgZGlmZmVyZW50IHNldHMgb2YgcGFyYW1ldGVycyBhbmQgZGlmZmVyZW50IGNvbnRyb2wgcG9ydAorICogYWRkcmVzc2VzIG1ha2luZyBhIHN1YnN5c3RlbSBkZXZpY2UgdGFibGUgbmVjZXNzYXJ5LgorICovCisjaWZkZWYgQ09ORklHX1BDSQorI2RlZmluZSBQQ0lJRF9WRU5ET1JfSU5URUwgMHg4MDg2CisjZGVmaW5lIFBDSUlEX1ZFTkRPUl9BTEkgMHgxMGI5CitzdGF0aWMgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9JTlRFTCwgLyogSW50ZWwgODI4MDFEQk0gTFBDIGJyaWRnZSAqLworCQkuZGV2aWNlID0gMHgyNGNjLAorCQkuc3VidmVuZG9yID0gMHgxMDNjLAorCQkuc3ViZGV2aWNlID0gMHgwODhjLAorCQkvKiBRdWl0ZSBjZXJ0YWluIHRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgbmM4MDAwIGFzIGZvciBuYzYwMDAgKi8KKwkJLnNpcl9pbyA9IDB4MDJmOCwKKwkJLmZpcl9pbyA9IDB4MDEzMCwKKwkJLmZpcl9pcnEgPSAweDA1LAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDA0ZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxLAorCQkubmFtZSA9ICJIUCBuYzgwMDAiLAorCX0sCisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0Y2MsCisJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCisJCS5zdWJkZXZpY2UgPSAweDA4OTAsCisJCS5zaXJfaW8gPSAweDAyZjgsCisJCS5maXJfaW8gPSAweDAxMzAsCisJCS5maXJfaXJxID0gMHgwNSwKKwkJLmZpcl9kbWEgPSAweDAzLAorCQkuY2ZnX2Jhc2UgPSAweDAwNGUsCisJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKKwkJLm5hbWUgPSAiSFAgbmM2MDAwIiwKKwl9LAorCXsKKwkJLyogSW50ZWwgODI4MDFEQi9EQkwgKElDSDQvSUNINC1MKSBMUEMgSW50ZXJmYWNlIEJyaWRnZSAqLworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLAorCQkuZGV2aWNlID0gMHgyNGMwLAorCQkuc3VidmVuZG9yID0gMHgxMTc5LAorCQkuc3ViZGV2aWNlID0gMHhmZmZmLCAvKiAweGZmZmYgaXMgImFueSIgKi8KKwkJLnNpcl9pbyA9IDB4MDNmOCwKKwkJLmZpcl9pbyA9IDB4MDEzMCwKKwkJLmZpcl9pcnEgPSAweDA3LAorCQkuZmlyX2RtYSA9IDB4MDEsCisJCS5jZmdfYmFzZSA9IDB4MDAyZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxLAorCQkubmFtZSA9ICJUb3NoaWJhIGxhcHRvcCB3aXRoIEludGVsIDgyODAxREIvREJMIExQQyBicmlkZ2UiLAorCX0sCisJeworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMUNBTSBJU0EgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0OGMsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiAqLworCQkuc2lyX2lvID0gMHgwM2Y4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDMsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIlRvc2hpYmEgbGFwdG9wIHdpdGggSW50ZWwgODI4MDFDQU0gSVNBIGJyaWRnZSIsCisJfSwKKwl7CisJCS8qIDgyODAxREJNIChJQ0g0LU0pIExQQyBJbnRlcmZhY2UgQnJpZGdlICovCisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsCisJCS5kZXZpY2UgPSAweDI0Y2MsCisJCS5zdWJ2ZW5kb3IgPSAweDExNzksCisJCS5zdWJkZXZpY2UgPSAweGZmZmYsIC8qIDB4ZmZmZiBpcyAiYW55IiAqLworCQkuc2lyX2lvID0gMHgwM2Y4LAorCQkuZmlyX2lvID0gMHgwMTMwLAorCQkuZmlyX2lycSA9IDB4MDMsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIlRvc2hpYmEgbGFwdG9wIHdpdGggSW50ZWwgODI4MURCTSBMUEMgYnJpZGdlIiwKKwl9LAorCXsKKwkJLyogQUxpIE0xNTMzL00xNTM1IFBDSSB0byBJU0EgQnJpZGdlIFtBbGFkZGluIElWL1YvVitdICovCisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfQUxJLAorCQkuZGV2aWNlID0gMHgxNTMzLAorCQkuc3VidmVuZG9yID0gMHgxMTc5LAorCQkuc3ViZGV2aWNlID0gMHhmZmZmLCAvKiAweGZmZmYgaXMgImFueSIgKi8KKwkJLnNpcl9pbyA9IDB4MDJlOCwKKwkJLmZpcl9pbyA9IDB4MDJmOCwKKwkJLmZpcl9pcnEgPSAweDA3LAorCQkuZmlyX2RtYSA9IDB4MDMsCisJCS5jZmdfYmFzZSA9IDB4MDAyZSwKKwkJLnByZWNvbmZpZ3VyZSA9IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaSwKKwkJLm5hbWUgPSAiVG9zaGliYSBsYXB0b3Agd2l0aCBBTGkgSVNBIGJyaWRnZSIsCisJfSwKKwl7IH0gLy8gVGVybWluYXRvcgorfTsKKworCisvKgorICogVGhpcyBzZXRzIHVwIHRoZSBiYXNpYyBTTVNDIHBhcmFtZXRlcnMKKyAqIChGSVIgcG9ydCwgU0lSIHBvcnQsIEZJUiBETUEsIEZJUiBJUlEpCisgKiB0aHJvdWdoIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gcG9ydC4KKyAqLworc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3QKKwkJCQkJIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQkgKmNvbmYpCit7CisJdW5zaWduZWQgc2hvcnQgaW9iYXNlID0gY29uZi0+Y2ZnX2Jhc2U7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJb3V0YihMUEM0N04yMjdfQ0ZHQUNDRVNTS0VZLCBpb2Jhc2UpOyAvLyBlbnRlciBjb25maWd1cmF0aW9uIHN0YXRlCisJb3V0YihTTVNDU0lPRkxBVF9ERVZJQ0VJRF9SRUcsIGlvYmFzZSk7IC8vIHNldCBmb3IgZGV2aWNlIElECisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKzEpOyAvLyBSZWFkIGRldmljZSBJRAorCUlSREFfREVCVUcoMCwKKwkJICAgIkRldGVjdGVkIENoaXAgaWQ6IDB4JTAyeCwgc2V0dGluZyB1cCByZWdpc3RlcnMuLi5cbiIsCisJCSAgIHRtcGJ5dGUpOworCisJLyogRGlzYWJsZSBVQVJUMSBhbmQgc2V0IHVwIFNJUiBJL08gcG9ydCAqLworCW91dGIoMHgyNCwgaW9iYXNlKTsgIC8vIHNlbGVjdCBDUjI0IC0gVUFSVDEgYmFzZSBhZGRyCisJb3V0YigweDAwLCBpb2Jhc2UgKyAxKTsgLy8gZGlzYWJsZSBVQVJUMQorCW91dGIoU01TQ1NJT0ZMQVRfVUFSVDJCQVNFQUREUl9SRUcsIGlvYmFzZSk7ICAvLyBzZWxlY3QgQ1IyNSAtIFVBUlQyIGJhc2UgYWRkcgorCW91dGIoIChjb25mLT5zaXJfaW8gPj4gMiksIGlvYmFzZSArIDEpOyAvLyBiaXRzIDItOSBvZiAweDNmOAorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJaWYgKHRtcGJ5dGUgIT0gKGNvbmYtPnNpcl9pbyA+PiAyKSApIHsKKwkJSVJEQV9XQVJOSU5HKCJFUlJPUjogY291bGQgbm90IGNvbmZpZ3VyZSBTSVIgaW9wb3J0LlxuIik7CisJCUlSREFfV0FSTklORygiVHJ5IHRvIHN1cHBseSBpcmNjX2NmZyBhcmd1bWVudC5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIFNldCB1cCBGSVIgSVJRIGNoYW5uZWwgZm9yIFVBUlQyICovCisJb3V0YihTTVNDU0lPRkxBVF9VQVJUSVJRU0VMRUNUX1JFRywgaW9iYXNlKTsgLy8gc2VsZWN0IENSMjggLSBVQVJUMSwyIElSUSBzZWxlY3QKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCXRtcGJ5dGUgJj0gU01TQ1NJT0ZMQVRfVUFSVDFJUlFTRUxFQ1RfTUFTSzsgLy8gRG8gbm90IHRvdWNoIHRoZSBVQVJUMSBwb3J0aW9uCisJdG1wYnl0ZSB8PSAoY29uZi0+ZmlyX2lycSAmIFNNU0NTSU9GTEFUX1VBUlQySVJRU0VMRUNUX01BU0spOworCW91dGIodG1wYnl0ZSwgaW9iYXNlICsgMSk7CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKSAmIFNNU0NTSU9GTEFUX1VBUlQySVJRU0VMRUNUX01BU0s7CisJaWYgKHRtcGJ5dGUgIT0gY29uZi0+ZmlyX2lycSkgeworCQlJUkRBX1dBUk5JTkcoIkVSUk9SOiBjb3VsZCBub3QgY29uZmlndXJlIEZJUiBJUlEgY2hhbm5lbC5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIFNldCB1cCBGSVIgSS9PIHBvcnQgKi8KKwlvdXRiKFNNU0NTSU9GTEFUX0ZJUkJBU0VBRERSX1JFRywgaW9iYXNlKTsgIC8vIENSMkIgLSBTQ0UgKEZJUikgYmFzZSBhZGRyCisJb3V0YigoY29uZi0+ZmlyX2lvID4+IDMpLCBpb2Jhc2UgKyAxKTsKKwl0bXBieXRlID0gaW5iKGlvYmFzZSArIDEpOworCWlmICh0bXBieXRlICE9IChjb25mLT5maXJfaW8gPj4gMykgKSB7CisJCUlSREFfV0FSTklORygiRVJST1I6IGNvdWxkIG5vdCBjb25maWd1cmUgRklSIEkvTyBwb3J0LlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogU2V0IHVwIEZJUiBETUEgY2hhbm5lbCAqLworCW91dGIoU01TQ1NJT0ZMQVRfRklSRE1BU0VMRUNUX1JFRywgaW9iYXNlKTsgIC8vIENSMkMgLSBTQ0UgKEZJUikgRE1BIHNlbGVjdAorCW91dGIoKGNvbmYtPmZpcl9kbWEgJiBMUEM0N04yMjdfRklSRE1BU0VMRUNUX01BU0spLCBpb2Jhc2UgKyAxKTsgLy8gRE1BCisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKSAmIExQQzQ3TjIyN19GSVJETUFTRUxFQ1RfTUFTSzsKKwlpZiAodG1wYnl0ZSAhPSAoY29uZi0+ZmlyX2RtYSAmIExQQzQ3TjIyN19GSVJETUFTRUxFQ1RfTUFTSykpIHsKKwkJSVJEQV9XQVJOSU5HKCJFUlJPUjogY291bGQgbm90IGNvbmZpZ3VyZSBGSVIgRE1BIGNoYW5uZWwuXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlvdXRiKFNNU0NTSU9GTEFUX1VBUlRNT0RFMENfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IwQyAtIFVBUlQgbW9kZQorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJdG1wYnl0ZSAmPSB+U01TQ1NJT0ZMQVRfVUFSVDJNT0RFX01BU0sgfAorCQlTTVNDU0lPRkxBVF9VQVJUMk1PREVfVkFMX0lSREE7CisJb3V0Yih0bXBieXRlLCBpb2Jhc2UgKyAxKTsgLy8gZW5hYmxlIElyREEgKEhQU0lSKSBtb2RlLCBoaWdoIHNwZWVkCisKKwlvdXRiKExQQzQ3TjIyN19BUE1CT09URFJJVkVfUkVHLCBpb2Jhc2UpOyAgLy8gQ1IwNyAtIEF1dG8gUHdyIE1ndC9ib290IGRyaXZlIHNlbAorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgTFBDNDdOMjI3X1VBUlQyQVVUT1BXUkRPV05fTUFTSywgaW9iYXNlICsgMSk7IC8vIGVuYWJsZSBVQVJUMiBhdXRvcG93ZXIgZG93bgorCisJLyogVGhpcyBvbmUgd2FzIG5vdCBwYXJ0IG9mIHRvc2gxODAwICovCisJb3V0YigweDBhLCBpb2Jhc2UpOyAgLy8gQ1IwYSAtIGVjcCBmaWZvIC8gaXIgbXV4CisJdG1wYnl0ZSA9IGluYihpb2Jhc2UgKyAxKTsKKwlvdXRiKHRtcGJ5dGUgfCAweDQwLCBpb2Jhc2UgKyAxKTsgLy8gc2VuZCBhY3RpdmUgZGV2aWNlIHRvIGlyIHBvcnQKKworCW91dGIoTFBDNDdOMjI3X1VBUlQxMlBPV0VSX1JFRywgaW9iYXNlKTsgIC8vIENSMDIgLSBVQVJUIDEsMiBwb3dlcgorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgTFBDNDdOMjI3X1VBUlQyUE9XRVJET1dOX01BU0ssIGlvYmFzZSArIDEpOyAvLyBVQVJUMiBwb3dlciB1cCBtb2RlLCBVQVJUMSBwb3dlciBkb3duCisKKwlvdXRiKExQQzQ3TjIyN19GRENQT1dFUlZBTElEQ09ORl9SRUcsIGlvYmFzZSk7ICAvLyBDUjAwIC0gRkRDIFBvd2VyL3ZhbGlkIGNvbmZpZyBjeWNsZQorCXRtcGJ5dGUgPSBpbmIoaW9iYXNlICsgMSk7CisJb3V0Yih0bXBieXRlIHwgTFBDNDdOMjI3X1ZBTElEX01BU0ssIGlvYmFzZSArIDEpOyAvLyB2YWxpZCBjb25maWcgY3ljbGUgZG9uZQorCisJb3V0YihMUEM0N04yMjdfQ0ZHRVhJVEtFWSwgaW9iYXNlKTsgIC8vIEV4aXQgY29uZmlndXJhdGlvbgorCisJcmV0dXJuIDA7Cit9CisKKy8qIDgyODAxQ0FNIGdlbmVyaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZJRCAweDAwCisjZGVmaW5lIERJRCAweDAyCisjZGVmaW5lIFBJUlFfQV9EX1JPVVQgMHg2MAorI2RlZmluZSBTSVJRX0NOVEwgMHg2NAorI2RlZmluZSBQSVJRX0VfSF9ST1VUIDB4NjgKKyNkZWZpbmUgUENJX0RNQV9DIDB4OTAKKy8qIExQQy1zcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ09NX0RFQyAweGUwCisjZGVmaW5lIEdFTjFfREVDIDB4ZTQKKyNkZWZpbmUgTFBDX0VOIDB4ZTYKKyNkZWZpbmUgR0VOMl9ERUMgMHhlYworLyoKKyAqIFNldHMgdXAgdGhlIEkvTyByYW5nZSB1c2luZyB0aGUgODI4MDFDQU0gSVNBIGJyaWRnZSwgODI4MDFEQk0gTFBDIGJyaWRnZQorICogb3IgSW50ZWwgODI4MDFEQi9EQkwgKElDSDQvSUNINC1MKSBMUEMgSW50ZXJmYWNlIEJyaWRnZS4KKyAqIFRoZXkgYWxsIHdvcmsgdGhlIHNhbWUgd2F5IQorICovCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIHN0cnVjdAorCQkJCQkgICAgIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQkgICAgICpjb25mKQoreworCXVuc2lnbmVkIHNob3J0IHRtcHdvcmQ7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJSVJEQV9NRVNTQUdFKCJTZXR0aW5nIHVwIEludGVsIDgyODAxIGNvbnRyb2xsZXIgYW5kIFNNU0MgZGV2aWNlXG4iKTsKKwkvKgorCSAqIFNlbGVjdCB0aGUgcmFuZ2UgZm9yIHRoZSBDT01BIENPTSBwb3J0IChTSVIpCisJICogUmVnaXN0ZXIgQ09NX0RFQzoKKwkgKiBCaXQgNzogcmVzZXJ2ZWQKKwkgKiBCaXQgNi00LCBDT01CIGRlY29kZSByYW5nZQorCSAqIEJpdCAzOiByZXNlcnZlZAorCSAqIEJpdCAyLTAsIENPTUEgZGVjb2RlIHJhbmdlCisJICoKKwkgKiBEZWNvZGUgcmFuZ2VzOgorCSAqICAgMDAwID0gMHgzZjgtMHgzZmYgKENPTTEpCisJICogICAwMDEgPSAweDJmOC0weDJmZiAoQ09NMikKKwkgKiAgIDAxMCA9IDB4MjIwLTB4MjI3CisJICogICAwMTEgPSAweDIyOC0weDIyZgorCSAqICAgMTAwID0gMHgyMzgtMHgyM2YKKwkgKiAgIDEwMSA9IDB4MmU4LTB4MmVmIChDT000KQorCSAqICAgMTEwID0gMHgzMzgtMHgzM2YKKwkgKiAgIDExMSA9IDB4M2U4LTB4M2VmIChDT00zKQorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ09NX0RFQywgJnRtcGJ5dGUpOworCXRtcGJ5dGUgJj0gMHhmODsgLyogbWFzayBDT01BIGJpdHMgKi8KKwlzd2l0Y2goY29uZi0+c2lyX2lvKSB7CisJY2FzZSAweDNmODoKKwkJdG1wYnl0ZSB8PSAweDAwOworCQlicmVhazsKKwljYXNlIDB4MmY4OgorCQl0bXBieXRlIHw9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgMHgyMjA6CisJCXRtcGJ5dGUgfD0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAweDIyODoKKwkJdG1wYnl0ZSB8PSAweDAzOworCQlicmVhazsKKwljYXNlIDB4MjM4OgorCQl0bXBieXRlIHw9IDB4MDQ7CisJCWJyZWFrOworCWNhc2UgMHgyZTg6CisJCXRtcGJ5dGUgfD0gMHgwNTsKKwkJYnJlYWs7CisJY2FzZSAweDMzODoKKwkJdG1wYnl0ZSB8PSAweDA2OworCQlicmVhazsKKwljYXNlIDB4M2U4OgorCQl0bXBieXRlIHw9IDB4MDc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcGJ5dGUgfD0gMHgwMTsgLyogQ09NMiBkZWZhdWx0ICovCisJfQorCUlSREFfREVCVUcoMSwgIkNPTV9ERUMgKHdyaXRlKTogMHglMDJ4XG4iLCB0bXBieXRlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDT01fREVDLCB0bXBieXRlKTsKKworCS8qIEVuYWJsZSBMb3cgUGluIENvdW50IGludGVyZmFjZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgTFBDX0VOLCAmdG1wd29yZCk7CisJLyogVGhlc2Ugc2VlbSB0byBiZSBzZXQgdXAgYXQgYWxsIHRpbWVzLAorCSAqIGp1c3QgbWFrZSBzdXJlIGl0IGlzIHByb3Blcmx5IHNldC4KKwkgKi8KKwlzd2l0Y2goY29uZi0+Y2ZnX2Jhc2UpIHsKKwljYXNlIDB4MDRlOgorCQl0bXB3b3JkIHw9IDB4MjAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAyZToKKwkJdG1wd29yZCB8PSAweDEwMDA7CisJCWJyZWFrOworCWNhc2UgMHgwNjI6CisJCXRtcHdvcmQgfD0gMHgwODAwOworCQlicmVhazsKKwljYXNlIDB4MDYwOgorCQl0bXB3b3JkIHw9IDB4MDQwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVJEQV9XQVJOSU5HKCJVbmNvbW1vbiBJL08gYmFzZSBhZGRyZXNzOiAweCUwNHhcbiIsCisJCQkgICAgIGNvbmYtPmNmZ19iYXNlKTsKKwkJYnJlYWs7CisJfQorCXRtcHdvcmQgJj0gMHhmZmZkOyAvKiBkaXNhYmxlIExQQyBDT01CICovCisJdG1wd29yZCB8PSAweDAwMDE7IC8qIHNldCBiaXQgMCA6IGVuYWJsZSBMUEMgQ09NQSBhZGRyIHJhbmdlIChHRU4yKSAqLworCUlSREFfREVCVUcoMSwgIkxQQ19FTiAod3JpdGUpOiAweCUwNHhcbiIsIHRtcHdvcmQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIExQQ19FTiwgdG1wd29yZCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBMUEMgRE1BIGNoYW5uZWwKKwkgKiBQQ0lfRE1BX0MgYml0czoKKwkgKiBCaXQgMTUtMTQ6IERNQSBjaGFubmVsIDcgc2VsZWN0CisJICogQml0IDEzLTEyOiBETUEgY2hhbm5lbCA2IHNlbGVjdAorCSAqIEJpdCAxMS0xMDogRE1BIGNoYW5uZWwgNSBzZWxlY3QKKwkgKiBCaXQgOS04OiAgIFJlc2VydmVkCisJICogQml0IDctNjogICBETUEgY2hhbm5lbCAzIHNlbGVjdAorCSAqIEJpdCA1LTQ6ICAgRE1BIGNoYW5uZWwgMiBzZWxlY3QKKwkgKiBCaXQgMy0yOiAgIERNQSBjaGFubmVsIDEgc2VsZWN0CisJICogQml0IDEtMDogICBETUEgY2hhbm5lbCAwIHNlbGVjdAorCSAqICAwMCA9IFJlc2VydmVkIHZhbHVlCisJICogIDAxID0gUEMvUENJIERNQQorCSAqICAxMCA9IFJlc2VydmVkIHZhbHVlCisJICogIDExID0gTFBDIEkvRiBETUEKKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9ETUFfQywgJnRtcHdvcmQpOworCXN3aXRjaChjb25mLT5maXJfZG1hKSB7CisJY2FzZSAweDA3OgorCQl0bXB3b3JkIHw9IDB4YzAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDA2OgorCQl0bXB3b3JkIHw9IDB4MzAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDA1OgorCQl0bXB3b3JkIHw9IDB4MGMwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAzOgorCQl0bXB3b3JkIHw9IDB4MDBjMDsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQl0bXB3b3JkIHw9IDB4MDAzMDsKKwkJYnJlYWs7CisJY2FzZSAweDAxOgorCQl0bXB3b3JkIHw9IDB4MDAwYzsKKwkJYnJlYWs7CisJY2FzZSAweDAwOgorCQl0bXB3b3JkIHw9IDB4MDAwMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7IC8qIGRvIG5vdCBjaGFuZ2Ugc2V0dGluZ3MgKi8KKwl9CisJSVJEQV9ERUJVRygxLCAiUENJX0RNQV9DICh3cml0ZSk6IDB4JTA0eFxuIiwgdG1wd29yZCk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0RNQV9DLCB0bXB3b3JkKTsKKworCS8qCisJICogR0VOMl9ERUMgYml0czoKKwkgKiBCaXQgMTUtNDogR2VuZXJpYyBJL08gcmFuZ2UKKwkgKiBCaXQgMy0xOiByZXNlcnZlZCAocmVhZCBhcyAwKQorCSAqIEJpdCAwOiBlbmFibGUgR0VOMiByYW5nZSBvbiBMUEMgSS9GCisJICovCisJdG1wd29yZCA9IGNvbmYtPmZpcl9pbyAmIDB4ZmZmODsKKwl0bXB3b3JkIHw9IDB4MDAwMTsKKwlJUkRBX0RFQlVHKDEsICJHRU4yX0RFQyAod3JpdGUpOiAweCUwNHhcbiIsIHRtcHdvcmQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIEdFTjJfREVDLCB0bXB3b3JkKTsKKworCS8qIFByZS1jb25maWd1cmUgY2hpcCAqLworCXJldHVybiBwcmVjb25maWd1cmVfc21zY19jaGlwKGNvbmYpOworfQorCisvKgorICogUHJlLWNvbmZpZ3VyZSBhIGNlcnRhaW4gcG9ydCBvbiB0aGUgQUxpIDE1MzMgYnJpZGdlLgorICogVGhpcyBpcyBiYXNlZCBvbiByZXZlcnNlLWVuZ2luZWVyaW5nIHNpbmNlIEFMaSBkb2VzIG5vdAorICogcHJvdmlkZSBhbnkgZGF0YSBzaGVldCBmb3IgdGhlIDE1MzMgY2hpcC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwkvKiBUaGVzZSBiaXRzIG9idmlvdXNseSBjb250cm9sIHRoZSBkaWZmZXJlbnQgcG9ydHMgKi8KKwl1bnNpZ25lZCBjaGFyIG1hc2s7CisJdW5zaWduZWQgY2hhciB0bXBieXRlOworCisJc3dpdGNoKHBvcnQpIHsKKwljYXNlIDB4MDEzMDoKKwljYXNlIDB4MDE3ODoKKwkJcmVnID0gMHhiMDsKKwkJbWFzayA9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgMHgwM2Y4OgorCQlyZWcgPSAweGI0OworCQltYXNrID0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSAweDAyZjg6CisJCXJlZyA9IDB4YjQ7CisJCW1hc2sgPSAweDMwOworCQlicmVhazsKKwljYXNlIDB4MDJlODoKKwkJcmVnID0gMHhiNDsKKwkJbWFzayA9IDB4MDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlSREFfRVJST1IoIkZhaWxlZCB0byBjb25maWd1cmUgdW5zdXBwb3J0ZWQgcG9ydCBvbiBBTGkgMTUzMyBicmlkZ2U6IDB4JTA0eFxuIiwgcG9ydCk7CisJCXJldHVybjsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHJlZywgJnRtcGJ5dGUpOworCS8qIFR1cm4gb24gdGhlIHJpZ2h0IGJpdHMgKi8KKwl0bXBieXRlIHw9IG1hc2s7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcmVnLCB0bXBieXRlKTsKKwlJUkRBX01FU1NBR0UoIkFjdGl2YXRlZCBBTGkgMTUzMyBJU0EgYnJpZGdlIHBvcnQgMHglMDR4LlxuIiwgcG9ydCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgc3RydWN0CisJCQkJCSAgIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgorCQkJCQkgICAqY29uZikKK3sKKwkvKiBDb25maWd1cmUgdGhlIHR3byBwb3J0cyBvbiB0aGUgQUxpIDE1MzMgKi8KKwlwcmVjb25maWd1cmVfYWxpX3BvcnQoZGV2LCBjb25mLT5zaXJfaW8pOworCXByZWNvbmZpZ3VyZV9hbGlfcG9ydChkZXYsIGNvbmYtPmZpcl9pbyk7CisKKwkvKiBQcmUtY29uZmlndXJlIGNoaXAgKi8KKwlyZXR1cm4gcHJlY29uZmlndXJlX3Ntc2NfY2hpcChjb25mKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2NfZmlyLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2Nfc2lyLAorCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgaXJjY19kbWEsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2lycSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBzaG9ydCBzc192ZW5kb3IgPSAweDAwMDA7CisJdW5zaWduZWQgc2hvcnQgc3NfZGV2aWNlID0gMHgwMDAwOworCWludCByZXQgPSAwOworCisJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KTsKKworCXdoaWxlIChkZXYgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mOworCisJCS8qCisJCSAqIENhY2hlIHRoZSBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZToKKwkJICogc29tZSBtYW51ZmFjdHVyZXJzIGZhaWwgdG8gc2V0IHRoaXMgZm9yIGFsbCBjb21wb25lbnRzLAorCQkgKiBzbyB3ZSBzYXZlIGl0IGluIGNhc2UgdGhlcmUgaXMganVzdCAweDAwMDAgMHgwMDAwIG9uIHRoZQorCQkgKiBkZXZpY2Ugd2Ugd2FudCB0byBjaGVjay4KKwkJICovCisJCWlmIChkZXYtPnN1YnN5c3RlbV92ZW5kb3IgIT0gMHgwMDAwVSkgeworCQkJc3NfdmVuZG9yID0gZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCQkJc3NfZGV2aWNlID0gZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCQl9CisJCWNvbmYgPSBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnM7CisJCWZvciggOyBjb25mLT5zdWJ2ZW5kb3I7IGNvbmYrKykgeworCQkJaWYoY29uZi0+dmVuZG9yID09IGRldi0+dmVuZG9yICYmCisJCQkgICBjb25mLT5kZXZpY2UgPT0gZGV2LT5kZXZpY2UgJiYKKwkJCSAgIGNvbmYtPnN1YnZlbmRvciA9PSBzc192ZW5kb3IgJiYKKwkJCSAgIC8qIFNvbWV0aW1lcyB0aGVzZSBhcmUgY2FjaGVkIHZhbHVlcyAqLworCQkJICAgKGNvbmYtPnN1YmRldmljZSA9PSBzc19kZXZpY2UgfHwKKwkJCSAgICBjb25mLT5zdWJkZXZpY2UgPT0gMHhmZmZmKSkgeworCQkJCXN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24KKwkJCQkJdG1wY29uZjsKKworCQkJCW1lbWNweSgmdG1wY29uZiwgY29uZiwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24pKTsKKworCQkJCS8qCisJCQkJICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIHdpdGggYW55dGhpbmcKKwkJCQkgKiBwYXNzZWQgaW4gYXMgcGFyYW1ldGVyCisJCQkJICovCisJCQkJaWYgKGlyY2NfY2ZnICE9IDApCisJCQkJCXRtcGNvbmYuY2ZnX2Jhc2UgPSBpcmNjX2NmZzsKKwkJCQlpZiAoaXJjY19maXIgIT0gMCkKKwkJCQkJdG1wY29uZi5maXJfaW8gPSBpcmNjX2ZpcjsKKwkJCQlpZiAoaXJjY19zaXIgIT0gMCkKKwkJCQkJdG1wY29uZi5zaXJfaW8gPSBpcmNjX3NpcjsKKwkJCQlpZiAoaXJjY19kbWEgIT0gMHhmZikKKwkJCQkJdG1wY29uZi5maXJfZG1hID0gaXJjY19kbWE7CisJCQkJaWYgKGlyY2NfaXJxICE9IDB4ZmYpCisJCQkJCXRtcGNvbmYuZmlyX2lycSA9IGlyY2NfaXJxOworCisJCQkJSVJEQV9NRVNTQUdFKCJEZXRlY3RlZCB1bmNvbmZpZ3VyZWQgJXMgU01TQyBJckRBIGNoaXAsIHByZS1jb25maWd1cmluZyBkZXZpY2UuXG4iLCBjb25mLT5uYW1lKTsKKwkJCQlpZiAoY29uZi0+cHJlY29uZmlndXJlKQorCQkJCQlyZXQgPSBjb25mLT5wcmVjb25maWd1cmUoZGV2LCAmdG1wY29uZik7CisJCQkJZWxzZQorCQkJCQlyZXQgPSAtRU5PREVWOworCQkJfQorCQl9CisJCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvLyBDT05GSUdfUENJCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBUcmFuc2NlaXZlcnMgc3BlY2lmaWMgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBmOWY3N2U0Li5jZmQ2N2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTM1NywxOCArMzU3LDIwIEBACiAJaWYoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkKIAkJcmV0dXJuIGVycjsKIAotCWlmKCEoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CisJaWYoIShlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgJiYKKwkgICAhKGVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CiAJCXBjaV91c2luZ19kYWMgPSAxOwogCX0gZWxzZSB7Ci0JCWlmKChlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKKwkJaWYoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB8fAorCQkgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKIAkJCUlYR0JfRVJSKCJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXG4iKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9kbWFfbWFzazsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMDsKIAl9CiAKIAlpZigoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBpeGdiX2RyaXZlcl9uYW1lKSkpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX3JlcXVlc3RfcmVnaW9uczsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC01MDIsNiArNTA0LDkgQEAKIAlmcmVlX25ldGRldihuZXRkZXYpOwogZXJyX2FsbG9jX2V0aGVyZGV2OgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfcmVxdWVzdF9yZWdpb25zOgorZXJyX2RtYV9tYXNrOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCmluZGV4IDZmN2RjZTguLmI2N2Y1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCkBAIC0xNDksNiArMTQ5LDggQEAKIAkJaW50IHN0YXR1czsKIAogCQlkZXYgPSBuZHNbaV07CisJCWlmIChkZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCiAJCXN0YXR1cyA9IHBtMzM4Nl9pc19saW5rX3VwKGkpOwogCQlpZiAoc3RhdHVzICYmICFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKQEAgLTE5MSw2ICsxOTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlbnAyNjExX2luaXRfbW9kdWxlKHZvaWQpCiB7IAorCWludCBwb3J0czsKIAlpbnQgaTsKIAogCWlmICghbWFjaGluZV9pc19lbnAyNjExKCkpCkBAIC0xOTksNyArMjAyLDggQEAKIAljYWxlYl9yZXNldCgpOwogCXBtMzM4Nl9yZXNldCgpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCXBvcnRzID0gcG0zMzg2X3BvcnRfY291bnQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgewogCQluZHNbaV0gPSBpeHBkZXZfYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2KSk7CiAJCWlmIChuZHNbaV0gPT0gTlVMTCkgewogCQkJd2hpbGUgKC0taSA+PSAwKQpAQCAtMjE1LDkgKzIxOSwxMCBAQAogCiAJaXhwMjQwMF9tc2ZfaW5pdCgmZW5wMjYxMV9tc2ZfcGFyYW1ldGVycyk7CiAKLQlpZiAoaXhwZGV2X2luaXQoMywgbmRzLCBlbnAyNjExX3NldF9wb3J0X2FkbWluX3N0YXR1cykpIHsKLQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7CisJaWYgKGl4cGRldl9pbml0KHBvcnRzLCBuZHMsIGVucDI2MTFfc2V0X3BvcnRfYWRtaW5fc3RhdHVzKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykKKwkJCWlmIChuZHNbaV0pCisJCQkJZnJlZV9uZXRkZXYobmRzW2ldKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuYwppbmRleCA1YzdhYjc1Li41MjI0NjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmMKQEAgLTg2LDQwICs4Niw1MyBAQAogCXBtMzM4Nl9yZWdfd3JpdGUocG9ydCA+PiAxLCByZWcsIHZhbHVlKTsKIH0KIAoraW50IHBtMzM4Nl9zZWNvbmRhcnlfcHJlc2VudCh2b2lkKQoreworCXJldHVybiBwbTMzODZfcmVnX3JlYWQoMSwgMCkgPT0gMHgzMzg2OworfQogCiB2b2lkIHBtMzM4Nl9yZXNldCh2b2lkKQogewogCXU4IG1hY1szXVs2XTsKKwlpbnQgc2Vjb25kYXJ5OworCisJc2Vjb25kYXJ5ID0gcG0zMzg2X3NlY29uZGFyeV9wcmVzZW50KCk7CiAKIAkvKiBTYXZlIHByb2dyYW1tZWQgTUFDIGFkZHJlc3Nlcy4gICovCiAJcG0zMzg2X2dldF9tYWMoMCwgbWFjWzBdKTsKIAlwbTMzODZfZ2V0X21hYygxLCBtYWNbMV0pOwotCXBtMzM4Nl9nZXRfbWFjKDIsIG1hY1syXSk7CisJaWYgKHNlY29uZGFyeSkKKwkJcG0zMzg2X2dldF9tYWMoMiwgbWFjWzJdKTsKIAogCS8qIEFzc2VydCBhbmFsb2cgYW5kIGRpZ2l0YWwgcmVzZXQuICAqLwogCXBtMzM4Nl9yZWdfd3JpdGUoMCwgMHgwMDIsIDB4MDA2MCk7Ci0JcG0zMzg2X3JlZ193cml0ZSgxLCAweDAwMiwgMHgwMDYwKTsKKwlpZiAoc2Vjb25kYXJ5KQorCQlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjApOwogCW1kZWxheSgxKTsKIAogCS8qIERlYXNzZXJ0IGFuYWxvZyByZXNldC4gICovCiAJcG0zMzg2X3JlZ193cml0ZSgwLCAweDAwMiwgMHgwMDYyKTsKLQlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjIpOworCWlmIChzZWNvbmRhcnkpCisJCXBtMzM4Nl9yZWdfd3JpdGUoMSwgMHgwMDIsIDB4MDA2Mik7CiAJbWRlbGF5KDEwKTsKIAogCS8qIERlYXNzZXJ0IGRpZ2l0YWwgcmVzZXQuICAqLwogCXBtMzM4Nl9yZWdfd3JpdGUoMCwgMHgwMDIsIDB4MDA2Myk7Ci0JcG0zMzg2X3JlZ193cml0ZSgxLCAweDAwMiwgMHgwMDYzKTsKKwlpZiAoc2Vjb25kYXJ5KQorCQlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjMpOwogCW1kZWxheSgxMCk7CiAKIAkvKiBSZXN0b3JlIHByb2dyYW1tZWQgTUFDIGFkZHJlc3Nlcy4gICovCiAJcG0zMzg2X3NldF9tYWMoMCwgbWFjWzBdKTsKIAlwbTMzODZfc2V0X21hYygxLCBtYWNbMV0pOwotCXBtMzM4Nl9zZXRfbWFjKDIsIG1hY1syXSk7CisJaWYgKHNlY29uZGFyeSkKKwkJcG0zMzg2X3NldF9tYWMoMiwgbWFjWzJdKTsKIAogCS8qIERpc2FibGUgY2FycmllciBvbiBhbGwgcG9ydHMuICAqLwogCXBtMzM4Nl9zZXRfY2FycmllcigwLCAwKTsKIAlwbTMzODZfc2V0X2NhcnJpZXIoMSwgMCk7Ci0JcG0zMzg2X3NldF9jYXJyaWVyKDIsIDApOworCWlmIChzZWNvbmRhcnkpCisJCXBtMzM4Nl9zZXRfY2FycmllcigyLCAwKTsKIH0KIAogc3RhdGljIHUxNiBzd2FwaCh1MTYgeCkKQEAgLTEyNyw2ICsxNDAsMTEgQEAKIAlyZXR1cm4gKCh4IDw8IDgpIHwgKHggPj4gOCkpICYgMHhmZmZmOwogfQogCitpbnQgcG0zMzg2X3BvcnRfY291bnQodm9pZCkKK3sKKwlyZXR1cm4gMiArIHBtMzM4Nl9zZWNvbmRhcnlfcHJlc2VudCgpOworfQorCiB2b2lkIHBtMzM4Nl9pbml0X3BvcnQoaW50IHBvcnQpCiB7CiAJaW50IHBtID0gcG9ydCA+PiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuaCBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmgKaW5kZXggZmU5MmJiMC4uY2M0MTgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuaAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIF9fUE0zMzg2X0gKIAogdm9pZCBwbTMzODZfcmVzZXQodm9pZCk7CitpbnQgcG0zMzg2X3BvcnRfY291bnQodm9pZCk7CiB2b2lkIHBtMzM4Nl9pbml0X3BvcnQoaW50IHBvcnQpOwogdm9pZCBwbTMzODZfZ2V0X21hYyhpbnQgcG9ydCwgdTggKm1hYyk7CiB2b2lkIHBtMzM4Nl9zZXRfbWFjKGludCBwb3J0LCB1OCAqbWFjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDlmMjY2MTMuLjQxMWY0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMjgxLDEwICsyODEsMTYgQEAKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwogCWV0aF9wb3J0X3Jlc2V0KG1wLT5wb3J0X251bSk7CiAJZXRoX3BvcnRfc3RhcnQoZGV2KTsKLQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50ID49IE1BWF9ERVNDU19QRVJfU0tCKQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKIC8qKgpAQCAtNTUyLDkgKzU1OCw5IEBACiAjZWxzZQogCWlmIChldGhfaW50X2NhdXNlICYgRVRIX0lOVF9DQVVTRV9SWCkKIAkJbXY2NDN4eF9ldGhfcmVjZWl2ZV9xdWV1ZShkZXYsIElOVF9NQVgpOworI2VuZGlmCiAJaWYgKGV0aF9pbnRfY2F1c2VfZXh0ICYgRVRIX0lOVF9DQVVTRV9UWCkKIAkJbXY2NDN4eF9ldGhfZnJlZV9jb21wbGV0ZWRfdHhfZGVzY3MoZGV2KTsKLSNlbmRpZgogCiAJLyoKIAkgKiBJZiBubyByZWFsIGludGVycnVwdCBvY2N1cmVkLCBleGl0LgpAQCAtMTE4Niw3ICsxMTkyLDEyIEBACiAKIAlCVUdfT04obmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKTsKIAlCVUdfT04oc2tiID09IE5VTEwpOwotCUJVR19PTihtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPCBNQVhfREVTQ1NfUEVSX1NLQik7CisKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50IDwgTUFYX0RFU0NTX1BFUl9TS0IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdHJhbnNtaXQgd2l0aCBxdWV1ZSBmdWxsXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiAxOworCX0KIAogCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSkgewogCQlpZiAoKHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSkgewpAQCAtMTQwOCw2ICsxNDE5LDggQEAKIAltdjY0M3h4X2V0aF91cGRhdGVfcHNjcihkZXYsICZjbWQpOwogCW12NjQzeHhfc2V0X3NldHRpbmdzKGRldiwgJmNtZCk7CiAKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCA3ODI2YWZiLi45MDYyNzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKICNkZWZpbmUgTkFUU0VNSV9SWF9MSU1JVAkyMDQ2CS8qIG1heGltdW0gc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICovCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgIEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRwODM4MXggZHJpdmVyLCB2ZXJzaW9uICIKICAgICAgIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIlxuIgogICBLRVJOX0lORk8gIiAgb3JpZ2luYWxseSBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUuYyBiL2RyaXZlcnMvbmV0L25lLmMKaW5kZXggMDhiMjE4Yy4uYjMyNzY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUuYworKysgYi9kcml2ZXJzL25ldC9uZS5jCkBAIC0xMzksOCArMTM5LDkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkpCiAjICBkZWZpbmUgRENSX1ZBTCAweDRiCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX09BS1MzMlIpCi0jICBkZWZpbmUgRENSX1ZBTCAweDQ4CisjZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX09BS1MzMlIpICB8fCBcCisgICBkZWZpbmVkKENPTkZJR19UT1NISUJBX1JCVFg0OTI3KSB8fCBkZWZpbmVkKENPTkZJR19UT1NISUJBX1JCVFg0OTM4KQorIyAgZGVmaW5lIERDUl9WQUwgMHg0OAkJLyogOC1iaXQgbW9kZSAqLwogI2Vsc2UKICMgIGRlZmluZSBEQ1JfVkFMIDB4NDkKICNlbmRpZgpAQCAtMjI2LDcgKzIyNyw3IEBACiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIAogI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTM4Ci0JZGV2LT5iYXNlX2FkZHIgPSAweDA3ZjIwMjgwOworCWRldi0+YmFzZV9hZGRyID0gUkJUWDQ5MzhfUlRMXzgwMTlfQkFTRTsKIAlkZXYtPmlycSA9IFJCVFg0OTM4X1JUTF84MDE5X0lSUTsKICNlbmRpZgogCWVyciA9IGRvX25lX3Byb2JlKGRldik7CkBAIC0zOTYsMTAgKzM5NywyMiBAQAogCQkvKiBXZSBtdXN0IHNldCB0aGUgODM5MCBmb3Igd29yZCBtb2RlLiAqLwogCQlvdXRiX3AoRENSX1ZBTCwgaW9hZGRyICsgRU4wX0RDRkcpOwogCQlzdGFydF9wYWdlID0gTkVTTV9TVEFSVF9QRzsKLQkJc3RvcF9wYWdlID0gTkVTTV9TVE9QX1BHOworCisJCS8qCisJCSAqIFJlYWx0ZWsgUlRMODAxOUFTIGRhdGFzaGVldCBzYXlzIHRoYXQgdGhlIFBTVE9QIHJlZ2lzdGVyCisJCSAqIHNob3VsZG4ndCBleGNlZWQgMHg2MCBpbiA4LWJpdCBtb2RlLgorCQkgKiBUaGlzIGNoaXAgY2FuIGJlIGlkZW50aWZpZWQgYnkgcmVhZGluZyB0aGUgc2lnbmF0dXJlIGZyb20KKwkJICogdGhlICByZW1vdGUgYnl0ZSBjb3VudCByZWdpc3RlcnMgKG90aGVyd2lzZSB3cml0ZS1vbmx5KS4uLgorCQkgKi8KKwkJaWYgKChEQ1JfVkFMICYgMHgwMSkgPT0gMCAmJgkJLyogOC1iaXQgbW9kZSAqLworCQkgICAgaW5iKGlvYWRkciArIEVOMF9SQ05UTE8pID09IDB4NTAgJiYKKwkJICAgIGluYihpb2FkZHIgKyBFTjBfUkNOVEhJKSA9PSAweDcwKQorCQkJc3RvcF9wYWdlID0gMHg2MDsKKwkJZWxzZQorCQkJc3RvcF9wYWdlID0gTkVTTV9TVE9QX1BHOwogCX0gZWxzZSB7CiAJCXN0YXJ0X3BhZ2UgPSBORTFTTV9TVEFSVF9QRzsKLQkJc3RvcF9wYWdlID0gTkUxU01fU1RPUF9QRzsKKwkJc3RvcF9wYWdlICA9IE5FMVNNX1NUT1BfUEc7CiAJfQogCiAjaWYgIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfT0FLUzMyUikKQEAgLTUwOSwxNSArNTIyLDkgQEAKIAllaV9zdGF0dXMubmFtZSA9IG5hbWU7CiAJZWlfc3RhdHVzLnR4X3N0YXJ0X3BhZ2UgPSBzdGFydF9wYWdlOwogCWVpX3N0YXR1cy5zdG9wX3BhZ2UgPSBzdG9wX3BhZ2U7Ci0jaWYgZGVmaW5lZChDT05GSUdfVE9TSElCQV9SQlRYNDkyNykgfHwgZGVmaW5lZChDT05GSUdfVE9TSElCQV9SQlRYNDkzOCkKLQl3b3JkbGVuZ3RoID0gMTsKLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BMQVRfT0FLUzMyUgotCWVpX3N0YXR1cy53b3JkMTYgPSAwOwotI2Vsc2UKLQllaV9zdGF0dXMud29yZDE2ID0gKHdvcmRsZW5ndGggPT0gMik7Ci0jZW5kaWYKKwkvKiBVc2UgMTYtYml0IG1vZGUgb25seSBpZiB0aGlzIHdhc24ndCBvdmVycmlkZGVuIGJ5IERDUl9WQUwgKi8KKwllaV9zdGF0dXMud29yZDE2ID0gKHdvcmRsZW5ndGggPT0gMiAmJiAoRENSX1ZBTCAmIDB4MDEpKTsKIAogCWVpX3N0YXR1cy5yeF9zdGFydF9wYWdlID0gc3RhcnRfcGFnZSArIFRYX1BBR0VTOwogI2lmZGVmIFBBQ0tFVEJVRl9NRU1TSVpFCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBkMTE4MjFkLi5jZWQ5ZmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTY0NSw5ICs2NDUsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7Ci0KKwlCVUdfT04oIWRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTkVfSU9fRVhURU5UKTsKIAlmcmVlX25ldGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDc1YjM1YWQuLmJmNThkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTg3LDYgKzg3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7CisJLm5hbWUgPSAibmV0Y29uIiwKIAkuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9QUklOVEJVRkZFUiwKIAkud3JpdGUgPSB3cml0ZV9tc2cKIH07CkBAIC0xMDYsNyArMTA3LDcgQEAKIAogCWlmKCFjb25maWd1cmVkKSB7CiAJCXByaW50aygibmV0Y29uc29sZTogbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCX0KIAogCWlmKG5ldHBvbGxfc2V0dXAoJm5wKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCA4ZTliMWE1Li43MDZhZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC01NjgsOCArNTY4LDcgQEAKICNlbmRpZgogCiAJc2cgPSBkZXYtPnJ4X2luZm8uZGVzY3MgKyAobmV4dF9lbXB0eSAqIERFU0NfU0laRSk7Ci0JaWYgKHVubGlrZWx5KE5VTEwgIT0gZGV2LT5yeF9pbmZvLnNrYnNbbmV4dF9lbXB0eV0pKQotCQlCVUcoKTsKKwlCVUdfT04oTlVMTCAhPSBkZXYtPnJ4X2luZm8uc2tic1tuZXh0X2VtcHR5XSk7CiAJZGV2LT5yeF9pbmZvLnNrYnNbbmV4dF9lbXB0eV0gPSBza2I7CiAKIAlkZXYtPnJ4X2luZm8ubmV4dF9lbXB0eSA9IChuZXh0X2VtcHR5ICsgMSkgJSBOUl9SWF9ERVNDOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBjZTkwYmVjLi5mYWI5MzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAjZGVmaW5lIE1FRElBX1RQCTB4MDBDMAkvKiBFbmFibGUgbGluayBiZWF0IGFuZCBqYWJiZXIgZm9yIDEwYmFzZVQuICovCiAKIHN0cnVjdCBlbDNfcHJpdmF0ZSB7Ci0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdTE2IGFkdmVydGlzaW5nLCBwYXJ0bmVyOwkJLyogTldheSBtZWRpYSBhZHZlcnRpc2VtZW50ICovCkBAIC0yMjUsOCArMjI1LDggQEAKIAogLyogSW5kZXggb2YgZnVuY3Rpb25zLiAqLwogCi1zdGF0aWMgdm9pZCB0YzU3NF9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCB0YzU3NF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCB0YzU3NF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgdGM1NzRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB2b2lkIG1kaW9fc3luYyhraW9fYWRkcl90IGlvYWRkciwgaW50IGJpdHMpOwogc3RhdGljIGludCBtZGlvX3JlYWQoa2lvX2FkZHJfdCBpb2FkZHIsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CkBAIC0yNTYsMTAgKzI1Niw5IEBACiAJd2l0aCBDYXJkIFNlcnZpY2VzLgogKi8KIAotc3RhdGljIGludCB0YzU3NF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB0YzU3NF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwotCWRldl9saW5rX3QgKmxpbms7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCURFQlVHKDAsICIzYzU3NF9hdHRhY2goKVxuIik7CkBAIC0yNjksOCArMjY4LDggQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxpbmsgPSAmbHAtPmxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKKwlscC0+cF9kZXYgPSBsaW5rOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxwLT53aW5kb3dfbG9jayk7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gMzI7CkBAIC0yODAsNyArMjc5LDYgQEAKIAlsaW5rLT5pcnEuSGFuZGxlciA9ICZlbDNfaW50ZXJydXB0OwogCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTI5OCwxMyArMjk2LDcgQEAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICNlbmRpZgogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXRjNTc0X2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiB0YzU3NF9jb25maWcobGluayk7CiB9IC8qIHRjNTc0X2F0dGFjaCAqLwogCiAvKgpAQCAtMzE2LDE4ICszMDgsMTYgQEAKIAogKi8KIAotc3RhdGljIHZvaWQgdGM1NzRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHRjNTc0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICIzYzU3NF9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPmRldikKKwlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQl0YzU3NF9yZWxlYXNlKGxpbmspOworCXRjNTc0X3JlbGVhc2UobGluayk7CiAKIAlmcmVlX25ldGRldihkZXYpOwogfSAvKiB0YzU3NF9kZXRhY2ggKi8KQEAgLTM0Myw5ICszMzMsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcmFtX3NwbGl0W10gPSB7IjU6MyIsICIzOjEiLCAiMToxIiwgIjM6NSJ9OwogCi1zdGF0aWMgdm9pZCB0YzU3NF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgdGM1NzRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdHVwbGVfdCB0dXBsZTsKQEAgLTM2MywzMCArMzUyLDI3IEBACiAKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwogCWZvciAoaSA9IGogPSAwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7Ci0JCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCQlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzk3LDggKzM4Myw4IEBACiAJICAgdGhlIGhhcmR3YXJlIGFkZHJlc3MuICBUaGUgZnV0dXJlIHByb2R1Y3RzIG1heSBpbmNsdWRlIGEgbW9kZW0gY2hpcAogCSAgIGFuZCBwdXQgdGhlIGFkZHJlc3MgaW4gdGhlIENJUy4gKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDg4OwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7Ci0JCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSk7CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7CisJCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQkJcGh5c19hZGRyW2ldID0gaHRvbnMoYnVmW2ldKTsKIAl9IGVsc2UgewpAQCAtNDEyLDkgKzM5OCw5IEBACiAJCX0KIAl9CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUyAmJgotCQlwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MgJiYKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MgJiYKKwkJcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUyAmJgorCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKIAkJY2FyZG5hbWUgPSBwYXJzZS52ZXJzaW9uXzEuc3RyICsgcGFyc2UudmVyc2lvbl8xLm9mc1sxXTsKIAl9IGVsc2UKIAkJY2FyZG5hbWUgPSAiM0NvbSAzYzU3NCI7CkBAIC00NzMsMTMgKzQ1OSwxMiBAQAogCQl9CiAJfQogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlsaW5rLT5kZXYgPSAmbHAtPm5vZGU7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZscC0+bm9kZTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiM2M1NzRfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0JCWxpbmstPmRldiA9IE5VTEw7CisJCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC00OTMsMTMgKzQ3OCwxMyBAQAogCQkgICA4IDw8IGNvbmZpZy51LnJhbV9zaXplLCByYW1fc3BsaXRbY29uZmlnLnUucmFtX3NwbGl0XSwKIAkJICAgY29uZmlnLnUuYXV0b3NlbGVjdCA/ICJhdXRvc2VsZWN0ICIgOiAiIik7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJdGM1NzRfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiAKIH0gLyogdGM1NzRfY29uZmlnICovCiAKQEAgLTUwOSw0NCArNDk0LDI4IEBACiAJc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiAqLwogCi1zdGF0aWMgdm9pZCB0YzU3NF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCB0YzU3NF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICIzYzU3NF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgdGM1NzRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHRjNTc0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YzU3NF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB0YzU3NF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJdGM1NzRfcmVzZXQoZGV2KTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCXRjNTc0X3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc1Nyw5ICs3MjYsOSBAQAogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLQlpZiAoIURFVl9PSyhsaW5rKSkKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCiAJbGluay0+b3BlbisrOwpAQCAtMTIwMywxMSArMTE3MiwxMSBAQAogewogCWtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JZGV2X2xpbmtfdCAqbGluayA9ICZscC0+bGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAogCURFQlVHKDIsICIlczogc2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwogCQotCWlmIChERVZfT0sobGluaykpIHsKKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJLyogVHVybiBvZmYgc3RhdGlzdGljcyBBU0FQLiAgV2UgdXBkYXRlIGxwLT5zdGF0cyBiZWxvdy4gKi8KQEAgLTEyNDYsNyArMTIxNSw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gIjNjNTc0X2NzIiwKIAl9LAotCS5wcm9iZQkJPSB0YzU3NF9hdHRhY2gsCisJLnByb2JlCQk9IHRjNTc0X3Byb2JlLAogCS5yZW1vdmUJCT0gdGM1NzRfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHRjNTc0X2lkcywKIAkuc3VzcGVuZAk9IHRjNTc0X3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDNkYmE1MDguLjg3NWEwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKICNkZWZpbmUgVFhfVElNRU9VVAkoKDQwMCpIWikvMTAwMCkKIAogc3RydWN0IGVsM19wcml2YXRlIHsKLSAgICBkZXZfbGlua190CQlsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IAkJbm9kZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICAvKiBGb3IgdHJhbnNjZWl2ZXIgbW9uaXRvcmluZyAqLwpAQCAtMTQyLDggKzE0Miw4IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCB0YzU4OV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCB0YzU4OV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCB0YzU4OV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgdGM1ODlfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIHN0YXRpYyB1MTYgcmVhZF9lZXByb20oa2lvX2FkZHJfdCBpb2FkZHIsIGludCBpbmRleCk7CiBzdGF0aWMgdm9pZCB0YzU4OV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE3MCwxMCArMTcwLDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgdGM1ODlfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgdGM1ODlfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IGVsM19wcml2YXRlICpscDsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKICAgICBERUJVRygwLCAiM2M1ODlfYXR0YWNoKClcbiIpOwpAQCAtMTgzLDggKzE4Miw4IEBACiAgICAgaWYgKCFkZXYpCiAJIHJldHVybiAtRU5PTUVNOwogICAgIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsaW5rID0gJmxwLT5saW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CisgICAgbHAtPnBfZGV2ID0gbGluazsKIAogICAgIHNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTY7CkBAIC0xOTQsNyArMTkzLDYgQEAKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9ICZlbDNfaW50ZXJydXB0OwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTIxMywxMyArMjExLDcgQEAKICNlbmRpZgogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIHRjNTg5X2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiB0YzU4OV9jb25maWcobGluayk7CiB9IC8qIHRjNTg5X2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIzMSwxOCArMjIzLDE2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCB0YzU4OV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgdGM1ODlfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgREVCVUcoMCwgIjNjNTg5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBpZiAobGluay0+ZGV2KQorICAgIGlmIChsaW5rLT5kZXZfbm9kZSkKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQl0YzU4OV9yZWxlYXNlKGxpbmspOworICAgIHRjNTg5X3JlbGVhc2UobGluayk7CiAKICAgICBmcmVlX25ldGRldihkZXYpOwogfSAvKiB0YzU4OV9kZXRhY2ggKi8KQEAgLTI1OCw5ICsyNDgsOCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCB0YzU4OV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgdGM1ODlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdHVwbGVfdCB0dXBsZTsKQEAgLTI3NSw0MyArMjY0LDQwIEBACiAgICAgcGh5c19hZGRyID0gKHUxNiAqKWRldi0+ZGV2X2FkZHI7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogICAgIAogICAgIC8qIElzIHRoaXMgYSAzYzU2Mj8gKi8KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIGlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYKLQkocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSkgeworICAgIGlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmCisJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKSB7CiAJaWYgKGxlMTZfdG9fY3B1KGJ1ZlswXSkgIT0gTUFORklEXzNDT00pCiAJICAgIHByaW50ayhLRVJOX0lORk8gIjNjNTg5X2NzOiBobW1tLCBpcyB0aGlzIHJlYWxseSBhICIKIAkJICAgIjNDb20gY2FyZD8/XG4iKTsKIAltdWx0aSA9IChsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF8zQ09NXzNDNTYyKTsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCiAgICAgLyogRm9yIHRoZSAzYzU2MiwgdGhlIGJhc2UgYWRkcmVzcyBtdXN0IGJlIHh4MDAteHg3ZiAqLwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMTY7CiAgICAgZm9yIChpID0gaiA9IDA7IGogPCAweDQwMDsgaiArPSAweDEwKSB7CiAJaWYgKG11bHRpICYmIChqICYgMHg4MCkpIGNvbnRpbnVlOwogCWxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwogICAgIH0KICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCQogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzIxLDggKzMwNyw4IEBACiAgICAgLyogVGhlIDNjNTg5IGhhcyBhbiBleHRyYSBFRVBST00gZm9yIGNvbmZpZ3VyYXRpb24gaW5mbywgaW5jbHVkaW5nCiAgICAgICAgdGhlIGhhcmR3YXJlIGFkZHJlc3MuICBUaGUgM2M1NjIgcHV0cyB0aGUgYWRkcmVzcyBpbiB0aGUgQ0lTLiAqLwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IDB4ODg7Ci0gICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKLQlwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpOworICAgIGlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgeworCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJICAgIHBoeXNfYWRkcltpXSA9IGh0b25zKGJ1ZltpXSk7CiAgICAgfSBlbHNlIHsKQEAgLTM0NiwxMyArMzMyLDEyIEBACiAgICAgZWxzZQogCXByaW50ayhLRVJOX0VSUiAiM2M1ODlfY3M6IGludmFsaWQgaWZfcG9ydCByZXF1ZXN0ZWRcbiIpOwogICAgIAotICAgIGxpbmstPmRldiA9ICZscC0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmbHAtPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX0VSUiAiM2M1ODlfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0JbGluay0+ZGV2ID0gTlVMTDsKKwlsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC0zNjYsMTQgKzM1MSwxMyBAQAogICAgIHByaW50ayhLRVJOX0lORk8gIiAgJWRLIEZJRk8gc3BsaXQgJXMgUng6VHgsICVzIHhjdnJcbiIsCiAJICAgKGZpZm8gJiA3KSA/IDMyIDogOCwgcmFtX3NwbGl0WyhmaWZvID4+IDE2KSAmIDNdLAogCSAgIGlmX25hbWVzW2Rldi0+aWZfcG9ydF0pOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICB0YzU4OV9yZWxlYXNlKGxpbmspOwotICAgIHJldHVybjsKLSAgICAKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogdGM1ODlfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzg0LDQ0ICszNjgsMjggQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCB0YzU4OV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCB0YzU4OV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIERFQlVHKDAsICIzYzU4OV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLSAgICAKLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIAotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCB0YzU4OV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgdGM1ODlfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRjNTg5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHRjNTg5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQl0YzU4OV9yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisgCWlmIChsaW5rLT5vcGVuKSB7CisJCXRjNTg5X3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU4Nyw5ICs1NTUsOSBAQAogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAgICAgCi0gICAgaWYgKCFERVZfT0sobGluaykpCisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBsaW5rLT5vcGVuKys7CkBAIC04NDgsOSArODE2LDkgQEAKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLSAgICBpZiAoREVWX09LKGxpbmspKSB7CisgICAgaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogICAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl1cGRhdGVfc3RhdHMoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtOTUwLDExICs5MTgsMTEgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAgICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgICB1MTYgb3B0cyA9IFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhCcm9hZGNhc3Q7CiAKLSAgICBpZiAoIShERVZfT0sobGluaykpKSByZXR1cm47CisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHJldHVybjsKICAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCW9wdHMgfD0gUnhNdWx0aWNhc3QgfCBSeFByb207CiAgICAgZWxzZSBpZiAoZGV2LT5tY19jb3VudCB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpCkBAIC05NjUsMTIgKzkzMywxMiBAQAogc3RhdGljIGludCBlbDNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgCiAgICAgREVCVUcoMSwgIiVzOiBzaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAKLSAgICBpZiAoREVWX09LKGxpbmspKSB7CisgICAgaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCS8qIFR1cm4gb2ZmIHN0YXRpc3RpY3MgQVNBUC4gIFdlIHVwZGF0ZSBscC0+c3RhdHMgYmVsb3cuICovCiAJb3V0dyhTdGF0c0Rpc2FibGUsIGlvYWRkciArIEVMM19DTUQpOwogCQpAQCAtMTAyMCw3ICs5ODgsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICIzYzU4OV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gdGM1ODlfYXR0YWNoLAorCS5wcm9iZQkJPSB0YzU4OV9wcm9iZSwKIAkucmVtb3ZlCQk9IHRjNTg5X2RldGFjaCwKICAgICAgICAgLmlkX3RhYmxlICAgICAgID0gdGM1ODlfaWRzLAogCS5zdXNwZW5kCT0gdGM1ODlfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggMWNjOTRiMi4uMmVhNjZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTg2LDggKzg2LDggQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF4bmV0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGF4bmV0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGF4bmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBheG5ldF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyBpbnQgYXhuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpAQCAtMTE3LDcgKzExNyw3IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3QgYXhuZXRfZGV2X3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QJCW5vZGU7CiAgICAgY2FkZHJfdAkJYmFzZTsKICAgICBzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKQEAgLTE0MiwxMCArMTQyLDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgYXhuZXRfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXhuZXRfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgYXhuZXRfZGV2X3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgREVCVUcoMCwgImF4bmV0X2F0dGFjaCgpXG4iKTsKQEAgLTE1Nyw3ICsxNTYsNyBAQAogCXJldHVybiAtRU5PTUVNOwogCiAgICAgaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBsaW5rID0gJmluZm8tPmxpbms7CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAgICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwpAQCAtMTY5LDEzICsxNjgsNyBAQAogICAgIGRldi0+ZG9faW9jdGwgPSAmYXhuZXRfaW9jdGw7CiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgYXhuZXRfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGF4bmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogYXhuZXRfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTg3LDE4ICsxODAsMTYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF4bmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBheG5ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAiYXhuZXRfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpCisgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCWF4bmV0X3JlbGVhc2UobGluayk7CisgICAgYXhuZXRfcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiB9IC8qIGF4bmV0X2RldGFjaCAqLwpAQCAtMjA5LDcgKzIwMCw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGdldF9wcm9tKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGdldF9wcm9tKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0yNjMsNyArMjU0LDcgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCB0cnlfaW9fcG9ydChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB0cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaiwgcmV0OwogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMzIpIHsKQEAgLTI4NCwyNSArMjc1LDIzIEBACiAJZm9yIChqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKIAkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwogCSAgICBsaW5rLT5pby5CYXNlUG9ydDIgPSAoaiBeIDB4MzAwKSArIDB4MTA7Ci0JICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkgICAgaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGF4bmV0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBheG5ldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgaW50IGksIGosIGxhc3RfcmV0LCBsYXN0X2ZuOwogICAgIHVfc2hvcnQgYnVmWzY0XTsKLSAgICBjb25maWdfaW5mb190IGNvbmY7CiAKICAgICBERUJVRygwLCAiYXhuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIApAQCAtMzExLDI5ICszMDAsMjIgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgLyogZG9uJ3QgdHJ1c3QgdGhlIENJUyBvbiB0aGlzOyBMaW5rc3lzIGdvdCBpdCB3cm9uZyAqLwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IDB4NjM7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLSAgICAvKiBMb29rIHVwIGN1cnJlbnQgVmNjICovCi0gICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOwotCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIHsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogCWNpc3RwbF9pb190ICppbyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeS5pbyk7CiAJCi0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCB8fAorCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCB8fAogCQljZmctPmluZGV4ID09IDAgfHwgY2ZnLT5pby5ud2luID09IDApCiAJICAgIGdvdG8gbmV4dF9lbnRyeTsKIAkKQEAgLTM1NSwyMSArMzM3LDIxIEBACiAJICAgIGlmIChsYXN0X3JldCA9PSBDU19TVUNDRVNTKSBicmVhazsKIAl9CiAgICAgbmV4dF9lbnRyeToKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSk7CisJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKTsKICAgICB9CiAgICAgaWYgKGxhc3RfcmV0ICE9IENTX1NVQ0NFU1MpIHsKLQljc19lcnJvcihoYW5kbGUsIFJlcXVlc3RJTywgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogICAgIAogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgPT0gOCkgewogCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAgICAgfQogICAgIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCkBAIC00MDYsNyArMzg4LDcgQEAKICAgICAgICBCaXQgMiBvZiBDQ1NSIGlzIGFjdGl2ZSBsb3cuICovIAogICAgIGlmIChpID09IDMyKSB7CiAJY29uZl9yZWdfdCByZWcgPSB7IDAsIENTX1dSSVRFLCBDSVNSRUdfQ0NTUiwgMHgwNCB9OwotIAlwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAJcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJICAgIGogPSBtZGlvX3JlYWQoZGV2LT5iYXNlX2FkZHIgKyBBWE5FVF9NSUlfRUVQLCBpLCAxKTsKIAkgICAgaWYgKChqICE9IDApICYmIChqICE9IDB4ZmZmZikpIGJyZWFrOwpAQCAtNDE0LDEzICszOTYsMTIgQEAKICAgICB9CiAKICAgICBpbmZvLT5waHlfaWQgPSAoaSA8IDMyKSA/IGkgOiAtMTsKLSAgICBsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAogICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJheG5ldF9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTQzNiwxNCArNDE3LDEzIEBACiAgICAgfSBlbHNlIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgIiAgTm8gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCFcbiIpOwogICAgIH0KLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgYXhuZXRfcmVsZWFzZShsaW5rKTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogYXhuZXRfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDU0LDQ1ICs0MzQsMjkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGF4bmV0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGF4bmV0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgREVCVUcoMCwgImF4bmV0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCBheG5ldF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXhuZXRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF4bmV0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGF4bmV0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQlheG5ldF9yZXNldF84MzkwKGRldik7Ci0JCQlBWDg4MTkwX2luaXQoZGV2LCAxKTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCWF4bmV0X3Jlc2V0XzgzOTAoZGV2KTsKKwkJQVg4ODE5MF9pbml0KGRldiwgMSk7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU2MiwxMSArNTI2LDExIEBACiBzdGF0aWMgaW50IGF4bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmluZm8tPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpbmZvLT5wX2RldjsKICAgICAKICAgICBERUJVRygyLCAiYXhuZXRfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogCiAgICAgbGluay0+b3BlbisrOwpAQCAtNTg4LDcgKzU1Miw3IEBACiBzdGF0aWMgaW50IGF4bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgYXhuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZpbmZvLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gaW5mby0+cF9kZXY7CiAKICAgICBERUJVRygyLCAiYXhuZXRfY2xvc2UoJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKQEAgLTgzMyw3ICs3OTcsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJheG5ldF9jcyIsCiAJfSwKLQkucHJvYmUJCT0gYXhuZXRfYXR0YWNoLAorCS5wcm9iZQkJPSBheG5ldF9wcm9iZSwKIAkucmVtb3ZlCQk9IGF4bmV0X2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBheG5ldF9pZHMsCiAJLnN1c3BlbmQJPSBheG5ldF9zdXNwZW5kLApAQCAtMTU5Niw3ICsxNTYwLDcgQEAKIAogc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWF4bmV0X2Rldl90ICppbmZvID0gKGF4bmV0X2Rldl90ICopZGV2OworCWF4bmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCXVuc2lnbmVkIGNoYXIgd2FzX3R4aW5nLCBtdXN0X3Jlc2VuZCA9IDA7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTcyNywxNyArMTY5MSw2IEBACiAJCW1lbXNldChlaV9sb2NhbC0+bWNmaWx0ZXIsIDB4RkYsIDgpOwogCX0KIAotCS8qIAotCSAqIERQODM5MCBtYW51YWxzIGRvbid0IHNwZWNpZnkgYW55IG1hZ2ljIHNlcXVlbmNlIGZvciBhbHRlcmluZwotCSAqIHRoZSBtdWx0aWNhc3QgcmVncyBvbiBhbiBhbHJlYWR5IHJ1bm5pbmcgY2FyZC4gVG8gYmUgc2FmZSwgd2UKLQkgKiBlbnN1cmUgbXVsdGljYXN0IG1vZGUgaXMgb2ZmIHByaW9yIHRvIGxvYWRpbmcgdXAgdGhlIG5ldyBoYXNoCi0JICogdGFibGUuIElmIHRoaXMgcHJvdmVzIHRvIGJlIG5vdCBlbm91Z2gsIHdlIGNhbiBhbHdheXMgcmVzb3J0Ci0JICogdG8gc3RvcHBpbmcgdGhlIE5JQywgbG9hZGluZyB0aGUgdGFibGUgYW5kIHRoZW4gcmVzdGFydGluZy4KLQkgKi8KLQkgCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwotCiAJb3V0Yl9wKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOwogCWZvcihpID0gMDsgaSA8IDg7IGkrKykgCiAJewpAQCAtMTc1MSw2ICsxNzA0LDggQEAKICAgCQlvdXRiX3AoRTgzOTBfUlhDT05GSUcgfCAweDQ4LCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwogICAJZWxzZQogICAJCW91dGJfcChFODM5MF9SWENPTkZJRyB8IDB4NDAsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CisKKwlvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RBUlQsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKaW5kZXggMjgyN2E0OC4uNDQxZGU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKQEAgLTExOCw4ICsxMTgsOCBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgY29tMjAwMjBfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgY29tMjAwMjBfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgY29tMjAwMjBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGNvbTIwMDIwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgdm9pZCBjb20yMDAyMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApAQCAtMTM4LDkgKzEzOCw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGNvbTIwMDIwX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGNvbTIwMDIwX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIGNvbTIwMDIwX2Rldl90ICppbmZvOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgc3RydWN0IGFyY25ldF9sb2NhbCAqbHA7CkBAIC0xNDgsMTAgKzE0Nyw2IEBACiAgICAgREVCVUcoMCwgImNvbTIwMDIwX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIENyZWF0ZSBuZXcgbmV0d29yayBkZXZpY2UgKi8KLSAgICBsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWxpbmspCi0JcmV0dXJuIC1FTk9NRU07Ci0KICAgICBpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbTIwMDIwX2Rldl90KSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFpbmZvKQogCWdvdG8gZmFpbF9hbGxvY19pbmZvOwpAQCAtMTYxLDcgKzE1Niw2IEBACiAJZ290byBmYWlsX2FsbG9jX2RldjsKIAogICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGNvbTIwMDIwX2Rldl90KSk7Ci0gICAgbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwogICAgIGxwID0gZGV2LT5wcml2OwogICAgIGxwLT50aW1lb3V0ID0gdGltZW91dDsKICAgICBscC0+YmFja3BsYW5lID0gYmFja3BsYW5lOwpAQCAtMTcyLDI4ICsxNjYsMjMgQEAKICAgICAvKiBmaWxsIGluIG91ciBtb2R1bGUgcGFyYW1ldGVycyBhcyBkZWZhdWx0cyAqLwogICAgIGRldi0+ZGV2X2FkZHJbMF0gPSBub2RlOwogCi0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKLSAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLSAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKKyAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBwX2Rldi0+aW8uTnVtUG9ydHMxID0gMTY7CisgICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gMTY7CisgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworICAgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKyAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisgICAgcF9kZXYtPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0gICAgbGluay0+aXJxLkluc3RhbmNlID0gaW5mby0+ZGV2ID0gZGV2OwotICAgIGxpbmstPnByaXYgPSBpbmZvOworICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBpbmZvLT5kZXYgPSBkZXY7CisgICAgcF9kZXYtPnByaXYgPSBpbmZvOwogCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQ7Ci0gICAgY29tMjAwMjBfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbTIwMDIwX2NvbmZpZyhwX2Rldik7CiAKIGZhaWxfYWxsb2NfZGV2OgogICAgIGtmcmVlKGluZm8pOwogZmFpbF9hbGxvY19pbmZvOgotICAgIGtmcmVlKGxpbmspOwogICAgIHJldHVybiAtRU5PTUVNOwogfSAvKiBjb20yMDAyMF9hdHRhY2ggKi8KIApAQCAtMjA2LDkgKzE5NSw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBjb20yMDAyMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgY29tMjAwMjBfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBjb20yMDAyMF9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKIApAQCAtMjE2LDcgKzIwNCw3IEBACiAKICAgICBERUJVRygwLCAiY29tMjAwMjBfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpIHsKKyAgICBpZiAobGluay0+ZGV2X25vZGUpIHsKIAlERUJVRygxLCJ1bnJlZ2lzdGVyLi4uXG4iKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0yMjksOCArMjE3LDcgQEAKIAkgICAgZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAgICAgfQogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLSAgICAgICAgY29tMjAwMjBfcmVsZWFzZShsaW5rKTsKKyAgICBjb20yMDAyMF9yZWxlYXNlKGxpbmspOwogCiAgICAgLyogVW5saW5rIGRldmljZSBzdHJ1Y3R1cmUsIGZyZWUgYml0cyAqLwogICAgIERFQlVHKDEsInVubGlua2luZy4uLlxuIik7CkBAIC0yNDUsOCArMjMyLDYgQEAKIAlERUJVRygxLCJrZnJlZTIuLi5cbiIpOwogCWtmcmVlKGluZm8pOwogICAgIH0KLSAgICBERUJVRygxLCJrZnJlZTMuLi5cbiIpOwotICAgIGtmcmVlKGxpbmspOwogCiB9IC8qIGNvbTIwMDIwX2RldGFjaCAqLwogCkBAIC0yNjEsMTAgKzI0Niw5IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGNvbTIwMDIwX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBjb20yMDAyMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IGFyY25ldF9sb2NhbCAqbHA7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgY29tMjAwMjBfZGV2X3QgKmluZm87CkBAIC0yNzMsNyArMjU3LDYgQEAKICAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBpbnQgaW9hZGRyOwogCi0gICAgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIGluZm8gPSBsaW5rLT5wcml2OwogICAgIGRldiA9IGluZm8tPmRldjsKIApAQCAtMjg2LDE0ICsyNjksMTEgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KICAgICBERUJVRygxLCJhcmNuZXQ6IGJhc2Vwb3J0MSBpcyAlWGhcbiIsIGxpbmstPmlvLkJhc2VQb3J0MSk7CiAgICAgaSA9ICFDU19TVUNDRVNTOwogICAgIGlmICghbGluay0+aW8uQmFzZVBvcnQxKQpAQCAtMzAxLDEzICsyODEsMTMgQEAKIAlmb3IgKGlvYWRkciA9IDB4MTAwOyBpb2FkZHIgPCAweDQwMDsgaW9hZGRyICs9IDB4MTApCiAJewogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKQogCQlicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgIAogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpCiAgICAgewpAQCAtMzIxLDcgKzMwMSw3IEBACiAgICAgREVCVUcoMSwiYXJjbmV0OiByZXF1ZXN0IElSUSAlZCAoJVhoLyVYaClcbiIsCiAJICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLAogCSAgIGxpbmstPmlycS5JUlFJbmZvMSwgbGluay0+aXJxLklSUUluZm8yKTsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKQogICAgIHsKIAlERUJVRygxLCJhcmNuZXQ6IHJlcXVlc3RJUlEgZmFpbGVkIHRvdGFsbHkhXG4iKTsKQEAgLTMzMCw3ICszMTAsNyBAQAogCiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogICAgIGlmIChjb20yMDAyMF9jaGVjayhkZXYpKQogICAgIHsKQEAgLTM0MiwxNSArMzIyLDE0IEBACiAgICAgbHAtPmNhcmRfbmFtZSA9ICJQQ01DSUEgQ09NMjAwMjAiOwogICAgIGxwLT5jYXJkX2ZsYWdzID0gQVJDX0NBTl8xME1CSVQ7IC8qIHByZXRlbmQgYWxsIG9mIHRoZW0gY2FuIDEwTWJpdCAqLwogCi0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpID0gY29tMjAwMjBfZm91bmQoZGV2LCAwKTsJLyogY2FsbHMgcmVnaXN0ZXJfbmV0ZGV2ICovCiAgICAgCiAgICAgaWYgKGkgIT0gMCkgewogCURFQlVHKDEsS0VSTl9OT1RJQ0UgImNvbTIwMDIwX2NzOiBjb20yMDAyMF9mb3VuZCgpIGZhaWxlZFxuIik7Ci0JbGluay0+ZGV2ID0gTlVMTDsKKwlsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC0zNTgsMTMgKzMzNywxNCBAQAogCiAgICAgREVCVUcoMSxLRVJOX0lORk8gIiVzOiBwb3J0ICUjM2x4LCBpcnEgJWRcbiIsCiAgICAgICAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgREVCVUcoMSwiY29tMjAwMjBfY29uZmlnIGZhaWxlZC4uLlxuIik7CiAgICAgY29tMjAwMjBfcmVsZWFzZShsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogY29tMjAwMjBfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzc1LDUyICszNTUsMzMgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGNvbTIwMDIwX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGNvbTIwMDIwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0KLSAgICBERUJVRygxLCJyZWxlYXNlLi4uXG4iKTsKLQotICAgIERFQlVHKDAsICJjb20yMDAyMF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLSAgICBsaW5rLT5zdGF0ZSAmPSB+KERFVl9DT05GSUcgfCBERVZfUkVMRUFTRV9QRU5ESU5HKTsKKwlERUJVRygwLCAiY29tMjAwMjBfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IGNvbTIwMDIwX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBjb20yMDAyMF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWNvbTIwMDIwX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0gICAgICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJfQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgICAgIH0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29tMjAwMjBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgY29tMjAwMjBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCWNvbTIwMDIwX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JCQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IGRldi0+cHJpdjsKLQkJCUFSQ1JFU0VUOwotCQl9Ci0gICAgICAgIH0KKwlpZiAobGluay0+b3BlbikgeworCQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCQlBUkNSRVNFVDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQzNiw3ICszOTcsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJjb20yMDAyMF9jcyIsCiAJfSwKLQkucHJvYmUJCT0gY29tMjAwMjBfYXR0YWNoLAorCS5wcm9iZQkJPSBjb20yMDAyMF9wcm9iZSwKIAkucmVtb3ZlCQk9IGNvbTIwMDIwX2RldGFjaCwKIAkuaWRfdGFibGUJPSBjb20yMDAyMF9pZHMsCiAJLnN1c3BlbmQJPSBjb20yMDAyMF9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggYjdhYzE0YmEuLjA5YjExNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtODQsMTAgKzg0LDEwIEBACiAvKgogICAgIFBDTUNJQSBldmVudCBoYW5kbGVycwogICovCi1zdGF0aWMgdm9pZCBmbXZqMTh4X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyBpbnQgZm12ajE4eF9nZXRfaHdpbmZvKGRldl9saW5rX3QgKmxpbmssIHVfY2hhciAqbm9kZV9pZCk7Ci1zdGF0aWMgaW50IGZtdmoxOHhfc2V0dXBfbWZjKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgZm12ajE4eF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBmbXZqMTh4X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgaW50IGZtdmoxOHhfZ2V0X2h3aW5mbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgdV9jaGFyICpub2RlX2lkKTsKK3N0YXRpYyBpbnQgZm12ajE4eF9zZXR1cF9tZmMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZm12ajE4eF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGZtdmoxOHhfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKIC8qCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICBkcml2ZXIgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUKICovCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewotICAgIGRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCBub2RlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIGxvbmcgb3Blbl90aW1lOwpAQCAtMjI4LDEwICsyMjgsOSBAQAogI2RlZmluZSBCQU5LXzFVICAgICAgICAgICAgICAweDI0IC8qIGJhbmsgMSAoQ09ORklHXzEpICovCiAjZGVmaW5lIEJBTktfMlUgICAgICAgICAgICAgIDB4MjggLyogYmFuayAyIChDT05GSUdfMSkgKi8KIAotc3RhdGljIGludCBmbXZqMTh4X2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGZtdmoxOHhfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgbG9jYWxfaW5mb190ICpscDsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKICAgICBERUJVRygwLCAiZm12ajE4eF9hdHRhY2goKVxuIik7CkBAIC0yNDEsOCArMjQwLDggQEAKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKICAgICBscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbGluayA9ICZscC0+bGluazsKICAgICBsaW5rLT5wcml2ID0gZGV2OworICAgIGxwLT5wX2RldiA9IGxpbms7CiAKICAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KICAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAzMjsKQEAgLTI1Nyw3ICsyNTYsNiBAQAogCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAgICAgLyogVGhlIEZNVkoxOHggc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KQEAgLTI3NCwyOSArMjcyLDIxIEBACiAjZW5kaWYKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBmbXZqMTh4X2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmbXZqMTh4X2NvbmZpZyhsaW5rKTsKIH0gLyogZm12ajE4eF9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGZtdmoxOHhfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGZtdmoxOHhfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgREVCVUcoMCwgImZtdmoxOHhfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpCisgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCWZtdmoxOHhfcmVsZWFzZShsaW5rKTsKKyAgICBmbXZqMTh4X3JlbGVhc2UobGluayk7CiAKICAgICBmcmVlX25ldGRldihkZXYpOwogfSAvKiBmbXZqMTh4X2RldGFjaCAqLwpAQCAtMzA2LDcgKzI5Niw3IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbnQgbWZjX3RyeV9pb19wb3J0KGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG1mY190cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaSwgcmV0OwogICAgIHN0YXRpYyBjb25zdCBraW9fYWRkcl90IHNlcmlhbF9iYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CkBAIC0zMTgsMTMgKzMwOCwxMyBAQAogCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwogCSAgICBwcmludGsoS0VSTl9OT1RJQ0UgImZtdmoxOHhfY3M6IG91dCBvZiByZXNvdXJjZSBmb3Igc2VyaWFsXG4iKTsKIAl9Ci0JcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OwogICAgIH0KICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHVuZ2VybWFubl90cnlfaW9fcG9ydChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB1bmdlcm1hbm5fdHJ5X2lvX3BvcnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgaW50IHJldDsKICAgICBraW9fYWRkcl90IGlvYWRkcjsKQEAgLTMzNCw3ICszMjQsNyBAQAogICAgICovCiAgICAgZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHgzZTA7IGlvYWRkciArPSAweDIwKSB7CiAJbGluay0+aW8uQmFzZVBvcnQxID0gaW9hZGRyOwotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogCWlmIChyZXQgPT0gQ1NfU1VDQ0VTUykgewogCSAgICAvKiBjYWxjdWxhdGUgQ29uZmlnSW5kZXggdmFsdWUgKi8KIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IApAQCAtMzQ1LDkgKzMzNSw4IEBACiAgICAgcmV0dXJuIHJldDsJLyogUmVxdWVzdElPIGZhaWxlZCAqLwogfQogCi1zdGF0aWMgdm9pZCBmbXZqMTh4X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBmbXZqMTh4X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHR1cGxlX3QgdHVwbGU7CkBAIC0zNjYsNDIgKzM1NSwzNCBAQAogICAgICAgIHJlZ2lzdGVycy4KICAgICAqLwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgdHVwbGUuVHVwbGVEYXRhID0gKHVfY2hhciAqKWJ1ZjsKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOwotICAgIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKIAogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOyAKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIGlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7CisgICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7CiAJLyogWWVzLCBJIGhhdmUgQ0lTVFBMX0ZVTkNFLiBMZXQncyBjaGVjayBDSVNUUExfTUFORklEICovCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0JaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpCi0JICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKQorCSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKIAllbHNlCiAJICAgIGJ1ZlswXSA9IDB4ZmZmZjsKIAlzd2l0Y2ggKGxlMTZfdG9fY3B1KGJ1ZlswXSkpIHsKIAljYXNlIE1BTkZJRF9UREs6CiAJICAgIGNhcmR0eXBlID0gVERLOwotCSAgICBpZiAobGUxNl90b19jcHUoYnVmWzFdKSA9PSBQUk9ESURfVERLX0NGMDEwKSB7Ci0JCWNzX3N0YXR1c190IHN0YXR1czsKLQkJcGNtY2lhX2dldF9zdGF0dXMoaGFuZGxlLCAmc3RhdHVzKTsKLQkJaWYgKHN0YXR1cy5DYXJkU3RhdGUgJiBDU19FVkVOVF8zVkNBUkQpCi0JCSAgICBsaW5rLT5jb25mLlZjYyA9IDMzOyAvKiBpbnNlcnRlZCBpbiAzLjNWIHNsb3QgKi8KLQkgICAgfSBlbHNlIGlmIChsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF9UREtfR04zNDEwCisJICAgIGlmIChsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF9UREtfR04zNDEwCiAJCQl8fCBsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF9UREtfTlA5NjEwCiAJCQl8fCBsZTE2X3RvX2NwdShidWZbMV0pID09IFBST0RJRF9UREtfTU4zMjAwKSB7CiAJCS8qIE11bHRpRnVuY3Rpb24gQ2FyZCAqLwpAQCAtNDI5LDggKzQxMCw4IEBACiAgICAgfSBlbHNlIHsKIAkvKiBvbGQgdHlwZSBjYXJkICovCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykKLQkgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpCisJICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCWVsc2UKIAkgICAgYnVmWzBdID0gMHhmZmZmOwogCXN3aXRjaCAobGUxNl90b19jcHUoYnVmWzBdKSkgewpAQCAtNDYxLDEwICs0NDIsMTAgQEAKIAlyZXQgPSB1bmdlcm1hbm5fdHJ5X2lvX3BvcnQobGluayk7CiAJaWYgKHJldCAhPSBDU19TVUNDRVNTKSBnb3RvIGNzX2ZhaWxlZDsKICAgICB9IGVsc2UgeyAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKICAgICB9Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAKQEAgLTQ5MywxNyArNDc0LDE3IEBACiAgICAgY2FzZSBDT05URUM6CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKIAlpZiAoY2FyZHR5cGUgPT0gTUJIMTAzMDQpIHsKIAkgICAgLyogTUJIMTAzMDQncyBDSVNfRlVOQ0UgaXMgY29ycnVwdGVkICovCiAJICAgIG5vZGVfaWQgPSAmKHR1cGxlLlR1cGxlRGF0YVs1XSk7CiAJICAgIGNhcmRfbmFtZSA9ICJGTVYtSjE4MiI7CiAJfSBlbHNlIHsKIAkgICAgd2hpbGUgKHR1cGxlLlR1cGxlRGF0YVswXSAhPSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQgKSB7Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKIAkgICAgfQogCSAgICBub2RlX2lkID0gJih0dXBsZS5UdXBsZURhdGFbMl0pOwogCSAgICBpZiggY2FyZHR5cGUgPT0gVERLICkgewpAQCAtNTQ1LDEzICs1MjYsMTIgQEAKICAgICB9CiAKICAgICBscC0+Y2FyZHR5cGUgPSBjYXJkdHlwZTsKLSAgICBsaW5rLT5kZXYgPSAmbHAtPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJmxwLT5ub2RlOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZtdmoxOHhfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0JbGluay0+ZGV2ID0gTlVMTDsKKwlsaW5rLT5kZXZfbm9kZSA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC01NjQsMTkgKzU0NCwxOCBAQAogICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJcHJpbnRrKCIlMDJYJXMiLCBkZXYtPmRldl9hZGRyW2ldLCAoKGk8NSkgPyAiOiIgOiAiXG4iKSk7CiAKLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAgICAgCiBjc19mYWlsZWQ6CiAgICAgLyogQWxsIENhcmQgU2VydmljZXMgZXJyb3JzIGVuZCB1cCBoZXJlICovCi0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIGZtdmoxOHhfcmVsZWFzZShsaW5rKTsKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGZtdmoxOHhfY29uZmlnICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBmbXZqMTh4X2dldF9od2luZm8oZGV2X2xpbmtfdCAqbGluaywgdV9jaGFyICpub2RlX2lkKQorc3RhdGljIGludCBmbXZqMTh4X2dldF9od2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIHVfY2hhciAqbm9kZV9pZCkKIHsKICAgICB3aW5fcmVxX3QgcmVxOwogICAgIG1lbXJlcV90IG1lbTsKQEAgLTU4Nyw5ICs1NjYsOSBAQAogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbik7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdFdpbmRvdywgaSk7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNjIzLDEzICs2MDIsMTMgQEAKICAgICBpb3VubWFwKGJhc2UpOwogICAgIGogPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKICAgICBpZiAoaiAhPSBDU19TVUNDRVNTKQotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVsZWFzZVdpbmRvdywgaik7CisJY3NfZXJyb3IobGluaywgUmVsZWFzZVdpbmRvdywgaik7CiAgICAgcmV0dXJuIChpICE9IDB4MjAwKSA/IDAgOiAtMTsKIAogfSAvKiBmbXZqMTh4X2dldF9od2luZm8gKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGZtdmoxOHhfc2V0dXBfbWZjKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGZtdmoxOHhfc2V0dXBfbWZjKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHdpbl9yZXFfdCByZXE7CiAgICAgbWVtcmVxX3QgbWVtOwpAQCAtNjQyLDkgKzYyMSw5IEBACiAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0V2luZG93LCBpKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKIAlyZXR1cm4gLTE7CiAgICAgfQogCkBAIC02NjYsNTQgKzY0NSwzNSBAQAogICAgIGlvdW5tYXAoYmFzZSk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwogICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCi0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZWxlYXNlV2luZG93LCBqKTsKKwljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gMDsKIAogfQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIGZtdmoxOHhfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgZm12ajE4eF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCi0gICAgREVCVUcoMCwgImZtdmoxOHhfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7Ci0KLSAgICAvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlERUJVRygwLCAiZm12ajE4eF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgZm12ajE4eF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgZm12ajE4eF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KLQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmbXZqMTh4X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGZtdmoxOHhfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCWZqbl9yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJZmpuX3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc1MSw3ICs3MTEsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJmbXZqMTh4X2NzIiwKIAl9LAotCS5wcm9iZQkJPSBmbXZqMTh4X2F0dGFjaCwKKwkucHJvYmUJCT0gZm12ajE4eF9wcm9iZSwKIAkucmVtb3ZlCQk9IGZtdmoxOHhfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IGZtdmoxOHhfaWRzLAogCS5zdXNwZW5kCT0gZm12ajE4eF9zdXNwZW5kLApAQCAtMTE0OCwxMSArMTEwOCwxMSBAQAogc3RhdGljIGludCBmam5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogCiAgICAgREVCVUcoNCwgImZqbl9vcGVuKCclcycpLlxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogICAgIAogICAgIGxpbmstPm9wZW4rKzsKQEAgLTExNzMsNyArMTEzMyw3IEBACiBzdGF0aWMgaW50IGZqbl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKICAgICBERUJVRyg0LCAiZmpuX2Nsb3NlKCclcycpLlxuIiwgZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKaW5kZXggYjljN2UzOS4uYjhmZTcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKQEAgLTEwNSwxNSArMTA1LDE1IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBpYm10cl9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGlibXRyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBpYm10cl9od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2ludCBtbWlvYmFzZSk7Ci1zdGF0aWMgdm9pZCBpYm10cl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgaWJtdHJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBpYm10cl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHR5cGVkZWYgc3RydWN0IGlibXRyX2Rldl90IHsKLSAgICBkZXZfbGlua190CQlsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogICAgIGRldl9ub2RlX3QgICAgICAgICAgbm9kZTsKICAgICB3aW5kb3dfaGFuZGxlX3QgICAgIHNyYW1fd2luX2hhbmRsZTsKQEAgLTEzOCwxMiArMTM4LDExIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGlibXRyX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGlibXRyX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpYm10cl9kZXZfdCAqaW5mbzsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgCisKICAgICBERUJVRygwLCAiaWJtdHJfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQ3JlYXRlIG5ldyB0b2tlbi1yaW5nIGRldmljZSAqLwpAQCAtMTU2LDcgKzE1NSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiAgICAgfQogCi0gICAgbGluayA9ICZpbmZvLT5saW5rOworICAgIGluZm8tPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gaW5mbzsKICAgICBpbmZvLT50aSA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTE2NywyMSArMTY2LDE0IEBACiAgICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gJnRva19pbnRlcnJ1cHQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKICAgICBsaW5rLT5pcnEuSW5zdGFuY2UgPSBpbmZvLT5kZXYgPSBkZXY7Ci0gICAgCisKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVDsKLSAgICBpYm10cl9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaWJtdHJfY29uZmlnKGxpbmspOwogfSAvKiBpYm10cl9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTMsMjMgKzE4NSwyMiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgaWJtdHJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGlibXRyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKICAgICBzdHJ1Y3QgaWJtdHJfZGV2X3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAKICAgICBERUJVRygwLCAiaWJtdHJfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpCisgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKICAgICB7CiAJc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CiAJZGVsX3RpbWVyX3N5bmMoJih0aS0+dHJfdGltZXIpKTsKICAgICB9Ci0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLSAgICAgICAgaWJtdHJfcmVsZWFzZShsaW5rKTsKKworICAgIGlibXRyX3JlbGVhc2UobGluayk7CiAKICAgICBmcmVlX25ldGRldihkZXYpOwogICAgIGtmcmVlKGluZm8pOwpAQCAtMjI2LDkgKzIxNyw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGlibXRyX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBpYm10cl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBpYm10cl9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKICAgICBzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI0NiwyOSArMjM2LDI1IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwotCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NjE7CiAKICAgICAvKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBQUklNQVJZIG9yIEFMVEVSTkFURS4gKi8KIAogICAgIC8qIFRyeSBQUklNQVJZIGNhcmQgYXQgMHhBMjAtMHhBMjMgKi8KICAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSAweEEyMDsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkvKiBDb3VsZG4ndCBnZXQgMHhBMjAtMHhBMjMuICBUcnkgQUxURVJOQVRFIGF0IDB4QTI0LTB4QTI3LiAqLwogCWxpbmstPmlvLkJhc2VQb3J0MSA9IDB4QTI0OwotCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKTsKKwlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwogICAgIH0KICAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIHRpLT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgdGktPmdsb2JhbF9pbnRfZW5hYmxlPUdMT0JBTF9JTlRfRU5BQkxFKygoZGV2LT5pcnE9PTkpID8gMiA6IGRldi0+aXJxKTsKQEAgLTI3OSw3ICsyNjUsNyBAQAogICAgIHJlcS5CYXNlID0gMDsgCiAgICAgcmVxLlNpemUgPSAweDIwMDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMjUwOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7CiAKICAgICBtZW0uQ2FyZE9mZnNldCA9IG1taW9iYXNlOwogICAgIG1lbS5QYWdlID0gMDsKQEAgLTI5Miw3ICsyNzgsNyBAQAogICAgIHJlcS5CYXNlID0gMDsKICAgICByZXEuU2l6ZSA9IHNyYW1zaXplICogMTAyNDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAyNTA7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZpbmZvLT5zcmFtX3dpbl9oYW5kbGUpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZpbmZvLT5zcmFtX3dpbl9oYW5kbGUpKTsKIAogICAgIG1lbS5DYXJkT2Zmc2V0ID0gc3JhbWJhc2U7CiAgICAgbWVtLlBhZ2UgPSAwOwpAQCAtMzAyLDIxICsyODgsMjAgQEAKICAgICB0aS0+c3JhbV92aXJ0ID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogICAgIHRpLT5zcmFtX3BoeXMgPSByZXEuQmFzZTsKIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAgICAgLyogIFNldCB1cCB0aGUgVG9rZW4tUmluZyBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgYW5kCiAgICAgICAgIHR1cm4gb24gdGhlIGNhcmQuICBDaGVjayB0aGUgIkxvY2FsIEFyZWEgTmV0d29yayBDcmVkaXQgQ2FyZAogICAgICAgICBBZGFwdGVycyBUZWNobmljYWwgUmVmZXJlbmNlIiAgU0MzMC0zNTg1IGZvciB0aGlzIGluZm8uICAqLwogICAgIGlibXRyX2h3X3NldHVwKGRldiwgbW1pb2Jhc2UpOwogCi0gICAgbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpID0gaWJtdHJfcHJvYmVfY2FyZChkZXYpOwogICAgIGlmIChpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgImlibXRyX2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotCWxpbmstPmRldiA9IE5VTEw7CisJbGluay0+ZGV2X25vZGUgPSBOVUxMOwogCWdvdG8gZmFpbGVkOwogICAgIH0KIApAQCAtMzMwLDEyICszMTUsMTMgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgVFJfQUxFTjsgaSsrKQogICAgICAgICBwcmludGsoIiUwMlgiLCBkZXYtPmRldl9hZGRyW2ldKTsKICAgICBwcmludGsoIlxuIik7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIGlibXRyX3JlbGVhc2UobGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGlibXRyX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM0Niw1NiArMzMyLDQxIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBpYm10cl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBpYm10cl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGlibXRyX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OwotCi0gICAgREVCVUcoMCwgImlibXRyX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCi0gICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICBpZiAobGluay0+d2luKSB7Ci0Jc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7Ci0JaW91bm1hcCh0aS0+bW1pbyk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGluZm8tPnNyYW1fd2luX2hhbmRsZSk7Ci0gICAgfQotCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7Ci19Ci0KLXN0YXRpYyBpbnQgaWJtdHJfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJaWJtdHJfZGV2X3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLSAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgICAgICB9CisJREVCVUcoMCwgImlibXRyX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPndpbikgeworCQlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaW91bm1hcCh0aS0+bW1pbyk7CisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpbmZvLT5zcmFtX3dpbl9oYW5kbGUpOworCX0KKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CisKK3N0YXRpYyBpbnQgaWJtdHJfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlpYm10cl9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKKworCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpYm10cl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBpYm10cl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJaWJtdHJfZGV2X3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0gICAgICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCWlibXRyX3Byb2JlKGRldik7CS8qIHJlYWxseT8gKi8KLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQotICAgICAgICB9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJaWJtdHJfcHJvYmUoZGV2KTsJLyogcmVhbGx5PyAqLworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggNzg3MTc2Yy4uYThmNmJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMzYyLDcgKzM2Miw3IEBACiB9IG1hY2Vfc3RhdGlzdGljczsKIAogdHlwZWRlZiBzdHJ1Y3QgX21hY2VfcHJpdmF0ZSB7Ci0gICAgZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IG5vZGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbGludXhfc3RhdHM7IC8qIExpbnV4IHN0YXRpc3RpY3MgY291bnRlcnMgKi8KICAgICBtYWNlX3N0YXRpc3RpY3MgbWFjZV9zdGF0czsgLyogTUFDRSBjaGlwIHN0YXRpc3RpY3MgY291bnRlcnMgKi8KQEAgLTQxNyw4ICs0MTcsOCBAQAogRnVuY3Rpb24gUHJvdG90eXBlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBubWNsYW5fY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgbm1jbGFuX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IG5tY2xhbl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgbm1jbGFuX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgdm9pZCBubWNsYW5fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG1hY2VfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTsKQEAgLTQ0MywxMCArNDQzLDkgQEAKIAlTZXJ2aWNlcy4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBubWNsYW5fYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgbm1jbGFuX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIG1hY2VfcHJpdmF0ZSAqbHA7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgREVCVUcoMCwgIm5tY2xhbl9hdHRhY2goKVxuIik7CkBAIC00NTcsNyArNDU2LDcgQEAKICAgICBpZiAoIWRldikKIAkgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxpbmsgPSAmbHAtPmxpbms7CisgICAgbHAtPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gZGV2OwogICAgIAogICAgIHNwaW5fbG9ja19pbml0KCZscC0+YmFua19sb2NrKTsKQEAgLTQ2OSw3ICs0NjgsNiBAQAogICAgIGxpbmstPmlycS5IYW5kbGVyID0gJm1hY2VfaW50ZXJydXB0OwogICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTQ4OSwxMyArNDg3LDcgQEAKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICNlbmRpZgogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIG5tY2xhbl9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbm1jbGFuX2NvbmZpZyhsaW5rKTsKIH0gLyogbm1jbGFuX2F0dGFjaCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MDYsMTggKzQ5OCwxNiBAQAogCXdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHZvaWQgbm1jbGFuX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBubWNsYW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgREVCVUcoMCwgIm5tY2xhbl9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPmRldikKKyAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAotICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0Jbm1jbGFuX3JlbGVhc2UobGluayk7CisgICAgbm1jbGFuX3JlbGVhc2UobGluayk7CiAKICAgICBmcmVlX25ldGRldihkZXYpOwogfSAvKiBubWNsYW5fZGV0YWNoICovCkBAIC02NjEsOSArNjUxLDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogICBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBubWNsYW5fY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG5tY2xhbl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgdHVwbGVfdCB0dXBsZTsKQEAgLTY3OSwxNyArNjY4LDE0IEBACiAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0gIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLSAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKyAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAotICAvKiBDb25maWd1cmUgY2FyZCAqLwotICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCi0gIENTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8oaGFuZGxlLCAmbGluay0+aW8pKTsKLSAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOwotICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsICZsaW5rLT5jb25mKSk7CisgIENTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CisgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIApAQCAtNzAwLDggKzY4Niw4IEBACiAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKICAgbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHR1cGxlLlR1cGxlRGF0YSwgRVRIRVJfQUREUl9MRU4pOwogCiAgIC8qIFZlcmlmeSBjb25maWd1cmF0aW9uIGJ5IHJlYWRpbmcgdGhlIE1BQ0UgSUQuICovCkBAIC03MTYsOCArNzAyLDcgQEAKICAgICB9IGVsc2UgewogICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJubWNsYW5fY3M6IG1hY2UgaWQgbm90IGZvdW5kOiAleCAleCBzaG91bGQiCiAJICAgICAiIGJlIDB4NDAgMHg/OVxuIiwgc2lnWzBdLCBzaWdbMV0pOwotICAgICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICAgIHJldHVybjsKKyAgICAgIHJldHVybiAtRU5PREVWOwogICAgIH0KICAgfQogCkBAIC03MzAsMTQgKzcxNSwxMyBAQAogICBlbHNlCiAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJubWNsYW5fY3M6IGludmFsaWQgaWZfcG9ydCByZXF1ZXN0ZWRcbiIpOwogCi0gIGxpbmstPmRldiA9ICZscC0+bm9kZTsKLSAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKyAgbGluay0+ZGV2X25vZGUgPSAmbHAtPm5vZGU7CisgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCiAgIGkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgaWYgKGkgIT0gMCkgewogICAgIHByaW50ayhLRVJOX05PVElDRSAibm1jbGFuX2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotICAgIGxpbmstPmRldiA9IE5VTEw7CisgICAgbGluay0+ZGV2X25vZGUgPSBOVUxMOwogICAgIGdvdG8gZmFpbGVkOwogICB9CiAKQEAgLTc0NywxNCArNzMxLDEzIEBACiAJIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxLCBpZl9uYW1lc1tkZXYtPmlmX3BvcnRdKTsKICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKICAgICAgIHByaW50aygiJTAyWCVzIiwgZGV2LT5kZXZfYWRkcltpXSwgKChpPDUpID8gIjoiIDogIlxuIikpOwotICByZXR1cm47CisgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgotICAgIG5tY2xhbl9yZWxlYXNlKGxpbmspOwotICAgIHJldHVybjsKLQorCW5tY2xhbl9yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfSAvKiBubWNsYW5fY29uZmlnICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc2Myw0NiArNzQ2LDI5IEBACiAJbmV0IGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZQogCWlzIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIHZvaWQgbm1jbGFuX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIG5tY2xhbl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCi0gIERFQlVHKDAsICJubWNsYW5fcmVsZWFzZSgweCVwKVxuIiwgbGluayk7Ci0KLSAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCi0gIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCURFQlVHKDAsICJubWNsYW5fcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IG5tY2xhbl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgbm1jbGFuX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQotCisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5tY2xhbl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBubWNsYW5fcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCW5tY2xhbl9yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJbm1jbGFuX3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTgxOCw3ICs3ODQsNyBAQAogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogI2lmIFJFU0VUX1hJTElOWAotICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9ICZscC0+bGluazsKICAgY29uZl9yZWdfdCByZWc7CiAgIHVfbG9uZyBPcmlnQ29yVmFsdWU7IAogCkBAIC04MjcsNyArNzkzLDcgQEAKICAgcmVnLkFjdGlvbiA9IENTX1JFQUQ7CiAgIHJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogICByZWcuVmFsdWUgPSAwOwotICBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKyAgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogICBPcmlnQ29yVmFsdWUgPSByZWcuVmFsdWU7CiAKICAgLyogUmVzZXQgWGlsaW54ICovCkBAIC04MzYsMTIgKzgwMiwxMiBAQAogICBERUJVRygxLCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHglbFgsIHJlc2V0dGluZy4uLlxuIiwKIAlPcmlnQ29yVmFsdWUpOwogICByZWcuVmFsdWUgPSBDT1JfU09GVF9SRVNFVDsKLSAgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZyk7CisgIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgLyogTmVlZCB0byB3YWl0IGZvciAyMCBtcyBmb3IgUENNQ0lBIHRvIGZpbmlzaCByZXNldC4gKi8KIAogICAvKiBSZXN0b3JlIG9yaWdpbmFsIENPUiBjb25maWd1cmF0aW9uIGluZGV4ICovCiAgIHJlZy5WYWx1ZSA9IENPUl9MRVZFTF9SRVEgfCAoT3JpZ0NvclZhbHVlICYgQ09SX0NPTkZJR19NQVNLKTsKLSAgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZyk7CisgIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgLyogWGlsaW54IGlzIG5vdyBjb21wbGV0ZWx5IHJlc2V0IGFsb25nIHdpdGggdGhlIE1BQ0UgY2hpcC4gKi8KICAgbHAtPnR4X2ZyZWVfZnJhbWVzPUFNMjE1MF9NQVhfVFhfRlJBTUVTOwogCkBAIC04ODUsOSArODUxLDkgQEAKIHsKICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgbWFjZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogCi0gIGlmICghREVWX09LKGxpbmspKQorICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKICAgICByZXR1cm4gLUVOT0RFVjsKIAogICBsaW5rLT5vcGVuKys7CkBAIC05MDgsNyArODc0LDcgQEAKIHsKICAga2lvX2FkZHJfdCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgbWFjZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogCiAgIERFQlVHKDIsICIlczogc2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwogCkBAIC05NjMsMTIgKzkyOSwxMiBAQAogc3RhdGljIHZvaWQgbWFjZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICBkZXZfbGlua190ICpsaW5rID0gJmxwLT5saW5rOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAogICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQgLS0gIiwgZGV2LT5uYW1lKTsKICNpZiBSRVNFVF9PTl9USU1FT1VUCiAgIHByaW50aygicmVzZXR0aW5nIGNhcmRcbiIpOwotICBwY21jaWFfcmVzZXRfY2FyZChsaW5rLT5oYW5kbGUsIE5VTEwpOworICBwY21jaWFfcmVzZXRfY2FyZChsaW5rLCBOVUxMKTsKICNlbHNlIC8qICNpZiBSRVNFVF9PTl9USU1FT1VUICovCiAgIHByaW50aygiTk9UIHJlc2V0dGluZyBjYXJkXG4iKTsKICNlbmRpZiAvKiAjaWYgUkVTRVRfT05fVElNRU9VVCAqLwpAQCAtMTIzOCw3ICsxMjA0LDcgQEAKIAogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJbHAtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKLQlscC0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJbHAtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJb3V0YigweEZGLCBpb2FkZHIgKyBBTTIxNTBfUkNWX05FWFQpOyAvKiBza2lwIHRvIG5leHQgZnJhbWUgKi8KIAljb250aW51ZTsKICAgICAgIH0gZWxzZSB7CkBAIC0xNjM1LDcgKzE2MDEsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJubWNsYW5fY3MiLAogCX0sCi0JLnByb2JlCQk9IG5tY2xhbl9hdHRhY2gsCisJLnByb2JlCQk9IG5tY2xhbl9wcm9iZSwKIAkucmVtb3ZlCQk9IG5tY2xhbl9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gbm1jbGFuX2lkcywKIAkuc3VzcGVuZAk9IG5tY2xhbl9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCBiNDZlNWY3Li5kMDkwZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgbWlpX3BoeV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHBjbmV0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIHBjbmV0X3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBwY25ldF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyBpbnQgcGNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcGNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGVpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpAQCAtMTEzLDkgKzExMyw5IEBACiBzdGF0aWMgdm9pZCBlaV93YXRjaGRvZyh1X2xvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIHBjbmV0X3Jlc2V0XzgzOTAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwotc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coZGV2X2xpbmtfdCAqbGluaywgaW50IHN0YXJ0X3BnLAorc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKIAkJCSAgICAgIGludCBzdG9wX3BnLCBpbnQgY21fb2Zmc2V0KTsKLXN0YXRpYyBpbnQgc2V0dXBfZG1hX2NvbmZpZyhkZXZfbGlua190ICpsaW5rLCBpbnQgc3RhcnRfcGcsCitzdGF0aWMgaW50IHNldHVwX2RtYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKIAkJCSAgICBpbnQgc3RvcF9wZyk7CiAKIHN0YXRpYyB2b2lkIHBjbmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwpAQCAtMjE0LDcgKzIxNCw3IEBACiBzdGF0aWMgaHdfaW5mb190IGRsMTAwMjJfaW5mbyA9IHsgMCwgMCwgMCwgMCwgSVNfREwxMDAyMnxIQVNfTUlJIH07CiAKIHR5cGVkZWYgc3RydWN0IHBjbmV0X2Rldl90IHsKLSAgICBkZXZfbGlua190CQlsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90CQlub2RlOwogICAgIHVfaW50CQlmbGFnczsKICAgICB2b2lkCQlfX2lvbWVtICpiYXNlOwpAQCAtMjQwLDEwICsyNDAsOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBwY25ldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHBjbmV0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHBjbmV0X2Rldl90ICppbmZvOwotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogICAgIERFQlVHKDAsICJwY25ldF9hdHRhY2goKVxuIik7CkBAIC0yNTIsNyArMjUxLDcgQEAKICAgICBkZXYgPSBfX2FsbG9jX2VpX25ldGRldihzaXplb2YocGNuZXRfZGV2X3QpKTsKICAgICBpZiAoIWRldikgcmV0dXJuIC1FTk9NRU07CiAgICAgaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBsaW5rID0gJmluZm8tPmxpbms7CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CiAKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKQEAgLTI2NSwxMyArMjY0LDcgQEAKICAgICBkZXYtPnN0b3AgPSAmcGNuZXRfY2xvc2U7CiAgICAgZGV2LT5zZXRfY29uZmlnID0gJnNldF9jb25maWc7CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgcGNuZXRfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHBjbmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogcGNuZXRfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjgzLDE4ICsyNzYsMTYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHBjbmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBwY25ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKIAlERUJVRygwLCAicGNuZXRfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWlmIChsaW5rLT5kZXYpCisJaWYgKGxpbmstPmRldl9ub2RlKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNuZXRfcmVsZWFzZShsaW5rKTsKKwlwY25ldF9yZWxlYXNlKGxpbmspOwogCiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0gLyogcGNuZXRfZGV0YWNoICovCkBAIC0zMDYsNyArMjk3LDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBod19pbmZvX3QgKmdldF9od2luZm8oZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBod19pbmZvX3QgKmdldF9od2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgd2luX3JlcV90IHJlcTsKQEAgLTMxOCw5ICszMDksOSBAQAogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbik7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdFdpbmRvdywgaSk7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0zNDMsNyArMzM0LDcgQEAKICAgICBpb3VubWFwKHZpcnQpOwogICAgIGogPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKICAgICBpZiAoaiAhPSBDU19TVUNDRVNTKQotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVsZWFzZVdpbmRvdywgaik7CisJY3NfZXJyb3IobGluaywgUmVsZWFzZVdpbmRvdywgaik7CiAgICAgcmV0dXJuIChpIDwgTlJfSU5GTykgPyBod19pbmZvK2kgOiBOVUxMOwogfSAvKiBnZXRfaHdpbmZvICovCiAKQEAgLTM1NSw3ICszNDYsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGh3X2luZm9fdCAqZ2V0X3Byb20oZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBod19pbmZvX3QgKmdldF9wcm9tKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC00MDksNyArNDAwLDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBod19pbmZvX3QgKmdldF9kbDEwMDE5KGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaHdfaW5mb190ICpnZXRfZGwxMDAxOShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBpbnQgaTsKQEAgLTQzMSw3ICs0MjIsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGh3X2luZm9fdCAqZ2V0X2F4ODgxOTAoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBod19pbmZvX3QgKmdldF9heDg4MTkwKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC00NjQsNyArNDU1LDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBod19pbmZvX3QgKmdldF9od2lyZWQoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBod19pbmZvX3QgKmdldF9od2lyZWQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgaW50IGk7CkBAIC00OTEsNyArNDgyLDcgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCB0cnlfaW9fcG9ydChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB0cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaiwgcmV0OwogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMzIpIHsKQEAgLTUxMiwxOCArNTAzLDE3IEBACiAJZm9yIChqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKIAkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwogCSAgICBsaW5rLT5pby5CYXNlUG9ydDIgPSAoaiBeIDB4MzAwKSArIDB4MTA7Ci0JICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkgICAgaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHBjbmV0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBwY25ldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICB0dXBsZV90IHR1cGxlOwpAQCAtNTMxLDcgKzUyMSw2IEBACiAgICAgaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuLCBzdGFydF9wZywgc3RvcF9wZywgY21fb2Zmc2V0OwogICAgIGludCBtYW5maWQgPSAwLCBwcm9kaWQgPSAwLCBoYXNfc2htZW0gPSAwOwogICAgIHVfc2hvcnQgYnVmWzY0XTsKLSAgICBjb25maWdfaW5mb190IGNvbmY7CiAgICAgaHdfaW5mb190ICpod19pbmZvOwogCiAgICAgREVCVUcoMCwgInBjbmV0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CkBAIC01NDEsMzYgKzUzMCwyOSBAQAogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLSAgICAvKiBDb25maWd1cmUgY2FyZCAqLwotICAgIGxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLSAgICAvKiBMb29rIHVwIGN1cnJlbnQgVmNjICovCi0gICAgQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOwotCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICBpZiAoKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmCi0gCShwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKSB7CisgICAgaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgJiYKKyAJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKSB7CiAJbWFuZmlkID0gbGUxNl90b19jcHUoYnVmWzBdKTsKIAlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOwogICAgIH0KICAgICAKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB3aGlsZSAobGFzdF9yZXQgPT0gQ1NfU1VDQ0VTUykgewogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CiAJY2lzdHBsX2lvX3QgKmlvID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5LmlvKTsKIAkKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCB8fAorCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDAgfHwKIAkJCWNmZy0+aW5kZXggPT0gMCB8fCBjZmctPmlvLm53aW4gPT0gMCkKIAkJZ290byBuZXh0X2VudHJ5OwogCQpAQCAtNTk0LDE0ICs1NzYsMTQgQEAKIAkgICAgaWYgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIGJyZWFrOwogCX0KICAgICBuZXh0X2VudHJ5OgotCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKKwlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwogICAgIH0KICAgICBpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgewotCWNzX2Vycm9yKGhhbmRsZSwgUmVxdWVzdElPLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgCiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSB7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CkBAIC02MTEsNyArNTkzLDcgQEAKIAkocHJvZGlkID09IFBST0RJRF9JQk1fSE9NRV9BTkRfQVdBWSkpCiAJbGluay0+Y29uZi5Db25maWdJbmRleCB8PSAweDEwOwogICAgIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogICAgIGlmIChpbmZvLT5mbGFncyAmIEhBU19NSVNDX1JFRykgewpAQCAtNjc5LDkgKzY2MSw4IEBACiAJICAgIGluZm8tPmV0aF9waHkgPSAwOwogICAgIH0KIAotICAgIGxpbmstPmRldiA9ICZpbmZvLT5ub2RlOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKICAgICBkZXYtPnBvbGxfY29udHJvbGxlciA9IGVpX3BvbGw7CkBAIC02ODksNyArNjcwLDcgQEAKIAogICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJwY25ldF9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTcxMiwxNCArNjkzLDEzIEBACiAgICAgcHJpbnRrKCIgaHdfYWRkciAiKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCXByaW50aygiJTAyWCVzIiwgZGV2LT5kZXZfYWRkcltpXSwgKChpPDUpID8gIjoiIDogIlxuIikpOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBwY25ldF9yZWxlYXNlKGxpbmspOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAtRU5PREVWOwogfSAvKiBwY25ldF9jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03MzAsMjEgKzcxMCwxNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgcGNuZXRfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgcGNuZXRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYobGluay0+cHJpdik7CisJcGNuZXRfZGV2X3QgKmluZm8gPSBQUklWKGxpbmstPnByaXYpOwogCi0gICAgREVCVUcoMCwgInBjbmV0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCURFQlVHKDAsICJwY25ldF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChpbmZvLT5mbGFncyAmIFVTRV9TSE1FTSkgewotCWlvdW5tYXAoaW5mby0+YmFzZSk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgfQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisJaWYgKGluZm8tPmZsYWdzICYgVVNFX1NITUVNKQorCQlpb3VubWFwKGluZm8tPmJhc2UpOwogCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTc1NiwzNCArNzMxLDI0IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHBjbmV0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBwY25ldF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAobGluay0+b3BlbikKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KKwlpZiAobGluay0+b3BlbikKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGNuZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcGNuZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCXBjbmV0X3Jlc2V0XzgzOTAoZGV2KTsKLQkJCU5TODM5MF9pbml0KGRldiwgMSk7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwlpZiAobGluay0+b3BlbikgeworCQlwY25ldF9yZXNldF84MzkwKGRldik7CisJCU5TODM5MF9pbml0KGRldiwgMSk7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEwMjMsMTEgKzk4OCwxMSBAQAogc3RhdGljIGludCBwY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgcGNuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZpbmZvLT5saW5rOwotICAgIAorICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gaW5mby0+cF9kZXY7CisKICAgICBERUJVRygyLCAicGNuZXRfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogCiAgICAgbGluay0+b3BlbisrOwpAQCAtMTA1MSw3ICsxMDE2LDcgQEAKIHN0YXRpYyBpbnQgcGNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gJmluZm8tPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpbmZvLT5wX2RldjsKIAogICAgIERFQlVHKDIsICJwY25ldF9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKIApAQCAtMTQyOSw3ICsxMzk0LDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc2V0dXBfZG1hX2NvbmZpZyhkZXZfbGlua190ICpsaW5rLCBpbnQgc3RhcnRfcGcsCitzdGF0aWMgaW50IHNldHVwX2RtYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKIAkJCSAgICBpbnQgc3RvcF9wZykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKQEAgLTE1MzIsNyArMTQ5Nyw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhkZXZfbGlua190ICpsaW5rLCBpbnQgc3RhcnRfcGcsCitzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogCQkJICAgICAgaW50IHN0b3BfcGcsIGludCBjbV9vZmZzZXQpCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CkBAIC0xNTU0LDcgKzE1MTksNyBAQAogICAgIHJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9VU0VfV0FJVDsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gd2luZG93X3NpemU7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7CiAKICAgICBtZW0uQ2FyZE9mZnNldCA9IChzdGFydF9wZyA8PCA4KSArIGNtX29mZnNldDsKICAgICBvZmZzZXQgPSBtZW0uQ2FyZE9mZnNldCAlIHdpbmRvd19zaXplOwpAQCAtMTU5NSw3ICsxNTYwLDcgQEAKICAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICByZXR1cm4gMTsKIH0KQEAgLTE2NzQsNiArMTYzOSw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNPTlRFQyIsICJDLU5FVChQQylDLTEwTCIsIDB4MjFjYWI1NTIsIDB4ZjZmOTA3MjIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EiLCAiRkV0aGVyIFBDQy1UWEYiLCAweDBhMjE1MDFhLCAweGE1MTU2NGEyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiY29yZWdhIEV0aGVySUkgUENDLVQiLCAweDUyNjE0NDBmLCAweGZhOWQ4NWJkKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiY29yZWdhIEV0aGVySUkgUENDLVREIiwgMHg1MjYxNDQwZiwgMHhjNDliZDczZCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNvcmVnYSBLLksuIiwgImNvcmVnYSBFdGhlcklJIFBDQy1URCIsIDB4ZDRmZGNiZDgsIDB4YzQ5YmQ3M2QpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRXRoZXIgUENDLVQiLCAweDUyNjE0NDBmLCAweDY3MDVmY2FhKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiY29yZWdhIEZhc3RFdGhlciBQQ0MtVFgiLCAweDUyNjE0NDBmLCAweDQ4NWU4NWQ5KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKaW5kZXggODgzOWM0Zi4uZTc0YmY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTEwMyw3ICsxMDQsNyBAQAogI2RlZmluZSBNRU1PUllfV0FJVF9USU1FICAgICAgIAk4CiAKIHN0cnVjdCBzbWNfcHJpdmF0ZSB7Ci0gICAgZGV2X2xpbmtfdAkJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIHNwaW5sb2NrX3QJCQlsb2NrOwogICAgIHVfc2hvcnQJCQltYW5maWQ7CiAgICAgdV9zaG9ydAkJCWNhcmRpZDsKQEAgLTI3OCw4ICsyNzksOCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIHNtYzkxYzkyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotc3RhdGljIHZvaWQgc21jOTFjOTJfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgc21jOTFjOTJfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgc21jOTFjOTJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIHNtYzkxYzkyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiBzdGF0aWMgaW50IHNtY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzbWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0zMDgsMTAgKzMwOSw5IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHNtYzkxYzkyX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNtYzkxYzkyX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jOwotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogICAgIERFQlVHKDAsICJzbWM5MWM5Ml9hdHRhY2goKVxuIik7CkBAIC0zMjEsNyArMzIxLDcgQEAKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKICAgICBzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxpbmsgPSAmc21jLT5saW5rOworICAgIHNtYy0+cF9kZXYgPSBsaW5rOwogICAgIGxpbmstPnByaXYgPSBkZXY7CiAKICAgICBzcGluX2xvY2tfaW5pdCgmc21jLT5sb2NrKTsKQEAgLTMzMyw3ICszMzMsNiBAQAogICAgIGxpbmstPmlycS5IYW5kbGVyID0gJnNtY19pbnRlcnJ1cHQ7CiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAgICAgLyogVGhlIFNNQzkxYzkyLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCkBAIC0zNTcsMTMgKzM1Niw3IEBACiAgICAgc21jLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOwogICAgIHNtYy0+bWlpX2lmLnJlZ19udW1fbWFzayA9IDB4MWY7CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgc21jOTFjOTJfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNtYzkxYzkyX2NvbmZpZyhsaW5rKTsKIH0gLyogc21jOTFjOTJfYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzc1LDE4ICszNjgsMTYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHNtYzkxYzkyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBzbWM5MWM5Ml9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAic21jOTFjOTJfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpCisgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCXNtYzkxYzkyX3JlbGVhc2UobGluayk7CisgICAgc21jOTFjOTJfcmVsZWFzZShsaW5rKTsKIAogICAgIGZyZWVfbmV0ZGV2KGRldik7CiB9IC8qIHNtYzkxYzkyX2RldGFjaCAqLwpAQCAtNDE0LDcgKzQwNSw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKIAkJY2lzcGFyc2VfdCAqcGFyc2UpCiB7CiAJaW50IGk7CkBAIC00MjUsNyArNDE2LDcgQEAKIAlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIH0KIAotc3RhdGljIGludCBuZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAorc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAogCQljaXNwYXJzZV90ICpwYXJzZSkKIHsKIAlpbnQgaTsKQEAgLTQ0Nyw3ICs0MzgsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBtaHpfMzI4OF9wb3dlcihkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBtaHpfMzI4OF9wb3dlcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NjksNyArNDYwLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtaHpfbWZjX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBtaHpfbWZjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CkBAIC01MDQsNyArNDk1LDcgQEAKICAgICB0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLT5oYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgLyogVGhlIE1lZ2FoZXJ0eiBjb21ibyBjYXJkcyBoYXZlIG1vZGVtLWxpa2UgQ0lTIGVudHJpZXMsIHNvCiAgICAgICAgd2UgaGF2ZSB0byBleHBsaWNpdGx5IHRyeSBhIGJ1bmNoIG9mIHBvcnQgY29tYmluYXRpb25zLiAqLwogICAgIHdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKQEAgLTUxMywxMSArNTA0LDExIEBACiAJZm9yIChrID0gMDsgayA8IDB4NDAwOyBrICs9IDB4MTApIHsKIAkgICAgaWYgKGsgJiAweDgwKSBjb250aW51ZTsKIAkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gayBeIDB4MzAwOwotCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJfQogCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwotCWkgPSBuZXh0X3R1cGxlKGxpbmstPmhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIH0KICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKQogCWdvdG8gZnJlZV9jZmdfbWVtOwpAQCAtNTI3LDcgKzUxOCw3IEBACiAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogICAgIHJlcS5CYXNlID0gcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKICAgICBpZiAoaSAhPSBDU19TVUNDRVNTKQogCWdvdG8gZnJlZV9jZmdfbWVtOwogICAgIHNtYy0+YmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKQEAgLTU0Niw5ICs1MzcsOCBAQAogICAgIHJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IG1oel9zZXR1cChkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBtaHpfc2V0dXAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07CiAgICAgdHVwbGVfdCAqdHVwbGU7CkBAIC01NzEsMTMgKzU2MSwxMyBAQAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHRoZSBDSVMuICBJdCBpcyBzdG9yZWQgYXMgdGhlIGxhc3QKICAgICAgICAoZm91cnRoKSBzdHJpbmcgaW4gdGhlIFZlcnNpb24gMSBWZXJzaW9uL0lEIHR1cGxlLiAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotICAgIGlmIChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpIHsKIAlyYyA9IC0xOwogCWdvdG8gZnJlZV9jZmdfbWVtOwogICAgIH0KICAgICAvKiBVZ2ggLS0gdGhlIEVNMTE0NCBjYXJkIGhhcyB0d28gVkVSU18xIHR1cGxlcyE/ISAqLwotICAgIGlmIChuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKQotCWZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKyAgICBpZiAobmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpCisJZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKICAgICBpZiAocGFyc2UtPnZlcnNpb25fMS5ucyA+IDMpIHsKIAlzdGF0aW9uX2FkZHIgPSBwYXJzZS0+dmVyc2lvbl8xLnN0ciArIHBhcnNlLT52ZXJzaW9uXzEub2ZzWzNdOwogCWlmIChjdnRfYXNjaWlfYWRkcmVzcyhkZXYsIHN0YXRpb25fYWRkcikgPT0gMCkgewpAQCAtNTg4LDExICs1NzgsMTEgQEAKIAogICAgIC8qIEFub3RoZXIgcG9zc2liaWxpdHk6IGZvciB0aGUgRU0zMjg4LCBpbiBhIHNwZWNpYWwgdHVwbGUgKi8KICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gMHg4MTsKLSAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKIAlyYyA9IC0xOwogCWdvdG8gZnJlZV9jZmdfbWVtOwogICAgIH0KLSAgICBpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssIHR1cGxlKSAhPSBDU19TVUNDRVNTKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CkBAIC02MTYsNyArNjA2LDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIG1vdF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIG1vdF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjM3LDcgKzYyNyw3IEBACiAgICAgbWRlbGF5KDEwMCk7CiB9CiAKLXN0YXRpYyBpbnQgbW90X3NldHVwKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IG1vdF9zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtNjcxLDcgKzY2MSw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHNtY19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgc21jX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07CkBAIC02OTYsMTYgKzY4NiwxNiBAQAogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAogICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLT5oYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCWlmIChpID09IENTX1NVQ0NFU1MpIHsKIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKIAkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwogCSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJfQotCWkgPSBuZXh0X3R1cGxlKGxpbmstPmhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIH0KICAgICBpZiAoaSA9PSBDU19TVUNDRVNTKQogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtNzE0LDkgKzcwNCw4IEBACiAgICAgcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgc21jX3NldHVwKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHNtY19zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfY2ZnX21lbSAqY2ZnX21lbTsKICAgICB0dXBsZV90ICp0dXBsZTsKQEAgLTczOSwxMSArNzI4LDExIEBACiAKICAgICAvKiBDaGVjayBmb3IgYSBMQU4gZnVuY3Rpb24gZXh0ZW5zaW9uIHR1cGxlICovCiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9GVU5DRTsKLSAgICBpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIHdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKIAlpZiAocGFyc2UtPmZ1bmNlLnR5cGUgPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQogCSAgICBicmVhazsKLQlpID0gbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKICAgICB9CiAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgewogCW5vZGVfaWQgPSAoY2lzdHBsX2xhbl9ub2RlX2lkX3QgKilwYXJzZS0+ZnVuY2UuZGF0YTsKQEAgLTc1Niw3ICs3NDUsNyBAQAogICAgIH0KICAgICAvKiBUcnkgdGhlIHRoaXJkIHN0cmluZyBpbiB0aGUgVmVyc2lvbiAxIFZlcnNpb24vSUQgdHVwbGUuICovCiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0gICAgaWYgKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgIT0gQ1NfU1VDQ0VTUykgewogCXJjID0gLTE7CiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgfQpAQCAtNzc0LDcgKzc2Myw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IG9zaV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgb3NpX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdGF0aWMgY29uc3Qga2lvX2FkZHJfdCBjb21bNF0gPSB7IDB4M2Y4LCAweDJmOCwgMHgzZTgsIDB4MmU4IH07CkBAIC03OTQsMjIgKzc4MywyMSBAQAogCiAgICAgZm9yIChpID0gaiA9IDA7IGogPCA0OyBqKyspIHsKIAlsaW5rLT5pby5CYXNlUG9ydDIgPSBjb21bal07Ci0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKICAgICB9CiAgICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCS8qIEZhbGxiYWNrOiB0dXJuIG9mZiBoYXJkIGRlY29kZSAqLwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDAzOwogCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICB9CiAgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDEwOwogICAgIHJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IG9zaV9zZXR1cChkZXZfbGlua190ICpsaW5rLCB1X3Nob3J0IG1hbmZpZCwgdV9zaG9ydCBjYXJkaWQpCitzdGF0aWMgaW50IG9zaV9zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgdV9zaG9ydCBtYW5maWQsIHVfc2hvcnQgY2FyZGlkKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHNtY19jZmdfbWVtICpjZmdfbWVtOwogICAgIHR1cGxlX3QgKnR1cGxlOwpAQCAtODMwLDEyICs4MTgsMTIgQEAKIAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHR1cGxlIDB4OTAsIHN1YnR1cGxlIDB4MDQgKi8KICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gMHg5MDsKLSAgICBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKTsKKyAgICBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSk7CiAgICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewotCWkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7CisJaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCB0dXBsZSk7CiAJaWYgKChpICE9IENTX1NVQ0NFU1MpIHx8IChidWZbMF0gPT0gMHgwNCkpCiAJICAgIGJyZWFrOwotCWkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CisJaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCB0dXBsZSk7CiAgICAgfQogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAlyYyA9IC0xOwpAQCAtODY4LDU2ICs4NTYsNDYgQEAKICAgIHJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBzbWM5MWM5Ml9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc21jOTFjOTJfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtYzkxYzkyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNtYzkxYzkyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlpZiAoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NRUdBSEVSVFopICYmCi0JCSAgICAoc21jLT5jYXJkaWQgPT0gUFJPRElEX01FR0FIRVJUWl9FTTMyODgpKQotCQkJbWh6XzMyODhfcG93ZXIobGluayk7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTU9UT1JPTEEpCi0JCQltb3RfY29uZmlnKGxpbmspOwotCQlpZiAoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9PU0lURUNIKSAmJgotCQkgICAgKHNtYy0+Y2FyZGlkICE9IFBST0RJRF9PU0lURUNIX1NFVkVOKSkgewotCQkJLyogUG93ZXIgdXAgdGhlIGNhcmQgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JCQlzZXRfYml0cygweDAzMDAsIGRldi0+YmFzZV9hZGRyLTB4MTArT1NJVEVDSF9BVUlfUFdSKTsKLQkJCXNldF9iaXRzKDB4MDMwMCwgZGV2LT5iYXNlX2FkZHItMHgxMCtPU0lURUNIX1JFU0VUX0lTUik7CisJaWYgKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTUVHQUhFUlRaKSAmJgorCSAgICAoc21jLT5jYXJkaWQgPT0gUFJPRElEX01FR0FIRVJUWl9FTTMyODgpKQorCQltaHpfMzI4OF9wb3dlcihsaW5rKTsKKwlpZiAoc21jLT5tYW5maWQgPT0gTUFORklEX01PVE9ST0xBKQorCQltb3RfY29uZmlnKGxpbmspOworCWlmICgoc21jLT5tYW5maWQgPT0gTUFORklEX09TSVRFQ0gpICYmCisJICAgIChzbWMtPmNhcmRpZCAhPSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHsKKwkJLyogUG93ZXIgdXAgdGhlIGNhcmQgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCXNldF9iaXRzKDB4MDMwMCwgZGV2LT5iYXNlX2FkZHItMHgxMCtPU0lURUNIX0FVSV9QV1IpOworCQlzZXRfYml0cygweDAzMDAsIGRldi0+YmFzZV9hZGRyLTB4MTArT1NJVEVDSF9SRVNFVF9JU1IpOworCX0KKwlpZiAoKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgJiYKKwkgICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHx8CisJICAgICgoc21jLT5tYW5maWQgPT0gTUFORklEX1BTSU9OKSAmJgorCSAgICAgKHNtYy0+Y2FyZGlkID09IFBST0RJRF9QU0lPTl9ORVQxMDApKSkgeworCQkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihfX1hpbGlueDdPRCk7IGkrKykgeworCQkJb3V0YihfX1hpbGlueDdPRFtpXSwgbGluay0+aW8uQmFzZVBvcnQxKzIpOworCQkJdWRlbGF5KDUwKTsKIAkJfQotCQlpZiAoKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgJiYKLQkJICAgICAoc21jLT5jYXJkaWQgPT0gUFJPRElEX09TSVRFQ0hfU0VWRU4pKSB8fAotCQkgICAgKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfUFNJT04pICYmCi0JCSAgICAgKHNtYy0+Y2FyZGlkID09IFBST0RJRF9QU0lPTl9ORVQxMDApKSkgewotCQkJLyogRG93bmxvYWQgdGhlIFNldmVuIG9mIERpYW1vbmRzIGZpcm13YXJlICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKF9fWGlsaW54N09EKTsgaSsrKSB7Ci0JCQkJb3V0YihfX1hpbGlueDdPRFtpXSwgbGluay0+aW8uQmFzZVBvcnQxKzIpOwotCQkJCXVkZWxheSg1MCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCXNtY19yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCXNtY19yZXNldChkZXYpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05MzEsNyArOTA5LDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgY2hlY2tfc2lnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGNoZWNrX3NpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtOTY0LDEzICs5NDIsMTUgQEAKICAgICB9CiAKICAgICBpZiAod2lkdGgpIHsKLQlwcmludGsoS0VSTl9JTkZPICJzbWM5MWM5Ml9jczogdXNpbmcgOC1iaXQgSU8gd2luZG93LlxuIik7Ci0Jc21jOTFjOTJfc3VzcGVuZChsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlzbWM5MWM5Ml9yZXN1bWUobGluay0+aGFuZGxlKTsKLQlyZXR1cm4gY2hlY2tfc2lnKGxpbmspOworCSAgICBtb2Rjb25mX3QgbW9kID0geworCQkgICAgLkF0dHJpYnV0ZXMgPSBDT05GX0lPX0NIQU5HRV9XSURUSCwKKwkgICAgfTsKKwkgICAgcHJpbnRrKEtFUk5fSU5GTyAic21jOTFjOTJfY3M6IHVzaW5nIDgtYml0IElPIHdpbmRvdy5cbiIpOworCisJICAgIHNtYzkxYzkyX3N1c3BlbmQobGluayk7CisJICAgIHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihsaW5rLCAmbW9kKTsKKwkgICAgc21jOTFjOTJfcmVzdW1lKGxpbmspOworCSAgICByZXR1cm4gY2hlY2tfc2lnKGxpbmspOwogICAgIH0KICAgICByZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTk4NCwxMSArOTY0LDEwIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogI2RlZmluZSBDU19FWElUX1RFU1QocmV0LCBzdmMsIGxhYmVsKSBcCi1pZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsgY3NfZXJyb3IobGluay0+aGFuZGxlLCBzdmMsIHJldCk7IGdvdG8gbGFiZWw7IH0KK2lmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeyBjc19lcnJvcihsaW5rLCBzdmMsIHJldCk7IGdvdG8gbGFiZWw7IH0KIAotc3RhdGljIHZvaWQgc21jOTFjOTJfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHNtYzkxYzkyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBjbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07CkBAIC0xMDE1LDIxICs5OTQsMTggQEAKICAgICB0dXBsZS0+VHVwbGVEYXRhTWF4ID0gNjQ7CiAKICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIENTX0VYSVRfVEVTVChpLCBQYXJzZVR1cGxlLCBjb25maWdfZmFpbGVkKTsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UtPmNvbmZpZy5ybWFza1swXTsKIAogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwogICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICBpZiAoZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CiAJc21jLT5tYW5maWQgPSBwYXJzZS0+bWFuZmlkLm1hbmY7CiAJc21jLT5jYXJkaWQgPSBwYXJzZS0+bWFuZmlkLmNhcmQ7CiAgICAgfQogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgaWYgKChzbWMtPm1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgJiYKIAkoc21jLT5jYXJkaWQgIT0gUFJPRElEX09TSVRFQ0hfU0VWRU4pKSB7CiAJaSA9IG9zaV9jb25maWcobGluayk7CkBAIC0xMDQzLDkgKzEwMTksOSBAQAogICAgIH0KICAgICBDU19FWElUX1RFU1QoaSwgUmVxdWVzdElPLCBjb25maWdfZmFpbGVkKTsKIAotICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogICAgIENTX0VYSVRfVEVTVChpLCBSZXF1ZXN0SVJRLCBjb25maWdfZmFpbGVkKTsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAgICAgQ1NfRVhJVF9URVNUKGksIFJlcXVlc3RDb25maWd1cmF0aW9uLCBjb25maWdfZmFpbGVkKTsKIAogICAgIGlmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTU9UT1JPTEEpCkBAIC0xMTI0LDEzICsxMTAwLDEyIEBACiAJU01DX1NFTEVDVF9CQU5LKDApOwogICAgIH0KIAotICAgIGxpbmstPmRldiA9ICZzbWMtPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJnNtYy0+bm9kZTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAogICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJcHJpbnRrKEtFUk5fRVJSICJzbWM5MWM5Ml9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGNvbmZpZ191bmRvOwogICAgIH0KIApAQCAtMTE2MCwxNSArMTEzNSwxNCBAQAogCX0KICAgICB9CiAgICAga2ZyZWUoY2ZnX21lbSk7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBjb25maWdfdW5kbzoKICAgICB1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogY29uZmlnX2ZhaWxlZDoJCQkvKiBDU19FWElUX1RFU1QoKSBjYWxscyBqdW1wIHRvIGhlcmUuLi4gKi8KICAgICBzbWM5MWM5Ml9yZWxlYXNlKGxpbmspOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAgICAga2ZyZWUoY2ZnX21lbSk7Ci0KKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogc21jOTFjOTJfY29uZmlnICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTE3OSwyMiArMTE1MywxNSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgc21jOTFjOTJfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgc21jOTFjOTJfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQotICAgIERFQlVHKDAsICJzbWM5MWM5Ml9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgaWYgKGxpbmstPndpbikgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCXN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpb3VubWFwKHNtYy0+YmFzZSk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgfQotCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJREVCVUcoMCwgInNtYzkxYzkyX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWlmIChsaW5rLT53aW4pIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJCXN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaW91bm1hcChzbWMtPmJhc2UpOworCX0KKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTI4Myw3ICsxMjUwLDcgQEAKIHN0YXRpYyBpbnQgc21jX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZzbWMtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBzbWMtPnBfZGV2OwogCiAjaWZkZWYgUENNQ0lBX0RFQlVHCiAgICAgREVCVUcoMCwgIiVzOiBzbWNfb3BlbiglcCksIElEL1dpbmRvdyAlNC40eC5cbiIsCkBAIC0xMjkyLDcgKzEyNTksNyBAQAogI2VuZGlmCiAKICAgICAvKiBDaGVjayB0aGF0IHRoZSBQQ01DSUEgY2FyZCBpcyBzdGlsbCBoZXJlLiAqLwotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogICAgIC8qIFBoeXNpY2FsIGRldmljZSBwcmVzZW50IHNpZ25hdHVyZS4gKi8KICAgICBpZiAoY2hlY2tfc2lnKGxpbmspIDwgMCkgewpAQCAtMTMyMCw3ICsxMjg3LDcgQEAKIHN0YXRpYyBpbnQgc21jX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmc21jLT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gc21jLT5wX2RldjsKICAgICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCiAgICAgREVCVUcoMCwgIiVzOiBzbWNfY2xvc2UoKSwgc3RhdHVzICU0LjR4LlxuIiwKQEAgLTIzMTEsNyArMjI3OCw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInNtYzkxYzkyX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBzbWM5MWM5Ml9hdHRhY2gsCisJLnByb2JlCQk9IHNtYzkxYzkyX3Byb2JlLAogCS5yZW1vdmUJCT0gc21jOTFjOTJfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHNtYzkxYzkyX2lkcywKIAkuc3VzcGVuZAk9IHNtYzkxYzkyX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwppbmRleCBlOGY4NDllLi43MWY0NTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKQEAgLTI4OSw5ICsyODksOSBAQAogICogYW5kIGVqZWN0aW9uIGV2ZW50cy4gIFRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci4KICAqLwogCi1zdGF0aWMgaW50IGhhc19jZTJfc3RyaW5nKGRldl9saW5rX3QgKiBsaW5rKTsKLXN0YXRpYyB2b2lkIHhpcmMycHNfY29uZmlnKGRldl9saW5rX3QgKiBsaW5rKTsKLXN0YXRpYyB2b2lkIHhpcmMycHNfcmVsZWFzZShkZXZfbGlua190ICogbGluayk7CitzdGF0aWMgaW50IGhhc19jZTJfc3RyaW5nKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluayk7CitzdGF0aWMgaW50IHhpcmMycHNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluayk7CitzdGF0aWMgdm9pZCB4aXJjMnBzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKTsKIAogLyoqKioqKioqKioqKioqKioKICAqIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQpAQCAtMzEzLDEwICszMTMsMTAgQEAKIC8qKioqKioqKioqKioqKioqCiAgKiBBIGxpbmtlZCBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSBkZXZpY2UuICBFYWNoIGFjdHVhbAogICogUENNQ0lBIGNhcmQgY29ycmVzcG9uZHMgdG8gb25lIGRldmljZSBpbnN0YW5jZSwgYW5kIGlzIGRlc2NyaWJlZAotICogYnkgb25lIGRldl9saW5rX3Qgc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgorICogYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KICAqCiAgKiBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGZvciB0aGlzIC0tIGZvciBleGFtcGxlLCB0aGUKLSAqIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIGRldl9saW5rX3QgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCisgKiBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKICAqIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KICAqLwogCkBAIC0zMjYsMTMgKzMyNiwxMyBAQAogICogZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgKiBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgKiBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gKiBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAqIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAqIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICogYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBjYW4ndCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKLSAgICBkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3Qgbm9kZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKICAgICBpbnQgY2FyZF90eXBlOwpAQCAtMzU1LDcgKzM1NSw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9hZGRyZXNzZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHNldF9jYXJkX3R5cGUoZGV2X2xpbmtfdCAqbGluaywgY29uc3Qgdm9pZCAqcyk7CitzdGF0aWMgaW50IHNldF9jYXJkX3R5cGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGNvbnN0IHZvaWQgKnMpOwogc3RhdGljIGludCBkb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKQEAgLTM2OCw3ICszNjgsNyBAQAogCiAvKj09PT09PT09PT09PT09PSBIZWxwZXIgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludAotZmlyc3RfdHVwbGUoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCWludCBlcnI7CiAKQEAgLTM3OSw3ICszNzksNyBAQAogfQogCiBzdGF0aWMgaW50Ci1uZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK25leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogCWludCBlcnI7CiAKQEAgLTU1Myw5ICs1NTMsOCBAQAogICovCiAKIHN0YXRpYyBpbnQKLXhpcmMycHNfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3hpcmMycHNfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWw7CiAKQEAgLTU2NiwxMiArNTY1LDExIEBACiAgICAgaWYgKCFkZXYpCiAJICAgIHJldHVybiAtRU5PTUVNOwogICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBsaW5rID0gJmxvY2FsLT5saW5rOworICAgIGxvY2FsLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKIAogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTU5MywxMyArNTkxLDcgQEAKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICNlbmRpZgogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIHhpcmMycHNfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHhpcmMycHNfY29uZmlnKGxpbmspOwogfSAvKiB4aXJjMnBzX2F0dGFjaCAqLwogCiAvKioqKioqKioqKioqKioqKgpAQCAtNjEwLDE4ICs2MDIsMTYgQEAKICAqLwogCiBzdGF0aWMgdm9pZAoteGlyYzJwc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQoreGlyYzJwc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKICAgICBERUJVRygwLCAiZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChsaW5rLT5kZXYpCisgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCXhpcmMycHNfcmVsZWFzZShsaW5rKTsKKyAgICB4aXJjMnBzX3JlbGVhc2UobGluayk7CiAKICAgICBmcmVlX25ldGRldihkZXYpOwogfSAvKiB4aXJjMnBzX2RldGFjaCAqLwpAQCAtNjQ1LDcgKzYzNSw3IEBACiAgKgogICovCiBzdGF0aWMgaW50Ci1zZXRfY2FyZF90eXBlKGRldl9saW5rX3QgKmxpbmssIGNvbnN0IHZvaWQgKnMpCitzZXRfY2FyZF90eXBlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBjb25zdCB2b2lkICpzKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzE0LDkgKzcwNCw4IEBACiAgKiBSZXR1cm5zOiB0cnVlIGlmIHRoaXMgaXMgYSBDRTIKICAqLwogc3RhdGljIGludAotaGFzX2NlMl9zdHJpbmcoZGV2X2xpbmtfdCAqIGxpbmspCitoYXNfY2UyX3N0cmluZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICB0dXBsZV90IHR1cGxlOwogICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgdV9jaGFyIGJ1ZlsyNTZdOwpAQCAtNzI2LDcgKzcxNSw3IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU0OwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotICAgIGlmICghZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgJiYgcGFyc2UudmVyc2lvbl8xLm5zID4gMikgeworICAgIGlmICghZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICYmIHBhcnNlLnZlcnNpb25fMS5ucyA+IDIpIHsKIAlpZiAoc3Ryc3RyKHBhcnNlLnZlcnNpb25fMS5zdHIgKyBwYXJzZS52ZXJzaW9uXzEub2ZzWzJdLCAiQ0UyIikpCiAJICAgIHJldHVybiAxOwogICAgIH0KQEAgLTczOCwxMCArNzI3LDkgQEAKICAqIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQogICogZXRoZXJuZXQgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogICovCi1zdGF0aWMgdm9pZAoteGlyYzJwc19jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspCitzdGF0aWMgaW50Cit4aXJjMnBzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB0dXBsZV90IHR1cGxlOwpAQCAtNzY3LDcgKzc1NSw3IEBACiAKICAgICAvKiBJcyB0aGlzIGEgdmFsaWQJY2FyZCAqLwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0gICAgaWYgKChlcnI9Zmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpKSB7CisgICAgaWYgKChlcnI9Zmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKSkgewogCXByaW50ayhLTk9UX1hJUkMgIm1hbmZpZCBub3QgZm91bmQgaW4gQ0lTXG4iKTsKIAlnb3RvIGZhaWx1cmU7CiAgICAgfQpAQCAtODAzLDE1ICs3OTEsMTUgQEAKIAogICAgIC8qIGdldCBjb25maWd1cmF0aW9uIHN0dWZmICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBpZiAoKGVycj1maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSkpCisgICAgaWYgKChlcnI9Zmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKSkKIAlnb3RvIGNpc19lcnJvcjsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSAgICBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKICAgICAvKiBnZXQgdGhlIGV0aGVybmV0IGFkZHJlc3MgZnJvbSB0aGUgQ0lTICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwotICAgIGZvciAoZXJyID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7Ci0JCQkgICAgIGVyciA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpIHsKKyAgICBmb3IgKGVyciA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsgIWVycjsKKwkJCSAgICAgZXJyID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpIHsKIAkvKiBPbmNlIEkgc2F3IHR3byBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQgZW50cmllczoKIAkgKiB0aGUgZmlyc3Qgb25lIHdpdGggYSBsZW5ndGggb2YgemVybyB0aGUgc2Vjb25kIGNvcnJlY3QgLQogCSAqIHNvIEkgc2tpcCBhbGwgZW50cmllcyB3aXRoIGxlbmd0aCAwICovCkBAIC04MjEsOCArODA5LDggQEAKICAgICB9CiAgICAgaWYgKGVycikgeyAvKiBub3QgZm91bmQ6IHRyeSB0byBnZXQgdGhlIG5vZGUtaWQgZnJvbSB0dXBsZSAweDg5ICovCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gMHg4OTsgIC8qIGRhdGEgbGF5b3V0IGxvb2tzIGxpa2UgdHVwbGUgMHgyMiAqLwotCWlmICgoZXJyID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpID09IDAgJiYKLQkJKGVyciA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpID09IDApIHsKKwlpZiAoKGVyciA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgPT0gMCAmJgorCQkoZXJyID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpID09IDApIHsKIAkgICAgaWYgKHR1cGxlLlR1cGxlRGF0YUxlbiA9PSA4ICYmICpidWYgPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQogCQltZW1jcHkoJnBhcnNlLCBidWYsIDgpOwogCSAgICBlbHNlCkBAIC04MzEsOCArODE5LDggQEAKICAgICB9CiAgICAgaWYgKGVycikgeyAvKiBhbm90aGVyIHRyeQkoSmFtZXMgTGVobWVyJ3MgQ0UyIHZlcnNpb24gNC4xKSovCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwotCWZvciAoZXJyID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7Ci0JCQkJIGVyciA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpIHsKKwlmb3IgKGVyciA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsgIWVycjsKKwkJCQkgZXJyID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpIHsKIAkgICAgaWYgKHBhcnNlLmZ1bmNlLnR5cGUgPT0gMHgwMiAmJiBwYXJzZS5mdW5jZS5kYXRhWzBdID09IDEKIAkJJiYgcGFyc2UuZnVuY2UuZGF0YVsxXSA9PSA2ICYmIHR1cGxlLlR1cGxlRGF0YUxlbiA9PSAxMykgewogCQlidWZbMV0gPSA0OwpAQCAtODUzLDkgKzg0MSw2IEBACiAgICAgZm9yIChpPTA7IGkgPCA2OyBpKyspCiAJZGV2LT5kZXZfYWRkcltpXSA9IG5vZGVfaWQtPmlkW2ldOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPTEwOwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX0hBTkRMRV9QUkVTRU5UOwpAQCAtODc1LDE0ICs4NjAsMTQgQEAKIAkgICAgICogRXRoZXJuZXQgcG9ydCAqLwogCSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsgLyogbm8gTWFrbyBzdHVmZiBhbnltb3JlICovCiAJICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCSAgICBmb3IgKGVyciA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOwotCQkJCSBlcnIgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKSB7CisJICAgIGZvciAoZXJyID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOworCQkJCSBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgewogCQlpZiAoY2YtPmlvLm53aW4gPiAwICAmJiAgKGNmLT5pby53aW5bMF0uYmFzZSAmIDB4ZikgPT0gOCkgewogCQkgICAgZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHg0MDA7IGlvYWRkciArPSAweDEwKSB7CiAJCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4IDsKIAkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMF0uYmFzZTsKIAkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQkJCWlmICghKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykpKQorCQkJaWYgKCEoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpKQogCQkJICAgIGdvdG8gcG9ydF9mb3VuZDsKIAkJICAgIH0KIAkJfQpAQCAtODk2LDE1ICs4ODEsMTUgQEAKIAkgICAgICovCiAJICAgIGZvciAocGFzcz0wOyBwYXNzIDwgMjsgcGFzcysrKSB7CiAJCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCQlmb3IgKGVyciA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOwotCQkJCSAgICAgZXJyID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSl7CisJCWZvciAoZXJyID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOworCQkJCSAgICAgZXJyID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpewogCQkgICAgaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpewogCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleCA7CiAJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBsaW5rLT5pby5CYXNlUG9ydDIKIAkJCQkgICAgKyAocGFzcyA/IChjZi0+aW5kZXggJiAweDIwID8gLTI0OjgpCiAJCQkJCSAgICA6IChjZi0+aW5kZXggJiAweDIwID8gICA4Oi0yNCkpOwotCQkJaWYgKCEoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSkpCisJCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCiAJCQkgICAgZ290byBwb3J0X2ZvdW5kOwogCQkgICAgfQogCQl9CkBAIC05MTksMTIgKzkwNCwxMiBAQAogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwogCWZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkgewogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JICAgIGlmICghKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykpKQorCSAgICBpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCiAJCWdvdG8gcG9ydF9mb3VuZDsKIAl9CiAJbGluay0+aW8uQmFzZVBvcnQxID0gMDsgLyogbGV0IENTIGRlY2lkZSAqLwotCWlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSkpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGVycik7CisJaWYgKChlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpIHsKKwkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBlcnIpOwogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAl9CiAgICAgfQpAQCAtOTM2LDggKzkyMSw4IEBACiAgICAgICogTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLglOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAogICAgICAqIGFjdHVhbGx5IGFzc2lnbiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KICAgICAgKi8KLSAgICBpZiAoKGVycj1wY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSkpIHsKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGVycik7CisgICAgaWYgKChlcnI9cGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSkgeworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGVycik7CiAJZ290byBjb25maWdfZXJyb3I7CiAgICAgfQogCkBAIC05NDUsOCArOTMwLDggQEAKICAgICAgKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogICAgICAqIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgogICAgICAqLwotICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpKSB7Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgZXJyKTsKKyAgICBpZiAoKGVycj1wY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkpIHsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgZXJyKTsKIAlnb3RvIGNvbmZpZ19lcnJvcjsKICAgICB9CiAKQEAgLTk2MywxNSArOTQ4LDE1IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfSU9CQVNFXzA7CiAJcmVnLlZhbHVlID0gbGluay0+aW8uQmFzZVBvcnQyICYgMHhmZjsKLQlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpKSkgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgZXJyKTsKKwlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSkpIHsKKwkgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBlcnIpOwogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAl9CiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfSU9CQVNFXzE7CiAJcmVnLlZhbHVlID0gKGxpbmstPmlvLkJhc2VQb3J0MiA+PiA4KSAmIDB4ZmY7Ci0JaWYgKChlcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKSkpIHsKLQkgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGVycik7CisJaWYgKChlcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpKSB7CisJICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgZXJyKTsKIAkgICAgZ290byBjb25maWdfZXJyb3I7CiAJfQogCkBAIC05ODIsMTUgKzk2NywxNSBAQAogCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKIAlyZXEuQmFzZSA9IHJlcS5TaXplID0gMDsKIAlyZXEuQWNjZXNzU3BlZWQgPSAwOwotCWlmICgoZXJyID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsaW5rLT53aW4pKSkgewotCSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RXaW5kb3csIGVycik7CisJaWYgKChlcnIgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKSkgeworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBlcnIpOwogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAl9CiAJbG9jYWwtPmRpbmdvX2NjciA9IGlvcmVtYXAocmVxLkJhc2UsMHgxMDAwKSArIDB4MDgwMDsKIAltZW0uQ2FyZE9mZnNldCA9IDB4MDsKIAltZW0uUGFnZSA9IDA7CiAJaWYgKChlcnIgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgTWFwTWVtUGFnZSwgZXJyKTsKKwkgICAgY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgZXJyKTsKIAkgICAgZ290byBjb25maWdfZXJyb3I7CiAJfQogCkBAIC0xMDUwLDEzICsxMDM1LDEyIEBACiAgICAgaWYgKGxvY2FsLT5kaW5nbykKIAlkb19yZXNldChkZXYsIDEpOyAvKiBhIGtsdWRnZSB0byBtYWtlIHRoZSBjZW01NiB3b3JrICovCiAKLSAgICBsaW5rLT5kZXYgPSAmbG9jYWwtPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgIGxpbmstPmRldl9ub2RlID0gJmxvY2FsLT5ub2RlOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCiAgICAgaWYgKChlcnI9cmVnaXN0ZXJfbmV0ZGV2KGRldikpKSB7CiAJcHJpbnRrKEtOT1RfWElSQyAicmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGNvbmZpZ19lcnJvcjsKICAgICB9CiAKQEAgLTEwNjksMTcgKzEwNTMsMTYgQEAKIAlwcmludGsoIiVjJTAyWCIsIGk/JzonOicgJywgZGV2LT5kZXZfYWRkcltpXSk7CiAgICAgcHJpbnRrKCJcbiIpOwogCi0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiAgIGNvbmZpZ19lcnJvcjoKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogICAgIHhpcmMycHNfcmVsZWFzZShsaW5rKTsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIC1FTk9ERVY7CiAKICAgY2lzX2Vycm9yOgogICAgIHByaW50ayhLTk9UX1hJUkMgInVuYWJsZSB0byBwYXJzZSBDSVNcbiIpOwogICBmYWlsdXJlOgotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHhpcmMycHNfY29uZmlnICovCiAKIC8qKioqKioqKioqKioqKioqCkBAIC0xMDg4LDU3ICsxMDcxLDQxIEBACiAgKiBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KICAqLwogc3RhdGljIHZvaWQKLXhpcmMycHNfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQoreGlyYzJwc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogeworCURFQlVHKDAsICJyZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIERFQlVHKDAsICJyZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKLQotICAgIGlmIChsaW5rLT53aW4pIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAobG9jYWwtPmRpbmdvKQotCSAgICBpb3VubWFwKGxvY2FsLT5kaW5nb19jY3IgLSAweDA4MDApOwotCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIH0KLSAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotCisJaWYgKGxpbmstPndpbikgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwkJbG9jYWxfaW5mb190ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJCWlmIChsb2NhbC0+ZGluZ28pCisJCQlpb3VubWFwKGxvY2FsLT5kaW5nb19jY3IgLSAweDA4MDApOworCX0KKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9IC8qIHhpcmMycHNfcmVsZWFzZSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCi1zdGF0aWMgaW50IHhpcmMycHNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHhpcmMycHNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJCWRvX3Bvd2VyZG93bihkZXYpOwotCQl9Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKKwlpZiAobGluay0+b3BlbikgeworCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJCWRvX3Bvd2VyZG93bihkZXYpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHhpcmMycHNfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgeGlyYzJwc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQlpZiAobGluay0+b3BlbikgewotCQkJZG9fcmVzZXQoZGV2LDEpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJZG9fcmVzZXQoZGV2LDEpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTUyLDEzICsxNTE5LDEzIEBACiBkb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZscC0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAogICAgIERFQlVHKDAsICJkb19vcGVuKCVwKVxuIiwgZGV2KTsKIAogICAgIC8qIENoZWNrIHRoYXQgdGhlIFBDTUNJQSBjYXJkIGlzIHN0aWxsIGhlcmUuICovCiAgICAgLyogUGh5c2ljYWwgZGV2aWNlIHByZXNlbnQgc2lnbmF0dXJlLiAqLwotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogCiAgICAgLyogb2theSAqLwpAQCAtMTg4Miw3ICsxODQ5LDcgQEAKIHsKICAgICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmbHAtPmxpbms7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKICAgICBERUJVRygwLCAiZG9fc3RvcCglcClcbiIsIGRldik7CiAKQEAgLTE5MzUsNyArMTkwMiw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInhpcmMycHNfY3MiLAogCX0sCi0JLnByb2JlCQk9IHhpcmMycHNfYXR0YWNoLAorCS5wcm9iZQkJPSB4aXJjMnBzX3Byb2JlLAogCS5yZW1vdmUJCT0geGlyYzJwc19kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0geGlyYzJwc19pZHMsCiAJLnN1c3BlbmQJPSB4aXJjMnBzX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggMDdjMzFmMS4uZmMwOGM0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtMTc3NCw4ICsxNzc0LDYgQEAKIAkJbHAtPnJ4X2RtYV9hZGRyW2ldID0gMDsKIAl9CiAKLQlwY25ldDMyX2ZyZWVfcmluZyhkZXYpOwotCiAJLyoKIAkgKiBTd2l0Y2ggYmFjayB0byAxNmJpdCBtb2RlIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZHVtYgogCSAqIERPUyBwYWNrZXQgZHJpdmVyIGFmdGVyIGEgd2FybSByZWJvb3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKaW5kZXggNDU5NDQzYi4uMWIyMzZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKQEAgLTYwLDggKzYwLDEwIEBACiAJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKSB7CiAJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAKLQkJaWYgKGJ1cy0+cGh5X21hc2sgJiAoMSA8PCBpKSkKKwkJaWYgKGJ1cy0+cGh5X21hc2sgJiAoMSA8PCBpKSkgeworCQkJYnVzLT5waHlfbWFwW2ldID0gTlVMTDsKIAkJCWNvbnRpbnVlOworCQl9CiAKIAkJcGh5ZGV2ID0gZ2V0X3BoeV9kZXZpY2UoYnVzLCBpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggNDc1ZGM5My4uMGQxMDFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC04NjEsNiArODYxLDkgQEAKIAkJICogZ2l2ZSBkZXZfcXVldWVfeG1pdCBzb21ldGhpbmcgaXQgY2FuIGZyZWUuCiAJCSAqLwogCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHNrYjIgPT0gTlVMTCkKKwkJCWdvdG8gYWJvcnQ7CiAJfQogCiAJcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKSBza2JfcHVzaChza2IyLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCBiODIxOTFkLi5mNWEzYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMTI3LDYgKzEyNyw3IEBACiB9IG1paV9jaGlwX3RhYmxlW10gPSB7CiAJeyAiU2lTIDkwMCBJbnRlcm5hbCBNSUkgUEhZIiwgCQkweDAwMWQsIDB4ODAwMCwgTEFOIH0sCiAJeyAiU2lTIDcwMTQgUGh5c2ljYWwgTGF5ZXIgU29sdXRpb24iLCAJMHgwMDE2LCAweGY4MzAsIExBTiB9LAorCXsgIlNpUyA5MDAgb24gRm94Y29ubiA2NjEgN01JIiwgICAgICAgICAweDAxNDMsIDB4QkM3MCwgTEFOIH0sCiAJeyAiQWx0aW1hdGEgQUMxMDFMRiBQSFkiLCAgICAgICAgICAgICAgIDB4MDAyMiwgMHg1NTIwLCBMQU4gfSwKIAl7ICJBRE0gNzAwMSBMQU4gUEhZIiwJCQkweDAwMmUsIDB4Y2M2MCwgTEFOIH0sCiAJeyAiQU1EIDc5QzkwMSAxMEJBU0UtVCBQSFkiLCAgCQkweDAwMDAsIDB4NkI3MCwgTEFOIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMzVkYmYwNS4uNWNhNWExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtNzgsNiArNzgsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9HRSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfWVUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIFBDSV9ERVZJQ0VfSURfRExJTktfREdFNTEwVCksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIDB4NGIwMSkgfSwJLyogREdFLTUzMFQgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzMjApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg1MDA1KSB9LCAvKiBCZWxraW4gKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DTkVULCBQQ0lfREVWSUNFX0lEX0NORVRfR0lHQUNBUkQpIH0sCkBAIC00MDAsNyArNDAxLDcgQEAKIAlpbnQgZXJyOwogCiAJaWYgKHAtPnJ4X3BlbmRpbmcgPT0gMCB8fCBwLT5yeF9wZW5kaW5nID4gTUFYX1JYX1JJTkdfU0laRSB8fAotCSAgICBwLT50eF9wZW5kaW5nID09IDAgfHwgcC0+dHhfcGVuZGluZyA+IE1BWF9UWF9SSU5HX1NJWkUpCisJICAgIHAtPnR4X3BlbmRpbmcgPCBNQVhfU0tCX0ZSQUdTKzEgfHwgcC0+dHhfcGVuZGluZyA+IE1BWF9UWF9SSU5HX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2tnZS0+cnhfcmluZy5jb3VudCA9IHAtPnJ4X3BlbmRpbmc7CkBAIC0yNzE1LDggKzI3MTYsNyBAQAogCQlpZiAoY29udHJvbCAmIEJNVV9PV04pCiAJCQlicmVhazsKIAotCQlza2IgPSBza2dlX3J4X2dldChza2dlLCBlLCBjb250cm9sLCByZC0+c3RhdHVzLAotCQkJCSAgbGUxNl90b19jcHUocmQtPmNzdW0yKSk7CisJCXNrYiA9IHNrZ2VfcnhfZ2V0KHNrZ2UsIGUsIGNvbnRyb2wsIHJkLT5zdGF0dXMsIHJkLT5jc3VtMik7CiAJCWlmIChsaWtlbHkoc2tiKSkgewogCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggNjhmOWMyMC4uOTdmZTk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgInNreTIuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkJInNreTIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNCIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCiAKIC8qCkBAIC03OSw2ICs3OSw4IEBACiAjZGVmaW5lIE5BUElfV0VJR0hUCQk2NAogI2RlZmluZSBQSFlfUkVUUklFUwkJMTAwMAogCisjZGVmaW5lIFJJTkdfTkVYVCh4LHMpCSgoKHgpKzEpICYgKChzKS0xKSkKKwogc3RhdGljIGNvbnN0IHUzMiBkZWZhdWx0X21zZyA9CiAgICAgTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LCiAgICAgfCBORVRJRl9NU0dfVElNRVIgfCBORVRJRl9NU0dfVFhfRVJSIHwgTkVUSUZfTVNHX1JYX0VSUgpAQCAtOTYsMTEgKzk4LDE0IEBACiBtb2R1bGVfcGFyYW0oZGlzYWJsZV9tc2ksIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfbXNpLCAiRGlzYWJsZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCAoTVNJKSIpOwogCitzdGF0aWMgaW50IGlkbGVfdGltZW91dCA9IDEwMDsKK21vZHVsZV9wYXJhbShpZGxlX3RpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkbGVfdGltZW91dCwgIklkbGUgdGltZW91dCB3b3JrYXJvdW5kIGZvciBsb3N0IGludGVycnVwdHMgKG1zKSIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2t5Ml9pZF90YWJsZVtdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIDB4OTAwMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDlFMDApIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIDB4NGIwMCkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDRiMDApIH0sCS8qIERHRS01NjBUICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQwKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0MSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDIpIH0sCkBAIC0xMjQsNiArMTI5LDcgQEAKIC8qIEF2b2lkIGNvbmRpdGlvbmFscyBieSB1c2luZyBhcnJheSAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHR4cWFkZHJbXSA9IHsgUV9YQTEsIFFfWEEyIH07CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgcnhxYWRkcltdID0geyBRX1IxLCBRX1IyIH07CitzdGF0aWMgY29uc3QgdTMyIHBvcnRpcnFfbXNrW10gPSB7IFkyX0lTX1BPUlRfMSwgWTJfSVNfUE9SVF8yIH07CiAKIC8qIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHl1a29uMiBjaGlwc2V0IG9ubHkgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp5dWtvbjJfbmFtZVtdID0gewpAQCAtMTgxLDEyICsxODcsMTEgQEAKIAlyZXR1cm4gdjsKIH0KIAotc3RhdGljIGludCBza3kyX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHBjaV9wb3dlcl90IHN0YXRlKQorc3RhdGljIHZvaWQgc2t5Ml9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHNreTJfaHcgKmh3LCBwY2lfcG93ZXJfdCBzdGF0ZSkKIHsKIAl1MTYgcG93ZXJfY29udHJvbDsKIAl1MzIgcmVnMTsKIAlpbnQgdmF1eDsKLQlpbnQgcmV0ID0gMDsKIAogCXByX2RlYnVnKCJza3kyX3NldF9wb3dlcl9zdGF0ZSAlZFxuIiwgc3RhdGUpOwogCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOwpAQCAtMjMwLDYgKzIzNSw3IEBACiAJCX0KIAogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSB7CisJCQlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0hXX1dPTF9PTik7CiAJCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzMsIDApOwogCQkJcmVnMSA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUc0KTsKIAkJCXJlZzEgJj0gUF9BU1BNX0NPTlRST0xfTVNLOwpAQCAtMjY4LDEyICsyNzQsMTAgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5rbm93biBwb3dlciBzdGF0ZSAlZFxuIiwgc3RhdGUpOwotCQlyZXQgPSAtMTsKIAl9CiAKIAlza3kyX3BjaV93cml0ZTE2KGh3LCBody0+cG1fY2FwICsgUENJX1BNX0NUUkwsIHBvd2VyX2NvbnRyb2wpOwogCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBza3kyX3BoeV9yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCkBAIC0zMDAsNyArMzA0LDggQEAKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoaHctPmRldltwb3J0XSk7CiAJdTE2IGN0cmwsIGN0MTAwMCwgYWR2LCBwZywgbGVkY3RybCwgbGVkb3ZlcjsKIAotCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmIGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fWEwpIHsKKwlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgorCSAgICAhKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgfHwgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSkgewogCQl1MTYgZWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0NUUkwpOwogCiAJCWVjdHJsICY9IH4oUEhZX01fRUNfTV9EU0NfTVNLIHwgUEhZX01fRUNfU19EU0NfTVNLIHwKQEAgLTMyOCw3ICszMzMsNyBAQAogCQkJY3RybCB8PSBQSFlfTV9QQ19NRElfWE1PREUoUEhZX01fUENfRU5BX0FVVE8pOwogCiAJCQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgotCQkJICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwpIHsKKwkJCSAgICAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCB8fCBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpKSB7CiAJCQkJY3RybCAmPSB+UEhZX01fUENfRFNDX01TSzsKIAkJCQljdHJsIHw9IFBIWV9NX1BDX0RTQygyKSB8IFBIWV9NX1BDX0RPV05fU19FTkE7CiAJCQl9CkBAIC00NDQsMTAgKzQ0OSwxMSBAQAogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDMpOwogCiAJCS8qIHNldCBMRUQgRnVuY3Rpb24gQ29udHJvbCByZWdpc3RlciAqLwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCAoUEhZX01fTEVEQ19MT1NfQ1RSTCgxKSB8CS8qIExJTksvQUNUICovCi0JCQkJCQkJICAgUEhZX01fTEVEQ19JTklUX0NUUkwoNykgfAkvKiAxMCBNYnBzICovCi0JCQkJCQkJICAgUEhZX01fTEVEQ19TVEExX0NUUkwoNykgfAkvKiAxMDAgTWJwcyAqLwotCQkJCQkJCSAgIFBIWV9NX0xFRENfU1RBMF9DVFJMKDcpKSk7CS8qIDEwMDAgTWJwcyAqLworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAorCQkJICAgICAoUEhZX01fTEVEQ19MT1NfQ1RSTCgxKSB8CS8qIExJTksvQUNUICovCisJCQkgICAgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg3KSB8CS8qIDEwIE1icHMgKi8KKwkJCSAgICAgIFBIWV9NX0xFRENfU1RBMV9DVFJMKDcpIHwJLyogMTAwIE1icHMgKi8KKwkJCSAgICAgIFBIWV9NX0xFRENfU1RBMF9DVFJMKDcpKSk7CS8qIDEwMDAgTWJwcyAqLwogCiAJCS8qIHNldCBQb2xhcml0eSBDb250cm9sIHJlZ2lzdGVyICovCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX1NUQVQsCkBAIC00NjEsNiArNDY3LDI1IEBACiAJCS8qIHJlc3RvcmUgcGFnZSByZWdpc3RlciAqLwogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIHBnKTsKIAkJYnJlYWs7CisJY2FzZSBDSElQX0lEX1lVS09OX0VDX1U6CisJCXBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOworCisJCS8qIHNlbGVjdCBwYWdlIDMgdG8gYWNjZXNzIExFRCBjb250cm9sIHJlZ2lzdGVyICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7CisKKwkJLyogc2V0IExFRCBGdW5jdGlvbiBDb250cm9sIHJlZ2lzdGVyICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsCisJCQkgICAgIChQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwJLyogTElOSy9BQ1QgKi8KKwkJCSAgICAgIFBIWV9NX0xFRENfSU5JVF9DVFJMKDgpIHwJLyogMTAgTWJwcyAqLworCQkJICAgICAgUEhZX01fTEVEQ19TVEExX0NUUkwoNykgfAkvKiAxMDAgTWJwcyAqLworCQkJICAgICAgUEhZX01fTEVEQ19TVEEwX0NUUkwoNykpKTsvKiAxMDAwIE1icHMgKi8KKworCQkvKiBzZXQgQmxpbmsgUmF0ZSBpbiBMRUQgVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLAorCQkJICAgICBsZWRjdHJsIHwgUEhZX01fTEVEX0JMSU5LX1JUKEJMSU5LXzg0TVMpKTsKKwkJLyogcmVzdG9yZSBwYWdlIHJlZ2lzdGVyICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgcGcpOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCS8qIHNldCBUeCBMRUQgKExFRF9UWCkgdG8gYmxpbmsgbW9kZSBvbiBSeCBPUiBUeCBhY3Rpdml0eSAqLwpAQCAtNDY5LDE5ICs0OTQsMjEgQEAKIAkJbGVkb3ZlciB8PSBQSFlfTV9MRURfTU9fUlgoTU9fTEVEX09GRik7CiAJfQogCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSAmJiBody0+Y2hpcF9yZXYgPj0gMikgeworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UgJiYgaHctPmNoaXBfcmV2ID09IENISVBfUkVWX1lVX0VDX0ExKSB7CiAJCS8qIGFwcGx5IGZpeGVzIGluIFBIWSBBRkUgKi8KLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCAyMiwgMjU1KTsKKwkJcGcgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUik7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMjU1KTsKKwogCQkvKiBpbmNyZWFzZSBkaWZmZXJlbnRpYWwgc2lnbmFsIGFtcGxpdHVkZSBpbiAxMEJBU0UtVCAqLwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDI0LCAweGFhOTkpOwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDIzLCAweDIwMTEpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDB4MTgsIDB4YWE5OSk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxNywgMHgyMDExKTsKIAogCQkvKiBmaXggZm9yIElFRUUgQS9CIFN5bW1ldHJ5IGZhaWx1cmUgaW4gMTAwMEJBU0UtVCAqLwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDI0LCAweGEyMDQpOwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDIzLCAweDIwMDIpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDB4MTgsIDB4YTIwNCk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMHgxNywgMHgyMDAyKTsKIAogCQkvKiBzZXQgcGFnZSByZWdpc3RlciB0byAwICovCi0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjIsIDApOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIHBnKTsKIAl9IGVsc2UgewogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9DVFJMLCBsZWRjdHJsKTsKIApAQCAtNTU1LDYgKzU4MiwxMSBAQAogCiAJCWlmIChza3kyLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQlyZWcgfD0gR01fR1BDUl9EVVBfRlVMTDsKKworCQkvKiB0dXJuIG9mZiBwYXVzZSBpbiAxMC8xMDBtYnBzIGhhbGYgZHVwbGV4ICovCisJCWVsc2UgaWYgKHNreTItPnNwZWVkICE9IFNQRUVEXzEwMDAgJiYKKwkJCSBody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX0VDX1UpCisJCQlza3kyLT50eF9wYXVzZSA9IHNreTItPnJ4X3BhdXNlID0gMDsKIAl9IGVsc2UKIAkJcmVnID0gR01fR1BDUl9TUEVFRF8xMDAwIHwgR01fR1BDUl9TUEVFRF8xMDAgfCBHTV9HUENSX0RVUF9GVUxMOwogCkBAIC01NzksOCArNjExLDggQEAKIAlyZWcgPSBnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9QSFlfQUREUik7CiAJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1BIWV9BRERSLCByZWcgfCBHTV9QQVJfTUlCX0NMUik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgR01fTUlCX0NOVF9TSVpFOyBpKyspCi0JCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX01JQl9DTlRfQkFTRSArIDggKiBpKTsKKwlmb3IgKGkgPSBHTV9NSUJfQ05UX0JBU0U7IGkgPD0gR01fTUlCX0NOVF9FTkQ7IGkgKz0gNCkKKwkJZ21hX3JlYWQxNihodywgcG9ydCwgaSk7CiAJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1BIWV9BRERSLCByZWcpOwogCiAJLyogdHJhbnNtaXQgY29udHJvbCAqLwpAQCAtNzIxLDcgKzc1Myw3IEBACiB7CiAJc3RydWN0IHNreTJfdHhfbGUgKmxlID0gc2t5Mi0+dHhfbGUgKyBza3kyLT50eF9wcm9kOwogCi0Jc2t5Mi0+dHhfcHJvZCA9IChza3kyLT50eF9wcm9kICsgMSkgJSBUWF9SSU5HX1NJWkU7CisJc2t5Mi0+dHhfcHJvZCA9IFJJTkdfTkVYVChza3kyLT50eF9wcm9kLCBUWF9SSU5HX1NJWkUpOwogCXJldHVybiBsZTsKIH0KIApAQCAtNzM3LDcgKzc2OSw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza3kyX3J4X2xlICpza3kyX25leHRfcngoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKIHsKIAlzdHJ1Y3Qgc2t5Ml9yeF9sZSAqbGUgPSBza3kyLT5yeF9sZSArIHNreTItPnJ4X3B1dDsKLQlza3kyLT5yeF9wdXQgPSAoc2t5Mi0+cnhfcHV0ICsgMSkgJSBSWF9MRV9TSVpFOworCXNreTItPnJ4X3B1dCA9IFJJTkdfTkVYVChza3kyLT5yeF9wdXQsIFJYX0xFX1NJWkUpOwogCXJldHVybiBsZTsKIH0KIApAQCAtOTI3LDggKzk1OSw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBSWF9TS0JfQUxJR04sIGdmcF9tYXNrKTsKIAlpZiAobGlrZWx5KHNrYikpIHsKIAkJdW5zaWduZWQgbG9uZyBwCT0gKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YTsKLQkJc2tiX3Jlc2VydmUoc2tiLAotCQkJKChwICsgUlhfU0tCX0FMSUdOIC0gMSkgJiB+KFJYX1NLQl9BTElHTiAtIDEpKSAtIHApOworCQlza2JfcmVzZXJ2ZShza2IsIEFMSUdOKHAsIFJYX1NLQl9BTElHTikgLSBwKTsKIAl9CiAKIAlyZXR1cm4gc2tiOwpAQCAtOTQ1LDYgKzk3Niw3IEBACiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJdW5zaWduZWQgcnhxID0gcnhxYWRkcltza3kyLT5wb3J0XTsKIAlpbnQgaTsKKwl1bnNpZ25lZCB0aHJlc2g7CiAKIAlza3kyLT5yeF9wdXQgPSBza3kyLT5yeF9uZXh0ID0gMDsKIAlza3kyX3FzZXQoaHcsIHJ4cSk7CkBAIC05NjksOSArMTAwMSwyMSBAQAogCQlza3kyX3J4X2FkZChza3kyLCByZS0+bWFwYWRkcik7CiAJfQogCi0gCS8qIFRydW5jYXRlIG92ZXJzaXplIGZyYW1lcyAqLwotIAlza3kyX3dyaXRlMTYoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfVFJfVEhSKSwgc2t5Mi0+cnhfYnVmc2l6ZSAtIDgpOwotIAlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVFJVTkNfT04pOworCisJLyoKKwkgKiBUaGUgcmVjZWl2ZXIgaGFuZ3MgaWYgaXQgcmVjZWl2ZXMgZnJhbWVzIGxhcmdlciB0aGFuIHRoZQorCSAqIHBhY2tldCBidWZmZXIuIEFzIGEgd29ya2Fyb3VuZCwgdHJ1bmNhdGUgb3ZlcnNpemUgZnJhbWVzLCBidXQKKwkgKiB0aGUgcmVnaXN0ZXIgaXMgbGltaXRlZCB0byA5IGJpdHMsIHNvIGlmIHlvdSBkbyBmcmFtZXMgPiAyMDUyCisJICogeW91IGJldHRlciBnZXQgdGhlIE1UVSByaWdodCEKKwkgKi8KKwl0aHJlc2ggPSAoc2t5Mi0+cnhfYnVmc2l6ZSAtIDgpIC8gc2l6ZW9mKHUzMik7CisJaWYgKHRocmVzaCA+IDB4MWZmKQorCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVFJVTkNfT0ZGKTsKKwllbHNlIHsKKwkJc2t5Ml93cml0ZTE2KGh3LCBTS19SRUcoc2t5Mi0+cG9ydCwgUlhfR01GX1RSX1RIUiksIHRocmVzaCk7CisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHNreTItPnBvcnQsIFJYX0dNRl9DVFJMX1QpLCBSWF9UUlVOQ19PTik7CisJfQorCiAKIAkvKiBUZWxsIGNoaXAgYWJvdXQgYXZhaWxhYmxlIGJ1ZmZlcnMgKi8KIAlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHJ4cSwgUFJFRl9VTklUX1BVVF9JRFgpLCBza3kyLT5yeF9wdXQpOwpAQCAtOTg4LDcgKzEwMzIsMjUgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKIAl1MzIgcmFtc2l6ZSwgcnhzcGFjZSwgaW1hc2s7Ci0JaW50IGVyciA9IC1FTk9NRU07CisJaW50IGNhcCwgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBody0+ZGV2W3NreTItPnBvcnReMV07CisKKwkvKgorIAkgKiBPbiBkdWFsIHBvcnQgUENJLVggY2FyZCwgdGhlcmUgaXMgYW4gcHJvYmxlbSB3aGVyZSBzdGF0dXMKKwkgKiBjYW4gYmUgcmVjZWl2ZWQgb3V0IG9mIG9yZGVyIGR1ZSB0byBzcGxpdCB0cmFuc2FjdGlvbnMKKwkgKi8KKwlpZiAob3RoZXJkZXYgJiYgbmV0aWZfcnVubmluZyhvdGhlcmRldikgJiYKKyAJICAgIChjYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGh3LT5wZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpKSkgeworIAkJc3RydWN0IHNreTJfcG9ydCAqb3NreTIgPSBuZXRkZXZfcHJpdihvdGhlcmRldik7CisgCQl1MTYgY21kOworCisgCQljbWQgPSBza3kyX3BjaV9yZWFkMTYoaHcsIGNhcCArIFBDSV9YX0NNRCk7CisgCQljbWQgJj0gflBDSV9YX0NNRF9NQVhfU1BMSVQ7CisgCQlza3kyX3BjaV93cml0ZTE2KGh3LCBjYXAgKyBQQ0lfWF9DTUQsIGNtZCk7CisKKyAJCXNreTItPnJ4X2NzdW0gPSAwOworIAkJb3NreTItPnJ4X2NzdW0gPSAwOworIAl9CiAKIAlpZiAobmV0aWZfbXNnX2lmdXAoc2t5MikpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTA1Myw3ICsxMTE1LDcgQEAKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gcGh5L21hYyBmb3IgcG9ydCAqLwogCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwotCWltYXNrIHw9IChwb3J0ID09IDApID8gWTJfSVNfUE9SVF8xIDogWTJfSVNfUE9SVF8yOworCWltYXNrIHw9IHBvcnRpcnFfbXNrW3BvcnRdOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCiAJcmV0dXJuIDA7CkBAIC0xMDgxLDcgKzExNDMsNyBAQAogLyogTW9kdWxhciBzdWJ0cmFjdGlvbiBpbiByaW5nICovCiBzdGF0aWMgaW5saW5lIGludCB0eF9kaXN0KHVuc2lnbmVkIHRhaWwsIHVuc2lnbmVkIGhlYWQpCiB7Ci0JcmV0dXJuIChoZWFkIC0gdGFpbCkgJSBUWF9SSU5HX1NJWkU7CisJcmV0dXJuIChoZWFkIC0gdGFpbCkgJiAoVFhfUklOR19TSVpFIC0gMSk7CiB9CiAKIC8qIE51bWJlciBvZiBsaXN0IGVsZW1lbnRzIGF2YWlsYWJsZSBmb3IgbmV4dCB0eCAqLwpAQCAtMTI1OCw3ICsxMzIwLDcgQEAKIAkJbGUtPm9wY29kZSA9IE9QX0JVRkZFUiB8IEhXX09XTkVSOwogCiAJCWZyZSA9IHNreTItPnR4X3JpbmcKLQkJICAgICsgKChyZSAtIHNreTItPnR4X3JpbmcpICsgaSArIDEpICUgVFhfUklOR19TSVpFOworCQkgICAgKyBSSU5HX05FWFQoKHJlIC0gc2t5Mi0+dHhfcmluZykgKyBpLCBUWF9SSU5HX1NJWkUpOwogCQlwY2lfdW5tYXBfYWRkcl9zZXQoZnJlLCBtYXBhZGRyLCBtYXBwaW5nKTsKIAl9CiAKQEAgLTEzMTgsNyArMTM4MCw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgewogCQkJc3RydWN0IHR4X3JpbmdfaW5mbyAqZnJlOwotCQkJZnJlID0gc2t5Mi0+dHhfcmluZyArIChwdXQgKyBpICsgMSkgJSBUWF9SSU5HX1NJWkU7CisJCQlmcmUgPSBza3kyLT50eF9yaW5nICsgUklOR19ORVhUKHB1dCArIGksIFRYX1JJTkdfU0laRSk7CiAJCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBwY2lfdW5tYXBfYWRkcihmcmUsIG1hcGFkZHIpLAogCQkJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCiAJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTQwNCw3ICsxNDY2LDcgQEAKIAogCS8qIERpc2FibGUgcG9ydCBJUlEgKi8KIAlpbWFzayA9IHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKLQlpbWFzayAmPSB+KHNreTItPnBvcnQgPT0gMCkgPyBZMl9JU19QT1JUXzEgOiBZMl9JU19QT1JUXzI7CisJaW1hc2sgJj0gfnBvcnRpcnFfbXNrW3BvcnRdOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCiAJLyogdHVybiBvZmYgTEVEJ3MgKi8KQEAgLTE1MDEsMTcgKzE1NjMsMjYgQEAKIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIExOS19MRURfUkVHKSwKIAkJICAgIExJTktMRURfT04gfCBMSU5LTEVEX0JMSU5LX09GRiB8IExJTktMRURfTElOS1NZTkNfT0ZGKTsKIAotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMKSB7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgfHwgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSB7CiAJCXUxNiBwZyA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSKTsKKwkJdTE2IGxlZCA9IFBIWV9NX0xFRENfTE9TX0NUUkwoMSk7CS8qIGxpbmsgYWN0aXZlICovCisKKwkJc3dpdGNoKHNreTItPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTA6CisJCQlsZWQgfD0gUEhZX01fTEVEQ19JTklUX0NUUkwoNyk7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzEwMDoKKwkJCWxlZCB8PSBQSFlfTV9MRURDX1NUQTFfQ1RSTCg3KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCWxlZCB8PSBQSFlfTV9MRURDX1NUQTBfQ1RSTCg3KTsKKwkJCWJyZWFrOworCQl9CiAKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAzKTsKLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgUEhZX01fTEVEQ19MT1NfQ1RSTCgxKSB8CS8qIExJTksvQUNUICovCi0JCQkgICAgIFBIWV9NX0xFRENfSU5JVF9DVFJMKHNreTItPnNwZWVkID09Ci0JCQkJCQkgIFNQRUVEXzEwID8gNyA6IDApIHwKLQkJCSAgICAgUEhZX01fTEVEQ19TVEExX0NUUkwoc2t5Mi0+c3BlZWQgPT0KLQkJCQkJCSAgU1BFRURfMTAwID8gNyA6IDApIHwKLQkJCSAgICAgUEhZX01fTEVEQ19TVEEwX0NUUkwoc2t5Mi0+c3BlZWQgPT0KLQkJCQkJCSAgU1BFRURfMTAwMCA/IDcgOiAwKSk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGxlZCk7CiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgcGcpOwogCX0KIApAQCAtMTU4Niw3ICsxNjU3LDcgQEAKIAlza3kyLT5zcGVlZCA9IHNreTJfcGh5X3NwZWVkKGh3LCBhdXgpOwogCiAJLyogUGF1c2UgYml0cyBhcmUgb2Zmc2V0ICg5Li44KSAqLwotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMKQorCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMIHx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKIAkJYXV4ID4+PSA2OwogCiAJc2t5Mi0+cnhfcGF1c2UgPSAoYXV4ICYgUEhZX01fUFNfUlhfUF9FTikgIT0gMDsKQEAgLTE2ODgsMTMgKzE3NTksMTIgQEAKIH0KIAogCi0jZGVmaW5lIHJvdW5kdXAoeCwgeSkgICAoKCgoeCkrKCh5KS0xKSkvKHkpKSooeSkpCiAvKiBXYW50IHJlY2VpdmUgYnVmZmVyIHNpemUgdG8gYmUgbXVsdGlwbGUgb2YgNjQgYml0cwogICogYW5kIGluY2wgcm9vbSBmb3IgdmxhbiBhbmQgdHJ1bmNhdGlvbgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNreTJfYnVmX3NpemUoaW50IG10dSkKIHsKLQlyZXR1cm4gcm91bmR1cChtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiwgOCkgKyA4OworCXJldHVybiBBTElHTihtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiwgOCkgKyA4OwogfQogCiBzdGF0aWMgaW50IHNreTJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKQEAgLTE4NTksMzkgKzE5MjksMzggQEAKIAl9CiB9CiAKKy8qIElzIHN0YXR1cyByaW5nIGVtcHR5IG9yIGlzIHRoZXJlIG1vcmUgdG8gZG8/ICovCitzdGF0aWMgaW5saW5lIGludCBza3kyX21vcmVfd29yayhjb25zdCBzdHJ1Y3Qgc2t5Ml9odyAqaHcpCit7CisJcmV0dXJuIChody0+c3RfaWR4ICE9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpKTsKK30KKwogLyogUHJvY2VzcyBzdGF0dXMgcmVzcG9uc2UgcmluZyAqLwogc3RhdGljIGludCBza3kyX3N0YXR1c19pbnRyKHN0cnVjdCBza3kyX2h3ICpodywgaW50IHRvX2RvKQogewogCWludCB3b3JrX2RvbmUgPSAwOworCXUxNiBod2lkeCA9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpOwogCiAJcm1iKCk7CiAKLQlmb3IoOzspIHsKKwl3aGlsZSAoaHctPnN0X2lkeCAhPSBod2lkeCkgewogCQlzdHJ1Y3Qgc2t5Ml9zdGF0dXNfbGUgKmxlICA9IGh3LT5zdF9sZSArIGh3LT5zdF9pZHg7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJCXN0cnVjdCBza3kyX3BvcnQgKnNreTI7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXUzMiBzdGF0dXM7CiAJCXUxNiBsZW5ndGg7Ci0JCXU4ICBsaW5rLCBvcGNvZGU7CiAKLQkJb3Bjb2RlID0gbGUtPm9wY29kZTsKLQkJaWYgKCFvcGNvZGUpCi0JCQlicmVhazsKLQkJb3Bjb2RlICY9IH5IV19PV05FUjsKKwkJaHctPnN0X2lkeCA9IFJJTkdfTkVYVChody0+c3RfaWR4LCBTVEFUVVNfUklOR19TSVpFKTsKIAotCQlody0+c3RfaWR4ID0gKGh3LT5zdF9pZHggKyAxKSAlIFNUQVRVU19SSU5HX1NJWkU7Ci0JCWxlLT5vcGNvZGUgPSAwOwotCi0JCWxpbmsgPSBsZS0+bGluazsKLQkJQlVHX09OKGxpbmsgPj0gMik7Ci0JCWRldiA9IGh3LT5kZXZbbGlua107CisJCUJVR19PTihsZS0+bGluayA+PSAyKTsKKwkJZGV2ID0gaHctPmRldltsZS0+bGlua107CiAKIAkJc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJCWxlbmd0aCA9IGxlLT5sZW5ndGg7CiAJCXN0YXR1cyA9IGxlLT5zdGF0dXM7CiAKLQkJc3dpdGNoIChvcGNvZGUpIHsKKwkJc3dpdGNoIChsZS0+b3Bjb2RlICYgfkhXX09XTkVSKSB7CiAJCWNhc2UgT1BfUlhTVEFUOgogCQkJc2tiID0gc2t5Ml9yZWNlaXZlKHNreTIsIGxlbmd0aCwgc3RhdHVzKTsKIAkJCWlmICghc2tiKQpAQCAtMTkzMSw3ICsyMDAwLDggQEAKIAogCQljYXNlIE9QX1RYSU5ERVhMRToKIAkJCS8qIFRYIGluZGV4IHJlcG9ydHMgc3RhdHVzIGZvciBib3RoIHBvcnRzICovCi0JCQlza3kyX3R4X2RvbmUoaHctPmRldlswXSwgc3RhdHVzICYgMHhmZmZmKTsKKwkJCUJVSUxEX0JVR19PTihUWF9SSU5HX1NJWkUgPiAweDEwMDApOworCQkJc2t5Ml90eF9kb25lKGh3LT5kZXZbMF0sIHN0YXR1cyAmIDB4ZmZmKTsKIAkJCWlmIChody0+ZGV2WzFdKQogCQkJCXNreTJfdHhfZG9uZShody0+ZGV2WzFdLAogCQkJCSAgICAgKChzdGF0dXMgPj4gMjQpICYgMHhmZikKQEAgLTE5NDEsOCArMjAxMSw4IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkJICAgICAgICJ1bmtub3duIHN0YXR1cyBvcGNvZGUgMHgleFxuIiwgb3Bjb2RlKTsKLQkJCWJyZWFrOworCQkJCSAgICAgICAidW5rbm93biBzdGF0dXMgb3Bjb2RlIDB4JXhcbiIsIGxlLT5vcGNvZGUpOworCQkJZ290byBleGl0X2xvb3A7CiAJCX0KIAl9CiAKQEAgLTIwODgsNiArMjE1OCwyOCBAQAogCX0KIH0KIAorLyogSWYgaWRsZSB0aGVuIGZvcmNlIGEgZmFrZSBzb2Z0IE5BUEkgcG9sbCBvbmNlIGEgc2Vjb25kCisgKiB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBzaGFyaW5nIGFuIGVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNreTJfaWRsZV9zdGFydChzdHJ1Y3Qgc2t5Ml9odyAqaHcpCit7CisJaWYgKGlkbGVfdGltZW91dCA+IDApCisJCW1vZF90aW1lcigmaHctPmlkbGVfdGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlkbGVfdGltZW91dCkpOworfQorCitzdGF0aWMgdm9pZCBza3kyX2lkbGUodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gKHN0cnVjdCBza3kyX2h3ICopIGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldlswXTsKKworCWlmIChfX25ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KSkKKwkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYpOworCisJbW9kX3RpbWVyKCZody0+aWRsZV90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7Cit9CisKKwogc3RhdGljIGludCBza3kyX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldjAsIGludCAqYnVkZ2V0KQogewogCXN0cnVjdCBza3kyX2h3ICpodyA9ICgoc3RydWN0IHNreTJfcG9ydCAqKSBuZXRkZXZfcHJpdihkZXYwKSktPmh3OwpAQCAtMjA5NSw0OSArMjE4Nyw0OSBAQAogCWludCB3b3JrX2RvbmUgPSAwOwogCXUzMiBzdGF0dXMgPSBza3kyX3JlYWQzMihodywgQjBfWTJfU1BfRUlTUik7CiAKLQlpZiAodW5saWtlbHkoc3RhdHVzICYgflkyX0lTX1NUQVRfQk1VKSkgewotCQlpZiAoc3RhdHVzICYgWTJfSVNfSFdfRVJSKQotCQkJc2t5Ml9od19pbnRyKGh3KTsKKwlpZiAoIX5zdGF0dXMpCisJCWdvdG8gb3V0OwogCi0JCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfUEhZMSkKLQkJCXNreTJfcGh5X2ludHIoaHcsIDApOworCWlmIChzdGF0dXMgJiBZMl9JU19IV19FUlIpCisJCXNreTJfaHdfaW50cihodyk7CiAKLQkJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9QSFkyKQotCQkJc2t5Ml9waHlfaW50cihodywgMSk7CisJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9QSFkxKQorCQlza3kyX3BoeV9pbnRyKGh3LCAwKTsKIAotCQlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX01BQzEpCi0JCQlza3kyX21hY19pbnRyKGh3LCAwKTsKKwlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX1BIWTIpCisJCXNreTJfcGh5X2ludHIoaHcsIDEpOwogCi0JCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfTUFDMikKLQkJCXNreTJfbWFjX2ludHIoaHcsIDEpOworCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfTUFDMSkKKwkJc2t5Ml9tYWNfaW50cihodywgMCk7CiAKLQkJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19SWDEpCi0JCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDAsICJyZWNlaXZlIiwgWTJfSVNfQ0hLX1JYMSk7CisJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9NQUMyKQorCQlza3kyX21hY19pbnRyKGh3LCAxKTsKIAotCQlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1JYMikKLQkJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMSwgInJlY2VpdmUiLCBZMl9JU19DSEtfUlgyKTsKKwlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1JYMSkKKwkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAwLCAicmVjZWl2ZSIsIFkyX0lTX0NIS19SWDEpOwogCi0JCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMSkKLQkJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMCwgInRyYW5zbWl0IiwgWTJfSVNfQ0hLX1RYQTEpOworCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfUlgyKQorCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDEsICJyZWNlaXZlIiwgWTJfSVNfQ0hLX1JYMik7CiAKLQkJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19UWEEyKQotCQkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAxLCAidHJhbnNtaXQiLCBZMl9JU19DSEtfVFhBMik7Ci0JfQorCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMSkKKwkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAwLCAidHJhbnNtaXQiLCBZMl9JU19DSEtfVFhBMSk7CiAKLQlpZiAoc3RhdHVzICYgWTJfSVNfU1RBVF9CTVUpIHsKLQkJd29ya19kb25lID0gc2t5Ml9zdGF0dXNfaW50cihodywgd29ya19saW1pdCk7Ci0JCSpidWRnZXQgLT0gd29ya19kb25lOwotCQlkZXYwLT5xdW90YSAtPSB3b3JrX2RvbmU7CisJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19UWEEyKQorCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDEsICJ0cmFuc21pdCIsIFkyX0lTX0NIS19UWEEyKTsKIAotCQlpZiAod29ya19kb25lID49IHdvcmtfbGltaXQpCi0JCQlyZXR1cm4gMTsKKwl3b3JrX2RvbmUgPSBza3kyX3N0YXR1c19pbnRyKGh3LCB3b3JrX2xpbWl0KTsKKwkqYnVkZ2V0IC09IHdvcmtfZG9uZTsKKwlkZXYwLT5xdW90YSAtPSB3b3JrX2RvbmU7CiAKKwlpZiAoc3RhdHVzICYgWTJfSVNfU1RBVF9CTVUpCiAJCXNreTJfd3JpdGUzMihodywgU1RBVF9DVFJMLCBTQ19TVEFUX0NMUl9JUlEpOwotCX0KIAorCWlmIChza3kyX21vcmVfd29yayhodykpCisJCXJldHVybiAxOworb3V0OgogCW5ldGlmX3J4X2NvbXBsZXRlKGRldjApOwogCi0Jc3RhdHVzID0gc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOworCXNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9MSVNSKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE1NSw4ICsyMjQ3LDYgQEAKIAlwcmVmZXRjaCgmaHctPnN0X2xlW2h3LT5zdF9pZHhdKTsKIAlpZiAobGlrZWx5KF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYwKSkpCiAJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2MCk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImlycSByYWNlIGRldGVjdGVkXG4iKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIxOTUsNyArMjI4NSw3IEBACiB9CiAKIAotc3RhdGljIGludCBza3kyX3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNreTJfcmVzZXQoc3RydWN0IHNreTJfaHcgKmh3KQogewogCXUxNiBzdGF0dXM7CiAJdTggdDgsIHBtZF90eXBlOwpAQCAtMjIyMCwxMyArMjMxMCw2IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQkvKiBUaGlzIGNoaXAgaXMgbmV3IGFuZCBub3QgdGVzdGVkIHlldCAqLwotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKLQkJcHJfaW5mbyhQRlggIiVzOiBpcyBhIHZlcnNpb24gb2YgWXVrb24gMiBjaGlwc2V0IHRoYXQgaGFzIG5vdCBiZWVuIHRlc3RlZCB5ZXQuXG4iLAotCQkJcGNpX25hbWUoaHctPnBkZXYpKTsKLQkJcHJfaW5mbygiUGxlYXNlIHJlcG9ydCBzdWNjZXNzL2ZhaWx1cmUgdG8gbWFpbnRhaW5lciA8c2hlbW1pbmdlckBvc2RsLm9yZz5cbiIpOwotCX0KLQogCS8qIGRpc2FibGUgQVNGICovCiAJaWYgKGh3LT5jaGlwX2lkIDw9IENISVBfSURfWVVLT05fRUMpIHsKIAkJc2t5Ml93cml0ZTgoaHcsIEIyOF9ZMl9BU0ZfU1RBVF9DTUQsIFkyX0FTRl9SRVNFVCk7CkBAIC0zMDMwLDEyICszMTEzLDcgQEAKIAlza3kyLT5kdXBsZXggPSAtMTsKIAlza3kyLT5zcGVlZCA9IC0xOwogCXNreTItPmFkdmVydGlzaW5nID0gc2t5Ml9zdXBwb3J0ZWRfbW9kZXMoaHcpOwotCi0JLyogUmVjZWl2ZSBjaGVja3N1bSBkaXNhYmxlZCBmb3IgWXVrb24gWEwKLQkgKiBiZWNhdXNlIG9mIG9ic2VydmVkIHByb2JsZW1zIHdpdGggaW5jb3JyZWN0Ci0JICogdmFsdWVzIHdoZW4gbXVsdGlwbGUgcGFja2V0cyBhcmUgcmVjZWl2ZWQgaW4gb25lIGludGVycnVwdAotCSAqLwotCXNreTItPnJ4X2NzdW0gPSAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCk7CisJc2t5Mi0+cnhfY3N1bSA9IDE7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2t5Mi0+cGh5X2xvY2spOwogCXNreTItPnR4X3BlbmRpbmcgPSBUWF9ERUZfUEVORElORzsKQEAgLTMyNzgsNiArMzM1Niw5IEBACiAKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOwogCisJc2V0dXBfdGltZXIoJmh3LT5pZGxlX3RpbWVyLCBza3kyX2lkbGUsICh1bnNpZ25lZCBsb25nKSBodyk7CisJc2t5Ml9pZGxlX3N0YXJ0KGh3KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CiAKIAlyZXR1cm4gMDsKQEAgLTMzMTMsMTMgKzMzOTQsMTcgQEAKIAlpZiAoIWh3KQogCQlyZXR1cm47CiAKKwlkZWxfdGltZXJfc3luYygmaHctPmlkbGVfdGltZXIpOworCisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlzeW5jaHJvbml6ZV9pcnEoaHctPnBkZXYtPmlycSk7CisKIAlkZXYwID0gaHctPmRldlswXTsKIAlkZXYxID0gaHctPmRldlsxXTsKIAlpZiAoZGV2MSkKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2MSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2MCk7CiAKLQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOwogCXNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBQQ0lfRDNob3QpOwogCXNreTJfd3JpdGUxNihodywgQjBfWTJMRUQsIExFRF9TVEFUX09GRik7CiAJc2t5Ml93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9TRVQpOwpAQCAtMzM0NSw4ICszNDMwLDE0IEBACiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpOworCXBjaV9wb3dlcl90IHBzdGF0ZSA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCWlmICghKHBzdGF0ZSA9PSBQQ0lfRDNob3QgfHwgcHN0YXRlID09IFBDSV9EM2NvbGQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlbF90aW1lcl9zeW5jKCZody0+aWRsZV90aW1lcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CiAKIAkJaWYgKGRldikgewpAQCAtMzM1OCw3ICszNDQ5LDEwIEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBwc3RhdGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNreTJfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzM2OCwxNSArMzQ2MiwxNSBAQAogCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7Ci0JZXJyID0gc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIFBDSV9EMCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIFBDSV9EMCk7CiAKIAllcnIgPSBza3kyX3Jlc2V0KGh3KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwogCQlpZiAoZGV2ICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwpAQCAtMzM4NSwxMCArMzQ3OSwxMiBAQAogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb3VsZCBub3QgdXA6ICVkXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJCQkJZGV2X2Nsb3NlKGRldik7Ci0JCQkJYnJlYWs7CisJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KIAl9CisKKwlza3kyX2lkbGVfc3RhcnQoaHcpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmggYi9kcml2ZXJzL25ldC9za3kyLmgKaW5kZXggNjI1MzJiNC4uOGEwYmM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMjE0LDYgKzIxNCw4IEBACiBlbnVtIHsKIAlZMl9WTUFJTl9BVkFJTAk9IDE8PDE3LC8qIFZNQUlOIGF2YWlsYWJsZSAoWVVLT04tMiBvbmx5KSAqLwogCVkyX1ZBVVhfQVZBSUwJPSAxPDwxNiwvKiBWQVVYIGF2YWlsYWJsZSAoWVVLT04tMiBvbmx5KSAqLworCVkyX0hXX1dPTF9PTgk9IDE8PDE1LC8qIEhXIFdPTCBPbiAgKFl1a29uLUVDIFVsdHJhIEExIG9ubHkpICovCisJWTJfSFdfV09MX09GRgk9IDE8PDE0LC8qIEhXIFdPTCBPbiAgKFl1a29uLUVDIFVsdHJhIEExIG9ubHkpICovCiAJWTJfQVNGX0VOQUJMRQk9IDE8PDEzLC8qIEFTRiBVbml0IEVuYWJsZSAoWVVLT04tMiBvbmx5KSAqLwogCVkyX0FTRl9ESVNBQkxFCT0gMTw8MTIsLyogQVNGIFVuaXQgRGlzYWJsZSAoWVVLT04tMiBvbmx5KSAqLwogCVkyX0NMS19SVU5fRU5BCT0gMTw8MTEsLyogQ0xLX1JVTiBFbmFibGUgIChZVUtPTi0yIG9ubHkpICovCkBAIC0zNzgsNiArMzgwLDkgQEAKIAlDSElQX1JFVl9ZVV9FQ19BMSAgICA9IDAsICAvKiBDaGlwIFJldi4gZm9yIFl1a29uLUVDIEExL0EwICovCiAJQ0hJUF9SRVZfWVVfRUNfQTIgICAgPSAxLCAgLyogQ2hpcCBSZXYuIGZvciBZdWtvbi1FQyBBMiAqLwogCUNISVBfUkVWX1lVX0VDX0EzICAgID0gMiwgIC8qIENoaXAgUmV2LiBmb3IgWXVrb24tRUMgQTMgKi8KKworCUNISVBfUkVWX1lVX0VDX1VfQTAgID0gMCwKKwlDSElQX1JFVl9ZVV9FQ19VX0ExICA9IDEsCiB9OwogCiAvKglCMl9ZMl9DTEtfR0FURQkgOCBiaXQJQ2xvY2sgR2F0aW5nIChZdWtvbi0yIG9ubHkpICovCkBAIC0xMzc1LDcgKzEzODAsNyBAQAogCUdNX1BIWV9BRERSCT0gMHgwMDg4LAkvKiAxNiBiaXQgci93CUdQSFkgQWRkcmVzcyBSZWdpc3RlciAqLwogLyogTUlCIENvdW50ZXJzICovCiAJR01fTUlCX0NOVF9CQVNFCT0gMHgwMTAwLAkvKiBCYXNlIEFkZHJlc3Mgb2YgTUlCIENvdW50ZXJzICovCi0JR01fTUlCX0NOVF9TSVpFCT0gMjU2LAorCUdNX01JQl9DTlRfRU5ECT0gMHgwMjVDLAkvKiBMYXN0IE1JQiBjb3VudGVyICovCiB9OwogCiAKQEAgLTE4ODAsNiArMTg4NSw4IEBACiAJc3RydWN0IHNreTJfc3RhdHVzX2xlICpzdF9sZTsKIAl1MzIJCSAgICAgc3RfaWR4OwogCWRtYV9hZGRyX3QgICAJICAgICBzdF9kbWE7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgICBpZGxlX3RpbWVyOwogCWludAkJICAgICBtc2lfZGV0ZWN0ZWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgbXNpX3dhaXQ7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDQzZjVlODYuLjM5NDMzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTE2NTIsNiArMTY1Miw4IEBACiAJCXsgU1BJREVSX05FVF9HRlRSRVNUUlQsIFNQSURFUl9ORVRfUkVTVEFSVF9WQUxVRSB9LAogCiAJCXsgU1BJREVSX05FVF9HTVJXT0xDVFJMLCAwIH0sCisJCXsgU1BJREVSX05FVF9HVEVTVE1ELCAweDEwMDAwMDAwIH0sCisJCXsgU1BJREVSX05FVF9HVFRRTVNLLCAweDAwNDAwMDQwIH0sCiAJCXsgU1BJREVSX05FVF9HVEVTVE1ELCAwIH0sCiAKIAkJeyBTUElERVJfTkVUX0dNQUNJTlRFTiwgMCB9LApAQCAtMTc5MiwxNSArMTc5NCw3IEBACiAJaWYgKHBoeS0+ZGVmLT5vcHMtPnNldHVwX2ZvcmNlZCkKIAkJcGh5LT5kZWYtPm9wcy0+c2V0dXBfZm9yY2VkKHBoeSwgU1BFRURfMTAwMCwgRFVQTEVYX0ZVTEwpOwogCi0JLyogdGhlIGZvbGxvd2luZyB0d28gd3JpdGVzIGNvdWxkIGJlIG1vdmVkIHRvIHN1bmdlbV9waHkuYyAqLwotCS8qIGVuYWJsZSBmaWJlciBtb2RlICovCi0Jc3BpZGVyX25ldF93cml0ZV9waHkoY2FyZC0+bmV0ZGV2LCAxLCBNSUlfTkNPTkZJRywgMHg5MDIwKTsKLQkvKiBMRURzIGFjdGl2ZSBpbiBib3RoIG1vZGVzLCBhdXRvc2Vuc2UgcHJpbyA9IGZpYmVyICovCi0Jc3BpZGVyX25ldF93cml0ZV9waHkoY2FyZC0+bmV0ZGV2LCAxLCBNSUlfTkNPTkZJRywgMHg5NDVmKTsKLQotCS8qIHN3aXRjaCBvZmYgZmlicmUgYXV0b25lZyAqLwotCXNwaWRlcl9uZXRfd3JpdGVfcGh5KGNhcmQtPm5ldGRldiwgMSwgTUlJX05DT05GSUcsIDB4ZmMwMSk7Ci0Jc3BpZGVyX25ldF93cml0ZV9waHkoY2FyZC0+bmV0ZGV2LCAxLCAweDBiLCAweDAwMDQpOworCXBoeS0+ZGVmLT5vcHMtPmVuYWJsZV9maWJlcihwaHkpOwogCiAJcGh5LT5kZWYtPm9wcy0+cmVhZF9saW5rKHBoeSk7CiAJcHJfaW5mbygiRm91bmQgJXMgd2l0aCAlaSBNYnBzLCAlcy1kdXBsZXguXG4iLCBwaHktPmRlZi0+bmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaCBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaAppbmRleCA1OTIyYjUyLi4zYjhkOTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCkBAIC0xMjAsNiArMTIwLDggQEAKICNkZWZpbmUgU1BJREVSX05FVF9HTVJVQUZJTG5SCQkweDAwMDAwNTAwCiAjZGVmaW5lIFNQSURFUl9ORVRfR01SVUEwRklMMTVSCQkweDAwMDAwNTc4CiAKKyNkZWZpbmUgU1BJREVSX05FVF9HVFRRTVNLCQkweDAwMDAwOTM0CisKIC8qIFJYIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycywgYWxsIDB4MDAwMDBhLi4gYXJlIGZvciBETUEgY29udHJvbGxlciBBLAogICogMHgwMDAwMGIuLiBmb3IgRE1BIGNvbnRyb2xsZXIgQiwgZXRjLiAqLwogI2RlZmluZSBTUElERVJfTkVUX0dEQURDSEEJCTB4MDAwMDBhMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IDM1YjE4MDUuLjliNzgwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIEtFUk5fSU5GTyAic3RhcmZpcmUuYzp2MS4wMyA3LzI2LzIwMDAgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIEtFUk5fSU5GTyAiICh1bm9mZmljaWFsIDIuMi8yLjQga2VybmVsIHBvcnQsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOwogCkBAIC0yMTIyLDggKzIxMjIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IGNiMGFiYTkuLmIyZGRkNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJjbTU0MTFfc3VzcGVuZChzdHJ1Y3QgbWlpX3BoeSogcGh5KQorc3RhdGljIGludCBnZW5lcmljX3N1c3BlbmQoc3RydWN0IG1paV9waHkqIHBoeSkKIHsKIAlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CiAKQEAgLTMyOSw2ICszMjksMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBiY201NDIxX2VuYWJsZV9maWJlcihzdHJ1Y3QgbWlpX3BoeSogcGh5KQoreworCS8qIGVuYWJsZSBmaWJlciBtb2RlICovCisJcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4OTAyMCk7CisJLyogTEVEcyBhY3RpdmUgaW4gYm90aCBtb2RlcywgYXV0b3NlbnNlIHByaW8gPSBmaWJlciAqLworCXBoeV93cml0ZShwaHksIE1JSV9OQ09ORklHLCAweDk0NWYpOworCisJLyogc3dpdGNoIG9mZiBmaWJyZSBhdXRvbmVnICovCisJcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwMSk7CisJcGh5X3dyaXRlKHBoeSwgMHgwYiwgMHgwMDA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbTU0NjFfZW5hYmxlX2ZpYmVyKHN0cnVjdCBtaWlfcGh5KiBwaHkpCit7CisgICAgICAgIHBoeV93cml0ZShwaHksIE1JSV9OQ09ORklHLCAweGZjMGMpOworICAgICAgICBwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgMHg0MTQwKTsKKyAgICAgICAgcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwYik7CisJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIDB4MDE0MCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBiY201NHh4X3NldHVwX2FuZWcoc3RydWN0IG1paV9waHkgKnBoeSwgdTMyIGFkdmVydGlzZSkKIHsKIAl1MTYgY3RsLCBhZHY7CkBAIC03MzgsNyArNzYyLDcgQEAKIC8qIEJyb2FkY29tIEJDTSA1NDExICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTU0MTFfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDExX2luaXQsCi0JLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAogCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLApAQCAtNzU3LDExICs3ODEsMTIgQEAKIC8qIEJyb2FkY29tIEJDTSA1NDIxICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTU0MjFfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDIxX2luaXQsCi0JLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAogCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAogCS5yZWFkX2xpbmsJPSBiY201NHh4X3JlYWRfbGluaywKKwkuZW5hYmxlX2ZpYmVyICAgPSBiY201NDIxX2VuYWJsZV9maWJlciwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgYmNtNTQyMV9waHlfZGVmID0gewpAQCAtNzc2LDcgKzgwMSw3IEBACiAvKiBCcm9hZGNvbSBCQ00gNTQyMSBidWlsdC1pbiBLMiAqLwogc3RhdGljIHN0cnVjdCBtaWlfcGh5X29wcyBiY201NDIxazJfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDIxX2luaXQsCi0JLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAogCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLApAQCAtNzkyLDEwICs4MTcsMjkgQEAKIAkub3BzCQk9ICZiY201NDIxazJfcGh5X29wcwogfTsKIAorc3RhdGljIHN0cnVjdCBtaWlfcGh5X29wcyBiY201NDYxX3BoeV9vcHMgPSB7CisJLmluaXQJCT0gYmNtNTQyMV9pbml0LAorCS5zdXNwZW5kCT0gZ2VuZXJpY19zdXNwZW5kLAorCS5zZXR1cF9hbmVnCT0gYmNtNTR4eF9zZXR1cF9hbmVnLAorCS5zZXR1cF9mb3JjZWQJPSBiY201NHh4X3NldHVwX2ZvcmNlZCwKKwkucG9sbF9saW5rCT0gZ2VubWlpX3BvbGxfbGluaywKKwkucmVhZF9saW5rCT0gYmNtNTR4eF9yZWFkX2xpbmssCisJLmVuYWJsZV9maWJlciAgID0gYmNtNTQ2MV9lbmFibGVfZmliZXIsCit9OworCitzdGF0aWMgc3RydWN0IG1paV9waHlfZGVmIGJjbTU0NjFfcGh5X2RlZiA9IHsKKwkucGh5X2lkCQk9IDB4MDAyMDYwYzAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQkNNNTQ2MSIsCisJLmZlYXR1cmVzCT0gTUlJX0dCSVRfRkVBVFVSRVMsCisJLm1hZ2ljX2FuZWcJPSAxLAorCS5vcHMJCT0gJmJjbTU0NjFfcGh5X29wcworfTsKKwogLyogQnJvYWRjb20gQkNNIDU0NjIgYnVpbHQtaW4gVmVzdGEgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgYmNtNTQ2MlZfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDIxX2luaXQsCi0JLnN1c3BlbmQJPSBiY201NDExX3N1c3BlbmQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBiY201NHh4X3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IGJjbTU0eHhfc2V0dXBfZm9yY2VkLAogCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLApAQCAtODE2LDYgKzg2MCw3IEBACiAgKiB3b3VsZCBiZSB1c2VmdWwgaGVyZSkgLS1CZW5ILgogICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIG1hcnZlbGxfcGh5X29wcyA9IHsKKwkuc3VzcGVuZAk9IGdlbmVyaWNfc3VzcGVuZCwKIAkuc2V0dXBfYW5lZwk9IG1hcnZlbGxfc2V0dXBfYW5lZywKIAkuc2V0dXBfZm9yY2VkCT0gbWFydmVsbF9zZXR1cF9mb3JjZWQsCiAJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCkBAIC04NTYsNiArOTAxLDcgQEAKIAkmYmNtNTQxMV9waHlfZGVmLAogCSZiY201NDIxX3BoeV9kZWYsCiAJJmJjbTU0MjFrMl9waHlfZGVmLAorCSZiY201NDYxX3BoeV9kZWYsCiAJJmJjbTU0NjJWX3BoeV9kZWYsCiAJJm1hcnZlbGxfcGh5X2RlZiwKIAkmZ2VubWlpX3BoeV9kZWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmggYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmgKaW5kZXggNDMwNTQ0NC4uNjllMTI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaApAQCAtMTIsNiArMTIsNyBAQAogCWludAkJKCpzZXR1cF9mb3JjZWQpKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCBzcGVlZCwgaW50IGZkKTsKIAlpbnQJCSgqcG9sbF9saW5rKShzdHJ1Y3QgbWlpX3BoeSAqcGh5KTsKIAlpbnQJCSgqcmVhZF9saW5rKShzdHJ1Y3QgbWlpX3BoeSAqcGh5KTsKKwlpbnQJCSgqZW5hYmxlX2ZpYmVyKShzdHJ1Y3QgbWlpX3BoeSAqcGh5KTsKIH07CiAKIC8qIFN0cnVjdHVyZSB1c2VkIHRvIHN0YXRpY2FsbHkgZGVmaW5lIGFuIG1paS9naWkgYmFzZWQgUEhZICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDk2NGMwOTYuLjg2MmMyMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02OSw4ICs2OSw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjU1IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hciAyNywgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjU5IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bmUgOCwgMjAwNiIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC00OTcsMTggKzQ5NywxOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKLQlpZiAodHAtPndyaXRlMzIgIT0gdGczX3dyaXRlX2luZGlyZWN0X3JlZzMyKSB7Ci0JCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7Ci0JCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9EQVRBLCB2YWwpOwotCi0JCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCi0JCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOwotCX0gZWxzZSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TUkFNX1VTRV9DT05GSUcpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9EQVRBLCB2YWwpOwogCiAJCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7CisJfSBlbHNlIHsKKwkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKKwkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CisKKwkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KKwkJdHczMl9mKFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5pbmRpcmVjdF9sb2NrLCBmbGFncyk7CiB9CkBAIC01MTgsMTggKzUxOCwxOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKLQlpZiAodHAtPndyaXRlMzIgIT0gdGczX3dyaXRlX2luZGlyZWN0X3JlZzMyKSB7Ci0JCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7Ci0JCSp2YWwgPSB0cjMyKFRHM1BDSV9NRU1fV0lOX0RBVEEpOwotCi0JCS8qIEFsd2F5cyBsZWF2ZSB0aGlzIGFzIHplcm8uICovCi0JCXR3MzJfZihURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIDApOwotCX0gZWxzZSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TUkFNX1VTRV9DT05GSUcpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CiAKIAkJLyogQWx3YXlzIGxlYXZlIHRoaXMgYXMgemVyby4gKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKKwl9IGVsc2UgeworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOworCQkqdmFsID0gdHIzMihURzNQQ0lfTUVNX1dJTl9EQVRBKTsKKworCQkvKiBBbHdheXMgbGVhdmUgdGhpcyBhcyB6ZXJvLiAqLworCQl0dzMyX2YoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTk3NCw2ICs5NzQsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIHRnM19saW5rX3JlcG9ydChzdHJ1Y3QgdGczICopOworCiAvKiBUaGlzIHdpbGwgcmVzZXQgdGhlIHRpZ29uMyBQSFkgaWYgdGhlcmUgaXMgbm8gdmFsaWQKICAqIGxpbmsgdW5sZXNzIHRoZSBGT1JDRSBhcmd1bWVudCBpcyBub24temVyby4KICAqLwpAQCAtOTg3LDYgKzk4OSwxMSBAQAogCWlmIChlcnIgIT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChuZXRpZl9ydW5uaW5nKHRwLT5kZXYpICYmIG5ldGlmX2NhcnJpZXJfb2sodHAtPmRldikpIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYodHAtPmRldik7CisJCXRnM19saW5rX3JlcG9ydCh0cCk7CisJfQorCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAzIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1KSB7CkBAIC0xMDIzLDYgKzEwMzAsMTIgQEAKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDE0ZTIpOwogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDQwMCk7CiAJfQorCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX0pJVFRFUl9CVUcpIHsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDBjMDApOworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIDB4MDAwYSk7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgwMTBiKTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDA0MDApOworCX0KIAkvKiBTZXQgRXh0ZW5kZWQgcGFja2V0IGxlbmd0aCBiaXQgKGJpdCAxNCkgb24gYWxsIGNoaXBzIHRoYXQgKi8KIAkvKiBzdXBwb3J0IGp1bWJvIGZyYW1lcyAqLwogCWlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfSURfQkNNNTQwMSkgewpAQCAtMjk2Niw5ICsyOTc5LDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJpLT5za2I7CiAJCWludCBpOwogCi0JCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCi0JCQlCVUcoKTsKLQorCQlCVUdfT04oc2tiID09IE5VTEwpOwogCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LAogCQkJCSBwY2lfdW5tYXBfYWRkcihyaSwgbWFwcGluZyksCiAJCQkJIHNrYl9oZWFkbGVuKHNrYiksCkBAIC0yOTc5LDEyICsyOTkwLDEwIEBACiAJCXN3X2lkeCA9IE5FWFRfVFgoc3dfaWR4KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7Ci0JCQlpZiAodW5saWtlbHkoc3dfaWR4ID09IGh3X2lkeCkpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oc3dfaWR4ID09IGh3X2lkeCk7CiAKIAkJCXJpID0gJnRwLT50eF9idWZmZXJzW3N3X2lkeF07Ci0JCQlpZiAodW5saWtlbHkocmktPnNrYiAhPSBOVUxMKSkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTihyaS0+c2tiICE9IE5VTEwpOwogCiAJCQlwY2lfdW5tYXBfcGFnZSh0cC0+cGRldiwKIAkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIocmksIG1hcHBpbmcpLApAQCAtMzUzNSw3ICszNTQ0LDcgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTCgwKTsKIH0KIAotc3RhdGljIGludCB0ZzNfaW5pdF9odyhzdHJ1Y3QgdGczICopOworc3RhdGljIGludCB0ZzNfaW5pdF9odyhzdHJ1Y3QgdGczICosIGludCk7CiBzdGF0aWMgaW50IHRnM19oYWx0KHN0cnVjdCB0ZzMgKiwgaW50LCBpbnQpOwogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTM1NzEsNyArMzU4MCw3IEBACiAJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1JFU1RBUlRfVElNRVI7CiAKIAl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMCk7Ci0JdGczX2luaXRfaHcodHApOworCXRnM19pbml0X2h3KHRwLCAxKTsKIAogCXRnM19uZXRpZl9zdGFydCh0cCk7CiAKQEAgLTQwNDYsNyArNDA1NSw3IEBACiAKIAl0ZzNfc2V0X210dShkZXYsIHRwLCBuZXdfbXR1KTsKIAotCXRnM19pbml0X2h3KHRwKTsKKwl0ZzNfaW5pdF9odyh0cCwgMCk7CiAKIAl0ZzNfbmV0aWZfc3RhcnQodHApOwogCkBAIC00NDc2LDkgKzQ0ODUsOCBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM193cml0ZV9zaWdfcHJlX3Jlc2V0KHN0cnVjdCB0ZzMgKnRwLCBpbnQga2luZCkKIHsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkKLQkJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRklSTVdBUkVfTUJPWCwKLQkJCSAgICAgIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1hfTUFHSUMxKTsKKwl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLAorCQkgICAgICBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YX01BR0lDMSk7CiAKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRSkgewogCQlzd2l0Y2ggKGtpbmQpIHsKQEAgLTQ1NTksMTMgKzQ1NjcsMTIgQEAKIAl2b2lkICgqd3JpdGVfb3ApKHN0cnVjdCB0ZzMgKiwgdTMyLCB1MzIpOwogCWludCBpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkpIHsKLQkJdGczX252cmFtX2xvY2sodHApOwotCQkvKiBObyBtYXRjaGluZyB0ZzNfbnZyYW1fdW5sb2NrKCkgYWZ0ZXIgdGhpcyBiZWNhdXNlCi0JCSAqIGNoaXAgcmVzZXQgYmVsb3cgd2lsbCB1bmRvIHRoZSBudnJhbSBsb2NrLgotCQkgKi8KLQkJdHAtPm52cmFtX2xvY2tfY250ID0gMDsKLQl9CisJdGczX252cmFtX2xvY2sodHApOworCisJLyogTm8gbWF0Y2hpbmcgdGczX252cmFtX3VubG9jaygpIGFmdGVyIHRoaXMgYmVjYXVzZQorCSAqIGNoaXAgcmVzZXQgYmVsb3cgd2lsbCB1bmRvIHRoZSBudnJhbSBsb2NrLgorCSAqLworCXRwLT5udnJhbV9sb2NrX2NudCA9IDA7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTIgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKQEAgLTQ3MTgsMjAgKzQ3MjUsMjUgQEAKIAkJdHczMl9mKE1BQ19NT0RFLCAwKTsKIAl1ZGVsYXkoNDApOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkpIHsKLQkJLyogV2FpdCBmb3IgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUuICovCi0JCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewotCQkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLCAmdmFsKTsKLQkJCWlmICh2YWwgPT0gfk5JQ19TUkFNX0ZJUk1XQVJFX01CT1hfTUFHSUMxKQotCQkJCWJyZWFrOwotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlpZiAoaSA+PSAxMDAwMDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19yZXNldF9odyB0aW1lZCBvdXQgZm9yICVzLCAiCi0JCQkgICAgICAgImZpcm13YXJlIHdpbGwgbm90IHJlc3RhcnQgbWFnaWM9JTA4eFxuIiwKLQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB2YWwpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkvKiBXYWl0IGZvciBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKwkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLCAmdmFsKTsKKwkJaWYgKHZhbCA9PSB+TklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiBDaGlwIG1pZ2h0IG5vdCBiZSBmaXR0ZWQgd2l0aCBmaXJtYXJlLiAgU29tZSBTdW4gb25ib2FyZAorCSAqIHBhcnRzIGFyZSBjb25maWd1cmVkIGxpa2UgdGhhdC4gIFNvIGRvbid0IHNpZ25hbCB0aGUgdGltZW91dAorCSAqIG9mIHRoZSBhYm92ZSBsb29wIGFzIGFuIGVycm9yLCBidXQgZG8gcmVwb3J0IHRoZSBsYWNrIG9mCisJICogcnVubmluZyBmaXJtd2FyZSBvbmNlLgorCSAqLworCWlmIChpID49IDEwMDAwMCAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQpKSB7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEOworCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTm8gZmlybXdhcmUgcnVubmluZy5cbiIsCisJCSAgICAgICB0cC0+ZGV2LT5uYW1lKTsKIAl9CiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmCkBAIC00OTM1LDkgKzQ5NDcsOCBAQAogewogCWludCBpOwogCi0JaWYgKG9mZnNldCA9PSBUWF9DUFVfQkFTRSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQotCQlCVUcoKTsKKwlCVUdfT04ob2Zmc2V0ID09IFRYX0NQVV9CQVNFICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpOwogCiAJaWYgKG9mZnNldCA9PSBSWF9DUFVfQkFTRSkgewogCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewpAQCAtNTcyNCw5ICs1NzM1LDIzIEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7Ci0JX190ZzNfc2V0X21hY19hZGRyKHRwKTsKLQlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgeworCQkvKiBSZXNldCBjaGlwIHNvIHRoYXQgQVNGIGNhbiByZS1pbml0IGFueSBNQUMgYWRkcmVzc2VzIGl0CisJCSAqIG5lZWRzLgorCQkgKi8KKwkJdGczX25ldGlmX3N0b3AodHApOworCQl0ZzNfZnVsbF9sb2NrKHRwLCAxKTsKKworCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CisJCXRnM19pbml0X2h3KHRwLCAwKTsKKworCQl0ZzNfbmV0aWZfc3RhcnQodHApOworCQl0ZzNfZnVsbF91bmxvY2sodHApOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOworCQlfX3RnM19zZXRfbWFjX2FkZHIodHApOworCQlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNTc3Niw3ICs1ODAxLDcgQEAKIH0KIAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyBpbnQgdGczX3Jlc2V0X2h3KHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIGludCB0ZzNfcmVzZXRfaHcoc3RydWN0IHRnMyAqdHAsIGludCByZXNldF9waHkpCiB7CiAJdTMyIHZhbCwgcmRtYWNfbW9kZTsKIAlpbnQgaSwgZXJyLCBsaW1pdDsKQEAgLTU3OTEsNyArNTgxNiw3IEBACiAJCXRnM19hYm9ydF9odyh0cCwgMSk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykgJiYgcmVzZXRfcGh5KQogCQl0ZzNfcGh5X3Jlc2V0KHRwKTsKIAogCWVyciA9IHRnM19jaGlwX3Jlc2V0KHRwKTsKQEAgLTU4NDAsMTAgKzU4NjUsMTQgQEAKIAkJCSAgR1JDX01PREVfTk9fVFhfUEhEUl9DU1VNIHwKIAkJCSAgR1JDX01PREVfTk9fUlhfUEhEUl9DU1VNKTsKIAl0cC0+Z3JjX21vZGUgfD0gR1JDX01PREVfSE9TVF9TRU5EQkRTOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTk9fVFhfUFNFVURPX0NTVU0pCi0JCXRwLT5ncmNfbW9kZSB8PSBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU07Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OT19SWF9QU0VVRE9fQ1NVTSkKLQkJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX05PX1JYX1BIRFJfQ1NVTTsKKworCS8qIFBzZXVkby1oZWFkZXIgY2hlY2tzdW0gaXMgZG9uZSBieSBoYXJkd2FyZSBsb2dpYyBhbmQgbm90CisJICogdGhlIG9mZmxvYWQgcHJvY2Vzc2Vycywgc28gbWFrZSB0aGUgY2hpcCBkbyB0aGUgcHNldWRvLQorCSAqIGhlYWRlciBjaGVja3N1bXMgb24gcmVjZWl2ZS4gIEZvciB0cmFuc21pdCBpdCBpcyBtb3JlCisJICogY29udmVuaWVudCB0byBkbyB0aGUgcHNldWRvLWhlYWRlciBjaGVja3N1bSBpbiBzb2Z0d2FyZQorCSAqIGFzIExpbnV4IGRvZXMgdGhhdCBvbiB0cmFuc21pdCBmb3IgdXMgaW4gYWxsIGNhc2VzLgorCSAqLworCXRwLT5ncmNfbW9kZSB8PSBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU07CiAKIAl0dzMyKEdSQ19NT0RFLAogCSAgICAgdHAtPmdyY19tb2RlIHwKQEAgLTYzMjgsNyArNjM1Nyw3IEBACiAJCXR3MzIoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCk7CiAJfQogCi0JZXJyID0gdGczX3NldHVwX3BoeSh0cCwgMSk7CisJZXJyID0gdGczX3NldHVwX3BoeSh0cCwgcmVzZXRfcGh5KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC02NDAxLDcgKzY0MzAsNyBAQAogLyogQ2FsbGVkIGF0IGRldmljZSBvcGVuIHRpbWUgdG8gZ2V0IHRoZSBjaGlwIHJlYWR5IGZvcgogICogcGFja2V0IHByb2Nlc3NpbmcuICBJbnZva2VkIHdpdGggdHAtPmxvY2sgaGVsZC4KICAqLwotc3RhdGljIGludCB0ZzNfaW5pdF9odyhzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyBpbnQgdGczX2luaXRfaHcoc3RydWN0IHRnMyAqdHAsIGludCByZXNldF9waHkpCiB7CiAJaW50IGVycjsKIApAQCAtNjQxNCw3ICs2NDQzLDcgQEAKIAogCXR3MzIoVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCAwKTsKIAotCWVyciA9IHRnM19yZXNldF9odyh0cCk7CisJZXJyID0gdGczX3Jlc2V0X2h3KHRwLCByZXNldF9waHkpOwogCiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTY0NjIsNiArNjQ5MSwxMCBAQAogCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfZnJhbWVfdG9vX2xvbmdfZXJyb3JzLCBNQUNfUlhfU1RBVFNfRlJBTUVfVE9PX0xPTkcpOwogCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfamFiYmVycywgTUFDX1JYX1NUQVRTX0pBQkJFUlMpOwogCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfdW5kZXJzaXplX3BhY2tldHMsIE1BQ19SWF9TVEFUU19VTkRFUlNJWkUpOworCisJVEczX1NUQVRfQUREMzIoJnNwLT5yeGJkc19lbXB0eSwgUkNWTFBDX05PX1JDVl9CRF9DTlQpOworCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfZGlzY2FyZHMsIFJDVkxQQ19JTl9ESVNDQVJEU19DTlQpOworCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfZXJyb3JzLCBSQ1ZMUENfSU5fRVJST1JTX0NOVCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM190aW1lcih1bnNpZ25lZCBsb25nIF9fb3BhcXVlKQpAQCAtNjY4NCw3ICs2NzE3LDcgQEAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAxKTsKIAogCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKLQllcnIgPSB0ZzNfaW5pdF9odyh0cCk7CisJZXJyID0gdGczX2luaXRfaHcodHAsIDEpOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIApAQCAtNjc0OSw3ICs2NzgyLDcgQEAKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCi0JZXJyID0gdGczX2luaXRfaHcodHApOworCWVyciA9IHRnM19pbml0X2h3KHRwLCAxKTsKIAlpZiAoZXJyKSB7CiAJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKIAkJdGczX2ZyZWVfcmluZ3ModHApOwpAQCAtNzYyNywyMSArNzY2MCwyMyBAQAogCQljbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwKIAkJCQkgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSkKKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpKSB7CiAJCWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CiAJCQkJICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CiAJCQkJICBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKIAkJCQkgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAogCQkJCSAgU1VQUE9SVEVEX01JSSk7Ci0JZWxzZQorCQljbWQtPnBvcnQgPSBQT1JUX1RQOworCX0gZWxzZSB7CiAJCWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9GSUJSRTsKKwkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwl9CiAgIAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSB0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmc7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQljbWQtPnNwZWVkID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZDsKIAkJY21kLT5kdXBsZXggPSB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleDsKIAl9Ci0JY21kLT5wb3J0ID0gMDsKIAljbWQtPnBoeV9hZGRyZXNzID0gUEhZX0FERFI7CiAJY21kLT50cmFuc2NlaXZlciA9IDA7CiAJY21kLT5hdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLmF1dG9uZWc7CkBAIC03ODQwLDcgKzc4NzUsNyBAQAogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7Ci0JCXRnM19pbml0X2h3KHRwKTsKKwkJdGczX2luaXRfaHcodHAsIDEpOwogCQl0ZzNfbmV0aWZfc3RhcnQodHApOwogCX0KIApAQCAtNzg4NSw3ICs3OTIwLDcgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwotCQl0ZzNfaW5pdF9odyh0cCk7CisJCXRnM19pbml0X2h3KHRwLCAxKTsKIAkJdGczX25ldGlmX3N0YXJ0KHRwKTsKIAl9CiAKQEAgLTgwNDYsOSArODA4MSwxMyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCQkJY3N1bTggKz0gYnVmOFtpXTsKIAotCQlpZiAoY3N1bTggPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gLUVJTzsKKwkJaWYgKGNzdW04ID09IDApIHsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIEJvb3RzdHJhcCBjaGVja3N1bSBhdCBvZmZzZXQgMHgxMCAqLwpAQCAtODQyNCw2ICs4NDYzLDkgQEAKIAogCXR4X2xlbiA9IDE1MTQ7CiAJc2tiID0gZGV2X2FsbG9jX3NrYih0eF9sZW4pOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXR4X2RhdGEgPSBza2JfcHV0KHNrYiwgdHhfbGVuKTsKIAltZW1jcHkodHhfZGF0YSwgdHAtPmRldi0+ZGV2X2FkZHIsIDYpOwogCW1lbXNldCh0eF9kYXRhICsgNiwgMHgwLCA4KTsKQEAgLTg1MTksNyArODU2MSw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKHRwLT5kZXYpKQogCQlyZXR1cm4gVEczX0xPT1BCQUNLX0ZBSUxFRDsKIAotCXRnM19yZXNldF9odyh0cCk7CisJdGczX3Jlc2V0X2h3KHRwLCAxKTsKIAogCWlmICh0ZzNfcnVuX2xvb3BiYWNrKHRwLCBURzNfTUFDX0xPT1BCQUNLKSkKIAkJZXJyIHw9IFRHM19NQUNfTE9PUEJBQ0tfRkFJTEVEOwpAQCAtODU5Myw3ICs4NjM1LDcgQEAKIAkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7Ci0JCQl0ZzNfaW5pdF9odyh0cCk7CisJCQl0ZzNfaW5pdF9odyh0cCwgMSk7CiAJCQl0ZzNfbmV0aWZfc3RhcnQodHApOwogCQl9CiAKQEAgLTkwMzYsOSArOTA3OCw2IEBACiB7CiAJaW50IGo7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkKLQkJcmV0dXJuOwotCiAJdHczMl9mKEdSQ19FRVBST01fQUREUiwKIAkgICAgIChFRVBST01fQUREUl9GU01fUkVTRVQgfAogCSAgICAgIChFRVBST01fREVGQVVMVF9DTE9DS19QRVJJT0QgPDwKQEAgLTkxNzEsMTEgKzkyMTAsNiBAQAogewogCWludCByZXQ7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBdHRlbXB0IHRvIGRvIG52cmFtX3JlYWQgb24gU3VuIDU3MFhcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQogCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7CiAKQEAgLTkzNzQsNyArOTQwOCw3IEBACiAKIAkgICAgICAgIGlmICgocGFnZV9vZmYgPT0gMCkgfHwgKGkgPT0gMCkpCiAJCQludnJhbV9jbWQgfD0gTlZSQU1fQ01EX0ZJUlNUOwotCQllbHNlIGlmIChwYWdlX29mZiA9PSAodHAtPm52cmFtX3BhZ2VzaXplIC0gNCkpCisJCWlmIChwYWdlX29mZiA9PSAodHAtPm52cmFtX3BhZ2VzaXplIC0gNCkpCiAJCQludnJhbV9jbWQgfD0gTlZSQU1fQ01EX0xBU1Q7CiAKIAkJaWYgKGkgPT0gKGxlbiAtIDQpKQpAQCAtOTQwOCwxMSArOTQ0Miw2IEBACiB7CiAJaW50IHJldDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gZG8gbnZyYW1fd3JpdGUgb24gU3VuIDU3MFhcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7CiAJCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsICYKIAkJICAgICAgIH5HUkNfTENMQ1RSTF9HUElPX09VVFBVVDEpOwpAQCAtOTUzOSwxMiArOTU2OCwxOSBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NSVNDX0hPU1RfQ1RSTCwKIAkJCSAgICAgICB0cC0+bWlzY19ob3N0X2N0cmwpOwogCisJLyogVGhlIG1lbW9yeSBhcmJpdGVyIGhhcyB0byBiZSBlbmFibGVkIGluIG9yZGVyIGZvciBTUkFNIGFjY2Vzc2VzCisJICogdG8gc3VjY2VlZC4gIE5vcm1hbGx5IG9uIHBvd2VydXAgdGhlIHRnMyBjaGlwIGZpcm13YXJlIHdpbGwgbWFrZQorCSAqIHN1cmUgaXQgaXMgZW5hYmxlZCwgYnV0IG90aGVyIGVudGl0aWVzIHN1Y2ggYXMgc3lzdGVtIG5ldGJvb3QKKwkgKiBjb2RlIG1pZ2h0IGRpc2FibGUgaXQuCisJICovCisJdmFsID0gdHIzMihNRU1BUkJfTU9ERSk7CisJdHczMihNRU1BUkJfTU9ERSwgdmFsIHwgTUVNQVJCX01PREVfRU5BQkxFKTsKKwogCXRwLT5waHlfaWQgPSBQSFlfSURfSU5WQUxJRDsKIAl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8xOwogCi0JLyogRG8gbm90IGV2ZW4gdHJ5IHBva2luZyBhcm91bmQgaW4gaGVyZSBvbiBTdW4gcGFydHMuICAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKQotCQlyZXR1cm47CisJLyogQXNzdW1lIGFuIG9uYm9hcmQgZGV2aWNlIGJ5IGRlZmF1bHQuICAqLworCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7CiAKIAl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfU0lHLCAmdmFsKTsKIAlpZiAodmFsID09IE5JQ19TUkFNX0RBVEFfU0lHX01BR0lDKSB7CkBAIC05NjQyLDEwICs5Njc4LDEwIEBACiAJCSAgICB0cC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0RFTEwpCiAJCQl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8yOwogCi0JCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApICYmCi0JCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpICYmCi0JCSAgICAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0VFUFJPTV9XUCkpCisJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfRUVQUk9NX1dQKQogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKKwkJZWxzZQorCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7CiAKIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BU0ZfRU5BQkxFKSB7CiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VOQUJMRV9BU0Y7CkBAIC05Nzk0LDE2ICs5ODMwLDggQEAKIAlpbnQgaTsKIAl1MzIgbWFnaWM7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgewotCQkvKiBTdW4gZGVjaWRlZCBub3QgdG8gcHV0IHRoZSBuZWNlc3NhcnkgYml0cyBpbiB0aGUKLQkJICogTlZSQU0gb2YgdGhlaXIgb25ib2FyZCB0ZzMgcGFydHMgOigKLQkJICovCi0JCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJTdW4gNTcwWCIpOwotCQlyZXR1cm47Ci0JfQotCiAJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAKIAlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykgewogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKQEAgLTk4MzQsNiArOTg2Miw5IEBACiAJCQkJCWJyZWFrOwogCQkJCW1zbGVlcCgxKTsKIAkJCX0KKwkJCWlmICghKHRtcDE2ICYgMHg4MDAwKSkKKwkJCQlnb3RvIG91dF9ub3RfZm91bmQ7CisKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgdnBkX2NhcCArIFBDSV9WUERfREFUQSwKIAkJCQkJICAgICAgJnRtcCk7CiAJCQl0bXAgPSBjcHVfdG9fbGUzMih0bXApOwpAQCAtOTkyNSwzNyArOTk1Niw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJDNjQKLXN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19pc19zdW5fNTcwWChzdHJ1Y3QgdGczICp0cCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wZGV2OwotCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3AgPSBwZGV2LT5zeXNkYXRhOwotCi0JaWYgKHBjcCAhPSBOVUxMKSB7Ci0JCWludCBub2RlID0gcGNwLT5wcm9tX25vZGU7Ci0JCXUzMiB2ZW5pZDsKLQkJaW50IGVycjsKLQotCQllcnIgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJzdWJzeXN0ZW0tdmVuZG9yLWlkIiwKLQkJCQkgICAgICAgKGNoYXIgKikgJnZlbmlkLCBzaXplb2YodmVuaWQpKTsKLQkJaWYgKGVyciA9PSAwIHx8IGVyciA9PSAtMSkKLQkJCXJldHVybiAwOwotCQlpZiAodmVuaWQgPT0gUENJX1ZFTkRPUl9JRF9TVU4pCi0JCQlyZXR1cm4gMTsKLQotCQkvKiBURzMgY2hpcHMgb25ib2FyZCB0aGUgU3VuQmxhZGUtMjUwMCBkb24ndCBoYXZlIHRoZQotCQkgKiBzdWJzeXN0ZW0tdmVuZG9yLWlkIHNldCB0byBQQ0lfVkVORE9SX0lEX1NVTiBidXQgdGhleQotCQkgKiBhcmUgZGlzdGluZ3Vpc2hhYmxlIGZyb20gbm9uLVN1biB2YXJpYW50cyBieSBiZWluZwotCQkgKiBuYW1lZCAibmV0d29yayIgYnkgdGhlIGZpcm13YXJlLiAgTm9uLVN1biBjYXJkcyB3aWxsCi0JCSAqIHNob3cgdXAgYXMgYmVpbmcgbmFtZWQgImV0aGVybmV0Ii4KLQkJICovCi0JCWlmICghc3RyY21wKHBjcC0+cHJvbV9uYW1lLCAibmV0d29yayIpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19nZXRfaW52YXJpYW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKIAlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd3JpdGVfcmVvcmRlcl9jaGlwc2V0c1tdID0gewpAQCAtOTk3MiwxMSArOTk3Miw2IEBACiAJdTE2IHBjaV9jbWQ7CiAJaW50IGVycjsKIAotI2lmZGVmIENPTkZJR19TUEFSQzY0Ci0JaWYgKHRnM19pc19zdW5fNTcwWCh0cCkpCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1NVTl81NzBYOwotI2VuZGlmCi0KIAkvKiBGb3JjZSBtZW1vcnkgd3JpdGUgaW52YWxpZGF0ZSBvZmYuICBJZiB3ZSBsZWF2ZSBpdCBvbiwKIAkgKiB0aGVuIG9uIDU3MDBfQlggY2hpcHMgd2UgaGF2ZSB0byBlbmFibGUgYSB3b3JrYXJvdW5kLgogCSAqIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHNldCB0aGUgVEczUENJX0RNQV9SV19DVFJMIGJvdW5kYXJ5CkBAIC0xMDI2OSw2ICsxMDI2NCwxMiBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKIAl9CiAKKwlpZiAodHAtPndyaXRlMzIgPT0gdGczX3dyaXRlX2luZGlyZWN0X3JlZzMyIHx8CisJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgJiYKKwkgICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAorCSAgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkpCisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHOworCiAJLyogR2V0IGVlcHJvbSBodyBjb25maWcgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpLgogCSAqIEluIHBhcnRpY3VsYXIsIHRoZSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCBmbGFnIG11c3QgYmUKIAkgKiBkZXRlcm1pbmVkIGJlZm9yZSBjYWxsaW5nIHRnM19zZXRfcG93ZXJfc3RhdGUoKSBzbyB0aGF0CkBAIC0xMDMxMSwxNSArMTAzMTIsNiBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMF9CMCkKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TOwogCi0JLyogUHNldWRvLWhlYWRlciBjaGVja3N1bSBpcyBkb25lIGJ5IGhhcmR3YXJlIGxvZ2ljIGFuZCBub3QKLQkgKiB0aGUgb2ZmbG9hZCBwcm9jZXNzZXJzLCBzbyBtYWtlIHRoZSBjaGlwIGRvIHRoZSBwc2V1ZG8tCi0JICogaGVhZGVyIGNoZWNrc3VtcyBvbiByZWNlaXZlLiAgRm9yIHRyYW5zbWl0IGl0IGlzIG1vcmUKLQkgKiBjb252ZW5pZW50IHRvIGRvIHRoZSBwc2V1ZG8taGVhZGVyIGNoZWNrc3VtIGluIHNvZnR3YXJlCi0JICogYXMgTGludXggZG9lcyB0aGF0IG9uIHRyYW5zbWl0IGZvciB1cyBpbiBhbGwgY2FzZXMuCi0JICovCi0JdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OT19UWF9QU0VVRE9fQ1NVTTsKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19OT19SWF9QU0VVRE9fQ1NVTTsKLQogCS8qIERlcml2ZSBpbml0aWFsIGp1bWJvIG1vZGUgZnJvbSBNVFUgYXNzaWduZWQgaW4KIAkgKiBldGhlcl9zZXR1cCgpIHZpYSB0aGUgYWxsb2NfZXRoZXJkZXYoKSBjYWxsCiAJICovCkBAIC0xMDM1MSwxMCArMTAzNDMsMTMgQEAKIAlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDRfQTApCiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV81NzA0X0EwX0JVRzsKIAotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpICYmCi0JICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc1NSkgJiYKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg3KSkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpCisJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfSklUVEVSX0JVRzsKKwkJZWxzZQorCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CisJfQogCiAJdHAtPmNvYWxlc2NlX21vZGUgPSAwOwogCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81NzAwX0FYICYmCkBAIC0xMDU1Myw4ICsxMDU0OCw3IEBACiAjZW5kaWYKIAogCW1hY19vZmZzZXQgPSAweDdjOwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgJiYKLQkgICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEcyX1NVTl81NzBYKSkgfHwKKwlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0KSB8fAogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgewogCQlpZiAodHIzMihURzNQQ0lfRFVBTF9NQUNfQ1RSTCkgJiBEVUFMX01BQ19DVFJMX0lEKQogCQkJbWFjX29mZnNldCA9IDB4Y2M7CkBAIC0xMDU4MSw4ICsxMDU3NSw3IEBACiAJfQogCWlmICghYWRkcl9vaykgewogCQkvKiBOZXh0LCB0cnkgTlZSQU0uICovCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxHMl9TVU5fNTcwWCkgJiYKLQkJICAgICF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKKwkJaWYgKCF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKIAkJICAgICF0ZzNfbnZyYW1fcmVhZCh0cCwgbWFjX29mZnNldCArIDQsICZsbykpIHsKIAkJCWRldi0+ZGV2X2FkZHJbMF0gPSAoKGhpID4+IDE2KSAmIDB4ZmYpOwogCQkJZGV2LT5kZXZfYWRkclsxXSA9ICgoaGkgPj4gMjQpICYgMHhmZik7CkBAIC0xMTU2Nyw3ICsxMTU2MCw3IEBACiAJCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfSU5JVF9DT01QTEVURTsKLQkJdGczX2luaXRfaHcodHApOworCQl0ZzNfaW5pdF9odyh0cCwgMSk7CiAKIAkJdHAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgdHAtPnRpbWVyX29mZnNldDsKIAkJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwpAQCAtMTE2MDEsNyArMTE1OTQsNyBAQAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTklUX0NPTVBMRVRFOwotCXRnM19pbml0X2h3KHRwKTsKKwl0ZzNfaW5pdF9odyh0cCwgMSk7CiAKIAl0cC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0cC0+dGltZXJfb2Zmc2V0OwogCWFkZF90aW1lcigmdHAtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggYzQzY2MzMi4uZmYwZmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTIxNzEsOCArMjE3MSw3IEBACiAjZGVmaW5lIFRHM19GTEFHX1BDSVhfTU9ERQkJMHgwMDAyMDAwMAogI2RlZmluZSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRAkJMHgwMDA0MDAwMAogI2RlZmluZSBURzNfRkxBR19QQ0lfMzJCSVQJCTB4MDAwODAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfTk9fVFhfUFNFVURPX0NTVU0JMHgwMDEwMDAwMAotI2RlZmluZSBURzNfRkxBR19OT19SWF9QU0VVRE9fQ1NVTQkweDAwMjAwMDAwCisjZGVmaW5lIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRwkweDAwMTAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1NFUkRFU19XT0xfQ0FQCQkweDAwNDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFCTB4MDA4MDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfMTBfMTAwX09OTFkJCTB4MDEwMDAwMDAKQEAgLTIxODUsNyArMjE4NCw3IEBACiAjZGVmaW5lIFRHM19GTEFHX0lOSVRfQ09NUExFVEUJCTB4ODAwMDAwMDAKIAl1MzIJCQkJdGczX2ZsYWdzMjsKICNkZWZpbmUgVEczX0ZMRzJfUkVTVEFSVF9USU1FUgkJMHgwMDAwMDAwMQotI2RlZmluZSBURzNfRkxHMl9TVU5fNTcwWAkJMHgwMDAwMDAwMgorLyoJCQkJCTB4MDAwMDAwMDIgYXZhaWxhYmxlICovCiAjZGVmaW5lIFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVECTB4MDAwMDAwMDQKICNkZWZpbmUgVEczX0ZMRzJfSVNfNTc4OAkJMHgwMDAwMDAwOAogI2RlZmluZSBURzNfRkxHMl9NQVhfUlhQRU5EXzY0CQkweDAwMDAwMDEwCkBAIC0yMjE2LDYgKzIyMTUsOCBAQAogI2RlZmluZSBURzNfRkxHMl9IV19UU09fMgkJMHgwODAwMDAwMAogI2RlZmluZSBURzNfRkxHMl9IV19UU08JCQkoVEczX0ZMRzJfSFdfVFNPXzEgfCBURzNfRkxHMl9IV19UU09fMikKICNkZWZpbmUgVEczX0ZMRzJfMVNIT1RfTVNJCQkweDEwMDAwMDAwCisjZGVmaW5lIFRHM19GTEcyX1BIWV9KSVRURVJfQlVHCQkweDIwMDAwMDAwCisjZGVmaW5lIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVECTB4NDAwMDAwMDAKIAogCXUzMgkJCQlzcGxpdF9tb2RlX21heF9yZXFzOwogI2RlZmluZSBTUExJVF9NT0RFXzU3MDRfTUFYX1JFUQkJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwppbmRleCA5MzQ1ZTY4Li42NDlkOGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYwpAQCAtNDM4LDggKzQzOCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHItMHgxMCwgQUJZU1NfSU9fRVhURU5UKTsKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCmluZGV4IDNhMjVkMTkuLjE5ZTZmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwpAQCAtNzM1LDggKzczNSw3IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqdHA7CiAgICAgICAgIHN0cnVjdCBjYXJkX2luZm8gKmNhcmQ7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCiAJdHAgPSBkZXYtPnByaXY7CiAJY2FyZCA9IHRwLT50bXNwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKaW5kZXggYmEwNWRlZC4uMTM2YTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCkBAIC04NTAsNyArODUwLDcgQEAKIAkJCWJyZWFrOwogCQlza2ItPmRldiA9IGRldjsJCQkvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkgdGhpcyBkZXZpY2UuICovCiAJCW5wLT5yeF9hZGRyW2ldID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsc2tiLT5kYXRhLAotCQkJCQlza2ItPmxlbixQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQlucC0+cnhfYnVmX3N6LFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJbnAtPnJ4X3JpbmdbaV0uYnVmZmVyMSA9IG5wLT5yeF9hZGRyW2ldOwogCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBEZXNjT3duOwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIAkJCXNrYi0+ZGV2ID0gZGV2OwkJCS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KIAkJCW5wLT5yeF9hZGRyW2VudHJ5XSA9IHBjaV9tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LAogCQkJCQkJCXNrYi0+ZGF0YSwKLQkJCQkJCQlza2ItPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJCQlucC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJbnAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEgPSBucC0+cnhfYWRkcltlbnRyeV07CiAJCX0KIAkJd21iKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggYzFjZTg3YS4uZDkyNThkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAjaW5jbHVkZSAidHlwaG9vbi5oIgogI2luY2x1ZGUgInR5cGhvb24tZmlybXdhcmUuaCIKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogICAgICJ0eXBob29uLmM6IHZlcnNpb24gIiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIERpbGxvdyA8ZGF2ZUB0aGVkaWxsb3dzLm9yZz4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggYTliMjE1MC4uZmRjMjEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEyOSw2ICsxMjksNyBAQAogCS0gTWFzc2l2ZSBjbGVhbi11cAogCS0gUmV3cml0ZSBQSFksIG1lZGlhIGhhbmRsaW5nIChyZW1vdmUgb3B0aW9ucywgZnVsbF9kdXBsZXgsIGJhY2tvZmYpCiAJLSBGaXggVHggZW5naW5lIHJhY2UgZm9yIGdvb2QKKwktIENyYWlnIEJyaW5kOiBaZXJvIHBhZGRlZCBhbGlnbmVkIGJ1ZmZlcnMgZm9yIHNob3J0IHBhY2tldHMuCiAKICovCiAKQEAgLTQ2OSw3ICs0NzAsNyBAQAogCXN0cnVjdCBza19idWZmICp0eF9za2J1ZmZbVFhfUklOR19TSVpFXTsKIAlkbWFfYWRkcl90IHR4X3NrYnVmZl9kbWFbVFhfUklOR19TSVpFXTsKIAotCS8qIFR4IGJvdW5jZSBidWZmZXJzICovCisJLyogVHggYm91bmNlIGJ1ZmZlcnMgKFJoaW5lLUkgb25seSkgKi8KIAl1bnNpZ25lZCBjaGFyICp0eF9idWZbVFhfUklOR19TSVpFXTsKIAl1bnNpZ25lZCBjaGFyICp0eF9idWZzOwogCWRtYV9hZGRyX3QgdHhfYnVmc19kbWE7CkBAIC00OTAsOCArNDkxLDYgQEAKIAl1OCB0eF90aHJlc2gsIHJ4X3RocmVzaDsKIAogCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hlY2tfbWVkaWFfdGFzazsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiB9OwogCkBAIC00OTksOCArNDk4LDYgQEAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpOwogc3RhdGljIGludCAgcmhpbmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJoaW5lX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCByaGluZV9jaGVja19tZWRpYV90YXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgcmhpbmVfc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcmhpbmVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgcmhpbmVfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC04NTUsMTIgKzg1Miw2IEBACiAJaWYgKHJwLT5xdWlya3MgJiBycVJoaW5lSSkKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHfE5FVElGX0ZfSFdfQ1NVTTsKIAotCUlOSVRfV09SSygmcnAtPnR4X3RpbWVvdXRfdGFzaywKLQkJICAodm9pZCAoKikodm9pZCAqKSlyaGluZV90eF90aW1lb3V0X3Rhc2ssIGRldik7Ci0KLQlJTklUX1dPUksoJnJwLT5jaGVja19tZWRpYV90YXNrLAotCQkgICh2b2lkICgqKSh2b2lkICopKXJoaW5lX2NoZWNrX21lZGlhX3Rhc2ssIGRldik7Ci0KIAkvKiBkZXYtPm5hbWUgbm90IGRlZmluZWQgYmVmb3JlIHJlZ2lzdGVyX25ldGRldigpISAqLwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKQpAQCAtMTA0Myw3ICsxMDM0LDggQEAKIAkJcnAtPnR4X3JpbmdbaV0uZGVzY19sZW5ndGggPSBjcHVfdG9fbGUzMihUWERFU0MpOwogCQluZXh0ICs9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CiAJCXJwLT50eF9yaW5nW2ldLm5leHRfZGVzYyA9IGNwdV90b19sZTMyKG5leHQpOwotCQlycC0+dHhfYnVmW2ldID0gJnJwLT50eF9idWZzW2kgKiBQS1RfQlVGX1NaXTsKKwkJaWYgKHJwLT5xdWlya3MgJiBycVJoaW5lSSkKKwkJCXJwLT50eF9idWZbaV0gPSAmcnAtPnR4X2J1ZnNbaSAqIFBLVF9CVUZfU1pdOwogCX0KIAlycC0+dHhfcmluZ1tpLTFdLm5leHRfZGVzYyA9IGNwdV90b19sZTMyKHJwLT50eF9yaW5nX2RtYSk7CiAKQEAgLTEwOTEsNyArMTA4Myw3IEBACiB9CiAKIC8qIENhbGxlZCBhZnRlciBzdGF0dXMgb2YgZm9yY2VfbWVkaWEgcG9zc2libHkgY2hhbmdlZCAqLwotdm9pZCByaGluZV9zZXRfY2FycmllcihzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSkKK3N0YXRpYyB2b2lkIHJoaW5lX3NldF9jYXJyaWVyKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKQogewogCWlmIChtaWktPmZvcmNlX21lZGlhKSB7CiAJCS8qIGF1dG9uZWcgaXMgb2ZmOiBMaW5rIGlzIGFsd2F5cyBhc3N1bWVkIHRvIGJlIHVwICovCkBAIC0xMTA2LDExICsxMDk4LDYgQEAKIAkJICAgICAgIG5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpKTsKIH0KIAotc3RhdGljIHZvaWQgcmhpbmVfY2hlY2tfbWVkaWFfdGFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJoaW5lX2NoZWNrX21lZGlhKGRldiwgMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTExNjQsOCArMTE1MSw4IEBACiAJaWYgKHF1aXJrcyAmIHJxUmhpbmVJKSB7CiAJCWlvd3JpdGU4KDB4MDEsIGlvYWRkciArIE1JSVJlZ0FkZHIpOwkvLyBNSUlfQk1TUgogCi0JCS8qIERvIG5vdCBjYWxsIGZyb20gSVNSISAqLwotCQltc2xlZXAoMSk7CisJCS8qIENhbiBiZSBjYWxsZWQgZnJvbSBJU1IuIEV2aWwuICovCisJCW1kZWxheSgxKTsKIAogCQkvKiAweDgwIG11c3QgYmUgc2V0IGltbWVkaWF0ZWx5IGJlZm9yZSB0dXJuaW5nIGl0IG9mZiAqLwogCQlpb3dyaXRlOCgweDgwLCBpb2FkZHIgKyBNSUlDbWQpOwpAQCAtMTI1NSwxNiArMTI0Miw2IEBACiBzdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qCi0JICogTW92ZSBidWxrIG9mIHdvcmsgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dAotCSAqLwotCXNjaGVkdWxlX3dvcmsoJnJwLT50eF90aW1lb3V0X3Rhc2spOwotfQotCi1zdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIFBIWSBzdGF0dXMgIgpAQCAtMTMyNSw3ICsxMzAyLDEyIEBACiAJCQlycC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0KKworCQkvKiBQYWRkaW5nIGlzIG5vdCBjb3BpZWQgYW5kIHNvIG11c3QgYmUgcmVkb25lLiAqLwogCQlza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCBycC0+dHhfYnVmW2VudHJ5XSk7CisJCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQorCQkJbWVtc2V0KHJwLT50eF9idWZbZW50cnldICsgc2tiLT5sZW4sIDAsCisJCQkgICAgICAgRVRIX1pMRU4gLSBza2ItPmxlbik7CiAJCXJwLT50eF9za2J1ZmZfZG1hW2VudHJ5XSA9IDA7CiAJCXJwLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlMzIocnAtPnR4X2J1ZnNfZG1hICsKIAkJCQkJCSAgICAgIChycC0+dHhfYnVmW2VudHJ5XSAtCkBAIC0xNjcwLDcgKzE2NTIsNyBAQAogCXNwaW5fbG9jaygmcnAtPmxvY2spOwogCiAJaWYgKGludHJfc3RhdHVzICYgSW50ckxpbmtDaGFuZ2UpCi0JCXNjaGVkdWxlX3dvcmsoJnJwLT5jaGVja19tZWRpYV90YXNrKTsKKwkJcmhpbmVfY2hlY2tfbWVkaWEoZGV2LCAwKTsKIAlpZiAoaW50cl9zdGF0dXMgJiBJbnRyU3RhdHNNYXgpIHsKIAkJcnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gaW9yZWFkMTYoaW9hZGRyICsgUnhDUkNFcnJzKTsKIAkJcnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW9yZWFkMTYoaW9hZGRyICsgUnhNaXNzZWQpOwpAQCAtMTkyMCw5ICsxOTAyLDYgQEAKIAlzcGluX3VubG9ja19pcnEoJnJwLT5sb2NrKTsKIAogCWZyZWVfaXJxKHJwLT5wZGV2LT5pcnEsIGRldik7Ci0KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJZnJlZV9yYnVmcyhkZXYpOwogCWZyZWVfdGJ1ZnMoZGV2KTsKIAlmcmVlX3JpbmcoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKaW5kZXggODgzY2Y3ZC4uYjUzMjhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKQEAgLTQxMCwxMDMgKzQxMCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBWRU5ET1JfU0FOR09NQQotCXRyaXN0YXRlICJTYW5nb21hIFdBTlBJUEUodG0pIG11bHRpcHJvdG9jb2wgY2FyZHMiCi0JZGVwZW5kcyBvbiBXQU5fUk9VVEVSX0RSSVZFUlMgJiYgV0FOX1JPVVRFUiAmJiAoUENJIHx8IElTQSkgJiYgQlJPS0VOCi0JLS0taGVscC0tLQotCSAgRHJpdmVyIGZvciBTNTE0LVBDSS9JU0EgU3luY2hyb25vdXMgRGF0YSBMaW5rIEFkYXB0ZXJzIChTRExBKS4KLQotCSAgV0FOUElQRSBmcm9tIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gPGh0dHA6Ly93d3cuc2FuZ29tYS5jb20vPgotCSAgaXMgYSBmYW1pbHkgb2YgaW50ZWxsaWdlbnQgbXVsdGlwcm90b2NvbCBXQU4gYWRhcHRlcnMgd2l0aCBkYXRhCi0JICB0cmFuc2ZlciByYXRlcyB1cCB0byA0TWJwcy4gQ2FyZHMgc3VwcG9ydDoKLQotCSAgLSBYLjI1LCBGcmFtZSBSZWxheSwgUFBQLCBDaXNjbyBIRExDIHByb3RvY29scy4KLQotCSAgLSBBUEkgZm9yIHByb3RvY29scyBsaWtlIEhETEMgKExBUEIpLCBIRExDIFN0cmVhbWluZywgWC4yNSwKLQkgIEZyYW1lIFJlbGF5IGFuZCBCaVN5bmMuCi0KLQkgIC0gRXRoZXJuZXQgQnJpZGdpbmcgb3ZlciBGcmFtZSBSZWxheSBwcm90b2NvbC4KLQotCSAgLSBNVUxUSUxJTksgUFBQCi0KLQkgIC0gQXN5bmMgUFBQIChNb2RlbSBEaWFsdXApCi0KLQkgIFRoZSBuZXh0IHF1ZXN0aW9ucyB3aWxsIGFzayB5b3UgYWJvdXQgdGhlIHByb3RvY29scyB5b3Ugd2FudAotCSAgdGhlIGRyaXZlciB0byBzdXBwb3J0LgotCi0JICBJZiB5b3UgaGF2ZSBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXJkcywgc2F5IE0gdG8gdGhpcyBvcHRpb247Ci0JICBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQ+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3YW5waXBlLgotCi1jb25maWcgV0FOUElQRV9DSERMQwotCWJvb2wgIldBTlBJUEUgQ2lzY28gSERMQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQktLS1oZWxwLS0tCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgbGVhc2VkIGxpbmUgdXNpbmcgdGhlIENpc2NvIEhETEMuCi0KLQkgIC0gU3VwcG9ydHMgRHVhbCBQb3J0IENpc2NvIEhETEMgb24gdGhlIFM1MTQtUENJL1M1MDgtSVNBIGNhcmRzCi0JICB3aGljaCBhbGxvd3MgdXNlciB0byBidWlsZCBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIEhETEMgc3RyZWFtaW5nIEFQSS4KLQotCSAgLSBDSERMQyBTdHJlYW1pbmcgTVVMVElMSU5LIFBQUCB0aGF0IGNhbiBiaW5kIG11bHRpcGxlIFdBTlBJUEUgVDEKLQkgIGNhcmRzIGludG8gYSBzaW5nbGUgbG9naWNhbCBjaGFubmVsLgotCi0JICBTYXkgWSBhbmQgdGhlIENpc2NvIEhETEMgc3VwcG9ydCwgSERMQyBzdHJlYW1pbmcgQVBJIGFuZAotCSAgTVVMVElMSU5LIFBQUCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KLWNvbmZpZyBXQU5QSVBFX0ZSCi0JYm9vbCAiV0FOUElQRSBGcmFtZSBSZWxheSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgRnJhbWUgUmVsYXkgbmV0d29yaywgb3IgdXNlIEZyYW1lIFJlbGF5Ci0JICBBUEkgdG8gZGV2ZWxvcCBjdXN0b20gYXBwbGljYXRpb25zLgotCi0JICBDb250YWlucyB0aGUgRXRoZXJuZXQgQnJpZGdpbmcgb3ZlciBGcmFtZSBSZWxheSBmZWF0dXJlLCB3aGVyZQotCSAgYSBXQU5QSVBFIGZyYW1lIHJlbGF5IGxpbmsgY2FuIGJlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgTGludXgKLQkgIGtlcm5lbCBicmlkZ2UuIFRoZSBGcmFtZSBSZWxheSBvcHRpb24gaXMgc3VwcG9ydGVkIG9uIFM1MTQtUENJCi0JICBhbmQgUzUwOC1JU0EgY2FyZHMuCi0KLQkgIFNheSBZIGFuZCB0aGUgRnJhbWUgUmVsYXkgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KLWNvbmZpZyBXQU5QSVBFX1gyNQotCWJvb2wgIldBTlBJUEUgWC4yNSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGFuIFguMjUgbmV0d29yay4KLQotCSAgSW5jbHVkZXMgdGhlIFguMjUgQVBJIHN1cHBvcnQgZm9yIGN1c3RvbSBhcHBsaWNhdGlvbnMgb3ZlciB0aGUKLQkgIFguMjUgcHJvdG9jb2wuIFRoZSBYLjI1IG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kgYW5kCi0JICBTNTA4LUlTQSBjYXJkcy4KLQotCSAgU2F5IFkgYW5kIHRoZSBYLjI1IHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyLgotCi1jb25maWcgV0FOUElQRV9QUFAKLQlib29sICJXQU5QSVBFIFBQUCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgbGVhc2VkIGxpbmUgdXNpbmcgUG9pbnQtdG8tUG9pbnQKLQkgIFByb3RvY29sIChQUFApLgotCi0JICBUaGUgUFBQIG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kvUzUwOC1JU0EgY2FyZHMuCi0KLQkgIFNheSBZIGFuZCB0aGUgUFBQIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyLgotCi1jb25maWcgV0FOUElQRV9NVUxUUFBQCi0JYm9vbCAiV0FOUElQRSBNdWx0aS1Qb3J0IFBQUCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVkVORE9SX1NBTkdPTUEKLQloZWxwCi0JICBDb25uZWN0IGEgV0FOUElQRSBjYXJkIHRvIGEgbGVhc2VkIGxpbmUgdXNpbmcgUG9pbnQtdG8tUG9pbnQKLQkgIFByb3RvY29sIChQUFApLgotCi0JICBVc2VzIGluLWtlcm5lbCBTeW5jUFBQIHByb3RvY29sIG92ZXIgdGhlIFNhbmdvbWEgSERMQyBTdHJlYW1pbmcKLQkgIGFkYXB0ZXIuIEluIHRoaXMgY2FzZSBlYWNoIFNhbmdvbWEgYWRhcHRlciBwb3J0IGNhbiBzdXBwb3J0IGFuCi0JICBpbmRlcGVuZGVudCBQUFAgY29ubmVjdGlvbi4gRm9yIGV4YW1wbGUsIGEgc2luZ2xlIFF1YWQtUG9ydCBQQ0kKLQkgIGFkYXB0ZXIgY2FuIHN1cHBvcnQgdXAgdG8gZm91ciBpbmRlcGVuZGVudCBQUFAgbGlua3MuIFRoZSBQUFAKLQkgIG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gUzUxNC1QQ0kvUzUwOC1JU0EgY2FyZHMuCi0KLQkgIFNheSBZIGFuZCB0aGUgTXVsdGktUG9ydCBQUFAgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIuCi0KIGNvbmZpZyBDWUNMQURFU19TWU5DCiAJdHJpc3RhdGUgIkN5Y2xvbSAyWCh0bSkgY2FyZHMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBXQU5fUk9VVEVSX0RSSVZFUlMgJiYgKFBDSSB8fCBJU0EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93YW4vTWFrZWZpbGUKaW5kZXggY2U2YzU2Yi4uODIzYzZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZQpAQCAtNSwxNCArNSw2IEBACiAjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLgogIwogCi13YW5waXBlLXkJCQk6PSBzZGxhbWFpbi5vIHNkbGFfZnQxLm8KLXdhbnBpcGUtJChDT05GSUdfV0FOUElQRV9YMjUpCSs9IHNkbGFfeDI1Lm8KLXdhbnBpcGUtJChDT05GSUdfV0FOUElQRV9GUikJKz0gc2RsYV9mci5vCi13YW5waXBlLSQoQ09ORklHX1dBTlBJUEVfQ0hETEMpCSs9IHNkbGFfY2hkbGMubwotd2FucGlwZS0kKENPTkZJR19XQU5QSVBFX1BQUCkJKz0gc2RsYV9wcHAubwotd2FucGlwZS0kKENPTkZJR19XQU5QSVBFX01VTFRQUFApICs9IHdhbnBpcGVfbXVsdHBwcC5vCi13YW5waXBlLW9ianMJCQk6PSAkKHdhbnBpcGUteSkKLQogY3ljbG9teC15ICAgICAgICAgICAgICAgICAgICAgICA6PSBjeWN4X21haW4ubwogY3ljbG9teC0kKENPTkZJR19DWUNMT01YX1gyNSkJKz0gY3ljeF94MjUubwogY3ljbG9teC1vYmpzCQkJOj0gJChjeWNsb214LXkpICAKQEAgLTQzLDExICszNSw2IEBACiAKIG9iai0kKENPTkZJR19ETENJKQkJKz0gZGxjaS5vIAogb2JqLSQoQ09ORklHX1NETEEpCQkrPSBzZGxhLm8KLWlmZXEgKCQoQ09ORklHX1dBTlBJUEVfTVVMVFBQUCkseSkKLSAgb2JqLSQoQ09ORklHX1ZFTkRPUl9TQU5HT01BKSArPSBzZGxhZHJ2Lm8gd2FucGlwZS5vIHN5bmNwcHAubwkKLWVsc2UKLSAgb2JqLSQoQ09ORklHX1ZFTkRPUl9TQU5HT01BKSArPSBzZGxhZHJ2Lm8gd2FucGlwZS5vCi1lbmRpZgogb2JqLSQoQ09ORklHX0NZQ0xBREVTX1NZTkMpCSs9IGN5Y3hfZHJ2Lm8gY3ljbG9teC5vCiBvYmotJChDT05GSUdfTEFQQkVUSEVSKQkJKz0gbGFwYmV0aGVyLm8KIG9iai0kKENPTkZJR19TQk5JKQkJKz0gc2JuaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFfY2hkbGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk2ZDI5Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYV9jaGRsYy5jCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLiBDaXNjbyBIRExDIG1vZHVsZS4KLSoKLSogQXV0aG9yczogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrICAKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI4LCAyMDAxICBOZW5hZCBDb3JiaWMJVXBkYXRlZCBpZl90eF90aW1lb3V0KCkgcm91dGluZSBmb3IgCi0qIAkJCQkyLjQuWCBrZXJuZWxzLgotKiBKYW4gMjUsIDIwMDEgIE5lbmFkIENvcmJpYwlBZGRlZCBhIFRUWSBTeW5jIHNlcmlhbCBkcml2ZXIgb3ZlciB0aGUKLSogCQkJCUhETEMgc3RyZWFtaW5nIHByb3RvY29sCi0qIAkJCQlBZGRlZCBhIFRUWSBBc3luYyBzZXJpYWwgZHJpdmVyIG92ZXIgdGhlCi0qIAkJCQlBc3luYyBwcm90b2NvbC4KLSogRGVjIDE1LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgVXBkYXRlZCBmb3IgMi40LlggS2VybmVsIHN1cHBvcnQKLSogTm92IDEzLCAyMDAwICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgdHJ1ZSBpbnRlcmZhY2UgdHlwZSBlbmNvZGluZyBvcHRpb24uCi0qIAkJCQlUY3BkdW1wIGRvZXNuJ3Qgc3VwcG9ydCBDSERMQyBpbnRlZmFjZQotKiAJCQkJdHlwZXMsIHRvIGZpeCB0aGlzICJ0cnVlIHR5cGUiIG9wdGlvbiB3aWxsIHNldAotKiAJCQkJdGhlIGludGVyZmFjZSB0eXBlIHRvIFJBVyBJUCBtb2RlLgotKiBOb3YgMDcsIDIwMDAgIE5lbmFkIENvcmJpYwlBZGRlZCBzZWN1cml0eSBmZWF0dXJlcyBmb3IgVURQIGRlYnVnZ2luZzoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVueSBhbGwgYW5kIHNwZWNpZnkgYWxsb3dlZCByZXF1ZXN0cy4KLSogSnVuIDIwLCAyMDAwICBOZW5hZCBDb3JiaWMJRml4ZWQgdGhlIEFQSSBJUCBFUlJPUiBidWcuIENhdXNlZCBieSB0aGUgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdCB1cGRhdGUuCi0qIE1heSAwOSwgMjAwMAlOZW5hZCBDb3JiaWMJT3B0aW9uIHRvIGJyaW5nIGRvd24gYW4gaW50ZXJmYWNlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwb24gZGlzY29ubmVjdC4KLSogTWFyIDIzLCAyMDAwICBOZW5hZCBDb3JiaWMJSW1wcm92ZWQgdGFzayBxdWV1ZSwgYmggaGFuZGxpbmcuCi0qIE1hciAxNiwgMjAwMAlOZW5hZCBDb3JiaWMJRml4ZWQgdGhlIFNMQVJQIER5bmFtaWMgSVAgYWRkcmVzc2luZy4KLSogTWFyIDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJQnVnIEZpeDogY29ycnVwdGVkIG1ib3ggcmVjb3ZlcnkuCi0qIEZlYiAxMCwgMjAwMCAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIEFTWU5DIHN1cHBvcnQuCi0qIEZlYiAwOSwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEZpeGVkIHR3byBzaHV0ZG93biBidWdzIGluIHVwZGF0ZSgpIGFuZAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9zdGF0cygpIGZ1bmN0aW9ucy4KLSogSmFuIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgYSBzdGFydHVwIHdhbnBpcGUgc3RhdGUgcmFjaW5nLCAgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiBiZXR3ZWVuIGlmX29wZW4gYW5kIGlzci4gCi0qIEphbiAxMCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIG5ldyBzb2NrZXQgQVBJIHN1cHBvcnQuCi0qIERldiAxNSwgMTk5OSAgTmVuYWQgQ29yYmljICAgIEZpeGVkIHVwIGhlYWRlciBmaWxlcyBmb3IgMi4wLlgga2VybmVscwotKiBOb3YgMjAsIDE5OTkgIE5lbmFkIENvcmJpYyAJRml4ZWQgemVybyBsZW5ndGggQVBJIGJ1Zy4KLSogU2VwIDMwLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgZHluYW1pYyBJUCBhbmQgcm91dGUgc2V0dXAuCi0qIFNlcCAyMywgMTk5OSAgTmVuYWQgQ29yYmljICAgIEFkZGVkIFNNUCBzdXBwb3J0LCBmaXhlZCB0cmFjaW5nIAotKiBTZXAgMTMsIDE5OTkgIE5lbmFkIENvcmJpYwlTcGxpdCB1cCBQb3J0IDAgYW5kIDEgaW50byBzZXBhcmF0ZSBkZXZpY2VzLgotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKiBPY3QgMzAsIDE5OTgJSmFzcHJlZXQgU2luZ2gJQWRkZWQgU3VwcG9ydCBmb3IgQ0hETEMgQVBJIChIRExDIFNUUkVBTUlORykuCi0qIE9jdCAyOCwgMTk5OAlKYXNwcmVldCBTaW5naAlBZGRlZCBTdXBwb3J0IGZvciBEdWFsIFBvcnQgQ0hETEMuCi0qIEF1ZyAwNywgMTk5OAlEYXZpZCBGb25nCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEXyogZGVmaW5lcyAqLwotCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4JCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2NoZGxjLmg+CQkvKiBDSERMQyBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2FzeS5oPiAgICAgICAgICAgCS8qIENIRExDIChhc3luYykgQVBJIGRlZmluaXRpb25zICovCi0KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPiAgICAvKiBTb2NrZXQgRHJpdmVyIGNvbW1vbiBhcmVhICovCi0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgkJCi0KLS8qIFRUWSBJbmNsdWRlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkJMHgwMQotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFCQkweDAyCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcJCTB4MTAKLQotI2RlZmluZSBNQVhfSVBfRVJST1JTCTEwCi0KLSNkZWZpbmUgVFRZX0NIRExDX01BWF9NVFUJMjAwMAotI2RlZmluZQlDSERMQ19ERkxUX0RBVEFfTEVOCTE1MDAJCS8qIGRlZmF1bHQgTVRVICovCi0jZGVmaW5lIENIRExDX0hEUl9MRU4JCTEKLQotI2RlZmluZSBDSERMQ19BUEkgMHgwMQotCi0jZGVmaW5lIFBPUlQoeCkgICAoeCA9PSAwID8gIlBSSU1BUlkiIDogIlNFQ09OREFSWSIgKQotI2RlZmluZSBNQVhfQkhfQlVGRgkxMAotCi0vLyNkZWZpbmUgUFJJTlRfREVCVUcKLSNpZmRlZiBQUklOVF9ERUJVRwotI2RlZmluZSBkYmdfcHJpbnRrKGZvcm1hdCwgYS4uLikgcHJpbnRrKGZvcm1hdCwgIyMgYSkKLSNlbHNlCi0jZGVmaW5lIGRiZ19wcmludGsoZm9ybWF0LCBhLi4uKQotI2VuZGlmICAKLQotLyoqKioqKkRhdGEgU3RydWN0dXJlcyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW4gdGhlIHByaXZhdGUgZGF0YSBhcmVhIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgotICogVGhlIGNhcmQgc3RydWN0dXJlIHVzZWQgdG8gb2NjdXB5IHRoZSBwcml2YXRlIGFyZWEgYnV0IG5vdyB0aGUgZm9sbG93aW5nIAotICogc3RydWN0dXJlIHdpbGwgaW5jb3Jwb3JhdGUgdGhlIGNhcmQgc3RydWN0dXJlIGFsb25nIHdpdGggQ0hETEMgc3BlY2lmaWMgZGF0YQotICovCi0KLXR5cGVkZWYgc3RydWN0IGNoZGxjX3ByaXZhdGVfYXJlYQotewotCXdhbnBpcGVfY29tbW9uX3QgY29tbW9uOwotCXNkbGFfdAkJKmNhcmQ7Ci0JaW50IAkJVHJhY2luZ0VuYWJsZWQ7CQkvKiBGb3IgZW5hYmxpbmcgVHJhY2luZyAqLwotCXVuc2lnbmVkIGxvbmcgCWN1cnJfdHJhY2VfYWRkcjsJLyogVXNlZCBmb3IgVHJhY2luZyAqLwotCXVuc2lnbmVkIGxvbmcgCXN0YXJ0X3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAJZW5kX3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAJYmFzZV9hZGRyX3RyYWNlX2J1ZmZlcjsKLQl1bnNpZ25lZCBsb25nIAllbmRfYWRkcl90cmFjZV9idWZmZXI7Ci0JdW5zaWduZWQgc2hvcnQgCW51bWJlcl90cmFjZV9lbGVtZW50czsKLQl1bnNpZ25lZCAgCWF2YWlsYWJsZV9idWZmZXJfc3BhY2U7Ci0JdW5zaWduZWQgbG9uZyAJcm91dGVyX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgY2hhciAJcm91dGVfc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIgCXJvdXRlX3JlbW92ZWQ7Ci0JdW5zaWduZWQgbG9uZyAJdGlja19jb3VudGVyOwkJLyogRm9yIDVzIHRpbWVvdXQgY291bnRlciAqLwotCXVuc2lnbmVkIGxvbmcgCXJvdXRlcl91cF90aW1lOwotICAgICAgICB1MzIgICAgICAgICAgICAgSVBfYWRkcmVzczsJCS8qIElQIGFkZHJlc3NpbmcgKi8KLSAgICAgICAgdTMyICAgICAgICAgICAgIElQX25ldG1hc2s7Ci0JdTMyCQlpcF9sb2NhbDsKLQl1MzIJCWlwX3JlbW90ZTsKLQl1MzIgCQlpcF9sb2NhbF90bXA7Ci0JdTMyCQlpcF9yZW1vdGVfdG1wOwotCXU4CQlpcF9lcnJvcjsKLQl1OAkJY29uZmlnX2NoZGxjOwotCXU4IAkJY29uZmlnX2NoZGxjX3RpbWVvdXQ7Ci0JdW5zaWduZWQgY2hhciAgbWM7CQkJLyogTXVsaXRjYXN0IHN1cHBvcnQgb24vb2ZmICovCi0JdW5zaWduZWQgc2hvcnQgdWRwX3BrdF9sZ3RoOwkJLyogdWRwIHBhY2tldCBwcm9jZXNzaW5nICovCi0JY2hhciB1ZHBfcGt0X3NyYzsKLQljaGFyIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCXVuc2lnbmVkIHNob3J0IHRpbWVyX2ludF9lbmFibGVkOwotCWNoYXIgdXBkYXRlX2NvbW1zX3N0YXRzOwkJLyogdXBkYXRpbmcgY29tbXMgc3RhdHMgKi8KLQotCWJoX2RhdGFfdCAqYmhfaGVhZDsJICAJICAvKiBDaXJjdWxhciBidWZmZXIgZm9yIGNoZGxjX2JoICovCi0JdW5zaWduZWQgbG9uZyAgdHFfd29ya2luZzsKLQl2b2xhdGlsZSBpbnQgIGJoX3dyaXRlOwotCXZvbGF0aWxlIGludCAgYmhfcmVhZDsKLQlhdG9taWNfdCAgYmhfYnVmZl91c2VkOwotCQotCXVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlX2Rvd247Ci0KLQkvKiBQb2xsaW5nIHdvcmsgcXVldWUgZW50cnkuIEVhY2ggaW50ZXJmYWNlCi0gICAgICAgICAqIGhhcyBpdHMgb3duIHdvcmsgcXVldWUgZW50cnksIHdoaWNoIGlzIHVzZWQKLSAgICAgICAgICogdG8gZGVmZXIgZXZlbnRzIGZyb20gdGhlIGludGVycnVwdCAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBwb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgcG9sbF9kZWxheV90aW1lcjsKLQotCXU4IGdhdGV3YXk7Ci0JdTggdHJ1ZV9pZl9lbmNvZGluZzsKLQkvL0ZJWE1FOiBhZGQgZHJpdmVyIHN0YXRzIGFzIHBlciBmcmFtZSByZWxheSEKLQotfSBjaGRsY19wcml2YXRlX2FyZWFfdDsKLQotLyogUm91dGUgU3RhdHVzIG9wdGlvbnMgKi8KLSNkZWZpbmUgTk9fUk9VVEUJMHgwMAotI2RlZmluZSBBRERfUk9VVEUJMHgwMQotI2RlZmluZSBST1VURV9BRERFRAkweDAyCi0jZGVmaW5lIFJFTU9WRV9ST1VURQkweDAzCi0KLQotLyogdmFyaWFibGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIEZUMSBtb25pdG9yIHN0YXR1cyAqLwotc3RhdGljIGludCByQ291bnQgPSAwOwotCi0vKiB2YXJpYWJsZSBmb3IgdHJhY2tpbmcgaG93IG1hbnkgaW50ZXJmYWNlcyB0byBvcGVuIGZvciBXQU5QSVBFIG9uIHRoZQotICAgdHdvIHBvcnRzICovCi0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIGNhbGxlZCBieSB0aGUgV0FOIHJvdXRlciBtb2R1bGUuICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KTsKLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKTsKLQotLyogTmV0d29yayBkZXZpY2UgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIGludCBpZl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLCB2b2lkKiBkYWRkciwgdm9pZCogc2FkZHIsCi0JCSAgICAgdW5zaWduZWQgbGVuKTsKLQotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotICAKLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLQotLyogQ0hETEMgRmlybXdhcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBjaGRsY19jb25maWd1cmUgCShzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEpOwotc3RhdGljIGludCBjaGRsY19jb21tX2VuYWJsZSAJKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IGNoZGxjX3JlYWRfdmVyc2lvbiAJKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKTsKLXN0YXRpYyBpbnQgY2hkbGNfc2V0X2ludHJfbW9kZSAJKHNkbGFfdCogY2FyZCwgdW5zaWduZWQgbW9kZSk7Ci1zdGF0aWMgaW50IGNoZGxjX3NlbmQgKHNkbGFfdCogY2FyZCwgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF9vcF9zdGF0cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfZXJyb3IgKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iKTsKLQotCi1zdGF0aWMgaW50IGNoZGxjX2Rpc2FibGVfY29tbV9zaHV0ZG93biAoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgQ0hETEMgRnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNldF9jaGRsY19jb25maWcgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCBpbml0X2NoZGxjX3R4X3J4X2J1ZmYoIHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCB1cGRhdGVfY29tbXNfc3RhdHMoc2RsYV90KiBjYXJkLAotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyBpbnQgY29uZmlndXJlX2lwIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB1bmNvbmZpZ3VyZV9pcCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIHBvcnRfc2V0X3N0YXRlIChzZGxhX3QgKmNhcmQsIGludCk7Ci1zdGF0aWMgaW50IGNvbmZpZ19jaGRsYyAoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKTsKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9jaGRsY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgY2hkbGNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGNoZGxjX3BvbGxfZGVsYXkgKHVuc2lnbmVkIGxvbmcgZGV2X3B0cik7Ci0KLQotLyogTWlzY2VsbGFuZW91cyBhc3luY2hyb25vdXMgaW50ZXJmYWNlIEZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBzZXRfYXN5X2NvbmZpZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgYXN5X2NvbW1fZW5hYmxlIChzZGxhX3QqIGNhcmQpOwotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIHdwY19pc3IgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKik7Ci0KLS8qIEJvdHRvbSBoYWxmIGhhbmRsZXJzICovCi1zdGF0aWMgdm9pZCBjaGRsY193b3JrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBjaGRsY193b3JrX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKTsKLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IgLCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyBpbnQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCAgCi0JCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSk7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqLCBpbnQpOwotc3RhdGljIHZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotCi0KLXN0YXRpYyBpbnQgIEludHJfdGVzdF9jb3VudGVyOwotCi0vKiBUVFkgR2xvYmFsIERlZmluaXRpb25zICovCi0KLSNkZWZpbmUgTlJfUE9SVFMgNAotI2RlZmluZSBXQU5fVFRZX01BSk9SIDIyNgotI2RlZmluZSBXQU5fVFRZX01JTk9SIDAKLQotI2RlZmluZSBXQU5fQ0FSRChwb3J0KSAodHR5X2NhcmRfbWFwW3BvcnRdKQotI2RlZmluZSBNSU5fUE9SVCAwCi0jZGVmaW5lIE1BWF9QT1JUIE5SX1BPUlRTLTEgCi0KLSNkZWZpbmUgQ1JDX0xFTkdUSCAyCi0KLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfaW5pdChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfcmVjZWl2ZShzZGxhX3QgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90cmlnZ2VyX3BvbGwoc2RsYV90ICpjYXJkKTsKLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyIHNlcmlhbF9kcml2ZXI7Ci1zdGF0aWMgaW50IHR0eV9pbml0X2NudD0wOwotCi1zdGF0aWMgc3RydWN0IHNlcmlhbF9zdGF0ZSByc190YWJsZVtOUl9QT1JUU107Ci0KLXN0YXRpYyBjaGFyIHR0eV9kcml2ZXJfbW9kZT1XQU5PUFRfVFRZX1NZTkM7Ci0KLXN0YXRpYyBjaGFyICpvcHRfZGVjb2RlW10gPSB7Ik5PTkUiLCJDUlRTQ1RTIiwiWE9OWE9GRi1SWCIsCi0JICAJICAgICAgICAgICAgICJDUlRTQ1RTIFhPTlhPRkYtUlgiLCJYT05YT0ZGLVRYIiwKLQkJICAgICAgICAgICAgICJDUlRTQ1RTIFhPTlhPRkYtVFgiLCJDUlRTQ1RTIFhPTlhPRkYifTsKLXN0YXRpYyBjaGFyICpwX2RlY29kZVtdID0geyJOT05FIiwiT0REIiwiRVZFTiJ9OwotCi1zdGF0aWMgdm9pZCogdHR5X2NhcmRfbWFwW05SX1BPUlRTXSA9IHtOVUxMLE5VTEwsTlVMTCxOVUxMfTsKLQotCi0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdwY19pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpCi17Ci0JdW5zaWduZWQgY2hhciBwb3J0X251bTsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgbWF4X3Blcm1pdHRlZF9iYXVkID0gMDsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFnczsKLQotCXVuaW9uCi0JCXsKLQkJY2hhciBzdHJbODBdOwotCQl9IHU7Ci0Jdm9sYXRpbGUgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYjE7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19DSERMQykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCQkgIGNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEZpbmQgb3V0IHdoaWNoIFBvcnQgdG8gdXNlICovCi0JaWYgKChjb25mLT5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSkgfHwgKGNvbmYtPmNvbW1fcG9ydCA9PSBXQU5PUFRfU0VDKSl7Ci0JCWlmIChjYXJkLT5uZXh0KXsKLQotCQkJaWYgKGNvbmYtPmNvbW1fcG9ydCAhPSBjYXJkLT5uZXh0LT51LmMuY29tbV9wb3J0KXsKLQkJCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SIC0gJXMgcG9ydCB1c2VkIVxuIiwKLSAgICAgICAgCQkgICAgICAgIAljYXJkLT53YW5kZXYubmFtZSwgUE9SVChjb25mLT5jb21tX3BvcnQpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfWVsc2V7Ci0JCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQl9Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIEludmFsaWQgUG9ydCBTZWxlY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCi0KLQkvKiBJbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyAqLwotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQotCQlpZiAoY2FyZC0+dS5jLmNvbW1fcG9ydCA9PSBXQU5PUFRfUFJJKXsJCi0JCQljYXJkLT5tYm94ICA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2U7Ci0JCX1lbHNlewotCQkJY2FyZC0+bWJveCAgPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlICsgCi0JCQkJU0VDX0JBU0VfQUREUl9NQl9TVFJVQ1QgLSBQUklfQkFTRV9BRERSX01CX1NUUlVDVDsKLQkJfQkKLQl9ZWxzZXsgCi0JCS8qIGZvciBhIFM1MTQgYWRhcHRlciwgc2V0IGEgcG9pbnRlciB0byB0aGUgYWN0dWFsIG1haWxib3ggaW4gdGhlICovCi0JCS8qIGFsbG9jYXRlZCB2aXJ0dWFsIG1lbW9yeSBhcmVhICovCi0JCWlmIChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpewotCQkJY2FyZC0+bWJveCA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyBQUklfQkFTRV9BRERSX01CX1NUUlVDVDsKLQkJfWVsc2V7Ci0JCQljYXJkLT5tYm94ID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIFNFQ19CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9CQotCX0KLQotCW1iID0gbWIxID0gY2FyZC0+bWJveDsKLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0KLQkJLyogVGhlIGJvYXJkIHdpbGwgcGxhY2UgYW4gJ0knIGluIHRoZSByZXR1cm4gY29kZSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzCi0JICAgCXJlYWR5IHRvIGFjY2VwdCBjb21tYW5kcy4gIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGNvbXBsZXRlZCBpbiBsZXNzCi0gICAgICAgICAgIAl0aGFuIDEgc2Vjb25kLiAqLwotCi0JCXRpbWVvdXQgPSBqaWZmaWVzOwotCQl3aGlsZSAobWItPnJldHVybl9jb2RlICE9ICdJJykJLyogV2FpdCAxcyBmb3IgYm9hcmQgdG8gaW5pdGlhbGl6ZSAqLwotCQkJaWYgKChqaWZmaWVzIC0gdGltZW91dCkgPiAxKkhaKSBicmVhazsKLQotCQlpZiAobWItPnJldHVybl9jb2RlICE9ICdJJykgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogSW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlZCBieSBhZGFwdGVyXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSByZXByZXNlbnRhdGl2ZS5cbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQotCWlmIChjaGRsY19yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIENpc2NvIEhETEMgZmlybXdhcmUgdiVzXG4iLAotCQljYXJkLT5kZXZuYW1lLCB1LnN0cik7IAotCi0JY2FyZC0+aXNyCQkJPSAmd3BjX2lzcjsKLQljYXJkLT5wb2xsCQkJPSBOVUxMOwotCWNhcmQtPmV4ZWMJCQk9IE5VTEw7Ci0JY2FyZC0+d2FuZGV2LnVwZGF0ZQkJPSAmdXBkYXRlOwotIAljYXJkLT53YW5kZXYubmV3X2lmCQk9ICZuZXdfaWY7Ci0JY2FyZC0+d2FuZGV2LmRlbF9pZgkJPSBOVUxMOwotCWNhcmQtPndhbmRldi51ZHBfcG9ydCAgIAk9IGNvbmYtPnVkcF9wb3J0OwotCWNhcmQtPmRpc2FibGVfY29tbQkJPSAmZGlzYWJsZV9jb21tOwotCWNhcmQtPndhbmRldi5uZXdfaWZfY250ID0gMDsKLQotCS8qIHJlc2V0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlICd1cGRhdGUoKScgcHJvYyBoYXMgYmVlbiBjYWxsZWQgKi8KLQljYXJkLT51LmMudXBkYXRlX2NhbGxfY291bnQgPSAwOwotCQotCWNhcmQtPndhbmRldi50dGwgPSBjb25mLT50dGw7Ci0JY2FyZC0+d2FuZGV2LmludGVyZmFjZSA9IGNvbmYtPmludGVyZmFjZTsgCi0KLQlpZiAoKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1NFQyAmJiBjb25mLT5pbnRlcmZhY2UgPT0gV0FOT1BUX1YzNSkmJgotCSAgICBjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIFYzNSBJbnRlcmZhY2Ugbm90IHN1cHBvcnRlZCBvbiBTNTA4ICVzIHBvcnQgXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgUE9SVChjYXJkLT51LmMuY29tbV9wb3J0KSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IGNvbmYtPmNsb2NraW5nOwotCi0JcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogaW4gQVBJIG1vZGUsIHdlIGNhbiBjb25maWd1cmUgZm9yICJyZWNlaXZlIG9ubHkiIGJ1ZmZlcmluZyAqLwotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCWNhcmQtPnUuYy5yZWNlaXZlX29ubHkgPSBjb25mLT5yZWNlaXZlX29ubHk7Ci0JCWlmKGNvbmYtPnJlY2VpdmVfb25seSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogQ29uZmlndXJlZCBmb3IgJ3JlY2VpdmUgb25seScgbW9kZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQl9Ci0KLQkvKiBTZXR1cCBQb3J0IEJwcyAqLwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKSB7Ci0JCWlmKChwb3J0X251bSA9PSBXQU5PUFRfUFJJKSB8fCBjYXJkLT51LmMucmVjZWl2ZV9vbmx5KSB7Ci0JCQkvKiBGb3IgUHJpbWFyeSBQb3J0IDAgKi8KLSAgICAgICAgICAgICAgIAkJbWF4X3Blcm1pdHRlZF9iYXVkID0KLQkJCQkoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLQkJCQlQUklfTUFYX0JBVURfUkFURV9TNTE0IDogCi0JCQkJUFJJX01BWF9CQVVEX1JBVEVfUzUwODsKLQotCQl9ZWxzZSBpZihwb3J0X251bSA9PSBXQU5PUFRfU0VDKSB7Ci0JCQkvKiBGb3IgU2Vjb25kYXJ5IFBvcnQgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Blcm1pdHRlZF9iYXVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gIAotCQkJaWYoY29uZi0+YnBzID4gbWF4X3Blcm1pdHRlZF9iYXVkKSB7Ci0JCQkJY29uZi0+YnBzID0gbWF4X3Blcm1pdHRlZF9iYXVkOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYXVkIHRvbyBoaWdoIVxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQmF1ZCByYXRlIHNldCB0byAlbHUgYnBzXG4iLCAKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsIG1heF9wZXJtaXR0ZWRfYmF1ZCk7Ci0JCQl9Ci0JCQljYXJkLT53YW5kZXYuYnBzID0gY29uZi0+YnBzOwotCX1lbHNlewotICAgICAgICAJY2FyZC0+d2FuZGV2LmJwcyA9IDA7Ci0gIAl9Ci0KLQkvKiBTZXR1cCB0aGUgUG9ydCBNVFUgKi8KLQlpZigocG9ydF9udW0gPT0gV0FOT1BUX1BSSSkgfHwgY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgewotCi0JCS8qIEZvciBQcmltYXJ5IFBvcnQgMCAqLwotCQljYXJkLT53YW5kZXYubXR1ID0KLQkJCShjb25mLT5tdHUgPj0gTUlOX0xHVEhfQ0hETENfREFUQV9DRkcpID8KLQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBQUklfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLQkJCUNIRExDX0RGTFRfREFUQV9MRU47Ci0JfSBlbHNlIGlmKHBvcnRfbnVtID09IFdBTk9QVF9TRUMpIHsgCi0JCS8qIEZvciBTZWNvbmRhcnkgUG9ydCAxICovCi0JCWNhcmQtPndhbmRldi5tdHUgPQotCQkJKGNvbmYtPm10dSA+PSBNSU5fTEdUSF9DSERMQ19EQVRBX0NGRykgPwotCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5tdHUsIFNFQ19NQVhfTk9fREFUQV9CWVRFU19JTl9GUkFNRSkgOgotCQkJQ0hETENfREZMVF9EQVRBX0xFTjsKLQl9Ci0KLQkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBzdGF0dXMgYXJlYSAqLwotCS8qIFJlYWQgdGhlIENIRExDIENvbmZpZ3VyYXRpb24gYW5kIG9idGFpbjogCi0JICoJUHRyIHRvIHNoYXJlZCBtZW1vcnkgaW5mb3Igc3RydWN0Ci0gICAgICAgICAqIFVzZSB0aGlzIHBvaW50ZXIgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiBjYXJkLT51LmMuZmxhZ3MgIQotIAkgKi8KLQltYjEtPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iMS0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIxKSA/IG1iMS0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotICAgICAgICAgICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotICAgICAgICAgICAgICAgIAllbmFibGVfaXJxKGNhcmQtPmh3LmlycSk7Ci0KLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYjEpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0gICAgICAgICAgICAgICAJY2FyZC0+dS5jLmZsYWdzID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWIxLT5kYXRhKS0+Ci0JCQlwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCkpOwotICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMuZmxhZ3MgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWIxLT5kYXRhKS0+Ci0JCQlwdHJfc2hhcmVkX21lbV9pbmZvX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCX0KLQotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCQotCS8qIFRoaXMgaXMgZm9yIHRoZSBwb3J0cyBsaW5rIHN0YXRlICovCi0JY2FyZC0+d2FuZGV2LnN0YXRlID0gV0FOX0RVQUxQT1JUOwotCWNhcmQtPnUuYy5zdGF0ZSA9IFdBTl9ESVNDT05ORUNURUQ7Ci0KLQotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7CQotCQlpbnQgZXJyOwotCi0JCS8qIFBlcmZvcm0gaW50ZXJydXB0IHRlc3RpbmcgKi8KLQkJZXJyID0gaW50cl90ZXN0KGNhcmQpOwotCi0JCWlmKGVyciB8fCAoSW50cl90ZXN0X2NvdW50ZXIgPCBNQVhfSU5UUl9URVNUX0NPVU5URVIpKSB7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCB0ZXN0IGZhaWxlZCAoJWkpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUGxlYXNlIGNob29zZSBhbm90aGVyIGludGVycnVwdFxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCB0ZXN0IHBhc3NlZCAoJWkpXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JCWNhcmQtPmNvbmZpZ3VyZWQgPSAxOwotCX0KLQotCWlmICgoY2FyZC0+dHR5X29wdD1jb25mLT50dHkpID09IFdBTk9QVF9ZRVMpewotCQlpbnQgZXJyOwotCQljYXJkLT50dHlfbWlub3IgPSBjb25mLT50dHlfbWlub3I7Ci0KLQkJLyogT24gQVNZTkMgY29ubmVjdGlvbnMgaW50ZXJuYWwgY2xvY2tpbmcgCi0JCSAqIGlzIG1hbmRhdG9yeSAqLwotCQlpZiAoKGNhcmQtPnUuYy5hc3luY19tb2RlID0gY29uZi0+dHR5X21vZGUpKXsKLQkJCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IDE7Ci0JCX0KLQkJZXJyPXdhbnBpcGVfdHR5X2luaXQoY2FyZCk7Ci0JCWlmIChlcnIpewotCQkJcmV0dXJuIGVycjsKLQkJfQotCX1lbHNlewotCQotCi0JCWlmIChjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fVElNRVIpKXsKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogIgotCQkJCSJGYWlsZWQgdG8gc2V0IGludGVycnVwdCB0cmlnZ2VycyFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsJCi0gICAgICAgIAl9Ci0JCi0JCS8qIE1hc2sgdGhlIFRpbWVyIGludGVycnVwdCAqLwotCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uICY9IAotCQkJfkFQUF9JTlRfT05fVElNRVI7Ci0JfQotCi0JLyogSWYgd2UgYXJlIHVzaW5nIENIRExDIGluIGJhY2t1cCBtb2RlLCB0aGlzIGZsYWcgd2lsbAotCSAqIGluZGljYXRlIG5vdCB0byBsb29rIGZvciBJUCBhZGRyZXNzZXMgaW4gY29uZmlnX2NoZGxjKCkqLwotCWNhcmQtPnUuYy5iYWNrdXAgPSBjb25mLT5iYWNrdXA7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKiBXQU4gRGV2aWNlIERyaXZlciBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgZGV2aWNlIHN0YXR1cyAmIHN0YXRpc3RpY3MKLSAqIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB3aGVuIHVwZGF0aW5nIHRoZSBQUk9DIGZpbGUgc3lzdGVtIGFuZCByZXR1cm5zCi0gKiB2YXJpb3VzIGNvbW11bmljYXRpb25zIHN0YXRpc3RpY3MuIFRoZXNlIHN0YXRpc3RpY3MgYXJlIGFjY3VtdWxhdGVkIGZyb20gMyAKLSAqIGRpZmZlcmVudCBsb2NhdGlvbnM6Ci0gKiAJMSkgVGhlICdpZl9zdGF0cycgcmVjb3JkZWQgZm9yIHRoZSBkZXZpY2UuCi0gKiAJMikgQ29tbXVuaWNhdGlvbiBlcnJvciBzdGF0aXN0aWNzIG9uIHRoZSBhZGFwdGVyLgotICogICAgICAzKSBDSERMQyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIG9uIHRoZSBhZGFwdGVyLgotICogVGhlIGJvYXJkIGxldmVsIHN0YXRpc3RpY3MgYXJlIHJlYWQgZHVyaW5nIGEgdGltZXIgaW50ZXJydXB0LiBOb3RlIHRoYXQgd2UgCi0gKiByZWFkIHRoZSBlcnJvciBhbmQgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyBkdXJpbmcgY29uc2VjaXRpdmUgdGltZXIgdGlja3Mgc28KLSAqIGFzIHRvIG1pbmltaXplIHRoZSB0aW1lIHRoYXQgd2UgYXJlIGluc2lkZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLSAJc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgdm9sYXRpbGUgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYTsKLSAgICAgICAgU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyogc2FuaXR5IGNoZWNrcyAqLwotCWlmKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCi0JaWYod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIG1vcmUgc2FuaXR5IGNoZWNrcyAqLwotICAgICAgICBpZighY2FyZC0+dS5jLmZsYWdzKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotCi0JaWYodGVzdF9iaXQoUEVSSV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47Ci0KLQlpZigoZGV2PWNhcmQtPndhbmRldi5kZXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0gICAgICAJZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzKXsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCQkJCi0JLyogd2Ugd2lsbCBuZWVkIDIgdGltZXIgaW50ZXJydXB0cyB0byBjb21wbGV0ZSB0aGUgKi8KLQkvKiByZWFkaW5nIG9mIHRoZSBzdGF0aXN0aWNzICovCi0JY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPSAyOwotICAgICAgIAlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF9wZXJtaXNzaW9uIHw9IEFQUF9JTlRfT05fVElNRVI7Ci0JY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCA9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0gIAotCS8qIHdhaXQgYSBtYXhpbXVtIG9mIDEgc2Vjb25kIGZvciB0aGUgc3RhdGlzdGljcyB0byBiZSB1cGRhdGVkICovIAotICAgICAgICB0aW1lb3V0ID0gamlmZmllczsKLSAgICAgICAgZm9yKDs7KSB7Ci0JCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID09IDApCi0JCQlicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoKGppZmZpZXMgLSB0aW1lb3V0KSA+ICgxICogSFopKXsKLSAgICAJCQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0gCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPQotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOyAKLSAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotICAgICAgICB9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotCi0KLQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlndXJpbmcgSW50ZXJmYWNlOiAlc1xuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNvbmYtPm5hbWUpOwotIAotCWlmICgoY29uZi0+bmFtZVswXSA9PSAnXDAnKSB8fCAoc3RybGVuKGNvbmYtPm5hbWUpID4gV0FOX0lGTkFNRV9TWikpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkJCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JY2hkbGNfcHJpdl9hcmVhID0ga21hbGxvYyhzaXplb2YoY2hkbGNfcHJpdmF0ZV9hcmVhX3QpLCBHRlBfS0VSTkVMKTsKLQkKLQlpZihjaGRsY19wcml2X2FyZWEgPT0gTlVMTCkgCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGNoZGxjX3ByaXZfYXJlYSwgMCwgc2l6ZW9mKGNoZGxjX3ByaXZhdGVfYXJlYV90KSk7Ci0KLQljaGRsY19wcml2X2FyZWEtPmNhcmQgPSBjYXJkOyAKLQljaGRsY19wcml2X2FyZWEtPmNvbW1vbi5zayA9IE5VTEw7Ci0JY2hkbGNfcHJpdl9hcmVhLT5jb21tb24uZnVuYyA9IE5VTEw7CQotCi0JLyogaW5pdGlhbGl6ZSBkYXRhICovCi0Jc3RyY3B5KGNhcmQtPnUuYy5pZl9uYW1lLCBjb25mLT5uYW1lKTsKLQotCWlmKGNhcmQtPndhbmRldi5uZXdfaWZfY250ID4gMCkgewotICAgICAgICAgICAgICAgIGtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCWNhcmQtPndhbmRldi5uZXdfaWZfY250Kys7Ci0KLQljaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkID0gMDsKLQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IE5PX1JPVVRFOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfcmVtb3ZlZCA9IDA7Ci0KLQljYXJkLT51LmMuYXN5bmNfbW9kZSA9IGNvbmYtPmFzeW5jX21vZGU7Ci0JCi0JLyogc2V0dXAgZm9yIGFzeW5jaHJvbm91cyBtb2RlICovCi0JaWYoY29uZi0+YXN5bmNfbW9kZSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlndXJpbmcgZm9yIGFzeW5jaHJvbm91cyBtb2RlXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLQotCQlpZihjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6QXN5bmNocm9ub3VzIG1vZGUgb24gc2Vjb25kYXJ5IHBvcnQgb25seVxuIiwKLQkJCQkJd2FuZGV2LT5uYW1lKTsKLQkJCWtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JICAgICAgIAlpZihzdHJjbXAoY29uZi0+dXNlZGJ5LCAiV0FOUElQRSIpID09IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBSdW5uaW5nIGluIFdBTklQRSBBc3luYyBNb2RlXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQl3YW5kZXYtPm5hbWUpOwotCQkJY2FyZC0+dS5jLnVzZWRieSA9IFdBTlBJUEU7Ci0JCX1lbHNlewotCQkJY2FyZC0+dS5jLnVzZWRieSA9IEFQSTsKLQkJfQotCi0JCWlmKCFjYXJkLT53YW5kZXYuY2xvY2tpbmcpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEFzeW5jaC4gY2xvY2tpbmcgbXVzdCBiZSAnSW50ZXJuYWwnXG4iLAotCQkJCXdhbmRldi0+bmFtZSk7Ci0JCQlrZnJlZShjaGRsY19wcml2X2FyZWEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZigoY2FyZC0+d2FuZGV2LmJwcyA8IE1JTl9BU1lfQkFVRF9SQVRFKSB8fAotCQkJKGNhcmQtPndhbmRldi5icHMgPiBNQVhfQVNZX0JBVURfUkFURSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZWxlY3RlZCBiYXVkIHJhdGUgaXMgaW52YWxpZC5cbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIk11c3QgYmUgYmV0d2VlbiAldSBhbmQgJXUgYnBzLlxuIiwKLQkJCQlNSU5fQVNZX0JBVURfUkFURSwgTUFYX0FTWV9CQVVEX1JBVEUpOwotCQkJa2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJY2FyZC0+dS5jLmFwaV9vcHRpb25zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+YXN5X2RhdGFfdHJhbnMgPT0gV0FOT1BUX1lFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dS5jLmFwaV9vcHRpb25zIHw9IEFTWV9SWF9EQVRBX1RSQU5TUEFSRU5UOwotICAgICAgICAgICAgICAgIH0KLQkJCi0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gMDsKLQkJaWYgKGNvbmYtPnJ0c19oc19mb3JfcmVjZWl2ZSA9PSBXQU5PUFRfWUVTKSB7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfUlRTX0hTX0ZPUl9SWDsKLQkgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+eG9uX3hvZmZfaHNfZm9yX3JlY2VpdmUgPT0gV0FOT1BUX1lFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgfD0gQVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmYtPnhvbl94b2ZmX2hzX2Zvcl90cmFuc21pdCA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfWE9OX1hPRkZfSFNfRk9SX1RYOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29uZi0+ZGNkX2hzX2Zvcl90cmFuc21pdCA9PSBXQU5PUFRfWUVTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBBU1lfRENEX0hTX0ZPUl9UWDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmYtPmN0c19oc19mb3JfdHJhbnNtaXQgPT0gV0FOT1BUX1lFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+dS5jLnByb3RvY29sX29wdGlvbnMgfD0gQVNZX0NUU19IU19GT1JfVFg7Ci0gICAgICAgICAgICAgICAgfQotCi0JCWNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyID0gY29uZi0+dHhfYml0c19wZXJfY2hhcjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhfYml0c19wZXJfY2hhciA9IGNvbmYtPnJ4X2JpdHNfcGVyX2NoYXI7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnN0b3BfYml0cyA9IGNvbmYtPnN0b3BfYml0czsKLQkJY2FyZC0+dS5jLnBhcml0eSA9IGNvbmYtPnBhcml0eTsKLQkJY2FyZC0+dS5jLmJyZWFrX3RpbWVyID0gY29uZi0+YnJlYWtfdGltZXI7Ci0JCWNhcmQtPnUuYy5pbnRlcl9jaGFyX3RpbWVyID0gY29uZi0+aW50ZXJfY2hhcl90aW1lcjsKLQkJY2FyZC0+dS5jLnJ4X2NvbXBsZXRlX2xlbmd0aCA9IGNvbmYtPnJ4X2NvbXBsZXRlX2xlbmd0aDsKLQkJY2FyZC0+dS5jLnhvbl9jaGFyID0gY29uZi0+eG9uX2NoYXI7Ci0KLQl9IGVsc2UgewkvKiBzZXR1cCBmb3Igc3luY2hyb25vdXMgbW9kZSAqLwotCi0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gMDsKLQkJaWYgKGNvbmYtPmlnbm9yZV9kY2QgPT0gV0FOT1BUX1lFUyl7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQ7Ci0JCX0KLQkJaWYgKGNvbmYtPmlnbm9yZV9jdHMgPT0gV0FOT1BUX1lFUyl7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PSBJR05PUkVfQ1RTX0ZPUl9MSU5LX1NUQVQ7Ci0JCX0KLQotCQlpZiAoY29uZi0+aWdub3JlX2tlZXBhbGl2ZSA9PSBXQU5PUFRfWUVTKSB7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyB8PQotCQkJCUlHTk9SRV9LUEFMVl9GT1JfTElOS19TVEFUOwotCQkJY2FyZC0+dS5jLmtwYWx2X3R4ICA9IE1JTl9UeF9LUEFMVl9USU1FUjsgCi0JCQljYXJkLT51LmMua3BhbHZfcnggID0gTUlOX1J4X0tQQUxWX1RJTUVSOyAKLQkJCWNhcmQtPnUuYy5rcGFsdl9lcnIgPSBNSU5fS1BBTFZfRVJSX1RPTDsgCi0KLQkJfSBlbHNlIHsgICAvKiBEbyBub3QgaWdub3JlIGtlZXBhbGl2ZXMgKi8KLQkJCWNhcmQtPnUuYy5rcGFsdl90eCA9Ci0JCQkJKChjb25mLT5rZWVwYWxpdmVfdHhfdG1yIC0gTUlOX1R4X0tQQUxWX1RJTUVSKQotCQkJCT49IDApID8KLQkgICAJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmtlZXBhbGl2ZV90eF90bXIsTUFYX1R4X0tQQUxWX1RJTUVSKSA6Ci0JCQkJREVGQVVMVF9UeF9LUEFMVl9USU1FUjsKLQotCQkJY2FyZC0+dS5jLmtwYWx2X3J4ID0KLQkJICAgCQkoKGNvbmYtPmtlZXBhbGl2ZV9yeF90bXIgLSBNSU5fUnhfS1BBTFZfVElNRVIpCi0JCQkJPj0gMCkgPwotCSAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+a2VlcGFsaXZlX3J4X3RtcixNQVhfUnhfS1BBTFZfVElNRVIpIDoKLQkJCQlERUZBVUxUX1J4X0tQQUxWX1RJTUVSOwotCi0JCQljYXJkLT51LmMua3BhbHZfZXJyID0KLQkJICAgCQkoKGNvbmYtPmtlZXBhbGl2ZV9lcnJfbWFyZ2luLU1JTl9LUEFMVl9FUlJfVE9MKQotCQkJCT49IDApID8KLQkgICAJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmtlZXBhbGl2ZV9lcnJfbWFyZ2luLAotCQkJCU1BWF9LUEFMVl9FUlJfVE9MKSA6IAotCSAgIAkJCURFRkFVTFRfS1BBTFZfRVJSX1RPTDsKLQkJfQotCi0JCS8qIFNldHVwIHNsYXJwIHRpbWVyIHRvIGNvbnRyb2wgZGVsYXkgYmV0d2VlbiBzbGFycHMgKi8KLQkJY2FyZC0+dS5jLnNsYXJwX3RpbWVyID0gCi0JCQkoKGNvbmYtPnNsYXJwX3RpbWVyIC0gTUlOX1NMQVJQX1JFUV9USU1FUikgPj0gMCkgPwotCQkJbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5zbGFycF90aW1lciwgTUFYX1NMQVJQX1JFUV9USU1FUikgOgotCQkJREVGQVVMVF9TTEFSUF9SRVFfVElNRVI7Ci0KLQkJaWYgKGNvbmYtPmhkbGNfc3RyZWFtaW5nID09IFdBTk9QVF9ZRVMpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmFibGluZyBIRExDIFNUUkVBTUlORyBNb2RlXG4iLAotCQkJCXdhbmRldi0+bmFtZSk7Ci0JCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyA9IEhETENfU1RSRUFNSU5HX01PREU7Ci0JCX0KLQotCQlpZiAoKGNoZGxjX3ByaXZfYXJlYS0+dHJ1ZV9pZl9lbmNvZGluZyA9IGNvbmYtPnRydWVfaWZfZW5jb2RpbmcpID09IFdBTk9QVF9ZRVMpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEVuYWJsaW5nLCB0cnVlIGludGVyZmFjZSB0eXBlIGVuY29kaW5nLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQkKLSAgICAgICAgCS8qIFNldHVwIHdhbnBpcGUgYXMgYSByb3V0ZXIgKFdBTlBJUEUpIG9yIGFzIGFuIEFQSSAqLwotCQlpZiggc3RyY21wKGNvbmYtPnVzZWRieSwgIldBTlBJUEUiKSA9PSAwKSB7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIFdBTlBJUEUgbW9kZSFcbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJCWNhcmQtPnUuYy51c2VkYnkgPSBXQU5QSVBFOwotCi0JCQkvKiBPcHRpb24gdG8gYnJpbmcgZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gCi0gICAgICAgIAkJICogdGhlIGxpbmsgZ29lcyBkb3duICovCi0JCQlpZiAoY29uZi0+aWZfZG93bil7Ci0JCQkJc2V0X2JpdChEWU5fT1BUX09OLCZjaGRsY19wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSAiJXM6IER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZW5hYmxlZFxuIiwKLQkJCQkgICBjYXJkLT5kZXZuYW1lKTsKLQkJCX0gCi0KLQkJfSBlbHNlIGlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQVBJIikgPT0gMCkgewotCQkJY2FyZC0+dS5jLnVzZWRieSA9IEFQSTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIEFQSSBtb2RlICFcbiIsCi0JCQkJd2FuZGV2LT5uYW1lKTsKLQkJfQotCX0KLQotCS8qIFRlbGxzIHVzIHRoYXQgaWYgdGhpcyBpbnRlcmZhY2UgaXMgYQotICAgICAgICAgKiBnYXRld2F5IG9yIG5vdCAqLwotCWlmICgoY2hkbGNfcHJpdl9hcmVhLT5nYXRld2F5ID0gY29uZi0+Z2F0ZXdheSkgPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgaXMgc2V0IGFzIGEgZ2F0ZXdheS5cbiIsCi0JCQljYXJkLT5kZXZuYW1lLGNhcmQtPnUuYy5pZl9uYW1lKTsKLQl9Ci0KLQkvKiBHZXQgTXVsdGljYXN0IEluZm9ybWF0aW9uICovCi0JY2hkbGNfcHJpdl9hcmVhLT5tYyA9IGNvbmYtPm1jOwotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLQlzdHJjcHkoZGV2LT5uYW1lLGNhcmQtPnUuYy5pZl9uYW1lKTsKLQotCWRldi0+aW5pdCA9ICZpZl9pbml0OwotCWRldi0+cHJpdiA9IGNoZGxjX3ByaXZfYXJlYTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgd29yayByb3V0aW5lICovCi0JSU5JVF9XT1JLKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfd29yaywgKHZvaWQqKSh2b2lkKiljaGRsY19wb2xsLCBkZXYpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgcG9sbGluZyBkZWxheSB0aW1lciAqLwotCWluaXRfdGltZXIoJmNoZGxjX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7Ci0JY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLmZ1bmN0aW9uID0gY2hkbGNfcG9sbF9kZWxheTsKLQkKLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKiBOZXR3b3JrIERldmljZSBJbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBMaW51eCBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UsIGR1cmluZyBMaW51eCBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiAgUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCB6ZXJvIHdpbGwgZmFpbCBpbnRlcmZhY2UKLSAqIHJlZ2lzdHJhdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0KLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9ICZpZl9vcGVuOwotCWRldi0+c3RvcAkJPSAmaWZfY2xvc2U7Ci0JZGV2LT5oYXJkX2hlYWRlcgk9ICZpZl9oZWFkZXI7Ci0JZGV2LT5yZWJ1aWxkX2hlYWRlcgk9ICZpZl9yZWJ1aWxkX2hkcjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9ICZpZl9zZW5kOwotCWRldi0+Z2V0X3N0YXRzCQk9ICZpZl9zdGF0czsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gJmlmX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7Ci0JCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT5mbGFncwkJfD0gSUZGX1BPSU5UT1BPSU5UOwotCWRldi0+ZmxhZ3MJCXw9IElGRl9OT0FSUDsKLQotCS8qIEVuYWJsZSBNdWxpdGNhc3RpbmcgaWYgdXNlciBzZWxlY3RlZCAqLwotCWlmIChjaGRsY19wcml2X2FyZWEtPm1jID09IFdBTk9QVF9ZRVMpewotCQlkZXYtPmZsYWdzIAl8PSBJRkZfTVVMVElDQVNUOwotCX0KLQkKLQlpZiAoY2hkbGNfcHJpdl9hcmVhLT50cnVlX2lmX2VuY29kaW5nKXsKLQkJZGV2LT50eXBlCT0gQVJQSFJEX0hETEM7IC8qIFRoaXMgYnJlYWtzIHRoZSB0Y3BkdW1wICovCi0JfWVsc2V7Ci0JCWRldi0+dHlwZQk9IEFSUEhSRF9QUFA7Ci0JfQotCQotCWRldi0+bXR1CQk9IGNhcmQtPndhbmRldi5tdHU7Ci0JLyogZm9yIEFQSSB1c2FnZSwgYWRkIHRoZSBBUEkgaGVhZGVyIHNpemUgdG8gdGhlIHJlcXVlc3RlZCBNVFUgc2l6ZSAqLwotCWlmKGNhcmQtPnUuYy51c2VkYnkgPT0gQVBJKSB7Ci0JCWRldi0+bXR1ICs9IHNpemVvZihhcGlfdHhfaGRyX3QpOwotCX0KLSAKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IENIRExDX0hEUl9MRU47Ci0KLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKi8KLQlkZXYtPmlycQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCT0gd2FuZGV2LT5kbWE7Ci0JZGV2LT5iYXNlX2FkZHIJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAk9IHdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCT0gd2FuZGV2LT5tYWRkciArIHdhbmRldi0+bXNpemUgLSAxOwotCi0JLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggCi0JICogSWYgdG9vIGxvdyBwYWNrZXRzIHdpbGwgbm90IGJlIHJldHJhbnNtaXR0ZWQgCi0gICAgICAgICAqIGJ5IHN0YWNrLgotCSAqLwotICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0gICAKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBlbmFibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqCi0gKiBSZXR1cm4gMCBpZiBPLmsuIG9yIGVycm5vLgotICovCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlpbnQgZXJyID0gMDsKLQotCS8qIE9ubHkgb25lIG9wZW4gcGVyIGludGVyZmFjZSBpcyBhbGxvd2VkICovCi0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgd29yayBxdWV1ZSBlbnRyeSAqLwotCWNoZGxjX3ByaXZfYXJlYS0+dHFfd29ya2luZz0wOwotCi0JSU5JVF9XT1JLKCZjaGRsY19wcml2X2FyZWEtPmNvbW1vbi53YW5waXBlX3dvcmssCi0JCQkodm9pZCAqKSh2b2lkICopY2hkbGNfd29yaywgZGV2KTsKLQotCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIEJIIGNpcmN1bGFyIGJ1ZmZlciAqLwotCS8qIEFkZCAxIHRvIE1BWF9CSF9CVUZGIHNvIHdlIGRvbid0IGhhdmUgdGVzdCB3aXRoIChNQVhfQkhfQlVGRi0xKSAqLwotCWNoZGxjX3ByaXZfYXJlYS0+YmhfaGVhZCA9IGttYWxsb2MoKHNpemVvZihiaF9kYXRhX3QpKihNQVhfQkhfQlVGRisxKSksR0ZQX0FUT01JQyk7Ci0JbWVtc2V0KGNoZGxjX3ByaXZfYXJlYS0+YmhfaGVhZCwwLChzaXplb2YoYmhfZGF0YV90KSooTUFYX0JIX0JVRkYrMSkpKTsKLQlhdG9taWNfc2V0KCZjaGRsY19wcml2X2FyZWEtPmJoX2J1ZmZfdXNlZCwgMCk7Ci0gCi0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0KLQkvKiBUVFkgaXMgY29uZmlndXJlZCBkdXJpbmcgd2FucGlwZV9zZXRfdGVybWlvcwotCSAqIGNhbGwsIG5vdCBoZXJlICovCi0JaWYgKGNhcmQtPnR0eV9vcHQpCi0JCXJldHVybiBlcnI7Ci0JCi0Jc2V0X2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsYyk7Ci0JY2hkbGNfcHJpdl9hcmVhLT5jb25maWdfY2hkbGNfdGltZW91dD1qaWZmaWVzOwotCi0JLyogU3RhcnQgdGhlIENIRExDIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgMXNlYyBkZWxheS4KLQkgKiBUaGlzIHdpbGwgZ2l2ZSB0aGUgaW50ZXJmYWNlIGluaXRpbGl6YXRpb24gdGltZQotCSAqIHRvIGZpbmlzaCBpdHMgY29uZmlndXJhdGlvbiAqLwotCW1vZF90aW1lcigmY2hkbGNfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLCBqaWZmaWVzICsgSFopOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2xvc2UsIHRoZW4gZGlzYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcmVzZXQgZmxhZ3MuCi0gKi8KLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQotCWlmIChjaGRsY19wcml2X2FyZWEtPmJoX2hlYWQpewotCQlpbnQgaTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkKLQkJZm9yIChpPTA7IGk8KE1BWF9CSF9CVUZGKzEpOyBpKyspewotCQkJc2tiID0gKChiaF9kYXRhX3QgKikmY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkW2ldKS0+c2tiOwotCQkJaWYgKHNrYiAhPSBOVUxMKXsKLSAgICAgICAgICAgICAgICAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUoY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT5iaF9oZWFkPU5VTEw7Ci0JfQotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXdhbnBpcGVfY2xvc2UoY2FyZCk7Ci0JZGVsX3RpbWVyKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2NvbW0gKHNkbGFfdCAqY2FyZCkKLXsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQkKLQlpZiAoY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCl7Ci0JCWNoZGxjX2Rpc2FibGVfY29tbV9zaHV0ZG93biAoY2FyZCk7Ci0JfWVsc2V7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwkKLQl9Ci0KLQlpZiAoIXR0eV9pbml0X2NudCkKLQkJcmV0dXJuOwotCi0JaWYgKGNhcmQtPnR0eV9vcHQpewotCQlzdHJ1Y3Qgc2VyaWFsX3N0YXRlICogc3RhdGU7Ci0JCWlmICghKC0tdHR5X2luaXRfY250KSl7Ci0JCQlpbnQgZTE7Ci0JCQlzZXJpYWxfZHJpdmVyLnJlZmNvdW50PTA7Ci0JCQkKLQkJCWlmICgoZTEgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9kcml2ZXIpKSkKLQkJCQlwcmludGsoIlNFUklBTDogZmFpbGVkIHRvIHVucmVnaXN0ZXIgc2VyaWFsIGRyaXZlciAoJWQpXG4iLAotCQkJCSAgICAgICBlMSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5yZWdpc3RlcmluZyBUVFkgRHJpdmVyLCBNYWpvciAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxXQU5fVFRZX01BSk9SKTsKLQkJfQotCQljYXJkLT50dHk9TlVMTDsKLQkJdHR5X2NhcmRfbWFwW2NhcmQtPnR0eV9taW5vcl09TlVMTDsKLQkJc3RhdGUgPSAmcnNfdGFibGVbY2FyZC0+dHR5X21pbm9yXTsKLQkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7Ci0JfQotCXJldHVybjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEJ1aWxkIG1lZGlhIGhlYWRlci4KLSAqCi0gKiBUaGUgdHJpY2sgaGVyZSBpcyB0byBwdXQgcGFja2V0IHR5cGUgKEV0aGVydHlwZSkgaW50byAncHJvdG9jb2wnIGZpZWxkIG9mCi0gKiB0aGUgc29ja2V0IGJ1ZmZlciwgc28gdGhhdCB3ZSBkb24ndCBmb3JnZXQgaXQuICBJZiBwYWNrZXQgdHlwZSBpcyBub3QKLSAqIHN1cHBvcnRlZCwgc2V0IHNrYi0+cHJvdG9jb2wgdG8gMCBhbmQgZGlzY2FyZCBwYWNrZXQgbGF0ZXIuCi0gKgotICogUmV0dXJuOgltZWRpYSBoZWFkZXIgbGVuZ3RoLgotICovCi1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwKLQkJICAgICB1bnNpZ25lZCBsZW4pCi17Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKHR5cGUpOwotCi0JcmV0dXJuIENIRExDX0hEUl9MRU47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdHJhbnNtaXQgdGltZW91dCBldmVudCBmcm9tIG5ldGlmIHdhdGNoZG9nCi0gKi8KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQkKLQkvKiBJZiBvdXIgZGV2aWNlIHN0YXlzIGJ1c3kgZm9yIGF0IGxlYXN0IDUgc2Vjb25kcyB0aGVuIHdlIHdpbGwKLQkgKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgYnkgbWFraW5nIGRldi0+dGJ1c3kgPSAwLiAgV2UgZXhwZWN0Ci0JICogdGhhdCBvdXIgZGV2aWNlIG5ldmVyIHN0YXlzIGJ1c3kgbW9yZSB0aGFuIDUgc2Vjb25kcy4gU28gdGhpcyAgICAgICAgICAgICAgICAgCi0JICogaXMgb25seSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuCi0JICovCi0KLQkrK2NhcmQtPndhbmRldi5zdGF0cy5jb2xsaXNpb25zOwotCi0JcHJpbnRrIChLRVJOX0lORk8gIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQgb24gJXNcbiIsIGNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZS1idWlsZCBtZWRpYSBoZWFkZXIuCi0gKgotICogUmV0dXJuOgkxCXBoeXNpY2FsIGFkZHJlc3MgcmVzb2x2ZWQuCi0gKgkJMAlwaHlzaWNhbCBhZGRyZXNzIG5vdCByZXNvbHZlZAotICovCi1zdGF0aWMgaW50IGlmX3JlYnVpbGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAxOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBhIHBhY2tldCBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikgdG8gYmxvY2sgYSB0aW1lci1iYXNlZAotICogICB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nLgotICogbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiBvIGV4ZWN1dGUgYWRhcHRlciBzZW5kIGNvbW1hbmQuCi0gKiBvIGZyZWUgc29ja2V0IGJ1ZmZlcgotICoKLSAqIFJldHVybjoJMAljb21wbGV0ZSAoc29ja2V0IGJ1ZmZlciBtdXN0IGJlIGZyZWVkKQotICoJCW5vbi0wCXBhY2tldCBtYXkgYmUgcmUtdHJhbnNtaXR0ZWQgKHRidXN5IG11c3QgYmUgc2V0KQotICoKLSAqIE5vdGVzOgotICogMS4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBlaXRoZXIgYnkgdGhlIHByb3RvY29sIHN0YWNrIG9yIGJ5IHRoZSAibmV0Ci0gKiAgICBib3R0b20gaGFsZiIgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKS4KLSAqIDIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQotICogICAgcHJvdG9jb2wgc3RhY2sgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqLwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCAqY2hkbGNfaW50ID0gJmZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3Q7Ci0JaW50IHVkcF90eXBlID0gMDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlpbnQgZXJyPTA7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCi0JaWYgKHNrYiA9PSBOVUxMKXsKLQkJLyogSWYgd2UgZ2V0IGhlcmUsIHNvbWUgaGlnaGVyIGxheWVyIHRoaW5rcyB3ZSd2ZSBtaXNzZWQgYW4KLQkJICogdHgtZG9uZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJmYWNlICVzIGdvdCBraWNrZWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotICAgCWlmIChudG9ocyhza2ItPnByb3RvY29sKSAhPSBodG9ucyhQVkNfUFJPVCkpewotCi0JCS8qIGNoZWNrIHRoZSB1ZHAgcGFja2V0IHR5cGUgKi8KLQkJCi0JCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKHNrYiwgY2FyZCk7Ci0KLQkJaWYgKHVkcF90eXBlID09IFVEUF9DUElQRV9UWVBFKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9TVEFDSywgY2FyZCwgc2tiLCBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGxjX3ByaXZfYXJlYSkpewotCSAgICAgICAgICAgICAgICAJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PQotCQkJCQlBUFBfSU5UX09OX1RJTUVSOwotCQkJfQotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBzb3VyY2UgSVAgYWRkcmVzcyBpcyBhIGJyb2FkY2FzdCBvciAqLwotCQkvKiBtdWx0aWNhc3QgSVAgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIGlmKGNoa19iY2FzdF9tY2FzdF9hZGRyKGNhcmQsIGRldiwgc2tiKSl7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotICAgICAgICB9Ci0KLQkvKiBMb2NrIHRoZSA1MDggQ2FyZDogU01QIGlzIHN1cHBvcnRlZCAqLwotICAgICAgCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJczUwOF9sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfSAKLQotICAgIAlpZih0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCBpbiBpZl9zZW5kOiAlbHhcbiIsCi0JCQkJCWNhcmQtPndhbmRldi5uYW1lLGNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0gICAgICAgICAgICAgICAgKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJZ290byBpZl9zZW5kX2V4aXRfY3JpdDsKLQl9Ci0KLQlpZihjYXJkLT51LmMuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0gICAgICAgCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkKLQl9ZWxzZSBpZighc2tiLT5wcm90b2NvbCl7Ci0gICAgICAgIAkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9lcnJvcnM7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQotCX1lbHNlIHsKLQkJdm9pZCogZGF0YSA9IHNrYi0+ZGF0YTsKLQkJdW5zaWduZWQgbGVuID0gc2tiLT5sZW47Ci0JCXVuc2lnbmVkIGNoYXIgYXR0cjsKLQotCQkvKiBJZiBpdCdzIGFuIEFQSSBwYWNrZXQgcHVsbCBvZmYgdGhlIEFQSQotCQkgKiBoZWFkZXIuIEFsc28gY2hlY2sgdGhhdCB0aGUgcGFja2V0IHNpemUKLQkJICogaXMgbGFyZ2VyIHRoYW4gdGhlIEFQSSBoZWFkZXIKLQkgICAgICAgICAqLwotCQlpZiAoY2FyZC0+dS5jLnVzZWRieSA9PSBBUEkpewotCQkJYXBpX3R4X2hkcl90KiBhcGlfdHhfaGRyOwotCi0JCQkvKiBkaXNjYXJkIHRoZSBmcmFtZSBpZiB3ZSBhcmUgY29uZmlndXJlZCBmb3IgKi8KLQkJCS8qICdyZWNlaXZlIG9ubHknIG1vZGUgb3IgaWYgdGhlcmUgaXMgbm8gZGF0YSAqLwotCQkJaWYgKGNhcmQtPnUuYy5yZWNlaXZlX29ubHkgfHwKLQkJCQkobGVuIDw9IHNpemVvZihhcGlfdHhfaGRyX3QpKSkgewotCQkJCQotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCQlnb3RvIGlmX3NlbmRfZXhpdF9jcml0OwotCQkJfQotCQkJCQotCQkJYXBpX3R4X2hkciA9IChhcGlfdHhfaGRyX3QgKilkYXRhOwotCQkJYXR0ciA9IGFwaV90eF9oZHItPmF0dHI7Ci0JCQlkYXRhICs9IHNpemVvZihhcGlfdHhfaGRyX3QpOwotCQkJbGVuIC09IHNpemVvZihhcGlfdHhfaGRyX3QpOwotCQl9Ci0KLQkJaWYoY2hkbGNfc2VuZChjYXJkLCBkYXRhLCBsZW4pKSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCX1lbHNlewotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQkKLQkJIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJfQkKLQl9Ci0KLWlmX3NlbmRfZXhpdF9jcml0OgotCQotCWlmICghKGVycj1uZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dGlja19jb3VudGVyID0gamlmZmllczsKLQkJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RYX0ZSQU1FOwotCX0KLQotCWNsZWFyX2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCXM1MDhfdW5sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfQotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayB0byBzZWUgaWYgdGhlIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCBjb250YWlucyBhIGJyb2FkY2FzdCBvcgotICogbXVsdGljYXN0IHNvdXJjZSBJUCBhZGRyZXNzLgotICovCi0KLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJCXN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTMyIHNyY19pcF9hZGRyOwotICAgICAgICB1MzIgYnJvYWRjYXN0X2lwX2FkZHIgPSAwOwotICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0KLSAgICAgICAgLyogcmVhZCB0aGUgSVAgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgb3V0Z29pbmcgcGFja2V0ICovCi0gICAgICAgIHNyY19pcF9hZGRyID0gKih1MzIgKikoc2tiLT5kYXRhICsgMTIpOwotCi0JLyogcmVhZCB0aGUgSVAgYnJvYWRjYXN0IGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UgKi8KLSAgICAgICAgaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0gICAgICAgIGlmKGluX2RldiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhPSBpbl9kZXYtPmlmYV9saXN0OwotICAgICAgICAgICAgICAgIGlmKGlmYSAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0X2lwX2FkZHIgPSBpZmEtPmlmYV9icm9hZGNhc3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAKLSAgICAgICAgLyogY2hlY2sgaWYgdGhlIElQIFNvdXJjZSBBZGRyZXNzIGlzIGEgQnJvYWRjYXN0IGFkZHJlc3MgKi8KLSAgICAgICAgaWYoKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSAmJiAoc3JjX2lwX2FkZHIgPT0gYnJvYWRjYXN0X2lwX2FkZHIpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0gCi0KLSAgICAgICAgLyogY2hlY2sgaWYgdGhlIElQIFNvdXJjZSBBZGRyZXNzIGlzIGEgTXVsdGljYXN0IGFkZHJlc3MgKi8KLSAgICAgICAgaWYoKG50b2hsKHNyY19pcF9hZGRyKSA+PSAweEUwMDAwMDAxKSAmJgotCQkobnRvaGwoc3JjX2lwX2FkZHIpIDw9IDB4RkZGRkZGRkUpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE11bHRpY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlcGx5IHRvIFVEUCBNYW5hZ2VtZW50IHN5c3RlbS4KLSAqIFJldHVybiBsZW5ndGggb2YgcmVwbHkuCi0gKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKQotewotCi0JdW5zaWduZWQgc2hvcnQgbGVuLCB1ZHBfbGVuZ3RoLCB0ZW1wLCBpcF9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBpcF90ZW1wOwotCWludCBldmVuX2JvdW5kID0gMDsKLSAgCWNoZGxjX3VkcF9wa3RfdCAqY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKWRhdGE7Ci0JIAotCS8qIFNldCBsZW5ndGggb2YgcGFja2V0ICovCi0JbGVuID0gc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBzaXplb2YodHJhY2VfaW5mb190KSsgCi0JICAgICAgbWJveF9sZW47Ci0KLQkvKiBmaWxsIGluIFVEUCByZXBseSAqLwotCWNfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsKLSAgIAotCS8qIGZpbGwgaW4gVURQIGxlbmd0aCAqLwotCXVkcF9sZW5ndGggPSBzaXplb2YodWRwX3BrdF90KSsgCi0JCSAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JCSAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICAgICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCkrCi0JCSAgICAgbWJveF9sZW47IAotCi0gCS8qIHB1dCBpdCBvbiBhbiBldmVuIGJvdW5kYXJ5ICovCi0JaWYgKCB1ZHBfbGVuZ3RoICYgMHgwMDAxICkgewotCQl1ZHBfbGVuZ3RoICs9IDE7Ci0JCWxlbiArPSAxOwotCQlldmVuX2JvdW5kID0gMTsKLQl9ICAKLQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfbGVuZ3RoID0gdGVtcDsKLQkJIAotCS8qIHN3YXAgVURQIHBvcnRzICovCi0JdGVtcCA9IGNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQ7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydCA9IAotCQkJY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydDsgCi0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9IHRlbXA7Ci0KLQkvKiBhZGQgVURQIHBzZXVkbyBoZWFkZXIgKi8KLQl0ZW1wID0gMHgxMTAwOwotCSooKHVuc2lnbmVkIHNob3J0ICopKGNfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKSkgPSB0ZW1wOwkKLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKShjX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCsyKSkgPSB0ZW1wOwotCi0JCSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IDA7Ci0JY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oJmRhdGFbVURQX09GRlNFVF0sdWRwX2xlbmd0aCtVRFBfT0ZGU0VUKTsKLQotCS8qIGZpbGwgaW4gSVAgbGVuZ3RoICovCi0JaXBfbGVuZ3RoID0gbGVuOwotCXRlbXAgPSAoaXBfbGVuZ3RoPDw4KXwoaXBfbGVuZ3RoPj44KTsKLQljX3VkcF9wa3QtPmlwX3BrdC50b3RhbF9sZW5ndGggPSB0ZW1wOwotICAKLQkvKiBzd2FwIElQIGFkZHJlc3NlcyAqLwotCWlwX3RlbXAgPSBjX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQljX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzcyA9IGNfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzOwotCWNfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCS8qIGZpbGwgaW4gSVAgY2hlY2tzdW0gKi8KLQljX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAwOwotCWNfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oZGF0YSxzaXplb2YoaXBfcGt0X3QpKTsKLQotCXJldHVybiBsZW47Ci0KLX0gLyogcmVwbHlfdWRwICovCi0KLXVuc2lnbmVkIHNob3J0IGNhbGNfY2hlY2tzdW0gKGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcDsgCi0JdW5zaWduZWQgbG9uZyBzdW09MDsKLQlpbnQgaTsKLQotCWZvciggaSA9IDA7IGkgPGxlbjsgaSs9MiApIHsKLQkJbWVtY3B5KCZ0ZW1wLCZkYXRhW2ldLDIpOwotCQlzdW0gKz0gKHVuc2lnbmVkIGxvbmcpdGVtcDsKLQl9Ci0KLQl3aGlsZSAoc3VtID4+IDE2ICkgewotCQlzdW0gPSAoc3VtICYgMHhmZmZmVUwpICsgKHN1bSA+PiAxNik7Ci0JfQotCi0JdGVtcCA9ICh1bnNpZ25lZCBzaG9ydClzdW07Ci0JdGVtcCA9IH50ZW1wOwotCi0JaWYoIHRlbXAgPT0gMCApIAotCQl0ZW1wID0gMHhmZmZmOwotCi0JcmV0dXJuIHRlbXA7CQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0Jc2RsYV90ICpteV9jYXJkOwotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWE7Ci0KLQlpZiAoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbXlfY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlyZXR1cm4gJm15X2NhcmQtPndhbmRldi5zdGF0czsgCi19Ci0KLQotLyoqKioqKiBDaXNjbyBIRExDIEZpcm13YXJlIEludGVyZmFjZSBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGZpcm13YXJlIGNvZGUgdmVyc2lvbi4KLSAqCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cikKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBsZW47Ci0JY2hhciBlcnI7Ci0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCX0KLQllbHNlIGlmIChzdHIpIHsgIC8qIGlzIG5vdCBudWxsICovCi0JCWxlbiA9IG1iLT5idWZmZXJfbGVuZ3RoOwotCQltZW1jcHkoc3RyLCBtYi0+ZGF0YSwgbGVuKTsKLQkJc3RyW2xlbl0gPSAnXDAnOwotCX0KLQlyZXR1cm4gKGVycik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDb25maWd1cmUgQ0hETEMgZmlybXdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIHZvaWQqIGRhdGEpCi17Ci0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWFpbGJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGRhdGFfbGVuZ3RoID0gc2l6ZW9mKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUKTsKLQkKLQltYWlsYm94LT5idWZmZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGg7ICAKLQltZW1jcHkobWFpbGJveC0+ZGF0YSwgZGF0YSwgZGF0YV9sZW5ndGgpOwotCW1haWxib3gtPmNvbW1hbmQgPSBTRVRfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWFpbGJveCkgPyBtYWlsYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgIT0gQ09NTUFORF9PSykgY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWFpbGJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGludGVycnVwdCBtb2RlIC0tIEhETEMgVmVyc2lvbi4KLSAqLwotCi1zdGF0aWMgaW50IGNoZGxjX3NldF9pbnRyX21vZGUgKHNkbGFfdCogY2FyZCwgdW5zaWduZWQgbW9kZSkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCUNIRExDX0lOVF9UUklHR0VSU19TVFJVQ1QqIGludF9kYXRhID0KLQkJIChDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUICopbWItPmRhdGE7Ci0JaW50IGVycjsKLQotCWludF9kYXRhLT5DSERMQ19pbnRlcnJ1cHRfdHJpZ2dlcnMgCT0gbW9kZTsKLQlpbnRfZGF0YS0+SVJRCQkJCT0gY2FyZC0+aHcuaXJxOwotCWludF9kYXRhLT5pbnRlcnJ1cHRfdGltZXIgICAgICAgICAgICAgICA9IDE7Ci0gICAKLQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKTsKLQltYi0+Y29tbWFuZCA9IFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IgKGNhcmQsIGVyciwgbWIpOwotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duCi0gKgotICogU2h1dGRvd24oKSBkaXNhYmxlcyB0aGUgY29tbXVuaWNhdGlvbnMuIFdlIG11c3QKLSAqIGhhdmUgYSBzcGFyYXRlIGZ1bmN0aW9ucywgYmVjYXVzZSB3ZSBtdXN0IG5vdAotICogY2FsbCBjaGRsY19lcnJvcigpIGhhbmRlciBzaW5jZSB0aGUgcHJpdmF0ZQotICogYXJlYSBoYXMgYWxyZWFkeSBiZWVuIHJlcGxhY2VkICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duIChzZGxhX3QgKmNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKiBpbnRfZGF0YSA9Ci0JCSAoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCAqKW1iLT5kYXRhOwotCWludCBlcnI7Ci0KLQkvKiBEaXNhYmxlIEludGVycnV0cHMgKi8KLQlpbnRfZGF0YS0+Q0hETENfaW50ZXJydXB0X3RyaWdnZXJzIAk9IDA7Ci0JaW50X2RhdGEtPklSUQkJCQk9IGNhcmQtPmh3LmlycTsKLQlpbnRfZGF0YS0+aW50ZXJydXB0X3RpbWVyICAgICAgICAgICAgICAgPSAxOwotICAgCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCk7Ci0JbWItPmNvbW1hbmQgPSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCS8qIERpc2FibGUgQ29tbXVuaWNhdGlvbnMgKi8KLQotCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSkgewotCQltYi0+Y29tbWFuZCA9IERJU0FCTEVfQVNZX0NPTU1VTklDQVRJT05TOwotCX1lbHNlewotCQltYi0+Y29tbWFuZCA9IERJU0FCTEVfQ0hETENfQ09NTVVOSUNBVElPTlM7Ci0JfQotCQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCi0JY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCA9IDA7Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9lbmFibGUgKHNkbGFfdCogY2FyZCkKLXsKLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JZWxzZQotCQljYXJkLT51LmMuY29tbV9lbmFibGVkID0gMTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgY29tbXVuaWNhdGlvbiBlcnJvciBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfY29tbV9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DT01NU19FUlJPUl9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBDSERMQyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfb3Bfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGNvbW11bmljYXRpb25zIGVycm9yIGFuZCBnZW5lcmFsIHBhY2tldCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jb21tc19zdGF0cyhzZGxhX3QqIGNhcmQsCi0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSkKLXsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLSAgCUNPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVCogZXJyX3N0YXRzOwotICAgICAgICBDSERMQ19PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1QgKm9wX3N0YXRzOwotCi0JLyogb24gdGhlIGZpcnN0IHRpbWVyIGludGVycnVwdCwgcmVhZCB0aGUgY29tbXMgZXJyb3Igc3RhdGlzdGljcyAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID09IDIpIHsKLQkJaWYoY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyhjYXJkKSkKLQkJCXJldHVybiAxOwotCQllcnJfc3RhdHMgPSAoQ09NTVNfRVJST1JfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IAotCQkJCWVycl9zdGF0cy0+Unhfb3ZlcnJ1bl9lcnJfY291bnQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5DUkNfZXJyX2NvdW50OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9hYm9ydF9jb3VudDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudDsgCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0KLQkJCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZmlmb19lcnJvcnM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9Ci0JCQkJZXJyX3N0YXRzLT5zZWNfVHhfYWJvcnRfY291bnQ7Ci0JfQotCi0gICAgICAgIC8qIG9uIHRoZSBzZWNvbmQgdGltZXIgaW50ZXJydXB0LCByZWFkIHRoZSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0JZWxzZSB7Ci0gICAgICAgIAlpZihjaGRsY19yZWFkX29wX3N0YXRzKGNhcmQpKQotICAgICAgICAgICAgICAgIAlyZXR1cm4gMTsKLQkJb3Bfc3RhdHMgPSAoQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KLQkJCShvcF9zdGF0cy0+UnhfRGF0YV9kaXNjYXJkX3Nob3J0X2NvdW50ICsKLQkJCW9wX3N0YXRzLT5SeF9EYXRhX2Rpc2NhcmRfbG9uZ19jb3VudCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBwYWNrZXQuCi0gKglSZXR1cm46CTAgLSBvLmsuCi0gKgkJMSAtIG5vIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pCi17Ci0JQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICp0eGJ1ZiA9IGNhcmQtPnUuYy50eGJ1ZjsKLQotCWlmICh0eGJ1Zi0+b3BwX2ZsYWcpCi0JCXJldHVybiAxOwotCQotCXNkbGFfcG9rZSgmY2FyZC0+aHcsIHR4YnVmLT5wdHJfZGF0YV9iZnIsIGRhdGEsIGxlbik7Ci0KLQl0eGJ1Zi0+ZnJhbWVfbGVuZ3RoID0gbGVuOwotCXR4YnVmLT5vcHBfZmxhZyA9IDE7CQkvKiBzdGFydCB0cmFuc21pc3Npb24gKi8KLQkKLQkvKiBVcGRhdGUgdHJhbnNtaXQgYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JY2FyZC0+dS5jLnR4YnVmID0gKyt0eGJ1ZjsKLQkKLQlpZiAoKHZvaWQqKXR4YnVmID4gY2FyZC0+dS5jLnR4YnVmX2xhc3QpCi0JCWNhcmQtPnUuYy50eGJ1ZiA9IGNhcmQtPnUuYy50eGJ1Zl9iYXNlOwotCQotCXJldHVybiAwOwotfQotCi0vKioqKioqIEZpcm13YXJlIEVycm9yIEhhbmRsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaXJtd2FyZSBlcnJvciBoYW5kbGVyLgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBmaXJtd2FyZSBjb21tYW5kIHJldHVybnMgbm9uLXplcm8KLSAqCXJldHVybiBjb2RlLgotICoKLSAqIFJldHVybiB6ZXJvIGlmIHByZXZpb3VzIGNvbW1hbmQgaGFzIHRvIGJlIGNhbmNlbGxlZC4KLSAqLwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpCi17Ci0JdW5zaWduZWQgY21kID0gbWItPmNvbW1hbmQ7Ci0KLQlzd2l0Y2ggKGVycikgewotCi0JY2FzZSBDTURfVElNRU9VVDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQlicmVhazsKLQotCWNhc2UgUzUxNF9CT1RIX1BPUlRTX1NBTUVfQ0xLX01PREU6Ci0JCWlmKGNtZCA9PSBTRVRfQ0hETENfQ09ORklHVVJBVElPTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICIlczogQ29uZmlndXJlIGJvdGggcG9ydHMgZm9yIHRoZSBzYW1lIGNsb2NrIHNvdXJjZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCwgZXJyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKiBCb3R0b20gSGFsZiBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTk9URTogVGhlcmUgaXMgbm8gQVBJLCBCSCBzdXBwb3J0IGZvciBLZXJuZWxzIGxvd2VyIHRoYW4gMi4yLlguCi0gKiAgICAgICBETyBOT1QgSU5TRVJUIEFOWSBDT0RFIEhFUkUsIE5PVElDRSBUSEUgCi0gKiAgICAgICBQUkVQUk9DRVNTT1IgU1RBVEVNRU5UIEFCT1ZFLCBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UgQVJFCi0gKiAgICAgICBET0lORyAqLwotCi1zdGF0aWMgdm9pZCBjaGRsY193b3JrKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSAwKXsKLQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSl7Ci0KLQkJc2tiICA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+YmhfcmVhZF0pLT5za2I7Ci0KLQkJaWYgKHNrYiAhPSBOVUxMKXsKLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCQljaGRsY193b3JrX2NsZWFudXAoZGV2KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGNoYW4tPmNvbW1vbi5mdW5jKHNrYixkZXYsY2hhbi0+Y29tbW9uLnNrKSAhPSAwKXsKLQkJCQkvKiBTb2NrIGZ1bGwgY2Fubm90IHNlbmQsIHF1ZXVlIHVzIGZvciBhbm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRyeSAqLwotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5yZWNlaXZlX2Jsb2NrLDEpOwotCQkJCXJldHVybjsKLQkJCX1lbHNlewotCQkJCWNoZGxjX3dvcmtfY2xlYW51cChkZXYpOwotCQkJfQotCQl9ZWxzZXsKLQkJCWNoZGxjX3dvcmtfY2xlYW51cChkZXYpOwotCQl9Ci0JfQkKLQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGNoZGxjX3dvcmtfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGFuID0gZGV2LT5wcml2OwotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF9yZWFkXSktPnNrYiA9IE5VTEw7Ci0KLQlpZiAoY2hhbi0+YmhfcmVhZCA9PSBNQVhfQkhfQlVGRil7Ci0JCWNoYW4tPmJoX3JlYWQ9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF9yZWFkOwkKLQl9Ci0KLQlhdG9taWNfZGVjKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCBiaF9lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JLyogQ2hlY2sgZm9yIGZ1bGwgKi8KLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IChNQVhfQkhfQlVGRisxKSl7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAxOyAKLQl9Ci0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3dyaXRlXSktPnNrYiA9IHNrYjsKLQotCWlmIChjaGFuLT5iaF93cml0ZSA9PSBNQVhfQkhfQlVGRil7Ci0JCWNoYW4tPmJoX3dyaXRlPTA7Ci0JfWVsc2V7Ci0JCSsrY2hhbi0+Ymhfd3JpdGU7Ci0JfQotCi0JYXRvbWljX2luYygmY2hhbi0+YmhfYnVmZl91c2VkKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBFTkQgT0YgQVBJIEJIIFN1cHBvcnQgKi8KLQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyB2b2lkIHdwY19pc3IgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QqIGZsYWdzID0gTlVMTDsKLQlpbnQgaTsKLQlzZGxhX3QgKm15X2NhcmQ7Ci0KLQotCS8qIENoZWNrIGZvciB3aGljaCBwb3J0IHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gZ2VuZXJhdGVkCi0JICogU2luY2UgU2Vjb25kYXJ5IFBvcnQgaXMgcGlnZ3liYWNraW5nIG9uIHRoZSBQcmltYXJ5Ci0gICAgICAgICAqIHRoZSBjaGVjayBtdXN0IGJlIGRvbmUgaGVyZS4gCi0JICovCi0KLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlpZiAoIWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkvKiBDaGVjayBmb3IgYSBzZWNvbmQgcG9ydCAocGlnZ3liYWNraW5nKSAqLwotCQlpZiAoKG15X2NhcmQgPSBjYXJkLT5uZXh0KSl7Ci0JCQlmbGFncyA9IG15X2NhcmQtPnUuYy5mbGFnczsKLQkJCWlmIChmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlKXsKLQkJCQljYXJkID0gbXlfY2FyZDsKLQkJCQljYXJkLT5pc3IoY2FyZCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCi0JZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JY2FyZC0+aW5faXNyID0gMTsKLQlkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCQotCS8qIElmIHdlIGdldCBhbiBpbnRlcnJ1cHQgd2l0aCBubyBuZXR3b3JrIGRldmljZSwgc3RvcCB0aGUgaW50ZXJydXB0cwotCSAqIGFuZCBpc3N1ZSBhbiBlcnJvciAqLwotCWlmICghY2FyZC0+dHR5X29wdCAmJiAhZGV2ICYmIAotCSAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlICE9IAotCSAgICAJQ09NTUFORF9DT01QTEVURV9BUFBfSU5UX1BFTkQpewotCi0JCWdvdG8gaXNyX2RvbmU7Ci0JfQotCQotCS8qIGlmIGNyaXRpY2FsIGR1ZSB0byBwZXJpcGhlcmFsIG9wZXJhdGlvbnMKLQkgKiBpZS4gdXBkYXRlKCkgb3IgZ2V0c3RhdHMoKSB0aGVuIHJlc2V0IHRoZSBpbnRlcnJ1cHQgYW5kCi0JICogd2FpdCBmb3IgdGhlIGJvYXJkIHRvIHJldHJpZ2dlci4KLQkgKi8KLQlpZih0ZXN0X2JpdChQRVJJX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJJU1IgQ1JJVCBUTyBQRVJJXG4iKTsKLQkJZ290byBpc3JfZG9uZTsKLQl9Ci0KLQkvKiBPbiBhIDUwOCBDYXJkLCBpZiBjcml0aWNhbCBkdWUgdG8gaWZfc2VuZCAKLSAgICAgICAgICogTWFqb3IgRXJyb3IgISEhICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpIHsKLQkJaWYodGVzdF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCB3aGlsZSBpbiBJU1I6ICVseFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJY2FyZC0+aW5faXNyID0gMDsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jc3dpdGNoKGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpIHsKLQotCWNhc2UgUlhfQVBQX0lOVF9QRU5EOgkvKiAweDAxOiByZWNlaXZlIGludGVycnVwdCAqLwotCQlyeF9pbnRyKGNhcmQpOwotCQlicmVhazsKLQotCWNhc2UgVFhfQVBQX0lOVF9QRU5EOgkvKiAweDAyOiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotCQkJIH5BUFBfSU5UX09OX1RYX0ZSQU1FOwotCi0JCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJCXdhbnBpcGVfdHR5X3RyaWdnZXJfcG9sbChjYXJkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGRldiAmJiBuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJaWYgKGNhcmQtPnUuYy51c2VkYnkgPT0gQVBJKXsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCXdha2V1cF9za19iaChkZXYpOwotCQkJfWVsc2V7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORDovKiAweDA0OiBjbWQgY3BsdCAqLwotCQkrKyBJbnRyX3Rlc3RfY291bnRlcjsKLQkJYnJlYWs7Ci0KLQljYXNlIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EOgkvKiAweDIwICovCi0JCXByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKGNhcmQpOwotCQlicmVhazsKLQotCWNhc2UgR0xPQkFMX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EOgotCQlwcm9jZXNzX2dsb2JhbF9leGNlcHRpb24oY2FyZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBUSU1FUl9BUFBfSU5UX1BFTkQ6Ci0JCXRpbWVyX2ludHIoY2FyZCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwdXJpb3VzIGludGVycnVwdCAweCUwMlghXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsCi0JCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ29kZSBuYW1lOiAiKTsKLQkJZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLQkJCXByaW50ayhLRVJOX0lORk8gIiVjIiwKLQkJCQlmbGFncy0+Z2xvYmFsX2luZm9fc3RydWN0LmNvZGVuYW1lW2ldKTsgCi0JCXByaW50ayhLRVJOX0lORk8gIlxuQ29kZSB2ZXJzaW9uOiAiKTsKLQkgCWZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0JCQlwcmludGsoS0VSTl9JTkZPICIlYyIsIAotCQkJCWZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZXZlcnNpb25baV0pOyAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0JCWJyZWFrOwotCX0KLQotaXNyX2RvbmU6Ci0KLQljYXJkLT5pbl9pc3IgPSAwOwotCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUgPSAwOwotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCUNIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVCAqcnhidWYgPSBjYXJkLT51LmMucnhtYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxlbjsKLQl1bnNpZ25lZCBhZGRyID0gcnhidWYtPnB0cl9kYXRhX2JmcjsKLQl2b2lkICpidWY7Ci0JaW50IGksdWRwX3R5cGU7Ci0KLQlpZiAocnhidWYtPm9wcF9mbGFnICE9IDB4MDEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogY29ycnVwdGVkIFJ4IGJ1ZmZlciBAIDB4JVgsIGZsYWcgPSAweCUwMlghXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsICh1bnNpZ25lZClyeGJ1ZiwgcnhidWYtPm9wcF9mbGFnKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJDb2RlIG5hbWU6ICIpOwotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZW5hbWVbaV0pOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIlxuQ29kZSB2ZXJzaW9uOiAiKTsKLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCA0OyBpICsrKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy0+Z2xvYmFsX2luZm9fc3RydWN0LmNvZGV2ZXJzaW9uW2ldKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0KLQkJLyogQnVnIEZpeDogTWFyIDYgMjAwMAotICAgICAgICAgICAgICAgICAqIElmIHdlIGdldCBhIGNvcnJ1cHRlZCBtYWlsYm94LCBpdCBtZWFzbiB0aGF0IGRyaXZlciAKLSAgICAgICAgICAgICAgICAgKiBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBmaXJtd2FyZS4gVGhlcmUgaXMgbm8gcmVjb3ZlcnkuCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZG9uJ3QgdHVybiBvZmYgYWxsIGludGVycnVwdHMgZm9yIHRoaXMgY2FyZAotICAgICAgICAgICAgICAgICAqIHRoZSBtYWNoaW5lIHdpbGwgY3Jhc2guIAotICAgICAgICAgICAgICAgICAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgcm91dGVyIGZhaWx1cmUgLi4uISEhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgIVxuIik7Ci0JCWNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwwKTsJCi0JCXJldHVybjsKLQl9Ci0KLQlsZW4gID0gcnhidWYtPmZyYW1lX2xlbmd0aDsKLQotCWlmIChjYXJkLT50dHlfb3B0KXsKLQotCQlpZiAocnhidWYtPmVycm9yX2ZsYWcpewkKLQkJCWdvdG8gcnhfZXhpdDsKLQkJfQotCi0JCWlmIChsZW4gPD0gQ1JDX0xFTkdUSCl7Ci0JCQlnb3RvIHJ4X2V4aXQ7Ci0JCX0KLQkJCi0JCWlmICghY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQkJbGVuIC09IENSQ19MRU5HVEg7Ci0JCX0KLQotCQl3YW5waXBlX3R0eV9yZWNlaXZlKGNhcmQsYWRkcixsZW4pOwotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCi0JZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCWlmICghZGV2KXsKLQkJZ290byByeF9leGl0OwotCX0KLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlnb3RvIHJ4X2V4aXQ7Ci0KLQljaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLQkKLQkvKiBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCi0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9leGl0OwotCX0KLQotCS8qIENvcHkgZGF0YSB0byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCXVuc2lnbmVkIHRtcCA9IGNhcmQtPnUuYy5yeF90b3AgLSBhZGRyICsgMTsKLQkJYnVmID0gc2tiX3B1dChza2IsIHRtcCk7Ci0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgdG1wKTsKLQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQlsZW4gLT0gdG1wOwotCX0KLQkJCi0JYnVmID0gc2tiX3B1dChza2IsIGxlbik7Ci0Jc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCBsZW4pOwotCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQotCWNhcmQtPndhbmRldi5zdGF0cy5yeF9wYWNrZXRzICsrOwotCWNhcmQtPndhbmRldi5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZSggc2tiLCBjYXJkICk7Ci0KLQlpZih1ZHBfdHlwZSA9PSBVRFBfQ1BJUEVfVFlQRSkgewotCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fTkVUV09SSywKLSAgIAkJCQkgICAgICBjYXJkLCBza2IsIGRldiwgY2hkbGNfcHJpdl9hcmVhKSkgewotICAgICAJCSAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC4KLQkJCQkJCWludGVycnVwdF9wZXJtaXNzaW9uIHw9IAotCQkJCQkJCUFQUF9JTlRfT05fVElNRVI7IAotCQl9Ci0JfSBlbHNlIGlmKGNhcmQtPnUuYy51c2VkYnkgPT0gQVBJKSB7Ci0KLQkJYXBpX3J4X2hkcl90KiBhcGlfcnhfaGRyOwotICAgICAgIAkJc2tiX3B1c2goc2tiLCBzaXplb2YoYXBpX3J4X2hkcl90KSk7Ci0gICAgICAgICAgICAgICAgYXBpX3J4X2hkciA9IChhcGlfcnhfaGRyX3QqKSZza2ItPmRhdGFbMHgwMF07Ci0JCWFwaV9yeF9oZHItPmVycm9yX2ZsYWcgPSByeGJ1Zi0+ZXJyb3JfZmxhZzsKLSAgICAgCQlhcGlfcnhfaGRyLT50aW1lX3N0YW1wID0gcnhidWYtPnRpbWVfc3RhbXA7Ci0KLSAgICAgICAgICAgICAgICBza2ItPnByb3RvY29sID0gaHRvbnMoUFZDX1BST1QpOwotICAgICAJCXNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7Ci0JCXNrYi0+ZGV2ICAgICAgPSBkZXY7Ci0gICAgICAgICAgICAgICAJc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfREFUQTsKLQotCQliaF9lbnF1ZXVlKGRldiwgc2tiKTsKLQotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwmY2hkbGNfcHJpdl9hcmVhLT50cV93b3JraW5nKSkKLQkJCXdhbnBpcGVfcXVldWVfd29yaygmY2hkbGNfcHJpdl9hcmVhLT5jb21tb24ud2FucGlwZV93b3JrKTsKLQl9ZWxzZXsKLQkJLyogRklYTUU6IHdlIHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlIHJlY2VpdmVkIHBhY2tldCBpcyBhIAotICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWNhc3QgcGFja2V0IHNvIHRoYXQgd2UgY2FuIGluY3JlbWVudCB0aGUgbXVsdGljYXN0IAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKysgY2hkbGNfcHJpdl9hcmVhLT5pZl9zdGF0cy5tdWx0aWNhc3Q7Ci0JCSovCi0gICAgICAgICAgICAgICAJLyogUGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkKLSAgICAgICAgICAgICAgICBza2ItPmRldiA9IGRldjsKLSAgICAgICAgICAgICAgICBza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwotICAgICAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgICAgICAgICAgICAgZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQl9Ci0KLXJ4X2V4aXQ6Ci0JLyogUmVsZWFzZSBidWZmZXIgZWxlbWVudCBhbmQgY2FsY3VsYXRlIGEgcG9pbnRlciB0byB0aGUgbmV4dCBvbmUgKi8KLQlyeGJ1Zi0+b3BwX2ZsYWcgPSAweDAwOwotCWNhcmQtPnUuYy5yeG1iID0gKysgcnhidWY7Ci0JaWYoKHZvaWQqKXJ4YnVmID4gY2FyZC0+dS5jLnJ4YnVmX2xhc3QpewotCQljYXJkLT51LmMucnhtYiA9IGNhcmQtPnUuYy5yeGJ1Zl9iYXNlOwotCX0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqIFRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgotICogICAgMSkgUHJvY2Vzc2luZyB1ZHAgY2FsbHMgZnJvbSAnY3BpcGVtb24nLgotICogICAgMikgUmVhZGluZyBib2FyZC1sZXZlbCBzdGF0aXN0aWNzIGZvciB1cGRhdGluZyB0aGUgcHJvYyBmaWxlIHN5c3RlbS4KLSAqLwotdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqY2FyZCkKLXsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IE5VTEw7Ci0gICAgICAgIFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QqIGZsYWdzID0gTlVMTDsKLQotICAgICAgICBpZiAoKGRldiA9IGNhcmQtPndhbmRldi5kZXYpPT1OVUxMKXsKLQkJZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgICAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotICAgICAgICAgICAgICAgICAgICAgICAgfkFQUF9JTlRfT05fVElNRVI7Ci0JCXJldHVybjsKLQl9Ci0JCi0gICAgICAgIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRykgewotCQlpZiAoIWNvbmZpZ19jaGRsYyhjYXJkKSl7Ci0JCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCQl9Ci0JfQotCi0JLyogcHJvY2VzcyBhIHVkcCBjYWxsIGlmIHBlbmRpbmcgKi8KLSAgICAgICAJaWYoY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VRFApIHsKLSAgICAgICAgICAgICAgIAlwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkLCBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoZGxjX3ByaXZfYXJlYSk7Ci0JCWNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VRFA7Ci0gICAgICAgIH0KLQotCS8qIHJlYWQgdGhlIGNvbW11bmljYXRpb25zIHN0YXRpc3RpY3MgaWYgcmVxdWlyZWQgKi8KLQlpZihjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSkgewotCQl1cGRhdGVfY29tbXNfc3RhdHMoY2FyZCwgY2hkbGNfcHJpdl9hcmVhKTsKLSAgICAgICAgICAgICAgICBpZighKC0tIGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzKSkgewotCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSAKLQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQkJfQotICAgICAgICB9Ci0KLQkvKiBvbmx5IGRpc2FibGUgdGhlIHRpbWVyIGludGVycnVwdCBpZiB0aGVyZSBhcmUgbm8gdWRwIG9yIHN0YXRpc3RpYyAqLwotCS8qIHVwZGF0ZXMgcGVuZGluZyAqLwotICAgICAgICBpZighY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIGZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotICAgICAgICAgICAgICAgIGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0KLSAgICAgICAgICAgICAgICAgICAgICAgIH5BUFBfSU5UX09OX1RJTUVSOwotICAgICAgICB9Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIE1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zCi0JLSBzZXRfY2hkbGNfY29uZmlnKCkgdXNlZCB0byBzZXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBib2FyZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludCBzZXRfY2hkbGNfY29uZmlnKHNkbGFfdCogY2FyZCkKLXsKLQlDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCBjZmc7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUKSk7Ci0KLQlpZihjYXJkLT53YW5kZXYuY2xvY2tpbmcpewotCQljZmcuYmF1ZF9yYXRlID0gY2FyZC0+d2FuZGV2LmJwczsKLQl9Ci0JCQotCWNmZy5saW5lX2NvbmZpZ19vcHRpb25zID0gKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKSA/Ci0JCUlOVEVSRkFDRV9MRVZFTF9SUzIzMiA6IElOVEVSRkFDRV9MRVZFTF9WMzU7Ci0KLQljZmcubW9kZW1fY29uZmlnX29wdGlvbnMJPSAwOwotCWNmZy5tb2RlbV9zdGF0dXNfdGltZXIJCT0gMTAwOwotCi0JY2ZnLkNIRExDX3Byb3RvY29sX29wdGlvbnMJPSBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9uczsKLQotCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJY2ZnLkNIRExDX0FQSV9vcHRpb25zCT0gRElTQ0FSRF9SWF9FUlJPUl9GUkFNRVM7Ci0JfQotCQotCWNmZy5wZXJjZW50X2RhdGFfYnVmZmVyX2Zvcl9UeCAgPSAoY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgPyAwIDogNTA7Ci0JY2ZnLkNIRExDX3N0YXRpc3RpY3Nfb3B0aW9ucwk9IChDSERMQ19UWF9EQVRBX0JZVEVfQ09VTlRfU1RBVCB8Ci0JCUNIRExDX1JYX0RBVEFfQllURV9DT1VOVF9TVEFUKTsKLQkKLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCWNhcmQtPndhbmRldi5tdHUgPSBUVFlfQ0hETENfTUFYX01UVTsKLQl9Ci0JY2ZnLm1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aAk9IGNhcmQtPndhbmRldi5tdHU7Ci0JY2ZnLnRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lcgk9IGNhcmQtPnUuYy5rcGFsdl90eDsKLQljZmcucmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIJPSBjYXJkLT51LmMua3BhbHZfcng7Ci0JY2ZnLmtlZXBhbGl2ZV9lcnJvcl90b2xlcmFuY2UJPSBjYXJkLT51LmMua3BhbHZfZXJyOwotCWNmZy5TTEFSUF9yZXF1ZXN0X3RpbWVyCQk9IGNhcmQtPnUuYy5zbGFycF90aW1lcjsKLQotCWlmIChjZmcuU0xBUlBfcmVxdWVzdF90aW1lcikgewotCQljZmcuSVBfYWRkcmVzcwkJPSAwOwotCQljZmcuSVBfbmV0bWFzawkJPSAwOwotCQkKLQl9ZWxzZSBpZiAoY2FyZC0+d2FuZGV2LmRldil7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCQkKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQotCQlpZihpbl9kZXYgIT0gTlVMTCkgewotCQkJc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKLQotCQkJaWYgKGlmYSAhPSBOVUxMICkgewotCQkJCWNmZy5JUF9hZGRyZXNzCT0gbnRvaGwoaWZhLT5pZmFfbG9jYWwpOwotCQkJCWNmZy5JUF9uZXRtYXNrCT0gbnRvaGwoaWZhLT5pZmFfbWFzayk7IAotCQkJCWNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyA9IG50b2hsKGlmYS0+aWZhX2xvY2FsKTsKLQkJCQljaGRsY19wcml2X2FyZWEtPklQX25ldG1hc2sgPSBudG9obChpZmEtPmlmYV9tYXNrKTsgCi0JCQl9Ci0JCX0KLQotCQkvKiBGSVhNRTogV2UgbXVzdCByZS10aGluayB0aGlzIG1lc3NhZ2UgaW4gbmV4dCByZWxlYXNlCi0JCWlmKChjZmcuSVBfYWRkcmVzcyAmIDB4MDAwMDAwRkYpID4gMikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiXG4iKTsKLQkgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiICBXQVJOSU5HOiVzIGNvbmZpZ3VyZWQgd2l0aCBhblxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgaW52YWxpZCBsb2NhbCBJUCBhZGRyZXNzLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIgIFNsYXJwIHByYWdtYXRpY3Mgd2lsbCBmYWlsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIgIElQIGFkZHJlc3Mgc2hvdWxkIGJlIG9mIHRoZVxuIik7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIGZvcm1hdCBBLkIuQy4xIG9yIEEuQi5DLjIuXG4iKTsKLQkJfQotCQkqLwkJCi0JfQotCQotCXJldHVybiBjaGRsY19jb25maWd1cmUoY2FyZCwgJmNmZyk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgc2V0X2FzeV9jb25maWcoKSB1c2VkIHRvIHNldCBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBib2FyZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludCBzZXRfYXN5X2NvbmZpZyhzZGxhX3QqIGNhcmQpCi17Ci0KLSAgICAgICAgQVNZX0NPTkZJR1VSQVRJT05fU1RSVUNUIGNmZzsKLSAJQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1haWxib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKEFTWV9DT05GSUdVUkFUSU9OX1NUUlVDVCkpOwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKQotCQljZmcuYmF1ZF9yYXRlID0gY2FyZC0+d2FuZGV2LmJwczsKLQotCWNmZy5saW5lX2NvbmZpZ19vcHRpb25zID0gKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKSA/Ci0JCUlOVEVSRkFDRV9MRVZFTF9SUzIzMiA6IElOVEVSRkFDRV9MRVZFTF9WMzU7Ci0KLQljZmcubW9kZW1fY29uZmlnX29wdGlvbnMJPSAwOwotCWNmZy5hc3lfQVBJX29wdGlvbnMgCQk9IGNhcmQtPnUuYy5hcGlfb3B0aW9uczsKLQljZmcuYXN5X3Byb3RvY29sX29wdGlvbnMJPSBjYXJkLT51LmMucHJvdG9jb2xfb3B0aW9uczsKLQljZmcuVHhfYml0c19wZXJfY2hhcgkJPSBjYXJkLT51LmMudHhfYml0c19wZXJfY2hhcjsKLQljZmcuUnhfYml0c19wZXJfY2hhcgkJPSBjYXJkLT51LmMucnhfYml0c19wZXJfY2hhcjsKLQljZmcuc3RvcF9iaXRzCQkJPSBjYXJkLT51LmMuc3RvcF9iaXRzOwotCWNmZy5wYXJpdHkJCQk9IGNhcmQtPnUuYy5wYXJpdHk7Ci0JY2ZnLmJyZWFrX3RpbWVyCQkJPSBjYXJkLT51LmMuYnJlYWtfdGltZXI7Ci0JY2ZnLmFzeV9SeF9pbnRlcl9jaGFyX3RpbWVyCT0gY2FyZC0+dS5jLmludGVyX2NoYXJfdGltZXI7IAotCWNmZy5hc3lfUnhfY29tcGxldGVfbGVuZ3RoCT0gY2FyZC0+dS5jLnJ4X2NvbXBsZXRlX2xlbmd0aDsgCi0JY2ZnLlhPTl9jaGFyCQkJPSBjYXJkLT51LmMueG9uX2NoYXI7Ci0JY2ZnLlhPRkZfY2hhcgkJCT0gY2FyZC0+dS5jLnhvZmZfY2hhcjsKLQljZmcuYXN5X3N0YXRpc3RpY3Nfb3B0aW9ucwk9IChDSERMQ19UWF9EQVRBX0JZVEVfQ09VTlRfU1RBVCB8Ci0JCUNIRExDX1JYX0RBVEFfQllURV9DT1VOVF9TVEFUKTsKLQotCW1haWxib3gtPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoQVNZX0NPTkZJR1VSQVRJT05fU1RSVUNUKTsKLQltZW1jcHkobWFpbGJveC0+ZGF0YSwgJmNmZywgbWFpbGJveC0+YnVmZmVyX2xlbmd0aCk7Ci0JbWFpbGJveC0+Y29tbWFuZCA9IFNFVF9BU1lfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWFpbGJveCkgPyBtYWlsYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykgCi0JCWNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1haWxib3gpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGFzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9ucy4KLSAqLwotCi1zdGF0aWMgaW50IGFzeV9jb21tX2VuYWJsZSAoc2RsYV90KiBjYXJkKQotewotCi0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gRU5BQkxFX0FTWV9DT01NVU5JQ0FUSU9OUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LICYmIGNhcmQtPndhbmRldi5kZXYpCi0JCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQotCWlmICghZXJyKQotCQljYXJkLT51LmMuY29tbV9lbmFibGVkID0gMTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBnbG9iYWwgZXhjZXB0aW9uIGNvbmRpdGlvbgotICovCi1zdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltYm94LT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYm94LT5jb21tYW5kID0gUkVBRF9HTE9CQUxfRVhDRVBUSU9OX0NPTkRJVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENNRF9USU1FT1VUICl7Ci0JCi0JCXN3aXRjaChtYm94LT5yZXR1cm5fY29kZSkgewotICAgICAgICAgCi0JICAgICAgCWNhc2UgRVhDRVBfTU9ERU1fU1RBVFVTX0NIQU5HRToKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vZGVtIHN0YXR1cyBjaGFuZ2VcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQkJCXN3aXRjaChtYm94LT5kYXRhWzBdICYgKERDRF9ISUdIIHwgQ1RTX0hJR0gpKSB7Ci0JCQkJY2FzZSAoRENEX0hJR0gpOgotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRENEIGhpZ2gsIENUUyBsb3dcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgKENUU19ISUdIKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGxvdywgQ1RTIGhpZ2hcbiIsY2FyZC0+ZGV2bmFtZSk7IAotCQkJCQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoKERDRF9ISUdIIHwgQ1RTX0hJR0gpKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGhpZ2gsIENUUyBoaWdoXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBsb3csIENUUyBsb3dcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRVhDRVBfVFJDX0RJU0FCTEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmUgdHJhY2UgZGlzYWJsZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotCQljYXNlIEVYQ0VQX0lSUV9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElSUSB0aW1lb3V0IG9jY3VycmVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOyAKLQkJCWJyZWFrOwotCi0JCWNhc2UgMHgxNzoKLQkJCWlmIChjYXJkLT50dHlfb3B0KXsKLQkJCQlpZiAoY2FyZC0+dHR5ICYmIGNhcmQtPnR0eV9vcGVuKXsgCi0JCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJCQkiJXM6IE1vZGVtIEhhbmd1cCBFeGNlcHRpb246IEhhbmdpbmcgVXAhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJCXR0eV9oYW5ndXAoY2FyZC0+dHR5KTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIElmIFRUWSBpcyBub3QgdXNlZCBqdXN0IGRyb3AgdGhyb3VnaHQgKi8KLQkJCQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogR2xvYmFsIGV4Y2VwdGlvbiAleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYm94LT5yZXR1cm5fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBjaGRsYyBleGNlcHRpb24gY29uZGl0aW9uCi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc19jaGRsY19leGNlcHRpb24oc2RsYV90ICpjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfRVhDRVBUSU9OX0NPTkRJVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYoZXJyICE9IENNRF9USU1FT1VUKSB7Ci0JCi0JCXN3aXRjaCAoZXJyKSB7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0FDVElWRToKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCQkJdHJpZ2dlcl9jaGRsY19wb2xsKGNhcmQtPndhbmRldi5kZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNOgotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQl1bmNvbmZpZ3VyZV9pcChjYXJkKTsKLQkJCXRyaWdnZXJfY2hkbGNfcG9sbChjYXJkLT53YW5kZXYuZGV2KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRVhDRVBfTElOS19JTkFDVElWRV9LUEFMVjoKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtlZXBhbGl2ZSB0aW1lciBleHBpcmVkLlxuIiwKLQkJCQkgCQljYXJkLT5kZXZuYW1lKTsKLQkJCXVuY29uZmlndXJlX2lwKGNhcmQpOwotCQkJdHJpZ2dlcl9jaGRsY19wb2xsKGNhcmQtPndhbmRldi5kZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9JUF9BRERSRVNTX0RJU0NPVkVSRUQ6Ci0JCQlpZiAoY29uZmlndXJlX2lwKGNhcmQpKSAKLQkJCQlyZXR1cm4gLTE7Ci0JCQlicmVhazsKLQotCQljYXNlIEVYQ0VQX0xPT1BCQUNLX0NPTkRJVElPTjoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMb29wYmFjayBDb25kaXRpb24gRGV0ZWN0ZWQuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIE5PX0NIRExDX0VYQ0VQX0NPTkRfVE9fUkVQT1JUOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIGV4Y2VwdGlvbnMgcmVwb3J0ZWQuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29uZmlndXJlIElQIGZyb20gU0xBUlAgbmVnb3RpYXRpb24KLSAqIFRoaXMgYWRkcyBkeW5hbWljIHJvdXRlcyB3aGVuIFNMQVJQIGhhcyBwcm92aWRlZCB2YWxpZCBhZGRyZXNzZXMKLSAqLwotCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9pcCAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhOwotICAgICAgICBjaGFyIGVycjsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gMDsKLQotCWNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQkKLQkKLSAgICAgICAgLyogc2V0IHRvIGRpc2NvdmVyICovCi0gICAgICAgIGlmKGNhcmQtPnUuYy5zbGFycF90aW1lciAhPSAweDAwKSB7Ci0JCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JCUNIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICpjZmc7Ci0KLSAgICAgCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCi0JCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQljZmcgPSAoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YTsKLSAgICAgICAgICAgICAgICBjaGRsY19wcml2X2FyZWEtPklQX2FkZHJlc3MgPSBjZmctPklQX2FkZHJlc3M7Ci0gICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhLT5JUF9uZXRtYXNrID0gY2ZnLT5JUF9uZXRtYXNrOwotCi0JCS8qIFNldCBmbGFnIHRvIGFkZCByb3V0ZSAqLwotCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IEFERF9ST1VURTsKLQotCQkvKiBUaGUgaWRlYSBoZXJlIGlzIHRvIGFkZCB0aGUgcm91dGUgaW4gdGhlIHBvbGwgcm91dGluZS4KLQkgICAJVGhpcyB3YXksIHdlIGFyZW4ndCBpbiBpbnRlcnJ1cHQgY29udGV4dCB3aGVuIGFkZGluZyByb3V0ZXMgKi8KLQkJdHJpZ2dlcl9jaGRsY19wb2xsKGRldik7Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVW4tQ29uZmlndXJlIElQIG5lZ290aWF0ZWQgYnkgU0xBUlAKLSAqIFRoaXMgcmVtb3ZlcyBkeW5hbWljIHJvdXRlcyB3aGVuIHRoZSBsaW5rIGJlY29tZXMgaW5hY3RpdmUuCi0gKi8KLQotc3RhdGljIGludCB1bmNvbmZpZ3VyZV9pcCAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIDA7Ci0KLQljaGRsY19wcml2X2FyZWE9IGRldi0+cHJpdjsKLQkKLQlpZiAoY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgPT0gUk9VVEVfQURERUQpIHsKLQotCQkvKiBOb3RlOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIAotICAgICAgICAgICAgICAgICAqIHBvcnQgc3RhdGUgaGFzIGJlZW4gRElTQ09OTkVDVEVELiAgVGhpcyBzdGF0ZQotICAgICAgICAgICAgICAgICAqIGNoYW5nZSB3aWxsIHRyaWdnZXIgYSBwb2xsX2Rpc2Nvbm5lY3RlZCAKLSAgICAgICAgICAgICAgICAgKiBmdW5jdGlvbiwgdGhhdCB3aWxsIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi4gCi0JCSAqLwotCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IFJFTU9WRV9ST1VURTsKLQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSb3V0aW5lIHRvIGFkZC9yZW1vdmUgcm91dGVzIAotICogQ2FsbGVkIGxpa2UgYSBwb2xsaW5nIHJvdXRpbmUgd2hlbiBSb3V0ZXMgYXJlIGZsYWdnZWQgdG8gYmUgYWRkZWQvcmVtb3ZlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3JvdXRlIChzZGxhX3QgKmNhcmQpCi17Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotICAgICAgICB1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gTlVMTDsKLQl1MzIgbG9jYWxfSVBfYWRkciA9IDA7Ci0JdTMyIHJlbW90ZV9JUF9hZGRyID0gMDsKLQl1MzIgSVBfbmV0bWFzaywgSVBfYWRkcjsKLSAgICAgICAgaW50IGVyciA9IDA7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCW1tX3NlZ21lbnRfdCBmczsKLQlzdHJ1Y3QgaWZyZXEgaWZfaW5mbzsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICppZl9kYXRhMSwgKmlmX2RhdGEyOwotCQotICAgICAgICBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0gICAgICAgIHBvcnRfbnVtID0gY2FyZC0+dS5jLmNvbW1fcG9ydDsKLQotCS8qIEJ1ZyBGaXggTWFyIDE2IDIwMDAKLQkgKiBBTkQgdGhlIElQIGFkZHJlc3MgdG8gdGhlIE1hc2sgYmVmb3JlIGNoZWNraW5nCi0gICAgICAgICAqIHRoZSBsYXN0IHR3byBiaXRzLiAqLwotCi0JaWYoKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID09IEFERF9ST1VURSkgJiYKLQkJKChjaGRsY19wcml2X2FyZWEtPklQX2FkZHJlc3MgJiB+Y2hkbGNfcHJpdl9hcmVhLT5JUF9uZXRtYXNrKSA+IDIpKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER5bmFtaWMgcm91dGUgZmFpbHVyZS5cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZihjYXJkLT51LmMuc2xhcnBfdGltZXIpIHsKLQkJCXUzMiBhZGRyX25ldCA9IGh0b25sKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyk7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYWQgSVAgYWRkcmVzcyAldS4ldS4ldS4ldSByZWNlaXZlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLAotCQkJICAgICAgIE5JUFFVQUQoYWRkcl9uZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBmcm9tIHJlbW90ZSBzdGF0aW9uLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQotICAgICAgICAgICAgICAgIH1lbHNleyAKLQkJCXUzMiBhZGRyX25ldCA9IGh0b25sKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBCYWQgSVAgYWRkcmVzcyAldS4ldS4ldS4ldSBpc3N1ZWRcbiIsCi0JCQkgICAgICAgY2FyZC0+ZGV2bmFtZSwKLQkJCSAgICAgICBOSVBRVUFEKGFkZHJfbmV0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogdG8gcmVtb3RlIHN0YXRpb24uIExvY2FsXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElQIGFkZHJlc3MgbXVzdCBiZSBBLkIuQy4xXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9yIEEuQi5DLjIuXG4iLGNhcmQtPmRldm5hbWUpOwotCQl9Ci0KLQkJLyogcmVtb3ZlIHRoZSByb3V0ZSBkdWUgdG8gdGhlIElQIGFkZHJlc3MgZXJyb3IgY29uZGl0aW9uICovCi0JCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID0gUkVNT1ZFX1JPVVRFOwotCQllcnIgPSAxOwotICAgCX0KLQotCS8qIElmIHdlIGFyZSByZW1vdmluZyBhIHJvdXRlIHdpdGggYmFkIElQIGFkZHJlc3NpbmcsIHRoZW4gdXNlIHRoZSAqLwotCS8qIGxvY2FsbHkgY29uZmlndXJlZCBJUCBhZGRyZXNzZXMgKi8KLSAgICAgICAgaWYoKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID09IFJFTU9WRV9ST1VURSkgJiYgZXJyKSB7Ci0KLSAJICAgICAgICAvKiBkbyBub3QgcmVtb3ZlIGEgYmFkIHJvdXRlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkICovCi0gICAgICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnJvdXRlX3JlbW92ZWQpIHsKLQkgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAJfQotCi0gICAgICAgICAgICAgICAgaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0KLSAgICAgICAgICAgICAgICBpZihpbl9kZXYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZmEgIT0gTlVMTCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfSVBfYWRkciA9IGlmYS0+aWZhX2xvY2FsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9uZXRtYXNrICA9IGlmYS0+aWZhX21hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCX1lbHNleyAKLSAgICAgICAJCS8qIEFjY29yZGluZyB0byBDaXNjbyBIRExDLCBpZiB0aGUgcG9pbnQtdG8tcG9pbnQgYWRkcmVzcyBpcwotCQkgICBBLkIuQy4xLCB0aGVuIHdlIGFyZSB0aGUgb3Bwb3NpdGUgKEEuQi5DLjIpLCBhbmQgdmljZS12ZXJzYS4KLQkJKi8KLQkJSVBfbmV0bWFzayA9IG50b2hsKGNoZGxjX3ByaXZfYXJlYS0+SVBfbmV0bWFzayk7Ci0JICAgICAgICByZW1vdGVfSVBfYWRkciA9IG50b2hsKGNoZGxjX3ByaXZfYXJlYS0+SVBfYWRkcmVzcyk7Ci0JCi0KLQkJLyogSWYgTmV0bWFzayBpcyAyNTUuMjU1LjI1NS4yNTUgdGhlIGxvY2FsIGFkZHJlc3MKLSAgICAgICAgICAgICAgICAgKiBjYWxjdWxhdGlvbiB3aWxsIGZhaWwuIERlZmF1bHQgaXQgYmFjayB0byAyNTUuMjU1LjI1NS4wICovCi0JCWlmIChJUF9uZXRtYXNrID09IDB4ZmZmZmZmZmYpCi0JCQlJUF9uZXRtYXNrICY9IDB4MDBmZmZmZmY7Ci0KLQkJLyogQnVnIEZpeCBNYXIgMTYgMjAwMAotCQkgKiBBTkQgdGhlIFJlbW90ZSBJUCBhZGRyZXNzIHdpdGggSVAgbmV0bWFzaywgaW5zdGVhZAotICAgICAgICAgICAgICAgICAqIG9mIHN0YXRpYyBuZXRtYXNrIG9mIDI1NS4yNTUuMjU1LjAgKi8KLSAgICAgICAgCWxvY2FsX0lQX2FkZHIgPSAocmVtb3RlX0lQX2FkZHIgJiBJUF9uZXRtYXNrKSArCi0gICAgICAgICAgICAgICAgCSh+cmVtb3RlX0lQX2FkZHIgJiBudG9obCgweDAwMDMpKTsKLQotCSAgICAgICAgaWYoIWNhcmQtPnUuYy5zbGFycF90aW1lcikgewotCQkJSVBfYWRkciA9IGxvY2FsX0lQX2FkZHI7Ci0JCQlsb2NhbF9JUF9hZGRyID0gcmVtb3RlX0lQX2FkZHI7Ci0JCQlyZW1vdGVfSVBfYWRkciA9IElQX2FkZHI7Ci0gICAgICAgCQl9Ci0JfQotCi0gICAgICAgIGZzID0gZ2V0X2ZzKCk7ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBmaWxlIHN5c3RlbSAgKi8KLSAgICAgICAgc2V0X2ZzKGdldF9kcygpKTsgICAgICAgICAgICAgICAvKiBHZXQgdXNlciBzcGFjZSBibG9jayAqLwotCi0gICAgICAgIC8qIFNldHVwIGEgc3RydWN0dXJlIGZvciBhZGRpbmcvcmVtb3Zpbmcgcm91dGVzICovCi0gICAgICAgIG1lbXNldCgmaWZfaW5mbywgMCwgc2l6ZW9mKGlmX2luZm8pKTsKLSAgICAgICAgc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQlzd2l0Y2ggKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzKSB7Ci0KLQljYXNlIEFERF9ST1VURToKLQotCQlpZighY2FyZC0+dS5jLnNsYXJwX3RpbWVyKSB7Ci0JCQlpZl9kYXRhMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSByZW1vdGVfSVBfYWRkcjsKLQkJCWlmX2RhdGEyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJCWVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvKTsKLQkJfSBlbHNlIHsgCi0JCQlpZl9kYXRhMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfYWRkcjsKLQkJCWlmX2RhdGExLT5zaW5fYWRkci5zX2FkZHIgPSBsb2NhbF9JUF9hZGRyOwotCQkJaWZfZGF0YTEtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJaWYoIShlcnIgPSBkZXZpbmV0X2lvY3RsKFNJT0NTSUZBRERSLCAmaWZfaW5mbykpKXsKLQkJCQlpZl9kYXRhMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJCQlpZl9kYXRhMi0+c2luX2FkZHIuc19hZGRyID0gcmVtb3RlX0lQX2FkZHI7Ci0JCQkJaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJCWVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkRTVEFERFIsICZpZl9pbmZvKTsKLQkJCX0KLQkJfQotCi0gICAgICAgICAgICAgICBpZihlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBZGQgcm91dGUgJXUuJXUuJXUuJXUgZmFpbGVkICglZClcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQocmVtb3RlX0lQX2FkZHIpLCBlcnIpOwotCQl9IGVsc2UgewotCQkJKChjaGRsY19wcml2YXRlX2FyZWFfdCAqKWRldi0+cHJpdiktPnJvdXRlX3N0YXR1cyA9IFJPVVRFX0FEREVEOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER5bmFtaWMgcm91dGUgYWRkZWQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgIExvY2FsIElQIGFkZHIgOiAldS4ldS4ldS4ldVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGxvY2FsX0lQX2FkZHIpKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICBSZW1vdGUgSVAgYWRkcjogJXUuJXUuJXUuJXVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChyZW1vdGVfSVBfYWRkcikpOwotCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9yZW1vdmVkID0gMDsKLQkJfQotCQlicmVhazsKLQotCi0JY2FzZSBSRU1PVkVfUk9VVEU6Ci0JCi0JCS8qIENoYW5nZSB0aGUgbG9jYWwgaXAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIHRvIDAuCi0JCSAqIFRoaXMgd2lsbCBhbHNvIGRlbGV0ZSB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0JCSAqLwotCQlpZighY2FyZC0+dS5jLnNsYXJwX3RpbWVyKSB7Ci0JCQlpZl9kYXRhMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCQkJaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGRFNUQUREUiwgJmlmX2luZm8pOwotCQl9IGVsc2UgewotCQkJaWZfZGF0YTEgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmX2luZm8uaWZyX2FkZHI7Ci0JCQlpZl9kYXRhMS0+c2luX2FkZHIuc19hZGRyID0gMDsKLQkJCWlmX2RhdGExLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJCWVyciA9IGRldmluZXRfaW9jdGwoU0lPQ1NJRkFERFIsJmlmX2luZm8pOwotCQkKLQkJfQotCQlpZihlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IFJlbW92ZSByb3V0ZSAldS4ldS4ldS4ldSBmYWlsZWQsIChlcnIgJWQpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKHJlbW90ZV9JUF9hZGRyKSwKLQkJCQkJZXJyKTsKLQkJfSBlbHNlIHsKLQkJCSgoY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKilkZXYtPnByaXYpLT5yb3V0ZV9zdGF0dXMgPQotCQkJCU5PX1JPVVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER5bmFtaWMgcm91dGUgcmVtb3ZlZDogJXUuJXUuJXUuJXVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChsb2NhbF9JUF9hZGRyKSk7IAotCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9yZW1vdmVkID0gMTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLSAgICAgICAgc2V0X2ZzKGZzKTsgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGZpbGUgc3lzdGVtICovCi0KLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdG9yZSBhIFVEUCBtYW5hZ2VtZW50IHBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KLSAqLwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSkKLXsKLQlpbnQgdWRwX3BrdF9zdG9yZWQgPSAwOwotCi0JaWYoIWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoICYmCi0JICAoc2tiLT5sZW4gPD0gTUFYX0xHVEhfVURQX01HTlRfUEtUKSkgewotICAgICAgICAJY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggPSBza2ItPmxlbjsKLQkJY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9IHVkcF9wa3Rfc3JjOwotICAgICAgIAkJbWVtY3B5KGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCA9IFRNUl9JTlRfRU5BQkxFRF9VRFA7Ci0JCXVkcF9wa3Rfc3RvcmVkID0gMTsKLQl9Ci0KLQlpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9TVEFDSyl7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0JCQotCXJldHVybih1ZHBfcGt0X3N0b3JlZCk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgbWFuYWdlbWVudCBwYWNrZXQuCi0gKi8KLQotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSApIAotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgZnJhbWVzLCBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCwgcmVhbF9sZW47Ci0JdW5zaWduZWQgbG9uZyBkYXRhX3B0cjsKLQl1bnNpZ25lZCBkYXRhX2xlbmd0aDsKLQlpbnQgdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIgPSBjYXJkLT5tYm94OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCWNoZGxjX3VkcF9wa3RfdCAqY2hkbGNfdWRwX3BrdDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlpbnQgZXJyOwotCWNoYXIgdXRfY2hhcjsKLQotCWNoZGxjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhOwotCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKXsKLQotCQkvKiBPbmx5IHRoZXNlIGNvbW1hbmRzIGFyZSBzdXBwb3J0IGZvciByZW1vdGUgZGVidWdnaW5nLgotCQkgKiBBbGwgb3RoZXJzIGFyZSBub3QgKi8KLQkJc3dpdGNoKGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0KLQkJCWNhc2UgUkVBRF9HTE9CQUxfU1RBVElTVElDUzoKLQkJCWNhc2UgUkVBRF9NT0RFTV9TVEFUVVM6ICAKLQkJCWNhc2UgUkVBRF9DSERMQ19MSU5LX1NUQVRVUzoKLQkJCWNhc2UgQ1BJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQljYXNlIFJFQURfQ09NTVNfRVJST1JfU1RBVFM6Ci0JCQljYXNlIFJFQURfQ0hETENfT1BFUkFUSU9OQUxfU1RBVFM6Ci0KLQkJCS8qIFRoZXNlIHR3byBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgZm9yCi0JCQkgKiBlYWNoIHJlcXVlc3QgKi8KLQkJCWNhc2UgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOgotCQkJY2FzZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTjoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQl9IAotCX0KLQkKLSAgCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLQotCQkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmJ1ZmZlcl9sZW5ndGggPSAwOwotCi0gICAgCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gMHhDRDsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsJCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBXYXJuaW5nLCBJbGxlZ2FsIFVEUCBjb21tYW5kIGF0dGVtcHRlZCBmcm9tIG5ldHdvcms6ICV4XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxjaGRsY191ZHBfcGt0LT5jYmxvY2suY29tbWFuZCk7Ci0JCX0KLQotICAgCX0gZWxzZSB7Ci0JICAgCXVuc2lnbmVkIGxvbmcgdHJhY2Vfc3RhdHVzX2NmZ19hZGRyID0gMDsKLQkJVFJBQ0VfU1RBVFVTX0VMX0NGR19TVFJVQ1QgdHJhY2VfY2ZnX3N0cnVjdDsKLQkJVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUIHRyYWNlX2VsZW1lbnRfc3RydWN0OwotCi0JCXN3aXRjaChjaGRsY191ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCWNhc2UgQ1BJUEVfRU5BQkxFX1RSQUNJTkc6Ci0JCSAgICAgaWYgKCFjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0KLQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZihMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QpOwotCQkJbWItPmNvbW1hbmQgPSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTjsKLQotICAgIAkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCQl0cmFjZV9jb25maWcgPSBUUkFDRV9BQ1RJVkU7Ci0JCQkvKiBUcmFjZSBkZWxheSBtb2RlIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgc2xvd3MKLQkJCSAgIGRvd24gdHJhbnNmZXIgYW5kIHJlc3VsdHMgaW4gYSBzdGFuZG9mZiBzaXR1YXRpb24KLQkJCSAgIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgZGF0YSAqLwotCi0JCQkvKiBDb25maWd1cmUgdGhlIFRyYWNlIGJhc2VkIG9uIHVzZXIgaW5wdXRzICovCi0JCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+dHJhY2VfY29uZmlnIHw9IAotCQkJCQljaGRsY191ZHBfcGt0LT5kYXRhWzBdOwotCi0JCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQkgICB0cmFjZV9kZWFjdGl2YXRpb25fdGltZXIgPSA0MDAwOwotCi0KLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gZXJyOwotCQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCQlicmVhazsKLQkgICAgCQl9IAotCi0JCQkvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCi0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTjsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCQkJaWYgKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCQkJCWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IGVycjsKLQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQkJYnJlYWs7Ci0JICAgIAkJfSAJCi0KLQkgICAJCXRyYWNlX3N0YXR1c19jZmdfYWRkciA9KChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKikKLQkJCQltYi0+ZGF0YSkgLT4gcHRyX3RyYWNlX3N0YXRfZWxfY2ZnX3N0cnVjdDsKLQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgdHJhY2Vfc3RhdHVzX2NmZ19hZGRyLAotCQkJCSAmdHJhY2VfY2ZnX3N0cnVjdCwgc2l6ZW9mKHRyYWNlX2NmZ19zdHJ1Y3QpKTsKLQkJICAgIAotCQkJY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyID0gdHJhY2VfY2ZnX3N0cnVjdC4KLQkJCQliYXNlX2FkZHJfdHJhY2Vfc3RhdHVzX2VsZW1lbnRzOwotCi0JCQljaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50cyA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0Lm51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHM7Ci0KLQkJCWNoZGxjX3ByaXZfYXJlYS0+ZW5kX3RyYWNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJKChUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QgKikKLQkJCQkJIGNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciArIAotCQkJCQkgKGNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzIC0gMSkpOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmJhc2VfYWRkcl90cmFjZV9idWZmZXIgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmVuZF9hZGRyX3RyYWNlX2J1ZmZlciA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0LmVuZF9hZGRyX3RyYWNlX2J1ZmZlcjsKLQotCQkgICAgCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QubmV4dF90cmFjZV9lbGVtZW50X3RvX3VzZTsKLQotCSAgICAJCWNoZGxjX3ByaXZfYXJlYS0+YXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSA9IDIwMDAgLSAKLQkJCQkJCQkJICBzaXplb2YoaXBfcGt0X3QpIC0KLQkJCQkJCQkJICBzaXplb2YodWRwX3BrdF90KSAtCi0JCQkJCQkJICAgICAgCSAgc2l6ZW9mKHdwX21nbXRfdCkgLQotCQkJCQkJCQkgIHNpemVvZihjYmxvY2tfdCkgLQotCQkJCQkJCSAgICAgICAgICBzaXplb2YodHJhY2VfaW5mb190KTsJCi0JICAgICAgIAkgICAgIH0KLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkgICAgICAgCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDE7Ci0JICAgICAgIAkgICAgIGJyZWFrOwotCSAgIAotCi0JCWNhc2UgQ1BJUEVfRElTQUJMRV9UUkFDSU5HOgotCQkgICAgIGlmIChjaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkKSB7Ci0KLQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUKTsKLQkJCW1iLT5jb21tYW5kID0gU0VUX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0gICAgCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJCXRyYWNlX2NvbmZpZyA9IFRSQUNFX0lOQUNUSVZFOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQkgICAgIH0JCQotCi0JCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCSAgICAgYnJlYWs7Ci0JICAgCi0KLQkJY2FzZSBDUElQRV9HRVRfVFJBQ0VfSU5GTzoKLQotCQkgICAgIGlmICghY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gMTsKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJCWJyZWFrOwotCQkgICAgIH0KLQotICAJCSAgICAgY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMDsKLQkJICAgICBidWZmZXJfbGVuZ3RoID0gMDsJLyogb2Zmc2V0IG9mIHBhY2tldCBhbHJlYWR5IG9jY3VwaWVkICovCi0KLQkJICAgICBmb3IgKGZyYW1lcz0wOyBmcmFtZXMgPCBjaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50czsgZnJhbWVzKyspewotCi0JCQl0cmFjZV9wa3RfdCAqdHJhY2VfcGt0ID0gKHRyYWNlX3BrdF90ICopCi0JCQkJJmNoZGxjX3VkcF9wa3QtPmRhdGFbYnVmZmVyX2xlbmd0aF07Ci0KLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyLAotCQkJICAgCSAgKHVuc2lnbmVkIGNoYXIgKikmdHJhY2VfZWxlbWVudF9zdHJ1Y3QsCi0JCQkgICAJICBzaXplb2YoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUKSk7Ci0KLSAgICAgCQkJaWYgKHRyYWNlX2VsZW1lbnRfc3RydWN0Lm9wcF9mbGFnID09IDB4MDApIHsKLQkJCSAJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIGdldCBwb2ludGVyIHRvIHJlYWwgZGF0YSAqLwotCQkJZGF0YV9wdHIgPSB0cmFjZV9lbGVtZW50X3N0cnVjdC5wdHJfZGF0YV9iZnI7Ci0KLQkJCS8qIFNlZSBpZiB0aGVyZSBpcyBhY3R1YWwgZGF0YSBvbiB0aGUgdHJhY2UgYnVmZmVyICovCi0JCQlpZiAoZGF0YV9wdHIpewotCQkJCWRhdGFfbGVuZ3RoID0gdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfbGVuZ3RoOwotCQkJfWVsc2V7Ci0JCQkJZGF0YV9sZW5ndGggPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0JCQl9Ci0JCi0gICAJCQlpZiggKGNoZGxjX3ByaXZfYXJlYS0+YXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpCi0JCQkJPCAoIHNpemVvZih0cmFjZV9wa3RfdCkgKyBkYXRhX2xlbmd0aCkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbW9yZSBmcmFtZXMgb24gYm9hcmQgJiBleGl0ICovCi0JCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0JCQl0cmFjZV9wa3QtPnN0YXR1cyA9IHRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX3R5cGU7Ci0KLQkJCXRyYWNlX3BrdC0+dGltZV9zdGFtcCA9Ci0JCQkJdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfdGltZV9zdGFtcDsKLQotCQkJdHJhY2VfcGt0LT5yZWFsX2xlbmd0aCA9Ci0JCQkJdHJhY2VfZWxlbWVudF9zdHJ1Y3QudHJhY2VfbGVuZ3RoOwotCi0JCQkvKiBzZWUgaWYgd2UgY2FuIGZpdCB0aGUgZnJhbWUgaW50byB0aGUgdXNlciBidWZmZXIgKi8KLQkJCXJlYWxfbGVuID0gdHJhY2VfcGt0LT5yZWFsX2xlbmd0aDsKLQotCQkJaWYgKGRhdGFfcHRyID09IDApIHsKLQkJCSAgICAgCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDA7Ci0JCQl9IGVsc2UgewotCQkJCXVuc2lnbmVkIHRtcCA9IDA7Ci0KLQkJCQkvKiBnZXQgdGhlIGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIKLQkJCQkgICAgbXVzdCBjaGVjayBmb3IgZW5kIG9mIGJ1ZmZlciAqLwotCQkJICAgICAgICB0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPSAweDAxOwotCi0JCQkJaWYgKChkYXRhX3B0ciArIHJlYWxfbGVuKSA+Ci0JCQkJCSAgICAgY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgKyAxKXsKLQotCQkJCSAgICAJdG1wID0gY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgLSBkYXRhX3B0ciArIDE7Ci0JCQkJICAgIAlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwKLQkJCQkJICAgICAgIAkgIHRyYWNlX3BrdC0+ZGF0YSx0bXApOwotCQkJCSAgICAJZGF0YV9wdHIgPSBjaGRsY19wcml2X2FyZWEtPmJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0JCQkJfQotCQotCQkgICAgICAgIAlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwKLQkJCQkJICAmdHJhY2VfcGt0LT5kYXRhW3RtcF0sIHJlYWxfbGVuIC0gdG1wKTsKLQkJCX0JCi0KLQkJCS8qIHplcm8gdGhlIG9wcCBmbGFnIHRvIHNob3cgd2UgZ290IHRoZSBmcmFtZSAqLwotCQkJdXRfY2hhciA9IDB4MDA7Ci0JCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBjaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgJnV0X2NoYXIsIDEpOwotCi0gICAgICAgCQkJLyogbm93IG1vdmUgb250byB0aGUgbmV4dCBmcmFtZSAqLwotICAgICAgIAkJCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyICs9IHNpemVvZihUUkFDRV9TVEFUVVNfRUxFTUVOVF9TVFJVQ1QpOwotCi0gICAgICAgCQkJLyogY2hlY2sgaWYgd2Ugd2VudCBvdmVyIHRoZSBsYXN0IGFkZHJlc3MgKi8KLQkJCWlmICggY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPiBjaGRsY19wcml2X2FyZWEtPmVuZF90cmFjZV9hZGRyICkgewotCQkJCWNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gY2hkbGNfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyOwotICAgICAgIAkJCX0KLQotICAgICAgICAgICAgCQlpZih0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPT0gMHgwMSkgewotCQkJCWJ1ZmZlcl9sZW5ndGggKz0gcmVhbF9sZW4gLSAxOwotCQkJfQotCSAKLQkgICAgICAgCSAgICAJLyogZm9yIHRoZSBoZWFkZXIgKi8KLQkgICAgICAgICAgICAJYnVmZmVyX2xlbmd0aCArPSBzaXplb2YodHJhY2VfcGt0X3QpOwotCi0JCSAgICAgfSAgLyogRm9yIExvb3AgKi8KLQotCQkgICAgIGlmIChmcmFtZXMgPT0gY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHMpewotCQkJY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5pc21vcmVkYXRhID0gMHgwMTsKLQkgICAgICAgICAgICAgfQotIAkJICAgICBjaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLm51bV9mcmFtZXMgPSBmcmFtZXM7Ci0JCSAKLSAgICAJCSAgICAgbWItPmJ1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOwotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsgCi0JCSAKLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOyAKLQkJICAgICAKLQkJICAgICBicmVhazsKLQotCi0JCWNhc2UgQ1BJUEVfRlQxX1JFQURfU1RBVFVTOgotCQkJKCh1bnNpZ25lZCBjaGFyICopY2hkbGNfdWRwX3BrdC0+ZGF0YSApWzBdID0KLQkJCQlmbGFncy0+RlQxX2luZm9fc3RydWN0LnBhcmFsbGVsX3BvcnRfQV9pbnB1dDsKLQotCQkJKCh1bnNpZ25lZCBjaGFyICopY2hkbGNfdWRwX3BrdC0+ZGF0YSApWzFdID0KLQkJCQlmbGFncy0+RlQxX2luZm9fc3RydWN0LnBhcmFsbGVsX3BvcnRfQl9pbnB1dDsKLQkJCQkKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCQljaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IDI7Ci0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDI7Ci0JCQlicmVhazsKLQotCQljYXNlIENQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZXJfc3RhcnRfdGltZTsKLQkJCSoodW5zaWduZWQgbG9uZyAqKSZjaGRsY191ZHBfcGt0LT5kYXRhID0gCi0JCQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWU7CQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0JCQljaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCQlicmVhazsKLQotICAgCQljYXNlIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMOgotCQkJLyogRW5hYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgICAgCWlmICgoY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSAmIEVOQUJMRV9SRUFEX0ZUMV9TVEFUVVMpIHx8ICAKLQkJCQkoY2hkbGNfdWRwX3BrdC0+ZGF0YVswXSAmIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUykpIHsKLQkJCQotCQkJICAgICAJaWYoIHJDb3VudCsrICE9IDAgKSB7Ci0JCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay4KLQkJCQkJcmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDE7Ci0JCSAgCQkJYnJlYWs7Ci0JCSAgICAJICAgICAJfQotCSAgICAgIAkJfQotCi0JICAgICAgCQkvKiBEaXNhYmxlIEZUMSBNT05JVE9SIFNUQVRVUyAqLwotCSAgICAgIAkJaWYoIGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gPT0gMCkgewotCi0JICAgICAgCSAgIAkgICAgIAlpZiggLS1yQ291bnQgIT0gMCkgewotCQkgIAkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay4KLQkJCQkJcmV0dXJuX2NvZGUgPSBDT01NQU5EX09LOwotCQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDE7Ci0JCSAgCQkJYnJlYWs7Ci0JICAgCSAgICAJICAgICAJfSAKLQkgICAgICAJCX0gCQotCQkJZ290byBkZmx0XzE7Ci0KLQkJZGVmYXVsdDoKLWRmbHRfMToKLQkJCS8qIGl0J3MgYSBib2FyZCBjb21tYW5kICovCi0JCQltYi0+Y29tbWFuZCA9IGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kOwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBjaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aDsKLQkJCWlmIChtYi0+YnVmZmVyX2xlbmd0aCkgewotCQkJCW1lbWNweSgmbWItPmRhdGEsICh1bnNpZ25lZCBjaGFyICopIGNoZGxjX3VkcF9wa3QtPgotCQkJCQkJCWRhdGEsIG1iLT5idWZmZXJfbGVuZ3RoKTsKLQkgICAgICAJCX0gCi0JCQkvKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIGJvYXJkICovCi0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCSAgICAgICAgIAltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmNibG9jaywgbWIsIHNpemVvZihjYmxvY2tfdCkpOyAKLQkJCQotCQkJaWYgKG1iLT5idWZmZXJfbGVuZ3RoKSB7Ci0JICAgICAgICAgCQltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmRhdGEsICZtYi0+ZGF0YSwgCi0JCQkJCQkJCW1iLT5idWZmZXJfbGVuZ3RoKTsgCi0JICAgICAgCQl9Ci0KLQkJfSAvKiBlbmQgb2Ygc3dpdGNoICovCi0gICAgIAl9IC8qIGVuZCBvZiBlbHNlICovCi0KLSAgICAgCS8qIEZpbGwgVURQIFRUTCAqLwotCWNoZGxjX3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOyAKLQotICAgICAJbGVuID0gcmVwbHlfdWRwKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBtYi0+YnVmZmVyX2xlbmd0aCk7Ci0JCi0KLSAgICAgCWlmKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSyl7Ci0KLQkJLyogTXVzdCBjaGVjayBpZiB3ZSBpbnRlcnJ1cHRlZCBpZl9zZW5kKCkgcm91dGluZS4gVGhlCi0JCSAqIHR4IGJ1ZmZlcnMgbWlnaHQgYmUgdXNlZC4gSWYgc28gZHJvcCB0aGUgcGFja2V0ICovCi0JICAgCWlmICghdGVzdF9iaXQoU0VORF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQotCQkJaWYoIWNoZGxjX3NlbmQoY2FyZCwgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbikpIHsKLQkJCQkrKyBjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsJCi0JCi0JCS8qIFBhc3MgaXQgdXAgdGhlIHN0YWNrCi0gICAgCQkgICBBbGxvY2F0ZSBzb2NrZXQgYnVmZmVyICovCi0JCWlmICgobmV3X3NrYiA9IGRldl9hbGxvY19za2IobGVuKSkgIT0gTlVMTCkgewotCQkJLyogY29weSBkYXRhIGludG8gbmV3X3NrYiAqLwotCi0gCSAgICAJCWJ1ZiA9IHNrYl9wdXQobmV3X3NrYiwgbGVuKTsKLSAgCSAgICAJCW1lbWNweShidWYsIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBsZW4pOwotCi0gICAgICAgICAgICAJCS8qIERlY2Fwc3VsYXRlIHBrdCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkgICAgCQluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLSAgICAgICAgICAgIAkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCSAgICAJCW5ld19za2ItPm1hYy5yYXcgID0gbmV3X3NrYi0+ZGF0YTsKLQkKLQkJCW5ldGlmX3J4KG5ld19za2IpOwotCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJfSBlbHNlIHsKLQkgICAgCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotICAJCX0KLSAgICAJfQotIAotCWNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gMDsKLSAJCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBSZWNlaXZlIGFuZCBUcmFuc21pdCBCdWZmZXJzLgotICovCi0KLXN0YXRpYyB2b2lkIGluaXRfY2hkbGNfdHhfcnhfYnVmZiggc2RsYV90KiBjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKnR4X2NvbmZpZzsKLQlDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqcnhfY29uZmlnOwotCWNoYXIgZXJyOwotCQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQlpZiAoY2FyZC0+d2FuZGV2LmRldil7Ci0JCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCXR4X2NvbmZpZyA9IChDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX0NIRExDX1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCkpOwotICAgICAgICAJcnhfY29uZmlnID0gKENIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfQ0hETENfUnhfc3RhdF9lbF9jZmdfc3RydWN0KSk7Ci0KLSAgICAgICAJCS8qIFNldHVwIEhlYWQgYW5kIFRhaWxzIGZvciBidWZmZXJzICovCi0gICAgICAgIAljYXJkLT51LmMudHhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHR4X2NvbmZpZy0+YmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyk7Ci0gICAgICAgIAljYXJkLT51LmMudHhidWZfbGFzdCA9IAotCQkoQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICopICAKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfYmFzZSArCi0JCSh0eF9jb25maWctPm51bWJlcl9UeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotICAgICAgICAJY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICByeF9jb25maWctPmJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMpOwotICAgICAgICAJY2FyZC0+dS5jLnJ4YnVmX2xhc3QgPQotCQkoQ0hETENfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUICopCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgKwotCQkocnhfY29uZmlnLT5udW1iZXJfUnhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAJCS8qIFNldCB1cCBuZXh0IHBvaW50ZXIgdG8gYmUgdXNlZCAqLwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgdHhfY29uZmlnLT5uZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSk7Ci0gICAgICAgIAljYXJkLT51LmMucnhtYiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHJ4X2NvbmZpZy0+bmV4dF9SeF9zdGF0dXNfZWxlbWVudF90b191c2UpOwotCX0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHhfY29uZmlnID0gKENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJcHRyX0NIRExDX1R4X3N0YXRfZWxfY2ZnX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCi0gICAgICAgICAgICAgICAgcnhfY29uZmlnID0gKENIRExDX1JYX1NUQVRVU19FTF9DRkdfU1RSVUNUICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCAlIFNETEFfV0lORE9XU0laRSkpOwotCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgSGVhZCBhbmQgVGFpbHMgZm9yIGJ1ZmZlcnMgKi8KLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWZfYmFzZSA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkodHhfY29uZmlnLT5iYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2xhc3QgPQotCQkoQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICopY2FyZC0+dS5jLnR4YnVmX2Jhc2UKLQkJKyAodHhfY29uZmlnLT5udW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9sYXN0ID0gCi0JCShDSERMQ19EQVRBX1JYX1NUQVRVU19FTF9TVFJVQ1QgKiljYXJkLT51LmMucnhidWZfYmFzZQotCQkrIChyeF9jb25maWctPm51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgLSAxKTsKLQotICAgICAgICAgICAgICAgICAvKiBTZXQgdXAgbmV4dCBwb2ludGVyIHRvIGJlIHVzZWQgKi8KLSAgICAgICAgICAgICAgICBjYXJkLT51LmMudHhidWYgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHR4X2NvbmZpZy0+bmV4dF9UeF9zdGF0dXNfZWxlbWVudF90b191c2UgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhtYiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkocnhfY29uZmlnLT5uZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2V0dXAgQWN0dWFsIEJ1ZmZlciBTdGFydCBhbmQgZW5kIGFkZHJlc3NlcyAqLwotICAgICAgICBjYXJkLT51LmMucnhfYmFzZSA9IHJ4X2NvbmZpZy0+YmFzZV9hZGRyX1J4X2J1ZmZlcjsKLSAgICAgICAgY2FyZC0+dS5jLnJ4X3RvcCAgPSByeF9jb25maWctPmVuZF9hZGRyX1J4X2J1ZmZlcjsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQZXJmb3JtIEludGVycnVwdCBUZXN0IGJ5IHJ1bm5pbmcgUkVBRF9DSERMQ19DT0RFX1ZFUlNJT04gY29tbWFuZCBNQVhfSU5UUgotICogX1RFU1RfQ09VTlRFUiB0aW1lcy4KLSAqLwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCogY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnIsaTsKLQotCUludHJfdGVzdF9jb3VudGVyID0gMDsKLQkKLQllcnIgPSBjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fQ09NTUFORF9DT01QTEVURSk7Ci0KLQlpZiAoZXJyID09IENNRF9PSykgeyAKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUjsgaSArKykgewkKLQkJCW1iLT5idWZmZXJfbGVuZ3RoICA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVyciAhPSBDTURfT0spIAotCQkJCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCQl9Ci0JfQotCWVsc2UgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgMCk7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gQ1BJUEVBQiA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCkKLXsKLQkgY2hkbGNfdWRwX3BrdF90ICpjaGRsY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotI2lmZGVmIF9XQU5fVURQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlNJRyAlcyA9ICVzXG5cCi0JCQkJICBVUFAgJXggPSAleFxuXAotCQkJCSAgUFJUICV4ID0gJXhcblwKLQkJCQkgIFJFUSAlaSA9ICVpXG5cCi0JCQkJICAzNiB0aCA9ICV4IDM3dGggPSAleFxuIiwKLQkJCQkgIGNoZGxjX3VkcF9wa3QtPndwX21nbXQuc2lnbmF0dXJlLAotCQkJCSAgVURQTUdNVF9TSUdOQVRVUkUsCi0JCQkJICBjaGRsY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCwKLQkJCQkgIG50b2hzKGNhcmQtPndhbmRldi51ZHBfcG9ydCksCi0JCQkJICBjaGRsY191ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wsCi0JCQkJICBVRFBNR01UX1VEUF9QUk9UT0NPTCwKLQkJCQkgIGNoZGxjX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSwKLQkJCQkgIFVEUE1HTVRfUkVRVUVTVCwKLQkJCQkgIHNrYi0+ZGF0YVszNl0sIHNrYi0+ZGF0YVszN10pOwotI2VuZGlmCQotCQkKLQlpZiAoIXN0cm5jbXAoY2hkbGNfdWRwX3BrdC0+d3BfbWdtdC5zaWduYXR1cmUsVURQTUdNVF9TSUdOQVRVUkUsOCkgJiYKLQkgICAoY2hkbGNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPT0gbnRvaHMoY2FyZC0+d2FuZGV2LnVkcF9wb3J0KSkgJiYKLQkgICAoY2hkbGNfdWRwX3BrdC0+aXBfcGt0LnByb3RvY29sID09IFVEUE1HTVRfVURQX1BST1RPQ09MKSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT53cF9tZ210LnJlcXVlc3RfcmVwbHkgPT0gVURQTUdNVF9SRVFVRVNUKSkgewotCi0JCXJldHVybiBVRFBfQ1BJUEVfVFlQRTsKLQotCX1lbHNleyAKLQkJcmV0dXJuIFVEUF9JTlZBTElEX1RZUEU7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBQT1JUIHN0YXRlLgotICovCi1zdGF0aWMgdm9pZCBwb3J0X3NldF9zdGF0ZSAoc2RsYV90ICpjYXJkLCBpbnQgc3RhdGUpCi17Ci0gICAgICAgIGlmIChjYXJkLT51LmMuc3RhdGUgIT0gc3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9DT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiJXM6IExpbmsgY29ubmVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgCWJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXQU5fQ09OTkVDVElORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogTGluayBjb25uZWN0aW5nLi4uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIiVzOiBMaW5rIGRpc2Nvbm5lY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FyZC0+d2FuZGV2LnN0YXRlID0gY2FyZC0+dS5jLnN0YXRlID0gc3RhdGU7Ci0JCWlmIChjYXJkLT53YW5kZXYuZGV2KXsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQkJCWNoZGxjX3ByaXZfYXJlYS0+Y29tbW9uLnN0YXRlID0gc3RhdGU7Ci0JCX0KLSAgICAgICAgfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2NoZGxjCi0gKgotICoJQ29uZmlndXJlIHRoZSBjaGRsYyBwcm90b2NvbCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgkJCi0gKgotICogICAJVGhlIGlmX29wZW4oKSBmdW5jdGlvbiBiaW5kcyB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBwb2xsIHJvdXRpbmUuCi0gKiAgICAgIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1biBldmVyeSB0aW1lIHRoZSBjaGRsYyBpbnRlcmZhY2UKLSAqICAgICAgaXMgYnJvdWdodCB1cC4gV2UgY2Fubm90IHJ1biB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGlmX29wZW4gCi0gKiAgICAgIGJlY2F1c2UgaWZfb3BlbiBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgcmVtb3RlIElQIGFkZHJlc3MuCi0gKiAgICAgIAotICoJSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBub3QgZW5hYmxlZCwgcHJvY2VlZCB0byBjb25maWd1cmUKLSAqICAgICAgdGhlIGNhcmQgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqCi0gKiAgICAgIElmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgZW5hYmxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgaW50ZXJmYWNlCi0gKiAgICAgIHdhcyBzaHV0ZG93biBieSBldGhlciB0aGUgdXNlciBvciBkcml2ZXIuIEluIHRoaXMgY2FzZSwgd2UgCi0gKiAgICAgIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgbm90IGNoYW5nZWQuICBJZgotICogICAgICB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSB0aGUgZmlybXdhcmUKLSAqICAgICAgYW5kIHVwZGF0ZSB0aGUgY2hhbmdlZCBJUCBhZGRyZXNzZXMuICBPdGhlcndpc2UsIGp1c3QgZXhpdC4KLSAqCi0gKi8KLQotc3RhdGljIGludCBjb25maWdfY2hkbGMgKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCi0JaWYgKGNhcmQtPnUuYy5jb21tX2VuYWJsZWQpewotCi0JCS8qIEp1biAyMC4gMjAwMDogTkMKLQkJICogSVAgYWRkcmVzc2VzIGFyZSBub3QgdXNlZCBpbiB0aGUgQVBJIG1vZGUgKi8KLQkJCi0JCWlmICgoY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgIT0gY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbCB8fAotCQkgICAgIGNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCAhPSBjaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZSkgJiYgCi0JCSAgICAgY2FyZC0+dS5jLnVzZWRieSA9PSBXQU5QSVBFKSB7Ci0JCQkKLQkJCS8qIFRoZSBJUCBhZGRlcnNzZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdG9wIHRoZSBjb21tdW5pY2F0aW9ucyBhbmQgcmVjb25maWd1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBjYXJkLiBSZWFzb246IHRoZSBmaXJtd2FyZSBtdXN0IGtub3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3Nlcy4gKi8KLQkJCWRpc2FibGVfY29tbShjYXJkKTsKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IElQIGFkZHJlc3NlcyBjaGFuZ2VkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogUmVzdGFydGluZyBjb21tdW5pY2F0aW9ucyAuLi5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9ZWxzZXsgCi0JCQkvKiBJUCBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgbGluayBpcyB1cCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUuIFRoZXJlZm9yZSwgZXhpdCAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQljaGRsY19wcml2X2FyZWEtPmlwX2xvY2FsID0gY2hkbGNfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXA7Ci0JY2hkbGNfcHJpdl9hcmVhLT5pcF9yZW1vdGUgPSBjaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZV90bXA7Ci0KLQotCS8qIFNldHVwIHRoZSBCb2FyZCBmb3IgYXN5bmNocm9ub3VzIG1vZGUgKi8KLQlpZiAoY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQkKLQkJaWYgKHNldF9hc3lfY29uZmlnKGNhcmQpKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCBDSERMQyBBc3luYyBjb25maWd1cmF0aW9uIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfWVsc2V7Ci0JCS8qIFNldHVwIHRoZSBCb2FyZCBmb3IgQ0hETEMgKi8KLQkJaWYgKHNldF9jaGRsY19jb25maWcoY2FyZCkpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogRmFpbGVkIENIRExDIGNvbmZpZ3VyYXRpb24hXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYW5kIG1hc2sgKi8KLSAgICAgICAgaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9SWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fVFhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9DSERMQ19FWENFUF9DT05EIHwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7CQotICAgICAgICB9Ci0JCi0KLQkvKiBNYXNrIHRoZSBUcmFuc21pdCBhbmQgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfihBUFBfSU5UX09OX1RYX0ZSQU1FIHwgQVBQX0lOVF9PTl9USU1FUik7Ci0KLQkvKiBJbiBUVFkgbW9kZSwgcmVjZWl2ZSBpbnRlcnJ1cHQgd2lsbCBiZSBlbmFibGVkIGR1cmluZwotCSAqIHdhbnBpcGVfdHR5X29wZW4oKSBvcGVyYXRpb24gKi8KLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0gfkFQUF9JTlRfT05fUlhfRlJBTUU7Ci0JfQotCi0JLyogRW5hYmxlIGNvbW11bmljYXRpb25zICovCi0gCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmIChhc3lfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgYXN5bmMgY29tbW51bmljYXRpb24hXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLSAgICAgICAgfWVsc2V7IAotCQlpZiAoY2hkbGNfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgY2hkbGMgY29tbXVuaWNhdGlvbnMhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBJbml0aWFsaXplIFJ4L1R4IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCWluaXRfY2hkbGNfdHhfcnhfYnVmZihjYXJkKTsKLQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0JcmV0dXJuIDA7IAotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjaGRsY19wb2xsCi0gKgkKLSAqIFJhdGlvbmFsZToKLSAqIAlXZSBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgcm91dGluZyB0YWJsZXMsIG9yCi0gKiAgICAgIGlwIGFkZHJlc3NlcyB3aXRoaW5nIHRoZSBpbnRlcnJ1cHQuIFRoZXJlZm9yZQotICogICAgICB3ZSBtdXN0IHBlcmZvcm0gc3VjaCBhY3RvbnMgb3V0c2lkZSBhbiBpbnRlcnJ1cHQgCi0gKiAgICAgIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogRGVzY3JpcHRpb246CQotICoJQ0hETEMgcG9sbGluZyByb3V0aW5lLCByZXNwb25zaWJsZSBmb3IgCi0gKiAgICAgCXNodXR0aW5nIGRvd24gaW50ZXJmYWNlcyB1cG9uIGRpc2Nvbm5lY3QKLSAqICAgICAJYW5kIGFkZGluZy9yZW1vdmluZyByb3V0ZXMuIAotICogICAgICAKLSAqIFVzYWdlOiAgICAgICAgCi0gKiAJVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBDSERMQyAgCi0gKiAJaW50ZXJmYWNlIHRocm91Z2ggYSB0cV9zY2hlZHVsZSBib3R0b20gaGFsZi4KLSAqICAgICAgCi0gKiAgICAgIHRyaWdnZXJfY2hkbGNfcG9sbCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8ga2ljawotICogICAgICB0aGUgY2hsZGNfcG9sbCByb3V0aW5lLiAgCi0gKi8KLQotc3RhdGljIHZvaWQgY2hkbGNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0Jc2RsYV90ICpjYXJkOwotCXU4IGNoZWNrX2dhdGV3YXk9MDsJCi0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3M7Ci0KLQkKLQlpZiAoIWRldiB8fCAoY2hkbGNfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQkKLQkvKiAoUmUpQ29uZmlndXJhaXRvbiBpcyBpbiBwcm9ncmVzcywgc3RvcCB3aGF0IHlvdSBhcmUgCi0JICogZG9pbmcgYW5kIGdldCBvdXQgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuOwotCX0KLQkKLQkvKiBpZl9vcGVuKCkgZnVuY3Rpb24gaGFzIHRyaWdnZXJlZCB0aGUgcG9sbGluZyByb3V0aW5lCi0JICogdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIElQIGFkZHJlc3Nlcy4gIE9uY2UgdGhlCi0JICogYWRkcmVzc2VzIGFyZSBmb3VuZCwgdHJpZ2dlciB0aGUgY2hkbGMgY29uZmlndXJhdGlvbiAqLwotCWlmICh0ZXN0X2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsYykpewotCi0JCWNoZGxjX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wICA9IGdldF9pcF9hZGRyZXNzKGRldixXQU5fTE9DQUxfSVApOwotCQljaGRsY19wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX1BPSU5UT1BPSU5UX0lQKTsKLQkKLQkgICAgICAgLyogSnVuIDIwLiAyMDAwIEJ1ZyBGaXgKLQkgCSogT25seSBwZXJmb3JtIHRoaXMgY2hlY2sgaW4gV0FOUElQRSBtb2RlLCBzaW5jZQotCSAJKiBJUCBhZGRyZXNzZXMgYXJlIG5vdCB1c2VkIGluIHRoZSBBUEkgbW9kZS4gKi8KLQkKLQkJaWYgKGNoZGxjX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wID09IGNoZGxjX3ByaXZfYXJlYS0+aXBfcmVtb3RlX3RtcCAmJiAKLQkJICAgIGNhcmQtPnUuYy5zbGFycF90aW1lciA9PSAweDAwICYmIAotCQkgICAgIWNhcmQtPnUuYy5iYWNrdXAgJiYgCi0JCSAgICBjYXJkLT51LmMudXNlZGJ5ID09IFdBTlBJUEUpewotCi0JCQlpZiAoKytjaGRsY19wcml2X2FyZWEtPmlwX2Vycm9yID4gTUFYX0lQX0VSUk9SUyl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4lczogLS0tIFdBUk5JTkcgLS0tXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFRoZSBsb2NhbCBJUCBhZGRyZXNzIGlzIHRoZSBzYW1lIGFzIHRoZVxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBQb2ludC10by1Qb2ludCBJUCBhZGRyZXNzLlxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAtLS0gV0FSTklORyAtLS1cblxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfWVsc2V7Ci0JCQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCQljaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMrSFo7Ci0JCQkJYWRkX3RpbWVyKCZjaGRsY19wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCWNsZWFyX2JpdCgwLCZjaGRsY19wcml2X2FyZWEtPmNvbmZpZ19jaGRsYyk7Ci0JCWNsZWFyX2JpdChQT0xMX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQotCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9USU1FUjsKLQkJcmV0dXJuOwotCX0KLQkvKiBEeW5hbWljIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiwgYXMgd2VsbCBhcyBkeW5hbWljCi0JICogcm91dGluZy4gICovCi0JCi0Jc3dpdGNoIChjYXJkLT51LmMuc3RhdGUpewotCi0JY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCi0JCS8qIElmIHRoZSBkeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGlzIG9uLCBhbmQgaW50ZXJmYWNlIAotCQkgKiBpcyB1cCwgdGhlbiBicmluZyBkb3duIHRoZSBuZXRvd3JrIGludGVyZmFjZSAqLwotCQkKLQkJaWYgKHRlc3RfYml0KERZTl9PUFRfT04sJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmIAotCQkgICAgIXRlc3RfYml0KERFVl9ET1dOLCAgJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCQkKLQkJICAgIGNhcmQtPndhbmRldi5kZXYtPmZsYWdzICYgSUZGX1VQKXsJCi0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MmfklGRl9VUCkpOwotCQkJc2V0X2JpdChERVZfRE9XTiwmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IE5PX1JPVVRFOwotCi0JCX1lbHNlewotCQkJLyogV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbG9jYWwgSVAgYWRkcmVzcyBpcwotICAgICAgICAgICAgICAgCSAgCSAqIHplcm8uIElmIGl0IGlzLCB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICAgCSAqLwotCi0JCQlpZiAoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYgCi0JCSAgICAJICAgIGdldF9pcF9hZGRyZXNzKGNhcmQtPndhbmRldi5kZXYsV0FOX0xPQ0FMX0lQKSAmJiAKLQkJICAgIAkgICAgY2hkbGNfcHJpdl9hcmVhLT5yb3V0ZV9zdGF0dXMgIT0gTk9fUk9VVEUgJiYKLQkJCSAgICBjYXJkLT51LmMuc2xhcnBfdGltZXIpewotCi0JCQkJcHJvY2Vzc19yb3V0ZShjYXJkKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQotCQkvKiBJbiBTTVAgbWFjaGluZSB0aGlzIGNvZGUgY2FuIGV4ZWN1dGUgYmVmb3JlIHRoZSBpbnRlcmZhY2UKLQkJICogY29tZXMgdXAuICBJbiB0aGlzIGNhc2UsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90Ci0JCSAqIHRyeSB0byBicmluZyB1cCB0aGUgaW50ZXJmYWNlIGJlZm9yZSBkZXZfb3BlbigpIGlzIGZpbmlzaGVkICovCi0KLQotCQkvKiBERVZfRE9XTiB3aWxsIGJlIHNldCBvbmx5IHdoZW4gd2UgYnJpbmcgZG93biB0aGUgaW50ZXJmYWNlCi0JCSAqIGZvciB0aGUgdmVyeSBmaXJzdCB0aW1lLiBUaGlzIHdheSB3ZSBrbm93IHRoYXQgaXQgd2FzIHVzCi0JCSAqIHRoYXQgYnJvdWdodCB0aGUgaW50ZXJmYWNlIGRvd24gKi8KLQkJCi0JCWlmICh0ZXN0X2JpdChEWU5fT1BUX09OLCZjaGRsY19wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgdGVzdF9iaXQoREVWX0RPV04sICAmY2hkbGNfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bikgJiYKLQkJICAgICEoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVApKXsKLQkJCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyB1cC5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3N8SUZGX1VQKSk7Ci0JCQljbGVhcl9iaXQoREVWX0RPV04sJmNoZGxjX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoZGxjX3ByaXZfYXJlYS0+cm91dGVfc3RhdHVzID09IEFERF9ST1VURSAmJiAKLQkJICAgIGNhcmQtPnUuYy5zbGFycF90aW1lcil7IAotCi0JCQlwcm9jZXNzX3JvdXRlKGNhcmQpOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoZGxjX3ByaXZfYXJlYS0+Z2F0ZXdheSAmJiBjaGVja19nYXRld2F5KQotCQkJYWRkX2dhdGV3YXkoY2FyZCxkZXYpOwotCi0JCWJyZWFrOwotCX0JCi0KLQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHJpZ2dlcl9jaGRsY19wb2xsCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAJQWRkIGEgY2hkbGNfcG9sbCgpIHdvcmsgZW50cnkgaW50byB0aGUga2V2ZW50ZCB3b3JrIHF1ZXVlCi0gKiAgICAgIGZvciBhIHNwZWNpZmljIGRsY2kvaW50ZXJmYWNlLiAgVGhpcyB3aWxsIGtpY2sKLSAqICAgICAgdGhlIGZyX3BvbGwoKSByb3V0aW5lIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogVXNhZ2U6Ci0gKiAJSW50ZXJydXB0cyB1c2UgdGhpcyB0byBkZWZlciBhIHRha3MgdG8gCi0gKiAgICAgIGEgcG9sbGluZyByb3V0aW5lLgotICoKLSAqLwkKLXN0YXRpYyB2b2lkIHRyaWdnZXJfY2hkbGNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWE7Ci0Jc2RsYV90ICpjYXJkOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQkKLQlpZiAoKGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdik9PU5VTEwpCi0JCXJldHVybjsKLQotCWNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcmV0dXJuOyAKLQl9Ci0Jc2NoZWR1bGVfd29yaygmY2hkbGNfcHJpdl9hcmVhLT5wb2xsX3dvcmspOwotfQotCi0KLXN0YXRpYyB2b2lkIGNoZGxjX3BvbGxfZGVsYXkgKHVuc2lnbmVkIGxvbmcgZGV2X3B0cikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKLQl0cmlnZ2VyX2NoZGxjX3BvbGwoZGV2KTsKLX0KLQotCi12b2lkIHM1MDhfbG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLSAgICAgICAgaWYgKGNhcmQtPm5leHQpewotICAgICAgICAJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JfQotfQotCi12b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLSAgICAgICAgaWYgKGNhcmQtPm5leHQpewotICAgICAgICAJc3Bpbl91bmxvY2soJmNhcmQtPm5leHQtPndhbmRldi5sb2NrKTsKLSAgICAgICAgfQotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci19Ci0KLS8vKioqKioqKioqKiogVFRZIFNFQ1RJT04gKioqKioqKioqKioqKioqKgotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90cmlnZ2VyX3R4X2lycShzZGxhX3QgKmNhcmQpCi17Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCAqY2hkbGNfaW50ID0gJmZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3Q7Ci0JY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RYX0ZSQU1FOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV90cmlnZ2VyX3BvbGwoc2RsYV90ICpjYXJkKQotewotCXNjaGVkdWxlX3dvcmsoJmNhcmQtPnR0eV93b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgdHR5X3BvbGxfd29yayAodm9pZCogZGF0YSkKLXsKLQlzZGxhX3QgKmNhcmQgPSAoc2RsYV90KilkYXRhOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0KLQlpZiAoKHR0eT1jYXJkLT50dHkpPT1OVUxMKQotCQlyZXR1cm47Ci0JCi0JdHR5X3dha2V1cCh0dHkpOwotI2lmIGRlZmluZWQoU0VSSUFMX0hBVkVfUE9MTF9XQUlUKQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dhaXQpOwotI2VuZGlmCQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQotewotCXNkbGFfdCAqY2FyZDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQkKLQlpZiAoIXR0eSB8fCAhdHR5LT5kcml2ZXJfZGF0YSl7Ci0JCXJldHVybjsKLQl9Ci0JCi0JY2FyZCA9IChzZGxhX3QqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCi0JaWYgKCFjYXJkKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogQ2xvc2luZyBUVFkgRHJpdmVyIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JLyogU2FuaXR5IENoZWNrICovCi0JaWYgKCFjYXJkLT50dHlfb3BlbikKLQkJcmV0dXJuOwotCQotCXdhbnBpcGVfY2xvc2UoY2FyZCk7Ci0JaWYgKC0tY2FyZC0+dHR5X29wZW4gPT0gMCl7Ci0KLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CQotCQljYXJkLT50dHk9TlVMTDsKLQkJY2hkbGNfZGlzYWJsZV9jb21tX3NodXRkb3duKGNhcmQpOwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCi0JCWtmcmVlKGNhcmQtPnR0eV9idWYpOwotCQljYXJkLT50dHlfYnVmID0gTlVMTDsJCQkKLQkJa2ZyZWUoY2FyZC0+dHR5X3J4KTsKLQkJY2FyZC0+dHR5X3J4ID0gTlVMTDsKLQl9Ci0JcmV0dXJuOwotfQotc3RhdGljIGludCB3YW5waXBlX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlzZGxhX3QgKmNhcmQ7Ci0JCi0JaWYgKCF0dHkpewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JCi0JaWYgKCF0dHktPmRyaXZlcl9kYXRhKXsKLQkJaW50IHBvcnQ7Ci0JCXBvcnQgPSB0dHktPmluZGV4OwotCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+PSBOUl9QT1JUUykpIAotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQotCQl0dHktPmRyaXZlcl9kYXRhID0gV0FOX0NBUkQocG9ydCk7Ci0JCWlmICghdHR5LT5kcml2ZXJfZGF0YSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCWNhcmQgPSAoc2RsYV90Kil0dHktPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKXsKLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CQotCQljYXJkLT50dHk9TlVMTDsKLQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE9wZW5pbmcgVFRZIERyaXZlciFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQotCWlmIChjYXJkLT50dHlfb3BlbiA9PSAwKXsKLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CQotCQljYXJkLT50dHk9dHR5OwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCi0JCWlmICghY2FyZC0+dHR5X2J1Zil7Ci0JCQljYXJkLT50dHlfYnVmID0ga21hbGxvYyhUVFlfQ0hETENfTUFYX01UVSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNhcmQtPnR0eV9idWYpewotCQkJCWNhcmQtPnR0eV9idWY9TlVMTDsKLQkJCQljYXJkLT50dHk9TlVMTDsKLQkJCQlyZXR1cm4gLUVOT01FTTsJCi0JCQl9Ci0JCX0KLQotCQlpZiAoIWNhcmQtPnR0eV9yeCl7Ci0JCQljYXJkLT50dHlfcnggPSBrbWFsbG9jKFRUWV9DSERMQ19NQVhfTVRVLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghY2FyZC0+dHR5X3J4KXsKLQkJCQkvKiBGcmVlIHRoZSBidWZmZXIgYWJvdmUgKi8KLQkJCQlrZnJlZShjYXJkLT50dHlfYnVmKTsKLQkJCQljYXJkLT50dHlfYnVmPU5VTEw7Ci0JCQkJY2FyZC0+dHR5PU5VTEw7Ci0JCQkJcmV0dXJuIC1FTk9NRU07CQotCQkJfQotCQl9Ci0JfQotCi0JKytjYXJkLT50dHlfb3BlbjsKLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0Jc2RsYV90ICpjYXJkPU5VTEw7Ci0KLQlpZiAoIXR0eSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICJOTyBUVFkgaW4gV3JpdGVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQljYXJkID0gKHNkbGFfdCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCQkKLQlpZiAoIWNhcmQpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiTm8gQ2FyZCBpbiBUVFkgV3JpdGVcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CQotCi0JaWYgKGNvdW50ID4gY2FyZC0+d2FuZGV2Lm10dSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICJGcmFtZSB0b28gYmlnIGluIFdyaXRlICVpIE1heDogJWlcbiIsCi0JCQkJY291bnQsY2FyZC0+d2FuZGV2Lm10dSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkKLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IFdBTl9DT05ORUNURUQpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiQ2FyZCBub3QgY29ubmVjdGVkIGluIFRUWSBXcml0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIExvY2sgdGhlIDUwOCBDYXJkOiBTTVAgaXMgc3VwcG9ydGVkICovCi0gICAgICAJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9IAotCQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgaW4gVFRZIFdyaXRlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkKLQkJLyogTG9jayB0aGUgNTA4IENhcmQ6IFNNUCBpcyBzdXBwb3J0ZWQgKi8KLQkJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQkKLQkJcmV0dXJuIC1FSU5WQUw7IAotCX0KLQkKLSAJaWYgKGNoZGxjX3NlbmQoY2FyZCwodm9pZCopYnVmLGNvdW50KSl7Ci0JCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHNlbmQsIHJldHJ5IGxhdGVyOiBrZXJuZWwhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQljbGVhcl9iaXQoU0VORF9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQotCQl3YW5waXBlX3R0eV90cmlnZ2VyX3R4X2lycShjYXJkKTsKLQkJCi0JCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQkJczUwOF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogUGFja2V0IHNlbnQgT0s6ICVpXG4iLGNhcmQtPmRldm5hbWUsY291bnQpOwotCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9yZWNlaXZlKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgYWRkciwgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBvZmZzZXQ9MDsKLQl1bnNpZ25lZCBvbGVuPWxlbjsKLQljaGFyIGZwPTA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlpbnQgaTsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKLQkKLQlpZiAoIWNhcmQtPnR0eV9vcGVuKXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBUVFkgbm90IG9wZW4gZHVyaW5nIHJlY2VpdmVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0JaWYgKCh0dHk9Y2FyZC0+dHR5KSA9PSBOVUxMKXsKLQkJZGJnX3ByaW50ayhLRVJOX0lORk8gIiVzOiBObyBUVFkgb24gcmVjZWl2ZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlpZiAoIXR0eS0+ZHJpdmVyX2RhdGEpewotCQlkYmdfcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIERyaXZlciBEYXRhLCBvciBGbGlwIG9uIHJlY2VpdmVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0KLQlpZiAoY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQlpZiAoKHR0eS0+ZmxpcC5jb3VudCtsZW4pID49IFRUWV9GTElQQlVGX1NJWkUpewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBSZWNlaXZlZCBwYWNrZXQgc2l6ZSB0b28gYmlnOiAlaSBieXRlcywgTWF4OiAlaSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsbGVuLFRUWV9GTElQQlVGX1NJWkUpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0KLQkJCi0JCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCQlvZmZzZXQgPSBjYXJkLT51LmMucnhfdG9wIC0gYWRkciArIDE7Ci0JCQkKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIG9mZnNldCk7Ci0JCQkKLQkJCWFkZHIgPSBjYXJkLT51LmMucnhfYmFzZTsKLQkJCWxlbiAtPSBvZmZzZXQ7Ci0JCQkKLQkJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIrPW9mZnNldDsKLQkJCXR0eS0+ZmxpcC5jb3VudCs9b2Zmc2V0OwotCQkJZm9yIChpPTA7aTxvZmZzZXQ7aSsrKXsKLQkJCQkqdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciA9IDA7Ci0JCQkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0cisrOwotCQkJfQotCQl9Ci0JCQotCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCB0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBsZW4pOwotCQkJCi0JCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIrPWxlbjsKLQkJY2FyZC0+dHR5LT5mbGlwLmNvdW50Kz1sZW47Ci0JCWZvciAoaT0wO2k8bGVuO2krKyl7Ci0JCQkqdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciA9IDA7Ci0JCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyKys7Ci0JCX0KLQotCQl0dHktPmxvd19sYXRlbmN5PTE7Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JfWVsc2V7Ci0JCWlmICghY2FyZC0+dHR5X3J4KXsJCi0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogUmVjZWl2ZSBzeW5jIGJ1ZmZlciBub3QgYXZhaWxhYmxlIVxuIiwKLQkJCQkgY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQkKLQkJaWYgKGxlbiA+IFRUWV9DSERMQ19NQVhfTVRVKXsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBSZWNlaXZlZCBwYWNrZXQgc2l6ZSB0b28gYmlnOiAlaSBieXRlcywgTWF4OiAlaSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsbGVuLFRUWV9GTElQQlVGX1NJWkUpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0KLQkJCi0JCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCQlvZmZzZXQgPSBjYXJkLT51LmMucnhfdG9wIC0gYWRkciArIDE7Ci0JCQkKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGNhcmQtPnR0eV9yeCwgb2Zmc2V0KTsKLQkJCQotCQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQkJbGVuIC09IG9mZnNldDsKLQkJfQotCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCBjYXJkLT50dHlfcngrb2Zmc2V0LCBsZW4pOwotCQlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKLQkJaWYgKGxkKSB7Ci0JCQlpZiAobGQtPnJlY2VpdmVfYnVmKQotCQkJCWxkLT5yZWNlaXZlX2J1Zih0dHksY2FyZC0+dHR5X3J4LCZmcCxvbGVuKTsKLQkJCXR0eV9sZGlzY19kZXJlZihsZCk7Ci0JCX1lbHNlewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBOTyBUVFkgU3luYyBsaW5lIGRpc2NpcGxpbmUhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCX0KLQotCWRiZ19wcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgRGF0YSAlaVxuIixjYXJkLT5kZXZuYW1lLG9sZW4pOwotCXJldHVybjsKLX0KLQotI2lmIDAKLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBjb25maWdfdHR5IChzZGxhX3QgKmNhcmQpCi17Ci0JU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCAqZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0KLQkvKiBTZXR1cCB0aGUgQm9hcmQgZm9yIGFzeW5jaHJvbm91cyBtb2RlICovCi0JaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJCi0JCWlmIChzZXRfYXN5X2NvbmZpZyhjYXJkKSkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBGYWlsZWQgQ0hETEMgQXN5bmMgY29uZmlndXJhdGlvbiFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX1lbHNlewotCQkvKiBTZXR1cCB0aGUgQm9hcmQgZm9yIENIRExDICovCi0JCWlmIChzZXRfY2hkbGNfY29uZmlnKGNhcmQpKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCBDSERMQyBjb25maWd1cmF0aW9uIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JLyogU2V0IGludGVycnVwdCBtb2RlIGFuZCBtYXNrICovCi0gICAgICAgIGlmIChjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fUlhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9HTE9CQUxfRVhDRVBfQ09ORCB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX1RYX0ZSQU1FIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fQ0hETENfRVhDRVBfQ09ORCB8IEFQUF9JTlRfT05fVElNRVIpKXsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gc2V0IGludGVycnVwdCB0cmlnZ2VycyFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwkKLSAgICAgICAgfQotCQotCi0JLyogTWFzayB0aGUgVHJhbnNtaXQgYW5kIFRpbWVyIGludGVycnVwdCAqLwotCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0gCi0JCX4oQVBQX0lOVF9PTl9UWF9GUkFNRSB8IEFQUF9JTlRfT05fVElNRVIpOwotCi0JCi0JLyogRW5hYmxlIGNvbW11bmljYXRpb25zICovCi0gCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmIChhc3lfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgYXN5bmMgY29tbW51bmljYXRpb24hXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLSAgICAgICAgfWVsc2V7IAotCQlpZiAoY2hkbGNfY29tbV9lbmFibGUoY2FyZCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBlbmFibGUgY2hkbGMgY29tbXVuaWNhdGlvbnMhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gPSAwOwotCQkJY2FyZC0+dS5jLmNvbW1fZW5hYmxlZD0wOwotCQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQkvKiBJbml0aWFsaXplIFJ4L1R4IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCWluaXRfY2hkbGNfdHhfcnhfYnVmZihjYXJkKTsKLQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0JcmV0dXJuIDA7IAotfQotCi0KLXN0YXRpYyBpbnQgY2hhbmdlX3NwZWVkKHNkbGFfdCAqY2FyZCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCi17Ci0JaW50CWJhdWQsIHJldD0wOwotCXVuc2lnbmVkIGNmbGFnOyAKLQlpbnQJZGJpdHMsc2JpdHMscGFyaXR5LGhhbmRzaGFraW5nOwotCi0JY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0KLQkvKiBUaGVyZSBpcyBhbHdheXMgb25lIHN0b3AgYml0ICovCi0Jc2JpdHM9V0FOT1BUX09ORTsKLQkKLQkvKiBQYXJpdHkgaXMgZGVmYXVsdGVkIHRvIE5PTkUgKi8KLQlwYXJpdHkgPSBXQU5PUFRfTk9ORTsKLQotCWhhbmRzaGFraW5nPTA7Ci0JCi0JLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KLQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKLQkgICAgICBjYXNlIENTNTogZGJpdHMgPSA1OyBicmVhazsKLQkgICAgICBjYXNlIENTNjogZGJpdHMgPSA2OyBicmVhazsKLQkgICAgICBjYXNlIENTNzogZGJpdHMgPSA3OyBicmVhazsKLQkgICAgICBjYXNlIENTODogZGJpdHMgPSA4OyBicmVhazsKLQkgICAgICAvKiBOZXZlciBoYXBwZW5zLCBidXQgR0NDIGlzIHRvbyBkdW1iIHRvIGZpZ3VyZSBpdCBvdXQgKi8KLQkgICAgICBkZWZhdWx0OiAgZGJpdHMgPSA4OyBicmVhazsKLQl9Ci0JCi0JLyogT25lIG1vcmUgc3RvcCBiaXQgc2hvdWxkIGJlIHN1cHBvcnRlZCwgdGh1cyBpbmNyZW1lbnQKLQkgKiB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyBNYXg9MiAqLwotCWlmIChjZmxhZyAmIENTVE9QQikgewotCQlzYml0cyA9IFdBTk9QVF9UV087Ci0JfQotCWlmIChjZmxhZyAmIFBBUkVOQikgewotCQlwYXJpdHkgPSBXQU5PUFRfRVZFTjsKLQl9Ci0JaWYgKGNmbGFnICYgUEFST0REKXsKLQkJcGFyaXR5ID0gV0FOT1BUX09ERDsKLQl9Ci0KLQkvKiBEZXRlcm1pbmUgZGl2aXNvciBiYXNlZCBvbiBiYXVkIHJhdGUgKi8KLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKLQotCWlmICghYmF1ZCkKLQkJYmF1ZCA9IDk2MDA7CS8qIEIwIHRyYW5zaXRpb24gaGFuZGxlZCBpbiByc19zZXRfdGVybWlvcyAqLwotCi0JaWYgKGNmbGFnICYgQ1JUU0NUUykgewotCQloYW5kc2hha2luZ3w9QVNZX1JUU19IU19GT1JfUlg7Ci0JfQotCQotCWlmIChJX0lHTlBBUih0dHkpKQotCQlwYXJpdHkgPSBXQU5PUFRfTk9ORTsKLQotCWlmIChJX0lYT0ZGKHR0eSkpewotCQloYW5kc2hha2luZ3w9QVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWDsKLQkJaGFuZHNoYWtpbmd8PUFTWV9YT05fWE9GRl9IU19GT1JfVFg7Ci0JfQotCi0JaWYgKElfSVhPTih0dHkpKXsKLQkJaGFuZHNoYWtpbmd8PUFTWV9YT05fWE9GRl9IU19GT1JfUlg7Ci0JCWhhbmRzaGFraW5nfD1BU1lfWE9OX1hPRkZfSFNfRk9SX1RYOwotCX0KLQotCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCWlmIChjYXJkLT53YW5kZXYuYnBzICE9IGJhdWQpCi0JCQlyZXQ9MTsKLQkJY2FyZC0+d2FuZGV2LmJwcyA9IGJhdWQ7Ci0JfQotCi0JaWYgKGNhcmQtPnUuYy5hc3luY19tb2RlKXsKLQkJaWYgKGNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zICE9IGhhbmRzaGFraW5nKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zID0gaGFuZHNoYWtpbmc7Ci0KLQkJaWYgKGNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyICE9IGRiaXRzKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy50eF9iaXRzX3Blcl9jaGFyID0gZGJpdHM7Ci0KLQkJaWYgKGNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyICE9IGRiaXRzKQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyID0gZGJpdHM7Ci0JCQotCQlpZiAoY2FyZC0+dS5jLnN0b3BfYml0cyAhPSBzYml0cykKLQkJCXJldD0xOwotCQljYXJkLT51LmMuc3RvcF9iaXRzID0gc2JpdHM7Ci0KLQkJaWYgKGNhcmQtPnUuYy5wYXJpdHkgIT0gcGFyaXR5KQotCQkJcmV0PTE7Ci0JCWNhcmQtPnUuYy5wYXJpdHkgPSBwYXJpdHk7CQotCi0JCWNhcmQtPnUuYy5icmVha190aW1lciA9IDUwOwotCQljYXJkLT51LmMuaW50ZXJfY2hhcl90aW1lciA9IDEwOwotCQljYXJkLT51LmMucnhfY29tcGxldGVfbGVuZ3RoID0gMTAwOwotCQljYXJkLT51LmMueG9uX2NoYXIgPSAweEZFOwotCX1lbHNlewotCQljYXJkLT51LmMucHJvdG9jb2xfb3B0aW9ucyA9IEhETENfU1RSRUFNSU5HX01PREU7Ci0JfQotCQotCXJldHVybiByZXQ7Ci19Ci0KLQkKLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0JaW50IGVycj0xOwotCi0JaWYgKCF0dHkpewotCQlyZXR1cm47Ci0JfQotCi0JY2FyZCA9IChzZGxhX3QgKil0dHktPmRyaXZlcl9kYXRhOwotCQkJCi0JaWYgKCFjYXJkKQotCQlyZXR1cm47Ci0KLQlpZiAoY2hhbmdlX3NwZWVkKGNhcmQsIHR0eSwgb2xkX3Rlcm1pb3MpIHx8ICFjYXJkLT51LmMuY29tbV9lbmFibGVkKXsKLQkJdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JCQotCQlpZiAoY2FyZC0+dS5jLmNvbW1fZW5hYmxlZCl7Ci0JCQlsb2NrX2FkYXB0ZXJfaXJxKCZjYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJCWNoZGxjX2Rpc2FibGVfY29tbV9zaHV0ZG93bihjYXJkKTsKLQkJCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JCX0KLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JCWVyciA9IGNvbmZpZ190dHkoY2FyZCk7Ci0JCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0JCWlmIChjYXJkLT51LmMuYXN5bmNfbW9kZSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVFRZIEFzeW5jIENvbmZpZ3VyYXRpb246XG4iCi0JCQkJICIgICBCYXVkICAgICAgICA9JWlcbiIKLQkJCQkgIiAgIEhhbmRzaGFraW5nID0lc1xuIgotCQkJCSAiICAgVHggRGJpdHMgICAgPSVpXG4iCi0JCQkJICIgICBSeCBEYml0cyAgICA9JWlcbiIKLQkJCQkgIiAgIFBhcml0eSAgICAgID0lc1xuIgotCQkJCSAiICAgU3RvcCBCaXRzICAgPSVpXG4iLAotCQkJCSBjYXJkLT5kZXZuYW1lLAotCQkJCSBjYXJkLT53YW5kZXYuYnBzLAotCQkJCSBvcHRfZGVjb2RlW2NhcmQtPnUuYy5wcm90b2NvbF9vcHRpb25zXSwKLQkJCQkgY2FyZC0+dS5jLnR4X2JpdHNfcGVyX2NoYXIsCi0JCQkJIGNhcmQtPnUuYy5yeF9iaXRzX3Blcl9jaGFyLAotCQkJCSBwX2RlY29kZVtjYXJkLT51LmMucGFyaXR5XSAsCi0JCQkJIGNhcmQtPnUuYy5zdG9wX2JpdHMpOwotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUVFkgU3luYyBDb25maWd1cmF0aW9uOlxuIgotCQkJCSAiICAgQmF1ZCAgICAgICAgPSVpXG4iCi0JCQkJICIgICBQcm90b2NvbCAgICA9SERMQ19TVFJFQU1JTkdcbiIsCi0JCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+d2FuZGV2LmJwcyk7Ci0JCX0KLQkJaWYgKCFlcnIpewotCQkJcG9ydF9zZXRfc3RhdGUoY2FyZCxXQU5fQ09OTkVDVEVEKTsKLQkJfWVsc2V7Ci0JCQlwb3J0X3NldF9zdGF0ZShjYXJkLFdBTl9ESVNDT05ORUNURUQpOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKLXsKLQlzZGxhX3QgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M9MDsKLQotCWlmICghdHR5KXsKLQkJcmV0dXJuOwotCX0KLQkKLQljYXJkID0gKHNkbGFfdCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JCQkKLQlpZiAoIWNhcmQpCi0JCXJldHVybjsKLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkKLQkJcmV0dXJuOwotCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCXM1MDhfbG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkKLQkJd2FucGlwZV90dHlfdHJpZ2dlcl90eF9pcnEoY2FyZCk7Ci0KLQkJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0JCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNoZGxjX3NlbmQoY2FyZCwodm9pZCopJmNoLDEpKXsKLQkJd2FucGlwZV90dHlfdHJpZ2dlcl90eF9pcnEoY2FyZCk7Ci0JCWRiZ19wcmludGsoIiVzOiBGYWlsZWQgdG8gVFggY2hhciFcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCQotCWRiZ19wcmludGsoIiVzOiBDaGFyIFRYIE9LXG4iLGNhcmQtPmRldm5hbWUpOwotCQotCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KQotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdhbnBpcGVfdHR5X2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWlmICghdHR5KQotCQlyZXR1cm47Ci0JCi0jaWYgZGVmaW5lZChTRVJJQUxfSEFWRV9QT0xMX1dBSVQpCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnBvbGxfd2FpdCk7Ci0jZW5kaWYKLQl0dHlfd2FrZXVwKHR0eSk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBoaWdoLXByaW9yaXR5IFhPTi9YT0ZGIGNoYXJhY3RlciB0bwotICogdGhlIGRldmljZQotICovCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCi17Ci0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyBpbnQgd2FucGlwZV90dHlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCB3YW5waXBlX3R0eV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc2RsYV90ICpjYXJkOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVFRZIFdyaXRlIFJvb21cbiIpOwotCQotCWlmICghdHR5KXsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FyZCA9IChzZGxhX3QgKil0dHktPmRyaXZlcl9kYXRhOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IFdBTl9DT05ORUNURUQpCi0JCXJldHVybiAwOwotCQotCXJldHVybiBTRUNfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUU7Ci19Ci0KLQotc3RhdGljIGludCBzZXRfbW9kZW1fc3RhdHVzKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgY2hhciBkYXRhKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1iLT5idWZmZXJfbGVuZ3RoPTE7Ci0JbWItPmNvbW1hbmQ9U0VUX01PREVNX1NUQVRVUzsKLQltYi0+ZGF0YVswXT1kYXRhOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spIAotCQljaGRsY19lcnJvciAoY2FyZCwgZXJyLCBtYik7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc2RsYV90ICpjYXJkOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVFRZIEhhbmd1cCFcbiIpOwotCQotCWlmICghdHR5KXsKLQkJcmV0dXJuOwotCX0KLQotCWNhcmQgPSAoc2RsYV90ICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybjsKLQotCWxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCXNldF9tb2RlbV9zdGF0dXMoY2FyZCwwKTsKLQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCZzbXBfZmxhZ3MpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgd2FucGlwZV90dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCB3YW5waXBlX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQotewotCXJldHVybjsKLX0KLQotaW50IHdhbnBpcGVfdHR5X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGUgc2VyaWFsIGRyaXZlciBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZSEKLSAqLwotaW50IHdhbnBpcGVfdHR5X2luaXQoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBzZXJpYWxfc3RhdGUgKiBzdGF0ZTsKLQkKLQkvKiBJbml0aWFsaXplIHRoZSB0dHlfZHJpdmVyIHN0cnVjdHVyZSAqLwotCi0JaWYgKGNhcmQtPnR0eV9taW5vciA8IDAgfHwgY2FyZC0+dHR5X21pbm9yID4gTlJfUE9SVFMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSWxsZWdhbCBNaW5vciBUVFkgbnVtYmVyICgwLTQpOiAlaVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPnR0eV9taW5vcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChXQU5fQ0FSRChjYXJkLT50dHlfbWlub3IpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRUWSBNaW5vciAlaSwgYWxyZWFkeSBpbiB1c2VcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT50dHlfbWlub3IpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmICh0dHlfaW5pdF9jbnQ9PTApewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRUWSAlcyBEcml2ZXIgSW5pdDogTWFqb3IgJWksIE1pbm9yIFJhbmdlICVpLSVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsCi0JCQkJY2FyZC0+dS5jLmFzeW5jX21vZGUgPyAiQVNZTkMiIDogIlNZTkMiLAotCQkJCVdBTl9UVFlfTUFKT1IsTUlOX1BPUlQsTUFYX1BPUlQpOwotCQkKLQkJdHR5X2RyaXZlcl9tb2RlID0gY2FyZC0+dS5jLmFzeW5jX21vZGU7Ci0JCQotCQltZW1zZXQoJnNlcmlhbF9kcml2ZXIsIDAsIHNpemVvZihzdHJ1Y3QgdHR5X2RyaXZlcikpOwotCQlzZXJpYWxfZHJpdmVyLm1hZ2ljID0gVFRZX0RSSVZFUl9NQUdJQzsKLQkJc2VyaWFsX2RyaXZlci5vd25lciA9IFRISVNfTU9EVUxFOwotCQlzZXJpYWxfZHJpdmVyLmRyaXZlcl9uYW1lID0gIndhbnBpcGVfdHR5IjsgCi0JCXNlcmlhbF9kcml2ZXIubmFtZSA9ICJ0dHlXIjsKLQkJc2VyaWFsX2RyaXZlci5tYWpvciA9IFdBTl9UVFlfTUFKT1I7Ci0JCXNlcmlhbF9kcml2ZXIubWlub3Jfc3RhcnQgPSBXQU5fVFRZX01JTk9SOwotCQlzZXJpYWxfZHJpdmVyLm51bSA9IE5SX1BPUlRTOyAKLQkJc2VyaWFsX2RyaXZlci50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKLQkJc2VyaWFsX2RyaXZlci5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCQkKLQkJc2VyaWFsX2RyaXZlci5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXNlcmlhbF9kcml2ZXIuaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQotCQkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCQlzZXJpYWxfZHJpdmVyLmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKLQkJCi0JCXNlcmlhbF9kcml2ZXIucmVmY291bnQgPSAxOwkvKiAhQCFAXiNeJiEhICovCi0KLQkJc2VyaWFsX2RyaXZlci5vcGVuID0gd2FucGlwZV90dHlfb3BlbjsKLQkJc2VyaWFsX2RyaXZlci5jbG9zZSA9IHdhbnBpcGVfdHR5X2Nsb3NlOwotCQlzZXJpYWxfZHJpdmVyLndyaXRlID0gd2FucGlwZV90dHlfd3JpdGU7Ci0JCQotCQlzZXJpYWxfZHJpdmVyLnB1dF9jaGFyID0gd2FucGlwZV90dHlfcHV0X2NoYXI7Ci0JCXNlcmlhbF9kcml2ZXIuZmx1c2hfY2hhcnMgPSB3YW5waXBlX3R0eV9mbHVzaF9jaGFyczsKLQkJc2VyaWFsX2RyaXZlci53cml0ZV9yb29tID0gd2FucGlwZV90dHlfd3JpdGVfcm9vbTsKLQkJc2VyaWFsX2RyaXZlci5jaGFyc19pbl9idWZmZXIgPSB3YW5waXBlX3R0eV9jaGFyc19pbl9idWZmZXI7Ci0JCXNlcmlhbF9kcml2ZXIuZmx1c2hfYnVmZmVyID0gd2FucGlwZV90dHlfZmx1c2hfYnVmZmVyOwotCQkvL3NlcmlhbF9kcml2ZXIuaW9jdGwgPSB3YW5waXBlX3R0eV9pb2N0bDsKLQkJc2VyaWFsX2RyaXZlci50aHJvdHRsZSA9IHdhbnBpcGVfdHR5X3Rocm90dGxlOwotCQlzZXJpYWxfZHJpdmVyLnVudGhyb3R0bGUgPSB3YW5waXBlX3R0eV91bnRocm90dGxlOwotCQlzZXJpYWxfZHJpdmVyLnNlbmRfeGNoYXIgPSB3YW5waXBlX3R0eV9zZW5kX3hjaGFyOwotCQlzZXJpYWxfZHJpdmVyLnNldF90ZXJtaW9zID0gd2FucGlwZV90dHlfc2V0X3Rlcm1pb3M7Ci0JCXNlcmlhbF9kcml2ZXIuc3RvcCA9IHdhbnBpcGVfdHR5X3N0b3A7Ci0JCXNlcmlhbF9kcml2ZXIuc3RhcnQgPSB3YW5waXBlX3R0eV9zdGFydDsKLQkJc2VyaWFsX2RyaXZlci5oYW5ndXAgPSB3YW5waXBlX3R0eV9oYW5ndXA7Ci0JCXNlcmlhbF9kcml2ZXIuYnJlYWtfY3RsID0gd2FucGlwZV90dHlfYnJlYWs7Ci0JCXNlcmlhbF9kcml2ZXIud2FpdF91bnRpbF9zZW50ID0gd2FucGlwZV90dHlfd2FpdF91bnRpbF9zZW50OwotCQlzZXJpYWxfZHJpdmVyLnJlYWRfcHJvYyA9IHdhbnBpcGVfdHR5X3JlYWRfcHJvYzsKLQkJCi0JCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfZHJpdmVyKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyIHNlcmlhbCBkcml2ZXIhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCX0KLQotCi0JLyogVGhlIHN1YnNlcXVlbnQgcG9ydHMgbXVzdCBjb21wbHkgdG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqLwotCWlmICh0dHlfZHJpdmVyX21vZGUgIT0gY2FyZC0+dS5jLmFzeW5jX21vZGUpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRXJyb3I6IFRUWSBEcml2ZXIgb3BlcmF0aW9uIG1vZGUgbWlzbWF0Y2ghXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIFRUWSBkcml2ZXIgaXMgY29uZmlndXJlZCBmb3IgJXMhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHR0eV9kcml2ZXJfbW9kZSA/ICJBU1lOQyIgOiAiU1lOQyIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCi0JdHR5X2luaXRfY250Kys7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEluaXRpYWxpemluZyBUVFkgJXMgRHJpdmVyIE1pbm9yICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwKLQkJCXR0eV9kcml2ZXJfbW9kZSA/ICJBU1lOQyIgOiAiU1lOQyIsCi0JCQljYXJkLT50dHlfbWlub3IpOwotCQotCXR0eV9jYXJkX21hcFtjYXJkLT50dHlfbWlub3JdID0gY2FyZDsKLQlzdGF0ZSA9ICZyc190YWJsZVtjYXJkLT50dHlfbWlub3JdOwotCQotCXN0YXRlLT5tYWdpYyA9IFNTVEFURV9NQUdJQzsKLQlzdGF0ZS0+bGluZSA9IDA7Ci0Jc3RhdGUtPnR5cGUgPSBQT1JUX1VOS05PV047Ci0Jc3RhdGUtPmN1c3RvbV9kaXZpc29yID0gMDsKLQlzdGF0ZS0+Y2xvc2VfZGVsYXkgPSA1KkhaLzEwOwotCXN0YXRlLT5jbG9zaW5nX3dhaXQgPSAzMCpIWjsKLQlzdGF0ZS0+aWNvdW50LmN0cyA9IHN0YXRlLT5pY291bnQuZHNyID0gCi0JCXN0YXRlLT5pY291bnQucm5nID0gc3RhdGUtPmljb3VudC5kY2QgPSAwOwotCXN0YXRlLT5pY291bnQucnggPSBzdGF0ZS0+aWNvdW50LnR4ID0gMDsKLQlzdGF0ZS0+aWNvdW50LmZyYW1lID0gc3RhdGUtPmljb3VudC5wYXJpdHkgPSAwOwotCXN0YXRlLT5pY291bnQub3ZlcnJ1biA9IHN0YXRlLT5pY291bnQuYnJrID0gMDsKLQlzdGF0ZS0+aXJxID0gY2FyZC0+d2FuZGV2LmlycTsgCi0KLQlJTklUX1dPUksoJmNhcmQtPnR0eV93b3JrLCB0dHlfcG9sbF93b3JrLCAodm9pZCopY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2ZyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWNlOWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfZnIuYworKysgL2Rldi9udWxsCkBAIC0xLDUwNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfZnIuYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gRnJhbWUgcmVsYXkgbW9kdWxlLgotKgotKiBBdXRob3Iocyk6CU5lbmFkIENvcmJpYyAgPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci0qCQlHaWRlb24gSGFjawotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBOb3YgMjMsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEFkZGVkIHN1cHBvcnQgZm9yIDIuNC5YIGtlcm5lbHMKLSogTm92IDE1LCAyMDAwICBEYXZpZCBSb2thdmFyZyAgCi0qICAgICAgICAgICAgICAgTmVuYWQgQ29yYmljCW8gQWRkZWQgZnJhbWUgcmVsYXkgYnJpZGdpbmcgc3VwcG9ydC4KLSogCQkJCSAgT3JpZ2luYWwgY29kZSBmcm9tIE1hcmsgV2VsbHMgYW5kIEtyaXN0aWFuIEhvZmZtYW5uIGhhcwotKiAJCQkJICBiZWVuIGludGVncmF0ZWQgaW50byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLgotKiBOb3YgMTMsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEFkZGVkIHRydWUgaW50ZXJmYWNlIHR5cGUgZW5jb2Rpbmcgb3B0aW9uLgotKiAJCQkJICBUY3BkdW1wIGRvZXNuJ3Qgc3VwcG9ydCBGcmFtZSBSZWxheSBpbnRlZmFjZQotKiAJCQkJICB0eXBlcywgdG8gZml4IHRoaXMgdHJ1ZSB0eXBlIG9wdGlvbiB3aWxsIHNldAotKiAJCQkJICB0aGUgaW50ZXJmYWNlIHR5cGUgdG8gUkFXIElQIG1vZGUuCi0qIE5vdiAwNywgMjAwMCAgTmVuYWQgQ29yYmljCW8gQWRkZWQgc2VjdXJpdHkgZmVhdHVyZXMgZm9yIFVEUCBkZWJ1Z2dpbmc6Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVueSBhbGwgYW5kIHNwZWNpZnkgYWxsb3dlZCByZXF1ZXN0cy4KLSogTm92IDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBXYW5waXBlIGludGVyZmFjZXMgY29uZm9ybSB0byByYXcgcGFja2V0IGludGVyZmFjZXMuICAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCB0aGUgaWZfaGVhZGVyIGludG8gdGhlIGlmX3NlbmQoKSByb3V0aW5lLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpZl9oZWFkZXIoKSB3YXMgYnJlYWtpbmcgdGhlIGxpYnBjYXAgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC4gaS5lLiBzdXBwb3J0IGZvciB0Y3BkdW1wLCBldGhlcmVhbCAuLi4KLSogT2N0IDEyLiAyMDAwICBOZW5hZCBDb3JiaWMgICAgbyBBZGRlZCBlcnJvciBtZXNzYWdlIGluIGZyX2NvbmZpZ3VyZQotKiBKdWwgMzEsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEZpeGVkIHRoZSBSb3V0ZXIgVVAgVGltZS4KLSogQXByIDI4LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCB0aGUgb3B0aW9uIHRvIHNodXRkb3duIGFuIGludGVyZmFjZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGNoYW5uZWwgZ2V0cyBkaXNjb25uZWN0ZWQuCi0qIEFwciAyOCwgMjAwMCAgTmVuYWQgQ29yYmljIAlvIEFkZGVkIE0uR3JhbnRzIHBhdGNoOiBkaXNhbGxvdyBkdXBsaWNhdGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Ugc2V0dXBzLiAKLSogQXByIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBNLkdyYW50cyBwYXRjaDogZHluYW1pY2FsbHkgYWRkL3JlbW92ZSAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZGxjaXMvaW50ZXJmYWNlcy4KLSogTWFyIDIzLCAyMDAwICBOZW5hZCBDb3JiaWMgCW8gSW1wcm92ZWQgdGFzayBxdWV1ZSwgYmggaGFuZGxpbmcuCi0qIE1hciAxNiwgMjAwMAlOZW5hZCBDb3JiaWMJbyBBZGRlZCBJbnZlcnNlIEFSUCBzdXBwb3J0Ci0qIE1hciAxMywgMjAwMCAgTmVuYWQgQ29yYmljCW8gQWRkZWQgbmV3IHNvY2tldCBBUEkgc3VwcG9ydC4KLSogTWFyIDA2LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBCdWcgRml4OiBjb3JydXB0ZWQgbWJveCByZWNvdmVyeS4KLSogRmViIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgbyBGaXhlZCB1cCBGVDEgVURQIGRlYnVnZ2luZyBwcm9ibGVtLgotKiBEZXYgMTUsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHVwIGhlYWRlciBmaWxlcyBmb3IgMi4wLlgga2VybmVscwotKgotKiBOb3YgMDgsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIENvbWJpbmVkIGFsbCBkZWJ1ZyBVRFAgY2FsbHMgaW50byBvbmUgZnVuY3Rpb24KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBSZW1vdmVkIHRoZSBBUlAgc3VwcG9ydC4gVGhpcyBoYXMgdG8gYmUgZG9uZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBuZXh0IHZlcnNpb24uCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gT25seSBhIE5vZGUgY2FuIGltcGxlbWVudCBOTyBzaWduYWxsaW5nLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemUgRExDSSBkdXJpbmcgaWZfb3BlbigpIGlmIE5PIAotKgkJCQkgIHNpZ25hbGxpbmcuCi0qCQkJCW8gVG9vayBvdXQgSVBYIHN1cHBvcnQsIGltcGxlbWVudCBpbiBuZXh0Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbgotKiBTZXAgMjksIDE5OTkgIE5lbmFkIENvcmJpYwlvIEFkZGVkIFNNUCBzdXBwb3J0IGFuZCBjaGFuZ2VkIHRoZSB1cGRhdGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0byB1c2UgdGltZXIgaW50ZXJydXB0LgotKgkJCQlvIEZpeGVkIHRoZSBDSVIgYnVnOiAgU2V0IHRoZSB2YWx1ZSBvZiBCQwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIENJUiB3aGVuIHRoZSBDSVIgaXMgZW5hYmxlZC4KLSogIAkJCQlvIFVwZGF0ZWQgY29tbWVudHMsIHN0YXRpc3RpY3MgYW5kIHRyYWNpbmcuCi0qIEp1biAwMiwgMTk5OQlHaWRlb24gSGFjawlvIFVwZGF0ZWQgZm9yIFM1MTQgc3VwcG9ydC4KLSogU2VwIDE4LCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gVXBkYXRlZCBmb3IgMi4yLlgga2VybmVscy4KLSogSnVsIDMxLCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gUmVtb3ZlZCB3cGZfcG9sbCByb3V0aW5lLiAgVGhlIGNoYW5uZWwvRExDSSAKLSoJCQkJICBzdGF0dXMgaXMgcmVjZWl2ZWQgdGhyb3VnaCBhbiBldmVudCBpbnRlcnJ1cHQuCi0qIEp1bCAwOCwgMTk5OAlEYXZpZCBGb25nCW8gQWRkZWQgaW52ZXJzZSBBUlAgc3VwcG9ydC4KLSogTWFyIDI2LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gUmV0dXJuaW5nIHJldHVybiBjb2RlcyBmb3IgZmFpbGVkIFVEUCBjbWRzLgotKiBKYW4gMjgsIDE5OTcJSmFzcHJlZXQgU2luZ2ggIG8gSW1wcm92ZWQgaGFuZGxpbmcgb2YgaW5hY3RpdmUgRExDSXMuCi0qIERlYyAzMCwgMTk5NwlKYXNwcmVldCBTaW5naAlvIFJlcGxhY2VkIGRldl90aW50KCkgd2l0aCBtYXJrX2JoKE5FVF9CSCkKLSogRGVjIDE2LCAxOTk3CUphc3ByZWV0IFNpbmdoCW8gSW1wbGVtZW50ZWQgTXVsdGlwbGUgSVBYIHN1cHBvcnQuCi0qIE5vdiAyNiwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEltcHJvdmVkIGxvYWQgc2hhcmluZyB3aXRoIG11bHRpcGxlIGJvYXJkcwotKgkJCQlvIEFkZGVkIENsaSgpIHRvIHByb3RlY3QgZW5hYmxpbmcgb2YgaW50ZXJydXB0cwotKgkJCQkgIHdoaWxlIHBvbGxpbmcgaXMgY2FsbGVkLgotKiBOb3YgMjQsIDE5OTcJSmFzcHJlZXQgU2luZ2gJbyBBZGRlZCBjb3VudGVycyB0byBhdm9pZCBlbmFibGluZyBvZiBpbnRlcnJ1cHRzCi0qCQkJCSAgd2hlbiB0aGV5IGhhdmUgYmVlbiBkaXNhYmxlZCBieSBhbm90aGVyCi0qCQkJCSAgaW50ZXJmYWNlIG9yIHJvdXRpbmUgKGVnLiB3cGZfcG9sbCkuCi0qIE5vdiAwNiwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIElOVFJfVEVTVF9NT0RFIHRvIGF2b2lkIHBvbGxpbmcJCi0qCQkJCSAgcm91dGluZSBkaXNhYmxlIGludGVycnVwdHMgZHVyaW5nIGludGVycnVwdAotKgkJCQkgIHRlc3RpbmcuCi0qIE9jdCAyMCwgMTk5NyAgSmFzcHJlZXQgU2luZ2ggIG8gQWRkZWQgaG9va3MgaW4gZm9yIFJvdXRlciBVUCB0aW1lLgotKiBPY3QgMTYsIDE5OTcgIEphc3ByZWV0IFNpbmdoICBvIFRoZSBjcml0aWNhbCBmbGFnIGlzIHVzZWQgdG8gbWFpbnRhaW4gZmxvdwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgYnkgYXZvaWRpbmcgUkFDRSBjb25kaXRpb25zLiAgVGhlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKSBhcmUgdGFrZW4gb3V0LgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmcl9jaGFubmVsIHN0cnVjdHVyZSBpcyBhcHBlbmRlZCBmb3IgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIFN0YXRpc3RpY3MuCi0qIE9jdCAxNSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIHVwZGF0ZWQgaWZfc2VuZCgpIGFuZCByZWNlaXZlIGZvciBJUFgKLSogQXVnIDI5LCAxOTk3ICBGYXJoYW4gVGhhd2FyICAgIG8gUmVtb3ZlZCBtb3N0IG9mIHRoZSBjbGkoKSBhbmQgc3RpKCkKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gQWJzdHJhY3RlZCB0aGUgVURQIG1hbmFnZW1lbnQgc3R1ZmYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gTm93IHVzZSB0YnVzeSBhbmQgY3JpdGljYWwgbW9yZSBpbnRlbGxpZ2VudGx5Ci0qIEp1bCAyMSwgMTk5NyAgSmFzcHJlZXQgU2luZ2gJIG8gQ2FuIGNvbmZpZ3VyZSBUMzkxLCBUMzkyLCBOMzkxLCBOMzkyICYgTjM5MwotKgkJCQkgICB0aHJvdWdoIHJvdXRlci5jb25mLgotKgkJCQkgbyBQcm90ZWN0ZWQgY2FsbHMgdG8gc2RsYV9wZWVrKCkgYnkgYWREaW5nIAotKgkJCQkgICBzYXZlX2ZsYWdzKCksIGNsaSgpIGFuZCByZXN0b3JlX2ZsYWdzKCkuCi0qCQkJCSBvIEFkZGVkIGVycm9yIG1lc3NhZ2UgZm9yIEluYWN0aXZlIERMQ0lzIGluCi0qCQkJCSAgIGZyX2V2ZW50KCkgYW5kIHVwZGF0ZV9jaGFuX3N0YXRlKCkuCi0qCQkJCSBvIEZpeGVkIGZyZWVpbmcgdXAgb2YgYnVmZmVycyB1c2luZyBrZnJlZSgpIAotKgkJCSAgICAgICAgICAgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZC4KLSogSnVsIDA3LCAxOTk3CUphc3ByZWV0IFNpbmdoCSBvIEFkZGVkIGNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzIAotKgkJCQkgbyBBZGRlZCBhYmlsaXR5IHRvIGRpc2NhcmQgbXVsdGljYXN0IGFuZCAKLSoJCQkJICAgYnJvYWRjYXN0IHNvdXJjZSBhZGRyZXNzZWQgcGFja2V0cwotKiBKdW4gMjcsIDE5OTcJSmFzcHJlZXQgU2luZ2gJIG8gQWRkZWQgRlQxIG1vbml0b3IgY2FwYWJpbGl0aWVzIAotKgkJCQkgICBOZXcgY2FzZSAoMHg0NCkgc3RhdGVtZW50IGluIGlmX3NlbmQgcm91dGluZSAKLSoJCQkJICAgQWRkZWQgYSBnbG9iYWwgdmFyaWFibGUgckNvdW50IHRvIGtlZXAgdHJhY2sKLSoJCQkgCSAgIG9mIEZUMSBzdGF0dXMgZW5hYmxlZCBvbiB0aGUgYm9hcmQuCi0qIE1heSAyOSwgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBGaXhlZCBtYWpvciBGbG93IENvbnRyb2wgUHJvYmxlbQotKgkJCQkgICBXaXRoIG11bHRpcGxlIGJvYXJkcyBhIHByb2JsZW0gd2FzIHNlZW4gd2hlcmUKLSoJCQkJICAgdGhlIHNlY29uZCBib2FyZCBhbHdheXMgc3RvcHBlZCB0cmFuc21pdHRpbmcKLSoJCQkJICAgcGFja2V0IGFmdGVyIHJ1bm5pbmcgZm9yIGEgd2hpbGUuIFRoZSBjb2RlCi0qCQkJCSAgIGdvdCBpbnRvIGEgc3RhZ2Ugd2hlcmUgdGhlIGludGVycnVwdHMgd2VyZQotKgkJCQkgICBkaXNhYmxlZCBhbmQgZGV2LT50YnVzeSB3YXMgc2V0IHRvIDEuCi0qICAgICAgICAgICAgICAgICAgCQkgICBUaGlzIGNhdXNlZCB0aGUgSWZfc2VuZCgpIHJvdXRpbmUgdG8gZ2V0IGludG8KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlmIGNsYXVzZSBmb3IgaXQoMCxkZXYtPnRidXN5KSAKLSoJCQkJICAgZm9yZXZlci4KLSoJCQkJICAgVGhlIGNvZGUgZ290IGludG8gdGhpcyBzdGFnZSBkdWUgdG8gYW4gCi0qCQkJCSAgIGludGVycnVwdCBvY2N1cnJpbmcgd2l0aGluIHRoZSBpZiBjbGF1c2UgZm9yIAotKgkJCQkgICBzZXRfYml0KDAsZGV2LT50YnVzeSkuICBTaW5jZSBhbiBpbnRlcnJ1cHQgCi0qCQkJCSAgIGRpc2FibGVzIGZ1cmh0ZXIgdHJhbnNtaXQgaW50ZXJydXB0IGFuZCAKLSogCQkJCSAgIG1ha2VzIGRldi0+dGJ1c3kgPSAwLCB0aGlzIGVmZmVjdCB3YXMgdW5kb25lIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBtYWtpbmcgZGV2LT50YnVzeSA9IDEgaW4gdGhlIGlmIGNsYXVzZS4KLSoJCQkJICAgVGhlIEZpeCBjaGVja3MgdG8gc2VlIGlmIFRyYW5zbWl0IGludGVycnVwdHMKLSoJCQkJICAgYXJlIGRpc2FibGVkIHRoZW4gZG8gbm90IG1ha2UgZGV2LT50YnVzeSA9IDEKLSogCSAgIAkJCSAgIEludHJvZHVjZWQgYSBnbG9iYWwgdmFyaWFibGU6IGludF9vY2N1ciBhbmQKLSoJCQkJICAgYWRkZWQgdHhfaW50X2VuYWJsZWQgaW4gdGhlIHdhbl9kZXZpY2UgCi0qCQkJCSAgIHN0cnVjdHVyZS4JCi0qIE1heSAyMSwgMTk5NyAgSmFzcHJlZXQgU2luZ2ggICBvIEZpeGVkIFVEUCBNYW5hZ2VtZW50IGZvciBtdWx0aXBsZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZHMuCi0qCi0qIEFwciAyNSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgICBvIGFkZGVkIFVEUCBNYW5hZ2VtZW50IHN0dWZmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZpeGVkIGJ1ZyBpbiBpZl9zZW5kKCkgYW5kIHR4X2ludHIoKSB0bwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCBhbmQgd2FrZXVwIGFsbCBkZXZpY2VzCi0qIE1hciAxMSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgIFZlcnNpb24gMy4xLjEKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZml4ZWQgKCsxKSBidWcgaW4gZnI1MDhfcnhfaW50cigpCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGNoYW5nZWQgaWZfc2VuZCgpIHRvIHJldHVybiAwIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbmRldi5jcml0aWNhbCgpIGlzIHRydWUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZnJlZSBzb2NrZXQgYnVmZmVyIGluIGlmX3NlbmQoKSBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgMCAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gYWRkZWQgdHhfaW50cigpIHJvdXRpbmUKLSogSmFuIDMwLCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjEuMAotKgkJCQkgbyBpbXBsZW1lbnRlZCBleGVjKCkgZW50cnkgcG9pbnQKLSoJCQkJIG8gZml4ZWQgYSBidWcgY2F1c2luZyBkcml2ZXIgY29uZmlndXJlZCBhcwotKgkJCQkgICBhIEZSIHN3aXRjaCB0byBiZSBzdHVjayBpbiBXQU5fCi0qCQkJCSAgIG1vZGUKLSogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBodG9ucygpLCBldGMuICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBmb3IgaW5iKCksIG91dGIoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4JIAkvKiBmb3IgZG9fZ2V0dGltZW9mZGF5ICovCQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpIG1hY3JvICovCi0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPgkvKiBXYW5waXBlIFNvY2tldCAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGUuaD4JCi0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2ZyLmg+CQkvKiBmcmFtZSByZWxheSBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+ICAgICAgICAgIAkvKiBEeW5hbWljIFJvdXRlIENyZWF0aW9uICovCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4JCS8qIGV0aF90eXBlX3RyYW5zKCkgdXNlZCBmb3IgYnJpZGdpbmcgKi8KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJTUFYX0NNRF9SRVRSWQkxMAkJLyogbWF4IG51bWJlciBvZiBmaXJtd2FyZSByZXRyaWVzICovCi0KLSNkZWZpbmUJRlJfSEVBREVSX0xFTgk4CQkvKiBtYXggZW5jYXBzdWxhdGlvbiBoZWFkZXIgc2l6ZSAqLwotI2RlZmluZQlGUl9DSEFOTkVMX01UVQkxNTAwCQkvKiB1bmZyYWdtZW50ZWQgbG9naWNhbCBjaGFubmVsIE1UVSAqLwotCi0vKiBRLjkyMiBmcmFtZSB0eXBlcyAqLwotI2RlZmluZQlROTIyX1VJCQkweDAzCQkvKiBVbm51bWJlcmVkIEluZm8gZnJhbWUgKi8KLSNkZWZpbmUJUTkyMl9YSUQJMHhBRgkJCi0KLS8qIERMQ0kgY29uZmlndXJlZCBvciBub3QgKi8KLSNkZWZpbmUgRExDSV9OT1RfQ09ORklHVVJFRAkweDAwCi0jZGVmaW5lIERMQ0lfQ09ORklHX1BFTkRJTkcJMHgwMQotI2RlZmluZSBETENJX0NPTkZJR1VSRUQJCTB4MDIKLQotLyogQ0lSIGVuYWJsZWQgb3Igbm90ICovCi0jZGVmaW5lIENJUl9FTkFCTEVECTB4MDAKLSNkZWZpbmUgQ0lSX0RJU0FCTEVECTB4MDEKLQotI2RlZmluZSBGUkFNRV9SRUxBWV9BUEkgMQotI2RlZmluZSBNQVhfQkhfQlVGRgkxMAotCi0vKiBGb3IgaGFuZGxlX0lQWFdBTigpICovCi0jZGVmaW5lIENWSGV4VG9Bc2NpaShiKSAoKCh1bnNpZ25lZCBjaGFyKShiKSA+ICh1bnNpZ25lZCBjaGFyKTkpID8gKCh1bnNpZ25lZCBjaGFyKSdBJyArICgodW5zaWduZWQgY2hhcikoYikgLSAodW5zaWduZWQgY2hhcikxMCkpIDogKCh1bnNpZ25lZCBjaGFyKScwJyArICh1bnNpZ25lZCBjaGFyKShiKSkpCi0gCi0vKioqKioqIERhdGEgU3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBpcyBhbiBleHRlbnRpb24gb2YgdGhlICdzdHJ1Y3QgZGV2aWNlJyB3ZSBjcmVhdGUgZm9yIGVhY2ggbmV0d29yawotICogaW50ZXJmYWNlIHRvIGtlZXAgdGhlIHJlc3Qgb2YgY2hhbm5lbC1zcGVjaWZpYyBkYXRhLgotICovCi10eXBlZGVmIHN0cnVjdCBmcl9jaGFubmVsCi17Ci0Jd2FucGlwZV9jb21tb25fdCBjb21tb247Ci0JY2hhciBuYW1lW1dBTl9JRk5BTUVfU1orMV07CS8qIGludGVyZmFjZSBuYW1lLCBBU0NJSVogKi8KLQl1bnNpZ25lZCBkbGNpX2NvbmZpZ3VyZWQgIDsJLyogY2hlY2sgd2hldGhlciBjb25maWd1cmVkIG9yIG5vdCAqLwotCXVuc2lnbmVkIGNpcl9zdGF0dXM7CQkvKiBjaGVjayB3aGV0aGVyIENJUiBlbmFibGVkIG9yIG5vdCAqLwotCXVuc2lnbmVkIGRsY2k7CQkJLyogbG9naWNhbCBjaGFubmVsIG51bWJlciAqLwotCXVuc2lnbmVkIGNpcjsJCQkvKiBjb21taXR0ZWQgaW5mb3JtYXRpb24gcmF0ZSAqLwotCXVuc2lnbmVkIGJjOwkJCS8qIGNvbW1pdHRlZCBidXJzdCBzaXplICovCi0JdW5zaWduZWQgYmU7CQkJLyogZXhjZXNzIGJ1cnN0IHNpemUgKi8KLQl1bnNpZ25lZCBtYzsJCQkvKiBtdWx0aWNhc3Qgc3VwcG9ydCBvbiBvciBvZmYgKi8KLQl1bnNpZ25lZCB0eF9pbnRfc3RhdHVzOwkJLyogVHJhbnNtaXQgSW50ZXJydXB0IFN0YXR1cyAqLwkKLQl1bnNpZ25lZCBzaG9ydCBwa3RfbGVuZ3RoOwkvKiBQYWNrZXQgTGVuZ3RoICovCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfc3RhcnRfdGltZTsvKiBSb3V0ZXIgc3RhcnQgdGltZSBpbiBzZWNvbmRzICovCi0JdW5zaWduZWQgbG9uZyB0aWNrX2NvdW50ZXI7CS8qIGNvdW50ZXIgZm9yIHRyYW5zbWl0IHRpbWUgb3V0ICovCi0JY2hhciBkZXZfcGVuZGluZ19kZXZ0aW50OwkvKiBpbnRlcmZhY2UgcGVuZGluZyBkZXZfdGludCgpICovCi0Jdm9pZCAqZGxjaV9pbnRfaW50ZXJmYWNlOwkvKiBwb2ludGVyIHRvIHRoZSBETENJIEludGVyZmFjZSAqLyAKLQl1bnNpZ25lZCBsb25nIElCX2FkZHI7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIEludGVyZmFjZSBCeXRlICovCi0JdW5zaWduZWQgbG9uZyBzdGF0ZV90aWNrOwkvKiB0aW1lIG9mIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSAqLwotCXVuc2lnbmVkIGNoYXIgZW5hYmxlX0lQWDsJLyogRW5hYmxlL0Rpc2FibGUgdGhlIHVzZSBvZiBJUFggKi8KLQl1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyOwkvKiBJbnRlcm5hbCBOZXR3b3JrIE51bWJlciBmb3IgSVBYKi8KLQlzZGxhX3QgKmNhcmQ7CQkJLyogLT4gb3duZXIgKi8KLQl1bnNpZ25lZCByb3V0ZV9mbGFnOwkJLyogQWRkL1JlbSBkZXN0IGFkZHIgaW4gcm91dGUgdGFibGVzICovCi0JdW5zaWduZWQgaW5hcnA7CQkJLyogSW52ZXJzZSBBcnAgUmVxdWVzdCBzdGF0dXMgKi8gCi0JbG9uZyBpbmFycF9yZWFkeTsJCS8qIFJlYWR5IHRvIHNlbmQgcmVxdWVzdHMgKi8KLQlpbnQgaW5hcnBfaW50ZXJ2YWw7CQkvKiBUaW1lIGJldHdlZW4gSW5BcnAgUmVxdWVzdHMgKi8KLQl1bnNpZ25lZCBsb25nIGluYXJwX3RpY2s7CS8qIEluQXJwIGppZmZpZXMgdGljayBjb3VudGVyICovCi0JbG9uZyBpbnRlcmZhY2VfZG93bjsJCS8qIEJyaW5nIGludGVyZmFjZSBkb3duIG9uIGRpc2Nvbm5lY3QgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBpZnN0YXRzOwkvKiBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwotCWlmX3NlbmRfc3RhdF90IGRydnN0YXRzX2lmX3NlbmQ7Ci0gICAgICAgIHJ4X2ludHJfc3RhdF90IGRydnN0YXRzX3J4X2ludHI7Ci0gICAgICAgIHBpcGVfbWdtdF9zdGF0X3QgZHJ2c3RhdHNfZ2VuOwotCXVuc2lnbmVkIGxvbmcgcm91dGVyX3VwX3RpbWU7Ci0KLQl1bnNpZ25lZCBzaG9ydCB0cmFuc21pdF9sZW5ndGg7Ci0Jc3RydWN0IHNrX2J1ZmYgKmRlbGF5X3NrYjsKLQotCWJoX2RhdGFfdCAqYmhfaGVhZDsJICAJICAvKiBDaXJjdWxhciBidWZmZXIgZm9yIGNoZGxjX2JoICovCi0JdW5zaWduZWQgbG9uZyAgdHFfd29ya2luZzsKLQl2b2xhdGlsZSBpbnQgIGJoX3dyaXRlOwotCXZvbGF0aWxlIGludCAgYmhfcmVhZDsKLQlhdG9taWNfdCAgYmhfYnVmZl91c2VkOwotCi0JLyogUG9sbGluZyB0YXNrIHF1ZXVlLiBFYWNoIGludGVyZmFjZQotICAgICAgICAgKiBoYXMgaXRzIG93biB0YXNrIHF1ZXVlLCB3aGljaCBpcyB1c2VkCi0gICAgICAgICAqIHRvIGRlZmVyIGV2ZW50cyBmcm9tIHRoZSBpbnRlcnJ1cHQgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJfcG9sbF93b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IGZyX2FycF90aW1lcjsKLQotCXUzMiBpcF9sb2NhbDsKLQl1MzIgaXBfcmVtb3RlOwotCWxvbmcgY29uZmlnX2RsY2k7Ci0JbG9uZyB1bmNvbmZpZ19kbGNpOwotCi0JLyogV2hldGhlciB0aGlzIGludGVyZmFjZSBzaG91bGQgYmUgc2V0dXAgYXMgYSBnYXRld2F5LgotCSAqIFVzZWQgYnkgZHluYW1pYyByb3V0ZSBzZXR1cCBjb2RlICovCi0JdTggIGdhdGV3YXk7Ci0KLQkvKiBUcnVlIGludGVyZmFjZSB0eXBlICovCi0JdTggdHJ1ZV9pZl9lbmNvZGluZzsKLQl1OCBmcl9oZWFkZXJbRlJfSEVBREVSX0xFTl07Ci0JY2hhciBmcl9oZWFkZXJfbGVuOwotCi19IGZyX2NoYW5uZWxfdDsKLQotLyogUm91dGUgRmxhZyBvcHRpb25zICovCi0jZGVmaW5lIE5PX1JPVVRFCTB4MDAKLSNkZWZpbmUgQUREX1JPVVRFIAkweDAxCi0jZGVmaW5lIFJPVVRFX0FEREVECTB4MDIKLSNkZWZpbmUgUkVNT1ZFX1JPVVRFIAkweDAzCi0jZGVmaW5lIEFSUF9SRVEJCTB4MDQKLQotLyogaW5hcnAgb3B0aW9ucyAqLwotI2RlZmluZSBJTkFSUF9OT05FCQkweDAwCi0jZGVmaW5lIElOQVJQX1JFUVVFU1QJCTB4MDEKLSNkZWZpbmUgSU5BUlBfQ09ORklHVVJFRAkweDAyCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUgCTB4MDIKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0FSUAkweDA0Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEVfU1RBVEUgCTB4MDgKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRwkweDEwCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRwkweDIwCi0KLQotdHlwZWRlZiBzdHJ1Y3QgZGxjaV9zdGF0dXMKLXsKLQl1bnNpZ25lZCBzaG9ydCBkbGNpCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIHN0YXRlCVBBQ0tFRDsKLX0gZGxjaV9zdGF0dXNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZGxjaV9JQl9tYXBwaW5nCi17Ci0JdW5zaWduZWQgc2hvcnQgZGxjaQkJUEFDS0VEOwotCXVuc2lnbmVkIGxvbmcgIGFkZHJfdmFsdWUJUEFDS0VEOwotfSBkbGNpX0lCX21hcHBpbmdfdDsKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgRExDSSBsaXN0IFR4IGludGVycnVwdCBtb2RlLiAgSXQgaXMgdXNlZCB0bwotICAgZW5hYmxlIGludGVycnVwdCBiaXQgYW5kIHNldCB0aGUgcGFja2V0IGxlbmd0aCBmb3IgdHJhbnNtaXNzaW9uCi0gKi8KLXR5cGVkZWYgc3RydWN0IGZyX2RsY2lfaW50ZXJmYWNlIAotewotCXVuc2lnbmVkIGNoYXIgZ2VuX2ludGVycnVwdAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgcGFja2V0X2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZAkJUEFDS0VEOwotfSBmcl9kbGNpX2ludGVyZmFjZV90OyAKLQotLyogdmFyaWFibGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIEZUMSBtb25pdG9yIHN0YXR1cyAqLwotc3RhdGljIGludCByQ291bnQgPSAwOwotCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBudW1iZXIgb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgZHVyaW5nIAotICogaW50ZXJydXB0IHRlc3Qgcm91dGluZSAKLSAqLwotc3RhdGljIGludCBJbnRyX3Rlc3RfY291bnRlcjsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdBTiBsaW5rIGRyaXZlciBlbnRyeSBwb2ludHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIFdBTiByb3V0ZXIgbW9kdWxlLiAqLwotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldik7Ci1zdGF0aWMgaW50IG5ld19pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgIHdhbmlmX2NvbmZfdCAqY29uZik7Ci1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKTsKLQotLyogV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgKi8KLXN0YXRpYyBpbnQgd3BmX2V4ZWMoc3RydWN0IHNkbGEgKmNhcmQsIHZvaWQgKnVfY21kLCB2b2lkICp1X2RhdGEpOwotCi0vKiBOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpOwotCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIGZyX2lzcihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcnhfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgdHhfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgc3B1cl9pbnRyKHNkbGFfdCAqY2FyZCk7Ci0KLS8qIEZyYW1lIHJlbGF5IGZpcm13YXJlIGludGVyZmFjZSBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgZnJfcmVhZF92ZXJzaW9uKHNkbGFfdCAqY2FyZCwgY2hhciAqc3RyKTsKLXN0YXRpYyBpbnQgZnJfY29uZmlndXJlKHNkbGFfdCAqY2FyZCwgZnJfY29uZl90ICpjb25mKTsKLXN0YXRpYyBpbnQgZnJfZGxjaV9jb25maWd1cmUoc2RsYV90ICpjYXJkLCBmcl9kbGNfY29uZl90ICpjb25mLCB1bnNpZ25lZCBkbGNpKTsKLXN0YXRpYyBpbnQgZnJfaW5pdF9kbGNpIChzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbik7Ci1zdGF0aWMgaW50IGZyX3NldF9pbnRyX21vZGUgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbW9kZSwgdW5zaWduZWQgbXR1LCB1bnNpZ25lZCBzaG9ydCB0aW1lb3V0KTsKLXN0YXRpYyBpbnQgZnJfY29tbV9lbmFibGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGZyX2NvbW1fZGlzYWJsZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBmcl9nZXRfZXJyX3N0YXRzKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IGZyX2dldF9zdGF0cyhzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBmcl9hZGRfZGxjaShzZGxhX3QgKmNhcmQsIGludCBkbGNpKTsKLXN0YXRpYyBpbnQgZnJfYWN0aXZhdGVfZGxjaShzZGxhX3QgKmNhcmQsIGludCBkbGNpKTsKLXN0YXRpYyBpbnQgZnJfZGVsZXRlX2RsY2kgKHNkbGFfdCogY2FyZCwgaW50IGRsY2kpOwotc3RhdGljIGludCBmcl9pc3N1ZV9pc2Yoc2RsYV90ICpjYXJkLCBpbnQgaXNmKTsKLXN0YXRpYyBpbnQgZnJfc2VuZChzZGxhX3QgKmNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBjaGFyIGF0dHIsIGludCBsZW4sCi0Jdm9pZCAqYnVmKTsKLXN0YXRpYyBpbnQgZnJfc2VuZF9kYXRhX2hlYWRlcihzZGxhX3QgKmNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBjaGFyIGF0dHIsIGludCBsZW4sCi0Jdm9pZCAqYnVmLHVuc2lnbmVkIGNoYXIgaGRyX2xlbik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGZyX3NlbmRfaGRyKHNkbGFfdCAqY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGludCBvZmZzZXQpOwotCi1zdGF0aWMgaW50IGNoZWNrX2RsY2lfY29uZmlnIChzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbik7Ci1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3J4X3R4X2J1ZmZlcnMgKHNkbGFfdCAqY2FyZCk7Ci0KLQotLyogRmlybXdhcmUgYXN5bmNocm9ub3VzIGV2ZW50IGhhbmRsZXJzICovCi1zdGF0aWMgaW50IGZyX2V2ZW50KHNkbGFfdCAqY2FyZCwgaW50IGV2ZW50LCBmcl9tYm94X3QgKm1ib3gpOwotc3RhdGljIGludCBmcl9tb2RlbV9mYWlsdXJlKHNkbGFfdCAqY2FyZCwgZnJfbWJveF90ICptYm94KTsKLXN0YXRpYyBpbnQgZnJfZGxjaV9jaGFuZ2Uoc2RsYV90ICpjYXJkLCBmcl9tYm94X3QgKm1ib3gpOwotCi0vKiBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCB1cGRhdGVfY2hhbl9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHNldF9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmZpbmRfY2hhbm5lbChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGRsY2kpOwotc3RhdGljIGludCBpc190eF9yZWFkeShzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRlY190b191aW50KHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50IGxlbik7Ci1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICk7Ci0KLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQgKTsKLXN0YXRpYyB2b2lkIGluaXRfY2hhbl9zdGF0aXN0aWNzKCBmcl9jaGFubmVsX3QqIGNoYW4gKTsKLXN0YXRpYyB2b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCogY2FyZCApOwotc3RhdGljIHZvaWQgcmVhZF9ETENJX0lCX21hcHBpbmcoIHNkbGFfdCogY2FyZCwgZnJfY2hhbm5lbF90KiBjaGFuICk7Ci1zdGF0aWMgaW50IHNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0cnVjdCBuZXRfZGV2aWNlICptb3ZlX2Rldl90b19uZXh0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoZWNrX3R4X3N0YXR1cyhzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBGcmFtZSBSZWxheSBTb2NrZXQgQVBJICovCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2ZyX2JoIChmcl9jaGFubmVsX3QgKik7Ci1zdGF0aWMgdm9pZCBmcl9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZnJfYmhfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYmhfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZnJfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLS8vc3RhdGljIHZvaWQgYWRkX2dhdGV3YXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfdW5jb25maWdfZnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB1bmNvbmZpZ19mciAoc2RsYV90ICopOwotCi1zdGF0aWMgdm9pZCB0cmlnZ2VyX2NvbmZpZ19mciAoc2RsYV90ICopOwotc3RhdGljIHZvaWQgY29uZmlnX2ZyIChzZGxhX3QgKik7Ci0KLQotLyogSW52ZXJzZSBBUlAgYW5kIER5bmFtaWMgcm91dGluZyBmdW5jdGlvbnMgKi8KLWludCBwcm9jZXNzX0FSUChhcnBoZHJfMTQ5MF90ICpBcnBQYWNrZXQsIHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgaXNfYXJwKHZvaWQgKmJ1Zik7Ci1pbnQgc2VuZF9pbmFycF9yZXF1ZXN0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfZnJfYXJwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZnJfYXJwICh1bnNpZ25lZCBsb25nIGRhdGEpOwotCi0KLS8qIFVkcCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCAqY2FyZCApOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoaW50IHVkcF90eXBlLCBjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBkbGNpKTsKLQotLyogSVBYIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsCi0JdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlciwgdW5zaWduZWQgY2hhciBpbmNvbWluZyk7Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCBjaGFyICpkZXZuYW1lLAotCXVuc2lnbmVkIGNoYXIgZW5hYmxlX0lQWCwgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcik7Ci0KLS8qIExvY2sgRnVuY3Rpb25zOiBTTVAgc3VwcG9ydGVkICovCi12b2lkIAlzNTA4X3M1MTRfdW5sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXZvaWQgCXM1MDhfczUxNF9sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqLCBpbnQpOwotc3RhdGljIGludCBzZXR1cF9mcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIGNoYXIgb3BfbW9kZSk7Ci0KLQotLyoqKioqKiBQdWJsaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRnJhbWUgcmVsYXkgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFdBTlBJUEUgbW9kdWxlIGR1cmluZyBzZXR1cC4gIEF0IHRoaXMKLSAqIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBhbmQgZmlybXdhcmUgaXMgcnVubmluZy4KLSAqICBvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgbyBjb25maWd1cmUgYWRhcHRlcgotICogIG8gaW5pdGlhbGl6ZSBwcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgb2YgdGhlIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlLgotICovCi1pbnQgd3BmX2luaXQoc2RsYV90ICpjYXJkLCB3YW5kZXZfY29uZl90ICpjb25mKQotewotCi0JaW50IGVycjsKLQlmcjUwOF9mbGFnc190KiBmbGFnczsKLQotCXVuaW9uCi0JewotCQljaGFyIHN0cls4MF07Ci0JCWZyX2NvbmZfdCBjZmc7Ci0JfSB1OwotCi0JZnJfYnVmX2luZm9fdCogYnVmX2luZm87Ci0JaW50IGk7Ci0KLQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX0ZSKSB7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCQotCX0KLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCXN3aXRjaCAoY2FyZC0+aHcuZndpZCkgewotCQotCQljYXNlIFNGSURfRlI1MDg6Ci0JCQljYXJkLT5tYm94ICA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIAotCQkJCQlGUjUwOF9NQk9YX09GRlMpOwotCQkJY2FyZC0+ZmxhZ3MgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQkJRlI1MDhfRkxBR19PRkZTKTsKLQkJCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCQkJY2FyZC0+bWJveCArPSBGUl9NQl9WRUNUT1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmZsYWdzICs9IEZSX01CX1ZFQ1RPUjsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmlzciA9ICZmcl9pc3I7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCS8qIFJlYWQgZmlybXdhcmUgdmVyc2lvbi4gIE5vdGUgdGhhdCB3aGVuIGFkYXB0ZXIgaW5pdGlhbGl6ZXMsIGl0Ci0JICogY2xlYXJzIHRoZSBtYWlsYm94LCBzbyBpdCBtYXkgYXBwZWFyIHRoYXQgdGhlIGZpcnN0IGNvbW1hbmQgd2FzCi0JICogZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IHdoZW4gaW4gZmFjdCBpdCB3YXMgbWVyZWx5IGVyYXNlZC4gVG8gd29yawotCSAqIGFyb3VuZCB0aGlzLCB3ZSBleGVjdXRlIHRoZSBmaXJzdCBjb21tYW5kIHR3aWNlLgotCSAqLwotCi0JaWYgKGZyX3JlYWRfdmVyc2lvbihjYXJkLCBOVUxMKSB8fCBmcl9yZWFkX3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBydW5uaW5nIGZyYW1lIHJlbGF5IGZpcm13YXJlIHYlc1xuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgdS5zdHIpOwotCi0JLyogQWRqdXN0IGNvbmZpZ3VyYXRpb24gKi8KLQljb25mLT5tdHUgKz0gRlJfSEVBREVSX0xFTjsKLQljb25mLT5tdHUgPSAoY29uZi0+bXR1ID49IE1JTl9MR1RIX0ZSX0RBVEFfQ0ZHKSA/Ci0JCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgRlJfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIEZSX0NIQU5ORUxfTVRVICsgRlJfSEVBREVSX0xFTjsKLSAgICAgCi0JY29uZi0+YnBzID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT5icHMsIDIwNDgwMDApOwotCi0JLyogSW5pdGlhbHplIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBzZW50IHRvIHRoZSBib2FyZCB0byB6ZXJvICovCi0JbWVtc2V0KCZ1LmNmZywgMCwgc2l6ZW9mKHUuY2ZnKSk7Ci0KLQltZW1zZXQoY2FyZC0+dS5mLmRsY2lfdG9fZGV2X21hcCwgMCwgc2l6ZW9mKGNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXApKTsKLSAJCi0JLyogQ29uZmlndXJlIGFkYXB0ZXIgZmlybXdhcmUgKi8KLQotCXUuY2ZnLm10dQk9IGNvbmYtPm10dTsKLQl1LmNmZy5rYnBzCT0gY29uZi0+YnBzIC8gMTAwMDsKLQotICAgIAl1LmNmZy5jaXJfZndkID0gdS5jZmcuY2lyX2J3ZCA9IDE2OwotICAgICAgICB1LmNmZy5iY19md2QgID0gdS5jZmcuYmNfYndkID0gMTY7Ci0JCi0JdS5jZmcub3B0aW9ucwk9IDB4MDAwMDsKLQlwcmludGsoS0VSTl9JTkZPICIlczogR2xvYmFsIENJUiBlbmFibGVkIGJ5IERlZmF1bHRcbiIsIGNhcmQtPmRldm5hbWUpOwotCQotCXN3aXRjaCAoY29uZi0+dS5mci5zaWduYWxsaW5nKSB7Ci0KLQkJY2FzZSBXQU5PUFRfRlJfQU5TSToKLQkJCXUuY2ZnLm9wdGlvbnMgPSAweDAwMDA7IAotCQkJYnJlYWs7CQkKLQkKLQkJY2FzZSBXQU5PUFRfRlJfUTkzMzoJCi0JCQl1LmNmZy5vcHRpb25zIHw9IDB4MDIwMDsgCi0JCQlicmVhazsKLQkKLQkJY2FzZSBXQU5PUFRfRlJfTE1JOgkKLQkJCXUuY2ZnLm9wdGlvbnMgfD0gMHgwNDAwOyAKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOT1BUX05POgotCQkJdS5jZmcub3B0aW9ucyB8PSAweDA4MDA7IAotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSWxsZWdhbCBTaWduYWxsaW5nIG9wdGlvblxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0KLQljYXJkLT53YW5kZXYuc2lnbmFsbGluZyA9IGNvbmYtPnUuZnIuc2lnbmFsbGluZzsKLQotCWlmIChjb25mLT5zdGF0aW9uID09IFdBTk9QVF9DUEUpIHsKLQotCi0JCWlmIChjb25mLT51LmZyLnNpZ25hbGxpbmcgPT0gV0FOT1BUX05PKXsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBFUlJPUiAtIEZvciBOTyBzaWduYWxsaW5nLCBzdGF0aW9uIG11c3QgYmUgc2V0IHRvIE5vZGUhIiwKLQkJCQkgCSBjYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJdS5jZmcuc3RhdGlvbiA9IDA7Ci0JCXUuY2ZnLm9wdGlvbnMgfD0gMHg4MDAwOwkvKiBhdXRvIGNvbmZpZyBETENJICovCi0JCWNhcmQtPnUuZi5kbGNpX251bSAgPSAwOwotCQotCX0gZWxzZSB7Ci0KLQkJdS5jZmcuc3RhdGlvbiA9IDE7CS8qIHN3aXRjaCBlbXVsYXRpb24gbW9kZSAqLwotCi0JCS8qIEZvciBzd2l0Y2ggZW11bGF0aW9uIHdlIGhhdmUgdG8gY3JlYXRlIGEgbGlzdCBvZiBkbGNpKHMpCi0JCSAqIHRoYXQgd2lsbCBiZSBzZW50IHRvIGJlIGdsb2JhbCBTRVRfRExDSV9DT05GSUdVUkFUSU9OIAotCQkgKiBjb21tYW5kIGluIGZyX2NvbmZpZ3VyZSgpIHJvdXRpbmUuIAotCQkgKi8KLQotCQljYXJkLT51LmYuZGxjaV9udW0gID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUuZnIuZGxjaV9udW0sIDEpLCAxMDApOwotCQotCQlmb3IgKCBpID0gMDsgaSA8IGNhcmQtPnUuZi5kbGNpX251bTsgaSsrKSB7Ci0KLQkJCWNhcmQtPnUuZi5ub2RlX2RsY2lbaV0gPSAodW5zaWduZWQgc2hvcnQpIAotCQkJCWNvbmYtPnUuZnIuZGxjaVtpXSA/IGNvbmYtPnUuZnIuZGxjaVtpXSA6IDE2OwotCQotCQl9Ci0JfQotCi0JaWYgKGNvbmYtPmNsb2NraW5nID09IFdBTk9QVF9JTlRFUk5BTCkKLQkJdS5jZmcucG9ydCB8PSAweDAwMDE7Ci0KLQlpZiAoY29uZi0+aW50ZXJmYWNlID09IFdBTk9QVF9SUzIzMikKLQkJdS5jZmcucG9ydCB8PSAweDAwMDI7Ci0KLQlpZiAoY29uZi0+dS5mci50MzkxKQotCQl1LmNmZy50MzkxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LmZyLnQzOTEsIDMwKTsKLQllbHNlCi0JCXUuY2ZnLnQzOTEgPSA1OwotCi0JaWYgKGNvbmYtPnUuZnIudDM5MikKLQkJdS5jZmcudDM5MiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS5mci50MzkyLCAzMCk7Ci0JZWxzZQotCQl1LmNmZy50MzkyID0gMTU7Ci0KLQlpZiAoY29uZi0+dS5mci5uMzkxKQotCQl1LmNmZy5uMzkxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LmZyLm4zOTEsIDI1NSk7Ci0JZWxzZQotCQl1LmNmZy5uMzkxID0gMjsKLQotCWlmIChjb25mLT51LmZyLm4zOTIpCi0JCXUuY2ZnLm4zOTIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUuZnIubjM5MiwgMTApOwotCWVsc2UKLQkJdS5jZmcubjM5MiA9IDM7CQotCi0JaWYgKGNvbmYtPnUuZnIubjM5MykKLQkJdS5jZmcubjM5MyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS5mci5uMzkzLCAxMCk7Ci0JZWxzZQotCQl1LmNmZy5uMzkzID0gNDsKLQotCWlmIChmcl9jb25maWd1cmUoY2FyZCwgJnUuY2ZnKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkKLSAgICAgICAgICAgICAgICBidWZfaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIEZSX01CX1ZFQ1RPUiArCi0JCQlGUjUwOF9SWEJDX09GRlMpOwotCi0gICAgICAgICAgICAgICAgY2FyZC0+cnhtYiA9ICh2b2lkKikoYnVmX2luZm8tPnJzZV9uZXh0ICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT51LmYucnhtYl9iYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsgY2FyZC0+aHcuZHBtYmFzZSk7IAotCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5mLnJ4bWJfbGFzdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoYnVmX2luZm8tPnJzZV9udW0gLSAxKSAqIHNpemVvZihmcl9yeF9idWZfY3RsX3QpICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmh3LmRwbWJhc2UpOwotCX1lbHNlewkKLQkJYnVmX2luZm8gPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBGUjUwOF9SWEJDX09GRlMpOwotCi0JCWNhcmQtPnJ4bWIgPSAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfbmV4dCAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQkJCi0JCWNhcmQtPnUuZi5yeG1iX2Jhc2UgPQotCQkJKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JCQotCQljYXJkLT51LmYucnhtYl9sYXN0ID0KLQkJCSh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsKLQkJCShidWZfaW5mby0+cnNlX251bSAtIDEpICogc2l6ZW9mKGZyX3J4X2J1Zl9jdGxfdCkgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JfQotCi0JY2FyZC0+dS5mLnJ4X2Jhc2UgPSBidWZfaW5mby0+YnVmX2Jhc2U7Ci0JY2FyZC0+dS5mLnJ4X3RvcCAgPSBidWZfaW5mby0+YnVmX3RvcDsKLQotCWNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcgPSAwOwotCi0JY2FyZC0+d2FuZGV2Lm10dQk9IGNvbmYtPm10dTsKLQljYXJkLT53YW5kZXYuYnBzCT0gY29uZi0+YnBzOwotCWNhcmQtPndhbmRldi5pbnRlcmZhY2UJPSBjb25mLT5pbnRlcmZhY2U7Ci0JY2FyZC0+d2FuZGV2LmNsb2NraW5nCT0gY29uZi0+Y2xvY2tpbmc7Ci0JY2FyZC0+d2FuZGV2LnN0YXRpb24JPSBjb25mLT5zdGF0aW9uOwotCWNhcmQtPnBvbGwJCT0gTlVMTDsgCi0JY2FyZC0+ZXhlYwkJPSAmd3BmX2V4ZWM7Ci0JY2FyZC0+d2FuZGV2LnVwZGF0ZQk9ICZ1cGRhdGU7Ci0JY2FyZC0+d2FuZGV2Lm5ld19pZgk9ICZuZXdfaWY7Ci0JY2FyZC0+d2FuZGV2LmRlbF9pZgk9ICZkZWxfaWY7Ci0JY2FyZC0+d2FuZGV2LnN0YXRlCT0gV0FOX0RJU0NPTk5FQ1RFRDsKLQljYXJkLT53YW5kZXYudHRsCT0gY29uZi0+dHRsOwotICAgICAgICBjYXJkLT53YW5kZXYudWRwX3BvcnQgCT0gY29uZi0+dWRwX3BvcnQ7ICAgICAgIAotCWNhcmQtPmRpc2FibGVfY29tbQk9ICZkaXNhYmxlX2NvbW07CQotCWNhcmQtPnUuZi5hcnBfZGV2IAk9IE5VTEw7Ci0KLQkvKiBJbnRpYWxpemUgZ2xvYmFsIHN0YXRpc3RpY3MgZm9yIGEgY2FyZCAqLwotCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIGNhcmQgKTsKLQotICAgICAgICBjYXJkLT5UcmFjaW5nRW5hYmxlZCAgICAgICAgICA9IDA7Ci0KLQkvKiBJbnRlcnJ1cHQgVGVzdCAqLwotCUludHJfdGVzdF9jb3VudGVyID0gMDsKLQljYXJkLT5pbnRyX21vZGUgPSBJTlRSX1RFU1RfTU9ERTsKLQllcnIgPSBpbnRyX3Rlc3QoIGNhcmQgKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmQgb2YgSW50ZXJydXB0IFRlc3QgcmM9MHgleCAgY291bnQ9JWlcbiIsCi0JCQljYXJkLT5kZXZuYW1lLGVycixJbnRyX3Rlc3RfY291bnRlcik7IAotCQotCWlmIChlcnIgfHwgKEludHJfdGVzdF9jb3VudGVyIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnRlcnJ1cHQgVGVzdCBGYWlsZWQsIENvdW50ZXI6ICVpXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJydXB0IFRlc3QgUGFzc2VkLCBDb3VudGVyOiAlaVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQotCi0JLyogQXByIDI4IDIwMDAuIE5lbmFkIENvcmJpYwotCSAqIEVuYWJsZSBjb21tbnVuaWNhdGlvbnMgaGVyZSwgbm90IGluIGlmX29wZW4gb3IgbmV3X2lmLCBzaW5jZQotICAgICAgICAgKiBpbnRlcmZhY2VzIGNvbWUgZG93biB3aGVuIHRoZSBsaW5rIGlzIGRpc2Nvbm5lY3RlZC4gCi0gICAgICAgICAqLwotCSAKLQkvKiBJZiB5b3UgZW5hYmxlIGNvbW1zIGFuZCB0aGVuIHNldCBpbnRzLCB5b3UgZ2V0IGEgVHggaW50IGFzIHlvdQotCSAqIHBlcmZvcm0gdGhlIFNFVF9JTlRfVFJJR0dFUlMgY29tbWFuZC4gU28sIHdlIG9ubHkgc2V0IGludAotCSAqIHRyaWdnZXJzIGFuZCB0aGVuIGFkanVzdCB0aGUgaW50ZXJydXB0IG1hc2sgKHRvIGRpc2FibGUgVHggaW50cykKLQkgKiBiZWZvcmUgZW5hYmxpbmcgY29tbXMuIAotCSAqLwkKLSAgICAgICAgaWYgKGZyX3NldF9pbnRyX21vZGUoY2FyZCwgKEZSX0lOVFJfUlhSRFkgfCBGUl9JTlRSX1RYUkRZIHwKLQkJRlJfSU5UUl9ETEMgfCBGUl9JTlRSX1RJTUVSIHwgRlJfSU5UUl9UWF9NVUxUX0RMQ0lzKSAsCi0JCWNhcmQtPndhbmRldi5tdHUsIDApKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWZsYWdzLT5pbWFzayAmPSB+KEZSX0lOVFJfVFhSRFkgfCBGUl9JTlRSX1RJTUVSKTsKLSAKLQlpZiAoZnJfY29tbV9lbmFibGUoY2FyZCkpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQkKLQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dS5mLmlmX3NlbmRfbG9jayk7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotLyoqKioqKiogV0FOIERldmljZSBEcml2ZXIgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGRldmljZSBzdGF0dXMgJiBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KQotewotCXZvbGF0aWxlIHNkbGFfdCogY2FyZDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3M7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0JZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCi0JY2FyZC0+dS5mLnVwZGF0ZV9jb21tc19zdGF0cyA9IDE7Ci0JY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVElNRVI7Ci0gICAgICAgCXRpbWVvdXQgPSBqaWZmaWVzOwotICAgICAgIAlmb3IoOzspIHsKLQkJaWYoY2FyZC0+dS5mLnVwZGF0ZV9jb21tc19zdGF0cyA9PSAwKQotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCArIDEgKiBIWikpewotICAgIAkJCWNhcmQtPnUuZi51cGRhdGVfY29tbXNfc3RhdHMgPSAwOwotIAkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlmcl9jaGFubmVsX3QqIGNoYW47Ci0JaW50IGRsY2kgPSAwOwotCWludCBlcnIgPSAwOwotCi0JCi0JaWYgKChjb25mLT5uYW1lWzBdID09ICdcMCcpIHx8IChzdHJsZW4oY29uZi0+bmFtZSkgPiBXQU5fSUZOQU1FX1NaKSkgewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwotCWNoYW4gPSBrbWFsbG9jKHNpemVvZihmcl9jaGFubmVsX3QpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGNoYW4sIDAsIHNpemVvZihmcl9jaGFubmVsX3QpKTsKLQlzdHJjcHkoY2hhbi0+bmFtZSwgY29uZi0+bmFtZSk7Ci0JY2hhbi0+Y2FyZCA9IGNhcmQ7Ci0KLQkvKiB2ZXJpZnkgbWVkaWEgYWRkcmVzcyAqLwotCWlmIChpc2RpZ2l0KGNvbmYtPmFkZHJbMF0pKSB7Ci0KLQkJZGxjaSA9IGRlY190b191aW50KGNvbmYtPmFkZHIsIDApOwotCi0JCWlmIChkbGNpICYmIChkbGNpIDw9IEhJR0hFU1RfVkFMSURfRExDSSkpIHsKLQkJCi0JCQljaGFuLT5kbGNpID0gZGxjaTsKLQkJCi0JCX0gZWxzZSB7Ci0JCQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIiVzOiBJbnZhbGlkIERMQ0kgJXUgb24gaW50ZXJmYWNlICVzIVxuIiwKLQkJCQl3YW5kZXYtPm5hbWUsIGRsY2ksIGNoYW4tPm5hbWUpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXM6IEludmFsaWQgbWVkaWEgYWRkcmVzcyBvbiBpbnRlcmZhY2UgJXMhXG4iLAotCQkJd2FuZGV2LT5uYW1lLCBjaGFuLT5uYW1lKTsKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGNoYW4tPnRydWVfaWZfZW5jb2RpbmcgPSBjb25mLT50cnVlX2lmX2VuY29kaW5nKSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogRW5hYmxpbmcsIHRydWUgaW50ZXJmYWNlIHR5cGUgZW5jb2RpbmcuXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCQotCi0KLSAgICAvKiBTZXR1cCB3YW5waXBlIGFzIGEgcm91dGVyIChXQU5QSVBFKSBldmVuIGlmIGl0IGlzCi0JICogYSBicmlkZ2VkIERMQ0ksIG9yIGFzIGFuIEFQSSAKLQkgKi8KLSAgICAgICAgaWYgKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgID09IDAgIHx8IAotCSAgICBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFIikgICA9PSAwICB8fAotCSAgICBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFX04iKSA9PSAwKXsKLQkJCi0JCWlmKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgPT0gMCl7Ci0JCQljaGFuLT5jb21tb24udXNlZGJ5ID0gV0FOUElQRTsKLQkJCQotCSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIG1vZGUuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkKLQkJfWVsc2UgaWYoc3RyY21wKGNvbmYtPnVzZWRieSwgIkJSSURHRSIpID09IDApewotCQkJCi0JCQljaGFuLT5jb21tb24udXNlZGJ5ID0gQlJJREdFOwotCQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIChCUklER0UpIG1vZGUuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX1lbHNlIGlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQlJJREdFX04iKSA9PSAwICl7Ci0JCQkKLQkJCWNoYW4tPmNvbW1vbi51c2VkYnkgPSBCUklER0VfTk9ERTsKLQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBpbiBXQU5QSVBFIChCUklER0VfTk9ERSkgbW9kZS5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCi0JCWlmICghZXJyKXsKLQkJCS8qIER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgotCQkJICogT24gZGlzY29ubmVjdCwgaWYgdGhlIG9wdGlvbnMgaXMgc2VsZWN0ZWQsCi0JCQkgKiB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgYnJvdWdodCBkb3duICovCi0JCQlpZiAoY29uZi0+aWZfZG93biA9PSBXQU5PUFRfWUVTKXsgCi0JCQkJc2V0X2JpdChEWU5fT1BUX09OLCZjaGFuLT5pbnRlcmZhY2VfZG93bik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkgICAgIiVzOiBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGVuYWJsZWQuXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCi0gICAgICAgIH0gZWxzZSBpZihzdHJjbXAoY29uZi0+dXNlZGJ5LCAiQVBJIikgPT0gMCl7Ci0KLSAgICAgICAgICAgICAgICBjaGFuLT5jb21tb24udXNlZGJ5ID0gQVBJOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIEFQSSBtb2RlLlxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0gICAgICAgIH0KLQotCWlmIChlcnIpIHsKLQkJCi0JCWtmcmVlKGNoYW4pOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIHBsYWNlIGNpcixiZSxiYyBhbmQgb3RoZXIgY2hhbm5lbCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpbnRvIHRoZQotCSAqIGNoYW4gc3RydWN0dXJlIAotICAgICAgICAgKi8KLQlpZiAoY29uZi0+Y2lyKSB7Ci0KLQkJY2hhbi0+Y2lyID0gbWF4X3QodW5zaWduZWQgaW50LCAxLAotCQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+Y2lyLCA1MTIpKTsKLQkJY2hhbi0+Y2lyX3N0YXR1cyA9IENJUl9FTkFCTEVEOyAKLQotCQkKLQkJLyogSWYgQ0lSIGlzIGVuYWJsZWQsIGZvcmNlIEJDIHRvIGVxdWFsIENJUgotICAgICAgICAgICAgICAgICAqIHRoaXMgc29sdmVzIG51bWJlciBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgaWYgQ0lSIGlzIAotICAgICAgICAgICAgICAgICAqIHNldCBhbmQgQkMgaXMgbm90IAotCQkgKi8KLQkJY2hhbi0+YmMgPSBjaGFuLT5jaXI7Ci0KLQkJaWYgKGNvbmYtPmJlKXsKLQkJCWNoYW4tPmJlID0gbWF4X3QodW5zaWduZWQgaW50LAotCQkJCSAgICAgICAwLCBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPmJlLCA1MTEpKTsKLQkJfWVsc2V7CQotCQkJY29uZi0+YmUgPSAwOwotCQl9Ci0KLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBDSVIgZW5hYmxlZCBmb3IgRExDSSAlaSBcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLGNoYW4tPmRsY2kpOwotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6ICAgICBDSVIgPSAlaSA7IEJDID0gJWkgOyBCRSA9ICVpXG4iLAotCQkJCXdhbmRldi0+bmFtZSxjaGFuLT5jaXIsY2hhbi0+YmMsY2hhbi0+YmUpOwotCi0KLQl9ZWxzZXsKLQkJY2hhbi0+Y2lyX3N0YXR1cyA9IENJUl9ESVNBQkxFRDsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBDSVIgZGlzYWJsZWQgZm9yIERMQ0kgJWlcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLGNoYW4tPmRsY2kpOwotCX0KLQotCWNoYW4tPm1jID0gY29uZi0+bWM7Ci0KLQlpZiAoY29uZi0+aW5hcnAgPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZlcnNlIEFSUCBTdXBwb3J0IEVuYWJsZWRcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCWNoYW4tPmluYXJwID0gY29uZi0+aW5hcnAgPyBJTkFSUF9SRVFVRVNUIDogSU5BUlBfTk9ORTsKLQkJY2hhbi0+aW5hcnBfaW50ZXJ2YWwgPSBjb25mLT5pbmFycF9pbnRlcnZhbCA/IGNvbmYtPmluYXJwX2ludGVydmFsIDogMTA7Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZlcnNlIEFSUCBTdXBwb3J0IERpc2FibGVkXG4iLGNhcmQtPmRldm5hbWUpOwotCQljaGFuLT5pbmFycCA9IElOQVJQX05PTkU7Ci0JCWNoYW4tPmluYXJwX2ludGVydmFsID0gMTA7Ci0JfQotCi0KLQljaGFuLT5kbGNpX2NvbmZpZ3VyZWQgPSBETENJX05PVF9DT05GSUdVUkVEOwkKLQotCi0JLypGSVhNRTogSVBYIGRpc2FibGVkIGluIHRoaXMgV0FOUElQRSB2ZXJzaW9uICovCi0JaWYgKGNvbmYtPmVuYWJsZV9JUFggPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiAtIFRoaXMgdmVyc2lvbiBvZiBXQU5QSVBFIGRvZXNuJ3Qgc3VwcG9ydCBJUFhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWtmcmVlKGNoYW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9ZWxzZXsKLQkJY2hhbi0+ZW5hYmxlX0lQWCA9IFdBTk9QVF9OTzsKLQl9CQotCi0JaWYgKGNvbmYtPm5ldHdvcmtfbnVtYmVyKXsKLQkJY2hhbi0+bmV0d29ya19udW1iZXIgPSBjb25mLT5uZXR3b3JrX251bWJlcjsKLQl9ZWxzZXsKLQkJY2hhbi0+bmV0d29ya19udW1iZXIgPSAweERFQURCRUVGOwotCX0KLQotCWNoYW4tPnJvdXRlX2ZsYWcgPSBOT19ST1VURTsKLQkKLQlpbml0X2NoYW5fc3RhdGlzdGljcyhjaGFuKTsKLQotCWNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IDA7Ci0KLQkvKiBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIGRhdGEgc3BhY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLwotCXN0cmNweShkZXYtPm5hbWUsY2hhbi0+bmFtZSk7Ci0JCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0JZGV2LT5wcml2ID0gY2hhbjsKLQotCS8qIEluaXRpYWxpemUgRlIgUG9sbGluZyBUYXNrIFF1ZXVlCi0gICAgICAgICAqIFdlIG5lZWQgYSBwb2xsIHJvdXRpbmUgZm9yIGVhY2ggbmV0d29yawotICAgICAgICAgKiBpbnRlcmZhY2UuIAotICAgICAgICAgKi8KLQlJTklUX1dPUksoJmNoYW4tPmZyX3BvbGxfd29yaywgKHZvaWQgKilmcl9wb2xsLCBkZXYpOwotCi0JaW5pdF90aW1lcigmY2hhbi0+ZnJfYXJwX3RpbWVyKTsKLQljaGFuLT5mcl9hcnBfdGltZXIuZGF0YT0odW5zaWduZWQgbG9uZylkZXY7Ci0JY2hhbi0+ZnJfYXJwX3RpbWVyLmZ1bmN0aW9uID0gZnJfYXJwOwotCi0Jd2FuZGV2LT5uZXdfaWZfY250Kys7Ci0KLQkvKiBUZWxscyB1cyB0aGF0IGlmIHRoaXMgaW50ZXJmYWNlIGlzIGEKLSAgICAgICAgICogZ2F0ZXdheSBvciBub3QgKi8KLQlpZiAoKGNoYW4tPmdhdGV3YXkgPSBjb25mLT5nYXRld2F5KSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBpcyBzZXQgYXMgYSBnYXRld2F5LlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQl9Ci0KLQkvKiBNLiBHcmFudCBQYXRjaCBBcHIgMjggMjAwMCAKLSAgICAgICAgICogRGlzYWxsb3cgZHVwbGljYXRlIGRsY2kgY29uZmlndXJhdGlvbnMuICovCi0JaWYgKGNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbY2hhbi0+ZGxjaV0gIT0gTlVMTCkgewotCQlrZnJlZShjaGFuKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQkvKiBDb25maWd1cmUgdGhpcyBkbGNpIGF0IGEgbGF0ZXIgZGF0ZSwgd2hlbgotICAgICAgICAgKiB0aGUgaW50ZXJmYWNlIGNvbWVzIHVwLiBpLmUuIHdoZW4gaWZfb3BlbigpIAotICAgICAgICAgKiBleGVjdXRlcyAqLwotCXNldF9iaXQoMCwmY2hhbi0+Y29uZmlnX2RsY2kpOwotCQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZWxldGUgbG9naWNhbCBjaGFubmVsLgotICovCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFncz0wOwotCi0JLyogVGhpcyBpbnRlcmZhY2UgaXMgZGVhZCwgbWFrZSBzdXJlIHRoZSAKLQkgKiBBUlAgdGltZXIgaXMgc3RvcHBlZCAqLwotCWRlbF90aW1lcigmY2hhbi0+ZnJfYXJwX3RpbWVyKTsKLQkKLQkvKiBJZiB3ZSBhcmUgYSBOT0RFLCB3ZSBtdXN0IHVuY29uZmlndXJlIHRoaXMgRExDSQotCSAqIFRyaWdnZXIgYW4gdW5jb25maWd1cmUgY29tbWFuZCB0aGF0IHdpbGwKLQkgKiBiZSBleGVjdXRlZCBpbiB0aW1lciBpbnRlcnJ1cHQuIFdlIG11c3Qgd2FpdAotCSAqIGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZS4gKi8KLQl0cmlnZ2VyX3VuY29uZmlnX2ZyKGRldik7Ci0KLQlsb2NrX2FkYXB0ZXJfaXJxKCZ3YW5kZXYtPmxvY2ssICZzbXBfZmxhZ3MpOwotCXdhbmRldi0+bmV3X2lmX2NudC0tOwotCXVubG9ja19hZGFwdGVyX2lycSgmd2FuZGV2LT5sb2NrLCAmc21wX2ZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBkaXNhYmxlX2NvbW0KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCURpc2FibGUgY29tbXVuaWNhdGlvbnMuCi0gKiAJVGhpcyBjb2RlIHJ1bnMgaW4gc2h1dGRvd24gKHNkbGFtYWluLmMpCi0gKiAgICAgIHVuZGVyIGNyaXRpY2FsIGZsYWcuIFRoZXJlZm9yZSBpdCBpcyBub3QKLSAqICAgICAgbmVjZXNzYXJ5IHRvIHNldCBhIGNyaXRpY2FsIGZsYWcgaGVyZSAKLSAqCi0gKiBVc2FnZToKLSAqIAlDb21tbnVuaWNhdGlvbnMgYXJlIGRpc2FibGVkIG9ubHkgb24gYSBjYXJkCi0gKiAgICAgIHNodXRkb3duLgotICovCi0KLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90ICpjYXJkKQotewotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEaXNhYmxpbmcgQ29tbXVuaWNhdGlvbnMhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JZnJfY29tbV9kaXNhYmxlKGNhcmQpOwotfQotCi0vKioqKioqIFdBTlBJUEUtc3BlY2lmaWMgZW50cnkgcG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBFeGVjdXRlIGFkYXB0ZXIgaW50ZXJmYWNlIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBpbnQgd3BmX2V4ZWMgKHN0cnVjdCBzZGxhKiBjYXJkLCB2b2lkKiB1X2NtZCwgdm9pZCogdV9kYXRhKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyLCBsZW47Ci0JZnJfY21kX3QgY21kOwotCi0JaWYoY29weV9mcm9tX3VzZXIoKHZvaWQqKSZjbWQsIHVfY21kLCBzaXplb2YoY21kKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCQotCS8qIGV4ZWN1dGUgY29tbWFuZCAqLwotCWRvCi0JewotCQltZW1jcHkoJm1ib3gtPmNtZCwgJmNtZCwgc2l6ZW9mKGNtZCkpOwotCQkKLQkJaWYgKGNtZC5sZW5ndGgpewotCQkJaWYoIGNvcHlfZnJvbV91c2VyKCh2b2lkKikmbWJveC0+ZGF0YSwgdV9kYXRhLCBjbWQubGVuZ3RoKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQkKLQkJaWYgKHNkbGFfZXhlYyhtYm94KSkKLQkJCWVyciA9IG1ib3gtPmNtZC5yZXN1bHQ7Ci0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCS8qIHJldHVybiByZXN1bHQgKi8KLQlpZiAoY29weV90b191c2VyKHVfY21kLCAodm9pZCopJm1ib3gtPmNtZCwgc2l6ZW9mKGZyX2NtZF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JbGVuID0gbWJveC0+Y21kLmxlbmd0aDsKLQotCWlmIChsZW4gJiYgdV9kYXRhICYmICFjb3B5X3RvX3VzZXIodV9kYXRhLCAodm9pZCopJm1ib3gtPmRhdGEsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi0vKioqKioqIE5ldHdvcmsgRGV2aWNlIEludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBvbmNlIGZvciBlYWNoIGludGVyZmFjZSwgZHVyaW5nIExpbnV4IG5ldHdvcmsKLSAqIGludGVyZmFjZSByZWdpc3RyYXRpb24uICBSZXR1cm5pbmcgYW55dGhpbmcgYnV0IHplcm8gd2lsbCBmYWlsIGludGVyZmFjZQotICogcmVnaXN0cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQotCS8qIEluaXRpYWxpemUgZGV2aWNlIGRyaXZlciBlbnRyeSBwb2ludHMgKi8KLQlkZXYtPm9wZW4JCT0gJmlmX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZpZl9jbG9zZTsKLQlkZXYtPmhhcmRfaGVhZGVyCT0gTlVMTDsKLQlkZXYtPnJlYnVpbGRfaGVhZGVyCT0gJmlmX3JlYnVpbGRfaGRyOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJmlmX3NlbmQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gJmlmX3N0YXRzOwotCWRldi0+dHhfdGltZW91dAkJPSAmaWZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvCT0gVFhfVElNRU9VVDsKLQkKLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFIHx8IGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQotCQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQkJaWYgKGNoYW4tPnRydWVfaWZfZW5jb2RpbmcpewotCQkJZGV2LT50eXBlIAkJPSBBUlBIUkRfRExDSTsgIC8qIFRoaXMgYnJlYWtzIHRjcGR1bXAgKi8KLQkJfWVsc2V7Ci0JCQlkZXYtPnR5cGUJCT0gQVJQSFJEX1BQUDsgCS8qIEFSUCBoL3cgdHlwZSAqLwotCQl9Ci0JCQotCQlkZXYtPmZsYWdzCQl8PSBJRkZfUE9JTlRPUE9JTlQ7Ci0JCWRldi0+ZmxhZ3MJCXw9IElGRl9OT0FSUDsKLQotCQkvKiBFbmFibGUgTXVsdGljYXN0IGFkZHJlc3NpbmcgKi8KLQkJaWYgKGNoYW4tPm1jID09IFdBTk9QVF9ZRVMpewotCQkJZGV2LT5mbGFncyAJfD0gSUZGX01VTFRJQ0FTVDsKLQkJfQotCi0JCWRldi0+bXR1CQk9IHdhbmRldi0+bXR1IC0gRlJfSEVBREVSX0xFTjsKLQkJLyogRm9yIGFuIEFQSSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHN0YWNrIHdpbGwgcGFzcwotCQkgICB0byB0aGUgZHJpdmVyIGlzIChkZXYtPm10dSArIGRldi0+aGFyZF9oZWFkZXJfbGVuKS4gU28sIGFkanVzdCB0aGUKLQkJICAgbXR1IHNvIHRoYXQgYSBmcmFtZSBvZiBtYXhpbXVtIHNpemUgY2FuIGJlIHRyYW5zbWl0dGVkIGJ5IHRoZSBBUEkuIAotCQkqLwotCQlpZihjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgewotCQkJZGV2LT5tdHUgKz0gKHNpemVvZihhcGlfdHhfaGRyX3QpIC0gRlJfSEVBREVSX0xFTik7Ci0JCX0KLQkJCi0JCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gRlJfSEVBREVSX0xFTjsvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JCWRldi0+YWRkcl9sZW4JCT0gMjsgCQkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwotCQkqKHVuc2lnbmVkIHNob3J0KilkZXYtPmRldl9hZGRyID0gaHRvbnMoY2hhbi0+ZGxjaSk7Ci0KLQkJLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggKi8KLSAgICAgICAgCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwotCi0JfWVsc2V7Ci0KLQkJLyogU2V0dXAgdGhlIGludGVyZmFjZSBmb3IgQnJpZGdpbmcgKi8KLQkJaW50IGh3X2FkZHI9MDsKLQkJZXRoZXJfc2V0dXAoZGV2KTsKLQkJCi0JCS8qIFVzZSBhIHJhbmRvbSBudW1iZXIgdG8gZ2VuZXJhdGUgdGhlIE1BQyBhZGRyZXNzICovCi0JCW1lbWNweShkZXYtPmRldl9hZGRyLCAiXHhGRVx4RkNceDAwXHgwMFx4MDBceDAwIiwgNik7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJmh3X2FkZHIsIHNpemVvZihod19hZGRyKSk7Ci0JCSooaW50ICopKGRldi0+ZGV2X2FkZHIgKyAyKSArPSBod19hZGRyOwotCX0KLQkJCi0JLyogSW5pdGlhbGl6ZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIChqdXN0IGZvciByZWZlcmVuY2UpICovCi0JZGV2LT5pcnEJPSB3YW5kZXYtPmlycTsKLQlkZXYtPmRtYQk9IHdhbmRldi0+ZG1hOwotCWRldi0+YmFzZV9hZGRyCT0gd2FuZGV2LT5pb3BvcnQ7Ci0JZGV2LT5tZW1fc3RhcnQJPSB3YW5kZXYtPm1hZGRyOwotCWRldi0+bWVtX2VuZAk9IHdhbmRldi0+bWFkZHIgKyB3YW5kZXYtPm1zaXplIC0gMTsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBvcGVuLCB0aGVuIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcHJldmVudCBtb2R1bGUgZnJvbSB1bmxvYWRpbmcgYnkgaW5jcmVtZW50aW5nIHVzZSBjb3VudAotICoKLSAqIFJldHVybiAwIGlmIE8uay4gb3IgZXJybm8uCi0gKi8KLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQkvKiBJbml0aWFsaXplIHRoZSB0YXNrIHF1ZXVlICovCi0JY2hhbi0+dHFfd29ya2luZz0wOwotCi0JSU5JVF9XT1JLKCZjaGFuLT5jb21tb24ud2FucGlwZV93b3JrLCAodm9pZCAqKWZyX2JoLCBkZXYpOwotCi0JLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgQkggY2lyY3VsYXIgYnVmZmVyICovCi0JY2hhbi0+YmhfaGVhZCA9IGttYWxsb2MoKHNpemVvZihiaF9kYXRhX3QpKk1BWF9CSF9CVUZGKSxHRlBfQVRPTUlDKTsKLQltZW1zZXQoY2hhbi0+YmhfaGVhZCwwLChzaXplb2YoYmhfZGF0YV90KSpNQVhfQkhfQlVGRikpOwotCWF0b21pY19zZXQoJmNoYW4tPmJoX2J1ZmZfdXNlZCwgMCk7Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0Jd2FucGlwZV9vcGVuKGNhcmQpOwotCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JY2hhbi0+cm91dGVyX3N0YXJ0X3RpbWUgPSB0di50dl9zZWM7Ci0JCi0JaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbmZpZ19kbGNpKSl7Ci0JCXRyaWdnZXJfY29uZmlnX2ZyIChjYXJkKTsKLQl9ZWxzZSBpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfUkVRVUVTVCl7Ci0JCXRyaWdnZXJfZnJfYXJwKGRldik7Ci0JfQotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xvc2UgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGxhc3Qgb3BlbiwgdGhlbiBkaXNhYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyByZXNldCBmbGFncy4KLSAqLwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGNoYW4tPmluYXJwID09IElOQVJQX0NPTkZJR1VSRUQpIHsKLQkJY2hhbi0+aW5hcnAgPSBJTkFSUF9SRVFVRVNUOwotCX0KLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQl3YW5waXBlX2Nsb3NlKGNhcmQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmUtYnVpbGQgbWVkaWEgaGVhZGVyLgotICoKLSAqIFJldHVybjoJMQlwaHlzaWNhbCBhZGRyZXNzIHJlc29sdmVkLgotICoJCTAJcGh5c2ljYWwgYWRkcmVzcyBub3QgcmVzb2x2ZWQKLSAqLwotc3RhdGljIGludCBpZl9yZWJ1aWxkX2hkciAoc3RydWN0IHNrX2J1ZmYqIHNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVidWlsZF9oZWFkZXIoKSBjYWxsZWQgZm9yIGludGVyZmFjZSAlcyFcbiIsCi0JCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSGFuZGxlIHRyYW5zbWl0IHRpbWVvdXQgZXZlbnQgZnJvbSBuZXRpZiB3YXRjaGRvZwotICovCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0JLyogSWYgb3VyIGRldmljZSBzdGF5cyBidXN5IGZvciBhdCBsZWFzdCA1IHNlY29uZHMgdGhlbiB3ZSB3aWxsCi0JICoga2ljayBzdGFydCB0aGUgZGV2aWNlIGJ5IG1ha2luZyBkZXYtPnRidXN5ID0gMC4gIFdlIGV4cGVjdAotCSAqIHRoYXQgb3VyIGRldmljZSBuZXZlciBzdGF5cyBidXN5IG1vcmUgdGhhbiA1IHNlY29uZHMuIFNvIHRoaXMgICAgICAgICAgICAgICAgIAotCSAqIGlzIG9ubHkgdXNlZCBhcyBhIGxhc3QgcmVzb3J0LgotCSAqLwotCi0JY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX3RidXN5Kys7Ci0JKytjaGFuLT5pZnN0YXRzLmNvbGxpc2lvbnM7Ci0KLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCBvbiAlc1xuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF90YnVzeV90aW1lb3V0Kys7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBhIHBhY2tldCBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikgdG8gYmxvY2sgYSB0aW1lci1iYXNlZAotICogICB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nLgotICogbyBzZXQgY3JpdGljYWwgZmxhZyB3aGVuIGFjY2Vzc2luZyBib2FyZC4KLSAqIG8gY2hlY2sgbGluayBzdGF0ZS4gSWYgbGluayBpcyBub3QgdXAsIHRoZW4gZHJvcCB0aGUgcGFja2V0LgotICogbyBjaGVjayBjaGFubmVsIHN0YXR1cy4gSWYgaXQncyBkb3duIHRoZW4gaW5pdGlhdGUgYSBjYWxsLgotICogbyBwYXNzIGEgcGFja2V0IHRvIGNvcnJlc3BvbmRpbmcgV0FOIGRldmljZS4KLSAqIG8gZnJlZSBzb2NrZXQgYnVmZmVyCi0gKgotICogUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogTm90ZXM6Ci0gKiAxLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVpdGhlciBieSB0aGUgcHJvdG9jb2wgc3RhY2sgb3IgYnkgdGhlICJuZXQKLSAqICAgIGJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogCi0gKiAyLiBVc2luZyBuZXRpZl9zdGFydF9xdWV1ZSgpIGFuZCBuZXRpZl9zdG9wX3F1ZXVlKCkKLSAqICAgIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlIHByb3RvY29sIHN0YWNrIAotICogICAgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqLwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0gICAgCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLSAgICAJc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLSAgICAgICAgaW50IGVycjsKLSAgICAJdW5zaWduZWQgY2hhciAqc2VuZHBhY2tldDsKLSAgICAJZnI1MDhfZmxhZ3NfdCogYWRwdHJfZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQlpbnQgdWRwX3R5cGU7Ci0JbG9uZyBkZWxheV90eF9xdWV1ZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0JdW5zaWduZWQgY2hhciBhdHRyID0gMDsKLQotCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9lbnRyeSsrOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQotICAgICAgICBpZiAoc2tiID09IE5VTEwpIHsgICAgICAgICAgICAgCi0JCS8qIGlmIHdlIGdldCBoZXJlLCBzb21lIGhpZ2hlciBsYXllciB0aGlua3Mgd2UndmUgbWlzc2VkIGFuCi0JCSAqIHR4LWRvbmUgaW50ZXJydXB0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVyZmFjZSAlcyBnb3Qga2lja2VkIVxuIiwgCi0JCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfc2tiX251bGwgKys7Ci0KLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBJZiBhIHBlcmlwaGVyYWwgdGFzayBpcyBydW5uaW5nIGp1c3QgZHJvcCBwYWNrZXRzICovCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwgJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQoKTogUGVyaXBoZXJhbCBydW5uaW5nIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFdlIG11c3Qgc2V0IHRoZSAndGJ1c3knIGZsYWcgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcGFja2V0IHF1ZXVlZCBmb3IKLQkgICB0cmFuc21pc3Npb24gaW4gdGhlIHRyYW5zbWl0IGludGVycnVwdCBoYW5kbGVyLiBIb3dldmVyLCB3ZSBtdXN0Ci0JICAgZW5zdXJlIHRoYXQgdGhlIHRyYW5zbWl0IGludGVycnVwdCBkb2VzIG5vdCByZXNldCB0aGUgJ3RidXN5JyBmbGFnCi0JICAganVzdCBiZWZvcmUgd2Ugc2V0IGl0LCBhcyB0aGlzIHdpbGwgcmVzdWx0IGluIGEgInRyYW5zbWl0IHRpbWVvdXQiLgotCSovCi0Jc2V0X2JpdChTRU5EX1RYSVJRX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLSAgICAgICAgaWYoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJY2hhbi0+dGlja19jb3VudGVyID0gamlmZmllczsKLSAJCWNsZWFyX2JpdChTRU5EX1RYSVJRX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuIDE7Ci0JfQotICAgICAgIAljbGVhcl9iaXQoU0VORF9UWElSUV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0gCi0JLyogTW92ZSB0aGUgaWZfaGVhZGVyKCkgY29kZSB0byBoZXJlLiBCeSBpbnNlcnRpbmcgZnJhbWUKLQkgKiByZWxheSBoZWFkZXIgaW4gaWZfaGVhZGVyKCkgd2Ugd291bGQgYnJlYWsgdGhlCi0JICogdGNwZHVtcCBhbmQgb3RoZXIgcGFja2V0IHNuaWZmZXJzICovCi0JY2hhbi0+ZnJfaGVhZGVyX2xlbiA9IHNldHVwX2ZyX2hlYWRlcihza2IsZGV2LGNoYW4tPmNvbW1vbi51c2VkYnkpOwotCWlmIChjaGFuLT5mcl9oZWFkZXJfbGVuIDwgMCApewotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzZW5kcGFja2V0ID0gc2tiLT5kYXRhOwotCi0JdWRwX3R5cGUgPSB1ZHBfcGt0X3R5cGUoc2tiLCBjYXJkKTsKLQotICAgICAgICBpZih1ZHBfdHlwZSAhPSBVRFBfSU5WQUxJRF9UWVBFKSB7Ci0JCWlmKHN0b3JlX3VkcF9tZ210X3BrdCh1ZHBfdHlwZSwgVURQX1BLVF9GUk1fU1RBQ0ssIGNhcmQsIHNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4tPmRsY2kpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHB0cl9mbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ZHBfdHlwZSA9PSBVRFBfRlBJUEVfVFlQRSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4tPmRydnN0YXRzX2lmX3NlbmQuCi0JCQkJCWlmX3NlbmRfUElQRV9yZXF1ZXN0ICsrOwotCQkJfQotICAgICAgICAgICAgICAgIH0KLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLy9GSVhNRTogY2FuIHdlIGRvIGJldHRlciB0aGFuIHNlbmRwYWNrZXRbMl0/Ci0gIAlpZiAoKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSkgJiYgKHNlbmRwYWNrZXRbMl0gPT0gMHg0NSkpIHsKLQkJCi0gICAgICAgICAgICAgICAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBzb3VyY2UgSVAgYWRkcmVzcyBpcyBhIGJyb2FkY2FzdCBvciAqLwotICAgICAgICAgICAgICAgIC8qIG11bHRpY2FzdCBJUCBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgaWYoY2hrX2JjYXN0X21jYXN0X2FkZHIoY2FyZCwgZGV2LCBza2IpKXsKLSAgICAgICAgICAgIAkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAgICAgICAgIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JCi0JLyogTG9jayB0aGUgUzUxNC9TNTA4IGNhcmQ6IFNNUCBTdXBwb3J0ZWQgKi8KLSAgICAJczUwOF9zNTE0X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfY3JpdGljYWxfbm9uX0lTUiArKzsKLQkJY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkICsrOwotCQlwcmludGsoS0VSTl9JTkZPICIlcyBDcml0aWNhbCBpbiBJRl9TRU5EOiBpZl9zZW5kKCkgYWxyZWFkeSBydW5uaW5nIVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWdvdG8gaWZfc2VuZF9zdGFydF9hbmRfZXhpdDsKLQl9Ci0JCi0JLyogQVBJIHBhY2tldCBjaGVjazogbWluaW11bSBwYWNrZXQgc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAKLQkgKiAxNiBieXRlIEFQSSBoZWFkZXIgKi8KLQlpZigoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpICYmIChza2ItPmxlbiA8PSBzaXplb2YoYXBpX3R4X2hkcl90KSkpIHsKLQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JICAgIAotCQkKLQkJZ290byBpZl9zZW5kX3N0YXJ0X2FuZF9leGl0OwotCi0gCX1lbHNlewotCQkvKiBEdXJpbmcgQVBJIHRyYW5zbWlzc2lvbiwgZ2V0IHJpZCBvZiB0aGUgQVBJIGhlYWRlciAqLwotCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpIHsKLQkJCWFwaV90eF9oZHJfdCogYXBpX3R4X2hkcjsKLQkJCWFwaV90eF9oZHIgPSAoYXBpX3R4X2hkcl90Kikmc2tiLT5kYXRhWzB4MDBdOwotCQkJYXR0ciA9IGFwaV90eF9oZHItPmF0dHI7Ci0JCQlza2JfcHVsbChza2Isc2l6ZW9mKGFwaV90eF9oZHJfdCkpOwotCQl9Ci0JfQotCi0JaWYgKGNhcmQtPndhbmRldi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKSB7Ci0JCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF93YW5fZGlzY29ubmVjdGVkICsrOwotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCi0JfSBlbHNlIGlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkgewotCQljaGFuLT5kcnZzdGF0c19pZl9zZW5kLmlmX3NlbmRfZGxjaV9kaXNjb25uZWN0ZWQgKys7Ci0KLQkJLyogVXBkYXRlIHRoZSBETENJIHN0YXRlIGluIHRpbWVyIGludGVycnVwdCAqLwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VQREFURV9TVEFURTsJCi0JCWFkcHRyX2ZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotCi0gICAgICAgIAkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQotCX0gZWxzZSBpZiAoIWlzX3R4X3JlYWR5KGNhcmQsIGNoYW4pKSB7Ci0JCS8qIE5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCBzdG9yZSBmb3IgZGVsYXllZCB0cmFuc21pdCAqLwotCQlpZiAoIXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KGRldiwgc2tiKSl7Ci0JCQlzZXRfYml0KDEsJmRlbGF5X3R4X3F1ZXVlZCk7Ci0JCX0KLQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX25vX2JmcnMrKzsKLQkJCi0JfSBlbHNlIGlmICghc2tiLT5wcm90b2NvbCkgewotCQkvKiBObyBwcm90b2NvbHMgZHJvcCBwYWNrZXQgKi8KLQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX3Byb3RvY29sX2Vycm9yICsrOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9lcnJvcnM7Ci0JCi0JfSBlbHNlIGlmICh0ZXN0X2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCS8qIFdlIGFyZSB0cnlpbmcgdG8gc2VuZCBhbiBBUlAgUGFja2V0LCBibG9jayBJUCBkYXRhIHVudGlsCi0JCSAqIEFSUCBpcyBzZW50ICovCi0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCi0JfSBlbHNlIHsKLQkJLy9GSVhNRTogSVBYIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgRnJhbWUgUmVsYXkgPwotCQlpZigoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKSAmJgotCQkgCXNlbmRwYWNrZXRbMV0gPT0gMHgwMCAmJgotCQkgICAgCXNlbmRwYWNrZXRbMl0gPT0gMHg4MCAmJgotCQkgICAgCXNlbmRwYWNrZXRbNl0gPT0gMHg4MSAmJgotCQkgICAgCXNlbmRwYWNrZXRbN10gPT0gMHgzNykgewotCQkJCi0JCQlpZiggY2hhbi0+ZW5hYmxlX0lQWCApIHsKLQkJCQlzd2l0Y2hfbmV0X251bWJlcnMoc2VuZHBhY2tldCwgCi0JCQkJCQljaGFuLT5uZXR3b3JrX251bWJlciwgMCk7Ci0JCQl9IGVsc2UgewotCQkJCS8vRklYTUU6IFRha2UgdGhpcyBvdXQgd2hlbiBJUFggaXMgZml4ZWQgCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFdBUk5JTkc6IFVuc3VwcG9ydGVkIElQWCBkYXRhIGluIHNlbmQsIHBhY2tldCBkcm9wcGVkXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJCQotCQl9ZWxzZXsKLSAgICAgICAgCQllcnIgPSBmcl9zZW5kX2RhdGFfaGVhZGVyKGNhcmQsIGNoYW4tPmRsY2ksIGF0dHIsIHNrYi0+bGVuLCBza2ItPmRhdGEsIGNoYW4tPmZyX2hlYWRlcl9sZW4pOwotCQkJaWYgKGVycikgewotCQkJCXN3aXRjaChlcnIpIHsKLQkJCQljYXNlIEZSUkVTX0NJUl9PVkVSRkxPVzoKLQkJCQljYXNlIEZSUkVTX0JVRkZFUl9PVkVSRkxPVzoKLSAgICAgICAgICAgICAgICAJCQlpZiAoIXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KGRldiwgc2tiKSl7Ci0JCQkJCQlzZXRfYml0KDEsJmRlbGF5X3R4X3F1ZXVlZCk7Ci0JCQkJCX0KLSAgICAgICAgICAgCQkJCWNoYW4tPmRydnN0YXRzX2lmX3NlbmQuCi0JCQkJCQlpZl9zZW5kX2FkcHRyX2JmcnNfZnVsbCArKzsKLQkJCQkJYnJlYWs7Ci0JCQkJCQotCQkJCWNhc2UgRlJSRVNfVE9PX0xPTkc6Ci0JCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJCSIlczogRXJyb3I6IEZyYW1lIHRvbyBsb25nLCB0cmFuc21pc3Npb24gZmFpbGVkICVpXG4iLAotCQkJCQkJIGNhcmQtPmRldm5hbWUsICh1bnNpZ25lZCBpbnQpc2tiLT5sZW4pOwotCQkJCQl9Ci0JCQkJCS8qIERyb3AgZG93biB0byBkZWZhdWx0ICovCi0JCQkJZGVmYXVsdDoKLQkJCQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC4KLQkJCQkJCWlmX3NlbmRfZGxjaV9kaXNjb25uZWN0ZWQgKys7Ci0gICAgICAgIAkJCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLSAgICAgICAgCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC4KLQkJCQkJaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyKys7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X3BhY2tldHM7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJCQkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQkJfQotCQl9Ci0JfQotCi1pZl9zZW5kX3N0YXJ0X2FuZF9leGl0OgotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkKLQkvKiBJZiB3ZSBxdWV1ZWQgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uLCB3ZSBtdXN0IG5vdAotCSAqIGRlYWxsb2NhdGUgaXQuIFRoZSBwYWNrZXQgaXMgdW5saW5rZWQgZnJvbSB0aGUgSVAgc3RhY2sKLQkgKiBub3QgY29waWVkLiBUaGVyZWZvcmUsIHdlIG11c3Qga2VlcCB0aGUgb3JpZ2luYWwgcGFja2V0ICovCi0JaWYgKCF0ZXN0X2JpdCgxLCZkZWxheV90eF9xdWV1ZWQpKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLQkJYWRwdHJfZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVFhSRFk7Ci0JCWNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcgKys7Ci0JfQotCi0gICAgICAgIGNsZWFyX2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQotCXM1MDhfczUxNF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXR1cCBzbyB0aGF0IGEgZnJhbWUgY2FuIGJlIHRyYW5zbWl0dGVkIG9uIHRoZSBvY2N1cnJlbmNlIG9mIGEgdHJhbnNtaXQKLSAqIGludGVycnVwdC4KLSAqLwotc3RhdGljIGludCBzZXR1cF9mb3JfZGVsYXllZF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0gICAgICAgIGZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLSAgICAgICAgc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLSAgICAgICAgZnJfZGxjaV9pbnRlcmZhY2VfdCogZGxjaV9pbnRlcmZhY2U7Ci0JaW50IGxlbiA9IHNrYi0+bGVuOwotCi0JLyogQ2hlY2sgdGhhdCB0aGUgZGxjaSBpcyBwcm9wZXJseSBjb25maWd1cmVkLAotICAgICAgICAgKiBiZWZvcmUgdXNpbmcgdHggaW50ZXJydXB0ICovCi0JaWYgKCFjaGFuLT5kbGNpX2ludF9pbnRlcmZhY2UpewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRVJST1Igb24gRExDSSAlaTogTm90IGNvbmZpZ3VyZWQgcHJvcGVybHkgIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXNcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQkJCi0JZGxjaV9pbnRlcmZhY2UgPSBjaGFuLT5kbGNpX2ludF9pbnRlcmZhY2U7Ci0KLSAgICAgICAgaWYoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJpZyBtZXNzIGluIHNldHVwX2Zvcl9kZWwuLi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotCWlmKGxlbiA+IEZSX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FKSB7Ci0JCS8vRklYTUU6IGluY3JlbWVudCBzb21lIHN0YXRpc3RpYyAqLwotCQlyZXR1cm4gMTsKLQl9Ci0KLSAgICAgICAgY2hhbi0+dHJhbnNtaXRfbGVuZ3RoID0gbGVuOwotCWNoYW4tPmRlbGF5X3NrYiA9IHNrYjsKLSAgICAgICAgCi0gICAgICAgIGRsY2lfaW50ZXJmYWNlLT5nZW5faW50ZXJydXB0IHw9IEZSX0lOVFJfVFhSRFk7Ci0gICAgICAgIGRsY2lfaW50ZXJmYWNlLT5wYWNrZXRfbGVuZ3RoID0gbGVuOwotCi0JLyogVHVybiBvbiBUWCBpbnRlcnJ1cHQgYXQgdGhlIGVuZCBvZiBpZl9zZW5kICovCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayB0byBzZWUgaWYgdGhlIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCBjb250YWlucyBhIGJyb2FkY2FzdCBvcgotICogbXVsdGljYXN0IHNvdXJjZSBJUCBhZGRyZXNzLgotICogUmV0dXJuIDAgaWYgbm90IGJyb2FkY2FzdC9tdWx0aWNhc3QgYWRkcmVzcywgb3RoZXJ3aXNlIHJldHVybiAxLgotICovCi0KLXN0YXRpYyBpbnQgY2hrX2JjYXN0X21jYXN0X2FkZHIoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotICAgICAgICB1MzIgc3JjX2lwX2FkZHI7Ci0gICAgICAgIHUzMiBicm9hZGNhc3RfaXBfYWRkciA9IDA7Ci0gICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLSAgICAgICAgZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotIAotICAgICAgICAvKiByZWFkIHRoZSBJUCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBvdXRnb2luZyBwYWNrZXQgKi8KLSAgICAgICAgc3JjX2lwX2FkZHIgPSAqKHUzMiAqKShza2ItPmRhdGEgKyAxNCk7Ci0KLSAgICAgICAgLyogcmVhZCB0aGUgSVAgYnJvYWRjYXN0IGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UgKi8KLSAgICAgICAgaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0gICAgICAgIGlmKGluX2RldiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhPSBpbl9kZXYtPmlmYV9saXN0OwotICAgICAgICAgICAgICAgIGlmKGlmYSAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0X2lwX2FkZHIgPSBpZmEtPmlmYV9icm9hZGNhc3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBCcm9hZGNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpICYmIChzcmNfaXBfYWRkciA9PSBicm9hZGNhc3RfaXBfYWRkcikpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6IEJyb2FkY2FzdCBTb3VyY2UgQWRkcmVzcyBzaWxlbnRseSBkaXNjYXJkZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNoZWNrIGlmIHRoZSBJUCBTb3VyY2UgQWRkcmVzcyBpcyBhIE11bHRpY2FzdCBhZGRyZXNzICovCi0gICAgICAgIGlmKChjaGFuLT5tYyA9PSBXQU5PUFRfTk8pICYmIChudG9obChzcmNfaXBfYWRkcikgPj0gMHhFMDAwMDAwMSkgJiYKLSAgICAgICAgICAgICAgICAobnRvaGwoc3JjX2lwX2FkZHIpIDw9IDB4RkZGRkZGRkUpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBNdWx0aWNhc3QgU291cmNlIEFkZHJlc3Mgc2lsZW50bHkgZGlzY2FyZGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApIAotewotCXVuc2lnbmVkIHNob3J0IGxlbiwgdWRwX2xlbmd0aCwgdGVtcCwgaXBfbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgaXBfdGVtcDsKLQlpbnQgZXZlbl9ib3VuZCA9IDA7Ci0KLSAgCi0JZnJfdWRwX3BrdF90ICpmcl91ZHBfcGt0ID0gKGZyX3VkcF9wa3RfdCAqKWRhdGE7IAotCi0JLyogU2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KLQlsZW4gPSAvL3NpemVvZihmcl9lbmNhcF9oZHJfdCkrCi0JICAgICAgc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBtYm94X2xlbjsKLSAKLQotCS8qIGZpbGwgaW4gVURQIHJlcGx5ICovCi0JZnJfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsKLSAgCi0JLyogZmlsbCBpbiBVRFAgbGVuZ3RoICovCi0JdWRwX2xlbmd0aCA9IHNpemVvZih1ZHBfcGt0X3QpKyAKLQkJICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkJICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCQkgICAgIG1ib3hfbGVuOyAKLQotCi0JLyogcHV0IGl0IG9uIGFuIGV2ZW4gYm91bmRhcnkgKi8KLQlpZiAoIHVkcF9sZW5ndGggJiAweDAwMDEgKSB7Ci0JCXVkcF9sZW5ndGggKz0gMTsKLQkJbGVuICs9IDE7Ci0JCWV2ZW5fYm91bmQgPSAxOwotCX0KLQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2xlbmd0aCA9IHRlbXA7Ci0JIAotCS8qIHN3YXAgVURQIHBvcnRzICovCi0JdGVtcCA9IGZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0ID0gCi0JCQlmcl91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydDsgCi0JZnJfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0KLQotCS8qIGFkZCBVRFAgcHNldWRvIGhlYWRlciAqLwotCXRlbXAgPSAweDExMDA7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKGZyX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCkpID0gdGVtcDsJCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKGZyX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCsyKSkgPSB0ZW1wOwotCQkgCi0JLyogY2FsY3VsYXRlIFVEUCBjaGVja3N1bSAqLwotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gMDsKLQotCWZyX3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gCi0JCWNhbGNfY2hlY2tzdW0oJmRhdGFbVURQX09GRlNFVC8qK3NpemVvZihmcl9lbmNhcF9oZHJfdCkqL10sCi0JCQkgICAgICB1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSB1ZHBfbGVuZ3RoICsgc2l6ZW9mKGlwX3BrdF90KTsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0JZnJfdWRwX3BrdC0+aXBfcGt0LnRvdGFsX2xlbmd0aCA9IHRlbXA7Ci0gIAotCS8qIHN3YXAgSVAgYWRkcmVzc2VzICovCi0JaXBfdGVtcCA9IGZyX3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQlmcl91ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3MgPSAKLQkJCQlmcl91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3M7Ci0JZnJfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCQkgCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCWZyX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAwOwotCWZyX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSAKLQkJY2FsY19jaGVja3N1bSgmZGF0YVsvKnNpemVvZihmcl9lbmNhcF9oZHJfdCkqLzBdLAotCQkgICAgICAJICAgICAgc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLS8qCi0gICBJZiBpbmNvbWluZyBpcyAwIChvdXRnb2luZyktIGlmIHRoZSBuZXQgbnVtYmVycyBpcyBvdXJzIG1ha2UgaXQgMAotICAgaWYgaW5jb21pbmcgaXMgMSAtIGlmIHRoZSBuZXQgbnVtYmVyIGlzIDAgbWFrZSBpdCBvdXJzIAotCi0qLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIGNoYXIgaW5jb21pbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBwbmV0d29ya19udW1iZXI7Ci0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbMTRdIDw8IDI0KSArIAotCQkJICAoc2VuZHBhY2tldFsxNV0gPDwgMTYpICsgKHNlbmRwYWNrZXRbMTZdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbMTddKTsKLQotCWlmICghaW5jb21pbmcpIHsKLQkJLyogSWYgdGhlIGRlc3RpbmF0aW9uIG5ldHdvcmsgbnVtYmVyIGlzIG91cnMsIG1ha2UgaXQgMCAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IG5ldHdvcmtfbnVtYmVyKSB7Ci0JCQlzZW5kcGFja2V0WzE0XSA9IHNlbmRwYWNrZXRbMTVdID0gc2VuZHBhY2tldFsxNl0gPSAKLQkJCQkJIHNlbmRwYWNrZXRbMTddID0gMHgwMDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZSBpbmNvbWluZyBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDApIHsKLQkJCXNlbmRwYWNrZXRbMTRdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbMTVdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFsxNl0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbMTddID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLQotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzI2XSA8PCAyNCkgKyAKLQkJCSAgKHNlbmRwYWNrZXRbMjddIDw8IDE2KSArIChzZW5kcGFja2V0WzI4XSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzI5XSk7Ci0KLQlpZiggIWluY29taW5nICkgewotCQkvKiBJZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgb3VycywgbWFrZSBpdCAwICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbMjZdID0gc2VuZHBhY2tldFsyN10gPSBzZW5kcGFja2V0WzI4XSA9IAotCQkJCQkgc2VuZHBhY2tldFsyOV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlIHNvdXJjZSBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDAgKSB7Ci0JCQlzZW5kcGFja2V0WzI2XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzI3XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbMjhdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzI5XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwMDBGRik7Ci0JCX0KLQl9Ci19IC8qIHN3aXRjaF9uZXRfbnVtYmVycyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBldGhlcm5ldC1zdHlsZSBpbnRlcmZhY2Ugc3RhdGlzdGljcy4KLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljcy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQkKLQlpZihjaGFuID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuICZjaGFuLT5pZnN0YXRzOwotfQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBmcl9pc3I6CVM1MDggZnJhbWUgcmVsYXkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUZyYW1lIHJlbGF5IG1haW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGUuIFRoaXMKLSAqICAgICAgZnVuY3Rpb24gY2hlY2sgdGhlIGludGVycnVwdCB0eXBlIGFuZCB0YWtlcwotICogICAgICB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBmcl9pc3IgKHNkbGFfdCogY2FyZCkKLXsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCWNoYXIgKnB0ciA9ICZmbGFncy0+aWZsYWc7Ci0JaW50IGksZXJyOwotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0KLQkvKiBUaGlzIGZsYWcgcHJldmVudHMgbmVzdGluZyBvZiBpbnRlcnJ1cHRzLiAgU2VlIHNkbGFfaXNyKCkgcm91dGluZQotICAgICAgICAgKiBpbiBzZGxhbWFpbi5jLiAgKi8KLQljYXJkLT5pbl9pc3IgPSAxOwotCQotCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfZW50cnk7Ci0KLQotCS8qIEFsbCBwZXJpcGhlcmFsIChjb25maWd1cmFpdG9uLCByZS1jb25maWd1cmF0aW9uKSBldmVudHMKLQkgKiB0YWtlIHByZXNpZGVuY2Ugb3ZlciB0aGUgSVNSLiAgVGh1cywgcmV0cmlnZ2VyICovCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfYWxyZWFkeV9jcml0aWNhbDsKLQkJZ290byBmcl9pc3JfZXhpdDsKLQl9Ci0JCi0gICAgICAgIGlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KSB7Ci0JCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIHdoaWxlIGluIElTUjogSWYgU2VuZCBSdW5uaW5nIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZGV2bmFtZSk7Ci0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX2FscmVhZHlfY3JpdGljYWw7Ci0JCQlnb3RvIGZyX2lzcl9leGl0OwotCQl9Ci0JfQotCi0Jc3dpdGNoIChmbGFncy0+aWZsYWcpIHsKLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9SWFJEWTogIC8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0JICAgIAkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9yeDsKLSAgICAgICAgICAJCXJ4X2ludHIoY2FyZCk7Ci0gICAgICAgICAgICAJCWJyZWFrOwotCi0KLSAgICAgICAgICAgICAgICBjYXNlIEZSX0lOVFJfVFhSRFk6ICAvKiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkgICAgCQkrKyBjYXJkLT5zdGF0aXN0aWNzLmlzcl90eDsgCi0JCQl0eF9pbnRyKGNhcmQpOyAKLSAgICAgICAgICAgIAkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEZSX0lOVFJfUkVBRFk6ICAJCi0JICAgIAkJSW50cl90ZXN0X2NvdW50ZXIrKzsKLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfaW50cl90ZXN0OwotCSAgICAJCWJyZWFrOwkKLQotICAgICAgICAgICAgICAgIGNhc2UgRlJfSU5UUl9ETEM6IC8qIEV2ZW50IGludGVycnVwdCBvY2N1cnJlZCAqLwotCQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX1NUQVRVUzsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVycikKLQkJCQlmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpOwotCQkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEZSX0lOVFJfVElNRVI6ICAvKiBUaW1lciBpbnRlcnJ1cHQgKi8KLQkJCXRpbWVyX2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQkKLQkJZGVmYXVsdDoKLQkgICAgCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3NwdXJpb3VzOwotICAgICAgICAgICAgCQlzcHVyX2ludHIoY2FyZCk7Ci0JICAgIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVycnVwdCBUeXBlIDB4JTAyWCFcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIGZsYWdzLT5pZmxhZyk7Ci0JICAgIAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElEIEJ5dGVzID0gIixjYXJkLT5kZXZuYW1lKTsKLSAJICAgIAkJZm9yKGkgPSAwOyBpIDwgODsgaSArKykKLQkJCQlwcmludGsoS0VSTl9JTkZPICIweCUwMlggIiwgKihwdHIgKyAweDI4ICsgaSkpOwotCSAgIAkgCXByaW50ayhLRVJOX0lORk8gIlxuIik7CQotICAgICAgICAgICAgCi0JCQlicmVhazsKLSAgICAJfQotCi1mcl9pc3JfZXhpdDoKLQkKLQljYXJkLT5pbl9pc3IgPSAwOwotCWZsYWdzLT5pZmxhZyA9IDA7Ci0JcmV0dXJuOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogcnhfaW50cglSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICoKLSAqIERlc2NyaXB0aW9uCi0gKiAJVXBvbiByZWNlaXZlaW5nIGFuIGludGVycnVwdDogCi0gKgkxLiBDaGVjayB0aGF0IHRoZSBmaXJtd2FyZSBpcyBpbiBzeW5jIHdpdGggCi0gKiAgICAgCSAgIHRoZSBkcml2ZXIuIAotICogICAgICAyLiBGaW5kIGFuIGFwcHJvcHJpYXRlIG5ldHdvcmsgaW50ZXJmYWNlCi0gKiAgICAgICAgIGJhc2VkIG9uIHRoZSByZWNlaXZlZCBkbGNpIG51bWJlci4KLSAqCTMuIENoZWNrIHRoYXQgdGhlIG5ldG93cmsgaW50ZXJmYWNlIGV4aXN0cwotICogICAgICAgICBhbmQgdGhhdCBpdCdzIHNldHVwIHByb3Blcmx5LgotICoJNC4gQ29weSB0aGUgZGF0YSBpbnRvIGFuIHNrYiBidWZmZXIuCi0gKgk1LiBDaGVjayB0aGUgcGFja2V0IHR5cGUgYW5kIHRha2UKLSAqICAgICAgICAgYXBwcm9wcmlhdGUgYWN0b246IFVQRCwgQVBJLCBBUlAgb3IgRGF0YS4KLSAqLwotCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0JZnJfcnhfYnVmX2N0bF90KiBmcmJ1ZiA9IGNhcmQtPnJ4bWI7Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQlmcl9jaGFubmVsX3QqIGNoYW47Ci0JY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlzdHJ1Y3Qgc2tfYnVmZiogc2tiOwotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0Jdm9pZCogYnVmOwotCXVuc2lnbmVkIGRsY2ksIGxlbiwgb2ZmcywgbGVuX2luY2xfaGRyOwotCWludCBpLCB1ZHBfdHlwZTsJCi0KLQotCS8qIENoZWNrIHRoYXQgZmlybXdhcmUgYnVmZmVycyBhcmUgaW4gc3luYyAqLwotCWlmIChmcmJ1Zi0+ZmxhZyAhPSAweDAxKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogY29ycnVwdGVkIFJ4IGJ1ZmZlciBAIDB4JVgsIGZsYWcgPSAweCUwMlghXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsICh1bnNpZ25lZClmcmJ1ZiwgZnJidWYtPmZsYWcpOwotICAgICAgCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJRCBCeXRlcyA9ICIsY2FyZC0+ZGV2bmFtZSk7Ci0gCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJYICIsICoocHRyICsgMHgyOCArIGkpKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQkKLQkJKytjYXJkLT5zdGF0aXN0aWNzLnJ4X2ludHJfY29ycnVwdF9yeF9iZnI7Ci0KLQkJLyogQnVnIEZpeDogTWFyIDYgMjAwMAotICAgICAgICAgICAgICAgICAqIElmIHdlIGdldCBhIGNvcnJ1cHRlZCBtYWlsYm94LCBpdCBtZWFucyB0aGF0IGRyaXZlciAKLSAgICAgICAgICAgICAgICAgKiBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBmaXJtd2FyZS4gVGhlcmUgaXMgbm8gcmVjb3ZlcnkuCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZG9uJ3QgdHVybiBvZmYgYWxsIGludGVycnVwdHMgZm9yIHRoaXMgY2FyZAotICAgICAgICAgICAgICAgICAqIHRoZSBtYWNoaW5lIHdpbGwgY3Jhc2guIAotICAgICAgICAgICAgICAgICAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgcm91dGVyIGZhaWx1cmUgLi4uISEhXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgIVxuIik7Ci0JCWZyX3NldF9pbnRyX21vZGUoY2FyZCwgMCwgMCwgMCk7CQotCQlyZXR1cm47Ci0JfQotCi0JbGVuICA9IGZyYnVmLT5sZW5ndGg7Ci0JZGxjaSA9IGZyYnVmLT5kbGNpOwotCW9mZnMgPSBmcmJ1Zi0+b2Zmc2V0OwotCi0JLyogRmluZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZm9yIHRoaXMgcGFja2V0ICovCi0JZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsIGRsY2kpOwotICAgCi0KLQkvKiBDaGVjayB0aGF0IHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBhY3RpdmUgYW5kCi0gICAgICAgICAqIHByb3Blcmx5IHNldHVwICovCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0gICAJCWlmKCBuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgZGF0YSBvbiB1bmNvbmZpZ3VyZWQgRExDSSAlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lLCBkbGNpKTsKLQkJfQotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOyAKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9kb25lOwotCX0KLQotCWlmICgoY2hhbiA9IGRldi0+cHJpdikgPT0gTlVMTCl7Ci0JCWlmKCBuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgZGF0YSBvbiB1bmNvbmZpZ3VyZWQgRExDSSAlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lLCBkbGNpKTsKLQkJfQotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOyAKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9kb25lOwotCX0KLQotCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsgCi0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSB8fCAoc2tiID09IE5VTEwpKXsKLQotCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkKLQkJaWYoc2tiID09IE5VTEwpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsgCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkJIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLCAKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQkJY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX25vX3NvY2tldCArKzsKLQkJfSAKLQotCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSl7Ci0JCQljaGFuLT5kcnZzdGF0c19yeF9pbnRyLgotCQkJCXJ4X2ludHJfZGV2X25vdF9zdGFydGVkICsrOwotCQkJaWYgKHNrYil7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCX0KLQkJfQotCQlnb3RvIHJ4X2RvbmU7Ci0JfQotCi0JLyogQ29weSBkYXRhIGZyb20gdGhlIGJvYXJkIGludG8gdGhlIHNvY2tldCBidWZmZXIgKi8KLQlpZiAoKG9mZnMgKyBsZW4pID4gY2FyZC0+dS5mLnJ4X3RvcCArIDEpIHsKLQkJdW5zaWduZWQgdG1wID0gY2FyZC0+dS5mLnJ4X3RvcCAtIG9mZnMgKyAxOwotCi0JCWJ1ZiA9IHNrYl9wdXQoc2tiLCB0bXApOwotCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBvZmZzLCBidWYsIHRtcCk7Ci0JCW9mZnMgPSBjYXJkLT51LmYucnhfYmFzZTsKLQkJbGVuIC09IHRtcDsKLQl9Ci0KLQlidWYgPSBza2JfcHV0KHNrYiwgbGVuKTsKLQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBvZmZzLCBidWYsIGxlbik7Ci0KLQotCS8qIFdlIGdvdCB0aGUgcGFja2V0IGZyb20gdGhlIGJhcmQuIAotICAgICAgICAgKiBDaGVjayB0aGUgcGFja2V0IHR5cGUgYW5kIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uICovCi0KLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZSggc2tiLCBjYXJkICk7Ci0KLQlpZih1ZHBfdHlwZSAhPSBVRFBfSU5WQUxJRF9UWVBFKSB7Ci0KLQkJLyogVURQIERlYnVnIHBhY2tldCByZWNlaXZlZCwgc3RvcmUgdGhlCi0JCSAqIHBhY2tldCBhbmQgaGFuZGxlIGl0IGluIHRpbWVyIGludGVycnVwdCAqLwotCi0JCXNrYl9wdWxsKHNrYiwgMSk7IAotCQlpZiAod2Fucm91dGVyX3R5cGVfdHJhbnMoc2tiLCBkZXYpKXsgCi0JCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QodWRwX3R5cGUsVURQX1BLVF9GUk1fTkVUV09SSyxjYXJkLHNrYixkbGNpKSl7Ci0KLQkJCQlmbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLQotCQkJCWlmICh1ZHBfdHlwZSA9PSBVRFBfRlBJUEVfVFlQRSl7Ci0JCQkJCSsrY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX1BJUEVfcmVxdWVzdDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX1lbHNlIGlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgewotCi0JCS8qIFdlIGFyZSBpbiBBUEkgbW9kZS4gCi0gICAgICAgICAgICAgICAgICogQWRkIGFuIEFQSSBoZWFkZXIgdG8gdGhlIFJBVyBwYWNrZXQKLSAgICAgICAgICAgICAgICAgKiBhbmQgcXVldWUgaXQgaW50byBhIGNpcmN1bGFyIGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgKiBUaGVuIGtpY2sgdGhlIGZyX2JoKCkgYm90dG9tIGhhbGYgaGFuZGxlciAqLwotCi0JCWFwaV9yeF9oZHJfdCogYXBpX3J4X2hkcjsKLQkJY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2sgKys7Ci0JCWNoYW4tPmlmc3RhdHMucnhfcGFja2V0cyArKzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHMgKys7Ci0KLQkJY2hhbi0+aWZzdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKGFwaV9yeF9oZHJfdCkpOwotCQlhcGlfcnhfaGRyID0gKGFwaV9yeF9oZHJfdCopJnNrYi0+ZGF0YVsweDAwXTsKLQkJYXBpX3J4X2hkci0+YXR0ciA9IGZyYnVmLT5hdHRyOwotCQlhcGlfcnhfaGRyLT50aW1lX3N0YW1wID0gZnJidWYtPnRtc3RhbXA7Ci0KLQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKLQkJc2tiLT5tYWMucmF3ICA9IHNrYi0+ZGF0YTsKLQkJc2tiLT5kZXYgICAgICA9IGRldjsKLQkJc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfREFUQTsKLQotCQliaF9lbnF1ZXVlKGRldiwgc2tiKTsKLQotCQl0cmlnZ2VyX2ZyX2JoKGNoYW4pOwotCi0JfWVsc2UgaWYgKGhhbmRsZV9JUFhXQU4oc2tiLT5kYXRhLGNoYW4tPm5hbWUsY2hhbi0+ZW5hYmxlX0lQWCwgY2hhbi0+bmV0d29ya19udW1iZXIpKXsKLQotCQkvL0ZJWE1FOiBGcmFtZSBSZWxheSBJUFggaXMgbm90IHN1cHBvcnRlZCwgWWV0ICEKLQkJLy9pZiAoY2hhbi0+ZW5hYmxlX0lQWCkgewotCQkvLwlmcl9zZW5kKGNhcmQsIGRsY2ksIDAsIHNrYi0+bGVuLHNrYi0+ZGF0YSk7Ci0JCS8vfQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JfSBlbHNlIGlmIChpc19hcnAoc2tiLT5kYXRhKSkgewotCi0JCS8qIEFSUCBzdXBwb3J0IGVuYWJsZWQgTWFyIDE2IDIwMDAgCi0JCSAqIFByb2Nlc3MgaW5jb21pbmcgQVJQIHJlcGx5L3JlcXVlc3QsIHNldHVwCi0JCSAqIGR5bmFtaWMgcm91dGVzLiAqLyAKLQotCQlpZiAocHJvY2Vzc19BUlAoKGFycGhkcl8xNDkwX3QgKilza2ItPmRhdGEsIGNhcmQsIGRldikpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpeyAgCi0JCQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkJICAgIiVzOiBFcnJvciBwcm9jZXNzaW5nIEFSUCBQYWNrZXQuXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCX0KLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCX0gZWxzZSBpZiAoc2tiLT5kYXRhWzBdICE9IDB4MDMpIHsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vbiBJRVRGIHBhY2tldCBkaXNjYXJkZWQuXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JfSBlbHNlIHsKLQotCQlsZW5faW5jbF9oZHIgPSBza2ItPmxlbjsKLQkJLyogRGVjYXBzdWxhdGUgcGFja2V0IGFuZCBwYXNzIGl0IHVwIHRoZQotCQkgICBwcm90b2NvbCBzdGFjayAqLwotCQlza2ItPmRldiA9IGRldjsKLQkJCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEJSSURHRSB8fCBjaGFuLT5jb21tb24udXNlZGJ5ID09IEJSSURHRV9OT0RFKXsKLQkJCi0JCQkvKiBNYWtlIHN1cmUgaXQncyBhbiBFdGhlcm5ldCBmcmFtZSwgb3RoZXJ3aXNlIGRyb3AgaXQgKi8KLQkJCWlmICghbWVtY21wKHNrYi0+ZGF0YSwgIlx4MDNceDAwXHg4MFx4MDBceDgwXHhDMlx4MDBceDA3IiwgOCkpIHsKLQkJCQlza2JfcHVsbChza2IsIDgpOwotCQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7Ci0JCQl9ZWxzZXsKLQkJCQkrK2NoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZXJyb3JzOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Vycm9yczsKLQkJCQlnb3RvIHJ4X2RvbmU7Ci0JCQl9Ci0JCX1lbHNlewotCQkKLQkJCS8qIHJlbW92ZSBoYXJkd2FyZSBoZWFkZXIgKi8KLQkJCWJ1ZiA9IHNrYl9wdWxsKHNrYiwgMSk7IAotCQkJCi0JCQlpZiAoIXdhbnJvdXRlcl90eXBlX3RyYW5zKHNrYiwgZGV2KSkgewotCQkJCQotCQkJCS8qIGNhbid0IGRlY2Fwc3VsYXRlIHBhY2tldCAqLwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQkJCQkrK2NoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZXJyb3JzOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Vycm9yczsKLQkJCQlnb3RvIHJ4X2RvbmU7CQotCQkJfQotCQkJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCQl9IAotCQkKLQotCQkvKiBTZW5kIGEgcGFja2V0IHVwIHRoZSBJUCBzdGFjayAqLwotCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCW5ldGlmX3J4KHNrYik7Ci0JCSsrY2hhbi0+ZHJ2c3RhdHNfcnhfaW50ci5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci0JCSsrY2hhbi0+aWZzdGF0cy5yeF9wYWNrZXRzOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9wYWNrZXRzOwotCi0JCWNoYW4tPmlmc3RhdHMucnhfYnl0ZXMgKz0gbGVuX2luY2xfaGRyOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfYnl0ZXMgKz0gbGVuX2luY2xfaGRyOwotCX0KLQotcnhfZG9uZToKLQotICAgICAgIAkvKiBSZWxlYXNlIGJ1ZmZlciBlbGVtZW50IGFuZCBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9uZSAqLyAKLSAgICAgICAJZnJidWYtPmZsYWcgPSAwOwotCWNhcmQtPnJ4bWIgPSArK2ZyYnVmOwotCWlmICgodm9pZCopZnJidWYgPiBjYXJkLT51LmYucnhtYl9sYXN0KQotCQljYXJkLT5yeG1iID0gY2FyZC0+dS5mLnJ4bWJfYmFzZTsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHhfaW50cjoJVHJhbnNtaXQgaW50ZXJydXB0IGhhbmRsZXIuCi0gKgotICogUmF0aW9uYWxlOgotICogICAgICBJZiB0aGUgYm9hcmQgaXMgYnVzeSB0cmFuc21pdHRpbmcsIGlmX3NlbmQoKSB3aWxsCi0gKiAgICAgIGJ1ZmZlcnMgYSBzaW5nbGUgcGFja2V0IGFuZCB0dXJuIG9uCi0gKiAgICAgIHRoZSB0eCBpbnRlcnJ1cHQuIFR4IGludGVycnVwdCB3aWxsIGJlIGNhbGxlZAotICogICAgICBieSB0aGUgYm9hcmQsIG9uY2UgdGhlIGZpcm13YXJlIGNhbiBzZW5kIG1vcmUKLSAqICAgICAgZGF0YS4gVGh1cywgbm8gcG9sbGluZyBpcyByZXF1aXJlZC4JIAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVHggaW50ZXJydXB0IGlzIGNhbGxlZCBmb3IgZWFjaCAKLSAqICAgICAgY29uZmlndXJlZCBkbGNpIGNoYW5uZWwuIFRodXM6IAotICogCTEuIE9idGFpbiB0aGUgbmV0b3dyayBpbnRlcmZhY2UgYmFzZWQgb24gdGhlCi0gKiAgICAgICAgIGRsY2kgbnVtYmVyLgotICogICAgICAyLiBDaGVjayB0aGF0IG5ldHdvcmsgaW50ZXJmYWNlIGlzIHVwIGFuZAotICogICAgICAgICBwcm9wZXJseSBzZXR1cC4KLSAqIAkzLiBDaGVjayBmb3IgYSBidWZmZXJlZCBwYWNrZXQuCi0gKiAgICAgIDQuIFRyYW5zbWl0IHRoZSBwYWNrZXQuCi0gKgk1LiBJZiB3ZSBhcmUgaW4gV0FOUElQRSBtb2RlLCBtYXJrIHRoZSAKLSAqICAgICAgICAgTkVUX0JIIGhhbmRsZXIuIAotICogICAgICA2LiBJZiB3ZSBhcmUgaW4gQVBJIG1vZGUsIGtpY2sKLSAqICAgICAgICAgdGhlIEFGX1dBTlBJUEUgc29ja2V0IGZvciBtb3JlIGRhdGEuIAotICoJICAgCi0gKi8KLXN0YXRpYyB2b2lkIHR4X2ludHIoc2RsYV90ICpjYXJkKQotewotICAgICAgICBmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotICAgICAgICBmcl90eF9idWZfY3RsX3QqIGJjdGw7Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7Ci0gICAgICAgIGZyX2NoYW5uZWxfdCogY2hhbjsKLQotICAgICAgICBpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0gICAgICAgICAgICAgICAgYmN0bCA9ICh2b2lkKikoZmxhZ3MtPnRzZV9vZmZzICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0gICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgIGJjdGwgPSAodm9pZCopKGZsYWdzLT50c2Vfb2ZmcyAtIEZSX01CX1ZFQ1RPUiArCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5ody5kcG1iYXNlKTsKLQl9Ci0KLSAgICAgICAgLyogRmluZCB0aGUgc3RydWN0dXJlIGFuZCBtYWtlIGl0IHVuYnVzeSAqLwotICAgICAgICBkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgZmxhZ3MtPmRsY2kpOwotCWlmIChkZXYgPT0gTlVMTCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5PIERFViBJTiBUWCBJbnRlcnJ1cHRcbiIpOwkKLQkJZ290byBlbmRfb2ZfdHhfaW50cjsKLQl9Ci0KLSAgICAgICAgaWYgKChjaGFuID0gZGV2LT5wcml2KSA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTk8gQ0hBTiBJTiBUWCBJbnRlcnJ1cHRcbiIpOwkKLQkJZ290byBlbmRfb2ZfdHhfaW50cjsKLQl9Ci0KLSAgICAgICAgaWYoIWNoYW4tPnRyYW5zbWl0X2xlbmd0aCB8fCAhY2hhbi0+ZGVsYXlfc2tiKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHR4IGludCBlcnJvciAtIHRyYW5zbWl0IGxlbmd0aCB6ZXJvXG4iLAotCQkJCWNhcmQtPndhbmRldi5uYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVuZF9vZl90eF9pbnRyOwotICAgICAgICB9Ci0KLQkvKiBJZiB0aGUgJ2lmX3NlbmQoKScgcHJvY2VkdXJlIGlzIGN1cnJlbnRseSBjaGVja2luZyB0aGUgJ3RidXN5JwotCSAgIHN0YXR1cywgdGhlbiB3ZSBjYW5ub3QgdHJhbnNtaXQuIEluc3RlYWQsIHdlIGNvbmZpZ3VyZSB0aGUgbWljcm9jb2RlCi0JICAgc28gYXMgdG8gcmUtaXNzdWUgdGhpcyB0cmFuc21pdCBpbnRlcnJ1cHQgYXQgYSBsYXRlciBzdGFnZS4gCi0JKi8KLQlpZiAodGVzdF9iaXQoU0VORF9UWElSUV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQotCQlmcl9kbGNpX2ludGVyZmFjZV90KiBkbGNpX2ludGVyZmFjZSA9IGNoYW4tPmRsY2lfaW50X2ludGVyZmFjZTsKLQkJYmN0bC0+ZmxhZyA9IDB4QTA7Ci0JCWRsY2lfaW50ZXJmYWNlLT5nZW5faW50ZXJydXB0IHw9IEZSX0lOVFJfVFhSRFk7Ci0JCXJldHVybjsKLQotIAl9ZWxzZXsKLSAgICAgICAgCWJjdGwtPmRsY2kgPSBmbGFncy0+ZGxjaTsKLQkgICAgICAgIGJjdGwtPmxlbmd0aCA9IGNoYW4tPnRyYW5zbWl0X2xlbmd0aCtjaGFuLT5mcl9oZWFkZXJfbGVuOwotICAgICAgICAJc2RsYV9wb2tlKCZjYXJkLT5odywgCi0JCSAgICAgICAgICBmcl9zZW5kX2hkcihjYXJkLGJjdGwtPmRsY2ksYmN0bC0+b2Zmc2V0KSwgCi0JCQkgIGNoYW4tPmRlbGF5X3NrYi0+ZGF0YSwKLSAJICAgICAgICAgICAgICAJICBjaGFuLT5kZWxheV9za2ItPmxlbik7Ci0JICAgICAgICBiY3RsLT5mbGFnID0gMHhDMDsKLQotCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfcGFja2V0czsKLQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBjaGFuLT50cmFuc21pdF9sZW5ndGg7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9ieXRlcyArPSBjaGFuLT50cmFuc21pdF9sZW5ndGg7Ci0KLQkJLyogV2UgbXVzdCBmcmVlIGFuIHNrIGJ1ZmZlciwgd2hpY2ggd2UgdXNlZAotCQkgKiBmb3IgZGVsYXllZCB0cmFuc21pc3Npb247IE90aGVyd2lzZSwgdGhlIHNvY2sKLQkJICogd2lsbCBydW4gb3V0IG9mIG1lbW9yeSAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KGNoYW4tPmRlbGF5X3NrYik7Ci0KLQkJY2hhbi0+ZGVsYXlfc2tiID0gTlVMTDsJCQkJCi0gICAgICAgIAljaGFuLT50cmFuc21pdF9sZW5ndGggPSAwOwotCi0JCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJLyogSWYgdXNpbmcgQVBJLCB0aGFuIHdha2V1cCBzb2NrZXQgQkggaGFuZGxlciAqLwotCQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCXdha2V1cF9za19iaChkZXYpOwotCQkJfWVsc2V7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJfQotCQl9Ci0JfQotCi1lbmRfb2ZfdHhfaW50cjoKLQotIAkvKiBpZiBhbnkgb3RoZXIgaW50ZXJmYWNlcyBoYXZlIHRyYW5zbWl0IGludGVycnVwdHMgcGVuZGluZywgCi0JICogZG8gbm90IGRpc2FibGUgdGhlIGdsb2JhbCB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQlpZighKC0tIGNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcpKQotICAgICAgIAkgICAgICAgIGZsYWdzLT5pbWFzayAmPSB+RlJfSU5UUl9UWFJEWTsKLQotCi19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0aW1lcl9pbnRyOglUaW1lciBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKiBSYXRpb25hbGU6Ci0gKglBbGwgY29tbWFucyBtdXN0IGJlIGV4ZWN1dGVkIHdpdGhpbiB0aGUgdGltZXIKLSAqICAgICAgaW50ZXJydXB0IHNpbmNlIG5vIHR3byBjb21tYW5kcyBzaG91bGQgZXhlY3V0ZQotICogICAgICBhdCB0aGUgc2FtZSB0aW1lLgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIHRpbWVyIGludGVycnVwdCBpcyB1c2VkIHRvOgotICogICAgCTEuIFByb2Nlc3NpbmcgdWRwIGNhbGxzIGZyb20gJ2ZwaXBlbW9uJy4KLSAqICAgIAkyLiBQcm9jZXNzaW5nIHVwZGF0ZSBjYWxscyBmcm9tIC9wcm9jIGZpbGUgc3lzdGVtCi0gKiAgIAkzLiBSZWFkaW5nIGJvYXJkLWxldmVsIHN0YXRpc3RpY3MgZm9yIAotICogICAgICAgICB1cGRhdGluZyB0aGUgcHJvYyBmaWxlIHN5c3RlbS4KLSAqICAgIAk0LiBTZW5kaW5nIGludmVyc2UgQVJQIHJlcXVlc3QgcGFja2V0cy4KLSAqCTUuIENvbmZpZ3VyZSBhIGRsY2kvY2hhbm5lbC4KLSAqCTYuIFVuY29uZmlndXJlIGEgZGxjaS9jaGFubmVsLiAoTm9kZSBvbmx5KQotICovCi0KLXN0YXRpYyB2b2lkIHRpbWVyX2ludHIoc2RsYV90ICpjYXJkKQotewotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBVRFAgRGVidWdpbmc6IGZwaXBlbW9uIGNhbGwgKi8KLSAgICAgICAgaWYgKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VRFApIHsKLQkJaWYoY2FyZC0+dS5mLnVkcF90eXBlID09IFVEUF9GUElQRV9UWVBFKSB7Ci0gICAgICAgICAgICAgICAgICAgIAlpZihwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkKSkgewotCQkgICAgICAgICAgICAgICAgY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9Ci0JCQkJCX5UTVJfSU5UX0VOQUJMRURfVURQOwotCQkJfQotCQl9Ci0gICAgICAgIH0KLQotCS8qIC9wcm9jIHVwZGF0ZSBjYWxsIDogdHJpZ2dlcmVkIGZyb20gdXBkYXRlKCkgKi8KLQlpZiAoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSkgewotCQlmcl9nZXRfZXJyX3N0YXRzKGNhcmQpOwotCQlmcl9nZXRfc3RhdHMoY2FyZCk7Ci0JCWNhcmQtPnUuZi51cGRhdGVfY29tbXNfc3RhdHMgPSAwOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JfQotCi0JLyogVXBkYXRlIHRoZSBjaGFubmVsIHN0YXRlIGNhbGwuICBUaGlzIGlzIGNhbGwgaXMKLSAgICAgICAgICogdHJpZ2dlcmVkIGJ5IGlmX3NlbmQoKSBmdW5jdGlvbiAqLwotCWlmIChjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFX1NUQVRFKXsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQkJaWYgKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEKXsKLQkJCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCQkJICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKXsKLQkJCQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7CQotCQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCQkJCXVwZGF0ZV9jaGFuX3N0YXRlKGRldik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VQREFURV9TVEFURTsKLQl9Ci0KLQkvKiBjb25maWd1cmUgYSBkbGNpL2NoYW5uZWwgKi8KLQlpZiAoY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX0NPTkZJRyl7Ci0JCWNvbmZpZ19mcihjYXJkKTsKLQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCX0KLQotCS8qIHVuY29uZmlndXJlIGEgZGxjaS9jaGFubmVsICovCi0JaWYgKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRyl7Ci0JCXVuY29uZmlnX2ZyKGNhcmQpOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRzsKLQl9Ci0KLQkKLQkvKiBUcmFuc21pdCBBUlAgcGFja2V0cyAqLwotCWlmIChjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQVJQKXsKLQkJaW50IGk9MDsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCQlpZiAoY2FyZC0+dS5mLmFycF9kZXYgPT0gTlVMTCkKLQkJCWNhcmQtPnUuZi5hcnBfZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCQlkZXYgPSBjYXJkLT51LmYuYXJwX2RldjsKLQotCQlmb3IgKDs7KXsgCi0KLQkJCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCQkJLyogSWYgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IGRvd24gY2FuY2VsIHNlbmRpbmcgSW4tQVJQcyAqLwotCQkJaWYgKCEoZGV2LT5mbGFncyZJRkZfVVApKXsKLQkJCQljbGVhcl9iaXQoMCwmY2hhbi0+aW5hcnBfcmVhZHkpOwkKLQkJCX0KLQotCQkJaWYgKHRlc3RfYml0KDAsJmNoYW4tPmluYXJwX3JlYWR5KSl7Ci0KLQkJCQlpZiAoY2hlY2tfdHhfc3RhdHVzKGNhcmQsZGV2KSl7Ci0JCQkJCXNldF9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWlmICghc2VuZF9pbmFycF9yZXF1ZXN0KGNhcmQsZGV2KSl7Ci0JCQkJCXRyaWdnZXJfZnJfYXJwKGRldik7Ci0JCQkJCWNoYW4tPmluYXJwX3RpY2sgPSBqaWZmaWVzOwotCQkJCX0KLQotCQkJCWNsZWFyX2JpdCgwLCZjaGFuLT5pbmFycF9yZWFkeSk7Ci0JCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQotCQkJaWYgKCsraSA9PSBjYXJkLT53YW5kZXYubmV3X2lmX2NudCl7Ci0JCQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfQVJQOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWNhcmQtPnUuZi5hcnBfZGV2ID0gZGV2OwotCX0KLQotICAgICAgICBpZighY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkKQotICAgICAgICAgICAgICAgIGZsYWdzLT5pbWFzayAmPSB+RlJfSU5UUl9USU1FUjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHNwdXJfaW50cjoJU3B1cmlvdXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAKLSAqIERlc2NyaXB0aW9uOgotICogIAlXZSBkb24ndCBrbm93IHRoaXMgaW50ZXJydXB0LgotICogICAgICBQcmludCBhIHdhcm5pbmcuCi0gKi8KLQotc3RhdGljIHZvaWQgc3B1cl9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0JaWYgKG5ldF9yYXRlbGltaXQoKSl7IAotCQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JfQotfQotCi0KLS8vRklYTUU6IEZpeCB0aGUgSVBYIGluIG5leHQgdmVyc2lvbgotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICBSZXR1cm4gMCBmb3Igbm9uLUlQWFdBTiBwYWNrZXQKLSAqICAgICAgICAgMSBmb3IgSVBYV0FOIHBhY2tldCBvciBJUFggaXMgbm90IGVuYWJsZWQhCi0gKiAgRklYTUU6IFVzZSBhIElQWCBzdHJ1Y3R1cmUgaGVyZSBub3Qgb2Zmc2V0cwotICovCi1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgCi0JCQkgY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCAKLQkJCSB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyKQotewotCWludCBpOwotCi0JaWYoIHNlbmRwYWNrZXRbMV0gPT0gMHgwMCAmJiBzZW5kcGFja2V0WzJdID09IDB4ODAgJiYKLQkgICAgc2VuZHBhY2tldFs2XSA9PSAweDgxICYmIHNlbmRwYWNrZXRbN10gPT0gMHgzNykgeyAKLQotCQkvKiBJdCdzIGFuIElQWCBwYWNrZXQgKi8KLQkJaWYgKCFlbmFibGVfSVBYKXsKLQkJCS8qIFJldHVybiAxIHNvIHdlIGRvbid0IHBhc3MgaXQgdXAgdGhlIHN0YWNrLiAqLwotCQkJLy9GSVhNRTogVGFrZSB0aGlzIG91dCB3aGVuIElQWCBpcyBmaXhlZAotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7IAotCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCSIlczogV0FSTklORzogVW5zdXBwb3J0ZWQgSVBYIHBhY2tldCByZWNlaXZlZCBhbmQgZHJvcHBlZFxuIiwKLQkJCQkJZGV2bmFtZSk7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEl0J3Mgbm90IElQWCBzbyByZXR1cm4gYW5kIHBhc3MgaXQgdXAgdGhlIHN0YWNrLiAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiggc2VuZHBhY2tldFsyNF0gPT0gMHg5MCAmJiBzZW5kcGFja2V0WzI1XSA9PSAweDA0KXsKLQkJLyogSXQncyBJUFhXQU4gKi8KLQotCQlpZiggc2VuZHBhY2tldFsxMF0gPT0gMHgwMiAmJiBzZW5kcGFja2V0WzQyXSA9PSAweDAwKXsKLQotCQkJLyogSXQncyBhIHRpbWVyIHJlcXVlc3QgcGFja2V0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgSVBYV0FOIFRpbWVyIFJlcXVlc3QgcGFja2V0XG4iLAotCQkJCQlkZXZuYW1lKTsKLQotCQkJLyogR28gdGhyb3VnaCB0aGUgcm91dGluZyBvcHRpb25zIGFuZCBhbnN3ZXIgbm8gdG8gZXZlcnkKLQkJCSAqIG9wdGlvbiBleGNlcHQgVW5udW1iZXJlZCBSSVAvU0FQCi0JCQkgKi8KLQkJCWZvcihpID0gNDk7IHNlbmRwYWNrZXRbaV0gPT0gMHgwMDsgaSArPSA1KXsKLQkJCQkvKiAweDAyIGlzIHRoZSBvcHRpb24gZm9yIFVubnVtYmVyZWQgUklQL1NBUCAqLwotCQkJCWlmKCBzZW5kcGFja2V0W2kgKyA0XSAhPSAweDAyKXsKLQkJCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJLyogU2tpcCBvdmVyIHRoZSBleHRlbmRlZCBOb2RlIElEIG9wdGlvbiAqLwotCQkJaWYoIHNlbmRwYWNrZXRbaV0gPT0gMHgwNCApewotCQkJCWkgKz0gODsKLQkJCX0KLQotCQkJLyogV2UgYWxzbyB3YW50IHRvIHR1cm4gb2ZmIGFsbCBoZWFkZXIgY29tcHJlc3Npb24gb3B0LgotCQkJICovCi0JCQlmb3IoOyBzZW5kcGFja2V0W2ldID09IDB4ODAgOyl7Ci0JCQkJc2VuZHBhY2tldFtpICsgMV0gPSAwOwotCQkJCWkgKz0gKHNlbmRwYWNrZXRbaSArIDJdIDw8IDgpICsgKHNlbmRwYWNrZXRbaSArIDNdKSArIDQ7Ci0JCQl9Ci0KLQkJCS8qIFNldCB0aGUgcGFja2V0IHR5cGUgdG8gdGltZXIgcmVzcG9uc2UgKi8KLQkJCXNlbmRwYWNrZXRbNDJdID0gMHgwMTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbmRpbmcgSVBYV0FOIFRpbWVyIFJlc3BvbnNlXG4iLAotCQkJCQlkZXZuYW1lKTsKLQotCQl9IGVsc2UgaWYoIHNlbmRwYWNrZXRbNDJdID09IDB4MDIgKXsKLQotCQkJLyogVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IFJlY2VpdmVkIElQWFdBTiBJbmZvcm1hdGlvbiBSZXF1ZXN0IHBhY2tldFxuIiwKLQkJCQkJCWRldm5hbWUpOwotCi0JCQkvKiBTZXQgdGhlIHBhY2tldCB0eXBlIHRvIGluZm9ybWF0aW9uIHJlc3BvbnNlICovCi0JCQlzZW5kcGFja2V0WzQyXSA9IDB4MDM7Ci0KLQkJCS8qIFNldCB0aGUgcm91dGVyIG5hbWUgKi8KLQkJCXNlbmRwYWNrZXRbNTldID0gJ0YnOwotCQkJc2VuZHBhY2tldFs2MF0gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzYxXSA9ICdJJzsKLQkJCXNlbmRwYWNrZXRbNjJdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs2M10gPSAnRSc7Ci0JCQlzZW5kcGFja2V0WzY0XSA9ICctJzsKLQkJCXNlbmRwYWNrZXRbNjVdID0gQ1ZIZXhUb0FzY2lpKG5ldHdvcmtfbnVtYmVyID4+IDI4KTsKLQkJCXNlbmRwYWNrZXRbNjZdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MEYwMDAwMDApPj4gMjQpOwotCQkJc2VuZHBhY2tldFs2N10gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMEYwMDAwMCk+PiAyMCk7Ci0JCQlzZW5kcGFja2V0WzY4XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMEYwMDAwKT4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbNjldID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEYwMDApPj4gMTIpOwotCQkJc2VuZHBhY2tldFs3MF0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMEYwMCk+PiA4KTsKLQkJCXNlbmRwYWNrZXRbNzFdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRjApPj4gNCk7Ci0JCQlzZW5kcGFja2V0WzcyXSA9IENWSGV4VG9Bc2NpaShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwMEYpOwotCQkJZm9yKGkgPSA3MzsgaSA8IDEwNzsgaSs9IDEpCi0JCQl7Ci0JCQkJc2VuZHBhY2tldFtpXSA9IDA7Ci0JCQl9Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIElQWFdBTiBJbmZvcm1hdGlvbiBSZXNwb25zZSBwYWNrZXRcbiIsCi0JCQkJCWRldm5hbWUpOwotCQl9IGVsc2UgewotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5rbm93biBJUFhXQU4gcGFja2V0IVxuIixkZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogU2V0IHRoZSBXTm9kZUlEIHRvIG91ciBuZXR3b3JrIGFkZHJlc3MgKi8KLQkJc2VuZHBhY2tldFs0M10gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQlzZW5kcGFja2V0WzQ0XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCXNlbmRwYWNrZXRbNDVdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlzZW5kcGFja2V0WzQ2XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRkYpOwotCi0JCXJldHVybiAxOwotCX0KLQotCS8qIElmIHdlIGdldCBoZXJlLCBpdCdzIGFuIElQWC1kYXRhIHBhY2tldCBzbyBpdCdsbCBnZXQgcGFzc2VkIHVwIHRoZSAKLQkgKiBzdGFjay4KLQkgKiBzd2l0Y2ggdGhlIG5ldHdvcmsgbnVtYmVycyAKLQkgKi8KLQlzd2l0Y2hfbmV0X251bWJlcnMoc2VuZHBhY2tldCwgbmV0d29ya19udW1iZXIgLDEpOwotCXJldHVybiAwOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBwcm9jZXNzX3JvdXRlCi0gKiAKLSAqIFJhdGlvbmFsZToKLSAqCUlmIHRoZSBpbnRlcmZhY2UgZ29lcyBkb3duLCBvciB3ZSByZWNlaXZlIGFuIEFSUCByZXF1ZXN0LAotICogICAgICB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXAgYWRkcmVzc2VzLgotICogCVRoaXMgY2Fubm90IGJlIGRvbmUgd2l0aGluIHRoZSBpbnRlcnJ1cHQuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKgotICogCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgYXMgYSBwb2xsaW5nIHJvdXRpbmUgdG8gZHluYW1pY2FsbHkgCi0gKglhZGQvZGVsZXRlIHJvdXRlcyBuZWdvdGlhdGVkIGJ5IGludmVyc2UgQVJQLiAgSXQgaXMgaW4gdGhpcyAKLSAqICAgIAkidGFzayIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHJvdXRlcyB0byBiZSBhZGRlZCB3aGlsZSBpbiAKLSAqICAgICAgaW50ZXJydXB0IGNvbnRleHQuCi0gKgotICogVXNhZ2U6Ci0gKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBmcl9wb2xsKCkgcG9sbGluZyBmdW50aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqaWZfZGF0YTsKLQltbV9zZWdtZW50X3QgZnMgPSBnZXRfZnMoKTsKLQl1MzIgaXBfdG1wOwotCWludCBlcnI7Ci0KLQotCXN3aXRjaChjaGFuLT5yb3V0ZV9mbGFnKXsKLQotCWNhc2UgQUREX1JPVVRFOgotCQkJCQotCQkvKiBTZXQgcmVtb3RlIGFkZHJlc3NlcyAqLwotCQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0JCXN0cmNweShpZl9pbmZvLmlmcl9uYW1lLCBkZXYtPm5hbWUpOwotCi0JCXNldF9mcyhnZXRfZHMoKSk7ICAgICAvKiBnZXQgdXNlciBzcGFjZSBibG9jayAqLyAKLQkJCi0JCWlmX2RhdGEgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmlmX2luZm8uaWZyX2RzdGFkZHI7Ci0JCWlmX2RhdGEtPnNpbl9hZGRyLnNfYWRkciA9IGNoYW4tPmlwX3JlbW90ZTsKLQkJaWZfZGF0YS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyApOwotCi0JCXNldF9mcyhmcyk7ICAgICAgICAgICAvKiByZXN0b3JlIG9sZCBibG9jayAqLwotCi0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBSb3V0ZSBBZGQgZmFpbGVkLiAgRXJyb3I6ICVkXG4iLCAKLQkJCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFkZHJlc3M6ICV1LiV1LiV1LiV1XG4iLAotCQkJCWNoYW4tPm5hbWUsIE5JUFFVQUQoY2hhbi0+aXBfcmVtb3RlKSk7Ci0KLQkJfWVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJvdXRlIEFkZGVkIFN1Y2Nlc3NmdWxseTogJXUuJXUuJXUuJXVcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKGNoYW4tPmlwX3JlbW90ZSkpOwotCQkJY2hhbi0+cm91dGVfZmxhZyA9IFJPVVRFX0FEREVEOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBSRU1PVkVfUk9VVEU6Ci0KLQkJLyogU2V0IHJlbW90ZSBhZGRyZXNzZXMgKi8KLQkJbWVtc2V0KCZpZl9pbmZvLCAwLCBzaXplb2YoaWZfaW5mbykpOwotCQlzdHJjcHkoaWZfaW5mby5pZnJfbmFtZSwgZGV2LT5uYW1lKTsKLQotCQlpcF90bXAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX1BPSU5UT1BPSU5UX0lQKTsJCi0KLQkJc2V0X2ZzKGdldF9kcygpKTsgICAgIC8qIGdldCB1c2VyIHNwYWNlIGJsb2NrICovIAotCQkKLQkJaWZfZGF0YSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfZHN0YWRkcjsKLQkJaWZfZGF0YS0+c2luX2FkZHIuc19hZGRyID0gMDsKLQkJaWZfZGF0YS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyApOwotCi0JCXNldF9mcyhmcyk7ICAgIAotCQkKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IERlbGV0aW5nIG9mIHJvdXRlIGZhaWxlZC4gIEVycm9yOiAlZFxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsZXJyKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBZGRyZXNzOiAldS4ldS4ldS4ldVxuIiwKLQkJCQlkZXYtPm5hbWUsTklQUVVBRChjaGFuLT5pcF9yZW1vdGUpICk7Ci0KLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSb3V0ZSBSZW1vdmVkIFN1Y2Vzc2Z1bHk6ICV1LiV1LiV1LiV1XG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQoaXBfdG1wKSk7Ci0JCQljaGFuLT5yb3V0ZV9mbGFnID0gTk9fUk9VVEU7Ci0JCX0KLQkJYnJlYWs7Ci0KLQl9IC8qIENhc2UgU3RhdGVtZW50ICovCi0KLX0KLQotCi0KLS8qKioqKiogRnJhbWUgUmVsYXkgRmlybXdhcmUtU3BlY2lmaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgZmlybXdhcmUgY29kZSB2ZXJzaW9uLgotICogbyBmaWxsIHN0cmluZyBzdHIgd2l0aCBmaXJtd2FyZSB2ZXJzaW9uIGluZm8uIAotICovCi1zdGF0aWMgaW50IGZyX3JlYWRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX0NPREVfVkVSU0lPTjsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlpZiAoIWVyciAmJiBzdHIpIHsKLQkJaW50IGxlbiA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0JCW1lbWNweShzdHIsIG1ib3gtPmRhdGEsIGxlbik7Ci0JICAgICAgICBzdHJbbGVuXSA9ICdcMCc7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGdsb2JhbCBjb25maWd1cmF0aW9uLgotICovCi1zdGF0aWMgaW50IGZyX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBmcl9jb25mX3QgKmNvbmYpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBkbGNpX251bSA9IGNhcmQtPnUuZi5kbGNpX251bTsKLQlpbnQgZXJyLCBpOwotCi0JZG8KLQl7Ci0JCW1lbWNweShtYm94LT5kYXRhLCBjb25mLCBzaXplb2YoZnJfY29uZl90KSk7Ci0KLQkJaWYgKGRsY2lfbnVtKSBmb3IgKGkgPSAwOyBpIDwgZGxjaV9udW07ICsraSkKLQkJCSgoZnJfY29uZl90KiltYm94LT5kYXRhKS0+ZGxjaVtpXSA9IAotCQkJCQljYXJkLT51LmYubm9kZV9kbGNpW2ldOyAKLQkJCi0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX0NPTkZJRzsKLQkJbWJveC0+Y21kLmxlbmd0aCA9Ci0JCQlzaXplb2YoZnJfY29uZl90KSArIGRsY2lfbnVtICogc2l6ZW9mKHNob3J0KTsKLQotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0KLQkvKk5DIE9jdCAxMiAyMDAwICovCi0JaWYgKGVyciAhPSBDTURfT0spewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGcmFtZSBSZWxheSBDb25maWd1cmF0aW9uIEZhaWxlZDogcmM9MHgleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGVycik7Ci0JfQotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IERMQ0kgY29uZmlndXJhdGlvbi4KLSAqLwotc3RhdGljIGludCBmcl9kbGNpX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBmcl9kbGNfY29uZl90ICpjb25mLCB1bnNpZ25lZCBkbGNpKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbWNweShtYm94LT5kYXRhLCBjb25mLCBzaXplb2YoZnJfZGxjX2NvbmZfdCkpOwotCQltYm94LT5jbWQuZGxjaSA9ICh1bnNpZ25lZCBzaG9ydCkgZGxjaTsgCi0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX0NPTkZJRzsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IHNpemVvZihmcl9kbGNfY29uZl90KTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgaW50ZXJydXB0IG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZnJfc2V0X2ludHJfbW9kZSAoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBtdHUsCi0JdW5zaWduZWQgc2hvcnQgdGltZW91dCkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWZyNTA4X2ludHJfY3RsX3QqIGljdGwgPSAodm9pZCopbWJveC0+ZGF0YTsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KGljdGwsIDAsIHNpemVvZihmcjUwOF9pbnRyX2N0bF90KSk7Ci0JCWljdGwtPm1vZGUgICA9IG1vZGU7Ci0JCWljdGwtPnR4X2xlbiA9IG10dTsKLQkJaWN0bC0+aXJxICAgID0gY2FyZC0+aHcuaXJxOwotCi0JCS8qIGluZGljYXRlIHRpbWVvdXQgb24gdGltZXIgKi8KLQkJaWYgKG1vZGUgJiAweDIwKSBpY3RsLT50aW1lb3V0ID0gdGltZW91dDsgCi0KLQkJbWJveC0+Y21kLmxlbmd0aCA9IHNpemVvZihmcjUwOF9pbnRyX2N0bF90KTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfSU5UUl9NT0RFOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqLwotc3RhdGljIGludCBmcl9jb21tX2VuYWJsZSAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfQ09NTV9FTkFCTEU7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBmcl9jb21tX2Rpc2FibGUgCi0gKgotICogV2FybmluZzogVGhpcyBmdW5jdGluIGlzIGNhbGxlZCBieSB0aGUgc2h1dGRvd24oKSBwcm9jZWR1cmUuIEl0IGlzIHZvaWQKLSAqICAgICAgICAgIHNpbmNlIGRldi0+cHJpdiBhcmUgaGFzIGFscmVhZHkgYmVlbiBkZWFsbG9jYXRlZCBhbmQgbm8KLSAqICAgICAgICAgIGVycm9yIGNoZWNraW5nIGlzIHBvc3NpYmxlIHVzaW5nIGZyX2V2ZW50KCkgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGZyX2NvbW1fZGlzYWJsZSAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8gewotCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX01PREVNX1NUQVRVUzsKLQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQltYm94LT5kYXRhWzBdID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0pOwotCQotCXJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQkKLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9DT01NX0RJU0FCTEU7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0pOwotCi0JcmV0dXJuOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgY29tbXVuaWNhdGlvbnMgZXJyb3Igc3RhdGlzdGljcy4gCi0gKi8KLXN0YXRpYyBpbnQgZnJfZ2V0X2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX0VSUk9SX1NUQVRTOwotCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJbWJveC0+Y21kLmRsY2kgPSAwOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0KLQlpZiAoIWVycikgewotCQlmcl9jb21tX3N0YXRfdCogc3RhdHMgPSAodm9pZCopbWJveC0+ZGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X292ZXJfZXJyb3JzICAgID0gc3RhdHMtPnJ4X292ZXJydW5zOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfY3JjX2Vycm9ycyAgICAgPSBzdGF0cy0+cnhfYmFkX2NyYzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgID0gc3RhdHMtPnJ4X2Fib3J0czsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgID0gc3RhdHMtPnJ4X3Rvb19sb25nOwotCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSBzdGF0cy0+dHhfYWJvcnRzOwotCQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IHN0YXRpc3RpY3MuIAotICovCi1zdGF0aWMgaW50IGZyX2dldF9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9SRUFEX1NUQVRJU1RJQ1M7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQltYm94LT5jbWQuZGxjaSA9IDA7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX2xpbmtfc3RhdF90KiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gc3RhdHMtPnJ4X2JhZF9mb3JtYXQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkID0KLQkJCXN0YXRzLT5yeF9kcm9wcGVkICsgc3RhdHMtPnJ4X2Ryb3BwZWQyOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQWRkIERMQ0kocykgKEFjY2VzcyBOb2RlIG9ubHkhKS4KLSAqIFRoaXMgcm91dGluZSB3aWxsIHBlcmZvcm0gdGhlIEFERF9ETENJcyBjb21tYW5kIGZvciB0aGUgc3BlY2lmaWVkIERMQ0kuCi0gKi8KLXN0YXRpYyBpbnQgZnJfYWRkX2RsY2kgKHNkbGFfdCogY2FyZCwgaW50IGRsY2kpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJdW5zaWduZWQgc2hvcnQqIGRsY2lfbGlzdCA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCW1ib3gtPmNtZC5sZW5ndGggID0gc2l6ZW9mKHNob3J0KTsKLQkJZGxjaV9saXN0WzBdID0gZGxjaTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9BRERfRExDSTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBY3RpdmF0ZSBETENJKHMpIChBY2Nlc3MgTm9kZSBvbmx5ISkuIAotICogVGhpcyByb3V0aW5lIHdpbGwgcGVyZm9ybSB0aGUgQUNUSVZBVEVfRExDSXMgY29tbWFuZCB3aXRoIGEgRExDSSBudW1iZXIuIAotICovCi1zdGF0aWMgaW50IGZyX2FjdGl2YXRlX2RsY2kgKHNkbGFfdCogY2FyZCwgaW50IGRsY2kpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJdW5zaWduZWQgc2hvcnQqIGRsY2lfbGlzdCA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCW1ib3gtPmNtZC5sZW5ndGggID0gc2l6ZW9mKHNob3J0KTsKLQkJZGxjaV9saXN0WzBdID0gZGxjaTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9BQ1RJVkFURV9ETENJOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERlbGV0ZSBETENJKHMpIChBY2Nlc3MgTm9kZSBvbmx5ISkuIAotICogVGhpcyByb3V0aW5lIHdpbGwgcGVyZm9ybSB0aGUgREVMRVRFX0RMQ0lzIGNvbW1hbmQgd2l0aCBhIERMQ0kgbnVtYmVyLiAKLSAqLwotc3RhdGljIGludCBmcl9kZWxldGVfZGxjaSAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSkKLXsKLQlmcl9tYm94X3QqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQl1bnNpZ25lZCBzaG9ydCogZGxjaV9saXN0ID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0KLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzaXplb2Yoc2hvcnQpOwotCQlkbGNpX2xpc3RbMF0gPSBkbGNpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IEZSX0RFTEVURV9ETENJOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJc3N1ZSBpbi1jaGFubmVsIHNpZ25hbGxpbmcgZnJhbWUuIAotICovCi1zdGF0aWMgaW50IGZyX2lzc3VlX2lzZiAoc2RsYV90KiBjYXJkLCBpbnQgaXNmKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1ib3gtPmRhdGFbMF0gPSBpc2Y7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gMTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9JU1NVRV9JU19GUkFNRTsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBmcl9zZW5kX2hkciAoc2RsYV90KmNhcmQsIGludCBkbGNpLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCxkbGNpKTsJCi0JZnJfY2hhbm5lbF90ICpjaGFuOwotCi0JaWYgKCFkZXYgfHwgIShjaGFuPWRldi0+cHJpdikpCi0JCXJldHVybiBvZmZzZXQ7Ci0JCi0JaWYgKGNoYW4tPmZyX2hlYWRlcl9sZW4pewotCQlzZGxhX3Bva2UoJmNhcmQtPmh3LCBvZmZzZXQsIGNoYW4tPmZyX2hlYWRlciwgY2hhbi0+ZnJfaGVhZGVyX2xlbik7Ci0JfQotCQotCXJldHVybiBvZmZzZXQrY2hhbi0+ZnJfaGVhZGVyX2xlbjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgZnJhbWUgb24gYSBzZWxlY3RlZCBETENJLiAgCi0gKi8KLXN0YXRpYyBpbnQgZnJfc2VuZF9kYXRhX2hlYWRlciAoc2RsYV90KiBjYXJkLCBpbnQgZGxjaSwgdW5zaWduZWQgY2hhciBhdHRyLCBpbnQgbGVuLAotCXZvaWQgKmJ1ZiwgdW5zaWduZWQgY2hhciBoZHJfbGVuKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3ggKyAweDgwMDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmRsY2kgICAgPSBkbGNpOwotCQltYm94LT5jbWQuYXR0ciAgICA9IGF0dHI7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gbGVuK2hkcl9sZW47Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfV1JJVEU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX3R4X2J1Zl9jdGxfdCogZnJidWY7Ci0gCi0gICAgICAgICAgICAgICAJaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpCi0JCQlmcmJ1ZiA9ICh2b2lkKikoKih1bnNpZ25lZCBsb25nKiltYm94LT5kYXRhICsKLSAgICAgICAgICAgICAgICAgICAgICAgIAljYXJkLT5ody5kcG1iYXNlKTsKLQkJZWxzZQotCQkJZnJidWYgPSAodm9pZCopKCoodW5zaWduZWQgbG9uZyopbWJveC0+ZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLQkJc2RsYV9wb2tlKCZjYXJkLT5odywgZnJfc2VuZF9oZHIoY2FyZCxkbGNpLGZyYnVmLT5vZmZzZXQpLCBidWYsIGxlbik7Ci0JCWZyYnVmLT5mbGFnID0gMHgwMTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGZyX3NlbmQgKHNkbGFfdCogY2FyZCwgaW50IGRsY2ksIHVuc2lnbmVkIGNoYXIgYXR0ciwgaW50IGxlbiwKLQl2b2lkICpidWYpCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveCArIDB4ODAwOwotCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltYm94LT5jbWQuZGxjaSAgICA9IGRsY2k7Ci0JCW1ib3gtPmNtZC5hdHRyICAgID0gYXR0cjsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBsZW47Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfV1JJVEU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCWlmICghZXJyKSB7Ci0JCWZyX3R4X2J1Zl9jdGxfdCogZnJidWY7Ci0gCi0gICAgICAgICAgICAgICAJaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpCi0JCQlmcmJ1ZiA9ICh2b2lkKikoKih1bnNpZ25lZCBsb25nKiltYm94LT5kYXRhICsKLSAgICAgICAgICAgICAgICAgICAgICAgIAljYXJkLT5ody5kcG1iYXNlKTsKLQkJZWxzZQotCQkJZnJidWYgPSAodm9pZCopKCoodW5zaWduZWQgbG9uZyopbWJveC0+ZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLQkJc2RsYV9wb2tlKCZjYXJkLT5odywgZnJidWYtPm9mZnNldCwgYnVmLCBsZW4pOwotCQlmcmJ1Zi0+ZmxhZyA9IDB4MDE7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKioqKioqIEZpcm13YXJlIEFzeW5jaHJvbm91cyBFdmVudCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNYWluIGFzeW5jcm9ub3VzIGV2ZW50L2Vycm9yIGhhbmRsZXIuCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGZpcm13YXJlIGNvbW1hbmQgcmV0dXJucyBub24temVybwotICoJcmV0dXJuIGNvZGUuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IGZyX2V2ZW50IChzZGxhX3QgKmNhcmQsIGludCBldmVudCwgZnJfbWJveF90KiBtYm94KQotewotCWZyNTA4X2ZsYWdzX3QqIGZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JY2hhciAqcHRyID0gJmZsYWdzLT5pZmxhZzsKLQlpbnQgaTsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQotCQljYXNlIEZSUkVTX01PREVNX0ZBSUxVUkU6Ci0JCQlyZXR1cm4gZnJfbW9kZW1fZmFpbHVyZShjYXJkLCBtYm94KTsKLQotCQljYXNlIEZSUkVTX0NIQU5ORUxfRE9XTjogewotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCQkJLyogUmVtb3ZlIGFsbCByb3V0ZXMgZnJvbSBhc3NvY2lhdGVkIERMQ0kncyAqLwotCQkJZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJCQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JCQkJaWYgKGNoYW4tPnJvdXRlX2ZsYWcgPT0gUk9VVEVfQURERUQpIHsKLQkJCQkJY2hhbi0+cm91dGVfZmxhZyA9IFJFTU9WRV9ST1VURTsKLQkJCQl9Ci0KLQkJCQlpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfQ09ORklHVVJFRCkgewotCQkJCQljaGFuLT5pbmFycCA9IElOQVJQX1JFUVVFU1Q7Ci0JCQkJfQotCi0JCQkJLyogSWYgdGhlIGxpbmsgYmVjb21lcyBkaXNjb25uZWN0ZWQgdGhlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsIGNoYW5uZWxzIHdpbGwgYmUgZGlzY29ubmVjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCXNldF9jaGFuX3N0YXRlKGRldixXQU5fRElTQ09OTkVDVEVEKTsKLQkJCX0KLQkJCQkKLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcmV0dXJuIDE7Ci0JCQl9Ci0KLQkJY2FzZSBGUlJFU19DSEFOTkVMX1VQOiB7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JCQkvKiBGSVhNRTogT25seSBzdGFydHVwIGRldmljZXMgdGhhdCBhcmUgb24gdGhlIGxpc3QgKi8KLQkJCQotCQkJZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJCQkKLQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0NPTk5FQ1RFRCk7Ci0JCQl9Ci0KLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNURUQpOwotCQkJcmV0dXJuIDE7Ci0JCQl9Ci0KLQkJY2FzZSBGUlJFU19ETENJX0NIQU5HRToKLQkJCXJldHVybiBmcl9kbGNpX2NoYW5nZShjYXJkLCBtYm94KTsKLQotCQljYXNlIEZSUkVTX0RMQ0lfTUlTTUFUQ0g6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRExDSSBsaXN0IG1pc21hdGNoIVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlyZXR1cm4gMTsKLQotCQljYXNlIENNRF9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY29tbWFuZCAweCUwMlggdGltZWQgb3V0IVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYm94LT5jbWQuY29tbWFuZCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSUQgQnl0ZXMgPSAiLGNhcmQtPmRldm5hbWUpOwotIAkgICAgCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MTggKyBpKSk7Ci0JICAgCSAJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0gICAgICAgICAgICAKLQkJCWJyZWFrOwotCi0JCWNhc2UgRlJSRVNfRExDSV9JTkFDVElWRToKLQkJCWJyZWFrOwotIAotCQljYXNlIEZSUkVTX0NJUl9PVkVSRkxPVzoKLQkJCWJyZWFrOwotCQkJCi0JCWNhc2UgRlJSRVNfQlVGRkVSX09WRVJGTE9XOgotCQkJYnJlYWs7IAotCQkJCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIgotCQkJCSwgY2FyZC0+ZGV2bmFtZSwgbWJveC0+Y21kLmNvbW1hbmQsIGV2ZW50KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgbW9kZW0gZXJyb3IuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IGZyX21vZGVtX2ZhaWx1cmUgKHNkbGFfdCAqY2FyZCwgZnJfbWJveF90KiBtYm94KQotewotCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHlzaWNhbCBsaW5rIGRvd24hIChtb2RlbSBlcnJvciAweCUwMlgpXG4iLAotCQljYXJkLT5kZXZuYW1lLCBtYm94LT5kYXRhWzBdKTsKLQotCXN3aXRjaCAobWJveC0+Y21kLmNvbW1hbmQpewotCQljYXNlIEZSX1dSSVRFOgotCQotCQljYXNlIEZSX1JFQUQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci0JCi0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSGFuZGxlIERMQ0kgc3RhdHVzIGNoYW5nZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgZnJfZGxjaV9jaGFuZ2UgKHNkbGFfdCAqY2FyZCwgZnJfbWJveF90KiBtYm94KQotewotCWRsY2lfc3RhdHVzX3QqIHN0YXR1cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCWludCBjbnQgPSBtYm94LT5jbWQubGVuZ3RoIC8gc2l6ZW9mKGRsY2lfc3RhdHVzX3QpOwotCWZyX2NoYW5uZWxfdCAqY2hhbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2MjsKLQkKLQotCWZvciAoOyBjbnQ7IC0tY250LCArK3N0YXR1cykgewotCi0JCXVuc2lnbmVkIHNob3J0IGRsY2k9IHN0YXR1cy0+ZGxjaTsKLQkJc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBkbGNpKTsKLQkJCi0JCWlmIChkZXYgPT0gTlVMTCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogQ1BFIGNvbnRhaW5zIHVuY29uZmlndXJlZCBETENJPSAlZFxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgZGxjaSk7IAkKLQotICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiB1bmNvbmZpZ3VyZWQgRExDSSAlZCByZXBvcnRlZCBieSBuZXR3b3JrXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY2FyZC0+ZGV2bmFtZSwgZGxjaSk7Ci0gCi0JCX1lbHNlewotCQkJaWYgKHN0YXR1cy0+c3RhdGUgPT0gRlJfTElOS19JTk9QRVIpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogRExDSSAldSBpcyBpbmFjdGl2ZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRsY2kpOwotCi0JCQkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpCi0JCQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCQl9Ci0JCi0JCQlpZiAoc3RhdHVzLT5zdGF0ZSAmIEZSX0RMQ0lfREVMRVRFRCkgewotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkiJXM6IERMQ0kgJXUgaGFzIGJlZW4gZGVsZXRlZCFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRsY2kpOwotCi0JCQkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpewotCi0JCQkJCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCQkJCQlpZiAoY2hhbi0+cm91dGVfZmxhZyA9PSBST1VURV9BRERFRCkgewotCQkJCQkJY2hhbi0+cm91dGVfZmxhZyA9IFJFTU9WRV9ST1VURTsKLQkJCQkJCS8qIFRoZSBzdGF0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgZnIgcG9sbGluZyByb3V0aW5lICovCi0JCQkJCX0KLQotCQkJCQlpZiAoY2hhbi0+aW5hcnAgPT0gSU5BUlBfQ09ORklHVVJFRCkgewotCQkJCQkJY2hhbi0+aW5hcnAgPSBJTkFSUF9SRVFVRVNUOwotCQkJCQl9Ci0KLQkJCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQkJCQl9Ci0KLQkJCX0gZWxzZSBpZiAoc3RhdHVzLT5zdGF0ZSAmIEZSX0RMQ0lfQUNUSVZFKSB7Ci0KLQkJCQljaGFuID0gZGV2LT5wcml2OwotCQkJCi0JCQkJLyogVGhpcyBmbGFnIGlzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIHNwZWNpZmljIAotCQkJCSAgIERMQ0kocykgd2hlbiB0aGV5IGJlY29tZSBhY3RpdmUuCi0JCQkgCSovIAotCQkJCWNoYW4tPmRsY2lfY29uZmlndXJlZCA9IERMQ0lfQ09ORklHX1BFTkRJTkc7Ci0JCi0JCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQkJCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JZm9yIChkZXYyID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2MjsKLQkgICAgIGRldjIgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYyLT5wcml2KSl7Ci0JCQotCQljaGFuID0gZGV2Mi0+cHJpdjsKLQkKLQkJaWYgKGNoYW4tPmRsY2lfY29uZmlndXJlZCA9PSBETENJX0NPTkZJR19QRU5ESU5HKSB7Ci0JCQlpZiAoZnJfaW5pdF9kbGNpKGNhcmQsIGNoYW4pKXsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCi0JfQotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyBpbnQgZnJfaW5pdF9kbGNpIChzZGxhX3QgKmNhcmQsIGZyX2NoYW5uZWxfdCAqY2hhbikKLXsKLQlmcl9kbGNfY29uZl90IGNmZzsKLQkKLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOwotCi0JaWYgKCBjaGFuLT5jaXJfc3RhdHVzID09IENJUl9ESVNBQkxFRCkgewotCi0JCWNmZy5jaXJfZndkID0gY2ZnLmNpcl9id2QgID0gMTY7Ci0JCWNmZy5iY19md2QgPSBjZmcuYmNfYndkID0gMTY7Ci0JCWNmZy5jb25mX2ZsYWdzID0gMHgwMDAxOwkKLQotCX1lbHNlIGlmIChjaGFuLT5jaXJfc3RhdHVzID09IENJUl9FTkFCTEVEKSB7Ci0JCi0JCWNmZy5jaXJfZndkID0gY2ZnLmNpcl9id2QgPSBjaGFuLT5jaXI7Ci0JCWNmZy5iY19md2QgID0gY2ZnLmJjX2J3ZCAgPSBjaGFuLT5iYzsKLQkJY2ZnLmJlX2Z3ZCAgPSBjZmcuYmVfYndkICA9IGNoYW4tPmJlOwotCQljZmcuY29uZl9mbGFncyA9IDB4MDAwMDsKLQl9Ci0JCi0JaWYgKGZyX2RsY2lfY29uZmlndXJlKCBjYXJkLCAmY2ZnICwgY2hhbi0+ZGxjaSkpewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBETENJIENvbmZpZ3VyZSBmYWlsZWQgZm9yICVkXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIGNoYW4tPmRsY2kpOwotCQlyZXR1cm4gMTsJCi0JfQotCQotCWNoYW4tPmRsY2lfY29uZmlndXJlZCA9IERMQ0lfQ09ORklHVVJFRDsKLQotCS8qIFJlYWQgdGhlIGludGVyZmFjZSBieXRlIG1hcHBpbmcgaW50byB0aGUgY2hhbm5lbCAKLQkgKiBzdHJ1Y3R1cmUuCi0JICovCi0JcmVhZF9ETENJX0lCX21hcHBpbmcoIGNhcmQsIGNoYW4gKTsKLQotCXJldHVybiAwOwotfQotLyoqKioqKiogTWlzY2VsbGFuZW91cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGNoYW5uZWwgc3RhdGUuIAotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9MSVNUX0FDVElWRV9ETENJOwotCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYgKCFlcnIpIHsKLQkJCi0JCXVuc2lnbmVkIHNob3J0KiBsaXN0ID0gKHZvaWQqKW1ib3gtPmRhdGE7Ci0JCWludCBjbnQgPSBtYm94LT5jbWQubGVuZ3RoIC8gc2l6ZW9mKHNob3J0KTsKLQkJCi0JCWVycj0xOwotCQkKLQkJZm9yICg7IGNudDsgLS1jbnQsICsrbGlzdCkgewotCi0JCQlpZiAoKmxpc3QgPT0gY2hhbi0+ZGxjaSkgewotIAkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCi0KLQkJCQkvKiBNYXkgMjMgMjAwMC4gTkMKLQkJCQkgKiBXaGVuIGEgZGxjaSBpcyBhZGRlZCBvciByZXN0YXJ0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBkbGNpX2ludF9pbnRlcmZhY2UgcG9pbnRlciBtdXN0Ci0JCQkJICogYmUgcmVpbml0aWFsaXplZC4gICovCi0JCQkJaWYgKCFjaGFuLT5kbGNpX2ludF9pbnRlcmZhY2UpewotCQkJCQllcnI9ZnJfaW5pdF9kbGNpIChjYXJkLGNoYW4pOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IGNoYW5uZWwgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9jaGFuX3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIGludCBzdGF0ZSkKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQotCWlmIChjaGFuLT5jb21tb24uc3RhdGUgIT0gc3RhdGUpIHsKLQotCQlzd2l0Y2ggKHN0YXRlKSB7Ci0KLQkJCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogSW50ZXJmYWNlICVzOiBETENJICVkIGNvbm5lY3RlZFxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBjaGFuLT5kbGNpKTsKLQotCQkJCS8qIElmIHRoZSBpbnRlcmZhY2Ugd2FzIHByZXZpb3Vsc3kgZG93biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnJpbmcgaXQgdXAsIHNpbmNlIHRoZSBjaGFubmVsIGlzIGFjdGl2ZSAqLwotCi0JCQkJdHJpZ2dlcl9mcl9wb2xsIChkZXYpOwotCQkJCXRyaWdnZXJfZnJfYXJwICAoZGV2KTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSAgICAgICIlczogSW50ZXJmYWNlICVzOiBETENJICVkIGNvbm5lY3RpbmdcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAKLQkJCQkgICAgIiVzOiBJbnRlcmZhY2UgJXM6IERMQ0kgJWQgZGlzY29ubmVjdGVkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBjaGFuLT5kbGNpKTsKLQkJCQotCQkJCS8qIElmIHRoZSBpbnRlcmZhY2UgaXMgdXAsIGJyaW5nIGl0IGRvd24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpbmNlIHRoZSBjaGFubmVsIGlzIG5vdyBkaXNjb25uZWN0ZWQgKi8KLQkJCQl0cmlnZ2VyX2ZyX3BvbGwgKGRldik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQotCQljaGFuLT5jb21tb24uc3RhdGUgPSBzdGF0ZTsKLQl9Ci0KLQljaGFuLT5zdGF0ZV90aWNrID0gamlmZmllczsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaW5kIG5ldHdvcmsgZGV2aWNlIGJ5IGl0cyBjaGFubmVsIG51bWJlci4KLSAqCi0gKiBXZSBuZWVkIHRoaXMgY3JpdGljYWwgZmxhZyBiZWNhdXNlIHdlIGNoYW5nZQotICogdGhlIGRsY2lfdG9fZGV2X21hcCBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQuCi0gKgotICogTk9URTogZGVsX2lmKCkgZnVuY3Rpb25zIHVwZGF0ZXMgdGhpcyBhcnJheSwgaXQgdXNlcwotICogICAgICAgdGhlIHNwaW4gbG9ja3MgdG8gYXZvaWQgY29ycnVwdGlvbi4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlKiBmaW5kX2NoYW5uZWwoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBkbGNpKQotewotCWlmKGRsY2kgPiBISUdIRVNUX1ZBTElEX0RMQ0kpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuKGNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbZGxjaV0pOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHRvIHNlZSBpZiBhIGZyYW1lIGNhbiBiZSBzZW50LiBJZiBubyB0cmFuc21pdCBidWZmZXJzIGF2YWlsYWJsZSwKLSAqIGVuYWJsZSB0cmFuc21pdCBpbnRlcnJ1cHRzLgotICoKLSAqIFJldHVybjoJMSAtIFR4IGJ1ZmZlcihzKSBhdmFpbGFibGUKLSAqCQkwIC0gbm8gYnVmZmVycyBhdmFpbGFibGUKLSAqLwotc3RhdGljIGludCBpc190eF9yZWFkeSAoc2RsYV90KiBjYXJkLCBmcl9jaGFubmVsX3QqIGNoYW4pCi17Ci0JdW5zaWduZWQgY2hhciBzYjsKLQotICAgICAgICBpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkKLQkJcmV0dXJuIDE7Ci0KLQlzYiA9IGluYihjYXJkLT5ody5wb3J0KTsKLQlpZiAoc2IgJiAweDAyKSAKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb252ZXJ0IGRlY2ltYWwgc3RyaW5nIHRvIHVuc2lnbmVkIGludGVnZXIuCi0gKiBJZiBsZW4gIT0gMCB0aGVuIG9ubHkgJ2xlbicgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFyZSBjb252ZXJ0ZWQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVjX3RvX3VpbnQgKHVuc2lnbmVkIGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCB2YWw7Ci0KLQlpZiAoIWxlbikgCi0JCWxlbiA9IHN0cmxlbihzdHIpOwotCi0JZm9yICh2YWwgPSAwOyBsZW4gJiYgaXNkaWdpdCgqc3RyKTsgKytzdHIsIC0tbGVuKQotCQl2YWwgPSAodmFsICogMTApICsgKCpzdHIgLSAodW5zaWduZWQpJzAnKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdG9yZSBhIFVEUCBtYW5hZ2VtZW50IHBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KLSAqLwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChpbnQgdWRwX3R5cGUsIGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRsY2kpCi17Ci0gICAgICAgIGludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0JCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBkbGNpKTsKLQlmcl9jaGFubmVsX3QgKmNoYW47Ci0JCi0JaWYgKCFkZXYgfHwgIShjaGFuPWRldi0+cHJpdikpCi0JCXJldHVybiAxOwotCQotICAgICAgICBpZighY2FyZC0+dS5mLnVkcF9wa3RfbGd0aCAmJiAoc2tiLT5sZW4gPD0gTUFYX0xHVEhfVURQX01HTlRfUEtUKSl7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5mLnVkcF9wa3RfbGd0aCA9IHNrYi0+bGVuICsgY2hhbi0+ZnJfaGVhZGVyX2xlbjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX3R5cGUgPSB1ZHBfdHlwZTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX3BrdF9zcmMgPSB1ZHBfcGt0X3NyYzsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudWRwX2RsY2kgPSBkbGNpOwotICAgICAgICAgICAgICAgIG1lbWNweShjYXJkLT51LmYudWRwX3BrdF9kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLSAgICAgICAgICAgICAgICB1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0KLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiRVJST1I6IFVEUCBwYWNrZXQgbm90IHN0b3JlZCBmb3IgRExDSSAlZFxuIiwgCi0JCQkJCQkJZGxjaSk7Ci0JfQotCi0gICAgICAgIGlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQotCQkKLSAgICAgICAgcmV0dXJuKHVkcF9wa3Rfc3RvcmVkKTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgY2FsbCBvZiB0eXBlIEZQSVBFOE5ECi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90KiBjYXJkKQotewotCi0JaW50IGNfcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBjaGFyIGZyYW1lczsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIHNob3J0IGJ1ZmZlcl9sZW5ndGg7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICBmcl9jaGFubmVsX3QqIGNoYW47Ci0gICAgICAgIGZyX3VkcF9wa3RfdCAqZnJfdWRwX3BrdDsKLQl1bnNpZ25lZCBzaG9ydCBudW1fdHJjX2VsczsKLQlmcl90cmNfZWxfdCogcHRyX3RyY19lbDsKLQlmcl90cmNfZWxfdCB0cmNfZWw7Ci0JZnBpcGVtb25fdHJjX3QqIGZwaXBlbW9uX3RyYzsKLQotCWNoYXIgdWRwX3BrdF9zcmMgPSBjYXJkLT51LmYudWRwX3BrdF9zcmM7IAotCWludCBkbGNpID0gY2FyZC0+dS5mLnVkcF9kbGNpOwotCi0JLyogRmluZCBuZXR3b3JrIGludGVyZmFjZSBmb3IgdGhpcyBwYWNrZXQgKi8KLQlkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgZGxjaSk7Ci0JaWYgKCFkZXYpewotCQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQkJcmV0dXJuIDE7Ci0JfQotICAgICAgICBpZiAoKGNoYW4gPSBkZXYtPnByaXYpID09IE5VTEwpewotCQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogSWYgdGhlIFVEUCBwYWNrZXQgaXMgZnJvbSB0aGUgbmV0d29yaywgd2UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gCi0JICAgdHJhbnNtaXQgYSByZXNwb25zZS4gQmVmb3JlIGRvaW5nIHNvLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSB0aGF0Ci0JICAgd2UgYXJlIG5vdCBjdXJyZW50bHkgdHJhbnNtaXR0aW5nIGEgZnJhbWUgKGluICdpZl9zZW5kKCknKSBhbmQKLQkgICB0aGF0IHdlIGFyZSBub3QgYWxyZWFkeSBpbiBhICdkZWxheWVkIHRyYW5zbWl0JyBzdGF0ZS4KLQkqLwotCWlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQkJaWYgKGNoZWNrX3R4X3N0YXR1cyhjYXJkLGRldikpewotCQkJY2FyZC0+dS5mLnVkcF9wa3RfbGd0aCA9IDA7Ci0JCQlyZXR1cm4gMTsKLQkJfQotICAgICAgICB9Ci0KLSAgICAgICAgZnJfdWRwX3BrdCA9IChmcl91ZHBfcGt0X3QgKiljYXJkLT51LmYudWRwX3BrdF9kYXRhOwotCi0JaWYodWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCQotCQlzd2l0Y2goZnJfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLQotCQkJY2FzZSBGUl9SRUFEX01PREVNX1NUQVRVUzoKLQkJCWNhc2UgRlJfUkVBRF9TVEFUVVM6Ci0JCQljYXNlIEZQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJY2FzZSBGUl9SRUFEX0VSUk9SX1NUQVRTOgotCQkJY2FzZSBGUElQRV9EUklWRVJfU1RBVF9HRU46Ci0JCQljYXNlIEZSX1JFQURfU1RBVElTVElDUzoKLQkJCWNhc2UgRlJfUkVBRF9BRERfRExDX1NUQVRTOgotCQkJY2FzZSBGUl9SRUFEX0NPTkZJRzoKLQkJCWNhc2UgRlJfUkVBRF9DT0RFX1ZFUlNJT046Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmKCF1ZHBfbWdtdF9yZXFfdmFsaWQpIHsKLQkJLyogc2V0IGxlbmd0aCB0byAwICovCi0JCWZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAwOwotCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDB4Q0Q7IAotCQkKLQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VyciArKzsKLQotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsJCi0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBXYXJuaW5nLCBJbGxlZ2FsIFVEUCBjb21tYW5kIGF0dGVtcHRlZCBmcm9tIG5ldHdvcms6ICV4XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCk7Ci0JCX0KLQkJCi0JfSBlbHNlIHsgICAKLSAgICAgICAgICAgCi0JCXN3aXRjaChmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCWNhc2UgRlBJUEVfRU5BQkxFX1RSQUNJTkc6Ci0JCQlpZighY2FyZC0+VHJhY2luZ0VuYWJsZWQpIHsKLQkJCQlkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgIAkJCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX1RSQUNFX0NPTkZJRzsKLSAgICAgICAgICAgICAgICAgICAgICAgCQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAJCQltYm94LT5jbWQuZGxjaSA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgCQkJbWJveC0+ZGF0YVswXSA9IGZyX3VkcF9wa3QtPmRhdGFbMF0gfCAKLQkJCQkJCVJFU0VUX1RSQzsKLSAgICAgICAgICAgICAgICAgICAgCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gCi0JCQkJCSAgICAgCQltYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0gICAgICAgICAgICAgICAgICAgICAgIAkJfSB3aGlsZSAoZXJyICYmIGNfcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsCi0JCQkJCSBtYm94KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZihlcnIpIHsKLQkJCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCQkvKiBzZXQgdGhlIHJldHVybiBjb2RlICovCi0JCQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPQotICAJCQkJCQltYm94LT5jbWQucmVzdWx0OwotCQkJCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgTk9fVFJDX0VMRU1FTlRTX09GRiwKLQkJCQkJCSZudW1fdHJjX2VscywgMik7Ci0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgQkFTRV9UUkNfRUxFTUVOVFNfT0ZGLAotCQkJCQkJJmNhcmQtPnUuZi50cmNfZWxfYmFzZSwgNCk7Ci0JCQkJY2FyZC0+dS5mLmN1cnJfdHJjX2VsID0gY2FyZC0+dS5mLnRyY19lbF9iYXNlOwotICAgICAgICAgICAgIAkJCWNhcmQtPnUuZi50cmNfZWxfbGFzdCA9IGNhcmQtPnUuZi5jdXJyX3RyY19lbCArCi0JCQkJCQkJKChudW1fdHJjX2VscyAtIDEpICogCi0JCQkJCQkJc2l6ZW9mKGZyX3RyY19lbF90KSk7Ci0gICAKLQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gdHJhY2UgZGF0YSBhcmVhIGluICovCi0JCQkJLyogdGhlIFVEUCBwYWNrZXQgKi8KLQkJCQljYXJkLT51LmYudHJjX2Jmcl9zcGFjZT0oTUFYX0xHVEhfVURQX01HTlRfUEtUIC0KLQkJCQkJLy9zaXplb2YoZnJfZW5jYXBfaGRyX3QpIC0KLQkJCQkJc2l6ZW9mKGlwX3BrdF90KSAtCi0JCQkJCXNpemVvZih1ZHBfcGt0X3QpIC0KLQkJCQkJc2l6ZW9mKHdwX21nbXRfdCkgLQotCQkJCQlzaXplb2YoY2Jsb2NrX3QpKTsKLQotCQkJCS8qIHNldCByZXR1cm4gY29kZSAqLwotCQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJCi0JCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgCS8qIHNldCByZXR1cm4gY29kZSB0byBsaW5lIHRyYWNlIGFscmVhZHkgCi0JCQkJICAgZW5hYmxlZCAqLwotCQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgICAgICAJfQotCi0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCWNhcmQtPlRyYWNpbmdFbmFibGVkID0gMTsKLQkJCWJyZWFrOwotCi0KLSAgICAgICAgICAgICAgICBjYXNlIEZQSVBFX0RJU0FCTEVfVFJBQ0lORzoKLQkJCWlmKGNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0JCQkKLQkJCQlkbyB7Ci0JCQkJCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfU0VUX1RSQUNFX0NPTkZJRzsKLQkJCQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCQkJCW1ib3gtPmNtZC5kbGNpID0gMHgwMDsKLQkJCQkJbWJveC0+ZGF0YVswXSA9IH5BQ1RJVkFURV9UUkM7Ci0JCQkJCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IAotCQkJCQkJCW1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkJCQl9IHdoaWxlIChlcnIgJiYgY19yZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotICAgICAgICAgICAgICAgICAgICAJfQotCi0gICAgICAgICAgICAgICAgICAgIAkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQlicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRlBJUEVfR0VUX1RSQUNFX0lORk86Ci0KLQkJICAgICAgICAvKiBMaW5lIHRyYWNlIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gdGhlIDUwMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZXR1cm4gY29kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0JCQlwdHJfdHJjX2VsID0gKHZvaWQgKiljYXJkLT51LmYuY3Vycl90cmNfZWw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSA9IDB4MDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihmcmFtZXMgPSAwOyBmcmFtZXMgPCBNQVhfRlJNU19UUkFDRUQ7IGZyYW1lcyArKykgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfcGVlaygmY2FyZC0+aHcsICh1bnNpZ25lZCBsb25nKXB0cl90cmNfZWwsCi0JCQkJCSAgKHZvaWQgKikmdHJjX2VsLmZsYWcsCi0JCQkJCSAgc2l6ZW9mKGZyX3RyY19lbF90KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyY19lbC5mbGFnID09IDB4MDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChjYXJkLT51LmYudHJjX2Jmcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBzaXplb2YoZnBpcGVtb25fdHJjX2hkcl90KSkgeyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcl91ZHBfcGt0LT5kYXRhWzB4MDBdIHw9IE1PUkVfVFJDX0RBVEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotCQkJCWZwaXBlbW9uX3RyYyA9IAotCQkJCQkoZnBpcGVtb25fdHJjX3QgKikmZnJfdWRwX3BrdC0+ZGF0YVtidWZmZXJfbGVuZ3RoXTsgCi0JCQkJZnBpcGVtb25fdHJjLT5mcGlwZW1vbl90cmNfaGRyLnN0YXR1cyA9Ci0JCQkJCXRyY19lbC5hdHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIudG1zdGFtcCA9Ci0JCQkJCXRyY19lbC50bXN0YW1wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIubGVuZ3RoID0gCi0JCQkJCXRyY19lbC5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXRyY19lbC5vZmZzZXQgfHwgIXRyY19lbC5sZW5ndGgpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIuZGF0YV9wYXNzZWQgPSAweDAwOwotCi0gCQkJCX1lbHNlIGlmKCh0cmNfZWwubGVuZ3RoICsgc2l6ZW9mKGZwaXBlbW9uX3RyY19oZHJfdCkgKyAxKSA+Ci0JCQkJCShjYXJkLT51LmYudHJjX2Jmcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpKXsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwaXBlbW9uX3RyYy0+ZnBpcGVtb25fdHJjX2hkci5kYXRhX3Bhc3NlZCA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSB8PSBNT1JFX1RSQ19EQVRBOwotIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBpcGVtb25fdHJjLT5mcGlwZW1vbl90cmNfaGRyLmRhdGFfcGFzc2VkID0gMHgwMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGxhX3BlZWsoJmNhcmQtPmh3LCB0cmNfZWwub2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJICBmcGlwZW1vbl90cmMtPmRhdGEsCi0JCQkJCQkgIHRyY19lbC5sZW5ndGgpOwotCQkJCX0JCQkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmNfZWwuZmxhZyA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfcG9rZSgmY2FyZC0+aHcsICh1bnNpZ25lZCBsb25nKXB0cl90cmNfZWwsCi0JCQkJCSAgJnRyY19lbC5mbGFnLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQlwdHJfdHJjX2VsICsrOwotCQkJCWlmKCh2b2lkICopcHRyX3RyY19lbCA+IGNhcmQtPnUuZi50cmNfZWxfbGFzdCkKLQkJCQkJcHRyX3RyY19lbCA9ICh2b2lkKiljYXJkLT51LmYudHJjX2VsX2Jhc2U7Ci0KLQkJCQlidWZmZXJfbGVuZ3RoICs9IHNpemVvZihmcGlwZW1vbl90cmNfaGRyX3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZihmcGlwZW1vbl90cmMtPmZwaXBlbW9uX3RyY19oZHIuZGF0YV9wYXNzZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWJ1ZmZlcl9sZW5ndGggKz0gdHJjX2VsLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJfQotCi0JCQkJaWYoZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSAmIE1PUkVfVFJDX0RBVEEpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIAotCQkJaWYoZnJhbWVzID09IE1BWF9GUk1TX1RSQUNFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCWZyX3VkcF9wa3QtPmRhdGFbMHgwMF0gfD0gTU9SRV9UUkNfREFUQTsKLQkJCX0KLSAgICAgICAgICAgICAKLQkJCWNhcmQtPnUuZi5jdXJyX3RyY19lbCA9ICh2b2lkICopcHRyX3RyY19lbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHBhc3NlZCAqLwotCQkJZnJfdWRwX3BrdC0+ZGF0YVsweDAwXSB8PQotCQkJCSgoZnJhbWVzIDw8IDEpICYgKE1BWF9GUk1TX1RSQUNFRCA8PCAxKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB0aGUgZGF0YSBsZW5ndGggYW5kIHJldHVybiBjb2RlICovCi0JCQlmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gbWJveC0+Y21kLmxlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBGUElQRV9GVDFfUkVBRF9TVEFUVVM6Ci0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCAweEYwMjAsCi0JCQkJJmZyX3VkcF9wa3QtPmRhdGFbMHgwMF0gLCAyKTsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBtYm94LT5jbWQubGVuZ3RoID0gMjsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGUElQRV9GTFVTSF9EUklWRVJfU1RBVFM6Ci0JCQlpbml0X2NoYW5fc3RhdGlzdGljcyhjaGFuKTsKLQkJCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoY2FyZCk7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBGUElQRV9ST1VURVJfVVBfVElNRToKLQkJCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCQkJY2hhbi0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJCWNoYW4tPnJvdXRlcl9zdGFydF90aW1lOwotICAgIAkgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopJmZyX3VkcF9wa3QtPmRhdGEgPQotICAgIAkJCQljaGFuLT5yb3V0ZXJfdXBfdGltZTsJCi0JCQltYm94LT5jbWQubGVuZ3RoID0gZnJfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IDQ7Ci0JCQlmcl91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRlBJUEVfRFJJVkVSX1NUQVRfSUZTRU5EOgotCQkJbWVtY3B5KGZyX3VkcF9wa3QtPmRhdGEsCi0JCQkJJmNoYW4tPmRydnN0YXRzX2lmX3NlbmQuaWZfc2VuZF9lbnRyeSwKLQkJCQlzaXplb2YoaWZfc2VuZF9zdGF0X3QpKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID1zaXplb2YoaWZfc2VuZF9zdGF0X3QpOwkKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0JCi0JCWNhc2UgRlBJUEVfRFJJVkVSX1NUQVRfSU5UUjoKLQotCQkJbWVtY3B5KGZyX3VkcF9wa3QtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXJkLT5zdGF0aXN0aWNzLmlzcl9lbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmZnJfdWRwX3BrdC0+ZGF0YVtzaXplb2YoZ2xvYmFsX3N0YXRzX3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4tPmRydnN0YXRzX3J4X2ludHIucnhfaW50cl9ub19zb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotCi0JCQltYm94LT5jbWQubGVuZ3RoID0gZnJfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IAotCQkJCQlzaXplb2YoZ2xvYmFsX3N0YXRzX3QpICsKLQkJCQkJc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGUElQRV9EUklWRVJfU1RBVF9HRU46Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoZnJfdWRwX3BrdC0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4tPmRydnN0YXRzX2dlbi5VRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmZyX3VkcF9wa3QtPmRhdGFbc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FyZC0+c3RhdGlzdGljcywgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ib3gtPmNtZC5sZW5ndGggPSBmcl91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCWZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQotCQljYXNlIEZSX0ZUMV9TVEFUVVNfQ1RSTDoKLQkJCWlmKGZyX3VkcF9wa3QtPmRhdGFbMF0gPT0gMSkgewotCQkJCWlmKHJDb3VudCsrICE9IDAgKXsKLQkJCQkJZnJfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQkJCW1ib3gtPmNtZC5sZW5ndGggPSAxOwotCQkJCQlicmVhazsKLQkJCQl9IAotCQkJfQotICAgICAgICAgICAKLQkJCS8qIERpc2FibGUgRlQxIE1PTklUT1IgU1RBVFVTICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihmcl91ZHBfcGt0LT5kYXRhWzBdID09IDApIHsKLQkJCQlpZiggLS1yQ291bnQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfSAKLQkJCX0gIAotCQkJZ290byB1ZHBfbWdtdF9kZmx0OwotCi0JCQkKLQkJZGVmYXVsdDoKLXVkcF9tZ210X2RmbHQ6Ci0gCQkJZG8gewotCQkJCW1lbWNweSgmbWJveC0+Y21kLAotCQkJCQkmZnJfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQsCi0JCQkJCXNpemVvZihmcl9jbWRfdCkpOwotCQkJCWlmKG1ib3gtPmNtZC5sZW5ndGgpIHsKLQkJCQkJbWVtY3B5KCZtYm94LT5kYXRhLAotCQkJCQkJKGNoYXIgKilmcl91ZHBfcGt0LT5kYXRhLAotCQkJCQkJbWJveC0+Y21kLmxlbmd0aCk7Ci0JCQkJfQotIAkJCQkKLQkJCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogCi0JCQkJCUNNRF9USU1FT1VUOwotCQkJfSB3aGlsZSAoZXJyICYmIGNfcmV0cnktLSAmJiBmcl9ldmVudChjYXJkLCBlcnIsIG1ib3gpKTsKLQotCQkJaWYoIWVycikKLQkJCQljaGFuLT5kcnZzdGF0c19nZW4uCi0JCQkJCVVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF9PSyArKzsKLQkJCWVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+ZHJ2c3RhdHNfZ2VuLgotCQkJCQlVRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfdGltZW91dCArKzsKLQotICAgICAgIAkgICAgICAgICAgICAgICAgLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCQkJbWVtY3B5KCZmcl91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCwKLQkJCQkmbWJveC0+Y21kLCBzaXplb2YoZnJfY21kX3QpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAJaWYobWJveC0+Y21kLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAltZW1jcHkoJmZyX3VkcF9wa3QtPmRhdGEsCi0JCQkJCSZtYm94LT5kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQkJCX0KLQkJfSAKLSAgICAgICAgfQotICAgCi0gICAgICAgIC8qIEZpbGwgVURQIFRUTCAqLwotICAgICAgICBmcl91ZHBfcGt0LT5pcF9wa3QudHRsID0gY2FyZC0+d2FuZGV2LnR0bDsKLSAgICAgICAgbGVuID0gcmVwbHlfdWRwKGNhcmQtPnUuZi51ZHBfcGt0X2RhdGEsIG1ib3gtPmNtZC5sZW5ndGgpOwotCi0gICAgICAgIGlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQotCQljaGFuLT5mcl9oZWFkZXJfbGVuPTI7Ci0JCWNoYW4tPmZyX2hlYWRlclswXT1ROTIyX1VJOwotCQljaGFuLT5mcl9oZWFkZXJbMV09TkxQSURfSVA7Ci0JCQkKLQkJZXJyID0gZnJfc2VuZF9kYXRhX2hlYWRlcihjYXJkLCBkbGNpLCAwLCBsZW4sIAotCQkJY2FyZC0+dS5mLnVkcF9wa3RfZGF0YSxjaGFuLT5mcl9oZWFkZXJfbGVuKTsKLQkJaWYgKGVycil7IAotCQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9wYXNzZWQgKys7Ci0JCX1lbHNlewotCQkJY2hhbi0+ZHJ2c3RhdHNfZ2VuLlVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9mYWlsZWQgKys7Ci0JCX0KLQkJCi0JfSBlbHNlIHsKLQkJLyogQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlpZigobmV3X3NrYiA9IGRldl9hbGxvY19za2IobGVuKSkgIT0gTlVMTCkgewotCi0JCQkvKiBjb3B5IGRhdGEgaW50byBuZXdfc2tiICovCi0JCQlidWYgPSBza2JfcHV0KG5ld19za2IsIGxlbik7Ci0JCQltZW1jcHkoYnVmLCBjYXJkLT51LmYudWRwX3BrdF9kYXRhLCBsZW4pOwotICAgICAgICAKLQkJCWNoYW4tPmRydnN0YXRzX2dlbi4KLQkJCQlVRFBfUElQRV9tZ210X3Bhc3NlZF90b19zdGFjayArKzsKLQkJCW5ld19za2ItPmRldiA9IGRldjsKLQkJCW5ld19za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotCQkJbmV3X3NrYi0+bWFjLnJhdyA9IG5ld19za2ItPmRhdGE7Ci0JCQluZXRpZl9yeChuZXdfc2tiKTsKLSAgICAgICAgICAgIAkKLQkJfSBlbHNlIHsKLQkJCWNoYW4tPmRydnN0YXRzX2dlbi5VRFBfUElQRV9tZ210X25vX3NvY2tldCArKzsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IFVEUCBtZ210IGNtbmQsIG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAJfQotICAgICAgICB9Ci0KLQljYXJkLT51LmYudWRwX3BrdF9sZ3RoID0gMDsKLQotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBJbnZlcnNlIEFSUCBSZXF1ZXN0Ci0gKi8KLQotaW50IHNlbmRfaW5hcnBfcmVxdWVzdChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycj0wOwotCi0JYXJwaGRyXzE0OTBfdCAqQXJwUGFja2V0OwotCWFycGhkcl9mcl90ICphcnBoZHI7Ci0JZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQotCWluX2RldiA9IGRldi0+aXBfcHRyOwotCi0JaWYoaW5fZGV2ICE9IE5VTEwgKSB7CQotCi0JCUFycFBhY2tldCA9IGttYWxsb2Moc2l6ZW9mKGFycGhkcl8xNDkwX3QpICsgc2l6ZW9mKGFycGhkcl9mcl90KSwgR0ZQX0FUT01JQyk7Ci0JCS8qIFNOQVAgSGVhZGVyIGluZGljYXRpbmcgQVJQICovCi0JCUFycFBhY2tldC0+Y29udHJvbAk9IDB4MDM7Ci0JCUFycFBhY2tldC0+cGFkCQk9IDB4MDA7Ci0JCUFycFBhY2tldC0+TkxQSUQJPSAweDgwOwotCQlBcnBQYWNrZXQtPk9VSVswXQk9IDA7Ci0JCUFycFBhY2tldC0+T1VJWzFdCT0gMDsKLQkJQXJwUGFja2V0LT5PVUlbMl0JPSAwOwotCQlBcnBQYWNrZXQtPlBJRAkJPSAweDA2MDg7Ci0KLQkJYXJwaGRyID0gKGFycGhkcl9mcl90ICopKEFycFBhY2tldCArIDEpOyAvLyBHbyB0byBBUlAgUGFja2V0Ci0KLQkJLyogSW5BUlAgcmVxdWVzdCAqLwkJCi0JCWFycGhkci0+YXJfaHJkID0gMHgwRjAwOwkvKiBGcmFtZSBSZWxheSBIVyB0eXBlICovCi0JCWFycGhkci0+YXJfcHJvID0gMHgwMDA4OwkvKiBJUCBQcm90b2NvbAkgICAgICAgKi8KLQkJYXJwaGRyLT5hcl9obG4gPSAyOwkJLyogSFcgYWRkciBsZW5ndGggICAgICAqLwotCQlhcnBoZHItPmFyX3BsbiA9IDQ7CQkvKiBJUCBhZGRyIGxlbmd0aCAgICAgICovCi0JCWFycGhkci0+YXJfb3AgPSBodG9ucygweDA4KTsJLyogSW5BUlAgUmVxdWVzdCAgICAgICAqLwotCQlhcnBoZHItPmFyX3NoYSA9IDA7IAkJLyogc3JjIEhXIERMQ0kgLSBEb2Vzbid0IG1hdHRlciAqLwotCQlpZihpbl9kZXYtPmlmYV9saXN0ICE9IE5VTEwpCi0JCQlhcnBoZHItPmFyX3NpcCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsgIC8qIExvY2FsIEFkZHJlc3MgICAgICAgKi9lbHNlCi0JCQlhcnBoZHItPmFyX3NpcCA9IDA7Ci0JCWFycGhkci0+YXJfdGhhID0gMDsgCQkvKiBkc3QgSFcgRExDSSAtIERvZXNuJ3QgbWF0dGVyICovCi0JCWFycGhkci0+YXJfdGlwID0gMDsJCS8qIFJlbW90ZSBBZGRyZXNzIC0tIHdoYXQgd2Ugd2FudCAqLwotCi0JCWVyciA9IGZyX3NlbmQoY2FyZCwgY2hhbi0+ZGxjaSwgMCwgc2l6ZW9mKGFycGhkcl8xNDkwX3QpICsgc2l6ZW9mKGFycGhkcl9mcl90KSwKLQkJICAgCQkJKHZvaWQgKilBcnBQYWNrZXQpOwotCi0JCWlmICghZXJyKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIlxuJXM6IFNlbmRpbmcgSW5BUlAgcmVxdWVzdCBvbiBETENJICVkLlxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQljbGVhcl9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCX0KLQotCQlrZnJlZShBcnBQYWNrZXQpOwotCX1lbHNlewotCQlwcmludGsoS0VSTl9JTkZPICIlczogSU5BUlAgRVJST1I6ICVzIGRvZXNuJ3QgaGF2ZSBhIGxvY2FsIElQIGFkZHJlc3MhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0JCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaGVjayBwYWNrZXQgZm9yIEFSUCBUeXBlCi0gKi8KLQotaW50IGlzX2FycCh2b2lkICpidWYpCi17Ci0JYXJwaGRyXzE0OTBfdCAqYXJwaGRyID0gKGFycGhkcl8xNDkwX3QgKilidWY7Ci0JCi0JaWYgKGFycGhkci0+cGFkICAgPT0gMHgwMCAgJiYKLQkgICAgYXJwaGRyLT5OTFBJRCA9PSAweDgwICAmJgotCSAgICBhcnBoZHItPlBJRCAgID09IDB4MDYwOCkgCi0JCXJldHVybiAxOwotCWVsc2UgcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIEFSUCBQYWNrZXQgVHlwZQotICovCi0KLWludCBwcm9jZXNzX0FSUChhcnBoZHJfMTQ5MF90ICpBcnBQYWNrZXQsIHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQotCi0JYXJwaGRyX2ZyX3QgKmFycGhkciA9IChhcnBoZHJfZnJfdCAqKShBcnBQYWNrZXQgKyAxKTsgLyogU2tpcCBoZWFkZXIgKi8KLQlmcl9yeF9idWZfY3RsX3QqIGZyYnVmID0gY2FyZC0+cnhtYjsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JZnJfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwkJCi0JCi0JLyogQmVmb3JlIHdlIHRyYW5zbWl0IEFSUCBwYWNrZXQsIHdlIG11c3QgY2hlY2sgCi0JICogdG8gc2VlIHRoYXQgd2UgYXJlIG5vdCBjdXJyZW50bHkgdHJhbnNtaXR0aW5nIGEgCi0JICogZnJhbWUgKGluICdpZl9zZW5kKCknKSBhbmQgdGhhdCB3ZSBhcmUgbm90IAotCSAqIGFscmVhZHkgaW4gYSAnZGVsYXllZCB0cmFuc21pdCcgc3RhdGUuICovCi0JaWYgKGNoZWNrX3R4X3N0YXR1cyhjYXJkLGRldikpewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2FibGluZyBjb21taW5pY2F0aW9uIHRvIHByb2Nlc3MgQVJQXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJfQotCQlzZXRfYml0KEFSUF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQotCS8qIENoZWNrIHRoYXQgSVAgYWRkcmVzc2VzIGV4aXN0IGZvciBvdXIgbmV0d29yayBhZGRyZXNzICovCi0JaWYgKGluX2RldiA9PSBOVUxMIHx8IGluX2Rldi0+aWZhX2xpc3QgPT0gTlVMTCkgCi0JCXJldHVybiAtMTsKLQotCXN3aXRjaCAobnRvaHMoYXJwaGRyLT5hcl9vcCkpIHsKLQotCWNhc2UgMHgwODogIC8vIEludmVyc2UgQVJQIHJlcXVlc3QgIC0tIFNlbmQgUmVwbHksIGFkZCByb3V0ZS4KLQkJCQotCQkvKiBDaGVjayBmb3IgdmFsaWQgQWRkcmVzcyAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjdmQgUHRQIGFkZHIgLUluQXJwIFJlcTogJXUuJXUuJXUuJXVcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChhcnBoZHItPmFyX3NpcCkpOwotCi0KLQkJLyogQ2hlY2sgdGhhdCB0aGUgbmV0d29yayBhZGRyZXNzIGlzIHRoZSBzYW1lIGFzIG91cnMsIG9ubHkKLSAgICAgICAgICAgICAgICAgKiBpZiB0aGUgbmV0b3dyayBtYXNrIGlzIG5vdCAyNTUuMjU1LjI1NS4yNTUuIE90aGVyd2lzZQotICAgICAgICAgICAgICAgICAqIHRoaXMgY2hlY2sgd291bGQgbm90IG1ha2Ugc2Vuc2UgKi8KLQotCQlpZiAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX21hc2sgIT0gMHhGRkZGRkZGRiAmJiAKLQkJICAgIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAmIGFycGhkci0+YXJfc2lwKSAhPSAKLQkJICAgIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAmIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEludmFsaWQgUHRQIGFkZHJlc3MuICV1LiV1LiV1LiV1ICBJbkFSUCBpZ25vcmVkLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsTklQUVVBRChhcnBoZHItPmFyX3NpcCkpOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbWFzayAldS4ldS4ldS4ldVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzaykpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2NhbCAldS4ldS4ldS4ldVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCkpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJaWYgKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCA9PSBhcnBoZHItPmFyX3NpcCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogTG9jYWwgYWRkciA9IFB0UCBhZGRyLiAgSW5BUlAgaWdub3JlZC5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQotCQlhcnBoZHItPmFyX29wID0gaHRvbnMoMHgwOSk7CS8qIEluQVJQIFJlcGx5ICovCi0KLQkJLyogU2V0IGFkZHJlc3NlcyAqLwotCQlhcnBoZHItPmFyX3RpcCA9IGFycGhkci0+YXJfc2lwOwotCQlhcnBoZHItPmFyX3NpcCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQotCQljaGFuLT5pcF9sb2NhbCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQkJY2hhbi0+aXBfcmVtb3RlID0gYXJwaGRyLT5hcl9zaXA7Ci0KLQkJZnJfc2VuZChjYXJkLCBmcmJ1Zi0+ZGxjaSwgMCwgZnJidWYtPmxlbmd0aCwgKHZvaWQgKilBcnBQYWNrZXQpOwotCi0JCWlmICh0ZXN0X2JpdChBUlBfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsgCQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBUlAgUHJvY2Vzc2VkIEVuYWJsaW5nIENvbW11bmljYXRpb24hXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCX0KLQkJfQotCQljbGVhcl9iaXQoQVJQX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCQotCQljaGFuLT5pcF9sb2NhbCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKLQkJY2hhbi0+aXBfcmVtb3RlID0gYXJwaGRyLT5hcl9zaXA7Ci0KLQkJLyogQWRkIFJvdXRlIEZsYWcgKi8KLQkJLyogVGhlIHJvdXRlIHdpbGwgYmUgYWRkZWQgaW4gdGhlIHBvbGxpbmcgcm91dGluZSBzbwotCQkgICB0aGF0IGl0IGlzIG5vdCBpbnRlcnJ1cHQgY29udGV4dC4gKi8KLQotCQljaGFuLT5yb3V0ZV9mbGFnID0gQUREX1JPVVRFOwotCQl0cmlnZ2VyX2ZyX3BvbGwgKGRldik7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIDB4MDk6ICAvLyBJbnZlcnNlIEFSUCByZXBseQotCi0JCS8qIENoZWNrIGZvciB2YWxpZCBBZGRyZXNzICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2ZCBQdFAgYWRkciAldS4ldS4ldS4ldSAtSW5BcnAgUmVwbHlcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIE5JUFFVQUQoYXJwaGRyLT5hcl9zaXApKTsKLQotCi0JCS8qIENvbXBhcmUgbmV0d29yayBhZGRyZXNzZXMsIG9ubHkgaWYgbmV0d29yayBtYXNrCi0gICAgICAgICAgICAgICAgICogaXMgbm90IDI1NS4yNTUuMjU1LjI1NSAgSXQgd291bGQgbm90IG1ha2Ugc2Vuc2UKLSAgICAgICAgICAgICAgICAgKiB0byBwZXJmb3JtIHRoaXMgdGVzdCBpZiB0aGUgbWFzayB3YXMgYWxsIDEncyAqLwotCi0JCWlmIChpbl9kZXYtPmlmYV9saXN0LT5pZmFfbWFzayAhPSAweGZmZmZmZmZmICYmCi0JCSAgICAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX21hc2sgJiBhcnBoZHItPmFyX3NpcCkgIT0gCi0JCQkoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX21hc2sgJiBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWwpKSB7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZhbGlkIFB0UCBhZGRyZXNzLiAgSW5BUlAgaWdub3JlZC5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSByZWNlaXZlZCBJUCBhZGRyZXNzIGlzIG5vdAotICAgICAgICAgICAgICAgICAqIHRoZSBzYW1lIGFzIG91ciBvd24gbG9jYWwgYWRkcmVzcyAqLwotCQlpZiAoaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsID09IGFycGhkci0+YXJfc2lwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTG9jYWwgYWRkciA9IFB0UCBhZGRyLiAgSW5BUlAgaWdub3JlZC5cbiIsIAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC0xOwotCQl9CQkJCi0KLQkJY2hhbi0+aXBfbG9jYWwgID0gaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2xvY2FsOwotCQljaGFuLT5pcF9yZW1vdGUgPSBhcnBoZHItPmFyX3NpcDsKLQotCQkvKiBBZGQgUm91dGUgRmxhZyAqLwotCQkvKiBUaGUgcm91dGUgd2lsbCBiZSBhZGRlZCBpbiB0aGUgcG9sbGluZyByb3V0aW5lIHNvCi0JCSAgIHRoYXQgaXQgaXMgbm90IGludGVycnVwdCBjb250ZXh0LiAqLwotCi0JCWNoYW4tPnJvdXRlX2ZsYWcgPSBBRERfUk9VVEU7Ci0JCWNoYW4tPmluYXJwID0gSU5BUlBfQ09ORklHVVJFRDsKLQkJdHJpZ2dlcl9mcl9wb2xsKGRldik7Ci0JCQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsgLy8gQVJQJ3MgYW5kIFJBUlAncyAtLSBTaG91bGRuJ3QgaGFwcGVuLgotCX0KLQotCXJldHVybiAwOwkKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHJpZ2dlcl9mcl9hcnAKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIAlBZGQgYW4gZnJfYXJwKCkgdGFzayBpbnRvIGEgYXJwCi0gKiAgICAgIHRpbWVyIGhhbmRsZXIgZm9yIGEgc3BlY2lmaWMgZGxjaS9pbnRlcmZhY2UuICAKLSAqICAgICAgVGhpcyB3aWxsIGtpY2sgdGhlIGZyX2FycCgpIHJvdXRpbmUgCi0gKiAgICAgIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuIAotICoKLSAqIFVzYWdlOgotICogCVRoaXMgdGltZXIgaXMgdXNlZCB0byBzZW5kIEFSUCByZXF1ZXN0cyBhdAotICogICAgICBjZXJ0YWluIHRpbWUgaW50ZXJ2YWxzLiAKLSAqIAlDYWxsZWQgYnkgYW4gaW50ZXJydXB0IHRvIHJlcXVlc3QgYW4gYWN0aW9uCi0gKiAgICAgIGF0IGEgbGF0ZXIgZGF0ZS4KLSAqLwkKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9hcnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlmcl9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0KLQltb2RfdGltZXIoJmNoYW4tPmZyX2FycF90aW1lciwgamlmZmllcyArIGNoYW4tPmluYXJwX2ludGVydmFsICogSFopOwotCXJldHVybjsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBUlAgUmVxdWVzdCBBY3Rpb24KLSAqCi0gKglUaGlzIGZ1bmNpdG9uIGlzIGNhbGxlZCBieSB0aW1lciBpbnRlcnJ1cHQgdG8gc2VuZCBhbiBhcnAgcmVxdWVzdAotICogICAgICB0byB0aGUgcmVtb3RlIGVuZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBmcl9hcnAgKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKLQlmcl9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jdm9sYXRpbGUgc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0JLyogU2VuZCBBUlAgcGFja2V0cyBmb3IgYWxsIGRldnMnIHVudGlsCi0gICAgICAgICAqIEFSUCBzdGF0ZSBjaGFuZ2VzIHRvIENPTkZJR1VSRUQgKi8KLQotCWlmIChjaGFuLT5pbmFycCA9PSBJTkFSUF9SRVFVRVNUICYmCi0JICAgIGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEICYmIAotCSAgICBjYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCXNldF9iaXQoMCwmY2hhbi0+aW5hcnBfcmVhZHkpOwotCQljYXJkLT51LmYudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX0FSUDsKLQkJZmxhZ3MtPmltYXNrIHw9IEZSX0lOVFJfVElNRVI7CQotCX0KLSAKLQlyZXR1cm47Ci19Ci0JCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQZXJmb3JtIHRoZSBJbnRlcnJ1cHQgVGVzdCBieSBydW5uaW5nIHRoZSBSRUFEX0NPREVfVkVSU0lPTiBjb21tYW5kIE1BWF9JTlRSXwotICogVEVTVF9DT1VOVEVSIHRpbWVzLgotICovCi1zdGF0aWMgaW50IGludHJfdGVzdCggc2RsYV90KiBjYXJkICkKLXsKLQlmcl9tYm94X3QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyLGk7Ci0KLSAgICAgICAgZXJyID0gZnJfc2V0X2ludHJfbW9kZShjYXJkLCBGUl9JTlRSX1JFQURZLCBjYXJkLT53YW5kZXYubXR1LCAwICk7Ci0JCi0JaWYgKGVyciA9PSBDTURfT0spIHsKLQotCQlmb3IgKCBpID0gMDsgaSA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUjsgaSsrICkgewotIAkJCS8qIFJ1biBjb21tYW5kIFJFQURfQ09ERV9WRVJTSU9OICovCi0JCQltYi0+Y21kLmxlbmd0aCAgPSAwOwotCQkJbWItPmNtZC5jb21tYW5kID0gRlJfUkVBRF9DT0RFX1ZFUlNJT047Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkJCWlmIChlcnIgIT0gQ01EX09LKSAKLQkJCQlmcl9ldmVudChjYXJkLCBlcnIsIG1iKTsKLQkJfQotCQotCX0gZWxzZSB7Ci0JCXJldHVybiBlcnI7CQotCX0KLQotCWVyciA9IGZyX3NldF9pbnRyX21vZGUoIGNhcmQsIDAsIGNhcmQtPndhbmRldi5tdHUsIDAgKTsKLQotCWlmKCBlcnIgIT0gQ01EX09LICkgCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgVURQIGNhbGwgaXQgaXMuIEZQSVBFOE5EID8KLSAqLwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCApCi17Ci0JZnJfdWRwX3BrdF90ICpmcl91ZHBfcGt0ID0gKGZyX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotCS8qIFF1aWNrIEhBQ0sgKi8KLQkKLQkKLSAgICAgICAgaWYoKGZyX3VkcF9wa3QtPmlwX3BrdC5wcm90b2NvbCA9PSBVRFBNR01UX1VEUF9QUk9UT0NPTCkgJiYKLQkJKGZyX3VkcF9wa3QtPmlwX3BrdC52ZXJfaW5ldF9oZHJfbGVuZ3RoID09IDB4NDUpICYmCi0JCShmcl91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSAKLQkJbnRvaHMoY2FyZC0+d2FuZGV2LnVkcF9wb3J0KSkgJiYKLQkJKGZyX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSAKLQkJVURQTUdNVF9SRVFVRVNUKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cm5jbXAoZnJfdWRwX3BrdC0+d3BfbWdtdC5zaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEUE1HTVRfRlBJUEVfU0lHTkFUVVJFLCA4KSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVRFBfRlBJUEVfVFlQRTsKLQkJCX0KLQl9Ci0gICAgICAgIHJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplcyB0aGUgU3RhdGlzdGljcyB2YWx1ZXMgaW4gdGhlIGZyX2NoYW5uZWwgc3RydWN0dXJlLgotICovCi12b2lkIGluaXRfY2hhbl9zdGF0aXN0aWNzKCBmcl9jaGFubmVsX3QqIGNoYW4pCi17Ci0gICAgICAgIG1lbXNldCgmY2hhbi0+ZHJ2c3RhdHNfaWZfc2VuZC5pZl9zZW5kX2VudHJ5LCAwLAotCQlzaXplb2YoaWZfc2VuZF9zdGF0X3QpKTsKLSAgICAgICAgbWVtc2V0KCZjaGFuLT5kcnZzdGF0c19yeF9pbnRyLnJ4X2ludHJfbm9fc29ja2V0LCAwLAotICAgICAgICAgICAgICAgIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotICAgICAgICBtZW1zZXQoJmNoYW4tPmRydnN0YXRzX2dlbi5VRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyLCAwLAotICAgICAgICAgICAgICAgIHNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci19Ci0JCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZXMgdGhlIFN0YXRpc3RpY3MgdmFsdWVzIGluIHRoZSBTZGxhX3Qgc3RydWN0dXJlLgotICovCi12b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCogY2FyZCApCi17Ci0JLyogSW50aWFsaXplIGdsb2JhbCBzdGF0aXN0aWNzIGZvciBhIGNhcmQgKi8KLSAgICAgICAgbWVtc2V0KCZjYXJkLT5zdGF0aXN0aWNzLmlzcl9lbnRyeSwgMCwgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlYWRfRExDSV9JQl9tYXBwaW5nKCBzZGxhX3QqIGNhcmQsIGZyX2NoYW5uZWxfdCogY2hhbiApCi17Ci0JZnJfbWJveF90KiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwkKLQlkbGNpX0lCX21hcHBpbmdfdCogcmVzdWx0OyAKLQlpbnQgZXJyLCBjb3VudGVyLCBmb3VuZDsJCi0KLQlkbyB7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gRlJfUkVBRF9ETENJX0lCX01BUFBJTkc7Ci0JCW1ib3gtPmNtZC5sZW5ndGggPSAwOwkKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIGZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCkpOwotCi0JaWYoIG1ib3gtPmNtZC5yZXN1bHQgIT0gMCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWFkIERMQ0kgSUIgTWFwcGluZyBmYWlsZWRcbiIsIAotCQkJY2hhbi0+bmFtZSk7Ci0JfQotCi0JY291bnRlciA9IG1ib3gtPmNtZC5sZW5ndGggLyBzaXplb2YoZGxjaV9JQl9tYXBwaW5nX3QpOwotCXJlc3VsdCA9ICh2b2lkICopbWJveC0+ZGF0YTsKLQkKLQlmb3VuZCA9IDA7Ci0JZm9yICg7IGNvdW50ZXI7IC0tY291bnRlciwgKytyZXN1bHQpIHsKLQkJaWYgKCByZXN1bHQtPmRsY2kgPT0gY2hhbi0+ZGxjaSApIHsKLQkJCWNoYW4tPklCX2FkZHIgPSByZXN1bHQtPmFkZHJfdmFsdWU7Ci0JCQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCl7Ci0JICAgICAgICAgICAgIAkJY2hhbi0+ZGxjaV9pbnRfaW50ZXJmYWNlID0KLQkJCQkJKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCQkJY2hhbi0+SUJfYWRkcik7Ci0gICAgICAgCQkJfWVsc2V7IAotCQkJCWNoYW4tPmRsY2lfaW50X2ludGVyZmFjZSA9IAotCQkJCQkodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQkJKGNoYW4tPklCX2FkZHIgJiAweDAwMDAxRkZGKSk7Ci0KLQkJCX0KLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwkKLQkJfSAKLQl9Ci0JaWYgKCFmb3VuZCkKLQkJcHJpbnRrKCBLRVJOX0lORk8gIiVzOiBETENJICVkIG5vdCBmb3VuZCBieSBJQiBNQVBQSU5HIGNtZFxuIiwgCi0JCWNhcmQtPmRldm5hbWUsIGNoYW4tPmRsY2kpOwotfQotCi0KLQotdm9pZCBzNTA4X3M1MTRfbG9jayhzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlpZiAoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci0JfWVsc2V7Ci0JCXNwaW5fbG9jaygmY2FyZC0+dS5mLmlmX3NlbmRfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQotCi12b2lkIHM1MDhfczUxNF91bmxvY2soc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0JaWYgKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotCX1lbHNlewotCQlzcGluX3VubG9jaygmY2FyZC0+dS5mLmlmX3NlbmRfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgUkVDRUlWRSBJTlRFUlJVUFQ6IEJPVFRPTSBIQUxGIEhBTkRMRVJTIAotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJoX2VucXVldWUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUluc2VydCBhIHJlY2VpdmVkIHBhY2tldCBpbnRvIGEgY2lyY3VsYXIKLSAqICAgICAgcnggcXVldWUuICBUaGlzIHBhY2tldCB3aWxsIGJlIHBpY2tlZCB1cCAKLSAqICAgICAgYnkgZnJfYmgoKSBhbmQgc2VudCB1cCB0aGUgc3RhY2sgdG8gdGhlCi0gKiAgICAgIHVzZXIuCi0gKiAgICAgICAJCi0gKiBVc2FnZTogCi0gKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSByeCBpbnRlcnJ1cHQsCi0gKiAgICAgIGluIEFQSSBtb2RlLgotICoKLSAqLwotCi1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKiBDaGVjayBmb3IgZnVsbCAqLwotCWZyX2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0KLQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmJoX2J1ZmZfdXNlZCkgPT0gTUFYX0JIX0JVRkYpewotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMTsgCi0JfQotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF93cml0ZV0pLT5za2IgPSBza2I7Ci0KLQlpZiAoY2hhbi0+Ymhfd3JpdGUgPT0gKE1BWF9CSF9CVUZGLTEpKXsKLQkJY2hhbi0+Ymhfd3JpdGU9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF93cml0ZTsKLQl9Ci0KLQlhdG9taWNfaW5jKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogdHJpZ2dlcl9mcl9iaAotICoKLSAqIERlc2NyaXB0aW9uOgotICogCUtpY2sgdGhlIGZyX2JoKCkgaGFuZGxlcgotICoKLSAqIFVzYWdlOgotICoJcnggaW50ZXJydXB0IGNhbGxzIHRoaXMgZnVuY3Rpb24gZHVyaW5nCi0gKiAgICAgIHRoZSBBUEkgbW9kZS4gCi0gKi8KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9iaCAoZnJfY2hhbm5lbF90ICpjaGFuKQotewotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCZjaGFuLT50cV93b3JraW5nKSl7Ci0JCXdhbnBpcGVfcXVldWVfd29yaygmY2hhbi0+Y29tbW9uLndhbnBpcGVfd29yayk7Ci0JfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGZyX2JoCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglGcmFtZSByZWxheSByZWNlaXZlIEJIIGhhbmRsZXIuIAotICoJRGVxdWV1ZSBkYXRhIGZyb20gdGhlIEJIIGNpcmN1bGFyIAotICoJYnVmZmVyIGFuZCBwYXNzIGl0IHVwIHRoZSBBUEkgc29jay4KLSAqICAgICAgIAkKLSAqIFJhdGlvbmFsZTogCi0gKglUaGlzIGZ1Y3Rpb24gaXMgdXNlZCB0byBvZmZsb2FkIHRoZSAKLSAqCXJ4X2ludGVycnVwdCBkdXJpbmcgQVBJIG9wZXJhdGlvbiBtb2RlLiAgCi0gKglUaGUgZnJfYmgoKSBmdW5jdGlvbiBleGVjdXRlcyBmb3IgZWFjaCAKLSAqCWRsY2kvaW50ZXJmYWNlLiAgCi0gKiAKLSAqICAgICAgT25jZSByZWNlaXZlIGludGVycnVwdCBjb3BpZXMgZGF0YSBmcm9tIHRoZQotICogICAgICBjYXJkIGludG8gYW4gc2tiIGJ1ZmZlciwgdGhlIHNrYiBidWZmZXIKLSAqICAJaXMgYXBwZW5kZWQgdG8gYSBjaXJjdWxhciBCSCBidWZmZXIuCi0gKiAgCVRoZW4gdGhlIGludGVycnVwdCBraWNrcyBmcl9iaCgpIHRvIGZpbmlzaCB0aGUKLSAqICAgICAgam9iIGF0IGEgbGF0ZXIgdGltZSAobm90IHdpdGhpbiB0aGUgaW50ZXJydXB0KS4KLSAqICAgICAgIAotICogVXNhZ2U6Ci0gKiAJSW50ZXJydXB0cyB1c2UgdGhpcyB0byBkZWZlciBhIHRhc2sgdG8gCi0gKiAgICAgIGEgcG9sbGluZyByb3V0aW5lLgotICoKLSAqLwkKLQotc3RhdGljIHZvaWQgZnJfYmgoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSAwKXsKLQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSl7Ci0KLQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCXNrYiAgPSAoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3JlYWRdKS0+c2tiOwotCi0JCWlmIChza2IgIT0gTlVMTCl7Ci0KLQkJCWlmIChjaGFuLT5jb21tb24uc2sgPT0gTlVMTCB8fCBjaGFuLT5jb21tb24uZnVuYyA9PSBOVUxMKXsKLQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJZnJfYmhfY2xlYW51cChkZXYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spICE9IDApewotCQkJCS8qIFNvY2sgZnVsbCBjYW5ub3Qgc2VuZCwgcXVldWUgdXMgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFub3RoZXIgdHJ5ICovCi0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLnJlY2VpdmVfYmxvY2ssMSk7Ci0JCQkJcmV0dXJuOwotCQkJfWVsc2V7Ci0JCQkJZnJfYmhfY2xlYW51cChkZXYpOwotCQkJfQotCQl9ZWxzZXsKLQkJCWZyX2JoX2NsZWFudXAoZGV2KTsKLQkJfQotCX0JCi0JY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBmcl9iaF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCi0JKChiaF9kYXRhX3QgKikmY2hhbi0+YmhfaGVhZFtjaGFuLT5iaF9yZWFkXSktPnNrYiA9IE5VTEw7Ci0KLQlpZiAoY2hhbi0+YmhfcmVhZCA9PSAoTUFYX0JIX0JVRkYtMSkpewotCQljaGFuLT5iaF9yZWFkPTA7Ci0JfWVsc2V7Ci0JCSsrY2hhbi0+YmhfcmVhZDsJCi0JfQotCi0JYXRvbWljX2RlYygmY2hhbi0+YmhfYnVmZl91c2VkKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIFBPTEwgQkggSEFORExFUlMgQU5EIEtJQ0sgUk9VVElORVMgCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2ZyX3BvbGwKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIAlBZGQgYSBmcl9wb2xsKCkgdGFzayBpbnRvIGEgdHFfc2NoZWR1bGVyIGJoIGhhbmRsZXIKLSAqICAgICAgZm9yIGEgc3BlY2lmaWMgZGxjaS9pbnRlcmZhY2UuICBUaGlzIHdpbGwga2ljawotICogICAgICB0aGUgZnJfcG9sbCgpIHJvdXRpbmUgYXQgYSBsYXRlciB0aW1lLiAKLSAqCi0gKiBVc2FnZToKLSAqIAlJbnRlcnJ1cHRzIHVzZSB0aGlzIHRvIGRlZmVyIGEgdGFrcyB0byAKLSAqICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0gKgotICovCQotc3RhdGljIHZvaWQgdHJpZ2dlcl9mcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZnJfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNjaGVkdWxlX3dvcmsoJmNoYW4tPmZyX3BvbGxfd29yayk7Ci0JcmV0dXJuOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBmcl9wb2xsCi0gKgkKLSAqIFJhdGlvbmFsZToKLSAqIAlXZSBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgcm91dGluZyB0YWJsZXMsIG9yCi0gKiAgICAgIGlwIGFkZHJlc3NlcyB3aXRoaW5nIHRoZSBpbnRlcnJ1cHQuIFRoZXJlZm9yZQotICogICAgICB3ZSBtdXN0IHBlcmZvcm0gc3VjaCBhY3RvbnMgb3V0c2lkZSBhbiBpbnRlcnJ1cHQgCi0gKiAgICAgIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogRGVzY3JpcHRpb246CQotICoJRnJhbWUgcmVsYXkgcG9sbGluZyByb3V0aW5lLCByZXNwb25zaWJsZSBmb3IgCi0gKiAgICAgCXNodXR0aW5nIGRvd24gaW50ZXJmYWNlcyB1cG9uIGRpc2Nvbm5lY3QKLSAqICAgICAJYW5kIGFkZGluZy9yZW1vdmluZyByb3V0ZXMuIAotICogICAgICAKLSAqIFVzYWdlOiAgICAgICAgCi0gKiAJVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBmcmFtZSByZWxheQotICogCWRsY2kvaW50ZXJmYWNlIHRocm91Z2ggYSB0cV9zY2hlZHVsZSBib3R0b20gaGFsZi4KLSAqICAgICAgCi0gKiAgICAgIHRyaWdnZXJfZnJfcG9sbCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8ga2ljawotICogICAgICB0aGUgZnJfcG9sbCByb3V0aW5lLiAgCi0gKi8KLQotc3RhdGljIHZvaWQgZnJfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0JZnJfY2hhbm5lbF90KiBjaGFuOwotCXNkbGFfdCAqY2FyZDsKLQl1OCBjaGVja19nYXRld2F5PTA7Ci0KLQlpZiAoIWRldiB8fCAoY2hhbiA9IGRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JCi0JLyogKFJlKUNvbmZpZ3VyYWl0b24gaXMgaW4gcHJvZ3Jlc3MsIHN0b3Agd2hhdCB5b3UgYXJlIAotCSAqIGRvaW5nIGFuZCBnZXQgb3V0ICovCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGNoYW4tPmNvbW1vbi5zdGF0ZSl7Ci0KLQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0KLQkJaWYgKHRlc3RfYml0KERZTl9PUFRfT04sJmNoYW4tPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgIXRlc3RfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICBkZXYtPmZsYWdzJklGRl9VUCl7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgaXMgRG93bi5cbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoZGV2LGRldi0+ZmxhZ3MmfklGRl9VUCk7Ci0JCQlzZXRfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pOwotCQkJY2hhbi0+cm91dGVfZmxhZyA9IE5PX1JPVVRFOwotCQkJCi0JCX1lbHNlewotCQkJaWYgKGNoYW4tPmluYXJwICE9IElOQVJQX05PTkUpCi0JCQkJcHJvY2Vzc19yb3V0ZShkZXYpOwkKLQkJfQotCQlicmVhazsKLQotCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmY2hhbi0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICB0ZXN0X2JpdChERVZfRE9XTiwgJmNoYW4tPmludGVyZmFjZV9kb3duKSAmJgotCQkgICAgIShkZXYtPmZsYWdzJklGRl9VUCkpewotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIGlzIFVwLlxuIiwgCi0JCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQotCQkJY2hhbmdlX2Rldl9mbGFncyhkZXYsZGV2LT5mbGFnc3xJRkZfVVApOwotCQkJY2xlYXJfYml0KERFVl9ET1dOLCAmY2hhbi0+aW50ZXJmYWNlX2Rvd24pOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoYW4tPmluYXJwICE9IElOQVJQX05PTkUpewotCQkJcHJvY2Vzc19yb3V0ZShkZXYpOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKGNoYW4tPmdhdGV3YXkgJiYgY2hlY2tfZ2F0ZXdheSkKLQkJCWFkZF9nYXRld2F5KGNhcmQsZGV2KTsKLQotCQlicmVhazsKLQotCX0KLQotCXJldHVybjsJCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGNoZWNrX3R4X3N0YXR1cwotICoKLSAqIFJhdGlvbmFsZToKLSAqCVdlIGNhbm5vdCB0cmFuc21pdCBmcm9tIGFuIGludGVycnVwdCB3aGlsZQotICogICAgICB0aGUgaWZfc2VuZCBpcyB0cmFuc21pdHRpbmcgZGF0YS4gIFRoZXJlZm9yZSwKLSAqICAgICAgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSB0eCBidWZmZXJzIGFyZQotICogICAgICBiZWdpbiB1c2VkLCBiZWZvcmUgd2UgdHJhbnNtaXQgZnJvbSBhbgotICogICAgICBpbnRlcnJ1cHQuCQotICogCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglDaGVja3Mgd2hldGhlciBpdCdzIHNhZmUgdG8gdXNlIHRoZSB0cmFuc21pdCAKLSAqICAgICAgYnVmZmVycy4gCi0gKgotICogVXNhZ2U6Ci0gKiAJQVJQIGFuZCBVRFAgaGFuZGxpbmcgcm91dGluZXMgdXNlIHRoaXMgZnVuY3Rpb24KLSAqICAgICAgYmVjYXVzZSwgdGhleSBuZWVkIHRvIHRyYW5zbWl0IGRhdGEgZHVyaW5nCi0gKiAgICAgIGFuIGludGVycnVwdC4KLSAqLwotCi1zdGF0aWMgaW50IGNoZWNrX3R4X3N0YXR1cyhzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpewotCQlpZiAodGVzdF9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkgfHwKLQkJCXRlc3RfYml0KFNFTkRfVFhJUlFfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgfHwgKGNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcpKQotICAgICAJCXJldHVybiAxOyAKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogbW92ZV9kZXZfdG9fbmV4dAotICogIAotICogRGVzY3JpcHRpb246Ci0gKglNb3ZlIHRoZSBkZXYgcG9pbnRlciB0byB0aGUgbmV4dCBsb2NhdGlvbiBpbiB0aGUKLSAqICAgICAgbGluayBsaXN0LiAgQ2hlY2sgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIAotICogICAgICBsaXN0LCBpZiBzbyBzdGFydCBmcm9tIHRoZSBiZWdpbmluZy4KLSAqCi0gKiBVc2FnZToKLSAqIAlUaW1lciBpbnRlcnJ1cHQgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIGVmZmljaWVudGx5Ci0gKiAgICAgIHN0ZXAgdGhyb3VnaCB0aGUgZGV2aWNlcyB0aGF0IG5lZWQgdG8gc2VuZCBBUlAgZGF0YS4KLSAqCi0gKi8KLQotc3RydWN0IG5ldF9kZXZpY2UgKm1vdmVfZGV2X3RvX25leHQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWlmIChjYXJkLT53YW5kZXYubmV3X2lmX2NudCAhPSAxKXsKLQkJaWYgKCEqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKQotCQkJcmV0dXJuIGNhcmQtPndhbmRldi5kZXY7Ci0JCWVsc2UKLQkJCXJldHVybiAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpOwotCX0KLQlyZXR1cm4gZGV2OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX2NvbmZpZ19mcgotICoKLSAqIFJhdGlvbmFsZToKLSAqCUFsbCBjb21tYW5kcyBtdXN0IGJlIHBlcmZvcm1lZCBpbnNpZGUgb2YgYSAgCi0gKiAgICAgIGludGVycnVwdC4gICAKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUtpY2sgdGhlIGNvbmZpZ19mcigpIHJvdXRpbmUgdGhyb3VnaHQgdGhlCi0gKiAgICAgIHRpbWVyIGludGVycnVwdC4KLSAqLwotCi0KLXN0YXRpYyB2b2lkIHRyaWdnZXJfY29uZmlnX2ZyIChzZGxhX3QgKmNhcmQpCi17Ci0JZnI1MDhfZmxhZ3NfdCogZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCWNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCWZsYWdzLT5pbWFzayB8PSBGUl9JTlRSX1RJTUVSOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGNvbmZpZ19mcgotICoKLSAqIFJhdGlvbmFsZToKLSAqIAlBbGwgY29tbWFuZHMgbXVzdCBiZSBwZXJmb3JtZWQgaW5zaWRlIG9mIGEgIAotICogICAgICBpbnRlcnJ1cHQuICAKLSAmCi0gKiBEZXNjcmlwdGlvbjoJCi0gKiAJQ29uZmlndXJlIGEgRExDSS4gVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZAotICogICAgICBieSBhIHRpbWVyX2ludGVycnVwdC4gIFRoZSBpZl9vcGVuKCkgZnVuY3Rpb24KLSAqICAgICAgdHJpZ2dlcnMgaXQuCi0gKgotICogVXNhZ2U6Ci0gKgluZXdfaWYoKSBjb2xsZWN0cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8KLSAqICAgICAgY29uZmlndXJlIHRoZSBETENJLiBJdCBzZXRzIHRoZSBjaGFuLT5kbGNpX3JlYWR5IAotICogICAgICBiaXQuICBXaGVuIHRoZSBpZl9vcGVuKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQKLSAqICAgICAgaXQgY2hlY2tzIHRoaXMgYml0LCBhbmQgaWYgaXRzIHNldCBpdCB0cmlnZ2VycwotICogICAgICB0aGUgdGltZXIgaW50ZXJydXB0IHRvIGV4ZWN1dGUgdGhlIGNvbmZpZ19mcigpCi0gKiAgICAgIGZ1bmN0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIGNvbmZpZ19mciAoc2RsYV90ICpjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JZnJfY2hhbm5lbF90ICpjaGFuOwotCi0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKSB7Ci0JCi0JCWlmICgoY2hhbj1kZXYtPnByaXYpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJCi0JCWlmICghdGVzdF9iaXQoMCwmY2hhbi0+Y29uZmlnX2RsY2kpKQotCQkJY29udGludWU7Ci0KLQkJY2xlYXJfYml0KDAsJmNoYW4tPmNvbmZpZ19kbGNpKTsKLQotCQkvKiBJZiBzaWduYWxsaW5nIGlzIHNldCB0byBOTywgdGhlbiBzZXR1cCAKLSAgICAgICAgCSAqIERMQ0kgYWRkcmVzc2VzIHJpZ2h0IGF3YXkuICBEb24ndCBoYXZlIHRvIHdhaXQgZm9yCi0JCSAqIGxpbmsgdG8gY29ubmVjdC4gCi0JCSAqLwotCQlpZiAoY2FyZC0+d2FuZGV2LnNpZ25hbGxpbmcgPT0gV0FOT1BUX05PKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTaWduYWxsaW5nIHNldCB0byBOTzogTWFwcGluZyBETENJJ3NcbiIsCi0JCQkJCWNhcmQtPndhbmRldi5uYW1lKTsKLQkJCWlmIChmcl9pbml0X2RsY2koY2FyZCxjaGFuKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBGYWlsZWQgdG8gY29uZmlndXJlIERMQ0kgJWkgIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSwgY2hhbi0+ZGxjaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJaWYgKGNhcmQtPndhbmRldi5zdGF0aW9uID09IFdBTk9QVF9DUEUpIHsKLQkKLQkJCXVwZGF0ZV9jaGFuX3N0YXRlKGRldik7CQotCQkJCi0JCQkvKiBDUEU6IGlzc3VlIGZ1bGwgc3RhdHVzIGVucXVpcnkgKi8KLQkJCWZyX2lzc3VlX2lzZihjYXJkLCBGUl9JU0ZfRlNFKTsKLQotCQl9IGVsc2UgewkKLQkJCS8qIEZSIHN3aXRjaDogYWN0aXZhdGUgRExDSShzKSAqLwotCQotCQkJLyogRm9yIFN3aXRjaCBlbXVsYXRpb24gd2UgaGF2ZSB0byBBREQgYW5kIEFDVElWQVRFCi0JCQkgKiB0aGUgRExDSShzKSB0aGF0IHdlcmUgY29uZmlndXJlZCB3aXRoIHRoZSBTRVRfRExDSV8KLQkJCSAqIENPTkZJR1VSQVRJT04gY29tbWFuZC4gQWRkIGFuZCBBY3RpdmF0ZSB3aWxsIGZhaWwgaWYKLQkJCSAqIERMQ0kgc3BlY2lmaWVkIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KLQkJCSAqCi0JCQkgKiBBbHNvIElmX29wZW4gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLiBCdXQKLQkJCSAqIGl0IGRvZXMgbm90IGdldCBpbiBoZXJlIGZvciBhbGwgdGhlIGludGVyZmFjZS4gU28KLQkJIAkgKiB3ZSBoYXZlIHRvIHBhc3MgdGhlIGVudGlyZSBsaXN0IG9mIERMQ0kocykgdG8gYWRkIAotCQkJICogYWN0aXZhdGUgcm91dGluZXMuICAKLQkJCSAqLyAKLQkJCQotCQkJaWYgKCFjaGVja19kbGNpX2NvbmZpZyAoY2FyZCwgY2hhbikpewotCQkJCWZyX2FkZF9kbGNpKGNhcmQsIGNoYW4tPmRsY2kpOwotCQkJCWZyX2FjdGl2YXRlX2RsY2koY2FyZCwgY2hhbi0+ZGxjaSk7Ci0JCQl9Ci0JCX0KLQotCQljYXJkLT51LmYuZGxjaV90b19kZXZfbWFwW2NoYW4tPmRsY2ldID0gZGV2OwotCX0KLQlyZXR1cm47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2ZyCi0gKgotICogUmF0aW9uYWxlOgotICoJQWxsIGNvbW1hbmRzIG11c3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGFuIGludGVycnVwdC4KLSAqIAotICogRGVzY3JpcHRpb246CQotICoJVHJpZ2dlciB1bmNvZmlnX2ZyKCkgZnVuY3Rpb24gdGhyb3VnaCAKLSAqICAgICAgdGhlIHRpbWVyIGludGVycnVwdC4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl91bmNvbmZpZ19mcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWZyX2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQl2b2xhdGlsZSBzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlmcjUwOF9mbGFnc190KiBmbGFncyA9IGNhcmQtPmZsYWdzOwotCWludCByZXNldF9jcml0aWNhbD0wOwotCQotCWlmICh0ZXN0X2JpdChQRVJJX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJY2xlYXJfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCXJlc2V0X2NyaXRpY2FsPTE7Ci0JfQotCQkKLQkvKiBydW4gdW5jb25maWdfZGxjaSgpIGZ1bmN0aW9uIAotICAgICAgICAgKiB0aHJvdWdodCB0aGUgdGltZXIgaW50ZXJydXB0ICovCi0Jc2V0X2JpdCgwLCh2b2lkKikmY2hhbi0+dW5jb25maWdfZGxjaSk7Ci0JY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRzsKLQlmbGFncy0+aW1hc2sgfD0gRlJfSU5UUl9USU1FUjsKLQotCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JdGltZW91dCA9IGppZmZpZXM7Ci0gICAgIAlmb3IoOzspIHsKLQotCQlpZighKGNhcmQtPnUuZi50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VTkNPTkZJRykpCi0JCQlicmVhazsKLQotICAgICAgICAgICAgIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0ICsgMSAqIEhaKSl7Ci0gICAgCQkJY2FyZC0+dS5mLnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVU5DT05GSUc7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGRlbGV0ZSBETENJICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+ZGxjaSk7Ci0gCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmVzZXRfY3JpdGljYWwpewotCQlzZXRfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB1bmNvbmZpZ19mcgotICoKLSAqIFJhdGlvbmFsZToKLSAqCUFsbCBjb21tYW5kcyBtdXN0IGJlIGV4ZWN1dGVkIGR1cmluZyBhbiBpbnRlcnJ1cHQuCi0gKiAKLSAqIERlc2NyaXB0aW9uOgkKLSAqCVJlbW92ZSB0aGUgZGxjaSBmcm9tIGZpcm13YXJlLgotICoJVGhpcyBmdW5jaXRvbiBpcyB1c2VkIGluIE5PREUgc2h1dGRvd24uCi0gKi8KLQotc3RhdGljIHZvaWQgdW5jb25maWdfZnIgKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWZyX2NoYW5uZWxfdCAqY2hhbjsKLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSl7Ci0JCi0JCWlmICgoY2hhbj1kZXYtPnByaXYpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJCi0JCWlmICghdGVzdF9iaXQoMCwmY2hhbi0+dW5jb25maWdfZGxjaSkpCi0JCQljb250aW51ZTsKLQotCQljbGVhcl9iaXQoMCwmY2hhbi0+dW5jb25maWdfZGxjaSk7Ci0KLQkJaWYgKGNhcmQtPndhbmRldi5zdGF0aW9uID09IFdBTk9QVF9OT0RFKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmNvbmZpZ3VyaW5nIERMQ0kgJWlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+ZGxjaSk7Ci0JCQlmcl9kZWxldGVfZGxjaShjYXJkLGNoYW4tPmRsY2kpOwotCQl9Ci0JCWNhcmQtPnUuZi5kbGNpX3RvX2Rldl9tYXBbY2hhbi0+ZGxjaV0gPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBzZXR1cF9mcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCSAgIGNoYXIgb3BfbW9kZSkKLXsKLQlmcl9jaGFubmVsX3QgKmNoYW49ZGV2LT5wcml2OwotCi0JaWYgKG9wX21vZGUgPT0gV0FOUElQRSkgewotCQljaGFuLT5mcl9oZWFkZXJbMF09UTkyMl9VSTsKLQkJCi0JCXN3aXRjaCAoaHRvbnMoc2tiLT5wcm90b2NvbCkpewotCQljYXNlIEVUSF9QX0lQOgotCQkJY2hhbi0+ZnJfaGVhZGVyWzFdPU5MUElEX0lQOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkJCi0JCXJldHVybiAyOwotCX0KLQotCS8qIElmIHdlIGFyZSBpbiBicmlkZ2luZyBtb2RlLCB3ZSBtdXN0IGFwcGx5Ci0JICogYW4gRXRoZXJuZXQgaGVhZGVyCi0JICovCi0JaWYgKG9wX21vZGUgPT0gQlJJREdFIHx8IG9wX21vZGUgPT0gQlJJREdFX05PREUpIHsKLQkJLyogRW5jYXBzdWxhdGUgdGhlIHBhY2tldCBhcyBhIGJyaWRnZWQgRXRoZXJuZXQgZnJhbWUuICovCi0jaWZkZWYgREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuY2Fwc3VsYXRpbmcgc2tiIGZvciBmcmFtZSByZWxheVxuIiwgCi0JCQlkZXYtPm5hbWUpOwotI2VuZGlmCi0JCWNoYW4tPmZyX2hlYWRlclswXSA9IDB4MDM7Ci0JCWNoYW4tPmZyX2hlYWRlclsxXSA9IDB4MDA7Ci0JCWNoYW4tPmZyX2hlYWRlclsyXSA9IDB4ODA7Ci0JCWNoYW4tPmZyX2hlYWRlclszXSA9IDB4MDA7Ci0JCWNoYW4tPmZyX2hlYWRlcls0XSA9IDB4ODA7Ci0JCWNoYW4tPmZyX2hlYWRlcls1XSA9IDB4QzI7Ci0JCWNoYW4tPmZyX2hlYWRlcls2XSA9IDB4MDA7Ci0JCWNoYW4tPmZyX2hlYWRlcls3XSA9IDB4MDc7Ci0KLQkJLyogWXVjay4gKi8KLQkJc2tiLT5wcm90b2NvbCA9IEVUSF9QXzgwMl8zOwotCQlyZXR1cm4gODsKLQl9Ci0JCQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfZGxjaV9jb25maWcgKHNkbGFfdCAqY2FyZCwgZnJfY2hhbm5lbF90ICpjaGFuKQotewotCWZyX21ib3hfdCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycj0wOwotCWZyX2NvbmZfdCAqY29uZj1OVUxMOwotCXVuc2lnbmVkIHNob3J0IGRsY2lfbnVtID0gY2hhbi0+ZGxjaTsKLQlpbnQgZGxjaV9vZmZzZXQ9MDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKLQkKLQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfQ09ORklHOwotCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCW1ib3gtPmNtZC5kbGNpID0gZGxjaV9udW07IAkKLQotCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQkKLQlpZiAoZXJyID09IENNRF9PSyl7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2PSooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpCi0JCXNldF9jaGFuX3N0YXRlKGRldixXQU5fRElTQ09OTkVDVEVEKTsKLQkKLQlwcmludGsoS0VSTl9JTkZPICJETENJICVpIE5vdCBjb25maWd1cmVkLCBjb25maWd1cmluZ1xuIixkbGNpX251bSk7Ci0JCi0JbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9DT01NX0RJU0FCTEU7Ci0JbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ01EX09LKXsKLQkJZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KTsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsZWQgQ29tbXVuaWNhdGlvbnMgXG4iKTsKLQkKLQltYm94LT5jbWQuY29tbWFuZCA9IEZSX1JFQURfQ09ORklHOwotCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCW1ib3gtPmNtZC5kbGNpID0gMDsgCQotCi0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgIT0gQ01EX09LKXsKLQkJZnJfZXZlbnQoY2FyZCwgZXJyLCBtYm94KTsKLQkJcmV0dXJuIDI7Ci0JfQotCQotCWNvbmYgPSAoZnJfY29uZl90ICopbWJveC0+ZGF0YTsKLQotCWRsY2lfb2Zmc2V0PTA7Ci0JZm9yIChkZXYgPSBjYXJkLT53YW5kZXYuZGV2OyBkZXY7Ci0JICAgICBkZXYgPSAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKSB7Ci0JCWZyX2NoYW5uZWxfdCAqY2hhbl90bXAgPSBkZXYtPnByaXY7Ci0JCWNvbmYtPmRsY2lbZGxjaV9vZmZzZXRdID0gY2hhbl90bXAtPmRsY2k7CQkKLQkJZGxjaV9vZmZzZXQrKzsKLQl9Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiR290IEZyIGNvbmZpZ3VyYXRpb24gQnVmZmVyIExlbmd0aCBpcyAleCBEbGNpICVpIERsY2kgT2ZmICVpXG4iLAotCQltYm94LT5jbWQubGVuZ3RoLAotCQltYm94LT5jbWQubGVuZ3RoID4gMHgyMCA/IGNvbmYtPmRsY2lbMF0gOiAtMSwgCi0JCWRsY2lfb2Zmc2V0ICk7Ci0JCi0JbWJveC0+Y21kLmxlbmd0aCA9IDB4MjAgKyBkbGNpX29mZnNldCoyOwotCi0JbWJveC0+Y21kLmNvbW1hbmQgPSBGUl9TRVRfQ09ORklHOwotCW1ib3gtPmNtZC5kbGNpID0gMDsgCi0KLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSyl7Ci0JCWZyX2V2ZW50KGNhcmQsIGVyciwgbWJveCk7Ci0JCXJldHVybiAyOwotCX0KLQotCWluaXRpYWxpemVfcnhfdHhfYnVmZmVycyAoY2FyZCk7Ci0KLQkKLQlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmFpdG9uIFN1Y2NlZGVkIGZvciBuZXcgRExDSSAlaVxuIixkbGNpX251bSk7Ci0KLQlpZiAoZnJfY29tbV9lbmFibGUgKGNhcmQpKXsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgQ29tbXVuaWNhdGlvbnMgXG4iKTsKLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQlmcl9jaGFubmVsX3QgKmNoYW5fdG1wID0gZGV2LT5wcml2OwotCQlmcl9pbml0X2RsY2koY2FyZCxjaGFuX3RtcCk7Ci0JCWZyX2FkZF9kbGNpKGNhcmQsIGNoYW5fdG1wLT5kbGNpKTsKLQkJZnJfYWN0aXZhdGVfZGxjaShjYXJkLCBjaGFuX3RtcC0+ZGxjaSk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRU5EIE9GIENPTkZJR1VSQUlUT04gJWlcbiIsZGxjaV9udW0pOwotCQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3J4X3R4X2J1ZmZlcnMgKHNkbGFfdCAqY2FyZCkKLXsKLQlmcl9idWZfaW5mb190KiBidWZfaW5mbzsKLQkKLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkKLSAgICAgICAgICAgICAgICBidWZfaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIEZSX01CX1ZFQ1RPUiArCi0JCQlGUjUwOF9SWEJDX09GRlMpOwotCi0gICAgICAgICAgICAgICAgY2FyZC0+cnhtYiA9ICh2b2lkKikoYnVmX2luZm8tPnJzZV9uZXh0ICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT51LmYucnhtYl9iYXNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsgY2FyZC0+aHcuZHBtYmFzZSk7IAotCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5mLnJ4bWJfbGFzdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoYnVmX2luZm8tPnJzZV9udW0gLSAxKSAqIHNpemVvZihmcl9yeF9idWZfY3RsX3QpICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmh3LmRwbWJhc2UpOwotCX1lbHNlewkKLQkJYnVmX2luZm8gPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBGUjUwOF9SWEJDX09GRlMpOwotCi0JCWNhcmQtPnJ4bWIgPSAodm9pZCopKGJ1Zl9pbmZvLT5yc2VfbmV4dCAtCi0JCQlGUl9NQl9WRUNUT1IgKyBjYXJkLT5ody5kcG1iYXNlKTsKLQkJCi0JCWNhcmQtPnUuZi5yeG1iX2Jhc2UgPQotCQkJKHZvaWQqKShidWZfaW5mby0+cnNlX2Jhc2UgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JCQotCQljYXJkLT51LmYucnhtYl9sYXN0ID0KLQkJCSh2b2lkKikoYnVmX2luZm8tPnJzZV9iYXNlICsKLQkJCShidWZfaW5mby0+cnNlX251bSAtIDEpICogc2l6ZW9mKGZyX3J4X2J1Zl9jdGxfdCkgLQotCQkJRlJfTUJfVkVDVE9SICsgY2FyZC0+aHcuZHBtYmFzZSk7Ci0JfQotCi0JY2FyZC0+dS5mLnJ4X2Jhc2UgPSBidWZfaW5mby0+YnVmX2Jhc2U7Ci0JY2FyZC0+dS5mLnJ4X3RvcCAgPSBidWZfaW5mby0+YnVmX3RvcDsKLQotCWNhcmQtPnUuZi50eF9pbnRlcnJ1cHRzX3BlbmRpbmcgPSAwOwotCi0JcmV0dXJuOwotfQotCi0JCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoqKioqKiBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYV9mdDEuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2Z0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDY1MjhhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2Z0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhX2NoZGxjLmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuIENpc2NvIEhETEMgbW9kdWxlLgotKgotKiBBdXRob3JzOiAJTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgotKgkJR2lkZW9uIEhhY2sgIAotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTE5OTkgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBTZXAgMzAsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBGaXhlZCBkeW5hbWljIElQIGFuZCByb3V0ZSBzZXR1cC4KLSogU2VwIDIzLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgU01QIHN1cHBvcnQsIGZpeGVkIHRyYWNpbmcgCi0qIFNlcCAxMywgMTk5OSAgTmVuYWQgQ29yYmljCVNwbGl0IHVwIFBvcnQgMCBhbmQgMSBpbnRvIHNlcGFyYXRlIGRldmljZXMuCi0qIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTNTE0IGFkYXB0ZXIuCi0qIE9jdCAzMCwgMTk5OAlKYXNwcmVldCBTaW5naAlBZGRlZCBTdXBwb3J0IGZvciBDSERMQyBBUEkgKEhETEMgU1RSRUFNSU5HKS4KLSogT2N0IDI4LCAxOTk4CUphc3ByZWV0IFNpbmdoCUFkZGVkIFN1cHBvcnQgZm9yIER1YWwgUG9ydCBDSERMQy4KLSogQXVnIDA3LCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CQkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEXyogZGVmaW5lcyAqLwotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpIG1hY3JvICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4JCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2NoZGxjLmg+CQkvKiBDSERMQyBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkweDAwMDEKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VQREFURQkweDAwMDIKLSAKLSNkZWZpbmUJQ0hETENfREZMVF9EQVRBX0xFTgkxNTAwCQkvKiBkZWZhdWx0IE1UVSAqLwotI2RlZmluZSBDSERMQ19IRFJfTEVOCQkxCi0KLSNkZWZpbmUgSUZGX1BPSU5UVE9QT0lOVCAweDEwCi0KLSNkZWZpbmUgV0FOUElQRSAweDAwCi0jZGVmaW5lIEFQSQkweDAxCi0jZGVmaW5lIENIRExDX0FQSSAweDAxCi0KLSNkZWZpbmUgUE9SVCh4KSAgICh4ID09IDAgPyAiUFJJTUFSWSIgOiAiU0VDT05EQVJZIiApCi0KLSAKLS8qKioqKipEYXRhIFN0cnVjdHVyZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHRoZSBwcml2YXRlIGRhdGEgYXJlYSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIFRoZSBjYXJkIHN0cnVjdHVyZSB1c2VkIHRvIG9jY3VweSB0aGUgcHJpdmF0ZSBhcmVhIGJ1dCBub3cgdGhlIGZvbGxvd2luZyAKLSAqIHN0cnVjdHVyZSB3aWxsIGluY29ycG9yYXRlIHRoZSBjYXJkIHN0cnVjdHVyZSBhbG9uZyB3aXRoIENIRExDIHNwZWNpZmljIGRhdGEKLSAqLwotCi10eXBlZGVmIHN0cnVjdCBjaGRsY19wcml2YXRlX2FyZWEKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmU7Ci0Jc2RsYV90CQkqY2FyZDsKLQlpbnQgCQlUcmFjaW5nRW5hYmxlZDsJCS8qIEZvciBlbmFibGluZyBUcmFjaW5nICovCi0JdW5zaWduZWQgbG9uZyAJY3Vycl90cmFjZV9hZGRyOwkvKiBVc2VkIGZvciBUcmFjaW5nICovCi0JdW5zaWduZWQgbG9uZyAJc3RhcnRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIAllbmRfdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIAliYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgCWVuZF9hZGRyX3RyYWNlX2J1ZmZlcjsKLQl1bnNpZ25lZCBzaG9ydCAJbnVtYmVyX3RyYWNlX2VsZW1lbnRzOwotCXVuc2lnbmVkICAJYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZTsKLQl1bnNpZ25lZCBsb25nIAlyb3V0ZXJfc3RhcnRfdGltZTsKLQl1bnNpZ25lZCBjaGFyIAlyb3V0ZV9zdGF0dXM7Ci0JdW5zaWduZWQgY2hhciAJcm91dGVfcmVtb3ZlZDsKLQl1bnNpZ25lZCBsb25nIAl0aWNrX2NvdW50ZXI7CQkvKiBGb3IgNXMgdGltZW91dCBjb3VudGVyICovCi0JdW5zaWduZWQgbG9uZyAJcm91dGVyX3VwX3RpbWU7Ci0gICAgICAgIHUzMiAgICAgICAgICAgICBJUF9hZGRyZXNzOwkJLyogSVAgYWRkcmVzc2luZyAqLwotICAgICAgICB1MzIgICAgICAgICAgICAgSVBfbmV0bWFzazsKLQl1bnNpZ25lZCBjaGFyICBtYzsJCQkvKiBNdWxpdGNhc3Qgc3VwcG9ydCBvbi9vZmYgKi8KLQl1bnNpZ25lZCBzaG9ydCB1ZHBfcGt0X2xndGg7CQkvKiB1ZHAgcGFja2V0IHByb2Nlc3NpbmcgKi8KLQljaGFyIHVkcF9wa3Rfc3JjOwotCWNoYXIgdWRwX3BrdF9kYXRhW01BWF9MR1RIX1VEUF9NR05UX1BLVF07Ci0JdW5zaWduZWQgc2hvcnQgdGltZXJfaW50X2VuYWJsZWQ7Ci0JY2hhciB1cGRhdGVfY29tbXNfc3RhdHM7CQkvKiB1cGRhdGluZyBjb21tcyBzdGF0cyAqLwotCS8vRklYTUU6IGFkZCBkcml2ZXIgc3RhdHMgYXMgcGVyIGZyYW1lIHJlbGF5IQotCi19IGNoZGxjX3ByaXZhdGVfYXJlYV90OwotCi0vKiBSb3V0ZSBTdGF0dXMgb3B0aW9ucyAqLwotI2RlZmluZSBOT19ST1VURQkweDAwCi0jZGVmaW5lIEFERF9ST1VURQkweDAxCi0jZGVmaW5lIFJPVVRFX0FEREVECTB4MDIKLSNkZWZpbmUgUkVNT1ZFX1JPVVRFCTB4MDMKLQotCi0vKioqKioqIEZ1bmN0aW9uIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFdBTiBsaW5rIGRyaXZlciBlbnRyeSBwb2ludHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIFdBTiByb3V0ZXIgbW9kdWxlLiAqLwotc3RhdGljIGludCB3cGZ0MV9leGVjIChzdHJ1Y3Qgc2RsYSAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSk7Ci1zdGF0aWMgaW50IGNoZGxjX3JlYWRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpOwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpOwotCi0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdwZnQxX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZikKLXsKLQl1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotCWludCBlcnI7Ci0KLQl1bmlvbgotCQl7Ci0JCWNoYXIgc3RyWzgwXTsKLQkJfSB1OwotCXZvbGF0aWxlIENIRExDX01BSUxCT1hfU1RSVUNUKiBtYjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIxOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIElEICovCi0JaWYgKGNvbmYtPmNvbmZpZ19pZCAhPSBXQU5DT05GSUdfQ0hETEMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgY29uZmlndXJhdGlvbiBJRCAldSFcbiIsCi0JCQkJICBjYXJkLT5kZXZuYW1lLCBjb25mLT5jb25maWdfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBVc2UgcHJpbWFyeSBwb3J0ICovCi0JY2FyZC0+dS5jLmNvbW1fcG9ydCA9IDA7Ci0JCi0KLQkvKiBJbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyAqLwotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJY2FyZC0+bWJveCAgPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlOwotCX1lbHNleyAKLQkJY2FyZC0+bWJveCA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyBQUklfQkFTRV9BRERSX01CX1NUUlVDVDsKLQl9Ci0KLQltYiA9IG1iMSA9IGNhcmQtPm1ib3g7Ci0KLQlpZiAoIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIFRoZSBib2FyZCB3aWxsIHBsYWNlIGFuICdJJyBpbiB0aGUgcmV0dXJuIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcwotCSAgIAlyZWFkeSB0byBhY2NlcHQgY29tbWFuZHMuICBXZSBleHBlY3QgdGhpcyB0byBiZSBjb21wbGV0ZWQgaW4gbGVzcwotICAgICAgICAgICAJdGhhbiAxIHNlY29uZC4gKi8KLQotCQl0aW1lb3V0ID0gamlmZmllczsKLQkJd2hpbGUgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpCS8qIFdhaXQgMXMgZm9yIGJvYXJkIHRvIGluaXRpYWxpemUgKi8KLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxKkhaKSkgYnJlYWs7Ci0KLQkJaWYgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZWQgYnkgYWRhcHRlclxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBjb250YWN0IFNhbmdvbWEgcmVwcmVzZW50YXRpdmUuXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0KLQlpZiAoY2hkbGNfcmVhZF92ZXJzaW9uKGNhcmQsIHUuc3RyKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBGVDEgQ29uZmlndXJhdGlvbiBmaXJtd2FyZSB2JXNcbiIsCi0JCWNhcmQtPmRldm5hbWUsIHUuc3RyKTsgCi0KLQljYXJkLT5pc3IJCQk9IE5VTEw7Ci0JY2FyZC0+cG9sbAkJCT0gTlVMTDsKLQljYXJkLT5leGVjCQkJPSAmd3BmdDFfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCQk9IE5VTEw7Ci0gCWNhcmQtPndhbmRldi5uZXdfaWYJCT0gTlVMTDsKLQljYXJkLT53YW5kZXYuZGVsX2lmCQk9IE5VTEw7Ci0JY2FyZC0+d2FuZGV2LnN0YXRlCQk9IFdBTl9EVUFMUE9SVDsKLQljYXJkLT53YW5kZXYudWRwX3BvcnQgICAJPSBjb25mLT51ZHBfcG9ydDsKLQotCWNhcmQtPndhbmRldi5uZXdfaWZfY250ID0gMDsKLQotCS8qIFRoaXMgaXMgZm9yIHRoZSBwb3J0cyBsaW5rIHN0YXRlICovCi0JY2FyZC0+dS5jLnN0YXRlID0gV0FOX0RJU0NPTk5FQ1RFRDsKLQkKLQkvKiByZXNldCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSAndXBkYXRlKCknIHByb2MgaGFzIGJlZW4gY2FsbGVkICovCi0JY2FyZC0+dS5jLnVwZGF0ZV9jYWxsX2NvdW50ID0gMDsKLQkKLQljYXJkLT53YW5kZXYudHRsID0gMHg3RjsKLQljYXJkLT53YW5kZXYuaW50ZXJmYWNlID0gMDsgCi0KLQljYXJkLT53YW5kZXYuY2xvY2tpbmcgPSAwOwotCi0JcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogU2V0dXAgUG9ydCBCcHMgKi8KLQotICAgICAgIAljYXJkLT53YW5kZXYuYnBzID0gMDsKLQotCWNhcmQtPndhbmRldi5tdHUgPSBNSU5fTEdUSF9DSERMQ19EQVRBX0NGRzsKLQotCS8qIFNldCB1cCB0aGUgaW50ZXJydXB0IHN0YXR1cyBhcmVhICovCi0JLyogUmVhZCB0aGUgQ0hETEMgQ29uZmlndXJhdGlvbiBhbmQgb2J0YWluOiAKLQkgKglQdHIgdG8gc2hhcmVkIG1lbW9yeSBpbmZvciBzdHJ1Y3QKLSAgICAgICAgICogVXNlIHRoaXMgcG9pbnRlciB0byBjYWxjdWxhdGUgdGhlIHZhbHVlIG9mIGNhcmQtPnUuYy5mbGFncyAhCi0gCSAqLwotCW1iMS0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWIxLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYjEpID8gbWIxLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWNoZGxjX2Vycm9yKGNhcmQsIGVyciwgbWIxKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpewotICAgICAgICAgICAgICAgCWNhcmQtPnUuYy5mbGFncyA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgCQkoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iMS0+ZGF0YSktPgotCQkJcHRyX3NoYXJlZF9tZW1faW5mb19zdHJ1Y3QpKTsKLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLmZsYWdzID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iMS0+ZGF0YSktPgotCQkJcHRyX3NoYXJlZF9tZW1faW5mb19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQl9Ci0KLQljYXJkLT53YW5kZXYuc3RhdGUgPSBXQU5fRlQxX1JFQURZOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBGVDEgQ29uZmlnIFJlYWR5ICFcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3cGZ0MV9leGVjKHNkbGFfdCAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGxlbjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmNvbW1hbmQsIHVfY21kLCBzaXplb2YoZnQxX2V4ZWNfY21kX3QpKSl7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWxlbiA9IG1ib3gtPmJ1ZmZlcl9sZW5ndGg7Ci0KLQlpZiAobGVuKSB7Ci0JCWlmKCBjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmRhdGEsIHVfZGF0YSwgbGVuKSl7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCS8qIGV4ZWN1dGUgY29tbWFuZCAqLwotCWlmICghc2RsYV9leGVjKG1ib3gpKXsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogcmV0dXJuIHJlc3VsdCAqLwotCWlmKCBjb3B5X3RvX3VzZXIodV9jbWQsICh2b2lkKikmbWJveC0+Y29tbWFuZCwgc2l6ZW9mKGZ0MV9leGVjX2NtZF90KSkpewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlsZW4gPSBtYm94LT5idWZmZXJfbGVuZ3RoOwotCi0JaWYgKGxlbiAmJiB1X2RhdGEgJiYgY29weV90b191c2VyKHVfZGF0YSwgKHZvaWQqKSZtYm94LT5kYXRhLCBsZW4pKXsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGZpcm13YXJlIGNvZGUgdmVyc2lvbi4KLSAqCVB1dCBjb2RlIHZlcnNpb24gYXMgQVNDSUkgc3RyaW5nIGluIHN0ci4gCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cikKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBsZW47Ci0JY2hhciBlcnI7Ci0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCi0JaWYoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotCX0KLQllbHNlIGlmIChzdHIpIHsgIC8qIGlzIG5vdCBudWxsICovCi0JCWxlbiA9IG1iLT5idWZmZXJfbGVuZ3RoOwotCQltZW1jcHkoc3RyLCBtYi0+ZGF0YSwgbGVuKTsKLQkJc3RyW2xlbl0gPSAnXDAnOwotCX0KLQlyZXR1cm4gKGVycik7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlybXdhcmUgZXJyb3IgaGFuZGxlci4KLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgZmlybXdhcmUgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvCi0gKglyZXR1cm4gY29kZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfZXJyb3IgKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iKQotewotCXVuc2lnbmVkIGNtZCA9IG1iLT5jb21tYW5kOwotCi0Jc3dpdGNoIChlcnIpIHsKLQotCWNhc2UgQ01EX1RJTUVPVVQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQlicmVhazsKLQotCWNhc2UgUzUxNF9CT1RIX1BPUlRTX1NBTUVfQ0xLX01PREU6Ci0JCWlmKGNtZCA9PSBTRVRfQ0hETENfQ09ORklHVVJBVElPTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICIlczogQ29uZmlndXJlIGJvdGggcG9ydHMgZm9yIHRoZSBzYW1lIGNsb2NrIHNvdXJjZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCwgZXJyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYV9wcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRiNDg5Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV9wcHAuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfcHBwLmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuIFBQUCBtb2R1bGUuCi0qCi0qIEF1dGhvcjogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI4LCAyMDAxICBOZW5hZCBDb3JiaWMJbyBVcGRhdGVkIGlmX3R4X3RpbWVvdXQoKSByb3V0aW5lIGZvciAKLSogCQkJCSAgMi40Llgga2VybmVscy4KLSogTm92IDI5LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCB0aGUgMi40Lngga2VybmVsIHN1cHBvcnQ6Ci0qIAkJCQkgIGdldF9pcF9hZGRyZXNzKCkgZnVuY3Rpb24gaGFzIG1vdmVkCi0qIAkJCQkgIGludG8gdGhlIHBwcF9wb2xsKCkgcm91dGluZS4gSXQgY2Fubm90Ci0qIAkJCQkgIGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4KLSogTm92IDA3LCAyMDAwICBOZW5hZCBDb3JiaWMJbyBBZGRlZCBzZWN1cml0eSBmZWF0dXJlcyBmb3IgVURQIGRlYnVnZ2luZzoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW55IGFsbCBhbmQgc3BlY2lmeSBhbGxvd2VkIHJlcXVlc3RzLgotKiBNYXkgMDIsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEFkZGVkIHRoZSBkeW5hbWljIGludGVyZmFjZSBzaHV0ZG93bgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4gV2hlbiB0aGUgbGluayBnb2VzIGRvd24sIHRoZQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgaW50ZXJmYWNlIElGRl9VUCBmbGFnIGlzIHJlc2V0LgotKiBNYXIgMDYsIDIwMDAgIE5lbmFkIENvcmJpYwlvIEJ1ZyBGaXg6IGNvcnJ1cHRlZCBtYm94IHJlY292ZXJ5LgotKiBGZWIgMjUsIDIwMDAgIE5lbmFkIENvcmJpYyAgICBvIEZpeGVkIHRoZSBGVDEgVURQIGRlYnVnZ2VyIHByb2JsZW0uCi0qIEZlYiAwOSwgMjAwMCAgTmVuYWQgQ29yaWJjICAgIG8gU2h1dGRvd24gYnVnIGZpeC4gdXBkYXRlKCkgd2FzIGNhbGxlZAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggTlVMTCBkZXYgcG9pbnRlcjogbm8gY2hlY2suCi0qIEphbiAyNCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIG8gRGlzYWJsZWQgdXNlIG9mIENNRCBjb21wbGV0ZSBpbnRlci4KLSogRGV2IDE1LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBGaXhlZCB1cCBoZWFkZXIgZmlsZXMgZm9yIDIuMC5YIGtlcm5lbHMKLSogT2N0IDI1LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBTdXBwb3J0IGZvciAyLjAuWCBrZXJuZWxzCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZWQgZHluYW1pYyByb3V0ZSBwcm9jZXNzaW5nIGludG8gCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwb2xsaW5nIHJvdXRpbmUuCi0qIE9jdCAwNywgMTk5OSAgTmVuYWQgQ29yYmljICAgIG8gU3VwcG9ydCBmb3IgUzUxNCBQQ0kgY2FyZC4gIAotKiAgICAgICAgICAgICAgIEdpZGVvbiBIYWNrICAgICBvIFVQRCBhbmQgVXBkYXRlcyBleGVjdXRlZCB1c2luZyB0aW1lciBpbnRlcnJ1cHQKLSogU2VwIDEwLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgbyBGaXhlZCB1cCB0aGUgL3Byb2Mgc3RhdGlzdGljcwotKiBKdWwgMjAsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBvIFJlbW92ZSB0aGUgcG9sbGluZyByb3V0aW5lcyBhbmQgdXNlIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgaW5zdGVhZC4KLSogU2VwIDE3LCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gVXBkYXRlcyBmb3IgMi4yLlggS2VybmVscy4KLSogQXVnIDEzLCAxOTk4CUphc3ByZWV0IFNpbmdoCW8gSW1wcm92ZWQgTGluZSBUcmFjaW5nLgotKiBKdW4gMjIsIDE5OTgJRGF2aWQgRm9uZwlvIEFkZGVkIHJlbW90ZSBJUCBhZGRyZXNzIGFzc2lnbm1lbnQKLSogTWFyIDE1LCAxOTk4CUFsYW4gQ294CW8gMi4xLjh4IGJhc2ljIHBvcnQuCi0qIEFwciAxNiwgMTk5OAlKYXNwcmVldCBTaW5naAlvIHVzaW5nIGh0b25zKCkgZm9yIHRoZSBJUFggcHJvdG9jb2wuCi0qIERlYyAwOSwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIFBBUCBhbmQgQ0hBUC4KLSoJCQkJbyBJbXBsZW1lbnRlZCBuZXcgcm91dGluZXMgbGlrZSAKLSoJCQkJICBwcHBfc2V0X2luYm5kX2F1dGgoKSwgcHBwX3NldF9vdXRibmRfYXV0aCgpLAotKgkJCQkgIHRva2VuaXplKCkgYW5kIHN0cnN0cmlwKCkuCi0qIE5vdiAyNywgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIHByb3RlY3Rpb24gYWdhaW5zdCBlbmFibGluZyBvZiBpcnFzIAotKgkJCQkgIHdoaWxlIHRoZXkgaGF2ZSBiZWVuIGRpc2FibGVkLgotKiBOb3YgMjQsIDE5OTcgIEphc3ByZWV0IFNpbmdoICBvIEZpeGVkIGFub3RoZXIgUkFDRSBjb25kaXRpb24gY2F1c2VkIGJ5Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsaW5nIGFuZCBlbmFibGluZyBvZiBpcnFzLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIEFkZGVkIG5ldyBjb3VudGVycyBmb3Igc3RhdHMgb24gZGlzYWJsZS9lbmFibGUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFzLgotKiBOb3YgMTAsIDE5OTcJSmFzcHJlZXQgU2luZ2gJbyBJbml0aWFsaXplZCAnc2tiLT5tYWMucmF3JyB0byAnc2tiLT5kYXRhJwotKgkJCQkgIGJlZm9yZSBldmVyeSBuZXRpZl9yeCgpLgotKgkJCQlvIEZyZWUgdXAgdGhlIGRldmljZSBzdHJ1Y3R1cmUgaW4gZGVsX2lmKCkuCi0qIE5vdiAwNywgMTk5NwlKYXNwcmVldCBTaW5naAlvIENoYW5nZWQgdGhlIGRlbGF5IHRvIHplcm8gZm9yIExpbmUgdHJhY2luZwotKgkJCQkgIGNvbW1hbmQuCi0qIE9jdCAyMCwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJbyBBZGRlZCBob29rcyBpbiBmb3IgUm91dGVyIFVQIHRpbWUuCi0qIE9jdCAxNiwgMTk5NwlKYXNwcmVldCBTaW5naCAgbyBUaGUgY3JpdGljYWwgZmxhZyBpcyB1c2VkIHRvIG1haW50YWluIGZsb3cKLSoJCQkJICBjb250cm9sIGJ5IGF2b2lkaW5nIFJBQ0UgY29uZGl0aW9ucy4gIFRoZSAKLSoJCQkJICBjbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpIGFyZSB0YWtlbiBvdXQuCi0qCQkJCSAgQSBuZXcgc3RydWN0dXJlLCAicHBwX3ByaXZhdGVfYXJlYSIsIGlzIGFkZGVkIAotKgkJCQkgIHRvIHByb3ZpZGUgRHJpdmVyIFN0YXRpc3RpY3MuICAgCi0qIEp1bCAyMSwgMTk5NyAJSmFzcHJlZXQgU2luZ2gJbyBQcm90ZWN0ZWQgY2FsbHMgdG8gc2RsYV9wZWVrKCkgYnkgYWRkaW5nIAotKgkJCQkgIHNhdmVfZmxhZ3MoKSwgY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KLSogSnVsIDA3LCAxOTk3CUphc3ByZWV0IFNpbmdoICBvIEFkZGVkIGNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzCi0qCQkJCW8gQWRkZWQgYWJpbGl0eSB0byBkaXNjYXJkIG11bGl0Y2FzdCBhbmQKLSoJCQkJICBicm9hY2FzdCBzb3VyY2UgYWRkcmVzc2VkIHBhY2tldHMuCi0qIEp1biAyNywgMTk5NyAJSmFzcHJlZXQgU2luZ2gJbyBBZGRlZCBGVDEgbW9uaXRvciBjYXBhYmlsaXRpZXMKLSoJCQkJICBOZXcgY2FzZSAoMHgyNSkgc3RhdGVtZW50IGluIGlmX3NlbmQgcm91dGluZS4KLSoJCQkJICBBZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSByQ291bnQgdG8ga2VlcCB0cmFjawotKgkJCQkgIG9mIEZUMSBzdGF0dXMgZW5hYmxlZCBvbiB0aGUgYm9hcmQuCi0qIE1heSAyMiwgMTk5NwlKYXNwcmVldCBTaW5naAlvIEFkZGVkIGNoYW5nZSBpbiB0aGUgUFBQX1NFVF9DT05GSUcgY29tbWFuZCBmb3IKLSoJCQkJNTA4IGNhcmQgdG8gcmVmbGVjdCBjaGFuZ2VzIGluIHRoZSBuZXcgCi0qCQkJCXBwcDUwOC5zZm0gZm9yIHN1cHBvcnRpbmc6Y29udGlub3VzIHRyYW5zbWlzc2lvbgotKgkJCQlvZiBDb25maWd1cmUtUmVxdWVzdCBwYWNrZXRzIHdpdGhvdXQgcmVjZWl2aW5nIGEKLSoJCQkJcmVwbHkgCQkJCQotKgkJCQlPUi1lZCAweDMwMCB0byBjb25mX2ZsYWdzIAotKgkJCSAgICAgICAgbyBDaGFuZ2VkIGNvbm5lY3RfdG1vdXQgZnJvbSA5MDAgdG8gMAotKiBNYXkgMjEsIDE5OTcJSmFzcHJlZXQgU2luZ2ggIG8gRml4ZWQgVURQIE1hbmFnZW1lbnQgZm9yIG11bHRpcGxlIGJvYXJkcwotKiBBcHIgMjUsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBhZGRlZCBVRFAgTWFuYWdlbWVudCBzdHVmZgotKiBNYXIgMTEsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICBWZXJzaW9uIDMuMS4xCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZpeGVkICgrMSkgYnVnIGluIHJ4X2ludHIoKQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBjaGFuZ2VkIGlmX3NlbmQoKSB0byByZXR1cm4gMCBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW5kZXYuY3JpdGljYWwoKSBpcyB0cnVlCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGZyZWUgc29ja2V0IGJ1ZmZlciBpbiBpZl9zZW5kKCkgaWYKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIDAgCi0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gaW1wbGVtZW50ZWQgZXhlYygpIGVudHJ5IHBvaW50Ci0qIEphbiAwNiwgMTk5NwlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnBpcGUuaD4JLyogV0FOUElQRSBjb21tb24gdXNlciBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEXyogZGVmaW5lcyAqLwotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpIG1hY3JvICovCi0KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhX3BwcC5oPgkJLyogUFBQIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFzZm0uaD4JCS8qIFM1MTQgVHlwZSBEZWZpbml0aW9uICovCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlQUFBfREZMVF9NVFUJMTUwMAkJLyogZGVmYXVsdCBNVFUgKi8KLSNkZWZpbmUJUFBQX01BWF9NVFUJNDAwMAkJLyogbWF4aW11bSBNVFUgKi8KLSNkZWZpbmUgUFBQX0hEUl9MRU4JMQotCi0jZGVmaW5lIE1BWF9JUF9FUlJPUlMgMTAwIAotCi0jZGVmaW5lCUNPTk5FQ1RfVElNRU9VVAkoOTAqSFopCQkvKiBsaW5rIGNvbm5lY3Rpb24gdGltZW91dCAqLwotI2RlZmluZQlIT0xEX0RPV05fVElNRQkoNSpIWikJCS8qIGxpbmsgaG9sZCBkb3duIHRpbWUgOiBDaGFuZ2VkIGZyb20gMzAgdG8gNSAqLwotCi0vKiBGb3IgaGFuZGxlX0lQWFdBTigpICovCi0jZGVmaW5lIENWSGV4VG9Bc2NpaShiKSAoKCh1bnNpZ25lZCBjaGFyKShiKSA+ICh1bnNpZ25lZCBjaGFyKTkpID8gKCh1bnNpZ25lZCBjaGFyKSdBJyArICgodW5zaWduZWQgY2hhcikoYikgLSAodW5zaWduZWQgY2hhcikxMCkpIDogKCh1bnNpZ25lZCBjaGFyKScwJyArICh1bnNpZ25lZCBjaGFyKShiKSkpCi0KLS8qIE1hY3JvIGZvciBlbmFibGluZy9kaXNhYmxpbmcgZGVidWdnaW5nIGNvbW1lbnRzICovCi0vLyNkZWZpbmUgTkVYX0RFQlVHCi0jaWZkZWYgTkVYX0RFQlVHCi0jZGVmaW5lIE5FWF9QUklOVEsoZm9ybWF0LCBhLi4uKSBwcmludGsoZm9ybWF0LCAjIyBhKQotI2Vsc2UKLSNkZWZpbmUgTkVYX1BSSU5USyhmb3JtYXQsIGEuLi4pCi0jZW5kaWYgLyogTkVYX0RFQlVHICovIAotCi0jZGVmaW5lIERDRChhKSAgICggYSAmIDB4MDggPyAiSElHSCIgOiAiTE9XIiApCi0jZGVmaW5lIENUUyhhKSAgICggYSAmIDB4MjAgPyAiSElHSCIgOiAiTE9XIiApCi0jZGVmaW5lIExDUChhKSAgICggYSA9PSAweDA5ID8gIk9QRU4iIDogIkNMT1NFRCIgKQotI2RlZmluZSBJUChhKSAgICAoIGEgPT0gMHgwOSA/ICJFTkFCTEVEIiA6ICJESVNBQkxFRCIgKQotCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUgIAkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQJMHgwMgotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQCQkweDA0Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcJCTB4MjAKLQotLyogU2V0IENvbmZpZ3VyYXRvbiBDb21tYW5kIERlZmluaXRpb25zICovCi0jZGVmaW5lIFBFUkNFTlRfVFhfQlVGRgkJCTYwCi0jZGVmaW5lIFRJTUVfQkVUV0VFTl9DT05GX1JFUSAgCQkzMAotI2RlZmluZSBUSU1FX0JFVFdFRU5fUEFQX0NIQVBfUkVRCTMwCi0jZGVmaW5lIFdBSVRfUEFQX0NIQVBfV0lUSE9VVF9SRVBMWSAgICAgMzAwCi0jZGVmaW5lIFdBSVRfQUZURVJfRENEX0NUU19MT1cgICAgICAgICAgNQotI2RlZmluZSBUSU1FX0RDRF9DVFNfTE9XX0FGVEVSX0xOS19ET1dOIDEwCi0jZGVmaW5lIFdBSVRfRENEX0hJR0hfQUZURVJfRU5BQkxFX0NPTU0gOTAwCi0jZGVmaW5lIE1BWF9DT05GX1JFUV9XSVRIT1VUX1JFUExZICAgICAgMTAKLSNkZWZpbmUgTUFYX1RFUk1fUkVRX1dJVEhPVVRfUkVQTFkgICAgICAyCi0jZGVmaW5lIE5VTV9DT05GX05BS19XSVRIT1VUX1JFUExZICAgICAgNQotI2RlZmluZSBOVU1fQVVUSF9SRVFfV0lUSE9VVF9SRVBMWSAgICAgIDEwCi0KLSNkZWZpbmUgRU5EX09GRlNFVCAweDFGMAotCi0KLS8qKioqKipEYXRhIFN0cnVjdHVyZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHRoZSBwcml2YXRlIGRhdGEgYXJlYSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIFRoZSBjYXJkIHN0cnVjdHVyZSB1c2VkIHRvIG9jY3VweSB0aGUgcHJpdmF0ZSBhcmVhIGJ1dCBub3cgdGhlIGZvbGxvd2luZyAKLSAqIHN0cnVjdHVyZSB3aWxsIGluY29ycG9yYXRlIHRoZSBjYXJkIHN0cnVjdHVyZSBhbG9uZyB3aXRoIFBQUCBzcGVjaWZpYyBkYXRhCi0gKi8KLSAgCi10eXBlZGVmIHN0cnVjdCBwcHBfcHJpdmF0ZV9hcmVhCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlOwotCXNkbGFfdCogY2FyZDsJCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfc3RhcnRfdGltZTsJLypyb3V0ZXIgc3RhcnQgdGltZSBpbiBzZWMgKi8KLQl1bnNpZ25lZCBsb25nIHRpY2tfY291bnRlcjsJCS8qdXNlZCBmb3IgNSBzZWNvbmQgY291bnRlciovCi0JdW5zaWduZWQgbWM7CQkJCS8qbXVsdGljYXN0IHN1cHBvcnQgb24gb3Igb2ZmKi8KLQl1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFg7Ci0JdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsKLQl1bnNpZ25lZCBjaGFyIHBhcDsKLQl1bnNpZ25lZCBjaGFyIGNoYXA7Ci0JdW5zaWduZWQgY2hhciBzeXNuYW1lWzMxXTsJCS8qIHN5c3RlbSBuYW1lIGZvciBpbi1ibmQgYXV0aCovCi0JdW5zaWduZWQgY2hhciB1c2VyaWRbNTExXTsJCS8qIGxpc3Qgb2YgdXNlciBpZHMgKi8KLQl1bnNpZ25lZCBjaGFyIHBhc3N3ZFs1MTFdOwkJLyogbGlzdCBvZiBwYXNzd29yZHMgKi8KLQl1bnNpZ25lZCBwcm90b2NvbDsJCQkvKiBTS0IgUHJvdG9jb2wgKi8KLQl1MzIgaXBfbG9jYWw7CQkJCS8qIExvY2FsIElQIEFkZHJlc3MgKi8KLQl1MzIgaXBfcmVtb3RlOwkJCQkvKiByZW1vdGUgSVAgQWRkcmVzcyAqLwotCi0JdTMyIGlwX2xvY2FsX3RtcDsKLQl1MzIgaXBfcmVtb3RlX3RtcDsKLQkKLQl1bnNpZ25lZCBjaGFyIHRpbWVyX2ludF9lbmFibGVkOwkvKiBXaG8gZW5hYmxlZCB0aGUgdGltZXIgaW50ZXIqLwotCXVuc2lnbmVkIGNoYXIgdXBkYXRlX2NvbW1zX3N0YXRzOwkvKiBVc2VkIGJ5IHVwZGF0ZSBmdW5jdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgY3Vycl90cmFjZV9hZGRyOwkJLyogVHJhY2UgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RyYWNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmRfdHJhY2VfYWRkcjsKLQotCXVuc2lnbmVkIGNoYXIgaW50ZXJmYWNlX2Rvd247CQkvKiBCcmluZCBkb3duIGludGVyZmFjZSB3aGVuIGNoYW5uZWwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2VzIGRvd24gKi8KLQl1bnNpZ25lZCBsb25nIGNvbmZpZ193YWl0X3RpbWVvdXQ7CS8qIEFmdGVyIGlmX29wZW4oKSBpZiBpbiBkeW5hbWljIGlmIG1vZGUsCi0JCQkJCQkgICB3YWl0IGEgZmV3IHNlY29uZHMgYmVmb3JlIGNvbmZpZ3VyaW5nICovCi0JCi0JdW5zaWduZWQgc2hvcnQgdWRwX3BrdF9sZ3RoOwotCWNoYXIgIHVkcF9wa3Rfc3JjOwotICAgICAgCWNoYXIgIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCi0JLyogUFBQIHNwZWNpZmljIHN0YXRpc3RpY3MgKi8KLQotCWlmX3NlbmRfc3RhdF90IGlmX3NlbmRfc3RhdDsKLQlyeF9pbnRyX3N0YXRfdCByeF9pbnRyX3N0YXQ7Ci0JcGlwZV9tZ210X3N0YXRfdCBwaXBlX21nbXRfc3RhdDsKLQotCXVuc2lnbmVkIGxvbmcgcm91dGVyX3VwX3RpbWU7IAotCi0JLyogUG9sbGluZyB3b3JrIHF1ZXVlIGVudHJ5LiBFYWNoIGludGVyZmFjZQotICAgICAgICAgKiBoYXMgaXRzIG93biB3b3JrIHF1ZXVlIGVudHJ5LCB3aGljaCBpcyB1c2VkCi0gICAgICAgICAqIHRvIGRlZmVyIGV2ZW50cyBmcm9tIHRoZSBpbnRlcnJ1cHQgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcG9sbF93b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IHBvbGxfZGVsYXlfdGltZXI7Ci0KLQl1OCBnYXRld2F5OwotCXU4IGNvbmZpZ19wcHA7Ci0JdTggaXBfZXJyb3I7Ci0JCi19cHBwX3ByaXZhdGVfYXJlYV90OwotCi0vKiB2YXJpYWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBlbmFibGluZy9kaXNhYmxpbmcgRlQxIG1vbml0b3Igc3RhdHVzICovCi1zdGF0aWMgaW50IHJDb3VudCA9IDA7Ci0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBXQU4gbGluayBkcml2ZXIgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSBXQU4gcm91dGVyIG1vZHVsZS4gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYpOwotc3RhdGljIGludCBuZXdfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICB3YW5pZl9jb25mX3QgKmNvbmYpOwotc3RhdGljIGludCBkZWxfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qIFdBTlBJUEUtc3BlY2lmaWMgZW50cnkgcG9pbnRzICovCi1zdGF0aWMgaW50IHdwcF9leGVjIChzdHJ1Y3Qgc2RsYSAqY2FyZCwgdm9pZCAqdV9jbWQsIHZvaWQgKnVfZGF0YSk7Ci0KLS8qIE5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgCi0JCSAgICAgdm9pZCAqZGFkZHIsIHZvaWQgKnNhZGRyLCB1bnNpZ25lZCBsZW4pOwotCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgaW50IGlmX3JlYnVpbGRfaGRyKHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaWZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCi0vKiBQUFAgZmlybXdhcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBwcHBfcmVhZF92ZXJzaW9uKHNkbGFfdCAqY2FyZCwgY2hhciAqc3RyKTsKLXN0YXRpYyBpbnQgcHBwX3NldF9vdXRibmRfYXV0aChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSk7Ci1zdGF0aWMgaW50IHBwcF9zZXRfaW5ibmRfYXV0aChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSk7Ci1zdGF0aWMgaW50IHBwcF9jb25maWd1cmUoc2RsYV90ICpjYXJkLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgcHBwX3NldF9pbnRyX21vZGUoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBjaGFyIG1vZGUpOwotc3RhdGljIGludCBwcHBfY29tbV9lbmFibGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgcHBwX2NvbW1fZGlzYWJsZShzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBwcHBfY29tbV9kaXNhYmxlX3NodXRkb3duKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHBwcF9nZXRfZXJyX3N0YXRzKHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgaW50IHBwcF9zZW5kKHNkbGFfdCAqY2FyZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBwcm90byk7Ci1zdGF0aWMgaW50IHBwcF9lcnJvcihzZGxhX3QgKmNhcmQsIGludCBlcnIsIHBwcF9tYm94X3QgKm1iKTsKLQotc3RhdGljIHZvaWQgd3BwX2lzcihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcnhfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgZXZlbnRfaW50cihzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgdGltZXJfaW50cihzZGxhX3QgKmNhcmQpOwotCi0vKiBCYWNrZ3JvdW5kIHBvbGxpbmcgcm91dGluZXMgKi8KLXN0YXRpYyB2b2lkIHByb2Nlc3Nfcm91dGUoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIHJldHJpZ2dlcl9jb21tKHNkbGFfdCAqY2FyZCk7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHJlYWRfaW5mbyggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IHJlYWRfY29ubmVjdGlvbl9pbmZvIChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgcmVtb3ZlX3JvdXRlKCBzZGxhX3QgKmNhcmQgKTsKLXN0YXRpYyBpbnQgY29uZmlnNTA4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBzaG93X2Rpc2NfY2F1c2Uoc2RsYV90ICogY2FyZCwgdW5zaWduZWQgY2F1c2UpOwotc3RhdGljIGludCByZXBseV91ZHAoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYm94X2xlbiApOwotc3RhdGljIHZvaWQgcHJvY2Vzc191ZHBfbWdtdF9wa3Qoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKLQkJCQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEpOwotc3RhdGljIHZvaWQgaW5pdF9wcHBfdHhfcnhfYnVmZiggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IGludHJfdGVzdCggc2RsYV90ICpjYXJkICk7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiAsIHNkbGFfdCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBpbml0X3BwcF9wcml2X3N0cnVjdCggcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhKTsKLXN0YXRpYyB2b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCAqY2FyZCApOwotc3RhdGljIGludCB0b2tlbml6ZShjaGFyICpzdHIsIGNoYXIgKip0b2tlbnMpOwotc3RhdGljIGNoYXIqIHN0cnN0cmlwKGNoYXIgKnN0ciwgY2hhciAqcyk7Ci1zdGF0aWMgaW50IGNoa19iY2FzdF9tY2FzdF9hZGRyKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotc3RhdGljIGludCBjb25maWdfcHBwIChzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBwcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHRyaWdnZXJfcHBwX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBwcHBfcG9sbF9kZWxheSAodW5zaWduZWQgbG9uZyBkZXZfcHRyKTsKLQotCi1zdGF0aWMgaW50IFJlYWRfY29ubmVjdGlvbl9pbmZvOwotc3RhdGljIGludCBJbnRyX3Rlc3RfY291bnRlcjsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhdmFpbGFibGVfYnVmZmVyX3NwYWNlOwotCi0KLS8qIElQWCBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIHN3aXRjaF9uZXRfbnVtYmVycyh1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCAKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGluY29taW5nKTsKLXN0YXRpYyBpbnQgaGFuZGxlX0lQWFdBTih1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCBjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGVuYWJsZV9QWCwgCi0JCQkgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlciwgdW5zaWduZWQgc2hvcnQgcHJvdG8pOwotCi0vKiBMb2NrIEZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpOwotCi1zdGF0aWMgaW50IHN0b3JlX3VkcF9tZ210X3BrdChjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QqIGNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcF9wcml2YXRlX2FyZWFfdCogcHBwX3ByaXZfYXJlYSApOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGNhbGNfY2hlY2tzdW0gKGNoYXIgKmRhdGEsIGludCBsZW4pOwotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBkZXRlY3RfYW5kX2ZpeF90eF9idWcgKHNkbGFfdCAqY2FyZCk7Ci0KLS8qKioqKiogUHVibGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFBQUCBwcm90b2NvbCBpbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIG1haW4gV0FOUElQRSBtb2R1bGUgZHVyaW5nIHNldHVwLiAgQXQgdGhpcwotICogcG9pbnQgYWRhcHRlciBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGFuZCBmaXJtd2FyZSBpcyBydW5uaW5nLgotICogIG8gcmVhZCBmaXJtd2FyZSB2ZXJzaW9uICh0byBtYWtlIHN1cmUgaXQncyBhbGl2ZSkKLSAqICBvIGNvbmZpZ3VyZSBhZGFwdGVyCi0gKiAgbyBpbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyBvZiB0aGUgYWRhcHRlciBkYXRhIHNwYWNlLgotICoKLSAqIFJldHVybjoJMAlvLmsuCi0gKgkJPCAwCWZhaWx1cmUuCi0gKi8KLWludCB3cHBfaW5pdChzZGxhX3QgKmNhcmQsIHdhbmRldl9jb25mX3QgKmNvbmYpCi17Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzOwotCXVuaW9uCi0JewotCQljaGFyIHN0cls4MF07Ci0JfSB1OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19QUFApIHsKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gSUQgJXUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+Y29uZmlnX2lkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9Ci0KLQkvKiBJbml0aWFsaXplIG1pc2NlbGxhbmVvdXMgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyBvbiB0aGUgYWRhcHRlciAqLwotCXN3aXRjaCAoY2FyZC0+aHcudHlwZSkgewotCi0JCWNhc2UgU0RMQV9TNTA4OgotCQkJY2FyZC0+bWJveCA9KHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgUFBQNTA4X01CX09GRlMpOwotCQkJY2FyZC0+ZmxhZ3M9KHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgUFBQNTA4X0ZMR19PRkZTKTsKLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBTRExBX1M1MTQ6Ci0JCQljYXJkLT5tYm94ID0odm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MTRfTUJfT0ZGUyk7Ci0JCQljYXJkLT5mbGFncz0odm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MTRfRkxHX09GRlMpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JfQotCWZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBSZWFkIGZpcm13YXJlIHZlcnNpb24uICBOb3RlIHRoYXQgd2hlbiBhZGFwdGVyIGluaXRpYWxpemVzLCBpdAotCSAqIGNsZWFycyB0aGUgbWFpbGJveCwgc28gaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBmaXJzdCBjb21tYW5kIHdhcwotCSAqIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSB3aGVuIGluIGZhY3QgaXQgd2FzIG1lcmVseSBlcmFzZWQuIFRvIHdvcmsKLQkgKiBhcm91bmQgdGhpcywgd2UgZXhlY3V0ZSB0aGUgZmlyc3QgY29tbWFuZCB0d2ljZS4KLQkgKi8KLQlpZiAocHBwX3JlYWRfdmVyc2lvbihjYXJkLCBOVUxMKSB8fCBwcHBfcmVhZF92ZXJzaW9uKGNhcmQsIHUuc3RyKSkKLQkJcmV0dXJuIC1FSU87Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJ1bm5pbmcgUFBQIGZpcm13YXJlIHYlc1xuIixjYXJkLT5kZXZuYW1lLCB1LnN0cik7IAotCS8qIEFkanVzdCBjb25maWd1cmF0aW9uIGFuZCBzZXQgZGVmYXVsdHMgKi8KLQljYXJkLT53YW5kZXYubXR1ID0gKGNvbmYtPm10dSkgPwotCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgUFBQX01BWF9NVFUpIDogUFBQX0RGTFRfTVRVOwotCi0JY2FyZC0+d2FuZGV2LmJwcwk9IGNvbmYtPmJwczsKLQljYXJkLT53YW5kZXYuaW50ZXJmYWNlCT0gY29uZi0+aW50ZXJmYWNlOwotCWNhcmQtPndhbmRldi5jbG9ja2luZwk9IGNvbmYtPmNsb2NraW5nOwotCWNhcmQtPndhbmRldi5zdGF0aW9uCT0gY29uZi0+c3RhdGlvbjsKLQljYXJkLT5pc3IJCT0gJndwcF9pc3I7Ci0JY2FyZC0+cG9sbAkJPSBOVUxMOyAKLQljYXJkLT5leGVjCQk9ICZ3cHBfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCT0gJnVwZGF0ZTsKLQljYXJkLT53YW5kZXYubmV3X2lmCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCT0gJmRlbF9pZjsKLSAgICAgICAgY2FyZC0+d2FuZGV2LnVkcF9wb3J0ICAgPSBjb25mLT51ZHBfcG9ydDsKLQljYXJkLT53YW5kZXYudHRsCT0gY29uZi0+dHRsOwotCWNhcmQtPndhbmRldi5zdGF0ZSAgICAgID0gV0FOX0RJU0NPTk5FQ1RFRDsKLQljYXJkLT5kaXNhYmxlX2NvbW0JPSAmZGlzYWJsZV9jb21tOwotCWNhcmQtPmlycV9kaXNfaWZfc2VuZF9jb3VudCA9IDA7Ci0gICAgICAgIGNhcmQtPmlycV9kaXNfcG9sbF9jb3VudCA9IDA7Ci0JY2FyZC0+dS5wLmF1dGhlbnRpY2F0b3IgPSBjb25mLT51LnBwcC5hdXRoZW50aWNhdG9yOwotCWNhcmQtPnUucC5pcF9tb2RlIAk9IGNvbmYtPnUucHBwLmlwX21vZGUgPwotCQkJCSBjb25mLT51LnBwcC5pcF9tb2RlIDogV0FOT1BUX1BQUF9TVEFUSUM7Ci0gICAgICAgIGNhcmQtPlRyYWNpbmdFbmFibGVkICAgID0gMDsKLQlSZWFkX2Nvbm5lY3Rpb25faW5mbyAgICA9IDE7Ci0KLQkvKiBpbml0aWFsaXplIGdsb2JhbCBzdGF0aXN0aWNzICovCi0JaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggY2FyZCApOwotCi0KLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0JCWludCBlcnI7Ci0KLQkJSW50cl90ZXN0X2NvdW50ZXIgPSAwOwotCQllcnIgPSBpbnRyX3Rlc3QoY2FyZCk7Ci0KLQkJaWYoZXJyIHx8IChJbnRyX3Rlc3RfY291bnRlciA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUikpIHsKLQkJCXByaW50aygiJXM6IEludGVycnVwdCBUZXN0IEZhaWxlZCwgQ291bnRlcjogJWlcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJCXByaW50ayggIiVzOiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iLGNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcnJ1cHQgVGVzdCBQYXNzZWQsIENvdW50ZXI6ICVpXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIEludHJfdGVzdF9jb3VudGVyKTsKLQkJY2FyZC0+Y29uZmlndXJlZCA9IDE7Ci0JfQotCi0JcHBwX3NldF9pbnRyX21vZGUoY2FyZCwgUFBQX0lOVFJfVElNRVIpOyAKLQotCS8qIFR1cm4gb2ZmIHRoZSB0cmFuc21pdCBhbmQgdGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmltYXNrICY9IH5QUFBfSU5UUl9USU1FUjsKLQotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiogV0FOIERldmljZSBEcml2ZXIgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGRldmljZSBzdGF0dXMgJiBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2KQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLSAJc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLSAgICAgICAgdm9sYXRpbGUgcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhOwotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQkKLQkvKiBTaHV0ZG93biBidWcgZml4LiBUaGlzIGZ1bmN0aW9uIGNhbiBiZQotICAgICAgICAgKiBjYWxsZWQgd2l0aCBOVUxMIGRldiBwb2ludGVyIGR1cmluZwotICAgICAgICAgKiBzaHV0ZG93biAKLQkgKi8KLQlpZiAoKGRldj1jYXJkLT53YW5kZXYuZGV2KSA9PSBOVUxMKXsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKChwcHBfcHJpdl9hcmVhPWRldi0+cHJpdikgPT0gTlVMTCl7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQkKLQlwcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPSAyOwotCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwkKLQkKLQkvKiB3YWl0IGEgbWF4aW11bSBvZiAxIHNlY29uZCBmb3IgdGhlIHN0YXRpc3RpY3MgdG8gYmUgdXBkYXRlZCAqLyAKLSAgICAgICAgdGltZW91dCA9IGppZmZpZXM7Ci0gICAgICAgIGZvcig7OykgewotCQlpZihwcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMCl7Ci0JCQlicmVhazsKLQkJfQotICAgICAgICAgICAgICAgIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxICogSFopKXsKLSAgICAJCQlwcHBfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPSAwOwotIAkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9Ci0JCQkJflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7IAotIAkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgd2FuaWZfY29uZl90ICpjb25mKQotewotCXNkbGFfdCAqY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWE7Ci0KLQlpZiAod2FuZGV2LT5uZGV2KQotCQlyZXR1cm4gLUVFWElTVDsKLQkKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25maWd1cmluZyBJbnRlcmZhY2U6ICVzXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY29uZi0+bmFtZSk7Ci0KLQlpZiAoKGNvbmYtPm5hbWVbMF0gPT0gJ1wwJykgfHwgKHN0cmxlbihjb25mLT5uYW1lKSA+IFdBTl9JRk5BTUVfU1opKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgaW50ZXJmYWNlIG5hbWUhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JfQotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCi0JcHBwX3ByaXZfYXJlYSA9IGttYWxsb2Moc2l6ZW9mKHBwcF9wcml2YXRlX2FyZWFfdCksIEdGUF9LRVJORUwpOwotCQotCWlmKCBwcHBfcHJpdl9hcmVhID09IE5VTEwgKQotCQlyZXR1cm4JLUVOT01FTTsKLQkKLQltZW1zZXQocHBwX3ByaXZfYXJlYSwgMCwgc2l6ZW9mKHBwcF9wcml2YXRlX2FyZWFfdCkpOwotCQotCXBwcF9wcml2X2FyZWEtPmNhcmQgPSBjYXJkOyAKLQkKLQkvKiBpbml0aWFsaXplIGRhdGEgKi8KLQlzdHJjcHkoY2FyZC0+dS5wLmlmX25hbWUsIGNvbmYtPm5hbWUpOwotCi0JLyogaW5pdGlhbGl6ZSBkYXRhIGluIHBwcF9wcml2YXRlX2FyZWEgc3RydWN0dXJlICovCi0JCi0JaW5pdF9wcHBfcHJpdl9zdHJ1Y3QoIHBwcF9wcml2X2FyZWEgKTsKLQotCXBwcF9wcml2X2FyZWEtPm1jID0gY29uZi0+bWM7Ci0JcHBwX3ByaXZfYXJlYS0+cGFwID0gY29uZi0+cGFwOwotCXBwcF9wcml2X2FyZWEtPmNoYXAgPSBjb25mLT5jaGFwOwotCi0JLyogT3B0aW9uIHRvIGJyaW5nIGRvd24gdGhlIGludGVyZmFjZSB3aGVuIAotICAgICAgICAgKiB0aGUgbGluayBnb2VzIGRvd24gKi8KLQlpZiAoY29uZi0+aWZfZG93bil7Ci0JCXNldF9iaXQoRFlOX09QVF9PTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pOwotCQlwcmludGsoIiVzOiBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGVuYWJsZWRcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQl9IAotCi0JLyogSWYgbm8gdXNlciBpZHMgYXJlIHNwZWNpZmllZCAqLwotCWlmKCFzdHJsZW4oY29uZi0+dXNlcmlkKSAmJiAocHBwX3ByaXZfYXJlYS0+cGFwfHxwcHBfcHJpdl9hcmVhLT5jaGFwKSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJZiBubyBwYXNzd29yZHMgYXJlIHNwZWNpZmllZCAqLwotCWlmKCFzdHJsZW4oY29uZi0+cGFzc3dkKSAmJiAocHBwX3ByaXZfYXJlYS0+cGFwfHxwcHBfcHJpdl9hcmVhLT5jaGFwKSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihzdHJsZW4oY29uZi0+c3lzbmFtZSkgPiAzMSl7Ci0JCWtmcmVlKHBwcF9wcml2X2FyZWEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJZiBubyBzeXN0ZW0gbmFtZSBpcyBzcGVjaWZpZWQgKi8KLQlpZighc3RybGVuKGNvbmYtPnN5c25hbWUpICYmIChjYXJkLT51LnAuYXV0aGVudGljYXRvcikpewotCQlrZnJlZShwcHBfcHJpdl9hcmVhKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY29weSB0aGUgZGF0YSBpbnRvIHRoZSBwcHAgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQltZW1jcHkocHBwX3ByaXZfYXJlYS0+dXNlcmlkLCBjb25mLT51c2VyaWQsIHN0cmxlbihjb25mLT51c2VyaWQpKTsKLQltZW1jcHkocHBwX3ByaXZfYXJlYS0+cGFzc3dkLCBjb25mLT5wYXNzd2QsIHN0cmxlbihjb25mLT5wYXNzd2QpKTsKLQltZW1jcHkocHBwX3ByaXZfYXJlYS0+c3lzbmFtZSwgY29uZi0+c3lzbmFtZSwgc3RybGVuKGNvbmYtPnN5c25hbWUpKTsKLQotCQotCXBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFggPSBjb25mLT5lbmFibGVfSVBYOwotCWlmIChjb25mLT5uZXR3b3JrX251bWJlcil7Ci0JCXBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyID0gY29uZi0+bmV0d29ya19udW1iZXI7Ci0JfWVsc2V7Ci0JCXBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyID0gMHhERUFEQkVFRjsKLQl9Ci0KLQkvKiBUZWxscyB1cyB0aGF0IGlmIHRoaXMgaW50ZXJmYWNlIGlzIGEKLSAgICAgICAgICogZ2F0ZXdheSBvciBub3QgKi8KLQlpZiAoKHBwcF9wcml2X2FyZWEtPmdhdGV3YXkgPSBjb25mLT5nYXRld2F5KSA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludGVyZmFjZSAlcyBpcyBzZXQgYXMgYSBnYXRld2F5LlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsY2FyZC0+dS5wLmlmX25hbWUpOwotCX0KLQotCS8qIHByZXBhcmUgbmV0d29yayBkZXZpY2UgZGF0YSBzcGFjZSBmb3IgcmVnaXN0cmF0aW9uICovCi0gCXN0cmNweShkZXYtPm5hbWUsY2FyZC0+dS5wLmlmX25hbWUpOwotCQotCWRldi0+aW5pdCA9ICZpZl9pbml0OwotCWRldi0+cHJpdiA9IHBwcF9wcml2X2FyZWE7Ci0JZGV2LT5tdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGRldi0+bXR1LCBjYXJkLT53YW5kZXYubXR1KTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgd29yayByb3V0aW5lICovCi0JSU5JVF9XT1JLKCZwcHBfcHJpdl9hcmVhLT5wb2xsX3dvcmssICh2b2lkKikodm9pZCopcHBwX3BvbGwsIGRldik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBwb2xsaW5nIGRlbGF5IHRpbWVyICovCi0JaW5pdF90aW1lcigmcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCXBwcF9wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZnVuY3Rpb24gPSBwcHBfcG9sbF9kZWxheTsKLQkKLQkKLQkvKiBTaW5jZSB3ZSBzdGFydCB3aXRoIGR1bW15IElQIGFkZHJlc3NlcyB3ZSBjYW4gc2F5Ci0JICogdGhhdCByb3V0ZSBleGlzdHMgKi8KLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGVsZXRlIGxvZ2ljYWwgY2hhbm5lbC4KLSAqLwotc3RhdGljIGludCBkZWxfaWYoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9jb21tIChzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX2NvbW1fZGlzYWJsZV9zaHV0ZG93bihjYXJkKTsKLQlyZXR1cm47Ci19Ci0KLS8qKioqKiogV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEV4ZWN1dGUgYWRhcHRlciBpbnRlcmZhY2UgY29tbWFuZC4KLSAqLwotCi0vL0ZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0aGlzID8/Pz8KLXN0YXRpYyBpbnQgd3BwX2V4ZWMoc3RydWN0IHNkbGEgKmNhcmQsIHZvaWQgKnVfY21kLCB2b2lkICp1X2RhdGEpCi17Ci0JcHBwX21ib3hfdCAqbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGxlbjsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmNtZCwgdV9jbWQsIHNpemVvZihwcHBfY21kX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlsZW4gPSBtYm94LT5jbWQubGVuZ3RoOwotCi0JaWYgKGxlbikgewotCi0JCWlmKCBjb3B5X2Zyb21fdXNlcigodm9pZCopJm1ib3gtPmRhdGEsIHVfZGF0YSwgbGVuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JfQotCi0JLyogZXhlY3V0ZSBjb21tYW5kICovCi0JaWYgKCFzZGxhX2V4ZWMobWJveCkpCi0JCXJldHVybiAtRUlPOwotCi0JLyogcmV0dXJuIHJlc3VsdCAqLwotCWlmKCBjb3B5X3RvX3VzZXIodV9jbWQsICh2b2lkKikmbWJveC0+Y21kLCBzaXplb2YocHBwX2NtZF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWxlbiA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0KLQlpZiAobGVuICYmIHVfZGF0YSAmJiBjb3B5X3RvX3VzZXIodV9kYXRhLCAodm9pZCopJm1ib3gtPmRhdGEsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogTmV0d29yayBEZXZpY2UgSW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawotICogaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbi4gIFJldHVybmluZyBhbnl0aGluZyBidXQgemVybyB3aWxsIGZhaWwgaW50ZXJmYWNlCi0gKiByZWdpc3RyYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCXN0cnVjdCB3YW5fZGV2aWNlICp3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwotCi0JLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotCWRldi0+b3BlbgkJPSAmaWZfb3BlbjsKLQlkZXYtPnN0b3AJCT0gJmlmX2Nsb3NlOwotCWRldi0+aGFyZF9oZWFkZXIJPSAmaWZfaGVhZGVyOwotCWRldi0+cmVidWlsZF9oZWFkZXIJPSAmaWZfcmVidWlsZF9oZHI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT50eXBlCQk9IEFSUEhSRF9QUFA7CS8qIEFSUCBoL3cgdHlwZSAqLwotCWRldi0+ZmxhZ3MJCXw9IElGRl9QT0lOVE9QT0lOVDsKLQlkZXYtPmZsYWdzCQl8PSBJRkZfTk9BUlA7Ci0KLQkvKiBFbmFibGUgTXVsaXRjYXN0aW5nIGlmIHNwZWNpZmllZCBieSB1c2VyKi8KLQlpZiAocHBwX3ByaXZfYXJlYS0+bWMgPT0gV0FOT1BUX1lFUyl7Ci0JCWRldi0+ZmxhZ3MJfD0gSUZGX01VTFRJQ0FTVDsKLQl9Ci0KLQlkZXYtPm10dQkJPSB3YW5kZXYtPm10dTsKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IFBQUF9IRFJfTEVOOwkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0KLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKGp1c3QgZm9yIHJlZmVyZW5jZSkgKi8KLQlkZXYtPmlycQkJPSB3YW5kZXYtPmlycTsKLQlkZXYtPmRtYQkJPSB3YW5kZXYtPmRtYTsKLQlkZXYtPmJhc2VfYWRkcgkJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAkJPSB3YW5kZXYtPm1hZGRyOwotCWRldi0+bWVtX2VuZAkJPSB3YW5kZXYtPm1hZGRyICsgd2FuZGV2LT5tc2l6ZSAtIDE7Ci0KLSAgICAgICAgLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggKi8KLSAgICAgICAgZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0JU0VUX01PRFVMRV9PV05FUihkZXYpOwotICAgCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogT3BlbiBuZXR3b3JrIGludGVyZmFjZS4KLSAqIG8gZW5hYmxlIGNvbW11bmljYXRpb25zIGFuZCBpbnRlcnJ1cHRzLgotICogbyBwcmV2ZW50IG1vZHVsZSBmcm9tIHVubG9hZGluZyBieSBpbmNyZW1lbnRpbmcgdXNlIGNvdW50Ci0gKgotICogUmV0dXJuIDAgaWYgTy5rLiBvciBlcnJuby4KLSAqLwotc3RhdGljIGludCBpZl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IHBwcF9wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JLy91bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQotCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JcHBwX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWUgPSB0di50dl9zZWM7Ci0KLQkvKiBXZSBjYW5ub3QgY29uZmlndXJlIHRoZSBjYXJkIGhlcmUgYmVjYXVzZSB3ZSBkb24ndAotCSAqIGhhdmUgYWNjZXNzIHRvIHRoZSBpbnRlcmZhY2UgSVAgYWRkcmVzc2VzLgotICAgICAgICAgKiBPbmNlIHRoZSBpbnRlcmZhY2UgaW5pdGlsaXphdGlvbiBpcyBjb21wbGV0ZSwgd2Ugd2lsbCBiZQotICAgICAgICAgKiBhYmxlIHRvIGFjY2VzcyB0aGUgSVAgYWRkcmVzc2VzLiAgVGhlcmVmb3JlLAotICAgICAgICAgKiBjb25maWd1cmUgdGhlIHBwcCBsaW5rIGluIHRoZSBwb2xsIHJvdXRpbmUgKi8KLQlzZXRfYml0KDAsJnBwcF9wcml2X2FyZWEtPmNvbmZpZ19wcHApOwotCXBwcF9wcml2X2FyZWEtPmNvbmZpZ193YWl0X3RpbWVvdXQ9amlmZmllczsKLQotCS8qIFN0YXJ0IHRoZSBQUFAgY29uZmlndXJhdGlvbiBhZnRlciAxc2VjIGRlbGF5LgotCSAqIFRoaXMgd2lsbCBnaXZlIHRoZSBpbnRlcmZhY2UgaW5pdGlsaXphdGlvbiB0aW1lCi0JICogdG8gZmluaXNoIGl0cyBjb25maWd1cmF0aW9uICovCi0JbW9kX3RpbWVyKCZwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyLCBqaWZmaWVzICsgSFopOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsb3NlIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBpZiB0aGlzIGlzIHRoZSBsYXN0IG9wZW4sIHRoZW4gZGlzYWJsZSBjb21tdW5pY2F0aW9ucyBhbmQgaW50ZXJydXB0cy4KLSAqIG8gcmVzZXQgZmxhZ3MuCi0gKi8KLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQl3YW5waXBlX2Nsb3NlKGNhcmQpOwotCi0JZGVsX3RpbWVyICgmcHBwX3ByaXZfYXJlYS0+cG9sbF9kZWxheV90aW1lcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQnVpbGQgbWVkaWEgaGVhZGVyLgotICoKLSAqIFRoZSB0cmljayBoZXJlIGlzIHRvIHB1dCBwYWNrZXQgdHlwZSAoRXRoZXJ0eXBlKSBpbnRvICdwcm90b2NvbCcgZmllbGQgb2YKLSAqIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGF0IHdlIGRvbid0IGZvcmdldCBpdC4gIElmIHBhY2tldCB0eXBlIGlzIG5vdAotICogc3VwcG9ydGVkLCBzZXQgc2tiLT5wcm90b2NvbCB0byAwIGFuZCBkaXNjYXJkIHBhY2tldCBsYXRlci4KLSAqCi0gKiBSZXR1cm46CW1lZGlhIGhlYWRlciBsZW5ndGguCi0gKi8KLXN0YXRpYyBpbnQgaWZfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdW5zaWduZWQgc2hvcnQgdHlwZSwgdm9pZCAqZGFkZHIsIHZvaWQgKnNhZGRyLCB1bnNpZ25lZCBsZW4pCi17Ci0Jc3dpdGNoICh0eXBlKQotCXsKLQkJY2FzZSBFVEhfUF9JUDoKLQkJY2FzZSBFVEhfUF9JUFg6Ci0JCQlza2ItPnByb3RvY29sID0gaHRvbnModHlwZSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJc2tiLT5wcm90b2NvbCA9IDA7Ci0JfQotCi0JcmV0dXJuIFBQUF9IRFJfTEVOOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlLWJ1aWxkIG1lZGlhIGhlYWRlci4KLSAqCi0gKiBSZXR1cm46CTEJcGh5c2ljYWwgYWRkcmVzcyByZXNvbHZlZC4KLSAqCQkwCXBoeXNpY2FsIGFkZHJlc3Mgbm90IHJlc29sdmVkCi0gKi8KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYnVpbGRfaGVhZGVyKCkgY2FsbGVkIGZvciBpbnRlcmZhY2UgJXMhXG4iLAotCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUpOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0cmFuc21pdCB0aW1lb3V0IGV2ZW50IGZyb20gbmV0aWYgd2F0Y2hkb2cKLSAqLwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIAlwcHBfcHJpdmF0ZV9hcmVhX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hhbi0+Y2FyZDsKLQkKLQkvKiBJZiBvdXIgZGV2aWNlIHN0YXlzIGJ1c3kgZm9yIGF0IGxlYXN0IDUgc2Vjb25kcyB0aGVuIHdlIHdpbGwKLQkgKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgYnkgbWFraW5nIGRldi0+dGJ1c3kgPSAwLiAgV2UgZXhwZWN0Ci0JICogdGhhdCBvdXIgZGV2aWNlIG5ldmVyIHN0YXlzIGJ1c3kgbW9yZSB0aGFuIDUgc2Vjb25kcy4gU28gdGhpcyAgICAgICAgICAgICAgICAgCi0JICogaXMgb25seSB1c2VkIGFzIGEgbGFzdCByZXNvcnQuCi0JICovCi0KLQkrKyBjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90YnVzeTsKLQkrK2NhcmQtPndhbmRldi5zdGF0cy5jb2xsaXNpb25zOwotCi0JcHJpbnRrIChLRVJOX0lORk8gIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQgb24gJXNcbiIsIGNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3RidXN5X3RpbWVvdXQ7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBhIHBhY2tldCBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikgdG8gYmxvY2sgYSB0aW1lci1iYXNlZAotICogICB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nLgotICogbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiBvIGV4ZWN1dGUgYWRhcHRlciBzZW5kIGNvbW1hbmQuCi0gKiBvIGZyZWUgc29ja2V0IGJ1ZmZlcgotICoKLSAqIFJldHVybjoJMAljb21wbGV0ZSAoc29ja2V0IGJ1ZmZlciBtdXN0IGJlIGZyZWVkKQotICoJCW5vbi0wCXBhY2tldCBtYXkgYmUgcmUtdHJhbnNtaXR0ZWQgKHRidXN5IG11c3QgYmUgc2V0KQotICoKLSAqIE5vdGVzOgotICogMS4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBlaXRoZXIgYnkgdGhlIHByb3RvY29sIHN0YWNrIG9yIGJ5IHRoZSAibmV0Ci0gKiAgICBib3R0b20gaGFsZiIgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKS4KLSAqIDIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQotICogICAgcHJvdG9jb2wgc3RhY2sgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4KLSAqLwotc3RhdGljIGludCBpZl9zZW5kIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCXVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQ7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0JaW50IHVkcF90eXBlOwotCWludCBlcnI9MDsKLQkKLQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2VudHJ5OwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQotCWlmIChza2IgPT0gTlVMTCkgewotCi0JCS8qIElmIHdlIGdldCBoZXJlLCBzb21lIGhpZ2hlciBsYXllciB0aGlua3Mgd2UndmUgbWlzc2VkIGFuCi0JCSAqIHR4LWRvbmUgaW50ZXJydXB0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVyZmFjZSAlcyBnb3Qga2lja2VkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JCQotCQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3NrYl9udWxsOwotCQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNlbmRwYWNrZXQgPSBza2ItPmRhdGE7Ci0KLQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZSggc2tiLCBjYXJkICk7Ci0KLQotCWlmICh1ZHBfdHlwZSA9PSBVRFBfUFRQSVBFX1RZUEUpewotCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fU1RBQ0ssIGNhcmQsIHNrYiwgZGV2LAotICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgIHBwcF9wcml2X2FyZWEpKXsKLQkgICAgICAgICAgICAgICAJZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwotCQl9Ci0JCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfUElQRV9yZXF1ZXN0OwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBDaGVjayBmb3IgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIAotCSAqIElmIGZvdW5kLCBkcm9wIChkZWFsbG9jYXRlKSBhIHBhY2tldCBhbmQgcmV0dXJuLgotCSAqLwotCWlmKGNoa19iY2FzdF9tY2FzdF9hZGRyKGNhcmQsIGRldiwgc2tiKSl7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotCi0gCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KXsKLQkJczUwOF9sb2NrKGNhcmQsJnNtcF9mbGFncyk7Ci0JfQotCi0gICAgCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQ6ICVseFxuIiwKLQkJCQljYXJkLT53YW5kZXYubmFtZSxjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9jcml0aWNhbF9ub25fSVNSOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlnb3RvIGlmX3NlbmRfZXhpdF9jcml0OwotCX0KLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCkgewotCi0JCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfd2FuX2Rpc2Nvbm5lY3RlZDsKLSAgICAgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCQotICAgICAJfSBlbHNlIGlmICghc2tiLT5wcm90b2NvbCkgewotCQkrK3BwcF9wcml2X2FyZWEtPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3Byb3RvY29sX2Vycm9yOwotICAgICAgICAJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZXJyb3JzOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkKLQl9IGVsc2UgewotCi0JCS8qSWYgaXQncyBJUFggY2hhbmdlIHRoZSBuZXR3b3JrIG51bWJlcnMgdG8gMCBpZiB0aGV5J3JlIG91cnMuKi8KLQkJaWYoIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBYKSApIHsKLQkJCWlmKHBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFgpIHsKLQkJCQlzd2l0Y2hfbmV0X251bWJlcnMoIHNrYi0+ZGF0YSwgCi0JCQkJCXBwcF9wcml2X2FyZWEtPm5ldHdvcmtfbnVtYmVyLCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJCWdvdG8gaWZfc2VuZF9leGl0X2NyaXQ7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocHBwX3NlbmQoY2FyZCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgc2tiLT5wcm90b2NvbCkpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYWRwdHJfYmZyc19mdWxsOwotCQkJKytwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90eF9pbnRfZW5hYmxlZDsKLQkJfSBlbHNlIHsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfYmZyX3Bhc3NlZF90b19hZHB0cjsKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHM7Ci0JCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCX0KLSAgICAJfQotCQotaWZfc2VuZF9leGl0X2NyaXQ6Ci0JCi0JaWYgKCEoZXJyPW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkpewotICAgICAgCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotCQlwcHBfcHJpdl9hcmVhLT50aWNrX2NvdW50ZXIgPSBqaWZmaWVzOwotCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVFhSRFk7CS8qIHVubWFzayBUeCBpbnRlcnJ1cHRzICovCi0JfQotCQotCWNsZWFyX2JpdChTRU5EX0NSSVQsJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewkKLQkJczUwOF91bmxvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0b3JlIGEgVURQIG1hbmFnZW1lbnQgcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nLgotICovCi0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGNoYXIgdWRwX3BrdF9zcmMsIHNkbGFfdCogY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBwX3ByaXZhdGVfYXJlYV90KiBwcHBfcHJpdl9hcmVhICkKLXsKLQlpbnQgdWRwX3BrdF9zdG9yZWQgPSAwOwotCi0JaWYoIXBwcF9wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCAmJiAoc2tiLT5sZW48PU1BWF9MR1RIX1VEUF9NR05UX1BLVCkpewotICAgICAgICAJcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gc2tiLT5sZW47Ci0JCXBwcF9wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID0gdWRwX3BrdF9zcmM7Ci0gICAgICAgCQltZW1jcHkocHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLQkJcHBwX3ByaXZfYXJlYS0+cHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwotCQl1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0JfWVsc2V7Ci0JCWlmIChza2ItPmxlbiA+IE1BWF9MR1RIX1VEUF9NR05UX1BLVCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUElQRU1PTiBVRFAgcmVxdWVzdCB0b28gbG9uZyA6ICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHNrYi0+bGVuKTsKLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUElQRU1PTiBVUEQgcmVxdWVzdCBhbHJlYWR5IHBlbmRpbmdcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJcHBwX3ByaXZfYXJlYS0+dWRwX3BrdF9sZ3RoID0gMDsKLQl9Ci0KLQlpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9TVEFDSyl7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfWVsc2V7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0KLQlyZXR1cm4odWRwX3BrdF9zdG9yZWQpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbGVuZ3RoIG9mIHJlcGx5LgotICovCi1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICkgCi17Ci0JdW5zaWduZWQgc2hvcnQgbGVuLCB1ZHBfbGVuZ3RoLCB0ZW1wLCBpcF9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBpcF90ZW1wOwotCWludCBldmVuX2JvdW5kID0gMDsKLQlwcHBfdWRwX3BrdF90ICpwX3VkcF9wa3QgPSAocHBwX3VkcF9wa3RfdCAqKWRhdGE7Ci0gCi0JLyogU2V0IGxlbmd0aCBvZiBwYWNrZXQgKi8KLQlsZW4gPSBzaXplb2YoaXBfcGt0X3QpKyAKLQkgICAgICBzaXplb2YodWRwX3BrdF90KSsKLQkgICAgICBzaXplb2Yod3BfbWdtdF90KSsKLQkgICAgICBzaXplb2YoY2Jsb2NrX3QpKwotCSAgICAgIG1ib3hfbGVuOwotCi0JLyogZmlsbCBpbiBVRFAgcmVwbHkgKi8KLSAgCXBfdWRwX3BrdC0+d3BfbWdtdC5yZXF1ZXN0X3JlcGx5ID0gVURQTUdNVF9SRVBMWTsgCi0KLQkvKiBmaWxsIGluIFVEUCBsZW5ndGggKi8KLQl1ZHBfbGVuZ3RoID0gc2l6ZW9mKHVkcF9wa3RfdCkrIAotCQkgICAgIHNpemVvZih3cF9tZ210X3QpKwotCQkgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JCSAgICAgbWJveF9sZW47IAotICAKLSAKLQkvKiBwdXQgaXQgb24gYW4gZXZlbiBib3VuZGFyeSAqLwotCWlmICggdWRwX2xlbmd0aCAmIDB4MDAwMSApIHsKLQkJdWRwX2xlbmd0aCArPSAxOwotCQlsZW4gKz0gMTsKLQkJZXZlbl9ib3VuZD0xOwotCX0gCi0JCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JcF91ZHBfcGt0LT51ZHBfcGt0LnVkcF9sZW5ndGggPSB0ZW1wOwkJCi0KLSAKLQkvKiBzd2FwIFVEUCBwb3J0cyAqLwotCXRlbXAgPSBwX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQgPSAKLQkJCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQ7IAotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0KLQkvKiBhZGQgVURQIHBzZXVkbyBoZWFkZXIgKi8KLQl0ZW1wID0gMHgxMTAwOwotCSooKHVuc2lnbmVkIHNob3J0ICopKHBfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKSkgPSB0ZW1wOwotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCSooKHVuc2lnbmVkIHNob3J0ICopKHBfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKzIpKSA9IHRlbXA7Ci0gCi0JLyogY2FsY3VsYXRlIFVEUCBjaGVja3N1bSAqLwotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAwOwotCXBfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAKLQkJY2FsY19jaGVja3N1bSgmZGF0YVtVRFBfT0ZGU0VUXSx1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSB1ZHBfbGVuZ3RoICsgc2l6ZW9mKGlwX3BrdF90KTsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0gIAlwX3VkcF9wa3QtPmlwX3BrdC50b3RhbF9sZW5ndGggPSB0ZW1wOwotIAotCS8qIHN3YXAgSVAgYWRkcmVzc2VzICovCi0JaXBfdGVtcCA9IHBfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzOwotCXBfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzID0gcF91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3M7Ci0JcF91ZHBfcGt0LT5pcF9wa3QuaXBfZHN0X2FkZHJlc3MgPSBpcF90ZW1wOwotCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCXBfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IDA7Ci0JcF91ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gY2FsY19jaGVja3N1bShkYXRhLHNpemVvZihpcF9wa3RfdCkpOwotCi0JcmV0dXJuIGxlbjsKLQotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLS8qCi0gICBJZiBpbmNvbWluZyBpcyAwIChvdXRnb2luZyktIGlmIHRoZSBuZXQgbnVtYmVycyBpcyBvdXJzIG1ha2UgaXQgMAotICAgaWYgaW5jb21pbmcgaXMgMSAtIGlmIHRoZSBuZXQgbnVtYmVyIGlzIDAgbWFrZSBpdCBvdXJzIAotCi0qLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKnNlbmRwYWNrZXQsIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXIsIHVuc2lnbmVkIGNoYXIgaW5jb21pbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBwbmV0d29ya19udW1iZXI7Ci0KLQlwbmV0d29ya19udW1iZXIgPSAodW5zaWduZWQgbG9uZykoKHNlbmRwYWNrZXRbNl0gPDwgMjQpICsgCi0JCQkgIChzZW5kcGFja2V0WzddIDw8IDE2KSArIChzZW5kcGFja2V0WzhdIDw8IDgpICsgCi0JCQkgIHNlbmRwYWNrZXRbOV0pOwotCi0JaWYgKCFpbmNvbWluZykgewotCQkvL0lmIHRoZSBkZXN0aW5hdGlvbiBuZXR3b3JrIG51bWJlciBpcyBvdXJzLCBtYWtlIGl0IDAKLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSBuZXR3b3JrX251bWJlcikgewotCQkJc2VuZHBhY2tldFs2XSA9IHNlbmRwYWNrZXRbN10gPSBzZW5kcGFja2V0WzhdID0gCi0JCQkJCSBzZW5kcGFja2V0WzldID0gMHgwMDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8vSWYgdGhlIGluY29taW5nIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCkgewotCQkJc2VuZHBhY2tldFs2XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFs4XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDAwMEZGMDApID4+IDgpOwotCQkJc2VuZHBhY2tldFs5XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwMDBGRik7Ci0JCX0KLQl9Ci0KLQotCXBuZXR3b3JrX251bWJlciA9ICh1bnNpZ25lZCBsb25nKSgoc2VuZHBhY2tldFsxOF0gPDwgMjQpICsgCi0JCQkgIChzZW5kcGFja2V0WzE5XSA8PCAxNikgKyAoc2VuZHBhY2tldFsyMF0gPDwgOCkgKyAKLQkJCSAgc2VuZHBhY2tldFsyMV0pOwotCi0JaWYoICFpbmNvbWluZyApIHsKLQkJLy9JZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgb3VycywgbWFrZSBpdCAwCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbMThdID0gc2VuZHBhY2tldFsxOV0gPSBzZW5kcGFja2V0WzIwXSA9IAotCQkJCQkgc2VuZHBhY2tldFsyMV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLy9JZiB0aGUgc291cmNlIG5ldHdvcmsgaXMgMCwgbWFrZSBpdCBvdXJzCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gMCApIHsKLQkJCXNlbmRwYWNrZXRbMThdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbMTldID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMEZGMDAwMCkgPj4gMTYpOwotCQkJc2VuZHBhY2tldFsyMF0gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDBGRjAwKSA+PiA4KTsKLQkJCXNlbmRwYWNrZXRbMjFdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLX0gLyogc3dpdGNoX25ldF9udW1iZXJzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogUmV0dXJuIGEgcG9pbnRlciB0byBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCi0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZDsKLQkKLQlpZiggcHBwX3ByaXZfYXJlYSA9PSBOVUxMICkKLQkJcmV0dXJuIE5VTEw7Ci0KLQljYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQlyZXR1cm4gJmNhcmQtPndhbmRldi5zdGF0czsKLX0KLQotLyoqKioqKiBQUFAgRmlybXdhcmUgSW50ZXJmYWNlIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBmaXJtd2FyZSBjb2RlIHZlcnNpb24uCi0gKglQdXQgY29kZSB2ZXJzaW9uIGFzIEFTQ0lJIHN0cmluZyBpbiBzdHIuIAotICovCi1zdGF0aWMgaW50IHBwcF9yZWFkX3ZlcnNpb24oc2RsYV90ICpjYXJkLCBjaGFyICpzdHIpCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfUkVBRF9DT0RFX1ZFUlNJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykKLSAKLQkJcHBwX2Vycm9yKGNhcmQsIGVyciwgbWIpOwotCi0JZWxzZSBpZiAoc3RyKSB7Ci0KLQkJaW50IGxlbiA9IG1iLT5jbWQubGVuZ3RoOwotCi0JCW1lbWNweShzdHIsIG1iLT5kYXRhLCBsZW4pOwotCQlzdHJbbGVuXSA9ICdcMCc7Ci0KLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBPdXQtQm91bmQgQXV0aGVudGljYXRpb24uCi0qLwotc3RhdGljIGludCBwcHBfc2V0X291dGJuZF9hdXRoIChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1lbXNldCgmbWItPmRhdGEsIDAsIChzdHJsZW4ocHBwX3ByaXZfYXJlYS0+dXNlcmlkKSArIAotCQkJCQlzdHJsZW4ocHBwX3ByaXZfYXJlYS0+cGFzc3dkKSArIDIgKSApOwotCW1lbWNweShtYi0+ZGF0YSwgcHBwX3ByaXZfYXJlYS0+dXNlcmlkLCBzdHJsZW4ocHBwX3ByaXZfYXJlYS0+dXNlcmlkKSk7Ci0JbWVtY3B5KChtYi0+ZGF0YSArIHN0cmxlbihwcHBfcHJpdl9hcmVhLT51c2VyaWQpICsgMSksIAotCQlwcHBfcHJpdl9hcmVhLT5wYXNzd2QsIHN0cmxlbihwcHBfcHJpdl9hcmVhLT5wYXNzd2QpKTsJCi0JCi0JbWItPmNtZC5sZW5ndGggID0gc3RybGVuKHBwcF9wcml2X2FyZWEtPnVzZXJpZCkgKyAKLQkJCQkJc3RybGVuKHBwcF9wcml2X2FyZWEtPnBhc3N3ZCkgKyAyIDsKLQkKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfU0VUX09VVEJPVU5EX0FVVEg7Ci0KLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0IEluLUJvdW5kIEF1dGhlbnRpY2F0aW9uLgotKi8KLXN0YXRpYyBpbnQgcHBwX3NldF9pbmJuZF9hdXRoIChzZGxhX3QgKmNhcmQsIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVyciwgaTsKLQljaGFyKiB1c2VyX3Rva2Vuc1szMl07Ci0JY2hhciogcGFzc190b2tlbnNbMzJdOwotCWludCB1c2VyaWRzLCBwYXNzd2RzOwotCWludCBhZGRfcHRyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWVtc2V0KCZtYi0+ZGF0YSwgMCwgMTAwOCk7Ci0JbWVtY3B5KG1iLT5kYXRhLCBwcHBfcHJpdl9hcmVhLT5zeXNuYW1lLCAKLQkJCQkJCXN0cmxlbihwcHBfcHJpdl9hcmVhLT5zeXNuYW1lKSk7Ci0JCi0JLyogUGFyc2UgdGhlIHVzZXJpZCBzdHJpbmcgYW5kIHRoZSBwYXNzd29yZCBzdHJpbmcgYW5kIGJ1aWxkIGEgc3RyaW5nCi0JICAgdG8gY29weSBpdCB0byB0aGUgZGF0YSBhcmVhIG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZS4gICBUaGUgc3RyaW5nCi0JICAgd2lsbCBsb29rIGxpa2UgIlNZU19OQU1FPE5VTEw+VVNFUjE8TlVMTD5QQVNTMTxOVUxMPlVTRVIyPE5VTEw+UEFTUzIKLQkgICAuLi4uPE5VTEw+ICIgCi0JICovCi0JdXNlcmlkcyA9IHRva2VuaXplKCBwcHBfcHJpdl9hcmVhLT51c2VyaWQsIHVzZXJfdG9rZW5zKTsKLQlwYXNzd2RzID0gdG9rZW5pemUoIHBwcF9wcml2X2FyZWEtPnBhc3N3ZCwgcGFzc190b2tlbnMpOwotCQotCWlmICh1c2VyaWRzICE9IHBhc3N3ZHMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTnVtYmVyIG9mIHBhc3N3b3JkcyBkb2VzIG5vdCBlcXVhbCB0aGUgbnVtYmVyIG9mIHVzZXIgaWRzXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7CQotCX0KLQotCWFkZF9wdHIgPSBzdHJsZW4ocHBwX3ByaXZfYXJlYS0+c3lzbmFtZSkgKyAxOwotCWZvciAoaT0wOyBpPHVzZXJpZHM7IGkrKyl7Ci0JCW1lbWNweSgobWItPmRhdGEgKyBhZGRfcHRyKSwgdXNlcl90b2tlbnNbaV0sIAotCQkJCQkJCXN0cmxlbih1c2VyX3Rva2Vuc1tpXSkpOwotCQltZW1jcHkoKG1iLT5kYXRhICsgYWRkX3B0ciArIHN0cmxlbih1c2VyX3Rva2Vuc1tpXSkgKyAxKSwgCi0JCQkJCXBhc3NfdG9rZW5zW2ldLCBzdHJsZW4ocGFzc190b2tlbnNbaV0pKTsKLQkJYWRkX3B0ciA9IGFkZF9wdHIgKyBzdHJsZW4odXNlcl90b2tlbnNbaV0pICsgMSArIAotCQkJCQkJc3RybGVuKHBhc3NfdG9rZW5zW2ldKSArIDE7Ci0JfQotCi0JbWItPmNtZC5sZW5ndGggID0gYWRkX3B0ciArIDE7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX1NFVF9JTkJPVU5EX0FVVEg7Ci0KLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWlmIChlcnIgIT0gQ01EX09LKQotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVG9rZW5pemUgc3RyaW5nLgotICogICAgICBQYXJzZSBhIHN0cmluZyBvZiB0aGUgZm9sbG93aW5nIHN5bnRheDoKLSAqICAgICAgICAgICAgICA8YXJnMT4sPGFyZzI+LC4uLgotICogICAgICBhbmQgZmlsbCBhcnJheSBvZiB0b2tlbnMgd2l0aCBwb2ludGVycyB0byBzdHJpbmcgZWxlbWVudHMuCi0gKgotICovCi1zdGF0aWMgaW50IHRva2VuaXplIChjaGFyICpzdHIsIGNoYXIgKip0b2tlbnMpCi17Ci0gICAgICAgIGludCBjbnQgPSAwOwotCi0gICAgICAgIHRva2Vuc1swXSA9IHN0cnNlcCgmc3RyLCAiLyIpOwotICAgICAgICB3aGlsZSAodG9rZW5zW2NudF0gJiYgKGNudCA8IDMyIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICB0b2tlbnNbY250XSA9IHN0cnN0cmlwKHRva2Vuc1tjbnRdLCAiIFx0Iik7Ci0gICAgICAgICAgICAgICAgdG9rZW5zWysrY250XSA9IHN0cnNlcCgmc3RyLCAiLyIpOwotICAgICAgICB9Ci0JcmV0dXJuIGNudDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgb2ZmIHRoZSBzdHJpbmcgc3RyLgotICovCi1zdGF0aWMgY2hhciogc3Ryc3RyaXAgKGNoYXIgKnN0ciwgY2hhciogcykKLXsKLSAgICAgICAgY2hhciAqZW9zID0gc3RyICsgc3RybGVuKHN0cik7ICAgICAgICAgIC8qIC0+IGVuZCBvZiBzdHJpbmcgKi8KLQotICAgICAgICB3aGlsZSAoKnN0ciAmJiBzdHJjaHIocywgKnN0cikpCi0gICAgICAgICAgICAgICAgKytzdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCBsZWFkaW5nIHNwYWNlcyAqLwotICAgICAgICA7Ci0gICAgICAgIHdoaWxlICgoZW9zID4gc3RyKSAmJiBzdHJjaHIocywgKihlb3MgLSAxKSkpCi0gICAgICAgICAgICAgICAgLS1lb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAgOwotICAgICAgICAqZW9zID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHN0cjsKLX0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29uZmlndXJlIFBQUCBmaXJtd2FyZS4KLSAqLwotc3RhdGljIGludCBwcHBfY29uZmlndXJlKHNkbGFfdCAqY2FyZCwgdm9pZCAqZGF0YSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGRhdGFfbGVuID0gc2l6ZW9mKHBwcDUwOF9jb25mX3QpOyAKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWVtY3B5KG1iLT5kYXRhLCBkYXRhLCBkYXRhX2xlbik7Ci0JbWItPmNtZC5sZW5ndGggID0gZGF0YV9sZW47Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX1NFVF9DT05GSUc7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBpbnRlcnJ1cHQgbW9kZS4KLSAqLwotc3RhdGljIGludCBwcHBfc2V0X2ludHJfbW9kZShzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGNoYXIgbW9kZSkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0gICAgICAgIHBwcF9pbnRyX2luZm9fdCAqcHBwX2ludHJfZGF0YSA9IChwcHBfaW50cl9pbmZvX3QgKikgJm1iLT5kYXRhWzBdOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQlwcHBfaW50cl9kYXRhLT5pX2VuYWJsZSA9IG1vZGU7Ci0KLQlwcHBfaW50cl9kYXRhLT5pcnEgPSBjYXJkLT5ody5pcnE7Ci0JbWItPmNtZC5sZW5ndGggPSAyOwotCi0gICAgICAgLyogSWYgdGltZXIgaGFzIGJlZW4gZW5hYmxlZCwgc2V0IHRoZSB0aW1lciBkZWxheSB0byAxc2VjICovCi0gICAgICAgaWYgKG1vZGUgJiAweDgwKXsKLSAgICAgICAJCXBwcF9pbnRyX2RhdGEtPnRpbWVyX2xlbiA9IDI1MDsgLy81Oy8vMTAwOyAvLzI1MDsKLSAgICAgICAgICAgICAgICBtYi0+Y21kLmxlbmd0aCA9IDQ7Ci0gICAgICAgIH0KLQkKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfU0VUX0lOVFJfRkxBR1M7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciAhPSBDTURfT0spIAotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0gCQkKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IHBwcF9jb21tX2VuYWJsZShzZGxhX3QgKmNhcmQpCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmNvbW1hbmQgPSBQUFBfQ09NTV9FTkFCTEU7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JCi0JaWYgKGVyciAhPSBDTURfT0spIAotCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JZWxzZQkKLQkJY2FyZC0+dS5wLmNvbW1fZW5hYmxlZCA9IDE7CQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEaXNhYmxlIGNvbW11bmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IHBwcF9jb21tX2Rpc2FibGUoc2RsYV90ICpjYXJkKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX0NPTU1fRElTQUJMRTsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENNRF9PSykgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQllbHNlCi0JCWNhcmQtPnUucC5jb21tX2VuYWJsZWQgPSAwOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwcHBfY29tbV9kaXNhYmxlX3NodXRkb3duKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JcHBwX2ludHJfaW5mb190ICpwcHBfaW50cl9kYXRhOwotCWludCBlcnI7Ci0KLQlpZiAoIW1iKXsKLQkJcmV0dXJuIDE7Ci0JfQotCQotCXBwcF9pbnRyX2RhdGEgPSAocHBwX2ludHJfaW5mb190ICopICZtYi0+ZGF0YVswXTsKLQkKLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JcHBwX2ludHJfZGF0YS0+aV9lbmFibGUgPSAwOwotCi0JcHBwX2ludHJfZGF0YS0+aXJxID0gY2FyZC0+aHcuaXJxOwotCW1iLT5jbWQubGVuZ3RoID0gMjsKLQotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9TRVRfSU5UUl9GTEFHUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCS8qIERpc2FibGUgY29tbXVuaWNhdGlub25zICovCi0JbWVtc2V0KCZtYi0+Y21kLCAwLCBzaXplb2YocHBwX2NtZF90KSk7Ci0JbWItPmNtZC5jb21tYW5kID0gUFBQX0NPTU1fRElTQUJMRTsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQotCWNhcmQtPnUucC5jb21tX2VuYWJsZWQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBjb21tdW5pY2F0aW9ucyBlcnJvciBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHBwcF9nZXRfZXJyX3N0YXRzKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfbWJveF90ICptYiA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9SRUFEX0VSUk9SX1NUQVRTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQotCWlmIChlcnIgPT0gQ01EX09LKSB7Ci0JCQotCQlwcHBfZXJyX3N0YXRzX3QqIHN0YXRzID0gKHZvaWQqKW1iLT5kYXRhOwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfb3Zlcl9lcnJvcnMgICAgPSBzdGF0cy0+cnhfb3ZlcnJ1bjsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2NyY19lcnJvcnMgICAgID0gc3RhdHMtPnJ4X2JhZF9jcmM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICA9IHN0YXRzLT5yeF9hYm9ydDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgID0gc3RhdHMtPnJ4X2xvc3Q7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9IHN0YXRzLT50eF9hYm9ydDsKLQkKLQl9IGVsc2UgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNlbmQgcGFja2V0LgotICoJUmV0dXJuOgkwIC0gby5rLgotICoJCTEgLSBubyB0cmFuc21pdCBidWZmZXJzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgaW50IHBwcF9zZW5kIChzZGxhX3QgKmNhcmQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgcHJvdG8pCi17Ci0JcHBwX2J1Zl9jdGxfdCAqdHhidWYgPSBjYXJkLT51LnAudHhidWY7Ci0KLQlpZiAodHhidWYtPmZsYWcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0JCi0Jc2RsYV9wb2tlKCZjYXJkLT5odywgdHhidWYtPmJ1Zi5wdHIsIGRhdGEsIGxlbik7Ci0KLQl0eGJ1Zi0+bGVuZ3RoID0gbGVuOwkJLyogZnJhbWUgbGVuZ3RoICovCi0JCi0JaWYgKHByb3RvID09IGh0b25zKEVUSF9QX0lQWCkpCi0JCXR4YnVmLT5wcm90byA9IDB4MDE7CS8qIHByb3RvY29sIElEICovCi0JZWxzZQotCQl0eGJ1Zi0+cHJvdG8gPSAweDAwOwkvKiBwcm90b2NvbCBJRCAqLwotCQotCXR4YnVmLT5mbGFnID0gMTsJCS8qIHN0YXJ0IHRyYW5zbWlzc2lvbiAqLwotCi0JLyogVXBkYXRlIHRyYW5zbWl0IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCWNhcmQtPnUucC50eGJ1ZiA9ICsrdHhidWY7Ci0KLQlpZiAoKHZvaWQqKXR4YnVmID4gY2FyZC0+dS5wLnR4YnVmX2xhc3QpCi0JCWNhcmQtPnUucC50eGJ1ZiA9IGNhcmQtPnUucC50eGJ1Zl9iYXNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKiogRmlybXdhcmUgRXJyb3IgSGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpcm13YXJlIGVycm9yIGhhbmRsZXIuCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGZpcm13YXJlIGNvbW1hbmQgcmV0dXJucyBub24temVybwotICoJcmV0dXJuIGNvZGUuCi0gKgotICogUmV0dXJuIHplcm8gaWYgcHJldmlvdXMgY29tbWFuZCBoYXMgdG8gYmUgY2FuY2VsbGVkLgotICovCi1zdGF0aWMgaW50IHBwcF9lcnJvcihzZGxhX3QgKmNhcmQsIGludCBlcnIsIHBwcF9tYm94X3QgKm1iKQotewotCXVuc2lnbmVkIGNtZCA9IG1iLT5jbWQuY29tbWFuZDsKLQotCXN3aXRjaCAoZXJyKSB7Ci0KLQkJY2FzZSBDTURfVElNRU9VVDoKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY21kKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIgotCQkJCSwgY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqIEludGVycnVwdCBIYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQUFAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqLwotc3RhdGljIHZvaWQgd3BwX2lzciAoc2RsYV90ICpjYXJkKQotewotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCWNoYXIgKnB0ciA9ICZmbGFncy0+aWZsYWc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JaW50IGk7Ci0KLQljYXJkLT5pbl9pc3IgPSAxOwotCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfZW50cnk7Ci0KLQlpZiAoIWRldiAmJiBmbGFncy0+aWZsYWcgIT0gUFBQX0lOVFJfQ01EKXsKLQkJY2FyZC0+aW5faXNyID0gMDsKLQkJZmxhZ3MtPmlmbGFnID0gMDsKLQkJcmV0dXJuOwotCX0KLQkKLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpIHsKLQkJY2FyZC0+aW5faXNyID0gMDsKLQkJZmxhZ3MtPmlmbGFnID0gMDsKLQkJcmV0dXJuOwotCX0KLQkKLQkKLQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7Ci0JCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9hbHJlYWR5X2NyaXRpY2FsOwotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBDcml0aWNhbCB3aGlsZSBpbiBJU1IhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWNhcmQtPmluX2lzciA9IDA7Ci0JCQlmbGFncy0+aWZsYWcgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChmbGFncy0+aWZsYWcpIHsKLQotCQljYXNlIFBQUF9JTlRSX1JYUkRZOgkvKiByZWNlaXZlIGludGVycnVwdCAgMHgwMSAgKGJpdCAwKSovCi0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3J4OwotCQkJcnhfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfVFhSRFk6CS8qIHRyYW5zbWl0IGludGVycnVwdCAgMHgwMiAoYml0IDEpKi8KLQkJCSsrY2FyZC0+c3RhdGlzdGljcy5pc3JfdHg7Ci0JCQlmbGFncy0+aW1hc2sgJj0gflBQUF9JTlRSX1RYUkRZOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQUFBfSU5UUl9DTUQ6ICAgICAgLyogaW50ZXJmYWNlIGNvbW1hbmQgY29tcGxldGVkICovCi0JCQkrK0ludHJfdGVzdF9jb3VudGVyOwotCQkJKytjYXJkLT5zdGF0aXN0aWNzLmlzcl9pbnRyX3Rlc3Q7Ci0JCQlicmVhazsKLQotCQljYXNlIFBQUF9JTlRSX01PREVNOiAgICAvKiBtb2RlbSBzdGF0dXMgY2hhbmdlIChEQ0QsIENUUykgMHgwNCAoYml0IDIpKi8KLQkJY2FzZSBQUFBfSU5UUl9ESVNDOiAgCS8qIERhdGEgbGluayBkaXNjb25uZWN0ZWQgMHgxMCAgKGJpdCA0KSovCQotCQljYXNlIFBQUF9JTlRSX09QRU46ICAgCS8qIERhdGEgbGluayBvcGVuIDB4MjAgIChiaXQgNSkqLwotCQljYXNlIFBQUF9JTlRSX0RST1BfRFRSOgkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgIDB4NDAgYml0IDYgKi8KLQkJCWV2ZW50X2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQkKLQkJY2FzZSBQUFBfSU5UUl9USU1FUjoKLQkJCXRpbWVyX2ludHIoY2FyZCk7Ci0JCQlicmVhazsJIAotCi0JCWRlZmF1bHQ6CS8qIHVuZXhwZWN0ZWQgaW50ZXJydXB0ICovCi0JCQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX3NwdXJpb3VzOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwdXJpb3VzIGludGVycnVwdCAweCUwMlghXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLCBmbGFncy0+aWZsYWcpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElEIEJ5dGVzID0gIixjYXJkLT5kZXZuYW1lKTsKLQkgCQlmb3IoaSA9IDA7IGkgPCA4OyBpICsrKQotCQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MjggKyBpKSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwkKLQl9Ci0JCi0JY2FyZC0+aW5faXNyID0gMDsKLQlmbGFncy0+aWZsYWcgPSAwOwotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWNlaXZlIGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCByeF9pbnRyKHNkbGFfdCAqY2FyZCkKLXsKLQlwcHBfYnVmX2N0bF90ICpyeGJ1ZiA9IGNhcmQtPnJ4bWI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbGVuOwotCXZvaWQgKmJ1ZjsKLQlpbnQgaTsKLSAgICAgICAgcHBwX2ZsYWdzX3QgKmZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0gICAgICAgIGNoYXIgKnB0ciA9ICZmbGFncy0+aWZsYWc7Ci0JaW50IHVkcF90eXBlOwotCQotCi0JaWYgKHJ4YnVmLT5mbGFnICE9IDB4MDEpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBjb3JydXB0ZWQgUnggYnVmZmVyIEAgMHglWCwgZmxhZyA9IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkKXJ4YnVmLCByeGJ1Zi0+ZmxhZyk7Ci0JCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJRCBCeXRlcyA9ICIsY2FyZC0+ZGV2bmFtZSk7Ci0JIAkKLQkJZm9yKGkgPSAwOyBpIDwgODsgaSArKykKLQkJCXByaW50ayhLRVJOX0lORk8gIjB4JTAyWCAiLCAqKHB0ciArIDB4MjggKyBpKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlxuIik7CQotCQkKLQkJKytjYXJkLT5zdGF0aXN0aWNzLnJ4X2ludHJfY29ycnVwdF9yeF9iZnI7Ci0KLQotCQkvKiBCdWcgRml4OiBNYXIgNiAyMDAwCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZ2V0IGEgY29ycnVwdGVkIG1haWxib3gsIGl0IG1lYW5zIHRoYXQgZHJpdmVyIAotICAgICAgICAgICAgICAgICAqIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGZpcm13YXJlLiBUaGVyZSBpcyBubyByZWNvdmVyeS4KLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyBmb3IgdGhpcyBjYXJkCi0gICAgICAgICAgICAgICAgICogdGhlIG1hY2hpbmUgd2lsbCBjcmFzaC4gCi0gICAgICAgICAgICAgICAgICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCByb3V0ZXIgZmFpbHVyZSAuLi4hISFcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyAhXG4iKTsKLQkJcHBwX3NldF9pbnRyX21vZGUoY2FyZCwwKTsKLQkJcmV0dXJuOwotCX0KLSAgICAgIAotCWlmIChkZXYgJiYgbmV0aWZfcnVubmluZyhkZXYpICYmIGRldi0+cHJpdil7Ci0JCi0JCWxlbiAgPSByeGJ1Zi0+bGVuZ3RoOwotCQlwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JCS8qIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCi0JCWlmIChza2IgIT0gTlVMTCkgewotCQkKLQkJCS8qIENvcHkgZGF0YSB0byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgYWRkciA9IHJ4YnVmLT5idWYucHRyOwotCi0JCQlpZiAoKGFkZHIgKyBsZW4pID4gY2FyZC0+dS5wLnJ4X3RvcCArIDEpIHsKLQkJCQotCQkJCXVuc2lnbmVkIHRtcCA9IGNhcmQtPnUucC5yeF90b3AgLSBhZGRyICsgMTsKLQkJCQlidWYgPSBza2JfcHV0KHNrYiwgdG1wKTsKLQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBhZGRyLCBidWYsIHRtcCk7Ci0JCQkJYWRkciA9IGNhcmQtPnUucC5yeF9iYXNlOwotCQkJCWxlbiAtPSB0bXA7Ci0JCQl9Ci0JCQlidWYgPSBza2JfcHV0KHNrYiwgbGVuKTsKLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgbGVuKTsKLQotCQkJLyogRGVjYXBzdWxhdGUgcGFja2V0ICovCi0gICAgICAgIAkJc3dpdGNoIChyeGJ1Zi0+cHJvdG8pIHsKLQkKLQkJCQljYXNlIDB4MDA6Ci0JCQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAweDAxOgotCQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBYKTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCQkJaWYgKHVkcF90eXBlID09IFVEUF9QVFBJUEVfVFlQRSl7Ci0KLQkJCQkvKiBIYW5kbGUgYSBVRFAgUmVxdWVzdCBpbiBUaW1lciBJbnRlcnJ1cHQgKi8KLQkJCQlpZihzdG9yZV91ZHBfbWdtdF9wa3QoVURQX1BLVF9GUk1fTkVUV09SSywgY2FyZCwgc2tiLCBkZXYsCi0gICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgCQkJcHBwX3ByaXZfYXJlYSkpewotCSAgICAgICAgICAgICAgIAkJCWZsYWdzLT5pbWFzayB8PSBQUFBfSU5UUl9USU1FUjsKLQkJCQl9Ci0JCQkJKytwcHBfcHJpdl9hcmVhLT5yeF9pbnRyX3N0YXQucnhfaW50cl9QSVBFX3JlcXVlc3Q7Ci0KLQotCQkJfSBlbHNlIGlmIChoYW5kbGVfSVBYV0FOKHNrYi0+ZGF0YSxjYXJkLT5kZXZuYW1lLCAKLQkJCQkJCSBwcHBfcHJpdl9hcmVhLT5lbmFibGVfSVBYLCAKLQkJCQkJCSBwcHBfcHJpdl9hcmVhLT5uZXR3b3JrX251bWJlciwgCi0JCQkJCQkgc2tiLT5wcm90b2NvbCkpIHsKLQkJCQotCQkJCS8qIEhhbmRsZSBhbiBJUFhXQU4gcGFja2V0ICovCi0JCQkJaWYoIHBwcF9wcml2X2FyZWEtPmVuYWJsZV9JUFgpIHsKLQkJCQkJCi0JCQkJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgc2VuZGluZyAqLwotCQkJCQlpZiAoIXRlc3RfYml0KFNFTkRfQ1JJVCwgJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQkJCQkgCXBwcF9zZW5kKGNhcmQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIGh0b25zKEVUSF9QX0lQWCkpOwotCQkJCQl9Ci0JCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogUGFzcyBkYXRhIHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotCSAgICAJCQlza2ItPmRldiA9IGRldjsKLQkJCQlza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwotCi0JCQkgICAgCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHM7Ci0JCQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkgICAgCQkrK3BwcF9wcml2X2FyZWEtPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7CQotCQkJCW5ldGlmX3J4KHNrYik7Ci0JCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCX0KLQotCQl9IGVsc2UgewotCQotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfQotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+cnhfaW50cl9zdGF0LnJ4X2ludHJfbm9fc29ja2V0OwotCQl9Ci0KLQl9IGVsc2UgewotCQkrK2NhcmQtPnN0YXRpc3RpY3MucnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JfQotCi0JLyogUmVsZWFzZSBidWZmZXIgZWxlbWVudCBhbmQgY2FsY3VsYXRlIGEgcG9pbnRlciB0byB0aGUgbmV4dCBvbmUgKi8KLQlyeGJ1Zi0+ZmxhZyA9IDB4MDA7Ci0JY2FyZC0+cnhtYiA9ICsrcnhidWY7Ci0JaWYgKCh2b2lkKilyeGJ1ZiA+IGNhcmQtPnUucC5yeGJ1Zl9sYXN0KQotCQljYXJkLT5yeG1iID0gY2FyZC0+dS5wLnJ4YnVmX2Jhc2U7Ci19Ci0KLQotdm9pZCBldmVudF9pbnRyIChzZGxhX3QgKmNhcmQpCi17Ci0KLSAJc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0gICAgICAgIHBwcF9wcml2YXRlX2FyZWFfdCogcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQl2b2xhdGlsZSBwcHBfZmxhZ3NfdCAqZmxhZ3MgPSBjYXJkLT5mbGFnczsKLQotCXN3aXRjaCAoZmxhZ3MtPmlmbGFnKXsKLQotCQljYXNlIFBQUF9JTlRSX01PREVNOiAgICAvKiBtb2RlbSBzdGF0dXMgY2hhbmdlIChEQ0QsIENUUykgMHgwNCAgKGJpdCAyKSovCi0KLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpewotCQkJCXByaW50ayAoS0VSTl9JTkZPICIlczogTW9kZW0gc3RhdHVzOiBEQ0Q9JXMgQ1RTPSVzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBEQ0QoZmxhZ3MtPm1zdGF0dXMpLCBDVFMoZmxhZ3MtPm1zdGF0dXMpKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfRElTQzogIAkvKiBEYXRhIGxpbmsgZGlzY29ubmVjdGVkIDB4MTAgIChiaXQgNCkqLwkKLQotCQkJTkVYX1BSSU5USyAoS0VSTl9JTkZPICJEYXRhIGxpbmsgZGlzY29ubmVjdGVkIGludHIgQ2F1c2UgJVhcbiIsCi0JCQkJCSAgICAgICBmbGFncy0+ZGlzY19jYXVzZSk7Ci0KLQkJCWlmIChmbGFncy0+ZGlzY19jYXVzZSAmCi0JCQkJKFBQUF9MT0NBTF9URVJNSU5BVElPTiB8IFBQUF9EQ0RfQ1RTX0RST1AgfAotCQkJCVBQUF9SRU1PVEVfVEVSTUlOQVRJT04pKSB7Ci0KLQkJCQlpZiAoY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9QRUVSKSB7IAotCQkJCQlzZXRfYml0KDAsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCQl9Ci0JCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJCQlzaG93X2Rpc2NfY2F1c2UoY2FyZCwgZmxhZ3MtPmRpc2NfY2F1c2UpOwotCQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCQkJZmxhZ3MtPmltYXNrIHw9IFBQUF9JTlRSX1RJTUVSOwotCQkJCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfT1BFTjogICAJLyogRGF0YSBsaW5rIG9wZW4gMHgyMCAgKGJpdCA1KSovCi0KLQkJCU5FWF9QUklOVEsgKEtFUk5fSU5GTyAiJXM6IFBQUCBMaW5rIE9wZW4sIExDUD0lcyBJUD0lc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxMQ1AoZmxhZ3MtPmxjcF9zdGF0ZSksCi0JCQkJCUlQKGZsYWdzLT5pcF9zdGF0ZSkpOwotCi0JCQlpZiAoZmxhZ3MtPmxjcF9zdGF0ZSA9PSAweDA5ICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzLT5pcF9zdGF0ZSA9PSAweDA5IHx8IGZsYWdzLT5pcHhfc3RhdGUgPT0gMHgwOSkpewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHBvbGxpbmcgdGltZXIgYW5kIHNldCB0aGUgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gV0FOX0NPTk5ORUNURUQgKi8KLQotCi0JCQkJLyogQlVHIEZJWDogV2hlbiB0aGUgcHJvdG9jb2wgcmVzdGFydHMsIGR1cmluZyBoZWF2eSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHJhZmZpYywgYm9hcmQgdHggYnVmZmVycyBhbmQgZHJpdmVyIHR4IGJ1ZmZlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2FuIGdvIG91dCBvZiBzeW5jLiAgVGhpcyBjaGVja3MgdGhlIGNvbmRpdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgaWYgdGhlIHR4IGJ1ZmZlcnMgYXJlIG91dCBvZiBzeW5jLCB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3RvY29scyBhcmUgcmVzdGFydGVkLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSSBkb24ndCBrbm93IHdoeSB0aGUgYm9hcmQgdHggYnVmZmVyIGlzIG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiBzeW5jLiBJdCBjb3VsZCBiZSB0aGF0IGEgcGFja2V0cyBpcyB0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aGlsZSB0aGUgbGluayBpcyBkb3duLCBidXQgdGhhdCBpcyBub3QgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvc3NpYmxlLiBUaGUgb3RoZXIgcG9zc2libGlsaXR5IGlzIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpcm13YXJlIGRvZXNuJ3QgcmVpbml0aWFsaXplIHByb3Blcmx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGSVhNRTogQSBiZXR0ZXIgZml4IHNob3VsZCBiZSBmb3VuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotCQkJCWlmIChkZXRlY3RfYW5kX2ZpeF90eF9idWcoY2FyZCkpewotCi0JCQkJCXBwcF9jb21tX2Rpc2FibGUoY2FyZCk7Ci0KLQkJCQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0KLQkJCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gCi0JCQkJCQlUTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQkJCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0JCQkJCWJyZWFrOwkKLQkJCQl9Ci0KLQkJCQljYXJkLT5zdGF0ZV90aWNrID0gamlmZmllczsKLQkJCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQotCQkJCU5FWF9QUklOVEsoS0VSTl9JTkZPICJDT046IEwgVHg6ICVseCAgQiBUeDogJWx4IHx8IEwgUnggJWx4IEIgUnggJWx4XG4iLAotCQkJCQkodW5zaWduZWQgbG9uZyljYXJkLT51LnAudHhidWYsICpjYXJkLT51LnAudHhidWZfbmV4dCwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpY2FyZC0+cnhtYiwgKmNhcmQtPnUucC5yeGJ1Zl9uZXh0KTsKLQotCQkJCS8qIFRlbGwgdGltZXIgaW50ZXJydXB0IHRoYXQgUFBQIGV2ZW50IG9jY3VycmVkICovCi0JCQkJcHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX1BQUF9FVkVOVDsKLQkJCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0KLQkJCQkvKiBJZiB3ZSBhcmUgaW4gUEVFUiBtb2RlLCB3ZSBtdXN0IGZpcnN0IG9idGFpbiB0aGUKLQkJCQkgKiBJUCBpbmZvcm1hdGlvbiBhbmQgdGhlbiBnbyBpbnRvIHRoZSBwb2xsIHJvdXRpbmUgKi8KLQkJCQlpZiAoY2FyZC0+dS5wLmlwX21vZGUgIT0gV0FOT1BUX1BQUF9QRUVSKXsJCi0JCQkJCXRyaWdnZXJfcHBwX3BvbGwoZGV2KTsKLQkJCQl9Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgCWJyZWFrOwotCi0JCWNhc2UgUFBQX0lOVFJfRFJPUF9EVFI6CQkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgIDB4NDAgYml0IDYgKi8KLQotCQkJTkVYX1BSSU5USyhLRVJOX0lORk8gIkRUUiBEcm9wIFRpbWVvdXQgSW50ZXJycnVwdCBcbiIpOyAKLQotCQkJaWYgKGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgeyAKLQkJCQlzZXRfYml0KDAsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCX0KLQkJCi0JCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQotCQkJc2hvd19kaXNjX2NhdXNlKGNhcmQsIGZsYWdzLT5kaXNjX2NhdXNlKTsKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9QUFBfRVZFTlQ7Ci0JCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7Ci0JCQl0cmlnZ2VyX3BwcF9wb2xsKGRldik7Ci0JCQlicmVhazsKLQkJCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRXJyb3IsIEludmFsaWQgUFBQIEV2ZW50XG4iLGNhcmQtPmRldm5hbWUpOwotCX0KLX0KLQotCi0KLS8qIFRJTUVSIElOVEVSUlVQVCAqLwotCi12b2lkIHRpbWVyX2ludHIgKHNkbGFfdCAqY2FyZCkKLXsKLQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLSAgICAgICAgcHBwX3ByaXZhdGVfYXJlYV90KiBwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCi0KLQlpZiAocHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ09ORklHKXsKLQkJaWYgKCFjb25maWdfcHBwKGNhcmQpKXsKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCQl+VE1SX0lOVF9FTkFCTEVEX0NPTkZJRzsJCi0JCX0KLQl9Ci0KLQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCWlmIChwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUpewotCQlwcHBfZ2V0X2Vycl9zdGF0cyhjYXJkKTsKLSAgICAgICAgICAgICAgICBpZighKC0tcHBwX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzKSl7Ci0JCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSAKLQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLQkJfQotCX0KLQotCS8qIFBQSVBFTU9OIFVEUCByZXF1ZXN0ICovCi0KLQlpZiAocHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVURQKXsKLQkJcHJvY2Vzc191ZHBfbWdtdF9wa3QoY2FyZCxkZXYsIHBwcF9wcml2X2FyZWEpOwotCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VEUDsKLQl9Ci0KLQkvKiBQUFAgRXZlbnQgKi8KLQlpZiAocHBwX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UKXsKLQotCQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9ESVNDT05ORUNURUQpewotCQkJcmV0cmlnZ2VyX2NvbW0oY2FyZCk7Ci0JCX0KLQotCQkvKiBJZiB0aGUgc3RhdGUgaXMgQ09OTkVDVElORywgaXQgbWVhbnMgdGhhdCBjb21tdW5pY2F0aW5zIHdlcmUKLQkgCSAqIGVuYWJsZWQuIFdoZW4gdGhlIHJlbW90ZSBzaWRlIGVuYWJsZXMgaXRzIGNvbW1pbmljYXRpb24gd2UKLQkgCSAqIHNob3VsZCBnZXQgYW4gaW50ZXJydXB0IFBQUF9JTlRSX09QRU4sIHRodXMgdHVybiBvZmYgcG9sbGluZyAKLQkJICovCi0KLQkJZWxzZSBpZiAoY2FyZC0+d2FuZGV2LnN0YXRlID09IFdBTl9DT05ORUNUSU5HKXsKLQkJCS8qIFR1cm4gb2ZmIHRoZSB0aW1lciBpbnRlcnJ1cHQgKi8KLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQl9Ci0KLQkJLyogSWYgc3RhdGUgaXMgY29ubmVjdGVkIGFuZCB3ZSBhcmUgaW4gUEVFUiBtb2RlIAotCSAJICogcG9sbCBmb3IgYW4gSVAgYWRkcmVzcyB3aGljaCB3aWxsIGJlIHByb3ZpZGVkIGJ5IHJlbW90ZSBlbmQuCi0JIAkgKi8KLQkJZWxzZSBpZiAoKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEICYmIAotCQkgIAkgIGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgJiYgCi0JCSAgCSAgdGVzdF9iaXQoMCwmUmVhZF9jb25uZWN0aW9uX2luZm8pKXsKLQotCQkJY2FyZC0+c3RhdGVfdGljayA9IGppZmZpZXM7Ci0JCQlpZiAocmVhZF9jb25uZWN0aW9uX2luZm8gKGNhcmQpKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIHJlYWQgUEVFUiBJUCBBZGRyZXNzZXNcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJfWVsc2V7Ci0JCQkJY2xlYXJfYml0KDAsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCQlzZXRfYml0KDEsJlJlYWRfY29ubmVjdGlvbl9pbmZvKTsKLQkJCQl0cmlnZ2VyX3BwcF9wb2xsKGRldik7Ci0JCQl9Ci0JCX1lbHNlewotCQkJLy9GSVhNRSBQdXQgdGhlIGNvbW1lbnQgYmFjayBpbnQKLQkJCXBwcF9wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUFBQX0VWRU5UOwotCQl9Ci0KLQl9LyogRW5kIG9mIFBQUF9FVkVOVCAqLwotCi0KLQkvKiBPbmx5IGRpc2FibGUgdGhlIHRpbWVyIGludGVycnVwdCBpZiB0aGVyZSBhcmUgbm8gdWRwLCBzdGF0aXN0aWMgKi8KLQkvKiB1cGRhdGVzIG9yIGV2ZW50cyBwZW5kaW5nICovCi0gICAgICAgIGlmKCFwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIGZsYWdzLT5pbWFzayAmPSB+UFBQX0lOVFJfVElNRVI7Ci0gICAgICAgIH0KLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBzaG9ydCBwcm90bykKLXsKLQlpbnQgaTsKLQotCWlmKCBwcm90byA9PSBodG9ucyhFVEhfUF9JUFgpICkgewotCQkvL0l0J3MgYW4gSVBYIHBhY2tldAotCQlpZighZW5hYmxlX0lQWCkgewotCQkJLy9SZXR1cm4gMSBzbyB3ZSBkb24ndCBwYXNzIGl0IHVwIHRoZSBzdGFjay4KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLy9JdCdzIG5vdCBJUFggc28gcGFzcyBpdCB1cCB0aGUgc3RhY2suCi0JCXJldHVybiAwOwotCX0KLQotCWlmKCBzZW5kcGFja2V0WzE2XSA9PSAweDkwICYmCi0JICAgIHNlbmRwYWNrZXRbMTddID09IDB4MDQpCi0JewotCQkvL0l0J3MgSVBYV0FOCi0KLQkJaWYoIHNlbmRwYWNrZXRbMl0gPT0gMHgwMiAmJgotCQkgICAgc2VuZHBhY2tldFszNF0gPT0gMHgwMCkKLQkJewotCQkJLy9JdCdzIGEgdGltZXIgcmVxdWVzdCBwYWNrZXQKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gVGltZXIgUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8vR28gdGhyb3VnaCB0aGUgcm91dGluZyBvcHRpb25zIGFuZCBhbnN3ZXIgbm8gdG8gZXZlcnkKLQkJCS8vb3B0aW9uIGV4Y2VwdCBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCWZvcihpID0gNDE7IHNlbmRwYWNrZXRbaV0gPT0gMHgwMDsgaSArPSA1KQotCQkJewotCQkJCS8vMHgwMiBpcyB0aGUgb3B0aW9uIGZvciBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCQlpZiggc2VuZHBhY2tldFtpICsgNF0gIT0gMHgwMikKLQkJCQl7Ci0JCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vU2tpcCBvdmVyIHRoZSBleHRlbmRlZCBOb2RlIElEIG9wdGlvbgotCQkJaWYoIHNlbmRwYWNrZXRbaV0gPT0gMHgwNCApCi0JCQl7Ci0JCQkJaSArPSA4OwotCQkJfQotCi0JCQkvL1dlIGFsc28gd2FudCB0byB0dXJuIG9mZiBhbGwgaGVhZGVyIGNvbXByZXNzaW9uIG9wdC4KLQkJCWZvcig7IHNlbmRwYWNrZXRbaV0gPT0gMHg4MCA7KQotCQkJewotCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQlpICs9IChzZW5kcGFja2V0W2kgKyAyXSA8PCA4KSArIChzZW5kcGFja2V0W2kgKyAzXSkgKyA0OwotCQkJfQotCi0JCQkvL1NldCB0aGUgcGFja2V0IHR5cGUgdG8gdGltZXIgcmVzcG9uc2UKLQkJCXNlbmRwYWNrZXRbMzRdID0gMHgwMTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNlbmRpbmcgSVBYV0FOIFRpbWVyIFJlc3BvbnNlXG4iLGRldm5hbWUpOwotCQl9Ci0JCWVsc2UgaWYoIHNlbmRwYWNrZXRbMzRdID09IDB4MDIgKQotCQl7Ci0JCQkvL1RoaXMgaXMgYW4gaW5mb3JtYXRpb24gcmVxdWVzdCBwYWNrZXQKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gSW5mb3JtYXRpb24gUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8vU2V0IHRoZSBwYWNrZXQgdHlwZSB0byBpbmZvcm1hdGlvbiByZXNwb25zZQotCQkJc2VuZHBhY2tldFszNF0gPSAweDAzOwotCi0JCQkvL1NldCB0aGUgcm91dGVyIG5hbWUKLQkJCXNlbmRwYWNrZXRbNTFdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs1Ml0gPSAnVCc7Ci0JCQlzZW5kcGFja2V0WzUzXSA9ICdQJzsKLQkJCXNlbmRwYWNrZXRbNTRdID0gJ0knOwotCQkJc2VuZHBhY2tldFs1NV0gPSAnUCc7Ci0JCQlzZW5kcGFja2V0WzU2XSA9ICdFJzsKLQkJCXNlbmRwYWNrZXRbNTddID0gJy0nOwotCQkJc2VuZHBhY2tldFs1OF0gPSBDVkhleFRvQXNjaWkobmV0d29ya19udW1iZXIgPj4gMjgpOwotCQkJc2VuZHBhY2tldFs1OV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwRjAwMDAwMCk+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzYwXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwRjAwMDAwKT4+IDIwKTsKLQkJCXNlbmRwYWNrZXRbNjFdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwRjAwMDApPj4gMTYpOwotCQkJc2VuZHBhY2tldFs2Ml0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwRjAwMCk+PiAxMik7Ci0JCQlzZW5kcGFja2V0WzYzXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDAwRjAwKT4+IDgpOwotCQkJc2VuZHBhY2tldFs2NF0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDBGMCk+PiA0KTsKLQkJCXNlbmRwYWNrZXRbNjVdID0gQ1ZIZXhUb0FzY2lpKG5ldHdvcmtfbnVtYmVyICYgMHgwMDAwMDAwRik7Ci0JCQlmb3IoaSA9IDY2OyBpIDwgOTk7IGkrPSAxKQotCQkJewotCQkJCXNlbmRwYWNrZXRbaV0gPSAwOwotCQkJfQotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2VuZGluZyBJUFhXQU4gSW5mb3JtYXRpb24gUmVzcG9uc2UgcGFja2V0XG4iLGRldm5hbWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVua25vd24gSVBYV0FOIHBhY2tldCFcbiIsZGV2bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8vU2V0IHRoZSBXTm9kZUlEIHRvIG91ciBuZXR3b3JrIGFkZHJlc3MKLQkJc2VuZHBhY2tldFszNV0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQlzZW5kcGFja2V0WzM2XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCXNlbmRwYWNrZXRbMzddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlzZW5kcGFja2V0WzM4XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRkYpOwotCi0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8vSWYgd2UgZ2V0IGhlcmUgaXQncyBhbiBJUFgtZGF0YSBwYWNrZXQsIHNvIGl0J2xsIGdldCBwYXNzZWQgdXAgdGhlIHN0YWNrLgotCi0JCS8vc3dpdGNoIHRoZSBuZXR3b3JrIG51bWJlcnMKLQkJc3dpdGNoX25ldF9udW1iZXJzKHNlbmRwYWNrZXQsIG5ldHdvcmtfbnVtYmVyLCAxKTsJCi0JCXJldHVybiAwOwotCX0KLX0KLQotLyoqKioqKiBCYWNrZ3JvdW5kIFBvbGxpbmcgUm91dGluZXMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEFsbCBwb2xsaW5nIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCBieSB0aGUgVElNRVIgaW50ZXJydXB0IGluIHRoZSB3cHBfaXNyIAotICogcm91dGluZS4gIAotICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9uaXRvciBhY3RpdmUgbGluayBwaGFzZS4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19yb3V0ZSAoc2RsYV90ICpjYXJkKQotewotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQkKLQlpZiAoKGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgJiYKLQkgICAgKGZsYWdzLT5pcF9zdGF0ZSA9PSAweDA5KSl7IAotCi0JCS8qIFdlIGdldCBpcF9sb2NhbCBmcm9tIHRoZSBmaXJtd2FyZSBpbiBQRUVSIG1vZGUuCi0JICAgICAgICAgKiBUaGVyZWZvcmUsIGlmIGlwX2xvY2FsIGlzIDAsIHdlIGZhaWxlZCB0byBvYnRhaW4KLSAgICAgICAgIAkgKiB0aGUgcmVtb3RlIElQIGFkZHJlc3MuICovCi0JCWlmIChwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCA9PSAwKSAKLQkJCXJldHVybjsKLQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUENQIFN0YXRlIE9wZW5lZC5cbiIsIGNhcmQtPmRldm5hbWUpOwotCQlpZiAocmVhZF9pbmZvKCBjYXJkICkpIHsKLSAgIAkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBBbiBlcnJvciBvY2N1cnJlZCBpbiBJUCBhc3NpZ25tZW50LlxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLQkJCWlmIChpbl9kZXYgIT0gTlVMTCApIHsKLQkJCQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFzc2lnbmVkIExjbC4gQWRkcjogJXUuJXUuJXUuJXVcbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lLCBOSVBRVUFEKGlmYS0+aWZhX2xvY2FsKSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFzc2lnbmVkIFJtdC4gQWRkcjogJXUuJXUuJXUuJXVcbiIsIAotCQkJCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChpZmEtPmlmYV9hZGRyZXNzKSk7Ci0JCQl9ZWxzZXsKLQkJCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogRXJyb3I6IEZhaWxlZCB0byBhZGQgYSByb3V0ZSBmb3IgUFBQIGludGVyZmFjZSAlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwkKLQkJCX0KLQkJfQotCX0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNb25pdG9yIHBoeXNpY2FsIGxpbmsgZGlzY29ubmVjdGVkIHBoYXNlLgotICogIG8gaWYgaW50ZXJmYWNlIGlzIHVwIGFuZCB0aGUgaG9sZC1kb3duIHRpbWVvdXQgaGFzIGV4cGlyZWQsIHRoZW4gcmV0cnkKLSAqICAgIGNvbm5lY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIHJldHJpZ2dlcl9jb21tKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQotCWlmIChkZXYgJiYgKChqaWZmaWVzIC0gY2FyZC0+c3RhdGVfdGljaykgPiBIT0xEX0RPV05fVElNRSkpIHsKLQotCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVElORyk7Ci0KLQkJaWYocHBwX2NvbW1fZW5hYmxlKGNhcmQpID09IENNRF9PSyl7Ci0JCQlpbml0X3BwcF90eF9yeF9idWZmKCBjYXJkICk7Ci0JCX0JICAgICAgICAgCi0JfQotfQotCi0vKioqKioqIE1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb25maWd1cmUgUzUwOCBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGNvbmZpZzUwOChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzZGxhX3QgKmNhcmQpCi17Ci0JcHBwNTA4X2NvbmZfdCBjZmc7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gZGV2LT5pcF9wdHI7Ci0JcHBwX3ByaXZhdGVfYXJlYV90ICpwcHBfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCi0JLyogUHJlcGFyZSBQUFAgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKHBwcDUwOF9jb25mX3QpKTsKLQotCWlmIChjYXJkLT53YW5kZXYuY2xvY2tpbmcpCi0JCWNmZy5saW5lX3NwZWVkID0gY2FyZC0+d2FuZGV2LmJwczsKLQotCWlmIChjYXJkLT53YW5kZXYuaW50ZXJmYWNlID09IFdBTk9QVF9SUzIzMikKLQkJY2ZnLmNvbmZfZmxhZ3MgfD0gSU5URVJGQUNFX0xFVkVMX1JTMjMyOwotCi0KLSAgICAgICAgY2ZnLmNvbmZfZmxhZ3MgCXw9IERPTlRfVEVSTUlOQVRFX0xOS19NQVhfQ09ORklHOyAvKnNlbmQgQ29uZmlndXJlLVJlcXVlc3QgcGFja2V0cyBmb3JldmVyKi8KLQljZmcudHhidWZfcGVyY2VudAk9IFBFUkNFTlRfVFhfQlVGRjsJLyogJSBvZiBUeCBidWZzICovCi0JY2ZnLm10dV9sb2NhbAkJPSBjYXJkLT53YW5kZXYubXR1OwotCWNmZy5tdHVfcmVtb3RlCQk9IGNhcmQtPndhbmRldi5tdHU7ICAgICAgICAgICAgICAgICAgLyogICAgRGVmYXVsdCAgICovCi0JY2ZnLnJlc3RhcnRfdG1yCQk9IFRJTUVfQkVUV0VFTl9DT05GX1JFUTsgIAkgICAgIC8qICAgIDMwID0gM3NlYyAqLwotCWNmZy5hdXRoX3JzcnRfdG1yCT0gVElNRV9CRVRXRUVOX1BBUF9DSEFQX1JFUTsgICAgICAgICAvKiAgICAzMCA9IDNzZWMgKi8KLQljZmcuYXV0aF93YWl0X3Rtcgk9IFdBSVRfUEFQX0NIQVBfV0lUSE9VVF9SRVBMWTsgICAgICAgLyogICAzMDAgPSAzMHMgICovCi0JY2ZnLm1kbV9mYWlsX3Rtcgk9IFdBSVRfQUZURVJfRENEX0NUU19MT1c7ICAgICAgICAgICAgLyogICAgIDUgPSAwLjVzICovCi0JY2ZnLmR0cl9kcm9wX3Rtcgk9IFRJTUVfRENEX0NUU19MT1dfQUZURVJfTE5LX0RPV047ICAgLyogICAgMTAgPSAxcyAgICovCi0JY2ZnLmNvbm5lY3RfdG1vdXQJPSBXQUlUX0RDRF9ISUdIX0FGVEVSX0VOQUJMRV9DT01NOyAgIC8qICAgOTAwID0gOTBzICAqLwotCWNmZy5jb25mX3JldHJ5CQk9IE1BWF9DT05GX1JFUV9XSVRIT1VUX1JFUExZOyAgICAgICAgLyogICAgMTAgPSAxcyAgICovCi0JY2ZnLnRlcm1fcmV0cnkJCT0gTUFYX1RFUk1fUkVRX1dJVEhPVVRfUkVQTFk7CSAgICAgLyogICAgIDIgdGltZXMgICovCi0JY2ZnLmZhaWxfcmV0cnkJCT0gTlVNX0NPTkZfTkFLX1dJVEhPVVRfUkVQTFk7ICAgICAgICAvKiAgICAgNSB0aW1lcyAgKi8KLQljZmcuYXV0aF9yZXRyeQkJPSBOVU1fQVVUSF9SRVFfV0lUSE9VVF9SRVBMWTsgICAgICAgIC8qICAgICAxMCB0aW1lcyAqLyAgIAotCi0KLQlpZiggIWNhcmQtPnUucC5hdXRoZW50aWNhdG9yICkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRGV2aWNlIGlzIG5vdCBjb25maWd1cmVkIGFzIGFuIGF1dGhlbnRpY2F0b3JcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQljZmcuYXV0aF9vcHRpb25zID0gTk9fQVVUSEVOVElDQVRJT047Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXZpY2UgaXMgY29uZmlndXJlZCBhcyBhbiBhdXRoZW50aWNhdG9yXG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJY2ZnLmF1dGhfb3B0aW9ucyA9IElOQk9VTkRfQVVUSDsKLQl9Ci0KLQlpZiggcHBwX3ByaXZfYXJlYS0+cGFwID09IFdBTk9QVF9ZRVMpewotCQljZmcuYXV0aF9vcHRpb25zIHw9UEFQX0FVVEg7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXAgZW5hYmxlZFxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCWlmKCBwcHBfcHJpdl9hcmVhLT5jaGFwID09IFdBTk9QVF9ZRVMpewotCQljZmcuYXV0aF9vcHRpb25zIHw9IENIQVBfQVVUSDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENoYXAgZW5hYmxlZFxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0JfQotCi0KLQlpZiAocHBwX3ByaXZfYXJlYS0+ZW5hYmxlX0lQWCA9PSBXQU5PUFRfWUVTKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuYWJsaW5nIElQWCBQcm90b2NvbFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJY2ZnLmlweF9vcHRpb25zCQk9IEVOQUJMRV9JUFggfCBST1VUSU5HX1BST1RfREVGQVVMVDsKLQl9ZWxzZXsKLQkJY2ZnLmlweF9vcHRpb25zIAk9IERJU0FCTEVfSVBYOwotCX0KLQotCXN3aXRjaCAoY2FyZC0+dS5wLmlwX21vZGUpIHsKLQkKLQkJY2FzZSBXQU5PUFRfUFBQX1NUQVRJQzoKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBQUCBJUCBNb2RlOiBTVEFUSUNcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQljZmcuaXBfb3B0aW9ucwkJPSBMX0FORF9SX0lQX05PX0FTU0lHIHwgCi0JCQkJCQkJICAgIEVOQUJMRV9JUDsKLQkJCWNmZy5pcF9sb2NhbAkJPSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWw7Ci0JCQljZmcuaXBfcmVtb3RlCQk9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzOwotCQkJLyogRGVidWdnaW5nIGNvZGUgdXNlZCB0byBjaGVjayB0aGF0IElQIGFkZHJlc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgICogb2J0YWluZWQgZnJvbSB0aGUga2VybmVsIGFyZSBjb3JyZWN0ICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIE5FWF9QUklOVEsoS0VSTl9JTkZPICJMb2NhbCAldS4ldS4ldS4ldSBSZW1vdGUgJXUuJXUuJXUuJXUgTmFtZSAlc1xuIiwKLQkJCQkJTklQUVVBRChpcF9sb2NhbCksTklQUVVBRChpcF9yZW1vdGUpLCBkZXYtPm5hbWUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXQU5PUFRfUFBQX0hPU1Q6Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQUFAgSVAgTW9kZTogSE9TVFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCWNmZy5pcF9vcHRpb25zCQk9IExfSVBfTE9DQUxfQVNTSUcgfAotCQkJCQkJICBSX0lQX0xPQ0FMX0FTU0lHIHwgCi0JCQkJCQkgIEVOQUJMRV9JUDsKLQkJCWNmZy5pcF9sb2NhbAkJPSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfbG9jYWw7Ci0JCQljZmcuaXBfcmVtb3RlCQk9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzOwotCQkJLyogRGVidWdnaW5nIGNvZGUgdXNlZCB0byBjaGVjayB0aGF0IElQIGFkZHJlc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgICogb2J0YWluZWQgZnJvbSB0aGUga2VybmVsIGFyZSBjb3JyZWN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBORVhfUFJJTlRLIChLRVJOX0lORk8gIkxvY2FsICV1LiV1LiV1LiV1IFJlbW90ZSAldS4ldS4ldS4ldSBOYW1lICVzXG4iLAotCQkJCQlOSVBRVUFEKGlwX2xvY2FsKSxOSVBRVUFEKGlwX3JlbW90ZSksIGRldi0+bmFtZSk7Ci0JCQkKLQkJCWJyZWFrOwotCQotCQljYXNlIFdBTk9QVF9QUFBfUEVFUjoKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBQUCBJUCBNb2RlOiBQRUVSXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJY2ZnLmlwX29wdGlvbnMJCT0gTF9JUF9SRU1PVEVfQVNTSUcgfCAKLQkJCQkJCSAgUl9JUF9SRU1PVEVfQVNTSUcgfCAKLQkJCQkJCQkgIEVOQUJMRV9JUDsKLQkJCWNmZy5pcF9sb2NhbAkJPSAweDAwOwotCQkJY2ZnLmlwX3JlbW90ZQkJPSAweDAwOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUjogVW5zdXBwb3J0ZWQgUFBQIE1vZGUgU2VsZWN0ZWRcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgICAgICBQUFAgSVAgTW9kZXM6IFNUQVRJQywgUEVFUiBvciBIT1NUXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsJCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gcHBwX2NvbmZpZ3VyZShjYXJkLCAmY2ZnKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTaG93IGRpc2Nvbm5lY3Rpb24gY2F1c2UuCi0gKi8KLXN0YXRpYyB2b2lkIHNob3dfZGlzY19jYXVzZShzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGNhdXNlKQotewotCWlmIChjYXVzZSAmIDB4MDgwMikgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdGVybWluYXRlZCBieSBwZWVyXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAwMDQpIAotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHRlcm1pbmF0ZWQgYnkgdXNlclxuIiwgCi0JCQljYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMDA4KSAKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogYXV0aGVudGljYXRpb24gZmFpbGVkXG4iLCBjYXJkLT5kZXZuYW1lKTsKLQkKLQllbHNlIGlmIChjYXVzZSAmIDB4MDAxMCkgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogYXV0aGVudGljYXRpb24gcHJvdG9jb2wgbmVnb3RpYXRpb24gZmFpbGVkXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAwMjApIAotCQkKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IHBlZXIncyByZXF1ZXN0IGZvciBhdXRoZW50aWNhdGlvbiByZWplY3RlZFxuIiwKLQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDA0MCkgCi0JCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNUlUgb3B0aW9uIHJlamVjdGVkIGJ5IHBlZXJcbiIsIAotCQljYXJkLT5kZXZuYW1lKTsKLQotCWVsc2UgaWYgKGNhdXNlICYgMHgwMDgwKSAKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBlZXIncyBNUlUgd2FzIHRvbyBzbWFsbFxuIiwgCi0JCWNhcmQtPmRldm5hbWUpOwotCi0JZWxzZSBpZiAoY2F1c2UgJiAweDAxMDApIAotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgdG8gbmVnb3RpYXRlIHBlZXIncyBMQ1Agb3B0aW9uc1xuIiwKLQkJY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDIwMCkgCi0JCQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIG5lZ290aWF0ZSBwZWVyJ3MgSVBDUCBvcHRpb25zXG4iCi0JCSwgY2FyZC0+ZGV2bmFtZSk7Ci0KLQllbHNlIGlmIChjYXVzZSAmIDB4MDQwMCkgCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogZmFpbGVkIHRvIG5lZ290aWF0ZSBwZWVyJ3MgSVBYQ1Agb3B0aW9uc1xuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcm9jZXNzIFVEUCBjYWxsIG9mIHR5cGUgUFRQSVBFQUIuCi0gKi8KLXN0YXRpYyB2b2lkIHByb2Nlc3NfdWRwX21nbXRfcGt0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCi0JCQkJIHBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSApIAotewotCXVuc2lnbmVkIGNoYXIgYnVmMls1XTsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0JdW5zaWduZWQgaW50IGZyYW1lcywgbGVuOwotCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuZ3RoLCBidWZmZXJfbGVuZ3RoLCByZWFsX2xlbjsKLQl1bnNpZ25lZCBsb25nIGRhdGFfcHRyOwotCWludCB1ZHBfbWdtdF9yZXFfdmFsaWQgPSAxOwotCXBwcF9tYm94X3QgKm1ib3ggPSBjYXJkLT5tYm94OwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCBlcnI7Ci0JcHBwX3VkcF9wa3RfdCAqcHBwX3VkcF9wa3QgPSAocHBwX3VkcF9wa3RfdCopJnBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YTsKLQotCW1lbWNweSgmYnVmMiwgJmNhcmQtPndhbmRldi51ZHBfcG9ydCwgMiApOwotCi0KLQlpZihwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0KLQkJc3dpdGNoKHBwcF91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotCi0JCQljYXNlIFBQSVBFX0dFVF9JQkFfREFUQToKLQkJCWNhc2UgUFBQX1JFQURfQ09ORklHOgotCQkJY2FzZSBQUFBfR0VUX0NPTk5FQ1RJT05fSU5GTzoKLQkJCWNhc2UgUFBJUEVfUk9VVEVSX1VQX1RJTUU6Ci0JCQljYXNlIFBQUF9SRUFEX1NUQVRJU1RJQ1M6Ci0JCQljYXNlIFBQUF9SRUFEX0VSUk9SX1NUQVRTOgotCQkJY2FzZSBQUFBfUkVBRF9QQUNLRVRfU1RBVFM6Ci0JCQljYXNlIFBQUF9SRUFEX0xDUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfSVBDUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfSVBYQ1BfU1RBVFM6Ci0JCQljYXNlIFBQUF9SRUFEX1BBUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfQ0hBUF9TVEFUUzoKLQkJCWNhc2UgUFBQX1JFQURfQ09ERV9WRVJTSU9OOgotCQkJCXVkcF9tZ210X3JlcV92YWxpZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQkgICAKLQkJCWRlZmF1bHQ6Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJfSAKLQl9Ci0JCi0gIAlpZighdWRwX21nbXRfcmVxX3ZhbGlkKSB7Ci0JICAgIAotCQkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLSAgICAJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gMHgwMDsKLQotICAgIAkJLyogc2V0IHJldHVybiBjb2RlICovCi0gICAgCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDB4Q0Q7IAotCQkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VycjsKLQkKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7CQotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogV2FybmluZywgSWxsZWdhbCBVRFAgY29tbWFuZCBhdHRlbXB0ZWQgZnJvbSBuZXR3b3JrOiAleFxuIiwKLQkJCWNhcmQtPmRldm5hbWUscHBwX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKTsKLQkJfQotICAgCX0gZWxzZSB7Ci0JCS8qIEluaXRpYWxpemUgdGhlIHRyYWNlIGVsZW1lbnQgKi8KLQkJdHJhY2VfZWxlbWVudF90IHRyYWNlX2VsZW1lbnQ7CQkgICAgCi0KLQkJc3dpdGNoIChwcHBfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpewotCi0JCS8qIFBQSVBFX0VOQUJMRV9UUkFDSU5HICovCi0gICAgCQljYXNlIFBQSVBFX0VOQUJMRV9UUkFDSU5HOgotCQkJaWYgKCFjYXJkLT5UcmFjaW5nRW5hYmxlZCkgewotICAgIAkJCQotCQkJCS8qIE9QRVJBVEVfREFUQUxJTkVfTU9OSVRPUiAqLwotICAgIAkJCQltYm94LT5jbWQuY29tbWFuZCA9IFBQUF9EQVRBTElORV9NT05JVE9SOwotICAgIAkJCQltYm94LT5jbWQubGVuZ3RoID0gMHgwMTsKLSAgICAJCQkJbWJveC0+ZGF0YVswXSA9IHBwcF91ZHBfcGt0LT5kYXRhWzBdOwotCSAgICAJCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyAKLQkJCQkJbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCSAgIAotCQkJCWlmIChlcnIgIT0gQ01EX09LKSB7IAotCSAgICAgICAgCQkJCi0JCQkJCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1ib3gpOwotCSAgICAgICAgCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCSAgICAgICAgCQkKLQkJCQkJLyogc2V0IHRoZSByZXR1cm4gY29kZSAqLwotCi0JCSAgICAgICAgCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IG1ib3gtPmNtZC5yZXN1bHQ7Ci0JICAgICAgICAJCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkgICAgICAgIAkJCWJyZWFrOwotCSAgICAJCQl9IAotCi0JCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgMHhDMDAwLCAmYnVmMiwgMik7Ci0JCSAgICAKLQkJCQlwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIgPSAwOwotCQkgICAgCQltZW1jcHkoJnBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgJmJ1ZjIsIDIpOwotCQkgICAgCQlwcHBfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyID0gCi0JCQkJCQlwcHBfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHI7Ci0JCQkJcHBwX3ByaXZfYXJlYS0+ZW5kX3RyYWNlX2FkZHIgPSAKLQkJCQkJcHBwX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciArIEVORF9PRkZTRVQ7Ci0JCSAgICAJCi0JCQkJLyogTUFYX1NFTkRfQlVGRkVSX1NJWkUgLSAyOCAoSVAgaGVhZGVyKSAKLQkJCQkgICAtIDMyIChwcGlwZW1vbiBDQkxPQ0spICovCi0JCSAgICAJCWF2YWlsYWJsZV9idWZmZXJfc3BhY2UgPSBNQVhfTEdUSF9VRFBfTUdOVF9QS1QgLSAKLQkJCQkJCQkgc2l6ZW9mKGlwX3BrdF90KS0KLQkJCQkJCQkgc2l6ZW9mKHVkcF9wa3RfdCktCi0JCQkJCQkJIHNpemVvZih3cF9tZ210X3QpLQotCQkJCQkJCSBzaXplb2YoY2Jsb2NrX3QpOwotCSAgICAgICAJICAJfQotCSAgICAgICAJICAJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCSAgICAgICAJICAJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JICAgICAgIAkgIAljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDE7Ci0JICAgICAgIAkgIAlicmVhazsKLQkgICAKLQkJLyogUFBJUEVfRElTQUJMRV9UUkFDSU5HICovCi0JCWNhc2UgUFBJUEVfRElTQUJMRV9UUkFDSU5HOgotCSAgICAgIAkJCi0JCQlpZihjYXJkLT5UcmFjaW5nRW5hYmxlZCkgewotCQkgICAJCi0JCQkJLyogT1BFUkFURV9EQVRBTElORV9NT05JVE9SICovCi0JCSAgICAJCW1ib3gtPmNtZC5jb21tYW5kID0gMHgzMzsKLQkJICAgIAkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCSAgICAJCW1ib3gtPmRhdGFbMF0gPSAweDAwOwotCQkgICAgCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyAKLQkJCQkJbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCSAgICAgICAJICAKLQkJCX0gCi0JCQotCQkJLypzZXQgcmV0dXJuIGNvZGUqLwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQljYXJkLT5UcmFjaW5nRW5hYmxlZCA9IDA7Ci0JCQlicmVhazsKLQkgICAKLQkJLyogUFBJUEVfR0VUX1RSQUNFX0lORk8gKi8KLQkJY2FzZSBQUElQRV9HRVRfVFJBQ0VfSU5GTzoKLQotCQkJaWYoIWNhcmQtPlRyYWNpbmdFbmFibGVkKSB7Ci0JCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JICAgIAkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMTsKLQkgICAgCQkJbWJveC0+Y21kLmxlbmd0aCA9IDA7Ci0JCQl9CQkgICAgCi0KLQkJCWJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJCi0JCQkvKiBmcmFtZXMgPCA2Miwgd2hlcmUgNjIgaXMgdGhlIG51bWJlciBvZiB0cmFjZQotCQkJICAgaW5mb3JtYXRpb24gZWxlbWVudHMuICBUaGVyZSBpcyBpbiB0b3RhbCA0OTYKLQkJCSAgIGJ5dGVzIG9mIHNwYWNlIGFuZCBlYWNoIHRyYWNlIGluZm9ybWF0aW9uCi0JCQkgICBlbGVtZW50IGlzIDggYnl0ZXMuIAotCQkJICovCi0JCQlmb3IgKCBmcmFtZXM9MDsgZnJhbWVzPDYyOyBmcmFtZXMrKykgewotCQotCQkJCXRyYWNlX3BrdF90ICp0cmFjZV9wa3QgPSAodHJhY2VfcGt0X3QgKikKLQkJCQkJJnBwcF91ZHBfcGt0LT5kYXRhW2J1ZmZlcl9sZW5ndGhdOwotCQotCQkJCS8qIFJlYWQgdGhlIHdob2xlIHRyYWNlIHBhY2tldCAqLwotCQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIHBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwgCi0JCQkJCSAgJnRyYWNlX2VsZW1lbnQsIHNpemVvZih0cmFjZV9lbGVtZW50X3QpKTsKLQkKLQkJCQkvKiBubyBkYXRhIG9uIGJvYXJkIHNvIGV4aXQgKi8KLQkJCQlpZiggdHJhY2VfZWxlbWVudC5vcHBfZmxhZyA9PSAweDAwICkgCi0JCQkJCWJyZWFrOwotCSAgICAgIAotCQkJCWRhdGFfcHRyID0gdHJhY2VfZWxlbWVudC50cmFjZV9kYXRhX3B0cjsKLQotCQkJCS8qIFNlZSBpZiB0aGVyZSBpcyBhY3R1YWwgZGF0YSBvbiB0aGUgdHJhY2UgYnVmZmVyICovCi0JCQkJaWYgKGRhdGFfcHRyKXsKLQkJCQkJZGF0YV9sZW5ndGggPSB0cmFjZV9lbGVtZW50LnRyYWNlX2xlbmd0aDsKLQkJCQl9ZWxzZXsKLQkJCQkJZGF0YV9sZW5ndGggPSAwOwotCQkJCQlwcHBfdWRwX3BrdC0+ZGF0YVswXSB8PSAweDAyOwotCQkJCX0KLQotCQkJCS8vRklYTUU6IERvIHdlIG5lZWQgdGhpcyBjaGVjawotCQkJCWlmICgoYXZhaWxhYmxlX2J1ZmZlcl9zcGFjZSAtIGJ1ZmZlcl9sZW5ndGgpIAotCQkJCSAgICAgPCAoc2l6ZW9mKHRyYWNlX2VsZW1lbnRfdCkrMSkpewotCQkJCQkKLQkJCQkJLyppbmRpY2F0ZSB3ZSBoYXZlIG1vcmUgZnJhbWVzIAotCQkJCQkgKiBvbiBib2FyZCBhbmQgZXhpdCAKLQkJCQkJICovCi0JCQkJCXBwcF91ZHBfcGt0LT5kYXRhWzBdIHw9IDB4MDI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkKLQkJCQl0cmFjZV9wa3QtPnN0YXR1cyA9IHRyYWNlX2VsZW1lbnQudHJhY2VfdHlwZTsKLQkJCQl0cmFjZV9wa3QtPnRpbWVfc3RhbXAgPSB0cmFjZV9lbGVtZW50LnRyYWNlX3RpbWVfc3RhbXA7Ci0JCQkJdHJhY2VfcGt0LT5yZWFsX2xlbmd0aCA9IHRyYWNlX2VsZW1lbnQudHJhY2VfbGVuZ3RoOwotCi0JCQkJcmVhbF9sZW4gPSB0cmFjZV9lbGVtZW50LnRyYWNlX2xlbmd0aDsJCi0JCQkJCi0JCQkJaWYoZGF0YV9wdHIgPT0gMCl7Ci0JCQkJCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDA7Ci0JCQkJfWVsc2V7Ci0JCQkJCS8qIHdlIGNhbiB0YWtlIGl0IG5leHQgdGltZSAqLwotCQkJCQlpZiAoKGF2YWlsYWJsZV9idWZmZXJfc3BhY2UgLSBidWZmZXJfbGVuZ3RoKTwKLQkJCQkJCShyZWFsX2xlbiArIHNpemVvZih0cmFjZV9wa3RfdCkpKXsKLQkJCQkJCi0JCQkJCQlwcHBfdWRwX3BrdC0+ZGF0YVswXSB8PSAweDAyOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0gCi0JCQkJCXRyYWNlX3BrdC0+ZGF0YV9hdmFpbCA9IDB4MDE7Ci0JCQkJCi0JCQkJCS8qIGdldCB0aGUgZGF0YSAqLwotCQkJCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBkYXRhX3B0ciwgCi0JCQkJCQkgICZ0cmFjZV9wa3QtPmRhdGEsCi0JCQkJCQkgIHJlYWxfbGVuKTsKLQkJCQl9CQotCQkJCS8qIHplcm8gdGhlIG9wcCBmbGFnIHRvIAotCQkJCSAgIHNob3cgd2UgZ290IHRoZSBmcmFtZSAqLwotCQkJCWJ1ZjJbMF0gPSAweDAwOwotCQkJCXNkbGFfcG9rZSgmY2FyZC0+aHcsIHBwcF9wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwKLQkJCQkJICAmYnVmMiwgMSk7Ci0KLQkJCQkvKiBub3cgbW92ZSBvbnRvIHRoZSBuZXh0IAotCQkJCSAgIGZyYW1lICovCi0JCQkJcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyICs9IDg7Ci0KLQkJCQkvKiBjaGVjayBpZiB3ZSBwYXNzZWQgdGhlIGxhc3QgYWRkcmVzcyAqLwotCQkJCWlmICggcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID49IAotCQkJCQlwcHBfcHJpdl9hcmVhLT5lbmRfdHJhY2VfYWRkcil7Ci0KLQkJCQkJcHBwX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID0gCi0JCQkJCQlwcHBfcHJpdl9hcmVhLT5zdGFydF90cmFjZV9hZGRyOwotCQkJCX0KLSAKLQkJCQkvKiB1cGRhdGUgYnVmZmVyIGxlbmd0aCBhbmQgbWFrZSBzdXJlIGl0cyBldmVuICovIAotCi0JCQkJaWYgKCB0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPT0gMHgwMSApIHsKLQkJCQkJYnVmZmVyX2xlbmd0aCArPSByZWFsX2xlbiAtIDE7Ci0JCQkJfQotIAotCQkJCS8qIGZvciB0aGUgaGVhZGVyICovCi0JCQkJYnVmZmVyX2xlbmd0aCArPSA4OwotCi0JCQkJaWYoIGJ1ZmZlcl9sZW5ndGggJiAweDAwMDEgKQotCQkJCQlidWZmZXJfbGVuZ3RoICs9IDE7Ci0JCQl9Ci0KLQkJCS8qIG9rIG5vdyBzZXQgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgcGFzc2VkCi0JCQkgICBpbiB0aGUgaGlnaCA1IGJpdHMgKi8KLQkJCXBwcF91ZHBfcGt0LT5kYXRhWzBdIHw9IChmcmFtZXMgPDwgMik7Ci0JIAotCQkJLyogc2V0IHRoZSBkYXRhIGxlbmd0aCAqLwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0JIAotCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JICAgICAgCSAgCWJyZWFrOwotCi0gICAJCS8qIFBQSVBFX0dFVF9JQkFfREFUQSAqLwotCQljYXNlIFBQSVBFX0dFVF9JQkFfREFUQToKLQkgICAgICAgIAotCQkJbWJveC0+Y21kLmxlbmd0aCA9IDB4MDk7Ci0JCQotCQkJc2RsYV9wZWVrKCZjYXJkLT5odywgMHhGMDAzLCAmcHBwX3VkcF9wa3QtPmRhdGEsIAotCQkJCQltYm94LT5jbWQubGVuZ3RoKTsKLQkgICAgICAgIAotCQkJLyogc2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gMHgwOTsKLQotCQkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDB4MDA7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0JCQlicmVhazsKLQotCQkvKiBQUElQRV9GVDFfUkVBRF9TVEFUVVMgKi8KLQkJY2FzZSBQUElQRV9GVDFfUkVBRF9TVEFUVVM6Ci0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCAweEYwMjAsICZwcHBfdWRwX3BrdC0+ZGF0YVswXSwgMik7Ci0JCQlwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IG1ib3gtPmNtZC5sZW5ndGggPSAyOwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0JCQotCQljYXNlIFBQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUzogICAKLQkJCWluaXRfcHBwX3ByaXZfc3RydWN0KCBwcHBfcHJpdl9hcmVhICk7Ci0JCQlpbml0X2dsb2JhbF9zdGF0aXN0aWNzKCBjYXJkICk7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCi0JCQotCQljYXNlIFBQSVBFX1JPVVRFUl9VUF9USU1FOgotCi0JCQlkb19nZXR0aW1lb2ZkYXkoICZ0diApOwotCQkJcHBwX3ByaXZfYXJlYS0+cm91dGVyX3VwX3RpbWUgPSB0di50dl9zZWMgLSAKLQkJCQkJcHBwX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWU7Ci0JCQkqKHVuc2lnbmVkIGxvbmcgKikmcHBwX3VkcF9wa3QtPmRhdGEgPSBwcHBfcHJpdl9hcmVhLT5yb3V0ZXJfdXBfdGltZTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSA0OwotCQkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCQkJYnJlYWs7Ci0KLQkJCQkvKiBQUElQRV9EUklWRVJfU1RBVElTVElDUyAqLyAgIAotCQljYXNlIFBQSVBFX0RSSVZFUl9TVEFUX0lGU0VORDoKLQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGEsICZwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQsIAotCQkJCXNpemVvZihpZl9zZW5kX3N0YXRfdCkpOwotCi0KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGlmX3NlbmRfc3RhdF90KTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBzaXplb2YoaWZfc2VuZF9zdGF0X3QpOwkKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBJUEVfRFJJVkVSX1NUQVRfSU5UUjoKLQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGEsICZjYXJkLT5zdGF0aXN0aWNzLCAKLQkJCQlzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLQotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+ZGF0YStzaXplb2YoZ2xvYmFsX3N0YXRzX3QpLAotCQkJCSZwcHBfcHJpdl9hcmVhLT5yeF9pbnRyX3N0YXQsCi0JCQkJc2l6ZW9mKHJ4X2ludHJfc3RhdF90KSk7Ci0KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLQkJCQkJCSAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFBJUEVfRFJJVkVSX1NUQVRfR0VOOgotCQkJbWVtY3B5KCAmcHBwX3VkcF9wa3QtPmRhdGEsCi0JCQkJJnBwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LAotCQkJCXNpemVvZihwaXBlX21nbXRfc3RhdF90KSk7Ci0KLQkJCW1lbWNweSgmcHBwX3VkcF9wa3QtPmRhdGErc2l6ZW9mKHBpcGVfbWdtdF9zdGF0X3QpLCAKLQkJCSAgICAgICAmY2FyZC0+c3RhdGlzdGljcywgc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci0KLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCXBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSsKLQkJCQkJCSAgICAgc2l6ZW9mKHJ4X2ludHJfc3RhdF90KTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSBwcHBfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aDsKLQkJCWJyZWFrOwotCi0KLQkJLyogRlQxIE1PTklUT1IgU1RBVFVTICovCi0gICAJCWNhc2UgRlQxX01PTklUT1JfU1RBVFVTX0NUUkw6Ci0JCi0JCQkvKiBFbmFibGUgRlQxIE1PTklUT1IgU1RBVFVTICovCi0JICAgICAgICAJaWYoIHBwcF91ZHBfcGt0LT5kYXRhWzBdID09IDEpIHsKLQkJCQotCQkJCWlmKCByQ291bnQrKyAhPSAwICkgewotCQkgICAgICAgIAkJcHBwX3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAwOwotCSAgICAgICAgICAJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJICAJCQlicmVhazsKLQkJICAgIAkJfQkKLQkgICAgICAJCX0KLQotCSAgICAgIAkJLyogRGlzYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAJCWlmKCBwcHBfdWRwX3BrdC0+ZGF0YVswXSA9PSAwKSB7Ci0KLQkgICAgICAJICAgCQlpZiggLS1yQ291bnQgIT0gMCkgewotCQkgIAkJCXBwcF91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJICAJCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJICAJCQlicmVhazsKLQkgICAJICAgIAkJfSAKLQkgICAgICAJCX0gCQotCQkJZ290byB1ZHBfZGZsdF9jbWQ7Ci0JCQkKLQkJLyogV0FSTklORzogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGZpeGVkLgotCQkgKiBUaGUgRlQxIFN0YXR1cyBDdHJsIGRvZXNuJ3QgaGF2ZSBhIGJyZWFrCi0gICAgICAgICAgICAgICAgICogc3RhdG1lbnQuICBUaHVzLCBubyBjb2RlIG11c3QgYmUgaW5zZXJ0ZWQKLSAgICAgICAgICAgICAgICAgKiBIRVJFOiBiZXR3ZWVuIGRlZmF1bHQgYW5kIGFib3ZlIGNhc2Ugc3RhdGVtZW50ICovCi0KLQkJZGVmYXVsdDoKLXVkcF9kZmx0X2NtZDoKLQkgICAgICAgIAotCQkJLyogaXQncyBhIGJvYXJkIGNvbW1hbmQgKi8KLQkJCW1ib3gtPmNtZC5jb21tYW5kID0gcHBwX3VkcF9wa3QtPmNibG9jay5jb21tYW5kOwotCQkJbWJveC0+Y21kLmxlbmd0aCA9IHBwcF91ZHBfcGt0LT5jYmxvY2subGVuZ3RoOwotIAotCQkJaWYobWJveC0+Y21kLmxlbmd0aCkgewotCQkJCW1lbWNweSgmbWJveC0+ZGF0YSwodW5zaWduZWQgY2hhciAqKXBwcF91ZHBfcGt0LT5kYXRhLAotCQkJCSAgICAgICBtYm94LT5jbWQubGVuZ3RoKTsKLQkgICAgICAJCX0gCi0JICAgICAgICAgIAotCQkJLyogcnVuIHRoZSBjb21tYW5kIG9uIHRoZSBib2FyZCAqLwotCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkKLQkJCWlmIChlcnIgIT0gQ01EX09LKSB7Ci0JCQotCQkgICAgCQlwcHBfZXJyb3IoY2FyZCwgZXJyLCBtYm94KTsKLQkJICAgIAkJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC4KLQkJCQkJIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OwotCQkJCWJyZWFrOwotCQkJfQotCSAgICAgICAgICAKLQkJICAJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X2FkcHRyX2NtbmRfT0s7Ci0JCQotCQkJLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCQkJbWVtY3B5KCZwcHBfdWRwX3BrdC0+Y2Jsb2NrLG1ib3gsIHNpemVvZihjYmxvY2tfdCkpOwotCSAgICAgICAgICAKLQkJCWlmKG1ib3gtPmNtZC5sZW5ndGgpIHsKLQkJCQltZW1jcHkoJnBwcF91ZHBfcGt0LT5kYXRhLCZtYm94LT5kYXRhLG1ib3gtPmNtZC5sZW5ndGgpOwotCQkJfSAKLQotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggKi8KLSAgICAgCX0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAJLyogRmlsbCBVRFAgVFRMICovCi0gICAgIAlwcHBfdWRwX3BrdC0+aXBfcGt0LnR0bCA9IGNhcmQtPndhbmRldi50dGw7IAotICAgICAJbGVuID0gcmVwbHlfdWRwKHBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0KLSAgICAgCWlmIChwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0KLQkJLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBzZW5kaW5nICovCi0JCWlmICghdGVzdF9iaXQoU0VORF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCSsrcHBwX3ByaXZfYXJlYS0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9wYXNzZWRfdG9fYWRwdHI7Ci0JCQlwcHBfc2VuZChjYXJkLHBwcF9wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSxsZW4scHBwX3ByaXZfYXJlYS0+cHJvdG9jb2wpOwotCQl9Ci0KLQl9IGVsc2UgewkKLQkKLQkJLyogUGFzcyBpdCB1cCB0aGUgc3RhY2sKLSAgICAJCSAgIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJaWYgKChuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pKSAhPSBOVUxMKSB7Ci0JICAgIAkKLQkJCS8qIGNvcHkgZGF0YSBpbnRvIG5ld19za2IgKi8KLQotICAJICAgIAkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotICAJICAgIAkJbWVtY3B5KGJ1ZixwcHBfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbik7Ci0KLQkgICAgCQkrK3BwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX3N0YWNrOwotCQkJCi0gICAgICAgICAgICAJCS8qIERlY2Fwc3VsYXRlIHBhY2tldCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgCi0JCQkgICBzdGFjayAqLwotCSAgICAJCW5ld19za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotICAgICAgICAgICAgCQluZXdfc2tiLT5kZXYgPSBkZXY7Ci0JICAgIAkJbmV3X3NrYi0+bWFjLnJhdyAgPSBuZXdfc2tiLT5kYXRhOwotCQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkKLQkJfSBlbHNlIHsKLQkgICAgCQotCQkJKytwcHBfcHJpdl9hcmVhLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X25vX3NvY2tldDsKLQkJCXByaW50ayhLRVJOX0lORk8gIm5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIpOwotICAJCX0KLSAgICAJfQkKLQotCXBwcF9wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IDA7Ci0JCi0JcmV0dXJuOyAKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbCB0aGUgcHBwX3ByaXZhdGVfYXJlYSBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfcHBwX3ByaXZfc3RydWN0KCBwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgKQotewotCi0JbWVtc2V0KCZwcHBfcHJpdl9hcmVhLT5pZl9zZW5kX3N0YXQsIDAsIHNpemVvZihpZl9zZW5kX3N0YXRfdCkpOwotCW1lbXNldCgmcHBwX3ByaXZfYXJlYS0+cnhfaW50cl9zdGF0LCAwLCBzaXplb2YocnhfaW50cl9zdGF0X3QpKTsKLQltZW1zZXQoJnBwcF9wcml2X2FyZWEtPnBpcGVfbWdtdF9zdGF0LCAwLCBzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwkKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIEdsb2JhbCBTdGF0aXN0aWNzCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoIHNkbGFfdCAqY2FyZCApCi17Ci0JbWVtc2V0KCZjYXJkLT5zdGF0aXN0aWNzLCAwLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFJlY2VpdmUgYW5kIFRyYW5zbWl0IEJ1ZmZlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfcHBwX3R4X3J4X2J1ZmYoIHNkbGFfdCAqY2FyZCApCi17Ci0JcHBwNTA4X2J1Zl9pbmZvX3QqIGluZm87Ci0KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJCi0JCWluZm8gPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBQUFA1MTRfQlVGX09GRlMpOwotCi0gICAgICAgCQljYXJkLT51LnAudHhidWZfYmFzZSA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCQlpbmZvLT50eGJfcHRyKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUucC50eGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC50eGJ1Zl9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbmZvLT50eGJfbnVtIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICBjYXJkLT51LnAucnhidWZfYmFzZSA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5yeGJfcHRyKTsKLQotICAgICAgICAgICAgICAgIGNhcmQtPnUucC5yeGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC5yeGJ1Zl9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbmZvLT5yeGJfbnVtIC0gMSk7Ci0KLQl9IGVsc2UgewotCQkKLQkJaW5mbyA9ICh2b2lkKikoY2FyZC0+aHcuZHBtYmFzZSArIFBQUDUwOF9CVUZfT0ZGUyk7Ci0KLQkJY2FyZC0+dS5wLnR4YnVmX2Jhc2UgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKGluZm8tPnR4Yl9wdHIgLSBQUFA1MDhfTUJfVkVDVCkpOwotCi0JCWNhcmQtPnUucC50eGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC50eGJ1Zl9iYXNlICsKLQkJCShpbmZvLT50eGJfbnVtIC0gMSk7Ci0KLQkJY2FyZC0+dS5wLnJ4YnVmX2Jhc2UgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKwotCQkJKGluZm8tPnJ4Yl9wdHIgLSBQUFA1MDhfTUJfVkVDVCkpOwotCi0JCWNhcmQtPnUucC5yeGJ1Zl9sYXN0ID0gKHBwcF9idWZfY3RsX3QqKWNhcmQtPnUucC5yeGJ1Zl9iYXNlICsKLQkJCShpbmZvLT5yeGJfbnVtIC0gMSk7Ci0JfQotCi0JY2FyZC0+dS5wLnR4YnVmX25leHQgPSAodW5zaWduZWQgbG9uZyopJmluZm8tPnR4Yl9ueHQ7IAotCWNhcmQtPnUucC5yeGJ1Zl9uZXh0ID0gKHVuc2lnbmVkIGxvbmcqKSZpbmZvLT5yeGIxX3B0cjsKLQotCWNhcmQtPnUucC5yeF9iYXNlID0gaW5mby0+cnhiX2Jhc2U7Ci0gICAgICAgIGNhcmQtPnUucC5yeF90b3AgID0gaW5mby0+cnhiX2VuZDsKLSAgICAgIAotCWNhcmQtPnUucC50eGJ1ZiA9IGNhcmQtPnUucC50eGJ1Zl9iYXNlOwotCWNhcmQtPnJ4bWIgPSBjYXJkLT51LnAucnhidWZfYmFzZTsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIENvbm5lY3Rpb24gSW5mb3JtYXRpb24gKGllIGZvciBSZW1vdGUgSVAgYWRkcmVzcyBhc3NnaW5tZW50KS4KLSAqIENhbGxlZCB3aGVuIHBwcCBpbnRlcmZhY2UgY29ubmVjdGVkLgotICovCi1zdGF0aWMgaW50IHJlYWRfaW5mbyggc2RsYV90ICpjYXJkICkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JaW50IGVycjsKLQotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqaWZfZGF0YTEsICppZl9kYXRhMjsKLQltbV9zZWdtZW50X3QgZnM7Ci0KLQkvKiBTZXQgTG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKi8KLQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0Jc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQotCWZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsgICAgIC8qIGdldCB1c2VyIHNwYWNlIGJsb2NrICovIAotCi0JLyogQ2hhbmdlIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGlwIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS4KLQkgKiBUaGlzIHdpbGwgYWxzbyBhZGQgaW4gdGhlIGRlc3RpbmF0aW9uIHJvdXRlLgotCSAqLwkKLQlpZl9kYXRhMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZfaW5mby5pZnJfYWRkcjsKLQlpZl9kYXRhMS0+c2luX2FkZHIuc19hZGRyID0gcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWw7Ci0JaWZfZGF0YTEtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZBRERSLCAmaWZfaW5mbyApOwotCWlmX2RhdGEyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9kc3RhZGRyOwotCWlmX2RhdGEyLT5zaW5fYWRkci5zX2FkZHIgPSBwcHBfcHJpdl9hcmVhLT5pcF9yZW1vdGU7Ci0JaWZfZGF0YTItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWVyciA9IGRldmluZXRfaW9jdGwoIFNJT0NTSUZEU1RBRERSLCAmaWZfaW5mbyApOwotCi0Jc2V0X2ZzKGZzKTsgICAgICAgICAgIC8qIHJlc3RvcmUgb2xkIGJsb2NrICovCi0JCi0JaWYgKGVycikgewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEFkZGluZyBvZiByb3V0ZSBmYWlsZWQ6ICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6CUxvY2FsIDogJXUuJXUuJXUuJXVcbiIsCi0JCQljYXJkLT5kZXZuYW1lLE5JUFFVQUQocHBwX3ByaXZfYXJlYS0+aXBfbG9jYWwpKTsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOglSZW1vdGU6ICV1LiV1LiV1LiV1XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxOSVBRVUFEKHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSkpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZW1vdmUgRHluYW1pYyBSb3V0ZS4KLSAqIENhbGxlZCB3aGVuIHBwcCBpbnRlcmZhY2UgZGlzY29ubmVjdGVkLgotICovCi0KLXN0YXRpYyB2b2lkIHJlbW92ZV9yb3V0ZSggc2RsYV90ICpjYXJkICkKLXsKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWxvbmcgaXBfYWRkcjsKLQlpbnQgZXJyOwotCi0gICAgICAgIG1tX3NlZ21lbnRfdCBmczsKLQlzdHJ1Y3QgaWZyZXEgaWZfaW5mbzsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlmX2RhdGExOwotICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBkZXYtPmlwX3B0cjsKLSAgICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsJCi0KLQlpcF9hZGRyID0gaWZhLT5pZmFfbG9jYWw7Ci0KLQkvKiBTZXQgTG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKi8KLQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0Jc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0KLQlmcyA9IGdldF9mcygpOwotICAgICAgIAlzZXRfZnMoZ2V0X2RzKCkpOyAgICAgLyogZ2V0IHVzZXIgc3BhY2UgYmxvY2sgKi8gCi0KLQkvKiBDaGFuZ2UgdGhlIGxvY2FsIGlwIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSB0byAwLgotCSAqIFRoaXMgd2lsbCBhbHNvIGRlbGV0ZSB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0JICovCQotCWlmX2RhdGExID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZl9pbmZvLmlmcl9hZGRyOwotCWlmX2RhdGExLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCWlmX2RhdGExLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQllcnIgPSBkZXZpbmV0X2lvY3RsKCBTSU9DU0lGQUREUiwgJmlmX2luZm8gKTsKLQotICAgICAgICBzZXRfZnMoZnMpOyAgICAgICAgICAgLyogcmVzdG9yZSBvbGQgYmxvY2sgKi8KLQotCQotCWlmIChlcnIpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBEZWxldGluZyBkeW5hbWljIHJvdXRlIGZhaWxlZCAlZCFcbiIsCi0JCQkgY2FyZC0+ZGV2bmFtZSwgZXJyKTsKLQkJcmV0dXJuOwotCX1lbHNlewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFBQUCBEZWxldGluZyBkeW5hbWljIHJvdXRlICV1LiV1LiV1LiV1IHN1Y2Nlc3NmdWx5XG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgTklQUVVBRChpcF9hZGRyKSk7Ci0JfQotCXJldHVybjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUGVyZm9ybSB0aGUgSW50ZXJydXB0IFRlc3QgYnkgcnVubmluZyB0aGUgUkVBRF9DT0RFX1ZFUlNJT04gY29tbWFuZCBNQVhfSU5UUgotICogX1RFU1RfQ09VTlRFUiB0aW1lcy4KLSAqLwotc3RhdGljIGludCBpbnRyX3Rlc3QoIHNkbGFfdCAqY2FyZCApCi17Ci0JcHBwX21ib3hfdCAqbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnIsaTsKLQotCWVyciA9IHBwcF9zZXRfaW50cl9tb2RlKCBjYXJkLCAweDA4ICk7Ci0JCi0JaWYgKGVyciA9PSBDTURfT0spIHsgCi0JCQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSOyBpICsrKSB7CQotCQkJLyogUnVuIGNvbW1hbmQgUkVBRF9DT0RFX1ZFUlNJT04gKi8KLQkJCW1lbXNldCgmbWItPmNtZCwgMCwgc2l6ZW9mKHBwcF9jbWRfdCkpOwotCQkJbWItPmNtZC5sZW5ndGggID0gMDsKLQkJCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9SRUFEX0NPREVfVkVSU0lPTjsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJaWYgKGVyciAhPSBDTURfT0spIAotCQkJCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkJfQotCX0KLQllbHNlIHJldHVybiBlcnI7Ci0KLQllcnIgPSBwcHBfc2V0X2ludHJfbW9kZSggY2FyZCwgMCApOwotCWlmIChlcnIgIT0gQ01EX09LKSAKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gRFJWU1RBVFMgb3IgUFRQSVBFQUIgPwotICovCi1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2RsYV90ICpjYXJkICkKLXsKLQl1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0OwotCXVuc2lnbmVkIGNoYXIgYnVmMls1XTsgCi0JcHBwX3VkcF9wa3RfdCAqcHBwX3VkcF9wa3QgPSAocHBwX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsgCi0JCi0Jc2VuZHBhY2tldCA9IHNrYi0+ZGF0YTsKLQltZW1jcHkoJmJ1ZjIsICZjYXJkLT53YW5kZXYudWRwX3BvcnQsIDIpOwotCQotCWlmKCAJcHBwX3VkcF9wa3QtPmlwX3BrdC52ZXJfaW5ldF9oZHJfbGVuZ3RoICA9PSAweDQ1ICYmICAgICAgICAvKiBJUCBwYWNrZXQgKi8gCi0JCXNlbmRwYWNrZXRbOV0gID09IDB4MTEgJiYgICAgICAgIC8qIFVEUCBwYWNrZXQgKi8KLQkJc2VuZHBhY2tldFsyMl0gPT0gYnVmMlsxXSAmJiAgICAgLyogVURQIFBvcnQgKi8KLQkJc2VuZHBhY2tldFsyM10gPT0gYnVmMlswXSAmJgotCQlzZW5kcGFja2V0WzM2XSA9PSAweDAxICkgewotCQotCQlpZiAoICAgIHNlbmRwYWNrZXRbMjhdID09IDB4NTAgJiYgICAgLyogUFRQSVBFQUI6IFNpZ25hdHVyZSAqLyAKLQkJCXNlbmRwYWNrZXRbMjldID09IDB4NTQgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzBdID09IDB4NTAgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzFdID09IDB4NDkgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzJdID09IDB4NTAgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzNdID09IDB4NDUgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzRdID09IDB4NDEgJiYgICAgICAKLQkJCXNlbmRwYWNrZXRbMzVdID09IDB4NDIgKXsgCi0KLQkJCXJldHVybiBVRFBfUFRQSVBFX1RZUEU7Ci0JCi0JCX0gZWxzZSBpZihzZW5kcGFja2V0WzI4XSA9PSAweDQ0ICYmICAvKiBEUlZTVEFUUzogU2lnbmF0dXJlICovCi0JCQlzZW5kcGFja2V0WzI5XSA9PSAweDUyICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMwXSA9PSAweDU2ICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMxXSA9PSAweDUzICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMyXSA9PSAweDU0ICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzMzXSA9PSAweDQxICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzM0XSA9PSAweDU0ICYmICAgICAgCi0gICAgICAJCQlzZW5kcGFja2V0WzM1XSA9PSAweDUzICl7Ci0JCi0JCQlyZXR1cm4gVURQX0RSVlNUQVRTX1RZUEU7Ci0KLQkJfSBlbHNlCi0JCQlyZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLQotCX0gZWxzZQotCQlyZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkIGNvbnRhaW5zIGEgYnJvYWRjYXN0IG9yCi0gKiBtdWx0aWNhc3Qgc291cmNlIElQIGFkZHJlc3MuCi0gKi8KLQotc3RhdGljIGludCBjaGtfYmNhc3RfbWNhc3RfYWRkcihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl1MzIgc3JjX2lwX2FkZHI7Ci0gICAgICAgIHUzMiBicm9hZGNhc3RfaXBfYWRkciA9IDA7Ci0gICAgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQotICAgICAgICAvKiByZWFkIHRoZSBJUCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBvdXRnb2luZyBwYWNrZXQgKi8KLSAgICAgICAgc3JjX2lwX2FkZHIgPSAqKHUzMiAqKShza2ItPmRhdGEgKyAxMik7Ci0KLQkvKiByZWFkIHRoZSBJUCBicm9hZGNhc3QgYWRkcmVzcyBmb3IgdGhlIGRldmljZSAqLwotICAgICAgICBpbl9kZXYgPSBkZXYtPmlwX3B0cjsKLSAgICAgICAgaWYoaW5fZGV2ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmE9IGluX2Rldi0+aWZhX2xpc3Q7Ci0gICAgICAgICAgICAgICAgaWYoaWZhICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RfaXBfYWRkciA9IGlmYS0+aWZhX2Jyb2FkY2FzdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotIAotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBCcm9hZGNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpICYmIChzcmNfaXBfYWRkciA9PSBicm9hZGNhc3RfaXBfYWRkcikpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQnJvYWRjYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfSAKLQotICAgICAgICAvKiBjaGVjayBpZiB0aGUgSVAgU291cmNlIEFkZHJlc3MgaXMgYSBNdWx0aWNhc3QgYWRkcmVzcyAqLwotICAgICAgICBpZigobnRvaGwoc3JjX2lwX2FkZHIpID49IDB4RTAwMDAwMDEpICYmCi0JCShudG9obChzcmNfaXBfYWRkcikgPD0gMHhGRkZGRkZGRSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTXVsdGljYXN0IFNvdXJjZSBBZGRyZXNzIHNpbGVudGx5IGRpc2NhcmRlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotfQotCi12b2lkIHM1MDhfbG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotc3RhdGljIGludCByZWFkX2Nvbm5lY3Rpb25faW5mbyAoc2RsYV90ICpjYXJkKQotewotCXBwcF9tYm94X3QgKm1iID0gY2FyZC0+bWJveDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlwcHBfcHJpdmF0ZV9hcmVhX3QgKnBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0JcHBwNTA4X2Nvbm5lY3RfaW5mb190ICpwcHA1MDhfY29ubmVjdF9pbmZvOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1iLT5jbWQsIDAsIHNpemVvZihwcHBfY21kX3QpKTsKLQltYi0+Y21kLmxlbmd0aCAgPSAwOwotCW1iLT5jbWQuY29tbWFuZCA9IFBQUF9HRVRfQ09OTkVDVElPTl9JTkZPOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCi0JaWYgKGVyciAhPSBDTURfT0spIHsgCi0JCXBwcF9lcnJvcihjYXJkLCBlcnIsIG1iKTsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlID0gMDsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWwgPSAwOwotCX0KLQllbHNlIHsKLQkJcHBwNTA4X2Nvbm5lY3RfaW5mbyA9IChwcHA1MDhfY29ubmVjdF9pbmZvX3QgKiltYi0+ZGF0YTsKLQkJcHBwX3ByaXZfYXJlYS0+aXBfcmVtb3RlID0gcHBwNTA4X2Nvbm5lY3RfaW5mby0+aXBfcmVtb3RlOwotCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCA9IHBwcDUwOF9jb25uZWN0X2luZm8tPmlwX2xvY2FsOwotCi0JCU5FWF9QUklOVEsoS0VSTl9JTkZPICJSRUFEIENPTk5FQ1RJT04gR09UIElQIEFERFJFU1MgJXgsICV4XG4iLAotCQkJCXBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSwKLQkJCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBjb25maWdfcHBwCi0gKgotICoJQ29uZmlndXJlIHRoZSBwcHAgcHJvdG9jb2wgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4JCQotICoKLSAqICAgCVRoZSBpZl9vcGVuIGZ1bmN0aW9uIGJpbmRzIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHBvbGwgcm91dGluZS4KLSAqICAgICAgVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGV2ZXJ5IHRpbWUgdGhlIHBwcCBpbnRlcmZhY2UKLSAqICAgICAgaXMgYnJvdWdodCB1cC4gIAotICogICAgICAKLSAqCUlmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgbm90IGVuYWJsZWQsIHByb2NlZWQgdG8gY29uZmlndXJlCi0gKiAgICAgIHRoZSBjYXJkIGFuZCBlbmFibGUgY29tbXVuaWNhdGlvbnMuCi0gKgotICogICAgICBJZiB0aGUgY29tbXVuaWNhdGlvbnMgYXJlIGVuYWJsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGludGVyZmFjZQotICogICAgICB3YXMgc2h1dGRvd24gYnkgZXRoZXIgdGhlIHVzZXIgb3IgZHJpdmVyLiBJbiB0aGlzIGNhc2UsIHdlIAotICogICAgICBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIElQIGFkZHJlc3NlcyBoYXZlIG5vdCBjaGFuZ2VkLiAgSWYKLSAqICAgICAgdGhlIElQIGFkZHJlc3NlcyBjaGFuZ2VkLCB3ZSBoYXZlIHRvIHJlY29uZmlndXJlIHRoZSBmaXJtd2FyZQotICogICAgICBhbmQgdXBkYXRlIHRoZSBjaGFuZ2VkIElQIGFkZHJlc3Nlcy4gIE90aGVyd2lzZSwganVzdCBleGl0LgotICovCi1zdGF0aWMgaW50IGNvbmZpZ19wcHAgKHNkbGFfdCAqY2FyZCkKLXsKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCXBwcF9mbGFnc190ICpmbGFncyA9IGNhcmQtPmZsYWdzOwotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChjYXJkLT51LnAuY29tbV9lbmFibGVkKXsKLQotCQlpZiAocHBwX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wICE9IHBwcF9wcml2X2FyZWEtPmlwX2xvY2FsIHx8Ci0JCSAgICBwcHBfcHJpdl9hcmVhLT5pcF9yZW1vdGVfdG1wICE9IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSl7Ci0JCQkKLQkJCS8qIFRoZSBJUCBhZGRlcnNzZXMgaGF2ZSBjaGFuZ2VkLCB3ZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdG9wIHRoZSBjb21tdW5pY2F0aW9ucyBhbmQgcmVjb25maWd1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBjYXJkLiBSZWFzb246IHRoZSBmaXJtd2FyZSBtdXN0IGtub3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3Nlcy4gKi8KLQkJCWRpc2FibGVfY29tbShjYXJkKTsKLQkJCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IElQIGFkZHJlc3NlcyBjaGFuZ2VkIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzdGFydGluZyBjb21tdW5pY2F0aW9ucyAuLi5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQl9ZWxzZXsgCi0JCQkvKiBJUCBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgbGluayBpcyB1cCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUuIFRoZXJlZm9yZSwgZXhpdCAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBSZWNvcmQgdGhlIG5ldyBJUCBhZGRyZXNlcyAqLwotCXBwcF9wcml2X2FyZWEtPmlwX2xvY2FsID0gcHBwX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wOwotCXBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZSA9IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXA7Ci0KLQlpZiAoY29uZmlnNTA4KGRldiwgY2FyZCkpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGNvbmZpZ3VyZSBQUFAgZGV2aWNlXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwcHBfc2V0X2ludHJfbW9kZShjYXJkLCBQUFBfSU5UUl9SWFJEWXwKLQkJCSAgICAJCVBQUF9JTlRSX1RYUkRZfAotCQkJCSAgICAJUFBQX0lOVFJfTU9ERU18Ci0JCQkJICAgIAlQUFBfSU5UUl9ESVNDIHwKLQkJCQkgICAgCVBQUF9JTlRSX09QRU4gfAotCQkJCSAgICAJUFBQX0lOVFJfRFJPUF9EVFIgfAotCQkJCQlQUFBfSU5UUl9USU1FUikpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogRmFpbGVkIHRvIGNvbmZpZ3VyZSBib2FyZCBpbnRlcnJ1cHRzICFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotICAgICAgICAvKiBUdXJuIG9mZiB0aGUgdHJhbnNtaXQgYW5kIHRpbWVyIGludGVycnVwdCAqLwotCWZsYWdzLT5pbWFzayAmPSB+KFBQUF9JTlRSX1RYUkRZIHwgUFBQX0lOVFJfVElNRVIpIDsKLQotCi0JLyogSWYgeW91IGFyZSBub3QgdGhlIGF1dGhlbnRpY2F0b3IgYW5kIGFueSBvbmUgb2YgdGhlIHByb3RvY29sIGlzIAotCSAqIGVuYWJsZWQgdGhlbiB3ZSBjYWxsIHRoZSBzZXRfb3V0X2JvdW5kX2F1dGhlbnRpY2F0aW9uLgotCSAqLwotCWlmICggIWNhcmQtPnUucC5hdXRoZW50aWNhdG9yICAmJiAocHBwX3ByaXZfYXJlYS0+cGFwIHx8IHBwcF9wcml2X2FyZWEtPmNoYXApKSB7Ci0JCWlmICggcHBwX3NldF9vdXRibmRfYXV0aChjYXJkLCBwcHBfcHJpdl9hcmVhKSApewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE91dGJvdW5kIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IAotCQotCS8qIElmIHlvdSBhcmUgdGhlIGF1dGhlbnRpY2F0b3IgYW5kIGFueSBvbmUgb2YgdGhlIHByb3RvY29sIGlzIGVuYWJsZWQKLQkgKiB0aGVuIHdlIGNhbGwgdGhlIHNldF9pbl9ib3VuZF9hdXRoZW50aWNhdGlvbi4KLQkgKi8KLQlpZiAoY2FyZC0+dS5wLmF1dGhlbnRpY2F0b3IgJiYgKHBwcF9wcml2X2FyZWEtPnBhcCB8fCBwcHBfcHJpdl9hcmVhLT5jaGFwKSl7Ci0JCWlmIChwcHBfc2V0X2luYm5kX2F1dGgoY2FyZCwgcHBwX3ByaXZfYXJlYSkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEluYm91bmQgYXV0aGVudGljYXRpb24gZmFpbGVkICFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7CQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKiBJZiB3ZSBmYWlsIHRvIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBoZXJlIGl0J3MgT0ssCi0JICogc2luY2UgdGhlIERUUiB0aW1lciB3aWxsIGNhdXNlIGEgZGlzY29ubmVjdGVkLCB3aGljaAotCSAqIHdpbGwgcmV0cmlnZ2VyIGNvbW11bmljYXRpb24gaW4gdGltZXJfaW50cigpICovCi0JaWYgKHBwcF9jb21tX2VuYWJsZShjYXJkKSA9PSBDTURfT0spIHsKLQkJd2FucGlwZV9zZXRfc3RhdGUoY2FyZCwgV0FOX0NPTk5FQ1RJTkcpOwotCQlpbml0X3BwcF90eF9yeF9idWZmKGNhcmQpOwotCX0KLQotCXJldHVybiAwOyAKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHBwcF9wb2xsCi0gKgkKLSAqIFJhdGlvbmFsZToKLSAqIAlXZSBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgcm91dGluZyB0YWJsZXMsIG9yCi0gKiAgICAgIGlwIGFkZHJlc3NlcyB3aXRoaW5nIHRoZSBpbnRlcnJ1cHQuIFRoZXJlZm9yZQotICogICAgICB3ZSBtdXN0IHBlcmZvcm0gc3VjaCBhY3RvbnMgb3V0c2lkZSBhbiBpbnRlcnJ1cHQgCi0gKiAgICAgIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogRGVzY3JpcHRpb246CQotICoJUFBQIHBvbGxpbmcgcm91dGluZSwgcmVzcG9uc2libGUgZm9yIAotICogICAgIAlzaHV0dGluZyBkb3duIGludGVyZmFjZXMgdXBvbiBkaXNjb25uZWN0Ci0gKiAgICAgCWFuZCBhZGRpbmcvcmVtb3Zpbmcgcm91dGVzLiAKLSAqICAgICAgCi0gKiBVc2FnZTogICAgICAgIAotICogCVRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggcHBwICAKLSAqIAlpbnRlcmZhY2UgdGhyb3VnaCBhIHRxX3NjaGVkdWxlIGJvdHRvbSBoYWxmLgotICogICAgICAKLSAqICAgICAgdHJpZ2dlcl9wcHBfcG9sbCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8ga2ljawotICogICAgICB0aGUgcHBwX3BvbGwgcm91dGluZS4gIAotICovCi1zdGF0aWMgdm9pZCBwcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYTsgCQotCXNkbGFfdCAqY2FyZDsKLQl1OCBjaGVja19nYXRld2F5PTA7Ci0JcHBwX2ZsYWdzX3QgKmZsYWdzOwotCi0JaWYgKCFkZXYgfHwgKHBwcF9wcml2X2FyZWEgPSBkZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybjsKLQotCWNhcmQgPSBwcHBfcHJpdl9hcmVhLT5jYXJkOwotCWZsYWdzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkvKiBTaHV0ZG93biBpcyBpbiBwcm9ncmVzcywgc3RvcCB3aGF0IHlvdSBhcmUgCi0JICogZG9pbmcgYW5kIGdldCBvdXQgKi8KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGlmX29wZW4oKSBmdW5jdGlvbiBoYXMgdHJpZ2dlcmVkIHRoZSBwb2xsaW5nIHJvdXRpbmUKLQkgKiB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgSVAgYWRkcmVzc2VzLiAgT25jZSB0aGUKLQkgKiBhZGRyZXNzZXMgYXJlIGZvdW5kLCB0cmlnZ2VyIHRoZSBjaGRsYyBjb25maWd1cmF0aW9uICovCi0JaWYgKHRlc3RfYml0KDAsJnBwcF9wcml2X2FyZWEtPmNvbmZpZ19wcHApKXsKLQotCQlwcHBfcHJpdl9hcmVhLT5pcF9sb2NhbF90bXAgID0gZ2V0X2lwX2FkZHJlc3MoZGV2LFdBTl9MT0NBTF9JUCk7Ci0JCXBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgPSBnZXRfaXBfYWRkcmVzcyhkZXYsV0FOX1BPSU5UT1BPSU5UX0lQKTsKLQotCQlpZiAocHBwX3ByaXZfYXJlYS0+aXBfbG9jYWxfdG1wID09IHBwcF9wcml2X2FyZWEtPmlwX3JlbW90ZV90bXAgJiYgCi0JICAgICAgICAgICAgY2FyZC0+dS5wLmlwX21vZGUgPT0gV0FOT1BUX1BQUF9IT1NUKXsKLQkJCQotCQkJaWYgKCsrcHBwX3ByaXZfYXJlYS0+aXBfZXJyb3IgPiBNQVhfSVBfRVJST1JTKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJcbiVzOiAtLS0gV0FSTklORyAtLS1cbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIGxvY2FsIElQIGFkZHJlc3MgaXMgdGhlIHNhbWUgYXMgdGhlXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBvaW50LXRvLVBvaW50IElQIGFkZHJlc3MuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IC0tLSBXQVJOSU5HIC0tLVxuXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9ZWxzZXsKLQkJCQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQkJCXBwcF9wcml2X2FyZWEtPnBvbGxfZGVsYXlfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMrSFo7Ci0JCQkJYWRkX3RpbWVyKCZwcHBfcHJpdl9hcmVhLT5wb2xsX2RlbGF5X3RpbWVyKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlwcHBfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ09ORklHOwotCQlmbGFncy0+aW1hc2sgfD0gUFBQX0lOVFJfVElNRVI7CQotCQlwcHBfcHJpdl9hcmVhLT5pcF9lcnJvcj0wOwkKLQkJCi0JCWNsZWFyX2JpdCgwLCZwcHBfcHJpdl9hcmVhLT5jb25maWdfcHBwKTsKLQkJY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIER5bmFtaWMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLCBhcyB3ZWxsIGFzIGR5bmFtaWMKLQkgKiByb3V0aW5nLiAgKi8KLQkKLQlzd2l0Y2ggKGNhcmQtPndhbmRldi5zdGF0ZSkgewotCQotCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQotCQkvKiBJZiB0aGUgZHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBpcyBvbiwgYW5kIGludGVyZmFjZSAKLQkJICogaXMgdXAsIHRoZW4gYnJpbmcgZG93biB0aGUgbmV0b3dyayBpbnRlcmZhY2UgKi8KLQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0JCSAgICAhdGVzdF9iaXQoREVWX0RPV04sJnBwcF9wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKQkmJgkKLQkJICAgIGNhcmQtPndhbmRldi5kZXYtPmZsYWdzICYgSUZGX1VQKXsJCi0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcmZhY2UgJXMgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSxjYXJkLT53YW5kZXYuZGV2LT5uYW1lKTsKLQkJCWNoYW5nZV9kZXZfZmxhZ3MoY2FyZC0+d2FuZGV2LmRldiwKLQkJCQkJKGNhcmQtPndhbmRldi5kZXYtPmZsYWdzJn5JRkZfVVApKTsKLQkJCXNldF9iaXQoREVWX0RPV04sJnBwcF9wcml2X2FyZWEtPmludGVyZmFjZV9kb3duKTsKLQkJfWVsc2V7Ci0JCQkvKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsb2NhbCBJUCBhZGRyZXNzIGlzCi0gICAgICAgICAgICAgICAJICAgCSAqIHplcm8uIElmIGl0IGlzLCB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICAgCSAqIEZvciBzb21lIHJlYXNvbiB0aGUga2VybmVsIGNyYXNoZXMgYmFkbHkgaWYgCi0gICAgICAgICAgICAgICAgIAkgKiB3ZSB0cnkgdG8gcmVtb3ZlIHRoZSByb3V0ZSB0d2ljZSAqLwotCi0JCQlpZiAoY2FyZC0+d2FuZGV2LmRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYgCi0JCSAgICAJICAgIGdldF9pcF9hZGRyZXNzKGNhcmQtPndhbmRldi5kZXYsV0FOX0xPQ0FMX0lQKSAmJgotCQkgICAgCSAgICBjYXJkLT51LnAuaXBfbW9kZSA9PSBXQU5PUFRfUFBQX1BFRVIpewotCi0JCQkJcmVtb3ZlX3JvdXRlKGNhcmQpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkKLQkJLyogSW4gU01QIG1hY2hpbmUgdGhpcyBjb2RlIGNhbiBleGVjdXRlIGJlZm9yZSB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbWVzIHVwLiAgSW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdAotCQkgKiB0cnkgdG8gYnJpbmcgdXAgdGhlIGludGVyZmFjZSBiZWZvcmUgZGV2X29wZW4oKSBpcyBmaW5pc2hlZCAqLwotCi0KLQkJLyogREVWX0RPV04gd2lsbCBiZSBzZXQgb25seSB3aGVuIHdlIGJyaW5nIGRvd24gdGhlIGludGVyZmFjZQotCQkgKiBmb3IgdGhlIHZlcnkgZmlyc3QgdGltZS4gVGhpcyB3YXkgd2Uga25vdyB0aGF0IGl0IHdhcyB1cwotCQkgKiB0aGF0IGJyb3VnaHQgdGhlIGludGVyZmFjZSBkb3duICovCi0JCQotCQlpZiAodGVzdF9iaXQoRFlOX09QVF9PTiwmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0JICAgICAgICAgICAgdGVzdF9iaXQoREVWX0RPV04sICAmcHBwX3ByaXZfYXJlYS0+aW50ZXJmYWNlX2Rvd24pICYmCi0gCQkgICAgIShjYXJkLT53YW5kZXYuZGV2LT5mbGFncyAmIElGRl9VUCkpewotCQkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZXJmYWNlICVzIHVwLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGNhcmQtPndhbmRldi5kZXYtPm5hbWUpOwotCQkJCi0JCQljaGFuZ2VfZGV2X2ZsYWdzKGNhcmQtPndhbmRldi5kZXYsKGNhcmQtPndhbmRldi5kZXYtPmZsYWdzfElGRl9VUCkpOwotCQkJY2xlYXJfYml0KERFVl9ET1dOLCZwcHBfcHJpdl9hcmVhLT5pbnRlcmZhY2VfZG93bik7Ci0JCQljaGVja19nYXRld2F5PTE7Ci0JCX0KLQotCQlpZiAoKGNhcmQtPnUucC5pcF9tb2RlID09IFdBTk9QVF9QUFBfUEVFUikgJiYgCi0JCSAgICB0ZXN0X2JpdCgxLCZSZWFkX2Nvbm5lY3Rpb25faW5mbykpIHsgCi0JCQkKLQkJCXByb2Nlc3Nfcm91dGUoY2FyZCk7Ci0JCQljbGVhcl9iaXQoMSwmUmVhZF9jb25uZWN0aW9uX2luZm8pOwotCQkJY2hlY2tfZ2F0ZXdheT0xOwotCQl9Ci0KLQkJaWYgKHBwcF9wcml2X2FyZWEtPmdhdGV3YXkgJiYgY2hlY2tfZ2F0ZXdheSkKLQkJCWFkZF9nYXRld2F5KGNhcmQsZGV2KTsKLQotCQlicmVhazsKLQl9Ci0JY2xlYXJfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQlyZXR1cm47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0cmlnZ2VyX3BwcF9wb2xsCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAJQWRkIGEgcHBwX3BvbGwoKSB0YXNrIGludG8gYSB0cV9zY2hlZHVsZXIgYmggaGFuZGxlcgotICogICAgICBmb3IgYSBzcGVjaWZpYyBpbnRlcmZhY2UuICBUaGlzIHdpbGwga2ljawotICogICAgICB0aGUgcHBwX3BvbGwoKSByb3V0aW5lIGF0IGEgbGF0ZXIgdGltZS4gCi0gKgotICogVXNhZ2U6Ci0gKiAJSW50ZXJydXB0cyB1c2UgdGhpcyB0byBkZWZlciBhIHRha3MgdG8gCi0gKiAgICAgIGEgcG9sbGluZyByb3V0aW5lLgotICoKLSAqLwkKLQotc3RhdGljIHZvaWQgdHJpZ2dlcl9wcHBfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXBwcF9wcml2YXRlX2FyZWFfdCAqcHBwX3ByaXZfYXJlYTsKLQlpZiAoKHBwcF9wcml2X2FyZWE9ZGV2LT5wcml2KSAhPSBOVUxMKXsgCQotCQkKLQkJc2RsYV90ICpjYXJkID0gcHBwX3ByaXZfYXJlYS0+Y2FyZDsKLQotCQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJCXJldHVybjsKLQkJfQotCi0JCXNjaGVkdWxlX3dvcmsoJnBwcF9wcml2X2FyZWEtPnBvbGxfd29yayk7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgcHBwX3BvbGxfZGVsYXkgKHVuc2lnbmVkIGxvbmcgZGV2X3B0cikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKLQl0cmlnZ2VyX3BwcF9wb2xsKGRldik7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBkZXRlY3RfYW5kX2ZpeF90eF9idWcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU9uIGNvbm5lY3QsIGlmIHRoZSBib2FyZCB0eCBidWZmZXIgcHRyIGlzIG5vdCB0aGUgc2FtZQotICogICAgICBhcyB0aGUgZHJpdmVyIHR4IGJ1ZmZlciBwdHIsIHdlIGZvdW5kIGEgZmlybXdhcmUgYnVnLgotICogICAgICBSZXBvcnQgdGhlIGJ1ZyB0byB0aGUgYWJvdmUgbGF5ZXIuICBUbyBmaXggdGhlCi0gKiAgICAgIGVycm9yIHJlc3RhcnQgY29tbXVuaWNhdGlvbnMgYWdhaW4uCi0gKgotICogVXNhZ2U6Ci0gKgotICovCQotCi1zdGF0aWMgaW50IGRldGVjdF9hbmRfZml4X3R4X2J1ZyAoc2RsYV90ICpjYXJkKQotewotCWlmICgoKHVuc2lnbmVkIGxvbmcpY2FyZC0+dS5wLnR4YnVmX2Jhc2UmMHhGRkYpICE9ICgoKmNhcmQtPnUucC50eGJ1Zl9uZXh0KSYweEZGRikpewotCQlORVhfUFJJTlRLKEtFUk5fSU5GTyAiTWFqb3IgRXJyb3IsIEZpeCB0aGUgYnVnXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYV94MjUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmODQ2ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYV94MjUuYworKysgL2Rldi9udWxsCkBAIC0xLDU0OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfeDI1LmMJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuICBYLjI1IG1vZHVsZS4KLSoKLSogQXV0aG9yOglOZW5hZCBDb3JiaWMJPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIEFwciAwMywgMjAwMSAgTmVuYWQgQ29yYmljCSBvIEZpeGVkIHRoZSByeF9za2I9TlVMTCBidWcgaW4geDI1IGluIHJ4X2ludHIoKS4KLSogRGVjIDI2LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gQWRkZWQgYSBuZXcgcG9sbGluZyByb3V0aW5lLCB0aGF0IHVzZXMKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBrZXJuZWwgdGltZXIgKG1vcmUgZWZmaWNpZW50KS4KLSogRGVjIDI1LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gVXBkYXRlZCBmb3IgMi40Llgga2VybmVsCi0qIEp1bCAyNiwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEluY3JlYXNlZCB0aGUgbG9jYWwgcGFja2V0IGJ1ZmZlcmluZwotKiAJCQkJICAgZm9yIEFQSSB0byA0MDk2K2hlYWRlcl9zaXplLiAKLSogSnVsIDE3LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gRml4ZWQgdGhlIHgyNSBzdGFydHVwIGJ1Zy4gRW5hYmxlIAotKiAJCQkJICAgY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcwotKiAJCQkJICAgY29tZSB1cC4gIEhJR0ggU1ZDL1BWQyBpcyB1c2VkIHRvIGNhbGN1bGF0ZQotKiAJCQkJICAgdGhlIG51bWJlciBvZiBjaGFubmVscy4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHByb3RvY29sIG9ubHkgYWZ0ZXIgYWxsIGludGVyZmFjZXMKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGVuYWJsZWQuCi0qIEp1bCAxMCwgMjAwMAlOZW5hZCBDb3JiaWMJIG8gRml4ZWQgdGhlIE1fQklUIGJ1Zy4gCi0qIEFwciAyNSwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIFBhc3MgTW9kZW0gbWVzc2FnZXMgdG8gdGhlIEFQSS4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBpZGxlIHRpbWVvdXQgaW4gWDI1IEFQSS4KLSogQXByIDE0LCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gRml4ZWQ6IExhcmdlIExDTiBudW1iZXIgc3VwcG9ydC4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBMQ04gbnVtYmVyIGlzIDQwOTUuCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIFgyNSBjaGFubmVscyBpcyAyNTUuCi0qIEFwciAwNiwgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEFkZGVkIFNNUCBTdXBwb3J0LgotKiBNYXIgMjksIDIwMDAgIE5lbmFkIENvcmJpYwkgbyBBZGRlZCBzdXBwb3J0IGZvciBTNTE0IFBDSSBDYXJkCi0qIE1hciAyMywgMjAwMCAgTmVuYWQgQ29yYmljCSBvIEltcHJvdmVkIHRhc2sgcXVldWUsIEJIIGhhbmRsaW5nLgotKiBNYXIgMTQsIDIwMDAgIE5lbmFkIENvcmJpYyAgCSBvIFVwZGF0ZWQgUHJvdG9jb2wgVmlvbGF0aW9uIGhhbmRsaW5nCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmVzLiAgQnVnIEZpeC4KLSogTWFyIDEwLCAyMDAwICBOZW5hZCBDb3JiaWMJIG8gQnVnIEZpeDogY29ycnVwdGVkIG1ib3ggcmVjb3ZlcnkuCi0qIE1hciAwOSwgMjAwMCAgTmVuYWQgQ29yYmljICAgICBvIEZpeGVkIHRoZSBhdXRvIEhETEMgYnVnLgotKiBNYXIgMDgsIDIwMDAJTmVuYWQgQ29yYmljICAgICBvIEZpeGVkIExBUEIgSERMQyBzdGFydHVwIHByb2JsZW1zLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBtdXN0IGJyaW5nIHRoZSBsaW5rIHVwIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdHgvcngsIGFuZCBicmluZyB0aGUgCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsgZG93biBvbiBjbG9zZSgpLgotKiBNYXIgMDYsIDIwMDAJTmVuYWQgQ29yYmljCSBvIEFkZGVkIGFuIG9wdGlvbiBmb3IgbG9nZ2luZyBjYWxsIHNldHVwIAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4gCi0qIEZlYiAyOSwgMjAwMCAgTmVuYWQgQ29yYmljIAkgbyBBZGRlZCBzdXBwb3J0IGZvciBMQVBCIEhETEMgQVBJCi0qIEZlYiAyNSwgMjAwMCAgTmVuYWQgQ29yYmljICAgICBvIEZpeGVkIHRoZSBtb2RlbSBmYWlsdXJlIGhhbmRsaW5nLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBNb2RlbSBPT0IgbWVzc2FnZSB3aWxsIGJlIHBhc3NlZCAKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVzZXIuCi0qIEZlYiAyMSwgMjAwMCAgTmVuYWQgQ29yYmljIAkgbyBBZGRlZCBYcGlwZW1vbiBEZWJ1ZyBTdXBwb3J0Ci0qIERlYyAzMCwgMTk5OSAJTmVuYWQgQ29yYmljCSBvIFNvY2tldCBiYXNlZCBYMjVBUEkgCi0qIFNlcCAxNywgMTk5OAlKYXNwcmVldCBTaW5naAkgbyBVcGRhdGVzIGZvciAyLjIuWCAga2VybmVsCi0qIE1hciAxNSwgMTk5OAlBbGFuIENveAkgbyAyLjEueCBwb3J0aW5nCi0qIERlYyAxOSwgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBBZGRlZCBtdWx0aS1jaGFubmVsIElQWCBzdXBwb3J0Ci0qIE5vdiAyNywgMTk5NwlKYXNwcmVldCBTaW5naAkgbyBBZGRlZCBwcm90ZWN0aW9uIGFnYWluc3QgZW5hYmxpbmcgb2YgaXJxcwotKgkJCQkgICB3aGVuIHRoZXkgYXJlIGRpc2FibGVkLgotKiBOb3YgMTcsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBBZGRlZCBJUFggc3VwcG9ydAotKgkJCQkgbyBDaGFuZ2VkIGlmX3NlbmQoKSB0byBub3cgYnVmZmVyIHBhY2tldHMgd2hlbgotKgkJCQkgICB0aGUgYm9hcmQgaXMgYnVzeQotKgkJCQkgbyBSZW1vdmVkIHF1ZXVlaW5nIG9mIHBhY2tldHMgdmlhIHRoZSBwb2xsaW5nCi0qCQkJCSAgIHJvdXRpbmcKLSoJCQkJIG8gQ2hhbmdlZCBpZl9zZW5kKCkgY3JpdGljYWwgZmxhZ3MgdG8gcHJvcGVybHkKLSoJCQkJICAgaGFuZGxlIHJhY2UgY29uZGl0aW9ucwotKiBOb3YgMDYsIDE5OTcgIEZhcmhhbiBUaGF3YXIgICAgbyBBZGRlZCBzdXBwb3J0IGZvciBTVkMgdGltZW91dHMKLSoJCQkJIG8gQ2hhbmdlZCBQVkMgZW5jYXBzdWxhdGlvbiB0byBFVEhfUF9JUAotKiBKdWwgMjEsIDE5OTcgIEphc3ByZWV0IFNpbmdoCSBvIEZpeGVkIGZyZWVpbmcgdXAgb2YgYnVmZmVycyB1c2luZyBrZnJlZSgpCi0qCQkJCSAgIHdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQuCi0qIE1hciAxMSwgMTk5NyAgRmFyaGFuIFRoYXdhciAgIFZlcnNpb24gMy4xLjEKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gYWRkZWQgc3VwcG9ydCBmb3IgVjM1Ci0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIGNoYW5nZWQgaWZfc2VuZCgpIHRvIHJldHVybiAwIGlmCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbmRldi5jcml0aWNhbCgpIGlzIHRydWUKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gZnJlZSBzb2NrZXQgYnVmZmVyIGluIGlmX3NlbmQoKSBpZgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgMAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBhZGRlZCBzdXBwb3J0IGZvciBzaW5nbGUgJ0AnIGFkZHJlc3MgdG8KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0IGFsbCBpbmNvbWluZyBjYWxscwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBmaXhlZCBidWcgaW4gc2V0X2NoYW5fc3RhdGUoKSB0byBkaXNjb25uZWN0Ci0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gaW1wbGVtZW50ZWQgZXhlYygpIGVudHJ5IHBvaW50Ci0qIEphbiAwNywgMTk5NwlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUluY2x1ZGVzIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC93YW5waXBlLmg+CS8qIFdBTlBJUEUgY29tbW9uIHVzZXIgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogRXhwZXJpbWVudGFsIGRlbGF5ICovCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhX3gyNS5oPgkvKiBYLjI1IGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJRGVmaW5lcyAmIE1hY3JvcyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLSNkZWZpbmUJQ01EX09LCQkwCQkvKiBub3JtYWwgZmlybXdhcmUgcmV0dXJuIGNvZGUgKi8KLSNkZWZpbmUJQ01EX1RJTUVPVVQJMHhGRgkJLyogZmlybXdhcmUgY29tbWFuZCB0aW1lZCBvdXQgKi8KLSNkZWZpbmUJTUFYX0NNRF9SRVRSWQkxMAkJLyogbWF4IG51bWJlciBvZiBmaXJtd2FyZSByZXRyaWVzICovCi0KLSNkZWZpbmUJWDI1X0NIQU5fTVRVCTQwOTYJCS8qIHVuZnJhZ21lbnRlZCBsb2dpY2FsIGNoYW5uZWwgTVRVICovCi0jZGVmaW5lCVgyNV9IUkRIRFJfU1oJNwkJLyogbWF4IGVuY2Fwc3VsYXRpb24gaGVhZGVyIHNpemUgKi8KLSNkZWZpbmUJWDI1X0NPTkNUX1RNT1VUCSg5MCpIWikJCS8qIGxpbmsgY29ubmVjdGlvbiB0aW1lb3V0ICovCi0jZGVmaW5lCVgyNV9SRUNPTl9UTU9VVAkoMTAqSFopCQkvKiBsaW5rIGNvbm5lY3Rpb24gdGltZW91dCAqLwotI2RlZmluZQlDT05ORUNUX1RJTUVPVVQJKDkwKkhaKQkJLyogbGluayBjb25uZWN0aW9uIHRpbWVvdXQgKi8KLSNkZWZpbmUJSE9MRF9ET1dOX1RJTUUJKDMwKkhaKQkJLyogbGluayBob2xkIGRvd24gdGltZSAqLwotI2RlZmluZSBNQVhfQkhfQlVGRgkxMAotI2RlZmluZSBNX0JJVAkJMHgwMQkKLQotLy8jZGVmaW5lIFBSSU5UX0RFQlVHIDEKLSNpZmRlZiBQUklOVF9ERUJVRwotI2RlZmluZSBEQkdfUFJJTlRLKGZvcm1hdCwgYS4uLikgcHJpbnRrKGZvcm1hdCwgIyMgYSkKLSNlbHNlCi0jZGVmaW5lIERCR19QUklOVEsoZm9ybWF0LCBhLi4uKQotI2VuZGlmICAKLQotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkUgICAgICAweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT04gIDB4MDIKLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PRkYgMHgwNAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfUE9MTF9ESVNDT05ORUNUICAweDA4Ci0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQwkgMHgxMAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFCQkgMHgyMAotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfVURQX1BLVAkJIDB4NDAKLQotI2RlZmluZSBNQVhfWDI1X0FERFJfU0laRQkxNgotI2RlZmluZSBNQVhfWDI1X0RBVEFfU0laRSAJMTI5Ci0jZGVmaW5lIE1BWF9YMjVfRkFDTF9TSVpFCTExMAotCi0jZGVmaW5lIFRSWV9DTURfQUdBSU4JMgotI2RlZmluZSBERUxBWV9SRVNVTFQgICAgMQotI2RlZmluZSBSRVRVUk5fUkVTVUxUICAgMAotCi0jZGVmaW5lIERDRCh4KSAoeCAmIDB4MDMgPyAiSElHSCIgOiAiTE9XIikKLSNkZWZpbmUgQ1RTKHgpICh4ICYgMHgwNSA/ICJISUdIIiA6ICJMT1ciKQotCi0KLS8qIERyaXZlciB3aWxsIG5vdCB3cml0ZSBsb2cgbWVzc2FnZXMgYWJvdXQgCi0gKiBtb2RlbSBzdGF0dXMgaWYgZGVmaW5lZC4qLwotI2RlZmluZSBNT0RFTV9OT1RfTE9HIDEKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICogCUZvciBJUFhXQU4gCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNkZWZpbmUgQ1ZIZXhUb0FzY2lpKGIpICgoKHVuc2lnbmVkIGNoYXIpKGIpID4gKHVuc2lnbmVkIGNoYXIpOSkgPyAoKHVuc2lnbmVkIGNoYXIpJ0EnICsgKCh1bnNpZ25lZCBjaGFyKShiKSAtICh1bnNpZ25lZCBjaGFyKTEwKSkgOiAoKHVuc2lnbmVkIGNoYXIpJzAnICsgKHVuc2lnbmVkIGNoYXIpKGIpKSkKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICBNRU1PUlkgREVCVUdHSU5HIEZVTkNUSU9OCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2RlZmluZSBLTUVNX1NBRkVUWVpPTkUgOAotCi1zdGF0aWMgdm9pZCAqIGRiZ19rbWFsbG9jKHVuc2lnbmVkIGludCBzaXplLCBpbnQgcHJpbywgaW50IGxpbmUpIHsKLQlpbnQgaSA9IDA7Ci0Jdm9pZCAqIHYgPSBrbWFsbG9jKHNpemUrc2l6ZW9mKHVuc2lnbmVkIGludCkrMipLTUVNX1NBRkVUWVpPTkUqOCxwcmlvKTsKLQljaGFyICogYzEgPSB2OwkKLQljMSArPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQkqKCh1bnNpZ25lZCBpbnQgKil2KSA9IHNpemU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJYzFbMF0gPSAnRCc7IGMxWzFdID0gJ0UnOyBjMVsyXSA9ICdBJzsgYzFbM10gPSAnRCc7Ci0JCWMxWzRdID0gJ0InOyBjMVs1XSA9ICdFJzsgYzFbNl0gPSAnRSc7IGMxWzddID0gJ0YnOwotCQljMSArPSA4OwotCX0KLQljMSArPSBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQljMVswXSA9ICdNJzsgYzFbMV0gPSAnVSc7IGMxWzJdID0gJ04nOyBjMVszXSA9ICdHJzsKLQkJYzFbNF0gPSAnVyc7IGMxWzVdID0gJ0EnOyBjMVs2XSA9ICdMJzsgYzFbN10gPSAnTCc7Ci0JCWMxICs9IDg7Ci0JfQotCXYgPSAoKGNoYXIgKil2KSArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjg7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGluZSAlZCAga21hbGxvYyglZCwlZCkgPSAlcFxuIixsaW5lLHNpemUscHJpbyx2KTsKLQlyZXR1cm4gdjsKLX0KLXN0YXRpYyB2b2lkIGRiZ19rZnJlZSh2b2lkICogdiwgaW50IGxpbmUpIHsKLQl1bnNpZ25lZCBpbnQgKiBzcCA9ICh1bnNpZ25lZCBpbnQgKikoKChjaGFyICopdikgLSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqOCkpOwotCXVuc2lnbmVkIGludCBzaXplID0gKnNwOwotCWNoYXIgKiBjMSA9ICgoY2hhciAqKXYpIC0gS01FTV9TQUZFVFlaT05FKjg7Ci0JaW50IGkgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQlpZiAoICAgYzFbMF0gIT0gJ0QnIHx8IGMxWzFdICE9ICdFJyB8fCBjMVsyXSAhPSAnQScgfHwgYzFbM10gIT0gJ0QnCi0JCSAgICB8fCBjMVs0XSAhPSAnQicgfHwgYzFbNV0gIT0gJ0UnIHx8IGMxWzZdICE9ICdFJyB8fCBjMVs3XSAhPSAnRicpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImttYWxsb2NlZCBibG9jayBhdCAlcCBoYXMgYmVlbiBjb3JydXB0ZWQgKHVuZGVycnVuKSFcbiIsdik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgJTR4OiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4XG4iLCBpKjgsCi0JCQkgICAgICAgICAgICAgICAgYzFbMF0sYzFbMV0sYzFbMl0sYzFbM10sYzFbNF0sYzFbNV0sYzFbNl0sYzFbN10gKTsKLQkJfQotCQljMSArPSA4OwotCX0KLQljMSArPSBzaXplOwotCWZvciAoaSA9IDA7IGkgPCBLTUVNX1NBRkVUWVpPTkU7IGkrKykgewotCQlpZiAoICAgYzFbMF0gIT0gJ00nIHx8IGMxWzFdICE9ICdVJyB8fCBjMVsyXSAhPSAnTicgfHwgYzFbM10gIT0gJ0cnCi0JCSAgICB8fCBjMVs0XSAhPSAnVycgfHwgYzFbNV0gIT0gJ0EnIHx8IGMxWzZdICE9ICdMJyB8fCBjMVs3XSAhPSAnTCcKLQkJICAgKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJrbWFsbG9jZWQgYmxvY2sgYXQgJXAgaGFzIGJlZW4gY29ycnVwdGVkIChvdmVycnVuKTpcbiIsdik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIgJTR4OiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4XG4iLCBpKjgsCi0JCQkgICAgICAgICAgICAgICAgYzFbMF0sYzFbMV0sYzFbMl0sYzFbM10sYzFbNF0sYzFbNV0sYzFbNl0sYzFbN10gKTsKLQkJfQotCQljMSArPSA4OwotCX0KLQlwcmludGsoS0VSTl9JTkZPICJsaW5lICVkICBrZnJlZSglcClcbiIsbGluZSx2KTsKLQl2ID0gKChjaGFyICopdikgLSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKyBLTUVNX1NBRkVUWVpPTkUqOCk7Ci0Ja2ZyZWUodik7Ci19Ci0KLSNkZWZpbmUga21hbGxvYyh4LHkpIGRiZ19rbWFsbG9jKHgseSxfX0xJTkVfXykKLSNkZWZpbmUga2ZyZWUoeCkgZGJnX2tmcmVlKHgsX19MSU5FX18pCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlEYXRhIFN0cnVjdHVyZXMgCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOiAJeDI1X2NoYW5uZWwKLSAqCi0gKiBQdXJwb3NlOglUbyBob2xkIHByaXZhdGUgaW5mb3JtYXRvbiBmb3IgZWFjaCAgCi0gKiAgICAgICAgICAgICAgbG9naWNhbCBjaGFubmVsLgotICoJCQotICogUmF0aW9uYWxlOiAgCVBlci1jaGFubmVsIGRlYnVnZ2luZyBpcyBwb3NzaWJsZSBpZiBlYWNoIAotICogICAgICAgICAgICAgIGNoYW5uZWwgaGFzIGl0cyBvd24gcHJpdmF0ZSBhcmVhLgotICoJCi0gKiBBc3N1bXB0aW9uczoKLSAqCi0gKiBEZXNjcmlwdGlvbjoJVGhpcyBpcyBhbiBleHRlbnRpb24gb2YgdGhlIHN0cnVjdCBuZXRfZGV2aWNlCi0gKiAgICAgICAgICAgICAgd2UgY3JlYXRlIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlIHRvIGtlZXAgCi0gKiAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgWC4yNSBjaGFubmVsLXNwZWNpZmljIGRhdGEuIAotICoKLSAqIENvbnN0cnVjdDoJVHlwZWRlZgotICovCi10eXBlZGVmIHN0cnVjdCB4MjVfY2hhbm5lbAotewotCXdhbnBpcGVfY29tbW9uX3QgY29tbW9uOwkvKiBjb21tb24gYXJlYSBmb3IgeDI1YXBpIGFuZCBzb2NrZXQgKi8KLQljaGFyIG5hbWVbV0FOX0lGTkFNRV9TWisxXTsJLyogaW50ZXJmYWNlIG5hbWUsIEFTQ0lJWiAqLwotCWNoYXIgYWRkcltXQU5fQUREUkVTU19TWisxXTsJLyogbWVkaWEgYWRkcmVzcywgQVNDSUlaICovCi0JdW5zaWduZWQgdHhfcGt0X3NpemU7Ci0JdW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CS8qIGV0aGVydHlwZSwgMCAtIG11bHRpcGxleGVkICovCi0JY2hhciBkcm9wX3NlcXVlbmNlOwkJLyogbWFyayBzZXF1ZW5jZSBmb3IgZHJvcHBpbmcgKi8KLQl1bnNpZ25lZCBsb25nIHN0YXRlX3RpY2s7CS8qIHRpbWUgb2YgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlICovCi0JdW5zaWduZWQgaWRsZV90aW1lb3V0OwkJLyogc2VjLCBiZWZvcmUgZGlzY29ubmVjdGluZyAqLwotCXVuc2lnbmVkIGxvbmcgaV90aW1lb3V0X3NvZmFyOyAgLyogIyBvZiBzZWMncyB3ZSd2ZSBiZWVuIGlkbGUgKi8KLQl1bnNpZ25lZCBob2xkX3RpbWVvdXQ7CQkvKiBzZWMsIGJlZm9yZSByZS1jb25uZWN0aW5nICovCi0JdW5zaWduZWQgbG9uZyB0aWNrX2NvdW50ZXI7CS8qIGNvdW50ZXIgZm9yIHRyYW5zbWl0IHRpbWUgb3V0ICovCi0JY2hhciBkZXZ0aW50OwkJCS8qIFdlYXRoZXIgd2Ugc2hvdWxkIGRldl90aW50KCkgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiogcnhfc2tiOwkJLyogcmVjZWl2ZSBzb2NrZXQgYnVmZmVyICovCi0Jc3RydWN0IHNrX2J1ZmYqIHR4X3NrYjsJCS8qIHRyYW5zbWl0IHNvY2tldCBidWZmZXIgKi8KLQotCWJoX2RhdGFfdCAqYmhfaGVhZDsJICAJICAvKiBDaXJjdWxhciBidWZmZXIgZm9yIHgyNWFwaV9iaCAqLwotCXVuc2lnbmVkIGxvbmcgIHRxX3dvcmtpbmc7Ci0Jdm9sYXRpbGUgaW50ICBiaF93cml0ZTsKLQl2b2xhdGlsZSBpbnQgIGJoX3JlYWQ7Ci0JYXRvbWljX3QgIGJoX2J1ZmZfdXNlZDsKLQotCXNkbGFfdCogY2FyZDsJCQkvKiAtPiBvd25lciAqLwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CQkvKiAtPiBib3VuZCBkZXZjZSAqLwotCi0JaW50IGNoX2lkeDsKLQl1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFg7Ci0JdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBpZnN0YXRzOwkvKiBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2xlbmd0aDsKLQl1bnNpZ25lZCBzaG9ydCB0eF9vZmZzZXQ7Ci0JY2hhciB0cmFuc21pdF9idWZmZXJbWDI1X0NIQU5fTVRVK3NpemVvZih4MjVhcGlfaGRyX3QpXTsKLQotCWlmX3NlbmRfc3RhdF90ICAgaWZfc2VuZF9zdGF0OwotICAgICAgICByeF9pbnRyX3N0YXRfdCAgIHJ4X2ludHJfc3RhdDsKLSAgICAgICAgcGlwZV9tZ210X3N0YXRfdCBwaXBlX21nbXRfc3RhdDsgICAgCi0KLQl1bnNpZ25lZCBsb25nIHJvdXRlcl9zdGFydF90aW1lOyAvKiBSb3V0ZXIgc3RhcnQgdGltZSBpbiBzZWNvbmRzICovCi0JdW5zaWduZWQgbG9uZyByb3V0ZXJfdXBfdGltZTsKLQkKLX0geDI1X2NoYW5uZWxfdDsKLQotLyogRklYTUUgVGFrZSB0aGlzIG91dCAqLwotCi0jaWZkZWYgTkVYX09MRF9DQUxMX0lORk8KLXR5cGVkZWYgc3RydWN0IHgyNV9jYWxsX2luZm8KLXsKLQljaGFyIGRlc3RbMTddOwkJCVBBQ0tFRDsvKiBBU0NJSVogZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCWNoYXIgc3JjWzE3XTsJCQlQQUNLRUQ7LyogQVNDSUlaIHNvdXJjZSBhZGRyZXNzICovCi0JY2hhciBudXNlcjsJCQlQQUNLRUQ7LyogbnVtYmVyIG9mIHVzZXIgZGF0YSBieXRlcyAqLwotCXVuc2lnbmVkIGNoYXIgdXNlclsxMjddOwlQQUNLRUQ7LyogdXNlciBkYXRhICovCi0JY2hhciBuZmFjaWw7CQkJUEFDS0VEOy8qIG51bWJlciBvZiBmYWNpbGl0aWVzICovCi0Jc3RydWN0Ci0JewotCQl1bnNpZ25lZCBjaGFyIGNvZGU7ICAgICBQQUNLRUQ7Ci0JCXVuc2lnbmVkIGNoYXIgcGFybTsgICAgIFBBQ0tFRDsKLQl9IGZhY2lsWzY0XTsJCQkgICAgICAgIC8qIGZhY2lsaXRpZXMgKi8KLX0geDI1X2NhbGxfaW5mb190OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IHgyNV9jYWxsX2luZm8KLXsKLQljaGFyIGRlc3RbTUFYX1gyNV9BRERSX1NJWkVdCQlQQUNLRUQ7LyogQVNDSUlaIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQljaGFyIHNyY1tNQVhfWDI1X0FERFJfU0laRV0JCVBBQ0tFRDsvKiBBU0NJSVogc291cmNlIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBjaGFyIG51c2VyCQkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgdXNlcltNQVhfWDI1X0RBVEFfU0laRV0JUEFDS0VEOy8qIHVzZXIgZGF0YSAqLwotCXVuc2lnbmVkIGNoYXIgbmZhY2lsCQkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZmFjaWxbTUFYX1gyNV9GQUNMX1NJWkVdCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBsY24gICAgICAgICAgICAgCQlQQUNLRUQ7Ci19IHgyNV9jYWxsX2luZm9fdDsKLSNlbmRpZgotCi0KLSAgCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKglQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIAotICogY2FsbGVkIGJ5IHRoZSBXQU4gcm91dGVyIG1vZHVsZS4KLSAqLwotc3RhdGljIGludCB1cGRhdGUoc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldik7Ci1zdGF0aWMgaW50IG5ld19pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgIHdhbmlmX2NvbmZfdCogY29uZik7Ci1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbSAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfY29tbV9zaHV0ZG93bihzZGxhX3QgKmNhcmQpOwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICoJV0FOUElQRS1zcGVjaWZpYyBlbnRyeSBwb2ludHMgCi0gKi8KLXN0YXRpYyBpbnQgd3B4X2V4ZWMgKHN0cnVjdCBzZGxhKiBjYXJkLCB2b2lkKiB1X2NtZCwgdm9pZCogdV9kYXRhKTsKLXN0YXRpYyB2b2lkIHgyNWFwaV9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgeDI1YXBpX2JoX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGJoX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqIAlOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgCi0gKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCXVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmKiBza2IpOwotc3RhdGljIGludCBpZl9zZW5kKHN0cnVjdCBza19idWZmKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLQotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqIAlJbnRlcnJ1cHQgaGFuZGxlcnMgCi0gKi8KLXN0YXRpYyB2b2lkIHdweF9pc3IJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHJ4X2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHR4X2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHN0YXR1c19pbnRyCShzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBldmVudF9pbnRyCShzZGxhX3QgKik7Ci1zdGF0aWMgdm9pZCBzcHVyX2ludHIJKHNkbGFfdCAqKTsKLXN0YXRpYyB2b2lkIHRpbWVyX2ludHIgIChzZGxhX3QgKik7Ci0KLXN0YXRpYyBpbnQgdHhfaW50cl9zZW5kKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm1vdmVfZGV2X3RvX25leHQoc2RsYV90ICpjYXJkLAotCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKLSAqCUJhY2tncm91bmQgcG9sbGluZyByb3V0aW5lcyAKLSAqLwotc3RhdGljIHZvaWQgd3B4X3BvbGwgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCBwb2xsX2Rpc2Nvbm5lY3RlZCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHBvbGxfY29ubmVjdGluZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHBvbGxfYWN0aXZlIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIHZvaWQgdHJpZ2dlcl94MjVfcG9sbChzZGxhX3QgKmNhcmQpOwotc3RhdGljIHZvaWQgeDI1X3RpbWVyX3JvdXRpbmUodW5zaWduZWQgbG9uZyBkYXRhKTsKLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKglYLjI1IGZpcm13YXJlIGludGVyZmFjZSBmdW5jdGlvbnMgCi0gKi8KLXN0YXRpYyBpbnQgeDI1X2dldF92ZXJzaW9uIChzZGxhX3QqIGNhcmQsIGNoYXIqIHN0cik7Ci1zdGF0aWMgaW50IHgyNV9jb25maWd1cmUgKHNkbGFfdCogY2FyZCwgVFgyNUNvbmZpZyogY29uZik7Ci1zdGF0aWMgaW50IGhkbGNfY29uZmlndXJlIChzZGxhX3QqIGNhcmQsIFRYMjVDb25maWcqIGNvbmYpOwotc3RhdGljIGludCBzZXRfaGRsY19sZXZlbCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X2dldF9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9nZXRfc3RhdHMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIGludCBtb2RlKTsKLXN0YXRpYyBpbnQgeDI1X2Nsb3NlX2hkbGMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9vcGVuX2hkbGMgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgaW50IHgyNV9zZXR1cF9oZGxjIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB4MjVfc2V0X2R0ciAoc2RsYV90KiBjYXJkLCBpbnQgZHRyKTsKLXN0YXRpYyBpbnQgeDI1X2dldF9jaGFuX2NvbmYgKHNkbGFfdCogY2FyZCwgeDI1X2NoYW5uZWxfdCogY2hhbik7Ci1zdGF0aWMgaW50IHgyNV9wbGFjZV9jYWxsIChzZGxhX3QqIGNhcmQsIHgyNV9jaGFubmVsX3QqIGNoYW4pOwotc3RhdGljIGludCB4MjVfYWNjZXB0X2NhbGwgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IHFkbSk7Ci1zdGF0aWMgaW50IHgyNV9jbGVhcl9jYWxsIChzZGxhX3QqIGNhcmQsIGludCBsY24sIGludCBjYXVzZSwgaW50IGRpYWduKTsKLXN0YXRpYyBpbnQgeDI1X3NlbmQgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IHFkbSwgaW50IGxlbiwgdm9pZCogYnVmKTsKLXN0YXRpYyBpbnQgeDI1X2ZldGNoX2V2ZW50cyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgeDI1X2Vycm9yIChzZGxhX3QqIGNhcmQsIGludCBlcnIsIGludCBjbWQsIGludCBsY24pOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICoJWC4yNSBhc3luY2hyb25vdXMgZXZlbnQgaGFuZGxlcnMgCi0gKi8KLXN0YXRpYyBpbnQgaW5jb21pbmdfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpOwotc3RhdGljIGludCBjYWxsX2FjY2VwdGVkIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYik7Ci1zdGF0aWMgaW50IGNhbGxfY2xlYXJlZCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpOwotc3RhdGljIGludCB0aW1lb3V0X2V2ZW50IChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYik7Ci1zdGF0aWMgaW50IHJlc3RhcnRfZXZlbnQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKTsKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAotICoJTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgCi0gKi8KLXN0YXRpYyBpbnQgY29ubmVjdCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgZGlzY29ubmVjdCAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSogZ2V0X2Rldl9ieV9sY24oc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiwKLQkJCQkJIHVuc2lnbmVkIGxjbik7Ci1zdGF0aWMgaW50IGNoYW5fY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgY2hhbl9kaXNjKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotc3RhdGljIHZvaWQgc2V0X2NoYW5fc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgaW50IHN0YXRlKTsKLXN0YXRpYyBpbnQgY2hhbl9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQqIGJ1ZmYsIHVuc2lnbmVkIGRhdGFfbGVuLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgdHhfaW50cik7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBicHNfdG9fc3BlZWRfY29kZSAodW5zaWduZWQgbG9uZyBicHMpOwotc3RhdGljIHVuc2lnbmVkIGludCBkZWNfdG9fdWludCAodW5zaWduZWQgY2hhciogc3RyLCBpbnQgbGVuKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGV4X3RvX3VpbnQgKHVuc2lnbmVkIGNoYXIqLCBpbnQpOwotc3RhdGljIHZvaWQgcGFyc2VfY2FsbF9pbmZvICh1bnNpZ25lZCBjaGFyKiwgeDI1X2NhbGxfaW5mb190Kik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmZpbmRfY2hhbm5lbChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxjbik7Ci1zdGF0aWMgdm9pZCBiaW5kX2xjbl90b19kZXYoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsY24pOwotc3RhdGljIHZvaWQgc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsZW4pOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKiAgICAgIFgyNSBBUEkgRnVuY3Rpb25zIAotICovCi1zdGF0aWMgaW50IHdhbnBpcGVfcHVsbF9kYXRhX2luX3NrYihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICoqKTsKLXN0YXRpYyB2b2lkIHRpbWVyX2ludHJfZXhlYyhzZGxhX3QgKiwgdW5zaWduZWQgY2hhcik7Ci1zdGF0aWMgaW50IGV4ZWN1dGVfZGVsYXllZF9jbWQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIG1ib3hfY21kX3QgKnVzcl9jbWQsIGNoYXIgYmFkX2NtZCk7Ci1zdGF0aWMgaW50IGFwaV9pbmNvbWluZ19jYWxsIChzZGxhX3QqLCBUWDI1TWJveCAqLCBpbnQpOwotc3RhdGljIGludCBhbGxvY19hbmRfaW5pdF9za2JfYnVmIChzZGxhX3QgKixzdHJ1Y3Qgc2tfYnVmZiAqKiwgaW50KTsKLXN0YXRpYyB2b2lkIHNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgVFgyNU1ib3gqIG1ib3gpOwotc3RhdGljIGludCBjbGVhcl9jb25maXJtX2V2ZW50IChzZGxhX3QgKiwgVFgyNU1ib3gqKTsKLXN0YXRpYyB2b2lkIHNlbmRfb29iX21zZyAoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBUWDI1TWJveCAqbWJveCk7Ci1zdGF0aWMgaW50IHRpbWVyX2ludHJfY21kX2V4ZWMoc2RsYV90ICpjYXJkKTsKLXN0YXRpYyB2b2lkIGFwaV9vb2JfZXZlbnQgKHNkbGFfdCAqY2FyZCxUWDI1TWJveCAqbWJveCk7Ci1zdGF0aWMgaW50IGNoZWNrX2JhZF9jb21tYW5kKHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGNoYW5uZWxfZGlzY29ubmVjdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgaGRsY19saW5rX2Rvd24gKHNkbGFfdCopOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICBYUElQRU1PTiBGdW5jdGlvbnMKLSAqLwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKik7Ci1zdGF0aWMgaW50IHVkcF9wa3RfdHlwZSggc3RydWN0IHNrX2J1ZmYgKiwgc2RsYV90Kik7Ci1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOyAKLXN0YXRpYyB2b2lkIGluaXRfeDI1X2NoYW5uZWxfc3RydWN0KCB4MjVfY2hhbm5lbF90ICopOwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90ICopOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoaW50IHVkcF90eXBlLCBjaGFyIHVkcF9wa3Rfc3JjLCBzZGxhX3QgKmNhcmQsCi0JCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxjbik7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqLCBpbnQpOwotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICoJSVBYIGZ1bmN0aW9ucyAKLSAqLwotc3RhdGljIHZvaWQgc3dpdGNoX25ldF9udW1iZXJzKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Ci1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqLCBjaGFyICosIHVuc2lnbmVkIGNoYXIgLCAKLQkJCSB1bnNpZ25lZCBsb25nICwgdW5zaWduZWQgc2hvcnQgKTsKLQotZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKLQotc3RhdGljIHZvaWQgUzUwOF9TNTE0X2xvY2soc2RsYV90ICosIHVuc2lnbmVkIGxvbmcgKik7Ci1zdGF0aWMgdm9pZCBTNTA4X1M1MTRfdW5sb2NrKHNkbGFfdCAqLCB1bnNpZ25lZCBsb25nICopOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCi0gKiAJR2xvYmFsIFZhcmlhYmxlcyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKglQdWJsaWMgRnVuY3Rpb25zIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB3cHhfaW5pdDoJWC4yNSBQcm90b2NvbCBJbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqIFB1cnBvc2U6CVRvIGluaXRpYWxpemUgdGhlIHByb3RvY29sL2Zpcm13YXJlLgotICogCi0gKiBSYXRpb25hbGU6CVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHNldHVwKCkgZnVuY3Rpb24sIGluCi0gKiAgICAgICAgICAgICAgc2RsYW1haW4uYywgdG8gZHluYW1pY2FsbHkgc2V0dXAgdGhlIHgyNSBwcm90b2NvbC4KLSAqCQlUaGlzIGlzIHRoZSBmaXJzdCBwcm90b2NvbCBzcGVjaWZpYyBmdW5jdGlvbiwgd2hpY2gKLSAqICAgICAgICAgICAgICBleGVjdXRlcyBvbmNlIG9uIHN0YXJ0dXAuCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOglUaGlzIHByb2NlZHVyZSBpbml0aWFsaXplcyB0aGUgeDI1IGZpcm13YXJlIGFuZAotICogICAgCQlzZXRzIHVwIHRoZSBtYWlsYm94LCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIKLSAqICAgICAgICAgICAgICBwb2ludGVycy4gSXQgYWxzbyBpbml0aWFsaXplcyBhbGwgZGVidWdnaW5nIHN0cnVjdHVyZXMKLSAqICAgICAgICAgICAgICBhbmQgc2V0cyB1cCB0aGUgWDI1IGVudmlyb25tZW50LgotICoKLSAqCQlTZXRzIHVwIGhhcmR3YXJlIG9wdGlvbnMgZGVmaW5lZCBieSB1c2VyIGluIFt3YW5waXBlI10gCi0gKgkJc2VjdGlvbiBvZiB3YW5waXBlIy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4gCi0gKgotICogCQlBdCB0aGlzIHBvaW50IGFkYXB0ZXIgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCAKLSAqICAgICAgCWFuZCBYLjI1IGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgCQlvIHJlYWQgZmlybXdhcmUgdmVyc2lvbiAodG8gbWFrZSBzdXJlIGl0J3MgYWxpdmUpCi0gKiAgCQlvIGNvbmZpZ3VyZSBhZGFwdGVyCi0gKiAgCQlvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSAKLSAqICAgICAgICAgICAgICAgIGFkYXB0ZXIgZGF0YSBzcGFjZS4KLSAqCi0gKiBDYWxsZWQgYnk6CXNldHVwKCkgZnVuY3Rpb24gaW4gc2RsYW1haW4uYwotICoKLSAqIEFzc3VtcHRpb25zOglOb25lCi0gKgotICogV2FybmluZ3M6CU5vbmUKLSAqCi0gKiBSZXR1cm46IAkwCW8uay4KLSAqCSAJPCAwCWZhaWx1cmUuCi0gKi8KLQotaW50IHdweF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpCi17Ci0JdW5pb257Ci0JCWNoYXIgc3RyWzgwXTsKLQkJVFgyNUNvbmZpZyBjZmc7Ci0JfSB1OwotCi0JLyogVmVyaWZ5IGNvbmZpZ3VyYXRpb24gSUQgKi8KLQlpZiAoY29uZi0+Y29uZmlnX2lkICE9IFdBTkNPTkZJR19YMjUpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBjb25maWd1cmF0aW9uIElEICV1IVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNvbmYtPmNvbmZpZ19pZCkKLQkJOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHByb3RvY29sLXNwZWNpZmljIGZpZWxkcyAqLwotCWNhcmQtPm1ib3ggID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgWDI1X01CT1hfT0ZGUyk7Ci0JY2FyZC0+cnhtYiAgPSAodm9pZCopKGNhcmQtPmh3LmRwbWJhc2UgKyBYMjVfUlhNQk9YX09GRlMpOwotCWNhcmQtPmZsYWdzID0gKHZvaWQqKShjYXJkLT5ody5kcG1iYXNlICsgWDI1X1NUQVRVU19PRkZTKTsKLQotCS8qIEluaXRpYWxpemUgZm9yIFM1MTQgQ2FyZCAqLwotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7Ci0JCWNhcmQtPm1ib3ggKz0gWDI1X01CX1ZFQ1RPUjsKLQkJY2FyZC0+ZmxhZ3MgKz0gWDI1X01CX1ZFQ1RPUjsKLQkJY2FyZC0+cnhtYiArPSBYMjVfTUJfVkVDVE9SOwotCX0KLQotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0JaWYgKHgyNV9nZXRfdmVyc2lvbihjYXJkLCBOVUxMKSB8fCB4MjVfZ2V0X3ZlcnNpb24oY2FyZCwgdS5zdHIpKQotCQlyZXR1cm4gLUVJTzsKLQotCi0JLyogWDI1IGZpcm13YXJlIGNhbiBydW4gZXRoZXIgaW4gWDI1IG9yIExBUEIgSERMQyBtb2RlLgotICAgICAgICAgKiBDaGVjayB0aGUgdXNlciBkZWZpbmVkIG9wdGlvbiBhbmQgY29uZmlndXJlIGFjY29yZGluZ2x5ICovCi0JaWYgKGNvbmYtPnUueDI1LkxBUEJfaGRsY19vbmx5ID09IFdBTk9QVF9ZRVMpewotCQlpZiAoc2V0X2hkbGNfbGV2ZWwoY2FyZCkgIT0gQ01EX09LKXsKLQkJCXJldHVybiAtRUlPOwkKLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcnVubmluZyBMQVBfQiBIRExDIGZpcm13YXJlIHYlc1xuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCB1LnN0cik7Ci0JCX0KLQkJY2FyZC0+dS54LkxBUEJfaGRsYyA9IDE7Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBydW5uaW5nIFguMjUgZmlybXdhcmUgdiVzXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIHUuc3RyKTsKLQkJY2FyZC0+dS54LkxBUEJfaGRsYyA9IDA7Ci0JfQotCi0JLyogQ29uZmlndXJlIGFkYXB0ZXIuIEhlcmUgd2Ugc2V0IHJlc29uYWJsZSBkZWZhdWx0cywgdGhlbiBwYXJzZQotCSAqIGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBhbmQgc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KLQkgKiBNb3N0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdmVyaWZpZWQgYW5kIGNvcnJlY3RlZCAoaWYKLQkgKiBuZWNlc3NhcnkpIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gdGhlIGFkYXB0ZXIgdG8gZG8gc28uCi0JICovCi0JbWVtc2V0KCZ1LmNmZywgMCwgc2l6ZW9mKHUuY2ZnKSk7Ci0JdS5jZmcudDEJCT0gMzsKLQl1LmNmZy5uMgkJPSAxMDsKLQl1LmNmZy5hdXRvSGRsYwkJPSAxOwkJLyogYXV0b21hdGljIEhETEMgY29ubmVjdGlvbiAqLwotCXUuY2ZnLmhkbGNXaW5kb3cJPSA3OwotCXUuY2ZnLnBrdFdpbmRvdwkJPSAyOwotCXUuY2ZnLnN0YXRpb24JCT0gMTsJCS8qIERURSAqLwotCXUuY2ZnLm9wdGlvbnMJCT0gMHgwMDkwOwkvKiBkaXNhYmxlIEQtYml0IHByYWdtYXRpY3MgKi8KLQl1LmNmZy5jY2l0dENvbXBhdAk9IDE5ODg7Ci0JdS5jZmcudDEwdDIwCQk9IDMwOwotCXUuY2ZnLnQxMXQyMQkJPSAzMDsKLQl1LmNmZy50MTJ0MjIJCT0gMzA7Ci0JdS5jZmcudDEzdDIzCQk9IDMwOwotCXUuY2ZnLnQxNnQyNgkJPSAzMDsKLQl1LmNmZy50MjgJCT0gMzA7Ci0JdS5jZmcucjEwcjIwCQk9IDU7Ci0JdS5jZmcucjEycjIyCQk9IDU7Ci0JdS5jZmcucjEzcjIzCQk9IDU7Ci0JdS5jZmcucmVzcG9uc2VPcHQJPSAxOwkJLyogUlIncyBhZnRlciBldmVyeSBwYWNrZXQgKi8KLQotCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJdS5jZmcuaGRsY01UVSA9IDEwMjc7Ci0JfQotCi0JaWYgKGNvbmYtPnUueDI1LngyNV9jb25mX29wdCl7Ci0JCXUuY2ZnLm9wdGlvbnMgPSBjb25mLT51LngyNS54MjVfY29uZl9vcHQ7Ci0JfQotCi0JaWYgKGNvbmYtPmNsb2NraW5nICE9IFdBTk9QVF9FWFRFUk5BTCkKLQkJdS5jZmcuYmF1ZFJhdGUgPSBicHNfdG9fc3BlZWRfY29kZShjb25mLT5icHMpOwotCi0JaWYgKGNvbmYtPnN0YXRpb24gIT0gV0FOT1BUX0RURSl7Ci0JCXUuY2ZnLnN0YXRpb24gPSAwOwkJLyogRENFIG1vZGUgKi8KLQl9Ci0KLSAgICAgICAgaWYgKGNvbmYtPmludGVyZmFjZSAhPSBXQU5PUFRfUlMyMzIgKXsKLQkgICAgICAgIHUuY2ZnLmhkbGNPcHRpb25zIHw9IDB4ODA7ICAgICAgLyogVjM1IG1vZGUgKi8KLQl9IAotCi0JLyogYWRqdXN0IE1UVSAqLwotCWlmICghY29uZi0+bXR1IHx8IChjb25mLT5tdHUgPj0gMTAyNCkpCi0JCWNhcmQtPndhbmRldi5tdHUgPSAxMDI0OwotCWVsc2UgaWYgKGNvbmYtPm10dSA+PSA1MTIpCi0JCWNhcmQtPndhbmRldi5tdHUgPSA1MTI7Ci0JZWxzZSBpZiAoY29uZi0+bXR1ID49IDI1NikKLQkJY2FyZC0+d2FuZGV2Lm10dSA9IDI1NjsKLQllbHNlIGlmIChjb25mLT5tdHUgPj0gMTI4KQotCQljYXJkLT53YW5kZXYubXR1ID0gMTI4OwotCWVsc2UgCi0JCWNhcmQtPndhbmRldi5tdHUgPSA2NDsKLQotCXUuY2ZnLmRlZlBrdFNpemUgPSB1LmNmZy5wa3RNVFUgPSBjYXJkLT53YW5kZXYubXR1OwotCi0JaWYgKGNvbmYtPnUueDI1LmhpX3B2Yyl7Ci0JCWNhcmQtPnUueC5oaV9wdmMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LmhpX3B2YywgTUFYX0xDTl9OVU0pOwotCQljYXJkLT51LngubG9fcHZjID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5sb19wdmMsIGNhcmQtPnUueC5oaV9wdmMpOwotCX0KLQotCWlmIChjb25mLT51LngyNS5oaV9zdmMpewotCQljYXJkLT51LnguaGlfc3ZjID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5oaV9zdmMsIE1BWF9MQ05fTlVNKTsKLQkJY2FyZC0+dS54LmxvX3N2YyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUubG9fc3ZjLCBjYXJkLT51LnguaGlfc3ZjKTsKLQl9Ci0KLQkvKiBGaWd1cmUgb3V0IHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhbm5lbHMgdG8gY29uZmlndXJlICovCi0JY2FyZC0+dS54Lm51bV9vZl9jaCA9IDA7Ci0JaWYgKGNhcmQtPnUueC5oaV9zdmMgIT0gMCl7Ci0JCWNhcmQtPnUueC5udW1fb2ZfY2ggPSAoY2FyZC0+dS54LmhpX3N2YyAtIGNhcmQtPnUueC5sb19zdmMpICsgMTsKLQl9Ci0JaWYgKGNhcmQtPnUueC5oaV9wdmMgIT0gMCl7Ci0JCWNhcmQtPnUueC5udW1fb2ZfY2ggKz0gKGNhcmQtPnUueC5oaV9wdmMgLSBjYXJkLT51LngubG9fcHZjKSArIDE7Ci0JfQotCi0JaWYgKGNhcmQtPnUueC5udW1fb2ZfY2ggPT0gMCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiwgTWluaW11bSBudW1iZXIgb2YgUFZDL1NWQyBjaGFubmVscyBpcyAxICFcbiIKLQkJCQkgIiVzOiBQbGVhc2Ugc2V0IHRoZSBMb3dlc3QvSGlnaGVzdCBQVkMvU1ZDIHZhbHVlcyAhXG4iLAotCQkJCSBjYXJkLT5kZXZuYW1lLGNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVDSFJORzsKLQl9Ci0JCi0JdS5jZmcubG9QVkMgPSBjYXJkLT51LngubG9fcHZjOwotCXUuY2ZnLmhpUFZDID0gY2FyZC0+dS54LmhpX3B2YzsKLQl1LmNmZy5sb1R3b1dheVNWQyA9IGNhcmQtPnUueC5sb19zdmM7Ci0JdS5jZmcuaGlUd29XYXlTVkMgPSBjYXJkLT51LnguaGlfc3ZjOwotCi0JaWYgKGNvbmYtPnUueDI1LmhkbGNfd2luZG93KQotCQl1LmNmZy5oZGxjV2luZG93ID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5oZGxjX3dpbmRvdywgNyk7Ci0JaWYgKGNvbmYtPnUueDI1LnBrdF93aW5kb3cpCi0JCXUuY2ZnLnBrdFdpbmRvdyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUucGt0X3dpbmRvdywgNyk7Ci0KLQlpZiAoY29uZi0+dS54MjUudDEpCi0JCXUuY2ZnLnQxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MSwgMzApOwotCWlmIChjb25mLT51LngyNS50MikKLQkJdS5jZmcudDIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQyLCAyOSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQ0KQotCQl1LmNmZy50NCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDQsIDI0MCk7Ci0JaWYgKGNvbmYtPnUueDI1Lm4yKQotCQl1LmNmZy5uMiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUubjIsIDMwKTsKLQotCWlmIChjb25mLT51LngyNS50MTBfdDIwKQotCQl1LmNmZy50MTB0MjAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQxMF90MjAsMjU1KTsKLQlpZiAoY29uZi0+dS54MjUudDExX3QyMSkKLQkJdS5jZmcudDExdDIxID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MTFfdDIxLDI1NSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQxMl90MjIpCi0JCXUuY2ZnLnQxMnQyMiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDEyX3QyMiwyNTUpOwotCWlmIChjb25mLT51LngyNS50MTNfdDIzKQkKLQkJdS5jZmcudDEzdDIzID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS50MTNfdDIzLDI1NSk7Ci0JaWYgKGNvbmYtPnUueDI1LnQxNl90MjYpCi0JCXUuY2ZnLnQxNnQyNiA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUudDE2X3QyNiwgMjU1KTsKLQlpZiAoY29uZi0+dS54MjUudDI4KQotCQl1LmNmZy50MjggPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnQyOCwgMjU1KTsKLQotCWlmIChjb25mLT51LngyNS5yMTBfcjIwKQotCQl1LmNmZy5yMTByMjAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPnUueDI1LnIxMF9yMjAsMjUwKTsKLQlpZiAoY29uZi0+dS54MjUucjEyX3IyMikKLQkJdS5jZmcucjEycjIyID0gbWluX3QodW5zaWduZWQgaW50LCBjb25mLT51LngyNS5yMTJfcjIyLDI1MCk7Ci0JaWYgKGNvbmYtPnUueDI1LnIxM19yMjMpCi0JCXUuY2ZnLnIxM3IyMyA9IG1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+dS54MjUucjEzX3IyMywyNTApOwotCi0KLQlpZiAoY29uZi0+dS54MjUuY2NpdHRfY29tcGF0KQotCQl1LmNmZy5jY2l0dENvbXBhdCA9IGNvbmYtPnUueDI1LmNjaXR0X2NvbXBhdDsKLQotCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLwotCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJaWYgKGhkbGNfY29uZmlndXJlKGNhcmQsICZ1LmNmZykgIT0gQ01EX09LKQotCQkJcmV0dXJuIC1FSU87Ci0JfWVsc2V7Ci0JCWlmICh4MjVfY29uZmlndXJlKGNhcmQsICZ1LmNmZykgIT0gQ01EX09LKQotCQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKCh4MjVfY2xvc2VfaGRsYyhjYXJkKSAhPSBDTURfT0spIHx8CQkvKiBjbG9zZSBIRExDIGxpbmsgKi8KLQkgICAgKHgyNV9zZXRfZHRyKGNhcmQsIDApICE9IENNRF9PSykpCQkvKiBkcm9wIERUUiAqLwotCQlyZXR1cm4gLUVJTzsKLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCWNhcmQtPndhbmRldi5icHMJPSBjb25mLT5icHM7Ci0JY2FyZC0+d2FuZGV2LmludGVyZmFjZQk9IGNvbmYtPmludGVyZmFjZTsKLQljYXJkLT53YW5kZXYuY2xvY2tpbmcJPSBjb25mLT5jbG9ja2luZzsKLQljYXJkLT53YW5kZXYuc3RhdGlvbgk9IGNvbmYtPnN0YXRpb247Ci0JY2FyZC0+aXNyCQk9ICZ3cHhfaXNyOwotCWNhcmQtPnBvbGwJCT0gTlVMTDsgLy8md3B4X3BvbGw7Ci0JY2FyZC0+ZGlzYWJsZV9jb21tCT0gJmRpc2FibGVfY29tbTsKLQljYXJkLT5leGVjCQk9ICZ3cHhfZXhlYzsKLQljYXJkLT53YW5kZXYudXBkYXRlCT0gJnVwZGF0ZTsKLQljYXJkLT53YW5kZXYubmV3X2lmCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCT0gJmRlbF9pZjsKLQotCS8qIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gY2Fubm90IGV4aXQgd2l0aCBhbiBlcnJvcgotCSAqICAgICAgICAgIGFmdGVyIHRoZSBjaGFuZ2Ugb2Ygc3RhdGUgKi8KLQljYXJkLT53YW5kZXYuc3RhdGUJPSBXQU5fRElTQ09OTkVDVEVEOwotCQotCWNhcmQtPndhbmRldi5lbmFibGVfdHhfaW50ID0gMDsKLQljYXJkLT5pcnFfZGlzX2lmX3NlbmRfY291bnQgPSAwOwotICAgICAgICBjYXJkLT5pcnFfZGlzX3BvbGxfY291bnQgPSAwOwotCWNhcmQtPnUueC50eF9kZXYgPSBOVUxMOwotCWNhcmQtPnUueC5ub19kZXYgPSAwOwotCi0KLQkvKiBDb25maWd1cmUgZm9yIFM1MTQgUENJIENhcmQgKi8KLQlpZiAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpIHsKLQkJY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyA9IAotCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikKLQkJCQkoY2FyZC0+aHcuZHBtYmFzZSArIFgyNV9NQl9WRUNUT1IrIFgyNV9NSVNDX0hETENfQklUUyk7Ci0JfWVsc2V7Ci0JCWNhcmQtPnUueC5oZGxjX2J1Zl9zdGF0dXMgPSAKLQkJCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGNhcmQtPmh3LmRwbWJhc2UgKyBYMjVfTUlTQ19IRExDX0JJVFMpOyAKLQl9Ci0KLQljYXJkLT51LngucG9sbF9kZXZpY2U9TlVMTDsKLQljYXJkLT53YW5kZXYudWRwX3BvcnQgPSBjb25mLT51ZHBfcG9ydDsKLQotCS8qIEVuYWJsZSBvciBkaXNhYmxlIGNhbGwgc2V0dXAgbG9nZ2luZyAqLwotCWlmIChjb25mLT51LngyNS5sb2dnaW5nID09IFdBTk9QVF9ZRVMpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRW5hYmxpbmcgQ2FsbCBMb2dnaW5nLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQljYXJkLT51LngubG9nZ2luZyA9IDE7Ci0JfWVsc2V7CQotCQljYXJkLT51LngubG9nZ2luZyA9IDA7Ci0JfQotCi0JLyogRW5hYmxlIG9yIGRpc2FibGUgbW9kZW0gc3RhdHVzIHJlcG9ydGluZyAqLwotCWlmIChjb25mLT51LngyNS5vb2Jfb25fbW9kZW0gPT0gV0FOT1BUX1lFUyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbmFibGluZyBPT0Igb24gTW9kZW0gY2hhbmdlLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQljYXJkLT51Lngub29iX29uX21vZGVtID0gMTsKLQl9ZWxzZXsKLQkJY2FyZC0+dS54Lm9vYl9vbl9tb2RlbSA9IDA7Ci0JfQotCQotCWluaXRfZ2xvYmFsX3N0YXRpc3RpY3MoY2FyZCk7CQotCi0JSU5JVF9XT1JLKCZjYXJkLT51LngueDI1X3BvbGxfd29yaywgKHZvaWQgKil3cHhfcG9sbCwgY2FyZCk7Ci0KLQlpbml0X3RpbWVyKCZjYXJkLT51LngueDI1X3RpbWVyKTsKLQljYXJkLT51LngueDI1X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljYXJkOwotCWNhcmQtPnUueC54MjVfdGltZXIuZnVuY3Rpb24gPSB4MjVfdGltZXJfcm91dGluZTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCVdBTiBEZXZpY2UgRHJpdmVyIEVudHJ5IFBvaW50cyAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJdXBkYXRlKCksICBVcGRhdGUgZGV2aWNlIHN0YXR1cyAmIHN0YXRpc3RpY3MuCi0gKgotICogUHVycG9zZToJVG8gcHJvdmlkZSBkZWJ1Z2dpbmcgYW5kIHN0YXRpdGljYWwKLSAqICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uCi0gKiAgICAgICAgICAgICAgL3Byb2MvbmV0L3dhbnJvdXRlci93YW5waXBlIwotICogICAgICAgICAgICAgIAkKLSAqIFJhdGlvbmFsZToJVGhlIC9wcm9jIGZpbGUgc3lzdGVtIGlzIHVzZWQgdG8gY29sbGVjdAotICogICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBrZXJuZWwgYW5kIGRyaXZlcnMuCi0gKiAgICAgICAgICAgICAgVXNpbmcgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIHRoZSB1c2VyCi0gKiAgICAgICAgICAgICAgY2FuIHNlZSBleGFjdGx5IHdoYXQgdGhlIHNhbmdvbWEgZHJpdmVycyBhcmUKLSAqICAgICAgICAgICAgICBkb2luZy4gQW5kIGluIHdoYXQgc3RhdGUgdGhleSBhcmUgaW4uIAotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjogQ29sbGVjdCBhbGwgZHJpdmVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uCi0gKiAgICAgICAgICAgICAgYW5kIHBhc3MgaXQgdG8gdGhlIHRvcCBsYXl3ZXIuIAotICoJCQotICoJCVNpbmNlIHdlIGhhdmUgdG8gZXhlY3V0ZSBhIGRlYnVnZ2luZyBjb21tYW5kLCAKLSAqICAgICAgICAgICAgICB0byBvYnRhaW4gZmlybXdhcmUgc3RhdGl0aWNzLCB3ZSB0cmlnZ2VyIGEgCi0gKiAgICAgICAgICAgICAgVVBEQVRFIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdGltZXIgaW50ZXJydHVwLgotICogICAgICAgICAgICAgIFdlIHdhaXQgdW50aWwgdGhlIHRpbWVyIHVwZGF0ZSBpcyBjb21wbGV0ZS4KLSAqICAgICAgICAgICAgICBPbmNlIGNvbXBsZXRlIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgcmV0dXJuCi0gKiAgICAgICAgICAgICAgY29kZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwuCi0gKiAgICAgICAgICAgICAgCi0gKiBDYWxsZWQgYnk6CWRldmljZV9zdGF0KCkgaW4gd2FubWFpbi5jCi0gKgotICogQXNzdW1wdGlvbnM6CQotICoKLSAqIFdhcm5pbmdzOglUaGlzIGZ1bmN0aW9uIHdpbGwgZGVncmFkZSB0aGUgcGVyZm9ybWFuY2UKLSAqICAgICAgICAgICAgICBvZiB0aGUgcm91dGVyLCBzaW5jZSBpdCB1c2VzIHRoZSBtYWlsYm94LiAKLSAqCi0gKiBSZXR1cm46IAkwIAlPSwotICogCQk8MAlGYWlsZWQgKG9yIGJ1c3kpLgotICovCi0KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jdm9sYXRpbGUgc2RsYV90KiBjYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAod2FuZGV2LT5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmd2FuZGV2LT5jcml0aWNhbCkpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JaWYgKCF3YW5kZXYtPmRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JCi0JY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQlzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCXN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9USU1FUjsKLQl0aW1lb3V0ID0gamlmZmllczsJCi0KLQlmb3IgKDs7KXsKLQkJaWYgKCEoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VQREFURSkpewkKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQgKyAxKkhaKSl7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9VUERBVEU7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6CW5ld19pZgotICoKLSAqIFB1cnBvc2U6CVRvIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHJlc291cmNlcyBmb3IgYSAKLSAqICAgICAgICAgICAgICBuZXcgbG9naWNhbCBjaGFubmVsLiAgCi0gKiAKLSAqIFJhdGlvbmFsZToJQSBuZXcgY2hhbm5lbCBjYW4gYmUgYWRkZWQgZHluYW1pY2FsbHkgdmlhCi0gKiAgICAgICAgICAgICAgaW9jdGwgY2FsbC4KLSAqICAgICAgICAgICAgICAgIAotICogRGVzY3JpcHRpb246CUFsbG9jYXRlIGEgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSwgeDI1X2NoYW5uZWxfdC4KLSAqCQlQYXJzZSB0aGUgdXNlciBpbnRlcmZhY2Ugb3B0aW9ucyBmcm9tIHdhbnBpcGUjLmNvbmYgCi0gKgkJY29uZmlndXJhdGlvbiBmaWxlLiAKLSAqCQlCaW5kIHRoZSBwcml2YXRlIGFyZSBpbnRvIHRoZSBuZXR3b3JrIGRldmljZSBwcml2YXRlCi0gKiAgICAgICAgICAgICAgYXJlYSBwb2ludGVyIChkZXYtPnByaXYpLgotICoJCVByZXBhcmUgdGhlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0cmF0aW9uLgotICoKLSAqIENhbGxlZCBieToJUk9VVEVSX0lGTkVXIElvY3RsIGNhbGwsIGZyb20gd2Fucm91dGVyX2lvY3RsKCkgCi0gKiAgICAgICAgICAgICAgKHdhbm1haW4uYykKLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoKLSAqIFdhcm5pbmdzOglOb25lCi0gKgotICogUmV0dXJuOiAJMCAJT2sKLSAqCQk8MCAJRmFpbGVkIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZCA9IHdhbmRldi0+cHJpdmF0ZTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuOwotCWludCBlcnIgPSAwOwotCi0JaWYgKChjb25mLT5uYW1lWzBdID09ICdcMCcpIHx8IChzdHJsZW4oY29uZi0+bmFtZSkgPiBXQU5fSUZOQU1FX1NaKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGludGVyZmFjZSBuYW1lIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihjYXJkLT53YW5kZXYubmV3X2lmX2NudCsrID4gMCAmJiBjYXJkLT51LnguTEFQQl9oZGxjKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvcjogUnVubmluZyBMQVBCIEhETEMgTW9kZSAhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IE1heGltdW0gbnVtYmVyIG9mIG5ldHdvcmsgaW50ZXJmYWNlcyBtdXN0IGJlIG9uZSAhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwotCWNoYW4gPSBrbWFsbG9jKHNpemVvZih4MjVfY2hhbm5lbF90KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGNoYW4gPT0gTlVMTCl7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkKLQltZW1zZXQoY2hhbiwgMCwgc2l6ZW9mKHgyNV9jaGFubmVsX3QpKTsKLQotCS8qIEJ1ZyBGaXg6IFNlZyBFcnIgb24gUFZDIHN0YXJ0dXAKLQkgKiBJdCBtdXN0IGJlIGhlcmUgc2luY2UgYmluZF9sY25fdG9fZGV2IGV4cGVjdHMgCi0JICogaXQgYmVsbG93ICovCi0JZGV2LT5wcml2ID0gY2hhbjsKLQkKLQlzdHJjcHkoY2hhbi0+bmFtZSwgY29uZi0+bmFtZSk7Ci0JY2hhbi0+Y2FyZCA9IGNhcmQ7Ci0JY2hhbi0+ZGV2ID0gZGV2OwotCWNoYW4tPmNvbW1vbi5zayA9IE5VTEw7Ci0JY2hhbi0+Y29tbW9uLmZ1bmMgPSBOVUxMOwotCWNoYW4tPmNvbW1vbi5yd19iaW5kID0gMDsKLQljaGFuLT50eF9za2IgPSBjaGFuLT5yeF9za2IgPSBOVUxMOwotCi0JLyogdmVyaWZ5IG1lZGlhIGFkZHJlc3MgKi8KLQlpZiAoY29uZi0+YWRkclswXSA9PSAnQCcpewkJLyogU1ZDICovCi0JCWNoYW4tPmNvbW1vbi5zdmMgPSAxOwotCQlzdHJuY3B5KGNoYW4tPmFkZHIsICZjb25mLT5hZGRyWzFdLCBXQU5fQUREUkVTU19TWik7Ci0KLQkJLyogU2V0IGNoYW5uZWwgdGltZW91dHMgKGRlZmF1bHQgaWYgbm90IHNwZWNpZmllZCkgKi8KLQkJY2hhbi0+aWRsZV90aW1lb3V0ID0gKGNvbmYtPmlkbGVfdGltZW91dCkgPyAKLQkJCQkJY29uZi0+aWRsZV90aW1lb3V0IDogOTA7Ci0JCWNoYW4tPmhvbGRfdGltZW91dCA9IChjb25mLT5ob2xkX3RpbWVvdXQpID8gCi0JCQkJCWNvbmYtPmhvbGRfdGltZW91dCA6IDEwOwotCi0JfWVsc2UgaWYgKGlzZGlnaXQoY29uZi0+YWRkclswXSkpewkvKiBQVkMgKi8KLQkJaW50IGxjbiA9IGRlY190b191aW50KGNvbmYtPmFkZHIsIDApOwotCi0JCWlmICgobGNuID49IGNhcmQtPnUueC5sb19wdmMpICYmIChsY24gPD0gY2FyZC0+dS54LmhpX3B2YykpewotCQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBkZXYsIGxjbik7Ci0JCX1lbHNlewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIiVzOiBQVkMgJXUgaXMgb3V0IG9mIHJhbmdlIG9uIGludGVyZmFjZSAlcyFcbiIsCi0JCQkJd2FuZGV2LT5uYW1lLCBsY24sIGNoYW4tPm5hbWUpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJfQotCX1lbHNlewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSIlczogaW52YWxpZCBtZWRpYSBhZGRyZXNzIG9uIGludGVyZmFjZSAlcyFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsIGNoYW4tPm5hbWUpOwotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmKHN0cmNtcChjb25mLT51c2VkYnksICJXQU5QSVBFIikgPT0gMCl7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ1bm5pbmcgaW4gV0FOUElQRSBtb2RlICVzXG4iLAotCQkJd2FuZGV2LT5uYW1lLCBjaGFuLT5uYW1lKTsKLSAgICAgICAgICAgICAgICBjaGFuLT5jb21tb24udXNlZGJ5ID0gV0FOUElQRTsKLQkJY2hhbi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0KLSAgICAgICAgfWVsc2UgaWYoc3RyY21wKGNvbmYtPnVzZWRieSwgIkFQSSIpID09IDApewotCQljaGFuLT5jb21tb24udXNlZGJ5ID0gQVBJOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSdW5uaW5nIGluIEFQSSBtb2RlICVzXG4iLAotCQkJd2FuZGV2LT5uYW1lLCBjaGFuLT5uYW1lKTsKLQkJY2hhbi0+cHJvdG9jb2wgPSBodG9ucyhYMjVfUFJPVCk7Ci0JfQotCi0KLQlpZiAoZXJyKXsKLQkJa2ZyZWUoY2hhbik7Ci0JCWRldi0+cHJpdiA9IE5VTEw7Ci0JCXJldHVybiBlcnI7Ci0JfQotCQotCWNoYW4tPmVuYWJsZV9JUFggPSBjb25mLT5lbmFibGVfSVBYOwotCQotCWlmIChjaGFuLT5lbmFibGVfSVBYKQotCQljaGFuLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQWCk7Ci0JCi0JaWYgKGNvbmYtPm5ldHdvcmtfbnVtYmVyKQotCQljaGFuLT5uZXR3b3JrX251bWJlciA9IGNvbmYtPm5ldHdvcmtfbnVtYmVyOwotCWVsc2UKLQkJY2hhbi0+bmV0d29ya19udW1iZXIgPSAweERFQURCRUVGOwotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLQlzdHJjcHkoZGV2LT5uYW1lLGNoYW4tPm5hbWUpOwotCi0JZGV2LT5pbml0ID0gJmlmX2luaXQ7Ci0KLQlpbml0X3gyNV9jaGFubmVsX3N0cnVjdChjaGFuKTsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5hbWU6CWRlbF9pZigpLCAgUmVtb3ZlIGEgbG9naWNhbCBjaGFubmVsLgkgCi0gKgotICogUHVycG9zZToJVG8gZHluYW1pY2FsbHkgcmVtb3ZlIGEgbG9naWNhbCBjaGFubmVsLgotICogCi0gKiBSYXRpb25hbGU6CUVhY2ggbG9naWNhbCBjaGFubmVsIHNob3VsZCBiZSBkeW5hbWljYWxseQotICogICAgICAgICAgICAgIHJlbW92YWJsZS4gVGhpcyBmdW5jdGluIGlzIGNhbGxlZCBieSBhbiAKLSAqICAgICAgICAgICAgICBJT0NUTF9JRkRFTCBpb2N0bCBjYWxsIG9yIHNodXRkb3duKCkuIAotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjogRG8gbm90aGluZy4KLSAqCi0gKiBDYWxsZWQgYnk6CUlPQ1RMX0lGREVMIDogd2Fucm91dGVyX2lvY3RsKCkgZnJvbSB3YW5tYWluLmMKLSAqICAgICAgICAgICAgICBzaHV0ZG93bigpIGZyb20gc2RsYW1haW4uYwotICoKLSAqIEFzc3VtcHRpb25zOiAKLSAqCi0gKiBXYXJuaW5nczoKLSAqCi0gKiBSZXR1cm46IAkwIE9rLiBWb2lkIGZ1bmN0aW9uLgotICovCi0KLS8vRklYTUUgRGVsIElGIFNob3VsZCBiZSB0YWtlbiBvdXQgbm93LgotCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOgl3cHhfZXhlYwotICoKLSAqIERlc2NyaXB0aW9uOglFeGVjdXRlIGFkYXB0ZXIgaW50ZXJmYWNlIGNvbW1hbmQuCi0gKiAJCVRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBkaXNzYWJsZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB3cHhfZXhlYyAoc3RydWN0IHNkbGEqIGNhcmQsIHZvaWQqIHVfY21kLCB2b2lkKiB1X2RhdGEpCi17Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJZGlzYWJsZV9jb21tCQotICoKLSAqIERlc2NyaXB0aW9uOglEaXNhYmxlIGNvbW11bmljYXRpb25zIGR1cmluZyBzaHV0ZG93bi4KLSAqICAgICAgICAgICAgICBEb250IGNoZWNrIHJldHVybiBjb2RlIGJlY2F1c2UgdGhlcmUgaXMgCi0gKiAgICAgICAgICAgICAgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQuICAKLSAqCi0gKiBXYXJuaW5nOglEZXYgYW5kIHByaXZhdGUgYXJlYXMgYXJlIGdvbmUgYXQgdGhpcyBwb2ludC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2NvbW0oc2RsYV90KiBjYXJkKQotewotCWRpc2FibGVfY29tbV9zaHV0ZG93bihjYXJkKTsKLQlkZWxfdGltZXIoJmNhcmQtPnUueC54MjVfdGltZXIpOwotCXJldHVybjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoJTmV0d29yayBEZXZpY2UgSW50ZXJmYWNlIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJaWZfaW5pdCgpLCAgIE5ldG93cmsgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uIAkgCi0gKgotICogUHVycG9zZToJVG8gaW5pdGlhbGl6ZSBhIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUuCi0gKiAKLSAqIFJhdGlvbmFsZToJRHVyaW5nIG5ldHdvcmsgaW50ZXJmYWNlIHN0YXJ0dXAsIHRoZSBpZl9pbml0Ci0gKiAgICAgICAgICAgICAgaXMgY2FsbGVkIGJ5IHRoZSBrZXJuZWwgdG8gaW5pdGlhbGl6ZSB0aGUKLSAqICAgICAgICAgICAgICBuZXRvd3JrIGRldmljZSBzdHJ1Y3R1cmUuICBUaHVzIGEgZHJpdmVyCi0gKiAgICAgICAgICAgICAgY2FuIGN1c3RvbXplIGEgbmV0d29yayBkZXZpY2UuIAotICogICAgICAgICAgICAgICAgCi0gKiBEZXNjcmlwdGlvbjoJSW5pdGlhbGl6ZSB0aGUgbmV0b3dyayBkZXZpY2UgY2FsbCBiYWNrCi0gKiAgICAgICAgICAgICAgcm91dGluZXMuICBUaGlzIGlzIHdoZXJlIHdlIHRlbGwgdGhlIGtlcm5lbAotICogICAgICAgICAgICAgIHdoaWNoIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGl0IHdhbnRzIHRvIHNlbmQKLSAqICAgICAgICAgICAgICB2aWEgb3VyIGludGVyZmFjZS4gCi0gKgkJRnVydGhlcm1vcmUsIHdlIGluaXRpYWxpemUgdGhlIGRldmljZSBmbGFncywgCi0gKiAgICAgICAgICAgICAgTVRVIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBib2FyZC4KLSAqCi0gKiBDYWxsZWQgYnk6CUtlcm5lbCAoL3Vzci9zcmMvbGludXgvbmV0L2NvcmUvZGV2LmMpCi0gKiAJCShkZXYtPmluaXQoKSkKLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoJCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAgCU9rIDogVm9pZCBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCXN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYgPSAmY2FyZC0+d2FuZGV2OwotCi0JLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotCWRldi0+b3BlbgkJPSAmaWZfb3BlbjsKLQlkZXYtPnN0b3AJCT0gJmlmX2Nsb3NlOwotCWRldi0+aGFyZF9oZWFkZXIJPSAmaWZfaGVhZGVyOwotCWRldi0+cmVidWlsZF9oZWFkZXIJPSAmaWZfcmVidWlsZF9oZHI7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCi0JLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCi0JZGV2LT50eXBlCQk9IEFSUEhSRF9QUFA7CQkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmZsYWdzCQl8PSBJRkZfUE9JTlRPUE9JTlQ7Ci0JZGV2LT5mbGFncwkJfD0gSUZGX05PQVJQOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJZGV2LT5tdHUJPSBYMjVfQ0hBTl9NVFUrc2l6ZW9mKHgyNWFwaV9oZHJfdCk7Ci0JfWVsc2V7Ci0JCWRldi0+bXR1CT0gY2FyZC0+d2FuZGV2Lm10dTsgCQotCX0KLQkKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IFgyNV9IUkRIRFJfU1o7IC8qIG1lZGlhIGhlYWRlciBsZW5ndGggKi8KLQlkZXYtPmFkZHJfbGVuCQk9IDI7CQkvKiBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwotCQotCWlmICghY2hhbi0+Y29tbW9uLnN2Yyl7Ci0JCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhjaGFuLT5jb21tb24ubGNuKTsKLQl9Ci0JCi0JLyogSW5pdGlhbGl6ZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIChqdXN0IGZvciByZWZlcmVuY2UpICovCi0JZGV2LT5pcnEJPSB3YW5kZXYtPmlycTsKLQlkZXYtPmRtYQk9IHdhbmRldi0+ZG1hOwotCWRldi0+YmFzZV9hZGRyCT0gd2FuZGV2LT5pb3BvcnQ7Ci0JZGV2LT5tZW1fc3RhcnQJPSAodW5zaWduZWQgbG9uZyl3YW5kZXYtPm1hZGRyOwotCWRldi0+bWVtX2VuZAk9IHdhbmRldi0+bWFkZHIgKyB3YW5kZXYtPm1zaXplIC0gMTsKLQotICAgICAgICAvKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHF1ZXVlIGxlbmd0aCAqLwotICAgICAgICBkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKLQlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0KLQkvKiBGSVhNRSBXaHkgYXJlIHdlIGRvaW5nIHRoaXMgKi8KLQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTmFtZToJaWZfb3BlbigpLCAgIE9wZW4vQnJpbmcgdXAgdGhlIE5ldG93cmsgSW50ZXJmYWNlIAotICoKLSAqIFB1cnBvc2U6CVRvIGJyaW5nIHVwIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiAKLSAqIFJhdGlvbmFsZToJCi0gKiAgICAgICAgICAgICAgICAKLSAqIERlc2NyaXB0aW9uOglPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogCQlvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqIAkJbyBpZiBsaW5rIGlzIGRpc2Nvbm5lY3RlZCB0aGVuIGluaXRpYXRlIGNvbm5lY3Rpb24KLSAqCi0gKiBDYWxsZWQgYnk6CUtlcm5lbCAoL3Vzci9zcmMvbGludXgvbmV0L2NvcmUvZGV2LmMpCi0gKiAJCShkZXYtPm9wZW4oKSkKLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoJCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAgCU9rCi0gKiAJCTwwIAlGYWlsdXJlOiBJbnRlcmZhY2Ugd2lsbCBub3QgY29tZSB1cC4KLSAqLwotCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JdW5zaWduZWQgbG9uZyBzbXBfZmxhZ3M7Ci0JCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWNoYW4tPnRxX3dvcmtpbmcgPSAwOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgd29ya3F1ZXVlICovCi0JSU5JVF9XT1JLKCZjaGFuLT5jb21tb24ud2FucGlwZV93b3JrLCAodm9pZCAqKXgyNWFwaV9iaCwgZGV2KTsKLQotCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIEJIIGNpcmN1bGFyIGJ1ZmZlciAqLwotCS8qIEFkZCAxIHRvIE1BWF9CSF9CVUZGIHNvIHdlIGRvbid0IGhhdmUgdGVzdCB3aXRoIChNQVhfQkhfQlVGRi0xKSAqLwotCWNoYW4tPmJoX2hlYWQgPSBrbWFsbG9jKChzaXplb2YoYmhfZGF0YV90KSooTUFYX0JIX0JVRkYrMSkpLEdGUF9BVE9NSUMpOwotCi0JaWYgKGNoYW4tPmJoX2hlYWQgPT0gTlVMTCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAhIEJIX0JVRkZFUlMgIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0JfQotCW1lbXNldChjaGFuLT5iaF9oZWFkLDAsKHNpemVvZihiaF9kYXRhX3QpKihNQVhfQkhfQlVGRisxKSkpOwotCWF0b21pY19zZXQoJmNoYW4tPmJoX2J1ZmZfdXNlZCwgMCk7Ci0KLQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBpbnRlcmZhY2VzICovCi0JKytjYXJkLT51Lngubm9fZGV2OwotCQotCXdhbnBpcGVfb3BlbihjYXJkKTsKLQotCS8qIExBUEIgcHJvdG9jb2wgb25seSB1c2VzIG9uZSBpbnRlcmZhY2UsIHRodXMKLQkgKiBzdGFydCB0aGUgcHJvdG9jb2wgYWZ0ZXIgaXQgY29tZXMgdXAuICovCi0JaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQlpZiAoY2FyZC0+b3Blbl9jbnQgPT0gMSl7Ci0JCQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQkJCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQkJeDI1X3NldF9pbnRyX21vZGUoY2FyZCwgSU5UUl9PTl9USU1FUik7IAotCQkJc3RhdHVzLT5pbWFzayAmPSB+SU5UUl9PTl9USU1FUjsKLQkJCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCX0KLQl9ZWxzZXsKLQkJLyogWDI1IGNhbiBoYXZlIG11bHRpcGxlIGludGVyZmFjZXMgdGh1cywgc3RhcnQgdGhlIAotCQkgKiBwcm90b2NvbCBvbmNlIGFsbCBpbnRlcmZhY2VzIGFyZSB1cCAqLwotCi0JCS8vRklYTUU6IFRoZXJlIGlzIGEgYnVnIGhlcmUuIElmIGludGVyZmFjZSBpcwotCQkvL2Jyb3VnaHQgZG93biBhbmQgdXAsIGl0IHdpbGwgdHJ5IHRvIGVuYWJsZSBjb21tLgotCQlpZiAoY2FyZC0+b3Blbl9jbnQgPT0gY2FyZC0+dS54Lm51bV9vZl9jaCl7Ci0KLQkJCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQkJY29ubmVjdChjYXJkKTsKLQkJCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0KLQkJCW1vZF90aW1lcigmY2FyZC0+dS54LngyNV90aW1lciwgamlmZmllcyArIEhaKTsKLQkJfQotCX0KLQkvKiBEZXZpY2UgaXMgbm90IHVwIHVudGlsIHRoZSB3ZSBhcmUgaW4gY29ubmVjdGVkIHN0YXRlICovCi0JZG9fZ2V0dGltZW9mZGF5KCAmdHYgKTsKLQljaGFuLT5yb3V0ZXJfc3RhcnRfdGltZSA9IHR2LnR2X3NlYzsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOYW1lOglpZl9jbG9zZSgpLCAgIENsb3NlL0JyaW5nIGRvd24gdGhlIE5ldG93cmsgSW50ZXJmYWNlIAotICoKLSAqIFB1cnBvc2U6CVRvIGJyaW5nIGRvd24gYSBuZXR3b3JrIGludGVyZmFjZS4KLSAqIAotICogUmF0aW9uYWxlOgkKLSAqICAgICAgICAgICAgICAgIAotICogRGVzY3JpcHRpb246CUNsb3NlIG5ldHdvcmsgaW50ZXJmYWNlLgotICogCQlvIGRlY3JlbWVudCB1c2UgbW9kdWxlIHVzZSBjb3VudAotICoKLSAqIENhbGxlZCBieToJS2VybmVsICgvdXNyL3NyYy9saW51eC9uZXQvY29yZS9kZXYuYykKLSAqIAkJKGRldi0+Y2xvc2UoKSkKLSAqCQlpZmNvbmZpZyA8bmFtZT4gZG93bjogd2lsbCB0cmlnZ2VyIHRoZSBrZXJuZWwKLSAqICAgICAgICAgICAgICB3aGljaCB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBBc3N1bXB0aW9uczogTm9uZQotICoJCi0gKiBXYXJuaW5nczoJTm9uZQotICoKLSAqIFJldHVybjogCTAgCU9rCi0gKiAJCTwwIAlGYWlsdXJlOiBJbnRlcmZhY2Ugd2lsbCBub3QgZXhpdCBwcm9wZXJseS4KLSAqLwotc3RhdGljIGludCBpZl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0Jc2RsYV90KiBjYXJkID0gY2hhbi0+Y2FyZDsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQkKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlpZiAoKGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEKSB8fCAKLQkgICAgKGNoYW4tPmNvbW1vbi5zdGF0ZSA9PSBXQU5fQ09OTkVDVElORykpewotCQlTNTA4X1M1MTRfbG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQkJY2hhbl9kaXNjKGRldik7Ci0JCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JfQotCi0Jd2FucGlwZV9jbG9zZShjYXJkKTsKLQotCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCWlmIChjaGFuLT5iaF9oZWFkKXsKLQkJaW50IGk7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCi0JCWZvciAoaT0wOyBpPChNQVhfQkhfQlVGRisxKTsgaSsrKXsKLQkJCXNrYiA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbaV0pLT5za2I7Ci0JCQlpZiAoc2tiICE9IE5VTEwpewotICAgICAgICAgICAgICAgIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCX0KLQkJfQotCQlrZnJlZShjaGFuLT5iaF9oZWFkKTsKLQkJY2hhbi0+YmhfaGVhZD1OVUxMOwotCX0KLQlTNTA4X1M1MTRfdW5sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCi0JLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBjbG9zZSwgZGlzY29ubmVjdCBwaHlzaWNhbCBsaW5rICovCi0JaWYgKCFjYXJkLT5vcGVuX2NudCl7Ci0JCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQlkaXNjb25uZWN0KGNhcmQpOwotCQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCAwKTsKLQkJUzUwOF9TNTE0X3VubG9jayhjYXJkLCAmc21wX2ZsYWdzKTsKLQl9Ci0JCi0JLyogRGVjcmVtZW50IHRoZSBudW1iZXIgb2YgaW50ZXJmYWNlcyAqLwotCS0tY2FyZC0+dS54Lm5vX2RldjsKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQnVpbGQgbWVkaWEgaGVhZGVyLgotICogCW8gZW5jYXBzdWxhdGUgcGFja2V0IGFjY29yZGluZyB0byBlbmNhcHN1bGF0aW9uIHR5cGUuCi0gKgotICogCVRoZSB0cmljayBoZXJlIGlzIHRvIHB1dCBwYWNrZXQgdHlwZSAoRXRoZXJ0eXBlKSBpbnRvICdwcm90b2NvbCcgCi0gKiAgICAgIGZpZWxkIG9mIHRoZSBzb2NrZXQgYnVmZmVyLCBzbyB0aGF0IHdlIGRvbid0IGZvcmdldCBpdC4gIAotICogICAgICBJZiBlbmNhcHN1bGF0aW9uIGZhaWxzLCBzZXQgc2tiLT5wcm90b2NvbCB0byAwIGFuZCBkaXNjYXJkIAotICogICAgICBwYWNrZXQgbGF0ZXIuCi0gKgotICogCVJldHVybjoJCW1lZGlhIGhlYWRlciBsZW5ndGguCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGlmX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiogc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHZvaWQqIGRhZGRyLCB2b2lkKiBzYWRkciwKLQkJICAgICB1bnNpZ25lZCBsZW4pCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlpbnQgaGRyX2xlbiA9IGRldi0+aGFyZF9oZWFkZXJfbGVuOwotCQotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyh0eXBlKTsKLQlpZiAoIWNoYW4tPnByb3RvY29sKXsKLQkJaGRyX2xlbiA9IHdhbnJvdXRlcl9lbmNhcHN1bGF0ZShza2IsIGRldiwgdHlwZSk7Ci0JCWlmIChoZHJfbGVuIDwgMCl7Ci0JCQloZHJfbGVuID0gMDsKLQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucygwKTsKLQkJfQotCX0KLQlyZXR1cm4gaGRyX2xlbjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlSZS1idWlsZCBtZWRpYSBoZWFkZXIuCi0gKgotICogCVJldHVybjoJCTEJcGh5c2ljYWwgYWRkcmVzcyByZXNvbHZlZC4KLSAqCQkJMAlwaHlzaWNhbCBhZGRyZXNzIG5vdCByZXNvbHZlZAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaWZfcmVidWlsZF9oZHIgKHN0cnVjdCBza19idWZmKiBza2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OyAKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVidWlsZF9oZWFkZXIoKSBjYWxsZWQgZm9yIGludGVyZmFjZSAlcyFcbiIsCi0JCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdHJhbnNtaXQgdGltZW91dCBldmVudCBmcm9tIG5ldGlmIHdhdGNoZG9nCi0gKi8KLXN0YXRpYyB2b2lkIGlmX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAJeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCi0JLyogSWYgb3VyIGRldmljZSBzdGF5cyBidXN5IGZvciBhdCBsZWFzdCA1IHNlY29uZHMgdGhlbiB3ZSB3aWxsCi0JICoga2ljayBzdGFydCB0aGUgZGV2aWNlIGJ5IG1ha2luZyBkZXYtPnRidXN5ID0gMC4gIFdlIGV4cGVjdAotCSAqIHRoYXQgb3VyIGRldmljZSBuZXZlciBzdGF5cyBidXN5IG1vcmUgdGhhbiA1IHNlY29uZHMuIFNvIHRoaXMgICAgICAgICAgICAgICAgIAotCSAqIGlzIG9ubHkgdXNlZCBhcyBhIGxhc3QgcmVzb3J0LgotCSAqLwotCi0JKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF90YnVzeV90aW1lb3V0OwotCXByaW50ayAoS0VSTl9JTkZPICIlczogVHJhbnNtaXQgdGltZWQgb3V0IG9uICVzXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIGRldi0+bmFtZSk7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiAJbyBzZXQgdGJ1c3kgZmxhZyAobWFya3Mgc3RhcnQgb2YgdGhlIHRyYW5zbWlzc2lvbikuCi0gKiAJbyBjaGVjayBsaW5rIHN0YXRlLiBJZiBsaW5rIGlzIG5vdCB1cCwgdGhlbiBkcm9wIHRoZSBwYWNrZXQuCi0gKiAJbyBjaGVjayBjaGFubmVsIHN0YXR1cy4gSWYgaXQncyBkb3duIHRoZW4gaW5pdGlhdGUgYSBjYWxsLgotICogCW8gcGFzcyBhIHBhY2tldCB0byBjb3JyZXNwb25kaW5nIFdBTiBkZXZpY2UuCi0gKiAJbyBmcmVlIHNvY2tldCBidWZmZXIKLSAqCi0gKiAJUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogCU5vdGVzOgotICogCTEuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBwcm90b2NvbCBzdGFjayBvciBieSB0aGUgIm5ldAotICogICAgCWJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogCTIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQotICogICAgCXByb3RvY29sIHN0YWNrIGFuZCBjYW4gYmUgdXNlZCBmb3IgZmxvdyBjb250cm9sIHdpdGggcHJvdG9jb2wgbGF5ZXIuCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JaW50IHVkcF90eXBlOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzPTA7Ci0KLQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2VudHJ5OwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogTm8gbmVlZCB0byBjaGVjayBmcmFtZSBsZW5ndGgsIHNpbmNlIHNvY2tldCBjb2RlCi0gICAgICAgICAqIHdpbGwgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIHVzICovCi0KLQljaGFuLT50aWNrX2NvdW50ZXIgPSBqaWZmaWVzOwotCQotCS8qIENyaXRpY2FsIHJlZ2lvbiBzdGFydHMgaGVyZSAqLwotCVM1MDhfUzUxNF9sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSGl0IGNyaXRpY2FsIGluIGlmX3NlbmQoKSEgJWx4XG4iLGNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JfQotCQotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKHNrYiwgY2FyZCk7Ci0KLSAgICAgICAgaWYodWRwX3R5cGUgIT0gVURQX0lOVkFMSURfVFlQRSkgewotCi0gICAgICAgICAgICAgICAgaWYoc3RvcmVfdWRwX21nbXRfcGt0KHVkcF90eXBlLCBVRFBfUEtUX0ZSTV9TVEFDSywgY2FyZCwgZGV2LCBza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5jb21tb24ubGNuKSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWRwX3R5cGUgPT0gVURQX1hQSVBFX1RZUEUpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9QSVBFX3JlcXVlc3QrKzsKLQkJCX0KLSAgICAgICAgICAgICAgIAl9Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCQlTNTA4X1M1MTRfdW5sb2NrKGNhcmQsICZzbXBfZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKXsKLQkJLy9GSVhNRTogVGhpcyBjaGVjayBkb2Vzbid0IG1ha2Ugc2Vuc2UgYW55IG1vcmUKLQkJaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBXQU5fQ09OTkVDVEVEKXsKLQkJCWNoYW4tPnRyYW5zbWl0X2xlbmd0aD0wOwotCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCQl9ZWxzZXsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCSsrY2FyZC0+dS54LnR4X2ludGVycnVwdHNfcGVuZGluZzsKLQkJICAgICAgICBzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVFhfRlJBTUU7Ci0JCQljbGVhcl9iaXQoU0VORF9DUklULCh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX3dhbl9kaXNjb25uZWN0ZWQ7CQotCQkKLQl9ZWxzZSBpZiAoIGNoYW4tPnByb3RvY29sICYmIChjaGFuLT5wcm90b2NvbCAhPSBza2ItPnByb3RvY29sKSl7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogdW5zdXBwb3J0ZWQgRXRoZXJ0eXBlIDB4JTA0WCBvbiBpbnRlcmZhY2UgJXMhXG4iLAotCQkJY2hhbi0+bmFtZSwgaHRvbnMoc2tiLT5wcm90b2NvbCksIGRldi0+bmFtZSk7Ci0JCQotCQlwcmludGsoS0VSTl9JTkZPICJQUk9UTyAlWG4iLCBodG9ucyhjaGFuLT5wcm90b2NvbCkpOwotCQkrK2NoYW4tPmlmc3RhdHMudHhfZXJyb3JzOwotCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9wcm90b2NvbF9lcnJvcjsKLQkJCi0JfWVsc2Ugc3dpdGNoIChjaGFuLT5jb21tb24uc3RhdGUpewotCi0JCWNhc2UgV0FOX0RJU0NPTk5FQ1RFRDoKLQkJCS8qIFRyeSB0byBlc3RhYmxpc2ggY29ubmVjdGlvbi4gSWYgc3VjY2VkZWQsIHRoZW4gc3RhcnQKLQkJCSAqIHRyYW5zbWlzc2lvbiwgZWxzZSBkcm9wIGEgcGFja2V0LgotCQkJICovCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9ZWxzZXsKLQkJCQlpZiAoY2hhbl9jb25uZWN0KGRldikgIT0gMCl7Ci0JCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlpZiggc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFgpKSB7Ci0JCQkJaWYoY2hhbi0+ZW5hYmxlX0lQWCkgewotCQkJCQlzd2l0Y2hfbmV0X251bWJlcnMoIHNrYi0+ZGF0YSwgCi0JCQkJCQljaGFuLT5uZXR3b3JrX251bWJlciwgMCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfcHJvdG9jb2xfZXJyb3I7Ci0JCQkJCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JCQkJfQotCQkJfQotCQkJLyogV2UgbmV2ZXIgZHJvcCBoZXJlLCBpZiBjYW5ub3Qgc2VuZCB0aGFuLCBjb3B5Ci0JICAgICAgICAgICAgICAgICAqIGEgcGFja2V0IGludG8gYSB0cmFuc21pdCBidWZmZXIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkJCWNoYW5fc2VuZChkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwkKLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQlicmVhazsKLQl9Ci0KLQotaWZfc2VuZF9jcml0X2V4aXQ6Ci0JCi0gICAgICAgCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCWNsZWFyX2JpdChTRU5EX0NSSVQsKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCVM1MDhfUzUxNF91bmxvY2soY2FyZCwgJnNtcF9mbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2V0dXAgc28gdGhhdCBhIGZyYW1lIGNhbiBiZSB0cmFuc21pdHRlZCBvbiB0aGUgb2NjdXJyZW5jZSBvZiBhIHRyYW5zbWl0Ci0gKiBpbnRlcnJ1cHQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZiwKLQkJCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotICAgICAgICB4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotICAgICAgICBzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9hZHB0cl9iZnJzX2Z1bGw7Ci0KLSAgICAgICAgaWYoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVycm9yLCB0cmFuc21pdCBsZW5ndGggc2V0IGluIGRlbGF5ZWQgdHJhbnNtaXQhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJaWYgKGxlbiA+IFgyNV9DSEFOX01UVStzaXplb2YoeDI1YXBpX2hkcl90KSkgewotCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7CQotCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMZW5ndGggaXMgdG9vIGJpZyBmb3IgZGVsYXllZCB0cmFuc21pdFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybjsKLQkJfQotCX1lbHNlewotCQlpZiAobGVuID4gWDI1X01BWF9EQVRBKSB7Ci0JCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsJCi0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExlbmd0aCBpcyB0b28gYmlnIGZvciBkZWxheWVkIHRyYW5zbWl0XG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0gICAgICAgIGNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IGxlbjsKLQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uZHJpdmVyX2J1c3ksMSk7Ci0gICAgICAgIG1lbWNweShjaGFuLT50cmFuc21pdF9idWZmZXIsIGJ1ZiwgbGVuKTsKLQotCSsrY2hhbi0+aWZfc2VuZF9zdGF0LmlmX3NlbmRfdHhfaW50X2VuYWJsZWQ7Ci0KLQkvKiBFbmFibGUgVHJhbnNtaXQgSW50ZXJydXB0ICovCi0JKytjYXJkLT51LngudHhfaW50ZXJydXB0c19wZW5kaW5nOwotICAgICAgICBzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVFhfRlJBTUU7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIG5ldF9kZXZpY2Vfc3RhdHMKLSAqCi0gKiAJR2V0IGV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgotICogCVJldHVybiBhIHBvaW50ZXIgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljcy4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JaWYoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiAmY2hhbi0+aWZzdGF0czsKLX0KLQotCi0vKgotICoJSW50ZXJydXB0IEhhbmRsZXJzIAotICovCi0KLS8qCi0gKiBYLjI1IEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUuCi0gKi8KLQotc3RhdGljIHZvaWQgd3B4X2lzciAoc2RsYV90KiBjYXJkKQotewotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JY2FyZC0+aW5faXNyID0gMTsKLQkrK2NhcmQtPnN0YXRpc3RpY3MuaXNyX2VudHJ5OwotCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCkpewotCQljYXJkLT5pbl9pc3I9MDsKLQkJc3RhdHVzLT5pZmxhZ3MgPSAwOwotCQlyZXR1cm47Ci0JfQotCQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0KLSAJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3cHhfaXNyOiB3YW5kZXYuY3JpdGljYWwgc2V0IHRvIDB4JTAybHgsIGludCB0eXBlID0gMHglMDJ4XG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsIGNhcmQtPndhbmRldi5jcml0aWNhbCwgc3RhdHVzLT5pZmxhZ3MpOwotCQljYXJkLT5pbl9pc3IgPSAwOwotCQlzdGF0dXMtPmlmbGFncyA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBGb3IgYWxsIGludGVycnVwdHMgc2V0IHRoZSBjcml0aWNhbCBmbGFnIHRvIENSSVRJQ0FMX1JYX0lOVFIuCi0gICAgICAgICAqIElmIHRoZSBpZl9zZW5kIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggdGhpcyBmbGFnIHNldCBpdCB3aWxsIHNldAotICAgICAgICAgKiB0aGUgZW5hYmxlIHRyYW5zbWl0IGZsYWcgdG8gMS4gKGZvciBhIGRlbGF5ZWQgaW50ZXJydXB0KQotICAgICAgICAgKi8KLQlzd2l0Y2ggKHN0YXR1cy0+aWZsYWdzKXsKLQotCQljYXNlIFJYX0lOVFJfUEVORElORzoJCS8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0JCQlyeF9pbnRyKGNhcmQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBUWF9JTlRSX1BFTkRJTkc6CQkvKiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJCXR4X2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIE1PREVNX0lOVFJfUEVORElORzoJLyogbW9kZW0gc3RhdHVzIGludGVycnVwdCAqLwotCQkJc3RhdHVzX2ludHIoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFgyNV9BU1lfVFJBTlNfSU5UUl9QRU5ESU5HOgkvKiBuZXR3b3JrIGV2ZW50IGludGVycnVwdCAqLwotCQkJZXZlbnRfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElNRVJfSU5UUl9QRU5ESU5HOgotCQkJdGltZXJfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6CQkvKiB1bndhbnRlZCBpbnRlcnJ1cHQgKi8KLQkJCXNwdXJfaW50cihjYXJkKTsKLQl9Ci0KLQljYXJkLT5pbl9pc3IgPSAwOwotCXN0YXR1cy0+aWZsYWdzID0gMDsJLyogY2xlYXIgaW50ZXJydXB0IGNvbmRpdGlvbiAqLwotfQotCi0vKgotICogCVJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAJVGhpcyByb3V0aW5lIGhhbmRsZXMgZnJhZ21lbnRlZCBJUCBwYWNrZXRzIHVzaW5nIE0tYml0IGFjY29yZGluZyB0byB0aGUKLSAqIAlSRkMxMzU2LgotICogCW8gbWFwIGxpZ2ljYWwgY2hhbm5lbCBudW1iZXIgdG8gbmV0d29yayBpbnRlcmZhY2UuCi0gKiAJbyBhbGxvY2F0ZSBzb2NrZXQgYnVmZmVyIG9yIGFwcGVuZCByZWNlaXZlZCBwYWNrZXQgdG8gdGhlIGV4aXN0aW5nIG9uZS4KLSAqIAlvIGlmIE0tYml0IGlzIHJlc2V0IChpLmUuIGl0J3MgdGhlIGxhc3QgcGFja2V0IGluIGEgc2VxdWVuY2UpIHRoZW4gCi0gKiAgIAlkZWNhcHN1bGF0ZSBwYWNrZXQgYW5kIHBhc3Mgc29ja2V0IGJ1ZmZlciB0byB0aGUgcHJvdG9jb2wgc3RhY2suCi0gKgotICogCU5vdGVzOgotICogCTEuIFdoZW4gYWxsb2NhdGluZyBhIHNvY2tldCBidWZmZXIsIGlmIE0tYml0IGlzIHNldCB0aGVuIG1vcmUgZGF0YSBpcwotICogICAgCWNvbWluZyBhbmQgd2UgaGF2ZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHRoZSBtYXhpbXVtIElQIHBhY2tldCBzaXplCi0gKiAgICAJZXhwZWN0ZWQgb24gdGhpcyBjaGFubmVsLgotICogCTIuIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIGFuZCBYLjI1IHBhY2tldCBoYXMgdG8gYmUgZHJvcHBlZCAoZS5nLiBubwotICogICAgCXNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSkgdGhlIHdob2xlIHBhY2tldCBzZXF1ZW5jZSBtdXN0IGJlIGRpc2NhcmRlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCByeF9pbnRyIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIHJ4bWIgPSBjYXJkLT5yeG1iOwotCXVuc2lnbmVkIGxjbiA9IHJ4bWItPmNtZC5sY247Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLGxjbik7Ci0JeDI1X2NoYW5uZWxfdCogY2hhbjsKLQlzdHJ1Y3Qgc2tfYnVmZiogc2tiPU5VTEw7Ci0KLQlpZiAoZGV2ID09IE5VTEwpewotCQkvKiBJbnZhbGlkIGNoYW5uZWwsIGRpc2NhcmQgcGFja2V0ICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZpbmcgb24gb3JwaGFuZWQgTENOICVkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGxjbik7Ci0JCXJldHVybjsKLQl9Ci0KLQljaGFuID0gZGV2LT5wcml2OwotCWNoYW4tPmlfdGltZW91dF9zb2ZhciA9IGppZmZpZXM7Ci0KLQotCS8qIENvcHkgdGhlIGRhdGEgZnJvbSB0aGUgYm9hcmQsIGludG8gYW4KLSAgICAgICAgICogc2tiIGJ1ZmZlciAKLQkgKi8KLQlpZiAod2FucGlwZV9wdWxsX2RhdGFfaW5fc2tiKGNhcmQsZGV2LCZza2IpKXsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCSsrY2hhbi0+cnhfaW50cl9zdGF0LnJ4X2ludHJfbm9fc29ja2V0OwotCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsJCS8qIHRpbWVzdGFtcCAqLwotCi0KLQkvKiAtLS0tLS0tLS0tLS0gQVBJIC0tLS0tLS0tLS0tLS0tLS0qLwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQotCQlpZiAoYmhfZW5xdWV1ZShkZXYsIHNrYikpewotCQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlyZXR1cm47Ci0JCX0JCQotCi0JCSsrY2hhbi0+aWZzdGF0cy5yeF9wYWNrZXRzOwotCQljaGFuLT5pZnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkKLQotCQljaGFuLT5yeF9za2IgPSBOVUxMOwotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpKXsKLQkJCXdhbnBpcGVfcXVldWVfd29yaygmY2hhbi0+Y29tbW9uLndhbnBpcGVfd29yayk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCi0JLyogLS0tLS0tLS0tLS0tLSBXQU5QSVBFIC0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCQotCS8qIHNldCByeF9za2IgdG8gTlVMTCBzbyB3ZSB3b24ndCBhY2Nlc3MgaXQgbGF0ZXIgd2hlbiBrZXJuZWwgYWxyZWFkeSBvd25zIGl0ICovCi0JY2hhbi0+cnhfc2tiPU5VTEw7Ci0JCi0JLyogRGVjYXBzdWxhdGUgcGFja2V0LCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIXNrYi0+cHJvdG9jb2wgJiYgIXdhbnJvdXRlcl90eXBlX3RyYW5zKHNrYiwgZGV2KSl7Ci0JCS8qIGNhbid0IGRlY2Fwc3VsYXRlIHBhY2tldCAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCSsrY2hhbi0+aWZzdGF0cy5yeF9lcnJvcnM7Ci0JCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkrK2NhcmQtPndhbmRldi5zdGF0cy5yeF9kcm9wcGVkOwotCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCi0JfWVsc2V7Ci0JCWlmKCBoYW5kbGVfSVBYV0FOKHNrYi0+ZGF0YSwgY2hhbi0+bmFtZSwgCi0JCQkJICBjaGFuLT5lbmFibGVfSVBYLCBjaGFuLT5uZXR3b3JrX251bWJlciwgCi0JCQkJICBza2ItPnByb3RvY29sKSl7Ci0KLQkJCWlmKCBjaGFuLT5lbmFibGVfSVBYICl7Ci0JCQkJaWYoY2hhbl9zZW5kKGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwwKSl7Ci0JCQkJCWNoYW4tPnR4X3NrYiA9IHNrYjsKLQkJCQl9ZWxzZXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJCX0KLQkJCX1lbHNlewotCQkJCS8qIGluY3JlbWVudCBJUFggcGFja2V0IGRyb3BwZWQgc3RhdGlzdGljICovCi0JCQkJKytjaGFuLT5pZnN0YXRzLnJ4X2Ryb3BwZWQ7Ci0JCQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9iZnJfbm90X3Bhc3NlZF90b19zdGFjazsKLQkJCX0KLQkJfWVsc2V7Ci0JCQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0JCQljaGFuLT5pZnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQkJKytjaGFuLT5pZnN0YXRzLnJ4X3BhY2tldHM7Ci0JCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci0JCQluZXRpZl9yeChza2IpOwotCQl9Ci0JfQotCQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgaW50IHdhbnBpcGVfcHVsbF9kYXRhX2luX3NrYihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICoqc2tiKQotewotCXZvaWQgKmJ1ZnB0cjsKLQlUWDI1TWJveCogcnhtYiA9IGNhcmQtPnJ4bWI7Ci0JdW5zaWduZWQgbGVuID0gcnhtYi0+Y21kLmxlbmd0aDsJLyogcGFja2V0IGxlbmd0aCAqLwotCXVuc2lnbmVkIHFkbSA9IHJ4bWItPmNtZC5xZG07CQkvKiBRLEQgYW5kIE0gYml0cyAqLwotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSAqc2tiOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSl7Ci0JCWlmIChjaGFuLT5kcm9wX3NlcXVlbmNlKXsKLQkJCWlmICghKHFkbSAmIDB4MDEpKXsgCi0JCQkJY2hhbi0+ZHJvcF9zZXF1ZW5jZSA9IDA7Ci0JCQl9Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQluZXdfc2tiID0gY2hhbi0+cnhfc2tiOwotCX1lbHNlewotCQkvKiBBZGQgb24gdGhlIEFQSSBoZWFkZXIgdG8gdGhlIHJlY2VpdmVkCi0gICAgICAgICAgICAgICAgICogZGF0YSAKLQkJICovCi0JCWxlbiArPSBzaXplb2YoeDI1YXBpX2hkcl90KTsKLQl9Ci0KLQlpZiAobmV3X3NrYiA9PSBOVUxMKXsKLQkJaW50IGJ1ZnNpemU7Ci0KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSl7Ci0JCQlidWZzaXplID0gKHFkbSAmIDB4MDEpID8gZGV2LT5tdHUgOiBsZW47Ci0JCX1lbHNlewotCQkJYnVmc2l6ZSA9IGxlbjsKLQkJfQotCi0JCS8qIEFsbG9jYXRlIG5ldyBzb2NrZXQgYnVmZmVyICovCi0JCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGJ1ZnNpemUgKyBkZXYtPmhhcmRfaGVhZGVyX2xlbik7Ci0JCWlmIChuZXdfc2tiID09IE5VTEwpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQljaGFuLT5kcm9wX3NlcXVlbmNlID0gMTsJLyogc2V0IGZsYWcgKi8KLQkJCSsrY2hhbi0+aWZzdGF0cy5yeF9kcm9wcGVkOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlpZiAoc2tiX3RhaWxyb29tKG5ld19za2IpIDwgbGVuKXsKLQkJLyogTm8gcm9vbSBmb3IgdGhlIHBhY2tldC4gQ2FsbCBvZmYgdGhlIHdob2xlIHRoaW5nISAqLwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOwotCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKXsKLQkJCWNoYW4tPnJ4X3NrYiA9IE5VTEw7Ci0JCQlpZiAocWRtICYgMHgwMSl7IAotCQkJCWNoYW4tPmRyb3Bfc2VxdWVuY2UgPSAxOwotCQkJfQotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVuZXhwZWN0ZWRseSBsb25nIHBhY2tldCBzZXF1ZW5jZSAiCi0JCQkib24gaW50ZXJmYWNlICVzIVxuIiwgY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQkJKytjaGFuLT5pZnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7Ci0JCXJldHVybiAxOwotCX0KLQotCWJ1ZnB0ciA9IHNrYl9wdXQobmV3X3NrYixsZW4pOwotCi0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkvKiBGaWxsIGluIHRoZSB4MjVhcGkgaGVhZGVyIAotCQkgKi8KLQkJeDI1YXBpX3QgKiBhcGlfZGF0YSA9ICh4MjVhcGlfdCopYnVmcHRyOwotCQlhcGlfZGF0YS0+aGRyLnFkbSA9IHJ4bWItPmNtZC5xZG07Ci0JCWFwaV9kYXRhLT5oZHIuY2F1c2UgPSByeG1iLT5jbWQuY2F1c2U7Ci0JCWFwaV9kYXRhLT5oZHIuZGlhZ24gPSByeG1iLT5jbWQuZGlhZ247Ci0JCWFwaV9kYXRhLT5oZHIubGVuZ3RoID0gcnhtYi0+Y21kLmxlbmd0aDsKLQkJbWVtY3B5KGFwaV9kYXRhLT5kYXRhLCByeG1iLT5kYXRhLCByeG1iLT5jbWQubGVuZ3RoKTsKLQl9ZWxzZXsKLQkJbWVtY3B5KGJ1ZnB0ciwgcnhtYi0+ZGF0YSwgbGVuKTsKLQl9Ci0KLQluZXdfc2tiLT5kZXYgPSBkZXY7Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQluZXdfc2tiLT5tYWMucmF3ID0gbmV3X3NrYi0+ZGF0YTsKLQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhYMjVfUFJPVCk7Ci0JCW5ld19za2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9EQVRBOwotCX1lbHNlewotCQluZXdfc2tiLT5wcm90b2NvbCA9IGNoYW4tPnByb3RvY29sOwotCQljaGFuLT5yeF9za2IgPSBuZXdfc2tiOwotCX0KLQotCS8qIElmIHFkbSBiaXQgaXMgc2V0LCBtb3JlIGRhdGEgaXMgY29taW5nIAotICAgICAgICAgKiB0aHVzLCBleGl0IGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgYmVmb3JlCi0gICAgICAgICAqIHNlbmRpbmcgdGhlIHBhY2tldCB1cC4gKFVzZWQgYnkgcm91dGVyIG9ubHkpIAotCSAqLwotCWlmICgocWRtICYgMHgwMSkgJiYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gV0FOUElQRSkpIAotCQlyZXR1cm4gMTsJCi0KLQkqc2tiID0gbmV3X3NrYjsgCi0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHR4X2ludHIKLSAqICAKLSAqIAlUcmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCUZvciBlYWNoIGRldiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gc2VuZC4KLSAqCUlmIGRhdGEgYXZhaWxhYmxlLCB0cmFuc21pdC4gCQotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgdHhfaW50ciAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBtb3JlX3RvX3R4PTA7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbj1OVUxMOwotCWludCBpPTA7CQotCi0JaWYgKGNhcmQtPnUueC50eF9kZXYgPT0gTlVMTCl7Ci0JCWNhcmQtPnUueC50eF9kZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCX0KLQotCWRldiA9IGNhcmQtPnUueC50eF9kZXY7Ci0KLQlmb3IgKDs7KXsKLQotCQljaGFuID0gZGV2LT5wcml2OwotCQlpZiAoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKXsKLQkJCS8qIERldmljZSB3YXMgc2V0IHRvIHRyYW5zbWl0LCBjaGVjayBpZiB0aGUgVFgKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZSAKLQkJCSAqLwkJCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9DT05ORUNURUQpewotCQkJCWNoYW4tPnRyYW5zbWl0X2xlbmd0aCA9IDA7Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCQkJCWNoYW4tPnR4X29mZnNldD0wOwotCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCQkJCXdha2V1cF9za19iaChkZXYpOwotCQkJCQl9ZWxzZXsKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQkJfQotCQkJCX0KLQkJCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJCQlicmVhazsKLQkJCX0JCQkJCi0KLQkJCWlmICgoc3RhdHVzLT5jZmxhZ3NbY2hhbi0+Y2hfaWR4XSAmIDB4NDAgfHwgY2FyZC0+dS54LkxBUEJfaGRsYykgJiYgCi0JCQkgICAgICgqY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyAmIDB4NDApICl7Ci0JCQkJLyogVHggYnVmZmVyIGF2YWlsYWJsZSwgd2UgY2FuIHNlbmQgKi8KLQkJCQkKLQkJCQlpZiAodHhfaW50cl9zZW5kKGNhcmQsIGRldikpewotCQkJCQltb3JlX3RvX3R4PTE7Ci0JCQkJfQotCi0JCQkJLyogSWYgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UgcHJlc2VudCwgbW92ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGV2aWNlIHBvaW50ZXIgdG8gdGhlIG5leHQgaW50ZXJmYWNlLCBzbyBvbiB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG5leHQgVFggaW50ZXJydXB0IHdlIHdpbGwgdHJ5IHNlbmRpbmcgZnJvbSBpdC4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCWRldiA9IG1vdmVfZGV2X3RvX25leHQoY2FyZCxkZXYpOwotCQkJCWJyZWFrOwotCQkJfWVsc2V7Ci0JCQkJLyogVHggYnVmZmVycyBub3QgYXZhaWxhYmxlLCBidXQgZGV2aWNlIHNldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgVFggaW50ZXJydXB0LiAgU2V0IG1vcmVfdG9fdHggYW5kIHRyeSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHRyYW5zbWl0IGZvciBvdGhlciBkZXZpY2VzLgotCQkJCSAqLwotCQkJCW1vcmVfdG9fdHg9MTsKLQkJCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJCX0KLQotCQl9ZWxzZXsKLQkJCS8qIFRoaXMgZGV2aWNlIHdhcyBub3Qgc2V0IHRvIHRyYW5zbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICogZ28gdG8gbmV4dCAKLQkJCSAqLwotCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCX0JCi0KLQkJaWYgKCsraSA9PSBjYXJkLT51Lngubm9fZGV2KXsKLQkJCWlmICghbW9yZV90b190eCl7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBOb3RoaW5nIHRvIFNlbmQgaW4gVFggSU5UUlxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JfSAvL0VuZCBvZiBGT1IKLQotCWNhcmQtPnUueC50eF9kZXYgPSBkZXY7Ci0JCi0JaWYgKCFtb3JlX3RvX3R4KXsKLQkJLyogaWYgYW55IG90aGVyIGludGVyZmFjZXMgaGF2ZSB0cmFuc21pdCBpbnRlcnJ1cHRzIHBlbmRpbmcsICovCi0JCS8qIGRvIG5vdCBkaXNhYmxlIHRoZSBnbG9iYWwgdHJhbnNtaXQgaW50ZXJydXB0ICovCi0JCWlmICghKC0tY2FyZC0+dS54LnR4X2ludGVycnVwdHNfcGVuZGluZykpewotCQkJc3RhdHVzLT5pbWFzayAmPSB+SU5UUl9PTl9UWF9GUkFNRTsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBtb3ZlX2Rldl90b19uZXh0Ci0gKiAgCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLXN0cnVjdCBuZXRfZGV2aWNlICptb3ZlX2Rldl90b19uZXh0KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpZiAoY2FyZC0+dS54Lm5vX2RldiAhPSAxKXsKLQkJaWYgKCEqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpKQotCQkJcmV0dXJuIGNhcmQtPndhbmRldi5kZXY7Ci0JCWVsc2UKLQkJCXJldHVybiAqKChzdHJ1Y3QgbmV0X2RldmljZSAqKilkZXYtPnByaXYpOwotCX0KLQlyZXR1cm4gZGV2OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIHR4X2ludHJfc2VuZAotICogIAotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB0eF9pbnRyX3NlbmQoc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7IAotCi0JaWYgKGNoYW5fc2VuZCAoZGV2LGNoYW4tPnRyYW5zbWl0X2J1ZmZlcixjaGFuLT50cmFuc21pdF9sZW5ndGgsMSkpewotCQkgCi0gICAgICAgICAgICAgICAgLyogUGFja2V0IHdhcyBzcGxpdCB1cCBkdWUgdG8gaXRzIHNpemUsIGRvIG5vdCBkaXNhYmxlCi0gICAgICAgICAgICAgICAgICogdHhfaW50ciAKLSAgICAgICAgICAgICAgICAgKi8KLQkJcmV0dXJuIDE7Ci0JfQotCi0JY2hhbi0+dHJhbnNtaXRfbGVuZ3RoPTA7Ci0JYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRyaXZlcl9idXN5LDApOwotCWNoYW4tPnR4X29mZnNldD0wOwotCi0JLyogSWYgd2UgYXJlIGluIEFQSSBtb2RlLCB3YWtldXAgdGhlIAotICAgICAgICAgKiBzb2NrIEJIIGhhbmRsZXIsIG5vdCB0aGUgTkVUX0JIICovCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSl7Ci0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkJd2FrZXVwX3NrX2JoKGRldik7Ci0JCX1lbHNlewotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB0aW1lcl9pbnRyCi0gKiAgCi0gKiAJVGltZXIgaW50ZXJydXB0IGhhbmRsZXIuCi0gKglDaGVjayB3aG8gY2FsbGVkIHRoZSB0aW1lciBpbnRlcnJ1cHQgYW5kIHBlcmZvcm0KLSAqICAgICAgYWN0aW9uIGFjY29yZGluZ2x5LgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgdGltZXJfaW50ciAoc2RsYV90ICpjYXJkKQotewotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQyl7Ci0KLQkJaWYgKHRpbWVyX2ludHJfY21kX2V4ZWMoY2FyZCkgPT0gMCl7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0KLQkJCQl+VE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDOwotCQl9Ci0KLQl9ZWxzZSAgaWYoY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VEUF9QS1QpIHsKLQotCQlpZiAoKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCkgJiYgCi0JCSAgICBjYXJkLT51LngudWRwX3R5cGUgPT0gVURQX1hQSVBFX1RZUEUpewotCi0gICAgICAgICAgICAgICAgICAgIAlpZihwcm9jZXNzX3VkcF9tZ210X3BrdChjYXJkKSkgewotCQkgICAgICAgICAgICAgICAgY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCQl+VE1SX0lOVF9FTkFCTEVEX1VEUF9QS1Q7Ci0JCQl9Ci0JCX0KLQotCX1lbHNlIGlmIChjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkUpIHsKLQotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+dS54LnBvbGxfZGV2aWNlOwotCQl4MjVfY2hhbm5lbF90ICpjaGFuID0gTlVMTDsKLQotCQlpZiAoIWRldil7Ci0JCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJj0gflRNUl9JTlRfRU5BQkxFRF9QT0xMX0FDVElWRTsKLQkJCXJldHVybjsKLQkJfQotCQljaGFuID0gZGV2LT5wcml2OwotCi0JCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IENsb3NpbmcgZG93biBJZGxlIGxpbmsgJXMgb24gTENOICVkXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLGNoYW4tPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7IAotCQljaGFuLT5pX3RpbWVvdXRfc29mYXIgPSBqaWZmaWVzOwotCQljaGFuX2Rpc2MoZGV2KTsJCi0gICAgICAgICAJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9BQ1RJVkU7Ci0JCWNhcmQtPnUueC5wb2xsX2RldmljZT1OVUxMOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT04pIHsKLQotCQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0NPTk5FQ1RFRCk7Ci0JCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixjYXJkLT5tYm94KTsJCi0JCX0KLQotCQkvKiAweDhGIGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCBJTlRSX09OX1JYX0ZSQU1FfAkKLQkJCQkJSU5UUl9PTl9UWF9GUkFNRXwKLQkJCQkJSU5UUl9PTl9NT0RFTV9TVEFUVVNfQ0hBTkdFfAotCQkJCQkvL0lOVFJfT05fQ09NTUFORF9DT01QTEVURXwKLQkJCQkJWDI1X0FTWV9UUkFOU19JTlRSX1BFTkRJTkcgfAotCQkJCQlJTlRSX09OX1RJTUVSIHwKLQkJCQkJRElSRUNUX1JYX0lOVFJfVVNBR0UKLQkJCQkpOyAKLQotCQlzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RYX0ZSQU1FOwkvKiBtYXNrIFR4IGludGVycnVwdHMgKi8KLQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09OOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0NPTk5FQ1RfT0ZGKSB7Ci0KLQkJLy9wcmludGsoS0VSTl9JTkZPICJQb2xsIGNvbm5lY3QsIFR1cm5pbmcgT0ZGXG4iKTsKLQkJZGlzY29ubmVjdChjYXJkKTsKLQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09GRjsKLQotCX1lbHNlIGlmIChjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfUE9MTF9ESVNDT05ORUNUKSB7Ci0KLQkJLy9wcmludGsoS0VSTl9JTkZPICJQT2xsIGRpc2Nvbm5lY3QsIHRyeWluZyB0byBjb25uZWN0XG4iKTsKLQkJY29ubmVjdChjYXJkKTsKLQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfUE9MTF9ESVNDT05ORUNUOwotCi0JfWVsc2UgaWYgKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUpewotCi0JCWlmICgqY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyAmIDB4NDApewotCQkJeDI1X2dldF9lcnJfc3RhdHMoY2FyZCk7Ci0JCQl4MjVfZ2V0X3N0YXRzKGNhcmQpOwotCQkJY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkICY9IH5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCQl9Ci0JfQotCi0JaWYoIWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCl7Ci0JCS8vcHJpbnRrKEtFUk5fSU5GTyAiVHVybmluZyBUaW1lciBPZmYgXG4iKTsKLSAgICAgICAgICAgICAgICBzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RJTUVSOwkKLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlNb2RlbSBzdGF0dXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgc3RhdHVzX2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQotCS8qIEFkZGVkIHRvIGF2b2lkIE1vZGVtIHN0YXR1cyBtZXNzYWdlIGZsb29kaW5nICovCi0Jc3RhdGljIFRYMjVNb2RlbVN0YXR1cyBsYXN0X3N0YXQ7Ci0KLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JVFgyNU1vZGVtU3RhdHVzICptb2RlbV9zdGF0dXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9SRUFEX01PREVNX1NUQVRVUzsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycil7IAotCQl4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfUkVBRF9NT0RFTV9TVEFUVVMsIDApOwotCX1lbHNlewotCQotCQltb2RlbV9zdGF0dXMgPSAoVFgyNU1vZGVtU3RhdHVzKiltYm94LT5kYXRhOwkKLQkKLSAgICAgICAgICAgCS8qIENoZWNrIGlmIHRoZSBsYXN0IHN0YXR1cyB3YXMgdGhlIHNhbWUKLSAgICAgICAgICAgCSAqIGlmIGl0IHdhcywgZG8gTk9UIHByaW50IG1lc3NhZ2UgYWdhaW4gKi8KLQkKLQkJaWYgKGxhc3Rfc3RhdC5zdGF0dXMgIT0gbW9kZW1fc3RhdHVzLT5zdGF0dXMpewotCi0JICAgICAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb2RlbSBTdGF0dXMgQ2hhbmdlOiBEQ0Q9JXMsIENUUz0lc1xuIiwKLQkJCQljYXJkLT5kZXZuYW1lLERDRChtb2RlbV9zdGF0dXMtPnN0YXR1cyksQ1RTKG1vZGVtX3N0YXR1cy0+c3RhdHVzKSk7Ci0KLQkJCWxhc3Rfc3RhdC5zdGF0dXMgPSBtb2RlbV9zdGF0dXMtPnN0YXR1czsKLQkJCi0JCQlpZiAoY2FyZC0+dS54Lm9vYl9vbl9tb2RlbSl7Ci0KLQkJCQltYm94LT5jbWQucGt0VHlwZSA9IG1ib3gtPmNtZC5jb21tYW5kOwotCQkJCW1ib3gtPmNtZC5yZXN1bHQgPSAweDA4OwotCi0JCQkJLyogU2VuZCBhIE9PQiB0byBhbGwgY29ubmVjdGVkIHNvY2tldHMgKi8KLQkJCQlmb3IgKGRldiA9IGNhcmQtPndhbmRldi5kZXY7IGRldjsKLQkJCQkgICAgIGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlKiopZGV2LT5wcml2KSkgewotCQkJCQljaGFuPWRldi0+cHJpdjsKLQkJCQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJCQkJCXNlbmRfb29iX21zZyhjYXJkLGRldixtYm94KTsJCQkJCi0JCQkJCX0KLQkJCQl9Ci0KLQkJCQkvKiBUaGUgbW9kZW0gT09CIG1lc3NhZ2Ugd2lsbCBwcm9iYWJseSBraWxsIHRoZQotCQkJCSAqIHRoZSBsaW5rLiBJZiB3ZSBkb24ndCBjbGVhciB0aGUgZmxhZyBoZXJlLAotCQkJCSAqIGEgZGVhZGxvY2sgY291bGQgb2NjdXIgKi8gCi0JCQkJaWYgKGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KSl7Ci0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX1NUQVRVUzsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycil7IAotCQl4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19MSU5LX1NUQVRVUywgMCk7Ci0JfQotCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlOZXR3b3JrIGV2ZW50IGludGVycnVwdCBoYW5kbGVyLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIGV2ZW50X2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQl4MjVfZmV0Y2hfZXZlbnRzKGNhcmQpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJU3B1cmlvdXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAJbyBwcmludCBhIHdhcm5pbmcKLSAqIAlvCSAKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBzcHVyX2ludHIgKHNkbGFfdCogY2FyZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci19Ci0KLQotLyoKLSAqCUJhY2tncm91bmQgUG9sbGluZyBSb3V0aW5lcyAgCi0gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCU1haW4gcG9sbGluZyByb3V0aW5lLgotICogCVRoaXMgcm91dGluZSBpcyByZXBlYXRlZGx5IGNhbGxlZCBieSB0aGUgV0FOUElQRSAndGhyZWFkJyB0byBhbGxvdyBmb3IKLSAqIAl0aW1lLWRlcGVuZGVudCBob3VzZWtlZXBpbmcgd29yay4KLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gVGhpcyByb3V0aW5lIG1heSBiZSBjYWxsZWQgb24gaW50ZXJydXB0IGNvbnRleHQgd2l0aCBhbGwgaW50ZXJydXB0cwotICogICAgCWVuYWJsZWQuIEJld2FyZSEKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB3cHhfcG9sbCAoc2RsYV90ICpjYXJkKQotewotCWlmICghY2FyZC0+d2FuZGV2LmRldil7Ci0JCWdvdG8gd3B4X3BvbGxfZXhpdDsKLQl9Ci0KLQlpZiAoY2FyZC0+b3Blbl9jbnQgIT0gY2FyZC0+dS54Lm51bV9vZl9jaCl7Ci0JCWdvdG8gd3B4X3BvbGxfZXhpdDsKLQl9Ci0JCi0JaWYgKHRlc3RfYml0KFBFUklfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCWdvdG8gd3B4X3BvbGxfZXhpdDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU0VORF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJZ290byB3cHhfcG9sbF9leGl0OwotCX0KLQotCXN3aXRjaChjYXJkLT53YW5kZXYuc3RhdGUpewotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlwb2xsX2FjdGl2ZShjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0FOX0NPTk5FQ1RJTkc6Ci0JCQlwb2xsX2Nvbm5lY3RpbmcoY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0JCQlwb2xsX2Rpc2Nvbm5lY3RlZChjYXJkKTsKLQkJCWJyZWFrOwotCX0KLQotd3B4X3BvbGxfZXhpdDoKLQljbGVhcl9iaXQoUE9MTF9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgdHJpZ2dlcl94MjVfcG9sbChzZGxhX3QgKmNhcmQpCi17Ci0Jc2NoZWR1bGVfd29yaygmY2FyZC0+dS54LngyNV9wb2xsX3dvcmspOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIHBoeXNpY2FsIGxpbmsgZXN0YWJsaXNobWVudCBwaGFzZS4KLSAqIAlvIGlmIGNvbm5lY3Rpb24gdGltZWQgb3V0LCBkaXNjb25uZWN0IHRoZSBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgcG9sbF9jb25uZWN0aW5nIChzZGxhX3QqIGNhcmQpCi17Ci0Jdm9sYXRpbGUgVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQlpZiAoc3RhdHVzLT5nZmxhZ3MgJiBYMjVfSERMQ19BQk0pewotCi0JCXRpbWVyX2ludHJfZXhlYyAoY2FyZCwgVE1SX0lOVF9FTkFCTEVEX1BPTExfQ09OTkVDVF9PTik7Ci0KLQl9ZWxzZSBpZiAoKGppZmZpZXMgLSBjYXJkLT5zdGF0ZV90aWNrKSA+IENPTk5FQ1RfVElNRU9VVCl7Ci0KLQkJdGltZXJfaW50cl9leGVjIChjYXJkLCBUTVJfSU5UX0VOQUJMRURfUE9MTF9DT05ORUNUX09GRik7Ci0KLQl9Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgcGh5c2ljYWwgbGluayBkaXNjb25uZWN0ZWQgcGhhc2UuCi0gKiAJbyBpZiBob2xkLWRvd24gdGltZW91dCBoYXMgZXhwaXJlZCBhbmQgdGhlcmUgYXJlIG9wZW4gaW50ZXJmYWNlcywgCi0gKgljb25uZWN0IGxpbmsuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBwb2xsX2Rpc2Nvbm5lY3RlZCAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IAotCXgyNV9jaGFubmVsX3QgKmNoYW47Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQlpZiAoIWNhcmQtPnUueC5MQVBCX2hkbGMgJiYgY2FyZC0+b3Blbl9jbnQgJiYgCi0JICAgICgoamlmZmllcyAtIGNhcmQtPnN0YXRlX3RpY2spID4gSE9MRF9ET1dOX1RJTUUpKXsKLQkJdGltZXJfaW50cl9leGVjKGNhcmQsIFRNUl9JTlRfRU5BQkxFRF9QT0xMX0RJU0NPTk5FQ1QpOwotCX0KLQotCi0JaWYgKChkZXY9Y2FyZC0+d2FuZGV2LmRldikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKChjaGFuPWRldi0+cHJpdikgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJICYmIAotCSAgICBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpICYmIAotCSAgICBjYXJkLT51LnguTEFQQl9oZGxjKXsKLQotCQlpZiAoIShjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUMpKSAKLQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUM7Ci0KLQkJaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fVElNRVIpKQotCQkJc3RhdHVzLT5pbWFzayB8PSBJTlRSX09OX1RJTUVSOwotCX0JCi0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUhhbmRsZSBhY3RpdmUgbGluayBwaGFzZS4KLSAqIAlvIGZldGNoIFguMjUgYXN5bmNocm9ub3VzIGV2ZW50cy4KLSAqIAlvIGtpY2sgb2ZmIHRyYW5zbWlzc2lvbiBvbiBhbGwgaW50ZXJmYWNlcy4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIHBvbGxfYWN0aXZlIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWZvciAoZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsgZGV2OwotCSAgICAgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSl7Ci0JCXgyNV9jaGFubmVsX3QqIGNoYW4gPSBkZXYtPnByaXY7Ci0KLQkJLyogSWYgU1ZDIGhhcyBiZWVuIGlkbGUgbG9uZyBlbm91Z2gsIGNsb3NlIHZpcnR1YWwgY2lyY3VpdCAqLwotCQlpZiAoIGNoYW4tPmNvbW1vbi5zdmMgJiYgCi0JCSAgICAgY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9DT05ORUNURUQgJiYKLQkJICAgICBjaGFuLT5jb21tb24udXNlZGJ5ID09IFdBTlBJUEUgKXsKLQkJCi0JCQlpZiggKGppZmZpZXMgLSBjaGFuLT5pX3RpbWVvdXRfc29mYXIpIC8gSFogPiBjaGFuLT5pZGxlX3RpbWVvdXQgKXsKLQkJCQkvKiBDbG9zZSBzdmMgKi8KLQkJCQljYXJkLT51LngucG9sbF9kZXZpY2U9ZGV2OwotCQkJCXRpbWVyX2ludHJfZXhlYwkoY2FyZCwgVE1SX0lOVF9FTkFCTEVEX1BPTExfQUNUSVZFKTsKLQkJCX0KLQkJfQotCi0jaWZkZWYgUFJJTlRfREVCVUcKLQkJY2hhbi0+aWZzdGF0cy50eF9jb21wcmVzc2VkID0gYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKTsKLQkJY2hhbi0+aWZzdGF0cy50eF9lcnJvcnMgPSBjaGFuLT5jb21tb24uc3RhdGU7Ci0JCWNoYW4tPmlmc3RhdHMucnhfZmlmb19lcnJvcnMgPSBhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSk7Ci0JCSsrY2hhbi0+aWZzdGF0cy50eF9ieXRlczsKLQotCQljaGFuLT5pZnN0YXRzLnJ4X2ZpZm9fZXJyb3JzPWF0b21pY19yZWFkKCZjaGFuLT5jb21tb24uZGlzY29ubmVjdCk7Ci0JCWNoYW4tPmlmc3RhdHMubXVsdGljYXN0PWF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCQljaGFuLT5pZnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM9KmNhcmQtPnUueC5oZGxjX2J1Zl9zdGF0dXM7Ci0jZW5kaWYJCi0KLQkJaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJICYmIAotCQkgICAgYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKSAmJiAKLQkgICAgICAgICAgICAhY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0KLQkJCWlmICghKGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DTURfRVhFQykpIAotCQkJCWNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUM7Ci0KLQkJCWlmICghKHN0YXR1cy0+aW1hc2sgJiBJTlRSX09OX1RJTUVSKSkKLQkJCQlzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci0JCX0JCi0KLQkJaWYgKChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkgJiYgCi0JCSAgICAgYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0KSl7Ci0KLQkJCWlmIChjaGFuLT5jb21tb24uc3RhdGUgPT0gV0FOX0RJU0NPTk5FQ1RFRCl7Ci0JCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QsMCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQlhdG9taWNfc2V0KCZjaGFuLT5jb21tb24uY29tbWFuZCxYMjVfQ0xFQVJfQ0FMTCk7Ci0JCQlpZiAoIShjYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfQ01EX0VYRUMpKSAKLQkJCQljYXJkLT51LngudGltZXJfaW50X2VuYWJsZWQgfD0gVE1SX0lOVF9FTkFCTEVEX0NNRF9FWEVDOwotCi0JCQlpZiAoIShzdGF0dXMtPmltYXNrICYgSU5UUl9PTl9USU1FUikpCi0JCQkJc3RhdHVzLT5pbWFzayB8PSBJTlRSX09OX1RJTUVSOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyX2V4ZWMoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBjaGFyIFRZUEUpCi17Ci0JVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0JY2FyZC0+dS54LnRpbWVyX2ludF9lbmFibGVkIHw9IFRZUEU7Ci0JaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fVElNRVIpKQotCQlzdGF0dXMtPmltYXNrIHw9IElOVFJfT05fVElNRVI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAqIFNETEEgRmlybXdhcmUtU3BlY2lmaWMgRnVuY3Rpb25zIAotICoKLSAqICBBbG1vc3QgYWxsIFguMjUgY29tbWFuZHMgY2FuIHVuZXhwZXRlZGx5IGZhaWwgZHVlIHRvIHNvIGNhbGxlZCAnWC4yNQotICogIGFzeW5jaHJvbm91cyBldmVudHMnIHN1Y2ggYXMgcmVzdGFydCwgaW50ZXJydXB0LCBpbmNvbWluZyBjYWxsIHJlcXVlc3QsCi0gKiAgY2FsbCBjbGVhciByZXF1ZXN0LCBldGMuICBUaGV5IGNhbid0IGJlIGlnbm9yZWQgYW5kIGhhdmUgdG8gYmUgZGVsdCB3aXRoCi0gKiAgaW1tZWRpYXRlbHkuICBUbyB0YWNrbGUgd2l0aCB0aGlzIHByb2JsZW0gd2UgZXhlY3V0ZSBlYWNoIGludGVyZmFjZSAKLSAqICBjb21tYW5kIGluIGEgbG9vcCB1bnRpbCBnb29kIHJldHVybiBjb2RlIGlzIHJlY2VpdmVkIG9yIG1heGltdW0gbnVtYmVyIAotICogIG9mIHJldHJpZXMgaXMgcmVhY2hlZC4gIEVhY2ggaW50ZXJmYWNlIGNvbW1hbmQgcmV0dXJucyBub24temVybyByZXR1cm4gCi0gKiAgY29kZSwgYW4gYXN5bmNocm9ub3VzIGV2ZW50L2Vycm9yIGhhbmRsZXIgeDI1X2Vycm9yKCkgaXMgY2FsbGVkLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlSZWFkIFguMjUgZmlybXdhcmUgdmVyc2lvbi4KLSAqCQlQdXQgY29kZSB2ZXJzaW9uIGFzIEFTQ0lJIHN0cmluZyBpbiBzdHIuIAotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZ2V0X3ZlcnNpb24gKHNkbGFfdCogY2FyZCwgY2hhciogc3RyKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfUkVBRF9DT0RFX1ZFUlNJT047Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJgotCQkgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1JFQURfQ09ERV9WRVJTSU9OLCAwKSk7Ci0KLQlpZiAoIWVyciAmJiBzdHIpCi0JewotCQlpbnQgbGVuID0gbWJveC0+Y21kLmxlbmd0aDsKLQotCQltZW1jcHkoc3RyLCBtYm94LT5kYXRhLCBsZW4pOwotCQlzdHJbbGVuXSA9ICdcMCc7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlDb25maWd1cmUgYWRhcHRlci4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCBUWDI1Q29uZmlnKiBjb25mKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWVtY3B5KG1ib3gtPmRhdGEsICh2b2lkKiljb25mLCBzaXplb2YoVFgyNUNvbmZpZykpOwotCQltYm94LT5jbWQubGVuZ3RoICA9IHNpemVvZihUWDI1Q29uZmlnKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfU0VUX0NPTkZJR1VSQVRJT047Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfU0VUX0NPTkZJR1VSQVRJT04sIDApKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQ29uZmlndXJlIGFkYXB0ZXIgZm9yIEhETEMgb25seS4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaGRsY19jb25maWd1cmUgKHNkbGFfdCogY2FyZCwgVFgyNUNvbmZpZyogY29uZikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkb3sKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1lbWNweShtYm94LT5kYXRhLCAodm9pZCopY29uZiwgc2l6ZW9mKFRYMjVDb25maWcpKTsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzaXplb2YoVFgyNUNvbmZpZyk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0hETENfU0VUX0NPTkZJRzsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9TRVRfQ09ORklHVVJBVElPTiwgMCkpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzZXRfaGRsY19sZXZlbCAoc2RsYV90KiBjYXJkKQotewotCi0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG97Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFNFVF9QUk9UT0NPTF9MRVZFTDsKLQkJbWJveC0+Y21kLmxlbmd0aCA9IDE7Ci0JCW1ib3gtPmRhdGFbMF0gPSBIRExDX0xFVkVMOyAvL3wgRE9fSERMQ19MRVZFTF9FUlJPUl9DSEVDS0lORzsgCQotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgU0VUX1BST1RPQ09MX0xFVkVMLCAwKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogR2V0IGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3MuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZ2V0X2Vycl9zdGF0cyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19SRUFEX0NPTU1fRVJSOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfUkVBRF9DT01NX0VSUiwgMCkpOwotCQotCWlmICghZXJyKQotCXsKLQkJVEhkbGNDb21tRXJyKiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyAgICA9IHN0YXRzLT5yeE92ZXJydW47Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzICAgICA9IHN0YXRzLT5yeEJhZENyYzsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgID0gc3RhdHMtPnJ4QWJvcnRlZDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gc3RhdHMtPnR4QWJvcnRlZDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUdldCBwcm90b2NvbCBzdGF0aXN0aWNzLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfZ2V0X3N0YXRzIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9SRUFEX1NUQVRJU1RJQ1M7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfUkVBRF9TVEFUSVNUSUNTLCAwKSkgOwotCQotCWlmICghZXJyKQotCXsKLQkJVFgyNVN0YXRzKiBzdGF0cyA9ICh2b2lkKiltYm94LT5kYXRhOwotCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9wYWNrZXRzID0gc3RhdHMtPnJ4RGF0YTsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHMgPSBzdGF0cy0+dHhEYXRhOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJQ2xvc2UgSERMQyBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfY2xvc2VfaGRsYyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX0NMT1NFOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfTElOS19DTE9TRSwgMCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCU9wZW4gSERMQyBsaW5rLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfb3Blbl9oZGxjIChzZGxhX3QqIGNhcmQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9IRExDX0xJTktfT1BFTjsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9IRExDX0xJTktfT1BFTiwgMCkpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldHVwIEhETEMgbGluay4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCB4MjVfc2V0dXBfaGRsYyAoc2RsYV90KiBjYXJkKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX1NFVFVQOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0hETENfTElOS19TRVRVUCwgMCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCAocmFpc2UvZHJvcCkgRFRSLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfc2V0X2R0ciAoc2RsYV90KiBjYXJkLCBpbnQgZHRyKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+ZGF0YVswXSA9IDA7Ci0JCW1ib3gtPmRhdGFbMl0gPSAwOwotCQltYm94LT5kYXRhWzFdID0gZHRyID8gMHgwMiA6IDB4MDE7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gMzsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfU0VUX0dMT0JBTF9WQVJTOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X1NFVF9HTE9CQUxfVkFSUywgMCkpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTZXQgaW50ZXJydXB0IG1vZGUuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIGludCBtb2RlKQotewotCVRYMjVNYm94KiBtYm94ID0gY2FyZC0+bWJveDsKLSAgCWludCByZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JaW50IGVycjsKLQotCWRvCi0JewotCQltZW1zZXQoJm1ib3gtPmNtZCwgMCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQkJbWJveC0+ZGF0YVswXSA9IG1vZGU7Ci0JCWlmIChjYXJkLT5ody5md2lkID09IFNGSURfWDI1XzUwOCl7Ci0JCQltYm94LT5kYXRhWzFdID0gY2FyZC0+aHcuaXJxOwotCQkJbWJveC0+ZGF0YVsyXSA9IDI7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gMzsKLQkJfWVsc2UgewotCQkgCW1ib3gtPmNtZC5sZW5ndGggID0gMTsKLQkJfQotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9TRVRfSU5URVJSVVBUX01PREU7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfU0VUX0lOVEVSUlVQVF9NT0RFLCAwKSk7Ci0JCi0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVJlYWQgWC4yNSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9nZXRfY2hhbl9jb25mIChzZGxhX3QqIGNhcmQsIHgyNV9jaGFubmVsX3QqIGNoYW4pCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgbGNuID0gY2hhbi0+Y29tbW9uLmxjbjsKLQlpbnQgZXJyOwotCi0JZG97Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQltYm94LT5jbWQubGNuICAgICA9IGxjbjsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfUkVBRF9DSEFOTkVMX0NPTkZJRzsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9SRUFEX0NIQU5ORUxfQ09ORklHLCBsY24pKTsKLQotCWlmICghZXJyKQotCXsKLQkJVFgyNVN0YXR1cyogc3RhdHVzID0gY2FyZC0+ZmxhZ3M7Ci0KLQkJLyogY2FsY3VsYXRlIGFuIG9mZnNldCBpbnRvIHRoZSBhcnJheSBvZiBzdGF0dXMgYnl0ZXMgKi8KLQkJaWYgKGNhcmQtPnUueC5oaV9zdmMgPD0gWDI1X01BWF9DSEFOKXsgCi0KLQkJCWNoYW4tPmNoX2lkeCA9IGxjbiAtIDE7Ci0KLQkJfWVsc2V7Ci0JCQlpbnQgb2Zmc2V0OwotCi0JCQkvKiBGSVg6IEFwciAxNCAyMDAwIDogTmVuYWQgQ29yYmljCi0JCQkgKiBUaGUgZGF0YSBmaWVsZCB3YXMgYmVpbmcgY29tcGFyZWQgdG8gMHgxRiB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICogJyYmJyBpbnN0ZWFkIG9mICcmJy4gCi0JCQkgKiBUaGlzIGNhdXNlZCBYMjVBUEkgdG8gZmFpbCBmb3IgTENOcyBncmVhdGVyIHRoYW4gMjU1LgotCQkJICovCi0JCQlzd2l0Y2ggKG1ib3gtPmRhdGFbMF0gJiAweDFGKQotCQkJewotCQkJCWNhc2UgMHgwMTogCi0JCQkJCW9mZnNldCA9IHN0YXR1cy0+cHZjX21hcDsgYnJlYWs7Ci0JCQkJY2FzZSAweDAzOiAKLQkJCQkJb2Zmc2V0ID0gc3RhdHVzLT5pY2NfbWFwOyBicmVhazsKLQkJCQljYXNlIDB4MDc6IAotCQkJCQlvZmZzZXQgPSBzdGF0dXMtPnR3Y19tYXA7IGJyZWFrOwotCQkJCWNhc2UgMHgwQjogCi0JCQkJCW9mZnNldCA9IHN0YXR1cy0+b2djX21hcDsgYnJlYWs7Ci0JCQkJZGVmYXVsdDogCi0JCQkJCW9mZnNldCA9IDA7Ci0JCQl9Ci0JCQljaGFuLT5jaF9pZHggPSBsY24gLSAxIC0gb2Zmc2V0OwotCQl9Ci0KLQkJLyogZ2V0IGFjdHVhbCB0cmFuc21pdCBwYWNrZXQgc2l6ZSBvbiB0aGlzIGNoYW5uZWwgKi8KLQkJc3dpdGNoKG1ib3gtPmRhdGFbMV0gJiAweDM4KQotCQl7Ci0JCQljYXNlIDB4MDA6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMTY7IAotCQkJCWJyZWFrOwotCQkJY2FzZSAweDA4OiAKLQkJCQljaGFuLT50eF9wa3Rfc2l6ZSA9IDMyOyAKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgxMDogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSA2NDsgCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MTg6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMTI4OyAKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgyMDogCi0JCQkJY2hhbi0+dHhfcGt0X3NpemUgPSAyNTY7IAotCQkJCWJyZWFrOwotCQkJY2FzZSAweDI4OiAKLQkJCQljaGFuLT50eF9wa3Rfc2l6ZSA9IDUxMjsgCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MzA6IAotCQkJCWNoYW4tPnR4X3BrdF9zaXplID0gMTAyNDsgCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGNhcmQtPnUueC5sb2dnaW5nKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgcGFja2V0IHNpemUgb24gTENOICVkIGlzICVkLlxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBsY24sIGNoYW4tPnR4X3BrdF9zaXplKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCVBsYWNlIFguMjUgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9wbGFjZV9jYWxsIChzZGxhX3QqIGNhcmQsIHgyNV9jaGFubmVsX3QqIGNoYW4pCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCWNoYXIgc3RyWzY0XTsKLQotCi0JaWYgKGNoYW4tPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSl7Ci0JCXNwcmludGYoc3RyLCAiLWQlcyAtdUNDIiwgY2hhbi0+YWRkcik7Ci0JCi0JfWVsc2UgaWYgKGNoYW4tPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQWCkpewotCQlzcHJpbnRmKHN0ciwgIi1kJXMgLXU4MDAwMDAwMDgxMzciLCBjaGFuLT5hZGRyKTsKLQkKLQl9Ci0JCi0JZG8KLQl7Ci0JCW1lbXNldCgmbWJveC0+Y21kLCAwLCBzaXplb2YoVFgyNUNtZCkpOwotCQlzdHJjcHkobWJveC0+ZGF0YSwgc3RyKTsKLQkJbWJveC0+Y21kLmxlbmd0aCAgPSBzdHJsZW4oc3RyKTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfUExBQ0VfQ0FMTDsKLQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCX0gd2hpbGUgKGVyciAmJiByZXRyeS0tICYmIHgyNV9lcnJvcihjYXJkLCBlcnIsIFgyNV9QTEFDRV9DQUxMLCAwKSk7Ci0KLQlpZiAoIWVycil7Ci0JCWJpbmRfbGNuX3RvX2RldiAoY2FyZCwgY2hhbi0+ZGV2LCBtYm94LT5jbWQubGNuKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCUFjY2VwdCBYLjI1IGNhbGwuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfYWNjZXB0X2NhbGwgKHNkbGFfdCogY2FyZCwgaW50IGxjbiwgaW50IHFkbSkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5sY24gICAgID0gbGNuOwotCQltYm94LT5jbWQucWRtICAgICA9IHFkbTsKLQkJbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfQUNDRVBUX0NBTEw7Ci0JCWVyciA9IHNkbGFfZXhlYyhtYm94KSA/IG1ib3gtPmNtZC5yZXN1bHQgOiBDTURfVElNRU9VVDsKLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfQUNDRVBUX0NBTEwsIGxjbikpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlDbGVhciBYLjI1IGNhbGwuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfY2xlYXJfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgY2F1c2UsIGludCBkaWFnbikKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0gIAlpbnQgcmV0cnkgPSBNQVhfQ01EX1JFVFJZOwotCWludCBlcnI7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5sY24gICAgID0gbGNuOwotCQltYm94LT5jbWQuY2F1c2UgICA9IGNhdXNlOwotCQltYm94LT5jbWQuZGlhZ24gICA9IGRpYWduOwotCQltYm94LT5jbWQuY29tbWFuZCA9IFgyNV9DTEVBUl9DQUxMOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgWDI1X0NMRUFSX0NBTEwsIGxjbikpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlTZW5kIFguMjUgZGF0YSBwYWNrZXQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB4MjVfc2VuZCAoc2RsYV90KiBjYXJkLCBpbnQgbGNuLCBpbnQgcWRtLCBpbnQgbGVuLCB2b2lkKiBidWYpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotICAJaW50IHJldHJ5ID0gTUFYX0NNRF9SRVRSWTsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGNoYXIgY21kOwotCQkKLQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYykKLQkJY21kID0gWDI1X0hETENfV1JJVEU7Ci0JZWxzZQotCQljbWQgPSBYMjVfV1JJVEU7Ci0KLQlkbwotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1lbWNweShtYm94LT5kYXRhLCBidWYsIGxlbik7Ci0JCW1ib3gtPmNtZC5sZW5ndGggID0gbGVuOwotCQltYm94LT5jbWQubGNuICAgICA9IGxjbjsKLQotCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQltYm94LT5jbWQucGYgPSBxZG07Ci0JCX1lbHNlewkJCQotCQkJbWJveC0+Y21kLnFkbSA9IHFkbTsKLQkJfQotCi0JCW1ib3gtPmNtZC5jb21tYW5kID0gY21kOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JfSB3aGlsZSAoZXJyICYmIHJldHJ5LS0gJiYgeDI1X2Vycm9yKGNhcmQsIGVyciwgY21kICwgbGNuKSk7Ci0KLQotCS8qIElmIGJ1ZmZlcnMgYXJlIGJ1c3kgdGhlIHJldHVybiBjb2RlIGZvciBMQVBCIEhETEMgaXMKLSAgICAgICAgICogMS4gVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgbG9va2luZyBmb3IgcmV0dXJuIGNvZGUKLSAgICAgICAgICogb2YgWDI1UkVTX05PVF9SRUFEWSBpZiBidXN5LiAqLwotCi0JaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMgJiYgZXJyID09IDEpewotCQllcnIgPSBYMjVSRVNfTk9UX1JFQURZOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlGZXRjaCBYLjI1IGFzeW5jaHJvbm91cyBldmVudHMuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNV9mZXRjaF9ldmVudHMgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoc3RhdHVzLT5nZmxhZ3MgJiAweDIwKQotCXsKLQkJbWVtc2V0KCZtYm94LT5jbWQsIDAsIHNpemVvZihUWDI1Q21kKSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0lTX0RBVEFfQVZBSUxBQkxFOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0gCQlpZiAoZXJyKSB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSVNfREFUQV9BVkFJTEFCTEUsIDApOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJWC4yNSBhc3luY2hyb25vdXMgZXZlbnQvZXJyb3IgaGFuZGxlci4KLSAqCQlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVhY2ggdGltZSBpbnRlcmZhY2UgY29tbWFuZCByZXR1cm5zIAotICoJCW5vbi16ZXJvIHJldHVybiBjb2RlIHRvIGhhbmRsZSBYLjI1IGFzeW5jaHJvbm91cyBldmVudHMgYW5kIAotICoJCWNvbW1vbiBlcnJvcnMuIFJldHVybiBub24temVybyB0byByZXBlYXQgY29tbWFuZCBvciB6ZXJvIHRvIAotICoJCWNhbmNlbCBpdC4KLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5LCBhcyBoYW5kbGluZyBzb21lIG9mIHRoZQotICogICAgCWFzeW5jaHJvbm91cyBldmVudHMgKGUuZy4gY2FsbCByZXF1ZXN0KSByZXF1aXJlcyBleGVjdXRpb24gb2YgdGhlCi0gKiAgICAJaW50ZXJmYWNlIGNvbW1hbmQocykgdGhhdCwgaW4gdHVybiwgbWF5IGFsc28gcmV0dXJuIGFzeW5jaHJvbm91cwotICogICAgCWV2ZW50cy4gIFRvIGF2b2lkIHJlLWVudHJhbmN5IHByb2JsZW1zIHdlIGNvcHkgbWFpbGJveCB0byBkeW5hbWljYWxseQotICogICAgCWFsbG9jYXRlZCBtZW1vcnkgYmVmb3JlIHByb2Nlc3NpbmcgZXZlbnRzLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgeDI1X2Vycm9yIChzZGxhX3QqIGNhcmQsIGludCBlcnIsIGludCBjbWQsIGludCBsY24pCi17Ci0JaW50IHJldHJ5ID0gMTsKLQl1bnNpZ25lZCBkbGVuID0gKChUWDI1TWJveCopY2FyZC0+bWJveCktPmNtZC5sZW5ndGg7Ci0JVFgyNU1ib3gqIG1iOwotCi0JbWIgPSBrbWFsbG9jKHNpemVvZihUWDI1TWJveCkgKyBkbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAobWIgPT0gTlVMTCkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHgyNV9lcnJvcigpIG91dCBvZiBtZW1vcnkhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQltZW1jcHkobWIsIGNhcmQtPm1ib3gsIHNpemVvZihUWDI1TWJveCkgKyBkbGVuKTsKLQlzd2l0Y2ggKGVycil7Ci0KLQljYXNlIFgyNVJFU19BU1lOQ19QQUNLRVQ6CS8qIFguMjUgYXN5bmNocm9ub3VzIHBhY2tldCB3YXMgcmVjZWl2ZWQgKi8KLQotCQltYi0+ZGF0YVtkbGVuXSA9ICdcMCc7Ci0KLQkJc3dpdGNoIChtYi0+Y21kLnBrdFR5cGUgJiAweDdGKXsKLQotCQljYXNlIEFTRV9DQUxMX1JRU1Q6CQkvKiBpbmNvbWluZyBjYWxsICovCi0JCQlyZXRyeSA9IGluY29taW5nX2NhbGwoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVNFX0NBTExfQUNDRVBURUQ6CQkvKiBjb25uZWN0ZWQgKi8KLQkJCXJldHJ5ID0gY2FsbF9hY2NlcHRlZChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBU0VfQ0xFQVJfUlFTVDoJCS8qIGNhbGwgY2xlYXIgcmVxdWVzdCAqLwotCQkJcmV0cnkgPSBjYWxsX2NsZWFyZWQoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVNFX1JFU0VUX1JRU1Q6CQkvKiByZXNldCByZXF1ZXN0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSByZXNldCByZXF1ZXN0IG9uIExDTiAlZCEgIgotCQkJCSJDYXVzZToweCUwMlggRGlhZ246MHglMDJYXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIG1iLT5jbWQubGNuLCBtYi0+Y21kLmNhdXNlLAotCQkJCW1iLT5jbWQuZGlhZ24pOwotCQkJYXBpX29vYl9ldmVudCAoY2FyZCxtYik7Ci0JCQlicmVhazsKLQotCQljYXNlIEFTRV9SRVNUQVJUX1JRU1Q6CQkvKiByZXN0YXJ0IHJlcXVlc3QgKi8KLQkJCXJldHJ5ID0gcmVzdGFydF9ldmVudChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBU0VfQ0xFQVJfQ09ORlJNOgotCQkJaWYgKGNsZWFyX2NvbmZpcm1fZXZlbnQgKGNhcmQsbWIpKQotCQkJCWJyZWFrOwotCi0JCQkvKiBJIHVzZSB0aGUgZ290byBzdGF0ZW1lbnQgaGVyZSBzbyBpZiAKLQkgICAgICAgICAgICAgICAgICogc29tZWJvZHkgaW5zZXJ0cyBjb2RlIGJldHdlZW4gdGhlCi0gICAgICAgIAkgICAgICAgICAqIGNhc2UgYW5kIGRlZmF1bHQsIHdlIHdpbGwgbm90IGhhdmUKLSAgICAgICAgICAgICAgICAJICogZ2hvc3QgcHJvYmxlbXMgKi8KLQotCQkJZ290byBkZmx0XzE7Ci0KLQkJZGVmYXVsdDoKLWRmbHRfMToKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IGV2ZW50IDB4JTAyWCBvbiBMQ04gJWQhICIKLQkJCQkiQ2F1c2U6MHglMDJYIERpYWduOjB4JTAyWFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLnBrdFR5cGUsCi0JCQkJbWItPmNtZC5sY24sIG1iLT5jbWQuY2F1c2UsIG1iLT5jbWQuZGlhZ24pOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBYMjVSRVNfUFJPVE9fVklPTEFUSU9OOgkvKiBYLjI1IHByb3RvY29sIHZpb2xhdGlvbiBpbmRpY2F0aW9uICovCi0KLQkJLyogQnVnIEZpeDogTWFyIDE0IDIwMDAKLSAgICAgICAgICAgICAgICAgKiBUaGUgUHJvdG9jb2wgdmlvbGF0aW9uIGVycm9yIGNvbmRpdGlvbnMgd2VyZSAgCi0gICAgICAgICAgICAgICAgICogbm90IGhhbmRsZWQgcHJldmlvdXNseSAqLwotCi0JCXN3aXRjaCAobWItPmNtZC5wa3RUeXBlICYgMHg3Ril7Ci0KLQkJY2FzZSBQVkVfQ0xFQVJfUlFTVDoJLyogQ2xlYXIgcmVxdWVzdCAqLwkJCi0JCQlyZXRyeSA9IGNhbGxfY2xlYXJlZChjYXJkLCBjbWQsIGxjbiwgbWIpOwotCQkJYnJlYWs7CQotCi0JCWNhc2UgUFZFX1JFU0VUX1JRU1Q6CS8qIFJlc2V0IHJlcXVlc3QgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IHJlc2V0IHJlcXVlc3Qgb24gTENOICVkISAiCi0JCQkJIkNhdXNlOjB4JTAyWCBEaWFnbjoweCUwMlhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgbWItPmNtZC5sY24sIG1iLT5jbWQuY2F1c2UsCi0JCQkJbWItPmNtZC5kaWFnbik7Ci0JCQlhcGlfb29iX2V2ZW50IChjYXJkLG1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFZFX1JFU1RBUlRfUlFTVDoJLyogUmVzdGFydCByZXF1ZXN0ICovCi0JCQlyZXRyeSA9IHJlc3RhcnRfZXZlbnQoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQgOgotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogWC4yNSBwcm90b2NvbCB2aW9sYXRpb24gb24gTENOICVkISAiCi0JCQkJIlBhY2tldDoweCUwMlggQ2F1c2U6MHglMDJYIERpYWduOjB4JTAyWFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLmxjbiwKLQkJCQltYi0+Y21kLnBrdFR5cGUgJiAweDdGLCBtYi0+Y21kLmNhdXNlLCBtYi0+Y21kLmRpYWduKTsKLQkJCWFwaV9vb2JfZXZlbnQoY2FyZCxtYik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIDB4NDI6CS8qIFguMjUgdGltZW91dCAqLwotCQlyZXRyeSA9IHRpbWVvdXRfZXZlbnQoY2FyZCwgY21kLCBsY24sIG1iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4NDM6CS8qIFguMjUgcmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBleGNlZWRlZCBYLjI1IHJldHJ5IGxpbWl0IG9uIExDTiAlZCEgIgotCQkJIlBhY2tldDoweCUwMlggRGlhZ246MHglMDJYXG4iLCBjYXJkLT5kZXZuYW1lLAotCQkJbWItPmNtZC5sY24sIG1iLT5jbWQucGt0VHlwZSwgbWItPmNtZC5kaWFnbikKLQkJOwotCQlicmVhazsKLQotCWNhc2UgMHgwODoJLyogbW9kZW0gZmFpbHVyZSAqLwotI2lmbmRlZiBNT0RFTV9OT1RfTE9HCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBtb2RlbSBmYWlsdXJlIVxuIiwgY2FyZC0+ZGV2bmFtZSk7Ci0jZW5kaWYgLyogTU9ERU1fTk9UX0xPRyAqLwotCQlhcGlfb29iX2V2ZW50KGNhcmQsbWIpOwotCQlicmVhazsKLQotCWNhc2UgMHgwOToJLyogTjIgcmV0cnkgbGltaXQgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGV4Y2VlZGVkIEhETEMgcmV0cnkgbGltaXQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCWFwaV9vb2JfZXZlbnQoY2FyZCxtYik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDA2OgkvKiB1bm51bWJlcmVkIGZyYW1lIHdhcyByZWNlaXZlZCB3aGlsZSBpbiBBQk0gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIFVubnVtYmVyZWQgZnJhbWUgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIG1iLT5kYXRhWzBdKTsKLQkJYXBpX29vYl9ldmVudChjYXJkLG1iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF9USU1FT1VUOgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb21tYW5kIDB4JTAyWCB0aW1lZCBvdXQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kKQotCQk7Ci0JCXJldHJ5ID0gMDsJLyogYWJvcnQgY29tbWFuZCAqLwotCQlicmVhazsKLQotCWNhc2UgWDI1UkVTX05PVF9SRUFEWToKLQkJcmV0cnkgPSAxOwotCQlicmVhazsKLQotCWNhc2UgMHgwMToKLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpCi0JCQlicmVhazsKLQotCQlpZiAobWItPmNtZC5jb21tYW5kID09IDB4MTYpCi0JCQlicmVhazsKLQkJLyogSSB1c2UgdGhlIGdvdG8gc3RhdGVtZW50IGhlcmUgc28gaWYgCi0gICAgICAgICAgICAgICAgICogc29tZWJvZHkgaW5zZXJ0cyBjb2RlIGJldHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgICogY2FzZSBhbmQgZGVmYXVsdCwgd2Ugd2lsbCBub3QgaGF2ZQotICAgICAgICAgICAgICAgICAqIGdob3N0IHByb2JsZW1zICovCi0JCWdvdG8gZGZsdF8yOwotCi0JZGVmYXVsdDoKLWRmbHRfMjoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbW1hbmQgMHglMDJYIHJldHVybmVkIDB4JTAyWCEgTGNuICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgY21kLCBlcnIsIG1iLT5jbWQubGNuKQotCQk7Ci0JCXJldHJ5ID0gMDsJLyogYWJvcnQgY29tbWFuZCAqLwotCX0KLQlrZnJlZShtYik7Ci0JcmV0dXJuIHJldHJ5OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICoJWC4yNSBBc3luY2hyb25vdXMgRXZlbnQgSGFuZGxlcnMKLSAqIAlUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgeDI1X2Vycm9yKCkgYW5kIHNob3VsZCByZXR1cm4gMCwgaWYKLSAqIAl0aGUgY29tbWFuZCByZXN1bHRpbmcgaW4gdGhlIGFzeW5jaHJvbm91cyBldmVudCBtdXN0IGJlIGFib3J0ZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqSGFuZGxlIFguMjUgaW5jb21pbmcgY2FsbCByZXF1ZXN0LgotICoJUkZDIDEzNTYgZXN0YWJsaXNoZXMgdGhlIGZvbGxvd2luZyBydWxlczoKLSAqCTEuIFRoZSBmaXJzdCBvY3RldCBpbiB0aGUgQ2FsbCBVc2VyIERhdGEgKENVRCkgZmllbGQgb2YgdGhlIGNhbGwKLSAqICAgICAJICAgcmVxdWVzdCBwYWNrZXQgY29udGFpbnMgTkxQSUQgaWRlbnRpZnlpbmcgcHJvdG9jb2wgZW5jYXBzdWxhdGlvbgotICogCTIuIENhbGxzIE1VU1QgTk9UIGJlIGFjY2VwdGVkIHVubGVzcyByb3V0ZXIgc3VwcG9ydHMgcmVxdWVzdGVkCi0gKiAgIAkgICBwcm90b2NvbCBlbmNhcHN1bGF0aW9uLgotICoJMy4gQSBkaWFnbm9zdGljIGNvZGUgMjQ5IGRlZmluZWQgYnkgSVNPL0lFQyA4MjA4IG1heSBiZSB1c2VkIAotICoJICAgd2hlbiBjbGVhcmluZyBhIGNhbGwgYmVjYXVzZSBwcm90b2NvbCBlbmNhcHN1bGF0aW9uIGlzIG5vdCAKLSAqCSAgIHN1cHBvcnRlZC4KLSAqCTQuIElmIGFuIGluY29taW5nIGNhbGwgaXMgcmVjZWl2ZWQgd2hpbGUgYSBjYWxsIHJlcXVlc3QgaXMgCi0gKgkgICBwZW5kaW5nIChpLmUuIGNhbGwgY29sbGlzaW9uIGhhcyBvY2N1cnJlZCksIHRoZSBpbmNvbWluZyBjYWxsIAotICoJICAgc2hhbGwgYmUgcmVqZWN0ZWQgYW5kIGNhbGwgcmVxdWVzdCBzaGFsbCBiZSByZXRyaWVkLgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgaW5jb21pbmdfY2FsbCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0JaW50IG5ld19sY24gPSBtYi0+Y21kLmxjbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZ2V0X2Rldl9ieV9sY24od2FuZGV2LCBuZXdfbGNuKTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gTlVMTDsKLQlpbnQgYWNjZXB0ID0gMDsJCS8qIHNldCB0byAnMScgaWYgby5rLiB0byBhY2NlcHQgY2FsbCAqLwotCXVuc2lnbmVkIGludCB1c2VyX2RhdGE7Ci0JeDI1X2NhbGxfaW5mb190KiBpbmZvOwotCQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBjYWxsIGNvbGxpc2lvbiAqLwotCWlmIChkZXYgIT0gTlVMTCkKLQl7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogWC4yNSBpbmNvbWluZyBjYWxsIGNvbGxpc2lvbiBvbiBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0KLQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIE1ha2Ugc3VyZSBEIGJpdCBpcyBub3Qgc2V0IGluIGNhbGwgcmVxdWVzdCAqLwotLy9GSVhNRTogVEhJUyBJUyBOT1QgVFVSRSAhISEhIFRBS0UgSVQgT1VUCi0vLwlpZiAobWItPmNtZC5xZG0gJiAweDAyKQotLy8JewotLy8JCXByaW50ayhLRVJOX0lORk8KLS8vCQkJIiVzOiBYLjI1IGluY29taW5nIGNhbGwgb24gTENOICVkIHdpdGggRC1iaXQgc2V0IVxuIiwKLS8vCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0vLwotLy8JCXgyNV9jbGVhcl9jYWxsKGNhcmQsIG5ld19sY24sIDAsIDApOwotLy8JCXJldHVybiAxOwotLy8JfQotCi0JLyogUGFyc2UgY2FsbCByZXF1ZXN0IGRhdGEgKi8KLQlpbmZvID0ga21hbGxvYyhzaXplb2YoeDI1X2NhbGxfaW5mb190KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGluZm8gPT0gTlVMTCkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiBub3QgZW5vdWdoIG1lbW9yeSB0byBwYXJzZSBYLjI1IGluY29taW5nIGNhbGwgIgotCQkJIm9uIExDTiAlZCFcbiIsIGNhcmQtPmRldm5hbWUsIG5ld19sY24pOwotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJcmV0dXJuIDE7Ci0JfQotIAotCXBhcnNlX2NhbGxfaW5mbyhtYi0+ZGF0YSwgaW5mbyk7Ci0KLQlpZiAoY2FyZC0+dS54LmxvZ2dpbmcpCi0JCXByaW50ayhLRVJOX0lORk8gIlxuJXM6IFguMjUgaW5jb21pbmcgY2FsbCBvbiBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgbmV3X2xjbik7Ci0KLQkvKiBDb252ZXIgdGhlIGZpcnN0IHR3byBBU0NJSSBjaGFyYWN0ZXJzIGludG8gYW4KLSAgICAgICAgICogaW50ZXJnZXIuIFVzZWQgdG8gY2hlY2sgdGhlIGluY29taW5nIHByb3RvY29sIAotICAgICAgICAgKi8KLQl1c2VyX2RhdGEgPSBoZXhfdG9fdWludChpbmZvLT51c2VyLDIpOwotCi0JLyogRmluZCBhdmFpbGFibGUgY2hhbm5lbCAqLwotCWZvciAoZGV2ID0gd2FuZGV2LT5kZXY7IGRldjsgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkgewotCQljaGFuID0gZGV2LT5wcml2OwotCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghY2hhbi0+Y29tbW9uLnN2YyB8fCAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9ESVNDT05ORUNURUQpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHVzZXJfZGF0YSA9PSBOTFBJRF9JUCAmJiBjaGFuLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiSVAgcGFja2V0IGJ1dCBjb25maWd1cmVkIGZvciBJUFggOiAleCwgJXhcbiIsCi0JCQkJICAgICAgIGh0b25zKGNoYW4tPnByb3RvY29sKSwgaW5mby0+dXNlclswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQotCQlpZiAodXNlcl9kYXRhID09IE5MUElEX1NOQVAgJiYgY2hhbi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBYKSl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJJUFggcGFja2V0IGJ1dCBjb25maWd1cmVkIGZvciBJUDogJXhcbiIsCi0JCQkJICAgICAgIGh0b25zKGNoYW4tPnByb3RvY29sKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RyY21wKGluZm8tPnNyYywgY2hhbi0+YWRkcikgPT0gMCkKLQkJCWJyZWFrOwotCi0JICAgICAgICAvKiBJZiBqdXN0IGFuICdAJyBpcyBzcGVjaWZpZWQsIGFjY2VwdCBhbGwgaW5jb21pbmcgY2FsbHMgKi8KLQkgICAgICAgIGlmIChzdHJjbXAoY2hhbi0+YWRkciwgIiIpID09IDApCi0JICAgICAgICAgICAgICAgIGJyZWFrOwotCX0KLQotCWlmIChkZXYgPT0gTlVMTCl7Ci0KLQkJLyogSWYgdGhlIGNhbGwgaXMgbm90IGZvciBhbnkgV0FOUElQRSBpbnRlcmZhY2VzCi0gICAgICAgICAgICAgICAgICogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIEFQSSBsaXN0ZW5pbmcgcXVldWUKLSAgICAgICAgICAgICAgICAgKiB3YWl0aW5nIGZvciBkYXRhLiBJZiB0aGVyZSBpcyBzZW5kIHRoZSBwYWNrZXQKLSAgICAgICAgICAgICAgICAgKiB1cCB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgICovCi0JCWlmIChjYXJkLT5zayAhPSBOVUxMICYmIGNhcmQtPmZ1bmMgIT0gTlVMTCl7Ci0JCQlpZiAoYXBpX2luY29taW5nX2NhbGwoY2FyZCxtYixuZXdfbGNuKSl7Ci0JCQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JCQl9Ci0JCQlhY2NlcHQgPSAwOwotCQl9ZWxzZXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBjaGFubmVscyBhdmFpbGFibGUhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCi0JCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJfQotCi0JfWVsc2UgaWYgKGluZm8tPm51c2VyID09IDApewotCi0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogbm8gdXNlciBkYXRhIGluIGluY29taW5nIGNhbGwgb24gTENOICVkIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIG5ld19sY24pCi0JCTsKLQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0KLQl9ZWxzZSBzd2l0Y2ggKGluZm8tPnVzZXJbMF0pewotCi0JCWNhc2UgMDoJCS8qIG11bHRpcGxleGVkICovCi0JCQljaGFuLT5wcm90b2NvbCA9IGh0b25zKDApOwotCQkJYWNjZXB0ID0gMTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTkxQSURfSVA6CS8qIElQIGRhdGFncmFtcyAqLwotCQkJYWNjZXB0ID0gMTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTkxQSURfU05BUDogLyogSVBYIGRhdGFncmFtcyAqLwotCQkJYWNjZXB0ID0gMTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiB1bnN1cHBvcnRlZCBOTFBJRCAweCUwMlggaW4gaW5jb21pbmcgY2FsbCAiCi0JCQkJIm9uIExDTiAlZCFcbiIsIGNhcmQtPmRldm5hbWUsIGluZm8tPnVzZXJbMF0sIG5ld19sY24pOwotCQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMjQ5KTsKLQl9Ci0JCi0JaWYgKGFjY2VwdCAmJiAoeDI1X2FjY2VwdF9jYWxsKGNhcmQsIG5ld19sY24sIDApID09IENNRF9PSykpewotCi0JCWJpbmRfbGNuX3RvX2RldiAoY2FyZCwgY2hhbi0+ZGV2LCBuZXdfbGNuKTsKLQkJCi0JCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSA9PSBDTURfT0spCi0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCQllbHNlIAotCQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JfQotCWtmcmVlKGluZm8pOwotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIGFjY2VwdGVkIGNhbGwuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBjYWxsX2FjY2VwdGVkIChzZGxhX3QqIGNhcmQsIGludCBjbWQsIGludCBsY24sIFRYMjVNYm94KiBtYikKLXsKLQl1bnNpZ25lZCBuZXdfbGNuID0gbWItPmNtZC5sY247Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBuZXdfbGNuKTsKLQl4MjVfY2hhbm5lbF90KiBjaGFuOwotCi0JaWYgKGRldiA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBjbGVhcmluZyBvcnBoYW5lZCBjb25uZWN0aW9uIG9uIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLQkJeDI1X2NsZWFyX2NhbGwoY2FyZCwgbmV3X2xjbiwgMCwgMCk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChjYXJkLT51LngubG9nZ2luZykJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IGNhbGwgYWNjZXB0ZWQgb24gRGV2ICVzIGFuZCBMQ04gJWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBuZXdfbGNuKTsKLQotCS8qIEdldCBjaGFubmVsIGNvbmZpZ3VyYXRpb24gYW5kIG5vdGlmeSByb3V0ZXIgKi8KLQljaGFuID0gZGV2LT5wcml2OwotCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSAhPSBDTURfT0spCi0JewotCQl4MjVfY2xlYXJfY2FsbChjYXJkLCBuZXdfbGNuLCAwLCAwKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LG1iKTsKLQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBkZXYsIG5ld19sY24pOwotCX0KLQotCXJldHVybiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJSGFuZGxlIGNsZWFyZWQgY2FsbC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGNhbGxfY2xlYXJlZCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0JdW5zaWduZWQgbmV3X2xjbiA9IG1iLT5jbWQubGNuOwotCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSBmaW5kX2NoYW5uZWwoY2FyZCwgbmV3X2xjbik7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbjsKLQl1bnNpZ25lZCBjaGFyIG9sZF9zdGF0ZTsKLQotCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBYLjI1IGNsZWFyIHJlcXVlc3Qgb24gTENOICVkISBDYXVzZToweCUwMlggIgotCQkiRGlhZ246MHglMDJYXG4iLAotCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuLCBtYi0+Y21kLmNhdXNlLCBtYi0+Y21kLmRpYWduKTsKLQl9Ci0KLQlpZiAoZGV2ID09IE5VTEwpeyAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgY2xlYXIgcmVxdWVzdCA6IE5vIGRldmljZSBmb3IgY2xlYXJcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWNoYW49ZGV2LT5wcml2OwotCi0Jb2xkX3N0YXRlID0gY2hhbi0+Y29tbW9uLnN0YXRlOwotCi0Jc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQotCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0KLQkJc3dpdGNoIChvbGRfc3RhdGUpewotCQkKLQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LG1iKTsKLQkJCWJyZWFrOwotCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQlzZW5kX29vYl9tc2coY2FyZCxkZXYsbWIpOwkJCQkKLQkJCWJyZWFrOwotCQl9Ci0JfQotCQotCXJldHVybiAoKGNtZCA9PSBYMjVfV1JJVEUpICYmIChsY24gPT0gbmV3X2xjbikpID8gMCA6IDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAlIYW5kbGUgWC4yNSByZXN0YXJ0IGV2ZW50LgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgcmVzdGFydF9ldmVudCAoc2RsYV90KiBjYXJkLCBpbnQgY21kLCBpbnQgbGNuLCBUWDI1TWJveCogbWIpCi17Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCXVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlOwotCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IFguMjUgcmVzdGFydCByZXF1ZXN0ISBDYXVzZToweCUwMlggRGlhZ246MHglMDJYXG4iLAotCQljYXJkLT5kZXZuYW1lLCBtYi0+Y21kLmNhdXNlLCBtYi0+Y21kLmRpYWduKTsKLQotCS8qIGRvd24gYWxsIGxvZ2ljYWwgY2hhbm5lbHMgKi8KLQlmb3IgKGRldiA9IHdhbmRldi0+ZGV2OyBkZXY7IGRldiA9ICooKHN0cnVjdCBuZXRfZGV2aWNlICoqKWRldi0+cHJpdikpIHsKLQkJY2hhbj1kZXYtPnByaXY7Ci0JCW9sZF9zdGF0ZSA9IGNoYW4tPmNvbW1vbi5zdGF0ZTsKLQotCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSl7Ci0JCQlzd2l0Y2ggKG9sZF9zdGF0ZSl7Ci0JCQotCQkJY2FzZSBXQU5fQ09OTkVDVElORzoKLQkJCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixtYik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBTl9DT05ORUNURUQ6Ci0JCQkJc2VuZF9vb2JfbXNnKGNhcmQsZGV2LG1iKTsJCQkJCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjbWQgPT0gWDI1X1dSSVRFKSA/IDAgOiAxOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBIYW5kbGUgdGltZW91dCBldmVudC4KLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHRpbWVvdXRfZXZlbnQgKHNkbGFfdCogY2FyZCwgaW50IGNtZCwgaW50IGxjbiwgVFgyNU1ib3gqIG1iKQotewotCXVuc2lnbmVkIG5ld19sY24gPSBtYi0+Y21kLmxjbjsKLQotCWlmIChtYi0+Y21kLnBrdFR5cGUgPT0gMHgwNSkJLyogY2FsbCByZXF1ZXN0IHRpbWUgb3V0ICovCi0JewotCQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gZmluZF9jaGFubmVsKGNhcmQsbmV3X2xjbik7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFguMjUgY2FsbCB0aW1lZCB0aW1lb3V0IG9uIExDTiAlZCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBuZXdfbGNuKTsKLQotCQlpZiAoZGV2KXsKLQkJCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkJCXNlbmRfZGVsYXllZF9jbWRfcmVzdWx0KGNhcmQsZGV2LGNhcmQtPm1ib3gpOwotCQkJfQotCQl9Ci0JfWVsc2V7IAotCQlwcmludGsoS0VSTl9JTkZPICIlczogWC4yNSBwYWNrZXQgMHglMDJYIHRpbWVvdXQgb24gTENOICVkIVxuIiwKLQkJY2FyZC0+ZGV2bmFtZSwgbWItPmNtZC5wa3RUeXBlLCBuZXdfbGNuKTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qIAotICoJTWlzY2VsbGFuZW91cyAKLSAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAJRXN0YWJsaXNoIHBoeXNpY2FsIGNvbm5lY3Rpb24uCi0gKiAJbyBvcGVuIEhETEMgYW5kIHJhaXNlIERUUgotICoKLSAqIAlSZXR1cm46CQkwCWNvbm5lY3Rpb24gZXN0YWJsaXNoZWQKLSAqCQkJMQljb25uZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gKgkJCTwwCWVycm9yCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGNvbm5lY3QgKHNkbGFfdCogY2FyZCkKLXsKLQlUWDI1U3RhdHVzKiBzdGF0dXMgPSBjYXJkLT5mbGFnczsKLQotCWlmICh4MjVfb3Blbl9oZGxjKGNhcmQpIHx8IHgyNV9zZXR1cF9oZGxjKGNhcmQpKQotCQlyZXR1cm4gLUVJTzsKLQotCXdhbnBpcGVfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQotCXgyNV9zZXRfaW50cl9tb2RlKGNhcmQsIElOVFJfT05fVElNRVIpOyAKLQlzdGF0dXMtPmltYXNrICY9IH5JTlRSX09OX1RJTUVSOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiAJVGVhciBkb3duIHBoeXNpY2FsIGNvbm5lY3Rpb24uCi0gKiAJbyBjbG9zZSBIRExDIGxpbmsKLSAqIAlvIGRyb3AgRFRSCi0gKgotICogCVJldHVybjoJCTAKLSAqCQkJPDAJZXJyb3IKLSAqLwotCi1zdGF0aWMgaW50IGRpc2Nvbm5lY3QgKHNkbGFfdCogY2FyZCkKLXsKLQl3YW5waXBlX3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQl4MjVfc2V0X2ludHJfbW9kZShjYXJkLCBJTlRSX09OX1RJTUVSKTsJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0IGV4Y2VwdCB0aW1lciAqLwotCXgyNV9jbG9zZV9oZGxjKGNhcmQpOwkJCS8qIGNsb3NlIEhETEMgbGluayAqLwotCXgyNV9zZXRfZHRyKGNhcmQsIDApOwkJCS8qIGRyb3AgRFRSICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGaW5kIG5ldHdvcmsgZGV2aWNlIGJ5IGl0cyBjaGFubmVsIG51bWJlci4KLSAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UqIGdldF9kZXZfYnlfbGNuKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsCi0JCQkJCSB1bnNpZ25lZCBsY24pCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldjsKLQotCWZvciAoZGV2ID0gd2FuZGV2LT5kZXY7IGRldjsgZGV2ID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopZGV2LT5wcml2KSkKLQkJaWYgKCgoeDI1X2NoYW5uZWxfdCopZGV2LT5wcml2KS0+Y29tbW9uLmxjbiA9PSBsY24pIAotCQkJYnJlYWs7Ci0JcmV0dXJuIGRldjsKLX0KLQotLyoKLSAqIAlJbml0aWF0ZSBjb25uZWN0aW9uIG9uIHRoZSBsb2dpY2FsIGNoYW5uZWwuCi0gKiAJbyBmb3IgUFZDIHdlIGp1c3QgZ2V0IGNoYW5uZWwgY29uZmlndXJhdGlvbgotICogCW8gZm9yIFNWQ3MgcGxhY2UgYW4gWC4yNSBjYWxsCi0gKgotICogCVJldHVybjoJCTAJY29ubmVjdGVkCi0gKgkJCT4wCWNvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MKLSAqCQkJPDAJZmFpbHVyZQotICovCi0KLXN0YXRpYyBpbnQgY2hhbl9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCi0JaWYgKGNoYW4tPmNvbW1vbi5zdmMgJiYgY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBXQU5QSVBFKXsKLQkJaWYgKCFjaGFuLT5hZGRyWzBdKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBEZXN0aW5hdGlvbiBBZGRyZXNzXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwkvKiBubyBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBsYWNpbmcgWC4yNSBjYWxsIHRvICVzIC4uLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNoYW4tPmFkZHIpOwotCi0JCWlmICh4MjVfcGxhY2VfY2FsbChjYXJkLCBjaGFuKSAhPSBDTURfT0spCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNUSU5HKTsKLQkJcmV0dXJuIDE7Ci0JfWVsc2V7Ci0JCWlmICh4MjVfZ2V0X2NoYW5fY29uZihjYXJkLCBjaGFuKSAhPSBDTURfT0spCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNURUQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIAlEaXNjb25uZWN0IGxvZ2ljYWwgY2hhbm5lbC4KLSAqIAlvIGlmIFNWQyB0aGVuIGNsZWFyIFguMjUgY2FsbAotICovCi0KLXN0YXRpYyBpbnQgY2hhbl9kaXNjKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQotCWlmIChjaGFuLT5jb21tb24uc3ZjKXsgCi0JCXgyNV9jbGVhcl9jYWxsKGNoYW4tPmNhcmQsIGNoYW4tPmNvbW1vbi5sY24sIDAsIDApOwotCi0JCS8qIEZvciBBUEkgd2UgZGlzY29ubmVjdCBvbiBjbGVhcgotICAgICAgICAgICAgICAgICAqIGNvbmZpcm1hdGlvbi4gCi0gICAgICAgICAgICAgICAgICovCi0JCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkKLQkJCXJldHVybiAwOwotCX0KLQotCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RFRCk7Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAJU2V0IGxvZ2ljYWwgY2hhbm5lbCBzdGF0ZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBzZXRfY2hhbl9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBpbnQgc3RhdGUpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQljbGkoKTsKLQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IHN0YXRlKQotCXsKLQkJc3dpdGNoIChzdGF0ZSkKLQkJewotCQkJY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBpbnRlcmZhY2UgJXMgY29ubmVjdGVkLCBsY24gJWkgIVxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhjaGFuLT5jb21tb24ubGNuKTsKLQkJCQljaGFuLT5pX3RpbWVvdXRfc29mYXIgPSBqaWZmaWVzOwotCi0JCQkJLyogTEFQQiBpcyBQVkMgQmFzZWQgKi8KLQkJCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYykKLQkJCQkJY2hhbi0+Y29tbW9uLnN2Yz0wOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBpbnRlcmZhY2UgJXMgY29ubmVjdGluZywgbGNuICVpIC4uLlxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsIGNoYW4tPmNvbW1vbi5sY24pOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBXQU5fRElTQ09OTkVDVEVEOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkJIiVzOiBpbnRlcmZhY2UgJXMgZGlzY29ubmVjdGVkLCBsY24gJWkgIVxuIiwgCi0JCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0LDApOwotCQkJCQotCQkJCWlmIChjaGFuLT5jb21tb24uc3ZjKSB7Ci0JCQkJCSoodW5zaWduZWQgc2hvcnQqKWRldi0+ZGV2X2FkZHIgPSAwOwotCQkJCQljYXJkLT51Lnguc3ZjX3RvX2Rldl9tYXBbKGNoYW4tPmNvbW1vbi5sY24lWDI1X01BWF9DSEFOKV09TlVMTDsKLQkJICAgICAgICAgICAgICAgIAljaGFuLT5jb21tb24ubGNuID0gMDsKLQkJCQl9Ci0KLQkJCQlpZiAoY2hhbi0+dHJhbnNtaXRfbGVuZ3RoKXsKLQkJCQkJY2hhbi0+dHJhbnNtaXRfbGVuZ3RoPTA7Ci0JCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kcml2ZXJfYnVzeSwwKTsKLQkJCQkJY2hhbi0+dHhfb2Zmc2V0PTA7Ci0JCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpewotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFdBTl9ESVNDT05ORUNUSU5HOgotCQkJCWlmIChjYXJkLT51LngubG9nZ2luZyl7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPIAotCQkJCQkiXG4lczogaW50ZXJmYWNlICVzIGRpc2Nvbm5lY3RpbmcsIGxjbiAlaSAuLi5cbiIsIAotCQkJCQljYXJkLT5kZXZuYW1lLCBkZXYtPm5hbWUsY2hhbi0+Y29tbW9uLmxjbik7Ci0JCQkJfQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5kaXNjb25uZWN0LDApOwotCQkJCWJyZWFrOwotCQl9Ci0JCWNoYW4tPmNvbW1vbi5zdGF0ZSA9IHN0YXRlOwotCX0KLQljaGFuLT5zdGF0ZV90aWNrID0gamlmZmllczsKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLX0KLQotLyoKLSAqIAlTZW5kIHBhY2tldCBvbiBhIGxvZ2ljYWwgY2hhbm5lbC4KLSAqCQlXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0eF9za2IgZmllbGQgb2YgdGhlIGNoYW5uZWwgZGF0YSAKLSAqCQlzcGFjZSBwb2ludHMgdG8gdGhlIHRyYW5zbWl0IHNvY2tldCBidWZmZXIuICBXaGVuIHRyYW5zbWlzc2lvbiAKLSAqCQlpcyBjb21wbGV0ZSwgcmVsZWFzZSBzb2NrZXQgYnVmZmVyIGFuZCByZXNldCAndGJ1c3knIGZsYWcuCi0gKgotICogCVJldHVybjoJCTAJLSB0cmFuc21pc3Npb24gY29tcGxldGUKLSAqCQkJMQktIGJ1c3kKLSAqCi0gKiAJTm90ZXM6Ci0gKiAJMS4gSWYgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gTVRVIGZvciB0aGlzIGNoYW5uZWwsIHdlJ2xsIGZyYWdtZW50Ci0gKiAgICAJdGhlIHBhY2tldCBpbnRvICdjb21wbGV0ZSBzZXF1ZW5jZScgdXNpbmcgTS1iaXQuCi0gKiAJMi4gV2hlbiB0cmFuc21pc3Npb24gaXMgY29tcGxldGUsIGFuIGV2ZW50IG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgaXNzdWVkCi0gKiAgICAJdG8gdGhlIHJvdXRlci4KLSAqLwotCi1zdGF0aWMgaW50IGNoYW5fc2VuZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB2b2lkKiBidWZmLCB1bnNpZ25lZCBkYXRhX2xlbiwKLQkJICAgICB1bnNpZ25lZCBjaGFyIHR4X2ludHIpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCXVuc2lnbmVkIGxlbj0wLCBxZG09MCwgcmVzPTAsIG9yaWdfbGVuID0gMDsKLQl2b2lkICpkYXRhOwotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIGNoYW5uZWwgaXMgcmVhZHkgKi8KLQlpZiAoKCEoc3RhdHVzLT5jZmxhZ3NbY2hhbi0+Y2hfaWR4XSAmIDB4NDApICYmICFjYXJkLT51LnguTEFQQl9oZGxjKSAgfHwgCi0gICAgICAgICAgICAgISgqY2FyZC0+dS54LmhkbGNfYnVmX3N0YXR1cyAmIDB4NDApKXsgCi0gICAgICAgICAgICAKLQkJaWYgKCF0eF9pbnRyKXsKLQkJCXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0IChkZXYsIGJ1ZmYsIGRhdGFfbGVuKTsKLQkJCXJldHVybiAwOwotCQl9ZWxzZXsKLQkJCS8qIEJ5IHJldHVybmluZyAwIHRvIHR4X2ludHIgdGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgKi8KLQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkrK2NoYW4tPmlmc3RhdHMudHhfZHJvcHBlZDsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUiwgVHggaW50ciBjb3VsZCBub3Qgc2VuZCwgZHJvcHBpbmcgJXM6XG4iLCAKLQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbi0+Y29tbW9uLnVzZWRieSA9PSBBUEkpewotCQkvKiBSZW1vdmUgdGhlIEFQSSBIZWFkZXIgKi8KLQkJeDI1YXBpX2hkcl90ICphcGlfZGF0YSA9ICh4MjVhcGlfaGRyX3QgKilidWZmOwotCi0JCS8qIFNldCB0aGUgcWRtIGJpdHMgZnJvbSB0aGUgcGFja2V0IGhlYWRlciAKLSAgICAgICAgICAgICAgICAgKiBVc2VyIGhhcyB0aGUgb3B0aW9uIHRvIHNldCB0aGUgcWRtIGJpdHMKLSAgICAgICAgICAgICAgICAgKi8KLQkJcWRtID0gYXBpX2RhdGEtPnFkbTsKLQotCQlvcmlnX2xlbiA9IGxlbiA9IGRhdGFfbGVuIC0gc2l6ZW9mKHgyNWFwaV9oZHJfdCk7Ci0JCWRhdGEgPSAodW5zaWduZWQgY2hhciopYnVmZiArIHNpemVvZih4MjVhcGlfaGRyX3QpOwotCX1lbHNlewotCQlkYXRhID0gYnVmZjsKLQkJb3JpZ19sZW4gPSBsZW4gPSBkYXRhX2xlbjsKLQl9CQotCi0JaWYgKHR4X2ludHIpewotCQkvKiBXZSBhcmUgaW4gdHhfaW50ciwgbWludXMgdGhlIHR4X29mZnNldCBmcm9tIAotICAgICAgICAgICAgICAgICAqIHRoZSB0b3RhbCBsZW5ndGguIFRoZSB0eF9vZmZzZXQgcGFydCBvZiB0aGUKLQkJICogZGF0YSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuIEFsc28sIG1vdmUgdGhlIAotCQkgKiBkYXRhIHBvaW50ZXIgdG8gcHJvcGVyIG9mZnNldCBsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgKi8KLQkJbGVuIC09IGNoYW4tPnR4X29mZnNldDsKLQkJZGF0YSA9ICh1bnNpZ25lZCBjaGFyKilkYXRhICsgY2hhbi0+dHhfb2Zmc2V0OwotCX0KLQkJCi0JLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIE1UVQotICAgICAgICAgKiBJZiBZRVM6IEN1dCB0aGUgbGVuIHRvIE1UVSBhbmQgc2V0IHRoZSBNIGJpdCAKLSAgICAgICAgICovCi0JaWYgKGxlbiA+IGNoYW4tPnR4X3BrdF9zaXplICYmICFjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJbGVuID0gY2hhbi0+dHhfcGt0X3NpemU7Ci0JCXFkbSB8PSBNX0JJVDsJCQotCX0gCi0KLQotCS8qIFBhc3Mgb25seSBmaXJzdCB0aHJlZSBiaXRzIG9mIHRoZSBxZG0gYnl0ZSB0byB0aGUgc2VuZAotICAgICAgICAgKiByb3V0aW5lLiBJbiBjYXNlIHVzZXIgc2V0cyBhbnkgb3RoZXIgYml0IHdoaWNoIG1pZ2h0Ci0gICAgICAgICAqIGNhdXNlIGVycm9ycy4gCi0gICAgICAgICAqLwotCi0Jc3dpdGNoKHgyNV9zZW5kKGNhcmQsIGNoYW4tPmNvbW1vbi5sY24sIChxZG0mMHgwNyksIGxlbiwgZGF0YSkpewotCQljYXNlIDB4MDA6CS8qIHN1Y2Nlc3MgKi8KLQkJCWNoYW4tPmlfdGltZW91dF9zb2ZhciA9IGppZmZpZXM7Ci0KLQkJCWRldi0+dHJhbnNfc3RhcnQ9amlmZmllczsKLQkJCQotCQkJaWYgKChxZG0gJiBNX0JJVCkgJiYgIWNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJCWlmICghdHhfaW50cil7Ci0JCQkJCS8qIFRoZSBNIGJpdCB3YXMgc2V0LCB3aGljaCBtZWFucyB0aGF0IHBhcnQgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcGFja2V0IGhhcyBiZWVuIHNlbnQuIENvcHkgdGhlIHBhY2tldCBpbnRvIGEgYnVmZmVyCi0JCQkJICAgICAgICAgKiBhbmQgc2V0IHRoZSBvZmZzZXQgdG8gbGVuLCBzbyBvbiBuZXh0IHR4X2ludGVyIAotCQkJCQkgKiB0aGUgcGFja2V0IHdpbGwgYmUgc2VudCB1c2luZyB0aGUgYmVsb3cgb2Zmc2V0LgotCQkJCQkgKi8KLQkJCQkJY2hhbi0+dHhfb2Zmc2V0ICs9IGxlbjsKLQotCQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJCQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkJCQotCQkJCQlpZiAoY2hhbi0+dHhfb2Zmc2V0IDwgb3JpZ19sZW4pewotCQkJCQkJc2V0dXBfZm9yX2RlbGF5ZWRfdHJhbnNtaXQgKGRldiwgYnVmZiwgZGF0YV9sZW4pOwotCQkJCQl9Ci0JCQkJCXJlcz0wOwotCQkJCX1lbHNlewotCQkJCQkvKiBXZSBhcmUgYWxyZWFkeSBpbiB0eF9pbnRlciwgdGh1cyBkYXRhIGlzIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgYnVmZmVyLiBVcGRhdGUgdGhlIG9mZnNldCBhbmQgd2FpdCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBuZXh0IHR4X2ludHIuIFdlIGFkZCBvbiB0byB0aGUgb2Zmc2V0LCBzaW5jZSBkYXRhIGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIFggbnVtYmVyIG9mIHRpbWVzIGxhcmdlciB0aGFuIG1heCBkYXRhIHNpemUuCi0JCQkJCSAqLwotCQkJCQkrK2NoYW4tPmlmc3RhdHMudHhfcGFja2V0czsKLQkJCQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkJCQotCQkJCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9wYXNzZWRfdG9fYWRwdHI7Ci0JCQkJCWNoYW4tPnR4X29mZnNldCArPSBsZW47Ci0KLQkJCQkJLyogVGhlIHVzZXIgY2FuIHNldCB0aGUgcWRtIGJpdCBhcyB3ZWxsLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBlbnRpcmUgcGFja2V0IHdhcyBzZW50IGFuZCBxZG0gaXMgc3RpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzZXQsIHRoYW4gaXQncyB0aGUgdXNlciB3aG8gaGFzIHNldCB0aGUgTSBiaXQuIEluIHRoYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2FzZSBpbmRpY2F0ZSB0aGF0IHRoZSBwYWNrZXQgd2FzIHNlbmQgYnkgcmV0dXJuaW5nIAotCQkJCQkgKiAwIGFuZCB3YWl0IGZvciBhIG5ldyBwYWNrZXQuIE90aGVyd2lzZSwgd2FpdCBmb3IgbmV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHR4IGludGVycnVwdCB0byBzZW5kIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KLQotCQkJCQlpZiAoY2hhbi0+dHhfb2Zmc2V0IDwgb3JpZ19sZW4pewotCQkJCQkJcmVzPTE7Ci0JCQkJCX1lbHNlewkKLQkJCQkJCXJlcz0wOwotCQkJCQl9Ci0JCQkJfQotCQkJfWVsc2V7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X3BhY2tldHM7Ci0JCQkJY2hhbi0+aWZzdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JCQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyOwotCQkJCXJlcz0wOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDMzOgkvKiBUeCBidXN5ICovCi0JCQlpZiAodHhfaW50cil7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR4X2ludHI6IEJpZyBFcnJvciBkcm9wcGluZyBwYWNrZXQgJXNcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSk7Ci0JCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJKytjYXJkLT53YW5kZXYuc3RhdHMudHhfZHJvcHBlZDsKLQkJCQkrK2NoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotCQkJCXJlcz0wOwotCQkJfWVsc2V7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gCi0JCQkJCSIlczogU2VuZDogQmlnIEVycm9yIHNob3VsZCBoYXZlIHR4OiBzdG9ycmluZyAlc1xuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQkJCQlzZXR1cF9mb3JfZGVsYXllZF90cmFuc21pdCAoZGV2LCBidWZmLCBkYXRhX2xlbik7CQotCQkJCXJlcz0xOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoJLyogZmFpbHVyZSAqLwotCQkJKytjaGFuLT5pZnN0YXRzLnR4X2Vycm9yczsKLQkJCWlmICh0eF9pbnRyKXsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVHhfaW50cjogRmFpbHVyZSB0byBzZW5kLCBkcm9wcGluZyAlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCQkJCSsrY2hhbi0+aWZzdGF0cy50eF9kcm9wcGVkOwotCQkJCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQkJKytjaGFuLT5pZl9zZW5kX3N0YXQuaWZfc2VuZF9iZnJfbm90X3Bhc3NlZF90b19hZHB0cjsKLQkJCQlyZXM9MDsKLQkJCX1lbHNlewotCQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogU2VuZDogRmFpbHVyZSB0byBzZW5kICEhISwgc3RvcmluZyAlc1xuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwkJCQotCQkJCXNldHVwX2Zvcl9kZWxheWVkX3RyYW5zbWl0IChkZXYsIGJ1ZmYsIGRhdGFfbGVuKTsKLQkJCQlyZXM9MTsKLQkJCX0KLQkJCWJyZWFrOwkKLQl9Ci0JcmV0dXJuIHJlczsKLX0KLQotCi0vKgotICogCVBhcnNlIFguMjUgY2FsbCByZXF1ZXN0IGRhdGEgYW5kIGZpbGwgeDI1X2NhbGxfaW5mb190IHN0cnVjdHVyZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBwYXJzZV9jYWxsX2luZm8gKHVuc2lnbmVkIGNoYXIqIHN0ciwgeDI1X2NhbGxfaW5mb190KiBpbmZvKQotewotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoeDI1X2NhbGxfaW5mb190KSk7Ci0JZm9yICg7ICpzdHI7ICsrc3RyKQotCXsKLQkJaW50IGk7Ci0JCXVuc2lnbmVkIGNoYXIgY2g7Ci0KLQkJaWYgKCpzdHIgPT0gJy0nKSBzd2l0Y2ggKHN0clsxXSkgewotCi0JCQkvKiBUYWtlIG1pbnVzIDIgb2ZmIHRoZSBtYXhpbXVtIHNpemUgc28gdGhhdCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGxhc3QgYnl0ZSBpcyAwLiBUaGlzIHdheSB3ZSBjYW4gdXNlIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICogbWFuaXB1bGF0b24gZnVuY3Rpb25zIG9uIGNhbGwgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCQkJY2FzZSAnZCc6CS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfQUREUl9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT5kZXN0W2ldID0gY2g7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlICdzJzoJLyogc291cmNlIGFkZHJlc3MgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfQUREUl9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT5zcmNbaV0gPSBjaDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgJ3UnOgkvKiB1c2VyIGRhdGEgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgKE1BWF9YMjVfREFUQV9TSVpFLTIpOyArK2kpewotCQkJCQljaCA9IHN0clsyK2ldOwotCQkJCQlpZiAoaXNzcGFjZShjaCkpIGJyZWFrOwotCQkJCQlpbmZvLT51c2VyW2ldID0gY2g7IAotCQkJCX0KLQkJCQlpbmZvLT5udXNlciA9IGk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgJ2YnOgkvKiBmYWNpbGl0aWVzICovCi0JCQkJZm9yIChpID0gMDsgaSA8IChNQVhfWDI1X0ZBQ0xfU0laRS0yKTsgKytpKXsKLQkJCQkJY2ggPSBzdHJbMitpXTsKLQkJCQkJaWYgKGlzc3BhY2UoY2gpKSBicmVhazsKLQkJCQkJaW5mby0+ZmFjaWxbaV0gPSBjaDsKLQkJCQl9Ci0JCQkJaW5mby0+bmZhY2lsID0gaTsKLQkJCQlicmVhazsKLQkJfQotCX0KLX0KLQotLyoKLSAqIAlDb252ZXJ0IGxpbmUgc3BlZWQgaW4gYnBzIHRvIGEgbnVtYmVyIHVzZWQgYnkgUzUwMiBjb2RlLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJwc190b19zcGVlZF9jb2RlICh1bnNpZ25lZCBsb25nIGJwcykKLXsKLQl1bnNpZ25lZCBjaGFyCW51bWJlcjsKLQotCWlmIChicHMgPD0gMTIwMCkgICAgICAgIG51bWJlciA9IDB4MDE7Ci0JZWxzZSBpZiAoYnBzIDw9IDI0MDApICAgbnVtYmVyID0gMHgwMjsKLQllbHNlIGlmIChicHMgPD0gNDgwMCkgICBudW1iZXIgPSAweDAzOwotCWVsc2UgaWYgKGJwcyA8PSA5NjAwKSAgIG51bWJlciA9IDB4MDQ7Ci0JZWxzZSBpZiAoYnBzIDw9IDE5MjAwKSAgbnVtYmVyID0gMHgwNTsKLQllbHNlIGlmIChicHMgPD0gMzg0MDApICBudW1iZXIgPSAweDA2OwotCWVsc2UgaWYgKGJwcyA8PSA0NTAwMCkgIG51bWJlciA9IDB4MDc7Ci0JZWxzZSBpZiAoYnBzIDw9IDU2MDAwKSAgbnVtYmVyID0gMHgwODsKLQllbHNlIGlmIChicHMgPD0gNjQwMDApICBudW1iZXIgPSAweDA5OwotCWVsc2UgaWYgKGJwcyA8PSA3NDAwMCkgIG51bWJlciA9IDB4MEE7Ci0JZWxzZSBpZiAoYnBzIDw9IDExMjAwMCkgbnVtYmVyID0gMHgwQjsKLQllbHNlIGlmIChicHMgPD0gMTI4MDAwKSBudW1iZXIgPSAweDBDOwotCWVsc2UgbnVtYmVyID0gMHgwRDsKLQotCXJldHVybiBudW1iZXI7Ci19Ci0KLS8qCi0gKiAJQ29udmVydCBkZWNpbWFsIHN0cmluZyB0byB1bnNpZ25lZCBpbnRlZ2VyLgotICogCUlmIGxlbiAhPSAwIHRoZW4gb25seSAnbGVuJyBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgYXJlIGNvbnZlcnRlZC4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlY190b191aW50ICh1bnNpZ25lZCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgdmFsOwotCi0JaWYgKCFsZW4pIAotCQlsZW4gPSBzdHJsZW4oc3RyKTsKLQotCWZvciAodmFsID0gMDsgbGVuICYmIGlzZGlnaXQoKnN0cik7ICsrc3RyLCAtLWxlbikKLQkJdmFsID0gKHZhbCAqIDEwKSArICgqc3RyIC0gKHVuc2lnbmVkKScwJyk7Ci0JCi0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIAlDb252ZXJ0IGhleCBzdHJpbmcgdG8gdW5zaWduZWQgaW50ZWdlci4KLSAqIAlJZiBsZW4gIT0gMCB0aGVuIG9ubHkgJ2xlbicgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFyZSBjb25mZXJ0ZWQuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBoZXhfdG9fdWludCAodW5zaWduZWQgY2hhciogc3RyLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHZhbCwgY2g7Ci0KLQlpZiAoIWxlbikgCi0JCWxlbiA9IHN0cmxlbihzdHIpOwotCi0JZm9yICh2YWwgPSAwOyBsZW47ICsrc3RyLCAtLWxlbikKLQl7Ci0JCWNoID0gKnN0cjsKLQkJaWYgKGlzZGlnaXQoY2gpKQotCQkJdmFsID0gKHZhbCA8PCA0KSArIChjaCAtICh1bnNpZ25lZCknMCcpOwotCQllbHNlIGlmIChpc3hkaWdpdChjaCkpCi0JCQl2YWwgPSAodmFsIDw8IDQpICsgKChjaCAmIDB4REYpIC0gKHVuc2lnbmVkKSdBJyArIDEwKTsKLQkJZWxzZSBicmVhazsKLQl9Ci0JcmV0dXJuIHZhbDsKLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZV9JUFhXQU4odW5zaWduZWQgY2hhciAqc2VuZHBhY2tldCwgY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYLCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBzaG9ydCBwcm90bykKLXsKLQlpbnQgaTsKLQotCWlmKCBwcm90byA9PSBFVEhfUF9JUFgpIHsKLQkJLyogSXQncyBhbiBJUFggcGFja2V0ICovCi0JCWlmKCFlbmFibGVfSVBYKSB7Ci0JCQkvKiBSZXR1cm4gMSBzbyB3ZSBkb24ndCBwYXNzIGl0IHVwIHRoZSBzdGFjay4gKi8KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSXQncyBub3QgSVBYIHNvIHBhc3MgaXQgdXAgdGhlIHN0YWNrLiovIAotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiggc2VuZHBhY2tldFsxNl0gPT0gMHg5MCAmJgotCSAgICBzZW5kcGFja2V0WzE3XSA9PSAweDA0KQotCXsKLQkJLyogSXQncyBJUFhXQU4gICovCi0KLQkJaWYoIHNlbmRwYWNrZXRbMl0gPT0gMHgwMiAmJgotCQkgICAgc2VuZHBhY2tldFszNF0gPT0gMHgwMCkKLQkJewotCQkJLyogSXQncyBhIHRpbWVyIHJlcXVlc3QgcGFja2V0ICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgSVBYV0FOIFRpbWVyIFJlcXVlc3QgcGFja2V0XG4iLGRldm5hbWUpOwotCi0JCQkvKiBHbyB0aHJvdWdoIHRoZSByb3V0aW5nIG9wdGlvbnMgYW5kIGFuc3dlciBubyB0byBldmVyeQotCQkJICogb3B0aW9uIGV4Y2VwdCBVbm51bWJlcmVkIFJJUC9TQVAKLQkJCSAqLwotCQkJZm9yKGkgPSA0MTsgc2VuZHBhY2tldFtpXSA9PSAweDAwOyBpICs9IDUpCi0JCQl7Ci0JCQkJLyogMHgwMiBpcyB0aGUgb3B0aW9uIGZvciBVbm51bWJlcmVkIFJJUC9TQVAgKi8KLQkJCQlpZiggc2VuZHBhY2tldFtpICsgNF0gIT0gMHgwMikKLQkJCQl7Ci0JCQkJCXNlbmRwYWNrZXRbaSArIDFdID0gMDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIFNraXAgb3ZlciB0aGUgZXh0ZW5kZWQgTm9kZSBJRCBvcHRpb24gKi8KLQkJCWlmKCBzZW5kcGFja2V0W2ldID09IDB4MDQgKQotCQkJewotCQkJCWkgKz0gODsKLQkJCX0KLQotCQkJLyogV2UgYWxzbyB3YW50IHRvIHR1cm4gb2ZmIGFsbCBoZWFkZXIgY29tcHJlc3Npb24gb3B0LiAJCQkgKi8gCi0JCQlmb3IoOyBzZW5kcGFja2V0W2ldID09IDB4ODAgOykKLQkJCXsKLQkJCQlzZW5kcGFja2V0W2kgKyAxXSA9IDA7Ci0JCQkJaSArPSAoc2VuZHBhY2tldFtpICsgMl0gPDwgOCkgKyAoc2VuZHBhY2tldFtpICsgM10pICsgNDsKLQkJCX0KLQotCQkJLyogU2V0IHRoZSBwYWNrZXQgdHlwZSB0byB0aW1lciByZXNwb25zZSAqLwotCQkJc2VuZHBhY2tldFszNF0gPSAweDAxOwotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2VuZGluZyBJUFhXQU4gVGltZXIgUmVzcG9uc2VcbiIsZGV2bmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiggc2VuZHBhY2tldFszNF0gPT0gMHgwMiApCi0JCXsKLQkJCS8qIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gcmVxdWVzdCBwYWNrZXQgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBJUFhXQU4gSW5mb3JtYXRpb24gUmVxdWVzdCBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0KLQkJCS8qIFNldCB0aGUgcGFja2V0IHR5cGUgdG8gaW5mb3JtYXRpb24gcmVzcG9uc2UgKi8KLQkJCXNlbmRwYWNrZXRbMzRdID0gMHgwMzsKLQotCQkJLyogU2V0IHRoZSByb3V0ZXIgbmFtZSAqLwotCQkJc2VuZHBhY2tldFs1MV0gPSAnWCc7Ci0JCQlzZW5kcGFja2V0WzUyXSA9ICdUJzsKLQkJCXNlbmRwYWNrZXRbNTNdID0gJ1AnOwotCQkJc2VuZHBhY2tldFs1NF0gPSAnSSc7Ci0JCQlzZW5kcGFja2V0WzU1XSA9ICdQJzsKLQkJCXNlbmRwYWNrZXRbNTZdID0gJ0UnOwotCQkJc2VuZHBhY2tldFs1N10gPSAnLSc7Ci0JCQlzZW5kcGFja2V0WzU4XSA9IENWSGV4VG9Bc2NpaShuZXR3b3JrX251bWJlciA+PiAyOCk7Ci0JCQlzZW5kcGFja2V0WzU5XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDBGMDAwMDAwKT4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbNjBdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDBGMDAwMDApPj4gMjApOwotCQkJc2VuZHBhY2tldFs2MV0gPSBDVkhleFRvQXNjaWkoKG5ldHdvcmtfbnVtYmVyICYgMHgwMDBGMDAwMCk+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzYyXSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDBGMDAwKT4+IDEyKTsKLQkJCXNlbmRwYWNrZXRbNjNdID0gQ1ZIZXhUb0FzY2lpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMDBGMDApPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzY0XSA9IENWSGV4VG9Bc2NpaSgobmV0d29ya19udW1iZXIgJiAweDAwMDAwMEYwKT4+IDQpOwotCQkJc2VuZHBhY2tldFs2NV0gPSBDVkhleFRvQXNjaWkobmV0d29ya19udW1iZXIgJiAweDAwMDAwMDBGKTsKLQkJCWZvcihpID0gNjY7IGkgPCA5OTsgaSs9IDEpCi0JCQl7Ci0JCQkJc2VuZHBhY2tldFtpXSA9IDA7Ci0JCQl9Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZW5kaW5nIElQWFdBTiBJbmZvcm1hdGlvbiBSZXNwb25zZSBwYWNrZXRcbiIsZGV2bmFtZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5rbm93biBJUFhXQU4gcGFja2V0IVxuIixkZXZuYW1lKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogU2V0IHRoZSBXTm9kZUlEIHRvIG91ciBuZXR3b3JrIGFkZHJlc3MgKi8KLQkJc2VuZHBhY2tldFszNV0gPSAodW5zaWduZWQgY2hhcikobmV0d29ya19udW1iZXIgPj4gMjQpOwotCQlzZW5kcGFja2V0WzM2XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCXNlbmRwYWNrZXRbMzddID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlzZW5kcGFja2V0WzM4XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIDB4MDAwMDAwRkYpOwotCi0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qSWYgd2UgZ2V0IGhlcmUgaXQncyBhbiBJUFgtZGF0YSBwYWNrZXQsIHNvIGl0J2xsIGdldCBwYXNzZWQgdXAgdGhlIHN0YWNrLgotCQkgKi8KLQkJLyogc3dpdGNoIHRoZSBuZXR3b3JrIG51bWJlcnMgKi8KLQkJc3dpdGNoX25ldF9udW1iZXJzKHNlbmRwYWNrZXQsIG5ldHdvcmtfbnVtYmVyLCAxKTsJCi0JCXJldHVybiAwOwotCX0KLX0KLQotLyoKLSAqICAJSWYgaW5jb21pbmcgaXMgMCAob3V0Z29pbmcpLSBpZiB0aGUgbmV0IG51bWJlcnMgaXMgb3VycyBtYWtlIGl0IDAKLSAqICAJaWYgaW5jb21pbmcgaXMgMSAtIGlmIHRoZSBuZXQgbnVtYmVyIGlzIDAgbWFrZSBpdCBvdXJzIAotICovCi0KLXN0YXRpYyB2b2lkIHN3aXRjaF9uZXRfbnVtYmVycyh1bnNpZ25lZCBjaGFyICpzZW5kcGFja2V0LCB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyLCB1bnNpZ25lZCBjaGFyIGluY29taW5nKQotewotCXVuc2lnbmVkIGxvbmcgcG5ldHdvcmtfbnVtYmVyOwotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzZdIDw8IDI0KSArIAotCQkJICAoc2VuZHBhY2tldFs3XSA8PCAxNikgKyAoc2VuZHBhY2tldFs4XSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzldKTsKLQkKLQotCWlmICghaW5jb21pbmcpIHsKLQkJLypJZiB0aGUgZGVzdGluYXRpb24gbmV0d29yayBudW1iZXIgaXMgb3VycywgbWFrZSBpdCAwICovCi0JCWlmKCBwbmV0d29ya19udW1iZXIgPT0gbmV0d29ya19udW1iZXIpIHsKLQkJCXNlbmRwYWNrZXRbNl0gPSBzZW5kcGFja2V0WzddID0gc2VuZHBhY2tldFs4XSA9IAotCQkJCQkgc2VuZHBhY2tldFs5XSA9IDB4MDA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJZiB0aGUgaW5jb21pbmcgbmV0d29yayBpcyAwLCBtYWtlIGl0IG91cnMgKi8KLQkJaWYoIHBuZXR3b3JrX251bWJlciA9PSAwKSB7Ci0JCQlzZW5kcGFja2V0WzZdID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyID4+IDI0KTsKLQkJCXNlbmRwYWNrZXRbN10gPSAodW5zaWduZWQgY2hhcikoKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwRkYwMDAwKSA+PiAxNik7Ci0JCQlzZW5kcGFja2V0WzhdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzldID0gKHVuc2lnbmVkIGNoYXIpKG5ldHdvcmtfbnVtYmVyICYgCi0JCQkJCSAweDAwMDAwMEZGKTsKLQkJfQotCX0KLQotCi0JcG5ldHdvcmtfbnVtYmVyID0gKHVuc2lnbmVkIGxvbmcpKChzZW5kcGFja2V0WzE4XSA8PCAyNCkgKyAKLQkJCSAgKHNlbmRwYWNrZXRbMTldIDw8IDE2KSArIChzZW5kcGFja2V0WzIwXSA8PCA4KSArIAotCQkJICBzZW5kcGFja2V0WzIxXSk7Ci0JCi0JCi0JaWYoICFpbmNvbWluZyApIHsKLQkJLyogSWYgdGhlIHNvdXJjZSBuZXR3b3JrIGlzIG91cnMsIG1ha2UgaXQgMCAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IG5ldHdvcmtfbnVtYmVyKSB7Ci0JCQlzZW5kcGFja2V0WzE4XSA9IHNlbmRwYWNrZXRbMTldID0gc2VuZHBhY2tldFsyMF0gPSAKLQkJCQkgc2VuZHBhY2tldFsyMV0gPSAweDAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlIHNvdXJjZSBuZXR3b3JrIGlzIDAsIG1ha2UgaXQgb3VycyAqLwotCQlpZiggcG5ldHdvcmtfbnVtYmVyID09IDAgKSB7Ci0JCQlzZW5kcGFja2V0WzE4XSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciA+PiAyNCk7Ci0JCQlzZW5kcGFja2V0WzE5XSA9ICh1bnNpZ25lZCBjaGFyKSgobmV0d29ya19udW1iZXIgJiAKLQkJCQkJIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJCXNlbmRwYWNrZXRbMjBdID0gKHVuc2lnbmVkIGNoYXIpKChuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwRkYwMCkgPj4gOCk7Ci0JCQlzZW5kcGFja2V0WzIxXSA9ICh1bnNpZ25lZCBjaGFyKShuZXR3b3JrX251bWJlciAmIAotCQkJCQkgMHgwMDAwMDBGRik7Ci0JCX0KLQl9Ci19IC8qIHN3aXRjaF9uZXRfbnVtYmVycyAqLwotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqIFgyNUFQSSBTUEVDSUZJQyBGVU5DVElPTlMgKioqKioqKioqKioqKioqKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIGZpbmRfY2hhbm5lbAotICoKLSAqCU1hbmFnZXMgdGhlIGxjbiB0byBkZXZpY2UgbWFwLiBJdCBpbmNyZWFzZXMgcGVyZm9ybWFuY2UKLSAqICAgICAgYmVjYXVzZSBpdCBlbGltaW5hdGVzIHRoZSBuZWVkIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBsaW5rICAKLSAqICAgICAgbGlzdCBmb3IgYSBkZXZpY2Ugd2hpY2ggaXMgYm91bmRlZCB0byBhIHNwZWNpZmljIGxjbi4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLQotc3RydWN0IG5ldF9kZXZpY2UgKmZpbmRfY2hhbm5lbChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxjbikKLXsKLQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0KLQkJcmV0dXJuIGNhcmQtPndhbmRldi5kZXY7Ci0KLQl9ZWxzZXsKLQkJLyogV2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBpbmNvbWluZyBsY24KLSAgICAgICAgICAgICAgICAgKiBpcyBhIFBWQyBvciBhbiBTVkMgY2hhbm5lbC4gQnV0IHdlIGRvIGtub3cgdGhhdAotICAgICAgICAgICAgICAgICAqIHRoZSBsY24gY2Fubm90IGJlIGZvciBib3RoIHRoZSBQVkMgYW5kIHRoZSBTVkMKLSAgICAgICAgICAgICAgICAgKiBjaGFubmVsLgotCi0JCSAqIElmIHRoZSBsY24gbnVtYmVyIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjU1LCAKLSAgICAgICAgICAgICAgICAgKiB0YWtlIHRoZSBtb2R1bG8gMjU1IG9mIHRoYXQgbnVtYmVyLiBXZSBvbmx5IGhhdmUKLSAgICAgICAgICAgICAgICAgKiAyNTUgbG9jYXRpb25zLCB0aHVzIGhpZ2hlciBudW1iZXJzIG11c3QgYmUgbWFwcGVkCi0gICAgICAgICAgICAgICAgICogdG8gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNDUuIAotCi0JCSAqIFdlIG11c3Qgc2VwYXJhdGUgcHZjJ3MgYW5kIHN2YydzIHNpbmNlIHR3byBkb24ndAotICAgICAgICAgICAgICAgICAqIGhhdmUgdG8gYmUgY29udGlndW91cy4gIE1lYW5pbmcgcHZjJ3MgY2FuIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICogZnJvbSAxIHRvIDEwIGFuZCBzdmMncyBjYW4gc3RhcnQgZnJvbSAyNTYgdG8gMjY2LgotICAgICAgICAgICAgICAgICAqIEJ1dCAyNTYlMjU1IGlzIDEsIGkuZS4gQ09ORkxJQ1QuCi0JCSAqLwotCi0KLQkJLyogSGlnaGVzdCBMQ04gbnVtYmVyIG11c3QgYmUgbGVzcyBvciBlcXVhbCB0byA0MDk2ICovCi0JCWlmICgobGNuIDw9IE1BWF9MQ05fTlVNKSAmJiAobGNuID4gMCkpewotCi0JCQlpZiAobGNuIDwgWDI1X01BWF9DSEFOKXsKLQkJCQlpZiAoY2FyZC0+dS54LnN2Y190b19kZXZfbWFwW2xjbl0pCi0JCQkJCXJldHVybiBjYXJkLT51Lnguc3ZjX3RvX2Rldl9tYXBbbGNuXTsKLQotCQkJCWlmIChjYXJkLT51LngucHZjX3RvX2Rldl9tYXBbbGNuXSkKLQkJCQkJcmV0dXJuIGNhcmQtPnUueC5wdmNfdG9fZGV2X21hcFtsY25dOwotCQkJCi0JCQl9ZWxzZXsKLQkJCQlpbnQgbmV3X2xjbiA9IGxjbiVYMjVfTUFYX0NIQU47Ci0JCQkJaWYgKGNhcmQtPnUueC5zdmNfdG9fZGV2X21hcFtuZXdfbGNuXSkKLQkJCQkJcmV0dXJuIGNhcmQtPnUueC5zdmNfdG9fZGV2X21hcFtuZXdfbGNuXTsKLQotCQkJCWlmIChjYXJkLT51LngucHZjX3RvX2Rldl9tYXBbbmV3X2xjbl0pCi0JCQkJCXJldHVybiBjYXJkLT51LngucHZjX3RvX2Rldl9tYXBbbmV3X2xjbl07Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotCi12b2lkIGJpbmRfbGNuX3RvX2RldihzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxjbikKLXsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCi0JLyogTW9kdWxvIHRoZSBsY24gbnVtYmVyIGJ5IFgyNV9NQVhfQ0hBTiAoMjU1KQotCSAqIGJlY2F1c2UgdGhlIGxjbiBudW1iZXIgY2FuIGJlIGdyZWF0ZXIgdGhhbiAyNTUgCi0gICAgICAgICAqCi0JICogV2UgbmVlZCB0byBzcGxpdCBzdmMgYW5kIHB2YyBzaW5jZSB0aGV5IGRvbid0IGhhdmUKLSAgICAgICAgICogdG8gYmUgY29udGlnb3VzLiAKLQkgKi8KLQotCWlmIChjaGFuLT5jb21tb24uc3ZjKXsKLQkJY2FyZC0+dS54LnN2Y190b19kZXZfbWFwWyhsY24gJSBYMjVfTUFYX0NIQU4pXSA9IGRldjsKLQl9ZWxzZXsKLQkJY2FyZC0+dS54LnB2Y190b19kZXZfbWFwWyhsY24gJSBYMjVfTUFYX0NIQU4pXSA9IGRldjsKLQl9Ci0JY2hhbi0+Y29tbW9uLmxjbiA9IGxjbjsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiB4MjVhcGlfYmggCi0gKgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCB4MjVhcGlfYmgoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQl4MjVfY2hhbm5lbF90KiBjaGFuID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoYW4tPmNhcmQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSA9PSAwKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIIEJ1ZmZlciBFbXB0eSBpbiBCSFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJY2xlYXJfYml0KDAsICZjaGFuLT50cV93b3JraW5nKTsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlIChhdG9taWNfcmVhZCgmY2hhbi0+YmhfYnVmZl91c2VkKSl7Ci0KLQkJLyogSWYgdGhlIHNvY2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgdW5saW5raW5nIHRoZQotCQkgKiBkcml2ZXIgZnJvbSB0aGUgc29ja2V0LCB3ZSBtdXN0IGdldCBvdXQuIAotCQkgKiBUaGlzIG5ldmVyIGhhcHBlbmRzIGJ1dCBpcyBhIHNhbml0eSBjaGVjay4gKi8KLQkJaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbW1vbi5jb21tb25fY3JpdGljYWwpKXsKLQkJCWNsZWFyX2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCS8qIElmIExBUEIgSERMQywgZG8gbm90IGRyb3AgcGFja2V0cyBpZiBzb2NrZXQgaXMKLSAgICAgICAgICAgICAgICAgKiBub3QgY29ubmVjdGVkLiAgTGV0IHRoZSBidWZmZXIgZmlsbCB1cCBhbmQKLSAgICAgICAgICAgICAgICAgKiB0dXJuIG9mZiByeCBpbnRlcnJ1cHQgKi8KLQkJaWYgKGNhcmQtPnUueC5MQVBCX2hkbGMpewotCQkJaWYgKGNoYW4tPmNvbW1vbi5zayA9PSBOVUxMIHx8IGNoYW4tPmNvbW1vbi5mdW5jID09IE5VTEwpewotCQkJCWNsZWFyX2JpdCgwLCAmY2hhbi0+dHFfd29ya2luZyk7CQkJCi0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJc2tiICA9ICgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+YmhfcmVhZF0pLT5za2I7Ci0KLQkJaWYgKHNrYiA9PSBOVUxMKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCSCBTa2IgZW1wdHkgZm9yIHJlYWQgJWlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsY2hhbi0+YmhfcmVhZCk7Ci0JCX1lbHNlewotCQkJCi0JCQlpZiAoY2hhbi0+Y29tbW9uLnNrID09IE5VTEwgfHwgY2hhbi0+Y29tbW9uLmZ1bmMgPT0gTlVMTCl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIOiBTb2NrZXQgZGlzY29ubmVjdGVkLCBkcm9wcGluZ1xuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJeDI1YXBpX2JoX2NsZWFudXAoZGV2KTsKLQkJCQkrK2NoYW4tPmlmc3RhdHMucnhfZHJvcHBlZDsKLQkJCQkrK2NoYW4tPnJ4X2ludHJfc3RhdC5yeF9pbnRyX2Jmcl9ub3RfcGFzc2VkX3RvX3N0YWNrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0KLQkJCWlmIChjaGFuLT5jb21tb24uZnVuYyhza2IsZGV2LGNoYW4tPmNvbW1vbi5zaykgIT0gMCl7Ci0JCQkJLyogU29jayBmdWxsIGNhbm5vdCBzZW5kLCBxdWV1ZSB1cyBmb3IgYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0cnkgCi0JCQkJICovCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJIOiAhISEgUGFja2V0IGZhaWxlZCB0byBzZW5kICEhISEhIFxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5yZWNlaXZlX2Jsb2NrLDEpOwotCQkJCXJldHVybjsKLQkJCX1lbHNlewotCQkJCXgyNWFwaV9iaF9jbGVhbnVwKGRldik7Ci0JCQkJKytjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9iZnJfcGFzc2VkX3RvX3N0YWNrOwotCQkJfQotCQl9Ci0JfQkKLQljbGVhcl9iaXQoMCwgJmNoYW4tPnRxX3dvcmtpbmcpOwotCi0JcmV0dXJuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogeDI1YXBpX2JoX2NsZWFudXAgCi0gKgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHgyNWFwaV9iaF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0KLQkoKGJoX2RhdGFfdCAqKSZjaGFuLT5iaF9oZWFkW2NoYW4tPmJoX3JlYWRdKS0+c2tiID0gTlVMTDsKLQotCWlmIChjaGFuLT5iaF9yZWFkID09IE1BWF9CSF9CVUZGKXsKLQkJY2hhbi0+YmhfcmVhZD0wOwotCX1lbHNlewotCQkrK2NoYW4tPmJoX3JlYWQ7CQotCX0KLQotCS8qIElmIHRoZSBSZWNlaXZlIGludGVycnVwdCB3YXMgb2ZmLCBpdCBtZWFucwotICAgICAgICAgKiB0aGF0IHdlIGZpbGxlZCB1cCBvdXIgY2lyY3VsYXIgYnVmZmVyLiBDaGVjayAgICAKLSAgICAgICAgICogdGhhdCB3ZSBoYXZlIHNwYWNlIGluIHRoZSBidWZmZXIuIElmIHNvIAotICAgICAgICAgKiB0dXJuIHRoZSBSWCBpbnRlcnJ1cHQgYmFjayBvbi4gCi0JICovCi0JaWYgKCEoc3RhdHVzLT5pbWFzayAmIElOVFJfT05fUlhfRlJBTUUpKXsKLQkJaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpIDwgKE1BWF9CSF9CVUZGKzEpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCSDogVHVybmluZyBvbiB0aGUgaW50ZXJydXB0XG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXN0YXR1cy0+aW1hc2sgfD0gSU5UUl9PTl9SWF9GUkFNRTsKLQkJfQotCX0JCi0KLQlhdG9taWNfZGVjKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCXJldHVybiAwOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBiaF9lbnF1ZXVlIAotICoKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBiaF9lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JeDI1X2NoYW5uZWxfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCVRYMjVTdGF0dXMqIHN0YXR1cyA9IGNhcmQtPmZsYWdzOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IChNQVhfQkhfQlVGRisxKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBCb3R0b20gaGFsZiBidWZmZXIgRlVMTFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7IAotCX0KLQotCSgoYmhfZGF0YV90ICopJmNoYW4tPmJoX2hlYWRbY2hhbi0+Ymhfd3JpdGVdKS0+c2tiID0gc2tiOwotCi0JaWYgKGNoYW4tPmJoX3dyaXRlID09IE1BWF9CSF9CVUZGKXsKLQkJY2hhbi0+Ymhfd3JpdGU9MDsKLQl9ZWxzZXsKLQkJKytjaGFuLT5iaF93cml0ZTsKLQl9Ci0KLQlhdG9taWNfaW5jKCZjaGFuLT5iaF9idWZmX3VzZWQpOwotCi0JaWYgKGF0b21pY19yZWFkKCZjaGFuLT5iaF9idWZmX3VzZWQpID09IChNQVhfQkhfQlVGRisxKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBCdWZmZXIgaXMgbm93IGZ1bGwsIFR1cm5pbmcgb2ZmIFJYIEludHJcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXN0YXR1cy0+aW1hc2sgJj0gfklOVFJfT05fUlhfRlJBTUU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHRpbWVyX2ludHJfY21kX2V4ZWMKLSAqICAKLSAqCUNhbGxlZCBieSB0aW1lciBpbnRlcnJ1cHQgdG8gZXhlY3V0ZSBhIGNvbW1hbmQKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCB0aW1lcl9pbnRyX2NtZF9leGVjIChzZGxhX3QqIGNhcmQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1bnNpZ25lZCBjaGFyIG1vcmVfdG9fZXhlYz0wOwotCXZvbGF0aWxlIHgyNV9jaGFubmVsX3QgKmNoYW49TlVMTDsKLQlpbnQgaT0wLGJhZF9jbWQ9MCxlcnI9MDsJCi0KLQlpZiAoY2FyZC0+dS54LmNtZF9kZXYgPT0gTlVMTCl7Ci0JCWNhcmQtPnUueC5jbWRfZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQl9Ci0KLQlkZXYgPSBjYXJkLT51LnguY21kX2RldjsKLQotCWZvciAoOzspewotCi0JCWNoYW4gPSBkZXYtPnByaXY7Ci0JCQotCQlpZiAoYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKSl7IAotCi0JCQliYWRfY21kID0gY2hlY2tfYmFkX2NvbW1hbmQoY2FyZCxkZXYpOwotCi0JCQlpZiAoKCFjaGFuLT5jb21tb24ubWJveCB8fCBhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmRpc2Nvbm5lY3QpKSAmJiAKLQkJCSAgICAgIWJhZF9jbWQpewotCi0JCQkJLyogU29ja2V0IGhhcyBkaWVkIG9yIGV4aXRlZCwgV2UgbXVzdCBicmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2hhbm5lbCBkb3duIGJlZm9yZSBhbnlib2R5IGVsc2UgdHJpZXMgdG8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZSBpdCAqLwotCQkJCWVyciA9IGNoYW5uZWxfZGlzY29ubmVjdChjYXJkLGRldik7Ci0JCQl9ZWxzZXsKLQkJCSAgICAgICAgZXJyID0gZXhlY3V0ZV9kZWxheWVkX2NtZChjYXJkLCBkZXYsCi0JCQkJCQkJIChtYm94X2NtZF90KiljaGFuLT5jb21tb24ubWJveCwKLQkJCQkJCQkgIGJhZF9jbWQpOwotCQkJfQotCi0JCQlzd2l0Y2ggKGVycil7Ci0KLQkJCWNhc2UgUkVUVVJOX1JFU1VMVDoKLQotCQkJCS8qIFJldHVybiB0aGUgcmVzdWx0IHRvIHRoZSBzb2NrZXQgd2l0aG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWxheS4gTk9fV0FJVCBDb21tYW5kICovCQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJCWlmIChhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSkpCi0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0KLQkJCQlzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChjYXJkLGRldixjYXJkLT5tYm94KTsKLQotCQkJCW1vcmVfdG9fZXhlYz0wOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERUxBWV9SRVNVTFQ6Ci0JCQotCQkJCS8qIFdhaXQgZm9yIHRoZSByZW1vdGUgdG8gcmVzcG9uZCwgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlbmRpbmcgdGhlIHJlc3VsdCB1cCB0byB0aGUgc29ja2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBXQUlUIGNvbW1hbmQgKi8KLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3kpKQotCQkJCQlhdG9taWNfc2V0KCZjYXJkLT51LnguY29tbWFuZF9idXN5LDApOwotCQkJCQotCQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJCW1vcmVfdG9fZXhlYz0wOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQotCQkJCS8qIElmIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzb21lIHJlYXNvbiAoaS5lIHJldHVybiBjb2RlIDB4MzMgYnVzeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2V0IHRoZSBtb3JlX3RvX2V4ZWMgYml0IHdoaWNoIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5kaWNhdGUgdGhhdCB0aGlzIGNvbW1hbmQgbXVzdCBiZSBleGVjdHVlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZ2FpbiBkdXJpbmcgbmV4dCB0aW1lciBpbnRlcnJ1cHQgCi0JCQkJICovCi0JCQkJbW9yZV90b19leGVjPTE7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZjYXJkLT51LnguY29tbWFuZF9idXN5KSA9PSAwKQotCQkJCQlhdG9taWNfc2V0KCZjYXJkLT51LnguY29tbWFuZF9idXN5LDEpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQliYWRfY21kPTA7Ci0KLQkJCS8qIElmIGZsYWdzIGlzIHNldCwgdGhlcmUgYXJlIG5vIGhkbGMgYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRodXMsIHdhaXQgZm9yIHRoZSBuZXh0IHBhc3MgYW5kIHRyeSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNhbWUgY29tbWFuZCBhZ2Fpbi4gT3RoZXJ3aXNlLCBzdGFydCBzZWFyY2hpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBuZXh0IHBhc3MuIAotCQkJICovCi0JCQlpZiAoIW1vcmVfdG9fZXhlYyl7Ci0JCQkJZGV2ID0gbW92ZV9kZXZfdG9fbmV4dChjYXJkLGRldik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfWVsc2V7Ci0JCQkvKiBUaGlzIGRldmljZSBoYXMgbm90aGluZyB0byBleGVjdXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICogZ28gdG8gbmV4dC4gCi0JCQkgKi8KLQkJCWlmIChhdG9taWNfcmVhZCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSkpCi0JCQkJCWF0b21pY19zZXQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3ksMCk7Ci0JCQlkZXYgPSBtb3ZlX2Rldl90b19uZXh0KGNhcmQsZGV2KTsKLQkJfQkKLQotCQlpZiAoKytpID09IGNhcmQtPnUueC5ub19kZXYpewotCQkJaWYgKCFtb3JlX3RvX2V4ZWMpewotCQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogTm90aGluZyB0byBleGVjdXRlIGluIFRpbWVyXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmNhcmQtPnUueC5jb21tYW5kX2J1c3kpKXsKLQkJCQkJYXRvbWljX3NldCgmY2FyZC0+dS54LmNvbW1hbmRfYnVzeSwwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JfSAvL0VuZCBvZiBGT1IKLQotCWNhcmQtPnUueC5jbWRfZGV2ID0gZGV2OwotCQotCWlmIChtb3JlX3RvX2V4ZWMpewotCQkvKiBJZiBtb3JlIGNvbW1hbmRzIGFyZSBwZW5kaW5nLCBkbyBub3QgdHVybiBvZmYgdGltZXIgCi0gICAgICAgICAgICAgICAgICogaW50ZXJydXB0ICovCi0JCXJldHVybiAxOwotCX1lbHNlewotCQkvKiBObyBtb3JlIGNvbW1hbmRzLCB0dXJuIG9mZiB0aW1lciBpbnRlcnJ1cHQgKi8KLQkJcmV0dXJuIDA7Ci0JfQkKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGV4ZWN1dGVfZGVsYXllZF9jbWQgCi0gKgotICoJRXhlY3V0ZSBhbiBBUEkgY29tbWFuZCB3aGljaCB3YXMgcGFzc2VkIGRvd24gZnJvbSB0aGUKLSAqICAgICAgc29jay4gIFNvY2sgaXMgdmVyeSBsaW1pdGVkIGluIHdoaWNoIGNvbW1hbmRzIGl0IGNhbgotICogICAgICBleGVjdXRlLiAgV2FpdCBhbmQgTm8gV2FpdCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLiAgCi0gKiAgICAgIFBsYWNlIENhbGwsIENsZWFyIENhbGwgYW5kIFJlc2V0IHdhaXQgY29tbWFuZHMsIHdoZXJlCi0gKiAgICAgIEFjY2VwdCBDYWxsIGlzIGEgbm9fd2FpdCBjb21tYW5kLgotICoKLSAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBleGVjdXRlX2RlbGF5ZWRfY21kKHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBtYm94X2NtZF90ICp1c3JfY21kLCBjaGFyIGJhZF9jbWQpCi17Ci0JVFgyNU1ib3gqIG1ib3ggPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQlpbnQgZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQotCWlmICghKCpjYXJkLT51LnguaGRsY19idWZfc3RhdHVzICYgMHg0MCkgJiYgIWJhZF9jbWQpewotCQlyZXR1cm4gVFJZX0NNRF9BR0FJTjsKLQl9Ci0KLQkvKiBUaGlzIHdheSBhIGNvbW1hbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBleGVjdXRlZCBmb3IKLSAgICAgICAgICogYSBzcGVjaWZpYyBsY24sIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBib3VuZCB0by4gKi8KLQl1c3JfY21kLT5jbWQubGNuID0gY2hhbi0+Y29tbW9uLmxjbjsKLQkKLQotCS8qIElmIGNoYW5uZWwgaXMgcHZjLCBpbnN0ZWFkIG9mIHBsYWNlIGNhbGwKLSAgICAgICAgICogcnVuIHgyNV9jaGFubmVsIGNvbmZpZ3VyYXRpb24uIElmIHJ1bm5pbmcgTEFQQiBIRExDCi0gICAgICAgICAqIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4gCi0gICAgICAgICAqLwotCWlmICgoIWNoYW4tPmNvbW1vbi5zdmMpICYmICh1c3JfY21kLT5jbWQuY29tbWFuZCA9PSBYMjVfUExBQ0VfQ0FMTCkpewotCi0JCWlmIChjYXJkLT51LnguTEFQQl9oZGxjKXsKLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICJMQVBCOiBDb25uZWN0aW5nXG4iKTsKLQkJCWNvbm5lY3QoY2FyZCk7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsV0FOX0NPTk5FQ1RJTkcpOwotCQkJcmV0dXJuIERFTEFZX1JFU1VMVDsKLQkJfWVsc2V7Ci0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiJXM6IFBWQyBpcyBDT05ORUNUSU5HXG4iLGNhcmQtPmRldm5hbWUpOwotCQkJaWYgKHgyNV9nZXRfY2hhbl9jb25mKGNhcmQsIGNoYW4pID09IENNRF9PSyl7Ci0JCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fQ09OTkVDVEVEKTsKLQkJCX1lbHNleyAKLQkJCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJfQotCQkJcmV0dXJuIFJFVFVSTl9SRVNVTFQ7Ci0JCX0KLQl9Ci0KLQkvKiBDb3B5IHRoZSBzb2NrZXQgbWJveCBjb21tYW5kIG9udG8gdGhlIGJvYXJkICovCi0KLQltZW1jcHkoJm1ib3gtPmNtZCwgJnVzcl9jbWQtPmNtZCwgc2l6ZW9mKFRYMjVDbWQpKTsKLQlpZiAodXNyX2NtZC0+Y21kLmxlbmd0aCl7Ci0JCW1lbWNweShtYm94LT5kYXRhLCB1c3JfY21kLT5kYXRhLCB1c3JfY21kLT5jbWQubGVuZ3RoKTsKLQl9Ci0KLQkvKiBDaGVjayBpZiBjb21tYW5kIGlzIGJhZC4gV2UgbmVlZCB0byBjb3B5IHRoZSBjbWQgaW50bwotICAgICAgICAgKiB0aGUgYnVmZmVyIHJlZ2FyZGxlc3Mgc2luY2Ugd2UgcmV0dXJuIHRoZSwgbWJveCB0bwotICAgICAgICAgKiB0aGUgdXNlciAqLwotCWlmIChiYWRfY21kKXsKLQkJbWJveC0+Y21kLnJlc3VsdD0weDAxOwotCQlyZXR1cm4gUkVUVVJOX1JFU1VMVDsKLQl9Ci0KLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQlpZiAoZXJyICE9IENNRF9PSyAmJiBlcnIgIT0gWDI1UkVTX05PVF9SRUFEWSkKLQkJeDI1X2Vycm9yKGNhcmQsIGVyciwgdXNyX2NtZC0+Y21kLmNvbW1hbmQsIHVzcl9jbWQtPmNtZC5sY24pOwotCi0JaWYgKG1ib3gtPmNtZC5yZXN1bHQgPT0gWDI1UkVTX05PVF9SRUFEWSl7Ci0JCXJldHVybiBUUllfQ01EX0FHQUlOOwotCX0KLQotCXN3aXRjaCAobWJveC0+Y21kLmNvbW1hbmQpewotCi0JY2FzZSBYMjVfUExBQ0VfQ0FMTDoKLQkJCi0JCXN3aXRjaCAobWJveC0+Y21kLnJlc3VsdCl7Ci0KLQkJY2FzZSBDTURfT0s6Ci0KLQkJCS8qIENoZWNrIGlmIFBsYWNlIGNhbGwgaXMgYSB3YWl0IGNvbW1hbmQgb3IgYSAKLSAgICAgICAgICAgICAgIAkgIAkgKiBubyB3YWl0IGNvbW1hbmQgKi8KLQkJCWlmIChhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpICYgMHg4MCkKLSAJCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQkJCWVsc2UKLQkJCQlkZWxheT1ERUxBWV9SRVNVTFQ7Ci0JCQotCi0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiXG4lczogUExBQ0UgQ0FMTCBCaW5kaW5nIGRldiAlcyB0byBsY24gJWlcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lLCBtYm94LT5jbWQubGNuKTsKLQkJCi0JCQliaW5kX2xjbl90b19kZXYgKGNhcmQsIGRldiwgbWJveC0+Y21kLmxjbik7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9DT05ORUNUSU5HKTsKLQkJCWJyZWFrOwotCi0KLQkJZGVmYXVsdDoKLQkJCWRlbGF5PVJFVFVSTl9SRVNVTFQ7Ci0JCQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFgyNV9BQ0NFUFRfQ0FMTDogCi0JCQotCQlzd2l0Y2ggKG1ib3gtPmNtZC5yZXN1bHQpewotCi0JCWNhc2UgQ01EX09LOgotCi0JCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiXG4lczogQUNDRVBUIEJpbmRpbmcgZGV2ICVzIHRvIGxjbiAlaVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLGRldi0+bmFtZSxtYm94LT5jbWQubGNuKTsKLQotCQkJYmluZF9sY25fdG9fZGV2IChjYXJkLCBkZXYsIG1ib3gtPmNtZC5sY24pOwotCi0JCQlpZiAoeDI1X2dldF9jaGFuX2NvbmYoY2FyZCwgY2hhbikgPT0gQ01EX09LKXsKLQotCQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0NPTk5FQ1RFRCk7Ci0JCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQotCQkJfWVsc2V7IAotCQkJCWlmICh4MjVfY2xlYXJfY2FsbChjYXJkLCB1c3JfY21kLT5jbWQubGNuLCAwLCAwKSA9PSBDTURfT0spewotCQkJCQkvKiBpZiBjbGVhciBpcyBzdWNjZXNzZnVsLCB3YWl0IGZvciBjbGVhciBjb25maXJtIAotCQkJCQkgKi8gCi0JCQkJCWRlbGF5PURFTEFZX1JFU1VMVDsKLQkJCQl9ZWxzZXsKLQkJCQkJLyogRG8gbm90IGNoYW5nZSB0aGUgc3RhdGUgaGVyZS4gSWYgd2UgZmFpbCAKLQkJCQkJICogdGhlIGFjY2VwdCB0aGUgcmV0dXJuIGNvZGUgaXMgc2VuZCB1cCAKLQkJCQkJICp0aGUgc3RhY2ssIHdoaWNoIHdpbGwgZXRoZXIgcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAJICogb3IgY2xlYXIgdGhlIGNhbGwgCi0JCQkJCSAqLwotCQkJCQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAKLQkJCQkJCSIlczogQUNDRVBUOiBTVEFURSBNQVkgQkUgQ1VSUlVQVEVEIDIgISEhISFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQkJZGVsYXk9UkVUVVJOX1JFU1VMVDsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQotCi0JCWNhc2UgWDI1UkVTX0FTWU5DX1BBQ0tFVDoKLQkJCWRlbGF5PVRSWV9DTURfQUdBSU47Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OiAKLQkJCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogQUNDRVBUIEZBSUxFRFxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCWlmICh4MjVfY2xlYXJfY2FsbChjYXJkLCB1c3JfY21kLT5jbWQubGNuLCAwLCAwKSA9PSBDTURfT0spewotCQkJCWRlbGF5PURFTEFZX1JFU1VMVDsKLQkJCX1lbHNlewotCQkJCS8qIERvIG5vdCBjaGFuZ2UgdGhlIHN0YXRlIGhlcmUuIElmIHdlIGZhaWwgdGhlIGFjY2VwdC4gVGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJldHVybiBjb2RlIGlzIHNlbmQgdXAgdGhlIHN0YWNrLCB3aGljaCB3aWxsIGV0aGVyIHJldHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9yIGNsZWFyIHRoZSBjYWxsICovCi0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gCi0JCQkJCSIlczogQUNDRVBUOiBTVEFURSBNQVkgQkUgQ09SUlVQVEVEIDEgISEhISFcbiIsCi0JCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCQlkZWxheT1SRVRVUk5fUkVTVUxUOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBYMjVfQ0xFQVJfQ0FMTDoKLQotCQlzd2l0Y2ggKG1ib3gtPmNtZC5yZXN1bHQpewotCi0JCWNhc2UgQ01EX09LOgotCQkJREJHX1BSSU5USyhLRVJOX0lORk8gCi0JCQkJCSJDQUxMIENMRUFSIE9LOiBEZXYgJXMgTWJveCBMY24gJWkgIENoYW4gTGNuICVpXG4iLAotCQkJCQlkZXYtPm5hbWUsbWJveC0+Y21kLmxjbixjaGFuLT5jb21tb24ubGNuKTsKLQkJCXNldF9jaGFuX3N0YXRlKGRldiwgV0FOX0RJU0NPTk5FQ1RJTkcpOwotCQkJZGVsYXkgPSBERUxBWV9SRVNVTFQ7Ci0JCQlicmVhazsKLQotCQljYXNlIFgyNVJFU19DSEFOTkVMX0lOX1VTRToKLQkJY2FzZSBYMjVSRVNfQVNZTkNfUEFDS0VUOgotCQkJZGVsYXkgPSBUUllfQ01EX0FHQUlOOwotCQkJYnJlYWs7Ci0JCQkKLQkJY2FzZSBYMjVSRVNfTElOS19OT1RfSU5fQUJNOgotCQljYXNlIFgyNVJFU19JTlZBTF9MQ046Ci0JCWNhc2UgWDI1UkVTX0lOVkFMX1NUQVRFOgotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LCBXQU5fRElTQ09OTkVDVEVEKTsKLQkJCWRlbGF5ID0gUkVUVVJOX1JFU1VMVDsKLQkJCWJyZWFrOwotCQkKLQkJZGVmYXVsdDoKLQkJCS8qIElmIGNvbW1hbmQgZGlkIG5vdCBleGVjdXRlIGJlY2F1c2Ugb2YgdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICogZmF1bHQsIGRvIG5vdCBjaGFuZ2UgdGhlIHN0YXRlLiBUaGlzIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ25hbCB0aGUgc29ja2V0IHRoYXQgY2xlYXIgY29tbWFuZCBmYWlsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2VyIGNhbiByZXRyeSBvciBjbG9zZSB0aGUgc29ja2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICogV2hlbiBzb2NrZXQgZ2V0cyBraWxsZWQsIGl0IHdpbGwgc2V0IHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYW4tPmRpc2Nvbm5lY3Qgd2hpY2ggd2lsbCBzaWduYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGRyaXZlciB0byBjbGVhciB0aGUgY2FsbCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENsZWFyIENvbW1hbmQgRmFpbGVkLCBSYyAleFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lLG1ib3gtPmNtZC5jb21tYW5kKTsgCi0JCQlkZWxheSA9IFJFVFVSTl9SRVNVTFQ7Ci0JCX0KLQkJYnJlYWs7Ci0JfQkKLQotCXJldHVybiBkZWxheTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGFwaV9pbmNvbWluZ19jYWxsIAotICoKLSAqCVBhc3MgYW4gaW5jb21pbmcgY2FsbCByZXF1ZXN0IHVwIHRoZSBsaXN0ZW5pbmcKLSAqICAgICAgc29jay4gIElmIHRoZSBBUEkgc29jayBpcyBub3QgbGlzdGVuaW5nIHJlamVjdCB0aGUKLSAqICAgICAgY2FsbC4KLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgYXBpX2luY29taW5nX2NhbGwgKHNkbGFfdCogY2FyZCwgVFgyNU1ib3ggKm1ib3gsIGludCBsY24pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbGVuID0gc2l6ZW9mKFRYMjVDbWQpK21ib3gtPmNtZC5sZW5ndGg7Ci0KLQlpZiAoYWxsb2NfYW5kX2luaXRfc2tiX2J1ZihjYXJkLCAmc2tiLCBsZW4pKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFQSSBpbmNvbWluZyBjYWxsLCBubyBtZW1vcnlcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCW1lbWNweShza2JfcHV0KHNrYixsZW4pLCZtYm94LT5jbWQsbGVuKTsKLQotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKLQlza2ItPnByb3RvY29sID0gaHRvbnMoWDI1X1BST1QpOwotCXNrYi0+cGt0X3R5cGUgPSBXQU5fUEFDS0VUX0FTWU5DOwotCi0JaWYgKGNhcmQtPmZ1bmMoc2tiLGNhcmQtPnNrKSA8IDApewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTUFKT1IgRVJST1I6IEZhaWxlZCB0byBzZW5kIHVwIHBsYWNlIGNhbGwgXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQKLSAqCi0gKglXYWl0IGNvbW1hbmRzIGxpa2UgUExFQUNFIENBTEwgb3IgQ0xFQVIgQ0FMTCBtdXN0IHdhaXQKLSAqICAgICAgdW50aWwgdGhlIHJlc3VsdCBhcnJpdmVzLiBUaGlzIGZ1bmN0aW9uIHBhc3NlcwotICogICAgICB0aGUgcmVzdWx0IHRvIGEgd2FpdGluZyBzb2NrLiAKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCBzZW5kX2RlbGF5ZWRfY21kX3Jlc3VsdChzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIFRYMjVNYm94KiBtYm94KQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JbWJveF9jbWRfdCAqdXNyX2NtZCA9IChtYm94X2NtZF90ICopY2hhbi0+Y29tbW9uLm1ib3g7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbGVuPXNpemVvZih1bnNpZ25lZCBjaGFyKTsKLQotCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCi0JLyogSWYgdGhlIHNvY2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgdW5saW5raW5nIHRoZQotCSAqIGRyaXZlciBmcm9tIHRoZSBzb2NrZXQsIHdlIG11c3QgZ2V0IG91dC4gCi0JICogVGhpcyBuZXZlciBoYXBwZW5kcyBidXQgaXMgYSBzYW5pdHkgY2hlY2suICovCi0JaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbW1vbi5jb21tb25fY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdXNyX2NtZCB8fCAhY2hhbi0+Y29tbW9uLnNrIHx8ICFjaGFuLT5jb21tb24uZnVuYyl7Ci0JCURCR19QUklOVEsoS0VSTl9JTkZPICJEZWxheSByZXN1bHQ6IFNvY2sgbm90IGJvdW5kZWQgc2s6ICV1LCBmdW5jOiAldSwgbWJveDogJXVcbiIsCi0JCQkodW5zaWduZWQgaW50KWNoYW4tPmNvbW1vbi5zaywKLQkJCSh1bnNpZ25lZCBpbnQpY2hhbi0+Y29tbW9uLmZ1bmMsCi0JCQkodW5zaWduZWQgaW50KXVzcl9jbWQpOyAKLQkJcmV0dXJuOwotCX0KLQotCW1lbWNweSgmdXNyX2NtZC0+Y21kLCAmbWJveC0+Y21kLCBzaXplb2YoVFgyNUNtZCkpOyAKLQlpZiAobWJveC0+Y21kLmxlbmd0aCA+IDApewotCQltZW1jcHkodXNyX2NtZC0+ZGF0YSwgbWJveC0+ZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0JfQotCi0JaWYgKGFsbG9jX2FuZF9pbml0X3NrYl9idWYoY2FyZCwmc2tiLGxlbikpewotCQlwcmludGsoS0VSTl9JTkZPICJEZWxheSByZXN1bHQ6IE5vIHNvY2sgYnVmZmVyc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoc2tiX3B1dChza2IsbGVuKSwmbWJveC0+Y21kLmNvbW1hbmQsbGVuKTsKLQkKLQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0Jc2tiLT5wa3RfdHlwZSA9IFdBTl9QQUNLRVRfQ01EOwotCQkJCi0JY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY2xlYXJfY29uZmlybV9ldmVudAotICoKLSAqIAlQYXNzIHRoZSBjbGVhciBjb25maXJtYXRpb24gZXZlbnQgdXAgdGhlIHNvY2suIFRoZQotICogICAgICBBUEkgd2lsbCBkaXNjb25uZWN0IG9ubHkgYWZ0ZXIgdGhlIGNsZWFyIGNvbmZpcm1hdGlvbgotICogICAgICBoYXMgYmVlbiByZWNlaXZlZC4gCi0gKgotICogICAgICBEZXBlbmRpbmcgb24gdGhlIHN0YXRlLCBjbGVhciBjb25maXJtYXRpb24gY291bGQgCi0gKiAgICAgIGJlIGFuIE9PQiBldmVudCwgb3IgYSByZXN1bHQgb2YgYW4gQVBJIGNvbW1hbmQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgY2xlYXJfY29uZmlybV9ldmVudCAoc2RsYV90ICpjYXJkLCBUWDI1TWJveCogbWIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCXVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlOwkKLQotCWRldiA9IGZpbmRfY2hhbm5lbChjYXJkLG1iLT5jbWQubGNuKTsKLQlpZiAoIWRldil7Ci0JCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogKioqIEdPVCBDTEVBUiBCVVQgTk8gREVWICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsbWItPmNtZC5sY24pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljaGFuPWRldi0+cHJpdjsKLQlEQkdfUFJJTlRLKEtFUk5fSU5GTyAiJXM6IEdPVCBDTEVBUiBDT05GSVJNICVzOiAgTWJveCBsY24gJWkgIENoYW4gbGNuICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBtYi0+Y21kLmxjbiwgY2hhbi0+Y29tbW9uLmxjbik7Ci0KLQkvKiBJZiBub3QgQVBJIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0LiAKLQkgKiBJZiBBUEksIHNlbmQgdGhlIHJlc3VsdCB0byBhIHdhaXRpbmcKLSAgICAgICAgICogc29ja2V0LgotCSAqLwotCQotCW9sZF9zdGF0ZSA9IGNoYW4tPmNvbW1vbi5zdGF0ZTsKLQlzZXRfY2hhbl9zdGF0ZShkZXYsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKXsKLQkJc3dpdGNoIChvbGRfc3RhdGUpIHsKLQotCQljYXNlIFdBTl9ESVNDT05ORUNUSU5HOgotCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJc2VuZF9kZWxheWVkX2NtZF9yZXN1bHQoY2FyZCxkZXYsbWIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0FOX0NPTk5FQ1RFRDoKLQkJCXNlbmRfb29iX21zZyhjYXJkLGRldixtYik7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHNlbmRfb29iX21zZwotICoKLSAqICAgIENvbnN0cnVjdCBhbiBORU0gTWVzc2FnZSBhbmQgcGFzcyBpdCB1cCB0aGUgY29ubmVjdGVkCi0gKiAgICBzb2NrLiBJZiB0aGUgc29jayBpcyBub3QgYm91bmRlZCBkaXNjYXJkIHRoZSBORU0uCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBzZW5kX29vYl9tc2coc2RsYV90ICpjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBUWDI1TWJveCAqbWJveCkKLXsKLQl4MjVfY2hhbm5lbF90ICpjaGFuID0gZGV2LT5wcml2OwotCW1ib3hfY21kX3QgKnVzcl9jbWQgPSAobWJveF9jbWRfdCAqKWNoYW4tPmNvbW1vbi5tYm94OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGxlbj1zaXplb2YoeDI1YXBpX2hkcl90KSttYm94LT5jbWQubGVuZ3RoOwotCXgyNWFwaV90ICphcGlfaGRyOwotCi0JLyogSWYgdGhlIHNvY2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgdW5saW5raW5nIHRoZQotCSAqIGRyaXZlciBmcm9tIHRoZSBzb2NrZXQsIHdlIG11c3QgZ2V0IG91dC4gCi0JICogVGhpcyBuZXZlciBoYXBwZW5kcyBidXQgaXMgYSBzYW5pdHkgY2hlY2suICovCi0JaWYgKHRlc3RfYml0KDAsJmNoYW4tPmNvbW1vbi5jb21tb25fY3JpdGljYWwpKXsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdXNyX2NtZCB8fCAhY2hhbi0+Y29tbW9uLnNrIHx8ICFjaGFuLT5jb21tb24uZnVuYyl7Ci0JCURCR19QUklOVEsoS0VSTl9JTkZPICJPT0IgTVNHOiBTb2NrIG5vdCBib3VuZGVkXG4iKTsgCi0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoJnVzcl9jbWQtPmNtZCwgJm1ib3gtPmNtZCwgc2l6ZW9mKFRYMjVDbWQpKTsgCi0JaWYgKG1ib3gtPmNtZC5sZW5ndGggPiAwKXsKLQkJbWVtY3B5KHVzcl9jbWQtPmRhdGEsIG1ib3gtPmRhdGEsIG1ib3gtPmNtZC5sZW5ndGgpOwotCX0KLQotCWlmIChhbGxvY19hbmRfaW5pdF9za2JfYnVmKGNhcmQsJnNrYixsZW4pKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE9PQiBNU0c6IE5vIHNvY2sgYnVmZmVyc1xuIixjYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCWFwaV9oZHIgPSAoeDI1YXBpX3QqKXNrYl9wdXQoc2tiLGxlbik7IAotCWFwaV9oZHItPmhkci5wa3RUeXBlID0gbWJveC0+Y21kLnBrdFR5cGUgJiAweDdGOwotCWFwaV9oZHItPmhkci5xZG0gICAgID0gbWJveC0+Y21kLnFkbTsKLQlhcGlfaGRyLT5oZHIuY2F1c2UgICA9IG1ib3gtPmNtZC5jYXVzZTsKLQlhcGlfaGRyLT5oZHIuZGlhZ24gICA9IG1ib3gtPmNtZC5kaWFnbjsKLQlhcGlfaGRyLT5oZHIubGVuZ3RoICA9IG1ib3gtPmNtZC5sZW5ndGg7Ci0JYXBpX2hkci0+aGRyLnJlc3VsdCAgPSBtYm94LT5jbWQucmVzdWx0OwotCWFwaV9oZHItPmhkci5sY24gICAgID0gbWJveC0+Y21kLmxjbjsKLQotCWlmIChtYm94LT5jbWQubGVuZ3RoID4gMCl7Ci0JCW1lbWNweShhcGlfaGRyLT5kYXRhLG1ib3gtPmRhdGEsbWJveC0+Y21kLmxlbmd0aCk7Ci0JfQotCQotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKLQlza2ItPnBrdF90eXBlID0gV0FOX1BBQ0tFVF9FUlI7Ci0JCQkKLQlpZiAoY2hhbi0+Y29tbW9uLmZ1bmMoc2tiLGRldixjaGFuLT5jb21tb24uc2spIDwgMCl7Ci0JCWlmIChiaF9lbnF1ZXVlKGRldixza2IpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcm9wcGluZyBPT0IgTVNHXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9Ci0JfQotCi0JREJHX1BSSU5USyhLRVJOX0lORk8gIiVzOiBPT0IgTVNHIE9LLCAlcywgbGNuICVpXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lLCBtYm94LT5jbWQubGNuKTsKLX0JCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgYWxsb2NfYW5kX2luaXRfc2tiX2J1ZiAKLSAqCi0gKglBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBza2IgYnVmZmVyLiAKLSAqCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgYWxsb2NfYW5kX2luaXRfc2tiX2J1ZiAoc2RsYV90ICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9ICpza2I7Ci0KLQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBYMjVfSFJESERSX1NaKTsKLQlpZiAobmV3X3NrYiA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsCi0JCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHNrYl90YWlscm9vbShuZXdfc2tiKSA8IGxlbil7Ci0JCS8qIE5vIHJvb20gZm9yIHRoZSBwYWNrZXQuIENhbGwgb2ZmIHRoZSB3aG9sZSB0aGluZyEgKi8KLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpc3RlbjogdW5leHBlY3RlZGx5IGxvbmcgcGFja2V0IHNlcXVlbmNlXG4iCi0JCQksY2FyZC0+ZGV2bmFtZSk7Ci0JCSpza2IgPSBOVUxMOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkqc2tiID0gbmV3X3NrYjsKLQlyZXR1cm4gMDsKLQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogIGFwaV9vb2JfZXZlbnQgCi0gKgotICoJU2VuZCBhbiBPT0IgZXZlbnQgdXAgdG8gdGhlIHNvY2sgCi0gKgotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBhcGlfb29iX2V2ZW50IChzZGxhX3QgKmNhcmQsVFgyNU1ib3ggKm1ib3gpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpbmRfY2hhbm5lbChjYXJkLCBtYm94LT5jbWQubGNuKTsKLQl4MjVfY2hhbm5lbF90ICpjaGFuOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQotCWNoYW49ZGV2LT5wcml2OwotCi0JaWYgKGNoYW4tPmNvbW1vbi51c2VkYnkgPT0gQVBJKQotCQlzZW5kX29vYl9tc2coY2FyZCxkZXYsbWJveCk7Ci0JCi19Ci0KLQotCi0KLXN0YXRpYyBpbnQgY2hhbm5lbF9kaXNjb25uZWN0KHNkbGFfdCogY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotCWludCBlcnI7Ci0JeDI1X2NoYW5uZWxfdCAqY2hhbiA9IGRldi0+cHJpdjsKLQotCURCR19QUklOVEsoS0VSTl9JTkZPICIlczogVElNRVI6ICVzLCBEZXZpY2UgZG93biBkaXNjb25uZWN0aW5nXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsZGV2LT5uYW1lKTsKLQotCWlmIChjaGFuLT5jb21tb24uc3ZjKXsKLQkJZXJyID0geDI1X2NsZWFyX2NhbGwoY2FyZCxjaGFuLT5jb21tb24ubGNuLDAsMCk7Ci0JfWVsc2V7Ci0JCS8qIElmIGNoYW5uZWwgaXMgUFZDIG9yIExBUEIgSERMQywgdGhlcmUgaXMgbm8gY2FsbAotICAgICAgICAgICAgICAgICAqIHRvIGJlIGNsZWFyZWQsIHRodXMgZHJvcCBkb3duIHRvIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICogYXJlYSAKLQkgICAgICAgICAqLwotCQllcnIgPSAxOwotCX0KLQotCXN3aXRjaCAoZXJyKXsKLQkKLQkJY2FzZSBYMjVSRVNfQ0hBTk5FTF9JTl9VU0U6CQotCQljYXNlIFgyNVJFU19OT1RfUkVBRFk6Ci0JCQllcnIgPSBUUllfQ01EX0FHQUlOOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ01EX09LOgotCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIkNBTEwgQ0xFQVIgT0s6IERldiAlcyBDaGFuIExjbiAlaVxuIiwKLQkJCQkJCWRldi0+bmFtZSxjaGFuLT5jb21tb24ubGNuKTsKLQotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LFdBTl9ESVNDT05ORUNUSU5HKTsKLQkJCWF0b21pY19zZXQoJmNoYW4tPmNvbW1vbi5jb21tYW5kLDApOwotCQkJZXJyID0gREVMQVlfUkVTVUxUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBJZiBMQVBCIEhETEMgcHJvdG9jb2wsIGJyaW5nIHRoZSB3aG9sZSBsaW5rIGRvd24KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIG9uY2UgdGhlIGFwcGxpY2F0aW9uIHRlcm1pbmF0ZXMgCi0JCQkgKi8KLQotCQkJc2V0X2NoYW5fc3RhdGUoZGV2LFdBTl9ESVNDT05ORUNURUQpOwotCi0JCQlpZiAoY2FyZC0+dS54LkxBUEJfaGRsYyl7Ci0JCQkJREJHX1BSSU5USyhLRVJOX0lORk8gIkxBUEI6IERpc2Nvbm5lY3RpbmcgTGlua1xuIik7Ci0JCQkJaGRsY19saW5rX2Rvd24gKGNhcmQpOwotCQkJfQotCQkJYXRvbWljX3NldCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQsMCk7Ci0JCQllcnIgPSBSRVRVUk5fUkVTVUxUOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgaGRsY19saW5rX2Rvd24gKHNkbGFfdCAqY2FyZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IHJldHJ5ID0gNTsKLQlpbnQgZXJyPTA7Ci0KLQlkbyB7Ci0JCW1lbXNldChtYm94LDAsc2l6ZW9mKFRYMjVNYm94KSk7Ci0JCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X0hETENfTElOS19ESVNDOwotCQltYm94LT5jbWQubGVuZ3RoID0gMTsKLQkJbWJveC0+ZGF0YVswXT0wOwotCQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0KLQl9IHdoaWxlIChlcnIgJiYgcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBYMjVfSERMQ19MSU5LX0RJU0MsIDApKTsKLQotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBIZGxjIExpbmsgRG93biBGYWlsZWQgJXhcbiIsY2FyZC0+ZGV2bmFtZSxlcnIpOwotCi0JZGlzY29ubmVjdCAoY2FyZCk7Ci0JCi19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfYmFkX2NvbW1hbmQoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXgyNV9jaGFubmVsX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0JaW50IGJhZF9jbWQgPSAwOwotCi0Jc3dpdGNoIChhdG9taWNfcmVhZCgmY2hhbi0+Y29tbW9uLmNvbW1hbmQpJjB4N0YpewotCi0JCWNhc2UgWDI1X1BMQUNFX0NBTEw6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9ESVNDT05ORUNURUQpCi0JCQkJYmFkX2NtZD0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgWDI1X0NMRUFSX0NBTEw6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlID09IFdBTl9ESVNDT05ORUNURUQpCi0JCQkJYmFkX2NtZD0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgWDI1X0FDQ0VQVF9DQUxMOgotCQkJaWYgKGNoYW4tPmNvbW1vbi5zdGF0ZSAhPSBXQU5fQ09OTkVDVElORykKLQkJCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQkJY2FzZSBYMjVfUkVTRVQ6Ci0JCQlpZiAoY2hhbi0+Y29tbW9uLnN0YXRlICE9IFdBTl9DT05ORUNURUQpCi0JCQkJYmFkX2NtZD0xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliYWRfY21kPTE7Ci0JCQlicmVhazsKLQl9Ci0KLQlpZiAoYmFkX2NtZCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnZhbGlkIFN0YXRlLCBCQUQgQ29tbWFuZCAleCwgZGV2ICVzLCBsY24gJWksIHN0ICVpXG4iLCAKLQkJCWNhcmQtPmRldm5hbWUsYXRvbWljX3JlYWQoJmNoYW4tPmNvbW1vbi5jb21tYW5kKSxkZXYtPm5hbWUsIAotCQkJY2hhbi0+Y29tbW9uLmxjbiwgY2hhbi0+Y29tbW9uLnN0YXRlKTsKLQl9Ci0KLQlyZXR1cm4gYmFkX2NtZDsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogWFBJUEVNT04gRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgY2FsbCBvZiB0eXBlIFhQSVBFCi0gKi8KLQotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QgKmNhcmQpCi17Ci0JaW50ICAgICAgICAgICAgY19yZXRyeSA9IE1BWF9DTURfUkVUUlk7Ci0JdW5zaWduZWQgaW50ICAgbGVuOwotCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCVRYMjVNYm94ICAgICAgICptYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgICAgICAgICAgICBlcnI7Ci0JaW50ICAgICAgICAgICAgdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgICAgICB4MjVfY2hhbm5lbF90ICAqY2hhbjsKLQl1bnNpZ25lZCBzaG9ydCBsY247Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JCi0KLQl4MjVfdWRwX3BrdF90ICp4MjVfdWRwX3BrdDsKLQl4MjVfdWRwX3BrdCA9ICh4MjVfdWRwX3BrdF90ICopY2FyZC0+dS54LnVkcF9wa3RfZGF0YTsKLQotCWRldiA9IGNhcmQtPnUueC51ZHBfZGV2OwotCWNoYW4gPSBkZXYtPnByaXY7Ci0JbGNuID0gY2hhbi0+Y29tbW9uLmxjbjsKLQotCXN3aXRjaCh4MjVfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLSAgICAgICAgICAgIAotCQkvKiBYUElQRV9FTkFCTEVfVFJBQ0UgKi8KLQkJY2FzZSBYUElQRV9FTkFCTEVfVFJBQ0lORzoKLQotCQkvKiBYUElQRV9HRVRfVFJBQ0VfSU5GTyAqLwotCQljYXNlIFhQSVBFX0dFVF9UUkFDRV9JTkZPOgotIAotCQkvKiBTRVQgRlQxIE1PREUgKi8KLQkJY2FzZSBYUElQRV9TRVRfRlQxX01PREU6Ci0gICAgICAgICAgIAotCQkJaWYoY2FyZC0+dS54LnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLSAgICAgICAgICAgICAgICAgICAgCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfZGlyZWN0aW9uX2VycjsKLQkJCQl1ZHBfbWdtdF9yZXFfdmFsaWQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCS8qIFhQSVBFX0ZUMV9SRUFEX1NUQVRVUyAqLwotCQljYXNlIFhQSVBFX0ZUMV9SRUFEX1NUQVRVUzoKLQotCQkvKiBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkJY2FzZSBYUElQRV9GVDFfU1RBVFVTX0NUUkw6Ci0JCQlpZihjYXJkLT5ody5md2lkICE9ICBTRklEX1gyNV81MDgpIHsKLQkJCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfdHlwZV9lcnI7Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotICAgICAgIAl9Ci0KLQlpZighdWRwX21nbXRfcmVxX3ZhbGlkKSB7Ci0gICAgICAgICAgIAkvKiBzZXQgbGVuZ3RoIHRvIDAgKi8KLQkJeDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSAwOwotCQkvKiBzZXQgcmV0dXJuIGNvZGUgKi8KLQkJeDI1X3VkcF9wa3QtPmNibG9jay5yZXN1bHQgPSAoY2FyZC0+aHcuZndpZCAhPSBTRklEX1gyNV81MDgpID8gMHgxRiA6IDB4Q0Q7Ci0JCQotCX0gZWxzZSB7ICAgCi0gICAgICAgIAotCQlzd2l0Y2ggKHgyNV91ZHBfcGt0LT5jYmxvY2suY29tbWFuZCkgewotICAgIAotCQotCQljYXNlIFhQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUzoKLQkJCWluaXRfeDI1X2NoYW5uZWxfc3RydWN0KGNoYW4pOwotCQkJaW5pdF9nbG9iYWxfc3RhdGlzdGljcyhjYXJkKTsKLQkJCW1ib3gtPmNtZC5sZW5ndGggPSAwOwotCQkJYnJlYWs7Ci0KLQotCQljYXNlIFhQSVBFX0RSSVZFUl9TVEFUX0lGU0VORDoKLQkJCW1lbWNweSh4MjVfdWRwX3BrdC0+ZGF0YSwgJmNoYW4tPmlmX3NlbmRfc3RhdCwgc2l6ZW9mKGlmX3NlbmRfc3RhdF90KSk7Ci0JCQltYm94LT5jbWQubGVuZ3RoID0gc2l6ZW9mKGlmX3NlbmRfc3RhdF90KTsKLQkJCXgyNV91ZHBfcGt0LT5jYmxvY2subGVuZ3RoID0gIG1ib3gtPmNtZC5sZW5ndGg7CQotCQkJYnJlYWs7Ci0JCi0JCWNhc2UgWFBJUEVfRFJJVkVSX1NUQVRfSU5UUjoKLQkJCW1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGFbMF0sICZjYXJkLT5zdGF0aXN0aWNzLCBzaXplb2YoZ2xvYmFsX3N0YXRzX3QpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGFbc2l6ZW9mKGdsb2JhbF9zdGF0c190KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFuLT5yeF9pbnRyX3N0YXQsIHNpemVvZihyeF9pbnRyX3N0YXRfdCkpOwotCQkJCi0JCQltYm94LT5jbWQubGVuZ3RoID0gc2l6ZW9mKGdsb2JhbF9zdGF0c190KSArCi0JCQkJCXNpemVvZihyeF9pbnRyX3N0YXRfdCk7Ci0JCQl4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9ICBtYm94LT5jbWQubGVuZ3RoOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBYUElQRV9EUklWRVJfU1RBVF9HRU46Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoeDI1X3VkcF9wa3QtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFuLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJngyNV91ZHBfcGt0LT5kYXRhW3NpemVvZihwaXBlX21nbXRfc3RhdF90KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcmQtPnN0YXRpc3RpY3MsIHNpemVvZihnbG9iYWxfc3RhdHNfdCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB4MjVfdWRwX3BrdC0+Y2Jsb2NrLnJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MjVfdWRwX3BrdC0+Y2Jsb2NrLmxlbmd0aCA9IHNpemVvZihnbG9iYWxfc3RhdHNfdCkrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyeF9pbnRyX3N0YXRfdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYm94LT5jbWQubGVuZ3RoID0geDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotCQljYXNlIFhQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JCQljaGFuLT5yb3V0ZXJfdXBfdGltZSA9IHR2LnR2X3NlYyAtIGNoYW4tPnJvdXRlcl9zdGFydF90aW1lOwotICAgIAkgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopJngyNV91ZHBfcGt0LT5kYXRhID0gY2hhbi0+cm91dGVyX3VwX3RpbWU7CQotCQkJeDI1X3VkcF9wa3QtPmNibG9jay5sZW5ndGggPSBtYm94LT5jbWQubGVuZ3RoID0gNDsKLQkJCXgyNV91ZHBfcGt0LT5jYmxvY2sucmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCQotCQlkZWZhdWx0IDoKLQotCQkJZG8gewotCQkJCW1lbWNweSgmbWJveC0+Y21kLCAmeDI1X3VkcF9wa3QtPmNibG9jay5jb21tYW5kLCBzaXplb2YoVFgyNUNtZCkpOwotCQkJCWlmKG1ib3gtPmNtZC5sZW5ndGgpeyAKLQkJCQkJbWVtY3B5KCZtYm94LT5kYXRhLCAKLQkJCQkJICAgICAgIChjaGFyICopeDI1X3VkcF9wa3QtPmRhdGEsIAotCQkJCQkgICAgICAgbWJveC0+Y21kLmxlbmd0aCk7Ci0JCQkJfQkKLQkJCi0JCQkJZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+Y21kLnJlc3VsdCA6IENNRF9USU1FT1VUOwotCQkJfSB3aGlsZSAoZXJyICYmIGNfcmV0cnktLSAmJiB4MjVfZXJyb3IoY2FyZCwgZXJyLCBtYm94LT5jbWQuY29tbWFuZCwgMCkpOwotCi0KLQkJCWlmICggZXJyID09IENNRF9PSyB8fCAKLQkJCSAgICAoZXJyID09IDEgJiYgCi0JCQkgICAgIChtYm94LT5jbWQuY29tbWFuZCA9PSAweDA2IHx8IAotCQkJICAgICAgbWJveC0+Y21kLmNvbW1hbmQgPT0gMHgxNikgICkgKXsKLQotCQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl9jbW5kX09LOwotCQkJfSBlbHNlIHsKLQkJCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OwotCQkJfQotCi0JCQkgIC8qIGNvcHkgdGhlIHJlc3VsdCBiYWNrIHRvIG91ciBidWZmZXIgKi8KLQkJCW1lbWNweSgmeDI1X3VkcF9wa3QtPmNibG9jay5jb21tYW5kLCAmbWJveC0+Y21kLCBzaXplb2YoVFgyNUNtZCkpOwotCi0gICAgICAJICAgICAgICAgCWlmKG1ib3gtPmNtZC5sZW5ndGgpIHsKLSAgICAgICAgCSAgICAgICAgICAgICAgIG1lbWNweSgmeDI1X3VkcF9wa3QtPmRhdGEsICZtYm94LT5kYXRhLCBtYm94LT5jbWQubGVuZ3RoKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCX0gLy9zd2l0Y2gKLQotICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8qIEZpbGwgVURQIFRUTCAqLwotCi0JeDI1X3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOwotICAgICAgICBsZW4gPSByZXBseV91ZHAoY2FyZC0+dS54LnVkcF9wa3RfZGF0YSwgbWJveC0+Y21kLmxlbmd0aCk7Ci0KLQotICAgICAgICBpZihjYXJkLT51LngudWRwX3BrdF9zcmMgPT0gVURQX1BLVF9GUk1fTkVUV09SSykgewotCQkKLQkJZXJyID0geDI1X3NlbmQoY2FyZCwgbGNuLCAwLCBsZW4sIGNhcmQtPnUueC51ZHBfcGt0X2RhdGEpOwotCQlpZiAoIWVycikgCi0JCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9wYXNzZWQ7Ci0JCWVsc2UKLQkJCSsrY2hhbi0+cGlwZV9tZ210X3N0YXQuVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX2ZhaWxlZDsKLQkKLQl9IGVsc2UgewotCi0JCS8qIEFsbG9jYXRlIHNvY2tldCBidWZmZXIgKi8KLQkJaWYoKG5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbikpICE9IE5VTEwpIHsKLQkJCXZvaWQgKmJ1ZjsKLQotCQkJLyogY29weSBkYXRhIGludG8gbmV3X3NrYiAqLwotCQkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotCQkJbWVtY3B5KGJ1ZiwgY2FyZC0+dS54LnVkcF9wa3RfZGF0YSwgbGVuKTsKLSAgICAgICAgCi0JCQkvKiBEZWNhcHN1bGF0ZSBwYWNrZXQgYW5kIHBhc3MgaXQgdXAgdGhlIHByb3RvY29sIAotCQkJICAgc3RhY2sgKi8KLQkJCW5ld19za2ItPmRldiA9IGRldjsKLQkKLQkJCWlmIChjaGFuLT5jb21tb24udXNlZGJ5ID09IEFQSSkKLSAgICAgICAgICAgICAgICAgICAgICAgIAluZXdfc2tiLT5wcm90b2NvbCA9IGh0b25zKFgyNV9QUk9UKTsKLQkJCWVsc2UgCi0JCQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0JCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2tiLT5tYWMucmF3ID0gbmV3X3NrYi0+ZGF0YTsKLQotCQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCQkrK2NoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX3N0YWNrOwotICAgICAgICAgICAgCQotCQl9IGVsc2UgewotCQkJKytjaGFuLT5waXBlX21nbXRfc3RhdC5VRFBfUElQRV9tZ210X25vX3NvY2tldDsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkiJXM6IFVEUCBtZ210IGNtbmQsIG5vIHNvY2tldCBidWZmZXJzIGF2YWlsYWJsZSFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAJfQotICAgICAgICB9Ci0KLQljYXJkLT51LngudWRwX3BrdF9sZ3RoID0gMDsKLQotCXJldHVybiAxOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIFVEUCBjYWxsIGl0IGlzLiBEUlZTVEFUUyBvciBYUElQRThORCA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzZGxhX3QqIGNhcmQgKQotewotCXgyNV91ZHBfcGt0X3QgKngyNV91ZHBfcGt0ID0gKHgyNV91ZHBfcGt0X3QgKilza2ItPmRhdGE7Ci0KLSAgICAgICAgaWYoKHgyNV91ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wgPT0gVURQTUdNVF9VRFBfUFJPVE9DT0wpICYmCi0JCSh4MjVfdWRwX3BrdC0+aXBfcGt0LnZlcl9pbmV0X2hkcl9sZW5ndGggPT0gMHg0NSkgJiYKLQkJKHgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSBudG9ocyhjYXJkLT53YW5kZXYudWRwX3BvcnQpKSAmJgotCQkoeDI1X3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSBVRFBNR01UX1JFUVVFU1QpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFzdHJuY21wKHgyNV91ZHBfcGt0LT53cF9tZ210LnNpZ25hdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURQTUdNVF9YUElQRV9TSUdOQVRVUkUsIDgpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVEUF9YUElQRV9UWVBFOwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVEUCBQYWNrZXQsIEZhaWxlZCBTaWduYXR1cmUgIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQl9Ci0JfQotCi0gICAgICAgIHJldHVybiBVRFBfSU5WQUxJRF9UWVBFOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVwbHkgdG8gVURQIE1hbmFnZW1lbnQgc3lzdGVtLgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKSAKLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW4sIHVkcF9sZW5ndGgsIHRlbXAsIGlwX2xlbmd0aDsKLQl1bnNpZ25lZCBsb25nIGlwX3RlbXA7Ci0JaW50IGV2ZW5fYm91bmQgPSAwOwotCi0gIAotCXgyNV91ZHBfcGt0X3QgKngyNV91ZHBfcGt0ID0gKHgyNV91ZHBfcGt0X3QgKilkYXRhOyAKLQotCS8qIFNldCBsZW5ndGggb2YgcGFja2V0ICovCi0JbGVuID0gc2l6ZW9mKGlwX3BrdF90KSsgCi0JICAgICAgc2l6ZW9mKHVkcF9wa3RfdCkrCi0JICAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JICAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkgICAgICBtYm94X2xlbjsKLSAKLQotCS8qIGZpbGwgaW4gVURQIHJlcGx5ICovCi0JeDI1X3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9IFVEUE1HTVRfUkVQTFk7Ci0gIAotCS8qIGZpbGwgaW4gVURQIGxlbmd0aCAqLwotCXVkcF9sZW5ndGggPSBzaXplb2YodWRwX3BrdF90KSsgCi0JCSAgICAgc2l6ZW9mKHdwX21nbXRfdCkrCi0JCSAgICAgc2l6ZW9mKGNibG9ja190KSsKLQkJICAgICBtYm94X2xlbjsgCi0KLQotCS8qIHB1dCBpdCBvbiBhbiBldmVuIGJvdW5kYXJ5ICovCi0JaWYgKCB1ZHBfbGVuZ3RoICYgMHgwMDAxICkgewotCQl1ZHBfbGVuZ3RoICs9IDE7Ci0JCWxlbiArPSAxOwotCQlldmVuX2JvdW5kID0gMTsKLQl9Ci0KLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQl4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfbGVuZ3RoID0gdGVtcDsKLQkgCi0JLyogc3dhcCBVRFAgcG9ydHMgKi8KLQl0ZW1wID0geDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCXgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9zcmNfcG9ydCA9IAotCQkJeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX2RzdF9wb3J0OyAKLQl4MjVfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0KLQotCS8qIGFkZCBVRFAgcHNldWRvIGhlYWRlciAqLwotCXRlbXAgPSAweDExMDA7Ci0JKigodW5zaWduZWQgc2hvcnQgKikKLQkJKHgyNV91ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQpKSA9IHRlbXA7CQotCXRlbXAgPSAodWRwX2xlbmd0aDw8OCl8KHVkcF9sZW5ndGg+PjgpOwotCSooKHVuc2lnbmVkIHNob3J0ICopCi0JCSh4MjVfdWRwX3BrdC0+ZGF0YSttYm94X2xlbitldmVuX2JvdW5kKzIpKSA9IHRlbXA7Ci0JCSAKLQkvKiBjYWxjdWxhdGUgVURQIGNoZWNrc3VtICovCi0JeDI1X3VkcF9wa3QtPnVkcF9wa3QudWRwX2NoZWNrc3VtID0gMDsKLQotCXgyNV91ZHBfcGt0LT51ZHBfcGt0LnVkcF9jaGVja3N1bSA9IAotCQljYWxjX2NoZWNrc3VtKCZkYXRhW1VEUF9PRkZTRVRdLCB1ZHBfbGVuZ3RoK1VEUF9PRkZTRVQpOwotCi0JLyogZmlsbCBpbiBJUCBsZW5ndGggKi8KLQlpcF9sZW5ndGggPSBsZW47Ci0JdGVtcCA9IChpcF9sZW5ndGg8PDgpfChpcF9sZW5ndGg+PjgpOwotCXgyNV91ZHBfcGt0LT5pcF9wa3QudG90YWxfbGVuZ3RoID0gdGVtcDsKLSAgCi0JLyogc3dhcCBJUCBhZGRyZXNzZXMgKi8KLQlpcF90ZW1wID0geDI1X3VkcF9wa3QtPmlwX3BrdC5pcF9zcmNfYWRkcmVzczsKLQl4MjVfdWRwX3BrdC0+aXBfcGt0LmlwX3NyY19hZGRyZXNzID0gCi0JCQkJeDI1X3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzczsKLQl4MjVfdWRwX3BrdC0+aXBfcGt0LmlwX2RzdF9hZGRyZXNzID0gaXBfdGVtcDsKLQotCQkgCi0JLyogZmlsbCBpbiBJUCBjaGVja3N1bSAqLwotCXgyNV91ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gMDsKLQl4MjVfdWRwX3BrdC0+aXBfcGt0Lmhkcl9jaGVja3N1bSA9IGNhbGNfY2hlY2tzdW0oZGF0YSwgc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotfSAvKiByZXBseV91ZHAgKi8KLQotdW5zaWduZWQgc2hvcnQgY2FsY19jaGVja3N1bSAoY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOyAKLQl1bnNpZ25lZCBsb25nIHN1bT0wOwotCWludCBpOwotCi0JZm9yKCBpID0gMDsgaSA8bGVuOyBpKz0yICkgewotCQltZW1jcHkoJnRlbXAsJmRhdGFbaV0sMik7Ci0JCXN1bSArPSAodW5zaWduZWQgbG9uZyl0ZW1wOwotCX0KLQotCXdoaWxlIChzdW0gPj4gMTYgKSB7Ci0JCXN1bSA9IChzdW0gJiAweGZmZmZVTCkgKyAoc3VtID4+IDE2KTsKLQl9Ci0KLQl0ZW1wID0gKHVuc2lnbmVkIHNob3J0KXN1bTsKLQl0ZW1wID0gfnRlbXA7Ci0KLQlpZiggdGVtcCA9PSAwICkgCi0JCXRlbXAgPSAweGZmZmY7Ci0KLQlyZXR1cm4gdGVtcDsJCi19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFN0b3JlIGEgVURQIG1hbmFnZW1lbnQgcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nLgotICovCi0KLXN0YXRpYyBpbnQgc3RvcmVfdWRwX21nbXRfcGt0KGludCB1ZHBfdHlwZSwgY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIGludCBsY24pCi17Ci0gICAgICAgIGludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0KLSAgICAgICAgaWYoIWNhcmQtPnUueC51ZHBfcGt0X2xndGggJiYgKHNrYi0+bGVuIDw9IE1BWF9MR1RIX1VEUF9NR05UX1BLVCkpewotICAgICAgICAgICAgICAgIGNhcmQtPnUueC51ZHBfcGt0X2xndGggPSBza2ItPmxlbjsKLSAgICAgICAgICAgICAgICBjYXJkLT51LngudWRwX3R5cGUgPSB1ZHBfdHlwZTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LngudWRwX3BrdF9zcmMgPSB1ZHBfcGt0X3NyYzsKLSAgICAgICAgICAgICAgICBjYXJkLT51LngudWRwX2xjbiA9IGxjbjsKLQkJY2FyZC0+dS54LnVkcF9kZXYgPSBkZXY7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGNhcmQtPnUueC51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotICAgICAgICAgICAgICAgIGNhcmQtPnUueC50aW1lcl9pbnRfZW5hYmxlZCB8PSBUTVJfSU5UX0VOQUJMRURfVURQX1BLVDsKLSAgICAgICAgICAgICAgICB1ZHBfcGt0X3N0b3JlZCA9IDE7Ci0KLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBVRFAgcGFja2V0IG5vdCBzdG9yZWQgZm9yIExDTiAlZFxuIiwgCi0JCQkJCQkJY2FyZC0+ZGV2bmFtZSxsY24pOwotCX0KLQotICAgICAgICBpZih1ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9TVEFDSyl7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9ZWxzZXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX0KLQotICAgICAgICByZXR1cm4odWRwX3BrdF9zdG9yZWQpOwotfQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbCB0aGUgcHBwX3ByaXZhdGVfYXJlYSBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfeDI1X2NoYW5uZWxfc3RydWN0KCB4MjVfY2hhbm5lbF90ICpjaGFuICkKLXsKLQltZW1zZXQoJmNoYW4tPmlmX3NlbmRfc3RhdC5pZl9zZW5kX2VudHJ5LDAsc2l6ZW9mKGlmX3NlbmRfc3RhdF90KSk7Ci0JbWVtc2V0KCZjaGFuLT5yeF9pbnRyX3N0YXQucnhfaW50cl9ub19zb2NrZXQsMCxzaXplb2YocnhfaW50cl9zdGF0X3QpKTsKLQltZW1zZXQoJmNoYW4tPnBpcGVfbWdtdF9zdGF0LlVEUF9QSVBFX21nbXRfa21hbGxvY19lcnIsMCxzaXplb2YocGlwZV9tZ210X3N0YXRfdCkpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgR2xvYmFsIFN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9nbG9iYWxfc3RhdGlzdGljcyggc2RsYV90ICpjYXJkICkKLXsKLQltZW1zZXQoJmNhcmQtPnN0YXRpc3RpY3MuaXNyX2VudHJ5LDAsc2l6ZW9mKGdsb2JhbF9zdGF0c190KSk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNNUCBTdXBwb3J0Ci0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB2b2lkIFM1MDhfUzUxNF9sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci19Ci1zdGF0aWMgdm9pZCBTNTA4X1M1MTRfdW5sb2NrKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQotewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPndhbmRldi5sb2NrLCAqc21wX2ZsYWdzKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIHgyNV90aW1lcl9yb3V0aW5lCi0gKgotICogCUEgbW9yZSBlZmZpY2llbnQgcG9sbGluZyByb3V0aW5lLiAgRWFjaCBoYWxmIGEgc2Vjb25kCi0gKiAJcXVldWUgYSBwb2xsaW5nIHRhc2suIFdlIHdhbnQgdG8gZG8gdGhlIHBvbGxpbmcgaW4gYSAKLSAqIAl0YXNrIG5vdCB0aW1lciwgYmVjYXVzZSB0aW1lciBydW5zIGluIGludGVycnVwdCB0aW1lLgotICoKLSAqIAlGSVhNRSBQb2xsaW5nIHNob3VsZCBiZSByZXRoaW5rZWQuCi0gKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgeDI1X3RpbWVyX3JvdXRpbmUodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXNkbGFfdCAqY2FyZCA9IChzZGxhX3QqKWRhdGE7Ci0KLQlpZiAoIWNhcmQtPndhbmRldi5kZXYpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RvcHBpbmcgdGhlIFgyNSBQb2xsIFRpbWVyOiBObyBEZXYuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNhcmQtPm9wZW5fY250ICE9IGNhcmQtPnUueC5udW1fb2ZfY2gpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RvcHBpbmcgdGhlIFgyNSBQb2xsIFRpbWVyOiBJbnRlcmZhY2UgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoUEVSSV9DUklULCZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0b3BwaW5nIHRoZSBYMjUgUG9sbCBUaW1lcjogU2h1dHRpbmcgZG93bi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBPTExfQ1JJVCwmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSl7Ci0JCXRyaWdnZXJfeDI1X3BvbGwoY2FyZCk7Ci0JfQotCQotCWNhcmQtPnUueC54MjVfdGltZXIuZXhwaXJlcz1qaWZmaWVzKyhIWj4+MSk7Ci0JYWRkX3RpbWVyKCZjYXJkLT51LngueDI1X3RpbWVyKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgZGlzYWJsZV9jb21tX3NodXRkb3duKHNkbGFfdCAqY2FyZCkKLXsKLQlUWDI1TWJveCogbWJveCA9IGNhcmQtPm1ib3g7Ci0JaW50IGVycjsKLQotCS8qIFR1cm4gb2YgaW50ZXJydXRwcyAqLwotCW1ib3gtPmRhdGFbMF0gPSAwOwotCWlmIChjYXJkLT5ody5md2lkID09IFNGSURfWDI1XzUwOCl7Ci0JCW1ib3gtPmRhdGFbMV0gPSBjYXJkLT5ody5pcnE7Ci0JCW1ib3gtPmRhdGFbMl0gPSAyOwotCQltYm94LT5jbWQubGVuZ3RoID0gMzsKLQl9ZWxzZSB7Ci0JIAltYm94LT5jbWQubGVuZ3RoICA9IDE7Ci0JfQotCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1NFVF9JTlRFUlJVUFRfTU9ERTsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSU5URVJSVVBUIE9GRiBGQUlFRCAleFxuIixlcnIpOwotCi0JLyogQnJpbmcgZG93biBIRExDICovCi0JbWJveC0+Y21kLmNvbW1hbmQgPSBYMjVfSERMQ19MSU5LX0NMT1NFOwotCW1ib3gtPmNtZC5sZW5ndGggID0gMDsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTElOSyBDTE9TRUQgRkFJTEVEICV4XG4iLGVycik7Ci0KLQotCS8qIEJyaW5kIGRvd24gRFRSICovCi0JbWJveC0+ZGF0YVswXSA9IDA7Ci0JbWJveC0+ZGF0YVsyXSA9IDA7Ci0JbWJveC0+ZGF0YVsxXSA9IDB4MDE7Ci0JbWJveC0+Y21kLmxlbmd0aCAgPSAzOwotCW1ib3gtPmNtZC5jb21tYW5kID0gWDI1X1NFVF9HTE9CQUxfVkFSUzsKLQllcnIgPSBzZGxhX2V4ZWMobWJveCkgPyBtYm94LT5jbWQucmVzdWx0IDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRFRSIERPV04gRkFJTEVEICV4XG4iLGVycik7Ci0KLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhZHJ2LmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYWRydi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzJjMGY4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhZHJ2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhZHJ2LmMJU0RMQSBTdXBwb3J0IE1vZHVsZS4gIE1haW4gbW9kdWxlLgotKgotKgkJVGhpcyBtb2R1bGUgaXMgYSBsaWJyYXJ5IG9mIGNvbW1vbiBoYXJkd2FyZS1zcGVjaWZpYyBmdW5jdGlvbnMKLSoJCXVzZWQgYnkgYWxsIFNhbmdvbWEgZHJpdmVycy4KLSoKLSogQXV0aG9yOglHaWRlb24gSGFjawkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogTWFyIDIwLCAyMDAxICBOZW5hZCBDb3JiaWMJQWRkZWQgdGhlIGF1dG9fcGNpX2NmZyBmaWxlZCwgdG8gc3VwcG9ydAotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUENJU0xPVCAjMC4gCi0qIEFwciAwNCwgMjAwMCAgTmVuYWQgQ29yYmljCUZpeGVkIHRoZSBhdXRvIG1lbW9yeSBkZXRlY3Rpb24gY29kZS4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1lbW9yeSB0ZXN0IGF0IGFkZHJlc3MgMHhDODAwMC4KLSogTWFyIDA5LCAyMDAwICBOZW5hZCBDb3JiaWMgCUFkZGVkIEdpZGVvbidzIEJ1ZyBGaXg6IGNsZWFyIHBjaQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgZmxhZ3Mgb24gaW5pdGlhbCBsb2FkLgotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKgkJCQlVcGRhdGVzIGZvciBMaW51eCAyLjIuWCBrZXJuZWxzLgkKLSogU2VwIDE3LCAxOTk4CUphc3ByZWV0IFNpbmdoCVVwZGF0ZXMgZm9yIGxpbnV4IDIuMi5YIGtlcm5lbHMKLSogRGVjIDIwLCAxOTk2CUdlbmUgS296aW4JVmVyc2lvbiAzLjAuMC4gQ29tcGxldGUgb3ZlcmhhdWwuCi0qIEp1bCAxMiwgMTk5NglHZW5lIEtvemluCUNoYW5nZXMgZm9yIExpbnV4IDIuMCBjb21wYXRpYmlsaXR5LgotKiBKdW4gMTIsIDE5OTYJR2VuZSBLb3ppbiAJQWRkZWQgc3VwcG9ydCBmb3IgUzUwMyBjYXJkLgotKiBBcHIgMzAsIDE5OTYJR2VuZSBLb3ppbglTRExBIGhhcmR3YXJlIGludGVycnVwdCBpcyBhY2tub3dsZWRnZWQgYmVmb3JlCi0qCQkJCWNhbGxpbmcgcHJvdG9jb2xzcGVjaWZpYyBJU1IuCi0qCQkJCVJlZ2lzdGVyIEkvTyBwb3J0cyB3aXRoIExpbnV4IGtlcm5lbC4KLSoJCQkJTWlzY2VsbGFuZW91cyBidWcgZml4ZXMuCi0qIERlYyAyMCwgMTk5NQlHZW5lIEtvemluCUZpeGVkIGEgYnVnIGluIGludGVycnVwdCByb3V0aW5lLgotKiBPY3QgMTQsIDE5OTUJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBOb3RlczoKLSAqIC0tLS0tLQotICogMS4gVGhpcyBjb2RlIGlzIG1lbnQgdG8gYmUgc3lzdGVtLWluZGVwZW5kZW50IChhcyBtdWNoIGFzIHBvc3NpYmxlKS4gIFRvCi0gKiAgICBhY2hpdmUgdGhpcywgdmFyaW91cyBtYWNyb3MgYXJlIHVzZWQgdG8gaGlkZSBzeXN0ZW0tc3BlY2lmaWMgaW50ZXJmYWNlcy4KLSAqICAgIFRvIGNvbXBpbGUgdGhpcyBjb2RlLCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgbXVzdCBiZSBkZWZpbmVkOgotICoKLSAqCVBsYXRmb3JtCURlZmluZQotICoJLS0tLS0tLS0JLS0tLS0tCi0gKglMaW51eAkJX0xJTlVYXwotICoJU0NPIFVuaXgJX1NDT19VTklYXwotICoKLSAqIDIuIFN1cHBvcnRlZCBhZGFwdGVyIHR5cGVzOgotICoKLSAqCVM1MDJBCi0gKglFUzUwMkEgKFM1MDJFKQotICoJUzUwMwotICoJUzUwNwotICoJUzUwOCAoUzUwOSkKLSAqCi0gKiAzLiBTNTAyQSBOb3RlczoKLSAqCi0gKglUaGVyZSBpcyBubyBzZXBhcmF0ZSBEUE0gd2luZG93IGVuYWJsZS9kaXNhYmxlIGNvbnRyb2wgaW4gUzUwMkEuICBJdAotICoJb3BlbnMgaW1tZWRpYXRlbHkgYWZ0ZXIgYSB3aW5kb3cgbnVtYmVyIGl0IHdyaXR0ZW4gdG8gdGhlIEhNQ1IKLSAqCXJlZ2lzdGVyLiAgVG8gY2xvc2UgdGhlIHdpbmRvdywgSE1DUiBoYXMgdG8gYmUgd3JpdHRlbiBhIHZhbHVlCi0gKgk/Pz8/MTExMWIgKGUuZy4gMHgwRiBvciAweEZGKS4KLSAqCi0gKglTNTAyQSBEUE0gd2luZG93IGNhbm5vdCBiZSBsb2NhdGVkIGF0IG9mZnNldCBFMDAwIChlLmcuIDB4QUUwMDApLgotICoKLSAqCVRoZXJlIHNob3VsZCBiZSBhIGRlbGF5IG9mID8/PyBiZWZvcmUgcmVhZGluZyBiYWNrIFM1MDJBIHN0YXR1cwotICoJcmVnaXN0ZXIuCi0gKgotICogNC4gUzUwMkUgTm90ZXM6Ci0gKgotICoJUzUwMkUgaGFzIGEgaC93IGJ1ZzogYWx0aG91Z2ggZGVmYXVsdCBJUlEgbGluZSBzdGF0ZSBpcyBISUdILCBlbmFibGluZwotICoJaW50ZXJydXB0cyBieSBzZXR0aW5nIGJpdCAxIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSB0byAnMScKLSAqCWNhdXNlcyBpdCB0byBnbyBMT1chIFRoZXJlZm9yZSwgZGlzYWJsaW5nIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGF0Ci0gKgliaXQgdG8gJzAnIGNhdXNlcyBsb3ctdG8taGlnaCB0cmFuc2l0aW9uIG9uIElSUSBsaW5lIChnaG9zdHkKLSAqCWludGVycnVwdCkuIFRoZSBzYW1lIG9jY3VycyB3aGVuIGRpc2FibGluZyBDUFUgYnkgcmVzZXR0aW5nIGJpdCAwIG9mCi0gKglDUFUgY29udHJvbCByZWdpc3RlciAoQkFTRSszKSAtIHNlZSB0aGUgbmV4dCBub3RlLgotICoKLSAqCVM1MDJFIENQVSBhbmQgRFBNIGNvbnRyb2wgaXMgbGltaXRlZDoKLSAqCi0gKglvIENQVSBjYW5ub3QgYmUgc3RvcHBlZCBpbmRlcGVuZGVudGx5LiBSZXNldHRpbmcgYml0IDAgb2YgdGhlIENQVWkKLSAqCSAgY29udHJvbCByZWdpc3RlciAoQkFTRSszKSBzaHV0cyB0aGUgYm9hcmQgZG93biBlbnRpcmVseSwgaW5jbHVkaW5nCi0gKgkgIERQTTsKLSAqCi0gKglvIERQTSBhY2Nlc3MgY2Fubm90IGJlIGNvbnRyb2xsZWQgZHluYW1pY2FsbHkuIE9uZXMgQ1BVIGlzIHN0YXJ0ZWQsCi0gKgkgIGJpdCAxIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIElSUSwKLSAqCSAgc28gdGhhdCBhY2Nlc3MgdG8gc2hhcmVkIG1lbW9yeSBjYW5ub3QgYmUgZGlzYWJsZWQgd2hpbGUgQ1BVIGlzCi0gKgkgIHJ1bm5pbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlfTElOVVhfCi0KLSNpZglkZWZpbmVkKF9MSU5VWF8pCS8qKioqKiogTGludXggKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBzdXBwb3J0IGZvciBsb2FkYWJsZSBtb2R1bGVzICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiBmb3IgamlmZmllcywgSFosIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhZHJ2Lmg+CS8qIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3NkbGFzZm0uaD4JLyogU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+CS8qIFNETEEgUENJIGhhcmR3YXJlIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBQQ0kgZGVmaW5lcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIGluYigpLCBvdXRiKCksIGV0Yy4gKi8KLQotI2RlZmluZSBfSU5CKHBvcnQpCQkoaW5iKHBvcnQpKQotI2RlZmluZSBfT1VUQihwb3J0LCBieXRlKQkob3V0YigoYnl0ZSksKHBvcnQpKSkKLSNkZWZpbmUJU1lTVEVNX1RJQ0sJCWppZmZpZXMKLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotCi0jZWxpZglkZWZpbmVkKF9TQ09fVU5JWF8pCS8qKioqKiogU0NPIFVuaXggKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmCSFkZWZpbmVkKElOS0VSTkVMKQotI2Vycm9yCVRoaXMgY29kZSBNVVNUIGJlIGNvbXBpbGVkIGluIGtlcm5lbCBtb2RlIQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NkbGFkcnYuaD4JLyogQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8c3lzL3NkbGFzZm0uaD4JLyogU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxzeXMvaW5saW5lLmg+CQkvKiBmb3IgaW5iKCksIG91dGIoKSwgZXRjLiAqLwotI2RlZmluZSBfSU5CKHBvcnQpCQkoaW5iKHBvcnQpKQotI2RlZmluZSBfT1VUQihwb3J0LCBieXRlKQkob3V0YigocG9ydCksKGJ5dGUpKSkKLSNkZWZpbmUJU1lTVEVNX1RJQ0sJCWxib2x0Ci0KLSNlbHNlCi0jZXJyb3IJVW5rbm93biBzeXN0ZW0gdHlwZSEKLSNlbmRpZgotCi0jZGVmaW5lCU1PRF9WRVJTSU9OCTMKLSNkZWZpbmUJTU9EX1JFTEVBU0UJMAotCi0jZGVmaW5lCVNETEFfSU9ERUxBWQkxMDAJLyogSS9PIFJkL1dyIGRlbGF5LCAxMCB3b3JrcyBmb3IgNDg2RFgyLTY2ICovCi0jZGVmaW5lCUVYRUNfREVMQVkJMjAJLyogc2hhcmVkIG1lbW9yeSBhY2Nlc3MgZGVsYXksIG1rcyAqLwotI2RlZmluZQlFWEVDX1RJTUVPVVQJKEhaKjIpCS8qIGNvbW1hbmQgdGltZW91dCwgaW4gdGlja3MgKi8KLQotLyogSS9PIHBvcnQgYWRkcmVzcyByYW5nZSAqLwotI2RlZmluZSBTNTAyQV9JT1JBTkdFCTMKLSNkZWZpbmUgUzUwMkVfSU9SQU5HRQk0Ci0jZGVmaW5lIFM1MDNfSU9SQU5HRQkzCi0jZGVmaW5lIFM1MDdfSU9SQU5HRQk0Ci0jZGVmaW5lIFM1MDhfSU9SQU5HRQk0Ci0KLS8qIE1heGltdW0gYW1vdW50IG9mIG1lbW9yeSAqLwotI2RlZmluZSBTNTAyX01BWE1FTQkweDEwMDAwTAotI2RlZmluZSBTNTAzX01BWE1FTQkweDEwMDAwTAotI2RlZmluZSBTNTA3X01BWE1FTQkweDQwMDAwTAotI2RlZmluZSBTNTA4X01BWE1FTQkweDQwMDAwTAotCi0vKiBNaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgKi8KLSNkZWZpbmUgUzUwMl9NSU5NRU0JMHg4MDAwTAotI2RlZmluZSBTNTAzX01JTk1FTQkweDgwMDBMCi0jZGVmaW5lIFM1MDdfTUlOTUVNCTB4MjAwMDBMCi0jZGVmaW5lIFM1MDhfTUlOTUVNCTB4MjAwMDBMCi0jZGVmaW5lIE5PX1BPUlQgICAgICAgICAtMQotCi0KLQotCi0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBIYXJkd2FyZS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgc2RsYV9kZXRlY3QJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfYXV0b2RwbQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgc2RsYV9zZXRkcG0JKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfbG9hZAkoc2RsYWh3X3QqIGh3LCBzZm1fdCogc2ZtLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBzZGxhX2luaXQJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZGxhX21lbXRlc3QgKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfYm9vdGNmZwkoc2RsYWh3X3QqIGh3LCBzZm1faW5mb190KiBzZm1pbmZvKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1ha2VfY29uZmlnX2J5dGUgKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IHNkbGFfc3RhcnQJKHNkbGFod190KiBodywgdW5zaWduZWQgYWRkcik7Ci0KLXN0YXRpYyBpbnQgaW5pdF9zNTAyYQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgaW5pdF9zNTAyZQkoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgaW5pdF9zNTAzCShzZGxhaHdfdCogaHcpOwotc3RhdGljIGludCBpbml0X3M1MDcJKHNkbGFod190KiBodyk7Ci1zdGF0aWMgaW50IGluaXRfczUwOAkoc2RsYWh3X3QqIGh3KTsKLSAgICAgICAgICAgIAotc3RhdGljIGludCBkZXRlY3RfczUwMmEJKGludCBwb3J0KTsKLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDJlCShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTAzCShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTA3CShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTA4CShpbnQgcG9ydCk7Ci1zdGF0aWMgaW50IGRldGVjdF9zNTE0ICAoc2RsYWh3X3QqIGh3KTsKLXN0YXRpYyBpbnQgZmluZF9zNTE0X2FkYXB0ZXIoc2RsYWh3X3QqIGh3LCBjaGFyIGZpbmRfZmlyc3RfUzUxNF9jYXJkKTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIHBlZWtfYnlfNCAodW5zaWduZWQgbG9uZyBzcmMsIHZvaWQqIGJ1ZiwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyB2b2lkIHBva2VfYnlfNCAodW5zaWduZWQgbG9uZyBkZXN0LCB2b2lkKiBidWYsIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgaW50IGNhbGlicmF0ZV9kZWxheSAoaW50IG1rcyk7Ci1zdGF0aWMgaW50IGdldF9vcHRpb25faW5kZXggKHVuc2lnbmVkKiBvcHRsaXN0LCB1bnNpZ25lZCBvcHR2YWwpOwotc3RhdGljIHVuc2lnbmVkIGNoZWNrX21lbXJlZ2lvbiAodm9pZCogcHRyLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIHVuc2lnbmVkCXRlc3RfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbik7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2hlY2tzdW0gKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbGVuKTsKLXN0YXRpYyBpbnQgaW5pdF9wY2lfc2xvdChzZGxhaHdfdCAqKTsKLQotc3RhdGljIGludCBwY2lfcHJvYmUoc2RsYWh3X3QgKmh3KTsKLQotLyoqKioqKiBHbG9iYWwgRGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBOb3RlOiBBbGwgZGF0YSBtdXN0IGJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQhISEKLSAqLwotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2RsYWRydl9wY2lfdGJsW10gPSB7Ci0JeyBWM19WRU5ET1JfSUQsIFYzX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKLQl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzZGxhZHJ2X3BjaV90YmwpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIGNoYXIgbW9kbmFtZVtdCT0gInNkbGFkcnYiOwotc3RhdGljIGNoYXIgZnVsbG5hbWVbXQk9ICJTRExBIFN1cHBvcnQgTW9kdWxlIjsKLXN0YXRpYyBjaGFyIGNvcHlyaWdodFtdCT0gIihjKSAxOTk1LTE5OTkgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiI7Ci1zdGF0aWMgdW5zaWduZWQJZXhlY19pZGxlOwotCi0vKiBIYXJkd2FyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCi0gKiBUaGVzZSBhcmUgYXJyYXlzIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2VkIGJ5IHZlcmlmaWNhdGlvbiByb3V0aW5lcy4KLSAqIFRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggYXJyYXkgaXMgaXRzIHNpemUgKGkuZS4gbnVtYmVyIG9mIG9wdGlvbnMpLgotICovCi1zdGF0aWMgdW5zaWduZWQJczUwMl9wb3J0X29wdGlvbnNbXSA9Ci0JeyA0LCAweDI1MCwgMHgzMDAsIDB4MzUwLCAweDM2MCB9Ci07Ci1zdGF0aWMgdW5zaWduZWQJczUwM19wb3J0X29wdGlvbnNbXSA9Ci0JeyA4LCAweDI1MCwgMHgyNTQsIDB4MzAwLCAweDMwNCwgMHgzNTAsIDB4MzU0LCAweDM2MCwgMHgzNjQgfQotOwotc3RhdGljIHVuc2lnbmVkCXM1MDhfcG9ydF9vcHRpb25zW10gPQotCXsgOCwgMHgyNTAsIDB4MjcwLCAweDI4MCwgMHgzMDAsIDB4MzUwLCAweDM2MCwgMHgzODAsIDB4MzkwIH0KLTsKLQotc3RhdGljIHVuc2lnbmVkIHM1MDJhX2lycV9vcHRpb25zW10gPSB7IDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBzNTAyZV9pcnFfb3B0aW9uc1tdID0geyA0LCAyLCAzLCA1LCA3IH07Ci1zdGF0aWMgdW5zaWduZWQgczUwM19pcnFfb3B0aW9uc1tdICA9IHsgNSwgMiwgMywgNCwgNSwgNyB9Owotc3RhdGljIHVuc2lnbmVkIHM1MDhfaXJxX29wdGlvbnNbXSAgPSB7IDgsIDMsIDQsIDUsIDcsIDEwLCAxMSwgMTIsIDE1IH07Ci0KLXN0YXRpYyB1bnNpZ25lZCBzNTAyYV9kcG1iYXNlX29wdGlvbnNbXSA9Ci17Ci0JMjgsCi0JMHhBMDAwMCwgMHhBMjAwMCwgMHhBNDAwMCwgMHhBNjAwMCwgMHhBODAwMCwgMHhBQTAwMCwgMHhBQzAwMCwKLQkweEMwMDAwLCAweEMyMDAwLCAweEM0MDAwLCAweEM2MDAwLCAweEM4MDAwLCAweENBMDAwLCAweENDMDAwLAotCTB4RDAwMDAsIDB4RDIwMDAsIDB4RDQwMDAsIDB4RDYwMDAsIDB4RDgwMDAsIDB4REEwMDAsIDB4REMwMDAsCi0JMHhFMDAwMCwgMHhFMjAwMCwgMHhFNDAwMCwgMHhFNjAwMCwgMHhFODAwMCwgMHhFQTAwMCwgMHhFQzAwMCwKLX07Ci1zdGF0aWMgdW5zaWduZWQgczUwN19kcG1iYXNlX29wdGlvbnNbXSA9Ci17Ci0JMzIsCi0JMHhBMDAwMCwgMHhBMjAwMCwgMHhBNDAwMCwgMHhBNjAwMCwgMHhBODAwMCwgMHhBQTAwMCwgMHhBQzAwMCwgMHhBRTAwMCwKLQkweEIwMDAwLCAweEIyMDAwLCAweEI0MDAwLCAweEI2MDAwLCAweEI4MDAwLCAweEJBMDAwLCAweEJDMDAwLCAweEJFMDAwLAotCTB4QzAwMDAsIDB4QzIwMDAsIDB4QzQwMDAsIDB4QzYwMDAsIDB4QzgwMDAsIDB4Q0EwMDAsIDB4Q0MwMDAsIDB4Q0UwMDAsCi0JMHhFMDAwMCwgMHhFMjAwMCwgMHhFNDAwMCwgMHhFNjAwMCwgMHhFODAwMCwgMHhFQTAwMCwgMHhFQzAwMCwgMHhFRTAwMCwKLX07Ci1zdGF0aWMgdW5zaWduZWQgczUwOF9kcG1iYXNlX29wdGlvbnNbXSA9CS8qIGluY2wuIFM1MDJFIGFuZCBTNTAzICovCi17Ci0JMzIsCi0JMHhBMDAwMCwgMHhBMjAwMCwgMHhBNDAwMCwgMHhBNjAwMCwgMHhBODAwMCwgMHhBQTAwMCwgMHhBQzAwMCwgMHhBRTAwMCwKLQkweEMwMDAwLCAweEMyMDAwLCAweEM0MDAwLCAweEM2MDAwLCAweEM4MDAwLCAweENBMDAwLCAweENDMDAwLCAweENFMDAwLAotCTB4RDAwMDAsIDB4RDIwMDAsIDB4RDQwMDAsIDB4RDYwMDAsIDB4RDgwMDAsIDB4REEwMDAsIDB4REMwMDAsIDB4REUwMDAsCi0JMHhFMDAwMCwgMHhFMjAwMCwgMHhFNDAwMCwgMHhFNjAwMCwgMHhFODAwMCwgMHhFQTAwMCwgMHhFQzAwMCwgMHhFRTAwMCwKLX07Ci0KLS8qCi1zdGF0aWMgdW5zaWduZWQJczUwMl9kcG1zaXplX29wdGlvbnNbXSA9IHsgMiwgMHgyMDAwLCAweDEwMDAwIH07Ci1zdGF0aWMgdW5zaWduZWQJczUwN19kcG1zaXplX29wdGlvbnNbXSA9IHsgMiwgMHgyMDAwLCAweDQwMDAgfTsKLXN0YXRpYyB1bnNpZ25lZAlzNTA4X2RwbXNpemVfb3B0aW9uc1tdID0geyAxLCAweDIwMDAgfTsKLSovCi0KLXN0YXRpYyB1bnNpZ25lZAlzNTAyYV9wY2xrX29wdGlvbnNbXSA9IHsgMiwgMzYwMCwgNzIwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDJlX3BjbGtfb3B0aW9uc1tdID0geyA1LCAzNjAwLCA1MDAwLCA3MjAwLCA4MDAwLCAxMDAwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDNfcGNsa19vcHRpb25zW10gID0geyAzLCA3MjAwLCA4MDAwLCAxMDAwMCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDdfcGNsa19vcHRpb25zW10gID0geyAxLCAxMjI4OCB9Owotc3RhdGljIHVuc2lnbmVkCXM1MDhfcGNsa19vcHRpb25zW10gID0geyAxLCAxNjAwMCB9OwotCi0vKiBIb3N0IG1lbW9yeSBjb250cm9sIHJlZ2lzdGVyIG1hc2tzICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTAyYV9obWNyW10gPQotewotCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsCS8qIEEwMDAwIC0gQUMwMDAgKi8KLQkweDIwLCAweDIyLCAweDI0LCAweDI2LCAweDI4LCAweDJBLCAweDJDLAkvKiBDMDAwMCAtIENDMDAwICovCi0JMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywJLyogRDAwMDAgLSBEQzAwMCAqLwotCTB4MzAsIDB4MzIsIDB4MzQsIDB4MzYsIDB4MzgsIDB4M0EsIDB4M0MsCS8qIEUwMDAwIC0gRUMwMDAgKi8KLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTAyZV9obWNyW10gPQotewotCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUsCS8qIEEwMDAwIC0gQUUwMDAgKi8KLQkweDIwLCAweDIyLCAweDI0LCAweDI2LCAweDI4LCAweDJBLCAweDJDLCAweDJFLAkvKiBDMDAwMCAtIENFMDAwICovCi0JMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwJLyogRDAwMDAgLSBERTAwMCAqLwotCTB4MzAsIDB4MzIsIDB4MzQsIDB4MzYsIDB4MzgsIDB4M0EsIDB4M0MsIDB4M0UsCS8qIEUwMDAwIC0gRUUwMDAgKi8KLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTA3X2htY3JbXSA9Ci17Ci0JMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwJLyogQTAwMDAgLSBBRTAwMCAqLwotCTB4NDAsIDB4NDIsIDB4NDQsIDB4NDYsIDB4NDgsIDB4NEEsIDB4NEMsIDB4NEUsCS8qIEIwMDAwIC0gQkUwMDAgKi8KLQkweDgwLCAweDgyLCAweDg0LCAweDg2LCAweDg4LCAweDhBLCAweDhDLCAweDhFLAkvKiBDMDAwMCAtIENFMDAwICovCi0JMHhDMCwgMHhDMiwgMHhDNCwgMHhDNiwgMHhDOCwgMHhDQSwgMHhDQywgMHhDRSwJLyogRTAwMDAgLSBFRTAwMCAqLwotfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHM1MDhfaG1jcltdID0KLXsKLQkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAkvKiBBMDAwMCAtIEFFMDAwICovCi0JMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywJLyogQzAwMDAgLSBDRTAwMCAqLwotCTB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCS8qIEQwMDAwIC0gREUwMDAgKi8KLQkweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLAkvKiBFMDAwMCAtIEVFMDAwICovCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzNTA3X2lycW1hc2tbXSA9Ci17Ci0JMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg4MCwgMHhBMCwgMHhDMCwgMHhFMAotfTsKLQotc3RhdGljIGludCBwY2lfc2xvdF9hcltNQVhfUzUxNF9DQVJEU107Ci0KLS8qKioqKioqIEtlcm5lbCBMb2FkYWJsZSBNb2R1bGUgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1vZHVsZSAnaW5zZXJ0JyBlbnRyeSBwb2ludC4KLSAqIG8gcHJpbnQgYW5ub3VuY2VtZW50Ci0gKiBvIGluaXRpYWxpemUgc3RhdGljIGRhdGEKLSAqIG8gY2FsaWJyYXRlIFNETEEgc2hhcmVkIG1lbW9yeSBhY2Nlc3MgZGVsYXkuCi0gKgotICogUmV0dXJuOgkwCU9rCi0gKgkJPCAwCWVycm9yLgotICogQ29udGV4dDoJcHJvY2VzcwotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHNkbGFkcnZfaW5pdCh2b2lkKQotewotCWludCBpPTA7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlcyB2JXUuJXUgJXNcbiIsCi0JCWZ1bGxuYW1lLCBNT0RfVkVSU0lPTiwgTU9EX1JFTEVBU0UsIGNvcHlyaWdodCk7Ci0JZXhlY19pZGxlID0gY2FsaWJyYXRlX2RlbGF5KEVYRUNfREVMQVkpOwotI2lmZGVmIFdBTkRFQlVHCQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhlY19pZGxlID0gJWRcbiIsIG1vZG5hbWUsIGV4ZWNfaWRsZSk7Ci0jZW5kaWYJCi0KLQkvKiBJbml0aWFsaXplIHRoZSBQQ0kgQ2FyZCBhcnJheSwgd2hpY2gKLSAgICAgICAgICogd2lsbCBzdG9yZSBmbGFncywgdXNlZCB0byBtYXJrIAotICAgICAgICAgKiBjYXJkIGluaXRpYWxpemF0aW9uIHN0YXRlICovCi0JZm9yIChpPTA7IGk8TUFYX1M1MTRfQ0FSRFM7IGkrKykKLQkJcGNpX3Nsb3RfYXJbaV0gPSAweEZGOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9kdWxlICdyZW1vdmUnIGVudHJ5IHBvaW50LgotICogbyByZWxlYXNlIGFsbCByZW1haW5pbmcgc3lzdGVtIHJlc291cmNlcwotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2RsYWRydl9jbGVhbnVwKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KHNkbGFkcnZfaW5pdCk7Ci1tb2R1bGVfZXhpdChzZGxhZHJ2X2NsZWFudXApOwotCi0vKioqKioqKiBLZXJuZWwgQVBJcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgdXAgYWRhcHRlci4KLSAqIG8gZGV0ZWN0IGFkYXB0ZXIgdHlwZQotICogbyB2ZXJpZnkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zCi0gKiBvIGNoZWNrIGZvciBoYXJkd2FyZSBjb25mbGljdHMKLSAqIG8gc2V0IHVwIGFkYXB0ZXIgc2hhcmVkIG1lbW9yeQotICogbyB0ZXN0IGFkYXB0ZXIgbWVtb3J5Ci0gKiBvIGxvYWQgZmlybXdhcmUKLSAqIFJldHVybjoJMAlvay4KLSAqCQk8IDAJZXJyb3IKLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfc2V0dXApOwotCi1pbnQgc2RsYV9zZXR1cCAoc2RsYWh3X3QqIGh3LCB2b2lkKiBzZm0sIHVuc2lnbmVkIGxlbikKLXsKLQl1bnNpZ25lZCogaXJxX29wdAk9IE5VTEw7CS8qIElSUSBvcHRpb25zICovCi0JdW5zaWduZWQqIGRwbWJhc2Vfb3B0CT0gTlVMTDsJLyogRFBNIHdpbmRvdyBiYXNlIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCogcGNsa19vcHQJPSBOVUxMOwkvKiBDUFUgY2xvY2sgcmF0ZSBvcHRpb25zICovCi0JaW50IGVycj0wOwotCi0JaWYgKHNkbGFfZGV0ZWN0KGh3KSkgewotICAgICAgICAgICAgICAgIGlmKGh3LT50eXBlICE9IFNETEFfUzUxNCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBubyBTRExBIGNhcmQgZm91bmQgYXQgcG9ydCAweCVYXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgaHctPnBvcnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihody0+dHlwZSAhPSBTRExBX1M1MTQpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgUyUwNHUgY2FyZCBhdCBwb3J0IDB4JVguXG4iLAotICAgICAgICAgICAgICAgIG1vZG5hbWUsIGh3LT50eXBlLCBody0+cG9ydCk7Ci0KLSAgICAgICAgICAgICAgICBody0+ZHBtc2l6ZSA9IFNETEFfV0lORE9XU0laRTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3LT50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDJBOgotICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlvX3JhbmdlICAgID0gUzUwMkFfSU9SQU5HRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlycV9vcHQgICAgICAgICA9IHM1MDJhX2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwMmFfZHBtYmFzZV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgcGNsa19vcHQgICAgICAgID0gczUwMmFfcGNsa19vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNETEFfUzUwMkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTAyRV9JT1JBTkdFOwotICAgICAgICAgICAgICAgICAgICAgICAgaXJxX29wdCAgICAgICAgID0gczUwMmVfaXJxX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcG1iYXNlX29wdCAgICAgPSBzNTA4X2RwbWJhc2Vfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjbGtfb3B0ICAgICAgICA9IHM1MDJlX3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTAzX0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTAzX2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwOF9kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTAzX3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTA3X0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTA4X2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwN19kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTA3X3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTRExBX1M1MDg6Ci0gICAgICAgICAgICAgICAgICAgICAgICBody0+aW9fcmFuZ2UgICAgPSBTNTA4X0lPUkFOR0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcnFfb3B0ICAgICAgICAgPSBzNTA4X2lycV9vcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgZHBtYmFzZV9vcHQgICAgID0gczUwOF9kcG1iYXNlX29wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2xrX29wdCAgICAgICAgPSBzNTA4X3BjbGtfb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIFZlcmlmeSBJUlEgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0gICAgICAgICAgICAgICAgaWYgKCFnZXRfb3B0aW9uX2luZGV4KGlycV9vcHQsIGh3LT5pcnEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogSVJRICVkIGlzIGludmFsaWQhXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCW1vZG5hbWUsIGh3LT5pcnEpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gCi0KLSAgICAgICAgICAgICAgICAvKiBWZXJpZnkgQ1BVIGNsb2NrIHJhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0gICAgICAgICAgICAgICAgaWYgKGh3LT5wY2xrID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBody0+cGNsayA9IHBjbGtfb3B0WzFdOyAgLyogdXNlIGRlZmF1bHQgKi8KLSAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWdldF9vcHRpb25faW5kZXgocGNsa19vcHQsIGh3LT5wY2xrKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENQVSBjbG9jayAldSBpcyBpbnZhbGlkIVxuIiwKLQkJCQltb2RuYW1lLCBody0+cGNsayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBhc3N1bWluZyBDUFUgY2xvY2sgcmF0ZSBvZiAldSBrSHouXG4iLAotCQkJbW9kbmFtZSwgaHctPnBjbGspOwotCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgYWRhcHRlciBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBhbmQgdGVzdCBtZW1vcnkgKi8KLSAgICAgICAgICAgICAgICBpZiAoaHctPmRwbWJhc2UgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gc2RsYV9hdXRvZHBtKGh3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogY2FuJ3QgZmluZCBhdmFpbGFibGUgbWVtb3J5IHJlZ2lvbiFcbiIsCi0JCQkJCW1vZG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICghZ2V0X29wdGlvbl9pbmRleChkcG1iYXNlX29wdCwKLQkJCXZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0JCQkJIiVzOiBtZW1vcnkgYWRkcmVzcyAweCVsWCBpcyBpbnZhbGlkIVxuIiwKLQkJCQltb2RuYW1lLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzZGxhX3NldGRwbShodykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLQkJCSIlczogOEsgbWVtb3J5IHJlZ2lvbiBhdCAweCVsWCBpcyBub3QgYXZhaWxhYmxlIVxuIiwKLQkJCQltb2RuYW1lLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBpcyBzZXQgYXQgMHglbFguXG4iLAotCQkJCW1vZG5hbWUsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCi0KLQkJLyogSWYgd2UgZmluZCBtZW1vcnkgaW4gMHhFKioqKiBNZW1vcnkgcmVnaW9uLCAKLSAgICAgICAgICAgICAgICAgKiB3YXJuIHRoZSB1c2VyIHRvIGRpc2FibGUgdGhlIFNIQURPVyBSQU0uICAKLSAgICAgICAgICAgICAgICAgKiBTaW5jZSBtZW1vcnkgY29ycnVwdGlvbiBjYW4gb2NjdXIgaWYgU0hBRE9XIGlzCi0gICAgICAgICAgICAgICAgICogZW5hYmxlZC4gVGhpcyBjYW4gY2F1c2VzIHJhbmRvbSBjcmFzaGVzICEgKi8KLQkJaWYgKHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkgPj0gMHhFMDAwMCl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiVzOiAhISEhISEhISAgV0FSTklORyAhISEhISEhIVxuIixtb2RuYW1lKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBXQU5QSVBFIGlzIHVzaW5nIDB4JWxYIG1lbW9yeSByZWdpb24gISEhXG4iLAotCQkJCQkJbW9kbmFtZSwgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgICBQbGVhc2UgZGlzYWJsZSB0aGUgU0hBRE9XIFJBTSwgb3RoZXJ3aXNlXG4iKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgIHlvdXIgc3lzdGVtIG1pZ2h0IGNyYXNoIHJhbmRvbWx5IGZyb20gdGltZSB0byB0aW1lICFcbiIpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICEhISEhISEhICBXQVJOSU5HICEhISEhISEhXG5cbiIsbW9kbmFtZSk7Ci0JCX0KLSAgICAgICAgfQotCi0JZWxzZSB7Ci0JCWh3LT5tZW1vcnkgPSB0ZXN0X21lbXJlZ2lvbigodm9pZCopaHctPmRwbWJhc2UsIAotCQkJTUFYX1NJWkVPRl9TNTE0X01FTU9SWSk7Ci0JCWlmKGh3LT5tZW1vcnkgPCAoMjU2ICogMTAyNCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IGVycm9yIGluIHRlc3RpbmcgUzUxNCBtZW1vcnkgKDB4JWxYKVxuIiwKLQkJCQltb2RuYW1lLCBody0+bWVtb3J5KTsKLQkJCXNkbGFfZG93bihodyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLSAgICAKLQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgJWx1SyBieXRlcyBvZiBvbi1ib2FyZCBtZW1vcnlcbiIsCi0JCW1vZG5hbWUsIGh3LT5tZW1vcnkgLyAxMDI0KTsKLQotCS8qIExvYWQgZmlybXdhcmUuIElmIGxvYWRlciBmYWlscyB0aGVuIHNodXQgZG93biBhZGFwdGVyICovCi0JZXJyID0gc2RsYV9sb2FkKGh3LCBzZm0sIGxlbik7Ci0JaWYgKGVycikgc2RsYV9kb3duKGh3KTsJCS8qIHNodXRkb3duIGFkYXB0ZXIgKi8KLQotCXJldHVybiBlcnI7Ci19IAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNodXQgZG93biBTRExBOiBkaXNhYmxlIHNoYXJlZCBtZW1vcnkgYWNjZXNzIGFuZCBpbnRlcnJ1cHRzLCBzdG9wIENQVSwgZXRjLgotICovCi0KLUVYUE9SVF9TWU1CT0woc2RsYV9kb3duKTsKLQotaW50IHNkbGFfZG93biAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgaTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBDUFVfbm87Ci0gICAgICAgIHUzMiBpbnRfY29uZmlnLCBpbnRfc3RhdHVzOwotCi0gICAgICAgIGlmKCFwb3J0ICYmIChody0+dHlwZSAhPSBTRExBX1M1MTQpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJX09VVEIocG9ydCwgMHgwOCk7CQkvKiBoYWx0IENQVSAqLwotCQlfT1VUQihwb3J0LCAweDA4KTsKLQkJX09VVEIocG9ydCwgMHgwOCk7Ci0JCWh3LT5yZWdzWzBdID0gMHgwODsKLQkJX09VVEIocG9ydCArIDEsIDB4RkYpOwkJLyogY2xvc2UgbWVtb3J5IHdpbmRvdyAqLwotCQlody0+cmVnc1sxXSA9IDB4RkY7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCQlfT1VUQihwb3J0ICsgMywgMCk7CQkvKiBzdG9wIENQVSAqLwotCQlfT1VUQihwb3J0LCAwKTsJCQkvKiByZXNldCBib2FyZCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgUzUwMkVfSU9SQU5HRTsgKytpKQotCQkJaHctPnJlZ3NbaV0gPSAwCi0JCTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQljYXNlIFNETEFfUzUwNzoKLQljYXNlIFNETEFfUzUwODoKLQkJX09VVEIocG9ydCwgMCk7CQkJLyogcmVzZXQgYm9hcmQgbG9naWMgKi8KLQkJaHctPnJlZ3NbMF0gPSAwOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTE0OgotCQkvKiBoYWx0IHRoZSBhZGFwdGVyICovCi0gICAgICAgICAgICAgICAgKihjaGFyICopaHctPnZlY3RvciA9IFM1MTRfQ1BVX0hBTFQ7Ci0gICAgICAgIAlDUFVfbm8gPSBody0+UzUxNF9jcHVfbm9bMF07Ci0KLQkJLyogZGlzYWJsZSB0aGUgUENJIElSUSBhbmQgZGlzYWJsZSBtZW1vcnkgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX0NPTkZJRywgJmludF9jb25maWcpOwotCSAgICAgICAgaW50X2NvbmZpZyAmPSAoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8gflBDSV9ESVNBQkxFX0lSUV9DUFVfQSA6CX5QQ0lfRElTQUJMRV9JUlFfQ1BVX0I7Ci0gICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGNpX2RldiwgUENJX0lOVF9DT05GSUcsIGludF9jb25maWcpOwotCQlyZWFkX1M1MTRfaW50X3N0YXQoaHcsICZpbnRfc3RhdHVzKTsKLQkJUzUxNF9pbnRhY2soaHcsIGludF9zdGF0dXMpOwotCQlpZihDUFVfbm8gPT0gUzUxNF9DUFVfQSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9NQVAwX0RXT1JELAotCQkJCVBDSV9DUFVfQV9NRU1fRElTQUJMRSk7Ci0JCWVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBjaV9kZXYsIFBDSV9NQVAxX0RXT1JELAotCQkJCVBDSV9DUFVfQl9NRU1fRElTQUJMRSk7Ci0KLQkJLyogZnJlZSB1cCB0aGUgYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5ICovCi0gCQlpb3VubWFwKCh2b2lkICopaHctPmRwbWJhc2UpOwotICAgICAgICAJaW91bm1hcCgodm9pZCAqKWh3LT52ZWN0b3IpOwotIAkJYnJlYWs7Ci0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBNYXAgc2hhcmVkIG1lbW9yeSB3aW5kb3cgaW50byBTRExBIGFkZHJlc3Mgc3BhY2UuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX21hcG1lbSk7Ci0KLWludCBzZGxhX21hcG1lbSAoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCXJlZ2lzdGVyIGludCB0bXA7Ci0KLQlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJBOgotCWNhc2UgU0RMQV9TNTAyRToKLQkJaWYgKGFkZHIgPCBTNTAyX01BWE1FTSkJeyAvKiB2ZXJpZnkgcGFyYW1ldGVyICovCi0JCQl0bXAgPSBhZGRyID4+IDEzOwkvKiBjb252ZXJ0IHRvIHJlZ2lzdGVyIG1hc2sgKi8KLQkJCV9PVVRCKHBvcnQgKyAyLCB0bXApOwotCQkJaHctPnJlZ3NbMl0gPSB0bXA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJaWYgKGFkZHIgPCBTNTAzX01BWE1FTSkJeyAvKiB2ZXJpZnkgcGFyYW1ldGVyICovCi0JCQl0bXAgPSAoaHctPnJlZ3NbMF0gJiAweDhGKSB8ICgoYWRkciA+PiA5KSAmIDB4NzApOwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCWh3LT5yZWdzWzBdID0gdG1wOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDc6Ci0JCWlmIChhZGRyIDwgUzUwN19NQVhNRU0pIHsKLQkJCWlmICghKF9JTkIocG9ydCkgJiAweDAyKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCXRtcCA9IGFkZHIgPj4gMTM7CS8qIGNvbnZlcnQgdG8gcmVnaXN0ZXIgbWFzayAqLwotCQkJX09VVEIocG9ydCArIDIsIHRtcCk7Ci0JCQlody0+cmVnc1syXSA9IHRtcDsKLQkJfQotCQllbHNlIHJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA4OgotCQlpZiAoYWRkciA8IFM1MDhfTUFYTUVNKSB7Ci0JCQl0bXAgPSBhZGRyID4+IDEzOwkvKiBjb252ZXJ0IHRvIHJlZ2lzdGVyIG1hc2sgKi8KLQkJCV9PVVRCKHBvcnQgKyAyLCB0bXApOwotCQkJaHctPnJlZ3NbMl0gPSB0bXA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUxNDoKLQkJcmV0dXJuIDA7Ci0KLSAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWh3LT52ZWN0b3IgPSBhZGRyICYgMHhGRkZGRTAwMEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uLgotICovCi0KLXN0YXRpYyBpbnQgc2RsYV9pbnRlbiAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyRToKLQkJLyogTm90ZSB0aGFyIGludGVycnVwdCBjb250cm9sIG9wZXJhdGlvbnMgb24gUzUwMkUgYXJlIGFsbG93ZWQKLQkJICogb25seSBpZiBDUFUgaXMgZW5hYmxlZCAoYml0IDAgb2Ygc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCkuCi0JCSAqLwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDEpIHsKLQkJCV9PVVRCKHBvcnQsIDB4MDIpOwkvKiBiaXQxID0gMSwgYml0MiA9IDAgKi8KLQkJCV9PVVRCKHBvcnQsIDB4MDYpOwkvKiBiaXQxID0gMSwgYml0MiA9IDEgKi8KLQkJCWh3LT5yZWdzWzBdID0gMHgwNjsKLQkJfQotCQllbHNlIHJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAzOgotCQl0bXAgPSBody0+cmVnc1swXSB8IDB4MDQ7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCQlpZiAoIShfSU5CKHBvcnQpICYgMHgwMikpCQkvKiB2ZXJpZnkgKi8KLQkJCXJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA4OgotCQl0bXAgPSBody0+cmVnc1swXSB8IDB4MTA7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCQlpZiAoIShfSU5CKHBvcnQgKyAxKSAmIDB4MTApKQkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkE6Ci0JY2FzZSBTRExBX1M1MDc6Ci0JCWJyZWFrOwotCi0gICAgICAgIGNhc2UgU0RMQV9TNTE0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGlzYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbi4KLSAqLwotCi0jaWYgMAotaW50IHNkbGFfaW50ZGUgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkU6Ci0JCS8qIE5vdGVzOgotCQkgKiAgMSkgaW50ZXJydXB0IGNvbnRyb2wgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvbmx5IGlmIENQVSBpcwotCQkgKiAgICAgZW5hYmxlZCAoYml0IDAgb2Ygc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCkuCi0JCSAqICAyKSBkaXNhYmxpbmcgaW50ZXJydXB0cyB1c2luZyBiaXQgMSBvZiBjb250cm9sIHJlZ2lzdGVyCi0JCSAqICAgICBjYXVzZXMgSVJRIGxpbmUgZ28gaGlnaCwgdGhlcmVmb3JlIHdlIGFyZSBnb2luZyB0byB1c2UKLQkJICogICAgIDB4MDQgaW5zdGVhZDogbG93ZXIgaXQgdG8gaW5oaWJpdCBpbnRlcnJ1cHRzIHRvIFBDLgotCQkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDAxKSB7Ci0JCQlfT1VUQihwb3J0LCBody0+cmVnc1swXSAmIH4weDA0KTsKLQkJCWh3LT5yZWdzWzBdICY9IH4weDA0OwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDM6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdICYgfjB4MDQ7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDAyKQkJCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDg6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdICYgfjB4MTA7Ci0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDEwKQkJCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJBOgotCWNhc2UgU0RMQV9TNTA3OgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQWNrbm93bGVkZ2UgU0RMQSBoYXJkd2FyZSBpbnRlcnJ1cHQuCi0gKi8KLQotc3RhdGljIGludCBzZGxhX2ludGFjayAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wOwotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyRToKLQkJLyogVG8gYWNrbm9sZWRnZSBoYXJkd2FyZSBpbnRlcnJ1cHQgd2UgaGF2ZSB0byB0b2dnbGUgYml0IDMgb2YKLQkJICogY29udHJvbCByZWdpc3RlcjogXF8vCi0JCSAqIE5vdGUgdGhhdCBpbnRlcnJ1cHQgY29udHJvbCBvcGVyYXRpb25zIG9uIFM1MDJFIGFyZSBhbGxvd2VkCi0JCSAqIG9ubHkgaWYgQ1BVIGlzIGVuYWJsZWQgKGJpdCAxIG9mIHN0YXR1cyByZWdpc3RlciBpcyBzZXQpLgotCQkgKi8KLQkJaWYgKF9JTkIocG9ydCkgJiAweDAxKSB7Ci0JCQl0bXAgPSBody0+cmVnc1swXSAmIH4weDA0OwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCXRtcCB8PSAweDA0OwotCQkJX09VVEIocG9ydCwgdG1wKTsKLQkJCWh3LT5yZWdzWzBdID0gdG1wOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDM6Ci0JCWlmIChfSU5CKHBvcnQpICYgMHgwNCkgewotCQkJdG1wID0gaHctPnJlZ3NbMF0gJiB+MHgwODsKLQkJCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCQl0bXAgfD0gMHgwODsKLQkJCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCQlody0+cmVnc1swXSA9IHRtcDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAyQToKLQljYXNlIFNETEFfUzUwNzoKLQljYXNlIFNETEFfUzUwODoKLQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEFja25vd2xlZGdlIFM1MTQgaGFyZHdhcmUgaW50ZXJydXB0LgotICovCi0KLUVYUE9SVF9TWU1CT0woUzUxNF9pbnRhY2spOwotCi12b2lkIFM1MTRfaW50YWNrIChzZGxhaHdfdCogaHcsIHUzMiBpbnRfc3RhdHVzKQotewotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX1NUQVRVUywgaW50X3N0YXR1cyk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIHRoZSBTNTE0IGhhcmR3YXJlIGludGVycnVwdCBzdGF0dXMuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChyZWFkX1M1MTRfaW50X3N0YXQpOwotCi12b2lkIHJlYWRfUzUxNF9pbnRfc3RhdCAoc2RsYWh3X3QqIGh3LCB1MzIqIGludF9zdGF0dXMpCi17Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wY2lfZGV2LCBQQ0lfSU5UX1NUQVRVUywgaW50X3N0YXR1cyk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gYWRhcHRlcidzIENQVS4KLSAqLwotCi0jaWYgMAotaW50IHNkbGFfaW50ciAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCWlmICghKF9JTkIocG9ydCkgJiAweDQwKSkgewotCQkJX09VVEIocG9ydCwgMHgxMCk7CQkvKiBpc3N1ZSBOTUkgdG8gQ1BVICovCi0JCQlody0+cmVnc1swXSA9IDB4MTA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwNzoKLQkJaWYgKChfSU5CKHBvcnQpICYgMHgwNikgPT0gMHgwNikgewotCQkJX09VVEIocG9ydCArIDMsIDApOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDg6Ci0JCWlmIChfSU5CKHBvcnQgKyAxKSAmIDB4MDIpIHsKLQkJCV9PVVRCKHBvcnQsIDB4MDgpOwotCQl9Ci0JCWVsc2UgcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCWNhc2UgU0RMQV9TNTAzOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRXhlY3V0ZSBBZGFwdGVyIENvbW1hbmQuCi0gKiBvIFNldCBleGVjIGZsYWcuCi0gKiBvIEJ1c3ktd2FpdCB1bnRpbCBmbGFnIGlzIHJlc2V0LgotICogbyBSZXR1cm4gbnVtYmVyIG9mIGxvb3BzIG1hZGUsIG9yIDAgaWYgY29tbWFuZCB0aW1lZCBvdXQuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX2V4ZWMpOwotCi1pbnQgc2RsYV9leGVjICh2b2lkKiBvcGZsYWcpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciogZmxhZyA9IG9wZmxhZzsKLQl1bnNpZ25lZCBsb25nIHRzdG9wOwotCWludCBubG9vcHM7Ci0KLQlpZihyZWFkYihmbGFnKSAhPSAweDAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJXQU5QSVBFOiBvcHAgZmxhZyBzZXQgb24gZW50cnkgdG8gc2RsYV9leGVjXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCQotCXdyaXRlYigweDAxLCBmbGFnKTsKLQotCXRzdG9wID0gU1lTVEVNX1RJQ0sgKyBFWEVDX1RJTUVPVVQ7Ci0KLQlmb3IgKG5sb29wcyA9IDE7IChyZWFkYihmbGFnKSA9PSAweDAxKTsgKysgbmxvb3BzKSB7Ci0JCXVuc2lnbmVkIGRlbGF5ID0gZXhlY19pZGxlOwotCQl3aGlsZSAoLS0gZGVsYXkpOwkJCS8qIGRlbGF5ICovCi0JCWlmIChTWVNURU1fVElDSyA+IHRzdG9wKSByZXR1cm4gMDsJLyogdGltZSBpcyB1cCEgKi8KLQl9Ci0JcmV0dXJuIG5sb29wczsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZWFkIGFic29sdXRlIGFkYXB0ZXIgbWVtb3J5LgotICogVHJhbnNmZXIgZGF0YSBmcm9tIGFkYXB0ZXIncyBtZW1vcnkgdG8gZGF0YSBidWZmZXIuCi0gKgotICogTm90ZToKLSAqIENhcmUgc2hvdWxkIGJlIHRha2VuIHdoZW4gY3Jvc3NpbmcgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgYm91bmRhcnkuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdG9taWMsIHNvIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0IGlmCi0gKiBpbnRlcnJ1cHQgcm91dGluZXMgYXJlIGFjY2Vzc2luZyBhZGFwdGVyIHNoYXJlZCBtZW1vcnkuCi0gKi8KLQotRVhQT1JUX1NZTUJPTChzZGxhX3BlZWspOwotCi1pbnQgc2RsYV9wZWVrIChzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0KLQlpZiAoYWRkciArIGxlbiA+IGh3LT5tZW1vcnkpCS8qIHZlcmlmeSBhcmd1bWVudHMgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICAgICAgaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KSB7CS8qIGNvcHkgZGF0YSBmb3IgdGhlIFM1MTQgYWRhcHRlciAqLwotICAgICAgICAgICAgICAgIHBlZWtfYnlfNCAoKHVuc2lnbmVkIGxvbmcpaHctPmRwbWJhc2UgKyBhZGRyLCBidWYsIGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCi0gICAgICAgIGVsc2UgewkJCQkvKiBjb3B5IGRhdGEgZm9yIHRoZSBTNTA4IGFkYXB0ZXIgKi8KLQkgICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkdmVjID0gaHctPnZlY3RvcjsKLSAgICAgICAgCXVuc2lnbmVkIHdpbnNpemUgPSBody0+ZHBtc2l6ZTsKLQkgICAgICAgIHVuc2lnbmVkIGN1cnBvcywgY3VybGVuOyAgIC8qIGN1cnJlbnQgb2Zmc2V0IGFuZCBibG9jayBzaXplICovCi0gICAgICAgIAl1bnNpZ25lZCBsb25nIGN1cnZlYzsgICAgICAvKiBjdXJyZW50IERQTSB3aW5kb3cgdmVjdG9yICovCi0JICAgICAgICBpbnQgZXJyID0gMDsKLQotICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgIWVycikgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycG9zID0gYWRkciAlIHdpbnNpemU7ICAvKiBjdXJyZW50IHdpbmRvdyBvZmZzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlYyA9IGFkZHIgLSBjdXJwb3M7ICAgLyogY3VycmVudCB3aW5kb3cgdmVjdG9yICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsZW4gPSAobGVuID4gKHdpbnNpemUgLSBjdXJwb3MpKSA/Ci0JCQkJKHdpbnNpemUgLSBjdXJwb3MpIDogbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2NhdGUgd2luZG93IGFuZCBjb3B5IGJsb2NrIG9mIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHNkbGFfbWFwbWVtKGh3LCBjdXJ2ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGVla19ieV80ICgodW5zaWduZWQgbG9uZylody0+ZHBtYmFzZSArIGN1cnBvcywgYnVmLAotCQkJCWN1cmxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyICAgICAgICs9IGN1cmxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiAgICAgICAgID0gKGNoYXIqKWJ1ZiArIGN1cmxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAgICAgICAgLT0gY3VybGVuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgRFBNIHdpbmRvdyBwb3NpdGlvbiAqLwotICAgICAgICAgICAgICAgIHNkbGFfbWFwbWVtKGh3LCBvbGR2ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgZGF0YSBmcm9tIGFkYXB0ZXIncyBtZW1vcnkgdG8gYSBkYXRhIGJ1ZmZlciBpbiA0LWJ5dGUgY2h1bmtzLgotICogTm90ZSB0aGF0IHdlIGVuc3VyZSB0aGF0IHRoZSBTRExBIG1lbW9yeSBhZGRyZXNzIGlzIG9uIGEgNC1ieXRlIGJvdW5kYXJ5Ci0gKiBiZWZvcmUgd2UgYmVnaW4gbW92aW5nIHRoZSBkYXRhIGluIDQtYnl0ZSBjaHVua3MuCi0qLwotCi1zdGF0aWMgdm9pZCBwZWVrX2J5XzQgKHVuc2lnbmVkIGxvbmcgc3JjLCB2b2lkKiBidWYsIHVuc2lnbmVkIGxlbikKLXsKLQotICAgICAgICAvKiBieXRlIGNvcHkgZGF0YSB1bnRpbCB3ZSBnZXQgdG8gYSA0LWJ5dGUgYm91bmRhcnkgKi8KLSAgICAgICAgd2hpbGUgKGxlbiAmJiAoc3JjICYgMHgwMykpIHsKLSAgICAgICAgICAgICAgICAqKGNoYXIgKilidWYgKysgPSByZWFkYihzcmMgKyspOwotICAgICAgICAgICAgICAgIGxlbiAtLTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNvcHkgZGF0YSBpbiA0LWJ5dGUgY2h1bmtzICovCi0gICAgICAgIHdoaWxlIChsZW4gPj0gNCkgewotICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKWJ1ZiA9IHJlYWRsKHNyYyk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IDQ7Ci0gICAgICAgICAgICAgICAgc3JjICs9IDQ7Ci0gICAgICAgICAgICAgICAgbGVuIC09IDQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBieXRlIGNvcHkgYW55IHJlbWFpbmluZyBkYXRhICovCi0gICAgICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICAgICAgICAqKGNoYXIgKilidWYgKysgPSByZWFkYihzcmMgKyspOwotICAgICAgICAgICAgICAgIGxlbiAtLTsKLSAgICAgICAgfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgQWJzb2x1dGUgQWRhcHRlciBNZW1vcnkuCi0gKiBUcmFuc2ZlciBkYXRhIGZyb20gZGF0YSBidWZmZXIgdG8gYWRhcHRlcidzIG1lbW9yeS4KLSAqCi0gKiBOb3RlOgotICogQ2FyZSBzaG91bGQgYmUgdGFrZW4gd2hlbiBjcm9zc2luZyBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBib3VuZGFyeS4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHQgaWYKLSAqIGludGVycnVwdCByb3V0aW5lcyBhcmUgYWNjZXNzaW5nIGFkYXB0ZXIgc2hhcmVkIG1lbW9yeS4KLSAqLwotCi1FWFBPUlRfU1lNQk9MKHNkbGFfcG9rZSk7Ci0gCi1pbnQgc2RsYV9wb2tlIChzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0KLQlpZiAoYWRkciArIGxlbiA+IGh3LT5tZW1vcnkpCS8qIHZlcmlmeSBhcmd1bWVudHMgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAKLSAgICAgICAgaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KSB7CS8qIGNvcHkgZGF0YSBmb3IgdGhlIFM1MTQgYWRhcHRlciAqLwotICAgICAgICAgICAgICAgIHBva2VfYnlfNCAoKHVuc2lnbmVkIGxvbmcpaHctPmRwbWJhc2UgKyBhZGRyLCBidWYsIGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCQotCWVsc2UgewkJCQkvKiBjb3B5IGRhdGEgZm9yIHRoZSBTNTA4IGFkYXB0ZXIgKi8KLSAgICAJCXVuc2lnbmVkIGxvbmcgb2xkdmVjID0gaHctPnZlY3RvcjsKLQkgICAgICAgIHVuc2lnbmVkIHdpbnNpemUgPSBody0+ZHBtc2l6ZTsKLSAgICAgICAgCXVuc2lnbmVkIGN1cnBvcywgY3VybGVuOyAgICAgLyogY3VycmVudCBvZmZzZXQgYW5kIGJsb2NrIHNpemUgKi8KLSAgICAgICAgCXVuc2lnbmVkIGxvbmcgY3VydmVjOyAgICAgICAgLyogY3VycmVudCBEUE0gd2luZG93IHZlY3RvciAqLwotICAgICAgICAJaW50IGVyciA9IDA7Ci0KLQkJd2hpbGUgKGxlbiAmJiAhZXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJwb3MgPSBhZGRyICUgd2luc2l6ZTsgICAgLyogY3VycmVudCB3aW5kb3cgb2Zmc2V0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZWMgPSBhZGRyIC0gY3VycG9zOyAgICAgLyogY3VycmVudCB3aW5kb3cgdmVjdG9yICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsZW4gPSAobGVuID4gKHdpbnNpemUgLSBjdXJwb3MpKSA/Ci0JCQkJKHdpbnNpemUgLSBjdXJwb3MpIDogbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2NhdGUgd2luZG93IGFuZCBjb3B5IGJsb2NrIG9mIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNkbGFfbWFwbWVtKGh3LCBjdXJ2ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcG9rZV9ieV80ICgodW5zaWduZWQgbG9uZylody0+ZHBtYmFzZSArIGN1cnBvcywgYnVmLAotCQkJCWN1cmxlbik7Ci0JICAgICAgICAgICAgICAgIGFkZHIgICAgICAgKz0gY3VybGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmICAgICAgICAgPSAoY2hhciopYnVmICsgY3VybGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuICAgICAgICAtPSBjdXJsZW47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogUmVzdG9yZSBEUE0gd2luZG93IHBvc2l0aW9uICovCi0gICAgICAgICAgICAgICAgc2RsYV9tYXBtZW0oaHcsIG9sZHZlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgZnJvbSBhIGRhdGEgYnVmZmVyIHRvIGFkYXB0ZXIncyBtZW1vcnkgaW4gNC1ieXRlIGNodW5rcy4KLSAqIE5vdGUgdGhhdCB3ZSBlbnN1cmUgdGhhdCB0aGUgU0RMQSBtZW1vcnkgYWRkcmVzcyBpcyBvbiBhIDQtYnl0ZSBib3VuZGFyeQotICogYmVmb3JlIHdlIGJlZ2luIG1vdmluZyB0aGUgZGF0YSBpbiA0LWJ5dGUgY2h1bmtzLgotKi8KLQotc3RhdGljIHZvaWQgcG9rZV9ieV80ICh1bnNpZ25lZCBsb25nIGRlc3QsIHZvaWQqIGJ1ZiwgdW5zaWduZWQgbGVuKQotewotCi0gICAgICAgIC8qIGJ5dGUgY29weSBkYXRhIHVudGlsIHdlIGdldCB0byBhIDQtYnl0ZSBib3VuZGFyeSAqLwotICAgICAgICB3aGlsZSAobGVuICYmIChkZXN0ICYgMHgwMykpIHsKLSAgICAgICAgICAgICAgICB3cml0ZWIgKCooY2hhciAqKWJ1ZiArKywgZGVzdCArKyk7Ci0gICAgICAgICAgICAgICAgbGVuIC0tOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29weSBkYXRhIGluIDQtYnl0ZSBjaHVua3MgKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVsICgqKHVuc2lnbmVkIGxvbmcgKilidWYsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QgKz0gNDsKLSAgICAgICAgICAgICAgICBidWYgKz0gNDsKLSAgICAgICAgICAgICAgICBsZW4gLT0gNDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGJ5dGUgY29weSBhbnkgcmVtYWluaW5nIGRhdGEgKi8KLSAgICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgICAgICAgIHdyaXRlYiAoKihjaGFyICopYnVmICsrICwgZGVzdCArKyk7Ci0gICAgICAgICAgICAgICAgbGVuIC0tOwotICAgICAgICB9Ci19Ci0KLQotI2lmZGVmCURPTlRfQ09NUElQTEVfVEhJUwotI2VuZGlmCS8qIERPTlRfQ09NUElQTEVfVEhJUyAqLwotCi0vKioqKioqIEhhcmR3YXJlLVNwZWNpZmljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgYWRhcHRlciB0eXBlLgotICogbyBpZiBhZGFwdGVyIHR5cGUgaXMgc3BlY2lmaWVkIHRoZW4gY2FsbCBkZXRlY3Rpb24gcm91dGluZSBmb3IgdGhhdCBhZGFwdGVyCi0gKiAgIHR5cGUuICBPdGhlcndpc2UgY2FsbCBkZXRlY3Rpb24gcm91dGluZXMgZm9yIGV2ZXJ5IGFkYXB0ZXIgdHlwZXMgdW50aWwKLSAqICAgYWRhcHRlciBpcyBkZXRlY3RlZC4KLSAqCi0gKiBOb3RlczoKLSAqIDEpIERldGVjdGlvbiB0ZXN0cyBhcmUgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duIHN0YXRlCi0gKiAgICBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBzZGxhX2RldGVjdCAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcG9ydCAmJiAoaHctPnR5cGUgIT0gU0RMQV9TNTE0KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICAJc3dpdGNoIChody0+dHlwZSkgewotCWNhc2UgU0RMQV9TNTAyQToKLQkJaWYgKCFkZXRlY3RfczUwMmEocG9ydCkpIGVyciA9IC1FTk9ERVY7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCQlpZiAoIWRldGVjdF9zNTAyZShwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJaWYgKCFkZXRlY3RfczUwMyhwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwNzoKLQkJaWYgKCFkZXRlY3RfczUwNyhwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwODoKLQkJaWYgKCFkZXRlY3RfczUwOChwb3J0KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUxNDoKLSAgICAgICAgICAgICAgICBpZiAoIWRldGVjdF9zNTE0KGh3KSkgZXJyID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpZiAoZGV0ZWN0X3M1MDJhKHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDJBOwotCQllbHNlIGlmIChkZXRlY3RfczUwMmUocG9ydCkpCi0JCQlody0+dHlwZSA9IFNETEFfUzUwMkU7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTAzKHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDM7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTA3KHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDc7Ci0JCWVsc2UgaWYgKGRldGVjdF9zNTA4KHBvcnQpKQotCQkJaHctPnR5cGUgPSBTRExBX1M1MDg7Ci0JCWVsc2UgZXJyID0gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBBdXRvc2VsZWN0IG1lbW9yeSByZWdpb24uIAotICogbyB0cnkgYWxsIGF2YWlsYWJsZSBETVAgYWRkcmVzcyBvcHRpb25zIGZyb20gdGhlIHRvcCBkb3duIHVudGlsIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9hdXRvZHBtIChzZGxhaHdfdCogaHcpCi17Ci0JaW50IGksIGVyciA9IC1FSU5WQUw7Ci0JdW5zaWduZWQqIG9wdDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCW9wdCA9IHM1MDJhX2RwbWJhc2Vfb3B0aW9uczsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMkU6Ci0JY2FzZSBTRExBX1M1MDM6Ci0JY2FzZSBTRExBX1M1MDg6Ci0JCW9wdCA9IHM1MDhfZHBtYmFzZV9vcHRpb25zOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTA3OgotCQlvcHQgPSBzNTA3X2RwbWJhc2Vfb3B0aW9uczsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTdGFydCB0ZXN0aW5nIGZyb20gOHRoIHBvc2l0aW9uLCBhZGRyZXNzCi0gICAgICAgICAqIDB4QzgwMDAgZnJvbSB0aGUgNTA4IGFkZHJlc3MgdGFibGUuIAotICAgICAgICAgKiBXZSBkb24ndCB3YW50IHRvIHRlc3QgQSoqKiogYWRkcmVzc2VzLCBzaW5jZQotICAgICAgICAgKiB0aGV5IGFyZSB1c3VhbGx5IHVzZWQgZm9yIFZpZGVvICovCi0JZm9yIChpID0gODsgaSA8PSBvcHRbMF0gJiYgZXJyOyBpKyspIHsKLQkJaHctPmRwbWJhc2UgPSBwaHlzX3RvX3ZpcnQob3B0W2ldKTsKLQkJZXJyID0gc2RsYV9zZXRkcG0oaHcpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCB1cCBhZGFwdGVyIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93LiAKLSAqIG8gc2h1dCBkb3duIGFkYXB0ZXIKLSAqIG8gbWFrZSBzdXJlIHRoYXQgbm8gcGh5c2ljYWwgbWVtb3J5IGV4aXN0cyBpbiB0aGlzIHJlZ2lvbiwgaS5lIGVudGlyZQotICogICByZWdpb24gcmVhZHMgMHhGRiBhbmQgaXMgbm90IHdyaXRhYmxlIHdoZW4gYWRhcHRlciBpcyBzaHV0IGRvd24uCi0gKiBvIGluaXRpYWxpemUgYWRhcHRlciBoYXJkd2FyZQotICogbyBtYWtlIHN1cmUgdGhhdCByZWdpb24gaXMgdXNhYmxlIHdpdGggU0RMQSBjYXJkLCBpLmUuIHdlIGNhbiB3cml0ZSB0byBpdAotICogICB3aGVuIGFkYXB0ZXIgaXMgY29uZmlndXJlZC4KLSAqLwotc3RhdGljIGludCBzZGxhX3NldGRwbSAoc2RsYWh3X3QqIGh3KQotewotCWludCBlcnI7Ci0KLQkvKiBTaHV0IGRvd24gY2FyZCBhbmQgdmVyaWZ5IG1lbW9yeSByZWdpb24gKi8KLQlzZGxhX2Rvd24oaHcpOwotCWlmIChjaGVja19tZW1yZWdpb24oaHctPmRwbWJhc2UsIGh3LT5kcG1zaXplKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBJbml0aWFsaXplIGFkYXB0ZXIgYW5kIHRlc3Qgb24tYm9hcmQgbWVtb3J5IHNlZ21lbnQgYnkgc2VnbWVudC4KLQkgKiBJZiBtZW1vcnkgc2l6ZSBhcHBlYXJzIHRvIGJlIGxlc3MgdGhhbiBzaGFyZWQgbWVtb3J5IHdpbmRvdyBzaXplLAotCSAqIGFzc3VtZSB0aGF0IG1lbW9yeSByZWdpb24gaXMgdW51c2FibGUuCi0JICovCi0JZXJyID0gc2RsYV9pbml0KGh3KTsKLQlpZiAoZXJyKSByZXR1cm4gZXJyOwotCi0JaWYgKHNkbGFfbWVtdGVzdChodykgPCBody0+ZHBtc2l6ZSkgewkvKiBsZXNzIHRoYW4gd2luZG93IHNpemUgKi8KLQkJc2RsYV9kb3duKGh3KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNkbGFfbWFwbWVtKGh3LCAwTCk7CS8qIHNldCB3aW5kb3cgdmVjdG9yIGF0IGJvdHRvbSAqLwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIExvYWQgYWRhcHRlciBmcm9tIHRoZSBtZW1vcnkgaW1hZ2Ugb2YgdGhlIFNETEEgZmlybXdhcmUgbW9kdWxlLiAKLSAqIG8gdmVyaWZ5IGZpcm13YXJlIGludGVncml0eSBhbmQgY29tcGF0aWJpbGl0eQotICogbyBzdGFydCBhZGFwdGVyIHVwCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9sb2FkIChzZGxhaHdfdCogaHcsIHNmbV90KiBzZm0sIHVuc2lnbmVkIGxlbikKLXsKLQotCWludCBpOwotCi0JLyogVmVyaWZ5IGZpcm13YXJlIHNpZ25hdHVyZSAqLwotCWlmIChzdHJjbXAoc2ZtLT5zaWduYXR1cmUsIFNGTV9TSUdOQVRVUkUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBub3QgU0RMQSBmaXJtd2FyZSFcbiIsCi0JCQltb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmVyaWZ5IGZpcm13YXJlIG1vZHVsZSBmb3JtYXQgdmVyc2lvbiAqLwotCWlmIChzZm0tPnZlcnNpb24gIT0gU0ZNX1ZFUlNJT04pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBmaXJtd2FyZSBmb3JtYXQgJXUgcmVqZWN0ZWQhIEV4cGVjdGluZyAldS5cbiIsCi0JCQltb2RuYW1lLCBzZm0tPnZlcnNpb24sIFNGTV9WRVJTSU9OKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmVyaWZ5IGZpcm13YXJlIG1vZHVsZSBsZW5ndGggYW5kIGNoZWNrc3VtICovCi0JaWYgKChsZW4gLSBvZmZzZXRvZihzZm1fdCwgaW1hZ2UpICE9IHNmbS0+aW5mby5jb2Rlc2l6ZSkgfHwKLQkJKGNoZWNrc3VtKCh2b2lkKikmc2ZtLT5pbmZvLAotCQlzaXplb2Yoc2ZtX2luZm9fdCkgKyBzZm0tPmluZm8uY29kZXNpemUpICE9IHNmbS0+Y2hlY2tzdW0pKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmaXJtd2FyZSBjb3JydXB0ZWQhXG4iLCBtb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQW5ub3VuY2UgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogbG9hZGluZyAlcyAoSUQ9JXUpLi4uXG4iLCBtb2RuYW1lLAotCQkoc2ZtLT5kZXNjclswXSAhPSAnXDAnKSA/IHNmbS0+ZGVzY3IgOiAidW5rbm93biBmaXJtd2FyZSIsCi0JCXNmbS0+aW5mby5jb2RlaWQpOwotCi0JaWYoaHctPnR5cGUgPT0gU0RMQV9TNTE0KQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbG9hZGluZyBTNTE0IGFkYXB0ZXIsIENQVSAlY1xuIiwKLQkJCW1vZG5hbWUsIGh3LT5TNTE0X2NwdV9ub1swXSk7Ci0KLQkvKiBTY2FuIHRocm91Z2ggdGhlIGxpc3Qgb2YgY29tcGF0aWJsZSBhZGFwdGVycyBhbmQgbWFrZSBzdXJlIG91cgotCSAqIGFkYXB0ZXIgdHlwZSBpcyBsaXN0ZWQuCi0JICovCi0JZm9yIChpID0gMDsKLQkgICAgIChpIDwgU0ZNX01BWF9TRExBKSAmJiAoc2ZtLT5pbmZvLmFkYXB0ZXJbaV0gIT0gaHctPnR5cGUpOwotCSAgICAgKytpKTsKLQkKLQlpZiAoaSA9PSBTRk1fTUFYX1NETEEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZpcm13YXJlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggUyV1IVxuIiwKLQkJCW1vZG5hbWUsIGh3LT50eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIG9uLWJvYXJkIG1lbW9yeSAqLwotCWlmIChody0+bWVtb3J5IDwgc2ZtLT5pbmZvLm1lbXNpemUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBmaXJtd2FyZSBuZWVkcyAlbHUgYnl0ZXMgb2Ygb24tYm9hcmQgbWVtb3J5IVxuIiwKLQkJCW1vZG5hbWUsIHNmbS0+aW5mby5tZW1zaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogTW92ZSBjb2RlIG9udG8gYWRhcHRlciAqLwotCWlmIChzZGxhX3Bva2UoaHcsIHNmbS0+aW5mby5jb2Rlb2Zmcywgc2ZtLT5pbWFnZSwgc2ZtLT5pbmZvLmNvZGVzaXplKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIGxvYWQgY29kZSBzZWdtZW50IVxuIiwKLQkJCW1vZG5hbWUpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBQcmVwYXJlIGJvb3QtdGltZSBjb25maWd1cmF0aW9uIGRhdGEgYW5kIGtpY2stb2ZmIENQVSAqLwotCXNkbGFfYm9vdGNmZyhodywgJnNmbS0+aW5mbyk7Ci0JaWYgKHNkbGFfc3RhcnQoaHcsIHNmbS0+aW5mby5zdGFydG9mZnMpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEYW1uLi4uIEFkYXB0ZXIgd29uJ3Qgc3RhcnQhXG4iLAotCQkJbW9kbmFtZSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIHBvc2l0aW9uIERQTSB3aW5kb3cgb3ZlciB0aGUgbWFpbGJveCBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KLSAgICAgICAgaWYgKHNkbGFfbWFwbWVtKGh3LCBzZm0tPmluZm8ud2lub2ZmcykgfHwgc2RsYV9pbnRlbihodykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGFkYXB0ZXIgaGFyZHdhcmUgZmFpbHVyZSFcbiIsCi0JCQltb2RuYW1lKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWh3LT5md2lkID0gc2ZtLT5pbmZvLmNvZGVpZDsJCS8qIHNldCBmaXJtd2FyZSBJRCAqLwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgU0RMQSBoYXJkd2FyZTogc2V0dXAgbWVtb3J5IHdpbmRvdywgSVJRLCBldGMuCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9pbml0IChzZGxhaHdfdCogaHcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9NQVhJT1JBTkdFOyArK2kpCi0JCWh3LT5yZWdzW2ldID0gMDsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6IHJldHVybiBpbml0X3M1MDJhKGh3KTsKLQljYXNlIFNETEFfUzUwMkU6IHJldHVybiBpbml0X3M1MDJlKGh3KTsKLQljYXNlIFNETEFfUzUwMzogIHJldHVybiBpbml0X3M1MDMoaHcpOwotCWNhc2UgU0RMQV9TNTA3OiAgcmV0dXJuIGluaXRfczUwNyhodyk7Ci0JY2FzZSBTRExBX1M1MDg6ICByZXR1cm4gaW5pdF9zNTA4KGh3KTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBhZGFwdGVyIG9uLWJvYXJkIG1lbW9yeS4KLSAqIG8gc2xpZGUgRFBNIHdpbmRvdyBmcm9tIHRoZSBib3R0b20gdXAgYW5kIHRlc3QgYWRhcHRlciBtZW1vcnkgc2VnbWVudCBieQotICogICBzZWdtZW50LgotICogUmV0dXJuIGFkYXB0ZXIgbWVtb3J5IHNpemUuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNkbGFfbWVtdGVzdCAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKLQl1bnNpZ25lZCB3aW5zaXplOwotCi0JZm9yIChtZW1zaXplID0gMCwgd2luc2l6ZSA9IGh3LT5kcG1zaXplOwotCSAgICAgIXNkbGFfbWFwbWVtKGh3LCBtZW1zaXplKSAmJgotCQkodGVzdF9tZW1yZWdpb24oaHctPmRwbWJhc2UsIHdpbnNpemUpID09IHdpbnNpemUpCi0JICAgICA7Ci0JICAgICBtZW1zaXplICs9IHdpbnNpemUpCi0JOwotCWh3LT5tZW1vcnkgPSBtZW1zaXplOwotCXJldHVybiBtZW1zaXplOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByZXBhcmUgYm9vdC10aW1lIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAqIG8gcG9zaXRpb24gRFBNIHdpbmRvdwotICogbyBpbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmVhCi0gKi8KLXN0YXRpYyBpbnQgc2RsYV9ib290Y2ZnIChzZGxhaHdfdCogaHcsIHNmbV9pbmZvX3QqIHNmbWluZm8pCi17Ci0JdW5zaWduZWQgY2hhciogZGF0YTsKLQotCWlmICghc2ZtaW5mby0+ZGF0YXNpemUpIHJldHVybiAwOwkvKiBub3RoaW5nIHRvIGRvICovCi0KLQlpZiAoc2RsYV9tYXBtZW0oaHcsIHNmbWluZm8tPmRhdGFvZmZzKSAhPSAwKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmKGh3LT50eXBlID09IFNETEFfUzUxNCkKLSAgICAgICAgICAgICAgICBkYXRhID0gKHZvaWQqKShody0+ZHBtYmFzZSArIHNmbWluZm8tPmRhdGFvZmZzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRhdGEgPSAodm9pZCopKCh1OCAqKWh3LT5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgIChzZm1pbmZvLT5kYXRhb2ZmcyAtIGh3LT52ZWN0b3IpKTsKLQotCW1lbXNldF9pbyAoZGF0YSwgMCwgc2ZtaW5mby0+ZGF0YXNpemUpOwotCi0Jd3JpdGViIChtYWtlX2NvbmZpZ19ieXRlKGh3KSwgJmRhdGFbMHgwMF0pOwotCi0Jc3dpdGNoIChzZm1pbmZvLT5jb2RlaWQpIHsKLQljYXNlIFNGSURfWDI1XzUwMjoKLQljYXNlIFNGSURfWDI1XzUwODoKLSAgICAgICAgICAgICAgICB3cml0ZWIgKDMsICZkYXRhWzB4MDFdKTsgICAgICAgIC8qIFQxIHRpbWVyICovCi0gICAgICAgICAgICAgICAgd3JpdGViICgxMCwgJmRhdGFbMHgwM10pOyAgICAgICAvKiBOMiAqLwotICAgICAgICAgICAgICAgIHdyaXRlYiAoNywgJmRhdGFbMHgwNl0pOyAgICAgICAgLyogSERMQyB3aW5kb3cgc2l6ZSAqLwotICAgICAgICAgICAgICAgIHdyaXRlYiAoMSwgJmRhdGFbMHgwQl0pOyAgICAgICAgLyogRFRFICovCi0gICAgICAgICAgICAgICAgd3JpdGViICgyLCAmZGF0YVsweDBDXSk7ICAgICAgICAvKiBYLjI1IHBhY2tldCB3aW5kb3cgc2l6ZSAqLwotICAgICAgICAgICAgICAgIHdyaXRldyAoMTI4LCAmZGF0YVsweDBEXSk7CS8qIGRlZmF1bHQgWC4yNSBkYXRhIHNpemUgKi8KLSAgICAgICAgICAgICAgICB3cml0ZXcgKDEyOCwgJmRhdGFbMHgwRl0pOwkvKiBtYXhpbXVtIFguMjUgZGF0YSBzaXplICovCi0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBQcmVwYXJlIGNvbmZpZ3VyYXRpb24gYnl0ZSBpZGVudGlmeWluZyBhZGFwdGVyIHR5cGUgYW5kIENQVSBjbG9jayByYXRlLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBtYWtlX2NvbmZpZ19ieXRlIChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgY2hhciBieXRlID0gMDsKLQotCXN3aXRjaCAoaHctPnBjbGspIHsKLQkJY2FzZSA1MDAwOiAgYnl0ZSA9IDB4MDE7IGJyZWFrOwotCQljYXNlIDcyMDA6ICBieXRlID0gMHgwMjsgYnJlYWs7Ci0JCWNhc2UgODAwMDogIGJ5dGUgPSAweDAzOyBicmVhazsKLQkJY2FzZSAxMDAwMDogYnl0ZSA9IDB4MDQ7IGJyZWFrOwotCQljYXNlIDE2MDAwOiBieXRlID0gMHgwNTsgYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChody0+dHlwZSkgewotCQljYXNlIFNETEFfUzUwMkU6IGJ5dGUgfD0gMHg4MDsgYnJlYWs7Ci0JCWNhc2UgU0RMQV9TNTAzOiAgYnl0ZSB8PSAweDQwOyBicmVhazsKLQl9Ci0JcmV0dXJuIGJ5dGU7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU3RhcnQgYWRhcHRlcidzIENQVS4KLSAqIG8gY2FsY3VsYXRlIGEgcG9pbnRlciB0byBhZGFwdGVyJ3MgY29sZCBib290IGVudHJ5IHBvaW50Ci0gKiBvIHBvc2l0aW9uIERQTSB3aW5kb3cKLSAqIG8gcGxhY2UgYm9vdCBpbnN0cnVjdGlvbiAoanAgYWRkcikgYXQgY29sZCBib290IGVudHJ5IHBvaW50Ci0gKiBvIHN0YXJ0IENQVQotICovCi1zdGF0aWMgaW50IHNkbGFfc3RhcnQgKHNkbGFod190KiBodywgdW5zaWduZWQgYWRkcikKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JdW5zaWduZWQgY2hhciAqYm9vdHA7Ci0JaW50IGVyciwgdG1wLCBpOwotCi0JaWYgKCFwb3J0ICYmIChody0+dHlwZSAhPSBTRExBX1M1MTQpKSByZXR1cm4gLUVGQVVMVDsKLQotIAlzd2l0Y2ggKGh3LT50eXBlKSB7Ci0JY2FzZSBTRExBX1M1MDJBOgotCQlib290cCA9IGh3LT5kcG1iYXNlOwotCQlib290cCArPSAweDY2OwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTAyRToKLQljYXNlIFNETEFfUzUwMzoKLQljYXNlIFNETEFfUzUwNzoKLQljYXNlIFNETEFfUzUwODoKLQljYXNlIFNETEFfUzUxNDoKLQkJYm9vdHAgPSBody0+ZHBtYmFzZTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQllcnIgPSBzZGxhX21hcG1lbShodywgMCk7Ci0JaWYgKGVycikgcmV0dXJuIGVycjsKLQotICAgICAgCXdyaXRlYiAoMHhDMywgYm9vdHApOyAgIC8qIFo4MDogJ2pwJyBvcGNvZGUgKi8KLQlib290cCArKzsKLQl3cml0ZXcgKGFkZHIsIGJvb3RwKTsKLQotCXN3aXRjaCAoaHctPnR5cGUpIHsKLQljYXNlIFNETEFfUzUwMkE6Ci0JCV9PVVRCKHBvcnQsIDB4MTApOwkJLyogaXNzdWUgTk1JIHRvIENQVSAqLwotCQlody0+cmVnc1swXSA9IDB4MTA7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDJFOgotCQlfT1VUQihwb3J0ICsgMywgMHgwMSk7CQkvKiBzdGFydCBDUFUgKi8KLQkJaHctPnJlZ3NbM10gPSAweDAxOwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwotCQlpZiAoX0lOQihwb3J0KSAmIDB4MDEpIHsJLyogdmVyaWZ5ICovCi0JCQkvKgotCQkJICogRW5hYmxpbmcgQ1BVIGNoYW5nZXMgZnVuY3Rpb25hbGl0eSBvZiB0aGUKLQkJCSAqIGNvbnRyb2wgcmVnaXN0ZXIsIHNvIHdlIGhhdmUgdG8gcmVzZXQgaXRzCi0JCQkgKiBtaXJyb3IuCi0JCQkgKi8KLQkJCV9PVVRCKHBvcnQsIDApOwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCQlody0+cmVnc1swXSA9IDA7Ci0JCX0KLQkJZWxzZSByZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwMzoKLQkJdG1wID0gaHctPnJlZ3NbMF0gfCAweDA5OwkvKiBzZXQgYml0cyAwIGFuZCAzICovCi0JCV9PVVRCKHBvcnQsIHRtcCk7Ci0JCWh3LT5yZWdzWzBdID0gdG1wOwkJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwotCQlpZiAoIShfSU5CKHBvcnQpICYgMHgwMSkpCS8qIHZlcmlmeSAqLwotCQkJcmV0dXJuIC1FSU87Ci0JCWJyZWFrOwotCi0JY2FzZSBTRExBX1M1MDc6Ci0JCXRtcCA9IGh3LT5yZWdzWzBdIHwgMHgwMjsKLQkJX09VVEIocG9ydCwgdG1wKTsKLQkJaHctPnJlZ3NbMF0gPSB0bXA7CQkvKiB1cGRhdGUgbWlycm9yICovCi0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7Ci0JCWlmICghKF9JTkIocG9ydCkgJiAweDA0KSkJLyogdmVyaWZ5ICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNETEFfUzUwODoKLQkJdG1wID0gaHctPnJlZ3NbMF0gfCAweDAyOwotCQlfT1VUQihwb3J0LCB0bXApOwotCQlody0+cmVnc1swXSA9IHRtcDsJLyogdXBkYXRlIG1pcnJvciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwotCQlpZiAoIShfSU5CKHBvcnQgKyAxKSAmIDB4MDIpKQkvKiB2ZXJpZnkgKi8KLQkJCXJldHVybiAtRUlPOwotCQlicmVhazsKLQotCWNhc2UgU0RMQV9TNTE0OgotCQl3cml0ZWIgKFM1MTRfQ1BVX1NUQVJULCBody0+dmVjdG9yKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTAyQSBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGluaXRfczUwMmEgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCWlmICghZGV0ZWN0X3M1MDJhKHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWh3LT5yZWdzWzBdID0gMHgwODsKLQlody0+cmVnc1sxXSA9IDB4RkY7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0JaSA9IGdldF9vcHRpb25faW5kZXgoczUwMmFfZHBtYmFzZV9vcHRpb25zLCB2aXJ0X3RvX3BoeXMoaHctPmRwbWJhc2UpKTsKLQlpZiAoaSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRtcCA9IHM1MDJhX2htY3JbaSAtIDFdOwotCXN3aXRjaCAoaHctPmRwbXNpemUpIHsKLQljYXNlIDB4MjAwMDoKLQkJdG1wIHw9IDB4MDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDEwMDAwTDoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTZXR1cCBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyAodGhpcyBhbHNvIGVuYWJsZXMgbWVtb3J5IGFjY2VzcykgKi8KLQlfT1VUQihwb3J0ICsgMSwgdG1wKTsKLQlody0+cmVnc1sxXSA9IHRtcDsKLQlody0+cmVnc1swXSA9IDB4MDg7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTAyRSBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGluaXRfczUwMmUgKHNkbGFod190KiBodykKLXsKLQl1bnNpZ25lZCBwb3J0ID0gaHctPnBvcnQ7Ci0JaW50IHRtcCwgaTsKLQotCWlmICghZGV0ZWN0X3M1MDJlKHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA4X2RwbWJhc2Vfb3B0aW9ucywgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0bXAgPSBzNTAyZV9obWNyW2kgLSAxXTsKLQlzd2l0Y2ggKGh3LT5kcG1zaXplKSB7Ci0JY2FzZSAweDIwMDA6Ci0JCXRtcCB8PSAweDAxOwotCQlicmVhazsKLQotCWNhc2UgMHgxMDAwMEw6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogU2V0dXAgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgKi8KLQlfT1VUQihwb3J0ICsgMSwgdG1wKTsKLQlody0+cmVnc1sxXSA9IHRtcDsKLQotCS8qIEVuYWJsZSBtZW1vcnkgYWNjZXNzICovCi0JX09VVEIocG9ydCwgMHgwMik7Ci0JaHctPnJlZ3NbMF0gPSAweDAyOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JcmV0dXJuIChfSU5CKHBvcnQpICYgMHgwMikgPyAwIDogLUVJTzsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0aWFsaXplIFM1MDMgYWRhcHRlci4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaW50IGluaXRfczUwMyAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0JaWYgKCFkZXRlY3RfczUwMyhwb3J0KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0JaSA9IGdldF9vcHRpb25faW5kZXgoczUwOF9kcG1iYXNlX29wdGlvbnMsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCWlmIChpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gczUwMmVfaG1jcltpIC0gMV07Ci0Jc3dpdGNoIChody0+ZHBtc2l6ZSkgewotCWNhc2UgMHgyMDAwOgotCQl0bXAgfD0gMHgwMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MTAwMDBMOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFNldHVwIGR1YWwtcG9ydCBtZW1vcnkgd2luZG93ICovCi0JX09VVEIocG9ydCArIDEsIHRtcCk7Ci0JaHctPnJlZ3NbMV0gPSB0bXA7Ci0KLQkvKiBFbmFibGUgbWVtb3J5IGFjY2VzcyAqLwotCV9PVVRCKHBvcnQsIDB4MDIpOwotCWh3LT5yZWdzWzBdID0gMHgwMjsJLyogdXBkYXRlIG1pcnJvciAqLwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgUzUwNyBhZGFwdGVyLgotICovCi1zdGF0aWMgaW50IGluaXRfczUwNyAoc2RsYWh3X3QqIGh3KQotewotCXVuc2lnbmVkIHBvcnQgPSBody0+cG9ydDsKLQlpbnQgdG1wLCBpOwotCi0JaWYgKCFkZXRlY3RfczUwNyhwb3J0KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0JaSA9IGdldF9vcHRpb25faW5kZXgoczUwN19kcG1iYXNlX29wdGlvbnMsIHZpcnRfdG9fcGh5cyhody0+ZHBtYmFzZSkpOwotCWlmIChpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gczUwN19obWNyW2kgLSAxXTsKLQlzd2l0Y2ggKGh3LT5kcG1zaXplKSB7Ci0JY2FzZSAweDIwMDA6Ci0JCXRtcCB8PSAweDAxOwotCQlicmVhazsKLQotCWNhc2UgMHgxMDAwMEw6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogRW5hYmxlIGFkYXB0ZXIncyBsb2dpYyAqLwotCV9PVVRCKHBvcnQsIDB4MDEpOwotCWh3LT5yZWdzWzBdID0gMHgwMTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmICghKF9JTkIocG9ydCkgJiAweDIwKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBTZXR1cCBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyAqLwotCV9PVVRCKHBvcnQgKyAxLCB0bXApOwotCWh3LT5yZWdzWzFdID0gdG1wOwotCi0JLyogRW5hYmxlIG1lbW9yeSBhY2Nlc3MgKi8KLQl0bXAgPSBody0+cmVnc1swXSB8IDB4MDQ7Ci0JaWYgKGh3LT5pcnEpIHsKLQkJaSA9IGdldF9vcHRpb25faW5kZXgoczUwOF9pcnFfb3B0aW9ucywgaHctPmlycSk7Ci0JCWlmIChpKSB0bXAgfD0gczUwN19pcnFtYXNrW2kgLSAxXTsKLQl9Ci0JX09VVEIocG9ydCwgdG1wKTsKLQlody0+cmVnc1swXSA9IHRtcDsJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCXJldHVybiAoX0lOQihwb3J0KSAmIDB4MDgpID8gMCA6IC1FSU87Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBTNTA4IGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9zNTA4IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgcG9ydCA9IGh3LT5wb3J0OwotCWludCB0bXAsIGk7Ci0KLQlpZiAoIWRldGVjdF9zNTA4KHBvcnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFZlcmlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQlpID0gZ2V0X29wdGlvbl9pbmRleChzNTA4X2RwbWJhc2Vfb3B0aW9ucywgdmlydF90b19waHlzKGh3LT5kcG1iYXNlKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBTZXR1cCBtZW1vcnkgY29uZmlndXJhdGlvbiAqLwotCXRtcCA9IHM1MDhfaG1jcltpIC0gMV07Ci0JX09VVEIocG9ydCArIDEsIHRtcCk7Ci0JaHctPnJlZ3NbMV0gPSB0bXA7Ci0KLQkvKiBFbmFibGUgbWVtb3J5IGFjY2VzcyAqLwotCV9PVVRCKHBvcnQsIDB4MDQpOwotCWh3LT5yZWdzWzBdID0gMHgwNDsJCS8qIHVwZGF0ZSBtaXJyb3IgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCXJldHVybiAoX0lOQihwb3J0ICsgMSkgJiAweDA0KSA/IDAgOiAtRUlPOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERldGVjdCBTNTAyQSBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIGRldGVjdCBTNTAyQSBhZGFwdGVyOgotICoJMS4gQWxsIHJlZ2lzdGVycyBvdGhlciB0aGFuIHN0YXR1cyAoQkFTRSkgc2hvdWxkIHJlYWQgMHhGRgotICoJMi4gQWZ0ZXIgd3JpdGluZyAwMDAwMTAwMGIgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZAotICoJICAgcmVhZCAwMTAwMDAwMGIuCi0gKgkzLiBBZnRlciB3cml0aW5nIDAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCBzdGlsbAotICoJICAgcmVhZCAgMDEwMDAwMDBiLgotICoJNC4gQWZ0ZXIgd3JpdGluZyAwMDAwMDEwMGIgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZAotICoJICAgcmVhZCAwMTAwMDEwMGIuCi0gKglSZXR1cm4gMSBpZiBkZXRlY3RlZCBvLmsuIG9yIDAgaWYgZmFpbGVkLgotICoJTm90ZToJVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICoJCXN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTAyYSAoaW50IHBvcnQpCi17Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwMl9wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQkKLQlmb3IgKGogPSAxOyBqIDwgU0RMQV9NQVhJT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IDB4RkYpCi0JCQlyZXR1cm4gMDsKLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQl9Ci0KLQlfT1VUQihwb3J0LCAweDA4KTsJCQkvKiBoYWx0IENQVSAqLwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKF9JTkIocG9ydCkgIT0gMHg0MCkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweDQwKQotCQlyZXR1cm4gMDsKLQlfT1VUQihwb3J0LCAweDA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4NDQpCi0JCXJldHVybiAwOwotCi0JLyogUmVzZXQgYWRhcHRlciAqLwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQsIDB4MDgpOwotCV9PVVRCKHBvcnQgKyAxLCAweEZGKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgUzUwMkUgYWRhcHRlci4KLSAqCUZvbGxvd2luZyB0ZXN0cyBhcmUgdXNlZCB0byB2ZXJpZnkgYWRhcHRlciBwcmVzZW5jZToKLSAqCTEuIEFsbCByZWdpc3RlcnMgb3RoZXIgdGhhbiBzdGF0dXMgKEJBU0UpIHNob3VsZCByZWFkIDB4RkYuCi0gKgkyLiBBZnRlciB3cml0aW5nIDAgdG8gQ1BVIGNvbnRyb2wgcmVnaXN0ZXIgKEJBU0UrMyksIHN0YXR1cyByZWdpc3RlcgotICoJICAgKEJBU0UpIHNob3VsZCByZWFkIDExMTExMDAwYi4KLSAqCTMuIEFmdGVyIHdyaXRpbmcgMDAwMDAxMDBiIHRvIHBvcnQgQkFTRSAoc2V0IGJpdCAyKSwgc3RhdHVzIHJlZ2lzdGVyCi0gKgkgICAoQkFTRSkgc2hvdWxkIHJlYWQgMTExMTExMDBiLgotICoJUmV0dXJuIDEgaWYgZGV0ZWN0ZWQgby5rLiBvciAwIGlmIGZhaWxlZC4KLSAqCU5vdGU6CVRoaXMgdGVzdCBpcyBkZXN0cnVjdGl2ZSEgQWRhcHRlciB3aWxsIGJlIGxlZnQgaW4gc2h1dGRvd24KLSAqCQlzdGF0ZSBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBkZXRlY3RfczUwMmUgKGludCBwb3J0KQotewotCWludCBpLCBqOwotCi0JaWYgKCFnZXRfb3B0aW9uX2luZGV4KHM1MDJfcG9ydF9vcHRpb25zLCBwb3J0KSkKLQkJcmV0dXJuIDA7Ci0JZm9yIChqID0gMTsgaiA8IFNETEFfTUFYSU9SQU5HRTsgKytqKSB7Ci0JCWlmIChfSU5CKHBvcnQgKyBqKSAhPSAweEZGKQotCQkJcmV0dXJuIDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JfQotCi0JX09VVEIocG9ydCArIDMsIDApOwkJCS8qIENQVSBjb250cm9sIHJlZy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4RjgpCQkJLyogcmVhZCBzdGF0dXMgKi8KLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwNCk7CQkJLyogc2V0IGJpdCAyICovCi0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweEZDKQkJCS8qIHZlcmlmeSAqLwotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUwMyBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIHZlcmlmeSBhZGFwdGVyIHByZXNlbmNlOgotICoJMS4gQWxsIHJlZ2lzdGVycyBvdGhlciB0aGFuIHN0YXR1cyAoQkFTRSkgc2hvdWxkIHJlYWQgMHhGRi4KLSAqCTIuIEFmdGVyIHdyaXRpbmcgMCB0byBjb250cm9sIHJlZ2lzdGVyIChCQVNFKSwgc3RhdHVzIHJlZ2lzdGVyIChCQVNFKQotICoJICAgc2hvdWxkIHJlYWQgMTExMTAwMDBiLgotICoJMy4gQWZ0ZXIgd3JpdGluZyAwMDAwMDEwMGIgKHNldCBiaXQgMikgdG8gY29udHJvbCByZWdpc3RlciAoQkFTRSksCi0gKgkgICBzdGF0dXMgcmVnaXN0ZXIgc2hvdWxkIHJlYWQgMTExMTAwMTBiLgotICoJUmV0dXJuIDEgaWYgZGV0ZWN0ZWQgby5rLiBvciAwIGlmIGZhaWxlZC4KLSAqCU5vdGU6CVRoaXMgdGVzdCBpcyBkZXN0cnVjdGl2ZSEgQWRhcHRlciB3aWxsIGJlIGxlZnQgaW4gc2h1dGRvd24KLSAqCQlzdGF0ZSBhZnRlciB0aGUgdGVzdC4KLSAqLwotc3RhdGljIGludCBkZXRlY3RfczUwMyAoaW50IHBvcnQpCi17Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWdldF9vcHRpb25faW5kZXgoczUwM19wb3J0X29wdGlvbnMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQlmb3IgKGogPSAxOyBqIDwgU0RMQV9NQVhJT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IDB4RkYpCi0JCQlyZXR1cm4gMDsKLQkJZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQl9Ci0KLQlfT1VUQihwb3J0LCAwKTsJCQkJLyogcmVzZXQgY29udHJvbCByZWcuKi8KLQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCWlmIChfSU5CKHBvcnQpICE9IDB4RjApCQkJLyogcmVhZCBzdGF0dXMgKi8KLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwNCk7CQkJLyogc2V0IGJpdCAyICovCi0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoX0lOQihwb3J0KSAhPSAweEYyKQkJCS8qIHZlcmlmeSAqLwotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUwNyBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIGRldGVjdCBzNTA3IGFkYXB0ZXI6Ci0gKgkxLiBBbGwgcG9ydHMgc2hvdWxkIHJlYWQgdGhlIHNhbWUgdmFsdWUuCi0gKgkyLiBBZnRlciB3cml0aW5nIDB4MDAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/MDExMDAwP2IuCi0gKgkzLiBBZnRlciB3cml0aW5nIDB4MDEgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/MDExMDAxP2IuCi0gKglSZXR1cm4gMSBpZiBkZXRlY3RlZCBvLmsuIG9yIDAgaWYgZmFpbGVkLgotICoJTm90ZToJVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICoJCXN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTA3IChpbnQgcG9ydCkKLXsKLQlpbnQgdG1wLCBpLCBqOwotCi0JaWYgKCFnZXRfb3B0aW9uX2luZGV4KHM1MDhfcG9ydF9vcHRpb25zLCBwb3J0KSkKLQkJcmV0dXJuIDA7Ci0JdG1wID0gX0lOQihwb3J0KTsKLQlmb3IgKGogPSAxOyBqIDwgUzUwN19JT1JBTkdFOyArK2opIHsKLQkJaWYgKF9JTkIocG9ydCArIGopICE9IHRtcCkKLQkJCXJldHVybiAwOwotCQlmb3IgKGkgPSAwOyBpIDwgU0RMQV9JT0RFTEFZOyArK2kpOwkvKiBkZWxheSAqLwotCX0KLQotCV9PVVRCKHBvcnQsIDB4MDApOwotCWZvciAoaSA9IDA7IGkgPCBTRExBX0lPREVMQVk7ICsraSk7CS8qIGRlbGF5ICovCi0JaWYgKChfSU5CKHBvcnQpICYgMHg3RSkgIT0gMHgzMCkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwMSk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCkgJiAweDdFKSAhPSAweDMyKQotCQlyZXR1cm4gMDsKLQotCS8qIFJlc2V0IGFkYXB0ZXIgKi8KLQlfT1VUQihwb3J0LCAweDAwKTsKLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZXRlY3QgczUwOCBhZGFwdGVyLgotICoJRm9sbG93aW5nIHRlc3RzIGFyZSB1c2VkIHRvIGRldGVjdCBzNTA4IGFkYXB0ZXI6Ci0gKgkxLiBBZnRlciB3cml0aW5nIDB4MDAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/PzAwMDAwMGIuCi0gKgkyLiBBZnRlciB3cml0aW5nIDB4MTAgdG8gY29udHJvbCByZWdpc3Rlciwgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCByZWFkCi0gKgkgICA/PzAxMDAwMGIKLSAqCVJldHVybiAxIGlmIGRldGVjdGVkIG8uay4gb3IgMCBpZiBmYWlsZWQuCi0gKglOb3RlOglUaGlzIHRlc3QgaXMgZGVzdHJ1Y3RpdmUhIEFkYXB0ZXIgd2lsbCBiZSBsZWZ0IGluIHNodXRkb3duCi0gKgkJc3RhdGUgYWZ0ZXIgdGhlIHRlc3QuCi0gKi8KLXN0YXRpYyBpbnQgZGV0ZWN0X3M1MDggKGludCBwb3J0KQotewotCWludCBpOwotCi0JaWYgKCFnZXRfb3B0aW9uX2luZGV4KHM1MDhfcG9ydF9vcHRpb25zLCBwb3J0KSkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgwMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCArIDEpICYgMHgzRikgIT0gMHgwMCkKLQkJcmV0dXJuIDA7Ci0JX09VVEIocG9ydCwgMHgxMCk7Ci0JZm9yIChpID0gMDsgaSA8IFNETEFfSU9ERUxBWTsgKytpKTsJLyogZGVsYXkgKi8KLQlpZiAoKF9JTkIocG9ydCArIDEpICYgMHgzRikgIT0gMHgxMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBSZXNldCBhZGFwdGVyICovCi0JX09VVEIocG9ydCwgMHgwMCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZWN0IHM1MTQgUENJIGFkYXB0ZXIuCi0gKiAgICAgIFJldHVybiAxIGlmIGRldGVjdGVkIG8uay4gb3IgMCBpZiBmYWlsZWQuCi0gKiAgICAgIE5vdGU6ICAgVGhpcyB0ZXN0IGlzIGRlc3RydWN0aXZlISBBZGFwdGVyIHdpbGwgYmUgbGVmdCBpbiBzaHV0ZG93bgotICogICAgICAgICAgICAgIHN0YXRlIGFmdGVyIHRoZSB0ZXN0LgotICovCi1zdGF0aWMgaW50IGRldGVjdF9zNTE0IChzZGxhaHdfdCogaHcpCi17Ci0JdW5zaWduZWQgY2hhciBDUFVfbm8sIHNsb3Rfbm8sIGF1dG9fc2xvdF9jZmc7Ci0JaW50IG51bWJlcl9TNTE0X2NhcmRzID0gMDsKLQl1MzIgUzUxNF9tZW1fYmFzZV9hZGRyID0gMDsKLQl1MzIgdXRfdTMyOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCi0KLSNpZm5kZWYgQ09ORklHX1BDSQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTGludXggbm90IGNvbXBpbGVkIGZvciBQQ0kgdXNhZ2UhXG4iLCBtb2RuYW1lKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLQotCS8qCi0JVGhlICdzZXR1cCgpJyBwcm9jZWR1cmUgaW4gJ3NkbGFtYWluLmMnIHBhc3NlcyB0aGUgQ1BVIG51bWJlciBhbmQgdGhlCi0Jc2xvdCBudW1iZXIgZGVmaW5lZCBpbiAncm91dGVyLmNvbmYnIHZpYSB0aGUgJ3BvcnQnIGRlZmluaXRpb24uCi0JKi8KLQlDUFVfbm8gPSBody0+UzUxNF9jcHVfbm9bMF07Ci0Jc2xvdF9ubyA9IGh3LT5TNTE0X3Nsb3Rfbm87Ci0JYXV0b19zbG90X2NmZyA9IGh3LT5hdXRvX3BjaV9jZmc7Ci0KLQlpZiAoYXV0b19zbG90X2NmZyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcmNoLi4uIFM1MTQgY2FyZCwgQ1BVICVjLCBTbG90PUF1dG9cbiIsCi0JCW1vZG5hbWUsIENQVV9ubyk7Ci0KLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNyY2guLi4gUzUxNCBjYXJkLCBDUFUgJWMsIFNsb3QgIyVkXG4iLAotCQltb2RuYW1lLCBDUFVfbm8sIHNsb3Rfbm8pOwotCX0KLQkKLQkvKiBjaGVjayB0byBzZWUgdGhhdCBDUFUgQSBvciBCIGhhcyBiZWVuIHNlbGVjdGVkIGluICdyb3V0ZXIuY29uZicgKi8KLQlzd2l0Y2goQ1BVX25vKSB7Ci0JCWNhc2UgUzUxNF9DUFVfQToKLQkJY2FzZSBTNTE0X0NQVV9COgotCQkJYnJlYWs7Ci0JCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUzUxNCBDUFUgZGVmaW5pdGlvbiBpbnZhbGlkLlxuIiwgCi0JCQkJbW9kbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNdXN0IGJlICdBJyBvciAnQidcbiIpOwotCQkJcmV0dXJuIDA7Ci0JfQotCi0JbnVtYmVyX1M1MTRfY2FyZHMgPSBmaW5kX3M1MTRfYWRhcHRlcihodywgMCk7Ci0JaWYoIW51bWJlcl9TNTE0X2NhcmRzKQotCQlyZXR1cm4gMDsKLQotCS8qIHdlIGFyZSB1c2luZyBhIHNpbmdsZSBTNTE0IGFkYXB0ZXIgd2l0aCBhIHNsb3Qgb2YgMCBzbyByZS1yZWFkIHRoZSAqLwkKLQkvKiBsb2NhdGlvbiBvZiB0aGlzIGFkYXB0ZXIgKi8KLQlpZigobnVtYmVyX1M1MTRfY2FyZHMgPT0gMSkgJiYgYXV0b19zbG90X2NmZykgewkKLSAgICAgICAgCW51bWJlcl9TNTE0X2NhcmRzID0gZmluZF9zNTE0X2FkYXB0ZXIoaHcsIDEpOwotCQlpZighbnVtYmVyX1M1MTRfY2FyZHMpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciBmaW5kaW5nIFBDSSBjYXJkXG4iLAotCQkJCW1vZG5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlwY2lfZGV2ID0gaHctPnBjaV9kZXY7Ci0JLyogcmVhZCB0aGUgcGh5c2ljYWwgbWVtb3J5IGJhc2UgYWRkcmVzcyAqLwotCVM1MTRfbWVtX2Jhc2VfYWRkciA9IChDUFVfbm8gPT0gUzUxNF9DUFVfQSkgPyAKLQkJKHBjaV9kZXYtPnJlc291cmNlWzFdLnN0YXJ0KSA6Ci0JCShwY2lfZGV2LT5yZXNvdXJjZVsyXS5zdGFydCk7Ci0JCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFM1MTQgUENJIG1lbW9yeSBhdCAweCVYXG4iLAotCQltb2RuYW1lLCBTNTE0X21lbV9iYXNlX2FkZHIpOwotCWlmKCFTNTE0X21lbV9iYXNlX2FkZHIpIHsKLQkJaWYoQ1BVX25vID09IFM1MTRfQ1BVX0IpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ1BVICNCIG5vdCBwcmVzZW50IG9uIHRoZSBjYXJkXG4iLCAJCQkJbW9kbmFtZSk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBQQ0kgbWVtb3J5IGFsbG9jYXRlZCB0byBjYXJkXG4iLAkJCQltb2RuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogZW5hYmxlIHRoZSBQQ0kgbWVtb3J5ICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIAotCQkoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8gUENJX01BUDBfRFdPUkQgOiBQQ0lfTUFQMV9EV09SRCwKLQkJJnV0X3UzMik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfZGV2LAotCQkoQ1BVX25vID09IFM1MTRfQ1BVX0EpID8gUENJX01BUDBfRFdPUkQgOiBQQ0lfTUFQMV9EV09SRCwKLQkJKHV0X3UzMiB8IFBDSV9NRU1PUllfRU5BQkxFKSk7Ci0KLQkvKiBjaGVjayB0aGUgSVJRIGFsbG9jYXRlZCBhbmQgZW5hYmxlIElSUSB1c2FnZSAqLwotCWlmKCEoaHctPmlycSA9IHBjaV9kZXYtPmlycSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElSUSBub3QgYWxsb2NhdGVkIHRvIFM1MTQgYWRhcHRlclxuIiwKLQkJCW1vZG5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCX0KLQotCS8qIEJVRyBGSVggOiBNYXIgNiAyMDAwCi0gCSAqIE9uIGEgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBjYXJkLCB3ZSBtdXN0IGNoZWNrCi0gICAgICAgICAqIGFuZCBjbGVhciBQQ0kgaW50ZXJydXB0IGJpdHMsIGR1ZSB0byBhIHJlc2V0Ci0gICAgICAgICAqIHByb2JsZW0gb24gc29tZSBvdGhlciBib2FyZHMuICBpLmUuIEFuIGludGVycnVwdAotICAgICAgICAgKiBtaWdodCBiZSBwZW5kaW5nLCBldmVuIGFmdGVyIHN5c3RlbSBib290dXAsIAotICAgICAgICAgKiBpbiB3aGljaCBjYXNlLCB3aGVuIHN0YXJ0aW5nIHdhbnJvdXRlciB0aGUgbWFjaGluZQotICAgICAgICAgKiB3b3VsZCBjcmFzaC4gCi0JICovCi0JaWYgKGluaXRfcGNpX3Nsb3QoaHcpKQotCQlyZXR1cm4gMDsKLQotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgUENJX0lOVF9DT05GSUcsICZ1dF91MzIpOwotICAgICAgICB1dF91MzIgfD0gKENQVV9ubyA9PSBTNTE0X0NQVV9BKSA/Ci0gICAgICAgICAgICAgICAgUENJX0VOQUJMRV9JUlFfQ1BVX0EgOiBQQ0lfRU5BQkxFX0lSUV9DUFVfQjsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfZGV2LCBQQ0lfSU5UX0NPTkZJRywgdXRfdTMyKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUlEgJWQgYWxsb2NhdGVkIHRvIHRoZSBTNTE0IGNhcmRcbiIsCi0JCW1vZG5hbWUsIGh3LT5pcnEpOwotCi0JLyogbWFwIHRoZSBwaHlzaWNhbCBQQ0kgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5ICovCi0JaHctPmRwbWJhc2UgPSBpb3JlbWFwKCh1bnNpZ25lZCBsb25nKVM1MTRfbWVtX2Jhc2VfYWRkciwKLQkJKHVuc2lnbmVkIGxvbmcpTUFYX1NJWkVPRl9TNTE0X01FTU9SWSk7Ci0gICAgCS8qIG1hcCB0aGUgcGh5c2ljYWwgY29udHJvbCByZWdpc3RlciBtZW1vcnkgdG8gdmlydHVhbCBtZW1vcnkgKi8KLQlody0+dmVjdG9yID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcCgKLQkJKHVuc2lnbmVkIGxvbmcpKFM1MTRfbWVtX2Jhc2VfYWRkciArIFM1MTRfQ1RSTF9SRUdfQllURSksCi0JCSh1bnNpZ25lZCBsb25nKTE2KTsKLSAgICAgCi0gICAgICAgIGlmKCFody0+ZHBtYmFzZSB8fCAhaHctPnZlY3RvcikgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogUENJIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iLAotCQkJbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JfQotCi0JLyogaGFsdCB0aGUgYWRhcHRlciAqLwotCXdyaXRlYiAoUzUxNF9DUFVfSEFMVCwgaHctPnZlY3Rvcik7CQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmluZCB0aGUgUzUxNCBQQ0kgYWRhcHRlciBpbiB0aGUgUENJIGJ1cy4KLSAqICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgUzUxNCBhZGFwdGVycyBmb3VuZCAoMCBpZiBubyBhZGFwdGVyIGZvdW5kKS4KLSAqLwotc3RhdGljIGludCBmaW5kX3M1MTRfYWRhcHRlcihzZGxhaHdfdCogaHcsIGNoYXIgZmluZF9maXJzdF9TNTE0X2NhcmQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgc2xvdF9ubzsKLSAgICAgICAgaW50IG51bWJlcl9TNTE0X2NhcmRzID0gMDsKLQljaGFyIFM1MTRfZm91bmRfaW5fc2xvdCA9IDA7Ci0gICAgICAgIHUxNiBQQ0lfc3Vic3lzX3ZlbmRvcjsKLQotICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7Ci0gCi0gICAgICAgc2xvdF9ubyA9IGh3LT5TNTE0X3Nsb3Rfbm87Ci0gIAotCXdoaWxlICgocGNpX2RldiA9IHBjaV9maW5kX2RldmljZShWM19WRU5ET1JfSUQsIFYzX0RFVklDRV9JRCwgcGNpX2RldikpCi0gICAgICAgIAkhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgCi0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9TVUJTWVNfVkVORE9SX1dPUkQsCi0gICAgICAgICAgICAgICAgICAgICAgICAmUENJX3N1YnN5c192ZW5kb3IpOwotICAgICAgICAgICAgICAgIAotCQlpZihQQ0lfc3Vic3lzX3ZlbmRvciAhPSBTQU5HT01BX1NVQlNZU19WRU5ET1IpCi0gICAgICAgICAgICAgICAgCWNvbnRpbnVlOwotICAgICAgICAJCi0JCWh3LT5wY2lfZGV2ID0gcGNpX2RldjsKLQkJCi0JCWlmKGZpbmRfZmlyc3RfUzUxNF9jYXJkKQotCQkJcmV0dXJuKDEpOwotCQkKLSAgICAgICAgICAgICAgICBudW1iZXJfUzUxNF9jYXJkcyArKzsKLSAgICAgICAgICAgICAgICAKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBTNTE0IGNhcmQgZm91bmQsIHNsb3QgIyVkIChkZXZmbiAweCVYKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsICgocGNpX2Rldi0+ZGV2Zm4gPj4gMykgJiBQQ0lfREVWX1NMT1RfTUFTSyksCi0JCQlwY2lfZGV2LT5kZXZmbik7Ci0JCQotCQlpZiAoaHctPmF1dG9fcGNpX2NmZyl7Ci0JCQlody0+UzUxNF9zbG90X25vID0gKChwY2lfZGV2LT5kZXZmbiA+PiAzKSAmIFBDSV9ERVZfU0xPVF9NQVNLKTsKLQkJCXNsb3Rfbm8gPSBody0+UzUxNF9zbG90X25vOwotCQkJCi0JCX1lbHNlIGlmICgoKHBjaV9kZXYtPmRldmZuID4+IDMpICYgUENJX0RFVl9TTE9UX01BU0spID09IHNsb3Rfbm8pewotICAgICAgICAgICAgICAgICAgICAgICAgUzUxNF9mb3VuZF9pbl9zbG90ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0JLyogaWYgbm8gUzUxNCBhZGFwdGVyIGhhcyBiZWVuIGZvdW5kLCB0aGVuIGV4aXQgKi8KLSAgICAgICAgaWYgKCFudW1iZXJfUzUxNF9jYXJkcykgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgbm8gUzUxNCBhZGFwdGVycyBmb3VuZFxuIiwgbW9kbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgLyogaWYgbW9yZSB0aGFuIG9uZSBTNTE0IGNhcmQgaGFzIGJlZW4gZm91bmQsIHRoZW4gdGhlIHVzZXIgbXVzdCBoYXZlICovICAgICAgICAvKiBkZWZpbmVkIGEgc2xvdCBudW1iZXIgc28gdGhhdCB0aGUgY29ycmVjdCBhZGFwdGVyIGlzIHVzZWQgKi8KLSAgICAgICAgZWxzZSBpZiAoKG51bWJlcl9TNTE0X2NhcmRzID4gMSkgJiYgaHctPmF1dG9fcGNpX2NmZykgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgUENJIFNsb3QgYXV0b2RldGVjdCBGYWlsZWQhIFxuIgotCQkJCSAiJXM6ICAgICAgICBNb3JlIHRoYW4gb25lIFM1MTQgYWRhcHRlciBmb3VuZC5cbiIKLQkJCQkgIiVzOiAgICAgICAgRGlzYWJsZSB0aGUgQXV0b2RldGVjdCBmZWF0dXJlIGFuZCBzdXBwbHlcbiIKLQkJCQkgIiVzOiAgICAgICAgdGhlIFBDSVNMT1QgbnVtYmVycyBmb3IgZWFjaCBjYXJkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsbW9kbmFtZSxtb2RuYW1lLG1vZG5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIC8qIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSBzbG90IG51bWJlciBhbmQgdGhlIFM1MTQgYWRhcHRlciBoYXMgKi8KLSAgICAgICAgLyogbm90IGJlZW4gZm91bmQgaW4gdGhhdCBzbG90LCB0aGVuIGV4aXQgKi8KLSAgICAgICAgZWxzZSBpZiAoIWh3LT5hdXRvX3BjaV9jZmcgJiYgIVM1MTRfZm91bmRfaW5fc2xvdCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8KLQkJCSIlczogRXJyb3IsIFM1MTQgY2FyZCBub3QgZm91bmQgaW4gc3BlY2lmaWVkIHNsb3QgIyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgc2xvdF9ubyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotCXJldHVybiAobnVtYmVyX1M1MTRfY2FyZHMpOwotfQotCi0KLQotLyoqKioqKiogTWlzY2VsbGFuZW91cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2FsaWJyYXRlIFNETEEgbWVtb3J5IGFjY2VzcyBkZWxheS4KLSAqIENvdW50IG51bWJlciBvZiBpZGxlIGxvb3BzIG1hZGUgd2l0aGluIDEgc2Vjb25kIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUKLSAqIG51bWJlciBvZiBsb29wcyB0aGF0IHNob3VsZCBiZSBtYWRlIHRvIGFjaGl2ZSBkZXNpcmVkIGRlbGF5LgotICovCi1zdGF0aWMgaW50IGNhbGlicmF0ZV9kZWxheSAoaW50IG1rcykKLXsKLQl1bnNpZ25lZCBpbnQgZGVsYXk7Ci0JdW5zaWduZWQgbG9uZyBzdG9wOwotCi0JZm9yIChkZWxheSA9IDAsIHN0b3AgPSBTWVNURU1fVElDSyArIEhaOyBTWVNURU1fVElDSyA8IHN0b3A7ICsrZGVsYXkpOwotCXJldHVybiAoZGVsYXkvKDEwMDAwMDBML21rcykgKyAxKTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBHZXQgb3B0aW9uJ3MgaW5kZXggaW50byB0aGUgb3B0aW9ucyBsaXN0LgotICoJUmV0dXJuIG9wdGlvbidzIGluZGV4ICgxIC4uIE4pIG9yIHplcm8gaWYgb3B0aW9uIGlzIGludmFsaWQuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X29wdGlvbl9pbmRleCAodW5zaWduZWQqIG9wdGxpc3QsIHVuc2lnbmVkIG9wdHZhbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDE7IGkgPD0gb3B0bGlzdFswXTsgKytpKQotCQlpZiAoIG9wdGxpc3RbaV0gPT0gb3B0dmFsKQotCQkJcmV0dXJuIGk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2hlY2sgbWVtb3J5IHJlZ2lvbiB0byBzZWUgaWYgaXQncyBhdmFpbGFibGUuIAotICogUmV0dXJuOgkwCW9rLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hlY2tfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbikKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKiBwID0gcHRyOwotCi0gICAgICAgIGZvciAoOyBsZW4gJiYgKHJlYWRiIChwKSA9PSAweEZGKTsgLS1sZW4sICsrcCkgewotICAgICAgICAgICAgICAgIHdyaXRlYiAoMCwgcCk7ICAgICAgICAgIC8qIGF0dGVtcHQgdG8gd3JpdGUgMCAqLwotICAgICAgICAgICAgICAgIGlmIChyZWFkYihwKSAhPSAweEZGKSB7IC8qIHN0aWxsIGhhcyB0byByZWFkIDB4RkYgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlYiAoMHhGRiwgcCk7LyogcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIG5vdCBnb29kICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRlc3QgbWVtb3J5IHJlZ2lvbi4KLSAqIFJldHVybjoJc2l6ZSBvZiB0aGUgcmVnaW9uIHRoYXQgcGFzc2VkIHRoZSB0ZXN0LgotICogTm90ZToJUmVnaW9uIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiAyICEKLSAqLwotc3RhdGljIHVuc2lnbmVkIHRlc3RfbWVtcmVnaW9uICh2b2lkKiBwdHIsIHVuc2lnbmVkIGxlbikKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCogd19wdHI7Ci0JdW5zaWduZWQgbGVuX3cgPSBsZW4gPj4gMTsJLyogcmVnaW9uIGxlbiBpbiB3b3JkcyAqLwotCXVuc2lnbmVkIGk7Ci0KLSAgICAgICAgZm9yIChpID0gMCwgd19wdHIgPSBwdHI7IGkgPCBsZW5fdzsgKytpLCArK3dfcHRyKQotICAgICAgICAgICAgICAgIHdyaXRldyAoMHhBQTU1LCB3X3B0cik7Ci0gICAgICAgIAotCWZvciAoaSA9IDAsIHdfcHRyID0gcHRyOyBpIDwgbGVuX3c7ICsraSwgKyt3X3B0cikKLSAgICAgICAgICAgICAgICBpZiAocmVhZHcgKHdfcHRyKSAhPSAweEFBNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbl93ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSAwLCB3X3B0ciA9IHB0cjsgaSA8IGxlbl93OyArK2ksICsrd19wdHIpCi0gICAgICAgICAgICAgICAgd3JpdGV3ICgweDU1QUEsIHdfcHRyKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaSA9IDAsIHdfcHRyID0gcHRyOyBpIDwgbGVuX3c7ICsraSwgKyt3X3B0cikKLSAgICAgICAgICAgICAgICBpZiAocmVhZHcod19wdHIpICE9IDB4NTVBQSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVuX3cgPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChpID0gMCwgd19wdHIgPSBwdHI7IGkgPCBsZW5fdzsgKytpLCArK3dfcHRyKQotCQl3cml0ZXcgKDAsIHdfcHRyKTsKLQotICAgICAgICByZXR1cm4gbGVuX3cgPDwgMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDYWxjdWxhdGUgMTYtYml0IENSQyB1c2luZyBDQ0lUVCBwb2x5bm9taWFsLgotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY2hlY2tzdW0gKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IGNyYyA9IDA7Ci0JdW5zaWduZWQgbWFzaywgZmxhZzsKLQotCWZvciAoOyBsZW47IC0tbGVuLCArK2J1ZikgewotCQlmb3IgKG1hc2sgPSAweDgwOyBtYXNrOyBtYXNrID4+PSAxKSB7Ci0JCQlmbGFnID0gKGNyYyAmIDB4ODAwMCk7Ci0JCQljcmMgPDw9IDE7Ci0JCQljcmMgfD0gKCgqYnVmICYgbWFzaykgPyAxIDogMCk7Ci0JCQlpZiAoZmxhZykgY3JjIF49IDB4MTAyMTsKLQkJfQotCX0KLQlyZXR1cm4gY3JjOwotfQotCi1zdGF0aWMgaW50IGluaXRfcGNpX3Nsb3Qoc2RsYWh3X3QgKmh3KQotewotCi0JdTMyIGludF9zdGF0dXM7Ci0JaW50IHZvbGF0aWxlIGZvdW5kPTA7Ci0JaW50IGk9MDsKLQotCS8qIENoZWNrIGlmIHRoaXMgaXMgYSB2ZXJ5IGZpcnN0IGxvYWQgZm9yIGEgc3BlY2lmaWMKLSAgICAgICAgICogcGNpIGNhcmQuIElmIGl0IGlzLCBjbGVhciB0aGUgaW50ZXJycHV0IGJpdHMsIGFuZAotICAgICAgICAgKiBzZXQgdGhlIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoaXMgY2FyZCB3YXMgaW5pdGlhbGl6ZWQuCi0JICovCi0JCi0JZm9yIChpPTA7IChpPE1BWF9TNTE0X0NBUkRTKSAmJiAhZm91bmQ7IGkrKyl7Ci0JCWlmIChwY2lfc2xvdF9hcltpXSA9PSBody0+UzUxNF9zbG90X25vKXsKLQkJCWZvdW5kPTE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocGNpX3Nsb3RfYXJbaV0gPT0gMHhGRil7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpewotCQlyZWFkX1M1MTRfaW50X3N0YXQoaHcsJmludF9zdGF0dXMpOwotCQlTNTE0X2ludGFjayhodyxpbnRfc3RhdHVzKTsKLQkJaWYgKGkgPT0gTUFYX1M1MTRfQ0FSRFMpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIEVycm9yICEhIVxuIixtb2RuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiBOdW1iZXIgb2YgU2FuZ29tYSBQQ0kgY2FyZHMgZXhjZWVkZWQgbWF4aW11bSBsaW1pdC5cbiIsCi0JCQkJCW1vZG5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXNcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcGNpX3Nsb3RfYXJbaV0gPSBody0+UzUxNF9zbG90X25vOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2lfcHJvYmUoc2RsYWh3X3QgKmh3KQotewotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgc2xvdF9ubzsKLSAgICAgICAgaW50IG51bWJlcl9TNTE0X2NhcmRzID0gMDsKLSAgICAgICAgdTE2IFBDSV9zdWJzeXNfdmVuZG9yOwotCXUxNiBQQ0lfY2FyZF90eXBlOwotCi0gICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gTlVMTDsKLSAKLSAgICAgICBzbG90X25vID0gMDsKLSAgCi0Jd2hpbGUgKChwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFYzX1ZFTkRPUl9JRCwgVjNfREVWSUNFX0lELCBwY2lfZGV2KSkKLSAgICAgICAgCSE9IE5VTEwpIHsKLQkJCi0gICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX1NVQlNZU19WRU5ET1JfV09SRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZQQ0lfc3Vic3lzX3ZlbmRvcik7Ci0JCQotICAgICAgICAgICAgICAgIGlmKFBDSV9zdWJzeXNfdmVuZG9yICE9IFNBTkdPTUFfU1VCU1lTX1ZFTkRPUikKLSAgICAgICAgICAgICAgICAJY29udGludWU7Ci0KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX0NBUkRfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZQQ0lfY2FyZF90eXBlKTsKLQkKLQkJYnVzID0gcGNpX2Rldi0+YnVzOwotCQkKLQkJLyogQSBkdWFsIGNwdSBjYXJkIGNhbiBzdXBwb3J0IHVwIHRvIDQgcGh5c2ljYWwgY29ubmVjdGlvbnMsCi0JCSAqIHdoZXJlIGEgc2luZ2xlIGNwdSBjYXJkIGNhbiBzdXBwb3J0IHVwIHRvIDIgcGh5c2ljYWwKLQkJICogY29ubmVjdGlvbnMuICBUaGUgRlQxIGNhcmQgY2FuIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSAKLQkJICogY29ubmVjdGlvbiwgaG93ZXZlciB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIFNpbmdsZQotCQkgKiBDUFUgY2FyZCBhbmQgYW4gRlQxIGNhcmQuICovCi0JCWlmIChQQ0lfY2FyZF90eXBlID09IFM1MTRfRFVBTF9DUFUpewotICAgICAgICAgICAgICAgIAludW1iZXJfUzUxNF9jYXJkcyArPSA0OwotCQkJIHByaW50ayhLRVJOX0lORk8KLQkJCQkid2FucGlwZTogUzUxNC1QQ0kgY2FyZCBmb3VuZCwgY3B1KHMpIDIsIGJ1cyAjJWQsIHNsb3QgIyVkLCBpcnEgIyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCWJ1cy0+bnVtYmVyLCgocGNpX2Rldi0+ZGV2Zm4gPj4gMykgJiBQQ0lfREVWX1NMT1RfTUFTSyksCi0JCQkJcGNpX2Rldi0+aXJxKTsKLQkJfWVsc2V7Ci0JCQludW1iZXJfUzUxNF9jYXJkcyArPSAyOwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJ3YW5waXBlOiBTNTE0LVBDSSBjYXJkIGZvdW5kLCBjcHUocykgMSwgYnVzICMlZCwgc2xvdCAjJWQsIGlycSAjJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAJYnVzLT5udW1iZXIsKChwY2lfZGV2LT5kZXZmbiA+PiAzKSAmIFBDSV9ERVZfU0xPVF9NQVNLKSwKLQkJCQlwY2lfZGV2LT5pcnEpOwotCQl9Ci0gICAgICAgIH0KLQotCXJldHVybiBudW1iZXJfUzUxNF9jYXJkczsKLQotfQotCi0KLQotRVhQT1JUX1NZTUJPTCh3YW5waXBlX2h3X3Byb2JlKTsKLQotdW5zaWduZWQgd2FucGlwZV9od19wcm9iZSh2b2lkKQotewotCXNkbGFod190IGh3OwotCXVuc2lnbmVkKiBvcHQgPSBzNTA4X3BvcnRfb3B0aW9uczsgCi0JdW5zaWduZWQgY2FyZG5vPTA7Ci0JaW50IGk7Ci0JCi0JbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7Ci0JCi0JZm9yIChpID0gMTsgaSA8PSBvcHRbMF07IGkrKykgewotCQlpZiAoZGV0ZWN0X3M1MDgob3B0W2ldKSl7Ci0JCQkvKiBTNTA4IGNhcmQgY2FuIHN1cHBvcnQgdXAgdG8gdHdvIHBoeXNpY2FsIGxpbmtzICovCi0JCQljYXJkbm8rPTI7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBTNTA4LUlTQSBjYXJkIGZvdW5kLCBwb3J0IDB4JXhcbiIsb3B0W2ldKTsKLQkJfQotCX0KLQotICAgICAgI2lmZGVmIENPTkZJR19QQ0kKLQlody5TNTE0X3Nsb3Rfbm8gPSAwOwotCWNhcmRubyArPSBwY2lfcHJvYmUoJmh3KTsKLSAgICAgICNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogV2FybmluZywgS2VybmVsIG5vdCBjb21waWxlZCBmb3IgUENJIHN1cHBvcnQhXG4iKTsKLQlwcmludGsoS0VSTl9JTkZPICJ3YW5waXBlOiBQQ0kgSGFyZHdhcmUgUHJvYmUgRmFpbGVkIVxuIik7Ci0gICAgICAjZW5kaWYKLQotCXJldHVybiBjYXJkbm87Ci19Ci0KLS8qKioqKiogRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGFtYWluLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYW1haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4YjIyYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYW1haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYW1haW4uYwlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4gIE1haW4gbW9kdWxlLgotKgotKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrCQotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBEZWMgMjIsIDIwMDAgIE5lbmFkIENvcmJpYwlVcGRhdGVkIGZvciAyLjQuWCBrZXJuZWxzLgotKiAJCQkJUmVtb3ZlZCB0aGUgcG9sbGluZyByb3V0aW5lLgotKiBOb3YgMTMsIDIwMDAgIE5lbmFkIENvcmJpYwlBZGRlZCBodyBwcm9iaW5nIG9uIG1vZHVsZSBsb2FkIGFuZCBkeW5hbWljCi0qIAkJCQlkZXZpY2UgYWxsb2NhdGlvbi4gCi0qIE5vdiA3LCAgMjAwMCAgTmVuYWQgQ29yYmljCUZpeGVkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmb3Iga2VybmVscwotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjIuMTYgYW5kIGFib3ZlLgotKiBBdWcgMiwgIDIwMDAgIE5lbmFkIENvcmJpYwlCbG9jayB0aGUgTXVsdGktUG9ydCBQUFAgZnJvbSBydW5uaW5nIG9uCi0qICAJCQkgICAgICAgIGtlcm5lbHMgMi4yLjE2IG9yIGdyZWF0ZXIuICBUaGUgU3luY1BQUCAKLSogIAkJCSAgICAgICAgaGFzIGNoYW5nZWQuCi0qIEp1bCAyNSwgMjAwMCAgTmVuYWQgQ29yYmljCVVwZGF0ZWQgdGhlIFBpZ2dpYmFjayBzdXBwb3J0IGZvciBNdWx0UFBQUC4KLSogSnVsIDEzLCAyMDAwCU5lbmFkIENvcmJpYwlBZGRlZCBNdWx0aS1QUFAgc3VwcG9ydC4KLSogRmViIDAyLCAyMDAwICBOZW5hZCBDb3JiaWMgICAgRml4ZWQgdXAgcGlnZ3liYWNrIHByb2JpbmcgYW5kIHNlbGVjdGlvbi4KLSogU2VwIDIzLCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgQWRkZWQgc3VwcG9ydCBmb3IgU01QCi0qIFNlcCAxMywgMTk5OSAgTmVuYWQgQ29yYmljCUVhY2ggcG9ydCBpcyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgZGV2aWNlLgotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKgkJCQlVcGRhdGVzIGZvciBMaW51eCAyLjIuWCBrZXJuZWxzLgotKiBTZXAgMTcsIDE5OTgJSmFzcHJlZXQgU2luZ2gJVXBkYXRlZCBmb3IgMi4xLjEyMSsga2VybmVsCi0qIE5vdiAyOCwgMTk5NwlKYXNwcmVldCBTaW5naAlDaGFuZ2VkIERSVl9SRUxFQVNFIHRvIDEKLSogTm92IDEwLCAxOTk3CUphc3ByZWV0IFNpbmdoCUNoYW5nZWQgc3RpKCkgdG8gcmVzdG9yZV9mbGFncygpOwotKiBOb3YgMDYsIDE5OTcgCUphc3ByZWV0IFNpbmdoCUNoYW5nZWQgRFJWX1ZFUlNJT04gdG8gNCBhbmQgRFJWX1JFTEVBU0UgdG8gMAotKiBPY3QgMjAsIDE5OTcgCUphc3ByZWV0IFNpbmdoCU1vZGlmaWVkIHNkbGFfaXNyIHJvdXRpbmUgc28gdGhhdCBjYXJkLT5pbl9pc3IKLSoJCQkJYXNzaWdubWVudHMgYXJlIHRha2VuIG91dCBhbmQgcGxhY2VkIGluIHRoZQotKgkJCQlzZGxhX3BwcC5jLCBzZGxhX2ZyLmMgYW5kIHNkbGFfeDI1LmMgaXNyCi0qCQkJCXJvdXRpbmVzLiBUb29rIG91dCAnd2FuZGV2LT50eF9pbnRfZW5hYmxlZCcgYW5kCi0qCQkJCXJlcGxhY2VkIGl0IHdpdGggJ3dhbmRldi0+ZW5hYmxlX3R4X2ludCcuIAotKiBNYXkgMjksIDE5OTcJSmFzcHJlZXQgU2luZ2gJRmxvdyBDb250cm9sIFByb2JsZW0KLSoJCQkJYWRkZWQgIndhbmRldi0+dHhfaW50X2VuYWJsZWQ9MSIgbGluZSBpbiB0aGUKLSoJCQkJaW5pdCBtb2R1bGUuIFRoaXMgbGluZSBpbml0aWFsaXplcyB0aGUgZmxhZyBmb3IgCi0qCQkJCXByZXZlbnRpbmcgSW50ZXJydXB0IGRpc2FibGVkIHdpdGggZGV2aWNlIHNldCB0bwotKgkJCQlidXN5Ci0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gYWRkZWQgVURQIG1hbmFnZW1lbnQgc3R1ZmYKLSogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogT1MgY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIHN1cHBvcnQgZm9yIGxvYWRhYmxlIG1vZHVsZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24oKSwgcmVsZWFzZV9yZWdpb24oKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogcGh5c190b192aXJ0KCkgKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZV9jb21tb24uaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGtlcm5lbCA8LT4gdXNlciBjb3B5ICovCi0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLSAKLSNkZWZpbmUgS01FTV9TQUZFVFlaT05FIDgKLQotCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX0ZSCi0gICNkZWZpbmUgd3BmX2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfV0FOUElQRV9DSERMQwotICNkZWZpbmUgd3BjX2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfV0FOUElQRV9YMjUKLSAjZGVmaW5lIHdweF9pbml0KGEsYikgKC1FUFJPVE9OT1NVUFBPUlQpIAotI2VuZGlmCi0gCi0jaWZuZGVmIENPTkZJR19XQU5QSVBFX1BQUAotICNkZWZpbmUgd3BwX2luaXQoYSxiKSAoLUVQUk9UT05PU1VQUE9SVCkgCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfV0FOUElQRV9NVUxUUFBQIAotICNkZWZpbmUgd3NwcHBfaW5pdChhLGIpICgtRVBST1RPTk9TVVBQT1JUKSAKLSNlbmRpZgotIAotIAotLyoqKioqKioqKioqRk9SIERFQlVHR0lORyBQVVJQT1NFUyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotc3RhdGljIHZvaWQgKiBkYmdfa21hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IHByaW8sIGludCBsaW5lKSB7Ci0JaW50IGkgPSAwOwotCXZvaWQgKiB2ID0ga21hbGxvYyhzaXplK3NpemVvZih1bnNpZ25lZCBpbnQpKzIqS01FTV9TQUZFVFlaT05FKjgscHJpbyk7Ci0JY2hhciAqIGMxID0gdjsJCi0JYzEgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0JKigodW5zaWduZWQgaW50ICopdikgPSBzaXplOwotCi0JZm9yIChpID0gMDsgaSA8IEtNRU1fU0FGRVRZWk9ORTsgaSsrKSB7Ci0JCWMxWzBdID0gJ0QnOyBjMVsxXSA9ICdFJzsgYzFbMl0gPSAnQSc7IGMxWzNdID0gJ0QnOwotCQljMVs0XSA9ICdCJzsgYzFbNV0gPSAnRSc7IGMxWzZdID0gJ0UnOyBjMVs3XSA9ICdGJzsKLQkJYzEgKz0gODsKLQl9Ci0JYzEgKz0gc2l6ZTsKLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJYzFbMF0gPSAnTSc7IGMxWzFdID0gJ1UnOyBjMVsyXSA9ICdOJzsgYzFbM10gPSAnRyc7Ci0JCWMxWzRdID0gJ1cnOyBjMVs1XSA9ICdBJzsgYzFbNl0gPSAnTCc7IGMxWzddID0gJ0wnOwotCQljMSArPSA4OwotCX0KLQl2ID0gKChjaGFyICopdikgKyBzaXplb2YodW5zaWduZWQgaW50KSArIEtNRU1fU0FGRVRZWk9ORSo4OwotCXByaW50ayhLRVJOX0lORk8gImxpbmUgJWQgIGttYWxsb2MoJWQsJWQpID0gJXBcbiIsbGluZSxzaXplLHByaW8sdik7Ci0JcmV0dXJuIHY7Ci19Ci1zdGF0aWMgdm9pZCBkYmdfa2ZyZWUodm9pZCAqIHYsIGludCBsaW5lKSB7Ci0JdW5zaWduZWQgaW50ICogc3AgPSAodW5zaWduZWQgaW50ICopKCgoY2hhciAqKXYpIC0gKHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjgpKTsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9ICpzcDsKLQljaGFyICogYzEgPSAoKGNoYXIgKil2KSAtIEtNRU1fU0FGRVRZWk9ORSo4OwotCWludCBpID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJaWYgKCAgIGMxWzBdICE9ICdEJyB8fCBjMVsxXSAhPSAnRScgfHwgYzFbMl0gIT0gJ0EnIHx8IGMxWzNdICE9ICdEJwotCQkgICAgfHwgYzFbNF0gIT0gJ0InIHx8IGMxWzVdICE9ICdFJyB8fCBjMVs2XSAhPSAnRScgfHwgYzFbN10gIT0gJ0YnKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJrbWFsbG9jZWQgYmxvY2sgYXQgJXAgaGFzIGJlZW4gY29ycnVwdGVkICh1bmRlcnJ1bikhXG4iLHYpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiICU0eDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwgaSo4LAotCQkJICAgICAgICAgICAgICAgIGMxWzBdLGMxWzFdLGMxWzJdLGMxWzNdLGMxWzRdLGMxWzVdLGMxWzZdLGMxWzddICk7Ci0JCX0KLQkJYzEgKz0gODsKLQl9Ci0JYzEgKz0gc2l6ZTsKLQlmb3IgKGkgPSAwOyBpIDwgS01FTV9TQUZFVFlaT05FOyBpKyspIHsKLQkJaWYgKCAgIGMxWzBdICE9ICdNJyB8fCBjMVsxXSAhPSAnVScgfHwgYzFbMl0gIT0gJ04nIHx8IGMxWzNdICE9ICdHJwotCQkgICAgfHwgYzFbNF0gIT0gJ1cnIHx8IGMxWzVdICE9ICdBJyB8fCBjMVs2XSAhPSAnTCcgfHwgYzFbN10gIT0gJ0wnCi0JCSAgICkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAia21hbGxvY2VkIGJsb2NrIGF0ICVwIGhhcyBiZWVuIGNvcnJ1cHRlZCAob3ZlcnJ1bik6XG4iLHYpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiICU0eDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwgaSo4LAotCQkJICAgICAgICAgICAgICAgIGMxWzBdLGMxWzFdLGMxWzJdLGMxWzNdLGMxWzRdLGMxWzVdLGMxWzZdLGMxWzddICk7Ci0JCX0KLQkJYzEgKz0gODsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGluZSAlZCAga2ZyZWUoJXApXG4iLGxpbmUsdik7Ci0JdiA9ICgoY2hhciAqKXYpIC0gKHNpemVvZih1bnNpZ25lZCBpbnQpICsgS01FTV9TQUZFVFlaT05FKjgpOwotCWtmcmVlKHYpOwotfQotCi0jZGVmaW5lIGttYWxsb2MoeCx5KSBkYmdfa21hbGxvYyh4LHksX19MSU5FX18pCi0jZGVmaW5lIGtmcmVlKHgpIGRiZ19rZnJlZSh4LF9fTElORV9fKQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLQotLyoqKioqKiBEZWZpbmVzICYgTWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZglfREVCVUdfCi0jZGVmaW5lCVNUQVRJQwotI2Vsc2UKLSNkZWZpbmUJU1RBVElDCQlzdGF0aWMKLSNlbmRpZgotCi0jZGVmaW5lCURSVl9WRVJTSU9OCTUJCS8qIHZlcnNpb24gbnVtYmVyICovCi0jZGVmaW5lCURSVl9SRUxFQVNFCTAJCS8qIHJlbGVhc2UgKG1pbm9yIHZlcnNpb24pIG51bWJlciAqLwotI2RlZmluZQlNQVhfQ0FSRFMJMTYJCS8qIG1heCBudW1iZXIgb2YgYWRhcHRlcnMgKi8KLQotI2lmbmRlZglDT05GSUdfV0FOUElQRV9DQVJEUwkJLyogY29uZmlndXJhYmxlIG9wdGlvbiAqLwotI2RlZmluZQlDT05GSUdfV0FOUElQRV9DQVJEUyAxCi0jZW5kaWYKLQotI2RlZmluZQlDTURfT0sJCTAJCS8qIG5vcm1hbCBmaXJtd2FyZSByZXR1cm4gY29kZSAqLwotI2RlZmluZQlDTURfVElNRU9VVAkweEZGCQkvKiBmaXJtd2FyZSBjb21tYW5kIHRpbWVkIG91dCAqLwotI2RlZmluZQlNQVhfQ01EX1JFVFJZCTEwCQkvKiBtYXggbnVtYmVyIG9mIGZpcm13YXJlIHJldHJpZXMgKi8KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotIAotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwotc3RhdGljIGludCBzZXR1cChzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCB3YW5kZXZfY29uZl90KiBjb25mKTsKLXN0YXRpYyBpbnQgc2h1dGRvd24oc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldik7Ci1zdGF0aWMgaW50IGlvY3RsKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCi0vKiBJT0NUTCBoYW5kbGVycyAqLwotc3RhdGljIGludCBpb2N0bF9kdW1wCShzZGxhX3QqIGNhcmQsIHNkbGFfZHVtcF90KiB1X2R1bXApOwotc3RhdGljIGludCBpb2N0bF9leGVjCShzZGxhX3QqIGNhcmQsIHNkbGFfZXhlY190KiB1X2V4ZWMsIGludCk7Ci0KLS8qIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi1TVEFUSUMgaXJxcmV0dXJuX3Qgc2RsYV9pc3IJKGludCBpcnEsIHZvaWQqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotc3RhdGljIHZvaWQgcmVsZWFzZV9odyAgKHNkbGFfdCAqY2FyZCk7Ci0KLXN0YXRpYyBpbnQgY2hlY2tfczUwOF9jb25mbGljdHMgKHNkbGFfdCogY2FyZCx3YW5kZXZfY29uZl90KiBjb25mLCBpbnQqKTsKLXN0YXRpYyBpbnQgY2hlY2tfczUxNF9jb25mbGljdHMgKHNkbGFfdCogY2FyZCx3YW5kZXZfY29uZl90KiBjb25mLCBpbnQqKTsKLQotCi0vKioqKioqIEdsb2JhbCBEYXRhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE5vdGU6IEFsbCBkYXRhIG11c3QgYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCEhIQotICovCi0KLS8qIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIGNoYXIgZHJ2bmFtZVtdCT0gIndhbnBpcGUiOwotc3RhdGljIGNoYXIgZnVsbG5hbWVbXQk9ICJXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIERyaXZlciI7Ci1zdGF0aWMgY2hhciBjb3B5cmlnaHRbXQk9ICIoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4iOwotc3RhdGljIGludCBuY2FyZHM7IAotc3RhdGljIHNkbGFfdCogY2FyZF9hcnJheTsJCS8qIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCi0vKiBXYW5waXBlJ3Mgb3duIHdvcmtxdWV1ZSwgdXNlZCBmb3IgYWxsIEFQSSdzLgotICogQWxsIHByb3RvY29sIHNwZWNpZmljIHRhc2tzIHdpbGwgYmUgaW5zZXJ0ZWQKLSAqIGludG8gdGhlICJ3YW5waXBlX3dxIiB3b3JrcXVldWUuIAotCi0gKiBUaGUga2VybmVsIHdvcmtxdWV1ZSBtZWNoYW5pc20gd2lsbCBleGVjdXRlCi0gKiBhbGwgcGVuZGluZyB0YXNrcyBpbiB0aGUgIndhbnBpcGVfd3EiIHdvcmtxdWV1ZS4KLSAqLwotCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd2FucGlwZV93cTsKLURFQ0xBUkVfV09SSyh3YW5waXBlX3dvcmssIE5VTEwsIE5VTEwpOwotCi1zdGF0aWMgaW50IHdhbnBpcGVfYmhfY3JpdGljYWw7Ci0KLS8qKioqKioqIEtlcm5lbCBMb2FkYWJsZSBNb2R1bGUgRW50cnkgUG9pbnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE1vZHVsZSAnaW5zZXJ0JyBlbnRyeSBwb2ludC4KLSAqIG8gcHJpbnQgYW5ub3VuY2VtZW50Ci0gKiBvIGFsbG9jYXRlIGFkYXB0ZXIgZGF0YSBzcGFjZQotICogbyBpbml0aWFsaXplIHN0YXRpYyBkYXRhCi0gKiBvIHJlZ2lzdGVyIGFsbCBjYXJkcyB3aXRoIFdBTiByb3V0ZXIKLSAqIG8gY2FsaWJyYXRlIFNETEEgc2hhcmVkIG1lbW9yeSBhY2Nlc3MgZGVsYXkuCi0gKgotICogUmV0dXJuOgkwCU9rCi0gKgkJPCAwCWVycm9yLgotICogQ29udGV4dDoJcHJvY2VzcwotICovCi0gCi1zdGF0aWMgaW50IF9faW5pdCB3YW5waXBlX2luaXQodm9pZCkKLXsKLQlpbnQgY250LCBlcnIgPSAwOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgdiV1LiV1ICVzXG4iLAotCQlmdWxsbmFtZSwgRFJWX1ZFUlNJT04sIERSVl9SRUxFQVNFLCBjb3B5cmlnaHQpOwotCi0Jd2FucGlwZV93cSA9IGNyZWF0ZV93b3JrcXVldWUoIndhbnBpcGVfd3EiKTsKLQlpZiAoIXdhbnBpcGVfd3EpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogUHJvYmUgZm9yIHdhbnBpcGUgY2FyZHMgYW5kIHJldHVybiB0aGUgbnVtYmVyIGZvdW5kICovCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogUHJvYmluZyBmb3IgV0FOUElQRSBoYXJkd2FyZS5cbiIpOwotCW5jYXJkcyA9IHdhbnBpcGVfaHdfcHJvYmUoKTsKLQlpZiAobmNhcmRzKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogQWxsb2NhdGluZyBtYXhpbXVtICVpIGRldmljZXM6IHdhbnBpcGUlaSAtIHdhbnBpcGUlaS5cbiIsbmNhcmRzLDEsbmNhcmRzKTsKLQl9ZWxzZXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2FucGlwZTogTm8gUzUxNC9TNTA4IGNhcmRzIGZvdW5kLCB1bmxvYWRpbmcgbW9kdWxlcyFcbiIpOwotCQlkZXN0cm95X3dvcmtxdWV1ZSh3YW5waXBlX3dxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCQotCS8qIFZlcmlmeSBudW1iZXIgb2YgY2FyZHMgYW5kIGFsbG9jYXRlIGFkYXB0ZXIgZGF0YSBzcGFjZSAqLwotCWNhcmRfYXJyYXkgPSBrbWFsbG9jKHNpemVvZihzZGxhX3QpICogbmNhcmRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2FyZF9hcnJheSA9PSBOVUxMKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHdhbnBpcGVfd3EpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY2FyZF9hcnJheSwgMCwgc2l6ZW9mKHNkbGFfdCkgKiBuY2FyZHMpOwotCi0JLyogUmVnaXN0ZXIgYWRhcHRlcnMgd2l0aCBXQU4gcm91dGVyICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBuY2FyZHM7ICsrIGNudCkgewotCQlzZGxhX3QqIGNhcmQgPSAmY2FyZF9hcnJheVtjbnRdOwotCQlzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2ID0gJmNhcmQtPndhbmRldjsKLQotCQljYXJkLT5uZXh0ID0gTlVMTDsKLQkJc3ByaW50ZihjYXJkLT5kZXZuYW1lLCAiJXMlZCIsIGRydm5hbWUsIGNudCArIDEpOwotCQl3YW5kZXYtPm1hZ2ljICAgID0gUk9VVEVSX01BR0lDOwotCQl3YW5kZXYtPm5hbWUgICAgID0gY2FyZC0+ZGV2bmFtZTsKLQkJd2FuZGV2LT5wcml2YXRlICA9IGNhcmQ7Ci0JCXdhbmRldi0+ZW5hYmxlX3R4X2ludCA9IDA7Ci0JCXdhbmRldi0+c2V0dXAgICAgPSAmc2V0dXA7Ci0JCXdhbmRldi0+c2h1dGRvd24gPSAmc2h1dGRvd247Ci0JCXdhbmRldi0+aW9jdGwgICAgPSAmaW9jdGw7Ci0JCWVyciA9IHJlZ2lzdGVyX3dhbl9kZXZpY2Uod2FuZGV2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogJXMgcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkIVxuIiwKLQkJCQlkcnZuYW1lLCBjYXJkLT5kZXZuYW1lLCBlcnIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNudCl7Ci0JCW5jYXJkcyA9IGNudDsJLyogYWRqdXN0IGFjdHVhbCBudW1iZXIgb2YgY2FyZHMgKi8KLQl9ZWxzZSB7Ci0JCWtmcmVlKGNhcmRfYXJyYXkpOwotCQlkZXN0cm95X3dvcmtxdWV1ZSh3YW5waXBlX3dxKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSU4gSW5pdCBNb2R1bGU6IE5PIENhcmRzIHJlZ2lzdGVyZWRcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogTW9kdWxlICdyZW1vdmUnIGVudHJ5IHBvaW50LgotICogbyB1bnJlZ2lzdGVyIGFsbCBhZGFwdGVycyBmcm9tIHRoZSBXQU4gcm91dGVyCi0gKiBvIHJlbGVhc2UgYWxsIHJlbWFpbmluZyBzeXN0ZW0gcmVzb3VyY2VzCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB3YW5waXBlX2NsZWFudXAodm9pZCkKLXsKLQlpbnQgaTsKLQotCWlmICghbmNhcmRzKQotCQlyZXR1cm47Ci0JCQotCWZvciAoaSA9IDA7IGkgPCBuY2FyZHM7ICsraSkgewotCQlzZGxhX3QqIGNhcmQgPSAmY2FyZF9hcnJheVtpXTsKLQkJdW5yZWdpc3Rlcl93YW5fZGV2aWNlKGNhcmQtPmRldm5hbWUpOwotCX0KLQlkZXN0cm95X3dvcmtxdWV1ZSh3YW5waXBlX3dxKTsKLQlrZnJlZShjYXJkX2FycmF5KTsKLQotCXByaW50ayhLRVJOX0lORk8gIlxud2FucGlwZTogV0FOUElQRSBNb2R1bGVzIFVubG9hZGVkLlxuIik7Ci19Ci0KLW1vZHVsZV9pbml0KHdhbnBpcGVfaW5pdCk7Ci1tb2R1bGVfZXhpdCh3YW5waXBlX2NsZWFudXApOwotCi0vKioqKioqKiBXQU4gRGV2aWNlIERyaXZlciBFbnRyeSBQb2ludHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXR1cC9jb25maWd1cmUgV0FOIGxpbmsgZHJpdmVyLgotICogbyBjaGVjayBhZGFwdGVyIHN0YXRlCi0gKiBvIG1ha2Ugc3VyZSBmaXJtd2FyZSBpcyBwcmVzZW50IGluIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIEkvTyBwb3J0IGFuZCBJUlEgYXJlIHNwZWNpZmllZAotICogbyBtYWtlIHN1cmUgSS9PIHJlZ2lvbiBpcyBhdmFpbGFibGUKLSAqIG8gYWxsb2NhdGUgaW50ZXJydXB0IHZlY3RvcgotICogbyBzZXR1cCBTRExBIGhhcmR3YXJlCi0gKiBvIGNhbGwgYXBwcm9wcmlhdGUgcm91dGluZSB0byBwZXJmb3JtIHByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uCi0gKiBvIG1hcmsgSS9PIHJlZ2lvbiBhcyB1c2VkCi0gKiBvIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGl2ZSBjYXJkLCB0aGVuIHNjaGVkdWxlIGJhY2tncm91bmQgdGFzawotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcm91dGVyIGhhbmRsZXMgUk9VVEVSX1NFVFVQIElPQ1RMLiBUaGUKLSAqIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGlzIGluIGtlcm5lbCBtZW1vcnkgKGluY2x1ZGluZyBleHRlbmRlZCBkYXRhLCBpZgotICogYW55KS4KLSAqLwotIAotc3RhdGljIGludCBzZXR1cChzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCB3YW5kZXZfY29uZl90KiBjb25mKQotewotCXNkbGFfdCogY2FyZDsKLQlpbnQgZXJyID0gMDsKLQlpbnQgaXJxPTA7Ci0KLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSB8fCAoY29uZiA9PSBOVUxMKSl7Ci0JCXByaW50ayhLRVJOX0lORk8gCi0JCSAgICAgICIlczogRmFpbGVkIFNkbGFtYWluIFNldHVwIHdhbmRldiAldSwgY2FyZCAldSwgY29uZiAldSAhXG4iLAotCQkgICAgICB3YW5kZXYtPm5hbWUsCi0JCSAgICAgICh1bnNpZ25lZCBpbnQpd2FuZGV2LCh1bnNpZ25lZCBpbnQpd2FuZGV2LT5wcml2YXRlLAotCQkgICAgICAodW5zaWduZWQgaW50KWNvbmYpOyAKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0YXJ0aW5nIFdBTiBTZXR1cFxuIiwgd2FuZGV2LT5uYW1lKTsKLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0JaWYgKHdhbmRldi0+c3RhdGUgIT0gV0FOX1VOQ09ORklHVVJFRCl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgc2RsYW1haW4gc2V0dXAsIGJ1c3khXG4iLAotCQkJd2FuZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsJCS8qIGFscmVhZHkgY29uZmlndXJlZCAqLwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIlxuUHJvY2Vzc2luZyBXQU4gZGV2aWNlICVzLi4uXG4iLCB3YW5kZXYtPm5hbWUpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgY291bnRlcnMgZm9yIGVhY2ggd2FuZGV2IAotCSAqIFVzZWQgZm9yIGNvdW50aW5nIG51bWJlciBvZiB0aW1lcyBuZXdfaWYgYW5kIAotICAgICAgICAgKiBkZWxfaWYgZ2V0IGNhbGxlZC4KLQkgKi8KLQl3YW5kZXYtPmRlbF9pZl9jbnQgPSAwOwotCXdhbmRldi0+bmV3X2lmX2NudCA9IDA7Ci0Jd2FuZGV2LT5jb25maWdfaWQgID0gY29uZi0+Y29uZmlnX2lkOwotCi0JaWYgKCFjb25mLT5kYXRhX3NpemUgfHwgKGNvbmYtPmRhdGEgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzOiBmaXJtd2FyZSBub3QgZm91bmQgaW4gY29uZmlndXJhdGlvbiBkYXRhIVxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENoZWNrIGZvciByZXNvdXJjZSBjb25mbGljdHMgYW5kIHNldHVwIHRoZQotCSAqIGNhcmQgZm9yIHBpZ2dpYmFja2luZyBpZiBuZWNlc3NhcnkgKi8KLQlpZighY29uZi0+UzUxNF9DUFVfbm9bMF0pIHsKLQkJaWYgKChlcnI9Y2hlY2tfczUwOF9jb25mbGljdHMoY2FyZCxjb25mLCZpcnEpKSAhPSAwKXsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9ZWxzZSB7Ci0JCWlmICgoZXJyPWNoZWNrX3M1MTRfY29uZmxpY3RzKGNhcmQsY29uZiwmaXJxKSkgIT0gMCl7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogSWYgdGhlIGN1cnJlbnQgY2FyZCBoYXMgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQKLSAgICAgICAgICogb3IgaXQncyBhIHBpZ2d5YmFjayBjYXJkLCBkbyBub3QgdHJ5IHRvIGFsbG9jYXRlCi0gICAgICAgICAqIHJlc291cmNlcy4KLQkgKi8KLQlpZiAoIWNhcmQtPndhbmRldi5waWdneWJhY2sgJiYgIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIENvbmZpZ3VyZSBoYXJkd2FyZSwgbG9hZCBmaXJtd2FyZSwgZXRjLiAqLwotCQltZW1zZXQoJmNhcmQtPmh3LCAwLCBzaXplb2Yoc2RsYWh3X3QpKTsKLQotCQkvKiBmb3IgYW4gUzUxNCBhZGFwdGVyLCBwYXNzIHRoZSBDUFUgbnVtYmVyIGFuZCB0aGUgc2xvdCBudW1iZXIgcmVhZCAqLwotCQkvKiBmcm9tICdyb3V0ZXIuY29uZicgdG8gdGhlICdzZGxhX3NldHVwKCknIGZ1bmN0aW9uIHZpYSB0aGUgJ3BvcnQnICovCi0JCS8qIHBhcmFtZXRlciAqLwotCQlpZiAoY29uZi0+UzUxNF9DUFVfbm9bMF0pewotCi0JCQljYXJkLT5ody5TNTE0X2NwdV9ub1swXSA9IGNvbmYtPlM1MTRfQ1BVX25vWzBdOwotCQkJY2FyZC0+aHcuUzUxNF9zbG90X25vID0gY29uZi0+UENJX3Nsb3Rfbm87Ci0JCQljYXJkLT5ody5hdXRvX3BjaV9jZmcgPSBjb25mLT5hdXRvX3BjaV9jZmc7Ci0KLQkJCWlmIChjYXJkLT5ody5hdXRvX3BjaV9jZmcgPT0gV0FOT1BUX1lFUyl7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgQ1BVIHRvICVjIGFuZCBTbG90IHRvIEF1dG9cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+aHcuUzUxNF9jcHVfbm9bMF0pOwotCQkJfWVsc2V7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgQ1BVIHRvICVjIGFuZCBTbG90IHRvICVpXG4iLAotCQkJCWNhcmQtPmRldm5hbWUsIGNhcmQtPmh3LlM1MTRfY3B1X25vWzBdLCBjYXJkLT5ody5TNTE0X3Nsb3Rfbm8pOwotCQkJfQotCi0JCX1lbHNlewotCQkJLyogNTA4IENhcmQgaW8gcG9ydCBhbmQgaXJxIGluaXRpYWxpemF0aW9uICovCi0JCQljYXJkLT5ody5wb3J0ID0gY29uZi0+aW9wb3J0OwotCQkJY2FyZC0+aHcuaXJxID0gKGNvbmYtPmlycSA9PSA5KSA/IDIgOiBjb25mLT5pcnE7Ci0JCX0KLQotCi0JCS8qIENvbXB1dGUgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgY2FyZCBpbiBrZXJuZWwgc3BhY2UgKi8KLQkJaWYoY29uZi0+bWFkZHIpewotCQkJY2FyZC0+aHcuZHBtYmFzZSA9IHBoeXNfdG9fdmlydChjb25mLT5tYWRkcik7Ci0JCX1lbHNlewkKLQkJCWNhcmQtPmh3LmRwbWJhc2UgPSAodm9pZCAqKWNvbmYtPm1hZGRyOwotCQl9Ci0JCQkKLQkJY2FyZC0+aHcuZHBtc2l6ZSA9IFNETEFfV0lORE9XU0laRTsKLQkJCi0JCS8qIHNldCB0aGUgYWRhcHRlciB0eXBlIGlmIHVzaW5nIGFuIFM1MTQgYWRhcHRlciAqLwotCQljYXJkLT5ody50eXBlID0gKGNvbmYtPlM1MTRfQ1BVX25vWzBdKSA/IFNETEFfUzUxNCA6IGNvbmYtPmh3X29wdFswXTsgCi0JCWNhcmQtPmh3LnBjbGsgPSBjb25mLT5od19vcHRbMV07Ci0KLQkJZXJyID0gc2RsYV9zZXR1cCgmY2FyZC0+aHcsIGNvbmYtPmRhdGEsIGNvbmYtPmRhdGFfc2l6ZSk7Ci0JCWlmIChlcnIpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhhcmR3YXJlIHNldHVwIEZhaWxlZCAlaVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSxlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JICAgICAgICBpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCkKLQkJCWlycSA9IChjb25mLT5pcnEgPT0gMikgPyA5IDogY29uZi0+aXJxOyAvKiBJUlEyIC0+IElSUTkgKi8KLQkJZWxzZQotCQkJaXJxID0gY2FyZC0+aHcuaXJxOwotCi0JCS8qIHJlcXVlc3QgYW4gaW50ZXJydXB0IHZlY3RvciAtIG5vdGUgdGhhdCBpbnRlcnJ1cHRzIG1heSBiZSBzaGFyZWQgKi8KLQkJLyogd2hlbiB1c2luZyB0aGUgUzUxNCBQQ0kgYWRhcHRlciAqLwotCQkKLSAgICAgICAJCWlmKHJlcXVlc3RfaXJxKGlycSwgc2RsYV9pc3IsIAotCQkgICAgICAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8gU0FfU0hJUlEgOiAwLCAKLQkJICAgICAgIHdhbmRldi0+bmFtZSwgY2FyZCkpewotCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2FuJ3QgcmVzZXJ2ZSBJUlEgJWQhXG4iLCB3YW5kZXYtPm5hbWUsIGlycSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDYXJkIENvbmZpZ3VyZWQgJWx1IG9yIFBpZ2d5YmFja2luZyAlaSFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsY2FyZC0+Y29uZmlndXJlZCxjYXJkLT53YW5kZXYucGlnZ3liYWNrKTsKLQl9IAotCi0KLQlpZiAoIWNhcmQtPmNvbmZpZ3VyZWQpewotCi0JCS8qIEluaXRpYWxpemUgdGhlIFNwaW4gbG9jayAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIGZvciBTTVBcbiIsd2FuZGV2LT5uYW1lKTsKLQotCQkvKiBQaWdneWJhY2sgc3BpbiBsb2NrIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsCi0JCSAqIGluIGNoZWNrX3M1MTQvczUwOF9jb25mbGljdHMoKSAqLwotCQlpZiAoIWNhcmQtPndhbmRldi5waWdneWJhY2spewotCQkJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPndhbmRldi5sb2NrKTsKLQkJfQotCQkKLQkJLyogSW50aWFsaXplIFdBTiBkZXZpY2UgZGF0YSBzcGFjZSAqLwotCQl3YW5kZXYtPmlycSAgICAgICA9IGlycTsKLQkJd2FuZGV2LT5kbWEgICAgICAgPSAwOwotCQlpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCl7IAotCQkJd2FuZGV2LT5pb3BvcnQgPSBjYXJkLT5ody5wb3J0OwotCQl9ZWxzZXsKLQkJCXdhbmRldi0+UzUxNF9jcHVfbm9bMF0gPSBjYXJkLT5ody5TNTE0X2NwdV9ub1swXTsKLQkJCXdhbmRldi0+UzUxNF9zbG90X25vID0gY2FyZC0+aHcuUzUxNF9zbG90X25vOwotCQl9Ci0JCXdhbmRldi0+bWFkZHIgICAgID0gKHVuc2lnbmVkIGxvbmcpY2FyZC0+aHcuZHBtYmFzZTsKLQkJd2FuZGV2LT5tc2l6ZSAgICAgPSBjYXJkLT5ody5kcG1zaXplOwotCQl3YW5kZXYtPmh3X29wdFswXSA9IGNhcmQtPmh3LnR5cGU7Ci0JCXdhbmRldi0+aHdfb3B0WzFdID0gY2FyZC0+aHcucGNsazsKLQkJd2FuZGV2LT5od19vcHRbMl0gPSBjYXJkLT5ody5tZW1vcnk7Ci0JCXdhbmRldi0+aHdfb3B0WzNdID0gY2FyZC0+aHcuZndpZDsKLQl9Ci0KLQkvKiBQcm90b2NvbC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLwotCXN3aXRjaCAoY2FyZC0+aHcuZndpZCkgewotCi0JY2FzZSBTRklEX1gyNV81MDI6Ci0JY2FzZSBTRklEX1gyNV81MDg6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdGFydGluZyBYLjI1IFByb3RvY29sIEluaXQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQllcnIgPSB3cHhfaW5pdChjYXJkLCBjb25mKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRklEX0ZSNTAyOgotCWNhc2UgU0ZJRF9GUjUwODoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0YXJ0aW5nIEZyYW1lIFJlbGF5IFByb3RvY29sIEluaXQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQllcnIgPSB3cGZfaW5pdChjYXJkLCBjb25mKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRklEX1BQUDUwMjoKLQljYXNlIFNGSURfUFBQNTA4OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgUFBQIFByb3RvY29sIEluaXQuXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQllcnIgPSB3cHBfaW5pdChjYXJkLCBjb25mKTsKLQkJYnJlYWs7Ci0JCQotCWNhc2UgU0ZJRF9DSERMQzUwODoKLQljYXNlIFNGSURfQ0hETEM1MTQ6Ci0JCWlmIChjb25mLT5mdDEpewkJCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgRlQxIENTVS9EU1UgQ29uZmlnIERyaXZlci5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQllcnIgPSB3cGZ0MV9pbml0KGNhcmQsIGNvbmYpOwotCQkJYnJlYWs7Ci0JCQkKLQkJfWVsc2UgaWYgKGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgTXVsdGktUG9ydCBQUFAgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZXJyID0gd3NwcHBfaW5pdChjYXJkLGNvbmYpOwotCQkJYnJlYWs7Ci0KLQkJfWVsc2V7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3RhcnRpbmcgQ0hETEMgUHJvdG9jb2wgSW5pdC5cbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJZXJyID0gd3BjX2luaXQoY2FyZCwgY29uZik7Ci0JCQlicmVhazsKLQkJfQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciwgRmlybXdhcmUgaXMgbm90IHN1cHBvcnRlZCAlWCAlWCFcbiIsCi0JCQl3YW5kZXYtPm5hbWUsY2FyZC0+aHcuZndpZCxTRklEX0NIRExDNTA4KTsKLQkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKLQl9Ci0KLQlpZiAoZXJyICE9IDApewotCQlpZiAoZXJyID09IC1FUFJPVE9OT1NVUFBPUlQpewotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCQkiJXM6IEVycm9yLCBQcm90b2NvbCBzZWxlY3RlZCBoYXMgbm90IGJlZW4gY29tcGlsZWQhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gCi0JCQkJIiVzOiAgICAgICAgUmUtY29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIHJlLWJ1aWxkIHRoZSBtb2R1bGVzIVxuIiwKLQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJCi0JCXJlbGVhc2VfaHcoY2FyZCk7Ci0JCXdhbmRldi0+c3RhdGUgPSBXQU5fVU5DT05GSUdVUkVEOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCi0gIAkvKiBSZXNlcnZlIEkvTyByZWdpb24gYW5kIHNjaGVkdWxlIGJhY2tncm91bmQgdGFzayAqLwotICAgICAgICBpZihjYXJkLT5ody50eXBlICE9IFNETEFfUzUxNCAmJiAhY2FyZC0+d2FuZGV2LnBpZ2d5YmFjaykKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjYXJkLT5ody5wb3J0LCBjYXJkLT5ody5pb19yYW5nZSwgCi0JCQkJd2FuZGV2LT5uYW1lKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicG9ydCAweCUwNHggYnVzeVxuIiwgY2FyZC0+aHcucG9ydCk7Ci0JCQlyZWxlYXNlX2h3KGNhcmQpOwotCQkJd2FuZGV2LT5zdGF0ZSA9IFdBTl9VTkNPTkZJR1VSRUQ7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCSAgfQotCi0JLyogT25seSB1c2UgdGhlIHBvbGxpbmcgcm91dGluZSBmb3IgdGhlIFgyNSBwcm90b2NvbCAqLwotCQotCWNhcmQtPndhbmRldi5jcml0aWNhbD0wOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAqIGNvbmZpZ3VyZV9zNTA4X2NhcmQKLSAqIAotICogRm9yIGEgUzUwOCBhZGFwdGVyLCBjaGVjayBmb3IgYSBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGVycm9yIGluIHRoYXQKLSAqIHdlIGFyZSBsb2FkaW5nIGFuIGFkYXB0ZXIgaW4gdGhlIHNhbWUgSU8gcG9ydCBhcyBhIHByZXZpb3VzbHkgbG9hZGVkIFM1MDgKLSAqIGNhcmQuCi0gKi8gCi0KLXN0YXRpYyBpbnQgY2hlY2tfczUwOF9jb25mbGljdHMgKHNkbGFfdCogY2FyZCx3YW5kZXZfY29uZl90KiBjb25mLCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlpbnQgaTsKLQkKLQlpZiAoY29uZi0+aW9wb3J0IDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IGNhbid0IGNvbmZpZ3VyZSB3aXRob3V0IEkvTyBwb3J0IGFkZHJlc3MhXG4iLAotCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjb25mLT5pcnEgPD0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgY29uZmlndXJlIHdpdGhvdXQgSVJRIVxuIiwKLQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoMCwmY2FyZC0+Y29uZmlndXJlZCkpCi0JCXJldHVybiAwOwotCi0KLQkvKiBDaGVjayBmb3IgYWxyZWFkeSBsb2FkZWQgY2FyZCB3aXRoIHRoZSBzYW1lIElPIHBvcnQgYW5kIElSUSAKLQkgKiBJZiBmb3VuZCwgY29weSBpdHMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBhbmQgdXNlIGl0cwotCSAqIHJlc291cmNlcyAoaS5lLiBwaWdneWJhY2tpbmcpCi0JICovCi0JCi0JZm9yIChpID0gMDsgaSA8IG5jYXJkczsgaSsrKSB7Ci0JCXNkbGFfdCAqbnh0X2NhcmQgPSAmY2FyZF9hcnJheVtpXTsKLQotCQkvKiBTa2lwIHRoZSBjdXJyZW50IGNhcmQgcHRyICovCi0JCWlmIChueHRfY2FyZCA9PSBjYXJkKQkKLQkJCWNvbnRpbnVlOwotCi0KLQkJLyogRmluZCBhIGNhcmQgdGhhdCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgd2l0aCB0aGUKLQkJICogc2FtZSBJTyBQb3J0ICovCi0JCWlmICgobnh0X2NhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTA4KSAmJgotCQkgICAgKG54dF9jYXJkLT5ody5wb3J0ID09IGNvbmYtPmlvcG9ydCkgJiYgCi0JCSAgICAobnh0X2NhcmQtPm5leHQgPT0gTlVMTCkpewotCQkJCi0JCQkvKiBXZSBmb3VuZCBhIGNhcmQgdGhlIGNhcmQgdGhhdCBoYXMgc2FtZSBjb25maWd1cmF0aW9uCi0JCQkgKiBhcyB1cy4gVGhpcyBtZWFucywgdGhhdCB3ZSBtdXN0IHNldHVwIHRoaXMgY2FyZCBpbiAKLQkJCSAqIHBpZ2dpYmFja2luZyBtb2RlLiBIb3dldmVyLCBvbmx5IENIRExDIGFuZCBNUFBQIHByb3RvY29sCi0JCQkgKiBzdXBwb3J0IHRoaXMgc2V0dXAgKi8KLQkJCi0JCQlpZiAoKGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfQ0hETEMgfHwgCi0JCQkgICAgIGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkgJiYKLQkJCSAgICAobnh0X2NhcmQtPndhbmRldi5jb25maWdfaWQgPT0gV0FOQ09ORklHX0NIRExDIHx8IAotCQkJICAgICBueHRfY2FyZC0+d2FuZGV2LmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkpeyAKLQkJCQkKLQkJCQkqaXJxID0gbnh0X2NhcmQtPmh3LmlycTsKLQkJCQltZW1jcHkoJmNhcmQtPmh3LCAmbnh0X2NhcmQtPmh3LCBzaXplb2Yoc2RsYWh3X3QpKTsKLQkJCQotCQkJCS8qIFRoZSBtYXN0ZXIgY291bGQgYWxyZWFkeSBiZSBydW5uaW5nLCB3ZSBtdXN0Ci0JCQkJICogc2V0IHRoaXMgYXMgYSBjcml0aWNhbCBhcmVhICovCi0JCQkJbG9ja19hZGFwdGVyX2lycSgmbnh0X2NhcmQtPndhbmRldi5sb2NrLCAmc21wX2ZsYWdzKTsKLQotCQkJCW54dF9jYXJkLT5uZXh0ID0gY2FyZDsKLQkJCQljYXJkLT5uZXh0ID0gbnh0X2NhcmQ7Ci0KLQkJCQljYXJkLT53YW5kZXYucGlnZ3liYWNrID0gV0FOT1BUX1lFUzsKLQotCQkJCS8qIFdlIG11c3QgaW5pdGlhbGlzZSB0aGUgcGlnZ2liYWNrIHNwaW4gbG9jayBoZXJlCi0JCQkJICogc2luY2UgaXNyIHdpbGwgdHJ5IHRvIGxvY2sgY2FyZC0+bmV4dCBpZiBpdAotCQkJCSAqIGV4aXN0cyAqLwotCQkJCXNwaW5fbG9ja19pbml0KCZjYXJkLT53YW5kZXYubG9jayk7Ci0JCQkJCi0JCQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZueHRfY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotCQkJCWJyZWFrOwotCQkJfWVsc2V7Ci0JCQkJLyogVHJ5aW5nIHRvIHJ1biBwaWdnaWJhY2tpbmcgd2l0aCBhIHdyb25nIHByb3RvY29sICovCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVSUk9SOiBSZXNvdXJjZSBidXN5LCBpb3BvcnQ6IDB4JXhcbiIKLQkJCQkJCSAiJXM6ICAgICAgICBUaGlzIHByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydFxuIgotCQkJCQkJICIlczogICAgICAgIG11bHRpLXBvcnQgb3BlcmF0aW9uIVxuIiwKLQkJCQkJCSBjYXJkLT5kZXZuYW1lLG54dF9jYXJkLT5ody5wb3J0LAotCQkJCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0KLQkvKiBNYWtlIHN1cmUgSS9PIHBvcnQgcmVnaW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHdlIGFyZSB0aGUKLQkgKiBtYXN0ZXIgZGV2aWNlLiAgSWYgd2UgYXJlIHJ1bm5pbmcgaW4gcGlnZ3liYWNraW5nIG1vZGUsIAotCSAqIHdlIHdpbGwgdXNlIHRoZSByZXNvdXJjZXMgb2YgdGhlIG1hc3RlciBjYXJkLiAqLwotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjaykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJyID0KLQkJCXJlcXVlc3RfcmVnaW9uKGNvbmYtPmlvcG9ydCwgU0RMQV9NQVhJT1JBTkdFLCAic2RsYW1haW4iKTsKLQkJcmVsZWFzZV9yZWdpb24oY29uZi0+aW9wb3J0LCBTRExBX01BWElPUkFOR0UpOwotCi0JCWlmICghcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEkvTyByZWdpb24gMHglWCAtIDB4JVggaXMgaW4gdXNlIVxuIiwKLQkJCQljYXJkLT53YW5kZXYubmFtZSwgY29uZi0+aW9wb3J0LAotCQkJCWNvbmYtPmlvcG9ydCArIFNETEFfTUFYSU9SQU5HRSAtIDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gKiBjb25maWd1cmVfczUxNF9jYXJkCi0gKiAKLSAqIEZvciBhIFM1MTQgYWRhcHRlciwgY2hlY2sgZm9yIGEgcG9zc2libGUgY29uZmlndXJhdGlvbiBlcnJvciBpbiB0aGF0Ci0gKiB3ZSBhcmUgbG9hZGluZyBhbiBhZGFwdGVyIGluIHRoZSBzYW1lIHNsb3QgYXMgYSBwcmV2aW91c2x5IGxvYWRlZCBTNTE0Ci0gKiBjYXJkLgotICovIAotCi0KLXN0YXRpYyBpbnQgY2hlY2tfczUxNF9jb25mbGljdHMoc2RsYV90KiBjYXJkLHdhbmRldl9jb25mX3QqIGNvbmYsIGludCAqaXJxKQotewotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBpOwotCQotCWlmICh0ZXN0X2JpdCgwLCZjYXJkLT5jb25maWd1cmVkKSkKLQkJcmV0dXJuIDA7Ci0KLQkKLQkvKiBDaGVjayBmb3IgYWxyZWFkeSBsb2FkZWQgY2FyZCB3aXRoIHRoZSBzYW1lIElPIHBvcnQgYW5kIElSUSAKLQkgKiBJZiBmb3VuZCwgY29weSBpdHMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBhbmQgdXNlIGl0cwotCSAqIHJlc291cmNlcyAoaS5lLiBwaWdneWJhY2tpbmcpCi0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbmNhcmRzOyBpICsrKSB7Ci0JCi0JCXNkbGFfdCogbnh0X2NhcmQgPSAmY2FyZF9hcnJheVtpXTsKLQkJaWYobnh0X2NhcmQgPT0gY2FyZCkKLQkJCWNvbnRpbnVlOwotCQkKLQkJaWYoKG54dF9jYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgJiYKLQkJICAgKG54dF9jYXJkLT5ody5TNTE0X3Nsb3Rfbm8gPT0gY29uZi0+UENJX3Nsb3Rfbm8pICYmCi0JCSAgIChueHRfY2FyZC0+aHcuUzUxNF9jcHVfbm9bMF0gPT0gY29uZi0+UzUxNF9DUFVfbm9bMF0pJiYKLQkJICAgKG54dF9jYXJkLT5uZXh0ID09IE5VTEwpKXsKLQotCi0JCQlpZiAoKGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfQ0hETEMgfHwgCi0JCQkgICAgIGNvbmYtPmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkgJiYKLQkJCSAgICAobnh0X2NhcmQtPndhbmRldi5jb25maWdfaWQgPT0gV0FOQ09ORklHX0NIRExDIHx8IAotCQkJICAgICBueHRfY2FyZC0+d2FuZGV2LmNvbmZpZ19pZCA9PSBXQU5DT05GSUdfTVBQUCkpeyAKLQkJCQkKLQkJCQkqaXJxID0gbnh0X2NhcmQtPmh3LmlycTsKLQkJCQltZW1jcHkoJmNhcmQtPmh3LCAmbnh0X2NhcmQtPmh3LCBzaXplb2Yoc2RsYWh3X3QpKTsKLQkKLQkJCQkvKiBUaGUgbWFzdGVyIGNvdWxkIGFscmVhZHkgYmUgcnVubmluZywgd2UgbXVzdAotCQkJCSAqIHNldCB0aGlzIGFzIGEgY3JpdGljYWwgYXJlYSAqLwotCQkJCWxvY2tfYWRhcHRlcl9pcnEoJm54dF9jYXJkLT53YW5kZXYubG9jaywmc21wX2ZsYWdzKTsKLQkJCQlueHRfY2FyZC0+bmV4dCA9IGNhcmQ7Ci0JCQkJY2FyZC0+bmV4dCA9IG54dF9jYXJkOwotCi0JCQkJY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayA9IFdBTk9QVF9ZRVM7Ci0KLQkJCQkvKiBXZSBtdXN0IGluaXRpYWxpc2UgdGhlIHBpZ2dpYmFjayBzcGluIGxvY2sgaGVyZQotCQkJCSAqIHNpbmNlIGlzciB3aWxsIHRyeSB0byBsb2NrIGNhcmQtPm5leHQgaWYgaXQKLQkJCQkgKiBleGlzdHMgKi8KLQkJCQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+d2FuZGV2LmxvY2spOwotCi0JCQkJdW5sb2NrX2FkYXB0ZXJfaXJxKCZueHRfY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7Ci0KLQkJCX1lbHNlewotCQkJCS8qIFRyeWluZyB0byBydW4gcGlnZ2liYWNraW5nIHdpdGggYSB3cm9uZyBwcm90b2NvbCAqLwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFUlJPUjogUmVzb3VyY2UgYnVzeTogQ1BVICVjIFBDSVNMT1QgJWlcbiIKLQkJCQkJCSAiJXM6ICAgICAgICBUaGlzIHByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydFxuIgotCQkJCQkJICIlczogICAgICAgIG11bHRpLXBvcnQgb3BlcmF0aW9uIVxuIiwKLQkJCQkJCSBjYXJkLT5kZXZuYW1lLAotCQkJCQkJIGNvbmYtPlM1MTRfQ1BVX25vWzBdLGNvbmYtPlBDSV9zbG90X25vLAotCQkJCQkJIGNhcmQtPmRldm5hbWUsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2h1dCBkb3duIFdBTiBsaW5rIGRyaXZlci4gCi0gKiBvIHNodXQgZG93biBhZGFwdGVyIGhhcmR3YXJlCi0gKiBvIHJlbGVhc2Ugc3lzdGVtIHJlc291cmNlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gZGV2aWNlIGlzIGJlaW5nIHVucmVnaXN0ZXJlZCBvcgotICogd2hlbiBpdCBoYW5kbGVzIFJPVVRFUl9ET1dOIElPQ1RMLgotICovCi1zdGF0aWMgaW50IHNodXRkb3duKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jc2RsYV90ICpjYXJkOwotCWludCBlcnI9MDsKLQkKLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSl7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkJCi0JaWYgKHdhbmRldi0+c3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCl7Ci0JCXJldHVybiAwOwotCX0KLQotCWNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0KLQlpZiAoY2FyZC0+dHR5X29wdCl7Ci0JCWlmIChjYXJkLT50dHlfb3Blbil7Ci0JCQlwcmludGsoS0VSTl9JTkZPIAotCQkJCSIlczogU2h1dGRvd24gRmFpbGVkOiBUVFkgaXMgc3RpbGwgb3BlblxuIiwKLQkJCQkgIGNhcmQtPmRldm5hbWUpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCX0KLQkKLQl3YW5kZXYtPnN0YXRlID0gV0FOX1VOQ09ORklHVVJFRDsKLQotCXNldF9iaXQoUEVSSV9DUklULCh2b2lkKikmd2FuZGV2LT5jcml0aWNhbCk7Ci0JCi0JLyogSW4gY2FzZSBvZiBwaWdnaWJhY2tpbmcsIG1ha2Ugc3VyZSB0aGF0IAotICAgICAgICAgKiB3ZSBuZXZlciB0cnkgdG8gc2h1dGRvd24gYm90aCBkZXZpY2VzIGF0IHRoZSBzYW1lCi0gICAgICAgICAqIHRpbWUsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gb25lIGFub3RoZXIgKi8KLQkKLQlpZiAoY2FyZC0+ZGlzYWJsZV9jb21tKXsKLQkJY2FyZC0+ZGlzYWJsZV9jb21tKGNhcmQpOwotCX0KLQotCS8qIFJlbGVhc2UgUmVzb3VyY2VzICovCi0JcmVsZWFzZV9odyhjYXJkKTsKLQotICAgICAgICAvKiBvbmx5IGZyZWUgdGhlIGFsbG9jYXRlZCBJL08gcmFuZ2UgaWYgbm90IGFuIFM1MTQgYWRhcHRlciAqLwotCWlmICh3YW5kZXYtPmh3X29wdFswXSAhPSBTRExBX1M1MTQgJiYgIWNhcmQtPmNvbmZpZ3VyZWQpewotICAgICAgICAgICAgICAJcmVsZWFzZV9yZWdpb24oY2FyZC0+aHcucG9ydCwgY2FyZC0+aHcuaW9fcmFuZ2UpOwotCX0KLQotCWlmICghY2FyZC0+Y29uZmlndXJlZCl7Ci0JCW1lbXNldCgmY2FyZC0+aHcsIDAsIHNpemVvZihzZGxhaHdfdCkpOwotCSAgICAgIAlpZiAoY2FyZC0+bmV4dCl7Ci0JCQltZW1zZXQoJmNhcmQtPm5leHQtPmh3LCAwLCBzaXplb2Yoc2RsYWh3X3QpKTsKLQkJfQotCX0KLQkKLQotCWNsZWFyX2JpdChQRVJJX0NSSVQsKHZvaWQqKSZ3YW5kZXYtPmNyaXRpY2FsKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX2h3IChzZGxhX3QgKmNhcmQpCi17Ci0Jc2RsYV90ICpueHRfY2FyZDsKLQotCQotCS8qIENoZWNrIGlmIG5leHQgZGV2aWNlIGV4aXN0cyAqLwotCWlmIChjYXJkLT5uZXh0KXsKLQkJbnh0X2NhcmQgPSBjYXJkLT5uZXh0OwotCQkvKiBJZiBuZXh0IGRldmljZSBpcyBkb3duIHRoZW4gcmVsZWFzZSByZXNvdXJjZXMgKi8KLQkJaWYgKG54dF9jYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCl7Ci0JCQlpZiAoY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7Ci0JCQkJLyogSWYgdGhpcyBkZXZpY2UgaXMgcGlnZ3liYWNrIHRoZW4gdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGluZm9ybWF0aW9uIG9mIHRoZSBtYXN0ZXIgZGV2aWNlIAotCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQaWdneWJhY2sgc2h1dHRpbmcgZG93blxuIixjYXJkLT5kZXZuYW1lKTsKLQkJCQlzZGxhX2Rvd24oJmNhcmQtPm5leHQtPmh3KTsKLSAgICAgICAJCQkJZnJlZV9pcnEoY2FyZC0+d2FuZGV2LmlycSwgY2FyZC0+bmV4dCk7Ci0JCQkJY2FyZC0+Y29uZmlndXJlZCA9IDA7Ci0JCQkJY2FyZC0+bmV4dC0+Y29uZmlndXJlZCA9IDA7Ci0JCQkJY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayA9IDA7Ci0JCQl9ZWxzZXsKLQkJCQkvKiBNYXN0ZXIgZGV2aWNlIHNodXR0aW5nIGRvd24gKi8KLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTWFzdGVyIHNodXR0aW5nIGRvd25cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCQkJc2RsYV9kb3duKCZjYXJkLT5odyk7Ci0JCQkJZnJlZV9pcnEoY2FyZC0+d2FuZGV2LmlycSwgY2FyZCk7Ci0JCQkJY2FyZC0+Y29uZmlndXJlZCA9IDA7Ci0JCQkJY2FyZC0+bmV4dC0+Y29uZmlndXJlZCA9IDA7Ci0JCQl9Ci0JCX1lbHNlewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERldmljZSBzdGlsbCBydW5uaW5nICVpXG4iLAotCQkJCW54dF9jYXJkLT5kZXZuYW1lLG54dF9jYXJkLT53YW5kZXYuc3RhdGUpOwotCi0JCQljYXJkLT5jb25maWd1cmVkID0gMTsKLQkJfQotCX1lbHNlewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTWFzdGVyIHNodXR0aW5nIGRvd25cbiIsY2FyZC0+ZGV2bmFtZSk7Ci0JCXNkbGFfZG93bigmY2FyZC0+aHcpOwotICAgICAgIAkJZnJlZV9pcnEoY2FyZC0+d2FuZGV2LmlycSwgY2FyZCk7Ci0JCWNhcmQtPmNvbmZpZ3VyZWQgPSAwOwotCX0KLQlyZXR1cm47Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEcml2ZXIgSS9PIGNvbnRyb2wuIAotICogbyB2ZXJpZnkgYXJndW1lbnRzCi0gKiBvIHBlcmZvcm0gcmVxdWVzdGVkIGFjdGlvbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcm91dGVyIGhhbmRsZXMgb25lIG9mIHRoZSByZXNlcnZlZCB1c2VyCi0gKiBJT0NUTHMuICBOb3RlIHRoYXQgJ2FyZycgc3RpbCBwb2ludHMgdG8gdXNlciBhZGRyZXNzIHNwYWNlLgotICovCi1zdGF0aWMgaW50IGlvY3RsKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc2RsYV90KiBjYXJkOwotCWludCBlcnI7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKCh3YW5kZXYgPT0gTlVMTCkgfHwgKHdhbmRldi0+cHJpdmF0ZSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHdhbmRldi0+c3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljYXJkID0gd2FuZGV2LT5wcml2YXRlOwotCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlkaXNhYmxlX2lycShjYXJkLT5ody5pcnEpOwotCX0KLQotCWlmICh0ZXN0X2JpdChTRU5EX0NSSVQsICh2b2lkKikmd2FuZGV2LT5jcml0aWNhbCkpIHsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBXQU5QSVBFX0RVTVA6Ci0JCWVyciA9IGlvY3RsX2R1bXAod2FuZGV2LT5wcml2YXRlLCAodm9pZCopYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFdBTlBJUEVfRVhFQzoKLQkJZXJyID0gaW9jdGxfZXhlYyh3YW5kZXYtPnByaXZhdGUsICh2b2lkKilhcmcsIGNtZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotIAotCXJldHVybiBlcnI7Ci19Ci0KLS8qKioqKiogRHJpdmVyIElPQ1RMIEhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIER1bXAgYWRhcHRlciBtZW1vcnkgdG8gdXNlciBidWZmZXIuCi0gKiBvIHZlcmlmeSByZXF1ZXN0IHN0cnVjdHVyZQotICogbyBjb3B5IHJlcXVlc3Qgc3RydWN0dXJlIHRvIGtlcm5lbCBkYXRhIHNwYWNlCi0gKiBvIHZlcmlmeSBsZW5ndGgvb2Zmc2V0Ci0gKiBvIHZlcmlmeSB1c2VyIGJ1ZmZlcgotICogbyBjb3B5IGFkYXB0ZXIgbWVtb3J5IGltYWdlIHRvIHVzZXIgYnVmZmVyCi0gKgotICogTm90ZTogd2hlbiBkdW1waW5nIG1lbW9yeSwgdGhpcyByb3V0aW5lIHN3aXRjaGVzIGN1cmVudCBkdWFsLXBvcnQgbWVtb3J5Ci0gKgkgdmVjdG9yLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gYXZvaWQgcmFjaW5nIGNvbmRpdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfZHVtcCAoc2RsYV90KiBjYXJkLCBzZGxhX2R1bXBfdCogdV9kdW1wKQotewotCXNkbGFfZHVtcF90IGR1bXA7Ci0JdW5zaWduZWQgd2luc2l6ZTsKLQl1bnNpZ25lZCBsb25nIG9sZHZlYzsJLyogRFBNIHdpbmRvdyB2ZWN0b3IgKi8KLQl1bnNpZ25lZCBsb25nIHNtcF9mbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCWlmKGNvcHlfZnJvbV91c2VyKCh2b2lkKikmZHVtcCwgKHZvaWQqKXVfZHVtcCwgc2l6ZW9mKHNkbGFfZHVtcF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCQkKLQlpZiAoKGR1bXAubWFnaWMgIT0gV0FOUElQRV9NQUdJQykgfHwKLQkgICAgKGR1bXAub2Zmc2V0ICsgZHVtcC5sZW5ndGggPiBjYXJkLT5ody5tZW1vcnkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkKLQl3aW5zaXplID0gY2FyZC0+aHcuZHBtc2l6ZTsKLQotCWlmKGNhcmQtPmh3LnR5cGUgIT0gU0RMQV9TNTE0KSB7Ci0KLQkJbG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssICZzbXBfZmxhZ3MpOwotCQkKLSAgICAgICAgICAgICAgICBvbGR2ZWMgPSBjYXJkLT5ody52ZWN0b3I7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGR1bXAubGVuZ3RoKSB7Ci0JCQkvKiBjdXJyZW50IG9mZnNldCAqLwkJCQkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IGR1bXAub2Zmc2V0ICUgd2luc2l6ZTsKLQkJCS8qIGN1cnJlbnQgdmVjdG9yICovCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZlYyA9IGR1bXAub2Zmc2V0IC0gcG9zOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuID0gKGR1bXAubGVuZ3RoID4gKHdpbnNpemUgLSBwb3MpKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAJKHdpbnNpemUgLSBwb3MpIDogZHVtcC5sZW5ndGg7Ci0JCQkvKiByZWxvY2F0ZSB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZGxhX21hcG1lbSgmY2FyZC0+aHcsIHZlYykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAtRUlPOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCh2b2lkICopZHVtcC5wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKWNhcmQtPmh3LmRwbWJhc2UgKyBwb3MsIGxlbikpeyAKLQkJCQkKLQkJCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCAmc21wX2ZsYWdzKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcC5sZW5ndGggICAgIC09IGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAub2Zmc2V0ICAgICArPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wLnB0ciAgICAgICAgID0gKGNoYXIqKWR1bXAucHRyICsgbGVuOwotICAgICAgICAgICAgICAgIH0KLQkJCi0gICAgICAgICAgICAgICAgc2RsYV9tYXBtZW0oJmNhcmQtPmh3LCBvbGR2ZWMpOy8qIHJlc3RvcmUgRFBNIHdpbmRvdyBwb3NpdGlvbiAqLwotCQl1bmxvY2tfYWRhcHRlcl9pcnEoJmNhcmQtPndhbmRldi5sb2NrLCAmc21wX2ZsYWdzKTsKLSAgICAgICAgCi0JfWVsc2UgewotCi0gICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoKHZvaWQgKilkdW1wLnB0ciwKLQkJCSAgICAgICAodTggKiljYXJkLT5ody5kcG1iYXNlICsgZHVtcC5vZmZzZXQsIGR1bXAubGVuZ3RoKSl7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRXhlY3V0ZSBhZGFwdGVyIGZpcm13YXJlIGNvbW1hbmQuCi0gKiBvIHZlcmlmeSByZXF1ZXN0IHN0cnVjdHVyZQotICogbyBjb3B5IHJlcXVlc3Qgc3RydWN0dXJlIHRvIGtlcm5lbCBkYXRhIHNwYWNlCi0gKiBvIGNhbGwgcHJvdG9jb2wtc3BlY2lmaWMgJ2V4ZWMnIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfZXhlYyAoc2RsYV90KiBjYXJkLCBzZGxhX2V4ZWNfdCogdV9leGVjLCBpbnQgY21kKQotewotCXNkbGFfZXhlY190IGV4ZWM7Ci0JaW50IGVycj0wOwotCi0JaWYgKGNhcmQtPmV4ZWMgPT0gTlVMTCAmJiBjbWQgPT0gV0FOUElQRV9FWEVDKXsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYoY29weV9mcm9tX3VzZXIoKHZvaWQqKSZleGVjLCAodm9pZCopdV9leGVjLCBzaXplb2Yoc2RsYV9leGVjX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoKGV4ZWMubWFnaWMgIT0gV0FOUElQRV9NQUdJQykgfHwgKGV4ZWMuY21kID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgV0FOUElQRV9FWEVDOgkKLQkJCWVyciA9IGNhcmQtPmV4ZWMoY2FyZCwgZXhlYy5jbWQsIGV4ZWMuZGF0YSk7Ci0JCQlicmVhazsKLQl9CQotCXJldHVybiBlcnI7Ci19Ci0KLS8qKioqKioqIE1pc2NlbGxhbmVvdXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNETEEgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZS4KLSAqIG8gYWNrbm93bGVkZ2UgU0RMQSBoYXJkd2FyZSBpbnRlcnJ1cHQuCi0gKiBvIGNhbGwgcHJvdG9jb2wtc3BlY2lmaWMgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSwgaWYgYW55LgotICovCi1TVEFUSUMgaXJxcmV0dXJuX3Qgc2RsYV9pc3IgKGludCBpcnEsIHZvaWQqIGRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0jZGVmaW5lCWNhcmQJKChzZGxhX3QqKWRldl9pZCkKLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSB7CS8qIGhhbmRsZSBpbnRlcnJydXB0IG9uIFM1MTQgKi8KLSAgICAgICAgICAgICAgICB1MzIgaW50X3N0YXR1czsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIENQVV9ubyA9IGNhcmQtPmh3LlM1MTRfY3B1X25vWzBdOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2FyZF9mb3VuZF9mb3JfSVJROwotCQl1OCBJUlFfY291bnQgPSAwOwotCi0JCWZvcig7OykgewotCi0JCQlyZWFkX1M1MTRfaW50X3N0YXQoJmNhcmQtPmh3LCAmaW50X3N0YXR1cyk7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBpbnRlcnJ1cHQgaXMgZm9yIHRoaXMgZGV2aWNlICovCi0gCQkJaWYoISgodW5zaWduZWQgY2hhcilpbnRfc3RhdHVzICYKLQkJCQkoSVJRX0NQVV9BIHwgSVJRX0NQVV9CKSkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotCi0JCQkvKiBpZiB0aGUgSVJRIGlzIGZvciBib3RoIENQVXMgb24gdGhlIHNhbWUgYWRhcHRlciwgKi8KLQkJCS8qIHRoZW4gYWx0ZXIgdGhlIGludGVycnVwdCBzdGF0dXMgc28gYXMgdG8gaGFuZGxlICovCi0JCQkvKiBvbmUgQ1BVIGF0IGEgdGltZSAqLwotCQkJaWYoKCh1bnNpZ25lZCBjaGFyKWludF9zdGF0dXMgJiAoSVJRX0NQVV9BIHwgSVJRX0NQVV9CKSkKLQkJCQk9PSAoSVJRX0NQVV9BIHwgSVJRX0NQVV9CKSkgewotCQkJCWludF9zdGF0dXMgJj0gKENQVV9ubyA9PSBTNTE0X0NQVV9BKSA/Ci0JCQkJCX5JUlFfQ1BVX0IgOiB+SVJRX0NQVV9BOwotCQkJfQotIAotCQkJY2FyZF9mb3VuZF9mb3JfSVJRID0gMDsKLQotCSAgICAgICAgICAgICAJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIENQVSBudW1iZXIgZm9yIHRoaXMgZGV2aWNlICovCi0JCQkvKiBjb3JyZXNwb25kcyB0byB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWFkICovCi0gICAgICAgICAgICAgICAgCXN3aXRjaCAoQ1BVX25vKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJY2FzZSBTNTE0X0NQVV9BOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaWYoKHVuc2lnbmVkIGNoYXIpaW50X3N0YXR1cyAmCi0JCQkJCQlJUlFfQ1BVX0EpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZF9mb3VuZF9mb3JfSVJRID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFM1MTRfQ1BVX0I6Ci0gICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBpZigodW5zaWduZWQgY2hhcilpbnRfc3RhdHVzICYKLQkJCQkJCUlSUV9DUFVfQikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkX2ZvdW5kX2Zvcl9JUlEgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAJfQotCi0JCQkvKiBleGl0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZm9yIGFub3RoZXIgQ1BVIG9uIHRoZSAqLwotCQkJLyogc2FtZSBJUlEgKi8KLQkJCWlmKCFjYXJkX2ZvdW5kX2Zvcl9JUlEpCi0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gICAgICAgCSAJCWlmICghY2FyZCB8fCAKLQkJCSAgIChjYXJkLT53YW5kZXYuc3RhdGUgPT0gV0FOX1VOQ09ORklHVVJFRCAmJiAhY2FyZC0+Y29uZmlndXJlZCkpewotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkiUmVjZWl2ZWQgSVJRICVkIGZvciBDUFUgIyVjXG4iLAotCQkJCQkJaXJxLCBDUFVfbm8pOwotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkiSVJRIGZvciB1bmNvbmZpZ3VyZWQgYWRhcHRlclxuIik7Ci0JCQkJCVM1MTRfaW50YWNrKCZjYXJkLT5odywgaW50X3N0YXR1cyk7Ci0JCQkJCXJldHVybiBJUlFfSEFORExFRDsKLSAgICAgICAJCQl9Ci0KLQkgICAgICAgIAlpZiAoY2FyZC0+aW5faXNyKSB7Ci0gICAgICAgIAkgICAgICAgCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSIlczogaW50ZXJydXB0IHJlLWVudHJhbmN5IG9uIElSUSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmlycSk7Ci0JCQkJUzUxNF9pbnRhY2soJmNhcmQtPmh3LCBpbnRfc3RhdHVzKTsKLSAJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotICAgICAgIAkJCX0KLQotCQkJc3Bpbl9sb2NrKCZjYXJkLT53YW5kZXYubG9jayk7Ci0JCQlpZiAoY2FyZC0+bmV4dCl7Ci0JCQkJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCQl9Ci0JCQkJCi0JICAgICAgICAgICAgICAgCVM1MTRfaW50YWNrKCZjYXJkLT5odywgaW50X3N0YXR1cyk7Ci0gICAgICAgCQkJaWYgKGNhcmQtPmlzcikKLQkJCQljYXJkLT5pc3IoY2FyZCk7Ci0KLQkJCWlmIChjYXJkLT5uZXh0KXsKLQkJCQlzcGluX3VubG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQotCQkJLyogaGFuZGxlIGEgbWF4aW11bSBvZiB0d28gaW50ZXJydXB0cyAob25lIGZvciBlYWNoICovCi0JCQkvKiBDUFUgb24gdGhlIGFkYXB0ZXIpIGJlZm9yZSByZXR1cm5pbmcgKi8gIAotCQkJaWYoKCsrIElSUV9jb3VudCkgPT0gMikKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQl9Ci0KLQllbHNlIHsJCQkvKiBoYW5kbGUgaW50ZXJydXB0IG9uIFM1MDggYWRhcHRlciAqLwotCi0JCWlmICghY2FyZCB8fCAoKGNhcmQtPndhbmRldi5zdGF0ZSA9PSBXQU5fVU5DT05GSUdVUkVEKSAmJiAhY2FyZC0+Y29uZmlndXJlZCkpCi0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQkJaWYgKGNhcmQtPmluX2lzcikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSIlczogaW50ZXJydXB0IHJlLWVudHJhbmN5IG9uIElSUSAlZCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmlycSk7Ci0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQotCQlzcGluX2xvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQkJaWYgKGNhcmQtPm5leHQpewotCQkJc3Bpbl9sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCX0KLQkKLQkJc2RsYV9pbnRhY2soJmNhcmQtPmh3KTsKLQkJaWYgKGNhcmQtPmlzcikKLQkJCWNhcmQtPmlzcihjYXJkKTsKLQkJCi0JCWlmIChjYXJkLT5uZXh0KXsKLQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5uZXh0LT53YW5kZXYubG9jayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmNhcmQtPndhbmRldi5sb2NrKTsKLQotCX0KLSAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotI3VuZGVmCWNhcmQKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBwcm90b2NvbC1zcGVjaWZpYyBtb2R1bGVzIHdoZW4gbmV0d29yawotICogaW50ZXJmYWNlIGlzIGJlaW5nIG9wZW4uICBUaGUgb25seSByZWFzb24gd2UgbmVlZCB0aGlzLCBpcyBiZWNhdXNlIHdlCi0gKiBoYXZlIHRvIGNhbGwgTU9EX0lOQ19VU0VfQ09VTlQsIGJ1dCBjYW5ub3QgaW5jbHVkZSAnbW9kdWxlLmgnIHdoZXJlIGl0J3MKLSAqIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UgaW50byB0aGUgc2FtZSBrZXJuZWwgbW9kdWxlLgotICovCi12b2lkIHdhbnBpcGVfb3BlbiAoc2RsYV90KiBjYXJkKQotewotCSsrY2FyZC0+b3Blbl9jbnQ7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgbW9kdWxlcyB3aGVuIG5ldHdvcmsKLSAqIGludGVyZmFjZSBpcyBiZWluZyBjbG9zZWQuICBUaGUgb25seSByZWFzb24gd2UgbmVlZCB0aGlzLCBpcyBiZWNhdXNlIHdlCi0gKiBoYXZlIHRvIGNhbGwgTU9EX0RFQ19VU0VfQ09VTlQsIGJ1dCBjYW5ub3QgaW5jbHVkZSAnbW9kdWxlLmgnIHdoZXJlIGl0J3MKLSAqIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UgaW50byB0aGUgc2FtZSBrZXJuZWwgbW9kdWxlLgotICovCi12b2lkIHdhbnBpcGVfY2xvc2UgKHNkbGFfdCogY2FyZCkKLXsKLQktLWNhcmQtPm9wZW5fY250OwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBXQU4gZGV2aWNlIHN0YXRlLgotICovCi12b2lkIHdhbnBpcGVfc2V0X3N0YXRlIChzZGxhX3QqIGNhcmQsIGludCBzdGF0ZSkKLXsKLQlpZiAoY2FyZC0+d2FuZGV2LnN0YXRlICE9IHN0YXRlKSB7Ci0JCXN3aXRjaCAoc3RhdGUpIHsKLQkJY2FzZSBXQU5fQ09OTkVDVEVEOgotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBsaW5rIGNvbm5lY3RlZCFcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTl9DT05ORUNUSU5HOgotCQkJcHJpbnRrIChLRVJOX0lORk8gIiVzOiBsaW5rIGNvbm5lY3RpbmcuLi5cbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IGxpbmsgZGlzY29ubmVjdGVkIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhcmQtPndhbmRldi5zdGF0ZSA9IHN0YXRlOwotCX0KLQljYXJkLT5zdGF0ZV90aWNrID0gamlmZmllczsKLX0KLQotc2RsYV90ICogd2FucGlwZV9maW5kX2NhcmQgKGNoYXIgKm5hbWUpCi17Ci0JaW50IGNudDsKLQlmb3IgKGNudCA9IDA7IGNudCA8IG5jYXJkczsgKysgY250KSB7Ci0JCXNkbGFfdCogY2FyZCA9ICZjYXJkX2FycmF5W2NudF07Ci0JCWlmICghc3RyY21wKGNhcmQtPmRldm5hbWUsbmFtZSkpCi0JCQlyZXR1cm4gY2FyZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXNkbGFfdCAqIHdhbnBpcGVfZmluZF9jYXJkX251bSAoaW50IG51bSkKLXsKLQlpZiAobnVtIDwgMSB8fCBudW0gPiBuY2FyZHMpCi0JCXJldHVybiBOVUxMOwkKLQludW0tLTsKLQlyZXR1cm4gJmNhcmRfYXJyYXlbbnVtXTsKLX0KLQotLyoKLSAqIEB3b3JrX3BvaW50ZXI6CXdvcmtfc3RydWN0IHRvIGJlIGRvbmU7Ci0gKiAJCQlzaG91bGQgYWxyZWFkeSBoYXZlIFBSRVBBUkVfV09SSygpIG9yCi0gKiAJCQkgIElOSVRfV09SSygpIGRvbmUgb24gaXQgYnkgY2FsbGVyOwotICovCi12b2lkIHdhbnBpcGVfcXVldWVfd29yayAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3BvaW50ZXIpCi17Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMSwgKHZvaWQqKSZ3YW5waXBlX2JoX2NyaXRpY2FsKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1JJVElDQUwgSU4gUVVFVUlORyBXT1JLXG4iKTsKLQotCXF1ZXVlX3dvcmsod2FucGlwZV93cSwgd29ya19wb2ludGVyKTsKLQljbGVhcl9iaXQoMSwodm9pZCopJndhbnBpcGVfYmhfY3JpdGljYWwpOwotfQotCi12b2lkIHdha2V1cF9za19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXdhbnBpcGVfY29tbW9uX3QgKmNoYW4gPSBkZXYtPnByaXY7Ci0KLQlpZiAodGVzdF9iaXQoMCwmY2hhbi0+Y29tbW9uX2NyaXRpY2FsKSkKLQkJcmV0dXJuOwotCQotCWlmIChjaGFuLT5zayAmJiBjaGFuLT50eF90aW1lcil7Ci0JCWNoYW4tPnR4X3RpbWVyLT5leHBpcmVzPWppZmZpZXMrMTsKLQkJYWRkX3RpbWVyKGNoYW4tPnR4X3RpbWVyKTsKLQl9Ci19Ci0KLWludCBjaGFuZ2VfZGV2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGZsYWdzKQotewotCXN0cnVjdCBpZnJlcSBpZl9pbmZvOwotCW1tX3NlZ21lbnRfdCBmcyA9IGdldF9mcygpOwotCWludCBlcnI7Ci0KLQltZW1zZXQoJmlmX2luZm8sIDAsIHNpemVvZihpZl9pbmZvKSk7Ci0Jc3RyY3B5KGlmX2luZm8uaWZyX25hbWUsIGRldi0+bmFtZSk7Ci0JaWZfaW5mby5pZnJfZmxhZ3MgPSBmbGFnczsJCi0KLQlzZXRfZnMoZ2V0X2RzKCkpOyAgICAgLyogZ2V0IHVzZXIgc3BhY2UgYmxvY2sgKi8gCi0JZXJyID0gZGV2aW5ldF9pb2N0bChTSU9DU0lGRkxBR1MsICZpZl9pbmZvKTsKLQlzZXRfZnMoZnMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotdW5zaWduZWQgbG9uZyBnZXRfaXBfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb3B0aW9uKQotewotCQotCXN0cnVjdCBpbl9pZmFkZHIgKmlmYWRkcjsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoKGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KSkgPT0gTlVMTCl7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICgoaWZhZGRyID0gaW5fZGV2LT5pZmFfbGlzdCk9PSBOVUxMICl7Ci0JCWdvdG8gb3V0OwotCX0KLQkKLQlzd2l0Y2ggKG9wdGlvbil7Ci0KLQljYXNlIFdBTl9MT0NBTF9JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX2xvY2FsOwotCQlicmVhazsKLQkKLQljYXNlIFdBTl9QT0lOVE9QT0lOVF9JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX2FkZHJlc3M7Ci0JCWJyZWFrOwkKLQotCWNhc2UgV0FOX05FVE1BU0tfSVA6Ci0JCWFkZHIgPSBpZmFkZHItPmlmYV9tYXNrOwotCQlicmVhazsKLQotCWNhc2UgV0FOX0JST0FEQ0FTVF9JUDoKLQkJYWRkciA9IGlmYWRkci0+aWZhX2Jyb2FkY2FzdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIGFkZHI7Ci19CQotCi12b2lkIGFkZF9nYXRld2F5KHNkbGFfdCAqY2FyZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHJ0ZW50cnkgcm91dGU7Ci0JaW50IHJlczsKLQotCW1lbXNldCgoY2hhciopJnJvdXRlLDAsc2l6ZW9mKHN0cnVjdCBydGVudHJ5KSk7Ci0KLQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKQotCQkmKHJvdXRlLnJ0X2RzdCkpLT5zaW5fYWRkci5zX2FkZHIgPSAwOwotCSgoc3RydWN0IHNvY2thZGRyX2luICopCi0JCSYocm91dGUucnRfZHN0KSktPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCi0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKLQkJJihyb3V0ZS5ydF9nZW5tYXNrKSktPnNpbl9hZGRyLnNfYWRkciA9IDA7Ci0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgCi0JCSYocm91dGUucnRfZ2VubWFzaykpIC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLQotCXJvdXRlLnJ0X2ZsYWdzID0gMDsgIAotCXJvdXRlLnJ0X2RldiA9IGRldi0+bmFtZTsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQlyZXMgPSBpcF9ydF9pb2N0bChTSU9DQUREUlQsJnJvdXRlKTsKLQlzZXRfZnMob2xkZnMpOwotCi0JaWYgKHJlcyA9PSAwKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEdhdGV3YXkgYWRkZWQgZm9yICVzXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCX0KLQotCXJldHVybjsKLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKioqKioqIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vd2FucGlwZV9tdWx0cHBwLmMgYi9kcml2ZXJzL25ldC93YW4vd2FucGlwZV9tdWx0cHBwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMmExMTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnBpcGVfbXVsdHBwcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogd2FucGlwZV9tdWx0cHBwLmMgTXVsdGktUG9ydCBQUFAgZHJpdmVyIG1vZHVsZS4KLSoKLSogQXV0aG9yczogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRGVjIDE1IDIwMDAgICBVcGRhdGVkIGZvciAyLjQuWCBrZXJuZWwKLSogTm92IDE1IDIwMDAgICBGaXhlZCB0aGUgU3luY1BQUCBzdXBwb3J0IGZvciBrZXJuZWxzIDIuMi4xNiBhbmQgaGlnaGVyLgotKiAgIAkJVGhlIHBwcHN0cnVjdCBoYXMgY2hhbmdlZC4KLSogSnVsIDEzIDIwMDAJVXNpbmcgdGhlIGtlcm5lbCBTeW5jcHBwIG1vZHVsZSBvbiB0b3Agb2YgUkFXIFdhbnBpcGUgQ0hETEMKLSogIAkJbW9kdWxlLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgkvKiBXQU5QSVBFIGNvbW1vbiB1c2VyIEFQSSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfKiBkZWZpbmVzICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgbWFjcm8gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBzb2NrYWRkcl9pbiAqLwotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4JCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2NoZGxjLmg+CQkvKiBDSERMQyBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9zZGxhX2FzeS5oPiAgICAgICAgICAgCS8qIENIRExDIChhc3luYykgQVBJIGRlZmluaXRpb25zICovCi0KLSNpbmNsdWRlIDxsaW51eC9pZl93YW5waXBlX2NvbW1vbi5oPiAgICAvKiBTb2NrZXQgRHJpdmVyIGNvbW1vbiBhcmVhICovCi0jaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZS5oPgkJCi0KLQotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSA8bmV0L3N5bmNwcHAuaD4KLQotCi0vKioqKioqIERlZmluZXMgJiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmCV9ERUJVR18KLSNkZWZpbmUJU1RBVElDCi0jZWxzZQotI2RlZmluZQlTVEFUSUMJCXN0YXRpYwotI2VuZGlmCi0KLS8qIHJlYXNvbnMgZm9yIGVuYWJsaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQgb24gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgVE1SX0lOVF9FTkFCTEVEX1VEUCAgIAkweDAxCi0jZGVmaW5lIFRNUl9JTlRfRU5BQkxFRF9VUERBVEUJMHgwMgotI2RlZmluZSBUTVJfSU5UX0VOQUJMRURfQ09ORklHICAweDA0Ci0gCi0jZGVmaW5lCUNIRExDX0RGTFRfREFUQV9MRU4JMTUwMAkJLyogZGVmYXVsdCBNVFUgKi8KLSNkZWZpbmUgQ0hETENfSERSX0xFTgkJMQotCi0jZGVmaW5lIElGRl9QT0lOVFRPUE9JTlQgMHgxMAotCi0jZGVmaW5lIENIRExDX0FQSSAweDAxCi0KLSNkZWZpbmUgUE9SVCh4KSAgICh4ID09IDAgPyAiUFJJTUFSWSIgOiAiU0VDT05EQVJZIiApCi0jZGVmaW5lIE1BWF9CSF9CVUZGCTEwCi0KLSNkZWZpbmUgQ1JDX0xFTkdUSCAJMiAKLSNkZWZpbmUgUFBQX0hFQURFUl9MRU4gCTQKLSAKLS8qKioqKipEYXRhIFN0cnVjdHVyZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGluIHRoZSBwcml2YXRlIGRhdGEgYXJlYSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KLSAqIFRoZSBjYXJkIHN0cnVjdHVyZSB1c2VkIHRvIG9jY3VweSB0aGUgcHJpdmF0ZSBhcmVhIGJ1dCBub3cgdGhlIGZvbGxvd2luZyAKLSAqIHN0cnVjdHVyZSB3aWxsIGluY29ycG9yYXRlIHRoZSBjYXJkIHN0cnVjdHVyZSBhbG9uZyB3aXRoIENIRExDIHNwZWNpZmljIGRhdGEKLSAqLwotCi10eXBlZGVmIHN0cnVjdCBjaGRsY19wcml2YXRlX2FyZWEKLXsKLQl2b2lkICppZl9wdHI7CQkJCS8qIEdlbmVyYWwgUG9pbnRlciB1c2VkIGJ5IFNQUFAgKi8KLQl3YW5waXBlX2NvbW1vbl90IGNvbW1vbjsKLQlzZGxhX3QJCSpjYXJkOwotCWludCAJCVRyYWNpbmdFbmFibGVkOwkJLyogRm9yIGVuYWJsaW5nIFRyYWNpbmcgKi8KLQl1bnNpZ25lZCBsb25nIAljdXJyX3RyYWNlX2FkZHI7CS8qIFVzZWQgZm9yIFRyYWNpbmcgKi8KLQl1bnNpZ25lZCBsb25nIAlzdGFydF90cmFjZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgCWVuZF90cmFjZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgCWJhc2VfYWRkcl90cmFjZV9idWZmZXI7Ci0JdW5zaWduZWQgbG9uZyAJZW5kX2FkZHJfdHJhY2VfYnVmZmVyOwotCXVuc2lnbmVkIHNob3J0IAludW1iZXJfdHJhY2VfZWxlbWVudHM7Ci0JdW5zaWduZWQgIAlhdmFpbGFibGVfYnVmZmVyX3NwYWNlOwotCXVuc2lnbmVkIGxvbmcgCXJvdXRlcl9zdGFydF90aW1lOwotCXVuc2lnbmVkIGNoYXIgCXJvdXRlX3N0YXR1czsKLQl1bnNpZ25lZCBjaGFyIAlyb3V0ZV9yZW1vdmVkOwotCXVuc2lnbmVkIGxvbmcgCXRpY2tfY291bnRlcjsJCS8qIEZvciA1cyB0aW1lb3V0IGNvdW50ZXIgKi8KLQl1bnNpZ25lZCBsb25nIAlyb3V0ZXJfdXBfdGltZTsKLSAgICAgICAgdTMyICAgICAgICAgICAgIElQX2FkZHJlc3M7CQkvKiBJUCBhZGRyZXNzaW5nICovCi0gICAgICAgIHUzMiAgICAgICAgICAgICBJUF9uZXRtYXNrOwotCXVuc2lnbmVkIGNoYXIgIG1jOwkJCS8qIE11bGl0Y2FzdCBzdXBwb3J0IG9uL29mZiAqLwotCXVuc2lnbmVkIHNob3J0IHVkcF9wa3RfbGd0aDsJCS8qIHVkcCBwYWNrZXQgcHJvY2Vzc2luZyAqLwotCWNoYXIgdWRwX3BrdF9zcmM7Ci0JY2hhciB1ZHBfcGt0X2RhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXTsKLQl1bnNpZ25lZCBzaG9ydCB0aW1lcl9pbnRfZW5hYmxlZDsKLQljaGFyIHVwZGF0ZV9jb21tc19zdGF0czsJCS8qIHVwZGF0aW5nIGNvbW1zIHN0YXRzICovCi0KLQkvL0ZJWE1FOiBhZGQgZHJpdmVyIHN0YXRzIGFzIHBlciBmcmFtZSByZWxheSEKLQotfSBjaGRsY19wcml2YXRlX2FyZWFfdDsKLQotLyogUm91dGUgU3RhdHVzIG9wdGlvbnMgKi8KLSNkZWZpbmUgTk9fUk9VVEUJMHgwMAotI2RlZmluZSBBRERfUk9VVEUJMHgwMQotI2RlZmluZSBST1VURV9BRERFRAkweDAyCi0jZGVmaW5lIFJFTU9WRV9ST1VURQkweDAzCi0KLQotLyogdmFyaWFibGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIEZUMSBtb25pdG9yIHN0YXR1cyAqLwotc3RhdGljIGludCByQ291bnQgPSAwOwotCi0vKiB2YXJpYWJsZSBmb3IgdHJhY2tpbmcgaG93IG1hbnkgaW50ZXJmYWNlcyB0byBvcGVuIGZvciBXQU5QSVBFIG9uIHRoZQotICAgdHdvIHBvcnRzICovCi0KLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KLS8qKioqKiogRnVuY3Rpb24gUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogV0FOIGxpbmsgZHJpdmVyIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlIGNhbGxlZCBieSB0aGUgV0FOIHJvdXRlciBtb2R1bGUuICovCi1zdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2KTsKLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCSAgd2FuaWZfY29uZl90KiBjb25mKTsKLXN0YXRpYyBpbnQgZGVsX2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotCi0vKiBOZXR3b3JrIGRldmljZSBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgaWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLXN0YXRpYyBpbnQgaWZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIGlmX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotCi1zdGF0aWMgdm9pZCBpZl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBDSERMQyBGaXJtd2FyZSBpbnRlcmZhY2UgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGNoZGxjX2NvbmZpZ3VyZSAJKHNkbGFfdCogY2FyZCwgdm9pZCogZGF0YSk7Ci1zdGF0aWMgaW50IGNoZGxjX2NvbW1fZW5hYmxlIAkoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9kaXNhYmxlIAkoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyBpbnQgY2hkbGNfcmVhZF92ZXJzaW9uIAkoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpOwotc3RhdGljIGludCBjaGRsY19zZXRfaW50cl9tb2RlIAkoc2RsYV90KiBjYXJkLCB1bnNpZ25lZCBtb2RlKTsKLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pOwotc3RhdGljIGludCBjaGRsY19yZWFkX2NvbW1fZXJyX3N0YXRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjaGRsY19yZWFkX29wX3N0YXRzIChzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBjb25maWdfY2hkbGMgKHNkbGFfdCAqY2FyZCk7Ci0KLQotLyogTWlzY2VsbGFuZW91cyBDSERMQyBGdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgc2V0X2NoZGxjX2NvbmZpZyAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIGluaXRfY2hkbGNfdHhfcnhfYnVmZihzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBjaGRsY19lcnJvciAoc2RsYV90ICpjYXJkLCBpbnQgZXJyLCBDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIpOwotc3RhdGljIGludCBwcm9jZXNzX2NoZGxjX2V4Y2VwdGlvbihzZGxhX3QgKmNhcmQpOwotc3RhdGljIGludCBwcm9jZXNzX2dsb2JhbF9leGNlcHRpb24oc2RsYV90ICpjYXJkKTsKLXN0YXRpYyBpbnQgdXBkYXRlX2NvbW1zX3N0YXRzKHNkbGFfdCogY2FyZCwKLSAgICAgICAgY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSk7Ci1zdGF0aWMgdm9pZCBwb3J0X3NldF9zdGF0ZSAoc2RsYV90ICpjYXJkLCBpbnQpOwotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIHdzcHBwX2lzciAoc2RsYV90KiBjYXJkKTsKLXN0YXRpYyB2b2lkIHJ4X2ludHIgKHNkbGFfdCogY2FyZCk7Ci1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyKHNkbGFfdCAqKTsKLQotLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgcmVwbHlfdWRwKCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWJveF9sZW4gKTsKLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCB1ZHBfcGt0X3R5cGUoIHN0cnVjdCBza19idWZmICpza2IgLCBzZGxhX3QqIGNhcmQpOwotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCSAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEpOwotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsICAKLQkJCQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhKTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICosIGludCk7Ci1zdGF0aWMgdm9pZCBzNTA4X2xvY2sgKHNkbGFfdCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKLXN0YXRpYyB2b2lkIHM1MDhfdW5sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCBzZW5kX3BwcF90ZXJtX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQotc3RhdGljIGludCAgSW50cl90ZXN0X2NvdW50ZXI7Ci0vKioqKioqIFB1YmxpYyBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDaXNjbyBIRExDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbWFpbiBXQU5QSVBFIG1vZHVsZSBkdXJpbmcgc2V0dXAuICBBdCB0aGlzCi0gKiBwb2ludCBhZGFwdGVyIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYW5kIGZpcm13YXJlIGlzIHJ1bm5pbmcuCi0gKiAgbyByZWFkIGZpcm13YXJlIHZlcnNpb24gKHRvIG1ha2Ugc3VyZSBpdCdzIGFsaXZlKQotICogIG8gY29uZmlndXJlIGFkYXB0ZXIKLSAqICBvIGluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIG9mIHRoZSBhZGFwdGVyIGRhdGEgc3BhY2UuCi0gKgotICogUmV0dXJuOgkwCW8uay4KLSAqCQk8IDAJZmFpbHVyZS4KLSAqLwotaW50IHdzcHBwX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZikKLXsKLQl1bnNpZ25lZCBjaGFyIHBvcnRfbnVtOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcGVybWl0dGVkX2JhdWQgPSAwOwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzOwotCi0JdW5pb24KLQkJewotCQljaGFyIHN0cls4MF07Ci0JCX0gdTsKLQl2b2xhdGlsZSBDSERMQ19NQUlMQk9YX1NUUlVDVCogbWI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iMTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBWZXJpZnkgY29uZmlndXJhdGlvbiBJRCAqLwotCWlmIChjb25mLT5jb25maWdfaWQgIT0gV0FOQ09ORklHX01QUFApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgY29uZmlndXJhdGlvbiBJRCAldSFcbiIsCi0JCQkJICBjYXJkLT5kZXZuYW1lLCBjb25mLT5jb25maWdfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBGaW5kIG91dCB3aGljaCBQb3J0IHRvIHVzZSAqLwotCWlmICgoY29uZi0+Y29tbV9wb3J0ID09IFdBTk9QVF9QUkkpIHx8IChjb25mLT5jb21tX3BvcnQgPT0gV0FOT1BUX1NFQykpewotCQlpZiAoY2FyZC0+bmV4dCl7Ci0KLQkJCWlmIChjb25mLT5jb21tX3BvcnQgIT0gY2FyZC0+bmV4dC0+dS5jLmNvbW1fcG9ydCl7Ci0JCQkJY2FyZC0+dS5jLmNvbW1fcG9ydCA9IGNvbmYtPmNvbW1fcG9ydDsKLQkJCX1lbHNlewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SIC0gJXMgcG9ydCB1c2VkIVxuIiwKLSAgICAgICAgCQkgICAgICAgIAljYXJkLT53YW5kZXYubmFtZSwgUE9SVChjb25mLT5jb21tX3BvcnQpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfWVsc2V7Ci0JCQljYXJkLT51LmMuY29tbV9wb3J0ID0gY29uZi0+Y29tbV9wb3J0OwotCQl9Ci0JfWVsc2V7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SIC0gSW52YWxpZCBQb3J0IFNlbGVjdGVkIVxuIiwKLSAgICAgICAgICAgICAgICAJCQljYXJkLT53YW5kZXYubmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkKLQotCS8qIEluaXRpYWxpemUgcHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCi0JCWlmIChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9QUkkpewkKLQkJCWNhcmQtPm1ib3ggID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZTsKLQkJfWVsc2V7Ci0JCQljYXJkLT5tYm94ICA9ICh2b2lkICopIGNhcmQtPmh3LmRwbWJhc2UgKyAKLQkJCQlTRUNfQkFTRV9BRERSX01CX1NUUlVDVCAtIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9CQotCX1lbHNleyAKLQkJLyogZm9yIGEgUzUxNCBhZGFwdGVyLCBzZXQgYSBwb2ludGVyIHRvIHRoZSBhY3R1YWwgbWFpbGJveCBpbiB0aGUgKi8KLQkJLyogYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5IGFyZWEgKi8KLQkJaWYgKGNhcmQtPnUuYy5jb21tX3BvcnQgPT0gV0FOT1BUX1BSSSl7Ci0JCQljYXJkLT5tYm94ID0gKHZvaWQgKikgY2FyZC0+aHcuZHBtYmFzZSArIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUOwotCQl9ZWxzZXsKLQkJCWNhcmQtPm1ib3ggPSAodm9pZCAqKSBjYXJkLT5ody5kcG1iYXNlICsgU0VDX0JBU0VfQUREUl9NQl9TVFJVQ1Q7Ci0JCX0JCi0JfQotCi0JbWIgPSBtYjEgPSBjYXJkLT5tYm94OwotCi0JaWYgKCFjYXJkLT5jb25maWd1cmVkKXsKLQotCQkvKiBUaGUgYm9hcmQgd2lsbCBwbGFjZSBhbiAnSScgaW4gdGhlIHJldHVybiBjb2RlIHRvIGluZGljYXRlIHRoYXQgaXQgaXMKLQkgICAJcmVhZHkgdG8gYWNjZXB0IGNvbW1hbmRzLiAgV2UgZXhwZWN0IHRoaXMgdG8gYmUgY29tcGxldGVkIGluIGxlc3MKLSAgICAgICAgICAgCXRoYW4gMSBzZWNvbmQuICovCi0KLQkJdGltZW91dCA9IGppZmZpZXMgKyAxICogSFo7Ci0JCXdoaWxlIChtYi0+cmV0dXJuX2NvZGUgIT0gJ0knKQkvKiBXYWl0IDFzIGZvciBib2FyZCB0byBpbml0aWFsaXplICovCi0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgYnJlYWs7Ci0KLQkJaWYgKG1iLT5yZXR1cm5fY29kZSAhPSAnSScpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiJXM6IEluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZWQgYnkgYWRhcHRlclxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBjb250YWN0IFNhbmdvbWEgcmVwcmVzZW50YXRpdmUuXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JLyogUmVhZCBmaXJtd2FyZSB2ZXJzaW9uLiAgTm90ZSB0aGF0IHdoZW4gYWRhcHRlciBpbml0aWFsaXplcywgaXQKLQkgKiBjbGVhcnMgdGhlIG1haWxib3gsIHNvIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgZmlyc3QgY29tbWFuZCB3YXMKLQkgKiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgd2hlbiBpbiBmYWN0IGl0IHdhcyBtZXJlbHkgZXJhc2VkLiBUbyB3b3JrCi0JICogYXJvdW5kIHRoaXMsIHdlIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbW1hbmQgdHdpY2UuCi0JICovCi0KLQlpZiAoY2hkbGNfcmVhZF92ZXJzaW9uKGNhcmQsIHUuc3RyKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyBSYXcgQ0hETEMgZmlybXdhcmUgdiVzXG4iIAotCQkJICIlczogZm9yIE11bHRpLVBvcnQgUFBQIHByb3RvY29sLlxuIiwKLQkJCWNhcmQtPmRldm5hbWUsdS5zdHIsY2FyZC0+ZGV2bmFtZSk7IAotCi0JY2FyZC0+aXNyCQkJPSAmd3NwcHBfaXNyOwotCWNhcmQtPnBvbGwJCQk9IE5VTEw7Ci0JY2FyZC0+ZXhlYwkJCT0gTlVMTDsKLQljYXJkLT53YW5kZXYudXBkYXRlCQk9ICZ1cGRhdGU7Ci0gCWNhcmQtPndhbmRldi5uZXdfaWYJCT0gJm5ld19pZjsKLQljYXJkLT53YW5kZXYuZGVsX2lmCQk9ICZkZWxfaWY7Ci0JY2FyZC0+d2FuZGV2LnVkcF9wb3J0ICAgCT0gY29uZi0+dWRwX3BvcnQ7Ci0KLQljYXJkLT53YW5kZXYubmV3X2lmX2NudCA9IDA7Ci0KLQkvKiByZXNldCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSAndXBkYXRlKCknIHByb2MgaGFzIGJlZW4gY2FsbGVkICovCi0JY2FyZC0+dS5jLnVwZGF0ZV9jYWxsX2NvdW50ID0gMDsKLQkKLQljYXJkLT53YW5kZXYudHRsID0gY29uZi0+dHRsOwotCWNhcmQtPndhbmRldi5pbnRlcmZhY2UgPSBjb25mLT5pbnRlcmZhY2U7IAotCi0JaWYgKChjYXJkLT51LmMuY29tbV9wb3J0ID09IFdBTk9QVF9TRUMgJiYgY29uZi0+aW50ZXJmYWNlID09IFdBTk9QVF9WMzUpJiYKLQkgICAgY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRVJST1IgLSBWMzUgSW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQgb24gUzUwOCAlcyBwb3J0IFxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIFBPUlQoY2FyZC0+dS5jLmNvbW1fcG9ydCkpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQotCWNhcmQtPndhbmRldi5jbG9ja2luZyA9IGNvbmYtPmNsb2NraW5nOwotCi0JcG9ydF9udW0gPSBjYXJkLT51LmMuY29tbV9wb3J0OwotCi0JLyogU2V0dXAgUG9ydCBCcHMgKi8KLQotCWlmKGNhcmQtPndhbmRldi5jbG9ja2luZykgewotCQlpZigocG9ydF9udW0gPT0gV0FOT1BUX1BSSSkgfHwgY2FyZC0+dS5jLnJlY2VpdmVfb25seSkgewotCQkJLyogRm9yIFByaW1hcnkgUG9ydCAwICovCi0gICAgICAgICAgICAgICAJCW1heF9wZXJtaXR0ZWRfYmF1ZCA9Ci0JCQkJKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KSA/Ci0JCQkJUFJJX01BWF9CQVVEX1JBVEVfUzUxNCA6IAotCQkJCVBSSV9NQVhfQkFVRF9SQVRFX1M1MDg7Ci0JCX0KLQkJZWxzZSBpZihwb3J0X251bSA9PSBXQU5PUFRfU0VDKSB7Ci0JCQkvKiBGb3IgU2Vjb25kYXJ5IFBvcnQgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Blcm1pdHRlZF9iYXVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyZC0+aHcudHlwZSA9PSBTRExBX1M1MTQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gIAotCQkJaWYoY29uZi0+YnBzID4gbWF4X3Blcm1pdHRlZF9iYXVkKSB7Ci0JCQkJY29uZi0+YnBzID0gbWF4X3Blcm1pdHRlZF9iYXVkOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBCYXVkIHRvbyBoaWdoIVxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUpOwotIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQmF1ZCByYXRlIHNldCB0byAlbHUgYnBzXG4iLCAKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsIG1heF9wZXJtaXR0ZWRfYmF1ZCk7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJY2FyZC0+d2FuZGV2LmJwcyA9IGNvbmYtPmJwczsKLQl9ZWxzZXsKLSAgICAgICAgCWNhcmQtPndhbmRldi5icHMgPSAwOwotICAJfQotCi0JLyogU2V0dXAgdGhlIFBvcnQgTVRVICovCi0JaWYoKHBvcnRfbnVtID09IFdBTk9QVF9QUkkpIHx8IGNhcmQtPnUuYy5yZWNlaXZlX29ubHkpIHsKLQotCQkvKiBGb3IgUHJpbWFyeSBQb3J0IDAgKi8KLQkJY2FyZC0+d2FuZGV2Lm10dSA9Ci0JCQkoY29uZi0+bXR1ID49IE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHKSA/Ci0JCQltaW5fdCh1bnNpZ25lZCBpbnQsIGNvbmYtPm10dSwgUFJJX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FKSA6Ci0JCQlDSERMQ19ERkxUX0RBVEFfTEVOOwotCX0gZWxzZSBpZihwb3J0X251bSA9PSBXQU5PUFRfU0VDKSB7IAotCQkvKiBGb3IgU2Vjb25kYXJ5IFBvcnQgMSAqLwotCQljYXJkLT53YW5kZXYubXR1ID0KLQkJCShjb25mLT5tdHUgPj0gTUlOX0xHVEhfQ0hETENfREFUQV9DRkcpID8KLQkJCW1pbl90KHVuc2lnbmVkIGludCwgY29uZi0+bXR1LCBTRUNfTUFYX05PX0RBVEFfQllURVNfSU5fRlJBTUUpIDoKLQkJCUNIRExDX0RGTFRfREFUQV9MRU47Ci0JfQotCi0JLyogQWRkIG9uIGEgUFBQIEhlYWRlciAqLwotCWNhcmQtPndhbmRldi5tdHUgKz0gUFBQX0hFQURFUl9MRU47Ci0KLQkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBzdGF0dXMgYXJlYSAqLwotCS8qIFJlYWQgdGhlIENIRExDIENvbmZpZ3VyYXRpb24gYW5kIG9idGFpbjogCi0JICoJUHRyIHRvIHNoYXJlZCBtZW1vcnkgaW5mb3Igc3RydWN0Ci0gICAgICAgICAqIFVzZSB0aGlzIHBvaW50ZXIgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiBjYXJkLT51LmMuZmxhZ3MgIQotIAkgKi8KLQltYjEtPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iMS0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIxKSA/IG1iMS0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQljbGVhcl9iaXQoMSwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpOwotCi0gICAgICAgICAgICAgICAgaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpCi0gICAgICAgICAgICAgICAgCWVuYWJsZV9pcnEoY2FyZC0+aHcuaXJxKTsKLQotCQljaGRsY19lcnJvcihjYXJkLCBlcnIsIG1iMSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmKGNhcmQtPmh3LnR5cGUgPT0gU0RMQV9TNTE0KXsKLSAgICAgICAgICAgICAgIAljYXJkLT51LmMuZmxhZ3MgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgIAkJKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYjEtPmRhdGEpLT4KLQkJCXB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0KSk7Ci0gICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5mbGFncyA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYjEtPmRhdGEpLT4KLQkJCXB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0ICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0JfQotCQotCWZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCQotCS8qIFRoaXMgaXMgZm9yIHRoZSBwb3J0cyBsaW5rIHN0YXRlICovCi0JY2FyZC0+d2FuZGV2LnN0YXRlID0gV0FOX0RVQUxQT1JUOwotCWNhcmQtPnUuYy5zdGF0ZSA9IFdBTl9ESVNDT05ORUNURUQ7Ci0KLQotCWlmICghY2FyZC0+d2FuZGV2LnBpZ2d5YmFjayl7Ci0JCWVyciA9IGludHJfdGVzdChjYXJkKTsKLQotCQlpZihlcnIgfHwgKEludHJfdGVzdF9jb3VudGVyIDwgTUFYX0lOVFJfVEVTVF9DT1VOVEVSKSkgeyAKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludGVycnVwdCB0ZXN0IGZhaWxlZCAoJWkpXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lLCBJbnRyX3Rlc3RfY291bnRlcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgaW50ZXJydXB0XG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCXJldHVybiAgLUVJTzsKLQkJfQotCQkJCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlcnJ1cHQgdGVzdCBwYXNzZWQgKCVpKVxuIiwgCi0JCQkJY2FyZC0+ZGV2bmFtZSwgSW50cl90ZXN0X2NvdW50ZXIpOwotCX0KLQotCi0JaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU87CQotICAgICAgICB9Ci0JCi0JLyogTWFzayB0aGUgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfkFQUF9JTlRfT05fVElNRVI7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqIFdBTiBEZXZpY2UgRHJpdmVyIEVudHJ5IFBvaW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSBkZXZpY2Ugc3RhdHVzICYgc3RhdGlzdGljcwotICogVGhpcyBwcm9jZWR1cmUgaXMgY2FsbGVkIHdoZW4gdXBkYXRpbmcgdGhlIFBST0MgZmlsZSBzeXN0ZW0gYW5kIHJldHVybnMKLSAqIHZhcmlvdXMgY29tbXVuaWNhdGlvbnMgc3RhdGlzdGljcy4gVGhlc2Ugc3RhdGlzdGljcyBhcmUgYWNjdW11bGF0ZWQgZnJvbSAzIAotICogZGlmZmVyZW50IGxvY2F0aW9uczoKLSAqIAkxKSBUaGUgJ2lmX3N0YXRzJyByZWNvcmRlZCBmb3IgdGhlIGRldmljZS4KLSAqIAkyKSBDb21tdW5pY2F0aW9uIGVycm9yIHN0YXRpc3RpY3Mgb24gdGhlIGFkYXB0ZXIuCi0gKiAgICAgIDMpIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb24gdGhlIGFkYXB0ZXIuCi0gKiBUaGUgYm9hcmQgbGV2ZWwgc3RhdGlzdGljcyBhcmUgcmVhZCBkdXJpbmcgYSB0aW1lciBpbnRlcnJ1cHQuIE5vdGUgdGhhdCB3ZSAKLSAqIHJlYWQgdGhlIGVycm9yIGFuZCBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGR1cmluZyBjb25zZWNpdGl2ZSB0aW1lciB0aWNrcyBzbwotICogYXMgdG8gbWluaW1pemUgdGhlIHRpbWUgdGhhdCB3ZSBhcmUgaW5zaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYpCi17Ci0Jc2RsYV90KiBjYXJkID0gd2FuZGV2LT5wcml2YXRlOwotIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICB2b2xhdGlsZSBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotICAgICAgICBTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFnczsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYoKHdhbmRldiA9PSBOVUxMKSB8fCAod2FuZGV2LT5wcml2YXRlID09IE5VTEwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQlpZih3YW5kZXYtPnN0YXRlID09IFdBTl9VTkNPTkZJR1VSRUQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogbW9yZSBzYW5pdHkgY2hlY2tzICovCi0gICAgICAgIGlmKCFjYXJkLT51LmMuZmxhZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZigoZGV2PWNhcmQtPndhbmRldi5kZXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYoKGNoZGxjX3ByaXZfYXJlYT1kZXYtPnByaXYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0gICAgICAJZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0KLSAgICAgICAJaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpewotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JCQkKLQkvKiB3ZSB3aWxsIG5lZWQgMiB0aW1lciBpbnRlcnJ1cHRzIHRvIGNvbXBsZXRlIHRoZSAqLwotCS8qIHJlYWRpbmcgb2YgdGhlIHN0YXRpc3RpY3MgKi8KLQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDI7Ci0gICAgICAgCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9USU1FUjsKLQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkID0gVE1SX0lOVF9FTkFCTEVEX1VQREFURTsKLSAgCi0JLyogd2FpdCBhIG1heGltdW0gb2YgMSBzZWNvbmQgZm9yIHRoZSBzdGF0aXN0aWNzIHRvIGJlIHVwZGF0ZWQgKi8gCi0gICAgICAgIHRpbWVvdXQgPSBqaWZmaWVzICsgMSAqIEhaOwotICAgICAgICBmb3IoOzspIHsKLQkJaWYoY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMgPT0gMCkKLQkJCWJyZWFrOwotICAgICAgICAgICAgICAgIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKXsKLSAgICAJCQljaGRsY19wcml2X2FyZWEtPnVwZGF0ZV9jb21tc19zdGF0cyA9IDA7Ci0gCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPQotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOyAKLSAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotICAgICAgICB9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCi0gKiBoYW5kbGVkLgotICogbyBwYXJzZSBtZWRpYS0gYW5kIGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KLSAqIG8gbWFrZSBzdXJlIHRoYXQgYSBuZXcgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZAotICogbyBhbGxvY2F0ZSByZXNvdXJjZXMsIGlmIG5lY2Vzc2FyeQotICogbyBwcmVwYXJlIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSBmb3IgcmVnaXN0YXJhdGlvbi4KLSAqCi0gKiBSZXR1cm46CTAJby5rLgotICoJCTwgMAlmYWlsdXJlIChjaGFubmVsIHdpbGwgbm90IGJlIGNyZWF0ZWQpCi0gKi8KLXN0YXRpYyBpbnQgbmV3X2lmKHN0cnVjdCB3YW5fZGV2aWNlKiB3YW5kZXYsIHN0cnVjdCBuZXRfZGV2aWNlKiBwZGV2LAotCQkgIHdhbmlmX2NvbmZfdCogY29uZikKLXsKLQotCXN0cnVjdCBwcHBfZGV2aWNlICpwcHBkZXYgPSAoc3RydWN0IHBwcF9kZXZpY2UgKilwZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCXN0cnVjdCBzcHBwICpzcDsKLQlzZGxhX3QqIGNhcmQgPSB3YW5kZXYtPnByaXZhdGU7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYTsKLQkKLQlpZiAoKGNvbmYtPm5hbWVbMF0gPT0gJ1wwJykgfHwgKHN0cmxlbihjb25mLT5uYW1lKSA+IFdBTl9JRk5BTUVfU1opKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIGludGVyZmFjZSBuYW1lIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwotCWNoZGxjX3ByaXZfYXJlYSA9IGttYWxsb2Moc2l6ZW9mKGNoZGxjX3ByaXZhdGVfYXJlYV90KSwgR0ZQX0tFUk5FTCk7Ci0JCi0JaWYoY2hkbGNfcHJpdl9hcmVhID09IE5VTEwpIAotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbXNldChjaGRsY19wcml2X2FyZWEsIDAsIHNpemVvZihjaGRsY19wcml2YXRlX2FyZWFfdCkpOwotCi0JY2hkbGNfcHJpdl9hcmVhLT5jYXJkID0gY2FyZDsgCi0KLQkvKiBpbml0aWFsaXplIGRhdGEgKi8KLQlzdHJjcHkoY2FyZC0+dS5jLmlmX25hbWUsIGNvbmYtPm5hbWUpOwotCi0JaWYoY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAga2ZyZWUoY2hkbGNfcHJpdl9hcmVhKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCi0JY2FyZC0+d2FuZGV2Lm5ld19pZl9jbnQrKzsKLQotCWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCi0JLy9XZSBkb24ndCBuZWVkIHRoaXMgYW55IG1vcmUKLQljaGRsY19wcml2X2FyZWEtPnJvdXRlX3N0YXR1cyA9IE5PX1JPVVRFOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVfcmVtb3ZlZCA9IDA7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogRmlybXdhcmUgcnVubmluZyBpbiBIRExDIFNUUkVBTUlORyBNb2RlXG4iLAotCQl3YW5kZXYtPm5hbWUpOwotCQotCS8qIFNldHVwIHdhbnBpcGUgYXMgYSByb3V0ZXIgKFdBTlBJUEUpIG9yIGFzIGFuIEFQSSAqLwotCWlmKCBzdHJjbXAoY29uZi0+dXNlZGJ5LCAiV0FOUElQRSIpID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciBydW5uaW5nIGluIFdBTlBJUEUgbW9kZSFcbiIsCi0JCQl3YW5kZXYtPm5hbWUpOwotCQljYXJkLT51LmMudXNlZGJ5ID0gV0FOUElQRTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBBUEkgTW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTeW5jUFBQIVxuIiwKLQkJCXdhbmRldi0+bmFtZSk7Ci0JCWtmcmVlKGNoZGxjX3ByaXZfYXJlYSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEdldCBNdWx0aWNhc3QgSW5mb3JtYXRpb24gKi8KLQljaGRsY19wcml2X2FyZWEtPm1jID0gY29uZi0+bWM7Ci0KLQotCWNoZGxjX3ByaXZfYXJlYS0+aWZfcHRyID0gcHBwZGV2OwotCi0JLyogcHJlcGFyZSBuZXR3b3JrIGRldmljZSBkYXRhIHNwYWNlIGZvciByZWdpc3RyYXRpb24gKi8KLQotCXN0cmNweShkZXYtPm5hbWUsY2FyZC0+dS5jLmlmX25hbWUpOwotCi0JLyogQXR0YWNoIFBQUCBwcm90b2NvbCBsYXllciB0byBwcHBkZXYKLQkgKiBUaGUgc3BwcF9hdHRhY2goKSB3aWxsIGluaXRpbGl6ZSB0aGUgZGV2IHN0cnVjdHVyZQotICAgICAgICAgKiBhbmQgc2V0dXAgcHBwIGxheWVyIHByb3RvY29scy4KLSAgICAgICAgICogQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG8gYmluZCBpbjoKLSAgICAgICAgICogICAgICAgIGlmX29wZW4oKSwgaWZfY2xvc2UoKSwgaWZfc2VuZCgpIGFuZCBnZXRfc3RhdHMoKSBmdW5jdGlvbnMuCi0gICAgICAgICAqLwotCXNwcHBfYXR0YWNoKHBwcGRldik7Ci0JZGV2ID0gcHBwZGV2LT5kZXY7Ci0Jc3AgPSAmcHBwZGV2LT5zcHBwOwotCQotCS8qIEVuYWJsZSBQUFAgRGVidWdnaW5nICovCi0JLy8gRklYTUUgRml4IHRoaXMgdXAgc29tZWhvdwotCS8vc3AtPnBwX2ZsYWdzIHw9IFBQX0RFQlVHOyAJCi0Jc3AtPnBwX2ZsYWdzICY9IH5QUF9DSVNDTzsKLQotCWRldi0+aW5pdCA9ICZpZl9pbml0OwotCWRldi0+cHJpdiA9IGNoZGxjX3ByaXZfYXJlYTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBEZWxldGUgbG9naWNhbCBjaGFubmVsLgotICovCi1zdGF0aWMgaW50IGRlbF9pZihzdHJ1Y3Qgd2FuX2RldmljZSogd2FuZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0Jc2RsYV90ICpjYXJkID0gY2hkbGNfcHJpdl9hcmVhLT5jYXJkOwotCXVuc2lnbmVkIGxvbmcgc21wX2xvY2s7Ci0JCi0JLyogRGV0YWNoIHRoZSBQUFAgbGF5ZXIgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogRGV0YWNoaW5nIFN5bmNQUFAgTW9kdWxlIGZyb20gJXNcbiIsCi0JCQl3YW5kZXYtPm5hbWUsZGV2LT5uYW1lKTsKLQotCWxvY2tfYWRhcHRlcl9pcnEoJndhbmRldi0+bG9jaywmc21wX2xvY2spOwotCi0Jc3BwcF9kZXRhY2goZGV2KTsKLQljaGRsY19wcml2X2FyZWEtPmlmX3B0cj1OVUxMOwotCQotCWNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgMCk7Ci0JaWYgKGNhcmQtPnUuYy5jb21tX2VuYWJsZWQpCi0JCWNoZGxjX2NvbW1fZGlzYWJsZShjYXJkKTsKLQl1bmxvY2tfYWRhcHRlcl9pcnEoJndhbmRldi0+bG9jaywmc21wX2xvY2spOwotCQotCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKiBOZXR3b3JrIERldmljZSBJbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogSW5pdGlhbGl6ZSBMaW51eCBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UsIGR1cmluZyBMaW51eCBuZXR3b3JrCi0gKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiAgUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCB6ZXJvIHdpbGwgZmFpbCBpbnRlcmZhY2UKLSAqIHJlZ2lzdHJhdGlvbi4KLSAqLwotc3RhdGljIGludCBpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0Jc3RydWN0IHdhbl9kZXZpY2UqIHdhbmRldiA9ICZjYXJkLT53YW5kZXY7Ci0JCi0JLyogTk9URTogTW9zdCBvZiB0aGUgZGV2IGluaXRpYWxpemF0aW9uIHdhcwotICAgICAgICAgKiAgICAgICBkb25lIGluIHNwcHBfYXR0YWNoKCksIGNhbGxlZCBieSBuZXdfaWYoKSAKLSAgICAgICAgICogICAgICAgZnVuY3Rpb24uIEFsbCB3ZSBoYXZlIHRvIGRvIGhlcmUgaXMKLSAgICAgICAgICogICAgICAgdG8gbGluayBmb3VyIG1ham9yIHJvdXRpbmVzIGJlbG93LiAKLSAgICAgICAgICovCi0KLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9ICZpZl9vcGVuOwotCWRldi0+c3RvcAkJPSAmaWZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSAmaWZfc2VuZDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmaWZfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0CQk9ICZpZl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwotCi0KLQkvKiBJbml0aWFsaXplIGhhcmR3YXJlIHBhcmFtZXRlcnMgKi8KLQlkZXYtPmlycQk9IHdhbmRldi0+aXJxOwotCWRldi0+ZG1hCT0gd2FuZGV2LT5kbWE7Ci0JZGV2LT5iYXNlX2FkZHIJPSB3YW5kZXYtPmlvcG9ydDsKLQlkZXYtPm1lbV9zdGFydAk9IHdhbmRldi0+bWFkZHI7Ci0JZGV2LT5tZW1fZW5kCT0gd2FuZGV2LT5tYWRkciArIHdhbmRldi0+bXNpemUgLSAxOwotCi0JLyogU2V0IHRyYW5zbWl0IGJ1ZmZlciBxdWV1ZSBsZW5ndGggCi0gICAgICAgICAqIElmIHdlIG92ZXIgZmlsbCB0aGlzIHF1ZXVlIHRoZSBwYWNrZXRzIHdpbGwKLSAgICAgICAgICogYmUgZHJvcGVkIGJ5IHRoZSBrZXJuZWwuCi0gICAgICAgICAqIHNwcHBfYXR0YWNoKCkgc2V0cyB0aGlzIHRvIDEwLCBidXQKLSAgICAgICAgICogMTAwIHdpbGwgZ2l2ZSB1cyBtb3JlIHJvb20gYXQgbG93IHNwZWVkcy4KLQkgKi8KLSAgICAgICAgZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0gICAKLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEhhbmRsZSB0cmFuc21pdCB0aW1lb3V0IGV2ZW50IGZyb20gbmV0aWYgd2F0Y2hkb2cKLSAqLwotc3RhdGljIHZvaWQgaWZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIAljaGRsY19wcml2YXRlX2FyZWFfdCogY2hhbiA9IGRldi0+cHJpdjsKLQlzZGxhX3QgKmNhcmQgPSBjaGFuLT5jYXJkOwotCQotCS8qIElmIG91ciBkZXZpY2Ugc3RheXMgYnVzeSBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzIHRoZW4gd2Ugd2lsbAotCSAqIGtpY2sgc3RhcnQgdGhlIGRldmljZSBieSBtYWtpbmcgZGV2LT50YnVzeSA9IDAuICBXZSBleHBlY3QKLQkgKiB0aGF0IG91ciBkZXZpY2UgbmV2ZXIgc3RheXMgYnVzeSBtb3JlIHRoYW4gNSBzZWNvbmRzLiBTbyB0aGlzICAgICAgICAgICAgICAgICAKLQkgKiBpcyBvbmx5IHVzZWQgYXMgYSBsYXN0IHJlc29ydC4KLQkgKi8KLQotCSsrY2FyZC0+d2FuZGV2LnN0YXRzLmNvbGxpc2lvbnM7Ci0KLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCBvbiAlc1xuIiwgY2FyZC0+ZGV2bmFtZSxkZXYtPm5hbWUpOwotCW5ldGlmX3dha2VfcXVldWUgKGRldik7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcGVuIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBlbmFibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHByZXZlbnQgbW9kdWxlIGZyb20gdW5sb2FkaW5nIGJ5IGluY3JlbWVudGluZyB1c2UgY291bnQKLSAqCi0gKiBSZXR1cm4gMCBpZiBPLmsuIG9yIGVycm5vLgotICovCi1zdGF0aWMgaW50IGlmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCogY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQotCS8qIE9ubHkgb25lIG9wZW4gcGVyIGludGVyZmFjZSBpcyBhbGxvd2VkICovCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFN0YXJ0IFBQUCBMYXllciAqLwotCWlmIChzcHBwX29wZW4oZGV2KSl7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWUgPSB0di50dl9zZWM7Ci0gCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkKLQl3YW5waXBlX29wZW4oY2FyZCk7Ci0KLQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkIHw9IFRNUl9JTlRfRU5BQkxFRF9DT05GSUc7Ci0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PSBBUFBfSU5UX09OX1RJTUVSOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsb3NlIG5ldHdvcmsgaW50ZXJmYWNlLgotICogbyBpZiB0aGlzIGlzIHRoZSBsYXN0IGNsb3NlLCB0aGVuIGRpc2FibGUgY29tbXVuaWNhdGlvbnMgYW5kIGludGVycnVwdHMuCi0gKiBvIHJlc2V0IGZsYWdzLgotICovCi1zdGF0aWMgaW50IGlmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCi17Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQlzZGxhX3QqIGNhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0KLQkvKiBTdG9wIHRoZSBQUFAgTGF5ZXIgKi8KLQlzcHBwX2Nsb3NlKGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0Jd2FucGlwZV9jbG9zZShjYXJkKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZW5kIGEgcGFja2V0IG9uIGEgbmV0d29yayBpbnRlcmZhY2UuCi0gKiBvIHNldCB0YnVzeSBmbGFnIChtYXJrcyBzdGFydCBvZiB0aGUgdHJhbnNtaXNzaW9uKSB0byBibG9jayBhIHRpbWVyLWJhc2VkCi0gKiAgIHRyYW5zbWl0IGZyb20gb3ZlcmxhcHBpbmcuCi0gKiBvIGNoZWNrIGxpbmsgc3RhdGUuIElmIGxpbmsgaXMgbm90IHVwLCB0aGVuIGRyb3AgdGhlIHBhY2tldC4KLSAqIG8gZXhlY3V0ZSBhZGFwdGVyIHNlbmQgY29tbWFuZC4KLSAqIG8gZnJlZSBzb2NrZXQgYnVmZmVyCi0gKgotICogUmV0dXJuOgkwCWNvbXBsZXRlIChzb2NrZXQgYnVmZmVyIG11c3QgYmUgZnJlZWQpCi0gKgkJbm9uLTAJcGFja2V0IG1heSBiZSByZS10cmFuc21pdHRlZCAodGJ1c3kgbXVzdCBiZSBzZXQpCi0gKgotICogTm90ZXM6Ci0gKiAxLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGVpdGhlciBieSB0aGUgcHJvdG9jb2wgc3RhY2sgb3IgYnkgdGhlICJuZXQKLSAqICAgIGJvdHRvbSBoYWxmIiAod2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpLgotICogMi4gU2V0dGluZyB0YnVzeSBmbGFnIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIHRyYW5zbWl0IHJlcXVlc3RzIGZyb20gdGhlCi0gKiAgICBwcm90b2NvbCBzdGFjayBhbmQgY2FuIGJlIHVzZWQgZm9yIGZsb3cgY29udHJvbCB3aXRoIHByb3RvY29sIGxheWVyLgotICovCi1zdGF0aWMgaW50IGlmX3NlbmQoc3RydWN0IHNrX2J1ZmYqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsKLQljaGRsY19wcml2YXRlX2FyZWFfdCAqY2hkbGNfcHJpdl9hcmVhID0gZGV2LT5wcml2OwotCXNkbGFfdCAqY2FyZCA9IGNoZGxjX3ByaXZfYXJlYS0+Y2FyZDsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICpjaGRsY19pbnQgPSAmZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdDsKLQlpbnQgdWRwX3R5cGUgPSAwOwotCXVuc2lnbmVkIGxvbmcgc21wX2ZsYWdzOwotCWludCBlcnI9MDsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCQotCWlmIChza2IgPT0gTlVMTCl7Ci0JCS8qIElmIHdlIGdldCBoZXJlLCBzb21lIGhpZ2hlciBsYXllciB0aGlua3Mgd2UndmUgbWlzc2VkIGFuCi0JCSAqIHR4LWRvbmUgaW50ZXJydXB0LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIE5VTEwgc2tiIGJ1ZmZlciEgaW50ZXJmYWNlICVzIGdvdCBraWNrZWQhXG4iLAotCQkJY2FyZC0+ZGV2bmFtZSwgZGV2LT5uYW1lKTsKLQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQotICAgCWlmIChudG9ocyhza2ItPnByb3RvY29sKSAhPSBodG9ucyhQVkNfUFJPVCkpewotCQkvKiBjaGVjayB0aGUgdWRwIHBhY2tldCB0eXBlICovCi0JCQotCQl1ZHBfdHlwZSA9IHVkcF9wa3RfdHlwZShza2IsIGNhcmQpOwotCQlpZiAodWRwX3R5cGUgPT0gVURQX0NQSVBFX1RZUEUpewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RvcmVfdWRwX21nbXRfcGt0KFVEUF9QS1RfRlJNX1NUQUNLLCBjYXJkLCBza2IsIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhKSl7Ci0JCQkJY2hkbGNfaW50LT5pbnRlcnJ1cHRfcGVybWlzc2lvbiB8PQotCQkJCQlBUFBfSU5UX09OX1RJTUVSOwotCQkJfQotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0gICAgICAgIH0KLQotCS8qIExvY2sgdGhlIDUwOCBDYXJkOiBTTVAgaXMgc3VwcG9ydGVkICovCi0gICAgICAJaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X2xvY2soY2FyZCwmc21wX2ZsYWdzKTsKLQl9IAotCi0gICAgCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNFTkRfQ1JJVCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKXsKLQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyaXRpY2FsIGluIGlmX3NlbmQ6ICVseFxuIiwKLQkJCQkJY2FyZC0+d2FuZGV2Lm5hbWUsY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLSAgICAgICAgICAgICAgICArK2NhcmQtPndhbmRldi5zdGF0cy50eF9kcm9wcGVkOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlnb3RvIGlmX3NlbmRfY3JpdF9leGl0OwotCX0KLQotCWlmIChjYXJkLT53YW5kZXYuc3RhdGUgIT0gV0FOX0NPTk5FQ1RFRCl7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWdvdG8gaWZfc2VuZF9jcml0X2V4aXQ7Ci0JfQotCQotCWlmIChjaGRsY19zZW5kKGNhcmQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pKXsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JfWVsc2V7Ci0JCSsrY2FyZC0+d2FuZGV2LnN0YXRzLnR4X3BhY2tldHM7Ci0gICAgICAgCQljYXJkLT53YW5kZXYuc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCX0JCi0KLWlmX3NlbmRfY3JpdF9leGl0OgotCWlmICghKGVycj1uZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpKXsKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX1lbHNlewotCQljaGRsY19wcml2X2FyZWEtPnRpY2tfY291bnRlciA9IGppZmZpZXM7Ci0JCWNoZGxjX2ludC0+aW50ZXJydXB0X3Blcm1pc3Npb24gfD0gQVBQX0lOVF9PTl9UWF9GUkFNRTsKLQl9Ci0KLQljbGVhcl9iaXQoU0VORF9DUklULCAodm9pZCopJmNhcmQtPndhbmRldi5jcml0aWNhbCk7Ci0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpewotCQlzNTA4X3VubG9jayhjYXJkLCZzbXBfZmxhZ3MpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBSZXBseSB0byBVRFAgTWFuYWdlbWVudCBzeXN0ZW0uCi0gKiBSZXR1cm4gbGVuZ3RoIG9mIHJlcGx5LgotICovCi1zdGF0aWMgaW50IHJlcGx5X3VkcCggdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IG1ib3hfbGVuICkKLXsKLQotCXVuc2lnbmVkIHNob3J0IGxlbiwgdWRwX2xlbmd0aCwgdGVtcCwgaXBfbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgaXBfdGVtcDsKLQlpbnQgZXZlbl9ib3VuZCA9IDA7Ci0gIAljaGRsY191ZHBfcGt0X3QgKmNfdWRwX3BrdCA9IChjaGRsY191ZHBfcGt0X3QgKilkYXRhOwotCSAKLQkvKiBTZXQgbGVuZ3RoIG9mIHBhY2tldCAqLwotCWxlbiA9IHNpemVvZihpcF9wa3RfdCkrIAotCSAgICAgIHNpemVvZih1ZHBfcGt0X3QpKwotCSAgICAgIHNpemVvZih3cF9tZ210X3QpKwotCSAgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCkrIAotCSAgICAgIG1ib3hfbGVuOwotCi0JLyogZmlsbCBpbiBVRFAgcmVwbHkgKi8KLQljX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9IFVEUE1HTVRfUkVQTFk7Ci0gICAKLQkvKiBmaWxsIGluIFVEUCBsZW5ndGggKi8KLQl1ZHBfbGVuZ3RoID0gc2l6ZW9mKHVkcF9wa3RfdCkrIAotCQkgICAgIHNpemVvZih3cF9tZ210X3QpKwotCQkgICAgIHNpemVvZihjYmxvY2tfdCkrCi0JICAgICAgICAgICAgIHNpemVvZih0cmFjZV9pbmZvX3QpKwotCQkgICAgIG1ib3hfbGVuOyAKLQotIAkvKiBwdXQgaXQgb24gYW4gZXZlbiBib3VuZGFyeSAqLwotCWlmICggdWRwX2xlbmd0aCAmIDB4MDAwMSApIHsKLQkJdWRwX2xlbmd0aCArPSAxOwotCQlsZW4gKz0gMTsKLQkJZXZlbl9ib3VuZCA9IDE7Ci0JfSAgCi0KLQl0ZW1wID0gKHVkcF9sZW5ndGg8PDgpfCh1ZHBfbGVuZ3RoPj44KTsKLQljX3VkcF9wa3QtPnVkcF9wa3QudWRwX2xlbmd0aCA9IHRlbXA7Ci0JCSAKLQkvKiBzd2FwIFVEUCBwb3J0cyAqLwotCXRlbXAgPSBjX3VkcF9wa3QtPnVkcF9wa3QudWRwX3NyY19wb3J0OwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfc3JjX3BvcnQgPSAKLQkJCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQ7IAotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfZHN0X3BvcnQgPSB0ZW1wOwotCi0JLyogYWRkIFVEUCBwc2V1ZG8gaGVhZGVyICovCi0JdGVtcCA9IDB4MTEwMDsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKShjX3VkcF9wa3QtPmRhdGErbWJveF9sZW4rZXZlbl9ib3VuZCkpID0gdGVtcDsJCi0JdGVtcCA9ICh1ZHBfbGVuZ3RoPDw4KXwodWRwX2xlbmd0aD4+OCk7Ci0JKigodW5zaWduZWQgc2hvcnQgKikoY191ZHBfcGt0LT5kYXRhK21ib3hfbGVuK2V2ZW5fYm91bmQrMikpID0gdGVtcDsKLQotCQkgCi0JLyogY2FsY3VsYXRlIFVEUCBjaGVja3N1bSAqLwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSAwOwotCWNfdWRwX3BrdC0+dWRwX3BrdC51ZHBfY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKCZkYXRhW1VEUF9PRkZTRVRdLHVkcF9sZW5ndGgrVURQX09GRlNFVCk7Ci0KLQkvKiBmaWxsIGluIElQIGxlbmd0aCAqLwotCWlwX2xlbmd0aCA9IGxlbjsKLQl0ZW1wID0gKGlwX2xlbmd0aDw8OCl8KGlwX2xlbmd0aD4+OCk7Ci0JY191ZHBfcGt0LT5pcF9wa3QudG90YWxfbGVuZ3RoID0gdGVtcDsKLSAgCi0JLyogc3dhcCBJUCBhZGRyZXNzZXMgKi8KLQlpcF90ZW1wID0gY191ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3M7Ci0JY191ZHBfcGt0LT5pcF9wa3QuaXBfc3JjX2FkZHJlc3MgPSBjX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzczsKLQljX3VkcF9wa3QtPmlwX3BrdC5pcF9kc3RfYWRkcmVzcyA9IGlwX3RlbXA7Ci0KLQkvKiBmaWxsIGluIElQIGNoZWNrc3VtICovCi0JY191ZHBfcGt0LT5pcF9wa3QuaGRyX2NoZWNrc3VtID0gMDsKLQljX3VkcF9wa3QtPmlwX3BrdC5oZHJfY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKGRhdGEsc2l6ZW9mKGlwX3BrdF90KSk7Ci0KLQlyZXR1cm4gbGVuOwotCi19IC8qIHJlcGx5X3VkcCAqLwotCi11bnNpZ25lZCBzaG9ydCBjYWxjX2NoZWNrc3VtIChjaGFyICpkYXRhLCBpbnQgbGVuKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXA7IAotCXVuc2lnbmVkIGxvbmcgc3VtPTA7Ci0JaW50IGk7Ci0KLQlmb3IoIGkgPSAwOyBpIDxsZW47IGkrPTIgKSB7Ci0JCW1lbWNweSgmdGVtcCwmZGF0YVtpXSwyKTsKLQkJc3VtICs9ICh1bnNpZ25lZCBsb25nKXRlbXA7Ci0JfQotCi0Jd2hpbGUgKHN1bSA+PiAxNiApIHsKLQkJc3VtID0gKHN1bSAmIDB4ZmZmZlVMKSArIChzdW0gPj4gMTYpOwotCX0KLQotCXRlbXAgPSAodW5zaWduZWQgc2hvcnQpc3VtOwotCXRlbXAgPSB+dGVtcDsKLQotCWlmKCB0ZW1wID09IDAgKSAKLQkJdGVtcCA9IDB4ZmZmZjsKLQotCXJldHVybiB0ZW1wOwkKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEdldCBldGhlcm5ldC1zdHlsZSBpbnRlcmZhY2Ugc3RhdGlzdGljcy4KLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljcy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBpZl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQotewotCXNkbGFfdCAqbXlfY2FyZDsKLQljaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhOwotCi0JLyogU2h1dGRvd24gYnVnIGZpeC4gSW4gZGVsX2lmKCkgd2Uga2lsbAotICAgICAgICAgKiBkZXYtPnByaXYgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiwgZ2V0cwotICAgICAgICAgKiBjYWxsZWQgYWZ0ZXIgZGVsX2lmKCksIHRodXMgY2hlY2sKLSAgICAgICAgICogaWYgcG9pbnRlciBoYXMgYmVlbiBkZWxldGVkICovCi0JaWYgKChjaGRsY19wcml2X2FyZWE9ZGV2LT5wcml2KSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCW15X2NhcmQgPSBjaGRsY19wcml2X2FyZWEtPmNhcmQ7Ci0JcmV0dXJuICZteV9jYXJkLT53YW5kZXYuc3RhdHM7IAotfQotCi0KLS8qKioqKiogQ2lzY28gSERMQyBGaXJtd2FyZSBJbnRlcmZhY2UgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBmaXJtd2FyZSBjb2RlIHZlcnNpb24uCi0gKglQdXQgY29kZSB2ZXJzaW9uIGFzIEFTQ0lJIHN0cmluZyBpbiBzdHIuIAotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfdmVyc2lvbiAoc2RsYV90KiBjYXJkLCBjaGFyKiBzdHIpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgbGVuOwotCWNoYXIgZXJyOwotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCWlmKGVyciAhPSBDT01NQU5EX09LKSB7Ci0JCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQl9Ci0JZWxzZSBpZiAoc3RyKSB7ICAvKiBpcyBub3QgbnVsbCAqLwotCQlsZW4gPSBtYi0+YnVmZmVyX2xlbmd0aDsKLQkJbWVtY3B5KHN0ciwgbWItPmRhdGEsIGxlbik7Ci0JCXN0cltsZW5dID0gJ1wwJzsKLQl9Ci0JcmV0dXJuIChlcnIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ29uZmlndXJlIENIRExDIGZpcm13YXJlLgotICovCi1zdGF0aWMgaW50IGNoZGxjX2NvbmZpZ3VyZSAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhKQotewotCWludCBlcnI7Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1haWxib3ggPSBjYXJkLT5tYm94OwotCWludCBkYXRhX2xlbmd0aCA9IHNpemVvZihDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCk7Ci0JCi0JbWFpbGJveC0+YnVmZmVyX2xlbmd0aCA9IGRhdGFfbGVuZ3RoOyAgCi0JbWVtY3B5KG1haWxib3gtPmRhdGEsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKLQltYWlsYm94LT5jb21tYW5kID0gU0VUX0NIRExDX0NPTkZJR1VSQVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1haWxib3gpID8gbWFpbGJveC0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spIGNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1haWxib3gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JcmV0dXJuIGVycjsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCBpbnRlcnJ1cHQgbW9kZSAtLSBIRExDIFZlcnNpb24uCi0gKi8KLQotc3RhdGljIGludCBjaGRsY19zZXRfaW50cl9tb2RlIChzZGxhX3QqIGNhcmQsIHVuc2lnbmVkIG1vZGUpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUKiBpbnRfZGF0YSA9Ci0JCSAoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCAqKW1iLT5kYXRhOwotCWludCBlcnI7Ci0KLQlpbnRfZGF0YS0+Q0hETENfaW50ZXJydXB0X3RyaWdnZXJzIAk9IG1vZGU7Ci0JaW50X2RhdGEtPklSUQkJCQk9IGNhcmQtPmh3LmlycTsKLQlpbnRfZGF0YS0+aW50ZXJydXB0X3RpbWVyICAgICAgICAgICAgICAgPSAxOwotICAgCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoQ0hETENfSU5UX1RSSUdHRVJTX1NUUlVDVCk7Ci0JbWItPmNvbW1hbmQgPSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTOwotCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQlpZiAoZXJyICE9IENPTU1BTkRfT0spCi0JCWNoZGxjX2Vycm9yIChjYXJkLCBlcnIsIG1iKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRW5hYmxlIGNvbW11bmljYXRpb25zLgotICovCi0KLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9lbmFibGUgKHNkbGFfdCogY2FyZCkKLXsKLQlpbnQgZXJyOwotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlM7Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmIChlcnIgIT0gQ09NTUFORF9PSykKLQkJY2hkbGNfZXJyb3IoY2FyZCwgZXJyLCBtYik7Ci0JZWxzZQotCQljYXJkLT51LmMuY29tbV9lbmFibGVkPTE7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERpc2FibGUgY29tbXVuaWNhdGlvbnMgYW5kIERyb3AgdGhlIE1vZGVtIGxpbmVzIChEQ0QgYW5kIFJUUykuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfY29tbV9kaXNhYmxlIChzZGxhX3QqIGNhcmQpCi17Ci0JaW50IGVycjsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCi0JbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCW1iLT5jb21tYW5kID0gRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUzsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JaWYgKGVyciAhPSBDT01NQU5EX09LKQotCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFJlYWQgY29tbXVuaWNhdGlvbiBlcnJvciBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfY29tbV9lcnJfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DT01NU19FUlJPUl9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVhZCBDSERMQyBvcGVyYXRpb25hbCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IGNoZGxjX3JlYWRfb3Bfc3RhdHMgKHNkbGFfdCogY2FyZCkKLXsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQotICAgICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1iLT5jb21tYW5kID0gUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUzsKLSAgICAgICAgZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotICAgICAgICBpZiAoZXJyICE9IENPTU1BTkRfT0spCi0gICAgICAgICAgICAgICAgY2hkbGNfZXJyb3IoY2FyZCxlcnIsbWIpOwotICAgICAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIGNvbW11bmljYXRpb25zIGVycm9yIGFuZCBnZW5lcmFsIHBhY2tldCBzdGF0aXN0aWNzLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9jb21tc19zdGF0cyhzZGxhX3QqIGNhcmQsCi0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSkKLXsKLSAgICAgICAgQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLSAgCUNPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVCogZXJyX3N0YXRzOwotICAgICAgICBDSERMQ19PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1QgKm9wX3N0YXRzOwotCi0JLyogb24gdGhlIGZpcnN0IHRpbWVyIGludGVycnVwdCwgcmVhZCB0aGUgY29tbXMgZXJyb3Igc3RhdGlzdGljcyAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dXBkYXRlX2NvbW1zX3N0YXRzID09IDIpIHsKLQkJaWYoY2hkbGNfcmVhZF9jb21tX2Vycl9zdGF0cyhjYXJkKSkKLQkJCXJldHVybiAxOwotCQllcnJfc3RhdHMgPSAoQ09NTVNfRVJST1JfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IAotCQkJCWVycl9zdGF0cy0+Unhfb3ZlcnJ1bl9lcnJfY291bnQ7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9jcmNfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5DUkNfZXJyX2NvdW50OwotCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9hYm9ydF9jb3VudDsKLQkJY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gCi0JCQkJZXJyX3N0YXRzLT5SeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudDsgCi0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0KLQkJCQljYXJkLT53YW5kZXYuc3RhdHMucnhfZmlmb19lcnJvcnM7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9Ci0JCQkJZXJyX3N0YXRzLT5zZWNfVHhfYWJvcnRfY291bnQ7Ci0JfQotCi0gICAgICAgIC8qIG9uIHRoZSBzZWNvbmQgdGltZXIgaW50ZXJydXB0LCByZWFkIHRoZSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0JZWxzZSB7Ci0gICAgICAgIAlpZihjaGRsY19yZWFkX29wX3N0YXRzKGNhcmQpKQotICAgICAgICAgICAgICAgIAlyZXR1cm4gMTsKLQkJb3Bfc3RhdHMgPSAoQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUICopbWItPmRhdGE7Ci0JCWNhcmQtPndhbmRldi5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KLQkJCShvcF9zdGF0cy0+UnhfRGF0YV9kaXNjYXJkX3Nob3J0X2NvdW50ICsKLQkJCW9wX3N0YXRzLT5SeF9EYXRhX2Rpc2NhcmRfbG9uZ19jb3VudCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU2VuZCBwYWNrZXQuCi0gKglSZXR1cm46CTAgLSBvLmsuCi0gKgkJMSAtIG5vIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfc2VuZCAoc2RsYV90KiBjYXJkLCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4pCi17Ci0JQ0hETENfREFUQV9UWF9TVEFUVVNfRUxfU1RSVUNUICp0eGJ1ZiA9IGNhcmQtPnUuYy50eGJ1ZjsKLQotCWlmICh0eGJ1Zi0+b3BwX2ZsYWcpCi0JCXJldHVybiAxOwotCQotCXNkbGFfcG9rZSgmY2FyZC0+aHcsIHR4YnVmLT5wdHJfZGF0YV9iZnIsIGRhdGEsIGxlbik7Ci0KLQl0eGJ1Zi0+ZnJhbWVfbGVuZ3RoID0gbGVuOwotCXR4YnVmLT5vcHBfZmxhZyA9IDE7CQkvKiBzdGFydCB0cmFuc21pc3Npb24gKi8KLQkKLQkvKiBVcGRhdGUgdHJhbnNtaXQgYnVmZmVyIGNvbnRyb2wgZmllbGRzICovCi0JY2FyZC0+dS5jLnR4YnVmID0gKyt0eGJ1ZjsKLQotCWlmICgodm9pZCopdHhidWYgPiBjYXJkLT51LmMudHhidWZfbGFzdCkKLQkJY2FyZC0+dS5jLnR4YnVmID0gY2FyZC0+dS5jLnR4YnVmX2Jhc2U7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiBGaXJtd2FyZSBFcnJvciBIYW5kbGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlybXdhcmUgZXJyb3IgaGFuZGxlci4KLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgZmlybXdhcmUgY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvCi0gKglyZXR1cm4gY29kZS4KLSAqCi0gKiBSZXR1cm4gemVybyBpZiBwcmV2aW91cyBjb21tYW5kIGhhcyB0byBiZSBjYW5jZWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgY2hkbGNfZXJyb3IgKHNkbGFfdCAqY2FyZCwgaW50IGVyciwgQ0hETENfTUFJTEJPWF9TVFJVQ1QgKm1iKQotewotCXVuc2lnbmVkIGNtZCA9IG1iLT5jb21tYW5kOwotCi0Jc3dpdGNoIChlcnIpIHsKLQotCWNhc2UgQ01EX1RJTUVPVVQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbW1hbmQgMHglMDJYIHRpbWVkIG91dCFcbiIsCi0JCQljYXJkLT5kZXZuYW1lLCBjbWQpOwotCQlicmVhazsKLQotCWNhc2UgUzUxNF9CT1RIX1BPUlRTX1NBTUVfQ0xLX01PREU6Ci0JCWlmKGNtZCA9PSBTRVRfQ0hETENfQ09ORklHVVJBVElPTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICIlczogQ29uZmlndXJlIGJvdGggcG9ydHMgZm9yIHRoZSBzYW1lIGNsb2NrIHNvdXJjZVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogY29tbWFuZCAweCUwMlggcmV0dXJuZWQgMHglMDJYIVxuIiwKLQkJCWNhcmQtPmRldm5hbWUsIGNtZCwgZXJyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKiBJbnRlcnJ1cHQgSGFuZGxlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2lzY28gSERMQyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotICovCi1TVEFUSUMgdm9pZCB3c3BwcF9pc3IgKHNkbGFfdCogY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QqIGZsYWdzID0gTlVMTDsKLQlpbnQgaTsKLQlzZGxhX3QgKm15X2NhcmQ7Ci0KLQotCS8qIENoZWNrIGZvciB3aGljaCBwb3J0IHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gZ2VuZXJhdGVkCi0JICogU2luY2UgU2Vjb25kYXJ5IFBvcnQgaXMgcGlnZ3liYWNraW5nIG9uIHRoZSBQcmltYXJ5Ci0gICAgICAgICAqIHRoZSBjaGVjayBtdXN0IGJlIGRvbmUgaGVyZS4gCi0JICovCi0KLQlmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlpZiAoIWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkvKiBDaGVjayBmb3IgYSBzZWNvbmQgcG9ydCAocGlnZ3liYWNraW5nKSAqLwotCQlpZigobXlfY2FyZCA9IGNhcmQtPm5leHQpKXsKLQkJCWZsYWdzID0gbXlfY2FyZC0+dS5jLmZsYWdzOwotCQkJaWYgKGZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3R5cGUpewotCQkJCWNhcmQgPSBteV9jYXJkOwotCQkJCWNhcmQtPmlzcihjYXJkKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNhcmQtPmluX2lzciA9IDE7Ci0JZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0JCQotCS8qIElmIHdlIGdldCBhbiBpbnRlcnJ1cHQgd2l0aCBubyBuZXR3b3JrIGRldmljZSwgc3RvcCB0aGUgaW50ZXJydXB0cwotCSAqIGFuZCBpc3N1ZSBhbiBlcnJvciAqLwotCWlmICgoIWRldiB8fCAhZGV2LT5wcml2KSAmJiBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LmludGVycnVwdF90eXBlICE9IAotCSAgICAJQ09NTUFORF9DT01QTEVURV9BUFBfSU5UX1BFTkQpewotCQlnb3RvIGlzcl9kb25lOwotCX0KLQotCQotCS8qIGlmIGNyaXRpY2FsIGR1ZSB0byBwZXJpcGhlcmFsIG9wZXJhdGlvbnMKLQkgKiBpZS4gdXBkYXRlKCkgb3IgZ2V0c3RhdHMoKSB0aGVuIHJlc2V0IHRoZSBpbnRlcnJ1cHQgYW5kCi0JICogd2FpdCBmb3IgdGhlIGJvYXJkIHRvIHJldHJpZ2dlci4KLQkgKi8KLQlpZih0ZXN0X2JpdChQRVJJX0NSSVQsICh2b2lkKikmY2FyZC0+d2FuZGV2LmNyaXRpY2FsKSkgewotCQlmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LgotCQkJCQlpbnRlcnJ1cHRfdHlwZSA9IDA7Ci0JCWdvdG8gaXNyX2RvbmU7Ci0JfQotCi0KLQkvKiBPbiBhIDUwOCBDYXJkLCBpZiBjcml0aWNhbCBkdWUgdG8gaWZfc2VuZCAKLSAgICAgICAgICogTWFqb3IgRXJyb3IgISEhCi0JICovCi0JaWYoY2FyZC0+aHcudHlwZSAhPSBTRExBX1M1MTQpIHsKLQkJaWYodGVzdF9iaXQoMCwgKHZvaWQqKSZjYXJkLT53YW5kZXYuY3JpdGljYWwpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ3JpdGljYWwgd2hpbGUgaW4gSVNSOiAlbHhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgY2FyZC0+d2FuZGV2LmNyaXRpY2FsKTsKLQkJCWdvdG8gaXNyX2RvbmU7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2goZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSkgewotCi0JCWNhc2UgUlhfQVBQX0lOVF9QRU5EOgkvKiAweDAxOiByZWNlaXZlIGludGVycnVwdCAqLwotCQkJcnhfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVFhfQVBQX0lOVF9QRU5EOgkvKiAweDAyOiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQkJCWZsYWdzLT5pbnRlcnJ1cHRfaW5mb19zdHJ1Y3QuaW50ZXJydXB0X3Blcm1pc3Npb24gJj0KLQkJCQkgfkFQUF9JTlRfT05fVFhfRlJBTUU7Ci0KLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ09NTUFORF9DT01QTEVURV9BUFBfSU5UX1BFTkQ6LyogMHgwNDogY21kIGNwbHQgKi8KLQkJCSsrIEludHJfdGVzdF9jb3VudGVyOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDSERMQ19FWENFUF9DT05EX0FQUF9JTlRfUEVORDoJLyogMHgyMCAqLwotCQkJcHJvY2Vzc19jaGRsY19leGNlcHRpb24oY2FyZCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEdMT0JBTF9FWENFUF9DT05EX0FQUF9JTlRfUEVORDoKLQkJCXByb2Nlc3NfZ2xvYmFsX2V4Y2VwdGlvbihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElNRVJfQVBQX0lOVF9QRU5EOgotCQkJdGltZXJfaW50cihjYXJkKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogc3B1cmlvdXMgaW50ZXJydXB0IDB4JTAyWCFcbiIsIAotCQkJCWNhcmQtPmRldm5hbWUsCi0JCQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJDb2RlIG5hbWU6ICIpOwotCQkJZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlYyIsCi0JCQkJCWZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZW5hbWVbaV0pOyAKLQkJCXByaW50ayhLRVJOX0lORk8gIlxuQ29kZSB2ZXJzaW9uOiAiKTsKLQkJCWZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJWMiLCAKLQkJCQkJZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RldmVyc2lvbltpXSk7IAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsJCi0JCQlicmVhazsKLQl9Ci0KLWlzcl9kb25lOgotCWNhcmQtPmluX2lzciA9IDA7Ci0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfdHlwZSA9IDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUmVjZWl2ZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqLwotc3RhdGljIHZvaWQgcnhfaW50ciAoc2RsYV90KiBjYXJkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JY2hkbGNfcHJpdmF0ZV9hcmVhX3QgKmNoZGxjX3ByaXZfYXJlYTsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQlDSERMQ19EQVRBX1JYX1NUQVRVU19FTF9TVFJVQ1QgKnJ4YnVmID0gY2FyZC0+dS5jLnJ4bWI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsZW47Ci0JdW5zaWduZWQgYWRkciA9IHJ4YnVmLT5wdHJfZGF0YV9iZnI7Ci0Jdm9pZCAqYnVmOwotCWludCBpLHVkcF90eXBlOwotCQotCWlmIChyeGJ1Zi0+b3BwX2ZsYWcgIT0gMHgwMSkgewotCQlwcmludGsoS0VSTl9JTkZPIAotCQkJIiVzOiBjb3JydXB0ZWQgUnggYnVmZmVyIEAgMHglWCwgZmxhZyA9IDB4JTAyWCFcbiIsIAotCQkJY2FyZC0+ZGV2bmFtZSwgKHVuc2lnbmVkKXJ4YnVmLCByeGJ1Zi0+b3BwX2ZsYWcpOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkNvZGUgbmFtZTogIik7Ci0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSArKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MtPmdsb2JhbF9pbmZvX3N0cnVjdC5jb2RlbmFtZVtpXSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiXG5Db2RlIHZlcnNpb246ICIpOwotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkgKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLT5nbG9iYWxfaW5mb19zdHJ1Y3QuY29kZXZlcnNpb25baV0pOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQotCQkvKiBCdWcgRml4OiBNYXIgNiAyMDAwCi0gICAgICAgICAgICAgICAgICogSWYgd2UgZ2V0IGEgY29ycnVwdGVkIG1haWxib3gsIGl0IG1lYXNuIHRoYXQgZHJpdmVyIAotICAgICAgICAgICAgICAgICAqIGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGZpcm13YXJlLiBUaGVyZSBpcyBubyByZWNvdmVyeS4KLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyBmb3IgdGhpcyBjYXJkCi0gICAgICAgICAgICAgICAgICogdGhlIG1hY2hpbmUgd2lsbCBjcmFzaC4gCi0gICAgICAgICAgICAgICAgICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDcml0aWNhbCByb3V0ZXIgZmFpbHVyZSAuLi4hISFcbiIsIGNhcmQtPmRldm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICJQbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyAhXG4iKTsKLQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwkKLQkJcmV0dXJuOwotCX0KLQotCWRldiA9IGNhcmQtPndhbmRldi5kZXY7Ci0KLQlpZiAoIWRldil7IAotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKXsKLQkJZ290byByeF9leGl0OwotCX0KLQotCWNoZGxjX3ByaXZfYXJlYSA9IGRldi0+cHJpdjsKLQotCWlmIChyeGJ1Zi0+ZXJyb3JfZmxhZyl7CQotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQotCS8qIFRha2Ugb2ZmIHR3byBDUkMgYnl0ZXMgKi8KLQotCWlmIChyeGJ1Zi0+ZnJhbWVfbGVuZ3RoIDwgNyB8fCByeGJ1Zi0+ZnJhbWVfbGVuZ3RoID4gMTUwNiApewotCQlnb3RvIHJ4X2V4aXQ7Ci0JfQkKLQotCWxlbiA9IHJ4YnVmLT5mcmFtZV9sZW5ndGggLSBDUkNfTEVOR1RIOwotCi0JLyogQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKLQotCWlmIChza2IgPT0gTlVMTCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKXsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLAotCQkJCQkJY2FyZC0+ZGV2bmFtZSk7Ci0JCX0KLQkJKytjYXJkLT53YW5kZXYuc3RhdHMucnhfZHJvcHBlZDsKLQkJZ290byByeF9leGl0OwotCX0KLQotCS8qIENvcHkgZGF0YSB0byB0aGUgc29ja2V0IGJ1ZmZlciAqLwotCWlmKChhZGRyICsgbGVuKSA+IGNhcmQtPnUuYy5yeF90b3AgKyAxKSB7Ci0JCXVuc2lnbmVkIHRtcCA9IGNhcmQtPnUuYy5yeF90b3AgLSBhZGRyICsgMTsKLQkJYnVmID0gc2tiX3B1dChza2IsIHRtcCk7Ci0JCXNkbGFfcGVlaygmY2FyZC0+aHcsIGFkZHIsIGJ1ZiwgdG1wKTsKLQkJYWRkciA9IGNhcmQtPnUuYy5yeF9iYXNlOwotCQlsZW4gLT0gdG1wOwotCX0KLQkJCi0JYnVmID0gc2tiX3B1dChza2IsIGxlbik7Ci0Jc2RsYV9wZWVrKCZjYXJkLT5odywgYWRkciwgYnVmLCBsZW4pOwotCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1dBTl9QUFApOwotCi0JY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X3BhY2tldHMgKys7Ci0JY2FyZC0+d2FuZGV2LnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXVkcF90eXBlID0gdWRwX3BrdF90eXBlKCBza2IsIGNhcmQgKTsKLQotCWlmKHVkcF90eXBlID09IFVEUF9DUElQRV9UWVBFKSB7Ci0JCWlmKHN0b3JlX3VkcF9tZ210X3BrdChVRFBfUEtUX0ZSTV9ORVRXT1JLLAotICAgCQkJCSAgICAgIGNhcmQsIHNrYiwgZGV2LCBjaGRsY19wcml2X2FyZWEpKSB7Ci0gICAgIAkJICAgICAgICBmbGFncy0+aW50ZXJydXB0X2luZm9fc3RydWN0LgotCQkJCQkJaW50ZXJydXB0X3Blcm1pc3Npb24gfD0gCi0JCQkJCQkJQVBQX0lOVF9PTl9USU1FUjsgCi0JCX0KLQl9ZWxzZXsKLSAgICAgICAgICAgICAgIAkvKiBQYXNzIGl0IHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotICAgICAgICAgICAgICAgIHNrYi0+ZGV2ID0gZGV2OwotICAgICAgICAgICAgICAgIHNrYi0+bWFjLnJhdyAgPSBza2ItPmRhdGE7Ci0gICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLSAgICAgICAgICAgICAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCX0KLQotcnhfZXhpdDoKLQkvKiBSZWxlYXNlIGJ1ZmZlciBlbGVtZW50IGFuZCBjYWxjdWxhdGUgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9uZSAqLwotCXJ4YnVmLT5vcHBfZmxhZyA9IDB4MDA7Ci0JY2FyZC0+dS5jLnJ4bWIgPSArKyByeGJ1ZjsKLQlpZigodm9pZCopcnhidWYgPiBjYXJkLT51LmMucnhidWZfbGFzdCl7Ci0JCWNhcmQtPnUuYy5yeG1iID0gY2FyZC0+dS5jLnJ4YnVmX2Jhc2U7Ci0JfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRpbWVyIGludGVycnVwdCBoYW5kbGVyLgotICogVGhlIHRpbWVyIGludGVycnVwdCBpcyB1c2VkIGZvciB0d28gcHVycG9zZXM6Ci0gKiAgICAxKSBQcm9jZXNzaW5nIHVkcCBjYWxscyBmcm9tICdjcGlwZW1vbicuCi0gKiAgICAyKSBSZWFkaW5nIGJvYXJkLWxldmVsIHN0YXRpc3RpY3MgZm9yIHVwZGF0aW5nIHRoZSBwcm9jIGZpbGUgc3lzdGVtLgotICovCi12b2lkIHRpbWVyX2ludHIoc2RsYV90ICpjYXJkKQotewotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OwotICAgICAgICBjaGRsY19wcml2YXRlX2FyZWFfdCogY2hkbGNfcHJpdl9hcmVhID0gTlVMTDsKLSAgICAgICAgU0hBUkVEX01FTU9SWV9JTkZPX1NUUlVDVCogZmxhZ3MgPSBOVUxMOwotCi0gICAgICAgIGRldiA9IGNhcmQtPndhbmRldi5kZXY7IAotICAgICAgICBjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLQlpZiAoY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmIFRNUl9JTlRfRU5BQkxFRF9DT05GSUcpIHsKLQkJaWYgKCFjb25maWdfY2hkbGMoY2FyZCkpewotCQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX0NPTkZJRzsKLQkJfQotCX0KLQkKLQkvKiBwcm9jZXNzIGEgdWRwIGNhbGwgaWYgcGVuZGluZyAqLwotICAgICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICYgVE1SX0lOVF9FTkFCTEVEX1VEUCkgewotICAgICAgICAgICAgICAgCXByb2Nlc3NfdWRwX21nbXRfcGt0KGNhcmQsIGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hkbGNfcHJpdl9hcmVhKTsKLQkJY2hkbGNfcHJpdl9hcmVhLT50aW1lcl9pbnRfZW5hYmxlZCAmPSB+VE1SX0lOVF9FTkFCTEVEX1VEUDsKLSAgICAgICAgfQotCQotCi0JLyogcmVhZCB0aGUgY29tbXVuaWNhdGlvbnMgc3RhdGlzdGljcyBpZiByZXF1aXJlZCAqLwotCWlmKGNoZGxjX3ByaXZfYXJlYS0+dGltZXJfaW50X2VuYWJsZWQgJiBUTVJfSU5UX0VOQUJMRURfVVBEQVRFKSB7Ci0JCXVwZGF0ZV9jb21tc19zdGF0cyhjYXJkLCBjaGRsY19wcml2X2FyZWEpOwotICAgICAgICAgICAgICAgIGlmKCEoLS0gY2hkbGNfcHJpdl9hcmVhLT51cGRhdGVfY29tbXNfc3RhdHMpKSB7Ci0JCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkICY9IAotCQkJCX5UTVJfSU5UX0VOQUJMRURfVVBEQVRFOwotCQl9Ci0gICAgICAgIH0KLQotCS8qIG9ubHkgZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IGlmIHRoZXJlIGFyZSBubyB1ZHAgb3Igc3RhdGlzdGljICovCi0JLyogdXBkYXRlcyBwZW5kaW5nICovCi0gICAgICAgIGlmKCFjaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgPSBjYXJkLT51LmMuZmxhZ3M7Ci0gICAgICAgICAgICAgICAgZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPQotICAgICAgICAgICAgICAgICAgICAgICAgfkFQUF9JTlRfT05fVElNRVI7Ci0gICAgICAgIH0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgTWlzY2VsbGFuZW91cyBGdW5jdGlvbnMKLQktIHNldF9jaGRsY19jb25maWcoKSB1c2VkIHRvIHNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhlIGJvYXJkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW50IHNldF9jaGRsY19jb25maWcoc2RsYV90KiBjYXJkKQotewotCi0JQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgY2ZnOwotCi0JbWVtc2V0KCZjZmcsIDAsIHNpemVvZihDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCkpOwotCi0JaWYoY2FyZC0+d2FuZGV2LmNsb2NraW5nKQotCQljZmcuYmF1ZF9yYXRlID0gY2FyZC0+d2FuZGV2LmJwczsKLQotCWNmZy5saW5lX2NvbmZpZ19vcHRpb25zID0gKGNhcmQtPndhbmRldi5pbnRlcmZhY2UgPT0gV0FOT1BUX1JTMjMyKSA/Ci0JCUlOVEVSRkFDRV9MRVZFTF9SUzIzMiA6IElOVEVSRkFDRV9MRVZFTF9WMzU7Ci0KLQljZmcubW9kZW1fY29uZmlnX29wdGlvbnMJPSAwOwotCS8vQVBJIE9QVElPTlMKLQljZmcuQ0hETENfQVBJX29wdGlvbnMJCT0gRElTQ0FSRF9SWF9FUlJPUl9GUkFNRVM7Ci0JY2ZnLm1vZGVtX3N0YXR1c190aW1lcgkJPSAxMDA7Ci0JY2ZnLkNIRExDX3Byb3RvY29sX29wdGlvbnMJPSBIRExDX1NUUkVBTUlOR19NT0RFOwotCWNmZy5wZXJjZW50X2RhdGFfYnVmZmVyX2Zvcl9UeCAgPSA1MDsKLQljZmcuQ0hETENfc3RhdGlzdGljc19vcHRpb25zCT0gKENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUIHwKLQkJQ0hETENfUlhfREFUQV9CWVRFX0NPVU5UX1NUQVQpOwotCWNmZy5tYXhfQ0hETENfZGF0YV9maWVsZF9sZW5ndGgJPSBjYXJkLT53YW5kZXYubXR1OwotCi0JY2ZnLnRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lcgk9IDA7Ci0JY2ZnLnJlY2VpdmVfa2VlcGFsaXZlX3RpbWVyCT0gMDsKLQljZmcua2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZQk9IDA7Ci0JY2ZnLlNMQVJQX3JlcXVlc3RfdGltZXIJCT0gMDsKLQotCWNmZy5JUF9hZGRyZXNzCQk9IDA7Ci0JY2ZnLklQX25ldG1hc2sJCT0gMDsKLQkKLQlyZXR1cm4gY2hkbGNfY29uZmlndXJlKGNhcmQsICZjZmcpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByb2Nlc3MgZ2xvYmFsIGV4Y2VwdGlvbiBjb25kaXRpb24KLSAqLwotc3RhdGljIGludCBwcm9jZXNzX2dsb2JhbF9leGNlcHRpb24oc2RsYV90ICpjYXJkKQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYm94ID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyOwotCi0JbWJveC0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWJveC0+Y29tbWFuZCA9IFJFQURfR0xPQkFMX0VYQ0VQVElPTl9DT05ESVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1ib3gpID8gbWJveC0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQotCWlmKGVyciAhPSBDTURfVElNRU9VVCApewotCQotCQlzd2l0Y2gobWJveC0+cmV0dXJuX2NvZGUpIHsKLSAgICAgICAgIAotCSAgICAgIAljYXNlIEVYQ0VQX01PREVNX1NUQVRVU19DSEFOR0U6Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb2RlbSBzdGF0dXMgY2hhbmdlXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCi0JCQlzd2l0Y2gobWJveC0+ZGF0YVswXSAmIChEQ0RfSElHSCB8IENUU19ISUdIKSkgewotCQkJCWNhc2UgKERDRF9ISUdIKToKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBoaWdoLCBDVFMgbG93XG4iLGNhcmQtPmRldm5hbWUpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIChDVFNfSElHSCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDRCBsb3csIENUUyBoaWdoXG4iLGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoRENEX0hJR0ggfCBDVFNfSElHSCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBEQ0QgaGlnaCwgQ1RTIGhpZ2hcbiIsY2FyZC0+ZGV2bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogRENEIGxvdywgQ1RTIGxvd1xuIixjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJCX0KLQotCQkJaWYgKCEobWJveC0+ZGF0YVswXSAmIERDRF9ISUdIKSB8fCAhKG1ib3gtPmRhdGFbMF0gJiBEQ0RfSElHSCkpewotCQkJCS8vcHJpbnRrKEtFUk5fSU5GTyAiU2VuZGluZyBURVJNIFJlcXVlc3QgTWFudWFsbHkgIVxuIik7Ci0JCQkJc2VuZF9wcHBfdGVybV9yZXF1ZXN0KGNhcmQtPndhbmRldi5kZXYpOwotCQkJfQkKLQkJCWJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBFWENFUF9UUkNfRElTQUJMRUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTGluZSB0cmFjZSBkaXNhYmxlZFxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JCWNhc2UgRVhDRVBfSVJRX1RJTUVPVVQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogSVJRIHRpbWVvdXQgb2NjdXJyZWRcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSk7IAotCQkJYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEdsb2JhbCBleGNlcHRpb24gJXhcbiIsCi0JCQkJY2FyZC0+ZGV2bmFtZSwgbWJveC0+cmV0dXJuX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFByb2Nlc3MgY2hkbGMgZXhjZXB0aW9uIGNvbmRpdGlvbgotICovCi1zdGF0aWMgaW50IHByb2Nlc3NfY2hkbGNfZXhjZXB0aW9uKHNkbGFfdCAqY2FyZCkKLXsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCogbWIgPSBjYXJkLT5tYm94OwotCWludCBlcnI7Ci0KLQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JbWItPmNvbW1hbmQgPSBSRUFEX0NIRExDX0VYQ0VQVElPTl9DT05ESVRJT047Ci0JZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCWlmKGVyciAhPSBDTURfVElNRU9VVCkgewotCQotCQlzd2l0Y2ggKGVycikgewotCi0JCWNhc2UgRVhDRVBfTElOS19BQ1RJVkU6Ci0JCQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fQ09OTkVDVEVEKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRVhDRVBfTElOS19JTkFDVElWRV9NT0RFTToKLQkJCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9ESVNDT05ORUNURUQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBFWENFUF9MT09QQkFDS19DT05ESVRJT046Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTG9vcGJhY2sgQ29uZGl0aW9uIERldGVjdGVkLlxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBOT19DSERMQ19FWENFUF9DT05EX1RPX1JFUE9SVDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBleGNlcHRpb25zIHJlcG9ydGVkLlxuIiwKLQkJCQkJCWNhcmQtPmRldm5hbWUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogRXhjZXB0aW9uIENvbmRpdGlvbiAleCFcbiIsCi0JCQkJCWNhcmQtPmRldm5hbWUsZXJyKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogU3RvcmUgYSBVRFAgbWFuYWdlbWVudCBwYWNrZXQgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCi0gKi8KLQotc3RhdGljIGludCBzdG9yZV91ZHBfbWdtdF9wa3QoY2hhciB1ZHBfcGt0X3NyYywgc2RsYV90KiBjYXJkLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLQkJCSAgICAgIGNoZGxjX3ByaXZhdGVfYXJlYV90KiBjaGRsY19wcml2X2FyZWEgKQotewotCWludCB1ZHBfcGt0X3N0b3JlZCA9IDA7Ci0KLQlpZighY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2xndGggJiYKLQkgIChza2ItPmxlbiA8PSBNQVhfTEdUSF9VRFBfTUdOVF9QS1QpKSB7Ci0gICAgICAgIAljaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IHNrYi0+bGVuOwotCQljaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID0gdWRwX3BrdF9zcmM7Ci0gICAgICAgCQltZW1jcHkoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQljaGRsY19wcml2X2FyZWEtPnRpbWVyX2ludF9lbmFibGVkID0gVE1SX0lOVF9FTkFCTEVEX1VEUDsKLQkJdWRwX3BrdF9zdG9yZWQgPSAxOwotCX0KLQotCWlmKHVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX1NUQUNLKQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCWVsc2UKLSAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQotCXJldHVybih1ZHBfcGt0X3N0b3JlZCk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUHJvY2VzcyBVRFAgbWFuYWdlbWVudCBwYWNrZXQuCi0gKi8KLQotc3RhdGljIGludCBwcm9jZXNzX3VkcF9tZ210X3BrdChzZGxhX3QqIGNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCi0JCQkJY2hkbGNfcHJpdmF0ZV9hcmVhX3QqIGNoZGxjX3ByaXZfYXJlYSApIAotewotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgZnJhbWVzLCBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCwgcmVhbF9sZW47Ci0JdW5zaWduZWQgbG9uZyBkYXRhX3B0cjsKLQl1bnNpZ25lZCBkYXRhX2xlbmd0aDsKLQlpbnQgdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQlDSERMQ19NQUlMQk9YX1NUUlVDVCAqbWIgPSBjYXJkLT5tYm94OwotCVNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1QgKmZsYWdzID0gY2FyZC0+dS5jLmZsYWdzOwotCWNoZGxjX3VkcF9wa3RfdCAqY2hkbGNfdWRwX3BrdDsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlpbnQgZXJyOwotCWNoYXIgdXRfY2hhcjsKLQotCWNoZGxjX3VkcF9wa3QgPSAoY2hkbGNfdWRwX3BrdF90ICopIGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhOwotCi0JaWYoY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X3NyYyA9PSBVRFBfUEtUX0ZSTV9ORVRXT1JLKSB7Ci0KLQkJc3dpdGNoKGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kKSB7Ci0JCQljYXNlIFJFQURfR0xPQkFMX1NUQVRJU1RJQ1M6Ci0JCQljYXNlIFJFQURfTU9ERU1fU1RBVFVTOiAgCi0JCQljYXNlIFJFQURfQ0hETENfTElOS19TVEFUVVM6Ci0JCQljYXNlIENQSVBFX1JPVVRFUl9VUF9USU1FOgotCQkJY2FzZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTOgotCQkJY2FzZSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTOgotCi0JCQkvKiBUaGVzZSB0d28gY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGZvcgotCQkJICogZWFjaCByZXF1ZXN0ICovCi0JCQljYXNlIFJFQURfQ0hETENfQ09ORklHVVJBVElPTjoKLQkJCWNhc2UgUkVBRF9DSERMQ19DT0RFX1ZFUlNJT046Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdWRwX21nbXRfcmVxX3ZhbGlkID0gMDsKLQkJCQlicmVhazsKLQkJfSAKLQl9Ci0JCi0gIAlpZighdWRwX21nbXRfcmVxX3ZhbGlkKSB7Ci0KLQkJLyogc2V0IGxlbmd0aCB0byAwICovCi0JCWNoZGxjX3VkcF9wa3QtPmNibG9jay5idWZmZXJfbGVuZ3RoID0gMDsKLQotICAgIAkJLyogc2V0IHJldHVybiBjb2RlICovCi0JCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IDB4Q0Q7Ci0KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSl7CQotCQkJcHJpbnRrKEtFUk5fSU5GTyAKLQkJCSIlczogV2FybmluZywgSWxsZWdhbCBVRFAgY29tbWFuZCBhdHRlbXB0ZWQgZnJvbSBuZXR3b3JrOiAleFxuIiwKLQkJCWNhcmQtPmRldm5hbWUsY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpOwotCQl9Ci0KLSAgIAl9IGVsc2UgewotCSAgIAl1bnNpZ25lZCBsb25nIHRyYWNlX3N0YXR1c19jZmdfYWRkciA9IDA7Ci0JCVRSQUNFX1NUQVRVU19FTF9DRkdfU1RSVUNUIHRyYWNlX2NmZ19zdHJ1Y3Q7Ci0JCVRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVCB0cmFjZV9lbGVtZW50X3N0cnVjdDsKLQotCQlzd2l0Y2goY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLmNvbW1hbmQpIHsKLQotCQljYXNlIENQSVBFX0VOQUJMRV9UUkFDSU5HOgotCQkgICAgIGlmICghY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCi0JCQkvKiBPUEVSQVRFX0RBVEFMSU5FX01PTklUT1IgKi8KLQotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBzaXplb2YoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUKTsKLQkJCW1iLT5jb21tYW5kID0gU0VUX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0KLSAgICAJCQkoKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0JCQkJdHJhY2VfY29uZmlnID0gVFJBQ0VfQUNUSVZFOwotCQkJLyogVHJhY2UgZGVsYXkgbW9kZSBpcyBub3QgdXNlZCBiZWNhdXNlIGl0IHNsb3dzCi0JCQkgICBkb3duIHRyYW5zZmVyIGFuZCByZXN1bHRzIGluIGEgc3RhbmRvZmYgc2l0dWF0aW9uCi0JCQkgICB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIGRhdGEgKi8KLQotCQkJLyogQ29uZmlndXJlIHRoZSBUcmFjZSBiYXNlZCBvbiB1c2VyIGlucHV0cyAqLwotCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPnRyYWNlX2NvbmZpZyB8PSAKLQkJCQkJY2hkbGNfdWRwX3BrdC0+ZGF0YVswXTsKLQotCQkJKChMSU5FX1RSQUNFX0NPTkZJR19TVFJVQ1QgKiltYi0+ZGF0YSktPgotCQkJICAgdHJhY2VfZGVhY3RpdmF0aW9uX3RpbWVyID0gNDAwMDsKLQotCi0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCQkJY2FyZC0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IGVycjsKLQkJCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQkJYnJlYWs7Ci0JICAgIAkJfSAKLQotCQkJLyogR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRyYWNlIGVsZW1lbnQgbGlzdCAqLwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJbWItPmNvbW1hbmQgPSBSRUFEX1RSQUNFX0NPTkZJR1VSQVRJT047Ci0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQkJCWlmIChlcnIgIT0gQ09NTUFORF9PSykgewotCQkJCWNoZGxjX2Vycm9yKGNhcmQsZXJyLG1iKTsKLQkJCQljaGRsY19wcml2X2FyZWEtPlRyYWNpbmdFbmFibGVkID0gMDsKLQkJCQljaGRsY191ZHBfcGt0LT5jYmxvY2sucmV0dXJuX2NvZGUgPSBlcnI7Ci0JCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkJCWJyZWFrOwotCSAgICAJCX0gCQotCi0JICAgCQl0cmFjZV9zdGF0dXNfY2ZnX2FkZHIgPSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopCi0JCQkJbWItPmRhdGEpIC0+IHB0cl90cmFjZV9zdGF0X2VsX2NmZ19zdHJ1Y3Q7Ci0KLQkJCXNkbGFfcGVlaygmY2FyZC0+aHcsIHRyYWNlX3N0YXR1c19jZmdfYWRkciwKLQkJCQkgJnRyYWNlX2NmZ19zdHJ1Y3QsIHNpemVvZih0cmFjZV9jZmdfc3RydWN0KSk7Ci0JCSAgICAKLQkJCWNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkciA9IHRyYWNlX2NmZ19zdHJ1Y3QuCi0JCQkJYmFzZV9hZGRyX3RyYWNlX3N0YXR1c19lbGVtZW50czsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHMgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5udW1iZXJfdHJhY2Vfc3RhdHVzX2VsZW1lbnRzOwotCi0JCQljaGRsY19wcml2X2FyZWEtPmVuZF90cmFjZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJCSgoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUICopCi0JCQkJCSBjaGRsY19wcml2X2FyZWEtPnN0YXJ0X3RyYWNlX2FkZHIgKyAKLQkJCQkJIChjaGRsY19wcml2X2FyZWEtPm51bWJlcl90cmFjZV9lbGVtZW50cyAtIDEpKTsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyID0gCi0JCQkJCXRyYWNlX2NmZ19zdHJ1Y3QuYmFzZV9hZGRyX3RyYWNlX2J1ZmZlcjsKLQotCQkJY2hkbGNfcHJpdl9hcmVhLT5lbmRfYWRkcl90cmFjZV9idWZmZXIgPSAKLQkJCQkJdHJhY2VfY2ZnX3N0cnVjdC5lbmRfYWRkcl90cmFjZV9idWZmZXI7Ci0KLQkJICAgIAljaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciA9IAotCQkJCQl0cmFjZV9jZmdfc3RydWN0Lm5leHRfdHJhY2VfZWxlbWVudF90b191c2U7Ci0KLQkgICAgCQljaGRsY19wcml2X2FyZWEtPmF2YWlsYWJsZV9idWZmZXJfc3BhY2UgPSAyMDAwIC0gCi0JCQkJCQkJCSAgc2l6ZW9mKGlwX3BrdF90KSAtCi0JCQkJCQkJCSAgc2l6ZW9mKHVkcF9wa3RfdCkgLQotCQkJCQkJCSAgICAgIAkgIHNpemVvZih3cF9tZ210X3QpIC0KLQkJCQkJCQkJICBzaXplb2YoY2Jsb2NrX3QpIC0KLQkJCQkJCQkgICAgICAgICAgc2l6ZW9mKHRyYWNlX2luZm9fdCk7CQotCSAgICAgICAJICAgICB9Ci0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJICAgICBtYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JICAgICAgIAkgICAgIGNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAxOwotCSAgICAgICAJICAgICBicmVhazsKLQkgICAKLQotCQljYXNlIENQSVBFX0RJU0FCTEVfVFJBQ0lORzoKLQkJICAgICBpZiAoY2hkbGNfcHJpdl9hcmVhLT5UcmFjaW5nRW5hYmxlZCkgewotCi0JCQkvKiBPUEVSQVRFX0RBVEFMSU5FX01PTklUT1IgKi8KLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKExJTkVfVFJBQ0VfQ09ORklHX1NUUlVDVCk7Ci0JCQltYi0+Y29tbWFuZCA9IFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OOwotICAgIAkJCSgoTElORV9UUkFDRV9DT05GSUdfU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCQl0cmFjZV9jb25maWcgPSBUUkFDRV9JTkFDVElWRTsKLQkJCWVyciA9IHNkbGFfZXhlYyhtYikgPyBtYi0+cmV0dXJuX2NvZGUgOiBDTURfVElNRU9VVDsKLQkJICAgICB9CQkKLQotCQkgICAgIGNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQgPSAwOwotCQkgICAgIGNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IENPTU1BTkRfT0s7Ci0JCSAgICAgbWItPmJ1ZmZlcl9sZW5ndGggPSAwOwotCQkgICAgIGJyZWFrOwotCSAgIAotCi0JCWNhc2UgQ1BJUEVfR0VUX1RSQUNFX0lORk86Ci0KLQkJICAgICBpZiAoIWNoZGxjX3ByaXZfYXJlYS0+VHJhY2luZ0VuYWJsZWQpIHsKLQkJCWNoZGxjX3VkcF9wa3QtPmNibG9jay5yZXR1cm5fY29kZSA9IDE7Ci0JCQltYi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0JCQlicmVhazsKLQkJICAgICB9Ci0KLSAgCQkgICAgIGNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDA7Ci0JCSAgICAgYnVmZmVyX2xlbmd0aCA9IDA7CS8qIG9mZnNldCBvZiBwYWNrZXQgYWxyZWFkeSBvY2N1cGllZCAqLwotCi0JCSAgICAgZm9yIChmcmFtZXM9MDsgZnJhbWVzIDwgY2hkbGNfcHJpdl9hcmVhLT5udW1iZXJfdHJhY2VfZWxlbWVudHM7IGZyYW1lcysrKXsKLQotCQkJdHJhY2VfcGt0X3QgKnRyYWNlX3BrdCA9ICh0cmFjZV9wa3RfdCAqKQotCQkJCSZjaGRsY191ZHBfcGt0LT5kYXRhW2J1ZmZlcl9sZW5ndGhdOwotCi0JCQlzZGxhX3BlZWsoJmNhcmQtPmh3LCBjaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciwKLQkJCSAgIAkgICh1bnNpZ25lZCBjaGFyICopJnRyYWNlX2VsZW1lbnRfc3RydWN0LAotCQkJICAgCSAgc2l6ZW9mKFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVCkpOwotCi0gICAgIAkJCWlmICh0cmFjZV9lbGVtZW50X3N0cnVjdC5vcHBfZmxhZyA9PSAweDAwKSB7Ci0JCQkgCWJyZWFrOwotCQkJfQotCi0JCQkvKiBnZXQgcG9pbnRlciB0byByZWFsIGRhdGEgKi8KLQkJCWRhdGFfcHRyID0gdHJhY2VfZWxlbWVudF9zdHJ1Y3QucHRyX2RhdGFfYmZyOwotCi0JCQkvKiBTZWUgaWYgdGhlcmUgaXMgYWN0dWFsIGRhdGEgb24gdGhlIHRyYWNlIGJ1ZmZlciAqLwotCQkJaWYgKGRhdGFfcHRyKXsKLQkJCQlkYXRhX2xlbmd0aCA9IHRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX2xlbmd0aDsKLQkJCX1lbHNlewotCQkJCWRhdGFfbGVuZ3RoID0gMDsKLQkJCQljaGRsY191ZHBfcGt0LT50cmFjZV9pbmZvLmlzbW9yZWRhdGEgPSAweDAxOwotCQkJfQotCQotICAgCQkJaWYoIChjaGRsY19wcml2X2FyZWEtPmF2YWlsYWJsZV9idWZmZXJfc3BhY2UgLSBidWZmZXJfbGVuZ3RoKQotCQkJCTwgKCBzaXplb2YodHJhY2VfcGt0X3QpICsgZGF0YV9sZW5ndGgpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGUgdGhlcmUgYXJlIG1vcmUgZnJhbWVzIG9uIGJvYXJkICYgZXhpdCAqLwotCQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotCQkJdHJhY2VfcGt0LT5zdGF0dXMgPSB0cmFjZV9lbGVtZW50X3N0cnVjdC50cmFjZV90eXBlOwotCi0JCQl0cmFjZV9wa3QtPnRpbWVfc3RhbXAgPQotCQkJCXRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX3RpbWVfc3RhbXA7Ci0KLQkJCXRyYWNlX3BrdC0+cmVhbF9sZW5ndGggPQotCQkJCXRyYWNlX2VsZW1lbnRfc3RydWN0LnRyYWNlX2xlbmd0aDsKLQotCQkJLyogc2VlIGlmIHdlIGNhbiBmaXQgdGhlIGZyYW1lIGludG8gdGhlIHVzZXIgYnVmZmVyICovCi0JCQlyZWFsX2xlbiA9IHRyYWNlX3BrdC0+cmVhbF9sZW5ndGg7Ci0KLQkJCWlmIChkYXRhX3B0ciA9PSAwKSB7Ci0JCQkgICAgIAl0cmFjZV9wa3QtPmRhdGFfYXZhaWwgPSAweDAwOwotCQkJfSBlbHNlIHsKLQkJCQl1bnNpZ25lZCB0bXAgPSAwOwotCi0JCQkJLyogZ2V0IHRoZSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyCi0JCQkJICAgIG11c3QgY2hlY2sgZm9yIGVuZCBvZiBidWZmZXIgKi8KLQkJCSAgICAgICAgdHJhY2VfcGt0LT5kYXRhX2F2YWlsID0gMHgwMTsKLQotCQkJCWlmICgoZGF0YV9wdHIgKyByZWFsX2xlbikgPgotCQkJCQkgICAgIGNoZGxjX3ByaXZfYXJlYS0+ZW5kX2FkZHJfdHJhY2VfYnVmZmVyICsgMSl7Ci0KLQkJCQkgICAgCXRtcCA9IGNoZGxjX3ByaXZfYXJlYS0+ZW5kX2FkZHJfdHJhY2VfYnVmZmVyIC0gZGF0YV9wdHIgKyAxOwotCQkJCSAgICAJc2RsYV9wZWVrKCZjYXJkLT5odywgZGF0YV9wdHIsCi0JCQkJCSAgICAgICAJICB0cmFjZV9wa3QtPmRhdGEsdG1wKTsKLQkJCQkgICAgCWRhdGFfcHRyID0gY2hkbGNfcHJpdl9hcmVhLT5iYXNlX2FkZHJfdHJhY2VfYnVmZmVyOwotCQkJCX0KLQkKLQkJICAgICAgICAJc2RsYV9wZWVrKCZjYXJkLT5odywgZGF0YV9wdHIsCi0JCQkJCSAgJnRyYWNlX3BrdC0+ZGF0YVt0bXBdLCByZWFsX2xlbiAtIHRtcCk7Ci0JCQl9CQotCi0JCQkvKiB6ZXJvIHRoZSBvcHAgZmxhZyB0byBzaG93IHdlIGdvdCB0aGUgZnJhbWUgKi8KLQkJCXV0X2NoYXIgPSAweDAwOwotCQkJc2RsYV9wb2tlKCZjYXJkLT5odywgY2hkbGNfcHJpdl9hcmVhLT5jdXJyX3RyYWNlX2FkZHIsICZ1dF9jaGFyLCAxKTsKLQotICAgICAgIAkJCS8qIG5vdyBtb3ZlIG9udG8gdGhlIG5leHQgZnJhbWUgKi8KLSAgICAgICAJCQljaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciArPSBzaXplb2YoVFJBQ0VfU1RBVFVTX0VMRU1FTlRfU1RSVUNUKTsKLQotICAgICAgIAkJCS8qIGNoZWNrIGlmIHdlIHdlbnQgb3ZlciB0aGUgbGFzdCBhZGRyZXNzICovCi0JCQlpZiAoIGNoZGxjX3ByaXZfYXJlYS0+Y3Vycl90cmFjZV9hZGRyID4gY2hkbGNfcHJpdl9hcmVhLT5lbmRfdHJhY2VfYWRkciApIHsKLQkJCQljaGRsY19wcml2X2FyZWEtPmN1cnJfdHJhY2VfYWRkciA9IGNoZGxjX3ByaXZfYXJlYS0+c3RhcnRfdHJhY2VfYWRkcjsKLSAgICAgICAJCQl9Ci0KLSAgICAgICAgICAgIAkJaWYodHJhY2VfcGt0LT5kYXRhX2F2YWlsID09IDB4MDEpIHsKLQkJCQlidWZmZXJfbGVuZ3RoICs9IHJlYWxfbGVuIC0gMTsKLQkJCX0KLQkgCi0JICAgICAgIAkgICAgCS8qIGZvciB0aGUgaGVhZGVyICovCi0JICAgICAgICAgICAgCWJ1ZmZlcl9sZW5ndGggKz0gc2l6ZW9mKHRyYWNlX3BrdF90KTsKLQotCQkgICAgIH0gIC8qIEZvciBMb29wICovCi0KLQkJICAgICBpZiAoZnJhbWVzID09IGNoZGxjX3ByaXZfYXJlYS0+bnVtYmVyX3RyYWNlX2VsZW1lbnRzKXsKLQkJCWNoZGxjX3VkcF9wa3QtPnRyYWNlX2luZm8uaXNtb3JlZGF0YSA9IDB4MDE7Ci0JICAgICAgICAgICAgIH0KLSAJCSAgICAgY2hkbGNfdWRwX3BrdC0+dHJhY2VfaW5mby5udW1fZnJhbWVzID0gZnJhbWVzOwotCQkgCi0gICAgCQkgICAgIG1iLT5idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKLQkJICAgICBjaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7IAotCQkgCi0JCSAgICAgY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsgCi0JCSAgICAgCi0JCSAgICAgYnJlYWs7Ci0KLQotCQljYXNlIENQSVBFX0ZUMV9SRUFEX1NUQVRVUzoKLQkJCSgodW5zaWduZWQgY2hhciAqKWNoZGxjX3VkcF9wa3QtPmRhdGEgKVswXSA9Ci0JCQkJZmxhZ3MtPkZUMV9pbmZvX3N0cnVjdC5wYXJhbGxlbF9wb3J0X0FfaW5wdXQ7Ci0KLQkJCSgodW5zaWduZWQgY2hhciAqKWNoZGxjX3VkcF9wa3QtPmRhdGEgKVsxXSA9Ci0JCQkJZmxhZ3MtPkZUMV9pbmZvX3N0cnVjdC5wYXJhbGxlbF9wb3J0X0JfaW5wdXQ7Ci0JCQkJIAotCQkJY2hkbGNfdWRwX3BrdC0+Y2Jsb2NrLnJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gMjsKLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBDUElQRV9ST1VURVJfVVBfVElNRToKLQkJCWRvX2dldHRpbWVvZmRheSggJnR2ICk7Ci0JCQljaGRsY19wcml2X2FyZWEtPnJvdXRlcl91cF90aW1lID0gdHYudHZfc2VjIC0gCi0JCQkJCWNoZGxjX3ByaXZfYXJlYS0+cm91dGVyX3N0YXJ0X3RpbWU7Ci0JCQkqKHVuc2lnbmVkIGxvbmcgKikmY2hkbGNfdWRwX3BrdC0+ZGF0YSA9IAotCQkJCQljaGRsY19wcml2X2FyZWEtPnJvdXRlcl91cF90aW1lOwkKLQkJCW1iLT5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCQkJYnJlYWs7Ci0KLSAgIAkJY2FzZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTDoKLQkJCS8qIEVuYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAgIAlpZiAoKGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gJiBFTkFCTEVfUkVBRF9GVDFfU1RBVFVTKSB8fCAgCi0JCQkJKGNoZGxjX3VkcF9wa3QtPmRhdGFbMF0gJiBFTkFCTEVfUkVBRF9GVDFfT1BfU1RBVFMpKSB7Ci0JCQkKLQkJCSAgICAgCWlmKCByQ291bnQrKyAhPSAwICkgewotCQkJCQljaGRsY191ZHBfcGt0LT5jYmxvY2suCi0JCQkJCXJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAxOwotCQkgIAkJCWJyZWFrOwotCQkgICAgCSAgICAgCX0KLQkgICAgICAJCX0KLQotCSAgICAgIAkJLyogRGlzYWJsZSBGVDEgTU9OSVRPUiBTVEFUVVMgKi8KLQkgICAgICAJCWlmKCBjaGRsY191ZHBfcGt0LT5kYXRhWzBdID09IDApIHsKLQotCSAgICAgIAkgICAJICAgICAJaWYoIC0tckNvdW50ICE9IDApIHsKLQkJICAJCQljaGRsY191ZHBfcGt0LT5jYmxvY2suCi0JCQkJCXJldHVybl9jb2RlID0gQ09NTUFORF9PSzsKLQkJCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSAxOwotCQkgIAkJCWJyZWFrOwotCSAgIAkgICAgCSAgICAgCX0gCi0JICAgICAgCQl9IAkKLQkKLQkJZGVmYXVsdDoKLQkJCS8qIGl0J3MgYSBib2FyZCBjb21tYW5kICovCi0JCQltYi0+Y29tbWFuZCA9IGNoZGxjX3VkcF9wa3QtPmNibG9jay5jb21tYW5kOwotCQkJbWItPmJ1ZmZlcl9sZW5ndGggPSBjaGRsY191ZHBfcGt0LT5jYmxvY2suYnVmZmVyX2xlbmd0aDsKLQkJCWlmIChtYi0+YnVmZmVyX2xlbmd0aCkgewotCQkJCW1lbWNweSgmbWItPmRhdGEsICh1bnNpZ25lZCBjaGFyICopIGNoZGxjX3VkcF9wa3QtPgotCQkJCQkJCWRhdGEsIG1iLT5idWZmZXJfbGVuZ3RoKTsKLQkgICAgICAJCX0gCi0JCQkvKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIGJvYXJkICovCi0JCQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0JCQlpZiAoZXJyICE9IENPTU1BTkRfT0spIHsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogY29weSB0aGUgcmVzdWx0IGJhY2sgdG8gb3VyIGJ1ZmZlciAqLwotCSAgICAgICAgIAltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmNibG9jaywgbWIsIHNpemVvZihjYmxvY2tfdCkpOyAKLQkJCQotCQkJaWYgKG1iLT5idWZmZXJfbGVuZ3RoKSB7Ci0JICAgICAgICAgCQltZW1jcHkoJmNoZGxjX3VkcF9wa3QtPmRhdGEsICZtYi0+ZGF0YSwgCi0JCQkJCQkJCW1iLT5idWZmZXJfbGVuZ3RoKTsgCi0JICAgICAgCQl9Ci0KLQkJfSAvKiBlbmQgb2Ygc3dpdGNoICovCi0gICAgIAl9IC8qIGVuZCBvZiBlbHNlICovCi0KLSAgICAgCS8qIEZpbGwgVURQIFRUTCAqLwotCWNoZGxjX3VkcF9wa3QtPmlwX3BrdC50dGwgPSBjYXJkLT53YW5kZXYudHRsOyAKLQotICAgICAJbGVuID0gcmVwbHlfdWRwKGNoZGxjX3ByaXZfYXJlYS0+dWRwX3BrdF9kYXRhLCBtYi0+YnVmZmVyX2xlbmd0aCk7Ci0JCi0gICAgIAlpZihjaGRsY19wcml2X2FyZWEtPnVkcF9wa3Rfc3JjID09IFVEUF9QS1RfRlJNX05FVFdPUkspIHsKLQkJaWYoIWNoZGxjX3NlbmQoY2FyZCwgY2hkbGNfcHJpdl9hcmVhLT51ZHBfcGt0X2RhdGEsIGxlbikpIHsKLQkJCSsrIGNhcmQtPndhbmRldi5zdGF0cy50eF9wYWNrZXRzOwotCQkJY2FyZC0+d2FuZGV2LnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKLQkJfQotCX0gZWxzZSB7CQotCQotCQkvKiBQYXNzIGl0IHVwIHRoZSBzdGFjawotICAgIAkJICAgQWxsb2NhdGUgc29ja2V0IGJ1ZmZlciAqLwotCQlpZiAoKG5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbikpICE9IE5VTEwpIHsKLQkJCS8qIGNvcHkgZGF0YSBpbnRvIG5ld19za2IgKi8KLQotIAkgICAgCQlidWYgPSBza2JfcHV0KG5ld19za2IsIGxlbik7Ci0gIAkgICAgCQltZW1jcHkoYnVmLCBjaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfZGF0YSwgbGVuKTsKLQotICAgICAgICAgICAgCQkvKiBEZWNhcHN1bGF0ZSBwa3QgYW5kIHBhc3MgaXQgdXAgdGhlIHByb3RvY29sIHN0YWNrICovCi0JICAgIAkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7Ci0gICAgICAgICAgICAJCW5ld19za2ItPmRldiA9IGRldjsKLQkgICAgCQluZXdfc2tiLT5tYWMucmF3ICA9IG5ld19za2ItPmRhdGE7Ci0JCi0JCQluZXRpZl9yeChuZXdfc2tiKTsKLQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCX0gZWxzZSB7Ci0JICAgIAkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBzb2NrZXQgYnVmZmVycyBhdmFpbGFibGUhXG4iLAotCQkJCQljYXJkLT5kZXZuYW1lKTsKLSAgCQl9Ci0gICAgCX0KLSAKLQljaGRsY19wcml2X2FyZWEtPnVkcF9wa3RfbGd0aCA9IDA7Ci0gCQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEluaXRpYWxpemUgUmVjZWl2ZSBhbmQgVHJhbnNtaXQgQnVmZmVycy4KLSAqLwotCi1zdGF0aWMgdm9pZCBpbml0X2NoZGxjX3R4X3J4X2J1ZmYoc2RsYV90KiBjYXJkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCUNIRExDX01BSUxCT1hfU1RSVUNUKiBtYiA9IGNhcmQtPm1ib3g7Ci0JQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKnR4X2NvbmZpZzsKLQlDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqcnhfY29uZmlnOwotCWNoYXIgZXJyOwotCQotCW1iLT5idWZmZXJfbGVuZ3RoID0gMDsKLQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ORklHVVJBVElPTjsKLQllcnIgPSBzZGxhX2V4ZWMobWIpID8gbWItPnJldHVybl9jb2RlIDogQ01EX1RJTUVPVVQ7Ci0KLQlpZihlcnIgIT0gQ09NTUFORF9PSykgewotCQljaGRsY19lcnJvcihjYXJkLGVycixtYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZihjYXJkLT5ody50eXBlID09IFNETEFfUzUxNCkgewotCQl0eF9jb25maWcgPSAoQ0hETENfVFhfU1RBVFVTX0VMX0NGR19TVFJVQ1QgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgKCgoQ0hETENfQ09ORklHVVJBVElPTl9TVFJVQ1QgKiltYi0+ZGF0YSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9DSERMQ19UeF9zdGF0X2VsX2NmZ19zdHJ1Y3QpKTsKLSAgICAgICAgCXJ4X2NvbmZpZyA9IChDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICAoKChDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVCAqKW1iLT5kYXRhKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCkpOwotCi0gICAgICAgCQkvKiBTZXR1cCBIZWFkIGFuZCBUYWlscyBmb3IgYnVmZmVycyAqLwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICB0eF9jb25maWctPmJhc2VfYWRkcl9UeF9zdGF0dXNfZWxlbWVudHMpOwotICAgICAgICAJY2FyZC0+dS5jLnR4YnVmX2xhc3QgPSAKLQkJKENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVCAqKSAgCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2Jhc2UgKwotCQkodHhfY29uZmlnLT5udW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAgICAgICAgCWNhcmQtPnUuYy5yeGJ1Zl9iYXNlID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0gICAgICAgICAgICAgICAgcnhfY29uZmlnLT5iYXNlX2FkZHJfUnhfc3RhdHVzX2VsZW1lbnRzKTsKLSAgICAgICAgCWNhcmQtPnUuYy5yeGJ1Zl9sYXN0ID0KLQkJKENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVCAqKQotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9iYXNlICsKLQkJKHJ4X2NvbmZpZy0+bnVtYmVyX1J4X3N0YXR1c19lbGVtZW50cyAtIDEpOwotCi0gCQkvKiBTZXQgdXAgbmV4dCBwb2ludGVyIHRvIGJlIHVzZWQgKi8KLSAgICAgICAgCWNhcmQtPnUuYy50eGJ1ZiA9ICh2b2lkICopKGNhcmQtPmh3LmRwbWJhc2UgKwotICAgICAgICAgICAgICAgIHR4X2NvbmZpZy0+bmV4dF9UeF9zdGF0dXNfZWxlbWVudF90b191c2UpOwotICAgICAgICAJY2FyZC0+dS5jLnJ4bWIgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLSAgICAgICAgICAgICAgICByeF9jb25maWctPm5leHRfUnhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlKTsKLQl9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHR4X2NvbmZpZyA9IChDSERMQ19UWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCXB0cl9DSERMQ19UeF9zdGF0X2VsX2NmZ19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQotICAgICAgICAgICAgICAgIHJ4X2NvbmZpZyA9IChDSERMQ19SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJCSgoKENIRExDX0NPTkZJR1VSQVRJT05fU1RSVUNUICopbWItPmRhdGEpLT4KLQkJCXB0cl9DSERMQ19SeF9zdGF0X2VsX2NmZ19zdHJ1Y3QgJSBTRExBX1dJTkRPV1NJWkUpKTsKLQotICAgICAgICAgICAgICAgIC8qIFNldHVwIEhlYWQgYW5kIFRhaWxzIGZvciBidWZmZXJzICovCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmX2Jhc2UgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHR4X2NvbmZpZy0+YmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyAlIFNETEFfV0lORE9XU0laRSkpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy50eGJ1Zl9sYXN0ID0KLQkJKENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVCAqKWNhcmQtPnUuYy50eGJ1Zl9iYXNlCi0JCSsgKHR4X2NvbmZpZy0+bnVtYmVyX1R4X3N0YXR1c19lbGVtZW50cyAtIDEpOwotICAgICAgICAgICAgICAgIGNhcmQtPnUuYy5yeGJ1Zl9iYXNlID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCShyeF9jb25maWctPmJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgICAgICAgICBjYXJkLT51LmMucnhidWZfbGFzdCA9IAotCQkoQ0hETENfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUICopY2FyZC0+dS5jLnJ4YnVmX2Jhc2UKLQkJKyAocnhfY29uZmlnLT5udW1iZXJfUnhfc3RhdHVzX2VsZW1lbnRzIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICAgLyogU2V0IHVwIG5leHQgcG9pbnRlciB0byBiZSB1c2VkICovCi0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnR4YnVmID0gKHZvaWQgKikoY2FyZC0+aHcuZHBtYmFzZSArCi0JCSh0eF9jb25maWctPm5leHRfVHhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlICUgU0RMQV9XSU5ET1dTSVpFKSk7Ci0gICAgICAgICAgICAgICAgY2FyZC0+dS5jLnJ4bWIgPSAodm9pZCAqKShjYXJkLT5ody5kcG1iYXNlICsKLQkJKHJ4X2NvbmZpZy0+bmV4dF9SeF9zdGF0dXNfZWxlbWVudF90b191c2UgJSBTRExBX1dJTkRPV1NJWkUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFNldHVwIEFjdHVhbCBCdWZmZXIgU3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgKi8KLSAgICAgICAgY2FyZC0+dS5jLnJ4X2Jhc2UgPSByeF9jb25maWctPmJhc2VfYWRkcl9SeF9idWZmZXI7Ci0gICAgICAgIGNhcmQtPnUuYy5yeF90b3AgID0gcnhfY29uZmlnLT5lbmRfYWRkcl9SeF9idWZmZXI7Ci0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogUGVyZm9ybSBJbnRlcnJ1cHQgVGVzdCBieSBydW5uaW5nIFJFQURfQ0hETENfQ09ERV9WRVJTSU9OIGNvbW1hbmQgTUFYX0lOVFIKLSAqIF9URVNUX0NPVU5URVIgdGltZXMuCi0gKi8KLXN0YXRpYyBpbnQgaW50cl90ZXN0KCBzZGxhX3QqIGNhcmQpCi17Ci0JQ0hETENfTUFJTEJPWF9TVFJVQ1QqIG1iID0gY2FyZC0+bWJveDsKLQlpbnQgZXJyLGk7Ci0KLQlJbnRyX3Rlc3RfY291bnRlciA9IDA7Ci0KLQkvKiBUaGUgY3JpdGljYWwgZmxhZyBpcyB1bnNldCBiZWNhdXNlIGR1cmluZyBpbml0aWFsaXphdGlvbiAoaWZfb3BlbikgCi0JICogd2Ugd2FudCB0aGUgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkIHNvIHRoYXQgd2hlbiB0aGUgd3BjX2lzciBpcwotCSAqIGNhbGxlZCBpdCBkb2VzIG5vdCBleGl0IGR1ZSB0byBjcml0aWNhbCBmbGFnIHNldC4KLQkgKi8gCi0KLQllcnIgPSBjaGRsY19zZXRfaW50cl9tb2RlKGNhcmQsIEFQUF9JTlRfT05fQ09NTUFORF9DT01QTEVURSk7Ci0KLQlpZiAoZXJyID09IENNRF9PSykgeyAKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9JTlRSX1RFU1RfQ09VTlRFUjsgaSArKykgewkKLQkJCW1iLT5idWZmZXJfbGVuZ3RoICA9IDA7Ci0JCQltYi0+Y29tbWFuZCA9IFJFQURfQ0hETENfQ09ERV9WRVJTSU9OOwotCQkJZXJyID0gc2RsYV9leGVjKG1iKSA/IG1iLT5yZXR1cm5fY29kZSA6IENNRF9USU1FT1VUOwotCQl9Ci0JfQotCWVsc2UgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgMCk7Ci0KLQlpZiAoZXJyICE9IENNRF9PSykKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBVRFAgY2FsbCBpdCBpcy4gQ1BJUEVBQiA/Ci0gKi8KLXN0YXRpYyBpbnQgdWRwX3BrdF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHNkbGFfdCogY2FyZCkKLXsKLQkgY2hkbGNfdWRwX3BrdF90ICpjaGRsY191ZHBfcGt0ID0gKGNoZGxjX3VkcF9wa3RfdCAqKXNrYi0+ZGF0YTsKLQotCWlmICghc3RybmNtcChjaGRsY191ZHBfcGt0LT53cF9tZ210LnNpZ25hdHVyZSxVRFBNR01UX1NJR05BVFVSRSw4KSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT51ZHBfcGt0LnVkcF9kc3RfcG9ydCA9PSBudG9ocyhjYXJkLT53YW5kZXYudWRwX3BvcnQpKSAmJgotCSAgIChjaGRsY191ZHBfcGt0LT5pcF9wa3QucHJvdG9jb2wgPT0gVURQTUdNVF9VRFBfUFJPVE9DT0wpICYmCi0JICAgKGNoZGxjX3VkcF9wa3QtPndwX21nbXQucmVxdWVzdF9yZXBseSA9PSBVRFBNR01UX1JFUVVFU1QpKSB7Ci0JCXJldHVybiBVRFBfQ1BJUEVfVFlQRTsKLQl9Ci0JZWxzZSByZXR1cm4gVURQX0lOVkFMSURfVFlQRTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBTZXQgUE9SVCBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQgcG9ydF9zZXRfc3RhdGUgKHNkbGFfdCAqY2FyZCwgaW50IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT53YW5kZXYuZGV2OwotCWNoZGxjX3ByaXZhdGVfYXJlYV90ICpjaGRsY19wcml2X2FyZWEgPSBkZXYtPnByaXY7Ci0KLSAgICAgICAgaWYgKGNhcmQtPnUuYy5zdGF0ZSAhPSBzdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgV0FOX0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogSERMQyBsaW5rIGNvbm5lY3RlZCFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXQU5fQ09OTkVDVElORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoS0VSTl9JTkZPICIlczogSERMQyBsaW5rIGNvbm5lY3RpbmcuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtPmRldm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdBTl9ESVNDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiJXM6IEhETEMgbGluayBkaXNjb25uZWN0ZWQhXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLT5kZXZuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhcmQtPndhbmRldi5zdGF0ZSA9IGNhcmQtPnUuYy5zdGF0ZSA9IHN0YXRlOwotCQljaGRsY19wcml2X2FyZWEtPmNvbW1vbi5zdGF0ZSA9IHN0YXRlOwotICAgICAgICB9Ci19Ci0KLXZvaWQgczUwOF9sb2NrIChzZGxhX3QgKmNhcmQsIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKLXsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+d2FuZGV2LmxvY2ssICpzbXBfZmxhZ3MpOwotICAgICAgICBpZiAoY2FyZC0+bmV4dCl7Ci0JCS8qIEl0IGlzIG9rIHRvIHVzZSBzcGluX2xvY2sgaGVyZSwgc2luY2Ugd2UKLQkJICogYWxyZWFkeSB0dXJuZWQgb2ZmIGludGVycnVwdHMgKi8KLSAgICAgICAgCXNwaW5fbG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotCX0KLX0KLQotdm9pZCBzNTA4X3VubG9jayAoc2RsYV90ICpjYXJkLCB1bnNpZ25lZCBsb25nICpzbXBfZmxhZ3MpCi17Ci0JaWYgKGNhcmQtPm5leHQpewotCQlzcGluX3VubG9jaygmY2FyZC0+bmV4dC0+d2FuZGV2LmxvY2spOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT53YW5kZXYubG9jaywgKnNtcF9mbGFncyk7Ci19Ci0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogY29uZmlnX2NoZGxjCi0gKgotICoJQ29uZmlndXJlIHRoZSBjaGRsYyBwcm90b2NvbCBhbmQgZW5hYmxlIGNvbW11bmljYXRpb25zLgkJCi0gKgotICogICAJVGhlIGlmX29wZW4oKSBmdW5jdGlvbiBiaW5kcyB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBwb2xsIHJvdXRpbmUuCi0gKiAgICAgIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1biBldmVyeSB0aW1lIHRoZSBjaGRsYyBpbnRlcmZhY2UKLSAqICAgICAgaXMgYnJvdWdodCB1cC4gV2UgY2Fubm90IHJ1biB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGlmX29wZW4gCi0gKiAgICAgIGJlY2F1c2UgaWZfb3BlbiBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgcmVtb3RlIElQIGFkZHJlc3MuCi0gKiAgICAgIAotICoJSWYgdGhlIGNvbW11bmljYXRpb25zIGFyZSBub3QgZW5hYmxlZCwgcHJvY2VlZCB0byBjb25maWd1cmUKLSAqICAgICAgdGhlIGNhcmQgYW5kIGVuYWJsZSBjb21tdW5pY2F0aW9ucy4KLSAqCi0gKiAgICAgIElmIHRoZSBjb21tdW5pY2F0aW9ucyBhcmUgZW5hYmxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgaW50ZXJmYWNlCi0gKiAgICAgIHdhcyBzaHV0ZG93biBieSBldGhlciB0aGUgdXNlciBvciBkcml2ZXIuIEluIHRoaXMgY2FzZSwgd2UgCi0gKiAgICAgIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgbm90IGNoYW5nZWQuICBJZgotICogICAgICB0aGUgSVAgYWRkcmVzc2VzIGhhdmUgY2hhbmdlZCwgd2UgaGF2ZSB0byByZWNvbmZpZ3VyZSB0aGUgZmlybXdhcmUKLSAqICAgICAgYW5kIHVwZGF0ZSB0aGUgY2hhbmdlZCBJUCBhZGRyZXNzZXMuICBPdGhlcndpc2UsIGp1c3QgZXhpdC4KLSAqCi0gKi8KLQotc3RhdGljIGludCBjb25maWdfY2hkbGMgKHNkbGFfdCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+d2FuZGV2LmRldjsKLQlTSEFSRURfTUVNT1JZX0lORk9fU1RSVUNUICpmbGFncyA9IGNhcmQtPnUuYy5mbGFnczsKLQotCWlmIChjYXJkLT51LmMuY29tbV9lbmFibGVkKXsKLQkJY2hkbGNfY29tbV9kaXNhYmxlKGNhcmQpOwotCQlwb3J0X3NldF9zdGF0ZShjYXJkLCBXQU5fRElTQ09OTkVDVEVEKTsKLQl9Ci0KLQlpZiAoc2V0X2NoZGxjX2NvbmZpZyhjYXJkKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0hETEMgQ29uZmlndXJhdGlvbiBGYWlsZWQhXG4iLAotCQkJCWNhcmQtPmRldm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaW5pdF9jaGRsY190eF9yeF9idWZmKGNhcmQsIGRldik7Ci0KLQkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYW5kIG1hc2sgKi8KLSAgICAgICAgaWYgKGNoZGxjX3NldF9pbnRyX21vZGUoY2FyZCwgQVBQX0lOVF9PTl9SWF9GUkFNRSB8Ci0gICAgICAgICAgICAgICAgCQlBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIHwKLSAgICAgICAgICAgICAgICAJCUFQUF9JTlRfT05fVFhfRlJBTUUgfAotICAgICAgICAgICAgICAgIAkJQVBQX0lOVF9PTl9DSERMQ19FWENFUF9DT05EIHwgQVBQX0lOVF9PTl9USU1FUikpewotCQlwcmludGsgKEtFUk5fSU5GTyAiJXM6IEZhaWxlZCB0byBzZXQgaW50ZXJydXB0IHRyaWdnZXJzIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJcmV0dXJuIDA7CQotICAgICAgICB9Ci0JCi0KLQkvKiBNYXNrIHRoZSBUcmFuc21pdCBhbmQgVGltZXIgaW50ZXJydXB0ICovCi0JZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiAmPSAKLQkJfihBUFBfSU5UX09OX1RYX0ZSQU1FIHwgQVBQX0lOVF9PTl9USU1FUik7Ci0KLQotCWlmIChjaGRsY19jb21tX2VuYWJsZShjYXJkKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gZW5hYmxlIGNoZGxjIGNvbW11bmljYXRpb25zIVxuIiwKLQkJCQljYXJkLT5kZXZuYW1lKTsKLQkJZmxhZ3MtPmludGVycnVwdF9pbmZvX3N0cnVjdC5pbnRlcnJ1cHRfcGVybWlzc2lvbiA9IDA7Ci0JCWNhcmQtPnUuYy5jb21tX2VuYWJsZWQ9MDsKLQkJY2hkbGNfc2V0X2ludHJfbW9kZShjYXJkLDApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIFJ4L1R4IGJ1ZmZlciBjb250cm9sIGZpZWxkcyAqLwotCXBvcnRfc2V0X3N0YXRlKGNhcmQsIFdBTl9DT05ORUNUSU5HKTsKLQlyZXR1cm4gMDsgCi19Ci0KLQotc3RhdGljIHZvaWQgc2VuZF9wcHBfdGVybV9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCi0JaWYgKChuZXdfc2tiID0gZGV2X2FsbG9jX3NrYig4KSkgIT0gTlVMTCkgewotCQkvKiBjb3B5IGRhdGEgaW50byBuZXdfc2tiICovCi0KLQkJYnVmID0gc2tiX3B1dChuZXdfc2tiLCA4KTsKLQkJc3ByaW50ZihidWYsIiVjJWMlYyVjJWMlYyVjJWMiLCAweEZGLDB4MDMsMHhDMCwweDIxLDB4MDUsMHg5OCwweDAwLDB4MDcpOwotCi0JCS8qIERlY2Fwc3VsYXRlIHBrdCBhbmQgcGFzcyBpdCB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgKi8KLQkJbmV3X3NrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9XQU5fUFBQKTsKLQkJbmV3X3NrYi0+ZGV2ID0gZGV2OwotCQluZXdfc2tiLT5tYWMucmF3ICA9IG5ld19za2ItPmRhdGE7Ci0KLQkJbmV0aWZfcngobmV3X3NrYik7Ci0JCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JfQotfQotCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoqKioqKiBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGJhZDA5ZWIuLmUwODc0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAlkZXBlbmRzIG9uIE5FVERFVklDRVMKIAogY29uZmlnIE5FVF9SQURJTwotCWJvb2wgIldpcmVsZXNzIExBTiBkcml2ZXJzIChub24taGFtcmFkaW8pIgorCWJvb2wgIldpcmVsZXNzIExBTiBkcml2ZXJzIChub24taGFtcmFkaW8pICYgV2lyZWxlc3MgRXh0ZW5zaW9ucyIKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3Igd2lyZWxlc3MgTEFOcyBhbmQgZXZlcnl0aGluZyBoYXZpbmcgdG8gZG8gd2l0aCByYWRpbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCAxMDhkOWZlLi4wMDc2NGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC0zMTM5LDYgKzMxMzksNyBAQAogCQl9CiAJCWlmICggc3RhdHVzICYgRVZfTElOSyApIHsKIAkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKKwkJCWludCBzY2FuX2ZvcmNlbG9zcyA9IDA7CiAJCQkvKiBUaGUgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQsIGlmIHlvdSB3YW50IHRvIHB1dCBhCiAJCQkgICBtb25pdG9yIGhvb2sgaW4sIGRvIGl0IGhlcmUuICAoUmVtZW1iZXIgdGhhdAogCQkJICAgaW50ZXJydXB0cyBhcmUgc3RpbGwgZGlzYWJsZWQhKQpAQCAtMzE1Nyw3ICszMTU4LDggQEAKIAkJCSAgY29kZSkgKi8KICNkZWZpbmUgQVVUSEZBSUwgMHgwMzAwIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgKGxvdyBieXRlIGlzIHJlYXNvbgogCQkJICAgY29kZSkgKi8KLSNkZWZpbmUgQVNTT0NJQVRFRCAweDA0MDAgLyogQXNzb2NhdGllZCAqLworI2RlZmluZSBBU1NPQ0lBVEVEIDB4MDQwMCAvKiBBc3NvY2lhdGVkICovCisjZGVmaW5lIFJFQVNTT0NJQVRFRCAweDA2MDAgLyogUmVhc3NvY2lhdGVkPyAgT25seSBvbiBmaXJtd2FyZSA+PSA1LjMwLjE3ICovCiAjZGVmaW5lIFJDX1JFU0VSVkVEIDAgLyogUmVzZXJ2ZWQgcmV0dXJuIGNvZGUgKi8KICNkZWZpbmUgUkNfTk9SRUFTT04gMSAvKiBVbnNwZWNpZmllZCByZWFzb24gKi8KICNkZWZpbmUgUkNfQVVUSElOViAyIC8qIFByZXZpb3VzIGF1dGhlbnRpY2F0aW9uIGludmFsaWQgKi8KQEAgLTMxNzQsNDQgKzMxNzYsMzAgQEAKIAkJCSAgbGVhdmluZyBCU1MgKi8KICNkZWZpbmUgUkNfTk9BVVRIIDkgLyogU3RhdGlvbiByZXF1ZXN0aW5nIChSZSlBc3NvY2lhdGlvbiBpcyBub3QKIAkJICAgICAgIEF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcmVzcG9uZGluZyBzdGF0aW9uICovCi0JCQlpZiAobmV3U3RhdHVzICE9IEFTU09DSUFURUQpIHsKLQkJCQlpZiAoYXV0b193ZXAgJiYgIWFwcml2LT5leHBpcmVzKSB7Ci0JCQkJCWFwcml2LT5leHBpcmVzID0gUlVOX0FUKDMqSFopOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBhcHJpdi0+dGFzazsKKwkJCWlmIChuZXdTdGF0dXMgPT0gRk9SQ0VMT1NTICYmIGFwcml2LT5zY2FuX3RpbWVvdXQgPiAwKQorCQkJCXNjYW5fZm9yY2Vsb3NzID0gMTsKKwkJCWlmKG5ld1N0YXR1cyA9PSBBU1NPQ0lBVEVEIHx8IG5ld1N0YXR1cyA9PSBSRUFTU09DSUFURUQpIHsKIAkJCQlpZiAoYXV0b193ZXApCiAJCQkJCWFwcml2LT5leHBpcmVzID0gMDsKLQkJCQlpZiAodGFzaykKLQkJCQkJd2FrZV91cF9wcm9jZXNzICh0YXNrKTsKKwkJCQlpZiAoYXByaXYtPnRhc2spCisJCQkJCXdha2VfdXBfcHJvY2VzcyAoYXByaXYtPnRhc2spOwogCQkJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYXByaXYtPmZsYWdzKTsKIAkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX01VTFRJLCAmYXByaXYtPmZsYWdzKTsKLQkJCX0KLQkJCS8qIFF1ZXN0aW9uIDogaXMgQVNTT0NJQVRFRCB0aGUgb25seSBzdGF0dXMKLQkJCSAqIHRoYXQgaXMgdmFsaWQgPyBXZSB3YW50IHRvIGNhdGNoIGhhbmRvdmVyCi0JCQkgKiBhbmQgcmVhc3NvY2lhdGlvbnMgYXMgdmFsaWQgc3RhdHVzCi0JCQkgKiBKZWFuIElJICovCi0JCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCkgewotI2lmIDAKLQkJCQkvKiBGSVhNRTogR3JhYmJpbmcgc2NhbiByZXN1bHRzIGhlcmUKLQkJCQkgKiBzZWVtcyB0byBiZSB0b28gZWFybHk/Pz8gIEp1c3Qgd2FpdCBmb3IKLQkJCQkgKiB0aW1lb3V0IGluc3RlYWQuICovCi0JCQkJaWYgKGFwcml2LT5zY2FuX3RpbWVvdXQgPiAwKSB7Ci0JCQkJCXNldF9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFwcml2LT5mbGFncyk7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9Ci0jZW5kaWYKKwogCQkJCWlmIChkb3duX3RyeWxvY2soJmFwcml2LT5zZW0pICE9IDApIHsKIAkJCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhcHJpdi0+ZmxhZ3MpOwogCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7CiAJCQkJfSBlbHNlCiAJCQkJCWFpcm9fc2VuZF9ldmVudChkZXYpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKLQkJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJfSBlbHNlIGlmICghc2Nhbl9mb3JjZWxvc3MpIHsKKwkJCQlpZiAoYXV0b193ZXAgJiYgIWFwcml2LT5leHBpcmVzKSB7CisJCQkJCWFwcml2LT5leHBpcmVzID0gUlVOX0FUKDMqSFopOworCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7CisJCQkJfQogCiAJCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCQkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAnXDAnLCBFVEhfQUxFTik7CisJCQkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSxOVUxMKTsKIAkJCX0KIAkJfQpAQCAtNzEzNiwxMCArNzEyNCwxMCBAQAogCQlnb3RvIG91dDsKIAogCS8qIEluaXRpYXRlIGEgc2NhbiBjb21tYW5kICovCisJYWktPnNjYW5fdGltZW91dCA9IFJVTl9BVCgzKkhaKTsKIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWNtZC5jbWQ9Q01EX0xJU1RCU1M7CiAJaXNzdWVjb21tYW5kKGFpLCAmY21kLCAmcnNwKTsKLQlhaS0+c2Nhbl90aW1lb3V0ID0gUlVOX0FUKDMqSFopOwogCXdha2UgPSAxOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggYTQ5NjQ2MC4uYWYwY2JiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtODAsOCArODAsOCBAQAogICAgZXZlbnQgaGFuZGxlci4gCiAqLwogCi1zdGF0aWMgdm9pZCBhaXJvX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIGFpcm9fcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgYWlyb19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogLyoKICAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQpAQCAtMTAxLDEwICsxMDEsMTAgQEAKIC8qCiAgICBBIGxpbmtlZCBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSAgYWlyb25ldCBkZXZpY2UuICBFYWNoIGFjdHVhbAogICAgUENNQ0lBIGNhcmQgY29ycmVzcG9uZHMgdG8gb25lIGRldmljZSBpbnN0YW5jZSwgYW5kIGlzIGRlc2NyaWJlZAotICAgYnkgb25lIGRldl9saW5rX3Qgc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgorICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBkZXZfbGlua190IHBvaW50ZXJzLCB3aGVyZSBtaW5vcgorICAgbWVtb3J5IGNhcmQgZHJpdmVyIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjbWNpYV9kZXZpY2UgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCiAgICBkZXZpY2UgbnVtYmVycyBhcmUgdXNlZCB0byBkZXJpdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgaW5kZXguCiAqLwogCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgIGV4YW1wbGUsIGV0aGVybmV0IGNhcmRzLCBtb2RlbXMpLiAgSW4gb3RoZXIgY2FzZXMsIHRoZXJlIG1heSBiZQogICAgbWFueSBhY3R1YWwgb3IgbG9naWNhbCBkZXZpY2VzIChTQ1NJIGFkYXB0ZXJzLCBtZW1vcnkgY2FyZHMgd2l0aAogICAgbXVsdGlwbGUgcGFydGl0aW9ucykuICBUaGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUga2VwdAotICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBkZXZfbGlua190CisgICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlCiAgICBzdHJ1Y3R1cmUuICBXZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBjYXJkJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKICAgIGJlY2F1c2UgdGhleSBnZW5lcmFsbHkgc2hvdWxkbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KIApAQCAtMTQxLDI0ICsxNDEsMTYgQEAKICAgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGFpcm9fYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYWlyb19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0JZGV2X2xpbmtfdCAqbGluazsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwogCiAJREVCVUcoMCwgImFpcm9fYXR0YWNoKClcbiIpOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLQlsaW5rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxpbmspIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwotCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKKwlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlwX2Rldi0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCQogCS8qCiAJICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwpAQCAtMTY3LDI2ICsxNTksMTggQEAKIAkgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQogCSAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KIAkqLwotCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKLQlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKwlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhaXJvX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwotCQlrZnJlZSAobGluayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlsaW5rLT5wcml2ID0gbG9jYWw7CisJcF9kZXYtPnByaXYgPSBsb2NhbDsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlhaXJvX2NvbmZpZyhsaW5rKTsKLQotCXJldHVybiAwOworCXJldHVybiBhaXJvX2NvbmZpZyhwX2Rldik7CiB9IC8qIGFpcm9fYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTk4LDE0ICsxODIsMTEgQEAKICAgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhaXJvX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBhaXJvX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURFQlVHKDAsICJhaXJvX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlhaXJvX3JlbGVhc2UobGluayk7CisJYWlyb19yZWxlYXNlKGxpbmspOwogCiAJaWYgKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgKSB7CiAJCXN0b3BfYWlyb19jYXJkKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYsIDAgKTsKQEAgLTIxMyw3ICsxOTQsNiBAQAogCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7CiAKIAlrZnJlZShsaW5rLT5wcml2KTsKLQlrZnJlZShsaW5rKTsKIH0gLyogYWlyb19kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMjcsOSArMjA3LDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgYWlyb19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYWlyb19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZTsKIAl0dXBsZV90IHR1cGxlOwogCWNpc3BhcnNlX3QgcGFyc2U7CiAJbG9jYWxfaW5mb190ICpkZXY7CkBAIC0yMzcsOCArMjE2LDcgQEAKIAl1X2NoYXIgYnVmWzY0XTsKIAl3aW5fcmVxX3QgcmVxOwogCW1lbXJlcV90IG1hcDsKLQkKLQloYW5kbGUgPSBsaW5rLT5oYW5kbGU7CisKIAlkZXYgPSBsaW5rLT5wcml2OwogCiAJREVCVUcoMCwgImFpcm9fY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKQEAgLTI1MiwxNSArMjMwLDEyIEBACiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCQotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQkKKwogCS8qCiAJICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAogCSAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZwpAQCAtMjc0LDEyICsyNDksMTIgQEAKIAkgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXdoaWxlICgxKSB7CiAJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQkKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKSBkZmx0ID0gKmNmZzsKQEAgLTI5NCwxNiArMjY5LDExIEBACiAJCQogCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KIAkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVmNjID0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVmNjID0gZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQkKIAkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAkJZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwogCQkKIAkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCkBAIC0zMjksMTIgKzI5OSwxMiBAQAogCQl9CiAJCQogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAJCQogCQkvKgogCQkgIE5vdyBzZXQgdXAgYSBjb21tb24gbWVtb3J5IHdpbmRvdywgaWYgbmVlZGVkLiAgVGhlcmUgaXMgcm9vbQotCQkgIGluIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSBmb3Igb25lIG1lbW9yeSB3aW5kb3cgaGFuZGxlLAorCQkgIGluIHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgZm9yIG9uZSBtZW1vcnkgd2luZG93IGhhbmRsZSwKIAkJICBidXQgaWYgdGhlIGJhc2UgYWRkcmVzc2VzIG5lZWQgdG8gYmUgc2F2ZWQsIG9yIGlmIG11bHRpcGxlCiAJCSAgd2luZG93cyBhcmUgbmVlZGVkLCB0aGUgaW5mbyBzaG91bGQgZ28gaW4gdGhlIHByaXZhdGUgZGF0YQogCQkgIHN0cnVjdHVyZSBmb3IgdGhpcyBkZXZpY2UuCkBAIC0zNTAsNyArMzIwLDcgQEAKIAkJCXJlcS5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwogCQkJcmVxLlNpemUgPSBtZW0tPndpblswXS5sZW47CiAJCQlyZXEuQWNjZXNzU3BlZWQgPSAwOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCQltYXAuUGFnZSA9IDA7IG1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwogCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSAhPSAwKQpAQCAtMzYwLDcgKzMzMCw3IEBACiAJCWJyZWFrOwogCQkKIAluZXh0X2VudHJ5OgotCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl9CiAJCiAgICAgLyoKQEAgLTM2OSwzMyArMzM5LDMyIEBACiAgICAgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogICAgICovCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKLQkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCQogCS8qCiAJICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogCSAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkqLwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IAogCQlpbml0X2Fpcm9fY2FyZCggbGluay0+aXJxLkFzc2lnbmVkSVJRLAotCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgMSwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSApOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgMSwgJmhhbmRsZV90b19kZXYobGluaykgKTsKIAlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgZ290byBjc19mYWlsZWQ7CiAJCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCi0JICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkqLwogCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2Rldi0+bmFtZSApOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7Ci0JbGluay0+ZGV2ID0gJmRldi0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CiAJCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0JICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCwKLQkgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCisJICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuVnBwKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAvMTAsIGxpbmstPmNvbmYuVnBwJTEwKTsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAlpZiAobGluay0+aW8uTnVtUG9ydHMxKQpAQCAtNDA4LDE0ICszNzcsMTIgQEAKIAkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKIAkJICAgICAgIHJlcS5CYXNlK3JlcS5TaXplLTEpOwogCXByaW50aygiXG4iKTsKLQkKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCXJldHVybjsKLQkKKwlyZXR1cm4gMDsKKwogIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJYWlyb19yZWxlYXNlKGxpbmspOwotCQorCXJldHVybiAtRU5PREVWOwogfSAvKiBhaXJvX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQyNiw1MSArMzkzLDI2IEBACiAgIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBhaXJvX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJREVCVUcoMCwgImFpcm9fcmVsZWFzZSgweCVwKVxuIiwgbGluayk7Ci0JCi0JLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLQlsaW5rLT5kZXYgPSBOVUxMOwotCQotCS8qCi0JICBJbiBhIG5vcm1hbCBkcml2ZXIsIGFkZGl0aW9uYWwgY29kZSBtYXkgYmUgbmVlZGVkIHRvIHJlbGVhc2UKLQkgIG90aGVyIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLiAKLQkqLwotCQotCS8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLQlpZiAobGluay0+d2luKQotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCWlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEpCi0JCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIAotc3RhdGljIGludCBhaXJvX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBhaXJvX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCW5ldGlmX2RldmljZV9kZXRhY2gobG9jYWwtPmV0aF9kZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCW5ldGlmX2RldmljZV9kZXRhY2gobG9jYWwtPmV0aF9kZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlyb19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBhaXJvX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisJaWYgKGxpbmstPm9wZW4pIHsKIAkJcmVzZXRfYWlyb19jYXJkKGxvY2FsLT5ldGhfZGV2KTsKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChsb2NhbC0+ZXRoX2Rldik7CiAJfQpAQCAtNDkyLDcgKzQzNCw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImFpcm9fY3MiLAogCX0sCi0JLnByb2JlCQk9IGFpcm9fYXR0YWNoLAorCS5wcm9iZQkJPSBhaXJvX3Byb2JlLAogCS5yZW1vdmUJCT0gYWlyb19kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gYWlyb19pZHMsCiAJLnN1c3BlbmQJPSBhaXJvX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKaW5kZXggMGUxYWMzMy4uYmVkNjgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwpAQCAtMTgzOCw3ICsxODM4LDcgQEAKIH0KIAogI2lmZGVmICBNT0RVTEUKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWludCBpID0gMDsKIApAQCAtMTg2MCw3ICsxODYwLDcgQEAKIH0KIAogCi12b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCit2b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBpID0gMDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggODdhZmE2OC4uODYwNmM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC0zNDYzLDYgKzM0NjMsNyBAQAogCXU4IHN0YXR1cyA9IGF0bWVsX3JtZW04KHByaXYsIGF0bWVsX2NvKHByaXYsIENNRF9CTE9DS19TVEFUVVNfT0ZGU0VUKSk7CiAJdTggY29tbWFuZCA9IGF0bWVsX3JtZW04KHByaXYsIGF0bWVsX2NvKHByaXYsIENNRF9CTE9DS19DT01NQU5EX09GRlNFVCkpOwogCWludCBmYXN0X3NjYW47CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogCiAJaWYgKHN0YXR1cyA9PSBDTURfU1RBVFVTX0lETEUgfHwKIAkgICAgc3RhdHVzID09IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpCkBAIC0zNDg3LDYgKzM0ODgsNyBAQAogCQkJYXRtZWxfc2Nhbihwcml2LCAxKTsKIAkJfSBlbHNlIHsKIAkJCWludCBic3NfaW5kZXggPSByZXRyaWV2ZV9ic3MocHJpdik7CisJCQlpbnQgbm90aWZ5X3NjYW5fY29tcGxldGUgPSAxOwogCQkJaWYgKGJzc19pbmRleCAhPSAtMSkgewogCQkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7CiAJCQl9IGVsc2UgaWYgKHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfQURIT0MgJiYKQEAgLTM0OTUsOCArMzQ5NywxNCBAQAogCQkJfSBlbHNlIHsKIAkJCQlwcml2LT5mYXN0X3NjYW4gPSAhZmFzdF9zY2FuOwogCQkJCWF0bWVsX3NjYW4ocHJpdiwgMSk7CisJCQkJbm90aWZ5X3NjYW5fY29tcGxldGUgPSAwOwogCQkJfQogCQkJcHJpdi0+c2l0ZV9zdXJ2ZXlfc3RhdGUgPSBTSVRFX1NVUlZFWV9DT01QTEVURUQ7CisJCQlpZiAobm90aWZ5X3NjYW5fY29tcGxldGUpIHsKKwkJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCQkJfQogCQl9CiAJCWJyZWFrOwogCkBAIC0zNTA5LDYgKzM1MTcsOSBAQAogCQlwcml2LT5zaXRlX3N1cnZleV9zdGF0ZSA9IFNJVEVfU1VSVkVZX0NPTVBMRVRFRDsKIAkJaWYgKHByaXYtPnN0YXRpb25faXNfYXNzb2NpYXRlZCkgewogCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFEWSk7CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKIAkJfSBlbHNlIHsKIAkJCWF0bWVsX3NjYW4ocHJpdiwgMSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCmluZGV4IGQ2ZjRhNWEuLjI2YmYxMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwpAQCAtOTEsOCArOTEsOCBAQAogICAgZXZlbnQgaGFuZGxlci4gCiAqLwogCi1zdGF0aWMgdm9pZCBhdG1lbF9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCBhdG1lbF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBhdG1lbF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgYXRtZWxfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKQEAgLTExMiwxMCArMTEyLDEwIEBACiAvKgogICAgQSBsaW5rZWQgbGlzdCBvZiAiaW5zdGFuY2VzIiBvZiB0aGUgIGF0bWVsbmV0IGRldmljZS4gIEVhY2ggYWN0dWFsCiAgICBQQ01DSUEgY2FyZCBjb3JyZXNwb25kcyB0byBvbmUgZGV2aWNlIGluc3RhbmNlLCBhbmQgaXMgZGVzY3JpYmVkCi0gICBieSBvbmUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gZHMuaCkuCisgICBieSBvbmUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgogCiAgICBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGZvciB0aGlzIC0tIGZvciBleGFtcGxlLCB0aGUKLSAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIGRldl9saW5rX3QgcG9pbnRlcnMsIHdoZXJlIG1pbm9yCisgICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKICAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KICovCiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgZXhhbXBsZSwgZXRoZXJuZXQgY2FyZHMsIG1vZGVtcykuICBJbiBvdGhlciBjYXNlcywgdGhlcmUgbWF5IGJlCiAgICBtYW55IGFjdHVhbCBvciBsb2dpY2FsIGRldmljZXMgKFNDU0kgYWRhcHRlcnMsIG1lbW9yeSBjYXJkcyB3aXRoCiAgICBtdWx0aXBsZSBwYXJ0aXRpb25zKS4gIFRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZXMgbmVlZCB0byBiZSBrZXB0Ci0gICBpbiBhIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHRoZSAnZGV2JyBmaWVsZCBvZiBhIGRldl9saW5rX3QKKyAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgc3RydWN0IHBjbWNpYV9kZXZpY2UKICAgIHN0cnVjdHVyZS4gIFdlIGFsbG9jYXRlIHRoZW0gaW4gdGhlIGNhcmQncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAogICAgYmVjYXVzZSB0aGV5IGdlbmVyYWxseSBzaG91bGRuJ3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LgogCkBAIC0xNTIsMjQgKzE1MiwxNiBAQAogICAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgYXRtZWxfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgYXRtZWxfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotCWRldl9saW5rX3QgKmxpbms7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAogCURFQlVHKDAsICJhdG1lbF9hdHRhY2goKVxuIik7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSAqLwotCWxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwotCWlmICghbGluaykgewotCQlwcmludGsoS0VSTl9FUlIgImF0bWVsX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7Ci0JbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCXBfZGV2LT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKIAkvKgogCSAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKQEAgLTE3OCwyNiArMTcwLDE4IEBACiAJICBhbmQgYXR0cmlidXRlcyBvZiBJTyB3aW5kb3dzKSBhcmUgZml4ZWQgYnkgdGhlIG5hdHVyZSBvZiB0aGUKIAkgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCiAJKi8KLQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwotCWxpbmstPmNvbmYuVmNjID0gNTA7Ci0JbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IDA7CisJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbF9jczogbm8gbWVtb3J5IGZvciBuZXcgZGV2aWNlXG4iKTsKLQkJa2ZyZWUgKGxpbmspOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbGluay0+cHJpdiA9IGxvY2FsOworCXBfZGV2LT5wcml2ID0gbG9jYWw7CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JYXRtZWxfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGF0bWVsX2NvbmZpZyhwX2Rldik7CiB9IC8qIGF0bWVsX2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwOSwxNyArMTkzLDEzIEBACiAgIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgYXRtZWxfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIGF0bWVsX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURFQlVHKDAsICJhdG1lbF9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJYXRtZWxfcmVsZWFzZShsaW5rKTsKKwlhdG1lbF9yZWxlYXNlKGxpbmspOwogCiAJa2ZyZWUobGluay0+cHJpdik7Ci0Ja2ZyZWUobGluayk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjM2LDE5ICsyMTYsMTcgQEAKIC8qIENhbGwtYmFjayBmdW5jdGlvbiB0byBpbnRlcnJvZ2F0ZSBQQ01DSUEtc3BlY2lmaWMgaW5mb3JtYXRpb24KICAgIGFib3V0IHRoZSBjdXJyZW50IGV4aXN0YW5jZSBvZiB0aGUgY2FyZCAqLwogc3RhdGljIGludCBjYXJkX3ByZXNlbnQodm9pZCAqYXJnKQoteyAKLQlkZXZfbGlua190ICpsaW5rID0gKGRldl9saW5rX3QgKilhcmc7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX1NVU1BFTkQpCi0JCXJldHVybiAwOwotCWVsc2UgaWYgKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilhcmc7CisKKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCQlyZXR1cm4gMTsKLQkKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdG1lbF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgYXRtZWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90IHBhcnNlOwogCWxvY2FsX2luZm9fdCAqZGV2OwpAQCAtMjU2LDkgKzIzNCw4IEBACiAJdV9jaGFyIGJ1Zls2NF07CiAJc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKIAotCWhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlkZXYgPSBsaW5rLT5wcml2OwotCWRpZCA9IGhhbmRsZV90b19kZXYoaGFuZGxlKS5kcml2ZXJfZGF0YTsKKwlkaWQgPSBoYW5kbGVfdG9fZGV2KGxpbmspLmRyaXZlcl9kYXRhOwogCiAJREVCVUcoMCwgImF0bWVsX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAJCkBAIC0yNzIsMTUgKzI0OSwxMiBAQAogCSAgcmVnaXN0ZXJzLgogCSovCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCQotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQkKKwogCS8qCiAJICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAogCSAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZwpAQCAtMjk0LDEyICsyNjgsMTIgQEAKIAkgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXdoaWxlICgxKSB7CiAJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQkKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKSBkZmx0ID0gKmNmZzsKQEAgLTMxNCwxNiArMjg4LDExIEBACiAJCQogCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KIAkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVmNjID0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVmNjID0gZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQkKIAkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAkJZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwogCQkKIAkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCkBAIC0zNDksMTQgKzMxOCwxNCBAQAogCQl9CiAJCQogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAKIAkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwogCQlicmVhazsKIAkJCiAJbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJfQogCQogCS8qCkBAIC0zNjUsMTQgKzMzNCwxNCBAQAogCSAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KIAkqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCi0JCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAkKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAkKIAlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRID09IDApIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgCkBAIC0zODQsNyArMzUzLDcgQEAKIAkJaW5pdF9hdG1lbF9jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEsCiAJCQkJZGlkID8gZGlkLT5kcml2ZXJfaW5mbyA6IEFUTUVMX0ZXX1RZUEVfTk9ORSwKLQkJCQkmaGFuZGxlX3RvX2RldihoYW5kbGUpLAorCQkJCSZoYW5kbGVfdG9fZGV2KGxpbmspLAogCQkJCWNhcmRfcHJlc2VudCwgCiAJCQkJbGluayk7CiAJaWYgKCEoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYpIApAQCAtMzkzLDE4ICszNjIsMTggQEAKIAkKIAkvKgogCSAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKLQkgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLgogCSovCiAJc3RyY3B5KGRldi0+bm9kZS5kZXZfbmFtZSwgKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2LT5uYW1lICk7CiAJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKLQlsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotCQkJCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47Ci0JCisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCisJcmV0dXJuIDA7CisKICBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCWF0bWVsX3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDE1LDUzICszODQsMzQgQEAKICAgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBhdG1lbF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBhdG1lbF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXY7Ci0JCQorCiAJREVCVUcoMCwgImF0bWVsX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwotCQotCS8qIFVubGluayB0aGUgZGV2aWNlIGNoYWluICovCi0JbGluay0+ZGV2ID0gTlVMTDsKLQkKLQlpZiAoZGV2KSAKKworCWlmIChkZXYpCiAJCXN0b3BfYXRtZWxfY2FyZChkZXYpOwotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7IAotCQotCS8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCWlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEpCi0JCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgYXRtZWxfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBhdG1lbF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJbmV0aWZfZGV2aWNlX2RldGFjaChsb2NhbC0+ZXRoX2Rldik7Ci0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJbmV0aWZfZGV2aWNlX2RldGFjaChsb2NhbC0+ZXRoX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdG1lbF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXRtZWxfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWF0bWVsX29wZW4obG9jYWwtPmV0aF9kZXYpOwotCQluZXRpZl9kZXZpY2VfYXR0YWNoKGxvY2FsLT5ldGhfZGV2KTsKLQl9CisJYXRtZWxfb3Blbihsb2NhbC0+ZXRoX2Rldik7CisJbmV0aWZfZGV2aWNlX2F0dGFjaChsb2NhbC0+ZXRoX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNSw3ICs0NjUsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJhdG1lbF9jcyIsCiAgICAgICAgIH0sCi0JLnByb2JlICAgICAgICAgID0gYXRtZWxfYXR0YWNoLAorCS5wcm9iZSAgICAgICAgICA9IGF0bWVsX3Byb2JlLAogCS5yZW1vdmUJCT0gYXRtZWxfZGV0YWNoLAogCS5pZF90YWJsZQk9IGF0bWVsX2lkcywKIAkuc3VzcGVuZAk9IGF0bWVsX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWcKaW5kZXggNDE4NDY1Ni4uMjVlYTQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvS2NvbmZpZwpAQCAtMTcsOCArMTcsMTEgQEAKIAogY29uZmlnIEJDTTQzWFhfRE1BCiAJYm9vbAorCWRlcGVuZHMgb24gQkNNNDNYWAorCiBjb25maWcgQkNNNDNYWF9QSU8KIAlib29sCisJZGVwZW5kcyBvbiBCQ000M1hYCiAKIGNob2ljZQogCXByb21wdCAiQkNNNDN4eCBkYXRhIHRyYW5zZmVyIG1vZGUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCmluZGV4IGRjYWRkMjkuLjJlODMwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCkBAIC0xNSw3ICsxNSw2IEBACiAKICNpbmNsdWRlICJiY200M3h4X2RlYnVnZnMuaCIKICNpbmNsdWRlICJiY200M3h4X2xlZHMuaCIKLSNpbmNsdWRlICJiY200M3h4X3N5c2ZzLmgiCiAKIAogI2RlZmluZSBQRlgJCQkJS0JVSUxEX01PRE5BTUUgIjogIgpAQCAtNjM4LDggKzYzNyw2IEBACiB9OwogCiBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlIHsKLQlzdHJ1Y3QgYmNtNDN4eF9zeXNmcyBzeXNmczsKLQogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc29mdG1hYzsKIApAQCAtNzcyLDYgKzc2OSwyMCBAQAogCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX3ByaXYoZGV2KTsKIH0KIAorc3RydWN0IGRldmljZTsKKworc3RhdGljIGlubGluZQorc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqIGRldl90b19iY20oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbTsKKworCW5ldF9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwliY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7CisKKwlyZXR1cm4gYmNtOworfQorCiAKIC8qIEhlbHBlciBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyBhIGJvb2xlYW4uCiAgKiBUUlVFLCBpZiBQSU8gaXMgdXNlZDsgRkFMU0UsIGlmIERNQSBpcyB1c2VkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKaW5kZXggZDJjMzQwMS4uMzVhNGZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCkBAIC00NTIsMTIgKzQ1MiwxMiBAQAogCXNpemVfdCBpOwogCWNoYXIgYzsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJEYXRhIGR1bXAgKCVzLCAldSBieXRlcyk6IiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRGF0YSBkdW1wICglcywgJXpkIGJ5dGVzKToiLAogCSAgICAgICBkZXNjcmlwdGlvbiwgc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQljID0gZGF0YVtpXTsKIAkJaWYgKGkgJSA4ID09IDApCi0JCQlwcmludGsoIlxuIiBLRVJOX0lORk8gUEZYICIweCUwOHg6ICAweCUwMngsICIsIGksIGMgJiAweGZmKTsKKwkJCXByaW50aygiXG4iIEtFUk5fSU5GTyBQRlggIjB4JTA4eng6ICAweCUwMngsICIsIGksIGMgJiAweGZmKTsKIAkJZWxzZQogCQkJcHJpbnRrKCIweCUwMngsICIsIGMgJiAweGZmKTsKIAl9CkBAIC00NzIsMTIgKzQ3MiwxMiBAQAogCWludCBqOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmQ7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiKioqIEJpdGR1bXAgKCVzLCAldSBieXRlcywgJXMpICoqKiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIioqKiBCaXRkdW1wICglcywgJXpkIGJ5dGVzLCAlcykgKioqIiwKIAkgICAgICAgZGVzY3JpcHRpb24sIGJ5dGVzLCBtc2JfdG9fbHNiID8gIk1TQiB0byBMU0IiIDogIkxTQiB0byBNU0IiKTsKIAlmb3IgKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgewogCQlkID0gZGF0YSArIGk7CiAJCWlmIChpICUgOCA9PSAwKQotCQkJcHJpbnRrKCJcbiIgS0VSTl9JTkZPIFBGWCAiMHglMDh4OiAgIiwgaSk7CisJCQlwcmludGsoIlxuIiBLRVJOX0lORk8gUEZYICIweCUwOHp4OiAgIiwgaSk7CiAJCWlmIChtc2JfdG9fbHNiKSB7CiAJCQlmb3IgKGogPSA3OyBqID49IDA7IGotLSkgewogCQkJCWlmICgqZCAmICgxIDw8IGopKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCmluZGV4IGMzNjgxYjguLmQwMzE4ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKQEAgLTE5Niw4ICsxOTYsOSBAQAogCX0KIAlpZiAocmluZy0+ZG1hYmFzZSArIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFID4gQkNNNDN4eF9ETUFfQlVTQUREUk1BWCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICI+Pj5GQVRBTCBFUlJPUjw8PCAgRE1BIFJJTkdNRU1PUlkgPjFHICIKLQkJCQkgICAgIigweCUwOHgsIGxlbjogJWx1KVxuIiwKLQkJICAgICAgIHJpbmctPmRtYWJhc2UsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFKTsKKwkJCQkgICAgIigweCVsbHgsIGxlbjogJWx1KVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJpbmctPmRtYWJhc2UsCisJCQkJQkNNNDN4eF9ETUFfUklOR01FTVNJWkUpOwogCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAogCQkJCSAgcmluZy0+dmJhc2UsIHJpbmctPmRtYWJhc2UpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMwNyw4ICszMDgsOCBAQAogCQl1bm1hcF9kZXNjYnVmZmVyKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlwcmludGsoS0VSTl9FUlIgUEZYICI+Pj5GQVRBTCBFUlJPUjw8PCAgRE1BIFJYIFNLQiA+MUcgIgotCQkJCSAgICAiKDB4JTA4eCwgbGVuOiAldSlcbiIsCi0JCSAgICAgICBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplKTsKKwkJCQkgICAgIigweCVsbHgsIGxlbjogJXUpXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1ldGEtPnNrYiA9IHNrYjsKQEAgLTYyMywyNSArNjI0LDI4IEBACiBzdGF0aWMgdTE2IGdlbmVyYXRlX2Nvb2tpZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAogCQkJICAgaW50IHNsb3QpCiB7Ci0JdTE2IGNvb2tpZSA9IDB4MDAwMDsKKwl1MTYgY29va2llID0gMHhGMDAwOwogCiAJLyogVXNlIHRoZSB1cHBlciA0IGJpdHMgb2YgdGhlIGNvb2tpZSBhcwogCSAqIERNQSBjb250cm9sbGVyIElEIGFuZCBzdG9yZSB0aGUgc2xvdCBudW1iZXIKLQkgKiBpbiB0aGUgbG93ZXIgMTIgYml0cworCSAqIGluIHRoZSBsb3dlciAxMiBiaXRzLgorCSAqIE5vdGUgdGhhdCB0aGUgY29va2llIG11c3QgbmV2ZXIgYmUgMCwgYXMgdGhpcworCSAqIGlzIGEgc3BlY2lhbCB2YWx1ZSB1c2VkIGluIFJYIHBhdGguCiAJICovCiAJc3dpdGNoIChyaW5nLT5tbWlvX2Jhc2UpIHsKIAlkZWZhdWx0OgogCQlhc3NlcnQoMCk7CiAJY2FzZSBCQ000M3h4X01NSU9fRE1BMV9CQVNFOgorCQljb29raWUgPSAweEEwMDA7CiAJCWJyZWFrOwogCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTJfQkFTRToKLQkJY29va2llID0gMHgxMDAwOworCQljb29raWUgPSAweEIwMDA7CiAJCWJyZWFrOwogCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTNfQkFTRToKLQkJY29va2llID0gMHgyMDAwOworCQljb29raWUgPSAweEMwMDA7CiAJCWJyZWFrOwogCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTRfQkFTRToKLQkJY29va2llID0gMHgzMDAwOworCQljb29raWUgPSAweEQwMDA7CiAJCWJyZWFrOwogCX0KIAlhc3NlcnQoKCh1MTYpc2xvdCAmIDB4RjAwMCkgPT0gMHgwMDAwKTsKQEAgLTY1OSwxNiArNjYzLDE2IEBACiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZyA9IE5VTEw7CiAKIAlzd2l0Y2ggKGNvb2tpZSAmIDB4RjAwMCkgewotCWNhc2UgMHgwMDAwOgorCWNhc2UgMHhBMDAwOgogCQlyaW5nID0gZG1hLT50eF9yaW5nMDsKIAkJYnJlYWs7Ci0JY2FzZSAweDEwMDA6CisJY2FzZSAweEIwMDA6CiAJCXJpbmcgPSBkbWEtPnR4X3JpbmcxOwogCQlicmVhazsKLQljYXNlIDB4MjAwMDoKKwljYXNlIDB4QzAwMDoKIAkJcmluZyA9IGRtYS0+dHhfcmluZzI7CiAJCWJyZWFrOwotCWNhc2UgMHgzMDAwOgorCWNhc2UgMHhEMDAwOgogCQlyaW5nID0gZG1hLT50eF9yaW5nMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTcyOSw4ICs3MzMsOCBAQAogCWlmICh1bmxpa2VseShtZXRhLT5kbWFhZGRyICsgc2tiLT5sZW4gPiBCQ000M3h4X0RNQV9CVVNBRERSTUFYKSkgewogCQlyZXR1cm5fc2xvdChyaW5nLCBzbG90KTsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiPj4+RkFUQUwgRVJST1I8PDwgIERNQSBUWCBTS0IgPjFHICIKLQkJCQkgICAgIigweCUwOHgsIGxlbjogJXUpXG4iLAotCQkgICAgICAgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4pOworCQkJCSAgICAiKDB4JWxseCwgbGVuOiAldSlcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04MzgsOCArODQyLDE4IEBACiAJCS8qIFdlIHJlY2VpdmVkIGFuIHhtaXQgc3RhdHVzLiAqLwogCQlzdHJ1Y3QgYmNtNDN4eF9od3htaXRzdGF0dXMgKmh3ID0gKHN0cnVjdCBiY200M3h4X2h3eG1pdHN0YXR1cyAqKXNrYi0+ZGF0YTsKIAkJc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1cyBzdGF0OworCQlpbnQgaSA9IDA7CiAKIAkJc3RhdC5jb29raWUgPSBsZTE2X3RvX2NwdShody0+Y29va2llKTsKKwkJd2hpbGUgKHN0YXQuY29va2llID09IDApIHsKKwkJCWlmICh1bmxpa2VseSgrK2kgPj0gMTAwMDApKSB7CisJCQkJYXNzZXJ0KDApOworCQkJCWJyZWFrOworCQkJfQorCQkJdWRlbGF5KDIpOworCQkJYmFycmllcigpOworCQkJc3RhdC5jb29raWUgPSBsZTE2X3RvX2NwdShody0+Y29va2llKTsKKwkJfQogCQlzdGF0LmZsYWdzID0gaHctPmZsYWdzOwogCQlzdGF0LmNudDEgPSBody0+Y250MTsKIAkJc3RhdC5jbnQyID0gaHctPmNudDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmgKaW5kZXggMmQ1MjBlNC4uYjdkNzc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaApAQCAtMjEzLDYgKzIxMywxNCBAQAogdm9pZCBiY200M3h4X2RtYV9yeChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQogewogfQorc3RhdGljIGlubGluZQordm9pZCBiY200M3h4X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCit7Cit9CitzdGF0aWMgaW5saW5lCit2b2lkIGJjbTQzeHhfZG1hX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQoreworfQogCiAjZW5kaWYgLyogQ09ORklHX0JDTTQzWFhfRE1BICovCiAjZW5kaWYgLyogQkNNNDN4eF9ETUFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCmluZGV4IGMzNzM3MWYuLjdlZDE4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImJjbTQzeHhfd3guaCIKICNpbmNsdWRlICJiY200M3h4X2V0aHRvb2wuaCIKICNpbmNsdWRlICJiY200M3h4X3htaXQuaCIKKyNpbmNsdWRlICJiY200M3h4X3N5c2ZzLmgiCiAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlciIpOwpAQCAtOTM4LDkgKzkzOSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJjbTQzeHhfZ2VvX2luaXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQorc3RhdGljIGludCBiY200M3h4X2dlb19pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2dlbyBnZW87CisJc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJaW50IGhhdmVfYSA9IDAsIGhhdmVfYmcgPSAwOwogCWludCBpOwpAQCAtOTQ4LDcgKzk0OSwxMCBAQAogCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeTsKIAljb25zdCBjaGFyICppc29fY291bnRyeTsKIAotCW1lbXNldCgmZ2VvLCAwLCBzaXplb2YoZ2VvKSk7CisJZ2VvID0ga3phbGxvYyhzaXplb2YoKmdlbyksIEdGUF9LRVJORUwpOworCWlmICghZ2VvKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7CiAJCXBoeSA9ICYoYmNtLT5jb3JlXzgwMjExX2V4dFtpXS5waHkpOwogCQlzd2l0Y2ggKHBoeS0+dHlwZSkgewpAQCAtOTY2LDMxICs5NzAsMzYgQEAKIAlpc29fY291bnRyeSA9IGJjbTQzeHhfbG9jYWxlX2lzbyhiY20tPnNwcm9tLmxvY2FsZSk7CiAKICAJaWYgKGhhdmVfYSkgewotCQlmb3IgKGkgPSAwLCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDIwMTsgY2hhbm5lbCsrKSB7Ci0JCQljaGFuID0gJmdlby5hW2krK107CisJCWZvciAoaSA9IDAsIGNoYW5uZWwgPSBJRUVFODAyMTFfNTJHSFpfTUlOX0NIQU5ORUw7CisJCSAgICAgIGNoYW5uZWwgPD0gSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMOyBjaGFubmVsKyspIHsKKwkJCWNoYW4gPSAmZ2VvLT5hW2krK107CiAJCQljaGFuLT5mcmVxID0gYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXFfYShjaGFubmVsKTsKIAkJCWNoYW4tPmNoYW5uZWwgPSBjaGFubmVsOwogCQl9Ci0JCWdlby5hX2NoYW5uZWxzID0gaTsKKwkJZ2VvLT5hX2NoYW5uZWxzID0gaTsKIAl9CiAJaWYgKGhhdmVfYmcpIHsKLQkJZm9yIChpID0gMCwgY2hhbm5lbCA9IDE7IGNoYW5uZWwgPCAxNTsgY2hhbm5lbCsrKSB7Ci0JCQljaGFuID0gJmdlby5iZ1tpKytdOworCQlmb3IgKGkgPSAwLCBjaGFubmVsID0gSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMOworCQkgICAgICBjaGFubmVsIDw9IElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTDsgY2hhbm5lbCsrKSB7CisJCQljaGFuID0gJmdlby0+YmdbaSsrXTsKIAkJCWNoYW4tPmZyZXEgPSBiY200M3h4X2NoYW5uZWxfdG9fZnJlcV9iZyhjaGFubmVsKTsKIAkJCWNoYW4tPmNoYW5uZWwgPSBjaGFubmVsOwogCQl9Ci0JCWdlby5iZ19jaGFubmVscyA9IGk7CisJCWdlby0+YmdfY2hhbm5lbHMgPSBpOwogCX0KLQltZW1jcHkoZ2VvLm5hbWUsIGlzb19jb3VudHJ5LCAyKTsKKwltZW1jcHkoZ2VvLT5uYW1lLCBpc29fY291bnRyeSwgMik7CiAJaWYgKDAgLypUT0RPOiBPdXRkb29yIHVzZSBvbmx5ICovKQotCQlnZW8ubmFtZVsyXSA9ICdPJzsKKwkJZ2VvLT5uYW1lWzJdID0gJ08nOwogCWVsc2UgaWYgKDAgLypUT0RPOiBJbmRvb3IgdXNlIG9ubHkgKi8pCi0JCWdlby5uYW1lWzJdID0gJ0knOworCQlnZW8tPm5hbWVbMl0gPSAnSSc7CiAJZWxzZQotCQlnZW8ubmFtZVsyXSA9ICcgJzsKLQlnZW8ubmFtZVszXSA9ICdcMCc7CisJCWdlby0+bmFtZVsyXSA9ICcgJzsKKwlnZW8tPm5hbWVbM10gPSAnXDAnOwogCi0JaWVlZTgwMjExX3NldF9nZW8oYmNtLT5pZWVlLCAmZ2VvKTsKKwlpZWVlODAyMTFfc2V0X2dlbyhiY20tPmllZWUsIGdlbyk7CisJa2ZyZWUoZ2VvKTsKKworCXJldHVybiAwOwogfQogCiAvKiBEdW1teVRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgYXMgZG9jdW1lbnRlZCBvbiAKQEAgLTMyNjIsNiArMzI3MSw5IEBACiAJYmNtNDN4eF9zeXNmc19yZWdpc3RlcihiY20pOwogCS8vRklYTUU6IGNoZWNrIGZvciBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyIGZhaWx1cmUuIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgbWVzc3kgcmVnYXJkaW5nIHVud2luZGluZywgdGhvdWdoLi4uCiAKKwkvKkZJWE1FOiBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHNvZnRtYWMgaW5zdGVhZC4gKi8KKwlzY2hlZHVsZV93b3JrKCZiY20tPnNvZnRtYWMtPmFzc29jaW5mby53b3JrKTsKKwogCWFzc2VydChlcnIgPT0gMCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTM0NzgsMTYgKzM0OTAsMTcgQEAKIAkJCWdvdG8gZXJyXzgwMjExX3Vud2luZDsKIAkJYmNtNDN4eF93aXJlbGVzc19jb3JlX2Rpc2FibGUoYmNtKTsKIAl9CisJZXJyID0gYmNtNDN4eF9nZW9faW5pdChiY20pOworCWlmIChlcnIpCisJCWdvdG8gZXJyXzgwMjExX3Vud2luZDsKIAliY200M3h4X3BjdGxfc2V0X2NyeXN0YWwoYmNtLCAwKTsKIAogCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtICovCi0JaWYgKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihiY20tPnNwcm9tLmV0MW1hY2FkZHIpKQogCQltZW1jcHkoYmNtLT5uZXRfZGV2LT5kZXZfYWRkciwgYmNtLT5zcHJvbS5ldDFtYWNhZGRyLCA2KTsKIAllbHNlCiAJCW1lbWNweShiY20tPm5ldF9kZXYtPmRldl9hZGRyLCBiY20tPnNwcm9tLmlsMG1hY2FkZHIsIDYpOwogCi0JYmNtNDN4eF9nZW9faW5pdChiY20pOwotCiAJc25wcmludGYoYmNtLT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSwKIAkJICJCcm9hZGNvbSAlMDRYIiwgYmNtLT5jaGlwX2lkKTsKIApAQCAtMzUyMiw2ICszNTM1LDcgQEAKIAkJZXJyID0gYmNtNDN4eF9waW9fdHgoYmNtLCB0eGIpOwogCWVsc2UKIAkJZXJyID0gYmNtNDN4eF9kbWFfdHgoYmNtLCB0eGIpOworCWJjbS0+bmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTM5MzUsOSArMzk0OSw2IEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldF9kZXYpOwogCQotCS8qRklYTUU6IFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgc29mdG1hYyBpbnN0ZWFkLiAqLwotCXNjaGVkdWxlX3dvcmsoJmJjbS0+c29mdG1hYy0+YXNzb2NpbmZvLndvcmspOwotCiAJZHByaW50ayhLRVJOX0lORk8gUEZYICJEZXZpY2UgcmVzdW1lZC5cbiIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaAppbmRleCBlY2E3OWEzLi4zMGEyMDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmgKQEAgLTExOCwxMiArMTE4LDE0IEBACiBzdGF0aWMgaW5saW5lCiBpbnQgYmNtNDN4eF9pc192YWxpZF9jaGFubmVsX2EodTggY2hhbm5lbCkKIHsKLQlyZXR1cm4gKGNoYW5uZWwgPD0gMjAwKTsKKwlyZXR1cm4gKGNoYW5uZWwgPj0gSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMCisJICAgICAgICYmIGNoYW5uZWwgPD0gSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMKTsKIH0KIHN0YXRpYyBpbmxpbmUKIGludCBiY200M3h4X2lzX3ZhbGlkX2NoYW5uZWxfYmcodTggY2hhbm5lbCkKIHsKLQlyZXR1cm4gKGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KTsKKwlyZXR1cm4gKGNoYW5uZWwgPj0gSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMCisJICAgICAgICYmIGNoYW5uZWwgPD0gSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMKTsKIH0KIHN0YXRpYyBpbmxpbmUKIGludCBiY200M3h4X2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCmluZGV4IDBhNjZmNDMuLmIwYWJhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAJaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KQogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwNSwgMHgzMjMwKTsKIAliY200M3h4X3BoeV9pbml0X3BjdGwoYmNtKTsKLQlpZiAoYmNtLT5jaGlwX2lkID09IDB4NDMwNiAmJiBiY20tPmNoaXBfcGFja2FnZSAhPSAyKSB7CisJaWYgKGJjbS0+Y2hpcF9pZCA9PSAweDQzMDYgJiYgYmNtLT5jaGlwX3BhY2thZ2UgPT0gMikgewogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyOSwKIAkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MjkpICYgMHhCRkZGKTsKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QzMsCkBAIC0yMTUxLDYgKzIxNTEsNyBAQAogCQkJCXBoeS0+dHNzaTJkYm0gPSBOVUxMOwogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkIG5vdCBnZW5lcmF0ZSAiCiAJCQkJCQkgICAgInRzc2kyZEJtIHRhYmxlXG4iKTsKKwkJCQlrZnJlZShkeW5fdHNzaTJkYm0pOwogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQogCQlwaHktPnRzc2kyZGJtID0gZHluX3Rzc2kyZGJtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5jCmluZGV4IGM1OWRkZDQuLjBhYTFiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJiY200M3h4X3Bpby5oIgogI2luY2x1ZGUgImJjbTQzeHhfbWFpbi5oIgogI2luY2x1ZGUgImJjbTQzeHhfeG1pdC5oIgorI2luY2x1ZGUgImJjbTQzeHhfcG93ZXIuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKQEAgLTQ0LDEwICs0NSwxMCBAQAogCQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhEQVRBLAogCQkJCSAgb2N0ZXQpOwogCQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwsCi0JCQkJICBCQ000M3h4X1BJT19UWENUTF9XUklURUhJKTsKKwkJCQkgIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFTE8pOwogCX0gZWxzZSB7CiAJCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCwKLQkJCQkgIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFSEkpOworCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTyk7CiAJCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWERBVEEsCiAJCQkJICBvY3RldCk7CiAJfQpAQCAtMTAzLDcgKzEwNCw3IEBACiAJCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWERBVEEsCiAJCQkJICBza2ItPmRhdGFbc2tiLT5sZW4gLSAxXSk7CiAJCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCwKLQkJCQkgIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFSEkgfAorCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTyB8CiAJCQkJICBCQ000M3h4X1BJT19UWENUTF9DT01QTEVURSk7CiAJfSBlbHNlIHsKIAkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLApAQCAtMTEyLDkgKzExMywxMCBAQAogfQogCiBzdGF0aWMgdTE2IGdlbmVyYXRlX2Nvb2tpZShzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUsCi0JCQkgICBpbnQgcGFja2V0aW5kZXgpCisJCQkgICBzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldCkKIHsKIAl1MTYgY29va2llID0gMHgwMDAwOworCWludCBwYWNrZXRpbmRleDsKIAogCS8qIFdlIHVzZSB0aGUgdXBwZXIgNCBiaXRzIGZvciB0aGUgUElPCiAJICogY29udHJvbGxlciBJRCBhbmQgdGhlIGxvd2VyIDEyIGJpdHMKQEAgLTEzNSw2ICsxMzcsNyBAQAogCWRlZmF1bHQ6CiAJCWFzc2VydCgwKTsKIAl9CisJcGFja2V0aW5kZXggPSBwaW9fdHhwYWNrZXRfZ2V0aW5kZXgocGFja2V0KTsKIAlhc3NlcnQoKCh1MTYpcGFja2V0aW5kZXggJiAweEYwMDApID09IDB4MDAwMCk7CiAJY29va2llIHw9ICh1MTYpcGFja2V0aW5kZXg7CiAKQEAgLTE4NCw3ICsxODcsNyBAQAogCWJjbTQzeHhfZ2VuZXJhdGVfdHhoZHIocXVldWUtPmJjbSwKIAkJCSAgICAgICAmdHhoZHIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQkgICAgICAgKHBhY2tldC0+eG1pdHRlZF9mcmFncyA9PSAwKSwKLQkJCSAgICAgICBnZW5lcmF0ZV9jb29raWUocXVldWUsIHBpb190eHBhY2tldF9nZXRpbmRleChwYWNrZXQpKSk7CisJCQkgICAgICAgZ2VuZXJhdGVfY29va2llKHF1ZXVlLCBwYWNrZXQpKTsKIAogCXR4X3N0YXJ0KHF1ZXVlKTsKIAlvY3RldHMgPSBza2ItPmxlbiArIHNpemVvZih0eGhkcik7CkBAIC0yNDEsNyArMjQ0LDcgQEAKIAkJcXVldWUtPnR4X2RldnFfcGFja2V0cysrOwogCQlxdWV1ZS0+dHhfZGV2cV91c2VkICs9IG9jdGV0czsKIAotCQlhc3NlcnQocGFja2V0LT54bWl0dGVkX2ZyYWdzIDw9IHBhY2tldC0+dHhiLT5ucl9mcmFncyk7CisJCWFzc2VydChwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPCBwYWNrZXQtPnR4Yi0+bnJfZnJhZ3MpOwogCQlwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MrKzsKIAkJcGFja2V0LT54bWl0dGVkX29jdGV0cyArPSBvY3RldHM7CiAJfQpAQCAtMjU3LDggKzI2MCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGJjbTQzeHhfcGlvX3R4cGFja2V0ICpwYWNrZXQsICp0bXBfcGFja2V0OwogCWludCBlcnI7CisJdTE2IHR4Y3RsOwogCiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7CisKKwl0eGN0bCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMKTsKKwlpZiAodHhjdGwgJiBCQ000M3h4X1BJT19UWENUTF9TVVNQRU5EKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0LCB0bXBfcGFja2V0LCAmcXVldWUtPnR4cXVldWUsIGxpc3QpIHsKIAkJYXNzZXJ0KHBhY2tldC0+eG1pdHRlZF9mcmFncyA8IHBhY2tldC0+dHhiLT5ucl9mcmFncyk7CiAJCWlmIChwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPT0gMCkgewpAQCAtMjg4LDYgKzI5Nyw3IEBACiAJbmV4dF9wYWNrZXQ6CiAJCWNvbnRpbnVlOwogCX0KK291dF91bmxvY2s6CiAJYmNtNDN4eF91bmxvY2tfbW1pbyhiY20sIGZsYWdzKTsKIH0KIApAQCAtMzMwLDEyICszNDAsMTkgQEAKIAkJICAgICAodW5zaWduZWQgbG9uZylxdWV1ZSk7CiAKIAl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7Ci0JdmFsdWUgfD0gQkNNNDN4eF9TQkZfWEZFUl9SRUdfQllURVNXQVA7CisJdmFsdWUgJj0gfkJDTTQzeHhfU0JGX1hGRVJfUkVHX0JZVEVTV0FQOwogCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsIHZhbHVlKTsKIAogCXFzaXplID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBxdWV1ZS0+bW1pb19iYXNlICsgQkNNNDN4eF9QSU9fVFhRQlVGU0laRSk7CisJaWYgKHFzaXplID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1I6IFRoaXMgY2FyZCBkb2VzIG5vdCBzdXBwb3J0IFBJTyAiCisJCQkJICAgICJvcGVyYXRpb24gbW9kZS4gUGxlYXNlIHVzZSBETUEgbW9kZSAiCisJCQkJICAgICIobW9kdWxlIHBhcmFtZXRlciBwaW89MCkuXG4iKTsKKwkJZ290byBlcnJfZnJlZXF1ZXVlOworCX0KIAlpZiAocXNpemUgPD0gQkNNNDN4eF9QSU9fVFhRQURKVVNUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlBJTyB0eCBkZXZpY2UtcXVldWUgdG9vIHNtYWxsICgldSlcbiIsIHFzaXplKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUElPIHR4IGRldmljZS1xdWV1ZSB0b28gc21hbGwgKCV1KVxuIiwKKwkJICAgICAgIHFzaXplKTsKIAkJZ290byBlcnJfZnJlZXF1ZXVlOwogCX0KIAlxc2l6ZSAtPSBCQ000M3h4X1BJT19UWFFBREpVU1Q7CkBAIC00NDQsMTUgKzQ2MSwxMCBAQAogewogCXN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSA9IGJjbTQzeHhfY3VycmVudF9waW8oYmNtKS0+cXVldWUxOwogCXN0cnVjdCBiY200M3h4X3Bpb190eHBhY2tldCAqcGFja2V0OwotCXUxNiB0bXA7CiAKIAlhc3NlcnQoIXF1ZXVlLT50eF9zdXNwZW5kZWQpOwogCWFzc2VydCghbGlzdF9lbXB0eSgmcXVldWUtPnR4ZnJlZSkpOwogCi0JdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwpOwotCWlmICh0bXAgJiBCQ000M3h4X1BJT19UWENUTF9TVVNQRU5EKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJcGFja2V0ID0gbGlzdF9lbnRyeShxdWV1ZS0+dHhmcmVlLm5leHQsIHN0cnVjdCBiY200M3h4X3Bpb190eHBhY2tldCwgbGlzdCk7CiAJcGFja2V0LT50eGIgPSB0eGI7CiAJcGFja2V0LT54bWl0dGVkX2ZyYWdzID0gMDsKQEAgLTQ2Miw3ICs0NzQsNyBAQAogCWFzc2VydChxdWV1ZS0+bnJfdHhmcmVlIDwgQkNNNDN4eF9QSU9fTUFYVFhQQUNLRVRTKTsKIAogCS8qIFN1c3BlbmQgVFgsIGlmIHdlIGFyZSBvdXQgb2YgcGFja2V0cyBpbiB0aGUgImZyZWUiIHF1ZXVlLiAqLwotCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZxdWV1ZS0+dHhmcmVlKSkpIHsKKwlpZiAobGlzdF9lbXB0eSgmcXVldWUtPnR4ZnJlZSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShxdWV1ZS0+YmNtLT5uZXRfZGV2KTsKIAkJcXVldWUtPnR4X3N1c3BlbmRlZCA9IDE7CiAJfQpAQCAtNDgwLDE1ICs0OTIsMTUgQEAKIAogCXF1ZXVlID0gcGFyc2VfY29va2llKGJjbSwgc3RhdHVzLT5jb29raWUsICZwYWNrZXQpOwogCWFzc2VydChxdWV1ZSk7Ci0vL1RPRE8KLWlmICghcXVldWUpCi1yZXR1cm47CisKIAlmcmVlX3R4cGFja2V0KHBhY2tldCwgMSk7Ci0JaWYgKHVubGlrZWx5KHF1ZXVlLT50eF9zdXNwZW5kZWQpKSB7CisJaWYgKHF1ZXVlLT50eF9zdXNwZW5kZWQpIHsKIAkJcXVldWUtPnR4X3N1c3BlbmRlZCA9IDA7CiAJCW5ldGlmX3dha2VfcXVldWUocXVldWUtPmJjbS0+bmV0X2Rldik7CiAJfQotCS8qIElmIHRoZXJlIGFyZSBwYWNrZXRzIG9uIHRoZSB0eHF1ZXVlLCBwb2tlIHRoZSB0YXNrbGV0LiAqLworCS8qIElmIHRoZXJlIGFyZSBwYWNrZXRzIG9uIHRoZSB0eHF1ZXVlLCBwb2tlIHRoZSB0YXNrbGV0CisJICogdG8gdHJhbnNtaXQgdGhlbS4KKwkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJnF1ZXVlLT50eHF1ZXVlKSkKIAkJdGFza2xldF9zY2hlZHVsZSgmcXVldWUtPnR4dGFzayk7CiB9CkBAIC01MTksMTIgKzUzMSw5IEBACiAJaW50IGksIHByZWFtYmxlX3JlYWR3b3JkczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi1yZXR1cm47CiAJdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhDVEwpOwotCWlmICghKHRtcCAmIEJDTTQzeHhfUElPX1JYQ1RMX0RBVEFBVkFJTEFCTEUpKSB7Ci0JCWRwcmludGtsKEtFUk5fRVJSIFBGWCAiUElPIFJYOiBObyBkYXRhIGF2YWlsYWJsZVxuIik7Ly9UT0RPOiByZW1vdmUgdGhpcyBwcmludGsuCisJaWYgKCEodG1wICYgQkNNNDN4eF9QSU9fUlhDVExfREFUQUFWQUlMQUJMRSkpCiAJCXJldHVybjsKLQl9CiAJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1JYQ1RMLAogCQkJICBCQ000M3h4X1BJT19SWENUTF9EQVRBQVZBSUxBQkxFKTsKIApAQCAtNTM4LDggKzU0Nyw3IEBACiAJcmV0dXJuOwogZGF0YV9yZWFkeToKIAotLy9GSVhNRTogZW5kaWFuZXNzIGluIHRoaXMgZnVuY3Rpb24uCi0JbGVuID0gbGUxNl90b19jcHUoYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKSk7CisJbGVuID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKTsKIAlpZiAodW5saWtlbHkobGVuID4gMHg3MDApKSB7CiAJCXBpb19yeF9lcnJvcihxdWV1ZSwgMCwgImxlbiA+IDB4NzAwIik7CiAJCXJldHVybjsKQEAgLTU1NSw3ICs1NjMsNyBAQAogCQlwcmVhbWJsZV9yZWFkd29yZHMgPSAxOCAvIHNpemVvZih1MTYpOwogCWZvciAoaSA9IDA7IGkgPCBwcmVhbWJsZV9yZWFkd29yZHM7IGkrKykgewogCQl0bXAgPSBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19SWERBVEEpOwotCQlwcmVhbWJsZVtpICsgMV0gPSBjcHVfdG9fYmUxNih0bXApOy8vRklYTUU/CisJCXByZWFtYmxlW2kgKyAxXSA9IGNwdV90b19sZTE2KHRtcCk7CiAJfQogCXJ4aGRyID0gKHN0cnVjdCBiY200M3h4X3J4aGRyICopcHJlYW1ibGU7CiAJcnhmbGFnczIgPSBsZTE2X3RvX2NwdShyeGhkci0+ZmxhZ3MyKTsKQEAgLTU5MSwxNiArNTk5LDQwIEBACiAJfQogCXNrYl9wdXQoc2tiLCBsZW4pOwogCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpICs9IDIpIHsKLQkJdG1wID0gY3B1X3RvX2JlMTYoYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKSk7Ci0JCSooKHUxNiAqKShza2ItPmRhdGEgKyBpKSkgPSB0bXA7CisJCXRtcCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYREFUQSk7CisJCSooKHUxNiAqKShza2ItPmRhdGEgKyBpKSkgPSBjcHVfdG9fbGUxNih0bXApOwogCX0KIAlpZiAobGVuICUgMikgewogCQl0bXAgPSBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19SWERBVEEpOwogCQlza2ItPmRhdGFbbGVuIC0gMV0gPSAodG1wICYgMHgwMEZGKTsKKy8qIFRoZSBzcGVjcyBzYXkgdGhlIGZvbGxvd2luZyBpcyByZXF1aXJlZCwgYnV0CisgKiBpdCBpcyB3cm9uZyBhbmQgY29ycnVwdHMgdGhlIFBMQ1AuIElmIHdlIGRvbid0IGRvCisgKiB0aGlzLCB0aGUgUExDUCBzZWVtcyB0byBiZSBjb3JyZWN0LiBTbyBpZmRlZiBpdCBvdXQgZm9yIG5vdy4KKyAqLworI2lmIDAKIAkJaWYgKHJ4ZmxhZ3MyICYgQkNNNDN4eF9SWEhEUl9GTEFHUzJfVFlQRTJGUkFNRSkKLQkJCXNrYi0+ZGF0YVsweDIwXSA9ICh0bXAgJiAweEZGMDApID4+IDg7CisJCQlza2ItPmRhdGFbMl0gPSAodG1wICYgMHhGRjAwKSA+PiA4OwogCQllbHNlCi0JCQlza2ItPmRhdGFbMHgxRV0gPSAodG1wICYgMHhGRjAwKSA+PiA4OworCQkJc2tiLT5kYXRhWzBdID0gKHRtcCAmIDB4RkYwMCkgPj4gODsKKyNlbmRpZgogCX0KKwlza2JfdHJpbShza2IsIGxlbiAtIElFRUU4MDIxMV9GQ1NfTEVOKTsKIAliY200M3h4X3J4KHF1ZXVlLT5iY20sIHNrYiwgcnhoZHIpOwogfQorCit2b2lkIGJjbTQzeHhfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQoreworCWJjbTQzeHhfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKHF1ZXVlLT5iY20sIC0xLCAxKTsKKwliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwsCisJCQkgIGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMKQorCQkJICB8IEJDTTQzeHhfUElPX1RYQ1RMX1NVU1BFTkQpOworfQorCit2b2lkIGJjbTQzeHhfcGlvX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpCit7CisJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAorCQkJICBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCkKKwkJCSAgJiB+QkNNNDN4eF9QSU9fVFhDVExfU1VTUEVORCk7CisJYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMocXVldWUtPmJjbSwgLTEsIC0xKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZxdWV1ZS0+dHh0YXNrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uaAppbmRleCA5NzA2MjdiLi5kZmM3ODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5oCkBAIC0xNCw4ICsxNCw4IEBACiAjZGVmaW5lIEJDTTQzeHhfUElPX1JYQ1RMCQkweDA4CiAjZGVmaW5lIEJDTTQzeHhfUElPX1JYREFUQQkJMHgwQQogCi0jZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFSEkJKDEgPDwgMCkKLSNkZWZpbmUgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTwkoMSA8PCAxKQorI2RlZmluZSBCQ000M3h4X1BJT19UWENUTF9XUklURUxPCSgxIDw8IDApCisjZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFSEkJKDEgPDwgMSkKICNkZWZpbmUgQkNNNDN4eF9QSU9fVFhDVExfQ09NUExFVEUJKDEgPDwgMikKICNkZWZpbmUgQkNNNDN4eF9QSU9fVFhDVExfSU5JVAkJKDEgPDwgMykKICNkZWZpbmUgQkNNNDN4eF9QSU9fVFhDVExfU1VTUEVORAkoMSA8PCA3KQpAQCAtOTUsNiArOTUsNyBAQAogCQkgICAgICAgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQogewogCWJjbTQzeHhfd3JpdGUxNihxdWV1ZS0+YmNtLCBxdWV1ZS0+bW1pb19iYXNlICsgb2Zmc2V0LCB2YWx1ZSk7CisJbW1pb3diKCk7CiB9CiAKIApAQCAtMTA3LDYgKzEwOCw5IEBACiAJCQkJICAgc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1cyAqc3RhdHVzKTsKIHZvaWQgYmNtNDN4eF9waW9fcngoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKTsKIAordm9pZCBiY200M3h4X3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSk7Cit2b2lkIGJjbTQzeHhfcGlvX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpOworCiAjZWxzZSAvKiBDT05GSUdfQkNNNDNYWF9QSU8gKi8KIAogc3RhdGljIGlubGluZQpAQCAtMTMzLDYgKzEzNywxNCBAQAogdm9pZCBiY200M3h4X3Bpb19yeChzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpCiB7CiB9CitzdGF0aWMgaW5saW5lCit2b2lkIGJjbTQzeHhfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQoreworfQorc3RhdGljIGlubGluZQordm9pZCBiY200M3h4X3Bpb190eF9yZXN1bWUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQoreworfQogCiAjZW5kaWYgLyogQ09ORklHX0JDTTQzWFhfUElPICovCiAjZW5kaWYgLyogQkNNNDN4eF9QSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKaW5kZXggM2M5MmI2Mi4uNjU2OWRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKQEAgLTM1LDc3ICszNSwxMDEgQEAKICNpbmNsdWRlICJiY200M3h4X21haW4uaCIKIAogCisvKiBHZXQgdGhlIFNsb3cgQ2xvY2sgU291cmNlICovCitzdGF0aWMgaW50IGJjbTQzeHhfcGN0bF9nZXRfc2xvd2Nsa3NyYyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCit7CisJdTMyIHRtcDsKKwlpbnQgZXJyOworCisJYXNzZXJ0KGJjbS0+Y3VycmVudF9jb3JlID09ICZiY20tPmNvcmVfY2hpcGNvbW1vbik7CisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2KSB7CisJCWlmIChiY20tPmJ1c3R5cGUgPT0gQkNNNDN4eF9CVVNUWVBFX1BDTUNJQSB8fAorCQkgICAgYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9TQikKKwkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzsKKwkJaWYgKGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfUENJKSB7CisJCQllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ1RMX09VVCwgJnRtcCk7CisJCQlhc3NlcnQoIWVycik7CisJCQlpZiAodG1wICYgMHgxMCkKKwkJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k7CisJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1M7CisJCX0KKwl9CisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCAxMCkgeworCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKKwkJdG1wICY9IDB4NzsKKwkJaWYgKHRtcCA9PSAwKQorCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfTE9QV1JPUzsKKwkJaWYgKHRtcCA9PSAxKQorCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOworCQlpZiAodG1wID09IDIpCisJCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19QQ0k7CisJfQorCisJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOworfQorCiAvKiBHZXQgbWF4L21pbiBzbG93Y2xvY2sgZnJlcXVlbmN5CiAgKiBhcyBkZXNjcmliZWQgaW4gaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1Bvd2VyQ29udHJvbAogICovCiBzdGF0aWMgaW50IGJjbTQzeHhfcGN0bF9jbG9ja2ZyZXFsaW1pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCiAJCQkJICAgICAgIGludCBnZXRfbWF4KQogewotCWludCBsaW1pdCA9IDA7CisJaW50IGxpbWl0OworCWludCBjbG9ja3NyYzsKIAlpbnQgZGl2aXNvcjsKLQlpbnQgc2VsZWN0aW9uOwotCWludCBlcnI7CiAJdTMyIHRtcDsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqb2xkX2NvcmU7CiAKLQlpZiAoIShiY20tPmNoaXBjb21tb25fY2FwYWJpbGl0aWVzICYgQkNNNDN4eF9DQVBBQklMSVRJRVNfUENUTCkpCi0JCWdvdG8gb3V0OwotCW9sZF9jb3JlID0gYmNtLT5jdXJyZW50X2NvcmU7Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfY2hpcGNvbW1vbik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJYXNzZXJ0KGJjbS0+Y2hpcGNvbW1vbl9jYXBhYmlsaXRpZXMgJiBCQ000M3h4X0NBUEFCSUxJVElFU19QQ1RMKTsKKwlhc3NlcnQoYmNtLT5jdXJyZW50X2NvcmUgPT0gJmJjbS0+Y29yZV9jaGlwY29tbW9uKTsKIAorCWNsb2Nrc3JjID0gYmNtNDN4eF9wY3RsX2dldF9zbG93Y2xrc3JjKGJjbSk7CiAJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2KSB7Ci0JCWlmICgoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9QQ01DSUEpIHx8Ci0JCQkoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9TQikpIHsKLQkJCXNlbGVjdGlvbiA9IDE7CisJCXN3aXRjaCAoY2xvY2tzcmMpIHsKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKKwkJCWRpdmlzb3IgPSA2NDsKKwkJCWJyZWFrOworCQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOgogCQkJZGl2aXNvciA9IDMyOwotCQl9IGVsc2UgewotCQkJZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVQsICZ0bXApOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImNsb2NrZnJlcWxpbWl0IHBjaWNmZyByZWFkIGZhaWx1cmVcbiIpOwotCQkJCWdvdG8gb3V0X3N3aXRjaGJhY2s7Ci0JCQl9Ci0JCQlpZiAodG1wICYgMHgxMCkgewotCQkJCS8qIFBDSSAqLwotCQkJCXNlbGVjdGlvbiA9IDI7Ci0JCQkJZGl2aXNvciA9IDY0OwotCQkJfSBlbHNlIHsKLQkJCQkvKiBYVEFMICovCi0JCQkJc2VsZWN0aW9uID0gMTsKLQkJCQlkaXZpc29yID0gMzI7Ci0JCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFzc2VydCgwKTsKKwkJCWRpdmlzb3IgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgMTApIHsKLQkJc2VsZWN0aW9uID0gKHRtcCAmIDB4MDcpOwotCQlpZiAoc2VsZWN0aW9uKSB7Ci0JCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKLQkJCWRpdmlzb3IgPSA0ICogKDEgKyAoKHRtcCAmIDB4RkZGRjAwMDApID4+IDE2KSk7Ci0JCX0gZWxzZQorCQlzd2l0Y2ggKGNsb2Nrc3JjKSB7CisJCWNhc2UgQkNNNDN4eF9QQ1RMX0NMS1NSQ19MT1BXUk9TOgogCQkJZGl2aXNvciA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzoKKwkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKKwkJCXRtcCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwpOworCQkJZGl2aXNvciA9ICgodG1wICYgMHhGRkZGMDAwMCkgPj4gMTYpICsgMTsKKwkJCWRpdmlzb3IgKj0gNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXNzZXJ0KDApOworCQkJZGl2aXNvciA9IDE7CisJCX0KIAl9IGVsc2UgewogCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TWVNDTEtDVEwpOwotCQlkaXZpc29yID0gNCAqICgxICsgKCh0bXAgJiAweEZGRkYwMDAwKSA+PiAxNikpOwotCQlzZWxlY3Rpb24gPSAxOworCQlkaXZpc29yID0gKCh0bXAgJiAweEZGRkYwMDAwKSA+PiAxNikgKyAxOworCQlkaXZpc29yICo9IDQ7CiAJfQotCQotCXN3aXRjaCAoc2VsZWN0aW9uKSB7Ci0JY2FzZSAwOgotCQkvKiBMUE8gKi8KKworCXN3aXRjaCAoY2xvY2tzcmMpIHsKKwljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfTE9QV1JPUzoKIAkJaWYgKGdldF9tYXgpCiAJCQlsaW1pdCA9IDQzMDAwOwogCQllbHNlCiAJCQlsaW1pdCA9IDI1MDAwOwogCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIFhUQUwgKi8KKwljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOgogCQlpZiAoZ2V0X21heCkKIAkJCWxpbWl0ID0gMjAyMDAwMDA7CiAJCWVsc2UKIAkJCWxpbWl0ID0gMTk4MDAwMDA7CiAJCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogUENJICovCisJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKIAkJaWYgKGdldF9tYXgpCiAJCQlsaW1pdCA9IDM0MDAwMDAwOwogCQllbHNlCkBAIC0xMTMsMTcgKzEzNywxNCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhc3NlcnQoMCk7CisJCWxpbWl0ID0gMDsKIAl9CiAJbGltaXQgLz0gZGl2aXNvcjsKIAotb3V0X3N3aXRjaGJhY2s6Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sIG9sZF9jb3JlKTsKLQlhc3NlcnQoZXJyID09IDApOwotCi1vdXQ6CiAJcmV0dXJuIGxpbWl0OwogfQogCisKIC8qIGluaXQgcG93ZXIgY29udHJvbAogICogYXMgZGVzY3JpYmVkIGluIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9Qb3dlckNvbnRyb2wKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuaAppbmRleCA1ZjYzNjQwLi5jOTY2YWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuaApAQCAtMzMsNiArMzMsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKy8qIENsb2NrIHNvdXJjZXMgKi8KK2VudW0geworCS8qIFBDSSBjbG9jayAqLworCUJDTTQzeHhfUENUTF9DTEtTUkNfUENJLAorCS8qIENyeXN0YWwgc2xvdyBjbG9jayBvc2NpbGxhdG9yICovCisJQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1MsCisJLyogTG93IHBvd2VyIG9zY2lsbGF0b3IgKi8KKwlCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1MsCit9OwogCiBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCmluZGV4IGM0NGQ4OTAuLmI0MzhmNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCkBAIC03MSwxNCArNzEsNDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBzcHJvbTJoZXgoY29uc3QgdTE2ICpzcHJvbSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbikKK3sKKwlpbnQgaSwgcG9zID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X1NQUk9NX1NJWkU7IGkrKykgeworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBidWZfbGVuIC0gcG9zIC0gMSwKKwkJCQkiJTA0WCIsIHN3YWIxNihzcHJvbVtpXSkgJiAweEZGRkYpOworCX0KKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBidWZfbGVuIC0gcG9zIC0gMSwgIlxuIik7CisKKwlyZXR1cm4gcG9zICsgMTsKK30KKworc3RhdGljIGludCBoZXgyc3Byb20odTE2ICpzcHJvbSwgY29uc3QgY2hhciAqZHVtcCwgc2l6ZV90IGxlbikKK3sKKwljaGFyIHRtcFs1XSA9IHsgMCB9OworCWludCBjbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGFyc2VkOworCisJaWYgKGxlbiA8IEJDTTQzeHhfU1BST01fU0laRSAqIHNpemVvZih1MTYpICogMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY250IDwgQkNNNDN4eF9TUFJPTV9TSVpFKSB7CisJCW1lbWNweSh0bXAsIGR1bXAsIDQpOworCQlkdW1wICs9IDQ7CisJCXBhcnNlZCA9IHNpbXBsZV9zdHJ0b3VsKHRtcCwgTlVMTCwgMTYpOworCQlzcHJvbVtjbnQrK10gPSBzd2FiMTYoKHUxNilwYXJzZWQpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfc3Byb21fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9zcHJvbSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXUxNiAqc3Byb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CkBAIC05MSw1NSArMTIzLDUzIEBACiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7CiAJYXNzZXJ0KGJjbS0+aW5pdGlhbGl6ZWQpOwogCWVyciA9IGJjbTQzeHhfc3Byb21fcmVhZChiY20sIHNwcm9tKTsKLQlpZiAoIWVycikgewotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9TUFJPTV9TSVpFOyBpKyspIHsKLQkJCWJ1ZltpICogMl0gPSBzcHJvbVtpXSAmIDB4MDBGRjsKLQkJCWJ1ZltpICogMiArIDFdID0gKHNwcm9tW2ldICYgMHhGRjAwKSA+PiA4OwotCQl9Ci0JfQorCWlmICghZXJyKQorCQllcnIgPSBzcHJvbTJoZXgoc3Byb20sIGJ1ZiwgUEFHRV9TSVpFKTsKIAliY200M3h4X3VubG9ja19tbWlvKGJjbSwgZmxhZ3MpOwogCWtmcmVlKHNwcm9tKTsKIAotCXJldHVybiBlcnIgPyBlcnIgOiBCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YodTE2KTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9zcHJvbSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXUxNiAqc3Byb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoY291bnQgIT0gQkNNNDN4eF9TUFJPTV9TSVpFICogc2l6ZW9mKHUxNikpCi0JCXJldHVybiAtRUlOVkFMOwogCXNwcm9tID0ga21hbGxvYyhCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YoKnNwcm9tKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghc3Byb20pCiAJCXJldHVybiAtRU5PTUVNOwotCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X1NQUk9NX1NJWkU7IGkrKykgewotCQlzcHJvbVtpXSA9IGJ1ZltpICogMl0gJiAweEZGOwotCQlzcHJvbVtpXSB8PSAoKHUxNikoYnVmW2kgKiAyICsgMV0gJiAweEZGKSkgPDwgODsKLQl9CisJZXJyID0gaGV4MnNwcm9tKHNwcm9tLCBidWYsIGNvdW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9rZnJlZTsKIAliY200M3h4X2xvY2tfbW1pbyhiY20sIGZsYWdzKTsKIAlhc3NlcnQoYmNtLT5pbml0aWFsaXplZCk7CiAJZXJyID0gYmNtNDN4eF9zcHJvbV93cml0ZShiY20sIHNwcm9tKTsKIAliY200M3h4X3VubG9ja19tbWlvKGJjbSwgZmxhZ3MpOworb3V0X2tmcmVlOgogCWtmcmVlKHNwcm9tKTsKIAogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIAogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoc3Byb20sIDA2MDAsCisJCSAgIGJjbTQzeHhfYXR0cl9zcHJvbV9zaG93LAorCQkgICBiY200M3h4X2F0dHJfc3Byb21fc3RvcmUpOworCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfaW50ZXJmbW9kZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlzc2l6ZV90IGNvdW50ID0gMDsKQEAgLTE3NSw3ICsyMDUsNyBAQAogCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldmF0dHJfdG9fYmNtKGF0dHIsIGF0dHJfaW50ZXJmbW9kZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlpbnQgbW9kZTsKQEAgLTIxNSwxMSArMjQ1LDE1IEBACiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJmZXJlbmNlLCAwNjQ0LAorCQkgICBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zaG93LAorCQkgICBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zdG9yZSk7CisKIHN0YXRpYyBzc2l6ZV90IGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9wcmVhbWJsZSk7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAlzc2l6ZV90IGNvdW50OwpAQCAtMjQ1LDcgKzI3OSw3IEBACiAJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZhdHRyX3RvX2JjbShhdHRyLCBhdHRyX3ByZWFtYmxlKTsKKwlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWludCB2YWx1ZTsKQEAgLTI2Nyw1NiArMzAxLDQxIEBACiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoc2hvcnRwcmVhbWJsZSwgMDY0NCwKKwkJICAgYmNtNDN4eF9hdHRyX3ByZWFtYmxlX3Nob3csCisJCSAgIGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zdG9yZSk7CisKIGludCBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmNtLT5wY2lfZGV2LT5kZXY7Ci0Jc3RydWN0IGJjbTQzeHhfc3lzZnMgKnN5c2ZzID0gJmJjbS0+c3lzZnM7CiAJaW50IGVycjsKIAogCWFzc2VydChiY20tPmluaXRpYWxpemVkKTsKIAotCXN5c2ZzLT5hdHRyX3Nwcm9tLmF0dHIubmFtZSA9ICJzcHJvbSI7Ci0Jc3lzZnMtPmF0dHJfc3Byb20uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwotCXN5c2ZzLT5hdHRyX3Nwcm9tLmF0dHIubW9kZSA9IDA2MDA7Ci0Jc3lzZnMtPmF0dHJfc3Byb20uc2hvdyA9IGJjbTQzeHhfYXR0cl9zcHJvbV9zaG93OwotCXN5c2ZzLT5hdHRyX3Nwcm9tLnN0b3JlID0gYmNtNDN4eF9hdHRyX3Nwcm9tX3N0b3JlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9zcHJvbSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuYXR0ci5uYW1lID0gImludGVyZmVyZW5jZSI7Ci0Jc3lzZnMtPmF0dHJfaW50ZXJmbW9kZS5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7Ci0Jc3lzZnMtPmF0dHJfaW50ZXJmbW9kZS5hdHRyLm1vZGUgPSAwNjAwOwotCXN5c2ZzLT5hdHRyX2ludGVyZm1vZGUuc2hvdyA9IGJjbTQzeHhfYXR0cl9pbnRlcmZtb2RlX3Nob3c7Ci0Jc3lzZnMtPmF0dHJfaW50ZXJmbW9kZS5zdG9yZSA9IGJjbTQzeHhfYXR0cl9pbnRlcmZtb2RlX3N0b3JlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9pbnRlcmZtb2RlKTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZW1vdmVfc3Byb207Ci0KLQlzeXNmcy0+YXR0cl9wcmVhbWJsZS5hdHRyLm5hbWUgPSAic2hvcnRwcmVhbWJsZSI7Ci0Jc3lzZnMtPmF0dHJfcHJlYW1ibGUuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwotCXN5c2ZzLT5hdHRyX3ByZWFtYmxlLmF0dHIubW9kZSA9IDA2MDA7Ci0Jc3lzZnMtPmF0dHJfcHJlYW1ibGUuc2hvdyA9IGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zaG93OwotCXN5c2ZzLT5hdHRyX3ByZWFtYmxlLnN0b3JlID0gYmNtNDN4eF9hdHRyX3ByZWFtYmxlX3N0b3JlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9wcmVhbWJsZSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlbW92ZV9pbnRlcmZtb2RlOwogCiBvdXQ6CiAJcmV0dXJuIGVycjsKIGVycl9yZW1vdmVfaW50ZXJmbW9kZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc3lzZnMtPmF0dHJfaW50ZXJmbW9kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ludGVyZmVyZW5jZSk7CiBlcnJfcmVtb3ZlX3Nwcm9tOgotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9zcHJvbSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKIAlnb3RvIG91dDsKIH0KIAogdm9pZCBiY200M3h4X3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZiY20tPnBjaV9kZXYtPmRldjsKLQlzdHJ1Y3QgYmNtNDN4eF9zeXNmcyAqc3lzZnMgPSAmYmNtLT5zeXNmczsKIAotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9wcmVhbWJsZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnN5c2ZzLT5hdHRyX2ludGVyZm1vZGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzeXNmcy0+YXR0cl9zcHJvbSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnRlcmZlcmVuY2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zcHJvbSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oCmluZGV4IDU3ZjE0NTEuLmNjNzAxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oCkBAIC0xLDIyICsxLDYgQEAKICNpZm5kZWYgQkNNNDN4eF9TWVNGU19IXwogI2RlZmluZSBCQ000M3h4X1NZU0ZTX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotCi1zdHJ1Y3QgYmNtNDN4eF9zeXNmcyB7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl9zcHJvbTsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX2ludGVyZm1vZGU7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl9wcmVhbWJsZTsKLX07Ci0KLSNkZWZpbmUgZGV2YXR0cl90b19iY20oYXR0ciwgYXR0cl9uYW1lKQkoewkJCQlcCi0Jc3RydWN0IGJjbTQzeHhfc3lzZnMgKl9fczsgc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqX19wOwkJXAotCV9fcyA9IGNvbnRhaW5lcl9vZigoYXR0ciksIHN0cnVjdCBiY200M3h4X3N5c2ZzLCBhdHRyX25hbWUpOwlcCi0JX19wID0gY29udGFpbmVyX29mKF9fcywgc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSwgc3lzZnMpOwkJXAotCV9fcDsJCQkJCQkJCVwKLQkJCQkJfSkKLQogc3RydWN0IGJjbTQzeHhfcHJpdmF0ZTsKIAogaW50IGJjbTQzeHhfc3lzZnNfcmVnaXN0ZXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKaW5kZXggM2RhZWU4Mi4uYjQ1MDYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKQEAgLTE4Miw4ICsxODIsMTEgQEAKIAkJbW9kZSA9IEJDTTQzeHhfSU5JVElBTF9JV01PREU7CiAKIAliY200M3h4X2xvY2tfbW1pbyhiY20sIGZsYWdzKTsKLQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlICE9IG1vZGUpCi0JCWJjbTQzeHhfc2V0X2l3bW9kZShiY20sIG1vZGUpOworCWlmIChiY20tPmluaXRpYWxpemVkKSB7CisJCWlmIChiY20tPmllZWUtPml3X21vZGUgIT0gbW9kZSkKKwkJCWJjbTQzeHhfc2V0X2l3bW9kZShiY20sIG1vZGUpOworCX0gZWxzZQorCQliY20tPmllZWUtPml3X21vZGUgPSBtb2RlOwogCWJjbTQzeHhfdW5sb2NrX21taW8oYmNtLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTk2MiwyMiArOTY1LDIyIEBACiAJewogCQkuY21kCQk9IFBSSVZfV1hfU0VUX1NIT1JUUFJFQU1CTEUsCiAJCS5zZXRfYXJncwk9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCQkubmFtZQkJPSAic2V0X3Nob3J0cHJlYW1ibCIsCisJCS5uYW1lCQk9ICJzZXRfc2hvcnRwcmVhbWIiLAogCX0sCiAJewogCQkuY21kCQk9IFBSSVZfV1hfR0VUX1NIT1JUUFJFQU1CTEUsCiAJCS5nZXRfYXJncwk9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dYX1NUUklORywKLQkJLm5hbWUJCT0gImdldF9zaG9ydHByZWFtYmwiLAorCQkubmFtZQkJPSAiZ2V0X3Nob3J0cHJlYW1iIiwKIAl9LAogCXsKIAkJLmNtZAkJPSBQUklWX1dYX1NFVF9TV0VOQ1JZUFRJT04sCiAJCS5zZXRfYXJncwk9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCQkubmFtZQkJPSAic2V0X3N3ZW5jcnlwdGlvbiIsCisJCS5uYW1lCQk9ICJzZXRfc3dlbmNyeXB0IiwKIAl9LAogCXsKIAkJLmNtZAkJPSBQUklWX1dYX0dFVF9TV0VOQ1JZUFRJT04sCiAJCS5nZXRfYXJncwk9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dYX1NUUklORywKLQkJLm5hbWUJCT0gImdldF9zd2VuY3J5cHRpb24iLAorCQkubmFtZQkJPSAiZ2V0X3N3ZW5jcnlwdCIsCiAJfSwKIAl7CiAJCS5jbWQJCT0gUFJJVl9XWF9TUFJPTV9XUklURSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCBkMzM1YjI1Li41NWJlZDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC00Miw3ICs0Miw3IEBACiAvKiBzdHJ1Y3QgbG9jYWxfaW5mbzo6aHdfcHJpdiAqLwogc3RydWN0IGhvc3RhcF9jc19wcml2IHsKIAlkZXZfbm9kZV90IG5vZGU7Ci0JZGV2X2xpbmtfdCAqbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgc2FuZGlza19jb25uZWN0cGx1czsKIH07CiAKQEAgLTIwNCwxNSArMjA0LDEzIEBACiAKIHN0YXRpYyB2b2lkIHByaXNtMl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIHN0YXRpYyB2b2lkIHByaXNtMl9yZWxlYXNlKHVfbG9uZyBhcmcpOwotc3RhdGljIGludCBwcmlzbTJfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIGludCBwcmlzbTJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogCiBzdGF0aWMgaW50IHByaXNtMl9wY2NhcmRfY2FyZF9wcmVzZW50KGxvY2FsX2luZm9fdCAqbG9jYWwpCiB7CiAJc3RydWN0IGhvc3RhcF9jc19wcml2ICpod19wcml2ID0gbG9jYWwtPmh3X3ByaXY7Ci0JaWYgKGh3X3ByaXYgIT0gTlVMTCAmJiBod19wcml2LT5saW5rICE9IE5VTEwgJiYKLQkgICAgKChod19wcml2LT5saW5rLT5zdGF0ZSAmIChERVZfUFJFU0VOVCB8IERFVl9DT05GSUcpKSA9PQotCSAgICAgKERFVl9QUkVTRU5UIHwgREVWX0NPTkZJRykpKQorCWlmIChod19wcml2ICE9IE5VTEwgJiYgaHdfcHJpdi0+bGluayAhPSBOVUxMICYmIHBjbWNpYV9kZXZfcHJlc2VudChod19wcml2LT5saW5rKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzcsNyArMjM1LDcgQEAKIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IDB4MTA7IC8qIDB4M2YwIElPIGJhc2UgMSAqLwogCXJlZy5WYWx1ZSA9IGh3X3ByaXYtPmxpbmstPmlvLkJhc2VQb3J0MSAmIDB4MDBmZjsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJQcmlzbTMgU2FuRGlzayAtIGZhaWxlZCB0byBzZXQgSS9PIGJhc2UgMCAtIgpAQCAtMjQ5LDcgKzI0Nyw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5PZmZzZXQgPSAweDEyOyAvKiAweDNmMiBJTyBiYXNlIDIgKi8KIAlyZWcuVmFsdWUgPSAoaHdfcHJpdi0+bGluay0+aW8uQmFzZVBvcnQxICYgMHhmZjAwKSA+PiA4OwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlByaXNtMyBTYW5EaXNrIC0gZmFpbGVkIHRvIHNldCBJL08gYmFzZSAxIC0iCkBAIC0zMDEsOSArMjk5LDkgQEAKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwgJnR1cGxlKSB8fAotCSAgICBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaHdfcHJpdi0+bGluay0+aGFuZGxlLCAmdHVwbGUpIHx8Ci0JICAgIHBjbWNpYV9wYXJzZV90dXBsZShod19wcml2LT5saW5rLT5oYW5kbGUsICZ0dXBsZSwgcGFyc2UpIHx8CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaHdfcHJpdi0+bGluaywgJnR1cGxlKSB8fAorCSAgICBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaHdfcHJpdi0+bGluaywgJnR1cGxlKSB8fAorCSAgICBwY21jaWFfcGFyc2VfdHVwbGUoaHdfcHJpdi0+bGluaywgJnR1cGxlLCBwYXJzZSkgfHwKIAkgICAgcGFyc2UtPm1hbmZpZC5tYW5mICE9IDB4ZDYwMSB8fCBwYXJzZS0+bWFuZmlkLmNhcmQgIT0gMHgwMTAxKSB7CiAJCS8qIE5vIFNhbkRpc2sgbWFuZmlkIGZvdW5kICovCiAJCXJldCA9IC1FTk9ERVY7CkBAIC0zMTEsOSArMzA5LDkgQEAKIAl9CiAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwgJnR1cGxlKSB8fAotCSAgICBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaHdfcHJpdi0+bGluay0+aGFuZGxlLCAmdHVwbGUpIHx8Ci0JICAgIHBjbWNpYV9wYXJzZV90dXBsZShod19wcml2LT5saW5rLT5oYW5kbGUsICZ0dXBsZSwgcGFyc2UpIHx8CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaHdfcHJpdi0+bGluaywgJnR1cGxlKSB8fAorCSAgICBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaHdfcHJpdi0+bGluaywgJnR1cGxlKSB8fAorCSAgICBwY21jaWFfcGFyc2VfdHVwbGUoaHdfcHJpdi0+bGluaywgJnR1cGxlLCBwYXJzZSkgfHwKIAkJcGFyc2UtPmxvbmdsaW5rX21mYy5uZm4gPCAyKSB7CiAJCS8qIE5vIG11bHRpLWZ1bmN0aW9uIGxpbmtzIGZvdW5kICovCiAJCXJldCA9IC1FTk9ERVY7CkBAIC0zMjgsNyArMzI2LDcgQEAKIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJcmVnLlZhbHVlID0gQ09SX1NPRlRfUkVTRVQ7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNhbkRpc2sgLSBDT1Igc3Jlc2V0IGZhaWxlZCAoJWQpXG4iLApAQCAtMzQ1LDcgKzM0Myw3IEBACiAJICogd2lsbCBiZSBlbmFibGVkIGR1cmluZyB0aGUgZmlyc3QgY29yX3NyZXNldCBjYWxsLgogCSAqLwogCXJlZy5WYWx1ZSA9IENPUl9MRVZFTF9SRVEgfCAweDggfCBDT1JfQUREUl9ERUNPREUgfCBDT1JfRlVOQ19FTkE7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNhbkRpc2sgLSBDT1Igc3Jlc2V0IGZhaWxlZCAoJWQpXG4iLApAQCAtMzgwLDcgKzM3OCw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1JFQUQ7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJcmVnLlZhbHVlID0gMDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2Nvcl9zcmVzZXQgZmFpbGVkIDEgKCVkKVxuIiwKQEAgLTM5Miw3ICszOTAsNyBAQAogCiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5WYWx1ZSB8PSBDT1JfU09GVF9SRVNFVDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2Nvcl9zcmVzZXQgZmFpbGVkIDIgKCVkKVxuIiwKQEAgLTQwNSw3ICs0MDMsNyBAQAogCXJlZy5WYWx1ZSAmPSB+Q09SX1NPRlRfUkVTRVQ7CiAJaWYgKGh3X3ByaXYtPnNhbmRpc2tfY29ubmVjdHBsdXMpCiAJCXJlZy5WYWx1ZSB8PSBDT1JfSVJFUV9FTkE7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0IGZhaWxlZCAzICglZClcbiIsCkBAIC00MzksNyArNDM3LDcgQEAKIAlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKIAlyZWcuVmFsdWUgPSAwOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDEgIgpAQCAtNDUyLDcgKzQ1MCw3IEBACiAKIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLlZhbHVlIHw9IENPUl9TT0ZUX1JFU0VUOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLT5oYW5kbGUsCisJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKIAlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDIgIgpAQCAtNDY2LDcgKzQ2NCw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5WYWx1ZSA9IGhjcjsKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7Ci0JcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmstPmhhbmRsZSwKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgMyAiCkBAIC00NzgsNyArNDc2LDcgQEAKIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJcmVnLlZhbHVlID0gb2xkX2NvciAmIH5DT1JfU09GVF9SRVNFVDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluay0+aGFuZGxlLAorCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7CiAJaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCA0ICIKQEAgLTUwMSw0MCArNDk5LDI3IEBACiAKIC8qIGFsbG9jYXRlIGxvY2FsIGRhdGEgYW5kIHJlZ2lzdGVyIHdpdGggQ2FyZFNlcnZpY2VzCiAgKiBpbml0aWFsaXplIGRldl9saW5rIHN0cnVjdHVyZSwgYnV0IGRvIG5vdCBjb25maWd1cmUgdGhlIGNhcmQgeWV0ICovCi1zdGF0aWMgaW50IHByaXNtMl9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBob3N0YXBfY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotCWRldl9saW5rX3QgKmxpbms7Ci0KLQlsaW5rID0ga21hbGxvYyhzaXplb2YoZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwotCWlmIChsaW5rID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGxpbmssIDAsIHNpemVvZihkZXZfbGlua190KSk7CisJaW50IHJldDsKIAogCVBERUJVRyhERUJVR19IVywgIiVzOiBzZXR0aW5nIFZjYz0zMyAoY29uc3RhbnQpXG4iLCBkZXZfaW5mbyk7Ci0JbGluay0+Y29uZi5WY2MgPSAzMzsKLQlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKwlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0JaWYgKHByaXNtMl9jb25maWcobGluaykpCisJcmV0ID0gcHJpc20yX2NvbmZpZyhwX2Rldik7CisJaWYgKHJldCkgewogCQlQREVCVUcoREVCVUdfRVhUUkEsICJwcmlzbTJfY29uZmlnKCkgZmFpbGVkXG4iKTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyB2b2lkIHByaXNtMl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgcHJpc20yX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCVBERUJVRyhERUJVR19GTE9XLCAicHJpc20yX2RldGFjaFxuIik7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXByaXNtMl9yZWxlYXNlKCh1X2xvbmcpbGluayk7Ci0JfQorCXByaXNtMl9yZWxlYXNlKCh1X2xvbmcpbGluayk7CiAKIAkvKiByZWxlYXNlIG5ldCBkZXZpY2VzICovCiAJaWYgKGxpbmstPnByaXYpIHsKQEAgLTU0Nyw3ICs1MzIsNiBAQAogCQlwcmlzbTJfZnJlZV9sb2NhbF9kYXRhKGRldik7CiAJCWtmcmVlKGh3X3ByaXYpOwogCX0KLQlrZnJlZShsaW5rKTsKIH0KIAogCkBAIC01NTgsNyArNTQyLDcgQEAKIGRvIHsgaW50IHJldCA9IChyZXRmKTsgXAogaWYgKHJldCAhPSAwKSB7IFwKIAlQREVCVUcoREVCVUdfRVhUUkEsICJDYXJkU2VydmljZXMoIiAjZm4gIikgcmV0dXJuZWQgJWRcbiIsIHJldCk7IFwKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGZuLCByZXQpOyBcCisJY3NfZXJyb3IobGluaywgZm4sIHJldCk7IFwKIAlnb3RvIG5leHRfZW50cnk7IFwKIH0gXAogfSB3aGlsZSAoMCkKQEAgLTU2Niw3ICs1NTAsNyBAQAogCiAvKiBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudCBpcyByZWNlaXZlZCB0byBjb25maWd1cmUgdGhlIFBDTUNJQQogICogc29ja2V0IGFuZCBtYWtlIHRoZSBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0gKi8KLXN0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBwcmlzbTJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwpAQCAtNTk1LDI3ICs1NzksMjQgQEAKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLT5oYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLT5oYW5kbGUsICZ0dXBsZSwgcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsIHBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UtPmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLT5jb25maWcucm1hc2tbMF07CiAKIAlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywKLQkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmstPmhhbmRsZSwgJmNvbmYpKTsKLQlQREVCVUcoREVCVUdfSFcsICIlczogJXMgVmNjPSVkIChmcm9tIGNvbmZpZylcbiIsIGRldl9pbmZvLAotCSAgICAgICBpZ25vcmVfY2lzX3ZjYyA/ICJpZ25vcmluZyIgOiAic2V0dGluZyIsIGNvbmYuVmNjKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOworCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKIAogCS8qIExvb2sgZm9yIGFuIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cnkgaW4gdGhlIENJUyAqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCWZvciAoOzspIHsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS0+Y2Z0YWJsZV9lbnRyeSk7CiAJCUNGR19DSEVDSzIoR2V0VHVwbGVEYXRhLAotCQkJICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmstPmhhbmRsZSwgJnR1cGxlKSk7CisJCQkgICBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CiAJCUNGR19DSEVDSzIoUGFyc2VUdXBsZSwKLQkJCSAgIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLT5oYW5kbGUsICZ0dXBsZSwgcGFyc2UpKTsKKwkJCSAgIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsIHBhcnNlKSk7CiAKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQogCQkJZGZsdCA9ICpjZmc7CkBAIC02NTAsMTAgKzYzMSwxMCBAQAogCQl9CiAKIAkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAKIAkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCkBAIC02OTUsMTkgKzY3NiwxOSBAQAogCiAJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCiAJCUNGR19DSEVDSzIoUmVxdWVzdElPLAotCQkJICAgcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKTsKKwkJCSAgIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwogCiAJCS8qIFRoaXMgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyeSBpcyBPSyAqLwogCQlicmVhazsKIAogCW5leHRfZW50cnk6CiAJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwKLQkJCSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUpKTsKKwkJCSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJfQogCiAJLyogTmVlZCB0byBhbGxvY2F0ZSBuZXRfZGV2aWNlIGJlZm9yZSByZXF1ZXN0aW5nIElSUSBoYW5kbGVyICovCiAJZGV2ID0gcHJpc20yX2luaXRfbG9jYWxfZGF0YSgmcHJpc20yX3BjY2FyZF9mdW5jcywgMCwKLQkJCQkgICAgICZoYW5kbGVfdG9fZGV2KGxpbmstPmhhbmRsZSkpOworCQkJCSAgICAgJmhhbmRsZV90b19kZXYobGluaykpOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJZ290byBmYWlsZWQ7CiAJbGluay0+cHJpdiA9IGRldjsKQEAgLTcxNyw3ICs2OTgsNyBAQAogCWxvY2FsLT5od19wcml2ID0gaHdfcHJpdjsKIAlod19wcml2LT5saW5rID0gbGluazsKIAlzdHJjcHkoaHdfcHJpdi0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKLQlsaW5rLT5kZXYgPSAmaHdfcHJpdi0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZod19wcml2LT5ub2RlOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCkBAIC03MzAsNyArNzExLDcgQEAKIAkJbGluay0+aXJxLkhhbmRsZXIgPSBwcmlzbTJfaW50ZXJydXB0OwogCQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAJCUNTX0NIRUNLKFJlcXVlc3RJUlEsCi0JCQkgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCQkJIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAJfQogCiAJLyoKQEAgLTczOSwxOCArNzIwLDE3IEBACiAJICogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkgKi8KIAlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKLQkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAKIAkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICAgICAgZGV2X2luZm8sIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgICAgIGxpbmstPmNvbmYuVmNjIC8gMTAsIGxpbmstPmNvbmYuVmNjICUgMTApOwotCWlmIChsaW5rLT5jb25mLlZwcDEpCi0JCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcDEgLyAxMCwKLQkJICAgICAgIGxpbmstPmNvbmYuVnBwMSAlIDEwKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4OiAiLAorCSAgICAgICBkZXZfaW5mbywgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuVnBwKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAgLyAxMCwKKwkJICAgICAgIGxpbmstPmNvbmYuVnBwICUgMTApOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCkBAIC03NjEsOSArNzQxLDYgQEAKIAkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CiAJcHJpbnRrKCJcbiIpOwogCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCiAJbG9jYWwtPnNodXRkb3duID0gMDsKIAogCXNhbmRpc2tfZW5hYmxlX3dpcmVsZXNzKGRldik7CkBAIC03NzgsNyArNzU1LDcgQEAKIAlyZXR1cm4gcmV0OwogCiAgY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogIGZhaWxlZDoKIAlrZnJlZShwYXJzZSk7CkBAIC03OTAsNyArNzY3LDcgQEAKIAogc3RhdGljIHZvaWQgcHJpc20yX3JlbGVhc2UodV9sb25nIGFyZykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gKGRldl9saW5rX3QgKilhcmc7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilhcmc7CiAKIAlQREVCVUcoREVCVUdfRkxPVywgInByaXNtMl9yZWxlYXNlXG4iKTsKIApAQCAtNzk5LDcxICs3NzYsNTQgQEAKIAkJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCiAJCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJCXByaXNtMl9od19zaHV0ZG93bihkZXYsIDApOworCQlwcmlzbTJfaHdfc2h1dGRvd24oZGV2LCAwKTsKIAkJaWZhY2UtPmxvY2FsLT5zaHV0ZG93biA9IDE7CiAJfQogCi0JaWYgKGxpbmstPndpbikKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQotCQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCVBERUJVRyhERUJVR19GTE9XLCAicmVsZWFzZSAtIGRvbmVcbiIpOwogfQogCi1zdGF0aWMgaW50IGhvc3RhcF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgaG9zdGFwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwogCWludCBkZXZfb3BlbiA9IDA7CisJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlID0gTlVMTDsKKworCWlmIChkZXYpCisJCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCVBERUJVRyhERUJVR19FWFRSQSwgIiVzOiBDU19FVkVOVF9QTV9TVVNQRU5EXG4iLCBkZXZfaW5mbyk7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJaWYgKGlmYWNlICYmIGlmYWNlLT5sb2NhbCkKLQkJCWRldl9vcGVuID0gaWZhY2UtPmxvY2FsLT5udW1fZGV2X29wZW4gPiAwOwotCQlpZiAoZGV2X29wZW4pIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJfQotCQlwcmlzbTJfc3VzcGVuZChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CisJaWYgKGlmYWNlICYmIGlmYWNlLT5sb2NhbCkKKwkJZGV2X29wZW4gPSBpZmFjZS0+bG9jYWwtPm51bV9kZXZfb3BlbiA+IDA7CisJaWYgKGRldl9vcGVuKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCX0KKwlwcmlzbTJfc3VzcGVuZChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaG9zdGFwX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGhvc3RhcF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwogCWludCBkZXZfb3BlbiA9IDA7CisJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlID0gTlVMTDsKKworCWlmIChkZXYpCisJCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCVBERUJVRyhERUJVR19FWFRSQSwgIiVzOiBDU19FVkVOVF9QTV9SRVNVTUVcbiIsIGRldl9pbmZvKTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JCWlmIChpZmFjZSAmJiBpZmFjZS0+bG9jYWwpCi0JCQlkZXZfb3BlbiA9IGlmYWNlLT5sb2NhbC0+bnVtX2Rldl9vcGVuID4gMDsKKwlpZiAoaWZhY2UgJiYgaWZhY2UtPmxvY2FsKQorCQlkZXZfb3BlbiA9IGlmYWNlLT5sb2NhbC0+bnVtX2Rldl9vcGVuID4gMDsKIAotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JCXByaXNtMl9od19zaHV0ZG93bihkZXYsIDEpOwotCQlwcmlzbTJfaHdfY29uZmlnKGRldiwgZGV2X29wZW4gPyAwIDogMSk7Ci0JCWlmIChkZXZfb3BlbikgewotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJfQorCXByaXNtMl9od19zaHV0ZG93bihkZXYsIDEpOworCXByaXNtMl9od19jb25maWcoZGV2LCBkZXZfb3BlbiA/IDAgOiAxKTsKKwlpZiAoZGV2X29wZW4pIHsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTMwLDcgKzg5MCw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gImhvc3RhcF9jcyIsCiAJfSwKLQkucHJvYmUJCT0gcHJpc20yX2F0dGFjaCwKKwkucHJvYmUJCT0gaG9zdGFwX2NzX3Byb2JlLAogCS5yZW1vdmUJCT0gcHJpc20yX2RldGFjaCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlCT0gaG9zdGFwX2NzX2lkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCA4YjM3ZTgyLi44Mzk5ZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0xODYwLDcgKzE4NjAsNyBAQAogCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCWlmIChzY2FuKSB7Ci0JCWNoYW4gPSBzY2FuLT5jaGlkOworCQljaGFuID0gbGUxNl90b19jcHUoc2Nhbi0+Y2hpZCk7CiAJfSBlbHNlIGlmIChic3MpIHsKIAkJY2hhbiA9IGJzcy0+Y2hhbjsKIAl9IGVsc2UgewpAQCAtMTg2OCw3ICsxODY4LDcgQEAKIAl9CiAKIAlpZiAoY2hhbiA+IDApIHsKLQkJaXdlLnUuZnJlcS5tID0gZnJlcV9saXN0W2xlMTZfdG9fY3B1KGNoYW4gLSAxKV0gKiAxMDAwMDA7CisJCWl3ZS51LmZyZXEubSA9IGZyZXFfbGlzdFtjaGFuIC0gMV0gKiAxMDAwMDA7CiAJCWl3ZS51LmZyZXEuZSA9IDE7CiAJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAogCQkJCQkJICBJV19FVl9GUkVRX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggOWRjZTUyMi4uYmNhODljZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtNTU3Myw4ICs1NTczLDcgQEAKIAljYXNlIElFRUU4MDIxMV81MkdIWl9CQU5EOgogCQluZXR3b3JrLT5tb2RlID0gSUVFRV9BOwogCQlpID0gaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7Ci0JCWlmIChpID09IC0xKQotCQkJQlVHKCk7CisJCUJVR19PTihpID09IC0xKTsKIAkJaWYgKGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkpIHsKIAkJCUlQV19XQVJOSU5HKCJPdmVycmlkaW5nIGludmFsaWQgY2hhbm5lbFxuIik7CiAJCQlwcml2LT5jaGFubmVsID0gZ2VvLT5hWzBdLmNoYW5uZWw7CkBAIC01NTg3LDggKzU1ODYsNyBAQAogCQllbHNlCiAJCQluZXR3b3JrLT5tb2RlID0gSUVFRV9COwogCQlpID0gaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7Ci0JCWlmIChpID09IC0xKQotCQkJQlVHKCk7CisJCUJVR19PTihpID09IC0xKTsKIAkJaWYgKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CiAJCQlJUFdfV0FSTklORygiT3ZlcnJpZGluZyBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQkJcHJpdi0+Y2hhbm5lbCA9IGdlby0+YmdbMF0uY2hhbm5lbDsKQEAgLTY3MTUsOCArNjcxMyw3IEBACiAKIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6Ci0JCWlmICghKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCi0JCQlCVUcoKTsKKwkJQlVHX09OKCEobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSk7CiAKIAkJcW9zX2RhdGEgPSAmaWJzc19kYXRhOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwppbmRleCA3NWNlNmRkLi45MzQzZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCkBAIC0xOTAsOCArMTkwLDggQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAvKiBQQ01DSUEgKENhcmQgU2VydmljZXMpIHJlbGF0ZWQgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBuZXR3YXZlX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7ICAgICAvKiBDYXJkIHJlbW92YWwgKi8KLXN0YXRpYyB2b2lkIG5ldHdhdmVfcGNtY2lhX2NvbmZpZyhkZXZfbGlua190ICphcmcpOyAvKiBSdW5zIGFmdGVyIGNhcmQgCitzdGF0aWMgdm9pZCBuZXR3YXZlX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOyAgICAgLyogQ2FyZCByZW1vdmFsICovCitzdGF0aWMgaW50IG5ldHdhdmVfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqYXJnKTsgLyogUnVucyBhZnRlciBjYXJkCiAJCQkJCQkJCQkJCQkJICAgaW5zZXJ0aW9uICovCiBzdGF0aWMgdm9pZCBuZXR3YXZlX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOyAgICAvKiBEZXN0cm95IGluc3RhbmNlICovCiAKQEAgLTIyMSwxMCArMjIxLDEwIEBACiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qCi0gICBBIGRldl9saW5rX3Qgc3RydWN0dXJlIGhhcyBmaWVsZHMgZm9yIG1vc3QgdGhpbmdzIHRoYXQgYXJlIG5lZWRlZAorICAgQSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgaGFzIGZpZWxkcyBmb3IgbW9zdCB0aGluZ3MgdGhhdCBhcmUgbmVlZGVkCiAgICB0byBrZWVwIHRyYWNrIG9mIGEgc29ja2V0LCBidXQgdGhlcmUgd2lsbCB1c3VhbGx5IGJlIHNvbWUgZGV2aWNlCiAgICBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGFsc28gbmVlZHMgdG8gYmUga2VwdCB0cmFjayBvZi4gIFRoZQotICAgJ3ByaXYnIHBvaW50ZXIgaW4gYSBkZXZfbGlua190IHN0cnVjdHVyZSBjYW4gYmUgdXNlZCB0byBwb2ludCB0bworICAgJ3ByaXYnIHBvaW50ZXIgaW4gYSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gcG9pbnQgdG8KICAgIGEgZGV2aWNlLXNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIGxpa2UgdGhpcy4KIAogICAgQSBkcml2ZXIgbmVlZHMgdG8gcHJvdmlkZSBhIGRldl9ub2RlX3Qgc3RydWN0dXJlIGZvciBlYWNoIGRldmljZQpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICBleGFtcGxlLCBldGhlcm5ldCBjYXJkcywgbW9kZW1zKS4gIEluIG90aGVyIGNhc2VzLCB0aGVyZSBtYXkgYmUKICAgIG1hbnkgYWN0dWFsIG9yIGxvZ2ljYWwgZGV2aWNlcyAoU0NTSSBhZGFwdGVycywgbWVtb3J5IGNhcmRzIHdpdGgKICAgIG11bHRpcGxlIHBhcnRpdGlvbnMpLiAgVGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlcyBuZWVkIHRvIGJlIGtlcHQKLSAgIGluIGEgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgdGhlICdkZXYnIGZpZWxkIG9mIGEgZGV2X2xpbmtfdAorICAgaW4gYSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCB0aGUgJ2RldicgZmllbGQgb2YgYSBzdHJ1Y3QgcGNtY2lhX2RldmljZQogICAgc3RydWN0dXJlLiAgV2UgYWxsb2NhdGUgdGhlbSBpbiB0aGUgY2FyZCdzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsCiAgICBiZWNhdXNlIHRoZXkgZ2VuZXJhbGx5IGNhbid0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KICovCkBAIC0yNjgsNyArMjY4LDcgQEAKIH07CQogICAgCiB0eXBlZGVmIHN0cnVjdCBuZXR3YXZlX3ByaXZhdGUgewotICAgIGRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgc3BpbmxvY2tfdAlzcGlubG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgKFNNUCkgKi8KICAgICBkZXZfbm9kZV90IG5vZGU7CiAgICAgdV9jaGFyICAgICBfX2lvbWVtICpyYW1CYXNlOwpAQCAtMzc2LDIwICszNzYsMTkgQEAKICAqICAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQogICogICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgogICovCi1zdGF0aWMgaW50IG5ldHdhdmVfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgbmV0d2F2ZV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBkZXZfbGlua190ICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2OwogCiAgICAgREVCVUcoMCwgIm5ldHdhdmVfYXR0YWNoKClcbiIpOwogCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KKyAgICAvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKi8KICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobmV0d2F2ZV9wcml2YXRlKSk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAgICAgcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbGluayA9ICZwcml2LT5saW5rOworICAgIHByaXYtPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gZGV2OwogCiAgICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCkBAIC00MDYsNyArNDA1LDYgQEAKICAgICAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC00MzAsMTMgKzQyOCw3IEBACiAgICAgZGV2LT5zdG9wID0gJm5ldHdhdmVfY2xvc2U7CiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIG5ldHdhdmVfcGNtY2lhX2NvbmZpZyggbGluayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV0d2F2ZV9wY21jaWFfY29uZmlnKCBsaW5rKTsKIH0gLyogbmV0d2F2ZV9hdHRhY2ggKi8KIAogLyoKQEAgLTQ0NywxNyArNDM5LDE1IEBACiAgKiAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAogICogICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgogICovCi1zdGF0aWMgdm9pZCBuZXR3YXZlX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBuZXR3YXZlX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJuZXR3YXZlX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQluZXR3YXZlX3JlbGVhc2UobGluayk7CisJbmV0d2F2ZV9yZWxlYXNlKGxpbmspOwogCi0JaWYgKGxpbmstPmRldikKKwlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKIAlmcmVlX25ldGRldihkZXYpOwpAQCAtNzQzLDggKzczMyw3IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIG5ldHdhdmVfcGNtY2lhX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKSB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKK3N0YXRpYyBpbnQgbmV0d2F2ZV9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKSB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB0dXBsZV90IHR1cGxlOwpAQCAtNzY2LDE1ICs3NTUsMTIgQEAKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgLyoKICAgICAgKiAgVHJ5IGFsbG9jYXRpbmcgSU8gcG9ydHMuICBUaGlzIHRyaWVzIGEgZmV3IGZpeGVkIGFkZHJlc3Nlcy4KICAgICAgKiAgSWYgeW91IHdhbnQsIHlvdSBjYW4gYWxzbyByZWFkIHRoZSBjYXJkJ3MgY29uZmlnIHRhYmxlIHRvCkBAIC03ODIsMTEgKzc2OCwxMSBAQAogICAgICAqLwogICAgIGZvciAoaSA9IGogPSAweDA7IGogPCAweDQwMDsgaiArPSAweDIwKSB7CiAJbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAgICAgfQogICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTc5NCwxNiArNzgwLDE2IEBACiAgICAgICogIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiAgICAgICogIGFjdHVhbGx5IGFzc2lnbiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KICAgICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEoaGFuZGxlLCAmbGluay0+aXJxKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAogICAgIC8qCiAgICAgICogIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAgICAgICogIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgogICAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAgICAgLyoKLSAgICAgKiAgQWxsb2NhdGUgYSAzMksgbWVtb3J5IHdpbmRvdy4gIE5vdGUgdGhhdCB0aGUgZGV2X2xpbmtfdAorICAgICAqICBBbGxvY2F0ZSBhIDMySyBtZW1vcnkgd2luZG93LiAgTm90ZSB0aGF0IHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZQogICAgICAqICBzdHJ1Y3R1cmUgcHJvdmlkZXMgc3BhY2UgZm9yIG9uZSB3aW5kb3cgaGFuZGxlIC0tIGlmIHlvdXIKICAgICAgKiAgZGV2aWNlIG5lZWRzIHNldmVyYWwgd2luZG93cywgeW91J2xsIG5lZWQgdG8ga2VlcCB0cmFjayBvZgogICAgICAqICB0aGUgaGFuZGxlcyBpbiB5b3VyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIGRldi0+cHJpdi4KQEAgLTgxMyw3ICs3OTksNyBAQAogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQ018V0lOX0VOQUJMRTsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMHg4MDAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IG1lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbikpOworICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOwogICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgyMDAwMDsgbWVtLlBhZ2UgPSAwOyAKICAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpOwogCkBAIC04MjMsNyArODA5LDcgQEAKIAogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX0RFQlVHICJuZXR3YXZlX2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtODMxLDggKzgxNyw3IEBACiAgICAgfQogCiAgICAgc3RyY3B5KHByaXYtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0gICAgbGluay0+ZGV2ID0gJnByaXYtPm5vZGU7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZwcml2LT5ub2RlOwogCiAgICAgLyogUmVzZXQgY2FyZCBiZWZvcmUgcmVhZGluZyBwaHlzaWNhbCBhZGRyZXNzICovCiAgICAgbmV0d2F2ZV9kb3Jlc2V0KGRldi0+YmFzZV9hZGRyLCByYW1CYXNlKTsKQEAgLTg1MiwxMiArODM3LDEzIEBACiAgICAgcHJpbnRrKEtFUk5fREVCVUcgIk5ldHdhdmVfcmVzZXQ6IHJldmlzaW9uICUwNHggJTA0eFxuIiwgCiAJICAgZ2V0X3VpbnQxNihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX0FSVyksCiAJICAgZ2V0X3VpbnQxNihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX0FSVysyKSk7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIG5ldHdhdmVfcmVsZWFzZShsaW5rKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogbmV0d2F2ZV9wY21jaWFfY29uZmlnICovCiAKIC8qCkBAIC04NjcsNTIgKzg1MywzNSBAQAogICogICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgKiAgICBzdGlsbCBvcGVuLCB0aGlzIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsIGl0IGlzIGNsb3NlZC4KICAqLwotc3RhdGljIHZvaWQgbmV0d2F2ZV9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBuZXR3YXZlX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0gICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwluZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0gICAgREVCVUcoMCwgIm5ldHdhdmVfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMCwgIm5ldHdhdmVfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKLSAgICAvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgaWYgKGxpbmstPndpbikgewotCWlvdW5tYXAocHJpdi0+cmFtQmFzZSk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgfQotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJaWYgKGxpbmstPndpbikKKwkJaW91bm1hcChwcml2LT5yYW1CYXNlKTsKIH0KIAotc3RhdGljIGludCBuZXR3YXZlX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBuZXR3YXZlX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXR3YXZlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IG5ldHdhdmVfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCW5ldHdhdmVfcmVzZXQoZGV2KTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQorCWlmIChsaW5rLT5vcGVuKSB7CisJCW5ldHdhdmVfcmVzZXQoZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTExOSw3ICsxMDg4LDcgQEAKICAgICB1X2NoYXIgX19pb21lbSAqcmFtQmFzZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwogICAgIHN0cnVjdCBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmcHJpdi0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHByaXYtPnBfZGV2OwogICAgIGludCBpOwogICAgIAogICAgIGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKQEAgLTExMzgsNyArMTEwNyw3IEBACiAJCiAgICAgICAgIHN0YXR1cyA9IGluYihpb2Jhc2UgKyBORVRXQVZFX1JFR19BU1IpOwogCQkKLQlpZiAoIURFVl9PSyhsaW5rKSkgeworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CiAJICAgIERFQlVHKDEsICJuZXR3YXZlX2ludGVycnVwdDogSW50ZXJydXB0IHdpdGggc3RhdHVzIDB4JXggIgogCQkgICJmcm9tIHJlbW92ZWQgb3Igc3VzcGVuZGVkIGNhcmQhXG4iLCBzdGF0dXMpOwogCSAgICBicmVhazsKQEAgLTEzNzMsMTEgKzEzNDIsMTEgQEAKIAogc3RhdGljIGludCBuZXR3YXZlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9ICZwcml2LT5saW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gcHJpdi0+cF9kZXY7CiAKICAgICBERUJVRygxLCAibmV0d2F2ZV9vcGVuOiBzdGFydGluZy5cbiIpOwogICAgIAotICAgIGlmICghREVWX09LKGxpbmspKQorICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCXJldHVybiAtRU5PREVWOwogCiAgICAgbGluay0+b3BlbisrOwpAQCAtMTM5MCw3ICsxMzU5LDcgQEAKIAogc3RhdGljIGludCBuZXR3YXZlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKICAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSAmcHJpdi0+bGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHByaXYtPnBfZGV2OwogCiAgICAgREVCVUcoMSwgIm5ldHdhdmVfY2xvc2U6IGZpbmlzaGluZy5cbiIpOwogCkBAIC0xNDExLDcgKzEzODAsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJuZXR3YXZlX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBuZXR3YXZlX2F0dGFjaCwKKwkucHJvYmUJCT0gbmV0d2F2ZV9wcm9iZSwKIAkucmVtb3ZlCQk9IG5ldHdhdmVfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IG5ldHdhdmVfaWRzLAogCS5zdXNwZW5kCT0gbmV0d2F2ZV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCmluZGV4IDhkZmRmYmQuLmMyZDBiMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IHsKLQkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlOworCQkJX19sZTE2IHF1YWwsIHNpZ25hbCwgbm9pc2UsIHVudXNlZDsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3E7CiAKIAkJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwKQEAgLTgxMiw3ICs4MTIsNiBAQAogCWlmIChkYXRhbGVuID4gSUVFRTgwMjExX0RBVEFfTEVOICsgMTIpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvdmVyc2l6ZWQgbW9uaXRvciBmcmFtZSwgIgogCQkgICAgICAgImRhdGEgbGVuZ3RoID0gJWRcbiIsIGRldi0+bmFtZSwgZGF0YWxlbik7Ci0JCWVyciA9IC1FSU87CiAJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCWdvdG8gdXBkYXRlX3N0YXRzOwogCX0KQEAgLTgyMSw4ICs4MjAsNyBAQAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgYWxsb2NhdGUgc2tiIGZvciBtb25pdG9yIGZyYW1lXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBkcm9wOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKIAl9CiAKIAkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwppbmRleCBlYzZmMmE0Li40MzRmN2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC00OSw3ICs0OSw3IEBACiAvKiBQQ01DSUEgc3BlY2lmaWMgZGV2aWNlIGluZm9ybWF0aW9uIChnb2VzIGluIHRoZSBjYXJkIGZpZWxkIG9mCiAgKiBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICovCiBzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgewotCWRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJZGV2X25vZGVfdCBub2RlOwogCiAJLyogVXNlZCB0byBoYW5kbGUgaGFyZCByZXNldCAqLwpAQCAtNjMsOCArNjMsOCBAQAogLyogRnVuY3Rpb24gcHJvdG90eXBlcwkJCQkJCSAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBvcmlub2NvX2NzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKTsKLXN0YXRpYyB2b2lkIG9yaW5vY29fY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgb3Jpbm9jb19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgb3Jpbm9jb19jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIG9yaW5vY29fY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc1LDEzICs3NSwxMyBAQAogb3Jpbm9jb19jc19oYXJkX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQlkZXZfbGlua190ICpsaW5rID0gJmNhcmQtPmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBjYXJkLT5wX2RldjsKIAlpbnQgZXJyOwogCiAJLyogV2UgbmVlZCBhdG9taWMgb3BzIGhlcmUsIGJlY2F1c2Ugd2UncmUgbm90IGhvbGRpbmcgdGhlIGxvY2sgKi8KIAlzZXRfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKTsKIAotCWVyciA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPmhhbmRsZSwgTlVMTCk7CisJZXJyID0gcGNtY2lhX3Jlc2V0X2NhcmQobGluaywgTlVMTCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA0LDEyICsxMDQsMTEgQEAKICAqIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhIGNhcmQKICAqIGluc2VydGlvbiBldmVudC4gICovCiBzdGF0aWMgaW50Ci1vcmlub2NvX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitvcmlub2NvX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQ7Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgb3Jpbm9jb19jc19oYXJkX3Jlc2V0KTsKIAlpZiAoISBkZXYpCkBAIC0xMTgsNyArMTE3LDcgQEAKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAogCS8qIExpbmsgYm90aCBzdHJ1Y3R1cmVzIHRvZ2V0aGVyICovCi0JbGluayA9ICZjYXJkLT5saW5rOworCWNhcmQtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gZGV2OwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCkBAIC0xMzUsMTYgKzEzNCw3IEBACiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCS8qIFJlZ2lzdGVyIHdpdGggQ2FyZCBTZXJ2aWNlcyAqLwotCWxpbmstPm5leHQgPSBOVUxMOwotCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCW9yaW5vY29fY3NfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9yaW5vY29fY3NfY29uZmlnKGxpbmspOwogfQkJCQkvKiBvcmlub2NvX2NzX2F0dGFjaCAqLwogCiAvKgpAQCAtMTUzLDE2ICsxNDMsMTQgQEAKICAqIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSBkZXZpY2UKICAqIGlzIHJlbGVhc2VkLgogICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBvcmlub2NvX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCW9yaW5vY29fY3NfcmVsZWFzZShsaW5rKTsKKwlvcmlub2NvX2NzX3JlbGVhc2UobGluayk7CiAKLQlERUJVRygwLCBQRlggImRldGFjaDogbGluaz0lcCBsaW5rLT5kZXY9JXBcbiIsIGxpbmssIGxpbmstPmRldik7Ci0JaWYgKGxpbmstPmRldikgeworCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldl9ub2RlPSVwXG4iLCBsaW5rLCBsaW5rLT5kZXZfbm9kZSk7CisJaWYgKGxpbmstPmRldl9ub2RlKSB7CiAJCURFQlVHKDAsIFBGWCAiQWJvdXQgdG8gdW5yZWdpc3RlciBuZXQgZGV2aWNlICVwXG4iLAogCQkgICAgICBkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwpAQCAtMTgwLDExICsxNjgsMTAgQEAKIAkJbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IFwKIAl9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZAotb3Jpbm9jb19jc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQKK29yaW5vY29fY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CkBAIC0xOTYsNyArMTgzLDcgQEAKIAljaXNwYXJzZV90IHBhcnNlOwogCXZvaWQgX19pb21lbSAqbWVtOwogCi0JQ1NfQ0hFQ0soVmFsaWRhdGVDSVMsIHBjbWNpYV92YWxpZGF0ZV9jaXMoaGFuZGxlLCAmaW5mbykpOworCUNTX0NIRUNLKFZhbGlkYXRlQ0lTLCBwY21jaWFfdmFsaWRhdGVfY2lzKGxpbmssICZpbmZvKSk7CiAKIAkvKgogCSAqIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMKQEAgLTIwNywxOSArMTk0LDE1IEBACiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAJLyogTG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KIAlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywKLQkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOworCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKIAogCS8qCiAJICogSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUKQEAgLTIzNiwxMyArMjE5LDEzIEBACiAJICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgogCSAqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXdoaWxlICgxKSB7CiAJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CiAJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgLmluZGV4ID0gMCB9OwogCi0JCWlmICggKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCkKLQkJICAgIHx8IChwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkpCisJCWlmICggKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCisJCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKSkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAogCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCkBAIC0yNzQsMTAgKzI1NywxMCBAQAogCQl9CiAKIAkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCSAgICBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCSAgICBkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCQogCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KQEAgLTMwNyw3ICsyOTAsNyBAQAogCQkJfQogCiAJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCX0KIApAQCAtMzE3LDkgKzMwMCw4IEBACiAJCWJyZWFrOwogCQkKIAluZXh0X2VudHJ5OgotCQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSk7CisJCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwkJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKTsKIAkJaWYgKGxhc3RfcmV0ICA9PSBDU19OT19NT1JFX0lURU1TKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJHZXROZXh0VHVwbGUoKTogTm8gbWF0Y2hpbmcgIgogCQkJICAgICAgICJDSVMgY29uZmlndXJhdGlvbi4gIE1heWJlIHlvdSBuZWVkIHRoZSAiCkBAIC0zMzMsNyArMzE1LDcgQEAKIAkgKiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mCiAJICogdGhlIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAJICovCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAKIAkvKiBXZSBpbml0aWFsaXplIHRoZSBoZXJtZXMgc3RydWN0dXJlIGJlZm9yZSBjb21wbGV0aW5nIFBDTUNJQQogCSAqIGNvbmZpZ3VyYXRpb24ganVzdCBpbiBjYXNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBnZXRzCkBAIC0zNTAsNyArMzMyLDcgQEAKIAkgKiBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogCSAqLwogCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAotCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAkvKiBPaywgd2UgaGF2ZSB0aGUgY29uZmlndXJhdGlvbiwgcHJlcGFyZSB0byByZWdpc3RlciB0aGUgbmV0ZGV2ICovCiAJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CkBAIC0zNTgsNyArMzQwLDcgQEAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJY2FyZC0+bm9kZS5tYWpvciA9IGNhcmQtPm5vZGUubWlub3IgPSAwOwogCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihoYW5kbGUpKTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAkvKiBUZWxsIHRoZSBzdGFjayB3ZSBleGlzdCAqLwogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggInJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CkBAIC0zNjYsMjAgKzM0OCwxOCBAQAogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkcyB0byBiZQotCSAqIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4gKi8KKwkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4gKi8KIAlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKLQlsaW5rLT5kZXYgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2IGJlaW5nIG5vbi1OVUxMIGlzIGFsc28KKwlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotCSAgICAgICBkZXYtPm5hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgICAgIGxpbmstPmNvbmYuVmNjIC8gMTAsIGxpbmstPmNvbmYuVmNjICUgMTApOwotCWlmIChsaW5rLT5jb25mLlZwcDEpCi0JCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcDEgLyAxMCwKLQkJICAgICAgIGxpbmstPmNvbmYuVnBwMSAlIDEwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluZGV4IDB4JTAyeDogIiwKKwkgICAgICAgZGV2LT5uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5WcHApCisJCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcCAvIDEwLAorCQkgICAgICAgbGluay0+Y29uZi5WcHAgJSAxMCk7CiAJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKIAkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCkBAIC0zODksMTMgKzM2OSwxNCBAQAogCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CiAJcHJpbnRrKCJcbiIpOwogCi0JcmV0dXJuOworCXJldHVybiAwOwogCiAgY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAogIGZhaWxlZDoKIAlvcmlub2NvX2NzX3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CQkJCS8qIG9yaW5vY29fY3NfY29uZmlnICovCiAKIC8qCkBAIC00MDQsNyArMzg1LDcgQEAKICAqIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogICovCiBzdGF0aWMgdm9pZAotb3Jpbm9jb19jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitvcmlub2NvX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC00MTYsODggKzM5Nyw2OCBAQAogCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCWlmIChwcml2LT5ody5pb2Jhc2UpCiAJCWlvcG9ydF91bm1hcChwcml2LT5ody5pb2Jhc2UpOwogfQkJCQkvKiBvcmlub2NvX2NzX3JlbGVhc2UgKi8KIAotc3RhdGljIGludCBvcmlub2NvX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBvcmlub2NvX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkvKiBUaGlzIGlzIHByb2JhYmx5IHJhY3ksIGJ1dCBJIGNhbid0IHRoaW5rIG9mCi0JCSAgIGEgYmV0dGVyIHdheSwgc2hvcnQgb2YgcmV3cml0aW5nIHRoZSBQQ01DSUEKLQkJICAgbGF5ZXIgdG8gbm90IHN1Y2sgOi0oICovCi0JCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkvKiBUaGlzIGlzIHByb2JhYmx5IHJhY3ksIGJ1dCBJIGNhbid0IHRoaW5rIG9mCisJICAgYSBiZXR0ZXIgd2F5LCBzaG9ydCBvZiByZXdyaXRpbmcgdGhlIFBDTUNJQQorCSAgIGxheWVyIHRvIG5vdCBzdWNrIDotKCAqLworCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JCQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwotCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkb3duaW5nIGludGVyZmFjZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAKLQkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwkJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKIAotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl9Ci0KLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Jpbm9jb19jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBvcmlub2NvX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkvKiBGSVhNRTogc2hvdWxkIHdlIGRvdWJsZSBjaGVjayB0aGF0IHRoaXMgaXMKLQkJICogdGhlIHNhbWUgY2FyZCBhcyB3ZSBoYWQgYmVmb3JlICovCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQkJaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7Ci0JCQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JCQlpZiAocHJpdi0+b3BlbiAmJiAhIHByaXYtPmh3X3VuYXZhaWxhYmxlKSB7Ci0JCQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0JCQkJaWYgKGVycikKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJfQotCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CisJCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCQlwcml2LT5od191bmF2YWlsYWJsZS0tOworCisJCWlmIChwcml2LT5vcGVuICYmICEgcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKKwkJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCQkJaWYgKGVycikKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmRcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTYwNCw3ICs1NjUsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9IERSSVZFUl9OQU1FLAogCX0sCi0JLnByb2JlCQk9IG9yaW5vY29fY3NfYXR0YWNoLAorCS5wcm9iZQkJPSBvcmlub2NvX2NzX3Byb2JlLAogCS5yZW1vdmUJCT0gb3Jpbm9jb19jc19kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gb3Jpbm9jb19jc19pZHMsCiAJLnN1c3BlbmQJPSBvcmlub2NvX2NzX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IDc4ODBkOGMuLjg3OWViNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC05MCw4ICs5MCw4IEBACiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCiAjZW5kaWYKIC8qKiBQcm90b3R5cGVzIGJhc2VkIG9uIFBDTUNJQSBza2VsZXRvbiBkcml2ZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIHJheV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCByYXlfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgcmF5X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCByYXlfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCByYXlfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKIC8qKioqKiBQcm90b3R5cGVzIGluZGljYXRlZCBieSBkZXZpY2Ugc3RydWN0dXJlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5MCwyMCArMTkwLDE3IEBACiBzdGF0aWMgY2hhciAqcGh5X2FkZHIgPSBOVUxMOwogCiAKLS8qIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlIHJheSBkZXZpY2UuICBFYWNoIGFjdHVhbAotICAgUENNQ0lBIGNhcmQgY29ycmVzcG9uZHMgdG8gb25lIGRldmljZSBpbnN0YW5jZSwgYW5kIGlzIGRlc2NyaWJlZAotICAgYnkgb25lIGRldl9saW5rX3Qgc3RydWN0dXJlIChkZWZpbmVkIGluIGRzLmgpLgotKi8KLXN0YXRpYyBkZXZfbGlua190ICpkZXZfbGlzdCA9IE5VTEw7Ci0KLS8qIEEgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgaGFzIGZpZWxkcyBmb3IgbW9zdCB0aGluZ3MgdGhhdCBhcmUgbmVlZGVkCisvKiBBIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSBoYXMgZmllbGRzIGZvciBtb3N0IHRoaW5ncyB0aGF0IGFyZSBuZWVkZWQKICAgIHRvIGtlZXAgdHJhY2sgb2YgYSBzb2NrZXQsIGJ1dCB0aGVyZSB3aWxsIHVzdWFsbHkgYmUgc29tZSBkZXZpY2UKICAgIHNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgYWxzbyBuZWVkcyB0byBiZSBrZXB0IHRyYWNrIG9mLiAgVGhlCi0gICAncHJpdicgcG9pbnRlciBpbiBhIGRldl9saW5rX3Qgc3RydWN0dXJlIGNhbiBiZSB1c2VkIHRvIHBvaW50IHRvCisgICAncHJpdicgcG9pbnRlciBpbiBhIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSBjYW4gYmUgdXNlZCB0byBwb2ludCB0bwogICAgYSBkZXZpY2Utc3BlY2lmaWMgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwgbGlrZSB0aGlzLgogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmF5X21lbV9zcGVlZCA9IDUwMDsKIAorLyogV0FSTklORzogVEhJUyBEUklWRVIgSVMgTk9UIENBUEFCTEUgT0YgSEFORExJTkcgTVVMVElQTEUgREVWSUNFUyEgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqdGhpc19kZXZpY2UgPSBOVUxMOworCiBNT0RVTEVfQVVUSE9SKCJDb3JleSBUaG9tYXMgPGNvcmV5QHdvcmxkLnN0ZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJheWxpbmsvV2ViR2VhciB3aXJlbGVzcyBMQU4gZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0zMDYsNTYgKzMwMyw0NiBAQAogICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCiAgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHJheV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCByYXlfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotICAgIGRldl9saW5rX3QgKmxpbms7CiAgICAgcmF5X2Rldl90ICpsb2NhbDsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgIAorCiAgICAgREVCVUcoMSwgInJheV9hdHRhY2goKVxuIik7CiAKLSAgICAvKiBJbml0aWFsaXplIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSAqLwotICAgIGxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwotCi0gICAgaWYgKCFsaW5rKQotCSAgICByZXR1cm4gLUVOT01FTTsKLQogICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJheV9kZXZfdCkpOwotCiAgICAgaWYgKCFkZXYpCiAJICAgIGdvdG8gZmFpbF9hbGxvY19kZXY7CiAKICAgICBsb2NhbCA9IGRldi0+cHJpdjsKLQotICAgIG1lbXNldChsaW5rLCAwLCBzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpKTsKKyAgICBsb2NhbC0+ZmluZGVyID0gcF9kZXY7CiAKICAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcuIE5vbmUgdXNlZCBoZXJlICovCi0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gMDsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gNTsKKyAgICBwX2Rldi0+aW8uTnVtUG9ydHMxID0gMDsKKyAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwLiBGb3IgUENNQ0lBLCBkcml2ZXIgdGFrZXMgd2hhdCdzIGdpdmVuICovCi0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwotICAgIGxpbmstPmlycS5IYW5kbGVyID0gJnJheV9pbnRlcnJ1cHQ7CisgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworICAgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisgICAgcF9kZXYtPmlycS5IYW5kbGVyID0gJnJheV9pbnRlcnJ1cHQ7CiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCi0gICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7Ci0gICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0gICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7Ci0gICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CisgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKyAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisgICAgcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOworICAgIHBfZGV2LT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotICAgIGxpbmstPnByaXYgPSBkZXY7Ci0gICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OworICAgIHBfZGV2LT5wcml2ID0gZGV2OworICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAgICAgCi0gICAgbG9jYWwtPmZpbmRlciA9IGxpbms7CisgICAgbG9jYWwtPmZpbmRlciA9IHBfZGV2OwogICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5TRVJURUQ7CiAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwogICAgIGxvY2FsLT5udW1fbXVsdGkgPSAwOwotICAgIERFQlVHKDIsInJheV9hdHRhY2ggbGluayA9ICVwLCAgZGV2ID0gJXAsICBsb2NhbCA9ICVwLCBpbnRyID0gJXBcbiIsCi0gICAgICAgICAgbGluayxkZXYsbG9jYWwsJnJheV9pbnRlcnJ1cHQpOworICAgIERFQlVHKDIsInJheV9hdHRhY2ggcF9kZXYgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAorICAgICAgICAgIHBfZGV2LGRldixsb2NhbCwmcmF5X2ludGVycnVwdCk7CiAKICAgICAvKiBSYXlsaW5rIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KICAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZyYXlfZGV2X3N0YXJ0X3htaXQ7CkBAIC0zNzksMTYgKzM2NiwxMCBAQAogCiAgICAgaW5pdF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICByYXlfY29uZmlnKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgdGhpc19kZXZpY2UgPSBwX2RldjsKKyAgICByZXR1cm4gcmF5X2NvbmZpZyhwX2Rldik7CiAKIGZhaWxfYWxsb2NfZGV2OgotICAgIGtmcmVlKGxpbmspOwogICAgIHJldHVybiAtRU5PTUVNOwogfSAvKiByYXlfYXR0YWNoICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zOTcsMzcgKzM3OCwyNSBAQAogICAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCiAgICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCByYXlfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotICAgIGRldl9saW5rX3QgKipsaW5rcDsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgIHJheV9kZXZfdCAqbG9jYWw7CiAKICAgICBERUJVRygxLCAicmF5X2RldGFjaCgweCVwKVxuIiwgbGluayk7Ci0gICAgCi0gICAgLyogTG9jYXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBmb3IgKGxpbmtwID0gJmRldl9saXN0OyAqbGlua3A7IGxpbmtwID0gJigqbGlua3ApLT5uZXh0KQotICAgICAgICBpZiAoKmxpbmtwID09IGxpbmspIGJyZWFrOwotICAgIGlmICgqbGlua3AgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwogCisgICAgdGhpc19kZXZpY2UgPSBOVUxMOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKLSAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JICAgIHJheV9yZWxlYXNlKGxpbmspOworICAgIHJheV9yZWxlYXNlKGxpbmspOwogCi0JICAgIGxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKLSAgICAgICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICB9CisgICAgbG9jYWwgPSAocmF5X2Rldl90ICopZGV2LT5wcml2OworICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIC8qIFVubGluayBkZXZpY2Ugc3RydWN0dXJlLCBmcmVlIHBpZWNlcyAqLwotICAgICpsaW5rcCA9IGxpbmstPm5leHQ7CiAgICAgaWYgKGxpbmstPnByaXYpIHsKLQlpZiAobGluay0+ZGV2KSB1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChsaW5rLT5kZXZfbm9kZSkgdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKICAgICB9Ci0gICAga2ZyZWUobGluayk7CiAgICAgREVCVUcoMiwicmF5X2NzIHJheV9kZXRhY2ggZW5kaW5nXG4iKTsKIH0gLyogcmF5X2RldGFjaCAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDM4LDkgKzQwNyw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAjZGVmaW5lIE1BWF9UVVBMRV9TSVpFIDEyOAotc3RhdGljIHZvaWQgcmF5X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCByYXlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwogICAgIGludCBsYXN0X2ZuID0gMCwgbGFzdF9yZXQgPSAwOwpAQCAtNDU1LDQ4ICs0MjMsNDUgQEAKIAogICAgIC8qIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbiByZWdzICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gTUFYX1RVUExFX1NJWkU7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKICAgICAvKiBEZXRlcm1pbmUgY2FyZCB0eXBlIGFuZCBmaXJtd2FyZSB2ZXJzaW9uICovCiAgICAgYnVmWzBdID0gYnVmW01BWF9UVVBMRV9TSVpFIC0gMV0gPSAwOwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IE1BWF9UVVBMRV9TSVpFOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMjsKLSAgICBDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCiAgICAgZm9yIChpPTA7IGk8dHVwbGUuVHVwbGVEYXRhTGVuIC0gNDsgaSsrKSAKICAgICAgICAgaWYgKGJ1ZltpXSA9PSAwKSBidWZbaV0gPSAnICc7CiAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIERldGVjdGVkOiAlc1xuIixidWYpOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgLyogTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKICAgICAgICBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAgICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKICAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICAKICAgICAvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogICAgICAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgogICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIC8qKiogU2V0IHVwIDMyayB3aW5kb3cgZm9yIHNoYXJlZCBtZW1vcnkgKHRyYW5zbWl0IGFuZCBjb250cm9sKSAqKioqKioqKioqKiovCiAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKICAgICByZXEuQmFzZSA9IDA7CiAgICAgcmVxLlNpemUgPSAweDgwMDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbikpOworICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOwogICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOyBtZW0uUGFnZSA9IDA7CiAgICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKICAgICBsb2NhbC0+c3JhbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOwpAQCAtNTA2LDcgKzQ3MSw3IEBACiAgICAgcmVxLkJhc2UgPSAwOwogICAgIHJlcS5TaXplID0gMHg0MDAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLT5oYW5kbGUsICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKICAgICBtZW0uQ2FyZE9mZnNldCA9IDB4ODAwMDsgbWVtLlBhZ2UgPSAwOwogICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPnJtZW1faGFuZGxlLCAmbWVtKSk7CiAgICAgbG9jYWwtPnJtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKQEAgLTUxNiw3ICs0ODEsNyBAQAogICAgIHJlcS5CYXNlID0gMDsKICAgICByZXEuU2l6ZSA9IDB4MTAwMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluay0+aGFuZGxlLCAmcmVxLCAmbG9jYWwtPmFtZW1faGFuZGxlKSk7CisgICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPmFtZW1faGFuZGxlKSk7CiAgICAgbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7IG1lbS5QYWdlID0gMDsKICAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5hbWVtX2hhbmRsZSwgJm1lbSkpOwogICAgIGxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CkBAIC01MjYsMzIgKzQ5MSwzMiBAQAogICAgIERFQlVHKDMsInJheV9jb25maWcgYW1lbT0lcFxuIixsb2NhbC0+YW1lbSk7CiAgICAgaWYgKHJheV9pbml0KGRldikgPCAwKSB7CiAgICAgICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgIH0KIAotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAgICAgaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogICAgIGlmIChpICE9IDApIHsKICAgICAgICAgcHJpbnRrKCJyYXlfY29uZmlnIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CiAgICAgICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBpOwogICAgIH0KIAogICAgIHN0cmNweShsb2NhbC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKLSAgICBsaW5rLT5kZXYgPSAmbG9jYWwtPm5vZGU7CisgICAgbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7CiAKLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSYXlMaW5rLCBpcnEgJWQsIGh3X2FkZHIgIiwKICAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogICAgIHByaW50aygiJTAyWCVzIiwgZGV2LT5kZXZfYWRkcltpXSwgKChpPDUpID8gIjoiIDogIlxuIikpOwogCi0gICAgcmV0dXJuOworICAgIHJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCiAgICAgcmF5X3JlbGVhc2UobGluayk7CisgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHJheV9jb25maWcgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2NzIF9faW9tZW0gKmNjc19iYXNlKHJheV9kZXZfdCAqZGV2KQpAQCAtNTc4LDkgKzU0Myw5IEBACiAgICAgVUNIQVIgKnA7CiAgICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwogICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGV2LT5wcml2OwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKICAgICBERUJVRygxLCAicmF5X2luaXQoMHglcClcbiIsIGRldik7Ci0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDAsInJheV9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY0MCwxMCArNjA1LDEwIEBACiAgICAgaW50IGNjc2luZGV4OwogICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGV2LT5wcml2OwogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKICAgICBERUJVRygxLCJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTc0Nyw5ICs3MTIsOSBAQAogICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBsb2NhbC0+ZGxfcGFyYW1fY2NzOwogICAgIFVDSEFSIHN0YXR1czsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIHZlcmlmeV9kbF9zdGFydHVwIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc4Nyw4ICs3NTIsOCBAQAogICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAgICAgaW50IGNjc2luZGV4OwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIHN0YXJ0X25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04MTQsOSArNzc5LDkgQEAKIAogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKICAgICBpbnQgY2NzaW5kZXg7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICAgIAotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfY3Mgam9pbl9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODQwLDcgKzgwNSw3IEBACiAgICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgICAgc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgcmF5X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7IAogICAgIHJheV9kZXZfdCAqbG9jYWwgPSBkZXYtPnByaXY7CkBAIC04NDksNTYgKzgxNCwzOCBAQAogICAgIERFQlVHKDEsICJyYXlfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CiAKICAgICBpb3VubWFwKGxvY2FsLT5zcmFtKTsKICAgICBpb3VubWFwKGxvY2FsLT5ybWVtKTsKICAgICBpb3VubWFwKGxvY2FsLT5hbWVtKTsKICAgICAvKiBEbyBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gICAgaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIGlmICggaSAhPSBDU19TVUNDRVNTICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsaW5rLT53aW4pIHJldCA9ICV4XG4iLGkpOwogICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPmFtZW1faGFuZGxlKTsKICAgICBpZiAoIGkgIT0gQ1NfU1VDQ0VTUyApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLGkpOwogICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKICAgICBpZiAoIGkgIT0gQ1NfU1VDQ0VTUyApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLGkpOwotICAgIGkgPSBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gICAgaWYgKCBpICE9IENTX1NVQ0NFU1MgKSBERUJVRygwLCJSZWxlYXNlQ29uZmlndXJhdGlvbiByZXQgPSAleFxuIixpKTsKLSAgICBpID0gcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgaWYgKCBpICE9IENTX1NVQ0NFU1MgKSBERUJVRygwLCJSZWxlYXNlSVJRIHJldCA9ICV4XG4iLGkpOworICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAogICAgIERFQlVHKDIsInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CiB9CiAKLXN0YXRpYyBpbnQgcmF5X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCByYXlfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICAgICAgfQotCisJaWYgKGxpbmstPm9wZW4pCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJheV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCByYXlfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmIChsaW5rLT5vcGVuKSB7Ci0JCQlyYXlfcmVzZXQoZGV2KTsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJfQotICAgICAgICB9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJcmF5X3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMCwxMCArODU3LDEwIEBACiAgICAgaW50IGk7CiAjZW5kaWYJLyogUkFZX0lNTUVESUFURV9JTklUICovCiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IGRldi0+cHJpdjsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKICAgICBERUJVRygxLCJyYXlfZGV2X2luaXQoZGV2PSVwKVxuIixkZXYpOwotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfZGV2X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTQ0LDEwICs4OTEsMTAgQEAKIHN0YXRpYyBpbnQgcmF5X2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCiB7CiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IGRldi0+cHJpdjsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgLyogRHVtbXkgcm91dGluZSB0byBzYXRpc2Z5IGRldmljZSBzdHJ1Y3R1cmUgKi8KICAgICBERUJVRygxLCJyYXlfZGV2X2NvbmZpZyhkZXY9JXAsaWZtYXA9JXApXG4iLGRldixtYXApOwotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfZGV2X2NvbmZpZyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC05NTgsMTAgKzkwNSwxMCBAQAogc3RhdGljIGludCByYXlfZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICByYXlfZGV2X3QgKmxvY2FsID0gZGV2LT5wcml2OwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKICAgICBzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKIAotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfZGV2X3N0YXJ0X3htaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMTU3MCw3ICsxNTE3LDcgQEAKIHN0YXRpYyBpd19zdGF0cyAqIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCiB7CiAgIHJheV9kZXZfdCAqCWxvY2FsID0gKHJheV9kZXZfdCAqKSBkZXYtPnByaXY7Ci0gIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgIHN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CiAKICAgaWYobG9jYWwgPT0gKHJheV9kZXZfdCAqKSBOVUxMKQpAQCAtMTU4OCw3ICsxNTM1LDcgQEAKICAgICB9CiAjZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCiAKLSAgaWYoKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgIGlmKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogICAgIGxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IHJlYWRiKCZwLT5yeG5vaXNlKTsKICAgICBsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCB8PSA0OwogICB9CkBAIC0xNjU3LDE4ICsxNjA0LDE0IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKyAgICBsaW5rID0gbG9jYWwtPmZpbmRlcjsKICAgICAKICAgICBERUJVRygxLCAicmF5X29wZW4oJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKLSAgICBmb3IgKGxpbmsgPSBkZXZfbGlzdDsgbGluazsgbGluayA9IGxpbmstPm5leHQpCi0gICAgICAgIGlmIChsaW5rLT5wcml2ID09IGRldikgYnJlYWs7Ci0gICAgaWYgKCFERVZfT0sobGluaykpIHsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotCi0gICAgaWYgKGxpbmstPm9wZW4gPT0gMCkgbG9jYWwtPm51bV9tdWx0aSA9IDA7CisgICAgaWYgKGxpbmstPm9wZW4gPT0gMCkKKwkgICAgbG9jYWwtPm51bV9tdWx0aSA9IDA7CiAgICAgbGluay0+b3BlbisrOwogCiAgICAgLyogSWYgdGhlIGNhcmQgaXMgbm90IHN0YXJ0ZWQsIHRpbWUgdG8gc3RhcnQgaXQgISAtIEplYW4gSUkgKi8KQEAgLTE2OTUsMTUgKzE2MzgsMTIgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGRldl9saW5rX3QgKmxpbms7CisgICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisgICAgbGluayA9IGxvY2FsLT5maW5kZXI7CiAKICAgICBERUJVRygxLCAicmF5X2Rldl9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGZvciAobGluayA9IGRldl9saXN0OyBsaW5rOyBsaW5rID0gbGluay0+bmV4dCkKLSAgICAgICAgaWYgKGxpbmstPnByaXYgPT0gZGV2KSBicmVhazsKLSAgICBpZiAobGluayA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLQogICAgIGxpbmstPm9wZW4tLTsKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTE3MjUsOSArMTY2NSw5IEBACiBzdGF0aWMgaW50IGludGVycnVwdF9lY2YocmF5X2Rldl90ICpsb2NhbCwgaW50IGNjcykKIHsKICAgICBpbnQgaSA9IDUwOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0X2VjZiAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0xNzUyLDkgKzE2OTIsOSBAQAogewogICAgIGludCBpOwogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIGdldF9mcmVlX3R4X2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAgICAgICAgIHJldHVybiBFQ0FSREdPTkU7CiAgICAgfQpAQCAtMTc4Myw5ICsxNzIzLDkgQEAKIHsKICAgICBpbnQgaTsKICAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBnZXRfZnJlZV9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gRUNBUkRHT05FOwogICAgIH0KQEAgLTE4NTgsOSArMTc5OCw5IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJheV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKLSAgICBpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9QUkVTRU5UKSkgeworICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIG5ldF9kZXZpY2Vfc3RhdHMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm4gJmxvY2FsLT5zdGF0czsKICAgICB9CkBAIC0xODg4LDEyICsxODI4LDEyIEBACiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX3Bhcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgb2JqaWQsIFVDSEFSICp2YWx1ZSwgaW50IGxlbikKIHsKICAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRldi0+cHJpdjsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgaW50IGNjc2luZGV4OwogICAgIGludCBpOwogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKIAotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX3Bhcm0gLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTkyNSwxMCArMTg2NSwxMCBAQAogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKICAgICBpbnQgaSA9IDA7CiAgICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGxvY2FsLT5maW5kZXI7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogICAgIHZvaWQgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRTsKIAotICAgIGlmICghKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpKSB7CisgICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewogICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX211bHRpX2xpc3QgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjAwNSw3ICsxOTQ1LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKICAgICByYXlfZGV2X3QgKmxvY2FsOwogICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKICAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3M7CkBAIC0yMDIwLDggKzE5NjAsOCBAQAogICAgIERFQlVHKDQsInJheV9jczogaW50ZXJydXB0IGZvciAqZGV2PSVwXG4iLGRldik7CiAKICAgICBsb2NhbCA9IChyYXlfZGV2X3QgKilkZXYtPnByaXY7Ci0gICAgbGluayA9IChkZXZfbGlua190ICopbG9jYWwtPmZpbmRlcjsKLSAgICBpZiAoICEgKGxpbmstPnN0YXRlICYgREVWX1BSRVNFTlQpIHx8IGxpbmstPnN0YXRlICYgREVWX1NVU1BFTkQgKSB7CisgICAgbGluayA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKWxvY2FsLT5maW5kZXI7CisgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKICAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKICAgICAgICAgcmV0dXJuIElSUV9OT05FOwogICAgIH0KQEAgLTI1NDAsOSArMjQ4MCw5IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBkZXZfbGlua190ICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAgICAgREVCVUcoMCwicmF5X2NzIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uLlxuIik7Ci0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBhdXRoZW50aWNhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYwNiwxMCArMjU0NiwxMCBAQAogc3RhdGljIHZvaWQgYXNzb2NpYXRlKHJheV9kZXZfdCAqbG9jYWwpCiB7CiAgICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGRldl9saW5rX3QgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaWYgKCEobGluay0+c3RhdGUgJiBERVZfUFJFU0VOVCkpIHsKKyAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CiAgICAgICAgIERFQlVHKDIsInJheV9jcyBhc3NvY2lhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjY4OSwxNCArMjYyOSwxNCBAQAogICogZWcgaWZjb25maWcgCiAgKi8KICAgICBpbnQgaTsKLSAgICBkZXZfbGlua190ICpsaW5rOworICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgcmF5X2Rldl90ICpsb2NhbDsKICAgICBVQ0hBUiAqcDsKICAgICBzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqcGZoOwogICAgIFVDSEFSIGNbMzNdOwogCi0gICAgbGluayA9IGRldl9saXN0OworICAgIGxpbmsgPSB0aGlzX2RldmljZTsKICAgICBpZiAoIWxpbmspCiAgICAgCXJldHVybiAwOwogICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7CkBAIC0yODk4LDcgKzI4MzgsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJyYXlfY3MiLAogCX0sCi0JLnByb2JlCQk9IHJheV9hdHRhY2gsCisJLnByb2JlCQk9IHJheV9wcm9iZSwKIAkucmVtb3ZlCQk9IHJheV9kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gcmF5X2lkcywKIAkuc3VzcGVuZAk9IHJheV9zdXNwZW5kLApAQCAtMjk0MCw3ICsyODgwLDYgQEAKICNlbmRpZgogCiAgICAgcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKLSAgICBCVUdfT04oZGV2X2xpc3QgIT0gTlVMTCk7CiB9IC8qIGV4aXRfcmF5X2NzICovCiAKIG1vZHVsZV9pbml0KGluaXRfcmF5X2NzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmgKaW5kZXggNDI2NjBmZS4uYmQ3M2ViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmgKQEAgLTMxLDcgKzMxLDcgQEAKICAgICB2b2lkIF9faW9tZW0gKnNyYW07ICAgICAgICAgICAgLyogcG9pbnRlciB0byBiZWdpbm5pbmcgb2Ygc2hhcmVkIFJBTSAgICAgKi8KICAgICB2b2lkIF9faW9tZW0gKmFtZW07ICAgICAgICAgICAgLyogcG9pbnRlciB0byBhdHRyaWJ1dGUgbWVtIHdpbmRvdyAgICAgICAgKi8KICAgICB2b2lkIF9faW9tZW0gKnJtZW07ICAgICAgICAgICAgLyogcG9pbnRlciB0byByZWNlaXZlIGJ1ZmZlciB3aW5kb3cgICAgICAgKi8KLSAgICBkZXZfbGlua190ICpmaW5kZXI7ICAgICAgICAgICAgLyogcG9pbnRlciBiYWNrIHRvIGRldl9saW5rX3QgZm9yIGNhcmQgICAgKi8KKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZmluZGVyOyAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byBzdHJ1Y3QgcGNtY2lhX2RldmljZSBmb3IgY2FyZCAgICAqLwogICAgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogICAgIGxvbmcgdHhfY2NzX2xvY2s7CiAgICAgbG9uZyBjY3NfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IDVmYTZmYmUuLmY3Yjc3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtNjMsNyArNjMsNyBAQAogLyogUENNQ0lBIHNwZWNpZmljIGRldmljZSBpbmZvcm1hdGlvbiAoZ29lcyBpbiB0aGUgY2FyZCBmaWVsZCBvZgogICogc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLwogc3RydWN0IG9yaW5vY29fcGNjYXJkIHsKLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIH07CiAKQEAgLTcxLDggKzcxLDggQEAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMJCQkJCQkgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3BlY3RydW1fY3NfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgc3BlY3RydW1fY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgc3BlY3RydW1fY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIHNwZWN0cnVtX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBGaXJtd2FyZSBkb3dubG9hZGVyCQkJCQkJICAgICovCkBAIC0yMzgsMTQgKzIzOCwxNCBAQAogICogSWYgSURMRSBpcyAxLCBzdG9wIHRoZSBmaXJtd2FyZSwgc28gdGhhdCBpdCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbi4KICAqLwogc3RhdGljIGludAotc3BlY3RydW1fcmVzZXQoZGV2X2xpbmtfdCAqbGluaywgaW50IGlkbGUpCitzcGVjdHJ1bV9yZXNldChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IGlkbGUpCiB7CiAJaW50IGxhc3RfcmV0LCBsYXN0X2ZuOwogCWNvbmZfcmVnX3QgcmVnOwogCXVfaW50IHNhdmVfY29yOwogCiAJLyogRG9pbmcgaXQgaWYgaGFyZHdhcmUgaXMgZ29uZSBpcyBndWFyYW50ZWVkIGNyYXNoICovCi0JaWYgKCEobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSkKKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFNhdmUgb3JpZ2luYWwgQ09SIHZhbHVlICovCkBAIC0yNTMsNyArMjUzLDcgQEAKIAlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKIAlDU19DSEVDSyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsCi0JCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKSk7CisJCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpOwogCXNhdmVfY29yID0gcmVnLlZhbHVlOwogCiAJLyogU29mdC1SZXNldCBjYXJkICovCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogCXJlZy5WYWx1ZSA9IChzYXZlX2NvciB8IENPUl9TT0ZUX1JFU0VUKTsKIAlDU19DSEVDSyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsCi0JCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKSk7CisJCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpOwogCXVkZWxheSgxMDAwKTsKIAogCS8qIFJlYWQgQ0NTUiAqLwogCXJlZy5BY3Rpb24gPSBDU19SRUFEOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ0NTUjsKIAlDU19DSEVDSyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsCi0JCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKSk7CisJCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpOwogCiAJLyoKIAkgKiBTdGFydCBvciBzdG9wIHRoZSBmaXJtd2FyZS4gIE1lbW9yeSB3aWR0aCBiaXQgc2hvdWxkIGJlCkBAIC0yNzgsNyArMjc4LDcgQEAKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7CiAJcmVnLlZhbHVlID0gKGlkbGUgPyBIQ1JfSURMRSA6IEhDUl9SVU4pIHwgKHJlZy5WYWx1ZSAmIEhDUl9NRU0xNik7CiAJQ1NfQ0hFQ0soQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLAotCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZykpOworCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKTsKIAl1ZGVsYXkoMTAwMCk7CiAKIAkvKiBSZXN0b3JlIG9yaWdpbmFsIENPUiBjb25maWd1cmF0aW9uIGluZGV4ICovCkBAIC0yODYsMTIgKzI4NiwxMiBAQAogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogCXJlZy5WYWx1ZSA9IChzYXZlX2NvciAmIH5DT1JfU09GVF9SRVNFVCk7CiAJQ1NfQ0hFQ0soQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLAotCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmstPmhhbmRsZSwgJnJlZykpOworCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKTsKIAl1ZGVsYXkoMTAwMCk7CiAJcmV0dXJuIDA7CiAKICAgICAgIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICogY2FyZSBvZiB0aGUgUERBIC0gcmVhZCBpdCBhbmQgdGhlbiB3cml0ZSBpdCBvbiB0b3Agb2YgdGhlIGZpcm13YXJlLgogICovCiBzdGF0aWMgaW50Ci1zcGVjdHJ1bV9kbF9pbWFnZShoZXJtZXNfdCAqaHcsIGRldl9saW5rX3QgKmxpbmssCitzcGVjdHJ1bV9kbF9pbWFnZShoZXJtZXNfdCAqaHcsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLAogCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmltYWdlKQogewogCWludCByZXQ7CkBAIC01MDUsMTQgKzUwNSwxMyBAQAogICogcmVzZXQgb24gdGhlIGNhcmQsIHRvIG1ha2Ugc3VyZSBpdCdzIGluIGEgc2FuZSBzdGF0ZS4KICAqLwogc3RhdGljIGludAotc3BlY3RydW1fZGxfZmlybXdhcmUoaGVybWVzX3QgKmh3LCBkZXZfbGlua190ICpsaW5rKQorc3BlY3RydW1fZGxfZmlybXdhcmUoaGVybWVzX3QgKmh3LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlpbnQgcmV0OwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKIAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgcHJpbWFyeV9md19uYW1lLAotCQkJICAgICAmaGFuZGxlX3RvX2RldihoYW5kbGUpKSA9PSAwKSB7CisJCQkgICAgICZoYW5kbGVfdG9fZGV2KGxpbmspKSA9PSAwKSB7CiAJCXByaW1zeW0gPSBmd19lbnRyeS0+ZGF0YTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCkBAIC01MjEsNyArNTIwLDcgQEAKIAl9CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHNlY29uZGFyeV9md19uYW1lLAotCQkJICAgICAmaGFuZGxlX3RvX2RldihoYW5kbGUpKSA9PSAwKSB7CisJCQkgICAgICZoYW5kbGVfdG9fZGV2KGxpbmspKSA9PSAwKSB7CiAJCXNlY3N5bSA9IGZ3X2VudHJ5LT5kYXRhOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKQEAgLTU1NCwxMiArNTUzLDEyIEBACiBzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQlkZXZfbGlua190ICpsaW5rID0gJmNhcmQtPmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBjYXJkLT5wX2RldjsKIAlpbnQgZXJyOwogCiAJaWYgKCFoZXJtZXNfcHJlc2VudCgmcHJpdi0+aHcpKSB7CiAJCS8qIFRoZSBmaXJtd2FyZSBuZWVkcyB0byBiZSByZWxvYWRlZCAqLwotCQlpZiAoc3BlY3RydW1fZGxfZmlybXdhcmUoJnByaXYtPmh3LCAmY2FyZC0+bGluaykgIT0gMCkgeworCQlpZiAoc3BlY3RydW1fZGxfZmlybXdhcmUoJnByaXYtPmh3LCBsaW5rKSAhPSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJGaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIpOwogCQkJZXJyID0gLUVOT0RFVjsKIAkJfQpAQCAtNTg0LDEyICs1ODMsMTEgQEAKICAqIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhIGNhcmQKICAqIGluc2VydGlvbiBldmVudC4gICovCiBzdGF0aWMgaW50Ci1zcGVjdHJ1bV9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3BlY3RydW1fY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZDsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCBzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0KTsKIAlpZiAoISBkZXYpCkBAIC01OTgsNyArNTk2LDcgQEAKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAogCS8qIExpbmsgYm90aCBzdHJ1Y3R1cmVzIHRvZ2V0aGVyICovCi0JbGluayA9ICZjYXJkLT5saW5rOworCWNhcmQtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gZGV2OwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCkBAIC02MTUsMTMgKzYxMyw3IEBACiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlzcGVjdHJ1bV9jc19jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3BlY3RydW1fY3NfY29uZmlnKGxpbmspOwogfQkJCQkvKiBzcGVjdHJ1bV9jc19hdHRhY2ggKi8KIAogLyoKQEAgLTYzMCwxNiArNjIyLDE0IEBACiAgKiBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZGV2aWNlCiAgKiBpcyByZWxlYXNlZC4KICAqLwotc3RhdGljIHZvaWQgc3BlY3RydW1fY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNwZWN0cnVtX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXNwZWN0cnVtX2NzX3JlbGVhc2UobGluayk7CisJc3BlY3RydW1fY3NfcmVsZWFzZShsaW5rKTsKIAotCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldj0lcFxuIiwgbGluaywgbGluay0+ZGV2KTsKLQlpZiAobGluay0+ZGV2KSB7CisJREVCVUcoMCwgUEZYICJkZXRhY2g6IGxpbms9JXAgbGluay0+ZGV2X25vZGU9JXBcbiIsIGxpbmssIGxpbmstPmRldl9ub2RlKTsKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKIAkJREVCVUcoMCwgUEZYICJBYm91dCB0byB1bnJlZ2lzdGVyIG5ldCBkZXZpY2UgJXBcbiIsCiAJCSAgICAgIGRldik7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC02NTMsMTEgKzY0MywxMCBAQAogICogZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogICovCiAKLXN0YXRpYyB2b2lkCi1zcGVjdHJ1bV9jc19jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQKK3NwZWN0cnVtX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwpAQCAtNjY5LDcgKzY1OCw3IEBACiAJY2lzcGFyc2VfdCBwYXJzZTsKIAl2b2lkIF9faW9tZW0gKm1lbTsKIAotCUNTX0NIRUNLKFZhbGlkYXRlQ0lTLCBwY21jaWFfdmFsaWRhdGVfY2lzKGhhbmRsZSwgJmluZm8pKTsKKwlDU19DSEVDSyhWYWxpZGF0ZUNJUywgcGNtY2lhX3ZhbGlkYXRlX2NpcyhsaW5rLCAmaW5mbykpOwogCiAJLyoKIAkgKiBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzCkBAIC02ODAsMTkgKzY2OSwxNSBAQAogCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKLQogCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCiAJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sCi0JCSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25mKSk7Ci0JbGluay0+Y29uZi5WY2MgPSBjb25mLlZjYzsKKwkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7CiAKIAkvKgogCSAqIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlCkBAIC03MDksMTMgKzY5NCwxMyBAQAogCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IC5pbmRleCA9IDAgfTsKIAotCQlpZiAoIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpICE9IDApCi0JCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApKQorCQlpZiAoIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKQorCQkgICAgfHwgKHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkpCiAJCQlnb3RvIG5leHRfZW50cnk7CiAKIAkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQpAQCAtNzQ3LDEwICs3MzIsMTAgQEAKIAkJfQogCiAJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkgICAgZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCQkKIAkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCkBAIC03ODAsNyArNzY1LDcgQEAKIAkJCX0KIAogCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbykgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQl9CiAKQEAgLTc5MCw5ICs3NzUsOCBAQAogCQlicmVhazsKIAkJCiAJbmV4dF9lbnRyeToKLQkJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQkJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpOworCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAJCWlmIChsYXN0X3JldCAgPT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiR2V0TmV4dFR1cGxlKCk6IE5vIG1hdGNoaW5nICIKIAkJCSAgICAgICAiQ0lTIGNvbmZpZ3VyYXRpb24uICBNYXliZSB5b3UgbmVlZCB0aGUgIgpAQCAtODA2LDcgKzc5MCw3IEBACiAJICogYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZgogCSAqIHRoZSBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCiAJLyogV2UgaW5pdGlhbGl6ZSB0aGUgaGVybWVzIHN0cnVjdHVyZSBiZWZvcmUgY29tcGxldGluZyBQQ01DSUEKIAkgKiBjb25maWd1cmF0aW9uIGp1c3QgaW4gY2FzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZ2V0cwpAQCAtODIzLDcgKzgwNyw3IEBACiAJICogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkgKi8KIAlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKLQkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJLyogT2ssIHdlIGhhdmUgdGhlIGNvbmZpZ3VyYXRpb24sIHByZXBhcmUgdG8gcmVnaXN0ZXIgdGhlIG5ldGRldiAqLwogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtODM2LDcgKzgyMCw3IEBACiAJCWdvdG8gZmFpbGVkOwogCX0KIAotCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYoaGFuZGxlKSk7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAJLyogVGVsbCB0aGUgc3RhY2sgd2UgZXhpc3QgKi8KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJyZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtODQ0LDIwICs4MjgsMTggQEAKIAl9CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZHMgdG8gYmUKLQkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuICovCisJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCiAJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0JbGluay0+ZGV2ID0gJmNhcmQtPm5vZGU7IC8qIGxpbmstPmRldiBiZWluZyBub24tTlVMTCBpcyBhbHNvCisJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCi0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICAgICAgZGV2LT5uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4LAotCSAgICAgICBsaW5rLT5jb25mLlZjYyAvIDEwLCBsaW5rLT5jb25mLlZjYyAlIDEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxIC8gMTAsCi0JCSAgICAgICBsaW5rLT5jb25mLlZwcDEgJSAxMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbmRleCAweCUwMng6ICIsCisJICAgICAgIGRldi0+bmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuVnBwKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAgLyAxMCwKKwkJICAgICAgIGxpbmstPmNvbmYuVnBwICUgMTApOwogCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCiAJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLApAQCAtODY3LDEzICs4NDksMTQgQEAKIAkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOwogCXByaW50aygiXG4iKTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKICBmYWlsZWQ6CiAJc3BlY3RydW1fY3NfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0JCQkJLyogc3BlY3RydW1fY3NfY29uZmlnICovCiAKIC8qCkBAIC04ODIsNyArODY1LDcgQEAKICAqIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogICovCiBzdGF0aWMgdm9pZAotc3BlY3RydW1fY3NfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3BlY3RydW1fY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg5NCw2NCArODc3LDQ2IEBACiAJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQkvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQotCQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJaWYgKHByaXYtPmh3LmlvYmFzZSkKIAkJaW9wb3J0X3VubWFwKHByaXYtPmh3LmlvYmFzZSk7CiB9CQkJCS8qIHNwZWN0cnVtX2NzX3JlbGVhc2UgKi8KIAogCiBzdGF0aWMgaW50Ci1zcGVjdHJ1bV9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3NwZWN0cnVtX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwogCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRvd25pbmcgaW50ZXJmYWNlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwogCi0JCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotc3BlY3RydW1fY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3NwZWN0cnVtX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCS8qIEZJWE1FOiBzaG91bGQgd2UgZG91YmxlIGNoZWNrIHRoYXQgdGhpcyBpcwotCQkgKiB0aGUgc2FtZSBjYXJkIGFzIHdlIGhhZCBiZWZvcmUgKi8KLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQl9CisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CisJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTc5LDcgKzk0NCw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCiAJfSwKLQkucHJvYmUJCT0gc3BlY3RydW1fY3NfYXR0YWNoLAorCS5wcm9iZQkJPSBzcGVjdHJ1bV9jc19wcm9iZSwKIAkucmVtb3ZlCQk9IHNwZWN0cnVtX2NzX2RldGFjaCwKIAkuc3VzcGVuZAk9IHNwZWN0cnVtX2NzX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzcGVjdHJ1bV9jc19yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKaW5kZXggZmYxOTJlOS4uZGFkZTRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwpAQCAtNDMwNiw3ICs0MzA2LDcgQEAKICAqIEluc2VydGlvbiBvZiB0aGUgbW9kdWxlCiAgKiBJJ20gbm93IHF1aXRlIHByb3VkIG9mIHRoZSBtdWx0aS1kZXZpY2Ugc3VwcG9ydC4KICAqLwotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHJldCA9IC1FSU87CQkvKiBSZXR1cm4gZXJyb3IgaWYgbm8gY2FyZHMgZm91bmQgKi8KIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCA5ODEyMmYzLi5mNzcyNGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogd3ZfODI1OTNfcmVjb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCiB7CiAgIG5ldF9sb2NhbCAqCQlscCA9IG5ldGRldl9wcml2KGRldik7Ci0gIGRldl9saW5rX3QgKgkJbGluayA9IGxwLT5saW5rOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCQlsaW5rID0gbHAtPmxpbms7CiAgIHVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAgIC8qIEFybSB0aGUgZmxhZywgd2lsbCBiZSBjbGVhcmQgaW4gd3ZfODI1OTNfY29uZmlnKCkgKi8KQEAgLTM3NDQsMTYgKzM3NDQsMTYgQEAKIHsKICAgaW50CQlpOwogICBjb25mX3JlZ190CXJlZyA9IHsgMCwgQ1NfUkVBRCwgQ0lTUkVHX0NPUiwgMCB9OwotICBkZXZfbGlua190ICoJbGluayA9ICgobmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPmxpbms7CisgIHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluayA9ICgobmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPmxpbms7CiAKICNpZmRlZiBERUJVR19DT05GSUdfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAtPnd2X3BjbWNpYV9yZXNldCgpXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAKLSAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpOworICBpID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogICBpZihpICE9IENTX1NVQ0NFU1MpCiAgICAgewotICAgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGkpOworICAgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAgICAgICAKQEAgLTM3NjQsMTkgKzM3NjQsMTkgQEAKIAogICByZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAgIHJlZy5WYWx1ZSA9IHJlZy5WYWx1ZSB8IENPUl9TV19SRVNFVDsKLSAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpOworICBpID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogICBpZihpICE9IENTX1NVQ0NFU1MpCiAgICAgewotICAgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGkpOworICAgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAgICAgICAKICAgcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogICByZWcuVmFsdWUgPSBDT1JfTEVWRUxfSVJRIHwgQ09SX0NPTkZJRzsKLSAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLT5oYW5kbGUsICZyZWcpOworICBpID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwogICBpZihpICE9IENTX1NVQ0NFU1MpCiAgICAgewotICAgICAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGkpOworICAgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKQEAgLTM5NDAsOSArMzk0MCw4IEBACiAgKiAoY2FsbGVkIGJ5IHdhdmVsYW5fZXZlbnQoKSkKICAqLwogc3RhdGljIGlubGluZSBpbnQKLXd2X3BjbWNpYV9jb25maWcoZGV2X2xpbmtfdCAqCWxpbmspCit3dl9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluaykKIHsKLSAgY2xpZW50X2hhbmRsZV90CWhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgdHVwbGVfdAkJdHVwbGU7CiAgIGNpc3BhcnNlX3QJCXBhcnNlOwogICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwpAQCAtMzk2NSwxNiArMzk2NCwxNiBAQAogICAgIHsKICAgICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogICAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICAgIGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKTsKKyAgICAgIGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAgICAgICBpZihpICE9IENTX1NVQ0NFU1MpCiAJYnJlYWs7CiAgICAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwogICAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAgICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgICBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKTsKKyAgICAgIGkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKICAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKIAlicmVhazsKLSAgICAgIGkgPSBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisgICAgICBpID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKICAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKIAlicmVhazsKICAgICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwpAQCAtMzk4MywxOSArMzk4MiwxNiBAQAogICB3aGlsZSgwKTsKICAgaWYoaSAhPSBDU19TVUNDRVNTKQogICAgIHsKLSAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUGFyc2VUdXBsZSwgaSk7Ci0gICAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworICAgICAgY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotICAgIAotICAvKiBDb25maWd1cmUgY2FyZCAqLwotICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOworCiAgIGRvCiAgICAgewotICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwogICAgICAgaWYoaSAhPSBDU19TVUNDRVNTKQogCXsKLQkgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJICBicmVhazsKIAl9CiAKQEAgLTQwMDMsMTAgKzM5OTksMTAgQEAKICAgICAgICAqIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiAgICAgICAgKiBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAgICAgICAgKi8KLSAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKyAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAgICAgICBpZihpICE9IENTX1NVQ0NFU1MpCiAJewotCSAgY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SVJRLCBpKTsKKwkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCSAgYnJlYWs7CiAJfQogCkBAIC00MDE1LDE1ICs0MDExLDE1IEBACiAgICAgICAgKiB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KICAgICAgICAqLwogICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7Ci0gICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKyAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKICAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKIAl7Ci0JICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkgIGJyZWFrOwogCX0KIAogICAgICAgLyoKLSAgICAgICAqIEFsbG9jYXRlIGEgc21hbGwgbWVtb3J5IHdpbmRvdy4gIE5vdGUgdGhhdCB0aGUgZGV2X2xpbmtfdAorICAgICAgICogQWxsb2NhdGUgYSBzbWFsbCBtZW1vcnkgd2luZG93LiAgTm90ZSB0aGF0IHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZQogICAgICAgICogc3RydWN0dXJlIHByb3ZpZGVzIHNwYWNlIGZvciBvbmUgd2luZG93IGhhbmRsZSAtLSBpZiB5b3VyCiAgICAgICAgKiBkZXZpY2UgbmVlZHMgc2V2ZXJhbCB3aW5kb3dzLCB5b3UnbGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mCiAgICAgICAgKiB0aGUgaGFuZGxlcyBpbiB5b3VyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIGxpbmstPnByaXYuCkBAIC00MDMxLDEwICs0MDI3LDEwIEBACiAgICAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzh8V0lOX01FTU9SWV9UWVBFX0FNfFdJTl9FTkFCTEU7CiAgICAgICByZXEuQmFzZSA9IHJlcS5TaXplID0gMDsKICAgICAgIHJlcS5BY2Nlc3NTcGVlZCA9IG1lbV9zcGVlZDsKLSAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbik7CisgICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKICAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKIAl7Ci0JICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RXaW5kb3csIGkpOworCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJICBicmVhazsKIAl9CiAKQEAgLTQwNDYsNyArNDA0Miw3IEBACiAgICAgICBpID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pOwogICAgICAgaWYoaSAhPSBDU19TVUNDRVNTKQogCXsKLQkgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgTWFwTWVtUGFnZSwgaSk7CisJICBjc19lcnJvcihsaW5rLCBNYXBNZW1QYWdlLCBpKTsKIAkgIGJyZWFrOwogCX0KIApAQCAtNDA2MCw3ICs0MDU2LDcgQEAKIAkgICAgIGxwLT5tZW0sIGRldi0+aXJxLCAodV9pbnQpIGRldi0+YmFzZV9hZGRyKTsKICNlbmRpZgogCi0gICAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworICAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAgICAgICBpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAgICAgICBpZihpICE9IDApCiAJewpAQCAtNDA3Miw3ICs0MDY4LDYgQEAKICAgICB9CiAgIHdoaWxlKDApOwkJLyogSHVtbS4uLiBEaXNndWlzZWQgZ290byAhISEgKi8KIAotICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogICAvKiBJZiBhbnkgc3RlcCBmYWlsZWQsIHJlbGVhc2UgYW55IHBhcnRpYWxseSBjb25maWd1cmVkIHN0YXRlICovCiAgIGlmKGkgIT0gMCkKICAgICB7CkBAIC00MDgxLDcgKzQwNzYsNyBAQAogICAgIH0KIAogICBzdHJjcHkoKChuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KSktPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0gIGxpbmstPmRldiA9ICYoKG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpKS0+bm9kZTsKKyAgbGluay0+ZGV2X25vZGUgPSAmKChuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KSktPm5vZGU7CiAKICNpZmRlZiBERUJVR19DT05GSUdfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIjwtd3ZfcGNtY2lhX2NvbmZpZygpXG4iKTsKQEAgLTQwOTYsMjYgKzQwOTEsMjAgQEAKICAqIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogICovCiBzdGF0aWMgdm9pZAotd3ZfcGNtY2lhX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3d2X3BjbWNpYV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwotICBuZXRfbG9jYWwgKgkJbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICoJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGxpbmstPnByaXY7CisJbmV0X2xvY2FsICoJCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogI2lmZGVmIERFQlVHX0NPTkZJR19UUkFDRQotICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IC0+IHd2X3BjbWNpYV9yZWxlYXNlKDB4JXApXG4iLCBkZXYtPm5hbWUsIGxpbmspOworCXByaW50ayhLRVJOX0RFQlVHICIlczogLT4gd3ZfcGNtY2lhX3JlbGVhc2UoMHglcClcbiIsIGRldi0+bmFtZSwgbGluayk7CiAjZW5kaWYKIAotICAvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0gIGlvdW5tYXAobHAtPm1lbSk7Ci0gIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0gIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLSAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLSAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJaW91bm1hcChscC0+bWVtKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAKICNpZmRlZiBERUJVR19DT05GSUdfVFJBQ0UKLSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LSB3dl9wY21jaWFfcmVsZWFzZSgpXG4iLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogPC0gd3ZfcGNtY2lhX3JlbGVhc2UoKVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogfQogCkBAIC00NDc5LDcgKzQ0NjgsNyBAQAogd2F2ZWxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICBuZXRfbG9jYWwgKglscCA9IG5ldGRldl9wcml2KGRldik7Ci0gIGRldl9saW5rX3QgKglsaW5rID0gbHAtPmxpbms7CisgIHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluayA9IGxwLT5saW5rOwogICBraW9fYWRkcl90CWJhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAogI2lmZGVmIERFQlVHX0NBTExCQUNLX1RSQUNFCkBAIC00NTMzLDcgKzQ1MjIsNyBAQAogc3RhdGljIGludAogd2F2ZWxhbl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKIHsKLSAgZGV2X2xpbmtfdCAqCWxpbmsgPSAoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5saW5rOworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbmsgPSAoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5saW5rOwogICBraW9fYWRkcl90CWJhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAogI2lmZGVmIERFQlVHX0NBTExCQUNLX1RSQUNFCkBAIC00NTg3LDQ1ICs0NTc2LDM2IEBACiAgKiBjYXJkIGluc2VydGlvbiBldmVudC4KICAqLwogc3RhdGljIGludAotd2F2ZWxhbl9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQord2F2ZWxhbl9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0gIGRldl9saW5rX3QgKglsaW5rOwkJLyogSW5mbyBmb3IgY2FyZG1nciAqLwogICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldjsJCS8qIEludGVyZmFjZSBnZW5lcmljIGRhdGEgKi8KICAgbmV0X2xvY2FsICoJbHA7CQkvKiBJbnRlcmZhY2Ugc3BlY2lmaWMgZGF0YSAqLworICBpbnQgcmV0OwogCiAjaWZkZWYgREVCVUdfQ0FMTEJBQ0tfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIi0+IHdhdmVsYW5fYXR0YWNoKClcbiIpOwogI2VuZGlmCiAKLSAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLSAgbGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7Ci0gIGlmICghbGluaykgcmV0dXJuIC1FTk9NRU07Ci0KICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCi0gIGxpbmstPmlvLk51bVBvcnRzMSA9IDg7Ci0gIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gIGxpbmstPmlvLklPQWRkckxpbmVzID0gMzsKKyAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDg7CisgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworICBwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAzOwogCiAgIC8qIEludGVycnVwdCBzZXR1cCAqLwotICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLSAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwotICBsaW5rLT5pcnEuSGFuZGxlciA9IHdhdmVsYW5faW50ZXJydXB0OworICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisgIHBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisgIHBfZGV2LT5pcnEuSGFuZGxlciA9IHdhdmVsYW5faW50ZXJydXB0OwogCiAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KLSAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICBsaW5rLT5jb25mLlZjYyA9IDUwOwotICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLQotICAvKiBDaGFpbiBkcml2ZXJzICovCi0gIGxpbmstPm5leHQgPSBOVUxMOworICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROworICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKICAgLyogQWxsb2NhdGUgdGhlIGdlbmVyaWMgZGF0YSBzdHJ1Y3R1cmUgKi8KICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKG5ldF9sb2NhbCkpOwotICBpZiAoIWRldikgewotICAgICAga2ZyZWUobGluayk7CisgIGlmICghZGV2KQogICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gIH0KLSAgbGluay0+cHJpdiA9IGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKKworICBwX2Rldi0+cHJpdiA9IHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKICAgbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC00NjQyLDcgKzQ2MjIsNiBAQAogICBzcGluX2xvY2tfaW5pdCgmbHAtPnNwaW5sb2NrKTsKIAogICAvKiBiYWNrIGxpbmtzICovCi0gIGxwLT5saW5rID0gbGluazsKICAgbHAtPmRldiA9IGRldjsKIAogICAvKiB3YXZlbGFuIE5FVDMgY2FsbGJhY2tzICovCkBAIC00NjY4LDE1ICs0NjQ3LDE4IEBACiAgIC8qIE90aGVyIHNwZWNpZmljIGRhdGEgKi8KICAgZGV2LT5tdHUgPSBXQVZFTEFOX01UVTsKIAotICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKKyAgcmV0ID0gd3ZfcGNtY2lhX2NvbmZpZyhwX2Rldik7CisgIGlmIChyZXQpCisJICByZXR1cm4gcmV0OwogCi0gIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICBpZih3dl9wY21jaWFfY29uZmlnKGxpbmspICYmCi0gICAgIHd2X2h3X2NvbmZpZyhkZXYpKQotCSAgd3ZfaW5pdF9pbmZvKGRldik7Ci0gIGVsc2UKKyAgcmV0ID0gd3ZfaHdfY29uZmlnKGRldik7CisgIGlmIChyZXQpIHsKIAkgIGRldi0+aXJxID0gMDsKKwkgIHBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CisJICByZXR1cm4gcmV0OworICB9CisKKyAgd3ZfaW5pdF9pbmZvKGRldik7CiAKICNpZmRlZiBERUJVR19DQUxMQkFDS19UUkFDRQogICBwcmludGsoS0VSTl9ERUJVRyAiPC0gd2F2ZWxhbl9hdHRhY2goKVxuIik7CkBAIC00NjkzLDI1ICs0Njc1LDE0IEBACiAgKiBpcyByZWxlYXNlZC4KICAqLwogc3RhdGljIHZvaWQKLXdhdmVsYW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3dhdmVsYW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KICNpZmRlZiBERUJVR19DQUxMQkFDS19UUkFDRQogICBwcmludGsoS0VSTl9ERUJVRyAiLT4gd2F2ZWxhbl9kZXRhY2goMHglcClcbiIsIGxpbmspOwogI2VuZGlmCiAKLSAgLyoKLSAgICogSWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCBhbmQgYWN0aXZlLCB3ZSB3b24ndAotICAgKiBhY3R1YWxseSBkZWxldGUgaXQgeWV0LiAgSW5zdGVhZCwgaXQgaXMgbWFya2VkIHNvIHRoYXQgd2hlbiB0aGUKLSAgICogcmVsZWFzZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhhdCB3aWxsIHRyaWdnZXIgYSBwcm9wZXIKLSAgICogZGV0YWNoKCkuCi0gICAqLwotICBpZihsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0gICAgewotICAgICAgLyogU29tZSBvdGhlcnMgaGF2ZW4ndCBkb25lIHRoZWlyIGpvYiA6IGdpdmUgdGhlbSBhbm90aGVyIGNoYW5jZSAqLwotICAgICAgd3ZfcGNtY2lhX3JlbGVhc2UobGluayk7Ci0gICAgfQorICAvKiBTb21lIG90aGVycyBoYXZlbid0IGRvbmUgdGhlaXIgam9iIDogZ2l2ZSB0aGVtIGFub3RoZXIgY2hhbmNlICovCisgIHd2X3BjbWNpYV9yZWxlYXNlKGxpbmspOwogCiAgIC8qIEZyZWUgcGllY2VzICovCiAgIGlmKGxpbmstPnByaXYpCkBAIC00NzIwLDIzICs0NjkxLDIxIEBACiAKICAgICAgIC8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUga2VybmVsIGxpc3Qgb2YgZXRoZXJuZXQgZGV2aWNlcyAqLwogICAgICAgLyogV2FybmluZyA6IGNhbid0IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCwgdGltZXIgb3Igd2F2ZWxhbl9jbG9zZSgpICovCi0gICAgICBpZiAobGluay0+ZGV2KQorICAgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gICAgICBsaW5rLT5kZXYgPSBOVUxMOworICAgICAgbGluay0+ZGV2X25vZGUgPSBOVUxMOwogICAgICAgKChuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+bGluayA9IE5VTEw7CiAgICAgICAoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5kZXYgPSBOVUxMOwogICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKICAgICB9Ci0gIGtmcmVlKGxpbmspOwogCiAjaWZkZWYgREVCVUdfQ0FMTEJBQ0tfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIjwtIHdhdmVsYW5fZGV0YWNoKClcbiIpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWxhbl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgd2F2ZWxhbl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICoJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGxpbmstPnByaXY7CiAKIAkvKiBOQjogd2F2ZWxhbl9jbG9zZSB3aWxsIGJlIGNhbGxlZCwgYnV0IHRvbyBsYXRlLCBzbyB3ZSBhcmUKQEAgLTQ3NDgsMzYgKzQ3MTcsMjIgQEAKIAkvKiBTdG9wIHJlY2VpdmluZyBuZXcgbWVzc2FnZXMgYW5kIHdhaXQgZW5kIG9mIHRyYW5zbWlzc2lvbiAqLwogCXd2X3J1X3N0b3AoZGV2KTsKIAorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisKIAkvKiBQb3dlciBkb3duIHRoZSBtb2R1bGUgKi8KIAloYWNyX3dyaXRlKGRldi0+YmFzZV9hZGRyLCBIQUNSX0RFRkFVTFQgJiAofkhBQ1JfUFdSX1NUQVQpKTsKIAotCS8qIFRoZSBjYXJkIGlzIG5vdyBzdXNwZW5kZWQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQotICAgIAlpZihsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JewotCQlpZihsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWxhbl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB3YXZlbGFuX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQl7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmKGxpbmstPm9wZW4pCS8qIElmIFJFU0VUIC0+IFRydWUsIElmIFJFU1VNRSAtPiBGYWxzZSA/ICovCi0JCXsKLQkJCXd2X2h3X3Jlc2V0KGRldik7Ci0JCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0JCX0KKwlpZiAobGluay0+b3BlbikgeworCQl3dl9od19yZXNldChkZXYpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00Nzk4LDcgKzQ3NTMsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJ3YXZlbGFuX2NzIiwKIAl9LAotCS5wcm9iZQkJPSB3YXZlbGFuX2F0dGFjaCwKKwkucHJvYmUJCT0gd2F2ZWxhbl9wcm9iZSwKIAkucmVtb3ZlCQk9IHdhdmVsYW5fZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHdhdmVsYW5faWRzLAogCS5zdXNwZW5kCT0gd2F2ZWxhbl9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAppbmRleCA0NTFmNjI3Li5jNjVmZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaApAQCAtNjAyLDcgKzYwMiw3IEBACiAgIGRldl9ub2RlX3QgCW5vZGU7CQkvKiA/Pz8/IFdoYXQgaXMgdGhpcyBzdHVmZiA/Pz8/ICovCiAgIHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2OwkJLyogUmV2ZXJzZSBsaW5rLi4uICovCiAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCi0gIGRldl9saW5rX3QgKglsaW5rOwkJLyogcGNtY2lhIHN0cnVjdHVyZSAqLworICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqCWxpbms7CQkvKiBwY21jaWEgc3RydWN0dXJlICovCiAgIGVuX3N0YXRzCXN0YXRzOwkJLyogRXRoZXJuZXQgaW50ZXJmYWNlIHN0YXRpc3RpY3MgKi8KICAgaW50CQlucmVzZXRzOwkvKiBOdW1iZXIgb2YgaHcgcmVzZXRzICovCiAgIHVfY2hhcgljb25maWd1cmVkOwkvKiBJZiBpdCBpcyBjb25maWd1cmVkICovCkBAIC03MzMsOSArNzMzLDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogCXd2X2h3X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBTYW1lLCArIHN0YXJ0IHJlY2VpdmVyIHVuaXQgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci0Jd3ZfcGNtY2lhX2NvbmZpZyhkZXZfbGlua190ICopOwkvKiBDb25maWd1cmUgdGhlIHBjbWNpYSBpbnRlcmZhY2UgKi8KKwl3dl9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOwkvKiBDb25maWd1cmUgdGhlIHBjbWNpYSBpbnRlcmZhY2UgKi8KIHN0YXRpYyB2b2lkCi0Jd3ZfcGNtY2lhX3JlbGVhc2UoZGV2X2xpbmtfdCAqKTsvKiBSZW1vdmUgYSBkZXZpY2UgKi8KKwl3dl9wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsvKiBSZW1vdmUgYSBkZXZpY2UgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSU5URVJSVVBUIEhBTkRMSU5HIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpcnFyZXR1cm5fdAogCXdhdmVsYW5faW50ZXJydXB0KGludCwJLyogSW50ZXJydXB0IGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmgKaW5kZXggNDMwM2M1MC4uNjVjZWIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmgKQEAgLTYxMSw1ICs2MTEsNiBAQAogCXN0cnVjdCBpd19zcHlfZGF0YQkJc3B5X2RhdGE7CiAJc3RydWN0IGl3X3B1YmxpY19kYXRhCQl3aXJlbGVzc19kYXRhOwogCXN0cnVjdCBkZXZfbm9kZV90CQlub2RlOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCQkqcF9kZXY7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IDQ4ZTEwYjAuLmU1MmE2NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC0xMDMsOCArMTAzLDggQEAKICAqIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQgaW5zZXJ0aW9uIGFuZCBlamVjdGlvbiBldmVudHMuICBUaGV5CiAgKiBhcmUgaW52b2tlZCBmcm9tIHRoZSB3bDI0IGV2ZW50IGhhbmRsZXIuCiAgKi8KLXN0YXRpYyB2b2lkIHdsMzUwMV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7Ci1zdGF0aWMgdm9pZCB3bDM1MDFfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyBpbnQgd2wzNTAxX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCB3bDM1MDFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiAKIC8qCiAgKiBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCkBAIC0yMjYsMTcgKzIyNiw2IEBACiAJaXdfc2V0X21nbXRfaW5mb19lbGVtZW50KGZyb20tPmlkLCB0bywgZnJvbS0+ZGF0YSwgZnJvbS0+bGVuKTsKIH0KIAotLyoKLSAqIEEgbGlua2VkIGxpc3Qgb2YgImluc3RhbmNlcyIgb2YgdGhlIHdsMjQgZGV2aWNlLiAgRWFjaCBhY3R1YWwgUENNQ0lBIGNhcmQKLSAqIGNvcnJlc3BvbmRzIHRvIG9uZSBkZXZpY2UgaW5zdGFuY2UsIGFuZCBpcyBkZXNjcmliZWQgYnkgb25lIGRldl9saW5rX3QKLSAqIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KLSAqCi0gKiBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGZvciB0aGlzIC0tIGZvciBleGFtcGxlLCB0aGUgbWVtb3J5Ci0gKiBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIGRldl9saW5rX3QgcG9pbnRlcnMsIHdoZXJlIG1pbm9yIGRldmljZSBudW1iZXJzCi0gKiBhcmUgdXNlZCB0byBkZXJpdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgaW5kZXguCi0gKi8KLXN0YXRpYyBkZXZfbGlua190ICp3bDM1MDFfZGV2X2xpc3Q7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB3bDM1MDFfc3dpdGNoX3BhZ2Uoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1OCBwYWdlKQogewogCXdsMzUwMV9vdXRiKHBhZ2UsIHRoaXMtPmJhc2VfYWRkciArIFdMMzUwMV9OSUNfQlNTKTsKQEAgLTEyODEsMTUgKzEyNzAsMTAgQEAKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBkZXYtPnByaXY7CiAJaW50IHJjID0gLUVOT0RFVjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWRldl9saW5rX3QgKmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJbGluayA9IHRoaXMtPnBfZGV2OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGluIHdsMzUwMV9kZXZfbGlzdCAqLwotCWZvciAobGluayA9IHdsMzUwMV9kZXZfbGlzdDsgbGluazsgbGluayA9IGxpbmstPm5leHQpCi0JCWlmIChsaW5rLT5wcml2ID09IGRldikKLQkJCWJyZWFrOwotCWlmICghbGluaykKLQkJZ290byBvdXQ7CiAJbGluay0+b3Blbi0tOwogCiAJLyogU3RvcCB3bDM1MDFfaGFyZF9zdGFydF94bWl0KCkgZnJvbSBub3cgb24gKi8KQEAgLTEzMDEsNyArMTI4NSw2IEBACiAKIAlyYyA9IDA7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdMMzUwMSBjbG9zZWRcbiIsIGRldi0+bmFtZSk7Ci1vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhpcy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KQEAgLTE0MDAsMTQgKzEzODMsMTEgQEAKIAlpbnQgcmMgPSAtRU5PREVWOwogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IGRldi0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWRldl9saW5rX3QgKmxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJbGluayA9IHRoaXMtPnBfZGV2OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGluIHdsMzUwMV9kZXZfbGlzdCAqLwotCWZvciAobGluayA9IHdsMzUwMV9kZXZfbGlzdDsgbGluazsgbGluayA9IGxpbmstPm5leHQpCi0JCWlmIChsaW5rLT5wcml2ID09IGRldikKLQkJCWJyZWFrOwotCWlmICghREVWX09LKGxpbmspKQorCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCQlnb3RvIG91dDsKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJbGluay0+b3BlbisrOwpAQCAtMTQ5NywzOCArMTQ3NywyMyBAQAogICogU2VydmljZXMuIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4KICAqIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHdsMzUwMV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgd2wzNTAxX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQlkZXZfbGlua190ICoqbGlua3A7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQkvKiBMb2NhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWZvciAobGlua3AgPSAmd2wzNTAxX2Rldl9saXN0OyAqbGlua3A7IGxpbmtwID0gJigqbGlua3ApLT5uZXh0KQotCQlpZiAoKmxpbmtwID09IGxpbmspCi0JCQlicmVhazsKLQlpZiAoISpsaW5rcCkKLQkJZ290byBvdXQ7Ci0KIAkvKiBJZiB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBjb25maWd1cmVkIGFuZCBhY3RpdmUsIHdlIHdvbid0IGFjdHVhbGx5CiAJICogZGVsZXRlIGl0IHlldC4gIEluc3RlYWQsIGl0IGlzIG1hcmtlZCBzbyB0aGF0IHdoZW4gdGhlIHJlbGVhc2UoKQogCSAqIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhhdCB3aWxsIHRyaWdnZXIgYSBwcm9wZXIgZGV0YWNoKCkuICovCiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXdoaWxlIChsaW5rLT5vcGVuID4gMCkKLQkJCXdsMzUwMV9jbG9zZShkZXYpOworCXdoaWxlIChsaW5rLT5vcGVuID4gMCkKKwkJd2wzNTAxX2Nsb3NlKGRldik7CiAKLQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQl3bDM1MDFfcmVsZWFzZShsaW5rKTsKLQl9Ci0KLQkvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgZnJlZSBwaWVjZXMgKi8KLQkqbGlua3AgPSBsaW5rLT5uZXh0OworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwl3bDM1MDFfcmVsZWFzZShsaW5rKTsKIAogCWlmIChsaW5rLT5wcml2KQogCQlmcmVlX25ldGRldihsaW5rLT5wcml2KTsKLQlrZnJlZShsaW5rKTsKLW91dDoKKwogCXJldHVybjsKIH0KIApAQCAtMTk1MywzMyArMTkxOCwyNiBAQAogICogVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IGNvbmZpZ3VyZSB0aGUKICAqIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkIGluc2VydGlvbiBldmVudC4KICAqLwotc3RhdGljIGludCB3bDM1MDFfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgd2wzNTAxX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKLQlkZXZfbGlua190ICpsaW5rOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLQlsaW5rID0ga3phbGxvYyhzaXplb2YoKmxpbmspLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxpbmspCi0JCXJldHVybiAtRU5PTUVNOwotCiAJLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCi0JbGluay0+aW8uTnVtUG9ydHMxCT0gMTY7Ci0JbGluay0+aW8uQXR0cmlidXRlczEJPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcwk9IDU7CisJcF9kZXYtPmlvLk51bVBvcnRzMQk9IDE2OworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMQk9IElPX0RBVEFfUEFUSF9XSURUSF84OworCXBfZGV2LT5pby5JT0FkZHJMaW5lcwk9IDU7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcwk9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLQlsaW5rLT5pcnEuSVJRSW5mbzEJPSBJUlFfTEVWRUxfSUQ7Ci0JbGluay0+aXJxLkhhbmRsZXIgPSB3bDM1MDFfaW50ZXJydXB0OworCXBfZGV2LT5pcnEuQXR0cmlidXRlcwk9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlwX2Rldi0+aXJxLklSUUluZm8xCT0gSVJRX0xFVkVMX0lEOworCXBfZGV2LT5pcnEuSGFuZGxlciA9IHdsMzUwMV9pbnRlcnJ1cHQ7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCi0JbGluay0+Y29uZi5BdHRyaWJ1dGVzCT0gQ09ORl9FTkFCTEVfSVJROwotCWxpbmstPmNvbmYuVmNjCQk9IDUwOwotCWxpbmstPmNvbmYuSW50VHlwZQk9IElOVF9NRU1PUllfQU5EX0lPOwotCWxpbmstPmNvbmYuQ29uZmlnSW5kZXgJPSAxOwotCWxpbmstPmNvbmYuUHJlc2VudAk9IFBSRVNFTlRfT1BUSU9OOworCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMJPSBDT05GX0VOQUJMRV9JUlE7CisJcF9kZXYtPmNvbmYuSW50VHlwZQk9IElOVF9NRU1PUllfQU5EX0lPOworCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4CT0gMTsKKwlwX2Rldi0+Y29uZi5QcmVzZW50CT0gUFJFU0VOVF9PUFRJT047CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHdsMzUwMV9jYXJkKSk7CiAJaWYgKCFkZXYpCkBAIC0xOTkyLDIyICsxOTUwLDE1IEBACiAJZGV2LT5nZXRfc3RhdHMJCT0gd2wzNTAxX2dldF9zdGF0czsKIAl0aGlzID0gZGV2LT5wcml2OwogCXRoaXMtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmdGhpcy0+c3B5X2RhdGE7CisJdGhpcy0+cF9kZXYgPSBwX2RldjsKIAlkZXYtPndpcmVsZXNzX2RhdGEJPSAmdGhpcy0+d2lyZWxlc3NfZGF0YTsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzCT0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZ3bDM1MDFfaGFuZGxlcl9kZWY7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm9wcyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCWxpbmstPnByaXYgPSBsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CisJcF9kZXYtPnByaXYgPSBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXdsMzUwMV9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gd2wzNTAxX2NvbmZpZyhwX2Rldik7CiBvdXRfbGluazoKLQlrZnJlZShsaW5rKTsKLQlsaW5rID0gTlVMTDsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtMjAyMiwxMSArMTk3MywxMCBAQAogICogcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlIGV0aGVybmV0IGRldmljZQogICogYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAgKi8KLXN0YXRpYyB2b2lkIHdsMzUwMV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgd2wzNTAxX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAl0dXBsZV90IHR1cGxlOwogCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlpbnQgaSA9IDAsIGosIGxhc3RfZm4sIGxhc3RfcmV0OwogCXVuc2lnbmVkIGNoYXIgYmZbNjRdOwpAQCAtMjAzNSwxOCArMTk4NSwxNSBAQAogCS8qIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlnIHJlZ2lzdGVycy4gKi8KIAl0dXBsZS5BdHRyaWJ1dGVzCT0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUJPSBDSVNUUExfQ09ORklHOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCXR1cGxlLlR1cGxlRGF0YQkJPSBiZjsKIAl0dXBsZS5UdXBsZURhdGFNYXgJPSBzaXplb2YoYmYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0CT0gMDsKLQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlCT0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50CT0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAJLyogVHJ5IGFsbG9jYXRpbmcgSU8gcG9ydHMuICBUaGlzIHRyaWVzIGEgZmV3IGZpeGVkIGFkZHJlc3Nlcy4gIElmIHlvdQogCSAqIHdhbnQsIHlvdSBjYW4gYWxzbyByZWFkIHRoZSBjYXJkJ3MgY29uZmlnIHRhYmxlIHRvIHBpY2sgYWRkcmVzc2VzIC0tCiAJICogc2VlIHRoZSBzZXJpYWwgZHJpdmVyIGZvciBhbiBleGFtcGxlLiAqLwpAQCAtMjA1NiwyOCArMjAwMywyOCBAQAogCQkgKiAweDIwMC0weDJmZiwgYW5kIHNvIG9uLCBiZWNhdXNlIHRoaXMgc2VlbXMgc2FmZXIgKi8KIAkJbGluay0+aW8uQmFzZVBvcnQxID0gajsKIAkJbGluay0+aW8uQmFzZVBvcnQyID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMDsKLQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkKIAkgKiBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuICovCiAKLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAogCS8qIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwIHRoZSBJL08KIAkgKiB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuICAqLwogCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKIAlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGhhbmRsZSkpOworCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIndsMzUwMV9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0yMDg4LDEwICsyMDM1LDkgQEAKIAl0aGlzID0gZGV2LT5wcml2OwogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIHNob3VsZCBiZSBpbml0aWFsaXplZCBhbmQKLQkgKiBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgKiBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLgogCSAqLwotCWxpbmstPmRldiA9ICZ0aGlzLT5ub2RlOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJbGluay0+ZGV2X25vZGUgPSAmdGhpcy0+bm9kZTsKIAogCXRoaXMtPmJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCkBAIC0yMTI3LDEzICsyMDczLDEzIEBACiAJc3Bpbl9sb2NrX2luaXQoJnRoaXMtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRoaXMtPndhaXQpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JZ290byBvdXQ7CisJcmV0dXJuIDA7CisKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJd2wzNTAxX3JlbGVhc2UobGluayk7Ci1vdXQ6Ci0JcmV0dXJuOworCXJldHVybiAtRU5PREVWOwogfQogCiAvKioKQEAgLTIxNDQsNTIgKzIwOTAsMzYgQEAKICAqIGFuZCByZWxlYXNlIHRoZSBQQ01DSUEgY29uZmlndXJhdGlvbi4gIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgb3BlbiwgdGhpcwogICogd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgogICovCi1zdGF0aWMgdm9pZCB3bDM1MDFfcmVsZWFzZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKIAkvKiBVbmxpbmsgdGhlIGRldmljZSBjaGFpbiAqLwotCWlmIChsaW5rLT5kZXYpIHsKKwlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCWxpbmstPmRldiA9IE5VTEw7Ci0JfQogCi0JLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IHdsMzUwMV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgd2wzNTAxX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQogCXdsMzUwMV9wd3JfbWdtdChkZXYtPnByaXYsIFdMMzUwMV9TVVNQRU5EKTsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCWlmIChsaW5rLT5vcGVuKQotCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JfQorCWlmIChsaW5rLT5vcGVuKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bDM1MDFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgd2wzNTAxX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAogCXdsMzUwMV9wd3JfbWdtdChkZXYtPnByaXYsIFdMMzUwMV9SRVNVTUUpOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQkJaWYgKGxpbmstPm9wZW4pIHsKLQkJCXdsMzUwMV9yZXNldChkZXYpOwotCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQl9CisJaWYgKGxpbmstPm9wZW4pIHsKKwkJd2wzNTAxX3Jlc2V0KGRldik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIyMDcsNyArMjEzNyw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gIndsMzUwMV9jcyIsCiAJfSwKLQkucHJvYmUJCT0gd2wzNTAxX2F0dGFjaCwKKwkucHJvYmUJCT0gd2wzNTAxX3Byb2JlLAogCS5yZW1vdmUJCT0gd2wzNTAxX2RldGFjaCwKIAkuaWRfdGFibGUJPSB3bDM1MDFfaWRzLAogCS5zdXNwZW5kCT0gd2wzNTAxX3N1c3BlbmQsCkBAIC0yMjIxLDkgKzIxNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2wzNTAxX2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0JZHByaW50aygwLCAiOiB1bmxvYWRpbmciKTsKIAlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJndsMzUwMV9kcml2ZXIpOwotCUJVR19PTih3bDM1MDFfZGV2X2xpc3QgIT0gTlVMTCk7CiB9CiAKIG1vZHVsZV9pbml0KHdsMzUwMV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCmluZGV4IDc1ZDU2YmYuLmZkMGY0M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCkBAIC0xNDQxLDggKzE0NDEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHllbGxvd2Zpbl9wcml2YXRlICpucDsKIAotCWlmICghZGV2KQotCQlCVUcoKTsKKwlCVUdfT04oIWRldik7CiAJbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX1RPVEFMX1NJWkUsIG5wLT50eF9zdGF0dXMsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCmluZGV4IDRlNTNiZTkuLmJiZWFiZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKQEAgLTUzNSw3ICs1MzUsNyBAQAogewogCWNoYXIgKm91dCA9IGJ1ZjsKIAlzdHJ1Y3QgcGRjc3BhdGhfZW50cnkgKnBhdGhlbnRyeTsKLQkKKwogCWlmICghZW50cnkgfHwgIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jIGIvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMKaW5kZXggNDJiMzJmZi4uMjc4ZjMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMKKysrIGIvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMKQEAgLTE3OCw2ICsxNzgsMTEgQEAKICNkZWZpbmUgUk9QRTZfQ1RMCTB4MjMwCiAjZGVmaW5lIFJPUEU3X0NUTAkweDIzOAogCisjZGVmaW5lIElPQ19ST1BFMF9DRkcJMHg1MDAJLyogcGx1dG8gb25seSAqLworI2RlZmluZSAgIElPQ19ST1BFX0FPCSAgMHgxMAkvKiBBbGxvdyAiUmVsYXhlZCBPcmRlcmluZyIgKi8KKworCisKICNkZWZpbmUgSEZfRU5BQkxFCTB4NDAKIAogCkBAIC0xNzU5LDE5ICsxNzY0LDMzIEBACiAKIAlzYmFfZGV2LT5udW1faW9jID0gbnVtX2lvYzsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2lvYzsgaSsrKSB7Ci0JCS8qCi0JCSoqIE1ha2Ugc3VyZSB0aGUgYm94IGNyYXNoZXMgaWYgd2UgZ2V0IGFueSBlcnJvcnMgb24gYSByb3BlLgotCQkqLwotCQlXUklURV9SRUcoSEZfRU5BQkxFLCBzYmFfZGV2LT5pb2NbaV0uaW9jX2hwYSArIFJPUEUwX0NUTCk7Ci0JCVdSSVRFX1JFRyhIRl9FTkFCTEUsIHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhICsgUk9QRTFfQ1RMKTsKLQkJV1JJVEVfUkVHKEhGX0VOQUJMRSwgc2JhX2Rldi0+aW9jW2ldLmlvY19ocGEgKyBST1BFMl9DVEwpOwotCQlXUklURV9SRUcoSEZfRU5BQkxFLCBzYmFfZGV2LT5pb2NbaV0uaW9jX2hwYSArIFJPUEUzX0NUTCk7Ci0JCVdSSVRFX1JFRyhIRl9FTkFCTEUsIHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhICsgUk9QRTRfQ1RMKTsKLQkJV1JJVEVfUkVHKEhGX0VOQUJMRSwgc2JhX2Rldi0+aW9jW2ldLmlvY19ocGEgKyBST1BFNV9DVEwpOwotCQlXUklURV9SRUcoSEZfRU5BQkxFLCBzYmFfZGV2LT5pb2NbaV0uaW9jX2hwYSArIFJPUEU2X0NUTCk7Ci0JCVdSSVRFX1JFRyhIRl9FTkFCTEUsIHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhICsgUk9QRTdfQ1RMKTsKKwkJdW5zaWduZWQgbG9uZyBpb2NfaHBhID0gc2JhX2Rldi0+aW9jW2ldLmlvY19ocGE7CisJCXVuc2lnbmVkIGludCBqOwogCi0JCS8qIGZsdXNoIG91dCB0aGUgd3JpdGVzICovCisJCWZvciAoaj0wOyBqIDwgc2l6ZW9mKHU2NCkgKiBST1BFU19QRVJfSU9DOyBqKz1zaXplb2YodTY0KSkgeworCisJCQkvKgorCQkJICogQ2xlYXIgUk9QRShOKV9DT05GSUcgQU8gYml0LgorCQkJICogRGlzYWJsZXMgIk5UIE9yZGVyaW5nIiAofj0gISJSZWxheGVkIE9yZGVyaW5nIikKKwkJCSAqIE92ZXJyaWRlcyBiaXQgMSBpbiBETUEgSGludCBTZXRzLgorCQkJICogSW1wcm92ZXMgbmV0cGVyZiBVRFBfU1RSRUFNIGJ5IH4xMCUgZm9yIGJjbTU3MDEuCisJCQkgKi8KKwkJCWlmIChJU19QTFVUTyhzYmFfZGV2LT5pb2RjKSkgeworCQkJCXVuc2lnbmVkIGxvbmcgcm9wZV9jZmcsIGNmZ192YWw7CisKKwkJCQlyb3BlX2NmZyA9IGlvY19ocGEgKyBJT0NfUk9QRTBfQ0ZHICsgajsKKwkJCQljZmdfdmFsID0gUkVBRF9SRUcocm9wZV9jZmcpOworCQkJCWNmZ192YWwgJj0gfklPQ19ST1BFX0FPOworCQkJCVdSSVRFX1JFRyhjZmdfdmFsLCByb3BlX2NmZyk7CisJCQl9CisKKwkJCS8qCisJCQkqKiBNYWtlIHN1cmUgdGhlIGJveCBjcmFzaGVzIG9uIHJvcGUgZXJyb3JzLgorCQkJKi8KKwkJCVdSSVRFX1JFRyhIRl9FTkFCTEUsIGlvY19ocGEgKyBST1BFMF9DVEwgKyBqKTsKKwkJfQorCisJCS8qIGZsdXNoIG91dCB0aGUgbGFzdCB3cml0ZXMgKi8KIAkJUkVBRF9SRUcoc2JhX2Rldi0+aW9jW2ldLmlvY19ocGEgKyBST1BFN19DVEwpOwogCiAJCURCR19JTklUKCIJaW9jWyVkXSBST1BFX0NGRyAweCVMeCAgUk9QRV9EQkcgMHglTHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggNzE5Yjg2My4uODI4ZWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBzaW8tPmxpb19wZGV2OwogCXUxNiB3b3JkOwogCi0gICAgICAgIGlmIChzaW8tPnN1Y2t5aW9faXJxX2VuYWJsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJaWYgKHNpby0+c3Vja3lpb19pcnFfZW5hYmxlZCkKIAkJcmV0dXJuOwogCiAJQlVHX09OKCFwZGV2KTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCXJlcXVlc3RfcmVnaW9uIChzaW8tPmFjcGlfYmFzZSwgMHgxZiwgImFjcGkiKTsKIAogCS8qIEVuYWJsZSB0aGUgbGVnYWN5IEkvTyBmdW5jdGlvbiAqLwotICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZCAocGRldiwgUENJX0NPTU1BTkQsICZ3b3JkKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZCAocGRldiwgUENJX0NPTU1BTkQsICZ3b3JkKTsKIAl3b3JkIHw9IFBDSV9DT01NQU5EX1NFUlIgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9JTzsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQgKHBkZXYsIFBDSV9DT01NQU5ELCB3b3JkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKaW5kZXggMTU4ZDkyNS4uYjk1M2Q1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCkBAIC04MSwxNSArODEsMTUgQEAKICNkZWZpbmUgRk9SQ0VfRVBQX01PREUJMHgwOAogCiB0eXBlZGVmIHN0cnVjdCBwYXJwb3J0X2luZm9fdCB7Ci0gICAgZGV2X2xpbmtfdAkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgaW50CQkJbmRldjsKICAgICBkZXZfbm9kZV90CQlub2RlOwogICAgIHN0cnVjdCBwYXJwb3J0CSpwb3J0OwogfSBwYXJwb3J0X2luZm9fdDsKIAogc3RhdGljIHZvaWQgcGFycG9ydF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLXN0YXRpYyB2b2lkIHBhcnBvcnRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgcGFycG9ydF9jc19yZWxlYXNlKGRldl9saW5rX3QgKik7CitzdGF0aWMgaW50IHBhcnBvcnRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIHBhcnBvcnRfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTk5LDEwICs5OSw5IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHBhcnBvcnRfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgcGFycG9ydF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBwYXJwb3J0X2luZm9fdCAqaW5mbzsKLSAgICBkZXZfbGlua190ICpsaW5rOwogCiAgICAgREVCVUcoMCwgInBhcnBvcnRfYXR0YWNoKClcbiIpOwogCkBAIC0xMTAsMjMgKzEwOSwxNyBAQAogICAgIGluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogICAgIGlmICghaW5mbykgcmV0dXJuIC1FTk9NRU07CiAgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwotICAgIGxpbmsgPSAmaW5mby0+bGluazsgbGluay0+cHJpdiA9IGluZm87CisgICAgbGluay0+cHJpdiA9IGluZm87CisgICAgaW5mby0+cF9kZXYgPSBsaW5rOwogCiAgICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwogICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgbGluay0+Y29uZi5WY2MgPSA1MDsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIGxpbmstPmhhbmRsZSA9IHBfZGV2OwotICAgIHBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLSAgICBwYXJwb3J0X2NvbmZpZyhsaW5rKTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBwYXJwb3J0X2NvbmZpZyhsaW5rKTsKIH0gLyogcGFycG9ydF9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMzgsMTQgKzEzMSwxMSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgcGFycG9ydF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgcGFycG9ydF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KICAgICBERUJVRygwLCAicGFycG9ydF9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQlwYXJwb3J0X2NzX3JlbGVhc2UobGluayk7CisgICAgcGFycG9ydF9jc19yZWxlYXNlKGxpbmspOwogCiAgICAga2ZyZWUobGluay0+cHJpdik7CiB9IC8qIHBhcnBvcnRfZGV0YWNoICovCkBAIC0xNjEsMTQgKzE1MSwxMiBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi12b2lkIHBhcnBvcnRfY29uZmlnKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IHBhcnBvcnRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgcGFycG9ydF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHR1cGxlX3QgdHVwbGU7CiAgICAgdV9zaG9ydCBidWZbMTI4XTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIGNvbmZpZ19pbmZvX3QgY29uZjsKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKICAgICBzdHJ1Y3QgcGFycG9ydCAqcDsKQEAgLTE4MCwyNCArMTY4LDE4IEBACiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOyB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLSAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotICAgIAotICAgIC8qIENvbmZpZ3VyZSBjYXJkICovCi0gICAgbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKIAotICAgIC8qIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuLi4gbG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLSAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotICAgIAogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIHdoaWxlICgxKSB7Ci0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCiAJICAgIGdvdG8gbmV4dF9lbnRyeTsKIAogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7CkBAIC0yMTIsNyArMTk0LDcgQEAKIAkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwogCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKIAkgICAgfQotCSAgICBpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pICE9IDApCisJICAgIGlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCiAJCWdvdG8gbmV4dF9lbnRyeTsKIAkgICAgLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCiAJICAgIGJyZWFrOwpAQCAtMjIwLDE1ICsyMDIsMTIgQEAKIAkKICAgICBuZXh0X2VudHJ5OgogCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB9CiAgICAgCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKLSAgICByZWxlYXNlX3JlZ2lvbihsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlvLk51bVBvcnRzMSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQlyZWxlYXNlX3JlZ2lvbihsaW5rLT5pby5CYXNlUG9ydDIsIGxpbmstPmlvLk51bVBvcnRzMik7CiAgICAgcCA9IHBhcnBvcnRfcGNfcHJvYmVfcG9ydChsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlvLkJhc2VQb3J0MiwKIAkJCSAgICAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSwgUEFSUE9SVF9ETUFfTk9ORSwKIAkJCSAgICAgIE5VTEwpOwpAQCAtMjQ3LDE3ICsyMjYsMTUgQEAKICAgICBpbmZvLT5ub2RlLm1pbm9yID0gcC0+bnVtYmVyOwogICAgIGluZm8tPnBvcnQgPSBwOwogICAgIHN0cmNweShpbmZvLT5ub2RlLmRldl9uYW1lLCBwLT5uYW1lKTsKLSAgICBsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICByZXR1cm47Ci0gICAgCisgICAgcmV0dXJuIDA7CisKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgcGFycG9ydF9jc19yZWxlYXNlKGxpbmspOwotICAgIGxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0KKyAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogcGFycG9ydF9jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjgsNTMgKzI0NSwyMSBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXZvaWQgcGFycG9ydF9jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCit2b2lkIHBhcnBvcnRfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBwYXJwb3J0X2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0gICAgCi0gICAgREVCVUcoMCwgInBhcnBvcnRfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJcGFycG9ydF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0gICAgaWYgKGluZm8tPm5kZXYpIHsKLQlzdHJ1Y3QgcGFycG9ydCAqcCA9IGluZm8tPnBvcnQ7Ci0JcGFycG9ydF9wY191bnJlZ2lzdGVyX3BvcnQocCk7Ci0JcmVxdWVzdF9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEsCi0JCSAgICAgICBpbmZvLT5ub2RlLmRldl9uYW1lKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCSAgICByZXF1ZXN0X3JlZ2lvbihsaW5rLT5pby5CYXNlUG9ydDIsIGxpbmstPmlvLk51bVBvcnRzMiwKLQkJCSAgIGluZm8tPm5vZGUuZGV2X25hbWUpOwotICAgIH0KLSAgICBpbmZvLT5uZGV2ID0gMDsKLSAgICBsaW5rLT5kZXYgPSBOVUxMOwotICAgIAotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0gICAgCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJREVCVUcoMCwgInBhcnBvcnRfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKKwlpZiAoaW5mby0+bmRldikgeworCQlzdHJ1Y3QgcGFycG9ydCAqcCA9IGluZm8tPnBvcnQ7CisJCXBhcnBvcnRfcGNfdW5yZWdpc3Rlcl9wb3J0KHApOworCX0KKwlpbmZvLT5uZGV2ID0gMDsKKworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogcGFycG9ydF9jc19yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgcGFycG9ydF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFycG9ydF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKERFVl9PSyhsaW5rKSkKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCXJldHVybiAwOwotfQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgcGFycG9ydF9pZHNbXSA9IHsKIAlQQ01DSUFfREVWSUNFX0ZVTkNfSUQoMyksCkBAIC0zMjgsMTEgKzI3Myw5IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInBhcnBvcnRfY3MiLAogCX0sCi0JLnByb2JlCQk9IHBhcnBvcnRfYXR0YWNoLAorCS5wcm9iZQkJPSBwYXJwb3J0X3Byb2JlLAogCS5yZW1vdmUJCT0gcGFycG9ydF9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gcGFycG9ydF9pZHMsCi0JLnN1c3BlbmQJPSBwYXJwb3J0X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwYXJwb3J0X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGFycG9ydF9jcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggZDU4OTAwMi4uNDhiYmYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJaW50IGlvOwogCWludCBpcnE7CiAJaW50IGRtYTsKLX0gc3VwZXJpb3NbTlJfU1VQRVJJT1NdIF9fZGV2aW5pdGRhdGEgPSB7IHswLH0sfTsKK30gc3VwZXJpb3NbTlJfU1VQRVJJT1NdID0geyB7MCx9LH07CiAKIHN0YXRpYyBpbnQgdXNlcl9zcGVjaWZpZWQ7CiAjaWYgZGVmaW5lZChDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPKSB8fCBcCkBAIC0xNTU3LDcgKzE1NTcsNyBAQAogCXJldHVybiBQQVJQT1JUX0RNQV9OT05FOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfc3VwZXJpb19pcnEgKHN0cnVjdCBwYXJwb3J0ICpwKQorc3RhdGljIGludCBnZXRfc3VwZXJpb19pcnEgKHN0cnVjdCBwYXJwb3J0ICpwKQogewogCWludCBpPTA7CiAgICAgICAgIHdoaWxlKCAoc3VwZXJpb3NbaV0uaW8gIT0gcC0+YmFzZSkgJiYgKGk8TlJfU1VQRVJJT1MpKQpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc2hhbGwgYWx3YXlzIGJlIHRoZSBjYXNlISkKICAqCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfU1BQX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfU1BQX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJdW5zaWduZWQgY2hhciByLCB3OwogCkBAIC0xNjYwLDcgKzE2NjAsNyBAQAogICogdHdvIGJpdHMgb2YgRUNSIGFyZW4ndCB3cml0YWJsZSwgc28gd2UgY2hlY2sgYnkgd3JpdGluZyBFQ1IgYW5kCiAgKiByZWFkaW5nIGl0IGJhY2sgdG8gc2VlIGlmIGl0J3Mgd2hhdCB3ZSBleHBlY3QuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfRUNSX3ByZXNlbnQoc3RydWN0IHBhcnBvcnQgKnBiKQorc3RhdGljIGludCBwYXJwb3J0X0VDUl9wcmVzZW50KHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAlzdHJ1Y3QgcGFycG9ydF9wY19wcml2YXRlICpwcml2ID0gcGItPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBjaGFyIHIgPSAweGM7CkBAIC0xNzEyLDcgKzE3MTIsNyBAQAogICogYmUgbWlzZGV0ZWN0ZWQgaGVyZSBpcyByYXRoZXIgYWNhZGVtaWMuIAogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfUFMyX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfUFMyX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJaW50IG9rID0gMDsKICAgCkBAIC0xODY4LDcgKzE4NjgsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfRUNQUFMyX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCitzdGF0aWMgaW50IHBhcnBvcnRfRUNQUFMyX3N1cHBvcnRlZChzdHJ1Y3QgcGFycG9ydCAqcGIpCiB7CiAJY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHBiLT5wcml2YXRlX2RhdGE7CiAJaW50IHJlc3VsdDsKQEAgLTE4ODYsNyArMTg4Niw3IEBACiAKIC8qIEVQUCBtb2RlIGRldGVjdGlvbiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9FUFBfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9FUFBfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAljb25zdCBzdHJ1Y3QgcGFycG9ydF9wY19wcml2YXRlICpwcml2ID0gcGItPnByaXZhdGVfZGF0YTsKIApAQCAtMTkzMSw3ICsxOTMxLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9FQ1BFUFBfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9FQ1BFUFBfc3VwcG9ydGVkKHN0cnVjdCBwYXJwb3J0ICpwYikKIHsKIAlzdHJ1Y3QgcGFycG9ydF9wY19wcml2YXRlICpwcml2ID0gcGItPnByaXZhdGVfZGF0YTsKIAlpbnQgcmVzdWx0OwpAQCAtMjA3Myw3ICsyMDczLDcgQEAKICAqIFdoZW4gRUNQIGlzIGF2YWlsYWJsZSB3ZSBjYW4gYXV0b3Byb2JlIGZvciBJUlFzLgogICogTk9URTogSWYgd2UgY2FuIGF1dG9wcm9iZSBpdCwgd2UgY2FuIHJlZ2lzdGVyIHRoZSBJUlEuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfaXJxX3Byb2JlKHN0cnVjdCBwYXJwb3J0ICpwYikKK3N0YXRpYyBpbnQgcGFycG9ydF9pcnFfcHJvYmUoc3RydWN0IHBhcnBvcnQgKnBiKQogewogCXN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUgKnByaXYgPSBwYi0+cHJpdmF0ZV9kYXRhOwogCkBAIC0yNzc5LDcgKzI3NzksNyBAQAogCS8qIElmIHNldCwgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgcHJvYmluZyBmb3IgcG9ydHMuICBJZiAnZmFpbGVkJwogCSAqIGlzIG5vbi16ZXJvIHdlIGNvdWxkbid0IHVzZSBhbnkgb2YgdGhlIHBvcnRzLiAqLwogCXZvaWQgKCpwb3N0aW5pdF9ob29rKSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBmYWlsZWQpOwotfSBjYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Cit9IGNhcmRzW10gPSB7CiAJLyogc2lpZ18xcF8xMHggKi8JCXsgMSwgeyB7IDIsIDMgfSwgfSB9LAogCS8qIHNpaWdfMnBfMTB4ICovCQl7IDIsIHsgeyAyLCAzIH0sIHsgNCwgNSB9LCB9IH0sCiAJLyogc2lpZ18xcF8yMHggKi8JCXsgMSwgeyB7IDAsIDEgfSwgfSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYwppbmRleCBkMTIxNjQ0Li45OGI4M2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYwpAQCAtMTAwLDggKzEwMCw2IEBACiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOXh4NV9jb21ibyB9LAogCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOXh4NV9jb21ibyB9LAotCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzUsCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOXh4NV9jb21ibyB9LAogCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NDUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOXh4NV9jb21ibyB9LAogCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKaW5kZXggNmU3OWY1Ni4uNjM4MDA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwpAQCAtMzYwLDkgKzM2MCw2IEBACiAJd2hpbGUgKChkbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRuLCAicGNpIikpKQogCQlycGFwaHBfYWRkX3Nsb3QoZG4pOwogCi0JaWYgKCFudW1fc2xvdHMpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL21zaS5jIGIvZHJpdmVycy9wY2kvbXNpLmMKaW5kZXggYTc3ZTc5Yy4uOTg1NWM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvbXNpLmMKKysrIGIvZHJpdmVycy9wY2kvbXNpLmMKQEAgLTUwNCw2ICs1MDQsMjAxIEBACiAJCW5yX3Jlc2VydmVkX3ZlY3RvcnMrKzsKIH0KIAorI2lmZGVmIENPTkZJR19QTQoraW50IHBjaV9zYXZlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3MsIGkgPSAwOworCXUxNiBjb250cm9sOworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOworCXUzMiAqY2FwOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAocG9zIDw9IDAgfHwgZGV2LT5ub19tc2kpCisJCXJldHVybiAwOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOworCWlmICghKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSkpCisJCXJldHVybiAwOworCisJc2F2ZV9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlKSArIHNpemVvZih1MzIpICogNSwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlX3N0YXRlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiT3V0IG9mIG1lbW9yeSBpbiBwY2lfc2F2ZV9tc2lfc3RhdGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY2FwID0gJnNhdmVfc3RhdGUtPmRhdGFbMF07CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZjYXBbaSsrXSk7CisJY29udHJvbCA9IGNhcFswXSA+PiAxNjsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfTE8sICZjYXBbaSsrXSk7CisJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19ISSwgJmNhcFtpKytdKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9EQVRBXzY0LCAmY2FwW2krK10pOworCX0gZWxzZQorCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0RBVEFfMzIsICZjYXBbaSsrXSk7CisJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQpCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfTUFTS19CSVQsICZjYXBbaSsrXSk7CisJZGlzYWJsZV9tc2lfbW9kZShkZXYsIHBvcywgUENJX0NBUF9JRF9NU0kpOworCXNhdmVfc3RhdGUtPmNhcF9uciA9IFBDSV9DQVBfSURfTVNJOworCXBjaV9hZGRfc2F2ZWRfY2FwKGRldiwgc2F2ZV9zdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGNpX3Jlc3RvcmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IGkgPSAwLCBwb3M7CisJdTE2IGNvbnRyb2w7CisJc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7CisJdTMyICpjYXA7CisKKwlzYXZlX3N0YXRlID0gcGNpX2ZpbmRfc2F2ZWRfY2FwKGRldiwgUENJX0NBUF9JRF9NU0kpOworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJaWYgKCFzYXZlX3N0YXRlIHx8IHBvcyA8PSAwKQorCQlyZXR1cm47CisJY2FwID0gJnNhdmVfc3RhdGUtPmRhdGFbMF07CisKKwljb250cm9sID0gY2FwW2krK10gPj4gMTY7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTywgY2FwW2krK10pOworCWlmIChjb250cm9sICYgUENJX01TSV9GTEFHU182NEJJVCkgeworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0hJLCBjYXBbaSsrXSk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0RBVEFfNjQsIGNhcFtpKytdKTsKKwl9IGVsc2UKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfREFUQV8zMiwgY2FwW2krK10pOworCWlmIChjb250cm9sICYgUENJX01TSV9GTEFHU19NQVNLQklUKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9NQVNLX0JJVCwgY2FwW2krK10pOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9NU0lfRkxBR1MsIGNvbnRyb2wpOworCWVuYWJsZV9tc2lfbW9kZShkZXYsIHBvcywgUENJX0NBUF9JRF9NU0kpOworCXBjaV9yZW1vdmVfc2F2ZWRfY2FwKHNhdmVfc3RhdGUpOworCWtmcmVlKHNhdmVfc3RhdGUpOworfQorCitpbnQgcGNpX3NhdmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3M7CisJdTE2IGNvbnRyb2w7CisJc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKTsKKwlpZiAocG9zIDw9IDAgfHwgZGV2LT5ub19tc2kpCisJCXJldHVybiAwOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOworCWlmICghKGNvbnRyb2wgJiBQQ0lfTVNJWF9GTEFHU19FTkFCTEUpKQorCQlyZXR1cm4gMDsKKwlzYXZlX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUpICsgc2l6ZW9mKHUxNiksCisJCUdGUF9LRVJORUwpOworCWlmICghc2F2ZV9zdGF0ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIk91dCBvZiBtZW1vcnkgaW4gcGNpX3NhdmVfbXNpeF9zdGF0ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkqKCh1MTYgKikmc2F2ZV9zdGF0ZS0+ZGF0YVswXSkgPSBjb250cm9sOworCisJZGlzYWJsZV9tc2lfbW9kZShkZXYsIHBvcywgUENJX0NBUF9JRF9NU0lYKTsKKwlzYXZlX3N0YXRlLT5jYXBfbnIgPSBQQ0lfQ0FQX0lEX01TSVg7CisJcGNpX2FkZF9zYXZlZF9jYXAoZGV2LCBzYXZlX3N0YXRlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwY2lfcmVzdG9yZV9tc2l4X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTE2IHNhdmU7CisJaW50IHBvczsKKwlpbnQgdmVjdG9yLCBoZWFkLCB0YWlsID0gMDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IGo7CisJc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7CisJc3RydWN0IG1zZ19kYXRhIGRhdGE7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlpbnQgdGVtcDsKKwlzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTsKKworCXNhdmVfc3RhdGUgPSBwY2lfZmluZF9zYXZlZF9jYXAoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmICghc2F2ZV9zdGF0ZSkKKwkJcmV0dXJuOworCXNhdmUgPSAqKCh1MTYgKikmc2F2ZV9zdGF0ZS0+ZGF0YVswXSk7CisJcGNpX3JlbW92ZV9zYXZlZF9jYXAoc2F2ZV9zdGF0ZSk7CisJa2ZyZWUoc2F2ZV9zdGF0ZSk7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKTsKKwlpZiAocG9zIDw9IDApCisJCXJldHVybjsKKworCS8qIHJvdXRlIHRoZSB0YWJsZSAqLworCXRlbXAgPSBkZXYtPmlycTsKKwlpZiAobXNpX2xvb2t1cF92ZWN0b3IoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpKQorCQlyZXR1cm47CisJdmVjdG9yID0gaGVhZCA9IGRldi0+aXJxOworCXdoaWxlIChoZWFkICE9IHRhaWwpIHsKKwkJZW50cnkgPSBtc2lfZGVzY1t2ZWN0b3JdOworCQliYXNlID0gZW50cnktPm1hc2tfYmFzZTsKKwkJaiA9IGVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yOworCisJCW1zaV9hZGRyZXNzX2luaXQoJmFkZHJlc3MpOworCQltc2lfZGF0YV9pbml0KCZkYXRhLCB2ZWN0b3IpOworCisJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSAmPSBNU0lfQUREUkVTU19ERVNUX0lEX01BU0s7CisJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSB8PSBlbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA8PAorCQkJCQlNU0lfVEFSR0VUX0NQVV9TSElGVDsKKworCQl3cml0ZWwoYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlLAorCQkJYmFzZSArIGogKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKKwkJCVBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKKwkJd3JpdGVsKGFkZHJlc3MuaGlfYWRkcmVzcywKKwkJCWJhc2UgKyBqICogUENJX01TSVhfRU5UUllfU0laRSArCisJCQlQQ0lfTVNJWF9FTlRSWV9VUFBFUl9BRERSX09GRlNFVCk7CisJCXdyaXRlbCgqKHUzMiopJmRhdGEsCisJCQliYXNlICsgaiAqIFBDSV9NU0lYX0VOVFJZX1NJWkUgKworCQkJUENJX01TSVhfRU5UUllfREFUQV9PRkZTRVQpOworCisJCXRhaWwgPSBtc2lfZGVzY1t2ZWN0b3JdLT5saW5rLnRhaWw7CisJCXZlY3RvciA9IHRhaWw7CisJfQorCWRldi0+aXJxID0gdGVtcDsKKworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCBzYXZlKTsKKwllbmFibGVfbXNpX21vZGUoZGV2LCBwb3MsIFBDSV9DQVBfSURfTVNJWCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbXNpX3JlZ2lzdGVyX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICplbnRyeSkKK3sKKwlzdHJ1Y3QgbXNnX2FkZHJlc3MgYWRkcmVzczsKKwlzdHJ1Y3QgbXNnX2RhdGEgZGF0YTsKKwlpbnQgcG9zLCB2ZWN0b3IgPSBkZXYtPmlycTsKKwl1MTYgY29udHJvbDsKKworICAgCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOworCS8qIENvbmZpZ3VyZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KKwltc2lfYWRkcmVzc19pbml0KCZhZGRyZXNzKTsKKwltc2lfZGF0YV9pbml0KCZkYXRhLCB2ZWN0b3IpOworCWVudHJ5LT5tc2lfYXR0cmliLmN1cnJlbnRfY3B1ID0gKChhZGRyZXNzLmxvX2FkZHJlc3MudS5kZXN0X2lkID4+CisJCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQpICYgTVNJX1RBUkdFVF9DUFVfTUFTSyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLAorCQkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlKTsKKwlpZiAoaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSkgeworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwKKwkJCW1zaV91cHBlcl9hZGRyZXNzX3JlZyhwb3MpLCBhZGRyZXNzLmhpX2FkZHJlc3MpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LAorCQkJbXNpX2RhdGFfcmVnKHBvcywgMSksICooKHUzMiopJmRhdGEpKTsKKwl9IGVsc2UKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwKKwkJCW1zaV9kYXRhX3JlZyhwb3MsIDApLCAqKCh1MzIqKSZkYXRhKSk7CisJaWYgKGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQpIHsKKwkJdW5zaWduZWQgaW50IG1hc2tiaXRzLCB0ZW1wOworCQkvKiBBbGwgTVNJcyBhcmUgdW5tYXNrZWQgYnkgZGVmYXVsdCwgTWFzayB0aGVtIGFsbCAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LAorCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSwKKwkJCSZtYXNrYml0cyk7CisJCXRlbXAgPSAoMSA8PCBtdWx0aV9tc2lfY2FwYWJsZShjb250cm9sKSk7CisJCXRlbXAgPSAoKHRlbXAgLSAxKSAmIH50ZW1wKTsKKwkJbWFza2JpdHMgfD0gdGVtcDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsCisJCQltc2lfbWFza19iaXRzX3JlZyhwb3MsIGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpLAorCQkJbWFza2JpdHMpOworCX0KK30KKwogLyoqCiAgKiBtc2lfY2FwYWJpbGl0eV9pbml0IC0gY29uZmlndXJlIGRldmljZSdzIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZQogICogQGRldjogcG9pbnRlciB0byB0aGUgcGNpX2RldiBkYXRhIHN0cnVjdHVyZSBvZiBNU0kgZGV2aWNlIGZ1bmN0aW9uCkBAIC01MTYsOCArNzExLDYgQEAKIHN0YXRpYyBpbnQgbXNpX2NhcGFiaWxpdHlfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7Ci0Jc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7Ci0Jc3RydWN0IG1zZ19kYXRhIGRhdGE7CiAJaW50IHBvcywgdmVjdG9yOwogCXUxNiBjb250cm9sOwogCkBAIC01NDksMzMgKzc0Miw4IEBACiAJLyogUmVwbGFjZSB3aXRoIE1TSSBoYW5kbGVyICovCiAJaXJxX2hhbmRsZXJfaW5pdChQQ0lfQ0FQX0lEX01TSSwgdmVjdG9yLCBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KTsKIAkvKiBDb25maWd1cmUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCi0JbXNpX2FkZHJlc3NfaW5pdCgmYWRkcmVzcyk7Ci0JbXNpX2RhdGFfaW5pdCgmZGF0YSwgdmVjdG9yKTsKLQllbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA9ICgoYWRkcmVzcy5sb19hZGRyZXNzLnUuZGVzdF9pZCA+PgotCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKSAmIE1TSV9UQVJHRVRfQ1BVX01BU0spOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKLQkJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSk7Ci0JaWYgKGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsCi0JCQltc2lfdXBwZXJfYWRkcmVzc19yZWcocG9zKSwgYWRkcmVzcy5oaV9hZGRyZXNzKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwKLQkJCW1zaV9kYXRhX3JlZyhwb3MsIDEpLCAqKCh1MzIqKSZkYXRhKSk7Ci0JfSBlbHNlCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsCi0JCQltc2lfZGF0YV9yZWcocG9zLCAwKSwgKigodTMyKikmZGF0YSkpOwotCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7Ci0JCXVuc2lnbmVkIGludCBtYXNrYml0cywgdGVtcDsKLQkJLyogQWxsIE1TSXMgYXJlIHVubWFza2VkIGJ5IGRlZmF1bHQsIE1hc2sgdGhlbSBhbGwgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwKLQkJCW1zaV9tYXNrX2JpdHNfcmVnKHBvcywgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSksCi0JCQkmbWFza2JpdHMpOwotCQl0ZW1wID0gKDEgPDwgbXVsdGlfbXNpX2NhcGFibGUoY29udHJvbCkpOwotCQl0ZW1wID0gKCh0ZW1wIC0gMSkgJiB+dGVtcCk7Ci0JCW1hc2tiaXRzIHw9IHRlbXA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSwKLQkJCW1hc2tiaXRzKTsKLQl9CisJbXNpX3JlZ2lzdGVyX2luaXQoZGV2LCBlbnRyeSk7CisKIAlhdHRhY2hfbXNpX2VudHJ5KGVudHJ5LCB2ZWN0b3IpOwogCS8qIFNldCBNU0kgZW5hYmxlZCBiaXRzCSAqLwogCWVuYWJsZV9tc2lfbW9kZShkZXYsIHBvcywgUENJX0NBUF9JRF9NU0kpOwpAQCAtNjI1LDggKzc5MywxMCBAQAogCQlpZiAoIWVudHJ5KQogCQkJYnJlYWs7CiAJCXZlY3RvciA9IGdldF9tc2lfdmVjdG9yKGRldik7Ci0JCWlmICh2ZWN0b3IgPCAwKQorCQlpZiAodmVjdG9yIDwgMCkgeworCQkJa21lbV9jYWNoZV9mcmVlKG1zaV9jYWNoZXAsIGVudHJ5KTsKIAkJCWJyZWFrOworCQl9CiAKICAJCWogPSBlbnRyaWVzW2ldLmVudHJ5OwogIAkJZW50cmllc1tpXS52ZWN0b3IgPSB2ZWN0b3I7CkBAIC03MzEsNiArOTAxLDcgQEAKIAkJCXZlY3Rvcl9pcnFbZGV2LT5pcnFdID0gLTE7CiAJCQlucl9yZWxlYXNlZF92ZWN0b3JzLS07CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc2lfbG9jaywgZmxhZ3MpOworCQkJbXNpX3JlZ2lzdGVyX2luaXQoZGV2LCBtc2lfZGVzY1tkZXYtPmlycV0pOwogCQkJZW5hYmxlX21zaV9tb2RlKGRldiwgcG9zLCBQQ0lfQ0FQX0lEX01TSSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWFjcGkuYyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKaW5kZXggNjkxN2M2Yy4uYzJlY2FlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWFjcGkuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCkBAIC0zMywxMyArMzMsMTAgQEAKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0CWlucHV0OwogCXVuaW9uIGFjcGlfb2JqZWN0IAlpbl9wYXJhbXNbNF07Ci0Jc3RydWN0IGFjcGlfYnVmZmVyCW91dHB1dDsKLQl1bmlvbiBhY3BpX29iamVjdCAJb3V0X29iajsJCisJc3RydWN0IGFjcGlfYnVmZmVyCW91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJdW5pb24gYWNwaV9vYmplY3QgCSpvdXRfb2JqOwogCXUzMgkJCW9zY19kdzA7CiAKLQkvKiBTZXR0aW5nIHVwIG91dHB1dCBidWZmZXIgKi8KLQlvdXRwdXQubGVuZ3RoID0gc2l6ZW9mKG91dF9vYmopICsgMypzaXplb2YodTMyKTsgIAotCW91dHB1dC5wb2ludGVyID0gJm91dF9vYmo7CiAJCiAJLyogU2V0dGluZyB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCiAJaW5wdXQuY291bnQgPSA0OwpAQCAtNjEsMTIgKzU4LDE1IEBACiAJCQkiRXZhbHVhdGUgX09TQyBTZXQgZmFpbHMuIFN0YXR1cyA9IDB4JTA0eFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9Ci0JaWYgKG91dF9vYmoudHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOworCisJaWYgKG91dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewogCQlwcmludGsoS0VSTl9ERUJVRyAgCiAJCQkiRXZhbHVhdGUgX09TQyByZXR1cm5zIHdyb25nIHR5cGVcbiIpOwotCQlyZXR1cm4gQUVfVFlQRTsKKwkJc3RhdHVzID0gQUVfVFlQRTsKKwkJZ290byBxdWVyeV9vc2Nfb3V0OwogCX0KLQlvc2NfZHcwID0gKigodTMyICopIG91dF9vYmouYnVmZmVyLnBvaW50ZXIpOworCW9zY19kdzAgPSAqKCh1MzIgKikgb3V0X29iai0+YnVmZmVyLnBvaW50ZXIpOwogCWlmIChvc2NfZHcwKSB7CiAJCWlmIChvc2NfZHcwICYgT1NDX1JFUVVFU1RfRVJST1IpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyByZXF1ZXN0IGZhaWxzXG4iKTsgCkBAIC03NiwxNSArNzYsMjEgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIGludmFsaWQgcmV2aXNpb25cbiIpOyAKIAkJaWYgKG9zY19kdzAgJiBPU0NfQ0FQQUJJTElUSUVTX01BU0tfRVJST1IpIHsKIAkJCS8qIFVwZGF0ZSBHbG9iYWwgQ29udHJvbCBTZXQgKi8KLQkJCWdsb2JhbF9jdHJsc2V0cyA9ICooKHUzMiAqKShvdXRfb2JqLmJ1ZmZlci5wb2ludGVyKzgpKTsKLQkJCXJldHVybiBBRV9PSzsKKwkJCWdsb2JhbF9jdHJsc2V0cyA9ICooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlcis4KSk7CisJCQlzdGF0dXMgPSBBRV9PSzsKKwkJCWdvdG8gcXVlcnlfb3NjX291dDsKIAkJfQotCQlyZXR1cm4gQUVfRVJST1I7CisJCXN0YXR1cyA9IEFFX0VSUk9SOworCQlnb3RvIHF1ZXJ5X29zY19vdXQ7CiAJfQogCiAJLyogVXBkYXRlIEdsb2JhbCBDb250cm9sIFNldCAqLwotCWdsb2JhbF9jdHJsc2V0cyA9ICooKHUzMiAqKShvdXRfb2JqLmJ1ZmZlci5wb2ludGVyICsgOCkpOwotCXJldHVybiBBRV9PSzsKKwlnbG9iYWxfY3RybHNldHMgPSAqKCh1MzIgKikob3V0X29iai0+YnVmZmVyLnBvaW50ZXIgKyA4KSk7CisJc3RhdHVzID0gQUVfT0s7CisKK3F1ZXJ5X29zY19vdXQ6CisJa2ZyZWUob3V0cHV0LnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIApAQCAtOTYsMTQgKzEwMiwxMCBAQAogCWFjcGlfc3RhdHVzCQlzdGF0dXM7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QJaW5wdXQ7CiAJdW5pb24gYWNwaV9vYmplY3QgCWluX3BhcmFtc1s0XTsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIJb3V0cHV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IAlvdXRfb2JqOwkKKwlzdHJ1Y3QgYWNwaV9idWZmZXIJb3V0cHV0ID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwl1bmlvbiBhY3BpX29iamVjdCAJKm91dF9vYmo7CiAJdTMyCQkJb3NjX2R3MDsKIAotCS8qIFNldHRpbmcgdXAgb3V0cHV0IGJ1ZmZlciAqLwotCW91dHB1dC5sZW5ndGggPSBzaXplb2Yob3V0X29iaikgKyAzKnNpemVvZih1MzIpOyAgCi0Jb3V0cHV0LnBvaW50ZXIgPSAmb3V0X29iajsKLQkKIAkvKiBTZXR0aW5nIHVwIGlucHV0IHBhcmFtZXRlcnMgKi8KIAlpbnB1dC5jb3VudCA9IDQ7CiAJaW5wdXQucG9pbnRlciA9IGluX3BhcmFtczsKQEAgLTEyNCwxMiArMTI2LDE0IEBACiAJCQkiRXZhbHVhdGUgX09TQyBTZXQgZmFpbHMuIFN0YXR1cyA9IDB4JTA0eFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9Ci0JaWYgKG91dF9vYmoudHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOworCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIAogCQkJIkV2YWx1YXRlIF9PU0MgcmV0dXJucyB3cm9uZyB0eXBlXG4iKTsKLQkJcmV0dXJuIEFFX1RZUEU7CisJCXN0YXR1cyA9IEFFX1RZUEU7CisJCWdvdG8gcnVuX29zY19vdXQ7CiAJfQotCW9zY19kdzAgPSAqKCh1MzIgKikgb3V0X29iai5idWZmZXIucG9pbnRlcik7CisJb3NjX2R3MCA9ICooKHUzMiAqKSBvdXRfb2JqLT5idWZmZXIucG9pbnRlcik7CiAJaWYgKG9zY19kdzApIHsKIAkJaWYgKG9zY19kdzAgJiBPU0NfUkVRVUVTVF9FUlJPUikKIAkJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIHJlcXVlc3QgZmFpbHNcbiIpOyAKQEAgLTEzOSwxMSArMTQzLDE3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIHJldmlzaW9uXG4iKTsgCiAJCWlmIChvc2NfZHcwICYgT1NDX0NBUEFCSUxJVElFU19NQVNLX0VSUk9SKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBGVyBub3QgZ3JhbnQgcmVxLiBjb250cm9sXG4iKTsKLQkJCXJldHVybiBBRV9TVVBQT1JUOworCQkJc3RhdHVzID0gQUVfU1VQUE9SVDsKKwkJCWdvdG8gcnVuX29zY19vdXQ7CiAJCX0KLQkJcmV0dXJuIEFFX0VSUk9SOworCQlzdGF0dXMgPSBBRV9FUlJPUjsKKwkJZ290byBydW5fb3NjX291dDsKIAl9Ci0JcmV0dXJuIEFFX09LOworCXN0YXR1cyA9IEFFX09LOworCitydW5fb3NjX291dDoKKwlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZjIyZjY5YS4uMTBlMWE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMjcxLDEwICsyNzEsMTIgQEAKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqIGRydiA9IHBjaV9kZXYtPmRyaXZlcjsKIAlpbnQgaSA9IDA7CiAKLQlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkKKwlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkgewogCQlpID0gZHJ2LT5zdXNwZW5kKHBjaV9kZXYsIHN0YXRlKTsKLQllbHNlCisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnN1c3BlbmQsIGkpOworCX0gZWxzZSB7CiAJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOworCX0KIAlyZXR1cm4gaTsKIH0KIApAQCAtMjgzLDkgKzI4NSw5IEBACiAgKiBEZWZhdWx0IHJlc3VtZSBtZXRob2QgZm9yIGRldmljZXMgdGhhdCBoYXZlIG5vIGRyaXZlciBwcm92aWRlZCByZXN1bWUsCiAgKiBvciBub3QgZXZlbiBhIGRyaXZlciBhdCBhbGwuCiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9kZWZhdWx0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3N0YXRpYyBpbnQgcGNpX2RlZmF1bHRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAKIAkvKiByZXN0b3JlIHRoZSBQQ0kgY29uZmlnIHNwYWNlICovCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7CkBAIC0yOTUsMTggKzI5NywyMSBAQAogCS8qIGlmIHRoZSBkZXZpY2Ugd2FzIGJ1c21hc3RlciBiZWZvcmUgdGhlIHN1c3BlbmQsIG1ha2UgaXQgYnVzbWFzdGVyIGFnYWluICovCiAJaWYgKHBjaV9kZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IHBjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYpCiB7CisJaW50IGVycm9yOwogCXN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqIGRydiA9IHBjaV9kZXYtPmRyaXZlcjsKIAogCWlmIChkcnYgJiYgZHJ2LT5yZXN1bWUpCi0JCWRydi0+cmVzdW1lKHBjaV9kZXYpOworCQllcnJvciA9IGRydi0+cmVzdW1lKHBjaV9kZXYpOwogCWVsc2UKLQkJcGNpX2RlZmF1bHRfcmVzdW1lKHBjaV9kZXYpOwotCXJldHVybiAwOworCQllcnJvciA9IHBjaV9kZWZhdWx0X3Jlc3VtZShwY2lfZGV2KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBiZWExYWQxLi4xMjI4NjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMzA3LDkgKzMwNywxMSBAQAogCSAqIENhbiBlbnRlciBEMCBmcm9tIGFueSBzdGF0ZSwgYnV0IGlmIHdlIGNhbiBvbmx5IGdvIGRlZXBlciAKIAkgKiB0byBzbGVlcCBpZiB3ZSdyZSBhbHJlYWR5IGluIGEgbG93IHBvd2VyIHN0YXRlCiAJICovCi0JaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPiBzdGF0ZSkKKwlpZiAoc3RhdGUgIT0gUENJX0QwICYmIGRldi0+Y3VycmVudF9zdGF0ZSA+IHN0YXRlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogJXM6IHN0YXRlPSVkLCBjdXJyZW50IHN0YXRlPSVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBwY2lfbmFtZShkZXYpLCBzdGF0ZSwgZGV2LT5jdXJyZW50X3N0YXRlKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSBpZiAoZGV2LT5jdXJyZW50X3N0YXRlID09IHN0YXRlKSAKKwl9IGVsc2UgaWYgKGRldi0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkKIAkJcmV0dXJuIDA7ICAgICAgICAvKiB3ZSdyZSBhbHJlYWR5IHRoZXJlICovCiAKIAkvKiBmaW5kIFBDSSBQTSBjYXBhYmlsaXR5IGluIGxpc3QgKi8KQEAgLTQ0NCw2ICs0NDYsMTAgQEAKIAkvKiBYWFg6IDEwMCUgZHdvcmQgYWNjZXNzIG9rIGhlcmU/ICovCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGkgKiA0LCZkZXYtPnNhdmVkX2NvbmZpZ19zcGFjZVtpXSk7CisJaWYgKChpID0gcGNpX3NhdmVfbXNpX3N0YXRlKGRldikpICE9IDApCisJCXJldHVybiBpOworCWlmICgoaSA9IHBjaV9zYXZlX21zaXhfc3RhdGUoZGV2KSkgIT0gMCkKKwkJcmV0dXJuIGk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1NSw5ICs0NjEsMjUgQEAKIHBjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IGk7CisJaW50IHZhbDsKIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldixpICogNCwgZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCS8qCisJICogVGhlIEJhc2UgQWRkcmVzcyByZWdpc3RlciBzaG91bGQgYmUgcHJvZ3JhbW1lZCBiZWZvcmUgdGhlIGNvbW1hbmQKKwkgKiByZWdpc3RlcihzKQorCSAqLworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBpICogNCwgJnZhbCk7CisJCWlmICh2YWwgIT0gZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQTTogV3JpdGluZyBiYWNrIGNvbmZpZyBzcGFjZSBvbiAiCisJCQkJImRldmljZSAlcyBhdCBvZmZzZXQgJXggKHdhcyAleCwgd3JpdGluZyAleClcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgaSwKKwkJCQl2YWwsIChpbnQpZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsaSAqIDQsCisJCQkJZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCQl9CisJfQorCXBjaV9yZXN0b3JlX21zaV9zdGF0ZShkZXYpOworCXBjaV9yZXN0b3JlX21zaXhfc3RhdGUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCA4ZjNmYjQ3Li4zMDYzMGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtNTUsNiArNTUsMTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX21zaV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCB0eXBlKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbm9fbXNpKHZvaWQpIHsgfQogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUENJX01TSSkgJiYgZGVmaW5lZChDT05GSUdfUE0pCitpbnQgcGNpX3NhdmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IHBjaV9zYXZlX21zaXhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7Cit2b2lkIHBjaV9yZXN0b3JlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3ZvaWQgcGNpX3Jlc3RvcmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwY2lfc2F2ZV9tc2lfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX3NhdmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc3RvcmVfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc3RvcmVfbXNpeF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorI2VuZGlmCiAKIGV4dGVybiBpbnQgcGNpZV9tY2hfcXVpcms7CiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcGNpX2Rldl9hdHRyc1tdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA0OTcwZjQ3Li5kMzc4NDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNTkyLDcgKzU5Miw3IEBACiAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKCBkZXYsIEFNRDgxMzFfTUlTQywgdG1wKTsKICAgICAgICAgfQogfSAKLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMsICAgICAgICAgcXVpcmtfYW1kXzgxMzFfaW9hcGljICk7IAorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFLCBxdWlya19hbWRfODEzMV9pb2FwaWMpOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfc3Z3X21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtNjM0LDYgKzYzNCw5IEBACiAgKiBub24teDg2IGFyY2hpdGVjdHVyZXMgKHllcyBWaWEgZXhpc3RzIG9uIFBQQyBhbW9uZyBvdGhlciBwbGFjZXMpLAogICogd2UgbXVzdCBtYXNrIHRoZSBQQ0lfSU5URVJSVVBUX0xJTkUgdmFsdWUgdmVyc3VzIDB4ZiB0byBnZXQKICAqIGludGVycnVwdHMgZGVsaXZlcmVkIHByb3Blcmx5LgorICoKKyAqIFNvbWUgb2YgdGhlIG9uLWNoaXAgZGV2aWNlcyBhcmUgYWN0dWFsbHkgJzU4NiBkZXZpY2VzJyBzbyB0aGV5IGFyZQorICogbGlzdGVkIGhlcmUuCiAgKi8KIHN0YXRpYyB2b2lkIHF1aXJrX3ZpYV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTY0MiwxMyArNjQ1LDE5IEBACiAJbmV3X2lycSA9IGRldi0+aXJxICYgMHhmOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaXJxKTsKIAlpZiAobmV3X2lycSAhPSBpcnEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWaWEgSVJRIGZpeHVwIGZvciAlcywgZnJvbSAlZCB0byAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWSUEgSVJRIGZpeHVwIGZvciAlcywgZnJvbSAlZCB0byAlZFxuIiwKIAkJCXBjaV9uYW1lKGRldiksIGlycSwgbmV3X2lycSk7CiAJCXVkZWxheSgxNSk7CS8qIHVua25vd24gaWYgZGVsYXkgcmVhbGx5IG5lZWRlZCAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIG5ld19pcnEpOwogCX0KIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0FOWV9JRCwgcXVpcmtfdmlhX2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8wLCBxdWlya192aWFfaXJxKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEsIHF1aXJrX3ZpYV9pcnEpOworREVDTEFSRV9QQ0lfRklYVVBfRU5BQkxFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMiwgcXVpcmtfdmlhX2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8zLCBxdWlya192aWFfaXJxKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2LCBxdWlya192aWFfaXJxKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzQsIHF1aXJrX3ZpYV9pcnEpOworREVDTEFSRV9QQ0lfRklYVVBfRU5BQkxFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNSwgcXVpcmtfdmlhX2lycSk7CiAKIC8qCiAgKiBWSUEgVlQ4MkM1OTggaGFzIGl0cyBkZXZpY2UgSUQgc2V0dGFibGUgYW5kIG1hbnkgQklPU2VzCkBAIC04NjUsNiArODc0LDM2IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjM3NSwJcXVpcmtfZWlzYV9icmlkZ2UgKTsKIAogLyoKKyAqIE9uIHRoZSBNU0ktSzhULU5lbzJGaXIgQm9hcmQsIHRoZSBpbnRlcm5hbCBTb3VuZGNhcmQgaXMgZGlzYWJsZWQKKyAqIHdoZW4gYSBQQ0ktU291bmRjYXJkIGlzIGFkZGVkLiBUaGUgQklPUyBvbmx5IGdpdmVzIE9wdGlvbnMKKyAqICJEaXNhYmxlZCIgYW5kICJBVVRPIi4gVGhpcyBRdWlyayBTZXRzIHRoZSBjb3JyZXNwb25kaW5nCisgKiBSZWdpc3Rlci1WYWx1ZSB0byBlbmFibGUgdGhlIFNvdW5kY2FyZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGs4dF9zb3VuZF9ob3N0YnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgY2hhciB2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFF1aXJrLU1TSS1LOFQgU291bmRjYXJkIE9uXG4iKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZ2YWwpOworCWlmICh2YWwgPT0gMHg4OCB8fCB2YWwgPT0gMHhjOCkgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCB2YWwgJiAofjB4NDApKTsKKworCQkvKiBWZXJpZnkgdGhlIENoYW5nZSBmb3IgU3RhdHVzIG91dHB1dCAqLworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZ2YWwpOworCQlpZiAodmFsICYgMHg0MCkKKwkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogTVNJLUs4VCBzb3VuZGNhcmQgc3RpbGwgb2ZmXG4iKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBNU0ktSzhUIHNvdW5kY2FyZCBvblxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVbmV4cGVjdGVkIFZhbHVlIGluIFBDSS1SZWdpc3RlcjogIgorCQkJCQkibm8gQ2hhbmdlIVxuIik7CisJfQorCit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyMzcsIGs4dF9zb3VuZF9ob3N0YnJpZGdlKTsKKworI2lmbmRlZiBDT05GSUdfQUNQSV9TTEVFUAorLyoKICAqIE9uIEFTVVMgUDRCIGJvYXJkcywgdGhlIFNNQnVzIFBDSSBEZXZpY2Ugd2l0aGluIHRoZSBJQ0gyLzQgc291dGhicmlkZ2UKICAqIGlzIG5vdCBhY3RpdmF0ZWQuIFRoZSBteXRoIGlzIHRoYXQgQXN1cyBzYWlkIHRoYXQgdGhleSBkbyBub3Qgd2FudCB0aGUKICAqIHVzZXJzIHRvIGJlIGlycml0YXRlZCBieSBqdXN0IGFub3RoZXIgUENJIERldmljZSBpbiB0aGUgV2luOTggZGV2aWNlCkBAIC04NzUsOCArOTE0LDEyIEBACiAgKiBicmlkZ2UuIFVuZm9ydHVuYXRlbHksIHRoaXMgZGV2aWNlIGhhcyBubyBzdWJ2ZW5kb3Ivc3ViZGV2aWNlIElELiBTbyBpdCAKICAqIGJlY29tZXMgbmVjZXNzYXJ5IHRvIGRvIHRoaXMgdHdlYWsgaW4gdHdvIHN0ZXBzIC0tIEkndmUgY2hvc2VuIHRoZSBIb3N0CiAgKiBicmlkZ2UgYXMgdHJpZ2dlci4KKyAqCisgKiBBY3R1YWxseSwgbGVhdmluZyBpdCB1bmhpZGRlbiBhbmQgbm90IHJlZG9pbmcgdGhlIHF1aXJrIG92ZXIgc3VzcGVuZDJyYW0KKyAqIHdpbGwgY2F1c2UgdGhlcm1hbCBtYW5hZ2VtZW50IHRvIGJyZWFrIGRvd24sIGFuZCBjYXVzaW5nIG1hY2hpbmUgdG8KKyAqIG92ZXJoZWF0LgogICovCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgYXN1c19oaWRlc19zbWJ1cyA9IDA7CitzdGF0aWMgaW50IF9faW5pdGRhdGEgYXN1c19oaWRlc19zbWJ1czsKIAogc3RhdGljIHZvaWQgX19pbml0IGFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtOTIxLDYgKzk2NCw3IEBACiAJCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSEIpIHsKIAkJCXN3aXRjaCAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CiAJCQljYXNlIDB4MTg4MjogLyogTTZWIG5vdGVib29rICovCisJCQljYXNlIDB4MTk3NzogLyogQTZWQSBub3RlYm9vayAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQogCQl9CkBAIC05OTksNiArMTA0Myw3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyLAlhc3VzX2hpZGVzX3NtYnVzX2xwYyApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMCwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIAogc3RhdGljIHZvaWQgX19pbml0IGFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTEwMTcsNiArMTA2Miw4IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsCWFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYgKTsKIAorI2VuZGlmCisKIC8qCiAgKiBTaVMgOTZ4IHNvdXRoIGJyaWRnZTogQklPUyB0eXBpY2FsbHkgaGlkZXMgU01CdXMgZGV2aWNlLi4uCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IDFmNGFkMGUuLjYxY2I0YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIGNvbmZpZyBQQ01DSUFfVlJDNDE3MQogCXRyaXN0YXRlICJORUMgVlJDNDE3MSBDYXJkIENvbnRyb2xsZXJzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWUkM0MTcxICYmIFBDTUNJQQorCWRlcGVuZHMgb24gQ1BVX1ZSNDFYWCAmJiBJU0EgJiYgUENNQ0lBCiAKIGNvbmZpZyBQQ01DSUFfVlJDNDE3MwogCXRyaXN0YXRlICJORUMgVlJDNDE3MyBDQVJEVSBzdXBwb3J0IgpAQCAtMjYzLDYgKzI2MywxMyBAQAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb21wYWN0Rmxhc2ggY29udHJvbGxlciBvbiBPTUFQLgogCSAgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBzdXBwb3J0ICJUcnVlIElERSIgbW9kZS4KIAorY29uZmlnIEFUOTFfQ0YKKwl0cmlzdGF0ZSAiQVQ5MSBDb21wYWN0Rmxhc2ggQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFBDTUNJQSAmJiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIENvbXBhY3RGbGFzaCBjb250cm9sbGVyIG9uIEFUOTEgY2hpcHMuCisJICBPciBjaG9vc2UgTSB0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgbmFtZWQgImF0OTFfY2YiLgorCiBjb25maWcgUENDQVJEX05PTlNUQVRJQwogCXRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggYmNlY2Y1MS4uNDI3Njk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIHBjbWNpYV9jb3JlLSQoQ09ORklHX0NBUkRCVVMpCQkJKz0gY2FyZGJ1cy5vCiBvYmotJChDT05GSUdfUENDQVJEKQkJCQkrPSBwY21jaWFfY29yZS5vCiAKLXBjbWNpYS15CQkJCQkrPSBkcy5vIHBjbWNpYV9jb21wYXQubyBwY21jaWFfcmVzb3VyY2UubworcGNtY2lhLXkJCQkJCSs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8KIHBjbWNpYS0kKENPTkZJR19QQ01DSUFfSU9DVEwpCQkJKz0gcGNtY2lhX2lvY3RsLm8KIG9iai0kKENPTkZJR19QQ01DSUEpCQkJCSs9IHBjbWNpYS5vCiAKQEAgLTM2LDYgKzM2LDcgQEAKIG9iai0kKENPTkZJR19QQ01DSUFfVlJDNDE3MSkJCQkrPSB2cmM0MTcxX2NhcmQubwogb2JqLSQoQ09ORklHX1BDTUNJQV9WUkM0MTczKQkJCSs9IHZyYzQxNzNfY2FyZHUubwogb2JqLSQoQ09ORklHX09NQVBfQ0YpCQkJCSs9IG9tYXBfY2Yubworb2JqLSQoQ09ORklHX0FUOTFfQ0YpCQkJCSs9IGF0OTFfY2YubwogCiBzYTExeHhfY29yZS15CQkJCQkrPSBzb2NfY29tbW9uLm8gc2ExMXh4X2Jhc2UubwogcHhhMnh4X2NvcmUteQkJCQkJKz0gc29jX2NvbW1vbi5vIHB4YTJ4eF9iYXNlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQ1MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICogYXQ5MV9jZi5jIC0tIEFUOTEgQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKworLyoKKyAqIEEwLi5BMTAgd29yayBpbiBlYWNoIHJhbmdlOyBBMjMgaW5kaWNhdGVzIEkvTyBzcGFjZTsgIEEyNSBpcyBDRlJOVzsKKyAqIHNvbWUgb3RoZXIgYml0IGluIHtBMjQsQTIyLi5BMTF9IGlzIG5SRUcgdG8gZmxhZyBtZW1vcnkgYWNjZXNzCisgKiAodnMgYXR0cmlidXRlcykuICBTbyBtb3JlIHRoYW4gMktCL3JlZ2lvbiB3b3VsZCBqdXN0IGJlIHdhc3RlLgorICovCisjZGVmaW5lCUNGX0FUVFJfUEhZUwkoQVQ5MV9DRl9CQVNFKQorI2RlZmluZQlDRl9JT19QSFlTCShBVDkxX0NGX0JBU0UgICsgKDEgPDwgMjMpKQorI2RlZmluZQlDRl9NRU1fUEhZUwkoQVQ5MV9DRl9CQVNFICArIDB4MDE3ZmY4MDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImF0OTFfY2YiOworCitzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQgeworCXN0cnVjdCBwY21jaWFfc29ja2V0CXNvY2tldDsKKworCXVuc2lnbmVkCQlwcmVzZW50OjE7CisKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCBhdDkxX2NmX2RhdGEJKmJvYXJkOworfTsKKworI2RlZmluZQlTWl8ySwkJCSgyICogU1pfMUspCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0OTFfY2ZfcHJlc2VudChzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQgKmNmKQoreworCXJldHVybiAhYXQ5MV9nZXRfZ3Bpb192YWx1ZShjZi0+Ym9hcmQtPmRldF9waW4pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBhdDkxX2NmX3NzX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdDkxX2NmX2lycShpbnQgaXJxLCB2b2lkICpfY2YsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2YgPSAoc3RydWN0IGF0OTFfY2Zfc29ja2V0ICopIF9jZjsKKworCWlmIChpcnEgPT0gY2YtPmJvYXJkLT5kZXRfcGluKSB7CisJCXVuc2lnbmVkIHByZXNlbnQgPSBhdDkxX2NmX3ByZXNlbnQoY2YpOworCisJCS8qIGtpY2sgcGNjYXJkIGFzIG5lZWRlZCAqLworCQlpZiAocHJlc2VudCAhPSBjZi0+cHJlc2VudCkgeworCQkJY2YtPnByZXNlbnQgPSBwcmVzZW50OworCQkJcHJfZGVidWcoIiVzOiBjYXJkICVzXG4iLCBkcml2ZXJfbmFtZSwKKwkJCQkJcHJlc2VudCA/ICJwcmVzZW50IiA6ICJnb25lIik7CisJCQlwY21jaWFfcGFyc2VfZXZlbnRzKCZjZi0+c29ja2V0LCBTU19ERVRFQ1QpOworCQl9CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGF0OTFfY2ZfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9pbnQgKnNwKQoreworCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2Y7CisKKwlpZiAoIXNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNmID0gY29udGFpbmVyX29mKHMsIHN0cnVjdCBhdDkxX2NmX3NvY2tldCwgc29ja2V0KTsKKworCS8qIE5PVEU6IENGIGlzIGFsd2F5cyAzVkNBUkQgKi8KKwlpZiAoYXQ5MV9jZl9wcmVzZW50KGNmKSkgeworCQlpbnQgcmR5CT0gY2YtPmJvYXJkLT5pcnFfcGluOwkvKiBSRFkvbklSUSAqLworCQlpbnQgdmNjCT0gY2YtPmJvYXJkLT52Y2NfcGluOworCisJCSpzcCA9IFNTX0RFVEVDVCB8IFNTXzNWQ0FSRDsKKwkJaWYgKCFyZHkgfHwgYXQ5MV9nZXRfZ3Bpb192YWx1ZShyZHkpKQorCQkJKnNwIHw9IFNTX1JFQURZOworCQlpZiAoIXZjYyB8fCBhdDkxX2dldF9ncGlvX3ZhbHVlKHZjYykpCisJCQkqc3AgfD0gU1NfUE9XRVJPTjsKKwl9IGVsc2UKKwkJKnNwID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithdDkxX2NmX3NldF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqcykKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmOworCisJY2YgPSBjb250YWluZXJfb2Yoc29jaywgc3RydWN0IGF0OTFfY2Zfc29ja2V0LCBzb2NrZXQpOworCisJLyogc3dpdGNoIFZjYyBpZiBuZWVkZWQgYW5kIHBvc3NpYmxlICovCisJaWYgKGNmLT5ib2FyZC0+dmNjX3BpbikgeworCQlzd2l0Y2ggKHMtPlZjYykgeworCQkJY2FzZSAwOgorCQkJCWF0OTFfc2V0X2dwaW9fdmFsdWUoY2YtPmJvYXJkLT52Y2NfcGluLCAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzM6CisJCQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShjZi0+Ym9hcmQtPnZjY19waW4sIDEpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIHRvZ2dsZSByZXNldCBpZiBuZWVkZWQgKi8KKwlhdDkxX3NldF9ncGlvX3ZhbHVlKGNmLT5ib2FyZC0+cnN0X3Bpbiwgcy0+ZmxhZ3MgJiBTU19SRVNFVCk7CisKKwlwcl9kZWJ1ZygiJXM6IFZjYyAlZCwgaW9faXJxICVkLCBmbGFncyAlMDR4IGNzYyAlMDR4XG4iLAorCQlkcml2ZXJfbmFtZSwgcy0+VmNjLCBzLT5pb19pcnEsIHMtPmZsYWdzLCBzLT5jc2NfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDkxX2NmX3NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJcmV0dXJuIGF0OTFfY2Zfc2V0X3NvY2tldChzLCAmZGVhZF9zb2NrZXQpOworfQorCisvKiB3ZSBhbHJlYWR5IG1hcHBlZCB0aGUgSS9PIHJlZ2lvbiAqLworc3RhdGljIGludCBhdDkxX2NmX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY2NhcmRfaW9fbWFwICppbykKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmOworCXUzMgkJCWNzcjsKKworCWNmID0gY29udGFpbmVyX29mKHMsIHN0cnVjdCBhdDkxX2NmX3NvY2tldCwgc29ja2V0KTsKKwlpby0+ZmxhZ3MgJj0gKE1BUF9BQ1RJVkUgfCBNQVBfMTZCSVQgfCBNQVBfQVVUT1NaKTsKKworCS8qCisJICogVXNlIDE2IGJpdCBhY2Nlc3NlcyB1bmxlc3MvdW50aWwgd2UgbmVlZCA4LWJpdCBpL28gc3BhY2UuCisJICogQWx3YXlzIHNldCBDU1I0IC4uLiBQQ01DSUEgd29uJ3QgYWx3YXlzIHVubWFwIHRoaW5ncy4KKwkgKi8KKwljc3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfU01DX0NTUig0KSkgJiB+QVQ5MV9TTUNfREJXOworCisJLyoKKwkgKiBOT1RFOiB0aGlzIENGIGNvbnRyb2xsZXIgaWdub3JlcyBJT0lTMTYsIHNvIHdlIGNhbid0IHJlYWxseSBkbworCSAqIE1BUF9BVVRPU1ouICBUaGUgMTZiaXQgbW9kZSBhbGxvd3Mgc2luZ2xlIGJ5dGUgYWNjZXNzIG9uIGVpdGhlcgorCSAqIEQwLUQ3IChldmVuIGFkZHIpIG9yIEQ4LUQxNSAob2RkKSwgc28gaXQncyBjbG9zZSBlbm91Z2ggZm9yIG1hbnkKKwkgKiBwdXJwb3NlcyAoYW5kIGhhbmRsZXMgaWRlLWNzKS4KKwkgKgorCSAqIFRoZSA4Yml0IG1vZGUgaXMgbmVlZGVkIGZvciBvZGQgYnl0ZSBhY2Nlc3Mgb24gRDAtRDcuICBJdCBzZWVtcworCSAqIHNvbWUgY2FyZHMgb25seSBsaWtlIHRoYXQgd2F5IHRvIGdldCBhdCB0aGUgb2RkIGJ5dGUsIGRlc3BpdGUKKwkgKiBDRiAzLjAgc3BlYyB0YWJsZSAzNSBhbHNvIGdpdmluZyB0aGUgRDgtRDE1IG9wdGlvbi4KKwkgKi8KKwlpZiAoIShpby0+ZmxhZ3MgJiAoTUFQXzE2QklUfE1BUF9BVVRPU1opKSkgeworCQljc3IgfD0gQVQ5MV9TTUNfREJXXzg7CisJCXByX2RlYnVnKCIlczogOGJpdCBpL28gYnVzXG4iLCBkcml2ZXJfbmFtZSk7CisJfSBlbHNlIHsKKwkJY3NyIHw9IEFUOTFfU01DX0RCV18xNjsKKwkJcHJfZGVidWcoIiVzOiAxNmJpdCBpL28gYnVzXG4iLCBkcml2ZXJfbmFtZSk7CisJfQorCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NTUig0KSwgY3NyKTsKKworCWlvLT5zdGFydCA9IGNmLT5zb2NrZXQuaW9fb2Zmc2V0OworCWlvLT5zdG9wID0gaW8tPnN0YXJ0ICsgU1pfMksgLSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHBjbWNpYSBsYXllciBtYXBzL3VubWFwcyBtZW0gcmVnaW9ucyAqLworc3RhdGljIGludAorYXQ5MV9jZl9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZjsKKworCWlmIChtYXAtPmNhcmRfc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY2YgPSBjb250YWluZXJfb2Yocywgc3RydWN0IGF0OTFfY2Zfc29ja2V0LCBzb2NrZXQpOworCisJbWFwLT5mbGFncyAmPSBNQVBfQUNUSVZFfE1BUF9BVFRSSUJ8TUFQXzE2QklUOworCWlmIChtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBDRl9BVFRSX1BIWVM7CisJZWxzZQorCQltYXAtPnN0YXRpY19zdGFydCA9IENGX01FTV9QSFlTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgYXQ5MV9jZl9vcHMgPSB7CisJLmluaXQJCQk9IGF0OTFfY2Zfc3NfaW5pdCwKKwkuc3VzcGVuZAkJPSBhdDkxX2NmX3NzX3N1c3BlbmQsCisJLmdldF9zdGF0dXMJCT0gYXQ5MV9jZl9nZXRfc3RhdHVzLAorCS5zZXRfc29ja2V0CQk9IGF0OTFfY2Zfc2V0X3NvY2tldCwKKwkuc2V0X2lvX21hcAkJPSBhdDkxX2NmX3NldF9pb19tYXAsCisJLnNldF9tZW1fbWFwCQk9IGF0OTFfY2Zfc2V0X21lbV9tYXAsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgYXQ5MV9jZl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZjsKKwlzdHJ1Y3QgYXQ5MV9jZl9kYXRhCSpib2FyZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlc291cmNlCQkqaW87CisJdW5zaWduZWQgaW50CQljc2E7CisJaW50CQkJc3RhdHVzOworCisJaWYgKCFib2FyZCB8fCAhYm9hcmQtPmRldF9waW4gfHwgIWJvYXJkLT5yc3RfcGluKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWlvKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNmID0ga2NhbGxvYygxLCBzaXplb2YgKmNmLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNmLT5ib2FyZCA9IGJvYXJkOworCWNmLT5wZGV2ID0gcGRldjsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBjZik7CisKKwkvKiBDRiB0YWtlcyBvdmVyIENTNCwgQ1M1LCBDUzYgKi8KKwljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfRUJJX0NTQSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9FQklfQ1NBLCBjc2EgfCBBVDkxX0VCSV9DUzRBX1NNQ19DT01QQUNURkxBU0gpOworCisJLyogZm9yY2UgcG93ZXJvbiBkZWZhdWx0cyBmb3IgdGhlc2UgcGlucyAuLi4gKi8KKwkodm9pZCkgYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM5LCAwKTsJLyogQTI1L0NGUk5XICovCisJKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOwkvKiBOQ1M0L0NGQ1MgKi8KKwkodm9pZCkgYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIE5DUzUvQ0ZDRTEgKi8KKwkodm9pZCkgYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIE5DUzYvQ0ZDRTIgKi8KKworCS8qIG5XQUlUIGlzIF9ub3RfIGEgZGVmYXVsdCBzZXR0aW5nICovCisJKHZvaWQpIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMSk7CS8qICBuV0FJVCAqLworCisJLyoKKwkgKiBTdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgdGltaW5nIGFkanVzdG1lbnRzLgorCSAqIFJFVklTSVQ6ICB0aGVzZSB0aW1pbmdzIGFyZSBpbiB0ZXJtcyBvZiBNQ0sgY3ljbGVzLCBzbworCSAqIHdoZW4gTUNLIGNoYW5nZXMgKGNwdWZyZXEgZXRjKSBzbyBtdXN0IHRoZXNlIHZhbHVlcy4uLgorCSAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NTUig0KSwKKwkJCQkgIEFUOTFfU01DX0FDU1NfU1RECisJCQkJfCBBVDkxX1NNQ19EQldfMTYKKwkJCQl8IEFUOTFfU01DX0JBVAorCQkJCXwgQVQ5MV9TTUNfV1NFTgorCQkJCXwgQVQ5MV9TTUNfTldTXygzMikJLyogd2FpdCBzdGF0ZXMgKi8KKwkJCQl8IEFUOTFfU01DX1JXU0VUVVBfKDYpCS8qIHNldHVwIHRpbWUgKi8KKwkJCQl8IEFUOTFfU01DX1JXSE9MRF8oNCkJLyogaG9sZCB0aW1lICovCisJKTsKKworCS8qIG11c3QgYmUgYSBHUElPOyBlcmdvIG11c3QgdHJpZ2dlciBvbiBib3RoIGVkZ2VzICovCisJc3RhdHVzID0gcmVxdWVzdF9pcnEoYm9hcmQtPmRldF9waW4sIGF0OTFfY2ZfaXJxLAorCQkJU0FfU0FNUExFX1JBTkRPTSwgZHJpdmVyX25hbWUsIGNmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsMDsKKworCS8qCisJICogVGhlIGNhcmQgZHJpdmVyIHdpbGwgcmVxdWVzdCB0aGlzIGlycSBsYXRlciBhcyBuZWVkZWQuCisJICogYnV0IGl0IGNhdXNlcyBsb3RzIG9mICJpcnFOTjogbm9ib2R5IGNhcmVkIiBtZXNzYWdlcworCSAqIHVubGVzcyB3ZSByZXBvcnQgdGhhdCB3ZSBoYW5kbGUgZXZlcnl0aGluZyAoc2lnaCkuCisJICogKE5vdGU6ICBESyBib2FyZCBkb2Vzbid0IHdpcmUgdGhlIElSUSBwaW4uLi4pCisJICovCisJaWYgKGJvYXJkLT5pcnFfcGluKSB7CisJCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGJvYXJkLT5pcnFfcGluLCBhdDkxX2NmX2lycSwKKwkJCQlTQV9TSElSUSwgZHJpdmVyX25hbWUsIGNmKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGZhaWwwYTsKKwkJY2YtPnNvY2tldC5wY2lfaXJxID0gYm9hcmQtPmlycV9waW47CisJfSBlbHNlCisJCWNmLT5zb2NrZXQucGNpX2lycSA9IE5SX0lSUVMgKyAxOworCisJLyogcGNtY2lhIGxheWVyIG9ubHkgcmVtYXBzICJyZWFsIiBtZW1vcnkgbm90IGlvc3BhY2UgKi8KKwljZi0+c29ja2V0LmlvX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKENGX0lPX1BIWVMsIFNaXzJLKTsKKwlpZiAoIWNmLT5zb2NrZXQuaW9fb2Zmc2V0KQorCQlnb3RvIGZhaWwxOworCisJLyogcmVzZXJ2ZSBDUzQsIENTNSwgYW5kIENTNiByZWdpb25zOyBidXQgdXNlIGp1c3QgQ1M0ICovCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW8tPnN0YXJ0LCBpby0+ZW5kICsgMSAtIGlvLT5zdGFydCwKKwkJCQlkcml2ZXJfbmFtZSkpCisJCWdvdG8gZmFpbDE7CisKKwlwcl9pbmZvKCIlczogaXJxcyBkZXQgIyVkLCBpbyAjJWRcbiIsIGRyaXZlcl9uYW1lLAorCQlib2FyZC0+ZGV0X3BpbiwgYm9hcmQtPmlycV9waW4pOworCisJY2YtPnNvY2tldC5vd25lciA9IFRISVNfTU9EVUxFOworCWNmLT5zb2NrZXQuZGV2LmRldiA9IGRldjsKKwljZi0+c29ja2V0Lm9wcyA9ICZhdDkxX2NmX29wczsKKwljZi0+c29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKwljZi0+c29ja2V0LmZlYXR1cmVzID0gU1NfQ0FQX1BDQ0FSRCB8IFNTX0NBUF9TVEFUSUNfTUFQCisJCQkJfCBTU19DQVBfTUVNX0FMSUdOOworCWNmLT5zb2NrZXQubWFwX3NpemUgPSBTWl8ySzsKKwljZi0+c29ja2V0LmlvWzBdLnJlcyA9IGlvOworCisJc3RhdHVzID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmY2YtPnNvY2tldCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDI7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGNmLT5zb2NrZXQuaW9fb2Zmc2V0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW8tPnN0YXJ0LCBpby0+ZW5kICsgMSAtIGlvLT5zdGFydCk7CitmYWlsMToKKwlpZiAoYm9hcmQtPmlycV9waW4pCisJCWZyZWVfaXJxKGJvYXJkLT5pcnFfcGluLCBjZik7CitmYWlsMGE6CisJZnJlZV9pcnEoYm9hcmQtPmRldF9waW4sIGNmKTsKK2ZhaWwwOgorCWF0OTFfc3lzX3dyaXRlKEFUOTFfRUJJX0NTQSwgY3NhKTsKKwlrZnJlZShjZik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2V4aXQgYXQ5MV9jZl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2YgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSppbyA9IGNmLT5zb2NrZXQuaW9bMF0ucmVzOworCXVuc2lnbmVkIGludAkJY3NhOworCisJcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KCZjZi0+c29ja2V0KTsKKwlmcmVlX2lycShjZi0+Ym9hcmQtPmlycV9waW4sIGNmKTsKKwlmcmVlX2lycShjZi0+Ym9hcmQtPmRldF9waW4sIGNmKTsKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKikgY2YtPnNvY2tldC5pb19vZmZzZXQpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpby0+c3RhcnQsIGlvLT5lbmQgKyAxIC0gaW8tPnN0YXJ0KTsKKworCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9FQklfQ1NBKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX0VCSV9DU0EsIGNzYSAmIH5BVDkxX0VCSV9DUzRBKTsKKworCWtmcmVlKGNmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF0OTFfY2ZfZHJpdmVyID0geworCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBhdDkxX2NmX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3AoYXQ5MV9jZl9yZW1vdmUpLAorCS5zdXNwZW5kCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX2NmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdDkxX2NmX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhdDkxX2NmX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXQ5MV9jZl9leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmF0OTFfY2ZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGF0OTFfY2ZfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVQ5MSBDb21wYWN0IEZsYXNoIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKaW5kZXggMTIwZmE4ZC4uOTEyYzAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggNjEzZjJmMS4uMzE2Mjk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTExLDkgKzExMCw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7CiAJCWlmIChzb2NrZXQtPmRldi5kZXYgIT0gZGV2KQogCQkJY29udGludWU7Ci0JCWRvd24oJnNvY2tldC0+c2t0X3NlbSk7CisJCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAkJc29ja2V0X3N1c3BlbmQoc29ja2V0KTsKLQkJdXAoJnNvY2tldC0+c2t0X3NlbSk7CisJCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCkBAIC0xMjksOSArMTI4LDkgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNvY2tldCwgJnBjbWNpYV9zb2NrZXRfbGlzdCwgc29ja2V0X2xpc3QpIHsKIAkJaWYgKHNvY2tldC0+ZGV2LmRldiAhPSBkZXYpCiAJCQljb250aW51ZTsKLQkJZG93bigmc29ja2V0LT5za3Rfc2VtKTsKKwkJbXV0ZXhfbG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCQlzb2NrZXRfcmVzdW1lKHNvY2tldCk7Ci0JCXVwKCZzb2NrZXQtPnNrdF9zZW0pOworCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAl9CiAJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKIApAQCAtMjM3LDcgKzIzNiw3IEBACiAJaW5pdF9jb21wbGV0aW9uKCZzb2NrZXQtPnNvY2tldF9yZWxlYXNlZCk7CiAJaW5pdF9jb21wbGV0aW9uKCZzb2NrZXQtPnRocmVhZF9kb25lKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2NrZXQtPnRocmVhZF93YWl0KTsKLQlpbml0X01VVEVYKCZzb2NrZXQtPnNrdF9zZW0pOworCW11dGV4X2luaXQoJnNvY2tldC0+c2t0X211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc29ja2V0LT50aHJlYWRfbG9jayk7CiAKIAlyZXQgPSBrZXJuZWxfdGhyZWFkKHBjY2FyZGQsIHNvY2tldCwgQ0xPTkVfS0VSTkVMKTsKQEAgLTQwNiw4ICs0MDUsNiBAQAogCWNiX2ZyZWUocyk7CiAjZW5kaWYKIAlzLT5mdW5jdGlvbnMgPSAwOwotCWtmcmVlKHMtPmNvbmZpZyk7Ci0Jcy0+Y29uZmlnID0gTlVMTDsKIAogCXMtPm9wcy0+Z2V0X3N0YXR1cyhzLCAmc3RhdHVzKTsKIAlpZiAoc3RhdHVzICYgU1NfUE9XRVJPTikgewpAQCAtNjY0LDcgKzY2MSw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrdC0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoZXZlbnRzKSB7Ci0JCQlkb3duKCZza3QtPnNrdF9zZW0pOworCQkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCQkJaWYgKGV2ZW50cyAmIFNTX0RFVEVDVCkKIAkJCQlzb2NrZXRfZGV0ZWN0X2NoYW5nZShza3QpOwogCQkJaWYgKGV2ZW50cyAmIFNTX0JBVERFQUQpCkBAIC02NzMsNyArNjcwLDcgQEAKIAkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQkFUVEVSWV9MT1csIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJaWYgKGV2ZW50cyAmIFNTX1JFQURZKQogCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9SRUFEWV9DSEFOR0UsIENTX0VWRU5UX1BSSV9MT1cpOwotCQkJdXAoJnNrdC0+c2t0X3NlbSk7CisJCQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTcxNyw4ICs3MTQsOCBAQAogewogICAgICAgICBpbnQgcmV0ID0gMDsKIAotCS8qIHMtPnNrdF9zZW0gYWxzbyBwcm90ZWN0cyBzLT5jYWxsYmFjayAqLwotCWRvd24oJnMtPnNrdF9zZW0pOworCS8qIHMtPnNrdF9tdXRleCBhbHNvIHByb3RlY3RzIHMtPmNhbGxiYWNrICovCisJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAogCWlmIChjKSB7CiAJCS8qIHJlZ2lzdHJhdGlvbiAqLwpAQCAtNzM0LDcgKzczMSw3IEBACiAJfSBlbHNlCiAJCXMtPmNhbGxiYWNrID0gTlVMTDsKICBlcnI6Ci0JdXAoJnMtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NTIsNyArNzQ5LDcgQEAKIAogCWNzX2RiZyhza3QsIDEsICJyZXNldHRpbmcgc29ja2V0XG4iKTsKIAotCWRvd24oJnNrdC0+c2t0X3NlbSk7CisJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCWRvIHsKIAkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQkJcmV0ID0gQ1NfTk9fQ0FSRDsKQEAgLTc4MSw3ICs3NzgsNyBAQAogCiAJCXJldCA9IENTX1NVQ0NFU1M7CiAJfSB3aGlsZSAoMCk7Ci0JdXAoJnNrdC0+c2t0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfSAvKiByZXNldF9jYXJkICovCkBAIC03OTcsNyArNzk0LDcgQEAKIAogCWNzX2RiZyhza3QsIDEsICJzdXNwZW5kaW5nIHNvY2tldFxuIik7CiAKLQlkb3duKCZza3QtPnNrdF9zZW0pOworCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CiAJCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJCXJldCA9IENTX05PX0NBUkQ7CkBAIC04MTQsNyArODExLDcgQEAKIAkJfQogCQlyZXQgPSBzb2NrZXRfc3VzcGVuZChza3QpOwogCX0gd2hpbGUgKDApOwotCXVwKCZza3QtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0gLyogc3VzcGVuZF9jYXJkICovCkBAIC04MjcsNyArODI0LDcgQEAKICAgICAKIAljc19kYmcoc2t0LCAxLCAid2FraW5nIHVwIHNvY2tldFxuIik7CiAKLQlkb3duKCZza3QtPnNrdF9zZW0pOworCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CiAJCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJCXJldCA9IENTX05PX0NBUkQ7CkBAIC04NDEsNyArODM4LDcgQEAKIAkJaWYgKCFyZXQgJiYgc2t0LT5jYWxsYmFjaykKIAkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOwogCX0gd2hpbGUgKDApOwotCXVwKCZza3QtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0gLyogcmVzdW1lX2NhcmQgKi8KQEAgLTg1NSw3ICs4NTIsNyBAQAogICAgIAogCWNzX2RiZyhza3QsIDEsICJ1c2VyIGVqZWN0IHJlcXVlc3RcbiIpOwogCi0JZG93bigmc2t0LT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewogCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCQlyZXQgPSAtRU5PREVWOwpAQCAtODcxLDcgKzg2OCw3IEBACiAJCXNvY2tldF9yZW1vdmUoc2t0KTsKIAkJcmV0ID0gMDsKIAl9IHdoaWxlICgwKTsKLQl1cCgmc2t0LT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9IC8qIGVqZWN0X2NhcmQgKi8KQEAgLTg4NCw3ICs4ODEsNyBAQAogCiAJY3NfZGJnKHNrdCwgMSwgInVzZXIgaW5zZXJ0IHJlcXVlc3RcbiIpOwogCi0JZG93bigmc2t0LT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewogCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB7CiAJCQlyZXQgPSAtRUJVU1k7CkBAIC04OTYsNyArODkzLDcgQEAKIAkJfQogCQlyZXQgPSAwOwogCX0gd2hpbGUgKDApOwotCXVwKCZza3QtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0gLyogaW5zZXJ0X2NhcmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDdiMzdlYmEuLmQ2MTY0Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtMTUsNyArMTUsNyBAQAogI2lmbmRlZiBfTElOVVhfQ1NfSU5URVJOQUxfSAogI2RlZmluZSBfTElOVVhfQ1NfSU5URVJOQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAvKiBGbGFncyBpbiBjbGllbnQgc3RhdGUgKi8KICNkZWZpbmUgQ0xJRU5UX0NPTkZJR19MT0NLRUQJMHgwMDAxCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIENMSUVOVF9JT19SRVEJCTB4MDAwNAogI2RlZmluZSBDTElFTlRfVU5CT1VORAkJMHgwMDA4CiAjZGVmaW5lIENMSUVOVF9TVEFMRQkJMHgwMDEwCi0jZGVmaW5lIENMSUVOVF9XSU5fUkVRKGkpCSgweDIwPDwoaSkpCisjZGVmaW5lIENMSUVOVF9XSU5fUkVRKGkpCSgweDE8PChpKSkKICNkZWZpbmUgQ0xJRU5UX0NBUkRCVVMJCTB4ODAwMAogCiAjZGVmaW5lIFJFR0lPTl9NQUdJQwkweEUzQzkKQEAgLTMxLDcgKzMxLDcgQEAKICAgICB1X3Nob3J0CQlyZWdpb25fbWFnaWM7CiAgICAgdV9zaG9ydAkJc3RhdGU7CiAgICAgZGV2X2luZm9fdAkJZGV2X2luZm87Ci0gICAgY2xpZW50X2hhbmRsZV90CW10ZDsKKyAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZQkqbXRkOwogICAgIHVfaW50CQlNZWRpYUlEOwogICAgIHJlZ2lvbl9pbmZvX3QJaW5mbzsKIH0gcmVnaW9uX3Q7CkBAIC00MCwxMiArNDAsMTIgQEAKIAogLyogRWFjaCBjYXJkIGZ1bmN0aW9uIGdldHMgb25lIG9mIHRoZXNlIGd1eXMgKi8KIHR5cGVkZWYgc3RydWN0IGNvbmZpZ190IHsKKwlzdHJ1Y3Qga3JlZglyZWY7CiAgICAgdV9pbnQJCXN0YXRlOwogICAgIHVfaW50CQlBdHRyaWJ1dGVzOwogICAgIHVfaW50CQlJbnRUeXBlOwogICAgIHVfaW50CQlDb25maWdCYXNlOwogICAgIHVfY2hhcgkJU3RhdHVzLCBQaW4sIENvcHksIE9wdGlvbiwgRXh0U3RhdHVzOwotICAgIHVfaW50CQlQcmVzZW50OwogICAgIHVfaW50CQlDYXJkVmFsdWVzOwogICAgIGlvX3JlcV90CQlpbzsKICAgICBzdHJ1Y3QgewpAQCAtOTUsMTIgKzk1LDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgQ0hFQ0tfU09DS0VUKHMpIFwKLSAgICAoKChzKSA+PSBzb2NrZXRzKSB8fCAoc29ja2V0X3RhYmxlW3NdLT5vcHMgPT0gTlVMTCkpCi0KLSNkZWZpbmUgU09DS0VUKGgpIChoLT5zb2NrZXQpCi0jZGVmaW5lIENPTkZJRyhoKSAoJlNPQ0tFVChoKS0+Y29uZmlnWyhoKS0+ZnVuY10pCi0KIC8qIEluIGNhcmRidXMuYyAqLwogaW50IGNiX2FsbG9jKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIHZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CkBAIC0xMzMsMTAgKzEyNyw5IEBACiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBwY21jaWFfc29ja2V0X2xpc3RfcndzZW07CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY21jaWFfc29ja2V0X2xpc3Q7CiBpbnQgcGNtY2lhX2dldF93aW5kb3coc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHdpbmRvd19oYW5kbGVfdCAqaGFuZGxlLCBpbnQgaWR4LCB3aW5fcmVxX3QgKnJlcSk7Ci1pbnQgcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgY29uZmlnX2luZm9fdCAqY29uZmlnKTsKK2ludCBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjb25maWdfaW5mb190ICpjb25maWcpOwogaW50IHBjY2FyZF9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjY2FyZF9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNzX3N0YXR1c190ICpzdGF0dXMpOwotaW50IHBjY2FyZF9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCBjb25mX3JlZ190ICpyZWcpOworaW50IHBjY2FyZF9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNzX3N0YXR1c190ICpzdGF0dXMpOwogCiAKIHN0cnVjdCBwY21jaWFfY2FsbGJhY2t7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCBiYjk2Y2UxLi43NGIzMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTEwLDEwICsxMCw5IEBACiAgKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKLSAqIChDKSAyMDAzIC0gMjAwNQlEb21pbmlrIEJyb2Rvd3NraQorICogKEMpIDIwMDMgLSAyMDA2CURvbWluaWsgQnJvZG93c2tpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIzLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAjZGVmaW5lIElOX0NBUkRfU0VSVklDRVMKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KQEAgLTIzNiwxMSArMjM2LDExIEBACiAvKioKICAqIHBjbWNpYV9sb2FkX2Zpcm13YXJlIC0gbG9hZCBDSVMgZnJvbSB1c2Vyc3BhY2UgaWYgZGV2aWNlLXByb3ZpZGVkIGlzIGJyb2tlbgogICogQGRldiAtIHRoZSBwY21jaWEgZGV2aWNlIHdoaWNoIG5lZWRzIGEgQ0lTIG92ZXJyaWRlCi0gKiBAZmlsZW5hbWUgLSByZXF1ZXN0ZWQgZmlsZW5hbWUgaW4gL2xpYi9maXJtd2FyZS9jaXMvCisgKiBAZmlsZW5hbWUgLSByZXF1ZXN0ZWQgZmlsZW5hbWUgaW4gL2xpYi9maXJtd2FyZS8KICAqCiAgKiBUaGlzIHVzZXMgdGhlIGluLWtlcm5lbCBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbSB0byB1c2UgYSAiZmFrZSBDSVMiIGlmCiAgKiB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBjYXJkIGlzIGJyb2tlbi4gVGhlIGZpcm13YXJlIGZpbGVzIHJlc2lkZSBpbgotICogL2xpYi9maXJtd2FyZS9jaXMvIGluIHVzZXJzcGFjZS4KKyAqIC9saWIvZmlybXdhcmUvIGluIHVzZXJzcGFjZS4KICAqLwogc3RhdGljIGludCBwY21jaWFfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2LCBjaGFyICogZmlsZW5hbWUpCiB7CkBAIC0yOTgsOSArMjk4LDYgQEAKICAqCiAgKiBSZWdpc3RlcnMgYSBQQ01DSUEgZHJpdmVyIHdpdGggdGhlIFBDTUNJQSBidXMgY29yZS4KICAqLwotc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHBjbWNpYV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwotCiBpbnQgcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqZHJpdmVyKQogewogCWlmICghZHJpdmVyKQpAQCAtMzQzLDEyICszNDAsMTkgQEAKIAkJcHV0X2RldmljZSgmcF9kZXYtPmRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGNvbmZpZ190ICpjID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGNvbmZpZ190LCByZWYpOworCWtmcmVlKGMpOworfQorCiBzdGF0aWMgdm9pZCBwY21jaWFfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlkc19kYmcoMSwgInJlbGVhc2luZyBkZXYgJXBcbiIsIHBfZGV2KTsKIAlwY21jaWFfcHV0X3NvY2tldChwX2Rldi0+c29ja2V0KTsKIAlrZnJlZShwX2Rldi0+ZGV2bmFtZSk7CisJa3JlZl9wdXQoJnBfZGV2LT5mdW5jdGlvbl9jb25maWctPnJlZiwgcGNtY2lhX3JlbGVhc2VfZnVuY3Rpb24pOwogCWtmcmVlKHBfZGV2KTsKIH0KIApAQCAtMzc3LDI5ICszODEsMTIgQEAKIAlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOwogCXMgPSBwX2Rldi0+c29ja2V0OwogCi0JaWYgKCghcF9kcnYtPnByb2JlKSB8fCAoIXRyeV9tb2R1bGVfZ2V0KHBfZHJ2LT5vd25lcikpKSB7CisJaWYgKCghcF9kcnYtPnByb2JlKSB8fCAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHx8CisJICAgICghdHJ5X21vZHVsZV9nZXQocF9kcnYtPm93bmVyKSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBwdXRfZGV2OwogCX0KIAotCXBfZGV2LT5zdGF0ZSAmPSB+Q0xJRU5UX1VOQk9VTkQ7Ci0KLQkvKiBzZXQgdXAgdGhlIGRldmljZSBjb25maWd1cmF0aW9uLCBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGJlZm9yZSAqLwotCWlmICghcy0+ZnVuY3Rpb25zKSB7Ci0JCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7Ci0JCWlmIChwY2NhcmRfcmVhZF90dXBsZShzLCBwX2Rldi0+ZnVuYywgQ0lTVFBMX0xPTkdMSU5LX01GQywKLQkJCQkgICAgICAmbWZjKSA9PSBDU19TVUNDRVNTKQotCQkJcy0+ZnVuY3Rpb25zID0gbWZjLm5mbjsKLQkJZWxzZQotCQkJcy0+ZnVuY3Rpb25zID0gMTsKLQkJcy0+Y29uZmlnID0ga3phbGxvYyhzaXplb2YoY29uZmlnX3QpICogcy0+ZnVuY3Rpb25zLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzLT5jb25maWcpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIHB1dF9tb2R1bGU7Ci0JCX0KLQl9Ci0KIAlyZXQgPSBwX2Rydi0+cHJvYmUocF9kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gcHV0X21vZHVsZTsKQEAgLTQxMCw3ICszOTcsNyBAQAogCSAqIGNhbGwgd2hpY2ggd2lsbCB0aGVuIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIHR3bwogCSAqIHBzZXVkbyBkZXZpY2VzLCBhbmQgaWYgbm90LCBhZGQgdGhlIHNlY29uZCBvbmUuCiAJICovCi0JZGlkID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICopIHBfZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisJZGlkID0gcF9kZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoZGlkICYmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pICYmCiAJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgPT0gMSkgJiYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCiAJCXBjbWNpYV9hZGRfcHNldWRvX2RldmljZShwX2Rldi0+c29ja2V0KTsKQEAgLTQyNSw2OSArNDEyLDg0IEBACiB9CiAKIAotc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICogZGV2KQotewotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKLQlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0JaW50IGk7Ci0KLQkvKiBkZXRhY2ggdGhlICJpbnN0YW5jZSIgKi8KLQlwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKLQlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOwotCWlmICghcF9kcnYpCi0JCXJldHVybiAwOwotCi0JaWYgKHBfZHJ2LT5yZW1vdmUpCi0JICAgICAgIAlwX2Rydi0+cmVtb3ZlKHBfZGV2KTsKLQotCS8qIGNoZWNrIGZvciBwcm9wZXIgdW5sb2FkaW5nICovCi0JaWYgKHBfZGV2LT5zdGF0ZSAmIChDTElFTlRfSVJRX1JFUXxDTElFTlRfSU9fUkVRfENMSUVOVF9DT05GSUdfTE9DS0VEKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBkcml2ZXIgJXMgZGlkIG5vdCByZWxlYXNlIGNvbmZpZyBwcm9wZXJseVxuIiwKLQkJICAgICAgIHBfZHJ2LT5kcnYubmFtZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1dJTjsgaSsrKQotCQlpZiAocF9kZXYtPnN0YXRlICYgQ0xJRU5UX1dJTl9SRVEoaSkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGRyaXZlciAlcyBkaWQgbm90IHJlbGVhc2Ugd2luZG93cyBwcm9wZXJseVxuIiwKLQkJCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOwotCi0JLyogcmVmZXJlbmNlcyBmcm9tIHBjbWNpYV9wcm9iZV9kZXZpY2UgKi8KLQlwX2Rldi0+c3RhdGUgPSBDTElFTlRfVU5CT1VORDsKLQlwY21jaWFfcHV0X2RldihwX2Rldik7Ci0JbW9kdWxlX3B1dChwX2Rydi0+b3duZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyoKICAqIFJlbW92ZXMgYSBQQ01DSUEgY2FyZCBmcm9tIHRoZSBkZXZpY2UgdHJlZSBhbmQgc29ja2V0IGxpc3QuCiAgKi8KLXN0YXRpYyB2b2lkIHBjbWNpYV9jYXJkX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3N0YXRpYyB2b2lkIHBjbWNpYV9jYXJkX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxlZnRvdmVyKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqdG1wOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJZHNfZGJnKDIsICJ1bmJpbmRfcmVxdWVzdCglZClcbiIsIHMtPnNvY2spOwogCi0Jcy0+ZGV2aWNlX2NvdW50ID0gMDsKIAotCWZvciAoOzspIHsKLQkJLyogdW5yZWdpc3RlciBhbGwgcGNtY2lhX2RldmljZXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgc29ja2V0Ki8KKwlpZiAoIWxlZnRvdmVyKQorCQlzLT5kZXZpY2VfY291bnQgPSAwOworCWVsc2UKKwkJcy0+ZGV2aWNlX2NvdW50ID0gMTsKKworCS8qIHVucmVnaXN0ZXIgYWxsIHBjbWNpYV9kZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHNvY2tldCwgZXhjZXB0IGxlZnRvdmVyICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBfZGV2LCB0bXAsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgeworCQlpZiAocF9kZXYgPT0gbGVmdG92ZXIpCisJCQljb250aW51ZTsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJaWYgKGxpc3RfZW1wdHkoJnMtPmRldmljZXNfbGlzdCkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0gCQkJcmV0dXJuOwotCQl9Ci0JCXBfZGV2ID0gbGlzdF9lbnRyeSgoJnMtPmRldmljZXNfbGlzdCktPm5leHQsIHN0cnVjdCBwY21jaWFfZGV2aWNlLCBzb2NrZXRfZGV2aWNlX2xpc3QpOwogCQlsaXN0X2RlbCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCk7Ci0JCXBfZGV2LT5zdGF0ZSB8PSBDTElFTlRfU1RBTEU7CisJCXBfZGV2LT5fcmVtb3ZlZD0xOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCWRldmljZV91bnJlZ2lzdGVyKCZwX2Rldi0+ZGV2KTsKIAl9CiAKIAlyZXR1cm47Ci19IC8qIHVuYmluZF9yZXF1ZXN0ICovCit9CisKK3N0YXRpYyBpbnQgcGNtY2lhX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CisJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OworCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CisJaW50IGk7CisKKwlwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKKwlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOworCisJLyogSWYgd2UncmUgcmVtb3ZpbmcgdGhlIHByaW1hcnkgbW9kdWxlIGRyaXZpbmcgYQorCSAqIHBzZXVkbyBtdWx0aS1mdW5jdGlvbiBjYXJkLCB3ZSBuZWVkIHRvIHVuYmluZAorCSAqIGFsbCBkZXZpY2VzCisJICovCisJZGlkID0gcF9kZXYtPmRldi5kcml2ZXJfZGF0YTsKKwlpZiAoZGlkICYmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pICYmCisJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgIT0gMCkgJiYKKwkgICAgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCisJCXBjbWNpYV9jYXJkX3JlbW92ZShwX2Rldi0+c29ja2V0LCBwX2Rldik7CisKKwkvKiBkZXRhY2ggdGhlICJpbnN0YW5jZSIgKi8KKwlpZiAoIXBfZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChwX2Rydi0+cmVtb3ZlKQorCSAgICAgICAJcF9kcnYtPnJlbW92ZShwX2Rldik7CisKKwlwX2Rldi0+ZGV2X25vZGUgPSBOVUxMOworCisJLyogY2hlY2sgZm9yIHByb3BlciB1bmxvYWRpbmcgKi8KKwlpZiAocF9kZXYtPl9pcnEgfHwgcF9kZXYtPl9pbyB8fCBwX2Rldi0+X2xvY2tlZCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBkcml2ZXIgJXMgZGlkIG5vdCByZWxlYXNlIGNvbmZpZyBwcm9wZXJseVxuIiwKKwkJICAgICAgIHBfZHJ2LT5kcnYubmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1dJTjsgaSsrKQorCQlpZiAocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUShpKSkKKwkJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSB3aW5kb3dzIHByb3Blcmx5XG4iLAorCQkJICAgICAgIHBfZHJ2LT5kcnYubmFtZSk7CisKKwkvKiByZWZlcmVuY2VzIGZyb20gcGNtY2lhX3Byb2JlX2RldmljZSAqLworCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKKwltb2R1bGVfcHV0KHBfZHJ2LT5vd25lcik7CisKKwlyZXR1cm4gMDsKK30KIAogCiAvKgpAQCAtNTQ2LDcgKzU0OCw3IEBACiAJCQl0bXAgPSB2ZXJzMS0+c3RyICsgdmVyczEtPm9mc1tpXTsKIAogCQkJbGVuZ3RoID0gc3RybGVuKHRtcCkgKyAxOwotCQkJaWYgKChsZW5ndGggPCAzKSB8fCAobGVuZ3RoID4gMjU1KSkKKwkJCWlmICgobGVuZ3RoIDwgMikgfHwgKGxlbmd0aCA+IDI1NSkpCiAJCQkJY29udGludWU7CiAKIAkJCXBfZGV2LT5wcm9kX2lkW2ldID0ga21hbGxvYyhzaXplb2YoY2hhcikgKiBsZW5ndGgsCkBAIC01NzEsMTEgKzU3MywxMSBAQAogICogd29uJ3Qgd29yaywgdGhpcyBkb2Vzbid0IG1hdHRlciBtdWNoIGF0IHRoZSBtb21lbnQ6IHRoZSBkcml2ZXIgY29yZSBkb2Vzbid0CiAgKiBzdXBwb3J0IGl0IGVpdGhlci4KICAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgoZGV2aWNlX2FkZF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2aWNlX2FkZF9sb2NrKTsKIAogc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBwY21jaWFfZGV2aWNlX2FkZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uKQogewotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsICp0bXBfZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJ1c19pZF9sZW47CiAKQEAgLTU4Myw3ICs1ODUsNyBAQAogCWlmICghcykKIAkJcmV0dXJuIE5VTEw7CiAKLQlkb3duKCZkZXZpY2VfYWRkX2xvY2spOworCW11dGV4X2xvY2soJmRldmljZV9hZGRfbG9jayk7CiAKIAkvKiBtYXggb2YgMiBkZXZpY2VzIHBlciBjYXJkICovCiAJaWYgKHMtPmRldmljZV9jb3VudCA9PSAyKQpAQCAtNTk2LDYgKzU5OCw4IEBACiAJcF9kZXYtPnNvY2tldCA9IHM7CiAJcF9kZXYtPmRldmljZV9ubyA9IChzLT5kZXZpY2VfY291bnQrKyk7CiAJcF9kZXYtPmZ1bmMgICA9IGZ1bmN0aW9uOworCWlmIChzLT5mdW5jdGlvbnMgPD0gZnVuY3Rpb24pCisJCXMtPmZ1bmN0aW9ucyA9IGZ1bmN0aW9uICsgMTsKIAogCXBfZGV2LT5kZXYuYnVzID0gJnBjbWNpYV9idXNfdHlwZTsKIAlwX2Rldi0+ZGV2LnBhcmVudCA9IHMtPmRldi5kZXY7CkBAIC02MDgsMzYgKzYxMiw1NSBAQAogCXNwcmludGYgKHBfZGV2LT5kZXZuYW1lLCAicGNtY2lhJXMiLCBwX2Rldi0+ZGV2LmJ1c19pZCk7CiAKIAkvKiBjb21wYXQgKi8KLQlwX2Rldi0+c3RhdGUgPSBDTElFTlRfVU5CT1VORDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyBtdXN0IGJlIHRoZSBzYW1lIGZvciBhbGwgY2FyZCBmdW5jdGlvbnMuCisJICogTm90ZSB0aGF0IHRoaXMgaXMgc2VyaWFsaXplZCBieSB0aGUgZGV2aWNlX2FkZF9sb2NrLCBzbyB0aGF0CisJICogb25seSBvbmUgc3VjaCBzdHJ1Y3Qgd2lsbCBiZSBjcmVhdGVkLgorCSAqLworICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkKKyAgICAgICAgICAgICAgICBpZiAocF9kZXYtPmZ1bmMgPT0gdG1wX2Rldi0+ZnVuYykgeworCQkJcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyA9IHRtcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwkJCWtyZWZfZ2V0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYpOworCQl9CiAKIAkvKiBBZGQgdG8gdGhlIGxpc3QgaW4gcGNtY2lhX2J1c19zb2NrZXQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZwX2Rldi0+c29ja2V0X2RldmljZV9saXN0LCAmcy0+ZGV2aWNlc19saXN0KTsKKwlsaXN0X2FkZCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCwgJnMtPmRldmljZXNfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCisJaWYgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB7CisJCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpCisJCQlnb3RvIGVycl91bnJlZzsKKwkJa3JlZl9pbml0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYpOworCX0KKwogCXByaW50ayhLRVJOX05PVElDRSAicGNtY2lhOiByZWdpc3RlcmluZyBuZXcgZGV2aWNlICVzXG4iLAogCSAgICAgICBwX2Rldi0+ZGV2bmFtZSk7CiAKIAlwY21jaWFfZGV2aWNlX3F1ZXJ5KHBfZGV2KTsKIAotCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnBfZGV2LT5kZXYpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2RlbCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKGRldmljZV9yZWdpc3RlcigmcF9kZXYtPmRldikpCisJCWdvdG8gZXJyX3VucmVnOwogCi0JCWdvdG8gZXJyX2ZyZWU7Ci0gICAgICAgfQotCi0JdXAoJmRldmljZV9hZGRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXZpY2VfYWRkX2xvY2spOwogCiAJcmV0dXJuIHBfZGV2OwogCisgZXJyX3VucmVnOgorCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZwX2Rldi0+c29ja2V0X2RldmljZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCiAgZXJyX2ZyZWU6CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtmcmVlKHBfZGV2KTsKIAlzLT5kZXZpY2VfY291bnQtLTsKICBlcnJfcHV0OgotCXVwKCZkZXZpY2VfYWRkX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2aWNlX2FkZF9sb2NrKTsKIAlwY21jaWFfcHV0X3NvY2tldChzKTsKIAogCXJldHVybiBOVUxMOwpAQCAtNjk2LDcgKzcxOSw3IEBACiAJaW50IG5vX2RldmljZXM9MDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBza3Rfc2VtIGhlbGQgKi8KKwkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJnNrdC0+ZGV2aWNlc19saXN0KSkKIAkJbm9fZGV2aWNlcz0xOwpAQCAtODE5LDkgKzg0MiwxMSBAQAogCXN0cnVjdCBwY21jaWFfZHJpdmVyICogcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRydik7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZCA9IHBfZHJ2LT5pZF90YWJsZTsKIAorI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAkvKiBtYXRjaGluZyBieSBjYXJkbWdyICovCiAJaWYgKHBfZGV2LT5jYXJkbWdyID09IHBfZHJ2KQogCQlyZXR1cm4gMTsKKyNlbmRpZgogCiAJd2hpbGUgKGRpZCAmJiBkaWQtPm1hdGNoX2ZsYWdzKSB7CiAJCWlmIChwY21jaWFfZGV2bWF0Y2gocF9kZXYsIGRpZCkpCkBAIC05MjcsNyArOTUyLDcgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAKLQlpZiAocF9kZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9PTikKKwlpZiAocF9kZXYtPnN1c3BlbmRlZCkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAib2ZmXG4iKTsKIAllbHNlCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm9uXG4iKTsKQEAgLTk0MiwxMSArOTY3LDkgQEAKICAgICAgICAgaWYgKCFjb3VudCkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKIAotCWlmICgocF9kZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikgJiYKLQkgICAgKCFzdHJuY21wKGJ1ZiwgIm9mZiIsIDMpKSkKKwlpZiAoKCFwX2Rldi0+c3VzcGVuZGVkKSAmJiAhc3RybmNtcChidWYsICJvZmYiLCAzKSkKIAkJcmV0ID0gZHBtX3J1bnRpbWVfc3VzcGVuZChkZXYsIFBNU0dfU1VTUEVORCk7Ci0JZWxzZSBpZiAoKHBfZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pICYmCi0JCSAoIXN0cm5jbXAoYnVmLCAib24iLCAyKSkpCisJZWxzZSBpZiAocF9kZXYtPnN1c3BlbmRlZCAmJiAhc3RybmNtcChidWYsICJvbiIsIDIpKQogCQlkcG1fcnVudGltZV9yZXN1bWUoZGV2KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKQEAgLTk4Miw5ICsxMDA1LDkgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJnBfZGV2LT5zb2NrZXQtPnNrdF9zZW0pOworCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPnNrdF9tdXRleCk7CiAJcF9kZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2ggPSAxOwotCXVwKCZwX2Rldi0+c29ja2V0LT5za3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPnNrdF9tdXRleCk7CiAKIAlidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7CiAKQEAgLTEwMTIsMTQgKzEwMzUsMjcgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChkZXYtPmRyaXZlcikKIAkJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAotCWlmIChwX2RydiAmJiBwX2Rydi0+c3VzcGVuZCkKLQkJcmV0dXJuIHBfZHJ2LT5zdXNwZW5kKHBfZGV2KTsKKwlpZiAoIXBfZHJ2KQorCQlnb3RvIG91dDsKIAotCXJldHVybiAwOworCWlmIChwX2Rydi0+c3VzcGVuZCkgeworCQlyZXQgPSBwX2Rydi0+c3VzcGVuZChwX2Rldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocF9kZXYtPmRldmljZV9ubyA9PSBwX2Rldi0+ZnVuYykKKwkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihwX2Rldik7CisKKyBvdXQ6CisJaWYgKCFyZXQpCisJCXBfZGV2LT5zdXNwZW5kZWQgPSAxOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTAyNywxNCArMTA2MywyNyBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKICAgICAgICAgc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChkZXYtPmRyaXZlcikKIAkJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAotCWlmIChwX2RydiAmJiBwX2Rydi0+cmVzdW1lKQotCQlyZXR1cm4gcF9kcnYtPnJlc3VtZShwX2Rldik7CisJaWYgKCFwX2RydikKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gMDsKKwlpZiAocF9kZXYtPmRldmljZV9ubyA9PSBwX2Rldi0+ZnVuYykgeworCQlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHBfZGV2LCAmcF9kZXYtPmNvbmYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKHBfZHJ2LT5yZXN1bWUpCisJCXJldCA9IHBfZHJ2LT5yZXN1bWUocF9kZXYpOworCisgb3V0OgorCWlmICghcmV0KQorCQlwX2Rldi0+c3VzcGVuZGVkID0gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTEwOTQsMTMgKzExNDMsMTkgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBjbWNpYV9nZXRfc29ja2V0KHNrdCk7CiAKKwlpZiAoIXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ01DSUEgb2J0YWluaW5nIHJlZmVyZW5jZSB0byBzb2NrZXQgJXAgIiBcCisJCQkiZmFpbGVkLCBldmVudCAweCV4IGxvc3QhXG4iLCBza3QsIGV2ZW50KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZHNfZGJnKDEsICJkc19ldmVudCgweCUwNngsICVkLCAweCVwKVxuIiwKIAkgICAgICAgZXZlbnQsIHByaW9yaXR5LCBza3QpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgogCQlzLT5wY21jaWFfc3RhdGUucHJlc2VudCA9IDA7Ci0JCXBjbWNpYV9jYXJkX3JlbW92ZShza3QpOworCQlwY21jaWFfY2FyZF9yZW1vdmUoc2t0LCBOVUxMKTsKIAkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOwogCQlicmVhazsKIApAQCAtMTEyOCw2ICsxMTgzLDMyIEBACiB9IC8qIGRzX2V2ZW50ICovCiAKIAorc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBwY21jaWFfZGV2X3ByZXNlbnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKl9wX2RldikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnJldCA9IE5VTEw7CisKKwlwX2RldiA9IHBjbWNpYV9nZXRfZGV2KF9wX2Rldik7CisJaWYgKCFwX2RldikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXBfZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5wcmVzZW50KQorCQlnb3RvIG91dDsKKworCWlmIChwX2Rldi0+X3JlbW92ZWQpCisJCWdvdG8gb3V0OworCisJaWYgKHBfZGV2LT5zdXNwZW5kZWQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcF9kZXY7Cisgb3V0OgorCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfZGV2X3ByZXNlbnQpOworCisKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrIHBjbWNpYV9idXNfY2FsbGJhY2sgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmV2ZW50ID0gZHNfZXZlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvZHNfaW50ZXJuYWwuaAppbmRleCBkMzU5YmQyLi4zYTJiMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzX2ludGVybmFsLmgKQEAgLTgsNiArOCw4IEBACiAKIHN0cnVjdCBwY21jaWFfZGV2aWNlICogcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbik7CiAKK2V4dGVybiBpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogZXh0ZXJuIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKTsKQEAgLTE1LDcgKzE3LDcgQEAKIGV4dGVybiBpbnQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGNtY2lhX3NldHVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KSB7IHJldHVybjsgfQogc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpIHsgcmV0dXJuIENTX1NVQ0NFU1M7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMgYi9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYwppbmRleCA3OTc5Yzg1Li5kNWYwM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDM1YTkyZDEuLmEyZjA1ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNTEwLDcgKzUwOSw4IEBACiBzdGF0aWMgdV9pbnQgX19pbml0IHRlc3RfaXJxKHVfc2hvcnQgc29jaywgaW50IGlycSkKIHsKICAgICBkZWJ1ZygyLCAiICB0ZXN0aW5nIElTQSBpcnEgJWRcbiIsIGlycSk7Ci0gICAgaWYgKHJlcXVlc3RfaXJxKGlycSwgaTM2NV9jb3VudF9pcnEsIDAsICJzY2FuIiwgaTM2NV9jb3VudF9pcnEpICE9IDApCisgICAgaWYgKHJlcXVlc3RfaXJxKGlycSwgaTM2NV9jb3VudF9pcnEsIFNBX1BST0JFSVJRLCAic2NhbiIsCisJCQlpMzY1X2NvdW50X2lycSkgIT0gMCkKIAlyZXR1cm4gMTsKICAgICBpcnFfaGl0cyA9IDA7IGlycV9zb2NrID0gc29jazsKICAgICBtc2xlZXAoMTApOwpAQCAtNTYyLDcgKzU2Miw3IEBACiAgICAgfSBlbHNlIHsKIAkvKiBGYWxsYmFjazoganVzdCBmaW5kIGludGVycnVwdHMgdGhhdCBhcmVuJ3QgaW4gdXNlICovCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JICAgIGlmICgobWFzazAgJiAoMSA8PCBpKSkgJiYgKF9jaGVja19pcnEoaSwgMCkgPT0gMCkpCisJICAgIGlmICgobWFzazAgJiAoMSA8PCBpKSkgJiYgKF9jaGVja19pcnEoaSwgU0FfUFJPQkVJUlEpID09IDApKQogCQltYXNrMSB8PSAoMSA8PCBpKTsKIAlwcmludGsoImRlZmF1bHQiKTsKIAkvKiBJZiBzY2FuIGZhaWxlZCwgZGVmYXVsdCB0byBwb2xsZWQgc3RhdHVzICovCkBAIC03MjYsNyArNzI2LDcgQEAKIAl1X2ludCBjc19tYXNrID0gbWFzayAmICgoY3NfaXJxKSA/ICgxPDxjc19pcnEpIDogfigxPDwxMikpOwogCWZvciAoY3NfaXJxID0gMTU7IGNzX2lycSA+IDA7IGNzX2lycS0tKQogCSAgICBpZiAoKGNzX21hc2sgJiAoMSA8PCBjc19pcnEpKSAmJgotCQkoX2NoZWNrX2lycShjc19pcnEsIDApID09IDApKQorCQkoX2NoZWNrX2lycShjc19pcnEsIFNBX1BST0JFSVJRKSA9PSAwKSkKIAkJYnJlYWs7CiAJaWYgKGNzX2lycSkgewogCSAgICBncmFiX2lycSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfY29tcGF0LmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfY29tcGF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjE2MWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2NvbXBhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIFBDTUNJQSAxNi1iaXQgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMKLSAqCi0gKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKLSAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCi0gKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgRG9taW5payBCcm9kb3dza2kKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jZGVmaW5lIElOX0NBUkRfU0VSVklDRVMKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KLSNpbmNsdWRlIDxwY21jaWEvY3MuaD4KLSNpbmNsdWRlIDxwY21jaWEvYnVsa21lbS5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlIDxwY21jaWEvZHMuaD4KLSNpbmNsdWRlIDxwY21jaWEvc3MuaD4KLQotI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCi0KLWludCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUpCi17Ci0JcmV0dXJuIHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIHR1cGxlKTsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9maXJzdF90dXBsZSk7Ci0KLWludCBwY21jaWFfZ2V0X25leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCB0dXBsZV90ICp0dXBsZSkKLXsKLQlyZXR1cm4gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfbmV4dF90dXBsZSk7Ci0KLWludCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCB0dXBsZV90ICp0dXBsZSkKLXsKLQlyZXR1cm4gcGNjYXJkX2dldF90dXBsZV9kYXRhKHBfZGV2LT5zb2NrZXQsIHR1cGxlKTsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF90dXBsZV9kYXRhKTsKLQotaW50IHBjbWNpYV9wYXJzZV90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlyZXR1cm4gcGNjYXJkX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9wYXJzZV90dXBsZSk7Ci0KLWludCBwY21jaWFfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY2lzaW5mb190ICppbmZvKQotewotCXJldHVybiBwY2NhcmRfdmFsaWRhdGVfY2lzKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBpbmZvKTsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3ZhbGlkYXRlX2Npcyk7Ci0KLQotaW50IHBjbWNpYV9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY2xpZW50X3JlcV90ICpyZXEpCi17Ci0JcmV0dXJuIHBjY2FyZF9yZXNldF9jYXJkKHBfZGV2LT5zb2NrZXQpOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVzZXRfY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmluZGV4IDgwOTY5ZjcuLjczOGIxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzAsMTAgKzY5LDI2IEBACiAjZGVmaW5lIGRzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpnZXRfcGNtY2lhX2RldmljZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJCXVuc2lnbmVkIGludCBmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKKwkJaWYgKHBfZGV2LT5mdW5jID09IGZ1bmN0aW9uKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQogCiAvKiBiYWNrd2FyZHMtY29tcGF0aWJsZSBhY2Nlc3Npbmcgb2YgZHJpdmVyIC0tLSBieSBuYW1lISAqLwogCi1zdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgKiBnZXRfcGNtY2lhX2RyaXZlciAoZGV2X2luZm9fdCAqZGV2X2luZm8pCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgKmdldF9wY21jaWFfZHJpdmVyKGRldl9pbmZvX3QgKmRldl9pbmZvKQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwpAQCAtMjE0LDcgKzIyOSw3IEBACiAJCQkJCSAqIGJ5IHVzZXJzcGFjZSBiZWZvcmUsIHdlIG5lZWQgdG8KIAkJCQkJICogcmV0dXJuIHRoZSAiaW5zdGFuY2UiLiAqLwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJCQliaW5kX2luZm8tPmluc3RhbmNlID0gcF9kZXYtPmluc3RhbmNlOworCQkJCQliaW5kX2luZm8tPmluc3RhbmNlID0gcF9kZXY7CiAJCQkJCXJldCA9IC1FQlVTWTsKIAkJCQkJZ290byBlcnJfcHV0X21vZHVsZTsKIAkJCQl9IGVsc2UgewpAQCAtMjUzLDkgKzI2OCw5IEBACiAJLyoKIAkgKiBQcmV2ZW50IHRoaXMgcmFjaW5nIHdpdGggYSBjYXJkIGluc2VydGlvbi4KIAkgKi8KLQlkb3duKCZzLT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwogCWJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKTsKLQl1cCgmcy0+c2t0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwogCiAJLyogY2hlY2sgd2hldGhlciB0aGUgZHJpdmVyIGluZGVlZCBtYXRjaGVkLiBJIGRvbid0IGNhcmUgaWYgdGhpcwogCSAqIGlzIHJhY3kgb3Igbm90LCBiZWNhdXNlIGl0IGNhbiBvbmx5IGhhcHBlbiBvbiBjYXJkbWdyIGFjY2VzcwpAQCAtMjg5LDYgKzMwNCw3IEBACiB7CiAJZGV2X25vZGVfdCAqbm9kZTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CisJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKQEAgLTM0MywxNiArMzU5LDE2IEBACiAgZm91bmQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWlmICgoIXBfZGV2LT5pbnN0YW5jZSkgfHwKLQkgICAgKHBfZGV2LT5pbnN0YW5jZS0+c3RhdGUgJiBERVZfQ09ORklHX1BFTkRJTkcpKSB7CisJcF9kcnYgPSB0b19wY21jaWFfZHJ2KHBfZGV2LT5kZXYuZHJpdmVyKTsKKwlpZiAocF9kcnYgJiYgIXBfZGV2LT5fbG9ja2VkKSB7CiAJCXJldCA9IC1FQUdBSU47CiAJCWdvdG8gZXJyX3B1dDsKIAl9CiAKIAlpZiAoZmlyc3QpCi0JCW5vZGUgPSBwX2Rldi0+aW5zdGFuY2UtPmRldjsKKwkJbm9kZSA9IHBfZGV2LT5kZXZfbm9kZTsKIAllbHNlCi0JCWZvciAobm9kZSA9IHBfZGV2LT5pbnN0YW5jZS0+ZGV2OyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkKKwkJZm9yIChub2RlID0gcF9kZXYtPmRldl9ub2RlOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkKIAkJCWlmIChub2RlID09IGJpbmRfaW5mby0+bmV4dCkKIAkJCQlicmVhazsKIAlpZiAoIW5vZGUpIHsKQEAgLTQxMCw3ICs0MjYsNyBAQAogCiAgICAgaWYgKCF3YXJuaW5nX3ByaW50ZWQpIHsKIAkgICAgcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBEZXRlY3RlZCBkZXByZWNhdGVkIFBDTUNJQSBpb2N0bCAiCi0JCQkidXNhZ2UuXG4iKTsKKwkJCSJ1c2FnZSBmcm9tIHByb2Nlc3M6ICVzLlxuIiwgY3VycmVudC0+Y29tbSk7CiAJICAgIHByaW50ayhLRVJOX0lORk8gInBjbWNpYTogVGhpcyBpbnRlcmZhY2Ugd2lsbCBzb29uIGJlIHJlbW92ZWQgZnJvbSAiCiAJCQkidGhlIGtlcm5lbDsgcGxlYXNlIGV4cGVjdCBicmVha2FnZSB1bmxlc3MgeW91IHVwZ3JhZGUgIgogCQkJInRvIG5ldyB0b29scy5cbiIpOwpAQCAtNTgzLDE0ICs1OTksMjAgQEAKIAlpZiAoYnVmLT5jb25maWcuRnVuY3Rpb24gJiYKIAkgICAoYnVmLT5jb25maWcuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkKIAkgICAgcmV0ID0gQ1NfQkFEX0FSR1M7Ci0JZWxzZQotCSAgICByZXQgPSBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzLAotCQkJYnVmLT5jb25maWcuRnVuY3Rpb24sICZidWYtPmNvbmZpZyk7CisJZWxzZSB7CisJICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IGdldF9wY21jaWFfZGV2aWNlKHMsIGJ1Zi0+Y29uZmlnLkZ1bmN0aW9uKTsKKwkgICAgaWYgKHBfZGV2ID09IE5VTEwpCisJCSAgICByZXQgPSBDU19CQURfQVJHUzsKKwkgICAgZWxzZSB7CisJCSAgICByZXQgPSBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzLCBwX2RldiwgJmJ1Zi0+Y29uZmlnKTsKKwkJICAgIHBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKKwkgICAgfQorCX0KIAlicmVhazsKICAgICBjYXNlIERTX0dFVF9GSVJTVF9UVVBMRToKLQlkb3duKCZzLT5za3Rfc2VtKTsKKwltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwogCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7Ci0JdXAoJnMtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKIAlyZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCAmYnVmLT50dXBsZSk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfTkVYVF9UVVBMRToKQEAgLTYwOSwxNiArNjMxLDIzIEBACiAJcmV0ID0gcGNjYXJkX3Jlc2V0X2NhcmQocyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfU1RBVFVTOgotCWlmIChidWYtPnN0YXR1cy5GdW5jdGlvbiAmJgotCSAgIChidWYtPnN0YXR1cy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKQotCSAgICByZXQgPSBDU19CQURfQVJHUzsKLQllbHNlCi0JcmV0ID0gcGNjYXJkX2dldF9zdGF0dXMocywgYnVmLT5zdGF0dXMuRnVuY3Rpb24sICZidWYtPnN0YXR1cyk7Ci0JYnJlYWs7CisJICAgIGlmIChidWYtPnN0YXR1cy5GdW5jdGlvbiAmJgorCQkoYnVmLT5zdGF0dXMuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkKKwkJICAgIHJldCA9IENTX0JBRF9BUkdTOworCSAgICBlbHNlIHsKKwkJICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IGdldF9wY21jaWFfZGV2aWNlKHMsIGJ1Zi0+c3RhdHVzLkZ1bmN0aW9uKTsKKwkJICAgIGlmIChwX2RldiA9PSBOVUxMKQorCQkJICAgIHJldCA9IENTX0JBRF9BUkdTOworCQkgICAgZWxzZSB7CisJCQkgICAgcmV0ID0gcGNjYXJkX2dldF9zdGF0dXMocywgcF9kZXYsICZidWYtPnN0YXR1cyk7CisJCQkgICAgcGNtY2lhX3B1dF9kZXYocF9kZXYpOworCQkgICAgfQorCSAgICB9CisJICAgIGJyZWFrOwogICAgIGNhc2UgRFNfVkFMSURBVEVfQ0lTOgotCWRvd24oJnMtPnNrdF9zZW0pOworCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAJcGNtY2lhX3ZhbGlkYXRlX21lbShzKTsKLQl1cCgmcy0+c2t0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwogCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZidWYtPmNpc2luZm8pOwogCWJyZWFrOwogICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgpAQCAtNjM4LDEyICs2NjcsMTcgQEAKIAkgICAgZXJyID0gLUVQRVJNOwogCSAgICBnb3RvIGZyZWVfb3V0OwogCX0KLQlpZiAoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiAmJgotCSAgIChidWYtPmNvbmZfcmVnLkZ1bmN0aW9uID49IHMtPmZ1bmN0aW9ucykpCi0JICAgIHJldCA9IENTX0JBRF9BUkdTOwotCWVsc2UKLQkgICAgcmV0ID0gcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHMsCi0JCQlidWYtPmNvbmZfcmVnLkZ1bmN0aW9uLCAmYnVmLT5jb25mX3JlZyk7CisKKwlyZXQgPSBDU19CQURfQVJHUzsKKworCWlmICghKGJ1Zi0+Y29uZl9yZWcuRnVuY3Rpb24gJiYKKwkgICAgIChidWYtPmNvbmZfcmVnLkZ1bmN0aW9uID49IHMtPmZ1bmN0aW9ucykpKSB7CisJCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IGdldF9wY21jaWFfZGV2aWNlKHMsIGJ1Zi0+Y29uZl9yZWcuRnVuY3Rpb24pOworCQlpZiAocF9kZXYpIHsKKwkJCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihwX2RldiwgJmJ1Zi0+Y29uZl9yZWcpOworCQkJcGNtY2lhX3B1dF9kZXYocF9kZXYpOworCQl9CisJfQogCWJyZWFrOwogICAgIGNhc2UgRFNfR0VUX0ZJUlNUX1JFR0lPTjoKICAgICBjYXNlIERTX0dFVF9ORVhUX1JFR0lPTjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggODkwMjJhZC4uMzEzMWJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtODksNyArODgsNiBAQAogCX0KIAlpZiAoKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApICYmIHMtPmlvX29mZnNldCkgewogCQkqYmFzZSA9IHMtPmlvX29mZnNldCB8ICgqYmFzZSAmIDB4MGZmZik7Ci0JCXMtPmlvWzBdLkF0dHJpYnV0ZXMgPSBhdHRyOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogQ2hlY2sgZm9yIGFuIGFscmVhZHktYWxsb2NhdGVkIHdpbmRvdyB0aGF0IG11c3QgY29uZmxpY3Qgd2l0aApAQCAtOTcsMzggKzk1LDM2IEBACiAJICogcG90ZW50aWFsIGNvbmZsaWN0cywganVzdCB0aGUgbW9zdCBvYnZpb3VzIG9uZXMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykKLQkJaWYgKChzLT5pb1tpXS5OdW1Qb3J0cyAhPSAwKSAmJgotCQkgICAgKChzLT5pb1tpXS5CYXNlUG9ydCAmIChhbGlnbi0xKSkgPT0gKmJhc2UpKQorCQlpZiAoKHMtPmlvW2ldLnJlcykgJiYKKwkJICAgICgocy0+aW9baV0ucmVzLT5zdGFydCAmIChhbGlnbi0xKSkgPT0gKmJhc2UpKQogCQkJcmV0dXJuIDE7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykgewotCQlpZiAocy0+aW9baV0uTnVtUG9ydHMgPT0gMCkgeworCQlpZiAoIXMtPmlvW2ldLnJlcykgewogCQkJcy0+aW9baV0ucmVzID0gcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKCpiYXNlLCBudW0sIGFsaWduLCBzKTsKIAkJCWlmIChzLT5pb1tpXS5yZXMpIHsKLQkJCQlzLT5pb1tpXS5BdHRyaWJ1dGVzID0gYXR0cjsKLQkJCQlzLT5pb1tpXS5CYXNlUG9ydCA9ICpiYXNlID0gcy0+aW9baV0ucmVzLT5zdGFydDsKLQkJCQlzLT5pb1tpXS5OdW1Qb3J0cyA9IHMtPmlvW2ldLkluVXNlID0gbnVtOworCQkJCSpiYXNlID0gcy0+aW9baV0ucmVzLT5zdGFydDsKKwkJCQlzLT5pb1tpXS5yZXMtPmZsYWdzID0gKHMtPmlvW2ldLnJlcy0+ZmxhZ3MgJiB+SU9SRVNPVVJDRV9CSVRTKSB8IChhdHRyICYgSU9SRVNPVVJDRV9CSVRTKTsKKwkJCQlzLT5pb1tpXS5JblVzZSA9IG51bTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZQogCQkJCXJldHVybiAxOwotCQl9IGVsc2UgaWYgKHMtPmlvW2ldLkF0dHJpYnV0ZXMgIT0gYXR0cikKKwkJfSBlbHNlIGlmICgocy0+aW9baV0ucmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfQklUUykgIT0gKGF0dHIgJiBJT1JFU09VUkNFX0JJVFMpKQogCQkJY29udGludWU7CiAJCS8qIFRyeSB0byBleHRlbmQgdG9wIG9mIHdpbmRvdyAqLwotCQl0cnkgPSBzLT5pb1tpXS5CYXNlUG9ydCArIHMtPmlvW2ldLk51bVBvcnRzOworCQl0cnkgPSBzLT5pb1tpXS5yZXMtPmVuZCArIDE7CiAJCWlmICgoKmJhc2UgPT0gMCkgfHwgKCpiYXNlID09IHRyeSkpCiAJCQlpZiAocGNtY2lhX2FkanVzdF9pb19yZWdpb24ocy0+aW9baV0ucmVzLCBzLT5pb1tpXS5yZXMtPnN0YXJ0LAogCQkJCQkJICAgIHMtPmlvW2ldLnJlcy0+ZW5kICsgbnVtLCBzKSA9PSAwKSB7CiAJCQkJKmJhc2UgPSB0cnk7Ci0JCQkJcy0+aW9baV0uTnVtUG9ydHMgKz0gbnVtOwogCQkJCXMtPmlvW2ldLkluVXNlICs9IG51bTsKIAkJCQlicmVhazsKIAkJCX0KIAkJLyogVHJ5IHRvIGV4dGVuZCBib3R0b20gb2Ygd2luZG93ICovCi0JCXRyeSA9IHMtPmlvW2ldLkJhc2VQb3J0IC0gbnVtOworCQl0cnkgPSBzLT5pb1tpXS5yZXMtPnN0YXJ0IC0gbnVtOwogCQlpZiAoKCpiYXNlID09IDApIHx8ICgqYmFzZSA9PSB0cnkpKQogCQkJaWYgKHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHMtPmlvW2ldLnJlcywgcy0+aW9baV0ucmVzLT5zdGFydCAtIG51bSwKIAkJCQkJCSAgICBzLT5pb1tpXS5yZXMtPmVuZCwgcykgPT0gMCkgewotCQkJCXMtPmlvW2ldLkJhc2VQb3J0ID0gKmJhc2UgPSB0cnk7Ci0JCQkJcy0+aW9baV0uTnVtUG9ydHMgKz0gbnVtOworCQkJCSpiYXNlID0gdHJ5OwogCQkJCXMtPmlvW2ldLkluVXNlICs9IG51bTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE0MywxMiArMTM5LDEzIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dJTjsgaSsrKSB7Ci0JCWlmICgocy0+aW9baV0uQmFzZVBvcnQgPD0gYmFzZSkgJiYKLQkJICAgIChzLT5pb1tpXS5CYXNlUG9ydCtzLT5pb1tpXS5OdW1Qb3J0cyA+PSBiYXNlK251bSkpIHsKKwkJaWYgKCFzLT5pb1tpXS5yZXMpCisJCQljb250aW51ZTsKKwkJaWYgKChzLT5pb1tpXS5yZXMtPnN0YXJ0IDw9IGJhc2UpICYmCisJCSAgICAocy0+aW9baV0ucmVzLT5lbmQgPj0gYmFzZStudW0tMSkpIHsKIAkJCXMtPmlvW2ldLkluVXNlIC09IG51bTsKIAkJCS8qIEZyZWUgdGhlIHdpbmRvdyBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyBpdCAqLwogCQkJaWYgKHMtPmlvW2ldLkluVXNlID09IDApIHsKLQkJCQlzLT5pb1tpXS5OdW1Qb3J0cyA9IDA7CiAJCQkJcmVsZWFzZV9yZXNvdXJjZShzLT5pb1tpXS5yZXMpOwogCQkJCWtmcmVlKHMtPmlvW2ldLnJlcyk7CiAJCQkJcy0+aW9baV0ucmVzID0gTlVMTDsKQEAgLTE2NSwyMSArMTYyLDE5IEBACiAgKiB0aGlzIGFuZCB0aGUgdHVwbGUgcmVhZGluZyBzZXJ2aWNlcy4KICAqLwogCi1pbnQgcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCQkgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAoraW50IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCQkJCSBjb25mX3JlZ190ICpyZWcpCiB7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY29uZmlnX3QgKmM7CiAJaW50IGFkZHI7CiAJdV9jaGFyIHZhbDsKIAotCWlmICghcyB8fCAhcy0+Y29uZmlnKQorCWlmICghcF9kZXYgfHwgIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpCiAJCXJldHVybiBDU19OT19DQVJEOwogCi0JYyA9ICZzLT5jb25maWdbZnVuY3Rpb25dOwotCi0JaWYgKGMgPT0gTlVMTCkKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJcyA9IHBfZGV2LT5zb2NrZXQ7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKQogCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CkBAIC0yMDAsMjAgKzE5NSwxMiBAQAogCQlicmVhazsKIAl9CiAJcmV0dXJuIENTX1NVQ0NFU1M7Ci19IC8qIHBjY2FyZF9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlciAqLwotCi1pbnQgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKLQkJCQkJIGNvbmZfcmVnX3QgKnJlZykKLXsKLQlyZXR1cm4gcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHBfZGV2LT5zb2NrZXQsCi0JCQkJCQkgICAgcF9kZXYtPmZ1bmMsIHJlZyk7Ci19Cit9IC8qIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlciAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIpOwogCiAKLQogaW50IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCSAgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAorCQkJCSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQogewogCWNvbmZpZ190ICpjOwpAQCAtMjIxLDcgKzIwOCw2IEBACiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiBDU19OT19DQVJEOwogCi0JY29uZmlnLT5GdW5jdGlvbiA9IGZ1bmN0aW9uOwogCiAjaWZkZWYgQ09ORklHX0NBUkRCVVMKIAlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewpAQCAtMjM1LDE0ICsyMjEsMjIgQEAKIAkJCWNvbmZpZy0+QXNzaWduZWRJUlEgPSBzLT5pcnEuQXNzaWduZWRJUlE7CiAJCQlpZiAoY29uZmlnLT5Bc3NpZ25lZElSUSkKIAkJCQljb25maWctPkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCQkJY29uZmlnLT5CYXNlUG9ydDEgPSBzLT5pb1swXS5CYXNlUG9ydDsKLQkJCWNvbmZpZy0+TnVtUG9ydHMxID0gcy0+aW9bMF0uTnVtUG9ydHM7CisJCQlpZiAocy0+aW9bMF0ucmVzKSB7CisJCQkJY29uZmlnLT5CYXNlUG9ydDEgPSBzLT5pb1swXS5yZXMtPnN0YXJ0OworCQkJCWNvbmZpZy0+TnVtUG9ydHMxID0gcy0+aW9bMF0ucmVzLT5lbmQgLSBjb25maWctPkJhc2VQb3J0MSArIDE7CisJCQl9CiAJCX0KIAkJcmV0dXJuIENTX1NVQ0NFU1M7CiAJfQogI2VuZGlmCiAKLQljID0gKHMtPmNvbmZpZyAhPSBOVUxMKSA/ICZzLT5jb25maWdbZnVuY3Rpb25dIDogTlVMTDsKKwlpZiAocF9kZXYpIHsKKwkJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJCWNvbmZpZy0+RnVuY3Rpb24gPSBwX2Rldi0+ZnVuYzsKKwl9IGVsc2UgeworCQljID0gTlVMTDsKKwkJY29uZmlnLT5GdW5jdGlvbiA9IDA7CisJfQogCiAJaWYgKChjID09IE5VTEwpIHx8ICEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkgewogCQljb25maWctPkF0dHJpYnV0ZXMgPSAwOwpAQCAtMjcxLDcgKzI2NSw3IEBACiBpbnQgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQogewotCXJldHVybiBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKKwlyZXR1cm4gcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8ocF9kZXYtPnNvY2tldCwgcF9kZXYsCiAJCQkJCSAgICAgY29uZmlnKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8pOwpAQCAtMzE3LDcgKzMxMSw3IEBACiAgKiBTb2NrZXRTdGF0ZSB5ZXQ6IEkgaGF2ZW4ndCBzZWVuIGFueSBwb2ludCBmb3IgaXQuCiAgKi8KIAotaW50IHBjY2FyZF9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCitpbnQgcGNjYXJkX2dldF9zdGF0dXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJICAgICAgY3Nfc3RhdHVzX3QgKnN0YXR1cykKIHsKIAljb25maWdfdCAqYzsKQEAgLTMzNCwxMSArMzI4LDEyIEBACiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiBDU19OT19DQVJEOwogCi0JYyA9IChzLT5jb25maWcgIT0gTlVMTCkgPyAmcy0+Y29uZmlnW2Z1bmN0aW9uXSA6IE5VTEw7CisJYyA9IChwX2RldikgPyBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnIDogTlVMTDsKKwogCWlmICgoYyAhPSBOVUxMKSAmJiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSAmJgogCSAgICAoYy0+SW50VHlwZSAmIChJTlRfTUVNT1JZX0FORF9JTyB8IElOVF9aT09NRURfVklERU8pKSkgewogCQl1X2NoYXIgcmVnOwotCQlpZiAoYy0+UHJlc2VudCAmIFBSRVNFTlRfUElOX1JFUExBQ0UpIHsKKwkJaWYgKGMtPkNhcmRWYWx1ZXMgJiBQUkVTRU5UX1BJTl9SRVBMQUNFKSB7CiAJCQlwY21jaWFfcmVhZF9jaXNfbWVtKHMsIDEsIChjLT5Db25maWdCYXNlK0NJU1JFR19QUlIpPj4xLCAxLCAmcmVnKTsKIAkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9CiAJCQkJKHJlZyAmIFBSUl9XUF9TVEFUVVMpID8gQ1NfRVZFTlRfV1JJVEVfUFJPVEVDVCA6IDA7CkBAIC0zNTIsNyArMzQ3LDcgQEAKIAkJCS8qIE5vIFBSUj8gIFRoZW4gYXNzdW1lIHdlJ3JlIGFsd2F5cyByZWFkeSAqLwogCQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0gQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFOwogCQl9Ci0JCWlmIChjLT5QcmVzZW50ICYgUFJFU0VOVF9FWFRfU1RBVFVTKSB7CisJCWlmIChjLT5DYXJkVmFsdWVzICYgUFJFU0VOVF9FWFRfU1RBVFVTKSB7CiAJCQlwY21jaWFfcmVhZF9jaXNfbWVtKHMsIDEsIChjLT5Db25maWdCYXNlK0NJU1JFR19FU1IpPj4xLCAxLCAmcmVnKTsKIAkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9CiAJCQkJKHJlZyAmIEVTUl9SRVFfQVRUTikgPyBDU19FVkVOVF9SRVFVRVNUX0FUVEVOVElPTiA6IDA7CkBAIC0zNzAsMTEgKzM2NSw5IEBACiAJcmV0dXJuIENTX1NVQ0NFU1M7CiB9IC8qIHBjY2FyZF9nZXRfc3RhdHVzICovCiAKLWludCBwY21jaWFfZ2V0X3N0YXR1cyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjc19zdGF0dXNfdCAqc3RhdHVzKQoraW50IHBjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY3Nfc3RhdHVzX3QgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQlzID0gU09DS0VUKGhhbmRsZSk7Ci0JcmV0dXJuIHBjY2FyZF9nZXRfc3RhdHVzKHMsIGhhbmRsZS0+ZnVuYywgc3RhdHVzKTsKKwlyZXR1cm4gcGNjYXJkX2dldF9zdGF0dXMocF9kZXYtPnNvY2tldCwgcF9kZXYsIHN0YXR1cyk7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfc3RhdHVzKTsKIApAQCAtNDIyLDcgKzQxNSw4IEBACiAJY29uZmlnX3QgKmM7CiAKIAlzID0gcF9kZXYtPnNvY2tldDsKLQljID0gQ09ORklHKHBfZGV2KTsKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKQpAQCAtNDU0LDYgKzQ0OCwyOCBAQAogCQkgICAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRCkpCiAJCXJldHVybiBDU19CQURfVlBQOwogCisJaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfSU9fQ0hBTkdFX1dJRFRIKSB7CisJCXBjY2FyZF9pb19tYXAgaW9fb2ZmID0geyAwLCAwLCAwLCAwLCAxIH07CisJCXBjY2FyZF9pb19tYXAgaW9fb247CisJCWludCBpOworCisJCWlvX29uLnNwZWVkID0gaW9fc3BlZWQ7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspIHsKKwkJCWlmICghcy0+aW9baV0ucmVzKQorCQkJCWNvbnRpbnVlOworCQkJaW9fb2ZmLm1hcCA9IGk7CisJCQlpb19vbi5tYXAgPSBpOworCisJCQlpb19vbi5mbGFncyA9IE1BUF9BQ1RJVkUgfCBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWlvX29uLnN0YXJ0ID0gcy0+aW9baV0ucmVzLT5zdGFydDsKKwkJCWlvX29uLnN0b3AgPSBzLT5pb1tpXS5yZXMtPmVuZDsKKworCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpb19vZmYpOworCQkJbWRlbGF5KDQwKTsKKwkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW9fb24pOworCQl9CisJfQorCiAJcmV0dXJuIENTX1NVQ0NFU1M7CiB9IC8qIG1vZGlmeV9jb25maWd1cmF0aW9uICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbik7CkBAIC00NjMsMjMgKzQ3OSwyMyBAQAogewogCXBjY2FyZF9pb19tYXAgaW8gPSB7IDAsIDAsIDAsIDAsIDEgfTsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CisJY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWludCBpOwogCi0JaWYgKCEocF9kZXYtPnN0YXRlICYgQ0xJRU5UX0NPTkZJR19MT0NLRUQpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlwX2Rldi0+c3RhdGUgJj0gfkNMSUVOVF9DT05GSUdfTE9DS0VEOwotCi0JaWYgKCEocF9kZXYtPnN0YXRlICYgQ0xJRU5UX1NUQUxFKSkgewotCQljb25maWdfdCAqYyA9IENPTkZJRyhwX2Rldik7CisJaWYgKHBfZGV2LT5fbG9ja2VkKSB7CisJCXBfZGV2LT5fbG9ja2VkID0gMDsKIAkJaWYgKC0tKHMtPmxvY2tfY291bnQpID09IDApIHsKIAkJCXMtPnNvY2tldC5mbGFncyA9IFNTX09VVFBVVF9FTkE7ICAgLyogSXMgdGhpcyBjb3JyZWN0PyAqLwogCQkJcy0+c29ja2V0LlZwcCA9IDA7CiAJCQlzLT5zb2NrZXQuaW9faXJxID0gMDsKIAkJCXMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KTsKIAkJfQorCX0KKwlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSB7CisJCWMtPnN0YXRlICY9IH5DT05GSUdfTE9DS0VEOwogCQlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKQogCQkJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykgewotCQkJCWlmIChzLT5pb1tpXS5OdW1Qb3J0cyA9PSAwKQorCQkJCWlmICghcy0+aW9baV0ucmVzKQogCQkJCQljb250aW51ZTsKIAkJCQlzLT5pb1tpXS5Db25maWctLTsKIAkJCQlpZiAocy0+aW9baV0uQ29uZmlnICE9IDApCkBAIC00ODcsMTIgKzUwMywxMCBAQAogCQkJCWlvLm1hcCA9IGk7CiAJCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpbyk7CiAJCQl9Ci0JCWMtPnN0YXRlICY9IH5DT05GSUdfTE9DS0VEOwogCX0KIAogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24pOwogCiAKIC8qKiBwY21jaWFfcmVsZWFzZV9pbwpAQCAtNTAzLDI1ICs1MTcsMjMgQEAKICAqIGRvbid0IGJvdGhlciBjaGVja2luZyB0aGUgcG9ydCByYW5nZXMgYWdhaW5zdCB0aGUgY3VycmVudCBzb2NrZXQKICAqIHZhbHVlcy4KICAqLwotaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSkKK3N0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKKwljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKLQlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfSU9fUkVRKSkKKwlpZiAoIXBfZGV2LT5faW8gKQogCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlwX2Rldi0+c3RhdGUgJj0gfkNMSUVOVF9JT19SRVE7CiAKLQlpZiAoIShwX2Rldi0+c3RhdGUgJiBDTElFTlRfU1RBTEUpKSB7Ci0JCWNvbmZpZ190ICpjID0gQ09ORklHKHBfZGV2KTsKLQkJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKLQkJCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKLQkJaWYgKChjLT5pby5CYXNlUG9ydDEgIT0gcmVxLT5CYXNlUG9ydDEpIHx8Ci0JCSAgICAoYy0+aW8uTnVtUG9ydHMxICE9IHJlcS0+TnVtUG9ydHMxKSB8fAotCQkgICAgKGMtPmlvLkJhc2VQb3J0MiAhPSByZXEtPkJhc2VQb3J0MikgfHwKLQkJICAgIChjLT5pby5OdW1Qb3J0czIgIT0gcmVxLT5OdW1Qb3J0czIpKQotCQkJcmV0dXJuIENTX0JBRF9BUkdTOwotCQljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKLQl9CisJcF9kZXYtPl9pbyA9IDA7CisKKwlpZiAoKGMtPmlvLkJhc2VQb3J0MSAhPSByZXEtPkJhc2VQb3J0MSkgfHwKKwkgICAgKGMtPmlvLk51bVBvcnRzMSAhPSByZXEtPk51bVBvcnRzMSkgfHwKKwkgICAgKGMtPmlvLkJhc2VQb3J0MiAhPSByZXEtPkJhc2VQb3J0MikgfHwKKwkgICAgKGMtPmlvLk51bVBvcnRzMiAhPSByZXEtPk51bVBvcnRzMikpCisJCXJldHVybiBDU19CQURfQVJHUzsKKworCWMtPnN0YXRlICY9IH5DT05GSUdfSU9fUkVROwogCiAJcmVsZWFzZV9pb19zcGFjZShzLCByZXEtPkJhc2VQb3J0MSwgcmVxLT5OdW1Qb3J0czEpOwogCWlmIChyZXEtPk51bVBvcnRzMikKQEAgLTUyOSwyOCArNTQxLDI2IEBACiAKIAlyZXR1cm4gQ1NfU1VDQ0VTUzsKIH0gLyogcGNtY2lhX3JlbGVhc2VfaW8gKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlbGVhc2VfaW8pOwogCiAKLWludCBwY21jaWFfcmVsZWFzZV9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSkKK3N0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwotCWlmICghKHBfZGV2LT5zdGF0ZSAmIENMSUVOVF9JUlFfUkVRKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7Ci0JcF9kZXYtPnN0YXRlICY9IH5DTElFTlRfSVJRX1JFUTsKKwljb25maWdfdCAqYz0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAotCWlmICghKHBfZGV2LT5zdGF0ZSAmIENMSUVOVF9TVEFMRSkpIHsKLQkJY29uZmlnX3QgKmMgPSBDT05GSUcocF9kZXYpOwotCQlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQotCQkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwotCQlpZiAoYy0+aXJxLkF0dHJpYnV0ZXMgIT0gcmVxLT5BdHRyaWJ1dGVzKQotCQkJcmV0dXJuIENTX0JBRF9BVFRSSUJVVEU7Ci0JCWlmIChzLT5pcnEuQXNzaWduZWRJUlEgIT0gcmVxLT5Bc3NpZ25lZElSUSkKLQkJCXJldHVybiBDU19CQURfSVJROwotCQlpZiAoLS1zLT5pcnEuQ29uZmlnID09IDApIHsKLQkJCWMtPnN0YXRlICY9IH5DT05GSUdfSVJRX1JFUTsKLQkJCXMtPmlycS5Bc3NpZ25lZElSUSA9IDA7Ci0JCX0KKwlpZiAoIXBfZGV2LT5faXJxKQorCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKKwlwX2Rldi0+X2lycSA9IDA7CisKKwlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQorCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CisJaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykKKwkJcmV0dXJuIENTX0JBRF9BVFRSSUJVVEU7CisJaWYgKHMtPmlycS5Bc3NpZ25lZElSUSAhPSByZXEtPkFzc2lnbmVkSVJRKQorCQlyZXR1cm4gQ1NfQkFEX0lSUTsKKwlpZiAoLS1zLT5pcnEuQ29uZmlnID09IDApIHsKKwkJYy0+c3RhdGUgJj0gfkNPTkZJR19JUlFfUkVROworCQlzLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAogCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiBJUlFfSEFORExFX1BSRVNFTlQpIHsKQEAgLTU2Myw3ICs1NzMsNiBAQAogCiAJcmV0dXJuIENTX1NVQ0NFU1M7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lycSAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVsZWFzZV9pcnEpOwogCiAKIGludCBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luZG93X2hhbmRsZV90IHdpbikKQEAgLTU3Myw3ICs1ODIsNyBAQAogCWlmICgod2luID09IE5VTEwpIHx8ICh3aW4tPm1hZ2ljICE9IFdJTkRPV19NQUdJQykpCiAJCXJldHVybiBDU19CQURfSEFORExFOwogCXMgPSB3aW4tPnNvY2s7Ci0JaWYgKCEod2luLT5oYW5kbGUtPnN0YXRlICYgQ0xJRU5UX1dJTl9SRVEod2luLT5pbmRleCkpKQorCWlmICghKHdpbi0+aGFuZGxlLT5fd2luICYgQ0xJRU5UX1dJTl9SRVEod2luLT5pbmRleCkpKQogCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKIAogCS8qIFNodXQgZG93biBtZW1vcnkgd2luZG93ICovCkBAIC01ODcsNyArNTk2LDcgQEAKIAkJa2ZyZWUod2luLT5jdGwucmVzKTsKIAkJd2luLT5jdGwucmVzID0gTlVMTDsKIAl9Ci0Jd2luLT5oYW5kbGUtPnN0YXRlICY9IH5DTElFTlRfV0lOX1JFUSh3aW4tPmluZGV4KTsKKwl3aW4tPmhhbmRsZS0+X3dpbiAmPSB+Q0xJRU5UX1dJTl9SRVEod2luLT5pbmRleCk7CiAKIAl3aW4tPm1hZ2ljID0gMDsKIApAQCAtNjEwLDE2ICs2MTksMTIgQEAKIAogCWlmIChyZXEtPkludFR5cGUgJiBJTlRfQ0FSREJVUykKIAkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7Ci0JYyA9IENPTkZJRyhwX2Rldik7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKIAkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwogCiAJLyogRG8gcG93ZXIgY29udHJvbC4gIFdlIGRvbid0IGFsbG93IGNoYW5nZXMgaW4gVmNjLiAqLwotCWlmIChzLT5zb2NrZXQuVmNjICE9IHJlcS0+VmNjKQotCQlyZXR1cm4gQ1NfQkFEX1ZDQzsKLQlpZiAocmVxLT5WcHAxICE9IHJlcS0+VnBwMikKLQkJcmV0dXJuIENTX0JBRF9WUFA7Ci0Jcy0+c29ja2V0LlZwcCA9IHJlcS0+VnBwMTsKKwlzLT5zb2NrZXQuVnBwID0gcmVxLT5WcHA7CiAJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkKIAkJcmV0dXJuIENTX0JBRF9WUFA7CiAKQEAgLTY0Myw3ICs2NDgsNyBAQAogCiAJLyogU2V0IHVwIENJUyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCWJhc2UgPSBjLT5Db25maWdCYXNlID0gcmVxLT5Db25maWdCYXNlOwotCWMtPlByZXNlbnQgPSBjLT5DYXJkVmFsdWVzID0gcmVxLT5QcmVzZW50OworCWMtPkNhcmRWYWx1ZXMgPSByZXEtPlByZXNlbnQ7CiAJaWYgKHJlcS0+UHJlc2VudCAmIFBSRVNFTlRfQ09QWSkgewogCQljLT5Db3B5ID0gcmVxLT5Db3B5OwogCQlwY21jaWFfd3JpdGVfY2lzX21lbShzLCAxLCAoYmFzZSArIENJU1JFR19TQ1IpPj4xLCAxLCAmYy0+Q29weSk7CkBAIC02OTAsMTAgKzY5NSwxMCBAQAogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpIHsKIAkJaW9tYXAuc3BlZWQgPSBpb19zcGVlZDsKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykKLQkJCWlmIChzLT5pb1tpXS5OdW1Qb3J0cyAhPSAwKSB7CisJCQlpZiAocy0+aW9baV0ucmVzKSB7CiAJCQkJaW9tYXAubWFwID0gaTsKIAkJCQlpb21hcC5mbGFncyA9IE1BUF9BQ1RJVkU7Ci0JCQkJc3dpdGNoIChzLT5pb1tpXS5BdHRyaWJ1dGVzICYgSU9fREFUQV9QQVRIX1dJRFRIKSB7CisJCQkJc3dpdGNoIChzLT5pb1tpXS5yZXMtPmZsYWdzICYgSU9fREFUQV9QQVRIX1dJRFRIKSB7CiAJCQkJY2FzZSBJT19EQVRBX1BBVEhfV0lEVEhfMTY6CiAJCQkJCWlvbWFwLmZsYWdzIHw9IE1BUF8xNkJJVDsgYnJlYWs7CiAJCQkJY2FzZSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzoKQEAgLTcwMSwxNSArNzA2LDE1IEBACiAJCQkJZGVmYXVsdDoKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCWlvbWFwLnN0YXJ0ID0gcy0+aW9baV0uQmFzZVBvcnQ7Ci0JCQkJaW9tYXAuc3RvcCA9IGlvbWFwLnN0YXJ0ICsgcy0+aW9baV0uTnVtUG9ydHMgLSAxOworCQkJCWlvbWFwLnN0YXJ0ID0gcy0+aW9baV0ucmVzLT5zdGFydDsKKwkJCQlpb21hcC5zdG9wID0gcy0+aW9baV0ucmVzLT5lbmQ7CiAJCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpb21hcCk7CiAJCQkJcy0+aW9baV0uQ29uZmlnKys7CiAJCQl9CiAJfQogCiAJYy0+c3RhdGUgfD0gQ09ORklHX0xPQ0tFRDsKLQlwX2Rldi0+c3RhdGUgfD0gQ0xJRU5UX0NPTkZJR19MT0NLRUQ7CisJcF9kZXYtPl9sb2NrZWQgPSAxOwogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24pOwpAQCAtNzMwLDcgKzczNSw3IEBACiAKIAlpZiAoIXJlcSkKIAkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7Ci0JYyA9IENPTkZJRyhwX2Rldik7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKIAkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpCkBAIC03NTUsNyArNzYwLDcgQEAKIAogCWMtPmlvID0gKnJlcTsKIAljLT5zdGF0ZSB8PSBDT05GSUdfSU9fUkVROwotCXBfZGV2LT5zdGF0ZSB8PSBDTElFTlRfSU9fUkVROworCXBfZGV2LT5faW8gPSAxOwogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBwY21jaWFfcmVxdWVzdF9pbyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9pbyk7CkBAIC03ODYsNyArNzkxLDcgQEAKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKLQljID0gQ09ORklHKHBfZGV2KTsKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQogCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lSUV9SRVEpCkBAIC04NTEsNyArODU2LDcgQEAKIAlzLT5pcnEuQ29uZmlnKys7CiAKIAljLT5zdGF0ZSB8PSBDT05GSUdfSVJRX1JFUTsKLQlwX2Rldi0+c3RhdGUgfD0gQ0xJRU5UX0lSUV9SRVE7CisJcF9kZXYtPl9pcnEgPSAxOwogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQogCXBjbWNpYV91c2VkX2lycVtpcnFdKys7CkBAIC05MTEsNyArOTE2LDcgQEAKIAkJaWYgKCF3aW4tPmN0bC5yZXMpCiAJCQlyZXR1cm4gQ1NfSU5fVVNFOwogCX0KLQkoKnBfZGV2KS0+c3RhdGUgfD0gQ0xJRU5UX1dJTl9SRVEodyk7CisJKCpwX2RldiktPl93aW4gfD0gQ0xJRU5UX1dJTl9SRVEodyk7CiAKIAkvKiBDb25maWd1cmUgdGhlIHNvY2tldCBjb250cm9sbGVyICovCiAJd2luLT5jdGwubWFwID0gdysxOwpAQCAtOTQxLDMgKzk0NiwxMiBAQAogCXJldHVybiBDU19TVUNDRVNTOwogfSAvKiBwY21jaWFfcmVxdWVzdF93aW5kb3cgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3Rfd2luZG93KTsKKwordm9pZCBwY21jaWFfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KSB7CisJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihwX2Rldik7CisJcGNtY2lhX3JlbGVhc2VfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXBjbWNpYV9yZWxlYXNlX2lycShwX2RldiwgJnBfZGV2LT5pcnEpOworCWlmICgmcF9kZXYtPndpbikKKwkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LT53aW4pOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfZGlzYWJsZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwppbmRleCBmMjc4OWFmLi4yNDdhYjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwpAQCAtOCw3ICs4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTkwLDcgKzU4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1X2ludCBfX2luaXQgcGQ2NzI5X2lzYV9zY2FuKHZvaWQpCitzdGF0aWMgdV9pbnQgX19kZXZpbml0IHBkNjcyOV9pc2Ffc2Nhbih2b2lkKQogewogCXVfaW50IG1hc2swLCBtYXNrID0gMDsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCmluZGV4IGZkMzY0NzMuLmI3YjllMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYwpAQCAtMjYsMTQgKzI2LDYgQEAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKICNkZWZpbmUJTk9fS0VFUF9WUyAweDAwMDEKLQotLyogUENNQ0lBIHRvIFNjb29wIGxpbmthZ2UKLQotICAgVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gbGluayBtdWx0aXBsZSBzY29vcCBkZXZpY2VzIGludG8gb25lCi0gICBzaW5nbGUgZW50aXR5IGZvciB0aGUgcHhhMnh4X3BjbWNpYSBkZXZpY2Ugc28gdGhpcyBzdHJ1Y3R1cmUKLSAgIGlzIHVzZWQgd2hpY2ggaXMgc2V0dXAgYnkgdGhlIHBsYXRmb3JtIGNvZGUKLSovCi1zdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2NvbmZpZyAqcGxhdGZvcm1fc2Nvb3BfY29uZmlnOwogI2RlZmluZSBTQ09PUF9ERVYgcGxhdGZvcm1fc2Nvb3BfY29uZmlnLT5kZXZzCiAKIHN0YXRpYyB2b2lkIHNoYXJwc2xfcGNtY2lhX2luaXRfcmVzZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwppbmRleCA1MTQ2MDkzLi44MWRmYzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIApAQCAtMjIsNiArMjEsOCBAQAogI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCiAKIAorI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKKwogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAogc3RhdGljIGludCBhZGp1c3RfaXJxKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBhZGp1c3RfdCAqYWRqKQpAQCAtOTgsNiArOTksOCBAQAogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfYWRqdXN0X3Jlc291cmNlX2luZm8pOwogCisjZW5kaWYKKwogaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJaWYgKHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKaW5kZXggNTMwMWFjNi4uMGY4YjE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC02MSw3ICs2MCw3IEBACiAJdW5zaWduZWQgaW50CQkJcnNyY19tZW1fcHJvYmU7CiB9OwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChyc3JjX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJzcmNfbXV0ZXgpOwogI2RlZmluZSBNRU1fUFJPQkVfTE9XCSgxIDw8IDApCiAjZGVmaW5lIE1FTV9QUk9CRV9ISUdICSgxIDw8IDEpCiAKQEAgLTQ4NCw3ICs0ODMsNyBAQAogCiAKIC8qCi0gKiBMb2NraW5nIG5vdGU6IE11c3QgYmUgY2FsbGVkIHdpdGggc2t0X3NlbSBoZWxkIQorICogTG9ja2luZyBub3RlOiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkIQogICovCiBzdGF0aWMgaW50IHBjbWNpYV9ub25zdGF0aWNfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewpAQCAtNDk1LDcgKzQ5NCw3IEBACiAJaWYgKCFwcm9iZV9tZW0pCiAJCXJldHVybiAwOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCiAJaWYgKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1BBR0VfUkVHUykKIAkJcHJvYmVfbWFzayA9IE1FTV9QUk9CRV9ISUdIOwpAQCAtNTA3LDcgKzUwNiw3IEBACiAJCQlzX2RhdGEtPnJzcmNfbWVtX3Byb2JlIHw9IHByb2JlX21hc2s7CiAJfQogCi0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTU4NSw3ICs1ODQsNyBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCWRvd24oJnJzcmNfc2VtKTsKKwltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlmb3IgKG0gPSBzX2RhdGEtPmlvX2RiLm5leHQ7IG0gIT0gJnNfZGF0YS0+aW9fZGI7IG0gPSBtLT5uZXh0KSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtLT5iYXNlOwogCQl1bnNpZ25lZCBsb25nIGVuZCA9IG0tPmJhc2UgKyBtLT5udW0gLSAxOwpAQCAtNTk2LDcgKzU5NSw3IEBACiAJCXJldCA9IGFkanVzdF9yZXNvdXJjZShyZXMsIHJfc3RhcnQsIHJfZW5kIC0gcl9zdGFydCArIDEpOwogCQlicmVhazsKIAl9Ci0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYzMCw3ICs2MjksNyBAQAogCWRhdGEub2Zmc2V0ID0gYmFzZSAmIGRhdGEubWFzazsKIAlkYXRhLm1hcCA9ICZzX2RhdGEtPmlvX2RiOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAocy0+Y2JfZGV2KSB7CiAJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgbnVtLCAxLApAQCAtNjM5LDcgKzYzOCw3IEBACiAjZW5kaWYKIAkJcmV0ID0gYWxsb2NhdGVfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcmVzLCBudW0sIG1pbiwgfjBVTCwKIAkJCQkJMSwgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJaWYgKHJldCAhPSAwKSB7CiAJCWtmcmVlKHJlcyk7CkBAIC02NzIsNyArNjcxLDcgQEAKIAkJCW1pbiA9IDB4MTAwMDAwVUwgKyBiYXNlOwogCQl9CiAKLQkJZG93bigmcnNyY19zZW0pOworCQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKICNpZmRlZiBDT05GSUdfUENJCiAJCWlmIChzLT5jYl9kZXYpIHsKIAkJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgbnVtLApAQCAtNjgyLDcgKzY4MSw3IEBACiAjZW5kaWYKIAkJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzLCBudW0sIG1pbiwKIAkJCQkJCW1heCwgMSwgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JCXVwKCZyc3JjX3NlbSk7CisJCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAJCWlmIChyZXQgPT0gMCB8fCBsb3cpCiAJCQlicmVhazsKIAkJbG93ID0gMTsKQEAgLTcwNSw3ICs3MDQsNyBAQAogCWlmIChlbmQgPCBzdGFydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZyc3JjX3NlbSk7CisJbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFERF9NQU5BR0VEX1JFU09VUkNFOgogCQlyZXQgPSBhZGRfaW50ZXJ2YWwoJmRhdGEtPm1lbV9kYiwgc3RhcnQsIHNpemUpOwpAQCAtNzIzLDcgKzcyMiw3IEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc0MSw3ICs3NDAsNyBAQAogCWlmIChlbmQgPiBJT19TUEFDRV9MSU1JVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZyc3JjX3NlbSk7CisJbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFERF9NQU5BR0VEX1JFU09VUkNFOgogCQlpZiAoYWRkX2ludGVydmFsKCZkYXRhLT5pb19kYiwgc3RhcnQsIHNpemUpICE9IDApIHsKQEAgLTc2MCw3ICs3NTksNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTg2Nyw3ICs4NjYsNyBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJc3RydWN0IHJlc291cmNlX21hcCAqcCwgKnE7CiAKLQlkb3duKCZyc3JjX3NlbSk7CisJbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJZm9yIChwID0gZGF0YS0+bWVtX2RiLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYjsgcCA9IHEpIHsKIAkJcSA9IHAtPm5leHQ7CiAJCWtmcmVlKHApOwpAQCAtODc2LDcgKzg3NSw3IEBACiAJCXEgPSBwLT5uZXh0OwogCQlrZnJlZShwKTsKIAl9Ci0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogfQogCiAKQEAgLTkwMSw3ICs5MDAsNyBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnA7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCWRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCiAJZm9yIChwID0gZGF0YS0+aW9fZGIubmV4dDsgcCAhPSAmZGF0YS0+aW9fZGI7IHAgPSBwLT5uZXh0KSB7CkBAIC05MTMsNyArOTEyLDcgQEAKIAkJCQkgKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOwogCX0KIAotCXVwKCZyc3JjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTk1Myw3ICs5NTIsNyBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnA7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JZG93bigmcnNyY19zZW0pOworCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCWRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCiAJZm9yIChwID0gZGF0YS0+bWVtX2RiLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYjsgcCA9IHAtPm5leHQpIHsKQEAgLTk2NSw3ICs5NjQsNyBAQAogCQkJCSAoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCi0JdXAoJnJzcmNfc2VtKTsKKwltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCXJldHVybiAocmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2NlcmYuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9jZXJmLmMKaW5kZXggMmIzYzI4OS4uZWI4OTkyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2NlcmYuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfY2VyZi5jCkBAIC01LDcgKzUsNiBAQAogICogQmFzZWQgb2ZmIHRoZSBBc3NhYmV0LgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCmluZGV4IDVhYjFjZGUuLmM1ZDc0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjUsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCi0JZG93bigmcy0+c2t0X3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlpZiAoKHMtPmNhbGxiYWNrKSAmJgogCSAgICAocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgJiYKIAkgICAgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgewpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCQltb2R1bGVfcHV0KHMtPmNhbGxiYWNrLT5vd25lcik7CiAJCX0KIAl9Ci0JdXAoJnMtPnNrdF9zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTMyMiw3ICszMjIsNyBAQAogCWtmcmVlKGNpcyk7CiAKIAlpZiAoIXJldCkgewotCQlkb3duKCZzLT5za3Rfc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAkJaWYgKChzLT5jYWxsYmFjaykgJiYgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpICYmCiAJCSAgICAhKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CiAJCQlpZiAodHJ5X21vZHVsZV9nZXQocy0+Y2FsbGJhY2stPm93bmVyKSkgewpAQCAtMzMwLDcgKzMzMCw3IEBACiAJCQkJbW9kdWxlX3B1dChzLT5jYWxsYmFjay0+b3duZXIpOwogCQkJfQogCQl9Ci0JCXVwKCZzLT5za3Rfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaCBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCmluZGV4IGQ1YjRmZjcuLjdhM2QxYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWZuZGVmIF9MSU5VWF9USTExM1hfSAogI2RlZmluZSBfTElOVVhfVEkxMTNYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgVEkgMTEzWCBQQ0ktdG8tQ2FyZEJ1cyBicmlkZ2VzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL21hbmFnZXIuYyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwppbmRleCBjNDI1NmFhLi42ZmZmMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9wbnAvbWFuYWdlci5jCkBAIC00NzksNyArNDc5LDcgQEAKIGludCBwbnBfc3RhcnRfZGV2KHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7CiAJaWYgKCFwbnBfY2FuX3dyaXRlKGRldikpIHsKLQkJcG5wX2luZm8oIkRldmljZSAlcyBkb2VzIG5vdCBzdXBwb3J0ZWQgYWN0aXZhdGlvbi4iLCBkZXYtPmRldi5idXNfaWQpOworCQlwbnBfaW5mbygiRGV2aWNlICVzIGRvZXMgbm90IHN1cHBvcnQgYWN0aXZhdGlvbi4iLCBkZXYtPmRldi5idXNfaWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUwMyw3ICs1MDMsNyBAQAogaW50IHBucF9zdG9wX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewogCWlmICghcG5wX2Nhbl9kaXNhYmxlKGRldikpIHsKLQkJcG5wX2luZm8oIkRldmljZSAlcyBkb2VzIG5vdCBzdXBwb3J0ZWQgZGlzYWJsaW5nLiIsIGRldi0+ZGV2LmJ1c19pZCk7CisJCXBucF9pbmZvKCJEZXZpY2UgJXMgZG9lcyBub3Qgc3VwcG9ydCBkaXNhYmxpbmcuIiwgZGV2LT5kZXYuYnVzX2lkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChkZXYtPnByb3RvY29sLT5kaXNhYmxlKGRldik8MCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggOTI5ZGQ4MC4uNjVkMDkwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xNDcsNiArMTQ3LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtc2ExMTAwLgogCitjb25maWcgUlRDX0RSVl9WUjQxWFgKKwl0cmlzdGF0ZSAiTkVDIFZSNDFYWCIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBDUFVfVlI0MVhYCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IGFjY2VzcyB0byB0aGUgcmVhbCB0aW1lIGNsb2NrCisJICBidWlsdCBpbnRvIHlvdXIgTkVDIFZSNDFYWCBDUFUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJ0Yy12cjQxeHguCisKIGNvbmZpZyBSVENfRFJWX1RFU1QKIAl0cmlzdGF0ZSAiVGVzdCBkcml2ZXIvZGV2aWNlIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDhkNGM3ZmUuLmE5Y2EwZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0xOSwzICsxOSw0IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRVA5M1hYKQkrPSBydGMtZXA5M3h4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NBMTEwMCkJKz0gcnRjLXNhMTEwMC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9WUjQxWFgpCSs9IHJ0Yy12cjQxeHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvY2xhc3MuYyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKaW5kZXggODUzMzkzNi4uNDEzYzdkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC05Niw2ICs5Niw4IEBACiAJaWRyX3JlbW92ZSgmcnRjX2lkciwgaWQpOwogCiBleGl0OgorCWRldl9lcnIoZGV2LCAicnRjIGNvcmU6IHVuYWJsZSB0byByZWdpc3RlciAlcywgZXJyID0gJWRcbiIsCisJCQluYW1lLCBlcnIpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfZGV2aWNlX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCBiMWUzZTYxLi4yMDExNTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBkYXRhOwogCXNzaXplX3QgcmV0OwogCi0JaWYgKGNvdW50IDwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCWlmIChjb3VudCAhPSBzaXplb2YodW5zaWduZWQgaW50KSAmJiBjb3VudCA8IHNpemVvZih1bnNpZ25lZCBsb25nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmcnRjLT5pcnFfcXVldWUsICZ3YWl0KTsKQEAgLTkwLDExICs5MCwxNiBAQAogCWlmIChyZXQgPT0gMCkgewogCQkvKiBDaGVjayBmb3IgYW55IGRhdGEgdXBkYXRlcyAqLwogCQlpZiAocnRjLT5vcHMtPnJlYWRfY2FsbGJhY2spCi0JCQlkYXRhID0gcnRjLT5vcHMtPnJlYWRfY2FsbGJhY2socnRjLT5jbGFzc19kZXYuZGV2LCBkYXRhKTsKKwkJCWRhdGEgPSBydGMtPm9wcy0+cmVhZF9jYWxsYmFjayhydGMtPmNsYXNzX2Rldi5kZXYsCisJCQkJCQkgICAgICAgZGF0YSk7CiAKLQkJcmV0ID0gcHV0X3VzZXIoZGF0YSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYnVmKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlpZiAoc2l6ZW9mKGludCkgIT0gc2l6ZW9mKGxvbmcpICYmCisJCSAgICBjb3VudCA9PSBzaXplb2YodW5zaWduZWQgaW50KSkKKwkJCXJldCA9IHB1dF91c2VyKGRhdGEsICh1bnNpZ25lZCBpbnQgX191c2VyICopYnVmKSA/OgorCQkJCXNpemVvZih1bnNpZ25lZCBpbnQpOworCQllbHNlCisJCQlyZXQgPSBwdXRfdXNlcihkYXRhLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilidWYpID86CisJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM2LDEzICsxNDEsMTMgQEAKIAkvKiB0cnkgdGhlIGRyaXZlcidzIGlvY3RsIGludGVyZmFjZSAqLwogCWlmIChvcHMtPmlvY3RsKSB7CiAJCWVyciA9IG9wcy0+aW9jdGwoY2xhc3NfZGV2LT5kZXYsIGNtZCwgYXJnKTsKLQkJaWYgKGVyciAhPSAtRUlOVkFMKQorCQlpZiAoZXJyICE9IC1FTk9JT0NUTENNRCkKIAkJCXJldHVybiBlcnI7CiAJfQogCiAJLyogaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHRoZSBpb2N0bCBpbnRlcmZhY2UKIAkgKiBvciBpZiB0aGF0IHBhcnRpY3VsYXIgaW9jdGwgd2FzIG5vdCBpbXBsZW1lbnRlZAotCSAqICgtRUlOVkFMKSwgd2Ugd2lsbCB0cnkgdG8gZW11bGF0ZSBoZXJlLgorCSAqICgtRU5PSU9DVExDTUQpLCB3ZSB3aWxsIHRyeSB0byBlbXVsYXRlIGhlcmUuCiAJICovCiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjI4LDcgKzIzMyw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKaW5kZXggMzU4Njk1YS4uOWJlODFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBBbiBydGMvaTJjIGRyaXZlciBmb3IgdGhlIERhbGxhcyBEUzE2NzIKLSAqIENvcHlyaWdodCAyMDA1IEFsZXNzYW5kcm8gWnVtbW8KKyAqIENvcHlyaWdodCAyMDA1LTA2IFRvd2VyIFRlY2hub2xvZ2llcworICoKKyAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMSw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMyIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUuIFRoaXMgY2hpcCBjYW5ub3QgYmUgZGV0ZWN0ZWQuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMjUsNiArMjcsNyBAQAogI2RlZmluZSBEUzE2NzJfUkVHX0NPTlRST0wJNAogI2RlZmluZSBEUzE2NzJfUkVHX1RSSUNLTEUJNQogCisjZGVmaW5lIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDCTB4ODAKIAogLyogUHJvdG90eXBlcyAqLwogc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwpAQCAtNTMsOCArNTYsNyBAQAogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsCiAJCSIlczogcmF3IHJlYWQgZGF0YSAtIGNvdW50ZXJzPSUwMngsJTAyeCwlMDJ4LCUwMnhcbiIKLQkJX19GVU5DVElPTl9fLAotCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCQlfX0ZVTkNUSU9OX18sIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7CiAKIAl0aW1lID0gKGJ1ZlszXSA8PCAyNCkgfCAoYnVmWzJdIDw8IDE2KSB8IChidWZbMV0gPDwgOCkgfCBidWZbMF07CiAKQEAgLTYyLDggKzY0LDcgQEAKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCi0JCV9fRlVOQ1RJT05fXywKLQkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCisJCV9fRlVOQ1RJT05fXywgdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJcmV0dXJuIDA7CkBAIC03MiwxNiArNzMsMTcgQEAKIHN0YXRpYyBpbnQgZHMxNjcyX3NldF9tbXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGxvbmcgc2VjcykKIHsKIAlpbnQgeGZlcjsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls1XTsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls2XTsKIAogCWJ1ZlswXSA9IERTMTY3Ml9SRUdfQ05UX0JBU0U7CiAJYnVmWzFdID0gc2VjcyAmIDB4MDAwMDAwRkY7CiAJYnVmWzJdID0gKHNlY3MgJiAweDAwMDBGRjAwKSA+PiA4OwogCWJ1ZlszXSA9IChzZWNzICYgMHgwMEZGMDAwMCkgPj4gMTY7CiAJYnVmWzRdID0gKHNlY3MgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwlidWZbNV0gPSAwOwkvKiBzZXQgY29udHJvbCByZWcgdG8gZW5hYmxlIGNvdW50aW5nICovCiAKLQl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA1KTsKLQlpZiAoeGZlciAhPSA1KSB7CisJeGZlciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgNik7CisJaWYgKHhmZXIgIT0gNikgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBzZW5kOiAlZFxuIiwgX19GVU5DVElPTl9fLCB4ZmVyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTIwLDYgKzEyMiw0MCBAQAogCXJldHVybiBkczE2NzJfc2V0X21tc3ModG9faTJjX2NsaWVudChkZXYpLCBzZWNzKTsKIH0KIAorc3RhdGljIGludCBkczE2NzJfZ2V0X2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnN0YXR1cykKK3sKKwl1bnNpZ25lZCBjaGFyIGFkZHIgPSBEUzE2NzJfUkVHX0NPTlRST0w7CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkciB9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAxLCBzdGF0dXMgfSwJLyogcmVhZCBjb250cm9sICovCisJfTsKKworCS8qIHJlYWQgY29udHJvbCByZWdpc3RlciAqLworCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZ3NbMF0sIDIpKSAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlYWQgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1OCBjb250cm9sOworCWludCBlcnI7CisKKwllcnIgPSBkczE2NzJfZ2V0X2NvbnRyb2woY2xpZW50LCAmY29udHJvbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY29udHJvbCAmIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDKQorCQkJCQk/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIFNfSVJVR08sIHNob3dfY29udHJvbCwgTlVMTCk7CisKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxNjcyX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZHMxNjcyX3J0Y19zZXRfdGltZSwKQEAgLTEyOCw3ICsxNjQsNiBAQAogCiBzdGF0aWMgaW50IGRzMTY3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgZHMxNjcyX3Byb2JlKTsKIH0KIApAQCAtMTM3LDggKzE3Miw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAgCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCkBAIC0xNjIsNiArMTk1LDcgQEAKIHN0YXRpYyBpbnQgZHMxNjcyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewogCWludCBlcnIgPSAwOworCXU4IGNvbnRyb2w7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCkBAIC0xOTUsMTMgKzIyOSwyMyBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKKwkvKiByZWFkIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwllcnIgPSBkczE2NzJfZ2V0X2NvbnRyb2woY2xpZW50LCAmY29udHJvbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKKworCWlmIChjb250cm9sICYgRFMxNjcyX1JFR19DT05UUk9MX0VPU0MpCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIk9zY2lsbGF0b3Igbm90IGVuYWJsZWQuICIKKwkJCQkJIlNldCB0aW1lIHRvIGVuYWJsZS5cbiIpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY29udHJvbCk7CisKIAlyZXR1cm4gMDsKIAogZXhpdF9kZXRhY2g6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKaW5kZXggMGRkODBlYS4uZTFhMTE2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwpAQCAtNjcsNyArNjcsNiBAQAogCiAJZXA5M3h4X2dldF9zd2NvbXAoZGV2LCAmcHJlbG9hZCwgJmRlbGV0ZSk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAicHJlbG9hZFx0XHQ6ICVkXG4iLCBwcmVsb2FkKTsKIAlzZXFfcHJpbnRmKHNlcSwgImRlbGV0ZVx0XHQ6ICVkXG4iLCBkZWxldGUpOwogCkBAIC0xMTAsNyArMTA5LDYgQEAKIAkJCQkmZGV2LT5kZXYsICZlcDkzeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCiAJaWYgKElTX0VSUihydGMpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwppbmRleCBkYjQ0NWM4Li44YzBkMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIE00OFQ4Nl9SRUdfU0VDQUxSTQkweDAxCiAjZGVmaW5lIE00OFQ4Nl9SRUdfTUlOCQkweDAyCiAjZGVmaW5lIE00OFQ4Nl9SRUdfTUlOQUxSTQkweDAzCi0jZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUgkweDA0CisjZGVmaW5lIE00OFQ4Nl9SRUdfSE9VUgkJMHgwNAogI2RlZmluZSBNNDhUODZfUkVHX0hPVVJBTFJNCTB4MDUKICNkZWZpbmUgTTQ4VDg2X1JFR19ET1cJCTB4MDYgLyogMSA9IHN1bmRheSAqLwogI2RlZmluZSBNNDhUODZfUkVHX0RPTQkJMHgwNwpAQCAtNDgsMzMgKzQ4LDMzIEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtNDh0ODZfb3BzICpvcHMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19CKTsKKwlyZWcgPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfQik7CiAKIAlpZiAocmVnICYgTTQ4VDg2X1JFR19CX0RNKSB7CiAJCS8qIGRhdGEgKGJpbmFyeSkgbW9kZSAqLwotCQl0bS0+dG1fc2VjCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX1NFQyk7Ci0JCXRtLT50bV9taW4JPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfTUlOKTsKLQkJdG0tPnRtX2hvdXIJPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfSE9VUikgJiAweDNGOwotCQl0bS0+dG1fbWRheQk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ET00pOworCQl0bS0+dG1fc2VjCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1NFQyk7CisJCXRtLT50bV9taW4JPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTUlOKTsKKwkJdG0tPnRtX2hvdXIJPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDNGOworCQl0bS0+dG1fbWRheQk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET00pOwogCQkvKiB0bV9tb24gaXMgMC0xMSAqLwotCQl0bS0+dG1fbW9uCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX01PTlRIKSAtIDE7Ci0JCXRtLT50bV95ZWFyCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX1lFQVIpICsgMTAwOwotCQl0bS0+dG1fd2RheQk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ET1cpOworCQl0bS0+dG1fbW9uCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01PTlRIKSAtIDE7CisJCXRtLT50bV95ZWFyCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX1lFQVIpICsgMTAwOworCQl0bS0+dG1fd2RheQk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET1cpOwogCX0gZWxzZSB7CiAJCS8qIGJjZCBtb2RlICovCi0JCXRtLT50bV9zZWMJPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19TRUMpKTsKLQkJdG0tPnRtX21pbgk9IEJDRDJCSU4ob3BzLT5yZWFkYihNNDhUODZfUkVHX01JTikpOwotCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ob3BzLT5yZWFkYihNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7Ci0JCXRtLT50bV9tZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRE9NKSk7CisJCXRtLT50bV9zZWMJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpKTsKKwkJdG0tPnRtX21pbgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTikpOworCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7CisJCXRtLT50bV9tZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKSk7CiAJCS8qIHRtX21vbiBpcyAwLTExICovCi0JCXRtLT50bV9tb24JPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKLQkJdG0tPnRtX3llYXIJPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7Ci0JCXRtLT50bV93ZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRE9XKSk7CisJCXRtLT50bV9tb24JPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKKwkJdG0tPnRtX3llYXIJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7CisJCXRtLT50bV93ZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKSk7CiAJfQogCiAJLyogY29ycmVjdCB0aGUgaG91ciBpZiB0aGUgY2xvY2sgaXMgaW4gMTJoIG1vZGUgKi8KIAlpZiAoIShyZWcgJiBNNDhUODZfUkVHX0JfSDI0KSkKLQkJaWYgKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19IT1VSKSAmIDB4ODApCisJCWlmIChvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDgwKQogCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAKIAlyZXR1cm4gMDsKQEAgLTg2LDM1ICs4NiwzNSBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbTQ4dDg2X29wcyAqb3BzID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlyZWcgPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfQik7CisJcmVnID0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0IpOwogCiAJLyogdXBkYXRlIGZsYWcgYW5kIDI0aCBtb2RlICovCiAJcmVnIHw9IE00OFQ4Nl9SRUdfQl9TRVQgfCBNNDhUODZfUkVHX0JfSDI0OwotCW9wcy0+d3JpdGViKHJlZywgTTQ4VDg2X1JFR19CKTsKKwlvcHMtPndyaXRlYnl0ZShyZWcsIE00OFQ4Nl9SRUdfQik7CiAKIAlpZiAocmVnICYgTTQ4VDg2X1JFR19CX0RNKSB7CiAJCS8qIGRhdGEgKGJpbmFyeSkgbW9kZSAqLwotCQlvcHMtPndyaXRlYih0bS0+dG1fc2VjLCBNNDhUODZfUkVHX1NFQyk7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9taW4sIE00OFQ4Nl9SRUdfTUlOKTsKLQkJb3BzLT53cml0ZWIodG0tPnRtX2hvdXIsIE00OFQ4Nl9SRUdfSE9VUik7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9tZGF5LCBNNDhUODZfUkVHX0RPTSk7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9tb24gKyAxLCBNNDhUODZfUkVHX01PTlRIKTsKLQkJb3BzLT53cml0ZWIodG0tPnRtX3llYXIgJSAxMDAsIE00OFQ4Nl9SRUdfWUVBUik7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV93ZGF5LCBNNDhUODZfUkVHX0RPVyk7CisJCW9wcy0+d3JpdGVieXRlKHRtLT50bV9zZWMsIE00OFQ4Nl9SRUdfU0VDKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX21pbiwgTTQ4VDg2X1JFR19NSU4pOworCQlvcHMtPndyaXRlYnl0ZSh0bS0+dG1faG91ciwgTTQ4VDg2X1JFR19IT1VSKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX21kYXksIE00OFQ4Nl9SRUdfRE9NKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX21vbiArIDEsIE00OFQ4Nl9SRUdfTU9OVEgpOworCQlvcHMtPndyaXRlYnl0ZSh0bS0+dG1feWVhciAlIDEwMCwgTTQ4VDg2X1JFR19ZRUFSKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX3dkYXksIE00OFQ4Nl9SRUdfRE9XKTsKIAl9IGVsc2UgewogCQkvKiBiY2QgbW9kZSAqLwotCQlvcHMtPndyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCBNNDhUODZfUkVHX1NFQyk7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIE00OFQ4Nl9SRUdfTUlOKTsKLQkJb3BzLT53cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIE00OFQ4Nl9SRUdfSE9VUik7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBNNDhUODZfUkVHX0RPTSk7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBNNDhUODZfUkVHX01PTlRIKTsKLQkJb3BzLT53cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ4Nl9SRUdfWUVBUik7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CisJCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3NlYyksIE00OFQ4Nl9SRUdfU0VDKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbWluKSwgTTQ4VDg2X1JFR19NSU4pOworCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9ob3VyKSwgTTQ4VDg2X1JFR19IT1VSKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbWRheSksIE00OFQ4Nl9SRUdfRE9NKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIE00OFQ4Nl9SRUdfTU9OVEgpOworCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDg2X1JFR19ZRUFSKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fd2RheSksIE00OFQ4Nl9SRUdfRE9XKTsKIAl9CiAKIAkvKiB1cGRhdGUgZW5kZWQgKi8KIAlyZWcgJj0gfk00OFQ4Nl9SRUdfQl9TRVQ7Ci0Jb3BzLT53cml0ZWIocmVnLCBNNDhUODZfUkVHX0IpOworCW9wcy0+d3JpdGVieXRlKHJlZywgTTQ4VDg2X1JFR19CKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI1LDE1ICsxMjUsMTIgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG00OHQ4Nl9vcHMgKm9wcyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JcmVnID0gb3BzLT5yZWFkYihNNDhUODZfUkVHX0IpOwotCi0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogJXNcbiIsCi0JCSAocmVnICYgTTQ4VDg2X1JFR19CX0gyNCkgPyAieWVzIiA6ICJubyIpOworCXJlZyA9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19CKTsKIAogCXNlcV9wcmludGYoc2VxLCAibW9kZVx0XHQ6ICVzXG4iLAogCQkgKHJlZyAmIE00OFQ4Nl9SRUdfQl9ETSkgPyAiYmluYXJ5IiA6ICJiY2QiKTsKIAotCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19EKTsKKwlyZWcgPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRCk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgImJhdHRlcnlcdFx0OiAlc1xuIiwKIAkJIChyZWcgJiBNNDhUODZfUkVHX0RfVlJUKSA/ICJvayIgOiAiZXhoYXVzdGVkIik7CkBAIC0xNTQsMTUgKzE1MSwxMyBAQAogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtNDh0ODYiLAogCQkJCSZkZXYtPmRldiwgJm00OHQ4Nl9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOworCWlmIChJU19FUlIocnRjKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKLQl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHJ0Yyk7CiAKIAkvKiByZWFkIGJhdHRlcnkgc3RhdHVzICovCi0JcmVnID0gb3BzLT5yZWFkYihNNDhUODZfUkVHX0QpOworCXJlZyA9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19EKTsKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJiYXR0ZXJ5ICVzXG4iLAogCQkocmVnICYgTTQ4VDg2X1JFR19EX1ZSVCkgPyAib2siIDogImV4aGF1c3RlZCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwppbmRleCBkODU3ZDQ1Li5iYTlhNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKQEAgLTIyNywxNCArMjI3LDcgQEAKIAlyZXR1cm4gcGNmODU2M19zZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CiB9CiAKLXN0YXRpYyBpbnQgcGNmODU2M19ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQotewotCXNlcV9wcmludGYoc2VxLCAiMjRoclx0XHQ6IHllc1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2Y4NTYzX3J0Y19vcHMgPSB7Ci0JLnByb2MJCT0gcGNmODU2M19ydGNfcHJvYywKIAkucmVhZF90aW1lCT0gcGNmODU2M19ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHBjZjg1NjNfcnRjX3NldF90aW1lLAogfTsKQEAgLTI5Nyw4ICsyOTAsNiBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIApAQCAtMzIxLDggKzMxMiw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IDkwYjhhOTcuLmNlZjVmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtNzEsNiArNzEsOCBAQAogCQkJCWFscm0ucGVuZGluZyA/ICJ5ZXMiIDogIm5vIik7CiAJfQogCisJc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKKwogCWlmIChvcHMtPnByb2MpCiAJCW9wcy0+cHJvYyhjbGFzc19kZXYtPmRldiwgc2VxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggMzk2Yzg2OC4uNzU1M2Q3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0xNTEsOSArMTUxLDggQEAKIHsKIAlpbnQgZXJyLCBvc2MsIHRyaW07CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwotCi0JaWYgKChlcnIgPSByczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgJnRyaW0pKSA9PSAwKSB7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZvc2MsICZ0cmltKTsKKwlpZiAoZXJyID09IDApIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlZC4lMDNkIEtIelxuIiwgb3NjIC8gMTAwMCwgb3NjICUgMTAwMCk7CiAJCXNlcV9wcmludGYoc2VxLCAidHJpbVx0OiAlZFxuIiwgdHJpbSk7CiAJfQpAQCAtMTcwLDMwICsxNjksMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHJzNWMzNzJfc3lzZnNfc2hvd190cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCB0cmltOworCWludCBlcnIsIHRyaW07CiAKLQlpZiAocnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksIE5VTEwsICZ0cmltKSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUyeFxuIiwgdHJpbSk7CisJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksIE5VTEwsICZ0cmltKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMnhcbiIsIHRyaW0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKHRyaW0sIFNfSVJVR08sIHJzNWMzNzJfc3lzZnNfc2hvd190cmltLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgcnM1YzM3Ml9zeXNmc19zaG93X29zYyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgb3NjOworCWludCBlcnIsIG9zYzsKIAotCWlmIChyczVjMzcyX2dldF90cmltKHRvX2kyY19jbGllbnQoZGV2KSwgJm9zYywgTlVMTCkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZCBLSHpcbiIsIG9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOworCWVyciA9IHJzNWMzNzJfZ2V0X3RyaW0odG9faTJjX2NsaWVudChkZXYpLCAmb3NjLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZCBLSHpcbiIsIG9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOwogfQogc3RhdGljIERFVklDRV9BVFRSKG9zYywgU19JUlVHTywgcnM1YzM3Ml9zeXNmc19zaG93X29zYywgTlVMTCk7CiAKIHN0YXRpYyBpbnQgcnM1YzM3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgcnM1YzM3Ml9wcm9iZSk7CiB9CiAKQEAgLTIzMyw4ICsyMzMsNiBAQAogCiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBjbGFzcyBkZXZpY2VcbiIpOwogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIApAQCAtMjYwLDggKzI1OCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA4M2IyYmI0Li5hOTk3NTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0xNjAsMjcgKzE2MCwyNyBAQAogCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVEMxSHosIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCiAJCQkJInJ0YyAxSHoiLCBkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQzFIeik7CisJCWRldl9lcnIoZGV2LCAiSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQzFIeik7CiAJCWdvdG8gZmFpbF91aTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1JUQ0Fscm0sIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCiAJCQkJInJ0YyBBbHJtIiwgZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9SVENBbHJtKTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDQWxybSk7CiAJCWdvdG8gZmFpbF9haTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX09TVDEsIHRpbWVyMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKIAkJCQkicnRjIHRpbWVyIiwgZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlElZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9PU1QxKTsKKwkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfT1NUMSk7CiAJCWdvdG8gZmFpbF9waTsKIAl9CiAJcmV0dXJuIDA7CiAKICBmYWlsX3BpOgotCWZyZWVfaXJxKElSUV9SVENBbHJtLCBOVUxMKTsKKwlmcmVlX2lycShJUlFfUlRDQWxybSwgZGV2KTsKICBmYWlsX2FpOgotCWZyZWVfaXJxKElSUV9SVEMxSHosIE5VTEwpOworCWZyZWVfaXJxKElSUV9SVEMxSHosIGRldik7CiAgZmFpbF91aToKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCXJ0Y19mcmVxID0gYXJnOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAogc3RhdGljIGludCBzYTExMDBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0yOTUsNyArMjk1LDcgQEAKIAogc3RhdGljIGludCBzYTExMDBfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKLQlzZXFfcHJpbnRmKHNlcSwgInRyaW0vZGl2aWRlclx0OiAweCUwOHhcbiIsIFJUVFIpOworCXNlcV9wcmludGYoc2VxLCAidHJpbS9kaXZpZGVyXHQ6IDB4JTA4bHhcbiIsIFJUVFIpOwogCXNlcV9wcmludGYoc2VxLCAiYWxhcm1fSVJRXHQ6ICVzXG4iLAogCQkJKFJUU1IgJiBSVFNSX0FMRSkgPyAieWVzIiA6ICJubyIgKTsKIAlzZXFfcHJpbnRmKHNlcSwgInVwZGF0ZV9JUlFcdDogJXNcbiIsCkBAIC0zMzIsNyArMzMyLDcgQEAKIAkgKi8KIAlpZiAoUlRUUiA9PSAwKSB7CiAJCVJUVFIgPSBSVENfREVGX0RJVklERVIgKyAoUlRDX0RFRl9UUklNIDw8IDE2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRjOiB3YXJuaW5nOiBpbml0aWFsaXppbmcgZGVmYXVsdCBjbG9jayBkaXZpZGVyL3RyaW0gdmFsdWVcbiIpOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAid2FybmluZzogaW5pdGlhbGl6aW5nIGRlZmF1bHQgY2xvY2sgZGl2aWRlci90cmltIHZhbHVlXG4iKTsKIAkJLyogVGhlIGN1cnJlbnQgUlRDIHZhbHVlIHByb2JhYmx5IGRvZXNuJ3QgbWFrZSBzZW5zZSBlaXRoZXIgKi8KIAkJUkNOUiA9IDA7CiAJfQpAQCAtMzQwLDE1ICszNDAsMTEgQEAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZzYTExMDBfcnRjX29wcywKIAkJCQlUSElTX01PRFVMRSk7CiAKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBSVEMgZGV2aWNlXG4iKTsKKwlpZiAoSVNfRVJSKHJ0YykpCiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7Ci0JfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJTQTExeHgvUFhBMnh4IFJUQyBSZWdpc3RlcmVkXG4iKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwppbmRleCA0M2QxMDc0Li5lMWZhNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0Jc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKIAlzZXFfcHJpbnRmKHNlcSwgInRlc3RcdFx0OiB5ZXNcbiIpOwogCXNlcV9wcmludGYoc2VxLCAiaWRcdFx0OiAlZFxuIiwgcGxhdF9kZXYtPmlkKTsKIApAQCAtNzIsNyArNzEsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIH0KIApAQCAtMTIwLDggKzExOSw2IEBACiAJCQkJCQkmdGVzdF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmcGxhdF9kZXYtPmRldiwKLQkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCWRldmljZV9jcmVhdGVfZmlsZSgmcGxhdF9kZXYtPmRldiwgJmRldl9hdHRyX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3NTk2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIE5FQyBWUjQxMDAgc2VyaWVzIFJlYWwgVGltZSBDbG9jayB1bml0LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS92cjQxeHgvdnI0MXh4Lmg+CisKK01PRFVMRV9BVVRIT1IoIllvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgVlI0MTAwIHNlcmllcyBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgUlRDMV9UWVBFMV9TVEFSVAkweDBiMDAwMGMwVUwKKyNkZWZpbmUgUlRDMV9UWVBFMV9FTkQJCTB4MGIwMDAwZGZVTAorI2RlZmluZSBSVEMyX1RZUEUxX1NUQVJUCTB4MGIwMDAxYzBVTAorI2RlZmluZSBSVEMyX1RZUEUxX0VORAkJMHgwYjAwMDFkZlVMCisKKyNkZWZpbmUgUlRDMV9UWVBFMl9TVEFSVAkweDBmMDAwMTAwVUwKKyNkZWZpbmUgUlRDMV9UWVBFMl9FTkQJCTB4MGYwMDAxMWZVTAorI2RlZmluZSBSVEMyX1RZUEUyX1NUQVJUCTB4MGYwMDAxMjBVTAorI2RlZmluZSBSVEMyX1RZUEUyX0VORAkJMHgwZjAwMDEzZlVMCisKKyNkZWZpbmUgUlRDMV9TSVpFCQkweDIwCisjZGVmaW5lIFJUQzJfU0laRQkJMHgyMAorCisvKiBSVEMgMSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVRJTUVMUkVHCQkweDAwCisjZGVmaW5lIEVUSU1FTVJFRwkJMHgwMgorI2RlZmluZSBFVElNRUhSRUcJCTB4MDQKKy8qIFJGVSAqLworI2RlZmluZSBFQ01QTFJFRwkJMHgwOAorI2RlZmluZSBFQ01QTVJFRwkJMHgwYQorI2RlZmluZSBFQ01QSFJFRwkJMHgwYworLyogUkZVICovCisjZGVmaW5lIFJUQ0wxTFJFRwkJMHgxMAorI2RlZmluZSBSVENMMUhSRUcJCTB4MTIKKyNkZWZpbmUgUlRDTDFDTlRMUkVHCQkweDE0CisjZGVmaW5lIFJUQ0wxQ05USFJFRwkJMHgxNgorI2RlZmluZSBSVENMMkxSRUcJCTB4MTgKKyNkZWZpbmUgUlRDTDJIUkVHCQkweDFhCisjZGVmaW5lIFJUQ0wyQ05UTFJFRwkJMHgxYworI2RlZmluZSBSVENMMkNOVEhSRUcJCTB4MWUKKworLyogUlRDIDIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRDTEtMUkVHCQkweDAwCisjZGVmaW5lIFRDTEtIUkVHCQkweDAyCisjZGVmaW5lIFRDTEtDTlRMUkVHCQkweDA0CisjZGVmaW5lIFRDTEtDTlRIUkVHCQkweDA2CisvKiBSRlUgKi8KKyNkZWZpbmUgUlRDSU5UUkVHCQkweDFlCisgI2RlZmluZSBUQ0xPQ0tfSU5UCQkweDA4CisgI2RlZmluZSBSVENMT05HMl9JTlQJCTB4MDQKKyAjZGVmaW5lIFJUQ0xPTkcxX0lOVAkJMHgwMgorICNkZWZpbmUgRUxBUFNFRFRJTUVfSU5UCTB4MDEKKworI2RlZmluZSBSVENfRlJFUVVFTkNZCQkzMjc2OAorI2RlZmluZSBNQVhfUEVSSU9ESUNfUkFURQk2NTUzCisjZGVmaW5lIE1BWF9VU0VSX1BFUklPRElDX1JBVEUJNjQKKworc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMV9iYXNlOworc3RhdGljIHZvaWQgX19pb21lbSAqcnRjMl9iYXNlOworCisjZGVmaW5lIHJ0YzFfcmVhZChvZmZzZXQpCQlyZWFkdyhydGMxX2Jhc2UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgcnRjMV93cml0ZShvZmZzZXQsIHZhbHVlKQl3cml0ZXcoKHZhbHVlKSwgcnRjMV9iYXNlICsgKG9mZnNldCkpCisKKyNkZWZpbmUgcnRjMl9yZWFkKG9mZnNldCkJCXJlYWR3KHJ0YzJfYmFzZSArIChvZmZzZXQpKQorI2RlZmluZSBydGMyX3dyaXRlKG9mZnNldCwgdmFsdWUpCXdyaXRldygodmFsdWUpLCBydGMyX2Jhc2UgKyAob2Zmc2V0KSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBvY2ggPSAxOTcwOwkvKiBKYW4gMSAxOTcwIDAwOjAwOjAwICovCisKK3N0YXRpYyBzcGlubG9ja190IHJ0Y19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGNoYXIgcnRjX25hbWVbXSA9ICJSVEMiOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZnJlcXVlbmN5Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY291bnQ7CisKK3N0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VbMl0gPSB7CisJewkubmFtZQk9IHJ0Y19uYW1lLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJfSwKKwl7CS5uYW1lCT0gcnRjX25hbWUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAl9LAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfZWxhcHNlZF9zZWNvbmQodm9pZCkKK3sKKworCXVuc2lnbmVkIGxvbmcgZmlyc3RfbG93LCBmaXJzdF9taWQsIGZpcnN0X2hpZ2g7CisKKwl1bnNpZ25lZCBsb25nIHNlY29uZF9sb3csIHNlY29uZF9taWQsIHNlY29uZF9oaWdoOworCisJZG8geworCQlmaXJzdF9sb3cgPSBydGMxX3JlYWQoRVRJTUVMUkVHKTsKKwkJZmlyc3RfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7CisJCWZpcnN0X2hpZ2ggPSBydGMxX3JlYWQoRVRJTUVIUkVHKTsKKwkJc2Vjb25kX2xvdyA9IHJ0YzFfcmVhZChFVElNRUxSRUcpOworCQlzZWNvbmRfbWlkID0gcnRjMV9yZWFkKEVUSU1FTVJFRyk7CisJCXNlY29uZF9oaWdoID0gcnRjMV9yZWFkKEVUSU1FSFJFRyk7CisJfSB3aGlsZSAoZmlyc3RfbG93ICE9IHNlY29uZF9sb3cgfHwgZmlyc3RfbWlkICE9IHNlY29uZF9taWQgfHwKKwkgICAgICAgICBmaXJzdF9oaWdoICE9IHNlY29uZF9oaWdoKTsKKworCXJldHVybiAoZmlyc3RfaGlnaCA8PCAxNykgfCAoZmlyc3RfbWlkIDw8IDEpIHwgKGZpcnN0X2xvdyA+PiAxNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9lbGFwc2VkX3NlY29uZCh1bnNpZ25lZCBsb25nIHNlYykKK3sKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVUSU1FTFJFRywgKHVpbnQxNl90KShzZWMgPDwgMTUpKTsKKwlydGMxX3dyaXRlKEVUSU1FTVJFRywgKHVpbnQxNl90KShzZWMgPj4gMSkpOworCXJ0YzFfd3JpdGUoRVRJTUVIUkVHLCAodWludDE2X3QpKHNlYyA+PiAxNykpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZyNDF4eF9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBNUkVHLCAwKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxTFJFRywgMCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIDApOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOworCWRpc2FibGVfaXJxKFJUQ0xPTkcxX0lSUSk7Cit9CisKK3N0YXRpYyBpbnQgdnI0MXh4X3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGVsYXBzZWRfc2VjOworCisJZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKKwllbGFwc2VkX3NlYyA9IHJlYWRfZWxhcHNlZF9zZWNvbmQoKTsKKworCXJ0Y190aW1lX3RvX3RtKGVwb2NoX3NlYyArIGVsYXBzZWRfc2VjLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJdW5zaWduZWQgbG9uZyBlcG9jaF9zZWMsIGN1cnJlbnRfc2VjOworCisJZXBvY2hfc2VjID0gbWt0aW1lKGVwb2NoLCAxLCAxLCAwLCAwLCAwKTsKKwljdXJyZW50X3NlYyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwgdGltZS0+dG1fbWRheSwKKwkgICAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisKKwl3cml0ZV9lbGFwc2VkX3NlY29uZChjdXJyZW50X3NlYyAtIGVwb2NoX3NlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqd2thbHJtKQoreworCXVuc2lnbmVkIGxvbmcgbG93LCBtaWQsIGhpZ2g7CisJc3RydWN0IHJ0Y190aW1lICp0aW1lID0gJndrYWxybS0+dGltZTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWxvdyA9IHJ0YzFfcmVhZChFQ01QTFJFRyk7CisJbWlkID0gcnRjMV9yZWFkKEVDTVBNUkVHKTsKKwloaWdoID0gcnRjMV9yZWFkKEVDTVBIUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJcnRjX3RpbWVfdG9fdG0oKGhpZ2ggPDwgMTcpIHwgKG1pZCA8PCAxKSB8IChsb3cgPj4gMTUpLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKndrYWxybSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsYXJtX3NlYzsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUgPSAmd2thbHJtLT50aW1lOworCisJYWxhcm1fc2VjID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLCB0aW1lLT50bV9tZGF5LAorCSAgICAgICAgICAgICAgICAgICB0aW1lLT50bV9ob3VyLCB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwlydGMxX3dyaXRlKEVDTVBMUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA8PCAxNSkpOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsICh1aW50MTZfdCkoYWxhcm1fc2VjID4+IDEpKTsKKwlydGMxX3dyaXRlKEVDTVBIUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxNykpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cjQxeHhfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09OOgorCQllbmFibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX0FJRV9PRkY6CisJCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCWJyZWFrOworCWNhc2UgUlRDX1BJRV9PTjoKKwkJZW5hYmxlX2lycShSVENMT05HMV9JUlEpOworCQlicmVhazsKKwljYXNlIFJUQ19QSUVfT0ZGOgorCQlkaXNhYmxlX2lycShSVENMT05HMV9JUlEpOworCQlicmVhazsKKwljYXNlIFJUQ19JUlFQX1JFQUQ6CisJCXJldHVybiBwdXRfdXNlcihwZXJpb2RpY19mcmVxdWVuY3ksICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgUlRDX0lSUVBfU0VUOgorCQlpZiAoYXJnID4gTUFYX1BFUklPRElDX1JBVEUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoYXJnID4gTUFYX1VTRVJfUEVSSU9ESUNfUkFURSAmJiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpID09IDApCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQlwZXJpb2RpY19mcmVxdWVuY3kgPSBhcmc7CisKKwkJY291bnQgPSBSVENfRlJFUVVFTkNZOworCQlkb19kaXYoY291bnQsIGFyZyk7CisKKwkJcGVyaW9kaWNfY291bnQgPSBjb3VudDsKKworCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisKKwkJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKKwkJcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKworCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfRVBPQ0hfUkVBRDoKKwkJcmV0dXJuIHB1dF91c2VyKGVwb2NoLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOworCWNhc2UgUlRDX0VQT0NIX1NFVDoKKwkJLyogRG9lc24ndCBzdXBwb3J0IGJlZm9yZSAxOTAwICovCisJCWlmIChhcmcgPCAxOTAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhcGFibGUoQ0FQX1NZU19USU1FKSA9PSAwKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJZXBvY2ggPSBhcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjMl93cml0ZShSVENJTlRSRUcsIEVMQVBTRURUSU1FX0lOVCk7CisKKwlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIDEsIFJUQ19BRik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGNsb25nMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBwZXJpb2RpY19jb3VudDsKKworCXJ0YzJfd3JpdGUoUlRDSU5UUkVHLCBSVENMT05HMV9JTlQpOworCisJcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOworCisJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfUEYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgdnI0MXh4X3J0Y19vcHMgPSB7CisJLnJlbGVhc2UJPSB2cjQxeHhfcnRjX3JlbGVhc2UsCisJLmlvY3RsCQk9IHZyNDF4eF9ydGNfaW9jdGwsCisJLnJlYWRfdGltZQk9IHZyNDF4eF9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IHZyNDF4eF9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSB2cjQxeHhfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IHZyNDF4eF9ydGNfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXR2YWw7CisKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKQorCQlyZXR1cm4gLUVCVVNZOworCisJcnRjMV9iYXNlID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgUlRDMV9TSVpFKTsKKwlpZiAocnRjMV9iYXNlID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlydGMyX2Jhc2UgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBSVEMyX1NJWkUpOworCWlmIChydGMyX2Jhc2UgPT0gTlVMTCkgeworCQlpb3VubWFwKHJ0YzFfYmFzZSk7CisJCXJ0YzFfYmFzZSA9IE5VTEw7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihydGNfbmFtZSwgJnBkZXYtPmRldiwgJnZyNDF4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwkJaW91bm1hcChydGMyX2Jhc2UpOworCQlydGMxX2Jhc2UgPSBOVUxMOworCQlydGMyX2Jhc2UgPSBOVUxMOworCQlyZXR1cm4gUFRSX0VSUihydGMpOworCX0KKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJ0YzFfd3JpdGUoRUNNUExSRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUE1SRUcsIDApOworCXJ0YzFfd3JpdGUoRUNNUEhSRUcsIDApOworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCAwKTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgMCk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWlycSA9IEVMQVBTRURUSU1FX0lSUTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGVsYXBzZWR0aW1lX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCSAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkX3RpbWUiLCBwZGV2KTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJaXJxID0gUlRDTE9ORzFfSVJROworCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQkgICAgICAgICAgICAgICAgICAgICAicnRjbG9uZzEiLCBwZGV2KTsKKwl9CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInJ0YzogSVJRJWQgaXMgYnVzeVxuIiwgaXJxKTsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJCWlmIChpcnEgPT0gUlRDTE9ORzFfSVJRKQorCQkJZnJlZV9pcnEoRUxBUFNFRFRJTUVfSVJRLCBOVUxMKTsKKwkJaW91bm1hcChydGMxX2Jhc2UpOworCQlpb3VubWFwKHJ0YzJfYmFzZSk7CisJCXJ0YzFfYmFzZSA9IE5VTEw7CisJCXJ0YzJfYmFzZSA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKKworCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJZGlzYWJsZV9pcnEoUlRDTE9ORzFfSVJRKTsKKworCXByaW50ayhLRVJOX0lORk8gInJ0YzogUmVhbCBUaW1lIENsb2NrIG9mIE5FQyBWUjQxMDAgc2VyaWVzXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKworCXJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChydGMgIT0gTlVMTCkKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZyZWVfaXJxKEVMQVBTRURUSU1FX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoUlRDTE9ORzFfSVJRLCBOVUxMKTsKKwlpZiAocnRjMV9iYXNlICE9IE5VTEwpCisJCWlvdW5tYXAocnRjMV9iYXNlKTsKKwlpZiAocnRjMl9iYXNlICE9IE5VTEwpCisJCWlvdW5tYXAocnRjMl9iYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnRjX3BsYXRmb3JtX2RldmljZTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcnRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gcnRjX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKKwljYXNlIENQVV9WUjQxMTE6CisJY2FzZSBDUFVfVlI0MTIxOgorCQlydGNfcmVzb3VyY2VbMF0uc3RhcnQgPSBSVEMxX1RZUEUxX1NUQVJUOworCQlydGNfcmVzb3VyY2VbMF0uZW5kID0gUlRDMV9UWVBFMV9FTkQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5zdGFydCA9IFJUQzJfVFlQRTFfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVsxXS5lbmQgPSBSVEMyX1RZUEUxX0VORDsKKwkJYnJlYWs7CisJY2FzZSBDUFVfVlI0MTIyOgorCWNhc2UgQ1BVX1ZSNDEzMToKKwljYXNlIENQVV9WUjQxMzM6CisJCXJ0Y19yZXNvdXJjZVswXS5zdGFydCA9IFJUQzFfVFlQRTJfU1RBUlQ7CisJCXJ0Y19yZXNvdXJjZVswXS5lbmQgPSBSVEMxX1RZUEUyX0VORDsKKwkJcnRjX3Jlc291cmNlWzFdLnN0YXJ0ID0gUlRDMl9UWVBFMl9TVEFSVDsKKwkJcnRjX3Jlc291cmNlWzFdLmVuZCA9IFJUQzJfVFlQRTJfRU5EOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisJcnRjX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiUlRDIiwgLTEpOworCWlmIChydGNfcGxhdGZvcm1fZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocnRjX3BsYXRmb3JtX2RldmljZSwKKwkJCQlydGNfcmVzb3VyY2UsIEFSUkFZX1NJWkUocnRjX3Jlc291cmNlKSk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocnRjX3BsYXRmb3JtX2RldmljZSk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnRjX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZydGNfcGxhdGZvcm1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihydGNfcGxhdGZvcm1fZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQodnI0MXh4X3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHZyNDF4eF9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCmluZGV4IDYyMWQxN2EuLjc4OGI2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjAuNyIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUuIFRoaXMgY2hpcCBpcyBsb2NhdGVkIGF0CiAgKiAweDZmIGFuZCB1c2VzIGEgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3NpbmcuCkBAIC00NTEsOCArNDUxLDYgQEAKIHsKIAlpbnQgZXJyLCBkdHJpbSwgYXRyaW07CiAKLQlzZXFfcHJpbnRmKHNlcSwgIjI0aHJcdFx0OiB5ZXNcbiIpOwotCiAJaWYgKChlcnIgPSB4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pKSA9PSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgImRpZ2l0YWxfdHJpbVx0OiAlZCBwcG1cbiIsIGR0cmltKTsKIApAQCAtNDczLDMwICs0NzEsMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHgxMjA1X3N5c2ZzX3Nob3dfYXRyaW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JaW50IGF0cmltOworCWludCBlcnIsIGF0cmltOwogCi0JaWYgKHgxMjA1X2dldF9hdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZhdHJpbSkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAyZCBwRlxuIiwKLQkJCWF0cmltIC8gMTAwMCwgYXRyaW0gJSAxMDAwKTsKLQlyZXR1cm4gMDsKKwllcnIgPSB4MTIwNV9nZXRfYXRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmYXRyaW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkIHBGXG4iLCBhdHJpbSAvIDEwMDAsIGF0cmltICUgMTAwMCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYXRyaW0sIFNfSVJVR08sIHgxMjA1X3N5c2ZzX3Nob3dfYXRyaW0sIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCB4MTIwNV9zeXNmc19zaG93X2R0cmltKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCWludCBkdHJpbTsKKwlpbnQgZXJyLCBkdHJpbTsKIAotCWlmICh4MTIwNV9nZXRfZHRyaW0odG9faTJjX2NsaWVudChkZXYpLCAmZHRyaW0pID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIHBwbVxuIiwgZHRyaW0pOworCWVyciA9IHgxMjA1X2dldF9kdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZkdHJpbSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIHBwbVxuIiwgZHRyaW0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKGR0cmltLCBTX0lSVUdPLCB4MTIwNV9zeXNmc19zaG93X2R0cmltLCBOVUxMKTsKIAogc3RhdGljIGludCB4MTIwNV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgeDEyMDVfcHJvYmUpOwogfQogCkBAIC01NDUsOCArNTQ0LDYgQEAKIAogCWlmIChJU19FUlIocnRjKSkgewogCQllcnIgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJInVuYWJsZSB0byByZWdpc3RlciB0aGUgY2xhc3MgZGV2aWNlXG4iKTsKIAkJZ290byBleGl0X2RldGFjaDsKIAl9CiAKQEAgLTU4NSw4ICs1ODIsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQogIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMGE5ZjEyYy4uY2ZiMWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0zMTUsNiArMzE1LDExIEBACiAJCXJjID0gZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShkZXZpY2UpOwogCiAJaWYgKCFyYyAmJgorCSAgICBkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfVU5GTVQgJiYKKwkgICAgZGV2aWNlLT50YXJnZXQgPiBEQVNEX1NUQVRFX1VORk1UKQorCQlyYyA9IC1FUEVSTTsKKworCWlmICghcmMgJiYKIAkgICAgZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX1JFQURZICYmCiAJICAgIGRldmljZS0+dGFyZ2V0ID49IERBU0RfU1RBVEVfT05MSU5FKQogCQlyYyA9IGRhc2Rfc3RhdGVfcmVhZHlfdG9fb25saW5lKGRldmljZSk7CkBAIC0xMjU3LDI1ICsxMjYyLDI4IEBACiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+Y2N3X3F1ZXVlKSkKIAkJcmV0dXJuOwogCWNxciA9IGxpc3RfZW50cnkoZGV2aWNlLT5jY3dfcXVldWUubmV4dCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgbGlzdCk7Ci0gICAgICAgIC8qIGNoZWNrIEZBSUxGQVNUICovCisJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX1FVRVVFRCkKKwkJcmV0dXJuOworCS8qIE5vbi10ZW1wb3Jhcnkgc3RvcCBjb25kaXRpb24gd2lsbCB0cmlnZ2VyIGZhaWwgZmFzdCAqLwogCWlmIChkZXZpY2UtPnN0b3BwZWQgJiB+REFTRF9TVE9QUEVEX1BFTkRJTkcgJiYKIAkgICAgdGVzdF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKSAmJgogCSAgICAoIWRhc2RfZWVyX2VuYWJsZWQoZGV2aWNlKSkpIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJCWRhc2Rfc2NoZWR1bGVfYmgoZGV2aWNlKTsKKwkJcmV0dXJuOwogCX0KLQlpZiAoKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX1FVRVVFRCkgJiYKLQkgICAgKCFkZXZpY2UtPnN0b3BwZWQpKSB7Ci0JCS8qIHRyeSB0byBzdGFydCB0aGUgZmlyc3QgSS9PIHRoYXQgY2FuIGJlIHN0YXJ0ZWQgKi8KLQkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnN0YXJ0X0lPKGNxcik7Ci0JCWlmIChyYyA9PSAwKQotCQkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCBjcXItPmV4cGlyZXMpOwotCQllbHNlIGlmIChyYyA9PSAtRUFDQ0VTKSB7Ci0JCQlkYXNkX3NjaGVkdWxlX2JoKGRldmljZSk7Ci0JCX0gZWxzZQotCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDEvMiBzZWMgKi8KLQkJCWRhc2Rfc2V0X3RpbWVyKGRldmljZSwgNTApOwotCX0KKwkvKiBEb24ndCB0cnkgdG8gc3RhcnQgcmVxdWVzdHMgaWYgZGV2aWNlIGlzIHN0b3BwZWQgKi8KKwlpZiAoZGV2aWNlLT5zdG9wcGVkKQorCQlyZXR1cm47CisKKwlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+c3RhcnRfSU8oY3FyKTsKKwlpZiAocmMgPT0gMCkKKwkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCBjcXItPmV4cGlyZXMpOworCWVsc2UgaWYgKHJjID09IC1FQUNDRVMpIHsKKwkJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOworCX0gZWxzZQorCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gMS8yIHNlYyAqLworCQlkYXNkX3NldF90aW1lcihkZXZpY2UsIDUwKTsKIH0KIAogLyoKQEAgLTE5NjgsNyArMTk3Niw3IEBACiBkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCWludCBtYXhfY291bnQ7CisJaW50IG1heF9jb3VudCwgb3Blbl9jb3VudDsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2RldihjZGV2KTsKIAlpZiAoSVNfRVJSKGRldmljZSkpCkBAIC0xOTg1LDEwICsxOTkzLDE2IEBACiAJICogaW4gdGhlIG90aGVyIG9wZW5lcnMuCiAJICovCiAJbWF4X2NvdW50ID0gZGV2aWNlLT5iZGV2ID8gMCA6IC0xOwotCWlmIChhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KSA+IG1heF9jb3VudCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSB3aXRoIG9wZW4iCi0JCQkiIGNvdW50ID0gJWkuXG4iLAotCQkJYXRvbWljX3JlYWQoJmRldmljZS0+b3Blbl9jb3VudCkpOworCW9wZW5fY291bnQgPSAoaW50KSBhdG9taWNfcmVhZCgmZGV2aWNlLT5vcGVuX2NvdW50KTsKKwlpZiAob3Blbl9jb3VudCA+IG1heF9jb3VudCkgeworCQlpZiAob3Blbl9jb3VudCA+IDApCisJCQlwcmludGsgKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSB3aXRoICIKKwkJCQkib3BlbiBjb3VudCA9ICVpLlxuIiwKKwkJCQlvcGVuX2NvdW50KTsKKwkJZWxzZQorCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzIiwKKwkJCQkiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSBkdWUgdG8gaW50ZXJuYWwgIgorCQkJCSJ1c2VcbiIpOwogCQljbGVhcl9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZkZXZpY2UtPmZsYWdzKTsKIAkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IGMxYzZmMTMuLjIxNmJjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC00NSw2ICs0NSw3IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBkZXZpbmRleDsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmVhdHVyZXM7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGRhc2RfdWlkIHVpZDsKIH07CiAKIC8qCkBAIC03MTYsNiArNzE3LDY4IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihkaXNjaXBsaW5lLCAwNDQ0LCBkYXNkX2Rpc2NpcGxpbmVfc2hvdywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90CitkYXNkX2FsaWFzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCWludCBhbGlhczsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXYtPmJ1c19pZCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlpZiAoIUlTX0VSUihkZXZtYXApKQorCQlhbGlhcyA9IGRldm1hcC0+dWlkLmFsaWFzOworCWVsc2UKKwkJYWxpYXMgPSAwOworCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgYWxpYXMgPyAiMVxuIiA6ICIwXG4iKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGFsaWFzLCAwNDQ0LCBkYXNkX2FsaWFzX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorZGFzZF92ZW5kb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJY2hhciAqdmVuZG9yOworCisJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGRldi0+YnVzX2lkKTsKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWlmICghSVNfRVJSKGRldm1hcCkgJiYgc3RybGVuKGRldm1hcC0+dWlkLnZlbmRvcikgPiAwKQorCQl2ZW5kb3IgPSBkZXZtYXAtPnVpZC52ZW5kb3I7CisJZWxzZQorCQl2ZW5kb3IgPSAiIjsKKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgdmVuZG9yKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHZlbmRvciwgMDQ0NCwgZGFzZF92ZW5kb3Jfc2hvdywgTlVMTCk7CisKKyNkZWZpbmUgVUlEX1NUUkxFTiAoIC8qIHZlbmRvciAqLyAzICsgMSArIC8qIHNlcmlhbCAgICAqLyAxNCArIDEgK1wKKwkJICAgICAvKiBTU0lEICAgKi8gNCArIDEgKyAvKiB1bml0IGFkZHIgKi8gMiArIDEpCisKK3N0YXRpYyBzc2l6ZV90CitkYXNkX3VpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKwljaGFyIHVpZFtVSURfU1RSTEVOXTsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXYtPmJ1c19pZCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlpZiAoIUlTX0VSUihkZXZtYXApICYmIHN0cmxlbihkZXZtYXAtPnVpZC52ZW5kb3IpID4gMCkKKwkJc25wcmludGYodWlkLCBzaXplb2YodWlkKSwgIiVzLiVzLiUwNHguJTAyeCIsCisJCQkgZGV2bWFwLT51aWQudmVuZG9yLCBkZXZtYXAtPnVpZC5zZXJpYWwsCisJCQkgZGV2bWFwLT51aWQuc3NpZCwgZGV2bWFwLT51aWQudW5pdF9hZGRyKTsKKwllbHNlCisJCXVpZFswXSA9IDA7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHVpZCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih1aWQsIDA0NDQsIGRhc2RfdWlkX3Nob3csIE5VTEwpOworCiAvKgogICogZXh0ZW5kZWQgZXJyb3ItcmVwb3J0aW5nCiAgKi8KQEAgLTc1OSw2ICs4MjIsOSBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYXNkX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3JlYWRvbmx5LmF0dHIsCiAJJmRldl9hdHRyX2Rpc2NpcGxpbmUuYXR0ciwKKwkmZGV2X2F0dHJfYWxpYXMuYXR0ciwKKwkmZGV2X2F0dHJfdmVuZG9yLmF0dHIsCisJJmRldl9hdHRyX3VpZC5hdHRyLAogCSZkZXZfYXR0cl91c2VfZGlhZy5hdHRyLAogCSZkZXZfYXR0cl9lZXJfZW5hYmxlZC5hdHRyLAogCU5VTEwsCkBAIC03NjgsNiArODM0LDQyIEBACiAJLmF0dHJzID0gZGFzZF9hdHRycywKIH07CiAKKworLyoKKyAqIFJldHVybiBjb3B5IG9mIHRoZSBkZXZpY2UgdW5pcXVlIGlkZW50aWZpZXIuCisgKi8KK2ludAorZGFzZF9nZXRfdWlkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGFzZF91aWQgKnVpZCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChjZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybiBQVFJfRVJSKGRldm1hcCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwkqdWlkID0gZGV2bWFwLT51aWQ7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiAwOworfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGdpdmVuIGRldmljZSB1bmlxdWUgaWRlbnRpZmllciBpbnRvIGRldm1hcCBzdHJ1Y3QuCisgKi8KK2ludAorZGFzZF9zZXRfdWlkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgZGFzZF91aWQgKnVpZCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChjZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybiBQVFJfRVJSKGRldm1hcCk7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlkZXZtYXAtPnVpZCA9ICp1aWQ7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkYXNkX3NldF91aWQpOworCiAvKgogICogUmV0dXJuIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmVhdHVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGVlMDllZjMuLjdkNWE2Y2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC00NDYsNiArNDQ2LDM5IEBACiAJcmV0dXJuIExBQkVMX1NJWkU7CiB9CiAKKy8qCisgKiBHZW5lcmF0ZSBkZXZpY2UgdW5pcXVlIGlkIHRoYXQgc3BlY2lmaWVzIHRoZSBwaHlzaWNhbCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2Rhc2RfZWNrZF9nZW5lcmF0ZV91aWQoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX3VpZCAqdWlkKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgZGFzZF9lY2tkX2NvbmZkYXRhICpjb25mZGF0YTsKKworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKKwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PREVWOworCWNvbmZkYXRhID0gJnByaXZhdGUtPmNvbmZfZGF0YTsKKwlpZiAoIWNvbmZkYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1lbXNldCh1aWQsIDAsIHNpemVvZihzdHJ1Y3QgZGFzZF91aWQpKTsKKwlzdHJuY3B5KHVpZC0+dmVuZG9yLCBjb25mZGF0YS0+bmVkMS5IREFfbWFudWZhY3R1cmVyLAorCQlzaXplb2YodWlkLT52ZW5kb3IpIC0gMSk7CisJRUJDQVNDKHVpZC0+dmVuZG9yLCBzaXplb2YodWlkLT52ZW5kb3IpIC0gMSk7CisJc3RybmNweSh1aWQtPnNlcmlhbCwgY29uZmRhdGEtPm5lZDEuSERBX2xvY2F0aW9uLAorCQlzaXplb2YodWlkLT5zZXJpYWwpIC0gMSk7CisJRUJDQVNDKHVpZC0+c2VyaWFsLCBzaXplb2YodWlkLT5zZXJpYWwpIC0gMSk7CisJdWlkLT5zc2lkID0gY29uZmRhdGEtPm5lcS5zdWJzeXN0ZW1JRDsKKwlpZiAoY29uZmRhdGEtPm5lZDIuc25lcS5mbGFncyA9PSAweDQwKSB7CisJCXVpZC0+YWxpYXMgPSAxOworCQl1aWQtPnVuaXRfYWRkciA9IGNvbmZkYXRhLT5uZWQyLnNuZXEuYmFzZV91bml0X2FkZHI7CisJfSBlbHNlCisJCXVpZC0+dW5pdF9hZGRyID0gY29uZmRhdGEtPm5lZDEudW5pdF9hZGRyOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIGRhc2RfZWNrZF9yZWFkX2NvbmYoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CkBAIC01MDcsMTEgKzU0MCwxNSBAQAogCXJldHVybiAwOwogfQogCi0KKy8qCisgKiBDaGVjayBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzLgorICogSWYgdGhlIGRldmljZSBpcyBhY2Nlc3NpYmxlIHVzaW5nIEVDS0QgZGlzY2lwbGluZSwgdGhlIGRldmljZSBpcyBlbmFibGVkLgorICovCiBzdGF0aWMgaW50CiBkYXNkX2Vja2RfY2hlY2tfY2hhcmFjdGVyaXN0aWNzKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgZGFzZF91aWQgdWlkOwogCXZvaWQgKnJkY19kYXRhOwogCWludCByYzsKIApAQCAtNTM2LDYgKzU3Myw3IEBACiAKIAkvKiBSZWFkIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgKi8KIAlyZGNfZGF0YSA9ICh2b2lkICopICYocHJpdmF0ZS0+cmRjX2RhdGEpOworCW1lbXNldChyZGNfZGF0YSwgMCwgc2l6ZW9mKHJkY19kYXRhKSk7CiAJcmMgPSByZWFkX2Rldl9jaGFycyhkZXZpY2UtPmNkZXYsICZyZGNfZGF0YSwgNjQpOwogCWlmIChyYykgewogCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKQEAgLTU1Niw4ICs1OTQsMTcgQEAKIAogCS8qIFJlYWQgQ29uZmlndXJhdGlvbiBEYXRhICovCiAJcmMgPSBkYXNkX2Vja2RfcmVhZF9jb25mIChkZXZpY2UpOwotCXJldHVybiByYzsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAorCS8qIEdlbmVyYXRlIGRldmljZSB1bmlxdWUgaWQgYW5kIHJlZ2lzdGVyIGluIGRldm1hcCAqLworCXJjID0gZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChkZXZpY2UsICZ1aWQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBkYXNkX3NldF91aWQoZGV2aWNlLT5jZGV2LCAmdWlkKTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCmluZGV4IGFkODUyNGIuLmQ1NzM0ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKQEAgLTIyOCwyNiArMjI4LDM2IEBACiAJCXVuc2lnbmVkIGNoYXIgSERBX21hbnVmYWN0dXJlclszXTsKIAkJdW5zaWduZWQgY2hhciBIREFfbG9jYXRpb25bMl07CiAJCXVuc2lnbmVkIGNoYXIgSERBX3NlcW5vWzEyXTsKLQkJX191MTYgSUQ7CisJCV9fdTggSUQ7CisJCV9fdTggdW5pdF9hZGRyOwogCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIG5lZDE7Ci0Jc3RydWN0IHsKKwl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBjaGFyIGlkZW50aWZpZXI6MjsKLQkJCXVuc2lnbmVkIGNoYXIgdG9rZW5faWQ6MTsKLQkJCXVuc2lnbmVkIGNoYXIgc25vX3ZhbGlkOjE7Ci0JCQl1bnNpZ25lZCBjaGFyIHN1YnN0X3NubzoxOwotCQkJdW5zaWduZWQgY2hhciByZWNORUQ6MTsKLQkJCXVuc2lnbmVkIGNoYXIgZW11TkVEOjE7Ci0JCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkOjE7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZsYWdzOwotCQlfX3U4IGRlc2NyaXB0b3I7Ci0JCV9fdTggcmVzZXJ2ZWRbMl07Ci0JCXVuc2lnbmVkIGNoYXIgZGV2X3R5cGVbNl07Ci0JCXVuc2lnbmVkIGNoYXIgZGV2X21vZGVsWzNdOwotCQl1bnNpZ25lZCBjaGFyIERBU0RfbWFudWZhY3R1cmVyWzNdOwotCQl1bnNpZ25lZCBjaGFyIERBU0RfbG9jYXRpb25bMl07Ci0JCXVuc2lnbmVkIGNoYXIgREFTRF9zZXFub1sxMl07Ci0JCV9fdTE2IElEOworCQkJc3RydWN0IHsKKwkJCQl1bnNpZ25lZCBjaGFyIGlkZW50aWZpZXI6MjsKKwkJCQl1bnNpZ25lZCBjaGFyIHRva2VuX2lkOjE7CisJCQkJdW5zaWduZWQgY2hhciBzbm9fdmFsaWQ6MTsKKwkJCQl1bnNpZ25lZCBjaGFyIHN1YnN0X3NubzoxOworCQkJCXVuc2lnbmVkIGNoYXIgcmVjTkVEOjE7CisJCQkJdW5zaWduZWQgY2hhciBlbXVORUQ6MTsKKwkJCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkOjE7CisJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmbGFnczsKKwkJCV9fdTggZGVzY3JpcHRvcjsKKwkJCV9fdTggcmVzZXJ2ZWRbMl07CisJCQl1bnNpZ25lZCBjaGFyIGRldl90eXBlWzZdOworCQkJdW5zaWduZWQgY2hhciBkZXZfbW9kZWxbM107CisJCQl1bnNpZ25lZCBjaGFyIERBU0RfbWFudWZhY3R1cmVyWzNdOworCQkJdW5zaWduZWQgY2hhciBEQVNEX2xvY2F0aW9uWzJdOworCQkJdW5zaWduZWQgY2hhciBEQVNEX3NlcW5vWzEyXTsKKwkJCV9fdTE2IElEOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBuZWQ7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyIGZsYWdzOyAgICAgICAgICAgIC8qIGJ5dGUgIDAgICAgKi8KKwkJCXVuc2lnbmVkIGNoYXIgcmVzMls3XTsgICAgICAgICAgLyogYnl0ZSAgMS0gNyAqLworCQkJdW5zaWduZWQgY2hhciBzdWFfZmxhZ3M7CS8qIGJ5dGUgIDggICAgKi8KKwkJCV9fdTggYmFzZV91bml0X2FkZHI7ICAgICAgICAgICAgLyogYnl0ZSAgOSAgICAqLworCQkJdW5zaWduZWQgY2hhciByZXMzWzIyXTsJICAgICAgICAvKiBieXRlIDEwLTMxICovCisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNuZXE7CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbmVkMjsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwppbmRleCA4ZmQ3MWFiLi5iODQyMzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwpAQCAtMzIsOSArMzIsOCBAQAogCWludCBzaXplOwogCiAJLyogU2FuaXR5IGNoZWNrcyAqLwotCWlmICggbWFnaWMgPT0gTlVMTCB8fCBkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fAotCSAgICAgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKQotCQlCVUcoKTsKKwlCVUdfT04oIG1hZ2ljID09IE5VTEwgfHwgZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwKKwkgICAgIChjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKSA+IFBBR0VfU0laRSk7CiAKIAlzaXplID0gKHNpemVvZihzdHJ1Y3QgZGFzZF9jY3dfcmVxKSArIDdMKSAmIC04TDsKIAlpZiAoY3BsZW5ndGggPiAwKQpAQCAtMTI1LDggKzEyNCw3IEBACiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHN1Y2Nlc3M7CiAKLQlpZiAoY3FyLT5yZWZlcnMgPT0gTlVMTCB8fCBjcXItPmZ1bmN0aW9uID09IE5VTEwpCi0JCUJVRygpOworCUJVR19PTihjcXItPnJlZmVycyA9PSBOVUxMIHx8IGNxci0+ZnVuY3Rpb24gPT0gTlVMTCk7CiAKIAlkZXZpY2UgPSBjcXItPmRldmljZTsKIAlzdWNjZXNzID0gY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfRE9ORTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggNDI5M2JhOC4uZDRiMTNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTI2OCw2ICsyNjgsMTYgQEAKIAogZXh0ZXJuIHN0cnVjdCBkYXNkX2Rpc2NpcGxpbmUgKmRhc2RfZGlhZ19kaXNjaXBsaW5lX3BvaW50ZXI7CiAKKy8qCisgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgZGFzZCBkZXZpY2UuCisgKi8KK3N0cnVjdCBkYXNkX3VpZCB7CisJX191OCBhbGlhczsKKwljaGFyIHZlbmRvcls0XTsKKwljaGFyIHNlcmlhbFsxNV07CisJX191MTYgc3NpZDsKKwlfX3U4IHVuaXRfYWRkcjsKK307CiAKIC8qCiAgKiBOb3RpZmljYXRpb24gbnVtYmVycyBmb3IgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIG5vdGlmaWNhdGlvbnM6CkBAIC01MTYsNiArNTI2LDggQEAKIHN0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9jcmVhdGVfZGV2aWNlKHN0cnVjdCBjY3dfZGV2aWNlICopOwogdm9pZCBkYXNkX2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGRhc2RfZGV2aWNlICopOwogCitpbnQgZGFzZF9nZXRfdWlkKHN0cnVjdCBjY3dfZGV2aWNlICosIHN0cnVjdCBkYXNkX3VpZCAqKTsKK2ludCBkYXNkX3NldF91aWQoc3RydWN0IGNjd19kZXZpY2UgKiwgc3RydWN0IGRhc2RfdWlkICopOwogaW50IGRhc2RfZ2V0X2ZlYXR1cmUoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50KTsKIGludCBkYXNkX3NldF9mZWF0dXJlKHN0cnVjdCBjY3dfZGV2aWNlICosIGludCwgaW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDFhYTNjMjYuLmFkMjNhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTI5NCwyMyArMjk0LDQwIEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0RBU0RfUFJPRklMRSAqLwogfQogCisvKgorICogQ3JlYXRlIGRhc2QgcHJvYy1mcyBlbnRyaWVzLgorICogSW4gY2FzZSBjcmVhdGlvbiBmYWlsZWQsIGNsZWFudXAgYW5kIHJldHVybiAtRU5PRU5ULgorICovCiBpbnQKIGRhc2RfcHJvY19pbml0KHZvaWQpCiB7CiAJZGFzZF9wcm9jX3Jvb3RfZW50cnkgPSBwcm9jX21rZGlyKCJkYXNkIiwgJnByb2Nfcm9vdCk7CisJaWYgKCFkYXNkX3Byb2Nfcm9vdF9lbnRyeSkKKwkJZ290byBvdXRfbm9kYXNkOwogCWRhc2RfcHJvY19yb290X2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWRhc2RfZGV2aWNlc19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZXZpY2VzIiwKIAkJCQkJICAgICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKwlpZiAoIWRhc2RfZGV2aWNlc19lbnRyeSkKKwkJZ290byBvdXRfbm9kZXZpY2VzOwogCWRhc2RfZGV2aWNlc19lbnRyeS0+cHJvY19mb3BzID0gJmRhc2RfZGV2aWNlc19maWxlX29wczsKIAlkYXNkX2RldmljZXNfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInN0YXRpc3RpY3MiLAogCQkJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCQkgIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKwlpZiAoIWRhc2Rfc3RhdGlzdGljc19lbnRyeSkKKwkJZ290byBvdXRfbm9zdGF0aXN0aWNzOwogCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+cmVhZF9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3JlYWQ7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT53cml0ZV9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3dyaXRlOwogCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlyZXR1cm4gMDsKKworIG91dF9ub3N0YXRpc3RpY3M6CisJcmVtb3ZlX3Byb2NfZW50cnkoImRldmljZXMiLCBkYXNkX3Byb2Nfcm9vdF9lbnRyeSk7Cisgb3V0X25vZGV2aWNlczoKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGFzZCIsICZwcm9jX3Jvb3QpOworIG91dF9ub2Rhc2Q6CisJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCmluZGV4IDZiYWRkODQuLmQ0ZDJmZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYwpAQCAtNTQsNyArNTQsNyBAQAogCWlmICgha2JkKQogCQlnb3RvIG91dDsKIAlrYmQtPmtleV9tYXBzID0ga3phbGxvYyhzaXplb2Yoa2V5X21hcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtleV9tYXBzKQorCWlmICgha2JkLT5rZXlfbWFwcykKIAkJZ290byBvdXRfa2JkOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleV9tYXBzKTsgaSsrKSB7CiAJCWlmIChrZXlfbWFwc1tpXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jCmluZGV4IGFjMTBkZmIuLjkxZTkzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcncuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogLyoKICAqIFRoZSByb29tIGZvciB0aGUgU0NDQiAob25seSBmb3Igd3JpdGluZykgaXMgbm90IGVxdWFsIHRvIGEgcGFnZXMgc2l6ZQotICogKGFzIGl0IGlzIHNwZWNpZmllZCBhcyB0aGUgbWF4aW11bSBzaXplIGluIHRoZSB0aGUgU0NMUCBkdWN1bWVudGF0aW9uKQorICogKGFzIGl0IGlzIHNwZWNpZmllZCBhcyB0aGUgbWF4aW11bSBzaXplIGluIHRoZSB0aGUgU0NMUCBkb2N1bWVudGF0aW9uKQogICogYmVjYXVzZSBvZiB0aGUgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZSBkZXNjcmliZWQgYWJvdmUuCiAgKi8KICNkZWZpbmUgTUFYX1NDQ0JfUk9PTSAoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBzY2xwX2J1ZmZlcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCmluZGV4IGMzOTE1ZjYuLmQ3MWVmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCkBAIC0yMzAsMTQgKzIzMCwxNiBAQAogICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHNjaGVkdWxlIGZvbGxvdy11cCBhY3Rpb25zIGZyb20gd2l0aGluIGFuCiAgKiBpbnRlcnJ1cHQgY29udGV4dCAobGlrZSB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzKS4KICAqLworc3RydWN0IHdvcmtfaGFuZGxlcl9kYXRhIHsKKwlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZTsKKwllbnVtIHRhcGVfb3AgICAgICAgIG9wOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgd29yazsKK307CisKIHN0YXRpYyB2b2lkCiB0YXBlXzM1OTBfd29ya19oYW5kbGVyKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7Ci0JCWVudW0gdGFwZV9vcCBvcDsKLQkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0JfSAqcCA9IGRhdGE7CisJc3RydWN0IHdvcmtfaGFuZGxlcl9kYXRhICpwID0gZGF0YTsKIAogCXN3aXRjaCAocC0+b3ApIHsKIAljYXNlIFRPX01TRU46CkBAIC0yNTcsMTEgKzI1OSw3IEBACiBzdGF0aWMgaW50CiB0YXBlXzM1OTBfc2NoZWR1bGVfd29yayhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgZW51bSB0YXBlX29wIG9wKQogewotCXN0cnVjdCB7Ci0JCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlOwotCQllbnVtIHRhcGVfb3Agb3A7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCX0gKnA7CisJc3RydWN0IHdvcmtfaGFuZGxlcl9kYXRhICpwOwogCiAJaWYgKChwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMTYsNyArMzE0LDcgQEAKIAogCXJxX2Zvcl9lYWNoX2JpbyhiaW8sIHJlcSkgewogCQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCQlkc3QgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCQlkc3QgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKIAkJCWZvciAob2ZmID0gMDsgb2ZmIDwgYnYtPmJ2X2xlbjsKIAkJCSAgICAgb2ZmICs9IFRBUEVCTE9DS19IU0VDX1NJWkUpIHsKIAkJCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfQ0M7CkBAIC0xMTY4LDYgKzExNjYsNyBAQAogc3RhdGljIHZvaWQKIHRhcGVfMzU5MF9jbGVhbnVwX2RldmljZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCXRhcGVfc3RkX3VuYXNzaWduKGRldmljZSk7CiAKIAlrZnJlZShkZXZpY2UtPmRpc2NkYXRhKTsKQEAgLTEyMzQsNiArMTIzMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RldmljZV9pZCB0YXBlXzM1OTBfaWRzW10gPSB7CiAJe0NDV19ERVZJQ0VfREVWVFlQRSgweDM1OTAsIDAsIDB4MzU5MCwgMCksIC5kcml2ZXJfaW5mbyA9IHRhcGVfMzU5MH0sCisJe0NDV19ERVZJQ0VfREVWVFlQRSgweDM1OTIsIDAsIDB4MzU5MiwgMCksIC5kcml2ZXJfaW5mbyA9IHRhcGVfMzU5Mn0sCiAJeyAvKiBlbmQgb2YgbGlzdCAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggNWNlZDI3Mi4uYjcwZDkyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTk4LDkgKzE5OCw3IEBACiAKIAlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopIHF1ZXVlLT5xdWV1ZWRhdGE7CiAJREJGX0xIKDYsICJ0YXBlYmxvY2tfcmVxdWVzdF9mbihkZXZpY2U9JXApXG4iLCBkZXZpY2UpOwotCWlmIChkZXZpY2UgPT0gTlVMTCkKLQkJQlVHKCk7Ci0KKwlCVUdfT04oZGV2aWNlID09IE5VTEwpOwogCXRhcGVibG9ja190cmlnZ2VyX3JlcXVldWUoZGV2aWNlKTsKIH0KIApAQCAtMzA3LDggKzMwNSw3IEBACiAJaW50CQkJcmM7CiAKIAlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopIGRpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoIWRldmljZSkKLQkJQlVHKCk7CisJQlVHX09OKCFkZXZpY2UpOwogCiAJaWYgKCFkZXZpY2UtPmJsa19kYXRhLm1lZGl1bV9jaGFuZ2VkKQogCQlyZXR1cm4gMDsKQEAgLTQzNSwxNiArNDMyLDE0IEBACiApIHsKIAlpbnQgcmM7CiAJaW50IG1pbm9yOwotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZTsKIAogCXJjICAgICA9IDA7CiAJZGlzayAgID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlpZiAoIWRpc2spCi0JCUJVRygpOworCUJVR19PTighZGlzayk7CiAJZGV2aWNlID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmICghZGV2aWNlKQotCQlCVUcoKTsKKwlCVUdfT04oIWRldmljZSk7CiAJbWlub3IgID0gaW1pbm9yKGlub2RlKTsKIAogCURCRl9MSCg2LCAidGFwZWJsb2NrX2lvY3RsKDB4JTB4KVxuIiwgY29tbWFuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCmluZGV4IDM4OWVlMmMuLmU2ZTQwODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCkBAIC0yMTAsMTggKzIxMCwxNCBAQAogCQlyZXR1cm47CiAJfQogCURCRl9FVkVOVCg0LCAidHMuIGRldjoJJXhcbiIsIGRldmljZS0+Zmlyc3RfbWlub3IpOwotCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPCBUT19TSVpFICYmIGRldmljZS0+dGFwZV9zdGF0ZSA+PSAwKQotCQlzdHIgPSB0YXBlX3N0YXRlX3ZlcmJvc2VbZGV2aWNlLT50YXBlX3N0YXRlXTsKLQllbHNlCi0JCXN0ciA9ICJVTktOT1dOIFRTIjsKLQlEQkZfRVZFTlQoNCwgIm9sZCB0czoJJXNcbiIsIHN0cik7Ci0JaWYgKGRldmljZS0+dGFwZV9zdGF0ZSA8IFRPX1NJWkUgJiYgZGV2aWNlLT50YXBlX3N0YXRlID49MCApCisJREJGX0VWRU5UKDQsICJvbGQgdHM6XHRcbiIpOworCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPCBUU19TSVpFICYmIGRldmljZS0+dGFwZV9zdGF0ZSA+PTAgKQogCQlzdHIgPSB0YXBlX3N0YXRlX3ZlcmJvc2VbZGV2aWNlLT50YXBlX3N0YXRlXTsKIAllbHNlCiAJCXN0ciA9ICJVTktOT1dOIFRTIjsKIAlEQkZfRVZFTlQoNCwgIiVzXG4iLCBzdHIpOwogCURCRl9FVkVOVCg0LCAibmV3IHRzOlx0XG4iKTsKLQlpZiAobmV3c3RhdGUgPCBUT19TSVpFICYmIG5ld3N0YXRlID49IDApCisJaWYgKG5ld3N0YXRlIDwgVFNfU0laRSAmJiBuZXdzdGF0ZSA+PSAwKQogCQlzdHIgPSB0YXBlX3N0YXRlX3ZlcmJvc2VbbmV3c3RhdGVdOwogCWVsc2UKIAkJc3RyID0gIlVOS05PV04gVFMiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmgKaW5kZXggMmQzMTE3OS4uMWZjOTUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5oCkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICAgICAgdGFwZV8zNDgwLAogICAgICAgICB0YXBlXzM0OTAsCiAgICAgICAgIHRhcGVfMzU5MCwKKyAgICAgICAgdGFwZV8zNTkyLAogfTsKIAogI2VuZGlmIC8vIF9UQVBFX1NURF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwppbmRleCBjYjhlMmU2Li4wOTYwYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKQEAgLTQxNCwxMSArNDE0LDExIEBACiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSAoImNpb19pZ25vcmUiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJICAgJnByb2Nfcm9vdCk7CiAJaWYgKCFlbnRyeSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PRU5UOwogCiAJZW50cnktPnByb2NfZm9wcyA9ICZjaW9faWdub3JlX3Byb2NfZm9wczsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBfX2luaXRjYWxsIChjaW9faWdub3JlX3Byb2NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCmluZGV4IDY0MTJiMmMuLjcyMTg3ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCkBAIC0yNDIsMjggKzI0MiwxMCBAQAogCWlmIChzY2gtPnZwbSA9PSBtYXNrKQogCQlnb3RvIG91dF91bnJlZzsKIAotCWlmICgoc2NoLT5zY2hpYi5zY3N3LmFjdGwgJiAoU0NTV19BQ1RMX0NMRUFSX1BFTkQgfAotCQkJCSAgICAgU0NTV19BQ1RMX0hBTFRfUEVORCB8Ci0JCQkJICAgICBTQ1NXX0FDVExfU1RBUlRfUEVORCB8Ci0JCQkJICAgICBTQ1NXX0FDVExfUkVTVU1FX1BFTkQpKSAmJgotCSAgICAoc2NoLT5zY2hpYi5wbWN3LmxwdW0gPT0gbWFzaykpIHsKLQkJaW50IGNjID0gY2lvX2NhbmNlbChzY2gpOwotCQkKLQkJaWYgKGNjID09IC1FTk9ERVYpCi0JCQlnb3RvIG91dF91bnJlZzsKLQotCQlpZiAoY2MgPT0gLUVJTlZBTCkgewotCQkJY2MgPSBjaW9fY2xlYXIoc2NoKTsKLQkJCWlmIChjYyA9PSAtRU5PREVWKQotCQkJCWdvdG8gb3V0X3VucmVnOwotCQkJLyogQ2FsbCBoYW5kbGVyLiAqLwotCQkJaWYgKHNjaC0+ZHJpdmVyICYmIHNjaC0+ZHJpdmVyLT50ZXJtaW5hdGlvbikKLQkJCQlzY2gtPmRyaXZlci0+dGVybWluYXRpb24oJnNjaC0+ZGV2KTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCX0gZWxzZSBpZiAoKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX0RFVkFDVCkgJiYKLQkJICAgKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX1NDSEFDVCkgJiYKLQkJICAgKHNjaC0+c2NoaWIucG1jdy5scHVtID09IG1hc2spKSB7CisJaWYgKChzY2gtPnNjaGliLnNjc3cuYWN0bCAmIFNDU1dfQUNUTF9ERVZBQ1QpICYmCisJICAgIChzY2gtPnNjaGliLnNjc3cuYWN0bCAmIFNDU1dfQUNUTF9TQ0hBQ1QpICYmCisJICAgIChzY2gtPnNjaGliLnBtY3cubHB1bSA9PSBtYXNrKSAmJgorCSAgICAoc2NoLT52cG0gPT0gMCkpIHsKIAkJaW50IGNjOwogCiAJCWNjID0gY2lvX2NsZWFyKHNjaCk7CkBAIC02NTMsMTMgKzYzNSwxMyBAQAogCQlpZiAoc2NoLT5zY2hpYi5wbWN3LmNocGlkW2ldID09IGNocC0+aWQpIHsKIAkJCWlmIChzdHNjaChzY2gtPnNjaGlkLCAmc2NoLT5zY2hpYikgIT0gMCkgewogCQkJCS8qIEVuZGdhbWUuICovCi0JCQkJc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOwogCQkJCXJldHVybiAtRU5YSU87CiAJCQl9CiAJCQlicmVhazsKIAkJfQogCWlmIChpPT04KSB7Ci0JCXNwaW5fdW5sb2NrKCZzY2gtPmxvY2spOworCQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAlzY2gtPmxwbSA9ICgoc2NoLT5zY2hpYi5wbWN3LnBpbSAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCBjYmI4NmZhLi41YjIwZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAlkZWJ1Z19yZWdpc3Rlcl92aWV3IChjaW9fZGVidWdfbXNnX2lkLCAmZGVidWdfc3ByaW50Zl92aWV3KTsKIAlkZWJ1Z19zZXRfbGV2ZWwgKGNpb19kZWJ1Z19tc2dfaWQsIDIpOwotCWNpb19kZWJ1Z190cmFjZV9pZCA9IGRlYnVnX3JlZ2lzdGVyICgiY2lvX3RyYWNlIiwgMTYsIDQsIDgpOworCWNpb19kZWJ1Z190cmFjZV9pZCA9IGRlYnVnX3JlZ2lzdGVyICgiY2lvX3RyYWNlIiwgMTYsIDQsIDE2KTsKIAlpZiAoIWNpb19kZWJ1Z190cmFjZV9pZCkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAlkZWJ1Z19yZWdpc3Rlcl92aWV3IChjaW9fZGVidWdfdHJhY2VfaWQsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npb19kZWJ1Zy5oIGIvZHJpdmVycy9zMzkwL2Npby9jaW9fZGVidWcuaAppbmRleCA2YWY4YjI3Li5mODg4NDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npb19kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvX2RlYnVnLmgKQEAgLTMsNiArMywxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKKy8qIGZvciB1c2Ugb2YgZGVidWcgZmVhdHVyZSAqLworZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX21zZ19pZDsKK2V4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDsKK2V4dGVybiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19jcndfaWQ7CisKICNkZWZpbmUgQ0lPX1RSQUNFX0VWRU5UKGltcCwgdHh0KSBkbyB7IFwKIAkJZGVidWdfdGV4dF9ldmVudChjaW9fZGVidWdfdHJhY2VfaWQsIGltcCwgdHh0KTsgXAogCX0gd2hpbGUgKDApCkBAIC0xNSwxOCArMjAsMTkgQEAKIAkJZGVidWdfc3ByaW50Zl9ldmVudChjaW9fZGVidWdfY3J3X2lkLCBpbXAgLCAjI2FyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDSU9fSEVYX0VWRU5UKGltcCwgYXJncy4uLikgZG8geyBcCi0gICAgICAgICAgICAgICAgZGVidWdfZXZlbnQoY2lvX2RlYnVnX3RyYWNlX2lkLCBpbXAsICMjYXJncyk7IFwKLSAgICAgICAgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorQ0lPX0hFWF9FVkVOVChpbnQgbGV2ZWwsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJZGVidWdfZXZlbnQoY2lvX2RlYnVnX3RyYWNlX2lkLCBsZXZlbCwgZGF0YSwgbGVuZ3RoKTsKKwkJbGVuZ3RoIC09IGNpb19kZWJ1Z190cmFjZV9pZC0+YnVmX3NpemU7CisJCWRhdGEgKz0gY2lvX2RlYnVnX3RyYWNlX2lkLT5idWZfc2l6ZTsKKwl9Cit9CiAKICNkZWZpbmUgQ0lPX0RFQlVHKHByaW50a19sZXZlbCxldmVudF9sZXZlbCxtc2cuLi4pICh7IFwKIAlpZiAoY2lvX3Nob3dfbXNnKSBwcmludGsocHJpbnRrX2xldmVsIG1zZyk7IFwKIAlDSU9fTVNHX0VWRU5UIChldmVudF9sZXZlbCwgbXNnKTsgXAogfSkKIAotLyogZm9yIHVzZSBvZiBkZWJ1ZyBmZWF0dXJlICovCi1leHRlcm4gZGVidWdfaW5mb190ICpjaW9fZGVidWdfbXNnX2lkOwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX3RyYWNlX2lkOwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaAppbmRleCA3NGEyNTdiLi5lMjEwZjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKQEAgLTQ1LDExICs0NSwxMSBAQAogCXVuaW9uIHsKIAkJX191OCBmYzsgICAJLyogU1BJRCBmdW5jdGlvbiBjb2RlICovCiAJCXN0cnVjdCBwYXRoX3N0YXRlIHBzOwkvKiBTTklEIHBhdGggc3RhdGUgKi8KLQl9IGluZjsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpbmY7CiAJdW5pb24gewogCQlfX3UzMiBjcHVfYWRkcgk6IDE2OwkvKiBDUFUgYWRkcmVzcyAqLwogCQlzdHJ1Y3QgZXh0ZW5kZWRfY3NzaWQgZXh0X2Nzc2lkOwotCX0gcGdpZF9oaWdoOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHBnaWRfaGlnaDsKIAlfX3UzMiBjcHVfaWQJOiAyNDsJLyogQ1BVIGlkZW50aWZpY2F0aW9uICovCiAJX191MzIgY3B1X21vZGVsIDogMTY7CS8qIENQVSBtb2RlbCAqLwogCV9fdTMyIHRvZF9oaWdoOwkJLyogaGlnaCB3b3JkIFRPRCBjbG9jayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCAxODBiM2JmLi40OWVjNTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtNzQ5LDcgKzc0OSw3IEBACiAJCQkvKiBVbml0IGNoZWNrIGJ1dCBubyBzZW5zZSBkYXRhLiBOZWVkIGJhc2ljIHNlbnNlLiAqLwogCQkJaWYgKGNjd19kZXZpY2VfZG9fc2Vuc2UoY2RldiwgaXJiKSAhPSAwKQogCQkJCWdvdG8gY2FsbF9oYW5kbGVyX3Vuc29sOwotCQkJbWVtY3B5KGlyYiwgJmNkZXYtPnByaXZhdGUtPmlyYiwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKKwkJCW1lbWNweSgmY2Rldi0+cHJpdmF0ZS0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CiAJCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9XNFNFTlNFOwogCQkJY2Rldi0+cHJpdmF0ZS0+aW50cGFybSA9IDA7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jCmluZGV4IDgxNGY5MjUuLjk2ZjUxOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtODAsNiArODEsOCBAQAogc3RhdGljIF9fdTMyICogdm9sYXRpbGUgaW5kaWNhdG9yczsKIHN0YXRpYyBfX3UzMiB2b2xhdGlsZSBzcGFyZV9pbmRpY2F0b3I7CiBzdGF0aWMgYXRvbWljX3Qgc3BhcmVfaW5kaWNhdG9yX3VzZWNvdW50OworI2RlZmluZSBRRElPX01FTVBPT0xfU0NTU0NfRUxFTUVOVFMgMgorc3RhdGljIG1lbXBvb2xfdCAqcWRpb19tZW1wb29sX3Njc3NjOwogCiBzdGF0aWMgZGVidWdfaW5mb190ICpxZGlvX2RiZl9zZXR1cDsKIHN0YXRpYyBkZWJ1Z19pbmZvX3QgKnFkaW9fZGJmX3NiYWw7CkBAIC0xNjM3LDcgKzE2NDAsNyBAQAogCiAJfQogCWtmcmVlKGlycV9wdHItPnFkcik7Ci0Ja2ZyZWUoaXJxX3B0cik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIzMDQsNyArMjMwNyw3IEBACiAKIAlRRElPX0RCRl9URVhUMCgwLHNldHVwLCJnZXRzc3FkIik7CiAJcWRpb2FjID0gMDsKLQlzc3FkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJc3NxZF9hcmVhID0gbWVtcG9vbF9hbGxvYyhxZGlvX21lbXBvb2xfc2Nzc2MsIEdGUF9BVE9NSUMpOwogCWlmICghc3NxZF9hcmVhKSB7CiAJICAgICAgICBRRElPX1BSSU5UX1dBUk4oIkNvdWxkIG5vdCBnZXQgbWVtb3J5IGZvciBjaHNjLiBVc2luZyBhbGwgIiBcCiAJCQkJIlNJR0FzIGZvciBzY2ggeCV4LlxuIiwgaXJxX3B0ci0+c2NoaWQuc2NoX25vKTsKQEAgLTIzNjQsNyArMjM2Nyw3IEBACiBvdXQ6CiAJcWRpb19jaGVja19zdWJjaGFubmVsX3FlYnNtKGlycV9wdHIsIHFkaW9hYywKIAkJCQkgICAgc3NxZF9hcmVhLT5zY2hfdG9rZW4pOwotCWZyZWVfcGFnZSAoKHVuc2lnbmVkIGxvbmcpIHNzcWRfYXJlYSk7CisJbWVtcG9vbF9mcmVlKHNzcWRfYXJlYSwgcWRpb19tZW1wb29sX3Njc3NjKTsKIAlpcnFfcHRyLT5xZGlvYWMgPSBxZGlvYWM7CiB9CiAKQEAgLTI0NTgsNyArMjQ2MSw3IEBACiAJCQl2aXJ0X3RvX3BoeXMoKHZvbGF0aWxlIHZvaWQgKilpcnFfcHRyLT5kZXZfc3RfY2hnX2luZCk7CiAJfQogCi0Jc2Nzc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlzY3NzY19hcmVhID0gbWVtcG9vbF9hbGxvYyhxZGlvX21lbXBvb2xfc2Nzc2MsIEdGUF9BVE9NSUMpOwogCWlmICghc2Nzc2NfYXJlYSkgewogCQlRRElPX1BSSU5UX1dBUk4oIk5vIG1lbW9yeSBmb3Igc2V0dGluZyBpbmRpY2F0b3JzIG9uICIgXAogCQkJCSJzdWJjaGFubmVsIDAuJXguJXguXG4iLApAQCAtMjUxNCw3ICsyNTE3LDcgQEAKIAlRRElPX0RCRl9IRVgyKDAsc2V0dXAsJnJlYWxfYWRkcl9kZXZfc3RfY2hnX2luZCxzaXplb2YodW5zaWduZWQgbG9uZykpOwogCXJlc3VsdCA9IDA7CiBvdXQ6Ci0JZnJlZV9wYWdlICgodW5zaWduZWQgbG9uZykgc2Nzc2NfYXJlYSk7CisJbWVtcG9vbF9mcmVlKHNjc3NjX2FyZWEsIHFkaW9fbWVtcG9vbF9zY3NzYyk7CiAJcmV0dXJuIHJlc3VsdDsKIAogfQpAQCAtMjU0Myw3ICsyNTQ2LDcgQEAKIAlpZiAoIWlycV9wdHItPmlzX3RoaW5pbnRfaXJxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNjc3NjZl9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCXNjc3NjZl9hcmVhID0gbWVtcG9vbF9hbGxvYyhxZGlvX21lbXBvb2xfc2Nzc2MsIEdGUF9BVE9NSUMpOwogCWlmICghc2Nzc2NmX2FyZWEpIHsKIAkJUURJT19QUklOVF9XQVJOKCJObyBtZW1vcnkgZm9yIHNldHRpbmcgZGVsYXkgdGFyZ2V0IG9uICIgXAogCQkJCSJzdWJjaGFubmVsIDAuJXguJXguXG4iLApAQCAtMjU4MSw3ICsyNTg0LDcgQEAKIAlRRElPX0RCRl9IRVgyKDAsdHJhY2UsJmRlbGF5X3RhcmdldCxzaXplb2YodW5zaWduZWQgbG9uZykpOwogCXJlc3VsdCA9IDA7IC8qIG5vdCBjcml0aWNhbCAqLwogb3V0OgotCWZyZWVfcGFnZSAoKHVuc2lnbmVkIGxvbmcpIHNjc3NjZl9hcmVhKTsKKwltZW1wb29sX2ZyZWUoc2Nzc2NmX2FyZWEsIHFkaW9fbWVtcG9vbF9zY3NzYyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjk4MCw3ICsyOTgzLDcgQEAKIAlxZGlvX2FsbG9jYXRlX2RvX2RiZihpbml0X2RhdGEpOwogCiAJLyogY3JlYXRlIGlycSAqLwotCWlycV9wdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWRpb19pcnEpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaXJxX3B0ciA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAKIAlRRElPX0RCRl9URVhUMCgwLHNldHVwLCJpcnFfcHRyOiIpOwogCVFESU9fREJGX0hFWDAoMCxzZXR1cCwmaXJxX3B0cixzaXplb2Yodm9pZCopKTsKQEAgLTI5OTUsNyArMjk5OCw3IEBACiAJLyogUURSIG11c3QgYmUgaW4gRE1BIGFyZWEgc2luY2UgQ0NXIGRhdGEgYWRkcmVzcyBpcyBvbmx5IDMyIGJpdCAqLwogCWlycV9wdHItPnFkcj1rbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWRyKSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogICAJaWYgKCEoaXJxX3B0ci0+cWRyKSkgewotICAgCQlrZnJlZShpcnFfcHRyKTsKKyAgIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTsKICAgICAJCVFESU9fUFJJTlRfRVJSKCJrbWFsbG9jIG9mIGlycV9wdHItPnFkciBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAgICAgICAgCX0KQEAgLTM3ODAsNiArMzc4MywxNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCitzdGF0aWMgdm9pZCAqcWRpb19tZW1wb29sX2FsbG9jKGdmcF90IGdmcF9tYXNrLCB2b2lkICpzaXplKQoreworCXJldHVybiAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoZ2ZwX21hc2t8R0ZQX0RNQSk7Cit9CisKK3N0YXRpYyB2b2lkIHFkaW9fbWVtcG9vbF9mcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnNpemUpCit7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBlbGVtZW50KTsKK30KKwogc3RhdGljIGludCBfX2luaXQKIGluaXRfUURJTyh2b2lkKQogewpAQCAtMzgwOSw2ICszODIyLDEwIEBACiAKIAlxZGlvX2FkZF9wcm9jZnNfZW50cnkoKTsKIAorCXFkaW9fbWVtcG9vbF9zY3NzYyA9IG1lbXBvb2xfY3JlYXRlKFFESU9fTUVNUE9PTF9TQ1NTQ19FTEVNRU5UUywKKwkJCQkJICAgIHFkaW9fbWVtcG9vbF9hbGxvYywKKwkJCQkJICAgIHFkaW9fbWVtcG9vbF9mcmVlLCBOVUxMKTsKKwogCWlmICh0aXFkaW9fY2hlY2tfY2hzY19hdmFpbGFiaWxpdHkoKSkKIAkJUURJT19QUklOVF9FUlIoIk5vdCBhbGwgQ0hTQ3Mgc3VwcG9ydGVkLiBDb250aW51aW5nLlxuIik7CiAKQEAgLTM4MjQsNiArMzg0MSw3IEBACiAJcWRpb19yZW1vdmVfcHJvY2ZzX2VudHJ5KCk7CiAJcWRpb19yZWxlYXNlX3FkaW9fbWVtb3J5KCk7CiAJcWRpb191bnJlZ2lzdGVyX2RiZl92aWV3cygpOworCW1lbXBvb2xfZGVzdHJveShxZGlvX21lbXBvb2xfc2Nzc2MpOwogCiAgIAlwcmludGsoInFkaW86ICVzOiBtb2R1bGUgcmVtb3ZlZFxuIix2ZXJzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKaW5kZXggYWY5ZjIxMi4uZmU5ODZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKQEAgLTE0ODYsMTMgKzE0ODYsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIGNoX2FjdGlvbl9yZWluaXQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAgCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKWFyZzsKICAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CiAgCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLSAKKwogCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwogIAljaF9hY3Rpb25faW9mYXRhbChmaSwgZXZlbnQsIGFyZyk7CiAgCWZzbV9hZGR0aW1lcigmcHJpdnB0ci0+cmVzdGFydF90aW1lciwgMTAwMCwgREVWX0VWRU5UX1JFU1RBUlQsIGRldik7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCX0KIAlkZXYxID0gc2ltcGxlX3N0cnRvdWwoaWQxLCAmaWQxLCAxNik7CiAJZGV2MiA9IHNpbXBsZV9zdHJ0b3VsKGlkMiwgJmlkMiwgMTYpOwotCQorCiAJcmV0dXJuIChkZXYxIDwgZGV2Mik7CiB9CiAKQEAgLTE4OTUsNyArMTg5NSw3IEBACiAJCQkgICAgaXJiLT5zY3N3LmRzdGF0KTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCXByaXYgPSAoKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKiljZGV2LT5kZXYuZHJpdmVyX2RhdGEpCiAJCS0+ZGV2LmRyaXZlcl9kYXRhOwogCkBAIC0xOTA5LDcgKzE5MDksNyBAQAogCQkJICAgImRldmljZSAlc1xuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgKGNoLT5uZXRkZXYpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQljdGNfcHJfY3JpdCgiY3RjOiBjdGNfaXJxX2hhbmRsZXIgZGV2PU5VTEwgYnVzX2lkPSVzLCBjaD0weCVwXG4iLApAQCAtMjAwOCwxMiArMjAwOCwxMiBAQAogCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfU1RPUCwgY2gpOwogCX0KIH0KLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIGRldl9hY3Rpb25fcmVzdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopYXJnOwogCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLQkKKwogCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwogCWN0Y19wcl9kZWJ1ZygiJXM6IFJlc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CiAJZGV2X2FjdGlvbl9zdG9wKGZpLCBldmVudCwgYXJnKTsKQEAgLTIxOTMsNyArMjE5Myw3IEBACiAKIAlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAkvKiB3ZSBuZWVkIHRvIGFjcXVpcmUgdGhlIGxvY2sgZm9yIHRlc3RpbmcgdGhlIHN0YXRlCi0JICogb3RoZXJ3aXNlIHdlIGNhbiBoYXZlIGFuIElSUSBjaGFuZ2luZyB0aGUgc3RhdGUgdG8gCisJICogb3RoZXJ3aXNlIHdlIGNhbiBoYXZlIGFuIElSUSBjaGFuZ2luZyB0aGUgc3RhdGUgdG8KIAkgKiBUWElETEUgYWZ0ZXIgdGhlIHRlc3QgYnV0IGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2suCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CkBAIC0yMzkzLDcgKzIzOTMsNyBAQAogCiAJLyoqCiAJICogSWYgY2hhbm5lbHMgYXJlIG5vdCBydW5uaW5nLCB0cnkgdG8gcmVzdGFydCB0aGVtCi0JICogYW5kIHRocm93IGF3YXkgcGFja2V0LiAKKwkgKiBhbmQgdGhyb3cgYXdheSBwYWNrZXQuCiAJICovCiAJaWYgKGZzbV9nZXRzdGF0ZShwcml2cHRyLT5mc20pICE9IERFVl9TVEFURV9SVU5OSU5HKSB7CiAJCWZzbV9ldmVudChwcml2cHRyLT5mc20sIERFVl9FVkVOVF9TVEFSVCwgZGV2KTsKQEAgLTI3MzgsNyArMjczOCw3IEBACiAvKioKICAqIEFkZCBjdGMgc3BlY2lmaWMgYXR0cmlidXRlcy4KICAqIEFkZCBjdGMgcHJpdmF0ZSBkYXRhLgotICogCisgKgogICogQHBhcmFtIGNnZGV2IHBvaW50ZXIgdG8gY2N3Z3JvdXBfZGV2aWNlIGp1c3QgYWRkZWQKICAqCiAgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsICEwIG9uIGZhaWx1cmUuCkBAIC0yODY5LDcgKzI4NjksNyBAQAogCURCRl9URVhUKHNldHVwLCAzLCBidWZmZXIpOwogCiAJdHlwZSA9IGdldF9jaGFubmVsX3R5cGUoJmNnZGV2LT5jZGV2WzBdLT5pZCk7Ci0JCisKIAlzbnByaW50ZihyZWFkX2lkLCBDVENfSURfU0laRSwgImNoLSVzIiwgY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQpOwogCXNucHJpbnRmKHdyaXRlX2lkLCBDVENfSURfU0laRSwgImNoLSVzIiwgY2dkZXYtPmNkZXZbMV0tPmRldi5idXNfaWQpOwogCkBAIC0yOTA3LDcgKzI5MDcsNyBAQAogCQkgICAgY2hhbm5lbF9nZXQodHlwZSwgZGlyZWN0aW9uID09IFJFQUQgPyByZWFkX2lkIDogd3JpdGVfaWQsCiAJCQkJZGlyZWN0aW9uKTsKIAkJaWYgKHByaXZwdHItPmNoYW5uZWxbZGlyZWN0aW9uXSA9PSBOVUxMKSB7Ci0JCQlpZiAoZGlyZWN0aW9uID09IFdSSVRFKSAKKwkJCWlmIChkaXJlY3Rpb24gPT0gV1JJVEUpCiAJCQkJY2hhbm5lbF9mcmVlKHByaXZwdHItPmNoYW5uZWxbUkVBRF0pOwogCiAJCQljdGNfZnJlZV9uZXRkZXZpY2UoZGV2LCAxKTsKQEAgLTI5NTUsNyArMjk1NSw3IEBACiB7CiAJc3RydWN0IGN0Y19wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwotCQkKKwogCURCRl9URVhUKHNldHVwLCAzLCBfX0ZVTkNUSU9OX18pOwogCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMKaW5kZXggNWNkY2RiZi4uYWY1NGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlpZiAoKHR0eSA9IGluZm8tPnR0eSkpIHsKIAkJaWYgKGluZm8tPm1jciAmIFVBUlRfTUNSX1JUUykgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJCQorCiAJCQlpZiAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpbmZvLT5yeF9xdWV1ZSkpKSB7CiAJCQkJaW50IGxlbiA9IHNrYi0+bGVuOwogCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBza2ItPmRhdGEsIGxlbik7CkBAIC0zMjgsNyArMzI4LDcgQEAKIHsKIAlpbnQgc2tiX3JlczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQorCiAJREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKGN0Y190dHlfc2h1dHRpbmdkb3duKQogCQlyZXR1cm47CkBAIC00OTcsNyArNDk3LDcgQEAKIAkJYyA9IChjb3VudCA8IENUQ19UVFlfWE1JVF9TSVpFKSA/IGNvdW50IDogQ1RDX1RUWV9YTUlUX1NJWkU7CiAJCWlmIChjIDw9IDApCiAJCQlicmVhazsKLQkJCisKIAkJc2tiX3JlcyA9IGluZm8tPm5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICsgc2l6ZW9mKGluZm8tPm1jcikgKwogCQkJKyBzaXplb2YoX191MzIpOwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYl9yZXMgKyBjKTsKQEAgLTgyOCw3ICs4MjgsNyBAQAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8CiAJICAgIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKSkgewogCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ0xPU0lORykKLQkJCXdhaXRfZXZlbnQoaW5mby0+Y2xvc2Vfd2FpdCwgCisJCQl3YWl0X2V2ZW50KGluZm8tPmNsb3NlX3dhaXQsCiAJCQkJICAgIShpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKSk7CiAjaWZkZWYgTU9ERU1fRE9fUkVTVEFSVAogCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSFVQX05PVElGWSkKQEAgLTEyNDcsNyArMTI0Nyw3IEBACiB2b2lkCiBjdGNfdHR5X2NsZWFudXAodm9pZCkgewogCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCQorCiAJREJGX1RFWFQodHJhY2UsIDIsIF9fRlVOQ1RJT05fXyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKIAljdGNfdHR5X3NodXR0aW5nZG93biA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N1MzA4OC5jIGIvZHJpdmVycy9zMzkwL25ldC9jdTMwODguYwppbmRleCBiMTI1MzMxLi5lOTY1ZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N1MzA4OC5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3UzMDg4LmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotDAorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNzcsNyArNzcsNyBAQAogCQlpbnQgbGVuOwogCiAJCWlmICghKGVuZCA9IHN0cmNocihzdGFydCwgZGVsaW1baV0pKSkKLQkJCXJldHVybiBjb3VudDsKKwkJCXJldHVybiAtRUlOVkFMOwogCQlsZW4gPSBtaW5fdChwdHJkaWZmX3QsIEJVU19JRF9TSVpFLCBlbmQgLSBzdGFydCArIDEpOwogCQlzdHJsY3B5IChidXNfaWRzW2ldLCBzdGFydCwgbGVuKTsKIAkJYXJndltpXSA9IGJ1c19pZHNbaV07CkBAIC05NCw3ICs5NCw3IEBACiAKIC8qIFJlZ2lzdGVyLXVucmVnaXN0ZXIgZm9yIGN0YyZsY3MgKi8KIGludAotcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqZGNwKSAKK3JlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKHN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmRjcCkKIHsKIAlpbnQgcmM7CiAKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJjID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZkY3AtPmRyaXZlciwgJmRyaXZlcl9hdHRyX2dyb3VwKTsKIAlpZiAocmMpCiAJCWNjd2dyb3VwX2RyaXZlcl91bnJlZ2lzdGVyKGRjcCk7Ci0JCQorCiAJcmV0dXJuIHJjOwogCiB9CkBAIC0xMzcsNyArMTM3LDcgQEAKIGN1MzA4OF9pbml0ICh2b2lkKQogewogCWludCByYzsKLQkKKwogCWN1MzA4OF9yb290X2RldiA9IHMzOTBfcm9vdF9kZXZfcmVnaXN0ZXIoImN1MzA4OCIpOwogCWlmIChJU19FUlIoY3UzMDg4X3Jvb3RfZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIoY3UzMDg4X3Jvb3RfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMKaW5kZXggNjE5MGJlOS4uZTBjN2RlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBJVUNWIG5ldHdvcmsgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KQEAgLTI4LDcgKzI4LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotDAorCiAvKiAjZGVmaW5lIERFQlVHICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTgxLDcgKzgxLDcgQEAKIHN0cnVjdCBidXNfdHlwZSBpdWN2X2J1cyA9IHsKIAkubmFtZSA9ICJpdWN2IiwKIAkubWF0Y2ggPSBpdWN2X2J1c19tYXRjaCwKLX07CQorfTsKIAogc3RydWN0IGRldmljZSAqaXVjdl9yb290OwogCkBAIC0yOTcsNyArMjk3LDcgQEAKIC8qCiAgKiBEZWJ1Z2dpbmcgc3R1ZmYKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotDAorCiAKICNpZmRlZiBERUJVRwogc3RhdGljIGludCBkZWJ1Z2xldmVsID0gMDsKQEAgLTM0NCw3ICszNDQsNyBAQAogLyoKICAqIEludGVybmFsIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0MCisKIC8qKgogICogcHJpbnQgc3RhcnQgYmFubmVyCiAgKi8KQEAgLTgxMCw3ICs4MTAsNyBAQAogCQkJc2l6ZW9mIChuZXdfaGFuZGxlci0+aWQudXNlcmlkKSk7CiAJCUVCQ19UT1VQUEVSIChuZXdfaGFuZGxlci0+aWQudXNlcmlkLAogCQkJICAgICBzaXplb2YgKG5ld19oYW5kbGVyLT5pZC51c2VyaWQpKTsKLQkJCisKIAkJaWYgKHBnbW1hc2spIHsKIAkJCW1lbWNweSAobmV3X2hhbmRsZXItPmlkLm1hc2ssIHBnbW1hc2ssCiAJCQkJc2l6ZW9mIChuZXdfaGFuZGxlci0+aWQubWFzaykpOwpAQCAtMTIyOSw3ICsxMjI5LDcgQEAKIAkJLyogcGFybS0+aXBhdWRpdCBoYXMgb25seSAzIGJ5dGVzICovCiAJCSphdWRpdCA+Pj0gODsKIAl9Ci0JCisKIAlyZWxlYXNlX3BhcmFtKHBhcm0pOwogCiAJaXVjdl9kZWJ1ZygxLCAiYjJmMF9yZXN1bHQgPSAlbGQiLCBiMmYwX3Jlc3VsdCk7CkBAIC0yMzMwLDE0ICsyMzMwLDE0IEBACiAJCQkJCXRlbXBfYnVmZjFbal0gJj0gKGgtPmlkLm1hc2spW2pdOwogCQkJCQl0ZW1wX2J1ZmYyW2pdICY9IChoLT5pZC5tYXNrKVtqXTsKIAkJCQl9Ci0JCQkJCisKIAkJCQlpdWN2X2R1bXBpdCgidGVtcF9idWZmMToiLAogCQkJCQkgICAgdGVtcF9idWZmMSwgc2l6ZW9mKHRlbXBfYnVmZjEpKTsKIAkJCQlpdWN2X2R1bXBpdCgidGVtcF9idWZmMiIsCiAJCQkJCSAgICB0ZW1wX2J1ZmYyLCBzaXplb2YodGVtcF9idWZmMikpOwotCQkJCQorCiAJCQkJaWYgKCFtZW1jbXAgKHRlbXBfYnVmZjEsIHRlbXBfYnVmZjIsIDI0KSkgewotCQkJCQkKKwogCQkJCQlpdWN2X2RlYnVnKDIsCiAJCQkJCQkgICAiZm91bmQgYSBtYXRjaGluZyBoYW5kbGVyIik7CiAJCQkJCWJyZWFrOwpAQCAtMjM2OCw3ICsyMzY4LDcgQEAKIAkJCX0gZWxzZQogCQkJCWl1Y3Zfc2V2ZXIoaW50X2J1Zi0+aXBwYXRoaWQsIG5vX2xpc3RlbmVyKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDAyOgkJLypjb25uZWN0aW9uIGNvbXBsZXRlICovCiAJCQlpZiAobWVzc2FnZXNEaXNhYmxlZCkgewogCQkJICAgIGl1Y3Zfc2V0bWFzayh+MCk7CkBAIC0yMzg3LDcgKzIzODcsNyBAQAogCQkJfSBlbHNlCiAJCQkJaXVjdl9zZXZlcihpbnRfYnVmLT5pcHBhdGhpZCwgbm9fbGlzdGVuZXIpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDM6CQkvKiBjb25uZWN0aW9uIHNldmVyZWQgKi8KIAkJCWlmIChtZXNzYWdlc0Rpc2FibGVkKSB7CiAJCQkgICAgaXVjdl9zZXRtYXNrKH4wKTsKQEAgLTIzOTgsMTMgKzIzOTgsMTMgQEAKIAkJCQkJaW50ZXJydXB0LT5Db25uZWN0aW9uU2V2ZXJlZCgKIAkJCQkJCShpdWN2X0Nvbm5lY3Rpb25TZXZlcmVkICopaW50X2J1ZiwKIAkJCQkJCWgtPnBnbV9kYXRhKTsKLQkJCQkKKwogCQkJCWVsc2UKIAkJCQkJaXVjdl9zZXZlciAoaW50X2J1Zi0+aXBwYXRoaWQsIG5vX2xpc3RlbmVyKTsKIAkJCX0gZWxzZQogCQkJCWl1Y3Zfc2V2ZXIoaW50X2J1Zi0+aXBwYXRoaWQsIG5vX2xpc3RlbmVyKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDA0OgkJLyogY29ubmVjdGlvbiBxdWllc2NlZCAqLwogCQkJaWYgKG1lc3NhZ2VzRGlzYWJsZWQpIHsKIAkJCSAgICBpdWN2X3NldG1hc2sofjApOwpAQCAtMjQyMCw3ICsyNDIwLDcgQEAKIAkJCQkJCSAgICJDb25uZWN0aW9uUXVpZXNjZWQgbm90IGNhbGxlZCIpOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDU6CQkvKiBjb25uZWN0aW9uIHJlc3VtZWQgKi8KIAkJCWlmIChtZXNzYWdlc0Rpc2FibGVkKSB7CiAJCQkgICAgaXVjdl9zZXRtYXNrKH4wKTsKQEAgLTI0MzYsNyArMjQzNiw3IEBACiAJCQkJCQkgICAiQ29ubmVjdGlvblJlc3VtZWQgbm90IGNhbGxlZCIpOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDY6CQkvKiBwcmlvcml0eSBtZXNzYWdlIGNvbXBsZXRlICovCiAJCWNhc2UgMHgwNzoJCS8qIG5vbnByaW9yaXR5IG1lc3NhZ2UgY29tcGxldGUgKi8KIAkJCWlmIChoKSB7CkBAIC0yNDQ5LDcgKzI0NDksNyBAQAogCQkJCQkJICAgIk1lc3NhZ2VDb21wbGV0ZSBub3QgY2FsbGVkIik7CiAJCQl9CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwODoJCS8qIHByaW9yaXR5IG1lc3NhZ2UgcGVuZGluZyAgKi8KIAkJY2FzZSAweDA5OgkJLyogbm9ucHJpb3JpdHkgbWVzc2FnZSBwZW5kaW5nICAqLwogCQkJaWYgKGgpIHsKQEAgLTI0NjcsNyArMjQ2Nyw3IEBACiAJCQkgICAgICAgX19GVU5DVElPTl9fKTsKIAkJCWJyZWFrOwogCX0JCQkvKiBlbmQgc3dpdGNoICovCi0JCisKIAlpdWN2X2RlYnVnKDIsICJleGl0aW5nIHBhdGhpZCAlZCwgdHlwZSAlMDJYIiwKIAkJIGludF9idWYtPmlwcGF0aGlkLCBpbnRfYnVmLT5pcHR5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuaCBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oCmluZGV4IDBjNDY0NGQuLjViNmIxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICBTMzkwIHZlcnNpb24KICAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTpBbGFuIEFsdG1hcmsgKEFsYW5fQWx0bWFya0B1cy5pYm0uY29tKSAKKyAqICAgIEF1dGhvcihzKTpBbGFuIEFsdG1hcmsgKEFsYW5fQWx0bWFya0B1cy5pYm0uY29tKQogICoJCVhlbmlhIFRrYXRzY2hvdyAoeGVuaWFAdXMuaWJtLmNvbSkKICAqCiAgKgpAQCAtMTYsMTcgKzE2LDE3IEBACiAgKiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcyBib29rLCBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgd2ViCiAgKiB0aHJ1IHd3dy5pYm0uY29tL3MzOTAvdm0vcHVicywgbWFudWFsICMgU0MyNC01NzYwCiAgKgotICogICAgICBEZWZpbml0aW9uIG9mIFJldHVybiBDb2RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAtQWxsIHBvc2l0aXZlIHJldHVybiBjb2RlcyBpbmNsdWRpbmcgemVybyBhcmUgcmVmbGVjdGVkIGJhY2sgIAotICogICAgICAgZnJvbSBDUCBleGNlcHQgZm9yIGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbS4gVGhlIGRlZmluaXRpb24gb2YgZWFjaCAKLSAqICAgICAgIHJldHVybiBjb2RlIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcyBib29rLiAgICAKLSAqICAgICAgIEFsc28gYXZhaWxhYmxlIG9uIHRoZSB3ZWIgdGhydSB3d3cuaWJtLmNvbS9zMzkwL3ZtL3B1YnMsIG1hbnVhbCAjIFNDMjQtNTc2MCAgICAgICAgICAKLSAqICAgICAgLSBSZXR1cm4gQ29kZSBvZjogICAgICAgICAKLSAqICAgICAgICAgICAgICgtRUlOVkFMKSBJbnZhbGlkIHZhbHVlICAgICAgIAotICogICAgICAgICAgICAgKC1FTk9NRU0pIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsZWQgICAgICAgICAgICAgIAorICogICAgICBEZWZpbml0aW9uIG9mIFJldHVybiBDb2RlcworICogICAgICAtQWxsIHBvc2l0aXZlIHJldHVybiBjb2RlcyBpbmNsdWRpbmcgemVybyBhcmUgcmVmbGVjdGVkIGJhY2sKKyAqICAgICAgIGZyb20gQ1AgZXhjZXB0IGZvciBpdWN2X3JlZ2lzdGVyX3Byb2dyYW0uIFRoZSBkZWZpbml0aW9uIG9mIGVhY2gKKyAqICAgICAgIHJldHVybiBjb2RlIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcyBib29rLgorICogICAgICAgQWxzbyBhdmFpbGFibGUgb24gdGhlIHdlYiB0aHJ1IHd3dy5pYm0uY29tL3MzOTAvdm0vcHVicywgbWFudWFsICMgU0MyNC01NzYwCisgKiAgICAgIC0gUmV0dXJuIENvZGUgb2Y6CisgKiAgICAgICAgICAgICAoLUVJTlZBTCkgSW52YWxpZCB2YWx1ZQorICogICAgICAgICAgICAgKC1FTk9NRU0pIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsZWQKICAqCXBnbWFzayBkZWZpbmVkIGluIGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbSB3aWxsIGJlIHNldCBkZXBlbmRpbmcgb24gaW5wdXQKLSAqCXBhcmFtdGVycy4gCi0gKgkKKyAqCXBhcmFtdGVycy4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xMjQsMTMgKzEyNCwxMyBAQAogI2RlZmluZSBpdWN2X2hhbmRsZV90IHZvaWQgKgogCiAvKiBmbGFnczE6Ci0gKiBBbGwgZmxhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGZpZWxkIElQRkxBR1MxIG9mIGVhY2ggZnVuY3Rpb24gICAKLSAqIGFuZCBjYW4gYmUgZm91bmQgaW4gQ1AgUHJvZ3JhbW1pbmcgU2VydmljZXMuICAgICAgICAgICAgICAgICAgCi0gKiBJUExPQ0FMICAtIEluZGljYXRlcyB0aGUgY29ubmVjdCBjYW4gb25seSBiZSBzYXRpc2ZpZWQgb24gdGhlIAotICogICAgICAgICAgICBsb2NhbCBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElQUFJUWSAgIC0gSW5kaWNhdGVzIGEgcHJpb3JpdHkgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJUFFVU0NFICAtIEluZGljYXRlcyB5b3UgZG8gbm90IHdhbnQgdG8gcmVjZWl2ZSBtZXNzYWdlcyBvbiBhIAotICogICAgICAgICAgICBwYXRoIHVudGlsIGFuIGl1Y3ZfcmVzdW1lIGlzIGlzc3VlZCAgICAgICAgICAgICAgICAKKyAqIEFsbCBmbGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZmllbGQgSVBGTEFHUzEgb2YgZWFjaCBmdW5jdGlvbgorICogYW5kIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcy4KKyAqIElQTE9DQUwgIC0gSW5kaWNhdGVzIHRoZSBjb25uZWN0IGNhbiBvbmx5IGJlIHNhdGlzZmllZCBvbiB0aGUKKyAqICAgICAgICAgICAgbG9jYWwgc3lzdGVtCisgKiBJUFBSVFkgICAtIEluZGljYXRlcyBhIHByaW9yaXR5IG1lc3NhZ2UKKyAqIElQUVVTQ0UgIC0gSW5kaWNhdGVzIHlvdSBkbyBub3Qgd2FudCB0byByZWNlaXZlIG1lc3NhZ2VzIG9uIGEKKyAqICAgICAgICAgICAgcGF0aCB1bnRpbCBhbiBpdWN2X3Jlc3VtZSBpcyBpc3N1ZWQKICAqIElQUk1EQVRBIC0gSW5kaWNhdGVzIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4gdGhlIHBhcmFtZXRlciBsaXN0CiAgKi8KICNkZWZpbmUgSVBMT0NBTCAgIAkweDAxCkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogI2RlZmluZSBBbGxJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmOAogLyoKICAqIE1hcHBpbmcgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IGJ1ZmZlcnMgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZwotICogaW50ZXJydXB0IHR5cGVzLiAgICAgICAgICAgICAgICAgIAotICogTmFtZXM6IGl1Y3ZfQ29ubmVjdGlvblBlbmRpbmcgICAgLT4gIGNvbm5lY3Rpb24gcGVuZGluZyAKKyAqIGludGVycnVwdCB0eXBlcy4KKyAqIE5hbWVzOiBpdWN2X0Nvbm5lY3Rpb25QZW5kaW5nICAgIC0+ICBjb25uZWN0aW9uIHBlbmRpbmcKICAqICAgICAgICBpdWN2X0Nvbm5lY3Rpb25Db21wbGV0ZSAgIC0+ICBjb25uZWN0aW9uIGNvbXBsZXRlCi0gKiAgICAgICAgaXVjdl9Db25uZWN0aW9uU2V2ZXJlZCAgICAtPiAgY29ubmVjdGlvbiBzZXZlcmVkIAotICogICAgICAgIGl1Y3ZfQ29ubmVjdGlvblF1aWVzY2VkICAgLT4gIGNvbm5lY3Rpb24gcXVpZXNjZWQgCi0gKiAgICAgICAgaXVjdl9Db25uZWN0aW9uUmVzdW1lZCAgICAtPiAgY29ubmVjdGlvbiByZXN1bWVkIAotICogICAgICAgIGl1Y3ZfTWVzc2FnZVBlbmRpbmcgICAgICAgLT4gIG1lc3NhZ2UgcGVuZGluZyAgICAKLSAqICAgICAgICBpdWN2X01lc3NhZ2VDb21wbGV0ZSAgICAgIC0+ICBtZXNzYWdlIGNvbXBsZXRlICAgCisgKiAgICAgICAgaXVjdl9Db25uZWN0aW9uU2V2ZXJlZCAgICAtPiAgY29ubmVjdGlvbiBzZXZlcmVkCisgKiAgICAgICAgaXVjdl9Db25uZWN0aW9uUXVpZXNjZWQgICAtPiAgY29ubmVjdGlvbiBxdWllc2NlZAorICogICAgICAgIGl1Y3ZfQ29ubmVjdGlvblJlc3VtZWQgICAgLT4gIGNvbm5lY3Rpb24gcmVzdW1lZAorICogICAgICAgIGl1Y3ZfTWVzc2FnZVBlbmRpbmcgICAgICAgLT4gIG1lc3NhZ2UgcGVuZGluZworICogICAgICAgIGl1Y3ZfTWVzc2FnZUNvbXBsZXRlICAgICAgLT4gIG1lc3NhZ2UgY29tcGxldGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXUxNiBpcHBhdGhpZDsKQEAgLTI2MCwxNiArMjYwLDE2IEBACiAJdWNoYXIgcmVzMlszXTsKIH0gaXVjdl9NZXNzYWdlQ29tcGxldGU7CiAKLS8qIAotICogaXVjdl9pbnRlcnJ1cHRfb3BzX3Q6IElzIGEgdmVjdG9yIG9mIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSAKLSAqIElVQ1YgaW50ZXJydXB0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFBhcmFtZXRlciBsaXN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgZWliIC0gaXMgYSBwb2ludGVyIHRvIGEgNDAtYnl0ZSBhcmVhIGRlc2NyaWJlZCAgICAKLSAqICAgICAgICAgICAgICAgd2l0aCBvbmUgb2YgdGhlIHN0cnVjdHVyZXMgYWJvdmUuICAgICAgICAgICAKLSAqICAgICAgICAgcGdtX2RhdGEgLSB0aGlzIGRhdGEgaXMgc3RyaWN0bHkgZm9yIHRoZSAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciB0aGF0IGlzIHBhc3NlZCBieSAgICAKLSAqICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24uIFRoaXMgbWF5IGJlIGFuIGFkZHJlc3MgCi0gKiAgICAgICAgICAgICAgICAgICAgb3IgdG9rZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogaXVjdl9pbnRlcnJ1cHRfb3BzX3Q6IElzIGEgdmVjdG9yIG9mIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZQorICogSVVDViBpbnRlcnJ1cHRzLgorICogUGFyYW1ldGVyIGxpc3Q6CisgKiAgICAgICAgIGVpYiAtIGlzIGEgcG9pbnRlciB0byBhIDQwLWJ5dGUgYXJlYSBkZXNjcmliZWQKKyAqICAgICAgICAgICAgICAgd2l0aCBvbmUgb2YgdGhlIHN0cnVjdHVyZXMgYWJvdmUuCisgKiAgICAgICAgIHBnbV9kYXRhIC0gdGhpcyBkYXRhIGlzIHN0cmljdGx5IGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciB0aGF0IGlzIHBhc3NlZCBieQorICogICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBtYXkgYmUgYW4gYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgIG9yIHRva2VuLgogKi8KIHR5cGVkZWYgc3RydWN0IHsKIAl2b2lkICgqQ29ubmVjdGlvblBlbmRpbmcpIChpdWN2X0Nvbm5lY3Rpb25QZW5kaW5nICogZWliLApAQCAtMjg3LDggKzI4Nyw4IEBACiB9IGl1Y3ZfaW50ZXJydXB0X29wc190OwogCiAvKgotICppdWN2X2FycmF5X3QgOiBEZWZpbmVzIGJ1ZmZlciBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnNpZGUgdGhlIGFycmF5IG1heSBiZSAzMS0gYml0IGFkZHJlc3NlcyBhbmQgMzEtYml0IGxlbmd0aHMuIAorICppdWN2X2FycmF5X3QgOiBEZWZpbmVzIGJ1ZmZlciBhcnJheS4KKyAqIEluc2lkZSB0aGUgYXJyYXkgbWF5IGJlIDMxLSBiaXQgYWRkcmVzc2VzIGFuZCAzMS1iaXQgbGVuZ3Rocy4KICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTMyIGFkZHJlc3M7CkBAIC0yOTksMTkgKzI5OSwxOSBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKml1Y3Zfcm9vdDsKIAogLyogICAtcHJvdG90eXBlcy0gICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZWdpc3Rlcl9wcm9ncmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBSZWdpc3RlcnMgYW4gYXBwbGljYXRpb24gd2l0aCBJVUNWICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwcm1uYW1lIC0gdXNlciBpZGVudGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbQorICogUHVycG9zZTogUmVnaXN0ZXJzIGFuIGFwcGxpY2F0aW9uIHdpdGggSVVDVgorICogSW5wdXQ6IHBybW5hbWUgLSB1c2VyIGlkZW50aWZpY2F0aW9uCiAgKiAgICAgICAgdXNlcmlkICAtIG1hY2hpbmUgaWRlbnRpZmljYXRpb24KICAqICAgICAgICBwZ21tYXNrIC0gaW5kaWNhdGVzIHdoaWNoIGJpdHMgaW4gdGhlIHBybW5hbWUgYW5kIHVzZXJpZCBjb21iaW5lZCB3aWxsIGJlCiAgKiAgCQkgICAgdXNlZCB0byBkZXRlcm1pbmUgd2hvIGlzIGdpdmVuIGNvbnRyb2wKLSAqICAgICAgICBvcHMgICAgIC0gYWRkcmVzcyBvZiB2ZWN0b3Igb2YgaW50ZXJydXB0IGhhbmRsZXJzICAgICAgIAotICogICAgICAgIHBnbV9kYXRhLSBhcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogYWRkcmVzcyBvZiBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIG9wcyAgICAgLSBhZGRyZXNzIG9mIHZlY3RvciBvZiBpbnRlcnJ1cHQgaGFuZGxlcnMKKyAqICAgICAgICBwZ21fZGF0YS0gYXBwbGljYXRpb24gZGF0YSBwYXNzZWQgdG8gaW50ZXJydXB0IGhhbmRsZXJzCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46IGFkZHJlc3Mgb2YgaGFuZGxlcgogICogICAgICAgICAoMCkgLSBFcnJvciBvY2N1cnJlZCwgcmVnaXN0cmF0aW9uIG5vdCBjb21wbGV0ZWQuCi0gKiBOT1RFOiBFeGFjdCBjYXVzZSBvZiBmYWlsdXJlIHdpbGwgYmUgcmVjb3JkZWQgaW4gc3lzbG9nLiAgICAgICAgICAgICAgICAgICAgICAgIAorICogTk9URTogRXhhY3QgY2F1c2Ugb2YgZmFpbHVyZSB3aWxsIGJlIHJlY29yZGVkIGluIHN5c2xvZy4KICovCiBpdWN2X2hhbmRsZV90IGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbSAodWNoYXIgcGdtbmFtZVsxNl0sCiAJCQkJICAgICB1Y2hhciB1c2VyaWRbOF0sCkBAIC0zMTksMTMgKzMxOSwxMyBAQAogCQkJCSAgICAgaXVjdl9pbnRlcnJ1cHRfb3BzX3QgKiBvcHMsCiAJCQkJICAgICB2b2lkICpwZ21fZGF0YSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3VucmVnaXN0ZXJfcHJvZ3JhbSAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVW5yZWdpc3RlciBhcHBsaWNhdGlvbiB3aXRoIElVQ1YgICAgICAKLSAqIElucHV0OiBhZGRyZXNzIG9mIGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiAoMCkgLSBOb3JtYWwgcmV0dXJuICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gSW50ZXJuYWwgZXJyb3IsIHdpbGQgcG9pbnRlciAgICAgCisvKgorICogTmFtZTogaXVjdl91bnJlZ2lzdGVyX3Byb2dyYW0KKyAqIFB1cnBvc2U6IFVucmVnaXN0ZXIgYXBwbGljYXRpb24gd2l0aCBJVUNWCisgKiBJbnB1dDogYWRkcmVzcyBvZiBoYW5kbGVyCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46ICgwKSAtIE5vcm1hbCByZXR1cm4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gSW50ZXJuYWwgZXJyb3IsIHdpbGQgcG9pbnRlcgogKi8KIGludCBpdWN2X3VucmVnaXN0ZXJfcHJvZ3JhbSAoaXVjdl9oYW5kbGVfdCBoYW5kbGUpOwogCkBAIC0zMzMsNyArMzMzLDcgQEAKICAqIE5hbWU6IGl1Y3ZfYWNjZXB0CiAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGlzIGlzc3VlZCBhZnRlciB0aGUgdXNlciByZWNlaXZlcyBhIENvbm5lY3Rpb24gUGVuZGluZyBleHRlcm5hbAogICogICAgICAgICAgaW50ZXJydXB0IGFuZCBub3cgd2lzaGVzIHRvIGNvbXBsZXRlIHRoZSBJVUNWIGNvbW11bmljYXRpb24gcGF0aC4KLSAqIElucHV0OiAgcGF0aGlkIC0gdTE2ICwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIgICAKKyAqIElucHV0OiAgcGF0aGlkIC0gdTE2ICwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIKICAqICAgICAgICAgbXNnbGltX3JlcXN0ZCAtIHUxNiwgVGhlIG51bWJlciBvZiBvdXRzdGFuZGluZyBtZXNzYWdlcyByZXF1ZXN0ZWQuCiAgKiAgICAgICAgIHVzZXJfZGF0YSAtIHVjaGFyWzE2XSwgRGF0YSBzcGVjaWZpZWQgYnkgdGhlIGl1Y3ZfY29ubmVjdCBmdW5jdGlvbi4KICAqCSAgIGZsYWdzMSAtIGludCwgQ29udGFpbnMgb3B0aW9ucyBmb3IgdGhpcyBwYXRoLgpAQCAtMzU4LDM0ICszNTgsMzQgQEAKIAkJIHZvaWQgKnBnbV9kYXRhLCBpbnQgKmZsYWdzMV9vdXQsIHUxNiAqIG1zZ2xpbSk7CiAKIC8qCi0gKiBOYW1lOiBpdWN2X2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogTmFtZTogaXVjdl9jb25uZWN0CiAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGVzdGFibGlzaGVzIGFuIElVQ1YgcGF0aC4gQWx0aG91Z2ggdGhlIGNvbm5lY3QgbWF5IGNvbXBsZXRlCi0gKgkgICAgc3VjY2Vzc2Z1bGx5LCB5b3UgYXJlIG5vdCBhYmxlIHRvIHVzZSB0aGUgcGF0aCB1bnRpbCB5b3UgcmVjZWl2ZSBhbiBJVUNWIAotICogICAgICAgICAgQ29ubmVjdGlvbiBDb21wbGV0ZSBleHRlcm5hbCBpbnRlcnJ1cHQuICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gdTE2ICosIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyICAgICAgICAgIAotICogICAgICAgIG1zZ2xpbV9yZXFzdGQgLSB1MTYsIE51bWJlciBvZiBvdXRzdGFuZGluZyBtZXNzYWdlcyByZXF1ZXN0ZWQgICAgICAgCi0gKiAgICAgICAgdXNlcl9kYXRhIC0gdWNoYXJbMTZdLCAxNi1ieXRlIHVzZXIgZGF0YSAgICAgICAgICAgICAgICAgICAgCisgKgkgICAgc3VjY2Vzc2Z1bGx5LCB5b3UgYXJlIG5vdCBhYmxlIHRvIHVzZSB0aGUgcGF0aCB1bnRpbCB5b3UgcmVjZWl2ZSBhbiBJVUNWCisgKiAgICAgICAgICBDb25uZWN0aW9uIENvbXBsZXRlIGV4dGVybmFsIGludGVycnVwdC4KKyAqIElucHV0OiBwYXRoaWQgLSB1MTYgKiwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIKKyAqICAgICAgICBtc2dsaW1fcmVxc3RkIC0gdTE2LCBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgbWVzc2FnZXMgcmVxdWVzdGVkCisgKiAgICAgICAgdXNlcl9kYXRhIC0gdWNoYXJbMTZdLCAxNi1ieXRlIHVzZXIgZGF0YQogICoJICB1c2VyaWQgLSB1Y2hhcls4XSwgVXNlciBpZGVudGlmaWNhdGlvbgotICogICAgICAgIHN5c3RlbV9uYW1lIC0gdWNoYXJbOF0sIDgtYnl0ZSBpZGVudGlmeWluZyB0aGUgc3lzdGVtIG5hbWUgCisgKiAgICAgICAgc3lzdGVtX25hbWUgLSB1Y2hhcls4XSwgOC1ieXRlIGlkZW50aWZ5aW5nIHRoZSBzeXN0ZW0gbmFtZQogICoJICBmbGFnczEgLSBpbnQsIENvbnRhaW5zIG9wdGlvbnMgZm9yIHRoaXMgcGF0aC4KICAqICAgICAgICAgIC1JUFBSVFkgLSAgIDB4MjAsIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCiAgKiAgICAgICAgICAtSVBSTURBVEEgLSAweDgwLCBTcGVjaWZpZXMgd2hldGhlciB5b3VyIHByb2dyYW0gY2FuIGhhbmRsZSBhIG1lc3NhZ2UKICAqICAgICAgICAgICAgCSBpbiAgdGhlIHBhcmFtZXRlciBsaXN0LgotICogICAgICAgICAgLUlQUVVTQ0UgLSAgMHg0MCwgU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG8gcXVpZXNjZSB0aGUgcGF0aCBiZWluZwkgCisgKiAgICAgICAgICAtSVBRVVNDRSAtICAweDQwLCBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0byBxdWllc2NlIHRoZSBwYXRoIGJlaW5nCiAgKgkJZXN0YWJsaXNoZWQuCi0gKiAgICAgICAgICAtSVBMT0NBTCAtICAwWDAxLCBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gZm9yY2UgdGhlIHBhcnRuZXIgdG8gYmUgb24gCisgKiAgICAgICAgICAtSVBMT0NBTCAtICAwWDAxLCBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gZm9yY2UgdGhlIHBhcnRuZXIgdG8gYmUgb24KICAqCQl0aGUgbG9jYWwgc3lzdGVtLiBJZiBsb2NhbCBpcyBzcGVjaWZpZWQgdGhlbiB0YXJnZXQgY2xhc3MgY2Fubm90IGJlCi0gKgkJc3BlY2lmaWVkLiAgICAgICAgICAgICAgICAgICAgICAgCisgKgkJc3BlY2lmaWVkLgogICogICAgICAgIGZsYWdzMV9vdXQgLSBpbnQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGF0aAogICogICAgICAgICAgIC0gSVBQUlRZIC0gMHgyMCwgSW5kaWNhdGVzIHlvdSBtYXkgc2VuZCBwcmlvcml0eSBtZXNzYWdlcy4KICAqICAgICAgICBtc2dsaW0gLSAqIHUxNiwgTnVtYmVyIG9mIG91dHN0YW5kaW5nIG1lc3NhZ2VzCi0gKiAgICAgICAgaGFuZGxlIC0gaXVjdl9oYW5kbGVfdCwgQWRkcmVzcyBvZiBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHBnbV9kYXRhIC0gdm9pZCAqLCBBcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMgICAgICAgICAgICAgIAorICogICAgICAgIGhhbmRsZSAtIGl1Y3ZfaGFuZGxlX3QsIEFkZHJlc3Mgb2YgaGFuZGxlcgorICogICAgICAgIHBnbV9kYXRhIC0gdm9pZCAqLCBBcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMKICAqIE91dHB1dDogcmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwKICAqICAgICAgICAgcmMgLSByZXR1cm4gY29kZSBmcm9tIGl1Y3ZfZGVjbGFyZV9idWZmZXIKLSAqICAgICAgICAgLUVJTlZBTCAtIEludmFsaWQgaGFuZGxlIHBhc3NlZCBieSBhcHBsaWNhdGlvbiAKLSAqICAgICAgICAgLUVJTlZBTCAtIFBhdGhpZCBhZGRyZXNzIGlzIE5VTEwgCi0gKiAgICAgICAgIGFkZF9wYXRoaWRfcmVzdWx0IC0gUmV0dXJuIGNvZGUgZnJvbSBpbnRlcm5hbCBmdW5jdGlvbiBhZGRfcGF0aGlkICAgICAgICAgCisgKiAgICAgICAgIC1FSU5WQUwgLSBJbnZhbGlkIGhhbmRsZSBwYXNzZWQgYnkgYXBwbGljYXRpb24KKyAqICAgICAgICAgLUVJTlZBTCAtIFBhdGhpZCBhZGRyZXNzIGlzIE5VTEwKKyAqICAgICAgICAgYWRkX3BhdGhpZF9yZXN1bHQgLSBSZXR1cm4gY29kZSBmcm9tIGludGVybmFsIGZ1bmN0aW9uIGFkZF9wYXRoaWQKICovCiBpbnQKICAgICBpdWN2X2Nvbm5lY3QgKHUxNiAqIHBhdGhpZCwKQEAgLTM5NywxNiArMzk3LDE2IEBACiAJCSAgaW50ICpmbGFnczFfb3V0LAogCQkgIHUxNiAqIG1zZ2xpbSwgaXVjdl9oYW5kbGVfdCBoYW5kbGUsIHZvaWQgKnBnbV9kYXRhKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcHVyZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGNhbmNlbHMgYSBtZXNzYWdlIHRoYXQgeW91IGhhdmUgc2VudC4gICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9wdXJnZQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGEgbWVzc2FnZSB0aGF0IHlvdSBoYXZlIHNlbnQuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCiAgKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgcHVyZ2VkLgotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IGF1ZGl0IC0gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYXN5bmNocm9ub3VzIGVycm9yICAgICAgIAotICogICAgICAgICAgICAgICAgIHRoYXQgbWF5IGhhdmUgYWZmZWN0ZWQgdGhlIG5vcm1hbCBjb21wbGV0aW9uICAgICAgICAKLSAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiBPdXRwdXQ6IGF1ZGl0IC0gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYXN5bmNocm9ub3VzIGVycm9yCisgKiAgICAgICAgICAgICAgICAgdGhhdCBtYXkgaGF2ZSBhZmZlY3RlZCB0aGUgbm9ybWFsIGNvbXBsZXRpb24KKyAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgogKi8KIGludCBpdWN2X3B1cmdlICh1MTYgcGF0aGlkLCB1MzIgbXNnaWQsIHUzMiBzcmNjbHMsIF9fdTMyICphdWRpdCk7CiAvKgpAQCAtNDI2LDM4ICs0MjYsMzggQEAKICAqLwogdWxvbmcgaXVjdl9xdWVyeV9idWZzaXplICh2b2lkKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcXVpZXNjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRlbXBvcmFyaWx5IHN1c3BlbmRzIGluY29taW5nIG1lc3NhZ2VzIG9uIGFuIAotICogICAgICAgICAgSVVDViBwYXRoLiBZb3UgY2FuIGxhdGVyIHJlYWN0aXZhdGUgdGhlIHBhdGggYnkgaW52b2tpbmcgICAKLSAqICAgICAgICAgIHRoZSBpdWN2X3Jlc3VtZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHVzZXJfZGF0YSAgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcXVpZXNjZQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0ZW1wb3JhcmlseSBzdXNwZW5kcyBpbmNvbWluZyBtZXNzYWdlcyBvbiBhbgorICogICAgICAgICAgSVVDViBwYXRoLiBZb3UgY2FuIGxhdGVyIHJlYWN0aXZhdGUgdGhlIHBhdGggYnkgaW52b2tpbmcKKyAqICAgICAgICAgIHRoZSBpdWN2X3Jlc3VtZSBmdW5jdGlvbi4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogICAgICAgIHVzZXJfZGF0YSAgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEKKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3ZfcXVpZXNjZSAodTE2IHBhdGhpZCwgdWNoYXIgdXNlcl9kYXRhWzE2XSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3JlY2VpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBtZXNzYWdlcyB0aGF0IGFyZSBiZWluZyBzZW50IHRvIHlvdSAKKy8qCisgKiBOYW1lOiBpdWN2X3JlY2VpdmUKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgbWVzc2FnZXMgdGhhdCBhcmUgYmVpbmcgc2VudCB0byB5b3UKICAqICAgICAgICAgIG92ZXIgZXN0YWJsaXNoZWQgcGF0aHMuIERhdGEgd2lsbCBiZSByZXR1cm5lZCBpbiBidWZmZXIgZm9yIGxlbmd0aCBvZgogICogICAgICAgICAgYnVmbGVuLgotICogSW5wdXQ6IAotICogICAgICAgcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHRvIHJlY2VpdmUuICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICBidWZsZW4gLSBMZW5ndGggb2YgYnVmZmVyIHRvIHJlY2VpdmUuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgIAotICogICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiAKKyAqIElucHV0OgorICogICAgICAgcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGJ1ZmZlciB0byByZWNlaXZlLgorICogICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIGJ1ZmZlciB0byByZWNlaXZlLgorICogICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogT3V0cHV0OgogICoJIGZsYWdzMV9vdXQ6IGludCAqLCBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhdGguCiAgKiAgICAgICAgIElQTk9SUFkgLSAweDEwIFNwZWNpZmllcyB0aGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCBubyByZXBseSBpcwotICoJICAgZXhwZWN0ZWQuICAgICAgCi0gKiAgICAgICAgIElQUFJUWSAgLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuICAgICAgIAorICoJICAgZXhwZWN0ZWQuCisgKiAgICAgICAgIElQUFJUWSAgLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCiAgKiAgICAgICAgIElQUk1EQVRBIC0gMHg4MCBzcGVjaWZpZXMgdGhlIGRhdGEgaXMgY29udGFpbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdAogICogICAgICAgcmVzaWR1YWxfYnVmZmVyIC0gYWRkcmVzcyBvZiBidWZmZXIgdXBkYXRlZCBieSB0aGUgbnVtYmVyCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBvZiBieXRlcyB5b3UgaGF2ZSByZWNlaXZlZC4KLSAqICAgICAgIHJlc2lkdWFsX2xlbmd0aCAtICAgICAgCisgKiAgICAgICByZXNpZHVhbF9sZW5ndGggLQogICogICAgICAgICAgICAgIENvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcywgaWYgdGhlIHJlY2VpdmUgYnVmZmVyIGlzOgogICogICAgICAgICAgICAgICBUaGUgc2FtZSBsZW5ndGggYXMgdGhlIG1lc3NhZ2UsIHRoaXMgZmllbGQgaXMgemVyby4KICAqICAgICAgICAgICAgICAgTG9uZ2VyIHRoYW4gdGhlIG1lc3NhZ2UsIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZgpAQCAtNDY2LDggKzQ2Niw4IEBACiAgKiAgICAgICAgICAgICAgICBjb3VudCAodGhhdCBpcywgdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaW4gdGhlCiAgKiAgICAgICAgICAgICAgICBtZXNzYWdlIHRoYXQgZG9lcyBub3QgZml0IGludG8gdGhlIGJ1ZmZlci4gSW4gdGhpcwogICogICAgICAgICAgICAgICAgY2FzZSBiMmYwX3Jlc3VsdCA9IDUuCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBidWZmZXIgYWRkcmVzcyBpcyBwb2ludGluZyB0byBOVUxMICAgICAgICAgICAgICAgICAgIAorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gYnVmZmVyIGFkZHJlc3MgaXMgcG9pbnRpbmcgdG8gTlVMTAogKi8KIGludCBpdWN2X3JlY2VpdmUgKHUxNiBwYXRoaWQsCiAJCSAgdTMyIG1zZ2lkLApAQCAtNDc3LDE2ICs0NzcsMTYgQEAKIAkJICBpbnQgKmZsYWdzMV9vdXQsCiAJCSAgdWxvbmcgKiByZXNpZHVhbF9idWZmZXIsIHVsb25nICogcmVzaWR1YWxfbGVuZ3RoKTsKIAotIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICogTmFtZTogaXVjdl9yZWNlaXZlX2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIG1lc3NhZ2VzIHRoYXQgYXJlIGJlaW5nIHNlbnQgdG8geW91IAorIC8qCisgICogTmFtZTogaXVjdl9yZWNlaXZlX2FycmF5CisgICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBtZXNzYWdlcyB0aGF0IGFyZSBiZWluZyBzZW50IHRvIHlvdQogICAqICAgICAgICAgIG92ZXIgZXN0YWJsaXNoZWQgcGF0aHMuIERhdGEgd2lsbCBiZSByZXR1cm5lZCBpbiBmaXJzdCBidWZmZXIgZm9yCiAgICogICAgICAgICAgbGVuZ3RoIG9mIGZpcnN0IGJ1ZmZlci4KLSAgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCiAgICogICAgICAgIG1zZ2lkIC0gc3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgogICAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgotICAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGFycmF5IG9mIGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgIAotICAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2YgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGFycmF5IG9mIGJ1ZmZlcnMuCisgICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBidWZmZXJzLgogICAqIE91dHB1dDoKICAgKiAgICAgICAgZmxhZ3MxX291dDogaW50ICosIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aC4KICAgKiAgICAgICAgICBJUE5PUlBZIC0gMHgxMCBTcGVjaWZpZXMgdGhpcyBpcyBhIG9uZS13YXkgbWVzc2FnZSBhbmQgbm8gcmVwbHkgaXMKQEAgLTUwNCw4ICs1MDQsOCBAQAogICAqICAgICAgICAgICAgICAgIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUKICAgKiAgICAgICAgICAgICAgICBtZXNzYWdlIHRoYXQgZG9lcyBub3QgZml0IGludG8gdGhlIGJ1ZmZlci4gSW4gdGhpcwogICAqICAgICAgICAgICAgICAgIGNhc2UgYjJmMF9yZXN1bHQgPSA1LgotICAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAKKyAgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4KICAgKi8KIGludCBpdWN2X3JlY2VpdmVfYXJyYXkgKHUxNiBwYXRoaWQsCiAJCQl1MzIgbXNnaWQsCkBAIC01MTUsNDQgKzUxNSw0NCBAQAogCQkJaW50ICpmbGFnczFfb3V0LAogCQkJdWxvbmcgKiByZXNpZHVhbF9idWZmZXIsIHVsb25nICogcmVzaWR1YWxfbGVuZ3RoKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZWplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhlIHJlamVjdCBmdW5jdGlvbiByZWZ1c2VzIGEgc3BlY2lmaWVkIG1lc3NhZ2UuIEJldHdlZW4gdGhlIAotICogICAgICAgICAgdGltZSB5b3UgYXJlIG5vdGlmaWVkIG9mIGEgbWVzc2FnZSBhbmQgdGhlIHRpbWUgdGhhdCB5b3UgICAgIAotICogICAgICAgICAgY29tcGxldGUgdGhlIG1lc3NhZ2UsIHRoZSBtZXNzYWdlIG1heSBiZSByZWplY3RlZC4gICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVqZWN0CisgKiBQdXJwb3NlOiBUaGUgcmVqZWN0IGZ1bmN0aW9uIHJlZnVzZXMgYSBzcGVjaWZpZWQgbWVzc2FnZS4gQmV0d2VlbiB0aGUKKyAqICAgICAgICAgIHRpbWUgeW91IGFyZSBub3RpZmllZCBvZiBhIG1lc3NhZ2UgYW5kIHRoZSB0aW1lIHRoYXQgeW91CisgKiAgICAgICAgICBjb21wbGV0ZSB0aGUgbWVzc2FnZSwgdGhlIG1lc3NhZ2UgbWF5IGJlIHJlamVjdGVkLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgogKi8KIGludCBpdWN2X3JlamVjdCAodTE2IHBhdGhpZCwgdTMyIG1zZ2lkLCB1MzIgdHJnY2xzKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91ICAgIAotICogICAgICAgICAgcmVjZWl2ZS4gWW91IG11c3QgaWRlbnRpZnkgY29tcGxldGVseSB0aGUgbWVzc2FnZSB0byAgICAgICAKLSAqICAgICAgICAgIHdoaWNoIHlvdSB3aXNoIHRvIHJlcGx5LiBpZSwgcGF0aGlkLCBtc2dpZCwgYW5kIHRyZ2Nscy4gICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3JlcGx5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91CisgKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvCisgKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCi0gKiAgICAgICAgICBJUFBSVFktIDB4MjAsIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuICAgICAgICAKLSAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHJlcGx5IGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiByZXBseSBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IHJlc2lkdWFsX2J1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHVwZGF0ZWQgYnkgdGhlIG51bWJlciAKLSAqICAgICAgICAgICAgICAgICAgICBvZiBieXRlcyB5b3UgaGF2ZSBtb3ZlZC4gICAgICAgICAgICAgIAorICogICAgICAgICAgSVBQUlRZLSAweDIwLCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgcmVwbHkgYnVmZmVyLgorICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiByZXBseSBidWZmZXIuCisgKiBPdXRwdXQ6IHJlc2lkdWFsX2J1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHVwZGF0ZWQgYnkgdGhlIG51bWJlcgorICogICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIHlvdSBoYXZlIG1vdmVkLgogICogICAgICAgICByZXNpZHVhbF9sZW5ndGggLSBDb250YWlucyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgKgkJSWYgdGhlIGFuc3dlciBidWZmZXIgaXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSByZXBseSwgdGhpcyBmaWVsZAogICoJCSBjb250YWlucyB6ZXJvLgogICoJCUlmIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIGxvbmdlciB0aGFuIHRoZSByZXBseSwgdGhpcyBmaWVsZCBjb250YWlucwotICoJCSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLiAgCisgKgkJIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBidWZmZXIuCiAgKgkJSWYgdGhlIGFuc3dlciBidWZmZXIgaXMgc2hvcnRlciB0aGFuIHRoZSByZXBseSwgdGhpcyBmaWVsZCBjb250YWlucwogICoJCSBhIHJlc2lkdWFsIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWlhbmluZyBpbiB0aGUKICAqCQkgcmVwbHkgdGhhdCBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLiBJbiB0aGlzCiAgKiAgICAgICAgICAgICAgIGNhc2UgYjJmMF9yZXN1bHQgPSA1LgotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3JlcGx5ICh1MTYgcGF0aGlkLAogCQl1MzIgbXNnaWQsCkBAIC01NjEsMjAgKzU2MSwyMCBAQAogCQl2b2lkICpidWZmZXIsIHVsb25nIGJ1ZmxlbiwgdWxvbmcgKiByZXNpZHVhbF9idWZmZXIsCiAJCXVsb25nICogcmVzaWR1YWxfbGVuZ3RoKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXBseV9hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXNwb25kcyB0byB0aGUgdHdvLXdheSBtZXNzYWdlcyB0aGF0IHlvdSAgICAgIAotICogICAgICAgICAgcmVjZWl2ZS4gWW91IG11c3QgaWRlbnRpZnkgY29tcGxldGVseSB0aGUgbWVzc2FnZSB0byAgICAgICAgIAotICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLiAgICAgIAotICogICAgICAgICAgVGhlIGFycmF5IGlkZW50aWZpZXMgYSBsaXN0IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiAgICAgIAotICogICAgICAgICAgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgY29udGFpbnMgdGhlIHJlcGx5IGRhdGEuICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZXBseV9hcnJheQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXNwb25kcyB0byB0aGUgdHdvLXdheSBtZXNzYWdlcyB0aGF0IHlvdQorICogICAgICAgICAgcmVjZWl2ZS4gWW91IG11c3QgaWRlbnRpZnkgY29tcGxldGVseSB0aGUgbWVzc2FnZSB0bworICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLgorICogICAgICAgICAgVGhlIGFycmF5IGlkZW50aWZpZXMgYSBsaXN0IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZgorICogICAgICAgICAgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgY29udGFpbnMgdGhlIHJlcGx5IGRhdGEuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIKKyAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCwgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGFycmF5IG9mIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgcmVwbHkgYnVmZmVycy4KKyAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2YgcmVwbHkgYnVmZmVycy4KICAqIE91dHB1dDogcmVzaWR1YWxfYnVmZmVyIC0gQWRkcmVzcyBvZiBidWZmZXIgd2hpY2ggSVVDViBpcyBjdXJyZW50bHkgd29ya2luZyBvbi4KICAqICAgICAgICAgcmVzaWR1YWxfbGVuZ3RoIC0gQ29udGFpbnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICogICAgICAgICAgICAgIElmIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgcmVwbHksIHRoaXMgZmllbGQKQEAgLTU4NSw4ICs1ODUsOCBAQAogICogICAgICAgICAgICAgICBhIHJlc2lkdWFsIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWlhbmluZyBpbiB0aGUKICAqICAgICAgICAgICAgICAgcmVwbHkgdGhhdCBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLiBJbiB0aGlzCiAgKiAgICAgICAgICAgICAgIGNhc2UgYjJmMF9yZXN1bHQgPSA1LgotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAgICAgICAgCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3JlcGx5X2FycmF5ICh1MTYgcGF0aGlkLAogCQkgICAgICB1MzIgbXNnaWQsCkBAIC01OTYsNzcgKzU5Niw3NyBAQAogCQkgICAgICB1bG9uZyBidWZsZW4sIHVsb25nICogcmVzaWR1YWxfYWRkcmVzcywKIAkJICAgICAgdWxvbmcgKiByZXNpZHVhbF9sZW5ndGgpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXBseV9wcm1tc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzcG9uZHMgdG8gdGhlIHR3by13YXkgbWVzc2FnZXMgdGhhdCB5b3UgCi0gKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvICAgIAotICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLiAKLSAqICAgICAgICAgIFBybW1zZyBzaWduaWZpZXMgdGhlIGRhdGEgaXMgbW92ZWQgaW50byB0aGUgICAgICAgICAgICAgCi0gKiAgICAgICAgICBwYXJhbWV0ZXIgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVwbHlfcHJtbXNnCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91CisgKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvCisgKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuCisgKiAgICAgICAgICBQcm1tc2cgc2lnbmlmaWVzIHRoZSBkYXRhIGlzIG1vdmVkIGludG8gdGhlCisgKiAgICAgICAgICBwYXJhbWV0ZXIgbGlzdC4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFyYW1ldGVyLiAgCi0gKiAgICAgICAgICAgICAgICAgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAgICAgbGlzdC4KKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3ZfcmVwbHlfcHJtbXNnICh1MTYgcGF0aGlkLAogCQkgICAgICAgdTMyIG1zZ2lkLCB1MzIgdHJnY2xzLCBpbnQgZmxhZ3MxLCB1Y2hhciBwcm1tc2dbOF0pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXN1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgY29tbXVuaWNhdGlvbnMgb3ZlciBhIHF1aWVzY2VkIHBhdGggCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB1c2VyX2RhdGEgIC0gMTYtYnl0ZXMgb2YgdXNlciBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZXN1bWUKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgY29tbXVuaWNhdGlvbnMgb3ZlciBhIHF1aWVzY2VkIHBhdGgKKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB1c2VyX2RhdGEgIC0gMTYtYnl0ZXMgb2YgdXNlciBkYXRhLgorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KICovCiBpbnQgaXVjdl9yZXN1bWUgKHUxNiBwYXRoaWQsIHVjaGFyIHVzZXJfZGF0YVsxNl0pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgICAgCi0gKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyIGFuZCB0aGlzIGlzIGEgICAgICAKLSAqICAgICAgICAgIG9uZS13YXkgbWVzc2FnZSBhbmQgdGhlIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSAgIAotICogICAgICAgICAgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4gICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gCisvKgorICogTmFtZTogaXVjdl9zZW5kCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyIGFuZCB0aGlzIGlzIGEKKyAqICAgICAgICAgIG9uZS13YXkgbWVzc2FnZSBhbmQgdGhlIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZQorICogICAgICAgICAgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBidWZsZW4gLSBMZW5ndGggb2Ygc2VuZCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyLgorICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmQgKHUxNiBwYXRoaWQsCiAJICAgICAgIHUzMiAqIG1zZ2lkLAogCSAgICAgICB1MzIgdHJnY2xzLAogCSAgICAgICB1MzIgc3JjY2xzLCB1MzIgbXNndGFnLCBpbnQgZmxhZ3MxLCB2b2lkICpidWZmZXIsIHVsb25nIGJ1Zmxlbik7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZW5kX2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAKLSAqICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBidWZmZXIgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IG9mICAgIAotICogICAgICAgICAgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIGRpc2NvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGhvbGQgCi0gKiAgICAgICAgICB0aGUgbWVzc2FnZSB0ZXh0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUgICAgICAKLSAqICAgICAgICAgIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBtZXNzYWdlLiAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2VuZF9hcnJheQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICogICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgYXJyYXkgb2YKKyAqICAgICAgICAgIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgdGhhdCBob2xkCisgKiAgICAgICAgICB0aGUgbWVzc2FnZSB0ZXh0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUKKyAqICAgICAgICAgIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KICAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRodCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCi0gKiAgICAgICAgICBJUFBSVFktIHNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuIAotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2Ygc2VuZCBidWZmZXJzLiAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBzZW5kIGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgICAgSVBQUlRZLSBzcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2Ygc2VuZCBidWZmZXJzLgorICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBzZW5kIGJ1ZmZlcnMuCisgKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kX2FycmF5ICh1MTYgcGF0aGlkLAogCQkgICAgIHUzMiAqIG1zZ2lkLApAQCAtNjc1LDQ4ICs2NzUsNDggQEAKIAkJICAgICB1MzIgbXNndGFnLAogCQkgICAgIGludCBmbGFnczEsIGl1Y3ZfYXJyYXlfdCAqIGJ1ZmZlciwgdWxvbmcgYnVmbGVuKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZF9wcm1tc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAgIAotICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkICAKLSAqICAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBsaXN0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUgCi0gKiAgICAgICAgICByZWNlaXZlciB3aWxsIG5vdCByZXBseSB0byB0aGUgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kX3BybW1zZworICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkCisgKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIG9uZS13YXkgbWVzc2FnZSBhbmQgdGhlCisgKiAgICAgICAgICByZWNlaXZlciB3aWxsIG5vdCByZXBseSB0byB0aGUgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgc3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBwcm1tc2cgLSA4LWJ5dGVzIG9mIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gcGFyYW1ldGVyIGxpc3QuICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHBhcmFtZXRlciBsaXN0LgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3Zfc2VuZF9wcm1tc2cgKHUxNiBwYXRoaWQsCiAJCSAgICAgIHUzMiAqIG1zZ2lkLAogCQkgICAgICB1MzIgdHJnY2xzLAogCQkgICAgICB1MzIgc3JjY2xzLCB1MzIgbXNndGFnLCBpbnQgZmxhZ3MxLCB1Y2hhciBwcm1tc2dbOF0pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgCi0gKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyLiBUaGUgcmVjZWl2ZXIgICAKLSAqICAgICAgICAgIG9mIHRoZSBzZW5kIGlzIGV4cGVjdGVkIHRvIHJlcGx5IHRvIHRoZSBtZXNzYWdlIGFuZCAgIAotICogICAgICAgICAgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSAgCi0gKiAgICAgICAgICB0byB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAKLSAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLiAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQyd2F5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyLiBUaGUgcmVjZWl2ZXIKKyAqICAgICAgICAgIG9mIHRoZSBzZW5kIGlzIGV4cGVjdGVkIHRvIHJlcGx5IHRvIHRoZSBtZXNzYWdlIGFuZAorICogICAgICAgICAgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseQorICogICAgICAgICAgdG8gdGhpcyBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2Ygc2VuZCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgb2YgCi0gKiAgICAgICAgICAgICAgICAgdGhpcyBtZXNzYWdlLiAgICAgICAgCi0gKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggb2YgYnVmZmVyLiAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBvciBhbnNidWYgYWRkcmVzcyBpcyBOVUxMLiAgICAKKyAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyLgorICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4KKyAqICAgICAgICBhbnNidWYgLSBBZGRyZXNzIG9mIGJ1ZmZlciBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IG9mCisgKiAgICAgICAgICAgICAgICAgdGhpcyBtZXNzYWdlLgorICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIGJ1ZmZlci4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgb3IgYW5zYnVmIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kMndheSAodTE2IHBhdGhpZCwKIAkJICAgdTMyICogbXNnaWQsCkBAIC03MjYsMjggKzcyNiwyOCBAQAogCQkgICBpbnQgZmxhZ3MxLAogCQkgICB2b2lkICpidWZmZXIsIHVsb25nIGJ1Zmxlbiwgdm9pZCAqYW5zYnVmLCB1bG9uZyBhbnNsZW4pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmQyd2F5X2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAgCi0gKiAgICAgICAgICBUaGUgY29udGVudHMgb2YgYnVmZmVyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBvZiAgICAgCi0gKiAgICAgICAgICBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgaG9sZCAgCi0gKiAgICAgICAgICB0aGUgbWVzc2FnZSB0ZXh0LiBUaGUgcmVjZWl2ZXIgb2YgdGhlIHNlbmQgaXMgZXhwZWN0ZWQgdG8gCi0gKiAgICAgICAgICByZXBseSB0byB0aGUgbWVzc2FnZSBhbmQgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaCAgCi0gKiAgICAgICAgICBJVUNWIG1vdmVzIHRoZSByZXBseSB0byB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQyd2F5X2FycmF5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBUaGUgY29udGVudHMgb2YgYnVmZmVyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBvZgorICogICAgICAgICAgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIGRpc2NvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGhvbGQKKyAqICAgICAgICAgIHRoZSBtZXNzYWdlIHRleHQuIFRoZSByZWNlaXZlciBvZiB0aGUgc2VuZCBpcyBleHBlY3RlZCB0bworICogICAgICAgICAgcmVwbHkgdG8gdGhlIG1lc3NhZ2UgYW5kIGEgYnVmZmVyIGlzIHByb3ZpZGVkIGludG8gd2hpY2gKKyAqICAgICAgICAgIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBidWZmZXIgLSBTZGRyZXNzIG9mIGFycmF5IG9mIHNlbmQgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIHNlbmQgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgICAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICAgICAgICBidWZmZXIgLSBTZGRyZXNzIG9mIGFycmF5IG9mIHNlbmQgYnVmZmVycy4KKyAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2Ygc2VuZCBidWZmZXJzLgorICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkKKyAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuCisgKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggcmVwbHkgYnVmZmVycy4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmQyd2F5X2FycmF5ICh1MTYgcGF0aGlkLAogCQkJIHUzMiAqIG1zZ2lkLApAQCAtNzU4LDI3ICs3NTgsMjcgQEAKIAkJCSBpdWN2X2FycmF5X3QgKiBidWZmZXIsCiAJCQkgdWxvbmcgYnVmbGVuLCBpdWN2X2FycmF5X3QgKiBhbnNidWYsIHVsb25nIGFuc2xlbik7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmQyd2F5X3BybW1zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgICAgICAKLSAqICAgICAgICAgIFBybW1zZyBzcGVjaWZpZXMgdGhhdCB0aGUgOC1ieXRlcyBvZiBkYXRhIGFyZSB0byBiZSBtb3ZlZCAgCi0gKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIHR3by13YXkgbWVzc2FnZSBhbmQgdGhlIAotICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyICAgICAKLSAqICAgICAgICAgIGlzIHByb3ZpZGVkIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgdG8gdGhpcyAgICAgICAgCi0gKiAgICAgICAgICBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFJhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kMndheV9wcm1tc2cKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIFBybW1zZyBzcGVjaWZpZXMgdGhhdCB0aGUgOC1ieXRlcyBvZiBkYXRhIGFyZSB0byBiZSBtb3ZlZAorICogICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIFRoaXMgaXMgYSB0d28td2F5IG1lc3NhZ2UgYW5kIHRoZQorICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyCisgKiAgICAgICAgICBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBJbnB1dDogcGF0aGlkIC0gUmF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KKyAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLgorICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuCiAgKiAgICAgICAgZmxhZ3MxIC0gT3B0aW9uIGZvciBwYXRoLgogICogICAgICAgICAgSVBQUlRZLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCi0gKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbiBwYXJhbWV0ZXIgbGlzdC4gICAgICAKLSAqICAgICAgICBhbnNidWYgLSBBZGRyZXNzIG9mIGJ1ZmZlciBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IG9mICAgIAorICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW4gcGFyYW1ldGVyIGxpc3QuCisgKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSBvZgogICogICAgICAgICAgICAgICAgIHRoaXMgbWVzc2FnZS4KLSAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiBidWZmZXIuICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAKKyAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiBidWZmZXIuCisgKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kMndheV9wcm1tc2cgKHUxNiBwYXRoaWQsCiAJCQkgIHUzMiAqIG1zZ2lkLApAQCAtNzg4LDI5ICs3ODgsMjkgQEAKIAkJCSAgdWxvbmcgZmxhZ3MxLAogCQkJICB1Y2hhciBwcm1tc2dbOF0sIHZvaWQgKmFuc2J1ZiwgdWxvbmcgYW5zbGVuKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmQyd2F5X3BybW1zZ19hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4gICAgICAgIAotICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkICAgCi0gKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIHR3by13YXkgbWVzc2FnZSBhbmQgdGhlICAKLSAqICAgICAgICAgIHJlY2VpdmVyIG9mIHRoZSBtZXNzYWdlIGlzIGV4cGVjdGVkIHRvIHJlcGx5LiBBIGJ1ZmZlciAgICAgIAotICogICAgICAgICAgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSB0byB0aGlzICAgICAgICAgCi0gKiAgICAgICAgICBtZXNzYWdlLiBUaGUgY29udGVudHMgb2YgYW5zYnVmIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSAgICAgICAKLSAqICAgICAgICAgIGFycmF5IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgICAgIAotICogICAgICAgICAgdGhhdCBjb250YWluIHRoZSByZXBseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4gICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kMndheV9wcm1tc2dfYXJyYXkKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIFBybW1zZyBzcGVjaWZpZXMgdGhhdCB0aGUgOC1ieXRlcyBvZiBkYXRhIGFyZSB0byBiZSBtb3ZlZAorICogICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIFRoaXMgaXMgYSB0d28td2F5IG1lc3NhZ2UgYW5kIHRoZQorICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyCisgKiAgICAgICAgICBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMKKyAqICAgICAgICAgIG1lc3NhZ2UuIFRoZSBjb250ZW50cyBvZiBhbnNidWYgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCisgKiAgICAgICAgICBhcnJheSBvZiBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgZGlzY29udGlndW91cyBidWZmZXJzCisgKiAgICAgICAgICB0aGF0IGNvbnRhaW4gdGhlIHJlcGx5LgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBzcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIAorICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuCiAgKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBhcnJheSBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseQotICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4gIAotICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEFuc2J1ZiBhZGRyZXNzIGlzIE5VTEwuICAgICAgICAgIAorICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4KKyAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiByZXBseSBidWZmZXJzLgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEFuc2J1ZiBhZGRyZXNzIGlzIE5VTEwuCiAqLwogaW50IGl1Y3Zfc2VuZDJ3YXlfcHJtbXNnX2FycmF5ICh1MTYgcGF0aGlkLAogCQkJCXUzMiAqIG1zZ2lkLApAQCAtODIxLDI5ICs4MjEsMjkgQEAKIAkJCQl1Y2hhciBwcm1tc2dbOF0sCiAJCQkJaXVjdl9hcnJheV90ICogYW5zYnVmLCB1bG9uZyBhbnNsZW4pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2V0bWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb2xsb3dpbmcgSVVDViAgICAgCi0gKiAgICAgICAgICBleHRlcm5hbCBpbnRlcnJ1cHRpb25zOiBOb25wcmlvcml0eSBhbmQgcHJpb3JpdHkgbWVzc2FnZSAKLSAqICAgICAgICAgIGludGVycnVwdHMsIG5vbnByaW9yaXR5IGFuZCBwcmlvcml0eSByZXBseSBpbnRlcnJ1cHRzLiAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2V0bWFzaworICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb2xsb3dpbmcgSVVDVgorICogICAgICAgICAgZXh0ZXJuYWwgaW50ZXJydXB0aW9uczogTm9ucHJpb3JpdHkgYW5kIHByaW9yaXR5IG1lc3NhZ2UKKyAqICAgICAgICAgIGludGVycnVwdHMsIG5vbnByaW9yaXR5IGFuZCBwcmlvcml0eSByZXBseSBpbnRlcnJ1cHRzLgogICogSW5wdXQ6IFNldE1hc2tGbGFnIC0gb3B0aW9ucyBmb3IgaW50ZXJydXB0cwotICogICAgICAgICAgIDB4ODAgLSBOb25wcmlvcml0eV9NZXNzYWdlUGVuZGluZ0ludGVycnVwdHNGbGFnICAgICAgICAgCi0gKiAgICAgICAgICAgMHg0MCAtIFByaW9yaXR5X01lc3NhZ2VQZW5kaW5nSW50ZXJydXB0c0ZsYWcgICAgICAgICAgICAKLSAqICAgICAgICAgICAweDIwIC0gTm9ucHJpb3JpdHlfTWVzc2FnZUNvbXBsZXRpb25JbnRlcnJ1cHRzRmxhZyAgICAgIAotICogICAgICAgICAgIDB4MTAgLSBQcmlvcml0eV9NZXNzYWdlQ29tcGxldGlvbkludGVycnVwdHNGbGFnICAgICAgICAgCisgKiAgICAgICAgICAgMHg4MCAtIE5vbnByaW9yaXR5X01lc3NhZ2VQZW5kaW5nSW50ZXJydXB0c0ZsYWcKKyAqICAgICAgICAgICAweDQwIC0gUHJpb3JpdHlfTWVzc2FnZVBlbmRpbmdJbnRlcnJ1cHRzRmxhZworICogICAgICAgICAgIDB4MjAgLSBOb25wcmlvcml0eV9NZXNzYWdlQ29tcGxldGlvbkludGVycnVwdHNGbGFnCisgKiAgICAgICAgICAgMHgxMCAtIFByaW9yaXR5X01lc3NhZ2VDb21wbGV0aW9uSW50ZXJydXB0c0ZsYWcKICAqICAgICAgICAgICAweDA4IC0gSVVDVkNvbnRyb2xJbnRlcnJ1cHRzRmxhZwotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3Zfc2V0bWFzayAoaW50IFNldE1hc2tGbGFnKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIGFuIElVQ1YgcGF0aC4gIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAKLSAqICAgICAgICB1c2VyX2RhdGEgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEuICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBJbnRlcmFsIGVycm9yLCB3aWxkIHBvaW50ZXIuICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2V2ZXIKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyBhbiBJVUNWIHBhdGguCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdXNlcl9kYXRhIC0gMTYtYnl0ZXMgb2YgdXNlciBkYXRhLgorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gSW50ZXJhbCBlcnJvciwgd2lsZCBwb2ludGVyLgogKi8KIGludCBpdWN2X3NldmVyICh1MTYgcGF0aGlkLCB1Y2hhciB1c2VyX2RhdGFbMTZdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IGVkY2YwNWQuLmY5NDQxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtNjgsNiArNjgsNyBAQAogc3RhdGljIHZvaWQgbGNzX3N0YXJ0X2tlcm5lbF90aHJlYWQoc3RydWN0IGxjc19jYXJkICpjYXJkKTsKIHN0YXRpYyB2b2lkIGxjc19nZXRfZnJhbWVzX2NiKHN0cnVjdCBsY3NfY2hhbm5lbCAqLCBzdHJ1Y3QgbGNzX2J1ZmZlciAqKTsKIHN0YXRpYyBpbnQgbGNzX3NlbmRfZGVsaXBtKHN0cnVjdCBsY3NfY2FyZCAqLCBzdHJ1Y3QgbGNzX2lwbV9saXN0ICopOworc3RhdGljIGludCBsY3NfcmVjb3Zlcnkodm9pZCAqcHRyKTsKIAogLyoqCiAgKiBEZWJ1ZyBGYWNpbGl0eSBTdHVmZgpAQCAtNDI5LDEyICs0MzAsNiBAQAogCWNhcmQtPnR4X2J1ZmZlciA9IE5VTEw7CiAJY2FyZC0+dHhfZW1pdHRlZCA9IDA7CiAKLQkvKiBJbml0aWFsaXplIGtlcm5lbCB0aHJlYWQgdGFzayB1c2VkIGZvciBMR1cgY29tbWFuZHMuICovCi0JSU5JVF9XT1JLKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIsCi0JCSAgKHZvaWQgKilsY3Nfc3RhcnRfa2VybmVsX3RocmVhZCxjYXJkKTsKLQljYXJkLT50aHJlYWRfc3RhcnRfbWFzayA9IDA7Ci0JY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzayA9IDA7Ci0JY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+d2FpdF9xKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmlwbV9sb2NrKTsKQEAgLTExNTAsOCArMTE0NSw2IEBACiAJCWxpc3RfYWRkX3RhaWwoJmlwbS0+bGlzdCwgJmNhcmQtPmlwbV9saXN0KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBtX2xvY2ssIGZsYWdzKTsKLQlpZiAoY2FyZC0+c3RhdGUgPT0gREVWX1NUQVRFX1VQKQotCQluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7CiB9CiAKIC8qKgpAQCAtMTIzNCwxNyArMTIyNywxNyBAQAogCQlpZiAoaXBtICE9IE5VTEwpCiAJCQljb250aW51ZTsJLyogQWRkcmVzcyBhbHJlYWR5IGluIGxpc3QuICovCiAJCWlwbSA9IChzdHJ1Y3QgbGNzX2lwbV9saXN0ICopCi0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGNzX2lwbV9saXN0KSwgR0ZQX0FUT01JQyk7CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbGNzX2lwbV9saXN0KSwgR0ZQX0FUT01JQyk7CiAJCWlmIChpcG0gPT0gTlVMTCkgewogCQkJUFJJTlRfSU5GTygiTm90IGVub3VnaCBtZW1vcnkgdG8gYWRkICIKIAkJCQkgICAibmV3IG11bHRpY2FzdCBlbnRyeSFcbiIpOwogCQkJYnJlYWs7CiAJCX0KLQkJbWVtc2V0KGlwbSwgMCwgc2l6ZW9mKHN0cnVjdCBsY3NfaXBtX2xpc3QpKTsKIAkJbWVtY3B5KCZpcG0tPmlwbS5tYWNfYWRkciwgYnVmLCBMQ1NfTUFDX0xFTkdUSCk7CiAJCWlwbS0+aXBtLmlwX2FkZHIgPSBpbTQtPm11bHRpYWRkcjsKIAkJaXBtLT5pcG1fc3RhdGUgPSBMQ1NfSVBNX1NUQVRFX1NFVF9SRVFVSVJFRDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwbV9sb2NrLCBmbGFncyk7CisJCUxDU19EQkZfSEVYKDIsdHJhY2UsJmlwbS0+aXBtLmlwX2FkZHIsNCk7CiAJCWxpc3RfYWRkKCZpcG0tPmxpc3QsICZjYXJkLT5pcG1fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwbV9sb2NrLCBmbGFncyk7CiAJfQpAQCAtMTI3Miw3ICsxMjY1LDE1IEBACiAJcmVhZF91bmxvY2soJmluNF9kZXYtPm1jX2xpc3RfbG9jayk7CiAJaW5fZGV2X3B1dChpbjRfZGV2KTsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGNhcmQtPmRldik7CisJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOworCXdhaXRfZXZlbnQoY2FyZC0+d3JpdGUud2FpdF9xLAorCQkJKGNhcmQtPndyaXRlLnN0YXRlICE9IENIX1NUQVRFX1JVTk5JTkcpKTsKIAlsY3NfZml4X211bHRpY2FzdF9saXN0KGNhcmQpOworCWlmIChjYXJkLT5zdGF0ZSA9PSBERVZfU1RBVEVfVVApIHsKKwkJbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOworCQluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7CisJfQogb3V0OgogCWxjc19jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgTENTX1NFVF9NQ19USFJFQUQpOwogCXJldHVybiAwOwpAQCAtMTI4OSw3ICsxMjkwLDcgQEAKICAgICAgICAgTENTX0RCRl9URVhUKDQsIHRyYWNlLCAic2V0bXVsdGkiKTsKICAgICAgICAgY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGV2LT5wcml2OwogCi0gICAgICAgIGlmICghbGNzX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkgCisgICAgICAgIGlmICghbGNzX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKIAkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKIH0KIApAQCAtMTMyMSw2ICsxMzIyLDUzIEBACiAJcmV0dXJuIFBUUl9FUlIoaXJiKTsKIH0KIAorc3RhdGljIGludAorbGNzX2dldF9wcm9ibGVtKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgaXJiICppcmIpCit7CisJaW50IGRzdGF0LCBjc3RhdDsKKwljaGFyICpzZW5zZTsKKworCXNlbnNlID0gKGNoYXIgKikgaXJiLT5lY3c7CisJY3N0YXQgPSBpcmItPnNjc3cuY3N0YXQ7CisJZHN0YXQgPSBpcmItPnNjc3cuZHN0YXQ7CisKKwlpZiAoY3N0YXQgJiAoU0NITl9TVEFUX0NITl9DVFJMX0NISyB8IFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKKwkJICAgICBTQ0hOX1NUQVRfQ0hOX0RBVEFfQ0hLIHwgU0NITl9TVEFUX0NIQUlOX0NIRUNLIHwKKwkJICAgICBTQ0hOX1NUQVRfUFJPVF9DSEVDSyAgIHwgU0NITl9TVEFUX1BST0dfQ0hFQ0spKSB7CisJCUxDU19EQkZfVEVYVCgyLCB0cmFjZSwgIkNHRU5DSEsiKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChkc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKKwkJaWYgKHNlbnNlW0xDU19TRU5TRV9CWVRFXzFdICYKKwkJICAgIExDU19TRU5TRV9SRVNFVFRJTkdfRVZFTlQpIHsKKwkJCUxDU19EQkZfVEVYVCgyLCB0cmFjZSwgIlJFVklORCIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHNlbnNlW0xDU19TRU5TRV9CWVRFXzBdICYKKwkJICAgIExDU19TRU5TRV9DTURfUkVKRUNUKSB7CisJCQlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJDTURSRUoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICgoIXNlbnNlW0xDU19TRU5TRV9CWVRFXzBdKSAmJgorCQkgICAgKCFzZW5zZVtMQ1NfU0VOU0VfQllURV8xXSkgJiYKKwkJICAgICghc2Vuc2VbTENTX1NFTlNFX0JZVEVfMl0pICYmCisJCSAgICAoIXNlbnNlW0xDU19TRU5TRV9CWVRFXzNdKSkgeworCQkJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAiWkVST1NFTiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAiREdFTkNISyIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2xjc19zY2hlZHVsZV9yZWNvdmVyeShzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQpCit7CisJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAic3RhcnRyZWMiKTsKKwlpZiAoIWxjc19zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKKwkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKK30KIAogLyoqCiAgKiBJUlEgSGFuZGxlciBmb3IgTENTIGNoYW5uZWxzCkBAIC0xMzMwLDcgKzEzNzgsOCBAQAogewogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgbGNzX2NoYW5uZWwgKmNoYW5uZWw7Ci0JaW50IGluZGV4OworCWludCByYywgaW5kZXg7CisJaW50IGNzdGF0LCBkc3RhdDsKIAogCWlmIChsY3NfY2hlY2tfaXJiX2Vycm9yKGNkZXYsIGlyYikpCiAJCXJldHVybjsKQEAgLTEzNDEsMTcgKzEzOTAsMzAgQEAKIAllbHNlCiAJCWNoYW5uZWwgPSAmY2FyZC0+d3JpdGU7CiAKKwljc3RhdCA9IGlyYi0+c2Nzdy5jc3RhdDsKKwlkc3RhdCA9IGlyYi0+c2Nzdy5kc3RhdDsKIAlMQ1NfREJGX1RFWFRfKDUsIHRyYWNlLCAiUmludCVzIixjZGV2LT5kZXYuYnVzX2lkKTsKIAlMQ1NfREJGX1RFWFRfKDUsIHRyYWNlLCAiJTR4JTR4IixpcmItPnNjc3cuY3N0YXQsIGlyYi0+c2Nzdy5kc3RhdCk7CiAJTENTX0RCRl9URVhUXyg1LCB0cmFjZSwgIiU0eCU0eCIsaXJiLT5zY3N3LmZjdGwsIGlyYi0+c2Nzdy5hY3RsKTsKIAorCS8qIENoZWNrIGZvciBjaGFubmVsIGFuZCBkZXZpY2UgZXJyb3JzIHByZXNlbnRlZCAqLworCXJjID0gbGNzX2dldF9wcm9ibGVtKGNkZXYsIGlyYik7CisJaWYgKHJjIHx8IChkc3RhdCAmIERFVl9TVEFUX1VOSVRfRVhDRVApKSB7CisJCVBSSU5UX1dBUk4oImNoZWNrIG9uIGRldmljZSAlcywgZHN0YXQ9MHglWCwgY3N0YXQ9MHglWCBcbiIsCisJCQkgICAgY2Rldi0+ZGV2LmJ1c19pZCwgZHN0YXQsIGNzdGF0KTsKKwkJaWYgKHJjKSB7CisJCQlsY3Nfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CisJCQl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOworCQkJcmV0dXJuOworCQl9CisJfQogCS8qIEhvdyBmYXIgaW4gdGhlIGNjdyBjaGFpbiBoYXZlIHdlIHByb2Nlc3NlZD8gKi8KIAlpZiAoKGNoYW5uZWwtPnN0YXRlICE9IENIX1NUQVRFX0lOSVQpICYmCiAJICAgIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSkgewotCQlpbmRleCA9IChzdHJ1Y3QgY2N3MSAqKSBfX3ZhKChhZGRyX3QpIGlyYi0+c2Nzdy5jcGEpIAorCQlpbmRleCA9IChzdHJ1Y3QgY2N3MSAqKSBfX3ZhKChhZGRyX3QpIGlyYi0+c2Nzdy5jcGEpCiAJCQktIGNoYW5uZWwtPmNjd3M7CiAJCWlmICgoaXJiLT5zY3N3LmFjdGwgJiBTQ1NXX0FDVExfU1VTUEVOREVEKSB8fAotCQkgICAgKGlyYi0+c2Nzdy5jc3RhdCB8IFNDSE5fU1RBVF9QQ0kpKQorCQkgICAgKGlyYi0+c2Nzdy5jc3RhdCAmIFNDSE5fU1RBVF9QQ0kpKQogCQkJLyogQmxvb2R5IGlvIHN1YnN5c3RlbSB0ZWxscyB1cyBsaWVzIGFib3V0IGNwYS4uLiAqLwogCQkJaW5kZXggPSAoaW5kZXggLSAxKSAmIChMQ1NfTlVNX0JVRkZTIC0gMSk7CiAJCXdoaWxlIChjaGFubmVsLT5pb19pZHggIT0gaW5kZXgpIHsKQEAgLTEzNzAsNyArMTQzMiw2IEBACiAJZWxzZSBpZiAoaXJiLT5zY3N3LmFjdGwgJiBTQ1NXX0FDVExfU1VTUEVOREVEKQogCQkvKiBDQ1cgZXhlY3V0aW9uIHN0b3BwZWQgb24gYSBzdXNwZW5kIGJpdC4gKi8KIAkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9TVVNQRU5ERUQ7Ci0KIAlpZiAoaXJiLT5zY3N3LmZjdGwgJiBTQ1NXX0ZDVExfSEFMVF9GVU5DKSB7CiAJCWlmIChpcmItPnNjc3cuY2MgIT0gMCkgewogCQkJY2N3X2RldmljZV9oYWx0KGNoYW5uZWwtPmNjd2RldiwgKGFkZHJfdCkgY2hhbm5lbCk7CkBAIC0xMzc5LDcgKzE0NDAsNiBAQAogCQkvKiBUaGUgY2hhbm5lbCBoYXMgYmVlbiBzdG9wcGVkIGJ5IGhhbHRfSU8uICovCiAJCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfSEFMVEVEOwogCX0KLQogCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CiAJCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfQ0xFQVJFRDsKIAl9CkBAIC0xNDU1LDcgKzE1MTUsNyBAQAogCWxjc19yZWxlYXNlX2J1ZmZlcihjaGFubmVsLCBidWZmZXIpOwogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopCiAJCSgoY2hhciAqKSBjaGFubmVsIC0gb2Zmc2V0b2Yoc3RydWN0IGxjc19jYXJkLCB3cml0ZSkpOwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGNhcmQtPmRldikpCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoY2FyZC0+ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKGNhcmQtPmRldikpCiAJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAlzcGluX2xvY2soJmNhcmQtPmxvY2spOwogCWNhcmQtPnR4X2VtaXR0ZWQtLTsKQEAgLTE0OTEsNiArMTU1MSwxMCBAQAogCQljYXJkLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CiAJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwogCXNwaW5fbG9jaygmY2FyZC0+bG9jayk7CiAJaWYgKGNhcmQtPnR4X2J1ZmZlciAhPSBOVUxMICYmCkBAIC0xNjM2LDMwICsxNzAwLDYgQEAKIH0KIAogLyoqCi0gKiByZXNldCBjYXJkCi0gKi8KLXN0YXRpYyBpbnQKLWxjc19yZXNldGNhcmQoc3RydWN0IGxjc19jYXJkICpjYXJkKQotewotCWludCByZXRyaWVzOwotCi0JTENTX0RCRl9URVhUKDIsIHRyYWNlLCAicmVzY2FyZCIpOwotCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCAxMDsgcmV0cmllcysrKSB7Ci0JCWlmIChsY3NfZGV0ZWN0KGNhcmQpID09IDApIHsKLQkJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKLQkJCWNhcmQtPnN0YXRlID0gREVWX1NUQVRFX1VQOwotCQkJUFJJTlRfSU5GTygiTENTIGRldmljZSAlcyBzdWNjZXNzZnVsbHkgcmVzdGFydGVkIVxuIiwKLQkJCQkgICBjYXJkLT5kZXYtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJbXNsZWVwKDMwMDApOwotCX0KLQlQUklOVF9FUlIoIkVycm9yIGluIFJlc2V0aW5nIExDUyBjYXJkIVxuIik7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLQotLyoqCiAgKiBMQ1MgU3RvcCBjYXJkCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTE2ODMsMTI2ICsxNzIzLDE4IEBACiB9CiAKIC8qKgotICogTEdXIGluaXRpYXRlZCBjb21tYW5kcwotICovCi1zdGF0aWMgaW50Ci1sY3NfbGd3X3N0YXJ0bGFuX3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKLQotCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIGRhdGE7Ci0JZGFlbW9uaXplKCJsZ3dzdHBsbiIpOwotCi0JaWYgKCFsY3NfZG9fcnVuX3RocmVhZChjYXJkLCBMQ1NfU1RBUlRMQU5fVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JTENTX0RCRl9URVhUKDQsIHRyYWNlLCAibGd3c3RwbG4iKTsKLQlpZiAoY2FyZC0+ZGV2KQotCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JaWYgKGxjc19zdGFydGxhbihjYXJkKSA9PSAwKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKLQkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7Ci0JCVBSSU5UX0lORk8oIkxDUyBTdGFydGxhbiBmb3IgZGV2aWNlICVzIHN1Y2NlZWRlZCFcbiIsCi0JCQkgICBjYXJkLT5kZXYtPm5hbWUpOwotCi0JfSBlbHNlCi0JCVBSSU5UX0VSUigiTENTIFN0YXJ0bGFuIGZvciBkZXZpY2UgJXMgZmFpbGVkIVxuIiwKLQkJCSAgY2FyZC0+ZGV2LT5uYW1lKTsKLQlsY3NfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIExDU19TVEFSVExBTl9USFJFQUQpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFNlbmQgc3RhcnR1cCBjb21tYW5kIGluaXRpYXRlZCBieSBMYW4gR2F0ZXdheQotICovCi1zdGF0aWMgaW50Ci1sY3NfbGd3X3N0YXJ0dXBfdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0JaW50IHJjOwotCi0Jc3RydWN0IGxjc19jYXJkICpjYXJkOwotCi0JY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGF0YTsKLQlkYWVtb25pemUoImxnd3N0YWxuIik7Ci0KLQlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TVEFSVFVQX1RIUkVBRCkpCi0JCXJldHVybiAwOwotCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgImxnd3N0YWxuIik7Ci0JaWYgKGNhcmQtPmRldikKLQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwotCXJjID0gbGNzX3NlbmRfc3RhcnR1cChjYXJkLCBMQ1NfSU5JVElBVE9SX0xHVyk7Ci0JaWYgKHJjICE9IDApIHsKLQkJUFJJTlRfRVJSKCJTdGFydHVwIGZvciBMQ1MgZGV2aWNlICVzIGluaXRpYXRlZCAiIFwKLQkJCSAgImJ5IExHVyBmYWlsZWQhXG5SZXNldGluZyBjYXJkIC4uLlxuIiwKLQkJCSAgY2FyZC0+ZGV2LT5uYW1lKTsKLQkJLyogZG8gYSBjYXJkIHJlc2V0ICovCi0JCXJjID0gbGNzX3Jlc2V0Y2FyZChjYXJkKTsKLQkJaWYgKHJjID09IDApCi0JCQlnb3RvIERvbmU7Ci0JfQotCXJjID0gbGNzX3N0YXJ0bGFuKGNhcmQpOwotCWlmIChyYyA9PSAwKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKLQkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7Ci0JfQotRG9uZToKLQlpZiAocmMgPT0gMCkKLQkJUFJJTlRfSU5GTygiTENTIFN0YXJ0dXAgZm9yIGRldmljZSAlcyBzdWNjZWVkZWQhXG4iLAotCQkJICAgY2FyZC0+ZGV2LT5uYW1lKTsKLQllbHNlCi0JCVBSSU5UX0VSUigiTENTIFN0YXJ0dXAgZm9yIGRldmljZSAlcyBmYWlsZWQhXG4iLAotCQkJICBjYXJkLT5kZXYtPm5hbWUpOwotCWxjc19jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgTENTX1NUQVJUVVBfVEhSRUFEKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIHNlbmQgc3RvcGxhbiBjb21tYW5kIGluaXRpYXRlZCBieSBMYW4gR2F0ZXdheQotICovCi1zdGF0aWMgaW50Ci1sY3NfbGd3X3N0b3BsYW5fdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGxjc19jYXJkICpjYXJkOwotCWludCByYzsKLQotCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIGRhdGE7Ci0JZGFlbW9uaXplKCJsZ3dzdG9wIik7Ci0KLQlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TVE9QTEFOX1RIUkVBRCkpCi0JCXJldHVybiAwOwotCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgImxnd3N0b3AiKTsKLQlpZiAoY2FyZC0+ZGV2KQotCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JaWYgKGxjc19zZW5kX3N0b3BsYW4oY2FyZCwgTENTX0lOSVRJQVRPUl9MR1cpID09IDApCi0JCVBSSU5UX0lORk8oIlN0b3BsYW4gZm9yICVzIGluaXRpYXRlZCBieSBMR1cgc3VjY2VlZGVkIVxuIiwKLQkJCSAgIGNhcmQtPmRldi0+bmFtZSk7Ci0JZWxzZQotCQlQUklOVF9FUlIoIlN0b3BsYW4gJXMgaW5pdGlhdGVkIGJ5IExHVyBmYWlsZWQhXG4iLAotCQkJICBjYXJkLT5kZXYtPm5hbWUpOwotCS8qVHJ5IHRvIHJlc2V0IHRoZSBjYXJkLCBzdG9wIGl0IG9uIGZhaWx1cmUgKi8KLSAgICAgICAgcmMgPSBsY3NfcmVzZXRjYXJkKGNhcmQpOwotICAgICAgICBpZiAocmMgIT0gMCkKLSAgICAgICAgICAgICAgICByYyA9IGxjc19zdG9wY2FyZChjYXJkKTsKLQlsY3NfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIExDU19TVE9QTEFOX1RIUkVBRCk7Ci0gICAgICAgIHJldHVybiByYzsKLX0KLQotLyoqCiAgKiBLZXJuZWwgVGhyZWFkIGhlbHBlciBmdW5jdGlvbnMgZm9yIExHVyBpbml0aWF0ZWQgY29tbWFuZHMKICAqLwogc3RhdGljIHZvaWQKIGxjc19zdGFydF9rZXJuZWxfdGhyZWFkKHN0cnVjdCBsY3NfY2FyZCAqY2FyZCkKIHsKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJrcm50aHJkIik7Ci0JaWYgKGxjc19kb19zdGFydF90aHJlYWQoY2FyZCwgTENTX1NUQVJUVVBfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfbGd3X3N0YXJ0dXBfdGhyZWFkLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKLQlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU1RBUlRMQU5fVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfbGd3X3N0YXJ0bGFuX3RocmVhZCwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7Ci0JaWYgKGxjc19kb19zdGFydF90aHJlYWQoY2FyZCwgTENTX1NUT1BMQU5fVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfbGd3X3N0b3BsYW5fdGhyZWFkLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKKwlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKKwkJa2VybmVsX3RocmVhZChsY3NfcmVjb3ZlcnksICh2b2lkICopIGNhcmQsIFNJR0NITEQpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQobGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWtlcm5lbF90aHJlYWQobGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywKKwkJCQkodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKICNlbmRpZgogfQogCkBAIC0xODE2LDE5ICsxNzQ4LDE0IEBACiAJaWYgKGNtZC0+aW5pdGlhdG9yID09IExDU19JTklUSUFUT1JfTEdXKSB7CiAJCXN3aXRjaChjbWQtPmNtZF9jb2RlKSB7CiAJCWNhc2UgTENTX0NNRF9TVEFSVFVQOgotCQkJaWYgKCFsY3Nfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwKLQkJCQkJCSAgICAgIExDU19TVEFSVFVQX1RIUkVBRCkpCi0JCQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKLQkJCWJyZWFrOwogCQljYXNlIExDU19DTURfU1RBUlRMQU46Ci0JCQlpZiAoIWxjc19zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLAotCQkJCQkJICAgICAgTENTX1NUQVJUTEFOX1RIUkVBRCkpCi0JCQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwkJCWxjc19zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKIAkJCWJyZWFrOwogCQljYXNlIExDU19DTURfU1RPUExBTjoKLQkJCWlmICghbGNzX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsCi0JCQkJCQkgICAgICBMQ1NfU1RPUExBTl9USFJFQUQpKQotCQkJCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7CisJCQlQUklOVF9XQVJOKCJTdG9wbGFuIGZvciAlcyBpbml0aWF0ZWQgYnkgTEdXLlxuIiwKKwkJCQkJY2FyZC0+ZGV2LT5uYW1lKTsKKwkJCWlmIChjYXJkLT5kZXYpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJUFJJTlRfSU5GTygiVU5SRUNPR05JWkVEIExHVyBDT01NQU5EXG4iKTsKQEAgLTE5NDQsOCArMTg3MSwxMSBAQAogCiAJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAic3RvcGRldiIpOwogCWNhcmQgICA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGV2LT5wcml2OwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAlkZXYtPmZsYWdzICY9IH5JRkZfVVA7CisJd2FpdF9ldmVudChjYXJkLT53cml0ZS53YWl0X3EsCisJCShjYXJkLT53cml0ZS5zdGF0ZSAhPSBDSF9TVEFURV9SVU5OSU5HKSk7CiAJcmMgPSBsY3Nfc3RvcGNhcmQoY2FyZCk7CiAJaWYgKHJjKQogCQlQUklOVF9FUlIoIlRyeSBpdCBhZ2FpbiFcbiAiKTsKQEAgLTE5NzEsNiArMTkwMSw3IEBACiAKIAl9IGVsc2UgewogCQlkZXYtPmZsYWdzIHw9IElGRl9VUDsKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCWNhcmQtPnN0YXRlID0gREVWX1NUQVRFX1VQOwogCX0KQEAgLTIwNjIsMTAgKzE5OTMsMzEgQEAKIAogREVWSUNFX0FUVFIobGFuY21kX3RpbWVvdXQsIDA2NDQsIGxjc190aW1lb3V0X3Nob3csIGxjc190aW1lb3V0X3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3QKK2xjc19kZXZfcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOworCWNoYXIgKnRtcDsKKwlpbnQgaTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNhcmQtPnN0YXRlICE9IERFVl9TVEFURV9VUCkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7CisJaWYgKGkgPT0gMSkKKwkJbGNzX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHJlY292ZXIsIDAyMDAsIE5VTEwsIGxjc19kZXZfcmVjb3Zlcl9zdG9yZSk7CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogbGNzX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3BvcnRuby5hdHRyLAogCSZkZXZfYXR0cl90eXBlLmF0dHIsCiAJJmRldl9hdHRyX2xhbmNtZF90aW1lb3V0LmF0dHIsCisJJmRldl9hdHRyX3JlY292ZXIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMjEwMiw2ICsyMDU0LDEyIEBACiAJY2N3Z2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gY2FyZDsKIAljY3dnZGV2LT5jZGV2WzBdLT5oYW5kbGVyID0gbGNzX2lycTsKIAljY3dnZGV2LT5jZGV2WzFdLT5oYW5kbGVyID0gbGNzX2lycTsKKwljYXJkLT5nZGV2ID0gY2N3Z2RldjsKKwlJTklUX1dPUksoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlciwKKwkJICAodm9pZCAqKSBsY3Nfc3RhcnRfa2VybmVsX3RocmVhZCwgY2FyZCk7CisJY2FyZC0+dGhyZWFkX3N0YXJ0X21hc2sgPSAwOworCWNhcmQtPnRocmVhZF9hbGxvd2VkX21hc2sgPSAwOworCWNhcmQtPnRocmVhZF9ydW5uaW5nX21hc2sgPSAwOwogICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjIwMyw2ICsyMTYxLDcgQEAKIAlpZiAocmVjb3Zlcl9zdGF0ZSA9PSBERVZfU1RBVEVfUkVDT1ZFUikgewogCQlsY3Nfc2V0X211bHRpY2FzdF9saXN0KGNhcmQtPmRldik7CiAJCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX1VQOworCQluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CiAJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7CiAJfSBlbHNlIHsKQEAgLTIyMzIsNyArMjE5MSw3IEBACiAgKiBsY3Nfc2h1dGRvd25fZGV2aWNlLCBjYWxsZWQgd2hlbiBzZXR0aW5nIHRoZSBncm91cCBkZXZpY2Ugb2ZmbGluZS4KICAqLwogc3RhdGljIGludAotbGNzX3NodXRkb3duX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjY3dnZGV2KQorX19sY3Nfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYsIGludCByZWNvdmVyeV9tb2RlKQogewogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKIAllbnVtIGxjc19kZXZfc3RhdGVzIHJlY292ZXJfc3RhdGU7CkBAIC0yMjQyLDkgKzIyMDEsMTEgQEAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKWNjd2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PREVWOwotCWxjc19zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDApOwotCWlmIChsY3Nfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKHJlY292ZXJ5X21vZGUgPT0gMCkgeworCQlsY3Nfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLCAwKTsKKwkJaWYgKGxjc193YWl0X2Zvcl90aHJlYWRzKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQogCUxDU19EQkZfSEVYKDMsIHNldHVwLCAmY2FyZCwgc2l6ZW9mKHZvaWQqKSk7CiAJcmVjb3Zlcl9zdGF0ZSA9IGNhcmQtPnN0YXRlOwogCkBAIC0yMjU5LDYgKzIyMjAsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbGNzX3NodXRkb3duX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjY3dnZGV2KQoreworCXJldHVybiBfX2xjc19zaHV0ZG93bl9kZXZpY2UoY2N3Z2RldiwgMCk7Cit9CisKKy8qKgorICogZHJpdmUgbGNzIHJlY292ZXJ5IGFmdGVyIHN0YXJ0dXAgYW5kIHN0YXJ0bGFuIGluaXRpYXRlZCBieSBMYW4gR2F0ZXdheQorICovCitzdGF0aWMgaW50CitsY3NfcmVjb3Zlcnkodm9pZCAqcHRyKQoreworCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OworICAgICAgICBpbnQgcmM7CisKKwljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBwdHI7CisJZGFlbW9uaXplKCJsY3NfcmVjb3ZlciIpOworCisJTENTX0RCRl9URVhUKDQsIHRyYWNlLCAicmVjb3ZlcjEiKTsKKwlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQorCQlyZXR1cm4gMDsKKwlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJyZWNvdmVyMiIpOworCWdkZXYgPSBjYXJkLT5nZGV2OworCVBSSU5UX1dBUk4oIlJlY292ZXJ5IG9mIGRldmljZSAlcyBzdGFydGVkLi4uXG4iLCBnZGV2LT5kZXYuYnVzX2lkKTsKKwlyYyA9IF9fbGNzX3NodXRkb3duX2RldmljZShnZGV2LCAxKTsKKwlyYyA9IGxjc19uZXdfZGV2aWNlKGdkZXYpOworCWlmICghcmMpCisJCVBSSU5UX0lORk8oIkRldmljZSAlcyBzdWNjZXNzZnVsbHkgcmVjb3ZlcmVkIVxuIiwKKwkJCQljYXJkLT5kZXYtPm5hbWUpOworCWVsc2UKKwkJUFJJTlRfSU5GTygiRGV2aWNlICVzIGNvdWxkIG5vdCBiZSByZWNvdmVyZWQhXG4iLAorCQkJCWNhcmQtPmRldi0+bmFtZSk7CisJbGNzX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBsY3NfcmVtb3ZlX2RldmljZSwgZnJlZSBidWZmZXJzIGFuZCBjYXJkCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmggYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5oCmluZGV4IDJmYWQ1ZTQuLjkzMTQzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuaApAQCAtNzMsMTMgKzczLDE3IEBACiAvKioKICAqIExDUyBzZW5zZSBieXRlIGRlZmluaXRpb25zCiAgKi8KKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMCAJCTAKKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMSAJCTEKKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMiAJCTIKKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMyAJCTMKICNkZWZpbmUgTENTX1NFTlNFX0lOVEVSRkFDRV9ESVNDT05ORUNUCTB4MDEKICNkZWZpbmUgTENTX1NFTlNFX0VRVUlQTUVOVF9DSEVDSwkweDEwCiAjZGVmaW5lIExDU19TRU5TRV9CVVNfT1VUX0NIRUNLCQkweDIwCiAjZGVmaW5lIExDU19TRU5TRV9JTlRFUlZFTlRJT05fUkVRVUlSRUQgMHg0MAogI2RlZmluZSBMQ1NfU0VOU0VfQ01EX1JFSkVDVAkJMHg4MAotI2RlZmluZSBMQ1NfU0VOU0VfUkVTRVRUSU5HX0VWRU5UCTB4MDA4MAotI2RlZmluZSBMQ1NfU0VOU0VfREVWSUNFX09OTElORQkJMHgwMDIwCisjZGVmaW5lIExDU19TRU5TRV9SRVNFVFRJTkdfRVZFTlQJMHg4MAorI2RlZmluZSBMQ1NfU0VOU0VfREVWSUNFX09OTElORQkJMHgyMAogCiAvKioKICAqIExDUyBwYWNrZXQgdHlwZSBkZWZpbml0aW9ucwpAQCAtMTUyLDEwICsxNTYsOSBAQAogCiBlbnVtIGxjc190aHJlYWRzIHsKIAlMQ1NfU0VUX01DX1RIUkVBRCAJPSAxLAotCUxDU19TVEFSVExBTl9USFJFQUQJPSAyLAotCUxDU19TVE9QTEFOX1RIUkVBRAk9IDQsCi0JTENTX1NUQVJUVVBfVEhSRUFECT0gOCwKKwlMQ1NfUkVDT1ZFUllfVEhSRUFEIAk9IDIsCiB9OworCiAvKioKICAqIExDUyBzdHJ1Y3QgZGVjbGFyYXRpb25zCiAgKi8KQEAgLTI4Niw2ICsyODksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIHNob3J0ICgqbGFuX3R5cGVfdHJhbnMpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBsY3NfY2hhbm5lbCByZWFkOwogCXN0cnVjdCBsY3NfY2hhbm5lbCB3cml0ZTsKIAlzdHJ1Y3QgbGNzX2J1ZmZlciAqdHhfYnVmZmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCAyNjBhOTNjLi5iNDUyY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMzAsNyArMzAsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCi0MCisKICN1bmRlZiBERUJVRwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgKCIoQykgMjAwMSBJQk0gQ29ycG9yYXRpb24gYnkgRnJpdHogRWxmZXJ0IChmZWxmZXJ0QG1pbGxlbnV4LmNvbSkiKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIkxpbnV4IGZvciBTLzM5MCBJVUNWIG5ldHdvcmsgZHJpdmVyIik7CiAKLQwKKwogI2RlZmluZSBQUklOVEtfSEVBREVSICIgaXVjdjogIiAgICAgICAvKiBmb3IgZGVidWdnaW5nICovCiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBuZXRpdWN2X2RyaXZlciA9IHsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCSpwID0gJ1wwJzsKIAlyZXR1cm4gdG1wOwogfQotDAorCiAvKioKICAqIFN0YXRlcyBvZiB0aGUgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KICAqLwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJIkNvbm5lY3Rpb24gdXAiLAogCSJDb25uZWN0aW9uIGRvd24iLAogfTsKLQwKKwogLyoqCiAgKiBFdmVudHMgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGVtYWNoaW5lCiAgKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogCSJDb25uZWN0IGVycm9yIiwKIH07CiAKLQwKKwogLyoqCiAgKiBEZWJ1ZyBGYWNpbGl0eSBTdHVmZgogICovCkBAIC01MTYsNyArNTE2LDcgQEAKIGZzbV9hY3Rpb25fbm9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogfQotDAorCiAvKioKICAqIEFjdGlvbnMgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGVtYWNoaW5lCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05OTMsNyArOTkzLDcgQEAKIAogc3RhdGljIGNvbnN0IGludCBDT05OX0ZTTV9MRU4gPSBzaXplb2YoY29ubl9mc20pIC8gc2l6ZW9mKGZzbV9ub2RlKTsKIAotDAorCiAvKioKICAqIEFjdGlvbnMgZm9yIGludGVyZmFjZSAtIHN0YXRlbWFjaGluZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExODIsNyArMTE4Miw3IEBACiAKIAkJZnNtX25ld3N0YXRlKGNvbm4tPmZzbSwgQ09OTl9TVEFURV9UWCk7CiAJCWNvbm4tPnByb2Yuc2VuZF9zdGFtcCA9IHh0aW1lOwotCQkKKwogCQlyYyA9IGl1Y3Zfc2VuZChjb25uLT5wYXRoaWQsIE5VTEwsIDAsIDAsIDEgLyogc2luZ2xlX2ZsYWcgKi8sCiAJCQkwLCBuc2tiLT5kYXRhLCBuc2tiLT5sZW4pOwogCQkJICAgICAgIC8qIFNodXQgdXAsIGdjYyEgbnNrYiBpcyBhbHdheXMgYmVsb3cgMkcuICovCkBAIC0xMjIwLDcgKzEyMjAsNyBAQAogCiAJcmV0dXJuIHJjOwogfQotDAorCiAvKioKICAqIEludGVyZmFjZSBBUEkgZm9yIHVwcGVyIG5ldHdvcmsgbGF5ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogCiAJLyoqCiAJICogSWYgY29ubmVjdGlvbiBpcyBub3QgcnVubmluZywgdHJ5IHRvIHJlc3RhcnQgaXQKLQkgKiBhbmQgdGhyb3cgYXdheSBwYWNrZXQuIAorCSAqIGFuZCB0aHJvdyBhd2F5IHBhY2tldC4KIAkgKi8KIAlpZiAoZnNtX2dldHN0YXRlKHByaXZwdHItPmZzbSkgIT0gREVWX1NUQVRFX1JVTk5JTkcpIHsKIAkJZnNtX2V2ZW50KHByaXZwdHItPmZzbSwgREVWX0VWRU5UX1NUQVJULCBkZXYpOwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKIG1heGNxX3dyaXRlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKLQkKKwogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi5tYXhjcXVldWUgPSAwOwogCXJldHVybiBjb3VudDsKQEAgLTE1NTksNyArMTU1OSw3IEBACiBzZG9pb193cml0ZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JCisKIAlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwogCXByaXYtPmNvbm4tPnByb2YuZG9pb3Nfc2luZ2xlID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNTgwLDcgKzE1ODAsNyBAQAogbWRvaW9fd3JpdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAlwcml2LT5jb25uLT5wcm9mLmRvaW9zX211bHRpID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQAogdHhsZW5fd3JpdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKIAlwcml2LT5jb25uLT5wcm9mLnR4bGVuID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogdHh0aW1lX3dyaXRlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKLQkKKwogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi50eF90aW1lID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0yMDAwLDcgKzIwMDAsNyBAQAogCX0KIAogCVBSSU5UX0lORk8oIiVzOiAnJXMnXG4iLCBkZXYtPm5hbWUsIG5ldGl1Y3ZfcHJpbnRuYW1lKHVzZXJuYW1lKSk7Ci0JCisKIAlyZXR1cm4gY291bnQ7CiAKIG91dF9mcmVlX25kZXY6CkBAIC0yMDk5LDcgKzIwOTksNyBAQAogbmV0aXVjdl9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQkKKwogCXJldCA9IGl1Y3ZfcmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CiAJaWYgKHJldCkgewogCQlQUklOVF9XQVJOKCJuZXRpdWN2X2luaXQgZmFpbGVkLCAiCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQotCQorCiBtb2R1bGVfaW5pdChuZXRpdWN2X2luaXQpOwogbW9kdWxlX2V4aXQobmV0aXVjdl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKaW5kZXggNGRmMGZjZC4uNjE5ZjRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKQEAgLTM3Niw3ICszNzYsNyBAQAogCV9fdTggcmVzZXJ2ZWQzWzE4XTsKIAlfX3UzMiBjY2lkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0JCQkJCSAgICAKKwogc3RydWN0IHFldGhfaGRyIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBxZXRoX2hkcl9sYXllcjIgbDI7CkBAIC04MjUsNyArODI1LDcgQEAKIAlpbnQgdXNlX2hhcmRfc3RvcDsKIAlpbnQgKCpvcmlnX2hhcmRfaGVhZGVyKShzdHJ1Y3Qgc2tfYnVmZiAqLHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCQkJdW5zaWduZWQgc2hvcnQsdm9pZCAqLHZvaWQgKix1bnNpZ25lZCk7Ci0Jc3RydWN0IHFldGhfb3NuX2luZm8gb3NuX2luZm87IAorCXN0cnVjdCBxZXRoX29zbl9pbmZvIG9zbl9pbmZvOwogfTsKIAogc3RydWN0IHFldGhfY2FyZF9saXN0X3N0cnVjdCB7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAkJcmV0dXJuIDA7CiAJc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoJCisJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CiAJCXJldHVybiBJRkZfTk9BUlA7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogCWRlZmF1bHQ6CkBAIC05ODEsNyArOTgxLDcgQEAKIHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoaW50IGNhcmR0eXBlKQogewogCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQkJCisKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX1VOS05PV046CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0FFOgogCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgpAQCAtMTA5Nyw5ICsxMDk3LDkgQEAKIAlpbnQgY291bnQgPSAwLCByYyA9IDA7CiAJaW50IGluWzRdOwogCi0JcmMgPSBzc2NhbmYoYnVmLCAiJWQuJWQuJWQuJWQlbiIsIAorCXJjID0gc3NjYW5mKGJ1ZiwgIiVkLiVkLiVkLiVkJW4iLAogCQkgICAgJmluWzBdLCAmaW5bMV0sICZpblsyXSwgJmluWzNdLCAmY291bnQpOwotCWlmIChyYyAhPSA0ICB8fCBjb3VudCkgCisJaWYgKHJjICE9IDQgIHx8IGNvdW50PD0wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA0OyBjb3VudCsrKSB7CiAJCWlmIChpbltjb3VudF0gPiAyNTUpCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCiAJY250ID0gb3V0ID0gZm91bmQgPSBzYXZlX2NudCA9IG51bTIgPSAwOwogICAgICAgICBlbmQgPSBzdGFydCA9IChjaGFyICopIGJ1ZjsKLQlpbiA9IChfX3UxNiAqKSBhZGRyOwkKKwlpbiA9IChfX3UxNiAqKSBhZGRyOwogCW1lbXNldChpbiwgMCwgMTYpOwogICAgICAgICB3aGlsZSAoZW5kKSB7CiAgICAgICAgICAgICAgICAgZW5kID0gc3RyY2hyKGVuZCwnOicpOwpAQCAtMTEzOSw3ICsxMTM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IChjaGFyICopYnVmICsgKHN0cmxlbihidWYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoZW5kIC0gc3RhcnQpKSB7IAorICAgICAgICAgICAgICAgIGlmICgoZW5kIC0gc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQobnVtLCAwLCA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShudW0sIHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAJCQlpZiAoIXFldGhfaXN4ZGlnaXQobnVtKSkKQEAgLTEyNDEsNSArMTI0MSw1IEBACiAKIGV4dGVybiB2b2lkCiBxZXRoX29zbl9kZXJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICopOwotCQkKKwogI2VuZGlmIC8qIF9fUUVUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCmluZGV4IDQ0ZTIyNmYuLjBiYWI2MGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIHFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlICpyZWY7Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiZWRkcHJjdHgiKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmJ1Zi0+Y3R4X2xpc3QpKXsKIAkJcmVmID0gbGlzdF9lbnRyeShidWYtPmN0eF9saXN0Lm5leHQsCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJCQkJICAgImJ1ZmZlciFcbiIpOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQl9CQkKKwkJfQogCQkvKiBjaGVjayBpZiB0aGUgd2hvbGUgbmV4dCBza2IgZml0cyBpbnRvIGN1cnJlbnQgYnVmZmVyICovCiAJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCiAJCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCSAqIGFuZCBpbmNyZW1lbnQgY3R4J3MgcmVmY250ICovCiAJCQltdXN0X3JlZmNudCA9IDE7CiAJCQljb250aW51ZTsKLQkJfQkKKwkJfQogCQlpZiAobXVzdF9yZWZjbnQpewogCQkJbXVzdF9yZWZjbnQgPSAwOwogCQkJaWYgKHFldGhfZWRkcF9idWZfcmVmX2NvbnRleHQoYnVmLCBjdHgpKXsKQEAgLTI2Niw3ICsyNjYsNyBAQAogCWludCBsZWZ0X2luX2ZyYWc7CiAJaW50IGNvcHlfbGVuOwogCXU4ICpzcmM7Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNkdGMiKTsKIAlpZiAoc2tiX3NoaW5mbyhlZGRwLT5za2IpLT5ucl9mcmFncyA9PSAwKSB7CiAJCW1lbWNweShkc3QsIGVkZHAtPnNrYi0+ZGF0YSArIGVkZHAtPnNrYl9vZmZzZXQsIGxlbik7CkBAIC00MDgsNyArNDA4LDcgQEAKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoOwogCWludCBkYXRhX2xlbjsKIAl1MzIgaGNzdW07Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGZ0Y3AiKTsKIAllZGRwLT5za2Jfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBlZGRwLT5uaGwgKyBlZGRwLT50aGw7CiAgICAgICAgaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewpAQCAtNDY1LDEzICs0NjUsMTMgQEAKIAkJZWRkcC0+dGgudGNwLmguc2VxICs9IGRhdGFfbGVuOwogCX0KIH0KLQkJCSAgIAorCiBzdGF0aWMgaW5saW5lIGludAogcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCiAJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIpCiB7CiAJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwID0gTlVMTDsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwZmljeCIpOwogCS8qIGNyZWF0ZSBvdXIgc2VnbWVudGF0aW9uIGhlYWRlcnMgYW5kIGNvcHkgb3JpZ2luYWwgaGVhZGVycyAqLwogCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQKQpAQCAtNTEyLDcgKzUxMiw3IEBACiAJCQkgaW50IGhkcl9sZW4pCiB7CiAJaW50IHNrYnNfcGVyX3BhZ2U7Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNhbnAiKTsKIAkvKiBjYW4gd2UgcHV0IG11bHRpcGxlIHNrYnMgaW4gb25lIHBhZ2U/ICovCiAJc2tic19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIChza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplICsgaGRyX2xlbik7CkBAIC01ODgsNyArNTg4LDcgQEAKIAkJCSAgICAgc3RydWN0IHFldGhfaGRyICpxaGRyKQogewogCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJjcmVkZHBjdCIpOwogCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQKQogCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhjYXJkLCBza2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZnMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9mcy5oCmluZGV4IGU0MjJiNDEuLjYxZmFmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9mcy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9mcy5oCkBAIC00Miw3ICs0Miw3IEBACiAKIGV4dGVybiB2b2lkCiBxZXRoX3JlbW92ZV9kZXZpY2VfYXR0cmlidXRlc19vc24oc3RydWN0IGRldmljZSAqZGV2KTsKLQkJICAgIAorCiBleHRlcm4gaW50CiBxZXRoX2NyZWF0ZV9kcml2ZXJfYXR0cmlidXRlcyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKaW5kZXggYjNjNmU3OS4uOWU2NzFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCkBAIC01MTMsNyArNTEzLDcgQEAKIAogCVFFVEhfREJGX1RFWFQoc2V0dXAsIDMsICJzZXRvZmZsIik7CiAJUUVUSF9EQkZfSEVYKHNldHVwLCAzLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwotCQorCiAJaWYgKGNhcmQtPmRldiAmJiBuZXRpZl9jYXJyaWVyX29rKGNhcmQtPmRldikpCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGNhcmQtPmRldik7CiAJcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7CkBAIC02MDQsMTMgKzYwNCwxMyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRkciwgJmNhcmQtPmlwX2xpc3QsIGVudHJ5KSB7CiAJCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewogCQkJaWYgKChhZGRyLT50eXBlID09IHRvZG8tPnR5cGUpICYmCi0JCQkgICAgKG1lbWNtcCgmYWRkci0+bWFjLCAmdG9kby0+bWFjLCAKKwkJCSAgICAobWVtY21wKCZhZGRyLT5tYWMsICZ0b2RvLT5tYWMsCiAJCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljb250aW51ZTsKLQkJfSAKKwkJfQogCQlpZiAoKGFkZHItPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICYmCiAJCSAgICAodG9kby0+cHJvdG8gICAgID09IFFFVEhfUFJPVF9JUFY0KSAgJiYKIAkJICAgIChhZGRyLT50eXBlICAgICAgPT0gdG9kby0+dHlwZSkgICAgICAmJgpAQCAtNjk0LDEzICs2OTQsMTMgQEAKIAkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CiAJCQlpZiAoKHRtcC0+dHlwZQk9PSBhZGRyLT50eXBlKQkmJgogCQkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICYmCi0JCQkgICAgKG1lbWNtcCgmdG1wLT5tYWMsICZhZGRyLT5tYWMsIAorCQkJICAgIChtZW1jbXAoJnRtcC0+bWFjLCAmYWRkci0+bWFjLAogCQkJCSAgICBPU0FfQUREUl9MRU4pID09IDApKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQogCQkJY29udGludWU7Ci0JCX0gCSAKKwkJfQogCQlpZiAoKHRtcC0+cHJvdG8gICAgICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgJiYKIAkJICAgIChhZGRyLT5wcm90byAgICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICYmCiAJCSAgICAodG1wLT50eXBlICAgICAgICAgPT0gYWRkci0+dHlwZSkgICAgICAgICAmJgpAQCAtMTE3Myw3ICsxMTczLDcgQEAKIAkJCQkJICAgImR1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucyFcbiIpOwogCQkJCWNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9IDE7CiAJCQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDA7Ci0JCQl9IAorCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaSsrOwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIiVzIiwgZ2Rldi0+ZGV2LmJ1c19pZCk7Ci0JCisKIAljYXJkID0gcWV0aF9hbGxvY19jYXJkKCk7CiAJaWYgKCFjYXJkKSB7CiAJCXB1dF9kZXZpY2UoZGV2KTsKQEAgLTEyMjAsNyArMTIyMCw3IEBACiAJCXB1dF9kZXZpY2UoZGV2KTsKIAkJcWV0aF9mcmVlX2NhcmQoY2FyZCk7CiAJCXJldHVybiByYzsKLQl9CQkJICAgIAorCX0KIAlpZiAoKHJjID0gcWV0aF9zZXR1cF9jYXJkKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMmVyciVkIiwgcmMpOwogCQlwdXRfZGV2aWNlKGRldik7CkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCSAgICAgICAmY2FyZC0+c2Vxbm8ucGR1X2hkcl9hY2ssIFFFVEhfU0VRX05PX0xFTkdUSCk7CiAJUUVUSF9EQkZfSEVYKGNvbnRyb2wsIDIsIGlvYi0+ZGF0YSwgUUVUSF9EQkZfQ09OVFJPTF9MRU4pOwogfQotCQkJCQkJICAgIAorCiBzdGF0aWMgaW50CiBxZXRoX3NlbmRfY29udHJvbF9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBsZW4sCiAJCSAgICAgICBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCkBAIC0xOTM3LDcgKzE5MzcsNyBAQAogCQl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOwogCX0KIAlyZXR1cm4gcmM7Ci19CQkJCQkKK30KIAogc3RhdGljIGlubGluZSB2b2lkCiBxZXRoX3ByZXBhcmVfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCkBAIC0xOTY2LDcgKzE5NjYsNyBAQAogCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1BEVTMoaW9iLT5kYXRhKSwgJnMyLCAyKTsKIAlyZXR1cm4gcWV0aF9vc25fc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgczEsIGlvYik7CiB9Ci0JCQkJCQkJICAgIAorCiBzdGF0aWMgaW50CiBxZXRoX3NlbmRfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCiAJCSAgaW50ICgqcmVwbHlfY2IpCkBAIC0yNTc5LDcgKzI1NzksNyBAQAogCQlza2ItPmRldiA9IGNhcmQtPmRldjsKIAkJaWYgKGhkci0+aGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKQogCQkJdmxhbl90YWcgPSBxZXRoX2xheWVyMl9yZWJ1aWxkX3NrYihjYXJkLCBza2IsIGhkcik7Ci0JCWVsc2UgaWYgKGhkci0+aGRyLmwzLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIzKSAgICAgCisJCWVsc2UgaWYgKGhkci0+aGRyLmwzLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIzKQogCQkJcWV0aF9yZWJ1aWxkX3NrYihjYXJkLCBza2IsIGhkcik7CiAJCWVsc2UgeyAvKmluIGNhc2Ugb2YgT1NOKi8KIAkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwpAQCAtMjc2Myw3ICsyNzYzLDcgQEAKIAkJaW5kZXggPSBpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIAkJYnVmZmVyID0gJmNhcmQtPnFkaW8uaW5fcS0+YnVmc1tpbmRleF07CiAJCWlmICghKChzdGF0dXMgJiBRRElPX1NUQVRVU19MT09LX0ZPUl9FUlJPUikgJiYKLQkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwgCisJCSAgICAgIHFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsCiAJCQkJCSAgICAgcWRpb19lcnIsIHNpZ2FfZXJyLCJxaW5lcnIiKSkpCiAJCQlxZXRoX3Byb2Nlc3NfaW5ib3VuZF9idWZmZXIoY2FyZCwgYnVmZmVyLCBpbmRleCk7CiAJCS8qIGNsZWFyIGJ1ZmZlciBhbmQgZ2l2ZSBiYWNrIHRvIGhhcmR3YXJlICovCkBAIC0zMTg3LDcgKzMxODcsNyBAQAogCWlmIChjYXJkLT5xZGlvLnN0YXRlID09IFFFVEhfUURJT19BTExPQ0FURUQpCiAJCXJldHVybiAwOwogCi0JY2FyZC0+cWRpby5pbl9xID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfcWRpb19xKSwgCisJY2FyZC0+cWRpby5pbl9xID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfcWRpb19xKSwKIAkJCQkgIEdGUF9LRVJORUx8R0ZQX0RNQSk7CiAJaWYgKCFjYXJkLT5xZGlvLmluX3EpCiAJCXJldHVybiAtIEVOT01FTTsKQEAgLTM0NzYsNyArMzQ3Niw3IEBACiAJcmMzID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPmRhdGEpOwogCWlmIChyYzEpCiAJCXJldHVybiByYzE7Ci0JaWYgKHJjMikgCisJaWYgKHJjMikKIAkJcmV0dXJuIHJjMjsKIAlyZXR1cm4gcmMzOwogfQpAQCAtMzQ5MSw3ICszNDkxLDcgQEAKIAlyYzMgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPmRhdGEpOwogCWlmIChyYzEpCiAJCXJldHVybiByYzE7Ci0JaWYgKHJjMikgCisJaWYgKHJjMikKIAkJcmV0dXJuIHJjMjsKIAlyZXR1cm4gcmMzOwogfQpAQCAtMzc5OCwxMCArMzc5OCwxMCBAQAogCQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIm5vbWFjYWRyIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQotCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX1VQOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJY2FyZC0+ZGF0YS5zdGF0ZSA9IENIX1NUQVRFX1VQOwogCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9VUDsKKwljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9VUDsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCiAJaWYgKCFjYXJkLT5sYW5fb25saW5lICYmIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKQEAgLTM4MTcsNyArMzgxNyw3IEBACiAKIAljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwogCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAljYXJkLT5kZXYtPmZsYWdzICY9IH5JRkZfVVA7CiAJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCiAJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7CkBAIC0zOTU4LDcgKzM5NTgsNyBAQAogI2VuZGlmCiAJKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHIgKikKIAkJcWV0aF9wdXNoX3NrYihjYXJkLCBza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQlpZiAoaGRyID09IE5VTEwpCisJaWYgKCpoZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIDA7CiB9CkBAIC00MDk4LDcgKzQwOTgsNyBAQAogCQl9CiAJfSBlbHNlIHsgLyogcGFzc3Rocm91Z2ggKi8KICAgICAgICAgICAgICAgICBpZigoc2tiLT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDJfVFIpICYmCi0JCSAgICAhbWVtY21wKHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgCisJCSAgICAhbWVtY21wKHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsKIAkJICAgIHNpemVvZihfX3UxNiksIHNrYi0+ZGV2LT5icm9hZGNhc3QsIDYpKSB7CiAJCQloZHItPmhkci5sMy5mbGFncyA9IFFFVEhfQ0FTVF9CUk9BRENBU1QgfAogCQkJCQkJUUVUSF9IRFJfUEFTU1RIUlU7CkBAIC00Mzg1LDcgKzQzODUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLCAKK3FldGhfZ2V0X2VsZW1lbnRzX25vKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHZvaWQgKmhkciwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZWxlbXMpCiB7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CkBAIC00NDE2LDYgKzQ0MTYsOCBAQAogCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87CiAJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOworCXVuc2lnbmVkIHNob3J0IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl1bnNpZ25lZCBzaG9ydCB0c29fc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemU7CiAJaW50IHJjOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgInNlbmRwa3QiKTsKQEAgLTQ0NDEsNyArNDQ0Myw3IEBACiAJCXJldHVybiAwOwogCX0KIAljYXN0X3R5cGUgPSBxZXRoX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKLQlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSAmJiAKKwlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSAmJgogCSAgICAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSAwKSl7CiAJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC00NDYzLDcgKzQ0NjUsNyBAQAogCQkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJfSAKKwkJfQogCQllbGVtZW50c19uZWVkZWQrKzsKIAl9IGVsc2UgewogCQlpZiAoKHJjID0gcWV0aF9wcmVwYXJlX3NrYihjYXJkLCAmc2tiLCAmaGRyLCBpcHYpKSkgewpAQCAtNDQ5OCwxNiArNDUwMCwxNiBAQAogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOwogI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKLQkJaWYgKHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUgJiYKKwkJaWYgKHRzb19zaXplICYmCiAJCSAgICEobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pKSB7Ci0JCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfY250Kys7CiAJCX0KLSAJCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4gMCl7CisgCQlpZiAobnJfZnJhZ3MgPiAwKXsKIAkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7CiAJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwogCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9Ci0JCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CisJCQkJbnJfZnJhZ3MgKyAxOwogCQl9CiAjZW5kaWYgLyogQ09ORklHX1FFVEhfUEVSRl9TVEFUUyAqLwogCX0KQEAgLTUzNzMsNyArNTM3NSw3IEBACiAgICAgICAgIGNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CiAgICAgICAgIGlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewogCQlQUklOVF9FUlIoIkVycm9yIGluIHByb2Nlc3NpbmcgVkxBTiAlaSBvbiAlczogMHgleC4gIgotCQkJICAiQ29udGludWluZ1xuIixjbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkLCAKKwkJCSAgIkNvbnRpbnVpbmdcbiIsY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCwKIAkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyVkwlNHgiLCBjbWQtPmhkci5jb21tYW5kKTsKIAkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwpAQCAtNTM5Myw3ICs1Mzk1LDcgQEAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKICAgICAgICAgY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCA9IGk7Ci0JcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgCisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwKIAkJCQkgcWV0aF9sYXllcjJfc2VuZF9zZXRkZWx2bGFuX2NiLCBOVUxMKTsKIH0KIApAQCAtNTQ1Nyw3ICs1NDU5LDcgQEAKICAqIEV4YW1pbmUgaGFyZHdhcmUgcmVzcG9uc2UgdG8gU0VUX1BST01JU0NfTU9ERQogICovCiBzdGF0aWMgaW50Ci1xZXRoX3NldGFkcF9wcm9taXNjX21vZGVfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgCitxZXRoX3NldGFkcF9wcm9taXNjX21vZGVfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKIAkJCSAgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCiAJCQkgICAgdW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtNTQ2OCwxMCArNTQ3MCwxMCBAQAogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlzZXRwYXJtcyA9ICYoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcyk7Ci0JCisKICAgICAgICAgcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihjYXJkLCByZXBseSwgKHVuc2lnbmVkIGxvbmcpY21kKTsKLQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsgCi0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsInBybXJjJTIuMngiLGNtZC0+aGRyLnJldHVybl9jb2RlKTsJCisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7CisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsInBybXJjJTIuMngiLGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJc2V0cGFybXMtPmRhdGEubW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOwogCX0KIAljYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9IHNldHBhcm1zLT5kYXRhLm1vZGU7CkBAIC01NTE3LDcgKzU1MTksNyBAQAogCiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCiAJCXJldHVybiA7Ci0JIAorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMywgInNldG11bHRpIik7CiAJcWV0aF9kZWxldGVfbWNfYWRkcmVzc2VzKGNhcmQpOwogCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewpAQCAtNTU3NSw3ICs1NTc3LDcgQEAKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAlpbnQgcmM7Ci0JCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAib3Nuc2RtYyIpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU2NTQsNyArNTY1Niw3IEBACiAJY2FyZC0+b3NuX2luZm8uZGF0YV9jYiA9IE5VTEw7CiAJcmV0dXJuOwogfQotCQkJCQkgICAKKwogc3RhdGljIHZvaWQKIHFldGhfZGVsZXRlX21jX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewpAQCAtNTgxOCw3ICs1ODIwLDcgQEAKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJjaGttY3Y2Iik7Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpIAorCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQogCQlyZXR1cm4gOwogCWluNl9kZXYgPSBpbjZfZGV2X2dldChjYXJkLT5kZXYpOwogCWlmIChpbjZfZGV2ID09IE5VTEwpCkBAIC02MzU5LDEyICs2MzYxLDkgQEAKIAlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBxZXRoX3ZsYW5fcnhfa2lsbF92aWQ7CiAJZGV2LT52bGFuX3J4X2FkZF92aWQgPSBxZXRoX3ZsYW5fcnhfYWRkX3ZpZDsKICNlbmRpZgotCWRldi0+aGFyZF9oZWFkZXIgPSBjYXJkLT5vcmlnX2hhcmRfaGVhZGVyOwogCWlmIChxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCkgJiBJRkZfTk9BUlApIHsKIAkJZGV2LT5yZWJ1aWxkX2hlYWRlciA9IE5VTEw7CiAJCWRldi0+aGFyZF9oZWFkZXIgPSBOVUxMOwotCQlpZiAoY2FyZC0+b3B0aW9ucy5mYWtlX2xsKQotCQkJZGV2LT5oYXJkX2hlYWRlciA9IHFldGhfZmFrZV9oZWFkZXI7CiAJCWRldi0+aGVhZGVyX2NhY2hlX3VwZGF0ZSA9IE5VTEw7CiAJCWRldi0+aGFyZF9oZWFkZXJfY2FjaGUgPSBOVUxMOwogCX0KQEAgLTYzNzMsNiArNjM3Miw5IEBACiAJaWYgKCEoY2FyZC0+aW5mby51bmlxdWVfaWQgJiBVTklRVUVfSURfTk9UX0JZX0NBUkQpKQogCQljYXJkLT5kZXYtPmRldl9pZCA9IGNhcmQtPmluZm8udW5pcXVlX2lkICYgMHhmZmZmOwogI2VuZGlmCisJaWYgKGNhcmQtPm9wdGlvbnMuZmFrZV9sbCAmJgorCQkocWV0aF9nZXRfbmV0ZGV2X2ZsYWdzKGNhcmQpICYgSUZGX05PQVJQKSkKKwkJCWRldi0+aGFyZF9oZWFkZXIgPSBxZXRoX2Zha2VfaGVhZGVyOwogCWRldi0+aGFyZF9oZWFkZXJfcGFyc2UgPSBOVUxMOwogCWRldi0+c2V0X21hY19hZGRyZXNzID0gcWV0aF9sYXllcjJfc2V0X21hY19hZGRyZXNzOwogCWRldi0+ZmxhZ3MgfD0gcWV0aF9nZXRfbmV0ZGV2X2ZsYWdzKGNhcmQpOwpAQCAtNjQ3Nyw2ICs2NDc5LDkgQEAKIAkvKm5ldHdvcmsgZGV2aWNlIHdpbGwgYmUgcmVjb3ZlcmVkKi8KIAlpZiAoY2FyZC0+ZGV2KSB7CiAJCWNhcmQtPmRldi0+aGFyZF9oZWFkZXIgPSBjYXJkLT5vcmlnX2hhcmRfaGVhZGVyOworCQlpZiAoY2FyZC0+b3B0aW9ucy5mYWtlX2xsICYmCisJCSAgICAocWV0aF9nZXRfbmV0ZGV2X2ZsYWdzKGNhcmQpICYgSUZGX05PQVJQKSkKKwkJCWNhcmQtPmRldi0+aGFyZF9oZWFkZXIgPSBxZXRoX2Zha2VfaGVhZGVyOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogYXQgZmlyc3Qgc2V0X29ubGluZSBhbGxvY2F0ZSBuZXRkZXYgKi8KQEAgLTY1ODQsNyArNjU4OSw3IEBACiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCWlmICghY2FyZC0+b3B0aW9ucy5sYXllcjIgfHwgY2FyZC0+aW5mby5ndWVzdGxhbiB8fAotCSAgICAhKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVBRCkpIHsJCisJICAgICEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUFEKSkgewogCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKIAkJICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKIAkJICAgICAgIE9TQV9BRERSX0xFTik7CkBAIC03MDMxLDE0ICs3MDM2LDEyIEBACiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDMsInNvZnRpcHY2Iik7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CiAJcmMgPSBxZXRoX3NlbmRfc3RhcnRsYW4oY2FyZCwgUUVUSF9QUk9UX0lQVjYpOwogCWlmIChyYykgewogCQlQUklOVF9FUlIoIklQdjYgc3RhcnRsYW4gZmFpbGVkIG9uICVzXG4iLAogCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKIAkJcmV0dXJuIHJjOwogCX0KLQluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7CiAJcmMgPSBxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLFFFVEhfUFJPVF9JUFY2KTsKIAlpZiAocmMpIHsKIAkJUFJJTlRfRVJSKCJJUHY2IHF1ZXJ5IGlwYXNzaXN0IGZhaWxlZCBvbiAlc1xuIiwKQEAgLTczNTIsNyArNzM1NSw4IEBACiAJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IHR5cGU7CiAJCXJldHVybiAwOwogCX0KLQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCisJCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKIAljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwogCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7CiAJY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKQEAgLTczNzQsNyArNzM3OCw4IEBACiAJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cpOwogCQlicmVhazsKIAl9Ci0JbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOworCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQorCQluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC03NDI3LDcgKzc0MzIsNyBAQAogCWlmICgocmMgPSBxZXRoX3NldHJvdXRpbmdfdjYoY2FyZCkpKQogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjVlcnIlZCIsIHJjKTsKIG91dDoKLQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CisJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC03NTY3LDcgKzc1NzIsNyBAQAogCWlmIChjYXJkLT5yZWFkLnN0YXRlID09IENIX1NUQVRFX1VQICYmCiAJICAgIGNhcmQtPndyaXRlLnN0YXRlID09IENIX1NUQVRFX1VQICYmCiAJICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKSkgewotCQlpZiAocmVjb3ZlcnlfbW9kZSAmJiAKKwkJaWYgKHJlY292ZXJ5X21vZGUgJiYKIAkJICAgIGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKIAkJCXFldGhfc3RvcChjYXJkLT5kZXYpOwogCQl9IGVsc2UgewpAQCAtNzczNiwxMCArNzc0MSw4IEBACiBxZXRoX3JlZ2lzdGVyX25ldGRldihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewogCVFFVEhfREJGX1RFWFQoc2V0dXAsIDMsICJyZWduZXRkIik7Ci0JaWYgKGNhcmQtPmRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19VTklOSVRJQUxJWkVEKSB7Ci0JCXFldGhfbmV0ZGV2X2luaXQoY2FyZC0+ZGV2KTsKKwlpZiAoY2FyZC0+ZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1VOSU5JVElBTElaRUQpCiAJCXJldHVybiAwOwotCX0KIAkvKiBzeXNmcyBtYWdpYyAqLwogCVNFVF9ORVRERVZfREVWKGNhcmQtPmRldiwgJmNhcmQtPmdkZXYtPmRldik7CiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihjYXJkLT5kZXYpOwpAQCAtNzc1MCw3ICs3NzUzLDcgQEAKIHsKIAlRRVRIX0RCRl9URVhUKHNldHVwICwyLCAic3RhcnRhZyIpOwogCi0JaWYgKHJlY292ZXJ5X21vZGUgJiYgCisJaWYgKHJlY292ZXJ5X21vZGUgJiYKIAkgICAgY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgewogCQlxZXRoX29wZW4oY2FyZC0+ZGV2KTsKIAl9IGVsc2UgewpAQCAtODAxNCw3ICs4MDE3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgYXJwX2RpcmVjdF9vcHNfdGVtcGxhdGUgPSB7CiAJLmZhbWlseSA9IEFGX0lORVQsCi0JLmRlc3RydWN0b3IgPSBOVUxMLAogCS5zb2xpY2l0ID0gTlVMTCwKIAkuZXJyb3JfcmVwb3J0ID0gTlVMTCwKIAkub3V0cHV0ID0gZGV2X3F1ZXVlX3htaXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKaW5kZXggMDExYzQxMC4uMDQ3N2M0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaApAQCAtNDQ1LDcgKzQ0NSw3IEBACiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiAjZGVmaW5lIElTX0lQQV9SRVBMWShjbWQpICgoY21kLT5oZHIuaW5pdGlhdG9yID09IElQQV9DTURfSU5JVElBVE9SX0hPU1QpIHx8IFwKIAkJCSAgIChjbWQtPmhkci5pbml0aWF0b3IgPT0gSVBBX0NNRF9JTklUSUFUT1JfT1NBX1JFUExZKSkKLQkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRU5EIE9GICAgSVAgQXNzaXN0IHJlbGF0ZWQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAvKiBMYXllciAyIGRlZmludGlvbnMgKi8KICNkZWZpbmUgUUVUSF9QUk9UX0xBWUVSMiAweDA4CiAjZGVmaW5lIFFFVEhfUFJPVF9UQ1BJUCAgMHgwMwotI2RlZmluZSBRRVRIX1BST1RfT1NOMiAgIDB4MGEgICAgIAorI2RlZmluZSBRRVRIX1BST1RfT1NOMiAgIDB4MGEKICNkZWZpbmUgUUVUSF9VTFBfRU5BQkxFX1BST1RfVFlQRShidWZmZXIpIChidWZmZXIrMHg1MCkKICNkZWZpbmUgUUVUSF9JUEFfQ01EX1BST1RfVFlQRShidWZmZXIpIChidWZmZXIrMHgxOSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMKaW5kZXggMzYwZDc4Mi4uNjZmMmRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jCkBAIC0zNiw3ICszNiw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKIAlsb2ZmX3QgbnIgPSAwOwotCQorCiAJZG93bl9yZWFkKCZxZXRoX2Njd2dyb3VwX2RyaXZlci5kcml2ZXIuYnVzLT5zdWJzeXMucndzZW0pOwogCWlmICgqb2Zmc2V0ID09IDApCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CkBAIC02MCw4ICs2MCw4IEBACiBxZXRoX3Byb2NmaWxlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQsIGxvZmZfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBkZXZpY2UgKnByZXYsICpuZXh0OwotCQotCWlmIChpdCA9PSBTRVFfU1RBUlRfVE9LRU4pIAorCisJaWYgKGl0ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJcHJldiA9IE5VTEw7CiAJZWxzZQogCQlwcmV2ID0gKHN0cnVjdCBkZXZpY2UgKikgaXQ7CkBAIC0xODAsNyArMTgwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAotCQorCiAJaWYgKGl0ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwppbmRleCA4ODJkNDE5Li4xODVhOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCkBAIC03ODUsNyArNzg1LDcgQEAKIAl9CiAJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSB0eXBlKQogCQlyZXR1cm4gY291bnQ7Ci0JaWYgKChyYyA9IHFldGhfc2V0X2xhcmdlX3NlbmQoY2FyZCwgdHlwZSkpKQkKKwlpZiAoKHJjID0gcWV0aF9zZXRfbGFyZ2Vfc2VuZChjYXJkLCB0eXBlKSkpCiAJCXJldHVybiByYzsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQogCQlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJCSAgJnFldGhfb3NuX2RldmljZV9hdHRyX2dyb3VwKTsKLSAgIAkKKwogCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKSkpCiAJCXJldHVybiByZXQ7CiAJaWYgKChyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKSkpewpAQCAtMTcxMyw3ICsxNzEzLDcgQEAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJcmV0dXJuIHN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkgICZxZXRoX29zbl9kZXZpY2VfYXR0cl9ncm91cCk7Ci0JCSAgICAgIAorCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3ZpcGFfZ3JvdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCmluZGV4IDEyODZkZGUuLjI0ZWY0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKQEAgLTExNywxMSArMTE3LDExIEBACiAJaW50IGZyYWdubzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IGVsZW1lbnQsIGNudCwgZGxlbjsKLQkKKwogCWZyYWdubyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJZWxlbWVudCA9ICpuZXh0X2VsZW1lbnRfdG9fZmlsbDsKIAlkbGVuID0gMDsKLQkKKwogCWlmIChpc190c28pCiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9CiAJCQlTQkFMX0ZMQUdTX01JRERMRV9GUkFHOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwppbmRleCAzYmY0NjY2Li5mOTllNTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYworKysgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogCkBAIC0zNjIsMTIgKzM2MywxOSBAQAogCXJldHVybiBraWxsX3Rhc2s7CiB9CiAKKyNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQorI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCisKIC8qCiAgKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCiAgKi8KIHZvaWQKIHMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwZF9sb2NrKTsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGxhc3RfaXBkOworCXN0YXRpYyBpbnQgaXBkX2NvdW50OworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJc3RydWN0IG1jaSAqbWNpOwogCXN0cnVjdCBtY2NrX3N0cnVjdCAqbWNjazsKIAlpbnQgdW1vZGU7CkBAIC00MDQsMTEgKzQxMiwyNyBAQAogCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgicHJvY2Vzc2luZyBiYWNrdXAgbWFjaGluZSAiCiAJCQkJCQkgICAiY2hlY2sgd2l0aCBkYW1hZ2UuIik7CiAJCQl9Ci0JCQlpZiAoIXVtb2RlKQotCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgicHJvY2Vzc2luZyBiYWNrdXAgbWFjaGluZSAiCi0JCQkJCQkgICAiY2hlY2sgaW4ga2VybmVsIG1vZGUuIik7Ci0JCQltY2NrLT5raWxsX3Rhc2sgPSAxOwotCQkJbWNjay0+bWNja19jb2RlID0gKih1bnNpZ25lZCBsb25nIGxvbmcgKikgbWNpOworCisJCQkvKgorCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0CisJCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgorCQkJICovCisKKwkJCXNwaW5fbG9jaygmaXBkX2xvY2spOworCisJCQl0bXAgPSBnZXRfY2xvY2soKTsKKworCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKKwkJCQlpcGRfY291bnQrKzsKKwkJCWVsc2UKKwkJCQlpcGRfY291bnQgPSAxOworCisJCQlsYXN0X2lwZCA9IHRtcDsKKworCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQorCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7CisKKwkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7CiAJCX0KIAkJZWxzZSB7CiAJCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCAzODNhOTVmLi4yMzllMTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTM5MiwxMyArMzkyLDE2IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCXByb21fZ2V0cHJvcGVydHkob3Aub3Bfbm9kZWlkLCBzdHIsIHRtcCwgbGVuKTsKKwkJY250ID0gcHJvbV9nZXRwcm9wZXJ0eShvcC5vcF9ub2RlaWQsIHN0ciwgdG1wLCBsZW4pOworCQlpZiAoY250IDw9IDApIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCXRtcFtsZW5dID0gJ1wwJzsKIAotCQl0bXBbbGVuXSA9ICdcMCc7Ci0KLQkJaWYgKF9fY29weV90b191c2VyKGFyZ3AsICZvcCwgc2l6ZW9mKG9wKSkgIT0gMAotCQkgICAgfHwgY29weV90b191c2VyKG9wLm9wX2J1ZiwgdG1wLCBsZW4pICE9IDApCi0JCQllcnJvciA9IC1FRkFVTFQ7CisJCQlpZiAoX19jb3B5X3RvX3VzZXIoYXJncCwgJm9wLCBzaXplb2Yob3ApKSAhPSAwIHx8CisJCQkgICAgY29weV90b191c2VyKG9wLm9wX2J1ZiwgdG1wLCBsZW4pICE9IDApCisJCQkJZXJyb3IgPSAtRUZBVUxUOworCQl9CiAKIAkJa2ZyZWUodG1wKTsKIAkJa2ZyZWUoc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IDBkMmI0NDcuLmNhZWI2ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtNjUsNiArNjUsNyBAQAogICAgMi4yNi4wMi4wMDUgLSBGaXggdXNlX3NnID09IDAgbWFwcGluZyBvbiBzeXN0ZW1zIHdpdGggNEdCIG9yIGhpZ2hlci4KICAgIDIuMjYuMDIuMDA2IC0gRml4IDk1NTBTWCBwY2hpcCByZXNldCB0aW1lb3V0LgogICAgICAgICAgICAgICAgICBBZGQgYmlnIGVuZGlhbiBzdXBwb3J0LgorICAgMi4yNi4wMi4wMDcgLSBEaXNhYmxlIGxvY2FsIGludGVycnVwdHMgZHVyaW5nIGttYXAvdW5tYXBfYXRvbWljKCkuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04OCw3ICs4OSw3IEBACiAjaW5jbHVkZSAiM3ctOXh4eC5oIgogCiAvKiBHbG9iYWxzICovCi0jZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAwNiIKKyNkZWZpbmUgVFdfRFJJVkVSX1ZFUlNJT04gIjIuMjYuMDIuMDA3Igogc3RhdGljIFRXX0RldmljZV9FeHRlbnNpb24gKnR3YV9kZXZpY2VfZXh0ZW5zaW9uX2xpc3RbVFdfTUFYX1NMT1RdOwogc3RhdGljIHVuc2lnbmVkIGludCB0d2FfZGV2aWNlX2V4dGVuc2lvbl9jb3VudDsKIHN0YXRpYyBpbnQgdHdhX21ham9yID0gLTE7CkBAIC0xOTQyLDkgKzE5NDMsMTMgQEAKIAkJfQogCQlpZiAodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0tPnVzZV9zZyA9PSAxKSB7CiAJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXF1ZXN0X2J1ZmZlcjsKLQkJCWNoYXIgKmJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7CisJCQljaGFyICpidWY7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7CiAJCQltZW1jcHkoYnVmLCB0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3ZpcnRbcmVxdWVzdF9pZF0sIHNnLT5sZW5ndGgpOwogCQkJa3VubWFwX2F0b21pYyhidWYgLSBzZy0+b2Zmc2V0LCBLTV9JUlEwKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJfQogCX0KIH0gLyogRW5kIHR3YV9zY3Npb3BfZXhlY3V0ZV9zY3NpX2NvbXBsZXRlKCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCmluZGV4IDI1ZjY3OGQuLmU4ZTQxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwpAQCAtMTUwOCwxMCArMTUwOCwxMiBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdOwogCXZvaWQgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCiAJaWYgKGNtZC0+dXNlX3NnKSB7CiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPQogCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKWNtZC0+cmVxdWVzdF9idWZmZXI7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJYnVmID0ga21hcF9hdG9taWMoc2ctPnBhZ2UsIEtNX0lSUTApICsgc2ctPm9mZnNldDsKIAkJdHJhbnNmZXJfbGVuID0gbWluKHNnLT5sZW5ndGgsIGxlbik7CiAJfSBlbHNlIHsKQEAgLTE1MjYsNiArMTUyOCw3IEBACiAKIAkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopY21kLT5yZXF1ZXN0X2J1ZmZlcjsKIAkJa3VubWFwX2F0b21pYyhidWYgLSBzZy0+b2Zmc2V0LCBLTV9JUlEwKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCA0MDM1OTIwLi5hNDgwYTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtNDQ2LDcgKzQ0Niw5IEBACiAKIGNvbmZpZyBTQ1NJX0FEVkFOU1lTCiAJdHJpc3RhdGUgIkFkdmFuU3lzIFNDU0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChJU0EgfHwgRUlTQSB8fCBQQ0kpICYmIFNDU0kgJiYgQlJPS0VOCisJZGVwZW5kcyBvbiBTQ1NJCisJZGVwZW5kcyBvbiBJU0EgfHwgRUlTQSB8fCBQQ0kKKwlkZXBlbmRzIG9uIEJST0tFTiB8fCBYODZfMzIKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBhbGwgU0NTSSBob3N0IGFkYXB0ZXJzIG1hbnVmYWN0dXJlZCBieQogCSAgQWR2YW5TeXMuIEl0IGlzIGRvY3VtZW50ZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgaW4KQEAgLTEwNzksNyArMTA4MSw3IEBACiAJICBtZW1vcnkgdXNpbmcgUENJIERBQyBjeWNsZXMuCiAKIGNvbmZpZyBTQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1MKLQlpbnQgImRlZmF1bHQgdGFnZ2VkIGNvbW1hbmQgcXVldWUgZGVwdGgiCisJaW50ICJEZWZhdWx0IHRhZ2dlZCBjb21tYW5kIHF1ZXVlIGRlcHRoIgogCWRlcGVuZHMgb24gU0NTSV9TWU01M0M4WFhfMgogCWRlZmF1bHQgIjE2IgogCWhlbHAKQEAgLTEwOTAsNyArMTA5Miw3IEBACiAJICBleGNlZWQgQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTLgogCiBjb25maWcgU0NTSV9TWU01M0M4WFhfTUFYX1RBR1MKLQlpbnQgIm1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyIKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyIKIAlkZXBlbmRzIG9uIFNDU0lfU1lNNTNDOFhYXzIKIAlkZWZhdWx0ICI2NCIKIAloZWxwCkBAIC0xMDk5LDEzICsxMTAxLDE0IEBACiAJICBwb3NzaWJsZS4gVGhlIGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTYgcXVldWVkIGNvbW1hbmRzIHBlciBkZXZpY2UuCiAJICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBjb21waWxlZC1pbiBoYXJkIGxpbWl0LgogCi1jb25maWcgU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQKLQlib29sICJ1c2UgcG9ydCBJTyIKK2NvbmZpZyBTQ1NJX1NZTTUzQzhYWF9NTUlPCisJYm9vbCAiVXNlIG1lbW9yeSBtYXBwZWQgSU8iCiAJZGVwZW5kcyBvbiBTQ1NJX1NZTTUzQzhYWF8yCisJZGVmYXVsdCB5CiAJaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBkcml2ZXIgd2lsbCB1c2UgcG9ydCBJTyB0byBhY2Nlc3MKLQkgIHRoZSBjYXJkLiAgVGhpcyBpcyBzaWduaWZpY2FudGx5IHNsb3dlciB0aGVuIHVzaW5nIG1lbW9yeQotCSAgbWFwcGVkIElPLiAgTW9zdCBwZW9wbGUgc2hvdWxkIGFuc3dlciBOLgorCSAgTWVtb3J5IG1hcHBlZCBJTyBpcyBmYXN0ZXIgdGhhbiBQb3J0IElPLiAgTW9zdCBwZW9wbGUgc2hvdWxkCisJICBhbnN3ZXIgWSBoZXJlLCBidXQgc29tZSBtYWNoaW5lcyBtYXkgaGF2ZSBwcm9ibGVtcy4gIElmIHlvdSBoYXZlCisJICB0byBhbnN3ZXIgTiBoZXJlLCBwbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHRoZSBtYWludGFpbmVyLgogCiBjb25maWcgU0NTSV9JUFIKIAl0cmlzdGF0ZSAiSUJNIFBvd2VyIExpbnV4IFJBSUQgYWRhcHRlciBzdXBwb3J0IgpAQCAtMTMwOSwxNSArMTMxMiw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxbG9naWNmYXMuCiAKLWNvbmZpZyBTQ1NJX1FMT0dJQ19GQwotCXRyaXN0YXRlICJRbG9naWMgSVNQIEZDIFNDU0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCi0JaGVscAotCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFFMb2dpYyBJU1AyMTAwIFNDU0ktRkNQIGhvc3QgYWRhcHRlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWxvZ2ljZmMuCi0KIGNvbmZpZyBTQ1NJX1FMT0dJQ19GQ19GSVJNV0FSRQogCWJvb2wgIkluY2x1ZGUgbG9hZGFibGUgZmlybXdhcmUgaW4gZHJpdmVyIgogCWRlcGVuZHMgb24gU0NTSV9RTE9HSUNfRkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCBlNTEzYzMxLi44MTgwM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC03OCw3ICs3OCw2IEBACiBvYmotJChDT05GSUdfU0NTSV9TWU01M0M0MTYpCSs9IHN5bTUzYzQxNi5vCiBvYmotJChDT05GSUdfU0NTSV9RTE9HSUNfRkFTKQkrPSBxbG9naWNmYXM0MDgubwlxbG9naWNmYXMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9RTE9HSUMpCSs9IHFsb2dpY2ZhczQwOC5vCi1vYmotJChDT05GSUdfU0NTSV9RTE9HSUNfRkMpCSs9IHFsb2dpY2ZjLm8gCiBvYmotJChDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCkJKz0gcWxhMTI4MC5vIAogb2JqLSQoQ09ORklHX1NDU0lfUUxBX0ZDKQkrPSBxbGEyeHh4Lwogb2JqLSQoQ09ORklHX1NDU0lfTFBGQykJCSs9IGxwZmMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCmluZGV4IDhkZjRhMGUuLjY0MmEzYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCkBAIC0xNDksMjAgKzE0OSwyMCBAQAogCiBzdGF0aWMgaW50IGNvbW1pdCA9IC0xOwogCi1tb2R1bGVfcGFyYW0obm9uZGFzZCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShub25kYXNkLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKG5vbmRhc2QsICJDb250cm9sIHNjYW5uaW5nIG9mIGhiYSBmb3Igbm9uZGFzZCBkZXZpY2VzLiAwPW9mZiwgMT1vbiIpOwotbW9kdWxlX3BhcmFtKGRhY21vZGUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZGFjbW9kZSwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkYWNtb2RlLCAiQ29udHJvbCB3aGV0aGVyIGRtYSBhZGRyZXNzaW5nIGlzIHVzaW5nIDY0IGJpdCBEQUMuIDA9b2ZmLCAxPW9uIik7Ci1tb2R1bGVfcGFyYW0oY29tbWl0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGNvbW1pdCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhjb21taXQsICJDb250cm9sIHdoZXRoZXIgYSBDT01NSVRfQ09ORklHIGlzIGlzc3VlZCB0byB0aGUgYWRhcHRlciBmb3IgZm9yZWlnbiBhcnJheXMuXG5UaGlzIGlzIHR5cGljYWxseSBuZWVkZWQgaW4gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEgQklPUy4gMD1vZmYsIDE9b24iKTsKIAogaW50IG51bWFjYiA9IC0xOwogbW9kdWxlX3BhcmFtKG51bWFjYiwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhudW1hY2IsICJSZXF1ZXN0IGEgbGltaXQgdG8gdGhlIG51bWJlciBvZiBhZGFwdGVyIGNvbnRyb2wgYmxvY2tzIChGSUIpIGFsbG9jYXRlZC4gVmFsaWRcbnZhbHVlcyBhcmUgNTEyIGFuZCBkb3duLiBEZWZhdWx0IGlzIHRvIHVzZSBzdWdnZXN0aW9uIGZyb20gRmlybXdhcmUuIik7CitNT0RVTEVfUEFSTV9ERVNDKG51bWFjYiwgIlJlcXVlc3QgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGFkYXB0ZXIgY29udHJvbCBibG9ja3MgKEZJQikgYWxsb2NhdGVkLiBWYWxpZCB2YWx1ZXMgYXJlIDUxMiBhbmQgZG93bi4gRGVmYXVsdCBpcyB0byB1c2Ugc3VnZ2VzdGlvbiBmcm9tIEZpcm13YXJlLiIpOwogCiBpbnQgYWNic2l6ZSA9IC0xOwogbW9kdWxlX3BhcmFtKGFjYnNpemUsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoYWNic2l6ZSwgIlJlcXVlc3QgYSBzcGVjaWZpYyBhZGFwdGVyIGNvbnRyb2wgYmxvY2sgKEZJQikgc2l6ZS4gVmFsaWQgdmFsdWVzIGFyZSA1MTIsXG4yMDQ4LCA0MDk2IGFuZCA4MTkyLiBEZWZhdWx0IGlzIHRvIHVzZSBzdWdnZXN0aW9uIGZyb20gRmlybXdhcmUuIik7CitNT0RVTEVfUEFSTV9ERVNDKGFjYnNpemUsICJSZXF1ZXN0IGEgc3BlY2lmaWMgYWRhcHRlciBjb250cm9sIGJsb2NrIChGSUIpIHNpemUuIFZhbGlkIHZhbHVlcyBhcmUgNTEyLCAyMDQ4LCA0MDk2IGFuZCA4MTkyLiBEZWZhdWx0IGlzIHRvIHVzZSBzdWdnZXN0aW9uIGZyb20gRmlybXdhcmUuIik7CiAvKioKICAqCWFhY19nZXRfY29uZmlnX3N0YXR1cwktCWNoZWNrIHRoZSBhZGFwdGVyIGNvbmZpZ3VyYXRpb24KICAqCUBjb21tb246IGFkYXB0ZXIgdG8gcXVlcnkKQEAgLTM4Nyw2ICszODcsNyBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKiBzY3NpY21kOwogCiAJc2NzaWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNvbnRleHQ7CisJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX01JRExFVkVMOwogCiAJZHByaW50aygoS0VSTl9ERUJVRyAiZ2V0X2NvbnRhaW5lcl9uYW1lX2NhbGxiYWNrW2NwdSAlZF06IHQgPSAlbGQuXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMpKTsKIAlpZiAoZmlicHRyID09IE5VTEwpCkBAIC00NTMsOCArNDU0LDEwIEBACiAJLyoKIAkgKglDaGVjayB0aGF0IHRoZSBjb21tYW5kIHF1ZXVlZCB0byB0aGUgY29udHJvbGxlcgogCSAqLwotCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSAKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOworCX0KIAkJCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiYWFjX2dldF9jb250YWluZXJfbmFtZTogYWFjX2ZpYl9zZW5kIGZhaWxlZCB3aXRoIHN0YXR1czogJWQuXG4iLCBzdGF0dXMpOwogCWFhY19maWJfY29tcGxldGUoY21kX2ZpYmNvbnRleHQpOwpAQCAtOTA3LDkgKzkxMCwxMCBAQAogCXUzMiBjaWQ7CiAKIAlzY3NpY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY29udGV4dDsKKwlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTUlETEVWRUw7CiAKIAlkZXYgPSAoc3RydWN0IGFhY19kZXYgKilzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCWNpZCA9IElEX0xVTl9UT19DT05UQUlORVIoc2NzaWNtZC0+ZGV2aWNlLT5pZCwgc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOworCWNpZCA9IHNjbWRfaWQoc2NzaWNtZCk7CiAKIAlpZiAobmJsYW5rKGRwcmludGsoeCkpKSB7CiAJCXU2NCBsYmE7CkBAIC0xMTUxLDggKzExNTUsMTAgQEAKIAkvKgogCSAqCUNoZWNrIHRoYXQgdGhlIGNvbW1hbmQgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyCiAJICovCi0JaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIAorCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXNjc2ljbWQtPlNDcC5waGFzZSA9IEFBQ19PV05FUl9GSVJNV0FSRTsKIAkJcmV0dXJuIDA7CisJfQogCQkKIAlwcmludGsoS0VSTl9XQVJOSU5HICJhYWNfcmVhZDogYWFjX2ZpYl9zZW5kIGZhaWxlZCB3aXRoIHN0YXR1czogJWQuXG4iLCBzdGF0dXMpOwogCS8qCkBAIC0xMzE4LDggKzEzMjQsOCBAQAogCS8qCiAJICoJQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBxdWV1ZWQgdG8gdGhlIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykKLQl7CisJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJc2NzaWNtZC0+U0NwLnBoYXNlID0gQUFDX09XTkVSX0ZJUk1XQVJFOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzNDEsNiArMTM0Nyw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCiAJY21kID0gY29udGV4dDsKKwljbWQtPlNDcC5waGFzZSA9IEFBQ19PV05FUl9NSURMRVZFTDsKIAogCWRwcmludGsoKEtFUk5fREVCVUcgInN5bmNocm9uaXplX2NhbGxiYWNrW2NwdSAlZF06IHQgPSAlbGQuXG4iLCAKIAkJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMpKTsKQEAgLTEzNTQsNyArMTM2MSw3IEBACiAJZWxzZSB7CiAJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOwogCQlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopc2Rldi0+aG9zdC0+aG9zdGRhdGE7Ci0JCXUzMiBjaWQgPSBJRF9MVU5fVE9fQ09OVEFJTkVSKHNkZXYtPmlkLCBzZGV2LT5sdW4pOworCQl1MzIgY2lkID0gc2Rldl9pZChzZGV2KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJICAgICAic3luY2hyb25pemVfY2FsbGJhY2s6IHN5bmNocm9uaXplIGZhaWxlZCwgc3RhdHVzID0gJWRcbiIsCiAJCSAgICAgbGUzMl90b19jcHUoc3luY2hyb25pemVyZXBseS0+c3RhdHVzKSk7CkBAIC0xMzg2LDEyICsxMzkzLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCi0JICogV2FpdCBmb3IgYWxsIGNvbW1hbmRzIHRvIGNvbXBsZXRlIHRvIHRoaXMgc3BlY2lmaWMKLQkgKiB0YXJnZXQgKGJsb2NrKS4KKwkgKiBXYWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgcXVldWVkIGNvbW1hbmRzIHRvIGNvbXBsZXRlIHRvIHRoaXMKKwkgKiBzcGVjaWZpYyB0YXJnZXQgKGJsb2NrKS4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+bGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbWQsICZzZGV2LT5jbWRfbGlzdCwgbGlzdCkKLQkJaWYgKGNtZCAhPSBzY3NpY21kICYmIGNtZC0+c2VyaWFsX251bWJlciAhPSAwKSB7CisJCWlmIChjbWQgIT0gc2NzaWNtZCAmJiBjbWQtPlNDcC5waGFzZSA9PSBBQUNfT1dORVJfRklSTVdBUkUpIHsKIAkJCSsrYWN0aXZlOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0MzQsOCArMTQ0MSwxMCBAQAogCS8qCiAJICoJQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBxdWV1ZWQgdG8gdGhlIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOworCX0KIAogCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCSJhYWNfc3luY2hyb25pemU6IGFhY19maWJfc2VuZCBmYWlsZWQgd2l0aCBzdGF0dXM6ICVkLlxuIiwgc3RhdHVzKTsKQEAgLTE0NTgsNyArMTQ2Nyw2IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHNjc2ljbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGZzYV9kZXZfaW5mbyAqZnNhX2Rldl9wdHIgPSBkZXYtPmZzYV9kZXY7Ci0JaW50IHJldDsKIAkKIAkvKgogCSAqCUlmIHRoZSBidXMsIGlkIG9yIGx1biBpcyBvdXQgb2YgcmFuZ2UsIHJldHVybiBmYWlsCkBAIC0xNDY2LDEzICsxNDc0LDE0IEBACiAJICoJaXRzZWxmLgogCSAqLwogCWlmIChzY21kX2lkKHNjc2ljbWQpICE9IGhvc3QtPnRoaXNfaWQpIHsKLQkJaWYgKChzY3NpY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gQ09OVEFJTkVSX0NIQU5ORUwpKSB7Ci0JCQlpZiggKHNjc2ljbWQtPmRldmljZS0+aWQgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKSB8fCAoc2NzaWNtZC0+ZGV2aWNlLT5sdW4gIT0gMCkpeyAKKwkJaWYgKChzY21kX2NoYW5uZWwoc2NzaWNtZCkgPT0gQ09OVEFJTkVSX0NIQU5ORUwpKSB7CisJCQlpZigoc2NtZF9pZChzY3NpY21kKSA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpIHx8CisJCQkJCShzY3NpY21kLT5kZXZpY2UtPmx1biAhPSAwKSkgewogCQkJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCWNpZCA9IElEX0xVTl9UT19DT05UQUlORVIoc2NzaWNtZC0+ZGV2aWNlLT5pZCwgc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOworCQkJY2lkID0gc2NtZF9pZChzY3NpY21kKTsKIAogCQkJLyoKIAkJCSAqCUlmIHRoZSB0YXJnZXQgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QsIGl0IG1heSBoYXZlCkBAIC0xNTQ4LDcgKzE1NTcsNyBAQAogCXsKIAkJc3RydWN0IGlucXVpcnlfZGF0YSBpbnFfZGF0YTsKIAotCQlkcHJpbnRrKChLRVJOX0RFQlVHICJJTlFVSVJZIGNvbW1hbmQsIElEOiAlZC5cbiIsIHNjc2ljbWQtPmRldmljZS0+aWQpKTsKKwkJZHByaW50aygoS0VSTl9ERUJVRyAiSU5RVUlSWSBjb21tYW5kLCBJRDogJWQuXG4iLCBzY21kX2lkKHNjc2ljbWQpKSk7CiAJCW1lbXNldCgmaW5xX2RhdGEsIDAsIHNpemVvZiAoc3RydWN0IGlucXVpcnlfZGF0YSkpOwogCiAJCWlucV9kYXRhLmlucWRfdmVyID0gMjsJLyogY2xhaW0gY29tcGxpYW5jZSB0byBTQ1NJLTIgKi8KQEAgLTE1OTgsMTMgKzE2MDcsMTQgQEAKIAkJY3BbMTFdID0gMDsKIAkJY3BbMTJdID0gMDsKIAkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIGNwLCAwLAotCQkgIG1pbigodW5zaWduZWQgaW50KXNjc2ljbWQtPmNtbmRbMTNdLCBzaXplb2YoY3ApKSk7CisJCSAgbWluX3Qoc2l6ZV90LCBzY3NpY21kLT5jbW5kWzEzXSwgc2l6ZW9mKGNwKSkpOwogCQlpZiAoc2l6ZW9mKGNwKSA8IHNjc2ljbWQtPmNtbmRbMTNdKSB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuLCBvZmZzZXQgPSBzaXplb2YoY3ApOwogCiAJCQltZW1zZXQoY3AsIDAsIG9mZnNldCk7CiAJCQlkbyB7Ci0JCQkJbGVuID0gbWluKHNjc2ljbWQtPmNtbmRbMTNdLW9mZnNldCwgc2l6ZW9mKGNwKSk7CisJCQkJbGVuID0gbWluX3Qoc2l6ZV90LCBzY3NpY21kLT5jbW5kWzEzXSAtIG9mZnNldCwKKwkJCQkJCXNpemVvZihjcCkpOwogCQkJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgb2Zmc2V0LCBsZW4pOwogCQkJfSB3aGlsZSAoKG9mZnNldCArPSBsZW4pIDwgc2NzaWNtZC0+Y21uZFsxM10pOwogCQl9CkBAIC0xNzI4LDI0ICsxNzM4LDE5IEBACiAJCQkgKgljb250YWluZXJzIHRvIC9kZXYvc2QgZGV2aWNlIG5hbWVzCiAJCQkgKi8KIAkJCSAKLQkJCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCQkJaWYgKHNjc2ljbWQtPnJlcXVlc3QtPnJxX2Rpc2spCiAJCQkJc3RybGNweShmc2FfZGV2X3B0cltjaWRdLmRldm5hbWUsCiAJCQkJc2NzaWNtZC0+cmVxdWVzdC0+cnFfZGlzay0+ZGlza19uYW1lLAogCQkJICAJbWluKHNpemVvZihmc2FfZGV2X3B0cltjaWRdLmRldm5hbWUpLAogCQkJCXNpemVvZihzY3NpY21kLT5yZXF1ZXN0LT5ycV9kaXNrLT5kaXNrX25hbWUpICsgMSkpOwotCQkJcmV0ID0gYWFjX3JlYWQoc2NzaWNtZCwgY2lkKTsKLQkJCXNwaW5fbG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKLQkJCXJldHVybiByZXQ7CisKKwkJCXJldHVybiBhYWNfcmVhZChzY3NpY21kLCBjaWQpOwogCiAJCWNhc2UgV1JJVEVfNjoKIAkJY2FzZSBXUklURV8xMDoKIAkJY2FzZSBXUklURV8xMjoKIAkJY2FzZSBXUklURV8xNjoKLQkJCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwotCQkJcmV0ID0gYWFjX3dyaXRlKHNjc2ljbWQsIGNpZCk7Ci0JCQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7Ci0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIGFhY193cml0ZShzY3NpY21kLCBjaWQpOwogCiAJCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6CiAJCQkvKiBJc3N1ZSBGSUIgdG8gdGVsbCBGaXJtd2FyZSB0byBmbHVzaCBpdCdzIGNhY2hlICovCkBAIC0xNzc4LDcgKzE3ODMsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmcWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgYWFjX3F1ZXJ5X2Rpc2spKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKHFkLmNudW0gPT0gLTEpCi0JCXFkLmNudW0gPSBJRF9MVU5fVE9fQ09OVEFJTkVSKHFkLmlkLCBxZC5sdW4pOworCQlxZC5jbnVtID0gcWQuaWQ7CiAJZWxzZSBpZiAoKHFkLmJ1cyA9PSAtMSkgJiYgKHFkLmlkID09IC0xKSAmJiAocWQubHVuID09IC0xKSkgCiAJewogCQlpZiAocWQuY251bSA8IDAgfHwgcWQuY251bSA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCkBAIC0xODkwLDYgKzE4OTUsNyBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQ7CiAKIAlzY3NpY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY29udGV4dDsKKwlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTUlETEVWRUw7CiAJZGV2ID0gKHN0cnVjdCBhYWNfZGV2ICopc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAogCWlmIChmaWJwdHIgPT0gTlVMTCkKQEAgLTIwNjgsMTQgKzIwNzQsMTMgQEAKIAl1MzIgdGltZW91dDsKIAogCWRldiA9IChzdHJ1Y3QgYWFjX2RldiAqKXNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0JaWYgKHNjc2ljbWQtPmRldmljZS0+aWQgPj0gZGV2LT5tYXhpbXVtX251bV9waHlzaWNhbHMgfHwgCisJaWYgKHNjbWRfaWQoc2NzaWNtZCkgPj0gZGV2LT5tYXhpbXVtX251bV9waHlzaWNhbHMgfHwKIAkJCXNjc2ljbWQtPmRldmljZS0+bHVuID4gNykgewogCQlzY3NpY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJc2NzaWNtZC0+c2NzaV9kb25lKHNjc2ljbWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXYgPSAoc3RydWN0IGFhY19kZXYgKilzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCXN3aXRjaChzY3NpY21kLT5zY19kYXRhX2RpcmVjdGlvbil7CiAJY2FzZSBETUFfVE9fREVWSUNFOgogCQlmbGFnID0gU1JCX0RhdGFPdXQ7CkBAIC0yMTAzLDggKzIxMDgsOCBAQAogCiAJc3JiY21kID0gKHN0cnVjdCBhYWNfc3JiKikgZmliX2RhdGEoY21kX2ZpYmNvbnRleHQpOwogCXNyYmNtZC0+ZnVuY3Rpb24gPSBjcHVfdG9fbGUzMihTUkJGX0V4ZWN1dGVTY3NpKTsKLQlzcmJjbWQtPmNoYW5uZWwgID0gY3B1X3RvX2xlMzIoYWFjX2xvZ2ljYWxfdG9fcGh5cyhzY3NpY21kLT5kZXZpY2UtPmNoYW5uZWwpKTsKLQlzcmJjbWQtPmlkICAgPSBjcHVfdG9fbGUzMihzY3NpY21kLT5kZXZpY2UtPmlkKTsKKwlzcmJjbWQtPmNoYW5uZWwgID0gY3B1X3RvX2xlMzIoYWFjX2xvZ2ljYWxfdG9fcGh5cyhzY21kX2NoYW5uZWwoc2NzaWNtZCkpKTsKKwlzcmJjbWQtPmlkICAgPSBjcHVfdG9fbGUzMihzY21kX2lkKHNjc2ljbWQpKTsKIAlzcmJjbWQtPmx1biAgICAgID0gY3B1X3RvX2xlMzIoc2NzaWNtZC0+ZGV2aWNlLT5sdW4pOwogCXNyYmNtZC0+ZmxhZ3MgICAgPSBjcHVfdG9fbGUzMihmbGFnKTsKIAl0aW1lb3V0ID0gc2NzaWNtZC0+dGltZW91dF9wZXJfY29tbWFuZC9IWjsKQEAgLTIxNjEsNyArMjE2Niw4IEBACiAJLyoKIAkgKglDaGVjayB0aGF0IHRoZSBjb21tYW5kIHF1ZXVlZCB0byB0aGUgY29udHJvbGxlcgogCSAqLwotCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKXsKKwlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlzY3NpY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfRklSTVdBUkU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjE5Miw4ICsyMTk4LDYgQEAKIAkJCXNjc2ljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKIAkJcHNnLT5jb3VudCA9IGNwdV90b19sZTMyKHNnX2NvdW50KTsKIAotCQlieXRlX2NvdW50ID0gMDsKLQogCQlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgewogCQkJcHNnLT5zZ1tpXS5hZGRyID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCXBzZy0+c2dbaV0uY291bnQgPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CkBAIC0yMjQ5LDE4ICsyMjUzLDE3IEBACiAKIAkJc2dfY291bnQgPSBwY2lfbWFwX3NnKGRldi0+cGRldiwgc2csIHNjc2ljbWQtPnVzZV9zZywKIAkJCXNjc2ljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJcHNnLT5jb3VudCA9IGNwdV90b19sZTMyKHNnX2NvdW50KTsKLQotCQlieXRlX2NvdW50ID0gMDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgeworCQkJaW50IGNvdW50ID0gc2dfZG1hX2xlbihzZyk7CiAJCQlhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJcHNnLT5zZ1tpXS5hZGRyWzBdID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQkJcHNnLT5zZ1tpXS5hZGRyWzFdID0gY3B1X3RvX2xlMzIoYWRkcj4+MzIpOwotCQkJcHNnLT5zZ1tpXS5jb3VudCA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKLQkJCWJ5dGVfY291bnQgKz0gc2dfZG1hX2xlbihzZyk7CisJCQlwc2ctPnNnW2ldLmNvdW50ID0gY3B1X3RvX2xlMzIoY291bnQpOworCQkJYnl0ZV9jb3VudCArPSBjb3VudDsKIAkJCXNnKys7CiAJCX0KKwkJcHNnLT5jb3VudCA9IGNwdV90b19sZTMyKHNnX2NvdW50KTsKIAkJLyogaGJhIHdhbnRzIHRoZSBzaXplIHRvIGJlIGV4YWN0ICovCiAJCWlmKGJ5dGVfY291bnQgPiBzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4pewogCQkJdTMyIHRlbXAgPSBsZTMyX3RvX2NwdShwc2ctPnNnW2ktMV0uY291bnQpIC0gCkBAIC0yMjc1LDE2ICsyMjc4LDE1IEBACiAJCX0KIAl9CiAJZWxzZSBpZihzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKLQkJdTY0IGFkZHI7IAotCQlhZGRyID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LAorCQlzY3NpY21kLT5TQ3AuZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwKIAkJCQlzY3NpY21kLT5yZXF1ZXN0X2J1ZmZlciwKIAkJCQlzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4sCiAJCQkJc2NzaWNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQlhZGRyID0gc2NzaWNtZC0+U0NwLmRtYV9oYW5kbGU7CiAJCXBzZy0+Y291bnQgPSBjcHVfdG9fbGUzMigxKTsKIAkJcHNnLT5zZ1swXS5hZGRyWzBdID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQlwc2ctPnNnWzBdLmFkZHJbMV0gPSBjcHVfdG9fbGUzMihhZGRyID4+IDMyKTsKIAkJcHNnLT5zZ1swXS5jb3VudCA9IGNwdV90b19sZTMyKHNjc2ljbWQtPnJlcXVlc3RfYnVmZmxlbik7ICAKLQkJc2NzaWNtZC0+U0NwLmRtYV9oYW5kbGUgPSBhZGRyOwogCQlieXRlX2NvdW50ID0gc2NzaWNtZC0+cmVxdWVzdF9idWZmbGVuOwogCX0KIAlyZXR1cm4gYnl0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaAppbmRleCA5Y2U3MDAyLi5mNzczYjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCkBAIC0xMCw2ICsxMCwxMCBAQAogICogICAgICAgICAgICAgIEQgRSBGIEkgTiBFIFMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZm5kZWYgQUFDX0RSSVZFUl9CVUlMRAorIyBkZWZpbmUgQUFDX0RSSVZFUl9CVUlMRCAyNDA5CisjIGRlZmluZSBBQUNfRFJJVkVSX0JSQU5DSCAiLW1oMSIKKyNlbmRpZgogI2RlZmluZSBNQVhJTVVNX05VTV9DT05UQUlORVJTCTMyCiAKICNkZWZpbmUgQUFDX05VTV9NR1RfRklCICAgICAgICAgOApAQCAtMjUsNyArMjksNiBAQAogICogVGhlc2UgbWFjcm9zIGNvbnZlcnQgZnJvbSBwaHlzaWNhbCBjaGFubmVscyB0byB2aXJ0dWFsIGNoYW5uZWxzCiAgKi8KICNkZWZpbmUgQ09OVEFJTkVSX0NIQU5ORUwJCSgwKQotI2RlZmluZSBJRF9MVU5fVE9fQ09OVEFJTkVSKGlkLCBsdW4pCShpZCkKICNkZWZpbmUgQ09OVEFJTkVSX1RPX0NIQU5ORUwoY29udCkJKENPTlRBSU5FUl9DSEFOTkVMKQogI2RlZmluZSBDT05UQUlORVJfVE9fSUQoY29udCkJCShjb250KQogI2RlZmluZSBDT05UQUlORVJfVE9fTFVOKGNvbnQpCQkoMCkKQEAgLTc4OSw2ICs3OTIsNyBAQAogCXU2NAkJc2l6ZTsKIAl1MzIJCXR5cGU7CiAJdTMyCQljb25maWdfd2FpdGluZ19vbjsKKwl1bnNpZ25lZCBsb25nCWNvbmZpZ193YWl0aW5nX3N0YW1wOwogCXUxNgkJcXVldWVfZGVwdGg7CiAJdTgJCWNvbmZpZ19uZWVkZWQ7CiAJdTgJCXZhbGlkOwpAQCAtMTc3MSw2ICsxNzc1LDExIEBACiB9CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CisvKiBTQ3AucGhhc2UgdmFsdWVzICovCisjZGVmaW5lIEFBQ19PV05FUl9NSURMRVZFTAkweDEwMQorI2RlZmluZSBBQUNfT1dORVJfTE9XTEVWRUwJMHgxMDIKKyNkZWZpbmUgQUFDX09XTkVSX0VSUk9SX0hBTkRMRVIJMHgxMDMKKyNkZWZpbmUgQUFDX09XTkVSX0ZJUk1XQVJFCTB4MTA2CiAKIGNvbnN0IGNoYXIgKmFhY19kcml2ZXJpbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdHJ1Y3QgZmliICphYWNfZmliX2FsbG9jKHN0cnVjdCBhYWNfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWN0cmwuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1jdHJsLmMKaW5kZXggNDdmZWZjYS4uOWY3NTE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWN0cmwuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tY3RybC5jCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTI5Myw2ICsyOTUsMTYgQEAKIAkJc3RhdHVzID0gMDsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmZpYl9sb2NrLCBmbGFncyk7CisJCS8qIElmIHNvbWVvbmUga2lsbGVkIHRoZSBBSUYgYWFjcmFpZCB0aHJlYWQsIHJlc3RhcnQgaXQgKi8KKwkJc3RhdHVzID0gIWRldi0+YWlmX3RocmVhZDsKKwkJaWYgKHN0YXR1cyAmJiBkZXYtPnF1ZXVlcyAmJiBkZXYtPmZzYV9kZXYpIHsKKwkJCS8qIEJlIHBhcmFub2lkLCBiZSB2ZXJ5IHBhcmFub2lkISAqLworCQkJa3RocmVhZF9zdG9wKGRldi0+dGhyZWFkKTsKKwkJCXNzbGVlcCgxKTsKKwkJCWRldi0+YWlmX3RocmVhZCA9IDA7CisJCQlkZXYtPnRocmVhZCA9IGt0aHJlYWRfcnVuKGFhY19jb21tYW5kX3RocmVhZCwgZGV2LCBkZXYtPm5hbWUpOworCQkJc3NsZWVwKDEpOworCQl9CiAJCWlmIChmLndhaXQpIHsKIAkJCWlmKGRvd25faW50ZXJydXB0aWJsZSgmZmliY3R4LT53YWl0X3NlbSkgPCAwKSB7CiAJCQkJc3RhdHVzID0gLUVJTlRSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCmluZGV4IGM3ZjgwZWMuLjlmOWY0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKQEAgLTc2Nyw5ICs3NjcsOSBAQAogCQlpZiAoY3BbbGVuZ3RoXSAhPSAwKQogCQkJY3BbbGVuZ3RoXSA9IDA7CiAJCWlmIChsZXZlbCA9PSBMT0dfQUFDX0hJR0hfRVJST1IpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJhYWNyYWlkOiVzIiwgY3ApOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6JXMiLCBkZXYtPm5hbWUsIGNwKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWFjcmFpZDolcyIsIGNwKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIiwgZGV2LT5uYW1lLCBjcCk7CiAJfQogCW1lbXNldChjcCwgMCwgIDI1Nik7CiB9CkBAIC03ODQsNiArNzg0LDcgQEAKICAqCWRpc3BhdGNoZXMgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmUgZm9yIGhhbmRsaW5nLgogICovCiAKKyNkZWZpbmUgQUlGX1NOSUZGX1RJTUVPVVQJKDMwKkhaKQogc3RhdGljIHZvaWQgYWFjX2hhbmRsZV9haWYoc3RydWN0IGFhY19kZXYgKiBkZXYsIHN0cnVjdCBmaWIgKiBmaWJwdHIpCiB7CiAJc3RydWN0IGh3X2ZpYiAqIGh3X2ZpYiA9IGZpYnB0ci0+aHdfZmliOwpAQCAtODM3LDYgKzgzOCw3IEBACiAJCQkJaWYgKGRldmljZSkgewogCQkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQ0hBTkdFOwogCQkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9IEFpZkVuQ29uZmlnQ2hhbmdlOworCQkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCA9IGppZmZpZXM7CiAJCQkJCXNjc2lfZGV2aWNlX3B1dChkZXZpY2UpOwogCQkJCX0KIAkJCX0KQEAgLTg0OSwxMyArODUxLDE1IEBACiAJCWlmIChjb250YWluZXIgIT0gKHUzMiktMSkgewogCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KLQkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKSAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKIAkJfSBlbHNlIGZvciAoY29udGFpbmVyID0gMDsKIAkJICAgIGNvbnRhaW5lciA8IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVyczsgKytjb250YWluZXIpIHsKLQkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQotCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkKKwkJCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KKwkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpICYmCisJCQkgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpCiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtODcyLDYgKzg3Niw3IEBACiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQUREOwogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQogCQkJCUFpZkVuQ29uZmlnQ2hhbmdlOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTg4NCw2ICs4ODksNyBAQAogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IERFTEVURTsKIAkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQlBaWZFbkNvbmZpZ0NoYW5nZTsKKwkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wID0gamlmZmllczsKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC04OTQsMTEgKzkwMCwxMyBAQAogCQkJY29udGFpbmVyID0gbGUzMl90b19jcHUoKCh1MzIgKilhaWZjbWQtPmRhdGEpWzFdKTsKIAkJCWlmIChjb250YWluZXIgPj0gZGV2LT5tYXhpbXVtX251bV9jb250YWluZXJzKQogCQkJCWJyZWFrOwotCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uKQorCQkJaWYgKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uICYmCisJCQkgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpCiAJCQkJYnJlYWs7CiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQ0hBTkdFOwogCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQogCQkJCUFpZkVuQ29uZmlnQ2hhbmdlOworCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBaWZFbkNvbmZpZ0NoYW5nZToKQEAgLTkxMywxMyArOTIxLDE1IEBACiAJCWlmIChjb250YWluZXIgIT0gKHUzMiktMSkgewogCQkJaWYgKGNvbnRhaW5lciA+PSBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnMpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KLQkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpCisJCQlpZiAoKGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID09CisJCQkgICAgbGUzMl90b19jcHUoKih1MzIgKilhaWZjbWQtPmRhdGEpKSAmJgorCQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wICsgQUlGX1NOSUZGX1RJTUVPVVQpKQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0gMDsKIAkJfSBlbHNlIGZvciAoY29udGFpbmVyID0gMDsKIAkJICAgIGNvbnRhaW5lciA8IGRldi0+bWF4aW11bV9udW1fY29udGFpbmVyczsgKytjb250YWluZXIpIHsKLQkJCWlmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19vbiA9PQotCQkJICAgIGxlMzJfdG9fY3B1KCoodTMyICopYWlmY21kLT5kYXRhKSkKKwkJCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0KKwkJCSAgICBsZTMyX3RvX2NwdSgqKHUzMiAqKWFpZmNtZC0+ZGF0YSkpICYmCisJCQkgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfc3RhbXAgKyBBSUZfU05JRkZfVElNRU9VVCkpCiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtOTQ2LDYgKzk1Niw4IEBACiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPQogCQkJCQlBaWZFbkNvbnRhaW5lckNoYW5nZTsKIAkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gQUREOworCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX3N0YW1wID0KKwkJCQkJamlmZmllczsKIAkJCX0KIAkJfQogCQlpZiAoKCgodTMyICopYWlmY21kLT5kYXRhKVsxXSA9PSBjcHVfdG9fbGUzMihBaWZKb2JDdHJaZXJvKSkKQEAgLTk2MSw2ICs5NzMsOCBAQAogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ193YWl0aW5nX29uID0KIAkJCQkJQWlmRW5Db250YWluZXJDaGFuZ2U7CiAJCQkJZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX25lZWRlZCA9IERFTEVURTsKKwkJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCA9CisJCQkJCWppZmZpZXM7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC05NjksOCArOTgzLDkgQEAKIAlkZXZpY2VfY29uZmlnX25lZWRlZCA9IE5PVEhJTkc7CiAJZm9yIChjb250YWluZXIgPSAwOyBjb250YWluZXIgPCBkZXYtPm1heGltdW1fbnVtX2NvbnRhaW5lcnM7CiAJICAgICsrY29udGFpbmVyKSB7Ci0JCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0gMCkKLQkJICYmIChkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkICE9IE5PVEhJTkcpKSB7CisJCWlmICgoZGV2LT5mc2FfZGV2W2NvbnRhaW5lcl0uY29uZmlnX3dhaXRpbmdfb24gPT0gMCkgJiYKKwkJCShkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkICE9IE5PVEhJTkcpICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfd2FpdGluZ19zdGFtcCArIEFJRl9TTklGRl9USU1FT1VUKSkgewogCQkJZGV2aWNlX2NvbmZpZ19uZWVkZWQgPQogCQkJCWRldi0+ZnNhX2Rldltjb250YWluZXJdLmNvbmZpZ19uZWVkZWQ7CiAJCQlkZXYtPmZzYV9kZXZbY29udGFpbmVyXS5jb25maWdfbmVlZGVkID0gTk9USElORzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCmluZGV4IDcyMDMzMDcuLjZlZjg5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwpAQCAtMjcsMTIgKzI3LDYgQEAKICAqIEFic3RyYWN0OiBMaW51eCBEcml2ZXIgZW50cnkgbW9kdWxlIGZvciBBZGFwdGVjIFJBSUQgQXJyYXkgQ29udHJvbGxlcgogICovCiAKLSNkZWZpbmUgQUFDX0RSSVZFUl9WRVJTSU9OCQkiMS4xLTQiCi0jaWZuZGVmIEFBQ19EUklWRVJfQlJBTkNICi0jZGVmaW5lIEFBQ19EUklWRVJfQlJBTkNICQkiIgotI2VuZGlmCi0jZGVmaW5lIEFBQ19EUklWRVJfQlVJTERfREFURQkJX19EQVRFX18gIiAiIF9fVElNRV9fCi0jZGVmaW5lIEFBQ19EUklWRVJOQU1FCQkJImFhY3JhaWQiCiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KQEAgLTYyLDYgKzU2LDEzIEBACiAKICNpbmNsdWRlICJhYWNyYWlkLmgiCiAKKyNkZWZpbmUgQUFDX0RSSVZFUl9WRVJTSU9OCQkiMS4xLTUiCisjaWZuZGVmIEFBQ19EUklWRVJfQlJBTkNICisjZGVmaW5lIEFBQ19EUklWRVJfQlJBTkNICQkiIgorI2VuZGlmCisjZGVmaW5lIEFBQ19EUklWRVJfQlVJTERfREFURQkJX19EQVRFX18gIiAiIF9fVElNRV9fCisjZGVmaW5lIEFBQ19EUklWRVJOQU1FCQkJImFhY3JhaWQiCisKICNpZmRlZiBBQUNfRFJJVkVSX0JVSUxECiAjZGVmaW5lIF9zdHIoeCkgI3gKICNkZWZpbmUgc3RyKHgpIF9zdHIoeCkKQEAgLTczLDcgKzc0LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlJlZCBIYXQgSW5jIGFuZCBBZGFwdGVjIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgUEVSQzIsIDIvU2ksIDMvU2ksIDMvRGksICIKIAkJICAgIkFkYXB0ZWMgQWR2YW5jZWQgUmFpZCBQcm9kdWN0cywgIgotCQkgICAiYW5kIEhQIE5ldFJBSUQtNE0gU0NTSSBkcml2ZXIiKTsKKwkJICAgIkhQIE5ldFJBSUQtNE0sIElCTSBTZXJ2ZVJBSUQgJiBJQ1AgU0NTSSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFBQ19EUklWRVJfRlVMTF9WRVJTSU9OKTsKIApAQCAtMjQzLDYgKzI0NCw3IEBACiBzdGF0aWMgaW50IGFhY19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKIAljbWQtPnNjc2lfZG9uZSA9IGRvbmU7CisJY21kLT5TQ3AucGhhc2UgPSBBQUNfT1dORVJfTE9XTEVWRUw7CiAJcmV0dXJuIChhYWNfc2NzaV9jbWQoY21kKSA/IEZBSUxFRCA6IDApOwogfSAKIApAQCAtNDcxLDcgKzQ3Myw4IEBACiAJCV9fc2hvc3RfZm9yX2VhY2hfZGV2aWNlKGRldiwgaG9zdCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bGlzdF9sb2NrLCBmbGFncyk7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbW1hbmQsICZkZXYtPmNtZF9saXN0LCBsaXN0KSB7Ci0JCQkJaWYgKGNvbW1hbmQtPnNlcmlhbF9udW1iZXIpIHsKKwkJCQlpZiAoKGNvbW1hbmQgIT0gY21kKSAmJgorCQkJCSAgICAoY29tbWFuZC0+U0NwLnBoYXNlID09IEFBQ19PV05FUl9GSVJNV0FSRSkpIHsKIAkJCQkJYWN0aXZlKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTU2OSwxMiArNTcyLDEyIEBACiAJCQogCQlmID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpmKSk7CiAJCXJldCA9IDA7Ci0JCWlmIChjbGVhcl91c2VyKGYsIHNpemVvZigqZikgIT0gc2l6ZW9mKCpmKSkpCisJCWlmIChjbGVhcl91c2VyKGYsIHNpemVvZigqZikpICE9IHNpemVvZigqZikpCiAJCQlyZXQgPSAtRUZBVUxUOwogCQlpZiAoY29weV9pbl91c2VyKGYsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHN0cnVjdCBmaWJfaW9jdGwpIC0gc2l6ZW9mKHUzMikpKQogCQkJcmV0ID0gLUVGQVVMVDsKIAkJaWYgKCFyZXQpCi0JCQlyZXQgPSBhYWNfZG9faW9jdGwoZGV2LCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCQlyZXQgPSBhYWNfZG9faW9jdGwoZGV2LCBjbWQsIGYpOwogCQlicmVhazsKIAl9CiAKQEAgLTY4Nyw2ICs2OTAsMTggQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgc3NpemVfdCBhYWNfc2hvd19tYXhfY2hhbm5lbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkgIGNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPm1heF9jaGFubmVsKTsKK30KKworc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbWF4X2lkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCSAgY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KS0+bWF4X2lkKTsKK30KKwogCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21vZGVsID0gewogCS5hdHRyID0gewpAQCAtNzMwLDYgKzc0NSwyMCBAQAogCX0sCiAJLnNob3cgPSBhYWNfc2hvd19zZXJpYWxfbnVtYmVyLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhYWNfbWF4X2NoYW5uZWwgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gIm1heF9jaGFubmVsIiwKKwkJLm1vZGUgPSBTX0lSVUdPLAorCX0sCisJLnNob3cgPSBhYWNfc2hvd19tYXhfY2hhbm5lbCwKK307CitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21heF9pZCA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAibWF4X2lkIiwKKwkJLm1vZGUgPSBTX0lSVUdPLAorCX0sCisJLnNob3cgPSBhYWNfc2hvd19tYXhfaWQsCit9OwogCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmFhY19hdHRyc1tdID0gewogCSZhYWNfbW9kZWwsCkBAIC03MzgsNiArNzY3LDggQEAKIAkmYWFjX21vbml0b3JfdmVyc2lvbiwKIAkmYWFjX2Jpb3NfdmVyc2lvbiwKIAkmYWFjX3NlcmlhbF9udW1iZXIsCisJJmFhY19tYXhfY2hhbm5lbCwKKwkmYWFjX21heF9pZCwKIAlOVUxMCiB9OwogCkBAIC03NzUsNiArODA2LDcgQEAKIAkuY21kX3Blcl9sdW4gICAgCQk9IEFBQ19OVU1fSU9fRklCLCAKICNlbmRpZgkKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5lbXVsYXRlZCAgICAgICAgICAgICAgICAgICAgICAgPSAxLAogfTsKIAogCkBAIC03OTgsMTAgKzgzMCwxMSBAQAogCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKKwllcnJvciA9IC1FTk9ERVY7CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgfHwgCiAJCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZGlzYWJsZV9wZGV2OwogCS8qCiAJICogSWYgdGhlIHF1aXJrMzEgYml0IGlzIHNldCwgdGhlIGFkYXB0ZXIgbmVlZHMgYWRhcHRlcgogCSAqIHRvIGRyaXZlciBjb21tdW5pY2F0aW9uIG1lbW9yeSB0byBiZSBhbGxvY2F0ZWQgYmVsb3cgMmdpZwpAQCAtODA5LDcgKzg0Miw3IEBACiAJaWYgKGFhY19kcml2ZXJzW2luZGV4XS5xdWlya3MgJiBBQUNfUVVJUktfMzFCSVQpIAogCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzFCSVRfTUFTSykgfHwKIAkJCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMxQklUX01BU0spKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTkwNCw5ICs5MzcsOSBAQAogCSAqIHBoeXNpY2FsIGNoYW5uZWxzIGFyZSBhZGRyZXNzIGJ5IHRoZWlyIGFjdHVhbCBwaHlzaWNhbCBudW1iZXIrMQogCSAqLwogCWlmIChhYWMtPm5vbmRhc2Rfc3VwcG9ydCA9PSAxKQotCQlzaG9zdC0+bWF4X2NoYW5uZWwgPSBhYWMtPm1heGltdW1fbnVtX2NoYW5uZWxzICsgMTsKKwkJc2hvc3QtPm1heF9jaGFubmVsID0gYWFjLT5tYXhpbXVtX251bV9jaGFubmVsczsKIAllbHNlCi0JCXNob3N0LT5tYXhfY2hhbm5lbCA9IDE7CisJCXNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CiAKIAlhYWNfZ2V0X2NvbmZpZ19zdGF0dXMoYWFjKTsKIAlhYWNfZ2V0X2NvbnRhaW5lcnMoYWFjKTsKQEAgLTEwMjAsNyArMTA1Myw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhYWNfZXhpdCh2b2lkKQogewotCXVucmVnaXN0ZXJfY2hyZGV2KGFhY19jZmdfbWFqb3IsICJhYWMiKTsKKwlpZiAoYWFjX2NmZ19tYWpvciA+IC0xKQorCQl1bnJlZ2lzdGVyX2NocmRldihhYWNfY2ZnX21ham9yLCAiYWFjIik7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhYWNfcGNpX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3JrdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMKaW5kZXggZTliNzc1ZC4uN2EyM2UwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkvKgogCQkgKglZaWVsZCB0aGUgcHJvY2Vzc29yIGluIGNhc2Ugd2UgYXJlIHNsb3cgCiAJCSAqLwotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJbXNsZWVwKDEpOwogCX0KIAlpZiAob2sgIT0gMSkgewogCQkvKgpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCSAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LCBzaXplb2Yoc3RydWN0IFBPU1RTVEFUVVMpLAogCQkgIHBvc3QsIHBhZGRyKTsKLSAgICAgICAgICAgICAgICBpZiAoKGJ1ZmZlclswXSA9PSAnMCcpICYmIChidWZmZXJbMV0gPT0gJ3gnKSkgeworICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyWzBdID09ICcwJykgJiYgKChidWZmZXJbMV0gPT0gJ3gnKSB8fCAoYnVmZmVyWzFdID09ICdYJykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAoYnVmZmVyWzJdIDw9ICc5JykgPyAoYnVmZmVyWzJdIC0gJzAnKSA6IChidWZmZXJbMl0gLSAnQScgKyAxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPDw9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gKGJ1ZmZlclszXSA8PSAnOScpID8gKGJ1ZmZlclszXSAtICcwJykgOiAoYnVmZmVyWzNdIC0gJ0EnICsgMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKaW5kZXggNjk5OGJjOC4uNzI5YjllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJLyoKIAkJICoJWWllbGQgdGhlIHByb2Nlc3NvciBpbiBjYXNlIHdlIGFyZSBzbG93IAogCQkgKi8KLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJCW1zbGVlcCgxKTsKIAl9CiAJaWYgKG9rICE9IDEpIHsKIAkJLyoKQEAgLTM0Miw3ICszNDIsNyBAQAogCQkgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwgc2l6ZW9mKHN0cnVjdCBQT1NUU1RBVFVTKSwKIAkJICBwb3N0LCBwYWRkcik7Ci0JCWlmICgoYnVmZmVyWzBdID09ICcwJykgJiYgKGJ1ZmZlclsxXSA9PSAneCcpKSB7CisJCWlmICgoYnVmZmVyWzBdID09ICcwJykgJiYgKChidWZmZXJbMV0gPT0gJ3gnKSB8fCAoYnVmZmVyWzFdID09ICdYJykpKSB7CiAJCQlyZXQgPSAoYnVmZmVyWzJdIDw9ICc5JykgPyAoYnVmZmVyWzJdIC0gJzAnKSA6IChidWZmZXJbMl0gLSAnQScgKyAxMCk7CiAJCQlyZXQgPDw9IDQ7CiAJCQlyZXQgKz0gKGJ1ZmZlclszXSA8PSAnOScpID8gKGJ1ZmZlclszXSAtICcwJykgOiAoYnVmZmVyWzNdIC0gJ0EnICsgMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMKaW5kZXggNDY2ZjA1Yy4uYTUzNDU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9zYS5jCkBAIC0xODksNyArMTg5LDcgQEAKIAkJCW9rID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQltc2xlZXAoMSk7CiAJfQogCiAJaWYgKG9rICE9IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCmluZGV4IDI4YjkzMDUuLjJhNDE5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCkBAIC0yMDUxLDcgKzIwNTEsNyBAQAogI2RlZmluZSBBRFZfVkFERFJfVE9fVTMyICAgdmlydF90b19idXMKICNkZWZpbmUgQURWX1UzMl9UT19WQUREUiAgIGJ1c190b192aXJ0CiAKLSNkZWZpbmUgQWR2UG9ydEFkZHIgIHVsb25nICAgICAgICAgICAgICAvKiBWaXJ0dWFsIG1lbW9yeSBhZGRyZXNzIHNpemUgKi8KKyNkZWZpbmUgQWR2UG9ydEFkZHIgIHZvaWQgX19pb21lbSAqICAgICAvKiBWaXJ0dWFsIG1lbW9yeSBhZGRyZXNzIHNpemUgKi8KIAogLyoKICAqIERlZmluZSBBZHYgTGlicmFyeSByZXF1aXJlZCBtZW1vcnkgYWNjZXNzIG1hY3Jvcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGNpLmMgYi9kcml2ZXJzL3Njc2kvYWhjaS5jCmluZGV4IDFiZDgyYzQuLmI0ZjhmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoY2kuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBBSENJX01BWF9TRywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L0tjb25maWcuYWljN3h4eCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L0tjb25maWcuYWljN3h4eAppbmRleCA2YzJjMzk1Li41NTE3ZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9LY29uZmlnLmFpYzd4eHgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvS2NvbmZpZy5haWM3eHh4CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIGRlZmF1bHQgIjAiCiAgICAgICAgIGhlbHAKIAlCaXQgbWFzayBvZiBkZWJ1ZyBvcHRpb25zIHRoYXQgaXMgb25seSB2YWxpZCBpZiB0aGUKLQlDT05GSUdfQUlDN1hYWF9ERUJVR19FTkJMRSBvcHRpb24gaXMgZW5hYmxlZC4gIFRoZSBiaXRzIGluIHRoaXMgbWFzaworCUNPTkZJR19BSUM3WFhYX0RFQlVHX0VOQUJMRSBvcHRpb24gaXMgZW5hYmxlZC4gIFRoZSBiaXRzIGluIHRoaXMgbWFzawogCWFyZSBkZWZpbmVkIGluIHRoZSBkcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmggLSBzZWFyY2ggZm9yIHRoZQogCXZhcmlhYmxlIGFoY19kZWJ1ZyBpbiB0aGF0IGZpbGUgdG8gZmluZCB0aGVtLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKaW5kZXggMWQxMWY3ZS4uYmI1MTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaApAQCAtMzcyLDcgKzM3Miw3IEBACiAJQUhEX0NVUlJFTlRfU0VOU0lORyAgID0gMHg0MDAwMCwKIAlBSERfU0NCX0NPTkZJR19VU0VEICAgPSAweDgwMDAwLC8qIE5vIFNFRVBST00gYnV0IFNDQiBoYWQgaW5mby4gKi8KIAlBSERfSFBfQk9BUkQJICAgICAgPSAweDEwMDAwMCwKLQlBSERfUkVTRVRfUE9MTF9BQ1RJVkUgPSAweDIwMDAwMCwKKwlBSERfQlVTX1JFU0VUX0FDVElWRSAgPSAweDIwMDAwMCwKIAlBSERfVVBEQVRFX1BFTkRfQ01EUyAgPSAweDQwMDAwMCwKIAlBSERfUlVOTklOR19RT1VURklGTyAgPSAweDgwMDAwMCwKIAlBSERfSEFEX0ZJUlNUX1NFTCAgICAgPSAweDEwMDAwMDAKQEAgLTU4OSw3ICs1ODksNyBAQAogCVNDQl9QQUNLRVRJWkVECQk9IDB4MDA4MDAsCiAJU0NCX0VYUEVDVF9QUFJfQlVTRlJFRQk9IDB4MDEwMDAsCiAJU0NCX1BLVF9TRU5TRQkJPSAweDAyMDAwLAotCVNDQl9DTURQSEFTRV9BQk9SVAk9IDB4MDQwMDAsCisJU0NCX0VYVEVSTkFMX1JFU0VUCT0gMHgwNDAwMCwvKiBEZXZpY2Ugd2FzIHJlc2V0IGV4dGVybmFsbHkgKi8KIAlTQ0JfT05fQ09MX0xJU1QJCT0gMHgwODAwMCwKIAlTQ0JfU0lMRU5UCQk9IDB4MTAwMDAgLyoKIAkJCQkJICAgKiBCZSBxdWlldCBhYm91dCB0cmFuc21pc3Npb24gdHlwZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwppbmRleCAzMjZhNjIyLi4wODc3MWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwpAQCAtMjA3LDcgKzIwNyw2IEBACiBzdGF0aWMgdV9pbnQJCWFoZF9yZW1fd3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHNjYmlkLAogCQkJCSAgICAgdV9pbnQgcHJldiwgdV9pbnQgbmV4dCwgdV9pbnQgdGlkKTsKIHN0YXRpYyB2b2lkCQlhaGRfcmVzZXRfY3VycmVudF9idXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBhaGRfY2FsbGJhY2tfdAlhaGRfcmVzZXRfcG9sbDsKIHN0YXRpYyBhaGRfY2FsbGJhY2tfdAlhaGRfc3RhdF90aW1lcjsKICNpZmRlZiBBSERfRFVNUF9TRVEKIHN0YXRpYyB2b2lkCQlhaGRfZHVtcHNlcShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwpAQCAtMTA1NCwxMiArMTA1MywxMCBAQAogCQkJICogSWYgYSB0YXJnZXQgdGFrZXMgdXMgaW50byB0aGUgY29tbWFuZCBwaGFzZQogCQkJICogYXNzdW1lIHRoYXQgaXQgaGFzIGJlZW4gZXh0ZXJuYWxseSByZXNldCBhbmQKIAkJCSAqIGhhcyB0aHVzIGxvc3Qgb3VyIHByZXZpb3VzIHBhY2tldGl6ZWQgbmVnb3RpYXRpb24KLQkJCSAqIGFncmVlbWVudC4gIFNpbmNlIHdlIGhhdmUgbm90IHNlbnQgYW4gaWRlbnRpZnkKLQkJCSAqIG1lc3NhZ2UgYW5kIG1heSBub3QgaGF2ZSBmdWxseSBxdWFsaWZpZWQgdGhlCi0JCQkgKiBjb25uZWN0aW9uLCB3ZSBjaGFuZ2Ugb3VyIGNvbW1hbmQgdG8gVFVSLCBhc3NlcnQKLQkJCSAqIEFUTiBhbmQgQUJPUlQgdGhlIHRhc2sgd2hlbiB3ZSBnbyB0byBtZXNzYWdlIGluCi0JCQkgKiBwaGFzZS4gIFRoZSBPU00gd2lsbCBzZWUgdGhlIFJFUVVFVUVfUkVRVUVTVAotCQkJICogc3RhdHVzIGFuZCByZXRyeSB0aGUgY29tbWFuZC4KKwkJCSAqIGFncmVlbWVudC4KKwkJCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlCisJCQkgKiBjYW4gcmVuZWdvdGlhdGUgd2l0aCB0aGUgZGV2aWNlIGFuZCBub3RpZnkKKwkJCSAqIHRoZSBPU00gYWJvdXQgdGhlIHJlc2V0LgogCQkJICovCiAJCQlzY2JpZCA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJCQlzY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIHNjYmlkKTsKQEAgLTEwODYsMzEgKzEwODMsMTUgQEAKIAkJCWFoZF9zZXRfc3luY3JhdGUoYWhkLCAmZGV2aW5mbywgLypwZXJpb2QqLzAsCiAJCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKIAkJCQkJIEFIRF9UUkFOU19BQ1RJVkUsIC8qcGF1c2VkKi9UUlVFKTsKLQkJCWFoZF9vdXRiKGFoZCwgU0NCX0NEQl9TVE9SRSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMiwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrMywgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrNCwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfU1RPUkUrNSwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNDQl9DREJfTEVOLCA2KTsKLQkJCXNjYi0+aHNjYi0+Y29udHJvbCAmPSB+KFRBR19FTkJ8U0NCX1RBR19UWVBFKTsKLQkJCXNjYi0+aHNjYi0+Y29udHJvbCB8PSBNS19NRVNTQUdFOwotCQkJYWhkX291dGIoYWhkLCBTQ0JfQ09OVFJPTCwgc2NiLT5oc2NiLT5jb250cm9sKTsKLQkJCWFoZF9vdXRiKGFoZCwgTVNHX09VVCwgSE9TVF9NU0cpOwotCQkJYWhkX291dGIoYWhkLCBTQVZFRF9TQ1NJSUQsIHNjYi0+aHNjYi0+c2NzaWlkKTsKLQkJCS8qCi0JCQkgKiBUaGUgbHVuIGlzIDAsIHJlZ2FyZGxlc3Mgb2YgdGhlIFNDQidzIGx1bgotCQkJICogYXMgd2UgaGF2ZSBub3Qgc2VudCBhbiBpZGVudGlmeSBtZXNzYWdlLgotCQkJICovCi0JCQlhaGRfb3V0YihhaGQsIFNBVkVEX0xVTiwgMCk7Ci0JCQlhaGRfb3V0YihhaGQsIFNFUV9GTEFHUywgMCk7Ci0JCQlhaGRfYXNzZXJ0X2F0bihhaGQpOwotCQkJc2NiLT5mbGFncyAmPSB+U0NCX1BBQ0tFVElaRUQ7Ci0JCQlzY2ItPmZsYWdzIHw9IFNDQl9BQk9SVHxTQ0JfQ01EUEhBU0VfQUJPUlQ7CisJCQlzY2ItPmZsYWdzIHw9IFNDQl9FWFRFUk5BTF9SRVNFVDsKIAkJCWFoZF9mcmVlemVfZGV2cShhaGQsIHNjYik7CiAJCQlhaGRfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhzY2IsIENBTV9SRVFVRVVFX1JFUSk7CiAJCQlhaGRfZnJlZXplX3NjYihzY2IpOwogCisJCQkvKiBOb3RpZnkgWFBUICovCisJCQlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgZGV2aW5mby50YXJnZXQsCisJCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1NFTlRfQkRSLCBOVUxMKTsKKwogCQkJLyoKIAkJCSAqIEFsbG93IHRoZSBzZXF1ZW5jZXIgdG8gY29udGludWUgd2l0aAogCQkJICogbm9uLXBhY2sgcHJvY2Vzc2luZy4KQEAgLTE1MzQsNiArMTUxNSwxOCBAQAogCWxxaXN0YXQxID0gYWhkX2luYihhaGQsIExRSVNUQVQxKTsKIAlscW9zdGF0MCA9IGFoZF9pbmIoYWhkLCBMUU9TVEFUMCk7CiAJYnVzZnJlZXRpbWUgPSBhaGRfaW5iKGFoZCwgU1NUQVQyKSAmIEJVU0ZSRUVUSU1FOworCisJLyoKKwkgKiBJZ25vcmUgZXh0ZXJuYWwgcmVzZXRzIGFmdGVyIGEgYnVzIHJlc2V0LgorCSAqLworCWlmICgoKHN0YXR1cyAmIFNDU0lSU1RJKSAhPSAwKSAmJiAoYWhkLT5mbGFncyAmIEFIRF9CVVNfUkVTRVRfQUNUSVZFKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDbGVhciBidXMgcmVzZXQgZmxhZworCSAqLworCWFoZC0+ZmxhZ3MgJj0gfkFIRF9CVVNfUkVTRVRfQUNUSVZFOworCiAJaWYgKChzdGF0dXMwICYgKFNFTERJfFNFTERPKSkgIT0gMCkgewogCQl1X2ludCBzaW1vZGUwOwogCkBAIC0yMjA3LDIyICsyMjAwLDYgQEAKIAkJCWlmIChzZW50X21zZyA9PSBNU0dfQUJPUlRfVEFHKQogCQkJCXRhZyA9IFNDQl9HRVRfVEFHKHNjYik7CiAKLQkJCWlmICgoc2NiLT5mbGFncyAmIFNDQl9DTURQSEFTRV9BQk9SVCkgIT0gMCkgewotCQkJCS8qCi0JCQkJICogVGhpcyBhYm9ydCBpcyBpbiByZXNwb25zZSB0byBhbgotCQkJCSAqIHVuZXhwZWN0ZWQgc3dpdGNoIHRvIGNvbW1hbmQgcGhhc2UKLQkJCQkgKiBmb3IgYSBwYWNrZXRpemVkIGNvbm5lY3Rpb24uICBTaW5jZQotCQkJCSAqIHRoZSBpZGVudGlmeSBtZXNzYWdlIHdhcyBuZXZlciBzZW50LAotCQkJCSAqICJzYXZlZCBsdW4iIGlzIDAuICBXZSByZWFsbHkgd2FudCB0bwotCQkJCSAqIGFib3J0IG9ubHkgdGhlIFNDQiB0aGF0IGVuY291bnRlcmVkCi0JCQkJICogdGhpcyBlcnJvciwgd2hpY2ggY291bGQgaGF2ZSBhIGRpZmZlcmVudAotCQkJCSAqIGx1bi4gIFRoZSBTQ0Igd2lsbCBiZSByZXRyaWVkIHNvIHRoZSBPUwotCQkJCSAqIHdpbGwgc2VlIHRoZSBVQSBhZnRlciByZW5lZ290aWF0aW5nIHRvCi0JCQkJICogcGFja2V0aXplZC4KLQkJCQkgKi8KLQkJCQl0YWcgPSBTQ0JfR0VUX1RBRyhzY2IpOwotCQkJCXNhdmVkX2x1biA9IHNjYi0+aHNjYi0+bHVuOwotCQkJfQogCQkJZm91bmQgPSBhaGRfYWJvcnRfc2NicyhhaGQsIHRhcmdldCwgJ0EnLCBzYXZlZF9sdW4sCiAJCQkJCSAgICAgICB0YWcsIFJPTEVfSU5JVElBVE9SLAogCQkJCQkgICAgICAgQ0FNX1JFUV9BQk9SVEVEKTsKQEAgLTc4NDcsNiArNzgyNCwxNyBAQAogCWludAlmb3VuZDsKIAl1X2ludAlmaWZvOwogCXVfaW50CW5leHRfZmlmbzsKKwl1aW50OF90IHNjc2lzZXE7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBsYXN0IGJ1cyByZXNldCBpcyBjbGVhcmVkCisJICovCisJaWYgKGFoZC0+ZmxhZ3MgJiBBSERfQlVTX1JFU0VUX0FDVElWRSkgeworCQlwcmludGYoIiVzOiBidXMgcmVzZXQgc3RpbGwgYWN0aXZlXG4iLAorCQkgICAgICAgYWhkX25hbWUoYWhkKSk7CisJCXJldHVybiAwOworCX0KKwlhaGQtPmZsYWdzIHw9IEFIRF9CVVNfUkVTRVRfQUNUSVZFOwogCiAJYWhkLT5wZW5kaW5nX2RldmljZSA9IE5VTEw7CiAKQEAgLTc4NjAsNiArNzg0OCwxMiBAQAogCS8qIE1ha2Ugc3VyZSB0aGUgc2VxdWVuY2VyIGlzIGluIGEgc2FmZSBsb2NhdGlvbi4gKi8KIAlhaGRfY2xlYXJfY3JpdGljYWxfc2VjdGlvbihhaGQpOwogCisJLyoKKwkgKiBSdW4gb3VyIGNvbW1hbmQgY29tcGxldGUgZmlmb3MgdG8gZW5zdXJlIHRoYXQgd2UgcGVyZm9ybQorCSAqIGNvbXBsZXRpb24gcHJvY2Vzc2luZyBvbiBhbnkgY29tbWFuZHMgdGhhdCAnY29tcGxldGVkJworCSAqIGJlZm9yZSB0aGUgcmVzZXQgb2NjdXJyZWQuCisJICovCisJYWhkX3J1bl9xb3V0ZmlmbyhhaGQpOwogI2lmZGVmIEFIRF9UQVJHRVRfTU9ERQogCWlmICgoYWhkLT5mbGFncyAmIEFIRF9UQVJHRVRST0xFKSAhPSAwKSB7CiAJCWFoZF9ydW5fdHFpbmZpZm8oYWhkLCAvKnBhdXNlZCovVFJVRSk7CkBAIC03OTI0LDMwICs3OTE4LDE0IEBACiAJYWhkX2NsZWFyX2ZpZm8oYWhkLCAxKTsKIAogCS8qCi0JICogUmV2ZXJ0IHRvIGFzeW5jL25hcnJvdyB0cmFuc2ZlcnMgdW50aWwgd2UgcmVuZWdvdGlhdGUuCisJICogUmVlbmFibGUgc2VsZWN0aW9ucwogCSAqLworCWFoZF9vdXRiKGFoZCwgU0lNT0RFMSwgYWhkX2luYihhaGQsIFNJTU9ERTEpIHwgRU5TQ1NJUlNUKTsKKwlzY3Npc2VxID0gYWhkX2luYihhaGQsIFNDU0lTRVFfVEVNUExBVEUpOworCWFoZF9vdXRiKGFoZCwgU0NTSVNFUTEsIHNjc2lzZXEgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOworCiAJbWF4X3Njc2lpZCA9IChhaGQtPmZlYXR1cmVzICYgQUhEX1dJREUpID8gMTUgOiA3OwotCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDw9IG1heF9zY3NpaWQ7IHRhcmdldCsrKSB7Ci0KLQkJaWYgKGFoZC0+ZW5hYmxlZF90YXJnZXRzW3RhcmdldF0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGluaXRpYXRvciA9IDA7IGluaXRpYXRvciA8PSBtYXhfc2NzaWlkOyBpbml0aWF0b3IrKykgewotCQkJc3RydWN0IGFoZF9kZXZpbmZvIGRldmluZm87Ci0KLQkJCWFoZF9jb21waWxlX2RldmluZm8oJmRldmluZm8sIHRhcmdldCwgaW5pdGlhdG9yLAotCQkJCQkgICAgQ0FNX0xVTl9XSUxEQ0FSRCwKLQkJCQkJICAgICdBJywgUk9MRV9VTktOT1dOKTsKLQkJCWFoZF9zZXRfd2lkdGgoYWhkLCAmZGV2aW5mbywgTVNHX0VYVF9XRFRSX0JVU184X0JJVCwKLQkJCQkgICAgICBBSERfVFJBTlNfQ1VSLCAvKnBhdXNlZCovVFJVRSk7Ci0JCQlhaGRfc2V0X3N5bmNyYXRlKGFoZCwgJmRldmluZm8sIC8qcGVyaW9kKi8wLAotCQkJCQkgLypvZmZzZXQqLzAsIC8qcHByX29wdGlvbnMqLzAsCi0JCQkJCSBBSERfVFJBTlNfQ1VSLCAvKnBhdXNlZCovVFJVRSk7Ci0JCX0KLQl9Ci0KICNpZmRlZiBBSERfVEFSR0VUX01PREUKLQltYXhfc2NzaWlkID0gKGFoZC0+ZmVhdHVyZXMgJiBBSERfV0lERSkgPyAxNSA6IDc7Ci0KIAkvKgogCSAqIFNlbmQgYW4gaW1tZWRpYXRlIG5vdGlmeSBjY2IgdG8gYWxsIHRhcmdldCBtb3JlIHBlcmlwaGVyYWwKIAkgKiBkcml2ZXJzIGFmZmVjdGVkIGJ5IHRoaXMgYWN0aW9uLgpAQCAtNzk3NSw1MyArNzk1MywzMyBAQAogCS8qIE5vdGlmeSB0aGUgWFBUIHRoYXQgYSBidXMgcmVzZXQgb2NjdXJyZWQgKi8KIAlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKIAkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX0JVU19SRVNFVCwgTlVMTCk7Ci0JYWhkX3Jlc3RhcnQoYWhkKTsKKwogCS8qCi0JICogRnJlZXplIHRoZSBTSU1RIHVudGlsIG91ciBwb2xsZXIgY2FuIGRldGVybWluZSB0aGF0Ci0JICogdGhlIGJ1cyByZXNldCBoYXMgcmVhbGx5IGdvbmUgYXdheS4gIFdlIHNldCB0aGUgaW5pdGlhbAotCSAqIHRpbWVyIHRvIDAgdG8gaGF2ZSB0aGUgY2hlY2sgcGVyZm9ybWVkIGFzIHNvb24gYXMgcG9zc2libGUKLQkgKiBmcm9tIHRoZSB0aW1lciBjb250ZXh0LgorCSAqIFJldmVydCB0byBhc3luYy9uYXJyb3cgdHJhbnNmZXJzIHVudGlsIHdlIHJlbmVnb3RpYXRlLgogCSAqLwotCWlmICgoYWhkLT5mbGFncyAmIEFIRF9SRVNFVF9QT0xMX0FDVElWRSkgPT0gMCkgewotCQlhaGQtPmZsYWdzIHw9IEFIRF9SRVNFVF9QT0xMX0FDVElWRTsKLQkJYWhkX2ZyZWV6ZV9zaW1xKGFoZCk7Ci0JCWFoZF90aW1lcl9yZXNldCgmYWhkLT5yZXNldF90aW1lciwgMCwgYWhkX3Jlc2V0X3BvbGwsIGFoZCk7CisJZm9yICh0YXJnZXQgPSAwOyB0YXJnZXQgPD0gbWF4X3Njc2lpZDsgdGFyZ2V0KyspIHsKKworCQlpZiAoYWhkLT5lbmFibGVkX3RhcmdldHNbdGFyZ2V0XSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWZvciAoaW5pdGlhdG9yID0gMDsgaW5pdGlhdG9yIDw9IG1heF9zY3NpaWQ7IGluaXRpYXRvcisrKSB7CisJCQlzdHJ1Y3QgYWhkX2RldmluZm8gZGV2aW5mbzsKKworCQkJYWhkX2NvbXBpbGVfZGV2aW5mbygmZGV2aW5mbywgdGFyZ2V0LCBpbml0aWF0b3IsCisJCQkJCSAgICBDQU1fTFVOX1dJTERDQVJELAorCQkJCQkgICAgJ0EnLCBST0xFX1VOS05PV04pOworCQkJYWhkX3NldF93aWR0aChhaGQsICZkZXZpbmZvLCBNU0dfRVhUX1dEVFJfQlVTXzhfQklULAorCQkJCSAgICAgIEFIRF9UUkFOU19DVVIsIC8qcGF1c2VkKi9UUlVFKTsKKwkJCWFoZF9zZXRfc3luY3JhdGUoYWhkLCAmZGV2aW5mbywgLypwZXJpb2QqLzAsCisJCQkJCSAvKm9mZnNldCovMCwgLypwcHJfb3B0aW9ucyovMCwKKwkJCQkJIEFIRF9UUkFOU19DVVIsIC8qcGF1c2VkKi9UUlVFKTsKKwkJfQogCX0KKworCWFoZF9yZXN0YXJ0KGFoZCk7CisKIAlyZXR1cm4gKGZvdW5kKTsKIH0KIAotCi0jZGVmaW5lIEFIRF9SRVNFVF9QT0xMX1VTIDEwMDAKLXN0YXRpYyB2b2lkCi1haGRfcmVzZXRfcG9sbCh2b2lkICphcmcpCi17Ci0Jc3RydWN0CWFoZF9zb2Z0YyAqYWhkID0gYXJnOwotCXVfaW50CXNjc2lzZXExOwotCXVfbG9uZwlzOwotCQotCWFoZF9sb2NrKGFoZCwgJnMpOwotCWFoZF9wYXVzZShhaGQpOwotCWFoZF91cGRhdGVfbW9kZXMoYWhkKTsKLQlhaGRfc2V0X21vZGVzKGFoZCwgQUhEX01PREVfU0NTSSwgQUhEX01PREVfU0NTSSk7Ci0JYWhkX291dGIoYWhkLCBDTFJTSU5UMSwgQ0xSU0NTSVJTVEkpOwotCWlmICgoYWhkX2luYihhaGQsIFNTVEFUMSkgJiBTQ1NJUlNUSSkgIT0gMCkgewotCQlhaGRfdGltZXJfcmVzZXQoJmFoZC0+cmVzZXRfdGltZXIsIEFIRF9SRVNFVF9QT0xMX1VTLAotCQkJCWFoZF9yZXNldF9wb2xsLCBhaGQpOwotCQlhaGRfdW5wYXVzZShhaGQpOwotCQlhaGRfdW5sb2NrKGFoZCwgJnMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUmVzZXQgaXMgbm93IGxvdy4gIENvbXBsZXRlIGNoaXAgcmVpbml0aWFsaXphdGlvbi4gKi8KLQlhaGRfb3V0YihhaGQsIFNJTU9ERTEsIGFoZF9pbmIoYWhkLCBTSU1PREUxKSB8IEVOU0NTSVJTVCk7Ci0Jc2NzaXNlcTEgPSBhaGRfaW5iKGFoZCwgU0NTSVNFUV9URU1QTEFURSk7Ci0JYWhkX291dGIoYWhkLCBTQ1NJU0VRMSwgc2NzaXNlcTEgJiAoRU5TRUxJfEVOUlNFTEl8RU5BVVRPQVROUCkpOwotCWFoZF91bnBhdXNlKGFoZCk7Ci0JYWhkLT5mbGFncyAmPSB+QUhEX1JFU0VUX1BPTExfQUNUSVZFOwotCWFoZF91bmxvY2soYWhkLCAmcyk7Ci0JYWhkX3JlbGVhc2Vfc2ltcShhaGQpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTdGF0aXN0aWNzIFByb2Nlc3NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGFoZF9zdGF0X3RpbWVyKHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCmluZGV4IGJjY2VkMGEuLjY2ZTRhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwpAQCAtNzgyLDYgKzc4Miw3IEBACiB7CiAJc3RydWN0IGFoZF9zb2Z0YyAqYWhkOwogCWludCAgICBmb3VuZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKICNpZmRlZiBBSERfREVCVUcKQEAgLTc4OSw4ICs3OTAsMTEgQEAKIAkJcHJpbnRmKCIlczogQnVzIHJlc2V0IGNhbGxlZCBmb3IgY21kICVwXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgY21kKTsKICNlbmRpZgorCWFoZF9sb2NrKGFoZCwgJmZsYWdzKTsKKwogCWZvdW5kID0gYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCBzY21kX2NoYW5uZWwoY21kKSArICdBJywKIAkJCQkgIC8qaW5pdGlhdGUgcmVzZXQqL1RSVUUpOworCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCiAJaWYgKGJvb3R2ZXJib3NlKQogCQlwcmludGYoIiVzOiBTQ1NJIGJ1cyByZXNldCBkZWxpdmVyZWQuICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKaW5kZXggY2IzMGQ5Yy4uMGM5YzJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCQlhaGMtPmZsYWdzIHw9IEFIQ18zOUJJVF9BRERSRVNTSU5HOwogCX0gZWxzZSB7CiAJCWlmIChkbWFfc2V0X21hc2soZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJCWFoY19mcmVlKGFoYyk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhaWM3eHh4OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAgICAgICAgICAgICAgICAgCXJldHVybiAoLUVOT0RFVik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCmluZGV4IDVmNTg2MTQuLjNhZGVjZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYwpAQCAtMjAzNiwxMiArMjAzNiwxMiBAQAogCSAqIHRoYXQgdGhlIE9TIGRvZXNuJ3Qga25vdyBhYm91dCBhbmQgcmVseSBvbiBvdXIgY2hpcAogCSAqIHJlc2V0IGhhbmRsZXIgdG8gaGFuZGxlIHRoZSByZXN0LgogCSAqLwotCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBERVZDT05GSUcsIC8qYnl0ZXMqLzQsCi0JCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5kZXZjb25maWcpOwotCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBQQ0lSX0NPTU1BTkQsIC8qYnl0ZXMqLzEsCi0JCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5jb21tYW5kKTsKLQlhaGNfcGNpX3dyaXRlX2NvbmZpZyhhaGMtPmRldl9zb2Z0YywgQ1NJWkVfTEFUVElNRSwgLypieXRlcyovMSwKLQkJCSAgICAgYWhjLT5idXNfc29mdGMucGNpX3NvZnRjLmNzaXplX2xhdHRpbWUpOworCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBERVZDT05GSUcsCisJCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5kZXZjb25maWcsIC8qYnl0ZXMqLzQpOworCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBQQ0lSX0NPTU1BTkQsCisJCQkgICAgIGFoYy0+YnVzX3NvZnRjLnBjaV9zb2Z0Yy5jb21tYW5kLCAvKmJ5dGVzKi8xKTsKKwlhaGNfcGNpX3dyaXRlX2NvbmZpZyhhaGMtPmRldl9zb2Z0YywgQ1NJWkVfTEFUVElNRSwKKwkJCSAgICAgYWhjLT5idXNfc29mdGMucGNpX3NvZnRjLmNzaXplX2xhdHRpbWUsIC8qYnl0ZXMqLzEpOwogCWlmICgoYWhjLT5mbGFncyAmIEFIQ19IQVNfVEVSTV9MT0dJQykgIT0gMCkgewogCQlzdHJ1Y3QJc2VlcHJvbV9kZXNjcmlwdG9yIHNkOwogCQl1X2ludAlzeGZyY3RsMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggMjRlNzFiNS4uNmRjODgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTIwOSw3ICsyMDksNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IGVmNTdmMjUuLmRmY2I5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0yOTQsMTggKzI5NCw2IEBACiAJaWYgKHNodC0+dW5jaGVja2VkX2lzYV9kbWEgJiYgcHJpdnNpemUpCiAJCWdmcF9tYXNrIHw9IF9fR0ZQX0RNQTsKIAotICAgICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhpcyBob3N0IGhhcyBhbnkgZXJyb3IgaGFuZGxpbmcgZmFjaWxpdGllcyAqLwotICAgICAgICBpZiAoIXNodC0+ZWhfc3RyYXRlZ3lfaGFuZGxlciAmJiAhc2h0LT5laF9hYm9ydF9oYW5kbGVyICYmCi0JICAgICFzaHQtPmVoX2RldmljZV9yZXNldF9oYW5kbGVyICYmICFzaHQtPmVoX2J1c19yZXNldF9oYW5kbGVyICYmCi0gICAgICAgICAgICAhc2h0LT5laF9ob3N0X3Jlc2V0X2hhbmRsZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogU0NTSSBob3N0IGAlcycgaGFzIG5vIGVycm9yIGhhbmRsaW5nXG4iCi0JCQkJIkVSUk9SOiBUaGlzIGlzIG5vdCBhIHNhZmUgd2F5IHRvIHJ1biB5b3VyICIKLQkJCQkgICAgICAgICJTQ1NJIGhvc3RcbiIKLQkJCQkiRVJST1I6IFRoZSBlcnJvciBoYW5kbGluZyBtdXN0IGJlIGFkZGVkIHRvICIKLQkJCQkidGhpcyBkcml2ZXJcbiIsIHNodC0+cHJvY19uYW1lKTsKLQkJZHVtcF9zdGFjaygpOwotICAgICAgICB9Ci0KIAlzaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBTY3NpX0hvc3QpICsgcHJpdnNpemUsIGdmcF9tYXNrKTsKIAlpZiAoIXNob3N0KQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggZWFlZmVkZC4uMmU5YmU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQkJKytpbl91c2U7CiAJCWlmIChwb29sLT5ldmVudHNbaV0uZXh0X2xpc3QpIHsKIAkJCWRtYV9mcmVlX2NvaGVyZW50KGhvc3RkYXRhLT5kZXYsCi0JCQkJICBTR19BTEwgKiBzaXplb2Yoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yKSwKKwkJCQkgIFNHX0FMTCAqIHNpemVvZihzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpLAogCQkJCSAgcG9vbC0+ZXZlbnRzW2ldLmV4dF9saXN0LAogCQkJCSAgcG9vbC0+ZXZlbnRzW2ldLmV4dF9saXN0X3Rva2VuKTsKIAkJfQpAQCAtMjg0LDQwICsyODQsMzcgQEAKIAkJCSAgICAgIHN0cnVjdCBzcnBfY21kICpzcnBfY21kLCAKIAkJCSAgICAgIGludCBudW1idWYpCiB7CisJdTggZm10OworCiAJaWYgKG51bWJ1ZiA9PSAwKQogCQlyZXR1cm47CiAJCi0JaWYgKG51bWJ1ZiA9PSAxKSB7CisJaWYgKG51bWJ1ZiA9PSAxKQorCQlmbXQgPSBTUlBfREFUQV9ERVNDX0RJUkVDVDsKKwllbHNlIHsKKwkJZm10ID0gU1JQX0RBVEFfREVTQ19JTkRJUkVDVDsKKwkJbnVtYnVmID0gbWluKG51bWJ1ZiwgTUFYX0lORElSRUNUX0JVRlMpOworCiAJCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCi0JCQlzcnBfY21kLT5kYXRhX291dF9mb3JtYXQgPSBTUlBfRElSRUNUX0JVRkZFUjsKLQkJZWxzZSAKLQkJCXNycF9jbWQtPmRhdGFfaW5fZm9ybWF0ID0gU1JQX0RJUkVDVF9CVUZGRVI7Ci0JfSBlbHNlIHsKLQkJaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewotCQkJc3JwX2NtZC0+ZGF0YV9vdXRfZm9ybWF0ID0gU1JQX0lORElSRUNUX0JVRkZFUjsKLQkJCXNycF9jbWQtPmRhdGFfb3V0X2NvdW50ID0KLQkJCQludW1idWYgPCBNQVhfSU5ESVJFQ1RfQlVGUyA/Ci0JCQkJCW51bWJ1ZjogTUFYX0lORElSRUNUX0JVRlM7Ci0JCX0gZWxzZSB7Ci0JCQlzcnBfY21kLT5kYXRhX2luX2Zvcm1hdCA9IFNSUF9JTkRJUkVDVF9CVUZGRVI7Ci0JCQlzcnBfY21kLT5kYXRhX2luX2NvdW50ID0KLQkJCQludW1idWYgPCBNQVhfSU5ESVJFQ1RfQlVGUyA/Ci0JCQkJCW51bWJ1ZjogTUFYX0lORElSRUNUX0JVRlM7Ci0JCX0KKwkJCXNycF9jbWQtPmRhdGFfb3V0X2Rlc2NfY250ID0gbnVtYnVmOworCQllbHNlCisJCQlzcnBfY21kLT5kYXRhX2luX2Rlc2NfY250ID0gbnVtYnVmOwogCX0KKworCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXNycF9jbWQtPmJ1Zl9mbXQgPSBmbXQgPDwgNDsKKwllbHNlCisJCXNycF9jbWQtPmJ1Zl9mbXQgPSBmbXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHVubWFwX3NnX2xpc3QoaW50IG51bV9lbnRyaWVzLCAKK3N0YXRpYyB2b2lkIHVubWFwX3NnX2xpc3QoaW50IG51bV9lbnRyaWVzLAogCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqbWQpCi17IAorCQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKm1kKQorewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpIHsKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYsCi0JCQltZFtpXS52aXJ0dWFsX2FkZHJlc3MsCi0JCQltZFtpXS5sZW5ndGgsIERNQV9CSURJUkVDVElPTkFMKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpCisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBtZFtpXS52YSwgbWRbaV0ubGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiB9CiAKIC8qKgpAQCAtMzMwLDIzICszMjcsMjYgQEAKIAkJCSAgIHN0cnVjdCBzcnBfZXZlbnRfc3RydWN0ICpldnRfc3RydWN0LAogCQkJICAgc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmICgoY21kLT5kYXRhX291dF9mb3JtYXQgPT0gU1JQX05PX0JVRkZFUikgJiYKLQkgICAgKGNtZC0+ZGF0YV9pbl9mb3JtYXQgPT0gU1JQX05PX0JVRkZFUikpCisJdTggb3V0X2ZtdCwgaW5fZm10OworCisJb3V0X2ZtdCA9IGNtZC0+YnVmX2ZtdCA+PiA0OworCWluX2ZtdCA9IGNtZC0+YnVmX2ZtdCAmICgoMVUgPDwgNCkgLSAxKTsKKworCWlmIChvdXRfZm10ID09IFNSUF9OT19EQVRBX0RFU0MgJiYgaW5fZm10ID09IFNSUF9OT19EQVRBX0RFU0MpCiAJCXJldHVybjsKLQllbHNlIGlmICgoY21kLT5kYXRhX291dF9mb3JtYXQgPT0gU1JQX0RJUkVDVF9CVUZGRVIpIHx8Ci0JCSAoY21kLT5kYXRhX2luX2Zvcm1hdCA9PSBTUlBfRElSRUNUX0JVRkZFUikpIHsKLQkJc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICpkYXRhID0KLQkJCShzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKiljbWQtPmFkZGl0aW9uYWxfZGF0YTsKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRhdGEtPnZpcnR1YWxfYWRkcmVzcywgZGF0YS0+bGVuZ3RoLAotCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJZWxzZSBpZiAob3V0X2ZtdCA9PSBTUlBfREFUQV9ERVNDX0RJUkVDVCB8fAorCQkgaW5fZm10ID09IFNSUF9EQVRBX0RFU0NfRElSRUNUKSB7CisJCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGF0YSA9CisJCQkoc3RydWN0IHNycF9kaXJlY3RfYnVmICopIGNtZC0+YWRkX2RhdGE7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkYXRhLT52YSwgZGF0YS0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKmluZGlyZWN0ID0KLQkJCShzdHJ1Y3QgaW5kaXJlY3RfZGVzY3JpcHRvciAqKWNtZC0+YWRkaXRpb25hbF9kYXRhOwotCQlpbnQgbnVtX21hcHBlZCA9IGluZGlyZWN0LT5oZWFkLmxlbmd0aCAvIAotCQkJc2l6ZW9mKGluZGlyZWN0LT5saXN0WzBdKTsKKwkJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmluZGlyZWN0ID0KKwkJCShzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqKSBjbWQtPmFkZF9kYXRhOworCQlpbnQgbnVtX21hcHBlZCA9IGluZGlyZWN0LT50YWJsZV9kZXNjLmxlbiAvCisJCQlzaXplb2Yoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKIAogCQlpZiAobnVtX21hcHBlZCA8PSBNQVhfSU5ESVJFQ1RfQlVGUykgewotCQkJdW5tYXBfc2dfbGlzdChudW1fbWFwcGVkLCBkZXYsICZpbmRpcmVjdC0+bGlzdFswXSk7CisJCQl1bm1hcF9zZ19saXN0KG51bV9tYXBwZWQsIGRldiwgJmluZGlyZWN0LT5kZXNjX2xpc3RbMF0pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTM1NiwxNyArMzU2LDE3IEBACiAKIHN0YXRpYyBpbnQgbWFwX3NnX2xpc3QoaW50IG51bV9lbnRyaWVzLCAKIAkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgICBzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKm1kKQorCQkgICAgICAgc3RydWN0IHNycF9kaXJlY3RfYnVmICptZCkKIHsKIAlpbnQgaTsKIAl1NjQgdG90YWxfbGVuZ3RoID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgKytpKSB7Ci0JCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqZGVzY3IgPSBtZCArIGk7CisJCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGVzY3IgPSBtZCArIGk7CiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZW50cnkgPSAmc2dbaV07Ci0JCWRlc2NyLT52aXJ0dWFsX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhzZ19lbnRyeSk7Ci0JCWRlc2NyLT5sZW5ndGggPSBzZ19kbWFfbGVuKHNnX2VudHJ5KTsKLQkJZGVzY3ItPm1lbW9yeV9oYW5kbGUgPSAwOworCQlkZXNjci0+dmEgPSBzZ19kbWFfYWRkcmVzcyhzZ19lbnRyeSk7CisJCWRlc2NyLT5sZW4gPSBzZ19kbWFfbGVuKHNnX2VudHJ5KTsKKwkJZGVzY3ItPmtleSA9IDA7CiAJCXRvdGFsX2xlbmd0aCArPSBzZ19kbWFfbGVuKHNnX2VudHJ5KTsKICAJfQogCXJldHVybiB0b3RhbF9sZW5ndGg7CkBAIC0zODksMTAgKzM4OSwxMCBAQAogCWludCBzZ19tYXBwZWQ7CiAJdTY0IHRvdGFsX2xlbmd0aCA9IDA7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGNtZC0+cmVxdWVzdF9idWZmZXI7Ci0Jc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICpkYXRhID0KLQkgICAgKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqKXNycF9jbWQtPmFkZGl0aW9uYWxfZGF0YTsKLQlzdHJ1Y3QgaW5kaXJlY3RfZGVzY3JpcHRvciAqaW5kaXJlY3QgPQotCSAgICAoc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKilkYXRhOworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGF0YSA9CisJCShzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKikgc3JwX2NtZC0+YWRkX2RhdGE7CisJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmluZGlyZWN0ID0KKwkJKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmICopIGRhdGE7CiAKIAlzZ19tYXBwZWQgPSBkbWFfbWFwX3NnKGRldiwgc2csIGNtZC0+dXNlX3NnLCBETUFfQklESVJFQ1RJT05BTCk7CiAKQEAgLTQwMyw5ICs0MDMsOSBAQAogCiAJLyogc3BlY2lhbCBjYXNlOyB3ZSBjYW4gdXNlIGEgc2luZ2xlIGRpcmVjdCBkZXNjcmlwdG9yICovCiAJaWYgKHNnX21hcHBlZCA9PSAxKSB7Ci0JCWRhdGEtPnZpcnR1YWxfYWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKCZzZ1swXSk7Ci0JCWRhdGEtPmxlbmd0aCA9IHNnX2RtYV9sZW4oJnNnWzBdKTsKLQkJZGF0YS0+bWVtb3J5X2hhbmRsZSA9IDA7CisJCWRhdGEtPnZhID0gc2dfZG1hX2FkZHJlc3MoJnNnWzBdKTsKKwkJZGF0YS0+bGVuID0gc2dfZG1hX2xlbigmc2dbMF0pOworCQlkYXRhLT5rZXkgPSAwOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTQxNiwyNSArNDE2LDI2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWluZGlyZWN0LT5oZWFkLnZpcnR1YWxfYWRkcmVzcyA9IDA7Ci0JaW5kaXJlY3QtPmhlYWQubGVuZ3RoID0gc2dfbWFwcGVkICogc2l6ZW9mKGluZGlyZWN0LT5saXN0WzBdKTsKLQlpbmRpcmVjdC0+aGVhZC5tZW1vcnlfaGFuZGxlID0gMDsKKwlpbmRpcmVjdC0+dGFibGVfZGVzYy52YSA9IDA7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2MubGVuID0gc2dfbWFwcGVkICogc2l6ZW9mKHN0cnVjdCBzcnBfZGlyZWN0X2J1Zik7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2Mua2V5ID0gMDsKIAogCWlmIChzZ19tYXBwZWQgPD0gTUFYX0lORElSRUNUX0JVRlMpIHsKLQkJdG90YWxfbGVuZ3RoID0gbWFwX3NnX2xpc3Qoc2dfbWFwcGVkLCBzZywgJmluZGlyZWN0LT5saXN0WzBdKTsKLQkJaW5kaXJlY3QtPnRvdGFsX2xlbmd0aCA9IHRvdGFsX2xlbmd0aDsKKwkJdG90YWxfbGVuZ3RoID0gbWFwX3NnX2xpc3Qoc2dfbWFwcGVkLCBzZywKKwkJCQkJICAgJmluZGlyZWN0LT5kZXNjX2xpc3RbMF0pOworCQlpbmRpcmVjdC0+bGVuID0gdG90YWxfbGVuZ3RoOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBnZXQgaW5kaXJlY3QgdGFibGUgKi8KIAlpZiAoIWV2dF9zdHJ1Y3QtPmV4dF9saXN0KSB7Ci0JCWV2dF9zdHJ1Y3QtPmV4dF9saXN0ID0oc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yKikKKwkJZXZ0X3N0cnVjdC0+ZXh0X2xpc3QgPSAoc3RydWN0IHNycF9kaXJlY3RfYnVmICopCiAJCQlkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCAKLQkJCQlTR19BTEwgKiBzaXplb2Yoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yKSwKLQkJCQkmZXZ0X3N0cnVjdC0+ZXh0X2xpc3RfdG9rZW4sIDApOworCQkJCQkgICBTR19BTEwgKiBzaXplb2Yoc3RydWN0IHNycF9kaXJlY3RfYnVmKSwKKwkJCQkJICAgJmV2dF9zdHJ1Y3QtPmV4dF9saXN0X3Rva2VuLCAwKTsKIAkJaWYgKCFldnRfc3RydWN0LT5leHRfbGlzdCkgewotCQkgICAgcHJpbnRrKEtFUk5fRVJSCi0JCSAgIAkiaWJtdnNjc2k6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5kaXJlY3QgdGFibGVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImlibXZzY3NpOiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluZGlyZWN0IHRhYmxlXG4iKTsKIAkJCXJldHVybiAwOwogCQkJCiAJCX0KQEAgLTQ0MiwxMSArNDQzLDExIEBACiAKIAl0b3RhbF9sZW5ndGggPSBtYXBfc2dfbGlzdChzZ19tYXBwZWQsIHNnLCBldnRfc3RydWN0LT5leHRfbGlzdCk7CQogCi0JaW5kaXJlY3QtPnRvdGFsX2xlbmd0aCA9IHRvdGFsX2xlbmd0aDsKLQlpbmRpcmVjdC0+aGVhZC52aXJ0dWFsX2FkZHJlc3MgPSBldnRfc3RydWN0LT5leHRfbGlzdF90b2tlbjsKLQlpbmRpcmVjdC0+aGVhZC5sZW5ndGggPSBzZ19tYXBwZWQgKiBzaXplb2YoaW5kaXJlY3QtPmxpc3RbMF0pOwotCW1lbWNweShpbmRpcmVjdC0+bGlzdCwgZXZ0X3N0cnVjdC0+ZXh0X2xpc3QsCi0JCU1BWF9JTkRJUkVDVF9CVUZTICogc2l6ZW9mKHN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvcikpOworCWluZGlyZWN0LT5sZW4gPSB0b3RhbF9sZW5ndGg7CisJaW5kaXJlY3QtPnRhYmxlX2Rlc2MudmEgPSBldnRfc3RydWN0LT5leHRfbGlzdF90b2tlbjsKKwlpbmRpcmVjdC0+dGFibGVfZGVzYy5sZW4gPSBzZ19tYXBwZWQgKiBzaXplb2YoaW5kaXJlY3QtPmRlc2NfbGlzdFswXSk7CisJbWVtY3B5KGluZGlyZWN0LT5kZXNjX2xpc3QsIGV2dF9zdHJ1Y3QtPmV4dF9saXN0LAorCSAgICAgICBNQVhfSU5ESVJFQ1RfQlVGUyAqIHNpemVvZihzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpKTsKIAkKICAJcmV0dXJuIDE7CiB9CkBAIC00NjMsMjAgKzQ2NCwyMCBAQAogc3RhdGljIGludCBtYXBfc2luZ2xlX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQkJICAgc3RydWN0IHNycF9jbWQgKnNycF9jbWQsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWVtb3J5X2Rlc2NyaXB0b3IgKmRhdGEgPQotCSAgICAoc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yICopc3JwX2NtZC0+YWRkaXRpb25hbF9kYXRhOworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqZGF0YSA9CisJCShzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKikgc3JwX2NtZC0+YWRkX2RhdGE7CiAKLQlkYXRhLT52aXJ0dWFsX2FkZHJlc3MgPQorCWRhdGEtPnZhID0KIAkJZG1hX21hcF9zaW5nbGUoZGV2LCBjbWQtPnJlcXVlc3RfYnVmZmVyLAogCQkJICAgICAgIGNtZC0+cmVxdWVzdF9idWZmbGVuLAogCQkJICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGF0YS0+dmlydHVhbF9hZGRyZXNzKSkgeworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkYXRhLT52YSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaWJtdnNjc2k6IFVuYWJsZSB0byBtYXAgcmVxdWVzdF9idWZmZXIgZm9yIGNvbW1hbmQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWRhdGEtPmxlbmd0aCA9IGNtZC0+cmVxdWVzdF9idWZmbGVuOwotCWRhdGEtPm1lbW9yeV9oYW5kbGUgPSAwOworCWRhdGEtPmxlbiA9IGNtZC0+cmVxdWVzdF9idWZmbGVuOworCWRhdGEtPmtleSA9IDA7CiAKIAlzZXRfc3JwX2RpcmVjdGlvbihjbWQsIHNycF9jbWQsIDEpOwogCkBAIC01NDgsNyArNTQ5LDcgQEAKIAogCS8qIENvcHkgdGhlIElVIGludG8gdGhlIHRyYW5zZmVyIGFyZWEgKi8KIAkqZXZ0X3N0cnVjdC0+eGZlcl9pdSA9IGV2dF9zdHJ1Y3QtPml1OwotCWV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5nZW5lcmljLnRhZyA9ICh1NjQpZXZ0X3N0cnVjdDsKKwlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAucnNwLnRhZyA9ICh1NjQpZXZ0X3N0cnVjdDsKIAogCS8qIEFkZCB0aGlzIHRvIHRoZSBzZW50IGxpc3QuICBXZSBuZWVkIHRvIGRvIHRoaXMgCiAJICogYmVmb3JlIHdlIGFjdHVhbGx5IHNlbmQgCkBAIC01ODYsMjcgKzU4NywyNyBAQAogCXN0cnVjdCBzcnBfcnNwICpyc3AgPSAmZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLnJzcDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gZXZ0X3N0cnVjdC0+Y21uZDsKIAotCWlmICh1bmxpa2VseShyc3AtPnR5cGUgIT0gU1JQX1JTUF9UWVBFKSkgeworCWlmICh1bmxpa2VseShyc3AtPm9wY29kZSAhPSBTUlBfUlNQKSkgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSAgICAgICAiaWJtdnNjc2k6IGJhZCBTUlAgUlNQIHR5cGUgJWRcbiIsCi0JCQkgICAgICAgcnNwLT50eXBlKTsKKwkJCSAgICAgICByc3AtPm9wY29kZSk7CiAJfQogCQogCWlmIChjbW5kKSB7CiAJCWNtbmQtPnJlc3VsdCA9IHJzcC0+c3RhdHVzOwogCQlpZiAoKChjbW5kLT5yZXN1bHQgPj4gMSkgJiAweDFmKSA9PSBDSEVDS19DT05ESVRJT04pCiAJCQltZW1jcHkoY21uZC0+c2Vuc2VfYnVmZmVyLAotCQkJICAgICAgIHJzcC0+c2Vuc2VfYW5kX3Jlc3BvbnNlX2RhdGEsCi0JCQkgICAgICAgcnNwLT5zZW5zZV9kYXRhX2xpc3RfbGVuZ3RoKTsKKwkJCSAgICAgICByc3AtPmRhdGEsCisJCQkgICAgICAgcnNwLT5zZW5zZV9kYXRhX2xlbik7CiAJCXVubWFwX2NtZF9kYXRhKCZldnRfc3RydWN0LT5pdS5zcnAuY21kLCAKIAkJCSAgICAgICBldnRfc3RydWN0LCAKIAkJCSAgICAgICBldnRfc3RydWN0LT5ob3N0ZGF0YS0+ZGV2KTsKIAotCQlpZiAocnNwLT5kb292ZXIpCi0JCQljbW5kLT5yZXNpZCA9IHJzcC0+ZGF0YV9vdXRfcmVzaWR1YWxfY291bnQ7Ci0JCWVsc2UgaWYgKHJzcC0+ZGlvdmVyKQotCQkJY21uZC0+cmVzaWQgPSByc3AtPmRhdGFfaW5fcmVzaWR1YWxfY291bnQ7CisJCWlmIChyc3AtPmZsYWdzICYgU1JQX1JTUF9GTEFHX0RPT1ZFUikKKwkJCWNtbmQtPnJlc2lkID0gcnNwLT5kYXRhX291dF9yZXNfY250OworCQllbHNlIGlmIChyc3AtPmZsYWdzICYgU1JQX1JTUF9GTEFHX0RJT1ZFUikKKwkJCWNtbmQtPnJlc2lkID0gcnNwLT5kYXRhX2luX3Jlc19jbnQ7CiAJfQogCiAJaWYgKGV2dF9zdHJ1Y3QtPmNtbmRfZG9uZSkKQEAgLTYzMywxMCArNjM0LDExIEBACiB7CiAJc3RydWN0IHNycF9jbWQgKnNycF9jbWQ7CiAJc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dF9zdHJ1Y3Q7Ci0Jc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgKmluZGlyZWN0OworCXN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmICppbmRpcmVjdDsKIAlzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSA9CiAJCShzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICopJmNtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJdTE2IGx1biA9IGx1bl9mcm9tX2RldihjbW5kLT5kZXZpY2UpOworCXU4IG91dF9mbXQsIGluX2ZtdDsKIAogCWV2dF9zdHJ1Y3QgPSBnZXRfZXZlbnRfc3RydWN0KCZob3N0ZGF0YS0+cG9vbCk7CiAJaWYgKCFldnRfc3RydWN0KQpAQCAtNjQ0LDggKzY0Niw4IEBACiAKIAkvKiBTZXQgdXAgdGhlIGFjdHVhbCBTUlAgSVUgKi8KIAlzcnBfY21kID0gJmV2dF9zdHJ1Y3QtPml1LnNycC5jbWQ7Ci0JbWVtc2V0KHNycF9jbWQsIDB4MDAsIHNpemVvZigqc3JwX2NtZCkpOwotCXNycF9jbWQtPnR5cGUgPSBTUlBfQ01EX1RZUEU7CisJbWVtc2V0KHNycF9jbWQsIDB4MDAsIFNSUF9NQVhfSVVfTEVOKTsKKwlzcnBfY21kLT5vcGNvZGUgPSBTUlBfQ01EOwogCW1lbWNweShzcnBfY21kLT5jZGIsIGNtbmQtPmNtbmQsIHNpemVvZihjbW5kLT5jbW5kKSk7CiAJc3JwX2NtZC0+bHVuID0gKCh1NjQpIGx1bikgPDwgNDg7CiAKQEAgLTY2NCwxMyArNjY2LDE1IEBACiAJZXZ0X3N0cnVjdC0+Y21uZF9kb25lID0gZG9uZTsKIAogCS8qIEZpeCB1cCBkbWEgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGl0c2VsZiAqLwotCWluZGlyZWN0ID0gKHN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yICopc3JwX2NtZC0+YWRkaXRpb25hbF9kYXRhOwotCWlmICgoKHNycF9jbWQtPmRhdGFfb3V0X2Zvcm1hdCA9PSBTUlBfSU5ESVJFQ1RfQlVGRkVSKSB8fAotCSAgICAoc3JwX2NtZC0+ZGF0YV9pbl9mb3JtYXQgPT0gU1JQX0lORElSRUNUX0JVRkZFUikpICYmCi0JICAgIChpbmRpcmVjdC0+aGVhZC52aXJ0dWFsX2FkZHJlc3MgPT0gMCkpIHsKLQkJaW5kaXJlY3QtPmhlYWQudmlydHVhbF9hZGRyZXNzID0gZXZ0X3N0cnVjdC0+Y3JxLklVX2RhdGFfcHRyICsKLQkJICAgIG9mZnNldG9mKHN0cnVjdCBzcnBfY21kLCBhZGRpdGlvbmFsX2RhdGEpICsKLQkJICAgIG9mZnNldG9mKHN0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yLCBsaXN0KTsKKwlpbmRpcmVjdCA9IChzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqKSBzcnBfY21kLT5hZGRfZGF0YTsKKwlvdXRfZm10ID0gc3JwX2NtZC0+YnVmX2ZtdCA+PiA0OworCWluX2ZtdCA9IHNycF9jbWQtPmJ1Zl9mbXQgJiAoKDFVIDw8IDQpIC0gMSk7CisJaWYgKChpbl9mbXQgPT0gU1JQX0RBVEFfREVTQ19JTkRJUkVDVCB8fAorCSAgICAgb3V0X2ZtdCA9PSBTUlBfREFUQV9ERVNDX0lORElSRUNUKSAmJgorCSAgICBpbmRpcmVjdC0+dGFibGVfZGVzYy52YSA9PSAwKSB7CisJCWluZGlyZWN0LT50YWJsZV9kZXNjLnZhID0gZXZ0X3N0cnVjdC0+Y3JxLklVX2RhdGFfcHRyICsKKwkJCW9mZnNldG9mKHN0cnVjdCBzcnBfY21kLCBhZGRfZGF0YSkgKworCQkJb2Zmc2V0b2Yoc3RydWN0IHNycF9pbmRpcmVjdF9idWYsIGRlc2NfbGlzdCk7CiAJfQogCiAJcmV0dXJuIGlibXZzY3NpX3NlbmRfc3JwX2V2ZW50KGV2dF9zdHJ1Y3QsIGhvc3RkYXRhKTsKQEAgLTczNSw3ICs3MzksOCBAQAogewogCXN0cnVjdCB2aW9zcnBfYWRhcHRlcl9pbmZvICpyZXE7CiAJc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dF9zdHJ1Y3Q7Ci0JCisJZG1hX2FkZHJfdCBhZGRyOworCiAJZXZ0X3N0cnVjdCA9IGdldF9ldmVudF9zdHJ1Y3QoJmhvc3RkYXRhLT5wb29sKTsKIAlpZiAoIWV2dF9zdHJ1Y3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpYm12c2NzaTogY291bGRuJ3QgYWxsb2NhdGUgYW4gZXZlbnQgIgpAQCAtNzUzLDEwICs3NTgsMTAgQEAKIAkKIAlyZXEtPmNvbW1vbi50eXBlID0gVklPU1JQX0FEQVBURVJfSU5GT19UWVBFOwogCXJlcS0+Y29tbW9uLmxlbmd0aCA9IHNpemVvZihob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mbyk7Ci0JcmVxLT5idWZmZXIgPSBkbWFfbWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LAotCQkJCSAgICAgJmhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLAotCQkJCSAgICAgc2l6ZW9mKGhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvKSwKLQkJCQkgICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwlyZXEtPmJ1ZmZlciA9IGFkZHIgPSBkbWFfbWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LAorCQkJCQkgICAgJmhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvLAorCQkJCQkgICAgc2l6ZW9mKGhvc3RkYXRhLT5tYWRhcHRlcl9pbmZvKSwKKwkJCQkJICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAogCWlmIChkbWFfbWFwcGluZ19lcnJvcihyZXEtPmJ1ZmZlcikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC03NjYsOCArNzcxLDEzIEBACiAJCXJldHVybjsKIAl9CiAJCi0JaWYgKGlibXZzY3NpX3NlbmRfc3JwX2V2ZW50KGV2dF9zdHJ1Y3QsIGhvc3RkYXRhKSkKKwlpZiAoaWJtdnNjc2lfc2VuZF9zcnBfZXZlbnQoZXZ0X3N0cnVjdCwgaG9zdGRhdGEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWJtdnNjc2k6IGNvdWxkbid0IHNlbmQgQURBUFRFUl9JTkZPX1JFUSFcbiIpOworCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsCisJCQkJIGFkZHIsCisJCQkJIHNpemVvZihob3N0ZGF0YS0+bWFkYXB0ZXJfaW5mbyksCisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwl9CiB9OwogCiAvKioKQEAgLTc4MCwxMCArNzkwLDEwIEBACiBzdGF0aWMgdm9pZCBsb2dpbl9yc3Aoc3RydWN0IHNycF9ldmVudF9zdHJ1Y3QgKmV2dF9zdHJ1Y3QpCiB7CiAJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPSBldnRfc3RydWN0LT5ob3N0ZGF0YTsKLQlzd2l0Y2ggKGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5nZW5lcmljLnR5cGUpIHsKLQljYXNlIFNSUF9MT0dJTl9SU1BfVFlQRToJLyogaXQgd29ya2VkISAqLworCXN3aXRjaCAoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5vcGNvZGUpIHsKKwljYXNlIFNSUF9MT0dJTl9SU1A6CS8qIGl0IHdvcmtlZCEgKi8KIAkJYnJlYWs7Ci0JY2FzZSBTUlBfTE9HSU5fUkVKX1RZUEU6CS8qIHJlZnVzZWQhICovCisJY2FzZSBTUlBfTE9HSU5fUkVKOgkvKiByZWZ1c2VkISAqLwogCQlwcmludGsoS0VSTl9JTkZPICJpYm12c2NzaTogU1JQX0xPR0lOX1JFSiByZWFzb24gJXVcbiIsCiAJCSAgICAgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcmVqLnJlYXNvbik7CiAJCS8qIExvZ2luIGZhaWxlZC4gICovCkBAIC03OTIsNyArODAyLDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJpYm12c2NzaTogSW52YWxpZCBsb2dpbiByZXNwb25zZSB0eXBlY29kZSAweCUwMnghXG4iLAotCQkgICAgICAgZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmdlbmVyaWMudHlwZSk7CisJCSAgICAgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLm9wY29kZSk7CiAJCS8qIExvZ2luIGZhaWxlZC4gICovCiAJCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAtMSk7CiAJCXJldHVybjsKQEAgLTgwMCwxNyArODEwLDE3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJpYm12c2NzaTogU1JQX0xPR0lOIHN1Y2NlZWRlZFxuIik7CiAKLQlpZiAoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXF1ZXN0X2xpbWl0X2RlbHRhID4KKwlpZiAoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLmxvZ2luX3JzcC5yZXFfbGltX2RlbHRhID4KIAkgICAgKG1heF9yZXF1ZXN0cyAtIDIpKQotCQlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcXVlc3RfbGltaXRfZGVsdGEgPQorCQlldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcV9saW1fZGVsdGEgPQogCQkgICAgbWF4X3JlcXVlc3RzIC0gMjsKIAogCS8qIE5vdyB3ZSBrbm93IHdoYXQgdGhlIHJlYWwgcmVxdWVzdC1saW1pdCBpcyAqLwogCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LAotCQkgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcXVlc3RfbGltaXRfZGVsdGEpOworCQkgICBldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAubG9naW5fcnNwLnJlcV9saW1fZGVsdGEpOwogCiAJaG9zdGRhdGEtPmhvc3QtPmNhbl9xdWV1ZSA9Ci0JICAgIGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3AucmVxdWVzdF9saW1pdF9kZWx0YSAtIDI7CisJICAgIGV2dF9zdHJ1Y3QtPnhmZXJfaXUtPnNycC5sb2dpbl9yc3AucmVxX2xpbV9kZWx0YSAtIDI7CiAKIAlpZiAoaG9zdGRhdGEtPmhvc3QtPmNhbl9xdWV1ZSA8IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpYm12c2NzaTogSW52YWxpZCByZXF1ZXN0X2xpbWl0X2RlbHRhXG4iKTsKQEAgLTg0OSwxOCArODU5LDE5IEBACiAKIAlsb2dpbiA9ICZldnRfc3RydWN0LT5pdS5zcnAubG9naW5fcmVxOwogCW1lbXNldChsb2dpbiwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBzcnBfbG9naW5fcmVxKSk7Ci0JbG9naW4tPnR5cGUgPSBTUlBfTE9HSU5fUkVRX1RZUEU7Ci0JbG9naW4tPm1heF9yZXF1ZXN0ZWRfaW5pdGlhdG9yX3RvX3RhcmdldF9pdWxlbiA9IHNpemVvZih1bmlvbiBzcnBfaXUpOwotCWxvZ2luLT5yZXF1aXJlZF9idWZmZXJfZm9ybWF0cyA9IDB4MDAwNjsKKwlsb2dpbi0+b3Bjb2RlID0gU1JQX0xPR0lOX1JFUTsKKwlsb2dpbi0+cmVxX2l0X2l1X2xlbiA9IHNpemVvZih1bmlvbiBzcnBfaXUpOworCWxvZ2luLT5yZXFfYnVmX2ZtdCA9IFNSUF9CVUZfRk9STUFUX0RJUkVDVCB8IFNSUF9CVUZfRk9STUFUX0lORElSRUNUOwogCQorCXNwaW5fbG9ja19pcnFzYXZlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkvKiBTdGFydCBvdXQgd2l0aCBhIHJlcXVlc3QgbGltaXQgb2YgMSwgc2luY2UgdGhpcyBpcyBuZWdvdGlhdGVkIGluCiAJICogdGhlIGxvZ2luIHJlcXVlc3Qgd2UgYXJlIGp1c3Qgc2VuZGluZwogCSAqLwogCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlyYyA9IGlibXZzY3NpX3NlbmRfc3JwX2V2ZW50KGV2dF9zdHJ1Y3QsIGhvc3RkYXRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlwcmludGsoImlibXZzY3NpYzogc2VudCBTUlAgbG9naW5cbiIpOwogCXJldHVybiByYzsKIH07CiAKQEAgLTkyOCwxMyArOTM5LDEzIEBACiAJCiAJLyogU2V0IHVwIGFuIGFib3J0IFNSUCBjb21tYW5kICovCiAJbWVtc2V0KHRza19tZ210LCAweDAwLCBzaXplb2YoKnRza19tZ210KSk7Ci0JdHNrX21nbXQtPnR5cGUgPSBTUlBfVFNLX01HTVRfVFlQRTsKKwl0c2tfbWdtdC0+b3Bjb2RlID0gU1JQX1RTS19NR01UOwogCXRza19tZ210LT5sdW4gPSAoKHU2NCkgbHVuKSA8PCA0ODsKLQl0c2tfbWdtdC0+dGFza19tZ210X2ZsYWdzID0gMHgwMTsJLyogQUJPUlQgVEFTSyAqLwotCXRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnID0gKHU2NCkgZm91bmRfZXZ0OworCXRza19tZ210LT50c2tfbWdtdF9mdW5jID0gU1JQX1RTS19BQk9SVF9UQVNLOworCXRza19tZ210LT50YXNrX3RhZyA9ICh1NjQpIGZvdW5kX2V2dDsKIAogCXByaW50ayhLRVJOX0lORk8gImlibXZzY3NpOiBhYm9ydGluZyBjb21tYW5kLiBsdW4gMHglbHgsIHRhZyAweCVseFxuIiwKLQkgICAgICAgdHNrX21nbXQtPmx1biwgdHNrX21nbXQtPm1hbmFnZWRfdGFza190YWcpOworCSAgICAgICB0c2tfbWdtdC0+bHVuLCB0c2tfbWdtdC0+dGFza190YWcpOwogCiAJZXZ0LT5zeW5jX3NycCA9ICZzcnBfcnNwOwogCWluaXRfY29tcGxldGlvbigmZXZ0LT5jb21wKTsKQEAgLTk0OCwyNSArOTU5LDI1IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmZXZ0LT5jb21wKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBnb3QgYSBnb29kIHJlc3BvbnNlICovCi0JaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSAhPSBTUlBfUlNQX1RZUEUpKSB7CisJaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLnJzcC5vcGNvZGUgIT0gU1JQX1JTUCkpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgImlibXZzY3NpOiBhYm9ydCBiYWQgU1JQIFJTUCB0eXBlICVkXG4iLAotCQkJICAgICAgIHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSk7CisJCQkgICAgICAgc3JwX3JzcC5zcnAucnNwLm9wY29kZSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0JaWYgKHNycF9yc3Auc3JwLnJzcC5yc3B2YWxpZCkKLQkJcnNwX3JjID0gKigoaW50ICopc3JwX3JzcC5zcnAucnNwLnNlbnNlX2FuZF9yZXNwb25zZV9kYXRhKTsKKwlpZiAoc3JwX3JzcC5zcnAucnNwLmZsYWdzICYgU1JQX1JTUF9GTEFHX1JTUFZBTElEKQorCQlyc3BfcmMgPSAqKChpbnQgKilzcnBfcnNwLnNycC5yc3AuZGF0YSk7CiAJZWxzZQogCQlyc3BfcmMgPSBzcnBfcnNwLnNycC5yc3Auc3RhdHVzOwogCiAJaWYgKHJzcF9yYykgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKLQkJICAgICAgICJpYm12c2NzaTogYWJvcnQgY29kZSAlZCBmb3IgdGFzayB0YWcgMHglbHhcbiIsCisJCQkgICAgICAgImlibXZzY3NpOiBhYm9ydCBjb2RlICVkIGZvciB0YXNrIHRhZyAweCVseFxuIiwKIAkJCSAgICAgICByc3BfcmMsCi0JCQkgICAgICAgdHNrX21nbXQtPm1hbmFnZWRfdGFza190YWcpOworCQkJICAgICAgIHRza19tZ210LT50YXNrX3RhZyk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC05ODcsMTMgKzk5OCwxMyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3RkYXRhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgImlibXZzY3NpOiBhYm9ydGVkIHRhc2sgdGFnIDB4JWx4IGNvbXBsZXRlZFxuIiwKLQkJICAgICAgIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkJICAgICAgIHRza19tZ210LT50YXNrX3RhZyk7CiAJCXJldHVybiBTVUNDRVNTOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgImlibXZzY3NpOiBzdWNjZXNzZnVsbHkgYWJvcnRlZCB0YXNrIHRhZyAweCVseFxuIiwKLQkgICAgICAgdHNrX21nbXQtPm1hbmFnZWRfdGFza190YWcpOworCSAgICAgICB0c2tfbWdtdC0+dGFza190YWcpOwogCiAJY21kLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAlsaXN0X2RlbCgmZm91bmRfZXZ0LT5saXN0KTsKQEAgLTEwNDAsOSArMTA1MSw5IEBACiAKIAkvKiBTZXQgdXAgYSBsdW4gcmVzZXQgU1JQIGNvbW1hbmQgKi8KIAltZW1zZXQodHNrX21nbXQsIDB4MDAsIHNpemVvZigqdHNrX21nbXQpKTsKLQl0c2tfbWdtdC0+dHlwZSA9IFNSUF9UU0tfTUdNVF9UWVBFOworCXRza19tZ210LT5vcGNvZGUgPSBTUlBfVFNLX01HTVQ7CiAJdHNrX21nbXQtPmx1biA9ICgodTY0KSBsdW4pIDw8IDQ4OwotCXRza19tZ210LT50YXNrX21nbXRfZmxhZ3MgPSAweDA4OwkvKiBMVU4gUkVTRVQgKi8KKwl0c2tfbWdtdC0+dHNrX21nbXRfZnVuYyA9IFNSUF9UU0tfTFVOX1JFU0VUOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaWJtdnNjc2k6IHJlc2V0dGluZyBkZXZpY2UuIGx1biAweCVseFxuIiwKIAkgICAgICAgdHNrX21nbXQtPmx1bik7CkBAIC0xMDU5LDE2ICsxMDcwLDE2IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmZXZ0LT5jb21wKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBnb3QgYSBnb29kIHJlc3BvbnNlICovCi0JaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSAhPSBTUlBfUlNQX1RZUEUpKSB7CisJaWYgKHVubGlrZWx5KHNycF9yc3Auc3JwLnJzcC5vcGNvZGUgIT0gU1JQX1JTUCkpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgImlibXZzY3NpOiByZXNldCBiYWQgU1JQIFJTUCB0eXBlICVkXG4iLAotCQkJICAgICAgIHNycF9yc3Auc3JwLmdlbmVyaWMudHlwZSk7CisJCQkgICAgICAgc3JwX3JzcC5zcnAucnNwLm9wY29kZSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0JaWYgKHNycF9yc3Auc3JwLnJzcC5yc3B2YWxpZCkKLQkJcnNwX3JjID0gKigoaW50ICopc3JwX3JzcC5zcnAucnNwLnNlbnNlX2FuZF9yZXNwb25zZV9kYXRhKTsKKwlpZiAoc3JwX3JzcC5zcnAucnNwLmZsYWdzICYgU1JQX1JTUF9GTEFHX1JTUFZBTElEKQorCQlyc3BfcmMgPSAqKChpbnQgKilzcnBfcnNwLnNycC5yc3AuZGF0YSk7CiAJZWxzZQogCQlyc3BfcmMgPSBzcnBfcnNwLnNycC5yc3Auc3RhdHVzOwogCkBAIC0xMDc2LDggKzEwODcsNyBAQAogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSAgICAgICAiaWJtdnNjc2k6IHJlc2V0IGNvZGUgJWQgZm9yIHRhc2sgdGFnIDB4JWx4XG4iLAotCQkgICAgICAgcnNwX3JjLAotCQkJICAgICAgIHRza19tZ210LT5tYW5hZ2VkX3Rhc2tfdGFnKTsKKwkJCSAgICAgICByc3BfcmMsIHRza19tZ210LT50YXNrX3RhZyk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC0xMTc5LDYgKzExODksNyBAQAogCQkJLyogV2UgbmVlZCB0byByZS1zZXR1cCB0aGUgaW50ZXJwYXJ0aXRpb24gY29ubmVjdGlvbiAqLwogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJpYm12c2NzaTogUmUtZW5hYmxpbmcgYWRhcHRlciFcbiIpOworCQkJYXRvbWljX3NldCgmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQsIC0xKTsKIAkJCXB1cmdlX3JlcXVlc3RzKGhvc3RkYXRhLCBESURfUkVRVUVVRSk7CiAJCQlpZiAoaWJtdnNjc2lfcmVlbmFibGVfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsCiAJCQkJCQkJaG9zdGRhdGEpID09IDApCkBAIC0xMjI2LDcgKzEyMzcsNyBAQAogCX0KIAogCWlmIChjcnEtPmZvcm1hdCA9PSBWSU9TUlBfU1JQX0ZPUk1BVCkKLQkJYXRvbWljX2FkZChldnRfc3RydWN0LT54ZmVyX2l1LT5zcnAucnNwLnJlcXVlc3RfbGltaXRfZGVsdGEsCisJCWF0b21pY19hZGQoZXZ0X3N0cnVjdC0+eGZlcl9pdS0+c3JwLnJzcC5yZXFfbGltX2RlbHRhLAogCQkJICAgJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0KTsKIAogCWlmIChldnRfc3RydWN0LT5kb25lKQpAQCAtMTI1NCw2ICsxMjY1LDcgQEAKIHsKIAlzdHJ1Y3Qgdmlvc3JwX2hvc3RfY29uZmlnICpob3N0X2NvbmZpZzsKIAlzdHJ1Y3Qgc3JwX2V2ZW50X3N0cnVjdCAqZXZ0X3N0cnVjdDsKKwlkbWFfYWRkcl90IGFkZHI7CiAJaW50IHJjOwogCiAJZXZ0X3N0cnVjdCA9IGdldF9ldmVudF9zdHJ1Y3QoJmhvc3RkYXRhLT5wb29sKTsKQEAgLTEyNzQsOCArMTI4Niw5IEBACiAJbWVtc2V0KGhvc3RfY29uZmlnLCAweDAwLCBzaXplb2YoKmhvc3RfY29uZmlnKSk7CiAJaG9zdF9jb25maWctPmNvbW1vbi50eXBlID0gVklPU1JQX0hPU1RfQ09ORklHX1RZUEU7CiAJaG9zdF9jb25maWctPmNvbW1vbi5sZW5ndGggPSBsZW5ndGg7Ci0JaG9zdF9jb25maWctPmJ1ZmZlciA9IGRtYV9tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsIGJ1ZmZlciwgbGVuZ3RoLAotCQkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCWhvc3RfY29uZmlnLT5idWZmZXIgPSBhZGRyID0gZG1hX21hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgYnVmZmVyLAorCQkJCQkJICAgIGxlbmd0aCwKKwkJCQkJCSAgICBETUFfQklESVJFQ1RJT05BTCk7CiAKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IoaG9zdF9jb25maWctPmJ1ZmZlcikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xMjg2LDExICsxMjk5LDkgQEAKIAogCWluaXRfY29tcGxldGlvbigmZXZ0X3N0cnVjdC0+Y29tcCk7CiAJcmMgPSBpYm12c2NzaV9zZW5kX3NycF9ldmVudChldnRfc3RydWN0LCBob3N0ZGF0YSk7Ci0JaWYgKHJjID09IDApIHsKKwlpZiAocmMgPT0gMCkKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmZXZ0X3N0cnVjdC0+Y29tcCk7Ci0JCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgaG9zdF9jb25maWctPmJ1ZmZlciwKLQkJCQkgbGVuZ3RoLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JfQorCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgYWRkciwgbGVuZ3RoLCBETUFfQklESVJFQ1RJT05BTCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5oCmluZGV4IDQ1NTBkNzEuLjVjNmQ5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5oCkBAIC02OCw3ICs2OCw3IEBACiAJdm9pZCAoKmNtbmRfZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKIAl1bmlvbiB2aW9zcnBfaXUgKnN5bmNfc3JwOwotCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciAqZXh0X2xpc3Q7CisJc3RydWN0IHNycF9kaXJlY3RfYnVmICpleHRfbGlzdDsKIAlkbWFfYWRkcl90IGV4dF9saXN0X3Rva2VuOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCmluZGV4IGY0N2RkODcuLjFhOTk5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgImlibXZzY3NpLmgiCi0jaW5jbHVkZSAic3JwLmgiCiAKIHN0YXRpYyBjaGFyIHBhcnRpdGlvbl9uYW1lWzk3XSA9ICJVTktOT1dOIjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFydGl0aW9uX251bWJlciA9IC0xOwpAQCAtODAsNyArNzksNyBAQAogCXRhc2tsZXRfa2lsbCgmaG9zdGRhdGEtPnNycF90YXNrKTsKIAlkbyB7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRlJFRV9DUlEsIHZkZXYtPnVuaXRfYWRkcmVzcyk7Ci0JfSB3aGlsZSAoKHJjID09IEhfQnVzeSkgfHwgKEhfaXNMb25nQnVzeShyYykpKTsKKwl9IHdoaWxlICgocmMgPT0gSF9CVVNZKSB8fCAoSF9JU19MT05HX0JVU1kocmMpKSk7CiAJZG1hX3VubWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LAogCQkJIHF1ZXVlLT5tc2dfdG9rZW4sCiAJCQkgcXVldWUtPnNpemUgKiBzaXplb2YoKnF1ZXVlLT5tc2dzKSwgRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMjMwLDcgKzIyOSw3IEBACiAJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9SRUdfQ1JRLAogCQkJCXZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQlxdWV1ZS0+bXNnX3Rva2VuLCBQQUdFX1NJWkUpOwotCWlmIChyYyA9PSBIX1Jlc291cmNlKSAKKwlpZiAocmMgPT0gSF9SRVNPVVJDRSkKIAkJLyogbWF5YmUga2V4ZWNpbmcgYW5kIHJlc291cmNlIGlzIGJ1c3kuIHRyeSBhIHJlc2V0ICovCiAJCXJjID0gaWJtdnNjc2lfcmVzZXRfY3JxX3F1ZXVlKHF1ZXVlLAogCQkJCQkgICAgICBob3N0ZGF0YSk7CkBAIC0yNjksNyArMjY4LDcgQEAKICAgICAgIHJlcV9pcnFfZmFpbGVkOgogCWRvIHsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX0NSUSwgdmRldi0+dW5pdF9hZGRyZXNzKTsKLQl9IHdoaWxlICgocmMgPT0gSF9CdXN5KSB8fCAoSF9pc0xvbmdCdXN5KHJjKSkpOworCX0gd2hpbGUgKChyYyA9PSBIX0JVU1kpIHx8IChIX0lTX0xPTkdfQlVTWShyYykpKTsKICAgICAgIHJlZ19jcnFfZmFpbGVkOgogCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwKIAkJCSBxdWV1ZS0+bXNnX3Rva2VuLApAQCAtMjk1LDcgKzI5NCw3IEBACiAJLyogUmUtZW5hYmxlIHRoZSBDUlEgKi8KIAlkbyB7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRU5BQkxFX0NSUSwgdmRldi0+dW5pdF9hZGRyZXNzKTsKLQl9IHdoaWxlICgocmMgPT0gSF9JblByb2dyZXNzKSB8fCAocmMgPT0gSF9CdXN5KSB8fCAoSF9pc0xvbmdCdXN5KHJjKSkpOworCX0gd2hpbGUgKChyYyA9PSBIX0lOX1BST0dSRVNTKSB8fCAocmMgPT0gSF9CVVNZKSB8fCAoSF9JU19MT05HX0JVU1kocmMpKSk7CiAKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiaWJtdnNjc2k6IEVycm9yICVkIGVuYWJsaW5nIGFkYXB0ZXJcbiIsIHJjKTsKQEAgLTMxNyw3ICszMTYsNyBAQAogCS8qIENsb3NlIHRoZSBDUlEgKi8KIAlkbyB7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRlJFRV9DUlEsIHZkZXYtPnVuaXRfYWRkcmVzcyk7Ci0JfSB3aGlsZSAoKHJjID09IEhfQnVzeSkgfHwgKEhfaXNMb25nQnVzeShyYykpKTsKKwl9IHdoaWxlICgocmMgPT0gSF9CVVNZKSB8fCAoSF9JU19MT05HX0JVU1kocmMpKSk7CiAKIAkvKiBDbGVhbiBvdXQgdGhlIHF1ZXVlICovCiAJbWVtc2V0KHF1ZXVlLT5tc2dzLCAweDAwLCBQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3NycC5oIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3NycC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDhlNGM0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9zcnAuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBzcnAuaCAtLSBTQ1NJIFJETUEgUHJvdG9jb2wgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBXcml0dGVuIEJ5OiBDb2xpbiBEZXZpbGJpcywgSUJNIENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDMgSUJNIENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAgICovCi0vKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAgICovCi0vKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICovCi0vKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAgICovCi0vKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICovCi0vKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAgICovCi0vKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICovCi0vKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAgICovCi0vKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBTQ1NJIFJETUEgUHJvdG9jb2wgICovCi0vKiAoU1JQKSBhcyBkZWZpbmVkIGluIHRoZSBUMTAgc3RhbmRhcmQgYXZhaWxhYmxlIGF0IHd3dy50MTAub3JnLiAgVGhpcyAgICAgICovCi0vKiBmaWxlIHdhcyBiYXNlZCBvbiB0aGUgMTZhIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIFNSUF9ICi0jZGVmaW5lIFNSUF9ICi0KLSNkZWZpbmUgU1JQX1ZFUlNJT04gIjE2LmEiCi0KLSNkZWZpbmUgUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0KLWVudW0gc3JwX3R5cGVzIHsKLQlTUlBfTE9HSU5fUkVRX1RZUEUgPSAweDAwLAotCVNSUF9MT0dJTl9SU1BfVFlQRSA9IDB4QzAsCi0JU1JQX0xPR0lOX1JFSl9UWVBFID0gMHhDMiwKLQlTUlBfSV9MT0dPVVRfVFlQRSA9IDB4MDMsCi0JU1JQX1RfTE9HT1VUX1RZUEUgPSAweDgwLAotCVNSUF9UU0tfTUdNVF9UWVBFID0gMHgwMSwKLQlTUlBfQ01EX1RZUEUgPSAweDAyLAotCVNSUF9SU1BfVFlQRSA9IDB4QzEsCi0JU1JQX0NSRURfUkVRX1RZUEUgPSAweDgxLAotCVNSUF9DUkVEX1JTUF9UWVBFID0gMHg0MSwKLQlTUlBfQUVSX1JFUV9UWVBFID0gMHg4MiwKLQlTUlBfQUVSX1JTUF9UWVBFID0gMHg0MgotfTsKLQotZW51bSBzcnBfZGVzY3JpcHRvcl9mb3JtYXRzIHsKLQlTUlBfTk9fQlVGRkVSID0gMHgwMCwKLQlTUlBfRElSRUNUX0JVRkZFUiA9IDB4MDEsCi0JU1JQX0lORElSRUNUX0JVRkZFUiA9IDB4MDIKLX07Ci0KLXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciB7Ci0JdTY0IHZpcnR1YWxfYWRkcmVzczsKLQl1MzIgbWVtb3J5X2hhbmRsZTsKLQl1MzIgbGVuZ3RoOwotfTsKLQotc3RydWN0IGluZGlyZWN0X2Rlc2NyaXB0b3IgewotCXN0cnVjdCBtZW1vcnlfZGVzY3JpcHRvciBoZWFkOwotCXUzMiB0b3RhbF9sZW5ndGg7Ci0Jc3RydWN0IG1lbW9yeV9kZXNjcmlwdG9yIGxpc3RbMV0gUEFDS0VEOwotfTsKLQotc3RydWN0IHNycF9nZW5lcmljIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotfTsKLQotc3RydWN0IHNycF9sb2dpbl9yZXEgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzddOwotCXU2NCB0YWc7Ci0JdTMyIG1heF9yZXF1ZXN0ZWRfaW5pdGlhdG9yX3RvX3RhcmdldF9pdWxlbjsKLQl1MzIgcmVzZXJ2ZWQyOwotCXUxNiByZXF1aXJlZF9idWZmZXJfZm9ybWF0czsKLQl1OCByZXNlcnZlZDM6NjsKLQl1OCBtdWx0aV9jaGFubmVsX2FjdGlvbjoyOwotCXU4IHJlc2VydmVkNDsKLQl1MzIgcmVzZXJ2ZWQ1OwotCXU4IGluaXRpYXRvcl9wb3J0X2lkZW50aWZpZXJbMTZdOwotCXU4IHRhcmdldF9wb3J0X2lkZW50aWZpZXJbMTZdOwotfTsKLQotc3RydWN0IHNycF9sb2dpbl9yc3AgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZXF1ZXN0X2xpbWl0X2RlbHRhOwotCXU2NCB0YWc7Ci0JdTMyIG1heF9pbml0aWF0b3JfdG9fdGFyZ2V0X2l1bGVuOwotCXUzMiBtYXhfdGFyZ2V0X3RvX2luaXRpYXRvcl9pdWxlbjsKLQl1MTYgc3VwcG9ydGVkX2J1ZmZlcl9mb3JtYXRzOwotCXU4IHJlc2VydmVkMjo2OwotCXU4IG11bHRpX2NoYW5uZWxfcmVzdWx0OjI7Ci0JdTggcmVzZXJ2ZWQzOwotCXU4IHJlc2VydmVkNFsyNF07Ci19OwotCi1zdHJ1Y3Qgc3JwX2xvZ2luX3JlaiB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbM107Ci0JdTMyIHJlYXNvbjsKLQl1NjQgdGFnOwotCXU2NCByZXNlcnZlZDI7Ci0JdTE2IHN1cHBvcnRlZF9idWZmZXJfZm9ybWF0czsKLQl1OCByZXNlcnZlZDNbNl07Ci19OwotCi1zdHJ1Y3Qgc3JwX2lfbG9nb3V0IHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkMVs3XTsKLQl1NjQgdGFnOwotfTsKLQotc3RydWN0IHNycF90X2xvZ291dCB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbM107Ci0JdTMyIHJlYXNvbjsKLQl1NjQgdGFnOwotfTsKLQotc3RydWN0IHNycF90c2tfbWdtdCB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbN107Ci0JdTY0IHRhZzsKLQl1MzIgcmVzZXJ2ZWQyOwotCXU2NCBsdW4gUEFDS0VEOwotCXU4IHJlc2VydmVkMzsKLQl1OCByZXNlcnZlZDQ7Ci0JdTggdGFza19tZ210X2ZsYWdzOwotCXU4IHJlc2VydmVkNTsKLQl1NjQgbWFuYWdlZF90YXNrX3RhZzsKLQl1NjQgcmVzZXJ2ZWQ2OwotfTsKLQotc3RydWN0IHNycF9jbWQgewotCXU4IHR5cGU7Ci0JdTMyIHJlc2VydmVkMSBQQUNLRUQ7Ci0JdTggZGF0YV9vdXRfZm9ybWF0OjQ7Ci0JdTggZGF0YV9pbl9mb3JtYXQ6NDsKLQl1OCBkYXRhX291dF9jb3VudDsKLQl1OCBkYXRhX2luX2NvdW50OwotCXU2NCB0YWc7Ci0JdTMyIHJlc2VydmVkMjsKLQl1NjQgbHVuIFBBQ0tFRDsKLQl1OCByZXNlcnZlZDM7Ci0JdTggcmVzZXJ2ZWQ0OjU7Ci0JdTggdGFza19hdHRyaWJ1dGU6MzsKLQl1OCByZXNlcnZlZDU7Ci0JdTggYWRkaXRpb25hbF9jZGJfbGVuOwotCXU4IGNkYlsxNl07Ci0JdTggYWRkaXRpb25hbF9kYXRhWzB4MTAwIC0gMHgzMF07Ci19OwotCi1zdHJ1Y3Qgc3JwX3JzcCB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbM107Ci0JdTMyIHJlcXVlc3RfbGltaXRfZGVsdGE7Ci0JdTY0IHRhZzsKLQl1MTYgcmVzZXJ2ZWQyOwotCXU4IHJlc2VydmVkMzoyOwotCXU4IGRpdW5kZXI6MTsKLQl1OCBkaW92ZXI6MTsKLQl1OCBkb3VuZGVyOjE7Ci0JdTggZG9vdmVyOjE7Ci0JdTggc25zdmFsaWQ6MTsKLQl1OCByc3B2YWxpZDoxOwotCXU4IHN0YXR1czsKLQl1MzIgZGF0YV9pbl9yZXNpZHVhbF9jb3VudDsKLQl1MzIgZGF0YV9vdXRfcmVzaWR1YWxfY291bnQ7Ci0JdTMyIHNlbnNlX2RhdGFfbGlzdF9sZW5ndGg7Ci0JdTMyIHJlc3BvbnNlX2RhdGFfbGlzdF9sZW5ndGg7Ci0JdTggc2Vuc2VfYW5kX3Jlc3BvbnNlX2RhdGFbMThdOwotfTsKLQotc3RydWN0IHNycF9jcmVkX3JlcSB7Ci0JdTggdHlwZTsKLQl1OCByZXNlcnZlZDFbM107Ci0JdTMyIHJlcXVlc3RfbGltaXRfZGVsdGE7Ci0JdTY0IHRhZzsKLX07Ci0KLXN0cnVjdCBzcnBfY3JlZF9yc3AgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzddOwotCXU2NCB0YWc7Ci19OwotCi1zdHJ1Y3Qgc3JwX2Flcl9yZXEgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzNdOwotCXUzMiByZXF1ZXN0X2xpbWl0X2RlbHRhOwotCXU2NCB0YWc7Ci0JdTMyIHJlc2VydmVkMjsKLQl1NjQgbHVuOwotCXUzMiBzZW5zZV9kYXRhX2xpc3RfbGVuZ3RoOwotCXUzMiByZXNlcnZlZDM7Ci0JdTggc2Vuc2VfZGF0YVsyMF07Ci19OwotCi1zdHJ1Y3Qgc3JwX2Flcl9yc3AgewotCXU4IHR5cGU7Ci0JdTggcmVzZXJ2ZWQxWzddOwotCXU2NCB0YWc7Ci19OwotCi11bmlvbiBzcnBfaXUgewotCXN0cnVjdCBzcnBfZ2VuZXJpYyBnZW5lcmljOwotCXN0cnVjdCBzcnBfbG9naW5fcmVxIGxvZ2luX3JlcTsKLQlzdHJ1Y3Qgc3JwX2xvZ2luX3JzcCBsb2dpbl9yc3A7Ci0Jc3RydWN0IHNycF9sb2dpbl9yZWogbG9naW5fcmVqOwotCXN0cnVjdCBzcnBfaV9sb2dvdXQgaV9sb2dvdXQ7Ci0Jc3RydWN0IHNycF90X2xvZ291dCB0X2xvZ291dDsKLQlzdHJ1Y3Qgc3JwX3Rza19tZ210IHRza19tZ210OwotCXN0cnVjdCBzcnBfY21kIGNtZDsKLQlzdHJ1Y3Qgc3JwX3JzcCByc3A7Ci0Jc3RydWN0IHNycF9jcmVkX3JlcSBjcmVkX3JlcTsKLQlzdHJ1Y3Qgc3JwX2NyZWRfcnNwIGNyZWRfcnNwOwotCXN0cnVjdCBzcnBfYWVyX3JlcSBhZXJfcmVxOwotCXN0cnVjdCBzcnBfYWVyX3JzcCBhZXJfcnNwOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvdmlvc3JwLmggYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvdmlvc3JwLmgKaW5kZXggNmE2YmJhOC4uOTBmMWE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS92aW9zcnAuaApAQCAtMzMsNyArMzMsMjIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgVklPU1JQX0gKICNkZWZpbmUgVklPU1JQX0gKLSNpbmNsdWRlICJzcnAuaCIKKyNpbmNsdWRlIDxzY3NpL3NycC5oPgorCisjZGVmaW5lIFNSUF9WRVJTSU9OICIxNi5hIgorI2RlZmluZSBTUlBfTUFYX0lVX0xFTgkyNTYKKwordW5pb24gc3JwX2l1IHsKKwlzdHJ1Y3Qgc3JwX2xvZ2luX3JlcSBsb2dpbl9yZXE7CisJc3RydWN0IHNycF9sb2dpbl9yc3AgbG9naW5fcnNwOworCXN0cnVjdCBzcnBfbG9naW5fcmVqIGxvZ2luX3JlajsKKwlzdHJ1Y3Qgc3JwX2lfbG9nb3V0IGlfbG9nb3V0OworCXN0cnVjdCBzcnBfdF9sb2dvdXQgdF9sb2dvdXQ7CisJc3RydWN0IHNycF90c2tfbWdtdCB0c2tfbWdtdDsKKwlzdHJ1Y3Qgc3JwX2NtZCBjbWQ7CisJc3RydWN0IHNycF9yc3AgcnNwOworCXU4IHJlc2VydmVkW1NSUF9NQVhfSVVfTEVOXTsKK307CiAKIGVudW0gdmlvc3JwX2NycV9mb3JtYXRzIHsKIAlWSU9TUlBfU1JQX0ZPUk1BVCA9IDB4MDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggNTg5MGU1Zi4uOGI4MGU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtMTY0LDI5ICsxNjQsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oSVBSX0RSSVZFUl9WRVJTSU9OKTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmlwcl9ncGRkX2Rldl9lbmRfc3RhdGVzW10gPSB7Ci0JIkNvbW1hbmQgY29tcGxldGUiLAotCSJUZXJtaW5hdGVkIGJ5IGhvc3QiLAotCSJUZXJtaW5hdGVkIGJ5IGRldmljZSByZXNldCIsCi0JIlRlcm1pbmF0ZWQgYnkgYnVzIHJlc2V0IiwKLQkiVW5rbm93biIsCi0JIkNvbW1hbmQgbm90IHN0YXJ0ZWQiCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqaXByX2dwZGRfZGV2X2J1c19waGFzZXNbXSA9IHsKLQkiQnVzIGZyZWUiLAotCSJBcmJpdHJhdGlvbiIsCi0JIlNlbGVjdGlvbiIsCi0JIk1lc3NhZ2Ugb3V0IiwKLQkiQ29tbWFuZCIsCi0JIk1lc3NhZ2UgaW4iLAotCSJEYXRhIG91dCIsCi0JIkRhdGEgaW4iLAotCSJTdGF0dXMiLAotCSJSZXNlbGVjdGlvbiIsCi0JIlVua25vd24iCi19OwotCiAvKiAgQSBjb25zdGFudCBhcnJheSBvZiBJT0FTQ3MvVVJDcy9FcnJvciBNZXNzYWdlcyAqLwogc3RhdGljIGNvbnN0CiBzdHJ1Y3QgaXByX2Vycm9yX3RhYmxlX3QgaXByX2Vycm9yX3RhYmxlW10gPSB7CkBAIC04NjksOCArODQ2LDggQEAKIAogCWlmIChob3N0cmNiLT5oY2FtLm5vdGlmeV90eXBlID09IElQUl9IT1NUX1JDQl9OT1RJRl9UWVBFX1JFTV9FTlRSWSkgewogCQlpZiAocmVzLT5zZGV2KSB7Ci0JCQlyZXMtPnNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIAkJCXJlcy0+ZGVsX2Zyb21fbWwgPSAxOworCQkJcmVzLT5jZmd0ZS5yZXNfaGFuZGxlID0gSVBSX0lOVkFMSURfUkVTX0hBTkRMRTsKIAkJCWlmIChpb2FfY2ZnLT5hbGxvd19tbF9hZGRfZGVsKQogCQkJCXNjaGVkdWxlX3dvcmsoJmlvYV9jZmctPndvcmtfcSk7CiAJCX0gZWxzZQpAQCAtMTM1Niw4ICsxMzMzLDggQEAKIAkJcmV0dXJuOwogCiAJaWYgKGlwcl9pc19kZXZpY2UoJmhvc3RyY2ItPmhjYW0udS5lcnJvci5mYWlsaW5nX2Rldl9yZXNfYWRkcikpIHsKLQkJaXByX3Jlc19lcnIoaW9hX2NmZywgaG9zdHJjYi0+aGNhbS51LmVycm9yLmZhaWxpbmdfZGV2X3Jlc19hZGRyLAotCQkJICAgICIlc1xuIiwgaXByX2Vycm9yX3RhYmxlW2Vycm9yX2luZGV4XS5lcnJvcik7CisJCWlwcl9yYV9lcnIoaW9hX2NmZywgaG9zdHJjYi0+aGNhbS51LmVycm9yLmZhaWxpbmdfZGV2X3Jlc19hZGRyLAorCQkJICAgIiVzXG4iLCBpcHJfZXJyb3JfdGFibGVbZXJyb3JfaW5kZXhdLmVycm9yKTsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICIlc1xuIiwKIAkJCWlwcl9lcnJvcl90YWJsZVtlcnJvcl9pbmRleF0uZXJyb3IpOwpAQCAtMjEwNyw3ICsyMDg0LDYgQEAKIAkJCQlkaWRfd29yayA9IDE7CiAJCQkJc2RldiA9IHJlcy0+c2RldjsKIAkJCQlpZiAoIXNjc2lfZGV2aWNlX2dldChzZGV2KSkgewotCQkJCQlyZXMtPnNkZXYgPSBOVUxMOwogCQkJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJmlvYV9jZmctPmZyZWVfcmVzX3EpOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKQEAgLTIxMjQsNiArMjEwMCw3IEBACiAJCQlidXMgPSByZXMtPmNmZ3RlLnJlc19hZGRyLmJ1czsKIAkJCXRhcmdldCA9IHJlcy0+Y2ZndGUucmVzX2FkZHIudGFyZ2V0OwogCQkJbHVuID0gcmVzLT5jZmd0ZS5yZXNfYWRkci5sdW47CisJCQlyZXMtPmFkZF90b19tbCA9IDA7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJCQlzY3NpX2FkZF9kZXZpY2UoaW9hX2NmZy0+aG9zdCwgYnVzLCB0YXJnZXQsIGx1bik7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwpAQCAtMzIxNCw3ICszMTkxLDcgQEAKIAkJCXNkZXYtPnRpbWVvdXQgPSBJUFJfVlNFVF9SV19USU1FT1VUOwogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIElQUl9WU0VUX01BWF9TRUNUT1JTKTsKIAkJfQotCQlpZiAoSVBSX0lTX0RBU0RfREVWSUNFKHJlcy0+Y2ZndGUuc3RkX2lucV9kYXRhKSkKKwkJaWYgKGlwcl9pc192c2V0X2RldmljZShyZXMpIHx8IGlwcl9pc19zY3NpX2Rpc2socmVzKSkKIAkJCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwogCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CiAJfQpAQCAtMzMwNCw2ICszMjgxLDQ0IEBACiB9CiAKIC8qKgorICogaXByX2RldmljZV9yZXNldCAtIFJlc2V0IHRoZSBkZXZpY2UKKyAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAorICogQHJlczoJCXJlc291cmNlIGVudHJ5IHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGEgZGV2aWNlIHJlc2V0IHRvIHRoZSBhZmZlY3RlZCBkZXZpY2UuCisgKiBJZiB0aGUgZGV2aWNlIGlzIGEgU0NTSSBkZXZpY2UsIGEgTFVOIHJlc2V0IHdpbGwgYmUgc2VudAorICogdG8gdGhlIGRldmljZSBmaXJzdC4gSWYgdGhhdCBkb2VzIG5vdCB3b3JrLCBhIHRhcmdldCByZXNldAorICogd2lsbCBiZSBzZW50LgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCTAgb24gc3VjY2VzcyAvIG5vbi16ZXJvIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgaXByX2RldmljZV9yZXNldChzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsCisJCQkgICAgc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSAqcmVzKQoreworCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKKwlzdHJ1Y3QgaXByX2lvYXJjYiAqaW9hcmNiOworCXN0cnVjdCBpcHJfY21kX3BrdCAqY21kX3BrdDsKKwl1MzIgaW9hc2M7CisKKwlFTlRFUjsKKwlpcHJfY21kID0gaXByX2dldF9mcmVlX2lwcl9jbW5kKGlvYV9jZmcpOworCWlvYXJjYiA9ICZpcHJfY21kLT5pb2FyY2I7CisJY21kX3BrdCA9ICZpb2FyY2ItPmNtZF9wa3Q7CisKKwlpb2FyY2ItPnJlc19oYW5kbGUgPSByZXMtPmNmZ3RlLnJlc19oYW5kbGU7CisJY21kX3BrdC0+cmVxdWVzdF90eXBlID0gSVBSX1JRVFlQRV9JT0FDTUQ7CisJY21kX3BrdC0+Y2RiWzBdID0gSVBSX1JFU0VUX0RFVklDRTsKKworCWlwcl9zZW5kX2Jsb2NraW5nX2NtZChpcHJfY21kLCBpcHJfdGltZW91dCwgSVBSX0RFVklDRV9SRVNFVF9USU1FT1VUKTsKKwlpb2FzYyA9IGJlMzJfdG9fY3B1KGlwcl9jbWQtPmlvYXNhLmlvYXNjKTsKKwlsaXN0X2FkZF90YWlsKCZpcHJfY21kLT5xdWV1ZSwgJmlvYV9jZmctPmZyZWVfcSk7CisKKwlMRUFWRTsKKwlyZXR1cm4gKElQUl9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID8gLUVJTyA6IDApOworfQorCisvKioKICAqIGlwcl9laF9kZXZfcmVzZXQgLSBSZXNldCB0aGUgZGV2aWNlCiAgKiBAc2NzaV9jbWQ6CXNjc2kgY29tbWFuZCBzdHJ1Y3QKICAqCkBAIC0zMzE5LDggKzMzMzQsNyBAQAogCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CiAJc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSAqcmVzOwotCXN0cnVjdCBpcHJfY21kX3BrdCAqY21kX3BrdDsKLQl1MzIgaW9hc2M7CisJaW50IHJjOwogCiAJRU5URVI7CiAJaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKikgc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CkBAIC0zMzQ3LDI1ICszMzYxLDEyIEBACiAJfQogCiAJcmVzLT5yZXNldHRpbmdfZGV2aWNlID0gMTsKLQotCWlwcl9jbWQgPSBpcHJfZ2V0X2ZyZWVfaXByX2NtbmQoaW9hX2NmZyk7Ci0KLQlpcHJfY21kLT5pb2FyY2IucmVzX2hhbmRsZSA9IHJlcy0+Y2ZndGUucmVzX2hhbmRsZTsKLQljbWRfcGt0ID0gJmlwcl9jbWQtPmlvYXJjYi5jbWRfcGt0OwotCWNtZF9wa3QtPnJlcXVlc3RfdHlwZSA9IElQUl9SUVRZUEVfSU9BQ01EOwotCWNtZF9wa3QtPmNkYlswXSA9IElQUl9SRVNFVF9ERVZJQ0U7Ci0KLQlpcHJfc2Rldl9lcnIoc2NzaV9jbWQtPmRldmljZSwgIlJlc2V0dGluZyBkZXZpY2VcbiIpOwotCWlwcl9zZW5kX2Jsb2NraW5nX2NtZChpcHJfY21kLCBpcHJfdGltZW91dCwgSVBSX0RFVklDRV9SRVNFVF9USU1FT1VUKTsKLQotCWlvYXNjID0gYmUzMl90b19jcHUoaXByX2NtZC0+aW9hc2EuaW9hc2MpOwotCisJc2NtZF9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLCAiUmVzZXR0aW5nIGRldmljZVxuIik7CisJcmMgPSBpcHJfZGV2aWNlX3Jlc2V0KGlvYV9jZmcsIHJlcyk7CiAJcmVzLT5yZXNldHRpbmdfZGV2aWNlID0gMDsKIAotCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaW9hX2NmZy0+ZnJlZV9xKTsKLQogCUxFQVZFOwotCXJldHVybiAoSVBSX0lPQVNDX1NFTlNFX0tFWShpb2FzYykgPyBGQUlMRUQgOiBTVUNDRVNTKTsKKwlyZXR1cm4gKHJjID8gRkFJTEVEIDogU1VDQ0VTUyk7CiB9CiAKIHN0YXRpYyBpbnQgaXByX2VoX2Rldl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICogY21kKQpAQCAtMzQ0MCw3ICszNDQxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlwcl9zZGV2X2VycihpcHJfY21kLT51LnNkZXYsICJBYm9ydCB0aW1lZCBvdXQuIFJlc2V0dGluZyBidXNcbiIpOworCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBpcHJfY21kLT51LnNkZXYsICJBYm9ydCB0aW1lZCBvdXQuIFJlc2V0dGluZyBidXMuXG4iKTsKIAlyZXNldF9jbWQgPSBpcHJfZ2V0X2ZyZWVfaXByX2NtbmQoaW9hX2NmZyk7CiAJaXByX2NtZC0+c2libGluZyA9IHJlc2V0X2NtZDsKIAlyZXNldF9jbWQtPnNpYmxpbmcgPSBpcHJfY21kOwpAQCAtMzUwNCw3ICszNTA1LDggQEAKIAljbWRfcGt0LT5jZGJbMF0gPSBJUFJfQ0FOQ0VMX0FMTF9SRVFVRVNUUzsKIAlpcHJfY21kLT51LnNkZXYgPSBzY3NpX2NtZC0+ZGV2aWNlOwogCi0JaXByX3NkZXZfZXJyKHNjc2lfY21kLT5kZXZpY2UsICJBYm9ydGluZyBjb21tYW5kOiAlMDJYXG4iLCBzY3NpX2NtZC0+Y21uZFswXSk7CisJc2NtZF9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLCAiQWJvcnRpbmcgY29tbWFuZDogJTAyWFxuIiwKKwkJICAgIHNjc2lfY21kLT5jbW5kWzBdKTsKIAlpcHJfc2VuZF9ibG9ja2luZ19jbWQoaXByX2NtZCwgaXByX2Fib3J0X3RpbWVvdXQsIElQUl9DQU5DRUxfQUxMX1RJTUVPVVQpOwogCWlvYXNjID0gYmUzMl90b19jcHUoaXByX2NtZC0+aW9hc2EuaW9hc2MpOwogCkBAIC0zODE1LDggKzM4MTcsOCBAQAogCiAJaWYgKElQUl9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID4gMCkgewogCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfRVJST1IgPDwgMTYpOwotCQlpcHJfc2Rldl9lcnIoc2NzaV9jbWQtPmRldmljZSwKLQkJCSAgICAgIlJlcXVlc3QgU2Vuc2UgZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwgaW9hc2MpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgc2NzaV9jbWQsCisJCQkgICAgIlJlcXVlc3QgU2Vuc2UgZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwgaW9hc2MpOwogCX0gZWxzZSB7CiAJCW1lbWNweShzY3NpX2NtZC0+c2Vuc2VfYnVmZmVyLCBpcHJfY21kLT5zZW5zZV9idWZmZXIsCiAJCSAgICAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwpAQCAtMzkzOCw2ICszOTQwLDcgQEAKICAqIGlwcl9kdW1wX2lvYXNhIC0gRHVtcCBjb250ZW50cyBvZiBJT0FTQQogICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CiAgKiBAaXByX2NtZDoJaXByIGNvbW1hbmQgc3RydWN0CisgKiBAcmVzOgkJcmVzb3VyY2UgZW50cnkgc3RydWN0CiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIG9wcwogICogZmFpbC4gSXQgd2lsbCBsb2cgdGhlIElPQVNBIGlmIGFwcHJvcHJpYXRlLiBPbmx5IGNhbGxlZApAQCAtMzk0Nyw3ICszOTUwLDcgQEAKICAqIAlub25lCiAgKiovCiBzdGF0aWMgdm9pZCBpcHJfZHVtcF9pb2FzYShzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsCi0JCQkgICBzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCisJCQkgICBzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQsIHN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlcykKIHsKIAlpbnQgaTsKIAl1MTYgZGF0YV9sZW47CkBAIC0zOTc1LDE2ICszOTc4LDcgQEAKIAkJCXJldHVybjsKIAl9CiAKLQlpcHJfc2Rldl9lcnIoaXByX2NtZC0+c2NzaV9jbWQtPmRldmljZSwgIiVzXG4iLAotCQkgICAgIGlwcl9lcnJvcl90YWJsZVtlcnJvcl9pbmRleF0uZXJyb3IpOwotCi0JaWYgKChpb2FzYS0+dS5ncGRkLmVuZF9zdGF0ZSA8PSBBUlJBWV9TSVpFKGlwcl9ncGRkX2Rldl9lbmRfc3RhdGVzKSkgJiYKLQkgICAgKGlvYXNhLT51LmdwZGQuYnVzX3BoYXNlIDw9ICBBUlJBWV9TSVpFKGlwcl9ncGRkX2Rldl9idXNfcGhhc2VzKSkpIHsKLQkJaXByX3NkZXZfZXJyKGlwcl9jbWQtPnNjc2lfY21kLT5kZXZpY2UsCi0JCQkgICAgICJEZXZpY2UgRW5kIHN0YXRlOiAlcyBQaGFzZTogJXNcbiIsCi0JCQkgICAgIGlwcl9ncGRkX2Rldl9lbmRfc3RhdGVzW2lvYXNhLT51LmdwZGQuZW5kX3N0YXRlXSwKLQkJCSAgICAgaXByX2dwZGRfZGV2X2J1c19waGFzZXNbaW9hc2EtPnUuZ3BkZC5idXNfcGhhc2VdKTsKLQl9CisJaXByX3Jlc19lcnIoaW9hX2NmZywgcmVzLCAiJXNcbiIsIGlwcl9lcnJvcl90YWJsZVtlcnJvcl9pbmRleF0uZXJyb3IpOwogCiAJaWYgKHNpemVvZihzdHJ1Y3QgaXByX2lvYXNhKSA8IGJlMTZfdG9fY3B1KGlvYXNhLT5yZXRfc3RhdF9sZW4pKQogCQlkYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXByX2lvYXNhKTsKQEAgLTQxNDEsNyArNDEzNSw3IEBACiAJfQogCiAJaWYgKGlwcl9pc19nc2NzaShyZXMpKQotCQlpcHJfZHVtcF9pb2FzYShpb2FfY2ZnLCBpcHJfY21kKTsKKwkJaXByX2R1bXBfaW9hc2EoaW9hX2NmZywgaXByX2NtZCwgcmVzKTsKIAllbHNlCiAJCWlwcl9nZW5fc2Vuc2UoaXByX2NtZCk7CiAKQEAgLTQ1NDAsNyArNDUzNCw3IEBACiAJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hX3Jlc2V0X2RvbmU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHJlcywgJmlvYV9jZmctPnVzZWRfcmVzX3EsIHF1ZXVlKSB7Ci0JCWlmICghSVBSX0lTX0RBU0RfREVWSUNFKHJlcy0+Y2ZndGUuc3RkX2lucV9kYXRhKSkKKwkJaWYgKCFpcHJfaXNfc2NzaV9kaXNrKHJlcykpCiAJCQljb250aW51ZTsKIAogCQlpcHJfY21kLT51LnJlcyA9IHJlczsKQEAgLTQ5ODAsNyArNDk3NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcywgdGVtcCwgJm9sZF9yZXMsIHF1ZXVlKSB7CiAJCWlmIChyZXMtPnNkZXYpIHsKIAkJCXJlcy0+ZGVsX2Zyb21fbWwgPSAxOwotCQkJcmVzLT5zZGV2LT5ob3N0ZGF0YSA9IE5VTEw7CisJCQlyZXMtPmNmZ3RlLnJlc19oYW5kbGUgPSBJUFJfSU5WQUxJRF9SRVNfSEFORExFOwogCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZpb2FfY2ZnLT51c2VkX3Jlc19xKTsKIAkJfSBlbHNlIHsKIAkJCWxpc3RfbW92ZV90YWlsKCZyZXMtPnF1ZXVlLCAmaW9hX2NmZy0+ZnJlZV9yZXNfcSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggZmQzNjBiZi4uMWFkMjRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMzYsOCArMzYsOCBAQAogLyoKICAqIExpdGVyYWxzCiAgKi8KLSNkZWZpbmUgSVBSX0RSSVZFUl9WRVJTSU9OICIyLjEuMiIKLSNkZWZpbmUgSVBSX0RSSVZFUl9EQVRFICIoRmVicnVhcnkgOCwgMjAwNikiCisjZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi4xLjMiCisjZGVmaW5lIElQUl9EUklWRVJfREFURSAiKE1hcmNoIDI5LCAyMDA2KSIKIAogLyoKICAqIElQUl9NQVhfQ01EX1BFUl9MVU46IFRoaXMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBJUFJfTUFYX1NDU0lfUkFURSh3aWR0aCkgKCgzMjAgKiAxMCkgLyAoKHdpZHRoKSAvIDgpKQogCiAjZGVmaW5lIElQUl9JT0FfUkVTX0hBTkRMRQkJCQkweGZmZmZmZmZmCisjZGVmaW5lIElQUl9JTlZBTElEX1JFU19IQU5ETEUJCQkwCiAjZGVmaW5lIElQUl9JT0FfUkVTX0FERFIJCQkJMHgwMGZmZmZmZgogCiAvKgpAQCAtMTE5MSwzMCArMTE5MiwxNyBAQAogICovCiAjZGVmaW5lIGlwcl9lcnIoLi4uKSBwcmludGsoS0VSTl9FUlIgSVBSX05BTUUgIjogIl9fVkFfQVJHU19fKQogI2RlZmluZSBpcHJfaW5mbyguLi4pIHByaW50ayhLRVJOX0lORk8gSVBSX05BTUUgIjogIl9fVkFfQVJHU19fKQotI2RlZmluZSBpcHJfY3JpdCguLi4pIHByaW50ayhLRVJOX0NSSVQgSVBSX05BTUUgIjogIl9fVkFfQVJHU19fKQotI2RlZmluZSBpcHJfd2FybiguLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgSVBSX05BTUUiOiAiX19WQV9BUkdTX18pCiAjZGVmaW5lIGlwcl9kYmcoLi4uKSBJUFJfREJHX0NNRChwcmludGsoS0VSTl9JTkZPIElQUl9OQU1FICI6ICJfX1ZBX0FSR1NfXykpCiAKLSNkZWZpbmUgaXByX3NkZXZfcHJpbnRrKGxldmVsLCBzZGV2LCBmbXQsIGFyZ3MuLi4pIFwKLQlzZGV2X3ByaW50ayhsZXZlbCwgc2RldiwgZm10LCAjIyBhcmdzKQorI2RlZmluZSBpcHJfcmFfcHJpbnRrKGxldmVsLCBpb2FfY2ZnLCByYSwgZm10LCAuLi4pIFwKKwlwcmludGsobGV2ZWwgSVBSX05BTUUgIjogJWQ6JWQ6JWQ6JWQ6ICIgZm10LCAoaW9hX2NmZyktPmhvc3QtPmhvc3Rfbm8sIFwKKwkJKHJhKS5idXMsIChyYSkudGFyZ2V0LCAocmEpLmx1biwgIyNfX1ZBX0FSR1NfXykKIAotI2RlZmluZSBpcHJfc2Rldl9lcnIoc2RldiwgZm10LCAuLi4pIFwKLQlpcHJfc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBpcHJfc2Rldl9pbmZvKHNkZXYsIGZtdCwgLi4uKSBcCi0JaXByX3NkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgZm10LCAjI19fVkFfQVJHU19fKQotCi0jZGVmaW5lIGlwcl9zZGV2X2RiZyhzZGV2LCBmbXQsIC4uLikgXAotCUlQUl9EQkdfQ01EKGlwcl9zZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykpCi0KLSNkZWZpbmUgaXByX3Jlc19wcmludGsobGV2ZWwsIGlvYV9jZmcsIHJlcywgZm10LCAuLi4pIFwKLQlwcmludGsobGV2ZWwgSVBSX05BTUUgIjogJWQ6JWQ6JWQ6JWQ6ICIgZm10LCBpb2FfY2ZnLT5ob3N0LT5ob3N0X25vLCBcCi0JCXJlcy5idXMsIHJlcy50YXJnZXQsIHJlcy5sdW4sICMjX19WQV9BUkdTX18pCisjZGVmaW5lIGlwcl9yYV9lcnIoaW9hX2NmZywgcmEsIGZtdCwgLi4uKSBcCisJaXByX3JhX3ByaW50ayhLRVJOX0VSUiwgaW9hX2NmZywgcmEsIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogI2RlZmluZSBpcHJfcmVzX2Vycihpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKSBcCi0JaXByX3Jlc19wcmludGsoS0VSTl9FUlIsIGlvYV9jZmcsIHJlcywgZm10LCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBpcHJfcmVzX2RiZyhpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKSBcCi0JSVBSX0RCR19DTUQoaXByX3Jlc19wcmludGsoS0VSTl9JTkZPLCBpb2FfY2ZnLCByZXMsIGZtdCwgIyNfX1ZBX0FSR1NfXykpCisJaXByX3JhX2Vycihpb2FfY2ZnLCAocmVzKS0+Y2ZndGUucmVzX2FkZHIsIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogI2RlZmluZSBpcHJfcGh5c19yZXNfZXJyKGlvYV9jZmcsIHJlcywgZm10LCAuLi4pCQkJXAogewkJCQkJCQkJCVwKQEAgLTEzMDQsNiArMTI5MiwyMiBAQAogfQogCiAvKioKKyAqIGlwcl9pc19zY3NpX2Rpc2sgLSBEZXRlcm1pbmUgaWYgYSByZXNvdXJjZSBpcyBhIFNDU0kgZGlzaworICogQHJlczoJcmVzb3VyY2UgZW50cnkgc3RydWN0CisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTEgaWYgU0NTSSBkaXNrIC8gMCBpZiBub3QgU0NTSSBkaXNrCisgKiovCitzdGF0aWMgaW5saW5lIGludCBpcHJfaXNfc2NzaV9kaXNrKHN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlcykKK3sKKwlpZiAoaXByX2lzX2FmX2Rhc2RfZGV2aWNlKHJlcykgfHwKKwkgICAgKGlwcl9pc19nc2NzaShyZXMpICYmIElQUl9JU19EQVNEX0RFVklDRShyZXMtPmNmZ3RlLnN0ZF9pbnFfZGF0YSkpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKICAqIGlwcl9pc19uYWNhX21vZGVsIC0gRGV0ZXJtaW5lIGlmIGEgcmVzb3VyY2UgaXMgdXNpbmcgTkFDQSBxdWV1ZWluZyBtb2RlbAogICogQHJlczoJcmVzb3VyY2UgZW50cnkgc3RydWN0CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwppbmRleCBlNjNjMWZmLi5iMDQ2ZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwpAQCAtODY0LDYgKzg2NCw5IEBACiAvKioKICAqCWF0YV9wb3J0X3F1ZXVlX3Rhc2sgLSBRdWV1ZSBwb3J0X3Rhc2sKICAqCUBhcDogVGhlIGF0YV9wb3J0IHRvIHF1ZXVlIHBvcnRfdGFzayBmb3IKKyAqCUBmbjogd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGJlIHNjaGVkdWxlZAorICoJQGRhdGE6IGRhdGEgdmFsdWUgdG8gcGFzcyB0byB3b3JrcXVldWUgZnVuY3Rpb24KKyAqCUBkZWxheTogZGVsYXkgdGltZSBmb3Igd29ya3F1ZXVlIGZ1bmN0aW9uCiAgKgogICoJU2NoZWR1bGUgQGZuKEBkYXRhKSBmb3IgZXhlY3V0aW9uIGFmdGVyIEBkZWxheSBqaWZmaWVzIHVzaW5nCiAgKglwb3J0X3Rhc2suICBUaGVyZSBpcyBvbmUgcG9ydF90YXNrIHBlciBwb3J0IGFuZCBpdCdzIHRoZQpAQCAtMjczOSw2ICsyNzQyLDggQEAKICAqCWF0YV9kZXZfaW5pdF9wYXJhbXMgLSBJc3N1ZSBJTklUIERFViBQQVJBTVMgY29tbWFuZAogICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgQGRldgogICoJQGRldjogRGV2aWNlIHRvIHdoaWNoIGNvbW1hbmQgd2lsbCBiZSBzZW50CisgKglAaGVhZHM6IE51bWJlciBvZiBoZWFkcyAodGFza2ZpbGUgcGFyYW1ldGVyKQorICoJQHNlY3RvcnM6IE51bWJlciBvZiBzZWN0b3JzICh0YXNrZmlsZSBwYXJhbWV0ZXIpCiAgKgogICoJTE9DS0lORzoKICAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQpAQCAtMzYzOCw2ICszNjQzLDggQEAKIAogCQlhdGFfcGlvX3NlY3RvcihxYyk7CiAJfQorCisJYXRhX2FsdHN0YXR1cyhhcCk7IC8qIGZsdXNoICovCiB9CiAKIHN0YXRpYyB2b2lkIGF0YV9waW9fZXJyb3Ioc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTM3NTQsMTEgKzM3NjEsMTQgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCQlhcC0+ZmxhZ3MgJj0gfkFUQV9GTEFHX05PSU5UUjsKIAkJYXRhX2RhdGFfeGZlcihhcCwgcWMtPmNkYiwgcWMtPmRldi0+Y2RiX2xlbiwgMSk7CisJCWF0YV9hbHRzdGF0dXMoYXApOyAvKiBmbHVzaCAqLworCiAJCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfQVRBUElfRE1BKQogCQkJYXAtPm9wcy0+Ym1kbWFfc3RhcnQocWMpOwkvKiBpbml0aWF0ZSBibWRtYSAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlhdGFfZGF0YV94ZmVyKGFwLCBxYy0+Y2RiLCBxYy0+ZGV2LT5jZGJfbGVuLCAxKTsKKwkJYXRhX2FsdHN0YXR1cyhhcCk7IC8qIGZsdXNoICovCiAKIAkJLyogUElPIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IHBvbGxpbmcgKi8KIAkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUOwpAQCAtNDI4Nyw2ICs0Mjk3LDcgQEAKIGludCBhdGFfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewogCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TVVNQRU5ERUQpIHsKKwkJYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAyMDAwMDApOwogCQlhcC0+ZmxhZ3MgJj0gfkFUQV9GTEFHX1NVU1BFTkRFRDsKIAkJYXRhX3NldF9tb2RlKGFwKTsKIAl9CkBAIC00MzAyLDYgKzQzMTMsNyBAQAogICoJYXRhX2RldmljZV9zdXNwZW5kIC0gcHJlcGFyZSBhIGRldmljZSBmb3Igc3VzcGVuZAogICoJQGFwOiBwb3J0IHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvCiAgKglAZGV2OiB0aGUgZGV2aWNlIHRvIHN1c3BlbmQKKyAqCUBzdGF0ZTogdGFyZ2V0IHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUKICAqCiAgKglGbHVzaCB0aGUgY2FjaGUgb24gdGhlIGRyaXZlLCBpZiBhcHByb3ByaWF0ZSwgdGhlbiBpc3N1ZSBhCiAgKglzdGFuZGJ5bm93IGNvbW1hbmQuCkBAIC00OTM4LDcgKzQ5NTAsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BvcnRfcXVldWVfdGFzayk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9pb2N0bCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9xdWV1ZWNtZCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9lcnJvcik7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9zbGF2ZV9jb25maWcpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfcmVsZWFzZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfaG9zdF9pbnRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMKaW5kZXggNTNmNWIwZC4uYTAyODllYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMKQEAgLTUzLDYgKzUzLDcgQEAKIHR5cGVkZWYgdW5zaWduZWQgaW50ICgqYXRhX3hsYXRfZnVuY190KShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCBjb25zdCB1OCAqc2NzaWNtZCk7CiBzdGF0aWMgc3RydWN0IGF0YV9kZXZpY2UgKgogYXRhX3Njc2lfZmluZF9kZXYoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpZGV2KTsKK3N0YXRpYyB2b2lkIGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZW51bSBzY3NpX2VoX3RpbWVyX3JldHVybiBhdGFfc2NzaV90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIAogI2RlZmluZSBSV19SRUNPVkVSWV9NUEFHRSAweDEKQEAgLTk5LDYgKzEwMCw3IEBACiAgKiBJdCBqdXN0IG5lZWRzIHRoZSBlaF90aW1lZF9vdXQgaG9vay4KICAqLwogc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIGF0YV9zY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSA9IHsKKwkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5laF90aW1lZF9vdXQJCT0gYXRhX3Njc2lfdGltZWRfb3V0LAogfTsKIApAQCAtNzcyLDEyICs3NzQsOSBAQAogICoKICAqCUxPQ0tJTkc6CiAgKglJbmhlcml0ZWQgZnJvbSBTQ1NJIGxheWVyIChub25lLCBjYW4gc2xlZXApCi0gKgotICoJUkVUVVJOUzoKLSAqCVplcm8uCiAgKi8KIAotaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgwNSw3ICs4MDQsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCiAJRFBSSU5USygiRVhJVFxuIik7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YV9laF9zY3NpZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS5oIGIvZHJpdmVycy9zY3NpL2xpYmF0YS5oCmluZGV4IDFjNzU1YjEuLmJhYzhjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEuaAorKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLmgKQEAgLTYwLDcgKzYwLDYgQEAKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgYXRhX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOwogCiBleHRlcm4gdm9pZCBhdGFfc2NzaV9zY2FuX2hvc3Qoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1leHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfc2NzaW9wX2lucV9zdGQoc3RydWN0IGF0YV9zY3NpX2FyZ3MgKmFyZ3MsIHU4ICpyYnVmLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBidWZsZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IGZhZDYwN2IuLmVlMjIxNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0yNyw3ICsyNyw2IEBACiBpbnQgbHBmY19yZWFkX3NwYXJhbShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX3JlYWRfY29uZmlnKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfcmVhZF9sbmtfc3RhdChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwotdm9pZCBscGZjX3NldF9zbGltKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIGludCBscGZjX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIHVpbnQ4X3QgKiwgTFBGQ19NQk9YUV90ICosCiAJCSAgIHVpbnQzMl90KTsKIHZvaWQgbHBmY191bnJlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKaW5kZXggODkzMmIxYi4uNDFjZjVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKQEAgLTExMyw2ICsxMTMsNyBAQAogI2RlZmluZSBOTFBfTlBSX0FESVNDICAgICAgMHgyMDAwMDAwCS8qIElzc3VlIEFESVNDIHdoZW4gZHEnZWQgZnJvbQogCQkJCQkgICBOUFIgbGlzdCAqLwogI2RlZmluZSBOTFBfREVMQVlfUkVNT1ZFICAgMHg0MDAwMDAwCS8qIERlZmVyIHJlbW92YWwgdGlsbCBlbmQgb2YgRFNNICovCisjZGVmaW5lIE5MUF9OT0RFVl9SRU1PVkUgICAweDgwMDAwMDAJLyogRGVmZXIgcmVtb3ZhbCB0aWxsIGRpc2NvdmVyeSBlbmRzICovCiAKIC8qIERlZmluZXMgZm9yIGxpc3Qgc2VhcmNocyAqLwogI2RlZmluZSBOTFBfU0VBUkNIX01BUFBFRCAgICAweDEJLyogc2VhcmNoIG1hcHBlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggNDgxM2JlYS4uMjgzYjdkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0zMDIsMTAgKzMwMiw2IEBACiAJaWYgKGxwZmNfcmVnX2xvZ2luKHBoYmEsIEZhYnJpY19ESUQsICh1aW50OF90ICopIHNwLCBtYm94LCAwKSkKIAkJZ290byBmYWlsX2ZyZWVfbWJveDsKIAotCS8qCi0JICogc2V0X3NsaW0gbWFpbGJveCBjb21tYW5kIG5lZWRzIHRvIGV4ZWN1dGUgZmlyc3QsCi0JICogcXVldWUgdGhpcyBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZCBsYXRlci4KLQkgKi8KIAltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX2ZhYnJpY19yZWdfbG9naW47CiAJbWJveC0+Y29udGV4dDIgPSBuZGxwOwogCkBAIC03ODEsMjUgKzc3NywyNiBAQAogCWlmIChkaXNjICYmIHBoYmEtPm51bV9kaXNjX25vZGVzKSB7CiAJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgbW9yZSBQTE9HSXMgdG8gYmUgc2VudCAqLwogCQlscGZjX21vcmVfcGxvZ2kocGhiYSk7Ci0JfQogCi0JaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQlwaGJhLT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7Ci0JCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQlpZiAocGhiYS0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgeworCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOworCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKLQkJbHBmY19jYW5fZGlzY3RtbyhwaGJhKTsKLQkJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpIHsKLQkJCS8qIENoZWNrIHRvIHNlZSBpZiBtb3JlIFJTQ05zIGNhbWUgaW4gd2hpbGUgd2Ugd2VyZQotCQkJICogcHJvY2Vzc2luZyB0aGlzIG9uZS4KLQkJCSAqLwotCQkJaWYgKChwaGJhLT5mY19yc2NuX2lkX2NudCA9PSAwKSAmJgotCQkJICAgICghKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX0RJU0NPVkVSWSkpKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX1JTQ05fTU9ERTsKLQkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbHBmY19lbHNfaGFuZGxlX3JzY24ocGhiYSk7CisJCQlscGZjX2Nhbl9kaXNjdG1vKHBoYmEpOworCQkJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpIHsKKwkJCQkvKgorCQkJCSAqIENoZWNrIHRvIHNlZSBpZiBtb3JlIFJTQ05zIGNhbWUgaW4gd2hpbGUKKwkJCQkgKiB3ZSB3ZXJlIHByb2Nlc3NpbmcgdGhpcyBvbmUuCisJCQkJICovCisJCQkJaWYgKChwaGJhLT5mY19yc2NuX2lkX2NudCA9PSAwKSAmJgorCQkJICAgIAkoIShwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9ESVNDT1ZFUlkpKSkgeworCQkJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX1JTQ05fTU9ERTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbHBmY19lbHNfaGFuZGxlX3JzY24ocGhiYSk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMTI2Myw3ICsxMjYwLDcgQEAKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAlwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOwogCi0JY21kc2l6ZSA9IDIgKiAoc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKTsKKwljbWRzaXplID0gKDIgKiBzaXplb2YgKHVpbnQzMl90KSkgKyBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpOwogCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksIG5kbHAsCiAJCQkJCQluZGxwLT5ubHBfRElELCBFTFNfQ01EX0xPR08pOwogCWlmICghZWxzaW9jYikKQEAgLTE0NTEsMjIgKzE0NDgsMjMgQEAKIAkJCSAqIFBMT0dJcyB0byBiZSBzZW50CiAJCQkgKi8KIAkJCWxwZmNfbW9yZV9wbG9naShwaGJhKTsKLQkJfQogCi0JCWlmIChwaGJhLT5udW1fZGlzY19ub2RlcyA9PSAwKSB7Ci0JCQlwaGJhLT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7Ci0JCQlscGZjX2Nhbl9kaXNjdG1vKHBoYmEpOwotCQkJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpIHsKLQkJCQkvKiBDaGVjayB0byBzZWUgaWYgbW9yZSBSU0NOcwotCQkJCSAqIGNhbWUgaW4gd2hpbGUgd2Ugd2VyZQotCQkJCSAqIHByb2Nlc3NpbmcgdGhpcyBvbmUuCi0JCQkJICovCi0JCQkJaWYoKHBoYmEtPmZjX3JzY25faWRfY250PT0wKSAmJgotCQkJCSAgICghKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX0RJU0NPVkVSWSkpKSB7Ci0JCQkJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX1JTQ05fTU9ERTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWxwZmNfZWxzX2hhbmRsZV9yc2NuKHBoYmEpOworCQkJaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID09IDApIHsKKwkJCQlwaGJhLT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7CisJCQkJbHBmY19jYW5fZGlzY3RtbyhwaGJhKTsKKwkJCQlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgeworCQkJCQkvKgorCQkJCQkgKiBDaGVjayB0byBzZWUgaWYgbW9yZSBSU0NOcworCQkJCQkgKiBjYW1lIGluIHdoaWxlIHdlIHdlcmUKKwkJCQkJICogcHJvY2Vzc2luZyB0aGlzIG9uZS4KKwkJCQkJICovCisJCQkJCWlmKChwaGJhLT5mY19yc2NuX2lkX2NudD09MCkgJiYKKwkJCQkJICEocGhiYS0+ZmNfZmxhZyAmIEZDX1JTQ05fRElTQ09WRVJZKSkgeworCQkJCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfUlNDTl9NT0RFOworCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQkJbHBmY19lbHNfaGFuZGxlX3JzY24ocGhiYSk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTE4NzIsOSArMTg3MCw2IEBACiAJaWYgKG1ib3gpIHsKIAkJaWYgKChyc3Bpb2NiLT5pb2NiLnVscFN0YXR1cyA9PSAwKQogCQkgICAgJiYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0FDQ19SRUdMT0dJTikpIHsKLQkJCS8qIHNldF9zbGltIG1haWxib3ggY29tbWFuZCBuZWVkcyB0byBleGVjdXRlIGZpcnN0LAotCQkJICogcXVldWUgdGhpcyBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZCBsYXRlci4KLQkJCSAqLwogCQkJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CiAJCQltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlZ19sb2dpbjsKIAkJCW1ib3gtPmNvbnRleHQyID0gbmRscDsKQEAgLTE5MjAsNiArMTkxNSw3IEBACiAJdWludDhfdCAqcGNtZDsKIAl1aW50MTZfdCBjbWRzaXplOwogCWludCByYzsKKwlFTFNfUEtUICplbHNfcGt0X3B0cjsKIAogCXBzbGkgPSAmcGhiYS0+c2xpOwogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CS8qIEVMUyByaW5nICovCkBAIC0xOTU4LDYgKzE5NTQsMjMgQEAKIAkJcGNtZCArPSBzaXplb2YgKHVpbnQzMl90KTsKIAkJbWVtY3B5KHBjbWQsICZwaGJhLT5mY19zcGFyYW0sIHNpemVvZiAoc3RydWN0IHNlcnZfcGFybSkpOwogCQlicmVhazsKKwljYXNlIEVMU19DTURfUFJMTzoKKwkJY21kc2l6ZSA9IHNpemVvZiAodWludDMyX3QpICsgc2l6ZW9mIChQUkxPKTsKKwkJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAwLCBjbWRzaXplLCBvbGRpb2NiLT5yZXRyeSwKKwkJCQkJICAgICBuZGxwLCBuZGxwLT5ubHBfRElELCBFTFNfQ01EX1BSTE8pOworCQlpZiAoIWVsc2lvY2IpCisJCQlyZXR1cm4gMTsKKworCQlpY21kID0gJmVsc2lvY2ItPmlvY2I7CisJCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7IC8qIFhyaSAqLworCQlwY21kID0gKCgoc3RydWN0IGxwZmNfZG1hYnVmICopIGVsc2lvY2ItPmNvbnRleHQyKS0+dmlydCk7CisKKwkJbWVtY3B5KHBjbWQsICgoc3RydWN0IGxwZmNfZG1hYnVmICopIG9sZGlvY2ItPmNvbnRleHQyKS0+dmlydCwKKwkJICAgICAgIHNpemVvZiAodWludDMyX3QpICsgc2l6ZW9mIChQUkxPKSk7CisJCSooKHVpbnQzMl90ICopIChwY21kKSkgPSBFTFNfQ01EX1BSTE9fQUNDOworCQllbHNfcGt0X3B0ciA9IChFTFNfUEtUICopIHBjbWQ7CisJCWVsc19wa3RfcHRyLT51bi5wcmxvLmFjY2VwdFJzcENvZGUgPSBQUkxPX1JFUV9FWEVDVVRFRDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMjQ5OCw3ICsyNTExLDcgQEAKIAkvKiBJZiB3ZSBhcmUgYWJvdXQgdG8gYmVnaW4gZGlzY292ZXJ5LCBqdXN0IEFDQyB0aGUgUlNDTi4KIAkgKiBEaXNjb3ZlcnkgcHJvY2Vzc2luZyB3aWxsIHNhdGlzZnkgaXQuCiAJICovCi0JaWYgKHBoYmEtPmhiYV9zdGF0ZSA8IExQRkNfTlNfUVJZKSB7CisJaWYgKHBoYmEtPmhiYV9zdGF0ZSA8PSBMUEZDX05TX1FSWSkgewogCQlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfQUNDLCBjbWRpb2NiLCBuZGxwLCBOVUxMLAogCQkJCQkJCQluZXdub2RlKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDY3MjFlNjcuLmFkYjA4NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC0zMTEsOCArMzExLDggQEAKIAlldnRwLT5ldnRfYXJnMiAgPSBhcmcyOwogCWV2dHAtPmV2dCAgICAgICA9IGV2dDsKIAotCWxpc3RfYWRkX3RhaWwoJmV2dHAtPmV2dF9saXN0cCwgJnBoYmEtPndvcmtfbGlzdCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmV2dHAtPmV2dF9saXN0cCwgJnBoYmEtPndvcmtfbGlzdCk7CiAJaWYgKHBoYmEtPndvcmtfd2FpdCkKIAkJd2FrZV91cChwaGJhLT53b3JrX3dhaXQpOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtMTA3MSwxMCArMTA3MSw2IEBACiAJLyogaW5pdGlhbGl6ZSBzdGF0aWMgcG9ydCBkYXRhICovCiAJcnBvcnQtPm1heGZyYW1lX3NpemUgPSBuZGxwLT5ubHBfbWF4ZnJhbWU7CiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gbmRscC0+bmxwX2NsYXNzX3N1cDsKLQlpZiAoKHJwb3J0LT5zY3NpX3RhcmdldF9pZCAhPSAtMSkgJiYKLQkJKHJwb3J0LT5zY3NpX3RhcmdldF9pZCA8IE1BWF9GQ1BfVEFSR0VUKSkgewotCQluZGxwLT5ubHBfc2lkID0gcnBvcnQtPnNjc2lfdGFyZ2V0X2lkOwotCX0KIAlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCXJkYXRhLT5wbm9kZSA9IG5kbHA7CiAKQEAgLTEwODcsNiArMTA4MywxMCBAQAogCWlmIChycG9ydF9pZHMucm9sZXMgIT0gIEZDX1JQT1JUX1JPTEVfVU5LTk9XTikKIAkJZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyhycG9ydCwgcnBvcnRfaWRzLnJvbGVzKTsKIAorCWlmICgocnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKSAmJgorCQkocnBvcnQtPnNjc2lfdGFyZ2V0X2lkIDwgTUFYX0ZDUF9UQVJHRVQpKSB7CisJCW5kbHAtPm5scF9zaWQgPSBycG9ydC0+c2NzaV90YXJnZXRfaWQ7CisJfQogCiAJcmV0dXJuOwogfQpAQCAtMTIzOCw2ICsxMjM4LDcgQEAKIAkJCQkJCWV2dF9saXN0cCk7CiAKIAkJfQorCQlubHAtPm5scF9mbGFnICY9IH5OTFBfTk9ERVZfUkVNT1ZFOwogCQlubHAtPm5scF90eXBlIHw9IE5MUF9GQ19OT0RFOwogCQlicmVhazsKIAljYXNlIE5MUF9NQVBQRURfTElTVDoKQEAgLTEyNTgsNiArMTI1OSw3IEBACiAJCQkJCQlldnRfbGlzdHApOwogCiAJCX0KKwkJbmxwLT5ubHBfZmxhZyAmPSB+TkxQX05PREVWX1JFTU9WRTsKIAkJYnJlYWs7CiAJY2FzZSBOTFBfTlBSX0xJU1Q6CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKQEAgLTE0MDIsNiArMTQwNCw4IEBACiAJCQlpZiAoaWNtZC0+dWxwQ29udGV4dCA9PSAodm9sYXRpbGUgdXNob3J0KW5kbHAtPm5scF9ycGkpCiAJCQkJcmV0dXJuIDE7CiAJCWNhc2UgQ01EX0VMU19SRVFVRVNUNjRfQ1I6CisJCQlpZiAoaWNtZC0+dW4uZWxzcmVxNjQucmVtb3RlSUQgPT0gbmRscC0+bmxwX0RJRCkKKwkJCQlyZXR1cm4gMTsKIAkJY2FzZSBDTURfWE1JVF9FTFNfUlNQNjRfQ1g6CiAJCQlpZiAoaW9jYi0+Y29udGV4dDEgPT0gKHVpbnQ4X3QgKikgbmRscCkKIAkJCQlyZXR1cm4gMTsKQEAgLTE5MDEsMTAgKzE5MDUsOCBAQAogCQkJICovCiAJCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKQogCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhwaGJhLCBuZGxwKTsKLQkJfSBlbHNlIHsKLQkJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJCX0gZWxzZQogCQkJbmRscCA9IE5VTEw7Ci0JCX0KIAl9IGVsc2UgewogCQlmbGcgPSBuZGxwLT5ubHBfZmxhZyAmIE5MUF9MSVNUX01BU0s7CiAJCWlmICgoZmxnID09IE5MUF9BRElTQ19MSVNUKSB8fCAoZmxnID09IE5MUF9QTE9HSV9MSVNUKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCA1NGQwNDE4Li5lZWRmOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC00NDksNiArNDQ5LDcgQEAKICNkZWZpbmUgRUxTX0NNRF9SUlEgICAgICAgMHgxMjAwMDAwMAogI2RlZmluZSBFTFNfQ01EX1BSTEkgICAgICAweDIwMTAwMDE0CiAjZGVmaW5lIEVMU19DTURfUFJMTyAgICAgIDB4MjExMDAwMTQKKyNkZWZpbmUgRUxTX0NNRF9QUkxPX0FDQyAgMHgwMjEwMDAxNAogI2RlZmluZSBFTFNfQ01EX1BESVNDICAgICAweDUwMDAwMDAwCiAjZGVmaW5lIEVMU19DTURfRkRJU0MgICAgIDB4NTEwMDAwMDAKICNkZWZpbmUgRUxTX0NNRF9BRElTQyAgICAgMHg1MjAwMDAwMApAQCAtNDg0LDYgKzQ4NSw3IEBACiAjZGVmaW5lIEVMU19DTURfUlJRICAgICAgIDB4MTIKICNkZWZpbmUgRUxTX0NNRF9QUkxJICAgICAgMHgxNDAwMTAyMAogI2RlZmluZSBFTFNfQ01EX1BSTE8gICAgICAweDE0MDAxMDIxCisjZGVmaW5lIEVMU19DTURfUFJMT19BQ0MgIDB4MTQwMDEwMDIKICNkZWZpbmUgRUxTX0NNRF9QRElTQyAgICAgMHg1MAogI2RlZmluZSBFTFNfQ01EX0ZESVNDICAgICAweDUxCiAjZGVmaW5lIEVMU19DTURfQURJU0MgICAgIDB4NTIKQEAgLTE1MzksNiArMTU0MSw3IEBACiAKICNkZWZpbmUgRkxBR1NfVE9QT0xPR1lfRkFJTE9WRVIgICAgICAweDA0MDAJLyogQml0IDEwICovCiAjZGVmaW5lIEZMQUdTX0xJTktfU1BFRUQgICAgICAgICAgICAgMHgwODAwCS8qIEJpdCAxMSAqLworI2RlZmluZSBGTEFHU19JTUVEX0FCT1JUICAgICAgICAgICAgIDB4MDQwMDAJLyogQml0IDE0ICovCiAKIAl1aW50MzJfdCBsaW5rX3NwZWVkOwogI2RlZmluZSBMSU5LX1NQRUVEX0FVVE8gMCAgICAgICAvKiBBdXRvIHNlbGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCA2NmQ1ZDAwLi45MDhkMGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMjk0LDE1ICsyOTQsNiBAQAogCQl9CiAJfQogCi0JLyogVGhpcyBzaG91bGQgdHVybiBvbiBERUxBWUVEIEFCVFMgZm9yIEVMUyB0aW1lb3V0cyAqLwotCWxwZmNfc2V0X3NsaW0ocGhiYSwgcG1iLCAweDA1MjE5OCwgMHgxKTsKLQlpZiAobHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKSAhPSBNQlhfU1VDQ0VTUykgewotCQlwaGJhLT5oYmFfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKLQkJbWVtcG9vbF9mcmVlKCBwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQogCWxwZmNfcmVhZF9jb25maWcocGhiYSwgcG1iKTsKIAlpZiAobHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKSAhPSBNQlhfU1VDQ0VTUykgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKQEAgLTgwNCw3ICs3OTUsNyBAQAogCQlpbnQgICAgbWF4X3NwZWVkOwogCQljaGFyICogcG9ydHM7CiAJCWNoYXIgKiBidXM7Ci0JfSBtOworCX0gbSA9IHsiPFVua25vd24+IiwgMCwgIiIsICIifTsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBoYmEtPnBjaWRldiwgUENJX0hFQURFUl9UWVBFLCAmaGRydHlwZSk7CiAJcG9ydHMgPSAoaGRydHlwZSA9PSAweDgwKSA/ICIyLXBvcnQgIiA6ICIiOwpAQCAtMTYyNyw3ICsxNjE4LDcgQEAKIAogCWVycm9yID0gbHBmY19hbGxvY19zeXNmc19hdHRyKHBoYmEpOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfa3RocmVhZF9zdG9wOworCQlnb3RvIG91dF9yZW1vdmVfaG9zdDsKIAogCWVycm9yID0JcmVxdWVzdF9pcnEocGhiYS0+cGNpZGV2LT5pcnEsIGxwZmNfaW50cl9oYW5kbGVyLCBTQV9TSElSUSwKIAkJCQkJCQlMUEZDX0RSSVZFUl9OQU1FLCBwaGJhKTsKQEAgLTE2NDQsOCArMTYzNSwxMCBAQAogCXBoYmEtPkhDcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhDX1JFR19PRkZTRVQ7CiAKIAllcnJvciA9IGxwZmNfc2xpX2hiYV9zZXR1cChwaGJhKTsKLQlpZiAoZXJyb3IpCisJaWYgKGVycm9yKSB7CisJCWVycm9yID0gLUVOT0RFVjsKIAkJZ290byBvdXRfZnJlZV9pcnE7CisJfQogCiAJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKIAkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtMTcwMCw2ICsxNjkzLDkgQEAKIAlmcmVlX2lycShwaGJhLT5wY2lkZXYtPmlycSwgcGhiYSk7CiBvdXRfZnJlZV9zeXNmc19hdHRyOgogCWxwZmNfZnJlZV9zeXNmc19hdHRyKHBoYmEpOworb3V0X3JlbW92ZV9ob3N0OgorCWZjX3JlbW92ZV9ob3N0KHBoYmEtPmhvc3QpOworCXNjc2lfcmVtb3ZlX2hvc3QocGhiYS0+aG9zdCk7CiBvdXRfa3RocmVhZF9zdG9wOgogCWt0aHJlYWRfc3RvcChwaGJhLT53b3JrZXJfdGhyZWFkKTsKIG91dF9mcmVlX2lvY2JxOgpAQCAtMTcyMSwxMiArMTcxNywxNCBAQAogb3V0X2lkcl9yZW1vdmU6CiAJaWRyX3JlbW92ZSgmbHBmY19oYmFfaW5kZXgsIHBoYmEtPmJyZF9ubyk7CiBvdXRfcHV0X2hvc3Q6CisJcGhiYS0+aG9zdCA9IE5VTEw7CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKIG91dF9yZWxlYXNlX3JlZ2lvbnM6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIG91dF9kaXNhYmxlX2RldmljZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBvdXQ6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCBjNTg1ZTJiLi5lNDJmMjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtMjAwLDYgKzIwMCw5IEBACiAJCWJyZWFrOwogCX0KIAorCS8qIEVuYWJsZSBhc3luY2hyb25vdXMgQUJUUyByZXNwb25zZXMgZnJvbSBmaXJtd2FyZSAqLworCW1iLT51bi52YXJJbml0TG5rLmxpbmtfZmxhZ3MgfD0gRkxBR1NfSU1FRF9BQk9SVDsKKwogCS8qIE5FV19GRUFUVVJFCiAJICogU2V0dGluZyB1cCB0aGUgbGluayBzcGVlZAogCSAqLwpAQCAtMjkyLDM2ICsyOTUsNiBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gd3JpdGUgc2xpbSAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1scGZjX3NldF9zbGltKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYiwgdWludDMyX3QgYWRkciwKLQkgICAgICB1aW50MzJfdCB2YWx1ZSkKLXsKLQlNQUlMQk9YX3QgKm1iOwotCi0JbWIgPSAmcG1iLT5tYjsKLQltZW1zZXQocG1iLCAwLCBzaXplb2YgKExQRkNfTUJPWFFfdCkpOwotCi0JLyogYWRkciA9IDB4MDkwNTk3IGlzIEFVVE8gQUJUUyBkaXNhYmxlIGZvciBFTFMgY29tbWFuZHMgKi8KLQkvKiBhZGRyID0gMHgwNTIxOTggaXMgREVMQVlFRCBBQlRTIGVuYWJsZSBmb3IgRUxTIGNvbW1hbmRzICovCi0KLQkvKgotCSAqIEFsd2F5cyB0dXJuIG9uIERFTEFZRUQgQUJUUyBmb3IgRUxTIHRpbWVvdXRzCi0JICovCi0JaWYgKChhZGRyID09IDB4MDUyMTk4KSAmJiAodmFsdWUgPT0gMCkpCi0JCXZhbHVlID0gMTsKLQotCW1iLT51bi52YXJXb3Jkc1swXSA9IGFkZHI7Ci0JbWItPnVuLnZhcldvcmRzWzFdID0gdmFsdWU7Ci0KLQltYi0+bWJ4Q29tbWFuZCA9IE1CWF9TRVRfU0xJTTsKLQltYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKLQlyZXR1cm47Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIGxwZmNfcmVhZF9udiAgSXNzdWUgYSBSRUFEIENPTkZJRyAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCmluZGV4IDNkNzdiZDkuLjI3ZDYwYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwpAQCAtNDY1LDE0ICs0NjUsMTggQEAKIHN0YXRpYyBpbnQKIGxwZmNfcmN2X2xvZ28oc3RydWN0IGxwZmNfaGJhICogcGhiYSwKIAkJICAgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLAotCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYikKKwkJICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCSAgICAgIHVpbnQzMl90IGVsc19jbWQpCiB7CiAJLyogUHV0IG5kbHAgb24gTlBSIGxpc3Qgd2l0aCAxIHNlYyB0aW1lb3V0IGZvciBwbG9naSwgQUNDIGxvZ28gKi8KIAkvKiBPbmx5IGNhbGwgTE9HTyBBQ0MgZm9yIGZpcnN0IExPR08sIHRoaXMgYXZvaWRzIHNlbmRpbmcgdW5uZWNlc3NhcnkKIAkgKiBQTE9HSXMgZHVyaW5nIExPR08gc3Rvcm1zIGZyb20gYSBkZXZpY2UuCiAJICovCiAJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0xPR09fQUNDOwotCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOworCWlmIChlbHNfY21kID09IEVMU19DTURfUFJMTykKKwkJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BSTE8sIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOworCWVsc2UKKwkJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CiAKIAlpZiAoIShuZGxwLT5ubHBfdHlwZSAmIE5MUF9GQUJSSUMpIHx8CiAJCShuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9BRElTQ19JU1NVRSkpIHsKQEAgLTY4MSw3ICs2ODUsNyBAQAogCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCiAJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKLQlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IpOworCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9MT0dPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC03ODgsMTAgKzc5Miw2IEBACiAJaWYgKGxwZmNfcmVnX2xvZ2luCiAJICAgIChwaGJhLCBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRCwKIAkgICAgICh1aW50OF90ICopIHNwLCBtYm94LCAwKSA9PSAwKSB7Ci0JCS8qIHNldF9zbGltIG1haWxib3ggY29tbWFuZCBuZWVkcyB0bwotCQkgKiBleGVjdXRlIGZpcnN0LCBxdWV1ZSB0aGlzIGNvbW1hbmQgdG8KLQkJICogYmUgcHJvY2Vzc2VkIGxhdGVyLgotCQkgKi8KIAkJc3dpdGNoIChuZGxwLT5ubHBfRElEKSB7CiAJCWNhc2UgTmFtZVNlcnZlcl9ESUQ6CiAJCQltYm94LT5tYm94X2NtcGwgPQpAQCAtODMyLDExICs4MzIsMTcgQEAKIGxwZmNfZGV2aWNlX3JtX3Bsb2dpX2lzc3VlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCiAJCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewotCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCi0JbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJaWYobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpIHsKKwkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05PREVWX1JFTU9WRTsKKwkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKKwl9CisJZWxzZSB7CisJCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCisJCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwogCi0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJfQogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTg1MSw3ICs4NTcsNyBAQAogCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl8yQl9ESVNDOworCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtOTA1LDcgKzkxMSw3IEBACiAJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgQURJU0MgKi8KIAlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAwKTsKIAotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTkzMiw3ICs5MzgsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJLyogVHJlYXQgbGlrZSByY3YgbG9nbyAqLwotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX1BSTE8pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTk4NywxMSArOTkzLDE3IEBACiAJCQkgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsCiAJCQkgICAgdWludDMyX3QgZXZ0KQogewotCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIEFESVNDICovCi0JbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJaWYobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpIHsKKwkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05PREVWX1JFTU9WRTsKKwkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKKwl9CisJZWxzZSB7CisJCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIEFESVNDICovCisJCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwogCi0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJfQogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTEwMDYsNyArMTAxOCw3IEBACiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTlBSX0FESVNDOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCkBAIC0xMDQ4LDcgKzEwNjAsNyBAQAogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKLQlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IpOworCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9MT0dPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xMDczLDcgKzEwODUsNyBAQAogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiOwogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7Ci0JbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CisJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BSTE8sIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTExMzMsOCArMTE0NSwxNCBAQAogCQkJICAgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsCiAJCQkgICAgICB1aW50MzJfdCBldnQpCiB7Ci0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwlpZihuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgeworCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTk9ERVZfUkVNT1ZFOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOworCX0KKwllbHNlIHsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJfQogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTExNDYsNyArMTE2NCw3IEBACiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQpAQCAtMTE4Niw3ICsxMjA0LDcgQEAKIAkvKiBTb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQUkxJIGJlZm9yZSBzZW5kaW5nIGFjYyAqLwogCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwogCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfTE9HTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTIxNCw3ICsxMjMyLDcgQEAKIAlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYjsKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwotCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOworCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9QUkxPLCBjbWRpb2NiLCBuZGxwLCBOVUxMLCAwKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xMjc4LDExICsxMjk2LDE3IEBACiBscGZjX2RldmljZV9ybV9wcmxpX2lzc3VlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCiAJCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCiB7Ci0JLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUFJMSSAqLwotCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOworCWlmKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSB7CisJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9OT0RFVl9SRU1PVkU7CisJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CisJfQorCWVsc2UgeworCQkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQTE9HSSAqLworCQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKIAotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCX0KIH0KIAogCkBAIC0xMzEzLDcgKzEzMzcsNyBAQAogCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl8yQl9ESVNDOworCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KQEAgLTEzNTEsNyArMTM3NSw3IEBACiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTEzNzUsNyArMTM5OSw3IEBACiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAotCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOworCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9QUkxPLCBjbWRpb2NiLCBuZGxwLCBOVUxMLCAwKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xMzg2LDcgKzE0MTAsNyBAQAogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwogCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwotCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAlscGZjX2Rpc2Nfc2V0X2FkaXNjKHBoYmEsIG5kbHApOwogCiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKQEAgLTE0MjQsNyArMTQ0OCw3IEBACiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTE0NTYsNyArMTQ4MCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAkvKiBUcmVhdCBsaWtlIHJjdiBsb2dvICovCi0JbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlscGZjX3Jjdl9sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2IsIEVMU19DTURfUFJMTyk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTQ2OSw3ICsxNDkzLDcgQEAKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWxwZmNfZGlzY19zZXRfYWRpc2MocGhiYSwgbmRscCk7CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKQEAgLTE1NTEsNyArMTU3NSw3IEBACiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7CisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTE2MTcsOSArMTY0MSwxNiBAQAogCQkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLCAqcnNwaW9jYjsKKwlJT0NCX3QgKmlyc3A7CiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAlyc3Bpb2NiID0gY21kaW9jYi0+Y29udGV4dF91bi5yc3BfaW9jYjsKKworCWlyc3AgPSAmcnNwaW9jYi0+aW9jYjsKKwlpZiAoaXJzcC0+dWxwU3RhdHVzKSB7CisJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCX0KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xNjI4LDkgKzE2NTksMTYgQEAKIAkJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsIHVpbnQzMl90IGV2dCkKIHsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwgKnJzcGlvY2I7CisJSU9DQl90ICppcnNwOwogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAJcnNwaW9jYiA9IGNtZGlvY2ItPmNvbnRleHRfdW4ucnNwX2lvY2I7CisKKwlpcnNwID0gJnJzcGlvY2ItPmlvY2I7CisJaWYgKGlyc3AtPnVscFN0YXR1cyAmJiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTk9ERVZfUkVNT1ZFKSkgeworCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKKwl9CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTY0OSw5ICsxNjg3LDE2IEBACiAJCQkgICAgdWludDMyX3QgZXZ0KQogewogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLCAqcnNwaW9jYjsKKwlJT0NCX3QgKmlyc3A7CiAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAlyc3Bpb2NiID0gY21kaW9jYi0+Y29udGV4dF91bi5yc3BfaW9jYjsKKworCWlyc3AgPSAmcnNwaW9jYi0+aW9jYjsKKwlpZiAoaXJzcC0+dWxwU3RhdHVzICYmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OT0RFVl9SRU1PVkUpKSB7CisJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCX0KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xNjY4LDcgKzE3MTMsMTIgQEAKIAogCWlmICghbWItPm1ieFN0YXR1cykKIAkJbmRscC0+bmxwX3JwaSA9IG1iLT51bi52YXJXb3Jkc1swXTsKLQorCWVsc2UgeworCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTk9ERVZfUkVNT1ZFKSB7CisJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CisJCX0KKwl9CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIApAQCAtMTY3Nyw2ICsxNzI3LDEwIEBACiAJCQkgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsCiAJCQkgICAgdWludDMyX3QgZXZ0KQogeworCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgeworCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTk9ERVZfUkVNT1ZFOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOworCX0KIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKIAlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogfQpAQCAtMTY4Nyw3ICsxNzQxLDcgQEAKIAkJCSAgICB1aW50MzJfdCBldnQpCiB7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSB7CiAJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhwaGJhLCBuZGxwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggZjkzNzk5OC4uN2RjNGMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTYyOSw4ICs2MjksNyBAQAogCXN0cnVjdCBscGZjX2lvY2JxICpwaW9jYnE7CiAJSU9DQl90ICpwaW9jYjsKIAlzdHJ1Y3QgZmNwX2NtbmQgKmZjcF9jbW5kOwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYgPSBscGZjX2NtZC0+cENtZC0+ZGV2aWNlOwotCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gc2NzaV9kZXYtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gbHBmY19jbWQtPnJkYXRhOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gcmRhdGEtPnBub2RlOwogCiAJaWYgKChuZGxwID09IE5VTEwpIHx8IChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkpIHsKQEAgLTY2NSw1NiArNjY0LDE4IEBACiAJCXBpb2NiLT51bHBUaW1lb3V0ID0gbHBmY19jbWQtPnRpbWVvdXQ7CiAJfQogCi0JbHBmY19jbWQtPnJkYXRhID0gcmRhdGE7Ci0KLQlzd2l0Y2ggKHRhc2tfbWdtdF9jbWQpIHsKLQljYXNlIEZDUF9MVU5fUkVTRVQ6Ci0JCS8qIElzc3VlIExVTiBSZXNldCB0byBUR1QgPG51bT4gTFVOIDxudW0+ICovCi0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAotCQkJCUtFUk5fSU5GTywKLQkJCQlMT0dfRkNQLAotCQkJCSIlZDowNzAzIElzc3VlIExVTiBSZXNldCB0byBUR1QgJWQgTFVOICVkICIKLQkJCQkiRGF0YTogeCV4IHgleFxuIiwKLQkJCQlwaGJhLT5icmRfbm8sCi0JCQkJc2NzaV9kZXYtPmlkLCBzY3NpX2Rldi0+bHVuLAotCQkJCW5kbHAtPm5scF9ycGksIG5kbHAtPm5scF9mbGFnKTsKLQotCQlicmVhazsKLQljYXNlIEZDUF9BQk9SVF9UQVNLX1NFVDoKLQkJLyogSXNzdWUgQWJvcnQgVGFzayBTZXQgdG8gVEdUIDxudW0+IExVTiA8bnVtPiAqLwotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKLQkJCQlLRVJOX0lORk8sCi0JCQkJTE9HX0ZDUCwKLQkJCQkiJWQ6MDcwMSBJc3N1ZSBBYm9ydCBUYXNrIFNldCB0byBUR1QgJWQgTFVOICVkICIKLQkJCQkiRGF0YTogeCV4IHgleFxuIiwKLQkJCQlwaGJhLT5icmRfbm8sCi0JCQkJc2NzaV9kZXYtPmlkLCBzY3NpX2Rldi0+bHVuLAotCQkJCW5kbHAtPm5scF9ycGksIG5kbHAtPm5scF9mbGFnKTsKLQotCQlicmVhazsKLQljYXNlIEZDUF9UQVJHRVRfUkVTRVQ6Ci0JCS8qIElzc3VlIFRhcmdldCBSZXNldCB0byBUR1QgPG51bT4gKi8KLQkJbHBmY19wcmludGZfbG9nKHBoYmEsCi0JCQkJS0VSTl9JTkZPLAotCQkJCUxPR19GQ1AsCi0JCQkJIiVkOjA3MDIgSXNzdWUgVGFyZ2V0IFJlc2V0IHRvIFRHVCAlZCAiCi0JCQkJIkRhdGE6IHgleCB4JXhcbiIsCi0JCQkJcGhiYS0+YnJkX25vLAotCQkJCXNjc2lfZGV2LT5pZCwgbmRscC0+bmxwX3JwaSwKLQkJCQluZGxwLT5ubHBfZmxhZyk7Ci0JCWJyZWFrOwotCX0KLQogCXJldHVybiAoMSk7CiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfc2NzaV90Z3RfcmVzZXQoc3RydWN0IGxwZmNfc2NzaV9idWYgKiBscGZjX2NtZCwgc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK2xwZmNfc2NzaV90Z3RfcmVzZXQoc3RydWN0IGxwZmNfc2NzaV9idWYgKiBscGZjX2NtZCwgc3RydWN0IGxwZmNfaGJhICogcGhiYSwKKwkJICAgIHVuc2lnbmVkICB0Z3RfaWQsIHN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhKQogewogCXN0cnVjdCBscGZjX2lvY2JxICppb2NicTsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnFyc3A7CiAJaW50IHJldDsKIAorCWxwZmNfY21kLT5yZGF0YSA9IHJkYXRhOwogCXJldCA9IGxwZmNfc2NzaV9wcmVwX3Rhc2tfbWdtdF9jbWQocGhiYSwgbHBmY19jbWQsIEZDUF9UQVJHRVRfUkVTRVQpOwogCWlmICghcmV0KQogCQlyZXR1cm4gRkFJTEVEOwpAQCAtNzI2LDYgKzY4NywxMyBAQAogCWlmICghaW9jYnFyc3ApCiAJCXJldHVybiBGQUlMRUQ7CiAKKwkvKiBJc3N1ZSBUYXJnZXQgUmVzZXQgdG8gVEdUIDxudW0+ICovCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZDUCwKKwkJCSIlZDowNzAyIElzc3VlIFRhcmdldCBSZXNldCB0byBUR1QgJWQgIgorCQkJIkRhdGE6IHgleCB4JXhcbiIsCisJCQlwaGJhLT5icmRfbm8sIHRndF9pZCwgcmRhdGEtPnBub2RlLT5ubHBfcnBpLAorCQkJcmRhdGEtPnBub2RlLT5ubHBfZmxhZyk7CisKIAlyZXQgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwKIAkJCQkgICAgICAgJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCiAJCQkJICAgICAgIGlvY2JxLCBpb2NicXJzcCwgbHBmY19jbWQtPnRpbWVvdXQpOwpAQCAtMTAyMSw2ICs5ODksNyBAQAogCWxwZmNfY21kLT5wQ21kID0gY21uZDsKIAlscGZjX2NtZC0+dGltZW91dCA9IDYwOwogCWxwZmNfY21kLT5zY3NpX2hiYSA9IHBoYmE7CisJbHBmY19jbWQtPnJkYXRhID0gcmRhdGE7CiAKIAlyZXQgPSBscGZjX3Njc2lfcHJlcF90YXNrX21nbXRfY21kKHBoYmEsIGxwZmNfY21kLCBGQ1BfTFVOX1JFU0VUKTsKIAlpZiAoIXJldCkKQEAgLTEwMzMsNiArMTAwMiwxMSBAQAogCWlmIChpb2NicXJzcCA9PSBOVUxMKQogCQlnb3RvIG91dF9mcmVlX3Njc2lfYnVmOwogCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZDUCwKKwkJCSIlZDowNzAzIElzc3VlIExVTiBSZXNldCB0byBUR1QgJWQgTFVOICVkICIKKwkJCSJEYXRhOiB4JXggeCV4XG4iLCBwaGJhLT5icmRfbm8sIGNtbmQtPmRldmljZS0+aWQsCisJCQljbW5kLT5kZXZpY2UtPmx1biwgcG5vZGUtPm5scF9ycGksIHBub2RlLT5ubHBfZmxhZyk7CisKIAlyZXQgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwKIAkJCQkgICAgICAgJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCiAJCQkJICAgICAgIGlvY2JxLCBpb2NicXJzcCwgbHBmY19jbWQtPnRpbWVvdXQpOwpAQCAtMTEwNCw3ICsxMDc4LDYgQEAKIAlpbnQgbWF0Y2g7CiAJaW50IHJldCA9IEZBSUxFRCwgaSwgZXJyX2NvdW50ID0gMDsKIAlpbnQgY250LCBsb29wY250OwotCXVuc2lnbmVkIGludCBtaWRsYXllcl9pZCA9IDA7CiAJc3RydWN0IGxwZmNfc2NzaV9idWYgKiBscGZjX2NtZDsKIAogCWxwZmNfYmxvY2tfcmVxdWVzdHMocGhiYSk7CkBAIC0xMTI0LDcgKzEwOTcsNiBAQAogCSAqIHRhcmdldHMga25vd24gdG8gdGhlIGRyaXZlci4gIFNob3VsZCBhbnkgdGFyZ2V0IHJlc2V0CiAJICogZmFpbCwgdGhpcyByb3V0aW5lIHJldHVybnMgZmFpbHVyZSB0byB0aGUgbWlkbGF5ZXIuCiAJICovCi0JbWlkbGF5ZXJfaWQgPSBjbW5kLT5kZXZpY2UtPmlkOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRkNQX1RBUkdFVDsgaSsrKSB7CiAJCS8qIFNlYXJjaCB0aGUgbWFwcGVkIGxpc3QgZm9yIHRoaXMgdGFyZ2V0IElEICovCiAJCW1hdGNoID0gMDsKQEAgLTExMzcsOSArMTEwOSw4IEBACiAJCWlmICghbWF0Y2gpCiAJCQljb250aW51ZTsKIAotCQlscGZjX2NtZC0+cENtZC0+ZGV2aWNlLT5pZCA9IGk7Ci0JCWxwZmNfY21kLT5wQ21kLT5kZXZpY2UtPmhvc3RkYXRhID0gbmRscC0+cnBvcnQtPmRkX2RhdGE7Ci0JCXJldCA9IGxwZmNfc2NzaV90Z3RfcmVzZXQobHBmY19jbWQsIHBoYmEpOworCQlyZXQgPSBscGZjX3Njc2lfdGd0X3Jlc2V0KGxwZmNfY21kLCBwaGJhLAorCQkJCQkgIGksIG5kbHAtPnJwb3J0LT5kZF9kYXRhKTsKIAkJaWYgKHJldCAhPSBTVUNDRVNTKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19GQ1AsCiAJCQkJIiVkOjA3MTMgQnVzIFJlc2V0IG9uIHRhcmdldCAlZCBmYWlsZWRcbiIsCkBAIC0xMTU4LDcgKzExMjksNiBAQAogCSAqIHRoZSB0YXJnZXRzLiAgVW5mb3J0dW5hdGVseSwgc29tZSB0YXJnZXRzIGRvIG5vdCBhYmlkZSBieQogCSAqIHRoaXMgZm9yY2luZyB0aGUgZHJpdmVyIHRvIGRvdWJsZSBjaGVjay4KIAkgKi8KLQljbW5kLT5kZXZpY2UtPmlkID0gbWlkbGF5ZXJfaWQ7CiAJY250ID0gbHBmY19zbGlfc3VtX2lvY2IocGhiYSwgJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCiAJCQkJMCwgMCwgTFBGQ19DVFhfSE9TVCk7CiAJaWYgKGNudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggNGNmMTM2Ni4uNmI3Mzc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjEuNCIKKyNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4xLjYiCiAKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRSAibHBmYyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCA4MGI2OGEyLi5kZTM1ZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtNDQ3MSw3ICs0NDcxLDYgQEAKIHsKIAlTY3NpX0NtbmQJKnNjbWQ7CiAJc3RydWN0CXNjc2lfZGV2aWNlICpzZGV2OwotCXVuc2lnbmVkIGxvbmcJZmxhZ3MgPSAwOwogCXNjYl90CSpzY2I7CiAJaW50CXJ2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IGMxMWU1Y2UuLmJlYzE0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMTAsNyArMTAsNyBAQAogICoJICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiBGSUxFCQk6IG1lZ2FyYWlkX21ib3guYwotICogVmVyc2lvbgk6IHYyLjIwLjQuNyAoTm92IDE0IDIwMDUpCisgKiBWZXJzaW9uCTogdjIuMjAuNC44IChBcHIgMTEgMjAwNikKICAqCiAgKiBBdXRob3JzOgogICogCUF0dWwgTXVra2VyCQk8QXR1bC5NdWtrZXJAbHNpbC5jb20+CkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXVpbnQ4X3QJCQljOwogCWludAkJCXN0YXR1czsKKwl1aW9jX3QJCQkqa2lvYzsKIAogCiAJaWYgKCFhZGFwdGVyKSByZXR1cm47CkBAIC0yMzIwLDYgKzIzMjEsOSBAQAogCQkJLy8gcmVtb3ZlIGZyb20gbG9jYWwgY2xpc3QKIAkJCWxpc3RfZGVsX2luaXQoJnNjYi0+bGlzdCk7CiAKKwkJCWtpb2MJCQk9ICh1aW9jX3QgKilzY2ItPmdwOworCQkJa2lvYy0+c3RhdHVzCQk9IDA7CisKIAkJCW1lZ2FyYWlkX21ib3hfbW1fZG9uZShhZGFwdGVyLCBzY2IpOwogCiAJCQljb250aW51ZTsKQEAgLTI2MzYsNiArMjY0MCw3IEBACiAJaW50CQlyZWNvdmVyeV93aW5kb3c7CiAJaW50CQlyZWNvdmVyaW5nOwogCWludAkJaTsKKwl1aW9jX3QJCSpraW9jOwogCiAJYWRhcHRlcgkJPSBTQ1AyQURBUFRFUihzY3ApOwogCXJhaWRfZGV2CT0gQURBUDJSQUlEREVWKGFkYXB0ZXIpOwpAQCAtMjY1NSwzMiArMjY2MCw1MSBAQAogCS8vIEFsc28sIHJlc2V0IGFsbCB0aGUgY29tbWFuZHMgY3VycmVudGx5IG93bmVkIGJ5IHRoZSBkcml2ZXIKIAlzcGluX2xvY2tfaXJxc2F2ZShQRU5ESU5HX0xJU1RfTE9DSyhhZGFwdGVyKSwgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY2IsIHRtcCwgJmFkYXB0ZXItPnBlbmRfbGlzdCwgbGlzdCkgewotCiAJCWxpc3RfZGVsX2luaXQoJnNjYi0+bGlzdCk7CS8vIGZyb20gcGVuZGluZyBsaXN0CiAKLQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKLQkJCSJtZWdhcmFpZDogJWxkOiVkWyVkOiVkXSwgcmVzZXQgZnJvbSBwZW5kaW5nIGxpc3RcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywKLQkJCQlzY2ItPmRldl9jaGFubmVsLCBzY2ItPmRldl90YXJnZXQpKTsKKwkJaWYgKHNjYi0+c25vID49IE1CT1hfTUFYX1NDU0lfQ01EUykgeworCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKKwkJCSJtZWdhcmFpZDogSU9DVEwgcGFja2V0IHdpdGggJWRbJWQ6JWRdIGJlaW5nIHJlc2V0XG4iLAorCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCi0JCXNjcC0+cmVzdWx0ID0gKERJRF9SRVNFVCA8PCAxNik7Ci0JCXNjcC0+c2NzaV9kb25lKHNjcCk7CisJCQlzY2ItPnN0YXR1cyA9IC0xOwogCi0JCW1lZ2FyYWlkX2RlYWxsb2Nfc2NiKGFkYXB0ZXIsIHNjYik7CisJCQlraW9jCQkJPSAodWlvY190ICopc2NiLT5ncDsKKwkJCWtpb2MtPnN0YXR1cwkJPSAtRUZBVUxUOworCisJCQltZWdhcmFpZF9tYm94X21tX2RvbmUoYWRhcHRlciwgc2NiKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzY2ItPnNjcCA9PSBzY3ApIHsJLy8gRm91bmQgY29tbWFuZAorCQkJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCisJCQkJCSJtZWdhcmFpZDogJWxkOiVkWyVkOiVkXSwgcmVzZXQgZnJvbSBwZW5kaW5nIGxpc3RcbiIsCisJCQkJCXNjcC0+c2VyaWFsX251bWJlciwgc2NiLT5zbm8sCisJCQkJCXNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOworCQkJfSBlbHNlIHsKKwkJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORworCQkJCSJtZWdhcmFpZDogSU8gcGFja2V0IHdpdGggJWRbJWQ6JWRdIGJlaW5nIHJlc2V0XG4iLAorCQkJCXNjYi0+c25vLCBzY2ItPmRldl9jaGFubmVsLCBzY2ItPmRldl90YXJnZXQpKTsKKwkJCX0KKworCQkJc2NiLT5zY3AtPnJlc3VsdCA9IChESURfUkVTRVQgPDwgMTYpOworCQkJc2NiLT5zY3AtPnNjc2lfZG9uZShzY2ItPnNjcCk7CisKKwkJCW1lZ2FyYWlkX2RlYWxsb2Nfc2NiKGFkYXB0ZXIsIHNjYik7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShQRU5ESU5HX0xJU1RfTE9DSyhhZGFwdGVyKSwgZmxhZ3MpOwogCiAJaWYgKGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHMpIHsKIAkJY29uX2xvZyhDTF9BTk4sIChLRVJOX05PVElDRQogCQkJIm1lZ2FyYWlkOiAlZCBvdXRzdGFuZGluZyBjb21tYW5kcy4gTWF4IHdhaXQgJWQgc2VjXG4iLAotCQkJYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kcywgTUJPWF9SRVNFVF9XQUlUKSk7CisJCQlhZGFwdGVyLT5vdXRzdGFuZGluZ19jbWRzLAorCQkJKE1CT1hfUkVTRVRfV0FJVCArIE1CT1hfUkVTRVRfRVhUX1dBSVQpKSk7CiAJfQogCiAJcmVjb3Zlcnlfd2luZG93ID0gTUJPWF9SRVNFVF9XQUlUICsgTUJPWF9SRVNFVF9FWFRfV0FJVDsKIAogCXJlY292ZXJpbmcgPSBhZGFwdGVyLT5vdXRzdGFuZGluZ19jbWRzOwogCi0JZm9yIChpID0gMDsgaSA8IHJlY292ZXJ5X3dpbmRvdyAmJiBhZGFwdGVyLT5vdXRzdGFuZGluZ19jbWRzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcmVjb3Zlcnlfd2luZG93OyBpKyspIHsKIAogCQltZWdhcmFpZF9hY2tfc2VxdWVuY2UoYWRhcHRlcik7CiAKQEAgLTI2ODksMTIgKzI3MTMsMTEgQEAKIAkJCWNvbl9sb2coQ0xfQU5OLCAoCiAJCQkibWVnYXJhaWQgbWJveDogV2FpdCBmb3IgJWQgY29tbWFuZHMgdG8gY29tcGxldGU6JWRcbiIsCiAJCQkJYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kcywKLQkJCQlNQk9YX1JFU0VUX1dBSVQgLSBpKSk7CisJCQkJKE1CT1hfUkVTRVRfV0FJVCArIE1CT1hfUkVTRVRfRVhUX1dBSVQpIC0gaSkpOwogCQl9CiAKIAkJLy8gYmFpbG91dCBpZiBubyByZWNvdmVyeSBoYXBwZW5kZWQgaW4gcmVzZXQgdGltZQotCQlpZiAoKGkgPT0gTUJPWF9SRVNFVF9XQUlUKSAmJgotCQkJKHJlY292ZXJpbmcgPT0gYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kcykpIHsKKwkJaWYgKGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHMgPT0gMCkgewogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjkxOCwxMiArMjk0MSwxMyBAQAogCXdtYigpOwogCVdSSU5ET09SKHJhaWRfZGV2LCByYWlkX2Rldi0+bWJveF9kbWEgfCAweDEpOwogCi0JZm9yIChpID0gMDsgaSA8IDB4RkZGRkY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQk9YX1NZTkNfV0FJVF9DTlQ7IGkrKykgewogCQlpZiAobWJveC0+bnVtc3RhdHVzICE9IDB4RkYpIGJyZWFrOwogCQlybWIoKTsKKwkJdWRlbGF5KE1CT1hfU1lOQ19ERUxBWV8yMDApOwogCX0KIAotCWlmIChpID09IDB4RkZGRkYpIHsKKwlpZiAoaSA9PSBNQk9YX1NZTkNfV0FJVF9DTlQpIHsKIAkJLy8gV2UgbWF5IG5lZWQgdG8gcmUtY2FsaWJyYXRlIHRoZSBjb3VudGVyCiAJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9DUklUCiAJCQkibWVnYXJhaWQ6IGZhc3Qgc3luYyBjb21tYW5kIHRpbWVkIG91dFxuIikpOwpAQCAtMzQ3NSw3ICszNDk5LDcgQEAKIAlhZHAuZHJ2cl9kYXRhCQk9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CiAJYWRwLnBkZXYJCT0gYWRhcHRlci0+cGRldjsKIAlhZHAuaXNzdWVfdWlvYwkJPSBtZWdhcmFpZF9tYm94X21tX2hhbmRsZXI7Ci0JYWRwLnRpbWVvdXQJCT0gMzAwOworCWFkcC50aW1lb3V0CQk9IE1CT1hfUkVTRVRfV0FJVCArIE1CT1hfUkVTRVRfRVhUX1dBSVQ7CiAJYWRwLm1heF9raW9jCQk9IE1CT1hfTUFYX1VTRVJfQ01EUzsKIAogCWlmICgocnZhbCA9IG1yYWlkX21tX3JlZ2lzdGVyX2FkcCgmYWRwKSkgIT0gMCkgewpAQCAtMzcwMiw3ICszNzI2LDYgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCWtpb2MJCQk9ICh1aW9jX3QgKilzY2ItPmdwOwotCWtpb2MtPnN0YXR1cwkJPSAwOwogCW1ib3g2NAkJCT0gKG1ib3g2NF90ICopKHVuc2lnbmVkIGxvbmcpa2lvYy0+Y21kYnVmOwogCW1ib3g2NC0+bWJveDMyLnN0YXR1cwk9IHNjYi0+c3RhdHVzOwogCXJhd19tYm94CQk9ICh1aW50OF90ICopJm1ib3g2NC0+bWJveDMyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmgKaW5kZXggODgyZmIxYS4uODY4ZmIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5oCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAibWVnYXJhaWRfaW9jdGwuaCIKIAogCi0jZGVmaW5lIE1FR0FSQUlEX1ZFUlNJT04JIjIuMjAuNC43IgotI2RlZmluZSBNRUdBUkFJRF9FWFRfVkVSU0lPTgkiKFJlbGVhc2UgRGF0ZTogTW9uIE5vdiAxNCAxMjoyNzoyMiBFU1QgMjAwNSkiCisjZGVmaW5lIE1FR0FSQUlEX1ZFUlNJT04JIjIuMjAuNC44IgorI2RlZmluZSBNRUdBUkFJRF9FWFRfVkVSU0lPTgkiKFJlbGVhc2UgRGF0ZTogTW9uIEFwciAxMSAxMjoyNzoyMiBFU1QgMjAwNikiCiAKIAogLyoKQEAgLTEwMCw2ICsxMDAsOSBAQAogI2RlZmluZSBNQk9YX0JVU1lfV0FJVAkJMTAJLy8gbWF4IHVzZWMgdG8gd2FpdCBmb3IgYnVzeSBtYWlsYm94CiAjZGVmaW5lIE1CT1hfUkVTRVRfV0FJVAkJMTgwCS8vIHdhaXQgdGhlc2UgbWFueSBzZWNvbmRzIGluIHJlc2V0CiAjZGVmaW5lIE1CT1hfUkVTRVRfRVhUX1dBSVQJMTIwCS8vIGV4dGVuZGVkIHdhaXQgcmVzZXQKKyNkZWZpbmUgTUJPWF9TWU5DX1dBSVRfQ05UCTB4RkZGRgkvLyB3YWl0IGxvb3AgaW5kZXggZm9yIHN5bmNocm9ub3VzIG1vZGUKKworI2RlZmluZSBNQk9YX1NZTkNfREVMQVlfMjAwCTIwMAkvLyAyMDAgbWljcm8tc2Vjb25kcwogCiAvKgogICogbWF4aW11bSB0cmFuc2ZlciB0aGF0IGNhbiBoYXBwZW4gdGhyb3VnaCB0aGUgZmlybXdhcmUgY29tbWFuZHMgaXNzdWVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbW0uYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5jCmluZGV4IDhmM2NlMDQuLmU4ZjUzNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5jCkBAIC04OTgsMTAgKzg5OCw4IEBACiAKIAlhZGFwdGVyID0ga21hbGxvYyhzaXplb2YobXJhaWRfbW1hZHBfdCksIEdGUF9LRVJORUwpOwogCi0JaWYgKCFhZGFwdGVyKSB7Ci0JCXJ2YWwgPSAtRU5PTUVNOwotCQlnb3RvIG1lbWFsbG9jX2Vycm9yOwotCX0KKwlpZiAoIWFkYXB0ZXIpCisJCXJldHVybiAtRU5PTUVNOwogCiAJbWVtc2V0KGFkYXB0ZXIsIDAsIHNpemVvZihtcmFpZF9tbWFkcF90KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCmluZGV4IDU2MDk4NDcuLmVlNDQ5YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYwpAQCAtODksMjkgKzg5LDI5IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3Qgc2NzaV9pbmZvX3QgewotICAgIGRldl9saW5rX3QJCWxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogICAgIGRldl9ub2RlX3QJCW5vZGU7CiAgICAgc3RydWN0IFNjc2lfSG9zdAkqaG9zdDsKIH0gc2NzaV9pbmZvX3Q7CiAKLXN0YXRpYyB2b2lkIGFoYTE1MnhfcmVsZWFzZV9jcyhkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyB2b2lkIGFoYTE1MnhfcmVsZWFzZV9jcyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBhaGExNTJ4X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotc3RhdGljIHZvaWQgYWhhMTUyeF9jb25maWdfY3MoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGFoYTE1MnhfY29uZmlnX2NzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAotc3RhdGljIGRldl9saW5rX3QgKmRldl9saXN0Oworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXZfbGlzdDsKIAotc3RhdGljIGludCBhaGExNTJ4X2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGFoYTE1MnhfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc2NzaV9pbmZvX3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKLSAgICAKKwogICAgIERFQlVHKDAsICJhaGExNTJ4X2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIENyZWF0ZSBuZXcgU0NTSSBkZXZpY2UgKi8KICAgICBpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWluZm8pIHJldHVybiAtRU5PTUVNOwogICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLSAgICBsaW5rID0gJmluZm8tPmxpbms7IGxpbmstPnByaXYgPSBpbmZvOworICAgIGluZm8tPnBfZGV2ID0gbGluazsKKyAgICBsaW5rLT5wcml2ID0gaW5mbzsKIAogICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDB4MjA7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKQEAgLTExOSw0MSArMTE5LDIyIEBACiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAgICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLSAgICBsaW5rLT5jb25mLlZjYyA9IDUwOwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0gICAgbGluay0+aGFuZGxlID0gcF9kZXY7Ci0gICAgcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotICAgIGxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotICAgIGFoYTE1MnhfY29uZmlnX2NzKGxpbmspOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFoYTE1MnhfY29uZmlnX2NzKGxpbmspOwogfSAvKiBhaGExNTJ4X2F0dGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgYWhhMTUyeF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgYWhhMTUyeF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0gICAgZGV2X2xpbmtfdCAqKmxpbmtwOwotCiAgICAgREVCVUcoMCwgImFoYTE1MnhfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKLSAgICAKLSAgICAvKiBMb2NhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGZvciAobGlua3AgPSAmZGV2X2xpc3Q7ICpsaW5rcDsgbGlua3AgPSAmKCpsaW5rcCktPm5leHQpCi0JaWYgKCpsaW5rcCA9PSBsaW5rKSBicmVhazsKLSAgICBpZiAoKmxpbmtwID09IE5VTEwpCi0JcmV0dXJuOwogCi0gICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQlhaGExNTJ4X3JlbGVhc2VfY3MobGluayk7CisgICAgYWhhMTUyeF9yZWxlYXNlX2NzKGxpbmspOwogCiAgICAgLyogVW5saW5rIGRldmljZSBzdHJ1Y3R1cmUsIGZyZWUgYml0cyAqLwotICAgICpsaW5rcCA9IGxpbmstPm5leHQ7CiAgICAga2ZyZWUobGluay0+cHJpdik7Ci0gICAgCiB9IC8qIGFoYTE1MnhfZGV0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTYxLDkgKzE0Miw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGFoYTE1MnhfY29uZmlnX2NzKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgaW50IGFoYTE1MnhfY29uZmlnX2NzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAgICAgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBhaGExNTJ4X3NldHVwIHM7CiAgICAgdHVwbGVfdCB0dXBsZTsKQEAgLTE3OCwxOSArMTU4LDE2IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVfZGF0YTsKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAgICAgd2hpbGUgKDEpIHsKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCXBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKIAkgICAgZ290byBuZXh0X2VudHJ5OwogCS8qIEZvciBOZXcgTWVkaWEgVCZKLCBsb29rIGZvciBhIFNDU0kgd2luZG93ICovCiAJaWYgKHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbiA+PSAweDIwKQpAQCAtMjAxLDE1ICsxNzgsMTUgQEAKIAlpZiAoKHBhcnNlLmNmdGFibGVfZW50cnkuaW8ubndpbiA+IDApICYmCiAJICAgIChsaW5rLT5pby5CYXNlUG9ydDEgPCAweGZmZmYpKSB7CiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwotCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8oaGFuZGxlLCAmbGluay0+aW8pOworCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAJfQogICAgIG5leHRfZW50cnk6Ci0JQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB9CiAgICAgCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAgICAgCiAgICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGFoYTE1MnggZHJpdmVyICovCiAgICAgbWVtc2V0KCZzLCAwLCBzaXplb2YocykpOwpAQCAtMjMxLDUzICsyMDgsMzAgQEAKICAgICB9CiAKICAgICBzcHJpbnRmKGluZm8tPm5vZGUuZGV2X25hbWUsICJzY3NpJWQiLCBob3N0LT5ob3N0X25vKTsKLSAgICBsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKKyAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogICAgIGluZm8tPmhvc3QgPSBob3N0OwogCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICByZXR1cm47Ci0gICAgCisgICAgcmV0dXJuIDA7CisKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAgICAgYWhhMTUyeF9yZWxlYXNlX2NzKGxpbmspOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgYWhhMTUyeF9yZWxlYXNlX2NzKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBhaGExNTJ4X3JlbGVhc2VfY3Moc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCiAJYWhhMTUyeF9yZWxlYXNlKGluZm8tPmhvc3QpOwotCWxpbmstPmRldiA9IE5VTEw7Ci0gICAgCi0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKLSAgICAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKLXN0YXRpYyBpbnQgYWhhMTUyeF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFoYTE1MnhfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFoYTE1MnhfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWFoYTE1MnhfaG9zdF9yZXNldF9ob3N0KGluZm8tPmhvc3QpOwotCX0KKwlhaGExNTJ4X2hvc3RfcmVzZXRfaG9zdChpbmZvLT5ob3N0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjk3LDEwICsyNTEsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJhaGExNTJ4X2NzIiwKIAl9LAotCS5wcm9iZQkJPSBhaGExNTJ4X2F0dGFjaCwKKwkucHJvYmUJCT0gYWhhMTUyeF9wcm9iZSwKIAkucmVtb3ZlCQk9IGFoYTE1MnhfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IGFoYTE1MnhfaWRzLAotCS5zdXNwZW5kCT0gYWhhMTUyeF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYWhhMTUyeF9yZXN1bWUsCiB9OwogCkBAIC0zMTcsNCArMjcwLDMgQEAKIAogbW9kdWxlX2luaXQoaW5pdF9haGExNTJ4X2NzKTsKIG1vZHVsZV9leGl0KGV4aXRfYWhhMTUyeF9jcyk7Ci0gCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYwppbmRleCA3ODhjNThkLi44NWY3ZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKQEAgLTczLDU3ICs3Myw0OCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHR5cGVkZWYgc3RydWN0IHNjc2lfaW5mb190IHsKLSAgICBkZXZfbGlua190CQlsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90CQlub2RlOwogICAgIHN0cnVjdCBTY3NpX0hvc3QJKmhvc3Q7CiB9IHNjc2lfaW5mb190OwogCiAKLXN0YXRpYyB2b2lkIGZkb21haW5fcmVsZWFzZShkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyB2b2lkIGZkb21haW5fcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBmZG9tYWluX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotc3RhdGljIHZvaWQgZmRvbWFpbl9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IGZkb21haW5fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAotc3RhdGljIGludCBmZG9tYWluX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGZkb21haW5fcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc2NzaV9pbmZvX3QgKmluZm87Ci0gICAgZGV2X2xpbmtfdCAqbGluazsKKwlzY3NpX2luZm9fdCAqaW5mbzsKIAotICAgIERFQlVHKDAsICJmZG9tYWluX2F0dGFjaCgpXG4iKTsKKwlERUJVRygwLCAiZmRvbWFpbl9hdHRhY2goKVxuIik7CiAKLSAgICAvKiBDcmVhdGUgbmV3IFNDU0kgZGV2aWNlICovCi0gICAgaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFpbmZvKSByZXR1cm4gLUVOT01FTTsKLSAgICBtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0gICAgbGluayA9ICZpbmZvLT5saW5rOyBsaW5rLT5wcml2ID0gaW5mbzsKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAweDEwOwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxMDsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7Ci0gICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuVmNjID0gNTA7Ci0gICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87Ci0gICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CisJLyogQ3JlYXRlIG5ldyBTQ1NJIGRldmljZSAqLworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CiAKLSAgICBsaW5rLT5oYW5kbGUgPSBwX2RldjsKLSAgICBwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOworCWluZm8tPnBfZGV2ID0gbGluazsKKwlsaW5rLT5wcml2ID0gaW5mbzsKKwlsaW5rLT5pby5OdW1Qb3J0czEgPSAweDEwOworCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJbGluay0+aW8uSU9BZGRyTGluZXMgPSAxMDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0gICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0gICAgZmRvbWFpbl9jb25maWcobGluayk7Ci0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gZmRvbWFpbl9jb25maWcobGluayk7CiB9IC8qIGZkb21haW5fYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBmZG9tYWluX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBmZG9tYWluX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURFQlVHKDAsICJmZG9tYWluX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlmZG9tYWluX3JlbGVhc2UobGluayk7CisJZmRvbWFpbl9yZWxlYXNlKGxpbmspOwogCiAJa2ZyZWUobGluay0+cHJpdik7CiB9IC8qIGZkb21haW5fZGV0YWNoICovCkBAIC0xMzMsOSArMTI0LDggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgZmRvbWFpbl9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgZmRvbWFpbl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKICAgICBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwpAQCAtMTUwLDEwMyArMTQwLDc1IEBACiAgICAgdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVfZGF0YTsKICAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogICAgIGxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCi0gICAgLyogQ29uZmlndXJlIGNhcmQgKi8KLSAgICBsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotICAgIAogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKyAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIHdoaWxlICgxKSB7Ci0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAorCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCiAJICAgIGdvdG8gbmV4dF9lbnRyeTsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleDsKIAlsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbyk7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CiAgICAgbmV4dF9lbnRyeToKLQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogICAgIH0KIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsICZsaW5rLT5pcnEpKTsKLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsICZsaW5rLT5jb25mKSk7Ci0gICAgCisgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCiAgICAgLyogQSBiYWQgaGFjay4uLiAqLwogICAgIHJlbGVhc2VfcmVnaW9uKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uTnVtUG9ydHMxKTsKIAogICAgIC8qIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBmZG9tYWluIGRyaXZlciAqLwogICAgIHNwcmludGYoc3RyLCAiJWQsJWQiLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAgICAgZmRvbWFpbl9zZXR1cChzdHIpOwotICAgIAorCiAgICAgaG9zdCA9IF9fZmRvbWFpbl8xNngwX2RldGVjdCgmZmRvbWFpbl9kcml2ZXJfdGVtcGxhdGUpOwogICAgIGlmICghaG9zdCkgewogICAgICAgICBwcmludGsoS0VSTl9JTkZPICJmZG9tYWluX2NzOiBubyBTQ1NJIGRldmljZXMgZm91bmRcbiIpOwogCWdvdG8gY3NfZmFpbGVkOwogICAgIH0KLSAKLSAgICBzY3NpX2FkZF9ob3N0KGhvc3QsIE5VTEwpOyAvKiBYWFggaGFuZGxlIGZhaWx1cmUgKi8KKworICAgIGlmIChzY3NpX2FkZF9ob3N0KGhvc3QsIE5VTEwpKQorCSAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICBzY3NpX3NjYW5faG9zdChob3N0KTsKIAogICAgIHNwcmludGYoaW5mby0+bm9kZS5kZXZfbmFtZSwgInNjc2klZCIsIGhvc3QtPmhvc3Rfbm8pOwotICAgIGxpbmstPmRldiA9ICZpbmZvLT5ub2RlOworICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAgICAgaW5mby0+aG9zdCA9IGhvc3Q7Ci0gICAgCi0gICAgbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLSAgICByZXR1cm47Ci0gICAgCisKKyAgICByZXR1cm4gMDsKKwogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKICAgICBmZG9tYWluX3JlbGVhc2UobGluayk7Ci0gICAgcmV0dXJuOwotICAgIAorICAgIHJldHVybiAtRU5PREVWOwogfSAvKiBmZG9tYWluX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgZmRvbWFpbl9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBmZG9tYWluX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OworCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJmZG9tYWluX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCURFQlVHKDAsICJmZG9tYWluX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgc2NzaV9yZW1vdmVfaG9zdChpbmZvLT5ob3N0KTsKLSAgICBsaW5rLT5kZXYgPSBOVUxMOwotICAgIAotICAgIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLSAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0gICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLSAgICBzY3NpX3VucmVnaXN0ZXIoaW5mby0+aG9zdCk7Ci0KLSAgICBsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlzY3NpX3JlbW92ZV9ob3N0KGluZm8tPmhvc3QpOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwlzY3NpX3VucmVnaXN0ZXIoaW5mby0+aG9zdCk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGZkb21haW5fc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmZG9tYWluX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmZG9tYWluX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWZkb21haW5fMTZ4MF9idXNfcmVzZXQoTlVMTCk7Ci0JfQorCWZkb21haW5fMTZ4MF9idXNfcmVzZXQoTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NCwxMCArMjI2LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAiZmRvbWFpbl9jcyIsCiAJfSwKLQkucHJvYmUJCT0gZmRvbWFpbl9hdHRhY2gsCisJLnByb2JlCQk9IGZkb21haW5fcHJvYmUsCiAJLnJlbW92ZQkJPSBmZG9tYWluX2RldGFjaCwKIAkuaWRfdGFibGUgICAgICAgPSBmZG9tYWluX2lkcywKLQkuc3VzcGVuZAk9IGZkb21haW5fc3VzcGVuZCwKIAkucmVzdW1lCQk9IGZkb21haW5fcmVzdW1lLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggOWUzYWIzZi4uMjMxZjljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC0xNTkzLDExICsxNTkzLDExIEBACiAgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKICAgICBjYXJkIGluc2VydGlvbiBldmVudC4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCBuc3BfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgbnNwX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXNjc2lfaW5mb190ICAqaW5mbzsKLQlkZXZfbGlua190ICAgKmxpbms7CiAJbnNwX2h3X2RhdGEgICpkYXRhID0gJm5zcF9kYXRhX2Jhc2U7CisJaW50IHJldDsKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJpbiIpOwogCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpIHsgcmV0dXJuIC1FTk9NRU07IH0KIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0JbGluayA9ICZpbmZvLT5saW5rOworCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAlkYXRhLT5TY3NpSW5mbyA9IGluZm87CiAKQEAgLTE2MjcsMTggKzE2MjcsMTMgQEAKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMJID0gQ09ORl9FTkFCTEVfSVJROwotCWxpbmstPmNvbmYuVmNjCQkgPSA1MDsKIAlsaW5rLT5jb25mLkludFR5cGUJID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5QcmVzZW50CSA9IFBSRVNFTlRfT1BUSU9OOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCW5zcF9jc19jb25maWcobGluayk7CisJcmV0ID0gbnNwX2NzX2NvbmZpZyhsaW5rKTsKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJsaW5rPTB4JXAiLCBsaW5rKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfSAvKiBuc3BfY3NfYXR0YWNoICovCiAKIApAQCAtMTY0OCwxNiArMTY0MywxMiBAQAogICAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCiAgICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCBuc3BfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIG5zcF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiaW4sIGxpbms9MHglcCIsIGxpbmspOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkoKHNjc2lfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOwotCQluc3BfY3NfcmVsZWFzZShsaW5rKTsKLQl9CisJKChzY3NpX2luZm9fdCAqKWxpbmstPnByaXYpLT5zdG9wID0gMTsKKwluc3BfY3NfcmVsZWFzZShsaW5rKTsKIAogCWtmcmVlKGxpbmstPnByaXYpOwogCWxpbmstPnByaXYgPSBOVUxMOwpAQCAtMTY3Miw5ICsxNjYzLDkgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgbnNwX2NzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBuc3BfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdAkgIGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKKwlpbnQJCSAgcmV0OwogCXNjc2lfaW5mb190CSAqaW5mbwkgPSBsaW5rLT5wcml2OwogCXR1cGxlX3QJCSAgdHVwbGU7CiAJY2lzcGFyc2VfdAkgIHBhcnNlOwpAQCAtMTY5OCwyNiArMTY4OSwyMiBAQAogCXR1cGxlLlR1cGxlRGF0YQkgICAgICA9IHR1cGxlX2RhdGE7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ICAgID0gc2l6ZW9mKHR1cGxlX2RhdGEpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ICAgICA9IDA7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwJcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwJcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCWxpbmstPmNvbmYuUHJlc2VudCAgICA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKIAotCS8qIENvbmZpZ3VyZSBjYXJkICovCi0JbGluay0+c3RhdGUJICAgICAgfD0gREVWX0NPTkZJRzsKLQogCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0JQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKLQlsaW5rLT5jb25mLlZjYyA9IGNvbmYuVmNjOworCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwogCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJd2hpbGUgKDEpIHsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKIAotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCiAJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgeyBkZmx0ID0gKmNmZzsgfQpAQCAtMTc0MywxMCArMTczMCwxMCBAQAogCQl9CiAKIAkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAkJfSBlbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCWxpbmstPmNvbmYuVnBwID0KIAkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCX0KIApAQCAtMTc3Myw3ICsxNzYwLDcgQEAKIAkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKIAkJCX0KIAkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pICE9IDApCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJfQogCkBAIC0xNzg4LDcgKzE3NzUsNyBAQAogCQkJCXJlcS5TaXplID0gMHgxMDAwOwogCQkJfQogCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmstPmhhbmRsZSwgJnJlcSwgJmxpbmstPndpbikgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQkJbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKIAkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkgIT0gMCkKQEAgLTE4MDIsMTcgKzE3ODksMTQgQEAKIAogCW5leHRfZW50cnk6CiAJCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJuZXh0Iik7Ci0KLQkJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkgewotCQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCQl9Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJfQogCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewotCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAJfQotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJaWYgKGZyZWVfcG9ydHMpIHsKIAkJaWYgKGxpbmstPmlvLkJhc2VQb3J0MSkgewpAQCAtMTg1NCwxNiArMTgzOCwxOSBAQAogCiAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSw3NCkpCi0Jc2NzaV9hZGRfaG9zdCAoaG9zdCwgTlVMTCk7CisJcmV0ID0gc2NzaV9hZGRfaG9zdCAoaG9zdCwgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBjc19mYWlsZWQ7CisKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXNucHJpbnRmKGluZm8tPm5vZGUuZGV2X25hbWUsIHNpemVvZihpbmZvLT5ub2RlLmRldl9uYW1lKSwgInNjc2klZCIsIGhvc3QtPmhvc3Rfbm8pOwotCWxpbmstPmRldiAgPSAmaW5mby0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSAgPSAmaW5mby0+bm9kZTsKIAlpbmZvLT5ob3N0ID0gaG9zdDsKIAogI2Vsc2UKIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiR0VUX1NDU0lfSU5GTyIpOwotCXRhaWwgPSAmbGluay0+ZGV2OworCXRhaWwgPSAmbGluay0+ZGV2X25vZGU7CiAJaW5mby0+bmRldiA9IDA7CiAKIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiaG9zdD0weCVwIiwgaG9zdCk7CkBAIC0xOTA4LDExICsxODk1LDEwIEBACiAjZW5kaWYKIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9JTkZPICJuc3BfY3M6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCwKLQkgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKSB7Ci0JCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcDEvMTAsIGxpbmstPmNvbmYuVnBwMSUxMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAibnNwX2NzOiBpbmRleCAweCUwMng6ICIsCisJICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLlZwcCkgeworCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAvMTAsIGxpbmstPmNvbmYuVnBwJTEwKTsKIAl9CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKQEAgLTE5MjksMTUgKzE5MTUsMTQgQEAKIAkJICAgICAgIHJlcS5CYXNlK3JlcS5TaXplLTEpOwogCXByaW50aygiXG4iKTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JcmV0dXJuOworCXJldHVybiAwOwogCiAgY3NfZmFpbGVkOgogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJjb25maWcgZmFpbCIpOwotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAluc3BfY3NfcmVsZWFzZShsaW5rKTsKIAotCXJldHVybjsKKwlyZXR1cm4gLUVOT0RFVjsKIH0gLyogbnNwX2NzX2NvbmZpZyAqLwogI3VuZGVmIENTX0NIRUNLCiAKQEAgLTE5NDcsNyArMTkzMiw3IEBACiAgICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgICAgc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIG5zcF9jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBuc3BfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJbnNwX2h3X2RhdGEgKmRhdGEgPSBOVUxMOwpAQCAtMTk2OCwyMiArMTk1MywxNSBAQAogI2Vsc2UKIAlzY3NpX3VucmVnaXN0ZXJfaG9zdCgmbnNwX2RyaXZlcl90ZW1wbGF0ZSk7CiAjZW5kaWYKLQlsaW5rLT5kZXYgPSBOVUxMOworCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAogCWlmIChsaW5rLT53aW4pIHsKIAkJaWYgKGRhdGEgIT0gTlVMTCkgewogCQkJaW91bm1hcCgodm9pZCAqKShkYXRhLT5NbWlvQWRkcmVzcykpOwogCQl9Ci0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwogCX0KLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkgewotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JfQotCWlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEpIHsKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JfQotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDIpKQogCWlmIChpbmZvLT5ob3N0ICE9IE5VTEwpIHsKIAkJc2NzaV9ob3N0X3B1dChpbmZvLT5ob3N0KTsKQEAgLTE5OTEsMTQgKzE5NjksMTEgQEAKICNlbmRpZgogfSAvKiBuc3BfY3NfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50IG5zcF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG5zcF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAJbnNwX2h3X2RhdGEgKmRhdGE7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJldmVudDogc3VzcGVuZCIpOwogCiAJaWYgKGluZm8tPmhvc3QgIT0gTlVMTCkgewpAQCAtMjAxMSwyNSArMTk4NiwxNiBAQAogCiAJaW5mby0+c3RvcCA9IDE7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuc3BfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG5zcF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAluc3BfaHdfZGF0YSAqZGF0YTsKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJldmVudDogcmVzdW1lIik7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0KLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCiAJaW5mby0+c3RvcCA9IDA7CiAKIAlpZiAoaW5mby0+aG9zdCAhPSBOVUxMKSB7CkBAIC0yMDY1LDcgKzIwMzEsNyBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJuc3BfY3MiLAogCX0sCi0JLnByb2JlCQk9IG5zcF9jc19hdHRhY2gsCisJLnByb2JlCQk9IG5zcF9jc19wcm9iZSwKIAkucmVtb3ZlCQk9IG5zcF9jc19kZXRhY2gsCiAJLmlkX3RhYmxlCT0gbnNwX2NzX2lkcywKIAkuc3VzcGVuZAk9IG5zcF9jc19zdXNwZW5kLApAQCAtMjA5OCwxOSArMjA2NCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbnNwX2NzX2V4aXQodm9pZCkKIHsKIAluc3BfbXNnKEtFUk5fSU5GTywgInVubG9hZGluZy4uLiIpOwotCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsNjgpKQogCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmbnNwX2RyaXZlcik7Ci0jZWxzZQotCXVucmVnaXN0ZXJfcGNtY2lhX2RyaXZlcigmZGV2X2luZm8pOwotCS8qIFhYWDogdGhpcyByZWFsbHkgbmVlZHMgdG8gbW92ZSBpbnRvIGdlbmVyaWMgY29kZS4uICovCi0Jd2hpbGUgKGRldl9saXN0ICE9IE5VTEwpIHsKLQkJaWYgKGRldl9saXN0LT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJCW5zcF9jc19yZWxlYXNlKGRldl9saXN0KTsKLQkJfQotCQluc3BfY3NfZGV0YWNoKGRldl9saXN0KTsKLQl9Ci0jZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaAppbmRleCBiNjZiMTQwLi44OTA4YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmgKQEAgLTIyNSw3ICsyMjUsNyBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHR5cGVkZWYgc3RydWN0IHNjc2lfaW5mb190IHsKLQlkZXZfbGlua190ICAgICAgICAgICAgIGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCXN0cnVjdCBTY3NpX0hvc3QgICAgICAqaG9zdDsKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSw3NCkpCiAJZGV2X25vZGVfdCAgICAgICAgICAgICBub2RlOwpAQCAtMjk3LDggKzI5Nyw4IEBACiAKIC8qIENhcmQgc2VydmljZSBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkICAgICAgICBuc3BfY3NfZGV0YWNoIChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotc3RhdGljIHZvaWQgICAgICAgIG5zcF9jc19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOwotc3RhdGljIHZvaWQgICAgICAgIG5zcF9jc19jb25maWcgKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgICAgICAgIG5zcF9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgICAgICAgIG5zcF9jc19jb25maWcgKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIAogLyogTGludXggU0NTSSBzdWJzeXN0ZW0gc3BlY2lmaWMgZnVuY3Rpb25zICovCiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqbnNwX2RldGVjdCAgICAgKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CkBAIC00NTAsNyArNDUwLDcgQEAKIAlyZXR1cm4gaG9zdDsKIH0KIAotc3RhdGljIHZvaWQgY3NfZXJyb3IoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgaW50IGZ1bmMsIGludCByZXQpCitzdGF0aWMgdm9pZCBjc19lcnJvcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCkKIHsKIAllcnJvcl9pbmZvX3QgZXJyID0geyBmdW5jLCByZXQgfTsKIAlwY21jaWFfcmVwb3J0X2Vycm9yKGhhbmRsZSwgJmVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKaW5kZXggZGNlN2U2OC4uODZjMmFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYwpAQCAtOTEsMTggKzkxLDE4IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogdHlwZWRlZiBzdHJ1Y3Qgc2NzaV9pbmZvX3QgewotCWRldl9saW5rX3QgbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJZGV2X25vZGVfdCBub2RlOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgc2hvcnQgbWFuZl9pZDsKIH0gc2NzaV9pbmZvX3Q7CiAKLXN0YXRpYyB2b2lkIHFsb2dpY19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQgcWxvZ2ljX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgcWxvZ2ljX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotc3RhdGljIHZvaWQgcWxvZ2ljX2NvbmZpZyhkZXZfbGlua190ICogbGluayk7CitzdGF0aWMgaW50IHFsb2dpY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKTsKIAogc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKnFsb2dpY19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdCwKLQkJCQlkZXZfbGlua190ICpsaW5rLCBpbnQgcWJhc2UsIGludCBxbGlycSkKKwkJCQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHFiYXNlLCBpbnQgcWxpcnEpCiB7CiAJaW50IHFsdHlwOwkJLyogdHlwZSBvZiBjaGlwICovCiAJaW50IHFpbml0aWQ7CkBAIC0xNTYsMTAgKzE1Niw5IEBACiBlcnI6CiAJcmV0dXJuIE5VTEw7CiB9Ci1zdGF0aWMgaW50IHFsb2dpY19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBxbG9naWNfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc2NzaV9pbmZvX3QgKmluZm87Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCURFQlVHKDAsICJxbG9naWNfYXR0YWNoKClcbiIpOwogCkBAIC0xNjgsNyArMTY3LDcgQEAKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CkBAIC0xNzYsMzAgKzE3NSwxOSBAQAogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotCWxpbmstPmhhbmRsZSA9IHBfZGV2OwotCXBfZGV2LT5pbnN0YW5jZSA9IGxpbms7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKLQlxbG9naWNfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHFsb2dpY19jb25maWcobGluayk7CiB9CQkJCS8qIHFsb2dpY19hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHFsb2dpY19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgcWxvZ2ljX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURFQlVHKDAsICJxbG9naWNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXFsb2dpY19yZWxlYXNlKGxpbmspOwotCisJcWxvZ2ljX3JlbGVhc2UobGluayk7CiAJa2ZyZWUobGluay0+cHJpdik7CiAKIH0JCQkJLyogcWxvZ2ljX2RldGFjaCAqLwpAQCAtMjA5LDkgKzE5Nyw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHFsb2dpY19jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspCitzdGF0aWMgaW50IHFsb2dpY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXR1cGxlX3QgdHVwbGU7CiAJY2lzcGFyc2VfdCBwYXJzZTsKQEAgLTIyNSwzOCArMjEyLDM1IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLQlpZiAoKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKQorCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSkKIAkJaW5mby0+bWFuZl9pZCA9IGxlMTZfdG9fY3B1KHR1cGxlLlR1cGxlRGF0YVswXSk7CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleDsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZTsKIAkJbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOwogCQlpZiAobGluay0+aW8uQmFzZVBvcnQxICE9IDApIHsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbyk7CisJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJYnJlYWs7CiAJCX0KIAkgICAgICBuZXh0X2VudHJ5OgotCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl9CiAKLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEoaGFuZGxlLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCWlmICgoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfTUFDTklDQSkgfHwgKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX1BJT05FRVIpIHx8IChpbmZvLT5tYW5mX2lkID09IDB4MDA5OCkpIHsKIAkJLyogc2V0IEFUQWNtZCAqLwpAQCAtMjc1LDgyICsyNTksNTQgQEAKIAkKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIFNDU0kgZGV2aWNlcyBmb3VuZFxuIiwgcWxvZ2ljX25hbWUpOwotCQlnb3RvIG91dDsKKwkJZ290byBjc19mYWlsZWQ7CiAJfQogCiAJc3ByaW50ZihpbmZvLT5ub2RlLmRldl9uYW1lLCAic2NzaSVkIiwgaG9zdC0+aG9zdF9ubyk7Ci0JbGluay0+ZGV2ID0gJmluZm8tPm5vZGU7CisJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAlpbmZvLT5ob3N0ID0gaG9zdDsKIAotb3V0OgotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JcmV0dXJuOworCXJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluay0+aGFuZGxlLCBsYXN0X2ZuLCBsYXN0X3JldCk7Ci0JbGluay0+ZGV2ID0gTlVMTDsKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotCXJldHVybjsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogCiB9CQkJCS8qIHFsb2dpY19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHFsb2dpY19yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCBxbG9naWNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKIAlERUJVRygwLCAicWxvZ2ljX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCiAJc2NzaV9yZW1vdmVfaG9zdChpbmZvLT5ob3N0KTsKLQlsaW5rLT5kZXYgPSBOVUxMOwogCiAJZnJlZV9pcnEobGluay0+aXJxLkFzc2lnbmVkSVJRLCBpbmZvLT5ob3N0KTsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCiAJc2NzaV9ob3N0X3B1dChpbmZvLT5ob3N0KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBxbG9naWNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBxbG9naWNfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKKwlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxbG9naWNfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0JCWlmICgoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfTUFDTklDQSkgfHwKLQkJICAgIChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9QSU9ORUVSKSB8fAotCQkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewotCQkJb3V0YigweDgwLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwotCQkJb3V0YigweDI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDkpOwotCQkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwotCQl9Ci0JCS8qIFVnZ2dnbGxseXl5eSEhISAqLwotCQlxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KE5VTEwpOworCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmICgoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfTUFDTklDQSkgfHwKKwkgICAgKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX1BJT05FRVIpIHx8CisJICAgIChpbmZvLT5tYW5mX2lkID09IDB4MDA5OCkpIHsKKwkJb3V0YigweDgwLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOworCQlvdXRiKDB4MjQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4OSk7CisJCW91dGIoMHgwNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKIAl9CisJLyogVWdnZ2dsbGx5eXl5ISEhICovCisJcWxvZ2ljZmFzNDA4X2J1c19yZXNldChOVUxMKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzgyLDEwICszMzgsOSBAQAogCS5kcnYJCT0gewogCS5uYW1lCQk9ICJxbG9naWNfY3MiLAogCX0sCi0JLnByb2JlCQk9IHFsb2dpY19hdHRhY2gsCisJLnByb2JlCQk9IHFsb2dpY19wcm9iZSwKIAkucmVtb3ZlCQk9IHFsb2dpY19kZXRhY2gsCiAJLmlkX3RhYmxlICAgICAgID0gcWxvZ2ljX2lkcywKLQkuc3VzcGVuZAk9IHFsb2dpY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcWxvZ2ljX3Jlc3VtZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCmluZGV4IDNhNGRkNmYuLjlmNTk4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogc3RydWN0IHNjc2lfaW5mb190IHsKLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXVuc2lnbmVkIHNob3J0IG1hbmZfaWQ7CkBAIC01MjcsNyArNTI3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLVNZTTUzQzUwMF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitTWU01M0M1MDBfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaW5mby0+aG9zdDsKQEAgLTU1MCwxMyArNTUwLDcgQEAKIAlpZiAoc2hvc3QtPmlvX3BvcnQgJiYgc2hvc3QtPm5faW9fcG9ydCkKIAkJcmVsZWFzZV9yZWdpb24oc2hvc3QtPmlvX3BvcnQsIHNob3N0LT5uX2lvX3BvcnQpOwogCi0JbGluay0+ZGV2ID0gTlVMTDsKLQotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAKIAlzY3NpX2hvc3RfcHV0KHNob3N0KTsKIH0gLyogU1lNNTNDNTAwX3JlbGVhc2UgKi8KQEAgLTcxMywxMCArNzA3LDkgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQKLVNZTTUzQzUwMF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQKK1NZTTUzQzUwMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXR1cGxlX3QgdHVwbGU7CiAJY2lzcGFyc2VfdCBwYXJzZTsKQEAgLTczMyw0MCArNzI2LDM3IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwogCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLQlpZiAoKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmCi0JICAgIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpKQorCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpICYmCisJICAgIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSkKIAkJaW5mby0+bWFuZl9pZCA9IGxlMTZfdG9fY3B1KHR1cGxlLlR1cGxlRGF0YVswXSk7CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCSAgICBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKKwkJICAgIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7CiAJCWxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7CiAJCWxpbmstPmlvLk51bVBvcnRzMSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbjsKIAogCQlpZiAobGluay0+aW8uQmFzZVBvcnQxICE9IDApIHsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbyk7CisJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJYnJlYWs7CiAJCX0KIG5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCX0KIAotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsICZsaW5rLT5jb25mKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJLyoKIAkqICBUaGF0J3MgdGhlIHRyb3VibGUgd2l0aCBjb3B5aW5nIGxpYmVyYWxseSBmcm9tIGFub3RoZXIgZHJpdmVyLgpAQCAtODM1LDcgKzgyNSw3IEBACiAJZGF0YS0+ZmFzdF9waW8gPSBVU0VfRkFTVF9QSU87CiAKIAlzcHJpbnRmKGluZm8tPm5vZGUuZGV2X25hbWUsICJzY3NpJWQiLCBob3N0LT5ob3N0X25vKTsKLQlsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCWluZm8tPmhvc3QgPSBob3N0OwogCiAJaWYgKHNjc2lfYWRkX2hvc3QoaG9zdCwgTlVMTCkpCkBAIC04NDMsNyArODMzLDcgQEAKIAogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCi0JZ290byBvdXQ7CS8qIFNVQ0NFU1MgKi8KKwlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfaXJxOgogCWZyZWVfaXJxKGlycV9sZXZlbCwgaG9zdCk7CkBAIC04NTIsNzQgKzg0Miw1MCBAQAogZXJyX3JlbGVhc2U6CiAJcmVsZWFzZV9yZWdpb24ocG9ydF9iYXNlLCAweDEwKTsKIAlwcmludGsoS0VSTl9JTkZPICJzeW01M2M1MDBfY3M6IG5vIFNDU0kgZGV2aWNlcyBmb3VuZFxuIik7Ci0KLW91dDoKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCXJldHVybjsKKwlyZXR1cm4gLUVOT0RFVjsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAlTWU01M0M1MDBfcmVsZWFzZShsaW5rKTsKLQlyZXR1cm47CisJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIFNZTTUzQzUwMF9jb25maWcgKi8KIAotc3RhdGljIGludCBzeW01M2M1MDBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzeW01M2M1MDBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN5bTUzYzUwMF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJc3RydWN0IHNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7Ci0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7Ci0KLQkJLyogU2VlIGVhcmxpZXIgY29tbWVudCBhYm91dCBtYW51ZmFjdHVyZXIgSURzLiAqLwotCQlpZiAoKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX01BQ05JQ0EpIHx8Ci0JCSAgICAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwKLQkJICAgIChpbmZvLT5tYW5mX2lkID09IDB4MDA5OCkpIHsKLQkJCW91dGIoMHg4MCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKLQkJCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKLQkJCW91dGIoMHgwNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKLQkJfQotCQkvKgotCQkgKiAgSWYgdGhpbmdzIGRvbid0IHdvcmsgYWZ0ZXIgYSAicmVzdW1lIiwKLQkJICogIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCi0JCSAqLwotCQlTWU01M0M1MDBfaW50X2hvc3RfcmVzZXQobGluay0+aW8uQmFzZVBvcnQxKTsKKwkvKiBTZWUgZWFybGllciBjb21tZW50IGFib3V0IG1hbnVmYWN0dXJlciBJRHMuICovCisJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fAorCSAgICAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwKKwkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgeworCQlvdXRiKDB4ODAsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7CisJCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKKwkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwogCX0KKwkvKgorCSAqICBJZiB0aGluZ3MgZG9uJ3Qgd29yayBhZnRlciBhICJyZXN1bWUiLAorCSAqICB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBsb29raW5nLgorCSAqLworCVNZTTUzQzUwMF9pbnRfaG9zdF9yZXNldChsaW5rLT5pby5CYXNlUG9ydDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCi1TWU01M0M1MDBfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK1NZTTUzQzUwMF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7Ci0KIAlERUJVRygwLCAiU1lNNTNDNTAwX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlTWU01M0M1MDBfcmVsZWFzZShsaW5rKTsKKwlTWU01M0M1MDBfcmVsZWFzZShsaW5rKTsKIAogCWtmcmVlKGxpbmstPnByaXYpOwogCWxpbmstPnByaXYgPSBOVUxMOwogfSAvKiBTWU01M0M1MDBfZGV0YWNoICovCiAKIHN0YXRpYyBpbnQKLVNZTTUzQzUwMF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorU1lNNTNDNTAwX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzY3NpX2luZm9fdCAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJREVCVUcoMCwgIlNZTTUzQzUwMF9hdHRhY2goKVxuIik7CiAKQEAgLTkyOCw3ICs4OTQsNyBAQAogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwotCWxpbmsgPSAmaW5mby0+bGluazsKKwlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87CiAJbGluay0+aW8uTnVtUG9ydHMxID0gMTY7CiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKQEAgLTkzNiwxNyArOTAyLDEwIEBACiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCVNZTTUzQzUwMF9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gU1lNNTNDNTAwX2NvbmZpZyhsaW5rKTsKIH0gLyogU1lNNTNDNTAwX2F0dGFjaCAqLwogCiBNT0RVTEVfQVVUSE9SKCJCb2IgVHJhY3kgPHJjdEBmcnVzLmNvbT4iKTsKQEAgLTk2NiwxMCArOTI1LDkgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAic3ltNTNjNTAwX2NzIiwKIAl9LAotCS5wcm9iZQkJPSBTWU01M0M1MDBfYXR0YWNoLAorCS5wcm9iZQkJPSBTWU01M0M1MDBfcHJvYmUsCiAJLnJlbW92ZQkJPSBTWU01M0M1MDBfZGV0YWNoLAogCS5pZF90YWJsZSAgICAgICA9IHN5bTUzYzUwMF9pZHMsCi0JLnN1c3BlbmQJPSBzeW01M2M1MDBfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHN5bTUzYzUwMF9yZXN1bWUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCmluZGV4IDNjODVjNGIuLjVjZGExNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCkBAIC0xNDMsNyArMTQzLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BwYS5jIGIvZHJpdmVycy9zY3NpL3BwYS5jCmluZGV4IGZlZTg0M2YuLjEwODkxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wcGEuYworKysgYi9kcml2ZXJzL3Njc2kvcHBhLmMKQEAgLTk4Miw2ICs5ODIsMTIgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIGludCBwcGFfYWRqdXN0X3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQoreworCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBCTEtfQk9VTkNFX0hJR0gpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwcGFfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLnByb2NfbmFtZQkJPSAicHBhIiwKQEAgLTk5Nyw2ICsxMDAzLDcgQEAKIAkuY21kX3Blcl9sdW4JCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLmNhbl9xdWV1ZQkJPSAxLAorCS5zbGF2ZV9hbGxvYwkJPSBwcGFfYWRqdXN0X3F1ZXVlLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCAwMTc3MjljLi41ODRmZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtNTk5LDYgKzU5OSw3IEBACiAqICAgIEVpdGhlciBTVUNDRVNTIG9yIEZBSUxFRC4KICoKICogTm90ZToKKyogICAgT25seSByZXR1cm4gRkFJTEVEIGlmIGNvbW1hbmQgbm90IHJldHVybmVkIGJ5IGZpcm13YXJlLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQKIHFsYTJ4eHhfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQpAQCAtNjA5LDExICs2MTAsMTIgQEAKIAl1bnNpZ25lZCBpbnQgaWQsIGx1bjsKIAl1bnNpZ25lZCBsb25nIHNlcmlhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB3YWl0ID0gMDsKIAogCWlmICghQ01EX1NQKGNtZCkpCi0JCXJldHVybiBGQUlMRUQ7CisJCXJldHVybiBTVUNDRVNTOwogCi0JcmV0ID0gRkFJTEVEOworCXJldCA9IFNVQ0NFU1M7CiAKIAlpZCA9IGNtZC0+ZGV2aWNlLT5pZDsKIAlsdW4gPSBjbWQtPmRldmljZS0+bHVuOwpAQCAtNjQyLDcgKzY0NCw3IEBACiAJCX0gZWxzZSB7CiAJCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBhYm9ydF9jb21tYW5kICIKIAkJCSAgICAibWJ4IHN1Y2Nlc3MuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKLQkJCXJldCA9IFNVQ0NFU1M7CisJCQl3YWl0ID0gMTsKIAkJfQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIApAQCAtNjUxLDE3ICs2NTMsMTggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gYmUgcmV0dXJuZWQuICovCi0JaWYgKHJldCA9PSBTVUNDRVNTKSB7CisJaWYgKHdhaXQpIHsKIAkJaWYgKHFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKGhhLCBjbWQpICE9IFFMQV9TVUNDRVNTKSB7CiAJCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKIAkJCSAgICAic2NzaSglbGQ6JWQ6JWQpOiBBYm9ydCBoYW5kbGVyIHRpbWVkIG91dCAtLSAlbHggIgogCQkJICAgICIleC5cbiIsIGhhLT5ob3N0X25vLCBpZCwgbHVuLCBzZXJpYWwsIHJldCk7CisJCQlyZXQgPSBGQUlMRUQ7CiAJCX0KIAl9CiAKIAlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JICAgICJzY3NpKCVsZDolZDolZCk6IEFib3J0IGNvbW1hbmQgaXNzdWVkIC0tICVseCAleC5cbiIsIGhhLT5ob3N0X25vLAotCSAgICBpZCwgbHVuLCBzZXJpYWwsIHJldCk7CisJICAgICJzY3NpKCVsZDolZDolZCk6IEFib3J0IGNvbW1hbmQgaXNzdWVkIC0tICVkICVseCAleC5cbiIsCisJICAgIGhhLT5ob3N0X25vLCBpZCwgbHVuLCB3YWl0LCBzZXJpYWwsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTcwMCw4ICsxNzAzLDggQEAKIAloYS0+ZmxhZ3Mub25saW5lID0gMDsKIAogCS8qIERldGFjaCBpbnRlcnJ1cHRzICovCi0JaWYgKGhhLT5wZGV2LT5pcnEpCi0JCWZyZWVfaXJxKGhhLT5wZGV2LT5pcnEsIGhhKTsKKwlpZiAoaGEtPmhvc3QtPmlycSkKKwkJZnJlZV9pcnEoaGEtPmhvc3QtPmlycSwgaGEpOwogCiAJLyogcmVsZWFzZSBpbyBzcGFjZSByZWdpc3RlcnMgICovCiAJaWYgKGhhLT5pb2Jhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxvZ2ljZmMuYyBiL2RyaXZlcnMvc2NzaS9xbG9naWNmYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmIyMjRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNmYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIyOCArMCwwIEBACi0vKgotICogUUxvZ2ljIElTUDJ4MDAgU0NTSS1GQ1AKLSAqIFdyaXR0ZW4gYnkgRXJpayBILiBNb2UsIGVobUBjcmlzLmNvbQotICogQ29weXJpZ2h0IDE5OTUsIEVyaWsgSC4gTW9lCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qIFJlbmFtZWQgYW5kIHVwZGF0ZWQgdG8gMS4zLnggYnkgTWljaGFlbCBHcmlmZml0aCA8Z3JpZkBjcy51Y3IuZWR1PiAqLwotCi0vKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgaXNwMTAyMCBkcml2ZXIgd2hpY2ggd2FzIG1vZGlmaWVkIGJ5Ci0gKiBDaHJpcyBMb3ZlbGFuZCA8Y3dsQGlvbC51bmguZWR1PiB0byBzdXBwb3J0IHRoZSBpc3AyMTAwIGFuZCBpc3AyMjAwCi0gKgotICogQmlnIGVuZGlhbiBzdXBwb3J0IGFuZCBkeW5hbWljIERNQSBtYXBwaW5nIGFkZGVkCi0gKiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPi4KLSAqCi0gKiBDb252ZXJzaW9uIHRvIGZpbmFsIHBjaTY0IERNQSBpbnRlcmZhY2VzCi0gKiBieSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+LgotICovCi0KLS8qCi0gKiAkRGF0ZTogMTk5NS8wOS8yMiAwMjoyMzoxNSAkCi0gKiAkUmV2aXNpb246IDAuNSAkCi0gKgotICogJExvZzogaXNwMTAyMC5jLHYgJAotICogUmV2aXNpb24gMC41ICAxOTk1LzA5LzIyICAwMjoyMzoxNSAgcm9vdAotICogZG8gYXV0byByZXF1ZXN0IHNlbnNlCi0gKgotICogUmV2aXNpb24gMC40ICAxOTk1LzA4LzA3ICAwNDo0NDozMyAgcm9vdAotICogc3VwcGx5IGZpcm13YXJlIHdpdGggZHJpdmVyLgotICogbnVtZXJvdXMgYnVnIGZpeGVzL2dlbmVyYWwgY2xlYW51cCBvZiBjb2RlLgotICoKLSAqIFJldmlzaW9uIDAuMyAgMTk5NS8wNy8xNiAgMTY6MTU6MzkgIHJvb3QKLSAqIGFkZGVkIHJlc2V0L2Fib3J0IGNvZGUuCi0gKgotICogUmV2aXNpb24gMC4yICAxOTk1LzA2LzI5ICAwMzoxNDoxOSAgcm9vdAotICogZml4ZWQgYmlvc3BhcmFtLgotICogYWRkZWQgcXVldWUgcHJvdG9jb2wuCi0gKgotICogUmV2aXNpb24gMC4xICAxOTk1LzA2LzI1ICAwMTo1NTo0NSAgcm9vdAotICogSW5pdGlhbCByZWxlYXNlLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KLSNkZWZpbmUgcGNpNjRfZG1hX2hpMzIoYSkgKCh1MzIpICgweGZmZmZmZmZmICYgKCgodTY0KShhKSk+PjMyKSkpCi0jZGVmaW5lIHBjaTY0X2RtYV9sbzMyKGEpICgodTMyKSAoMHhmZmZmZmZmZiAmICgoKHU2NCkoYSkpKSkpCi0jZGVmaW5lIHBjaTY0X2RtYV9idWlsZChoaSxsbykgXAotCSgoZG1hX2FkZHJfdCkoKCh1NjQpKGxvKSl8KCgodTY0KShoaSkpPDwzMikpKQotCi0vKgotICogV2l0aCB0aGUgcWxvZ2ljIGludGVyZmFjZSwgZXZlcnkgcXVldWUgc2xvdCBjYW4gaG9sZCBhIFNDU0kKLSAqIGNvbW1hbmQgd2l0aCB1cCB0byAyIHNjYXR0ZXIvZ2F0aGVyIGVudHJpZXMuICBJZiB3ZSBuZWVkIG1vcmUKLSAqIHRoYW4gMiBlbnRyaWVzLCBjb250aW51YXRpb24gZW50cmllcyBjYW4gYmUgdXNlZCB0aGF0IGhvbGQKLSAqIGFub3RoZXIgNSBlbnRyaWVzIGVhY2guICBVbmxpa2UgZm9yIG90aGVyIGRyaXZlcnMsIHRoaXMgbWVhbnMKLSAqIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIGVudHJpZXMgd2UgY2FuCi0gKiBzdXBwb3J0IGF0IGFueSBnaXZlbiB0aW1lIGlzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlciBvZiBxdWV1ZQotICogc2xvdHMgYXZhaWxhYmxlLiAgVGhhdCBpcywgaG9zdC0+Y2FuX3F1ZXVlIGFuZCBob3N0LT5zZ190YWJsZXNpemUKLSAqIGFyZSBkeW5hbWljIGFuZCBfbm90XyBpbmRlcGVuZGVudC4gIFRoaXMgYWxsIHdvcmtzIGZpbmUgYmVjYXVzZQotICogcmVxdWVzdHMgYXJlIHF1ZXVlZCBzZXJpYWxseSBhbmQgdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpbWl0IGlzCi0gKiBkZXRlcm1pbmVkIGZvciBlYWNoIHF1ZXVlIHJlcXVlc3QgYW5ldy4KLSAqLwotCi0jZGVmaW5lIERBVEFTRUdTX1BFUl9DT01NQU5EIDIKLSNkZWZpbmUgREFUQVNFR1NfUEVSX0NPTlQgNQotCi0jZGVmaW5lIFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gMjU1ICAgICAvKiBtdXN0IGJlIHBvd2VyIG9mIHR3byAtIDEgKi8KLSNkZWZpbmUgUUxPR0lDRkNfTUFYX1NHKHFsKQkoREFUQVNFR1NfUEVSX0NPTU1BTkQgKyAoKChxbCkgPiAwKSA/IERBVEFTRUdTX1BFUl9DT05UKigocWwpIC0gMSkgOiAwKSkKLSNkZWZpbmUgUUxPR0lDRkNfQ01EX1BFUl9MVU4gICAgOAotCi0vKiBDb25maWd1cmF0aW9uIHNlY3Rpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiBTZXQgdGhlIGZvbGxvd2luZyBtYWNybyB0byAxIHRvIHJlbG9hZCB0aGUgSVNQMngwMCdzIGZpcm13YXJlLiAgVGhpcyBpcwotICAgdmVyc2lvbiAxLjE3LjMwIG9mIHRoZSBpc3AyMTAwJ3MgZmlybXdhcmUgYW5kIHZlcnNpb24gMi4wMC40MCBvZiB0aGUgCi0gICBpc3AyMjAwJ3MgZmlybXdhcmUuIAotKi8KLQotI2RlZmluZSBVU0VfTlZSQU1fREVGQVVMVFMgICAgICAxCi0KLSNkZWZpbmUgSVNQMngwMF9QT1JUREIgICAgICAgICAgMQotCi0vKiBTZXQgdGhlIGZvbGxvd2luZyB0byAxIHRvIGluY2x1ZGUgZmFicmljIHN1cHBvcnQsIGZhYnJpYyBzdXBwb3J0IGlzIAotICogY3VycmVudGx5IG5vdCBhcyB3ZWxsIHRlc3RlZCBhcyB0aGUgb3RoZXIgYXNwZWN0cyBvZiB0aGUgZHJpdmVyICovCi0KLSNkZWZpbmUgSVNQMngwMF9GQUJSSUMgICAgICAgICAgMQotCi0vKiAgTWFjcm9zIHVzZWQgZm9yIGRlYnVnZ2luZyAqLwotI2RlZmluZSBERUJVR19JU1AyeDAwCQkwCi0jZGVmaW5lIERFQlVHX0lTUDJ4MDBfSU5UCTAKLSNkZWZpbmUgREVCVUdfSVNQMngwMF9JTlRSCTAKLSNkZWZpbmUgREVCVUdfSVNQMngwMF9TRVRVUAkwCi0jZGVmaW5lIERFQlVHX0lTUDJ4MDBfRkFCUklDICAgIDAKLSNkZWZpbmUgVFJBQ0VfSVNQIAkJMCAKLQotCi0jZGVmaW5lIERFRkFVTFRfTE9PUF9DT1VOVAkxMDAwMDAwMDAwCi0KLSNkZWZpbmUgSVNQX1RJTUVPVVQgKDIqSFopCi0vKiBFbmQgQ29uZmlndXJhdGlvbiBzZWN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpZiBUUkFDRV9JU1AKLQotI2RlZmluZSBUUkFDRV9CVUZfTEVOCSgzMioxMDI0KQotCi1zdHJ1Y3QgewotCXVfbG9uZyBuZXh0OwotCXN0cnVjdCB7Ci0JCXVfbG9uZyB0aW1lOwotCQl1X2ludCBpbmRleDsKLQkJdV9pbnQgYWRkcjsKLQkJdV9jaGFyICpuYW1lOwotCX0gYnVmW1RSQUNFX0JVRl9MRU5dOwotfSB0cmFjZTsKLQotI2RlZmluZSBUUkFDRSh3LCBpLCBhKQkJCQkJCVwKLXsJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJXAotCQkJCQkJCQlcCi0Jc2F2ZV9mbGFncyhmbGFncyk7CQkJCQlcCi0JY2xpKCk7CQkJCQkJCVwKLQl0cmFjZS5idWZbdHJhY2UubmV4dF0ubmFtZSAgPSAodyk7CQkJXAotCXRyYWNlLmJ1Zlt0cmFjZS5uZXh0XS50aW1lICA9IGppZmZpZXM7CQkJXAotCXRyYWNlLmJ1Zlt0cmFjZS5uZXh0XS5pbmRleCA9IChpKTsJCQlcCi0JdHJhY2UuYnVmW3RyYWNlLm5leHRdLmFkZHIgID0gKGxvbmcpIChhKTsJCVwKLQl0cmFjZS5uZXh0ID0gKHRyYWNlLm5leHQgKyAxKSAmIChUUkFDRV9CVUZfTEVOIC0gMSk7CVwKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJCQkJCVwKLX0KLQotI2Vsc2UKLSNkZWZpbmUgVFJBQ0UodywgaSwgYSkKLSNlbmRpZgotCi0jaWYgREVCVUdfSVNQMngwMF9GQUJSSUMKLSNkZWZpbmUgREVCVUdfRkFCUklDKHgpCXgKLSNlbHNlCi0jZGVmaW5lIERFQlVHX0ZBQlJJQyh4KQotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDBfRkFCUklDICovCi0KLQotI2lmIERFQlVHX0lTUDJ4MDAKLSNkZWZpbmUgRU5URVIoeCkJcHJpbnRrKCJpc3AyeDAwIDogZW50ZXJpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIExFQVZFKHgpCXByaW50aygiaXNwMngwMCA6IGxlYXZpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIERFQlVHKHgpCXgKLSNlbHNlCi0jZGVmaW5lIEVOVEVSKHgpCi0jZGVmaW5lIExFQVZFKHgpCi0jZGVmaW5lIERFQlVHKHgpCi0jZW5kaWYJCQkJLyogREVCVUdfSVNQMngwMCAqLwotCi0jaWYgREVCVUdfSVNQMngwMF9JTlRSCi0jZGVmaW5lIEVOVEVSX0lOVFIoeCkJcHJpbnRrKCJpc3AyeDAwIDogZW50ZXJpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIExFQVZFX0lOVFIoeCkJcHJpbnRrKCJpc3AyeDAwIDogbGVhdmluZyAlcygpXG4iLCB4KTsKLSNkZWZpbmUgREVCVUdfSU5UUih4KQl4Ci0jZWxzZQotI2RlZmluZSBFTlRFUl9JTlRSKHgpCi0jZGVmaW5lIExFQVZFX0lOVFIoeCkKLSNkZWZpbmUgREVCVUdfSU5UUih4KQotI2VuZGlmCQkJCS8qIERFQlVHIElTUDJ4MDBfSU5UUiAqLwotCi0KLSNkZWZpbmUgSVNQMjEwMF9SRVZfSUQxCSAgICAgICAxCi0jZGVmaW5lIElTUDIxMDBfUkVWX0lEMyAgICAgICAgMwotI2RlZmluZSBJU1AyMjAwX1JFVl9JRDUgICAgICAgIDUKLQotLyogaG9zdCBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHJlZ2lzdGVycyAqLwotI2RlZmluZSBIT1NUX0hDQ1IJMHhjMAkvKiBob3N0IGNvbW1hbmQgYW5kIGNvbnRyb2wgKi8KLQotLyogcGNpIGJ1cyBpbnRlcmZhY2UgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEZMQVNIX0JJT1NfQUREUgkweDAwCi0jZGVmaW5lIEZMQVNIX0JJT1NfREFUQQkweDAyCi0jZGVmaW5lIElTUF9DVFJMX1NUQVRVUwkweDA2CS8qIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgIzEgKi8KLSNkZWZpbmUgUENJX0lOVEVSX0NUTAkweDA4CS8qIHBjaSBpbnRlcnJ1cHQgY29udHJvbCAqLwotI2RlZmluZSBQQ0lfSU5URVJfU1RTCTB4MGEJLyogcGNpIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgUENJX1NFTUFQSE9SRQkweDBjCS8qIHBjaSBzZW1hcGhvcmUgKi8KLSNkZWZpbmUgUENJX05WUkFNCTB4MGUJLyogcGNpIG52cmFtIGludGVyZmFjZSAqLwotCi0vKiBtYWlsYm94IHJlZ2lzdGVycyAqLwotI2RlZmluZSBNQk9YMAkJMHgxMAkvKiBtYWlsYm94IDAgKi8KLSNkZWZpbmUgTUJPWDEJCTB4MTIJLyogbWFpbGJveCAxICovCi0jZGVmaW5lIE1CT1gyCQkweDE0CS8qIG1haWxib3ggMiAqLwotI2RlZmluZSBNQk9YMwkJMHgxNgkvKiBtYWlsYm94IDMgKi8KLSNkZWZpbmUgTUJPWDQJCTB4MTgJLyogbWFpbGJveCA0ICovCi0jZGVmaW5lIE1CT1g1CQkweDFhCS8qIG1haWxib3ggNSAqLwotI2RlZmluZSBNQk9YNgkJMHgxYwkvKiBtYWlsYm94IDYgKi8KLSNkZWZpbmUgTUJPWDcJCTB4MWUJLyogbWFpbGJveCA3ICovCi0KLS8qIG1haWxib3ggY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgY29kZXMgKi8KLSNkZWZpbmUgTUJPWF9DT01NQU5EX0NPTVBMRVRFCQkweDQwMDAKLSNkZWZpbmUgSU5WQUxJRF9DT01NQU5ECQkJMHg0MDAxCi0jZGVmaW5lIEhPU1RfSU5URVJGQUNFX0VSUk9SCQkweDQwMDIKLSNkZWZpbmUgVEVTVF9GQUlMRUQJCQkweDQwMDMKLSNkZWZpbmUgQ09NTUFORF9FUlJPUgkJCTB4NDAwNQotI2RlZmluZSBDT01NQU5EX1BBUkFNX0VSUk9SCQkweDQwMDYKLSNkZWZpbmUgUE9SVF9JRF9VU0VEICAgICAgICAgICAgICAgICAgICAweDQwMDcKLSNkZWZpbmUgTE9PUF9JRF9VU0VEICAgICAgICAgICAgICAgICAgICAweDQwMDgKLSNkZWZpbmUgQUxMX0lEU19VU0VEICAgICAgICAgICAgICAgICAgICAweDQwMDkKLQotLyogYXN5bmMgZXZlbnQgc3RhdHVzIGNvZGVzICovCi0jZGVmaW5lIFJFU0VUX0RFVEVDVEVEICAJCTB4ODAwMQotI2RlZmluZSBTWVNURU1fRVJST1IJCQkweDgwMDIKLSNkZWZpbmUgUkVRVUVTVF9UUkFOU0ZFUl9FUlJPUgkJMHg4MDAzCi0jZGVmaW5lIFJFU1BPTlNFX1RSQU5TRkVSX0VSUk9SCQkweDgwMDQKLSNkZWZpbmUgUkVRVUVTVF9RVUVVRV9XQUtFVVAJCTB4ODAwNQotI2RlZmluZSBMSVBfT0NDVVJSRUQgICAgICAgICAgICAgICAgICAgICAweDgwMTAKLSNkZWZpbmUgTE9PUF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTEKLSNkZWZpbmUgTE9PUF9ET1dOICAgICAgICAgICAgICAgICAgICAgICAweDgwMTIKLSNkZWZpbmUgTElQX1JFQ0VJVkVEICAgICAgICAgICAgICAgICAgICAweDgwMTMKLSNkZWZpbmUgUE9SVF9EQl9DSEFOR0VEICAgICAgICAgICAgICAgICAweDgwMTQKLSNkZWZpbmUgQ0hBTkdFX05PVElGSUNBVElPTiAgICAgICAgICAgICAweDgwMTUKLSNkZWZpbmUgU0NTSV9DT01NQU5EX0NPTVBMRVRFICAgICAgICAgICAweDgwMjAKLSNkZWZpbmUgUE9JTlRfVE9fUE9JTlRfVVAgICAgICAgICAgICAgICAweDgwMzAKLSNkZWZpbmUgQ09OTkVDVElPTl9NT0RFICAgICAgICAgICAgICAgICAweDgwMzYKLQotc3RydWN0IEVudHJ5X2hlYWRlciB7Ci0JdV9jaGFyIGVudHJ5X3R5cGU7Ci0JdV9jaGFyIGVudHJ5X2NudDsKLQl1X2NoYXIgc3lzX2RlZl8xOwotCXVfY2hhciBmbGFnczsKLX07Ci0KLS8qIGVudHJ5IGhlYWRlciB0eXBlIGNvbW1hbmRzICovCi0jZGVmaW5lIEVOVFJZX0NPTU1BTkQJCTB4MTkKLSNkZWZpbmUgRU5UUllfQ09OVElOVUFUSU9OCTB4MGEKLQotI2RlZmluZSBFTlRSWV9TVEFUVVMJCTB4MDMKLSNkZWZpbmUgRU5UUllfTUFSS0VSCQkweDA0Ci0KLQotLyogZW50cnkgaGVhZGVyIGZsYWcgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgRUZMQUdfQlVTWQkJMgotI2RlZmluZSBFRkxBR19CQURfSEVBREVSCTQKLSNkZWZpbmUgRUZMQUdfQkFEX1BBWUxPQUQJOAotCi1zdHJ1Y3QgZGF0YXNlZyB7Ci0JdV9pbnQgZF9iYXNlOwotCXVfaW50IGRfYmFzZV9oaTsKLQl1X2ludCBkX2NvdW50OwotfTsKLQotc3RydWN0IENvbW1hbmRfRW50cnkgewotCXN0cnVjdCBFbnRyeV9oZWFkZXIgaGRyOwotCXVfaW50IGhhbmRsZTsKLQl1X2NoYXIgdGFyZ2V0X2x1bjsKLQl1X2NoYXIgdGFyZ2V0X2lkOwotCXVfc2hvcnQgZXhwYW5kZWRfbHVuOwotCXVfc2hvcnQgY29udHJvbF9mbGFnczsKLQl1X3Nob3J0IHJzdmQyOwotCXVfc2hvcnQgdGltZV9vdXQ7Ci0JdV9zaG9ydCBzZWdtZW50X2NudDsKLQl1X2NoYXIgY2RiWzE2XTsKLQl1X2ludCB0b3RhbF9ieXRlX2NudDsKLQlzdHJ1Y3QgZGF0YXNlZyBkYXRhc2VnW0RBVEFTRUdTX1BFUl9DT01NQU5EXTsKLX07Ci0KLS8qIGNvbW1hbmQgZW50cnkgY29udHJvbCBmbGFnIGRlZmluaXRpb25zICovCi0jZGVmaW5lIENGTEFHX05PRElTQwkJMHgwMQotI2RlZmluZSBDRkxBR19IRUFEX1RBRwkJMHgwMgotI2RlZmluZSBDRkxBR19PUkRFUkVEX1RBRwkweDA0Ci0jZGVmaW5lIENGTEFHX1NJTVBMRV9UQUcJMHgwOAotI2RlZmluZSBDRkxBR19UQVJfUlROCQkweDEwCi0jZGVmaW5lIENGTEFHX1JFQUQJCTB4MjAKLSNkZWZpbmUgQ0ZMQUdfV1JJVEUJCTB4NDAKLQotc3RydWN0IENvbnRpbnVhdGlvbl9FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlciBoZHI7Ci0Jc3RydWN0IGRhdGFzZWcgZGF0YXNlZ1tEQVRBU0VHU19QRVJfQ09OVF07Ci19OwotCi1zdHJ1Y3QgTWFya2VyX0VudHJ5IHsKLQlzdHJ1Y3QgRW50cnlfaGVhZGVyIGhkcjsKLQl1X2ludCByZXNlcnZlZDsKLQl1X2NoYXIgdGFyZ2V0X2x1bjsKLQl1X2NoYXIgdGFyZ2V0X2lkOwotCXVfY2hhciBtb2RpZmllcjsKLQl1X2NoYXIgZXhwYW5kZWRfbHVuOwotCXVfY2hhciByc3Zkc1s1Ml07Ci19OwotCi0vKiBtYXJrZXIgZW50cnkgbW9kaWZpZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU1lOQ19ERVZJQ0UJMAotI2RlZmluZSBTWU5DX1RBUkdFVAkxCi0jZGVmaW5lIFNZTkNfQUxMCTIKLQotc3RydWN0IFN0YXR1c19FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlciBoZHI7Ci0JdV9pbnQgaGFuZGxlOwotCXVfc2hvcnQgc2NzaV9zdGF0dXM7Ci0JdV9zaG9ydCBjb21wbGV0aW9uX3N0YXR1czsKLQl1X3Nob3J0IHN0YXRlX2ZsYWdzOwotCXVfc2hvcnQgc3RhdHVzX2ZsYWdzOwotCXVfc2hvcnQgcmVzX2luZm9fbGVuOwotCXVfc2hvcnQgcmVxX3NlbnNlX2xlbjsKLQl1X2ludCByZXNpZHVhbDsKLQl1X2NoYXIgcmVzX2luZm9bOF07Ci0JdV9jaGFyIHJlcV9zZW5zZV9kYXRhWzMyXTsKLX07Ci0KLS8qIHN0YXR1cyBlbnRyeSBjb21wbGV0aW9uIHN0YXR1cyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBDU19DT01QTEVURQkJCTB4MDAwMAotI2RlZmluZSBDU19ETUFfRVJST1IJCQkweDAwMDIKLSNkZWZpbmUgQ1NfUkVTRVRfT0NDVVJSRUQJCTB4MDAwNAotI2RlZmluZSBDU19BQk9SVEVECQkJMHgwMDA1Ci0jZGVmaW5lIENTX1RJTUVPVVQJCQkweDAwMDYKLSNkZWZpbmUgQ1NfREFUQV9PVkVSUlVOCQkJMHgwMDA3Ci0jZGVmaW5lIENTX0RBVEFfVU5ERVJSVU4JCTB4MDAxNQotI2RlZmluZSBDU19RVUVVRV9GVUxMCQkJMHgwMDFjCi0jZGVmaW5lIENTX1BPUlRfVU5BVkFJTEFCTEUgICAgICAgICAgICAgMHgwMDI4Ci0jZGVmaW5lIENTX1BPUlRfTE9HR0VEX09VVCAgICAgICAgICAgICAgMHgwMDI5Ci0jZGVmaW5lIENTX1BPUlRfQ09ORklHX0NIQU5HRUQJCTB4MDAyYQotCi0vKiBzdGF0dXMgZW50cnkgc3RhdGUgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTRl9TRU5UX0NEQgkJCTB4MDQwMAotI2RlZmluZSBTRl9UUkFOU0ZFUlJFRF9EQVRBCQkweDA4MDAKLSNkZWZpbmUgU0ZfR09UX1NUQVRVUwkJCTB4MTAwMAotCi0vKiBzdGF0dXMgZW50cnkgc3RhdHVzIGZsYWcgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU1RGX0JVU19SRVNFVAkJCTB4MDAwOAotI2RlZmluZSBTVEZfREVWSUNFX1JFU0VUCQkweDAwMTAKLSNkZWZpbmUgU1RGX0FCT1JURUQJCQkweDAwMjAKLSNkZWZpbmUgU1RGX1RJTUVPVVQJCQkweDAwNDAKLQotLyogaW50ZXJydXB0IGNvbnRyb2wgY29tbWFuZHMgKi8KLSNkZWZpbmUgSVNQX0VOX0lOVAkJCTB4ODAwMAotI2RlZmluZSBJU1BfRU5fUklTQwkJCTB4MDAwOAotCi0vKiBob3N0IGNvbnRyb2wgY29tbWFuZHMgKi8KLSNkZWZpbmUgSENDUl9OT1AJCQkweDAwMDAKLSNkZWZpbmUgSENDUl9SRVNFVAkJCTB4MTAwMAotI2RlZmluZSBIQ0NSX1BBVVNFCQkJMHgyMDAwCi0jZGVmaW5lIEhDQ1JfUkVMRUFTRQkJCTB4MzAwMAotI2RlZmluZSBIQ0NSX1NJTkdMRV9TVEVQCQkweDQwMDAKLSNkZWZpbmUgSENDUl9TRVRfSE9TVF9JTlRSCQkweDUwMDAKLSNkZWZpbmUgSENDUl9DTEVBUl9IT1NUX0lOVFIJCTB4NjAwMAotI2RlZmluZSBIQ0NSX0NMRUFSX1JJU0NfSU5UUgkJMHg3MDAwCi0jZGVmaW5lIEhDQ1JfQlBfRU5BQkxFCQkJMHg4MDAwCi0jZGVmaW5lIEhDQ1JfQklPU19ESVNBQkxFCQkweDkwMDAKLSNkZWZpbmUgSENDUl9URVNUX01PREUJCQkweGYwMDAKLQotI2RlZmluZSBSSVNDX0JVU1kJCQkweDAwMDQKLQotLyogbWFpbGJveCBjb21tYW5kcyAqLwotI2RlZmluZSBNQk9YX05PX09QCQkJMHgwMDAwCi0jZGVmaW5lIE1CT1hfTE9BRF9SQU0JCQkweDAwMDEKLSNkZWZpbmUgTUJPWF9FWEVDX0ZJUk1XQVJFCQkweDAwMDIKLSNkZWZpbmUgTUJPWF9EVU1QX1JBTQkJCTB4MDAwMwotI2RlZmluZSBNQk9YX1dSSVRFX1JBTV9XT1JECQkweDAwMDQKLSNkZWZpbmUgTUJPWF9SRUFEX1JBTV9XT1JECQkweDAwMDUKLSNkZWZpbmUgTUJPWF9NQUlMQk9YX1JFR19URVNUCQkweDAwMDYKLSNkZWZpbmUgTUJPWF9WRVJJRllfQ0hFQ0tTVU0JCTB4MDAwNwotI2RlZmluZSBNQk9YX0FCT1VUX0ZJUk1XQVJFCQkweDAwMDgKLSNkZWZpbmUgTUJPWF9MT0FEX1JJU0NfUkFNICAgICAgICAgICAgICAweDAwMDkKLSNkZWZpbmUgTUJPWF9EVU1QX1JJU0NfUkFNICAgICAgICAgICAgICAweDAwMGEKLSNkZWZpbmUgTUJPWF9DSEVDS19GSVJNV0FSRQkJMHgwMDBlCi0jZGVmaW5lIE1CT1hfSU5JVF9SRVFfUVVFVUUJCTB4MDAxMAotI2RlZmluZSBNQk9YX0lOSVRfUkVTX1FVRVVFCQkweDAwMTEKLSNkZWZpbmUgTUJPWF9FWEVDVVRFX0lPQ0IJCTB4MDAxMgotI2RlZmluZSBNQk9YX1dBS0VfVVAJCQkweDAwMTMKLSNkZWZpbmUgTUJPWF9TVE9QX0ZJUk1XQVJFCQkweDAwMTQKLSNkZWZpbmUgTUJPWF9BQk9SVF9JT0NCCQkJMHgwMDE1Ci0jZGVmaW5lIE1CT1hfQUJPUlRfREVWSUNFCQkweDAwMTYKLSNkZWZpbmUgTUJPWF9BQk9SVF9UQVJHRVQJCTB4MDAxNwotI2RlZmluZSBNQk9YX0JVU19SRVNFVAkJCTB4MDAxOAotI2RlZmluZSBNQk9YX1NUT1BfUVVFVUUJCQkweDAwMTkKLSNkZWZpbmUgTUJPWF9TVEFSVF9RVUVVRQkJMHgwMDFhCi0jZGVmaW5lIE1CT1hfU0lOR0xFX1NURVBfUVVFVUUJCTB4MDAxYgotI2RlZmluZSBNQk9YX0FCT1JUX1FVRVVFCQkweDAwMWMKLSNkZWZpbmUgTUJPWF9HRVRfREVWX1FVRVVFX1NUQVRVUwkweDAwMWQKLSNkZWZpbmUgTUJPWF9HRVRfRklSTVdBUkVfU1RBVFVTCTB4MDAxZgotI2RlZmluZSBNQk9YX0dFVF9JTklUX1NDU0lfSUQJCTB4MDAyMAotI2RlZmluZSBNQk9YX0dFVF9SRVRSWV9DT1VOVAkJMHgwMDIyCi0jZGVmaW5lIE1CT1hfR0VUX1RBUkdFVF9QQVJBTVMJCTB4MDAyOAotI2RlZmluZSBNQk9YX0dFVF9ERVZfUVVFVUVfUEFSQU1TCTB4MDAyOQotI2RlZmluZSBNQk9YX1NFVF9SRVRSWV9DT1VOVAkJMHgwMDMyCi0jZGVmaW5lIE1CT1hfU0VUX1RBUkdFVF9QQVJBTVMJCTB4MDAzOAotI2RlZmluZSBNQk9YX1NFVF9ERVZfUVVFVUVfUEFSQU1TCTB4MDAzOQotI2RlZmluZSBNQk9YX0VYRUNVVEVfSU9DQjY0ICAgICAgICAgICAgIDB4MDA1NAotI2RlZmluZSBNQk9YX0lOSVRfRklSTVdBUkUgICAgICAgICAgICAgIDB4MDA2MAotI2RlZmluZSBNQk9YX0dFVF9JTklUX0NCICAgICAgICAgICAgICAgIDB4MDA2MQotI2RlZmluZSBNQk9YX0lOSVRfTElQCQkJMHgwMDYyCi0jZGVmaW5lIE1CT1hfR0VUX1BPU19NQVAgICAgICAgICAgICAgICAgMHgwMDYzCi0jZGVmaW5lIE1CT1hfR0VUX1BPUlRfREIgICAgICAgICAgICAgICAgMHgwMDY0Ci0jZGVmaW5lIE1CT1hfQ0xFQVJfQUNBICAgICAgICAgICAgICAgICAgMHgwMDY1Ci0jZGVmaW5lIE1CT1hfVEFSR0VUX1JFU0VUICAgICAgICAgICAgICAgMHgwMDY2Ci0jZGVmaW5lIE1CT1hfQ0xFQVJfVEFTS19TRVQgICAgICAgICAgICAgMHgwMDY3Ci0jZGVmaW5lIE1CT1hfQUJPUlRfVEFTS19TRVQgICAgICAgICAgICAgMHgwMDY4Ci0jZGVmaW5lIE1CT1hfR0VUX0ZJUk1XQVJFX1NUQVRFICAgICAgICAgMHgwMDY5Ci0jZGVmaW5lIE1CT1hfR0VUX1BPUlRfTkFNRSAgICAgICAgICAgICAgMHgwMDZhCi0jZGVmaW5lIE1CT1hfU0VORF9TTlMgICAgICAgICAgICAgICAgICAgMHgwMDZlCi0jZGVmaW5lIE1CT1hfUE9SVF9MT0dJTiAgICAgICAgICAgICAgICAgMHgwMDZmCi0jZGVmaW5lIE1CT1hfU0VORF9DSEFOR0VfUkVRVUVTVCAgICAgICAgMHgwMDcwCi0jZGVmaW5lIE1CT1hfUE9SVF9MT0dPVVQgICAgICAgICAgICAgICAgMHgwMDcxCi0KLS8qCi0gKglGaXJtd2FyZSBpZiBuZWVkZWQgKG5vdGUgdGhpcyBpcyBhIGhhY2ssIGl0IGJlbG9uZ3MgaW4gYSBzZXBhcmF0ZQotICoJbW9kdWxlLgotICovCi0gCi0jaWZkZWYgQ09ORklHX1NDU0lfUUxPR0lDX0ZDX0ZJUk1XQVJFCi0jaW5jbHVkZSAicWxvZ2ljZmNfYXNtLmMiCi0jZWxzZQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZV9hZGRyMDEgPSAweDEwMDAgOwotI2VuZGlmCi0KLS8qIEVhY2ggZWxlbWVudCBpbiBtYm94X3BhcmFtIGlzIGFuIDggYml0IGJpdG1hcCB3aGVyZSBlYWNoIGJpdCBpbmRpY2F0ZXMKLSAgIGlmIHRoYXQgbWJveCBzaG91bGQgYmUgY29waWVkIGFzIGlucHV0LiAgRm9yIGV4YW1wbGUgMHgyIHdvdWxkIG1lYW4KLSAgIG9ubHkgY29weSBtYm94MS4gKi8KLQotc3RhdGljIGNvbnN0IHVfY2hhciBtYm94X3BhcmFtW10gPQotewotCTB4MDEsCQkJLyogTUJPWF9OT19PUCAqLwotCTB4MWYsCQkJLyogTUJPWF9MT0FEX1JBTSAqLwotCTB4MDMsCQkJLyogTUJPWF9FWEVDX0ZJUk1XQVJFICovCi0JMHgxZiwJCQkvKiBNQk9YX0RVTVBfUkFNICovCi0JMHgwNywJCQkvKiBNQk9YX1dSSVRFX1JBTV9XT1JEICovCi0JMHgwMywJCQkvKiBNQk9YX1JFQURfUkFNX1dPUkQgKi8KLQkweGZmLAkJCS8qIE1CT1hfTUFJTEJPWF9SRUdfVEVTVCAqLwotCTB4MDMsCQkJLyogTUJPWF9WRVJJRllfQ0hFQ0tTVU0gKi8KLQkweDAxLAkJCS8qIE1CT1hfQUJPVVRfRklSTVdBUkUgKi8KLQkweGZmLAkJCS8qIE1CT1hfTE9BRF9SSVNDX1JBTSAqLwotCTB4ZmYsCQkJLyogTUJPWF9EVU1QX1JJU0NfUkFNICovCi0JMHgwMCwJCQkvKiAweDAwMGIgKi8KLQkweDAwLAkJCS8qIDB4MDAwYyAqLwotCTB4MDAsCQkJLyogMHgwMDBkICovCi0JMHgwMSwJCQkvKiBNQk9YX0NIRUNLX0ZJUk1XQVJFICovCi0JMHgwMCwJCQkvKiAweDAwMGYgKi8KLQkweDFmLAkJCS8qIE1CT1hfSU5JVF9SRVFfUVVFVUUgKi8KLQkweDJmLAkJCS8qIE1CT1hfSU5JVF9SRVNfUVVFVUUgKi8KLQkweDBmLAkJCS8qIE1CT1hfRVhFQ1VURV9JT0NCICovCi0JMHgwMywJCQkvKiBNQk9YX1dBS0VfVVAgKi8KLQkweDAxLAkJCS8qIE1CT1hfU1RPUF9GSVJNV0FSRSAqLwotCTB4MGYsCQkJLyogTUJPWF9BQk9SVF9JT0NCICovCi0JMHgwMywJCQkvKiBNQk9YX0FCT1JUX0RFVklDRSAqLwotCTB4MDcsCQkJLyogTUJPWF9BQk9SVF9UQVJHRVQgKi8KLQkweDAzLAkJCS8qIE1CT1hfQlVTX1JFU0VUICovCi0JMHgwMywJCQkvKiBNQk9YX1NUT1BfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfU1RBUlRfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfU0lOR0xFX1NURVBfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfQUJPUlRfUVVFVUUgKi8KLQkweDAzLAkJCS8qIE1CT1hfR0VUX0RFVl9RVUVVRV9TVEFUVVMgKi8KLQkweDAwLAkJCS8qIDB4MDAxZSAqLwotCTB4MDEsCQkJLyogTUJPWF9HRVRfRklSTVdBUkVfU1RBVFVTICovCi0JMHgwMSwJCQkvKiBNQk9YX0dFVF9JTklUX1NDU0lfSUQgKi8KLQkweDAwLAkJCS8qIDB4MDAyMSAqLwotCTB4MDEsCQkJLyogTUJPWF9HRVRfUkVUUllfQ09VTlQgKi8KLQkweDAwLAkJCS8qIDB4MDAyMyAqLwotCTB4MDAsCQkJLyogMHgwMDI0ICovCi0JMHgwMCwJCQkvKiAweDAwMjUgKi8KLQkweDAwLAkJCS8qIDB4MDAyNiAqLwotCTB4MDAsCQkJLyogMHgwMDI3ICovCi0JMHgwMywJCQkvKiBNQk9YX0dFVF9UQVJHRVRfUEFSQU1TICovCi0JMHgwMywJCQkvKiBNQk9YX0dFVF9ERVZfUVVFVUVfUEFSQU1TICovCi0JMHgwMCwJCQkvKiAweDAwMmEgKi8KLQkweDAwLAkJCS8qIDB4MDAyYiAqLwotCTB4MDAsCQkJLyogMHgwMDJjICovCi0JMHgwMCwJCQkvKiAweDAwMmQgKi8KLQkweDAwLAkJCS8qIDB4MDAyZSAqLwotCTB4MDAsCQkJLyogMHgwMDJmICovCi0JMHgwMCwJCQkvKiAweDAwMzAgKi8KLQkweDAwLAkJCS8qIDB4MDAzMSAqLwotCTB4MDcsCQkJLyogTUJPWF9TRVRfUkVUUllfQ09VTlQgKi8KLQkweDAwLAkJCS8qIDB4MDAzMyAqLwotCTB4MDAsCQkJLyogMHgwMDM0ICovCi0JMHgwMCwJCQkvKiAweDAwMzUgKi8KLQkweDAwLAkJCS8qIDB4MDAzNiAqLwotCTB4MDAsCQkJLyogMHgwMDM3ICovCi0JMHgwZiwJCQkvKiBNQk9YX1NFVF9UQVJHRVRfUEFSQU1TICovCi0JMHgwZiwJCQkvKiBNQk9YX1NFVF9ERVZfUVVFVUVfUEFSQU1TICovCi0JMHgwMCwJCQkvKiAweDAwM2EgKi8KLQkweDAwLAkJCS8qIDB4MDAzYiAqLwotCTB4MDAsCQkJLyogMHgwMDNjICovCi0JMHgwMCwJCQkvKiAweDAwM2QgKi8KLQkweDAwLAkJCS8qIDB4MDAzZSAqLwotCTB4MDAsCQkJLyogMHgwMDNmICovCi0JMHgwMCwJCQkvKiAweDAwNDAgKi8KLQkweDAwLAkJCS8qIDB4MDA0MSAqLwotCTB4MDAsCQkJLyogMHgwMDQyICovCi0JMHgwMCwJCQkvKiAweDAwNDMgKi8KLQkweDAwLAkJCS8qIDB4MDA0NCAqLwotCTB4MDAsCQkJLyogMHgwMDQ1ICovCi0JMHgwMCwJCQkvKiAweDAwNDYgKi8KLQkweDAwLAkJCS8qIDB4MDA0NyAqLwotCTB4MDAsCQkJLyogMHgwMDQ4ICovCi0JMHgwMCwJCQkvKiAweDAwNDkgKi8KLQkweDAwLAkJCS8qIDB4MDA0YSAqLwotCTB4MDAsCQkJLyogMHgwMDRiICovCi0JMHgwMCwJCQkvKiAweDAwNGMgKi8KLQkweDAwLAkJCS8qIDB4MDA0ZCAqLwotCTB4MDAsCQkJLyogMHgwMDRlICovCi0JMHgwMCwJCQkvKiAweDAwNGYgKi8KLQkweDAwLAkJCS8qIDB4MDA1MCAqLwotCTB4MDAsCQkJLyogMHgwMDUxICovCi0JMHgwMCwJCQkvKiAweDAwNTIgKi8KLQkweDAwLAkJCS8qIDB4MDA1MyAqLwotCTB4Y2YsCQkJLyogTUJPWF9FWEVDVVRFX0lPQ0I2NCAqLwotCTB4MDAsCQkJLyogMHgwMDU1ICovCi0JMHgwMCwJCQkvKiAweDAwNTYgKi8KLQkweDAwLAkJCS8qIDB4MDA1NyAqLwotCTB4MDAsCQkJLyogMHgwMDU4ICovCi0JMHgwMCwJCQkvKiAweDAwNTkgKi8KLQkweDAwLAkJCS8qIDB4MDA1YSAqLwotCTB4MDAsCQkJLyogMHgwMDViICovCi0JMHgwMCwJCQkvKiAweDAwNWMgKi8KLQkweDAwLAkJCS8qIDB4MDA1ZCAqLwotCTB4MDAsCQkJLyogMHgwMDVlICovCi0JMHgwMCwJCQkvKiAweDAwNWYgKi8KLQkweGZmLAkJCS8qIE1CT1hfSU5JVF9GSVJNV0FSRSAqLwotCTB4Y2QsCQkJLyogTUJPWF9HRVRfSU5JVF9DQiAqLwotCTB4MDEsCQkJLyogTUJPWF9JTklUX0xJUCAqLwotCTB4Y2QsCQkJLyogTUJPWF9HRVRfUE9TX01BUCAqLwotCTB4Y2YsCQkJLyogTUJPWF9HRVRfUE9SVF9EQiAqLwotCTB4MDMsCQkJLyogTUJPWF9DTEVBUl9BQ0EgKi8KLQkweDAzLAkJCS8qIE1CT1hfVEFSR0VUX1JFU0VUICovCi0JMHgwMywJCQkvKiBNQk9YX0NMRUFSX1RBU0tfU0VUICovCi0JMHgwMywJCQkvKiBNQk9YX0FCT1JUX1RBU0tfU0VUICovCi0JMHgwMSwJCQkvKiBNQk9YX0dFVF9GSVJNV0FSRV9TVEFURSAqLwotCTB4MDMsCQkJLyogTUJPWF9HRVRfUE9SVF9OQU1FICovCi0JMHgwMCwJCQkvKiAweDAwNmIgKi8KLQkweDAwLAkJCS8qIDB4MDA2YyAqLwotCTB4MDAsCQkJLyogMHgwMDZkICovCi0JMHhjZiwJCQkvKiBNQk9YX1NFTkRfU05TICovCi0JMHgwZiwJCQkvKiBNQk9YX1BPUlRfTE9HSU4gKi8KLQkweDAzLAkJCS8qIE1CT1hfU0VORF9DSEFOR0VfUkVRVUVTVCAqLwotCTB4MDMsCQkJLyogTUJPWF9QT1JUX0xPR09VVCAqLwotfTsKLQotI2RlZmluZSBNQVhfTUJPWF9DT01NQU5ECShzaXplb2YobWJveF9wYXJhbSkvc2l6ZW9mKHVfc2hvcnQpKQotCi0KLXN0cnVjdCBpZF9uYW1lX21hcCB7Ci0JdTY0IHd3bjsKLQl1X2NoYXIgbG9vcF9pZDsKLX07Ci0KLXN0cnVjdCBzbnNfY2IgewotCXVfc2hvcnQgbGVuOwotCXVfc2hvcnQgcmVzMTsKLQl1X2ludCByZXNwb25zZV9sb3c7Ci0JdV9pbnQgcmVzcG9uc2VfaGlnaDsKLQl1X3Nob3J0IHN1Yl9sZW47Ci0JdV9zaG9ydCByZXMyOwotCXVfY2hhciBkYXRhWzQ0XTsKLX07Ci0KLS8qIGFkZHJlc3Mgb2YgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIHRvIGFkYXB0ZXIgdG8gaW5pdGlhbGl6ZSB0aGluZ3MKLSAqLwotc3RydWN0IGluaXRfY2IgewotCXVfY2hhciB2ZXJzaW9uOwotCXVfY2hhciByZXNldmVyZDFbMV07Ci0JdV9zaG9ydCBmaXJtX29wdHM7Ci0JdV9zaG9ydCBtYXhfZnJhbWVfbGVuOwotCXVfc2hvcnQgbWF4X2lvY2I7Ci0JdV9zaG9ydCBleGVjX3Rocm90dGxlOwotCXVfY2hhciByZXRyeV9jbnQ7Ci0JdV9jaGFyIHJldHJ5X2RlbGF5OwotCXVfc2hvcnQgbm9kZV9uYW1lWzRdOwotCXVfc2hvcnQgaGFyZF9hZGRyOwotCXVfY2hhciByZXNlcnZlZDJbMTBdOwotCXVfc2hvcnQgcmVxX3F1ZXVlX291dDsKLQl1X3Nob3J0IHJlc19xdWV1ZV9pbjsKLQl1X3Nob3J0IHJlcV9xdWV1ZV9sZW47Ci0JdV9zaG9ydCByZXNfcXVldWVfbGVuOwotCXVfaW50IHJlcV9xdWV1ZV9hZGRyX2xvOwotCXVfaW50IHJlcV9xdWV1ZV9hZGRyX2hpZ2g7Ci0JdV9pbnQgcmVzX3F1ZXVlX2FkZHJfbG87Ci0JdV9pbnQgcmVzX3F1ZXVlX2FkZHJfaGlnaDsKLSAgICAgICAgLyogdGhlIHJlc3Qgb2YgdGhpcyBzdHJ1Y3R1cmUgb25seSBhcHBsaWVzIHRvIHRoZSBpc3AyMjAwICovCi0gICAgICAgIHVfc2hvcnQgbHVuX2VuYWJsZXM7Ci0gICAgICAgIHVfY2hhciBjbWRfcmVzb3VyY2VfY250OwotICAgICAgICB1X2NoYXIgbm90aWZ5X3Jlc291cmNlX2NudDsKLSAgICAgICAgdV9zaG9ydCB0aW1lb3V0OwotICAgICAgICB1X3Nob3J0IHJlc2VydmVkMzsKLSAgICAgICAgdV9zaG9ydCBhZGRfZmlybV9vcHRzOwotICAgICAgICB1X2NoYXIgcmVzX2FjY3VtX3RpbWVyOwotICAgICAgICB1X2NoYXIgaXJxX2RlbGF5X3RpbWVyOwotICAgICAgICB1X3Nob3J0IHNwZWNpYWxfb3B0aW9uczsKLSAgICAgICAgdV9zaG9ydCByZXNlcnZlZDRbMTNdOwotfTsKLQotLyoKLSAqIFRoZSByZXN1bHQgcXVldWUgY2FuIGJlIHF1aXRlIGEgYml0IHNtYWxsZXIgc2luY2UgY29udGludWF0aW9uIGVudHJpZXMKLSAqIGRvIG5vdCBzaG93IHVwIHRoZXJlOgotICovCi0jZGVmaW5lIFJFU19RVUVVRV9MRU4JCSgoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDEpIC8gOCAtIDEpCi0jZGVmaW5lIFFVRVVFX0VOVFJZX0xFTgkJNjQKLQotI2lmIElTUDJ4MDBfRkFCUklDCi0jZGVmaW5lIFFMT0dJQ0ZDX01BWF9JRCAgICAweGZmCi0jZWxzZQotI2RlZmluZSBRTE9HSUNGQ19NQVhfSUQgICAgMHg3ZAotI2VuZGlmCi0KLSNkZWZpbmUgUUxPR0lDRkNfTUFYX0xVTgkxMjgKLSNkZWZpbmUgUUxPR0lDRkNfTUFYX0xPT1BfSUQJMHg3ZAotCi0vKiB0aGUgZm9sbG93aW5nIGNvbm5lY3Rpb24gb3B0aW9ucyBvbmx5IGFwcGx5IHRvIHRoZSAyMjAwLiAgaSBoYXZlIG9ubHkKLSAqIGhhZCBzdWNjZXNzIHdpdGggTE9PUF9PTkxZIGFuZCBQMlBfT05MWS4KLSAqLwotCi0jZGVmaW5lIExPT1BfT05MWSAgICAgICAgICAgICAgMAotI2RlZmluZSBQMlBfT05MWSAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTE9PUF9QUkVGRVJFRCAgICAgICAgICAyCi0jZGVmaW5lIFAyUF9QUkVGRVJFRCAgICAgICAgICAgMwotCi0jZGVmaW5lIENPTk5FQ1RJT05fUFJFRkVSRU5DRSAgTE9PUF9PTkxZCi0KLS8qIGFkYXB0ZXJfc3RhdGUgdmFsdWVzICovCi0jZGVmaW5lIEFTX0ZJUk1XQVJFX0RFQUQgICAgICAtMQotI2RlZmluZSBBU19MT09QX0RPV04gICAgICAgICAgIDAKLSNkZWZpbmUgQVNfTE9PUF9HT09EICAgICAgICAgICAxCi0jZGVmaW5lIEFTX1JFRE9fRkFCUklDX1BPUlREQiAgMgotI2RlZmluZSBBU19SRURPX0xPT1BfUE9SVERCICAgIDQKLQotI2RlZmluZSBSRVNfU0laRQkoKFJFU19RVUVVRV9MRU4gKyAxKSpRVUVVRV9FTlRSWV9MRU4pCi0jZGVmaW5lIFJFUV9TSVpFCSgoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTiArIDEpKlFVRVVFX0VOVFJZX0xFTikKLQotc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgewotCXVfY2hhciByZXZpc2lvbjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQkvKiByZXN1bHQgYW5kIHJlcXVlc3QgcXVldWVzIChzaGFyZWQgd2l0aCBpc3AyeDAwKTogKi8KLQl1X2ludCByZXFfaW5fcHRyOwkvKiBpbmRleCBvZiBuZXh0IHJlcXVlc3Qgc2xvdCAqLwotCXVfaW50IHJlc19vdXRfcHRyOwkvKiBpbmRleCBvZiBuZXh0IHJlc3VsdCBzbG90ICovCi0KLQkvKiB0aGlzIGlzIGhlcmUgc28gdGhlIHF1ZXVlcyBhcmUgbmljZWx5IGFsaWduZWQgKi8KLQlsb25nIHNlbmRfbWFya2VyOwkvKiBkbyB3ZSBuZWVkIHRvIHNlbmQgYSBtYXJrZXI/ICovCi0KLQljaGFyICogcmVzOwotCWNoYXIgKiByZXE7Ci0Jc3RydWN0IGluaXRfY2IgY29udHJvbF9ibG9jazsKLQlpbnQgYWRhcHRlcl9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGludCB0YWdfYWdlc1tRTE9HSUNGQ19NQVhfSUQgKyAxXTsKLQlTY3NpX0NtbmQgKmhhbmRsZV9wdHJzW1FMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxXTsKLQl1bnNpZ25lZCBsb25nIGhhbmRsZV9zZXJpYWxzW1FMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxXTsKLQlzdHJ1Y3QgaWRfbmFtZV9tYXAgcG9ydF9kYltRTE9HSUNGQ19NQVhfSUQgKyAxXTsKLQl1X2NoYXIgbWJveF9kb25lOwotCXU2NCB3d247Ci0JdV9pbnQgcG9ydF9pZDsKLQl1X2NoYXIgcXVldWVkOwotCXVfY2hhciBob3N0X2lkOwotICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCBleHBsb3JlX3RpbWVyOwotCXN0cnVjdCBpZF9uYW1lX21hcCB0ZW1wbWFwW1FMT0dJQ0ZDX01BWF9JRCArIDFdOwotfTsKLQotCi0vKiBxdWV1ZSBsZW5ndGgncyBfbXVzdF8gYmUgcG93ZXIgb2YgdHdvOiAqLwotI2RlZmluZSBRVUVVRV9ERVBUSChpbiwgb3V0LCBxbCkJKChpbiAtIG91dCkgJiAocWwpKQotI2RlZmluZSBSRVFfUVVFVUVfREVQVEgoaW4sIG91dCkJUVVFVUVfREVQVEgoaW4sIG91dCwgCQkgICAgIFwKLQkJCQkJCSAgICBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKQotI2RlZmluZSBSRVNfUVVFVUVfREVQVEgoaW4sIG91dCkJUVVFVUVfREVQVEgoaW4sIG91dCwgUkVTX1FVRVVFX0xFTikKLQotc3RhdGljIHZvaWQgaXNwMngwMF9lbmFibGVfaXJxcyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIHZvaWQgaXNwMngwMF9kaXNhYmxlX2lycXMoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQgaXNwMngwMF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50IGlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQgaXNwMngwMF9tYm94X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCB1X3Nob3J0W10pOwotc3RhdGljIGludCBpc3AyeDAwX3JldHVybl9zdGF0dXMoU2NzaV9DbW5kICosIHN0cnVjdCBTdGF0dXNfRW50cnkgKik7Ci1zdGF0aWMgdm9pZCBpc3AyeDAwX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgZG9faXNwMngwMF9pbnRyX2hhbmRsZXIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwotc3RhdGljIGludCBpc3AyeDAwX21ha2VfcG9ydGRiKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotc3RhdGljIGludCBpc3AyeDAwX2luaXRfZmFicmljKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IGlkX25hbWVfbWFwICosIGludCk7Ci0jZW5kaWYKLQotI2lmIFVTRV9OVlJBTV9ERUZBVUxUUwotc3RhdGljIGludCBpc3AyeDAwX2dldF9udnJhbV9kZWZhdWx0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBpbml0X2NiICopOwotc3RhdGljIHVfc2hvcnQgaXNwMngwMF9yZWFkX252cmFtX3dvcmQoc3RydWN0IFNjc2lfSG9zdCAqLCB1X3Nob3J0KTsKLSNlbmRpZgotCi0jaWYgREVCVUdfSVNQMngwMAotc3RhdGljIHZvaWQgaXNwMngwMF9wcmludF9zY3NpX2NtZChTY3NpX0NtbmQgKik7Ci0jZW5kaWYKLQotI2lmIERFQlVHX0lTUDJ4MDBfSU5UUgotc3RhdGljIHZvaWQgaXNwMngwMF9wcmludF9zdGF0dXNfZW50cnkoc3RydWN0IFN0YXR1c19FbnRyeSAqKTsKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNwMngwMF9lbmFibGVfaXJxcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQotewotCW91dHcoSVNQX0VOX0lOVCB8IElTUF9FTl9SSVNDLCBob3N0LT5pb19wb3J0ICsgUENJX0lOVEVSX0NUTCk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGlzcDJ4MDBfZGlzYWJsZV9pcnFzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfQ1RMKTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0bXB0KQotewotCWludCBob3N0cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB3YWl0X3RpbWU7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IE5VTEw7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZHNbMl07Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCWludCBpOwotCi0KLQlFTlRFUigiaXNwMngwMF9kZXRlY3QiKTsKLQotICAgICAgIAlkZXZpY2VfaWRzWzBdID0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjEwMDsKLQlkZXZpY2VfaWRzWzFdID0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjIwMDsKLQotCXRtcHQtPnByb2NfbmFtZSA9ICJpc3AyeDAwIjsKLQotCWZvciAoaT0wOyBpPDI7IGkrKyl7Ci0JCXBkZXYgPSBOVUxMOwotCSAgICAgICAgd2hpbGUgKChwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBkZXZpY2VfaWRzW2ldLCBwZGV2KSkpIHsKLQkJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJCQljb250aW51ZTsKLQotCQkJLyogVHJ5IHRvIGNvbmZpZ3VyZSBETUEgYXR0cmlidXRlcy4gKi8KLQkJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSAmJgotCQkJICAgIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQotCQkJCQljb250aW51ZTsKLQotCQkgICAgICAgIGhvc3QgPSBzY3NpX3JlZ2lzdGVyKHRtcHQsIHNpemVvZihzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSkpOwotCQkJaWYgKCFob3N0KSB7Ci0JCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGNvdWxkIG5vdCByZWdpc3RlciBob3N0LlxuIiwgaG9zdHMpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaG9zdC0+bWF4X2lkID0gUUxPR0lDRkNfTUFYX0lEICsgMTsKLQkJCWhvc3QtPm1heF9sdW4gPSBRTE9HSUNGQ19NQVhfTFVOOwotCQkJaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0KLQkJCW1lbXNldChob3N0ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhKSk7Ci0JCQlob3N0ZGF0YS0+cGNpX2RldiA9IHBkZXY7Ci0JCQlob3N0ZGF0YS0+cmVzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgUkVTX1NJWkUgKyBSRVFfU0laRSwgJmJ1c2FkZHIpOwotCi0JCQlpZiAoIWhvc3RkYXRhLT5yZXMpewotCQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBxdWV1ZS5cbiIsIGhvc3RzKTsKLQkJCSAgICAgICAgc2NzaV91bnJlZ2lzdGVyKGhvc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaG9zdGRhdGEtPnJlcSA9IGhvc3RkYXRhLT5yZXMgKyAoUkVTX1FVRVVFX0xFTiArIDEpKlFVRVVFX0VOVFJZX0xFTjsKLQkJCWhvc3RkYXRhLT5xdWV1ZWQgPSAwOwotCQkJLyogc2V0IHVwIHRoZSBjb250cm9sIGJsb2NrICovCi0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay52ZXJzaW9uID0gMHgxOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2suZmlybV9vcHRzID0gY3B1X3RvX2xlMTYoMHg4MDBlKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm1heF9mcmFtZV9sZW4gPSBjcHVfdG9fbGUxNigyMDQ4KTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm1heF9pb2NiID0gY3B1X3RvX2xlMTYoUUxPR0lDRkNfUkVRX1FVRVVFX0xFTik7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5leGVjX3Rocm90dGxlID0gY3B1X3RvX2xlMTYoUUxPR0lDRkNfQ01EX1BFUl9MVU4pOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmV0cnlfZGVsYXkgPSA1OwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmV0cnlfY250ID0gMTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVswXSA9IGNwdV90b19sZTE2KDB4MDAyMCk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMV0gPSBjcHVfdG9fbGUxNigweEUwMDApOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzJdID0gY3B1X3RvX2xlMTYoMHgwMDhCKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVszXSA9IGNwdV90b19sZTE2KDB4MDAwMCk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5oYXJkX2FkZHIgPSBjcHVfdG9fbGUxNigweDAwMDMpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVxX3F1ZXVlX2xlbiA9IGNwdV90b19sZTE2KFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gKyAxKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9sZW4gPSBjcHVfdG9fbGUxNihSRVNfUVVFVUVfTEVOICsgMSk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXNfcXVldWVfYWRkcl9sbyA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpKTsKLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9hZGRyX2hpZ2ggPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyKSk7Ci0JCQlob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5yZXFfcXVldWVfYWRkcl9sbyA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIgKyBSRVNfU0laRSkpOwotCQkJaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVxX3F1ZXVlX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIgKyBSRVNfU0laRSkpOwotCi0KLQkJCWhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLmFkZF9maXJtX29wdHMgfD0gY3B1X3RvX2xlMTYoQ09OTkVDVElPTl9QUkVGRVJFTkNFPDw0KTsKLQkJCWhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID0gQVNfTE9PUF9ET1dOOwotCQkJaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIuZGF0YSA9IDE7Ci0JCQlob3N0ZGF0YS0+aG9zdF9pZCA9IGhvc3RzOwotCi0JCQlpZiAoaXNwMngwMF9pbml0KGhvc3QpIHx8IGlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUoaG9zdCkpIHsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50IChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQkJCSAgICAgICAgc2NzaV91bnJlZ2lzdGVyKGhvc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaG9zdC0+dGhpc19pZCA9IDA7Ci0KLQkJCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGRvX2lzcDJ4MDBfaW50cl9oYW5kbGVyLCBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwgInFsb2dpY2ZjIiwgaG9zdCkpIHsKLQkJCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogaW50ZXJydXB0ICVkIGFscmVhZHkgaW4gdXNlXG4iLAotCQkJCSAgICAgICBob3N0ZGF0YS0+aG9zdF9pZCwgaG9zdC0+aXJxKTsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50IChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQkJCQlzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGhvc3QtPmlvX3BvcnQsIDB4ZmYsICJxbG9naWNmYyIpKSB7Ci0JCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IGkvbyByZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSAiCi0JCQkJICAgICAgICJpbiB1c2VcbiIsCi0JCQkJICAgICAgIGhvc3RkYXRhLT5ob3N0X2lkLCBob3N0LT5pb19wb3J0LCBob3N0LT5pb19wb3J0ICsgMHhmZik7Ci0JCQkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKLQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50IChwZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQkJCQlzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW91dHcoMHgwLCBob3N0LT5pb19wb3J0ICsgUENJX1NFTUFQSE9SRSk7Ci0JCQlvdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQkJCWlzcDJ4MDBfZW5hYmxlX2lycXMoaG9zdCk7Ci0JCQkvKiB3YWl0IGZvciB0aGUgbG9vcCB0byBjb21lIHVwICovCi0JCQlmb3IgKHdhaXRfdGltZSA9IGppZmZpZXMgKyAxMCAqIEhaOyB0aW1lX2JlZm9yZShqaWZmaWVzLCB3YWl0X3RpbWUpICYmIGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfRE9XTjspIHsKLQkJCSAgICAgICAgYmFycmllcigpOwotCQkJCWNwdV9yZWxheCgpOwotCQkJfQotCQkJaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfRE9XTikgewotCQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBsaW5rIGlzIG5vdCB1cFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJfQotCQkJaG9zdHMrKzsKLQkJCWhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmRhdGEgPSAwOwotCQl9Ci0JfQotCi0KLQkvKiB0aGlzIGJ1c3kgbG9vcCBzaG91bGQgbm90IGJlIG5lZWRlZCBidXQgdGhlIGlzcDJ4MDAgc2VlbXMgdG8gbmVlZCAKLQkgICBzb21lIHRpbWUgYmVmb3JlIHJlY29nbml6aW5nIGl0IGlzIGF0dGFjaGVkIHRvIGEgZmFicmljICovCi0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotCWlmIChob3N0cykgewotCQlmb3IgKHdhaXRfdGltZSA9IGppZmZpZXMgKyA1ICogSFo7IHRpbWVfYmVmb3JlKGppZmZpZXMsIHdhaXRfdGltZSk7KSB7Ci0JCQliYXJyaWVyKCk7Ci0JCQljcHVfcmVsYXgoKTsKLQkJfQotCX0KLSNlbmRpZgotCi0JTEVBVkUoImlzcDJ4MDBfZGV0ZWN0Iik7Ci0KLQlyZXR1cm4gaG9zdHM7Ci19Ci0KLQotc3RhdGljIGludCBpc3AyeDAwX21ha2VfcG9ydGRiKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0KLQlzaG9ydCBwYXJhbVs4XTsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0KLQlpc3AyeDAwX2Rpc2FibGVfaXJxcyhob3N0KTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCW1lbXNldChob3N0ZGF0YS0+dGVtcG1hcCwgMCwgc2l6ZW9mKGhvc3RkYXRhLT50ZW1wbWFwKSk7Ci0KLSNpZiBJU1AyeDAwX0ZBQlJJQwotCWZvciAoaSA9IDB4ODE7IGkgPCBRTE9HSUNGQ19NQVhfSUQ7IGkrKykgewotCQlwYXJhbVswXSA9IE1CT1hfUE9SVF9MT0dPVVQ7Ci0JCXBhcmFtWzFdID0gaSA8PCA4OwotCQlwYXJhbVsyXSA9IDA7Ci0JCXBhcmFtWzNdID0gMDsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCi0JCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogbG9nb3V0IGZhaWxlZCAleCAgJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBpLCBwYXJhbVswXSkpOwotCQl9Ci0JfQotI2VuZGlmCi0KLQotCXBhcmFtWzBdID0gTUJPWF9HRVRfSU5JVF9TQ1NJX0lEOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlob3N0ZGF0YS0+cG9ydF9pZCA9ICgodV9pbnQpIHBhcmFtWzNdKSA8PCAxNjsKLQkJaG9zdGRhdGEtPnBvcnRfaWQgfD0gcGFyYW1bMl07Ci0JCWhvc3RkYXRhLT50ZW1wbWFwWzBdLmxvb3BfaWQgPSBwYXJhbVsxXTsKLQkJaG9zdGRhdGEtPnRlbXBtYXBbMF0ud3duID0gaG9zdGRhdGEtPnd3bjsKLQl9Ci0JZWxzZSB7Ci0JICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBlcnJvciBnZXR0aW5nIHNjc2kgaWQuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JfQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPD1RTE9HSUNGQ19NQVhfSUQ7IGkrKykKLSAgICAgICAgICAgICAgICBob3N0ZGF0YS0+dGVtcG1hcFtpXS5sb29wX2lkID0gaG9zdGRhdGEtPnRlbXBtYXBbMF0ubG9vcF9pZDsKLSAgIAotICAgICAgICBmb3IgKGkgPSAwLCBqID0gMTsgaSA8PSBRTE9HSUNGQ19NQVhfTE9PUF9JRDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1bMF0gPSBNQk9YX0dFVF9QT1JUX05BTUU7Ci0JCXBhcmFtWzFdID0gKGkgPDwgOCkgJiAweGZmMDA7Ci0KLQkJaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JCWlmIChwYXJhbVswXSA9PSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLmxvb3BfaWQgPSBpOwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duID0gKCh1NjQpIChwYXJhbVsyXSAmIDB4ZmYpKSA8PCA1NjsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biB8PSAoKHU2NCkgKChwYXJhbVsyXSA+PiA4KSAmIDB4ZmYpKSA8PCA0ODsKLQkJCWhvc3RkYXRhLT50ZW1wbWFwW2pdLnd3biB8PSAoKHU2NCkgKHBhcmFtWzNdICYgMHhmZikpIDw8IDQwOwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAoKHBhcmFtWzNdID4+IDgpICYgMHhmZikpIDw8IDMyOwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAocGFyYW1bNl0gJiAweGZmKSkgPDwgMjQ7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpICgocGFyYW1bNl0gPj4gOCkgJiAweGZmKSkgPDwgMTY7Ci0JCQlob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gfD0gKCh1NjQpIChwYXJhbVs3XSAmIDB4ZmYpKSA8PCA4OwotCQkJaG9zdGRhdGEtPnRlbXBtYXBbal0ud3duIHw9ICgodTY0KSAoKHBhcmFtWzddID4+IDgpICYgMHhmZikpOwotCi0JCQlqKys7Ci0KLQkJfQotCX0KLQotCi0jaWYgSVNQMngwMF9GQUJSSUMKLQlpc3AyeDAwX2luaXRfZmFicmljKGhvc3QsIGhvc3RkYXRhLT50ZW1wbWFwLCBqKTsKLSNlbmRpZgotCi0JZm9yIChpID0gMDsgaSA8PSBRTE9HSUNGQ19NQVhfSUQ7IGkrKykgewotCQlpZiAoaG9zdGRhdGEtPnRlbXBtYXBbaV0ud3duICE9IGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3bikgewotCQkJZm9yIChqID0gMDsgaiA8PSBRTE9HSUNGQ19NQVhfSUQ7IGorKykgewotCQkJCWlmIChob3N0ZGF0YS0+dGVtcG1hcFtqXS53d24gPT0gaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duKSB7Ci0JCQkJCWhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgPSBob3N0ZGF0YS0+dGVtcG1hcFtqXS5sb29wX2lkOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaiA9PSBRTE9HSUNGQ19NQVhfSUQgKyAxKQotCQkJCWhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgPSBob3N0ZGF0YS0+dGVtcG1hcFswXS5sb29wX2lkOwotCi0JCQlmb3IgKGogPSAwOyBqIDw9IFFMT0dJQ0ZDX01BWF9JRDsgaisrKSB7Ci0JCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2RiW2pdLnd3biA9PSBob3N0ZGF0YS0+dGVtcG1hcFtpXS53d24gfHwgIWhvc3RkYXRhLT5wb3J0X2RiW2pdLnd3bikgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaiA9PSBRTE9HSUNGQ19NQVhfSUQgKyAxKQotCQkJCXByaW50aygicWxvZ2ljZmMlZCA6IFRvbyBtYW55IHNjc2kgZGV2aWNlcywgbm8gbW9yZSByb29tIGluIHBvcnQgbWFwLlxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJaWYgKCFob3N0ZGF0YS0+cG9ydF9kYltqXS53d24pIHsKLQkJCQlob3N0ZGF0YS0+cG9ydF9kYltqXS5sb29wX2lkID0gaG9zdGRhdGEtPnRlbXBtYXBbaV0ubG9vcF9pZDsKLQkJCQlob3N0ZGF0YS0+cG9ydF9kYltqXS53d24gPSBob3N0ZGF0YS0+dGVtcG1hcFtpXS53d247Ci0JCQl9Ci0JCX0gZWxzZQotCQkJaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCA9IGhvc3RkYXRhLT50ZW1wbWFwW2ldLmxvb3BfaWQ7Ci0KLQl9Ci0KLQlpc3AyeDAwX2VuYWJsZV9pcnFzKGhvc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotI2lmIElTUDJ4MDBfRkFCUklDCi0KLSNkZWZpbmUgRkFCUklDX1BPUlQgICAgICAgICAgMHg3ZQotI2RlZmluZSBGQUJSSUNfQ09OVFJPTExFUiAgICAweDdmCi0jZGVmaW5lIEZBQlJJQ19TTlMgICAgICAgICAgIDB4ODAKLQotaW50IGlzcDJ4MDBfaW5pdF9mYWJyaWMoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IGlkX25hbWVfbWFwICpwb3J0X2RiLCBpbnQgY3VyX3Njc2lfaWQpCi17Ci0KLQl1X3Nob3J0IHBhcmFtWzhdOwotCXU2NCB3d247Ci0JaW50IGRvbmUgPSAwOwotCXVfc2hvcnQgbG9vcF9pZCA9IDB4ODE7Ci0JdV9zaG9ydCBzY3NpX2lkID0gY3VyX3Njc2lfaWQ7Ci0JdV9pbnQgcG9ydF9pZDsKLQlzdHJ1Y3Qgc25zX2NiICpyZXE7Ci0JdV9jaGFyICpzbnNfcmVzcG9uc2U7Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCQotCURFQlVHX0ZBQlJJQyhwcmludGsoInFsb2dpY2ZjJWQgOiBDaGVja2luZyBmb3IgYSBmYWJyaWMuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCXBhcmFtWzBdID0gTUJPWF9HRVRfUE9SVF9OQU1FOwotCXBhcmFtWzFdID0gKHUxNilGQUJSSUNfUE9SVCA8PCA4OwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogZmFicmljIGNoZWNrIHJlc3VsdCAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBhcmFtWzBdKSk7Ci0JCXJldHVybiAwOwotCX0KLQlwcmludGsoInFsb2dpY2ZjJWQgOiBGYWJyaWMgZm91bmQuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0KLQlyZXEgPSAoc3RydWN0IHNuc19jYiAqKXBjaV9hbGxvY19jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBzaXplb2YoKnJlcSkgKyA2MDgsICZidXNhZGRyKTsKLQkKLQlpZiAoIXJlcSl7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IENvdWxkIG5vdCBhbGxvY2F0ZSBETUEgcmVzb3VyY2VzIGZvciBmYWJyaWMgaW5pdGlhbGl6YXRpb25cbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXNuc19yZXNwb25zZSA9ICh1X2NoYXIgKikocmVxICsgMSk7Ci0KLQlpZiAoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0xPT1BfUE9SVERCKXsKLQkgICAgICAgIG1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7Ci0JCi0JCXJlcS0+bGVuID0gY3B1X3RvX2xlMTYoOCk7Ci0JCXJlcS0+cmVzcG9uc2VfbG93ID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2xvMzIoYnVzYWRkciArIHNpemVvZigqcmVxKSkpOwotCQlyZXEtPnJlc3BvbnNlX2hpZ2ggPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyICsgc2l6ZW9mKCpyZXEpKSk7Ci0JCXJlcS0+c3ViX2xlbiA9IGNwdV90b19sZTE2KDIyKTsKLQkJcmVxLT5kYXRhWzBdID0gMHgxNzsKLQkJcmVxLT5kYXRhWzFdID0gMHgwMjsKLQkJcmVxLT5kYXRhWzhdID0gKHVfY2hhcikgKGhvc3RkYXRhLT5wb3J0X2lkICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVs5XSA9ICh1X2NoYXIpIChob3N0ZGF0YS0+cG9ydF9pZCA+PiA4ICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVsxMF0gPSAodV9jaGFyKSAoaG9zdGRhdGEtPnBvcnRfaWQgPj4gMTYgJiAweGZmKTsKLQkJcmVxLT5kYXRhWzEzXSA9IDB4MDE7Ci0JCXBhcmFtWzBdID0gTUJPWF9TRU5EX1NOUzsKLQkJcGFyYW1bMV0gPSAzMDsKLQkJcGFyYW1bMl0gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bM10gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKTsKLQkJcGFyYW1bNl0gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bN10gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKTsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0JCi0JCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpCi0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogZXJyb3Igc2VuZGluZyBSRkMtNFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCX0KLQotCXBvcnRfaWQgPSBob3N0ZGF0YS0+cG9ydF9pZDsKLQl3aGlsZSAoIWRvbmUpIHsKLQkJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKLQotCQlyZXEtPmxlbiA9IGNwdV90b19sZTE2KDMwNCk7Ci0JCXJlcS0+cmVzcG9uc2VfbG93ID0gY3B1X3RvX2xlMzIocGNpNjRfZG1hX2xvMzIoYnVzYWRkciArIHNpemVvZigqcmVxKSkpOwotCQlyZXEtPnJlc3BvbnNlX2hpZ2ggPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyICsgc2l6ZW9mKCpyZXEpKSk7Ci0JCXJlcS0+c3ViX2xlbiA9IGNwdV90b19sZTE2KDYpOwotCQlyZXEtPmRhdGFbMF0gPSAweDAwOwotCQlyZXEtPmRhdGFbMV0gPSAweDAxOwotCQlyZXEtPmRhdGFbOF0gPSAodV9jaGFyKSAocG9ydF9pZCAmIDB4ZmYpOwotCQlyZXEtPmRhdGFbOV0gPSAodV9jaGFyKSAocG9ydF9pZCA+PiA4ICYgMHhmZik7Ci0JCXJlcS0+ZGF0YVsxMF0gPSAodV9jaGFyKSAocG9ydF9pZCA+PiAxNiAmIDB4ZmYpOwotCi0JCXBhcmFtWzBdID0gTUJPWF9TRU5EX1NOUzsKLQkJcGFyYW1bMV0gPSAxNDsKLQkJcGFyYW1bMl0gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bM10gPSBwY2k2NF9kbWFfbG8zMihidXNhZGRyKTsKLQkJcGFyYW1bNl0gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKSA+PiAxNjsKLQkJcGFyYW1bN10gPSBwY2k2NF9kbWFfaGkzMihidXNhZGRyKTsKLQotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQkJREVCVUdfRkFCUklDKHByaW50aygicWxvZ2ljZmMlZCA6IGZvdW5kIG5vZGUgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHNuc19yZXNwb25zZVsyMF0sIHNuc19yZXNwb25zZVsyMV0sIHNuc19yZXNwb25zZVsyMl0sIHNuc19yZXNwb25zZVsyM10sIHNuc19yZXNwb25zZVsyNF0sIHNuc19yZXNwb25zZVsyNV0sIHNuc19yZXNwb25zZVsyNl0sIHNuc19yZXNwb25zZVsyN10pKTsKLQkJCURFQlVHX0ZBQlJJQyhwcmludGsoIiAgcG9ydCBpZDogJTAyeCUwMnglMDJ4XG4iLCBzbnNfcmVzcG9uc2VbMTddLCBzbnNfcmVzcG9uc2VbMThdLCBzbnNfcmVzcG9uc2VbMTldKSk7Ci0JCQlwb3J0X2lkID0gKCh1X2ludCkgc25zX3Jlc3BvbnNlWzE3XSkgPDwgMTY7Ci0JCQlwb3J0X2lkIHw9ICgodV9pbnQpIHNuc19yZXNwb25zZVsxOF0pIDw8IDg7Ci0JCQlwb3J0X2lkIHw9ICgodV9pbnQpIHNuc19yZXNwb25zZVsxOV0pOwotCQkJd3duID0gKCh1NjQpIHNuc19yZXNwb25zZVsyMF0pIDw8IDU2OwotCQkJd3duIHw9ICgodTY0KSBzbnNfcmVzcG9uc2VbMjFdKSA8PCA0ODsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzIyXSkgPDwgNDA7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyM10pIDw8IDMyOwotCQkJd3duIHw9ICgodTY0KSBzbnNfcmVzcG9uc2VbMjRdKSA8PCAyNDsKLQkJCXd3biB8PSAoKHU2NCkgc25zX3Jlc3BvbnNlWzI1XSkgPDwgMTY7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyNl0pIDw8IDg7Ci0JCQl3d24gfD0gKCh1NjQpIHNuc19yZXNwb25zZVsyN10pOwotCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2lkID4+IDggIT0gcG9ydF9pZCA+PiA4KSB7Ci0JCQkJREVCVUdfRkFCUklDKHByaW50aygicWxvZ2ljZmMlZCA6IGFkZGluZyBhIGZhYnJpYyBwb3J0OiAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBvcnRfaWQpKTsKLQkJCQlwYXJhbVswXSA9IE1CT1hfUE9SVF9MT0dJTjsKLQkJCQlwYXJhbVsxXSA9IGxvb3BfaWQgPDwgODsKLQkJCQlwYXJhbVsyXSA9ICh1X3Nob3J0KSAocG9ydF9pZCA+PiAxNik7Ci0JCQkJcGFyYW1bM10gPSAodV9zaG9ydCkgKHBvcnRfaWQpOwotCi0JCQkJaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JCQkJaWYgKHBhcmFtWzBdID09IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQkJCQlwb3J0X2RiW3Njc2lfaWRdLnd3biA9IHd3bjsKLQkJCQkJcG9ydF9kYltzY3NpX2lkXS5sb29wX2lkID0gbG9vcF9pZDsKLQkJCQkJbG9vcF9pZCsrOwotCQkJCQlzY3NpX2lkKys7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKCJxbG9naWNmYyVkIDogRXJyb3IgcGVyZm9ybWluZyBwb3J0IGxvZ2luICV4XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcGFyYW1bMF0pOwotCQkJCQlERUJVR19GQUJSSUMocHJpbnRrKCJxbG9naWNmYyVkIDogbG9vcF9pZDogJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBsb29wX2lkKSk7Ci0JCQkJCXBhcmFtWzBdID0gTUJPWF9QT1JUX0xPR09VVDsKLQkJCQkJcGFyYW1bMV0gPSBsb29wX2lkIDw8IDg7Ci0JCQkJCXBhcmFtWzJdID0gMDsKLQkJCQkJcGFyYW1bM10gPSAwOwotCi0JCQkJCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQkJCQkJCi0JCQkJfQotCi0JCQl9Ci0JCQlpZiAoaG9zdGRhdGEtPnBvcnRfaWQgPT0gcG9ydF9pZCkKLQkJCQlkb25lID0gMTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygicWxvZ2ljZmMlZCA6IEdldCBBbGwgTmV4dCBmYWlsZWQgJXguXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgcGFyYW1bMF0pOwotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChob3N0ZGF0YS0+cGNpX2Rldiwgc2l6ZW9mKCpyZXEpICsgNjA4LCByZXEsIGJ1c2FkZHIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBzaXplb2YoKnJlcSkgKyA2MDgsIHJlcSwgYnVzYWRkcik7Ci0JcmV0dXJuIDE7Ci19Ci0KLSNlbmRpZgkJCQkvKiBJU1AyeDAwX0ZBQlJJQyAqLwotCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCWRtYV9hZGRyX3QgYnVzYWRkcjsKLQotCUVOVEVSKCJpc3AyeDAwX3JlbGVhc2UiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0Jb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfQ1RMKTsKLQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwotCi0JcmVsZWFzZV9yZWdpb24oaG9zdC0+aW9fcG9ydCwgMHhmZik7Ci0KLQlidXNhZGRyID0gcGNpNjRfZG1hX2J1aWxkKGxlMzJfdG9fY3B1KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLnJlc19xdWV1ZV9hZGRyX2hpZ2gpLAotCQkJCSAgbGUzMl90b19jcHUoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2sucmVzX3F1ZXVlX2FkZHJfbG8pKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LCBSRVNfU0laRSArIFJFUV9TSVpFLCBob3N0ZGF0YS0+cmVzLCBidXNhZGRyKTsKLQotCUxFQVZFKCJpc3AyeDAwX3JlbGVhc2UiKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBjb25zdCBjaGFyICppc3AyeDAwX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlzdGF0aWMgY2hhciBidWZbODBdOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQlFTlRFUigiaXNwMngwMF9pbmZvIik7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQlzcHJpbnRmKGJ1ZiwKLQkJIlFMb2dpYyBJU1AlMDR4IFNDU0kgb24gUENJIGJ1cyAlMDJ4IGRldmljZSAlMDJ4IGlycSAlZCBiYXNlIDB4JWx4IiwKLQkJaG9zdGRhdGEtPnBjaV9kZXYtPmRldmljZSwgaG9zdGRhdGEtPnBjaV9kZXYtPmJ1cy0+bnVtYmVyLCBob3N0ZGF0YS0+cGNpX2Rldi0+ZGV2Zm4sIGhvc3QtPmlycSwKLQkJaG9zdC0+aW9fcG9ydCk7Ci0KLQotCUxFQVZFKCJpc3AyeDAwX2luZm8iKTsKLQotCXJldHVybiBidWY7Ci19Ci0KLQotLyoKLSAqIFRoZSBtaWRkbGUgU0NTSSBsYXllciBlbnN1cmVzIHRoYXQgcXVldWVjb21tYW5kIG5ldmVyIGdldHMgaW52b2tlZAotICogY29uY3VycmVudGx5IHdpdGggaXRzZWxmIG9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAodGhvdWdoIHRoZQotICogaW50ZXJydXB0IGhhbmRsZXIgbWF5IGNhbGwgdGhpcyByb3V0aW5lIGFzIHBhcnQgb2YKLSAqIHJlcXVlc3QtY29tcGxldGlvbiBoYW5kbGluZykuCi0gKi8KLXN0YXRpYyBpbnQgaXNwMngwMF9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICogQ21uZCwgdm9pZCAoKmRvbmUpIChTY3NpX0NtbmQgKikpCi17Ci0JaW50IGksIHNnX2NvdW50LCBuLCBudW1fZnJlZTsKLQl1X2ludCBpbl9wdHIsIG91dF9wdHI7Ci0Jc3RydWN0IGRhdGFzZWcgKmRzOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0Jc3RydWN0IENvbW1hbmRfRW50cnkgKmNtZDsKLQlzdHJ1Y3QgQ29udGludWF0aW9uX0VudHJ5ICpjb250OwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCi0JRU5URVIoImlzcDJ4MDBfcXVldWVjb21tYW5kIik7Ci0KLQlob3N0ID0gQ21uZC0+ZGV2aWNlLT5ob3N0OwotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCUNtbmQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0KLQlERUJVRyhpc3AyeDAwX3ByaW50X3Njc2lfY21kKENtbmQpKTsKLQotCWlmIChob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSAmIEFTX1JFRE9fRkFCUklDX1BPUlREQiB8fCBob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSAmIEFTX1JFRE9fTE9PUF9QT1JUREIpIHsKLQkJaXNwMngwMF9tYWtlX3BvcnRkYihob3N0KTsKLQkJaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPSBBU19MT09QX0dPT0Q7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IFBvcnQgRGF0YWJhc2VcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJZm9yIChpID0gMDsgaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duICE9IDA7IGkrKykgewotCQkJcHJpbnRrKCJ3d246ICUwOHglMDh4ICBzY3NpX2lkOiAleCAgbG9vcF9pZDogIiwgKHVfaW50KSAoaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duID4+IDMyKSwgKHVfaW50KSBob3N0ZGF0YS0+cG9ydF9kYltpXS53d24sIGkpOwotCQkJaWYgKGhvc3RkYXRhLT5wb3J0X2RiW2ldLmxvb3BfaWQgIT0gaG9zdGRhdGEtPnBvcnRfZGJbMF0ubG9vcF9pZCB8fCBpID09IDApCi0JCQkgICAgICAgIHByaW50aygiJXgiLCBob3N0ZGF0YS0+cG9ydF9kYltpXS5sb29wX2lkKTsKLQkJCWVsc2UKLQkJCSAgICAgICAgcHJpbnRrKCJOb3QgQXZhaWxhYmxlIik7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLQl9Ci0JaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0ZJUk1XQVJFX0RFQUQpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogVGhlIGZpcm13YXJlIGlzIGRlYWQsIGp1c3QgcmV0dXJuLlxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlob3N0LT5tYXhfaWQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlvdXRfcHRyID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaW5fcHRyID0gaG9zdGRhdGEtPnJlcV9pbl9wdHI7Ci0KLQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiByZXF1ZXN0IHF1ZXVlIGRlcHRoICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwKLQkJICAgICBSRVFfUVVFVUVfREVQVEgoaW5fcHRyLCBvdXRfcHRyKSkpOwotCi0JY21kID0gKHN0cnVjdCBDb21tYW5kX0VudHJ5ICopICZob3N0ZGF0YS0+cmVxW2luX3B0cipRVUVVRV9FTlRSWV9MRU5dOwotCWluX3B0ciA9IChpbl9wdHIgKyAxKSAmIFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47Ci0JaWYgKGluX3B0ciA9PSBvdXRfcHRyKSB7Ci0JCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHJlcXVlc3QgcXVldWUgb3ZlcmZsb3dcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoaG9zdGRhdGEtPnNlbmRfbWFya2VyKSB7Ci0JCXN0cnVjdCBNYXJrZXJfRW50cnkgKm1hcmtlcjsKLQotCQlUUkFDRSgicXVldWUgbWFya2VyIiwgaW5fcHRyLCAwKTsKLQotCQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiBhZGRpbmcgbWFya2VyIGVudHJ5XG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCQltYXJrZXIgPSAoc3RydWN0IE1hcmtlcl9FbnRyeSAqKSBjbWQ7Ci0JCW1lbXNldChtYXJrZXIsIDAsIHNpemVvZihzdHJ1Y3QgTWFya2VyX0VudHJ5KSk7Ci0KLQkJbWFya2VyLT5oZHIuZW50cnlfdHlwZSA9IEVOVFJZX01BUktFUjsKLQkJbWFya2VyLT5oZHIuZW50cnlfY250ID0gMTsKLQkJbWFya2VyLT5tb2RpZmllciA9IFNZTkNfQUxMOwotCi0JCWhvc3RkYXRhLT5zZW5kX21hcmtlciA9IDA7Ci0KLQkJaWYgKCgoaW5fcHRyICsgMSkgJiBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKSA9PSBvdXRfcHRyKSB7Ci0JCQlvdXR3KGluX3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQkJCWhvc3RkYXRhLT5yZXFfaW5fcHRyID0gaW5fcHRyOwotCQkJREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogcmVxdWVzdCBxdWV1ZSBvdmVyZmxvd1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWNtZCA9IChzdHJ1Y3QgQ29tbWFuZF9FbnRyeSAqKSAmaG9zdGRhdGEtPnJlcVtpbl9wdHIqUVVFVUVfRU5UUllfTEVOXTsKLQkJaW5fcHRyID0gKGluX3B0ciArIDEpICYgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQl9Ci0JVFJBQ0UoInF1ZXVlIGNvbW1hbmQiLCBpbl9wdHIsIENtbmQpOwotCi0JbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBDb21tYW5kX0VudHJ5KSk7Ci0KLQkvKiBmaW5kIGEgZnJlZSBoYW5kbGUgbWFwcGluZyBzbG90ICovCi0JZm9yIChpID0gaW5fcHRyOyBpICE9IChpbl9wdHIgLSAxKSAmJiBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV07IGkgPSAoKGkgKyAxKSAlIChRTE9HSUNGQ19SRVFfUVVFVUVfTEVOICsgMSkpKTsKLQotCWlmICghaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldKSB7Ci0JCWNtZC0+aGFuZGxlID0gY3B1X3RvX2xlMzIoaSk7Ci0JCWhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXSA9IENtbmQ7Ci0JCWhvc3RkYXRhLT5oYW5kbGVfc2VyaWFsc1tpXSA9IENtbmQtPnNlcmlhbF9udW1iZXI7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbm8gaGFuZGxlIHNsb3RzLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLlxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlwcmludGsoImhvc3RkYXRhLT5xdWV1ZWQgaXMgJXgsIGluX3B0cjogJXhcbiIsIGhvc3RkYXRhLT5xdWV1ZWQsIGluX3B0cik7Ci0JCWZvciAoaSA9IDA7IGkgPD0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsgaSsrKXsKLQkJCWlmICghaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldKXsKLQkJCQlwcmludGsoInNsb3QgJWQgaGFzICVwXG4iLCBpLCBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0pOwotCQkJfQotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCWNtZC0+aGRyLmVudHJ5X3R5cGUgPSBFTlRSWV9DT01NQU5EOwotCWNtZC0+aGRyLmVudHJ5X2NudCA9IDE7Ci0JY21kLT50YXJnZXRfbHVuID0gQ21uZC0+ZGV2aWNlLT5sdW47Ci0JY21kLT5leHBhbmRlZF9sdW4gPSBjcHVfdG9fbGUxNihDbW5kLT5kZXZpY2UtPmx1bik7Ci0jaWYgSVNQMngwMF9QT1JUREIKLQljbWQtPnRhcmdldF9pZCA9IGhvc3RkYXRhLT5wb3J0X2RiW0NtbmQtPmRldmljZS0+aWRdLmxvb3BfaWQ7Ci0jZWxzZQotCWNtZC0+dGFyZ2V0X2lkID0gQ21uZC0+dGFyZ2V0OwotI2VuZGlmCi0JY21kLT50b3RhbF9ieXRlX2NudCA9IGNwdV90b19sZTMyKENtbmQtPnJlcXVlc3RfYnVmZmxlbik7Ci0JY21kLT50aW1lX291dCA9IDA7Ci0JbWVtY3B5KGNtZC0+Y2RiLCBDbW5kLT5jbW5kLCBDbW5kLT5jbWRfbGVuKTsKLQotCWlmIChDbW5kLT51c2Vfc2cpIHsKLQkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIENtbmQtPnJlcXVlc3RfYnVmZmVyOwotCQlzZ19jb3VudCA9IHBjaV9tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsIHNnLCBDbW5kLT51c2Vfc2csIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KHNnX2NvdW50KTsKLQkJZHMgPSBjbWQtPmRhdGFzZWc7Ci0JCS8qIGZpbGwgaW4gZmlyc3QgdHdvIHNnIGVudHJpZXM6ICovCi0JCW4gPSBzZ19jb3VudDsKLQkJaWYgKG4gPiBEQVRBU0VHU19QRVJfQ09NTUFORCkKLQkJCW4gPSBEQVRBU0VHU19QRVJfQ09NTUFORDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlkc1tpXS5kX2Jhc2UgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCWRzW2ldLmRfYmFzZV9oaSA9IGNwdV90b19sZTMyKHBjaTY0X2RtYV9oaTMyKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotCQkJZHNbaV0uZF9jb3VudCA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKLQkJCSsrc2c7Ci0JCX0KLQkJc2dfY291bnQgLT0gREFUQVNFR1NfUEVSX0NPTU1BTkQ7Ci0KLQkJd2hpbGUgKHNnX2NvdW50ID4gMCkgewotCQkJKytjbWQtPmhkci5lbnRyeV9jbnQ7Ci0JCQljb250ID0gKHN0cnVjdCBDb250aW51YXRpb25fRW50cnkgKikKLQkJCSAgICAmaG9zdGRhdGEtPnJlcVtpbl9wdHIqUVVFVUVfRU5UUllfTEVOXTsKLQkJCW1lbXNldChjb250LCAwLCBzaXplb2Yoc3RydWN0IENvbnRpbnVhdGlvbl9FbnRyeSkpOwotCQkJaW5fcHRyID0gKGluX3B0ciArIDEpICYgUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQkJCWlmIChpbl9wdHIgPT0gb3V0X3B0cikgewotCQkJCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHVuZXhwZWN0ZWQgcmVxdWVzdCBxdWV1ZSBvdmVyZmxvd1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJCVRSQUNFKCJxdWV1ZSBjb250aW51YXRpb24iLCBpbl9wdHIsIDApOwotCQkJY29udC0+aGRyLmVudHJ5X3R5cGUgPSBFTlRSWV9DT05USU5VQVRJT047Ci0JCQlkcyA9IGNvbnQtPmRhdGFzZWc7Ci0JCQluID0gc2dfY291bnQ7Ci0JCQlpZiAobiA+IERBVEFTRUdTX1BFUl9DT05UKQotCQkJCW4gPSBEQVRBU0VHU19QRVJfQ09OVDsKLQkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKLQkJCQlkc1tpXS5kX2Jhc2UgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCQlkc1tpXS5kX2Jhc2VfaGkgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihzZ19kbWFfYWRkcmVzcyhzZykpKTsKLQkJCQlkc1tpXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwotCQkJCSsrc2c7Ci0JCQl9Ci0JCQlzZ19jb3VudCAtPSBuOwotCQl9Ci0JfSBlbHNlIGlmIChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4gJiYgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gIT0gUENJX0RNQV9OT05FKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKENtbmQtPnJlcXVlc3RfYnVmZmVyKTsKLQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShDbW5kLT5yZXF1ZXN0X2J1ZmZlcik7Ci0JCWRtYV9hZGRyX3QgYnVzYWRkciA9IHBjaV9tYXBfcGFnZShob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJCSAgcGFnZSwgb2Zmc2V0LAotCQkJCQkJICBDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4sCi0JCQkJCQkgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJQ21uZC0+U0NwLmRtYV9oYW5kbGUgPSBidXNhZGRyOwotCi0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2UgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfbG8zMihidXNhZGRyKSk7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2VfaGkgPSBjcHVfdG9fbGUzMihwY2k2NF9kbWFfaGkzMihidXNhZGRyKSk7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoQ21uZC0+cmVxdWVzdF9idWZmbGVuKTsKLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KDEpOwotCX0gZWxzZSB7Ci0JCWNtZC0+ZGF0YXNlZ1swXS5kX2Jhc2UgPSAwOwotCQljbWQtPmRhdGFzZWdbMF0uZF9iYXNlX2hpID0gMDsKLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KDEpOyAvKiBTaG91bGRuJ3QgdGhpcyBiZSAwPyAqLwotCX0KLQotCWlmIChDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQljbWQtPmNvbnRyb2xfZmxhZ3MgPSBjcHVfdG9fbGUxNihDRkxBR19XUklURSk7Ci0JZWxzZSAKLQkJY21kLT5jb250cm9sX2ZsYWdzID0gY3B1X3RvX2xlMTYoQ0ZMQUdfUkVBRCk7Ci0KLQlpZiAoQ21uZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGhvc3RkYXRhLT50YWdfYWdlc1tDbW5kLT5kZXZpY2UtPmlkXSArICgyICogSVNQX1RJTUVPVVQpKSkgewotCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX09SREVSRURfVEFHKTsKLQkJCWhvc3RkYXRhLT50YWdfYWdlc1tDbW5kLT5kZXZpY2UtPmlkXSA9IGppZmZpZXM7Ci0JCX0gZWxzZQotCQkJc3dpdGNoIChDbW5kLT50YWcpIHsKLQkJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX0hFQURfVEFHKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX09SREVSRURfVEFHKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX1NJTVBMRV9UQUcpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qCi0JICogVEVTVF9VTklUX1JFQURZIGNvbW1hbmRzIGZyb20gc2NzaV9zY2FuIHdpbGwgZmFpbCBkdWUgdG8gIm92ZXJsYXBwZWQKLQkgKiBjb21tYW5kcyBhdHRlbXB0ZWQiIHVubGVzcyB3ZSBzZXR1cCBhdCBsZWFzdCBhIHNpbXBsZSBxdWV1ZSAobWlkbGF5ZXIgCi0JICogd2lsbCBlbWJlbGlzaCB0aGlzIG9uY2UgaXQgY2FuIGRvIGFuIElOUVVJUlkgY29tbWFuZCB0byB0aGUgZGV2aWNlKQotCSAqLwotCWVsc2UKLQkJY21kLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KENGTEFHX1NJTVBMRV9UQUcpOwotCW91dHcoaW5fcHRyLCBob3N0LT5pb19wb3J0ICsgTUJPWDQpOwotCWhvc3RkYXRhLT5yZXFfaW5fcHRyID0gaW5fcHRyOwotCi0JaG9zdGRhdGEtPnF1ZXVlZCsrOwotCi0JbnVtX2ZyZWUgPSBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOIC0gUkVRX1FVRVVFX0RFUFRIKGluX3B0ciwgb3V0X3B0cik7Ci0JbnVtX2ZyZWUgPSAobnVtX2ZyZWUgPiAyKSA/IG51bV9mcmVlIC0gMiA6IDA7Ci0gICAgICAgaG9zdC0+Y2FuX3F1ZXVlID0gaG9zdC0+aG9zdF9idXN5ICsgbnVtX2ZyZWU7Ci0JaWYgKGhvc3QtPmNhbl9xdWV1ZSA+IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pCi0JCWhvc3QtPmNhbl9xdWV1ZSA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47Ci0JaG9zdC0+c2dfdGFibGVzaXplID0gUUxPR0lDRkNfTUFYX1NHKG51bV9mcmVlKTsKLQotCUxFQVZFKCJpc3AyeDAwX3F1ZXVlY29tbWFuZCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyogd2UgaGF2ZSByZWNlaXZlZCBhbiBldmVudCwgc3VjaCBhcyBhIGxpcCBvciBhbiBSU0NOLCB3aGljaCBtYXkgbWVhbiB0aGF0Ci0gKiBvdXIgcG9ydCBkYXRhYmFzZSBpcyBpbmNvcnJlY3Qgc28gdGhlIHBvcnQgZGF0YWJhc2UgbXVzdCBiZSByZWNyZWF0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHJlZG9fcG9ydF9kYih1bnNpZ25lZCBsb25nIGFyZykKLXsKLQotICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICogaG9zdCA9IChzdHJ1Y3QgU2NzaV9Ib3N0ICopIGFyZzsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqIGhvc3RkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQlob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID0gMDsKLQlkZWxfdGltZXIoJmhvc3RkYXRhLT5leHBsb3JlX3RpbWVyKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19GQUJSSUNfUE9SVERCIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19MT09QX1BPUlREQikgewotCQlpc3AyeDAwX21ha2VfcG9ydGRiKGhvc3QpOwotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBQb3J0IERhdGFiYXNlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCWZvciAoaSA9IDA7IGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3biAhPSAwOyBpKyspIHsKLQkJCXByaW50aygid3duOiAlMDh4JTA4eCAgc2NzaV9pZDogJXggIGxvb3BfaWQ6ICIsICh1X2ludCkgKGhvc3RkYXRhLT5wb3J0X2RiW2ldLnd3biA+PiAzMiksICh1X2ludCkgaG9zdGRhdGEtPnBvcnRfZGJbaV0ud3duLCBpKTsKLQkJCWlmIChob3N0ZGF0YS0+cG9ydF9kYltpXS5sb29wX2lkICE9IGhvc3RkYXRhLT5wb3J0X2RiWzBdLmxvb3BfaWQgfHwgaSA9PSAwKQotCQkJICAgICAgICBwcmludGsoIiV4IiwgaG9zdGRhdGEtPnBvcnRfZGJbaV0ubG9vcF9pZCk7Ci0JCQllbHNlCi0JCQkgICAgICAgIHByaW50aygiTm90IEF2YWlsYWJsZSIpOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0JCQotCSAgICAgICAgZm9yIChpID0gMDsgaSA8IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47IGkrKyl7IAotCQkgICAgICAgIGlmIChob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0gJiYgKGhvc3RkYXRhLT5wb3J0X2RiW2hvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXS0+ZGV2aWNlLT5pZF0ubG9vcF9pZCA+IFFMT0dJQ0ZDX01BWF9MT09QX0lEIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19MT09QX1BPUlREQikpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdGRhdGEtPnBvcnRfZGJbaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldLT5kZXZpY2UtPmlkXS5sb29wX2lkICE9IGhvc3RkYXRhLT5wb3J0X2RiWzBdLmxvb3BfaWQpewotCQkJCQlTY3NpX0NtbmQgKkNtbmQgPSBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV07Ci0KLQkJCQkJIGlmIChDbW5kLT51c2Vfc2cpCi0JCQkJCQkgcGNpX3VubWFwX3NnKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJCSAgICAgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilDbW5kLT5idWZmZXIsCi0JCQkJCQkJICAgICAgQ21uZC0+dXNlX3NnLAotCQkJCQkJCSAgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJCQkJIGVsc2UgaWYgKENtbmQtPnJlcXVlc3RfYnVmZmxlbiAmJgotCQkJCQkJICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBQQ0lfRE1BX05PTkUpIHsKLQkJCQkJCSBwY2lfdW5tYXBfcGFnZShob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJCQkJQ21uZC0+U0NwLmRtYV9oYW5kbGUsCi0JCQkJCQkJCUNtbmQtPnJlcXVlc3RfYnVmZmxlbiwKLQkJCQkJCQkJQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCQkgfQotCi0JCQkJCSBob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaV0tPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwotCi0JCQkJCSBpZiAoaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldLT5zY3NpX2RvbmUpewotCQkJCQkgICAoKmhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXS0+c2NzaV9kb25lKSAoaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldKTsKLQkJCQkJIH0KLQkJCQkJIGVsc2UgcHJpbnRrKCJxbG9naWNmYyVkIDogZG9uZSBpcyBudWxsP1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJCQkgaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2ldID0gTlVMTDsKLQkJCQkJIGhvc3RkYXRhLT5oYW5kbGVfc2VyaWFsc1tpXSA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0xPT1BfR09PRDsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi19Ci0KLSNkZWZpbmUgQVNZTkNfRVZFTlRfSU5URVJSVVBUCTB4MDEKLQotaXJxcmV0dXJuX3QgZG9faXNwMngwMF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlpc3AyeDAwX2ludHJfaGFuZGxlcihpcnEsIGRldl9pZCwgcmVncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotdm9pZCBpc3AyeDAwX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCVNjc2lfQ21uZCAqQ21uZDsKLQlzdHJ1Y3QgU3RhdHVzX0VudHJ5ICpzdHM7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9pZDsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JdV9pbnQgaW5fcHRyLCBvdXRfcHRyLCBoYW5kbGUsIG51bV9mcmVlOwotCXVfc2hvcnQgc3RhdHVzOwotCi0JRU5URVJfSU5UUigiaXNwMngwMF9pbnRyX2hhbmRsZXIiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JREVCVUdfSU5UUihwcmludGsoInFsb2dpY2ZjJWQgOiBpbnRlcnJ1cHQgb24gbGluZSAlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIGlycSkpOwotCi0JaWYgKCEoaW53KGhvc3QtPmlvX3BvcnQgKyBQQ0lfSU5URVJfU1RTKSAmIDB4MDgpKSB7Ci0JCS8qIHNwdXJpb3VzIGludGVycnVwdHMgY2FuIGhhcHBlbiBsZWdhbGx5ICovCi0JCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNmYyVkIDogZ290IHNwdXJpb3VzIGludGVycnVwdFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJcmV0dXJuOwotCX0KLQlpbl9wdHIgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQlvdXRfcHRyID0gaG9zdGRhdGEtPnJlc19vdXRfcHRyOwotCi0JaWYgKChpbncoaG9zdC0+aW9fcG9ydCArIFBDSV9TRU1BUEhPUkUpICYgQVNZTkNfRVZFTlRfSU5URVJSVVBUKSkgewotCQlzdGF0dXMgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gwKTsKLQotCQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggY29tcGxldGlvbiBzdGF0dXM6ICV4XG4iLAotCQkJCSAgaG9zdGRhdGEtPmhvc3RfaWQsIHN0YXR1cykpOwotCi0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgTE9PUF9VUDoKLQkJY2FzZSBQT0lOVF9UT19QT0lOVF9VUDoKLQkJICAgICAgICBwcmludGsoInFsb2dpY2ZjJWQgOiBMaW5rIGlzIFVwXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX1JFRE9fRkFCUklDX1BPUlREQiB8IEFTX1JFRE9fTE9PUF9QT1JUREI7Ci0JCQlicmVhazsKLQkJY2FzZSBMT09QX0RPV046Ci0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogTGluayBpcyBEb3duXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0xPT1BfRE9XTjsKLQkJCWJyZWFrOwotCQljYXNlIENPTk5FQ1RJT05fTU9ERToKLQkJICAgICAgICBwcmludGsoInJlY2VpdmVkIENPTk5FQ1RJT05fTU9ERSBpcnEgJXhcbiIsIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDEpKTsKLQkJCWJyZWFrOwotCQljYXNlIENIQU5HRV9OT1RJRklDQVRJT046Ci0JCSAgICAgICAgcHJpbnRrKCJxbG9naWNmYyVkIDogUlNDTiBSZWNlaXZlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfR09PRCkKLQkJCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX1JFRE9fRkFCUklDX1BPUlREQjsKLQkJCWJyZWFrOwkJICAgICAgICAKLQkJY2FzZSBMSVBfT0NDVVJSRUQ6Ci0JCWNhc2UgTElQX1JFQ0VJVkVEOgotCQkgICAgICAgIHByaW50aygicWxvZ2ljZmMlZCA6IExvb3AgUmVpbml0aWFsaXplZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQkJaWYgKGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0xPT1BfR09PRCkKLQkJCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX1JFRE9fTE9PUF9QT1JUREI7Ci0JCQlicmVhazsKLQkJY2FzZSBTWVNURU1fRVJST1I6Ci0JCQlwcmludGsoInFsb2dpY2ZjJWQgOiBUaGUgZmlybXdhcmUganVzdCBjaG9rZWQuXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1NJX0NPTU1BTkRfQ09NUExFVEU6Ci0JCQloYW5kbGUgPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gxKSB8IChpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gyKSA8PCAxNik7Ci0JCQlDbW5kID0gaG9zdGRhdGEtPmhhbmRsZV9wdHJzW2hhbmRsZV07Ci0JCQlob3N0ZGF0YS0+aGFuZGxlX3B0cnNbaGFuZGxlXSA9IE5VTEw7Ci0JCQlob3N0ZGF0YS0+aGFuZGxlX3NlcmlhbHNbaGFuZGxlXSA9IDA7Ci0JCQlob3N0ZGF0YS0+cXVldWVkLS07Ci0JCQlpZiAoQ21uZCAhPSBOVUxMKSB7Ci0JCQkJaWYgKENtbmQtPnVzZV9zZykKLQkJCQkJcGNpX3VubWFwX3NnKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJICAgICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopQ21uZC0+YnVmZmVyLAotCQkJCQkJICAgICBDbW5kLT51c2Vfc2csCi0JCQkJCQkgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJCQllbHNlIGlmIChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4gJiYKLQkJCQkJIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IFBDSV9ETUFfTk9ORSkKLQkJCQkJcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgICAgICAgQ21uZC0+U0NwLmRtYV9oYW5kbGUsCi0JCQkJCQkgICAgICAgQ21uZC0+cmVxdWVzdF9idWZmbGVuLAotCQkJCQkJICAgICAgIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJCQlDbW5kLT5yZXN1bHQgPSAweDA7Ci0JCQkJKCpDbW5kLT5zY3NpX2RvbmUpIChDbW5kKTsKLQkJCX0gZWxzZQotCQkJCXByaW50aygicWxvZ2ljZmMlZC5jIDogZ290IGEgbnVsbCB2YWx1ZSBvdXQgb2YgaGFuZGxlX3B0cnMsIHRoaXMgc3Vja3NcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCWJyZWFrOwotCQljYXNlIE1CT1hfQ09NTUFORF9DT01QTEVURToKLQkJY2FzZSBJTlZBTElEX0NPTU1BTkQ6Ci0JCWNhc2UgSE9TVF9JTlRFUkZBQ0VfRVJST1I6Ci0JCWNhc2UgVEVTVF9GQUlMRUQ6Ci0JCWNhc2UgQ09NTUFORF9FUlJPUjoKLQkJY2FzZSBDT01NQU5EX1BBUkFNX0VSUk9SOgotCQljYXNlIFBPUlRfSURfVVNFRDoKLQkJY2FzZSBMT09QX0lEX1VTRUQ6Ci0JCWNhc2UgQUxMX0lEU19VU0VEOgotCQkJaG9zdGRhdGEtPm1ib3hfZG9uZSA9IDE7Ci0JCQlvdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygicWxvZ2ljZmMlZCA6IGdvdCBhbiB1bmtub3duIHN0YXR1cz8gJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBzdGF0dXMpOwotCQl9Ci0JCWlmICgoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgJiBBU19SRURPX0xPT1BfUE9SVERCIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlICYgQVNfUkVET19GQUJSSUNfUE9SVERCKSAmJiBob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID09IDApewotICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIuZnVuY3Rpb24gPSByZWRvX3BvcnRfZGI7Ci0JCQlob3N0ZGF0YS0+ZXhwbG9yZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zdDsKLQkJCWhvc3RkYXRhLT5leHBsb3JlX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaLzQpOwotCQkJaW5pdF90aW1lcigmaG9zdGRhdGEtPmV4cGxvcmVfdGltZXIpOwotCQkJYWRkX3RpbWVyKCZob3N0ZGF0YS0+ZXhwbG9yZV90aW1lcik7Ci0JCX0KLQkJb3V0dygweDAsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfU0VNQVBIT1JFKTsKLQl9IGVsc2UgewotCQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljZmMlZCA6IHJlc3BvbnNlIHF1ZXVlIHVwZGF0ZVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQkJREVCVUdfSU5UUihwcmludGsoInFsb2dpY2ZjJWQgOiByZXNwb25zZSBxdWV1ZSBkZXB0aCAlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIFJFU19RVUVVRV9ERVBUSChpbl9wdHIsIG91dF9wdHIpKSk7Ci0KLQkJd2hpbGUgKG91dF9wdHIgIT0gaW5fcHRyKSB7Ci0JCQl1bnNpZ25lZCBsZV9oYW5kOwotCQkJc3RzID0gKHN0cnVjdCBTdGF0dXNfRW50cnkgKikgJmhvc3RkYXRhLT5yZXNbb3V0X3B0cipRVUVVRV9FTlRSWV9MRU5dOwotCQkJb3V0X3B0ciA9IChvdXRfcHRyICsgMSkgJiBSRVNfUVVFVUVfTEVOOwotICAgICAgICAgICAgICAgICAKLQkJCVRSQUNFKCJkb25lIiwgb3V0X3B0ciwgQ21uZCk7Ci0JCQlERUJVR19JTlRSKGlzcDJ4MDBfcHJpbnRfc3RhdHVzX2VudHJ5KHN0cykpOwotCQkJbGVfaGFuZCA9IGxlMzJfdG9fY3B1KHN0cy0+aGFuZGxlKTsKLQkJCWlmIChzdHMtPmhkci5lbnRyeV90eXBlID09IEVOVFJZX1NUQVRVUyAmJiAoQ21uZCA9IGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tsZV9oYW5kXSkpIHsKLQkJCQlDbW5kLT5yZXN1bHQgPSBpc3AyeDAwX3JldHVybl9zdGF0dXMoQ21uZCwgc3RzKTsKLQkJCQlob3N0ZGF0YS0+cXVldWVkLS07Ci0KLQkJCQlpZiAoQ21uZC0+dXNlX3NnKQotCQkJCQlwY2lfdW5tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgICAgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilDbW5kLT5idWZmZXIsIENtbmQtPnVzZV9zZywKLQkJCQkJCSAgICAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQkJCWVsc2UgaWYgKENtbmQtPnJlcXVlc3RfYnVmZmxlbiAmJiBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBQQ0lfRE1BX05PTkUpCi0JCQkJCXBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJICAgICAgIENtbmQtPlNDcC5kbWFfaGFuZGxlLAotCQkJCQkJICAgICAgIENtbmQtPnJlcXVlc3RfYnVmZmxlbiwKLQkJCQkJCSAgICAgICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0KLQkJCQkvKiAKLQkJCQkgKiBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSB3ZSBkbyBub3QKLQkJCQkgKiBjYWxsIHNjc2lfZG9uZS4gIGlmIHRoZSBzdGF0dXMgaXMgQ1NfQUJPUlRFRAotCQkJCSAqIHdlIGRvbid0IGhhdmUgdG8gY2FsbCBkb25lIGJlY2F1c2UgdGhlIHVwcGVyCi0JCQkJICogbGV2ZWwgc2hvdWxkIGFscmVhZHkga25vdyBpdHMgYWJvcnRlZC4KLQkJCQkgKi8KLQkJCQlpZiAoaG9zdGRhdGEtPmhhbmRsZV9zZXJpYWxzW2xlX2hhbmRdICE9IENtbmQtPnNlcmlhbF9udW1iZXIgCi0JCQkJICAgIHx8IGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpID09IENTX0FCT1JURUQpewotCQkJCQlob3N0ZGF0YS0+aGFuZGxlX3NlcmlhbHNbbGVfaGFuZF0gPSAwOwotCQkJCQlob3N0ZGF0YS0+aGFuZGxlX3B0cnNbbGVfaGFuZF0gPSBOVUxMOwotCQkJCQlvdXR3KG91dF9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIGlmIHdlIGdldCBiYWNrIGFuIGVycm9yIGluZGljYXRpbmcgdGhlIHBvcnQKLQkJCQkgKiBpcyBub3QgdGhlcmUgb3IgaWYgdGhlIGxpbmsgaXMgZG93biBhbmQgCi0JCQkJICogdGhpcyBpcyBhIGRldmljZSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUgCi0JCQkJICogYWxsb3cgdGhlIGNvbW1hbmQgdG8gdGltZW91dC4KLQkJCQkgKiB0aGUgZGV2aWNlIG1heSB3ZWxsIGJlIGJhY2sgaW4gYSBjb3VwbGUgb2YKLQkJCQkgKiBzZWNvbmRzLgotCQkJCSAqLwotCQkJCWlmICgoaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPT0gQVNfTE9PUF9ET1dOIHx8IHN0cy0+Y29tcGxldGlvbl9zdGF0dXMgPT0gY3B1X3RvX2xlMTYoQ1NfUE9SVF9VTkFWQUlMQUJMRSkgfHwgc3RzLT5jb21wbGV0aW9uX3N0YXR1cyA9PSBjcHVfdG9fbGUxNihDU19QT1JUX0xPR0dFRF9PVVQpIHx8IHN0cy0+Y29tcGxldGlvbl9zdGF0dXMgPT0gY3B1X3RvX2xlMTYoQ1NfUE9SVF9DT05GSUdfQ0hBTkdFRCkpICYmIGhvc3RkYXRhLT5wb3J0X2RiW0NtbmQtPmRldmljZS0+aWRdLnd3bil7Ci0JCQkJCW91dHcob3V0X3B0ciwgaG9zdC0+aW9fcG9ydCArIE1CT1g1KTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlvdXR3KG91dF9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWhvc3RkYXRhLT5oYW5kbGVfcHRyc1tsZV9oYW5kXSA9IE5VTEw7Ci0KLQkJCWlmIChzdHMtPmNvbXBsZXRpb25fc3RhdHVzID09IGNwdV90b19sZTE2KENTX1JFU0VUX09DQ1VSUkVEKQotCQkJICAgIHx8IChzdHMtPnN0YXR1c19mbGFncyAmIGNwdV90b19sZTE2KFNURl9CVVNfUkVTRVQpKSkKLQkJCQlob3N0ZGF0YS0+c2VuZF9tYXJrZXIgPSAxOwotCi0JCQlpZiAobGUxNl90b19jcHUoc3RzLT5zY3NpX3N0YXR1cykgJiAweDAyMDApCi0JCQkJbWVtY3B5KENtbmQtPnNlbnNlX2J1ZmZlciwgc3RzLT5yZXFfc2Vuc2VfZGF0YSwKLQkJCQkgICAgICAgc2l6ZW9mKENtbmQtPnNlbnNlX2J1ZmZlcikpOwotCi0JCQlvdXR3KG91dF9wdHIsIGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0KLQkJCWlmIChDbW5kLT5zY3NpX2RvbmUgIT0gTlVMTCkgewotCQkJCSgqQ21uZC0+c2NzaV9kb25lKSAoQ21uZCk7Ci0JCQl9IGVsc2UKLQkJCQlwcmludGsoInFsb2dpY2ZjJWQgOiBPdWNoLCBzY3NpIGRvbmUgaXMgTlVMTFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQl9Ci0JCWhvc3RkYXRhLT5yZXNfb3V0X3B0ciA9IG91dF9wdHI7Ci0JfQotCi0KLQlvdXRfcHRyID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaW5fcHRyID0gaG9zdGRhdGEtPnJlcV9pbl9wdHI7Ci0KLQludW1fZnJlZSA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4gLSBSRVFfUVVFVUVfREVQVEgoaW5fcHRyLCBvdXRfcHRyKTsKLQludW1fZnJlZSA9IChudW1fZnJlZSA+IDIpID8gbnVtX2ZyZWUgLSAyIDogMDsKLSAgICAgICBob3N0LT5jYW5fcXVldWUgPSBob3N0LT5ob3N0X2J1c3kgKyBudW1fZnJlZTsKLQlpZiAoaG9zdC0+Y2FuX3F1ZXVlID4gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTikKLQkJaG9zdC0+Y2FuX3F1ZXVlID0gUUxPR0lDRkNfUkVRX1FVRVVFX0xFTjsKLQlob3N0LT5zZ190YWJsZXNpemUgPSBRTE9HSUNGQ19NQVhfU0cobnVtX2ZyZWUpOwotCi0Jb3V0dyhIQ0NSX0NMRUFSX1JJU0NfSU5UUiwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0JTEVBVkVfSU5UUigiaXNwMngwMF9pbnRyX2hhbmRsZXIiKTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfcmV0dXJuX3N0YXR1cyhTY3NpX0NtbmQgKkNtbmQsIHN0cnVjdCBTdGF0dXNfRW50cnkgKnN0cykKLXsKLQlpbnQgaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0jaWYgREVCVUdfSVNQMngwMF9JTlRSCi0Jc3RhdGljIGNoYXIgKnJlYXNvbltdID0KLQl7Ci0JCSJESURfT0siLAotCQkiRElEX05PX0NPTk5FQ1QiLAotCQkiRElEX0JVU19CVVNZIiwKLQkJIkRJRF9USU1FX09VVCIsCi0JCSJESURfQkFEX1RBUkdFVCIsCi0JCSJESURfQUJPUlQiLAotCQkiRElEX1BBUklUWSIsCi0JCSJESURfRVJST1IiLAotCQkiRElEX1JFU0VUIiwKLQkJIkRJRF9CQURfSU5UUiIKLQl9OwotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDBfSU5UUiAqLwotCi0JRU5URVIoImlzcDJ4MDBfcmV0dXJuX3N0YXR1cyIpOwotCi0JREVCVUcocHJpbnRrKCJxbG9naWNmYyA6IGNvbXBsZXRpb24gc3RhdHVzID0gMHglMDR4XG4iLAotCQkgICAgIGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKSk7Ci0KLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKSB7Ci0JY2FzZSBDU19DT01QTEVURToKLQkJaG9zdF9zdGF0dXMgPSBESURfT0s7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfRE1BX0VSUk9SOgotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JY2FzZSBDU19SRVNFVF9PQ0NVUlJFRDoKLQkJaG9zdF9zdGF0dXMgPSBESURfUkVTRVQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfQUJPUlRFRDoKLQkJaG9zdF9zdGF0dXMgPSBESURfQUJPUlQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfVElNRU9VVDoKLQkJaG9zdF9zdGF0dXMgPSBESURfVElNRV9PVVQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfREFUQV9PVkVSUlVOOgotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JY2FzZSBDU19EQVRBX1VOREVSUlVOOgotCSAgICAgICAgaWYgKENtbmQtPnVuZGVyZmxvdyA8PSAoQ21uZC0+cmVxdWVzdF9idWZmbGVuIC0gbGUzMl90b19jcHUoc3RzLT5yZXNpZHVhbCkpKQotCQkgICAgICAgIGhvc3Rfc3RhdHVzID0gRElEX09LOwotCQllbHNlCi0JCSAgICAgICAgaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfUE9SVF9VTkFWQUlMQUJMRToKLQljYXNlIENTX1BPUlRfTE9HR0VEX09VVDoKLQljYXNlIENTX1BPUlRfQ09ORklHX0NIQU5HRUQ6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX0JBRF9UQVJHRVQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1NfUVVFVUVfRlVMTDoKLQkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygicWxvZ2ljZmMgOiB1bmtub3duIGNvbXBsZXRpb24gc3RhdHVzIDB4JTA0eFxuIiwKLQkJICAgICAgIGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKTsKLQkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCX0KLQotCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNmYyA6IGhvc3Qgc3RhdHVzICglcykgc2NzaSBzdGF0dXMgJXhcbiIsCi0JCQkgIHJlYXNvbltob3N0X3N0YXR1c10sIGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpKSk7Ci0KLQlMRUFWRSgiaXNwMngwMF9yZXR1cm5fc3RhdHVzIik7Ci0KLQlyZXR1cm4gKGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpICYgU1RBVFVTX01BU0spIHwgKGhvc3Rfc3RhdHVzIDw8IDE2KTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDJ4MDBfYWJvcnQoU2NzaV9DbW5kICogQ21uZCkKLXsKLQl1X3Nob3J0IHBhcmFtWzhdOwotCWludCBpOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0Jc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCWludCByZXR1cm5fc3RhdHVzID0gU1VDQ0VTUzsKLQotCUVOVEVSKCJpc3AyeDAwX2Fib3J0Iik7Ci0KLQlob3N0ID0gQ21uZC0+ZGV2aWNlLT5ob3N0OwotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JZm9yIChpID0gMDsgaSA8IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU47IGkrKykKLQkJaWYgKGhvc3RkYXRhLT5oYW5kbGVfcHRyc1tpXSA9PSBDbW5kKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA9PSBRTE9HSUNGQ19SRVFfUVVFVUVfTEVOKXsKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCi0JaXNwMngwMF9kaXNhYmxlX2lycXMoaG9zdCk7Ci0KLQlwYXJhbVswXSA9IE1CT1hfQUJPUlRfSU9DQjsKLSNpZiBJU1AyeDAwX1BPUlREQgotCXBhcmFtWzFdID0gKCgodV9zaG9ydCkgaG9zdGRhdGEtPnBvcnRfZGJbQ21uZC0+ZGV2aWNlLT5pZF0ubG9vcF9pZCkgPDwgOCkgfCBDbW5kLT5kZXZpY2UtPmx1bjsKLSNlbHNlCi0JcGFyYW1bMV0gPSAoKCh1X3Nob3J0KSBDbW5kLT50YXJnZXQpIDw8IDgpIHwgQ21uZC0+bHVuOwotI2VuZGlmCi0JcGFyYW1bMl0gPSBpICYgMHhmZmZmOwotCXBhcmFtWzNdID0gaSA+PiAxNjsKLQotCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogc2NzaSBhYm9ydCBmYWlsdXJlOiAleFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsIHBhcmFtWzBdKTsKLQkJaWYgKHBhcmFtWzBdID09IDB4NDAwNSkKLQkJCUNtbmQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJaWYgKHBhcmFtWzBdID09IDB4NDAwNikKLQkJCUNtbmQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQlyZXR1cm5fc3RhdHVzID0gRkFJTEVEOwotCX0KLQotCWlmIChyZXR1cm5fc3RhdHVzICE9IFNVQ0NFU1MpewotCQlwYXJhbVswXSA9IE1CT1hfR0VUX0ZJUk1XQVJFX1NUQVRFOwotCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IGFib3J0IGZhaWxlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBmaXJtd2FyZSBzdGF0dXMgaXMgJXggJXhcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCBwYXJhbVswXSwgcGFyYW1bMV0pOwotCX0KLQotCWlzcDJ4MDBfZW5hYmxlX2lycXMoaG9zdCk7Ci0KLQlMRUFWRSgiaXNwMngwMF9hYm9ydCIpOwotCi0JcmV0dXJuIHJldHVybl9zdGF0dXM7Ci19Ci0KLQotc3RhdGljIGludCBpc3AyeDAwX2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKm4sCi0JCXNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgaXBbXSkKLXsKLQlpbnQgc2l6ZSA9IGNhcGFjaXR5OwotCi0JRU5URVIoImlzcDJ4MDBfYmlvc3BhcmFtIik7Ci0KLQlpcFswXSA9IDY0OwotCWlwWzFdID0gMzI7Ci0JaXBbMl0gPSBzaXplID4+IDExOwotCWlmIChpcFsyXSA+IDEwMjQpIHsKLQkJaXBbMF0gPSAyNTU7Ci0JCWlwWzFdID0gNjM7Ci0JCWlwWzJdID0gc2l6ZSAvIChpcFswXSAqIGlwWzFdKTsKLQl9Ci0JTEVBVkUoImlzcDJ4MDBfYmlvc3BhcmFtIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpc3AyeDAwX3Jlc2V0X2hhcmR3YXJlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JdV9zaG9ydCBwYXJhbVs4XTsKLQlzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JaW50IGxvb3BfY291bnQ7Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCi0JRU5URVIoImlzcDJ4MDBfcmVzZXRfaGFyZHdhcmUiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JLyoKLQkgKglUaGlzIGNhbm5vdCBiZSByaWdodCAtIFBDSSB3cml0ZXMgYXJlIHBvc3RlZAotCSAqCShhcHBhcmVudGx5IHRoaXMgaXMgaGFyZHdhcmUgZGVzaWduIGZsYXcgbm90IHNvZnR3YXJlID8pCi0JICovCi0JIAotCW91dHcoMHgwMSwgaG9zdC0+aW9fcG9ydCArIElTUF9DVFJMX1NUQVRVUyk7Ci0JdWRlbGF5KDEwMCk7Ci0Jb3V0dyhIQ0NSX1JFU0VULCBob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKTsKLQl1ZGVsYXkoMTAwKTsKLQlvdXR3KEhDQ1JfUkVMRUFTRSwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0Jb3V0dyhIQ0NSX0JJT1NfRElTQUJMRSwgaG9zdC0+aW9fcG9ydCArIEhPU1RfSENDUik7Ci0KLQlsb29wX2NvdW50ID0gREVGQVVMVF9MT09QX0NPVU5UOwotCXdoaWxlICgtLWxvb3BfY291bnQgJiYgaW53KGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpID09IFJJU0NfQlVTWSkgewotCQliYXJyaWVyKCk7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQlpZiAoIWxvb3BfY291bnQpCi0JCXByaW50aygicWxvZ2ljZmMlZCA6IHJlc2V0X2hhcmR3YXJlIGxvb3AgdGltZW91dFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCi0KLQotI2lmIERFQlVHX0lTUDJ4MDAKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDAgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gwKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCAxIDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMSkpOwotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggMiAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDIpKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDMgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gzKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCA0IDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNCkpOwotCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggNSAweCUwNHggXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIGludyhob3N0LT5pb19wb3J0ICsgTUJPWDUpKTsKLQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94IDYgMHglMDR4IFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g2KSk7Ci0JcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveCA3IDB4JTA0eCBcbiIsIGhvc3RkYXRhLT5ob3N0X2lkLCAgaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNykpOwotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDAgKi8KLQotCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IHZlcmlmeWluZyBjaGVja3N1bVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxPR0lDX0ZDX0ZJUk1XQVJFKQotCXsKLQkJaW50IGk7Ci0JCXVuc2lnbmVkIHNob3J0ICogcmlzY19jb2RlID0gTlVMTDsKLQkJdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbiA9IDA7Ci0JCWlmIChob3N0ZGF0YS0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIxMDApewotCQkgICAgICAgIHJpc2NfY29kZSA9IHJpc2NfY29kZTIxMDA7Ci0JCQlyaXNjX2NvZGVfbGVuID0gcmlzY19jb2RlX2xlbmd0aDIxMDA7Ci0JCX0KLQkJZWxzZSBpZiAoaG9zdGRhdGEtPnBjaV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwKXsKLQkJICAgICAgICByaXNjX2NvZGUgPSByaXNjX2NvZGUyMjAwOwotCQkJcmlzY19jb2RlX2xlbiA9IHJpc2NfY29kZV9sZW5ndGgyMjAwOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJpc2NfY29kZV9sZW47IGkrKykgewotCQkJcGFyYW1bMF0gPSBNQk9YX1dSSVRFX1JBTV9XT1JEOwotCQkJcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxICsgaTsKLQkJCXBhcmFtWzJdID0gcmlzY19jb2RlW2ldOwotCi0JCQlpc3AyeDAwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJCQlwcmludGsoInFsb2dpY2ZjJWQgOiBmaXJtd2FyZSBsb2FkIGZhaWx1cmVcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgkJCQkvKiBSRUxPQURfRklSTVdBUkUgKi8KLQotCXBhcmFtWzBdID0gTUJPWF9WRVJJRllfQ0hFQ0tTVU07Ci0JcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiByYW0gY2hlY2tzdW0gZmFpbHVyZVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JREVCVUcocHJpbnRrKCJxbG9naWNmYyVkIDogZXhlY3V0aW5nIGZpcm13YXJlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCkpOwotCi0JcGFyYW1bMF0gPSBNQk9YX0VYRUNfRklSTVdBUkU7Ci0JcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JcGFyYW1bMF0gPSBNQk9YX0FCT1VUX0ZJUk1XQVJFOwotCi0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBhYm91dCBmaXJtd2FyZSBmYWlsdXJlXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQlERUJVRyhwcmludGsoInFsb2dpY2ZjJWQgOiBmaXJtd2FyZSBtYWpvciByZXZpc2lvbiAlZFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBwYXJhbVsxXSkpOwotCURFQlVHKHByaW50aygicWxvZ2ljZmMlZCA6IGZpcm13YXJlIG1pbm9yIHJldmlzaW9uICVkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHBhcmFtWzJdKSk7Ci0KLSNpZmRlZiBVU0VfTlZSQU1fREVGQVVMVFMKLQotCWlmIChpc3AyeDAwX2dldF9udnJhbV9kZWZhdWx0cyhob3N0LCAmaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spICE9IDApIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogQ291bGQgbm90IHJlYWQgZnJvbSBOVlJBTVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCX0KLSNlbmRpZgotCi0JaG9zdGRhdGEtPnd3biA9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMF0pKSA8PCA1NjsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMF0pICYgMHhmZjAwKSA8PCA0ODsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMV0pICYgMHhmZjAwKSA8PCAyNDsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMV0pICYgMHgwMGZmKSA8PCA0ODsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMl0pICYgMHgwMGZmKSA8PCAyNDsKLQlob3N0ZGF0YS0+d3duIHw9ICh1NjQpIChjcHVfdG9fbGUxNihob3N0ZGF0YS0+Y29udHJvbF9ibG9jay5ub2RlX25hbWVbMl0pICYgMHhmZjAwKSA8PCA4OwotCWhvc3RkYXRhLT53d24gfD0gKHU2NCkgKGNwdV90b19sZTE2KGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrLm5vZGVfbmFtZVszXSkgJiAweDAwZmYpIDw8IDg7Ci0JaG9zdGRhdGEtPnd3biB8PSAodTY0KSAoY3B1X3RvX2xlMTYoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2subm9kZV9uYW1lWzNdKSAmIDB4ZmYwMCkgPj4gODsKLQotCS8qIEZJWE1FOiBJZiB0aGUgRE1BIHRyYW5zZmVyIGdvZXMgb25lIHdheSBvbmx5LCB0aGlzIHNob3VsZCB1c2UKLQkgKiAgICAgICAgUENJX0RNQV9UT0RFVklDRSBhbmQgYmVsb3cgYXMgd2VsbC4KLQkgKi8KLQlidXNhZGRyID0gcGNpX21hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJICAgICAgIHZpcnRfdG9fcGFnZSgmaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spLAotCQkJICAgICAgIG9mZnNldF9pbl9wYWdlKCZob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgc2l6ZW9mKGhvc3RkYXRhLT5jb250cm9sX2Jsb2NrKSwKLQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCi0JcGFyYW1bMF0gPSBNQk9YX0lOSVRfRklSTVdBUkU7Ci0JcGFyYW1bMl0gPSAodV9zaG9ydCkgKHBjaTY0X2RtYV9sbzMyKGJ1c2FkZHIpID4+IDE2KTsKLQlwYXJhbVszXSA9ICh1X3Nob3J0KSAocGNpNjRfZG1hX2xvMzIoYnVzYWRkcikgJiAweGZmZmYpOwotCXBhcmFtWzRdID0gMDsKLQlwYXJhbVs1XSA9IDA7Ci0JcGFyYW1bNl0gPSAodV9zaG9ydCkgKHBjaTY0X2RtYV9oaTMyKGJ1c2FkZHIpID4+IDE2KTsKLQlwYXJhbVs3XSA9ICh1X3Nob3J0KSAocGNpNjRfZG1hX2hpMzIoYnVzYWRkcikgJiAweGZmZmYpOwotCWlzcDJ4MDBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCXByaW50aygicWxvZ2ljZmMlZC5jOiBPdWNoIDB4JTA0eFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBwYXJhbVswXSk7Ci0JCXBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LCBidXNhZGRyLAotCQkJICAgICAgIHNpemVvZihob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXBhcmFtWzBdID0gTUJPWF9HRVRfRklSTVdBUkVfU1RBVEU7Ci0JaXNwMngwMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkLmM6IDB4JTA0eFxuIiwgaG9zdGRhdGEtPmhvc3RfaWQsICBwYXJhbVswXSk7Ci0JCXBjaV91bm1hcF9wYWdlKGhvc3RkYXRhLT5wY2lfZGV2LCBidXNhZGRyLAotCQkJICAgICAgIHNpemVvZihob3N0ZGF0YS0+Y29udHJvbF9ibG9jayksCi0JCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGNpX3VubWFwX3BhZ2UoaG9zdGRhdGEtPnBjaV9kZXYsIGJ1c2FkZHIsCi0JCSAgICAgICBzaXplb2YoaG9zdGRhdGEtPmNvbnRyb2xfYmxvY2spLAotCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQlMRUFWRSgiaXNwMngwMF9yZXNldF9oYXJkd2FyZSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBVU0VfTlZSQU1fREVGQVVMVFMKLQotc3RhdGljIGludCBpc3AyeDAwX2dldF9udnJhbV9kZWZhdWx0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3QgaW5pdF9jYiAqY29udHJvbF9ibG9jaykKLXsKLQotCXVfc2hvcnQgdmFsdWU7Ci0JaWYgKGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDApICE9IDB4NTM0OSkKLQkJcmV0dXJuIDE7Ci0KLQl2YWx1ZSA9IGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDgpOwotCWNvbnRyb2xfYmxvY2stPm5vZGVfbmFtZVswXSA9IGNwdV90b19sZTE2KGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDkpKTsKLQljb250cm9sX2Jsb2NrLT5ub2RlX25hbWVbMV0gPSBjcHVfdG9fbGUxNihpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChob3N0LCAxMCkpOwotCWNvbnRyb2xfYmxvY2stPm5vZGVfbmFtZVsyXSA9IGNwdV90b19sZTE2KGlzcDJ4MDBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDExKSk7Ci0JY29udHJvbF9ibG9jay0+bm9kZV9uYW1lWzNdID0gY3B1X3RvX2xlMTYoaXNwMngwMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgMTIpKTsKLQljb250cm9sX2Jsb2NrLT5oYXJkX2FkZHIgPSBjcHVfdG9fbGUxNihpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChob3N0LCAxMykpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaXNwMngwMF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKnNoKQotewotCXVfbG9uZyBpb19iYXNlOwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQl1X2NoYXIgcmV2aXNpb247Ci0JdV9pbnQgaXJxOwotCXVfc2hvcnQgY29tbWFuZDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCi0JRU5URVIoImlzcDJ4MDBfaW5pdCIpOwotCi0JaG9zdGRhdGEgPSAoc3RydWN0IGlzcDJ4MDBfaG9zdGRhdGEgKikgc2gtPmhvc3RkYXRhOwotCXBkZXYgPSBob3N0ZGF0YS0+cGNpX2RldjsKLQotCWlmIChwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpCi0JICB8fCBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbikpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogZXJyb3IgcmVhZGluZyBQQ0kgY29uZmlndXJhdGlvblxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQlpcnEgPSBwZGV2LT5pcnE7Ci0KLQotCWlmIChwZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9RTE9HSUMpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogMHglMDR4IGlzIG5vdCBRTG9naWMgdmVuZG9yIElEXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgCi0JCSAgICAgICBwZGV2LT52ZW5kb3IpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwICYmIHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwKSB7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IDB4JTA0eCBkb2VzIG5vdCBtYXRjaCBJU1AyMTAwIG9yIElTUDIyMDAgZGV2aWNlIGlkXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgCi0JCSAgICAgICBwZGV2LT5kZXZpY2UpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKCEoY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKSB8fAotCSAgICAhKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICYgSU9SRVNPVVJDRV9JTykpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogaS9vIG1hcHBpbmcgaXMgZGlzYWJsZWRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JaWYgKHJldmlzaW9uICE9IElTUDIxMDBfUkVWX0lEMSAmJiByZXZpc2lvbiAhPSBJU1AyMTAwX1JFVl9JRDMgJiYgcmV2aXNpb24gIT0gSVNQMjIwMF9SRVZfSUQ1KQotCQlwcmludGsoInFsb2dpY2ZjJWQgOiBuZXcgaXNwMngwMCByZXZpc2lvbiBJRCAoJWQpXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCwgIHJldmlzaW9uKTsKLQotCi0JaG9zdGRhdGEtPnJldmlzaW9uID0gcmV2aXNpb247Ci0KLQlzaC0+aXJxID0gaXJxOwotCXNoLT5pb19wb3J0ID0gaW9fYmFzZTsKLQotCUxFQVZFKCJpc3AyeDAwX2luaXQiKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgVVNFX05WUkFNX0RFRkFVTFRTCi0KLSNkZWZpbmUgTlZSQU1fREVMQVkoKSB1ZGVsYXkoMTApCS8qIDEwIG1pY3Jvc2Vjb25kIGRlbGF5ICovCi0KLQotdV9zaG9ydCBpc3AyeDAwX3JlYWRfbnZyYW1fd29yZChzdHJ1Y3QgU2NzaV9Ib3N0ICogaG9zdCwgdV9zaG9ydCBieXRlKQotewotCWludCBpOwotCXVfc2hvcnQgdmFsdWUsIG91dHB1dCwgaW5wdXQ7Ci0KLQlvdXR3KDB4MiwgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JTlZSQU1fREVMQVkoKTsKLQlvdXR3KDB4MywgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JTlZSQU1fREVMQVkoKTsKLQotCWJ5dGUgJj0gMHhmZjsKLQlieXRlIHw9IDB4MDYwMDsKLQlmb3IgKGkgPSAxMDsgaSA+PSAwOyBpLS0pIHsKLQkJb3V0cHV0ID0gKChieXRlID4+IGkpICYgMHgxKSA/IDB4NCA6IDB4MDsKLQkJb3V0dyhvdXRwdXQgfCAweDIsIGhvc3QtPmlvX3BvcnQgKyBQQ0lfTlZSQU0pOwotCQlOVlJBTV9ERUxBWSgpOwotCQlvdXR3KG91dHB1dCB8IDB4MywgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JCU5WUkFNX0RFTEFZKCk7Ci0JCW91dHcob3V0cHV0IHwgMHgyLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQl9Ci0KLQlmb3IgKGkgPSAweGYsIHZhbHVlID0gMDsgaSA+PSAwOyBpLS0pIHsKLQkJdmFsdWUgPDw9IDE7Ci0JCW91dHcoMHgzLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQkJaW5wdXQgPSBpbncoaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JCU5WUkFNX0RFTEFZKCk7Ci0JCW91dHcoMHgyLCBob3N0LT5pb19wb3J0ICsgUENJX05WUkFNKTsKLQkJTlZSQU1fREVMQVkoKTsKLQkJaWYgKGlucHV0ICYgMHg4KQotCQkJdmFsdWUgfD0gMTsKLQl9Ci0KLQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9OVlJBTSk7Ci0JTlZSQU1fREVMQVkoKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotCi0jZW5kaWYJCQkJLyogVVNFX05WUkFNX0RFRkFVTFRTICovCi0KLQotCi0vKgotICogY3VycmVudGx5LCB0aGlzIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBhYm9ydC9yZXNldCwKLSAqIGF0IHdoaWNoIHRpbWVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyBwb2xsaW5nIGlzIE9LLCBJIGd1ZXNzLi4uCi0gKi8KLXN0YXRpYyBpbnQgaXNwMngwMF9tYm94X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgdV9zaG9ydCBwYXJhbVtdKQotewotCWludCBsb29wX2NvdW50OwotCXN0cnVjdCBpc3AyeDAwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMngwMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSA9PSAwIHx8IGhvc3RkYXRhLT5hZGFwdGVyX3N0YXRlID09IEFTX0ZJUk1XQVJFX0RFQUQpCi0JCXJldHVybiAxOwotCi0JbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQl3aGlsZSAoLS1sb29wX2NvdW50ICYmIGludyhob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKSAmIDB4MDA4MCkgewotCQliYXJyaWVyKCk7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQlpZiAoIWxvb3BfY291bnQpIHsKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveF9jb21tYW5kIGxvb3AgdGltZW91dCAjMVxuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCQlwYXJhbVswXSA9IDB4NDAwNjsKLQkJaG9zdGRhdGEtPmFkYXB0ZXJfc3RhdGUgPSBBU19GSVJNV0FSRV9ERUFEOwotCQlyZXR1cm4gMTsKLQl9Ci0JaG9zdGRhdGEtPm1ib3hfZG9uZSA9IDA7Ci0KLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gPT0gMCkKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogaW52YWxpZCBtYm94IGNvbW1hbmRcbiIsIGhvc3RkYXRhLT5ob3N0X2lkKTsKLQotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4ODApCi0JCW91dHcocGFyYW1bN10sIGhvc3QtPmlvX3BvcnQgKyBNQk9YNyk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHg0MCkKLQkJb3V0dyhwYXJhbVs2XSwgaG9zdC0+aW9fcG9ydCArIE1CT1g2KTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDIwKQotCQlvdXR3KHBhcmFtWzVdLCBob3N0LT5pb19wb3J0ICsgTUJPWDUpOwotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4MTApCi0JCW91dHcocGFyYW1bNF0sIGhvc3QtPmlvX3BvcnQgKyBNQk9YNCk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHgwOCkKLQkJb3V0dyhwYXJhbVszXSwgaG9zdC0+aW9fcG9ydCArIE1CT1gzKTsKLQlpZiAobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweDA0KQotCQlvdXR3KHBhcmFtWzJdLCBob3N0LT5pb19wb3J0ICsgTUJPWDIpOwotCWlmIChtYm94X3BhcmFtW3BhcmFtWzBdXSAmIDB4MDIpCi0JCW91dHcocGFyYW1bMV0sIGhvc3QtPmlvX3BvcnQgKyBNQk9YMSk7Ci0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dICYgMHgwMSkKLQkJb3V0dyhwYXJhbVswXSwgaG9zdC0+aW9fcG9ydCArIE1CT1gwKTsKLQotCi0Jb3V0dyhIQ0NSX1NFVF9IT1NUX0lOVFIsIGhvc3QtPmlvX3BvcnQgKyBIT1NUX0hDQ1IpOwotCi0Jd2hpbGUgKDEpIHsKLQkJbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQkJd2hpbGUgKC0tbG9vcF9jb3VudCAmJiAhKGludyhob3N0LT5pb19wb3J0ICsgUENJX0lOVEVSX1NUUykgJiAweDA4KSkgeyAKLQkJCWJhcnJpZXIoKTsKLQkJCWNwdV9yZWxheCgpOwotCQl9Ci0KLQkJaWYgKCFsb29wX2NvdW50KSB7Ci0JCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCQlwcmludGsoInFsb2dpY2ZjJWQgOiBtYm94X2NvbW1hbmQgbG9vcCB0aW1lb3V0ICMyXG4iLCBob3N0ZGF0YS0+aG9zdF9pZCk7Ci0JCQlicmVhazsKLQkJfQotCQlpc3AyeDAwX2ludHJfaGFuZGxlcihob3N0LT5pcnEsIGhvc3QsIE5VTEwpOwotCi0JCWlmIChob3N0ZGF0YS0+bWJveF9kb25lID09IDEpCi0JCQlicmVhazsKLQotCX0KLQotCWxvb3BfY291bnQgPSBERUZBVUxUX0xPT1BfQ09VTlQ7Ci0Jd2hpbGUgKC0tbG9vcF9jb3VudCAmJiBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gwKSA9PSAweDA0KSB7Ci0JCWJhcnJpZXIoKTsKLQkJY3B1X3JlbGF4KCk7Ci0JfQotCWlmICghbG9vcF9jb3VudCkKLQkJcHJpbnRrKCJxbG9naWNmYyVkIDogbWJveF9jb21tYW5kIGxvb3AgdGltZW91dCAjM1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCi0JcGFyYW1bN10gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g3KTsKLQlwYXJhbVs2XSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDYpOwotCXBhcmFtWzVdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YNSk7Ci0JcGFyYW1bNF0gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1g0KTsKLQlwYXJhbVszXSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDMpOwotCXBhcmFtWzJdID0gaW53KGhvc3QtPmlvX3BvcnQgKyBNQk9YMik7Ci0JcGFyYW1bMV0gPSBpbncoaG9zdC0+aW9fcG9ydCArIE1CT1gxKTsKLQlwYXJhbVswXSA9IGludyhob3N0LT5pb19wb3J0ICsgTUJPWDApOwotCi0KLQlvdXR3KDB4MCwgaG9zdC0+aW9fcG9ydCArIFBDSV9TRU1BUEhPUkUpOwotCi0JaWYgKGludyhob3N0LT5pb19wb3J0ICsgSE9TVF9IQ0NSKSAmIDB4MDA4MCkgewotCQlob3N0ZGF0YS0+YWRhcHRlcl9zdGF0ZSA9IEFTX0ZJUk1XQVJFX0RFQUQ7Ci0JCXByaW50aygicWxvZ2ljZmMlZCA6IG1ib3ggb3AgaXMgc3RpbGwgcGVuZGluZ1xuIiwgaG9zdGRhdGEtPmhvc3RfaWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIERFQlVHX0lTUDJ4MDBfSU5UUgotCi12b2lkIGlzcDJ4MDBfcHJpbnRfc3RhdHVzX2VudHJ5KHN0cnVjdCBTdGF0dXNfRW50cnkgKnN0YXR1cykKLXsKLQlwcmludGsoInFsb2dpY2ZjIDogZW50cnkgY291bnQgPSAweCUwMngsIHR5cGUgPSAweCUwMngsIGZsYWdzID0gMHglMDJ4XG4iLCAKLQlzdGF0dXMtPmhkci5lbnRyeV9jbnQsIHN0YXR1cy0+aGRyLmVudHJ5X3R5cGUsIHN0YXR1cy0+aGRyLmZsYWdzKTsKLQlwcmludGsoInFsb2dpY2ZjIDogc2NzaSBzdGF0dXMgPSAweCUwNHgsIGNvbXBsZXRpb24gc3RhdHVzID0gMHglMDR4XG4iLAotCSAgICAgICBsZTE2X3RvX2NwdShzdGF0dXMtPnNjc2lfc3RhdHVzKSwgbGUxNl90b19jcHUoc3RhdHVzLT5jb21wbGV0aW9uX3N0YXR1cykpOwotCXByaW50aygicWxvZ2ljZmMgOiBzdGF0ZSBmbGFncyA9IDB4JTA0eCwgc3RhdHVzIGZsYWdzID0gMHglMDR4XG4iLCAKLQkgICAgICAgbGUxNl90b19jcHUoc3RhdHVzLT5zdGF0ZV9mbGFncyksIGxlMTZfdG9fY3B1KHN0YXR1cy0+c3RhdHVzX2ZsYWdzKSk7Ci0JcHJpbnRrKCJxbG9naWNmYyA6IHJlc3BvbnNlIGluZm8gbGVuZ3RoID0gMHglMDR4LCByZXF1ZXN0IHNlbnNlIGxlbmd0aCA9IDB4JTA0eFxuIiwKLQkgICAgICAgbGUxNl90b19jcHUoc3RhdHVzLT5yZXNfaW5mb19sZW4pLCBsZTE2X3RvX2NwdShzdGF0dXMtPnJlcV9zZW5zZV9sZW4pKTsKLQlwcmludGsoInFsb2dpY2ZjIDogcmVzaWR1YWwgdHJhbnNmZXIgbGVuZ3RoID0gMHglMDh4LCByZXNwb25zZSA9IDB4JTAyeFxuIiwgbGUzMl90b19jcHUoc3RhdHVzLT5yZXNpZHVhbCksIHN0YXR1cy0+cmVzX2luZm9bM10pOwotCi19Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVR19JU1AyeDAwX0lOVFIgKi8KLQotCi0jaWYgREVCVUdfSVNQMngwMAotCi12b2lkIGlzcDJ4MDBfcHJpbnRfc2NzaV9jbWQoU2NzaV9DbW5kICogY21kKQotewotCWludCBpOwotCi0JcHJpbnRrKCJxbG9naWNmYyA6IHRhcmdldCA9IDB4JTAyeCwgbHVuID0gMHglMDJ4LCBjbWRfbGVuID0gMHglMDJ4XG4iLCAKLQkgICAgICAgY21kLT50YXJnZXQsIGNtZC0+bHVuLCBjbWQtPmNtZF9sZW4pOwotCXByaW50aygicWxvZ2ljZmMgOiBjb21tYW5kID0gIik7Ci0JZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKQotCQlwcmludGsoIjB4JTAyeCAiLCBjbWQtPmNtbmRbaV0pOwotCXByaW50aygiXG4iKTsKLX0KLQotI2VuZGlmCQkJCS8qIERFQlVHX0lTUDJ4MDAgKi8KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7Ci0gICAgICAgIC5kZXRlY3QgICAgICAgICAgICAgICAgID0gaXNwMngwMF9kZXRlY3QsCi0gICAgICAgIC5yZWxlYXNlICAgICAgICAgICAgICAgID0gaXNwMngwMF9yZWxlYXNlLAotICAgICAgICAuaW5mbyAgICAgICAgICAgICAgICAgICA9IGlzcDJ4MDBfaW5mbywKLSAgICAgICAgLnF1ZXVlY29tbWFuZCAgICAgICAgICAgPSBpc3AyeDAwX3F1ZXVlY29tbWFuZCwKLSAgICAgICAgLmVoX2Fib3J0X2hhbmRsZXIgICAgICAgPSBpc3AyeDAwX2Fib3J0LAotICAgICAgICAuYmlvc19wYXJhbSAgICAgICAgICAgICA9IGlzcDJ4MDBfYmlvc3BhcmFtLAotICAgICAgICAuY2FuX3F1ZXVlICAgICAgICAgICAgICA9IFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4sCi0gICAgICAgIC50aGlzX2lkICAgICAgICAgICAgICAgID0gLTEsCi0gICAgICAgIC5zZ190YWJsZXNpemUgICAgICAgICAgID0gUUxPR0lDRkNfTUFYX1NHKFFMT0dJQ0ZDX1JFUV9RVUVVRV9MRU4pLAotCS5jbWRfcGVyX2x1bgkJPSBRTE9HSUNGQ19DTURfUEVSX0xVTiwKLSAgICAgICAgLnVzZV9jbHVzdGVyaW5nICAgICAgICAgPSBFTkFCTEVfQ0xVU1RFUklORywKLX07Ci0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbG9naWNmY19hc20uYyBiL2RyaXZlcnMvc2NzaS9xbG9naWNmY19hc20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkNDUxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvcWxvZ2ljZmNfYXNtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCQkJCQkJKgotICogCSAtLS0gSVNQMjEwMCBGYWJyaWMgSW5pdGlhdG9yL1RhcmdldCBGaXJtd2FyZSAtLS0gICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICB3aXRoIGV4cGFuZGVkIExVTiBhZGRyZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICBhbmQgRmNUYXBlIChGQ1AtMikgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKgkJCQkJCQkJCSoKLSAqCQkJCQkJCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb3B5cmlnaHQgKEMpIDIwMDAgYW5kIDIwMDEgUWxvZ2ljIENvcnBvcmF0aW9uIAotICAod3d3LnFsb2dpYy5jb20pCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqCUZpcm13YXJlIFZlcnNpb24gMS4xOS4xNiAoMTA6MzYgTm92IDAyLCAyMDAwKQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfYWRkcjAxID0gMHgxMDAwIDsKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZV9sZW5ndGgyMTAwID0gMHg5MjYwOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZTIxMDBbXSA9IHsKLQkweDAwNzgsIDB4MTAyZCwgMHgwMDAwLCAweDkyNjAsIDB4MDAwMCwgMHgwMDAxLCAweDAwMTMsIDB4MDAxMCwKLQkweDAwMTcsIDB4MjA0MywgMHg0ZjUwLCAweDU5NTIsIDB4NDk0NywgMHg0ODU0LCAweDIwMzEsIDB4MzkzOSwKLQkweDM5MjAsIDB4NTE0YywgMHg0ZjQ3LCAweDQ5NDMsIDB4MjA0MywgMHg0ZjUyLCAweDUwNGYsIDB4NTI0MSwKLQkweDU0NDksIDB4NGY0ZSwgMHgyMDQ5LCAweDUzNTAsIDB4MzIzMSwgMHgzMDMwLCAweDIwNDYsIDB4Njk3MiwKLQkweDZkNzcsIDB4NjE3MiwgMHg2NTIwLCAweDIwNTYsIDB4NjU3MiwgMHg3MzY5LCAweDZmNmUsIDB4MjAzMCwKLQkweDMxMmUsIDB4MzEzOSwgMHgyMDIwLCAweDIwMjAsIDB4MjQwMCwgMHgyMDkxLCAweDIwMDAsIDB4MjBjMSwKLQkweDAwMjEsIDB4MjAzOSwgMHhmZmZmLCAweDIwMTksIDB4YWFhYSwgMHgyNzYwLCAweDIwNjksIDB4N2ZmZiwKLQkweDIwYzEsIDB4MDAyMCwgMHgyYzJjLCAweDJkMzQsIDB4Mjc2MiwgMHgyMzZhLCAweDJjMjQsIDB4MmQwNCwKLQkweDI2NmEsIDB4MjU2MiwgMHhhNDA2LCAweDAwYzAsIDB4MTA1MiwgMHgyMGMxLCAweDAwMjEsIDB4MmMyYywKLQkweDIzNjIsIDB4MmMwNCwgMHgyNTYyLCAweGEzMDYsIDB4MDA0MCwgMHgxMDUyLCAweDIwYzEsIDB4MDAyMCwKLQkweDIwMzksIDB4OGZmZiwgMHgyMGExLCAweGFhMDAsIDB4MjcwOCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwKLQkweDgxMGQsIDB4YTE4YywgMHgwMDBmLCAweDIwMDEsIDB4MDAwYSwgMHhhMTEyLCAweGEwMGUsIDB4MjFhOCwKLQkweDQxYTQsIDB4MzQwMCwgMHg4MjExLCAweDAwYzAsIDB4MTA1ZiwgMHgyNzA4LCAweDM0MDAsIDB4YTEwMiwKLQkweDAwNDAsIDB4MTA2ZiwgMHgwMDQ4LCAweDEwNmYsIDB4MjBhOCwgMHhhMDBlLCAweDQxYTQsIDB4MjBhMSwKLQkweGEyNjAsIDB4MjAwOSwgMHgwMDAwLCAweDIwYTksIDB4MDdhMCwgMHg0MWE0LCAweDM0MDAsIDB4MjBjOSwKLQkweGE3ZmYsIDB4MjA1OSwgMHgwMDAwLCAweDJiNzgsIDB4NzgyMywgMHgwMDA0LCAweDIwODksIDB4MjU1ZCwKLQkweDIwNTEsIDB4YTMwMCwgMHgyYTcwLCAweDc3NWUsIDB4YTc4NiwgMHg4ZmZmLCAweDAwNDAsIDB4MTA5MiwKLQkweDcwNWIsIDB4Y2EwMCwgMHg3MDU3LCAweGM5ZjEsIDB4NzA2MywgMHgwMjAwLCAweDcwNjcsIDB4MDIwMCwKLQkweDAwNzgsIDB4MTA5YSwgMHg3MDU3LCAweGJhMDEsIDB4NzA2MywgMHgwMTAwLCAweDcwNjcsIDB4MDEwMCwKLQkweDcwNWIsIDB4YmEwMCwgMHgxMDc4LCAweDEyZGYsIDB4MTA3OCwgMHgxM2MwLCAweDEwNzgsIDB4MTU2OSwKLQkweDEwNzgsIDB4MWNhNCwgMHgxMDc4LCAweDQyMjksIDB4MTA3OCwgMHg3NGNmLCAweDEwNzgsIDB4MTM0YiwKLQkweDEwNzgsIDB4MmEzZiwgMHgxMDc4LCAweDRkYTIsIDB4MTA3OCwgMHg0OGIyLCAweDEwNzgsIDB4NTdkZiwKLQkweDEwNzgsIDB4MjFmNywgMHgxMDc4LCAweDVhYmYsIDB4MTA3OCwgMHg1MzY5LCAweDEwNzgsIDB4MjEwZCwKLQkweDEwNzgsIDB4MjFkNCwgMHgyMDkxLCAweDMwMDksIDB4NzgyMywgMHgwMDAwLCAweDAwOTAsIDB4MTBjZiwKLQkweDc4MjAsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4MTBjZiwgMHg3ODIzLCAweDQwMDAsIDB4MDA2OCwKLQkweDEwYzcsIDB4NzgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NTAwMCwgMHgyMDkxLCAweDQwODAsIDB4MmE3MCwKLQkweDcwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxN2YsIDB4MjAwMywgMHgwMDAwLCAweDJhNzAsIDB4NzAwMCwKLQkweGEwOGUsIDB4MDAwMywgMHgwMGMwLCAweDEwZWYsIDB4MTA3OCwgMHgzNWJjLCAweDEwNzgsIDB4MmE2NywKLQkweDEwNzgsIDB4NGRmMiwgMHgxMDc4LCAweDRhNzUsIDB4MjAwOSwgMHgwMTAwLCAweDIxMDQsIDB4YTA4MiwKLQkweDAwMDIsIDB4MDA0OCwgMHgxMGYzLCAweDEwNzgsIDB4NTdmYiwgMHgwMDc4LCAweDEwZDYsIDB4MTA3OSwKLQkweDEwZjcsIDB4MDA3OCwgMHgxMGRjLCAweDEwNzgsIDB4NmZhOSwgMHgwMDc4LCAweDEwZWIsIDB4MTEwMSwKLQkweDExMDIsIDB4MTFiZSwgMHgxMGZmLCAweDEyNDYsIDB4MTJkYywgMHgxMmRkLCAweDEyZGUsIDB4MTA3OCwKLQkweDEzMjgsIDB4MDA3YywgMHgxMjdlLCAweDBmN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHgxMTk4LCAweDEwNzgsIDB4M2E0MywgMHgyMDc5LCAweDAxMDAsIDB4Nzg0NCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxMTk4LCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4MTA3OCwKLQkweDFhYjEsIDB4NzgwZiwgMHgwMGZmLCAweDc4NDAsIDB4YTA4NCwgMHhmZmZiLCAweDc4NDIsIDB4MjAxMSwKLQkweDgwMTAsIDB4NzNjMCwgMHgxMDc4LCAweDM1NzksIDB4MjAwMSwgMHhmZmZmLCAweDEwNzgsIDB4NTk3NSwKLQkweDcyMzgsIDB4YzI4NCwgMHg3MjNhLCAweDIwMDEsIDB4YTMwYywgMHgyMDE0LCAweGMyYWMsIDB4MjIwMiwKLQkweDEwNzgsIDB4NmRiNSwgMHgyMDExLCAweDAwMDQsIDB4MTA3OCwgMHg4YTU5LCAweDEwNzgsIDB4NDdjZSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMDQwLCAweDExNDQsIDB4NzA4MywgMHgwMDAxLCAweDcwYmIsIDB4MDAwMCwKLQkweDEwNzgsIDB4M2JmNSwgMHgwMDc4LCAweDExOTgsIDB4MTA3OCwgMHg0ODk3LCAweDAwNDAsIDB4MTE0ZCwKLQkweDdhMGMsIDB4YzJiNCwgMHg3YTBlLCAweDAwNzgsIDB4MTE1OSwgMHgxMDc4LCAweDhkZGYsIDB4NzBjOCwKLQkweGQwOWMsIDB4MDBjMCwgMHgxMTU5LCAweDcwOTQsIDB4YTAwNSwgMHgwMDQwLCAweDExNTksIDB4MTA3OCwKLQkweDQxZjUsIDB4NzBkMywgMHgwMDAwLCAweDcwY2YsIDB4MDAwMCwgMHg3MmM4LCAweDIwNzksIDB4YTM1MSwKLQkweDc4MDQsIDB4ZDBhYywgMHgwMDQwLCAweDExNjUsIDB4YzI5NSwgMHg3MmNhLCAweGEyOTYsIDB4MDAwNCwKLQkweDAwNDAsIDB4MTE4NiwgMHgyMDExLCAweDAwMDEsIDB4MTA3OCwgMHg4YTU5LCAweDcwOGYsIDB4MDAwMCwKLQkweDcwOTMsIDB4ZmZmZiwgMHg3MDAzLCAweDAwMDIsIDB4MGY3ZiwgMHgxMDc4LCAweDI2MGQsIDB4MjAxMSwKLQkweDAwMDUsIDB4MTA3OCwgMHg2ZWYyLCAweDEwNzgsIDB4NjEwOSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwZTMsIDB4MDAwOCwgMHgwYzdmLCAweDEyN2YsIDB4MDA3OCwgMHgxMTlhLCAweDcwOGYsIDB4MDAwMCwKLQkweDcwOTMsIDB4ZmZmZiwgMHg3MDAzLCAweDAwMDIsIDB4MjAxMSwgMHgwMDA1LCAweDEwNzgsIDB4NmVmMiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwgMHg2MGUzLCAweDAwMDgsIDB4MGM3ZiwKLQkweDBmN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MjBhOSwgMHgwMDgyLCAweDIwMDksIDB4MDA3ZSwKLQkweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDIxMTAsIDB4MDI3ZSwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwKLQkweDcxZTAsIDB4MDI3ZiwgMHgxMDc4LCAweGExOTAsIDB4MDM3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MTA3OCwKLQkweDI5MjEsIDB4ODEwOCwgMHgwMGYwLCAweDExYTAsIDB4MGM3ZiwgMHg3MDZiLCAweDAwMDAsIDB4NzA2YywKLQkweGEwODQsIDB4MDBmZiwgMHg3MDZlLCAweDcwOTcsIDB4MDAwMCwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHgxMjQ0LCAweDcwOTAsIDB4YTA4NiwKLQkweGZmZmYsIDB4MDA0MCwgMHgxMWQxLCAweDEwNzgsIDB4MjYwZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDEyNDQsIDB4NzBjOCwgMHhkMDljLCAweDAwNDAsIDB4MTFmZCwgMHhkMDg0LCAweDAwNDAsIDB4MTFmZCwKLQkweDBmN2UsIDB4MjA3OSwgMHgwMTAwLCAweDc5MGMsIDB4YzFiNSwgMHg3OTBlLCAweDBmN2YsIDB4ZDA4YywKLQkweDAwNDAsIDB4MTFmZCwgMHg3MGNjLCAweGEwODYsIDB4ZmZmZiwgMHgwMDQwLCAweDExZjksIDB4MTA3OCwKLQkweDI3OGEsIDB4MTA3OCwgMHg2MTA5LCAweDcwYzgsIDB4ZDA5NCwgMHgwMGMwLCAweDEyNDQsIDB4MjAxMSwKLQkweDAwMDEsIDB4MjAxOSwgMHgwMDAwLCAweDEwNzgsIDB4MjdjMiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDEyNDQsIDB4NzBkMCwgMHhhMDA1LCAweDAwYzAsIDB4MTI0NCwgMHg3MDhjLCAweGEwMDUsIDB4MDBjMCwKLQkweDEyNDQsIDB4MTA3OCwgMHg0ODk3LCAweDAwYzAsIDB4MTI0NCwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwKLQkweGQwYWMsIDB4MDA0MCwgMHgxMjI3LCAweDE1N2UsIDB4MGM3ZSwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDE3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHgxMjFhLCAweDYwMDAsIDB4ZDBlYywKLQkweDAwYzAsIDB4MTIyMiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwgMHgxMjExLCAweDBjN2YsIDB4MTU3ZiwKLQkweDAwNzgsIDB4MTIyNywgMHgwMTdmLCAweDBjN2YsIDB4MTU3ZiwgMHgwMDc4LCAweDEyNDQsIDB4NzAwMywKLQkweDAwMDMsIDB4NzA5MywgMHhmZmZmLCAweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDI0ODAsIDB4MTA3OCwKLQkweDM1ZjcsIDB4MjAwMSwgMHhhNWFjLCAweDIwMDQsIDB4YTA4NiwgMHgwMDA1LCAweDAwYzAsIDB4MTIzYywKLQkweDIwMTEsIDB4MDAwMCwgMHgxMDc4LCAweDZlZjIsIDB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4NmVmYywKLQkweDEwNzgsIDB4NjEwOSwgMHgxMDc4LCAweDYxZDMsIDB4MTI3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MGY3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHgyMDA5LCAweDAwZjcsIDB4MTA3OCwKLQkweDQxZGUsIDB4Nzk0MCwgMHhhMThjLCAweDAwMTAsIDB4Nzk0MiwgMHg3OTI0LCAweGQxYjQsIDB4MDA0MCwKLQkweDEyNWIsIDB4NzgyNywgMHgwMDQwLCAweGQxOWMsIDB4MDA0MCwgMHgxMjYwLCAweDc4MjcsIDB4MDAwOCwKLQkweDAwN2UsIDB4MDM3ZSwgMHgxNTdlLCAweGEwMDYsIDB4MTA3OCwgMHg1OTc1LCAweDc5MDAsIDB4YTE4YSwKLQkweDAwMDMsIDB4MDA1MCwgMHgxMjg5LCAweDc5NTQsIDB4ZDFhYywgMHgwMGMwLCAweDEyODksIDB4MjAwOSwKLQkweDAwZjgsIDB4MTA3OCwgMHg0MWRlLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjBhOSwKLQkweDA5YzQsIDB4NzgyMCwgMHhkMDljLCAweDAwYzAsIDB4MTI4MSwgMHg3ODI0LCAweGQwYWMsIDB4MDBjMCwKLQkweDEyY2EsIDB4MDBmMCwgMHgxMjc5LCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LCAweDI0ODAsIDB4MDA3OCwKLQkweDEyZDUsIDB4Nzg1MywgMHgwMDAwLCAweDc4MmYsIDB4MDAyMCwgMHgyMGE5LCAweDAwNTAsIDB4MDBlMCwKLQkweDEyOGYsIDB4MjA5MSwgMHg2MDAwLCAweDAwZjAsIDB4MTI4ZiwgMHg3ODUzLCAweDA0MDAsIDB4NzgyZiwKLQkweDAwMDAsIDB4MjAwOSwgMHgwMGY4LCAweDEwNzgsIDB4NDFkZSwgMHgyMGE5LCAweDAwMGUsIDB4MDAwNSwKLQkweDAwZjAsIDB4MTI5ZiwgMHg3ODUzLCAweDE0MDAsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwKLQkweDIwMTksIDB4NjFhOCwgMHg3ODU0LCAweDAwMDUsIDB4MDAwNSwgMHhkMDhjLCAweDAwNDAsIDB4MTJiNCwKLQkweDc4MjQsIDB4ZDBhYywgMHgwMGMwLCAweDEyY2EsIDB4ODMxOSwgMHgwMGMwLCAweDEyYWEsIDB4MjAwOSwKLQkweGEzMzEsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4YTA4NCwgMHhmZmYwLCAweDAwNDAsIDB4MTJjNCwKLQkweDIwMGIsIDB4MDAwMCwgMHgxMDc4LCAweDI1MWUsIDB4MjAwMSwgMHgwMDAxLCAweDEwNzgsIDB4MjQ4MCwKLQkweDAwNzgsIDB4MTJkMywgMHgyMDAxLCAweGEzMzEsIDB4MjAwMywgMHgwMDAwLCAweDc4MjgsIDB4YzA5ZCwKLQkweDc4MmEsIDB4NzgyNywgMHgwMDQ4LCAweDc4NTMsIDB4MDQwMCwgMHgxNTdmLCAweDAzN2YsIDB4MDA3ZiwKLQkweDEyN2YsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MmE3MCwKLQkweDIwMDksIDB4MDEwMCwgMHgyMTA0LCAweGEwODIsIDB4MDAwMiwgMHgwMDQ4LCAweDEyZWIsIDB4NzA0ZiwKLQkweGZmZmYsIDB4MDA3OCwgMHgxMmVkLCAweDcwNGYsIDB4MDAwMCwgMHg3MDUzLCAweGZmZmYsIDB4NzA2YiwKLQkweDAwMDAsIDB4NzA2ZiwgMHgwMDAwLCAweDEwNzgsIDB4OGRkZiwgMHgyMDYxLCAweGE1OGMsIDB4NjAwMywKLQkweDA5MDksIDB4NjAwNywgMHgwMDAwLCAweDYwMGIsIDB4ODgwMCwgMHg2MDBmLCAweDAyMDAsIDB4NjAxMywKLQkweDAwZmYsIDB4NjAxNywgMHgwMDAzLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLCAweDA3ZDAsIDB4MjA2MSwKLQkweGE1OTQsIDB4NjAwMywgMHg4MDAwLCAweDYwMDcsIDB4MDAwMCwgMHg2MDBiLCAweDAwMDAsIDB4NjAwZiwKLQkweDAyMDAsIDB4NjAxMywgMHgwMGZmLCAweDYwMTcsIDB4MDAwMCwgMHg2MDFiLCAweDAwMDEsIDB4NjAxZiwKLQkweDAwMDAsIDB4MjA2MSwgMHhhNWEzLCAweDYwMDMsIDB4NTE0YywgMHg2MDA3LCAweDRmNDcsIDB4NjAwYiwKLQkweDQ5NDMsIDB4NjAwZiwgMHgyMDIwLCAweDIwMDEsIDB4YTMyNSwgMHgyMDAzLCAweDAwMDAsIDB4MDA3YywKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDY4LCAweDEzMmEsIDB4MDA3ZSwgMHgwMTdlLCAweDIwNzksIDB4MDAwMCwKLQkweDc4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDEzMzAsIDB4MDE3ZiwgMHg3OTJlLCAweDAwN2YsIDB4NzgyYSwKLQkweDAwN2YsIDB4NzgyNiwgMHgzOTAwLCAweDc4M2EsIDB4NzgyMywgMHg4MDAyLCAweDc4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NTAwMCwgMHgyMDkxLCAweDQwODAsIDB4MjA3OSwgMHhhMzAwLCAweDc4MDMsIDB4MDAwNSwKLQkweDAwNzgsIDB4MTM0OCwgMHgwMDdjLCAweDIwNzEsIDB4YTMwMCwgMHg3MTU4LCAweDcxMmUsIDB4MjAyMSwKLQkweDAwMDEsIDB4YTE5MCwgMHgwMDJkLCAweGEyOTgsIDB4MDAyZCwgMHgwMDQ4LCAweDEzNjEsIDB4NzA1YywKLQkweGEzMDIsIDB4MDBjOCwgMHgxMzYxLCAweDIyMGEsIDB4MjIwOCwgMHgyMzEwLCAweDg0MjAsIDB4MDA3OCwKLQkweDEzNTMsIDB4MjAwYiwgMHgwMDAwLCAweDc0YTYsIDB4NzRhYSwgMHgwMDdjLCAweDBlN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzBhOCwgMHhhMGVhLCAweDAwMTAsIDB4MDBjOCwKLQkweDEzNzQsIDB4YTA2ZSwgMHgwMDc4LCAweDEzN2UsIDB4ODAwMSwgMHg3MGFhLCAweDcwMmMsIDB4MjA2OCwKLQkweDJkMDQsIDB4NzAyZSwgMHgyMDZiLCAweDAwMDAsIDB4NjgwNywgMHgwMDAwLCAweDEyN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzBhOCwKLQkweDgwMDEsIDB4MDBjOCwgMHgxMzhlLCAweGEwNmUsIDB4MDA3OCwgMHgxMzk3LCAweDcwYWEsIDB4NzAyYywKLQkweDIwNjgsIDB4MmQwNCwgMHg3MDJlLCAweDIwNmIsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4MTI3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTMwMCwKLQkweDcwMmMsIDB4MjA2YSwgMHgyZDAwLCAweDcwMmUsIDB4NzBhOCwgMHg4MDAwLCAweDcwYWEsIDB4MTI3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHg4ZGZmLCAweDAwNDAsIDB4MTNiNiwgMHg2ODA0LCAweDY4MDcsIDB4MDAwMCwKLQkweDAwN2UsIDB4MTA3OCwgMHgxMzlhLCAweDBkN2YsIDB4MDA3OCwgMHgxM2FhLCAweDAwN2MsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTMwMCwgMHg3MGE4LCAweGEwOGEsIDB4MDAxMCwgMHhhMDBkLCAweDBlN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MjA3MSwgMHhhNWQwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDFiLCAweDAwMDAsIDB4NzAxZiwKLQkweDAwMDAsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTAsIDB4YTA4NSwgMHg4MDA0LCAweDcwMTIsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMjcwLCAweDcwMGIsIDB4MDAwMCwgMHgyMDcxLCAweGE1ZDAsIDB4NzAxOCwKLQkweGEwODgsIDB4YTVkOSwgMHgyMjBhLCAweDgwMDAsIDB4YTA4NCwgMHgwMDA3LCAweDcwMWEsIDB4NzAwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxM2U5LCAweDBmN2UsIDB4MjA3OSwgMHgwMDEwLCAweDEwNzgsIDB4MTNmYSwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhNWQwLCAweDcwMDQsIDB4YTAwNSwKLQkweDAwYzAsIDB4MTNmOCwgMHgwZjdlLCAweDIwNzksIDB4MDAxMCwgMHgxMDc4LCAweDEzZmEsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHg3MDAwLCAweDAwNzksIDB4MTNmZCwgMHgxNDAxLCAweDE0NmIsIDB4MTQ4OCwKLQkweDE0ODgsIDB4NzAxOCwgMHg3MTFjLCAweGExMDYsIDB4MDBjMCwgMHgxNDA5LCAweDcwMDcsIDB4MDAwMCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHhhMTgwLCAweGE1ZDksIDB4MjAwNCwgMHg3MDBhLCAweDIwNjgsIDB4ODEwOCwKLQkweGExOGMsIDB4MDAwNywgMHg3MTFlLCAweDc4MDMsIDB4MDAyNiwgMHg2ODI0LCAweDc4MzIsIDB4NjgyOCwKLQkweDc4MzYsIDB4NjgyYywgMHg3ODNhLCAweDY4MzAsIDB4NzgzZSwgMHg2ODEwLCAweDcwMGUsIDB4NjgwYywKLQkweDcwMTYsIDB4NjgwNCwgMHgwZDdmLCAweGQwODQsIDB4MDA0MCwgMHgxNDJiLCAweDcwMDcsIDB4MDAwMSwKLQkweDEwNzgsIDB4MTQzMCwgMHgwMDdjLCAweDcwMDcsIDB4MDAwMiwgMHgxMDc4LCAweDE0NDYsIDB4MDA3YywKLQkweDAxN2UsIDB4MDI3ZSwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHhhMTgyLCAweDAwNDAsIDB4MDBjOCwKLQkweDE0M2IsIDB4MjExMCwgMHhhMDA2LCAweDcwMGUsIDB4NzIxMiwgMHg4MjAzLCAweDc4MjIsIDB4NzgwMywKLQkweDAwMjAsIDB4NzgwMywgMHgwMDQxLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MDI3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDcwMTQsIDB4MjA5OCwgMHgyMGExLCAweDAwMTQsIDB4NzgwMywKLQkweDAwMjYsIDB4NzEwYywgMHgyMDExLCAweDAwNDAsIDB4YTE4MiwgMHgwMDQwLCAweDAwYzgsIDB4MTQ1YSwKLQkweDIxMTAsIDB4YTAwNiwgMHg3MDBlLCAweDIyYTgsIDB4NTNhNiwgMHg4MjAzLCAweDc4MjIsIDB4NzgwMywKLQkweDAwMjAsIDB4MzMwMCwgMHg3MDE2LCAweDc4MDMsIDB4MDAwMSwgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwKLQkweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDIwOTksIDB4YTNmOSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwNDEsIDB4NzAwNywgMHgwMDAzLCAweDcwMDAsIDB4YzA4NCwKLQkweDcwMDIsIDB4NzAwYiwgMHhhM2Y0LCAweDEyN2YsIDB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MDA3YywKLQkweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDIwMDEsIDB4YTQyOCwgMHgyMDljLCAweDIwYTEsIDB4MDAxNCwKLQkweDc4MDMsIDB4MDAyNiwgMHgyMDAxLCAweGE0MjksIDB4MjBhYywgMHg1M2E2LCAweDIwOTksIDB4YTQyYSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDA0LCAweDcwMDAsIDB4YzA4YywKLQkweDcwMDIsIDB4NzAwYiwgMHhhNDI1LCAweDEyN2YsIDB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MDA3YywKLQkweDAxN2UsIDB4MGU3ZSwgMHgyMDcxLCAweGE1ZDAsIDB4MGY3ZSwgMHgyMDc5LCAweDAwMTAsIDB4NzkwNCwKLQkweDc4MDMsIDB4MDAwMiwgMHhkMWZjLCAweDAwNDAsIDB4MTRjMiwgMHhhMThjLCAweDA3MDAsIDB4NzAwNCwKLQkweDEwNzksIDB4MTRjNiwgMHgwZjdmLCAweDBlN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDEzZmEsIDB4MTRjZSwKLQkweDE0ZmIsIDB4MTUyMywgMHgxNTU2LCAweDE0Y2MsIDB4MDA3OCwgMHgxNGNjLCAweGExOGMsIDB4MDcwMCwKLQkweDAwYzAsIDB4MTRmNCwgMHgxMzdlLCAweDE0N2UsIDB4MTU3ZSwgMHg3MDE0LCAweDIwYTAsIDB4MjA5OSwKLQkweDAwMTQsIDB4NzgwMywgMHgwMDQwLCAweDcwMTAsIDB4MjBhOCwgMHg1M2E1LCAweDM0MDAsIDB4NzAxNiwKLQkweDE1N2YsIDB4MTQ3ZiwgMHgxMzdmLCAweDcwMGMsIDB4YTAwNSwgMHgwMDQwLCAweDE1MTAsIDB4MTA3OCwKLQkweDE0MzAsIDB4MDA3YywgMHg3MDA4LCAweGEwODAsIDB4MDAwMiwgMHgyMDAzLCAweDAxMDAsIDB4NzAwNywKLQkweDAwMDAsIDB4MTA3OCwgMHgxM2ZhLCAweDAwN2MsIDB4NzAwOCwgMHhhMDgwLCAweDAwMDIsIDB4MjAwMywKLQkweDAyMDAsIDB4MDA3OCwgMHgxNGVmLCAweGExOGMsIDB4MDcwMCwgMHgwMGMwLCAweDE1MDYsIDB4NzAwYywKLQkweGEwMDUsIDB4MDA0MCwgMHgxNTEwLCAweDEwNzgsIDB4MTQ0NiwgMHgwMDdjLCAweDcwMDgsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjAwMywgMHgwMjAwLCAweDcwMDcsIDB4MDAwMCwgMHgxMDc4LCAweDEzZmEsIDB4MDA3YywKLQkweDBkN2UsIDB4NzAwOCwgMHgyMDY4LCAweDc4MzAsIDB4NjgyNiwgMHg3ODM0LCAweDY4MmEsIDB4NzgzOCwKLQkweDY4MmUsIDB4NzgzYywgMHg2ODMyLCAweDY4MGIsIDB4MDEwMCwgMHgwZDdmLCAweDcwMDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4MTNmYSwgMHgwMDdjLCAweGExOGMsIDB4MDcwMCwgMHgwMGMwLCAweDE1NTAsIDB4MTM3ZSwKLQkweDE0N2UsIDB4MTU3ZSwgMHgyMDAxLCAweGEzZjcsIDB4MjAwNCwgMHhhMDgwLCAweDAwMGQsIDB4MjBhMCwKLQkweDIwOTksIDB4MDAxNCwgMHg3ODAzLCAweDAwNDAsIDB4MjBhOSwgMHgwMDIwLCAweDUzYTUsIDB4MjAwMSwKLQkweGEzZjksIDB4MjAwNCwgMHhkMGJjLCAweDAwNDAsIDB4MTU0NiwgMHgyMDAxLCAweGE0MDIsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAwZCwgMHgyMGEwLCAweDIwYTksIDB4MDAyMCwgMHg1M2E1LCAweDE1N2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4NzAwNywgMHgwMDAwLCAweDEwNzgsIDB4NGU5YiwgMHgxMDc4LCAweDEzZmEsIDB4MDA3YywKLQkweDIwMTEsIDB4ODAwMywgMHgxMDc4LCAweDM1NzksIDB4MDA3OCwgMHgxNTU0LCAweGExOGMsIDB4MDcwMCwKLQkweDAwYzAsIDB4MTU2MywgMHgyMDAxLCAweGE0MjcsIDB4MjAwMywgMHgwMTAwLCAweDcwMDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4MTNmYSwgMHgwMDdjLCAweDIwMTEsIDB4ODAwNCwgMHgxMDc4LCAweDM1NzksIDB4MDA3OCwKLQkweDE1NjcsIDB4MTI3ZSwgMHgyMDkxLCAweDIxMDAsIDB4MjA3OSwgMHgwMDMwLCAweDIwNzEsIDB4YTVlMSwKLQkweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NzAwZiwgMHhhNWU3LCAweDcwMTMsIDB4YTVlNywKLQkweDc4MGYsIDB4MDA3NiwgMHg3ODAzLCAweDAwMDQsIDB4MTI3ZiwgMHgwMDdjLCAweDY5MzQsIDB4YTE4NCwKLQkweDAwMDcsIDB4MDA3OSwgMHgxNTgzLCAweDE1OGIsIDB4MTVkMSwgMHgxNThiLCAweDE1OGIsIDB4MTU4YiwKLQkweDE1YjYsIDB4MTU5YSwgMHgxNThmLCAweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDE1ZWIsIDB4Njg0YywKLQkweGQwYmMsIDB4MDA0MCwgMHgxNThiLCAweDY4NjAsIDB4NjgyZSwgMHg2ODVjLCAweDY4MmEsIDB4Njg1OCwKLQkweDAwNzgsIDB4MTVkOSwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDFlLCAweDAwYzAsIDB4MTU4YiwKLQkweDY4NGMsIDB4ZDBiYywgMHgwMDQwLCAweDE1OGIsIDB4Njg2MCwgMHg2ODJlLCAweDY4NWMsIDB4NjgyYSwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweDY4NTgsIDB4MDA3OCwgMHgxNWUxLCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNSwgMHgwMGMwLCAweDE1OGIsIDB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4MTU4YiwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweGEwMDYsIDB4NjgyZSwgMHg2ODJhLCAweDY4NTgsIDB4MDA3OCwKLQkweDE1ZTEsIDB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4MTU4YiwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwKLQkweDY4NTgsIDB4YTE4YywgMHgwMDBmLCAweGExODgsIDB4MjAxNSwgMHgyMTBjLCAweDY5MzIsIDB4MmQwOCwKLQkweDY5MWEsIDB4NjgyNiwgMHg2ODRjLCAweGMwZGQsIDB4Njg0ZSwgMHhhMDA2LCAweDY4MGEsIDB4Njk3YywKLQkweDY5MTIsIDB4Njk4MCwgMHg2OTE2LCAweDAwN2MsIDB4MjBlMSwgMHgwMDA3LCAweDIwZTEsIDB4MjAwMCwKLQkweDIwMDEsIDB4MDIwYSwgMHgyMDA0LCAweDgyZmYsIDB4MDA0MCwgMHgxNjBlLCAweGEyODAsIDB4MDAwNCwKLQkweDBkN2UsIDB4MjA2YywgMHg2ODRjLCAweGQwZGMsIDB4MDBjMCwgMHgxNjBhLCAweDEwNzgsIDB4MTU3ZSwKLQkweDAwNDAsIDB4MTYwYSwgMHgwZDdmLCAweGEyODAsIDB4MDAwMCwgMHgyMDAzLCAweDAwMDIsIDB4YTAxNiwKLQkweDAwNzgsIDB4MTYwZSwgMHg2ODA4LCAweDgwMDAsIDB4NjgwYSwgMHgwZDdmLCAweDEyN2UsIDB4MDQ3ZSwKLQkweDAzN2UsIDB4MDI3ZSwgMHgyMDkxLCAweDIxMDAsIDB4MDI3ZiwgMHgwMzdmLCAweDA0N2YsIDB4NzAwMCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxNjIyLCAweDcyMDYsIDB4MjAwMSwgMHgxNjQzLCAweDAwN2UsIDB4MjI2MCwKLQkweDAwNzgsIDB4MTdiZSwgMHg3MTBjLCAweDIyMGEsIDB4ODEwOCwgMHgyMzBhLCAweDgxMDgsIDB4MjQwYSwKLQkweDgxMDgsIDB4YTE4MiwgMHhhNjAyLCAweDAwNDgsIDB4MTYyZiwgMHgyMDA5LCAweGE1ZTcsIDB4NzEwZSwKLQkweDcwMTAsIDB4YTEwMiwgMHhhMDgyLCAweDAwMDksIDB4MDA0MCwgMHgxNjNhLCAweGEwODAsIDB4MDAxYiwKLQkweDAwYzAsIDB4MTYzZCwgMHgyMDA5LCAweDAxMzgsIDB4MjAwYSwgMHg3MDAwLCAweGEwMDUsIDB4MDBjMCwKLQkweDE2NDMsIDB4MTA3OCwgMHgxNzlmLCAweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDAyN2UsIDB4MDM3ZSwKLQkweDBjN2UsIDB4MDA3ZSwgMHgyMDkxLCAweDIxMDAsIDB4MDA3ZiwgMHgwNDdmLCAweDAzN2YsIDB4MDI3ZiwKLQkweDBkN2UsIDB4MGM3ZSwgMHgyNDYwLCAweDYxMTAsIDB4MjE2OCwgMHg2YTYyLCAweDZiNWUsIDB4YTAwNSwKLQkweDAwNDAsIDB4MTZjZiwgMHg2ODA4LCAweGEwMDUsIDB4MDA0MCwgMHgxNzNjLCAweDcwMDAsIDB4YTAwNSwKLQkweDAwYzAsIDB4MTY2NCwgMHgwMDc4LCAweDE2YzQsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDBjMCwKLQkweDE3NDUsIDB4NzAwNCwgMHhhNDA2LCAweDAwYzAsIDB4MTZjNCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwKLQkweGQwOGMsIDB4MDA0MCwgMHgxNjgxLCAweDA0N2UsIDB4MTA3OCwgMHgxOGUyLCAweDA0N2YsIDB4MjQ2MCwKLQkweDYwMTAsIDB4YTA4MCwgMHgwMDAyLCAweDIwMDQsIDB4YTAwNSwgMHgwMDQwLCAweDE3M2MsIDB4MDA3OCwKLQkweDE2NWUsIDB4MjAwMSwgMHgwMjA3LCAweDIwMDQsIDB4ZDA5YywgMHgwMGMwLCAweDE2NmQsIDB4NzgwNCwKLQkweGEwODQsIDB4NjAwMCwgMHgwMDQwLCAweDE2OTIsIDB4YTA4NiwgMHg2MDAwLCAweDAwNDAsIDB4MTY5MiwKLQkweDAwNzgsIDB4MTY2ZCwgMHg3MTAwLCAweGExODYsIDB4MDAwMiwgMHgwMGMwLCAweDE2YjIsIDB4MGU3ZSwKLQkweDJiNjgsIDB4NjgxOCwgMHgyMDYwLCAweDEwNzgsIDB4MWZlYSwgMHgyODA0LCAweGFjNzAsIDB4NjAzNCwKLQkweGQwOWMsIDB4MDBjMCwgMHgxNmE3LCAweDcxMDgsIDB4NzIwYywgMHgwMDc4LCAweDE2YTksIDB4NzExMCwKLQkweDcyMTQsIDB4NjgxMCwgMHhhMTAwLCAweDY4MTIsIDB4NjgxNCwgMHhhMjAxLCAweDY4MTYsIDB4MGU3ZiwKLQkweDAwNzgsIDB4MTZiNiwgMHhhMTg2LCAweDAwMDEsIDB4MDBjMCwgMHgxNmJlLCAweDc4MjAsIDB4NjkxMCwKLQkweGExMDAsIDB4NjgxMiwgMHg3ODI0LCAweDY5MTQsIDB4YTEwMSwgMHg2ODE2LCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4NjEwMCwgMHhhMThlLCAweDAwMDQsIDB4MDBjMCwKLQkweDE3NDUsIDB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDE3NDUsIDB4NjgwOCwKLQkweGEwMDUsIDB4MDA0MCwgMHgxNzNjLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDE2ZDksIDB4MDA3OCwKLQkweDE3M2MsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDBjMCwgMHgxNmUyLCAweDcwMDQsIDB4YTQwNiwKLQkweDAwYzAsIDB4MTczYywgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMDhjLCAweDAwNDAsIDB4MTZmNiwKLQkweDA0N2UsIDB4MTA3OCwgMHgxOGUyLCAweDA0N2YsIDB4MjQ2MCwgMHg2MDEwLCAweGEwODAsIDB4MDAwMiwKLQkweDIwMDQsIDB4YTAwNSwgMHgwMDQwLCAweDE3M2MsIDB4MDA3OCwgMHgxNmQzLCAweDIwMDEsIDB4MDIwNywKLQkweDIwMDQsIDB4ZDA5YywgMHgwMGMwLCAweDE2ZTIsIDB4MjAwMSwgMHgwMDA1LCAweDIwMDQsIDB4ZDA4YywKLQkweDAwYzAsIDB4MTZlOCwgMHg3ODA0LCAweGEwODQsIDB4NjAwMCwgMHgwMDQwLCAweDE3MGQsIDB4YTA4NiwKLQkweDYwMDAsIDB4MDA0MCwgMHgxNzBkLCAweDAwNzgsIDB4MTZlMiwgMHg3MDA3LCAweDAwMDAsIDB4YTAxNiwKLQkweDIyMTgsIDB4NzAwMCwgMHhhMDhlLCAweDAwMDEsIDB4MDA0MCwgMHgxNzJlLCAweGEwOGUsIDB4MDAwMiwKLQkweDAwYzAsIDB4MTczYywgMHgwYzdlLCAweDBlN2UsIDB4NjgxOCwgMHgyMDYwLCAweDEwNzgsIDB4MWZlYSwKLQkweDI4MDQsIDB4YWM3MCwgMHg2MDM0LCAweGQwOWMsIDB4MDBjMCwgMHgxNzJhLCAweDczMDgsIDB4NzIwYywKLQkweDAwNzgsIDB4MTcyYywgMHg3MzEwLCAweDcyMTQsIDB4MGU3ZiwgMHgwYzdmLCAweDc4MjAsIDB4YTMxOCwKLQkweDc4MjQsIDB4YTIxMSwgMHg2ODEwLCAweGEzMDAsIDB4NjgxMiwgMHg2ODE0LCAweGEyMDEsIDB4NjgxNiwKLQkweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NjEwMCwgMHhhMThlLCAweDAwMDQsIDB4MDBjMCwKLQkweDE3NDUsIDB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4NzU2YywgMHgwYzdmLCAweDBkN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgwNDdlLCAweDEwNzgsIDB4MWFmNywKLQkweDAyN2UsIDB4MjA3MSwgMHhhNWUxLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4MTc5MCwKLQkweDcwMDQsIDB4YWMwNiwgMHgwMGMwLCAweDE3ODEsIDB4MjA3OSwgMHgwMDMwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHgxNzgxLCAweDc4MDQsIDB4ZDBmYywgMHgwMGMwLCAweDE3N2QsIDB4MjAwMSwKLQkweDAyMDcsIDB4MjAwNCwgMHhkMDljLCAweDAwYzAsIDB4MTc2MywgMHg3ODAzLCAweDAwMDQsIDB4NzgwNCwKLQkweGQwYWMsIDB4MDBjMCwgMHgxNzZmLCAweDc4MDMsIDB4MDAwMiwgMHg3ODAzLCAweDAwMDksIDB4NzAwMywKLQkweDAwMDMsIDB4NzAwNywgMHgwMDAwLCAweDAwNzgsIDB4MTc4MSwgMHgxMDc4LCAweDE4ZTIsIDB4MDA3OCwKLQkweDE3NTMsIDB4MTU3ZSwgMHgyMGE5LCAweDAwMDksIDB4MjAwOSwgMHhhNWU3LCAweDIxMDQsIDB4YWMwNiwKLQkweDAwYzAsIDB4MTc4YiwgMHgyMDBhLCAweGExODgsIDB4MDAwMywgMHgwMGYwLCAweDE3ODYsIDB4MTU3ZiwKLQkweDAyN2YsIDB4MjAwMSwgMHgwMTVkLCAweDIwMWMsIDB4ODMxYSwgMHgyMzAyLCAweDIwMDEsIDB4MDEzOCwKLQkweDIyMDIsIDB4MDQ3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4NzAwYywKLQkweDcxMTAsIDB4YTEwNiwgMHgwMGMwLCAweDE3YTcsIDB4NzAwMywgMHgwMDAwLCAweDAwN2MsIDB4MjEwNCwKLQkweDcwMDYsIDB4MjA2MCwgMHg4MTA4LCAweDIxMWMsIDB4ODEwOCwgMHgyMTI0LCAweDgxMDgsIDB4YTE4MiwKLQkweGE2MDIsIDB4MDA0OCwgMHgxN2I1LCAweDIwMDksIDB4YTVlNywgMHg3MTEyLCAweDcwMGMsIDB4YTEwNiwKLQkweDAwYzAsIDB4MTdiZSwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDA4LCAweDhjZmYsIDB4MDBjMCwKLQkweDE3YzUsIDB4MTA3OCwgMHgxYjIyLCAweDAwNzgsIDB4MTgyMywgMHg2MDEwLCAweDIwNjgsIDB4MmQ1OCwKLQkweDY4MjgsIDB4YTQwNiwgMHgwMGMwLCAweDE3ZDAsIDB4NjgyYywgMHhhMzA2LCAweDAwNDAsIDB4MTdmZSwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA4LCAweDAwNDAsIDB4MTdmZSwgMHg2MDI0LCAweGQwZjQsIDB4MDBjMCwKLQkweDE3ZmEsIDB4ZDBkNCwgMHgwMDQwLCAweDE3ZjYsIDB4NjAzOCwgMHhhNDAyLCAweDYwMzQsIDB4YTMwMywKLQkweDAwNDAsIDB4MTdlNCwgMHgwMGM4LCAweDE3ZjYsIDB4NjQzYSwgMHg2MzM2LCAweDZjMmEsIDB4NmIyZSwKLQkweDA0N2UsIDB4MDM3ZSwgMHgyNDAwLCAweDZjN2MsIDB4YTQwMiwgMHg2ODEyLCAweDIzMDAsIDB4NmI4MCwKLQkweGEzMDMsIDB4NjgxNiwgMHgwMzdmLCAweDA0N2YsIDB4MDA3OCwgMHgxN2ZhLCAweDEwNzgsIDB4OGQ4ZSwKLQkweDAwNDAsIDB4MTdjMSwgMHgxMDc4LCAweDIwMzUsIDB4MDBjMCwgMHgxN2MxLCAweDBjN2UsIDB4NzAwNCwKLQkweDIwNjAsIDB4NjAyNCwgMHhjMGQ0LCAweDYwMjYsIDB4MGM3ZiwgMHg2ODRjLCAweGQwZjQsIDB4MDA0MCwKLQkweDE4MGYsIDB4NjgxNywgMHhmZmZmLCAweDY4MTMsIDB4ZmZmZiwgMHgwMDc4LCAweDE3YzEsIDB4NjgyNCwKLQkweDIwNTAsIDB4NjgxOCwgMHgyMDYwLCAweDY4MzAsIDB4MjA0MCwgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwKLQkweDIwMDksIDB4MDAxMSwgMHgxMDc4LCAweDE4MjQsIDB4MDA0MCwgMHgxODIyLCAweDIwMDksIDB4MDAwMSwKLQkweDEwNzgsIDB4MTgyNCwgMHgyZDU4LCAweDAwN2MsIDB4OGFmZiwgMHgwMDQwLCAweDE4YmIsIDB4YTAzZSwKLQkweDI3MzAsIDB4Njg1MCwgMHhkMGZjLCAweDAwYzAsIDB4MTg0NiwgMHhkMGY0LCAweDAwYzAsIDB4MTg1NiwKLQkweDBkN2UsIDB4MjgwNCwgMHhhYzY4LCAweDI5MDAsIDB4MDA3OSwgMHgxODM2LCAweDE4OWQsIDB4MTg1ZCwKLQkweDE4NWQsIDB4MTg5ZCwgMHgxODlkLCAweDE4OTUsIDB4MTg5ZCwgMHgxODVkLCAweDE4OWQsIDB4MTg2MywKLQkweDE4NjMsIDB4MTg5ZCwgMHgxODlkLCAweDE4OWQsIDB4MTg4YywgMHgxODYzLCAweGMwZmMsIDB4Njg1MiwKLQkweDZiNmMsIDB4NmE3MCwgMHg2ZDFjLCAweDZjMjAsIDB4MGQ3ZSwgMHhkOTljLCAweDAwNDAsIDB4MThhMCwKLQkweDI4MDQsIDB4YWM2OCwgMHg2ZjA4LCAweDZlMGMsIDB4MDA3OCwgMHgxOGEwLCAweGMwZjQsIDB4Njg1MiwKLQkweDZiNmMsIDB4NmE3MCwgMHgwZDdlLCAweDAwNzgsIDB4MThhNywgMHg2YjA4LCAweDZhMGMsIDB4NmQwMCwKLQkweDZjMDQsIDB4MDA3OCwgMHgxOGEwLCAweDdiMGMsIDB4ZDNiYywgMHgwMDQwLCAweDE4ODQsIDB4NzAwNCwKLQkweDBlN2UsIDB4MjA3MCwgMHg3MDFjLCAweDBlN2YsIDB4YTA4NiwgMHgwMDA4LCAweDAwYzAsIDB4MTg4NCwKLQkweDdiMDgsIDB4YTM5YywgMHgwZmZmLCAweDJkMjAsIDB4MGQ3ZiwgMHgwZDdlLCAweDZhMTQsIDB4ODJmZiwKLQkweDAwYzAsIDB4MTg3ZiwgMHg2ODEwLCAweGEzMDIsIDB4MDA0OCwgMHgxODdmLCAweDZiMTAsIDB4MjAxMSwKLQkweDAwMDAsIDB4MjQ2OCwgMHgwMDc4LCAweDE4ODYsIDB4NmIxMCwgMHg2YTE0LCAweDZkMDAsIDB4NmMwNCwKLQkweDZmMDgsIDB4NmUwYywgMHgwMDc4LCAweDE4YTAsIDB4MGQ3ZiwgMHgwZDdlLCAweDY4MzQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDFlLCAweDAwYzAsIDB4MTg5ZCwgMHgwZDdmLCAweDEwNzgsIDB4MWZkMSwKLQkweDAwYzAsIDB4MTgyNCwgMHhhMDBlLCAweDAwNzgsIDB4MThiYiwgMHgwZDdmLCAweDEwNzgsIDB4MTMyOCwKLQkweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwgMHg3ZTNlLCAweDc5MDIsIDB4NzAwMCwKLQkweDgwMDAsIDB4NzAwMiwgMHgwZDdmLCAweDY4MjgsIDB4YTMwMCwgMHg2ODJhLCAweDY4MmMsIDB4YTIwMSwKLQkweDY4MmUsIDB4MjMwMCwgMHg2YjEwLCAweGEzMDIsIDB4NjgxMiwgMHgyMjAwLCAweDZhMTQsIDB4YTIwMywKLQkweDY4MTYsIDB4MTA3OCwgMHgxZmQxLCAweDAwN2MsIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4MWM1MiwKLQkweDcwMDQsIDB4MjA2MCwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHg3MDAzLCAweDAwMDAsIDB4MTA3OCwKLQkweDFhYzYsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4MThkYiwgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwKLQkweDY5N2MsIDB4NjkxMiwgMHg2OTgwLCAweDY5MTYsIDB4NjgyYiwgMHhmZmZmLCAweDY4MmYsIDB4ZmZmZiwKLQkweDY4NTAsIDB4YzBiZCwgMHg2ODUyLCAweDBkN2YsIDB4MTA3OCwgMHg4NzU4LCAweDAwNzgsIDB4MWFhZCwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMjdlLCAweDIwOTEsIDB4MjEwMCwgMHgwMDdlLCAweDAxN2UsIDB4MmI2OCwKLQkweDY4MTgsIDB4MjA2MCwgMHg3OTA0LCAweDc4MDMsIDB4MDAwMiwgMHhhMTg0LCAweDA3MDAsIDB4MDBjMCwKLQkweDE4YmUsIDB4YTE4NCwgMHgwMDAzLCAweGEwODYsIDB4MDAwMywgMHgwMDQwLCAweDE4ZTAsIDB4NzAwMCwKLQkweDAwNzksIDB4MThmYSwgMHgxOTAyLCAweDE5MDQsIDB4MWEwNiwgMHgxYTg0LCAweDFhOWIsIDB4MTkwMiwKLQkweDE5MDIsIDB4MTkwMiwgMHgxMDc4LCAweDEzMjgsIDB4ODAwMSwgMHg3MDAyLCAweGExODQsIDB4MDg4MCwKLQkweDAwYzAsIDB4MTkxOSwgMHg4YWZmLCAweDAwNDAsIDB4MTk5YiwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwKLQkweDE4MjQsIDB4MDA0MCwgMHgxYWFkLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDE4MjQsIDB4MDA3OCwKLQkweDFhYWQsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHhkMWJjLCAweDAwYzAsIDB4MTk3OSwKLQkweDAyN2UsIDB4MDM3ZSwgMHg3ODA4LCAweGQwZWMsIDB4MDBjMCwgMHgxOTMwLCAweDdjMjAsIDB4N2QyNCwKLQkweDdlMzAsIDB4N2YzNCwgMHg3ODAzLCAweDAwMDksIDB4NzAwMywgMHgwMDA0LCAweDAwNzgsIDB4MTkzMiwKLQkweDEwNzgsIDB4MWI5ZiwgMHg2YjI4LCAweDZhMmMsIDB4MjQwMCwgMHg2ODZlLCAweGEzMWEsIDB4MjUwMCwKLQkweDY4NzIsIDB4YTIxMywgMHg2YjJhLCAweDZhMmUsIDB4MGM3ZSwgMHg3MDA0LCAweDIwNjAsIDB4NjAyNCwKLQkweGQwZjQsIDB4MDBjMCwgMHgxOTQ1LCAweDYzM2EsIDB4NjIzNiwgMHgwYzdmLCAweDI0MDAsIDB4NjkxMCwKLQkweGExMDAsIDB4NjgxMiwgMHgyNTAwLCAweDY5MTQsIDB4YTEwMSwgMHg2ODE2LCAweDAzN2YsIDB4MDI3ZiwKLQkweDI2MDAsIDB4NjgxZSwgMHgyNzAwLCAweDY4MjIsIDB4MTA3OCwgMHgxZmVhLCAweDJhMDAsIDB4NjgyNiwKLQkweDJjMDAsIDB4NjgxYSwgMHgyODAwLCAweDY4MzIsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHgwMGMwLCAweDE5NmUsIDB4Njg0YywgMHhkMGU0LCAweDAwNDAsIDB4MTk2ZSwKLQkweDcwMDQsIDB4MjA2MCwgMHgyMDA5LCAweDAwNDgsIDB4MTA3OCwgMHg3NTZjLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHgxYWFkLCAweDcwMDMsIDB4MDAwMCwgMHgxMDc4LCAweDE3OWYsIDB4MDA3OCwKLQkweDFhYWQsIDB4MDU3ZSwgMHg3ZDBjLCAweGQ1YmMsIDB4MDBjMCwgMHgxOTgwLCAweDEwNzgsIDB4YTIwYywKLQkweDA1N2YsIDB4MTA3OCwgMHgxYWM2LCAweDBmN2UsIDB4NzAwNCwgMHgyMDc4LCAweDEwNzgsIDB4NDg5MywKLQkweDAwNDAsIDB4MTk4ZCwgMHg3ODI0LCAweGMwZjUsIDB4NzgyNiwgMHgwZjdmLCAweDY4MmIsIDB4ZmZmZiwKLQkweDY4MmYsIDB4ZmZmZiwgMHg2ODA4LCAweDgwMDEsIDB4NjgwYSwgMHg2OTdjLCAweDY5MTIsIDB4Njk4MCwKLQkweDY5MTYsIDB4MDA3OCwgMHgxYWFkLCAweDcwMDQsIDB4MGM3ZSwgMHgyMDYwLCAweDYwMjQsIDB4MGM3ZiwKLQkweGQwZjQsIDB4MDA0MCwgMHgxOWE4LCAweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDAwNzgsIDB4MWFhZCwKLQkweDY4NGMsIDB4YzBmNSwgMHg2ODRlLCAweDc4MTQsIDB4YTAwNSwgMHgwMGMwLCAweDE5YzAsIDB4NzAwMywKLQkweDAwMDAsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MDBjMCwgMHgxOWJjLCAweDcwMDQsIDB4MjA2MCwKLQkweDIwMDksIDB4MDA0OCwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwgMHgxNzlmLCAweDAwNzgsIDB4MWFhZCwKLQkweDc4MTQsIDB4NjkxMCwgMHhhMTAyLCAweDY4MTIsIDB4NjkxNCwgMHhhMTgzLCAweDAwMDAsIDB4NjgxNiwKLQkweDc4MTQsIDB4NzkwOCwgMHhhMThjLCAweDBmZmYsIDB4YTE4OCwgMHgwMDA3LCAweDgxMTQsIDB4ODIxNCwKLQkweDgyMTQsIDB4YTEwYSwgMHg4MTA0LCAweDgwMDQsIDB4ODAwNCwgMHhhMjBhLCAweDgxMGIsIDB4ODEwYiwKLQkweDgxMGIsIDB4MTA3OCwgMHgxYjRkLCAweDc4MDMsIDB4MDAwNCwgMHg3ODBmLCAweGZmZmYsIDB4NzgwMywKLQkweDAwMDEsIDB4NzgwNCwgMHhkMGZjLCAweDAwNDAsIDB4MTllMSwgMHg3ODAzLCAweDAwMDIsIDB4NzgwMywKLQkweDAwMDQsIDB4NzgwZiwgMHgwMDc2LCAweDcwMDQsIDB4NzAwNywgMHgwMDAwLCAweDIwNjAsIDB4MjAwOSwKLQkweDAwNDgsIDB4MTA3OCwgMHg3NTZjLCAweDEwNzgsIDB4MWI4MSwgMHgwMDQwLCAweDE5YmMsIDB4NzkwOCwKLQkweGQxZWMsIDB4MDBjMCwgMHgxOWZmLCAweDIwMDksIDB4MDAwOSwgMHgwMDc4LCAweDFhMDEsIDB4MjAwOSwKLQkweDAwMTksIDB4NzkwMiwgMHg3MDAzLCAweDAwMDMsIDB4MDA3OCwgMHgxYWFkLCAweDgwMDEsIDB4NzAwMiwKLQkweGQxOTQsIDB4MDA0MCwgMHgxYTE4LCAweDc4MDQsIDB4ZDBmYywgMHgwMGMwLCAweDE4ZWEsIDB4OGFmZiwKLQkweDAwNDAsIDB4MWFhZCwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwgMHgxODI0LCAweDAwNzgsIDB4MWFhZCwKLQkweGExODQsIDB4MDg4MCwgMHgwMGMwLCAweDFhMjUsIDB4OGFmZiwgMHgwMDQwLCAweDFhYWQsIDB4MjAwOSwKLQkweDAwMDEsIDB4MTA3OCwgMHgxODI0LCAweDAwNzgsIDB4MWFhZCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4ZDFiYywgMHgwMGMwLCAweDFhNjUsIDB4MDI3ZSwgMHgwMzdlLCAweDc4MDgsIDB4ZDBlYywKLQkweDAwYzAsIDB4MWEzOCwgMHg3ODAzLCAweDAwMDksIDB4NzAwMywgMHgwMDA0LCAweDAwNzgsIDB4MWEzYSwKLQkweDEwNzgsIDB4MWI5ZiwgMHg2YjI4LCAweDZhMmMsIDB4MTA3OCwgMHgxZmVhLCAweDBkN2UsIDB4MGY3ZSwKLQkweDJkNzgsIDB4MjgwNCwgMHhhYzY4LCAweDYwMzQsIDB4ZDA5YywgMHgwMGMwLCAweDFhNTUsIDB4NjgwOCwKLQkweDIwMDgsIDB4YTMxYSwgMHg2ODBjLCAweGEyMTMsIDB4NzgxMCwgMHhhMTAwLCAweDc4MTIsIDB4NjkwYywKLQkweDc4MTQsIDB4YTEwMSwgMHg3ODE2LCAweDAwNzgsIDB4MWE2MSwgMHg2ODEwLCAweDIwMDgsIDB4YTMxYSwKLQkweDY4MTQsIDB4YTIxMywgMHg3ODEwLCAweGExMDAsIDB4NzgxMiwgMHg2OTE0LCAweDc4MTQsIDB4YTEwMSwKLQkweDc4MTYsIDB4MGY3ZiwgMHgwZDdmLCAweDAwNzgsIDB4MTkzNCwgMHgwNTdlLCAweDdkMGMsIDB4MTA3OCwKLQkweGEyMGMsIDB4MDU3ZiwgMHgxMDc4LCAweDFhYzYsIDB4MGY3ZSwgMHg3MDA0LCAweDIwNzgsIDB4MTA3OCwKLQkweDQ4OTMsIDB4MDA0MCwgMHgxYTc2LCAweDc4MjQsIDB4YzBmNSwgMHg3ODI2LCAweDBmN2YsIDB4NjgyYiwKLQkweGZmZmYsIDB4NjgyZiwgMHhmZmZmLCAweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDY5N2MsIDB4NjkxMiwKLQkweDY5ODAsIDB4NjkxNiwgMHgwMDc4LCAweDFhYWQsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwKLQkweDcwMDQsIDB4YTAwZCwgMHgwMDQwLCAweDFhOTcsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4MDBjMCwKLQkweDFhOTcsIDB4NzAwNCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwKLQkweDE3OWYsIDB4MDA3OCwgMHgxYWFkLCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NzAwNCwKLQkweDIwNjAsIDB4NjAxMCwgMHhhMDA1LCAweDAwNDAsIDB4MWE5NywgMHgyMDY4LCAweDY4MDgsIDB4ODAwMCwKLQkweDY4MGEsIDB4NmMyOCwgMHg2YjJjLCAweDEwNzgsIDB4MTdiZSwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDIxMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDFhYzQsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MDA0MCwgMHgxYWM0LCAweDIwZTEsIDB4OTAyOCwKLQkweDcwMGYsIDB4YTVlNywgMHg3MDEzLCAweGE1ZTcsIDB4MTI3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MTA3OCwKLQkweDFhZjcsIDB4MjBlMSwgMHg5MDI4LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDAwNDAsIDB4MWFlZCwKLQkweDIxMDQsIDB4YTAwNSwgMHgwMDQwLCAweDFhZGEsIDB4MjA2MCwgMHg2MDEwLCAweDIwNjAsIDB4NjAwOCwKLQkweDgwMDEsIDB4NjAwYSwgMHhhMTg4LCAweDAwMDMsIDB4YTE4MiwgMHhhNjAyLCAweDAwNDgsIDB4MWFlMiwKLQkweDIwMDksIDB4YTVlNywgMHg3MTEyLCAweDcwMGMsIDB4YTEwNiwgMHgwMGMwLCAweDFhY2IsIDB4MjAwMSwKLQkweDAxMzgsIDB4MjAwMywgMHgwMDA4LCAweDAwNzgsIDB4MWFjYiwgMHgyMDAxLCAweDAxNWQsIDB4MjAwYywKLQkweDgxMGEsIDB4MjEwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwYzdmLCAweDAwN2MsIDB4MjAwMSwKLQkweDAxMzgsIDB4MjAxNCwgMHgyMDAzLCAweDAwMDAsIDB4MjAyMSwgMHhiMDE1LCAweDIwMDEsIDB4MDE0MSwKLQkweDIwMWMsIDB4ZDNkYywgMHgwMGMwLCAweDFiMTQsIDB4MjAwMSwgMHgwMTA5LCAweDIwMWMsIDB4YTM5YywKLQkweDAwNDgsIDB4MDBjMCwgMHgxYjE0LCAweDIwMDEsIDB4MDExMSwgMHgyMDFjLCAweDgzZmYsIDB4MDBjMCwKLQkweDFiMTQsIDB4ODQyMSwgMHgwMGMwLCAweDFhZmUsIDB4MDA3YywgMHgyMDExLCAweDAyMDEsIDB4MjAwOSwKLQkweDAwM2MsIDB4MjIwNCwgMHhhMDA1LCAweDAwYzAsIDB4MWIyMSwgMHg4MTA5LCAweDAwYzAsIDB4MWIxOSwKLQkweDAwN2MsIDB4MDA3YywgMHgxMDc4LCAweDFiMTUsIDB4MDA0MCwgMHgxYjRhLCAweDc5MDgsIDB4ZDFlYywKLQkweDAwYzAsIDB4MWIzYSwgMHgxMDc4LCAweDFiODEsIDB4MDA0MCwgMHgxYjNhLCAweDc4MDMsIDB4MDAwOSwKLQkweDc5MDQsIDB4ZDFmYywgMHgwMDQwLCAweDFiMzAsIDB4NzgwMywgMHgwMDA2LCAweDEwNzgsIDB4MWIxNSwKLQkweDAwNDAsIDB4MWI0YSwgMHg3ODBjLCAweGQwYTQsIDB4MDBjMCwgMHgxYjRhLCAweDcwMDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4MWI4MSwgMHgwMDQwLCAweDFiNGMsIDB4NzgwMywgMHgwMDE5LCAweDcwMDMsIDB4MDAwMywKLQkweDAwNzgsIDB4MWI0YywgMHgxMDc4LCAweDFhYzYsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4MDIwMCwKLQkweDc4MDgsIDB4YTA4NCwgMHhmMDAwLCAweGExMGQsIDB4MTA3OCwgMHgxYWY3LCAweDIwMTksIDB4NTAwMCwKLQkweDgzMTksIDB4MDA0MCwgMHgxYjZiLCAweDIwMDEsIDB4YTYwMiwgMHgyMDA0LCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MWI2YiwgMHgyMDAxLCAweDAwMjEsIDB4ZDBmYywgMHgwMDQwLCAweDFiNTgsIDB4MTA3OCwKLQkweDFlNWQsIDB4MDA3OCwgMHgxYjU2LCAweDIwZTEsIDB4NzAwMCwgMHg3MzI0LCAweDc0MjAsIDB4NzAyOCwKLQkweDcwMjgsIDB4NzQyNiwgMHg3MDM3LCAweDAwMDEsIDB4ODEwZiwgMHg3MTJlLCAweDcwMmYsIDB4MDEwMCwKLQkweDcwMzcsIDB4MDAwOCwgMHg3MzI2LCAweDc0MjIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MGU3ZiwKLQkweDAwN2MsIDB4NzkwOCwgMHhhMThjLCAweDBmZmYsIDB4YTE4MiwgMHgwMDA5LCAweDAwNDgsIDB4MWI4YywKLQkweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDFiOWUsIDB4MjAwMSwgMHgwMjBhLCAweDgxZmYsIDB4MDA0MCwKLQkweDFiOTcsIDB4MjBlMSwgMHg2MDAwLCAweDIwMGMsIDB4MjAwYywgMHgyMDBjLCAweDIwMGMsIDB4MjBlMSwKLQkweDcwMDAsIDB4MjAwYywgMHgyMDBjLCAweDcwMDMsIDB4MDAwMCwgMHhhMDA2LCAweDAwN2MsIDB4N2MyMCwKLQkweDdkMjQsIDB4N2UzMCwgMHg3ZjM0LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDAwNDAsIDB4MWMyNCwKLQkweDcwMDQsIDB4MDE3ZSwgMHgyMTBjLCAweGExMDYsIDB4MDE3ZiwgMHgwMDQwLCAweDFjMjQsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MjE2YywgMHgyZDAwLCAweGEwMDUsIDB4MDA0MCwgMHgxYzIyLCAweDY4MjQsIDB4ZDBkNCwKLQkweDAwYzAsIDB4MWMyMiwgMHg2ODEwLCAweDIwNjgsIDB4Njg1MCwgMHhkMGZjLCAweDAwNDAsIDB4MWJlYywKLQkweDgxMDgsIDB4MjEwNCwgMHg2YjJjLCAweGEzMDYsIDB4MDBjMCwgMHgxYzIyLCAweDgxMDgsIDB4MjEwNCwKLQkweDZhMjgsIDB4YTIwNiwgMHgwMGMwLCAweDFjMjIsIDB4Njg1MCwgMHhjMGZjLCAweGMwZjUsIDB4Njg1MiwKLQkweDY4NmMsIDB4NzgyMiwgMHg2ODcwLCAweDc4MjYsIDB4NjgxYywgMHg3ODMyLCAweDY4MjAsIDB4NzgzNiwKLQkweDY4MTgsIDB4MjA2MCwgMHg2MDM0LCAweGQwOWMsIDB4MDA0MCwgMHgxYmU3LCAweDY4MzAsIDB4MjAwNCwKLQkweGFjNjgsIDB4NjgwOCwgMHg3ODNhLCAweDY4MGMsIDB4NzgzZSwgMHgwMDc4LCAweDFjMjAsIDB4YTAwNiwKLQkweDc4M2EsIDB4NzgzZSwgMHgwMDc4LCAweDFjMjAsIDB4ODEwOCwgMHgyMTA0LCAweGEwMDUsIDB4MDBjMCwKLQkweDFjMjIsIDB4ODEwOCwgMHgyMTA0LCAweGEwMDUsIDB4MDBjMCwgMHgxYzIyLCAweDY4NTAsIDB4YzBmNSwKLQkweDY4NTIsIDB4NjgzMCwgMHgyMDA0LCAweDY5MTgsIDB4YTE2MCwgMHhhMTgwLCAweDAwMGQsIDB4MjAwNCwKLQkweGQwOWMsIDB4MDBjMCwgMHgxYzEyLCAweDYwMDgsIDB4NzgyMiwgMHg2ODZlLCAweDYwMGMsIDB4NzgyNiwKLQkweDY4NzIsIDB4NjAwMCwgMHg3ODMyLCAweDYwMDQsIDB4NzgzNiwgMHhhMDA2LCAweDc4M2EsIDB4NzgzZSwKLQkweDAwNzgsIDB4MWMyMCwgMHg2MDEwLCAweDc4MjIsIDB4Njg2ZSwgMHg2MDE0LCAweDc4MjYsIDB4Njg3MiwKLQkweDYwMDAsIDB4NzgzMiwgMHg2MDA0LCAweDc4MzYsIDB4NjAwOCwgMHg3ODNhLCAweDYwMGMsIDB4NzgzZSwKLQkweDc4MDMsIDB4MDAxMSwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MDE3ZSwKLQkweDAyN2UsIDB4MjA3MSwgMHhhNWUxLCAweDIwNzksIDB4MDAzMCwgMHgyMDExLCAweDAwNTAsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDFjNGQsIDB4ODIxMSwgMHgwMDQwLCAweDFjNGIsIDB4MjAwMSwKLQkweDAwMDUsIDB4MjAwNCwgMHhkMDhjLCAweDAwNDAsIDB4MWMzNCwgMHg3OTA0LCAweGExOGMsIDB4MDc4MCwKLQkweDAxN2UsIDB4MTA3OCwgMHgxOGUyLCAweDAxN2YsIDB4ODFmZiwgMHgwMGMwLCAweDFjNGIsIDB4MjAxMSwKLQkweDAwNTAsIDB4MDA3OCwgMHgxYzJmLCAweGEwODUsIDB4MDAwMSwgMHgwMjdmLCAweDAxN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MDA3YywgMHg3ODAzLCAweDAwMDQsIDB4MjAwOSwgMHgwMDY0LCAweDc4MDQsIDB4ZDBhYywKLQkweDAwNDAsIDB4MWNhMywgMHg4MTA5LCAweDAwYzAsIDB4MWM1NiwgMHgyMDA5LCAweDAxMDAsIDB4MjEwYywKLQkweGExOGEsIDB4MDAwMywgMHgxMDQ4LCAweDEzMjgsIDB4MTA3OCwgMHgxZjc1LCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzEsIDB4YTVkMCwgMHgyMDc5LCAweDAwMTAsIDB4NzAwNCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwKLQkweDFjOWIsIDB4NzgwMCwgMHgwMDdlLCAweDc4MjAsIDB4MDA3ZSwgMHg3ODMwLCAweDAwN2UsIDB4NzgzNCwKLQkweDAwN2UsIDB4NzgzOCwgMHgwMDdlLCAweDc4M2MsIDB4MDA3ZSwgMHg3ODAzLCAweDAwMDQsIDB4NzgyMywKLQkweDAwMDAsIDB4MDAwNSwgMHgwMDA1LCAweDIwNzksIDB4MDAzMCwgMHg3ODA0LCAweGQwYWMsIDB4MTBjMCwKLQkweDEzMjgsIDB4MjA3OSwgMHgwMDEwLCAweDAwN2YsIDB4NzgzZSwgMHgwMDdmLCAweDc4M2EsIDB4MDA3ZiwKLQkweDc4MzYsIDB4MDA3ZiwgMHg3ODMyLCAweDAwN2YsIDB4NzgyMiwgMHgwMDdmLCAweDc4MDIsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MDA3OCwgMHgxY2ExLCAweDBmN2YsIDB4MGU3ZiwgMHg3ODA0LCAweGQwYWMsIDB4MTBjMCwKLQkweDEzMjgsIDB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE2MDIsIDB4NzAwMywKLQkweDAwMDAsIDB4MGU3ZiwgMHgwMDdjLCAweDBkN2UsIDB4YTI4MCwgMHgwMDA0LCAweDIwNmMsIDB4Njk0YywKLQkweGQxZGMsIDB4MDBjMCwgMHgxZDI2LCAweDY5MzQsIDB4YTE4NCwgMHgwMDA3LCAweDAwNzksIDB4MWNiOCwKLQkweDFjYzAsIDB4MWQxMSwgMHgxY2MwLCAweDFjYzAsIDB4MWNjMCwgMHgxY2Y2LCAweDFjZDMsIDB4MWNjMiwKLQkweDEwNzgsIDB4MTMyOCwgMHg2ODRjLCAweGQwYjQsIDB4MDA0MCwgMHgxZTM0LCAweDY4NjAsIDB4NjgyZSwKLQkweDY4MTYsIDB4Njg1YywgMHg2ODJhLCAweDY4MTIsIDB4Njg3YywgMHg2ODBhLCAweDY4ODAsIDB4NjgwZSwKLQkweDY5NTgsIDB4MDA3OCwgMHgxZDE5LCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAxZSwKLQkweDAwYzAsIDB4MWNjMCwgMHg2ODRjLCAweGQwYjQsIDB4MDA0MCwgMHgxZTM0LCAweDY4NjAsIDB4NjgyZSwKLQkweDY4MTYsIDB4Njg1YywgMHg2ODJhLCAweDY4MTIsIDB4Njg3YywgMHg2ODBhLCAweDY4ODAsIDB4NjgwZSwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweDY5NTgsIDB4MDA3OCwgMHgxZDIyLCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNSwgMHgwMGMwLCAweDFkMjYsIDB4Njg0YywgMHhkMGI0LCAweDAwNDAsIDB4MWUzNCwKLQkweDY4MDQsIDB4NjgxYSwgMHhhMDgwLCAweDAwMGQsIDB4MjAwNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjAwNCwgMHg2ODMyLCAweDY5NTgsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4MDA3OCwKLQkweDFkMjIsIDB4Njg0YywgMHhkMGI0LCAweDAwNDAsIDB4MThiYywgMHg2OTU4LCAweGEwMDYsIDB4NjgyZSwKLQkweDY4MmEsIDB4MmQwMCwgMHg2ODFhLCAweDY4MzQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjAxNSwKLQkweDIwMDQsIDB4NjgzMiwgMHg2OTI2LCAweDY4NGMsIDB4YzBkZCwgMHg2ODRlLCAweDBkN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MjA3OSwgMHgwMDIwLCAweDc4MDQsIDB4ZDBmYywgMHgxMGMwLCAweDFlNWQsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MjA3MSwgMHhhNjAyLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDFkYWIsIDB4MGM3ZSwKLQkweDcyMDYsIDB4YTI4MCwgMHgwMDA0LCAweDIwNWMsIDB4NzAwNCwgMHgyMDY4LCAweDc4MDMsIDB4MDAwNCwKLQkweDY4MTgsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4NmMsIDB4NzgxMiwgMHg2ODkwLCAweDBmN2UsIDB4MjBlMSwKLQkweDkwNDAsIDB4MjA3OSwgMHgwMjAwLCAweDc4MWEsIDB4MjA3OSwgMHgwMTAwLCAweDgwMDQsIDB4NzhkNiwKLQkweDBmN2YsIDB4MGQ3ZiwgMHgyYjY4LCAweDY4MjQsIDB4MjA1MCwgMHg2ODE4LCAweDIwNjAsIDB4NjgzMCwKLQkweDIwNDAsIDB4NjAzNCwgMHhhMGNjLCAweDAwMGYsIDB4NjkwOCwgMHgyMDAxLCAweDA0ZmQsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwNywgMHgwMDQwLCAweDFkNmQsIDB4YTE4NCwgMHgwMDA3LCAweDAwNDAsIDB4MWQ2ZCwKLQkweDAxN2UsIDB4MjAwOSwgMHgwMDA4LCAweGExMDIsIDB4MDE3ZiwgMHhhMTA4LCAweDc5MWEsIDB4NzExNiwKLQkweDcwMWUsIDB4NjgwYywgMHhhMDgxLCAweDAwMDAsIDB4NzgxZSwgMHg3MDFhLCAweGEwMDYsIDB4NzAwZSwKLQkweDcwMTIsIDB4NzAwNCwgMHg2OTJjLCAweDY4MTQsIDB4YTEwNiwgMHgwMGMwLCAweDFkODQsIDB4NjkyOCwKLQkweDY4MTAsIDB4YTEwNiwgMHgwMDQwLCAweDFkOTEsIDB4MDM3ZSwgMHgwNDdlLCAweDZiMTQsIDB4NmMxMCwKLQkweDEwNzgsIDB4MjAzNSwgMHgwNDdmLCAweDAzN2YsIDB4MDA0MCwgMHgxZDkxLCAweDBjN2YsIDB4MDA3OCwKLQkweDFkYWIsIDB4OGFmZiwgMHgwMGMwLCAweDFkOTksIDB4MGM3ZiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwKLQkweDFkYWIsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMDIwLCAweDIwMDksIDB4MDAwMSwKLQkweDEwNzgsIDB4MWRhZiwgMHgwMDQwLCAweDFkYTgsIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MWRhZiwKLQkweDEyN2YsIDB4MGM3ZiwgMHhhMDA2LCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MDc3ZSwKLQkweDA2N2UsIDB4MDU3ZSwgMHgwNDdlLCAweDAzN2UsIDB4MDI3ZSwgMHg4YWZmLCAweDAwNDAsIDB4MWUyZCwKLQkweDcwMGMsIDB4NzIxNCwgMHhhMjNhLCAweDcwMTAsIDB4NzIxOCwgMHhhMjAzLCAweDAwNDgsIDB4MWUyYywKLQkweGE3MDUsIDB4MDA0MCwgMHgxZTJjLCAweGEwM2UsIDB4MjczMCwgMHg2ODUwLCAweGQwZmMsIDB4MDBjMCwKLQkweDFkZGYsIDB4MGQ3ZSwgMHgyODA0LCAweGFjNjgsIDB4MjkwMCwgMHgwMDc5LCAweDFkY2YsIDB4MWUwZSwKLQkweDFkZWYsIDB4MWRlZiwgMHgxZTBlLCAweDFlMGUsIDB4MWUwNiwgMHgxZTBlLCAweDFkZWYsIDB4MWUwZSwKLQkweDFkZjUsIDB4MWRmNSwgMHgxZTBlLCAweDFlMGUsIDB4MWUwZSwgMHgxZGZkLCAweDFkZjUsIDB4YzBmYywKLQkweDY4NTIsIDB4NmI2YywgMHg2YTcwLCAweDZkMWMsIDB4NmMyMCwgMHhkOTljLCAweDAwNDAsIDB4MWUxMiwKLQkweDBkN2UsIDB4MjgwNCwgMHhhYzY4LCAweDZmMDgsIDB4NmUwYywgMHgwMDc4LCAweDFlMTEsIDB4NmIwOCwKLQkweDZhMGMsIDB4NmQwMCwgMHg2YzA0LCAweDAwNzgsIDB4MWUxMSwgMHg2YjEwLCAweDZhMTQsIDB4NmQwMCwKLQkweDZjMDQsIDB4NmYwOCwgMHg2ZTBjLCAweDAwNzgsIDB4MWUxMSwgMHgwZDdmLCAweDBkN2UsIDB4NjgzNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MDBjMCwgMHgxZTBlLCAweDBkN2YsIDB4MTA3OCwKLQkweDFmZDEsIDB4MDBjMCwgMHgxZGI1LCAweGEwMGUsIDB4MDA3OCwgMHgxZTJkLCAweDBkN2YsIDB4MTA3OCwKLQkweDEzMjgsIDB4MGQ3ZiwgMHg3YjIyLCAweDdhMjYsIDB4N2QzMiwgMHg3YzM2LCAweDdmM2EsIDB4N2UzZSwKLQkweDc5MDIsIDB4NzAwMCwgMHg4MDAwLCAweDcwMDIsIDB4NjgyOCwgMHhhMzAwLCAweDY4MmEsIDB4NjgyYywKLQkweGEyMDEsIDB4NjgyZSwgMHg3MDBjLCAweGEzMDAsIDB4NzAwZSwgMHg3MDEwLCAweGEyMDEsIDB4NzAxMiwKLQkweDEwNzgsIDB4MWZkMSwgMHgwMDc4LCAweDFlMmQsIDB4YTAwNiwgMHgwMjdmLCAweDAzN2YsIDB4MDQ3ZiwKLQkweDA1N2YsIDB4MDY3ZiwgMHgwNzdmLCAweDAwN2MsIDB4MTA3OCwgMHgxMzI4LCAweDAyN2UsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDBkN2UsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4MWU0ZCwgMHg2ODUwLCAweGMwYmQsIDB4Njg1MiwgMHgwZDdmLCAweDEwNzgsIDB4ODc1OCwKLQkweDIwZTEsIDB4OTA0MCwgMHgxMDc4LCAweDcxOWEsIDB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4NmVmYywKLQkweDEwNzgsIDB4NjFkMywgMHgwMjdmLCAweDAwNzgsIDB4MWYyOSwgMHgxMjdlLCAweDIwOTEsIDB4MjIwMCwKLQkweDAwN2UsIDB4MDE3ZSwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwgMHgwYzdlLCAweDIwNzksIDB4MDAyMCwKLQkweDIwNzEsIDB4YTYwMiwgMHgyYjY4LCAweDY4MTgsIDB4MjA2MCwgMHg3OTA0LCAweDc4MDMsIDB4MDAwMiwKLQkweGExODQsIDB4MDcwMCwgMHgwMGMwLCAweDFlMzYsIDB4NzAwMCwgMHgwMDc5LCAweDFlNzcsIDB4MWYyOSwKLQkweDFlN2IsIDB4MWVmNiwgMHgxZjI3LCAweDgwMDEsIDB4NzAwMiwgMHhkMTljLCAweDAwYzAsIDB4MWU4ZiwKLQkweDhhZmYsIDB4MDA0MCwgMHgxZWFlLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDFkYWYsIDB4MDA0MCwKLQkweDFmMjksIDB4MjAwOSwgMHgwMDAxLCAweDEwNzgsIDB4MWRhZiwgMHgwMDc4LCAweDFmMjksIDB4NzgwMywKLQkweDAwMDQsIDB4ZDE5NCwgMHgwMDQwLCAweDFlOWYsIDB4Njg1MCwgMHhjMGZjLCAweDY4NTIsIDB4OGFmZiwKLQkweDAwYzAsIDB4MWVhNCwgMHg2ODRjLCAweGMwZjUsIDB4Njg0ZSwgMHgwMDc4LCAweDFlYTQsIDB4MTA3OCwKLQkweDFmZWEsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmEwMCwgMHg2ODI2LCAweDJjMDAsIDB4NjgxYSwKLQkweDI4MDAsIDB4NjgzMiwgMHg3MDAzLCAweDAwMDAsIDB4MDA3OCwgMHgxZjI5LCAweDcxMWMsIDB4ODFmZiwKLQkweDAwNDAsIDB4MWVjNCwgMHg3OTE4LCAweDc5MjIsIDB4NzgyNywgMHgwMDAwLCAweDc4MDMsIDB4MDAwMSwKLQkweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweDcwMGMsIDB4YTEwMCwgMHg3MDBlLCAweDcwMTAsIDB4YTA4MSwKLQkweDAwMDAsIDB4NzAxMiwgMHgwMDc4LCAweDFmMjksIDB4MGY3ZSwgMHgwMjdlLCAweDc4MWMsIDB4MDA3ZSwKLQkweDc4MTgsIDB4MDA3ZSwgMHgyMDc5LCAweDAxMDAsIDB4N2ExNCwgMHhhMjg0LCAweDAwMDQsIDB4YTA4NSwKLQkweDAwMTIsIDB4NzgxNiwgMHgwMzdlLCAweDIwMTksIDB4MTAwMCwgMHg4MzE5LCAweDEwNDAsIDB4MTMyOCwKLQkweDc4MjAsIDB4ZDBiYywgMHgwMGMwLCAweDFlZDUsIDB4MDM3ZiwgMHg3OWM4LCAweDAwN2YsIDB4YTEwMiwKLQkweDAxN2YsIDB4MDA3ZSwgMHgwMTdlLCAweDc5YzQsIDB4MDA3ZiwgMHhhMTAzLCAweDc4YzYsIDB4MDA3ZiwKLQkweDc4Y2EsIDB4YTI4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAyN2YsIDB4MGY3ZiwKLQkweDc4MDMsIDB4MDAwOCwgMHg3MDAzLCAweDAwMDAsIDB4MDA3OCwgMHgxZjI5LCAweDgwMDEsIDB4NzAwMiwKLQkweGQxOTQsIDB4MDA0MCwgMHgxZjBiLCAweDc4MDQsIDB4ZDBmYywgMHgwMGMwLCAweDFlNmQsIDB4ZDE5YywKLQkweDAwYzAsIDB4MWYyNSwgMHg4YWZmLCAweDAwNDAsIDB4MWYyOSwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwKLQkweDFkYWYsIDB4MDA3OCwgMHgxZjI5LCAweDAyN2UsIDB4MDM3ZSwgMHg2YjI4LCAweDZhMmMsIDB4MTA3OCwKLQkweDFmZWEsIDB4MGQ3ZSwgMHgyODA0LCAweGFjNjgsIDB4NjAzNCwgMHhkMDljLCAweDAwYzAsIDB4MWYxZSwKLQkweDY4MDgsIDB4YTMxYSwgMHg2ODBjLCAweGEyMTMsIDB4MDA3OCwgMHgxZjIyLCAweDY4MTAsIDB4YTMxYSwKLQkweDY4MTQsIDB4YTIxMywgMHgwZDdmLCAweDAwNzgsIDB4MWU5ZiwgMHgwMDc4LCAweDFlOWYsIDB4MTA3OCwKLQkweDEzMjgsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MGY3ZSwgMHgwZTdlLCAweDIwNzEsIDB4YTYwMiwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MWY3MiwgMHgyMDc5LCAweDAwMjAsIDB4MDE3ZSwgMHgyMDA5LCAweDAyMDcsIDB4MjEwYywKLQkweGQxOTQsIDB4MDA0MCwgMHgxZjRmLCAweDIwMDksIDB4MDIwYywgMHgyMTBjLCAweGExODQsIDB4MDAwMywKLQkweDAwNDAsIDB4MWY0ZiwgMHgyMGUxLCAweDkwNDAsIDB4MjAwMSwgMHgwMjBjLCAweDIxMDIsIDB4MjAwOSwKLQkweDAyMDYsIDB4MjEwNCwgMHgyMDA5LCAweDAyMDMsIDB4MjEwYywgMHhhMTA2LCAweDAwYzAsIDB4MWY1YSwKLQkweDIwZTEsIDB4OTA0MCwgMHg3ODA0LCAweGQwZmMsIDB4MDA0MCwgMHgxZjNkLCAweDEwNzgsIDB4MWU1ZCwKLQkweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwYzAsIDB4MWYzZCwgMHgwMTdmLCAweDc4MDMsIDB4MDAwNCwKLQkweDc4MDQsIDB4ZDBhYywgMHgwMGMwLCAweDFmNjgsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwMiwKLQkweDcwMDMsIDB4MDAwMCwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgwMjdlLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDBlN2UsIDB4MGY3ZSwgMHgyMDcxLCAweGE2MDIsIDB4MjA3OSwgMHgwMDIwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDAsIDB4MDA0MCwgMHgxZmFlLCAweDcwMDQsIDB4MjA2MCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHgxZjk4LCAweDY4NTAsIDB4YzBiNSwgMHg2ODUyLCAweDY4MGMsIDB4N2ExYywKLQkweGEyMDYsIDB4MDBjMCwgMHgxZjk4LCAweDY4MDgsIDB4N2ExOCwgMHhhMjA2LCAweDAwNDAsIDB4MWZiNCwKLQkweDIwMDEsIDB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHg3MDA0LCAweDIwNjAsIDB4MTA3OCwgMHg4NzU4LCAweDIwZTEsIDB4OTA0MCwKLQkweDEwNzgsIDB4NzE5YSwgMHgyMDExLCAweDAwMDAsIDB4MTA3OCwgMHg2ZWZjLCAweDBmN2YsIDB4MGU3ZiwKLQkweDBkN2YsIDB4MGM3ZiwgMHgwMjdmLCAweDAwN2MsIDB4NjgxMCwgMHg2YTE0LCAweGEyMDUsIDB4MDBjMCwKLQkweDFmOTgsIDB4Njg0YywgMHhjMGRjLCAweDY4NGUsIDB4MmMxMCwgMHgxMDc4LCAweDFjYWIsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4MjA2OSwgMHhhNWFiLCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MDA3OCwKLQkweDFmYWUsIDB4ODg0MCwgMHgyODA0LCAweGEwMDUsIDB4MDBjMCwgMHgxZmU1LCAweDYwMDQsIDB4YTAwNSwKLQkweDAwNDAsIDB4MWZlNywgMHg2ODFhLCAweDIwNjAsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIwMTUsIDB4MjA0NCwgMHg4OGZmLCAweDEwNDAsIDB4MTMyOCwgMHg4YTUxLCAweDAwN2MsIDB4MjA1MSwKLQkweDAwMDAsIDB4MDA3YywgMHg4YTUwLCAweDg4NDEsIDB4MjgwNCwgMHhhMDA1LCAweDAwYzAsIDB4MjAwNCwKLQkweDJjMDAsIDB4YWQwNiwgMHgwMDQwLCAweDFmZjksIDB4NjAwMCwgMHhhMDA1LCAweDAwYzAsIDB4MWZmOSwKLQkweDJkMDAsIDB4MjA2MCwgMHg2ODFhLCAweDYwMzQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjAyNSwKLQkweDIwNDQsIDB4ODhmZiwgMHgxMDQwLCAweDEzMjgsIDB4MDA3YywgMHgwMDAwLCAweDAwMTEsIDB4MDAxNSwKLQkweDAwMTksIDB4MDAxZCwgMHgwMDIxLCAweDAwMjUsIDB4MDAyOSwgMHgwMDAwLCAweDAwMGYsIDB4MDAxNSwKLQkweDAwMWIsIDB4MDAyMSwgMHgwMDI3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMGEsIDB4MjAwNiwKLQkweDAwMDAsIDB4MDAwMCwgMHgyMDE0LCAweDAwMDAsIDB4MjAwYSwgMHgwMDAwLCAweDIwMTEsIDB4MjAwZSwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMTQsIDB4MjAxMSwgMHgwMDAwLCAweDIwMGMsIDB4MjAwYywKLQkweDAwMDAsIDB4MDAwMCwgMHgyMDE0LCAweDAwMDAsIDB4MjAwYywgMHgwMDAwLCAweDIwMTIsIDB4MjAxMiwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMTQsIDB4MjAxMiwgMHgwYTdlLCAweDA5N2UsIDB4MDg3ZSwKLQkweDZiMmUsIDB4NmMyYSwgMHg2ODU4LCAweGEwNTUsIDB4MDA0MCwgMHgyMGQ4LCAweDJkNjAsIDB4NjAzNCwKLQkweGEwY2MsIDB4MDAwZiwgMHhhOWMwLCAweDIwMTUsIDB4YTk4NiwgMHgwMDA3LCAweDAwNDAsIDB4MjA1MCwKLQkweGE5ODYsIDB4MDAwZSwgMHgwMDQwLCAweDIwNTAsIDB4YTk4NiwgMHgwMDBmLCAweDAwYzAsIDB4MjA1NCwKLQkweDYwNWMsIDB4YTQyMiwgMHg2MDYwLCAweGEzMWEsIDB4MjgwNCwgMHhhMDQ1LCAweDAwYzAsIDB4MjA2MiwKLQkweDAwNTAsIDB4MjA1YywgMHgwMDc4LCAweDIwZDgsIDB4NjAwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjBkOCwKLQkweDAwNzgsIDB4MjAzZiwgMHgyODA0LCAweGEwMDUsIDB4MDA0MCwgMHgyMDgwLCAweGFjNjgsIDB4ZDk5YywKLQkweDAwYzAsIDB4MjA3MCwgMHg2ODA4LCAweGE0MjIsIDB4NjgwYywgMHhhMzFiLCAweDAwNzgsIDB4MjA3NCwKLQkweDY4MTAsIDB4YTQyMiwgMHg2ODE0LCAweGEzMWIsIDB4MDA0OCwgMHgyMDlmLCAweDIzMDAsIDB4YTQwNSwKLQkweDAwNDAsIDB4MjA4NiwgMHg4YTUxLCAweDAwNDAsIDB4MjBkOCwgMHg4ODQwLCAweDAwNzgsIDB4MjA2MiwKLQkweDYwMDQsIDB4YTA2NSwgMHgwMDQwLCAweDIwZDgsIDB4MDA3OCwgMHgyMDNmLCAweDhhNTEsIDB4MDA0MCwKLQkweDIwZDgsIDB4ODg0MCwgMHgyODA0LCAweGEwMDUsIDB4MDBjMCwgMHgyMDk5LCAweDYwMDQsIDB4YTA2NSwKLQkweDAwNDAsIDB4MjBkOCwgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwgMHhhOWMwLCAweDIwMTUsIDB4MjgwNCwKLQkweDIwNDAsIDB4MmI2OCwgMHg2ODUwLCAweGMwZmMsIDB4Njg1MiwgMHgwMDc4LCAweDIwY2MsIDB4ODQyMiwKLQkweDg0MjAsIDB4ODMxYSwgMHhhMzk5LCAweDAwMDAsIDB4MGQ3ZSwgMHgyYjY4LCAweDZjNmUsIDB4NmI3MiwKLQkweDBkN2YsIDB4ZDk5YywgMHgwMGMwLCAweDIwYmEsIDB4NjkwOCwgMHgyNDAwLCAweGExMjIsIDB4NjkwYywKLQkweDIzMDAsIDB4YTExYiwgMHgxMDQ4LCAweDEzMjgsIDB4NjgwMCwgMHhhNDIwLCAweDY4MDQsIDB4YTMxOSwKLQkweDAwNzgsIDB4MjBjNiwgMHg2OTEwLCAweDI0MDAsIDB4YTEyMiwgMHg2OTE0LCAweDIzMDAsIDB4YTExYiwKLQkweDEwNDgsIDB4MTMyOCwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwgMHhhMzE5LCAweDJiNjgsIDB4NmMxZSwKLQkweDZiMjIsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwKLQkweDJhMDAsIDB4NjgyNiwgMHgwMDdmLCAweDAwN2YsIDB4MDA3ZiwgMHhhMDA2LCAweDAwNzgsIDB4MjBkZCwKLQkweDA4N2YsIDB4MDk3ZiwgMHgwYTdmLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDIwMDEsIDB4MDAwNSwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDA3LCAweDAwNzksIDB4MjBlNSwgMHgyMGVkLCAweDIwZWUsIDB4MjBmMSwKLQkweDIwZjQsIDB4MjBmOSwgMHgyMGZjLCAweDIxMDEsIDB4MjEwNiwgMHgwMDdjLCAweDEwNzgsIDB4MWU1ZCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxOGUyLCAweDAwN2MsIDB4MTA3OCwgMHgxOGUyLCAweDEwNzgsIDB4MWU1ZCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxNGIwLCAweDAwN2MsIDB4MTA3OCwgMHgxZTVkLCAweDEwNzgsIDB4MTRiMCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxOGUyLCAweDEwNzgsIDB4MTRiMCwgMHgwMDdjLCAweDEwNzgsIDB4MThlMiwKLQkweDEwNzgsIDB4MWU1ZCwgMHgxMDc4LCAweDE0YjAsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4MjMwMCwKLQkweDIwNzksIDB4MDIwMCwgMHgyMDcxLCAweGE4ODAsIDB4MjA2OSwgMHhhMzAwLCAweDIwMDksIDB4MDAwNCwKLQkweDc5MTIsIDB4NzgxNywgMHgwMDA0LCAweDEwNzgsIDB4MjRiNSwgMHg3ODFiLCAweDAwMDIsIDB4MjBlMSwKLQkweDg3MDAsIDB4MTI3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHgyMzAwLCAweDc4MWMsIDB4YTA4NCwKLQkweDAwMDcsIDB4MDA3OSwgMHgyMTJiLCAweDIxNGYsIDB4MjEzMywgMHgyMTM3LCAweDIxM2IsIDB4MjE0MSwKLQkweDIxNDUsIDB4MjE0OSwgMHgyMTRkLCAweDEwNzgsIDB4NTM3MiwgMHgwMDc4LCAweDIxNGYsIDB4MTA3OCwKLQkweDUzYjMsIDB4MDA3OCwgMHgyMTRmLCAweDEwNzgsIDB4NTM3MiwgMHgxMDc4LCAweDUzYjMsIDB4MDA3OCwKLQkweDIxNGYsIDB4MTA3OCwgMHgyMTUxLCAweDAwNzgsIDB4MjE0ZiwgMHgxMDc4LCAweDIxNTEsIDB4MDA3OCwKLQkweDIxNGYsIDB4MTA3OCwgMHgyMTUxLCAweDAwNzgsIDB4MjE0ZiwgMHgxMDc4LCAweDIxNTEsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwMTdlLCAweDAyN2UsIDB4NzkzMCwgMHhhMTg0LCAweDAwMDMsIDB4MDA0MCwKLQkweDIxNWQsIDB4MjBlMSwgMHg5MDQwLCAweDAwNzgsIDB4MjE4NiwgMHhhMTg0LCAweDAwMzAsIDB4MDA0MCwKLQkweDIxNmUsIDB4NmEwMCwgMHhhMjg2LCAweDAwMDMsIDB4MDBjMCwgMHgyMTY4LCAweDAwNzgsIDB4MjE2YSwKLQkweDEwNzgsIDB4NDE3MSwgMHgyMGUxLCAweDkwMTAsIDB4MDA3OCwgMHgyMTg2LCAweGExODQsIDB4MDBjMCwKLQkweDAwNDAsIDB4MjE4MCwgMHgwZTdlLCAweDAzN2UsIDB4MDQ3ZSwgMHgwNTdlLCAweDIwNzEsIDB4YTVlMSwKLQkweDEwNzgsIDB4MWFjNiwgMHgwNTdmLCAweDA0N2YsIDB4MDM3ZiwgMHgwZTdmLCAweDAwNzgsIDB4MjE4NiwKLQkweGExODQsIDB4MDMwMCwgMHgwMDQwLCAweDIxODYsIDB4MjBlMSwgMHg5MDIwLCAweDc5MzIsIDB4MDI3ZiwKLQkweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MGU3ZSwgMHgwZjdlLCAweDIwNzEsIDB4YTMwMCwKLQkweDcxMjgsIDB4MjAwMSwgMHhhNThmLCAweDIxMDIsIDB4MjAwMSwgMHhhNTk3LCAweDIxMDIsIDB4YTE4MiwKLQkweDAyMTEsIDB4MDBjOCwgMHgyMTlmLCAweDIwMDksIDB4MDAwOCwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDAyNTksIDB4MDBjOCwgMHgyMWE3LCAweDIwMDksIDB4MDAwNywgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDAyYzEsIDB4MDBjOCwgMHgyMWFmLCAweDIwMDksIDB4MDAwNiwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDAzNDksIDB4MDBjOCwgMHgyMWI3LCAweDIwMDksIDB4MDAwNSwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDA0MjEsIDB4MDBjOCwgMHgyMWJmLCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDIxYzksIDB4YTE4MiwKLQkweDA1ODEsIDB4MDBjOCwgMHgyMWM3LCAweDIwMDksIDB4MDAwMywgMHgwMDc4LCAweDIxYzksIDB4MjAwOSwKLQkweDAwMDIsIDB4MjA3OSwgMHgwMjAwLCAweDc5MTIsIDB4NzgxNywgMHgwMDA0LCAweDEwNzgsIDB4MjRiNSwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDIyMDAsIDB4MjA2MSwKLQkweDAxMDAsIDB4MjA3MSwgMHhhMzAwLCAweDYwMjQsIDB4NjAyNiwgMHg2MDUzLCAweDAwMzAsIDB4NjAzMywKLQkweDAwZWYsIDB4NjBlNywgMHgwMDAwLCAweDYwZWIsIDB4MDBlZiwgMHg2MGUzLCAweDAwMDgsIDB4NjA0YiwKLQkweGY3ZjcsIDB4NjA0MywgMHgwMDAwLCAweDYwMmYsIDB4MDA4MCwgMHg2MDJmLCAweDAwMDAsIDB4NjAwNywKLQkweDBlYWYsIDB4NjAwZiwgMHgwMGZmLCAweDYwMmIsIDB4MDAyZiwgMHgxMjdmLCAweDAwN2MsIDB4MjAwMSwKLQkweGEzMmYsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4YTMyZSwgMHgyMDAzLCAweDAwMDEsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHgyMjAwLCAweDAwN2UsIDB4MDE3ZSwgMHgwMjdlLCAweDYxMjQsIDB4YTE4NCwKLQkweDAwMmMsIDB4MDBjMCwgMHgyMjBmLCAweGExODQsIDB4MDAwNywgMHgwMDc5LCAweDIyMTUsIDB4YTE5NSwKLQkweDAwMDQsIDB4YTI4NCwgMHgwMDA3LCAweDAwNzksIDB4MjIxNSwgMHgyMjQxLCAweDIyMWQsIDB4MjIyMSwKLQkweDIyMjUsIDB4MjIyYiwgMHgyMjJmLCAweDIyMzUsIDB4MjIzYiwgMHgxMDc4LCAweDVhZDIsIDB4MDA3OCwKLQkweDIyNDEsIDB4MTA3OCwgMHg1YmMxLCAweDAwNzgsIDB4MjI0MSwgMHgxMDc4LCAweDViYzEsIDB4MTA3OCwKLQkweDVhZDIsIDB4MDA3OCwgMHgyMjQxLCAweDEwNzgsIDB4MjI0NiwgMHgwMDc4LCAweDIyNDEsIDB4MTA3OCwKLQkweDVhZDIsIDB4MTA3OCwgMHgyMjQ2LCAweDAwNzgsIDB4MjI0MSwgMHgxMDc4LCAweDViYzEsIDB4MTA3OCwKLQkweDIyNDYsIDB4MDA3OCwgMHgyMjQxLCAweDEwNzgsIDB4NWJjMSwgMHgxMDc4LCAweDVhZDIsIDB4MTA3OCwKLQkweDIyNDYsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDYxMjQsIDB4ZDFhYywKLQkweDAwNDAsIDB4MjM0MiwgMHgwMTdlLCAweDA0N2UsIDB4MGM3ZSwgMHg2NDRjLCAweGE0ODYsIDB4ZjBmMCwKLQkweDAwYzAsIDB4MjI1OSwgMHgyMDYxLCAweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywKLQkweDAwMTAsIDB4NzRjMiwgMHhhNDhjLCAweGZmMDAsIDB4NzAzNCwgMHhkMDg0LCAweDAwNDAsIDB4MjI3MSwKLQkweGExODYsIDB4ZjgwMCwgMHgwMGMwLCAweDIyNzEsIDB4NzAzOCwgMHhkMDg0LCAweDAwYzAsIDB4MjI3MSwKLQkweGMwODUsIDB4NzAzYSwgMHgwMzdlLCAweDI0MTgsIDB4MjAxMSwgMHg4MDE2LCAweDEwNzgsIDB4MzU3OSwKLQkweDAzN2YsIDB4YTE5NiwgMHhmZjAwLCAweDAwNDAsIDB4MjJiMywgMHg2MDMwLCAweGEwODQsIDB4MDBmZiwKLQkweDgxMGYsIDB4YTExNiwgMHgwMDQwLCAweDIyYjMsIDB4NzEzMCwgMHhkMTg0LCAweDAwYzAsIDB4MjJiMywKLQkweDIwMTEsIDB4YTM1MiwgMHgyMjE0LCAweGQyZWMsIDB4MDA0MCwgMHgyMjhlLCAweGMxOGQsIDB4NzEzMiwKLQkweDIwMTEsIDB4YTM1MiwgMHgyMjE0LCAweGQyYWMsIDB4MDBjMCwgMHgyMmIzLCAweDYyNDAsIDB4YTI5NCwKLQkweDAwMTAsIDB4MDA0MCwgMHgyMjlhLCAweDYyNDgsIDB4YTI5NCwgMHhmZjAwLCAweGEyOTYsIDB4ZmYwMCwKLQkweDAwNDAsIDB4MjJiMywgMHg3MDMwLCAweGQwOGMsIDB4MDA0MCwgMHgyMzA1LCAweDcwMzQsIDB4ZDA4YywKLQkweDAwYzAsIDB4MjJhYSwgMHgyMDAxLCAweGEzMGMsIDB4MjAwYywgMHhkMWFjLCAweDAwYzAsIDB4MjMwNSwKLQkweGMxYWQsIDB4MjEwMiwgMHgwMzdlLCAweDczYzAsIDB4MjAxMSwgMHg4MDEzLCAweDEwNzgsIDB4MzU3OSwKLQkweDAzN2YsIDB4MDA3OCwgMHgyMzA1LCAweDcwMzQsIDB4ZDA4YywgMHgwMGMwLCAweDIyYmYsIDB4MjAwMSwKLQkweGEzMGMsIDB4MjAwYywgMHhkMWFjLCAweDAwYzAsIDB4MjMwNSwgMHhjMWFkLCAweDIxMDIsIDB4MDM3ZSwKLQkweDczYzAsIDB4MjAxMSwgMHg4MDEzLCAweDEwNzgsIDB4MzU3OSwgMHgwMzdmLCAweDcxMzAsIDB4YzE4NSwKLQkweDcxMzIsIDB4MjAxMSwgMHhhMzUyLCAweDIyMGMsIDB4ZDFhNCwgMHgwMDQwLCAweDIyZTksIDB4MDE3ZSwKLQkweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MTA3OCwgMHg1YTZkLCAweDIwMTksIDB4MDAwZSwKLQkweDEwNzgsIDB4OWUzYiwgMHhhNDg0LCAweDAwZmYsIDB4YTA4MCwgMHgyOTNmLCAweDIwMGMsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHg4MTI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDBlLCAweDEwNzgsIDB4OWVjMCwKLQkweDAxN2YsIDB4ZDFhYywgMHgwMGMwLCAweDIyZjYsIDB4MDE3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MjAxOSwKLQkweDAwMDQsIDB4MTA3OCwgMHgyN2UyLCAweDAxN2YsIDB4MDA3OCwgMHgyMzA1LCAweDE1N2UsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDIzMDEsIDB4MTA3OCwKLQkweDQyMzUsIDB4ODEwOCwgMHgwMGYwLCAweDIyZmIsIDB4MTU3ZiwgMHgwYzdmLCAweDA0N2YsIDB4MGY3ZSwKLQkweDIwNzksIDB4YTViZSwgMHg3ODNjLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDIzMTcsIDB4NjAyNywKLQkweDAwMDQsIDB4NzgzZiwgMHgwMDAwLCAweDIwNzksIDB4MDE0MCwgMHg3ODAzLCAweDAwMDAsIDB4MGY3ZiwKLQkweDIwMTEsIDB4MDAwMywgMHgxMDc4LCAweDZlZjIsIDB4MjAxMSwgMHgwMDAyLCAweDEwNzgsIDB4NmVmYywKLQkweDEwNzgsIDB4NmRkYSwgMHgxMDc4LCAweDU5NWEsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDAsIDB4MTA3OCwKLQkweDZlNmMsIDB4MDM3ZiwgMHg2MGUzLCAweDAwMDAsIDB4MDE3ZiwgMHgyMDAxLCAweGEzMDAsIDB4MjAxNCwKLQkweGEyOTYsIDB4MDAwNCwgMHgwMGMwLCAweDIzM2EsIDB4ZDE5YywgMHgwMGMwLCAweDIzM2EsIDB4NjIyOCwKLQkweGMyOWQsIDB4NjIyYSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhMzIxLCAweDIwMDMsIDB4MDAwMCwKLQkweDYwMjcsIDB4MDAyMCwgMHhkMTk0LCAweDAwNDAsIDB4MjQyNiwgMHgwZjdlLCAweDIwNzksIDB4YTViZSwKLQkweDc4M2MsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4MjM2NiwgMHgwMTdlLCAweDYwMjcsIDB4MDAwNCwKLQkweDc4M2YsIDB4MDAwMCwgMHgyMDc5LCAweDAxNDAsIDB4NzgwMywgMHgxMDAwLCAweDc4MDMsIDB4MDAwMCwKLQkweDIwNzksIDB4YTVhYiwgMHg3ODA3LCAweDAwMDAsIDB4NzgzMywgMHgwMDAwLCAweDEwNzgsIDB4NjEwOSwKLQkweDEwNzgsIDB4NjFkMywgMHgwMTdmLCAweDBmN2YsIDB4MDA3OCwgMHgyNDI2LCAweDBmN2YsIDB4MDE3ZSwKLQkweDM5MDAsIDB4YTA4MiwgMHhhNmNkLCAweDAwYzgsIDB4MjM3MSwgMHgwMTdlLCAweDEwNzgsIDB4NzI4YSwKLQkweDAxN2YsIDB4NjIyMCwgMHhkMmI0LCAweDAwNDAsIDB4MjNkYywgMHgxMDc4LCAweDU5NWEsIDB4MTA3OCwKLQkweDZjNDEsIDB4NjAyNywgMHgwMDA0LCAweDBmN2UsIDB4MjAxOSwgMHhhNWI0LCAweDIzMDQsIDB4YTA3ZCwKLQkweDAwNDAsIDB4MjNiMiwgMHg3ODA0LCAweGEwODYsIDB4MDAzMiwgMHgwMGMwLCAweDIzYjIsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MGU3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NjE4YywgMHg2Mjg4LCAweDc4MTgsIDB4NjA4ZSwKLQkweDc4MDgsIDB4NjA4YSwgMHg2MDQzLCAweDAwMDIsIDB4MjAwMSwgMHgwMDAzLCAweDgwMDEsIDB4MDBjMCwKLQkweDIzOTYsIDB4NjA0MywgMHgwMDAwLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4NjE4ZSwKLQkweDYyOGEsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwgMHg3ODEwLCAweDIwNzAsIDB4NzAzNywKLQkweDAxMDMsIDB4MmY2MCwgMHgxMDc4LCAweDc1M2QsIDB4MGU3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGY3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHgwZjdmLCAweDBkN2UsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4YTA4NCwKLQkweDQwMDAsIDB4MDA0MCwgMHgyM2JmLCAweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4MGQ3ZiwKLQkweDBjN2UsIDB4MjA2MSwgMHhhNWFiLCAweDYwMjgsIDB4YTA5YSwgMHgwMGM4LCAweDAwYzgsIDB4MjNjZiwKLQkweDgwMDAsIDB4NjAyYSwgMHgwYzdmLCAweDEwNzgsIDB4NmMzMywgMHgwMDc4LCAweDI0MjUsIDB4MjAxOSwKLQkweGE1YjQsIDB4MjMwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjNkOSwgMHgyMDA5LCAweDAwMjcsIDB4MTA3OCwKLQkweDc1NmMsIDB4MGM3ZiwgMHgwMDc4LCAweDI0MjUsIDB4ZDJiYywgMHgwMDQwLCAweDI0MjUsIDB4MTA3OCwKLQkweDU5NjcsIDB4NjAxNywgMHgwMDEwLCAweDYwMjcsIDB4MDAwNCwgMHgwZDdlLCAweDIwNjksIDB4MDE0MCwKLQkweDY4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4MjNmMSwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MGQ3ZiwgMHgwYzdlLCAweDIwNjEsIDB4YTVhYiwgMHg2MDQ0LCAweGEwOWEsIDB4MDBjOCwKLQkweDAwYzgsIDB4MjQxNCwgMHg4MDAwLCAweDYwNDYsIDB4NjAzYywgMHgwYzdmLCAweGEwMDUsIDB4MDA0MCwKLQkweDI0MjUsIDB4MjAwOSwgMHgwN2QwLCAweDEwNzgsIDB4NTk1ZiwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDI0MTAsIDB4NjAxNywgMHgwMDEyLCAweDAwNzgsIDB4MjQyNSwKLQkweDYwMTcsIDB4MDAxNiwgMHgwMDc4LCAweDI0MjUsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDEsIDB4MTA3OCwKLQkweDZlNmMsIDB4MDM3ZiwgMHgyMDE5LCAweGE1YmEsIDB4MjMwNCwgMHhhMDY1LCAweDAwNDAsIDB4MjQyNCwKLQkweDIwMDksIDB4MDA0ZiwgMHgxMDc4LCAweDc1NmMsIDB4MGM3ZiwgMHgwMTdmLCAweGQxOWMsIDB4MDA0MCwKLQkweDI0N2MsIDB4NzAzNCwgMHhkMGFjLCAweDAwYzAsIDB4MjQ1NywgMHgwMTdlLCAweDE1N2UsIDB4NjAyNywKLQkweDAwMDgsIDB4NjAyZiwgMHgwMDIwLCAweDIwYTksIDB4MDAwYSwgMHgwMGYwLCAweDI0MzUsIDB4NjAyZiwKLQkweDAwMDAsIDB4NjE1MCwgMHhhMTg1LCAweDE0MDAsIDB4NjA1MiwgMHgyMGE5LCAweDAzMjAsIDB4MDBlMCwKLQkweDI0M2YsIDB4MjA5MSwgMHg2MDAwLCAweDYwMjAsIDB4ZDA5YywgMHgwMGMwLCAweDI0NGUsIDB4MTU3ZiwKLQkweDYxNTIsIDB4MDE3ZiwgMHg2MDI3LCAweDAwMDgsIDB4MDA3OCwgMHgyNDdjLCAweDEwNzgsIDB4MjUwZCwKLQkweDAwZjAsIDB4MjQzZiwgMHgxNTdmLCAweDYxNTIsIDB4MDE3ZiwgMHg2MDI3LCAweDAwMDgsIDB4MDE3ZSwKLQkweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDIwMTEsIDB4MDAwMywgMHgxMDc4LCAweDZlZjIsIDB4MjAxMSwKLQkweDAwMDIsIDB4MTA3OCwgMHg2ZWZjLCAweDEwNzgsIDB4NmRkYSwgMHgxMDc4LCAweDU5NWEsIDB4MDM3ZSwKLQkweDIwMTksIDB4MDAwMCwgMHgxMDc4LCAweDZlNmMsIDB4MDM3ZiwgMHg2MGUzLCAweDAwMDAsIDB4MTA3OCwKLQkweGEyMmEsIDB4MTA3OCwgMHhhMjQ4LCAweDIwMDEsIDB4YTMwMCwgMHgyMDAzLCAweDAwMDQsIDB4NjAyNywKLQkweDAwMDgsIDB4MTA3OCwgMHgxMjQ2LCAweDAxN2YsIDB4YTE4YywgMHhmZmQwLCAweDYxMjYsIDB4MDA3YywKLQkweDAwN2UsIDB4MDE3ZSwgMHgwMjdlLCAweDBlN2UsIDB4MGY3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzEsIDB4YTMwMCwgMHg3MWI4LCAweDcwYmEsIDB4YTExNiwgMHgwMDQwLCAweDI0YWUsIDB4ODFmZiwKLQkweDAwNDAsIDB4MjQ5OCwgMHgyMDExLCAweDgwMTEsIDB4MTA3OCwgMHgzNTc5LCAweDAwNzgsIDB4MjRhZSwKLQkweDIwMTEsIDB4ODAxMiwgMHgxMDc4LCAweDM1NzksIDB4MjAwMSwgMHhhMzcxLCAweDIwMDQsIDB4ZDBmYywKLQkweDAwYzAsIDB4MjRhZSwgMHgwMzdlLCAweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDIwMTksIDB4MDAyOCwKLQkweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI3ZTIsIDB4MGM3ZiwgMHgwMzdmLCAweDEyN2YsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MDA3YywgMHgwYzdlLCAweDBmN2UsIDB4MDA3ZSwKLQkweDAyN2UsIDB4MjA2MSwgMHgwMTAwLCAweGExOTAsIDB4MjRkMSwgMHgyMjA0LCAweDYwZjIsIDB4MjAxMSwKLQkweDI0ZGUsIDB4NjAwMCwgMHhhMDgyLCAweDAwMDMsIDB4MDBjOCwgMHgyNGNhLCAweDIwMDEsIDB4MDBmZiwKLQkweDAwNzgsIDB4MjRjYiwgMHgyMjA0LCAweDYwZWUsIDB4MDI3ZiwgMHgwMDdmLCAweDBmN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MDg0MCwgMHgwODQwLCAweDA4NDAsIDB4MDU4MCwgMHgwNDIwLCAweDAzNDgsIDB4MDJjMCwKLQkweDAyNTgsIDB4MDIxMCwgMHgwMWE4LCAweDAxYTgsIDB4MDFhOCwgMHgwMWE4LCAweDAxNDAsIDB4MDBmOCwKLQkweDAwZDAsIDB4MDBiMCwgMHgwMGEwLCAweDIwMjgsIDB4YTE4YywgMHgwMGZmLCAweDIxMzAsIDB4YTA5NCwKLQkweGZmMDAsIDB4MDBjMCwgMHgyNGVlLCAweDgxZmYsIDB4MDA0MCwgMHgyNGYyLCAweDEwNzgsIDB4NTYyMywKLQkweDAwNzgsIDB4MjRmOSwgMHhhMDgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGEwMDYsIDB4MDA3YywgMHhhMDgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLCAweDAwZmYsIDB4MDA3YywKLQkweDBjN2UsIDB4MjA2MSwgMHhhMzAwLCAweDYwMzAsIDB4MDA0MCwgMHgyNTA5LCAweGMwOWQsIDB4MDA3OCwKLQkweDI1MGEsIDB4YzA5YywgMHg2MDMyLCAweDBjN2YsIDB4MDA3YywgMHgwMDdlLCAweDE1N2UsIDB4MGY3ZSwKLQkweDIwNzksIDB4MDEwMCwgMHgyMGE5LCAweDAwMGEsIDB4Nzg1NCwgMHhkMDhjLCAweDAwYzAsIDB4MjUxYSwKLQkweDAwZjAsIDB4MjUxNCwgMHgwZjdmLCAweDE1N2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MDA3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MDMwLCAweDAwN2UsIDB4NjA0OCwgMHgwMDdlLCAweDYwZTQsIDB4MDA3ZSwKLQkweDYwZTgsIDB4MDA3ZSwgMHg2MDUwLCAweDAwN2UsIDB4NjBmMCwgMHgwMDdlLCAweDYwZWMsIDB4MDA3ZSwKLQkweDYwMGMsIDB4MDA3ZSwgMHg2MDA0LCAweDAwN2UsIDB4NjAyOCwgMHgwMDdlLCAweDYwZTAsIDB4MDA3ZSwKLQkweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDA3ZiwgMHg2MGUyLCAweDAwN2YsIDB4NjAyYSwKLQkweDAwN2YsIDB4NjAwNiwgMHgwMDdmLCAweDYwMGUsIDB4MDA3ZiwgMHg2MGVlLCAweDAwN2YsIDB4NjBmMiwKLQkweDAwN2YsIDB4NjA1MiwgMHgwMDdmLCAweDYwZWEsIDB4MDA3ZiwgMHg2MGU2LCAweDAwN2YsIDB4NjA0YSwKLQkweDAwN2YsIDB4NjAzMiwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywgMHgyNTdkLCAweDI1ODEsIDB4MjU4NSwKLQkweDI1OGIsIDB4MjU5MSwgMHgyNTk3LCAweDI1OWQsIDB4MjVhNSwgMHgyNWFkLCAweDI1YjMsIDB4MjViOSwKLQkweDI1YzEsIDB4MjVjOSwgMHgyNWQxLCAweDI1ZDksIDB4MjVlMywgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwKLQkweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwKLQkweDI1ZWQsIDB4MjVlZCwgMHgyNWVkLCAweDI1ZWQsIDB4MjVlZCwgMHgxMDdlLCAweDAwN2UsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIyMDAsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDIyMDAsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjBkZSwgMHgwMDc4LCAweDI2MDYsIDB4MTA3ZSwKLQkweDAwN2UsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIyMDAsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIyMDAsIDB4MTA3OCwgMHgyMGRlLCAweDAwNzgsIDB4MjYwNiwgMHgxMDdlLCAweDAwN2UsIDB4MTA3OCwKLQkweDIxMjMsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjBkZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjBkZSwgMHgxMDc4LCAweDIxMjMsIDB4MDA3OCwKLQkweDI2MDYsIDB4MTA3ZSwgMHgwMDdlLCAweDEwNzgsIDB4MjIwMCwgMHgxMDc4LCAweDIwZGUsIDB4MTA3OCwKLQkweDIxMjMsIDB4MDA3OCwgMHgyNjA2LCAweDEwN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDIyMDAsIDB4MTA3OCwKLQkweDIwZGUsIDB4MTA3OCwgMHgyMTIzLCAweDAwNzgsIDB4MjYwNiwgMHgwMDA1LCAweDAwNzgsIDB4MjVlZCwKLQkweGIwODQsIDB4MDAzYywgMHg4MDA0LCAweDgwMDQsIDB4MDA3OSwgMHgyNWY2LCAweDI2MDYsIDB4MjU4MywKLQkweDI1ODcsIDB4MjU4ZCwgMHgyNTkzLCAweDI1OTksIDB4MjU5ZiwgMHgyNWE3LCAweDI1YWYsIDB4MjViNSwKLQkweDI1YmIsIDB4MjVjMywgMHgyNWNiLCAweDI1ZDMsIDB4MjVkYiwgMHgyNWU1LCAweDAwMDgsIDB4MjVmMCwKLQkweDAwN2YsIDB4MTA3ZiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHgwYzdlLCAweDAyN2UsIDB4MDQ3ZSwKLQkweDIwMjEsIDB4MDAwMCwgMHgxMDc4LCAweDQ4OTcsIDB4MDBjMCwgMHgyNzA1LCAweDcwYzgsIDB4ZDA5YywKLQkweDAwNDAsIDB4MjYyNCwgMHhkMDg0LCAweDAwYzAsIDB4MjYyNCwgMHhkMGJjLCAweDAwYzAsIDB4MjcwNSwKLQkweDEwNzgsIDB4MjcwOSwgMHgwMDc4LCAweDI3MDUsIDB4ZDA5NCwgMHgwMDQwLCAweDI2MmIsIDB4NzA5MywKLQkweGZmZmYsIDB4MDA3OCwgMHgyNzA1LCAweDIwMDEsIDB4MDEwYywgMHgyMDNjLCAweDcyODAsIDB4ZDI4NCwKLQkweDAwNDAsIDB4MjY5NCwgMHhkMjhjLCAweDAwYzAsIDB4MjY5NCwgMHgwMzdlLCAweDczOTAsIDB4YTM4ZSwKLQkweGZmZmYsIDB4MDA0MCwgMHgyNjNlLCAweDgzZmYsIDB4MDBjMCwgMHgyNjQwLCAweDIwMTksIDB4MDAwMSwKLQkweDgzMTQsIDB4YTJlMCwgMHhhOWMwLCAweDJjMDQsIDB4YTM4YywgMHgwMDAxLCAweDAwNDAsIDB4MjY0ZCwKLQkweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwNzgsIDB4MjY0ZiwgMHhhMDg0LCAweDAwZmYsIDB4YTcwZSwKLQkweDAwNDAsIDB4MjY4OSwgMHhhMDhlLCAweDAwMDAsIDB4MDA0MCwgMHgyNjg5LCAweGEwOGUsIDB4MDBmZiwKLQkweDAwYzAsIDB4MjY2NiwgMHg3MjMwLCAweGQyODQsIDB4MDBjMCwgMHgyNjhmLCAweDcyODAsIDB4YzI4ZCwKLQkweDcyODIsIDB4NzA5MywgMHhmZmZmLCAweDAzN2YsIDB4MDA3OCwgMHgyNjk0LCAweDIwMDksIDB4MDAwMCwKLQkweDEwNzgsIDB4MjRlMywgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHgyNjhjLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MjY4MywgMHg3MDMwLCAweGQwOGMsIDB4MDA0MCwKLQkweDI2N2QsIDB4NjAwMCwgMHhkMGJjLCAweDAwNDAsIDB4MjY4MywgMHgxMDc4LCAweDI3MWYsIDB4MDA0MCwKLQkweDI2OGMsIDB4MDA3OCwgMHgyNjg5LCAweDEwNzgsIDB4Mjg1NywgMHgxMDc4LCAweDI3NGMsIDB4MDA0MCwKLQkweDI2OGMsIDB4ODMxOCwgMHgwMDc4LCAweDI2NDAsIDB4NzM5MiwgMHgwMDc4LCAweDI2OTEsIDB4NzA5MywKLQkweGZmZmYsIDB4MDM3ZiwgMHgwMDc4LCAweDI3MDUsIDB4YTc4MCwgMHgyOTNmLCAweDIwM2MsIDB4YTdiYywKLQkweGZmMDAsIDB4ODczZiwgMHgyMDQxLCAweDAwN2UsIDB4NzA5MCwgMHhhMDk2LCAweGZmZmYsIDB4MDBjMCwKLQkweDI2YTYsIDB4MjAwOSwgMHgwMDAwLCAweDI4YTgsIDB4MDA3OCwgMHgyNmIyLCAweGE4MTIsIDB4MDA0OCwKLQkweDI2YWUsIDB4MjAwOCwgMHhhODAyLCAweDIwYTgsIDB4MDA3OCwgMHgyNmIyLCAweDcwOTMsIDB4ZmZmZiwKLQkweDAwNzgsIDB4MjcwNSwgMHgyNzAwLCAweDE1N2UsIDB4MDE3ZSwgMHhhMTA2LCAweDAwNDAsIDB4MjZmOSwKLQkweGM0ODQsIDB4MTA3OCwgMHg0NTAxLCAweDAwNDAsIDB4MjZjMywgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwKLQkweDI3MDIsIDB4MDA3OCwgMHgyNmM0LCAweGM0ODUsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHgyNmQzLCAweDcwMzAsIDB4ZDA4YywgMHgwMDQwLCAweDI2ZjEsIDB4NjAwMCwKLQkweGQwYmMsIDB4MDBjMCwgMHgyNmYxLCAweDcyODAsIDB4ZDI4YywgMHgwMDQwLCAweDI2ZTksIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDA0OCwgMHgyNmY5LCAweGQ0ODQsIDB4MDBjMCwKLQkweDI2ZTUsIDB4MTA3OCwgMHg0NGJjLCAweDAwNzgsIDB4MjZlNywgMHgxMDc4LCAweDI5MjEsIDB4MDA3OCwKLQkweDI2ZjksIDB4MTA3OCwgMHgyODU3LCAweDEwNzgsIDB4Mjc0YywgMHgwMDQwLCAweDI3MDIsIDB4MDA3OCwKLQkweDI2ZjksIDB4MTA3OCwgMHgyOGVjLCAweDAwNDAsIDB4MjZmOSwgMHgxMDc4LCAweDI3MWYsIDB4MDA0MCwKLQkweDI3MDIsIDB4MDE3ZiwgMHg4MTA4LCAweDE1N2YsIDB4MDBmMCwgMHgyNmIyLCAweDcwOTMsIDB4ZmZmZiwKLQkweDAwNzgsIDB4MjcwNSwgMHgwMTdmLCAweDE1N2YsIDB4NzE5MiwgMHgwNDdmLCAweDAyN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHgwMTdlLCAweDcwOTMsIDB4MDAwMCwgMHgyMDA5LCAweDAwN2UsIDB4MTA3OCwKLQkweDQ0OTksIDB4MDBjMCwgMHgyNzFjLCAweDEwNzgsIDB4Mjg1NywgMHgxMDc4LCAweDI3NGMsIDB4MDA0MCwKLQkweDI3MWMsIDB4NzBjOCwgMHhjMGJkLCAweDcwY2EsIDB4MDE3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MDE3ZSwKLQkweDA3N2UsIDB4MGQ3ZSwgMHgwYzdlLCAweDJjNjgsIDB4MjAwMSwgMHhhMzU2LCAweDIwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg0MiwgMHgxMDc4LCAweDc0ZDcsIDB4MDA0MCwgMHgyNzQ3LCAweDJkMDAsIDB4NjAxYSwKLQkweDYwMWYsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDQzZiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MDhjLCAweDgwMDAsIDB4NzA4ZSwKLQkweDEyN2YsIDB4MjAwOSwgMHgwMDA0LCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MGM3ZiwKLQkweDBkN2YsIDB4MDc3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwNzdlLCAweDBkN2UsIDB4MGM3ZSwKLQkweDJjNjgsIDB4MjAwMSwgMHhhMzU2LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDA0MCwgMHgyNzg1LCAweDJkMDAsIDB4NjAxYSwgMHg2ODAwLCAweGMwYzQsIDB4NjgwMiwKLQkweDY4YTAsIDB4YTA4NiwgMHgwMDdlLCAweDAwNDAsIDB4Mjc2ZSwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDI3NmUsIDB4MTA3OCwgMHgyODEzLCAweDYwMWYsIDB4MDAwMSwKLQkweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwOGMsIDB4ODAwMCwgMHg3MDhlLCAweDEyN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgwYzdmLCAweDBkN2YsIDB4MDc3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHgwYzdlLCAweDAyN2UsIDB4MjAwOSwgMHgwMDgwLCAweDEwNzgsIDB4NDQ5OSwKLQkweDAwYzAsIDB4Mjc5OCwgMHgxMDc4LCAweDI3OWIsIDB4MDA0MCwgMHgyNzk4LCAweDcwY2YsIDB4ZmZmZiwKLQkweDAyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MDc3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MmM2OCwKLQkweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDI3YmQsIDB4MmQwMCwgMHg2MDFhLCAweDYwMWYsIDB4MDAwMSwKLQkweDIwMDEsIDB4MDAwMCwgMHgxMDc4LCAweDQ0MmIsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwZDAsIDB4ODAwMCwgMHg3MGQyLCAweDEyN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgwYzdmLCAweDBkN2YsIDB4MDc3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHgwYzdlLCAweDBkN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwKLQkweDAwN2YsIDB4MTA3OCwgMHg0NDk5LCAweDAwYzAsIDB4MjdkZSwgMHgyYzY4LCAweDEwNzgsIDB4NzRkNywKLQkweDAwNDAsIDB4MjdkZSwgMHgyZDAwLCAweDYwMWEsIDB4NjMxMiwgMHg2MDFmLCAweDAwMDEsIDB4NjIwYSwKLQkweDIwMDksIDB4MDAyMiwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGQ3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHgwZTdlLCAweDBjN2UsIDB4MDY3ZSwgMHgwMzdlLCAweDAyN2UsIDB4MTA3OCwKLQkweDVkNjAsIDB4MTA3OCwgMHg1ZDAyLCAweDEwNzgsIDB4N2RkZiwgMHgyMTMwLCAweDgxZmYsIDB4MDA0MCwKLQkweDI3ZjcsIDB4MjBhOSwgMHgwMDdlLCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDI3ZmIsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAxN2UsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MjgwNCwKLQkweDEwNzgsIDB4NDcxYiwgMHgxMDc4LCAweDQyMzUsIDB4MDE3ZiwgMHg4MTA4LCAweDAwZjAsIDB4MjdmYiwKLQkweDg2ZmYsIDB4MDBjMCwgMHgyODBkLCAweDEwNzgsIDB4MTE5YiwgMHgwMjdmLCAweDAzN2YsIDB4MDY3ZiwKLQkweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGM3ZSwgMHgwMzdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDYyMTgsIDB4MjI3MCwgMHg3MmEwLCAweDAyN2UsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4NWQ1MywKLQkweDA3N2UsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NWM3OCwgMHgyYzA4LCAweDEwNzgsIDB4OWMzOCwKLQkweDA3N2YsIDB4MDE3ZiwgMHgyZTYwLCAweDEwNzgsIDB4NDcxYiwgMHg2MjEwLCAweDYzMTQsIDB4MTA3OCwKLQkweDQyMzUsIDB4NjIxMiwgMHg2MzE2LCAweDAxN2YsIDB4MDI3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgwMDdlLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywKLQkweDAwYzAsIDB4Mjg0ZCwgMHgyMDcxLCAweGEzMDAsIDB4NzA4YywgMHhhMDA1LCAweDAwNDAsIDB4Mjg0YSwKLQkweDgwMDEsIDB4NzA4ZSwgMHgwMDdmLCAweDBlN2YsIDB4MDA3YywgMHgyMDcxLCAweGEzMDAsIDB4NzBkMCwKLQkweGEwMDUsIDB4MDA0MCwgMHgyODRhLCAweDgwMDEsIDB4NzBkMiwgMHgwMDc4LCAweDI4NGEsIDB4NjAwMCwKLQkweGMwOGMsIDB4NjAwMiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDI3ZSwKLQkweDAxN2UsIDB4MTU3ZSwgMHgyMTc4LCAweDgxZmYsIDB4MDBjMCwgMHgyODZhLCAweDIwYTksIDB4MDAwMSwKLQkweDAwNzgsIDB4Mjg4NSwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGM0LCAweDAwNDAsIDB4Mjg4MSwKLQkweGQwYTQsIDB4MDA0MCwgMHgyODgxLCAweDA0N2UsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAyNCwKLQkweGE0YTQsIDB4MDBmZiwgMHg4NDI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDJkLCAweDEwNzgsIDB4OWVjMCwKLQkweDA0N2YsIDB4MjBhOSwgMHgwMGZmLCAweDIwMTEsIDB4MDAwMCwgMHgwMjdlLCAweGEyOGUsIDB4MDA3ZSwKLQkweDAwNDAsIDB4MjhjOSwgMHhhMjhlLCAweDAwN2YsIDB4MDA0MCwgMHgyOGM5LCAweGEyOGUsIDB4MDA4MCwKLQkweDAwNDAsIDB4MjhjOSwgMHhhMjg4LCAweGE0MzQsIDB4MjEwYywgMHg4MWZmLCAweDAwNDAsIDB4MjhjOSwKLQkweDhmZmYsIDB4MTA0MCwgMHgyOGQ1LCAweDBjN2UsIDB4MjE2MCwgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwKLQkweDQ4YTIsIDB4MGM3ZiwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDBjN2UsIDB4MDI3ZSwgMHgyMTYwLCAweDYyMDQsIDB4YTI5NCwKLQkweDAwZmYsIDB4YTI4NiwgMHgwMDA2LCAweDAwYzAsIDB4MjhiOSwgMHg2MDA3LCAweDA0MDQsIDB4MDA3OCwKLQkweDI4YmUsIDB4MjAwMSwgMHgwMDA0LCAweDgwMDcsIDB4YTIxNSwgMHg2MjA2LCAweDAyN2YsIDB4MGM3ZiwKLQkweDAxN2UsIDB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDE3ZiwgMHgwNzdmLCAweDIxNjAsIDB4MTA3OCwKLQkweDQ3MWIsIDB4MDI3ZiwgMHg4MjEwLCAweDAwZjAsIDB4Mjg4NSwgMHgxNTdmLCAweDAxN2YsIDB4MDI3ZiwKLQkweDAzN2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgwNDdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDA0MCwgMHgyOGU4LCAweGQwYTQsIDB4MDA0MCwKLQkweDI4ZTgsIDB4YTAwNiwgMHgyMjIwLCAweDg0MjcsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwKLQkweDAxN2YsIDB4MDI3ZiwgMHgwNDdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwMjdlLCAweDAzN2UsIDB4MGM3ZSwKLQkweDcyODAsIDB4ODJmZiwgMHgwMDQwLCAweDI5MWEsIDB4YTI5MCwgMHhhMzUyLCAweDIyMTQsIDB4ZDJhYywKLQkweDAwYzAsIDB4MjkxYSwgMHgyMTAwLCAweDEwNzgsIDB4MjRmYSwgMHg4MWZmLCAweDAwNDAsIDB4MjkxYywKLQkweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweGEyZTAsIDB4YTljMCwgMHgyYzA0LCAweGQzODQsIDB4MDA0MCwKLQkweDI5MGUsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDA3OCwgMHgyOTEwLCAweGEwODQsIDB4MDBmZiwKLQkweGExMTYsIDB4MDA0MCwgMHgyOTFjLCAweGEwOTYsIDB4MDBmZiwgMHgwMDQwLCAweDI5MWEsIDB4ODMxOCwKLQkweDAwNzgsIDB4MjkwMiwgMHhhMDg1LCAweDAwMDEsIDB4MGM3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwKLQkweDAwN2MsIDB4MDE3ZSwgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweGExODAsIDB4YTQzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwMDQwLCAweDI5M2IsIDB4MDE3ZSwgMHgwYzdlLCAweDEwNzgsIDB4OGVjMCwKLQkweDAxN2YsIDB4MTA0MCwgMHgxMzI4LCAweDYxMWEsIDB4MTA3OCwgMHgyODEzLCAweDEwNzgsIDB4NzUzZCwKLQkweDAxN2YsIDB4MTA3OCwgMHg0NGJjLCAweDEyN2YsIDB4MGM3ZiwgMHgwMTdmLCAweDAwN2MsIDB4N2VlZiwKLQkweDdkZTgsIDB4N2NlNCwgMHg4MGUyLCAweDdiZTEsIDB4ODBlMCwgMHg4MGRjLCAweDgwZGEsIDB4N2FkOSwKLQkweDgwZDYsIDB4ODBkNSwgMHg4MGQ0LCAweDgwZDMsIDB4ODBkMiwgMHg4MGQxLCAweDc5Y2UsIDB4NzhjZCwKLQkweDgwY2MsIDB4ODBjYiwgMHg4MGNhLCAweDgwYzksIDB4ODBjNywgMHg4MGM2LCAweDc3YzUsIDB4NzZjMywKLQkweDgwYmMsIDB4ODBiYSwgMHg3NWI5LCAweDgwYjYsIDB4NzRiNSwgMHg3M2I0LCAweDcyYjMsIDB4ODBiMiwKLQkweDgwYjEsIDB4ODBhZSwgMHg3MWFkLCAweDgwYWMsIDB4NzBhYiwgMHg2ZmFhLCAweDZlYTksIDB4ODBhNywKLQkweDZkYTYsIDB4NmNhNSwgMHg2YmEzLCAweDZhOWYsIDB4Njk5ZSwgMHg2ODlkLCAweDgwOWIsIDB4ODA5OCwKLQkweDY3OTcsIDB4NjY5MCwgMHg2NThmLCAweDY0ODgsIDB4NjM4NCwgMHg2MjgyLCAweDgwODEsIDB4ODA4MCwKLQkweDYxN2MsIDB4NjA3YSwgMHg4MDc5LCAweDVmNzYsIDB4ODA3NSwgMHg4MDc0LCAweDgwNzMsIDB4ODA3MiwKLQkweDgwNzEsIDB4ODA2ZSwgMHg1ZTZkLCAweDgwNmMsIDB4NWQ2YiwgMHg1YzZhLCAweDViNjksIDB4ODA2NywKLQkweDVhNjYsIDB4NTk2NSwgMHg1ODYzLCAweDU3NWMsIDB4NTY1YSwgMHg1NTU5LCAweDgwNTYsIDB4ODA1NSwKLQkweDU0NTQsIDB4NTM1MywgMHg1MjUyLCAweDUxNTEsIDB4NTA0ZSwgMHg0ZjRkLCAweDgwNGMsIDB4ODA0YiwKLQkweDRlNGEsIDB4NGQ0OSwgMHg4MDQ3LCAweDRjNDYsIDB4ODA0NSwgMHg4MDQzLCAweDgwM2MsIDB4ODAzYSwKLQkweDgwMzksIDB4ODAzNiwgMHg0YjM1LCAweDgwMzQsIDB4NGEzMywgMHg0OTMyLCAweDQ4MzEsIDB4ODAyZSwKLQkweDQ3MmQsIDB4NDYyYywgMHg0NTJiLCAweDQ0MmEsIDB4NDMyOSwgMHg0MjI3LCAweDgwMjYsIDB4ODAyNSwKLQkweDQxMjMsIDB4NDAxZiwgMHgzZjFlLCAweDNlMWQsIDB4M2QxYiwgMHgzYzE4LCAweDgwMTcsIDB4ODAxMCwKLQkweDNiMGYsIDB4M2EwOCwgMHg4MDA0LCAweDM5MDIsIDB4ODAwMSwgMHg4MDAwLCAweDgwMDAsIDB4MzgwMCwKLQkweDM3MDAsIDB4MzYwMCwgMHg4MDAwLCAweDM1MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzQwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMzMDAsIDB4MzIwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMxMDAsIDB4MzAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHgyZjAwLCAweDgwMDAsIDB4MmUwMCwgMHgyZDAwLCAweDJjMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHgyYjAwLCAweDgwMDAsIDB4MmEwMCwgMHgyOTAwLCAweDI4MDAsIDB4ODAwMCwKLQkweDI3MDAsIDB4MjYwMCwgMHgyNTAwLCAweDI0MDAsIDB4MjMwMCwgMHgyMjAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDIxMDAsIDB4MjAwMCwgMHgxZjAwLCAweDFlMDAsIDB4MWQwMCwgMHgxYzAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDFiMDAsIDB4MWEwMCwgMHg4MDAwLCAweDE5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHgxODAwLCAweDgwMDAsIDB4MTcwMCwgMHgxNjAwLCAweDE1MDAsIDB4ODAwMCwKLQkweDE0MDAsIDB4MTMwMCwgMHgxMjAwLCAweDExMDAsIDB4MTAwMCwgMHgwZjAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDBlMDAsIDB4MGQwMCwgMHgwYzAwLCAweDBiMDAsIDB4MGEwMCwgMHgwOTAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDA4MDAsIDB4MDcwMCwgMHg4MDAwLCAweDA2MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDUwMCwKLQkweDA0MDAsIDB4MDMwMCwgMHg4MDAwLCAweDAyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDEwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjA3MSwKLQkweGEzODEsIDB4NzAwMywgMHgwMDAyLCAweGEwMDYsIDB4NzAxMiwgMHg3MDE2LCAweDcwM2EsIDB4NzAzZSwKLQkweDcwMzMsIDB4YTM5MSwgMHg3MDM3LCAweGEzOTEsIDB4NzAwNywgMHgwMDAxLCAweDIwNjEsIDB4YTNkMSwKLQkweDYwMDMsIDB4MDAwMiwgMHgwMDdjLCAweDAwOTAsIDB4MmE2NiwgMHgwMDY4LCAweDJhNjYsIDB4MjA3MSwKLQkweGEzODEsIDB4MmI3OCwgMHg3ODE4LCAweGQwODQsIDB4MDBjMCwgMHgyYTY2LCAweDJhNjAsIDB4NzgyMCwKLQkweGEwOGUsIDB4MDA2OSwgMHgwMGMwLCAweDJiNTYsIDB4MDA3OSwgMHgyYWVhLCAweDAwN2MsIDB4MjA3MSwKLQkweGEzODEsIDB4NzAwNCwgMHgwMDc5LCAweDJhNmMsIDB4MmE3MCwgMHgyYTcxLCAweDJhN2IsIDB4MmE4ZCwKLQkweDAwN2MsIDB4MDA5MCwgMHgyYTdhLCAweDAwNjgsIDB4MmE3YSwgMHgyYjc4LCAweDc4MTgsIDB4ZDA4NCwKLQkweDAwNDAsIDB4MmE5OSwgMHgwMDdjLCAweDJiNzgsIDB4MjA2MSwgMHhhM2QxLCAweDYwMDgsIDB4YTA4ZSwKLQkweDAxMDAsIDB4MDA0MCwgMHgyYTg4LCAweGEwODYsIDB4MDIwMCwgMHgwMDQwLCAweDJiNGUsIDB4MDA3YywKLQkweDcwMTQsIDB4MjA2OCwgMHgyYTYwLCAweDcwMTgsIDB4MDA3YSwgMHg3MDEwLCAweDIwNjgsIDB4NjgzNCwKLQkweGEwODYsIDB4MDEwMywgMHgwMDQwLCAweDJhOTUsIDB4MDA3YywgMHgyYTYwLCAweDJiNzgsIDB4NzAxOCwKLQkweDAwN2EsIDB4MmE2MCwgMHg3ODIwLCAweGEwOGEsIDB4MDA0MCwgMHgwMGM4LCAweDJhYTIsIDB4NjFiOCwKLQkweDAwNzksIDB4MmFhYSwgMHgyMTAwLCAweGEwOGEsIDB4MDAzZiwgMHgwMGM4LCAweDJiNGEsIDB4NjFiOCwKLQkweDAwNzksIDB4MmFlYSwgMHgyYjJjLCAweDJiNWUsIDB4MmI2NiwgMHgyYjZhLCAweDJiNzIsIDB4MmI3OCwKLQkweDJiN2MsIDB4MmI4OCwgMHgyYjhjLCAweDJiOTYsIDB4MmI5YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiOWUsIDB4MmI0YSwgMHgyYmFlLCAweDJiYzUsIDB4MmJkYywgMHgyYzU4LCAweDJjNWQsIDB4MmM4YSwKLQkweDJjZTQsIDB4MmNmNSwgMHgyZDEzLCAweDJkNTQsIDB4MmQ1ZSwgMHgyZDZiLCAweDJkN2UsIDB4MmQ5ZCwKLQkweDJkYTYsIDB4MmRlMywgMHgyZGU5LCAweDJiNGEsIDB4MmUwNSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZTBjLCAweDJlMTYsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmUxZSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZTMwLCAweDJlNDcsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZTU5LCAweDJlYjAsIDB4MmYwZSwgMHgyZjFmLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MzhmMSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyYjk2LCAweDJiOWEsIDB4MmYzNiwgMHgyYjRhLCAweDJmNDMsIDB4Mzk3ZCwKLQkweDM5ZGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwKLQkweDJiNGEsIDB4MmI0YSwgMHgyZjkwLCAweDMwYzUsIDB4MzBlMSwgMHgzMGVkLCAweDMxNTAsIDB4MzFhOSwKLQkweDMxYjQsIDB4MzFmMywgMHgzMjAyLCAweDMyMTEsIDB4MzIxNCwgMHgyZjQ3LCAweDMyMzgsIDB4MzI4NCwKLQkweDMyOTEsIDB4MzNhMiwgMHgzNGNkLCAweDM0ZjcsIDB4MzYwNCwgMHgzNjE0LCAweDM2MjEsIDB4MzY1YiwKLQkweDM3MmEsIDB4MmI0YSwgMHgyYjRhLCAweDJiNGEsIDB4MmI0YSwgMHgzNzkyLCAweDM3YWUsIDB4MzgyOCwKLQkweDM4ZTIsIDB4NzEzYywgMHgwMDc4LCAweDJiMmMsIDB4MjAyMSwgMHg0MDAwLCAweDEwNzgsIDB4MzU1MywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4MmIzOSwgMHg3ODE4LCAweGQwODQsIDB4MDA0MCwKLQkweDJiM2MsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMzAsIDB4N2MyMiwgMHg3OTI2LCAweDdhMmEsIDB4N2IyZSwKLQkweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAwNywgMHgwMDAxLCAweDIwOTEsIDB4NTAwMCwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDIxLCAweDQwMDEsIDB4MDA3OCwgMHgyYjJlLCAweDIwMjEsIDB4NDAwMiwKLQkweDAwNzgsIDB4MmIyZSwgMHgyMDIxLCAweDQwMDMsIDB4MDA3OCwgMHgyYjJlLCAweDIwMjEsIDB4NDAwNSwKLQkweDAwNzgsIDB4MmIyZSwgMHgyMDIxLCAweDQwMDYsIDB4MDA3OCwgMHgyYjJlLCAweGEwMmUsIDB4MjUyMCwKLQkweDdiMjgsIDB4N2EyYywgMHg3ODI0LCAweDc5MzAsIDB4MDA3OCwgMHgzNTYyLCAweDc4MjMsIDB4MDAwNCwKLQkweDc4MjQsIDB4MDA3YSwgMHhhMDJlLCAweDI1MjAsIDB4N2IyOCwgMHg3YTJjLCAweDc4MjQsIDB4NzkzMCwKLQkweDAwNzgsIDB4MzU2NiwgMHg3OTI0LCAweDc4MjgsIDB4MjExNCwgMHgyMDBhLCAweDAwNzgsIDB4MmIyYywKLQkweDc5MjQsIDB4MjExNCwgMHgwMDc4LCAweDJiMmMsIDB4MjA5OSwgMHgwMDA5LCAweDIwYTEsIDB4MDAwOSwKLQkweDIwYTksIDB4MDAwNywgMHg1M2EzLCAweDc5MjQsIDB4N2EyOCwgMHg3YjJjLCAweDAwNzgsIDB4MmIyYywKLQkweDc4MjQsIDB4MjA2MCwgMHgwMDc4LCAweDJiYTAsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDAxMywKLQkweDIwMTksIDB4MDAxMCwgMHg3ODNiLCAweDAwMTcsIDB4MDA3OCwgMHgyYjJjLCAweDdkMzgsIDB4N2MzYywKLQkweDAwNzgsIDB4MmI2MCwgMHg3ZDM4LCAweDdjM2MsIDB4MDA3OCwgMHgyYjZjLCAweDIwNjEsIDB4MTAwMCwKLQkweDYxMGMsIDB4YTAwNiwgMHgyYzE0LCAweGEyMDAsIDB4OGM2MCwgMHg4MTA5LCAweDAwYzAsIDB4MmJhMiwKLQkweDIwMTAsIDB4YTAwNSwgMHgwMDQwLCAweDJiMmMsIDB4MDA3OCwgMHgyYjUyLCAweDIwNjksIDB4YTM1MSwKLQkweDc4MjQsIDB4NzkzMCwgMHhhMTFhLCAweDAwYzgsIDB4MmI1YSwgMHg4MDE5LCAweDAwNDAsIDB4MmI1YSwKLQkweDY4NGEsIDB4Njk0MiwgMHg3ODJjLCAweDY4NTIsIDB4NzgyOCwgMHg2ODU2LCAweGEwMDYsIDB4Njg1YSwKLQkweDY4NWUsIDB4MTA3OCwgMHg0ZGJkLCAweDAwNzgsIDB4MmIyYywgMHgyMDY5LCAweGEzNTEsIDB4NzgyNCwKLQkweDc5MzQsIDB4YTExYSwgMHgwMGM4LCAweDJiNWEsIDB4ODAxOSwgMHgwMDQwLCAweDJiNWEsIDB4Njg0ZSwKLQkweDY5NDYsIDB4NzgyYywgMHg2ODYyLCAweDc4MjgsIDB4Njg2NiwgMHhhMDA2LCAweDY4NmEsIDB4Njg2ZSwKLQkweDEwNzgsIDB4NDk0ZCwgMHgwMDc4LCAweDJiMmMsIDB4YTAyZSwgMHgyNTIwLCAweDgxZmYsIDB4MDBjMCwKLQkweDJiNTYsIDB4NzkyNCwgMHg3YjI4LCAweDdhMmMsIDB4MjBhOSwgMHgwMDA1LCAweDIwYTEsIDB4YTM4OCwKLQkweDQxYTEsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgyMDA5LCAweDAwMjAsIDB4MTA3OCwKLQkweDM1NjIsIDB4NzAxYiwgMHgyYmY0LCAweDAwN2MsIDB4NjgzNCwgMHgyMDA4LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOTYsIDB4MDAxMSwgMHgwMDQwLCAweDJjMDAsIDB4YTA5NiwgMHgwMDE5LCAweDAwYzAsIDB4MmI1NiwKLQkweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDAwNDAsIDB4MmI1NiwgMHg3MTBlLCAweDcwMGMsIDB4ODAwMSwKLQkweDAwNDAsIDB4MmMzMSwgMHg3MDBlLCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MjAwOSwKLQkweDAwMjAsIDB4MjA2MSwgMHhhM2QxLCAweDYyMjQsIDB4NjMyOCwgMHg2NDJjLCAweDY1MzAsIDB4YTI5MCwKLQkweDAwNDAsIDB4YTM5OSwgMHgwMDAwLCAweGE0YTEsIDB4MDAwMCwgMHhhNWE5LCAweDAwMDAsIDB4MTA3OCwKLQkweDM1NjIsIDB4NzAxYiwgMHgyYzI0LCAweDAwN2MsIDB4NjgzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA5NiwKLQkweDAwMDIsIDB4MDA0MCwgMHgyYzJmLCAweGEwOTYsIDB4MDAwYSwgMHgwMGMwLCAweDJiNTYsIDB4MDA3OCwKLQkweDJjMDYsIDB4NzAxMCwgMHgyMDY4LCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDEwNzgsIDB4NDM2ZSwKLQkweDAwYzAsIDB4MmMzZiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgyYzQxLCAweDAwN2MsIDB4MTA3OCwKLQkweDRhNjAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LCAweDIwOTksIDB4YTM4OCwKLQkweDUzMGEsIDB4MjEwMCwgMHhhMjEwLCAweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwKLQkweDAwMDAsIDB4YWQ4MCwgMHgwMDBkLCAweDIwMDksIDB4MDAyMCwgMHgxMjdmLCAweDAwNzgsIDB4MzU2NiwKLQkweDYxYTAsIDB4NzgyNCwgMHg2MGEyLCAweDAwNzgsIDB4MmIyYywgMHgyMDkxLCAweDgwMDAsIDB4NzgyMywKLQkweDQwMDAsIDB4NzgyNywgMHg0OTUzLCAweDc4MmIsIDB4NTAyMCwgMHg3ODJmLCAweDIwMjAsIDB4MjAwOSwKLQkweDAxN2YsIDB4MjEwNCwgMHg3ODMyLCAweDNmMDAsIDB4NzgzNiwgMHgyMDYxLCAweDAxMDAsIDB4NjIwMCwKLQkweDIwNjEsIDB4MDIwMCwgMHg2MDNjLCAweDgwMDcsIDB4YTIwNSwgMHg3ODNhLCAweDIwMDksIDB4MDRmZCwKLQkweDIxMDQsIDB4NzgzZSwgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwNzEsIDB4MDAxMCwgMHgyMGMxLCAweDAwZjAsIDB4YTA4YSwgMHgwMDAzLCAweDAwYzgsIDB4MDQyNywKLQkweDAwNzgsIDB4MDQyMywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywKLQkweDAwZmYsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MmI1YSwgMHg3ZTM4LCAweGE2ODQsIDB4M2ZmZiwKLQkweGEwODIsIDB4NDAwMCwgMHgwMDQ4LCAweDJjOWUsIDB4MDA3OCwgMHgyYjVhLCAweDdjMjgsIDB4N2QyYywKLQkweDEwNzgsIDB4NDZkNiwgMHhkMjhjLCAweDAwYzAsIDB4MmNhOSwgMHgxMDc4LCAweDQ2NmEsIDB4MDA3OCwKLQkweDJjYWIsIDB4MTA3OCwgMHg0NmE0LCAweDAwYzAsIDB4MmNkNSwgMHgyMDYxLCAweGFhMDAsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDJjYzMsIDB4NjAxMCwKLQkweGEwNmQsIDB4MDA0MCwgMHgyY2MzLCAweDY4M2MsIDB4YTQwNiwgMHgwMGMwLCAweDJjYzMsIDB4Njg0MCwKLQkweGE1MDYsIDB4MDA0MCwgMHgyY2NlLCAweDEyN2YsIDB4YWNlMCwgMHgwMDEwLCAweDIwMDEsIDB4YTMxNSwKLQkweDIwMDQsIDB4YWMwMiwgMHgwMGM4LCAweDJiNTYsIDB4MDA3OCwgMHgyY2FmLCAweDEwNzgsIDB4ODc1OCwKLQkweDEyN2YsIDB4MDA0MCwgMHgyYjU2LCAweDAwNzgsIDB4MmIyYywgMHhhMDBlLCAweDIwMDEsIDB4MDAwNSwKLQkweDEwNzgsIDB4NGE2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDhjYzAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwKLQkweDM1MzAsIDB4MDA0MCwgMHgyYjVhLCAweDEwNzgsIDB4NDVhNywgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwKLQkweDQ2ZTQsIDB4MDA0MCwgMHgyYjU2LCAweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwKLQkweDEwNzgsIDB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4MTA3OCwgMHg0NzVmLCAweDAwNDAsIDB4MmI1NiwKLQkweDIwMTksIDB4MDAwNSwgMHgxMDc4LCAweDQ3MDUsIDB4MDA0MCwgMHgyYjU2LCAweDc4MjgsIDB4YTA4YSwKLQkweDEwMDAsIDB4MDBjOCwgMHgyYjVhLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4MTA3OCwKLQkweDU4ZTEsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDgxZmYsIDB4MDA0MCwKLQkweDJkMWQsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsIDB4MmQ0ZSwgMHgyMDI5LCAweDAwZmYsIDB4NjQ0YywKLQkweDI0MDAsIDB4YTUwNiwgMHgwMDQwLCAweDJkNDgsIDB4MjUwOCwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwKLQkweDJkNDgsIDB4MTA3OCwgMHg0NzVmLCAweDAwYzAsIDB4MmQzMywgMHgyMDA5LCAweDAwMDIsIDB4NjJhOCwKLQkweDI1MTgsIDB4MDA3OCwgMHgyZDRlLCAweDIwMTksIDB4MDAwNCwgMHgxMDc4LCAweDQ3MDUsIDB4MDBjMCwKLQkweDJkM2QsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsIDB4MmQ0ZSwgMHg3ODI0LCAweGEwOGEsIDB4MTAwMCwKLQkweDAwYzgsIDB4MmQ1MSwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHhhMTA4LCAweDEwNzgsIDB4NThlMSwKLQkweDg1MjksIDB4MDBjOCwgMHgyZDIwLCAweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2YsIDB4MDA3OCwKLQkweDJiNTYsIDB4MTI3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTA3OCwgMHgzNTMwLCAweDAwNDAsIDB4MmI1YSwKLQkweDEwNzgsIDB4NDYxYiwgMHgxMDc4LCAweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwKLQkweDJiNTYsIDB4MTA3OCwgMHgzNTMwLCAweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ2MGEsIDB4MTA3OCwKLQkweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzUzMCwKLQkweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ2YTcsIDB4MDA0MCwgMHgyYjU2LCAweDEwNzgsIDB4NDNjMSwKLQkweDEwNzgsIDB4NDY2MywgMHgxMDc4LCAweDQ2ZDYsIDB4MDA3OCwgMHgyYjJjLCAweDEwNzgsIDB4MzUzMCwKLQkweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ1YTcsIDB4MDA0MCwgMHgyYjU2LCAweDYyYTAsIDB4MjAxOSwKLQkweDAwMDUsIDB4MGM3ZSwgMHgxMDc4LCAweDQ3MWIsIDB4MGM3ZiwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwKLQkweDIwMzksIDB4MDAwMCwgMHgxMDc4LCAweDVjNzgsIDB4MjAwOSwgMHgwMDAwLCAweDEwNzgsIDB4OWMzOCwKLQkweDA3N2YsIDB4MTA3OCwgMHg0NmQ2LCAweDAwNzgsIDB4MmIyYywgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwKLQkweDJiNWEsIDB4MTA3OCwgMHg0NmQ2LCAweDIyMDgsIDB4MDA3OCwgMHgyYjJjLCAweDE1N2UsIDB4MGQ3ZSwKLQkweDBlN2UsIDB4MjA2OSwgMHhhNDEzLCAweDY4MTAsIDB4NjkxNCwgMHhhMTBhLCAweDAwYzgsIDB4MmRiMiwKLQkweDIwMDksIDB4MDAwMCwgMHg2ODE2LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweDAwMDAsIDB4MjBhOSwKLQkweDAwZmYsIDB4MjA2OSwgMHhhNDM0LCAweDJkMDQsIDB4YTA3NSwgMHgwMDQwLCAweDJkYzcsIDB4NzA0YywKLQkweDEwNzgsIDB4MmRkMSwgMHhhMjEwLCAweDcwODAsIDB4MTA3OCwgMHgyZGQxLCAweGEzMTgsIDB4OGQ2OCwKLQkweDAwZjAsIDB4MmRiYiwgMHgyMzAwLCAweGEyMTgsIDB4MGU3ZiwgMHgwZDdmLCAweDE1N2YsIDB4MDA3OCwKLQkweDJiMmMsIDB4MGY3ZSwgMHgwMTdlLCAweGEwN2QsIDB4MDA0MCwgMHgyZGUwLCAweDIwMDEsIDB4MDAwMCwKLQkweDgwMDAsIDB4MmYwYywgMHg4MWZmLCAweDAwNDAsIDB4MmRlMCwgMHgyMTc4LCAweDAwNzgsIDB4MmRkOCwKLQkweDAxN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDIwNjksIDB4YTQxMywgMHg2OTEwLCAweDYyYTQsIDB4MDA3OCwKLQkweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NjE0YywgMHhhMTkwLCAweDI5M2YsIDB4MjIxNCwKLQkweGEyOTQsIDB4MDBmZiwgMHg2MDZjLCAweGEwODQsIDB4ZmYwMCwgMHhhMjE1LCAweDYzNjgsIDB4NjdjOCwKLQkweGQ3OWMsIDB4MDA0MCwgMHgyZGZmLCAweDIwMzEsIDB4MDAwMSwgMHgwMDc4LCAweDJlMDEsIDB4MjAzMSwKLQkweDAwMDAsIDB4N2UzYSwgMHg3ZjNlLCAweDAwNzgsIDB4MmIyYywgMHg2MTNjLCAweDYyNDAsIDB4MjAxOSwKLQkweGE1YTAsIDB4MjMxYywgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjEzNCwKLQkweGEwMDYsIDB4MjAxMCwgMHgyMDE4LCAweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEwNzgsIDB4MzU0MiwKLQkweDAwNDAsIDB4MmI1YSwgMHg2MjQ0LCAweDYzMzgsIDB4MDA3OCwgMHgyYjJjLCAweDYxM2MsIDB4NjI0MCwKLQkweDc4MjQsIDB4NjAzZSwgMHg3YjI4LCAweDYzNDIsIDB4MjA2OSwgMHhhMzUxLCAweDgzMWYsIDB4YTMwNSwKLQkweDY4MTYsIDB4NzgyYywgMHgyMDY5LCAweGE1YTAsIDB4MmQxYywgMHgyMDZhLCAweDAwNzgsIDB4MmIyYywKLQkweDAxN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NzgyNCwgMHg2MDM2LCAweGQwOTQsIDB4MDA0MCwKLQkweDJlNDMsIDB4NzgyOCwgMHhhMDg1LCAweDAwMDEsIDB4MjAwOSwgMHhhNWE5LCAweDIwMGEsIDB4MjAwMSwKLQkweGZmZmYsIDB4MTA3OCwgMHg1OTc1LCAweDEyN2YsIDB4MDE3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDc4MjgsIDB4YTAwZCwgMHgwMDQwLCAweDJiNWEsIDB4NzgyYywKLQkweGEwMDUsIDB4MDA0MCwgMHgyYjVhLCAweDYyNDQsIDB4NjE0NiwgMHg2MzM4LCAweDYwM2EsIDB4MDA3OCwKLQkweDJiMmMsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4MmI1NiwKLQkweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDc5MjQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4YTE5NiwKLQkweDAwZmYsIDB4MDBjMCwgMHgyZTcwLCAweDYwMzAsIDB4YTA4NSwgMHhmZjAwLCAweDAwNzgsIDB4MmU3ZiwKLQkweGExODIsIDB4MDA3ZiwgMHgwMGM4LCAweDJlYTksIDB4YTE4OCwgMHgyOTNmLCAweDIxMGMsIDB4YTE4YywKLQkweDAwZmYsIDB4NjAzMCwgMHhhMTE2LCAweDAwNDAsIDB4MmVhOSwgMHg4MTBmLCAweGExMDUsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDdlLCAweDEwNzgsIDB4NzRkNywgMHgwMDdmLCAweDAwNDAsIDB4MmVhNSwKLQkweDYwMWEsIDB4NjAwYiwgMHhiYzA5LCAweDYwMWYsIDB4MDAwMSwgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwKLQkweDJlYWMsIDB4NjgzNywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMywgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwKLQkweGMwZmQsIDB4NjgzYSwgMHg3MDFiLCAweDJmMDcsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMiwKLQkweDEwNzgsIDB4NzU2YywgMHgxMjdmLCAweDBjN2YsIDB4MDA3YywgMHgxMjdmLCAweDBjN2YsIDB4MDA3OCwKLQkweDJiNTYsIDB4MGM3ZiwgMHgwMDc4LCAweDJiNWEsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4MmVhNSwKLQkweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDJiNTYsIDB4MGM3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweGExOTYsIDB4MDBmZiwKLQkweDAwYzAsIDB4MmVjNywgMHg2MDMwLCAweGEwODUsIDB4ZmYwMCwgMHgwMDc4LCAweDJlZDYsIDB4YTE4MiwKLQkweDAwN2YsIDB4MDBjOCwgMHgyZjAwLCAweGExODgsIDB4MjkzZiwgMHgyMTBjLCAweGExOGMsIDB4MDBmZiwKLQkweDYwMzAsIDB4YTExNiwgMHgwMDQwLCAweDJmMDAsIDB4ODEwZiwgMHhhMTA1LCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDA3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDA3ZiwgMHgwMDQwLCAweDJlZmMsIDB4NjAxYSwKLQkweDYwMGIsIDB4YmMwNSwgMHg2MDFmLCAweDAwMDEsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmYwMywKLQkweDY4MzcsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDMsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4NzAxYiwgMHgyZjA3LCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMzIsIDB4MTA3OCwKLQkweDc1NmMsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MTI3ZiwgMHgwYzdmLCAweDAwNzgsIDB4MmI1NiwKLQkweDBjN2YsIDB4MDA3OCwgMHgyYjVhLCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDJlZmMsIDB4NjgzMCwKLQkweGEwODYsIDB4MDEwMCwgMHgwMDQwLCAweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDIwNjEsIDB4YTYyZCwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4ZDA4NCwgMHgwMDQwLCAweDJmMWMsIDB4NjEwNCwKLQkweDYyMDgsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4MTI3ZiwgMHgwMDc4LCAweDJiNWEsIDB4ODFmZiwKLQkweDAwYzAsIDB4MmI1NiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MjQ0LCAweDYwNjAsIDB4YTIwMiwKLQkweDAwNDgsIDB4MmYzMywgMHhhMDg1LCAweDAwMDEsIDB4MTA3OCwgMHgyNTAwLCAweDEwNzgsIDB4M2JmNSwKLQkweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2YsIDB4MDA3OCwgMHgyYjVhLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjBhOSwgMHgwMDExLCAweDIwMDEsIDB4YTM0MCwgMHgyMGEwLCAweGEwMDYsIDB4NDBhNCwKLQkweDEyN2YsIDB4MDA3OCwgMHgyYjJjLCAweDdkMzgsIDB4N2MzYywgMHgwMDc4LCAweDJiZGUsIDB4NzgyNCwKLQkweGEwOWMsIDB4MDBmZiwgMHhhMzlhLCAweDAwMDMsIDB4MDBjOCwgMHgyYjU2LCAweDYyNGMsIDB4YTA4NCwKLQkweGZmMDAsIDB4ODAwNywgMHhhMjA2LCAweDAwYzAsIDB4MmY1ZiwgMHgyMDAxLCAweGEzNDAsIDB4MjAwOSwKLQkweDAwMGMsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwMDc4LCAweDM1NjYsIDB4ODFmZiwKLQkweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4MmI1NiwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwKLQkweDBjN2YsIDB4MDA0MCwgMHgyYjU2LCAweDY4MzcsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwKLQkweDEwNzgsIDB4OGI4NSwgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MmY4MSwKLQkweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwgMHgyYjU2LCAweGFkODAsIDB4MDAwZSwKLQkweDIwMDksIDB4MDAwYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDAwNzgsIDB4MzU2NiwKLQkweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwgMHg0MjFhLCAweDIwMDksIDB4MDAxYywKLQkweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MTA3OCwgMHgzNTYyLCAweDcwMWIsIDB4MmZhMSwKLQkweDAwN2MsIDB4YWRlOCwgMHgwMDBkLCAweDY4MDAsIDB4YTAwNSwgMHgwMDQwLCAweDJiNWEsIDB4NjgwNCwKLQkweGQwYWMsIDB4MDA0MCwgMHgyZmFlLCAweGQwYTQsIDB4MDA0MCwgMHgyYjVhLCAweGQwOTQsIDB4MDA0MCwKLQkweDJmYjksIDB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHhhMThjLCAweGZmZGYsIDB4NjEwNiwKLQkweDBjN2YsIDB4ZDA4YywgMHgwMDQwLCAweDJmYzQsIDB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwKLQkweGExOGQsIDB4MDAxMCwgMHg2MTA2LCAweDBjN2YsIDB4MjAwOSwgMHgwMTAwLCAweDIxMGMsIDB4YTE4YSwKLQkweDAwMDIsIDB4MDA0OCwgMHgyZmQ5LCAweGQwODQsIDB4MDA0MCwgMHgyZmQ5LCAweDZhMjgsIDB4YTI4YSwKLQkweDAwN2YsIDB4MDBjOCwgMHgyYjVhLCAweGEyODgsIDB4MjkzZiwgMHgyMTBjLCAweGExOGMsIDB4MDBmZiwKLQkweDYxNTIsIDB4ZDBkYywgMHgwMDQwLCAweDJmZTIsIDB4NjgyOCwgMHhhMDhhLCAweDAwN2YsIDB4MDBjOCwKLQkweDJiNWEsIDB4NjA0ZSwgMHg2ODA4LCAweGEwOGEsIDB4MDEwMCwgMHgwMDQ4LCAweDJiNWEsIDB4YTA4YSwKLQkweDA4NDEsIDB4MDBjOCwgMHgyYjVhLCAweGEwODQsIDB4MDAwNywgMHgwMGMwLCAweDJiNWEsIDB4NjgwYywKLQkweGEwMDUsIDB4MDA0MCwgMHgyYjVhLCAweDY4MTAsIDB4YTAwNSwgMHgwMDQwLCAweDJiNWEsIDB4Njg0OCwKLQkweDY5NDAsIDB4YTEwYSwgMHgwMGM4LCAweDJiNWEsIDB4ODAwMSwgMHgwMDQwLCAweDJiNWEsIDB4Njg0YywKLQkweDY5NDQsIDB4YTEwYSwgMHgwMGM4LCAweDJiNWEsIDB4ODAwMSwgMHgwMDQwLCAweDJiNWEsIDB4NjgwNCwKLQkweGQwZmMsIDB4MDA0MCwgMHgzMDM4LCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4MjAwOSwKLQkweDAwMTQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHhhMjkwLCAweDAwMzgsIDB4YTM5OSwKLQkweDAwMDAsIDB4MTA3OCwgMHgzNTYyLCAweDcwMWIsIDB4MzAxZSwgMHgwMDdjLCAweGFkZTgsIDB4MDAwZCwKLQkweDIwYTksIDB4MDAxNCwgMHgyZDk4LCAweDIwNjksIDB4YTM2ZCwgMHgyZGEwLCAweDUzYTMsIDB4NzAxMCwKLQkweGEwZTgsIDB4MDAwZCwgMHgyMDAxLCAweGEzNzEsIDB4MjAwYywgMHhkMWU0LCAweDAwNDAsIDB4MzAzOCwKLQkweDBjN2UsIDB4MjA2MSwgMHgwMTAwLCAweDYwMDQsIDB4YTA4NSwgMHgwYjAwLCAweDYwMDYsIDB4MGM3ZiwKLQkweDIwYTksIDB4MDAxYywgMHgyZDk4LCAweDIwNjksIDB4YTM1MSwgMHgyZGEwLCAweDUzYTMsIDB4NjgxNCwKLQkweGEwOGMsIDB4MDBmZiwgMHg2MTNlLCAweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDYwNDIsIDB4MTA3OCwKLQkweDRkYmQsIDB4MTA3OCwgMHg0OGRkLCAweDEwNzgsIDB4NDk0ZCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4MzBjMywgMHg2ODA4LCAweDYwMmEsIDB4MTA3OCwgMHgyMThiLCAweDY4MTgsIDB4NjkxYywKLQkweDZhMjAsIDB4NmIyNCwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDYwMTYsIDB4NjExYSwKLQkweDYyMWUsIDB4NjMyMiwgMHg2YzA0LCAweGQ0ZjQsIDB4MDA0MCwgMHgzMDcwLCAweDY4MzAsIDB4NjkzNCwKLQkweDZhMzgsIDB4NmIzYywgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDAwNzgsIDB4MzA3MiwKLQkweGEwODQsIDB4ZjBmZiwgMHg2MDA2LCAweDYxMGEsIDB4NjIwZSwgMHg2MzEyLCAweDEwNzgsIDB4NTlhOCwKLQkweDY5MDQsIDB4ZDFmYywgMHgwMDQwLCAweDMwYTUsIDB4MGM3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MjBhOSwKLQkweDAwMDEsIDB4NmI3MCwgMHhkMzg0LCAweDAwNDAsIDB4MzBhMiwgMHgwMDc4LCAweDMwOGMsIDB4ODM5ZCwKLQkweDAwYzgsIDB4MzBhMiwgMHgzNTA4LCAweDgxMDksIDB4MTA3OCwgMHg1MzY0LCAweDY4NzgsIDB4NjAxNiwKLQkweDY4NzQsIDB4MjAwOCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywgMHg2MDBhLCAweGExODQsIDB4MDBmZiwKLQkweDYwMDYsIDB4ODEwOCwgMHgwMGMwLCAweDMwYTAsIDB4NjAwMywgMHgwMDAzLCAweDAwNzgsIDB4MzBhMiwKLQkweDYwMDMsIDB4MDAwMSwgMHgwMGYwLCAweDMwODcsIDB4MGM3ZiwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MGM3ZiwgMHgxMDc4LCAweDM3ODQsIDB4MDA0MCwKLQkweDMwYjMsIDB4MTA3OCwgMHgyNTAwLCAweDYwYmMsIDB4YTAwNSwgMHgwMDQwLCAweDMwYmYsIDB4NjAwMywKLQkweDAwMDEsIDB4MjA5MSwgMHgzMDFkLCAweDEwNzgsIDB4NDE3MSwgMHgwMDc4LCAweDMwYzMsIDB4NjAwMywKLQkweDAwMDQsIDB4MjA5MSwgMHgzMDFkLCAweDAwNzgsIDB4MmIyYywgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MmI1NiwgMHgyMDY5LCAweGEzNTEsIDB4NzgzMCwgMHg2ODQyLCAweDc4MzQsIDB4Njg0NiwKLQkweDY4MDQsIDB4ZDBmYywgMHgwMDQwLCAweDMwZDgsIDB4MjAwOSwgMHgwMDMwLCAweDAwNzgsIDB4MzBkYSwKLQkweDIwMDksIDB4MDAxYywgMHgyZDAwLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDA3OCwKLQkweDM1NjYsIDB4YTAwNiwgMHgxMDc4LCAweDI1MDAsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwKLQkweDQyMWEsIDB4MTA3OCwgMHg0MTcxLCAweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwKLQkweDYxODAsIDB4ODFmZiwgMHgwMDQwLCAweDMxMDcsIDB4NzAzZiwgMHgwMDAwLCAweDIwMDEsIDB4YTljMCwKLQkweDIwMDksIDB4MDA0MCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MTA3OCwgMHgzNTY2LCAweDcwMWIsIDB4MmIyOSwgMHgxMjdmLCAweDAwN2MsIDB4NzAzZiwKLQkweDAwMDEsIDB4MGQ3ZSwgMHgyMDY5LCAweGE5YzAsIDB4MjBhOSwgMHgwMDQwLCAweDIwYTEsIDB4YTljMCwKLQkweDIwMTksIDB4ZmZmZiwgMHg0M2E0LCAweDY1NGMsIDB4YTU4OCwgMHgyOTNmLCAweDIxMGMsIDB4YTE4YywKLQkweDAwZmYsIDB4MjE2YSwgMHhhMDBlLCAweDIwMTEsIDB4MDAwMiwgMHgyMTAwLCAweGE1MDYsIDB4MDA0MCwKLQkweDMxMzksIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MzEzOSwgMHg2MDE0LCAweDgyMWMsIDB4MDA0OCwKLQkweDMxMzEsIDB4YTM5OCwgMHhhOWMwLCAweGEwODUsIDB4ZmYwMCwgMHg4MDA3LCAweDIwMWEsIDB4MDA3OCwKLQkweDMxMzgsIDB4YTM5OCwgMHhhOWMwLCAweDIzMjQsIDB4YTRhNCwgMHhmZjAwLCAweGE0MDUsIDB4MjAxYSwKLQkweDgyMTAsIDB4ODEwOCwgMHhhMTgyLCAweDAwODAsIDB4MDBjOCwgMHgzMTQwLCAweDAwNzgsIDB4MzExZCwKLQkweDgyMDEsIDB4ODAwNywgMHgyZDBjLCAweGExMDUsIDB4MjA2YSwgMHgwZDdmLCAweDIwYTksIDB4MDA0MCwKLQkweDIwYTEsIDB4YTljMCwgMHgyMDk5LCAweGE5YzAsIDB4MTA3OCwgMHg0MWJlLCAweDAwNzgsIDB4MzBmNiwKLQkweDEwNzgsIDB4MzU0MiwgMHgwMDQwLCAweDJiNWEsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MGM3ZiwKLQkweDAwYzAsIDB4MzE1ZSwgMHgyMDA5LCAweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDIwMDEsIDB4YTM1MiwKLQkweDIwMDQsIDB4ZDBiNCwgMHgwMDQwLCAweDMxODUsIDB4NjAwMCwgMHhkMDhjLCAweDAwYzAsIDB4MzE4NSwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDMxODUsIDB4NjgzNywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MTA3OCwgMHg4YmQ5LCAweDAwYzAsIDB4MzE3YywKLQkweDIwMDksIDB4MDAwMywgMHgwMDc4LCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzE4MSwKLQkweDAwN2MsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwgMHgyMGE5LCAweDAwMmIsIDB4MmM5OCwKLQkweGFkZTgsIDB4MDAwMiwgMHgyZGEwLCAweDUzYTMsIDB4MjBhOSwgMHgwMDA0LCAweGFjODAsIDB4MDAwNiwKLQkweDIwOTgsIDB4YWQ4MCwgMHgwMDA2LCAweDIwYTAsIDB4MTA3OCwgMHg0MWJlLCAweDIwYTksIDB4MDAwNCwKLQkweGFjODAsIDB4MDAwYSwgMHgyMDk4LCAweGFkODAsIDB4MDAwYSwgMHgyMGEwLCAweDEwNzgsIDB4NDFiZSwKLQkweDJkMDAsIDB4MjAwOSwgMHgwMDJiLCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDA3OCwKLQkweDM1NjYsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwgMHgzNTMwLCAweDAwNDAsIDB4MmI1YSwKLQkweDEwNzgsIDB4NDZlZiwgMHgwMDc4LCAweDJiMmMsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NzgyOCwKLQkweGEwOGEsIDB4MTAwMCwgMHgwMGM4LCAweDJiNWEsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwKLQkweDEwNzgsIDB4NDc1ZiwgMHgwMDQwLCAweDJiNTYsIDB4MjAxOSwgMHgwMDA0LCAweDEwNzgsIDB4NDcwNSwKLQkweDc5MjQsIDB4ODEwZiwgMHg3YTI4LCAweDEwNzgsIDB4MzFjZiwgMHgwMDc4LCAweDJiMmMsIDB4YTE4NiwKLQkweDAwZmYsIDB4MDA0MCwgMHgzMWQ3LCAweDEwNzgsIDB4MzFlNywgMHgwMDc4LCAweDMxZTYsIDB4MjAyOSwKLQkweDAwN2UsIDB4MjA2MSwgMHhhMzAwLCAweDY0NGMsIDB4MjQwMCwgMHhhNTA2LCAweDAwNDAsIDB4MzFlMywKLQkweDI1MDgsIDB4MTA3OCwgMHgzMWU3LCAweDg1MjksIDB4MDBjOCwgMHgzMWRjLCAweDAwN2MsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDBjMCwgMHgzMWYyLCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwKLQkweDEwNzgsIDB4NThlMSwgMHgwMDdjLCAweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzUzMCwKLQkweDAwNDAsIDB4MmI1YSwgMHgxMDc4LCAweDQ1YTcsIDB4MDA0MCwgMHgyYjU2LCAweDEwNzgsIDB4NDZmYSwKLQkweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwKLQkweDJiNWEsIDB4MTA3OCwgMHg0NWE3LCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LCAweDQ2ZTQsIDB4MDA3OCwKLQkweDJiMmMsIDB4NjEwMCwgMHgwMDc4LCAweDJiMmMsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwKLQkweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDJiNTYsIDB4MGQ3ZSwKLQkweGFjZTgsIDB4MDAwYSwgMHg3OTI0LCAweGQxODQsIDB4MDA0MCwgMHgzMjI4LCAweGFjZTgsIDB4MDAwNiwKLQkweDY4MGMsIDB4ODAwNywgMHg3ODNlLCAweDY4MDgsIDB4ODAwNywgMHg3ODNhLCAweDZiMDQsIDB4ODMxZiwKLQkweDZhMDAsIDB4ODIxNywgMHgwZDdmLCAweDYxMDAsIDB4YTE4YywgMHgwMjAwLCAweDAwNzgsIDB4MmIyYywKLQkweGEwMDYsIDB4MTA3OCwgMHgyNTAwLCAweDc4MjQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDBmZiwKLQkweDAwNDAsIDB4MzI0NSwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDQyMWEsIDB4NzgyOCwKLQkweGEwOGEsIDB4MTAwMCwgMHgwMGM4LCAweDJiNWEsIDB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGExODYsIDB4MDBmZiwgMHgwMDQwLCAweDMyNWIsIDB4YTE4MiwgMHgwMDdmLCAweDAwYzgsIDB4MmI1YSwKLQkweDIxMDAsIDB4MTA3OCwgMHgyNGZhLCAweDAyN2UsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjEsIDB4YTViZSwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweDgxMGYsIDB4YTEwNSwgMHg2MDRhLCAweDYwNDMsIDB4MDA5MCwKLQkweDYwNDMsIDB4MDAxMCwgMHgyMDA5LCAweDAwMmQsIDB4MjAxMSwgMHg0MTk2LCAweDEwNzgsIDB4NTk2YywKLQkweDc5MjQsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4N2EyOCwgMHgxMDc4LCAweDMxY2YsIDB4MTI3ZiwKLQkweDBjN2YsIDB4MDI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDBjN2UsIDB4MTA3OCwgMHg0NDk5LCAweDJjMDgsIDB4MGM3ZiwgMHgwMGMwLCAweDJiNWEsIDB4MDA3OCwKLQkweDJiMmMsIDB4ODFmZiwgMHgwMDQwLCAweDMyOTgsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsIDB4MmI1NiwKLQkweDYwYzgsIDB4ZDA5YywgMHgwMGMwLCAweDMyYTAsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzgsIDB4MmI1NiwKLQkweDEwNzgsIDB4MzUxOCwgMHgwMGMwLCAweDMyYTgsIDB4MjAwOSwgMHgwMDAyLCAweDAwNzgsIDB4MmI1NiwKLQkweDc5MjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgxMDc4LCAweDM1NjIsIDB4NzAxYiwKLQkweDMyYjIsIDB4MDA3YywgMHgyMDA5LCAweDAwODAsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MzJiZiwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDMyYzMsIDB4MjAyMSwKLQkweDQwMGEsIDB4MDA3OCwgMHgyYjJlLCAweDBkN2UsIDB4YWRlOCwgMHgwMDBkLCAweDY5MDAsIDB4NmEwOCwKLQkweDZiMGMsIDB4NmMxMCwgMHg2ZDE0LCAweDZlMTgsIDB4NjgyMCwgMHhhMGJlLCAweDAxMDAsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTEyLCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxMTMsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTE0LCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxMTcsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTFhLCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxMjEsIDB4MDA0MCwKLQkweDMzMmMsIDB4YTBiZSwgMHgwMTMxLCAweDAwNDAsIDB4MzMyYywgMHhhMGJlLCAweDAxNzEsIDB4MDA0MCwKLQkweDMzMzYsIDB4YTBiZSwgMHgwMTczLCAweDAwNDAsIDB4MzMzNiwgMHhhMGJlLCAweDAxYTEsIDB4MDBjMCwKLQkweDMyZmUsIDB4NjgzMCwgMHg4MDA3LCAweDY4MzIsIDB4MDA3OCwgMHgzMzNjLCAweGEwYmUsIDB4MDIxMiwKLQkweDAwNDAsIDB4MzMzMiwgMHhhMGJlLCAweDAyMTMsIDB4MDA0MCwgMHgzMzMyLCAweGEwYmUsIDB4MDIxNCwKLQkweDAwNDAsIDB4MzMyNCwgMHhhMGJlLCAweDAyMTcsIDB4MDA0MCwgMHgzMzFlLCAweGEwYmUsIDB4MDIxYSwKLQkweDAwYzAsIDB4MzMxNywgMHg2ODM4LCAweDgwMDcsIDB4NjgzYSwgMHgwMDc4LCAweDMzMzYsIDB4YTBiZSwKLQkweDAzMDAsIDB4MDA0MCwgMHgzMzM2LCAweDBkN2YsIDB4MDA3OCwgMHgyYjVhLCAweGFkODAsIDB4MDAxMCwKLQkweDIwYTksIDB4MDAwNywgMHgxMDc4LCAweDMzN2UsIDB4YWQ4MCwgMHgwMDBlLCAweDIwYTksIDB4MDAwMSwKLQkweDEwNzgsIDB4MzM3ZSwgMHgwMDc4LCAweDMzMzYsIDB4YWQ4MCwgMHgwMDBjLCAweDEwNzgsIDB4MzM4YywKLQkweDAwNzgsIDB4MzMzYywgMHhhZDgwLCAweDAwMGUsIDB4MTA3OCwgMHgzMzhjLCAweGFkODAsIDB4MDAwYywKLQkweDIwYTksIDB4MDAwMSwgMHgxMDc4LCAweDMzN2UsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MDA0MCwKLQkweDMzNmYsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgzNywgMHgwMTE5LCAweDY4NTMsIDB4MDAwMCwKLQkweDY4NGYsIDB4MDAyMCwgMHg2ODViLCAweDAwMDEsIDB4ODEwYiwgMHg2OTdlLCAweDY4ODMsIDB4MDAwMCwKLQkweDZhODYsIDB4NmI4YSwgMHg2YzhlLCAweDZkOTIsIDB4Njk5NiwgMHg2ODliLCAweDAwMDAsIDB4MGM3ZiwKLQkweDBkN2YsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDY4MjMsIDB4MDAwMCwKLQkweDY4MDQsIDB4MjA2OCwgMHgxMDc4LCAweDhiYTEsIDB4MDBjMCwgMHgzMzZhLCAweDIwMDksIDB4MDAwMywKLQkweDAwNzgsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzMzc1LCAweDAwN2MsIDB4MGM3ZiwKLQkweDBkN2YsIDB4MjAwOSwgMHgwMDAyLCAweDAwNzgsIDB4MmI1NiwgMHg2ODIwLCAweGEwODYsIDB4ODAwMSwKLQkweDAwYzAsIDB4MmIyYywgMHgyMDA5LCAweDAwMDQsIDB4MDA3OCwgMHgyYjU2LCAweDAxN2UsIDB4MjAwOCwKLQkweDIwNDQsIDB4ODAwMCwgMHgyMDRjLCAweDgwMDAsIDB4MjkwYSwgMHg4MTA4LCAweDI4MGEsIDB4ODEwOCwKLQkweDAwZjAsIDB4MzM4MCwgMHgwMTdmLCAweDAwN2MsIDB4MDE3ZSwgMHgwYTdlLCAweDBiN2UsIDB4MjAwOCwKLQkweDIwNDQsIDB4ODAwMCwgMHgyMDRjLCAweDgwMDAsIDB4MjA1NCwgMHg4MDAwLCAweDIwNWMsIDB4MmIwYSwKLQkweDgxMDgsIDB4MmEwYSwgMHg4MTA4LCAweDI5MGEsIDB4ODEwOCwgMHgyODBhLCAweDBiN2YsIDB4MGE3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHg4MWZmLCAweDAwNDAsIDB4MzNhOSwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwKLQkweDJiNTYsIDB4NzkyNCwgMHgyMTQwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDA4MCwKLQkweDAwNDgsIDB4MmI1YSwgMHhhMTgyLCAweDAwZmYsIDB4MDBjOCwgMHgyYjVhLCAweDdhMmMsIDB4N2IyOCwKLQkweDYwNjgsIDB4YTMwNiwgMHgwMGMwLCAweDMzYzQsIDB4NjA2YywgMHhhMjRlLCAweDAwNDAsIDB4MmI1YSwKLQkweGE5Y2MsIDB4ZmYwMCwgMHgwMDQwLCAweDJiNWEsIDB4MGM3ZSwgMHgxMDc4LCAweDM0NmQsIDB4MmM2OCwKLQkweDBjN2YsIDB4MDA0MCwgMHgzM2ZjLCAweGEwYzYsIDB4NDAwMCwgMHgwMGMwLCAweDMzZTIsIDB4MGM3ZSwKLQkweDAwN2UsIDB4MmQ2MCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHg0N2NiLCAweDAwYzAsIDB4MzNkOSwKLQkweGMxODUsIDB4NjAwMCwgMHhkMGJjLCAweDAwNDAsIDB4MzNkZSwgMHhjMThkLCAweDAwN2YsIDB4MGM3ZiwKLQkweDAwNzgsIDB4MzNmOSwgMHhhMGM2LCAweDQwMDcsIDB4MDBjMCwgMHgzM2U5LCAweDI0MDgsIDB4MDA3OCwKLQkweDMzZjksIDB4YTBjNiwgMHg0MDA4LCAweDAwYzAsIDB4MzNmMSwgMHgyNzA4LCAweDI2MTAsIDB4MDA3OCwKLQkweDMzZjksIDB4YTBjNiwgMHg0MDA5LCAweDAwYzAsIDB4MzNmNywgMHgwMDc4LCAweDMzZjksIDB4MjAwMSwKLQkweDQwMDYsIDB4MjAyMCwgMHgwMDc4LCAweDJiMmUsIDB4MmQwMCwgMHg3MDIyLCAweDAxN2UsIDB4MGI3ZSwKLQkweDBjN2UsIDB4MGU3ZSwgMHgyYzcwLCAweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDM0NDIsIDB4MmQwMCwKLQkweDYwMWEsIDB4MjAwMSwgMHhhMzU2LCAweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MmU1OCwKLQkweDBlN2YsIDB4MGU3ZSwgMHgwYzdlLCAweDEwNzgsIDB4MzUxOCwgMHgwYzdmLCAweDJiNzAsIDB4MDBjMCwKLQkweDM0MjMsIDB4MTA3OCwgMHg3NTNkLCAweDBlN2YsIDB4MGM3ZiwgMHgwYjdmLCAweDAxN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDY4MzcsIDB4MDAwMCwgMHgyZDAwLCAweDYwMTIsIDB4NjgzMywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDI4MTMsIDB4MTI3ZiwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwKLQkweDIwMDEsIDB4MDAwMiwgMHgxMDc4LCAweDQ0M2YsIDB4MjAwOSwgMHgwMDAyLCAweDEwNzgsIDB4NzU2YywKLQkweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDBjN2YsIDB4MGI3ZiwgMHgwMTdmLCAweDAwYzAsIDB4MzQ0YywKLQkweDIwMDksIDB4MDAwMywgMHgwMDc4LCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzQ1MSwKLQkweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4NzAyMCwgMHgyMDYwLCAweDAwYzAsIDB4MzQ1ZiwKLQkweDIwMDksIDB4MDAwNCwgMHg2MjA0LCAweGEyOTQsIDB4MDBmZiwgMHgwMDc4LCAweDJiNTYsIDB4MjAwOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0N2NiLCAweDAwYzAsIDB4MzQ2NiwgMHhjMTg1LCAweDYwMDAsIDB4ZDBiYywKLQkweDAwNDAsIDB4MzQ2YiwgMHhjMThkLCAweDAwNzgsIDB4MmIyYywgMHgwZTdlLCAweDBkN2UsIDB4MjAyOSwKLQkweDAwMDAsIDB4MjAyMSwgMHgwMDgwLCAweDIwYTksIDB4MDA3ZiwgMHgyMDcxLCAweGE0YjQsIDB4MmUwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgzNDgyLCAweDIxMDAsIDB4YTQwNiwgMHgwMGMwLCAweDM0YjMsIDB4MjQyOCwKLQkweDAwNzgsIDB4MzRiMywgMHgyMDY4LCAweDZmMTAsIDB4MjcwMCwgMHhhMzA2LCAweDAwYzAsIDB4MzRhNCwKLQkweDZlMTQsIDB4MjYwMCwgMHhhMjA2LCAweDAwYzAsIDB4MzRhNCwgMHgyNDAwLCAweGExMDYsIDB4MDBjMCwKLQkweDM0YTAsIDB4MmQ2MCwgMHhkODg0LCAweDAwNDAsIDB4MzRjOCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDM0YzgsIDB4MjAwMSwgMHg0MDAwLCAweDAwNzgsIDB4MzRjOSwKLQkweDIwMDEsIDB4NDAwNywgMHgwMDc4LCAweDM0YzksIDB4MjQwMCwgMHhhMTA2LCAweDAwYzAsIDB4MzRiMywKLQkweDZlMTQsIDB4ODdmZiwgMHgwMGMwLCAweDM0YWYsIDB4ODZmZiwgMHgwMDQwLCAweDM0N2YsIDB4MjAwMSwKLQkweDQwMDgsIDB4MDA3OCwgMHgzNGM5LCAweDg0MjAsIDB4OGU3MCwgMHgwMGYwLCAweDM0NzcsIDB4ODVmZiwKLQkweDAwYzAsIDB4MzRjMiwgMHgyMDAxLCAweDQwMDksIDB4MDA3OCwgMHgzNGM5LCAweDIwMDEsIDB4MDAwMSwKLQkweDAwNzgsIDB4MzRjOSwgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHgzNGJlLCAweDYzMTIsIDB4NjIxNiwKLQkweGEwMDYsIDB4YTAwNSwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwKLQkweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4NzgyNCwgMHhhMDA1LCAweDAwNDAsIDB4MmI1YSwgMHhhMDk2LCAweDAwZmYsIDB4MDA0MCwKLQkweDM0ZTUsIDB4YTA5MiwgMHgwMDA0LCAweDAwYzgsIDB4MmI1YSwgMHgyMDEwLCAweDJkMTgsIDB4MTA3OCwKLQkweDI3YzIsIDB4MDA0MCwgMHgyYjU2LCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDM0ZjAsIDB4MDA3YywKLQkweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDAwNDAsIDB4MmI1NiwgMHgwMDc4LCAweDJiMmMsIDB4NzkyNCwKLQkweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDA4MCwgMHgwMDQ4LCAweDJiNWEsIDB4YTE4MiwKLQkweDAwZmYsIDB4MDBjOCwgMHgyYjVhLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4OGE4OSwKLQkweDAwYzAsIDB4MzUxNSwgMHhhMTkwLCAweGE0MzQsIDB4MjIwNCwgMHhhMDY1LCAweDAwNDAsIDB4MzUxNSwKLQkweDEwNzgsIDB4NDIzNSwgMHgxMjdmLCAweDAwNzgsIDB4MmIyYywgMHgxMjdmLCAweDAwNzgsIDB4MmI1NiwKLQkweDEwNzgsIDB4MTM4MSwgMHgwMDQwLCAweDM1MmYsIDB4YTAwNiwgMHg2ODAyLCAweDcwMTAsIDB4YTAwNSwKLQkweDAwYzAsIDB4MzUyNywgMHgyZDAwLCAweDcwMTIsIDB4NzAxNiwgMHgwMDc4LCAweDM1MmQsIDB4NzAxNCwKLQkweDY4MDIsIDB4MjA2MCwgMHgyZDAwLCAweDYwMDYsIDB4NzAxNiwgMHhhZDgwLCAweDAwMGQsIDB4MDA3YywKLQkweDc5MjQsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MTA3OCwgMHg0NTAxLCAweDAwYzAsIDB4MzUzZiwKLQkweDdlMjgsIDB4YTY4NCwgMHgzZmZmLCAweGEwODIsIDB4NDAwMCwgMHgwMDQ4LCAweDM1NDAsIDB4YTA2NiwKLQkweDhjZmYsIDB4MDA3YywgMHg3ZTI0LCAweDg2MGYsIDB4YTE4YywgMHgwMGZmLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4MzU1MCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4MiwgMHg0MDAwLCAweDAwNDgsIDB4MzU1MSwKLQkweGEwNjYsIDB4OGNmZiwgMHgwMDdjLCAweDAxN2UsIDB4NzExMCwgMHg4MWZmLCAweDAwNDAsIDB4MzU1ZSwKLQkweDIxNjgsIDB4NjkwNCwgMHgxMDc4LCAweDEzOWEsIDB4MDA3OCwgMHgzNTU1LCAweDcxMTIsIDB4NzExNiwKLQkweDAxN2YsIDB4MDA3YywgMHgyMDMxLCAweDAwMDEsIDB4MDA3OCwgMHgzNTY4LCAweDIwMzEsIDB4MDAwMCwKLQkweDIwNjEsIDB4YTNkMSwgMHg2NjA2LCAweDYxMTIsIDB4NjAwZSwgMHg2MjI2LCAweDYzMmEsIDB4NjQyZSwKLQkweDY1MzIsIDB4MmMxMCwgMHgxMDc4LCAweDEzZDEsIDB4NzAwNywgMHgwMDAyLCAweDcwMWIsIDB4MmIyYywKLQkweDAwN2MsIDB4MGY3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAwMDAsIDB4MjAwMSwKLQkweGEzOGYsIDB4MjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4MzU5NCwgMHgwMDY4LCAweDM1OTQsIDB4NzgxOCwKLQkweGQwODQsIDB4MDBjMCwgMHgzNTk0LCAweDdhMjIsIDB4N2IyNiwgMHg3YzJhLCAweDc4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgwMDc4LCAweDM1YjksIDB4MDE3ZSwgMHgwYzdlLCAweDBlN2UsIDB4MjA3MSwKLQkweGEzODEsIDB4NzEzOCwgMHhhMTgyLCAweDAwMDgsIDB4MDA0OCwgMHgzNWEyLCAweDcwMzAsIDB4MjA2MCwKLQkweDAwNzgsIDB4MzViMywgMHg3MDMwLCAweGEwZTAsIDB4MDAwOCwgMHhhYzgyLCAweGEzZDEsIDB4MDA0OCwKLQkweDM1YWIsIDB4MjA2MSwgMHhhMzkxLCAweDJjMDAsIDB4NzAzMiwgMHg4MWZmLCAweDAwYzAsIDB4MzViMSwKLQkweDcwMzYsIDB4ODEwOCwgMHg3MTNhLCAweDIyNjIsIDB4NjMwNiwgMHg2NDBhLCAweDBlN2YsIDB4MGM3ZiwKLQkweDAxN2YsIDB4MTI3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzODEsIDB4NzAzOCwKLQkweGEwMDUsIDB4MDA0MCwgMHgzNWY1LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4MzVmNCwKLQkweDBmN2UsIDB4MjA3OSwgMHgwMDAwLCAweDc4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDM1ZjMsIDB4MGM3ZSwKLQkweDcwMzQsIDB4MjA2MCwgMHgyYzA0LCAweDc4MjIsIDB4NjAwNCwgMHg3ODI2LCAweDYwMDgsIDB4NzgyYSwKLQkweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAzOCwgMHg4MDAxLCAweDcwM2EsIDB4YTAwNSwKLQkweDAwYzAsIDB4MzVlOSwgMHg3MDMzLCAweGEzOTEsIDB4NzAzNywgMHhhMzkxLCAweDBjN2YsIDB4MDA3OCwKLQkweDM1ZjMsIDB4YWM4MCwgMHgwMDA4LCAweGEwZmEsIDB4YTNkMSwgMHgwMDQ4LCAweDM1ZjEsIDB4MjAwMSwKLQkweGEzOTEsIDB4NzAzNiwgMHgwYzdmLCAweDBmN2YsIDB4MTI3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MDI3ZSwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDA0MCwgMHgzNjAyLCAweDIwMTEsIDB4ODAxNCwKLQkweDEwNzgsIDB4MzU3OSwgMHgwMjdmLCAweDAwN2MsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MDMwLCAweGMwOGQsIDB4YzA4NSwgMHhjMGFjLCAweDYwMzIsIDB4MTA3OCwKLQkweDQxNzEsIDB4MTI3ZiwgMHgwMDc4LCAweDJiMmMsIDB4NzgyNCwgMHgyMDA4LCAweGExOGMsIDB4ZmZmZCwKLQkweDAwYzAsIDB4MzYxZiwgMHg2MWQ0LCAweGExMGQsIDB4NjFkNiwgMHgwMDc4LCAweDJiMmMsIDB4MDA3OCwKLQkweDJiNWEsIDB4ODFmZiwgMHgwMGMwLCAweDJiNTYsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDJiNTYsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMGMwLCAweDJiNTYsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4MzYzZSwgMHg3ODI4LCAweGEwMDUsIDB4MDA0MCwgMHgyYjJjLCAweDBjN2UsIDB4MTA3OCwKLQkweDM1MTgsIDB4MGM3ZiwgMHgwMDQwLCAweDJiNTYsIDB4NjgzNywgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwKLQkweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDEwNzgsIDB4OGM0ZCwgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywKLQkweDAwMDMsIDB4NzAxYiwgMHgzNjU0LCAweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwKLQkweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywKLQkweDAwYzAsIDB4MmI1NiwgMHg3ZjI0LCAweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MTA3OCwKLQkweDM1MTgsIDB4MDA0MCwgMHgyYjU2LCAweDIwMDksIDB4MDAwMCwgMHgyMDMxLCAweDAwMDAsIDB4NzAyMywKLQkweDAwMDAsIDB4NzAyZiwgMHgwMDAwLCAweGFkODAsIDB4MDAwNSwgMHg3MDI2LCAweDIwYTAsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDBjMCwgMHgzNmQ4LCAweDYwMDQsIDB4YTBjNCwgMHgwMGZmLCAweGE4YzYsIDB4MDAwNiwKLQkweDAwNDAsIDB4MzY4OCwgMHhhMGM0LCAweGZmMDAsIDB4YThjNiwgMHgwNjAwLCAweDAwYzAsIDB4MzZkOCwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYWMsIDB4MDBjMCwgMHgzNjk1LCAweDEwNzgsIDB4NDdjYiwKLQkweDAwYzAsIDB4MzY5NSwgMHhkNzljLCAweDAwNDAsIDB4MzZkOCwgMHhkNzk0LCAweDAwYzAsIDB4MzY5YiwKLQkweGQ3ODQsIDB4MDA0MCwgMHgzNmE3LCAweGFjODAsIDB4MDAwNiwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwKLQkweDAwMDQsIDB4NTNhMywgMHgxMDc4LCAweDMzOGMsIDB4ZDc5NCwgMHgwMDQwLCAweDM2YjAsIDB4YWM4MCwKLQkweDAwMGEsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDEwNzgsIDB4MzM4YywKLQkweDIxYTIsIDB4ZDc5NCwgMHgwMDQwLCAweDM2ZDAsIDB4YWM4MCwgMHgwMDAwLCAweDIwOTgsIDB4OTRhMCwKLQkweDIwYTksIDB4MDAwMiwgMHg1M2EzLCAweGFjODAsIDB4MDAwMywgMHgyMGE2LCAweDk0YTAsIDB4YWM4MCwKLQkweDAwMDQsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwMiwgMHg1M2EzLCAweDEwNzgsIDB4MzM3ZSwKLQkweGFjODAsIDB4MDAyNiwgMHgyMDk4LCAweDIwYTksIDB4MDAwMiwgMHg1M2EzLCAweDAwNzgsIDB4MzZkMSwKLQkweDk0YTAsIDB4ZDc5NCwgMHgwMDQwLCAweDM2ZDYsIDB4YTZiMCwgMHgwMDBiLCAweGE2YjAsIDB4MDAwNSwKLQkweDgxMDgsIDB4ZDc4YywgMHgwMDQwLCAweDM2ZTIsIDB4YTE4NiwgMHgwMTAwLCAweDAwNDAsIDB4MzZmMywKLQkweDAwNzgsIDB4MzZlNiwgMHhhMTg2LCAweDAwN2UsIDB4MDA0MCwgMHgzNmYzLCAweGQ3OTQsIDB4MDA0MCwKLQkweDM2ZWQsIDB4YTY4NiwgMHgwMDIwLCAweDAwNzgsIDB4MzZlZiwgMHhhNjg2LCAweDAwMjgsIDB4MDA0MCwKLQkweDM2ZmMsIDB4MDA3OCwgMHgzNjc3LCAweDg2ZmYsIDB4MDBjMCwgMHgzNmZhLCAweDcxMjAsIDB4ODEwYiwKLQkweDAwNzgsIDB4MmIyYywgMHg3MDJmLCAweDAwMDEsIDB4NzExZSwgMHg3MDIwLCAweGE2MDAsIDB4NzAyMiwKLQkweDc3MmEsIDB4MjA2MSwgMHhhM2QxLCAweDYwMDcsIDB4MDAwMCwgMHg2NjEyLCAweDcwMjQsIDB4NjAwZSwKLQkweDYyMjYsIDB4NjMyYSwgMHg2NDJlLCAweDY1MzIsIDB4MmMxMCwgMHgxMDc4LCAweDEzZDEsIDB4NzAwNywKLQkweDAwMDIsIDB4NzAxYiwgMHgzNzE0LCAweDAwN2MsIDB4NzAyYywgMHhhMDA1LCAweDAwYzAsIDB4MzcyNiwKLQkweDcxMWMsIDB4NzAyNCwgMHgyMGEwLCAweDc3MjgsIDB4MjAzMSwgMHgwMDAwLCAweDIwNjEsIDB4YTNkMSwKLQkweDYyMjQsIDB4NjMyOCwgMHg2NDJjLCAweDY1MzAsIDB4MDA3OCwgMHgzNjc3LCAweDcxMjAsIDB4ODEwYiwKLQkweDAwNzgsIDB4MmIyYywgMHgyMDI5LCAweDAwN2UsIDB4NzkyNCwgMHg3YTI4LCAweDdiMmMsIDB4N2MzOCwKLQkweGExODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwZTIsIDB4MDAyMCwgMHgwMDQ4LCAweDJiNWEsIDB4YTUwMiwKLQkweDAwNDgsIDB4MmI1YSwgMHhhMTg0LCAweDAwZmYsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwKLQkweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGEyODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwZTIsIDB4MDAyMCwKLQkweDAwNDgsIDB4MmI1YSwgMHhhNTAyLCAweDAwNDgsIDB4MmI1YSwgMHhhMjg0LCAweDAwZmYsIDB4YTBlMiwKLQkweDAwMjAsIDB4MDA0OCwgMHgyYjVhLCAweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGEzODQsIDB4ZmYwMCwKLQkweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwgMHhhNTAyLCAweDAwNDgsIDB4MmI1YSwKLQkweGEzODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwgMHgyYjVhLCAweGE1MDIsIDB4MDA0OCwKLQkweDJiNWEsIDB4YTQ4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDAwNDgsIDB4MmI1YSwKLQkweGE1MDIsIDB4MDA0OCwgMHgyYjVhLCAweGE0ODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MDA0OCwKLQkweDJiNWEsIDB4YTUwMiwgMHgwMDQ4LCAweDJiNWEsIDB4MjA2MSwgMHhhNWEzLCAweDYxMDIsIDB4NjIwNiwKLQkweDYzMGEsIDB4NjQwZSwgMHgwMDc4LCAweDJiMmMsIDB4MDA3ZSwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwKLQkweGQwY2MsIDB4MDA3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MjAwMSwgMHhhMzcxLCAweDIwMDQsIDB4ZDBiYywKLQkweDAwN2YsIDB4MDA3YywgMHg2MTYwLCAweDdhMjQsIDB4NjMwMCwgMHg4MmZmLCAweDAwYzAsIDB4Mzc5YiwKLQkweDc5MjYsIDB4MDA3OCwgMHgyYjJjLCAweDgzZmYsIDB4MDBjMCwgMHgyYjVhLCAweDIwMDEsIDB4ZmZmMCwKLQkweGEyMDAsIDB4MDBjOCwgMHgyYjVhLCAweDIwMTksIDB4ZmZmZiwgMHg2MDY0LCAweGEzMDIsIDB4YTIwMCwKLQkweDAwNDgsIDB4MmI1YSwgMHg3OTI2LCAweDYyNjIsIDB4MDA3OCwgMHgyYjJjLCAweDIwMDEsIDB4YTMwMCwKLQkweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4MmI1NiwgMHg3YzI4LCAweDdkMjQsIDB4N2UzOCwKLQkweDdmMmMsIDB4MTA3OCwgMHgzNTE4LCAweDAwNDAsIDB4MmI1NiwgMHgyMDA5LCAweDAwMDAsIDB4MjAxOSwKLQkweDAwMDAsIDB4NzAyMywgMHgwMDAwLCAweDcwMmYsIDB4MDAwMCwgMHhhZDgwLCAweDAwMDMsIDB4NzAyNiwKLQkweDIwYTAsIDB4YTFlMCwgMHhhNDM0LCAweDJjNjQsIDB4OGNmZiwgMHgwMDQwLCAweDM3ZTgsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDA0MCwgMHgzN2RkLCAweDYwMDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4YTA4NiwgMHgwNjAwLCAweDAwYzAsIDB4MzdlOCwgMHg2MDE0LCAweDIwYTIsIDB4OTRhMCwKLQkweDYwMTAsIDB4ODAwNywgMHhhMTA1LCAweDgwMDcsIDB4MjBhMiwgMHg5NGEwLCAweGEzOTgsIDB4MDAwMiwKLQkweDgxMDgsIDB4YTE4MiwgMHgwMGZmLCAweDAwNDAsIDB4MzdmMywgMHhhMzg2LCAweDAwMmEsIDB4MDA0MCwKLQkweDM3ZmMsIDB4MDA3OCwgMHgzN2M5LCAweDgzZmYsIDB4MDBjMCwgMHgzN2ZhLCAweDcxMjAsIDB4ODEwYywKLQkweDAwNzgsIDB4MmIyYywgMHg3MDJmLCAweDAwMDEsIDB4NzExZSwgMHg3MDIwLCAweGEzMDAsIDB4NzAyMiwKLQkweDIwNjEsIDB4YTNkMSwgMHg2MDA3LCAweDAwMDAsIDB4NjMxMiwgMHg3MDI0LCAweDYwMGUsIDB4NjQyNiwKLQkweDY1MmEsIDB4NjYyZSwgMHg2NzMyLCAweDJjMTAsIDB4MTA3OCwgMHgxM2QxLCAweDcwMDcsIDB4MDAwMiwKLQkweDcwMWIsIDB4MzgxMywgMHgwMDdjLCAweDcwMmMsIDB4YTAwNSwgMHgwMGMwLCAweDM4MjQsIDB4NzExYywKLQkweDcwMjQsIDB4MjBhMCwgMHgyMDE5LCAweDAwMDAsIDB4MjA2MSwgMHhhM2QxLCAweDY0MjQsIDB4NjUyOCwKLQkweDY2MmMsIDB4NjczMCwgMHgwMDc4LCAweDM3YzksIDB4NzEyMCwgMHg4MTBjLCAweDAwNzgsIDB4MmIyYywKLQkweDgxZmYsIDB4MDBjMCwgMHgyYjU2LCAweDYwYzgsIDB4ZDA5YywgMHgwMDQwLCAweDJiNTYsIDB4MTA3OCwKLQkweDM1MTgsIDB4MDA0MCwgMHgyYjU2LCAweDc5MjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDEwNzgsIDB4MzU2MiwgMHg3MDFiLCAweDM4M2QsIDB4MDA3YywgMHgwZDdlLCAweGFkZTgsIDB4MDAwZCwKLQkweDY4MjgsIDB4YTBiZSwgMHg3MDAwLCAweDAwNDAsIDB4Mzg1MCwgMHhhMGJlLCAweDcxMDAsIDB4MDA0MCwKLQkweDM4NTAsIDB4YTBiZSwgMHg3MjAwLCAweDAwNDAsIDB4Mzg1MCwgMHgwZDdmLCAweDAwNzgsIDB4MmI1YSwKLQkweDY4MjAsIDB4NjkyNCwgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHgzODdiLCAweDEwNzgsIDB4NDQ5OSwKLQkweDAwYzAsIDB4Mzg3YiwgMHg3MTIyLCAweDY2MTIsIDB4NjUxNiwgMHg2ZTE4LCAweDBjN2UsIDB4MTA3OCwKLQkweDM1MTgsIDB4MDA0MCwgMHgzODdiLCAweDEwNzgsIDB4MzUxOCwgMHgwMDQwLCAweDM4N2IsIDB4MGM3ZiwKLQkweDBkN2YsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDY4MjMsIDB4MDAwMCwKLQkweDY4MDQsIDB4MjA2OCwgMHgxMDc4LCAweDhiYmQsIDB4MDA0MCwgMHgyYjU2LCAweDcwMDcsIDB4MDAwMywKLQkweDcwMWIsIDB4Mzg3ZSwgMHgwMDdjLCAweDBkN2YsIDB4MDA3OCwgMHgyYjU2LCAweDcxMjAsIDB4MTA3OCwKLQkweDI5MjEsIDB4NjgyMCwgMHhhMDg2LCAweDgwMDEsIDB4MDA0MCwgMHgyYjU2LCAweDJkMDAsIDB4NzAxZSwKLQkweDY4MDQsIDB4YTA4MCwgMHgwMDAyLCAweDAwN2UsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwKLQkweDEwNzgsIDB4NDFiZSwgMHgwMDdmLCAweGFkZTgsIDB4MDAwZCwgMHg2YTA4LCAweDZiMGMsIDB4NmMxMCwKLQkweDZkMTQsIDB4MjA2MSwgMHhhM2QxLCAweDYwMDcsIDB4MDAwMCwgMHg2ZTAwLCAweDZmMjgsIDB4YTdjNiwKLQkweDcwMDAsIDB4MDBjMCwgMHgzOGE1LCAweDAwNzgsIDB4MzhhOSwgMHhhN2M2LCAweDcxMDAsIDB4MDBjMCwKLQkweDM4YjEsIDB4YTZjMiwgMHgwMDA0LCAweDAwNDgsIDB4MmI1YSwgMHgyMDA5LCAweDAwMDQsIDB4MDA3OCwKLQkweDM1NjYsIDB4YTdjNiwgMHg3MjAwLCAweDAwYzAsIDB4MmI1YSwgMHhhNmMyLCAweDAwNTQsIDB4MDA0OCwKLQkweDJiNWEsIDB4NjAwZSwgMHg2MDEzLCAweDAwMmEsIDB4NjIyNiwgMHg2MzJhLCAweDY0MmUsIDB4NjUzMiwKLQkweDJjMTAsIDB4MTA3OCwgMHgxM2QxLCAweDcwMDcsIDB4MDAwMiwgMHg3MDFiLCAweDM4YzgsIDB4MDA3YywKLQkweDcwMWMsIDB4MjA2OCwgMHg2ODA0LCAweGEwODAsIDB4MDAwMSwgMHgyMDA0LCAweGEwODAsIDB4MDAwMiwKLQkweDAwN2UsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwgMHgxMDc4LCAweDQxYmUsIDB4MDA3ZiwKLQkweDIwMDksIDB4MDAyYSwgMHgyMDYxLCAweGEzZDEsIDB4NjIyNCwgMHg2MzI4LCAweDY0MmMsIDB4NjUzMCwKLQkweDAwNzgsIDB4MzU2NiwgMHg4MWZmLCAweDAwYzAsIDB4MmI1NiwgMHgxMDc4LCAweDM1MzAsIDB4MDA0MCwKLQkweDJiNWEsIDB4MTA3OCwgMHg0NWE3LCAweDAwNDAsIDB4MmI1NiwgMHgxMDc4LCAweDQ3MTAsIDB4MDA3OCwKLQkweDJiMmMsIDB4NzgyNCwgMHhkMDg0LCAweDAwNDAsIDB4MzE1MCwgMHgxMDc4LCAweDM1NDIsIDB4MDA0MCwKLQkweDJiNWEsIDB4MGM3ZSwgMHgxMDc4LCAweDM1MTgsIDB4MGM3ZiwgMHgwMGMwLCAweDM5MDMsIDB4MjAwOSwKLQkweDAwMDIsIDB4MDA3OCwgMHgyYjU2LCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4MzkxMCwgMHhhMDhlLCAweDAwMDQsIDB4MDA0MCwgMHgzOTEwLCAweGEwOGUsIDB4MDAwNSwKLQkweDAwYzAsIDB4MzkzNCwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGI0LCAweDAwNDAsIDB4MzE4NSwKLQkweDYwMDAsIDB4ZDA4YywgMHgwMGMwLCAweDMxODUsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4MTA3OCwgMHg4YmQ5LCAweDAwYzAsIDB4MzkyOSwgMHgyMDA5LCAweDAwMDMsIDB4MDA3OCwKLQkweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzkyZSwgMHgwMDdjLCAweDEwNzgsIDB4MzU0MiwKLQkweDAwNDAsIDB4MmI1YSwgMHgwMDc4LCAweDMxODUsIDB4MjAwOSwgMHhhMzJlLCAweDIxMGMsIDB4ODFmZiwKLQkweDAwNDAsIDB4MzkzZSwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHgyYjU2LCAweDIwMDEsIDB4YTMwMCwKLQkweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwNDAsIDB4Mzk0OSwgMHgyMDA5LCAweDAwMDcsIDB4MDA3OCwKLQkweDJiNTYsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMDQwLCAweDM5NTMsIDB4MjAwOSwKLQkweDAwMDgsIDB4MDA3OCwgMHgyYjU2LCAweDYwOWMsIDB4ZDBhNCwgMHgwMGMwLCAweDM5NWEsIDB4ZDBhYywKLQkweDAwYzAsIDB4MzE4NSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4MTA3OCwgMHg4YzRkLCAweDAwYzAsIDB4Mzk2OSwgMHgyMDA5LCAweDAwMDMsIDB4MDA3OCwKLQkweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4Mzk2ZSwgMHgwMDdjLCAweDY4MzAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MDBjMCwgMHgzOTc3LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDJiNTYsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDA0MCwgMHgyYjVhLCAweDAwNzgsIDB4MzkxMiwgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwKLQkweDAwYzAsIDB4MmI1NiwgMHg2MDAwLCAweGEwODYsIDB4MDAwMywgMHgyMDA5LCAweDAwMDcsIDB4MDBjMCwKLQkweDJiNTYsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgyMDA5LCAweDAwMDgsIDB4MDBjMCwKLQkweDJiNTYsIDB4MTA3OCwgMHgzNTQyLCAweDAwNDAsIDB4MmI1YSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwNiwgMHgyMDA5LCAweDAwMDksIDB4MDBjMCwgMHgyYjU2LCAweDBjN2UsIDB4MTA3OCwKLQkweDM1MTgsIDB4MGM3ZiwgMHgyMDA5LCAweDAwMDIsIDB4MDA0MCwgMHgyYjU2LCAweDY4MzcsIDB4MDAwMCwKLQkweDY4MzMsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwgMHg3OTI4LCAweGExOTQsIDB4ZmYwMCwKLQkweGExOGMsIDB4MDBmZiwgMHhhMDA2LCAweDgyZmYsIDB4MDBjMCwgMHgzOWJjLCAweGMwZWQsIDB4Njk1MiwKLQkweDc5MmMsIDB4Njk1NiwgMHgwMDc4LCAweDM5YzUsIDB4YTI4ZSwgMHgwMTAwLCAweDAwYzAsIDB4MmI1YSwKLQkweGMwZTUsIDB4Njg1MywgMHgwMDAwLCAweDY4NTcsIDB4MDAwMCwgMHg2ODNlLCAweDEwNzgsIDB4OGRmNiwKLQkweDIwMDksIDB4MDAwMywgMHgwMDQwLCAweDJiNTYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzlkMSwKLQkweDAwN2MsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsIDB4MmI1NiwKLQkweDAwNzgsIDB4MmIyYywgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwgMHgwMGMwLCAweDJiNTYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwMywgMHgyMDA5LCAweDAwMDcsIDB4MDBjMCwgMHgyYjU2LCAweDEwNzgsIDB4MzU0MiwKLQkweDAwNDAsIDB4MmI1YSwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MjAwOSwKLQkweDAwMDksIDB4MDBjMCwgMHgyYjU2LCAweDBjN2UsIDB4MTA3OCwgMHgzNTE4LCAweDBjN2YsIDB4MjAwOSwKLQkweDAwMDIsIDB4MDA0MCwgMHgyYjU2LCAweGFkODAsIDB4MDAwZiwgMHgyMDA5LCAweDAwMDgsIDB4N2EyYywKLQkweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDEwNzgsIDB4MzU2MiwgMHg3MDFiLCAweDNhMDgsIDB4MDA3YywKLQkweDBkN2UsIDB4YWRlOCwgMHgwMDBmLCAweDY4MDAsIDB4YTA4NiwgMHgwNTAwLCAweDAwYzAsIDB4M2ExYiwKLQkweDY4MDQsIDB4YTAwNSwgMHgwMGMwLCAweDNhMWIsIDB4NjgwOCwgMHhhMDg0LCAweGZmMDAsIDB4MDBjMCwKLQkweDNhMWIsIDB4MDA3OCwgMHgzYTFlLCAweDBkN2YsIDB4MDBjMCwgMHgyYjVhLCAweDBkN2YsIDB4NjgzNywKLQkweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDBjN2UsIDB4MTA3OCwKLQkweDM1NDIsIDB4MDBjMCwgMHgzYTJlLCAweDBjN2YsIDB4MDA3OCwgMHgyYjVhLCAweDEwNzgsIDB4OGU1MiwKLQkweDIwMDksIDB4MDAwMywgMHgwYzdmLCAweDAwNDAsIDB4MmI1NiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDNhM2EsIDB4MDA3YywgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDA0MCwKLQkweDJiNTYsIDB4MDA3OCwgMHgyYjJjLCAweDEyN2UsIDB4MGM3ZSwgMHgwZTdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDIwNzEsIDB4YTMwMCwgMHg2MDQ0LCAweGQwYTQsIDB4MDBjMCwgMHgzYTZjLCAweGQwODQsIDB4MDA0MCwKLQkweDNhNTUsIDB4MTA3OCwgMHgzYmNjLCAweDAwNzgsIDB4M2E2OCwgMHhkMDhjLCAweDAwNDAsIDB4M2E1YywKLQkweDEwNzgsIDB4M2FlMywgMHgwMDc4LCAweDNhNjgsIDB4ZDA5NCwgMHgwMDQwLCAweDNhNjMsIDB4MTA3OCwKLQkweDNhYjcsIDB4MDA3OCwgMHgzYTY4LCAweGQwOWMsIDB4MDA0MCwgMHgzYTY4LCAweDEwNzgsIDB4M2E3NiwKLQkweDBlN2YsIDB4MGM3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MDE3ZSwgMHg2MTI4LCAweGQxOWMsIDB4MDBjMCwKLQkweDNhNzMsIDB4YzE5ZCwgMHg2MTJhLCAweDAxN2YsIDB4MDA3OCwgMHgzYTY4LCAweDYyNGMsIDB4YTI4NiwKLQkweGYwZjAsIDB4MDBjMCwgMHgzYTg3LCAweDYwNDgsIDB4YTA4NiwgMHhmMGYwLCAweDAwNDAsIDB4M2E4NywKLQkweDYyNGEsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgwMDc4LCAweDNhYjYsIDB4YTI5NCwKLQkweGZmMDAsIDB4YTI5NiwgMHhmNzAwLCAweDAwNDAsIDB4M2E5YywgMHg3MTM0LCAweGQxYTQsIDB4MDBjMCwKLQkweDNhOWMsIDB4NjI0MCwgMHhhMjk0LCAweDAwMTAsIDB4MDA0MCwgMHgzYTljLCAweDIwMDksIDB4MDBmNywKLQkweDEwNzgsIDB4NDFkZSwgMHgwMDc4LCAweDNhYjYsIDB4NjA0MywgMHgwMDQwLCAweDYwNDMsIDB4MDAwMCwKLQkweDcwNzMsIDB4MDAwMCwgMHg3MDhiLCAweDAwMDEsIDB4NzBhZiwgMHgwMDAwLCAweDcwY2IsIDB4MDAwMCwKLQkweDIwMDksIDB4YTljMCwgMHgyMDBiLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDcwNzcsIDB4MDAwZiwKLQkweDIwMDksIDB4MDAwZiwgMHgyMDExLCAweDQxMjIsIDB4MTA3OCwgMHg1OTZjLCAweDAwN2MsIDB4MTU3ZSwKLQkweDcwNzQsIDB4YTAwNSwgMHgwMGMwLCAweDNhZTEsIDB4MjAxMSwgMHg0MTIyLCAweDEwNzgsIDB4NThkNCwKLQkweDYwNDAsIDB4YTA5NCwgMHgwMDEwLCAweGEyODUsIDB4MDAyMCwgMHg2MDQyLCAweDIwYTksIDB4MDBjOCwKLQkweDYwNDQsIDB4ZDA4YywgMHgwMGMwLCAweDNhZGEsIDB4MDBmMCwgMHgzYWM4LCAweDYyNDIsIDB4NzA4NywKLQkweDAwMDAsIDB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDgwLCAweDYwNDIsIDB4NjI0MiwKLQkweDAwNzgsIDB4M2FlMSwgMHg2MjQyLCAweDcwODcsIDB4MDAwMCwgMHg3MDdiLCAweDAwMDAsIDB4MDA3OCwKLQkweDNhZTEsIDB4MTU3ZiwgMHgwMDdjLCAweDcwNzgsIDB4YTA4YSwgMHgwMDAzLCAweDAwYzgsIDB4M2FlYywKLQkweDEwNzksIDB4M2FlZiwgMHgwMDc4LCAweDNhZWUsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2MsIDB4M2FmMiwKLQkweDNiNDEsIDB4M2JjYiwgMHgwZjdlLCAweDcwN2IsIDB4MDAwMSwgMHgyMGUxLCAweGEwMDAsIDB4MjBlMSwKLQkweDg3MDAsIDB4MTA3OCwgMHgyMThiLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA3OSwKLQkweGE4MDAsIDB4MjA3YiwgMHgyMjAwLCAweDc4MDcsIDB4MDBlZiwgMHg3ODBiLCAweDAwMDAsIDB4NzgwZiwKLQkweDAwZWYsIDB4NzgxMywgMHgwMTM4LCAweDc4MTcsIDB4MDAwMCwgMHg3ODFiLCAweDAwMDAsIDB4NzgxZiwKLQkweDAwMDAsIDB4NzgyMywgMHhmZmZmLCAweDc4MjcsIDB4ZmZmZiwgMHg3ODJiLCAweDAwMDAsIDB4NzgyZiwKLQkweDAwMDAsIDB4MjA3OSwgMHhhODBjLCAweDIwN2IsIDB4MTEwMSwgMHg3ODA3LCAweDAwMDAsIDB4MjA5OSwKLQkweGEzMDUsIDB4MjBhMSwgMHhhODBlLCAweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDIwNzksIDB4YTgxMiwKLQkweDIwN2IsIDB4MDAwMCwgMHg3ODA3LCAweDAwMDAsIDB4MjA5OSwgMHhhODAwLCAweDIwYTEsIDB4MDIwYiwKLQkweDIwYTksIDB4MDAxNCwgMHg1M2E2LCAweDYwYzMsIDB4MDAwYywgMHg2MDBmLCAweDAwMDAsIDB4MTA3OCwKLQkweDQxNTgsIDB4MGY3ZiwgMHg3MDdmLCAweDAwMDAsIDB4NjA0MywgMHgwMDA4LCAweDYwNDMsIDB4MDAwMCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHg3MDdjLCAweDcwN2YsIDB4MDAwMCwgMHhhMDI1LCAweDAwNDAsIDB4M2JiNSwKLQkweDYwMjAsIDB4ZDBiNCwgMHgwMGMwLCAweDNiYjMsIDB4NzE4OCwgMHg4MWZmLCAweDAwNDAsIDB4M2JhMiwKLQkweGE0ODYsIDB4MDAwYywgMHgwMGMwLCAweDNiYWQsIDB4YTQ4MCwgMHgwMDE4LCAweDgwMDQsIDB4MjBhOCwKLQkweDIwMTEsIDB4YTg4MCwgMHgyMDE5LCAweGE4MDAsIDB4MjIwYywgMHgyMzA0LCAweGExMDYsIDB4MDBjMCwKLQkweDNiNzksIDB4ODIxMCwgMHg4MzE4LCAweDAwZjAsIDB4M2I1YywgMHg2MDQzLCAweDAwMDQsIDB4NjA4YiwKLQkweGJjOTQsIDB4NjA4ZiwgMHhmMGYwLCAweDYwNDMsIDB4MDAwNiwgMHg3MDdiLCAweDAwMDIsIDB4NzA4NywKLQkweDAwMDIsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU5NmMsIDB4MDA3OCwKLQkweDNiYjMsIDB4MjA2OSwgMHhhODgwLCAweDY5MzAsIDB4YTE4ZSwgMHgxMTAxLCAweDAwYzAsIDB4M2JhZCwKLQkweDY4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNiYWQsIDB4NjkwMCwgMHhhMThjLCAweDAwZmYsIDB4MDBjMCwKLQkweDNiOGQsIDB4NjgwNCwgMHhhMDA1LCAweDAwNDAsIDB4M2JhMiwgMHgyMDExLCAweGE4OGUsIDB4MjAxOSwKLQkweGEzMDUsIDB4MjBhOSwgMHgwMDA0LCAweDIyMGMsIDB4MjMwNCwgMHhhMTAyLCAweDAwNDgsIDB4M2JhMCwKLQkweDAwYzAsIDB4M2JhZCwgMHg4MjEwLCAweDgzMTgsIDB4MDBmMCwgMHgzYjkzLCAweDAwNzgsIDB4M2JhZCwKLQkweDcwOGIsIDB4MDAwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTg4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMTQsIDB4NTNhNiwgMHg2MDQzLCAweDAwMDgsIDB4NjA0MywKLQkweDAwMDAsIDB4MDA3OCwgMHgzYmI1LCAweDBkN2YsIDB4MDA3YywgMHg2MDIwLCAweGQwYjQsIDB4MDBjMCwKLQkweDNiYjMsIDB4NjBjMywgMHgwMDBjLCAweDIwMTEsIDB4YTViNSwgMHgyMDEzLCAweDAwMDAsIDB4NzA3ZiwKLQkweDAwMDAsIDB4MjBlMSwgMHg5MDgwLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MTA3OCwKLQkweDZjMzgsIDB4MDA3OCwgMHgzYmIzLCAweDAwN2MsIDB4NzA4NCwgMHhhMDhhLCAweDAwMWQsIDB4MDBjOCwKLQkweDNiZDUsIDB4MTA3OSwgMHgzYmQ4LCAweDAwNzgsIDB4M2JkNywgMHgxMDc4LCAweDEzMjgsIDB4MDA3YywKLQkweDNjMDIsIDB4M2MxMSwgMHgzYzQwLCAweDNjNTksIDB4M2M4NSwgMHgzY2IxLCAweDNjZGQsIDB4M2QxMywKLQkweDNkM2YsIDB4M2Q2NywgMHgzZGFhLCAweDNkZDQsIDB4M2RmNiwgMHgzZTBjLCAweDNlMzIsIDB4M2U0NSwKLQkweDNlNGUsIDB4M2U3ZSwgMHgzZWFhLCAweDNlZDYsIDB4M2YwMiwgMHgzZjM4LCAweDNmN2QsIDB4M2ZhYywKLQkweDNmY2UsIDB4NDAxMCwgMHg0MDM2LCAweDQwNGYsIDB4NDA1MCwgMHgwYzdlLCAweDIwNjEsIDB4YTMwMCwKLQkweDYwMDMsIDB4MDAwNywgMHgyMDYxLCAweDAxMDAsIDB4NjAwNCwgMHhhMDg0LCAweGZmZjksIDB4NjAwNiwKLQkweDBjN2YsIDB4MDA3YywgMHg2MDhiLCAweGJjOTQsIDB4NjA4ZiwgMHhmMGYwLCAweDYwNDMsIDB4MDAwMiwKLQkweDcwODcsIDB4MDAwMSwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NTk2YywKLQkweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDNjM2UsIDB4NjA0MywKLQkweDAwMDAsIDB4NjAyMCwgMHhkMGI0LCAweDAwYzAsIDB4M2MzZSwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwMiwgMHgwMGMwLCAweDNjM2MsIDB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4M2MzYywKLQkweDdhMzgsIDB4ZDJmYywgMHgwMDQwLCAweDNjMzIsIDB4NzBhYywgMHhhMDA1LCAweDAwYzAsIDB4M2MzMiwKLQkweDcwYWYsIDB4MDAwMSwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwgMHg1OGQ0LCAweDcwODcsIDB4MDAxMCwKLQkweDEwNzgsIDB4M2U0ZSwgMHgwMDc4LCAweDNjM2UsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywKLQkweDcwODcsIDB4MDAwMywgMHg2MDQzLCAweDAwMDQsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwKLQkweDEwNzgsIDB4NDFjNiwgMHgyMGEzLCAweDExMDIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTksIDB4MDAwYSwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMGYwLCAweDNjNTAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwKLQkweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHgzYzgzLCAweDIwMTEsIDB4NDEyOSwKLQkweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHgzYzgxLCAweDIwNzksIDB4YTg4MCwKLQkweDdhMzAsIDB4YTI5NiwgMHgxMTAyLCAweDAwYzAsIDB4M2M4MSwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwKLQkweDNjODEsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2M3YiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNjN2IsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwNCwgMHgxMDc4LCAweDNjODUsIDB4MDA3OCwKLQkweDNjODMsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMDUsIDB4MTA3OCwKLQkweDQxYzYsIDB4MjBhMywgMHgxMTAzLCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNjYTMsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2NhMywKLQkweDcxNGMsIDB4YTE4NiwgMHhmZmZmLCAweDAwNDAsIDB4M2NhMywgMHgxMDc4LCAweDQwZWEsIDB4MDA0MCwKLQkweDNjYTMsIDB4MTA3OCwgMHg0MWY1LCAweDIwYTksIDB4MDAwOCwgMHgyMjk4LCAweDI2YTAsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwKLQkweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwgMHgzY2RiLCAweDIwMTEsIDB4NDEyOSwKLQkweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHgzY2Q5LCAweDIwNzksIDB4YTg4MCwKLQkweDdhMzAsIDB4YTI5NiwgMHgxMTAzLCAweDAwYzAsIDB4M2NkOSwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwKLQkweDNjZDksIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2NkMywgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNjZDMsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwNiwgMHgxMDc4LCAweDNjZGQsIDB4MDA3OCwKLQkweDNjZGIsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMDcsIDB4MTA3OCwKLQkweDQxYzYsIDB4MjBhMywgMHgxMTA0LCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNkMDUsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2QwNSwKLQkweDcxNTAsIDB4YTE4NiwgMHhmZmZmLCAweDAwNDAsIDB4M2QwNSwgMHhhMTgwLCAweDI5M2YsIDB4MjAwYywKLQkweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDEwNzgsIDB4NDBlYSwgMHgwMDQwLCAweDNkMDUsIDB4MTA3OCwKLQkweDM3OGIsIDB4MDA0MCwgMHgzZDA1LCAweDEwNzgsIDB4MjUwMCwgMHgyMGE5LCAweDAwMDgsIDB4MjI5OCwKLQkweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwKLQkweDEwNzgsIDB4NDE1OCwgMHgwMDdjLCAweDBmN2UsIDB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4M2QzZCwKLQkweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4M2QzYiwKLQkweDIwNzksIDB4YTg4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwgMHgwMGMwLCAweDNkM2IsIDB4NzgzNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgzZDNiLCAweDdhMzgsIDB4ZDJmYywgMHgwMDQwLCAweDNkMzUsIDB4NzBhYywKLQkweGEwMDUsIDB4MDBjMCwgMHgzZDM1LCAweDcwYWYsIDB4MDAwMSwgMHg3MDg3LCAweDAwMDgsIDB4MTA3OCwKLQkweDNkM2YsIDB4MDA3OCwgMHgzZDNkLCAweDEwNzgsIDB4NDE3MSwgMHgwZjdmLCAweDAwN2MsIDB4NzA4NywKLQkweDAwMDksIDB4MTA3OCwgMHg0MWM2LCAweDIwYTMsIDB4MTEwNSwgMHgyMGEzLCAweDAxMDAsIDB4MzQzMCwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNkNTgsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2Q1OCwKLQkweDEwNzgsIDB4NDA1MSwgMHgwMGMwLCAweDNkNjIsIDB4YTA4NSwgMHgwMDAxLCAweDEwNzgsIDB4MjUwMCwKLQkweDIwYTksIDB4MDAwOCwgMHgyMDk5LCAweGE4OGUsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwKLQkweDcwN2MsIDB4YTAwNSwgMHgwMDQwLCAweDNkYTgsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwKLQkweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDNkYTYsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDUsIDB4MDBjMCwgMHgzZGE2LCAweDc4MzQsIDB4MjAxMSwgMHgwMTAwLCAweGEyMWUsIDB4MDBjMCwKLQkweDNkOTEsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2Q4YiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNkOGIsIDB4NzBhZiwgMHgwMDAxLCAweDcwODcsIDB4MDAwYSwgMHgxMDc4LCAweDNkYWEsIDB4MDA3OCwKLQkweDNkYTgsIDB4YTAwNSwgMHgwMGMwLCAweDNkYTYsIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2Q5ZSwKLQkweDcwYWMsIDB4YTAwNSwgMHgwMGMwLCAweDNkOWUsIDB4NzBhZiwgMHgwMDAxLCAweDcwODMsIDB4MDAwMCwKLQkweDcwODcsIDB4MDAwZSwgMHgxMDc4LCAweDNlMzIsIDB4MDA3OCwgMHgzZGE4LCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMGIsIDB4MjAxMSwgMHhhODBlLCAweDIyYTAsIDB4MjBhOSwKLQkweDAwNDAsIDB4MjAxOSwgMHhmZmZmLCAweDQzYTQsIDB4MjBhOSwgMHgwMDAyLCAweDIwMDksIDB4MDAwMCwKLQkweDQxYTQsIDB4MTA3OCwgMHg0MWM2LCAweDIwYTMsIDB4MTEwNiwgMHgyMGEzLCAweDAwMDAsIDB4MTA3OCwKLQkweDQyMTEsIDB4MDA0MCwgMHgzZGM3LCAweDIwMTMsIDB4MDAwMCwgMHgwMDc4LCAweDNkY2IsIDB4NjAzMCwKLQkweGEwODUsIDB4MDEwMCwgMHgyMDEyLCAweDIyOTgsIDB4MjBhOSwgMHgwMDQyLCAweDUzYTYsIDB4NjBjMywKLQkweDAwODQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNkZjQsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwKLQkweDNkZjIsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA2LCAweDAwYzAsIDB4M2RmMiwKLQkweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNkZjIsIDB4NzA4NywgMHgwMDBjLCAweDEwNzgsIDB4M2RmNiwKLQkweDAwNzgsIDB4M2RmNCwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAwZCwKLQkweDEwNzgsIDB4NDFjNiwgMHgyMGEzLCAweDExMDcsIDB4MjBhMywgMHgwMDAwLCAweDIwOTksIDB4YTg4ZSwKLQkweDIwYTksIDB4MDA0MCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwODQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNlMzAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwKLQkweDNlMmUsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA3LCAweDAwYzAsIDB4M2UyZSwKLQkweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNlMmUsIDB4NzA4MywgMHgwMDAxLCAweDEwNzgsIDB4NDFiOCwKLQkweDcwODcsIDB4MDAwZSwgMHgxMDc4LCAweDNlMzIsIDB4MDA3OCwgMHgzZTMwLCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMGYsIDB4NzA3ZiwgMHgwMDAwLCAweDYwOGIsIDB4YmM4NSwKLQkweDYwOGYsIDB4YjViNSwgMHg2MDQzLCAweDAwMDUsIDB4NjA0MywgMHgwMDA0LCAweDIwMDksIDB4MDdkMCwKLQkweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4YzcsIDB4MDA3YywgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNlNGQsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHgwMDdjLCAweDcwODcsIDB4MDAxMSwKLQkweDEwNzgsIDB4NDIxMSwgMHgwMGMwLCAweDNlNjcsIDB4NzE2OCwgMHg4MWZmLCAweDAwNDAsIDB4M2U2NywKLQkweDIwMDksIDB4MDAwMCwgMHg3MDZjLCAweGEwODQsIDB4MDBmZiwgMHgxMDc4LCAweDI0ZTMsIDB4YTE4NiwKLQkweDAwODAsIDB4MDA0MCwgMHgzZTY3LCAweDIwMTEsIDB4YTg4ZSwgMHgxMDc4LCAweDQwZWEsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTg4MCwgMHgyMGExLCAweDAyMGIsIDB4NzQ3YywKLQkweGE0ODAsIDB4MDAxOCwgMHhhMDgwLCAweDAwMDcsIDB4YTA4NCwgMHgwM2Y4LCAweDgwMDQsIDB4MjBhOCwKLQkweDUzYTYsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwgMHgwMDdjLCAweDBmN2UsIDB4NzA3YywKLQkweGEwMDUsIDB4MDA0MCwgMHgzZWE4LCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4YTA4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHgzZWE2LCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwMywKLQkweDAwYzAsIDB4M2VhNiwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwgMHgzZWE2LCAweDdhMzgsIDB4ZDJmYywKLQkweDAwNDAsIDB4M2VhMCwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwgMHgzZWEwLCAweDcwYWYsIDB4MDAwMSwKLQkweDcwODcsIDB4MDAxMiwgMHgxMDc4LCAweDNlYWEsIDB4MDA3OCwgMHgzZWE4LCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMTMsIDB4MTA3OCwgMHg0MWQyLCAweDIwYTMsIDB4MTEwMywKLQkweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwgMHgxMDc4LCAweDQyMTEsIDB4MDBjMCwKLQkweDNlYzgsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2VjOCwgMHg3MTRjLCAweGExODYsIDB4ZmZmZiwKLQkweDAwNDAsIDB4M2VjOCwgMHgxMDc4LCAweDQwZWEsIDB4MDA0MCwgMHgzZWM4LCAweDEwNzgsIDB4NDFmNSwKLQkweDIwYTksIDB4MDAwOCwgMHgyMjk4LCAweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NDE1OCwgMHgwMDdjLCAweDBmN2UsIDB4NzA3YywKLQkweGEwMDUsIDB4MDA0MCwgMHgzZjAwLCAweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4YTA4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHgzZWZlLCAweDIwNzksIDB4YTg4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwKLQkweDAwYzAsIDB4M2VmZSwgMHg3ODM0LCAweGEwMDUsIDB4MDBjMCwgMHgzZWZlLCAweDdhMzgsIDB4ZDJmYywKLQkweDAwNDAsIDB4M2VmOCwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwgMHgzZWY4LCAweDcwYWYsIDB4MDAwMSwKLQkweDcwODcsIDB4MDAxNCwgMHgxMDc4LCAweDNmMDIsIDB4MDA3OCwgMHgzZjAwLCAweDEwNzgsIDB4NDE3MSwKLQkweDBmN2YsIDB4MDA3YywgMHg3MDg3LCAweDAwMTUsIDB4MTA3OCwgMHg0MWQyLCAweDIwYTMsIDB4MTEwNCwKLQkweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YTg4ZSwgMHgxMDc4LCAweDQyMTEsIDB4MDBjMCwKLQkweDNmMmEsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2YyYSwgMHg3MTUwLCAweGExODYsIDB4ZmZmZiwKLQkweDAwNDAsIDB4M2YyYSwgMHhhMTgwLCAweDI5M2YsIDB4MjAwYywgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDEwNzgsIDB4NDBlYSwgMHgwMDQwLCAweDNmMmEsIDB4MTA3OCwgMHgzNzhiLCAweDAwNDAsIDB4M2YyYSwKLQkweDEwNzgsIDB4MjUwMCwgMHgyMGE5LCAweDAwMDgsIDB4MjI5OCwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywKLQkweDBmN2UsIDB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4M2Y3YiwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwKLQkweDU4ZDQsIDB4YTA4NiwgMHgwMDE0LCAweDAwYzAsIDB4M2Y3OSwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwNSwgMHgwMGMwLCAweDNmNzksIDB4NzgzNCwgMHgyMDExLCAweDAxMDAsIDB4YTIxZSwKLQkweDAwYzAsIDB4M2Y1ZSwgMHg3YTM4LCAweGQyZmMsIDB4MDA0MCwgMHgzZjVjLCAweDcwYWMsIDB4YTAwNSwKLQkweDAwYzAsIDB4M2Y1YywgMHg3MGFmLCAweDAwMDEsIDB4MDA3OCwgMHgzZjZkLCAweGEwMDUsIDB4MDBjMCwKLQkweDNmNzksIDB4N2EzOCwgMHhkMmZjLCAweDAwNDAsIDB4M2Y2YiwgMHg3MGFjLCAweGEwMDUsIDB4MDBjMCwKLQkweDNmNmIsIDB4NzBhZiwgMHgwMDAxLCAweDcwODMsIDB4MDAwMCwgMHg3YTM4LCAweGQyZjQsIDB4MDA0MCwKLQkweDNmNzMsIDB4NzBjYiwgMHgwMDA4LCAweDcwODcsIDB4MDAxNiwgMHgxMDc4LCAweDNmN2QsIDB4MDA3OCwKLQkweDNmN2IsIDB4MTA3OCwgMHg0MTcxLCAweDBmN2YsIDB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4MjA5OSwgMHhhODgwLCAweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMGUsIDB4NTNhNiwKLQkweDM0MzAsIDB4MjAxMSwgMHhhODhlLCAweDcwODcsIDB4MDAxNywgMHgxMDc4LCAweDQyMTEsIDB4MDBjMCwKLQkweDNmOWQsIDB4NzA3MCwgMHhhMDA1LCAweDAwYzAsIDB4M2Y5ZCwgMHgxMDc4LCAweDQwNTEsIDB4MDBjMCwKLQkweDNmYTcsIDB4YTA4NSwgMHgwMDAxLCAweDEwNzgsIDB4MjUwMCwgMHgyMGE5LCAweDAwMDgsIDB4MjA5OSwKLQkweGE4OGUsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MGY3ZSwgMHg3MDdjLCAweGEwMDUsIDB4MDA0MCwKLQkweDNmY2MsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHhhMDg2LCAweDAwODQsIDB4MDBjMCwKLQkweDNmY2EsIDB4MjA3OSwgMHhhODgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA2LCAweDAwYzAsIDB4M2ZjYSwKLQkweDc4MzQsIDB4YTAwNSwgMHgwMGMwLCAweDNmY2EsIDB4NzA4NywgMHgwMDE4LCAweDEwNzgsIDB4M2ZjZSwKLQkweDAwNzgsIDB4M2ZjYywgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAxOSwKLQkweDEwNzgsIDB4NDFkMiwgMHgyMGEzLCAweDExMDYsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjA5OSwKLQkweGE4OGUsIDB4MjAzOSwgMHhhODBlLCAweDI3YTAsIDB4MjBhOSwgMHgwMDQwLCAweDUzYTMsIDB4MTA3OCwKLQkweDQyMTEsIDB4MDBjMCwgMHg0MDAyLCAweDI3MjgsIDB4MjUxNCwgMHg4MjA3LCAweGEwODQsIDB4MDBmZiwKLQkweDgwMDAsIDB4MjAxOCwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywgMHhhMjA1LCAweDIwMmEsIDB4NjAzMCwKLQkweDIzMTAsIDB4ODIxNCwgMHhhMmEwLCAweGE4MGUsIDB4MjQxNCwgMHhhMzhjLCAweDAwMDEsIDB4MDA0MCwKLQkweDNmZmQsIDB4YTI5NCwgMHhmZjAwLCAweDAwNzgsIDB4NDAwMCwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywKLQkweGEyMTUsIDB4MjIyMiwgMHgyNzk4LCAweDI2YTAsIDB4MjBhOSwgMHgwMDQwLCAweDUzYTYsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDA4NCwgMHgxMDc4LCAweDQxNTgsIDB4MDA3YywKLQkweDBmN2UsIDB4NzA3YywgMHhhMDA1LCAweDAwNDAsIDB4NDAzNCwgMHgyMDExLCAweDQxMjksIDB4MTA3OCwKLQkweDU4ZDQsIDB4YTA4NiwgMHgwMDg0LCAweDAwYzAsIDB4NDAzMiwgMHgyMDc5LCAweGE4ODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwNywgMHgwMGMwLCAweDQwMzIsIDB4NzgzNCwgMHhhMDA1LCAweDAwYzAsIDB4NDAzMiwKLQkweDcwODMsIDB4MDAwMSwgMHgxMDc4LCAweDQxYjgsIDB4NzA4NywgMHgwMDFhLCAweDEwNzgsIDB4NDAzNiwKLQkweDAwNzgsIDB4NDAzNCwgMHgxMDc4LCAweDQxNzEsIDB4MGY3ZiwgMHgwMDdjLCAweDcwODcsIDB4MDAxYiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwgMHhhODgwLCAweDIwYTEsIDB4MDIwYiwKLQkweDc0N2MsIDB4YTQ4MCwgMHgwMDE4LCAweGEwODAsIDB4MDAwNywgMHhhMDg0LCAweDAzZjgsIDB4ODAwNCwKLQkweDIwYTgsIDB4NTNhNiwgMHg2MGMzLCAweDAwODQsIDB4MTA3OCwgMHg0MTU4LCAweDAwN2MsIDB4MDA3YywKLQkweDAwN2MsIDB4MDg3ZSwgMHgwOTdlLCAweDIwMjksIDB4YTM1MiwgMHgyNTJjLCAweDIwYTksIDB4MDAwOCwKLQkweDIwNDEsIDB4YTgwZSwgMHgyOGEwLCAweDIwOTksIDB4YTg4ZSwgMHg1M2EzLCAweDIwYTksIDB4MDAwOCwKLQkweDIwMTEsIDB4MDAwNywgMHhkNWQ0LCAweDAwNDAsIDB4NDA2NywgMHgyMDExLCAweDAwMDAsIDB4MjgwMCwKLQkweGEyMDAsIDB4MjAwYywgMHhhMWE2LCAweGZmZmYsIDB4MDBjMCwgMHg0MDc5LCAweGQ1ZDQsIDB4MDA0MCwKLQkweDQwNzQsIDB4ODIxMCwgMHgwMDc4LCAweDQwNzUsIDB4ODIxMSwgMHgwMGYwLCAweDQwNjcsIDB4MDA3OCwKLQkweDQwZTEsIDB4ODJmZiwgMHgwMGMwLCAweDQwOGIsIDB4ZDVkNCwgMHgwMDQwLCAweDQwODUsIDB4YTFhNiwKLQkweDNmZmYsIDB4MDA0MCwgMHg0MDcxLCAweDAwNzgsIDB4NDA4OSwgMHhhMWE2LCAweDNmZmYsIDB4MDA0MCwKLQkweDQwZTEsIDB4YTE4ZCwgMHhjMDAwLCAweDIwYTksIDB4MDAxMCwgMHgyMDE5LCAweDAwMDEsIDB4ZDVkNCwKLQkweDAwNDAsIDB4NDA5NCwgMHgyMDE5LCAweDAwMTAsIDB4MjEyMCwgMHhkNWQ0LCAweDAwNDAsIDB4NDA5YiwKLQkweDg0MjMsIDB4MDA3OCwgMHg0MDljLCAweDg0MjQsIDB4MDBjOCwgMHg0MGE5LCAweGQ1ZDQsIDB4MDA0MCwKLQkweDQwYTQsIDB4ODMxOSwgMHgwMDc4LCAweDQwYTUsIDB4ODMxOCwgMHgwMGYwLCAweDQwOTUsIDB4MDA3OCwKLQkweDQwZTEsIDB4MjNhOCwgMHgyMDIxLCAweDAwMDEsIDB4ODQyNiwgMHg4NDI1LCAweDAwZjAsIDB4NDBhZCwKLQkweDIzMjgsIDB4ODUyOSwgMHhhMmJlLCAweDAwMDcsIDB4MDA0MCwgMHg0MGMxLCAweDAwN2UsIDB4MjAzOSwKLQkweDAwMDcsIDB4MjIwMCwgMHhhNzNhLCAweDAwN2YsIDB4MjdhOCwgMHhhNWE4LCAweDAwMTAsIDB4MDBmMCwKLQkweDQwYmQsIDB4NzU0ZSwgMHhhNWM4LCAweDI5M2YsIDB4MjkyYywgMHhhNWFjLCAweDAwZmYsIDB4NjUzMiwKLQkweDYwZTcsIDB4MDAwMCwgMHg2NWVhLCAweDcwNmIsIDB4MDAwMCwgMHg3NTZlLCAweDIwMTgsIDB4MjMwNCwKLQkweGE0MDUsIDB4MjAxYSwgMHg3MDczLCAweDAwMDEsIDB4MjZhMCwgMHgyODk4LCAweDIwYTksIDB4MDAwOCwKLQkweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwKLQkweDQwZTcsIDB4YTAwNiwgMHgwMDc4LCAweDQwZTcsIDB4YTAwNiwgMHgxMDc4LCAweDEzMjgsIDB4MDk3ZiwKLQkweDA4N2YsIDB4MDA3YywgMHgyMTE4LCAweDIwMjEsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDcsIDB4YTM5YSwKLQkweDAwMTAsIDB4MDA0OCwgMHg0MGY3LCAweDg0MjAsIDB4ODAwMSwgMHgwMDc4LCAweDQwZWYsIDB4MjExOCwKLQkweDg0ZmYsIDB4MDA0MCwgMHg0MTAwLCAweGEzOWEsIDB4MDAxMCwgMHg4NDIxLCAweDAwYzAsIDB4NDBmYiwKLQkweDIwMjEsIDB4MDAwMSwgMHg4M2ZmLCAweDAwNDAsIDB4NDEwOSwgMHg4NDIzLCAweDgzMTksIDB4MDBjMCwKLQkweDQxMDUsIDB4YTIzOCwgMHgyNzA0LCAweGE0MmMsIDB4MDBjMCwgMHg0MTIxLCAweGE0MDUsIDB4MjAzYSwKLQkweDcxNGUsIDB4YTFhMCwgMHgyOTNmLCAweDI0MmMsIDB4YTVhYywgMHgwMGZmLCAweDY1MzIsIDB4NjBlNywKLQkweDAwMDAsIDB4NjVlYSwgMHg3MDZiLCAweDAwMDAsIDB4NzU2ZSwgMHg3MDczLCAweDAwMDEsIDB4YTA4NCwKLQkweDAwMDAsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3MDc3LCAweDAwMDAsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgwZjdlLCAweDIwMDEsIDB4MDAwMiwgMHgxMDc4LCAweDU5NzUsIDB4MjA3OSwKLQkweDAxMDAsIDB4MjA3MSwgMHgwMTQwLCAweDEwNzgsIDB4NmM0MSwgMHg3MDA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NDEzZSwgMHg3MDAzLCAweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhMzIxLCAweDIwNzMsIDB4MDAwMCwgMHg3ODQwLCAweDAyN2UsIDB4MDE3ZSwKLQkweDIwMDksIDB4MDBmNywgMHgxMDc4LCAweDQxZGUsIDB4MDE3ZiwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwKLQkweDAwODAsIDB4Nzg0MiwgMHg3YTQyLCAweDAyN2YsIDB4MTI3ZiwgMHgwZjdmLCAweDBlN2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMTEsIDB4YTViNSwgMHgyMDEzLCAweDAwMDAsIDB4NzA3ZiwKLQkweDAwMDAsIDB4MTI3ZiwgMHgyMGUxLCAweDkwODAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwKLQkweDEwNzgsIDB4NmMzOCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NTk2YywKLQkweDAwN2MsIDB4MDE3ZSwgMHgwMjdlLCAweDBjN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwKLQkweDAwZjcsIDB4MTA3OCwgMHg0MWRlLCAweDIwNjEsIDB4YTViZSwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwKLQkweDAwMDAsIDB4MjA2MSwgMHhhMzAwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDYxLCAweDAxMDAsIDB4NjA0MywKLQkweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDIwMDksIDB4MDAyZCwgMHgyMDExLCAweDQxOTYsIDB4MTA3OCwKLQkweDU4YzcsIDB4MTI3ZiwgMHgwYzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MDAwMSwgMHgxMDc4LCAweDU5NzUsIDB4MjA3MSwKLQkweDAxMDAsIDB4MTA3OCwgMHg2YzQxLCAweDIwNzEsIDB4MDE0MCwgMHg3MDA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NDFhZSwgMHg3MDAzLCAweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDAwMSwKLQkweDEwNzgsIDB4MjQ4MCwgMHgxMDc4LCAweDQxNzEsIDB4MTI3ZiwgMHgwMDdmLCAweDBlN2YsIDB4MDA3YywKLQkweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweGE5YzAsIDB4MjA5OSwgMHhhODhlLCAweDMzMDQsIDB4ODAwNywKLQkweDIwYTIsIDB4OTM5OCwgMHg5NGEwLCAweDAwZjAsIDB4NDFiZSwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHgyMDk5LCAweGE4MDAsIDB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwYywKLQkweDUzYTYsIDB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YTg4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMGMsIDB4NTNhNiwgMHgwMDdjLCAweDBjN2UsIDB4MDA3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg4MTBmLCAweDIwMDEsIDB4YTMyZSwgMHgyMDA0LCAweGEwMDUsIDB4MDBjMCwKLQkweDQxZWYsIDB4NjAzMCwgMHhhMDg0LCAweDAwZmYsIDB4YTEwNSwgMHgwMDc4LCAweDQxZjEsIDB4YTE4NSwKLQkweDAwZjcsIDB4NjA0YSwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywgMHgwMTdlLCAweDA0N2UsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NDIwOCwgMHhhMDA2LCAweDIwMjAsIDB4MjAwOSwKLQkweDAwMmEsIDB4MTA3OCwgMHg5ZWMwLCAweDIwMDEsIDB4YTMwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwKLQkweDIwMTksIDB4MDAyYSwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHgyN2UyLCAweDA0N2YsIDB4MDE3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgyMDAxLCAweGEzMGMsIDB4MjAwNCwgMHhkMDljLCAweDAwNDAsIDB4NDIxOCwKLQkweDAwN2YsIDB4MDA3YywgMHgwMDdlLCAweDAxN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwKLQkweDAxMDEsIDB4MjAwYywgMHhhMThkLCAweDAwMDYsIDB4MjEwMiwgMHgxMjdmLCAweDAxN2YsIDB4MDA3ZiwKLQkweDAwN2MsIDB4MTU3ZSwgMHgyMGE5LCAweDAwZmYsIDB4MjAwOSwgMHhhNDM0LCAweGEwMDYsIDB4MjAwYSwKLQkweDgxMDgsIDB4MDBmMCwgMHg0MjJmLCAweDE1N2YsIDB4MDA3YywgMHgwZDdlLCAweDAzN2UsIDB4MTU3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgyMDY5LCAweGEzNTEsIDB4YTAwNiwgMHg2MDAyLCAweDYwMDcsIDB4MDcwNywKLQkweDYwMGEsIDB4NjAwZSwgMHg2MDEyLCAweGExOTgsIDB4MjkzZiwgMHgyMzFjLCAweGEzOWMsIDB4MDBmZiwKLQkweDYzMTYsIDB4MjBhOSwgMHgwMDA0LCAweGFjOTgsIDB4MDAwNiwgMHgyM2EwLCAweDQwYTQsIDB4MjBhOSwKLQkweDAwMDQsIDB4YWM5OCwgMHgwMDBhLCAweDIzYTAsIDB4NDBhNCwgMHg2MDNlLCAweDYwNDIsIDB4NjA0ZSwKLQkweDYwNTIsIDB4NjA1NiwgMHg2MDVhLCAweDYwNWUsIDB4NjA2MiwgMHg2MDY2LCAweDYwNmEsIDB4NjA2ZSwKLQkweDYwNzIsIDB4NjA3NiwgMHg2MDdhLCAweDYwN2UsIDB4NjA4MiwgMHg2MDg2LCAweDYwOGEsIDB4NjA4ZSwKLQkweDYwOTIsIDB4NjA5NiwgMHg2MDlhLCAweDYwOWUsIDB4NjBhZSwgMHg2MWEyLCAweDBkN2UsIDB4NjBhNCwKLQkweGEwNmQsIDB4MDA0MCwgMHg0Mjc1LCAweDEwNzgsIDB4MTM5YSwgMHg2MGE3LCAweDAwMDAsIDB4NjBhOCwKLQkweGEwNmQsIDB4MDA0MCwgMHg0MjdkLCAweDEwNzgsIDB4MTM5YSwgMHg2MGFiLCAweDAwMDAsIDB4MGQ3ZiwKLQkweGEwMDYsIDB4NjA0YSwgMHg2ODEwLCAweDYwM2EsIDB4NjgwYywgMHg2MDQ2LCAweDY4MTQsIDB4YTA4NCwKLQkweDAwZmYsIDB4NjA0MiwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwgMHgwMzdmLCAweDBkN2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDY5NDQsIDB4NmU0OCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwKLQkweDQwMDAsIDB4MDBjOCwgMHg0MzYxLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDBmZiwKLQkweDAwYzgsIDB4NDM2NywgMHgyMDAxLCAweGEzMGMsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDMsIDB4MDA0MCwKLQkweDQyYzIsIDB4MjAwMSwgMHhhMzBjLCAweDIwMDQsIDB4ZDA4NCwgMHgwMGMwLCAweDQzNDIsIDB4YTE4OCwKLQkweGE0MzQsIDB4MjEwNCwgMHhhMDY1LCAweDAwNDAsIDB4NDM0MiwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOGUsIDB4MDAwNiwgMHgwMGMwLCAweDQzNDIsIDB4NjAwMCwgMHhkMGM0LCAweDAwNDAsIDB4NDM0MiwKLQkweDAwNzgsIDB4NDJjZiwgMHhhMTg4LCAweGE0MzQsIDB4MjEwNCwgMHhhMDY1LCAweDAwNDAsIDB4NDMyNiwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwNiwgMHgwMGMwLCAweDQzMmMsIDB4NjBhNCwKLQkweGEwMGQsIDB4MDA0MCwgMHg0MmQ3LCAweDEwNzgsIDB4NDc0OSwgMHgwMDQwLCAweDQzMjAsIDB4NjBhOCwKLQkweGEwMGQsIDB4MDA0MCwgMHg0MmYxLCAweDEwNzgsIDB4NDc5YSwgMHgwMGMwLCAweDQyZjEsIDB4Njk0YywKLQkweGQxZmMsIDB4MDBjMCwgMHg0MmU3LCAweDEwNzgsIDB4NDQxYywgMHgwMDc4LCAweDQzMWIsIDB4MTA3OCwKLQkweDQzZDYsIDB4Njk0YywgMHhkMWVjLCAweDAwYzAsIDB4NDMxYiwgMHgxMDc4LCAweDQ2MGEsIDB4MDA3OCwKLQkweDQzMWIsIDB4Njk0YywgMHhhMTg0LCAweGEwMDAsIDB4MDA0MCwgMHg0MzBiLCAweGQxZWMsIDB4MDA0MCwKLQkweDQzMDQsIDB4ZDFmYywgMHgwMDQwLCAweDQzMDAsIDB4MTA3OCwgMHg0NjFiLCAweDAwNzgsIDB4NDMwNywKLQkweDEwNzgsIDB4NDYxYiwgMHgwMDc4LCAweDQzMGIsIDB4ZDFmYywgMHgwMDQwLCAweDQzMGIsIDB4MTA3OCwKLQkweDQzZDYsIDB4MDA3OCwgMHg0MzFiLCAweDYwNTAsIDB4YTAwZCwgMHgwMDQwLCAweDQzMTYsIDB4MmQwMCwKLQkweDIwMGEsIDB4NjgwMywgMHgwMDAwLCAweDYwNTIsIDB4MDA3OCwgMHg0MzFiLCAweDJkMDAsIDB4NjA1MiwKLQkweDYwNGUsIDB4NjgwMywgMHgwMDAwLCAweDEwNzgsIDB4NWMxNywgMHhhMDA2LCAweDEyN2YsIDB4MDA3YywKLQkweDIwMDEsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDAsIDB4MDA3OCwgMHg0MzZiLCAweDIwMDEsIDB4MDAyOCwKLQkweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzNmIsIDB4YTA4MiwgMHgwMDA2LCAweDAwYzgsIDB4NDM0MiwKLQkweDYwYTAsIDB4ZDBiYywgMHgwMGMwLCAweDQzM2UsIDB4NjEwMCwgMHhkMWZjLCAweDAwNDAsIDB4NDJjZiwKLQkweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDA3OCwgMHg0MzZiLCAweDIwMDEsIDB4MDAyOCwKLQkweDAwNzgsIDB4NDM1ZCwgMHgyMDA5LCAweGEzMGMsIDB4MjEwYywgMHhkMThjLCAweDAwNDAsIDB4NDM0YywKLQkweDIwMDEsIDB4MDAwNCwgMHgwMDc4LCAweDQzNWQsIDB4ZDE4NCwgMHgwMDQwLCAweDQzNTMsIDB4MjAwMSwKLQkweDAwMDQsIDB4MDA3OCwgMHg0MzVkLCAweDIwMDEsIDB4MDAyOSwgMHg2MTAwLCAweGQxZmMsIDB4MDA0MCwKLQkweDQzNWQsIDB4MjAwOSwgMHgxMDAwLCAweDAwNzgsIDB4NDM2YiwgMHgyMDA5LCAweDAwMDAsIDB4MDA3OCwKLQkweDQzNmIsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzNmIsIDB4MjAwMSwKLQkweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweGEwMDUsIDB4MTI3ZiwgMHgwMDdjLCAweDY5NDQsIDB4NmU0OCwKLQkweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLCAweDQwMDAsIDB4MDBjOCwgMHg0M2JiLCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4MiwgMHgwMGZmLCAweDAwYzgsIDB4NDNhMSwgMHhhMTg4LCAweGE0MzQsIDB4MjEwNCwKLQkweGEwNjUsIDB4MDA0MCwgMHg0M2ExLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwNiwKLQkweDAwYzAsIDB4NDNhNywgMHg2ODRjLCAweGQwZWMsIDB4MDA0MCwgMHg0Mzk0LCAweDEwNzgsIDB4NDYxYiwKLQkweDEwNzgsIDB4NDNkNiwgMHgwMDc4LCAweDQzOWMsIDB4MTA3OCwgMHg0M2Q2LCAweDY4NGMsIDB4ZDBmYywKLQkweDAwNDAsIDB4NDM5YywgMHgxMDc4LCAweDQ2MGEsIDB4MTA3OCwgMHg0NjYzLCAweGEwMDYsIDB4MDA3OCwKLQkweDQzYmYsIDB4MjAwMSwgMHgwMDI4LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDQzYmYsIDB4YTA4MiwKLQkweDAwMDYsIDB4MDBjOCwgMHg0M2I1LCAweDYxMDAsIDB4ZDFmYywgMHgwMDQwLCAweDQzOGEsIDB4MjAwMSwKLQkweDAwMjksIDB4MjAwOSwgMHgxMDAwLCAweDAwNzgsIDB4NDNiZiwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwKLQkweDAwMDAsIDB4MDA3OCwgMHg0M2JmLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDAwMDAsIDB4YTAwNSwKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjA1MCwgMHhhMDBkLCAweDAwNDAsIDB4NDNjZiwKLQkweDJkMDAsIDB4MjAwYSwgMHg2ODAzLCAweDAwMDAsIDB4NjA1MiwgMHgxMjdmLCAweDAwN2MsIDB4MmQwMCwKLQkweDYwNTIsIDB4NjA0ZSwgMHg2ODAzLCAweDAwMDAsIDB4MDA3OCwgMHg0M2NkLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjA0YywgMHhhMDA1LCAweDAwNDAsIDB4NDNlYywgMHgwZTdlLCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMDQsIDB4YTA4NiwgMHgwMDAyLCAweDAwNDAsIDB4NDNmMywgMHgwZTdmLCAweDYwNGMsIDB4NjgwMiwKLQkweDJkMDAsIDB4NjA0ZSwgMHgxMjdmLCAweDAwN2MsIDB4MmQwMCwgMHg2MDUyLCAweDYwNGUsIDB4NjgwMywKLQkweDAwMDAsIDB4MDA3OCwgMHg0M2VhLCAweDcwMWMsIDB4YWMwNiwgMHgwMGMwLCAweDQzZTUsIDB4NjA0YywKLQkweDIwNzAsIDB4NzAwMCwgMHg2ODAyLCAweDJkMDAsIDB4NzAwMiwgMHgwZTdmLCAweDEyN2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwNGMsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0MGUsIDB4NjgwMCwKLQkweGEwMDUsIDB4MDBjMCwgMHg0NDBjLCAweDYwNTIsIDB4NjA0ZSwgMHhhZDA1LCAweDEyN2YsIDB4MDA3YywKLQkweDYwNGMsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0MWIsIDB4NjgwMCwgMHhhMDA1LCAweDAwYzAsIDB4NDQxOSwKLQkweDYwNTIsIDB4NjA0ZSwgMHhhZDA1LCAweDAwN2MsIDB4NjgwMywgMHgwMDAwLCAweDYwODQsIDB4YTAwZCwKLQkweDAwNDAsIDB4NDQyNiwgMHgyZDAwLCAweDIwMGEsIDB4NjA4NiwgMHgwMDdjLCAweDJkMDAsIDB4NjA4NiwKLQkweDYwODIsIDB4MDA3OCwgMHg0NDI1LCAweDEyN2UsIDB4MGM3ZSwgMHgwMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDYyMTgsIDB4MjI2MCwgMHg2MjAwLCAweGEwMDUsIDB4MDA0MCwgMHg0NDM5LCAweGMyODUsIDB4MDA3OCwKLQkweDQ0M2EsIDB4YzI4NCwgMHg2MjAyLCAweDAyN2YsIDB4MGM3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwKLQkweDBjN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTgsIDB4MjI2MCwgMHg2MjA0LCAweDAwN2UsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg0NDVlLCAweDYwOWMsIDB4ZDBhYywgMHgwMDQwLCAweDQ0NWUsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NDQ1ZSwgMHhhMjg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwNywgMHgwMGMwLCAweDQ0NWUsIDB4MjAxMSwgMHgwNjAwLCAweDAwN2YsIDB4YTI5NCwKLQkweGZmMDAsIDB4YTIxNSwgMHg2MjA2LCAweDAwN2UsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4NDQ2ZSwKLQkweDYyOTAsIDB4ODJmZiwgMHgwMGMwLCAweDQ0NmUsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2YsIDB4MGM3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDBjN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTgsIDB4MjI2MCwKLQkweDYyMDQsIDB4MDA3ZSwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0NDkwLCAweDYwOWMsIDB4ZDBhNCwKLQkweDAwNDAsIDB4NDQ5MCwgMHgyMDAxLCAweGEzNTIsIDB4MjAwNCwgMHhkMGFjLCAweDAwYzAsIDB4NDQ5MCwKLQkweGEyODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDcsIDB4MDBjMCwgMHg0NDkwLCAweDIwMTEsIDB4MDAwNiwKLQkweDAwN2YsIDB4YTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4YTIxNSwgMHg2MjA2LCAweDBjN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MDI3ZSwgMHhhMTgyLCAweDAwZmYsIDB4MDA0OCwgMHg0NGEyLCAweGEwODUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NDRiYSwgMHhhMTkwLCAweGE0MzQsIDB4MjIwNCwgMHhhMDY1LCAweDAwYzAsIDB4NDRiOSwKLQkweDAxN2UsIDB4MGQ3ZSwgMHgxMDc4LCAweDEzNjYsIDB4MmQ2MCwgMHgwZDdmLCAweDAxN2YsIDB4MDA0MCwKLQkweDQ0OWUsIDB4MmMwMCwgMHgyMDEyLCAweDYwYTcsIDB4MDAwMCwgMHg2MGFiLCAweDAwMDAsIDB4MTA3OCwKLQkweDQyMzUsIDB4YTAwNiwgMHgwMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDI3ZSwKLQkweGExODIsIDB4MDBmZiwgMHgwMDQ4LCAweDQ0YzgsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4NDRmZSwKLQkweDBkN2UsIDB4YTE5MCwgMHhhNDM0LCAweDIyMDQsIDB4YTA2ZCwgMHgwMDQwLCAweDQ0ZmMsIDB4MjAxMywKLQkweDAwMDAsIDB4MGQ3ZSwgMHgwYzdlLCAweDJkNjAsIDB4NjBhNCwgMHhhMDZkLCAweDAwNDAsIDB4NDRkYSwKLQkweDEwNzgsIDB4MTM5YSwgMHg2MGE4LCAweGEwNmQsIDB4MDA0MCwgMHg0NGUwLCAweDEwNzgsIDB4MTM5YSwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgwZDdlLCAweDBjN2UsIDB4NjhhYywgMHgyMDYwLCAweDhjZmYsIDB4MDA0MCwKLQkweDQ0ZjgsIDB4NjAwYywgMHgwMDdlLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwKLQkweDQ0ZjMsIDB4MTA3OCwgMHgxM2FhLCAweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDAwNzgsIDB4NDRlNiwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgxMDc4LCAweDEzOWEsIDB4MGQ3ZiwgMHhhMDA2LCAweDAyN2YsIDB4MTI3ZiwKLQkweDAwN2MsIDB4MDE3ZSwgMHhhMTgyLCAweDAwZmYsIDB4MDA0OCwgMHg0NTBhLCAweGEwODUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NDUxMSwgMHhhMTg4LCAweGE0MzQsIDB4MjEwNCwgMHhhMDY1LCAweDAwNDAsIDB4NDUwNiwKLQkweGEwMDYsIDB4MDE3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4NjAwYiwKLQkweDAwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDYwMDAsIDB4YzA4YywgMHg2MDAyLCAweDIwNjksIDB4YTg4ZSwKLQkweDY4MDgsIDB4NjA1ZSwgMHg2ODEwLCAweDYwNjIsIDB4NjEzOCwgMHhhMTBhLCAweDAwNDgsIDB4NDUyOSwKLQkweDYwM2EsIDB4NjgxNCwgMHg2MDY2LCAweDIwOTksIDB4YTg5NiwgMHhhYzg4LCAweDAwMGEsIDB4MjFhMCwKLQkweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDIwOTksIDB4YTg5YSwgMHhhYzg4LCAweDAwMDYsIDB4MjFhMCwKLQkweDIwYTksIDB4MDAwNCwgMHg1M2EzLCAweDIwNjksIDB4YThhZSwgMHg2ODA4LCAweDYwNmEsIDB4NjkwYywKLQkweDYxNmUsIDB4NjgxMCwgMHg2MDcyLCAweDY4MTgsIDB4NjA3NiwgMHhhMTgyLCAweDAyMTEsIDB4MDBjOCwKLQkweDQ1NGQsIDB4MjAwOSwgMHgwMDA4LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDAyNTksIDB4MDBjOCwKLQkweDQ1NTUsIDB4MjAwOSwgMHgwMDA3LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDAyYzEsIDB4MDBjOCwKLQkweDQ1NWQsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDAzNDksIDB4MDBjOCwKLQkweDQ1NjUsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDA0MjEsIDB4MDBjOCwKLQkweDQ1NmQsIDB4MjAwOSwgMHgwMDA0LCAweDAwNzgsIDB4NDU3NywgMHhhMTgyLCAweDA1ODEsIDB4MDBjOCwKLQkweDQ1NzUsIDB4MjAwOSwgMHgwMDAzLCAweDAwNzgsIDB4NDU3NywgMHgyMDA5LCAweDAwMDIsIDB4NjE5MiwKLQkweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweDBkN2YsIDB4MDA3YywgMHgwMTdlLCAweDAyN2UsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTg4ZCwgMHgyZTA0LCAweDY4OTYsIDB4MjA3MSwgMHhhODhlLCAweDcwMDQsIDB4Njg5YSwKLQkweDcwMWMsIDB4Njg5ZSwgMHg2YTAwLCAweDIwMDksIDB4YTM3MSwgMHgyMTBjLCAweGQwYmMsIDB4MDA0MCwKLQkweDQ1OTcsIDB4ZDFlYywgMHgwMDQwLCAweDQ1OTcsIDB4YzJhZCwgMHgwMDc4LCAweDQ1OTgsIDB4YzJhYywKLQkweGQwYzQsIDB4MDA0MCwgMHg0NWExLCAweGQxZTQsIDB4MDA0MCwgMHg0NWExLCAweGMyYmQsIDB4MDA3OCwKLQkweDQ1YTIsIDB4YzJiYywgMHg2YTAyLCAweDBlN2YsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwgMHgwMDQwLCAweDQ1Y2IsIDB4NjkwMCwKLQkweDgxZmYsIDB4MDBjMCwgMHg0NWRmLCAweDZhMDQsIDB4YTI4MiwgMHgwMDEwLCAweDAwYzgsIDB4NDVlNCwKLQkweGFkODgsIDB4MDAwNCwgMHgyMGE5LCAweDAwMTAsIDB4MjEwNCwgMHhhMDg2LCAweGZmZmYsIDB4MDA0MCwKLQkweDQ1YzYsIDB4ODEwOCwgMHgwMGYwLCAweDQ1YmMsIDB4MTA3OCwgMHgxMzI4LCAweDI2MGEsIDB4ODIxMCwKLQkweDZhMDYsIDB4MDA3OCwgMHg0NWRmLCAweDEwNzgsIDB4MTM4MSwgMHgwMDQwLCAweDQ1ZTQsIDB4MmQwMCwKLQkweDYwYTYsIDB4NjgwMywgMHgwMDAwLCAweGFkODgsIDB4MDAwNCwgMHgyMGE5LCAweDAwMTAsIDB4MjAwYiwKLQkweGZmZmYsIDB4ODEwOCwgMHgwMGYwLCAweDQ1ZDcsIDB4NjgwNywgMHgwMDAxLCAweDZlMTIsIDB4YTA4NSwKLQkweDAwMDEsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDQ1ZTEsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgwZDdlLCAweDYwYTQsIDB4YTAwZCwgMHgwMDQwLCAweDQ2MDcsIDB4MjE2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgwMGMwLCAweDQ2MDMsIDB4MTA3OCwgMHg0NzQ5LCAweDAwYzAsIDB4NDYwNywKLQkweDIwMGIsIDB4ZmZmZiwgMHg2ODA0LCAweGEwOGEsIDB4MDAwMiwgMHgwMDQ4LCAweDQ2MDMsIDB4ODAwMSwKLQkweDY4MDYsIDB4MDA3OCwgMHg0NjA3LCAweDEwNzgsIDB4MTM5YSwgMHg2MGE3LCAweDAwMDAsIDB4MGQ3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ3YWYsIDB4MDA3OCwKLQkweDQ2MTMsIDB4MTA3OCwgMHg0M2MxLCAweDEwNzgsIDB4NDZhNywgMHgwMGMwLCAweDQ2MTEsIDB4MTA3OCwKLQkweDQ2NjMsIDB4MTI3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjBhOCwKLQkweGEwNmQsIDB4MDA0MCwgMHg0NjNmLCAweDY5NTAsIDB4ODFmZiwgMHgwMGMwLCAweDQ2NTMsIDB4NmE1NCwKLQkweGEyODIsIDB4MDAxMCwgMHgwMGM4LCAweDQ2NjAsIDB4YWQ4OCwgMHgwMDE4LCAweDIwYTksIDB4MDAxMCwKLQkweDIxMDQsIDB4YTA4NiwgMHhmZmZmLCAweDAwNDAsIDB4NDYzYSwgMHg4MTA4LCAweDAwZjAsIDB4NDYzMCwKLQkweDEwNzgsIDB4MTMyOCwgMHgyNjBhLCAweDgyMTAsIDB4NmE1NiwgMHgwMDc4LCAweDQ2NTMsIDB4MTA3OCwKLQkweDEzODEsIDB4MDA0MCwgMHg0NjYwLCAweDJkMDAsIDB4NjBhYSwgMHg2ODUzLCAweDAwMDAsIDB4YWQ4OCwKLQkweDAwMTgsIDB4MjBhOSwgMHgwMDEwLCAweDIwMGIsIDB4ZmZmZiwgMHg4MTA4LCAweDAwZjAsIDB4NDY0YiwKLQkweDY4NTcsIDB4MDAwMSwgMHg2ZTYyLCAweDAwNzgsIDB4NDY1NywgMHgxMDc4LCAweDQ0MWMsIDB4MTA3OCwKLQkweDQ2NmQsIDB4MDBjMCwgMHg0NjU1LCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDBkN2YsIDB4MDA3YywKLQkweGEwMDYsIDB4MDA3OCwgMHg0NjVkLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NWMxNywKLQkweDEyN2YsIDB4MDA3YywgMHhhMDFlLCAweDAwNzgsIDB4NDY2ZiwgMHgyMDE5LCAweDAwMDEsIDB4YTAwZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwNGMsIDB4MjA2OCwgMHg2MDAwLCAweGQwZGMsIDB4MDBjMCwKLQkweDQ2OGQsIDB4OGRmZiwgMHgwMDQwLCAweDQ2YTIsIDB4ODNmZiwgMHgwMDQwLCAweDQ2ODUsIDB4Njg0OCwKLQkweGE2MDYsIDB4MDA0MCwgMHg0NjkyLCAweDAwNzgsIDB4NDY4ZCwgMHg2ODNjLCAweGE0MDYsIDB4MDBjMCwKLQkweDQ2OGQsIDB4Njg0MCwgMHhhNTA2LCAweDAwNDAsIDB4NDY5MiwgMHgyZDA4LCAweDY4MDAsIDB4MjA2OCwKLQkweDAwNzgsIDB4NDY3OSwgMHg2YTAwLCAweDYwNGMsIDB4YWQwNiwgMHgwMGMwLCAweDQ2OWEsIDB4NjI0ZSwKLQkweDAwNzgsIDB4NDY5ZCwgMHhhMTgwLCAweDAwMDAsIDB4MjIwMiwgMHg4MmZmLCAweDAwYzAsIDB4NDZhMiwKLQkweDYxNTIsIDB4OGRmZiwgMHgxMjdmLCAweDAwN2MsIDB4YTAxZSwgMHgwMDc4LCAweDQ2YTksIDB4MjAxOSwKLQkweDAwMDEsIDB4YTAwZSwgMHg2MDgwLCAweDIwNjgsIDB4OGRmZiwgMHgwMDQwLCAweDQ2ZDUsIDB4ODNmZiwKLQkweDAwNDAsIDB4NDZiOCwgMHg2ODQ4LCAweGE2MDYsIDB4MDA0MCwgMHg0NmM1LCAweDAwNzgsIDB4NDZjMCwKLQkweDY4M2MsIDB4YTQwNiwgMHgwMGMwLCAweDQ2YzAsIDB4Njg0MCwgMHhhNTA2LCAweDAwNDAsIDB4NDZjNSwKLQkweDJkMDgsIDB4NjgwMCwgMHgyMDY4LCAweDAwNzgsIDB4NDZhYywgMHg2YTAwLCAweDYwODAsIDB4YWQwNiwKLQkweDAwYzAsIDB4NDZjZCwgMHg2MjgyLCAweDAwNzgsIDB4NDZkMCwgMHhhMTgwLCAweDAwMDAsIDB4MjIwMiwKLQkweDgyZmYsIDB4MDBjMCwgMHg0NmQ1LCAweDYxODYsIDB4OGRmZiwgMHgwMDdjLCAweGEwMTYsIDB4MTA3OCwKLQkweDQ3NDIsIDB4MDBjMCwgMHg0NmRkLCAweDIwMTEsIDB4MDAwMSwgMHgxMDc4LCAweDQ3OTMsIDB4MDBjMCwKLQkweDQ2ZTMsIDB4YTI5NSwgMHgwMDAyLCAweDAwN2MsIDB4MTA3OCwgMHg0N2NiLCAweDAwNDAsIDB4NDZlYywKLQkweDEwNzgsIDB4OGIxMiwgMHgwMDc4LCAweDQ2ZWUsIDB4YTA4NSwgMHgwMDAxLCAweDAwN2MsIDB4MTA3OCwKLQkweDQ3Y2IsIDB4MDA0MCwgMHg0NmY3LCAweDEwNzgsIDB4OGFhYSwgMHgwMDc4LCAweDQ2ZjksIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3YywgMHgxMDc4LCAweDQ3Y2IsIDB4MDA0MCwgMHg0NzAyLCAweDEwNzgsIDB4OGFmNCwKLQkweDAwNzgsIDB4NDcwNCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgxMDc4LCAweDQ3Y2IsIDB4MDA0MCwKLQkweDQ3MGQsIDB4MTA3OCwgMHg4YWM2LCAweDAwNzgsIDB4NDcwZiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDEwNzgsIDB4NDdjYiwgMHgwMDQwLCAweDQ3MTgsIDB4MTA3OCwgMHg4YjMwLCAweDAwNzgsIDB4NDcxYSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDEyN2UsIDB4MDA3ZSwgMHgwZDdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDYwODAsIDB4YTA2ZCwgMHgwMDQwLCAweDQ3M2EsIDB4NjgwMCwgMHgwMDdlLCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4OGNiOCwgMHgwMDdlLCAweDYwMDAsIDB4ZDBmYywKLQkweDAwNDAsIDB4NDczNCwgMHgxMDc4LCAweGExOGMsIDB4MDA3ZiwgMHgxMDc4LCAweDQ5ODIsIDB4MDA3ZiwKLQkweDAwNzgsIDB4NDcyMSwgMHg2MDgzLCAweDAwMDAsIDB4NjA4NywgMHgwMDAwLCAweDBkN2YsIDB4MDA3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHg2MGE0LCAweGEwMGQsIDB4MDBjMCwgMHg0NzQ5LCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMTcwLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDQ3NWMsIDB4MjBhOSwKLQkweDAwMTAsIDB4YWU4OCwgMHgwMDA0LCAweDIxMDQsIDB4YTYwNiwgMHgwMDQwLCAweDQ3NWMsIDB4ODEwOCwKLQkweDAwZjAsIDB4NDc1MywgMHhhMDg1LCAweDAwMDEsIDB4YTAwNiwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwgMHgwMGMwLCAweDQ3NmQsIDB4MTA3OCwKLQkweDEzODEsIDB4MDA0MCwgMHg0NzdmLCAweDJkMDAsIDB4NjBhNiwgMHg2ODAzLCAweDAwMDEsIDB4NjgwNywKLQkweDAwMDAsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwgMHgyMDBiLCAweGZmZmYsIDB4ODEwOCwKLQkweDAwZjAsIDB4NDc3NSwgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4YTAwNiwKLQkweDAwNzgsIDB4NDc3YywgMHgwZDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTQsIDB4YTA2ZCwKLQkweDAwNDAsIDB4NDc5MCwgMHg2MGE3LCAweDAwMDAsIDB4MTA3OCwgMHgxMzlhLCAweGEwODUsIDB4MDAwMSwKLQkweDEyN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDYwYTgsIDB4YTAwZCwgMHgwMGMwLCAweDQ3OWEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3YywgMHgwZTdlLCAweDIxNzAsIDB4NzA1MCwgMHhhMDA1LCAweDAwYzAsIDB4NDdhZCwKLQkweDIwYTksIDB4MDAxMCwgMHhhZTg4LCAweDAwMTgsIDB4MjEwNCwgMHhhNjA2LCAweDAwNDAsIDB4NDdhZCwKLQkweDgxMDgsIDB4MDBmMCwgMHg0N2E0LCAweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDAwN2MsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ3OTMsIDB4MDBjMCwgMHg0N2M5LCAweDIwMGIsIDB4ZmZmZiwKLQkweDBkN2UsIDB4NjBhOCwgMHgyMDY4LCAweDY4NTQsIDB4YTA4YSwgMHgwMDAyLCAweDAwNDgsIDB4NDdjNCwKLQkweDgwMDEsIDB4Njg1NiwgMHgwMDc4LCAweDQ3YzgsIDB4MTA3OCwgMHgxMzlhLCAweDYwYWIsIDB4MDAwMCwKLQkweDBkN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDYwOWMsIDB4ZDBhNCwgMHgwMDdjLCAweDBmN2UsIDB4NzFhYywKLQkweDgxZmYsIDB4MDBjMCwgMHg0N2U5LCAweDcxYzgsIDB4ZDE5YywgMHgwMDQwLCAweDQ3ZTksIDB4MjAwMSwKLQkweDAwN2UsIDB4YTA4MCwgMHhhNDM0LCAweDIwMDQsIDB4YTA3ZCwgMHgwMDQwLCAweDQ3ZTksIDB4NzgwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0N2U5LCAweDc4MDAsIDB4YzBlZCwKLQkweDc4MDIsIDB4MjA3OSwgMHhhMzUxLCAweDc4MDQsIDB4ZDBhNCwgMHgwMDQwLCAweDQ4MGYsIDB4MTU3ZSwKLQkweDBjN2UsIDB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwgMHgwMTdlLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4NDgwOSwgMHg2MDA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwOTYsIDB4MDAwNCwKLQkweDAwNDAsIDB4NDgwNiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg0ODA5LCAweDYwMDAsIDB4YzBlZCwKLQkweDYwMDIsIDB4MDE3ZiwgMHg4MTA4LCAweDAwZjAsIDB4NDdmNSwgMHgwYzdmLCAweDE1N2YsIDB4MTA3OCwKLQkweDQ4OTcsIDB4MDA0MCwgMHg0ODE4LCAweDIwMDEsIDB4YTU5ZiwgMHgyMDBjLCAweDAwNzgsIDB4NDgyMCwKLQkweDIwNzksIDB4YTM1MSwgMHg3ODA0LCAweGQwYTQsIDB4MDA0MCwgMHg0ODI0LCAweDIwMDksIDB4MDdkMCwKLQkweDIwMTEsIDB4NDgyNiwgMHgxMDc4LCAweDU5NmMsIDB4MGY3ZiwgMHgwMDdjLCAweDIwMTEsIDB4NDgyNiwKLQkweDEwNzgsIDB4NThkNCwgMHgxMDc4LCAweDQ4OTcsIDB4MDA0MCwgMHg0ODRlLCAweDIwMDEsIDB4YTRiMiwKLQkweDIwMDQsIDB4YTA4MCwgMHgwMDAwLCAweDIwMGMsIDB4YzFlYywgMHgyMTAyLCAweDIwMDEsIDB4YTM1MiwKLQkweDIwMDQsIDB4ZDBhNCwgMHgwMDQwLCAweDQ4NDIsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDgyNiwKLQkweDEwNzgsIDB4NTk2YywgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwgMHg3MDZiLCAweDAwMDAsIDB4NzA2ZiwKLQkweDAwMDAsIDB4MTA3OCwgMHgyNjBkLCAweDBlN2YsIDB4MDA3OCwgMHg0ODg2LCAweDE1N2UsIDB4MGM3ZSwKLQkweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDE3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwKLQkweDQ4ODAsIDB4NjAwMCwgMHhkMGVjLCAweDAwNDAsIDB4NDg4MCwgMHgwNDdlLCAweDYyYTAsIDB4YTI5NCwKLQkweDAwZmYsIDB4ODIyNywgMHhhMDA2LCAweDIwMDksIDB4MDAyOSwgMHgxMDc4LCAweDllYzAsIDB4NjAwMCwKLQkweGMwZTUsIDB4YzBlYywgMHg2MDAyLCAweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODUsIDB4MDcwMCwKLQkweDYwMDYsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4NWQ1MywgMHgwNzdlLCAweDIwMzksIDB4MDAwMCwKLQkweDEwNzgsIDB4NWM3OCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MDQ3ZiwKLQkweDAxN2YsIDB4ODEwOCwgMHgwMGYwLCAweDQ4NTQsIDB4MGM3ZiwgMHgxNTdmLCAweDAwN2MsIDB4MGM3ZSwKLQkweDYwMTgsIDB4MjA2MCwgMHg2MDAwLCAweGMwZWMsIDB4NjAwMiwgMHgwYzdmLCAweDAwN2MsIDB4NzgxOCwKLQkweDIwMDQsIDB4ZDBhYywgMHgwMDdjLCAweDc4MTgsIDB4MjAwNCwgMHhkMGJjLCAweDAwN2MsIDB4MGY3ZSwKLQkweDIwMDEsIDB4YTRiMiwgMHgyMDA0LCAweGEwN2QsIDB4MDA0MCwgMHg0OGEwLCAweDc4MDAsIDB4ZDBlYywKLQkweDBmN2YsIDB4MDA3YywgMHgxMjdlLCAweDAyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyMDAsIDB4YTAwNSwKLQkweDAwNDAsIDB4NDhhZCwgMHhjMmZkLCAweDAwNzgsIDB4NDhhZSwgMHhjMmZjLCAweDYyMDIsIDB4MDI3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDcxLCAweGE0MTMsIDB4NzAwMywgMHgwMDAxLCAweDcwMDcsIDB4MDAwMCwKLQkweDcwMTMsIDB4MDAwMCwgMHg3MDE3LCAweDAwMDAsIDB4NzAxYiwgMHgwMDAwLCAweDcwMWYsIDB4MDAwMCwKLQkweDcwMGIsIDB4MDAwMCwgMHg3MDRiLCAweDAwMDEsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNWIsIDB4MDAyMCwKLQkweDcwNWYsIDB4MDA0MCwgMHg3MDdmLCAweDAwMDAsIDB4MjA3MSwgMHhhNTdjLCAweDcwMDMsIDB4YTQxMywKLQkweDcwMDcsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4NzAwZiwgMHhhNTVjLCAweDcwMTMsIDB4MDAyMCwKLQkweDcwMTcsIDB4MDA0MCwgMHg3MDM3LCAweDAwMDAsIDB4MDA3YywgMHgwMTdlLCAweDBlN2UsIDB4MjA3MSwKLQkweGE1MzQsIDB4YTAwZSwgMHg3MTg2LCAweDcxOGEsIDB4NzA5NywgMHgwMDAxLCAweDIwMDEsIDB4YTM1MiwKLQkweDIwMDQsIDB4ZDBmYywgMHgwMGMwLCAweDQ4ZjcsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4YTAwZSwKLQkweGQwOWMsIDB4MDA0MCwgMHg0OGY0LCAweDgxMDgsIDB4NzEwMiwgMHgwMDc4LCAweDQ5NGEsIDB4MjAwMSwKLQkweGEzNzEsIDB4MjAwYywgMHhhMTg0LCAweDAwMGYsIDB4MjAwOSwgMHhhMzcyLCAweDIxMGMsIDB4MDA3OSwKLQkweDQ5MDEsIDB4NDhlYywgMHg0OTIyLCAweDQ5MmEsIDB4NDkzNSwgMHg0OTNiLCAweDQ4ZWMsIDB4NDhlYywKLQkweDQ4ZWMsIDB4NDkxMSwgMHg0OGVjLCAweDQ4ZWMsIDB4NDhlYywgMHg0OGVjLCAweDQ4ZWMsIDB4NDhlYywKLQkweDQ4ZWMsIDB4NzAwMywgMHgwMDA0LCAweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDIwOTksIDB4YTM3NSwKLQkweDIwYTEsIDB4YTU4NSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgxNTdmLCAweDE0N2YsIDB4MTM3ZiwKLQkweDAwNzgsIDB4NDk0YSwgMHg3MDhmLCAweDAwMDUsIDB4NzAwNywgMHgwMTIyLCAweDIwMDEsIDB4MDAwMiwKLQkweDAwNzgsIDB4NDkzMCwgMHg3MDhmLCAweDAwMDIsIDB4NzAwNywgMHgwMTIxLCAweDIwMDEsIDB4MDAwMywKLQkweDcwMDIsIDB4NzA5NywgMHgwMDAxLCAweDAwNzgsIDB4NDk0NywgMHg3MDA3LCAweDAxMjIsIDB4MjAwMSwKLQkweDAwMDIsIDB4MDA3OCwgMHg0OTNmLCAweDcwMDcsIDB4MDEyMSwgMHgyMDAxLCAweDAwMDMsIDB4NzAwMiwKLQkweGEwMDYsIDB4NzA5NiwgMHg3MDhlLCAweGExODQsIDB4ZmYwMCwgMHg4MDA3LCAweDcwOWEsIDB4YTE4NCwKLQkweDAwZmYsIDB4NzA5MiwgMHgwZTdmLCAweDAxN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTQxMywKLQkweDY4NGMsIDB4YTAwNSwgMHgwMGMwLCAweDQ5NWIsIDB4NzAyOCwgMHhjMDg1LCAweDcwMmEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg0OTgwLCAweDZhNjAsIDB4NzIzNiwgMHg2YjY0LCAweDczM2EsIDB4Njg2OCwKLQkweDcwM2UsIDB4NzA3NiwgMHg2ODZjLCAweDcwNDIsIDB4NzA3YSwgMHg2ODRjLCAweDcwMmUsIDB4Njg0NCwKLQkweDcwMzIsIDB4MjAwOSwgMHgwMDBkLCAweDIwMGEsIDB4NzAwYiwgMHgwMDAwLCAweDgwMDcsIDB4ODAwNiwKLQkweDgwMDYsIDB4YTA4YywgMHgwMDNmLCAweGEwODQsIDB4ZmZjMCwgMHhhMjEwLCAweDIxMDAsIDB4YTMxOSwKLQkweDcyNmUsIDB4NzM3MiwgMHg3MDI4LCAweGMwODQsIDB4NzAyYSwgMHg3MDA3LCAweDAwMDEsIDB4YTAwNiwKLQkweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDAyN2UsIDB4NjgzOCwgMHhkMGZjLCAweDAwYzAsIDB4NDlkOCwKLQkweDY4MDQsIDB4YTAwZCwgMHgwMDQwLCAweDQ5OWUsIDB4MGQ3ZSwgMHgyMDcxLCAweGEzMDAsIDB4YTAxNiwKLQkweDcwMmMsIDB4MjE2OCwgMHg2OTA0LCAweDIwNmEsIDB4ODIxMCwgMHgyZDAwLCAweDgxZmYsIDB4MDBjMCwKLQkweDQ5OTEsIDB4NzAyZSwgMHg3MGE4LCAweGEyMDAsIDB4NzBhYSwgMHgwZDdmLCAweDIwNzEsIDB4YTQxMywKLQkweDcwMWMsIDB4YTAwNSwgMHgwMGMwLCAweDQ5ZWEsIDB4MDA2OCwgMHg0OWU4LCAweDIwNzEsIDB4YTUzNCwKLQkweDcyMDAsIDB4ODJmZiwgMHgwMDQwLCAweDQ5ZTgsIDB4NjkzNCwgMHhhMTg2LCAweDAxMDMsIDB4MDBjMCwKLQkweDQ5ZmIsIDB4Njk0OCwgMHg2ODQ0LCAweGExMDUsIDB4MDBjMCwgMHg0OWRiLCAweDIwMDksIDB4ODAyMCwKLQkweDIyMDAsIDB4MDA3OSwgMHg0OWJiLCAweDQ5ZTgsIDB4NDljMCwgMHg0YTE4LCAweDRhMjYsIDB4NDllOCwKLQkweDIwNzEsIDB4MDAwMCwgMHg3MDE4LCAweGQwODQsIDB4MDBjMCwgMHg0OWU4LCAweDcxMjIsIDB4NjgzYywKLQkweDcwMjYsIDB4Njg0MCwgMHg3MDJhLCAweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MjA3MSwKLQkweGEzMDAsIDB4NzAyYywgMHgyMDZhLCAweDJkMDAsIDB4NzAyZSwgMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwKLQkweDAyN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDY4NDQsIDB4YTA4NiwgMHgwMTAwLCAweDAwYzAsIDB4NDllOCwKLQkweDY4NjgsIDB4YTAwNSwgMHgwMGMwLCAweDQ5ZTgsIDB4MjAwOSwgMHg4MDIwLCAweDAwNzgsIDB4NDliOCwKLQkweDIwNzEsIDB4YTQxMywgMHgyZDA4LCAweDIwNmIsIDB4MDAwMCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwKLQkweDcwMTgsIDB4YTA2ZCwgMHg3MTFhLCAweDAwNDAsIDB4NDlmOCwgMHg2OTAyLCAweDAwNzgsIDB4NDlmOSwKLQkweDcxMWUsIDB4MDA3OCwgMHg0OWQ4LCAweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMTcsIDB4MDA0MCwKLQkweDRhMDksIDB4YTE4NiwgMHgwMDFlLCAweDAwNDAsIDB4NGEwOSwgMHhhMThlLCAweDAwMWYsIDB4MDBjMCwKLQkweDQ5ZTgsIDB4Njg0YywgMHhkMGNjLCAweDAwNDAsIDB4NDllOCwgMHg2ODUwLCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDQ5ZTgsIDB4MjAwOSwgMHg4MDIxLCAweDAwNzgsIDB4NDliOCwKLQkweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMWUsIDB4MDBjOCwgMHg0OWU4LCAweDcxODYsIDB4YWU5MCwKLQkweDAwMDMsIDB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4MDA3OCwgMHg0YTM2LCAweDcwODQsIDB4ODAwOCwKLQkweGEwOTIsIDB4MDAwZiwgMHgwMGM4LCAweDQ5ZTgsIDB4NzE4NiwgMHhhZTkwLCAweDAwMDMsIDB4ODAwMywKLQkweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwgMHgyMDEyLCAweDcwODgsIDB4YTEwYSwKLQkweDAwNDgsIDB4NDljZiwgMHg3MThjLCAweDcwODQsIDB4YTEwYSwgMHgwMDQ4LCAweDQ5Y2YsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDAwYzAsIDB4NDljZiwgMHgyMDcxLCAweGE1MzQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMiwgMHgwMGMwLCAweDRhNTYsIDB4MTA3OCwgMHg0Y2QyLCAweDIwNzEsIDB4MDAwMCwKLQkweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDA3OCwgMHg0OWNmLCAweDEwNzgsIDB4NGNmZCwKLQkweDIwNzEsIDB4MDAwMCwgMHg3MDFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDAwNzgsIDB4NDljZiwKLQkweDAwN2UsIDB4Njg0YywgMHgwMDdlLCAweDY4MzcsIDB4MDEwMywgMHgyMGE5LCAweDAwMWMsIDB4YWQ4MCwKLQkweDAwMTEsIDB4MjBhMCwgMHgyMDAxLCAweDAwMDAsIDB4NDBhNCwgMHgwMDdmLCAweGEwODQsIDB4MDBmZiwKLQkweDY4NGUsIDB4MDA3ZiwgMHg2ODRhLCAweDY5NTIsIDB4MDA3YywgMHgyMDcxLCAweGE0MTMsIDB4NzAwNCwKLQkweDAwNzksIDB4NGE3YSwgMHg0YTg0LCAweDRhOTUsIDB4NGNhMywgMHg0Y2E0LCAweDRjY2IsIDB4NGNkMSwKLQkweDRhODUsIDB4NGM5MSwgMHg0YzMyLCAweDRjYjQsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDAwNjgsIDB4NGE5NCwgMHgyMDA5LCAweDAwMGQsIDB4NzAzMCwgMHgyMDBhLCAweDIwOTEsIDB4NDA4MCwKLQkweDcwMDcsIDB4MDAwMSwgMHg3MDBiLCAweDAwMDAsIDB4MTI3ZiwgMHgyMDY5LCAweGE1YmUsIDB4Njg0NCwKLQkweGEwMDUsIDB4MDA1MCwgMHg0YWJkLCAweDAwYzAsIDB4NGFiZCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjksIDB4MDAwMCwgMHg2OTM0LCAweDIwMDEsIDB4YTQxZiwgMHgyMDA0LCAweGExMGEsIDB4MDA0MCwKLQkweDRhYjgsIDB4MDA2OCwgMHg0YWJjLCAweDIwNjksIDB4MDAwMCwgMHg2ODE4LCAweGQwODQsIDB4MDBjMCwKLQkweDRhYmMsIDB4MjAwOSwgMHg4MDQwLCAweDY5MjIsIDB4NjgxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwNjksIDB4YTViZSwgMHg2ODQ3LCAweGZmZmYsIDB4MTI3ZiwgMHgyMDY5LCAweGEzMDAsIDB4Njg0NCwKLQkweDY5NjAsIDB4YTEwMiwgMHgyMDY5LCAweGE1MzQsIDB4Njg4YSwgMHg2OTg0LCAweDcwMWMsIDB4YTA2ZCwKLQkweDAwNDAsIDB4NGFjZiwgMHg4MWZmLCAweDAwNDAsIDB4NGIxNywgMHgwMDc4LCAweDRhZTUsIDB4ODFmZiwKLQkweDAwNDAsIDB4NGJlOSwgMHgyMDcxLCAweGE1MzQsIDB4NzE4NCwgMHg3MDg4LCAweGExMGEsIDB4MDBjOCwKLQkweDRhZTUsIDB4NzE5MCwgMHgyMDcxLCAweGE1YmUsIDB4NzA0MCwgMHhhMDA1LCAweDAwNDAsIDB4NGFlNSwKLQkweDAwZDAsIDB4NGJlOSwgMHg3MTQyLCAweDAwNzgsIDB4NGJlOSwgMHgyMDcxLCAweGE1MzQsIDB4NzE4YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwODQsIDB4YTEwYSwgMHgwMDQ4LCAweDRjMDYsIDB4MDA2OCwKLQkweDRiOWIsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTgsIDB4ZDA4NCwgMHgwMGMwLCAweDRiOWIsIDB4MjAwMSwKLQkweGZmZmYsIDB4MjA3MSwgMHhhNWJlLCAweDcwNDIsIDB4MjA3MSwgMHhhNTM0LCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg0YjBkLCAweDEwNzgsIDB4NGNkMiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDAwNzgsIDB4NGI5YiwgMHgxMDc4LCAweDRjZmQsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgwMDc4LCAweDRiOWIsIDB4MjA3MSwKLQkweGE1MzQsIDB4NzAwMCwgMHhhMDA1LCAweDAwNDAsIDB4NGJjOCwgMHg2OTM0LCAweGExODYsIDB4MDEwMywKLQkweDAwYzAsIDB4NGI5ZSwgMHg2ODRjLCAweGQwYmMsIDB4MDBjMCwgMHg0YmM4LCAweDY5NDgsIDB4Njg0NCwKLQkweGExMDUsIDB4MDBjMCwgMHg0YmJiLCAweDIwMDksIDB4ODAyMCwgMHgyMDcxLCAweGE1MzQsIDB4NzAwMCwKLQkweDAwNzksIDB4NGIzMiwgMHg0YmM4LCAweDRiODAsIDB4NGI1OCwgMHg0YjZhLCAweDRiMzcsIDB4MTM3ZSwKLQkweDE0N2UsIDB4MTU3ZSwgMHgyMDk5LCAweGEzNzUsIDB4MjBhMSwgMHhhNTg1LCAweDIwYTksIDB4MDAwNCwKLQkweDUzYTMsIDB4MTU3ZiwgMHgxNDdmLCAweDEzN2YsIDB4MjA3MSwgMHhhNTdjLCAweGFkODAsIDB4MDAwZiwKLQkweDcwMGUsIDB4NzAxMywgMHgwMDAyLCAweDcwMDcsIDB4MDAwMiwgMHg3MDBiLCAweDAwMDAsIDB4MmUxMCwKLQkweDEwNzgsIDB4MTNkMSwgMHgyMDcxLCAweGE0MTMsIDB4NzAwNywgMHgwMDA5LCAweDAwNzgsIDB4NGJlOSwKLQkweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMWUsIDB4MDBjOCwgMHg0YmU5LCAweGFlOTAsIDB4MDAwMywKLQkweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDcxODYsIDB4MjA3MSwgMHhhNDEzLCAweDEwNzgsIDB4NGQ1YiwKLQkweDAwNzgsIDB4NGJlOSwgMHg3MDg0LCAweDgwMDgsIDB4YTA5MiwgMHgwMDBmLCAweDAwYzgsIDB4NGJlOSwKLQkweGFlOTAsIDB4MDAwMywgMHg4MDAzLCAweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwKLQkweDIwMTIsIDB4NzE4NiwgMHgyMDcxLCAweGE0MTMsIDB4MTA3OCwgMHg0ZDViLCAweDAwNzgsIDB4NGJlOSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjgsIDB4NGI5YiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxOCwKLQkweGQwODQsIDB4MDBjMCwgMHg0YjliLCAweDcxMjIsIDB4NjgzYywgMHg3MDI2LCAweDY4NDAsIDB4NzAyYSwKLQkweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MTI3ZiwgMHgyMDcxLCAweGE0MTMsIDB4MTA3OCwKLQkweDRkNWIsIDB4MDA3OCwgMHg0YmU5LCAweDEyN2YsIDB4MDA3OCwgMHg0YmU5LCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNywgMHgwMDQwLCAweDRiYWMsIDB4YTE4NiwgMHgwMDFlLCAweDAwNDAsIDB4NGJhYywKLQkweGExOGUsIDB4MDAxZiwgMHgwMGMwLCAweDRiYzgsIDB4Njg0YywgMHhkMGNjLCAweDAwNDAsIDB4NGJjOCwKLQkweDY4NTAsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDRiYzgsIDB4MjAwOSwKLQkweDgwMjEsIDB4MDA3OCwgMHg0YjJkLCAweDY4NDQsIDB4YTA4NiwgMHgwMTAwLCAweDAwYzAsIDB4NGJjOCwKLQkweDY4NjgsIDB4YTAwNSwgMHgwMGMwLCAweDRiYzgsIDB4MjAwOSwgMHg4MDIwLCAweDAwNzgsIDB4NGIyZCwKLQkweDIwNzEsIDB4YTQxMywgMHgxMDc4LCAweDRkNmYsIDB4MDA0MCwgMHg0YmU5LCAweDIwNzEsIDB4YTQxMywKLQkweDcwMGYsIDB4MDAwMSwgMHg2OTM0LCAweGExODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDRiZTAsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4ODEwMSwgMHgwMDQwLCAweDRiZTAsIDB4NzEwZSwKLQkweDcwMDcsIDB4MDAwMywgMHgxMDc4LCAweDRkOGYsIDB4NzA1MCwgMHhhMDg2LCAweDAxMDAsIDB4MDA0MCwKLQkweDRjYTQsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhNDEzLCAweDcwMDgsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHg0YzA0LCAweDAwNjgsIDB4NGMwNCwgMHgyMDA5LCAweDAwMGQsIDB4NzAzMCwKLQkweDIwMGEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDA0LCAweGEwODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4NGMwNCwgMHg3MDA3LCAweDAwMDEsIDB4MTI3ZiwgMHgwMDdjLCAweDIwNzEsIDB4YTQxMywKLQkweDEwNzgsIDB4NGQ2ZiwgMHgwMDQwLCAweDRjMmYsIDB4MjA3MSwgMHhhNTM0LCAweDcwODQsIDB4NzAwYSwKLQkweDIwYTksIDB4MDAyMCwgMHgyMDk5LCAweGE1MzUsIDB4MjBhMSwgMHhhNTVjLCAweDUzYTMsIDB4NzA4NywKLQkweDAwMDAsIDB4MjA3MSwgMHhhNDEzLCAweDIwNjksIDB4YTU3YywgMHg3MDZjLCAweDY4MjYsIDB4NzA3MCwKLQkweDY4MmEsIDB4NzA3NCwgMHg2ODJlLCAweDcwNzgsIDB4NjgzMiwgMHgyZDEwLCAweDEwNzgsIDB4MTNkMSwKLQkweDcwMDcsIDB4MDAwOCwgMHgyMDAxLCAweGZmZmYsIDB4MjA3MSwgMHhhNWJlLCAweDcwNDIsIDB4MTI3ZiwKLQkweDAwNzgsIDB4NGJlOSwgMHgyMDY5LCAweGE1N2MsIDB4NjgwOCwgMHhhMDhlLCAweDAwMDAsIDB4MDA0MCwKLQkweDRjOTAsIDB4YTA4ZSwgMHgwMjAwLCAweDAwNDAsIDB4NGM4ZSwgMHhhMDhlLCAweDAxMDAsIDB4MDBjMCwKLQkweDRjOTAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDA2OCwgMHg0YzhiLCAweDIwNjksIDB4MDAwMCwKLQkweDY4MTgsIDB4ZDA4NCwgMHgwMGMwLCAweDRjOGIsIDB4NzAyYywgMHg3MTMwLCAweDgxMDgsIDB4YTEwMiwKLQkweDAwNDgsIDB4NGM1OSwgMHhhMDBlLCAweDcwMzQsIDB4NzA2ZSwgMHg3MDM4LCAweDcwNzIsIDB4MDA3OCwKLQkweDRjNjMsIDB4NzA2YywgMHhhMDgwLCAweDAwNDAsIDB4NzA2ZSwgMHgwMGM4LCAweDRjNjMsIDB4NzA3MCwKLQkweGEwODEsIDB4MDAwMCwgMHg3MDcyLCAweDcxMzIsIDB4NjkzNiwgMHg3MDBiLCAweDAwMDAsIDB4MjAwMSwKLQkweGE1NTksIDB4MjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4NGM4MiwgMHg2OTM0LCAweDIwNjksIDB4YTUzNCwKLQkweDY4OWMsIDB4Njk5ZSwgMHgyMDY5LCAweGE1YmUsIDB4YTEwMiwgMHgwMGMwLCAweDRjN2IsIDB4Njg0NCwKLQkweGEwMDUsIDB4MDBkMCwgMHg0Yzg5LCAweDIwMDEsIDB4YTU1YSwgMHgyMDBjLCAweDgxMGQsIDB4Njk0NiwKLQkweDAwNzgsIDB4NGM4OSwgMHgyMDA5LCAweDgwNDAsIDB4NjkyMiwgMHg2ODFiLCAweDAwMDEsIDB4MjA5MSwKLQkweDQwODAsIDB4NzAwNywgMHgwMDAxLCAweDEyN2YsIDB4MDA3OCwgMHg0YzkwLCAweDcwMDcsIDB4MDAwNSwKLQkweDAwN2MsIDB4NzAxYywgMHhhMDZkLCAweDAwNDAsIDB4NGNhMiwgMHgxMDc4LCAweDRkNmYsIDB4MDA0MCwKLQkweDRjYTIsIDB4NzAwNywgMHgwMDAzLCAweDEwNzgsIDB4NGQ4ZiwgMHg3MDUwLCAweGEwODYsIDB4MDEwMCwKLQkweDAwNDAsIDB4NGNhNCwgMHgwMDdjLCAweDAwN2MsIDB4NzA1MCwgMHhhMDllLCAweDAxMDAsIDB4MDBjMCwKLQkweDRjYWQsIDB4NzAwNywgMHgwMDA0LCAweDAwNzgsIDB4NGNjYiwgMHhhMDg2LCAweDAyMDAsIDB4MDBjMCwKLQkweDRjYjMsIDB4NzAwNywgMHgwMDA1LCAweDAwN2MsIDB4MjAwMSwgMHhhNTdlLCAweDIwMDQsIDB4YTA4ZSwKLQkweDAxMDAsIDB4MDBjMCwgMHg0Y2MwLCAweDcwMDcsIDB4MDAwMSwgMHgxMDc4LCAweDRkNWIsIDB4MDA3YywKLQkweGEwOGUsIDB4MDAwMCwgMHgwMDQwLCAweDRjYmYsIDB4YTA4ZSwgMHgwMjAwLCAweDAwYzAsIDB4NGNiZiwKLQkweDcwMDcsIDB4MDAwNSwgMHgwMDdjLCAweDEwNzgsIDB4NGQyNSwgMHg3MDA2LCAweDEwNzgsIDB4NGQ1YiwKLQkweDAwN2MsIDB4MDA3YywgMHgwZTdlLCAweDE1N2UsIDB4MjA3MSwgMHhhNTM0LCAweDcxODQsIDB4ODFmZiwKLQkweDAwNDAsIDB4NGNmYSwgMHhhMDA2LCAweDcwODYsIDB4YWU4MCwgMHgwMDAzLCAweDIwNzEsIDB4MDAwMCwKLQkweDIxYTgsIDB4MjAxNCwgMHg3MjI2LCAweDgwMDAsIDB4MDA3MCwgMHg0Y2Y3LCAweDIwMTQsIDB4NzIyYSwKLQkweDgwMDAsIDB4MDA3MCwgMHg0Y2Y3LCAweDIwMTQsIDB4NzIyZSwgMHg4MDAwLCAweDAwNzAsIDB4NGNmNywKLQkweDIwMTQsIDB4NzIzYSwgMHg4MDAwLCAweDAwNzAsIDB4NGNmNywgMHgyMDE0LCAweDcyM2UsIDB4YTE4MCwKLQkweDgwMzAsIDB4NzAyMiwgMHgxNTdmLCAweDBlN2YsIDB4MDA3YywgMHgwZTdlLCAweDE1N2UsIDB4MjA3MSwKLQkweGE1MzQsIDB4NzE4NCwgMHg4MWZmLCAweDAwNDAsIDB4NGQyMiwgMHhhMDA2LCAweDcwODYsIDB4YWU4MCwKLQkweDAwMDMsIDB4MjA3MSwgMHgwMDAwLCAweDIxYTgsIDB4MjAxNCwgMHg3MjI2LCAweDgwMDAsIDB4MjAxNCwKLQkweDcyMmEsIDB4ODAwMCwgMHgwMDcwLCAweDRkMWIsIDB4MjAxNCwgMHg3MjNhLCAweDgwMDAsIDB4MjAxNCwKLQkweDcyM2UsIDB4MDA3OCwgMHg0ZDFmLCAweDIwMDEsIDB4ODAyMCwgMHgwMDc4LCAweDRkMjEsIDB4MjAwMSwKLQkweDgwNDIsIDB4NzAyMiwgMHgxNTdmLCAweDBlN2YsIDB4MDA3YywgMHg3MDJjLCAweDcxMzAsIDB4ODEwOCwKLQkweGExMDIsIDB4MDA0OCwgMHg0ZDMyLCAweGEwMGUsIDB4NzAzNCwgMHg3MDZlLCAweDcwMzgsIDB4NzA3MiwKLQkweDAwNzgsIDB4NGQzYywgMHg3MDZjLCAweGEwODAsIDB4MDA0MCwgMHg3MDZlLCAweDAwYzgsIDB4NGQzYywKLQkweDcwNzAsIDB4YTA4MSwgMHgwMDAwLCAweDcwNzIsIDB4NzEzMiwgMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwKLQkweDAwYzAsIDB4NGQ1MiwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwMDY4LCAweDRkNTUsIDB4MjAwMSwKLQkweDAwMGQsIDB4MjEwMiwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDAxLCAweDcwMGIsIDB4MDAwMCwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDAxLCAweDAwMDcsIDB4MDA3YywgMHgyMDAxLCAweDAwMDYsIDB4NzAwYiwKLQkweDAwMDEsIDB4MTI3ZiwgMHgwMDdjLCAweDcwMWMsIDB4YTA2ZCwgMHgwMDQwLCAweDRkNmUsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHgyZDA0LCAweDcwMWUsIDB4YTAwNSwKLQkweDAwYzAsIDB4NGQ2YiwgMHg3MDFhLCAweDEyN2YsIDB4MTA3OCwgMHgxMzlhLCAweDAwN2MsIDB4MjAxOSwKLQkweDAwMGQsIDB4MjMwNCwgMHgyMzBjLCAweGExMGUsIDB4MDA0MCwgMHg0ZDdlLCAweDIzMDQsIDB4MjMwYywKLQkweGExMGUsIDB4MDA0MCwgMHg0ZDdlLCAweGEwMDYsIDB4MDA3OCwgMHg0ZDhlLCAweDczMmMsIDB4ODMxOSwKLQkweDcxMzAsIDB4YTEwMiwgMHgwMGMwLCAweDRkODgsIDB4MjMwMCwgMHhhMDA1LCAweDAwNzgsIDB4NGQ4ZSwKLQkweDAwNDgsIDB4NGQ4ZCwgMHhhMzAyLCAweDAwNzgsIDB4NGQ4ZSwgMHg4MDAyLCAweDAwN2MsIDB4MmQwMCwKLQkweDcwMjYsIDB4YTA4MCwgMHgwMDBkLCAweDcwNTYsIDB4NzA1MywgMHgwMDAwLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjAwOSwgMHhhNWQwLCAweDIxMDQsIDB4YzA4ZCwgMHgyMDBhLCAweDEyN2YsIDB4MTA3OCwKLQkweDEzZWIsIDB4MDA3YywgMHgyMDcxLCAweGEzZTEsIDB4NzAwMywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMCwKLQkweDcwMGYsIDB4MDAwMCwgMHg3MDJiLCAweDAwMDEsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNTMsIDB4MDAwMSwKLQkweDcwNWYsIDB4MDAyMCwgMHg3MDYzLCAweDAwNDAsIDB4NzA4MywgMHgwMDAwLCAweDcwOGIsIDB4MDAwMCwKLQkweDcwOGYsIDB4MDAwMSwgMHg3MGJmLCAweDAwMDAsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTNlMSwKLQkweDY4NDgsIDB4YTAwNSwgMHgwMGMwLCAweDRkY2IsIDB4NzAyOCwgMHhjMDg1LCAweDcwMmEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg0ZGYwLCAweDZhNTAsIDB4NzIzNiwgMHg2YjU0LCAweDczM2EsIDB4Njg1OCwKLQkweDcwM2UsIDB4NzA3YSwgMHg2ODVjLCAweDcwNDIsIDB4NzA3ZSwgMHg2ODQ4LCAweDcwMmUsIDB4Njg0MCwKLQkweDcwMzIsIDB4MjAwOSwgMHgwMDBjLCAweDIwMGEsIDB4ODAwNywgMHg4MDA2LCAweDgwMDYsIDB4YTA4YywKLQkweDAwM2YsIDB4YTA4NCwgMHhmZmMwLCAweGEyMTAsIDB4MjEwMCwgMHhhMzE5LCAweDcyNzIsIDB4NzM3NiwKLQkweDcwMjgsIDB4YzA4NCwgMHg3MDJhLCAweDcwMDcsIDB4MDAwMSwgMHg3MDBmLCAweDAwMDAsIDB4YTAwNiwKLQkweDBlN2YsIDB4MDA3YywgMHgyYjc4LCAweDIwNzEsIDB4YTNlMSwgMHg3MDA0LCAweDEwNzksIDB4NGU1MCwKLQkweDcwMGMsIDB4MDA3OSwgMHg0ZGZiLCAweDRlMDAsIDB4NGRmNSwgMHg0ZGY1LCAweDRkZjUsIDB4NGRmNSwKLQkweDAwN2MsIDB4NzAwYywgMHgwMDc5LCAweDRlMDQsIDB4NGUwOSwgMHg0ZTRlLCAweDRlNGUsIDB4NGU0ZiwKLQkweDRlNGYsIDB4NzgzMCwgMHg3OTMwLCAweGExMDYsIDB4MDA0MCwgMHg0ZTEzLCAweDc4MzAsIDB4NzkzMCwKLQkweGExMDYsIDB4MDBjMCwgMHg0ZTM5LCAweDcwMzAsIDB4YTEwYSwgMHgwMDQwLCAweDRlMzksIDB4MDBjOCwKLQkweDRlMWIsIDB4NzEyYywgMHhhMTBhLCAweGExOGEsIDB4MDAwMiwgMHgwMGM4LCAweDRlM2EsIDB4MTA3OCwKLQkweDEzNjYsIDB4MDA0MCwgMHg0ZTM5LCAweDJkMDAsIDB4NzA1YSwgMHg3MDYzLCAweDAwNDAsIDB4MjAwMSwKLQkweDAwMDMsIDB4NzA1NywgMHgwMDAwLCAweDEyN2UsIDB4MDA3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwKLQkweGE1ZDAsIDB4MjEwNCwgMHhjMDg1LCAweDIwMGEsIDB4MDA3ZiwgMHg3MDBlLCAweDEyN2YsIDB4MTA3OCwKLQkweDEzZWIsIDB4MDA3YywgMHgxMDc4LCAweDEzNjYsIDB4MDA0MCwgMHg0ZTM5LCAweDJkMDAsIDB4NzA1YSwKLQkweDEwNzgsIDB4MTM2NiwgMHgwMGMwLCAweDRlNDYsIDB4MDA3OCwgMHg0ZTI1LCAweDJkMDAsIDB4NzA4NiwKLQkweDcwNjMsIDB4MDA4MCwgMHgyMDAxLCAweDAwMDQsIDB4MDA3OCwgMHg0ZTI5LCAweDAwN2MsIDB4MDA3YywKLQkweDRlNjEsIDB4NGU2MiwgMHg0ZTk5LCAweDRlOWEsIDB4NGU0ZSwgMHg0ZWQwLCAweDRlZDUsIDB4NGYwYywKLQkweDRmMGQsIDB4NGYyOCwgMHg0ZjI5LCAweDRmMmEsIDB4NGYyYiwgMHg0ZjJjLCAweDRmMmQsIDB4NGZhZCwKLQkweDRmZDcsIDB4MDA3YywgMHg3MDBjLCAweDAwNzksIDB4NGU2NSwgMHg0ZTZhLCAweDRlNmQsIDB4NGU3ZCwKLQkweDRlOTgsIDB4NGU5OCwgMHgxMDc4LCAweDRlMDEsIDB4MDA3YywgMHgxMjdlLCAweDgwMDEsIDB4NzAwZSwKLQkweDcwNTgsIDB4MDA3ZSwgMHgxMDc4LCAweDUzNDgsIDB4MDA0MCwgMHg0ZTdhLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NGUwMSwgMHgwZDdmLCAweDAwNzgsIDB4NGU4NiwgMHgxMjdlLCAweDgwMDEsIDB4NzAwZSwKLQkweDEwNzgsIDB4NTM0OCwgMHg3MDU4LCAweDIwNjgsIDB4NzA4NCwgMHg3MDVhLCAweDY4MDMsIDB4MDAwMCwKLQkweDY4MDcsIDB4MDAwMCwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwgMHhhMDhhLCAweDAwMjAsIDB4MDBjOCwKLQkweDRlOTUsIDB4MTA3OSwgMHg0ZWIwLCAweDEyN2YsIDB4MDA3YywgMHgxMjdmLCAweDEwNzgsIDB4NGYyZSwKLQkweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhM2UxLCAweDcwMGMsIDB4MDA3OSwKLQkweDRlYTEsIDB4NGVhNiwgMHg0ZWE2LCAweDRlYTYsIDB4NGVhOCwgMHg0ZWFjLCAweDBlN2YsIDB4MDA3YywKLQkweDcwMGYsIDB4MDAwMSwgMHgwMDc4LCAweDRlYWUsIDB4NzAwZiwgMHgwMDAyLCAweDBlN2YsIDB4MDA3YywKLQkweDRmMmUsIDB4NGYyZSwgMHg0ZjRhLCAweDRmMmUsIDB4NTA4MCwgMHg0ZjJlLCAweDRmMmUsIDB4NGYyZSwKLQkweDRmMmUsIDB4NGYyZSwgMHg0ZjRhLCAweDUwY2EsIDB4NTExNywgMHg1MTcwLCAweDUxODYsIDB4NGYyZSwKLQkweDRmMmUsIDB4NGY2NiwgMHg0ZjRhLCAweDRmMmUsIDB4NGYyZSwgMHg0Zjg3LCAweDUyNDUsIDB4NTI2MywKLQkweDRmMmUsIDB4NGY2NiwgMHg0ZjJlLCAweDRmMmUsIDB4NGYyZSwgMHg0ZjJlLCAweDRmN2MsIDB4NTI2MywKLQkweDcwMjAsIDB4MjA2OCwgMHgxMDc4LCAweDEzOWEsIDB4MDA3YywgMHg3MDBjLCAweDAwNzksIDB4NGVkOCwKLQkweDRlZGQsIDB4NGVlMCwgMHg0ZWYwLCAweDRmMGIsIDB4NGYwYiwgMHgxMDc4LCAweDRlMDEsIDB4MDA3YywKLQkweDEyN2UsIDB4ODAwMSwgMHg3MDBlLCAweDcwNTgsIDB4MDA3ZSwgMHgxMDc4LCAweDUzNDgsIDB4MDA0MCwKLQkweDRlZWQsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NGUwMSwgMHgwZDdmLCAweDAwNzgsIDB4NGVmOSwKLQkweDEyN2UsIDB4ODAwMSwgMHg3MDBlLCAweDEwNzgsIDB4NTM0OCwgMHg3MDU4LCAweDIwNjgsIDB4NzA4NCwKLQkweDcwNWEsIDB4NjgwMywgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOGEsIDB4MDAxYSwgMHgwMGM4LCAweDRmMDgsIDB4MTA3OSwgMHg0ZjBlLCAweDEyN2YsIDB4MDA3YywKLQkweDEyN2YsIDB4MTA3OCwgMHg0ZjJlLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDRmMmUsIDB4NGY0YSwKLQkweDUwNmEsIDB4NGYyZSwgMHg0ZjRhLCAweDRmMmUsIDB4NGY0YSwgMHg0ZjRhLCAweDRmMmUsIDB4NGY0YSwKLQkweDUwNmEsIDB4NGY0YSwgMHg0ZjRhLCAweDRmNGEsIDB4NGY0YSwgMHg0ZjRhLCAweDRmMmUsIDB4NGY0YSwKLQkweDUwNmEsIDB4NGYyZSwgMHg0ZjJlLCAweDRmNGEsIDB4NGYyZSwgMHg0ZjJlLCAweDRmMmUsIDB4NGY0YSwKLQkweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDAwN2MsIDB4MDA3YywgMHgwMDdjLCAweDcwMDcsIDB4MDAwMSwKLQkweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweGMwZDUsIDB4NjgzYSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgxMjdmLCAweDAwN2MsIDB4NzAwNywgMHgwMDAxLCAweDY4MzgsIDB4YTA4NCwKLQkweDAwZmYsIDB4YzBlNSwgMHg2ODNhLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDk4MiwKLQkweDEyN2YsIDB4MDA3YywgMHg3MDA3LCAweDAwMDEsIDB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4YzBlZCwKLQkweDY4M2EsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEyN2YsIDB4MDA3YywKLQkweDcwMDcsIDB4MDAwMSwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwgMHhjMGRkLCAweDY4M2EsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDQ5ODIsIDB4MTI3ZiwgMHgwMDdjLCAweDY4MzQsIDB4ODAwNywKLQkweGEwODQsIDB4MDBmZiwgMHgwMDQwLCAweDRmM2MsIDB4ODAwMSwgMHgwMGMwLCAweDRmNzMsIDB4NzAwNywKLQkweDAwMDEsIDB4MDA3OCwgMHg1MDQ5LCAweDcwMDcsIDB4MDAwNiwgMHg3MDEyLCAweDJkMDAsIDB4NzAxNiwKLQkweDcwMWEsIDB4NzA0YiwgMHg1MDQ5LCAweDAwN2MsIDB4Njg0YywgMHhhMDg0LCAweDAwYzAsIDB4YTA4NiwKLQkweDAwYzAsIDB4MDBjMCwgMHg0Zjg3LCAweDcwMDcsIDB4MDAwMSwgMHgwMDc4LCAweDUyODAsIDB4MmQwMCwKLQkweDcwMTYsIDB4NzAxYSwgMHgyMGE5LCAweDAwMDQsIDB4YTA4MCwgMHgwMDI0LCAweDIwOTgsIDB4MjBhMSwKLQkweGE0MGMsIDB4NTNhMywgMHg2ODU4LCAweDcwMTIsIDB4YTA4MiwgMHgwNDAxLCAweDAwYzgsIDB4NGY1OCwKLQkweDY4ODQsIDB4YTA4YSwgMHgwMDAyLCAweDAwYzgsIDB4NGY1OCwgMHg4MmZmLCAweDAwYzAsIDB4NGZhOSwKLQkweDY4ODgsIDB4Njk4YywgMHhhMTA1LCAweDAwNDAsIDB4NGZhOSwgMHgyMDAxLCAweDUwMTksIDB4MDA3OCwKLQkweDRmYWMsIDB4YTI4MCwgMHg1MDBmLCAweDIwMDQsIDB4NzBjNiwgMHg3MDEwLCAweGEwMTUsIDB4MDA0MCwKLQkweDRmZjcsIDB4MTA3OCwgMHgxMzY2LCAweDAwYzAsIDB4NGZiOCwgMHg3MDA3LCAweDAwMGYsIDB4MDA3YywKLQkweDJkMDAsIDB4NzAyMiwgMHg3MGM0LCAweDIwNjAsIDB4NjAwMCwgMHg2ODM2LCAweDYwMDQsIDB4YWQwMCwKLQkweDcwOTYsIDB4NjAwOCwgMHhhMjBhLCAweDAwYzgsIDB4NGZjNywgMHhhMDBlLCAweDIyMDAsIDB4NzExMiwKLQkweDYyMGMsIDB4ODAwMywgMHg4MDBiLCAweGEyOTYsIDB4MDAwNCwgMHgwMDQwLCAweDRmZDAsIDB4YTEwOCwKLQkweDcxOWEsIDB4ODEwYiwgMHg3MTllLCAweGFlOTAsIDB4MDAyMiwgMHgxMDc4LCAweDEzZDEsIDB4NzA5MCwKLQkweGEwOGUsIDB4MDEwMCwgMHgwMDQwLCAweDRmZWIsIDB4YTA4NiwgMHgwMjAwLCAweDAwNDAsIDB4NGZlMywKLQkweDcwMDcsIDB4MDAxMCwgMHgwMDdjLCAweDcwMjAsIDB4MjA2OCwgMHgxMDc4LCAweDEzOWEsIDB4NzAxNCwKLQkweDIwNjgsIDB4MDA3OCwgMHg0ZjU4LCAweDcwMjAsIDB4MjA2OCwgMHg3MDE4LCAweDY4MDIsIDB4NjgwNywKLQkweDAwMDAsIDB4MmQwOCwgMHgyMDY4LCAweDY5MDYsIDB4NzExYSwgMHgwMDc4LCAweDRmYWQsIDB4NzAxNCwKLQkweDIwNjgsIDB4NzAwNywgMHgwMDAxLCAweDY4ODQsIDB4YTAwNSwgMHgwMGMwLCAweDUwMDYsIDB4Njg4OCwKLQkweDY5OGMsIDB4YTEwNSwgMHgwMDQwLCAweDUwMDYsIDB4MTA3OCwgMHg1MDFkLCAweDY4MzQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDFlLCAweDAwNDAsIDB4NTI4MCwgMHgwMDc4LCAweDUwNDksIDB4NTAxMSwKLQkweDUwMTUsIDB4MDAwMiwgMHgwMDExLCAweDAwMDcsIDB4MDAwNCwgMHgwMDBhLCAweDAwMGYsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDAwYSwgMHgwMDExLCAweDAwMDUsIDB4MDAwNCwgMHgwZjdlLCAweDBlN2UsIDB4MGM3ZSwKLQkweDA3N2UsIDB4MDY3ZSwgMHg2Zjg4LCAweDZlOGMsIDB4NjgwNCwgMHgyMDYwLCAweGFjZjAsIDB4MDAyMSwKLQkweGFjZjgsIDB4MDAyNywgMHgyMDA5LCAweDAwMDUsIDB4NzAwYywgMHg3ODE2LCAweDcwMDgsIDB4NzgxMiwKLQkweDcwMDQsIDB4NzgwNiwgMHg3MDAwLCAweDc4MDIsIDB4N2UwZSwgMHg3ZjBhLCAweDgxMDksIDB4MDA0MCwKLQkweDUwM2YsIDB4YWVmMiwgMHgwMDA0LCAweGFmZmEsIDB4MDAwNiwgMHgwMDc4LCAweDUwMmMsIDB4NjAwNCwKLQkweGEwNjUsIDB4MDBjMCwgMHg1MDI2LCAweDA2N2YsIDB4MDc3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MjAwOSwgMHhhMzJlLCAweDIxMGMsIDB4ODFmZiwgMHgwMGMwLCAweDUwNjQsIDB4NjgzOCwKLQkweGEwODQsIDB4MDBmZiwgMHg2ODNhLCAweDEwNzgsIDB4NDI5MCwgMHgwMGMwLCAweDUwNTgsIDB4MDA3YywKLQkweDEwNzgsIDB4NGE2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDhjYjgsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTI3ZiwgMHgwMDc4LCAweDUwNTcsIDB4MjAwMSwgMHgwMDI4LCAweDIwMDksIDB4MDAwMCwKLQkweDAwNzgsIDB4NTA1OCwgMHg3MDE4LCAweDY4MDIsIDB4MmQwOCwgMHgyMDY4LCAweDY5MDYsIDB4NzExYSwKLQkweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweDAwNDAsIDB4NTA3OSwgMHg3MDA3LCAweDAwMDYsIDB4MDA3OCwKLQkweDUwN2YsIDB4NzAxNCwgMHgyMDY4LCAweDcwMDcsIDB4MDAwMSwgMHg3MDQ4LCAweDEwN2EsIDB4MDA3YywKLQkweDcwMDcsIDB4MDAwMSwgMHg2OTQ0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDY4NDgsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjBhOSwgMHgwMDAxLCAweGEwOTYsIDB4MDAwMSwgMHgwMDQwLCAweDUwYTksIDB4MjAwOSwKLQkweDAwMDAsIDB4MjBhOSwgMHgwMGZmLCAweGEwOTYsIDB4MDAwMiwgMHgwMDQwLCAweDUwYTksIDB4YTAwNSwKLQkweDAwYzAsIDB4NTBiYywgMHg2OTQ0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4NTBiYywgMHgwNjdlLCAweDZlNTAsIDB4MTA3OCwgMHg0NWU3LCAweDA2N2YsIDB4MDA3OCwKLQkweDUwYmMsIDB4MDQ3ZSwgMHgyMDExLCAweGEzMGMsIDB4MjIyNCwgMHhjNDg0LCAweGM0OGMsIDB4MjQxMiwKLQkweDA0N2YsIDB4MGM3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHg1MGI4LCAweDEwNzgsIDB4NDc4MiwKLQkweDgxMDgsIDB4MDBmMCwgMHg1MGIyLCAweDBjN2YsIDB4Njg0YywgMHhkMDg0LCAweDAwYzAsIDB4NTBjMywKLQkweDEwNzgsIDB4MTM5YSwgMHgwMDdjLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDk4MiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4NTEwZSwgMHgyMDYxLCAweGE2MmQsIDB4NjEwMCwKLQkweGQxODQsIDB4MDA0MCwgMHg1MGVlLCAweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDAwYzAsIDB4NTExMSwKLQkweDYwMDAsIDB4ZDA4NCwgMHgwMDQwLCAweDUxMGUsIDB4NjAwNCwgMHhhMDA1LCAweDAwYzAsIDB4NTExNCwKLQkweDYwMDMsIDB4MDAwMCwgMHg2MDBiLCAweDAwMDAsIDB4MDA3OCwgMHg1MTBiLCAweDIwMTEsIDB4MDAwMSwKLQkweDY4NjAsIDB4YTAwNSwgMHgwMGMwLCAweDUwZjYsIDB4MjAwMSwgMHgwMDFlLCAweDgwMDAsIDB4NjAxNiwKLQkweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4NTEwZSwgMHg2MDA2LCAweDY4NTgsIDB4ODAwNywKLQkweGEwODQsIDB4MDBmZiwgMHgwMDQwLCAweDUxMGUsIDB4NjAwYSwgMHg2ODU4LCAweDgwMDAsIDB4MDBjMCwKLQkweDUxMGEsIDB4YzI4ZCwgMHg2MjAyLCAweDEyN2YsIDB4MDA3OCwgMHg1MzM3LCAweDEyN2YsIDB4MDA3OCwKLQkweDUzMmYsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMjcsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMmIsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhNCwKLQkweDAwNDAsIDB4NTE2ZCwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwgMHhkMDg0LCAweDAwNDAsIDB4NTE2ZCwKLQkweDYyMDQsIDB4NjMwOCwgMHhkMDhjLCAweDAwYzAsIDB4NTE1ZiwgMHg2YzQ4LCAweGE0ODQsIDB4MDAwMywKLQkweDAwNDAsIDB4NTE0NSwgMHg2OTU4LCAweGExOGMsIDB4MDBmZiwgMHg4MDAxLCAweDAwYzAsIDB4NTEzZSwKLQkweDIxMDAsIDB4YTIxMCwgMHgwMDQ4LCAweDUxNmEsIDB4MDA3OCwgMHg1MTQ1LCAweDgwMDEsIDB4MDBjMCwKLQkweDUxNmEsIDB4MjEwMCwgMHhhMjEyLCAweDAwNDgsIDB4NTE2YSwgMHhhNDg0LCAweDAwMGMsIDB4MDA0MCwKLQkweDUxNWYsIDB4Njk1OCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDQsIDB4MDBjMCwKLQkweDUxNTcsIDB4MjEwMCwgMHhhMzE4LCAweDAwNDgsIDB4NTE2YSwgMHgwMDc4LCAweDUxNWYsIDB4YTA4MiwKLQkweDAwMDQsIDB4MDBjMCwgMHg1MTZhLCAweDIxMDAsIDB4YTMxYSwgMHgwMDQ4LCAweDUxNmEsIDB4Njg2MCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1MTY1LCAweDgwMDAsIDB4NjAxNiwgMHg2MjA2LCAweDYzMGEsIDB4MTI3ZiwKLQkweDAwNzgsIDB4NTMzNywgMHgxMjdmLCAweDAwNzgsIDB4NTMzMywgMHgxMjdmLCAweDAwNzgsIDB4NTMyZiwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDYxLCAweGE2MmQsIDB4NjMwMCwKLQkweGQzOGMsIDB4MDBjMCwgMHg1MTgwLCAweDYzMDgsIDB4ODMxOCwgMHgwMDQ4LCAweDUxODMsIDB4NjMwYSwKLQkweDEyN2YsIDB4MDA3OCwgMHg1MzQ1LCAweDEyN2YsIDB4MDA3OCwgMHg1MzMzLCAweDEyN2UsIDB4MGM3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4Njg0YywgMHhkMGFjLCAweDAwNDAsIDB4NTE5YSwKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDYwMDAsIDB4YTA4NCwgMHhmY2ZmLCAweDYwMDIsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NTFjOSwgMHg2ODU4LCAweGEwMDUsIDB4MDA0MCwgMHg1MWUwLCAweDY4NWMsIDB4YTA2NSwKLQkweDAwNDAsIDB4NTFkYywgMHgyMDAxLCAweGEzMmUsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4NTFhYywKLQkweDEwNzgsIDB4OGMwMSwgMHgwMDc4LCAweDUxYmEsIDB4NjAxMywgMHgwNDAwLCAweDYwMzcsIDB4MDAwMCwKLQkweDY5NGMsIDB4ZDFhNCwgMHgwMDQwLCAweDUxYjYsIDB4Njk1MCwgMHg2MTM2LCAweDIwMDksIDB4MDA0MSwKLQkweDEwNzgsIDB4NzU2YywgMHg2OTU4LCAweGExOGMsIDB4ZmYwMCwgMHhhMTg2LCAweDIwMDAsIDB4MDBjMCwKLQkweDUxYzksIDB4MDI3ZSwgMHgyMDA5LCAweDAwMDAsIDB4MjAxMSwgMHhmZGZmLCAweDEwNzgsIDB4NWE2ZCwKLQkweDAyN2YsIDB4Njg0YywgMHhkMGM0LCAweDAwNDAsIDB4NTFkOCwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwKLQkweGQwOGMsIDB4MDBjMCwgMHg1MWQ4LCAweDYwMDgsIDB4ODAwMCwgMHgwMDQ4LCAweDUxZGMsIDB4NjAwYSwKLQkweDBjN2YsIDB4MTI3ZiwgMHgwMDc4LCAweDUzMzcsIDB4MGM3ZiwgMHgxMjdmLCAweDAwNzgsIDB4NTMyZiwKLQkweDY5NTQsIDB4YTE4NiwgMHgwMDQ1LCAweDAwNDAsIDB4NTIxMywgMHhhMTg2LCAweDAwMmEsIDB4MDBjMCwKLQkweDUxZjAsIDB4MjAwMSwgMHhhMzBjLCAweDIwMGMsIDB4YzE5NCwgMHgyMTAyLCAweDAwNzgsIDB4NTFjOSwKLQkweGExODYsIDB4MDAyMCwgMHgwMDQwLCAweDUyMDksIDB4YTE4NiwgMHgwMDI5LCAweDAwNDAsIDB4NTFmYywKLQkweGExODYsIDB4MDAyZCwgMHgwMGMwLCAweDUxZGMsIDB4Njk0NCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDUxYzksIDB4NjAwMCwgMHhjMGU0LCAweDYwMDIsIDB4MDA3OCwKLQkweDUxYzksIDB4Njg1YywgMHhhMDY1LCAweDAwNDAsIDB4NTFkYywgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwKLQkweDYwMTYsIDB4MDA3OCwgMHg1MWM5LCAweDY4NWMsIDB4YTA2NSwgMHgwMDQwLCAweDUxZGMsIDB4MGU3ZSwKLQkweDY4NjAsIDB4YTA3NSwgMHgyMDAxLCAweGEzMmUsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4NTIyYiwKLQkweDEwNzgsIDB4OGMwMSwgMHg4ZWZmLCAweDAwNDAsIDB4NTIyOCwgMHgyZTYwLCAweDEwNzgsIDB4OGMwMSwKLQkweDBlN2YsIDB4MDA3OCwgMHg1MWM5LCAweDYwMjQsIDB4YzBkYywgMHhjMGQ1LCAweDYwMjYsIDB4MmU2MCwKLQkweDYwMDcsIDB4MDAzYSwgMHg2ODcwLCAweGEwMDUsIDB4MDA0MCwgMHg1MjNjLCAweDYwMDcsIDB4MDAzYiwKLQkweDY4NzQsIDB4NjAyYSwgMHg2ODc4LCAweDYwMTIsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwZTdmLCAweDAwNzgsIDB4NTFjOSwgMHgyMDYxLCAweGE2MmQsIDB4NjAwMCwKLQkweGQwODQsIDB4MDA0MCwgMHg1MjVmLCAweGQwOGMsIDB4MDBjMCwgMHg1MzQ1LCAweDIwOTEsIDB4ODAwMCwKLQkweDYyMDQsIDB4ODIxMCwgMHgwMDQ4LCAweDUyNTksIDB4NjIwNiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3OCwKLQkweDUzNDUsIDB4MjA5MSwgMHg4MDAxLCAweDY4NTMsIDB4MDAxNiwgMHgwMDc4LCAweDUzM2UsIDB4Njg1MywKLQkweDAwMDcsIDB4MDA3OCwgMHg1MzNlLCAweDY4MzQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDBjMCwKLQkweDUyNmQsIDB4MTA3OCwgMHg0ZjNjLCAweDAwNzgsIDB4NTI3ZiwgMHgyMDMwLCAweDgwMDEsIDB4MDBjMCwKLQkweDUyNzcsIDB4NzAwNywgMHgwMDAxLCAweDEwNzgsIDB4NTI4MCwgMHgwMDc4LCAweDUyN2YsIDB4NzAwNywKLQkweDAwMDYsIDB4NzAxMiwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDUyODAsIDB4MDA3YywKLQkweDBlN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhMzJlLCAweDIxMGMsIDB4ODFmZiwKLQkweDAwYzAsIDB4NTMwYiwgMHgyMDA5LCAweGEzMGMsIDB4MjEwYywgMHhkMTk0LCAweDAwYzAsIDB4NTMxNSwKLQkweDY4NDgsIDB4MjA3MCwgMHhhZTgyLCAweGFhMDAsIDB4MDA0OCwgMHg1MmZiLCAweDIwMDEsIDB4YTMxNSwKLQkweDIwMDQsIDB4YWUwMiwgMHgwMGM4LCAweDUyZmIsIDB4MjA2MSwgMHhhNjJkLCAweDYxMDAsIDB4YTE4NCwKLQkweDAzMDEsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NTJkZSwgMHg3MTFjLCAweGExODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4NTJlNiwgMHg3MDE4LCAweGEwMDUsIDB4MDA0MCwgMHg1MzBiLCAweDIwMDQsIDB4ZDBlNCwKLQkweDAwYzAsIDB4NTMwZiwgMHg3MDI0LCAweGQwZGMsIDB4MDBjMCwgMHg1MzE5LCAweDY4NTMsIDB4MDAwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyZDA4LCAweDcwMTAsIDB4YTAwNSwgMHgwMGMwLCAweDUyY2EsIDB4NzExMiwKLQkweDY4NGMsIDB4ZDBmNCwgMHgwMGMwLCAweDUzMWQsIDB4MmU2MCwgMHgxMDc4LCAweDU5YjYsIDB4MTI3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgyMDY4LCAweDY4MDAsIDB4YTAwNSwgMHgwMGMwLCAweDUyY2EsIDB4NjkwMiwKLQkweDIxNjgsIDB4Njg0YywgMHhkMGY0LCAweDAwYzAsIDB4NTMxZCwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywKLQkweDEyN2YsIDB4MGU3ZiwgMHg2ODUzLCAweDAwMDYsIDB4MDA3OCwgMHg1MzNlLCAweGQxODQsIDB4MDA0MCwKLQkweDUyZDgsIDB4ZDFjNCwgMHgwMGMwLCAweDUyZmYsIDB4MDA3OCwgMHg1MzAzLCAweDY5NDQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHg1MzBmLCAweDYwMDAsIDB4ZDBlNCwKLQkweDAwYzAsIDB4NTMwZiwgMHg3MTFjLCAweGExODYsIDB4MDAwNywgMHgwMGMwLCAweDUyZmIsIDB4Njg1MywKLQkweDAwMDIsIDB4MDA3OCwgMHg1MzExLCAweDY4NTMsIDB4MDAwOCwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywKLQkweDAwMGUsIDB4MDA3OCwgMHg1MzExLCAweDY4NTMsIDB4MDAxNywgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywKLQkweDAwMzUsIDB4MDA3OCwgMHg1MzExLCAweDY4NTMsIDB4MDAyOCwgMHgwMDc4LCAweDUzMTEsIDB4Njg1MywKLQkweDAwMjksIDB4MTI3ZiwgMHgwZTdmLCAweDAwNzgsIDB4NTMzZSwgMHg2ODUzLCAweDAwMmEsIDB4MDA3OCwKLQkweDUzMTEsIDB4Njg1MywgMHgwMDQ1LCAweDAwNzgsIDB4NTMxMSwgMHgyZTYwLCAweDIwMTksIDB4MDAwMiwKLQkweDYwMTcsIDB4MDAxNCwgMHgxMDc4LCAweDlhNmEsIDB4MTI3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MjAwOSwKLQkweDAwM2UsIDB4MDA3OCwgMHg1MzM5LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDUzMzksIDB4MjAwOSwKLQkweDAwMDYsIDB4MDA3OCwgMHg1MzM5LCAweDIwMDksIDB4MDAxNiwgMHgwMDc4LCAweDUzMzksIDB4MjAwOSwKLQkweDAwMDEsIDB4Njg1NCwgMHhhMDg0LCAweGZmMDAsIDB4YTEwNSwgMHg2ODU2LCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHgxMDc4LCAweDEzOWEsIDB4MDA3YywKLQkweDcwMmMsIDB4NzEzMCwgMHg4MTA4LCAweGExMDIsIDB4MDA0OCwgMHg1MzU1LCAweGEwMGUsIDB4NzAzNCwKLQkweDcwNzIsIDB4NzAzOCwgMHg3MDc2LCAweDAwNzgsIDB4NTM2MSwgMHg3MDcwLCAweGEwODAsIDB4MDA0MCwKLQkweDcwNzIsIDB4MDBjOCwgMHg1MzYxLCAweDcwNzQsIDB4YTA4MSwgMHgwMDAwLCAweDcwNzYsIDB4YTA4NSwKLQkweDAwMDEsIDB4NzkzMiwgMHg3MTMyLCAweDAwN2MsIDB4MGQ3ZSwgMHgxMDc4LCAweDU5YWQsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgyMDExLCAweDAwMDQsIDB4MjIwNCwgMHhhMDg1LCAweDgwMDIsIDB4MjAxMiwKLQkweDBkN2YsIDB4MDA3YywgMHgyMGUxLCAweDAwMDIsIDB4M2QwOCwgMHgyMGUxLCAweDIwMDAsIDB4M2QwMCwKLQkweGEwODQsIDB4NzAwMCwgMHgwMDQwLCAweDUzODAsIDB4YTA4NiwgMHgxMDAwLCAweDAwYzAsIDB4NTNhYywKLQkweDIwZTEsIDB4MDAwMCwgMHgzZDAwLCAweGEwOTQsIDB4ZmYwMCwgMHg4MjE3LCAweGEwODQsIDB4ZjAwMCwKLQkweGEwODYsIDB4MzAwMCwgMHgwMGMwLCAweDUzOTAsIDB4MTA3OCwgMHg1NTcwLCAweDAwNzgsIDB4NTNhNywKLQkweDIwZTEsIDB4MDAwNCwgMHgzZDYwLCAweGQxYmMsIDB4MDBjMCwgMHg1Mzk3LCAweDNlNjAsIDB4YWM4NCwKLQkweDAwMGYsIDB4MDBjMCwgMHg1M2FjLCAweGFjODIsIDB4YWEwMCwgMHgwMDQ4LCAweDUzYWMsIDB4Njg1NCwKLQkweGFjMDIsIDB4MDBjOCwgMHg1M2FjLCAweDIwMDksIDB4MDA0NywgMHgxMDc4LCAweDc1NmMsIDB4N2ExYywKLQkweGQyODQsIDB4MDBjMCwgMHg1MzcyLCAweDAwN2MsIDB4YTAxNiwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3OCwKLQkweDUzYTcsIDB4MDA3OCwgMHg1M2FjLCAweDc4MWMsIDB4ZDA4YywgMHgwMDQwLCAweDUzZGIsIDB4MTU3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgyMGUxLCAweDMwMDAsIDB4M2QyMCwgMHgzZTI4LCAweGE1ODQsIDB4MDA3NiwKLQkweDAwYzAsIDB4NTNmMSwgMHhhNDg0LCAweDcwMDAsIDB4YTA4NiwgMHgxMDAwLCAweDAwYzAsIDB4NTNlMCwKLQkweDEwNzgsIDB4NTQwYywgMHgwMDQwLCAweDUzZjEsIDB4MjBlMSwgMHgzMDAwLCAweDc4MjgsIDB4NzgyOCwKLQkweDEwNzgsIDB4NTQyYSwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwgMHgyMDA5LCAweGE1YjMsIDB4MjEwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg1M2RjLCAweDAwN2MsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NTNkYiwKLQkweGE0ODQsIDB4NzAwMCwgMHgwMGMwLCAweDUzZjEsIDB4MTA3OCwgMHg1NDBjLCAweDAwNDAsIDB4NTQwMywKLQkweDcwMDAsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4ODEwMCwgMHgwMDQwLCAweDUzY2MsIDB4MDA3OCwKLQkweDU0MDMsIDB4MTA3OCwgMHhhMWVlLCAweGQ1YTQsIDB4MDA0MCwgMHg1M2ZmLCAweDEwNzgsIDB4MWFmNywKLQkweDIwZTEsIDB4OTAxMCwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMDc4LCAweDU0MDcsIDB4MTA3OCwKLQkweDU0MGMsIDB4Njg3ZiwgMHgwMDAwLCAweDIwZTEsIDB4MzAwMCwgMHg3ODI4LCAweDc4MjgsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwMDc4LCAweDUzZGIsIDB4YTQ4NCwgMHgwMWZmLCAweDY4N2UsIDB4YTAwNSwKLQkweDAwNDAsIDB4NTQxZSwgMHhhMDgwLCAweDAwMWYsIDB4YTA4NCwgMHgwM2Y4LCAweDgwYWMsIDB4MjBlMSwKLQkweDEwMDAsIDB4MmVhMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwgMHgwMDdjLCAweDIwYTksIDB4MDAwYywKLQkweDIwZTEsIDB4MTAwMCwgMHgyZWEwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweGEwODUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NTQxZCwgMHg3MDAwLCAweGEwODQsIDB4ZmYwMCwgMHhhMDhjLCAweGYwMDAsIDB4ODAwNywKLQkweGExOTYsIDB4MDAwMCwgMHgwMGMwLCAweDU0MzcsIDB4MDA3OCwgMHg1NjdjLCAweDAwN2MsIDB4YTE5NiwKLQkweDIwMDAsIDB4MDBjMCwgMHg1NDQ4LCAweDY5MDAsIDB4YTE4ZSwgMHgwMDAxLCAweDAwYzAsIDB4NTQ0NCwKLQkweDEwNzgsIDB4M2E0MywgMHgwMDc4LCAweDU0MzYsIDB4MTA3OCwgMHg1NDUwLCAweDAwNzgsIDB4NTQzNiwKLQkweGExOTYsIDB4ODAwMCwgMHgwMGMwLCAweDU0MzYsIDB4MTA3OCwgMHg1NzBjLCAweDAwNzgsIDB4NTQzNiwKLQkweDBjN2UsIDB4NzExMCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwgMHhhMTk2LCAweDAwMDEsIDB4MDA0MCwKLQkweDU0NWQsIDB4YTE5NiwgMHgwMDIzLCAweDAwYzAsIDB4NTU2OCwgMHhhMDhlLCAweDAwMjMsIDB4MDBjMCwKLQkweDU0OTIsIDB4MTA3OCwgMHg1N2IyLCAweDAwNDAsIDB4NTU2OCwgMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwKLQkweGEwOGUsIDB4MDIwMCwgMHgwMGMwLCAweDU0NzYsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTU2OCwKLQkweDIwMDksIDB4MDAxNSwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NTY4LCAweGEwOGUsIDB4MDIxNCwKLQkweDAwNDAsIDB4NTQ3ZSwgMHhhMDhlLCAweDAyMTAsIDB4MDBjMCwgMHg1NDg0LCAweDIwMDksIDB4MDAxNSwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU1NjgsIDB4YTA4ZSwgMHgwMTAwLCAweDAwYzAsIDB4NTU2OCwKLQkweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwgMHgwMDE2LCAweDEwNzgsIDB4NzU2YywKLQkweDAwNzgsIDB4NTU2OCwgMHhhMDhlLCAweDAwMjIsIDB4MDBjMCwgMHg1NTY4LCAweDcwMzAsIDB4YTA4ZSwKLQkweDAzMDAsIDB4MDBjMCwgMHg1NGEzLCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwKLQkweDAwMTcsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGUsIDB4MDUwMCwgMHgwMGMwLCAweDU0YWYsIDB4NzAzNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg1NTY4LCAweDIwMDksIDB4MDAxOCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDIwMTAsIDB4MDBjMCwgMHg1NGI3LCAweDIwMDksIDB4MDAxOSwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDIxMTAsIDB4MDBjMCwgMHg1NGJmLCAweDIwMDksIDB4MDAxYSwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDUyMDAsIDB4MDBjMCwgMHg1NGNiLCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwKLQkweDAwMWIsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGUsIDB4NTAwMCwgMHgwMGMwLCAweDU0ZDcsIDB4NzAzNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg1NTY4LCAweDIwMDksIDB4MDAxYywgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDEzMDAsIDB4MDBjMCwgMHg1NGRmLCAweDIwMDksIDB4MDAzNCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDEyMDAsIDB4MDBjMCwgMHg1NGViLCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1NjgsIDB4MjAwOSwKLQkweDAwMjQsIDB4MDA3OCwgMHg1NTM0LCAweGEwOGMsIDB4ZmYwMCwgMHhhMThlLCAweDI0MDAsIDB4MDBjMCwKLQkweDU0ZjUsIDB4MjAwOSwgMHgwMDJkLCAweDAwNzgsIDB4NTUzNCwgMHhhMDhjLCAweGZmMDAsIDB4YTE4ZSwKLQkweDUzMDAsIDB4MDBjMCwgMHg1NGZmLCAweDIwMDksIDB4MDAyYSwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDBmMDAsIDB4MDBjMCwgMHg1NTA3LCAweDIwMDksIDB4MDAyMCwgMHgwMDc4LCAweDU1MzQsIDB4YTA4ZSwKLQkweDUzMDAsIDB4MDBjMCwgMHg1NTBkLCAweDAwNzgsIDB4NTUyYSwgMHhhMDhlLCAweDYxMDQsIDB4MDBjMCwKLQkweDU1MmEsIDB4MjAxMSwgMHhhODhkLCAweDgyMDgsIDB4MjIwNCwgMHhhMDgyLCAweDAwMDQsIDB4MjBhOCwKLQkweDk1YWMsIDB4OTVhYywgMHgyMDExLCAweDgwMTUsIDB4MjExYywgMHg4MTA4LCAweDA0N2UsIDB4MjEyNCwKLQkweDEwNzgsIDB4MzU3OSwgMHgwNDdmLCAweDgxMDgsIDB4MDBmMCwgMHg1NTFhLCAweDIwMDksIDB4MDAyMywKLQkweDAwNzgsIDB4NTUzNCwgMHhhMDhlLCAweDYwMDAsIDB4MDBjMCwgMHg1NTMyLCAweDIwMDksIDB4MDAzZiwKLQkweDAwNzgsIDB4NTUzNCwgMHgyMDA5LCAweDAwMWQsIDB4MDE3ZSwgMHgyMDExLCAweGE4ODMsIDB4MjIwNCwKLQkweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHg1NTZhLCAweDEwNzgsIDB4NDQ5OSwKLQkweDAwYzAsIDB4NTU2YSwgMHg2NjEyLCAweDY1MTYsIDB4ODZmZiwgMHgwMDQwLCAweDU1NWEsIDB4MDE3ZiwKLQkweDAxN2UsIDB4YTE4NiwgMHgwMDE3LCAweDAwYzAsIDB4NTU1YSwgMHg2ODY4LCAweGE2MDYsIDB4MDBjMCwKLQkweDU1NWEsIDB4Njg2YywgMHhhNTA2LCAweGEwODQsIDB4ZmYwMCwgMHgwMGMwLCAweDU1NWEsIDB4NjAwMCwKLQkweGMwZjUsIDB4NjAwMiwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDU1NmQsIDB4MDE3ZiwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMTdmLCAweDEwNzgsIDB4NzU2YywKLQkweDBjN2YsIDB4MDA3YywgMHgwMTdmLCAweDAwNzgsIDB4NTU2OCwgMHgwYzdmLCAweDAwNzgsIDB4NTU2YSwKLQkweDBjN2UsIDB4MTA3OCwgMHg1NWQ0LCAweDAwYzAsIDB4NTVkMiwgMHhhMTg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwOCwgMHgwMGMwLCAweDU1ZDIsIDB4YTI4ZSwgMHgwMDMzLCAweDAwYzAsIDB4NTVhMywKLQkweDEwNzgsIDB4NTdiMiwgMHgwMDQwLCAweDU1ZDIsIDB4NzEyNCwgMHg2MTBhLCAweDcwMzAsIDB4YTA4ZSwKLQkweDAyMDAsIDB4MDBjMCwgMHg1NTk1LCAweDcwMzQsIDB4YTAwNSwgMHgwMGMwLCAweDU1ZDIsIDB4MjAwOSwKLQkweDAwMTUsIDB4MTA3OCwgMHg3NTZjLCAweDAwNzgsIDB4NTVkMiwgMHhhMDhlLCAweDAxMDAsIDB4MDBjMCwKLQkweDU1ZDIsIDB4NzAzNCwgMHhhMDA1LCAweDAwYzAsIDB4NTVkMiwgMHgyMDA5LCAweDAwMTYsIDB4MTA3OCwKLQkweDc1NmMsIDB4MDA3OCwgMHg1NWQyLCAweGEyOGUsIDB4MDAzMiwgMHgwMGMwLCAweDU1ZDIsIDB4NzAzMCwKLQkweGEwOGUsIDB4MTQwMCwgMHgwMGMwLCAweDU1ZDIsIDB4MjAwOSwgMHgwMDM4LCAweDAxN2UsIDB4MjAxMSwKLQkweGE4ODMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MTA3OCwgMHgyNGUzLCAweDAwYzAsIDB4NTVkMSwKLQkweDEwNzgsIDB4NDQ5OSwgMHgwMGMwLCAweDU1ZDEsIDB4NjYxMiwgMHg2NTE2LCAweDBjN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDA0MCwgMHg1NWQwLCAweDAxN2YsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwKLQkweDYxMGEsIDB4MDE3ZiwgMHgxMDc4LCAweDc1NmMsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NTVkMiwKLQkweDBjN2YsIDB4MDE3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGY3ZSwgMHgwZDdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgxNTdlLCAweDNjMDAsIDB4MDA3ZSwgMHgyMDc5LCAweDAwMzAsIDB4MjA2OSwKLQkweDAyMDAsIDB4MTA3OCwgMHgxYzI1LCAweDAwYzAsIDB4NTYxNSwgMHgxMDc4LCAweDFiMTUsIDB4MDA0MCwKLQkweDU2MWYsIDB4NzkwOCwgMHhhMThjLCAweDFmZmYsIDB4YTE4MiwgMHgwMDExLCAweDAwYzgsIDB4NTYxZiwKLQkweDIwYTksIDB4MDAwYywgMHgyMGUxLCAweDAwMDAsIDB4MmVhMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwKLQkweDIwZTEsIDB4MjAwMCwgMHgyMDAxLCAweDAyMGEsIDB4MjAwNCwgMHg3YTBjLCAweDc4MDgsIDB4YTA4MCwKLQkweDAwMDcsIDB4YTA4NCwgMHgxZmY4LCAweGEwOGEsIDB4MDE0MCwgMHgxMGM4LCAweDEzMjgsIDB4ODBhYywKLQkweDIwZTEsIDB4NjAwMCwgMHgyMDk5LCAweDAyMGEsIDB4NTNhNSwgMHgyMGUxLCAweDcwMDAsIDB4NjgyOCwKLQkweDY4MjgsIDB4NzgwMywgMHgwMDA0LCAweGEyOTQsIDB4MDA3MCwgMHgwMDdmLCAweDIwZTAsIDB4MTU3ZiwKLQkweDE0N2YsIDB4MTM3ZiwgMHgwMTdmLCAweDAyN2YsIDB4MGQ3ZiwgMHgwZjdmLCAweDAwN2MsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg1NjE1LCAweDA0N2UsIDB4MGU3ZSwgMHgwZDdlLCAweDIwMjgsIDB4MjEzMCwKLQkweGE2OTYsIDB4MDBmZiwgMHgwMGMwLCAweDU2NDQsIDB4YTU5NiwgMHhmZmZkLCAweDAwYzAsIDB4NTYzNCwKLQkweDIwMDksIDB4MDA3ZiwgMHgwMDc4LCAweDU2NzcsIDB4YTU5NiwgMHhmZmZlLCAweDAwYzAsIDB4NTYzYywKLQkweDIwMDksIDB4MDA3ZSwgMHgwMDc4LCAweDU2NzcsIDB4YTU5NiwgMHhmZmZjLCAweDAwYzAsIDB4NTY0NCwKLQkweDIwMDksIDB4MDA4MCwgMHgwMDc4LCAweDU2NzcsIDB4MjAxMSwgMHgwMDAwLCAweDIwMjEsIDB4MDA4MSwKLQkweDIwYTksIDB4MDA3ZSwgMHgyMDcxLCAweGE0YjUsIDB4MmUxYywgMHg4M2ZmLCAweDAwYzAsIDB4NTY1NiwKLQkweDgyZmYsIDB4MDBjMCwgMHg1NjZiLCAweDI0MTAsIDB4MDA3OCwgMHg1NjZiLCAweDIzNjgsIDB4NmYxMCwKLQkweDAwN2UsIDB4MjEwMCwgMHhhNzA2LCAweDAwN2YsIDB4NmIxNCwgMHgwMGMwLCAweDU2NjUsIDB4YTM0NiwKLQkweDAwYzAsIDB4NTY2NSwgMHgyNDA4LCAweDAwNzgsIDB4NTY3NywgMHg4N2ZmLCAweDAwYzAsIDB4NTY2YiwKLQkweDgzZmYsIDB4MDA0MCwgMHg1NjUwLCAweDg0MjAsIDB4OGU3MCwgMHgwMGYwLCAweDU2NGMsIDB4ODJmZiwKLQkweDAwYzAsIDB4NTY3NiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg1Njc4LCAweDIyMDgsIDB4YTAwNiwKLQkweDBkN2YsIDB4MGU3ZiwgMHgwNDdmLCAweDAwN2MsIDB4YTA4NCwgMHgwMDA3LCAweDAwNzksIDB4NTY4MSwKLQkweDAwN2MsIDB4NTY4OSwgMHg1Njg5LCAweDU2ODksIDB4NTdjOCwgMHg1Njg5LCAweDU2OGEsIDB4NTZhMywKLQkweDU2ZjMsIDB4MDA3YywgMHg3MTEwLCAweGQxYmMsIDB4MDA0MCwgMHg1NmEyLCAweDcxMjAsIDB4MjE2MCwKLQkweGFjOGMsIDB4MDAwZiwgMHgwMGMwLCAweDU2YTIsIDB4YWM4YSwgMHhhYTAwLCAweDAwNDgsIDB4NTZhMiwKLQkweDY4NTQsIDB4YWMwMiwgMHgwMGM4LCAweDU2YTIsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA0NiwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDdjLCAweDBjN2UsIDB4NzExMCwgMHhkMWJjLCAweDAwYzAsIDB4NTZmMSwKLQkweDIwMTEsIDB4YTg4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwKLQkweDU2ZjEsIDB4MTA3OCwgMHg0NDk5LCAweDAwYzAsIDB4NTZmMSwgMHg2NjEyLCAweDY1MTYsIDB4NjAwMCwKLQkweGQwZWMsIDB4MDBjMCwgMHg1NmYxLCAweDYyMDQsIDB4YTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTI4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg1NmQ2LCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAxN2YsIDB4MDA0MCwKLQkweDU2ZjEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDYsIDB4NzEyMCwgMHg2MTBhLCAweDcxMzAsIDB4NjEyMiwKLQkweDIwMDksIDB4MDA0NCwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NmYxLCAweDBjN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDU2ZjEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwKLQkweDYxMGEsIDB4YTI4NiwgMHgwMDA0LCAweDAwYzAsIDB4NTZlOSwgMHg2MDA3LCAweDAwMDUsIDB4MDA3OCwKLQkweDU2ZWIsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MTA3OCwKLQkweDYxMDksIDB4MGM3ZiwgMHgwMDdjLCAweDcxMTAsIDB4ZDFiYywgMHgwMDQwLCAweDU3MGIsIDB4NzAyMCwKLQkweDIwNjAsIDB4YWM4NCwgMHgwMDBmLCAweDAwYzAsIDB4NTcwYiwgMHhhYzgyLCAweGFhMDAsIDB4MDA0OCwKLQkweDU3MGIsIDB4Njg1NCwgMHhhYzAyLCAweDAwYzgsIDB4NTcwYiwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwKLQkweDAwNDUsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4NzExMCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGExOGUsIDB4MDAwMCwgMHgwMGMwLCAweDU3MWMsIDB4YTA4NCwgMHgwMDBmLCAweGEwOGEsIDB4MDAwNiwKLQkweDAwYzgsIDB4NTcxYywgMHgxMDc5LCAweDU3MWQsIDB4MDA3YywgMHg1NzIzLCAweDU3MjQsIDB4NTcyMywKLQkweDU3MjMsIDB4NTc5NCwgMHg1N2EzLCAweDAwN2MsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTcyYywKLQkweDcwMmMsIDB4ZDA4NCwgMHgwMDQwLCAweDU3OTMsIDB4NzAwYywgMHg3MTA4LCAweDEwNzgsIDB4MjRlMywKLQkweDAwYzAsIDB4NTc5MywgMHgxMDc4LCAweDQ0OTksIDB4MDBjMCwgMHg1NzkzLCAweDY2MTIsIDB4NjUxNiwKLQkweDYyMDQsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTc1ZSwgMHhhMjhjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg1NzQ3LCAweGExODYsIDB4MDAwNiwgMHgwMGMwLCAweDU3ODQsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NTdiMiwgMHgwYzdmLCAweDAwNDAsIDB4NTc5MywgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDAxN2YsIDB4MDA0MCwgMHg1NzkzLCAweDYxMWEsIDB4NjAxZiwgMHgwMDAyLCAweDcxMjAsIDB4NjEwYSwKLQkweDIwMDksIDB4MDA4OCwgMHgxMDc4LCAweDc1NmMsIDB4MDA3OCwgMHg1NzkzLCAweGEyOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAwNiwgMHgwMDQwLCAweDU3NzMsIDB4YTE4NiwgMHgwMDA0LCAweDAwNDAsIDB4NTc3MywKLQkweGEyOTQsIDB4ZmYwMCwgMHg4MjE3LCAweGEyODYsIDB4MDAwNCwgMHgwMDQwLCAweDU3NzMsIDB4YTI4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg1Nzg0LCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDAxN2YsIDB4MDA0MCwKLQkweDU3OTMsIDB4NjExYSwgMHg2MDFmLCAweDAwMDUsIDB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OCwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDU3OTMsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwKLQkweDAwNDAsIDB4NTc5MywgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwKLQkweDAwMDEsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4NzExMCwgMHhkMWJjLCAweDAwNDAsIDB4NTdhMiwKLQkweDEwNzgsIDB4NTdiMiwgMHgwMDQwLCAweDU3YTIsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OSwKLQkweDEwNzgsIDB4NzU2YywgMHgwMDdjLCAweDcxMTAsIDB4ZDFiYywgMHgwMDQwLCAweDU3YjEsIDB4MTA3OCwKLQkweDU3YjIsIDB4MDA0MCwgMHg1N2IxLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwOGEsIDB4MTA3OCwKLQkweDc1NmMsIDB4MDA3YywgMHg3MDIwLCAweDIwNjAsIDB4YWM4NCwgMHgwMDBmLCAweDAwYzAsIDB4NTdjNSwKLQkweGFjODIsIDB4YWEwMCwgMHgwMDQ4LCAweDU3YzUsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwKLQkweDAwYzgsIDB4NTdjNSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4NTdjNCwKLQkweDcxMTAsIDB4ZDFiYywgMHgwMGMwLCAweDU3ZGUsIDB4NzAyNCwgMHgyMDYwLCAweGFjODQsIDB4MDAwZiwKLQkweDAwYzAsIDB4NTdkZSwgMHhhYzgyLCAweGFhMDAsIDB4MDA0OCwgMHg1N2RlLCAweDY4NTQsIDB4YWMwMiwKLQkweDAwYzgsIDB4NTdkZSwgMHgyMDA5LCAweDAwNTEsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4MjA3MSwKLQkweGE1YmUsIDB4NzAwMywgMHgwMDAzLCAweDcwMGYsIDB4MDM2MSwgMHhhMDA2LCAweDcwMWEsIDB4NzAxMiwKLQkweDcwMTcsIDB4YWEwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNiwgMHg3MDJiLCAweDZjNGUsIDB4NzAzMiwKLQkweDcwMzcsIDB4NmNhMCwgMHg3MDNiLCAweDAwMDIsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4ZmZmZiwKLQkweDcwNDcsIDB4ZmZmZiwgMHgwMDdjLCAweDIwNzEsIDB4YTViZSwgMHgwMGUwLCAweDU4YzEsIDB4MjA5MSwKLQkweDYwMDAsIDB4NzAwYywgMHg4MDAxLCAweDcwMGUsIDB4MDBjMCwgMHg1ODczLCAweDcwMGYsIDB4MDM2MSwKLQkweDcwMDcsIDB4MDAwMSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg3MTM4LCAweDgxMDksIDB4NzEzYSwKLQkweDAwYzAsIDB4NTg3MSwgMHg3MDNiLCAweDAwMDIsIDB4MjAwOSwgMHgwMTAwLCAweDIxMDQsIDB4YTA4MiwKLQkweDAwMDMsIDB4MDBjOCwgMHg1ODcxLCAweDcwM2MsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NTg0ZSwKLQkweDBkN2UsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAwNDAsIDB4NTgyYywKLQkweDY4MDMsIDB4MTAwMCwgMHgwMDc4LCAweDU4MzMsIDB4NjgwNCwgMHhhMDg0LCAweDEwMDAsIDB4MDA0MCwKLQkweDU4MzMsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwgMHg3MDNmLCAweDAwMDAsIDB4MjA2OSwKLQkweGE1YWIsIDB4NjgwNCwgMHhhMDgyLCAweDAwMDYsIDB4MDBjMCwgMHg1ODQwLCAweDY4MDcsIDB4MDAwMCwKLQkweDY4MzAsIDB4YTA4MiwgMHgwMDAzLCAweDAwYzAsIDB4NTg0NywgMHg2ODMzLCAweDAwMDAsIDB4MTA3OCwKLQkweDYxMDksIDB4MTA3OCwgMHg2MWQzLCAweDBkN2YsIDB4MDA3OCwgMHg1ODcxLCAweDBkN2UsIDB4MjA2OSwKLQkweGEzMDAsIDB4Njk0NCwgMHg2ODYwLCAweGExMDIsIDB4MDBjOCwgMHg1ODcwLCAweDIwNjksIDB4YTVhYiwKLQkweDY4MDQsIDB4YTA4NiwgMHgwMDAwLCAweDAwYzAsIDB4NTg3MCwgMHg2ODMwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4NTg3MCwgMHg3MDNmLCAweDAwMDEsIDB4NjgwNywgMHgwMDA2LCAweDY4MzMsIDB4MDAwMywKLQkweDIwNjksIDB4MDEwMCwgMHg2ODMwLCAweDY4OWUsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDMsIDB4MDYwMCwKLQkweDBkN2YsIDB4MDA3OCwgMHg1ODc2LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDcwMjQsIDB4YTAwZCwKLQkweDAwNDAsIDB4NTg4ZSwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHgwMGMwLCAweDU4OGUsIDB4NzAyMywKLQkweDAwMDksIDB4ODEwOSwgMHg3MTI2LCAweGExODYsIDB4MDNlOCwgMHgwMGMwLCAweDU4ODksIDB4NzAyOCwKLQkweDEwN2EsIDB4ODFmZiwgMHgwMGMwLCAweDU4OGUsIDB4NzAyOCwgMHgxMDdhLCAweDcwMzAsIDB4YTAwZCwKLQkweDAwNDAsIDB4NTg5ZiwgMHg3MDJjLCAweDgwMDEsIDB4NzAyZSwgMHgwMGMwLCAweDU4OWYsIDB4NzAyZiwKLQkweDAwMDksIDB4ODEwOSwgMHg3MTMyLCAweDAwYzAsIDB4NTg5ZiwgMHg3MDM0LCAweDEwN2EsIDB4NzA0MCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1OGE3LCAweDAwNTAsIDB4NThhNywgMHg4MDAxLCAweDcwNDIsIDB4NzA0NCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1OGFmLCAweDAwNTAsIDB4NThhZiwgMHg4MDAxLCAweDcwNDYsIDB4NzAxOCwKLQkweGEwMGQsIDB4MDA0MCwgMHg1OGMwLCAweDcwMDgsIDB4ODAwMSwgMHg3MDBhLCAweDAwYzAsIDB4NThjMCwKLQkweDcwMGIsIDB4MDAwOSwgMHg4MTA5LCAweDcxMWEsIDB4MDBjMCwgMHg1OGMwLCAweDcwMWMsIDB4MTA3YSwKLQkweDEyN2YsIDB4NzAwNCwgMHgwMDc5LCAweDU4YzQsIDB4NThlYiwgMHg1OGVjLCAweDU5MDgsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTViZSwgMHg3MDE4LCAweGEwMDUsIDB4MDBjMCwgMHg1OGQyLCAweDcxMWEsIDB4NzIxZSwKLQkweDcwMGIsIDB4MDAwOSwgMHgwZTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwMDdlLCAweDIwNzEsIDB4YTViZSwKLQkweDcwMWMsIDB4YTIwNiwgMHgwMGMwLCAweDU4ZGUsIDB4NzAxYSwgMHg3MDFlLCAweDAwN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE1YmUsIDB4NjA4OCwgMHhhMTAyLCAweDAwNDgsIDB4NThlOSwKLQkweDYxOGEsIDB4MGU3ZiwgMHgwMDdjLCAweDAwN2MsIDB4NzExMCwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwKLQkweDU4ZmUsIDB4NjA4OCwgMHg4MDAxLCAweDAwNDgsIDB4NThmZSwgMHg2MDhhLCAweDAwYzAsIDB4NThmZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDgxMDgsIDB4YTE4MiwKLQkweDAwZmYsIDB4MDA0OCwgMHg1OTA2LCAweGEwMGUsIDB4NzAwNywgMHgwMDAyLCAweDcxMTIsIDB4MDA3YywKLQkweDcwMTQsIDB4MjA2MCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwKLQkweDU5MTcsIDB4ODAwMSwgMHg2MDNlLCAweDAwYzAsIDB4NTkxNywgMHgxMDc4LCAweDhjZDcsIDB4NjAxNCwKLQkweGEwMDUsIDB4MDA0MCwgMHg1OTQxLCAweDgwMDEsIDB4NjAxNiwgMHgwMGMwLCAweDU5NDEsIDB4NjExYywKLQkweGExODYsIDB4MDAwMywgMHgwMDQwLCAweDU5MjgsIDB4YTE4NiwgMHgwMDA2LCAweDAwYzAsIDB4NTkzZiwKLQkweDYwMTAsIDB4MjA2OCwgMHg2ODU0LCAweGEwOGEsIDB4MTk5YSwgMHgwMDQ4LCAweDU5M2YsIDB4YTA4MiwKLQkweDE5OTksIDB4Njg1NiwgMHhhMDhhLCAweDE5OWEsIDB4MDA0OCwgMHg1OTM4LCAweDIwMDEsIDB4MTk5OSwKLQkweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwgMHgwMDc4LCAweDU5NDEsIDB4MTA3OCwKLQkweDg4MTAsIDB4MTI3ZiwgMHhhYzg4LCAweDAwMTAsIDB4NzExNiwgMHgyMDAxLCAweGNhMDAsIDB4YTEwMiwKLQkweDAwNDgsIDB4NTk0ZSwgMHg3MDE3LCAweGFhMDAsIDB4NzAwNywgMHgwMDAwLCAweDAwN2MsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTViZSwgMHg3MDI3LCAweDA3ZDAsIDB4NzAyMywgMHgwMDA5LCAweDcwM2IsIDB4MDAwMiwKLQkweDBlN2YsIDB4MDA3YywgMHgyMDAxLCAweGE1YzcsIDB4MjAwMywgMHgwMDAwLCAweDAwN2MsIDB4MGU3ZSwKLQkweDIwNzEsIDB4YTViZSwgMHg3MTMyLCAweDcwMmYsIDB4MDAwOSwgMHgwZTdmLCAweDAwN2MsIDB4MjAxMSwKLQkweGE1Y2EsIDB4MjAxMywgMHgwMDAwLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE1YmUsIDB4NzExYSwKLQkweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDBlN2YsIDB4MDA3YywgMHgwMjdlLCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzksIDB4YTMwMCwgMHg3YTM0LCAweGQyOTQsIDB4MDA0MCwgMHg1OWE0LCAweDIwNzEsIDB4YTVhYSwKLQkweDJlMTQsIDB4YTBmZSwgMHgwMDAwLCAweDAwNDAsIDB4NTk5MSwgMHhhMGZlLCAweDAwMDEsIDB4MDA0MCwKLQkweDU5OTUsIDB4YTBmZSwgMHgwMDAyLCAweDAwYzAsIDB4NTlhMCwgMHhhMjkyLCAweDAwODUsIDB4MDA3OCwKLQkweDU5OTcsIDB4YTI5MiwgMHgwMDA1LCAweDAwNzgsIDB4NTk5NywgMHhhMjkyLCAweDAwMDIsIDB4MjI3MiwKLQkweDAwNDAsIDB4NTk5YywgMHgwMGM4LCAweDU5YTQsIDB4MjAxMSwgMHg4MDM3LCAweDEwNzgsIDB4MzU3OSwKLQkweDIwMTEsIDB4YTVhOSwgMHgyMjA0LCAweDIwNzIsIDB4MGY3ZiwgMHgwZTdmLCAweDAyN2YsIDB4MDA3YywKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDBjN2YsIDB4MDA3YywgMHhhMTg0LCAweDAwMGYsIDB4ODAwMywKLQkweDgwMDMsIDB4ODAwMywgMHhhMDgwLCAweGE2MmQsIDB4MjA2MCwgMHgwMDdjLCAweDY4NTQsIDB4YTA4YSwKLQkweDE5OWEsIDB4MDA0OCwgMHg1OWJkLCAweDIwMDEsIDB4MTk5OSwgMHhhMDA1LCAweDAwYzAsIDB4NTljYywKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDYwMTQsIDB4MGM3ZiwgMHhhMDA1LCAweDAwYzAsIDB4NTlkMSwKLQkweDIwMDEsIDB4MDAxZSwgMHgwMDc4LCAweDU5ZDEsIDB4YTA4ZSwgMHhmZmZmLCAweDAwYzAsIDB4NTlkMSwKLQkweGEwMDYsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwgMHg2MTE2LCAweDY4NGMsIDB4YTA4YywKLQkweDAwYzAsIDB4YTE4ZSwgMHgwMGMwLCAweDAwNDAsIDB4NWEyNCwgMHhkMGI0LCAweDAwYzAsIDB4NTllOCwKLQkweGQwYmMsIDB4MDBjMCwgMHg1YTE0LCAweDIwMDksIDB4MDAwNiwgMHgxMDc4LCAweDVhNDMsIDB4MDA3YywKLQkweGQwZmMsIDB4MDA0MCwgMHg1OWYzLCAweGEwODQsIDB4MDAwMywgMHgwMDQwLCAweDU5ZjMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDBjMCwgMHg1YTNjLCAweDYwMjQsIDB4ZDBkNCwgMHgwMDQwLCAweDU5ZmQsIDB4YzBkNCwKLQkweDYwMjYsIDB4Njg2MCwgMHg2MDJhLCAweDY4NWMsIDB4NjAyZSwgMHgyMDA5LCAweGEzNzMsIDB4MjEwNCwKLQkweGQwODQsIDB4MDA0MCwgMHg1YTBmLCAweDYxMTgsIDB4YTE4OCwgMHgwMDI3LCAweDIxMDQsIDB4ZDA4YywKLQkweDAwYzAsIDB4NWEwZiwgMHgyMDA5LCAweDAwNDIsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4MjAwOSwKLQkweDAwNDMsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4ZDBmYywgMHgwMDQwLCAweDVhMWYsIDB4YTA4NCwKLQkweDAwMDMsIDB4MDA0MCwgMHg1YTFmLCAweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDVhM2MsIDB4MjAwOSwKLQkweDAwNDIsIDB4MTA3OCwgMHg3NTZjLCAweDAwN2MsIDB4ZDBmYywgMHgwMDQwLCAweDVhMzIsIDB4YTA4NCwKLQkweDAwMDMsIDB4YTA4ZSwgMHgwMDAyLCAweDAwNDAsIDB4NWEzNiwgMHgyMDA5LCAweDAwNDEsIDB4MTA3OCwKLQkweDc1NmMsIDB4MDA3YywgMHgxMDc4LCAweDVhNDEsIDB4MDA3OCwgMHg1YTMxLCAweDIwMDksIDB4MDA0MywKLQkweDEwNzgsIDB4NzU2YywgMHgwMDc4LCAweDVhMzEsIDB4MjAwOSwgMHgwMDA0LCAweDEwNzgsIDB4NWE0MywKLQkweDAwN2MsIDB4MjAwOSwgMHgwMDAxLCAweDBkN2UsIDB4NjAxMCwgMHhhMGVjLCAweGYwMDAsIDB4MDA0MCwKLQkweDVhNmIsIDB4MjA2OCwgMHg2OTUyLCAweDY4MDAsIDB4NjAxMiwgMHhhMTg2LCAweDAwMDEsIDB4MDBjMCwKLQkweDVhNjUsIDB4Njk0YywgMHhhMThjLCAweDgxMDAsIDB4YTE4ZSwgMHg4MTAwLCAweDAwYzAsIDB4NWE2NSwKLQkweDBjN2UsIDB4MjA2MSwgMHhhNjJkLCAweDYyMDAsIDB4ZDI4YywgMHgwMGMwLCAweDVhNjQsIDB4NjIwNCwKLQkweDgyMTAsIDB4MDA0OCwgMHg1YTY0LCAweDYyMDYsIDB4MGM3ZiwgMHgxMDc4LCAweDQ5ODIsIDB4NjAxMCwKLQkweGEwNmQsIDB4MTBjMCwgMHg1OWI2LCAweDBkN2YsIDB4MDA3YywgMHgxNTdlLCAweDBjN2UsIDB4MjA2MSwKLQkweGE2MmQsIDB4NjAwMCwgMHg4MWZmLCAweDAwNDAsIDB4NWE3OCwgMHhhMjA1LCAweDAwNzgsIDB4NWE3OSwKLQkweGEyMDQsIDB4NjAwMiwgMHgwYzdmLCAweDE1N2YsIDB4MDA3YywgMHg2ODAwLCAweGQwOGMsIDB4MDBjMCwKLQkweDVhODksIDB4NjgwOCwgMHhhMDA1LCAweDAwNDAsIDB4NWE4OSwgMHg4MDAxLCAweDY4MGEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3YywgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwgMHg4MDA0LCAweDgwODYsIDB4ODE4ZSwKLQkweDAwYzgsIDB4NWE5MywgMHhhMjAwLCAweDAwZjAsIDB4NWE4ZSwgMHg4MDg2LCAweDgxOGUsIDB4MDA3YywKLQkweDE1N2UsIDB4MjBhOSwgMHgwMDEwLCAweGEwMDUsIDB4MDA0MCwgMHg1YWI5LCAweGExMWEsIDB4MDBjOCwKLQkweDVhYjksIDB4ODIxMywgMHg4MThkLCAweDAwNDgsIDB4NWFhYywgMHhhMTFhLCAweDAwYzgsIDB4NWFhZCwKLQkweDAwZjAsIDB4NWFhMSwgMHgwMDc4LCAweDVhYjEsIDB4YTExYSwgMHgyMzA4LCAweDgyMTAsIDB4MDBmMCwKLQkweDVhYTEsIDB4MDA3ZSwgMHgzMjAwLCAweGEwODQsIDB4ZjdmZiwgMHgyMDgwLCAweDAwN2YsIDB4MTU3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgzMjAwLCAweGEwODUsIDB4MDgwMCwgMHgwMDc4LCAweDVhYjUsIDB4MTI3ZSwKLQkweDIwOTEsIDB4MjIwMCwgMHgyMDc5LCAweGE1YWIsIDB4MTI3ZiwgMHgwZDdlLCAweDIwNjksIDB4YTVhYiwKLQkweDY4MDMsIDB4MDAwNSwgMHgyMDY5LCAweDAwMDQsIDB4MmQwNCwgMHhhMDg1LCAweDgwMDEsIDB4MjA2YSwKLQkweDBkN2YsIDB4MDA3YywgMHgwYzdlLCAweDYwMjcsIDB4MDAwMSwgMHg3ODA0LCAweGEwODQsIDB4MDAwNywKLQkweDAwNzksIDB4NWFkYSwgMHg1YWU0LCAweDViMDksIDB4NWI2NCwgMHg1YWVhLCAweDViMDksIDB4NWFlNCwKLQkweDVhZTIsIDB4NWFlMiwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NjEwOSwKLQkweDBjN2YsIDB4MDA3YywgMHg2MmMwLCAweDgyZmYsIDB4MDBjMCwgMHg1YWYwLCAweDBjN2YsIDB4MDA3YywKLQkweDIwMTEsIDB4NDEyOSwgMHgxMDc4LCAweDU4ZDQsIDB4NzgyOCwgMHhhMDkyLCAweDAwYzgsIDB4MDBjOCwKLQkweDVhZmYsIDB4ODAwMCwgMHg3ODJhLCAweDEwNzgsIDB4NDE2OCwgMHgwMDc4LCAweDVhZWUsIDB4MTA3OCwKLQkweDQxMjksIDB4NzgwNywgMHgwMDAzLCAweDc4MjcsIDB4MDAwMCwgMHg3ODJiLCAweDAwMDAsIDB4MDA3OCwKLQkweDVhZWUsIDB4MTA3OCwgMHg1OTVhLCAweDNjMDAsIDB4MDA3ZSwgMHgyMDExLCAweDAyMDksIDB4MjBlMSwKLQkweDQwMDAsIDB4MjIxNCwgMHgwMDdmLCAweDIwZTAsIDB4ODJmZiwgMHgwMDQwLCAweDViMjcsIDB4NjJjMCwKLQkweDgyZmYsIDB4MDBjMCwgMHg1YjI3LCAweDc4MmIsIDB4MDAwMCwgMHg3ODI0LCAweGEwNjUsIDB4MTA0MCwKLQkweDEzMjgsIDB4MjAwOSwgMHgwMDEzLCAweDEwNzgsIDB4NzU2YywgMHgwYzdmLCAweDAwN2MsIDB4MzkwMCwKLQkweGEwODIsIDB4YTZjZCwgMHgwMGM4LCAweDViMmUsIDB4MTA3OCwgMHg3MjhhLCAweDBjN2UsIDB4NzgyNCwKLQkweGEwNjUsIDB4MTA0MCwgMHgxMzI4LCAweDc4MDQsIDB4YTA4NiwgMHgwMDA0LCAweDAwNDAsIDB4NWJhOSwKLQkweDc4MjgsIDB4YTA5MiwgMHgyNzEwLCAweDAwYzgsIDB4NWI0NCwgMHg4MDAwLCAweDc4MmEsIDB4MGM3ZiwKLQkweDEwNzgsIDB4NmMzMywgMHgwMDc4LCAweDViMjUsIDB4NjEwNCwgMHhhMTg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDViNWIsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzBkNCwgMHgwZTdmLCAweGQwOGMsIDB4MDA0MCwKLQkweDViNWIsIDB4MGM3ZSwgMHgwZTdlLCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGEzMDAsIDB4MTA3OCwKLQkweDQxNzEsIDB4MGU3ZiwgMHgwYzdmLCAweDEwNzgsIDB4YTI0MSwgMHgyMDA5LCAweDAwMTQsIDB4MTA3OCwKLQkweDc1NmMsIDB4MGM3ZiwgMHgwMDc4LCAweDViMjUsIDB4MjAwMSwgMHhhNWM3LCAweDIwMDMsIDB4MDAwMCwKLQkweDYyYzAsIDB4ODJmZiwgMHgwMGMwLCAweDViNzgsIDB4NzgyYiwgMHgwMDAwLCAweDc4MjQsIDB4YTA2NSwKLQkweDEwNDAsIDB4MTMyOCwgMHgyMDA5LCAweDAwMTMsIDB4MTA3OCwgMHg3NWMzLCAweDBjN2YsIDB4MDA3YywKLQkweDBjN2UsIDB4MGQ3ZSwgMHgzOTAwLCAweGEwODIsIDB4YTZjZCwgMHgwMGM4LCAweDViODEsIDB4MTA3OCwKLQkweDcyOGEsIDB4NzgyNCwgMHhhMDA1LCAweDEwNDAsIDB4MTMyOCwgMHg3ODFjLCAweGEwNmQsIDB4MTA0MCwKLQkweDEzMjgsIDB4NjgwMCwgMHhjMGRjLCAweDY4MDIsIDB4NzkyNCwgMHgyMTYwLCAweDEwNzgsIDB4NzUzZCwKLQkweDY5M2MsIDB4ODFmZiwgMHgxMDQwLCAweDEzMjgsIDB4ODEwOSwgMHg2OTNlLCAweDY4NTQsIDB4YTAxNSwKLQkweDAwNDAsIDB4NWI5ZCwgMHg3YTFlLCAweDAwNzgsIDB4NWI5ZiwgMHg3OTE4LCAweDc5MWUsIDB4NzgwNywKLQkweDAwMDAsIDB4NzgyNywgMHgwMDAwLCAweDBkN2YsIDB4MGM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDViNzYsIDB4NjEwNCwgMHhhMTg2LCAweDAwMDIsIDB4MDA0MCwgMHg1YmI0LCAweGExODYsIDB4MDAwNCwKLQkweDAwNDAsIDB4NWJiNCwgMHgwMDc4LCAweDViMzgsIDB4NzgwOCwgMHhhYzA2LCAweDAwNDAsIDB4NWIzOCwKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDVjNDUsIDB4MGM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwKLQkweDViMjUsIDB4MGM3ZSwgMHg2MDI3LCAweDAwMDIsIDB4NjJjOCwgMHg4MmZmLCAweDAwYzAsIDB4NWJkYiwKLQkweDYyYzQsIDB4ODJmZiwgMHgwMGMwLCAweDViZGIsIDB4NzkzYywgMHhhMWU1LCAweDAwMDAsIDB4MDA0MCwKLQkweDViZDUsIDB4MjAwOSwgMHgwMDQ5LCAweDEwNzgsIDB4NzU2YywgMHgyMDExLCAweGE1Y2EsIDB4MjAxMywKLQkweDAwMDAsIDB4MGM3ZiwgMHgwMDdjLCAweDM5MDgsIDB4YTE5MiwgMHhhNmNkLCAweDAwYzgsIDB4NWJlMiwKLQkweDEwNzgsIDB4NzI4YSwgMHg2MDE3LCAweDAwMTAsIDB4NzkzYywgMHg4MWZmLCAweDAwNDAsIDB4NWJkNSwKLQkweDc5M2MsIDB4YTE4OCwgMHgwMDA3LCAweDIxMGMsIDB4YTE4ZSwgMHgwMDA2LCAweDAwYzAsIDB4NWJmNCwKLQkweDYwMTcsIDB4MDAxMiwgMHgwMDc4LCAweDViZDksIDB4NjAxNywgMHgwMDE2LCAweDAwNzgsIDB4NWJkOSwKLQkweDAwN2UsIDB4MDE3ZSwgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwKLQkweDJjMDgsIDB4MjA2MSwgMHhhNWFiLCAweDYwMjAsIDB4ODAwMCwgMHg2MDIyLCAweDYwMTAsIDB4YTAwNSwKLQkweDAwNDAsIDB4NWMxMywgMHhhMDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTEyLCAweDEyN2YsIDB4MGM3ZiwKLQkweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDYxMTYsIDB4NjExMiwgMHgwMDc4LCAweDVjMGUsIDB4MGQ3ZSwKLQkweDIwNjksIDB4YTVhYiwgMHg2MDAwLCAweGQwZDQsIDB4MDA0MCwgMHg1YzJjLCAweDY4MjAsIDB4ODAwMCwKLQkweDY4MjIsIDB4YTA4NiwgMHgwMDAxLCAweDAwYzAsIDB4NWMyNywgMHgyYzAwLCAweDY4MWUsIDB4NjgwNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDc5LCAweDYxMTEsIDB4YzBkNSwgMHg2MDAyLCAweDY4MTgsIDB4YTAwNSwKLQkweDAwNDAsIDB4NWMzZSwgMHg2MDU2LCAweDYwNWIsIDB4MDAwMCwgMHgwMDdlLCAweDJjMDAsIDB4NjgxYSwKLQkweDBkN2YsIDB4Njg1YSwgMHgyMDY5LCAweGE1YWIsIDB4MDA3OCwgMHg1YzFlLCAweDYwNTYsIDB4NjA1YSwKLQkweDJjMDAsIDB4NjgxYSwgMHg2ODFlLCAweDAwNzgsIDB4NWMxZSwgMHgwMDdlLCAweDAxN2UsIDB4MGM3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LCAweDIwNjEsIDB4YTVhYiwKLQkweDYwMjAsIDB4ODAwMCwgMHg2MDIyLCAweDYwMDgsIDB4YTAwNSwgMHgwMDQwLCAweDVjNjAsIDB4YTA4MCwKLQkweDAwMDMsIDB4MjEwMiwgMHg2MTBhLCAweDEyN2YsIDB4MGM3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MDA3YywKLQkweDYxMGUsIDB4NjEwYSwgMHgwMDc4LCAweDVjNWIsIDB4MGM3ZSwgMHg2MDBmLCAweDAwMDAsIDB4MmMwOCwKLQkweDIwNjEsIDB4YTVhYiwgMHg2MDM0LCAweGEwMDUsIDB4MDA0MCwgMHg1Yzc0LCAweGEwODAsIDB4MDAwMywKLQkweDIxMDIsIDB4NjEzNiwgMHgwYzdmLCAweDAwN2MsIDB4NjEzYSwgMHg2MTM2LCAweDAwNzgsIDB4NWM3MiwKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MDY3ZSwgMHgwMjdlLCAweDAxN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA3MSwgMHhhNWFiLCAweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDIwOTEsIDB4ODAwMCwKLQkweDhjZmYsIDB4MDA0MCwgMHg1Y2VkLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTIwNiwKLQkweDAwYzAsIDB4NWNlOCwgMHg4N2ZmLCAweDAwNDAsIDB4NWM5OSwgMHg2MDIwLCAweGExMDYsIDB4MDBjMCwKLQkweDVjZTgsIDB4NzAzYywgMHhhYzA2LCAweDAwYzAsIDB4NWNhYiwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwKLQkweDEwNzgsIDB4NmU2YywgMHg3MDMzLCAweDAwMDAsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4MDAwMCwKLQkweDcwNDcsIDB4MDAwMCwgMHgwMzdmLCAweDcwMzgsIDB4YWMzNiwgMHgwMGMwLCAweDVjYjEsIDB4NjYwYywKLQkweDc2M2EsIDB4NzAzNCwgMHhhYzM2LCAweDAwYzAsIDB4NWNiZiwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwKLQkweDVjYmQsIDB4MmYwMCwgMHg3MDM2LCAweDAwNzgsIDB4NWNiZiwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywKLQkweDA2N2UsIDB4MmMwMCwgMHhhZjA2LCAweDAwNDAsIDB4NWNjOCwgMHg3ZTBlLCAweDAwNzgsIDB4NWNjOSwKLQkweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDVjZTMsIDB4NjAxMCwKLQkweDIwNjgsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg1Y2Y3LCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4OGNiOCwgMHgxMDc4LCAweGExODEsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDEwNzgsIDB4OGMwMSwgMHgwYzdmLCAweDAwNzgsIDB4NWM4OCwKLQkweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDAwNzgsIDB4NWM4OCwgMHgxMjdmLCAweDAwN2YsIDB4MDE3ZiwKLQkweDAyN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwgMHgwZjdmLCAweDAwN2MsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDVjZDYsIDB4MTA3OCwgMHhhMTgxLCAweDEwNzgsIDB4OWU3MCwKLQkweDAwNzgsIDB4NWNlMywgMHgwMDdlLCAweDA2N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDBmN2UsIDB4MjAzMSwKLQkweDAwMDAsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHhhNWFiLCAweDc4MzgsIDB4YTA2NSwKLQkweDAwNDAsIDB4NWQ0MSwgMHg2MDBjLCAweDAwN2UsIDB4NjAwZiwgMHgwMDAwLCAweDc4M2MsIDB4YWMwNiwKLQkweDAwYzAsIDB4NWQyOCwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwgMHgxMDc4LCAweDZlNmMsIDB4NzgzMywKLQkweDAwMDAsIDB4NzgzZiwgMHgwMDAwLCAweDc4NDMsIDB4MDAwMCwgMHg3ODQ3LCAweDAwMDAsIDB4MDM3ZiwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDVkM2MsIDB4NjAxMCwgMHgyMDY4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDBjMCwgMHg1ZDRhLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwgMHg4YzAxLCAweDAwN2YsIDB4MDA3OCwKLQkweDVkMGYsIDB4N2UzYSwgMHg3ZTM2LCAweDEyN2YsIDB4MGY3ZiwgMHgwZDdmLCAweDBjN2YsIDB4MDY3ZiwKLQkweDAwN2YsIDB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDVkMzMsIDB4MTA3OCwKLQkweDllNzAsIDB4MDA3OCwgMHg1ZDNjLCAweDAxN2UsIDB4MDI3ZSwgMHgwODdlLCAweDIwNDEsIDB4MDAwMCwKLQkweDEwNzgsIDB4NWQ2ZCwgMHgxMDc4LCAweDVlMjEsIDB4MDg3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MTI3ZSwgMHgyMDc5LCAweGE1YWIsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NWViYywKLQkweDEwNzgsIDB4NWYzMiwgMHgxMjdmLCAweDBmN2YsIDB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MDY3ZSwgMHgwMTdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwMDQwLCAweDVlMDEsIDB4NjAxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEyMDYsIDB4MDBjMCwgMHg1ZGZjLCAweDg4ZmYsIDB4MDA0MCwKLQkweDVkOGQsIDB4NjAyMCwgMHhhMTA2LCAweDAwYzAsIDB4NWRmYywgMHg3MDI0LCAweGFjMDYsIDB4MDBjMCwKLQkweDVkYmQsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDVkYjgsIDB4MTA3OCwKLQkweDU5NWEsIDB4MTA3OCwgMHg2YzQxLCAweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywKLQkweDAwMDAsIDB4MDM3ZSwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwKLQkweDVkYWQsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwKLQkweGQwODQsIDB4MDA0MCwgMHg1ZGI1LCAweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDAwNzgsIDB4NWRiZCwKLQkweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwNzgsIDB4NWRmYywgMHg3MDE0LCAweGFjMzYsIDB4MDBjMCwKLQkweDVkYzMsIDB4NjYwYywgMHg3NjE2LCAweDcwMTAsIDB4YWMzNiwgMHgwMGMwLCAweDVkZDEsIDB4MmMwMCwKLQkweGFmMzYsIDB4MDA0MCwgMHg1ZGNmLCAweDJmMDAsIDB4NzAxMiwgMHgwMDc4LCAweDVkZDEsIDB4NzAxMywKLQkweDAwMDAsIDB4NjYwYywgMHgwNjdlLCAweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDVkZGEsIDB4N2UwZSwKLQkweDAwNzgsIDB4NWRkYiwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg1ZGY1LCAweDYwMWMsIDB4YTA4NiwgMHgwMDAzLCAweDAwYzAsIDB4NWUwYSwKLQkweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgxMDc4LCAweDhjYjgsIDB4MTA3OCwKLQkweGExODEsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDcwNDUsIDB4MGM3ZiwgMHgwMDc4LCAweDVkN2MsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwKLQkweDVkN2MsIDB4MTI3ZiwgMHgwMDdmLCAweDAxN2YsIDB4MDY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDVlMTUsIDB4MTA3OCwKLQkweGExODEsIDB4MTA3OCwgMHg5ZTcwLCAweDAwNzgsIDB4NWRmNSwgMHg2MDFjLCAweGEwODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4NWRmNSwgMHg2MDA0LCAweGEwODYsIDB4MDA4NSwgMHgwMDQwLCAweDVkZTgsIDB4MDA3OCwKLQkweDVkZjUsIDB4MGM3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweGEyODAsIDB4YTQzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwMDQwLCAweDVlYjgsIDB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MDY3ZSwKLQkweDIwNzEsIDB4YTVhYiwgMHg2NjU0LCAweDcwMTgsIDB4YWMwNiwgMHgwMGMwLCAweDVlMzgsIDB4NzYxYSwKLQkweDcwMWMsIDB4YWMwNiwgMHgwMGMwLCAweDVlNDQsIDB4ODZmZiwgMHgwMGMwLCAweDVlNDMsIDB4NzAxOCwKLQkweDcwMWUsIDB4MDA3OCwgMHg1ZTQ0LCAweDc2MWUsIDB4NjA1OCwgMHhhMDdkLCAweDAwNDAsIDB4NWU0OSwKLQkweDdlNTYsIDB4YTZlZCwgMHgwMDAwLCAweDAwNDAsIDB4NWU0ZiwgMHgyZjAwLCAweDY4NWEsIDB4NjA1NywKLQkweDAwMDAsIDB4NjA1YiwgMHgwMDAwLCAweDYwMDAsIDB4YzBkNCwgMHhjMGRjLCAweDYwMDIsIDB4MTA3OCwKLQkweDQ0MTAsIDB4MDA0MCwgMHg1ZWI0LCAweDc2MjQsIDB4ODZmZiwgMHgwMDQwLCAweDVlYTIsIDB4YTY4MCwKLQkweDAwMDQsIDB4MjAwNCwgMHhhZDA2LCAweDAwYzAsIDB4NWVhMiwgMHgwZDdlLCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDVlOTksIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NmM0MSwKLQkweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwgMHg1ZTgyLCAweDY4MDMsIDB4MDEwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NWU4YSwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDBkN2YsIDB4MGM3ZSwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwKLQkweDVlOTMsIDB4ODAwMSwgMHg2MDNlLCAweDI2NjAsIDB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4MDA3OCwKLQkweDVlYTIsIDB4MGQ3ZiwgMHgwYzdlLCAweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NWU1NywgMHg4ZGZmLCAweDAwNDAsIDB4NWViMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwKLQkweDY4NDcsIDB4MDAwMCwgMHgxMDc4LCAweDhjYjgsIDB4MTA3OCwgMHhhMTgxLCAweDEwNzgsIDB4NDk4MiwKLQkweDEwNzgsIDB4NzA0NSwgMHgwMDc4LCAweDVlNTcsIDB4MDY3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDEyN2YsIDB4MDA3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MDA3ZSwgMHgwNjdlLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDIwMzEsIDB4MDAwMCwgMHg3ODE0LCAweGEwNjUsIDB4MDA0MCwgMHg1ZjE2LCAweDYwMGMsIDB4MDA3ZSwKLQkweDYwMGYsIDB4MDAwMCwgMHg3ODI0LCAweGFjMDYsIDB4MDBjMCwgMHg1ZWZiLCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDVlZjUsIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NmM0MSwKLQkweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzgyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwgMHg1ZWVhLCAweDY4MDMsIDB4MDEwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NWVmMiwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDAwNzgsIDB4NWVmYiwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwKLQkweDJjMzAsIDB4MDA3OCwgMHg1ZjEzLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwKLQkweDVmMGYsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg1ZjFkLCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwKLQkweDhjMDEsIDB4MTA3OCwgMHg3MDQ1LCAweDAwN2YsIDB4MDA3OCwgMHg1ZWMzLCAweDdlMTYsIDB4N2UxMiwKLQkweDBkN2YsIDB4MGM3ZiwgMHgwNjdmLCAweDAwN2YsIDB4MDA3YywgMHg2MDFjLCAweGEwODYsIDB4MDAwNiwKLQkweDAwYzAsIDB4NWYyNiwgMHgxMDc4LCAweDllNzAsIDB4MDA3OCwgMHg1ZjBmLCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg1ZjBmLCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDAwNDAsIDB4NWYwNiwKLQkweDAwNzgsIDB4NWYwZiwgMHgwMDdlLCAweDA2N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDc4MTgsIDB4YTA2NSwKLQkweDAwNDAsIDB4NWZhMCwgMHg2MDU0LCAweDAwN2UsIDB4NjA1NywgMHgwMDAwLCAweDYwNWIsIDB4MDAwMCwKLQkweDYwMDAsIDB4YzBkNCwgMHhjMGRjLCAweDYwMDIsIDB4MTA3OCwgMHg0NDEwLCAweDAwNDAsIDB4NWY5ZCwKLQkweDdlMjQsIDB4ODZmZiwgMHgwMDQwLCAweDVmOGYsIDB4YTY4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwKLQkweDAwYzAsIDB4NWY4ZiwgMHgwZDdlLCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweGEwMDUsIDB4MDA0MCwKLQkweDVmODYsIDB4MTA3OCwgMHg1OTVhLCAweDEwNzgsIDB4NmM0MSwgMHg2OGMzLCAweDAwMDAsIDB4MTA3OCwKLQkweDcxODgsIDB4NzgyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4YTM4NCwKLQkweDEwMDAsIDB4MDA0MCwgMHg1ZjZmLCAweDY4MDMsIDB4MDEwMCwgMHg2ODAzLCAweDAwMDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NWY3NywgMHg2ODI3LCAweDAwMDEsIDB4MDM3ZiwKLQkweDBkN2YsIDB4MGM3ZSwgMHg2MDNjLCAweGEwMDUsIDB4MDA0MCwgMHg1ZjgwLCAweDgwMDEsIDB4NjAzZSwKLQkweDI2NjAsIDB4MTA3OCwgMHg4YzAxLCAweDBjN2YsIDB4MDA3OCwgMHg1ZjhmLCAweDBkN2YsIDB4MGM3ZSwKLQkweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MGM3ZiwgMHgwMDc4LCAweDVmNDQsIDB4OGRmZiwKLQkweDAwNDAsIDB4NWY5OSwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg3MDQ1LCAweDAwNzgsIDB4NWY0NCwgMHgwMDdmLCAweDAwNzgsIDB4NWYzNywKLQkweDc4MWUsIDB4NzgxYSwgMHgwZDdmLCAweDBjN2YsIDB4MDY3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MDY3ZSwgMHg2MDAwLCAweGQwZGMsIDB4MDA0MCwgMHg1ZmM0LCAweDYwNGMsIDB4YTA2ZCwKLQkweDAwNDAsIDB4NWZjNCwgMHg2ODQ4LCAweGE2MDYsIDB4MDBjMCwgMHg1ZmM0LCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMjQsIDB4YTAzNSwgMHgwMDQwLCAweDVmYzQsIDB4YTA4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwKLQkweDAwYzAsIDB4NWZjNCwgMHgxMDc4LCAweDVmYzgsIDB4MDY3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MjA3OSwgMHgwMTAwLCAweDc4YzAsIDB4YTAwNSwgMHgwMGMwLCAweDVmZDcsIDB4MGM3ZSwKLQkweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MGM3ZiwgMHgwMDc4LCAweDYwMGUsIDB4MTA3OCwKLQkweDZjNDEsIDB4NzhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwgMHg3MDI3LCAweDAwMDAsIDB4MDM3ZSwKLQkweDIwNzksIDB4MDE0MCwgMHg3YjA0LCAweGEzODQsIDB4MTAwMCwgMHgwMDQwLCAweDVmZWIsIDB4NzgwMywKLQkweDAxMDAsIDB4NzgwMywgMHgwMDAwLCAweDIwNzksIDB4MDEwMCwgMHg3ODI0LCAweGQwODQsIDB4MDA0MCwKLQkweDVmZjMsIDB4NzgyNywgMHgwMDAxLCAweDEwNzgsIDB4NzE4OCwgMHgwMzdmLCAweDEwNzgsIDB4NDQxMCwKLQkweDBjN2UsIDB4NjAzYywgMHhhMDA1LCAweDAwNDAsIDB4NWZmZiwgMHg4MDAxLCAweDYwM2UsIDB4MjY2MCwKLQkweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4OGNiOCwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwgMHg3MDQ1LCAweDBmN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MGM3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzAwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwKLQkweDYwMTksIDB4NjAyMywgMHg2MDI2LCAweDYwM2YsIDB4NjA1YiwgMHg2MGEwLCAweDYwMjMsIDB4NjAyMywKLQkweDYwMjEsIDB4MTA3OCwgMHgxMzI4LCAweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcwMjQsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjAzNCwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHg2MDBjLCAweGEwMTUsIDB4MDA0MCwKLQkweDYwM2IsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwKLQkweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcyMTYsIDB4NzIxMiwgMHgwMDc4LCAweDYwMzQsIDB4NjAxOCwKLQkweDIwNjAsIDB4MTA3OCwgMHg0NDEwLCAweDYwMDAsIDB4YzBkYywgMHg2MDAyLCAweDcwMjAsIDB4ODAwMSwKLQkweDcwMjIsIDB4MDA0MCwgMHg2MDUwLCAweDYwNTQsIDB4YTAxNSwgMHgwMDQwLCAweDYwNTcsIDB4NzIxZSwKLQkweDcwMDcsIDB4MDAwMCwgMHg3MDI3LCAweDAwMDAsIDB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzIxOCwKLQkweDcyMWUsIDB4MDA3OCwgMHg2MDUwLCAweDcwMjQsIDB4YTA2NSwgMHgwMDQwLCAweDYwOWQsIDB4NzAwYywKLQkweGFjMDYsIDB4MDBjMCwgMHg2MDcyLCAweDEwNzgsIDB4NzA0NSwgMHg2MDBjLCAweGEwMTUsIDB4MDA0MCwKLQkweDYwNmUsIDB4NzIwZSwgMHg2MDBmLCAweDAwMDAsIDB4MDA3OCwgMHg2MDliLCAweDcyMGUsIDB4NzIwYSwKLQkweDAwNzgsIDB4NjA5YiwgMHg3MDE0LCAweGFjMDYsIDB4MDBjMCwgMHg2MDg1LCAweDEwNzgsIDB4NzA0NSwKLQkweDYwMGMsIDB4YTAxNSwgMHgwMDQwLCAweDYwODEsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4MDA3OCwKLQkweDYwOWIsIDB4NzIxNiwgMHg3MjEyLCAweDAwNzgsIDB4NjA5YiwgMHg2MDE4LCAweDIwNjAsIDB4MTA3OCwKLQkweDQ0MTAsIDB4NjAwMCwgMHhjMGRjLCAweDYwMDIsIDB4MTA3OCwgMHg3MDQ1LCAweDcwMWMsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjA5YiwgMHg2MDU0LCAweGEwMTUsIDB4MDA0MCwgMHg2MDk5LCAweDcyMWUsIDB4MDA3OCwKLQkweDYwOWIsIDB4NzIxOCwgMHg3MjFlLCAweDcwMjcsIDB4MDAwMCwgMHgwYzdmLCAweDBlN2YsIDB4MDA3YywKLQkweDcwMjQsIDB4YTA2NSwgMHgwMDQwLCAweDYwYWQsIDB4MTA3OCwgMHg3MDQ1LCAweDYwMGMsIDB4YTAxNSwKLQkweDAwNDAsIDB4NjBiNCwgMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywKLQkweDAwMDAsIDB4MGM3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzIwZSwgMHg3MjBhLCAweDAwNzgsIDB4NjBhZCwKLQkweDBkN2UsIDB4MjA2OSwgMHhhNWFiLCAweDY4MzAsIDB4YTA4NCwgMHgwMDAzLCAweDAwNzksIDB4NjBjMCwKLQkweDYwYzYsIDB4NjBjOCwgMHg2MGVlLCAweDYwYzYsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2YsIDB4MDA3YywKLQkweDBjN2UsIDB4Njg0MCwgMHhhMDg2LCAweDAwMDEsIDB4MDA0MCwgMHg2MGU0LCAweDY4M2MsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjBkOSwgMHg2MDBjLCAweGEwMTUsIDB4MDA0MCwgMHg2MGUwLCAweDZhM2EsIDB4NjAwZiwKLQkweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywKLQkweDY4M2EsIDB4NjgzNiwgMHgwMDc4LCAweDYwZDksIDB4Njg0MywgMHgwMDAwLCAweDY4MzgsIDB4YTA2NSwKLQkweDAwNDAsIDB4NjBkOSwgMHg2MDAzLCAweDAwMDMsIDB4MDA3OCwgMHg2MGQ5LCAweDBjN2UsIDB4Njg0MywKLQkweDAwMDAsIDB4Njg0NywgMHgwMDAwLCAweDY4M2MsIDB4YTA2NSwgMHgwMDQwLCAweDYxMDYsIDB4NjAwYywKLQkweGEwMTUsIDB4MDA0MCwgMHg2MTAyLCAweDZhM2EsIDB4NjAwZiwgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwKLQkweDAwNzgsIDB4NjEwNiwgMHg2ODNmLCAweDAwMDAsIDB4NjgzYSwgMHg2ODM2LCAweDBjN2YsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgyMDY5LCAweGE1YWIsIDB4NjgwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwKLQkweDYxMTEsIDB4NjExYiwgMHg2MWMyLCAweDYxYzIsIDB4NjFjMiwgMHg2MWMyLCAweDYxYzQsIDB4NjFjMiwKLQkweDYxMTksIDB4MTA3OCwgMHgxMzI4LCAweDY4MjAsIDB4YTAwNSwgMHgwMGMwLCAweDYxMjEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHg2ODBjLCAweGEwNjUsIDB4MDA0MCwgMHg2MTMwLCAweDY4MDcsIDB4MDAwNCwKLQkweDY4MjYsIDB4NjgyYiwgMHgwMDAwLCAweDEwNzgsIDB4NjIwYSwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywKLQkweDY4MTQsIDB4YTA2NSwgMHgwMDQwLCAweDYxM2UsIDB4NjgwNywgMHgwMDAxLCAweDY4MjYsIDB4NjgyYiwKLQkweDAwMDAsIDB4MTA3OCwgMHg2MjBhLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MDM3ZSwKLQkweDZhMWMsIDB4YTJmNSwgMHgwMDAwLCAweDAwNDAsIDB4NjFiZCwgMHg3MDRjLCAweGEwMGQsIDB4MDA0MCwKLQkweDYxNGQsIDB4NzA4OCwgMHhhMDA1LCAweDAwNDAsIDB4NjE2NSwgMHg3MDU0LCAweGEwNzUsIDB4MDA0MCwKLQkweDYxNTYsIDB4YTIwZSwgMHgwMDQwLCAweDYxYmQsIDB4MDA3OCwgMHg2MTViLCAweDY4MTgsIDB4YTIwZSwKLQkweDAwNDAsIDB4NjFiZCwgMHgyMDcwLCAweDcwNGMsIDB4YTAwZCwgMHgwMDQwLCAweDYxNGQsIDB4NzA4OCwKLQkweGEwMDUsIDB4MDBjMCwgMHg2MTRkLCAweDJlMDAsIDB4NjgxZSwgMHg3MzNjLCAweDcwMzgsIDB4YTMwMiwKLQkweDAwYzgsIDB4NjE0ZCwgMHgxMDc4LCAweDc1MGMsIDB4MDA0MCwgMHg2MWJkLCAweDgzMTgsIDB4NzMzZSwKLQkweDYxMTIsIDB4MmUxMCwgMHg2MjFhLCAweGExODAsIDB4MDAxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwKLQkweDYwMzIsIDB4YTE4MCwgMHgwMDE0LCAweDIwMDMsIDB4MDAwMCwgMHhhMTgwLCAweDAwMTUsIDB4MjAwNCwKLQkweGEwOGEsIDB4MTk5YSwgMHgwMDQ4LCAweDYxODYsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsIDB4ODAxYiwKLQkweDgzMWIsIDB4YTMxOCwgMHg2MzE2LCAweDAzN2YsIDB4MGY3ZSwgMHgyYzc4LCAweDcxYTAsIDB4ZDFiYywKLQkweDAwNDAsIDB4NjE5ZiwgMHg3MTAwLCAweGQxZjQsIDB4MDA0MCwgMHg2MTliLCAweDcxMTQsIDB4YTE4YywKLQkweDAwZmYsIDB4MDA3OCwgMHg2MWE0LCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDYxYTQsIDB4YTFlMCwKLQkweDI5M2YsIDB4MmMwYywgMHhhMThjLCAweDAwZmYsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4MTA3OCwKLQkweDY3OWIsIDB4NzMwMCwgMHhjM2RkLCAweDczMDIsIDB4NjgwNywgMHgwMDAyLCAweDJmMTgsIDB4NmIyNiwKLQkweDY4MmIsIDB4MDAwMCwgMHg3ODFmLCAweDAwMDMsIDB4NzgwMywgMHgwMDAxLCAweDc4MDcsIDB4MDA0MCwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MDA3YywgMHgwMzdmLCAweDBlN2YsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NjFiYiwgMHgwZDdmLCAweDAwN2MsIDB4MGM3ZSwgMHg2ODBjLCAweGEwNjUsIDB4MDA0MCwKLQkweDYxZDAsIDB4NjgwNywgMHgwMDA0LCAweDY4MjYsIDB4NjgyYiwgMHgwMDAwLCAweDEwNzgsIDB4NjIwYSwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGQ3ZSwgMHgyMDY5LCAweGE1YWIsIDB4NjgzMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMGMwLCAweDYxZjEsIDB4NjgzOCwgMHhhMDdkLCAweDAwNDAsIDB4NjFmMSwKLQkweDY4MzMsIDB4MDAwMSwgMHg2ODNlLCAweDY4NDcsIDB4MDAwMCwgMHgxMjdlLCAweDBmN2UsIDB4MjA5MSwKLQkweDIyMDAsIDB4MDI3ZiwgMHgxMDc4LCAweDFkMjgsIDB4MDBjMCwgMHg2MWY0LCAweDEyN2YsIDB4MTA3OCwKLQkweDZhZTUsIDB4MGQ3ZiwgMHgwZjdmLCAweDAwN2MsIDB4MTI3ZiwgMHg2ODQzLCAweDAwMDAsIDB4NzgwMywKLQkweDAwMDIsIDB4NzgwYywgMHhhMDE1LCAweDAwNDAsIDB4NjIwNiwgMHg2YTNhLCAweDc4MGYsIDB4MDAwMCwKLQkweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MDA3OCwgMHg2MWYxLCAweDY4M2EsIDB4NjgzNiwKLQkweDAwNzgsIDB4NjIwMCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDYyMTAsIDB4MDA3YywKLQkweDYyMTksIDB4NjIxZSwgMHg2NjNmLCAweDY3NTgsIDB4NjIxZSwgMHg2NjNmLCAweDY3NTgsIDB4NjIxOSwKLQkweDYyMWUsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDE1N2UsIDB4MTM3ZSwKLQkweDE0N2UsIDB4MGM3ZSwgMHgwZjdlLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwKLQkweDYxMTgsIDB4MjE3OCwgMHg3OWEwLCAweGQxYmMsIDB4MDA0MCwgMHg2MjNiLCAweDc5MDAsIDB4ZDFmNCwKLQkweDAwNDAsIDB4NjIzNywgMHg3OTE0LCAweGExOGMsIDB4MDBmZiwgMHgwMDc4LCAweDYyNDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDA3OCwgMHg2MjQwLCAweGExZjgsIDB4MjkzZiwgMHgyZjBjLCAweGExOGMsIDB4MDBmZiwKLQkweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4YSwgMHgwMDQwLCAweDAwYzgsIDB4NjI5MiwKLQkweDEwNzksIDB4NjI1MCwgMHgwZjdmLCAweDBjN2YsIDB4MTQ3ZiwgMHgxMzdmLCAweDE1N2YsIDB4MDA3YywKLQkweDYyZjgsIDB4NjM0MCwgMHg2MzY4LCAweDY0MDMsIDB4NjQzMywgMHg2NDNiLCAweDY0NjIsIDB4NjQ3MywKLQkweDY0ODQsIDB4NjQ4YywgMHg2NGE0LCAweDY0OGMsIDB4NjUwZiwgMHg2NDczLCAweDY1MzAsIDB4NjUzOCwKLQkweDY0ODQsIDB4NjUzOCwgMHg2NTQ5LCAweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NjI5MCwKLQkweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDYyOTAsIDB4NjI5MCwgMHg2MjkwLCAweDZkMDUsIDB4NmQyYSwKLQkweDZkM2YsIDB4NmQ2MiwgMHg2ZDgzLCAweDY0NjIsIDB4NjI5MCwgMHg2NDYyLCAweDY0OGMsIDB4NjI5MCwKLQkweDYzNjgsIDB4NjQwMywgMHg2MjkwLCAweDcyYWMsIDB4NjQ4YywgMHg2MjkwLCAweDcyY2MsIDB4NjQ4YywKLQkweDYyOTAsIDB4NjI5MCwgMHg2MmYzLCAweDYyYTEsIDB4NjI5MCwgMHg3MmYxLCAweDczNjgsIDB4NzQ1MCwKLQkweDYyOTAsIDB4NzQ2MSwgMHg2NDVjLCAweDc0N2QsIDB4NjI5MCwgMHg2ZDk4LCAweDYyOTAsIDB4NjI5MCwKLQkweDEwNzgsIDB4MTMyOCwgMHgyMTAwLCAweDEwNzksIDB4NjI5YiwgMHgwZjdmLCAweDBjN2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwMDdjLCAweDYyOWYsIDB4NjI5ZiwgMHg2MjlmLCAweDYyZDUsIDB4MTA3OCwKLQkweDEzMjgsIDB4MGQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTY3LCAweDc4MTAsIDB4MjA2OCwKLQkweDIwYTMsIDB4MjQxNCwgMHgyMGEzLCAweDAwMTgsIDB4MjBhMywgMHgwODAwLCAweDY4M2MsIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDY4NTAsIDB4MjBhMiwgMHg2ODU0LCAweDIwYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxOCwgMHgxMDc4LCAweDZjMmQsIDB4MGQ3ZiwgMHgwMDdjLCAweDBkN2UsIDB4NzgxOCwKLQkweDIwNjgsIDB4NjhhMCwgMHhhMDgyLCAweDAwN2UsIDB4MDA0OCwgMHg2MmQyLCAweGEwODUsIDB4MDAwMSwKLQkweDBkN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4NjJkMCwgMHgwZDdlLCAweDIwYTEsIDB4MDIwYiwKLQkweDEwNzgsIDB4NjU2NywgMHgyMGEzLCAweDA1MDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MTAsIDB4YTBlOCwKLQkweDAwMGYsIDB4NjgwOCwgMHgyMGEyLCAweDY4MGMsIDB4MjBhMiwgMHg2ODEwLCAweDIwYTIsIDB4NjgxNCwKLQkweDIwYTIsIDB4NjgxOCwgMHgyMGEyLCAweDY4MWMsIDB4MjBhMiwgMHg2MGMzLCAweDAwMTAsIDB4MTA3OCwKLQkweDZjMmQsIDB4MGQ3ZiwgMHgwMDdjLCAweDYwMzAsIDB4NjA5YSwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywgMHg1MjAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDBkN2UsIDB4MjA2OSwgMHhhMzUxLCAweDY4MDQsIDB4ZDA4NCwgMHgwMDQwLCAweDYzMTIsIDB4NjgyOCwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMTdlLCAweDEwNzgsIDB4MjRmYSwgMHgyMWEyLCAweDAxN2YsIDB4MGQ3ZiwKLQkweDAwNzgsIDB4NjMxNywgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhOSwKLQkweDAwMDQsIDB4MjA5OSwgMHhhMzA1LCAweDUzYTYsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YTMwMSwKLQkweDUzYTYsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDgyLCAweDAwN2YsIDB4MDA0OCwKLQkweDYzMzEsIDB4MjAwMSwgMHhhMzFhLCAweDIwYTYsIDB4MjAwMSwgMHhhMzFiLCAweDIwYTYsIDB4MDA3OCwKLQkweDYzMzcsIDB4MjBhMywgMHgwMDAwLCAweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywgMHgwNTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4MiwgMHgwMDdmLCAweDAwNDgsIDB4NjM1OCwKLQkweDIwMDEsIDB4YTMxYSwgMHgyMGE2LCAweDIwMDEsIDB4YTMxYiwgMHgyMGE2LCAweDAwNzgsIDB4NjM1ZSwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MDMwLCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTksIDB4MDAwNCwKLQkweDIwOTksIDB4YTMwNSwgMHg1M2E2LCAweDYwYzMsIDB4MDAxMCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MGM3ZSwgMHg3ODE4LCAweDIwNjAsIDB4MjAwMSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0OGEyLCAweDBjN2YsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODYsIDB4MDA3ZSwgMHgwMGMwLCAweDYzODMsIDB4MjBhMywgMHgwNDAwLCAweDYyMGMsIDB4YzJiNCwKLQkweDYyMGUsIDB4MDA3OCwgMHg2Mzg1LCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEwODYsIDB4MDA3ZSwgMHgwMGMwLCAweDYzZDIsIDB4MjA5OSwKLQkweGE1OGMsIDB4MzNhNiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgzMzA0LCAweGEwODQsIDB4M2ZmZiwKLQkweDIwYTIsIDB4OTM5OCwgMHgzM2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweGEzMDUsIDB4NTNhNiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweGEzMDEsIDB4NTNhNiwgMHgyMGE5LCAweDAwMTAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDBmMCwgMHg2M2FmLCAweDIwOTksIDB4YTU5NCwgMHgzMzA0LCAweGMwZGQsIDB4MjBhMiwKLQkweDIwMDEsIDB4YTM3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDA0MCwgMHg2M2NhLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg5Mzk4LCAweDkzOTgsIDB4OTM5OCwgMHgzM2E2LCAweDIwYTksIDB4MDAwNCwKLQkweDAwNzgsIDB4NjNjYywgMHgyMGE5LCAweDAwMDcsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNjYywKLQkweDAwNzgsIDB4NjNmMiwgMHgyMDk5LCAweGE1OGMsIDB4MjBhOSwgMHgwMDA4LCAweDUzYTYsIDB4MjBhOSwKLQkweDAwMDQsIDB4MjA5OSwgMHhhMzA1LCAweDUzYTYsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YTMwMSwKLQkweDUzYTYsIDB4MjBhOSwgMHgwMDA4LCAweDIwYTMsIDB4MDAwMCwgMHgwMGYwLCAweDYzZTMsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNlOSwgMHgyMDk5LCAweGE1OTQsIDB4MjBhOSwKLQkweDAwMDgsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDAwZjAsIDB4NjNmNCwKLQkweDIwYTksIDB4MDAwYSwgMHgyMGEzLCAweDAwMDAsIDB4MDBmMCwgMHg2M2ZhLCAweDYwYzMsIDB4MDA3NCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywKLQkweDIwMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDgwMCwgMHgyMGEzLCAweDIwMDAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgwZjdlLCAweDIwNzksIDB4YTM1MSwKLQkweDc5MDQsIDB4MGY3ZiwgMHhkMWFjLCAweDAwYzAsIDB4NjQxZiwgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwKLQkweDAwNDAsIDB4NjQyNCwgMHhhMDg1LCAweDAwMTAsIDB4YTA4NSwgMHgwMDAyLCAweDBkN2UsIDB4MDA3OCwKLQkweDY0ZWQsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywKLQkweDUwMDAsIDB4MDA3OCwgMHg2Mzg1LCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1NjcsIDB4MjBhMywKLQkweDIxMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTQsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVlZiwKLQkweDAwNzgsIDB4NjQ2NiwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NWY4LCAweDIwYTMsIDB4MDIwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwNCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywKLQkweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMywgMHgyMGEzLCAweDJhMDAsIDB4NjBjMywKLQkweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwKLQkweDIwYTMsIDB4MDIwMCwgMHgwMDc4LCAweDYzODUsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwKLQkweDIwYTMsIDB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgyOCwgMHhhMDA1LCAweDAwNDAsIDB4NjQ5YiwKLQkweDIwYTIsIDB4MDA3OCwgMHg2NDlkLCAweDIwYTMsIDB4MDAwMywgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywKLQkweDAwMDgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZjgsIDB4MjBhMywgMHgwMjEwLCAweDIwYTMsIDB4MDAxNCwgMHgyMGEzLCAweDA4MDAsIDB4NzgxOCwKLQkweDIwNjgsIDB4Njg5NCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwgMHg2NGNhLCAweDY5OTgsIDB4YTE4NCwKLQkweGMwMDAsIDB4MDBjMCwgMHg2NGM2LCAweGQxZWMsIDB4MDA0MCwgMHg2NGMyLCAweDIwYTMsIDB4MjEwMCwKLQkweDAwNzgsIDB4NjRjYywgMHgyMGEzLCAweDAxMDAsIDB4MDA3OCwgMHg2NGNjLCAweDIwYTMsIDB4MDQwMCwKLQkweDAwNzgsIDB4NjRjYywgMHgyMGEzLCAweDA3MDAsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgwZjdlLCAweDIwNzksIDB4YTM1MSwgMHg3OTA0LCAweDBmN2YsIDB4ZDFhYywKLQkweDAwYzAsIDB4NjRkYywgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMDQwLCAweDY0ZTEsIDB4YTA4NSwKLQkweDAwMTAsIDB4MjAwOSwgMHhhMzczLCAweDIxMGMsIDB4ZDE4NCwgMHgwMDQwLCAweDY0ZWIsIDB4Njk5YywKLQkweGQxOGMsIDB4MDA0MCwgMHg2NGVkLCAweGEwODUsIDB4MDAwMiwgMHgwMjdlLCAweDIwMDksIDB4YTM3MSwKLQkweDIxMGMsIDB4ZDFlNCwgMHgwMDQwLCAweDY0ZmIsIDB4YzBjNSwgMHhhMDk0LCAweDAwMzAsIDB4YTI5NiwKLQkweDAwMTAsIDB4MDA0MCwgMHg2NTA1LCAweGQxZWMsIDB4MDA0MCwgMHg2NTA1LCAweGEwOTQsIDB4MDAzMCwKLQkweGEyOTYsIDB4MDAxMCwgMHgwMDQwLCAweDY1MDUsIDB4YzBiZCwgMHgwMjdmLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDE0LCAweDEwNzgsIDB4NmMyZCwgMHgwZDdmLCAweDAwN2MsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg2NWY4LCAweDIwYTMsIDB4MDIxMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMjAwLCAweDAwNzgsIDB4NjJmZSwKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMywgMHgyMGEzLCAweDJhMDAsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwKLQkweDAwN2MsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZjgsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMGIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDAyN2UsIDB4MDM3ZSwKLQkweDA0N2UsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDc4LCAweDY1NmUsIDB4MDI3ZSwKLQkweDAzN2UsIDB4MDQ3ZSwgMHgyMDE5LCAweDIyMDAsIDB4MjAyMSwgMHgwMTAwLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDE0LCAweGEyODYsIDB4MDA3ZSwKLQkweDAwYzAsIDB4NjU4MSwgMHhhMzg1LCAweDAwZmYsIDB4MjBhMiwgMHgyMGEzLCAweGZmZmUsIDB4MDA3OCwKLQkweDY1YjYsIDB4YTI4NiwgMHgwMDdmLCAweDAwYzAsIDB4NjU4ZCwgMHgwZDdlLCAweGEzODUsIDB4MDBmZiwKLQkweDIwYTIsIDB4MjBhMywgMHhmZmZkLCAweDAwNzgsIDB4NjVhNCwgMHhkMmJjLCAweDAwNDAsIDB4NjVhYywKLQkweGEyODYsIDB4MDA4MCwgMHgwZDdlLCAweDAwYzAsIDB4NjU5YywgMHhhMzg1LCAweDAwZmYsIDB4MjBhMiwKLQkweDIwYTMsIDB4ZmZmYywgMHgwMDc4LCAweDY1YTQsIDB4YTJlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY1YmEsIDB4MGQ3ZSwgMHhhMmU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHhhNDg1LCAweDAwMjksIDB4MjBhMiwgMHgwNDdmLCAweDAzN2YsIDB4MjBhMywKLQkweDAwMDAsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDJmYTIsIDB4MjBhMywKLQkweGZmZmYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMjdmLCAweDAwN2MsIDB4MDI3ZSwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjBhMywgMHgwMmZmLCAweDIwMTEsIDB4ZmZmYywKLQkweDIyYTIsIDB4MGQ3ZSwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwKLQkweDIwYTMsIDB4MjAyOSwgMHgyMGEzLCAweDAwMDAsIDB4MDA3OCwgMHg2NWMxLCAweDIwYTMsIDB4MDEwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweGZjMDIsIDB4MjBhMywgMHgwMDAwLCAweDAwN2MsIDB4MDI3ZSwKLQkweDAzN2UsIDB4MDQ3ZSwgMHgyMDE5LCAweDMzMDAsIDB4MjAyMSwgMHgwODAwLCAweDAwNzgsIDB4NjVmZiwKLQkweDAyN2UsIDB4MDM3ZSwgMHgwNDdlLCAweDIwMTksIDB4MjMwMCwgMHgyMDIxLCAweDAxMDAsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA5MiwKLQkweDAwN2UsIDB4MDA0OCwgMHg2NjFjLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY2MmEsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHhhNDg1LCAweDAwOTgsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MDQ3ZiwKLQkweDAzN2YsIDB4MTA3OCwgMHg2YzFjLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDdhMDgsIDB4MjJhMiwKLQkweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgwMjdmLCAweDAwN2MsIDB4MGM3ZSwKLQkweDBmN2UsIDB4NjAwNCwgMHhhMDhhLCAweDAwODUsIDB4MTA0OCwgMHgxMzI4LCAweGEwOGEsIDB4MDA4YywKLQkweDEwYzgsIDB4MTMyOCwgMHg2MTE4LCAweDIxNzgsIDB4NzlhMCwgMHhkMWJjLCAweDAwNDAsIDB4NjY1ZCwKLQkweDc5MDAsIDB4ZDFmNCwgMHgwMDQwLCAweDY2NTksIDB4NzkxNCwgMHhhMThjLCAweDAwZmYsIDB4MDA3OCwKLQkweDY2NjIsIDB4MjAwOSwgMHgwMDAwLCAweDAwNzgsIDB4NjY2MiwgMHhhMWY4LCAweDI5M2YsIDB4MmYwYywKLQkweGExOGMsIDB4MDBmZiwgMHgyYzc4LCAweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweGEwODIsIDB4MDA4NSwKLQkweDEwNzksIDB4NjY2ZCwgMHgwZjdmLCAweDBjN2YsIDB4MDA3YywgMHg2Njc2LCAweDY2ODEsIDB4NjY5YywKLQkweDY2NzQsIDB4NjY3NCwgMHg2Njc0LCAweDY2NzYsIDB4MTA3OCwgMHgxMzI4LCAweDE0N2UsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg2NmFmLCAweDYwYzMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwKLQkweDAwN2MsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NmUzLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODA4LCAweDIwYTIsIDB4NzgxMCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywKLQkweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDAwN2MsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY3MjQsIDB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA0LCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDAwN2MsIDB4MDI3ZSwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwOTIsIDB4MDA3ZSwgMHgwMDQ4LCAweDY2Y2UsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHg4MTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg2NmRkLCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODEwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDBkN2YsIDB4MjBhMywgMHgwMDAwLCAweDYyMzAsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDksIDB4MjBhMywKLQkweDAwMDAsIDB4MDA3OCwgMHg2NWMxLCAweDAyN2UsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA5MiwgMHgwMDdlLCAweDAwNDgsIDB4NjcwMiwKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDg0MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGEzMWEsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MGQ3ZiwKLQkweDAwNzgsIDB4NjcxMSwgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDg0MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MGQ3ZiwgMHgyMGEzLCAweDAwMDAsIDB4NjIzMCwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDk5LCAweDIwYTMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMWMsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4N2ExMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMjdmLCAweDAwN2MsIDB4MDI3ZSwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDkyLCAweDAwN2UsIDB4MDA0OCwKLQkweDY3NDMsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODUwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDBkN2YsIDB4MDA3OCwgMHg2NzUyLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4ODUwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHgyMGEzLCAweDAwOTksIDB4MjBhMywgMHgwMDAwLCAweDAwNzgsIDB4NjcxNSwKLQkweDBjN2UsIDB4MGY3ZSwgMHgyYzc4LCAweDc4MDQsIDB4YTA4YSwgMHgwMDQwLCAweDEwNDgsIDB4MTMyOCwKLQkweGEwOGEsIDB4MDA1MywgMHgxMGM4LCAweDEzMjgsIDB4NzkxOCwgMHgyMTYwLCAweDYxYTAsIDB4ZDFiYywKLQkweDAwNDAsIDB4Njc3NywgMHg2MTAwLCAweGQxZjQsIDB4MDA0MCwgMHg2NzczLCAweDYxMTQsIDB4YTE4YywKLQkweDAwZmYsIDB4MDA3OCwgMHg2NzdjLCAweDIwMDksIDB4MDAwMCwgMHgwMDc4LCAweDY3N2MsIDB4YTFlMCwKLQkweDI5M2YsIDB4MmMwYywgMHhhMThjLCAweDAwZmYsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4MiwKLQkweDAwNDAsIDB4MTA3OSwgMHg2Nzg2LCAweDBmN2YsIDB4MGM3ZiwgMHgwMDdjLCAweDY3OWIsIDB4NjhhOSwKLQkweDY4NGEsIDB4NmE1OSwgMHg2Nzk5LCAweDY3OTksIDB4Njc5OSwgMHg2Nzk5LCAweDY3OTksIDB4Njc5OSwKLQkweDY3OTksIDB4NmY1ZSwgMHg2ZjZmLCAweDZmODAsIDB4NmY5MSwgMHg2Nzk5LCAweDc0OGUsIDB4Njc5OSwKLQkweDZmNGQsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2UsIDB4MTU3ZSwgMHgxNDdlLCAweDc4MGIsIDB4ZmZmZiwKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzkxMCwgMHgyMTY4LCAweDY5NDgsIDB4NzkyMiwKLQkweDIxYTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHg2OTRjLCAweGExODQsIDB4MDAwZiwKLQkweDAwYzAsIDB4NjdiNiwgMHgyMDAxLCAweDAwMDUsIDB4MDA3OCwgMHg2N2MwLCAweGQxODQsIDB4MDA0MCwKLQkweDY3YmQsIDB4MjAwMSwgMHgwMDA0LCAweDAwNzgsIDB4NjdjMCwgMHhhMDg0LCAweDAwMDYsIDB4ODAwNCwKLQkweDAxN2UsIDB4MjAwOCwgMHg3ODMwLCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweGExMDUsIDB4MDE3ZiwKLQkweDIwYTIsIDB4ZDFhYywgMHgwMDQwLCAweDY3ZDAsIDB4MjBhMywgMHgwMDAyLCAweDAwNzgsIDB4NjdkYywKLQkweGQxYjQsIDB4MDA0MCwgMHg2N2Q3LCAweDIwYTMsIDB4MDAwMSwgMHgwMDc4LCAweDY3ZGMsIDB4MjBhMywKLQkweDAwMDAsIDB4MjIzMCwgMHgwMDc4LCAweDY3ZGUsIDB4NmE4MCwgMHg2ZTdjLCAweDIwYTksIDB4MDAwOCwKLQkweGFkODAsIDB4MDAxNywgMHgyMDBjLCAweDgxMGYsIDB4MjFhMiwgMHg4MDAwLCAweDAwZjAsIDB4NjdlMiwKLQkweDIyYTIsIDB4MjZhMiwgMHg2MGMzLCAweDAwMjAsIDB4MjBlMSwgMHg5MDgwLCAweDYwMTQsIDB4YTA4NCwKLQkweDAwMDQsIDB4YTA4NSwgMHgwMDA5LCAweDYwMTYsIDB4MjAwMSwgMHhhNWM3LCAweDIwMDMsIDB4MDdkMCwKLQkweDIwMDEsIDB4YTVjNiwgMHgyMDAzLCAweDAwMDksIDB4MjAwMSwgMHhhNWNjLCAweDIwMDMsIDB4MDAwMiwKLQkweDEwNzgsIDB4MTU3ZSwgMHgxNDdmLCAweDE1N2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHg3YTE4LCAweGEyODAsIDB4MDAyMywgMHgyMDE0LCAweDgyMTAsIDB4YTI5NCwKLQkweDAwZmYsIDB4MjIwMiwgMHg4MjE3LCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4ZDBiYywKLQkweDAwNDAsIDB4NjgyYywgMHgwZDdlLCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDA2MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhMzFhLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MGQ3ZiwgMHgwMDc4LCAweDY4M2IsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHgwNjAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDBkN2YsIDB4MjBhMywKLQkweDAwMDAsIDB4NjEzMCwgMHgyMWEyLCAweDIwYTMsIDB4MDgyOSwgMHgyMGEzLCAweDAwMDAsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyZmEyLCAweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDA3YywgMHgwZDdlLCAweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwKLQkweDEwNzgsIDB4Njg2YSwgMHg3ODEwLCAweDIwNjgsIDB4Njg2MCwgMHgyMGEyLCAweDY4NWMsIDB4MjBhMiwKLQkweDY4ODAsIDB4MjBhMiwgMHg2ODdjLCAweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDBjLCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwKLQkweDBkN2YsIDB4MDA3YywgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHg2ODg4LCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDUwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4Njg5NywKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA1MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4MjBhMywKLQkweDA4ODksIDB4MjBhMywgMHgwMDAwLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDI3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgxNTdlLCAweDEzN2UsIDB4MTQ3ZSwgMHg3ODEwLCAweGEwNmQsIDB4MTA3OCwKLQkweDQ4OGYsIDB4MDA0MCwgMHg2OGJkLCAweDY4NGMsIDB4YTA4NCwgMHgyMDIwLCAweGEwODYsIDB4MjAyMCwKLQkweDAwYzAsIDB4NjhiZCwgMHg3ODI0LCAweGMwY2QsIDB4NzgyNiwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDZhMTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NzgxMCwKLQkweGEwODQsIDB4ZjAwMCwgMHgwMGMwLCAweDY4ZDQsIDB4NzgxMCwgMHhhMDg0LCAweDA3MDAsIDB4ODAwNywKLQkweDEwNzksIDB4NjhkYywgMHgwMDc4LCAweDY4ZDcsIDB4YTAwNiwgMHgxMDc5LCAweDY4ZGMsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NjhlNiwgMHg2OTdlLCAweDY5ODksIDB4NjliMywKLQkweDY5YzcsIDB4NjllMywgMHg2OWVlLCAweDY4ZTQsIDB4MTA3OCwgMHgxMzI4LCAweDAxN2UsIDB4MDM3ZSwKLQkweDY5NGMsIDB4YTE4YywgMHgwMDAzLCAweDAwNDAsIDB4NjhmMSwgMHhhMTg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDY5MDAsIDB4NmI3OCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwgMHg2OGY3LCAweGMzZTUsIDB4MjNhMiwKLQkweDY4NjgsIDB4MjBhMiwgMHg2ODY0LCAweDIwYTIsIDB4MDM3ZiwgMHgwMTdmLCAweDAwNzgsIDB4NjliZSwKLQkweGExODYsIDB4MDAwMSwgMHgxMGMwLCAweDEzMjgsIDB4NmI3OCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwKLQkweDY5MGEsIDB4YzNlNSwgMHgyM2EyLCAweDY4NjgsIDB4MjBhMiwgMHg2ODY0LCAweDIwYTIsIDB4MjJhMiwKLQkweDY4NzQsIDB4MjBhMiwgMHgyMmEyLCAweDY4N2MsIDB4MjBhMiwgMHgyMDA5LCAweDAwMTgsIDB4YTM4NCwKLQkweDAzMDAsIDB4MDA0MCwgMHg2OTc4LCAweGQzYzQsIDB4MDA0MCwgMHg2OTIwLCAweDY4N2MsIDB4YTEwOCwKLQkweGQzY2MsIDB4MDA0MCwgMHg2OTI1LCAweDY4NzQsIDB4YTEwOCwgMHgxNTdlLCAweDIwYTksIDB4MDAwZCwKLQkweGFkODAsIDB4MDAyMCwgMHgyMDFjLCAweDgzMWYsIDB4MjNhMiwgMHg4MDAwLCAweDAwZjAsIDB4NjkyYSwKLQkweDE1N2YsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4YTE4NCwgMHgwMDAzLCAweDAwNDAsIDB4Njk3OCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDAwN2UsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHg2OTU4LCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4Njk2NywKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4MDA3ZiwKLQkweDdiMjQsIDB4ZDNjYywgMHgwMDQwLCAweDY5NzAsIDB4MjBhMywgMHgwODg5LCAweDAwNzgsIDB4Njk3MiwKLQkweDIwYTMsIDB4MDg5OCwgMHgyMGEyLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYxYzIsIDB4MDM3ZiwgMHgwMTdmLCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwMTEsIDB4MDAwOCwKLQkweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY5ODUsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDA3OCwKLQkweDY5YmMsIDB4MjAxMSwgMHgwMzAyLCAweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY5OTAsIDB4YzJlNSwKLQkweDIyYTIsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDAwMTIsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwOCwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4NzAwMCwKLQkweDIwYTMsIDB4MDUwMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwYSwgMHgyMmEyLCAweDIyYTIsIDB4MjBhMywKLQkweDI1MDAsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAzMiwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwMTEsIDB4MDAyOCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwKLQkweDY5YmEsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHg2MGMzLCAweDAwMTgsIDB4MTA3OCwgMHg2YzJkLCAweDAwN2MsIDB4MjAxMSwKLQkweDAxMDAsIDB4NzgyNCwgMHhkMGNjLCAweDAwNDAsIDB4NjljZSwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDgsIDB4MjJhMiwKLQkweDc4MzQsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAyMCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwMTEsIDB4MDAwOCwgMHg3ODI0LCAweGQwY2MsIDB4MDA0MCwKLQkweDY5ZWEsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDA3OCwgMHg2OWJjLCAweDAzN2UsIDB4N2IxMCwKLQkweGEzODQsIDB4ZmYwMCwgMHg3ODEyLCAweGEzODQsIDB4MDBmZiwgMHg4MDAxLCAweDAwYzAsIDB4NmEwMSwKLQkweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDY5ZmQsIDB4YzJlNSwgMHgyMmEyLCAweDAzN2YsIDB4MDA3OCwKLQkweDY5YmMsIDB4MDQ3ZSwgMHgyMDIxLCAweDA4MDAsIDB4MDA3ZSwgMHg3ODI0LCAweGQwY2MsIDB4MDA3ZiwKLQkweDAwNDAsIDB4NmEwYiwgMHhjNGU1LCAweDI0YTIsIDB4MDQ3ZiwgMHgyMmEyLCAweDIwYTIsIDB4MDM3ZiwKLQkweDAwNzgsIDB4NjliZSwgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwgMHg2YTMwLCAweDBkN2UsIDB4YTBlOCwKLQkweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwgMHgwZDdmLCAweDAwNzgsIDB4NmEzZiwKLQkweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwgMHg2MjMwLCAweDIyYTIsIDB4NzgyNCwKLQkweGQwY2MsIDB4MDA0MCwgMHg2YTQ3LCAweDIwYTMsIDB4MDg4OSwgMHgwMDc4LCAweDZhNDksIDB4MjBhMywKLQkweDA4OTgsIDB4MjBhMywgMHgwMDAwLCAweDEwNzgsIDB4NmMxYywgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDI3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgxNTdlLCAweDEzN2UsIDB4MTQ3ZSwgMHgwMTdlLCAweDAzN2UsIDB4NzgxMCwKLQkweGEwODQsIDB4MDcwMCwgMHg4MDA3LCAweDEwNzksIDB4NmE2YywgMHgwMzdmLCAweDAxN2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NmE3NCwgMHg2YTc0LCAweDZhNzYsIDB4NmE3NCwKLQkweDZhNzQsIDB4NmE3NCwgMHg2YTliLCAweDZhNzQsIDB4MTA3OCwgMHgxMzI4LCAweDc5MTAsIDB4YTE4YywKLQkweGY4ZmYsIDB4YTE4ZCwgMHgwNjAwLCAweDc5MTIsIDB4MjBhMSwgMHgwMjBiLCAweDIwMDksIDB4MDAwMywKLQkweDEwNzgsIDB4NmFhNSwgMHgwZDdlLCAweDIwNjksIDB4YTM1MSwgMHg2ODA0LCAweGQwYmMsIDB4MDA0MCwKLQkweDZhOTAsIDB4NjgyYywgMHhhMDg0LCAweDAwZmYsIDB4ODAwNywgMHgyMGEyLCAweDAwNzgsIDB4NmE5MiwKLQkweDIwYTMsIDB4M2YwMCwgMHgwZDdmLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAwMSwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDIwYTEsIDB4MDIwYiwgMHgyMDA5LCAweDAwMDMsIDB4MTA3OCwKLQkweDZhYTUsIDB4MjBhMywgMHg3ZjAwLCAweDAwNzgsIDB4NmE5MywgMHgwMjdlLCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGQwYmMsIDB4MDA0MCwKLQkweDZhYzMsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDEwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDBkN2YsIDB4MDA3OCwgMHg2YWQyLCAweDBkN2UsIDB4YTBlOCwgMHhhNDM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4MDEwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwZDdmLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzAsIDB4MjJhMiwgMHgyMGEzLCAweDA4ODgsIDB4YTE4ZCwgMHgwMDA4LCAweDIxYTIsIDB4MTA3OCwKLQkweDZjMWMsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAyN2YsIDB4MDA3YywgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwKLQkweDA1N2UsIDB4MDQ3ZSwgMHgwMzdlLCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NjEzMCwKLQkweDc4MTgsIDB4MjA2OCwgMHg2OGEwLCAweDIwMjgsIDB4ZDBiYywgMHgwMGMwLCAweDZhZmMsIDB4NjkxMCwKLQkweDZhMTQsIDB4NjQzMCwgMHgwMDc4LCAweDZiMDAsIDB4NjkxMCwgMHg2YTE0LCAweDczNjgsIDB4NzQ2YywKLQkweDc4MWMsIDB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4NmI1ZiwgMHhkNWJjLCAweDAwNDAsIDB4NmIxMCwKLQkweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDAwNzgsIDB4NmIxNywKLQkweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLCAweDY0NmUsIDB4NjA3MywKLQkweDA4MDksIDB4NjA3NywgMHgwMDA4LCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LCAweDAwZmYsIDB4Njg4ZSwKLQkweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDgyLCAweDc4MDgsIDB4NjA4NiwKLQkweDc4MTAsIDB4MjA3MCwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLCAweDcwMGMsIDB4NjBjNiwKLQkweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhYiwgMHgwMDM2LCAweDYwYWYsIDB4OTVkNSwKLQkweDYwZDcsIDB4MDAwMCwgMHhhNTgyLCAweDAwODAsIDB4MDA0OCwgMHg2YjQ5LCAweDZhMDAsIDB4ZDJmNCwKLQkweDAwNDAsIDB4NmI0NywgMHg2YTE0LCAweGEyOTQsIDB4MDBmZiwgMHgwMDc4LCAweDZiNDksIDB4MjAxMSwKLQkweDAwMDAsIDB4NjI5ZSwgMHg2MDE3LCAweDAwMTYsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4YTA4NCwKLQkweGZmZjAsIDB4YTAwNSwgMHgwMDQwLCAweDZiNTYsIDB4MjAwOSwgMHgxYjU4LCAweDEwNzgsIDB4NTk1ZiwKLQkweDAzN2YsIDB4MDQ3ZiwgMHgwNTdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwN2MsIDB4NzgxMCwKLQkweDIwNzAsIDB4NzA0YywgMHhhMDg0LCAweDAwMDMsIDB4YTA4NiwgMHgwMDAyLCAweDAwNDAsIDB4NmJiNywKLQkweGQ1YmMsIDB4MDA0MCwgMHg2YjczLCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwKLQkweDY0NmUsIDB4MDA3OCwgMHg2YjdhLCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjA2YiwKLQkweDAwMDAsIDB4NjQ2ZSwgMHg2MDczLCAweDA4ODAsIDB4NjA3NywgMHgwMDA4LCAweDY4OGMsIDB4ODAwMCwKLQkweGEwODQsIDB4MDBmZiwgMHg2ODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwKLQkweDYwODYsIDB4NzgwOCwgMHg2MDgyLCAweDcwNjAsIDB4NjA4YSwgMHg3MDVjLCAweDYwOGUsIDB4NzA4MCwKLQkweDYwYzYsIDB4NzA3YywgMHg2MGNhLCAweDcwN2MsIDB4NzkyYywgMHhhMTA4LCAweDc5MmUsIDB4NzA4MCwKLQkweDc5MjgsIDB4YTEwOSwgMHg3OTJhLCAweDY4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwKLQkweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweGE1ODIsIDB4MDA4MCwgMHgwMDQ4LCAweDZiYjIsIDB4NmEwMCwKLQkweGQyZjQsIDB4MDA0MCwgMHg2YmIwLCAweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwNzgsIDB4NmJiMiwKLQkweDIwMTEsIDB4MDAwMCwgMHg2MjllLCAweDYwMTcsIDB4MDAxMiwgMHgwMDc4LCAweDZiNGMsIDB4ZDViYywKLQkweDAwNDAsIDB4NmJjMiwgMHhhMTg1LCAweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsIDB4NjQ2ZSwKLQkweDAwNzgsIDB4NmJjOSwgMHhhMTg1LCAweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwKLQkweDY0NmUsIDB4MTA3OCwgMHg0ODhmLCAweDAwNDAsIDB4NmJkZiwgMHgwZDdlLCAweDc4MTAsIDB4YTA2ZCwKLQkweDY4NGMsIDB4MGQ3ZiwgMHhhMDg0LCAweDIwMjAsIDB4YTA4NiwgMHgyMDIwLCAweDAwYzAsIDB4NmJkZiwKLQkweDc4MjQsIDB4YzBjZCwgMHg3ODI2LCAweDYwNzMsIDB4MDg4OSwgMHgwMDc4LCAweDZiZTEsIDB4NjA3MywKLQkweDA4OTgsIDB4NjA3NywgMHgwMDAwLCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LCAweDAwZmYsIDB4Njg4ZSwKLQkweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDg2LCAweDc4MDgsIDB4NjA4MiwKLQkweDcwMTQsIDB4NjA4YSwgMHg3MDEwLCAweDYwOGUsIDB4NzAwYywgMHg2MGM2LCAweDcwMDgsIDB4NjBjYSwKLQkweDY4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweGE1ODIsIDB4MDA4MCwgMHgwMDQ4LCAweDZjMGYsIDB4NmEwMCwgMHhkMmY0LCAweDAwNDAsIDB4NmMwZCwKLQkweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwNzgsIDB4NmMwZiwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwKLQkweDc4MjQsIDB4ZDBjYywgMHgwMDQwLCAweDZjMTgsIDB4NjAxNywgMHgwMDE2LCAweDAwNzgsIDB4NmI0YywKLQkweDYwMTcsIDB4MDAxMiwgMHgwMDc4LCAweDZiNGMsIDB4N2ExOCwgMHhhMjgwLCAweDAwMjMsIDB4MjAxNCwKLQkweDgyMTAsIDB4YTI5NCwgMHgwMGZmLCAweDIyMDIsIDB4ODIxNywgMHgwMDdjLCAweDBkN2UsIDB4MjA2OSwKLQkweGE1YWIsIDB4Njg0MywgMHgwMDAxLCAweDBkN2YsIDB4MDA3YywgMHgyMGUxLCAweDkwODAsIDB4NjBhMywKLQkweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDEwNzgsIDB4NmMzOCwgMHgxMDc4LCAweDU5NGYsIDB4MDA3YywKLQkweDAwN2UsIDB4NjAxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwgMHgwMDA5LCAweDYwMTYsIDB4MDA3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwgMHg2MDE0LCAweGEwODQsIDB4MDAwNCwKLQkweGEwODUsIDB4MDAwOCwgMHg2MDE2LCAweDBjN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDAxN2UsIDB4MDI3ZSwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDY5MDQsIDB4YTE5NCwKLQkweDQwMDAsIDB4MDA0MCwgMHg2Yzg5LCAweDEwNzgsIDB4NmM0MSwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MGM3ZSwgMHgyMDYxLCAweGE1YWIsIDB4NjEyOCwgMHhhMTkyLCAweDAwYzgsIDB4MDBjOCwKLQkweDZjNzYsIDB4ODEwOCwgMHg2MTJhLCAweDYxMjQsIDB4MGM3ZiwgMHg4MWZmLCAweDAwNDAsIDB4NmM4NCwKLQkweDEwNzgsIDB4NTk0ZiwgMHgxMDc4LCAweDZjMzgsIDB4MDA3OCwgMHg2Yzg0LCAweDYxMjQsIDB4YTFlNSwKLQkweDAwMDAsIDB4MDA0MCwgMHg2YzgxLCAweDEwNzgsIDB4YTI0MSwgMHgyMDA5LCAweDAwMTQsIDB4MTA3OCwKLQkweDc1NmMsIDB4MGM3ZiwgMHgwMDc4LCAweDZjODQsIDB4MDI3ZiwgMHgwMTdmLCAweDBkN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MjAwMSwgMHhhNWM3LCAweDIwMDQsIDB4YTAwNSwgMHgwMGMwLCAweDZjODQsIDB4MGM3ZSwKLQkweDIwNjEsIDB4YTVhYiwgMHg2MTI4LCAweGExOTIsIDB4MDAwMywgMHgwMGM4LCAweDZjNzYsIDB4ODEwOCwKLQkweDYxMmEsIDB4MGM3ZiwgMHgxMDc4LCAweDU5NGYsIDB4MTA3OCwgMHg0MTcxLCAweDAwNzgsIDB4NmM4NCwKLQkweDBjN2UsIDB4MGQ3ZSwgMHgwZTdlLCAweDAxN2UsIDB4MDI3ZSwgMHgxMDc4LCAweDU5NjcsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzEzYywgMHg4MWZmLCAweDAwNDAsIDB4NmNjYSwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwKLQkweDAxNDAsIDB4NjkwNCwgMHhhMTk0LCAweDQwMDAsIDB4MDA0MCwgMHg2Y2QwLCAweDY4MDMsIDB4MTAwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgwMzdlLCAweDIwMTksIDB4MDAwMSwgMHgxMDc4LCAweDZlNmMsIDB4MDM3ZiwKLQkweDcxM2MsIDB4MjE2MCwgMHgxMDc4LCAweGEyNDEsIDB4MjAwOSwgMHgwMDRhLCAweDEwNzgsIDB4NzU2YywKLQkweDAwNzgsIDB4NmNjYSwgMHgwMjdmLCAweDAxN2YsIDB4MGU3ZiwgMHgwZDdmLCAweDBjN2YsIDB4MDA3YywKLQkweDAwNzgsIDB4NmNiYSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDA1N2UsIDB4MDQ3ZSwKLQkweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4NjAxOCwgMHgyMDY4LCAweDZjYTAsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzAxOCwgMHgyMDY4LCAweDhkZmYsIDB4MDA0MCwgMHg2Y2ZjLCAweDY4YTAsIDB4YTQwNiwKLQkweDAwNDAsIDB4NmNlZSwgMHg2ODU0LCAweDIwNjgsIDB4MDA3OCwgMHg2Y2UzLCAweDYwMTAsIDB4MjA2MCwKLQkweDY0M2MsIDB4NjU0MCwgMHg2ZTQ4LCAweDJkNjAsIDB4MTA3OCwgMHg0NjZhLCAweDAwNDAsIDB4NmNmYywKLQkweDEwNzgsIDB4NzA0NSwgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwMDdmLCAweDA0N2YsIDB4MDU3ZiwKLQkweDA2N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1NjcsIDB4MjBhMywgMHgxMjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxYywKLQkweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDZkMTcsIDB4NjA5OCwgMHgwMDc4LCAweDZkMTgsIDB4NjAzMCwKLQkweDIwYTIsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MDBmMCwgMHg2ZDIwLCAweDIwYTIsIDB4MjBhMiwgMHg2MGMzLCAweDAwMmMsIDB4MTA3OCwKLQkweDZjMmQsIDB4MDA3YywgMHgxNTdlLCAweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywKLQkweDIwYTMsIDB4MGYwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MDgsIDB4MjBhMiwKLQkweDYwYzMsIDB4MDAwOCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwgMHgxNTdmLCAweDAwN2MsIDB4MTU3ZSwKLQkweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHgyMGEzLCAweDAyMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA2LCAweDIwMTEsIDB4YTM0MCwgMHgyMDE5LCAweGEzNDEsIDB4MjNhNiwKLQkweDIyYTYsIDB4YTM5OCwgMHgwMDAyLCAweGEyOTAsIDB4MDAwMiwgMHgwMGYwLCAweDZkNGYsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwKLQkweDE1N2YsIDB4MDA3YywgMHgxNTdlLCAweDE0N2UsIDB4MDE3ZSwgMHgwMjdlLCAweDIwYTEsIDB4MDIwYiwKLQkweDEwNzgsIDB4NjVjZiwgMHgxMDc4LCAweDY1ZTYsIDB4NzgxMCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAxNSwgMHgyMDk4LCAweDc4MDgsIDB4YTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4NTNhNiwKLQkweGEwODAsIDB4MDAwNCwgMHg4MDAzLCAweDYwYzIsIDB4MTA3OCwgMHg2YzJkLCAweDAyN2YsIDB4MDE3ZiwKLQkweDE0N2YsIDB4MTU3ZiwgMHgwMDdjLCAweDE1N2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1NjcsIDB4MjBhMywgMHg2MjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgxNDdmLCAweDE1N2YsIDB4MDA3YywKLQkweDE1N2UsIDB4MTQ3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU2NywKLQkweDc4MTAsIDB4YTA4MCwgMHgwMDAwLCAweDIwMDQsIDB4YTA4MCwgMHgwMDE3LCAweDIwOTgsIDB4NzgwOCwKLQkweGEwODgsIDB4MDAwMiwgMHgyMWE4LCAweDUzYTYsIDB4ODAwMywgMHg2MGMyLCAweDEwNzgsIDB4NmMyZCwKLQkweDAyN2YsIDB4MDE3ZiwgMHgxNDdmLCAweDE1N2YsIDB4MDA3YywgMHgwZTdlLCAweDBjN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTVhYiwgMHg3MDBjLCAweDIwNjAsIDB4OGNmZiwKLQkweDAwNDAsIDB4NmRkMSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg2ZGM4LCAweDEwNzgsIDB4N2EwNSwKLQkweDYwMGMsIDB4MDA3ZSwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg3MDQ1LCAweDBjN2YsIDB4MDA3OCwKLQkweDZkYmYsIDB4NzAwZiwgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHgxMjdmLCAweDAwN2YsIDB4MGM3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgxMjdlLCAweDE1N2UsIDB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwKLQkweDAyN2UsIDB4MDE3ZSwgMHgwMDdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDAxMDAsIDB4MjA3OSwKLQkweDAxNDAsIDB4MjA3MSwgMHhhNWFiLCAweDcwMjQsIDB4MjA2MCwgMHg4Y2ZmLCAweDAwNDAsIDB4NmUyYSwKLQkweDEwNzgsIDB4NmM0MSwgMHg2OGMzLCAweDAwMDAsIDB4MTA3OCwgMHg1OTVhLCAweDIwMDksIDB4MDAxMywKLQkweDEwNzgsIDB4NzU2YywgMHgyMGE5LCAweDAxZjQsIDB4NjgyNCwgMHhkMDk0LCAweDAwNDAsIDB4NmUwZCwKLQkweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMDQwLCAweDZlMWYsIDB4NzgwMywKLQkweDEwMDAsIDB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4NmUxZiwgMHhkMDg0LCAweDAwNDAsIDB4NmUxNCwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMDc4LCAweDZlMTYsIDB4MDBmMCwgMHg2ZGZjLCAweDc4MDQsIDB4YTA4NCwKLQkweDEwMDAsIDB4MDA0MCwgMHg2ZTFmLCAweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwKLQkweDAwN2YsIDB4MDE3ZiwgMHgwMjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MTU3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwgMHhhMDk2LCAweDAwMDEsIDB4MDA0MCwKLQkweDZlNjIsIDB4YTA5NiwgMHgwMDA0LCAweDAwNDAsIDB4NmU2MiwgMHg2ODE3LCAweDAwMDgsIDB4NjhjMywKLQkweDAwMDAsIDB4MjAxMSwgMHg0MTI5LCAweDEwNzgsIDB4NThkNCwgMHgyMGE5LCAweDAxZjQsIDB4NjgyNCwKLQkweGQwOTQsIDB4MDA0MCwgMHg2ZTUwLCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NmU2MiwgMHg3ODAzLCAweDEwMDAsIDB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4NmU2MiwKLQkweGQwODQsIDB4MDA0MCwgMHg2ZTU3LCAweDY4MjcsIDB4MDAwMSwgMHgwMDc4LCAweDZlNTksIDB4MDBmMCwKLQkweDZlM2YsIDB4NzgwNCwgMHhhMDg0LCAweDEwMDAsIDB4MDA0MCwgMHg2ZTYyLCAweDc4MDMsIDB4MDEwMCwKLQkweDc4MDMsIDB4MDAwMCwgMHgwMDdmLCAweDAxN2YsIDB4MDI3ZiwgMHgwYzdmLCAweDBkN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MTU3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgxNTdlLCAweDBmN2UsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MGM3ZSwgMHgwMjdlLCAweDAxN2UsIDB4MDA3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsIDB4YTVhYiwgMHg3MDNjLCAweDIwNjAsIDB4OGNmZiwKLQkweDAwNDAsIDB4NmVlOCwgMHg2ODE3LCAweDAwMTAsIDB4MjAwOSwgMHgwMGZhLCAweDgxMDksIDB4MDBjMCwKLQkweDZlODYsIDB4NjhjNywgMHgwMDAwLCAweDY4Y2IsIDB4MDAwOCwgMHgxMDc4LCAweDU5NjcsIDB4MTA3OCwKLQkweDFmMzEsIDB4MDQ3ZSwgMHgwNTdlLCAweDIwMDksIDB4MDE3ZiwgMHgyMTJjLCAweDIwMGIsIDB4MDBhNSwKLQkweDIwMjEsIDB4MDE2OSwgMHgyNDA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDZlYjcsIDB4NjhjNywgMHgwMDAwLCAweDY4Y2IsIDB4MDAwOCwgMHgwZTdlLCAweDBmN2UsIDB4MjA3OSwKLQkweDAwMjAsIDB4MjA3MSwgMHhhNjAyLCAweDY4MTQsIDB4YTA4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAxMiwKLQkweDY4MTYsIDB4NzgwMywgMHgwMDA4LCAweDcwMDMsIDB4MDAwMCwgMHgwZjdmLCAweDBlN2YsIDB4MjUwYSwKLQkweDA1N2YsIDB4MDQ3ZiwgMHhhMzlkLCAweDAwMDAsIDB4MDBjMCwgMHg2ZWMyLCAweDIwMDksIDB4MDA0OSwKLQkweDEwNzgsIDB4NzU2YywgMHgyMGE5LCAweDAzZTgsIDB4NjgyNCwgMHhkMDk0LCAweDAwNDAsIDB4NmVkNSwKLQkweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMDQwLCAweDZlZTcsIDB4NzgwMywKLQkweDEwMDAsIDB4NzgwMywgMHgwMDAwLCAweDAwNzgsIDB4NmVlNywgMHhkMDhjLCAweDAwNDAsIDB4NmVkYywKLQkweDY4MjcsIDB4MDAwMiwgMHgwMDc4LCAweDZlZGUsIDB4MDBmMCwgMHg2ZWM0LCAweDc4MDQsIDB4YTA4NCwKLQkweDEwMDAsIDB4MDA0MCwgMHg2ZWU3LCAweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwKLQkweDAwN2YsIDB4MDE3ZiwgMHgwMjdmLCAweDBjN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MTU3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgwZDdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4YTVhYiwKLQkweDZhMDYsIDB4MTI3ZiwgMHgwZDdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjksIDB4YTVhYiwgMHg2YTMyLCAweDEyN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwKLQkweDBjN2UsIDB4MDY3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA3MSwgMHhhNWFiLCAweDc2MTQsIDB4MjY2MCwKLQkweDI2NzgsIDB4MjA5MSwgMHg4MDAwLCAweDhjZmYsIDB4MDA0MCwgMHg2ZjQ2LCAweDYwMWMsIDB4YTIwNiwKLQkweDAwYzAsIDB4NmY0MSwgMHg3MDE0LCAweGFjMzYsIDB4MDBjMCwgMHg2ZjIwLCAweDY2MGMsIDB4NzYxNiwKLQkweDcwMTAsIDB4YWMzNiwgMHgwMGMwLCAweDZmMmUsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NmYyYywKLQkweDJmMDAsIDB4NzAxMiwgMHgwMDc4LCAweDZmMmUsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwKLQkweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDZmMzcsIDB4N2UwZSwgMHgwMDc4LCAweDZmMzgsIDB4MjY3OCwKLQkweDYwMGYsIDB4MDAwMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwgMHg3MDQ1LCAweDBjN2YsIDB4MDA3OCwKLQkweDZmMTMsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwgMHg2ZjEzLCAweDEyN2YsIDB4MDA3ZiwKLQkweDA2N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHgxNTdlLCAweDE0N2UsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg2ODA2LCAweDc4MTAsIDB4MjBhMiwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDEwMDAsIDB4MDA3OCwgMHg2ZmEwLCAweDE1N2UsIDB4MTQ3ZSwKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzgxMCwgMHgyMGEyLCAweGEwMDYsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4NDAwMCwgMHgwMDc4LCAweDZmYTAsIDB4MTU3ZSwKLQkweDE0N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjgwNiwgMHg3ODEwLCAweDIwYTIsIDB4YTAwNiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMywgMHgyMDAwLCAweDAwNzgsIDB4NmZhMCwKLQkweDE1N2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2ODA2LCAweDc4MTAsIDB4MjBhMiwKLQkweGEwMDYsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDA0MDAsIDB4MDA3OCwKLQkweDZmYTAsIDB4MTU3ZSwgMHgxNDdlLCAweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY4MDYsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDIwMCwKLQkweDEwNzgsIDB4NzA1MCwgMHg2MGMzLCAweDAwMjAsIDB4MTA3OCwgMHg2YzJkLCAweDE0N2YsIDB4MTU3ZiwKLQkweDAwN2MsIDB4MTI3ZSwgMHgwYzdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDYxLCAweDAxMDAsIDB4NjEyMCwKLQkweGQxYjQsIDB4MDBjMCwgMHg2ZmI4LCAweGQxYmMsIDB4MDBjMCwgMHg3MDAyLCAweDAwNzgsIDB4NzA0MiwKLQkweDIwMDksIDB4MDE3ZiwgMHgyMDBiLCAweDAwYTEsIDB4MTU3ZSwgMHgwMDdlLCAweDBkN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4MjBhOSwgMHgwMDFlLCAweDIwMDksIDB4MDE2OSwgMHg2ODA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4NmZmOSwgMHg2MDIwLCAweGQwYjQsIDB4MDA0MCwgMHg2ZmY5LCAweDYwMjQsIDB4ZDA5NCwKLQkweDAwYzAsIDB4NmZmOSwgMHgyMTA0LCAweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDZmZjksIDB4MDBmMCwgMHg2ZmM1LCAweDAyN2UsIDB4NjE5OCwgMHhhMThjLCAweDAwZmYsIDB4ODEwNywKLQkweDYxMzAsIDB4YTE4YywgMHgwMGZmLCAweGExMGQsIDB4NjA4OCwgMHg2MjhjLCAweDYxOGUsIDB4NjA4YiwKLQkweGJjOTEsIDB4NjA0MywgMHgwMDAxLCAweDYwNDMsIDB4MDAwMCwgMHg2MDhhLCAweDYyOGUsIDB4NjAyNCwKLQkweGQwOTQsIDB4MDBjMCwgMHg2ZmY4LCAweDZhMDQsIDB4YTI5NCwgMHg0MDAwLCAweDAwYzAsIDB4NmZlZiwKLQkweDAyN2YsIDB4MGQ3ZiwgMHgwMDdmLCAweDE1N2YsIDB4MjAwOSwgMHgwMTdmLCAweDIwMGIsIDB4MDAwMCwKLQkweDAwNzgsIDB4NzA0MiwgMHgyMDA5LCAweDAxN2YsIDB4MjAwYiwgMHgwMGExLCAweDE1N2UsIDB4MDA3ZSwKLQkweDBkN2UsIDB4MjA2OSwgMHgwMTQwLCAweDIwYTksIDB4MDAxZSwgMHgyMDA5LCAweDAxNjksIDB4NjgwNCwKLQkweGEwODQsIDB4NDAwMCwgMHgwMDQwLCAweDcwM2IsIDB4NjAyMCwgMHhkMGJjLCAweDAwNDAsIDB4NzAzYiwKLQkweDIxMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDcwM2IsIDB4MDBmMCwKLQkweDcwMGYsIDB4MDI3ZSwgMHg2MTY0LCAweGExOGMsIDB4MDBmZiwgMHg4MTA3LCAweDYxMzAsIDB4YTE4YywKLQkweDAwZmYsIDB4YTEwZCwgMHg2MDg4LCAweDYyOGMsIDB4NjA4YiwgMHhiYzkxLCAweDYxOGUsIDB4NjA0MywKLQkweDAwMDEsIDB4NjA0MywgMHgwMDAwLCAweDYwOGEsIDB4NjI4ZSwgMHg2YTA0LCAweGEyOTQsIDB4NDAwMCwKLQkweDAwYzAsIDB4NzAzNSwgMHgwMjdmLCAweDBkN2YsIDB4MDA3ZiwgMHgxNTdmLCAweDIwMDksIDB4MDE3ZiwKLQkweDIwMGIsIDB4MDAwMCwgMHgwYzdmLCAweDEyN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMjAsIDB4YTAwNSwgMHgwMDQwLCAweDcwNGUsIDB4ODAwMSwgMHg3MDIyLCAweDBlN2YsIDB4MDA3YywKLQkweDIwYTksIDB4MDAwOCwgMHgyMGEyLCAweDAwZjAsIDB4NzA1MiwgMHgyMGEyLCAweDIwYTIsIDB4MDA3YywKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MDc3ZSwgMHgwNjdlLCAweDAwN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGE1YWIsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4MjAzOSwKLQkweDAwMDEsIDB4ODdmZiwgMHgwMDQwLCAweDcwZjQsIDB4OGNmZiwgMHgwMDQwLCAweDcwZjQsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDcwZWYsIDB4ODhmZiwgMHgwMDQwLCAweDcwN2YsIDB4MjgwMCwKLQkweGFjMDYsIDB4MDBjMCwgMHg3MGVmLCAweDIwMzksIDB4MDAwMCwgMHgwMDc4LCAweDcwOGEsIDB4NjAxOCwKLQkweGEyMDYsIDB4MDBjMCwgMHg3MGVmLCAweDg1ZmYsIDB4MDA0MCwgMHg3MDhhLCAweDYwMjAsIDB4YTEwNiwKLQkweDAwYzAsIDB4NzBlZiwgMHg3MDI0LCAweGFjMDYsIDB4MDBjMCwgMHg3MGJhLCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDcwYjUsIDB4MTA3OCwgMHg1OTVhLCAweDY4MTcsIDB4MDAwOCwKLQkweDY4YzMsIDB4MDAwMCwgMHgxMDc4LCAweDcxODgsIDB4NzAyNywgMHgwMDAwLCAweDAzN2UsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDA0MCwgMHg3MGFhLCAweDY4MDMsIDB4MDEwMCwKLQkweDY4MDMsIDB4MDAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAwNDAsIDB4NzBiMiwKLQkweDY4MjcsIDB4MDAwMSwgMHgwMzdmLCAweDAwNzgsIDB4NzBiYSwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwKLQkweDAwNzgsIDB4NzBlZiwgMHg3MDE0LCAweGFjMzYsIDB4MDBjMCwgMHg3MGMwLCAweDY2MGMsIDB4NzYxNiwKLQkweDcwMTAsIDB4YWMzNiwgMHgwMGMwLCAweDcwY2UsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NzBjYywKLQkweDJmMDAsIDB4NzAxMiwgMHgwMDc4LCAweDcwY2UsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwKLQkweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDcwZDcsIDB4N2UwZSwgMHgwMDc4LCAweDcwZDgsIDB4MjY3OCwKLQkweDg5ZmYsIDB4MDBjMCwgMHg3MGU3LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg3MGU1LCAweDEwNzgsIDB4OWU3MCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDcwNDUsIDB4ODhmZiwgMHgwMGMwLCAweDcwZmUsIDB4MGM3ZiwgMHgwMDc4LCAweDcwNjksIDB4MmM3OCwKLQkweDYwMGMsIDB4MjA2MCwgMHgwMDc4LCAweDcwNjksIDB4YTAwNiwgMHgxMjdmLCAweDAwN2YsIDB4MDY3ZiwKLQkweDA3N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDYwMTcsIDB4MDAwMCwKLQkweDBjN2YsIDB4YThjNSwgMHgwMDAxLCAweDAwNzgsIDB4NzBmNSwgMHgwZjdlLCAweDBlN2UsIDB4MGQ3ZSwKLQkweDBjN2UsIDB4MDY3ZSwgMHgwMjdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweGE1YWIsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwMDQwLCAweDcxNzcsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDcxNzIsIDB4ODdmZiwgMHgwMDQwLCAweDcxMjUsIDB4MjcwMCwKLQkweGFjMDYsIDB4MDBjMCwgMHg3MTcyLCAweDAwNzgsIDB4NzEzMCwgMHg2MDE4LCAweGEyMDYsIDB4MDBjMCwKLQkweDcxNzIsIDB4ODVmZiwgMHgwMDQwLCAweDcxMzAsIDB4NjAyMCwgMHhhMTA2LCAweDAwYzAsIDB4NzE3MiwKLQkweDcwM2MsIDB4YWMwNiwgMHgwMGMwLCAweDcxNDIsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDEsIDB4MTA3OCwKLQkweDZlNmMsIDB4NzAzMywgMHgwMDAwLCAweDcwM2YsIDB4MDAwMCwgMHg3MDQzLCAweDAwMDAsIDB4NzA0NywKLQkweDAwMDAsIDB4MDM3ZiwgMHg3MDM4LCAweGFjMzYsIDB4MDBjMCwgMHg3MTQ4LCAweDY2MGMsIDB4NzYzYSwKLQkweDcwMzQsIDB4YWMzNiwgMHgwMGMwLCAweDcxNTYsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NzE1NCwKLQkweDJmMDAsIDB4NzAzNiwgMHgwMDc4LCAweDcxNTYsIDB4NzAzNywgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwKLQkweDJjMDAsIDB4YWYwNiwgMHgwMDQwLCAweDcxNWYsIDB4N2UwZSwgMHgwMDc4LCAweDcxNjAsIDB4MjY3OCwKLQkweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NzE2YSwKLQkweDEwNzgsIDB4OWU3MCwgMHgxMDc4LCAweDhjMDEsIDB4ODdmZiwgMHgwMGMwLCAweDcxODEsIDB4MGM3ZiwKLQkweDAwNzgsIDB4NzExNCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwMDc4LCAweDcxMTQsIDB4YTAwNiwKLQkweDEyN2YsIDB4MDA3ZiwgMHgwMjdmLCAweDA2N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4NjAxNywgMHgwMDAwLCAweDBjN2YsIDB4YTdiZCwgMHgwMDAxLCAweDAwNzgsIDB4NzE3OCwKLQkweDBlN2UsIDB4MjA3MSwgMHhhNWFiLCAweDIwMDEsIDB4YTMwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4NzE5NiwgMHg3MDA3LCAweDAwMDUsIDB4MDA3OCwgMHg3MTk4LCAweDcwMDcsIDB4MDAwMCwKLQkweDBlN2YsIDB4MDA3YywgMHgwZjdlLCAweDBlN2UsIDB4MGM3ZSwgMHgwNjdlLCAweDAyN2UsIDB4MDA3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTVhYiwgMHgyYzEwLCAweDc2MzgsIDB4MjY2MCwKLQkweDI2NzgsIDB4OGNmZiwgMHgwMDQwLCAweDcxZDgsIDB4MjIwMCwgMHhhYzA2LCAweDAwYzAsIDB4NzFkMywKLQkweDcwMzgsIDB4YWMzNiwgMHgwMGMwLCAweDcxYjYsIDB4NjYwYywgMHg3NjNhLCAweDcwMzQsIDB4YWMzNiwKLQkweDAwYzAsIDB4NzFjNCwgMHgyYzAwLCAweGFmMzYsIDB4MDA0MCwgMHg3MWMyLCAweDJmMDAsIDB4NzAzNiwKLQkweDAwNzgsIDB4NzFjNCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgyYzAwLCAweGFmMDYsIDB4MDA0MCwKLQkweDcxY2MsIDB4N2UwZSwgMHgwMDc4LCAweDcxY2QsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg3MWQ4LCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDAwNzgsIDB4NzFhOSwKLQkweDEyN2YsIDB4MDA3ZiwgMHgwMjdmLCAweDA2N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MDY3ZSwgMHgwMDdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhNWFiLCAweDc2MGMsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDA0MCwKLQkweDcyNzksIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMjA2LCAweDAwYzAsIDB4NzI3NCwKLQkweDcwMjQsIDB4YWMwNiwgMHgwMGMwLCAweDcyMWYsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwKLQkweDAwNDAsIDB4NzI0ZCwgMHgxMDc4LCAweDZjNDEsIDB4NjhjMywgMHgwMDAwLCAweDEwNzgsIDB4NzE4OCwKLQkweDcwMjcsIDB4MDAwMCwgMHgwMzdlLCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweGEzODQsIDB4MTAwMCwKLQkweDAwNDAsIDB4NzIxNiwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwKLQkweDY4MjQsIDB4ZDA4NCwgMHgwMDQwLCAweDcyMWUsIDB4NjgyNywgMHgwMDAxLCAweDAzN2YsIDB4NzAwYywKLQkweGFjMzYsIDB4MDBjMCwgMHg3MjI1LCAweDY2MGMsIDB4NzYwZSwgMHg3MDA4LCAweGFjMzYsIDB4MDBjMCwKLQkweDcyMzMsIDB4MmMwMCwgMHhhZjM2LCAweDAwNDAsIDB4NzIzMSwgMHgyZjAwLCAweDcwMGEsIDB4MDA3OCwKLQkweDcyMzMsIDB4NzAwYiwgMHgwMDAwLCAweDY2MGMsIDB4MDY3ZSwgMHgyYzAwLCAweGFmMDYsIDB4MDA0MCwKLQkweDcyM2MsIDB4N2UwZSwgMHgwMDc4LCAweDcyM2QsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MTA3OCwKLQkweDhjMjcsIDB4MDBjMCwgMHg3MjUxLCAweDEwNzgsIDB4MjgzOSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwKLQkweDcyNmQsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4NzI2ZCwgMHgxMDc4LCAweDcxODgsIDB4MDA3OCwKLQkweDcyMWYsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4NzI1OSwgMHgxMDc4LCAweDdhMDUsIDB4MDA3OCwKLQkweDcyNmQsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDcyNmQsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDcyODEsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywKLQkweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDcwNDUsIDB4MGM3ZiwgMHgwMDc4LCAweDcxZWUsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDA3OCwKLQkweDcxZWUsIDB4MTI3ZiwgMHgwMDdmLCAweDA2N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwgMHg3MjZkLCAweDEwNzgsIDB4OWU3MCwKLQkweDAwNzgsIDB4NzI2ZCwgMHgwMzdlLCAweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDM5MDgsIDB4YTAwNiwKLQkweGExOTAsIDB4MDAyMCwgMHgyMjFjLCAweGEzOWUsIDB4MjYwYywgMHgwMGMwLCAweDcyOWIsIDB4ODIxMCwKLQkweDgwMDAsIDB4MDA3OCwgMHg3MjkyLCAweGEwMDUsIDB4MDA0MCwgMHg3MmE3LCAweDIwYTksIDB4MDAyMCwKLQkweDIxOTgsIDB4ODIxMSwgMHhhMjgyLCAweDAwMjAsIDB4MjBjOCwgMHgyMGEwLCAweDUzYTMsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MTU3ZiwgMHgwMzdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZjgsIDB4MjBhMywgMHgwMjAwLCAweDIwYTMsIDB4MDAxNCwgMHg2MGMzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwOTksIDB4YTVhMywgMHgyMGE5LCAweDAwMDQsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwNCwgMHgyMGEzLCAweDc4NzgsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwZDdmLCAweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwKLQkweDIwYTMsIDB4MDIxNCwgMHgyMGEzLCAweDAwMTgsIDB4MjBhMywgMHgwODAwLCAweDc4MTAsIDB4YTA4NCwKLQkweGZmMDAsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODEwLCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLCAweDc4MjgsIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDE4LCAweDEwNzgsIDB4NmMyZCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgwMTdlLCAweDJmNjgsIDB4MjAwOSwgMHgwMDM1LCAweDEwNzgsIDB4OGVmNSwKLQkweDAwYzAsIDB4NzM2MSwgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwgMHg2NTY3LCAweDIwYTMsIDB4MTMwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODI4LCAweDIwNjgsIDB4NjgxYywgMHhhMDg2LCAweDAwMDMsIDB4MDA0MCwKLQkweDczM2QsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwgMHhhMjg2LCAweDAwN2UsIDB4MDBjMCwKLQkweDczMTcsIDB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmZSwgMHgwMDc4LCAweDczNTIsIDB4YTI4NiwKLQkweDAwN2YsIDB4MDBjMCwgMHg3MzIxLCAweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmQsIDB4MDA3OCwKLQkweDczNTIsIDB4ZDJiYywgMHgwMDQwLCAweDczMzcsIDB4YTI4NiwgMHgwMDgwLCAweDAwYzAsIDB4NzMyZSwKLQkweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmMsIDB4MDA3OCwgMHg3MzUyLCAweGEyZTgsIDB4YTQzNCwKLQkweDJkNmMsIDB4NjgxMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMDc4LCAweDczNTIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjA5OCwgMHgyMGEyLCAweDAwNzgsIDB4NzM1MiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4YTA4MiwgMHgwMDdlLCAweDAwNDgsIDB4NzM0ZSwgMHgwZDdlLCAweDIwNjksIDB4YTMxYSwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg3MzUyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwMzAsIDB4MjBhMiwgMHg3ODM0LCAweDIwYTIsIDB4NzgzOCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMGMsIDB4MTA3OCwgMHg2YzJkLCAweDAxN2YsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4NzgxNywgMHgwMDAxLCAweDc4MDMsIDB4MDAwNiwgMHgwMTdmLCAweDBkN2YsIDB4MDA3YywKLQkweDBkN2UsIDB4MDI3ZSwgMHg3OTI4LCAweDIxNjgsIDB4NjkxYywgMHhhMTg2LCAweDAwMDYsIDB4MDA0MCwKLQkweDczOGEsIDB4YTE4NiwgMHgwMDAzLCAweDAwNDAsIDB4NzNlNSwgMHhhMTg2LCAweDAwMDUsIDB4MDA0MCwKLQkweDczYzgsIDB4YTE4NiwgMHgwMDA0LCAweDAwNDAsIDB4NzNiOCwgMHhhMTg2LCAweDAwMDgsIDB4MDA0MCwKLQkweDczZDIsIDB4NzgwNywgMHgwMDM3LCAweDc4MTMsIDB4MTcwMCwgMHgxMDc4LCAweDc0NTAsIDB4MDI3ZiwKLQkweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweDc0MGQsIDB4MjAwOSwgMHg0MDAwLCAweDY4MDAsIDB4MDA3OSwKLQkweDczOTEsIDB4NzNhNCwgMHg3M2IyLCAweDczYTYsIDB4NzNiMiwgMHg3M2FkLCAweDczYTQsIDB4NzNhNCwKLQkweDczYjIsIDB4NzNiMiwgMHg3M2IyLCAweDczYjIsIDB4NzNhNCwgMHg3M2E0LCAweDczYTQsIDB4NzNhNCwKLQkweDczYTQsIDB4NzNiMiwgMHg3M2E0LCAweDczYjIsIDB4MTA3OCwgMHgxMzI4LCAweDY4MjQsIDB4ZDBlNCwKLQkweDAwNDAsIDB4NzNhZCwgMHhkMGNjLCAweDAwNDAsIDB4NzNiMCwgMHhhMDBlLCAweDAwNzgsIDB4NzNiMiwKLQkweDIwMDksIDB4MjAwMCwgMHg2ODI4LCAweDIwYTIsIDB4NjgyYywgMHgyMGEyLCAweDAwNzgsIDB4NzQwMywKLQkweDEwNzgsIDB4NzQwZCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwMDksIDB4NDAwMCwKLQkweDZhMDAsIDB4YTI4NiwgMHgwMDAyLCAweDAwYzAsIDB4NzNjNiwgMHhhMDBlLCAweDAwNzgsIDB4NzQwMywKLQkweDEwNzgsIDB4NzQwZCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwMDksIDB4NDAwMCwKLQkweDAwNzgsIDB4NzQwMywgMHgxMDc4LCAweDc0MGQsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwMDksIDB4NDAwMCwgMHhhMjg2LCAweDAwMDUsIDB4MDA0MCwgMHg3M2UyLCAweGEyODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4NzNlMywgMHhhMDBlLCAweDAwNzgsIDB4NzQwMywgMHgxMDc4LCAweDc0MGQsIDB4NjgxMCwKLQkweDIwNjgsIDB4Njk3YywgMHg2ODEwLCAweGExMTIsIDB4Njk4MCwgMHg2ODE0LCAweGExMDMsIDB4MjBhMiwKLQkweDIyYTIsIDB4NzkyOCwgMHhhMTgwLCAweDAwMDAsIDB4MjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwKLQkweDc0MDEsIDB4YTA4ZSwgMHgwMDA0LCAweDAwNDAsIDB4NzQwMSwgMHgyMDA5LCAweDQwMDAsIDB4MDA3OCwKLQkweDc0MDMsIDB4MjAwOSwgMHgwMDAwLCAweDIxYTIsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxOCwKLQkweDEwNzgsIDB4NmMyZCwgMHgwMjdmLCAweDBkN2YsIDB4MDA3YywgMHgwMzdlLCAweDA0N2UsIDB4MDU3ZSwKLQkweDA2N2UsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjVmOCwgMHhhMDA2LCAweDIwYTMsIDB4MDIwMCwKLQkweDIwYTIsIDB4NzkzNCwgMHgyMWEyLCAweDc5MzgsIDB4MjFhMiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4YTA5MiwgMHgwMDdlLCAweDAwNDgsIDB4NzQzMywgMHgwZDdlLCAweDIwNjksIDB4YTMxYSwKLQkweDJkMmMsIDB4OGQ2OCwgMHgyZDM0LCAweGEwZTgsIDB4YTQzNCwgMHgyZDZjLCAweDZiMTAsIDB4NmMxNCwKLQkweDBkN2YsIDB4MDA3OCwgMHg3NDM5LCAweDIwMTksIDB4MDAwMCwgMHg2NDk4LCAweDIwMjksIDB4MDAwMCwKLQkweDY2MzAsIDB4NzgyOCwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDc0NDcsIDB4MjVhMiwgMHgyNmEyLCAweDIzYTIsIDB4MjRhMiwgMHgwMDc4LCAweDc0NGIsIDB4MjNhMiwKLQkweDI0YTIsIDB4MjVhMiwgMHgyNmEyLCAweDA2N2YsIDB4MDU3ZiwgMHgwNDdmLCAweDAzN2YsIDB4MDA3YywKLQkweDIwYTEsIDB4MDIwYiwgMHgxMDc4LCAweDY1ZjgsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwOSwgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwKLQkweDAwN2MsIDB4MjBhMSwgMHgwMjBiLCAweDEwNzgsIDB4NjU1ZSwgMHgyMGEzLCAweDE0MDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwgMHg3ODI4LCAweDIwYTIsIDB4NzgyYywKLQkweDIwYTIsIDB4NzgzMCwgMHhhMDg0LCAweDAwZmYsIDB4ODAwNywgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxMCwgMHgxMDc4LCAweDZjMmQsIDB4MDA3YywgMHgyMGExLCAweDAyMGIsIDB4MTA3OCwKLQkweDY1ZWYsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODI4LCAweDIwYTIsIDB4NzgxMCwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDEwNzgsIDB4NmMyZCwgMHgwMDdjLCAweDE0N2UsIDB4MjBhMSwKLQkweDAyMGIsIDB4MTA3OCwgMHg3NDk5LCAweDYwYzMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMmQsIDB4MTQ3ZiwKLQkweDAwN2MsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDc0YjYsIDB4MGQ3ZSwgMHhhMGU4LCAweGE0MzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHgwMzAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YTMxYSwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDBkN2YsIDB4MDA3OCwgMHg3NGJlLCAweDIwYTMsIDB4MDMwMCwKLQkweDYyOTgsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4NjIzMCwgMHgyMmEyLCAweDIwYTMsIDB4MDgxOSwKLQkweDIwYTMsIDB4MDAwMCwgMHgxMDc4LCAweDZjMWMsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4MmZhMiwKLQkweDdhMDgsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAwN2MsIDB4MjA2MSwKLQkweGFhMDAsIDB4MmE3MCwgMHg3MDYwLCAweDcwNDYsIDB4NzA0YiwgMHhhYTAwLCAweDAwN2MsIDB4MGU3ZSwKLQkweDEyN2UsIDB4MjA3MSwgMHhhMzAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTQ0LCAweGE1ODIsIDB4MDAxMCwKLQkweDAwNDgsIDB4NzUwOSwgMHg3MDQ4LCAweDIwNjAsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwKLQkweDc0ZjUsIDB4YWNlMCwgMHgwMDEwLCAweDcwNTQsIDB4YWMwMiwgMHgwMGM4LCAweDc0ZjEsIDB4MDA3OCwKLQkweDc0ZTQsIDB4MjA2MSwgMHhhYTAwLCAweDAwNzgsIDB4NzRlNCwgMHg2MDAzLCAweDAwMDgsIDB4ODUyOSwKLQkweDc1NDYsIDB4YWNhOCwgMHgwMDEwLCAweDcwNTQsIDB4YTUwMiwgMHgwMGM4LCAweDc1MDUsIDB4NzU0YSwKLQkweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywgMHg3MDRiLCAweGFhMDAsIDB4MDA3OCwKLQkweDc1MDAsIDB4YTAwNiwgMHgwMDc4LCAweDc1MDIsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzU0NCwKLQkweGE1ODIsIDB4MDAxMCwgMHgwMDQ4LCAweDc1M2EsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDAsIDB4MDA0MCwgMHg3NTI3LCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwKLQkweDc1MjMsIDB4MDA3OCwgMHg3NTE2LCAweDIwNjEsIDB4YWEwMCwgMHgwMDc4LCAweDc1MTYsIDB4NjAwMywKLQkweDAwMDgsIDB4ODUyOSwgMHg3NTQ2LCAweGFjYTgsIDB4MDAxMCwgMHg3MDU0LCAweGE1MDIsIDB4MDBjOCwKLQkweDc1MzYsIDB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MGU3ZiwgMHgwMDdjLCAweDcwNGIsIDB4YWEwMCwKLQkweDAwNzgsIDB4NzUzMiwgMHhhMDA2LCAweDAwNzgsIDB4NzUzNCwgMHhhYzgyLCAweGFhMDAsIDB4MTA0OCwKLQkweDEzMjgsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwgMHgxMGM4LCAweDEzMjgsIDB4YTAwNiwKLQkweDYwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDYwMTIsIDB4NjAxNiwgMHg2MDFhLCAweDYwMWYsIDB4MDAwMCwKLQkweDYwMDMsIDB4MDAwMCwgMHg2MDIyLCAweDYwMjYsIDB4NjAyYSwgMHg2MDJlLCAweDYwMzIsIDB4NjAzNiwKLQkweDYwM2EsIDB4NjAzZSwgMHgyMDYxLCAweGEzMDAsIDB4NjA0NCwgMHg4MDAwLCAweDYwNDYsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDA0MCwgMHg3NTY0LCAweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDYxMDksIDB4MTI3ZiwgMHgwMDc4LCAweDc1NjMsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MDA3OSwKLQkweDc1NzEsIDB4NzU3YSwgMHg3NThiLCAweDc1YTcsIDB4NzVjMywgMHg4ZjJkLCAweDhmNDksIDB4OGY2NSwKLQkweDc1N2EsIDB4NzU4YiwgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg3NTgzLCAweDEwNzgsIDB4NjAxMCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweGExOGUsIDB4MDA0NywgMHgwMGMwLCAweDc1OGEsIDB4YTAxNiwKLQkweDEwNzgsIDB4MTVlYywgMHgwMDdjLCAweDA2N2UsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MTBjOCwKLQkweDEzMjgsIDB4MTA3OSwgMHg3NTk1LCAweDA2N2YsIDB4MDA3YywgMHg3NWE1LCAweDc4OTEsIDB4N2EzNCwKLQkweDc1YTUsIDB4N2FiOCwgMHg3NWRmLCAweDc1YTUsIDB4NzVhNSwgMHg3ODIzLCAweDdlNmQsIDB4NzVhNSwKLQkweDc1YTUsIDB4NzVhNSwgMHg3NWE1LCAweDc1YTUsIDB4NzVhNSwgMHgxMDc4LCAweDEzMjgsIDB4MDY3ZSwKLQkweDYwMDAsIDB4YTBiMiwgMHgwMDEwLCAweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDc1YjEsIDB4MDY3ZiwKLQkweDAwN2MsIDB4NzVjMSwgMHg4NTIyLCAweDc1YzEsIDB4NzVjMSwgMHg3NWMxLCAweDc1YzEsIDB4NzVjMSwKLQkweDc1YzEsIDB4ODRjNSwgMHg4NmE4LCAweDc1YzEsIDB4ODU1MiwgMHg4NWQ4LCAweDg1NTIsIDB4ODVkOCwKLQkweDc1YzEsIDB4MTA3OCwgMHgxMzI4LCAweDA2N2UsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MTBjOCwKLQkweDEzMjgsIDB4MTA3OSwgMHg3NWNkLCAweDA2N2YsIDB4MDA3YywgMHg3NWRkLCAweDdlYjQsIDB4N2Y4MSwKLQkweDgwYzYsIDB4ODI0MiwgMHg3NWRkLCAweDc1ZGQsIDB4NzVkZCwgMHg3ZThkLCAweDg0NmQsIDB4ODQ3MSwKLQkweDc1ZGQsIDB4NzVkZCwgMHg3NWRkLCAweDc1ZGQsIDB4ODRhMSwgMHgxMDc4LCAweDEzMjgsIDB4YTFiNiwKLQkweDAwMTUsIDB4MDBjMCwgMHg3NWU3LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDc1ZWQsIDB4YTFiNiwKLQkweDAwMTYsIDB4MTBjMCwgMHgxMzI4LCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDIwYTksIDB4MDAwZSwKLQkweDJlOTgsIDB4NjAxMCwgMHgyMGEwLCAweDUzYTMsIDB4MjBhOSwgMHgwMDA2LCAweDMzMTAsIDB4MzQyMCwKLQkweDkzOTgsIDB4OTRhMCwgMHgzMzE4LCAweDM0MjgsIDB4MjIyZSwgMHgyMzI2LCAweGEyOTAsIDB4MDAwMiwKLQkweGE1YTgsIDB4MDAwMiwgMHhhMzk4LCAweDAwMDIsIDB4YTRhMCwgMHgwMDAyLCAweDAwZjAsIDB4NzVmYywKLQkweDBlN2UsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4NzYxMywgMHg2MDEwLCAweDIwNzAsIDB4NzAwNywKLQkweDAwMDAsIDB4NzAzNywgMHgwMTAzLCAweDBlN2YsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDAzN2UsIDB4NzMzMCwgMHhhMzg2LCAweDAyMDAsIDB4MDBjMCwgMHg3NjI0LCAweDYwMTgsIDB4MjA2OCwKLQkweDY4MTMsIDB4MDBmZiwgMHg2ODE3LCAweGZmZmQsIDB4NjAxMCwgMHhhMDA1LCAweDAwNDAsIDB4NzYyZSwKLQkweDIwNjgsIDB4NjgwNywgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywgMHg2YjMyLCAweDEwNzgsIDB4NzUzZCwKLQkweDAzN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MjBhOSwgMHgwMDJhLCAweGFlODAsIDB4MDAwYywKLQkweDIwOTgsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwgMHg1M2EzLCAweDIwYTksIDB4MDAyYSwKLQkweDYwMTAsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4MCwgMHgwMDAyLCAweDIwYTAsIDB4NTNhMywKLQkweDBlN2UsIDB4NjAxMCwgMHgyMDA0LCAweDIwNzAsIDB4NzAzNywgMHgwMTAzLCAweDBlN2YsIDB4MTA3OCwKLQkweDc1M2QsIDB4MDE3ZiwgMHgwMDdjLCAweDBlN2UsIDB4MGQ3ZSwgMHg2MDNmLCAweDAwMDAsIDB4MmM2OCwKLQkweDAxN2UsIDB4MjAwOSwgMHgwMDM1LCAweDEwNzgsIDB4OGVmNSwgMHgwMTdmLCAweDAwYzAsIDB4NzY2ZiwKLQkweDAyN2UsIDB4NjIyOCwgMHgyMjY4LCAweDAyN2YsIDB4MjA3MSwgMHhhODhjLCAweDZiMWMsIDB4YTM4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHg3NjczLCAweGEzODYsIDB4MDAwNiwgMHgwMDQwLCAweDc2NzcsIDB4MTA3OCwKLQkweDc1M2QsIDB4MDA3OCwgMHg3Njc5LCAweDEwNzgsIDB4NzY3YywgMHgwMDc4LCAweDc2NzksIDB4MTA3OCwKLQkweDc3MWUsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MGY3ZSwgMHg2ODEwLCAweDIwNzgsIDB4YTE4NiwKLQkweDAwMTUsIDB4MDA0MCwgMHg3NzA1LCAweGExOGUsIDB4MDAxNiwgMHgwMGMwLCAweDc3MWMsIDB4NzAwYywKLQkweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDE3MDAsIDB4MDBjMCwgMHg3NmUwLCAweDhmZmYsIDB4MDA0MCwKLQkweDc3MWEsIDB4NjgwOCwgMHhhMDg2LCAweGZmZmYsIDB4MDBjMCwgMHg3NzA5LCAweDc4NGMsIDB4YTA4NCwKLQkweDAwNjAsIDB4YTA4NiwgMHgwMDIwLCAweDAwYzAsIDB4NzZhNywgMHg3OTdjLCAweDc4MTAsIDB4YTEwNiwKLQkweDAwYzAsIDB4NzcwOSwgMHg3OTgwLCAweDc4MTQsIDB4YTEwNiwgMHgwMGMwLCAweDc3MDksIDB4MTA3OCwKLQkweDhiZjQsIDB4NjgzMCwgMHg3ODUyLCAweDc4NGMsIDB4YzBkYywgMHhjMGY0LCAweGMwZDQsIDB4Nzg0ZSwKLQkweDAyN2UsIDB4YTAwZSwgMHg2YTE0LCAweDIwMDEsIDB4MDAwYSwgMHgxMDc4LCAweDVhOTgsIDB4Nzg1NCwKLQkweGEyMGEsIDB4MDA0OCwgMHg3NmJjLCAweDgwMTEsIDB4N2E1NiwgMHg4MmZmLCAweDAyN2YsIDB4MDBjMCwKLQkweDc2YzgsIDB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4ODgzMiwgMHgwYzdmLCAweDAwNzgsIDB4NzcxYSwKLQkweDBjN2UsIDB4MGQ3ZSwgMHgyZjY4LCAweDY4MzgsIDB4ZDBmYywgMHgwMGMwLCAweDc2ZDMsIDB4MTA3OCwKLQkweDQyOTAsIDB4MDA3OCwgMHg3NmQ1LCAweDEwNzgsIDB4NDM2ZSwgMHgwZDdmLCAweDBjN2YsIDB4MDBjMCwKLQkweDc3MDksIDB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDAwNzgsIDB4NzcxYSwKLQkweDcwMDgsIDB4YTA4NiwgMHgwMDBiLCAweDAwYzAsIDB4NzZmYSwgMHg2MDE4LCAweDIwMGMsIDB4YzFiYywKLQkweDIxMDIsIDB4MGM3ZSwgMHgyZDYwLCAweDc4NTMsIDB4MDAwMywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywKLQkweDAwMGIsIDB4NjAxZiwgMHgwMDAyLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGM3ZiwKLQkweDAwNzgsIDB4NzcxYSwgMHg3MDBjLCAweGEwODYsIDB4MmEwMCwgMHgwMGMwLCAweDc3MDksIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDAwNzgsIDB4NzcxYSwgMHgxMDc4LCAweDc3MzksIDB4MDA3OCwKLQkweDc3MWMsIDB4OGZmZiwgMHgxMDQwLCAweDEzMjgsIDB4MGM3ZSwgMHgwZDdlLCAweDJkNjAsIDB4MmY2OCwKLQkweDY4NGIsIDB4MDAwMywgMHgxMDc4LCAweDg3MjYsIDB4MTA3OCwgMHg4YmY0LCAweDEwNzgsIDB4OGMwMSwKLQkweDBkN2YsIDB4MGM3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MGY3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxNSwKLQkweDAwYzAsIDB4NzcyOCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDAwNzgsIDB4NzczNiwKLQkweGExOGUsIDB4MDAxNiwgMHgwMGMwLCAweDc3MzgsIDB4MGM3ZSwgMHgyZDAwLCAweDIwNjAsIDB4MTA3OCwKLQkweGExMzQsIDB4MTA3OCwgMHg1YTQxLCAweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MDI3ZSwgMHgwMzdlLCAweDA0N2UsIDB4NzIyOCwgMHg3YzgwLCAweDdiN2MsIDB4ZDJmNCwKLQkweDAwNDAsIDB4Nzc0OCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDAwNzgsIDB4NzdhYywKLQkweDBjN2UsIDB4MmQ2MCwgMHgxMDc4LCAweDg3NGEsIDB4MGM3ZiwgMHg2ODA0LCAweGEwODYsIDB4MDA1MCwKLQkweDAwYzAsIDB4Nzc2MCwgMHgwYzdlLCAweDJkMDAsIDB4MjA2MCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNTAsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdmLCAweDAwNzgsIDB4NzdhYywKLQkweDY4MDAsIDB4YTA4NiwgMHgwMDBmLCAweDAwNDAsIDB4Nzc4MiwgMHg4ZmZmLCAweDEwNDAsIDB4MTMyOCwKLQkweDY4MjQsIDB4ZDBkYywgMHgwMGMwLCAweDc3ODIsIDB4NjgwMCwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDc3ODcsIDB4Nzg0YywgMHhkMGFjLCAweDAwNDAsIDB4Nzc4NywgMHg3ODRjLCAweGMwZGMsIDB4YzBmNCwKLQkweDc4NGUsIDB4Nzg1MCwgMHhjMGY0LCAweGMwZmMsIDB4Nzg1MiwgMHgyMDAxLCAweDAwMDEsIDB4NjgyZSwKLQkweDAwNzgsIDB4NzdhNiwgMHgyMDAxLCAweDAwMDcsIDB4NjgyZSwgMHgwMDc4LCAweDc3YTYsIDB4Nzg0YywKLQkweGQwYjQsIDB4MDBjMCwgMHg3Nzk0LCAweGQwYWMsIDB4MDA0MCwgMHg3NzgyLCAweDc4NGMsIDB4ZDBmNCwKLQkweDAwYzAsIDB4Nzc4MiwgMHgwMDc4LCAweDc3NzUsIDB4ZDJlYywgMHgwMGMwLCAweDc3ODIsIDB4NzAyNCwKLQkweGEzMDYsIDB4MDBjMCwgMHg3NzlmLCAweDcwMjAsIDB4YTQwNiwgMHgwMDQwLCAweDc3ODIsIDB4NzAyMCwKLQkweDY4MzYsIDB4NzAyNCwgMHg2ODNhLCAweDIwMDEsIDB4MDAwNSwgMHg2ODJlLCAweDEwNzgsIDB4OGQyYiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDc3YWUsIDB4MTA3OCwgMHg3NTNkLCAweDA0N2YsIDB4MDM3ZiwKLQkweDAyN2YsIDB4MDA3YywgMHgwZTdlLCAweDBkN2UsIDB4MDI3ZSwgMHg2MDM0LCAweDIwNjgsIDB4NmExYywKLQkweGEyODYsIDB4MDAwNywgMHgwMDQwLCAweDc4MDYsIDB4YTI4NiwgMHgwMDAyLCAweDAwNDAsIDB4NzgwNiwKLQkweGEyODYsIDB4MDAwMCwgMHgwMDQwLCAweDc4MDYsIDB4NjgwOCwgMHg2MzM4LCAweGEzMDYsIDB4MDBjMCwKLQkweDc4MDYsIDB4MjA3MSwgMHhhODhjLCAweGExODYsIDB4MDAxNSwgMHgwMDQwLCAweDc4MDAsIDB4YTE4ZSwKLQkweDAwMTYsIDB4MDBjMCwgMHg3N2U4LCAweDYwMzAsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwMSwKLQkweDAwYzAsIDB4NzdlOCwgMHg3MDBjLCAweGEwODYsIDB4MmEwMCwgMHgwMGMwLCAweDc3ZTgsIDB4NjAzNCwKLQkweGEwODAsIDB4MDAwOSwgMHgyMDBjLCAweGMxZGQsIDB4YzFmNSwgMHgyMTAyLCAweDAwNzgsIDB4NzgwMCwKLQkweDBjN2UsIDB4NjAzNCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MTA0MCwKLQkweDEzMjgsIDB4Njg1MywgMHgwMDAzLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwKLQkweDAwMDIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwYzdmLCAweDAwNzgsIDB4NzgwNiwKLQkweDYwMzQsIDB4MjA2OCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2ODNlLCAweDEwNzgsIDB4NzUzZCwKLQkweDAyN2YsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHgyMGE5LCAweDAwMGUsIDB4MmU5OCwKLQkweDYwMTAsIDB4MjBhMCwgMHg1M2EzLCAweGExYjYsIDB4MDAxNSwgMHgwMGMwLCAweDc4MjAsIDB4NjAxOCwKLQkweDIwNjgsIDB4NzAzOCwgMHg2ODBhLCAweDcwM2MsIDB4NjgwZSwgMHg2ODAwLCAweGMwOGQsIDB4NjgwMiwKLQkweDBkN2YsIDB4MDA3OCwgMHg3NjA4LCAweDIxMDAsIDB4YTFiMiwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwKLQkweGExYjIsIDB4MDA0MCwgMHgwMGM4LCAweDc4ODgsIDB4MDA3OSwgMHg3ODJlLCAweDc4N2MsIDB4Nzg3MCwKLQkweDc4N2MsIDB4Nzg3YywgMHg3ODdjLCAweDc4N2MsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODdjLCAweDc4NmUsIDB4Nzg3YywKLQkweDc4N2MsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4N2MsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4N2MsIDB4Nzg3YywgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4NmUsIDB4Nzg2ZSwKLQkweDc4NmUsIDB4Nzg2ZSwgMHg3ODZlLCAweDc4N2MsIDB4Nzg2ZSwgMHg3ODZlLCAweDEwNzgsIDB4MTMyOCwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDEwNzgsIDB4NWM0NSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDAwN2MsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwKLQkweDVjNDUsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4MDA3YywKLQkweDI2MDAsIDB4MDA3OSwgMHg3ODhiLCAweDc4OGYsIDB4Nzg4ZiwgMHg3ODhmLCAweDc4N2MsIDB4MTA3OCwKLQkweDEzMjgsIDB4NjAwNCwgMHhhMGIyLCAweDAwNDQsIDB4MTBjOCwgMHgxMzI4LCAweGExYjYsIDB4MDAxMywKLQkweDAwYzAsIDB4NzhhMSwgMHhhMGIyLCAweDAwNDAsIDB4MDBjOCwgMHg3OWZiLCAweDIwMDgsIDB4MDA3OSwKLQkweDc5NDEsIDB4YTFiNiwgMHgwMDI3LCAweDAwYzAsIDB4NzhmZSwgMHgxMDc4LCAweDYwMTAsIDB4NjAwNCwKLQkweDEwNzgsIDB4OGMyNywgMHgwMDQwLCAweDc4YmUsIDB4MTA3OCwgMHg4YzNiLCAweDAwNDAsIDB4NzhmNiwKLQkweGEwOGUsIDB4MDAyMSwgMHgwMDQwLCAweDc4ZmEsIDB4YTA4ZSwgMHgwMDIyLCAweDAwNDAsIDB4NzhmNiwKLQkweGEwOGUsIDB4MDAzZCwgMHgwMDQwLCAweDc4ZmEsIDB4MDA3OCwgMHg3OGYxLCAweDEwNzgsIDB4MjgzOSwKLQkweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0M2YsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwYywKLQkweDEwNzgsIDB4N2EwNSwgMHhhMTg2LCAweDAwN2UsIDB4MDBjMCwgMHg3OGQzLCAweDIwMDEsIDB4YTMzMiwKLQkweDIwMTQsIDB4YzI4NSwgMHgyMjAyLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDIxMTAsIDB4MjAxOSwKLQkweDAwMjgsIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NWM3OCwKLQkweDBjN2UsIDB4NjAxOCwgMHhhMDY1LCAweDAwNDAsIDB4NzhlNywgMHgxMDc4LCAweDQ3MWIsIDB4MGM3ZiwKLQkweDJjMDgsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MDM3ZiwgMHgwMjdmLCAweDAxN2YsIDB4MTA3OCwKLQkweDQ0YmMsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4N2EwNSwKLQkweDAwNzgsIDB4NzhmMSwgMHgxMDc4LCAweDdhMjgsIDB4MDA3OCwgMHg3OGYxLCAweGExODYsIDB4MDAxNCwKLQkweDAwYzAsIDB4NzhmNSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHgyODEzLCAweDEwNzgsIDB4OGMyNywKLQkweDAwYzAsIDB4NzkxZCwgMHgxMDc4LCAweDI4MzksIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwYywKLQkweDEwNzgsIDB4N2EwNSwgMHhhMTg2LCAweDAwN2UsIDB4MDBjMCwgMHg3OTFiLCAweDIwMDEsIDB4YTMzMiwKLQkweDIwMGMsIDB4YzE4NSwgMHgyMTAyLCAweDAwNzgsIDB4NzhmMSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwKLQkweDc5MjUsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4NzhmMSwgMHg2MDA0LCAweGEwOGUsIDB4MDAzMiwKLQkweDAwYzAsIDB4NzkzNiwgMHgwZTdlLCAweDBmN2UsIDB4MjA3MSwgMHhhMzgxLCAweDIwNzksIDB4MDAwMCwKLQkweDEwNzgsIDB4MmI1NiwgMHgwZjdmLCAweDBlN2YsIDB4MDA3OCwgMHg3OGYxLCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MDA0MCwgMHg3OTIxLCAweGEwOGUsIDB4MDAyMiwgMHgxMDQwLCAweDdhMDUsIDB4MDA3OCwKLQkweDc4ZjEsIDB4Nzk4MywgMHg3OTg1LCAweDc5ODksIDB4Nzk4ZCwgMHg3OTkxLCAweDc5OTUsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk5OSwKLQkweDc5YWIsIDB4Nzk4MSwgMHg3OWFkLCAweDc5YWIsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4NzlhYiwgMHg3OWFiLCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ODEsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5ZGUsIDB4NzlhYiwgMHg3OTgxLCAweDc5YTUsIDB4Nzk4MSwKLQkweDc5ODEsIDB4Nzk4MSwgMHg3OWE3LCAweDc5ODEsIDB4Nzk4MSwgMHg3OTgxLCAweDc5YWIsIDB4Nzk4MSwKLQkweDc5ODEsIDB4MTA3OCwgMHgxMzI4LCAweDAwNzgsIDB4NzlhYiwgMHgyMDAxLCAweDAwMGIsIDB4MDA3OCwKLQkweDc5YjgsIDB4MjAwMSwgMHgwMDAzLCAweDAwNzgsIDB4NzliOCwgMHgyMDAxLCAweDAwMDUsIDB4MDA3OCwKLQkweDc5YjgsIDB4MjAwMSwgMHgwMDAxLCAweDAwNzgsIDB4NzliOCwgMHgyMDAxLCAweDAwMDksIDB4MDA3OCwKLQkweDc5YjgsIDB4MTA3OCwgMHg2MDEwLCAweDYwMDMsIDB4MDAwNSwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwKLQkweDYwM2UsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NzliNywgMHgwMDc4LCAweDc5YWIsIDB4MDA3OCwKLQkweDc5YWIsIDB4MTA3OCwgMHg0NDNmLCAweDAwNzgsIDB4NzlmMCwgMHgxMDc4LCAweDYwMTAsIDB4NjAwMywKLQkweDAwMDQsIDB4MjAwMSwgMHhhNWEwLCAweDIwMDQsIDB4NjAxNiwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweDEwNzgsIDB4NDQzZiwgMHgxMDc4LCAweDYwMTAsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NjAzZSwKLQkweDYwMDMsIDB4MDAwMiwgMHgwMzdlLCAweDIwMTksIDB4YTM1YywgMHgyMzA0LCAweGEwODQsIDB4ZmYwMCwKLQkweDAwYzAsIDB4NzljZiwgMHgyMDE5LCAweGE1YTAsIDB4MjMxYywgMHgwMDc4LCAweDc5ZDgsIDB4ODAwNywKLQkweGEwOWEsIDB4MDAwNCwgMHgwMDQ4LCAweDc5Y2EsIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsIDB4YTMxOCwKLQkweDYzMTYsIDB4MDM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3OCwgMHg3OWI3LCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzEsIDB4YTM4MSwgMHgyMDc5LCAweDAwMDAsIDB4MTA3OCwgMHgyYjU2LCAweDBmN2YsIDB4MGU3ZiwKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4NzliNywKLQkweDEwNzgsIDB4NjAxMCwgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwgMHhhNWEwLCAweDIwMDQsIDB4NjAxNiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDI2MDAsIDB4MjAwOCwgMHgwMDc5LCAweDc5ZmYsIDB4N2EwMywKLQkweDdhMDMsIDB4N2EwMywgMHg3OWYwLCAweDEwNzgsIDB4MTMyOCwgMHgwZTdlLCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4N2EyMSwgMHg2MDEwLCAweDIwNzAsIDB4NzAzOCwgMHhkMGZjLCAweDAwNDAsIDB4N2EyMSwKLQkweDcwMDcsIDB4MDAwMCwgMHgwMTdlLCAweDYwMDQsIDB4YTA4ZSwgMHgwMDIxLCAweDAwNDAsIDB4N2EyMywKLQkweGEwOGUsIDB4MDAzZCwgMHgwMDQwLCAweDdhMjMsIDB4MDE3ZiwgMHg3MDM3LCAweDAxMDMsIDB4NzAzMywKLQkweDAxMDAsIDB4MGU3ZiwgMHgwMDdjLCAweDAxN2YsIDB4MTA3OCwgMHg3YTI4LCAweDAwNzgsIDB4N2EyMSwKLQkweDBlN2UsIDB4YWNmMCwgMHgwMDA0LCAweDJlNzQsIDB4NzAwMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywKLQkweDcwMjMsIDB4ODAwMSwgMHgwZTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NjgwNCwKLQkweGEwODQsIDB4MDBmZiwgMHgwZDdmLCAweGEwYjIsIDB4MDAwYywgMHgxMGM4LCAweDEzMjgsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDA0MywgMHgwMGMwLCAweDdhNDgsIDB4MTA3OCwgMHg4ZTZkLCAweDAwNzgsIDB4N2FhNywKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDMzLCAweDAwYzAsIDB4N2E1MSwgMHgxMDc4LCAweDhlMTEsIDB4MDA3OCwKLQkweDdhYTcsIDB4NjYwNCwgMHhhNmI2LCAweDAwMjgsIDB4MDBjMCwgMHg3YTVhLCAweDEwNzgsIDB4OGM2YSwKLQkweDAwNzgsIDB4N2FhNywgMHg2NjA0LCAweGE2YjYsIDB4MDAyOSwgMHgwMGMwLCAweDdhNjMsIDB4MTA3OCwKLQkweDhjODQsIDB4MDA3OCwgMHg3YWE3LCAweDY2MDQsIDB4YTZiNiwgMHgwMDFmLCAweDAwYzAsIDB4N2E2YywKLQkweDEwNzgsIDB4NzVlZSwgMHgwMDc4LCAweDdhYTcsIDB4NjYwNCwgMHhhNmI2LCAweDAwMDAsIDB4MDBjMCwKLQkweDdhNzUsIDB4MTA3OCwgMHg3ODBjLCAweDAwNzgsIDB4N2FhNywgMHg2NjA0LCAweGE2YjYsIDB4MDAyMiwKLQkweDAwYzAsIDB4N2E3ZSwgMHgxMDc4LCAweDc2MTcsIDB4MDA3OCwgMHg3YWE3LCAweDY2MDQsIDB4YTZiNiwKLQkweDAwMzUsIDB4MDBjMCwgMHg3YTg3LCAweDEwNzgsIDB4NzY1MywgMHgwMDc4LCAweDdhYTcsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAzOSwgMHgwMGMwLCAweDdhOTAsIDB4MTA3OCwgMHg3N2IyLCAweDAwNzgsIDB4N2FhNywKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDNkLCAweDAwYzAsIDB4N2E5OSwgMHgxMDc4LCAweDc2MzMsIDB4MDA3OCwKLQkweDdhYTcsIDB4YTFiNiwgMHgwMDE1LCAweDAwYzAsIDB4N2FhMSwgMHgxMDc5LCAweDdhYWMsIDB4MDA3OCwKLQkweDdhYTcsIDB4YTFiNiwgMHgwMDE2LCAweDAwYzAsIDB4N2FhOCwgMHgxMDc5LCAweDdiZmQsIDB4MDA3YywKLQkweDEwNzgsIDB4NzU4MywgMHgwMDc4LCAweDdhYTcsIDB4N2FkMCwgMHg3YWQzLCAweDdhZDAsIDB4N2IxZSwKLQkweDdhZDAsIDB4N2I5MSwgMHg3YzA5LCAweDdhZDAsIDB4N2FkMCwgMHg3YmQ1LCAweDdhZDAsIDB4N2JlYiwKLQkweGExYjYsIDB4MDA0OCwgMHgwMDQwLCAweDdhYzQsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwKLQkweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MGU3ZSwgMHhhY2YwLCAweDAwMDQsIDB4MmU3NCwKLQkweDcwMDAsIDB4MjA3MCwgMHg3MDM3LCAweDAxMDMsIDB4MGU3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDcwN2MsIDB4YTA4NiwKLQkweDAwNzQsIDB4MDBjMCwgMHg3YjA3LCAweDEwNzgsIDB4OWMwYywgMHgwMGMwLCAweDdhZjksIDB4MGQ3ZSwKLQkweDYwMTgsIDB4MjA2OCwgMHg3MDMwLCAweGQwOGMsIDB4MDA0MCwgMHg3YWVjLCAweDY4MDAsIDB4ZDBiYywKLQkweDAwNDAsIDB4N2FlYywgMHhjMGM1LCAweDY4MDIsIDB4MTA3OCwgMHg3YjBiLCAweDBkN2YsIDB4MjAwMSwKLQkweDAwMDYsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4MjgzOSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwKLQkweDdiMDksIDB4MjAwMSwgMHgwMDBhLCAweDEwNzgsIDB4NDQzZiwgMHgxMDc4LCAweDI4MzksIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwgMHgwMDc4LCAweDdiMDksIDB4MTA3OCwKLQkweDdiODEsIDB4MGU3ZiwgMHgwMDdjLCAweDY4MDAsIDB4ZDA4NCwgMHgwMDQwLCAweDdiMWQsIDB4MjAwMSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwNjksIDB4YTM1MSwgMHg2ODA0LCAweGQwYTQsIDB4MDA0MCwKLQkweDdiMWQsIDB4MjAwMSwgMHgwMDA2LCAweDEwNzgsIDB4NDQ3MiwgMHgwMDdjLCAweDBkN2UsIDB4MjAxMSwKLQkweGEzMWYsIDB4MjIwNCwgMHhhMDg2LCAweDAwNzQsIDB4MDBjMCwgMHg3YjdkLCAweDYwMTgsIDB4MjA2OCwKLQkweDZhYTAsIDB4YTI4NiwgMHgwMDdlLCAweDAwYzAsIDB4N2IzMSwgMHgxMDc4LCAweDdkMTcsIDB4MDA3OCwKLQkweDdiN2YsIDB4MTA3OCwgMHg3ZDBkLCAweDYwMTgsIDB4MjA2OCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwKLQkweGEyODYsIDB4MDA4MCwgMHgwMGMwLCAweDdiNTUsIDB4NjgxMywgMHgwMGZmLCAweDY4MTcsIDB4ZmZmYywKLQkweDYwMTAsIDB4YTAwNSwgMHgwMDQwLCAweDdiNGIsIDB4MjA2OCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNywKLQkweDAxMDMsIDB4NjgzMywgMHgwMjAwLCAweDIwMDEsIDB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwKLQkweDI4MzksIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4N2I3ZiwgMHgwZTdlLCAweDIwNzEsIDB4YTMzMiwKLQkweDJlMDQsIDB4ZDA5YywgMHgwMDQwLCAweDdiNzAsIDB4MjA3MSwgMHhhODgwLCAweDcxMDgsIDB4NzIwYywKLQkweGExOGMsIDB4MDBmZiwgMHgwMGMwLCAweDdiNjgsIDB4YTI4NCwgMHhmZjAwLCAweDAwNDAsIDB4N2I3MCwKLQkweDYwMTgsIDB4MjA3MCwgMHg3MGEwLCAweGQwYmMsIDB4MDBjMCwgMHg3YjcwLCAweDcxMTIsIDB4NzIxNiwKLQkweDBlN2YsIDB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDMsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2I3ZiwgMHgxMDc4LCAweDdiODEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDAwNDAsIDB4N2I4YywKLQkweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzMDAsIDB4NzA3YywgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwKLQkweDdiY2YsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHg3YmE0LCAweDYwMTAsIDB4YTAwNSwKLQkweDAwYzAsIDB4N2JhNCwgMHgxMDc4LCAweDM1ZjcsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4MTA3OCwKLQkweDQ1N2QsIDB4MTA3OCwgMHg3YjBiLCAweDBkN2YsIDB4MTA3OCwgMHg3ZGJhLCAweDAwYzAsIDB4N2JjZiwKLQkweDBkN2UsIDB4NjAxOCwgMHgyMDY4LCAweDY4OTAsIDB4MGQ3ZiwgMHhhMDA1LCAweDAwNDAsIDB4N2JjZiwKLQkweDIwMDEsIDB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MGU3ZSwgMHg2MDEwLCAweGEwMDUsIDB4MDA0MCwKLQkweDdiYzgsIDB4MjA3MCwgMHg3MDA3LCAweDAwMDAsIDB4NzAzNywgMHgwMTAzLCAweDcwMzMsIDB4MDIwMCwKLQkweDBlN2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDdiZDMsIDB4MTA3OCwKLQkweDdhMDUsIDB4MTA3OCwgMHg3YjgxLCAweDBlN2YsIDB4MDA3YywgMHgyMDExLCAweGEzMWYsIDB4MjIwNCwKLQkweGEwODYsIDB4MDAxNCwgMHgwMGMwLCAweDdiZTgsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2JlYSwKLQkweDEwNzgsIDB4N2I4MSwgMHgwMDdjLCAweDIwMTEsIDB4YTMxZiwgMHgyMjA0LCAweGEwODYsIDB4MDAwNCwKLQkweDAwYzAsIDB4N2JmYSwgMHgyMDAxLCAweDAwMDcsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwNzgsIDB4N2JmYywgMHgxMDc4LCAweDdiODEsIDB4MDA3YywgMHg3YWQwLCAweDdjMTEsIDB4N2FkMCwKLQkweDdjNGUsIDB4N2FkMCwgMHg3Y2MwLCAweDdjMDksIDB4N2FkMCwgMHg3YWQwLCAweDdjZDUsIDB4N2FkMCwKLQkweDdjZTgsIDB4NjYwNCwgMHhhNmI2LCAweDAwMWUsIDB4MDBjMCwgMHg3YzEwLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgwYzdlLCAweDEwNzgsIDB4N2NmYiwgMHgwMGMwLCAweDdjMjcsIDB4MjAwMSwKLQkweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMiwgMHgxMDc4LCAweDQ0M2YsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDEwNzgsIDB4NWM0NSwgMHgwMDc4LCAweDdjNGIsIDB4MjAwOSwKLQkweGE4OGUsIDB4MjEwNCwgMHhhMDg2LCAweDAwMDksIDB4MDBjMCwgMHg3YzNjLCAweDYwMTgsIDB4MjA2OCwKLQkweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDA0MCwgMHg3YzQ5LCAweDgwMDEsIDB4Njg0MiwKLQkweDYwMTcsIDB4MDAwYSwgMHgwMDc4LCAweDdjNGIsIDB4MjAwOSwgMHhhODhmLCAweDIxMDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4YTA4NiwgMHgxOTAwLCAweDAwYzAsIDB4N2M0OSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3OCwKLQkweDdjNGIsIDB4MTA3OCwgMHg3YjgxLCAweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4N2QwYSwKLQkweDAwYzAsIDB4N2M2MiwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDIwMDEsIDB4MDAwMiwKLQkweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDEwNzgsIDB4NWM0NSwKLQkweDAwNzgsIDB4N2M4ZSwgMHgxMDc4LCAweDdhMDUsIDB4MjAwOSwgMHhhODhlLCAweDIxMzQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTY4NiwgMHgwMDA1LCAweDAwNDAsIDB4N2M4ZiwgMHhhNjg2LCAweDAwMGIsIDB4MDA0MCwKLQkweDdjOGMsIDB4MjAwOSwgMHhhODhmLCAweDIxMDQsIDB4YTA4NCwgMHhmZjAwLCAweDAwYzAsIDB4N2M3YywKLQkweGE2ODYsIDB4MDAwOSwgMHgwMDQwLCAweDdjOGYsIDB4YTA4NiwgMHgxOTAwLCAweDAwYzAsIDB4N2M4YywKLQkweGE2ODYsIDB4MDAwOSwgMHgwMDQwLCAweDdjOGYsIDB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwKLQkweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDdjOGUsIDB4MTA3OCwgMHg3YjgxLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDYwMTAsIDB4MjA2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg3YzlkLCAweDY4MzgsIDB4ZDBmYywKLQkweDAwNDAsIDB4N2M5ZCwgMHgwZDdmLCAweDAwNzgsIDB4N2M4YywgMHg2MDE4LCAweDIwNjgsIDB4Njg0MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDAwNDAsIDB4N2NhZSwgMHg4MDAxLCAweDY4NDIsIDB4NjAxNywKLQkweDAwMGEsIDB4NjAwNywgMHgwMDE2LCAweDBkN2YsIDB4MDA3OCwgMHg3YzhlLCAweDY4YTAsIDB4YTA4NiwKLQkweDAwN2UsIDB4MDBjMCwgMHg3Y2JiLCAweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDEwNzgsIDB4NDFmNSwKLQkweDBlN2YsIDB4MDA3OCwgMHg3Y2JkLCAweDEwNzgsIDB4MjgxMywgMHgwZDdmLCAweDAwNzgsIDB4N2M4YywKLQkweDEwNzgsIDB4N2QwYSwgMHgwMGMwLCAweDdjZDAsIDB4MjAwMSwgMHgwMDA0LCAweDEwNzgsIDB4NDQzZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDMsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2NkNCwKLQkweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDdiODEsIDB4MDA3YywgMHgxMDc4LCAweDdkMGEsIDB4MDBjMCwKLQkweDdjZTUsIDB4MjAwMSwgMHgwMDA4LCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDUsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2NlNywgMHgxMDc4LCAweDdiODEsIDB4MDA3YywKLQkweDEwNzgsIDB4N2QwYSwgMHgwMGMwLCAweDdjZjgsIDB4MjAwMSwgMHgwMDBhLCAweDEwNzgsIDB4NDQzZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwNzgsIDB4N2NmYSwKLQkweDEwNzgsIDB4N2I4MSwgMHgwMDdjLCAweDIwMDksIDB4YTg4ZSwgMHgyMTA0LCAweGEwODYsIDB4MDAwMywKLQkweDAwYzAsIDB4N2QwOSwgMHgyMDA5LCAweGE4OGYsIDB4MjEwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwKLQkweDJhMDAsIDB4MDA3YywgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgwYzdlLCAweDAxN2UsIDB4YWM4OCwKLQkweDAwMDYsIDB4MjE2NCwgMHgxMDc4LCAweDQ1MTMsIDB4MDE3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGY3ZSwKLQkweDBlN2UsIDB4MGQ3ZSwgMHgwMzdlLCAweDAxN2UsIDB4NjAxOCwgMHgyMDY4LCAweDIwNzEsIDB4YTMzMiwKLQkweDJlMDQsIDB4YTA4NSwgMHgwMDAzLCAweDIwNzIsIDB4MTA3OCwgMHg3ZDhiLCAweDAwNDAsIDB4N2Q1MCwKLQkweDIwMDEsIDB4YTM1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDA0MCwgMHg3ZDM5LCAweGEwMDYsIDB4MjAyMCwKLQkweDIwMDksIDB4MDAyYSwgMHgxMDc4LCAweDllYzAsIDB4MjAwMSwgMHhhMzBjLCAweDIwMGMsIDB4YzE5NSwKLQkweDIxMDIsIDB4MjAxOSwgMHgwMDJhLCAweDIwMDksIDB4MDAwMSwgMHgxMDc4LCAweDI3ZTIsIDB4MjA3MSwKLQkweGEzMDAsIDB4MTA3OCwgMHgyNjBkLCAweDBjN2UsIDB4MTU3ZSwgMHgyMGE5LCAweDAwODEsIDB4MjAwOSwKLQkweDAwN2YsIDB4MTA3OCwgMHgyOTIxLCAweDgxMDgsIDB4MDBmMCwgMHg3ZDQ5LCAweDE1N2YsIDB4MGM3ZiwKLQkweDEwNzgsIDB4N2QwZCwgMHg2ODEzLCAweDAwZmYsIDB4NjgxNywgMHhmZmZlLCAweDIwNzEsIDB4YTg4MCwKLQkweDIwNzksIDB4MDEwMCwgMHgyZTA0LCAweGEwODQsIDB4MDBmZiwgMHgyMDY5LCAweGEzMWEsIDB4MjA2YSwKLQkweDc4ZTYsIDB4MDA3ZSwgMHg4ZTcwLCAweDJlMDQsIDB4MjA2OSwgMHhhMzFiLCAweDIwNmEsIDB4NzhlYSwKLQkweGEwODQsIDB4ZmYwMCwgMHgwMTdmLCAweGExMDUsIDB4MjAwOSwgMHhhMzI1LCAweDIwMGEsIDB4MjA2OSwKLQkweGE4OGUsIDB4MjA3MSwgMHhhNTljLCAweDY4MTAsIDB4MjA3MiwgMHg2ODE0LCAweDcwMDYsIDB4NjgxOCwKLQkweDcwMGEsIDB4NjgxYywgMHg3MDBlLCAweDEwNzgsIDB4OGRhOSwgMHgyMDAxLCAweDAwMDYsIDB4MTA3OCwKLQkweDQ0M2YsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4NzUzZCwgMHgwMTdmLCAweDAzN2YsIDB4MGQ3ZiwKLQkweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MDM3ZSwgMHgwZTdlLCAweDE1N2UsIDB4MjAxOSwKLQkweGEzMjUsIDB4MjMxYywgMHg4M2ZmLCAweDAwNDAsIDB4N2RiNSwgMHgyMDcxLCAweGE4ODAsIDB4MmUxNCwKLQkweGEyOTQsIDB4MDBmZiwgMHg3MDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMjA1LCAweGEzMDYsIDB4MDBjMCwKLQkweDdkYjUsIDB4MjAxMSwgMHhhODk2LCAweGFkOTgsIDB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MTA3OCwKLQkweDdlNTUsIDB4MDBjMCwgMHg3ZGI1LCAweDIwMTEsIDB4YTg5YSwgMHhhZDk4LCAweDAwMDYsIDB4MjBhOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4N2RiNSwgMHgxNTdmLCAweDBlN2YsIDB4MDM3ZiwKLQkweDAyN2YsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4YTg4YywgMHg3MDA0LCAweGEwODYsIDB4MDAxNCwKLQkweDAwYzAsIDB4N2RkZCwgMHg3MDA4LCAweGEwODYsIDB4MDgwMCwgMHgwMGMwLCAweDdkZGQsIDB4NzAwYywKLQkweGQwZWMsIDB4MDA0MCwgMHg3ZGRiLCAweGEwODQsIDB4MGYwMCwgMHhhMDg2LCAweDAxMDAsIDB4MDBjMCwKLQkweDdkZGIsIDB4NzAyNCwgMHhkMGE0LCAweDAwYzAsIDB4N2RkOCwgMHhkMGFjLCAweDAwNDAsIDB4N2RkYiwKLQkweGEwMDYsIDB4MDA3OCwgMHg3ZGRkLCAweGEwODUsIDB4MDAwMSwgMHgwZTdmLCAweDAwN2MsIDB4MGU3ZSwKLQkweDBkN2UsIDB4MGM3ZSwgMHgwNzdlLCAweDA1N2UsIDB4MDQ3ZSwgMHgwMjdlLCAweDAwN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweGE1YjQsIDB4MjUyYywgMHgyMDIxLCAweGE1YmEsIDB4MjQyNCwKLQkweDIwNjEsIDB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzI0NCwgMHg3MDYwLCAweGEyMDIsIDB4MDBjOCwKLQkweDdlNDMsIDB4MTA3OCwgMHg5ZWU1LCAweDAwNDAsIDB4N2UzYiwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwKLQkweDAwNDAsIDB4N2UzYiwgMHhhNzg2LCAweDAwMDcsIDB4MDA0MCwgMHg3ZTNiLCAweDI1MDAsIDB4YWMwNiwKLQkweDAwNDAsIDB4N2UzYiwgMHgyNDAwLCAweGFjMDYsIDB4MDA0MCwgMHg3ZTNiLCAweDBjN2UsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDdlMTYsIDB4MTA3OCwgMHgxNzQ5LCAweGE3ODYsIDB4MDAwOCwKLQkweDAwYzAsIDB4N2UyNSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg3ZTI1LCAweDBjN2YsIDB4MTA3OCwKLQkweDdhMDUsIDB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4N2UzYiwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg3ZTM4LCAweGE3ODYsIDB4MDAwMywgMHgwMGMwLCAweDdlNGQsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwKLQkweDEwNzgsIDB4OGMwMSwgMHgwYzdmLCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwKLQkweDdlNDMsIDB4MDA3OCwgMHg3ZGY0LCAweDEyN2YsIDB4MDA3ZiwgMHgwMjdmLCAweDA0N2YsIDB4MDU3ZiwKLQkweDA3N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHhhNzg2LCAweDAwMDYsIDB4MDBjMCwKLQkweDdlMmYsIDB4MTA3OCwgMHg5ZTcwLCAweDAwNzgsIDB4N2UzOCwgMHgyMjBjLCAweDIzMDQsIDB4YTEwNiwKLQkweDAwYzAsIDB4N2U2MCwgMHg4MjEwLCAweDgzMTgsIDB4MDBmMCwgMHg3ZTU1LCAweGEwMDYsIDB4MDA3YywKLQkweDIzMDQsIDB4YTEwMiwgMHgwMDQ4LCAweDdlNjgsIDB4MjAwMSwgMHgwMDAxLCAweDAwNzgsIDB4N2U2YSwKLQkweDIwMDEsIDB4MDAwMCwgMHhhMThkLCAweDAwMDEsIDB4MDA3YywgMHg2MDA0LCAweGEwOGEsIDB4MDA0NCwKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc4LCAweDhjMjcsIDB4MDA0MCwgMHg3ZTdjLCAweDEwNzgsIDB4OGMzYiwKLQkweDAwNDAsIDB4N2U4OSwgMHgwMDc4LCAweDdlODIsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4OGMzYiwKLQkweDAwNDAsIDB4N2U4OSwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4N2U4MiwgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwKLQkweDdlOTEsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNCwKLQkweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTQsIDB4N2VhNiwgMHg3ZWE2LCAweDdlYTYsIDB4N2VhNiwKLQkweDdlYTQsIDB4N2VhNCwgMHg3ZWE0LCAweDdlYTYsIDB4MTA3OCwgMHgxMzI4LCAweDYwMGIsIDB4ZmZmZiwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDEwNzgsIDB4NWJmOCwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4NjEwOSwgMHgxMjdmLCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLCAweDAwYzAsIDB4N2ViZCwKLQkweDYwMDQsIDB4YTA4MiwgMHgwMDQwLCAweDAwNzksIDB4N2Y0OCwgMHhhMTg2LCAweDAwMjcsIDB4MDBjMCwKLQkweDdlZGYsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4MjgxMywgMHgwZDdlLCAweDYxMTAsIDB4MjE2OCwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDdlZDksIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAyOSwKLQkweDY4NDcsIDB4MDAwMCwgMHg2OTRjLCAweGMxYzUsIDB4Njk0ZSwgMHgxMDc4LCAweDQ5ODIsIDB4MTA3OCwKLQkweDhiZjQsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4YTE4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHg3ZWU4LCAweDYwMDQsIDB4YTA4MiwgMHgwMDQwLCAweDAwNzksIDB4N2YxMCwKLQkweGExODYsIDB4MDA0NiwgMHgwMDQwLCAweDdlZjQsIDB4YTE4NiwgMHgwMDQ1LCAweDAwNDAsIDB4N2VmNCwKLQkweGExODYsIDB4MDA0NywgMHgxMGMwLCAweDEzMjgsIDB4MjAwMSwgMHgwMTA5LCAweDIwMDQsIDB4ZDA4NCwKLQkweDAwNDAsIDB4N2YwZCwgMHgxMjdlLCAweDIwOTEsIDB4MjIwMCwgMHgwMDdlLCAweDAxN2UsIDB4MDI3ZSwKLQkweDEwNzgsIDB4NWFkMiwgMHgwMjdmLCAweDAxN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg3ZjBkLCAweDAwNzgsIDB4N2Y4MSwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywKLQkweDdmMjUsIDB4N2YyMywgMHg3ZjIzLCAweDdmMjMsIDB4N2YyMywgMHg3ZjIzLCAweDdmMjMsIDB4N2YyMywKLQkweDdmMjMsIDB4N2YyMywgMHg3ZjIzLCAweDdmNDEsIDB4N2Y0MSwgMHg3ZjQxLCAweDdmNDEsIDB4N2YyMywKLQkweDdmNDEsIDB4N2YyMywgMHg3ZjQxLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MGQ3ZSwKLQkweDYxMTAsIDB4MjE2OCwgMHgxMDc4LCAweDhhNDQsIDB4MDA0MCwgMHg3ZjNiLCAweDY4MzcsIDB4MDEwMywKLQkweDY4NGIsIDB4MDAwNiwgMHg2ODQ3LCAweDAwMDAsIDB4Njg1MCwgMHhjMGVjLCAweDY4NTIsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg4YmY0LCAweDBkN2YsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweDdmNWQsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNWIsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNWIsIDB4N2Y1YiwKLQkweDdmNWIsIDB4N2Y1YiwgMHg3ZjViLCAweDdmNmYsIDB4N2Y2ZiwgMHg3ZjZmLCAweDdmNmYsIDB4N2Y1YiwKLQkweDdmN2EsIDB4N2Y1YiwgMHg3ZjZmLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwMiwgMHgxMDc4LCAweDYxMDksIDB4NjAxMCwKLQkweGEwODgsIDB4MDAxMywgMHgyMTA0LCAweGEwODUsIDB4MDQwMCwgMHgyMDBhLCAweDAwN2MsIDB4MTA3OCwKLQkweDYwMTAsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMGYsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg3NTNkLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4N2Y4NSwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwKLQkweDdmOTgsIDB4N2Y5OCwgMHg3ZjlhLCAweDgwOTUsIDB4ODBiNywgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwKLQkweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwgMHg3Zjk4LCAweDdmOTgsIDB4N2Y5OCwKLQkweDEwNzgsIDB4MTMyOCwgMHgwZTdlLCAweDBkN2UsIDB4NjAzZiwgMHgwMDAwLCAweDIwNzEsIDB4YTg4MCwKLQkweDcxMjQsIDB4NjEwYSwgMHgyMDcxLCAweGE4OGMsIDB4NjExMCwgMHgyMTY4LCAweDc2MTQsIDB4YTZiNCwKLQkweDBmZmYsIDB4ODZmZiwgMHgwMDQwLCAweDgwNTgsIDB4YTY4YywgMHgwYzAwLCAweDAwNDAsIDB4N2ZkMSwKLQkweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDQwLCAweDdmY2QsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg3ZmNkLCAweDYwMjQsIDB4ZDBkYywgMHgwMGMwLCAweDdmY2QsIDB4Njg1MCwKLQkweGQwYmMsIDB4MDBjMCwgMHg3ZmNkLCAweDczMTgsIDB4NjgxNCwgMHhhMzA2LCAweDAwYzAsIDB4ODA2ZiwKLQkweDczMWMsIDB4NjgxMCwgMHhhMzA2LCAweDAwYzAsIDB4ODA2ZiwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywKLQkweDZiNWUsIDB4YTY4YywgMHgwMGZmLCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDgwMDQsIDB4YTE4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHg3ZmUxLCAweDEwNzgsIDB4OGMxNSwgMHg2ODRiLCAweDAwMWMsIDB4MDA3OCwKLQkweDgwMDYsIDB4ZDZkYywgMHgwMDQwLCAweDdmZmQsIDB4Njg0YiwgMHgwMDE1LCAweDY4NGMsIDB4ZDBhYywKLQkweDAwNDAsIDB4N2ZmYiwgMHg2OTE0LCAweDZhMTAsIDB4MjEwMCwgMHhhMjA1LCAweDAwNDAsIDB4N2ZmYiwKLQkweDcwMTgsIDB4YTEwNiwgMHgwMGMwLCAweDdmZjgsIDB4NzAxYywgMHhhMjA2LCAweDAwNDAsIDB4N2ZmYiwKLQkweDY5NjIsIDB4NmE1ZSwgMHhjNmRjLCAweDAwNzgsIDB4ODAwNiwgMHhkNmQ0LCAweDAwNDAsIDB4ODAwNCwKLQkweDY4NGIsIDB4MDAwNywgMHgwMDc4LCAweDgwMDYsIDB4Njg0YiwgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywKLQkweDZlNDYsIDB4YTAxZSwgMHhkNmM0LCAweDAwNDAsIDB4ODAyZiwgMHhhNjg2LCAweDAxMDAsIDB4MDBjMCwKLQkweDgwMWEsIDB4MjAwMSwgMHhhODk5LCAweDIwMDQsIDB4YTAwNSwgMHgwMGMwLCAweDgwMWEsIDB4YzZjNCwKLQkweDAwNzgsIDB4N2ZhOSwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwgMHg4M2ZmLCAweDAwNDAsIDB4ODAyZiwKLQkweGEzOGEsIDB4MDAwOSwgMHgwMDQ4LCAweDgwMjYsIDB4MjAxOSwgMHgwMDA4LCAweDAzN2UsIDB4MjMwOCwKLQkweDIwMTksIDB4YTg5OCwgMHhhZDkwLCAweDAwMTksIDB4MTA3OCwgMHg4NzM5LCAweDAzN2YsIDB4ZDZjYywKLQkweDAwNDAsIDB4ODA4NSwgMHg3MTI0LCAweDY5NWEsIDB4ODFmZiwgMHgwMDQwLCAweDgwODUsIDB4YTE5MiwKLQkweDAwMjEsIDB4MDBjOCwgMHg4MDQ2LCAweDIwNzEsIDB4YTg5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWUxOCwKLQkweGFkOTAsIDB4MDAxZCwgMHgxMDc4LCAweDg3MzksIDB4MDA3OCwgMHg4MDg1LCAweDY4MzgsIDB4ZDBmYywKLQkweDAwNDAsIDB4ODA0ZiwgMHgyMDA5LCAweDAwMjAsIDB4Njk1YSwgMHgwMDc4LCAweDgwM2IsIDB4MGY3ZSwKLQkweDJkNzgsIDB4MTA3OCwgMHg4NmQxLCAweDBmN2YsIDB4MTA3OCwgMHg4NzI2LCAweDAwNzgsIDB4ODA4NywKLQkweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDQwLCAweDgwNzUsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4MDc1LCAweDYwMjQsIDB4ZDBkYywgMHgwMGMwLCAweDgwNzUsIDB4Njg1MCwKLQkweGQwYmMsIDB4MDBjMCwgMHg4MDc1LCAweDY4NGMsIDB4ZDBmNCwgMHgwMGMwLCAweDgwNzUsIDB4MTA3OCwKLQkweDhjZmEsIDB4MGQ3ZiwgMHgwZTdmLCAweDAwNzgsIDB4ODA5NCwgMHg2ODRiLCAweDAwMDAsIDB4NjgzNywKLQkweDAxMDMsIDB4NmU0NiwgMHg2ODRjLCAweGQwYWMsIDB4MDA0MCwgMHg4MDg1LCAweDY4MTAsIDB4NjkxNCwKLQkweGExMTUsIDB4MDA0MCwgMHg4MDg1LCAweDEwNzgsIDB4ODIzMywgMHgxMDc4LCAweDQ5ODIsIDB4NjIxOCwKLQkweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4MTA3OCwgMHg4Y2M0LCAweDBkN2YsIDB4MGU3ZiwKLQkweDAwYzAsIDB4ODA5NCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgwZjdlLCAweDYwMDMsIDB4MDAwMywKLQkweDIwNzksIDB4YTg4YywgMHg3YzA0LCAweDdiMDAsIDB4N2UwYywgMHg3ZDA4LCAweDYwMTAsIDB4MjA3OCwKLQkweDc4NGMsIDB4ZDBhYywgMHgwMDQwLCAweDgwYTgsIDB4NjAwMywgMHgwMDAyLCAweDBmN2YsIDB4MDA3YywKLQkweDdjMTIsIDB4N2IxNiwgMHg3ZTBhLCAweDdkMGUsIDB4MGY3ZiwgMHg2MDNmLCAweDAwMDAsIDB4MmMxMCwKLQkweDEwNzgsIDB4MWNhYiwgMHgxMDc4LCAweDVjNjQsIDB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwNCwgMHg2MTEwLCAweDIwZTEsIDB4MDAwNSwKLQkweDNkMTgsIDB4M2UyMCwgMHgyYzEwLCAweDEwNzgsIDB4MTVlYywgMHgwMDdjLCAweGExODIsIDB4MDA0MCwKLQkweDAwNzksIDB4ODBjYSwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZiwKLQkweDgxODIsIDB4ODBkZCwgMHg4MGRkLCAweDgxOTgsIDB4ODIwOSwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwKLQkweDgwZGQsIDB4ODIxOCwgMHg4MGRkLCAweDgwZGQsIDB4ODBkZCwgMHgxMDc4LCAweDEzMjgsIDB4MDc3ZSwKLQkweDBmN2UsIDB4MGU3ZSwgMHgwZDdlLCAweDIwNzEsIDB4YTg4YywgMHg2MTEwLCAweDIxNzgsIDB4NzYxNCwKLQkweGE2YjQsIDB4MGZmZiwgMHg3ZTQ2LCAweDdmNGMsIDB4YzdlNSwgMHg3ZjRlLCAweDYyMTgsIDB4MjI2OCwKLQkweDZhM2MsIDB4ODIxMSwgMHg2YTNlLCAweDg2ZmYsIDB4MDA0MCwgMHg4MTdkLCAweGE2OTQsIDB4ZmYwMCwKLQkweGEyODQsIDB4MGMwMCwgMHgwMDQwLCAweDgxMDAsIDB4NzAxOCwgMHg3ODYyLCAweDcwMWMsIDB4Nzg1ZSwKLQkweGEyODQsIDB4MDMwMCwgMHgwMDQwLCAweDgxN2QsIDB4MTA3OCwgMHgxMzgxLCAweDEwNDAsIDB4MTMyOCwKLQkweDJkMDAsIDB4Nzg0YSwgMHg3ZjRjLCAweGM3Y2QsIDB4N2Y0ZSwgMHg2ODM3LCAweDAxMDMsIDB4NzgzOCwKLQkweDY4M2EsIDB4NzgzYywgMHg2ODNlLCAweDc4NDAsIDB4Njg0MiwgMHg2ZTQ2LCAweGE2OGMsIDB4MGMwMCwKLQkweDAwNDAsIDB4ODExZSwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywgMHg2YjVlLCAweGE2OGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDgxM2EsIDB4YTE4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODEyYywKLQkweDY4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgxM2MsIDB4ZDZkYywgMHgwMDQwLCAweDgxMzMsIDB4Njg0YiwKLQkweDAwMTUsIDB4MDA3OCwgMHg4MTNjLCAweGQ2ZDQsIDB4MDA0MCwgMHg4MTNhLCAweDY4NGIsIDB4MDAwNywKLQkweDAwNzgsIDB4ODEzYywgMHg2ODRiLCAweDAwMDAsIDB4NmY0ZSwgMHg3ODUwLCAweDY4NTIsIDB4Nzg1NCwKLQkweDY4NTYsIDB4YTAxZSwgMHhkNmM0LCAweDAwNDAsIDB4ODE1YSwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwKLQkweDgzZmYsIDB4MDA0MCwgMHg4MTVhLCAweGEzOGEsIDB4MDAwOSwgMHgwMDQ4LCAweDgxNTEsIDB4MjAxOSwKLQkweDAwMDgsIDB4MDM3ZSwgMHgyMzA4LCAweDIwMTksIDB4YTg5OCwgMHhhZDkwLCAweDAwMTksIDB4MTA3OCwKLQkweDg3MzksIDB4MDM3ZiwgMHhkNmNjLCAweDAwNDAsIDB4ODE3ZCwgMHg3MTI0LCAweDY5NWEsIDB4ODFmZiwKLQkweDAwNDAsIDB4ODE3ZCwgMHhhMTkyLCAweDAwMjEsIDB4MDBjOCwgMHg4MTcxLCAweDIwNzEsIDB4YTg5OCwKLQkweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwgMHgxMDc4LCAweDg3MzksIDB4MDA3OCwKLQkweDgxN2QsIDB4NzgzOCwgMHhkMGZjLCAweDAwNDAsIDB4ODE3YSwgMHgyMDA5LCAweDAwMjAsIDB4Njk1YSwKLQkweDAwNzgsIDB4ODE2NiwgMHgyZDc4LCAweDEwNzgsIDB4ODZkMSwgMHgwZDdmLCAweDBlN2YsIDB4MGY3ZiwKLQkweDA3N2YsIDB4MDA3YywgMHgwZjdlLCAweDYwMDMsIDB4MDAwMywgMHgyMDc5LCAweGE4OGMsIDB4N2MwNCwKLQkweDdiMDAsIDB4N2UwYywgMHg3ZDA4LCAweDYwMTAsIDB4MjA3OCwgMHg3YzEyLCAweDdiMTYsIDB4N2UwYSwKLQkweDdkMGUsIDB4MGY3ZiwgMHgyYzEwLCAweDEwNzgsIDB4MWNhYiwgMHgxMDc4LCAweDZjMjYsIDB4MDA3YywKLQkweDBkN2UsIDB4MGY3ZSwgMHgyYzc4LCAweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODFhNCwKLQkweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDAyLCAweDEwNzgsIDB4NjBiOCwKLQkweDEwNzgsIDB4NjFkMywgMHg2MTEwLCAweDIxNjgsIDB4Njk0YywgMHhkMWU0LCAweDAwNDAsIDB4ODIwNywKLQkweGQxY2MsIDB4MDA0MCwgMHg4MWRlLCAweDY5NDgsIDB4NjgzOCwgMHhkMGZjLCAweDAwNDAsIDB4ODFkNiwKLQkweDAxN2UsIDB4Njg0YywgMHgwMDdlLCAweDY4NTAsIDB4MDA3ZSwgMHhhZDkwLCAweDAwMGQsIDB4YTE5OCwKLQkweDAwMGQsIDB4MjAwOSwgMHgwMDIwLCAweDE1N2UsIDB4MjFhOCwgMHgyMzA0LCAweDIwMTIsIDB4ODMxOCwKLQkweDgyMTAsIDB4MDBmMCwgMHg4MWM1LCAweDE1N2YsIDB4MDA3ZiwgMHg2ODUyLCAweDAwN2YsIDB4Njg0ZSwKLQkweDAxN2YsIDB4MjE2OCwgMHgxMDc4LCAweDEzYWEsIDB4MDA3OCwgMHg4MjAxLCAweDAxN2UsIDB4MTA3OCwKLQkweDEzYWEsIDB4MGQ3ZiwgMHgxMDc4LCAweDg3MjYsIDB4MDA3OCwgMHg4MjAxLCAweDY4MzcsIDB4MDEwMywKLQkweDY5NDQsIDB4YTE4NCwgMHgwMGZmLCAweGEwYjYsIDB4MDAwMiwgMHgwMDQwLCAweDgxZmQsIDB4YTA4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHg4MWVmLCAweDY4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgxZmYsIDB4ZDFkYywKLQkweDAwNDAsIDB4ODFmNiwgMHg2ODRiLCAweDAwMTUsIDB4MDA3OCwgMHg4MWZmLCAweGQxZDQsIDB4MDA0MCwKLQkweDgxZmQsIDB4Njg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODFmZiwgMHg2ODRiLCAweDAwMDAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MTA3OCwgMHg4Y2M0LCAweDAwYzAsIDB4ODIwNywgMHgxMDc4LCAweDc1M2QsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MjAxOSwgMHgwMDAxLCAweDEwNzgsIDB4NmU2YywgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDEwNzgsIDB4NjBiOCwgMHgxMDc4LCAweDYxZDMsIDB4MDA3YywKLQkweDEwNzgsIDB4NjBiOCwgMHgxMDc4LCAweDI4MTMsIDB4MGQ3ZSwgMHg2MTEwLCAweDIxNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg4MjJkLCAweDY4MzcsIDB4MDEwMywgMHg2ODRiLCAweDAwMjksIDB4Njg0NywKLQkweDAwMDAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwKLQkweDEwNzgsIDB4NjFkMywgMHgwMDdjLCAweDY4NGIsIDB4MDAxNSwgMHhkMWZjLCAweDAwNDAsIDB4ODIzZiwKLQkweDY4NGIsIDB4MDAwNywgMHg4MDAyLCAweDgwMDAsIDB4ODEwYSwgMHhhMTg5LCAweDAwMDAsIDB4Njk2MiwKLQkweDY4NWUsIDB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg4MjQ2LCAweDgyNTksIDB4ODI1OSwKLQkweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNWIsIDB4ODI1OSwgMHg4MzMzLCAweDgzM2YsIDB4ODI1OSwKLQkweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1OSwgMHg4MjU5LCAweDgyNTksIDB4ODI1OSwKLQkweDgyNTksIDB4MTA3OCwgMHgxMzI4LCAweDA3N2UsIDB4MGY3ZSwgMHgwZTdlLCAweDBkN2UsIDB4MjA3MSwKLQkweGE4OGMsIDB4NjExMCwgMHgyMTc4LCAweDc2MTQsIDB4YTZiNCwgMHgwZmZmLCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODI3ZSwgMHhhNjg0LCAweDAwZmYsIDB4MDBjMCwKLQkweDgyN2UsIDB4NjAyNCwgMHhkMGY0LCAweDAwYzAsIDB4ODI3YSwgMHg3ODA4LCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4ODI3ZSwgMHgxMDc4LCAweDhjZmEsIDB4MDA3OCwgMHg4MzJlLCAweDdlNDYsIDB4N2Y0YywKLQkweGM3ZTUsIDB4N2Y0ZSwgMHg2MjE4LCAweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4ODZmZiwKLQkweDAwNDAsIDB4ODMyMywgMHhhNjk0LCAweGZmMDAsIDB4YTI4NCwgMHgwYzAwLCAweDAwNDAsIDB4ODI5NCwKLQkweDcwMTgsIDB4Nzg2MiwgMHg3MDFjLCAweDc4NWUsIDB4YTI4NCwgMHgwMzAwLCAweDAwNDAsIDB4ODMyMCwKLQkweGE2ODYsIDB4MDEwMCwgMHgwMGMwLCAweDgyYTYsIDB4MjAwMSwgMHhhODk5LCAweDIwMDQsIDB4YTAwNSwKLQkweDAwYzAsIDB4ODJhNiwgMHhjNmM0LCAweDdlNDYsIDB4MDA3OCwgMHg4Mjg3LCAweDEwNzgsIDB4MTM4MSwKLQkweDEwNDAsIDB4MTMyOCwgMHgyZDAwLCAweDc4NGEsIDB4N2Y0YywgMHhhN2JkLCAweDAyMDAsIDB4N2Y0ZSwKLQkweDY4MzcsIDB4MDEwMywgMHg3ODM4LCAweDY4M2EsIDB4NzgzYywgMHg2ODNlLCAweDc4NDAsIDB4Njg0MiwKLQkweDZlNDYsIDB4YTY4YywgMHgwYzAwLCAweDAwNDAsIDB4ODJjMSwgMHg3MzE4LCAweDZiNjIsIDB4NzMxYywKLQkweDZiNWUsIDB4YTY4YywgMHgwMGZmLCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDgyZGQsIDB4YTE4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHg4MmNmLCAweDY4NGIsIDB4MDAxYywgMHgwMDc4LCAweDgyZGYsIDB4ZDZkYywKLQkweDAwNDAsIDB4ODJkNiwgMHg2ODRiLCAweDAwMTUsIDB4MDA3OCwgMHg4MmRmLCAweGQ2ZDQsIDB4MDA0MCwKLQkweDgyZGQsIDB4Njg0YiwgMHgwMDA3LCAweDAwNzgsIDB4ODJkZiwgMHg2ODRiLCAweDAwMDAsIDB4NmY0ZSwKLQkweDc4NTAsIDB4Njg1MiwgMHg3ODU0LCAweDY4NTYsIDB4YTAxZSwgMHhkNmM0LCAweDAwNDAsIDB4ODJmZCwKLQkweDczMjgsIDB4NzMyYywgMHg2YjU2LCAweDgzZmYsIDB4MDA0MCwgMHg4MmZkLCAweGEzOGEsIDB4MDAwOSwKLQkweDAwNDgsIDB4ODJmNCwgMHgyMDE5LCAweDAwMDgsIDB4MDM3ZSwgMHgyMzA4LCAweDIwMTksIDB4YTg5OCwKLQkweGFkOTAsIDB4MDAxOSwgMHgxMDc4LCAweDg3MzksIDB4MDM3ZiwgMHhkNmNjLCAweDAwNDAsIDB4ODMyMCwKLQkweDcxMjQsIDB4Njk1YSwgMHg4MWZmLCAweDAwNDAsIDB4ODMyMCwgMHhhMTkyLCAweDAwMjEsIDB4MDBjOCwKLQkweDgzMTQsIDB4MjA3MSwgMHhhODk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwKLQkweDEwNzgsIDB4ODczOSwgMHgwMDc4LCAweDgzMjAsIDB4NzgzOCwgMHhkMGZjLCAweDAwNDAsIDB4ODMxZCwKLQkweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDAwNzgsIDB4ODMwOSwgMHgyZDc4LCAweDEwNzgsIDB4ODZkMSwKLQkweGQ2ZGMsIDB4MDBjMCwgMHg4MzI2LCAweGEwMDYsIDB4MDA3OCwgMHg4MzJjLCAweDIwMDEsIDB4MDAwMSwKLQkweDIwNzEsIDB4YTg4YywgMHg3MjE4LCAweDczMWMsIDB4MTA3OCwgMHgxNjQ1LCAweDBkN2YsIDB4MGU3ZiwKLQkweDBmN2YsIDB4MDc3ZiwgMHgwMDdjLCAweDIwMDEsIDB4YTVhMiwgMHgyMDA0LCAweDYwM2UsIDB4MjBlMSwKLQkweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDBkN2UsIDB4NjAwMywgMHgwMDAyLCAweDYxMTAsIDB4MjE2OCwKLQkweDY5NGMsIDB4ZDFlNCwgMHgwMDQwLCAweDg0NmIsIDB4NjAzZiwgMHgwMDAwLCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODM4NSwgMHg2ODE0LCAweDY5MTAsIDB4YTExNSwKLQkweDAwNDAsIDB4ODM4NSwgMHg2YTYwLCAweGEyMDYsIDB4MDBjMCwgMHg4MzYyLCAweDY4NWMsIDB4YTEwNiwKLQkweDAwNDAsIDB4ODM4NSwgMHg2ODRjLCAweGMwZTQsIDB4Njg0ZSwgMHg2ODQ3LCAweDAwMDAsIDB4Njg2MywKLQkweDAwMDAsIDB4Njg1ZiwgMHgwMDAwLCAweDYwMjQsIDB4ZDBmNCwgMHgwMGMwLCAweDgzN2EsIDB4Njk3YywKLQkweDY4MTAsIDB4YTEwMiwgMHg2MDNhLCAweDY5ODAsIDB4NjgxNCwgMHhhMTAzLCAweDYwMzYsIDB4NjAyNCwKLQkweGMwZjUsIDB4NjAyNiwgMHgwZDdlLCAweDYwMTgsIDB4MjA2OCwgMHg2ODNjLCAweDgwMDAsIDB4NjgzZSwKLQkweDBkN2YsIDB4MTA3OCwgMHg4Y2ZhLCAweDAwNzgsIDB4ODQ2YiwgMHg2OTRjLCAweGQxY2MsIDB4MDA0MCwKLQkweDg0MzAsIDB4Njk0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDA0MCwgMHg4M2VhLCAweDAxN2UsIDB4Njg0YywKLQkweDAwN2UsIDB4Njg1MCwgMHgwMDdlLCAweDBmN2UsIDB4MjE3OCwgMHg3OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMDQwLCAweDgzYmYsIDB4YTA4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODNhNiwKLQkweDY4NGIsIDB4MDAxYywgMHg3ODRiLCAweDAwMWMsIDB4MDA3OCwgMHg4M2NhLCAweGQxZGMsIDB4MDA0MCwKLQkweDgzYjYsIDB4Njg0YiwgMHgwMDE1LCAweDc4NGIsIDB4MDAxNSwgMHgxMDc4LCAweDhlYTUsIDB4MDA0MCwKLQkweDgzYjQsIDB4Nzk0NCwgMHhjMWRjLCAweDc5NDYsIDB4MDA3OCwgMHg4M2NhLCAweGQxZDQsIDB4MDA0MCwKLQkweDgzYmYsIDB4Njg0YiwgMHgwMDA3LCAweDc4NGIsIDB4MDAwNywgMHgwMDc4LCAweDgzY2EsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4M2NhLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAwNDAsIDB4ODNjYSwKLQkweDEwNzgsIDB4ODIzMywgMHg2ODQ4LCAweDc4NGEsIDB4Njg2MCwgMHg3ODYyLCAweDY4NWMsIDB4Nzg1ZSwKLQkweGFkOTAsIDB4MDAwZCwgMHhhZjk4LCAweDAwMGQsIDB4MjAwOSwgMHgwMDIwLCAweDE1N2UsIDB4MjFhOCwKLQkweDIzMDQsIDB4MjAxMiwgMHg4MzE4LCAweDgyMTAsIDB4MDBmMCwgMHg4M2Q4LCAweDE1N2YsIDB4MGY3ZiwKLQkweDAwN2YsIDB4Njg1MiwgMHgwMDdmLCAweDY4NGUsIDB4MDE3ZiwgMHgyMTY4LCAweDEwNzgsIDB4MTNhYSwKLQkweDAwNzgsIDB4ODQ2NSwgMHgwMTdlLCAweDBmN2UsIDB4MjE3OCwgMHg3OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMDQwLCAweDg0MTcsIDB4YTA4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODNmZSwKLQkweDY4NGIsIDB4MDAxYywgMHg3ODRiLCAweDAwMWMsIDB4MDA3OCwgMHg4NDIyLCAweGQxZGMsIDB4MDA0MCwKLQkweDg0MGUsIDB4Njg0YiwgMHgwMDE1LCAweDc4NGIsIDB4MDAxNSwgMHgxMDc4LCAweDhlYTUsIDB4MDA0MCwKLQkweDg0MGMsIDB4Nzk0NCwgMHhjMWRjLCAweDc5NDYsIDB4MDA3OCwgMHg4NDIyLCAweGQxZDQsIDB4MDA0MCwKLQkweDg0MTcsIDB4Njg0YiwgMHgwMDA3LCAweDc4NGIsIDB4MDAwNywgMHgwMDc4LCAweDg0MjIsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4NDIyLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAwNDAsIDB4ODQyMiwKLQkweDEwNzgsIDB4ODIzMywgMHg2ODYwLCAweDc4NjIsIDB4Njg1YywgMHg3ODVlLCAweDY4NGMsIDB4Nzg0ZSwKLQkweDBmN2YsIDB4MTA3OCwgMHgxM2FhLCAweDBkN2YsIDB4MTA3OCwgMHg4NzI2LCAweDAwNzgsIDB4ODQ2NSwKLQkweDY4MzcsIDB4MDEwMywgMHg2OTQ0LCAweGExODQsIDB4MDBmZiwgMHhhMGI2LCAweDAwMDIsIDB4MDA0MCwKLQkweDg0NTYsIDB4YTA4NiwgMHgwMDI4LCAweDAwYzAsIDB4ODQ0MSwgMHg2ODRiLCAweDAwMWMsIDB4MDA3OCwKLQkweDg0NjMsIDB4ZDFkYywgMHgwMDQwLCAweDg0NGYsIDB4Njg0YiwgMHgwMDE1LCAweDEwNzgsIDB4OGVhNSwKLQkweDAwNDAsIDB4ODQ0ZCwgMHg2OTQ0LCAweGMxZGMsIDB4Njk0NiwgMHgwMDc4LCAweDg0NjMsIDB4ZDFkNCwKLQkweDAwNDAsIDB4ODQ1NiwgMHg2ODRiLCAweDAwMDcsIDB4MDA3OCwgMHg4NDYzLCAweDY4NGIsIDB4MDAwMCwKLQkweDY4NGMsIDB4ZDBhYywgMHgwMDQwLCAweDg0NjMsIDB4NjgxMCwgMHg2OTE0LCAweGExMTUsIDB4MDA0MCwKLQkweDg0NjMsIDB4MTA3OCwgMHg4MjMzLCAweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhjYzQsIDB4MDBjMCwKLQkweDg0NmIsIDB4MTA3OCwgMHg3NTNkLCAweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4MDA3OCwKLQkweDg0NzMsIDB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDg0OTIsIDB4MGQ3ZSwKLQkweDYxMTAsIDB4MjE2OCwgMHg2ODM3LCAweDAxMDMsIDB4MjAwOSwgMHhhMzBjLCAweDIxMGMsIDB4ZDE4YywKLQkweDAwYzAsIDB4ODQ5ZCwgMHhkMTg0LCAweDAwYzAsIDB4ODQ5OSwgMHg2MTA4LCAweDY5NGEsIDB4YTE4ZSwKLQkweDAwMjksIDB4MDBjMCwgMHg4NDhkLCAweDEwNzgsIDB4YTE4MSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDEwNzgsIDB4NjFkMywKLQkweDAwN2MsIDB4Njg0YiwgMHgwMDA0LCAweDAwNzgsIDB4ODQ4ZCwgMHg2ODRiLCAweDAwMDQsIDB4MDA3OCwKLQkweDg0OGQsIDB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4ODRhNSwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwKLQkweDg0YjgsIDB4ODRiOCwgMHg4NGJhLCAweDg0YjgsIDB4ODRiZCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwKLQkweDg0YjgsIDB4ODRiOCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwgMHg4NGI4LCAweDg0YjgsIDB4ODRiOCwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywgMHgwMDdlLCAweDAyN2UsIDB4YTAxNiwKLQkweDEwNzgsIDB4MTVlYywgMHgwMjdmLCAweDAwN2YsIDB4MDA3YywgMHhhMTgyLCAweDAwODUsIDB4MDA3OSwKLQkweDg0YzksIDB4ODRkMiwgMHg4NGQwLCAweDg0ZDAsIDB4ODRkZSwgMHg4NGQwLCAweDg0ZDAsIDB4ODRkMCwKLQkweDEwNzgsIDB4MTMyOCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDYxMDksIDB4MTI3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MDU3ZSwKLQkweDBkN2UsIDB4MGU3ZSwgMHgyMDcxLCAweGE4ODAsIDB4NzIyNCwgMHg2MjEyLCAweDcyMjAsIDB4MTA3OCwKLQkweDhhMzAsIDB4MDA0MCwgMHg4NTAzLCAweDIyNjgsIDB4NjgwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDA0MCwKLQkweDg1MDMsIDB4NjAxOCwgMHg2ZDE4LCAweGE1MmUsIDB4MDBjMCwgMHg4NTAzLCAweDBjN2UsIDB4MmQ2MCwKLQkweDEwNzgsIDB4ODc0YSwgMHgwYzdmLCAweDAwNDAsIDB4ODUwMywgMHg2ODAzLCAweDAwMDIsIDB4NjAwNywKLQkweDAwODYsIDB4MDA3OCwgMHg4NTA1LCAweDYwMDcsIDB4MDA4NywgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBmN2UsIDB4MjI3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwKLQkweDAwNDAsIDB4ODUxZCwgMHg2ODI0LCAweGQwZWMsIDB4MDA0MCwgMHg4NTFkLCAweDBjN2UsIDB4MjI2MCwKLQkweDYwM2YsIDB4MDAwMCwgMHgxMDc4LCAweDhjZmEsIDB4MGM3ZiwgMHgwZTdmLCAweDBkN2YsIDB4MDU3ZiwKLQkweDAyN2YsIDB4MDA3YywgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg4NTMzLCAweDYwMDQsIDB4YTA4YSwKLQkweDAwODUsIDB4MTA0OCwgMHgxMzI4LCAweGEwOGEsIDB4MDA4YywgMHgxMGM4LCAweDEzMjgsIDB4YTA4MiwKLQkweDAwODUsIDB4MDA3OSwgMHg4NTQyLCAweGExODYsIDB4MDAyNywgMHgwMDQwLCAweDg1M2IsIDB4YTE4NiwKLQkweDAwMTQsIDB4MTBjMCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHg4NTQ5LCAweDg1NGIsIDB4ODU0YiwgMHg4NTQ5LCAweDg1NDksIDB4ODU0OSwKLQkweDg1NDksIDB4MTA3OCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHhhMTg2LCAweDAwMTMsIDB4MDBjMCwgMHg4NTVjLCAweDYwMDQsIDB4YTA4MiwKLQkweDAwODUsIDB4MjAwOCwgMHgwMDc4LCAweDg1OTcsIDB4YTE4NiwgMHgwMDI3LCAweDAwYzAsIDB4ODU3ZiwKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDI4MTMsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg4NTc1LCAweDY4MzcsIDB4MDEwMywgMHg2ODQ3LCAweDAwMDAsIDB4Njg0YiwKLQkweDAwMjksIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4OGJmNCwgMHgwZDdmLCAweDEwNzgsIDB4NzUzZCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4NzU4MywgMHgwMDc4LCAweDg1N2EsIDB4YTE4NiwKLQkweDAwMTQsIDB4MDBjMCwgMHg4NTdiLCAweDEwNzgsIDB4NjAxMCwgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDg1NzUsIDB4NjgzNywgMHgwMTAzLCAweDY4NDcsIDB4MDAwMCwKLQkweDY4NGIsIDB4MDAwNiwgMHg2ODUwLCAweGMwZWMsIDB4Njg1MiwgMHgwMDc4LCAweDg1NzEsIDB4MDA3OSwKLQkweDg1OTksIDB4ODVhMiwgMHg4NWEwLCAweDg1YTAsIDB4ODVhMCwgMHg4NWEwLCAweDg1YTAsIDB4ODViZCwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4NjAzMCwgMHhhMDhjLCAweGZmMDAsIDB4ODEwZiwKLQkweGExODYsIDB4MDAzOSwgMHgwMDQwLCAweDg1YjAsIDB4YTE4NiwgMHgwMDM1LCAweDAwYzAsIDB4ODViNCwKLQkweDIwMDEsIDB4YTVhMCwgMHgwMDc4LCAweDg1YjYsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwKLQkweDYwMDMsIDB4MDAwYywgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDYwMTAsIDB4NjAzMCwKLQkweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAzOSwgMHgwMDQwLCAweDg1Y2IsIDB4YTE4NiwKLQkweDAwMzUsIDB4MDBjMCwgMHg4NWNmLCAweDIwMDEsIDB4YTVhMCwgMHgwMDc4LCAweDg1ZDEsIDB4MjAwMSwKLQkweGE1YTEsIDB4MjAwNCwgMHg2MDE2LCAweDYwMDMsIDB4MDAwZSwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweGExODIsIDB4MDA4YywgMHgwMGM4LCAweDg1ZTIsIDB4YTE4MiwgMHgwMDg1LCAweDAwNDgsIDB4ODVlMiwKLQkweDAwNzksIDB4ODVlNSwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywgMHg4NWVjLCAweDg1ZWMsIDB4ODVlYywKLQkweDg1ZWMsIDB4ODVlZSwgMHg4NjQzLCAweDg1ZWMsIDB4MTA3OCwgMHgxMzI4LCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwZjdmLCAweDAwNDAsIDB4ODYwMSwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAwNDAsIDB4ODY1YSwgMHhhMTg2LCAweDAwMzUsIDB4MDA0MCwKLQkweDg2NWEsIDB4MGQ3ZSwgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODYyNSwKLQkweDYwMTAsIDB4MjA2OCwgMHg2ODM3LCAweDAxMDMsIDB4Njg1MCwgMHhkMGI0LCAweDAwNDAsIDB4ODYxNiwKLQkweDY4NGIsIDB4MDAwNiwgMHhjMGVjLCAweDY4NTIsIDB4MDA3OCwgMHg4NjIxLCAweGQwYmMsIDB4MDA0MCwKLQkweDg2MWQsIDB4Njg0YiwgMHgwMDAyLCAweDAwNzgsIDB4ODYyMSwgMHg2ODRiLCAweDAwMDUsIDB4MTA3OCwKLQkweDhjYzAsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4NDk4MiwgMHgyYzY4LCAweDEwNzgsIDB4NzRkNywKLQkweDAwNDAsIDB4ODYzZSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDIwMDksIDB4YTg4ZSwKLQkweDIxMGMsIDB4NjEzNiwgMHgyMDA5LCAweGE4OGYsIDB4MjEwYywgMHg2MTNhLCAweDY5MTgsIDB4NjExYSwKLQkweDY5MjAsIDB4NjEyMiwgMHg2MDFmLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDJkNjAsIDB4MTA3OCwKLQkweDc1M2QsIDB4MGQ3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwKLQkweDAwNDAsIDB4ODY4MCwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAzNSwKLQkweDAwNDAsIDB4ODY1YSwgMHhhMTg2LCAweDAwMWUsIDB4MDA0MCwgMHg4NjVhLCAweGExODYsIDB4MDAzOSwKLQkweDAwYzAsIDB4ODY4MCwgMHgwZDdlLCAweDJjNjgsIDB4MTA3OCwgMHg4ZWY1LCAweDAwYzAsIDB4ODZhNCwKLQkweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDg2N2QsIDB4NjEwNiwgMHg2MDAzLCAweDAwMDEsIDB4NjAxZiwKLQkweDAwMDEsIDB4NjkxOCwgMHg2MTFhLCAweDY5MjgsIDB4NjEyYSwgMHg2OTJjLCAweDYxMmUsIDB4NjkzMCwKLQkweGExOGMsIDB4MDBmZiwgMHg2MTMyLCAweDY5MzQsIDB4NjEzNiwgMHg2OTM4LCAweDYxM2EsIDB4NjkyMCwKLQkweDYxMjIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgyZDYwLCAweDAwNzgsIDB4ODZhNCwKLQkweDBkN2UsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDg2YTQsIDB4NjgzNywKLQkweDAxMDMsIDB4Njg1MCwgMHhkMGI0LCAweDAwNDAsIDB4ODY5MywgMHhjMGVjLCAweDY4NTIsIDB4Njg0YiwKLQkweDAwMDYsIDB4MDA3OCwgMHg4NjllLCAweGQwYmMsIDB4MDA0MCwgMHg4NjlhLCAweDY4NGIsIDB4MDAwMiwKLQkweDAwNzgsIDB4ODY5ZSwgMHg2ODRiLCAweDAwMDUsIDB4MTA3OCwgMHg4Y2MwLCAweDY4NDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgxMDc4LCAweDhiZjQsIDB4MGQ3ZiwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweDAxN2UsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODZiOCwKLQkweDY4MzcsIDB4MDEwMywgMHg2ODRiLCAweDAwMjgsIDB4Njg0NywgMHgwMDAwLCAweDEwNzgsIDB4NDk4MiwKLQkweDBkN2YsIDB4MDE3ZiwgMHhhMTg2LCAweDAwMTMsIDB4MDA0MCwgMHg4NmNhLCAweGExODYsIDB4MDAxNCwKLQkweDAwNDAsIDB4ODZjYSwgMHhhMTg2LCAweDAwMjcsIDB4MDA0MCwgMHg4NmNhLCAweDEwNzgsIDB4NzU4MywKLQkweDAwNzgsIDB4ODZkMCwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4MDU3ZSwgMHgwNjdlLCAweDBkN2UsIDB4MGY3ZSwgMHgyMDI5LCAweDAwMDEsIDB4YTE4MiwKLQkweDAxMDEsIDB4MDBjOCwgMHg4NmRkLCAweDAwNzgsIDB4ODZkZiwgMHgyMDA5LCAweDAxMDAsIDB4MjEzMCwKLQkweDIwNjksIDB4YTg5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWQxOCwgMHgyMDA5LCAweDAwMjAsIDB4YWY5MCwKLQkweDAwMWQsIDB4MTA3OCwgMHg4NzM5LCAweGE2YjIsIDB4MDAyMCwgMHg3ODA0LCAweGEwNmQsIDB4MDA0MCwKLQkweDg2ZjMsIDB4MTA3OCwgMHgxM2FhLCAweDEwNzgsIDB4MTM4MSwgMHgwMDQwLCAweDg3MWQsIDB4ODUyOCwKLQkweDY4MzcsIDB4MDExMCwgMHg2ODNiLCAweDAwMDAsIDB4MmQyMCwgMHg3YzA2LCAweGE2OGEsIDB4MDAzZCwKLQkweDAwYzgsIDB4ODcwOSwgMHgyNjA4LCAweGFkOTAsIDB4MDAwZiwgMHgxMDc4LCAweDg3MzksIDB4MDA3OCwKLQkweDg3MWQsIDB4YTZiMiwgMHgwMDNjLCAweDIwMDksIDB4MDAzYywgMHgyZDc4LCAweGFkOTAsIDB4MDAwZiwKLQkweDEwNzgsIDB4ODczOSwgMHgwMDc4LCAweDg2ZjMsIDB4MGY3ZiwgMHg4NTJmLCAweGE1YWQsIDB4MDAwMywKLQkweDdkMzYsIDB4YTVhYywgMHgwMDAwLCAweDAwNzgsIDB4ODcyMiwgMHgwZjdmLCAweDg1MmYsIDB4YTVhZCwKLQkweDAwMDMsIDB4N2QzNiwgMHgwZDdmLCAweDA2N2YsIDB4MDU3ZiwgMHgwMDdjLCAweDBmN2UsIDB4OGRmZiwKLQkweDAwNDAsIDB4ODczNywgMHg2ODA0LCAweGEwN2QsIDB4MDA0MCwgMHg4NzM1LCAweDY4MDcsIDB4MDAwMCwKLQkweDEwNzgsIDB4NDk4MiwgMHgyZjY4LCAweDAwNzgsIDB4ODcyYSwgMHgxMDc4LCAweDQ5ODIsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MTU3ZSwgMHhhMTg0LCAweDAwMDEsIDB4MDA0MCwgMHg4NzNmLCAweDgxMDgsIDB4ODEwYywKLQkweDIxYTgsIDB4MjMwNCwgMHg4MDA3LCAweDIwMTIsIDB4ODMxOCwgMHg4MjEwLCAweDAwZjAsIDB4ODc0MSwKLQkweDE1N2YsIDB4MDA3YywgMHgwNjdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMzEsIDB4MDAwMSwKLQkweDYwMWMsIDB4YTA4NCwgMHgwMDBmLCAweDEwNzksIDB4ODc2NiwgMHgxMjdmLCAweDA2N2YsIDB4MDA3YywKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDA2N2UsIDB4MjAzMSwgMHgwMDAwLCAweDYwMWMsIDB4YTA4NCwKLQkweDAwMGYsIDB4MTA3OSwgMHg4NzY2LCAweDA2N2YsIDB4MTI3ZiwgMHgwMDdjLCAweDg3ODAsIDB4ODc2ZSwKLQkweDg3N2IsIDB4ODc5YywgMHg4NzZlLCAweDg3N2IsIDB4ODc5YywgMHg4NzdiLCAweDEwNzgsIDB4MTMyOCwKLQkweDAzN2UsIDB4MjAxOSwgMHgwMDEwLCAweDEwNzgsIDB4OWE2YSwgMHg2MDFmLCAweDAwMDYsIDB4NjAwMywKLQkweDAwMDcsIDB4MDM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3YywgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDBkN2UsIDB4ODZmZiwgMHgwMGMwLCAweDg3OTcsIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4ODc5OSwgMHhhMDBlLCAweDIwMDEsIDB4MDAwNSwgMHgxMDc4LCAweDRhNjAsIDB4MTA3OCwKLQkweDhjYzAsIDB4MTA3OCwgMHg0OTgyLCAweDEwNzgsIDB4NzUzZCwgMHhhMDg1LCAweDAwMDEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDg3OTcsIDB4NjAwMCwgMHhhMDhhLCAweDAwMTAsIDB4MTBjOCwKLQkweDEzMjgsIDB4MTA3OSwgMHg4N2E0LCAweDAwN2MsIDB4ODdiNCwgMHg4N2Q0LCAweDg3YjYsIDB4ODdmNywKLQkweDg3ZDAsIDB4ODdiNCwgMHg4NzdiLCAweDg3ODAsIDB4ODc4MCwgMHg4NzdiLCAweDg3N2IsIDB4ODc3YiwKLQkweDg3N2IsIDB4ODc3YiwgMHg4NzdiLCAweDg3N2IsIDB4MTA3OCwgMHgxMzI4LCAweDg2ZmYsIDB4MDBjMCwKLQkweDg3Y2QsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwgMHg4YTQ0LCAweDAwNDAsIDB4ODdjMiwKLQkweDEwNzgsIDB4OGNjMCwgMHgwZDdmLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwKLQkweDAwMDIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDEwNzgsIDB4MTc0OSwgMHgwMDc4LCAweDg3YjYsIDB4MGU3ZSwgMHgyMDcxLCAweGE1YWIsIDB4NzAyNCwKLQkweGFjMDYsIDB4MDBjMCwgMHg4N2RkLCAweDEwNzgsIDB4NmRkYSwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDg3ZWYsIDB4MDg3ZSwgMHgwOTdlLCAweDIwNDksIDB4MDAwMSwKLQkweDJjNDAsIDB4MTA3OCwgMHg3MDU4LCAweDA5N2YsIDB4MDg3ZiwgMHgwMDc4LCAweDg3ZjEsIDB4MTA3OCwKLQkweDZjZDIsIDB4MGU3ZiwgMHgwMGMwLCAweDg3YjYsIDB4MTA3OCwgMHg4NzdiLCAweDAwN2MsIDB4MDM3ZSwKLQkweDBlN2UsIDB4MjA3MSwgMHhhNWFiLCAweDcwM2MsIDB4YWMwNiwgMHgwMGMwLCAweDg4MDcsIDB4MjAxOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg2ZTZjLCAweDBlN2YsIDB4MDM3ZiwgMHgwMDc4LCAweDg3YjYsIDB4MTA3OCwKLQkweDcxOWEsIDB4MGU3ZiwgMHgwMzdmLCAweDAwYzAsIDB4ODdiNiwgMHgxMDc4LCAweDg3N2IsIDB4MDA3YywKLQkweDBjN2UsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MTA3OSwgMHg4ODE4LCAweDBjN2YsIDB4MDA3YywKLQkweDg4MjcsIDB4ODg5NSwgMHg4OWNkLCAweDg4MzIsIDB4OGMwMSwgMHg4ODI3LCAweDlhNWIsIDB4NzUzZCwKLQkweDg4OTUsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4ODgyNywgMHgxMDc4LCAweDdhMDUsIDB4MDA3YywKLQkweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDYxMDksIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4NjAxNywKLQkweDAwMDEsIDB4MDA3YywgMHg2MDEwLCAweGEwODAsIDB4MDAxOSwgMHgyYzAyLCAweDYwMDAsIDB4YTA4YSwKLQkweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4ODgzZSwgMHgwMDdjLCAweDg4NGUsIDB4ODg1MCwKLQkweDg4NzIsIDB4ODg4NCwgMHg4ODkxLCAweDg4NGUsIDB4ODgyNywgMHg4ODI3LCAweDg4MjcsIDB4ODg4NCwKLQkweDg4ODQsIDB4ODg0ZSwgMHg4ODRlLCAweDg4NGUsIDB4ODg0ZSwgMHg4ODhlLCAweDEwNzgsIDB4MTMyOCwKLQkweDBlN2UsIDB4NjAxMCwgMHgyMDcwLCAweDcwNTAsIDB4YzBiNSwgMHg3MDUyLCAweDIwNzEsIDB4YTVhYiwKLQkweDcwMjQsIDB4YWMwNiwgMHgwMDQwLCAweDg4NmUsIDB4MTA3OCwgMHg2Y2QyLCAweDYwMDcsIDB4MDA4NSwKLQkweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwKLQkweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGU3ZiwgMHgwMDdjLCAweDYwMTcsIDB4MDAwMSwKLQkweDAwNzgsIDB4ODg2YywgMHgwZDdlLCAweDYwMTAsIDB4MjA2OCwgMHg2ODUwLCAweGMwYjUsIDB4Njg1MiwKLQkweDBkN2YsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MGQ3ZSwgMHg2MDE3LCAweDAwMDEsIDB4NjAxMCwKLQkweDIwNjgsIDB4Njg1MCwgMHhjMGI1LCAweDY4NTIsIDB4MGQ3ZiwgMHgwMDdjLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4MTA3OCwgMHgxNzQ5LCAweDAwNzgsIDB4ODg3MiwgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDg4OWQsIDB4MDA3YywgMHg4OGFkLCAweDg4MmYsIDB4ODhhZiwKLQkweDg4YWQsIDB4ODhhZiwgMHg4OGFmLCAweDg4MjgsIDB4ODhhZCwgMHg4ODIxLCAweDg4MjEsIDB4ODhhZCwKLQkweDg4YWQsIDB4ODhhZCwgMHg4OGFkLCAweDg4YWQsIDB4ODhhZCwgMHgxMDc4LCAweDEzMjgsIDB4MGQ3ZSwKLQkweDYwMTgsIDB4MjA2OCwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwgMHgwZDdmLCAweGEwOGEsIDB4MDAwYywKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDg4YmQsIDB4MDA3YywgMHg4OGM5LCAweDg5NzEsIDB4ODhjYiwKLQkweDg5MGIsIDB4ODhjYiwgMHg4OTBiLCAweDg4Y2IsIDB4ODhkOCwgMHg4OGM5LCAweDg5MGIsIDB4ODhjOSwKLQkweDg4ZjUsIDB4MTA3OCwgMHgxMzI4LCAweDYwMDQsIDB4YTA4ZSwgMHgwMDE2LCAweDAwNDAsIDB4ODkwNiwKLQkweGEwOGUsIDB4MDAwNCwgMHgwMDQwLCAweDg5MDYsIDB4YTA4ZSwgMHgwMDAyLCAweDAwNDAsIDB4ODkwNiwKLQkweDYwMDQsIDB4MTA3OCwgMHg4YzNiLCAweDAwNDAsIDB4ODk4YywgMHhhMDhlLCAweDAwMjEsIDB4MDA0MCwKLQkweDg5OTAsIDB4YTA4ZSwgMHgwMDIyLCAweDAwNDAsIDB4ODk4YywgMHhhMDhlLCAweDAwM2QsIDB4MDA0MCwKLQkweDg5OTAsIDB4YTA4ZSwgMHgwMDM5LCAweDAwNDAsIDB4ODk5NCwgMHhhMDhlLCAweDAwMzUsIDB4MDA0MCwKLQkweDg5OTQsIDB4YTA4ZSwgMHgwMDFlLCAweDAwNDAsIDB4ODkwOCwgMHhhMDhlLCAweDAwMDEsIDB4MDBjMCwKLQkweDg5MDQsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4MGQ3ZiwKLQkweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDg5MDYsIDB4MTA3OCwgMHgyODEzLCAweDEwNzgsIDB4N2EwNSwKLQkweDEwNzgsIDB4OGMwMSwgMHgwMDdjLCAweDBjN2UsIDB4MGQ3ZSwgMHg2MTA0LCAweGExODYsIDB4MDAxNiwKLQkweDAwNDAsIDB4ODk2MSwgMHhhMTg2LCAweDAwMDIsIDB4MDBjMCwgMHg4OTM0LCAweDYwMTgsIDB4MjA2OCwKLQkweDY4YTAsIDB4ZDBiYywgMHgwMGMwLCAweDg5YjgsIDB4Njg0MCwgMHhhMDg0LCAweDAwZmYsIDB4YTAwNSwKLQkweDAwNDAsIDB4ODkzNCwgMHg4MDAxLCAweDY4NDIsIDB4NjAxMywgMHgwMDAwLCAweDYwMWYsIDB4MDAwNywKLQkweDYwMTcsIDB4MDM5OCwgMHgxMDc4LCAweDc0ZDcsIDB4MDA0MCwgMHg4OTM0LCAweDJkMDAsIDB4NjAxYSwKLQkweDYwMWYsIDB4MDAwMSwgMHgwMDc4LCAweDg5NjEsIDB4MGQ3ZiwgMHgwYzdmLCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMDIsIDB4MDBjMCwgMHg4OTUyLCAweDYwMTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4NiwKLQkweDAwN2UsIDB4MDBjMCwgMHg4OTUyLCAweDIwMDksIDB4YTMzMiwgMHgyMTA0LCAweGMwODUsIDB4MjAwYSwKLQkweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDEwNzgsIDB4NDFmNSwgMHgwZTdmLCAweDEwNzgsIDB4N2EwNSwKLQkweDAwNzgsIDB4ODk1NiwgMHgxMDc4LCAweDdhMDUsIDB4MTA3OCwgMHgyODEzLCAweDBlN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDI4MzksIDB4MTI3ZiwgMHgwZTdmLCAweDEwNzgsIDB4OGMwMSwKLQkweDAwN2MsIDB4MjAwMSwgMHgwMDAyLCAweDEwNzgsIDB4NDQzZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDIsIDB4MTA3OCwgMHg1YzQ1LCAweDEwNzgsIDB4NjEwOSwgMHgwZDdmLCAweDBjN2YsIDB4MDA3OCwKLQkweDg5NjAsIDB4MGM3ZSwgMHgwZDdlLCAweDYxMDQsIDB4YTE4NiwgMHgwMDE2LCAweDAwNDAsIDB4ODk2MSwKLQkweDYwMTgsIDB4MjA2OCwgMHg2ODQwLCAweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDAwNDAsIDB4ODkzNCwKLQkweDgwMDEsIDB4Njg0MiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDEwNzgsIDB4NjEwOSwKLQkweDBkN2YsIDB4MGM3ZiwgMHgwMDc4LCAweDg5NjAsIDB4MTA3OCwgMHg3YTA1LCAweDAwNzgsIDB4ODkwOCwKLQkweDEwNzgsIDB4N2EyOCwgMHgwMDc4LCAweDg5MDgsIDB4MGQ3ZSwgMHgyYzY4LCAweDYxMDQsIDB4MTA3OCwKLQkweDhlZjUsIDB4MGQ3ZiwgMHgwMDQwLCAweDg5YTAsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4ODliNywKLQkweDYwMDQsIDB4ODAwNywgMHg2MTMwLCAweGExOGMsIDB4MDBmZiwgMHhhMTA1LCAweDYwMzIsIDB4NjAwNywKLQkweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHg2MDM4LCAweDYwMGEsIDB4MjAwMSwKLQkweGE1YTEsIDB4MjAwNCwgMHg2MDE2LCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweDBkN2YsIDB4MGM3ZiwgMHgxMDc4LCAweDdhMDUsIDB4MTA3OCwgMHgyODEzLCAweDBlN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDI4MzksIDB4NjAxMywgMHgwMDAwLCAweDYwMWYsIDB4MDAwNywKLQkweDYwMTcsIDB4MDM5OCwgMHgxMjdmLCAweDBlN2YsIDB4MDA3YywgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwKLQkweDEwYzgsIDB4MTMyOCwgMHgxMDc5LCAweDg5ZDUsIDB4MDA3YywgMHg4OWU1LCAweDg5ZTUsIDB4ODllNSwKLQkweDg5ZTUsIDB4ODllNSwgMHg4OWU1LCAweDg5ZTUsIDB4ODllNSwgMHg4OWU1LCAweDg4MjcsIDB4ODllNSwKLQkweDg4MmYsIDB4ODllNywgMHg4ODJmLCAweDg5ZjUsIDB4ODllNSwgMHgxMDc4LCAweDEzMjgsIDB4NjAwNCwKLQkweGEwODYsIDB4MDA4YiwgMHgwMDQwLCAweDg5ZjUsIDB4NjAwNywgMHgwMDhiLCAweDYwMDMsIDB4MDAwZCwKLQkweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgxMDc4LCAweDhiZjQsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg4YTJkLCAweDEwNzgsIDB4MjgxMywgMHgwZDdlLCAweDEwNzgsIDB4OGE0NCwKLQkweDAwNDAsIDB4OGEwZiwgMHg2MDEwLCAweDIwNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWQsIDB4Njg1MiwgMHgxMDc4LCAweDQ5ODIsIDB4MmM2OCwKLQkweDEwNzgsIDB4NzRkNywgMHgwMDQwLCAweDhhMWQsIDB4NjgxOCwgMHg2MDFhLCAweDBjN2UsIDB4MmQ2MCwKLQkweDEwNzgsIDB4OGMwMSwgMHgwYzdmLCAweDAwNzgsIDB4OGExZSwgMHgyZDYwLCAweDBkN2YsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDVjNDUsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OGEyZiwgMHgxMDc4LCAweDhjMDEsIDB4MDA3YywKLQkweGEyODQsIDB4MDAwZiwgMHgwMGMwLCAweDhhNDEsIDB4YTI4MiwgMHhhYTAwLCAweDAwNDgsIDB4OGE0MSwKLQkweDIwMDEsIDB4YTMxNSwgMHgyMDA0LCAweGEyMDIsIDB4MDBjOCwgMHg4YTQxLCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhhNDAsIDB4MDI3ZSwgMHgwZTdlLCAweDIwNzEsIDB4YTMwMCwKLQkweDYyMTAsIDB4NzA1OCwgMHhhMjAyLCAweDAwNDgsIDB4OGE1NiwgMHg3MDVjLCAweGEyMDIsIDB4MDBjOCwKLQkweDhhNTYsIDB4YTA4NSwgMHgwMDAxLCAweDBlN2YsIDB4MDI3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhhNTMsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDA3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNjEsIDB4YWEwMCwgMHgyMDcxLCAweGEzMDAsIDB4NzM0NCwgMHg3MDYwLCAweGEzMDIsIDB4MDBjOCwKLQkweDhhODMsIDB4NjAxYywgMHhhMjA2LCAweDAwYzAsIDB4OGE3YiwgMHgxMDc4LCAweDhkNjYsIDB4MDA0MCwKLQkweDhhN2IsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4OGE3NywgMHgxMDc4LCAweDdhMDUsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NzUzZCwgMHgwYzdmLCAweGFjZTAsIDB4MDAxMCwgMHg3MDU0LCAweGFjMDIsIDB4MDBjOCwKLQkweDhhODMsIDB4MDA3OCwgMHg4YTY0LCAweDEyN2YsIDB4MDA3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgwYzdlLCAweDAxN2UsIDB4YTE4OCwgMHhhNDM0LCAweDIxMGMsIDB4ODFmZiwKLQkweDAwNDAsIDB4OGFhMSwgMHgyMDYxLCAweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDAxN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhhYTQsIDB4NjExYSwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwKLQkweDc1M2QsIDB4YTAwNiwgMHgwMDc4LCAweDhhYTYsIDB4YTA4NSwgMHgwMDAxLCAweDAxN2YsIDB4MGM3ZiwKLQkweDBlN2YsIDB4MDA3YywgMHgwYzdlLCAweDA1N2UsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NzRkNywgMHgwNTdmLCAweDAwNDAsIDB4OGFjMywgMHg2NjEyLCAweDY1MWEsIDB4NjAxZiwKLQkweDAwMDMsIDB4MjAwOSwgMHgwMDRiLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwKLQkweDA1N2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwgMHg4YWJmLCAweDBjN2UsIDB4MDU3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDYyYTAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDU3ZiwKLQkweDAwNDAsIDB4OGFmMSwgMHg2MDEzLCAweDAwMDAsIDB4NjUxYSwgMHg2MDFmLCAweDAwMDMsIDB4MGM3ZSwKLQkweDI1NjAsIDB4MTA3OCwgMHg0NzFiLCAweDBjN2YsIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDJjMDgsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MjAwOSwKLQkweDAwNGMsIDB4MTA3OCwgMHg3NTZjLCAweGEwODUsIDB4MDAwMSwgMHgxMjdmLCAweDA1N2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhhZWQsIDB4MGY3ZSwgMHgwYzdlLCAweDA0N2UsIDB4MGM3ZSwKLQkweDEwNzgsIDB4NzRkNywgMHgyYzc4LCAweDBjN2YsIDB4MDA0MCwgMHg4YjBlLCAweDdlMTIsIDB4MmMwMCwKLQkweDc4MWEsIDB4NzgxZiwgMHgwMDAzLCAweDIwMjEsIDB4MDAwNSwgMHgxMDc4LCAweDhiNGUsIDB4MmY2MCwKLQkweDIwMDksIDB4MDA0ZCwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDA0N2YsIDB4MGM3ZiwKLQkweDBmN2YsIDB4MDA3YywgMHgwZjdlLCAweDBjN2UsIDB4MDQ3ZSwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDJjNzgsIDB4MGM3ZiwgMHgwMDQwLCAweDhiMmMsIDB4N2UxMiwgMHgyYzAwLCAweDc4MWEsIDB4NzgxZiwKLQkweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDEwNzgsIDB4OGI0ZSwgMHgyZjYwLCAweDIwMDksIDB4MDA0ZSwKLQkweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MDQ3ZiwgMHgwYzdmLCAweDBmN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MGM3ZSwgMHgwNDdlLCAweDBjN2UsIDB4MTA3OCwgMHg3NGQ3LCAweDJjNzgsIDB4MGM3ZiwKLQkweDAwNDAsIDB4OGI0YSwgMHg3ZTEyLCAweDJjMDAsIDB4NzgxYSwgMHg3ODFmLCAweDAwMDMsIDB4MjAyMSwKLQkweDAwMDQsIDB4MTA3OCwgMHg4YjRlLCAweDJmNjAsIDB4MjAwOSwgMHgwMDUyLCAweDEwNzgsIDB4NzU2YywKLQkweGEwODUsIDB4MDAwMSwgMHgwNDdmLCAweDBjN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDA5N2UsIDB4MDc3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NDZhNywgMHgwMDQwLCAweDhiNWIsIDB4MjAwMSwKLQkweDhiNTMsIDB4MDA3OCwgMHg4YjYxLCAweDEwNzgsIDB4NDY2ZCwgMHgwMDQwLCAweDhiNmEsIDB4MjAwMSwKLQkweDhiNWIsIDB4MDA3ZSwgMHhhMDBlLCAweDI0MDAsIDB4MTA3OCwgMHg0YTYwLCAweDEwNzgsIDB4NDk4MiwKLQkweDAwN2YsIDB4MDA3YSwgMHgyNDE4LCAweDEwNzgsIDB4NWZhNywgMHg2MmEwLCAweDA4N2UsIDB4MjA0MSwKLQkweDAwMDEsIDB4MjAzOSwgMHgwMDAxLCAweDI2MDgsIDB4MTA3OCwgMHg1ZDZkLCAweDA4N2YsIDB4MTA3OCwKLQkweDVjNzgsIDB4MmYwOCwgMHgyNjQ4LCAweDEwNzgsIDB4OWMzOCwgMHg2MTNjLCAweDgxZmYsIDB4MTA0MCwKLQkweDVlMjEsIDB4MTI3ZiwgMHgwNzdmLCAweDA5N2YsIDB4MDA3YywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhiOWUsIDB4NjYwYSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMWYsIDB4MTA3OCwKLQkweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhiOWIsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDAxN2YsIDB4MDA0MCwgMHg4YmJhLCAweDY2MGEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDgsIDB4MmQwMCwKLQkweDYwMTIsIDB4MjAwOSwgMHgwMDIxLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGJiNywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhiZDYsIDB4NjYwYSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwM2QsIDB4MTA3OCwKLQkweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhiZDMsIDB4MGM3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywKLQkweDAxN2YsIDB4MDA0MCwgMHg4YmYxLCAweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwKLQkweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4YTAwNiwgMHgwMDc4LCAweDhiZWUsIDB4MDI3ZSwgMHgwZDdlLCAweDYyMTgsIDB4MjI2OCwKLQkweDZhM2MsIDB4ODJmZiwgMHgwMDQwLCAweDhiZmUsIDB4ODIxMSwgMHg2YTNlLCAweDBkN2YsIDB4MDI3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMDQwLCAweDhjMTMsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAxZiwgMHgwMDA3LCAweDIwMDEsIDB4YTVhMSwgMHgyMDA0LCAweDYwMTYsIDB4MTA3OCwKLQkweGExMzQsIDB4NjAzZiwgMHgwMDAwLCAweDAwN2YsIDB4MDA3YywgMHgwNjdlLCAweDBjN2UsIDB4MGQ3ZSwKLQkweDIwMzEsIDB4YTM1MiwgMHgyNjM0LCAweGQ2ZTQsIDB4MDA0MCwgMHg4YzIzLCAweDY2MTgsIDB4MjY2MCwKLQkweDZlNDgsIDB4MTA3OCwgMHg0NjFiLCAweDBkN2YsIDB4MGM3ZiwgMHgwNjdmLCAweDAwN2MsIDB4MDA3ZSwKLQkweDAxN2UsIDB4NjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwgMHg4YzM4LCAweGEwOGUsIDB4MDAwMywKLQkweDAwNDAsIDB4OGMzOCwgMHhhMDhlLCAweDAwMDQsIDB4MDA0MCwgMHg4YzM4LCAweGEwODUsIDB4MDAwMSwKLQkweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MGQ3ZSwgMHg2MDEwLCAweGEwNmQsIDB4MDA0MCwKLQkweDhjNDgsIDB4NjgzOCwgMHhkMGZjLCAweDAwNDAsIDB4OGM0OCwgMHhhMDA2LCAweDAwNzgsIDB4OGM0YSwKLQkweGEwODUsIDB4MDAwMSwgMHgwZDdmLCAweDAwN2YsIDB4MDA3YywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGM3ZSwgMHgxMDc4LCAweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhjNjcsIDB4NjExYSwKLQkweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MTA3OCwgMHgyODEzLCAweDIwMDksIDB4MDAyOCwKLQkweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTAwNiwKLQkweDAwNzgsIDB4OGM2NCwgMHhhMTg2LCAweDAwMTUsIDB4MDBjMCwgMHg4YzdmLCAweDIwMTEsIDB4YTMxZiwKLQkweDIyMDQsIDB4YTA4NiwgMHgwMDc0LCAweDAwYzAsIDB4OGM3ZiwgMHgxMDc4LCAweDdkMGQsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDI5LCAweDEwNzgsIDB4NWM0NSwgMHgwMDc4LCAweDhjODMsIDB4MTA3OCwKLQkweDdhMDUsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4YTE4NiwgMHgwMDE2LCAweDAwYzAsIDB4OGM4ZSwKLQkweDIwMDEsIDB4MDAwNCwgMHgxMDc4LCAweDQ0M2YsIDB4MDA3OCwgMHg4Y2FmLCAweGExODYsIDB4MDAxNSwKLQkweDAwYzAsIDB4OGNiMywgMHgyMDExLCAweGEzMWYsIDB4MjIwNCwgMHhhMDg2LCAweDAwMTQsIDB4MDBjMCwKLQkweDhjYjMsIDB4MGQ3ZSwgMHg2MDE4LCAweDIwNjgsIDB4MTA3OCwgMHg0NTdkLCAweDBkN2YsIDB4MTA3OCwKLQkweDdkYmEsIDB4MDBjMCwgMHg4Y2IzLCAweDBkN2UsIDB4NjAxOCwgMHgyMDY4LCAweDY4OTAsIDB4MGQ3ZiwKLQkweGEwMDUsIDB4MDA0MCwgMHg4Y2IzLCAweDIwMDEsIDB4MDAwNiwgMHgxMDc4LCAweDQ0M2YsIDB4MTA3OCwKLQkweDc2MDgsIDB4MDA3OCwgMHg4Y2I3LCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweDY4NDgsIDB4YTA4NiwgMHgwMDA1LCAweDAwYzAsIDB4OGNiZiwgMHgxMDc4LCAweDhjYzAsIDB4MDA3YywKLQkweDY4NTAsIDB4YzBhZCwgMHg2ODUyLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGE4OGMsIDB4NzAxNCwKLQkweGQwZTQsIDB4MDA0MCwgMHg4Y2Q1LCAweDYwMTMsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNTAsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwZTdmLCAweDAwN2MsIDB4MGM3ZSwKLQkweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OTMsIDB4MGY3ZiwgMHgwMDQwLCAweDhjZTQsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDhjZTYsIDB4MGM3ZiwgMHgwMDdjLCAweDg4MjcsIDB4OGNmMSwKLQkweDhjZjQsIDB4OGNmNywgMHg5ZjAwLCAweDlmMWMsIDB4OWYxZiwgMHg4ODI3LCAweDg4MjcsIDB4MTA3OCwKLQkweDEzMjgsIDB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4MTA3OCwKLQkweDhjZmEsIDB4MDA3YywgMHgwZjdlLCAweDJjNzgsIDB4MTA3OCwgMHg0ODkzLCAweDAwNDAsIDB4OGQyOSwKLQkweDEwNzgsIDB4NzRkNywgMHgwMGMwLCAweDhkMGEsIDB4MjAwMSwgMHhhNWEyLCAweDIwMDQsIDB4NzgzZSwKLQkweDAwNzgsIDB4OGQyOSwgMHg3ODE4LCAweDYwMWEsIDB4NzgxYywgMHhhMDg2LCAweDAwMDMsIDB4MDA0MCwKLQkweDhkMTcsIDB4NzgwOCwgMHg2MDM2LCAweDJmMDAsIDB4NjAzYSwgMHgwMDc4LCAweDhkMWIsIDB4NzgwOCwKLQkweDYwM2EsIDB4MmYwMCwgMHg2MDM2LCAweDYwMmEsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAzNSwKLQkweDYwMDMsIDB4MDAwMSwgMHg3OTIwLCAweDYxMjIsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwKLQkweDJmNjAsIDB4MGY3ZiwgMHgwMDdjLCAweDAxN2UsIDB4MGY3ZSwgMHg2ODJjLCAweDYwMzIsIDB4YTA4ZSwKLQkweDAwMDEsIDB4MDA0MCwgMHg4ZDNjLCAweGEwODYsIDB4MDAwNSwgMHgwMDQwLCAweDhkNDAsIDB4YTAwNiwKLQkweDYwMmEsIDB4NjAyZSwgMHgwMDc4LCAweDhkNTEsIDB4NjgyNCwgMHhjMGY0LCAweGMwZDUsIDB4NjgyNiwKLQkweDY4MTAsIDB4MjA3OCwgMHg3ODdjLCAweDY5MzgsIDB4YTEwMiwgMHg3ODgwLCAweDY5MzQsIDB4YTEwMywKLQkweDAwYzgsIDB4OGQzNywgMHg2ODM0LCAweDYwMmEsIDB4NjgzOCwgMHhhMDg0LCAweGZmZmMsIDB4NjgzYSwKLQkweDYwMmUsIDB4MmQwMCwgMHg2MDM2LCAweDY4MDgsIDB4NjAzYSwgMHg2OTE4LCAweDYxMWEsIDB4NjkyMCwKLQkweDYxMjIsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAzOSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4NjgwMywgMHgwMDAyLCAweDBmN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDAwN2UsIDB4MDE3ZSwKLQkweDYwMDQsIDB4YTA4ZSwgMHgwMDM0LCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwMzUsIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4ZSwgMHgwMDM2LCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwMzcsIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4ZSwgMHgwMDM4LCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwMzksIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4ZSwgMHgwMDNhLCAweDAwNDAsIDB4OGQ4YiwgMHhhMDhlLCAweDAwM2IsIDB4MDA0MCwKLQkweDhkOGIsIDB4YTA4NSwgMHgwMDAxLCAweDAxN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MmM3OCwKLQkweDEwNzgsIDB4NDg5MywgMHgwMGMwLCAweDhkOTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4OGRhNywKLQkweDYwMjQsIDB4ZDBmNCwgMHgwMGMwLCAweDhkYTYsIDB4YzBmNSwgMHg2MDI2LCAweDYwMTAsIDB4MjA3OCwKLQkweDc4MjgsIDB4NjAzYSwgMHg3ODJjLCAweDYwMzYsIDB4MTA3OCwgMHgxNzQ5LCAweGEwMDYsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgwZTdlLCAweDIwMDEsIDB4YTU5YywKLQkweDIwMGMsIDB4ODAwMCwgMHgyMDE0LCAweDIwMDEsIDB4MDAzMiwgMHgxMDc4LCAweDVhOTgsIDB4MjAwMSwKLQkweGE1YTAsIDB4ODJmZiwgMHgwMGMwLCAweDhkYmUsIDB4MjAxMSwgMHgwMDAyLCAweDIyMDIsIDB4MjAwMSwKLQkweGE1OWUsIDB4MjAwYywgMHg4MDAwLCAweDIwMTQsIDB4MjA3MSwgMHhhNThjLCAweDcxMWEsIDB4NzIxZSwKLQkweDIwMDEsIDB4MDA2NCwgMHgxMDc4LCAweDVhOTgsIDB4MjAwMSwgMHhhNWExLCAweDgyZmYsIDB4MDBjMCwKLQkweDhkZDMsIDB4MjAxMSwgMHgwMDAyLCAweDIyMDIsIDB4MjAwOSwgMHhhNWEyLCAweGEyODAsIDB4MDAwYSwKLQkweDIwMGEsIDB4MGU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdmLCAweDAwN2MsIDB4MDA3ZSwKLQkweDBlN2UsIDB4MjAwMSwgMHhhNWEwLCAweDIwMDMsIDB4MDAyOCwgMHgyMDAxLCAweGE1YTEsIDB4MjAwMywKLQkweDAwMTQsIDB4MjA3MSwgMHhhNThjLCAweDcwMWIsIDB4MDAwMCwgMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwKLQkweGE1YTIsIDB4MjAwMywgMHgwMDFlLCAweDBlN2YsIDB4MDA3ZiwgMHgwMDdjLCAweDBjN2UsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgwYzdlLCAweDEwNzgsIDB4NzRkNywgMHgwMTdmLCAweDAwNDAsIDB4OGUwZSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMzMsIDB4MTA3OCwKLQkweDc1NmMsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGM3ZiwgMHgwMDdjLCAweGEwMDYsIDB4MDA3OCwKLQkweDhlMGIsIDB4MGQ3ZSwgMHgwZTdlLCAweDBmN2UsIDB4MjA3MSwgMHhhMzAwLCAweGExODYsIDB4MDAxNSwKLQkweDAwYzAsIDB4OGU0MCwgMHg3MDdjLCAweGEwODYsIDB4MDAxOCwgMHgwMGMwLCAweDhlNDAsIDB4NjAxMCwKLQkweDIwNjgsIDB4NmEzYywgMHhkMmU0LCAweDAwYzAsIDB4OGUzNCwgMHgyYzc4LCAweDEwNzgsIDB4NjJjNiwKLQkweDAwNDAsIDB4OGU0OCwgMHg3MDY4LCAweDZhNTAsIDB4YTIwNiwgMHgwMGMwLCAweDhlM2MsIDB4NzA2YywKLQkweDZhNTQsIDB4YTIwNiwgMHgwMGMwLCAweDhlM2MsIDB4NjIxOCwgMHhhMjkwLCAweDAwMjgsIDB4MjIxNCwKLQkweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI4NWIsIDB4MTA3OCwgMHg3NjA4LCAweDAwNzgsIDB4OGU0NCwKLQkweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MGY3ZiwgMHgwZTdmLCAweDBkN2YsIDB4MDA3YywKLQkweDcwNGMsIDB4YTA4MCwgMHgyOTNmLCAweDIwMDQsIDB4NmE1NCwgMHhhMjA2LCAweDAwNDAsIDB4OGUzNCwKLQkweDAwNzgsIDB4OGUzYywgMHgwYzdlLCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDBjN2UsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDE3ZiwgMHgwMDQwLCAweDhlNmEsIDB4NjExYSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwKLQkweDYwMTIsIDB4MjAwOSwgMHgwMDQzLCAweDEwNzgsIDB4NzU2YywgMHhhMDg1LCAweDAwMDEsIDB4MTI3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHhhMDA2LCAweDAwNzgsIDB4OGU2NywgMHgwZDdlLCAweDBlN2UsIDB4MGY3ZSwKLQkweDIwNzEsIDB4YTMwMCwgMHhhMTg2LCAweDAwMTUsIDB4MDBjMCwgMHg4ZTkzLCAweDcwN2MsIDB4YTA4NiwKLQkweDAwMDQsIDB4MDBjMCwgMHg4ZTkzLCAweDYwMTAsIDB4YTBlOCwgMHgwMDBmLCAweDJjNzgsIDB4MTA3OCwKLQkweDYyYzYsIDB4MDA0MCwgMHg4ZTliLCAweDcwNjgsIDB4NmEwOCwgMHhhMjA2LCAweDAwYzAsIDB4OGU4ZiwKLQkweDcwNmMsIDB4NmEwYywgMHhhMjA2LCAweDAwYzAsIDB4OGU4ZiwgMHgxMDc4LCAweDI4MTMsIDB4MTA3OCwKLQkweDc2MDgsIDB4MDA3OCwgMHg4ZTk3LCAweDEwNzgsIDB4N2EwNSwgMHgxMDc4LCAweDc1M2QsIDB4MGY3ZiwKLQkweDBlN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDcwNGMsIDB4YTA4MCwgMHgyOTNmLCAweDIwMDQsIDB4NmEwYywKLQkweGEyMDYsIDB4MDA0MCwgMHg4ZThkLCAweDAwNzgsIDB4OGU4ZiwgMHgwMTdlLCAweDAyN2UsIDB4Njg0YywKLQkweGQwYWMsIDB4MDA0MCwgMHg4ZWJkLCAweDY5MTQsIDB4NmExMCwgMHgyMTAwLCAweGEyMDUsIDB4MDA0MCwKLQkweDhlYmQsIDB4Njg2MCwgMHhhMTA2LCAweDAwYzAsIDB4OGViOSwgMHg2ODVjLCAweGEyMDYsIDB4MDA0MCwKLQkweDhlYmQsIDB4Njk2MiwgMHg2YTVlLCAweGEwODUsIDB4MDAwMSwgMHgwMjdmLCAweDAxN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MTI3ZSwgMHgyMDcxLCAweGEzMDAsIDB4MjA5MSwgMHg4MDAwLCAweDc1NDQsIDB4YTU4MiwKLQkweDAwMDEsIDB4MDA0OCwgMHg4ZWYyLCAweDcwNDgsIDB4MjA2MCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4OGVkZSwgMHhhY2UwLCAweDAwMTAsIDB4NzA1NCwgMHhhYzAyLCAweDAwYzgsIDB4OGVkYSwKLQkweDAwNzgsIDB4OGVjZCwgMHgyMDYxLCAweGFhMDAsIDB4MDA3OCwgMHg4ZWNkLCAweDYwMDMsIDB4MDAwOCwKLQkweDg1MjksIDB4NzU0NiwgMHhhY2E4LCAweDAwMTAsIDB4NzA1NCwgMHhhNTAyLCAweDAwYzgsIDB4OGVlZSwKLQkweDc1NGEsIDB4YTA4NSwgMHgwMDAxLCAweDEyN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDcwNGIsIDB4YWEwMCwKLQkweDAwNzgsIDB4OGVlOSwgMHhhMDA2LCAweDAwNzgsIDB4OGVlYiwgMHgwYzdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweGExODYsIDB4MDAzNSwgMHgwMDQwLCAweDhlZmYsIDB4NmEzNCwgMHgwMDc4LCAweDhmMDAsIDB4NmEyOCwKLQkweDEwNzgsIDB4OGEzMCwgMHgwMDQwLCAweDhmMjksIDB4MjI2MCwgMHg2MTFjLCAweGExODYsIDB4MDAwMywKLQkweDAwNDAsIDB4OGYwZSwgMHhhMTg2LCAweDAwMDYsIDB4MDBjMCwgMHg4ZjI1LCAweDY4MzQsIDB4YTIwNiwKLQkweDAwNDAsIDB4OGYxZCwgMHg2ODM4LCAweGEyMDYsIDB4MDBjMCwgMHg4ZjI1LCAweDYxMDgsIDB4NjgzNCwKLQkweGExMDYsIDB4MDBjMCwgMHg4ZjI1LCAweDAwNzgsIDB4OGYyMiwgMHg2MDA4LCAweDY5MzgsIDB4YTEwNiwKLQkweDAwYzAsIDB4OGYyNSwgMHg2MDE4LCAweDY5MTgsIDB4YTEwNiwgMHgwMTdmLCAweDAyN2YsIDB4MGM3ZiwKLQkweDAwN2MsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4OGYyNSwgMHgwNjdlLCAweDYwMDAsIDB4YTBiMiwKLQkweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4OGYzNywgMHgwNjdmLCAweDAwN2MsIDB4OGY0NywKLQkweDkzYmIsIDB4OTRkMywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY4MSwKLQkweDk1NWUsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4OGY0NywgMHg4ZjQ3LCAweDhmNDcsIDB4MTA3OCwKLQkweDEzMjgsIDB4MDY3ZSwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxMGM4LCAweDEzMjgsIDB4MTA3OSwKLQkweDhmNTMsIDB4MDY3ZiwgMHgwMDdjLCAweDhmNjMsIDB4OTlmNiwgMHg4ZjYzLCAweDhmNjMsIDB4OGY2MywKLQkweDhmNjMsIDB4OGY2MywgMHg4ZjYzLCAweDk5YjQsIDB4OWE0NCwgMHg4ZjYzLCAweGEwNTMsIDB4YTA4NywKLQkweGEwNTMsIDB4YTA4NywgMHg4ZjYzLCAweDEwNzgsIDB4MTMyOCwgMHgwNjdlLCAweDYwMDAsIDB4YTBiMiwKLQkweDAwMTAsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzksIDB4OGY2ZiwgMHgwNjdmLCAweDAwN2MsIDB4OGY3ZiwKLQkweDk2OWYsIDB4OTc2YSwgMHg5Nzk4LCAweDk4MTMsIDB4OGY3ZiwgMHg5OTE5LCAweDk4YzEsIDB4OTU2YSwKLQkweDk5ODgsIDB4OTk5ZSwgMHg4ZjdmLCAweDhmN2YsIDB4OGY3ZiwgMHg4ZjdmLCAweDhmN2YsIDB4MTA3OCwKLQkweDEzMjgsIDB4YTFiMiwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwgMHgyMTAwLCAweDAwNzksIDB4OGY4OCwKLQkweDhmYzgsIDB4OTE5YSwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg5MWEyLCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjYSwKLQkweDkwMmQsIDB4OTAzOCwgMHg5MDgxLCAweDkwOWMsIDB4OTExYiwgMHg5MThiLCAweDhmYzgsIDB4OGZjOCwKLQkweDkxYTYsIDB4OGZjOCwgMHg4ZmM4LCAweDkxYjUsIDB4OTFiYywgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg5MWVhLCAweDhmYzgsIDB4OGZjOCwgMHg5MWY1LCAweDhmYzgsIDB4OGZjOCwKLQkweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OTIwYSwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwKLQkweDkyOTEsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OGZjOCwgMHg4ZmM4LCAweDhmYzgsIDB4OTMwNSwKLQkweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDQ4OTcsIDB4MDBjMCwgMHg4ZmQ3LCAweDIwMDEsIDB4YTMzMiwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwgMHgwMGMwLCAweDhmZGYsIDB4NjAwNywKLQkweDAwMDksIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MDAwMCwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwKLQkweDQ4ODcsIDB4MGU3ZSwgMHgwYzdlLCAweDAzN2UsIDB4MDI3ZSwgMHgwMTdlLCAweDYyMTgsIDB4MjI3MCwKLQkweDcyYTAsIDB4MDI3ZSwgMHgyMDE5LCAweDAwMjksIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDJjMDgsIDB4MTA3OCwgMHg5YzM4LCAweDA3N2YsIDB4MDE3ZiwKLQkweDJlNjAsIDB4MTA3OCwgMHg0NzFiLCAweDAxN2YsIDB4MDI3ZiwgMHgwMzdmLCAweDBjN2YsIDB4MGU3ZiwKLQkweDY2MTgsIDB4MGM3ZSwgMHgyNjYwLCAweDEwNzgsIDB4NDUxMywgMHgwYzdmLCAweGE2YjAsIDB4MDAwMSwKLQkweDI2MzQsIDB4YTY4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwMDQ4LCAweDkwMWYsIDB4MTA3OCwKLQkweDliNmMsIDB4MDBjMCwgMHg5MDdiLCAweDEwNzgsIDB4OWFmZCwgMHgwMGMwLCAweDkwMWIsIDB4NjAwNywKLQkweDAwMDgsIDB4MDA3OCwgMHg5MTk1LCAweDYwMDcsIDB4MDAwOSwgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwKLQkweDlkNDUsIDB4MDA0MCwgMHg5MDI5LCAweDEwNzgsIDB4OWI2YywgMHgwMDQwLCAweDkwMTMsIDB4MDA3OCwKLQkweDkwN2IsIDB4NjAxMywgMHgxOTAwLCAweDAwNzgsIDB4OTAxYiwgMHg2MTA2LCAweDEwNzgsIDB4OWFhOCwKLQkweDYwMDcsIDB4MDAwNiwgMHgwMDc4LCAweDkxOTUsIDB4NjAwNywgMHgwMDA3LCAweDAwNzgsIDB4OTE5NSwKLQkweDEwNzgsIDB4YTBiZiwgMHgwMGMwLCAweDkzNDAsIDB4MGQ3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMDQwLCAweDkwNWQsIDB4YTY4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg5MDVkLCAweDZlMDQsIDB4YTZiNCwgMHgwMGZmLCAweGE2ODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4OTA1ZCwgMHhhNjg2LCAweDAwMDQsIDB4MDA0MCwgMHg5MDVkLCAweGE2ODYsIDB4MDAwNSwKLQkweDAwNDAsIDB4OTA1ZCwgMHgwZDdmLCAweDAwNzgsIDB4OTA3YiwgMHgxMDc4LCAweDliZDIsIDB4MDBjMCwKLQkweDkwNzYsIDB4YTY4NiwgMHgwMDA2LCAweDAwYzAsIDB4OTA2ZiwgMHgwMjdlLCAweDYyMTgsIDB4YTI5MCwKLQkweDAwMjgsIDB4MjIxNCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHgyODViLCAweDAyN2YsIDB4MTA3OCwKLQkweDQ1N2QsIDB4NjAwNywgMHgwMDBhLCAweDBkN2YsIDB4MDA3OCwgMHg5MTk1LCAweDYwMDcsIDB4MDAwYiwKLQkweDBkN2YsIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4MjgxMywgMHg2MDA3LCAweDAwMDEsIDB4MDA3OCwKLQkweDkxOTUsIDB4MTA3OCwgMHhhMGJmLCAweDAwYzAsIDB4OTM0MCwgMHg2NjE4LCAweDBkN2UsIDB4MjY2OCwKLQkweDZlMDQsIDB4MGQ3ZiwgMHhhNjg2LCAweDA3MDcsIDB4MDA0MCwgMHg5MDdiLCAweDAyN2UsIDB4NjIxOCwKLQkweGEyOTAsIDB4MDAyOCwgMHgyMjE0LCAweDIwMDksIDB4MDAwMCwgMHgxMDc4LCAweDI4NWIsIDB4MDI3ZiwKLQkweDYwMDcsIDB4MDAwYywgMHgwMDc4LCAweDkxOTUsIDB4MTA3OCwgMHg0ODk3LCAweDAwYzAsIDB4OTBhOSwKLQkweDIwMDEsIDB4YTMzMiwgMHgyMDA0LCAweGEwODQsIDB4MDAwOSwgMHhhMDg2LCAweDAwMDgsIDB4MDBjMCwKLQkweDkwYjEsIDB4NjAwNywgMHgwMDA5LCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDAwMDAsIDB4MDA3OCwKLQkweDkxOTUsIDB4MTA3OCwgMHg0ODg3LCAweDY2MTgsIDB4YTZiMCwgMHgwMDAxLCAweDI2MzQsIDB4YTY4NCwKLQkweDAwZmYsIDB4YTA4MiwgMHgwMDA2LCAweDAwNDgsIDB4OTBmNSwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywKLQkweGE2ODYsIDB4MDAwNCwgMHgwMDQwLCAweDkwYzgsIDB4YTY4NiwgMHgwMDA2LCAweDAwYzAsIDB4OTA3YiwKLQkweDEwNzgsIDB4OWJlMSwgMHgwMGMwLCAweDkwZDAsIDB4NjAwNywgMHgwMDBlLCAweDAwNzgsIDB4OTE5NSwKLQkweDA0N2UsIDB4NjQxOCwgMHhhNGEwLCAweDAwMjgsIDB4MjQyNCwgMHhhNGE0LCAweDAwZmYsIDB4ODQyNywKLQkweDA0N2UsIDB4MTA3OCwgMHgyODEzLCAweDA0N2YsIDB4MDE3ZSwgMHhhMDA2LCAweDIwMDksIDB4YTM1MiwKLQkweDIxMGMsIDB4ZDFhNCwgMHgwMDQwLCAweDkwZWYsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwKLQkweDYwMTgsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLCAweDBkN2YsIDB4MDE3ZiwKLQkweDA0N2YsIDB4NjAwNywgMHgwMDAxLCAweDAwNzgsIDB4OTE5NSwgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwKLQkweDQ0MmIsIDB4MTU3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweGEzMDUsIDB4MjAxMSwgMHhhODkwLCAweDEwNzgsIDB4N2U1NSwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwKLQkweDE1N2YsIDB4YTAwNSwgMHgwMDQwLCAweDkxMTUsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDYsIDB4MDA0MCwgMHg5MGM4LCAweDAwNzgsIDB4OTA3YiwgMHg2MDEzLCAweDE5MDAsIDB4NjAwNywKLQkweDAwMDksIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4NDg5NywgMHgwMGMwLCAweDkxMjgsIDB4MjAwMSwKLQkweGEzMzIsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDksIDB4YTA4NiwgMHgwMDA4LCAweDAwYzAsIDB4OTEzMCwKLQkweDYwMDcsIDB4MDAwOSwgMHg2MDJiLCAweDAwMDksIDB4NjAxMywgMHgwMDAwLCAweDAwNzgsIDB4OTE5NSwKLQkweDEwNzgsIDB4NDg4NywgMHg2NjE4LCAweGE2YjAsIDB4MDAwMSwgMHgyNjM0LCAweGE2ODQsIDB4MDBmZiwKLQkweGEwODIsIDB4MDAwNiwgMHgwMDQ4LCAweDkxNzgsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg5MTQ3LCAweGE2ODYsIDB4MDAwNiwgMHgwMGMwLCAweDkwN2IsIDB4MTA3OCwKLQkweDljMGMsIDB4MDBjMCwgMHg5MTUzLCAweDEwNzgsIDB4OWFmZCwgMHgwMGMwLCAweDkxNTMsIDB4NjAwNywKLQkweDAwMTAsIDB4MDA3OCwgMHg5MTk1LCAweDA0N2UsIDB4NjQxOCwgMHhhNGEwLCAweDAwMjgsIDB4MjQyNCwKLQkweGE0YTQsIDB4MDBmZiwgMHg4NDI3LCAweDA0N2UsIDB4MTA3OCwgMHgyODEzLCAweDA0N2YsIDB4MDE3ZSwKLQkweGEwMDYsIDB4MjAwOSwgMHhhMzUyLCAweDIxMGMsIDB4ZDFhNCwgMHgwMDQwLCAweDkxNzIsIDB4MjAwOSwKLQkweDAwMjksIDB4MTA3OCwgMHg5ZWMwLCAweDYwMTgsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwKLQkweDY4MDIsIDB4MGQ3ZiwgMHgwMTdmLCAweDA0N2YsIDB4NjAwNywgMHgwMDAxLCAweDAwNzgsIDB4OTE5NSwKLQkweDEwNzgsIDB4OWQ0NSwgMHgwMDQwLCAweDkxODUsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDYsIDB4MDA0MCwgMHg5MTQ3LCAweDAwNzgsIDB4OTA3YiwgMHg2MDEzLCAweDE5MDAsIDB4NjAwNywKLQkweDAwMDksIDB4MDA3OCwgMHg5MTk1LCAweDEwNzgsIDB4YTBiZiwgMHgwMGMwLCAweDkzNDAsIDB4MTA3OCwKLQkweDkzNDMsIDB4MDBjMCwgMHg5MDdiLCAweDYwMDcsIDB4MDAxMiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDVjNDUsIDB4MDA3YywgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWM0NSwKLQkweDAwNzgsIDB4OTE5OSwgMHg2MDA3LCAweDAwMDUsIDB4MDA3OCwgMHg5MTljLCAweDEwNzgsIDB4YTBiZiwKLQkweDAwYzAsIDB4OTM0MCwgMHgxMDc4LCAweDkzNDMsIDB4MDBjMCwgMHg5MDdiLCAweDYwMDcsIDB4MDAyMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDA3YywgMHg2MDA3LCAweDAwMjMsIDB4NjAwMywKLQkweDAwMDEsIDB4MTA3OCwgMHg1YzQ1LCAweDAwN2MsIDB4MTA3OCwgMHhhMGJmLCAweDAwYzAsIDB4OTM0MCwKLQkweDEwNzgsIDB4OTM0MywgMHgwMGMwLCAweDkwN2IsIDB4MDE3ZSwgMHgwMjdlLCAweDIwMTEsIDB4YTg5MCwKLQkweDIyMTQsIDB4MmMwOCwgMHgxMDc4LCAweDllOGMsIDB4MDBjMCwgMHg5MWRlLCAweDIxNjAsIDB4NjAwNywKLQkweDAwMjYsIDB4NjAxMywgMHgxNzAwLCAweDIwMTEsIDB4YTg4OSwgMHgyMjE0LCAweGEyOTYsIDB4ZmZmZiwKLQkweDAwYzAsIDB4OTFlMywgMHg2MDA3LCAweDAwMjUsIDB4MDA3OCwgMHg5MWUzLCAweDEwNzgsIDB4NzUzZCwKLQkweDIxNjAsIDB4NjAwNywgMHgwMDI1LCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDVjNDUsIDB4MDI3ZiwKLQkweDAxN2YsIDB4MDA3YywgMHg2MTA2LCAweDEwNzgsIDB4OTM2MywgMHg2MDA3LCAweDAwMmIsIDB4MDA3OCwKLQkweDkxOTUsIDB4NjAwNywgMHgwMDJjLCAweDAwNzgsIDB4OTE5NSwgMHgxMDc4LCAweGEwYmYsIDB4MDBjMCwKLQkweDkzNDAsIDB4MTA3OCwgMHg5MzQzLCAweDAwYzAsIDB4OTA3YiwgMHg2MTA2LCAweDEwNzgsIDB4OTM2OCwKLQkweDAwYzAsIDB4OTIwNiwgMHg2MDA3LCAweDAwMmUsIDB4MDA3OCwgMHg5MTk1LCAweDYwMDcsIDB4MDAyZiwKLQkweDAwNzgsIDB4OTE5NSwgMHgwZTdlLCAweDBkN2UsIDB4MGM3ZSwgMHg2MDE4LCAweGEwODAsIDB4MDAwMSwKLQkweDIwMGMsIDB4YTE4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMDQwLCAweDkyMjMsIDB4YTE4NCwKLQkweGZmMDAsIDB4ODAwNywgMHhhMDg2LCAweDAwMDYsIDB4MDA0MCwgMHg5MjIzLCAweDBjN2YsIDB4MGQ3ZiwKLQkweDBlN2YsIDB4MDA3OCwgMHg5MTlhLCAweDIwMDEsIDB4YTM3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDA0MCwKLQkweDkyOGQsIDB4MjA3MSwgMHhhODhjLCAweDcwMTAsIDB4NjAzNiwgMHg3MDE0LCAweDYwM2EsIDB4NzEwOCwKLQkweDcyMGMsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwMDQwLCAweDkyNDEsIDB4NjAxOCwKLQkweDIwNjgsIDB4NjgxMCwgMHhhMTA2LCAweDAwYzAsIDB4OTI0MSwgMHg2ODE0LCAweGEyMDYsIDB4MDA0MCwKLQkweDkyNjUsIDB4MjAwMSwgMHhhMzUyLCAweDIwMDQsIDB4ZDBhYywgMHgwMGMwLCAweDkyODEsIDB4MjA2OSwKLQkweGEzMDAsIDB4Njg2YywgMHhhMjA2LCAweDAwYzAsIDB4OTI4MSwgMHg2ODY4LCAweGExMDYsIDB4MDBjMCwKLQkweDkyODEsIDB4NzIxMCwgMHgxMDc4LCAweDhhMzAsIDB4MDA0MCwgMHg5Mjg3LCAweDEwNzgsIDB4OWYzMSwKLQkweDAwNDAsIDB4OTI4NywgMHg2MjJhLCAweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg3MjE0LCAweGEyODYsIDB4ZmZmZiwKLQkweDAwNDAsIDB4OTI3NywgMHgxMDc4LCAweDhhMzAsIDB4MDA0MCwgMHg5Mjg3LCAweGEyODAsIDB4MDAwMiwKLQkweDIwMDQsIDB4NzExMCwgMHhhMTA2LCAweDAwYzAsIDB4OTI4NywgMHgwMDc4LCAweDkyNTIsIDB4NzIxMCwKLQkweDJjMDgsIDB4MTA3OCwgMHg5ZThjLCAweDJjMTAsIDB4MjE2MCwgMHgwMDQwLCAweDkyODcsIDB4MDA3OCwKLQkweDkyNTIsIDB4NjAwNywgMHgwMDM3LCAweDYwMTMsIDB4MTUwMCwgMHgwMDc4LCAweDkyNWQsIDB4NjAwNywKLQkweDAwMzcsIDB4NjAxMywgMHgxNzAwLCAweDAwNzgsIDB4OTI1ZCwgMHg2MDA3LCAweDAwMTIsIDB4MDA3OCwKLQkweDkyNWQsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwNiwgMHgwMGMwLCAweDkxOWEsIDB4MGU3ZSwgMHgwZDdlLCAweDBjN2UsIDB4MjAwMSwKLQkweGEzNzEsIDB4MjAwNCwgMHhkMGU0LCAweDAwNDAsIDB4OTJmZCwgMHgyMDY5LCAweGEzMDAsIDB4MjA3MSwKLQkweGE4OGMsIDB4NzAwOCwgMHg2MDM2LCAweDcyMGMsIDB4NjIzYSwgMHhhMjg2LCAweGZmZmYsIDB4MDBjMCwKLQkweDkyYmEsIDB4NzIwOCwgMHgwYzdlLCAweDJjMDgsIDB4MTA3OCwgMHg5ZThjLCAweDJjMTAsIDB4MGM3ZiwKLQkweDAwNDAsIDB4OTJmMSwgMHgxMDc4LCAweDhhMzAsIDB4MDA0MCwgMHg5MmYxLCAweDBjN2UsIDB4MDI3ZSwKLQkweDIyNjAsIDB4MTA3OCwgMHg4NzRhLCAweDAyN2YsIDB4MGM3ZiwgMHg3MTE4LCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4NiwgMHgwMDAxLCAweDAwNDAsIDB4OTJkYiwgMHhhMTg2LCAweDAwMDUsIDB4MDA0MCwKLQkweDkyZDUsIDB4YTE4NiwgMHgwMDA3LCAweDAwYzAsIDB4OTJlNSwgMHhhMjgwLCAweDAwMDQsIDB4MjAwNCwKLQkweGEwMDUsIDB4MDA0MCwgMHg5MmU1LCAweDA1N2UsIDB4NzUxMCwgMHg3NjE0LCAweDEwNzgsIDB4OWY0NiwKLQkweDA1N2YsIDB4MGM3ZiwgMHgwZDdmLCAweDBlN2YsIDB4MDA3YywgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwKLQkweDAwMDksIDB4NjAxMywgMHgyYTAwLCAweDYwMDMsIDB4MDAwMSwgMHgxMDc4LCAweDViZjgsIDB4MDA3OCwKLQkweDkyZTEsIDB4NjAwNywgMHgwMDNiLCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDE3MDAsIDB4NjAwMywKLQkweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDAwNzgsIDB4OTJlMSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwKLQkweDAwMGIsIDB4NjAxMywgMHgwMDAwLCAweDAwNzgsIDB4OTI1ZCwgMHgwZTdlLCAweDAyN2UsIDB4MTA3OCwKLQkweDQ4OTcsIDB4MDA0MCwgMHg5MzNhLCAweDEwNzgsIDB4NDg4NywgMHgxMDc4LCAweGExNDgsIDB4MDBjMCwKLQkweDkzMzgsIDB4MjA3MSwgMHhhMzAwLCAweDcwYzgsIDB4YzA4NSwgMHg3MGNhLCAweDBmN2UsIDB4MjA3OSwKLQkweDAxMDAsIDB4NzI5NCwgMHhhMjg0LCAweDAwZmYsIDB4NzA2YSwgMHg3OGU2LCAweGEyODQsIDB4ZmYwMCwKLQkweDcyNmMsIDB4YTIwNSwgMHg3MDZlLCAweDc4ZWEsIDB4MGY3ZiwgMHg3MGQzLCAweDAwMDAsIDB4MjAwMSwKLQkweGEzNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAwNDAsIDB4OTMzMSwgMHgyMDExLCAweGE1YzQsIDB4MjAxMywKLQkweDA3ZDAsIDB4ZDBhYywgMHgwMGMwLCAweDkzM2EsIDB4MTA3OCwgMHgyNjBkLCAweDAwNzgsIDB4OTMzYSwKLQkweDEwNzgsIDB4YTE3OCwgMHgwMjdmLCAweDBlN2YsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4OTE5OSwKLQkweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDBkN2UsIDB4MDY3ZSwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMDQwLCAweDkzNjAsIDB4YTY4NiwKLQkweDAwMDQsIDB4MDA0MCwgMHg5MzYwLCAweDZlMDQsIDB4YTZiNCwgMHgwMGZmLCAweGE2ODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4OTM2MCwgMHhhNjg2LCAweDAwMDQsIDB4MDA0MCwgMHg5MzYwLCAweGEwODUsIDB4MDAwMSwKLQkweDA2N2YsIDB4MGQ3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MTA3OCwgMHg5Mzk3LCAweDBkN2YsIDB4MDA3YywKLQkweDBkN2UsIDB4MTA3OCwgMHg5M2E2LCAweDAwYzAsIDB4OTM5MCwgMHg2ODBjLCAweGEwOGMsIDB4ZmYwMCwKLQkweDY4MjAsIDB4YTA4NCwgMHgwMGZmLCAweGExMTUsIDB4NjIxMiwgMHg2ODI0LCAweDYwMmEsIDB4ZDFlNCwKLQkweDAwNDAsIDB4OTM3ZSwgMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHg5MzhjLCAweGQxZWMsIDB4MDA0MCwKLQkweDkzOTAsIDB4NjkyMCwgMHhhMThjLCAweDAwZmYsIDB4NjgyNCwgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwKLQkweDkzOTAsIDB4MjExMCwgMHgyMDA5LCAweDAwMDAsIDB4MTA3OCwgMHgyODViLCAweDAwNzgsIDB4OTM5NCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDkzOTUsIDB4YTAwNiwgMHgwZDdmLCAweDAwN2MsIDB4MjA2OSwKLQkweGE4OGQsIDB4NjgwMCwgMHhhMDgyLCAweDAwMTAsIDB4MDBjOCwgMHg5M2E0LCAweDYwMTMsIDB4MDAwMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDc4LCAweDkzYTUsIDB4YTAwNiwgMHgwMDdjLCAweDYwMTMsIDB4MDAwMCwKLQkweDIwNjksIDB4YTg4YywgMHg2ODA4LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDA4MDAsIDB4MDBjMCwKLQkweDkzYmEsIDB4NjgwMCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4ZSwgMHgwMDE0LCAweDAwNDAsIDB4OTNiYSwKLQkweGEwOGUsIDB4MDAxMCwgMHgwMDdjLCAweDYwMDQsIDB4YTBiMiwgMHgwMDQ0LCAweDEwYzgsIDB4MTMyOCwKLQkweGExYjYsIDB4MDAxMywgMHgwMGMwLCAweDkzYzcsIDB4MjAwOCwgMHgwMDc5LCAweDkzZGEsIDB4YTFiNiwKLQkweDAwMjcsIDB4MDA0MCwgMHg5M2NmLCAweGExYjYsIDB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4MjAwMSwKLQkweDAwMDcsIDB4MTA3OCwgMHg0NDcyLCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHg5NDFhLCAweDk0MWMsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYywKLQkweDk0MjQsIDB4OTRhZSwgMHg5NDcxLCAweDk0YWUsIDB4OTQ4NSwgMHg5NGFlLCAweDk0MjQsIDB4OTRhZSwKLQkweDk0YTYsIDB4OTRhZSwgMHg5NGE2LCAweDk0YWUsIDB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwKLQkweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwKLQkweDk0MWMsIDB4OTQxYSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwgMHg5NGFlLCAweDk0MWEsIDB4OTRhZSwKLQkweDk0YWUsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NGFlLCAweDk0YWUsIDB4OTQxYSwKLQkweDk0YWUsIDB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYSwgMHg5NDFhLCAweDk0MWEsIDB4OTQxYywKLQkweDk0YWUsIDB4OTRhZSwgMHg5NDFhLCAweDk0MWEsIDB4OTRhZSwgMHg5NGFlLCAweDk0MWEsIDB4OTQxYSwKLQkweDk0MWEsIDB4OTQxYSwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDYwMDMsIDB4MDAwMiwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDk0YjQsIDB4MGY3ZSwgMHgyMDc5LCAweGEzNTEsIDB4NzgwNCwKLQkweDBmN2YsIDB4ZDBhYywgMHgwMGMwLCAweDk0YWUsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwKLQkweDYwMTgsIDB4YTA4MCwgMHgwMDA0LCAweDIwMDQsIDB4YTA4NiwgMHgwMGZmLCAweDAwNDAsIDB4OTRhZSwKLQkweDBjN2UsIDB4NjAxOCwgMHgyMDYwLCAweDYwMDAsIDB4ZDBmNCwgMHgwMGMwLCAweDk0NDgsIDB4NjAxMCwKLQkweGEwMDUsIDB4MDA0MCwgMHg5NDQ4LCAweDBjN2YsIDB4MTA3OCwgMHgzNWY3LCAweDAwNzgsIDB4OTRhZSwKLQkweDBjN2YsIDB4MjAwMSwgMHhhMzAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4OTQ1NywKLQkweDBmN2UsIDB4MjA3OSwgMHhhMzAwLCAweDc4OGMsIDB4ODAwMCwgMHg3ODhlLCAweDBmN2YsIDB4MjAwMSwKLQkweDAwMDIsIDB4MTA3OCwgMHg0NDNmLCAweDEwNzgsIDB4NjAxMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDEwNzgsIDB4NWM0NSwgMHgxMDc4LCAweDYxMDksIDB4MGM3ZSwKLQkweDYxMTgsIDB4MjE2MCwgMHgyMDA5LCAweDAwMDEsIDB4MTA3OCwgMHg1OGUxLCAweDBjN2YsIDB4MDA3OCwKLQkweDk0YjQsIDB4NjYxOCwgMHgwZDdlLCAweDI2NjgsIDB4NmUwNCwgMHgwZDdmLCAweGE2YjQsIDB4ZmYwMCwKLQkweDg2MzcsIDB4YTY4NiwgMHgwMDA2LCAweDAwNDAsIDB4OTRhZSwgMHhhNjg2LCAweDAwMDQsIDB4MDA0MCwKLQkweDk0YWUsIDB4MjAwMSwgMHgwMDA0LCAweDAwNzgsIDB4OTRhYywgMHgyMDAxLCAweGEzMDAsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwMywgMHgwMGMwLCAweDk0OGUsIDB4MTA3OCwgMHgzNWY3LCAweDIwMDEsIDB4MDAwNiwKLQkweDEwNzgsIDB4OTRiNSwgMHg2NjE4LCAweDBkN2UsIDB4MjY2OCwgMHg2ZTA0LCAweDBkN2YsIDB4YTZiNCwKLQkweGZmMDAsIDB4ODYzNywgMHhhNjg2LCAweDAwMDYsIDB4MDA0MCwgMHg5NGFlLCAweDIwMDEsIDB4MDAwNiwKLQkweDAwNzgsIDB4OTRhYywgMHgyMDAxLCAweDAwMDQsIDB4MDA3OCwgMHg5NGFjLCAweDIwMDEsIDB4MDAwNiwKLQkweDEwNzgsIDB4OTRiNSwgMHgwMDc4LCAweDk0YWUsIDB4MTA3OCwgMHg0NDcyLCAweDEwNzgsIDB4NjAxMCwKLQkweDEwNzgsIDB4NzUzZCwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywgMHgwMTdlLCAweDBkN2UsIDB4NjExOCwKLQkweDIxNjgsIDB4NjkwMCwgMHhkMTg0LCAweDAwNDAsIDB4OTRkMCwgMHg2MTA0LCAweGExOGUsIDB4MDAwYSwKLQkweDAwYzAsIDB4OTRjOCwgMHg2OTljLCAweGQxYTQsIDB4MDBjMCwgMHg5NGM4LCAweDIwMDEsIDB4MDAwNywKLQkweDEwNzgsIDB4NDQzZiwgMHgyMDAxLCAweDAwMDAsIDB4MTA3OCwgMHg0NDJiLCAweDEwNzgsIDB4MjgzOSwKLQkweDBkN2YsIDB4MDE3ZiwgMHgwMDdjLCAweDBkN2UsIDB4NjYxOCwgMHgyNjY4LCAweDY4MDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4ODAwNywgMHgwZDdmLCAweGEwYjIsIDB4MDAwYywgMHgxMGM4LCAweDEzMjgsIDB4YTFiNiwKLQkweDAwMTUsIDB4MDBjMCwgMHg5NGU3LCAweDEwNzksIDB4OTRlZSwgMHgwMDc4LCAweDk0ZWQsIDB4YTFiNiwKLQkweDAwMTYsIDB4MTBjMCwgMHgxMzI4LCAweDEwNzksIDB4OTRmYSwgMHgwMDdjLCAweDdhZDAsIDB4N2FkMCwKLQkweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4OTU0NywgMHg5NTA2LCAweDdhZDAsIDB4N2FkMCwKLQkweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwKLQkweDk1NDcsIDB4OTU0ZiwgMHg3YWQwLCAweDdhZDAsIDB4N2FkMCwgMHg3YWQwLCAweDBmN2UsIDB4MjA3OSwKLQkweGEzNTEsIDB4NzgwNCwgMHhkMGFjLCAweDAwYzAsIDB4OTUyZCwgMHg2MDE4LCAweGEwN2QsIDB4MDA0MCwKLQkweDk1MmQsIDB4NzgwMCwgMHhkMGY0LCAweDAwYzAsIDB4OTUxOSwgMHg3ODEwLCAweGEwMDUsIDB4MDBjMCwKLQkweDk1MmQsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDQyYiwgMHgyMDAxLCAweDAwMDIsIDB4MTA3OCwKLQkweDQ0M2YsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MTA3OCwKLQkweDVjNDUsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTU0NSwgMHgyMDExLCAweGE4ODMsIDB4MjIwNCwKLQkweDgyMTEsIDB4MjIwYywgMHgxMDc4LCAweDI0ZTMsIDB4MDBjMCwgMHg5NTQ1LCAweDBjN2UsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDA0MCwgMHg5NTQwLCAweDBjN2YsIDB4MTA3OCwgMHg3NTNkLCAweDAwNzgsIDB4OTU0NSwKLQkweDEwNzgsIDB4NDIzNSwgMHgwYzdmLCAweDEwNzgsIDB4NzUzZCwgMHgwZjdmLCAweDAwN2MsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAxZSwgMHgwMGMwLCAweDk1NGUsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MTA3OCwKLQkweDdkMGEsIDB4MDBjMCwgMHg5NTViLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MTA3OCwKLQkweDVjNDUsIDB4MDA3OCwgMHg5NTVkLCAweDEwNzgsIDB4NzUzZCwgMHgwMDdjLCAweDYwMDQsIDB4YTA4YSwKLQkweDAwNDQsIDB4MTBjOCwgMHgxMzI4LCAweDEwNzgsIDB4NjAxMCwgMHgxMDc4LCAweDhjMDEsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3YywgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg5NTZlLCAweDk1ODEsIDB4OTU4MSwKLQkweDk1ODEsIDB4OTU4MSwgMHg5NTgzLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwKLQkweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwgMHg5NTgxLCAweDk1ODEsIDB4OTU4MSwKLQkweDk1ODEsIDB4MTA3OCwgMHgxMzI4LCAweDBkN2UsIDB4MGU3ZSwgMHgwZjdlLCAweDE1N2UsIDB4MDQ3ZSwKLQkweDAyN2UsIDB4NjIxOCwgMHhhMjgwLCAweDAwMmIsIDB4MjAwNCwgMHhhMDA1LCAweDAwNDAsIDB4OTU5NCwKLQkweDIwMjEsIDB4MDAwMCwgMHgxMDc4LCAweGExMTEsIDB4NjEwNiwgMHgyMDcxLCAweGE4ODAsIDB4NzQ0NCwKLQkweGE0YTQsIDB4ZmYwMCwgMHgwMDQwLCAweDk1ZWIsIDB4YTQ4NiwgMHgyMDAwLCAweDAwYzAsIDB4OTVhNiwKLQkweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAyMDAsIDB4MTA3OCwgMHg1YTZkLCAweDEwNzgsIDB4MTM4MSwKLQkweDEwNDAsIDB4MTMyOCwgMHg2MDAzLCAweDAwMDcsIDB4MmQwMCwgMHg2ODM3LCAweDAxMGQsIDB4NjgwMywKLQkweDAwMDAsIDB4NjgzYiwgMHgwMDAwLCAweDZjNWEsIDB4MmMwMCwgMHg2ODVlLCAweDYwMDgsIDB4NjhiMiwKLQkweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwgMHg2OTRhLCAweDAxN2UsIDB4YTA4NCwKLQkweGZmMDAsIDB4Njg0NiwgMHg2ODRmLCAweDAwMDAsIDB4Njg1NywgMHgwMDM2LCAweDEwNzgsIDB4NDk4MiwKLQkweDAxN2YsIDB4YTQ4NiwgMHgyMDAwLCAweDAwYzAsIDB4OTVkMywgMHgyMDE5LCAweDAwMTcsIDB4MTA3OCwKLQkweDllM2IsIDB4MDA3OCwgMHg5NjQ1LCAweGE0ODYsIDB4MDQwMCwgMHgwMGMwLCAweDk1ZGQsIDB4MjAxOSwKLQkweDAwMDIsIDB4MTA3OCwgMHg5ZGVjLCAweDAwNzgsIDB4OTY0NSwgMHhhNDg2LCAweDAyMDAsIDB4MDBjMCwKLQkweDk1ZTMsIDB4MTA3OCwgMHg5ZGQxLCAweGE0ODYsIDB4MTAwMCwgMHgwMGMwLCAweDk1ZTksIDB4MTA3OCwKLQkweDllMjAsIDB4MDA3OCwgMHg5NjQ1LCAweDIwNjksIDB4YTYyZCwgMHg2YTAwLCAweGQyODQsIDB4MDA0MCwKLQkweDk2OWIsIDB4YTI4NCwgMHgwMzAwLCAweDAwYzAsIDB4OTY5MywgMHg2ODA0LCAweGEwMDUsIDB4MDA0MCwKLQkweDk2ODMsIDB4MmQ3OCwgMHg2MDAzLCAweDAwMDcsIDB4MTA3OCwgMHgxMzY2LCAweDAwNDAsIDB4OTY0YywKLQkweDc4MDAsIDB4ZDA4YywgMHgwMGMwLCAweDk2MDcsIDB4NzgwNCwgMHg4MDAxLCAweDc4MDYsIDB4NjAxMywKLQkweDAwMDAsIDB4NjgwMywgMHgwMDAwLCAweDY4MzcsIDB4MDExNiwgMHg2ODNiLCAweDAwMDAsIDB4NjAwOCwKLQkweDY4YjIsIDB4MmMwMCwgMHg2ODRhLCAweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwKLQkweDY5ODYsIDB4Njg0NiwgMHg2ODUzLCAweDAwM2QsIDB4NzI0NCwgMHhhMjk0LCAweDAwMDMsIDB4YTI4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHg5NjI3LCAweDY4NGYsIDB4MDA0MCwgMHgwMDc4LCAweDk2MzEsIDB4YTI4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHg5NjJmLCAweDY4NGYsIDB4MDA4MCwgMHgwMDc4LCAweDk2MzEsIDB4Njg0ZiwKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDBhLCAweDIwMDEsIDB4YTg5MCwgMHhhZDkwLCAweDAwMTUsIDB4MjAwYywKLQkweDgxMGYsIDB4MjExMiwgMHg4MDAwLCAweDgyMTAsIDB4MDBmMCwgMHg5NjM3LCAweDIwMGMsIDB4Njk4MiwKLQkweDgwMDAsIDB4MjAwYywgMHg2OTdlLCAweDEwNzgsIDB4NDk4MiwgMHgwMjdmLCAweDA0N2YsIDB4MTU3ZiwKLQkweDBmN2YsIDB4MGU3ZiwgMHgwZDdmLCAweDAwN2MsIDB4NjAxMywgMHgwMTAwLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDA0MSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTY0NSwKLQkweDIwNjksIDB4YTg5MiwgMHgyZDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDEyMDAsIDB4MDBjMCwKLQkweDk2NzcsIDB4MjA2OSwgMHhhODgwLCAweDY4NmMsIDB4YTA4NCwgMHgwMGZmLCAweDAxN2UsIDB4NjExMCwKLQkweGExOGMsIDB4MDcwMCwgMHhhMTBkLCAweDYxMTIsIDB4MDE3ZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNDMsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwgMHgwMDc4LCAweDk2NDUsIDB4NjAxMywKLQkweDAyMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3OCwgMHg5NjQ1LCAweDYwMTMsIDB4MDMwMCwgMHgwMDc4LCAweDk2ODksIDB4NjAxMywKLQkweDAxMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgxMDc4LCAweDViZjgsIDB4MTA3OCwKLQkweDYxMDksIDB4MDA3OCwgMHg5NjQ1LCAweDYwMTMsIDB4MDUwMCwgMHgwMDc4LCAweDk2ODksIDB4NjAxMywKLQkweDA2MDAsIDB4MDA3OCwgMHg5NjU4LCAweDYwMTMsIDB4MDIwMCwgMHgwMDc4LCAweDk2NTgsIDB4YTE4NiwKLQkweDAwMTMsIDB4MDBjMCwgMHg5NmIxLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQwLCAweDEwNDgsIDB4MTMyOCwKLQkweGEwOGEsIDB4MDA1MywgMHgxMGM4LCAweDEzMjgsIDB4YTA4MiwgMHgwMDQwLCAweDIwMDgsIDB4MDA3OSwKLQkweDk3MjUsIDB4YTE4NiwgMHgwMDUxLCAweDAwNDAsIDB4OTZiZSwgMHhhMTg2LCAweDAwNDcsIDB4MDBjMCwKLQkweDk2ZDcsIDB4NjAwNCwgMHhhMDg2LCAweDAwNDEsIDB4MDA0MCwgMHg5NmU1LCAweDIwMDEsIDB4MDEwOSwKLQkweDIwMDQsIDB4ZDA4NCwgMHgwMDQwLCAweDk2ZTUsIDB4MTI3ZSwgMHgyMDkxLCAweDIyMDAsIDB4MDA3ZSwKLQkweDAxN2UsIDB4MDI3ZSwgMHgxMDc4LCAweDVhZDIsIDB4MDI3ZiwgMHgwMTdmLCAweDAwN2YsIDB4MTI3ZiwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4OTZlNSwgMHgwMDc4LCAweDk3NmEsIDB4YTE4NiwKLQkweDAwMjcsIDB4MDA0MCwgMHg5NmRmLCAweGExODYsIDB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4NjAwNCwKLQkweGEwODIsIDB4MDA0MCwgMHgyMDA4LCAweDAwNzksIDB4OTZlOCwgMHgxMDc4LCAweDc1ODMsIDB4MDA3YywKLQkweDk2ZmIsIDB4OTZmZCwgMHg5NmZkLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwKLQkweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDk2ZmIsIDB4OTZmYiwKLQkweDk2ZmIsIDB4OTZmYiwgMHg5NmZiLCAweDEwNzgsIDB4MTMyOCwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwKLQkweDYxMDksIDB4MDM3ZSwgMHgwZDdlLCAweDYwMTAsIDB4YTA2ZCwgMHgwMDQwLCAweDk3MjIsIDB4YWQ4NCwKLQkweGYwMDAsIDB4MDA0MCwgMHg5NzIyLCAweDYwMDMsIDB4MDAwMiwgMHg2MDE4LCAweDIwMDQsIDB4ZDBiYywKLQkweDAwYzAsIDB4OTcyMiwgMHgyMDE5LCAweDAwMDQsIDB4MTA3OCwgMHg5ZTcwLCAweDYwMTMsIDB4MDAwMCwKLQkweDYwMTQsIDB4YTAwNSwgMHgwMGMwLCAweDk3MjAsIDB4MjAwMSwgMHhhNWExLCAweDIwMDQsIDB4NjAxNiwKLQkweDYwMDMsIDB4MDAwNywgMHgwZDdmLCAweDAzN2YsIDB4MDA3YywgMHg5NzM4LCAweDk3NTcsIDB4OTc0MSwKLQkweDk3NjQsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwKLQkweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwgMHg5NzM4LCAweDk3MzgsIDB4OTczOCwKLQkweDEwNzgsIDB4MTMyOCwgMHg2MDEwLCAweGEwODgsIDB4MDAxMywgMHgyMTA0LCAweGEwODUsIDB4MDQwMCwKLQkweDIwMGEsIDB4MTA3OCwgMHg2MDEwLCAweDYwMTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4ZDBiNCwKLQkweDAwNDAsIDB4OTc1MiwgMHg2MDAzLCAweDAwMDcsIDB4MjAwOSwgMHgwMDQzLCAweDEwNzgsIDB4NzU2YywKLQkweDAwNzgsIDB4OTc1NCwgMHg2MDAzLCAweDAwMDIsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwKLQkweDYwMTAsIDB4MTA3OCwgMHhhMGM2LCAweDAwYzAsIDB4OTc2MSwgMHgxMDc4LCAweDVhNDEsIDB4MTA3OCwKLQkweDc1M2QsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4MTA3OCwgMHg2MDEwLCAweDIwMDksIDB4MDA0MSwKLQkweDAwNzgsIDB4OThjMSwgMHhhMTgyLCAweDAwNDAsIDB4MDA3OSwgMHg5NzZlLCAweDk3ODEsIDB4OTc4MywKLQkweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5Nzg0LCAweDk3ODEsIDB4OTc4MSwKLQkweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4MSwgMHg5NzgxLCAweDk3ODEsIDB4OTc4ZiwKLQkweDk3ODEsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2MsIDB4NjAwMywgMHgwMDA0LCAweDYxMTAsIDB4MjBlMSwKLQkweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDAwN2MsIDB4MGQ3ZSwKLQkweDEwNzgsIDB4NWE0MSwgMHgwZDdmLCAweDEwNzgsIDB4YTEzNCwgMHgxMDc4LCAweDc1M2QsIDB4MDA3YywKLQkweGExODIsIDB4MDA0MCwgMHgwMDc5LCAweDk3OWMsIDB4OTdhZiwgMHg5N2FmLCAweDk3YWYsIDB4OTdhZiwKLQkweDk3YWYsIDB4OTdhZiwgMHg5N2FmLCAweDk3YjEsIDB4OTdhZiwgMHg5N2I0LCAweDk3ZGYsIDB4OTdhZiwKLQkweDk3YWYsIDB4OTdhZiwgMHg5N2FmLCAweDk3ZGYsIDB4OTdhZiwgMHg5N2FmLCAweDk3YWYsIDB4MTA3OCwKLQkweDEzMjgsIDB4MTA3OCwgMHg3NTgzLCAweDAwN2MsIDB4MTA3OCwgMHg2MGI4LCAweDEwNzgsIDB4NjFkMywKLQkweDYwMTAsIDB4MGQ3ZSwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywgMHgwMDQwLCAweDk3Y2EsIDB4YTA4YywKLQkweDAwMDMsIDB4YTE4ZSwgMHgwMDAyLCAweDAwNDAsIDB4OTdkMiwgMHgyMDA5LCAweDAwNDEsIDB4MGQ3ZiwKLQkweDAwNzgsIDB4OThjMSwgMHg2MDAzLCAweDAwMDcsIDB4NjAxNywgMHgwMDAwLCAweDEwNzgsIDB4NWE0MSwKLQkweDBkN2YsIDB4MDA3YywgMHgxMDc4LCAweGEwYzYsIDB4MDA0MCwgMHg5N2Q4LCAweDBkN2YsIDB4MDA3YywKLQkweDEwNzgsIDB4NWE0MSwgMHgxMDc4LCAweDc1M2QsIDB4MGQ3ZiwgMHgwMDc4LCAweDk3ZDEsIDB4MDM3ZSwKLQkweDEwNzgsIDB4NjBiOCwgMHgxMDc4LCAweDYxZDMsIDB4NjAxMCwgMHgwZDdlLCAweDIwNjgsIDB4NjAxOCwKLQkweDIwMDQsIDB4ZDBiYywgMHgwMDQwLCAweDk3ZmYsIDB4Njg0YywgMHhhMDg0LCAweDAwMDMsIDB4YTA4NiwKLQkweDAwMDIsIDB4MDA0MCwgMHg5N2ZiLCAweDY4N2MsIDB4NjMyYywgMHhhMzFhLCAweDYzMmUsIDB4Njg4MCwKLQkweDYzMjgsIDB4YTMxYiwgMHg2MzJhLCAweDYwMDMsIDB4MDAwMiwgMHgwMDc4LCAweDk4MTAsIDB4MjAxOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg5ZTcwLCAweDYwMTQsIDB4YTAwNSwgMHgwMGMwLCAweDk4MGMsIDB4MjAwMSwKLQkweGE1YTEsIDB4MjAwNCwgMHg4MDAzLCAweDYwMTYsIDB4NjAxMywgMHgwMDAwLCAweDYwMDMsIDB4MDAwNywKLQkweDBkN2YsIDB4MDM3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweDk4MjEsIDB4NjAwNCwKLQkweGEwODYsIDB4MDA0MiwgMHgxMGMwLCAweDEzMjgsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4YTE4NiwgMHgwMDI3LCAweDAwNDAsIDB4OTgyOSwgMHhhMTg2LCAweDAwMTQsIDB4MDBjMCwKLQkweDk4MzksIDB4NjAwNCwgMHhhMDg2LCAweDAwNDIsIDB4MTBjMCwgMHgxMzI4LCAweDIwMDEsIDB4MDAwNywKLQkweDEwNzgsIDB4NDQ3MiwgMHgxMDc4LCAweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwKLQkweDAwN2MsIDB4YTE4MiwgMHgwMDQwLCAweDAwNzksIDB4OTgzZCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwKLQkweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MiwgMHg5ODVlLCAweDk4NTAsIDB4OTg1MCwKLQkweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwgMHg5ODUwLCAweDk4NTAsIDB4OTg1MCwKLQkweDEwNzgsIDB4MTMyOCwgMHgwMzdlLCAweDA0N2UsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwKLQkweDJjMTAsIDB4MTA3OCwgMHgxNWVjLCAweDA0N2YsIDB4MDM3ZiwgMHgwMDdjLCAweDYwMTAsIDB4MGQ3ZSwKLQkweDIwNjgsIDB4NjgxMCwgMHg2YTE0LCAweDYxMTgsIDB4MjEwYywgMHhkMWJjLCAweDAwNDAsIDB4OTg3ZCwKLQkweDYxMjQsIDB4ZDFmNCwgMHgwMGMwLCAweDk4N2QsIDB4MDA3ZSwgMHgwNDdlLCAweDA1N2UsIDB4NmM3YywKLQkweGE0MjIsIDB4NmQ4MCwgMHgyMjAwLCAweGE1MmIsIDB4NjAyYywgMHhhNDIwLCAweDY0MmUsIDB4NjAyOCwKLQkweGE1MjksIDB4NjUyYSwgMHgwNTdmLCAweDA0N2YsIDB4MDA3ZiwgMHhhMjBkLCAweDAwYzAsIDB4OTg5MSwKLQkweDY4NGMsIDB4ZDBmYywgMHgwMDQwLCAweDk4ODksIDB4MjAwOSwgMHgwMDQxLCAweDBkN2YsIDB4MDA3OCwKLQkweDk4YzEsIDB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwgMHgxMDc4LCAweDVhNDEsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MDA3ZSwgMHgwZjdlLCAweDJjNzgsIDB4MTA3OCwgMHg0ODkzLCAweDBmN2YsIDB4MDA3ZiwKLQkweDAwNDAsIDB4OTg5ZSwgMHg2MDAzLCAweDAwMDIsIDB4MGQ3ZiwgMHgwMDdjLCAweDIwMDksIDB4YTMwZCwKLQkweDIxMGMsIDB4ZDE5YywgMHgwMDQwLCAweDk4YTgsIDB4NjAwMywgMHgwMDA3LCAweDAwNzgsIDB4OThhYSwKLQkweDYwMDMsIDB4MDAwNiwgMHgxMDc4LCAweDk4YjAsIDB4MTA3OCwgMHg1YTQzLCAweDBkN2YsIDB4MDA3YywKLQkweGQyZmMsIDB4MDA0MCwgMHg5OGJjLCAweDgwMDIsIDB4ODAwMCwgMHg4MjEyLCAweGEyOTEsIDB4MDAwMCwKLQkweDIwMDksIDB4MDAwOSwgMHgwMDc4LCAweDk4YmUsIDB4MjAwOSwgMHgwMDE1LCAweDZhNmEsIDB4Njg2NiwKLQkweDAwN2MsIDB4YTE4MiwgMHgwMDQwLCAweDAwNDgsIDB4OThjNywgMHgwMDc5LCAweDk4ZDQsIDB4YTE4NiwKLQkweDAwMTMsIDB4MDA0MCwgMHg5OGNmLCAweGExODYsIDB4MDAxNCwgMHgxMGMwLCAweDEzMjgsIDB4NjAyNCwKLQkweGQwZGMsIDB4MTA0MCwgMHgxMzI4LCAweDAwN2MsIDB4OThlNywgMHg5OGVlLCAweDk4ZmEsIDB4OTkwNiwKLQkweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk5MTUsIDB4OThlNywgMHg5OGU5LCAweDk4ZTksIDB4OThlNywKLQkweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4OThlNywgMHg5OGU3LCAweDk4ZTcsIDB4MTA3OCwKLQkweDEzMjgsIDB4NjAyNCwgMHhkMGRjLCAweDEwNDAsIDB4MTMyOCwgMHgwMDdjLCAweDYwMDMsIDB4MDAwMSwKLQkweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4NjEwOSwKLQkweDEyN2YsIDB4MDA3YywgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgxMDc4LCAweDViZjgsIDB4MTI3ZSwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDYxMDksIDB4MTI3ZiwgMHgwMDdjLCAweDYwMDMsIDB4MDAwMywKLQkweDYxMDYsIDB4MmMxMCwgMHgxMDc4LCAweDFjYWIsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDVjNjQsIDB4MTA3OCwgMHg2MWQzLCAweDEyN2YsIDB4MDA3YywgMHhhMDE2LCAweDEwNzgsIDB4MTVlYywKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MDM3ZSwgMHgwZDdlLCAweGExODIsIDB4MDA0MCwKLQkweDEwNzksIDB4OTkyNiwgMHgwZDdmLCAweDAzN2YsIDB4MTI3ZiwgMHgwMDdjLCAweDk5MzYsIDB4OTkzOCwKLQkweDk5NGQsIDB4OTk2YywgMHg5OTM2LCAweDk5MzYsIDB4OTkzNiwgMHg5OTg0LCAweDk5MzYsIDB4OTkzNiwKLQkweDk5MzYsIDB4OTkzNiwgMHg5OTM2LCAweDk5MzYsIDB4OTkzNiwgMHg5OTM2LCAweDEwNzgsIDB4MTMyOCwKLQkweDYwMTAsIDB4MjA2OCwgMHg2ODRjLCAweGQwZmMsIDB4MDA0MCwgMHg5OTYyLCAweGEwOWMsIDB4MDAwMywKLQkweGEzOWUsIDB4MDAwMywgMHgwMDQwLCAweDk5NjIsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDAwNzgsIDB4OTk4NywgMHg2MDEwLCAweDIwNjgsIDB4Njg0YywKLQkweGQwZmMsIDB4MDA0MCwgMHg5OTYyLCAweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MDA0MCwKLQkweDk5NjIsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwKLQkweDAwNzgsIDB4OTk4NywgMHg2MDEzLCAweDAwMDAsIDB4NjAxNywgMHgwMDAwLCAweDIwMTksIDB4MDAwNCwKLQkweDEwNzgsIDB4OWU3MCwgMHgwMDc4LCAweDk5ODcsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywKLQkweDAwNDAsIDB4OTk2MiwgMHhhMDljLCAweDAwMDMsIDB4YTM5ZSwgMHgwMDAzLCAweDAwNDAsIDB4OTk2MiwKLQkweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsIDB4MTA3OCwgMHgxY2FiLCAweDEwNzgsIDB4NWM2NCwKLQkweDEwNzgsIDB4NjFkMywgMHgwMDc4LCAweDk5ODcsIDB4YTAxNiwgMHgxMDc4LCAweDE1ZWMsIDB4MDA3YywKLQkweDEwNzgsIDB4NjAxMCwgMHg2MTEwLCAweDgxZmYsIDB4MDA0MCwgMHg5OTk5LCAweDBkN2UsIDB4MjE2OCwKLQkweDEwNzgsIDB4YTE4MSwgMHgwMzdlLCAweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDllNzAsIDB4MDM3ZiwKLQkweDBkN2YsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDEwNzgsIDB4NjBiOCwKLQkweDYxMTAsIDB4ODFmZiwgMHgwMDQwLCAweDk5YWYsIDB4MGQ3ZSwgMHgyMTY4LCAweDEwNzgsIDB4YTE4MSwKLQkweDAzN2UsIDB4MjAxOSwgMHgwMDI5LCAweDEwNzgsIDB4OWU3MCwgMHgwMzdmLCAweDBkN2YsIDB4MTA3OCwKLQkweDhjMDEsIDB4MTA3OCwgMHg2MWQzLCAweDAwN2MsIDB4YTE4MiwgMHgwMDg1LCAweDAwNzksIDB4OTliOCwKLQkweDk5YzEsIDB4OTliZiwgMHg5OWJmLCAweDk5Y2QsIDB4OTliZiwgMHg5OWJmLCAweDk5YmYsIDB4MTA3OCwKLQkweDEzMjgsIDB4NjAwMywgMHgwMDBiLCAweDYxMDYsIDB4MTA3OCwgMHg1YmY4LCAweDEyN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MTA3OCwgMHg2MTA5LCAweDEyN2YsIDB4MDA3YywgMHgwMjdlLCAweDBlN2UsIDB4MTA3OCwKLQkweGEwYmYsIDB4MDA0MCwgMHg5OWQ3LCAweDEwNzgsIDB4NzUzZCwgMHgwMDc4LCAweDk5ZjMsIDB4MjA3MSwKLQkweGE4ODAsIDB4NzIyNCwgMHg2MjEyLCAweDcyMjAsIDB4MTA3OCwgMHg5ZDEwLCAweDAwNDAsIDB4OTllNCwKLQkweDYwMDcsIDB4MDA4NiwgMHgwMDc4LCAweDk5ZWQsIDB4NjAwNywgMHgwMDg3LCAweDcyMjQsIDB4YTI5NiwKLQkweGZmZmYsIDB4MDBjMCwgMHg5OWVkLCAweDYwMDcsIDB4MDA4NiwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwKLQkweDViZjgsIDB4MTA3OCwgMHg2MTA5LCAweDBlN2YsIDB4MDI3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywKLQkweDAwYzAsIDB4OWEwNywgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwgMHgxMDQ4LCAweDEzMjgsIDB4YTA4YSwKLQkweDAwOGMsIDB4MTBjOCwgMHgxMzI4LCAweGEwODIsIDB4MDA4NSwgMHgwMDc5LCAweDlhMWUsIDB4YTE4NiwKLQkweDAwMjcsIDB4MDA0MCwgMHg5YTEzLCAweGExODYsIDB4MDAxNCwgMHgwMDQwLCAweDlhMTMsIDB4MTA3OCwKLQkweDc1ODMsIDB4MDA3OCwgMHg5YTFkLCAweDIwMDEsIDB4MDAwNywgMHgxMDc4LCAweDQ0NzIsIDB4MTA3OCwKLQkweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDlhMjUsIDB4OWEyNywKLQkweDlhMjcsIDB4OWEyNSwgMHg5YTI1LCAweDlhMjUsIDB4OWEyNSwgMHgxMDc4LCAweDEzMjgsIDB4MTA3OCwKLQkweDYwMTAsIDB4MTA3OCwgMHg4YzAxLCAweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweGExODIsIDB4MDA4NSwKLQkweDEwNDgsIDB4MTMyOCwgMHhhMTgyLCAweDAwOGMsIDB4MTBjOCwgMHgxMzI4LCAweGExODIsIDB4MDA4NSwKLQkweDAwNzksIDB4OWEzYSwgMHg5YTQxLCAweDlhNDEsIDB4OWE0MSwgMHg5YTQzLCAweDlhNDEsIDB4OWE0MSwKLQkweDlhNDEsIDB4MTA3OCwgMHgxMzI4LCAweDAwN2MsIDB4YTE4NiwgMHgwMDEzLCAweDAwNDAsIDB4OWE1NCwKLQkweGExODYsIDB4MDAxNCwgMHgwMDQwLCAweDlhNTQsIDB4YTE4NiwgMHgwMDI3LCAweDAwNDAsIDB4OWE1NCwKLQkweDEwNzgsIDB4NzU4MywgMHgwMDc4LCAweDlhNWEsIDB4MTA3OCwgMHg2MDEwLCAweDEwNzgsIDB4OGMwMSwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMDdjLCAweDAzN2UsIDB4MTA3OCwgMHhhMTM0LCAweDYwM2YsIDB4MDAwMCwKLQkweDIwMTksIDB4MDAwYiwgMHgxMDc4LCAweDlhNmEsIDB4NjAxZiwgMHgwMDA2LCAweDYwMDMsIDB4MDAwNywKLQkweDAzN2YsIDB4MDA3YywgMHgxMjdlLCAweDAzN2UsIDB4MjA5MSwgMHg4MDAwLCAweDA4N2UsIDB4MmM0MCwKLQkweDA5N2UsIDB4MjA0OSwgMHgwMDAwLCAweDEwNzgsIDB4NzA1OCwgMHgwOTdmLCAweDA4N2YsIDB4MDBjMCwKLQkweDlhYTUsIDB4MDc3ZSwgMHgyYzM4LCAweDEwNzgsIDB4NzEwNSwgMHgwNzdmLCAweDAwYzAsIDB4OWFhNSwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4OWFhNSwgMHg2MDFjLCAweGEwODYsIDB4MDAwNywKLQkweDAwNDAsIDB4OWFhNSwgMHgwZDdlLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4OWE5NiwKLQkweDEwNzgsIDB4YTEzNCwgMHg2MDFmLCAweDAwMDcsIDB4MTA3OCwgMHgxNzQ5LCAweDYwMTAsIDB4MjA2OCwKLQkweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDlhOWUsIDB4MTA3OCwgMHg5ZTcwLCAweDBkN2YsIDB4NjAxMywKLQkweDAwMDAsIDB4MTA3OCwgMHhhMTM0LCAweDYwMWYsIDB4MDAwNywgMHgwMzdmLCAweDEyN2YsIDB4MDA3YywKLQkweDBmN2UsIDB4MGM3ZSwgMHgwMzdlLCAweDE1N2UsIDB4MjA3OSwgMHhhODgwLCAweDc5MzgsIDB4NzgzYywKLQkweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDlhZjYsIDB4MDE3ZSwgMHgwYzdlLCAweDEwNzgsIDB4NDUwMSwKLQkweDAwYzAsIDB4OWFmNiwgMHgyMDExLCAweGE4OTAsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwKLQkweDEwNzgsIDB4N2U1NSwgMHgwMGMwLCAweDlhZjYsIDB4MDE3ZiwgMHgwMjdmLCAweDAyN2UsIDB4MDE3ZSwKLQkweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDcxZTAsIDB4MTA3OCwgMHg1ZDUzLCAweDA3N2UsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHg1Yzc4LCAweDA3N2YsIDB4MDE3ZiwgMHgwNzdlLCAweDIwMzksIDB4MDAwMCwKLQkweDEwNzgsIDB4OWMzOCwgMHgwNzdmLCAweDEwNzgsIDB4NDcxYiwgMHgwMjdlLCAweDYyMDQsIDB4YTI5NCwKLQkweGZmMDAsIDB4ODIxNywgMHhhMjg2LCAweDAwMDYsIDB4MDA0MCwgMHg5YWVhLCAweGEyODYsIDB4MDAwNCwKLQkweDAwYzAsIDB4OWFlZCwgMHg2MmEwLCAweDEwNzgsIDB4MjhkNSwgMHgwMjdmLCAweDAxN2YsIDB4MTA3OCwKLQkweDQyMzUsIDB4NjYxMiwgMHg2NTE2LCAweGEwMDYsIDB4MDA3OCwgMHg5YWY4LCAweDBjN2YsIDB4MDE3ZiwKLQkweDE1N2YsIDB4MDM3ZiwgMHgwYzdmLCAweDBmN2YsIDB4MDA3YywgMHgwYzdlLCAweDBkN2UsIDB4MGU3ZSwKLQkweDAxN2UsIDB4MjAwOSwgMHhhMzFmLCAweDIxMDQsIDB4YTA4NiwgMHgwMDc0LCAweDAwYzAsIDB4OWI2MCwKLQkweDIwNjksIDB4YTg4ZSwgMHg2OTBjLCAweGExODIsIDB4MDEwMCwgMHgwMDQ4LCAweDliNTAsIDB4NjkwOCwKLQkweGExODQsIDB4ODAwMCwgMHgwMDQwLCAweDliNWMsIDB4NjAxOCwgMHgyMDcwLCAweDcwMTAsIDB4YTA4NCwKLQkweDAwZmYsIDB4MDA0MCwgMHg5YjFmLCAweDcwMDAsIDB4ZDBmNCwgMHgwMDQwLCAweDliMjMsIDB4YTE4NCwKLQkweDA4MDAsIDB4MDA0MCwgMHg5YjVjLCAweDY5MTAsIDB4YTE4YSwgMHgwMDAxLCAweDAwNDgsIDB4OWI1NCwKLQkweDY5MTQsIDB4MjA2OSwgMHhhOGFlLCAweDY5MDQsIDB4ODFmZiwgMHgwMGMwLCAweDliNDgsIDB4NjkwYywKLQkweGExODIsIDB4MDEwMCwgMHgwMDQ4LCAweDliNTAsIDB4NjkwOCwgMHg4MWZmLCAweDAwYzAsIDB4OWI0YywKLQkweDY5MTAsIDB4YTE4YSwgMHgwMDAxLCAweDAwNDgsIDB4OWI1NCwgMHg2OTE4LCAweGExOGEsIDB4MDAwMSwKLQkweDAwNDgsIDB4OWI1YywgMHgwMDc4LCAweDliNjYsIDB4NjAxMywgMHgwMTAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MDMwMCwgMHgwMDc4LCAweDliNjIsIDB4NjAxMywgMHgwNTAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MDcwMCwgMHgwMDc4LCAweDliNjIsIDB4NjAxMywgMHgwOTAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MGIwMCwgMHgwMDc4LCAweDliNjIsIDB4NjAxMywgMHgwZjAwLCAweDAwNzgsIDB4OWI2MiwKLQkweDYwMTMsIDB4MmQwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHg5YjY3LCAweGEwMDYsIDB4MDE3ZiwKLQkweDBlN2YsIDB4MGQ3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGM3ZSwgMHgwZDdlLCAweDAyN2UsIDB4MDM3ZSwKLQkweDE1N2UsIDB4NjIxOCwgMHgyMjY4LCAweDZiMDQsIDB4YTM5NCwgMHgwMGZmLCAweGEyODYsIDB4MDAwNiwKLQkweDAwNDAsIDB4OWI5MCwgMHhhMjg2LCAweDAwMDQsIDB4MDA0MCwgMHg5YjkwLCAweGEzOTQsIDB4ZmYwMCwKLQkweDgyMTcsIDB4YTI4NiwgMHgwMDA2LCAweDAwNDAsIDB4OWI5MCwgMHhhMjg2LCAweDAwMDQsIDB4MDA0MCwKLQkweDliOTAsIDB4MGM3ZSwgMHgyZDYwLCAweDEwNzgsIDB4NDUxMywgMHgwYzdmLCAweDAwNzgsIDB4OWJjYiwKLQkweDIwMTEsIDB4YTg5NiwgMHhhZDk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDEwNzgsIDB4N2U1NSwKLQkweDAwYzAsIDB4OWJjYywgMHgyMDExLCAweGE4OWEsIDB4YWQ5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwKLQkweDEwNzgsIDB4N2U1NSwgMHgwMGMwLCAweDliY2MsIDB4MDQ3ZSwgMHgwMTdlLCAweDZhYTAsIDB4YTI5NCwKLQkweDAwZmYsIDB4ODIyNywgMHhhMDA2LCAweDIwMDksIDB4YTM1MiwgMHgyMTBjLCAweGQxYTQsIDB4MDA0MCwKLQkweDliYjgsIDB4MjAwOSwgMHgwMDI5LCAweDEwNzgsIDB4OWVjMCwgMHg2ODAwLCAweGMwZTUsIDB4NjgwMiwKLQkweDIwMTksIDB4MDAyOSwgMHgxMDc4LCAweDVkNTMsIDB4MDc3ZSwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwKLQkweDVjNzgsIDB4MmMwOCwgMHgxMDc4LCAweDljMzgsIDB4MDc3ZiwgMHgyMDAxLCAweDAwMDcsIDB4MTA3OCwKLQkweDQ0NzIsIDB4MDE3ZiwgMHgwNDdmLCAweGEwMDYsIDB4MTU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MGQ3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHgwZDdlLCAweDIwNjksIDB4YTg4ZSwgMHg2ODAwLCAweGEwODYsIDB4MDgwMCwKLQkweDAwNDAsIDB4OWJkZSwgMHg2MDEzLCAweDAwMDAsIDB4MDA3OCwgMHg5YmRmLCAweGEwMDYsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHgwZjdlLCAweDAxN2UsIDB4MDI3ZSwgMHgwMzdlLCAweDE1N2UsIDB4MjA3OSwKLQkweGE4OGMsIDB4NzkzMCwgMHg3ODM0LCAweDEwNzgsIDB4MjRlMywgMHgwMGMwLCAweDljMDUsIDB4MTA3OCwKLQkweDQ1MDEsIDB4MDBjMCwgMHg5YzA1LCAweDIwMTEsIDB4YTg5MCwgMHhhYzk4LCAweDAwMGEsIDB4MjBhOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg3ZTU1LCAweDAwYzAsIDB4OWMwNSwgMHgyMDExLCAweGE4OTQsIDB4YWM5OCwKLQkweDAwMDYsIDB4MjBhOSwgMHgwMDA0LCAweDEwNzgsIDB4N2U1NSwgMHgxNTdmLCAweDAzN2YsIDB4MDI3ZiwKLQkweDAxN2YsIDB4MGY3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MGM3ZSwgMHgwMDdlLCAweDAxN2UsIDB4MDI3ZSwKLQkweDAzN2UsIDB4MTU3ZSwgMHgyMDExLCAweGE4ODMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MTA3OCwKLQkweDI0ZTMsIDB4MDBjMCwgMHg5YzMxLCAweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDljMzEsIDB4MjAxMSwKLQkweGE4OTYsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgxMDc4LCAweDdlNTUsIDB4MDBjMCwKLQkweDljMzEsIDB4MjAxMSwgMHhhODlhLCAweGFjOTgsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MTA3OCwKLQkweDdlNTUsIDB4MTU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwgMHgwMDdmLCAweDBjN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MGM3ZSwgMHgwODdlLCAweDA3N2UsIDB4MDY3ZSwgMHgwNTdlLCAweDA0N2UsIDB4MDI3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDI3NDAsIDB4MjAyOSwgMHhhNWI0LCAweDI1MmMsIDB4MjAyMSwKLQkweGE1YmEsIDB4MjQyNCwgMHgyMDYxLCAweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDc2NDQsIDB4NzA2MCwKLQkweDgxZmYsIDB4MDA0MCwgMHg5YzU5LCAweDgwMDEsIDB4YTYwMiwgMHgwMGM4LCAweDljYzMsIDB4MDA3OCwKLQkweDljNWMsIDB4YTYwNiwgMHgwMDQwLCAweDljYzMsIDB4MjEwMCwgMHhhYzA2LCAweDAwNDAsIDB4OWNiOSwKLQkweDEwNzgsIDB4OWVlNSwgMHgwMDQwLCAweDljYjksIDB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDA0MCwKLQkweDljZGUsIDB4YTc4NiwgMHgwMDA0LCAweDAwNDAsIDB4OWNkZSwgMHhhNzg2LCAweDAwMDcsIDB4MDA0MCwKLQkweDljYjksIDB4MjUwMCwgMHhhYzA2LCAweDAwNDAsIDB4OWNiOSwgMHgyNDAwLCAweGFjMDYsIDB4MDA0MCwKLQkweDljYjksIDB4MTA3OCwgMHg5ZWY5LCAweDAwYzAsIDB4OWNiOSwgMHg4OGZmLCAweDAwNDAsIDB4OWM4NCwKLQkweDYwMjAsIDB4YTkwNiwgMHgwMGMwLCAweDljYjksIDB4MGQ3ZSwgMHg2MDAwLCAweGEwODYsIDB4MDAwNCwKLQkweDAwYzAsIDB4OWM4ZSwgMHgwMTdlLCAweDEwNzgsIDB4MTc0OSwgMHgwMTdmLCAweGE3ODYsIDB4MDAwOCwKLQkweDAwYzAsIDB4OWM5ZCwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHg5YzlkLCAweDEwNzgsIDB4N2EwNSwKLQkweDBkN2YsIDB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4OWNiOSwgMHg2MDEwLCAweDIwNjgsIDB4MTA3OCwKLQkweDhhNDQsIDB4MDA0MCwgMHg5Y2I2LCAweGE3ODYsIDB4MDAwMywgMHgwMGMwLCAweDljY2QsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MTA3OCwgMHhhMTgxLCAweDAxN2UsIDB4MTA3OCwKLQkweDhjYjgsIDB4MTA3OCwgMHg0OTgyLCAweDAxN2YsIDB4MTA3OCwgMHg4YmY0LCAweDBkN2YsIDB4MTA3OCwKLQkweDhjMDEsIDB4YWNlMCwgMHgwMDEwLCAweDIwMDEsIDB4YTMxNSwgMHgyMDA0LCAweGFjMDIsIDB4MDBjOCwKLQkweDljYzMsIDB4MDA3OCwgMHg5YzRjLCAweDEyN2YsIDB4MDI3ZiwgMHgwNDdmLCAweDA1N2YsIDB4MDY3ZiwKLQkweDA3N2YsIDB4MDg3ZiwgMHgwYzdmLCAweDBlN2YsIDB4MDA3YywgMHhhNzg2LCAweDAwMDYsIDB4MDBjMCwKLQkweDljYTcsIDB4YTM4NiwgMHgwMDA1LCAweDAwNDAsIDB4OWNkYiwgMHgxMDc4LCAweGExODEsIDB4MTA3OCwKLQkweDllNzAsIDB4MDA3OCwgMHg5Y2I2LCAweDBkN2YsIDB4MDA3OCwgMHg5Y2I5LCAweDEwNzgsIDB4OWVmOSwKLQkweDAwYzAsIDB4OWNiOSwgMHg4MWZmLCAweDAwNDAsIDB4OWNiOSwgMHhhMTgwLCAweDAwMDEsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAxOCwgMHgwMDQwLCAweDljZjMsIDB4YTE4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4NiwKLQkweDAwMmQsIDB4MDBjMCwgMHg5Y2I5LCAweDYwMDAsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4OWNiOSwKLQkweDEwNzgsIDB4OGMyNywgMHgwMDQwLCAweDlkMDQsIDB4MTA3OCwgMHg4YzNiLCAweDAwYzAsIDB4OWNiOSwKLQkweDEwNzgsIDB4N2EwNSwgMHgwMDc4LCAweDlkMGMsIDB4MTA3OCwgMHgyODM5LCAweDEwNzgsIDB4OGMzYiwKLQkweDAwYzAsIDB4OWQwYywgMHgxMDc4LCAweDdhMDUsIDB4MTA3OCwgMHg4YzAxLCAweDAwNzgsIDB4OWNiOSwKLQkweDBjN2UsIDB4MGU3ZSwgMHgwMTdlLCAweDJjMDgsIDB4MjE3MCwgMHgxMDc4LCAweDllOGMsIDB4MDE3ZiwKLQkweDAwNDAsIDB4OWQxZiwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgxMDc5LCAweDlkMjIsIDB4MGU3ZiwKLQkweDBjN2YsIDB4MDA3YywgMHg5ZDJhLCAweDlkMmEsIDB4OWQyYSwgMHg5ZDJhLCAweDlkMmEsIDB4OWQyYSwKLQkweDlkMmMsIDB4OWQyYSwgMHhhMDA2LCAweDAwN2MsIDB4MDQ3ZSwgMHgwMTdlLCAweDcwMTgsIDB4YTA4MCwKLQkweDAwMjgsIDB4MjAyNCwgMHhhNGE0LCAweDAwZmYsIDB4ODQyNywgMHgyYzAwLCAweDIwMDksIDB4MDAyMCwKLQkweDEwNzgsIDB4OWVjMCwgMHgwMTdmLCAweDA0N2YsIDB4MDM3ZSwgMHgyMDE5LCAweDAwMDIsIDB4MTA3OCwKLQkweDlhNmEsIDB4MDM3ZiwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgyMDAxLCAweDAwMDEsIDB4MTA3OCwKLQkweDQ0MmIsIDB4MTU3ZSwgMHgwMTdlLCAweDAyN2UsIDB4MDM3ZSwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweGEzMDUsIDB4MjAxMSwgMHhhODk2LCAweDEwNzgsIDB4N2U1NSwgMHgwMzdmLCAweDAyN2YsIDB4MDE3ZiwKLQkweDE1N2YsIDB4YTAwNSwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwgMHgwYzdlLCAweDA4N2UsIDB4MDc3ZSwKLQkweDA2N2UsIDB4MDI3ZSwgMHgxMjdlLCAweDIwOTEsIDB4ODAwMCwgMHgyNzQwLCAweDIwNjEsIDB4YWEwMCwKLQkweDIwNzksIDB4MDAwMSwgMHg4ZmZmLCAweDAwNDAsIDB4OWRjMywgMHgyMDcxLCAweGEzMDAsIDB4NzY0NCwKLQkweDcwNjAsIDB4ODAwMSwgMHhhNjAyLCAweDAwYzgsIDB4OWRjMywgMHg4OGZmLCAweDAwNDAsIDB4OWQ3ZSwKLQkweDI4MDAsIDB4YWMwNiwgMHgwMGMwLCAweDlkYjksIDB4MjA3OSwgMHgwMDAwLCAweDEwNzgsIDB4OWVlNSwKLQkweDAwNDAsIDB4OWRiOSwgMHgyNDAwLCAweGFjMDYsIDB4MDA0MCwgMHg5ZGI5LCAweDY3MWMsIDB4YTc4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg5ZGI5LCAweGE3ODYsIDB4MDAwNywgMHgwMDQwLCAweDlkYjksIDB4ODhmZiwKLQkweDAwYzAsIDB4OWQ5ZCwgMHg2MDE4LCAweGEyMDYsIDB4MDBjMCwgMHg5ZGI5LCAweDg1ZmYsIDB4MDA0MCwKLQkweDlkOWQsIDB4NjAyMCwgMHhhMTA2LCAweDAwYzAsIDB4OWRiOSwgMHgwZDdlLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDQsIDB4MDBjMCwgMHg5ZGE5LCAweDEwNzgsIDB4YTEzNCwgMHg2MDFmLCAweDAwMDcsIDB4MTA3OCwKLQkweDE3NDksIDB4NjAxMCwgMHgyMDY4LCAweDEwNzgsIDB4OGE0NCwgMHgwMDQwLCAweDlkYjMsIDB4MDQ3ZSwKLQkweDEwNzgsIDB4OWU3MCwgMHgwNDdmLCAweDBkN2YsIDB4MTA3OCwgMHg4YzAxLCAweDg4ZmYsIDB4MDBjMCwKLQkweDlkY2QsIDB4YWNlMCwgMHgwMDEwLCAweDIwMDEsIDB4YTMxNSwgMHgyMDA0LCAweGFjMDIsIDB4MDBjOCwKLQkweDlkYzMsIDB4MDA3OCwgMHg5ZDZhLCAweGEwMDYsIDB4MTI3ZiwgMHgwMjdmLCAweDA2N2YsIDB4MDc3ZiwKLQkweDA4N2YsIDB4MGM3ZiwgMHgwZTdmLCAweDBmN2YsIDB4MDA3YywgMHhhOGM1LCAweDAwMDEsIDB4MDA3OCwKLQkweDlkYzQsIDB4MDc3ZSwgMHgwNTdlLCAweDA4N2UsIDB4MjA0MSwgMHgwMDAwLCAweDIwMjksIDB4MDAwMSwKLQkweDJjMjAsIDB4MjAxOSwgMHgwMDAyLCAweDYyMTgsIDB4MDk3ZSwgMHgyMDQ5LCAweDAwMDAsIDB4MTA3OCwKLQkweDcwNTgsIDB4MDk3ZiwgMHgwODdmLCAweDIwMzksIDB4MDAwMCwgMHgxMDc4LCAweDcxMDUsIDB4MTA3OCwKLQkweDlkNWIsIDB4MDU3ZiwgMHgwNzdmLCAweDAwN2MsIDB4MDI3ZSwgMHgwNDdlLCAweDA1N2UsIDB4MDc3ZSwKLQkweDBjN2UsIDB4MTU3ZSwgMHgyYzIwLCAweDIxMjgsIDB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwKLQkweDAxN2UsIDB4MDM3ZSwgMHgxMDc4LCAweDQ1MDEsIDB4MDBjMCwgMHg5ZTE0LCAweDJjMTAsIDB4MDU3ZSwKLQkweDA4N2UsIDB4MjA0MSwgMHgwMDAwLCAweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDA5N2UsIDB4MjA0OSwKLQkweDAwMDAsIDB4MTA3OCwgMHg3MDU4LCAweDA5N2YsIDB4MDg3ZiwgMHgyMDM5LCAweDAwMDAsIDB4MTA3OCwKLQkweDcxMDUsIDB4MTA3OCwgMHg5ZDViLCAweDA1N2YsIDB4MDM3ZiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwKLQkweDlkZjgsIDB4MTU3ZiwgMHgwYzdmLCAweDA3N2YsIDB4MDU3ZiwgMHgwNDdmLCAweDAyN2YsIDB4MDA3YywKLQkweDA3N2UsIDB4MDU3ZSwgMHg2MjE4LCAweDA4N2UsIDB4MjA0MSwgMHgwMDAwLCAweDIwMjksIDB4MDAwMSwKLQkweDIwMTksIDB4MDA0OCwgMHgwOTdlLCAweDIwNDksIDB4MDAwMCwgMHgxMDc4LCAweDcwNTgsIDB4MDk3ZiwKLQkweDA4N2YsIDB4MjAzOSwgMHgwMDAwLCAweDEwNzgsIDB4NzEwNSwgMHgyYzIwLCAweDEwNzgsIDB4OWQ1YiwKLQkweDA1N2YsIDB4MDc3ZiwgMHgwMDdjLCAweDAyN2UsIDB4MDQ3ZSwgMHgwNTdlLCAweDA3N2UsIDB4MGM3ZSwKLQkweDE1N2UsIDB4MmMyMCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAxN2UsIDB4MDM3ZSwKLQkweDEwNzgsIDB4NDUwMSwgMHgwMGMwLCAweDllNjQsIDB4MmMxMCwgMHgwODdlLCAweDIwNDEsIDB4MDAwMCwKLQkweDI4MjgsIDB4MDQ3ZSwgMHgyMDIxLCAweDAwMDEsIDB4MTA3OCwgMHhhMTExLCAweDA0N2YsIDB4MDk3ZSwKLQkweDIwNDksIDB4MDAwMCwgMHgxMDc4LCAweDcwNTgsIDB4MDk3ZiwgMHgwODdmLCAweDIwMzksIDB4MDAwMCwKLQkweDEwNzgsIDB4NzEwNSwgMHgxMDc4LCAweDlkNWIsIDB4MDM3ZiwgMHgwMTdmLCAweDgxMDgsIDB4MDBmMCwKLQkweDllNDYsIDB4MTU3ZiwgMHgwYzdmLCAweDA3N2YsIDB4MDU3ZiwgMHgwNDdmLCAweDAyN2YsIDB4MDA3YywKLQkweDAxN2UsIDB4MGY3ZSwgMHhhZDgyLCAweGNhMDAsIDB4MDA0OCwgMHg5ZTg5LCAweGFkODIsIDB4ZmZmZiwKLQkweDAwYzgsIDB4OWU4OSwgMHg2ODAwLCAweGEwN2QsIDB4MDA0MCwgMHg5ZTg2LCAweDY4MDMsIDB4MDAwMCwKLQkweDZiNTIsIDB4MTA3OCwgMHg0OTgyLCAweDJmNjgsIDB4MDA3OCwgMHg5ZTdhLCAweDZiNTIsIDB4MTA3OCwKLQkweDQ5ODIsIDB4MGY3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGU3ZSwgMHgwNDdlLCAweDAzN2UsIDB4MjA2MSwKLQkweGFhMDAsIDB4MjA3MSwgMHhhMzAwLCAweDc0NDQsIDB4NzA2MCwgMHg4MDAxLCAweGE0MDIsIDB4MDBjOCwKLQkweDllYmIsIDB4MjEwMCwgMHhhYzA2LCAweDAwNDAsIDB4OWVhZCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4OWVhZCwgMHg2MDA4LCAweGEyMDYsIDB4MDBjMCwgMHg5ZWFkLCAweDYwMTgsIDB4YTFhMCwKLQkweDAwMDYsIDB4MjQyNCwgMHhhNDA2LCAweDAwNDAsIDB4OWViNywgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwKLQkweGEzMTUsIDB4MjAwNCwgMHhhYzAyLCAweDAwYzgsIDB4OWViYiwgMHgwMDc4LCAweDllOTEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA3OCwgMHg5ZWJjLCAweGEwMDYsIDB4MDM3ZiwgMHgwNDdmLCAweDBlN2YsIDB4MDA3YywKLQkweDBkN2UsIDB4MDA3ZSwgMHgxMDc4LCAweDEzODEsIDB4MDA3ZiwgMHgxMDQwLCAweDEzMjgsIDB4NjgzNywKLQkweDAxMGQsIDB4Njg1ZSwgMHgwMjdlLCAweDIwMTAsIDB4MTA3OCwgMHg4YTMwLCAweDIwMDEsIDB4MDAwMCwKLQkweDAwNDAsIDB4OWVkNiwgMHgyMjAwLCAweGEwODAsIDB4MDAwOCwgMHgyMDA0LCAweDAyN2YsIDB4Njg0YSwKLQkweDY5NTYsIDB4NmM0NiwgMHg2ODRmLCAweDAwMDAsIDB4YTAwNiwgMHg2OGIyLCAweDY4MDIsIDB4NjgzYSwKLQkweDY4NWEsIDB4MTA3OCwgMHg0OTgyLCAweDBkN2YsIDB4MDA3YywgMHg2NzAwLCAweGE3ODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4OWVmOCwgMHhhNzg2LCAweDAwMDEsIDB4MDA0MCwgMHg5ZWY4LCAweGE3ODYsIDB4MDAwYSwKLQkweDAwNDAsIDB4OWVmOCwgMHhhNzg2LCAweDAwMDksIDB4MDA0MCwgMHg5ZWY4LCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4MGU3ZSwgMHg2MDE4LCAweDIwNzAsIDB4NzBhMCwgMHhhMjA2LCAweDBlN2YsIDB4MDA3YywKLQkweDAxN2UsIDB4NjAwNCwgMHhhMDhlLCAweDAwMWUsIDB4MDBjMCwgMHg5ZjFhLCAweDgwMDcsIDB4NjEzMCwKLQkweGExOGMsIDB4MDBmZiwgMHhhMTA1LCAweDYwMzIsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwKLQkweDYwMWYsIDB4MDAwNSwgMHgyMDAxLCAweGE1YTEsIDB4MjAwNCwgMHg2MDE2LCAweDEwNzgsIDB4NWJmOCwKLQkweDEwNzgsIDB4NjEwOSwgMHgwMTdmLCAweDAwN2MsIDB4MDAwNSwgMHgwMDA1LCAweDAwN2MsIDB4NjAyNCwKLQkweGQwZTQsIDB4MDA0MCwgMHg5ZjMwLCAweGQwY2MsIDB4MDA0MCwgMHg5ZjJhLCAweDEwNzgsIDB4OGNmYSwKLQkweDAwNzgsIDB4OWYzMCwgMHgxMDc4LCAweGExMzQsIDB4MTA3OCwgMHg1YTQxLCAweDEwNzgsIDB4NzUzZCwKLQkweDAwN2MsIDB4YTI4MCwgMHgwMDA3LCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweDAwNzksIDB4OWYzOCwKLQkweDlmNDEsIDB4OWY0MSwgMHg5ZjQxLCAweDlmNDMsIDB4OWY0MSwgMHg5ZjQzLCAweDlmNDMsIDB4OWY0MSwKLQkweDlmNDMsIDB4YTAwNiwgMHgwMDdjLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweGEyODAsIDB4MDAwNywKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweDAwNzksIDB4OWY0ZCwgMHg5ZjU2LCAweDlmNTYsIDB4OWY1NiwKLQkweDlmNTYsIDB4OWY1NiwgMHg5ZjU2LCAweDlmNjEsIDB4OWY1NiwgMHg5ZjU2LCAweDYwMDcsIDB4MDAzYiwKLQkweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDJhMDAsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwKLQkweDAwN2MsIDB4MGM3ZSwgMHgyMjYwLCAweDEwNzgsIDB4YTEzNCwgMHg2MDNmLCAweDAwMDAsIDB4NjAyNCwKLQkweGMwZjQsIDB4YzBjYywgMHg2MDI2LCAweDBjN2YsIDB4MGQ3ZSwgMHgyMjY4LCAweGExODYsIDB4MDAwNywKLQkweDAwYzAsIDB4OWZjMiwgMHg2ODEwLCAweGEwMDUsIDB4MDA0MCwgMHg5ZjdmLCAweGEwODAsIDB4MDAxMywKLQkweDIwMDQsIDB4ZDBmYywgMHgwMGMwLCAweDlmN2YsIDB4MGQ3ZiwgMHgwMDc4LCAweDlmNTYsIDB4NjAwNywKLQkweDAwM2EsIDB4NjAwMywgMHgwMDAxLCAweDEwNzgsIDB4NWJmOCwgMHgxMDc4LCAweDYxMDksIDB4MGM3ZSwKLQkweDJkNjAsIDB4NjEwMCwgMHhhMTg2LCAweDAwMDIsIDB4MDBjMCwgMHhhMDUwLCAweDYwMTAsIDB4YTAwNSwKLQkweDAwYzAsIDB4OWY5OSwgMHg2MDAwLCAweGEwODYsIDB4MDAwNywgMHgxMGMwLCAweDEzMjgsIDB4MDA3OCwKLQkweGEwNTAsIDB4YTA4YywgMHhmMDAwLCAweDAwYzAsIDB4OWZhNSwgMHgwMDc4LCAweDlmYTUsIDB4MjA2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgwMGMwLCAweDlmOWYsIDB4MmQwMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHg5ZmJlLCAweDYwMTAsIDB4MjA2OCwKLQkweDY4NGMsIDB4YzBkYywgMHhjMGY0LCAweDY4NGUsIDB4Njg1MCwgMHhjMGY0LCAweGMwZmMsIDB4Njg1MiwKLQkweDIwMDksIDB4MDA0MywgMHgxMDc4LCAweDk4YzEsIDB4MDA3OCwgMHhhMDUwLCAweDIwMDksIDB4MDA0MSwKLQkweDAwNzgsIDB4YTA0YSwgMHhhMTg2LCAweDAwMDUsIDB4MDBjMCwgMHhhMDA5LCAweDY4MTAsIDB4YTA4MCwKLQkweDAwMTMsIDB4MjAwNCwgMHhkMGJjLCAweDAwYzAsIDB4OWZkMCwgMHgwZDdmLCAweDAwNzgsIDB4OWY1NiwKLQkweGQwYjQsIDB4MDA0MCwgMHg5ZmQ4LCAweGQwZmMsIDB4MTA0MCwgMHgxMzI4LCAweDAwNzgsIDB4OWY3MiwKLQkweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MTA3OCwgMHg1YmY4LCAweDEwNzgsIDB4NjEwOSwKLQkweDBjN2UsIDB4MmQ2MCwgMHg2MTAwLCAweGExODYsIDB4MDAwMiwgMHgwMDQwLCAweDlmZWIsIDB4YTE4NiwKLQkweDAwMDQsIDB4MDBjMCwgMHhhMDUwLCAweDIwNzEsIDB4YTVlMSwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywKLQkweDAwYzAsIDB4OWZmOCwgMHg3MDA0LCAweGFjMDYsIDB4MDBjMCwgMHg5ZmY4LCAweDcwMDMsIDB4MDAwMCwKLQkweDY4MTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMGMsIDB4YzFmNCwgMHhjMWRjLCAweDIxMDIsIDB4ODAwMCwKLQkweDIwMGMsIDB4YzFmNCwgMHhjMWZjLCAweGMxYmMsIDB4MjEwMiwgMHgyMDA5LCAweDAwNDIsIDB4MDA3OCwKLQkweGEwNGEsIDB4MDM3ZSwgMHgwZDdlLCAweDBkN2UsIDB4MTA3OCwgMHgxMzgxLCAweDAzN2YsIDB4MTA0MCwKLQkweDEzMjgsIDB4NjgzNywgMHgwMTBkLCAweDY4MDMsIDB4MDAwMCwgMHg2ODNiLCAweDAwMDAsIDB4Njg1YiwKLQkweDAwMDAsIDB4NmI1ZSwgMHg2ODU3LCAweDAwNDUsIDB4MmMwMCwgMHg2ODYyLCAweDYwMzQsIDB4Njg3MiwKLQkweDIzNjAsIDB4NjAyNCwgMHhjMGRkLCAweDYwMjYsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDYzMjAsIDB4NmI0YSwgMHg2ODQ2LCAweDY4NGYsIDB4MDAwMCwKLQkweDZkNmEsIDB4NmU2NiwgMHg2ODZmLCAweDAwMDEsIDB4MTA3OCwgMHg0OTgyLCAweDIwMTksIDB4MDA0NSwKLQkweDYwMDgsIDB4MjA2OCwgMHgxMDc4LCAweDlhNmEsIDB4MmQwMCwgMHg2MDBhLCAweDYwMWYsIDB4MDAwNiwKLQkweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4NjAzZiwgMHgwMDAwLCAweDBkN2YsIDB4MDM3ZiwKLQkweDAwNzgsIDB4YTA1MSwgMHg2MDNmLCAweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDEwNzgsIDB4OThjMSwKLQkweDBjN2YsIDB4MGQ3ZiwgMHgwMDdjLCAweGExODYsIDB4MDAxMywgMHgwMGMwLCAweGEwNWQsIDB4NjAwNCwKLQkweGEwODIsIDB4MDA4NSwgMHgyMDA4LCAweDAwNzksIDB4YTA3NywgMHhhMTg2LCAweDAwMjcsIDB4MDBjMCwKLQkweGEwNzAsIDB4MTA3OCwgMHg2MDEwLCAweDAzN2UsIDB4MGQ3ZSwgMHg2MDEwLCAweDIwNjgsIDB4MjAxOSwKLQkweDAwMDQsIDB4MTA3OCwgMHg5ZTcwLCAweDBkN2YsIDB4MDM3ZiwgMHgxMDc4LCAweDYxMDksIDB4MDA3YywKLQkweGExODYsIDB4MDAxNCwgMHgwMDQwLCAweGEwNjEsIDB4MTA3OCwgMHg3NTgzLCAweDAwN2MsIDB4YTA4MCwKLQkweGEwN2UsIDB4YTA3ZSwgMHhhMDdlLCAweGEwN2UsIDB4YTA3ZSwgMHhhMDgwLCAweDEwNzgsIDB4MTMyOCwKLQkweDEwNzgsIDB4NjAxMCwgMHg2MDAzLCAweDAwMGMsIDB4MTA3OCwgMHg2MTA5LCAweDAwN2MsIDB4YTE4MiwKLQkweDAwOGMsIDB4MDBjOCwgMHhhMDkxLCAweGExODIsIDB4MDA4NSwgMHgwMDQ4LCAweGEwOTEsIDB4MDA3OSwKLQkweGEwOTQsIDB4MTA3OCwgMHg3NTgzLCAweDAwN2MsIDB4YTA5YiwgMHhhMDliLCAweGEwOWIsIDB4YTA5YiwKLQkweGEwOWQsIDB4YTBiYywgMHhhMDliLCAweDEwNzgsIDB4MTMyOCwgMHgwZDdlLCAweDJjNjgsIDB4MTA3OCwKLQkweDc0ZDcsIDB4MDA0MCwgMHhhMGI3LCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4MjAwOSwKLQkweGE4OGUsIDB4MjEwYywgMHg2MTM2LCAweDIwMDksIDB4YTg4ZiwgMHgyMTBjLCAweDYxM2EsIDB4NjAwYiwKLQkweGZmZmYsIDB4NjkxOCwgMHg2MTFhLCAweDYwMWYsIDB4MDAwNCwgMHgxMDc4LCAweDViZjgsIDB4MmQ2MCwKLQkweDEwNzgsIDB4NzUzZCwgMHgwZDdmLCAweDAwN2MsIDB4MTA3OCwgMHg3NTNkLCAweDAwN2MsIDB4MGU3ZSwKLQkweDYwMTgsIDB4MjA3MCwgMHg3MDAwLCAweGQwZWMsIDB4MGU3ZiwgMHgwMDdjLCAweDYwMTAsIDB4YTA4MCwKLQkweDAwMTMsIDB4MjAwYywgMHhkMWVjLCAweDAwNDAsIDB4YTExMCwgMHgyMDAxLCAweGEzNzEsIDB4MjAwNCwKLQkweGQwZWMsIDB4MDA0MCwgMHhhMTEwLCAweDYwMDMsIDB4MDAwMiwgMHg2MDI0LCAweGMwZTUsIDB4NjAyNiwKLQkweGQxYWMsIDB4MDA0MCwgMHhhMGVlLCAweDBmN2UsIDB4MmM3OCwgMHgxMDc4LCAweDQ4OGYsIDB4MGY3ZiwKLQkweDAwNDAsIDB4YTBlZSwgMHgyMDAxLCAweGE1YTIsIDB4MjAwNCwgMHg2MDNlLCAweDIwMDksIDB4YTM3MSwKLQkweDIxMGMsIDB4ZDFmNCwgMHgwMGMwLCAweGExMGUsIDB4MDA3OCwgMHhhMTAwLCAweDIwMDksIDB4YTM3MSwKLQkweDIxMGMsIDB4ZDFmNCwgMHgwMDQwLCAweGEwZmEsIDB4NjAyNCwgMHhjMGU0LCAweDYwMjYsIDB4YTAwNiwKLQkweDAwNzgsIDB4YTExMCwgMHgyMDAxLCAweGE1YTIsIDB4MjAwYywgMHg4MTAzLCAweGExMDAsIDB4NjAzZSwKLQkweDYwMTgsIDB4YTA4OCwgMHgwMDJiLCAweDIxMDQsIDB4YTAwNSwgMHgwMDQwLCAweGExMGIsIDB4YTA4OCwKLQkweDAwMDMsIDB4MDA3OCwgMHhhMTAzLCAweDJjMGEsIDB4NjAwZiwgMHgwMDAwLCAweGEwODUsIDB4MDAwMSwKLQkweDAwN2MsIDB4MDE3ZSwgMHgwYzdlLCAweDBlN2UsIDB4NjEyMCwgMHhhMmYwLCAweDAwMmIsIDB4MmUwNCwKLQkweDIwNjAsIDB4OGNmZiwgMHgwMDQwLCAweGExMzAsIDB4ODRmZiwgMHgwMGMwLCAweGExMjMsIDB4NjAyMCwKLQkweGExMDYsIDB4MDBjMCwgMHhhMTJiLCAweDYwMGMsIDB4MjA3MiwgMHgxMDc4LCAweDVhNDEsIDB4MTA3OCwKLQkweDc1M2QsIDB4MDA3OCwgMHhhMTJkLCAweGFjZjAsIDB4MDAwMywgMHgyZTY0LCAweDAwNzgsIDB4YTExOSwKLQkweDBlN2YsIDB4MGM3ZiwgMHgwMTdmLCAweDAwN2MsIDB4MGQ3ZSwgMHg2MDE4LCAweGEwZTgsIDB4MDAyYiwKLQkweDJkMDQsIDB4YTAwNSwgMHgwMDQwLCAweGExNDYsIDB4YWMwNiwgMHgwMDQwLCAweGExNDQsIDB4MmQwNCwKLQkweGEwZTgsIDB4MDAwMywgMHgwMDc4LCAweGExMzgsIDB4NjAwYywgMHgyMDZhLCAweDBkN2YsIDB4MDA3YywKLQkweDAyN2UsIDB4MDM3ZSwgMHgxNTdlLCAweDIwMTEsIDB4YTMyNSwgMHgyMjA0LCAweGEwODQsIDB4MDBmZiwKLQkweDIwMTksIDB4YTg4ZSwgMHgyMzM0LCAweGE2MzYsIDB4MDBjMCwgMHhhMTc0LCAweDgzMTgsIDB4MjMzNCwKLQkweDIyMDQsIDB4YTA4NCwgMHhmZjAwLCAweGE2MzYsIDB4MDBjMCwgMHhhMTc0LCAweDIwMTEsIDB4YTg5MCwKLQkweDYwMTgsIDB4YTA5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgxMDc4LCAweDdlNTUsIDB4MDBjMCwKLQkweGExNzQsIDB4MjAxMSwgMHhhODk0LCAweDYwMTgsIDB4YTA5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwKLQkweDEwNzgsIDB4N2U1NSwgMHgwMGMwLCAweGExNzQsIDB4MTU3ZiwgMHgwMzdmLCAweDAyN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MjA3MSwgMHhhMzAwLCAweDEwNzgsIDB4NDFmNSwgMHgxMDc4LCAweDI2MGQsIDB4MGU3ZiwKLQkweDAwN2MsIDB4MGU3ZSwgMHg2MDE4LCAweDIwNzAsIDB4NzAwMCwgMHhkMGZjLCAweDAwNDAsIDB4YTE4YSwKLQkweDEwNzgsIDB4YTE4YywgMHgwZTdmLCAweDAwN2MsIDB4Njg1MCwgMHhjMGU1LCAweDY4NTIsIDB4MDA3YywKLQkweDBlN2UsIDB4MGM3ZSwgMHgwNzdlLCAweDA2N2UsIDB4MDU3ZSwgMHgwNDdlLCAweDAyN2UsIDB4MDE3ZSwKLQkweDEyN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4YTViNCwgMHgyNTJjLCAweDIwMjEsIDB4YTViYSwKLQkweDI0MjQsIDB4MjA2MSwgMHhhYTAwLCAweDIwNzEsIDB4YTMwMCwgMHg3NjQ0LCAweDcwNjAsIDB4YTYwNiwKLQkweDAwNDAsIDB4YTFlNCwgMHg2NzFjLCAweGE3ODYsIDB4MDAwMSwgMHgwMDQwLCAweGExYjMsIDB4YTc4NiwKLQkweDAwMDgsIDB4MDBjMCwgMHhhMWRhLCAweDI1MDAsIDB4YWMwNiwgMHgwMDQwLCAweGExZGEsIDB4MjQwMCwKLQkweGFjMDYsIDB4MDA0MCwgMHhhMWRhLCAweDEwNzgsIDB4OWVlNSwgMHgwMDQwLCAweGExZGEsIDB4MTA3OCwKLQkweDllZjksIDB4MDBjMCwgMHhhMWRhLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4YTFjYywKLQkweDAxN2UsIDB4MTA3OCwgMHgxNzQ5LCAweDAxN2YsIDB4MTA3OCwgMHg4YzI3LCAweDAwYzAsIDB4YTFkMiwKLQkweDEwNzgsIDB4MjgzOSwgMHgxMDc4LCAweDhjM2IsIDB4MDBjMCwgMHhhMWQ4LCAweDEwNzgsIDB4N2EwNSwKLQkweDEwNzgsIDB4OGMwMSwgMHhhY2UwLCAweDAwMTAsIDB4MjAwMSwgMHhhMzE1LCAweDIwMDQsIDB4YWMwMiwKLQkweDAwYzgsIDB4YTFlNCwgMHgwMDc4LCAweGExYTMsIDB4MTI3ZiwgMHgwMTdmLCAweDAyN2YsIDB4MDQ3ZiwKLQkweDA1N2YsIDB4MDY3ZiwgMHgwNzdmLCAweDBjN2YsIDB4MGU3ZiwgMHgwMDdjLCAweDEyN2UsIDB4MDA3ZSwKLQkweDBlN2UsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YTM0MCwgMHhkNWE0LCAweDAwNDAsIDB4YTFmYiwKLQkweDcwMzQsIDB4ODAwMCwgMHg3MDM2LCAweGQ1YjQsIDB4MDA0MCwgMHhhMjAxLCAweDcwMzAsIDB4ODAwMCwKLQkweDcwMzIsIDB4ZDVhYywgMHgwMDQwLCAweGEyMDgsIDB4MjA3MSwgMHhhMzRhLCAweDEwNzgsIDB4YTIzNywKLQkweDBlN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MTI3ZSwgMHgwMDdlLCAweDBlN2UsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhMzQwLCAweGQ1YTQsIDB4MDA0MCwgMHhhMjE5LCAweDcwMzQsIDB4ODAwMCwKLQkweDcwMzYsIDB4ZDViNCwgMHgwMDQwLCAweGEyMWYsIDB4NzAzMCwgMHg4MDAwLCAweDcwMzIsIDB4ZDVhYywKLQkweDAwNDAsIDB4YTIyNiwgMHgyMDcxLCAweGEzNGEsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3ZiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDAwN2UsIDB4MGU3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweGEzNDIsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3ZiwgMHgxMjdmLCAweDAwN2MsIDB4MmUwNCwKLQkweDgwMDAsIDB4MjA3MiwgMHgwMGM4LCAweGEyNDAsIDB4OGU3MCwgMHgyZTA0LCAweDgwMDAsIDB4MjA3MiwKLQkweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweGEzNDAsIDB4MTA3OCwgMHhhMjM3LCAweDBlN2YsIDB4MDA3YywKLQkweDBlN2UsIDB4MjA3MSwgMHhhMzQ0LCAweDEwNzgsIDB4YTIzNywgMHgwZTdmLCAweDAwN2MsIDB4MDAwMSwKLQkweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsIDB4MDEwMCwKLQkweDAyMDAsIDB4MDQwMCwgMHgwODAwLCAweDEwMDAsIDB4MjAwMCwgMHg0MDAwLCAweDgwMDAsIDB4NjI4NgotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCi0gKiAgICAgICAgICAgICAgIC0tLSBJU1AyMjAwIEluaXRpYXRvci9UYXJnZXQgRmlybXdhcmUgLS0tICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICB3aXRoIEZhYnJpYyAoUHVibGljIExvb3ApLCBQb2ludC1wb2ludCwgYW5kICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICBleHBhbmRlZCBMVU4gYWRkcmVzc2luZyBmb3IgRkNUQVBFICAgICAgICAgICAgICAgICAgICAgICAqCi0gKgkJCQkJCQkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgQ29weXJpZ2h0IChDKSAyMDAwIGFuZCAyMTAwIFFsb2dpYyBDb3Jwb3JhdGlvbiAKLSAgKHd3dy5xbG9naWMuY29tKQotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglGaXJtd2FyZSBWZXJzaW9uIDIuMDEuMjcgKDExOjA3IERlYyAxOCwgMjAwMCkKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbmd0aDIyMDAgPSAweDljYmY7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlMjIwMFtdID0geyAKLQkweDA0NzAsIDB4MDAwMCwgMHgwMDAwLCAweDljYmYsIDB4MDAwMCwgMHgwMDAyLCAweDAwMDEsIDB4MDAxYiwKLQkweDAwMTcsIDB4MjA0MywgMHg0ZjUwLCAweDU5NTIsIDB4NDk0NywgMHg0ODU0LCAweDIwMzEsIDB4MzkzOSwKLQkweDM5MjAsIDB4NTE0YywgMHg0ZjQ3LCAweDQ5NDMsIDB4MjA0MywgMHg0ZjUyLCAweDUwNGYsIDB4NTI0MSwKLQkweDU0NDksIDB4NGY0ZSwgMHgyMDQ5LCAweDUzNTAsIDB4MzIzMiwgMHgzMDMwLCAweDIwNDYsIDB4Njk3MiwKLQkweDZkNzcsIDB4NjE3MiwgMHg2NTIwLCAweDIwNTYsIDB4NjU3MiwgMHg3MzY5LCAweDZmNmUsIDB4MjAzMCwKLQkweDMyMmUsIDB4MzAzMSwgMHgyZTMyLCAweDM3MjAsIDB4MjAyMCwgMHgyMDIwLCAweDI0MDAsIDB4MjBjMSwKLQkweDAwMDUsIDB4MjAwMSwgMHgwMTdmLCAweDIwMDMsIDB4MDAwMCwgMHgyMGM5LCAweGIxZmYsIDB4MjA5MSwKLQkweDIwMDAsIDB4MjA1OSwgMHgwMDAwLCAweDJiNzgsIDB4NzgyMywgMHgwMDA0LCAweDIwODksIDB4MjdiNSwKLQkweDIwNTEsIDB4YWQwMCwgMHgyYTcwLCAweDIwMjksIDB4ZTQwMCwgMHgyMDMxLCAweGZmZmYsIDB4MjAzOSwKLQkweGUzZTksIDB4MjAyMSwgMHgwMjAwLCAweDA4MDQsIDB4MTQ0OSwgMHgyMGExLCAweGFjYmYsIDB4YTAwZSwKLQkweDIwYTksIDB4MDc0MSwgMHg0MWE0LCAweDM0MDAsIDB4NzU1ZSwgMHg3NjYyLCAweDc3NWEsIDB4NzQ2NiwKLQkweDc0NmEsIDB4MjBhMSwgMHhiNDAwLCAweDcxNjAsIDB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwKLQkweGExOGMsIDB4MDAwZiwgMHgyMDAxLCAweDAwMGIsIDB4YTExMiwgMHhhMDBlLCAweDIxYTgsIDB4NDFhNCwKLQkweDM0MDAsIDB4ODIxMSwgMHgxZGQ4LCAweDcxNjAsIDB4MzQwMCwgMHhhMTAyLCAweDAxMjAsIDB4MDIxOCwKLQkweDIwYTgsIDB4YTAwZSwgMHg0MWE0LCAweDM4MDAsIDB4ZDA4YywgMHgwMWQ4LCAweDIwMDksIDB4YWQwMCwKLQkweDgxMGQsIDB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4YTE4YywgMHgwMDBmLCAweDIwMDEsIDB4MDAwMSwKLQkweGExMTIsIDB4MjBhMSwgMHgxMDAwLCAweGEwMGUsIDB4MjFhOCwgMHg0MWE0LCAweDgyMTEsIDB4MWRlMCwKLQkweDIwMDksIDB4YWQwMCwgMHgzNDAwLCAweGExMDIsIDB4MDEyMCwgMHgwMjE4LCAweDIwYTgsIDB4YTAwZSwKLQkweDQxYTQsIDB4MDgwYywgMHgxM2ZjLCAweDA4MGMsIDB4MTYxMywgMHgwODBjLCAweDE3YWMsIDB4MDgwYywKLQkweDFlNjcsIDB4MDgwYywgMHg0OTJlLCAweDA4MGMsIDB4ODAxYSwgMHgwODBjLCAweDE1OWMsIDB4MDgwYywKLQkweDJjZTYsIDB4MDgwYywgMHg1YTAxLCAweDA4MGMsIDB4NTA0NSwgMHgwODBjLCAweDY0ODcsIDB4MDgwYywKLQkweDIzNmEsIDB4MDgwYywgMHg2Njg2LCAweDA4MGMsIDB4NWZhZSwgMHgwODBjLCAweDIyNmIsIDB4MDgwYywKLQkweDIzMzgsIDB4MjA5MSwgMHgzMDA5LCAweDc4MjMsIDB4MDAwMCwgMHgxMDA0LCAweDEwYzUsIDB4NzgyMCwKLQkweGEwODYsIDB4MDAwMiwgMHgxMTUwLCAweDc4MjMsIDB4NDAwMCwgMHgwZTA0LCAweDEwYmQsIDB4NzgxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwgMHgyYTcwLCAweDcwMDMsIDB4MDAwMCwKLQkweDJhNzAsIDB4NzAwMCwgMHhhMDhlLCAweDAwMDMsIDB4MTE1OCwgMHgwODBjLCAweDNjOTgsIDB4MDgwYywKLQkweDJkMGQsIDB4MDgwYywgMHg1YTRmLCAweDA4MGMsIDB4NTFmNCwgMHgwODBjLCAweDY0YTIsIDB4MGM4MCwKLQkweDAwMGIsIDB4MGM5OCwgMHgxMGU0LCAweDEwZTUsIDB4MTIwMywgMHgxMGUyLCAweDEyY2MsIDB4MTNmOSwKLQkweDEzZmEsIDB4MTNmYiwgMHgwODBjLCAweDE0ZjYsIDB4MDAwNSwgMHgwMTI2LCAweDAwZjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDEsIDB4MTkwNCwgMHgxMWQxLCAweDA4MGMsIDB4MTU2OSwKLQkweDA4MGMsIDB4NTc0ZiwgMHgwMTUwLCAweDA4MGMsIDB4NTc3NSwgMHgxNTgwLCAweDIwNzksIDB4MDEwMCwKLQkweDc4MjgsIDB4YTA4NSwgMHgxODAwLCAweDc4MmEsIDB4MDQ0OCwgMHgwODBjLCAweDU2OWEsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMSwgMHgxOTA0LCAweDExZDEsIDB4NzA4OCwgMHhhMDg2LCAweDAwMjgsIDB4MTkwNCwKLQkweDExZDEsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjcsIDB4ZmZmZiwgMHg3YTI4LCAweGEyOTUsIDB4MWUyZiwKLQkweDdhMmEsIDB4MjAxMSwgMHg1NjZlLCAweDA4MGMsIDB4NjUwZCwgMHgyMDExLCAweDU2N2IsIDB4MDgwYywKLQkweDY1MGQsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHgyMDExLCAweDgwMzAsIDB4MjAxOSwKLQkweDAwMDAsIDB4NzA4NywgMHgwMDAwLCAweDA4MGMsIDB4MWQwZiwgMHgwMGU4LCAweDA4MGMsIDB4NDFkMSwKLQkweDIwNzksIDB4MDEwMCwgMHg3ODQ0LCAweGEwMDUsIDB4MTkwNCwgMHgxMWQxLCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjUwZCwgMHgyMDExLCAweDU2N2IsIDB4MDgwYywgMHg2NTBkLCAweDA4MGMsIDB4MWQwZiwKLQkweDIwMDEsIDB4YWY4YywgMHgyMDA0LCAweDc4MGUsIDB4Nzg0MCwgMHhhMDg0LCAweGZmZmIsIDB4Nzg0MiwKLQkweDIwMTEsIDB4ODAxMCwgMHg3M2M4LCAweDA4MGMsIDB4M2M1YywgMHg3MjM4LCAweGMyODQsIDB4NzIzYSwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxYWMsIDB4MjEwMiwgMHgwODBjLCAweDc5YmQsIDB4MjAxMSwKLQkweDAwMDQsIDB4MDgwYywgMHg5NTljLCAweDA4MGMsIDB4NGY3MSwgMHgwODBjLCAweDU3NGYsIDB4MDE1OCwKLQkweDA4MGMsIDB4NDkxNywgMHgwMTQwLCAweDcwODcsIDB4MDAwMSwgMHg3MGMzLCAweDAwMDAsIDB4MDgwYywKLQkweDQzNmUsIDB4MDgwNCwgMHgxMWQxLCAweDA4MGMsIDB4NTAyZCwgMHgwMTIwLCAweDdhMGMsIDB4YzJiNCwKLQkweDdhMGUsIDB4MDA1MCwgMHgwODBjLCAweDk5MzcsIDB4NzBkMCwgMHhkMDljLCAweDExMjgsIDB4NzA5YywKLQkweGEwMDUsIDB4MDExMCwgMHgwODBjLCAweDQ4ZjUsIDB4NzBkYiwgMHgwMDAwLCAweDcwZDcsIDB4MDAwMCwKLQkweDcyZDAsIDB4MDgwYywgMHg1NzRmLCAweDExNzgsIDB4MjAxMSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywKLQkweDI3NDQsIDB4MjAxOSwgMHhhZjhlLCAweDIxMWEsIDB4MDAxZSwgMHg3MDRmLCAweGZmZmYsIDB4NzA1MywKLQkweDAwZWYsIDB4NzA3MywgMHgwMDAwLCAweDIwNzksIDB4YWQ1MSwgMHg3ODA0LCAweGQwYWMsIDB4MDEwOCwKLQkweGMyOTUsIDB4NzJkMiwgMHgwODBjLCAweDU3NGYsIDB4MDExOCwgMHhhMjk2LCAweDAwMDQsIDB4MDUwOCwKLQkweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDk1OWMsIDB4NzA5NywgMHgwMDAwLCAweDcwOWIsIDB4ZmZmZiwKLQkweDcwMDMsIDB4MDAwMiwgMHgwMGZlLCAweDA4MGMsIDB4MjhmYSwgMHgyMDExLCAweDAwMDUsIDB4MDgwYywKLQkweDdhZGYsIDB4MDgwYywgMHg2YzUwLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MSwKLQkweDAxMDAsIDB4MDAxNiwgMHgwODBjLCAweDI3NDQsIDB4NjFlMiwgMHgwMDFlLCAweDAwY2UsIDB4MDEyZSwKLQkweDAwZDAsIDB4NzA5NywgMHgwMDAwLCAweDcwOWIsIDB4ZmZmZiwgMHg3MDAzLCAweDAwMDIsIDB4MjAxMSwKLQkweDAwMDUsIDB4MDgwYywgMHg3YWRmLCAweDA4MGMsIDB4NmM1MCwgMHgwODBjLCAweDU3NGYsIDB4MDE0OCwKLQkweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDAwMTYsIDB4MDgwYywgMHgyNzQ0LCAweDYxZTIsIDB4MDAxZSwKLQkweDAwY2UsIDB4MDBmZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwKLQkweDIwYTksIDB4MDEwMCwgMHgwMDEwLCAweDIwYTksIDB4MDA4MiwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwKLQkweDIwMDksIDB4MDAwMCwgMHgwMDEwLCAweDIwMDksIDB4MDA3ZSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwKLQkweDIxMTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg3Y2Y0LCAweDAwMmUsIDB4MDgwYywKLQkweGFjMDcsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywgMHgyYmM5LCAweDgxMDgsIDB4MWYwNCwKLQkweDExZTUsIDB4MDBjZSwgMHg3MDZmLCAweDAwMDAsIDB4NzA3MCwgMHhhMDg0LCAweDAwZmYsIDB4NzA3MiwKLQkweDcwOWYsIDB4MDAwMCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MTkwNCwgMHgxMmNhLCAweDcwOTgsIDB4YTA4NiwgMHhmZmZmLCAweDAxMzAsIDB4MDgwYywKLQkweDI4ZmEsIDB4MDgwYywgMHg2YzUwLCAweDA4MDQsIDB4MTJjYSwgMHg3MGQwLCAweGQwYWMsIDB4MTExMCwKLQkweGQwOWMsIDB4MDU0MCwgMHhkMDg0LCAweDA1MzAsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDEsIDB4MDEwMywKLQkweDIwMDksIDB4YWY4YywgMHgyMTBjLCAweDIxMDIsIDB4MDAxZSwgMHgwMDBlLCAweGQwOGMsIDB4MDFkMCwKLQkweDcwZDQsIDB4YTA4NiwgMHhmZmZmLCAweDAxOTAsIDB4MDgwYywgMHgyYTU2LCAweDA4MGMsIDB4NmM1MCwKLQkweDcwZDAsIDB4ZDA5NCwgMHgxOTA0LCAweDEyY2EsIDB4MjAxMSwgMHgwMDAxLCAweDIwMTksIDB4MDAwMCwKLQkweDA4MGMsIDB4MmE4YywgMHgwODBjLCAweDZjNTAsIDB4MDgwNCwgMHgxMmNhLCAweDcwZDgsIDB4YTAwNSwKLQkweDE5MDQsIDB4MTJjYSwgMHg3MDk0LCAweGEwMDUsIDB4MTkwNCwgMHgxMmNhLCAweDcwZDAsIDB4ZDBhNCwKLQkweDAxMTgsIDB4ZDBiNCwgMHgwOTA0LCAweDEyY2EsIDB4MDgwYywgMHg1MDJkLCAweDE5MDQsIDB4MTJjYSwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MDFjOCwgMHgwMTU2LCAweDAwYzYsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHg0Y2RjLCAweDExMTgsIDB4NjAwMCwKLQkweGQwZWMsIDB4MTEzOCwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHgxMjViLCAweDAwY2UsIDB4MDE1ZSwKLQkweDAwMjgsIDB4MDAxZSwgMHgwMGNlLCAweDAxNWUsIDB4MDgwNCwgMHgxMmNhLCAweDAwMDYsIDB4MDAxNiwKLQkweDIwMDEsIDB4MDEwMywgMHgyMDA5LCAweGFmOGMsIDB4MjEwYywgMHgyMTAyLCAweDAwMWUsIDB4MDAwZSwKLQkweGEwMDYsIDB4MjAwOSwgMHgwNzAwLCAweDIwYTksIDB4MDAwMiwgMHgyMGExLCAweGFmYjUsIDB4NDBhMSwKLQkweDcwNmMsIDB4ODAwNywgMHg3MTcwLCAweDgxMGYsIDB4MjBhOSwgMHgwMDAyLCAweDQwYTEsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgxNGRjLCAweDIwMDEsIDB4MDAwMCwgMHg4MTBmLCAweDIwYTksIDB4MDAwMiwKLQkweDQwYTEsIDB4YTAwNiwgMHgyMDA5LCAweDAyMDAsIDB4MjBhOSwgMHgwMDAyLCAweDIwYTEsIDB4YWZjNSwKLQkweDQwYTEsIDB4NzAzMCwgMHhjMDhjLCAweDcwMzIsIDB4NzAwMywgMHgwMDAzLCAweDcwOWIsIDB4ZmZmZiwKLQkweDA4MGMsIDB4MTU2MiwgMHhhMDA2LCAweDA4MGMsIDB4MjYxZSwgMHgwODBjLCAweDNjY2UsIDB4MDBmNiwKLQkweDIwNzksIDB4MDEwMCwgMHgwODBjLCAweDU3NzUsIDB4MDE1MCwgMHgwODBjLCAweDU3NGYsIDB4NzgyOCwKLQkweDAxMTgsIDB4YTA4NCwgMHhlMWZmLCAweDAwMTAsIDB4YTA4NCwgMHhmZmRmLCAweDc4MmEsIDB4MDBmZSwKLQkweDIwMDEsIDB4YWZjOCwgMHgyMDA0LCAweGEwODYsIDB4MDAwNSwgMHgxMTIwLCAweDIwMTEsIDB4MDAwMCwKLQkweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHg3YWU5LCAweDA4MGMsIDB4NmM1MCwKLQkweDA4MGMsIDB4NmQwZCwgMHgwMTJlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDQ2LCAweDAwZjYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAxMDAsIDB4MjAwOSwgMHhhZDMzLCAweDIxMDQsIDB4YTAwNSwKLQkweDExMTAsIDB4MDgwYywgMHgyNzcwLCAweDIwMDksIDB4MDBmNywgMHgwODBjLCAweDQ4ZGUsIDB4Nzk0MCwKLQkweGExOGMsIDB4MDAxMCwgMHg3OTQyLCAweDc5MjQsIDB4ZDFiNCwgMHgwMTEwLCAweDc4MjcsIDB4MDA0MCwKLQkweGQxOWMsIDB4MDExMCwgMHg3ODI3LCAweDAwMDgsIDB4MDAwNiwgMHgwMDM2LCAweDAxNTYsIDB4Nzk1NCwKLQkweGQxYWMsIDB4MTkwNCwgMHgxMzNhLCAweDA4MGMsIDB4NTc2MSwgMHgwMTU4LCAweDA4MGMsIDB4NTc3NSwKLQkweDExMjgsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4MDAwMCwgMHgwMDcwLCAweDA4MGMsIDB4NTc1NywKLQkweDBkYzAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg1NjlhLCAweDAwNTgsIDB4MDgwYywgMHg1NzRmLCAweDAxNDAsIDB4MjAwOSwKLQkweDAwZjgsIDB4MDgwYywgMHg0OGRlLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjBhOSwKLQkweDA5YzQsIDB4NzgyMCwgMHhkMDljLCAweDExMzgsIDB4MDgwYywgMHg1NzRmLCAweDAxMzgsIDB4NzgyNCwKLQkweGQwYWMsIDB4MTkwNCwgMHgxM2UwLCAweDFmMDQsIDB4MTMxOSwgMHgwMDcwLCAweDc4MjQsIDB4MDgwYywKLQkweDU3NmIsIDB4MDExOCwgMHhkMGFjLCAweDE5MDQsIDB4MTNlMCwgMHhhMDg0LCAweDE4MDAsIDB4MGQ5OCwKLQkweDcwMDMsIDB4MDAwMSwgMHgwODA0LCAweDEzZTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjYxZSwKLQkweDA4MDQsIDB4MTNlZiwgMHg3ODUwLCAweGEwODQsIDB4MDE4MCwgMHg3ODUyLCAweDc4MmYsIDB4MDAyMCwKLQkweDIwYTksIDB4MDA0NiwgMHgxZDA0LCAweDEzNDIsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4MTM0MiwKLQkweDc4NTAsIDB4YTA4NCwgMHgwMTgwLCAweGEwODUsIDB4MDQwMCwgMHg3ODUyLCAweDc4MmYsIDB4MDAwMCwKLQkweDA4MGMsIDB4NTc2MSwgMHgwMTU4LCAweDA4MGMsIDB4NTc3NSwgMHgxMTI4LCAweDIwMDEsIDB4YWY5ZCwKLQkweDIwMDMsIDB4MDAwMCwgMHgwMDcwLCAweDA4MGMsIDB4NTc1NywgMHgwZGMwLCAweDIwMDEsIDB4YWY5ZCwKLQkweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NTY5YSwKLQkweDAwMjAsIDB4MjAwOSwgMHgwMGY4LCAweDA4MGMsIDB4NDhkZSwgMHgyMGE5LCAweDAwMGUsIDB4ZTAwMCwKLQkweDFmMDQsIDB4MTM2ZiwgMHg3ODUwLCAweGEwODQsIDB4MDE4MCwgMHhhMDg1LCAweDE0MDAsIDB4Nzg1MiwKLQkweDA4MGMsIDB4NTc0ZiwgMHgwMTIwLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjAyMSwKLQkweGU2NzgsIDB4MjAxOSwgMHhlYTYwLCAweDc4MjAsIDB4ZDA5YywgMHgxNTU4LCAweDA4MGMsIDB4NTc0ZiwKLQkweDA1YjgsIDB4NzgyNCwgMHhkMGFjLCAweDE5MDQsIDB4MTNlMCwgMHgwODBjLCAweDU3NzUsIDB4MTUwOCwKLQkweDAwNDYsIDB4MjAyMSwgMHgwMTkwLCAweDg0MjEsIDB4MWRmMCwgMHgwMDRlLCAweDg0MjEsIDB4MTFjOCwKLQkweDc4MjcsIDB4MDA0OCwgMHgyMGE5LCAweDAxZjQsIDB4MWQwNCwgMHgxMzljLCAweDIwOTEsIDB4NjAwMCwKLQkweDFmMDQsIDB4MTM5YywgMHg3ODI0LCAweGEwODQsIDB4MDA2OCwgMHgxNWE4LCAweDIwMDEsIDB4YWY5ZCwKLQkweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDcwMDMsIDB4MDAwMSwKLQkweDA0NzgsIDB4ODMxOSwgMHgxOTgwLCAweDIwMDksIDB4YWQzMywgMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwKLQkweGEwODQsIDB4ZmZmMCwgMHgwMTIwLCAweDIwMGIsIDB4MDAwMCwgMHgwODBjLCAweDI3NzAsIDB4MDBkOCwKLQkweDA4MGMsIDB4NTc2MSwgMHgxMTQwLCAweGE0YTIsIDB4MDA2NCwgMHgxMTI4LCAweDA4MGMsIDB4NTcyNiwKLQkweDcwMDMsIDB4MDAwMSwgMHgwMGE4LCAweDc4MjcsIDB4MTgwMCwgMHhlMDAwLCAweGUwMDAsIDB4NzgyNCwKLQkweDA4MGMsIDB4NTc2YiwgMHgwMTEwLCAweGQwYWMsIDB4MTE1OCwgMHhhMDg0LCAweDE4MDAsIDB4MDljOCwKLQkweDcwMDMsIDB4MDAwMSwgMHgwMDI4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MWUsIDB4MDA0OCwKLQkweDIwMDEsIDB4YWQzMywgMHgyMDAzLCAweDAwMDAsIDB4NzgyNywgMHgwMDQ4LCAweDc4MjgsIDB4YzA5ZCwKLQkweDc4MmEsIDB4Nzg1MCwgMHhhMDg0LCAweDAxODAsIDB4YTA4NSwgMHgwNDAwLCAweDc4NTIsIDB4MDE1ZSwKLQkweDAwM2UsIDB4MDAwZSwgMHgwODBjLCAweDE1MzksIDB4MDEyZSwgMHgwMGZlLCAweDAwNGUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MmE3MCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywKLQkweDAwMDAsIDB4NzA4NywgMHgwMDAwLCAweDIwMDksIDB4MDEwMCwgMHgyMTA0LCAweGEwODIsIDB4MDAwMiwKLQkweDAyMTgsIDB4NzA0ZiwgMHhmZmZmLCAweDAwMTAsIDB4NzA0ZiwgMHgwMDAwLCAweDcwNTcsIDB4ZmZmZiwKLQkweDcwNmYsIDB4MDAwMCwgMHg3MDczLCAweDAwMDAsIDB4MDgwYywgMHg5OTM3LCAweDIwNjEsIDB4YWY4ZCwKLQkweDYwMDMsIDB4MDkwOSwgMHg2MDA3LCAweDAwMDAsIDB4NjAwYiwgMHg4ODAwLCAweDYwMGYsIDB4MDIwMCwKLQkweDYwMTMsIDB4MDBmZiwgMHg2MDE3LCAweDAwMDMsIDB4NjAxYiwgMHgwMDAwLCAweDYwMWYsIDB4MDdkMCwKLQkweDIwNjEsIDB4YWY5NSwgMHg2MDAzLCAweDgwMDAsIDB4NjAwNywgMHgwMDAwLCAweDYwMGIsIDB4MDAwMCwKLQkweDYwMGYsIDB4MDIwMCwgMHg2MDEzLCAweDAwZmYsIDB4NjAxNywgMHgwMDAwLCAweDYwMWIsIDB4MDAwMSwKLQkweDYwMWYsIDB4MDAwMCwgMHgyMDYxLCAweGFmYTYsIDB4NjAwMywgMHg1MTRjLCAweDYwMDcsIDB4NGY0NywKLQkweDYwMGIsIDB4NDk0MywgMHg2MDBmLCAweDIwMjAsIDB4MjAwMSwgMHhhZDI3LCAweDIwMDMsIDB4MDAwMCwKLQkweDAwMDUsIDB4MDRhMCwgMHgyMDExLCAweDAwMDAsIDB4ODFmZiwgMHgwNTcwLCAweGExODYsIDB4MDAwMSwKLQkweDExNDgsIDB4MjAzMSwgMHg4ZmZmLCAweDIwMzksIDB4Y2MwMSwgMHgyMDIxLCAweDAxMDAsIDB4MjAyOSwKLQkweGNjMDAsIDB4MDBlOCwgMHhhMTg2LCAweDAwMDIsIDB4MTExOCwgMHgyMDExLCAweDAwMDAsIDB4MDBiOCwKLQkweGExODYsIDB4MDAwNSwgMHgxMTE4LCAweDIwMTEsIDB4MDAwMSwgMHgwMDg4LCAweGExODYsIDB4MDAwOSwKLQkweDExMTgsIDB4MjAxMSwgMHgwMDAyLCAweDAwNTgsIDB4YTE4NiwgMHgwMDBhLCAweDExMTgsIDB4MjAxMSwKLQkweDAwMDIsIDB4MDAyOCwgMHhhMTg2LCAweDAwNTUsIDB4MTExMCwgMHgyMDExLCAweDAwMDMsIDB4MzgwMCwKLQkweGEwODQsIDB4ZmZmYywgMHhhMjA1LCAweDIwYzAsIDB4MDgwNCwgMHgxMDRkLCAweGEwMGUsIDB4MjAxMSwKLQkweDAwMDMsIDB4MjAxOSwgMHgxNDg1LCAweDA4MDQsIDB4MTRkNiwgMHgyMDE5LCAweGFhYWEsIDB4MjA2MSwKLQkweGZmZmYsIDB4MmMxNCwgMHgyMzYyLCAweGUwMDAsIDB4ZTAwMCwgMHgyYzA0LCAweGEzMDYsIDB4MjI2MiwKLQkweDExMTAsIDB4YzFiNSwgMHhjMWE1LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweDE0OTgsIDB4MDRmMCwKLQkweDIwMTksIDB4YWFhYSwgMHgyMDYxLCAweGZmZmYsIDB4MmMxNCwgMHgyMzYyLCAweGUwMDAsIDB4ZTAwMCwKLQkweDJjMWMsIDB4MjA2MSwgMHg3ZmZmLCAweGUwMDAsIDB4ZTAwMCwgMHgyYzA0LCAweDIwNjEsIDB4ZmZmZiwKLQkweDIyNjIsIDB4YTMwNiwgMHgwMTEwLCAweGMxOGQsIDB4MDAwOCwgMHhjMTg1LCAweDIwMTEsIDB4MDAwMiwKLQkweDIwMTksIDB4MTRiMywgMHgwNDE4LCAweDIwNjEsIDB4ZmZmZiwgMHgyMDE5LCAweGFhYWEsIDB4MmMxNCwKLQkweDIzNjIsIDB4ZTAwMCwgMHhlMDAwLCAweDJjMDQsIDB4MjI2MiwgMHhhMzA2LCAweDExODAsIDB4MmMxNCwKLQkweDIzNjIsIDB4ZTAwMCwgMHhlMDAwLCAweDJjMWMsIDB4MjA2MSwgMHg3ZmZmLCAweDJjMDQsIDB4MjA2MSwKLQkweGZmZmYsIDB4MjI2MiwgMHhhMzA2LCAweDExMTAsIDB4YzE5NSwgMHgwMDA4LCAweGMxOWQsIDB4MjAxMSwKLQkweDAwMDEsIDB4MjAxOSwgMHgxNGQ0LCAweDAwMTAsIDB4MDgwNCwgMHgxNDRhLCAweDM4MDAsIDB4YTA4NCwKLQkweGZmZmMsIDB4YTIwNSwgMHgyMGMwLCAweDA4MzcsIDB4MjAxMSwgMHgwMDAwLCAweDA4MGMsIDB4NGNkYywKLQkweDExNzgsIDB4NjAwNCwgMHhhMGM0LCAweDAwZmYsIDB4YThjNiwgMHgwMDA2LCAweDAxMjgsIDB4YTBjNCwKLQkweGZmMDAsIDB4YThjNiwgMHgwNjAwLCAweDExMjAsIDB4YTE4NiwgMHgwMDgwLCAweDAxMDgsIDB4ODIxMCwKLQkweDgxMDgsIDB4YTE4NiwgMHgwMTAwLCAweDFkNTAsIDB4MjIwOCwgMHgwMDA1LCAweDIwOTEsIDB4ODAwMCwKLQkweDBlMDQsIDB4MTRmOCwgMHgwMDA2LCAweDAwMTYsIDB4MjA3OSwgMHgwMDAwLCAweDc4MTgsIDB4ZDA4NCwKLQkweDFkZTgsIDB4MDAxZSwgMHg3OTJlLCAweDAwMGUsIDB4NzgyYSwgMHgwMDBlLCAweDc4MjYsIDB4MzkwMCwKLQkweDc4M2EsIDB4NzgyMywgMHg4MDAyLCAweDc4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MDEyNiwKLQkweDAxNTYsIDB4MDE0NiwgMHgyMGE5LCAweDAwMTAsIDB4MjBhMSwgMHhiMGM4LCAweDIwOTEsIDB4MjAwMCwKLQkweDQwYTEsIDB4MjBhOSwgMHgwMDEwLCAweDIwOTEsIDB4MjIwMCwgMHg0MGExLCAweDIwYTksIDB4MDAxMCwKLQkweDIwOTEsIDB4MjQwMCwgMHg0MGExLCAweDIwYTksIDB4MDAxMCwgMHgyMDkxLCAweDI2MDAsIDB4NDBhMSwKLQkweDIwYTksIDB4MDAxMCwgMHgyMDkxLCAweDI4MDAsIDB4NDBhMSwgMHgwMTRlLCAweDAxNWUsIDB4MDEyZSwKLQkweDIwNzksIDB4YWQwMCwgMHg3ODAzLCAweDAwMDUsIDB4MjA5MSwgMHg0MDgwLCAweDA0YzksIDB4MGNmOCwKLQkweDAwMDUsIDB4MDAwNiwgMHgwODBjLCAweDE1ODQsIDB4MTUxOCwgMHgwMGY2LCAweDIwNzksIDB4YWQyMywKLQkweDJmMDQsIDB4ODAwMCwgMHgyMDdhLCAweGEwODIsIDB4MDAwZiwgMHgwMjU4LCAweGEwMDYsIDB4MjA3YSwKLQkweDIwNzksIDB4YWQyNSwgMHgyZjA0LCAweGEwODQsIDB4MDAwMSwgMHhhMDg2LCAweDAwMDEsIDB4MjA3YSwKLQkweDAwNzAsIDB4MjA3OSwgMHhhZDI1LCAweDJmN2MsIDB4OGZmZiwgMHgxMTI4LCAweDIwMDEsIDB4MGMwMywKLQkweDIwMDMsIDB4MDA0MCwgMHgwMDIwLCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwYzAsIDB4MDBmZSwKLQkweDAwMGUsIDB4MDAwNSwgMHgwNDA5LCAweDExMjAsIDB4MjAwMSwgMHgwYzAzLCAweDIwMDMsIDB4MDA4MCwKLQkweDAwMDUsIDB4MDBkMSwgMHgxMTIwLCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwNDAsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDA5MSwgMHgxMTc4LCAweDIwMDEsIDB4MGMwMywgMHgyMDAzLCAweDAwNDAsIDB4MjAwOSwKLQkweDBmZmYsIDB4MDBhMSwgMHgyMDAxLCAweDBjMDMsIDB4MjAwMywgMHgwMDgwLCAweDIwMDksIDB4MGZmZiwKLQkweDAwNjksIDB4MGM4OCwgMHgwMDBlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweDBjMDAsIDB4MmMwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwYWEsIDB4MDBjZSwgMHgwMDA1LCAweDAxNTYsIDB4MDEyNiwKLQkweGExOGMsIDB4MGZmZiwgMHgyMWE4LCAweDFkMDQsIDB4MTU5MywgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDE1OTMsIDB4MDEyZSwgMHgwMTVlLCAweDAwMDUsIDB4MjA3MSwgMHhhZDAwLCAweDcxNWMsIDB4NzEyZSwKLQkweDIwMjEsIDB4MDAwMSwgMHhhMTkwLCAweDAwMzAsIDB4YTI5OCwgMHgwMDMwLCAweDAyNDAsIDB4NzA2MCwKLQkweGEzMDIsIDB4MTIyOCwgMHgyMjBhLCAweDIyMDgsIDB4MjMxMCwgMHg4NDIwLCAweDBjYTgsIDB4MzgwMCwKLQkweGQwOGMsIDB4MDE0OCwgMHg3MDYwLCAweGEwODYsIDB4YWQwMCwgMHgwMTI4LCAweDcwNjMsIDB4YWQwMCwKLQkweDIwMTEsIDB4MTAwMCwgMHgwYzQ4LCAweDIwMGIsIDB4MDAwMCwgMHg3NGFlLCAweDc0YjIsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDAwLCAweDcwYjAsIDB4YTBlYSwKLQkweDAwMTAsIDB4MDI2OCwgMHg4MDAxLCAweDcwYjIsIDB4NzAyYywgMHgyMDY4LCAweDJkMDQsIDB4NzAyZSwKLQkweDIwNmIsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4YTA2ZSwKLQkweDBjZDgsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBiMCwKLQkweDgwMDEsIDB4MDI2MCwgMHg3MGIyLCAweDcwMmMsIDB4MjA2OCwgMHgyZDA0LCAweDcwMmUsIDB4MjA2YiwKLQkweDAwMDAsIDB4NjgwNywgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweGEwNmUsIDB4MGNkOCwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZDAwLCAweDcwMmMsIDB4MjA2YSwKLQkweDJkMDAsIDB4NzAyZSwgMHg3MGIwLCAweDgwMDAsIDB4NzBiMiwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwKLQkweDhkZmYsIDB4MDEzOCwgMHg2ODA0LCAweDY4MDcsIDB4MDAwMCwgMHgwMDA2LCAweDBjNDksIDB4MDBkZSwKLQkweDBjYjgsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwgMHg3MGIwLCAweGEwOGEsIDB4MDAxMCwKLQkweGEwMGQsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZmVjLCAweDcwMDcsIDB4MDAwMCwKLQkweDcwMWIsIDB4MDAwMCwgMHg3MDFmLCAweDAwMDAsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTAsIDB4YTA4NSwKLQkweDgwMDQsIDB4NzAxMiwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMjcwLCAweDcwMGIsIDB4MDAwMCwKLQkweDIwNzEsIDB4YWZlYywgMHg3MDE4LCAweGEwODgsIDB4YWZmNSwgMHgyMjBhLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwMDcsIDB4NzAxYSwgMHg3MDA0LCAweGEwMDUsIDB4MTEyOCwgMHgwMGY2LCAweDIwNzksIDB4MDAxMCwKLQkweDAwODEsIDB4MDBmZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFmZWMsIDB4NzAwNCwKLQkweGEwMDUsIDB4MTEyOCwgMHgwMGY2LCAweDIwNzksIDB4MDAxMCwgMHgwMDE5LCAweDAwZmUsIDB4MDBlZSwKLQkweDAwMDUsIDB4NzAwMCwgMHgwMDAyLCAweDE2NGYsIDB4MTZiMywgMHgxNmQwLCAweDE2ZDAsIDB4NzAxOCwKLQkweDcxMWMsIDB4YTEwNiwgMHgxMTE4LCAweDcwMDcsIDB4MDAwMCwgMHgwMDA1LCAweDAwZDYsIDB4YTE4MCwKLQkweGFmZjUsIDB4MjAwNCwgMHg3MDBhLCAweDIwNjgsIDB4ODEwOCwgMHhhMThjLCAweDAwMDcsIDB4NzExZSwKLQkweDc4MDMsIDB4MDAyNiwgMHg2ODI0LCAweDc4MzIsIDB4NjgyOCwgMHg3ODM2LCAweDY4MmMsIDB4NzgzYSwKLQkweDY4MzAsIDB4NzgzZSwgMHg2ODEwLCAweDcwMGUsIDB4NjgwYywgMHg3MDE2LCAweDY4MDQsIDB4MDBkZSwKLQkweGQwODQsIDB4MDEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDAyOSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMiwKLQkweDAwYjEsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4NzEwYywgMHgyMDExLCAweDAwNDAsIDB4YTE4MiwKLQkweDAwNDAsIDB4MTIxMCwgMHgyMTEwLCAweGEwMDYsIDB4NzAwZSwgMHg3MjEyLCAweDgyMDMsIDB4NzgyMiwKLQkweDc4MDMsIDB4MDAyMCwgMHg3ODAzLCAweDAwNDEsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwKLQkweDAwMjYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4NzAxNCwgMHgyMDk4LCAweDIwYTEsIDB4MDAxNCwKLQkweDc4MDMsIDB4MDAyNiwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHhhMTgyLCAweDAwNDAsIDB4MTIxMCwKLQkweDIxMTAsIDB4YTAwNiwgMHg3MDBlLCAweDIyYTgsIDB4NTNhNiwgMHg4MjAzLCAweDc4MjIsIDB4NzgwMywKLQkweDAwMjAsIDB4MzMwMCwgMHg3MDE2LCAweDc4MDMsIDB4MDAwMSwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwOTksIDB4YWRmOSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwNDEsIDB4NzAwNywgMHgwMDAzLCAweDcwMDAsIDB4YzA4NCwKLQkweDcwMDIsIDB4NzAwYiwgMHhhZGY0LCAweDAxMmUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDAwNSwKLQkweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwMDEsIDB4YWUyOCwgMHgyMDljLCAweDIwYTEsIDB4MDAxNCwKLQkweDc4MDMsIDB4MDAyNiwgMHgyMDAxLCAweGFlMjksIDB4MjBhYywgMHg1M2E2LCAweDIwOTksIDB4YWUyYSwKLQkweDIwYTEsIDB4MDAxOCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhMywgMHg3ODAzLCAweDAwMjAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3ODAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDA0LCAweDcwMDAsIDB4YzA4YywKLQkweDcwMDIsIDB4NzAwYiwgMHhhZTI1LCAweDAxMmUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweGFmZWMsIDB4MDBmNiwgMHgyMDc5LCAweDAwMTAsIDB4NzkwNCwKLQkweDc4MDMsIDB4MDAwMiwgMHhkMWZjLCAweDAxMjAsIDB4YTE4YywgMHgwNzAwLCAweDcwMDQsIDB4MDAyMywKLQkweDAwZmUsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsIDB4MTY0OSwgMHgxNzEzLCAweDE3NDEsIDB4MTc2YiwKLQkweDE3OWIsIDB4MTcxMiwgMHgwY2Y4LCAweGExOGMsIDB4MDcwMCwgMHgxNTI4LCAweDAxMzYsIDB4MDE0NiwKLQkweDAxNTYsIDB4NzAxNCwgMHgyMGEwLCAweDIwOTksIDB4MDAxNCwgMHg3ODAzLCAweDAwNDAsIDB4NzAxMCwKLQkweDIwYTgsIDB4NTNhNSwgMHgzNDAwLCAweDcwMTYsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4NzAwYywKLQkweGEwMDUsIDB4MDU3MCwgMHg3ODMwLCAweDc4MzIsIDB4NzgzNCwgMHg3ODM2LCAweDA4MGMsIDB4MTY3YSwKLQkweDAwMDUsIDB4NzAwOCwgMHhhMDgwLCAweDAwMDIsIDB4MjAwMywgMHgwMTAwLCAweDcwMDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4MTY0OSwgMHgwMDA1LCAweDcwMDgsIDB4YTA4MCwgMHgwMDAyLCAweDIwMDMsIDB4MDIwMCwKLQkweDBjYTgsIDB4YTE4YywgMHgwNzAwLCAweDExNTAsIDB4NzAwYywgMHhhMDA1LCAweDAxODgsIDB4NzgzMCwKLQkweDc4MzIsIDB4NzgzNCwgMHg3ODM2LCAweDA4MGMsIDB4MTY4ZiwgMHgwMDA1LCAweDcwMDgsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjAwMywgMHgwMjAwLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDE2NDksIDB4MDAwNSwKLQkweDAwZDYsIDB4NzAwOCwgMHgyMDY4LCAweDc4MzAsIDB4NjgyNiwgMHg3ODM0LCAweDY4MmEsIDB4NzgzOCwKLQkweDY4MmUsIDB4NzgzYywgMHg2ODMyLCAweDY4MGIsIDB4MDEwMCwgMHgwMGRlLCAweDcwMDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4MTY0OSwgMHgwMDA1LCAweGExOGMsIDB4MDcwMCwgMHgxNTQwLCAweDAxMzYsIDB4MDE0NiwKLQkweDAxNTYsIDB4MjAwMSwgMHhhZGY3LCAweDIwMDQsIDB4YTA4MCwgMHgwMDBkLCAweDIwYTAsIDB4MjA5OSwKLQkweDAwMTQsIDB4NzgwMywgMHgwMDQwLCAweDIwYTksIDB4MDAyMCwgMHg1M2E1LCAweDIwMDEsIDB4YWRmOSwKLQkweDIwMDQsIDB4ZDBiYywgMHgwMTQ4LCAweDIwMDEsIDB4YWUwMiwgMHgyMDA0LCAweGEwODAsIDB4MDAwZCwKLQkweDIwYTAsIDB4MjBhOSwgMHgwMDIwLCAweDUzYTUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4NzAwNywKLQkweDAwMDAsIDB4MDgwYywgMHg1YWU2LCAweDA4MGMsIDB4MTY0OSwgMHgwMDA1LCAweDIwMTEsIDB4ODAwMywKLQkweDA4MGMsIDB4M2M1YywgMHgwY2Y4LCAweGExOGMsIDB4MDcwMCwgMHgxMTQ4LCAweDIwMDEsIDB4YWUyNywKLQkweDIwMDMsIDB4MDEwMCwgMHg3MDA3LCAweDAwMDAsIDB4MDgwYywgMHgxNjQ5LCAweDAwMDUsIDB4MjAxMSwKLQkweDgwMDQsIDB4MDgwYywgMHgzYzVjLCAweDBjZjgsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MjA3OSwKLQkweDAwMzAsIDB4MjA3MSwgMHhhZmZkLCAweDcwMDMsIDB4MDAwMCwgMHg3MDBmLCAweGIwMDMsIDB4NzAxMywKLQkweGIwMDMsIDB4NzgwZiwgMHgwMGY2LCAweDc4MDMsIDB4MDAwNCwgMHgwMTJlLCAweDAwMDUsIDB4NjkzNCwKLQkweGExODQsIDB4MDAwNywgMHgwMDAyLCAweDE3Y2IsIDB4MTgwOSwgMHgxN2NiLCAweDE3Y2IsIDB4MTdjYiwKLQkweDE3ZjEsIDB4MTdkOCwgMHgxN2NmLCAweGEwODUsIDB4MDAwMSwgMHgwODA0LCAweDE4MjMsIDB4Njg0YywKLQkweGQwYmMsIDB4MGRjOCwgMHg2ODYwLCAweDY4MmUsIDB4Njg1YywgMHg2ODJhLCAweDY4NTgsIDB4MDRjOCwKLQkweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMWUsIDB4MWQ3MCwgMHg2ODRjLCAweGQwYmMsIDB4MGQ1OCwKLQkweDY4NjAsIDB4NjgyZSwgMHg2ODVjLCAweDY4MmEsIDB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjE4NiwgMHgyMDA1LCAweDY4MzIsIDB4Njg1OCwKLQkweDA0NDAsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxNSwgMHgxOWE4LCAweDY4NGMsIDB4ZDBhYywKLQkweDA5OTAsIDB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwKLQkweGEwODAsIDB4MjE4NiwgMHgyMDA1LCAweDY4MzIsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4Njg1OCwKLQkweDAwODAsIDB4Njg0YywgMHhkMGFjLCAweDA5MDQsIDB4MTdjYiwgMHhhMDA2LCAweDY4MmUsIDB4NjgyYSwKLQkweDY4NTgsIDB4YTE4YywgMHgwMDBmLCAweGExODgsIDB4MjE4NiwgMHgyMTBkLCAweDY5MzIsIDB4MmQwOCwKLQkweDY5MWEsIDB4NjgyNiwgMHg2ODRjLCAweGMwZGQsIDB4Njg0ZSwgMHhhMDA2LCAweDY4MGEsIDB4Njk3YywKLQkweDY5MTIsIDB4Njk4MCwgMHg2OTE2LCAweDAwMDUsIDB4MjBlMSwgMHgwMDA3LCAweDIwZTEsIDB4MjAwMCwKLQkweDIwMDEsIDB4MDIwYSwgMHgyMDA0LCAweDgyZmYsIDB4MDFhOCwgMHhhMjgwLCAweDAwMDQsIDB4MDBkNiwKLQkweDIwNmMsIDB4Njg0YywgMHhkMGRjLCAweDExNTAsIDB4MDgwYywgMHgxN2JmLCAweDAxMzgsIDB4MDBkZSwKLQkweGEyODAsIDB4MDAwMCwgMHgyMDAzLCAweDAwMDIsIDB4YTAxNiwgMHgwMDIwLCAweDY4MDgsIDB4ODAwMCwKLQkweDY4MGEsIDB4MDBkZSwgMHgwMTI2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LCAweDIwOTEsIDB4MjIwMCwKLQkweDAwMmUsIDB4MDAzZSwgMHgwMDRlLCAweDcwMDAsIDB4YTAwNSwgMHgwMWQwLCAweDcxMGMsIDB4MjIwYSwKLQkweDgxMDgsIDB4MjMwYSwgMHg4MTA4LCAweDI0MGEsIDB4ODEwOCwgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwKLQkweDIwMDksIDB4YjAwMywgMHg3MTBlLCAweDcwMTAsIDB4YTEwMiwgMHhhMDgyLCAweDAwMDksIDB4MDExOCwKLQkweGEwODAsIDB4MDAxYiwgMHgxMTE4LCAweDIwMDksIDB4MDEzOCwgMHgyMDBhLCAweDAxMmUsIDB4MDAwNSwKLQkweDcyMDYsIDB4MjAwMSwgMHgxODY2LCAweDAwMDYsIDB4MjI2MCwgMHgwODA0LCAweDE5N2EsIDB4MDEyNiwKLQkweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwMDYsIDB4MjA5MSwgMHgyMjAwLCAweDAwMGUsIDB4MDA0ZSwKLQkweDAwM2UsIDB4MDAyZSwgMHgwMGQ2LCAweDAwYzYsIDB4MjQ2MCwgMHg2MTEwLCAweDIxNjgsIDB4NmE2MiwKLQkweDZiNWUsIDB4YTAwNSwgMHgwOTA0LCAweDE4YzgsIDB4NjgwOCwgMHhhMDA1LCAweDA5MDQsIDB4MThmZiwKLQkweDcwMDAsIDB4YTAwNSwgMHgxMTA4LCAweDA0ODgsIDB4NzAwYywgMHg3MTEwLCAweGExMDYsIDB4MTkwNCwKLQkweDE5MDcsIDB4NzAwNCwgMHhhNDA2LCAweDE1NDgsIDB4MjAwMSwgMHgwMDA1LCAweDIwMDQsIDB4ZDA4YywKLQkweDAxNjgsIDB4MDA0NiwgMHgwODBjLCAweDFhNmMsIDB4MDA0ZSwgMHgyNDYwLCAweDYwMTAsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjAwNCwgMHhhMDA1LCAweDA5MDQsIDB4MThmZiwgMHgwYzEwLCAweDIwMDEsIDB4MDIwNywKLQkweDIwMDQsIDB4ZDA5YywgMHgxZDQ4LCAweDc4MDQsIDB4YTA4NCwgMHg2MDAwLCAweDAxMjAsIDB4YTA4NiwKLQkweDYwMDAsIDB4MDEwOCwgMHgwYzA4LCAweDc4MTgsIDB4NjgxMiwgMHg3ODFjLCAweDY4MTYsIDB4NzgwMywKLQkweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHg2MTAwLCAweGExOGUsIDB4MDAwNCwKLQkweDE5MDQsIDB4MTkwNywgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHg4MGE3LCAweDA4MDQsIDB4MTkwNywKLQkweDY4MDgsIDB4YTAwNSwgMHgwNWEwLCAweDcwMDAsIDB4YTAwNSwgMHgwNTg4LCAweDcwMGMsIDB4NzExMCwKLQkweGExMDYsIDB4MTExOCwgMHg3MDA0LCAweGE0MDYsIDB4MTU1MCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwKLQkweGQwOGMsIDB4MDE2MCwgMHgwMDQ2LCAweDA4MGMsIDB4MWE2YywgMHgwMDRlLCAweDI0NjAsIDB4NjAxMCwKLQkweGEwODAsIDB4MDAwMiwgMHgyMDA0LCAweGEwMDUsIDB4MDFkMCwgMHgwYzI4LCAweDIwMDEsIDB4MDIwNywKLQkweDIwMDQsIDB4ZDA5YywgMHgxZDUwLCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LCAweGQwOGMsIDB4MWQ1MCwKLQkweDc4MDQsIDB4YTA4NCwgMHg2MDAwLCAweDAxMTgsIDB4YTA4NiwgMHg2MDAwLCAweDE5ZjAsIDB4NzgxOCwKLQkweDY4MTIsIDB4NzgxYywgMHg2ODE2LCAweDc4MDMsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4NjEwMCwKLQkweGExOGUsIDB4MDAwNCwgMHgxMTIwLCAweDIwMDksIDB4MDA0OCwgMHgwODBjLCAweDgwYTcsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwKLQkweDAwNTYsIDB4MDgwYywgMHgxZDg2LCAweDAwMjYsIDB4MDA1NiwgMHgyMDcxLCAweGFmZmQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwNTgwLCAweDcwMDQsIDB4YWMwNiwgMHgxMWY4LCAweDIwNzksIDB4MDAzMCwKLQkweDcwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDAxYzgsIDB4NzgwNCwgMHhkMGZjLCAweDExOTgsIDB4MjAwMSwKLQkweDAyMDcsIDB4MjAwNCwgMHhkMDljLCAweDFkYzAsIDB4NzgwMywgMHgwMDA0LCAweDc4MDQsIDB4ZDBhYywKLQkweDFkZTgsIDB4NzgwMywgMHgwMDAyLCAweDc4MDMsIDB4MDAwOSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwNywKLQkweDAwMDAsIDB4MDAxOCwgMHgwODBjLCAweDFhNmMsIDB4MDhkMCwgMHgwMTU2LCAweDIwYTksIDB4MDAwOSwKLQkweDIwMDksIDB4YjAwMywgMHgyMTA0LCAweGFjMDYsIDB4MTEwOCwgMHgyMDBhLCAweGExODgsIDB4MDAwMywKLQkweDFmMDQsIDB4MTk0MiwgMHgwMTVlLCAweDAwNWUsIDB4MDAyZSwgMHgyMDAxLCAweDAxNWQsIDB4MjAxYywKLQkweDgzMWEsIDB4MjMwMiwgMHgyMDAxLCAweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwKLQkweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NzAwYywKLQkweDcxMTAsIDB4YTEwNiwgMHgwOTA0LCAweDE5ZGQsIDB4MjEwNCwgMHg3MDA2LCAweDIwNjAsIDB4ODEwOCwKLQkweDIxMWMsIDB4ODEwOCwgMHgyMTI0LCAweDgxMDgsIDB4YTE4MiwgMHhiMDFlLCAweDAyMTAsIDB4MjAwOSwKLQkweGIwMDMsIDB4NzExMiwgMHg3MDBjLCAweGExMDYsIDB4MTEyOCwgMHgwODBjLCAweDI3NDQsIDB4MjAwMSwKLQkweDAxMzgsIDB4MjEwMiwgMHg4Y2ZmLCAweDA1ODgsIDB4NjAxMCwgMHgyMDY4LCAweDJkNTgsIDB4NjgyOCwKLQkweGE0MDYsIDB4MTU4MCwgMHg2ODJjLCAweGEzMDYsIDB4MTU2OCwgMHg3MDA0LCAweDIwNjAsIDB4NjAyMCwKLQkweGMwZDQsIDB4NjAyMiwgMHg2ODRjLCAweGQwZjQsIDB4MDEyOCwgMHg2ODE3LCAweGZmZmYsIDB4NjgxMywKLQkweGZmZmYsIDB4MDBkOCwgMHg2ODUwLCAweGQwZjQsIDB4MTEzMCwgMHg3ODAzLCAweDAwMDQsIDB4NjgxMCwKLQkweDc4MWEsIDB4NjgxNCwgMHg3ODFlLCAweDY4MjQsIDB4MjA1MCwgMHg2ODE4LCAweDIwNjAsIDB4NjgzMCwKLQkweDIwNDAsIDB4NjAzNCwgMHhhMGNjLCAweDAwMGYsIDB4MjAwOSwgMHgwMDExLCAweDA0YzksIDB4MDExOCwKLQkweDIwMDksIDB4MDAwMSwgMHgwNGE5LCAweDJkNTgsIDB4MDAwNSwgMHgwODBjLCAweDFjZWQsIDB4MDkwNCwKLQkweDE5NWYsIDB4MGNkMCwgMHg2MDIwLCAweGQwZDQsIDB4MDFiOCwgMHg2MDM4LCAweGE0MDIsIDB4NjAzNCwKLQkweGEzMDMsIDB4MDEwOCwgMHgxMjg4LCAweDY0M2EsIDB4NjMzNiwgMHg2YzJhLCAweDZiMmUsIDB4MDA0NiwKLQkweDAwMzYsIDB4MjQwMCwgMHg2YzdjLCAweGE0MDIsIDB4NjgxMiwgMHgyMzAwLCAweDZiODAsIDB4YTMwMywKLQkweDY4MTYsIDB4MDAzZSwgMHgwMDRlLCAweDAwMTgsIDB4MDgwYywgMHg5OGNiLCAweDA5ZjAsIDB4NjAxYywKLQkweGEwOGUsIDB4MDAwOCwgMHgwOTA0LCAweDE5ODUsIDB4YTA4ZSwgMHgwMDBhLCAweDA5MDQsIDB4MTk4NSwKLQkweDA4MGMsIDB4MjFhNiwgMHgxOTkwLCAweDA4MDQsIDB4MTk4NSwgMHg3MDAzLCAweDAwMDAsIDB4MDAwNSwKLQkweDhhZmYsIDB4MDkwNCwgMHgxYTQ2LCAweGEwM2UsIDB4MjczMCwgMHg2ODUwLCAweGQwZmMsIDB4MTFiOCwKLQkweGQwZjQsIDB4MTUyOCwgMHgwMGQ2LCAweDI4MDUsIDB4YWM2OCwgMHgyOTAwLCAweDAwMDIsIDB4MWEzMCwKLQkweDFhMTUsIDB4MWExNSwgMHgxYTMwLCAweDFhMzAsIDB4MWEyOSwgMHgxYTMwLCAweDFhMTUsIDB4MWEzMCwKLQkweDFhMWEsIDB4MWExYSwgMHgxYTMwLCAweDFhMzAsIDB4MWEzMCwgMHgxYTIxLCAweDFhMWEsIDB4NzgwMywKLQkweDAwMDQsIDB4YzBmYywgMHg2ODUyLCAweDZiNmMsIDB4NmE3MCwgMHg2ZDFjLCAweDZjMjAsIDB4MDBkNiwKLQkweGQ5OWMsIDB4MDU0OCwgMHgyODA1LCAweGFjNjgsIDB4NmYwOCwgMHg2ZTBjLCAweDA0MjAsIDB4YzBmNCwKLQkweDY4NTIsIDB4NmI2YywgMHg2YTcwLCAweDAwZDYsIDB4MDQyOCwgMHg2YjA4LCAweDZhMGMsIDB4NmQwMCwKLQkweDZjMDQsIDB4MDBjOCwgMHg2YjEwLCAweDZhMTQsIDB4NmQwMCwgMHg2YzA0LCAweDZmMDgsIDB4NmUwYywKLQkweDAwOTAsIDB4MDBkZSwgMHgwMGQ2LCAweDY4MzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAxZSwKLQkweDExMzgsIDB4MDBkZSwgMHgwODBjLCAweDIxNDgsIDB4MTkwNCwgMHgxOWUwLCAweGEwMGUsIDB4MDBiMCwKLQkweDAwZGUsIDB4MDgwYywgMHgxNGY2LCAweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwKLQkweDdlM2UsIDB4NzkwMiwgMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHgwMGRlLCAweDY4MjgsIDB4YTMwMCwKLQkweDY4MmEsIDB4NjgyYywgMHhhMjAxLCAweDY4MmUsIDB4MDgwYywgMHgyMTQ4LCAweDAwMDUsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDgwYywgMHgxZTFhLCAweDcwMDQsIDB4MjA2MCwgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwKLQkweDcwMDMsIDB4MDAwMCwgMHgwODBjLCAweDFkMjIsIDB4MDgwYywgMHg5NTk2LCAweDAxNzAsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHg2OTdjLCAweDY5MTIsIDB4Njk4MCwgMHg2OTE2LCAweDY4MmIsIDB4ZmZmZiwKLQkweDY4MmYsIDB4ZmZmZiwgMHg2ODUwLCAweGMwYmQsIDB4Njg1MiwgMHgwMGRlLCAweDA4MGMsIDB4OTI5YywKLQkweDA4MDQsIDB4MWM1ZSwgMHgwODBjLCAweDE0ZjYsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MDAwNiwKLQkweDAwMTYsIDB4MmI2OCwgMHg2ODE4LCAweDIwNjAsIDB4NzkwNCwgMHg3ODAzLCAweDAwMDIsIDB4YTE4NCwKLQkweDA3MDAsIDB4MTk3OCwgMHhhMTg0LCAweDAwMDMsIDB4YTA4NiwgMHgwMDAzLCAweDBkNTgsIDB4NzAwMCwKLQkweDAwMDIsIDB4MWE4OSwgMHgxYThmLCAweDFiOTIsIDB4MWMzOSwgMHgxYzRkLCAweDFhODksIDB4MWE4OSwKLQkweDFhODksIDB4NzgwNCwgMHhkMDljLCAweDE5MDQsIDB4MWM1ZSwgMHgwODBjLCAweDE0ZjYsIDB4ODAwMSwKLQkweDcwMDIsIDB4YTE4NCwgMHgwODgwLCAweDExOTAsIDB4ZDE5YywgMHgxOTA0LCAweDFiMjAsIDB4OGFmZiwKLQkweDA5MDQsIDB4MWIyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgxOWUwLCAweDA5MDQsIDB4MWM1ZSwKLQkweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDE5ZTAsIDB4MDgwNCwgMHgxYzVlLCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHhkMWJjLCAweDE5MDQsIDB4MWIwMCwgMHgwMDI2LCAweDAwMzYsIDB4N2MyMCwKLQkweDdkMjQsIDB4N2UzMCwgMHg3ZjM0LCAweDc4MTgsIDB4NjgxMiwgMHg3ODFjLCAweDY4MTYsIDB4MjAwMSwKLQkweDAyMDEsIDB4MjAwNCwgMHhhMDA1LCAweDAxNDAsIDB4NzgwOCwgMHhkMGVjLCAweDExMjgsIDB4NzgwMywKLQkweDAwMDksIDB4NzAwMywgMHgwMDA0LCAweDAwMTAsIDB4MDgwYywgMHgxYzYyLCAweDZiMjgsIDB4NmEyYywKLQkweDI0MDAsIDB4Njg2ZSwgMHhhMzFhLCAweDI1MDAsIDB4Njg3MiwgMHhhMjEzLCAweDZiMmEsIDB4NmEyZSwKLQkweDAwYzYsIDB4NzAwNCwgMHgyMDYwLCAweDYwMjAsIDB4ZDBmNCwgMHgxMTEwLCAweDYzM2EsIDB4NjIzNiwKLQkweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDZlMWUsIDB4NmYyMiwgMHgwODBjLCAweDIxNWUsIDB4MmEwMCwKLQkweDY4MjYsIDB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwgMHg2ODUwLCAweGMwZmQsIDB4Njg1MiwKLQkweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDExNDgsIDB4Njg0YywgMHhkMGU0LCAweDAxMzAsIDB4NzAwNCwKLQkweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4ODBhNywgMHg3MDAwLCAweGEwODYsIDB4MDAwNCwKLQkweDA5MDQsIDB4MWM1ZSwgMHg3MDAzLCAweDAwMDAsIDB4MDgwYywgMHgxOTVmLCAweDA4MDQsIDB4MWM1ZSwKLQkweDAwNTYsIDB4N2QwYywgMHhkNWJjLCAweDExMTAsIDB4MDgwYywgMHhhYzczLCAweDAwNWUsIDB4MDgwYywKLQkweDFkMjIsIDB4MDBmNiwgMHg3MDA0LCAweDIwNzgsIDB4MDgwYywgMHg1MDI5LCAweDAxMTgsIDB4NzgyMCwKLQkweGMwZjUsIDB4NzgyMiwgMHgwMGZlLCAweDY4MmIsIDB4ZmZmZiwgMHg2ODJmLCAweGZmZmYsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHg2OTdjLCAweDc5MWEsIDB4Njk4MCwgMHg3OTFlLCAweDA4MDQsIDB4MWM1ZSwKLQkweDcwMDQsIDB4MDBjNiwgMHgyMDYwLCAweDYwMjAsIDB4MDBjZSwgMHhkMGY0LCAweDAxMjgsIDB4NjgwOCwKLQkweDgwMDEsIDB4NjgwYSwgMHgwODA0LCAweDFjNWUsIDB4NzgxOCwgMHg2ODEyLCAweDdhMWMsIDB4NmExNiwKLQkweGQxOWMsIDB4MDE2MCwgMHhhMjA1LCAweDAxNTAsIDB4NzAwNCwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwKLQkweGEwODQsIDB4ZmZmZCwgMHhhMDg2LCAweDAwMDgsIDB4MTkwNCwgMHgxYWE2LCAweDY4NGMsIDB4YzBmNSwKLQkweDY4NGUsIDB4NzgxNCwgMHhhMDA1LCAweDExODAsIDB4NzAwMywgMHgwMDAwLCAweDY4MDgsIDB4ODAwMSwKLQkweDY4MGEsIDB4MTEzMCwgMHg3MDA0LCAweDIwNjAsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4ODBhNywKLQkweDA4MGMsIDB4MTk1ZiwgMHgwODA0LCAweDFjNWUsIDB4NzgxOCwgMHg2ODEyLCAweDc4MWMsIDB4NjgxNiwKLQkweDc4MTQsIDB4NzkwOCwgMHhhMThjLCAweDBmZmYsIDB4YTE4OCwgMHgwMDA3LCAweDgxMTQsIDB4ODIxNCwKLQkweDgyMTQsIDB4YTEwYSwgMHg4MTA0LCAweDgwMDQsIDB4ODAwNCwgMHhhMjBhLCAweDgxMGIsIDB4ODEwYiwKLQkweDgxMGIsIDB4MDgwYywgMHgxZGE1LCAweDc4MDMsIDB4MDAwNCwgMHg3ODBmLCAweGZmZmYsIDB4NzgwMywKLQkweDAwMDEsIDB4NzgwNCwgMHhkMGZjLCAweDBkZTgsIDB4NzgwMywgMHgwMDAyLCAweDc4MDMsIDB4MDAwNCwKLQkweDc4MGYsIDB4MDBmNiwgMHg3MDA0LCAweDcwMDcsIDB4MDAwMCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwKLQkweDA4MGMsIDB4ODBhNywgMHgwODBjLCAweDFkZDcsIDB4MDk1OCwgMHg3OTA4LCAweGQxZWMsIDB4MTExOCwKLQkweDIwMDksIDB4MDAwOSwgMHgwMDEwLCAweDIwMDksIDB4MDAxOSwgMHg3OTAyLCAweDcwMDMsIDB4MDAwMywKLQkweDA4MDQsIDB4MWM1ZSwgMHg4MDAxLCAweDcwMDIsIDB4ZDE5NCwgMHgwMWE4LCAweDc4MDQsIDB4ZDBmYywKLQkweDE5MDQsIDB4MWMyYywgMHhkMDljLCAweDAxMzAsIDB4NzgwNCwgMHhkMGZjLCAweDE5MDQsIDB4MWE3NCwKLQkweGQwOWMsIDB4MTFhOCwgMHg4YWZmLCAweDA5MDQsIDB4MWM1ZSwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywKLQkweDE5ZTAsIDB4MDgwNCwgMHgxYzVlLCAweGExODQsIDB4MDg4OCwgMHgxMTQ4LCAweDhhZmYsIDB4MDkwNCwKLQkweDFjNWUsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MTllMCwgMHgwODA0LCAweDFjNWUsIDB4NzgxOCwKLQkweDY4MTIsIDB4N2ExYywgMHg2YTE2LCAweGEyMDUsIDB4MDkwNCwgMHgxYjNlLCAweDc4MDMsIDB4MDAwNCwKLQkweDcwMDMsIDB4MDAwMCwgMHhkMWJjLCAweDE5MDQsIDB4MWMwZiwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAyOSwgMHgxMTE4LCAweGQxOWMsIDB4MTkwNCwgMHgxYjNlLCAweDAwMjYsIDB4MDAzNiwKLQkweDdjMjAsIDB4N2QyNCwgMHg3ZTMwLCAweDdmMzQsIDB4NzgxOCwgMHg2ODEyLCAweDc4MWMsIDB4NjgxNiwKLQkweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweGEwMDUsIDB4MDE0MCwgMHg3ODA4LCAweGQwZWMsIDB4MTEyOCwKLQkweDc4MDMsIDB4MDAwOSwgMHg3MDAzLCAweDAwMDQsIDB4MDAyMCwgMHgwMDE2LCAweDA4MGMsIDB4MWM2MiwKLQkweDAwMWUsIDB4NmIyOCwgMHg2YTJjLCAweDA4MGMsIDB4MjE1ZSwgMHgwMGQ2LCAweDI4MDUsIDB4YWM2OCwKLQkweDYwMzQsIDB4ZDA5YywgMHgxMTI4LCAweDY4MDgsIDB4YTMxYSwgMHg2ODBjLCAweGEyMTMsIDB4MDAyMCwKLQkweDY4MTAsIDB4YTMxYSwgMHg2ODE0LCAweGEyMTMsIDB4MDBkZSwgMHhkMTk0LCAweDA5MDQsIDB4MWFjOCwKLQkweDJhMDAsIDB4NjgyNiwgMHgyYzAwLCAweDY4MWEsIDB4MjgwMCwgMHg2ODMyLCAweDY4MDgsIDB4ODAwMSwKLQkweDY4MGEsIDB4NmIyYSwgMHg2YTJlLCAweDAwM2UsIDB4MDAyZSwgMHgwODA0LCAweDFiNTAsIDB4MDA1NiwKLQkweDdkMGMsIDB4MDgwYywgMHhhYzczLCAweDAwNWUsIDB4MDgwYywgMHgxZDIyLCAweDAwZjYsIDB4NzAwNCwKLQkweDIwNzgsIDB4MDgwYywgMHg1MDI5LCAweDAxMTgsIDB4NzgyMCwgMHhjMGY1LCAweDc4MjIsIDB4MDBmZSwKLQkweDY4MmIsIDB4ZmZmZiwgMHg2ODJmLCAweGZmZmYsIDB4NjgwOCwgMHg4MDAxLCAweDY4MGEsIDB4Njk3YywKLQkweDc5MWEsIDB4Njk4MCwgMHg3OTFlLCAweDA0OTAsIDB4NzgwNCwgMHhkMDljLCAweDA5MDQsIDB4MWE3NCwKLQkweDdjMjAsIDB4NzgyNCwgMHhhNDA1LCAweDE5MDQsIDB4MWE3NCwgMHg3ODAzLCAweDAwMDIsIDB4MDgwNCwKLQkweDFiYjcsIDB4NzgwMywgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHg3MDA0LCAweGEwMGQsIDB4MDE1MCwKLQkweDY4MDgsIDB4ODAwMSwgMHg2ODBhLCAweDExMzAsIDB4NzAwNCwgMHgyMDYwLCAweDIwMDksIDB4MDA0OCwKLQkweDA4MGMsIDB4ODBhNywgMHgwODBjLCAweDE5NWYsIDB4MDA4OCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDYwMTAsIDB4YTAwNSwgMHgwZGEwLCAweDIwNjgsIDB4NjgwOCwKLQkweDgwMDAsIDB4NjgwYSwgMHg2YzI4LCAweDZiMmMsIDB4MDgwYywgMHgxOTdhLCAweDAwMWUsIDB4MDAwZSwKLQkweDAxMmUsIDB4MDAwNSwgMHg3MDBjLCAweDcxMTAsIDB4YTEwNiwgMHgwOTA0LCAweDFjZTEsIDB4NzAwNCwKLQkweDAwMTYsIDB4MjEwYywgMHhhMTA2LCAweDAwMWUsIDB4MDkwNCwgMHgxY2UxLCAweDAwZDYsIDB4MDBjNiwKLQkweDIxNmMsIDB4MmQwMCwgMHhhMDA1LCAweDA5MDQsIDB4MWNkZiwgMHg2ODIwLCAweGQwZDQsIDB4MTkwNCwKLQkweDFjZGYsIDB4NjgxMCwgMHgyMDY4LCAweDY4NTAsIDB4ZDBmYywgMHgwNTU4LCAweDgxMDgsIDB4MjEwNCwKLQkweDZiMmMsIDB4YTMwNiwgMHgxOTA0LCAweDFjZGYsIDB4ODEwOCwgMHgyMTA0LCAweDZhMjgsIDB4YTIwNiwKLQkweDE5MDQsIDB4MWNkZiwgMHg2ODUwLCAweGMwZmMsIDB4YzBmNSwgMHg2ODUyLCAweDY4NmMsIDB4NzgyMiwKLQkweDY4NzAsIDB4NzgyNiwgMHg2ODFjLCAweDc4MzIsIDB4NjgyMCwgMHg3ODM2LCAweDY4MTgsIDB4MjA2MCwKLQkweDYwMzQsIDB4ZDA5YywgMHgwMTUwLCAweDY4MzAsIDB4MjAwNSwgMHgwMGQ2LCAweGFjNjgsIDB4NjgwOCwKLQkweDc4M2EsIDB4NjgwYywgMHg3ODNlLCAweDAwZGUsIDB4MDRhMCwgMHhhMDA2LCAweDc4M2EsIDB4NzgzZSwKLQkweDA0ODAsIDB4ODEwOCwgMHgyMTA0LCAweGEwMDUsIDB4MTU5MCwgMHg4MTA4LCAweDIxMDQsIDB4YTAwNSwKLQkweDE1NzAsIDB4Njg1MCwgMHhjMGY1LCAweDY4NTIsIDB4NjgzMCwgMHgyMDA1LCAweDY5MTgsIDB4YTE2MCwKLQkweGExODAsIDB4MDAwZCwgMHgyMDA0LCAweGQwOWMsIDB4MTE3MCwgMHg2MDA4LCAweDc4MjIsIDB4Njg2ZSwKLQkweDYwMGMsIDB4NzgyNiwgMHg2ODcyLCAweDYwMDAsIDB4NzgzMiwgMHg2MDA0LCAweDc4MzYsIDB4YTAwNiwKLQkweDc4M2EsIDB4NzgzZSwgMHgwMDcwLCAweDYwMTAsIDB4NzgyMiwgMHg2ODZlLCAweDYwMTQsIDB4NzgyNiwKLQkweDY4NzIsIDB4NjAwMCwgMHg3ODMyLCAweDYwMDQsIDB4NzgzNiwgMHg2MDA4LCAweDc4M2EsIDB4NjAwYywKLQkweDc4M2UsIDB4NjgxMCwgMHg3ODFhLCAweDY4MTQsIDB4NzgxZSwgMHg3ODAzLCAweDAwMTEsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDAwNSwgMHgyMDExLCAweDAyMDEsIDB4MjAwOSwgMHgwMDNjLCAweDIyMDQsIDB4YTAwNSwKLQkweDExMTgsIDB4ODEwOSwgMHgxZGQ4LCAweDAwMDUsIDB4MDAwNSwgMHgwY2ExLCAweDAxZTAsIDB4NzkwOCwKLQkweGQxZWMsIDB4MTE2MCwgMHgwODBjLCAweDFkZDcsIDB4MDE0OCwgMHg3ODAzLCAweDAwMDksIDB4NzkwNCwKLQkweGQxZmMsIDB4MGRlOCwgMHg3ODAzLCAweDAwMDYsIDB4MGMyOSwgMHgwMTY4LCAweDc4MGMsIDB4ZDBhNCwKLQkweDExNTAsIDB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MWRkNywgMHgwMTQwLCAweDc4MDMsIDB4MDAxOSwKLQkweDcwMDMsIDB4MDAwMywgMHgwMDE4LCAweDAwYjEsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4MjIwMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywgMHgxMTUwLCAweDcwMGMsIDB4NzExMCwKLQkweGExMDYsIDB4MDEzMCwgMHgyMGUxLCAweDkwMjgsIDB4NzAwZiwgMHhiMDAzLCAweDcwMTMsIDB4YjAwMywKLQkweDAxMmUsIDB4MDAwNSwgMHgwMGM2LCAweDA4MGMsIDB4NTc0ZiwgMHgxNTUwLCAweDIwMDEsIDB4MDE2MCwKLQkweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDAwLCAweDIwMTEsIDB4MDBjOCwKLQkweGUwMDAsIDB4ZTAwMCwgMHg4MjExLCAweDFkZTAsIDB4MDgwYywgMHgxZDdlLCAweDcwMGMsIDB4NzExMCwKLQkweGExMDYsIDB4MDE5MCwgMHgyMTA0LCAweGEwMDUsIDB4MDEzMCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2MCwKLQkweDYwMDgsIDB4ODAwMSwgMHg2MDBhLCAweGExODgsIDB4MDAwMywgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwKLQkweDIwMDksIDB4YjAwMywgMHg3MTEyLCAweDBjNTAsIDB4MDgwYywgMHg1N2QxLCAweDAwY2UsIDB4MDAwNSwKLQkweDA0YTksIDB4MjBlMSwgMHg5MDI4LCAweDcwMGMsIDB4NzExMCwgMHhhMTA2LCAweDAxZDAsIDB4MjEwNCwKLQkweGEwMDUsIDB4MDEzMCwgMHgyMDYwLCAweDYwMTAsIDB4MjA2MCwgMHg2MDA4LCAweDgwMDEsIDB4NjAwYSwKLQkweGExODgsIDB4MDAwMywgMHhhMTgyLCAweGIwMWUsIDB4MDIxMCwgMHgyMDA5LCAweGIwMDMsIDB4NzExMiwKLQkweDcwMGMsIDB4YTEwNiwgMHgxZDQwLCAweDA4MGMsIDB4Mjc0NCwgMHgyMDAxLCAweDAxMzgsIDB4MjEwMiwKLQkweDBjMTAsIDB4MjAwMSwgMHgwMTVkLCAweDIwMGMsIDB4ODEwYSwgMHgyMTAyLCAweDIwMDEsIDB4MDE2MCwKLQkweDI1MDIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MDBjZSwgMHgwMDA1LCAweDIwZTEsIDB4OTAyOCwKLQkweDIwMDEsIDB4MDE1ZCwgMHgyMDBjLCAweDgxMGEsIDB4MjEwMiwgMHgwMDA1LCAweDIwMDEsIDB4MDEzOCwKLQkweDIwMTQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDE2MCwgMHgyMDJjLCAweDIwMDMsIDB4MDAwMCwKLQkweDIwMjEsIDB4YjAxNSwgMHgyMDAxLCAweDAxNDEsIDB4MjAxYywgMHhkM2RjLCAweDExNjgsIDB4MjAwMSwKLQkweDAxMDksIDB4MjAxYywgMHhhMzljLCAweDAwNDgsIDB4MTEzOCwgMHgyMDAxLCAweDAxMTEsIDB4MjAxYywKLQkweDgzZmYsIDB4MTExMCwgMHg4NDIxLCAweDFkNzAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDIwMCwKLQkweDc4MDgsIDB4YTA4NCwgMHhmMDAwLCAweGExMGQsIDB4MDhjOSwgMHgyMDE5LCAweDUwMDAsIDB4ODMxOSwKLQkweDAxNjgsIDB4MjAwMSwgMHhiMDFlLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAwLCAweDAxMzgsIDB4MjAwMSwKLQkweDAwMjEsIDB4ZDBmYywgMHgwZGEwLCAweDA4MGMsIDB4MWZmNCwgMHgwYzc4LCAweDIwZTEsIDB4NzAwMCwKLQkweDczMjQsIDB4NzQyMCwgMHg3MDI4LCAweDcwMjgsIDB4NzQyNiwgMHg3MDM3LCAweDAwMDEsIDB4ODEwZiwKLQkweDcxMmUsIDB4NzAyZiwgMHgwMTAwLCAweDcwMzcsIDB4MDAwOCwgMHg3MzI2LCAweDc0MjIsIDB4MjAwMSwKLQkweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMGVlLCAweDAwMDUsIDB4NzkwOCwKLQkweGExOGMsIDB4MGZmZiwgMHhhMTgyLCAweDAwMDksIDB4MDIxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDA4OCwKLQkweDIwMDEsIDB4MDIwYSwgMHg4MWZmLCAweDAxMzAsIDB4MjBlMSwgMHg2MDAwLCAweDIwMGMsIDB4MjAwYywKLQkweDIwMGMsIDB4MjAwYywgMHgyMGUxLCAweDcwMDAsIDB4MjAwYywgMHgyMDBjLCAweDcwMDMsIDB4MDAwMCwKLQkweGEwMDYsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDAxNiwgMHgwMDI2LCAweDIwNzEsIDB4YWZmZCwKLQkweDIwNzksIDB4MDAzMCwgMHgyMDExLCAweDAwNTAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDFhOCwKLQkweDgyMTEsIDB4MDE4OCwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMDhjLCAweDBkYzgsIDB4NzkwNCwKLQkweGExOGMsIDB4MDc4MCwgMHgwMDE2LCAweDA4MGMsIDB4MWE2YywgMHgwMDFlLCAweDgxZmYsIDB4MTExOCwKLQkweDIwMTEsIDB4MDA1MCwgMHgwYzQ4LCAweGEwODUsIDB4MDAwMSwgMHgwMDJlLCAweDAwMWUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg3ODAzLCAweDAwMDQsIDB4MjAwOSwgMHgwMDY0LCAweDc4MDQsIDB4ZDBhYywKLQkweDA5MDQsIDB4MWU2NiwgMHg4MTA5LCAweDFkZDAsIDB4MjAwOSwgMHgwMTAwLCAweDIxMGMsIDB4YTE4YSwKLQkweDAwMDMsIDB4MGEwYywgMHgxNGY2LCAweDA4MGMsIDB4MjBmMiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwKLQkweGFmZWMsIDB4MjA3OSwgMHgwMDEwLCAweDcwMDQsIDB4YTA4NiwgMHgwMDAwLCAweDA1MzgsIDB4NzgwMCwKLQkweDAwMDYsIDB4NzgyMCwgMHgwMDA2LCAweDc4MzAsIDB4MDAwNiwgMHg3ODM0LCAweDAwMDYsIDB4NzgzOCwKLQkweDAwMDYsIDB4NzgzYywgMHgwMDA2LCAweDc4MDMsIDB4MDAwNCwgMHhlMDAwLCAweGUwMDAsIDB4MjA3OSwKLQkweDAwMzAsIDB4NzgwNCwgMHhkMGFjLCAweDE5MGMsIDB4MTRmNiwgMHgyMDc5LCAweDAwMTAsIDB4MDAwZSwKLQkweDc4M2UsIDB4MDAwZSwgMHg3ODNhLCAweDAwMGUsIDB4NzgzNiwgMHgwMDBlLCAweDc4MzIsIDB4MDAwZSwKLQkweDc4MjIsIDB4MDAwZSwgMHg3ODAyLCAweDAwZmUsIDB4MDBlZSwgMHgwMDMwLCAweDAwZmUsIDB4MDBlZSwKLQkweDc4MDQsIDB4ZDBhYywgMHgxOTBjLCAweDE0ZjYsIDB4MDgwYywgMHg2ZDBkLCAweDAwMDUsIDB4MDBlNiwKLQkweDIwNzEsIDB4YjAxZSwgMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZDYsIDB4YTI4MCwKLQkweDAwMDQsIDB4MjA2YywgMHg2OTRjLCAweGQxZGMsIDB4MTkwNCwgMHgxZWU0LCAweDY5MzQsIDB4YTE4NCwKLQkweDAwMDcsIDB4MDAwMiwgMHgxZTgyLCAweDFlY2YsIDB4MWU4MiwgMHgxZTgyLCAweDFlODIsIDB4MWViNiwKLQkweDFlOTUsIDB4MWU4NCwgMHgwODBjLCAweDE0ZjYsIDB4Njg0YywgMHhkMGI0LCAweDA5MDQsIDB4MWZjYywKLQkweDY4NjAsIDB4NjgyZSwgMHg2ODE2LCAweDY4NWMsIDB4NjgyYSwgMHg2ODEyLCAweDY4N2MsIDB4NjgwYSwKLQkweDY4ODAsIDB4NjgwZSwgMHg2OTU4LCAweDA4MDQsIDB4MWVkNywgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAxZSwgMHgxZDM4LCAweDY4NGMsIDB4ZDBiNCwgMHgwOTA0LCAweDFmY2MsIDB4Njg2MCwKLQkweDY4MmUsIDB4NjgxNiwgMHg2ODVjLCAweDY4MmEsIDB4NjgxMiwgMHg2ODdjLCAweDY4MGEsIDB4Njg4MCwKLQkweDY4MGUsIDB4NjgwNCwgMHg2ODFhLCAweGEwODAsIDB4MDAwZCwgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwKLQkweGEwODAsIDB4MjE4NiwgMHgyMDA1LCAweDY4MzIsIDB4Njk1OCwgMHgwNDUwLCAweGExOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAxNSwgMHgxNTQ4LCAweDY4NGMsIDB4ZDBiNCwgMHgwOTA0LCAweDFmY2MsIDB4NjgwNCwKLQkweDY4MWEsIDB4YTA4MCwgMHgwMDBkLCAweDIwMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4MjE4NiwKLQkweDIwMDUsIDB4NjgzMiwgMHg2OTU4LCAweGEwMDYsIDB4NjgyZSwgMHg2ODJhLCAweDAwODgsIDB4Njg0YywKLQkweGQwYjQsIDB4MDkwNCwgMHgxYTQ3LCAweDY5NTgsIDB4YTAwNiwgMHg2ODJlLCAweDY4MmEsIDB4MmQwMCwKLQkweDY4MWEsIDB4NjgzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMTg2LCAweDIwMDUsIDB4NjgzMiwKLQkweDY5MjYsIDB4Njg0YywgMHhjMGRkLCAweDY4NGUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwKLQkweDAwMjAsIDB4NzgwNCwgMHhkMGZjLCAweDE5MGMsIDB4MWZmNCwgMHgwMGU2LCAweDAwZDYsIDB4MjA3MSwKLQkweGIwMWUsIDB4NzAwMCwgMHhhMDA1LCAweDE5MDQsIDB4MWY0YywgMHgwMGM2LCAweDcyMDYsIDB4YTI4MCwKLQkweDAwMDQsIDB4MjA1YywgMHg3MDA0LCAweDIwNjgsIDB4NzgwMywgMHgwMDA0LCAweDY4MTgsIDB4MDBkNiwKLQkweDIwNjgsIDB4Njg2YywgMHg3ODEyLCAweDY4OTAsIDB4MDBmNiwgMHgyMGUxLCAweDkwNDAsIDB4MjA3OSwKLQkweDAyMDAsIDB4NzgxYSwgMHgyMDc5LCAweDAxMDAsIDB4ODAwNCwgMHg3OGQ2LCAweDAwZmUsIDB4MDBkZSwKLQkweDJiNjgsIDB4NjgyNCwgMHgyMDUwLCAweDY4MTgsIDB4MjA2MCwgMHg2ODMwLCAweDIwNDAsIDB4NjAzNCwKLQkweGEwY2MsIDB4MDAwZiwgMHg2OTA4LCAweDc5MWEsIDB4NzExNiwgMHg2ODBjLCAweDc4MWUsIDB4NzAxYSwKLQkweGEwMDYsIDB4NzAwZSwgMHg3MDEyLCAweDcwMDQsIDB4NjkyYywgMHg2ODE0LCAweGExMDYsIDB4MTEyMCwKLQkweDY5MjgsIDB4NjgxMCwgMHhhMTA2LCAweDAxNTgsIDB4MDAzNiwgMHgwMDQ2LCAweDZiMTQsIDB4NmMxMCwKLQkweDA4MGMsIDB4MjFhNiwgMHgwMDRlLCAweDAwM2UsIDB4MDExMCwgMHgwMGNlLCAweDAwYTgsIDB4OGFmZiwKLQkweDExMjAsIDB4MDBjZSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3OCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzksIDB4MDAyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDA1OSwgMHgwMTE4LCAweDIwMDksIDB4MDAwMSwKLQkweDAwMzksIDB4MDEyZSwgMHgwMGNlLCAweGEwMDYsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LCAweDhhZmYsIDB4MDkwNCwKLQkweDFmYzUsIDB4NzAwYywgMHg3MjE0LCAweGEyM2EsIDB4NzAxMCwgMHg3MjE4LCAweGEyMDMsIDB4MGEwNCwKLQkweDFmYzQsIDB4YTcwNSwgMHgwOTA0LCAweDFmYzQsIDB4YTAzZSwgMHgyNzMwLCAweDY4NTAsIDB4ZDBmYywKLQkweDExYTgsIDB4MDBkNiwgMHgyODA1LCAweGFjNjgsIDB4MjkwMCwgMHgwMDAyLCAweDFmYTcsIDB4MWY4YywKLQkweDFmOGMsIDB4MWZhNywgMHgxZmE3LCAweDFmYTAsIDB4MWZhNywgMHgxZjhjLCAweDFmYTcsIDB4MWY5MSwKLQkweDFmOTEsIDB4MWZhNywgMHgxZmE3LCAweDFmYTcsIDB4MWY5OCwgMHgxZjkxLCAweGMwZmMsIDB4Njg1MiwKLQkweDZiNmMsIDB4NmE3MCwgMHg2ZDFjLCAweDZjMjAsIDB4ZDk5YywgMHgwNTI4LCAweDAwZDYsIDB4MjgwNSwKLQkweGFjNjgsIDB4NmYwOCwgMHg2ZTBjLCAweDAwZjAsIDB4NmIwOCwgMHg2YTBjLCAweDZkMDAsIDB4NmMwNCwKLQkweDAwYzgsIDB4NmIxMCwgMHg2YTE0LCAweDZkMDAsIDB4NmMwNCwgMHg2ZjA4LCAweDZlMGMsIDB4MDA5MCwKLQkweDAwZGUsIDB4MDBkNiwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMWUsIDB4MTEzOCwKLQkweDAwZGUsIDB4MDgwYywgMHgyMTQ4LCAweDE5MDQsIDB4MWY1NiwgMHhhMDBlLCAweDAwZjAsIDB4MDBkZSwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMGRlLCAweDdiMjIsIDB4N2EyNiwgMHg3ZDMyLCAweDdjMzYsIDB4N2YzYSwKLQkweDdlM2UsIDB4NzkwMiwgMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHg2ODI4LCAweGEzMDAsIDB4NjgyYSwKLQkweDY4MmMsIDB4YTIwMSwgMHg2ODJlLCAweDcwMGMsIDB4YTMwMCwgMHg3MDBlLCAweDcwMTAsIDB4YTIwMSwKLQkweDcwMTIsIDB4MDgwYywgMHgyMTQ4LCAweDAwMDgsIDB4YTAwNiwgMHgwMDJlLCAweDAwM2UsIDB4MDA0ZSwKLQkweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwMDUsIDB4MDgwYywgMHgxNGY2LCAweDAwMjYsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwKLQkweDAxMTgsIDB4Njg1MCwgMHhjMGJkLCAweDY4NTIsIDB4MDBkZSwgMHgwODBjLCAweDkyOWMsIDB4MjBlMSwKLQkweDkwNDAsIDB4MDgwYywgMHg3Y2I4LCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweDdhZTksIDB4MDgwYywKLQkweDZkMGQsIDB4MDAyZSwgMHgwODA0LCAweDIwYWQsIDB4MDEyNiwgMHgyMDkxLCAweDI0MDAsIDB4MDAwNiwKLQkweDAwMTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgyMDc5LCAweDAwMjAsIDB4MjA3MSwKLQkweGIwMWUsIDB4MmI2OCwgMHg2ODE4LCAweDIwNjAsIDB4NzkwNCwgMHg3ODAzLCAweDAwMDIsIDB4YTE4NCwKLQkweDA3MDAsIDB4MTkyMCwgMHg3MDAwLCAweDAwMDIsIDB4MjBhZCwgMHgyMDEwLCAweDIwODAsIDB4MjBhYiwKLQkweDgwMDEsIDB4NzAwMiwgMHhkMTljLCAweDExNzAsIDB4OGFmZiwgMHgwNWQwLCAweDIwMDksIDB4MDAwMSwKLQkweDA4MGMsIDB4MWY1MCwgMHgwOTA0LCAweDIwYWQsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MWY1MCwKLQkweDA4MDQsIDB4MjBhZCwgMHg3ODAzLCAweDAwMDQsIDB4ZDE5NCwgMHgwMTQ4LCAweDY4NTAsIDB4YzBmYywKLQkweDY4NTIsIDB4OGFmZiwgMHgxMWQ4LCAweDY4NGMsIDB4YzBmNSwgMHg2ODRlLCAweDAwYjgsIDB4MDAyNiwKLQkweDAwMzYsIDB4NmIyOCwgMHg2YTJjLCAweDc4MjAsIDB4Njg2ZSwgMHhhMzFhLCAweDc4MjQsIDB4Njg3MiwKLQkweGEyMTMsIDB4NzgzMCwgMHg2ODFlLCAweDc4MzQsIDB4NjgyMiwgMHg2YjJhLCAweDZhMmUsIDB4MDAzZSwKLQkweDAwMmUsIDB4MDgwYywgMHgyMTVlLCAweDY4NTAsIDB4YzBmZCwgMHg2ODUyLCAweDJhMDAsIDB4NjgyNiwKLQkweDJjMDAsIDB4NjgxYSwgMHgyODAwLCAweDY4MzIsIDB4NzAwMywgMHgwMDAwLCAweDA4MDQsIDB4MjBhZCwKLQkweDAwZjYsIDB4MDAyNiwgMHg3ODFjLCAweDAwMDYsIDB4NzgxOCwgMHgwMDA2LCAweDIwNzksIDB4MDEwMCwKLQkweDdhMTQsIDB4YTI4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAwMzYsIDB4MjAxOSwKLQkweDEwMDAsIDB4ODMxOSwgMHgwOTBjLCAweDE0ZjYsIDB4NzgyMCwgMHhkMGJjLCAweDFkZDAsIDB4MDAzZSwKLQkweDc5YzgsIDB4MDAwZSwgMHhhMTAyLCAweDAwMWUsIDB4MDAwNiwgMHgwMDE2LCAweDc5YzQsIDB4MDAwZSwKLQkweGExMDMsIDB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsIDB4YTI4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAxMiwKLQkweDc4MTYsIDB4MDAyZSwgMHgwMGZlLCAweDc4MDMsIDB4MDAwOCwgMHg3MDAzLCAweDAwMDAsIDB4MDQ2OCwKLQkweDgwMDEsIDB4NzAwMiwgMHhkMTk0LCAweDAxNjgsIDB4NzgwNCwgMHhkMGZjLCAweDE5MDQsIDB4MjAwNCwKLQkweGQxOWMsIDB4MTFmOCwgMHg4YWZmLCAweDA1MDgsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MWY1MCwKLQkweDAwZTAsIDB4MDAyNiwgMHgwMDM2LCAweDZiMjgsIDB4NmEyYywgMHgwODBjLCAweDIxNWUsIDB4MDBkNiwKLQkweDI4MDUsIDB4YWM2OCwgMHg2MDM0LCAweGQwOWMsIDB4MTEyOCwgMHg2ODA4LCAweGEzMWEsIDB4NjgwYywKLQkweGEyMTMsIDB4MDAyMCwgMHg2ODEwLCAweGEzMWEsIDB4NjgxNCwgMHhhMjEzLCAweDAwZGUsIDB4MDgwNCwKLQkweDIwMzMsIDB4MDgwNCwgMHgyMDJmLCAweDA4MGMsIDB4MTRmNiwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwKLQkweGIwMWUsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDU5MCwgMHgyMDc5LCAweDAwMjAsIDB4MDAxNiwKLQkweDIwMDksIDB4MDIwNywgMHgyMTBjLCAweGQxOTQsIDB4MDE1OCwgMHgyMDA5LCAweDAyMGMsIDB4MjEwYywKLQkweGExODQsIDB4MDAwMywgMHgwMTI4LCAweDIwZTEsIDB4OTA0MCwgMHgyMDAxLCAweDAyMGMsIDB4MjEwMiwKLQkweDIwMDksIDB4MDIwNiwgMHgyMTA0LCAweDIwMDksIDB4MDIwMywgMHgyMTBjLCAweGExMDYsIDB4MTExMCwKLQkweDIwZTEsIDB4OTA0MCwgMHg3ODA0LCAweGQwZmMsIDB4MGQxOCwgMHgwODBjLCAweDFmZjQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgxOWU4LCAweDAwMWUsIDB4NzgwMywgMHgwMDA0LCAweDc4MDQsIDB4ZDBhYywKLQkweDFkZTgsIDB4MjBlMSwgMHg5MDQwLCAweDc4MDMsIDB4MDAwMiwgMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwKLQkweGIwMWUsIDB4MjA3OSwgMHgwMDIwLCAweDcwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDA1NDAsIDB4NzAwNCwKLQkweDIwNjAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTU4LCAweDY4NTAsIDB4YzBiNSwKLQkweDY4NTIsIDB4NjgwYywgMHg3YTFjLCAweGEyMDYsIDB4MTEyMCwgMHg2ODA4LCAweDdhMTgsIDB4YTIwNiwKLQkweDAxZTAsIDB4MjAwMSwgMHgwMTA1LCAweDIwMDMsIDB4MDAxMCwgMHgyMGUxLCAweDkwNDAsIDB4NzgwMywKLQkweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHgwODBjLCAweDkyOWMsIDB4MjBlMSwKLQkweDkwNDAsIDB4MDgwYywgMHg3Y2I4LCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweDdhZTksIDB4MDBmZSwKLQkweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMmUsIDB4MDAwNSwgMHg2ODEwLCAweDZhMTQsIDB4YTIwNSwKLQkweDFkMDAsIDB4Njg0YywgMHhjMGRjLCAweDY4NGUsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwZTEsIDB4OTA0MCwgMHg3ODAzLCAweDAwMDQsIDB4NzAwMywKLQkweDAwMDAsIDB4MjA2OSwgMHhhZmM3LCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsIDB4MDhmOCwKLQkweDg4NDAsIDB4MjgwNSwgMHhhMDA1LCAweDExNzAsIDB4NjAwNCwgMHhhMDA1LCAweDAxNjgsIDB4NjgxYSwKLQkweDIwNjAsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwgMHgyMTg2LCAweDIwNDUsIDB4ODhmZiwKLQkweDA5MGMsIDB4MTRmNiwgMHg4YTUxLCAweDAwMDUsIDB4MjA1MCwgMHgwMDA1LCAweDhhNTAsIDB4ODg0MSwKLQkweDI4MDUsIDB4YTAwNSwgMHgxMTkwLCAweDJjMDAsIDB4YWQwNiwgMHgwMTIwLCAweDYwMDAsIDB4YTAwNSwKLQkweDExMDgsIDB4MmQwMCwgMHgyMDYwLCAweDY4MWEsIDB4NjAzNCwgMHhhMDg0LCAweDAwMGYsIDB4YTA4MCwKLQkweDIxOTYsIDB4MjA0NSwgMHg4OGZmLCAweDA5MGMsIDB4MTRmNiwgMHgwMDA1LCAweDAwMDAsIDB4MDAxMSwKLQkweDAwMTUsIDB4MDAxOSwgMHgwMDFkLCAweDAwMjEsIDB4MDAyNSwgMHgwMDI5LCAweDAwMDAsIDB4MDAwZiwKLQkweDAwMTUsIDB4MDAxYiwgMHgwMDIxLCAweDAwMjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE3YiwKLQkweDIxNzcsIDB4MDAwMCwgMHgwMDAwLCAweDIxODUsIDB4MDAwMCwgMHgyMTdiLCAweDAwMDAsIDB4MjE4MiwKLQkweDIxN2YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE4NSwgMHgyMTgyLCAweDAwMDAsIDB4MjE3ZCwKLQkweDIxN2QsIDB4MDAwMCwgMHgwMDAwLCAweDIxODUsIDB4MDAwMCwgMHgyMTdkLCAweDAwMDAsIDB4MjE4MywKLQkweDIxODMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE4NSwgMHgyMTgzLCAweDAwYTYsIDB4MDA5NiwKLQkweDAwODYsIDB4NmIyZSwgMHg2YzJhLCAweDY4NTgsIDB4YTA1NSwgMHgwOTA0LCAweDIyMzcsIDB4MmQ2MCwKLQkweDYwMzQsIDB4YTBjYywgMHgwMDBmLCAweGE5YzAsIDB4MjE4NiwgMHhhOTg2LCAweDAwMDcsIDB4MDEzMCwKLQkweGE5ODYsIDB4MDAwZSwgMHgwMTE4LCAweGE5ODYsIDB4MDAwZiwgMHgxMTIwLCAweDYwNWMsIDB4YTQyMiwKLQkweDYwNjAsIDB4YTMxYSwgMHgyODA1LCAweGEwNDUsIDB4MTE0MCwgMHgwMzEwLCAweDA4MDQsIDB4MjIzNywKLQkweDYwMDQsIDB4YTA2NSwgMHgwOTA0LCAweDIyMzcsIDB4MGMxOCwgMHgyODA1LCAweGEwMDUsIDB4MDFhOCwKLQkweGFjNjgsIDB4ZDk5YywgMHgxMTI4LCAweDY4MDgsIDB4YTQyMiwgMHg2ODBjLCAweGEzMWIsIDB4MDAyMCwKLQkweDY4MTAsIDB4YTQyMiwgMHg2ODE0LCAweGEzMWIsIDB4MDYyMCwgMHgyMzAwLCAweGE0MDUsIDB4MDE1MCwKLQkweDhhNTEsIDB4MDkwNCwgMHgyMjM3LCAweDg4NDAsIDB4MGM0MCwgMHg2MDA0LCAweGEwNjUsIDB4MDkwNCwKLQkweDIyMzcsIDB4MDgzMCwgMHg4YTUxLCAweDA5MDQsIDB4MjIzNywgMHg4ODQwLCAweDI4MDUsIDB4YTAwNSwKLQkweDExNTgsIDB4NjAwNCwgMHhhMDY1LCAweDA5MDQsIDB4MjIzNywgMHg2MDM0LCAweGEwY2MsIDB4MDAwZiwKLQkweGE5YzAsIDB4MjE4NiwgMHgyODA1LCAweDIwNDAsIDB4MmI2OCwgMHg2ODUwLCAweGMwZmMsIDB4Njg1MiwKLQkweDA0NTgsIDB4ODQyMiwgMHg4NDIwLCAweDgzMWEsIDB4YTM5OSwgMHgwMDAwLCAweDAwZDYsIDB4MmI2OCwKLQkweDZjNmUsIDB4NmI3MiwgMHgwMGRlLCAweGQ5OWMsIDB4MTE2OCwgMHg2OTA4LCAweDI0MDAsIDB4YTEyMiwKLQkweDY5MGMsIDB4MjMwMCwgMHhhMTFiLCAweDBhMGMsIDB4MTRmNiwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwKLQkweGEzMTksIDB4MDA2MCwgMHg2OTEwLCAweDI0MDAsIDB4YTEyMiwgMHg2OTE0LCAweDIzMDAsIDB4YTExYiwKLQkweDBhMGMsIDB4MTRmNiwgMHg2ODAwLCAweGE0MjAsIDB4NjgwNCwgMHhhMzE5LCAweDJiNjgsIDB4NmMxZSwKLQkweDZiMjIsIDB4Njg1MCwgMHhjMGZkLCAweDY4NTIsIDB4MmMwMCwgMHg2ODFhLCAweDI4MDAsIDB4NjgzMiwKLQkweDJhMDAsIDB4NjgyNiwgMHgwMDBlLCAweDAwMGUsIDB4MDAwZSwgMHhhMDA2LCAweDAwMjgsIDB4MDA4ZSwKLQkweDAwOWUsIDB4MDBhZSwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDAyLCAweDIyNGIsIDB4MjI0YywgMHgyMjRmLCAweDIyNTIsIDB4MjI1NywKLQkweDIyNWEsIDB4MjI1ZiwgMHgyMjY0LCAweDAwMDUsIDB4MDgwYywgMHgxZmY0LCAweDAwMDUsIDB4MDgwYywKLQkweDFhNmMsIDB4MDAwNSwgMHgwODBjLCAweDFhNmMsIDB4MDgwYywgMHgxZmY0LCAweDAwMDUsIDB4MDgwYywKLQkweDE2ZjgsIDB4MDAwNSwgMHgwODBjLCAweDFmZjQsIDB4MDgwYywgMHgxNmY4LCAweDAwMDUsIDB4MDgwYywKLQkweDFhNmMsIDB4MDgwYywgMHgxNmY4LCAweDAwMDUsIDB4MDgwYywgMHgxYTZjLCAweDA4MGMsIDB4MWZmNCwKLQkweDA4MGMsIDB4MTZmOCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNjAwLCAweDIwNzksIDB4MDIwMCwKLQkweDIwNzEsIDB4YjI4MCwgMHgyMDY5LCAweGFkMDAsIDB4MjAwOSwgMHgwMDA0LCAweDc5MTIsIDB4NzgxNywKLQkweDAwMDQsIDB4MDgwYywgMHgyNjUxLCAweDc4MWIsIDB4MDAwMiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4MjBhOSwgMHgwMDgwLCAweDc4MmYsIDB4MDAwMCwgMHgxZjA0LCAweDIyODMsIDB4MjBlMSwKLQkweDkwODAsIDB4NzgzYiwgMHgwMDFmLCAweDIwZTEsIDB4ODcwMCwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4MjYwMCwgMHg3ODFjLCAweGQwYTQsIDB4MTkwYywgMHgyMzM1LCAweGEwODQsIDB4MDAwNywKLQkweDAwMDIsIDB4MjJiMywgMHgyMmExLCAweDIyYTQsIDB4MjJhNywgMHgyMmFjLCAweDIyYWUsIDB4MjJiMCwKLQkweDIyYjIsIDB4MDgwYywgMHg1ZmI3LCAweDAwNzgsIDB4MDgwYywgMHg1ZmYwLCAweDAwNjAsIDB4MDgwYywKLQkweDVmYjcsIDB4MDgwYywgMHg1ZmYwLCAweDAwMzgsIDB4MDA0MSwgMHgwMDI4LCAweDAwMzEsIDB4MDAxOCwKLQkweDAwMjEsIDB4MDAwOCwgMHgwMDExLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwKLQkweDc5MzAsIDB4YTE4NCwgMHgwMDAzLCAweDAxMTgsIDB4MjBlMSwgMHg5MDQwLCAweDA0YTAsIDB4YTE4NCwKLQkweDAwMzAsIDB4MDFlMCwgMHg2YTAwLCAweGEyODYsIDB4MDAwMywgMHgxMTA4LCAweDAwYTAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTE3OCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwKLQkweDIwMDMsIDB4MDAwMSwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwKLQkweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDIwZTEsIDB4OTAxMCwgMHgwMGE4LCAweGExODQsIDB4MDBjMCwKLQkweDAxNjgsIDB4MDBlNiwgMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgyMDcxLCAweGFmZmQsIDB4MDgwYywKLQkweDFkMjIsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDBlZSwgMHgwMDI4LCAweGExODQsIDB4MDMwMCwKLQkweDAxMTAsIDB4MjBlMSwgMHg5MDIwLCAweDc5MzIsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4YWQwMCwgMHg3MTI4LCAweDIwMDEsIDB4YWY5MCwKLQkweDIxMDIsIDB4MjAwMSwgMHhhZjk4LCAweDIxMDIsIDB4YTE4MiwgMHgwMjExLCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDgsIDB4MDQwMCwgMHhhMTgyLCAweDAyNTksIDB4MTIxOCwgMHgyMDA5LCAweDAwMDcsIDB4MDBkMCwKLQkweGExODIsIDB4MDJjMSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNiwgMHgwMGEwLCAweGExODIsIDB4MDM0OSwKLQkweDEyMTgsIDB4MjAwOSwgMHgwMDA1LCAweDAwNzAsIDB4YTE4MiwgMHgwNDIxLCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDA0MCwgMHhhMTgyLCAweDA1ODEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDMsIDB4MDAxMCwKLQkweDIwMDksIDB4MDAwMiwgMHgyMDc5LCAweDAyMDAsIDB4NzkxMiwgMHg3ODE3LCAweDAwMDQsIDB4MDgwYywKLQkweDI2NTEsIDB4MDBmZSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHg3OTM4LCAweDA4MGMsIDB4MTRmNiwKLQkweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGFkMDAsIDB4NjAyNCwKLQkweDYwMjYsIDB4NjA1MywgMHgwMDMwLCAweDA4MGMsIDB4MjY5MCwgMHg2MDUwLCAweGEwODQsIDB4ZmU3ZiwKLQkweDYwNTIsIDB4MjAwOSwgMHgwMGVmLCAweDYxMzIsIDB4NjEzNiwgMHgwODBjLCAweDI2YTAsIDB4NjBlNywKLQkweDAwMDAsIDB4NjFlYSwgMHg2MGUzLCAweDAwMDgsIDB4NjA0YiwgMHhmN2Y3LCAweDYwNDMsIDB4MDAwMCwKLQkweDYwMmYsIDB4MDA4MCwgMHg2MDJmLCAweDAwMDAsIDB4NjAwNywgMHgwZTlmLCAweDYwMWIsIDB4MDAxZSwKLQkweDYwMGYsIDB4MDBmZiwgMHgyMDAxLCAweGFmOGMsIDB4MjAwMywgMHgwMGZmLCAweDYwMmIsIDB4MDAyZiwKLQkweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMzEsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4YWQzMCwKLQkweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwKLQkweDAwMjYsIDB4NjEyNCwgMHhhMTg0LCAweDFlMmMsIDB4MTExOCwgMHhhMTg0LCAweDAwMDcsIDB4MDAyYSwKLQkweGExOTUsIDB4MDAwNCwgMHhhMjg0LCAweDAwMDcsIDB4MDAwMiwgMHgyM2E3LCAweDIzOGQsIDB4MjM5MCwKLQkweDIzOTMsIDB4MjM5OCwgMHgyMzlhLCAweDIzOWUsIDB4MjNhMiwgMHgwODBjLCAweDY2OTksIDB4MDBiOCwKLQkweDA4MGMsIDB4Njc3NCwgMHgwMGEwLCAweDA4MGMsIDB4Njc3NCwgMHgwODBjLCAweDY2OTksIDB4MDA3OCwKLQkweDAwOTksIDB4MDA2OCwgMHgwODBjLCAweDY2OTksIDB4MDA3OSwgMHgwMDQ4LCAweDA4MGMsIDB4Njc3NCwKLQkweDAwNTksIDB4MDAyOCwgMHgwODBjLCAweDY3NzQsIDB4MDgwYywgMHg2Njk5LCAweDAwMjksIDB4MDAyZSwKLQkweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4NjEyNCwgMHhkMTljLCAweDE5MDQsIDB4MjViZiwKLQkweDA4MGMsIDB4NTc0ZiwgMHgwNTc4LCAweDcwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDAxOTgsIDB4NjAyNCwKLQkweGEwODQsIDB4MTgwMCwgMHgwMTc4LCAweDA4MGMsIDB4NTc3NSwgMHgwMTE4LCAweDA4MGMsIDB4NTc2MSwKLQkweDExNDgsIDB4NjAyNywgMHgwMDIwLCAweDYwNDMsIDB4MDAwMCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywKLQkweGFhYWEsIDB4MDQ1OCwgMHgwODBjLCAweDU3NzUsIDB4MTVkMCwgMHg2MDI0LCAweGEwODQsIDB4MTgwMCwKLQkweDExMDgsIDB4MDRhOCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwMywgMHhhYWFhLCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NTY5YSwKLQkweDA4MDQsIDB4MjViZiwgMHhkMWFjLCAweDE1MTgsIDB4NjAyNCwgMHhkMGRjLCAweDExNzAsIDB4ZDBlNCwKLQkweDExODgsIDB4ZDBkNCwgMHgxMWEwLCAweGQwY2MsIDB4MDEzMCwgMHg3MDg4LCAweGEwODYsIDB4MDAyOCwKLQkweDExMTAsIDB4MDgwYywgMHg1OGRhLCAweDA4MDQsIDB4MjViZiwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDAsIDB4MDA0OCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAyLCAweDAwMjAsIDB4MDgwYywKLQkweDU4NGQsIDB4MDgwNCwgMHgyNWJmLCAweDA4MGMsIDB4NTk3YSwgMHgwODA0LCAweDI1YmYsIDB4ZDFhYywKLQkweDA5MDQsIDB4MjUwNywgMHgwODBjLCAweDU3NGYsIDB4MTFkOCwgMHg2MDI3LCAweDAwMjAsIDB4MDAwNiwKLQkweDAwMjYsIDB4MDAzNiwgMHgwODBjLCAweDU3NmIsIDB4MTE3MCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHgwODBjLCAweDU2OWEsIDB4MDAzZSwKLQkweDAwMmUsIDB4MDAwZSwgMHgwMDA1LCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDA4MGMsIDB4NTcyNiwKLQkweDAwMTYsIDB4MDA0NiwgMHgwMGM2LCAweDY0NGMsIDB4YTQ4NiwgMHhmMGYwLCAweDExMzgsIDB4MjA2MSwKLQkweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDc0Y2EsIDB4YTQ4YywKLQkweGZmMDAsIDB4NzAzNCwgMHhkMDg0LCAweDAxNzgsIDB4YTE4NiwgMHhmODAwLCAweDExNjAsIDB4NzAzOCwKLQkweGQwODQsIDB4MTE0OCwgMHhjMDg1LCAweDcwM2EsIDB4MDAzNiwgMHgyNDE4LCAweDIwMTEsIDB4ODAxNiwKLQkweDA4MGMsIDB4M2M1YywgMHgwMDNlLCAweGExOTYsIDB4ZmYwMCwgMHgwNWI4LCAweDcwNTAsIDB4YTA4NCwKLQkweDAwZmYsIDB4ODEwZiwgMHhhMTE2LCAweDA1ODgsIDB4NzEzMCwgMHhkMTg0LCAweDE1NzAsIDB4MjAxMSwKLQkweGFkNTIsIDB4MjIxNCwgMHhkMmVjLCAweDAxMzgsIDB4YzE4ZCwgMHg3MTMyLCAweDIwMTEsIDB4YWQ1MiwKLQkweDIyMTQsIDB4ZDJhYywgMHgxNTEwLCAweDYyNDAsIDB4YTI5NCwgMHgwMDEwLCAweDAxMzAsIDB4NjI0OCwKLQkweGEyOTQsIDB4ZmYwMCwgMHhhMjk2LCAweGZmMDAsIDB4MDFjMCwgMHg3MDMwLCAweGQwOGMsIDB4MDkwNCwKLQkweDI0ZDIsIDB4NzAzNCwgMHhkMDhjLCAweDExNDAsIDB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4ZDFhYywKLQkweDE5MDQsIDB4MjRkMiwgMHhjMWFkLCAweDIxMDIsIDB4MDAzNiwgMHg3M2M4LCAweDIwMTEsIDB4ODAxMywKLQkweDA4MGMsIDB4M2M1YywgMHgwMDNlLCAweDA4MDQsIDB4MjRkMiwgMHg3MDM0LCAweGQwOGMsIDB4MTE0MCwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGQxYWMsIDB4MTkwNCwgMHgyNGQyLCAweGMxYWQsIDB4MjEwMiwKLQkweDAwMzYsIDB4NzNjOCwgMHgyMDExLCAweDgwMTMsIDB4MDgwYywgMHgzYzVjLCAweDAwM2UsIDB4NzEzMCwKLQkweGMxODUsIDB4NzEzMiwgMHgyMDExLCAweGFkNTIsIDB4MjIwYywgMHhkMWE0LCAweDAxZDAsIDB4MDAxNiwKLQkweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg2NjNmLCAweDIwMTksIDB4MDAwZSwKLQkweDA4MGMsIDB4YThlYiwgMHhhNDg0LCAweDAwZmYsIDB4YTA4MCwgMHgyYmU2LCAweDIwMGQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHg4MTI3LCAweGEwMDYsIDB4MjAwOSwgMHgwMDBlLCAweDA4MGMsIDB4YTk2YywKLQkweDAwMWUsIDB4ZDFhYywgMHgxMTQ4LCAweDAwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDIwMTksIDB4MDAwNCwKLQkweDA4MGMsIDB4MmFhYywgMHgwMDFlLCAweDAwNzAsIDB4MDE1NiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHg0Y2RjLCAweDExMTAsIDB4MDgwYywgMHg0OTNhLCAweDgxMDgsIDB4MWYwNCwKLQkweDI0YzksIDB4MDE1ZSwgMHgwMGNlLCAweDAwNGUsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwKLQkweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDAwLCAweDA4MGMsIDB4N2E2NCwgMHgwMDNlLCAweDYwZTMsIDB4MDAwMCwKLQkweDAwMWUsIDB4MjAwMSwgMHhhZDAwLCAweDIwMTQsIDB4YTI5NiwgMHgwMDA0LCAweDExMjgsIDB4ZDE5YywKLQkweDExMTgsIDB4NjIyOCwgMHhjMjlkLCAweDYyMmEsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQyMiwKLQkweDIwMDMsIDB4MDAwMCwgMHg2MDI3LCAweDAwMjAsIDB4MDgwYywgMHg1Nzc1LCAweDExNDAsIDB4MDAxNiwKLQkweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDU2N2IsIDB4MDgwYywgMHg2NTkzLCAweDAwMWUsIDB4ZDE5NCwKLQkweDA5MDQsIDB4MjViZiwgMHgwMDE2LCAweDYyMjAsIDB4ZDJiNCwgMHgwOTA0LCAweDI1NzAsIDB4MDgwYywKLQkweDY1ODEsIDB4MDgwYywgMHg3ODM0LCAweDYwMjcsIDB4MDAwNCwgMHgwMGY2LCAweDIwMTksIDB4YWZkMCwKLQkweDIzMDQsIDB4YTA3ZCwgMHgwNTcwLCAweDc4MDQsIDB4YTA4NiwgMHgwMDMyLCAweDE1NTAsIDB4MDBkNiwKLQkweDAwYzYsIDB4MDBlNiwgMHgyMDY5LCAweDAxNDAsIDB4NjE4YywgMHg2Mjg4LCAweDc4MTgsIDB4NjA4ZSwKLQkweDc4MDgsIDB4NjA4YSwgMHg2MDQzLCAweDAwMDIsIDB4MjAwMSwgMHgwMDAzLCAweDgwMDEsIDB4MWRmMCwKLQkweDYwNDMsIDB4MDAwMCwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywgMHgwMDAwLCAweDYxOGUsIDB4NjI4YSwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDZjNTAsIDB4NzgxMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywKLQkweDJmNjAsIDB4MDgwYywgMHg4MDc4LCAweDAwZWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZmUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDBmZSwgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwgMHg2ODA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAxMjAsIDB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwgMHgwMGRlLCAweDAwYzYsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjAyOCwgMHhhMDlhLCAweDAwYzgsIDB4MTIzOCwgMHg4MDAwLCAweDYwMmEsIDB4MDBjZSwKLQkweDA4MGMsIDB4NzgyNywgMHgwODA0LCAweDI1YmUsIDB4MjAxOSwgMHhhZmQwLCAweDIzMDQsIDB4YTA2NSwKLQkweDAxMjAsIDB4MjAwOSwgMHgwMDI3LCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDA4MDQsIDB4MjViZSwKLQkweGQyYmMsIDB4MDkwNCwgMHgyNWJlLCAweDA4MGMsIDB4NjU4ZSwgMHg2MDE0LCAweGEwODQsIDB4MDE4NCwKLQkweGEwODUsIDB4MDAxMCwgMHg2MDE2LCAweDYwMjcsIDB4MDAwNCwgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwKLQkweDY4MDQsIDB4YTA4NCwgMHg0MDAwLCAweDAxMjAsIDB4NjgwMywgMHgxMDAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDAwZGUsIDB4MDBjNiwgMHgyMDYxLCAweGFmYzcsIDB4NjA0NCwgMHhhMDlhLCAweDAwYzgsIDB4MTJmMCwKLQkweDgwMDAsIDB4NjA0NiwgMHg2MDNjLCAweDAwY2UsIDB4YTAwNSwgMHgwNTQwLCAweDIwMDksIDB4MDdkMCwKLQkweDA4MGMsIDB4NjU4NiwgMHhhMDgwLCAweDAwMDcsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDYsIDB4MTEzOCwKLQkweDYxMTQsIDB4YTE4YywgMHgwMTg0LCAweGExOGQsIDB4MDAxMiwgMHg2MTE2LCAweDAwYjgsIDB4NjExNCwKLQkweGExOGMsIDB4MDE4NCwgMHhhMThkLCAweDAwMTYsIDB4NjExNiwgMHgwMDgwLCAweDAwMzYsIDB4MjAxOSwKLQkweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4MjAxOSwgMHhhZmQ2LCAweDIzMDQsIDB4YTA2NSwKLQkweDAxMjAsIDB4MjAwOSwgMHgwMDRmLCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDAwMWUsIDB4ZDE5YywKLQkweDA5MDQsIDB4MjYxYSwgMHg3MDM0LCAweGQwYWMsIDB4MTU2MCwgMHgwMDE2LCAweDAxNTYsIDB4NjAyNywKLQkweDAwMDgsIDB4NjAyZiwgMHgwMDIwLCAweDIwYTksIDB4MDAwNiwgMHgxZDA0LCAweDI1Y2QsIDB4MjA5MSwKLQkweDYwMDAsIDB4MWYwNCwgMHgyNWNkLCAweDYwMmYsIDB4MDAwMCwgMHg2MTUwLCAweGExODUsIDB4MTQwMCwKLQkweDYwNTIsIDB4MjBhOSwgMHgwMzY2LCAweDFkMDQsIDB4MjVkYiwgMHgyMDkxLCAweDYwMDAsIDB4NjAyMCwKLQkweGQwOWMsIDB4MTEzMCwgMHgwMTVlLCAweDYxNTIsIDB4MDAxZSwgMHg2MDI3LCAweDAwMDgsIDB4MDQ5MCwKLQkweDA4MGMsIDB4Mjc2MCwgMHgxZjA0LCAweDI1ZGIsIDB4MDE1ZSwgMHg2MTUyLCAweDAwMWUsIDB4NjAyNywKLQkweDAwMDgsIDB4MDAxNiwgMHg2MDI4LCAweGMwOWMsIDB4NjAyYSwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywKLQkweDdhZGYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4N2FlOSwgMHgwODBjLCAweDc5ZTEsIDB4MDgwYywKLQkweDY1ODEsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4NjBlMywKLQkweDAwMDAsIDB4MDgwYywgMHhhYzhkLCAweDA4MGMsIDB4YWNhOCwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywKLQkweDU3OTMsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwNCwgMHg2MDI3LCAweDAwMDgsIDB4MDgwYywKLQkweDEyY2MsIDB4MDAxZSwgMHhhMThjLCAweGZmZDAsIDB4NjEyNiwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwKLQkweDAwMjYsIDB4MDBlNiwgMHgwMGY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDcxYzAsIDB4NzBjMiwgMHhhMTE2LCAweDAxZjAsIDB4ODFmZiwgMHgwMTI4LCAweDIwMTEsIDB4ODAxMSwKLQkweDA4MGMsIDB4M2M1YywgMHgwMGI4LCAweDIwMTEsIDB4ODAxMiwgMHgwODBjLCAweDNjNWMsIDB4MjAwMSwKLQkweGFkNzEsIDB4MjAwNCwgMHhkMGZjLCAweDExNzAsIDB4MDAzNiwgMHgwMGM2LCAweDA4MGMsIDB4MjZlYiwKLQkweDIwNjEsIDB4MDEwMCwgMHgyMDE5LCAweDAwMjgsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmFhYywKLQkweDAwY2UsIDB4MDAzZSwgMHgwMTJlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGY2LCAweDAwMDYsIDB4MDAyNiwgMHgyMDYxLCAweDAxMDAsIDB4YTE5MCwKLQkweDI2NjQsIDB4MjIwNSwgMHg2MGYyLCAweDIwMTEsIDB4MjY3MSwgMHgyMjA1LCAweDYwZWUsIDB4MDAyZSwKLQkweDAwMGUsIDB4MDBmZSwgMHgwMGNlLCAweDAwMDUsIDB4MDg0MCwgMHgwODQwLCAweDA4NDAsIDB4MDU4MCwKLQkweDA0MjAsIDB4MDM0OCwgMHgwMmMwLCAweDAyNTgsIDB4MDIxMCwgMHgwMWE4LCAweDAxYTgsIDB4MDFhOCwKLQkweDAxYTgsIDB4MDE0MCwgMHgwMGY4LCAweDAwZDAsIDB4MDBiMCwgMHgwMGEwLCAweDIwMjgsIDB4YTE4YywKLQkweDAwZmYsIDB4MjEzMCwgMHhhMDk0LCAweGZmMDAsIDB4MTExMCwgMHg4MWZmLCAweDAxMTgsIDB4MDgwYywKLQkweDYyNzgsIDB4MDAzOCwgMHhhMDgwLCAweDJiZTYsIDB4MjAwZCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweGEwMDYsIDB4MDAwNSwgMHhhMDgwLCAweDJiZTYsIDB4MjAwZCwgMHhhMThjLCAweDAwZmYsIDB4MDAwNSwKLQkweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4YWQxNCwgMHgyMDAzLCAweDAwZWYsIDB4MjBhOSwKLQkweDAwMTAsIDB4YTAwNiwgMHg2ODUyLCAweDY4NTYsIDB4MWYwNCwgMHgyNjliLCAweDAwZGUsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDBkNiwgMHgwMDI2LCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLCAweGFkMTQsIDB4MjEwMiwKLQkweDgxMTQsIDB4ODIxNCwgMHg4MjE0LCAweDgyMTQsIDB4MjBhOSwgMHgwMDEwLCAweDY4NTMsIDB4MDAwMCwKLQkweGEwMDYsIDB4ODJmZiwgMHgxMTI4LCAweGExODQsIDB4MDAwZiwgMHhhMDgwLCAweGFjYWUsIDB4MjAwNSwKLQkweDY4NTYsIDB4ODIxMSwgMHgxZjA0LCAweDI2YjAsIDB4MDAyZSwgMHgwMGRlLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwYzYsIDB4MjA2MSwgMHhhZDAwLCAweDYwMzAsIDB4MDExMCwgMHhjMDlkLCAweDAwMDgsIDB4YzA5YywKLQkweDYwMzIsIDB4MDBjZSwgMHgwMDA1LCAweDAxNTYsIDB4MDBkNiwgMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwKLQkweDIwNjksIDB4MDE0MCwgMHg2OTgwLCAweGExMTYsIDB4MDE4MCwgMHhhMTEyLCAweDEyMzAsIDB4ODIxMiwKLQkweDgyMTAsIDB4MjJhOCwgMHgyMDAxLCAweDA0MDIsIDB4MDAxOCwgMHgyMmE4LCAweDIwMDEsIDB4MDQwNCwKLQkweDY4MGUsIDB4MWYwNCwgMHgyNmUwLCAweDY4MGYsIDB4MDAwMCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwKLQkweDAwZGUsIDB4MDE1ZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDE1MCwKLQkweGQwYTQsIDB4MDE0MCwgMHhhMDA2LCAweDAwNDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmUsIDB4MDgwYywKLQkweGE5NmMsIDB4MDA0ZSwgMHgwMDA1LCAweDAwZjYsIDB4MDAxNiwgMHgwMDI2LCAweDIwNzksIDB4MDE0MCwKLQkweDc4YzQsIDB4ZDBkYywgMHgwNTQ4LCAweGEwODQsIDB4MDcwMCwgMHhhMDhlLCAweDAzMDAsIDB4MTUyMCwKLQkweDIwMTEsIDB4MDAwMCwgMHgyMDA5LCAweDAwMDIsIDB4MjMwMCwgMHhhMDgwLCAweDAwMjAsIDB4MjAxOCwKLQkweDIzMDAsIDB4MDgwYywgMHg2NjY1LCAweDIwMTEsIDB4MDAzMCwgMHgyMjAwLCAweDgwMDcsIDB4YTA4NSwKLQkweDAwNGMsIDB4NzhjMiwgMHgyMDA5LCAweDAyMDQsIDB4MjEwYywgMHgyMjAwLCAweGExMDAsIDB4MjAwOSwKLQkweDAxMzgsIDB4MjAwYSwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwgMHgyMDA5LCAweGFmOGUsIDB4MjAwYSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMGZlLCAweDAwMDUsIDB4NzhjMywgMHgwMDAwLCAweDBjYzgsIDB4MDEyNiwKLQkweDIwOTEsIDB4MjgwMCwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDAxLCAweDAxNzAsIDB4MjAwYywKLQkweDgwMDAsIDB4MjAxNCwgMHhhMTg0LCAweDAwMDMsIDB4MDExMCwgMHgwODA0LCAweDFhNmEsIDB4MDAyZSwKLQkweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwKLQkweGEwODIsIDB4MDAwNSwgMHgwMDBlLCAweDAyNjgsIDB4MjAwMSwgMHgwMTcwLCAweDIwMGMsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE4ZSwgMHgwMDRjLCAweDExMjgsIDB4MjAwYywgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDAwMTAsIDB4MjAwOSwgMHgwMDAwLCAweDIwMDEsIDB4MDIwNCwgMHgyMDA0LCAweGExMDgsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDE1NiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgyMGE5LCAweDAwMGEsIDB4Nzg1NCwKLQkweGQwOGMsIDB4MTExMCwgMHgxZjA0LCAweDI3NjcsIDB4MDBmZSwgMHgwMTVlLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBjNiwgMHgwMDA2LCAweDIwNjEsIDB4MDEwMCwgMHg2MDMwLCAweDAwMDYsIDB4NjA0OCwKLQkweDAwMDYsIDB4NjBlNCwgMHgwMDA2LCAweDYwZTgsIDB4MDAwNiwgMHg2MDUwLCAweDAwMDYsIDB4NjBmMCwKLQkweDAwMDYsIDB4NjBlYywgMHgwMDA2LCAweDYwMGMsIDB4MDAwNiwgMHg2MDA0LCAweDAwMDYsIDB4NjAyOCwKLQkweDAwMDYsIDB4NjBlMCwgMHgwMDA2LCAweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4ZTAwMCwKLQkweGUwMDAsIDB4ZTAwMCwgMHhlMDAwLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDAwZSwKLQkweDYwZTIsIDB4MDAwZSwgMHg2MDJhLCAweDAwMGUsIDB4NjAwNiwgMHgwMDBlLCAweDYwMGUsIDB4MDAwZSwKLQkweDYwZWUsIDB4MDAwZSwgMHg2MGYyLCAweDAwMGUsIDB4NjA1MiwgMHgwMDBlLCAweDYwZWEsIDB4MDAwZSwKLQkweDYwZTYsIDB4MDAwZSwgMHg2MDRhLCAweDAwMGUsIDB4NjAzMiwgMHg2MDM2LCAweDIwMDgsIDB4MDgwYywKLQkweDI2YTAsIDB4MDAwZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgyODQ1LCAweDI4NDksIDB4Mjg0ZCwKLQkweDI4NTMsIDB4Mjg1OSwgMHgyODVmLCAweDI4NjUsIDB4Mjg2ZCwgMHgyODc1LCAweDI4N2IsIDB4Mjg4MSwKLQkweDI4ODksIDB4Mjg5MSwgMHgyODk5LCAweDI4YTEsIDB4MjhhYiwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI3LCAweDI4YjcsIDB4MjhiYywKLQkweDI4YmMsIDB4MjhjMywgMHgyOGMzLCAweDI4Y2EsIDB4MjhjYSwgMHgyOGQzLCAweDI4ZDMsIDB4MjhkYSwKLQkweDI4ZGEsIDB4MjhlMywgMHgyOGUzLCAweDI4ZWMsIDB4MjhlYywgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwKLQkweDI4YjUsIDB4MjhiNSwgMHgyOGI1LCAweDI4YjUsIDB4MjhiNSwgMHgwMTA2LCAweDAwMDYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIzNzMsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDIzNzMsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjIzZCwgMHgwODA0LCAweDI4ZjcsIDB4MDEwNiwKLQkweDAwMDYsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIzNzMsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIzNzMsIDB4MDgwYywgMHgyMjNkLCAweDA4MDQsIDB4MjhmNywgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywKLQkweDIyOGYsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjIzZCwgMHgwODBjLCAweDIyOGYsIDB4MDgwNCwKLQkweDI4ZjcsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyM2QsIDB4MDgwYywKLQkweDIyOGYsIDB4MDgwNCwgMHgyOGY3LCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDIzNzMsIDB4MDgwYywKLQkweDIyM2QsIDB4MDgwYywgMHgyMjhmLCAweDA4MDQsIDB4MjhmNywgMHhlMDAwLCAweDBjZjAsIDB4MDEwNiwKLQkweDAwMDYsIDB4MDgwYywgMHgyNzJmLCAweDA0ZDgsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwKLQkweDA4MGMsIDB4MjM3MywgMHgwNGEwLCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywKLQkweDIyM2QsIDB4MDQ2OCwgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyNzJmLCAweDA4MGMsIDB4MjM3MywKLQkweDA4MGMsIDB4MjIzZCwgMHgwNDIwLCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywKLQkweDIyOGYsIDB4MDBlOCwgMHgwMTA2LCAweDAwMDYsIDB4MDgwYywgMHgyNzJmLCAweDA4MGMsIDB4MjM3MywKLQkweDA4MGMsIDB4MjI4ZiwgMHgwMGEwLCAweDAxMDYsIDB4MDAwNiwgMHgwODBjLCAweDI3MmYsIDB4MDgwYywKLQkweDIyM2QsIDB4MDgwYywgMHgyMjhmLCAweDAwNTgsIDB4MDEwNiwgMHgwMDA2LCAweDA4MGMsIDB4MjcyZiwKLQkweDA4MGMsIDB4MjM3MywgMHgwODBjLCAweDIyM2QsIDB4MDgwYywgMHgyMjhmLCAweDAwMDAsIDB4MDAwZSwKLQkweDAxMGUsIDB4MDAwZCwgMHgwMGM2LCAweDAwMjYsIDB4MDA0NiwgMHgyMDIxLCAweDAwMDAsIDB4MDgwYywKLQkweDUwMmQsIDB4MTkwNCwgMHgyOWQ0LCAweDcyZDAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDQsIDB4YTAwNSwKLQkweDExMTAsIDB4ZDI5YywgMHgwMTQ4LCAweGQyODQsIDB4MTEzOCwgMHhkMmJjLCAweDE5MDQsIDB4MjlkNCwKLQkweDA4MGMsIDB4MjlkOCwgMHgwODA0LCAweDI5ZDQsIDB4MDgwYywgMHg1NzRmLCAweDExMjAsIDB4NzA5YiwKLQkweGZmZmYsIDB4MDgwNCwgMHgyOWQ0LCAweGQyOTQsIDB4MDEyMCwgMHg3MDliLCAweGZmZmYsIDB4MDgwNCwKLQkweDI5ZDQsIDB4MjAwMSwgMHhhZDE0LCAweDIwM2MsIDB4NzI4NCwgMHhkMjg0LCAweDA5MDQsIDB4Mjk3NiwKLQkweGQyOGMsIDB4MTkwNCwgMHgyOTc2LCAweDAwMzYsIDB4NzM5OCwgMHhhMzhlLCAweGZmZmYsIDB4MTExMCwKLQkweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweGEyZTAsIDB4YjNjMCwgMHgyYzA0LCAweGEzOGMsIDB4MDAwMSwKLQkweDAxMjAsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDAxMCwgMHhhMDg0LCAweDAwZmYsIDB4YTcwZSwKLQkweDA1NjAsIDB4YTA4ZSwgMHgwMDAwLCAweDA1NDgsIDB4YTA4ZSwgMHgwMGZmLCAweDExNTAsIDB4NzIzMCwKLQkweGQyODQsIDB4MTUzOCwgMHg3Mjg0LCAweGMyOGQsIDB4NzI4NiwgMHg3MDliLCAweGZmZmYsIDB4MDAzZSwKLQkweDA0MjgsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MjY3NiwgMHgwODBjLCAweDRjODAsIDB4MTFiOCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgxMTUwLCAweDcwMzAsIDB4ZDA4YywKLQkweDAxMTgsIDB4NjAwMCwgMHhkMGJjLCAweDAxMjAsIDB4MDgwYywgMHgyOWViLCAweDAxNDAsIDB4MDAyOCwKLQkweDA4MGMsIDB4MmIxYSwgMHgwODBjLCAweDJhMTksIDB4MDExMCwgMHg4MzE4LCAweDA4MTgsIDB4NzM5YSwKLQkweDAwMTAsIDB4NzA5YiwgMHhmZmZmLCAweDAwM2UsIDB4MDgwNCwgMHgyOWQ0LCAweGE3ODAsIDB4MmJlNiwKLQkweDIwM2QsIDB4YTdiYywgMHhmZjAwLCAweDg3M2YsIDB4MjA0MSwgMHgwMDdlLCAweDcwOTgsIDB4YTA5NiwKLQkweGZmZmYsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDAsIDB4MjhhOCwgMHgwMDUwLCAweGE4MTIsIDB4MDIyMCwKLQkweDIwMDgsIDB4YTgwMiwgMHgyMGE4LCAweDAwMjAsIDB4NzA5YiwgMHhmZmZmLCAweDA4MDQsIDB4MjlkNCwKLQkweDI3MDAsIDB4MDE1NiwgMHgwMDE2LCAweGExMDYsIDB4MDVhMCwgMHhjNDg0LCAweDA4MGMsIDB4NGNkYywKLQkweDAxMjAsIDB4MDgwYywgMHg0YzgwLCAweDE1YTgsIDB4MDAwOCwgMHhjNDg1LCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDExMzAsIDB4NzAzMCwgMHhkMDhjLCAweDAxZTgsIDB4NjAwMCwKLQkweGQwYmMsIDB4MTFkMCwgMHg3Mjg0LCAweGQyOGMsIDB4MDE4OCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODIsIDB4MDAwNiwgMHgwMmIwLCAweGQ0ODQsIDB4MTExOCwgMHgwODBjLCAweDRjOWYsIDB4MDAyOCwKLQkweDA4MGMsIDB4MmI5YywgMHgwMTcwLCAweDA4MGMsIDB4MmJjOSwgMHgwMDU4LCAweDA4MGMsIDB4MmIxYSwKLQkweDA4MGMsIDB4MmExOSwgMHgwMTcwLCAweDAwMjgsIDB4MDgwYywgMHgyYjljLCAweDAxMTAsIDB4MDQxOSwKLQkweDAxNDAsIDB4MDAxZSwgMHg4MTA4LCAweDAxNWUsIDB4MWYwNCwgMHgyOTkwLCAweDcwOWIsIDB4ZmZmZiwKLQkweDAwMTgsIDB4MDAxZSwgMHgwMTVlLCAweDcxOWEsIDB4MDA0ZSwgMHgwMDJlLCAweDAwY2UsIDB4MDAwNSwKLQkweDAwYzYsIDB4MDAxNiwgMHg3MDliLCAweDAwMDAsIDB4MjAwOSwgMHgwMDdlLCAweDA4MGMsIDB4NGM4MCwKLQkweDExMzgsIDB4MDgwYywgMHgyYjFhLCAweDA0YTksIDB4MDExOCwgMHg3MGQwLCAweGMwYmQsIDB4NzBkMiwKLQkweDAwMWUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA3NiwgMHgwMGQ2LCAweDAwYzYsIDB4MmM2OCwKLQkweDIwMDEsIDB4YWQ1NiwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHg2ODQyLCAweDA4MGMsIDB4OTgwNywKLQkweDAxZDgsIDB4MmQwMCwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwKLQkweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMzAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDk0LCAweDgwMDAsIDB4NzA5NiwgMHgwMTJlLCAweDIwMDksIDB4MDAwNCwKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwgMHgyYzY4LCAweDIwMDEsIDB4YWQ1NiwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMGZmLCAweDY4NDIsIDB4MDgwYywgMHg5ODA3LCAweDA1NTAsIDB4MmQwMCwKLQkweDYwMWEsIDB4NjgwMCwgMHhjMGM0LCAweDY4MDIsIDB4NjhhMCwgMHhhMDg2LCAweDAwN2UsIDB4MDE0MCwKLQkweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgxMTEwLCAweDA4MGMsIDB4MmFkOSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwKLQkweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDRjMzAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzA5NCwKLQkweDgwMDAsIDB4NzA5NiwgMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwYzYsIDB4MDAyNiwKLQkweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDRjODAsIDB4MTEyMCwgMHgwMDMxLCAweDAxMTAsIDB4NzBkNywKLQkweGZmZmYsIDB4MDAyZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwKLQkweDJjNjgsIDB4MDgwYywgMHg4MDIyLCAweDAxZDgsIDB4MmQwMCwgMHg2MDFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDIwMDEsIDB4MDAwMiwKLQkweDA4MGMsIDB4NGMzMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGQ4LCAweDgwMDAsIDB4NzBkYSwKLQkweDAxMmUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDA3ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjAwOSwgMHgwMDdmLCAweDA4MGMsIDB4NGM4MCwgMHgxMTkwLCAweDJjNjgsIDB4MDgwYywKLQkweDgwMjIsIDB4MDE3MCwgMHgyZDAwLCAweDYwMWEsIDB4NjMxMiwgMHg2MDFmLCAweDAwMDEsIDB4NjIwYSwKLQkweDA4MGMsIDB4OTk1NiwgMHgyMDA5LCAweDAwMjIsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwKLQkweDAxMmUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAzNiwKLQkweDAwMjYsIDB4MDgwYywgMHg2OGYzLCAweDA4MGMsIDB4Njg5ZCwgMHgwODBjLCAweDhhMTUsIDB4MjEzMCwKLQkweDgxZmYsIDB4MDEyOCwgMHgyMGE5LCAweDAwN2UsIDB4MjAwOSwgMHgwMDAwLCAweDAwMjAsIDB4MjBhOSwKLQkweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHg0Y2RjLCAweDExMjAsIDB4MDgwYywKLQkweDRlY2YsIDB4MDgwYywgMHg0OTNhLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDJhYzMsIDB4ODZmZiwKLQkweDExMTAsIDB4MDgwYywgMHgxMWQ0LCAweDAwMmUsIDB4MDAzZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDYyMTgsIDB4MjI3MCwKLQkweDcyYTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwKLQkweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDAxZSwKLQkweDJlNjAsIDB4MDgwYywgMHg0ZWNmLCAweDYyMTAsIDB4NjMxNCwgMHgwODBjLCAweDQ5M2EsIDB4NjIxMiwKLQkweDYzMTYsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwKLQkweDAwMDYsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDg2LCAweDAwODAsIDB4MDE1MCwKLQkweDIwNzEsIDB4YWQwMCwgMHg3MDk0LCAweGEwMDUsIDB4MDExMCwgMHg4MDAxLCAweDcwOTYsIDB4MDAwZSwKLQkweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweGFkMDAsIDB4NzBkOCwgMHhhMDA1LCAweDBkYzAsIDB4ODAwMSwKLQkweDcwZGEsIDB4MGNhOCwgMHg2MDAwLCAweGMwOGMsIDB4NjAwMiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwKLQkweDAwYzYsIDB4MDAzNiwgMHgwMDI2LCAweDAwMTYsIDB4MDE1NiwgMHgyMTc4LCAweDgxZmYsIDB4MTExOCwKLQkweDIwYTksIDB4MDAwMSwgMHgwMDk4LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYzQsIDB4MDE1MCwKLQkweGQwYTQsIDB4MDE0MCwgMHhhMDA2LCAweDAwNDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmQsIDB4MDgwYywKLQkweGE5NmMsIDB4MDA0ZSwgMHgyMGE5LCAweDAwZmYsIDB4MjAxMSwgMHgwMDAwLCAweDAwMjYsIDB4YTI4ZSwKLQkweDAwN2UsIDB4MDVjOCwgMHhhMjhlLCAweDAwN2YsIDB4MDViMCwgMHhhMjhlLCAweDAwODAsIDB4MDU5OCwKLQkweGEyODgsIDB4YWUzNCwgMHgyMTBjLCAweDgxZmYsIDB4MDU3MCwgMHg4ZmZmLCAweDA1YzEsIDB4MDBjNiwKLQkweDIxNjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NTAzNywgMHgwMGNlLCAweDIwMTksIDB4MDAyOSwKLQkweDA4MGMsIDB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MDBjNiwKLQkweDAwMjYsIDB4MjE2MCwgMHg2MjA0LCAweGEyOTQsIDB4MDBmZiwgMHhhMjg2LCAweDAwMDYsIDB4MTExOCwKLQkweDYwMDcsIDB4MDQwNCwgMHgwMDI4LCAweDIwMDEsIDB4MDAwNCwgMHg4MDA3LCAweGEyMTUsIDB4NjIwNiwKLQkweDAwMmUsIDB4MDBjZSwgMHgwMDE2LCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwMWUsIDB4MDA3ZSwKLQkweDIxNjAsIDB4MDgwYywgMHg0ZWNmLCAweDAwMmUsIDB4ODIxMCwgMHgxZjA0LCAweDJiM2UsIDB4MDE1ZSwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDA0NiwKLQkweDAwMjYsIDB4MDAxNiwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwgMHhkMGM0LCAweDAxNDgsIDB4ZDBhNCwKLQkweDAxMzgsIDB4YTAwNiwgMHgyMjIwLCAweDg0MjcsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwKLQkweDcyODQsIDB4ODJmZiwgMHgwMWY4LCAweDIwMTEsIDB4YWQ1MiwgMHgyMjE0LCAweGQyYWMsIDB4MTFkMCwKLQkweDIxMDAsIDB4MDgwYywgMHgyNjhhLCAweDgxZmYsIDB4MDFiOCwgMHgyMDE5LCAweDAwMDEsIDB4ODMxNCwKLQkweGEyZTAsIDB4YjNjMCwgMHgyYzA0LCAweGQzODQsIDB4MDEyMCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywKLQkweDAwMTAsIDB4YTA4NCwgMHgwMGZmLCAweGExMTYsIDB4MDEzOCwgMHhhMDk2LCAweDAwZmYsIDB4MDExMCwKLQkweDgzMTgsIDB4MGM2OCwgMHhhMDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGExODAsIDB4YWUzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwMTc4LCAweDAwMTYsIDB4MDBjNiwgMHgwODBjLCAweDk4MDcsIDB4MDAxZSwKLQkweDA5MGMsIDB4MTRmNiwgMHg2MTFhLCAweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDgwNzgsIDB4MDAxZSwKLQkweDA4MGMsIDB4NGM5ZiwgMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDdlZWYsIDB4N2RlOCwKLQkweDdjZTQsIDB4ODBlMiwgMHg3YmUxLCAweDgwZTAsIDB4ODBkYywgMHg4MGRhLCAweDdhZDksIDB4ODBkNiwKLQkweDgwZDUsIDB4ODBkNCwgMHg4MGQzLCAweDgwZDIsIDB4ODBkMSwgMHg3OWNlLCAweDc4Y2QsIDB4ODBjYywKLQkweDgwY2IsIDB4ODBjYSwgMHg4MGM5LCAweDgwYzcsIDB4ODBjNiwgMHg3N2M1LCAweDc2YzMsIDB4ODBiYywKLQkweDgwYmEsIDB4NzViOSwgMHg4MGI2LCAweDc0YjUsIDB4NzNiNCwgMHg3MmIzLCAweDgwYjIsIDB4ODBiMSwKLQkweDgwYWUsIDB4NzFhZCwgMHg4MGFjLCAweDcwYWIsIDB4NmZhYSwgMHg2ZWE5LCAweDgwYTcsIDB4NmRhNiwKLQkweDZjYTUsIDB4NmJhMywgMHg2YTlmLCAweDY5OWUsIDB4Njg5ZCwgMHg4MDliLCAweDgwOTgsIDB4Njc5NywKLQkweDY2OTAsIDB4NjU4ZiwgMHg2NDg4LCAweDYzODQsIDB4NjI4MiwgMHg4MDgxLCAweDgwODAsIDB4NjE3YywKLQkweDYwN2EsIDB4ODA3OSwgMHg1Zjc2LCAweDgwNzUsIDB4ODA3NCwgMHg4MDczLCAweDgwNzIsIDB4ODA3MSwKLQkweDgwNmUsIDB4NWU2ZCwgMHg4MDZjLCAweDVkNmIsIDB4NWM2YSwgMHg1YjY5LCAweDgwNjcsIDB4NWE2NiwKLQkweDU5NjUsIDB4NTg2MywgMHg1NzVjLCAweDU2NWEsIDB4NTU1OSwgMHg4MDU2LCAweDgwNTUsIDB4NTQ1NCwKLQkweDUzNTMsIDB4NTI1MiwgMHg1MTUxLCAweDUwNGUsIDB4NGY0ZCwgMHg4MDRjLCAweDgwNGIsIDB4NGU0YSwKLQkweDRkNDksIDB4ODA0NywgMHg0YzQ2LCAweDgwNDUsIDB4ODA0MywgMHg4MDNjLCAweDgwM2EsIDB4ODAzOSwKLQkweDgwMzYsIDB4NGIzNSwgMHg4MDM0LCAweDRhMzMsIDB4NDkzMiwgMHg0ODMxLCAweDgwMmUsIDB4NDcyZCwKLQkweDQ2MmMsIDB4NDUyYiwgMHg0NDJhLCAweDQzMjksIDB4NDIyNywgMHg4MDI2LCAweDgwMjUsIDB4NDEyMywKLQkweDQwMWYsIDB4M2YxZSwgMHgzZTFkLCAweDNkMWIsIDB4M2MxOCwgMHg4MDE3LCAweDgwMTAsIDB4M2IwZiwKLQkweDNhMDgsIDB4ODAwNCwgMHgzOTAyLCAweDgwMDEsIDB4ODAwMCwgMHg4MDAwLCAweDM4MDAsIDB4MzcwMCwKLQkweDM2MDAsIDB4ODAwMCwgMHgzNTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDM0MDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzMzAwLCAweDMyMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzMTAwLCAweDMwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4MmYwMCwgMHg4MDAwLCAweDJlMDAsIDB4MmQwMCwgMHgyYzAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4MmIwMCwgMHg4MDAwLCAweDJhMDAsIDB4MjkwMCwgMHgyODAwLCAweDgwMDAsIDB4MjcwMCwKLQkweDI2MDAsIDB4MjUwMCwgMHgyNDAwLCAweDIzMDAsIDB4MjIwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjEwMCwKLQkweDIwMDAsIDB4MWYwMCwgMHgxZTAwLCAweDFkMDAsIDB4MWMwMCwgMHg4MDAwLCAweDgwMDAsIDB4MWIwMCwKLQkweDFhMDAsIDB4ODAwMCwgMHgxOTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4MTgwMCwgMHg4MDAwLCAweDE3MDAsIDB4MTYwMCwgMHgxNTAwLCAweDgwMDAsIDB4MTQwMCwKLQkweDEzMDAsIDB4MTIwMCwgMHgxMTAwLCAweDEwMDAsIDB4MGYwMCwgMHg4MDAwLCAweDgwMDAsIDB4MGUwMCwKLQkweDBkMDAsIDB4MGMwMCwgMHgwYjAwLCAweDBhMDAsIDB4MDkwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDgwMCwKLQkweDA3MDAsIDB4ODAwMCwgMHgwNjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDA1MDAsIDB4MDQwMCwKLQkweDAzMDAsIDB4ODAwMCwgMHgwMjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAxMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwKLQkweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDIwNzEsIDB4YWQ4MSwKLQkweDcwMDMsIDB4MDAwMiwgMHhhMDA2LCAweDcwMTIsIDB4NzAxNiwgMHg3MDNhLCAweDcwM2UsIDB4NzAzMywKLQkweGFkOTEsIDB4NzAzNywgMHhhZDkxLCAweDcwMDcsIDB4MDAwMSwgMHgyMDYxLCAweGFkZDEsIDB4NjAwMywKLQkweDAwMDIsIDB4MDAwNSwgMHgxMDA0LCAweDJkMGMsIDB4MGUwNCwgMHgyZDBjLCAweDIwNzEsIDB4YWQ4MSwKLQkweDJiNzgsIDB4NzgxOCwgMHhkMDg0LCAweDExNDAsIDB4MmE2MCwgMHg3ODIwLCAweGEwOGUsIDB4MDA2OSwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODA0LCAweDJkOGEsIDB4MDAwNSwgMHgyMDcxLCAweGFkODEsIDB4NzAwNCwKLQkweDAwMDIsIDB4MmQxNSwgMHgyZDE2LCAweDJkMWYsIDB4MmQzMCwgMHgwMDA1LCAweDEwMDQsIDB4MmQxZSwKLQkweDBlMDQsIDB4MmQxZSwgMHgyYjc4LCAweDc4MTgsIDB4ZDA4NCwgMHgwMWU4LCAweDAwMDUsIDB4MmI3OCwKLQkweDIwNjEsIDB4YWRkMSwgMHg2MDA4LCAweGEwOGUsIDB4MDEwMCwgMHgwMTI4LCAweGEwODYsIDB4MDIwMCwKLQkweDA5MDQsIDB4MmRlYiwgMHgwMDA1LCAweDcwMTQsIDB4MjA2OCwgMHgyYTYwLCAweDcwMTgsIDB4MDgwNywKLQkweDcwMTAsIDB4MjA2OCwgMHg2ODM0LCAweGEwODYsIDB4MDEwMywgMHgwMTA4LCAweDAwMDUsIDB4MmE2MCwKLQkweDJiNzgsIDB4NzAxOCwgMHgwODA3LCAweDJhNjAsIDB4NzgyMCwgMHhhMDhhLCAweDAwNDAsIDB4MTIxMCwKLQkweDYxYzAsIDB4MDA0MiwgMHgyMTAwLCAweGEwOGEsIDB4MDAzZiwgMHgxYTA0LCAweDJkZTgsIDB4NjFjMCwKLQkweDA4MDQsIDB4MmQ4YSwgMHgyZGNjLCAweDJkZjcsIDB4MmRmZiwgMHgyZTAzLCAweDJlMGIsIDB4MmUxMSwKLQkweDJlMTUsIDB4MmUyMSwgMHgyZTI0LCAweDJlMmUsIDB4MmUzMSwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJlMzQsIDB4MmRlOCwgMHgyZTQzLCAweDJlNWEsIDB4MmU3MSwgMHgyZWU4LCAweDJlZWQsIDB4MmYxNiwKLQkweDJmNjcsIDB4MmY3OCwgMHgyZjk2LCAweDJmY2QsIDB4MmZkNywgMHgyZmU0LCAweDJmZjcsIDB4MzAxOCwKLQkweDMwMjEsIDB4MzA1NywgMHgzMDVkLCAweDJkZTgsIDB4MzA4NiwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgzMDhkLCAweDMwOTcsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MzA5ZiwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgzMGIxLCAweDMwYjksIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgwMDAyLCAweDMwY2IsIDB4MzExZiwgMHgzMTdhLCAweDMxOGEsIDB4MmRlOCwKLQkweDMxYTQsIDB4MzVjYiwgMHgzZmJiLCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDJlMmUsIDB4MmUzMSwgMHgzNWNkLCAweDJkZTgsIDB4MzVkYSwKLQkweDQwM2MsIDB4NDA5NywgMHg0MGZiLCAweDJkZTgsIDB4NDE1YSwgMHg0MTgwLCAweDQxOWYsIDB4MmRlOCwKLQkweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDM1ZGUsIDB4Mzc2YiwgMHgzNzg1LCAweDM3YTMsIDB4MzgwNCwKLQkweDM4NTgsIDB4Mzg2MywgMHgzODlhLCAweDM4YTksIDB4MzhiOCwgMHgzOGJiLCAweDM4ZGUsIDB4MzkyOCwKLQkweDM5OGUsIDB4Mzk5YiwgMHgzYTljLCAweDNiYjMsIDB4M2JkYywgMHgzY2RhLCAweDNjZmMsIDB4M2QwOCwKLQkweDNkNDEsIDB4M2UwNSwgMHgyZGU4LCAweDJkZTgsIDB4MmRlOCwgMHgyZGU4LCAweDNlNmQsIDB4M2U4OCwKLQkweDNlZmEsIDB4M2ZhYywgMHg3MTNjLCAweDAwMDAsIDB4MjAyMSwgMHg0MDAwLCAweDA4MGMsIDB4M2MzOSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4MmRkOCwgMHg3ODE4LCAweGQwODQsIDB4MDExMCwKLQkweDAxMmUsIDB4MGNiMCwgMHg3YzIyLCAweDc5MjYsIDB4N2EyYSwgMHg3YjJlLCAweDc4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHg3MDA3LCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDAxMmUsIDB4MDAwNSwKLQkweDIwMjEsIDB4NDAwMSwgMHgwYzE4LCAweDIwMjEsIDB4NDAwMiwgMHgwYzAwLCAweDIwMjEsIDB4NDAwMywKLQkweDA4ZTgsIDB4MjAyMSwgMHg0MDA1LCAweDA4ZDAsIDB4MjAyMSwgMHg0MDA2LCAweDA4YjgsIDB4YTAyZSwKLQkweDI1MjAsIDB4N2IyOCwgMHg3YTJjLCAweDc4MjQsIDB4NzkzMCwgMHgwODA0LCAweDNjNDYsIDB4NzgyMywKLQkweDAwMDQsIDB4NzgyNCwgMHgwODA3LCAweGEwMmUsIDB4MjUyMCwgMHg3YjI4LCAweDdhMmMsIDB4NzgyNCwKLQkweDc5MzAsIDB4MDgwNCwgMHgzYzQ5LCAweDc5MjQsIDB4NzgyOCwgMHgyMTE0LCAweDIwMGEsIDB4MDgwNCwKLQkweDJkY2MsIDB4NzkyNCwgMHgyMTE0LCAweDA4MDQsIDB4MmRjYywgMHgyMDk5LCAweDAwMDksIDB4MjBhMSwKLQkweDAwMDksIDB4MjBhOSwgMHgwMDA3LCAweDUzYTMsIDB4NzkyNCwgMHg3YTI4LCAweDdiMmMsIDB4MDgwNCwKLQkweDJkY2MsIDB4NzgyNCwgMHgyMDYwLCAweDAwOTAsIDB4MjAwOSwgMHgwMDAyLCAweDIwMTEsIDB4MDAwMSwKLQkweDIwMTksIDB4MDAxYiwgMHg3ODNiLCAweDAwMTcsIDB4MDgwNCwgMHgyZGNjLCAweDdkMzgsIDB4N2MzYywKLQkweDA4NDAsIDB4N2QzOCwgMHg3YzNjLCAweDA4ODgsIDB4MjA2MSwgMHgxMDAwLCAweGUxMGMsIDB4YTAwNiwKLQkweDJjMTUsIDB4YTIwMCwgMHg4YzYwLCAweDgxMDksIDB4MWRkOCwgMHgyMDEwLCAweGEwMDUsIDB4MDkwNCwKLQkweDJkY2MsIDB4MDgwNCwgMHgyZGVlLCAweDIwNjksIDB4YWQ1MSwgMHg3ODI0LCAweDc5MzAsIDB4YTExYSwKLQkweDFhMDQsIDB4MmRmNCwgMHg4MDE5LCAweDA5MDQsIDB4MmRmNCwgMHg2ODRhLCAweDY5NDIsIDB4NzgyYywKLQkweDY4NTIsIDB4NzgyOCwgMHg2ODU2LCAweGEwMDYsIDB4Njg1YSwgMHg2ODVlLCAweDA4MGMsIDB4NWExYywKLQkweDA4MDQsIDB4MmRjYywgMHgyMDY5LCAweGFkNTEsIDB4NzgyNCwgMHg3OTM0LCAweGExMWEsIDB4MWEwNCwKLQkweDJkZjQsIDB4ODAxOSwgMHgwOTA0LCAweDJkZjQsIDB4Njg0ZSwgMHg2OTQ2LCAweDc4MmMsIDB4Njg2MiwKLQkweDc4MjgsIDB4Njg2NiwgMHhhMDA2LCAweDY4NmEsIDB4Njg2ZSwgMHgwODBjLCAweDUwZDksIDB4MDgwNCwKLQkweDJkY2MsIDB4YTAyZSwgMHgyNTIwLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDc5MjQsIDB4N2IyOCwKLQkweDdhMmMsIDB4MjBhOSwgMHgwMDA1LCAweDIwYTEsIDB4YWQ4OCwgMHg0MWExLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHgyMDA5LCAweDAwMjAsIDB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4MmU4OSwKLQkweDAwMDUsIDB4NjgzNCwgMHgyMDA4LCAweGEwODQsIDB4MDBmZiwgMHhhMDk2LCAweDAwMTEsIDB4MDEyMCwKLQkweGEwOTYsIDB4MDAxOSwgMHgxOTA0LCAweDJkZjEsIDB4ODEwZiwgMHhhMThjLCAweDAwZmYsIDB4MDkwNCwKLQkweDJkZjEsIDB4NzEwZSwgMHg3MDBjLCAweDgwMDEsIDB4MDUyOCwgMHg3MDBlLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHgyMDA5LCAweDAwMjAsIDB4MjA2MSwgMHhhZGQxLCAweDYyMjQsIDB4NjMyOCwKLQkweDY0MmMsIDB4NjUzMCwgMHhhMjkwLCAweDAwNDAsIDB4YTM5OSwgMHgwMDAwLCAweGE0YTEsIDB4MDAwMCwKLQkweGE1YTksIDB4MDAwMCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwgMHgyZWI3LCAweDAwMDUsIDB4NjgzNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDk2LCAweDAwMDIsIDB4MDEyMCwgMHhhMDk2LCAweDAwMGEsIDB4MTkwNCwKLQkweDJkZjEsIDB4MDhjMCwgMHg3MDEwLCAweDIwNjgsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywKLQkweDRiN2MsIDB4MTEyOCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgyZWQxLCAweDAwMDUsIDB4MDgwYywKLQkweDUxZGYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LCAweDIwOTksIDB4YWQ4OCwKLQkweDUzMGEsIDB4MjEwMCwgMHhhMjEwLCAweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwKLQkweDAwMDAsIDB4YWQ4MCwgMHgwMDBkLCAweDIwMDksIDB4MDAyMCwgMHgwMTJlLCAweDA4MDQsIDB4M2M0OSwKLQkweDYxYTgsIDB4NzgyNCwgMHg2MGFhLCAweDA4MDQsIDB4MmRjYywgMHgyMDkxLCAweDgwMDAsIDB4NzgyMywKLQkweDQwMDAsIDB4NzgyNywgMHg0OTUzLCAweDc4MmIsIDB4NTAyMCwgMHg3ODJmLCAweDIwMjAsIDB4MjAwOSwKLQkweDAxN2YsIDB4MjEwNCwgMHg3ODMyLCAweDNmMDAsIDB4NzgzNiwgMHgyMDYxLCAweDAxMDAsIDB4NjIwMCwKLQkweDIwNjEsIDB4MDIwMCwgMHg2MDNjLCAweDgwMDcsIDB4YTIwNSwgMHg3ODNhLCAweDIwMDksIDB4MDRmZCwKLQkweDIxMDQsIDB4NzgzZSwgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwNzEsIDB4MDAxMCwgMHgyMGMxLCAweDAwZjAsIDB4MDgwNCwgMHgwNDI3LCAweDgxZmYsIDB4MTkwNCwKLQkweDJkZjEsIDB4NzkyNCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHgwODBjLCAweDRjZGMsIDB4MTkwNCwKLQkweDJkZjQsIDB4N2UzOCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwgMHg0MDAwLCAweDAyMTAsIDB4MDgwNCwKLQkweDJkZjQsIDB4N2MyOCwgMHg3ZDJjLCAweDA4MGMsIDB4NGU5NiwgMHhkMjhjLCAweDExMTgsIDB4MDgwYywKLQkweDRlNDEsIDB4MDAxMCwgMHgwODBjLCAweDRlNmYsIDB4MTUxOCwgMHgyMDYxLCAweGI0MDAsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMTAsIDB4YTA2ZCwKLQkweDAxMzAsIDB4NjgzYywgMHhhNDA2LCAweDExMTgsIDB4Njg0MCwgMHhhNTA2LCAweDAxNTAsIDB4MDEyZSwKLQkweGFjZTAsIDB4MDAxOCwgMHgyMDAxLCAweGFkMTYsIDB4MjAwNCwgMHhhYzAyLCAweDFhMDQsIDB4MmRmMSwKLQkweDBjMzAsIDB4MDgwYywgMHg5MjljLCAweDAxMmUsIDB4MDkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmRjYywKLQkweGEwMGUsIDB4MjAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NTFkZiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4OTgwMywgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGQ5NiwKLQkweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDRlYTIsIDB4MDkwNCwgMHgyZGYxLCAweDA4MDQsIDB4MmRjYywKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywKLQkweDRmMGQsIDB4MDkwNCwgMHgyZGYxLCAweDIwMTksIDB4MDAwNSwgMHgwODBjLCAweDRlYmQsIDB4MDkwNCwKLQkweDJkZjEsIDB4NzgyOCwgMHhhMDhhLCAweDEwMDAsIDB4MWEwNCwgMHgyZGY0LCAweDgwMDMsIDB4ODAwYiwKLQkweDgxMGIsIDB4YTEwOCwgMHgwODBjLCAweDY1MTksIDB4MDgwNCwgMHgyZGNjLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4ODFmZiwgMHgwMTE4LCAweDIwMDksIDB4MDAwMSwgMHgwNDQ4LCAweDIwMjksIDB4MDBmZiwKLQkweDY0NGMsIDB4MjQwMCwgMHhhNTA2LCAweDAxZjAsIDB4MjUwOCwgMHgwODBjLCAweDRjZGMsIDB4MTFkMCwKLQkweDA4MGMsIDB4NGYwZCwgMHgxMTI4LCAweDIwMDksIDB4MDAwMiwgMHg2MmIwLCAweDI1MTgsIDB4MDBiOCwKLQkweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDRlYmQsIDB4MTExOCwgMHgyMDA5LCAweDAwMDYsIDB4MDA3OCwKLQkweDc4MjQsIDB4YTA4YSwgMHgxMDAwLCAweDEyNzAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4YTEwOCwKLQkweDA4MGMsIDB4NjUxOSwgMHg4NTI5LCAweDFhZTgsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRmMSwgMHgwMTJlLCAweDA4MDQsIDB4MmRmNCwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwKLQkweDJkZjQsIDB4MDgwYywgMHg0ZGZjLCAweDA4MGMsIDB4NGU5NiwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGRlZCwKLQkweDA4MGMsIDB4NGU5NiwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGU3MSwgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDRiYzAsIDB4MDgwYywgMHg0ZTNhLCAweDA4MGMsIDB4NGU5NiwgMHgwODA0LCAweDJkY2MsIDB4MDgwYywKLQkweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGQ5NiwgMHgwOTA0LCAweDJkZjEsIDB4NjJhMCwKLQkweDIwMTksIDB4MDAwNSwgMHgwMGM2LCAweDA4MGMsIDB4NGVjZiwgMHgyMDYxLCAweDAwMDAsIDB4MDgwYywKLQkweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDIwMDksIDB4MDAwMCwKLQkweDA4MGMsIDB4YTcxMiwgMHgwMDdlLCAweDAwY2UsIDB4MDgwYywgMHg0ZTk2LCAweDA4MDQsIDB4MmRjYywKLQkweDA4MGMsIDB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywgMHg0ZTk2LCAweDIyMDgsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDE1NiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2OSwgMHhhZTEzLCAweDY4MTAsIDB4NjkxNCwKLQkweGExMGEsIDB4MTIxMCwgMHgyMDA5LCAweDAwMDAsIDB4NjgxNiwgMHgyMDExLCAweDAwMDAsIDB4MjAxOSwKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDdlLCAweDIwNjksIDB4YWUzNCwgMHgyZDA0LCAweGEwNzUsIDB4MDEzMCwKLQkweDcwNGMsIDB4MDA3MSwgMHhhMjEwLCAweDcwODAsIDB4MDA1OSwgMHhhMzE4LCAweDhkNjgsIDB4MWYwNCwKLQkweDMwMzUsIDB4MjMwMCwgMHhhMjE4LCAweDAwZWUsIDB4MDBkZSwgMHgwMTVlLCAweDA4MDQsIDB4MmRjYywKLQkweDAwZjYsIDB4MDAxNiwgMHhhMDdkLCAweDAxNDAsIDB4MjAwMSwgMHgwMDAwLCAweDgwMDAsIDB4MmYwYywKLQkweDgxZmYsIDB4MDExMCwgMHgyMTc4LCAweDBjZDAsIDB4MDAxZSwgMHgwMGZlLCAweDAwMDUsIDB4MjA2OSwKLQkweGFlMTMsIDB4NjkxMCwgMHg2MmFjLCAweDA4MDQsIDB4MmRjYywgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwKLQkweDYxNGMsIDB4YTE5MCwgMHgyYmU2LCAweDIyMTUsIDB4YTI5NCwgMHgwMGZmLCAweDYzNmMsIDB4ODNmZiwKLQkweDAxMDgsIDB4NjI3MCwgMHg2N2QwLCAweGQ3OWMsIDB4MDExOCwgMHgyMDMxLCAweDAwMDEsIDB4MDA5MCwKLQkweGQ3YWMsIDB4MDExOCwgMHgyMDMxLCAweDAwMDMsIDB4MDA2OCwgMHhkN2E0LCAweDAxMTgsIDB4MjAzMSwKLQkweDAwMDIsIDB4MDA0MCwgMHgwODBjLCAweDU3NGYsIDB4MTExOCwgMHgyMDMxLCAweDAwMDQsIDB4MDAxMCwKLQkweDIwMzEsIDB4MDAwMCwgMHg3ZTNhLCAweDdmM2UsIDB4MDgwNCwgMHgyZGNjLCAweDYxM2MsIDB4NjI0MCwKLQkweDIwMTksIDB4YWZhMywgMHgyMzFjLCAweDA4MDQsIDB4MmRjYywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYxMzQsIDB4YTAwNiwgMHgyMDEwLCAweDIwMTgsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDgwYywKLQkweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDYyNDQsIDB4NjMzOCwgMHgwODA0LCAweDJkY2MsIDB4NjEzYywKLQkweDYyNDAsIDB4NzgyNCwgMHg2MDNlLCAweDdiMjgsIDB4NjM0MiwgMHgyMDY5LCAweGFkNTEsIDB4ODMxZiwKLQkweGEzMDUsIDB4NjgxNiwgMHg3ODJjLCAweDIwNjksIDB4YWZhMywgMHgyZDFjLCAweDIwNmEsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzgyNCwgMHg2MDM2LCAweDAxMmUsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwgMHg3ODI4LCAweGEwMGQsIDB4MDkwNCwKLQkweDJkZjQsIDB4NzgyYywgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwgMHg2MjQ0LCAweDYxNDYsIDB4NjMzOCwKLQkweDYwM2EsIDB4MDgwNCwgMHgyZGNjLCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywKLQkweDE5MDQsIDB4MmRmMSwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE5NiwgMHgwMGZmLCAweDExMzAsIDB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NSwKLQkweGZmMDAsIDB4MDA3OCwgMHhhMTgyLCAweDAwN2YsIDB4MTZhMCwgMHhhMTg4LCAweDJiZTYsIDB4MjEwZCwKLQkweGExOGMsIDB4MDBmZiwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwgMHhhMTE2LCAweDA1NTAsIDB4ODEwZiwKLQkweGExMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAwNiwgMHgwODBjLCAweDgwMjIsIDB4MDAwZSwKLQkweDAxZTAsIDB4NjAxYSwgMHg2MDBiLCAweGJjMDksIDB4NjAxZiwgMHgwMDAxLCAweDA4MGMsIDB4M2MwNSwKLQkweDAxZDgsIDB4NjgzNywgMHgwMDAwLCAweDcwMDcsIDB4MDAwMywgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwKLQkweGMwZmQsIDB4NjgzYSwgMHg3MDFiLCAweDMxNzMsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMiwKLQkweDA4MGMsIDB4ODBhNywgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMTJlLCAweDAwY2UsIDB4MDgwNCwKLQkweDJkZjEsIDB4MDBjZSwgMHgwODA0LCAweDJkZjQsIDB4MDgwYywgMHg4MDc4LCAweDBjYjAsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTkwNCwgMHgyZGYxLCAweDAwYzYsIDB4MjA2MSwKLQkweDAxMDAsIDB4NzkyNCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHhhMTk2LCAweDAwZmYsIDB4MTEzMCwKLQkweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODUsIDB4ZmYwMCwgMHgwMDc4LCAweGExODIsIDB4MDA3ZiwKLQkweDE2YTAsIDB4YTE4OCwgMHgyYmU2LCAweDIxMGQsIDB4YTE4YywgMHgwMGZmLCAweDIwMDEsIDB4YWQxNCwKLQkweDIwMDQsIDB4YTExNiwgMHgwNTUwLCAweDgxMGYsIDB4YTEwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDAwMDYsIDB4MDgwYywgMHg4MDIyLCAweDAwMGUsIDB4MDFlMCwgMHg2MDFhLCAweDYwMGIsIDB4YmMwNSwKLQkweDYwMWYsIDB4MDAwMSwgMHgwODBjLCAweDNjMDUsIDB4MDFkOCwgMHg2ODM3LCAweDAwMDAsIDB4NzAwNywKLQkweDAwMDMsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDcwMWIsIDB4MzE3MywKLQkweDJkMDAsIDB4NjAxMiwgMHgyMDA5LCAweDAwMzIsIDB4MDgwYywgMHg4MGE3LCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDEyZSwgMHgwMGNlLCAweDA4MDQsIDB4MmRmMSwgMHgwMGNlLCAweDA4MDQsIDB4MmRmNCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwY2IwLCAweDY4MzAsIDB4YTA4NiwgMHgwMTAwLCAweDA5MDQsIDB4MmRmMSwKLQkweDA4MDQsIDB4MmRjYywgMHgyMDYxLCAweGIwNDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwKLQkweGQwODQsIDB4MDEyOCwgMHg2MTA0LCAweDYyMDgsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRmNCwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDU3NGYsIDB4MDkwNCwKLQkweDJkZjEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjI0NCwgMHg2MDY0LCAweGEyMDIsIDB4MDI0OCwKLQkweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2YzAsIDB4MDgwYywgMHg0MzZlLCAweDAxMmUsIDB4MDgwNCwKLQkweDJkY2MsIDB4MDEyZSwgMHgwODA0LCAweDJkZjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzgyNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDAyLCAweDMxYjYsIDB4MzFiZiwgMHgzMWM2LCAweDMxYjMsIDB4MzFiMywKLQkweDMxYjMsIDB4MzFiMywgMHgzMWIzLCAweDAxMmUsIDB4MDgwNCwgMHgyZGY0LCAweDIwMDksIDB4MDExNCwKLQkweDIxMDQsIDB4YTA4NSwgMHgwODAwLCAweDIwMGEsIDB4MDgwYywgMHgzMzJmLCAweDAwNzAsIDB4MjAwOSwKLQkweDAxMGIsIDB4MjAwYiwgMHgwMDEwLCAweDA4MGMsIDB4MzMyZiwgMHgwMDM4LCAweDgxZmYsIDB4MDEyOCwKLQkweDAxMmUsIDB4MjAyMSwgMHg0MDBiLCAweDA4MDQsIDB4MmRjZSwgMHgwMDg2LCAweDAwOTYsIDB4MDBhNiwKLQkweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDA5LCAweDAxMDEsIDB4MjEwYywKLQkweDAwMTYsIDB4MjAwMSwgMHgwMTM4LCAweDIwMGMsIDB4MjAwMywgMHgwMDAxLCAweDAwMTYsIDB4MjAwMSwKLQkweDAwN2EsIDB4MjAzNCwgMHgyMDAxLCAweDAwN2IsIDB4MjAyYywgMHhhMDA2LCAweDIwNDgsIDB4MjA1MCwKLQkweDIwNTgsIDB4MDgwYywgMHgzNTcwLCAweDA4MGMsIDB4MzRkYSwgMHhhMDNlLCAweDI3MjAsIDB4MDBmNiwKLQkweDAwZTYsIDB4MDBjNiwgMHgyZDYwLCAweDIwNzEsIDB4YjAxZSwgMHgyMDc5LCAweDAwMjAsIDB4MDBkNiwKLQkweDIwNjksIDB4MDAwMCwgMHg2ODI0LCAweGQwYjQsIDB4MDE0MCwgMHgyMDAxLCAweDAwN2QsIDB4MjAwNCwKLQkweDc4M2UsIDB4MjAwMSwgMHgwMDdjLCAweDIwMDQsIDB4NzgzYSwgMHgwMGRlLCAweDIwMTEsIDB4MDAwMSwKLQkweDA4MGMsIDB4MzQ4NiwgMHgwODBjLCAweDM0ODYsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDgwYywKLQkweDMzZDUsIDB4MDgwYywgMHgzNGFlLCAweDA4MGMsIDB4MzQyYiwgMHgwODBjLCAweDMzOTQsIDB4MDgwYywKLQkweDMzYzUsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzgyNCwgMHhkMDk0LCAweDA1MzAsIDB4NzgxNCwKLQkweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTAsIDB4NzgxNiwgMHgyMDc5LCAweDAxNDAsIDB4MDgwYywKLQkweDMzMGQsIDB4MTExMCwgMHgwMGZlLCAweDA0MzAsIDB4NzgwNCwgMHhkMGRjLCAweDBkYzAsIDB4MjA3OSwKLQkweDAxMDAsIDB4NzgyNywgMHgwMDg2LCAweDc4MTQsIDB4YTA4NCwgMHgwMTg0LCAweGEwODUsIDB4MDAzMiwKLQkweDc4MTYsIDB4MDgwYywgMHgzMzBkLCAweDExMTAsIDB4MDBmZSwgMHgwMGEwLCAweDc4MjQsIDB4ZDBiYywKLQkweDBkYzAsIDB4NzgyNywgMHgwMDgwLCAweGEwMjYsIDB4N2MxNiwgMHg3ODI0LCAweGQwYWMsIDB4MDEzMCwKLQkweDhiNTgsIDB4MDgwYywgMHgzMzE3LCAweDAwZmUsIDB4MDgwNCwgMHgzMmQ3LCAweDAwZmUsIDB4MDgwYywKLQkweDMzMGQsIDB4MTE1MCwgMHg4OTQ4LCAweDIwMDEsIDB4MDA3YSwgMHgyNjAyLCAweDIwMDEsIDB4MDA3YiwKLQkweDI1MDIsIDB4MDgwYywgMHgzMzE3LCAweDAwODgsIDB4ODdmZiwgMHgwMTQwLCAweDIwMDEsIDB4MDIwMSwKLQkweDIwMDQsIDB4YTAwNSwgMHgxOTA0LCAweDMyMTEsIDB4ODczOSwgMHgwMDM4LCAweDIwMDEsIDB4YWZmZCwKLQkweDIwMDQsIDB4YTA4NiwgMHgwMDAwLCAweDE5MDQsIDB4MzIxMSwgMHgyMDAxLCAweDAwMzMsIDB4MjAwMywKLQkweDAwZjYsIDB4ODYzMSwgMHgxMjA4LCAweDg1MjksIDB4MjUwMCwgMHhhNjA1LCAweDA5MDQsIDB4MzJkNywKLQkweDc4MjQsIDB4ZDBiYywgMHgwMTI4LCAweDI5MDAsIDB4YWEwNSwgMHhhYjA1LCAweDE5MDQsIDB4MzJkNywKLQkweDYwMzMsIDB4MDAwZCwgMHgyMDAxLCAweDAwMzAsIDB4MjAwMywgMHgwMDA0LCAweDc4MjQsIDB4ZDBhYywKLQkweDExNDgsIDB4MjAwMSwgMHhhZmZkLCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLCAweDAwMzAsIDB4MjAwMywKLQkweDAwMDksIDB4MDA0MCwgMHg2MDI3LCAweDAwMDEsIDB4MjAwMSwgMHgwMDc1LCAweDIwMDQsIDB4YTAwNSwKLQkweDAxMDgsIDB4NjAyNiwgMHgyYzAwLCAweDYwMWEsIDB4MjBlMSwgMHg5MDQwLCAweDJkMDAsIDB4NjgxYSwKLQkweDY4MzMsIDB4MDAwZCwgMHg3ODI0LCAweGQwYTQsIDB4MTE4MCwgMHg2ODI3LCAweDAwMDAsIDB4MDBjNiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMDYxLCAweDAwMjAsIDB4NjAwMywgMHgwMDA4LCAweDIwMDEsIDB4MDIwMywKLQkweDIwMDQsIDB4MWYwNCwgMHgzMmFjLCAweDAwY2UsIDB4MDA0MCwgMHg2ODI3LCAweDAwMDEsIDB4MjAwMSwKLQkweDAwNzQsIDB4MjAwNCwgMHhhMDA1LCAweDAxMDgsIDB4NjgyNiwgMHgwMGY2LCAweDAwYzYsIDB4MjA3OSwKLQkweDAxMDAsIDB4MjA2MSwgMHgwMDIwLCAweDc4MjcsIDB4MDAwMiwgMHgyMDAxLCAweDAwNzIsIDB4MjAwNCwKLQkweGEwODQsIDB4ZmZmOCwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwgMHgwMDczLCAweDIwMDQsIDB4NjAxZSwKLQkweDc4YzYsIDB4MDAwZSwgMHg3OGNhLCAweDAwY2UsIDB4MDBmZSwgMHgwODA0LCAweDMxZWYsIDB4MjA2MSwKLQkweDAxMDAsIDB4NjAyNywgMHgwMDAyLCAweDAwMWUsIDB4NjFlMiwgMHgwMDFlLCAweDYxMDYsIDB4NzgyNCwKLQkweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDE4OCwgMHgyMGUxLCAweDkwMjgsIDB4NjA1MCwKLQkweGEwODQsIDB4ZjdlZiwgMHg2MDUyLCAweDYwMmYsIDB4MDAwMCwgMHg2MDJjLCAweGMwYWMsIDB4NjAyZSwKLQkweDYwNGIsIDB4ZjdmNywgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDI5MDgsIDB4MmExMCwKLQkweDJiMTgsIDB4MmIwMCwgMHhhYTA1LCAweGE5MDUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwKLQkweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4MTExOCwgMHgwMTJlLCAweDA4MDQsIDB4MmRjYywKLQkweDAxMmUsIDB4MjAyMSwgMHg0MDBjLCAweDA4MDQsIDB4MmRjZSwgMHhhMDg1LCAweDAwMDEsIDB4MWQwNCwKLQkweDMzMTYsIDB4MjA5MSwgMHg2MDAwLCAweDg0MjAsIDB4YTQ4NiwgMHgwMDY0LCAweDAwMDUsIDB4MjAwMSwKLQkweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwKLQkweDAwMjAsIDB4MjAwMywgMHgwMDA0LCAweDIwMDEsIDB4YWZmZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwKLQkweGIwMWUsIDB4MjAwMywgMHgwMDAwLCAweDIwZTEsIDB4ZjAwMCwgMHhhMDI2LCAweDAwMDUsIDB4MDBmNiwKLQkweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweGFkMTQsIDB4MjAwYywgMHg3OTMyLCAweDc5MzYsIDB4MDgwYywKLQkweDI2YTAsIDB4Nzg1MCwgMHhhMDg0LCAweDA5ODAsIDB4YTA4NSwgMHgwMDMwLCAweDc4NTIsIDB4MjAxOSwKLQkweDAxZjQsIDB4ODMxOSwgMHgxZGYwLCAweGEwODQsIDB4MDk4MCwgMHg3ODUyLCAweDc4MmMsIDB4YzBhZCwKLQkweDc4MmUsIDB4MjBhOSwgMHgwMDQ2LCAweDFkMDQsIDB4MzM0YiwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDMzNGIsIDB4Nzg1MCwgMHhhMDg1LCAweDA0MDAsIDB4Nzg1MiwgMHgyMDAxLCAweDAwMDksIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDEsIDB4MTExOCwgMHg3ODJjLCAweGMwYWMsIDB4NzgyZSwKLQkweDc4NGIsIDB4ZjdmNywgMHg3ODQzLCAweDAwOTAsIDB4Nzg0MywgMHgwMDEwLCAweDIwYTksIDB4MDAwZSwKLQkweGUwMDAsIDB4MWYwNCwgMHgzMzY4LCAweDc4NTAsIDB4YTA4NSwgMHgxNDAwLCAweDc4NTIsIDB4MjAxOSwKLQkweDYxYTgsIDB4Nzg1NCwgMHhlMDAwLCAweGUwMDAsIDB4ZDA4YywgMHgxMTEwLCAweDgzMTksIDB4MWRjOCwKLQkweDc4MjcsIDB4MDA0OCwgMHg3ODUwLCAweGEwODUsIDB4MDQwMCwgMHg3ODUyLCAweDc4NDMsIDB4MDA0MCwKLQkweDIwMTksIDB4MDFmNCwgMHhlMDAwLCAweGUwMDAsIDB4ODMxOSwgMHgxZGUwLCAweDIwMDEsIDB4MDE0MCwKLQkweDIwMDMsIDB4MDEwMCwgMHg3ODI3LCAweDAwMjAsIDB4Nzg0MywgMHgwMDAwLCAweDIwMDMsIDB4MDAwMCwKLQkweDc4MjcsIDB4MDA0OCwgMHgwMGZlLCAweDAwMDUsIDB4NzgyNCwgMHhkMGFjLCAweDExYzgsIDB4MDBmNiwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmZkLCAweDIwNzksIDB4MDAzMCwgMHgyMDAxLCAweDAyMDEsIDB4MjAwNCwKLQkweGEwMDUsIDB4MDE2MCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwgMHgxMTQwLCAweDAwNTEsIDB4ZDBiYywKLQkweDAxMDgsIDB4ODczOCwgMHg3MDAzLCAweDAwMDMsIDB4NzgwMywgMHgwMDE5LCAweDAwZWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzgwYywgMHhhMDhjLCAweDAwNzAsIDB4MDE3OCwgMHgyMDA5LCAweDAwN2EsIDB4MjYwYSwKLQkweDIwMDksIDB4MDA3YiwgMHgyNTBhLCAweGQwYjQsIDB4MDEwOCwgMHg4YTUwLCAweGQwYWMsIDB4MDEwOCwKLQkweDg5NDgsIDB4ZDBhNCwgMHgwMTA4LCAweDhiNTgsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwKLQkweDc4MWMsIDB4ZDA4NCwgMHgwMTQwLCAweDIwZTEsIDB4MDAwNywgMHgyMGUxLCAweDIwMDAsIDB4MjAwMSwKLQkweDAyMGEsIDB4MjAwNCwgMHgwY2E4LCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDEwMCwKLQkweDIwMDksIDB4YWQxNCwgMHgyMTBjLCAweDcxNmUsIDB4NzA2MywgMHgwMTAwLCAweDcxNjYsIDB4NzE5ZSwKLQkweDcwNmIsIDB4MDAwMCwgMHg3MDczLCAweDA4MDksIDB4NzA3NywgMHgwMDA4LCAweDcwNzgsIDB4YTA4MCwKLQkweDAxMDAsIDB4NzA3YSwgMHg3MDgwLCAweDgwMDAsIDB4NzA4MiwgMHg3MDg3LCAweGFhYWEsIDB4YTAwNiwKLQkweDcwOGEsIDB4NzA4ZSwgMHg3MDdlLCAweDcwZDYsIDB4NzBhYiwgMHgwMDM2LCAweDcwYWYsIDB4OTVkNSwKLQkweDcwMjcsIDB4MDA4MCwgMHg3MDE0LCAweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMzIsIDB4NzAxNiwKLQkweDA4MGMsIDB4MzRhZSwgMHgwODBjLCAweDMzMGQsIDB4MTExMCwgMHg4NDIxLCAweDAwMjgsIDB4NzAyNCwKLQkweGQwYmMsIDB4MGRiMCwgMHg3MDI3LCAweDAwODAsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4YWZmZCwKLQkweDIwNzksIDB4MDAzMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODI0LCAweGQwYjQsIDB4MDEyMCwKLQkweDY4M2MsIDB4NzgzZSwgMHg2ODM4LCAweDc4M2EsIDB4MDBkZSwgMHgyMDExLCAweDAwMTEsIDB4MDgwYywKLQkweDM0ODYsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4MzQ4NiwgMHgwMGVlLCAweDAwZmUsIDB4NzAxNywKLQkweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLCAweGFmZmQsIDB4MjA3OSwKLQkweDAwMzAsIDB4NzkwNCwgMHhkMWZjLCAweDA5MDQsIDB4MzQ4MywgMHg3ODAzLCAweDAwMDIsIDB4YTAyNiwKLQkweGQxOWMsIDB4MTkwNCwgMHgzNDdmLCAweDcwMDAsIDB4MDAwMiwgMHgzNDgzLCAweDM0NDEsIDB4MzQ2NSwKLQkweDM0N2YsIDB4ZDFiYywgMHgxMTUwLCAweGQxZGMsIDB4MTE1MCwgMHg4MDAxLCAweDcwMDIsIDB4MjAxMSwKLQkweDAwMDEsIDB4MDRlMSwgMHgwNWMwLCAweDA0ZDEsIDB4MDRiMCwgMHg3ODBmLCAweDAwMDAsIDB4NzgyMCwKLQkweDc5MjQsIDB4NzgwMywgMHgwMDA0LCAweDc4MjIsIDB4NzkyNiwgMHgyMDAxLCAweDAyMDEsIDB4MjAwYywKLQkweDgxZmYsIDB4MGRlOCwgMHgwODBjLCAweDMzYjEsIDB4MjAwOSwgMHgwMDAxLCAweDc4MDgsIDB4ZDBlYywKLQkweDAxMTAsIDB4MjAwOSwgMHgwMDExLCAweDc5MDIsIDB4MDBmMCwgMHg4MDAxLCAweDcwMDIsIDB4YTE4NCwKLQkweDA4ODAsIDB4MTEzOCwgMHg3ODA0LCAweGQwZmMsIDB4MTk0MCwgMHgyMDExLCAweDAwMDEsIDB4MDBiMSwKLQkweDAwOTAsIDB4NjAzMCwgMHhhMDkyLCAweDAwMDQsIDB4YTA4NiwgMHgwMDA5LCAweDExMjAsIDB4NjAwMCwKLQkweDYwMWEsIDB4MjAxMSwgMHgwMDI1LCAweDYyMzIsIDB4ZDFkYywgMHgxOTg4LCAweDA4NzAsIDB4NzgwMywKLQkweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMjQsIDB4YTAwNSwKLQkweDA1MjAsIDB4ODAwMSwgMHg2MDI2LCAweDYwMTgsIDB4NjEzMCwgMHhhMTQwLCAweDI4MDQsIDB4NzgzMiwKLQkweDg4NDAsIDB4MjgwNCwgMHg3ODM2LCAweDg4NDAsIDB4MjgwNCwgMHg3ODIyLCAweDg4NDAsIDB4MjgwNCwKLQkweDc4MjYsIDB4ODg0MCwgMHg3YTAyLCAweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweDYwMTgsIDB4YTgwMiwKLQkweGEwOGEsIDB4MDAyOSwgMHgxMTM4LCAweDYwMTgsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4NjAxYSwKLQkweDIwMDEsIDB4MDAwZCwgMHg2MDMyLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwKLQkweDAwYzYsIDB4MjA3MSwgMHhiMDFlLCAweDIwNzksIDB4MDAyMCwgMHg3OTA0LCAweGQxZmMsIDB4MDFmMCwKLQkweDc4MDMsIDB4MDAwMiwgMHgyZDYwLCAweGEwMjYsIDB4NzAwMCwgMHgwMDAyLCAweDM0ZDYsIDB4MzRjMSwKLQkweDM0Y2QsIDB4ODAwMSwgMHg3MDAyLCAweGQxOWMsIDB4MTE4OCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywKLQkweDM0ODYsIDB4MDE2MCwgMHgwODBjLCAweDM0ODYsIDB4MDA0OCwgMHg4MDAxLCAweDcwMDIsIDB4NzgwNCwKLQkweGQwZmMsIDB4MWQzMCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHgzNDg2LCAweDAwY2UsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDYxLCAweDAyMDAsIDB4NjAxYiwKLQkweDAwMDQsIDB4MjA2MSwgMHgwMTAwLCAweDYwY2YsIDB4MDQwMCwgMHg2MDA0LCAweGMwYWMsIDB4YTA4NSwKLQkweDAyMDAsIDB4NjAwNiwgMHgyMDAxLCAweDAwNzQsIDB4MjAwNCwgMHhhMDA1LCAweDAxZjgsIDB4MjAzOCwKLQkweDIwMDEsIDB4MDA3NiwgMHgyMDI0LCAweDIwMDEsIDB4MDA3NywgMHgyMDFjLCAweDA4MGMsIDB4M2MwNSwKLQkweDY4MzMsIDB4MDAwZCwgMHg2ZjI2LCAweDJkMDAsIDB4NjgxYSwgMHhhNzhhLCAweDAwMDcsIDB4MDIyMCwKLQkweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHhhMDNlLCAweDY4MTgsIDB4YTA4MCwKLQkweDAwMGQsIDB4MDRhMSwgMHgxZDkwLCAweDJkMDAsIDB4NjgxYSwgMHgwMDg4LCAweDA4MGMsIDB4M2MwNSwKLQkweDY4MzMsIDB4MDAwZCwgMHgyMDcwLCAweDY4MjcsIDB4MDAwMSwgMHgyZDAwLCAweDY4MWEsIDB4MjAwMSwKLQkweDAwNzYsIDB4MjAwNCwgMHgyMDcyLCAweDIwMDEsIDB4MDA3NywgMHgyMDA0LCAweDcwMDYsIDB4MjA2MSwKLQkweDAwMjAsIDB4MjA3OSwgMHgwMTAwLCAweDYwMTMsIDB4MDQwMCwgMHgyMGUxLCAweDkwNDAsIDB4MjAwMSwKLQkweDAwNzIsIDB4MjAwNCwgMHhhMDg0LCAweGZmZjgsIDB4NzAwYSwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwKLQkweDAwNzMsIDB4MjAwNCwgMHg3MDBlLCAweDYwMWUsIDB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsIDB4YTAwNiwKLQkweDYwM2EsIDB4NjAzZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwKLQkweDAwMTAsIDB4MjBhMCwgMHgyMDk5LCAweDAwMTQsIDB4NzAwMywgMHgwMDI2LCAweDc0MzIsIDB4NzMzNiwKLQkweGEwMDYsIDB4NzAzYSwgMHg3MDNlLCAweDgxMGIsIDB4ODEwYiwgMHgyMWE4LCAweDgxMGIsIDB4NzEyMiwKLQkweDcwMDMsIDB4MDA0MSwgMHg3MDA0LCAweGQwZmMsIDB4MGRlOCwgMHg3MDAzLCAweDAwMDIsIDB4NzAwMywKLQkweDAwNDAsIDB4NTNhNSwgMHg3NDMwLCAweDczMzQsIDB4ODdmZiwgMHgwMTgwLCAweDAwYzYsIDB4MDBkNiwKLQkweDJkNjAsIDB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwgMHg2MDE4LCAweDIwNzAsIDB4MmQwMCwKLQkweDcwMDYsIDB4NjAxYSwgMHgwMGRlLCAweDAwY2UsIDB4YTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjAwMSwgMHgwMDc1LCAweDIwMDQsIDB4YTAwNSwgMHgwNTA4LCAweDIwMzgsIDB4MjAwMSwKLQkweDAwNzgsIDB4MjAyNCwgMHgyMDAxLCAweDAwNzksIDB4MjAxYywgMHgwODBjLCAweDNjMDUsIDB4MmQ2MCwKLQkweDY4MzMsIDB4MDAwZCwgMHg2ZjI2LCAweDJkMDAsIDB4NjgxYSwgMHhhNzhhLCAweDAwMDcsIDB4MDIyMCwKLQkweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHhhMDNlLCAweDY4MTgsIDB4YTA4MCwKLQkweDAwMGQsIDB4MDgwYywgMHgzNTNlLCAweDFkODgsIDB4MmQwMCwgMHg2ODFhLCAweDAwZTAsIDB4MDgwYywKLQkweDNjMDUsIDB4MmQ2MCwgMHg2MDMzLCAweDAwMGQsIDB4MjA3MCwgMHg2MDI3LCAweDAwMDEsIDB4MmMwMCwKLQkweDYwMWEsIDB4MjAwMSwgMHgwMDc4LCAweDIwMDQsIDB4MjA3MiwgMHgyMDAxLCAweDAwNzksIDB4MjAwNCwKLQkweDcwMDYsIDB4MjAwMSwgMHgwMDcyLCAweDIwMDQsIDB4YTA4NCwgMHhmZmY4LCAweDcwMGEsIDB4MjAwMSwKLQkweDAwNzMsIDB4MjAwNCwgMHg3MDBlLCAweDIwMDEsIDB4MDAzMCwgMHgyMDAzLCAweDAwMDQsIDB4NzgyNCwKLQkweGQwYWMsIDB4MTE3OCwgMHgyMDAxLCAweDAxMDEsIDB4MjAwYywgMHhjMWVkLCAweDIxMDIsIDB4NjAyNywKLQkweDAwMDAsIDB4MjAwMSwgMHhhZmZkLCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLCAweDAwMzAsIDB4MjAwMywKLQkweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDA4MDQsIDB4MmRjYywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwYTksIDB4MDAxMSwgMHgyMDAxLCAweGFkNDAsIDB4MjBhMCwgMHhhMDA2LCAweDQwYTQsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRjYywgMHg3ZDM4LCAweDdjM2MsIDB4MDgwNCwgMHgyZTczLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDU3NGYsIDB4MDExMCwgMHgwODBjLCAweDQ5MWYsIDB4MjAwOSwKLQkweDAwMWMsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwKLQkweDM1ZjIsIDB4MDAwNSwgMHhhZGU4LCAweDAwMGQsIDB4NjgwMCwgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwKLQkweDY4MDQsIDB4ZDBhYywgMHgwMTE4LCAweGQwYTQsIDB4MDkwNCwgMHgyZGY0LCAweGQwOTQsIDB4MDBjNiwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MTA0LCAweDAxMzgsIDB4NjIwMCwgMHhhMjkyLCAweDAwMDUsIDB4MDIxOCwKLQkweGExOGMsIDB4ZmZkZiwgMHgwMDEwLCAweGExOGQsIDB4MDAyMCwgMHg2MTA2LCAweDAwY2UsIDB4ZDA4YywKLQkweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsIDB4MDExOCwgMHhhMThkLCAweDAwMTAsIDB4MDAxMCwKLQkweGExOGMsIDB4ZmZlZiwgMHg2MTA2LCAweDAwY2UsIDB4MjAwOSwgMHgwMTAwLCAweDIxMGMsIDB4YTE4YSwKLQkweDAwMDIsIDB4MDI2OCwgMHhkMDg0LCAweDAxNTgsIDB4NmEyOCwgMHhhMjhhLCAweDAwN2YsIDB4MWEwNCwKLQkweDJkZjQsIDB4YTI4OCwgMHgyYmU2LCAweDIxMGQsIDB4YTE4YywgMHgwMGZmLCAweDYxNTYsIDB4ZDBkYywKLQkweDAxMzAsIDB4NjgyOCwgMHhhMDhhLCAweDAwN2YsIDB4MWEwNCwgMHgyZGY0LCAweDYwNGUsIDB4NjgwOCwKLQkweGEwOGEsIDB4MDEwMCwgMHgwYTA0LCAweDJkZjQsIDB4YTA4YSwgMHgwODQxLCAweDFhMDQsIDB4MmRmNCwKLQkweGEwODQsIDB4MDAwNywgMHgxOTA0LCAweDJkZjQsIDB4NjgwYywgMHhhMDA1LCAweDA5MDQsIDB4MmRmNCwKLQkweDY4MTAsIDB4YTAwNSwgMHgwOTA0LCAweDJkZjQsIDB4Njg0OCwgMHg2OTQwLCAweGExMGEsIDB4MWEwNCwKLQkweDJkZjQsIDB4ODAwMSwgMHgwOTA0LCAweDJkZjQsIDB4Njg0YywgMHg2OTQ0LCAweGExMGEsIDB4MWEwNCwKLQkweDJkZjQsIDB4ODAwMSwgMHgwOTA0LCAweDJkZjQsIDB4NjgwNCwgMHhkMGZjLCAweDA1NjAsIDB4MDgwYywKLQkweDNjMDUsIDB4MDkwNCwgMHgyZGYxLCAweDIwMDksIDB4MDAxNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywKLQkweDdkMzgsIDB4YTI5MCwgMHgwMDM4LCAweGEzOTksIDB4MDAwMCwgMHgwODBjLCAweDNjNDYsIDB4NzAxYiwKLQkweDM2NzIsIDB4MDAwNSwgMHhhZGU4LCAweDAwMGQsIDB4MjBhOSwgMHgwMDE0LCAweDJkOTgsIDB4MjA2OSwKLQkweGFkNmQsIDB4MmRhMCwgMHg1M2EzLCAweDcwMTAsIDB4YTBlOCwgMHgwMDBkLCAweDIwMDEsIDB4YWQ3MSwKLQkweDIwMGMsIDB4ZDFlNCwgMHgwMTQwLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwMDQsIDB4YTA4NSwKLQkweDBiMDAsIDB4NjAwNiwgMHgwMGNlLCAweDIwYTksIDB4MDAxYywgMHgyZDk4LCAweDIwNjksIDB4YWQ1MSwKLQkweDJkYTAsIDB4NTNhMywgMHg2ODE0LCAweGEwOGMsIDB4MDBmZiwgMHg2MTNlLCAweDgwMDcsIDB4YTA4NCwKLQkweDAwZmYsIDB4NjA0MiwgMHgwODBjLCAweDVhMWMsIDB4MDgwYywgMHg1MDcwLCAweDA4MGMsIDB4NTBkOSwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDE5MDQsIDB4Mzc1NSwgMHg2ODA4LCAweDYwMmEsIDB4MDgwYywKLQkweDIyZjgsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDAwZSwKLQkweDAyNjgsIDB4MjAwOSwgMHgwMTcwLCAweDIwMGIsIDB4MDA4MCwgMHhlMDAwLCAweGUwMDAsIDB4MjAwYiwKLQkweDAwMDAsIDB4MDAzNiwgMHg2YjA4LCAweDA4MGMsIDB4MjZmYiwgMHgwMDNlLCAweDY4MTgsIDB4NjkxYywKLQkweDZhMjAsIDB4NmIyNCwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDYwMTYsIDB4NjExYSwKLQkweDYyMWUsIDB4NjMyMiwgMHg2YzA0LCAweGQ0ZjQsIDB4MDE0OCwgMHg2ODMwLCAweDY5MzQsIDB4NmEzOCwKLQkweDZiM2MsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwgMHgwMDEwLCAweGEwODQsIDB4ZjBmZiwKLQkweDYwMDYsIDB4NjEwYSwgMHg2MjBlLCAweDYzMTIsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMGExLCAweGFmYWQsIDB4NDBhMSwgMHgwODBjLCAweDY1OWMsIDB4NjkwNCwKLQkweGQxZmMsIDB4MDUyMCwgMHgwMGM2LCAweDIwMDksIDB4MDAwMCwgMHgyMGE5LCAweDAwMDEsIDB4NmI3MCwKLQkweGQzODQsIDB4MDFjOCwgMHgwMDIwLCAweDgzOWQsIDB4MTJiMCwgMHgzNTA4LCAweDgxMDksIDB4MDgwYywKLQkweDVmYTksIDB4Njg3OCwgMHg2MDE2LCAweDY4NzQsIDB4MjAwOCwgMHhhMDg0LCAweGZmMDAsIDB4ODAwNywKLQkweDYwMGEsIDB4YTE4NCwgMHgwMGZmLCAweDYwMDYsIDB4ODEwOCwgMHgxMTE4LCAweDYwMDMsIDB4MDAwMywKLQkweDAwMTAsIDB4NjAwMywgMHgwMDAxLCAweDFmMDQsIDB4MzZmMywgMHgwMGNlLCAweDIwNjksIDB4YWQ1MSwKLQkweDIwMDEsIDB4YWY5ZCwgMHg2YTgwLCAweGEyOTQsIDB4MDAzMCwgMHhhMjhlLCAweDAwMDAsIDB4MDE3MCwKLQkweGEyOGUsIDB4MDAxMCwgMHgwMTE4LCAweGEyOGUsIDB4MDAyMCwgMHgwMTQwLCAweDIwMDMsIDB4YWFhYSwKLQkweDA4MGMsIDB4Mjc0NCwgMHgyMDAxLCAweGFmOGUsIDB4MjEwMiwgMHgwMDA4LCAweDIxMDIsIDB4MDBjNiwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MDJmLCAweDAwNDAsIDB4NjAyZiwgMHgwMDAwLCAweDAwY2UsIDB4MDgwYywKLQkweDU3NGYsIDB4MDEyOCwgMHgwODBjLCAweDNlNWYsIDB4MDExMCwgMHgwODBjLCAweDI2YzAsIDB4NjBjNCwKLQkweGEwMDUsIDB4MDFiMCwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHgzNzNmLCAweDAwYzAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTE1OCwgMHgyMDExLCAweDU2NmUsIDB4MDgwYywgMHg2NTBkLCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMCwgMHgwODBjLCAweDU2OWEsIDB4MDA0MCwgMHgwODBjLCAweDQ4NWUsIDB4MDAyOCwKLQkweDYwMDMsIDB4MDAwNCwgMHgyMDA5LCAweDM3NTUsIDB4MDAxMCwgMHgwODA0LCAweDJkY2MsIDB4MjAwMSwKLQkweDAxMDAsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDI1OCwgMHgyMDAxLCAweDAxNzAsIDB4MjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwNGMsIDB4MTExOCwgMHgyMDkxLCAweDMwOWQsIDB4MDgxNywKLQkweDIwOTEsIDB4MzAxZCwgMHgwODE3LCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDA5MDQsIDB4MmRmMSwKLQkweDIwNjksIDB4YWQ1MSwgMHg3ODMwLCAweDY4NDIsIDB4NzgzNCwgMHg2ODQ2LCAweDY4MDQsIDB4ZDBmYywKLQkweDAxMTgsIDB4MjAwOSwgMHgwMDMwLCAweDAwMTAsIDB4MjAwOSwgMHgwMDFjLCAweDJkMDAsIDB4N2EyYywKLQkweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwgMHhhMDA2LCAweDA4MGMsIDB4MjZjMCwKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTc4LCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwKLQkweDA4MGMsIDB4NTc5MywgMHgwODBjLCAweDU2OWEsIDB4MDAyMCwgMHgwODBjLCAweDQ5MWYsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4NTc0ZiwKLQkweDExMTAsIDB4MDgwNCwgMHgyZGYxLCAweDYxODQsIDB4ODFmZiwgMHgwMTk4LCAweDcwM2YsIDB4MDAwMCwKLQkweDIwMDEsIDB4YjNjMCwgMHgyMDA5LCAweDAwNDAsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4M2M0OSwgMHg3MDFiLCAweDJkY2EsIDB4MDEyZSwKLQkweDAwMDUsIDB4NzAzZiwgMHgwMDAxLCAweDAwZDYsIDB4MjA2OSwgMHhiM2MwLCAweDIwYTksIDB4MDA0MCwKLQkweDIwYTEsIDB4YjNjMCwgMHgyMDE5LCAweGZmZmYsIDB4NDNhNCwgMHg2NTRjLCAweGE1ODgsIDB4MmJlNiwKLQkweDIxMGQsIDB4YTE4YywgMHgwMGZmLCAweDIxNmEsIDB4YTAwZSwgMHgyMDExLCAweDAwMDIsIDB4MjEwMCwKLQkweGE1MDYsIDB4MDFhOCwgMHgwODBjLCAweDRjZGMsIDB4MTE5MCwgMHg2MDE0LCAweDgyMWMsIDB4MDIzOCwKLQkweGEzOTgsIDB4YjNjMCwgMHhhMDg1LCAweGZmMDAsIDB4ODAwNywgMHgyMDFhLCAweDAwMzgsIDB4YTM5OCwKLQkweGIzYzAsIDB4MjMyNCwgMHhhNGE0LCAweGZmMDAsIDB4YTQwNSwgMHgyMDFhLCAweDgyMTAsIDB4ODEwOCwKLQkweGExODIsIDB4MDA4MCwgMHgxMjA4LCAweDBjMTgsIDB4ODIwMSwgMHg4MDA3LCAweDJkMGMsIDB4YTEwNSwKLQkweDIwNmEsIDB4MDBkZSwgMHgyMGE5LCAweDAwNDAsIDB4MjBhMSwgMHhiM2MwLCAweDIwOTksIDB4YjNjMCwKLQkweDA4MGMsIDB4NDhiZSwgMHgwODA0LCAweDM3YjAsIDB4MDgwYywgMHgzYzJhLCAweDA5MDQsIDB4MmRmNCwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBiNCwgMHgwMWYwLCAweDYwMDAsIDB4ZDA4YywKLQkweDExZDgsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDExYTgsIDB4NjgzNywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywgMHg5NzBiLCAweDExMjAsIDB4MjAwOSwKLQkweDAwMDMsIDB4MDgwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDM4MzAsIDB4MDAwNSwKLQkweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MjBhOSwgMHgwMDJiLCAweDJjOTgsIDB4YWRlOCwKLQkweDAwMDIsIDB4MmRhMCwgMHg1M2EzLCAweDIwYTksIDB4MDAwNCwgMHhhYzgwLCAweDAwMDYsIDB4MjA5OCwKLQkweGFkODAsIDB4MDAwNiwgMHgyMGEwLCAweDA4MGMsIDB4NDhiZSwgMHgyMGE5LCAweDAwMDQsIDB4YWM4MCwKLQkweDAwMGEsIDB4MjA5OCwgMHhhZDgwLCAweDAwMGEsIDB4MjBhMCwgMHgwODBjLCAweDQ4YmUsIDB4MmQwMCwKLQkweDIwMDksIDB4MDAyYiwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MxYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywKLQkweDRlYWIsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDc4MjgsIDB4YTA4YSwKLQkweDEwMDAsIDB4MWEwNCwgMHgyZGY0LCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwYywKLQkweDRmMGQsIDB4MDkwNCwgMHgyZGYxLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDRlYmQsIDB4NzkyNCwKLQkweDgxMGYsIDB4N2EyOCwgMHgwMDExLCAweDA4MDQsIDB4MmRjYywgMHhhMTg2LCAweDAwZmYsIDB4MDExMCwKLQkweDAwNzEsIDB4MDA2MCwgMHgyMDI5LCAweDAwN2UsIDB4MjA2MSwgMHhhZDAwLCAweDY0NGMsIDB4MjQwMCwKLQkweGE1MDYsIDB4MDExMCwgMHgyNTA4LCAweDAwMTksIDB4ODUyOSwgMHgxZWM4LCAweDAwMDUsIDB4MDgwYywKLQkweDRjZGMsIDB4MTEzOCwgMHgyMjAwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4MDgwYywKLQkweDY1MTksIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMWEsIDB4MDkwNCwKLQkweDJkZjQsIDB4MDgwYywgMHg0ZDk2LCAweDA5MDQsIDB4MmRmMSwgMHgwODBjLCAweDRlYjQsIDB4MDgwNCwKLQkweDJkY2MsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHgzYzFhLCAweDA5MDQsIDB4MmRmNCwKLQkweDA4MGMsIDB4NGQ5NiwgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywgMHg0ZWEyLCAweDA4MDQsIDB4MmRjYywKLQkweDYxMDAsIDB4MDgwNCwgMHgyZGNjLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTkwNCwgMHgyZGYxLCAweDAwZDYsIDB4YWNlOCwKLQkweDAwMGEsIDB4NzkyNCwgMHhkMTg0LCAweDAxMTAsIDB4YWNlOCwgMHgwMDA2LCAweDY4MGMsIDB4ODAwNywKLQkweDc4M2UsIDB4NjgwOCwgMHg4MDA3LCAweDc4M2EsIDB4NmIwNCwgMHg4MzFmLCAweDZhMDAsIDB4ODIxNywKLQkweDAwZGUsIDB4NjEwMCwgMHhhMThjLCAweDAyMDAsIDB4MDgwNCwgMHgyZGNjLCAweDc4MjQsIDB4YTA5YywKLQkweDAwZmYsIDB4YTM5YSwgMHgwMDAzLCAweDFhMDQsIDB4MmRmMSwgMHg2MjRjLCAweGEyOTQsIDB4MDBmZiwKLQkweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEyMDYsIDB4MTE1MCwgMHgyMDAxLCAweGFkNDAsIDB4MjAwOSwKLQkweDAwMGMsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODA0LCAweDNjNDksIDB4ODFmZiwKLQkweDE5MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDE5MDQsIDB4MmRmMSwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAwY2UsIDB4MDkwNCwgMHgyZGYxLCAweDY4MzcsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4NjgzYSwKLQkweDA4MGMsIDB4OTZiNywgMHgwOTA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4MzkxOSwKLQkweDAwMDUsIDB4NjgzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDkwNCwgMHgyZGYxLCAweGFkODAsIDB4MDAwZSwKLQkweDIwMDksIDB4MDAwYywgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MDQsIDB4M2M0OSwKLQkweGEwMDYsIDB4MDgwYywgMHgyNmMwLCAweDc4MjQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDBmZiwKLQkweDAxMTgsIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywgMHg1NzRmLCAweDAxMTAsIDB4MDgwYywKLQkweDQ5MWYsIDB4NzgyOCwgMHhhMDhhLCAweDEwMDAsIDB4MWEwNCwgMHgyZGY0LCAweDc5MjQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwZmYsIDB4MDEzOCwgMHhhMTgyLCAweDAwN2YsIDB4MWEwNCwKLQkweDJkZjQsIDB4MjEwMCwgMHgwODBjLCAweDI2OGEsIDB4MDAyNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA2MSwgMHhhZmRhLCAweDYwMWIsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTE3OCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwKLQkweDIwMDMsIDB4MDAwMSwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwKLQkweDAwYTAsIDB4MjA2MSwgMHgwMTAwLCAweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwKLQkweDgxMGYsIDB4YTEwNSwgMHg2MDRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4MjAwOSwKLQkweDAwMmQsIDB4MjAxMSwgMHg0ODgzLCAweDA4MGMsIDB4NjU5MywgMHg3OTI0LCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4MDgwYywgMHg1NzRmLCAweDExMTAsIDB4MjAwOSwgMHgwMGZmLCAweDdhMjgsIDB4MDgwYywKLQkweDM4N2QsIDB4MDEyZSwgMHgwMGNlLCAweDAwMmUsIDB4MDgwNCwgMHgyZGNjLCAweDc5MjQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgwMGM2LCAweDA4MGMsIDB4NGM4MCwgMHgyYzA4LCAweDAwY2UsIDB4MTkwNCwKLQkweDJkZjQsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwKLQkweDJkZjEsIDB4NjBkMCwgMHhkMGFjLCAweDExMzAsIDB4ZDA5YywgMHgxMTIwLCAweDIwMDksIDB4MDAwNSwKLQkweDA4MDQsIDB4MmRmMSwgMHgwODBjLCAweDNjMDUsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4NzkyNCwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywgMHg3ZDM4LCAweDA4MGMsIDB4M2M0NiwKLQkweDcwMWIsIDB4MzliYiwgMHgwMDA1LCAweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDRjZGMsIDB4MTEzMCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMTIwLCAweDIwMjEsIDB4NDAwYSwKLQkweDA4MDQsIDB4MmRjZSwgMHgwMGQ2LCAweGFkZTgsIDB4MDAwZCwgMHg2OTAwLCAweDZhMDgsIDB4NmIwYywKLQkweDZjMTAsIDB4NmQxNCwgMHg2ZTE4LCAweDY4MjAsIDB4YTBiZSwgMHgwMTAwLCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDExMiwgMHgwOTA0LCAweDNhMzIsIDB4YTBiZSwgMHgwMTEzLCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDExNCwgMHgwOTA0LCAweDNhMzIsIDB4YTBiZSwgMHgwMTE3LCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDExYSwgMHgwOTA0LCAweDNhMzIsIDB4YTBiZSwgMHgwMTFjLCAweDA5MDQsIDB4M2EzMiwKLQkweGEwYmUsIDB4MDEyMSwgMHgwNWIwLCAweGEwYmUsIDB4MDEzMSwgMHgwNTk4LCAweGEwYmUsIDB4MDE3MSwKLQkweDA1YzgsIDB4YTBiZSwgMHgwMTczLCAweDA1YjAsIDB4YTBiZSwgMHgwMWExLCAweDExMjAsIDB4NjgzMCwKLQkweDgwMDcsIDB4NjgzMiwgMHgwNGE4LCAweGEwYmUsIDB4MDIxMiwgMHgwNTQwLCAweGEwYmUsIDB4MDIxMywKLQkweDA1MjgsIDB4YTBiZSwgMHgwMjE0LCAweDAxYjAsIDB4YTBiZSwgMHgwMjE3LCAweDAxNjgsIDB4YTBiZSwKLQkweDAyMWEsIDB4MTEyMCwgMHg2ODM4LCAweDgwMDcsIDB4NjgzYSwgMHgwMGUwLCAweGEwYmUsIDB4MDMwMCwKLQkweDAxYzgsIDB4MDBkZSwgMHgwODA0LCAweDJkZjQsIDB4YWQ4MCwgMHgwMDEwLCAweDIwYTksIDB4MDAwNywKLQkweDA4MGMsIDB4M2E3OCwgMHhhZDgwLCAweDAwMGUsIDB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4M2E3OCwKLQkweDAwNDgsIDB4YWQ4MCwgMHgwMDBjLCAweDA4MGMsIDB4M2E4NiwgMHgwMDUwLCAweGFkODAsIDB4MDAwZSwKLQkweDA4MGMsIDB4M2E4NiwgMHhhZDgwLCAweDAwMGMsIDB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4M2E3OCwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDA1NjgsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NjgzNywKLQkweDAxMTksIDB4Njg1MywgMHgwMDAwLCAweDY4NGYsIDB4MDAyMCwgMHg2ODViLCAweDAwMDEsIDB4ODEwYiwKLQkweDY5N2UsIDB4Njg4MywgMHgwMDAwLCAweDZhODYsIDB4NmI4YSwgMHg2YzhlLCAweDZkOTIsIDB4Njk5NiwKLQkweDY4OWIsIDB4MDAwMCwgMHgwMGNlLCAweDAwZGUsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4NjgyMywgMHgwMDAwLCAweDY4MDQsIDB4MjA2OCwgMHgwODBjLCAweDk2ZDMsIDB4MTEyMCwKLQkweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4M2E2ZiwKLQkweDAwMDUsIDB4MDBjZSwgMHgwMGRlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDJkZjEsIDB4NjgyMCwKLQkweGEwODYsIDB4ODAwMSwgMHgxOTA0LCAweDJkY2MsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MmRmMSwKLQkweDAwMTYsIDB4MjAwOCwgMHgyMDQ0LCAweDgwMDAsIDB4MjA0YywgMHg4MDAwLCAweDI5MGEsIDB4ODEwOCwKLQkweDI4MGEsIDB4ODEwOCwgMHgxZjA0LCAweDNhN2EsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDBhNiwKLQkweDAwYjYsIDB4MjAwOCwgMHgyMDQ0LCAweDgwMDAsIDB4MjA0YywgMHg4MDAwLCAweDIwNTQsIDB4ODAwMCwKLQkweDIwNWMsIDB4MmIwYSwgMHg4MTA4LCAweDJhMGEsIDB4ODEwOCwgMHgyOTBhLCAweDgxMDgsIDB4MjgwYSwKLQkweDAwYmUsIDB4MDBhZSwgMHgwMDFlLCAweDAwMDUsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwKLQkweDA4MDQsIDB4MmRmMSwgMHg3OTI0LCAweDIxNDAsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4NjBkMCwKLQkweGQwYWMsIDB4MTEyMCwgMHhhMTgyLCAweDAwODAsIDB4MGEwNCwgMHgyZGY0LCAweGExODIsIDB4MDBmZiwKLQkweDFhMDQsIDB4MmRmNCwgMHg3YTJjLCAweDdiMjgsIDB4NjA2YywgMHhhMzA2LCAweDExNDAsIDB4NjA3MCwKLQkweGEyNGUsIDB4MDkwNCwgMHgyZGY0LCAweGE5Y2MsIDB4ZmYwMCwgMHgwOTA0LCAweDJkZjQsIDB4MDBjNiwKLQkweDA4MGMsIDB4M2I1OCwgMHgyYzY4LCAweDAwY2UsIDB4MDUzOCwgMHhhMGM2LCAweDQwMDAsIDB4MTE4MCwKLQkweDAwYzYsIDB4MDAwNiwgMHgyZDYwLCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDRmNmUsIDB4MTEwOCwKLQkweGMxODUsIDB4NjAwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwMDBlLCAweDAwY2UsIDB4MDA4OCwKLQkweGEwYzYsIDB4NDAwNywgMHgxMTEwLCAweDI0MDgsIDB4MDA2MCwgMHhhMGM2LCAweDQwMDgsIDB4MTExOCwKLQkweDI3MDgsIDB4MjYxMCwgMHgwMDMwLCAweGEwYzYsIDB4NDAwOSwgMHgxMTA4LCAweDAwMTAsIDB4MjAwMSwKLQkweDQwMDYsIDB4MjAyMCwgMHgwODA0LCAweDJkY2UsIDB4MmQwMCwgMHg3MDIyLCAweDAwMTYsIDB4MDBiNiwKLQkweDAwYzYsIDB4MDBlNiwgMHgyYzcwLCAweDA4MGMsIDB4ODAyMiwgMHgwNWQ4LCAweDJkMDAsIDB4NjAxYSwKLQkweDA4MGMsIDB4OTk1NiwgMHgyZTU4LCAweDAwZWUsIDB4MDBlNiwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAwY2UsIDB4MmI3MCwgMHgxMTUwLCAweDA4MGMsIDB4ODA3OCwgMHgwMGVlLCAweDAwY2UsIDB4MDBiZSwKLQkweDAwMWUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzYiwKLQkweDAwMDAsIDB4MmQwMCwgMHg2MDEyLCAweDY4MzMsIDB4MDAwMCwgMHg2ODM4LCAweGMwZmQsIDB4ZDg4YywKLQkweDAxMDgsIDB4YzBmNSwgMHg2ODNhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MmFkOSwKLQkweDAxMmUsIDB4NjAxZiwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MjAwMSwKLQkweDAwMDIsIDB4MDgwYywgMHg0YzMwLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBlZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAxZSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywKLQkweDA4MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwgMHgzYjNmLCAweDAwMDUsIDB4NjgzMCwKLQkweGEwODYsIDB4MDEwMCwgMHg3MDIwLCAweDIwNjAsIDB4MTEzOCwgMHgyMDA5LCAweDAwMDQsIDB4NjIwNCwKLQkweGEyOTQsIDB4MDBmZiwgMHgwODA0LCAweDJkZjEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGY2ZSwKLQkweDExMDgsIDB4YzE4NSwgMHg2MDAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDA4MDQsIDB4MmRjYywKLQkweDAwZTYsIDB4MDBkNiwgMHgyMDI5LCAweDAwMDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywKLQkweDAxMzgsIDB4MjAyMSwgMHgwMDAwLCAweDIwYTksIDB4MDBmZiwgMHgyMDcxLCAweGFlMzQsIDB4MDAzMCwKLQkweDIwMjEsIDB4MDA4MCwgMHgyMGE5LCAweDAwN2YsIDB4MjA3MSwgMHhhZWI0LCAweDJlMDQsIDB4YTAwNSwKLQkweDExMzAsIDB4MjEwMCwgMHhhNDA2LCAweDE1NDgsIDB4MjQyOCwgMHhjNWZkLCAweDA0MzAsIDB4MjA2OCwKLQkweDZmMTAsIDB4MjcwMCwgMHhhMzA2LCAweDExYjAsIDB4NmUxNCwgMHgyNjAwLCAweGEyMDYsIDB4MTE5MCwKLQkweDI0MDAsIDB4YTEwNiwgMHgxMTYwLCAweDJkNjAsIDB4ZDg4NCwgMHgwNTQwLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDE1MTAsIDB4MjAwMSwgMHg0MDAwLCAweDA0MDAsIDB4MjAwMSwKLQkweDQwMDcsIDB4MDBlOCwgMHgyNDAwLCAweGExMDYsIDB4MTE0MCwgMHg2ZTE0LCAweDg3ZmYsIDB4MTExMCwKLQkweDg2ZmYsIDB4MDlkMCwgMHgyMDAxLCAweDQwMDgsIDB4MDA5MCwgMHg4NDIwLCAweDhlNzAsIDB4MWYwNCwKLQkweDNiNmUsIDB4ODVmZiwgMHgxMTMwLCAweDIwMDEsIDB4NDAwOSwgMHgwMDQ4LCAweDIwMDEsIDB4MDAwMSwKLQkweDAwMzAsIDB4MDgwYywgMHg0YzgwLCAweDFkZDAsIDB4NjMxMiwgMHg2MjE2LCAweGEwMDYsIDB4YTAwNSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MwNSwKLQkweDA5MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NzgyNCwKLQkweGEwMDUsIDB4MDkwNCwgMHgyZGY0LCAweGEwOTYsIDB4MDBmZiwgMHgwMTIwLCAweGEwOTIsIDB4MDAwNCwKLQkweDFhMDQsIDB4MmRmNCwgMHgyMDEwLCAweDJkMTgsIDB4MDgwYywgMHgyYThjLCAweDA5MDQsIDB4MmRmMSwKLQkweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDNiZDUsIDB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwKLQkweDA5MDQsIDB4MmRmMSwgMHgwODA0LCAweDJkY2MsIDB4NzkyNCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDYwZDAsIDB4ZDBhYywgMHgxMTIwLCAweGExODIsIDB4MDA4MCwgMHgwYTA0LCAweDJkZjQsIDB4YTE4MiwKLQkweDAwZmYsIDB4MWEwNCwgMHgyZGY0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OTVjNiwKLQkweDExODgsIDB4YTE5MCwgMHhhZTM0LCAweDIyMDQsIDB4YTA2NSwgMHgwMTYwLCAweDA4MGMsIDB4NDkzYSwKLQkweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MDExMCwgMHg2MDE3LCAweDAwMDAsIDB4MDEyZSwKLQkweDA4MDQsIDB4MmRjYywgMHgwMTJlLCAweDA4MDQsIDB4MmRmMSwgMHgwODBjLCAweDE1ZDksIDB4MDE4OCwKLQkweGEwMDYsIDB4NjgwMiwgMHg3MDEwLCAweGEwMDUsIDB4MTEyMCwgMHgyZDAwLCAweDcwMTIsIDB4NzAxNiwKLQkweDAwMzAsIDB4NzAxNCwgMHg2ODAyLCAweDIwNjAsIDB4MmQwMCwgMHg2MDA2LCAweDcwMTYsIDB4YWQ4MCwKLQkweDAwMGQsIDB4MDAwNSwgMHg3OTI0LCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDA4MGMsIDB4NGNkYywKLQkweDExMzAsIDB4N2UyOCwgMHhhNjg0LCAweDNmZmYsIDB4YTA4MiwgMHg0MDAwLCAweDAyMDgsIDB4YTA2NiwKLQkweDhjZmYsIDB4MDAwNSwgMHg3ZTI0LCAweDg2MGYsIDB4YTE4YywgMHgwMGZmLCAweDA4MGMsIDB4NGNkYywKLQkweDExMjgsIDB4YTZiNCwgMHgwMGZmLCAweGE2ODIsIDB4NDAwMCwgMHgwMjA4LCAweGEwNjYsIDB4OGNmZiwKLQkweDAwMDUsIDB4MDAxNiwgMHg3MTEwLCAweDgxZmYsIDB4MDEyOCwgMHgyMTY4LCAweDY5MDQsIDB4MDgwYywKLQkweDE1ZjAsIDB4MGNjOCwgMHg3MTEyLCAweDcxMTYsIDB4MDAxZSwgMHgwMDA1LCAweDIwMzEsIDB4MDAwMSwKLQkweDAwMTAsIDB4MjAzMSwgMHgwMDAwLCAweDIwNjEsIDB4YWRkMSwgMHg2NjA2LCAweDYxMTIsIDB4NjAwZSwKLQkweDYyMjYsIDB4NjMyYSwgMHg2NDJlLCAweDY1MzIsIDB4MmMxMCwgMHgwODBjLCAweDE2MjQsIDB4NzAwNywKLQkweDAwMDIsIDB4NzAxYiwgMHgyZGNjLCAweDAwMDUsIDB4MDBmNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzksIDB4MDAwMCwgMHgyMDAxLCAweGFkOGYsIDB4MjAwNCwgMHhhMDA1LCAweDExNjgsIDB4MGUwNCwKLQkweDNjNzQsIDB4NzgxOCwgMHhkMDg0LCAweDExNDAsIDB4N2EyMiwgMHg3YjI2LCAweDdjMmEsIDB4NzgxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDA0MDgsIDB4MDAxNiwgMHgwMGM2LCAweDAwZTYsIDB4MjA3MSwKLQkweGFkODEsIDB4NzEzOCwgMHhhMTgyLCAweDAwMTAsIDB4MDIxOCwgMHg3MDMwLCAweDIwNjAsIDB4MDA3OCwKLQkweDcwMzAsIDB4YTBlMCwgMHgwMDA0LCAweGFjODIsIDB4YWRkMSwgMHgwMjEwLCAweDIwNjEsIDB4YWQ5MSwKLQkweDJjMDAsIDB4NzAzMiwgMHg4MWZmLCAweDExMDgsIDB4NzAzNiwgMHg4MTA4LCAweDcxM2EsIDB4MjI2MiwKLQkweDYzMDYsIDB4NjQwYSwgMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMTJlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZDgxLCAweDcwMzgsIDB4YTAwNSwgMHgwNTcwLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGUwNCwgMHgzY2NiLCAweDAwZjYsIDB4MjA3OSwgMHgwMDAwLCAweDc4MTgsIDB4ZDA4NCwKLQkweDE1MDgsIDB4MDBjNiwgMHg3MDM0LCAweDIwNjAsIDB4MmMwNCwgMHg3ODIyLCAweDYwMDQsIDB4NzgyNiwKLQkweDYwMDgsIDB4NzgyYSwgMHg3ODFiLCAweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMzgsIDB4ODAwMSwKLQkweDcwM2EsIDB4YTAwNSwgMHgxMTMwLCAweDcwMzMsIDB4YWQ5MSwgMHg3MDM3LCAweGFkOTEsIDB4MDBjZSwKLQkweDAwNDgsIDB4YWM4MCwgMHgwMDA0LCAweGEwZmEsIDB4YWRkMSwgMHgwMjEwLCAweDIwMDEsIDB4YWQ5MSwKLQkweDcwMzYsIDB4MDBjZSwgMHgwMGZlLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMjYsIDB4MjAwMSwKLQkweGFkNTIsIDB4MjAwNCwgMHhkMGM0LCAweDAxMjAsIDB4MjAxMSwgMHg4MDE0LCAweDA4MGMsIDB4M2M1YywKLQkweDAwMmUsIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwMzAsIDB4YzA4ZCwgMHhjMDg1LCAweGMwYWMsIDB4NjAzMiwgMHgwODBjLCAweDU3NGYsIDB4MTE3OCwKLQkweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwKLQkweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDU3OTMsIDB4MDgwYywgMHg1NjlhLCAweDAwMTAsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDEyZSwgMHgwODA0LCAweDJkY2MsIDB4NzgyNCwgMHgyMDA4LCAweGExOGMsIDB4ZmZmZCwKLQkweDExMjgsIDB4NjFkYywgMHhhMTBkLCAweDYxZGUsIDB4MDgwNCwgMHgyZGNjLCAweDA4MDQsIDB4MmRmNCwKLQkweDgxZmYsIDB4MTkwNCwgMHgyZGYxLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAzLCAweDE5MDQsIDB4MmRmMSwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwKLQkweDA5MDQsIDB4MmRmNCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTEyMCwKLQkweDc4MjgsIDB4YTAwNSwgMHgwOTA0LCAweDJkY2MsIDB4MDBjNiwgMHgwODBjLCAweDNjMDUsIDB4MDBjZSwKLQkweDA5MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwKLQkweDY4M2EsIDB4MDgwYywgMHg5NzljLCAweDA5MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDNkM2EsIDB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgwOTA0LCAweDJkZjEsIDB4MDgwNCwKLQkweDJkY2MsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAzLCAweDE5MDQsIDB4MmRmMSwKLQkweDdmMjQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODBjLCAweDNjMDUsIDB4MDkwNCwKLQkweDJkZjEsIDB4MjAwOSwgMHgwMDAwLCAweDIwMzEsIDB4MDAwMCwgMHg3MDIzLCAweDAwMDAsIDB4NzAyZiwKLQkweDAwMDAsIDB4YWQ4MCwgMHgwMDA1LCAweDcwMjYsIDB4MjBhMCwgMHgwODBjLCAweDRjZGMsIDB4MTkwNCwKLQkweDNkYjQsIDB4NjAwNCwgMHhhMGM0LCAweDAwZmYsIDB4YThjNiwgMHgwMDA2LCAweDAxMzAsIDB4YTBjNCwKLQkweGZmMDAsIDB4YThjNiwgMHgwNjAwLCAweDE5MDQsIDB4M2RiNCwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTEyOCwgMHgwODBjLCAweDRmNmUsIDB4MTExMCwgMHhkNzljLCAweDA1ZTgsIDB4ZDc5NCwKLQkweDExMTAsIDB4ZDc4NCwgMHgwMTU4LCAweGFjODAsIDB4MDAwNiwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwKLQkweDAwMDQsIDB4NTNhMywgMHgwODBjLCAweDNhODYsIDB4ZDc5NCwgMHgwMTQ4LCAweGFjODAsIDB4MDAwYSwKLQkweDIwOTgsIDB4MzQwMCwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgwODBjLCAweDNhODYsIDB4MjFhMiwKLQkweGQ3OTQsIDB4MDFkOCwgMHhhYzgwLCAweDAwMDAsIDB4MjA5OCwgMHg5NGEwLCAweDIwYTksIDB4MDAwMiwKLQkweDUzYTMsIDB4YWM4MCwgMHgwMDAzLCAweDIwYTYsIDB4OTRhMCwgMHhhYzgwLCAweDAwMDQsIDB4MjA5OCwKLQkweDM0MDAsIDB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4MDgwYywgMHgzYTc4LCAweGFjODAsIDB4MDAyNiwKLQkweDIwOTgsIDB4MjBhOSwgMHgwMDAyLCAweDUzYTMsIDB4MDAwOCwgMHg5NGEwLCAweGQ3OTQsIDB4MDExMCwKLQkweGE2YjAsIDB4MDAwYiwgMHhhNmIwLCAweDAwMDUsIDB4ODEwOCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MDExOCwgMHhhMTg2LCAweDAxMDAsIDB4MDA0MCwgMHhkNzhjLCAweDAxMjAsIDB4YTE4NiwKLQkweDAxMDAsIDB4MDE3MCwgMHgwMDE4LCAweGExODYsIDB4MDA3ZSwgMHgwMTUwLCAweGQ3OTQsIDB4MDExOCwKLQkweGE2ODYsIDB4MDAyMCwgMHgwMDEwLCAweGE2ODYsIDB4MDAyOCwgMHgwMTUwLCAweDA4MDQsIDB4M2Q1ZCwKLQkweDg2ZmYsIDB4MTEyMCwgMHg3MTIwLCAweDgxMGIsIDB4MDgwNCwgMHgyZGNjLCAweDcwMmYsIDB4MDAwMSwKLQkweDcxMWUsIDB4NzAyMCwgMHhhNjAwLCAweDcwMjIsIDB4NzcyYSwgMHgyMDYxLCAweGFkZDEsIDB4NjAwNywKLQkweDAwMDAsIDB4NjYxMiwgMHg3MDI0LCAweDYwMGUsIDB4NjIyNiwgMHg2MzJhLCAweDY0MmUsIDB4NjUzMiwKLQkweDJjMTAsIDB4MDgwYywgMHgxNjI0LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFiLCAweDNkZjAsIDB4MDAwNSwKLQkweDcwMmMsIDB4YTAwNSwgMHgxMTcwLCAweDcxMWMsIDB4NzAyNCwgMHgyMGEwLCAweDc3MjgsIDB4MjAzMSwKLQkweDAwMDAsIDB4MjA2MSwgMHhhZGQxLCAweDYyMjQsIDB4NjMyOCwgMHg2NDJjLCAweDY1MzAsIDB4MDgwNCwKLQkweDNkNWQsIDB4NzEyMCwgMHg4MTBiLCAweDA4MDQsIDB4MmRjYywgMHgyMDI5LCAweDAwN2UsIDB4NzkyNCwKLQkweDdhMjgsIDB4N2IyYywgMHg3YzM4LCAweGExODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwZTIsIDB4MDAyMCwKLQkweDBhMDQsIDB4MmRmNCwgMHhhNTAyLCAweDBhMDQsIDB4MmRmNCwgMHhhMTg0LCAweDAwZmYsIDB4YTBlMiwKLQkweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGEyODQsIDB4ZmYwMCwKLQkweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MmRmNCwgMHhhNTAyLCAweDBhMDQsIDB4MmRmNCwKLQkweGEyODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwKLQkweDJkZjQsIDB4YTM4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MmRmNCwKLQkweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGEzODQsIDB4MDBmZiwgMHhhMGUyLCAweDAwMjAsIDB4MGEwNCwKLQkweDJkZjQsIDB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4YTQ4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTBlMiwKLQkweDAwMjAsIDB4MGEwNCwgMHgyZGY0LCAweGE1MDIsIDB4MGEwNCwgMHgyZGY0LCAweGE0ODQsIDB4MDBmZiwKLQkweGEwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDJkZjQsIDB4YTUwMiwgMHgwYTA0LCAweDJkZjQsIDB4MjA2MSwKLQkweGFmYTYsIDB4NjEwMiwgMHg2MjA2LCAweDYzMGEsIDB4NjQwZSwgMHgwODA0LCAweDJkY2MsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwY2MsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwKLQkweGFkNzEsIDB4MjAwNCwgMHhkMGJjLCAweDAwMGUsIDB4MDAwNSwgMHg2MTY0LCAweDdhMjQsIDB4NjMwMCwKLQkweDgyZmYsIDB4MTExOCwgMHg3OTI2LCAweDA4MDQsIDB4MmRjYywgMHg4M2ZmLCAweDE5MDQsIDB4MmRmNCwKLQkweDIwMDEsIDB4ZmZmMCwgMHhhMjAwLCAweDFhMDQsIDB4MmRmNCwgMHgyMDE5LCAweGZmZmYsIDB4NjA2OCwKLQkweGEzMDIsIDB4YTIwMCwgMHgwYTA0LCAweDJkZjQsIDB4NzkyNiwgMHg2MjY2LCAweDA4MDQsIDB4MmRjYywKLQkweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxOTA0LCAweDJkZjEsIDB4N2MyOCwKLQkweDdkMjQsIDB4N2UzOCwgMHg3ZjJjLCAweDA4MGMsIDB4M2MwNSwgMHgwOTA0LCAweDJkZjEsIDB4MjAwOSwKLQkweDAwMDAsIDB4MjAxOSwgMHgwMDAwLCAweDcwMjMsIDB4MDAwMCwgMHg3MDJmLCAweDAwMDAsIDB4YWQ4MCwKLQkweDAwMDMsIDB4NzAyNiwgMHgyMGEwLCAweGExZTAsIDB4YWUzNCwgMHgyYzY0LCAweDhjZmYsIDB4MDFiOCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAwNiwgMHgwMTMwLCAweDYwMDQsIDB4YTA4NCwKLQkweGZmMDAsIDB4YTA4NiwgMHgwNjAwLCAweDExNTgsIDB4NjAxNCwgMHgyMGEyLCAweDk0YTAsIDB4NjAxMCwKLQkweDgwMDcsIDB4YTEwNSwgMHg4MDA3LCAweDIwYTIsIDB4OTRhMCwgMHhhMzk4LCAweDAwMDIsIDB4ODEwOCwKLQkweGExODIsIDB4MDBmZiwgMHgwMTIwLCAweGEzODYsIDB4MDAyYSwgMHgwMTQ4LCAweDA4ZTAsIDB4ODNmZiwKLQkweDExMjAsIDB4NzEyMCwgMHg4MTBjLCAweDA4MDQsIDB4MmRjYywgMHg3MDJmLCAweDAwMDEsIDB4NzExZSwKLQkweDcwMjAsIDB4YTMwMCwgMHg3MDIyLCAweDIwNjEsIDB4YWRkMSwgMHg2MDA3LCAweDAwMDAsIDB4NjMxMiwKLQkweDcwMjQsIDB4NjAwZSwgMHg2NDI2LCAweDY1MmEsIDB4NjYyZSwgMHg2NzMyLCAweDJjMTAsIDB4MDgwYywKLQkweDE2MjQsIDB4NzAwNywgMHgwMDAyLCAweDcwMWIsIDB4M2VlNiwgMHgwMDA1LCAweDcwMmMsIDB4YTAwNSwKLQkweDExNjgsIDB4NzExYywgMHg3MDI0LCAweDIwYTAsIDB4MjAxOSwgMHgwMDAwLCAweDIwNjEsIDB4YWRkMSwKLQkweDY0MjQsIDB4NjUyOCwgMHg2NjJjLCAweDY3MzAsIDB4MDgwNCwgMHgzZWEzLCAweDcxMjAsIDB4ODEwYywKLQkweDA4MDQsIDB4MmRjYywgMHg4MWZmLCAweDE5MDQsIDB4MmRmMSwgMHg2MGQwLCAweGQwYWMsIDB4MTExOCwKLQkweGQwOWMsIDB4MDkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MwNSwgMHgwOTA0LCAweDJkZjEsIDB4NzkyNCwKLQkweDdhMmMsIDB4N2IyOCwgMHg3YzNjLCAweDdkMzgsIDB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4M2YxMSwKLQkweDAwMDUsIDB4MDBkNiwgMHhhZGU4LCAweDAwMGQsIDB4NjgyOCwgMHhhMGJlLCAweDcwMDAsIDB4MDE0OCwKLQkweGEwYmUsIDB4NzEwMCwgMHgwMTMwLCAweGEwYmUsIDB4NzIwMCwgMHgwMTE4LCAweDAwZGUsIDB4MDgwNCwKLQkweDJkZjQsIDB4NjgyMCwgMHg2OTI0LCAweDA4MGMsIDB4MjY3NiwgMHgxNTEwLCAweDA4MGMsIDB4NGM4MCwKLQkweDExZjgsIDB4NzEyMiwgMHg2NjEyLCAweDY1MTYsIDB4NmUxOCwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAxYjgsIDB4MDgwYywgMHgzYzA1LCAweDAxYTAsIDB4MDBjZSwgMHgwMGRlLCAweDY4MzcsIDB4MDAwMCwKLQkweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDY4MjMsIDB4MDAwMCwgMHg2ODA0LCAweDIwNjgsIDB4MDgwYywKLQkweDk2ZWYsIDB4MDkwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywgMHg3MDFiLCAweDNmNGIsIDB4MDAwNSwKLQkweDAwZGUsIDB4MDgwNCwgMHgyZGYxLCAweDcxMjAsIDB4MDgwYywgMHgyYmM5LCAweDY4MjAsIDB4YTA4NiwKLQkweDgwMDEsIDB4MDkwNCwgMHgyZGYxLCAweDJkMDAsIDB4NzAxZSwgMHg2ODA0LCAweGEwODAsIDB4MDAwMiwKLQkweDAwMDYsIDB4MjBhOSwgMHgwMDJhLCAweDIwOTgsIDB4MjBhMCwgMHgwODBjLCAweDQ4YmUsIDB4MDAwZSwKLQkweGFkZTgsIDB4MDAwZCwgMHg2YTA4LCAweDZiMGMsIDB4NmMxMCwgMHg2ZDE0LCAweDIwNjEsIDB4YWRkMSwKLQkweDYwMDcsIDB4MDAwMCwgMHg2ZTAwLCAweDZmMjgsIDB4YTdjNiwgMHg3MDAwLCAweDExMDgsIDB4MDAxOCwKLQkweGE3YzYsIDB4NzEwMCwgMHgxMTQwLCAweGE2YzIsIDB4MDAwNCwgMHgwYTA0LCAweDJkZjQsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDgwNCwgMHgzYzQ5LCAweGE3YzYsIDB4NzIwMCwgMHgxOTA0LCAweDJkZjQsIDB4YTZjMiwKLQkweDAwNTQsIDB4MGEwNCwgMHgyZGY0LCAweDYwMGUsIDB4NjAxMywgMHgwMDJhLCAweDYyMjYsIDB4NjMyYSwKLQkweDY0MmUsIDB4NjUzMiwgMHgyYzEwLCAweDA4MGMsIDB4MTYyNCwgMHg3MDA3LCAweDAwMDIsIDB4NzAxYiwKLQkweDNmOTIsIDB4MDAwNSwgMHg3MDFjLCAweDIwNjgsIDB4NjgwNCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAwMiwgMHgwMDA2LCAweDIwYTksIDB4MDAyYSwgMHgyMDk4LCAweDIwYTAsIDB4MDgwYywKLQkweDQ4YmUsIDB4MDAwZSwgMHgyMDA5LCAweDAwMmEsIDB4MjA2MSwgMHhhZGQxLCAweDYyMjQsIDB4NjMyOCwKLQkweDY0MmMsIDB4NjUzMCwgMHgwODA0LCAweDNjNDksIDB4ODFmZiwgMHgxOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDNjMWEsIDB4MDkwNCwgMHgyZGY0LCAweDA4MGMsIDB4NGQ5NiwgMHgwOTA0LCAweDJkZjEsIDB4MDgwYywKLQkweDRlYzYsIDB4MDgwNCwgMHgyZGNjLCAweDc4MjQsIDB4ZDA4NCwgMHgwOTA0LCAweDM4MDQsIDB4MDgwYywKLQkweDNjMmEsIDB4MDkwNCwgMHgyZGY0LCAweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MTEyMCwKLQkweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDJkZjEsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDEyOCwgMHhhMDhlLCAweDAwMDQsIDB4MDExMCwgMHhhMDhlLCAweDAwMDUsIDB4MTUwOCwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYjQsIDB4MDkwNCwgMHgzODM0LCAweDYwMDAsIDB4ZDA4YywKLQkweDE5MDQsIDB4MzgzNCwgMHg2ODM3LCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDgwYywKLQkweDk3MGIsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgyZGYxLCAweDcwMDcsIDB4MDAwMywKLQkweDcwMWIsIDB4M2ZmMywgMHgwMDA1LCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4MDgwNCwKLQkweDM4MzQsIDB4MjAwOSwgMHhhZDMwLCAweDIxMGMsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwKLQkweDA4MDQsIDB4MmRmMSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MDEyMCwKLQkweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDJkZjEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhYywKLQkweDAxMjAsIDB4MjAwOSwgMHgwMDA4LCAweDA4MDQsIDB4MmRmMSwgMHg2MDljLCAweGQwYTQsIDB4MTExOCwKLQkweGQwYWMsIDB4MTkwNCwgMHgzODM0LCAweDY4MzcsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwKLQkweGMwZmQsIDB4NjgzYSwgMHgwODBjLCAweDk3OWMsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwKLQkweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4NDAyZSwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwKLQkweDA5MDQsIDB4MmRmNCwgMHgwODA0LCAweDNmZDgsIDB4ODFmZiwgMHgyMDA5LCAweDAwMDEsIDB4MTkwNCwKLQkweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MjAwOSwgMHgwMDA3LCAweDE5MDQsIDB4MmRmMSwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MjAwOSwgMHgwMDA4LCAweDE5MDQsIDB4MmRmMSwKLQkweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4MmRmMSwgMHgwMGM2LCAweDA4MGMsIDB4M2MwNSwKLQkweDAwY2UsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsIDB4MmRmMSwgMHg2ODM3LCAweDAwMDAsIDB4NjgzMywKLQkweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4NzkyOCwgMHhhMTk0LCAweGZmMDAsIDB4YTE4YywKLQkweDAwZmYsIDB4YTAwNiwgMHg4MmZmLCAweDExMjgsIDB4YzBlZCwgMHg2OTUyLCAweDc5MmMsIDB4Njk1NiwKLQkweDAwNDgsIDB4YTI4ZSwgMHgwMTAwLCAweDE5MDQsIDB4MmRmNCwgMHhjMGU1LCAweDY4NTMsIDB4MDAwMCwKLQkweDY4NTcsIDB4MDAwMCwgMHg2ODNlLCAweDA4MGMsIDB4OTk1NywgMHgyMDA5LCAweDAwMDMsIDB4MDkwNCwKLQkweDJkZjEsIDB4NzAwNywgMHgwMDAzLCAweDcwMWIsIDB4NDA4ZSwgMHgwMDA1LCAweDY4MzAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MjAwOSwgMHgwMDA0LCAweDA5MDQsIDB4MmRmMSwgMHgwODA0LCAweDJkY2MsIDB4ODFmZiwKLQkweDIwMDksIDB4MDAwMSwgMHgxOTA0LCAweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MjAwOSwKLQkweDAwMDcsIDB4MTkwNCwgMHgyZGYxLCAweDA4MGMsIDB4M2MyYSwgMHgwOTA0LCAweDJkZjQsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4MmRmMSwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsIDB4MmRmMSwKLQkweGFkODAsIDB4MDAwZiwgMHgyMDA5LCAweDAwMDgsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDA4MGMsIDB4M2M0NiwgMHg3MDFiLCAweDQwYzUsIDB4MDAwNSwgMHgwMGQ2LCAweGFkZTgsIDB4MDAwZiwKLQkweDY4MDAsIDB4YTA4NiwgMHgwNTAwLCAweDExNDAsIDB4NjgwNCwgMHhhMDA1LCAweDExMjgsIDB4NjgwOCwKLQkweGEwODQsIDB4ZmYwMCwgMHgxMTA4LCAweDAwMTgsIDB4MDBkZSwgMHgxOTA0LCAweDJkZjQsIDB4MDBkZSwKLQkweDY4MzcsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzOCwgMHhjMGZkLCAweDY4M2EsIDB4MDBjNiwKLQkweDA4MGMsIDB4M2MyYSwgMHgxMTE4LCAweDAwY2UsIDB4MDgwNCwgMHgyZGY0LCAweDA4MGMsIDB4OTlhNiwKLQkweDIwMDksIDB4MDAwMywgMHgwMGNlLCAweDA5MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDQwZjIsIDB4MDAwNSwgMHg2ODMwLCAweGEwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDkwNCwKLQkweDJkZjEsIDB4MDgwNCwgMHgyZGNjLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwKLQkweDJkZjEsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwKLQkweDJkZjEsIDB4N2UyNCwgMHg4NjBmLCAweGExOGMsIDB4MDBmZiwgMHhhNmI0LCAweDAwZmYsIDB4MDgwYywKLQkweDRjZGMsIDB4MTkwNCwgMHgyZGY0LCAweGExODYsIDB4MDA3ZiwgMHgwMTUwLCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA5LCAweDA4MDQsIDB4MmRmMSwKLQkweDAwYzYsIDB4MDgwYywgMHgzYzA1LCAweDAwY2UsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4NjgzNywgMHgwMDAwLCAweDY4MzgsIDB4YzBmZCwgMHg2ODNhLCAweDA4MGMsIDB4OTcyNiwKLQkweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MmRmMSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxYiwKLQkweDQxM2EsIDB4MDAwNSwgMHg2ODA4LCAweDgwMDcsIDB4YTA4NiwgMHgwMTAwLCAweDExMjAsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDgwNCwgMHgyZGYxLCAweDY4YjAsIDB4NjgzNiwgMHg2ODEwLCAweDgwMDcsIDB4YTA4NCwKLQkweDAwZmYsIDB4ODA4ZSwgMHg2ODE0LCAweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDgwODYsIDB4YTA4MCwKLQkweDAwMDIsIDB4YTEwOCwgMHhhZDgwLCAweDAwMDQsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwKLQkweDA4MDQsIDB4M2M0OSwgMHgwODBjLCAweDNjMDUsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwKLQkweDJkZjEsIDB4NzkyNCwgMHhhMTk0LCAweGZmMDAsIDB4YTE4YywgMHgwMGZmLCAweDgyMTcsIDB4ODJmZiwKLQkweDAxMTAsIDB4MDgwNCwgMHgyZGY0LCAweDIwMDksIDB4MDAxYSwgMHg3YTJjLCAweDdiMjgsIDB4N2MzYywKLQkweDdkMzgsIDB4MDgwYywgMHgzYzQ2LCAweDcwMWIsIDB4NDE3NiwgMHgwMDA1LCAweGFkODAsIDB4MDAwZCwKLQkweDIwOTgsIDB4MjBhOSwgMHgwMDFhLCAweDIwYTEsIDB4YWZhZCwgMHg1M2EzLCAweDA4MDQsIDB4MmRjYywKLQkweDA4MGMsIDB4M2MwNSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDJkZjEsIDB4NzkyNCwKLQkweGExOTQsIDB4ZmYwMCwgMHhhMThjLCAweDAwZmYsIDB4ODIxNywgMHg4MmZmLCAweDAxMTAsIDB4MDgwNCwKLQkweDJkZjQsIDB4MjA5OSwgMHhhZmFkLCAweDIwYTAsIDB4MjBhOSwgMHgwMDFhLCAweDUzYTMsIDB4MjAwOSwKLQkweDAwMWEsIDB4N2EyYywgMHg3YjI4LCAweDdjM2MsIDB4N2QzOCwgMHgwODA0LCAweDNjNDksIDB4NzgyNCwKLQkweGEwOGEsIDB4MTAwMCwgMHgxYTA0LCAweDJkZjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4ODAwMywKLQkweDgwMGIsIDB4ODEwYiwgMHhhMTA4LCAweDAwYzYsIDB4MjA2MSwgMHhhZmRhLCAweDYxNDIsIDB4MDBjZSwKLQkweDAxMmUsIDB4MDgwNCwgMHgyZGNjLCAweDAwYzYsIDB4MDgwYywgMHg1NzRmLCAweDExODgsIDB4MjAwMSwKLQkweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDgwYywgMHg1NzkzLCAweDA4MGMsIDB4NTY5YSwgMHgwODBjLCAweDE0ZjYsIDB4MDAzOCwKLQkweDIwNjEsIDB4YWQwMCwgMHg2MDMwLCAweGMwOWQsIDB4NjAzMiwgMHgwODBjLCAweDQ4NWUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgwMGM2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDYwNDQsIDB4ZDBhNCwgMHgxMWIwLCAweGQwODQsIDB4MDExOCwgMHgwODBjLCAweDQzNDgsIDB4MDA2OCwKLQkweGQwOGMsIDB4MDExOCwgMHgwODBjLCAweDQyNjksIDB4MDA0MCwgMHhkMDk0LCAweDAxMTgsIDB4MDgwYywKLQkweDQyM2EsIDB4MDAxOCwgMHhkMDljLCAweDAxMDgsIDB4MDA2MSwgMHgwMGVlLCAweDAwY2UsIDB4MDEyZSwKLQkweDAwMDUsIDB4MDAxNiwgMHg2MTI4LCAweGQxOWMsIDB4MTExMCwgMHhjMTlkLCAweDYxMmEsIDB4MDAxZSwKLQkweDBjYTAsIDB4NjI0YywgMHhhMjg2LCAweGYwZjAsIDB4MTE1MCwgMHg2MDQ4LCAweGEwODYsIDB4ZjBmMCwKLQkweDAxMzAsIDB4NjI0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDA0OTAsIDB4YTI5NCwKLQkweGZmMDAsIDB4YTI5NiwgMHhmNzAwLCAweDAxNzgsIDB4NzEzNCwgMHhkMWE0LCAweDExNjAsIDB4NjI0MCwKLQkweGEyOTUsIDB4MDEwMCwgMHg2MjQyLCAweGEyOTQsIDB4MDAxMCwgMHgwMTI4LCAweDIwMDksIDB4MDBmNywKLQkweDA4MGMsIDB4NDhkZSwgMHgwMGYwLCAweDYwNDAsIDB4YTA4NCwgMHgwMDEwLCAweGEwODUsIDB4MDA0MCwKLQkweDYwNDIsIDB4NjA0MywgMHgwMDAwLCAweDcwNzcsIDB4MDAwMCwgMHg3MDkzLCAweDAwMDEsIDB4NzBiNywKLQkweDAwMDAsIDB4NzBkMywgMHgwMDAwLCAweDIwMDksIDB4YjNjMCwgMHgyMDBiLCAweDAwMDAsIDB4NzA4NywKLQkweDAwMDAsIDB4NzA3YiwgMHgwMDBhLCAweDIwMDksIDB4MDAwYSwgMHgyMDExLCAweDQ4MTQsIDB4MDgwYywKLQkweDY1OTMsIDB4MDAwNSwgMHgwMTU2LCAweDIwMDEsIDB4YWQ3MywgMHgyMDA0LCAweGQwOGMsIDB4MDExMCwKLQkweDcwNGYsIDB4ZmZmZiwgMHg3MDc4LCAweGEwMDUsIDB4MTUxMCwgMHgyMDExLCAweDQ4MTQsIDB4MDgwYywKLQkweDY1MGQsIDB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDIwLCAweDYwNDIsIDB4MjBhOSwKLQkweDAwYzgsIDB4NjA0NCwgMHhkMDhjLCAweDExNjgsIDB4MWYwNCwgMHg0MjUxLCAweDYyNDIsIDB4NzA4YiwKLQkweDAwMDAsIDB4NjA0MCwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDgwLCAweDYwNDIsIDB4NjI0MiwKLQkweDAwMzAsIDB4NjI0MiwgMHg3MDhiLCAweDAwMDAsIDB4NzA3ZiwgMHgwMDAwLCAweDAwMDAsIDB4MDE1ZSwKLQkweDAwMDUsIDB4NzA3YywgMHhhMDhhLCAweDAwMDMsIDB4MTIxMCwgMHgwMDIzLCAweDAwMTAsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDAwNSwgMHg0Mjc1LCAweDQyYzUsIDB4NDM0NywgMHgwMGY2LCAweDcwN2YsIDB4MDAwMSwKLQkweDIwZTEsIDB4YTAwMCwgMHhlMDAwLCAweDIwZTEsIDB4ODcwMCwgMHgwODBjLCAweDIyZjgsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwNzksIDB4YjIwMCwgMHgyMDdiLCAweDIyMDAsIDB4NzgwNywKLQkweDAwZWYsIDB4NzgwYiwgMHgwMDAwLCAweDc4MGYsIDB4MDBlZiwgMHg3ODEzLCAweDAxMzgsIDB4NzgxNywKLQkweDAwMDAsIDB4NzgxYiwgMHgwMDAwLCAweDc4MWYsIDB4MDAwMCwgMHg3ODIzLCAweGZmZmYsIDB4NzgyNywKLQkweGZmZmYsIDB4NzgyYiwgMHgwMDAwLCAweDc4MmYsIDB4MDAwMCwgMHgyMDc5LCAweGIyMGMsIDB4MjA3YiwKLQkweDExMDEsIDB4NzgwNywgMHgwMDAwLCAweDIwOTksIDB4YWQwNSwgMHgyMGExLCAweGIyMGUsIDB4MjBhOSwKLQkweDAwMDQsIDB4NTNhMywgMHgyMDc5LCAweGIyMTIsIDB4MjA3YiwgMHgwMDAwLCAweDc4MDcsIDB4MDAwMCwKLQkweDIwOTksIDB4YjIwMCwgMHgyMGExLCAweDAyMGIsIDB4MjBhOSwgMHgwMDE0LCAweDUzYTYsIDB4NjBjMywKLQkweDAwMGMsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4NDg0NSwgMHgwMGZlLCAweDcwODMsIDB4MDAwMCwKLQkweDYwNDMsIDB4MDAwOCwgMHg2MDQzLCAweDAwMDAsIDB4MDAwNSwgMHgwMGQ2LCAweDcwODAsIDB4NzA4MywKLQkweDAwMDAsIDB4YTAyNSwgMHgwOTA0LCAweDQzMmYsIDB4NjAyMCwgMHhkMGI0LCAweDE5MDQsIDB4NDMyZCwKLQkweDcxOTAsIDB4ODFmZiwgMHgwOTA0LCAweDQzMWQsIDB4YTQ4NiwgMHgwMDBjLCAweDE5MDQsIDB4NDMyOCwKLQkweGE0ODAsIDB4MDAxOCwgMHg4MDA0LCAweDIwYTgsIDB4MjAxMSwgMHhiMjgwLCAweDIwMTksIDB4YjIwMCwKLQkweDIyMGMsIDB4MjMwNCwgMHhhMTA2LCAweDExYjgsIDB4ODIxMCwgMHg4MzE4LCAweDFmMDQsIDB4NDJlMCwKLQkweDYwNDMsIDB4MDAwNCwgMHg2MDhiLCAweGJjOTQsIDB4NjA4ZiwgMHhmMGYwLCAweDYwNDMsIDB4MDAwNiwKLQkweDcwN2YsIDB4MDAwMiwgMHg3MDhiLCAweDAwMDIsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjU5MywgMHgwNDkwLCAweDIwNjksIDB4YjI4MCwgMHg2OTMwLCAweGExOGUsIDB4MTEwMSwKLQkweDE1MzgsIDB4NjgzNCwgMHhhMDA1LCAweDE1MjAsIDB4NjkwMCwgMHhhMThjLCAweDAwZmYsIDB4MTExOCwKLQkweDY4MDQsIDB4YTAwNSwgMHgwMTkwLCAweDIwMTEsIDB4YjI4ZSwgMHgyMDE5LCAweGFkMDUsIDB4MjBhOSwKLQkweDAwMDQsIDB4MjIwYywgMHgyMzA0LCAweGExMDIsIDB4MDIzMCwgMHgxMTkwLCAweDgyMTAsIDB4ODMxOCwKLQkweDFmMDQsIDB4NDMxMSwgMHgwMDY4LCAweDcwOTMsIDB4MDAwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4MjA5OSwgMHhiMjgwLCAweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMTQsIDB4NTNhNiwKLQkweDYwNDMsIDB4MDAwOCwgMHg2MDQzLCAweDAwMDAsIDB4MDAxMCwgMHgwMGRlLCAweDAwMDUsIDB4NjA0MCwKLQkweGEwODUsIDB4MDEwMCwgMHg2MDQyLCAweDYwMjAsIDB4ZDBiNCwgMHgxZGI4LCAweDYwYzMsIDB4MDAwYywKLQkweDIwMTEsIDB4YWZkMSwgMHgyMDEzLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDIwZTEsIDB4OTA4MCwKLQkweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MDgwYywgMHg3ODJiLCAweDBjMzAsIDB4MDAwNSwKLQkweDcwODgsIDB4YTA4YSwgMHgwMDFkLCAweDEyMTAsIDB4MDAyMywgMHgwMDEwLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwMDUsIDB4NDM3YiwgMHg0MzhhLCAweDQzYjIsIDB4NDNjYiwgMHg0M2VmLCAweDQ0MTcsIDB4NDQzYiwKLQkweDQ0NmMsIDB4NDQ5MCwgMHg0NGI4LCAweDQ0ZWYsIDB4NDUxNywgMHg0NTMzLCAweDQ1NDksIDB4NDU2OSwKLQkweDQ1N2MsIDB4NDU4NCwgMHg0NWIxLCAweDQ1ZDUsIDB4NDVmZCwgMHg0NjIxLCAweDQ2NTIsIDB4NDY4ZiwKLQkweDQ2YmUsIDB4NDZkYSwgMHg0NzE5LCAweDQ3MzksIDB4NDc1MiwgMHg0NzUzLCAweDAwYzYsIDB4MjA2MSwKLQkweGFkMDAsIDB4NjAwMywgMHgwMDA3LCAweDIwNjEsIDB4MDEwMCwgMHg2MDA0LCAweGEwODQsIDB4ZmZmOSwKLQkweDYwMDYsIDB4MDBjZSwgMHgwMDA1LCAweDYwOGIsIDB4YmM5NCwgMHg2MDhmLCAweGYwZjAsIDB4NjA0MywKLQkweDAwMDIsIDB4NzA4YiwgMHgwMDAxLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1OTMsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTA4NiwgMHgwMDE0LCAweDE1MDgsIDB4NjA0MywKLQkweDAwMDAsIDB4NjAyMCwgMHhkMGI0LCAweDExZTAsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDIsIDB4MTFhMCwgMHg3ODM0LCAweGEwMDUsIDB4MTE4OCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwKLQkweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4NzA4YiwgMHgwMDEwLCAweDA4MGMsIDB4NDU4NCwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg3MDhiLCAweDAwMDMsIDB4NjA0MywgMHgwMDA0LCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjUwZCwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywgMHgxMTAyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTksIDB4MDAwYSwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwgMHg0M2MyLCAweDYwYzMsIDB4MDAxNCwKLQkweDA4MGMsIDB4NDg0NSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwgMHhhMDA1LCAweDAxZjAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweGEwODYsIDB4MDAxNCwgMHgxMWE4LCAweDIwNzksIDB4YjI4MCwKLQkweDdhMzAsIDB4YTI5NiwgMHgxMTAyLCAweDExNzgsIDB4NzgzNCwgMHhhMDA1LCAweDExNjAsIDB4N2EzOCwKLQkweGQyZmMsIDB4MDEyOCwgMHg3MGI0LCAweGEwMDUsIDB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4YiwKLQkweDAwMDQsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA4YiwKLQkweDAwMDUsIDB4MDgwYywgMHg0OGM2LCAweDIwYTMsIDB4MTEwMywgMHgyMGEzLCAweDAwMDAsIDB4MzQzMCwKLQkweDIwMTEsIDB4YjI4ZSwgMHgwODBjLCAweDQ5MTcsIDB4MTE2MCwgMHg3MDc0LCAweGEwMDUsIDB4MTE0OCwKLQkweDcxNGMsIDB4YTE4NiwgMHhmZmZmLCAweDAxMjgsIDB4MDgwYywgMHg0N2RmLCAweDAxMTAsIDB4MDgwYywKLQkweDQ4ZjUsIDB4MjBhOSwgMHgwMDA4LCAweDIyOTgsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwKLQkweDcwODAsIDB4YTAwNSwgMHgwMWYwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwKLQkweDAwMTQsIDB4MTFhOCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDMsIDB4MTE3OCwKLQkweDc4MzQsIDB4YTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwKLQkweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwOGIsIDB4MDAwNiwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAwNywgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywKLQkweDExMDQsIDB4MjBhMywgMHgwMDAwLCAweDM0MzAsIDB4MjAxMSwgMHhiMjhlLCAweDA4MGMsIDB4NDkxNywKLQkweDExYTgsIDB4NzA3NCwgMHhhMDA1LCAweDExOTAsIDB4NzE1NCwgMHhhMTg2LCAweGZmZmYsIDB4MDE3MCwKLQkweGExODAsIDB4MmJlNiwgMHgyMDBkLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDA4MGMsIDB4NDdkZiwKLQkweDAxMjgsIDB4MDgwYywgMHgzZTY2LCAweDAxMTAsIDB4MDgwYywgMHgyNmMwLCAweDIwYTksIDB4MDAwOCwKLQkweDIyOTgsIDB4MjZhMCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTQsIDB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFmMCwKLQkweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwgMHgwMDE0LCAweDExYTgsIDB4MjA3OSwKLQkweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDQsIDB4MTE3OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE2MCwKLQkweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwKLQkweDcwOGIsIDB4MDAwOCwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDcwOGIsIDB4MDAwOSwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywgMHgxMTA1LCAweDIwYTMsIDB4MDEwMCwKLQkweDM0MzAsIDB4MDgwYywgMHg0OTE3LCAweDExNTAsIDB4NzA3NCwgMHhhMDA1LCAweDExMzgsIDB4MDgwYywKLQkweDQ3NTQsIDB4MTE3MCwgMHhhMDg1LCAweDAwMDEsIDB4MDgwYywgMHgyNmMwLCAweDIwYTksIDB4MDAwOCwKLQkweDIwOTksIDB4YjI4ZSwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDQ4NDUsIDB4MDAxMCwgMHgwODBjLCAweDQzNmUsIDB4MDAwNSwKLQkweDAwZjYsIDB4NzA4MCwgMHhhMDA1LCAweDA1ODgsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwKLQkweGEwODYsIDB4MDAxNCwgMHgxNTQwLCAweDIwNzksIDB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNSwKLQkweDE1MTAsIDB4NzgzNCwgMHgyMDExLCAweDAxMDAsIDB4YTIxZSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywKLQkweDAxMjgsIDB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwOGIsIDB4MDAwYSwKLQkweDAwYjEsIDB4MDA5OCwgMHhhMDA1LCAweDExNzgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwKLQkweGEwMDUsIDB4MTExMCwgMHg3MGI3LCAweDAwMDEsIDB4NzA4NywgMHgwMDAwLCAweDcwOGIsIDB4MDAwZSwKLQkweDA4MGMsIDB4NDU2OSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA4YiwKLQkweDAwMGIsIDB4MjAxMSwgMHhiMjBlLCAweDIyYTAsIDB4MjBhOSwgMHgwMDQwLCAweDIwMTksIDB4ZmZmZiwKLQkweDQzYTQsIDB4MjBhOSwgMHgwMDAyLCAweDIwMDksIDB4MDAwMCwgMHg0MWE0LCAweDA4MGMsIDB4NDhjNiwKLQkweDIwYTMsIDB4MTEwNiwgMHgyMGEzLCAweDAwMDAsIDB4MDgwYywgMHg0OTE3LCAweDAxMTgsIDB4MjAxMywKLQkweDAwMDAsIDB4MDAyMCwgMHg3MDUwLCAweGEwODUsIDB4MDEwMCwgMHgyMDEyLCAweDIyOTgsIDB4MjBhOSwKLQkweDAwNDIsIDB4NTNhNiwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg0ODQ1LCAweDAwMDUsIDB4MDBmNiwKLQkweDcwODAsIDB4YTAwNSwgMHgwMWIwLCAweDIwMTEsIDB4NDgxYiwgMHgwODBjLCAweDY1MGQsIDB4YTA4NiwKLQkweDAwODQsIDB4MTE2OCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwgMHhhMjk2LCAweDExMDYsIDB4MTEzOCwKLQkweDc4MzQsIDB4YTAwNSwgMHgxMTIwLCAweDcwOGIsIDB4MDAwYywgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywKLQkweDQ4NWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOGIsIDB4MDAwZCwgMHgwODBjLCAweDQ4YzYsIDB4MjBhMywKLQkweDExMDcsIDB4MjBhMywgMHgwMDAwLCAweDIwOTksIDB4YjI4ZSwgMHgyMGE5LCAweDAwNDAsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NDg0NSwKLQkweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4YTA4NiwgMHgwMDg0LCAweDExODgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDcsIDB4MTE1OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE0MCwgMHg3MDg3LCAweDAwMDEsIDB4MDgwYywKLQkweDQ4YjgsIDB4NzA4YiwgMHgwMDBlLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzA4YiwgMHgwMDBmLCAweDcwODMsIDB4MDAwMCwgMHg2MDhiLCAweGJjODUsIDB4NjA4ZiwKLQkweGI1YjUsIDB4NjA0MywgMHgwMDA1LCAweDYwNDMsIDB4MDAwNCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTAxLCAweDAwMDUsIDB4NzA4MCwgMHhhMDA1LCAweDAxMjAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweDAwMDUsIDB4NzA4YiwgMHgwMDExLCAweDA4MGMsIDB4NDkxNywKLQkweDExODgsIDB4NzE2YywgMHg4MWZmLCAweDAxNzAsIDB4MjAwOSwgMHgwMDAwLCAweDcwNzAsIDB4YTA4NCwKLQkweDAwZmYsIDB4MDgwYywgMHgyNjc2LCAweGExODYsIDB4MDA4MCwgMHgwMTIwLCAweDIwMTEsIDB4YjI4ZSwKLQkweDA4MGMsIDB4NDdkZiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjI4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHg3NDgwLCAweGE0ODAsIDB4MDAxOCwgMHhhMDgwLCAweDAwMDcsIDB4YTA4NCwKLQkweDAzZjgsIDB4ODAwNCwgMHgyMGE4LCAweDUzYTYsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NDg0NSwKLQkweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFmMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4YTA4NiwgMHgwMDE0LCAweDExYTgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDMsIDB4MTE3OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwKLQkweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwgMHg3MDhiLCAweDAwMTIsIDB4MDAyOSwKLQkweDAwMTAsIDB4MDgwYywgMHg0ODVlLCAweDAwZmUsIDB4MDAwNSwgMHg3MDhiLCAweDAwMTMsIDB4MDgwYywKLQkweDQ4ZDIsIDB4MjBhMywgMHgxMTAzLCAweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwMTEsIDB4YjI4ZSwKLQkweDA4MGMsIDB4NDkxNywgMHgxMTYwLCAweDcwNzQsIDB4YTAwNSwgMHgxMTQ4LCAweDcxNGMsIDB4YTE4NiwKLQkweGZmZmYsIDB4MDEyOCwgMHgwODBjLCAweDQ3ZGYsIDB4MDExMCwgMHgwODBjLCAweDQ4ZjUsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjI5OCwgMHgyNmEwLCAweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwKLQkweDAxZjAsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjUwZCwgMHhhMDg2LCAweDAwMTQsIDB4MTFhOCwKLQkweDIwNzksIDB4YjI4MCwgMHg3YTMwLCAweGEyOTYsIDB4MTEwNCwgMHgxMTc4LCAweDc4MzQsIDB4YTAwNSwKLQkweDExNjAsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBiNCwgMHhhMDA1LCAweDExMTAsIDB4NzBiNywKLQkweDAwMDEsIDB4NzA4YiwgMHgwMDE0LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzA4YiwgMHgwMDE1LCAweDA4MGMsIDB4NDhkMiwgMHgyMGEzLCAweDExMDQsIDB4MjBhMywKLQkweDAwMDAsIDB4MzQzMCwgMHgyMDExLCAweGIyOGUsIDB4MDgwYywgMHg0OTE3LCAweDExYTgsIDB4NzA3NCwKLQkweGEwMDUsIDB4MTE5MCwgMHg3MTU0LCAweGExODYsIDB4ZmZmZiwgMHgwMTcwLCAweGExODAsIDB4MmJlNiwKLQkweDIwMGQsIDB4YTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MDgwYywgMHg0N2RmLCAweDAxMjgsIDB4MDgwYywKLQkweDNlNjYsIDB4MDExMCwgMHgwODBjLCAweDI2YzAsIDB4MjBhOSwgMHgwMDA4LCAweDIyOTgsIDB4MjZhMCwKLQkweDUzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywKLQkweDQ4NDUsIDB4MDAwNSwgMHgwMGY2LCAweDcwODAsIDB4YTAwNSwgMHgwNWI4LCAweDIwMTEsIDB4NDgxYiwKLQkweDA4MGMsIDB4NjUwZCwgMHhhMDg2LCAweDAwMTQsIDB4MTU3MCwgMHgyMDc5LCAweGIyODAsIDB4N2EzMCwKLQkweGEyOTYsIDB4MTEwNSwgMHgxNTQwLCAweDc4MzQsIDB4MjAxMSwgMHgwMTAwLCAweGEyMWUsIDB4MTE0OCwKLQkweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwgMHgxMTEwLCAweDcwYjcsIDB4MDAwMSwKLQkweDAwNjAsIDB4YTAwNSwgMHgxMWMwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYjQsIDB4YTAwNSwKLQkweDExMTAsIDB4NzBiNywgMHgwMDAxLCAweDcwODcsIDB4MDAwMCwgMHg3YTM4LCAweGQyZjQsIDB4MDEzOCwKLQkweDIwMDEsIDB4YWQ3MywgMHgyMDA0LCAweGQwYTQsIDB4MTExMCwgMHg3MGQzLCAweDAwMDgsIDB4NzA4YiwKLQkweDAwMTYsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwgMHgwMGZlLCAweDAwMDUsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjI4MCwgMHgyMGExLCAweDAyMGIsIDB4MjBhOSwKLQkweDAwMGUsIDB4NTNhNiwgMHgzNDMwLCAweDIwMTEsIDB4YjI4ZSwgMHg3MDhiLCAweDAwMTcsIDB4MDgwYywKLQkweDQ5MTcsIDB4MTE1MCwgMHg3MDc0LCAweGEwMDUsIDB4MTEzOCwgMHgwODBjLCAweDQ3NTQsIDB4MTE3MCwKLQkweGEwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2YzAsIDB4MjBhOSwgMHgwMDA4LCAweDIwOTksIDB4YjI4ZSwKLQkweDI2YTAsIDB4NTNhNiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwKLQkweDA4MGMsIDB4NDg0NSwgMHgwMDEwLCAweDA4MGMsIDB4NDM2ZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4MCwKLQkweGEwMDUsIDB4MDFiMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweGEwODYsIDB4MDA4NCwKLQkweDExNjgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwgMHgxMTA2LCAweDExMzgsIDB4NzgzNCwKLQkweGEwMDUsIDB4MTEyMCwgMHg3MDhiLCAweDAwMTgsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NDg1ZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg3MDhiLCAweDAwMTksIDB4MDgwYywgMHg0OGQyLCAweDIwYTMsIDB4MTEwNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgzNDMwLCAweDIwOTksIDB4YjI4ZSwgMHgyMDM5LCAweGIyMGUsIDB4MjdhMCwKLQkweDIwYTksIDB4MDA0MCwgMHg1M2EzLCAweDA4MGMsIDB4NDkxNywgMHgxMWU4LCAweDI3MjgsIDB4MjUxNCwKLQkweDgyMDcsIDB4YTA4NCwgMHgwMGZmLCAweDgwMDAsIDB4MjAxOCwgMHhhMjk0LCAweDAwZmYsIDB4ODAwNywKLQkweGEyMDUsIDB4MjAyYSwgMHg3MDUwLCAweDIzMTAsIDB4ODIxNCwgMHhhMmEwLCAweGIyMGUsIDB4MjQxNCwKLQkweGEzOGMsIDB4MDAwMSwgMHgwMTE4LCAweGEyOTQsIDB4ZmYwMCwgMHgwMDE4LCAweGEyOTQsIDB4MDBmZiwKLQkweDgwMDcsIDB4YTIxNSwgMHgyMjIyLCAweDI3OTgsIDB4MjZhMCwgMHgyMGE5LCAweDAwNDAsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NDg0NSwKLQkweDAwMDUsIDB4MDBmNiwgMHg3MDgwLCAweGEwMDUsIDB4MDFkMCwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4YTA4NiwgMHgwMDg0LCAweDExODgsIDB4MjA3OSwgMHhiMjgwLCAweDdhMzAsIDB4YTI5NiwKLQkweDExMDcsIDB4MTE1OCwgMHg3ODM0LCAweGEwMDUsIDB4MTE0MCwgMHg3MDg3LCAweDAwMDEsIDB4MDgwYywKLQkweDQ4YjgsIDB4NzA4YiwgMHgwMDFhLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4NzA4YiwgMHgwMDFiLCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MjA5OSwKLQkweGIyODAsIDB4MjBhMSwgMHgwMjBiLCAweDc0ODAsIDB4YTQ4MCwgMHgwMDE4LCAweGEwODAsIDB4MDAwNywKLQkweGEwODQsIDB4MDNmOCwgMHg4MDA0LCAweDIwYTgsIDB4NTNhNiwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywKLQkweDQ4NDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDA4NiwgMHgwMDk2LCAweDIwMjksIDB4YWQ1MiwKLQkweDI1MmMsIDB4MjBhOSwgMHgwMDA4LCAweDIwNDEsIDB4YjIwZSwgMHgyOGEwLCAweDIwOTksIDB4YjI4ZSwKLQkweDUzYTMsIDB4MjBhOSwgMHgwMDA4LCAweDIwMTEsIDB4MDAwNywgMHhkNWQ0LCAweDAxMTAsIDB4MjAxMSwKLQkweDAwMDAsIDB4MjgwMCwgMHhhMjAwLCAweDIwMGMsIDB4YTFhNiwgMHhmZmZmLCAweDExNDgsIDB4ZDVkNCwKLQkweDAxMTAsIDB4ODIxMCwgMHgwMDA4LCAweDgyMTEsIDB4MWYwNCwgMHg0NzY5LCAweDA4MDQsIDB4NDdkNywKLQkweDgyZmYsIDB4MTE2MCwgMHhkNWQ0LCAweDAxMjAsIDB4YTFhNiwgMHgzZmZmLCAweDBkOTAsIDB4MDAyMCwKLQkweGExYTYsIDB4M2ZmZiwgMHgwOTA0LCAweDQ3ZDcsIDB4YTE4ZCwgMHhjMDAwLCAweDIwYTksIDB4MDAxMCwKLQkweDIwMTksIDB4MDAwMSwgMHhkNWQ0LCAweDAxMTAsIDB4MjAxOSwgMHgwMDEwLCAweDIxMjAsIDB4ZDVkNCwKLQkweDAxMTAsIDB4ODQyMywgMHgwMDA4LCAweDg0MjQsIDB4MTI0MCwgMHhkNWQ0LCAweDAxMTAsIDB4ODMxOSwKLQkweDAwMDgsIDB4ODMxOCwgMHgxZjA0LCAweDQ3OGYsIDB4MDRkMCwgMHgyM2E4LCAweDIwMjEsIDB4MDAwMSwKLQkweDg0MjYsIDB4ODQyNSwgMHgxZjA0LCAweDQ3YTEsIDB4MjMyOCwgMHg4NTI5LCAweGEyYmUsIDB4MDAwNywKLQkweDAxNTgsIDB4MDAwNiwgMHgyMDM5LCAweDAwMDcsIDB4MjIwMCwgMHhhNzNhLCAweDAwMGUsIDB4MjdhOCwKLQkweGE1YTgsIDB4MDAxMCwgMHgxZjA0LCAweDQ3YjAsIDB4NzU0ZSwgMHhhNWM4LCAweDJiZTYsIDB4MjkyZCwKLQkweGE1YWMsIDB4MDBmZiwgMHg3NTcyLCAweDY1MzIsIDB4NjUzNiwgMHgwMDE2LCAweDI1MDgsIDB4MDgwYywKLQkweDI2YTAsIDB4MDAxZSwgMHg2MGU3LCAweDAwMDAsIDB4NjVlYSwgMHgyMDE4LCAweDIzMDQsIDB4YTQwNSwKLQkweDIwMWEsIDB4NzA3NywgMHgwMDAxLCAweDI2YTAsIDB4Mjg5OCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMjgsIDB4YTAwNiwKLQkweDAwMTgsIDB4YTAwNiwgMHgwODBjLCAweDE0ZjYsIDB4MDA5ZSwgMHgwMDhlLCAweDAwMDUsIDB4MjExOCwKLQkweDIwMjEsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDcsIDB4YTM5YSwgMHgwMDEwLCAweDAyMTgsIDB4ODQyMCwKLQkweDgwMDEsIDB4MGNkMCwgMHgyMTE4LCAweDg0ZmYsIDB4MDEyMCwgMHhhMzlhLCAweDAwMTAsIDB4ODQyMSwKLQkweDFkZTAsIDB4MjAyMSwgMHgwMDAxLCAweDgzZmYsIDB4MDExOCwgMHg4NDIzLCAweDgzMTksIDB4MWRlOCwKLQkweGEyMzgsIDB4MjcwNCwgMHhhNDJjLCAweDExYjgsIDB4YTQwNSwgMHgyMDNhLCAweDcxNGUsIDB4YTFhMCwKLQkweDJiZTYsIDB4MjQyZCwgMHhhNWFjLCAweDAwZmYsIDB4NzU3MiwgMHg2NTMyLCAweDY1MzYsIDB4MDAxNiwKLQkweDI1MDgsIDB4MDgwYywgMHgyNmEwLCAweDAwMWUsIDB4NjBlNywgMHgwMDAwLCAweDY1ZWEsIDB4NzA3NywKLQkweDAwMDEsIDB4YTA4NCwgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4NzA3YiwKLQkweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4MjA3MSwKLQkweDAxNDAsIDB4MDgwYywgMHg3ODM0LCAweDcwMDQsIDB4YTA4NCwgMHg0MDAwLCAweDAxMjAsIDB4NzAwMywKLQkweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQyMiwKLQkweDIwNzMsIDB4MDAwMCwgMHg3ODQwLCAweDAwMjYsIDB4MDAxNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywKLQkweDQ4ZGUsIDB4MDAxZSwgMHhhMDk0LCAweDAwMTAsIDB4YTI4NSwgMHgwMDgwLCAweDc4NDIsIDB4N2E0MiwKLQkweDAwMmUsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwMTEsIDB4YWZkMSwgMHgyMDEzLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDAxMmUsIDB4MjBlMSwKLQkweDkwODAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLCAweDc4MmIsIDB4MjAwOSwKLQkweDA3ZDAsIDB4MjAxMSwgMHg0ODFiLCAweDA4MGMsIDB4NjU5MywgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwKLQkweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NDhkZSwKLQkweDIwNjEsIDB4YWZkYSwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLCAweDIwNjEsIDB4YWQwMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgyMDYxLCAweDAxMDAsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwKLQkweDIwMDksIDB4MDAyZCwgMHgyMDExLCAweDQ4ODMsIDB4MDgwYywgMHg2NTAxLCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzEsIDB4MDEwMCwgMHgwODBjLCAweDc4MzQsIDB4MjA3MSwgMHgwMTQwLCAweDcwMDQsIDB4YTA4NCwKLQkweDQwMDAsIDB4MDEyMCwgMHg3MDAzLCAweDEwMDAsIDB4NzAwMywgMHgwMDAwLCAweDA4MGMsIDB4NTc1NywKLQkweDAxYTgsIDB4MDgwYywgMHg1Nzc1LCAweDExOTAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4YWFhYSwKLQkweDAwMTYsIDB4MDgwYywgMHgyNzQ0LCAweDIwMDEsIDB4YWY4ZSwgMHgyMTAyLCAweDAwMWUsIDB4MjAwMSwKLQkweGFmOWUsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsIDB4NTY5YSwgMHgwMDMwLCAweDIwMDEsIDB4MDAwMSwKLQkweDA4MGMsIDB4MjYxZSwgMHgwODBjLCAweDQ4NWUsIDB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwKLQkweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweGIzYzAsIDB4MjA5OSwgMHhiMjhlLCAweDMzMDQsIDB4ODAwNywKLQkweDIwYTIsIDB4OTM5OCwgMHg5NGEwLCAweDFmMDQsIDB4NDhiZSwgMHgwMDA1LCAweDIwZTEsIDB4OTA4MCwKLQkweDIwZTEsIDB4NDAwMCwgMHgyMDk5LCAweGIyMDAsIDB4MjBhMSwgMHgwMjBiLCAweDIwYTksIDB4MDAwYywKLQkweDUzYTYsIDB4MDAwNSwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDIwOTksIDB4YjI4MCwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMGE5LCAweDAwMGMsIDB4NTNhNiwgMHgwMDA1LCAweDAwYzYsIDB4MDAwNiwKLQkweDIwNjEsIDB4MDEwMCwgMHg4MTBmLCAweDIwMDEsIDB4YWQzMCwgMHgyMDA0LCAweGEwMDUsIDB4MTEzOCwKLQkweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHhhMTA1LCAweDAwMTAsIDB4YTE4NSwKLQkweDAwZjcsIDB4NjA0YSwgMHgwMDBlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDE2LCAweDAwNDYsIDB4MjAwMSwKLQkweGFkNTIsIDB4MjAwNCwgMHhkMGE0LCAweDAxNTgsIDB4YTAwNiwgMHgyMDIwLCAweDIwMDksIDB4MDAyYSwKLQkweDA4MGMsIDB4YTk2YywgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywgMHhjMTk1LCAweDIxMDIsIDB4MjAxOSwKLQkweDAwMmEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmFhYywgMHgwMDRlLCAweDAwMWUsIDB4MDAwNSwKLQkweDA4MGMsIDB4NDg1ZSwgMHg3MDhiLCAweDAwMDAsIDB4NzA4MywgMHgwMDAwLCAweDAwMDUsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDA0LCAweGQwOWMsIDB4MDEwMCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwKLQkweDAwMTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgwMTAxLCAweDIwMGMsIDB4YTE4ZCwKLQkweDAwMDYsIDB4MjEwMiwgMHgwMTJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAxNTYsIDB4MjBhOSwKLQkweDAwZmYsIDB4MjAwOSwgMHhhZTM0LCAweGEwMDYsIDB4MjAwYSwgMHg4MTA4LCAweDFmMDQsIDB4NDkzNCwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMzYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MjA2OSwKLQkweGFkNTEsIDB4YTAwNiwgMHg2MDAyLCAweDYwMDcsIDB4MDcwNywgMHg2MDBhLCAweDYwMGUsIDB4NjAxMiwKLQkweGExOTgsIDB4MmJlNiwgMHgyMzFkLCAweGEzOWMsIDB4MDBmZiwgMHg2MzE2LCAweDIwYTksIDB4MDAwNCwKLQkweGFjOTgsIDB4MDAwNiwgMHgyM2EwLCAweDQwYTQsIDB4MjBhOSwgMHgwMDA0LCAweGFjOTgsIDB4MDAwYSwKLQkweDIzYTAsIDB4NDBhNCwgMHg2MDNlLCAweDYwNDIsIDB4NjA0ZSwgMHg2MDUyLCAweDYwNTYsIDB4NjA1YSwKLQkweDYwNWUsIDB4NjA2MiwgMHg2MDY2LCAweDYwNmEsIDB4NjA2ZSwgMHg2MDcyLCAweDYwNzYsIDB4NjA3YSwKLQkweDYwN2UsIDB4NjA4MiwgMHg2MDg2LCAweDYwOGEsIDB4NjA4ZSwgMHg2MDkyLCAweDYwOTYsIDB4NjA5YSwKLQkweDYwOWUsIDB4NjBhZSwgMHg2MWEyLCAweDAwZDYsIDB4NjBhNCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywKLQkweDE1ZjAsIDB4NjBhNywgMHgwMDAwLCAweDYwYTgsIDB4YTA2ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTVmMCwKLQkweDYwYWIsIDB4MDAwMCwgMHgwMGRlLCAweGEwMDYsIDB4NjA0YSwgMHg2ODEwLCAweDYwM2EsIDB4NjgwYywKLQkweDYwNDYsIDB4NjgxNCwgMHhhMDg0LCAweDAwZmYsIDB4NjA0MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwM2UsIDB4MDBkZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDY5NDQsIDB4NmU0OCwKLQkweGE2ODQsIDB4M2ZmZiwgMHhhMDgyLCAweDQwMDAsIDB4MWEwNCwgMHg0YTQ5LCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE4MiwgMHgwMGZmLCAweDFhMDQsIDB4NGE0ZSwgMHgyMDAxLCAweGFkMGMsIDB4MjAwNCwKLQkweGEwODQsIDB4MDAwMywgMHgwMWMwLCAweDIwMDEsIDB4YWQwYywgMHgyMDA0LCAweGQwODQsIDB4MTkwNCwKLQkweDRhMzEsIDB4YTE4OCwgMHhhZTM0LCAweDIxMDQsIDB4YTA2NSwgMHgwOTA0LCAweDRhMzEsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhlLCAweDAwMDYsIDB4MTkwNCwgMHg0YTMxLCAweDYwMDAsIDB4ZDBjNCwKLQkweDA5MDQsIDB4NGEzMSwgMHgwMDY4LCAweGExODgsIDB4YWUzNCwgMHgyMTA0LCAweGEwNjUsIDB4MDkwNCwKLQkweDRhMTUsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4ZSwgMHgwMDA2LCAweDE5MDQsIDB4NGExYSwKLQkweDYwYTQsIDB4YTAwZCwgMHgwMTE4LCAweDA4MGMsIDB4NGVmOSwgMHgwNWQwLCAweDYwYTgsIDB4YTAwZCwKLQkweDAxODgsIDB4MDgwYywgMHg0ZjQzLCAweDExNzAsIDB4Njk0YywgMHhkMWZjLCAweDExMTgsIDB4MDgwYywKLQkweDRjMTEsIDB4MDQ0OCwgMHgwODBjLCAweDRiZDMsIDB4Njk0YywgMHhkMWVjLCAweDE1MjAsIDB4MDgwYywKLQkweDRkZWQsIDB4MDQwOCwgMHg2OTRjLCAweGExODQsIDB4YTAwMCwgMHgwMTc4LCAweGQxZWMsIDB4MDE0MCwKLQkweGQxZmMsIDB4MDExOCwgMHgwODBjLCAweDRkZmMsIDB4MDAyOCwgMHgwODBjLCAweDRkZmMsIDB4MDAyOCwKLQkweGQxZmMsIDB4MDExOCwgMHgwODBjLCAweDRiZDMsIDB4MDA3MCwgMHg2MDUwLCAweGEwMGQsIDB4MDEzMCwKLQkweDJkMDAsIDB4MjAwYSwgMHg2ODAzLCAweDAwMDAsIDB4NjA1MiwgMHgwMDI4LCAweDJkMDAsIDB4NjA1MiwKLQkweDYwNGUsIDB4NjgwMywgMHgwMDAwLCAweDA4MGMsIDB4NjdjNSwgMHhhMDA2LCAweDAxMmUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDAsIDB4MDRlOCwgMHgyMDAxLCAweDAwMjgsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDRjMCwgMHhhMDgyLCAweDAwMDYsIDB4MTJhMCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTE2MCwgMHg2MGEwLCAweGQwYmMsIDB4MTE0OCwgMHg2MTAwLCAweGQxZmMsIDB4MDkwNCwKLQkweDQ5ZDAsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwNDIwLCAweDIwMDEsIDB4MDAyOCwKLQkweDAwYTgsIDB4MjAwOSwgMHhhZDBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwKLQkweDAwNjgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDQwLCAweDIwMDEsIDB4MDAyOSwKLQkweDYxMDAsIDB4ZDFmYywgMHgwMTE4LCAweDIwMDksIDB4MTAwMCwgMHgwMDYwLCAweDIwMDksIDB4MDAwMCwKLQkweDAwNDgsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MDAwMCwgMHgwMDIwLCAweDIwMDEsIDB4MDAyOSwKLQkweDIwMDksIDB4MDAwMCwgMHhhMDA1LCAweDAxMmUsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4Njg0NCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgyMDA4LCAweGExODIsIDB4MDBmZiwKLQkweDFhMDQsIDB4NGFhOCwgMHhhMTg4LCAweGFlMzQsIDB4MjEwNCwgMHhhMDY1LCAweDAxYzAsIDB4NjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhlLCAweDAwMDYsIDB4MTFhOCwgMHgyYzcwLCAweDA4MGMsIDB4ODAyMiwKLQkweDA1ZTgsIDB4MmUwMCwgMHg2MDFhLCAweDJkMDAsIDB4NjAxMiwgMHg2MDBiLCAweGZmZmYsIDB4NjAxZiwKLQkweDAwMGEsIDB4MjAwOSwgMHgwMDAzLCAweDA4MGMsIDB4ODBhNywgMHhhMDA2LCAweDA0NjAsIDB4MjAwMSwKLQkweDAwMjgsIDB4MDQ0MCwgMHhhMDgyLCAweDAwMDYsIDB4MTI5OCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTE1OCwgMHg2MGEwLCAweGQwYmMsIDB4MTE0MCwgMHg2MTAwLCAweGQxZmMsIDB4MDllOCwKLQkweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDBhOCwgMHgyMDAxLCAweDAwMjgsIDB4MDA5MCwKLQkweDIwMDksIDB4YWQwYywgMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDA1MCwKLQkweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAyOCwgMHgyMDAxLCAweDAwMjksIDB4MDAxMCwKLQkweDIwMDEsIDB4MDAyOSwgMHhhMDA1LCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAyYywKLQkweDBjYzgsIDB4MDBmNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMTEsIDB4MDAwMCwKLQkweDIwNzksIDB4YWQwMCwgMHg2OTQ0LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDBmZiwKLQkweDFhMDQsIDB4NGI3NywgMHgyMDAxLCAweGFkMGMsIDB4MjAwNCwgMHhhMDg0LCAweDAwMDMsIDB4MTkwNCwKLQkweDRiNjUsIDB4MDgwYywgMHg0Y2RjLCAweDExODAsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4MiwKLQkweDAwMDYsIDB4MTI1MCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDE5MDQsIDB4NGI2MCwKLQkweDYwYTAsIDB4ZDBiYywgMHgxOTA0LCAweDRiNjAsIDB4Njg2NCwgMHhhMGM2LCAweDAwNmYsIDB4MDExOCwKLQkweDIwMDgsIDB4MDgwNCwgMHg0YjI4LCAweDY5NjgsIDB4MjE0MCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDc4ZDAsIDB4ZDBhYywgMHgxMTE4LCAweGExODIsIDB4MDA4MCwgMHgwNmQwLCAweGExODIsIDB4MDBmZiwKLQkweDE2YjgsIDB4NmE3MCwgMHg2YjZjLCAweDc4NmMsIDB4YTMwNiwgMHgxMTYwLCAweDc4NzAsIDB4YTI0ZSwKLQkweDExMTgsIDB4MjIwOCwgMHgyMzEwLCAweDA0NjAsIDB4YTljYywgMHhmZjAwLCAweDExMTgsIDB4MjIwOCwKLQkweDIzMTAsIDB4MDQzMCwgMHgwODBjLCAweDNiNTgsIDB4MmM3MCwgMHgwNTUwLCAweDIwMDksIDB4MDAwMCwKLQkweDIwMTEsIDB4MDAwMCwgMHhhMGM2LCAweDQwMDAsIDB4MTE2MCwgMHgwMDA2LCAweDJlNjAsIDB4MDgwYywKLQkweDRmNmUsIDB4MTEwOCwgMHhjMTg1LCAweDcwMDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDAwZSwKLQkweDAwODgsIDB4YTBjNiwgMHg0MDA3LCAweDExMTAsIDB4MjQwOCwgMHgwMDYwLCAweGEwYzYsIDB4NDAwOCwKLQkweDExMTgsIDB4MjcwOCwgMHgyNjEwLCAweDAwMzAsIDB4YTBjNiwgMHg0MDA5LCAweDExMDgsIDB4MDAxMCwKLQkweDIwMDEsIDB4NDAwNiwgMHg2ODY2LCAweDY5NmEsIDB4NmE2ZSwgMHgyMDAxLCAweDAwMzAsIDB4MDQ1OCwKLQkweDA4MGMsIDB4ODAyMiwgMHgxMTM4LCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LCAweDAwMDMsIDB4MjAxMSwKLQkweDAwMDAsIDB4MGM4MCwgMHgyZTAwLCAweDYwMWEsIDB4MDgwYywgMHg5OTU2LCAweDJkMDAsIDB4NjAxMiwKLQkweDYwMWYsIDB4MDAwMSwgMHhhMDA2LCAweGQ4OGMsIDB4MDExMCwgMHgyMDAxLCAweDQwMDAsIDB4NjgzYSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MmFkOSwgMHgwMTJlLCAweDIwMDEsIDB4MDAwMCwKLQkweDA4MGMsIDB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg0YzMwLCAweDIwMDksIDB4MDAwMiwKLQkweDA4MGMsIDB4ODBhNywgMHhhMDA2LCAweGEwMDUsIDB4MDEyZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAyOCwgMHgyMDA5LCAweDAwMDAsIDB4MGNiMCwgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywKLQkweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAzOCwgMHhkMTg0LCAweDAxMTgsIDB4MjAwMSwKLQkweDAwMDQsIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweDBjMjAsIDB4MjAwMSwKLQkweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweDA4ZjgsIDB4Njk0NCwgMHg2ZTQ4LCAweGE2ODQsIDB4M2ZmZiwKLQkweGEwODIsIDB4NDAwMCwgMHgxNmI4LCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODIsIDB4MDBmZiwKLQkweDEyZTAsIDB4YTE4OCwgMHhhZTM0LCAweDIxMDQsIDB4YTA2NSwgMHgwMWI4LCAweDYwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4ZSwgMHgwMDA2LCAweDExYjAsIDB4Njg0YywgMHhkMGVjLCAweDAxMjAsIDB4MDgwYywKLQkweDRkZmMsIDB4MDRjOSwgMHgwMDMwLCAweDA0YjksIDB4Njg0YywgMHhkMGZjLCAweDAxMTAsIDB4MDgwYywKLQkweDRkZWQsIDB4MDgwYywgMHg0ZTNhLCAweGEwMDYsIDB4MDBjOCwgMHgyMDAxLCAweDAwMjgsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDBhMCwgMHhhMDgyLCAweDAwMDYsIDB4MTI0MCwgMHg2MTAwLCAweGQxZmMsIDB4MGQyMCwKLQkweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDA0OCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwKLQkweDAwMDAsIDB4MDAyMCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgwMDAwLCAweGEwMDUsIDB4MDAwNSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwNTAsIDB4YTAwZCwgMHgwMTM4LCAweDJkMDAsIDB4MjAwYSwKLQkweDY4MDMsIDB4MDAwMCwgMHg2MDUyLCAweDAxMmUsIDB4MDAwNSwgMHgyZDAwLCAweDYwNTIsIDB4NjA0ZSwKLQkweDY4MDMsIDB4MDAwMCwgMHgwY2MwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwNGMsIDB4YTAwNSwKLQkweDAxNzAsIDB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAwNCwgMHhhMDg2LCAweDAwMDIsIDB4MDE2OCwKLQkweDAwZWUsIDB4NjA0YywgMHg2ODAyLCAweDJkMDAsIDB4NjA0ZSwgMHgwMTJlLCAweDAwMDUsIDB4MmQwMCwKLQkweDYwNTIsIDB4NjA0ZSwgMHg2ODAzLCAweDAwMDAsIDB4MGNjMCwgMHg3MDFjLCAweGFjMDYsIDB4MWQ4MCwKLQkweDYwNGMsIDB4MjA3MCwgMHg3MDAwLCAweDY4MDIsIDB4MmQwMCwgMHg3MDAyLCAweDAwZWUsIDB4MDEyZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjA0YywgMHhhMDZkLCAweDAxMzAsIDB4NjgwMCwKLQkweGEwMDUsIDB4MTEwOCwgMHg2MDUyLCAweDYwNGUsIDB4YWQwNSwgMHgwMTJlLCAweDAwMDUsIDB4NjA0YywKLQkweGEwNmQsIDB4MDEzMCwgMHg2ODAwLCAweGEwMDUsIDB4MTEwOCwgMHg2MDUyLCAweDYwNGUsIDB4YWQwNSwKLQkweDAwMDUsIDB4NjgwMywgMHgwMDAwLCAweDYwODQsIDB4YTAwZCwgMHgwMTIwLCAweDJkMDAsIDB4MjAwYSwKLQkweDYwODYsIDB4MDAwNSwgMHgyZDAwLCAweDYwODYsIDB4NjA4MiwgMHgwY2Q4LCAweDAxMjYsIDB4MDBjNiwKLQkweDAwMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTgsIDB4MjI2MCwgMHg2MjAwLCAweGEwMDUsIDB4MDExMCwKLQkweGMyODUsIDB4MDAwOCwgMHhjMjg0LCAweDYyMDIsIDB4MDAyZSwgMHgwMGNlLCAweDAxMmUsIDB4MDAwNSwKLQkweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxOCwgMHgyMjYwLCAweDYyMDQsIDB4MDAwNiwKLQkweGEwODYsIDB4MDAwNiwgMHgxMTgwLCAweDYwOWMsIDB4ZDBhYywgMHgwMTY4LCAweDIwMDEsIDB4YWQ1MiwKLQkweDIwMDQsIDB4ZDBhNCwgMHgwMTQwLCAweGEyODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwODYsIDB4MDAwNywKLQkweDExMTAsIDB4MjAxMSwgMHgwNjAwLCAweDAwMGUsIDB4YTI5NCwgMHhmZjAwLCAweGEyMTUsIDB4NjIwNiwKLQkweDAwMDYsIDB4YTA4NiwgMHgwMDA2LCAweDExMjgsIDB4NjI5MCwgMHg4MmZmLCAweDExMTAsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDAwZSwgMHgwMGNlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDAwYzYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjIxOCwgMHgyMjYwLCAweDYyMDQsIDB4MDAwNiwgMHhhMDg2LCAweDAwMDYsIDB4MTE3OCwKLQkweDYwOWMsIDB4ZDBhNCwgMHgwMTYwLCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MTEzOCwKLQkweGEyODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDcsIDB4MTExMCwgMHgyMDExLCAweDAwMDYsIDB4MDAwZSwKLQkweGEyOTQsIDB4MDBmZiwgMHg4MDA3LCAweGEyMTUsIDB4NjIwNiwgMHgwMGNlLCAweDAxMmUsIDB4MDAwNSwKLQkweDAwMjYsIDB4YTE4MiwgMHgwMGZmLCAweDAyMTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwYjAsIDB4YTE5MCwKLQkweGFlMzQsIDB4MjIwNCwgMHhhMDY1LCAweDExODAsIDB4MDAxNiwgMHgwMGQ2LCAweDA4MGMsIDB4MTVjMCwKLQkweDJkNjAsIDB4MDBkZSwgMHgwMDFlLCAweDBkODAsIDB4MmMwMCwgMHgyMDEyLCAweDYwYTcsIDB4MDAwMCwKLQkweDYwYWIsIDB4MDAwMCwgMHgwODBjLCAweDQ5M2EsIDB4YTAwNiwgMHgwMDJlLCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDI2LCAweGExODIsIDB4MDBmZiwgMHgwMjE4LCAweGEwODUsIDB4MDAwMSwKLQkweDA0ODAsIDB4MDBkNiwgMHhhMTkwLCAweGFlMzQsIDB4MjIwNCwgMHhhMDZkLCAweDA1NDAsIDB4MjAxMywKLQkweDAwMDAsIDB4MDBkNiwgMHgwMGM2LCAweDJkNjAsIDB4NjBhNCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywKLQkweDE1ZjAsIDB4NjBhOCwgMHhhMDZkLCAweDAxMTAsIDB4MDgwYywgMHgxNWYwLCAweDAwY2UsIDB4MDBkZSwKLQkweDAwZDYsIDB4MDBjNiwgMHg2OGFjLCAweDIwNjAsIDB4OGNmZiwgMHgwMTY4LCAweDYwMGMsIDB4MDAwNiwKLQkweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDExMCwgMHgwODBjLCAweDE2MDAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBjZSwgMHgwYzg4LCAweDAwY2UsIDB4MDBkZSwgMHgwODBjLCAweDE1ZjAsIDB4MDBkZSwKLQkweGEwMDYsIDB4MDAyZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAxNiwgMHhhMTgyLCAweDAwZmYsIDB4MDIxOCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDMwLCAweGExODgsIDB4YWUzNCwgMHgyMTA0LCAweGEwNjUsIDB4MGRjMCwKLQkweGEwMDYsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4NjAwYiwKLQkweDAwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDYwMDAsIDB4YzA4YywgMHg2MDAyLCAweDA4MGMsIDB4NTc0ZiwKLQkweDE1MzgsIDB4NjBhMCwgMHhhMDg2LCAweDAwN2UsIDB4MjA2OSwgMHhiMjkwLCAweDAxMzAsIDB4MjAwMSwKLQkweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExZTAsIDB4MDA5OCwgMHgyZDA0LCAweGQwZTQsIDB4MDFjMCwKLQkweDAwZDYsIDB4MjA2OSwgMHhiMjhlLCAweDAwYzYsIDB4MjA2MSwgMHhhZjlmLCAweDY4MTAsIDB4MjA2MiwKLQkweDY4MTQsIDB4NjAwNiwgMHg2ODE4LCAweDYwMGEsIDB4NjgxYywgMHg2MDBlLCAweDAwY2UsIDB4MDBkZSwKLQkweDhkNjksIDB4MmQwNCwgMHgyMDY5LCAweDAxNDAsIDB4Njg4NiwgMHgyMDY5LCAweGFkMDAsIDB4NjhhMiwKLQkweDIwNjksIDB4YjI4ZSwgMHg2ODA4LCAweDYwNWUsIDB4NjgxMCwgMHg2MDYyLCAweDYxMzgsIDB4YTEwYSwKLQkweDAyMDgsIDB4NjAzYSwgMHg2ODE0LCAweDYwNjYsIDB4MjA5OSwgMHhiMjk2LCAweGFjODgsIDB4MDAwYSwKLQkweDIxYTAsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA5OSwgMHhiMjlhLCAweGFjODgsIDB4MDAwNiwKLQkweDIxYTAsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MjA2OSwgMHhiMmFlLCAweDY4MDgsIDB4NjA2YSwKLQkweDY5MGMsIDB4NjE2ZSwgMHg2ODEwLCAweDYwNzIsIDB4NjgxOCwgMHg2MDc2LCAweGExODIsIDB4MDIxMSwKLQkweDEyMTgsIDB4MjAwOSwgMHgwMDA4LCAweDA0MDAsIDB4YTE4MiwgMHgwMjU5LCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDcsIDB4MDBkMCwgMHhhMTgyLCAweDAyYzEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDYsIDB4MDBhMCwKLQkweGExODIsIDB4MDM0OSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNSwgMHgwMDcwLCAweGExODIsIDB4MDQyMSwKLQkweDEyMTgsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsIDB4YTE4MiwgMHgwNTgxLCAweDEyMTgsIDB4MjAwOSwKLQkweDAwMDMsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDIsIDB4NjE5MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwZGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgyMDcxLCAweGIyOGQsIDB4MmUwNCwKLQkweDY4OTYsIDB4MjA3MSwgMHhiMjhlLCAweDcwMDQsIDB4Njg5YSwgMHg3MDFjLCAweDY4OWUsIDB4NmEwMCwKLQkweDIwMDksIDB4YWQ3MSwgMHgyMTBjLCAweGQwYmMsIDB4MDEyMCwgMHhkMWVjLCAweDAxMTAsIDB4YzJhZCwKLQkweDAwMDgsIDB4YzJhYywgMHhkMGM0LCAweDAxMjAsIDB4ZDFlNCwgMHgwMTEwLCAweGMyYmQsIDB4MDAwOCwKLQkweGMyYmMsIDB4NmEwMiwgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg2MGE0LCAweGEwNmQsIDB4MDFjMCwgMHg2OTAwLCAweDgxZmYsIDB4MTU0MCwKLQkweDZhMDQsIDB4YTI4MiwgMHgwMDEwLCAweDE2NDgsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwKLQkweDIxMDQsIDB4YTA4NiwgMHhmZmZmLCAweDAxMjgsIDB4ODEwOCwgMHgxZjA0LCAweDRkYTgsIDB4MDgwYywKLQkweDE0ZjYsIDB4MjYwYSwgMHg4MjEwLCAweDZhMDYsIDB4MDA5OCwgMHgwODBjLCAweDE1ZDksIDB4MDFhOCwKLQkweDJkMDAsIDB4NjBhNiwgMHg2ODAzLCAweDAwMDAsIDB4YWQ4OCwgMHgwMDA0LCAweDIwYTksIDB4MDAxMCwKLQkweDIwMGIsIDB4ZmZmZiwgMHg4MTA4LCAweDFmMDQsIDB4NGRjMCwgMHg2ODA3LCAweDAwMDEsIDB4NmUxMiwKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMGQ2LCAweDYwYTQsIDB4YTAwZCwgMHgwMWEwLCAweDIxNjgsIDB4NjgwMCwKLQkweGEwMDUsIDB4MTE2MCwgMHgwODBjLCAweDRlZjksIDB4MTE2OCwgMHgyMDBiLCAweGZmZmYsIDB4NjgwNCwKLQkweGEwOGEsIDB4MDAwMiwgMHgwMjE4LCAweDgwMDEsIDB4NjgwNiwgMHgwMDIwLCAweDA4MGMsIDB4MTVmMCwKLQkweDYwYTcsIDB4MDAwMCwgMHgwMGRlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NGY1NiwgMHgwMDEwLCAweDA4MGMsIDB4NGJjMCwgMHgwODBjLCAweDRlNzEsIDB4MWRkOCwKLQkweDA4MGMsIDB4NGUzYSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwYTgsIDB4YTA2ZCwgMHgwMWMwLCAweDY5NTAsIDB4ODFmZiwgMHgxNTQwLCAweDZhNTQsIDB4YTI4MiwKLQkweDAwMTAsIDB4MTY3MCwgMHhhZDg4LCAweDAwMTgsIDB4MjBhOSwgMHgwMDEwLCAweDIxMDQsIDB4YTA4NiwKLQkweGZmZmYsIDB4MDEyOCwgMHg4MTA4LCAweDFmMDQsIDB4NGUwZSwgMHgwODBjLCAweDE0ZjYsIDB4MjYwYSwKLQkweDgyMTAsIDB4NmE1NiwgMHgwMDk4LCAweDA4MGMsIDB4MTVkOSwgMHgwMWQwLCAweDJkMDAsIDB4NjBhYSwKLQkweDY4NTMsIDB4MDAwMCwgMHhhZDg4LCAweDAwMTgsIDB4MjBhOSwgMHgwMDEwLCAweDIwMGIsIDB4ZmZmZiwKLQkweDgxMDgsIDB4MWYwNCwgMHg0ZTI2LCAweDY4NTcsIDB4MDAwMSwgMHg2ZTYyLCAweDAwMTAsIDB4MDgwYywKLQkweDRjMTEsIDB4MDA4OSwgMHgxZGUwLCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwKLQkweGEwMDYsIDB4MGNkOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDY3YzUsIDB4MDEyZSwKLQkweDAwMDUsIDB4YTAxZSwgMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHhhMDBlLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjA0YywgMHgyMDY4LCAweDYwMDAsIDB4ZDBkYywgMHgxMTcwLCAweDhkZmYsIDB4MDFlOCwKLQkweDgzZmYsIDB4MDEyMCwgMHg2ODQ4LCAweGE2MDYsIDB4MDE1OCwgMHgwMDMwLCAweDY4M2MsIDB4YTQwNiwKLQkweDExMTgsIDB4Njg0MCwgMHhhNTA2LCAweDAxMjAsIDB4MmQwOCwgMHg2ODAwLCAweDIwNjgsIDB4MGM3MCwKLQkweDZhMDAsIDB4NjA0YywgMHhhZDA2LCAweDExMTAsIDB4NjI0ZSwgMHgwMDE4LCAweGExODAsIDB4MDAwMCwKLQkweDIyMDIsIDB4ODJmZiwgMHgxMTEwLCAweDYxNTIsIDB4OGRmZiwgMHgwMTJlLCAweDAwMDUsIDB4YTAxZSwKLQkweDAwMTAsIDB4MjAxOSwgMHgwMDAxLCAweGEwMGUsIDB4NjA4MCwgMHgyMDY4LCAweDhkZmYsIDB4MDFlOCwKLQkweDgzZmYsIDB4MDEyMCwgMHg2ODQ4LCAweGE2MDYsIDB4MDE1OCwgMHgwMDMwLCAweDY4M2MsIDB4YTQwNiwKLQkweDExMTgsIDB4Njg0MCwgMHhhNTA2LCAweDAxMjAsIDB4MmQwOCwgMHg2ODAwLCAweDIwNjgsIDB4MGM3MCwKLQkweDZhMDAsIDB4NjA4MCwgMHhhZDA2LCAweDExMTAsIDB4NjI4MiwgMHgwMDE4LCAweGExODAsIDB4MDAwMCwKLQkweDIyMDIsIDB4ODJmZiwgMHgxMTEwLCAweDYxODYsIDB4OGRmZiwgMHgwMDA1LCAweGEwMTYsIDB4MDgwYywKLQkweDRlZjMsIDB4MTExMCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0ZjNkLCAweDExMTAsIDB4YTI5NSwKLQkweDAwMDIsIDB4MDAwNSwgMHgwODBjLCAweDRmNmUsIDB4MDExOCwgMHgwODBjLCAweDk2NGIsIDB4MDAxMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NGY2ZSwgMHgwMTE4LCAweDA4MGMsIDB4OTVlNCwKLQkweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg0ZjZlLCAweDAxMTgsIDB4MDgwYywKLQkweDk2MmUsIDB4MDAxMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDRmNmUsIDB4MDExOCwKLQkweDA4MGMsIDB4OTYwMCwgMHgwMDEwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NGY2ZSwKLQkweDAxMTgsIDB4MDgwYywgMHg5NjY3LCAweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDEyNiwKLQkweDAwMDYsIDB4MDBkNiwgMHgyMDkxLCAweDgwMDAsIDB4NjA4MCwgMHhhMDZkLCAweDAxYTAsIDB4NjgwMCwKLQkweDAwMDYsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4OTdmZCwKLQkweDAwMDYsIDB4NjAwMCwgMHhkMGZjLCAweDAxMTAsIDB4MDgwYywgMHhhYzAzLCAweDAwMGUsIDB4MDgwYywKLQkweDUxMGMsIDB4MDAwZSwgMHgwYzUwLCAweDYwODMsIDB4MDAwMCwgMHg2MDg3LCAweDAwMDAsIDB4MDBkZSwKLQkweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDYwYTQsIDB4YTAwZCwgMHgxMTE4LCAweGEwODUsIDB4MDAwMSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMTcwLCAweDcwMDAsIDB4YTAwNSwgMHgxMTYwLCAweDIwYTksIDB4MDAxMCwKLQkweGFlODgsIDB4MDAwNCwgMHgyMTA0LCAweGE2MDYsIDB4MDEyOCwgMHg4MTA4LCAweDFmMDQsIDB4NGYwMiwKLQkweGEwODUsIDB4MDAwMSwgMHhhMDA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjBhNCwgMHhhMDZkLCAweDExMjgsIDB4MDgwYywgMHgxNWQ5LCAweDAxYTAsIDB4MmQwMCwKLQkweDYwYTYsIDB4NjgwMywgMHgwMDAxLCAweDY4MDcsIDB4MDAwMCwgMHhhZDg4LCAweDAwMDQsIDB4MjBhOSwKLQkweDAwMTAsIDB4MjAwYiwgMHhmZmZmLCAweDgxMDgsIDB4MWYwNCwgMHg0ZjIxLCAweGEwODUsIDB4MDAwMSwKLQkweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNkOCwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjBhNCwgMHhhMDZkLCAweDAxMzAsIDB4NjBhNywgMHgwMDAwLCAweDA4MGMsIDB4MTVmMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwgMHg2MGE4LCAweGEwMGQsIDB4MTExOCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZTYsIDB4MjE3MCwgMHg3MDUwLCAweGEwMDUsIDB4MTE2MCwKLQkweDIwYTksIDB4MDAxMCwgMHhhZTg4LCAweDAwMTgsIDB4MjEwNCwgMHhhNjA2LCAweDAxMjgsIDB4ODEwOCwKLQkweDFmMDQsIDB4NGY0YywgMHhhMDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGMxOSwgMHgxMTg4LCAweDIwMGIsIDB4ZmZmZiwgMHgwMGQ2LCAweDYwYTgsIDB4MjA2OCwKLQkweDY4NTQsIDB4YTA4YSwgMHgwMDAyLCAweDAyMTgsIDB4ODAwMSwgMHg2ODU2LCAweDAwMjAsIDB4MDgwYywKLQkweDE1ZjAsIDB4NjBhYiwgMHgwMDAwLCAweDAwZGUsIDB4MDEyZSwgMHgwMDA1LCAweDYwOWMsIDB4ZDBhNCwKLQkweDAwMDUsIDB4MDBmNiwgMHgwODBjLCAweDU3NGYsIDB4MDFiMCwgMHg3MWI0LCAweDgxZmYsIDB4MTE5OCwKLQkweDcxZDAsIDB4ZDE5YywgMHgwMTgwLCAweDIwMDEsIDB4MDA3ZSwgMHhhMDgwLCAweGFlMzQsIDB4MjAwNCwKLQkweGEwN2QsIDB4MDE0OCwgMHg3ODA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MTExOCwKLQkweDc4MDAsIDB4YzBlZCwgMHg3ODAyLCAweDIwNzksIDB4YWQ1MSwgMHg3ODA0LCAweGQwYTQsIDB4MDFlOCwKLQkweDAxNTYsIDB4MDBjNiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDgwYywKLQkweDRjZGMsIDB4MTE2OCwgMHg2MDA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweGEwOTYsIDB4MDAwNCwKLQkweDAxMTgsIDB4YTA4NiwgMHgwMDA2LCAweDExMTgsIDB4NjAwMCwgMHhjMGVkLCAweDYwMDIsIDB4MDAxZSwKLQkweDgxMDgsIDB4MWYwNCwgMHg0Zjk2LCAweDAwY2UsIDB4MDE1ZSwgMHgwODBjLCAweDUwMmQsIDB4MDEyMCwKLQkweDIwMDEsIDB4YWZhMiwgMHgyMDBjLCAweDAwMzgsIDB4MjA3OSwgMHhhZDUxLCAweDc4MDQsIDB4ZDBhNCwKLQkweDAxMzAsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NGZjMSwgMHgwODBjLCAweDY1OTMsIDB4MDBmZSwKLQkweDAwMDUsIDB4MjAxMSwgMHg0ZmMxLCAweDA4MGMsIDB4NjUwZCwgMHgwODBjLCAweDUwMmQsIDB4MDFmMCwKLQkweDIwMDEsIDB4YWViMiwgMHgyMDA0LCAweGEwODAsIDB4MDAwMCwgMHgyMDBjLCAweGMxZWMsIDB4MjEwMiwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDEzMCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwKLQkweDRmYzEsIDB4MDgwYywgMHg2NTkzLCAweDAwZTYsIDB4MjA3MSwgMHhhZDAwLCAweDcwNmYsIDB4MDAwMCwKLQkweDcwNzMsIDB4MDAwMCwgMHgwODBjLCAweDI4ZmEsIDB4MDBlZSwgMHgwNGIwLCAweDAxNTYsIDB4MDBjNiwKLQkweDIwYTksIDB4MDA3ZiwgMHgyMDA5LCAweDAwMDAsIDB4MDAxNiwgMHgwODBjLCAweDRjZGMsIDB4MTUzMCwKLQkweDYwMDAsIDB4ZDBlYywgMHgwNTE4LCAweDAwNDYsIDB4NjJhMCwgMHhhMjk0LCAweDAwZmYsIDB4ODIyNywKLQkweGEwMDYsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywgMHg2MDAwLCAweGMwZTUsIDB4YzBlYywKLQkweDYwMDIsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NSwgMHgwNzAwLCAweDYwMDYsIDB4MjAxOSwKLQkweDAwMjksIDB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4NjgxZCwKLQkweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgwMDRlLCAweDAwMWUsIDB4ODEwOCwKLQkweDFmMDQsIDB4NGZlYywgMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHgwMGM2LCAweDYwMTgsIDB4MjA2MCwKLQkweDYwMDAsIDB4YzBlYywgMHg2MDAyLCAweDAwY2UsIDB4MDAwNSwgMHg3ODE4LCAweDIwMDQsIDB4ZDBhYywKLQkweDAwMDUsIDB4NzgxOCwgMHgyMDA0LCAweGQwYmMsIDB4MDAwNSwgMHgwMGY2LCAweDIwMDEsIDB4YWViMiwKLQkweDIwMDQsIDB4YTA3ZCwgMHgwMTEwLCAweDc4MDAsIDB4ZDBlYywgMHgwMGZlLCAweDAwMDUsIDB4MDEyNiwKLQkweDAwMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMDAsIDB4YTAwNSwgMHgwMTEwLCAweGMyZmQsIDB4MDAwOCwKLQkweGMyZmMsIDB4NjIwMiwgMHgwMDJlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDcxLCAweGFlMTMsIDB4NzAwMywKLQkweDAwMDEsIDB4NzAwNywgMHgwMDAwLCAweDcwMTMsIDB4MDAwMCwgMHg3MDE3LCAweDAwMDAsIDB4NzAxYiwKLQkweDAwMDAsIDB4NzAxZiwgMHgwMDAwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDRiLCAweDAwMDEsIDB4NzA0ZiwKLQkweDAwMDAsIDB4NzA1YiwgMHgwMDIwLCAweDcwNWYsIDB4MDA0MCwgMHg3MDdmLCAweDAwMDAsIDB4MjA3MSwKLQkweGFmN2MsIDB4NzAwMywgMHhhZTEzLCAweDcwMDcsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4NzAwZiwKLQkweGFmNWMsIDB4NzAxMywgMHgwMDIwLCAweDcwMTcsIDB4MDA0MCwgMHg3MDM3LCAweDAwMDAsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweGFmMzQsIDB4YTAwZSwgMHg3MTg2LCAweDcxOGEsIDB4NzA5NywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBmYywgMHgxMTUwLCAweDIwMDEsIDB4YWQ1MiwKLQkweDIwMDQsIDB4YTAwZSwgMHhkMDljLCAweDAxMDgsIDB4ODEwOCwgMHg3MTAyLCAweDA4MDQsIDB4NTBkNiwKLQkweDIwMDEsIDB4YWQ3MSwgMHgyMDBjLCAweGExODQsIDB4MDAwZiwgMHgyMDA5LCAweGFkNzIsIDB4MjEwYywKLQkweDAwMDIsIDB4NTA3ZSwgMHg1MGIxLCAweDUwYjgsIDB4NTBjMiwgMHg1MGM3LCAweDUwN2UsIDB4NTA3ZSwKLQkweDUwN2UsIDB4NTBhMSwgMHg1MDdlLCAweDUwN2UsIDB4NTA3ZSwgMHg1MDdlLCAweDUwN2UsIDB4NTA3ZSwKLQkweDUwN2UsIDB4NzAwMywgMHgwMDA0LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwOTksIDB4YWQ3NSwKLQkweDIwYTEsIDB4YWY4NSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDA0MjgsIDB4NzA4ZiwgMHgwMDA1LCAweDcwMDcsIDB4MDEyMiwgMHgyMDAxLCAweDAwMDIsIDB4MDAzMCwKLQkweDcwOGYsIDB4MDAwMiwgMHg3MDA3LCAweDAxMjEsIDB4MjAwMSwgMHgwMDAzLCAweDcwMDIsIDB4NzA5NywKLQkweDAwMDEsIDB4MDA4OCwgMHg3MDA3LCAweDAxMjIsIDB4MjAwMSwgMHgwMDAyLCAweDAwMjAsIDB4NzAwNywKLQkweDAxMjEsIDB4MjAwMSwgMHgwMDAzLCAweDcwMDIsIDB4YTAwNiwgMHg3MDk2LCAweDcwOGUsIDB4YTE4NCwKLQkweGZmMDAsIDB4ODAwNywgMHg3MDlhLCAweGExODQsIDB4MDBmZiwgMHg3MDkyLCAweDAwZWUsIDB4MDAxZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFlMTMsIDB4Njg0YywgMHhhMDA1LCAweDExMzAsIDB4NzAyOCwKLQkweGMwODUsIDB4NzAyYSwgMHhhMDg1LCAweDAwMDEsIDB4MDQyOCwgMHg2YTYwLCAweDcyMzYsIDB4NmI2NCwKLQkweDczM2EsIDB4Njg2OCwgMHg3MDNlLCAweDcwNzYsIDB4Njg2YywgMHg3MDQyLCAweDcwN2EsIDB4Njg0YywKLQkweDcwMmUsIDB4Njg0NCwgMHg3MDMyLCAweDIwMDksIDB4MDAwZCwgMHgyMDBhLCAweDcwMGIsIDB4MDAwMCwKLQkweDgwMDcsIDB4ODAwNiwgMHg4MDA2LCAweGEwOGMsIDB4MDAzZiwgMHhhMDg0LCAweGZmYzAsIDB4YTIxMCwKLQkweDIxMDAsIDB4YTMxOSwgMHg3MjZlLCAweDczNzIsIDB4NzAyOCwgMHhjMDg0LCAweDcwMmEsIDB4NzAwNywKLQkweDAwMDEsIDB4YTAwNiwgMHgwMGVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMGU2LCAweDAwMjYsIDB4NjgzOCwKLQkweGQwZmMsIDB4MTkwNCwgMHg1MTY1LCAweDY4MDQsIDB4YTAwZCwgMHgwMTg4LCAweDAwZDYsIDB4MjA3MSwKLQkweGFkMDAsIDB4YTAxNiwgMHg3MDJjLCAweDIxNjgsIDB4NjkwNCwgMHgyMDZhLCAweDgyMTAsIDB4MmQwMCwKLQkweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYjAsIDB4YTIwMCwgMHg3MGIyLCAweDAwZGUsIDB4MjA3MSwKLQkweGFlMTMsIDB4NzAxYywgMHhhMDA1LCAweDE5MDQsIDB4NTE3NSwgMHgyMGE5LCAweDAwMzIsIDB4MGYwNCwKLQkweDUxNzMsIDB4MGUwNCwgMHg1MTJmLCAweDIwNzEsIDB4YWYzNCwgMHg3MjAwLCAweDgyZmYsIDB4MDVkOCwKLQkweDY5MzQsIDB4YTE4NiwgMHgwMTAzLCAweDE5MDQsIDB4NTE4MywgMHg2OTQ4LCAweDY4NDQsIDB4YTEwNSwKLQkweDE1NDAsIDB4MjAwOSwgMHg4MDIwLCAweDIyMDAsIDB4MDAwMiwgMHg1MTczLCAweDUxNGEsIDB4NTE5YiwKLQkweDUxYTcsIDB4NTE3MywgMHgyMDcxLCAweDAwMDAsIDB4MjBhOSwgMHgwMDMyLCAweDBmMDQsIDB4NTE3MywKLQkweDcwMTgsIDB4ZDA4NCwgMHgxZGQ4LCAweDcxMjIsIDB4NjgzYywgMHg3MDI2LCAweDY4NDAsIDB4NzAyYSwKLQkweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MjA3MSwgMHhhZDAwLCAweDcwMmMsIDB4MjA2YSwKLQkweDJkMDAsIDB4NzAyZSwgMHg3MGIwLCAweDgwMDAsIDB4NzBiMiwgMHgwMDJlLCAweDAwZWUsIDB4MDE1ZSwKLQkweDAwMDUsIDB4Njg0NCwgMHhhMDg2LCAweDAxMDAsIDB4MTEzMCwgMHg2ODY4LCAweGEwMDUsIDB4MTExOCwKLQkweDIwMDksIDB4ODAyMCwgMHgwODgwLCAweDIwNzEsIDB4YWUxMywgMHgyZDA4LCAweDIwNmIsIDB4MDAwMCwKLQkweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsIDB4YTA2ZCwgMHg3MTFhLCAweDAxMTAsIDB4NjkwMiwKLQkweDAwMDgsIDB4NzExZSwgMHgwYzEwLCAweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMTcsIDB4MDEzMCwKLQkweGExODYsIDB4MDAxZSwgMHgwMTE4LCAweGExOGUsIDB4MDAxZiwgMHgxZDI4LCAweDY4NGMsIDB4ZDBjYywKLQkweDBkMTAsIDB4Njg1MCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDAxLCAweDE5ZTAsIDB4MjAwOSwKLQkweDgwMjEsIDB4MDgwNCwgMHg1MTQzLCAweDcwODQsIDB4ODAwOCwgMHhhMDkyLCAweDAwMWUsIDB4MWE5OCwKLQkweDcxODYsIDB4YWU5MCwgMHgwMDAzLCAweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDAwNzgsIDB4NzA4NCwKLQkweDgwMDgsIDB4YTA5MiwgMHgwMDBmLCAweDFhMzgsIDB4NzE4NiwgMHhhZTkwLCAweDAwMDMsIDB4ODAwMywKLQkweGEyMTAsIDB4NjgzYywgMHgyMDEyLCAweDgyMTAsIDB4Njg0MCwgMHgyMDEyLCAweDcwODgsIDB4YTEwYSwKLQkweDBhMDQsIDB4NTE1YywgMHg3MThjLCAweDcwODQsIDB4YTEwYSwgMHgwYTA0LCAweDUxNWMsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDE5MDQsIDB4NTE1YywgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMiwgMHgxMTUwLCAweDA4MGMsIDB4NTQyNiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwKLQkweDAwMDEsIDB4MjA5MSwgMHg0MDgwLCAweDA4MDQsIDB4NTE1YywgMHgwODBjLCAweDU0NTAsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwgMHgwODA0LCAweDUxNWMsIDB4MDAwNiwKLQkweDY4NGMsIDB4MDAwNiwgMHg2ODM3LCAweDAxMDMsIDB4MjBhOSwgMHgwMDFjLCAweGFkODAsIDB4MDAxMSwKLQkweDIwYTAsIDB4MjAwMSwgMHgwMDAwLCAweDQwYTQsIDB4MDAwZSwgMHhhMDg0LCAweDAwZmYsIDB4Njg0ZSwKLQkweDAwMGUsIDB4Njg0YSwgMHg2OTUyLCAweDAwMDUsIDB4MjA3MSwgMHhhZTEzLCAweDcwMDQsIDB4MDAwMiwKLQkweDUyMDIsIDB4NTIxMywgMHg1NDExLCAweDU0MTIsIDB4NTQxZiwgMHg1NDI1LCAweDUyMDMsIDB4NTQwMiwKLQkweDUzOTgsIDB4NTNlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4NTIxMiwKLQkweDIwMDksIDB4MDAwZCwgMHg3MDMwLCAweDIwMGEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMDcsIDB4MDAwMSwKLQkweDcwMGIsIDB4MDAwMCwgMHgwMTJlLCAweDIwNjksIDB4YWZkYSwgMHg2ODNjLCAweGEwMDUsIDB4MDNmOCwKLQkweDExZjAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgwMDAwLCAweDY5MzQsIDB4MjAwMSwKLQkweGFlMWYsIDB4MjAwNCwgMHhhMTBhLCAweDAxNzAsIDB4MGUwNCwgMHg1MjM2LCAweDIwNjksIDB4MDAwMCwKLQkweDY4MTgsIDB4ZDA4NCwgMHgxMTU4LCAweDIwMDksIDB4ODA0MCwgMHg2OTIyLCAweDY4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgyMDY5LCAweGFmZGEsIDB4NjgzZiwgMHhmZmZmLCAweDAxMmUsIDB4MjA2OSwKLQkweGFkMDAsIDB4Njg0NCwgMHg2OTY0LCAweGExMDIsIDB4MjA2OSwgMHhhZjM0LCAweDY4OGEsIDB4Njk4NCwKLQkweDcwMWMsIDB4YTA2ZCwgMHgwMTIwLCAweDgxZmYsIDB4MDkwNCwgMHg1MjhjLCAweDAwYTAsIDB4ODFmZiwKLQkweDA5MDQsIDB4NTM1MiwgMHgyMDcxLCAweGFmMzQsIDB4NzE4NCwgMHg3MDg4LCAweGExMGEsIDB4MTI1OCwKLQkweDcxOTAsIDB4MjA3MSwgMHhhZmRhLCAweDcwMzgsIDB4YTAwNSwgMHgwMTI4LCAweDFiMDQsIDB4NTM1MiwKLQkweDcxM2EsIDB4MDgwNCwgMHg1MzUyLCAweDIwNzEsIDB4YWYzNCwgMHg3MThjLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzA4NCwgMHhhMTBhLCAweDBhMDQsIDB4NTM2ZCwgMHgwZTA0LCAweDUzMGUsIDB4MjA3MSwKLQkweDAwMDAsIDB4NzAxOCwgMHhkMDg0LCAweDE5MDQsIDB4NTMwZSwgMHgyMDAxLCAweGZmZmYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAzYSwgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MTE1MCwKLQkweDA4MGMsIDB4NTQyNiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwKLQkweDA4MDQsIDB4NTMwZSwgMHgwODBjLCAweDU0NTAsIDB4MjA3MSwgMHgwMDAwLCAweDcwMWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgwODA0LCAweDUzMGUsIDB4MjA3MSwgMHhhZjM0LCAweDcwMDAsIDB4YTAwNSwKLQkweDA5MDQsIDB4NTMzNCwgMHg2OTM0LCAweGExODYsIDB4MDEwMywgMHgxOTA0LCAweDUzMTEsIDB4Njg0YywKLQkweGQwYmMsIDB4MTkwNCwgMHg1MzM0LCAweDY5NDgsIDB4Njg0NCwgMHhhMTA1LCAweDE5MDQsIDB4NTMyOSwKLQkweDIwMDksIDB4ODAyMCwgMHgyMDcxLCAweGFmMzQsIDB4NzAwMCwgMHgwMDAyLCAweDUzMzQsIDB4NTJmNCwKLQkweDUyY2MsIDB4NTJkZSwgMHg1MmFiLCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDIwOTksIDB4YWQ3NSwKLQkweDIwYTEsIDB4YWY4NSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhMywgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDIwNzEsIDB4YWY3YywgMHhhZDgwLCAweDAwMGYsIDB4NzAwZSwgMHg3MDEzLCAweDAwMDIsIDB4NzAwNywKLQkweDAwMDIsIDB4NzAwYiwgMHgwMDAwLCAweDJlMTAsIDB4MDgwYywgMHgxNjI0LCAweDIwNzEsIDB4YWUxMywKLQkweDcwMDcsIDB4MDAwOSwgMHgwODA0LCAweDUzNTIsIDB4NzA4NCwgMHg4MDA4LCAweGEwOTIsIDB4MDAxZSwKLQkweDFhMDQsIDB4NTM1MiwgMHhhZTkwLCAweDAwMDMsIDB4YTIxMCwgMHg2ODNjLCAweDIwMTIsIDB4NzE4NiwKLQkweDIwNzEsIDB4YWUxMywgMHgwODBjLCAweDU0YTcsIDB4MDgwNCwgMHg1MzUyLCAweDcwODQsIDB4ODAwOCwKLQkweGEwOTIsIDB4MDAwZiwgMHgxYTA0LCAweDUzNTIsIDB4YWU5MCwgMHgwMDAzLCAweDgwMDMsIDB4YTIxMCwKLQkweDY4M2MsIDB4MjAxMiwgMHg4MjEwLCAweDY4NDAsIDB4MjAxMiwgMHg3MTg2LCAweDIwNzEsIDB4YWUxMywKLQkweDA4MGMsIDB4NTRhNywgMHgwODA0LCAweDUzNTIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwKLQkweDUzMGUsIDB4MjA3MSwgMHgwMDAwLCAweDcwMTgsIDB4ZDA4NCwgMHgxMTgwLCAweDcxMjIsIDB4NjgzYywKLQkweDcwMjYsIDB4Njg0MCwgMHg3MDJhLCAweDcwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4MDEyZSwKLQkweDIwNzEsIDB4YWUxMywgMHgwODBjLCAweDU0YTcsIDB4MDgwNCwgMHg1MzUyLCAweDAxMmUsIDB4MDgwNCwKLQkweDUzNTIsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxNywgMHgwMTMwLCAweGExODYsIDB4MDAxZSwKLQkweDAxMTgsIDB4YTE4ZSwgMHgwMDFmLCAweDExYzAsIDB4Njg0YywgMHhkMGNjLCAweDAxYTgsIDB4Njg1MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDEsIDB4MTE3OCwgMHgyMDA5LCAweDgwMjEsIDB4MDgwNCwKLQkweDUyYTIsIDB4Njg0NCwgMHhhMDg2LCAweDAxMDAsIDB4MTEzOCwgMHg2ODY4LCAweGEwMDUsIDB4MTEyMCwKLQkweDIwMDksIDB4ODAyMCwgMHgwODA0LCAweDUyYTIsIDB4MjA3MSwgMHhhZTEzLCAweDA4MGMsIDB4NTRiOSwKLQkweDAxYzgsIDB4MjA3MSwgMHhhZTEzLCAweDcwMGYsIDB4MDAwMSwgMHg2OTM0LCAweGExODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwMywgMHgxMTMwLCAweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweDgxMDEsIDB4MDEwOCwKLQkweDcxMGUsIDB4NzAwNywgMHgwMDAzLCAweDA4MGMsIDB4NTRkMiwgMHg3MDUwLCAweGEwODYsIDB4MDEwMCwKLQkweDA5MDQsIDB4NTQxMiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFlMTMsIDB4NzAwOCwKLQkweGEwODYsIDB4MDAwMSwgMHgxMTgwLCAweDBlMDQsIDB4NTM2YiwgMHgyMDA5LCAweDAwMGQsIDB4NzAzMCwKLQkweDIwMGEsIDB4MjA5MSwgMHg0MDgwLCAweDcwMGIsIDB4MDAwMCwgMHg3MDA0LCAweGEwODYsIDB4MDAwNiwKLQkweDExMTAsIDB4NzAwNywgMHgwMDAxLCAweDAxMmUsIDB4MDAwNSwgMHgyMDcxLCAweGFlMTMsIDB4MDgwYywKLQkweDU0YjksIDB4MDUxOCwgMHgyMDcxLCAweGFmMzQsIDB4NzA4NCwgMHg3MDBhLCAweDIwYTksIDB4MDAyMCwKLQkweDIwOTksIDB4YWYzNSwgMHgyMGExLCAweGFmNWMsIDB4NTNhMywgMHg3MDg3LCAweDAwMDAsIDB4MjA3MSwKLQkweGFlMTMsIDB4MjA2OSwgMHhhZjdjLCAweDcwNmMsIDB4NjgyNiwgMHg3MDcwLCAweDY4MmEsIDB4NzA3NCwKLQkweDY4MmUsIDB4NzA3OCwgMHg2ODMyLCAweDJkMTAsIDB4MDgwYywgMHgxNjI0LCAweDcwMDcsIDB4MDAwOCwKLQkweDIwMDEsIDB4ZmZmZiwgMHgyMDcxLCAweGFmZGEsIDB4NzAzYSwgMHgwMTJlLCAweDA4MDQsIDB4NTM1MiwKLQkweDIwNjksIDB4YWY3YywgMHg2ODA4LCAweGEwOGUsIDB4MDAwMCwgMHgwOTA0LCAweDUzZWQsIDB4YTA4ZSwKLQkweDAyMDAsIDB4MDkwNCwgMHg1M2ViLCAweGEwOGUsIDB4MDEwMCwgMHgxOTA0LCAweDUzZWQsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDUzZTksIDB4MjA2OSwgMHgwMDAwLCAweDY4MTgsIDB4ZDA4NCwKLQkweDE1YzAsIDB4NzAyYywgMHg3MTMwLCAweDgxMDgsIDB4YTEwMiwgMHgwMjMwLCAweGEwMGUsIDB4NzAzNCwKLQkweDcwNmUsIDB4NzAzOCwgMHg3MDcyLCAweDAwNDgsIDB4NzA2YywgMHhhMDgwLCAweDAwNDAsIDB4NzA2ZSwKLQkweDEyMjAsIDB4NzA3MCwgMHhhMDgxLCAweDAwMDAsIDB4NzA3MiwgMHg3MTMyLCAweDY5MzYsIDB4NzAwYiwKLQkweDAwMDAsIDB4MjAwMSwgMHhhZjU5LCAweDIwMDQsIDB4YTAwNSwgMHgxMTkwLCAweDY5MzQsIDB4MjA2OSwKLQkweGFmMzQsIDB4Njg5YywgMHg2OTllLCAweDIwNjksIDB4YWZkYSwgMHhhMTAyLCAweDExMTgsIDB4NjgzYywKLQkweGEwMDUsIDB4MTM2OCwgMHgyMDAxLCAweGFmNWEsIDB4MjAwYywgMHg4MTBkLCAweDY5M2UsIDB4MDAzOCwKLQkweDIwMDksIDB4ODA0MCwgMHg2OTIyLCAweDY4MWIsIDB4MDAwMSwgMHgyMDkxLCAweDQwODAsIDB4NzAwNywKLQkweDAwMDEsIDB4MDEyZSwgMHgwMDEwLCAweDcwMDcsIDB4MDAwNSwgMHgwMDA1LCAweDIwMDEsIDB4YWY3ZSwKLQkweDIwMDQsIDB4YTA4ZSwgMHgwMTAwLCAweDExMjgsIDB4NzAwNywgMHgwMDAxLCAweDA4MGMsIDB4NTRhNywKLQkweDAwMDUsIDB4YTA4ZSwgMHgwMDAwLCAweDBkZTAsIDB4YTA4ZSwgMHgwMjAwLCAweDFkYzgsIDB4NzAwNywKLQkweDAwMDUsIDB4MDAwNSwgMHg3MDFjLCAweGEwNmQsIDB4MDE1OCwgMHgwODBjLCAweDU0YjksIDB4MDE0MCwKLQkweDcwMDcsIDB4MDAwMywgMHgwODBjLCAweDU0ZDIsIDB4NzA1MCwgMHhhMDg2LCAweDAxMDAsIDB4MDExMCwKLQkweDAwMDUsIDB4MDAwNSwgMHg3MDUwLCAweGEwOWUsIDB4MDEwMCwgMHgxMTE4LCAweDcwMDcsIDB4MDAwNCwKLQkweDAwMzAsIDB4YTA4NiwgMHgwMjAwLCAweDExMTAsIDB4NzAwNywgMHgwMDA1LCAweDAwMDUsIDB4MDgwYywKLQkweDU0NzUsIDB4NzAwNiwgMHgwODBjLCAweDU0YTcsIDB4MDAwNSwgMHgwMDA1LCAweDAwZTYsIDB4MDE1NiwKLQkweDIwNzEsIDB4YWYzNCwgMHg3MTg0LCAweDgxZmYsIDB4MDUwMCwgMHhhMDA2LCAweDcwODYsIDB4YWU4MCwKLQkweDAwMDMsIDB4MjA3MSwgMHgwMDAwLCAweDIxYTgsIDB4MjAxNCwgMHg3MjI2LCAweDgwMDAsIDB4MGYwNCwKLQkweDU0NGEsIDB4MjAxNCwgMHg3MjJhLCAweDgwMDAsIDB4MGYwNCwgMHg1NDRhLCAweDIwMTQsIDB4NzIyZSwKLQkweDgwMDAsIDB4MGYwNCwgMHg1NDRhLCAweDIwMTQsIDB4NzIzYSwgMHg4MDAwLCAweDBmMDQsIDB4NTQ0YSwKLQkweDIwMTQsIDB4NzIzZSwgMHhhMTgwLCAweDgwMzAsIDB4NzAyMiwgMHgwMTVlLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDE1NiwgMHgyMDcxLCAweGFmMzQsIDB4NzE4NCwgMHg4MWZmLCAweDAxZDgsIDB4YTAwNiwKLQkweDcwODYsIDB4YWU4MCwgMHgwMDAzLCAweDIwNzEsIDB4MDAwMCwgMHgyMWE4LCAweDIwMTQsIDB4NzIyNiwKLQkweDgwMDAsIDB4MjAxNCwgMHg3MjJhLCAweDgwMDAsIDB4MGYwNCwgMHg1NDZjLCAweDIwMTQsIDB4NzIzYSwKLQkweDgwMDAsIDB4MjAxNCwgMHg3MjNlLCAweDAwMTgsIDB4MjAwMSwgMHg4MDIwLCAweDAwMTAsIDB4MjAwMSwKLQkweDgwNDIsIDB4NzAyMiwgMHgwMTVlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDJjLCAweDcxMzAsIDB4ODEwOCwKLQkweGExMDIsIDB4MDIzMCwgMHhhMDBlLCAweDcwMzQsIDB4NzA2ZSwgMHg3MDM4LCAweDcwNzIsIDB4MDA0OCwKLQkweDcwNmMsIDB4YTA4MCwgMHgwMDQwLCAweDcwNmUsIDB4MTIyMCwgMHg3MDcwLCAweGEwODEsIDB4MDAwMCwKLQkweDcwNzIsIDB4NzEzMiwgMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwgMHgxMTgwLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MGUwNCwgMHg1NGExLCAweDIwMDEsIDB4MDAwZCwgMHgyMTAyLCAweDIwOTEsIDB4NDA4MCwKLQkweDIwMDEsIDB4MDAwMSwgMHg3MDBiLCAweDAwMDAsIDB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAwNywKLQkweDAwMDUsIDB4MjAwMSwgMHgwMDA2LCAweDcwMGIsIDB4MDAwMSwgMHgwMTJlLCAweDAwMDUsIDB4NzAxYywKLQkweGEwNmQsIDB4MDE3MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwKLQkweDJkMDQsIDB4NzAxZSwgMHhhMDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDA4MGMsIDB4MTVmMCwKLQkweDAwMDUsIDB4MjAxOSwgMHgwMDBkLCAweDIzMDQsIDB4MjMwYywgMHhhMTBlLCAweDAxMzAsIDB4MjMwNCwKLQkweDIzMGMsIDB4YTEwZSwgMHgwMTEwLCAweGEwMDYsIDB4MDA2MCwgMHg3MzJjLCAweDgzMTksIDB4NzEzMCwKLQkweGExMDIsIDB4MTExOCwgMHgyMzAwLCAweGEwMDUsIDB4MDAyMCwgMHgwMjEwLCAweGEzMDIsIDB4MDAwOCwKLQkweDgwMDIsIDB4MDAwNSwgMHgyZDAwLCAweDcwMjYsIDB4YTA4MCwgMHgwMDBkLCAweDcwNTYsIDB4NzA1MywKLQkweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhZmVjLCAweDIxMDQsIDB4YzA4ZCwKLQkweDIwMGEsIDB4MDEyZSwgMHgwODBjLCAweDE2M2MsIDB4MDAwNSwgMHg3MDg4LCAweGEwOGEsIDB4MDAyOSwKLQkweDEyMjAsIDB4YTA4MiwgMHgwMDFkLCAweDAwMzMsIDB4MDAxMCwgMHgwODBjLCAweDE0ZjYsIDB4NjAyNywKLQkweDFlMDAsIDB4MDAwNSwgMHg1NWMxLCAweDU1NWIsIDB4NTU3MSwgMHg1NTk1LCAweDU1YjQsIDB4NTVlNiwKLQkweDU1ZjgsIDB4NTU3MSwgMHg1NWQyLCAweDU0ZmYsIDB4NTUyZCwgMHg1NGZlLCAweDAwMDUsIDB4MDBkNiwKLQkweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweGEwMDUsIDB4MTE4MCwgMHg2ODA4LCAweGEwMDUsIDB4MTUxOCwKLQkweDcwOGIsIDB4MDAyOCwgMHgyMDY5LCAweGFmYWMsIDB4MmQwNCwgMHg3MDAyLCAweDA4MGMsIDB4NTg0ZCwKLQkweDYwMjgsIDB4YTA4NSwgMHgwNjAwLCAweDYwMmEsIDB4MDBiMCwgMHg3MDhiLCAweDAwMjgsIDB4MjA2OSwKLQkweGFmYWMsIDB4MmQwNCwgMHg3MDAyLCAweDYwMjgsIDB4YTA4NSwgMHgwNjAwLCAweDYwMmEsIDB4MDBlNiwKLQkweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDIwNzEsIDB4YWZmZCwgMHgwODBjLCAweDFkMjIsIDB4MDA1ZSwKLQkweDAwNGUsIDB4MDAzZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwKLQkweDY4MDQsIDB4YTAwNSwgMHgxMTgwLCAweDY4MDgsIDB4YTAwNSwgMHgxNTE4LCAweDcwOGIsIDB4MDAyOCwKLQkweDIwNjksIDB4YWZhYywgMHgyZDA0LCAweDcwMDIsIDB4MDgwYywgMHg1OGRhLCAweDYwMjgsIDB4YTA4NSwKLQkweDA2MDAsIDB4NjAyYSwgMHgwMGIwLCAweDcwOGIsIDB4MDAyOCwgMHgyMDY5LCAweGFmYWMsIDB4MmQwNCwKLQkweDcwMDIsIDB4NjAyOCwgMHhhMDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGU2LCAweDAwMzYsIDB4MDA0NiwKLQkweDAwNTYsIDB4MjA3MSwgMHhhZmZkLCAweDA4MGMsIDB4MWQyMiwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwKLQkweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDY4MDMsIDB4MDA5MCwgMHg2MTI0LCAweGQxZTQsIDB4MTE4MCwKLQkweDA4MGMsIDB4NTY2MywgMHhkMWQ0LCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxY2MsIDB4MDE0MCwKLQkweDcwOGIsIDB4MDAyMCwgMHgwMDI4LCAweDcwOGIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOGIsIDB4MDAxZiwKLQkweDAwMDUsIDB4NjgwMywgMHgwMDg4LCAweDYxMjQsIDB4ZDFjYywgMHgxMWM4LCAweGQxZGMsIDB4MTFhMCwKLQkweGQxZTQsIDB4MTE3OCwgMHhhMTg0LCAweDFlMDAsIDB4MTFiOCwgMHg2MGUzLCAweDAwMDEsIDB4NjAwYywKLQkweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDU3N2YsIDB4NjgwMywgMHgwMDgwLCAweDcwOGIsIDB4MDAyOCwKLQkweDAwNTgsIDB4NzA4YiwgMHgwMDFlLCAweDAwNDAsIDB4NzA4YiwgMHgwMDFkLCAweDAwMjgsIDB4NzA4YiwKLQkweDAwMjAsIDB4MDAxMCwgMHg3MDhiLCAweDAwMWYsIDB4MDAwNSwgMHg2MGUzLCAweDAwMDEsIDB4NjAwYywKLQkweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDU3N2YsIDB4NjgwMywgMHgwMDgwLCAweDYxMjQsIDB4ZDFkNCwKLQkweDExODAsIDB4ZDFkYywgMHgxMTU4LCAweGQxZTQsIDB4MTEzMCwgMHhhMTg0LCAweDFlMDAsIDB4MTE1OCwKLQkweDcwOGIsIDB4MDAyOCwgMHgwMDQwLCAweDcwOGIsIDB4MDAxZSwgMHgwMDI4LCAweDcwOGIsIDB4MDAxZCwKLQkweDAwMTAsIDB4NzA4YiwgMHgwMDFmLCAweDAwMDUsIDB4NjgwMywgMHgwMGEwLCAweDYxMjQsIDB4ZDFkYywKLQkweDExMjgsIDB4ZDFlNCwgMHgwMTI4LCAweDcwOGIsIDB4MDAxZSwgMHgwMDEwLCAweDcwOGIsIDB4MDAxZCwKLQkweDAwMDUsIDB4MDgwYywgMHg1NjhkLCAweDYxMjQsIDB4ZDFkYywgMHgxMTU4LCAweDA4MGMsIDB4NTY2MywKLQkweGQxZDQsIDB4MTEyOCwgMHhkMWU0LCAweDAxMjgsIDB4NzA4YiwgMHgwMDFlLCAweDAwMTAsIDB4NzA4YiwKLQkweDAwMWYsIDB4MDAwNSwgMHg2ODAzLCAweDAwYTAsIDB4NjEyNCwgMHhkMWQ0LCAweDExNjAsIDB4ZDFjYywKLQkweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE0MCwgMHg3MDhiLCAweDAwMWUsIDB4MDAyOCwKLQkweDcwOGIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOGIsIDB4MDAyMSwgMHgwMDA1LCAweDA4MGMsIDB4NTY4ZCwKLQkweDYxMjQsIDB4ZDFkNCwgMHgxMTUwLCAweGQxZGMsIDB4MTEyOCwgMHhkMWU0LCAweDAxNDAsIDB4NzA4YiwKLQkweDAwMWUsIDB4MDAyOCwgMHg3MDhiLCAweDAwMWQsIDB4MDAxMCwgMHg3MDhiLCAweDAwMWYsIDB4MDAwNSwKLQkweDY4MDMsIDB4MDA5MCwgMHg2MTI0LCAweGQxZDQsIDB4MTE3OCwgMHhkMWNjLCAweDExNTAsIDB4ZDFkYywKLQkweDExMjgsIDB4ZDFlNCwgMHgwMTU4LCAweDcwOGIsIDB4MDAxZSwgMHgwMDQwLCAweDcwOGIsIDB4MDAxZCwKLQkweDAwMjgsIDB4NzA4YiwgMHgwMDIwLCAweDAwMTAsIDB4NzA4YiwgMHgwMDFmLCAweDAwMDUsIDB4MDAxNiwKLQkweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwKLQkweDIwNzEsIDB4YWQwMCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1NzRmLCAweDExZTgsIDB4MjAwMSwKLQkweGFkMGMsIDB4MjAwYywgMHhkMWI0LCAweDAxYzAsIDB4YzFiNCwgMHgyMTAyLCAweDYwMjcsIDB4MDIwMCwKLQkweGUwMDAsIDB4ZTAwMCwgMHg2MDI0LCAweGQwY2MsIDB4MDE1OCwgMHg2ODAzLCAweDAwYTAsIDB4MjAwMSwKLQkweGFmOWUsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4MDQyOCwKLQkweDYwMjgsIDB4YzBjZCwgMHg2MDJhLCAweDA0MDgsIDB4MDgwYywgMHg1NzZiLCAweDAxNTAsIDB4MDgwYywKLQkweDU3NjEsIDB4MTEzOCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjFlLCAweDA4MGMsIDB4NTcyNiwKLQkweDAwYTAsIDB4MDgwYywgMHg1NjhhLCAweDAxNzgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjYxZSwKLQkweDcwODgsIDB4YTA4NiwgMHgwMDFlLCAweDAxMjAsIDB4NzA4OCwgMHhhMDg2LCAweDAwMjIsIDB4MTExOCwKLQkweDcwOGIsIDB4MDAyNSwgMHgwMDEwLCAweDcwOGIsIDB4MDAyMSwgMHgwMTJlLCAweDAwZWUsIDB4MDBkZSwKLQkweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgyMDA5LCAweDAwNjQsIDB4MjAxMSwKLQkweDU2NmUsIDB4MDgwYywgMHg2NTAxLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwKLQkweDAwMTYsIDB4MDgwYywgMHg3ODM0LCAweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDU2MGYsIDB4MDAxZSwKLQkweDAwZmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwNCwKLQkweDAxNDAsIDB4MjAwMSwgMHhhZjlkLCAweDIwMDMsIDB4YWFhYSwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDAsIDB4MDAwNSwgMHg2MDIwLCAweGQwOWMsIDB4MDAwNSwgMHg2ODAzLCAweDAwYzAsIDB4MDE1NiwKLQkweDIwYTksIDB4MDAyZCwgMHgxZDA0LCAweDU2OTIsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NTY5MiwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwKLQkweDAxNDAsIDB4MjA3MSwgMHhhZDAwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDBjLCAweGExODYsIDB4MDAwMCwKLQkweDAxNTgsIDB4YTE4NiwgMHgwMDAxLCAweDAxNTgsIDB4YTE4NiwgMHgwMDAyLCAweDAxNTgsIDB4YTE4NiwKLQkweDAwMDMsIDB4MDE1OCwgMHgwODA0LCAweDU3MTQsIDB4NzA4YiwgMHgwMDIyLCAweDAwNDAsIDB4NzA4YiwKLQkweDAwMjEsIDB4MDAyOCwgMHg3MDhiLCAweDAwMjMsIDB4MDAyMCwgMHg3MDhiLCAweDAwMjQsIDB4NjA0MywKLQkweDAwMDAsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywKLQkweDI2Y2IsIDB4MDAyNiwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwKLQkweDA4MGMsIDB4N2FlOSwgMHgwMDJlLCAweDcwMDAsIDB4YTA4ZSwgMHgwMDA0LCAweDAxMTgsIDB4NjAyYiwKLQkweDAwMjgsIDB4MDAxMCwgMHg2MDJiLCAweDAwMjAsIDB4MDE1NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwYTksIDB4MDAwNSwgMHg2MDI0LCAweGQwYWMsIDB4MDExOCwgMHgwMTJlLCAweDAxNWUsIDB4MDRkMCwKLQkweDY4MDAsIDB4YTA4NCwgMHgwMGEwLCAweGMwYmQsIDB4NjgwMiwgMHg2OTA0LCAweGQxZDQsIDB4MTEzMCwKLQkweDY4MDMsIDB4MDEwMCwgMHgxZjA0LCAweDU2ZTIsIDB4MDgwYywgMHg1N2EwLCAweDAxMmUsIDB4MDE1ZSwKLQkweDA4MGMsIDB4NTc2MSwgMHgwMWE4LCAweDYwNDQsIDB4YTAwNSwgMHgwMTY4LCAweDYwNTAsIDB4MDAwNiwKLQkweGEwODUsIDB4MDAyMCwgMHg2MDUyLCAweDA4MGMsIDB4NTdhMCwgMHhhMDA2LCAweDgwMDEsIDB4MWRmMCwKLQkweDAwMGUsIDB4NjA1MiwgMHgwMDI4LCAweDY4MDQsIDB4ZDBkNCwgMHgxMTEwLCAweDA4MGMsIDB4NTdhMCwKLQkweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDQsIDB4MDgwYywgMHg1NGU1LCAweDA4MGMsIDB4NTc2MSwKLQkweDAxNDgsIDB4NjgwNCwgMHhkMGQ0LCAweDExMzAsIDB4ZDBkYywgMHgxMTAwLCAweDIwMDEsIDB4YWY5ZSwKLQkweDIwMDMsIDB4MDAwMCwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweGFkMDAsIDB4MjAwMSwKLQkweGFmOWQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4YWY4ZSwgMHgyMDAzLCAweDAwMDAsIDB4NzA4YiwKLQkweDAwMDAsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywKLQkweDI2Y2IsIDB4NjgwMywgMHgwMDAwLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4NjAyNywKLQkweGZmZmYsIDB4NjAyYiwgMHgxODJmLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWY5ZCwgMHgyMDA0LCAweGEwODYsIDB4YWFhYSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwKLQkweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGEwODQsIDB4MDAzMCwgMHhhMDg2LCAweDAwMDAsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweGFkNzEsIDB4MjAwNCwgMHhhMDg0LCAweDAwMzAsIDB4YTA4NiwKLQkweDAwMzAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4YTA4NCwKLQkweDAwMzAsIDB4YTA4NiwgMHgwMDEwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4YWQ3MSwKLQkweDIwMDQsIDB4YTA4NCwgMHgwMDMwLCAweGEwODYsIDB4MDAyMCwgMHgwMDBlLCAweDAwMDUsIDB4MjAwMSwKLQkweGFkMGMsIDB4MjAwNCwgMHhkMGE0LCAweDAxNzAsIDB4MDgwYywgMHgyNmViLCAweDAwMzYsIDB4MDAxNiwKLQkweDIwMDksIDB4MDAwMCwgMHgyMDE5LCAweDAwMjgsIDB4MDgwYywgMHgyYWFjLCAweDAwMWUsIDB4MDAzZSwKLQkweGEwMDYsIDB4MDAwOSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZDBjLCAweDJlMDQsIDB4MDExOCwKLQkweGEwODUsIDB4MDAxMCwgMHgwMDEwLCAweGEwODQsIDB4ZmZlZiwgMHgyMDcyLCAweDAwZWUsIDB4MDAwNSwKLQkweDYwNTAsIDB4MDAwNiwgMHg2MGYwLCAweDAwMDYsIDB4NjBlYywgMHgwMDA2LCAweDYwMGMsIDB4MDAwNiwKLQkweDYwMDQsIDB4MDAwNiwgMHg2MDI4LCAweDAwMDYsIDB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwKLQkweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDAwZSwgMHg2MDJhLCAweDAwMGUsIDB4NjAwNiwKLQkweDAwMGUsIDB4NjAwZSwgMHgwMDBlLCAweDYwZWUsIDB4MDAwZSwgMHg2MGYyLCAweDYwZTMsIDB4MDAwMCwKLQkweDY4ODcsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNmNiLCAweDY4MDAsIDB4YTA4NCwKLQkweDAwYTAsIDB4YzBiZCwgMHg2ODAyLCAweDY4MDMsIDB4MDBhMCwgMHgwMDBlLCAweDYwNTIsIDB4NjA1MCwKLQkweDAwMDUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwKLQkweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHhhZDAwLCAweDYwMjAsIDB4YTA4NCwKLQkweDAwODAsIDB4MDEzOCwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywgMHhjMWJkLCAweDIxMDIsIDB4MDgwNCwKLQkweDU4NDUsIDB4MjAwMSwgMHhhZDBjLCAweDIwMGMsIDB4YzFiYywgMHgyMTAyLCAweDYwMjgsIDB4YTA4NCwKLQkweGUxZmYsIDB4NjAyYSwgMHg2MDI3LCAweDAyMDAsIDB4NjgwMywgMHgwMDkwLCAweDIwYTksIDB4MDM4NCwKLQkweDYwMjQsIDB4ZDBjYywgMHgxNTE4LCAweDFkMDQsIDB4NTdmOCwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDU3ZjgsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywKLQkweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywKLQkweDdhNjQsIDB4NjgwMywgMHgwMGEwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwgMHgwNDM4LCAweDYwZTMsIDB4MDAwMCwKLQkweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjZjYiwgMHg2MGUyLCAweDY4MDMsIDB4MDA4MCwKLQkweDIwYTksIDB4MDM4NCwgMHg2MDI3LCAweDFlMDAsIDB4MjAwOSwgMHgxZTAwLCAweGUwMDAsIDB4NjAyNCwKLQkweGExMGMsIDB4MDEzOCwgMHgxZDA0LCAweDU4MmEsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NTgyYSwKLQkweDA4NDAsIDB4NjAyOCwgMHhhMDg1LCAweDFlMDAsIDB4NjAyYSwgMHg3MGEwLCAweGEwMDUsIDB4MTExOCwKLQkweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsIDB4YTAwNiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwKLQkweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwKLQkweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDIwNjksIDB4MDE0MCwgMHg2MDIwLCAweGEwODQsIDB4MDBjMCwgMHgwMTIwLCAweDY4ODQsIDB4YTAwNSwKLQkweDE5MDQsIDB4NThhMSwgMHg2ODAzLCAweDAwODgsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMCwKLQkweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDI2Y2IsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4YTAwNSwKLQkweDExMTgsIDB4NjgwOCwgMHhhMDA1LCAweDAxYzAsIDB4NjAyOCwgMHhhMDg0LCAweGZiZmYsIDB4NjAyYSwKLQkweDYwMjcsIDB4MDQwMCwgMHgyMDY5LCAweGFmYWMsIDB4NzAwMCwgMHgyMDZhLCAweDcwOGIsIDB4MDAyNiwKLQkweDcwMDMsIDB4MDAwMSwgMHgyMGE5LCAweDAwMDIsIDB4MWQwNCwgMHg1ODg0LCAweDIwOTEsIDB4NjAwMCwKLQkweDFmMDQsIDB4NTg4NCwgMHgwODA0LCAweDU4ZDIsIDB4MjA2OSwgMHgwMTQwLCAweDIwYTksIDB4MDM4NCwKLQkweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsIDB4ZTAwMCwgMHg2MDI0LCAweGExMGMsIDB4MDUzMCwKLQkweGEwODQsIDB4MWEwMCwgMHgxNTE4LCAweDFkMDQsIDB4NTg5MCwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwKLQkweDU4OTAsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywKLQkweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywKLQkweDdhNjQsIDB4NjgwMywgMHgwMGEwLCAweDIwMDEsIDB4YWY5ZSwgMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwKLQkweGFkMDAsIDB4MjAwMywgMHgwMDAxLCAweGEwODUsIDB4MDAwMSwgMHgwMGEwLCAweDY4MDMsIDB4MDA4MCwKLQkweDIwNjksIDB4MDE0MCwgMHg2MGUzLCAweDAwMDAsIDB4NzBhMCwgMHhhMDA1LCAweDExMTgsIDB4Njg4NywKLQkweDAwMDEsIDB4MDAwOCwgMHg2ODg2LCAweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjZjYiwKLQkweDYwZTIsIDB4YTAwNiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwgMHg2MDIwLCAweGEwODQsIDB4MDBjMCwKLQkweDAxZjAsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4N2FkZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywKLQkweDdhZTksIDB4MDgwYywgMHg3OWUxLCAweDA4MGMsIDB4NjU4MSwgMHgyMDE5LCAweDAwMDAsIDB4MDgwYywKLQkweDdhNjQsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDMsIDB4MDBhMCwgMHgyMDAxLCAweGFmOWUsIDB4MjAwMywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDMsIDB4MDAwMSwgMHgwODA0LCAweDU5NzIsIDB4MjAwMSwKLQkweGFkMGMsIDB4MjAwYywgMHhkMWI0LCAweDExNTAsIDB4YzFiNSwgMHgyMTAyLCAweDA4MGMsIDB4NTY2MywKLQkweDIwNjksIDB4MDE0MCwgMHg2ODAzLCAweDAwODAsIDB4NjBlMywgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwKLQkweDY4MDQsIDB4YTAwNSwgMHgxMTE4LCAweDY4MDgsIDB4YTAwNSwgMHgwMWI4LCAweDYwMjgsIDB4YTA4NCwKLQkweGZkZmYsIDB4NjAyYSwgMHg2MDI3LCAweDAyMDAsIDB4MjA2OSwgMHhhZmFjLCAweDcwMDAsIDB4MjA2YSwKLQkweDcwOGIsIDB4MDAyNywgMHg3MDAzLCAweDAwMDEsIDB4MjBhOSwgMHgwMDAyLCAweDFkMDQsIDB4NTkyZSwKLQkweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDU5MmUsIDB4MDRlOCwgMHg2MDI3LCAweDFlMDAsIDB4MjAwOSwKLQkweDFlMDAsIDB4ZTAwMCwgMHg2MDI0LCAweGExMGMsIDB4MDFjOCwgMHhhMDg0LCAweDFjMDAsIDB4MTFiMCwKLQkweDFkMDQsIDB4NTkzNSwgMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDgwYywKLQkweDY0YTIsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwZTYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAxOCwgMHgwMGVlLCAweGEwMDUsIDB4MWQwMCwgMHgwMWUwLCAweDAwMjYsIDB4MjAxMSwKLQkweDU2NmUsIDB4MDgwYywgMHg2NTBkLCAweDAwMmUsIDB4MjA2OSwgMHgwMTQwLCAweDYwZTMsIDB4MDAwMCwKLQkweDcwYTAsIDB4YTAwNSwgMHgxMTE4LCAweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsIDB4MjAwMSwKLQkweGFmOGUsIDB4MjAwNCwgMHgwODBjLCAweDI2Y2IsIDB4NjBlMiwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywKLQkweGMxYjQsIDB4MjEwMiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MDBjNiwKLQkweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4YWQwMCwgMHg3MTMwLCAweGQxODQsIDB4MTE4MCwKLQkweDIwMTEsIDB4YWQ1MiwgMHgyMjE0LCAweGQyZWMsIDB4MDEzOCwgMHhjMThkLCAweDcxMzIsIDB4MjAxMSwKLQkweGFkNTIsIDB4MjIxNCwgMHhkMmFjLCAweDExMjAsIDB4NzAzMCwgMHhkMDhjLCAweDA5MDQsIDB4NTlkZiwKLQkweDcxMzAsIDB4YzE4NSwgMHg3MTMyLCAweDIwMTEsIDB4YWQ1MiwgMHgyMjBjLCAweGQxYTQsIDB4MDUzMCwKLQkweDAwMTYsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDEwMCwgMHgwODBjLCAweDY2M2YsIDB4MjAxOSwKLQkweDAwMGUsIDB4MDgwYywgMHhhOGViLCAweDAxNTYsIDB4MjBhOSwgMHgwMDdmLCAweDIwMDksIDB4MDAwMCwKLQkweGExODYsIDB4MDA3ZSwgMHgwMTcwLCAweGExODYsIDB4MDA4MCwgMHgwMTU4LCAweDA4MGMsIDB4NGNkYywKLQkweDExNDAsIDB4ODEyNywgMHhhMDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMDBlLCAweDA4MGMsIDB4YTk2YywKLQkweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDU5YjAsIDB4MDE1ZSwgMHgwMDFlLCAweGQxYWMsIDB4MTE0OCwKLQkweDAwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDJhYWMsIDB4MDAxZSwKLQkweDAwNzAsIDB4MDE1NiwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGNkYywKLQkweDExMTAsIDB4MDgwYywgMHg0OTNhLCAweDgxMDgsIDB4MWYwNCwgMHg1OWQ2LCAweDAxNWUsIDB4MjAxMSwKLQkweDAwMDMsIDB4MDgwYywgMHg3YWRmLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDdhZTksIDB4MDgwYywKLQkweDc5ZTEsIDB4MDgwYywgMHg2NTgxLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAwLCAweDA4MGMsIDB4N2E2NCwKLQkweDAwM2UsIDB4NjBlMywgMHgwMDAwLCAweDIwMDEsIDB4YWQwMCwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDU2OWEsIDB4MDBlZSwgMHgwMGNlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwKLQkweDAwMDUsIDB4MjA3MSwgMHhhZGUxLCAweDcwMDMsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAwZiwKLQkweDAwMDAsIDB4NzAyYiwgMHgwMDAxLCAweDcwNGYsIDB4MDAwMCwgMHg3MDUzLCAweDAwMDEsIDB4NzA1ZiwKLQkweDAwMjAsIDB4NzA2MywgMHgwMDQwLCAweDcwODMsIDB4MDAwMCwgMHg3MDhiLCAweDAwMDAsIDB4NzA4ZiwKLQkweDAwMDEsIDB4NzBiZiwgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkZTEsIDB4Njg0OCwKLQkweGEwMDUsIDB4MTEzMCwgMHg3MDI4LCAweGMwODUsIDB4NzAyYSwgMHhhMDg1LCAweDAwMDEsIDB4MDQyOCwKLQkweDZhNTAsIDB4NzIzNiwgMHg2YjU0LCAweDczM2EsIDB4Njg1OCwgMHg3MDNlLCAweDcwN2EsIDB4Njg1YywKLQkweDcwNDIsIDB4NzA3ZSwgMHg2ODQ4LCAweDcwMmUsIDB4Njg0MCwgMHg3MDMyLCAweDIwMDksIDB4MDAwYywKLQkweDIwMGEsIDB4ODAwNywgMHg4MDA2LCAweDgwMDYsIDB4YTA4YywgMHgwMDNmLCAweGEwODQsIDB4ZmZjMCwKLQkweGEyMTAsIDB4MjEwMCwgMHhhMzE5LCAweDcyNzIsIDB4NzM3NiwgMHg3MDI4LCAweGMwODQsIDB4NzAyYSwKLQkweDcwMDcsIDB4MDAwMSwgMHg3MDBmLCAweDAwMDAsIDB4YTAwNiwgMHgwMGVlLCAweDAwMDUsIDB4MmI3OCwKLQkweDIwNzEsIDB4YWRlMSwgMHg3MDA0LCAweDAwNDMsIDB4NzAwYywgMHgwMDAyLCAweDVhNWIsIDB4NWE1MiwKLQkweDVhNTIsIDB4NWE1MiwgMHg1YTUyLCAweDAwMDUsIDB4NWFiMSwgMHg1YWIyLCAweDVhZTQsIDB4NWFlNSwKLQkweDVhYWYsIDB4NWIzMywgMHg1YjM4LCAweDViNjksIDB4NWI2YSwgMHg1Yjg1LCAweDViODYsIDB4NWI4NywKLQkweDViODgsIDB4NWI4OSwgMHg1YjhhLCAweDVjNDAsIDB4NWM2NywgMHg3MDBjLCAweDAwMDIsIDB4NWE3NCwKLQkweDVhYWYsIDB4NWFhZiwgMHg1YWIwLCAweDVhYjAsIDB4NzgzMCwgMHg3OTMwLCAweGExMDYsIDB4MDEyMCwKLQkweDc4MzAsIDB4NzkzMCwgMHhhMTA2LCAweDE1MTAsIDB4NzAzMCwgMHhhMTBhLCAweDAxZjgsIDB4MTIxMCwKLQkweDcxMmMsIDB4YTEwYSwgMHhhMThhLCAweDAwMDIsIDB4MTJkMCwgMHgwODBjLCAweDE1YzAsIDB4MDFiMCwKLQkweDJkMDAsIDB4NzA1YSwgMHg3MDYzLCAweDAwNDAsIDB4MjAwMSwgMHgwMDAzLCAweDcwNTcsIDB4MDAwMCwKLQkweDAxMjYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhZmVjLCAweDIxMDQsIDB4YzA4NSwKLQkweDIwMGEsIDB4MDAwZSwgMHg3MDBlLCAweDAxMmUsIDB4MDgwYywgMHgxNjNjLCAweDAwMDUsIDB4MDgwYywKLQkweDE1YzAsIDB4MGRlMCwgMHgyZDAwLCAweDcwNWEsIDB4MDgwYywgMHgxNWMwLCAweDExMDgsIDB4MGMxMCwKLQkweDJkMDAsIDB4NzA4NiwgMHg3MDYzLCAweDAwODAsIDB4MjAwMSwgMHgwMDA0LCAweDA4ZjgsIDB4MDAwNSwKLQkweDAwMDUsIDB4MDAwNSwgMHg3MDBjLCAweDAwMDIsIDB4NWFiOSwgMHg1YWJjLCAweDVhY2EsIDB4NWFlMywKLQkweDVhZTMsIDB4MDgwYywgMHg1YTZkLCAweDAwMDUsIDB4MDEyNiwgMHg4MDAxLCAweDcwMGUsIDB4NzA1OCwKLQkweDAwMDYsIDB4MDgwYywgMHg1ZjkwLCAweDAxMjAsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NWE2ZCwKLQkweDAwZGUsIDB4MDA0OCwgMHgwMTI2LCAweDgwMDEsIDB4NzAwZSwgMHgwODBjLCAweDVmOTAsIDB4NzA1OCwKLQkweDIwNjgsIDB4NzA4NCwgMHg3MDVhLCAweDY4MDMsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhhLCAweDAwM2EsIDB4MTIxOCwgMHgwMGRiLCAweDAxMmUsIDB4MDAwNSwKLQkweDAxMmUsIDB4MDgwYywgMHg1YjhiLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwKLQkweGFkZTEsIDB4NzAwYywgMHgwMDAyLCAweDVhZjAsIDB4NWFmMCwgMHg1YWYwLCAweDVhZjIsIDB4NWFmNSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MDBmLCAweDAwMDEsIDB4MDAxMCwgMHg3MDBmLCAweDAwMDIsIDB4MDBlZSwKLQkweDAwMDUsIDB4NWI4YiwgMHg1YjhiLCAweDViYTcsIDB4NWI4YiwgMHg1ZDIyLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViYTcsIDB4NWQ2NCwgMHg1ZGE3LCAweDVkZjAsIDB4NWUwNCwKLQkweDViOGIsIDB4NWI4YiwgMHg1YmMzLCAweDViYTcsIDB4NWI4YiwgMHg1YjhiLCAweDVjMWQsIDB4NWVhZCwKLQkweDVlYzgsIDB4NWI4YiwgMHg1YmMzLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWMxMywKLQkweDVlYzgsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YmQ3LCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWI4YiwKLQkweDViOGIsIDB4NWI4YiwgMHg1YmVjLCAweDcwMjAsIDB4MjA2OCwgMHgwODBjLCAweDE1ZjAsIDB4MDAwNSwKLQkweDcwMGMsIDB4MDAwMiwgMHg1YjNmLCAweDViNDIsIDB4NWI1MCwgMHg1YjY4LCAweDViNjgsIDB4MDgwYywKLQkweDVhNmQsIDB4MDAwNSwgMHgwMTI2LCAweDgwMDEsIDB4NzAwZSwgMHg3MDU4LCAweDAwMDYsIDB4MDgwYywKLQkweDVmOTAsIDB4MDEyMCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1YTZkLCAweDAwZGUsIDB4MDA0OCwKLQkweDAxMjYsIDB4ODAwMSwgMHg3MDBlLCAweDA4MGMsIDB4NWY5MCwgMHg3MDU4LCAweDIwNjgsIDB4NzA4NCwKLQkweDcwNWEsIDB4NjgwMywgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHg2ODM0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwOGEsIDB4MDAxYSwgMHgxMjE4LCAweDAwM2IsIDB4MDEyZSwgMHgwMDA1LCAweDAxMmUsIDB4MDQxOSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDViOGIsIDB4NWJhNywgMHg1ZDBlLCAweDViOGIsIDB4NWJhNywKLQkweDViOGIsIDB4NWJhNywgMHg1YmE3LCAweDViOGIsIDB4NWJhNywgMHg1ZDBlLCAweDViYTcsIDB4NWJhNywKLQkweDViYTcsIDB4NWJhNywgMHg1YmE3LCAweDViOGIsIDB4NWJhNywgMHg1ZDBlLCAweDViOGIsIDB4NWI4YiwKLQkweDViYTcsIDB4NWI4YiwgMHg1YjhiLCAweDViOGIsIDB4NWJhNywgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwKLQkweGMwZDUsIDB4NjgzYSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDEyZSwKLQkweDAwMDUsIDB4NzAwNywgMHgwMDAxLCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweGMwZTUsIDB4NjgzYSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NTEwYywgMHgwMTJlLCAweDAwMDUsIDB4NzAwNywKLQkweDAwMDEsIDB4NjgzOCwgMHhhMDg0LCAweDAwZmYsIDB4YzBlZCwgMHg2ODNhLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MDAwNSwgMHg3MDA3LCAweDAwMDEsIDB4NjgzOCwKLQkweGEwODQsIDB4MDBmZiwgMHhjMGRkLCAweDY4M2EsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywKLQkweDUxMGMsIDB4MDEyZSwgMHgwMDA1LCAweDY4MzQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDk4OCwKLQkweDgwMDEsIDB4MTEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg1Y2QwLCAweDcwMDcsIDB4MDAwNiwKLQkweDcwMTIsIDB4MmQwMCwgMHg3MDE2LCAweDcwMWEsIDB4NzA0YiwgMHg1Y2QwLCAweDAwMDUsIDB4NjgzNCwKLQkweDgwMDcsIDB4YTA4NCwgMHgwMGZmLCAweDA5MDQsIDB4NWI5OSwgMHg4MDAxLCAweDExMjAsIDB4NzAwNywKLQkweDAwMDEsIDB4MDgwNCwgMHg1Y2VkLCAweDcwMDcsIDB4MDAwNiwgMHg3MDEyLCAweDJkMDAsIDB4NzAxNiwKLQkweDcwMWEsIDB4NzA0YiwgMHg1Y2VkLCAweDAwMDUsIDB4NjgzNCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwMSwgMHgxOTA0LCAweDViOTksIDB4NzAwNywgMHgwMDAxLCAweDIwMDksIDB4YWQzMCwKLQkweDIxMGMsIDB4ODFmZiwgMHgxMWE4LCAweDY4MzgsIDB4YTA4NCwgMHgwMGZmLCAweDY4M2EsIDB4Njg1MywKLQkweDAwMDAsIDB4MDgwYywgMHg0YWIxLCAweDExMDgsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDY4MzcsIDB4MDEzOSwgMHg2ODRhLCAweDY5NTIsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MGNhMCwKLQkweDIwMDEsIDB4MDAyOCwgMHgwYzkwLCAweDY4NGMsIDB4YTA4NCwgMHgwMGMwLCAweGEwODYsIDB4MDBjMCwKLQkweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsIDB4NWVlMCwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwKLQkweDIwYTksIDB4MDAwNCwgMHhhMDgwLCAweDAwMjQsIDB4MjA5OCwgMHgyMGExLCAweGFlMGMsIDB4NTNhMywKLQkweDY4NTgsIDB4NzAxMiwgMHhhMDgyLCAweDA0MDEsIDB4MWEwNCwgMHg1YmI1LCAweDZhODQsIDB4YTI4YSwKLQkweDAwMDIsIDB4MWEwNCwgMHg1YmI1LCAweDgyZmYsIDB4MTEzOCwgMHg2ODg4LCAweDY5OGMsIDB4YTEwNSwKLQkweDAxMTgsIDB4MjAwMSwgMHg1Y2EzLCAweDAwMTgsIDB4YTI4MCwgMHg1Yzk5LCAweDIwMDUsIDB4NzBjNiwKLQkweDcwMTAsIDB4YTAxNSwgMHgwOTA0LCAweDVjODUsIDB4MDgwYywgMHgxNWMwLCAweDExMTgsIDB4NzAwNywKLQkweDAwMGYsIDB4MDAwNSwgMHgyZDAwLCAweDcwMjIsIDB4NzBjNCwgMHgyMDYwLCAweDJjMDUsIDB4NjgzNiwKLQkweGUwMDQsIDB4YWQwMCwgMHg3MDk2LCAweGUwMDgsIDB4YTIwYSwgMHgxMjEwLCAweGEwMGUsIDB4MjIwMCwKLQkweDcxMTIsIDB4ZTIwYywgMHg4MDAzLCAweDgwMGIsIDB4YTI5NiwgMHgwMDA0LCAweDAxMDgsIDB4YTEwOCwKLQkweDcxOWEsIDB4ODEwYiwgMHg3MTllLCAweGFlOTAsIDB4MDAyMiwgMHgwODBjLCAweDE2MjQsIDB4NzA5MCwKLQkweGEwOGUsIDB4MDEwMCwgMHgwMTcwLCAweGEwODYsIDB4MDIwMCwgMHgwMTE4LCAweDcwMDcsIDB4MDAxMCwKLQkweDAwMDUsIDB4NzAyMCwgMHgyMDY4LCAweDA4MGMsIDB4MTVmMCwgMHg3MDE0LCAweDIwNjgsIDB4MDgwNCwKLQkweDViYjUsIDB4NzAyMCwgMHgyMDY4LCAweDcwMTgsIDB4NjgwMiwgMHg2ODA3LCAweDAwMDAsIDB4MmQwOCwKLQkweDIwNjgsIDB4NjkwNiwgMHg3MTFhLCAweDA4MDQsIDB4NWM0MCwgMHg3MDE0LCAweDIwNjgsIDB4NzAwNywKLQkweDAwMDEsIDB4Njg4NCwgMHhhMDA1LCAweDExMjgsIDB4Njg4OCwgMHg2OThjLCAweGExMDUsIDB4MDEwOCwKLQkweDAwYjEsIDB4NjgzNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDFlLCAweDA5MDQsIDB4NWVlMCwKLQkweDA0YjgsIDB4NWM5YiwgMHg1YzlmLCAweDAwMDIsIDB4MDAxMSwgMHgwMDA3LCAweDAwMDQsIDB4MDAwYSwKLQkweDAwMGYsIDB4MDAwNSwgMHgwMDA2LCAweDAwMGEsIDB4MDAxMSwgMHgwMDA1LCAweDAwMDQsIDB4MDBmNiwKLQkweDAwZTYsIDB4MDBjNiwgMHgwMDc2LCAweDAwNjYsIDB4NmY4OCwgMHg2ZThjLCAweDY4MDQsIDB4MjA2MCwKLQkweGFjZjAsIDB4MDAyMSwgMHhhY2Y4LCAweDAwMjcsIDB4MjAwOSwgMHgwMDA1LCAweDcwMGMsIDB4NzgxNiwKLQkweDcwMDgsIDB4NzgxMiwgMHg3MDA0LCAweDc4MDYsIDB4NzAwMCwgMHg3ODAyLCAweDdlMGUsIDB4N2YwYSwKLQkweDgxMDksIDB4MDEyOCwgMHhhZWYyLCAweDAwMDQsIDB4YWZmYSwgMHgwMDA2LCAweDBjNzgsIDB4NjAwNCwKLQkweGEwNjUsIDB4MWQzMCwgMHgwMDZlLCAweDAwN2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDIwMDksIDB4YWQzMCwgMHgyMTBjLCAweDgxZmYsIDB4MTE5OCwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwKLQkweDY4M2EsIDB4MDgwYywgMHg0OTkzLCAweDExMDgsIDB4MDAwNSwgMHgwODBjLCAweDUxZGYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDk3ZmQsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MGNhMCwKLQkweDIwMDEsIDB4MDAyOCwgMHgyMDA5LCAweDAwMDAsIDB4MGM4MCwgMHgyMDA5LCAweGFkMzAsIDB4MjEwYywKLQkweDgxZmYsIDB4MTFiMCwgMHg2ODU4LCAweGEwMDUsIDB4MDFiMCwgMHg2ODM4LCAweGEwODQsIDB4MDBmZiwKLQkweDY4M2EsIDB4Njg1MywgMHgwMDAwLCAweDA4MGMsIDB4NGE1NSwgMHgxMTA4LCAweDAwMDUsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDUxZGYsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MGNiMCwKLQkweDIwMDEsIDB4MDAyOCwgMHgwY2EwLCAweDIwMDEsIDB4MDAwMCwgMHgwYzg4LCAweDcwMTgsIDB4NjgwMiwKLQkweDJkMDgsIDB4MjA2OCwgMHg2OTA2LCAweDcxMWEsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4MDExOCwKLQkweDcwMDcsIDB4MDAwNiwgMHgwMDMwLCAweDcwMTQsIDB4MjA2OCwgMHg3MDA3LCAweDAwMDEsIDB4NzA0OCwKLQkweDA4MGYsIDB4MDAwNSwgMHg3MDA3LCAweDAwMDEsIDB4Njk0NCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwKLQkweDY4NDgsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTksIDB4MDAwMSwgMHhhMDk2LCAweDAwMDEsIDB4MDFiMCwKLQkweDIwMDksIDB4MDAwMCwgMHgyMGE5LCAweDAwZmYsIDB4YTA5NiwgMHgwMDAyLCAweDAxNzgsIDB4YTAwNSwKLQkweDExZjAsIDB4Njk0NCwgMHg4MTBmLCAweGExOGMsIDB4MDBmZiwgMHgwODBjLCAweDRjZGMsIDB4MTFiOCwKLQkweDAwNjYsIDB4NmU1MCwgMHgwODBjLCAweDRkY2YsIDB4MDA2ZSwgMHgwMDg4LCAweDAwNDYsIDB4MjAxMSwKLQkweGFkMGMsIDB4MjIyNCwgMHhjNDg0LCAweDI0MTIsIDB4MDA0ZSwgMHgwMGM2LCAweDA4MGMsIDB4NGNkYywKLQkweDExMTAsIDB4MDgwYywgMHg0ZjJkLCAweDgxMDgsIDB4MWYwNCwgMHg1ZDRlLCAweDAwY2UsIDB4Njg0YywKLQkweGQwODQsIDB4MTExOCwgMHgwODBjLCAweDE1ZjAsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NTEwYywgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywKLQkweDAwMDEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhNCwgMHgwNTgwLCAweDIwNjEsIDB4YjA0OCwKLQkweDYxMDAsIDB4ZDE4NCwgMHgwMTc4LCAweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDE1NTAsIDB4NjAwMCwKLQkweGQwODQsIDB4MDUyMCwgMHg2MDA0LCAweGEwMDUsIDB4MTUzOCwgMHg2MDAzLCAweDAwMDAsIDB4NjAwYiwKLQkweDAwMDAsIDB4MDBjOCwgMHgyMDExLCAweDAwMDEsIDB4Njg2MCwgMHhhMDA1LCAweDExMTAsIDB4MjAwMSwKLQkweDAwMWUsIDB4ODAwMCwgMHg2MDE2LCAweDY4NTgsIDB4YTA4NCwgMHgwMGZmLCAweDAxNzgsIDB4NjAwNiwKLQkweDY4NTgsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MDE0OCwgMHg2MDBhLCAweDY4NTgsIDB4ODAwMCwKLQkweDExMDgsIDB4YzI4ZCwgMHg2MjAyLCAweDAxMmUsIDB4MDgwNCwgMHg1ZjdmLCAweDAxMmUsIDB4MDgwNCwKLQkweDVmNzksIDB4MDEyZSwgMHgwODA0LCAweDVmNzMsIDB4MDEyZSwgMHgwODA0LCAweDVmNzYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwgMHhhZDUyLCAweDIwMDQsIDB4ZDBhNCwKLQkweDA1ZTAsIDB4MjA2MSwgMHhiMDQ4LCAweDYwMDAsIDB4ZDA4NCwgMHgwNWI4LCAweDYyMDQsIDB4NjMwOCwKLQkweGQwOGMsIDB4MTUzMCwgMHg2YzQ4LCAweGE0ODQsIDB4MDAwMywgMHgwMTcwLCAweDY5NTgsIDB4YTE4YywKLQkweDAwZmYsIDB4ODAwMSwgMHgxMTIwLCAweDIxMDAsIDB4YTIxMCwgMHgwNjIwLCAweDAwMjgsIDB4ODAwMSwKLQkweDE1MDgsIDB4MjEwMCwgMHhhMjEyLCAweDAyZjAsIDB4YTQ4NCwgMHgwMDBjLCAweDAxODgsIDB4Njk1OCwKLQkweDgxMGYsIDB4YTE4YywgMHgwMGZmLCAweGEwODIsIDB4MDAwNCwgMHgxMTIwLCAweDIxMDAsIDB4YTMxOCwKLQkweDAyODgsIDB4MDAzMCwgMHhhMDgyLCAweDAwMDQsIDB4MTE2OCwgMHgyMTAwLCAweGEzMWEsIDB4MDI1MCwKLQkweDY4NjAsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDAsIDB4NjAxNiwgMHg2MjA2LCAweDYzMGEsIDB4MDEyZSwKLQkweDA4MDQsIDB4NWY3ZiwgMHgwMTJlLCAweDA4MDQsIDB4NWY3YywgMHgwMTJlLCAweDA4MDQsIDB4NWY3OSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgyMDYxLCAweGIwNDgsIDB4NjMwMCwKLQkweGQzOGMsIDB4MTEyMCwgMHg2MzA4LCAweDgzMTgsIDB4MDIyMCwgMHg2MzBhLCAweDAxMmUsIDB4MDgwNCwKLQkweDVmOGQsIDB4MDEyZSwgMHgwODA0LCAweDVmN2MsIDB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4ODAwMCwKLQkweDcwMDcsIDB4MDAwMSwgMHg2ODRjLCAweGQwYWMsIDB4MDE0OCwgMHgwMGM2LCAweDIwNjEsIDB4YjA0OCwKLQkweDYwMDAsIDB4YTA4NCwgMHhmY2ZmLCAweDYwMDIsIDB4MDBjZSwgMHgwNDQ4LCAweDY4NTgsIDB4YTAwNSwKLQkweDA1ZDAsIDB4Njg1YywgMHhhMDY1LCAweDA1OTgsIDB4MjAwMSwgMHhhZDMwLCAweDIwMDQsIDB4YTAwNSwKLQkweDAxMTgsIDB4MDgwYywgMHg5NzRlLCAweDAwNjgsIDB4NjAxMywgMHgwNDAwLCAweDYwNTcsIDB4MDAwMCwKLQkweDY5NGMsIDB4ZDFhNCwgMHgwMTEwLCAweDY5NTAsIDB4NjE1NiwgMHgyMDA5LCAweDAwNDEsIDB4MDgwYywKLQkweDgwYTcsIDB4Njk1OCwgMHhhMThjLCAweGZmMDAsIDB4YTE4NiwgMHgyMDAwLCAweDExNDAsIDB4MDAyNiwKLQkweDIwMDksIDB4MDAwMCwgMHgyMDExLCAweGZkZmYsIDB4MDgwYywgMHg2NjNmLCAweDAwMmUsIDB4Njg0YywKLQkweGQwYzQsIDB4MDE0OCwgMHgyMDYxLCAweGIwNDgsIDB4NjAwMCwgMHhkMDhjLCAweDExMjAsIDB4NjAwOCwKLQkweDgwMDAsIDB4MDIwOCwgMHg2MDBhLCAweDAwY2UsIDB4MDEyZSwgMHgwODA0LCAweDVmN2YsIDB4MDBjZSwKLQkweDAxMmUsIDB4MDgwNCwgMHg1Zjc5LCAweDY5NTQsIDB4YTE4NiwgMHgwMDJlLCAweDBkNDAsIDB4YTE4NiwKLQkweDAwMmQsIDB4MGQyOCwgMHhhMTg2LCAweDAwNDUsIDB4MDUxMCwgMHhhMTg2LCAweDAwMmEsIDB4MTEzMCwKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxOTQsIDB4MjEwMiwgMHgwOGM4LCAweGExODYsIDB4MDAyMCwKLQkweDAxNzAsIDB4YTE4NiwgMHgwMDI5LCAweDFkMTgsIDB4Njk0NCwgMHhhMThjLCAweGZmMDAsIDB4ODEwZiwKLQkweDA4MGMsIDB4NGNkYywgMHgxOTYwLCAweDYwMDAsIDB4YzBlNCwgMHg2MDAyLCAweDA4NDAsIDB4Njg1YywKLQkweGEwNjUsIDB4MDlhOCwgMHgyMDAxLCAweGFmYTMsIDB4MjAwNCwgMHg2MDE2LCAweDA4MDAsIDB4Njg1YywKLQkweGEwNjUsIDB4MDk2OCwgMHgwMGU2LCAweDY4NjAsIDB4YTA3NSwgMHgyMDAxLCAweGFkMzAsIDB4MjAwNCwKLQkweGEwMDUsIDB4MDE1MCwgMHgwODBjLCAweDk3NGUsIDB4OGVmZiwgMHgwMTE4LCAweDJlNjAsIDB4MDgwYywKLQkweDk3NGUsIDB4MDBlZSwgMHgwODA0LCAweDVlM2YsIDB4NjAyMCwgMHhjMGRjLCAweGMwZDUsIDB4NjAyMiwKLQkweDJlNjAsIDB4NjAwNywgMHgwMDNhLCAweDY4NzAsIDB4YTAwNSwgMHgwMTMwLCAweDYwMDcsIDB4MDAzYiwKLQkweDY4NzQsIDB4NjAyYSwgMHg2ODc4LCAweDYwMTIsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGVlLCAweDA4MDQsIDB4NWUzZiwgMHgyMDYxLCAweGIwNDgsIDB4NjAwMCwKLQkweGQwODQsIDB4MDE5MCwgMHhkMDhjLCAweDE5MDQsIDB4NWY4ZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYyMDQsIDB4ODIxMCwgMHgwMjIwLCAweDYyMDYsIDB4MDEyZSwgMHgwODA0LCAweDVmOGQsIDB4MDEyZSwKLQkweDY4NTMsIDB4MDAxNiwgMHgwODA0LCAweDVmODYsIDB4Njg1MywgMHgwMDA3LCAweDA4MDQsIDB4NWY4NiwKLQkweDY4MzQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4MTExOCwgMHgwODBjLCAweDViOTksIDB4MDA3OCwKLQkweDIwMzAsIDB4ODAwMSwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDUxLCAweDAwNDAsIDB4NzAwNywKLQkweDAwMDYsIDB4NzAxMiwgMHgyZDAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDVlZTAsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhZDMwLCAweDIxMGMsIDB4ODFmZiwKLQkweDE5MDQsIDB4NWY1YiwgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywgMHhkMTk0LCAweDE5MDQsIDB4NWY2MywKLQkweDY4NDgsIDB4MjA3MCwgMHhhZTgyLCAweGI0MDAsIDB4MGEwNCwgMHg1ZjRmLCAweDIwMDEsIDB4YWQxNiwKLQkweDIwMDQsIDB4YWUwMiwgMHgxYTA0LCAweDVmNGYsIDB4MjA2MSwgMHhiMDQ4LCAweDYxMDAsIDB4YTE4NCwKLQkweDAzMDEsIDB4YTA4NiwgMHgwMDAxLCAweDE1YTgsIDB4NzExYywgMHhhMTg2LCAweDAwMDYsIDB4MTViMCwKLQkweDcwMTgsIDB4YTAwNSwgMHgwOTA0LCAweDVmNWIsIDB4MjAwNCwgMHhkMGU0LCAweDE5MDQsIDB4NWY1ZSwKLQkweDcwMjAsIDB4ZDBkYywgMHgxOTA0LCAweDVmNjYsIDB4Njg1MywgMHgwMDAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDJkMDgsIDB4NzAxMCwgMHhhMDA1LCAweDExNTgsIDB4NzExMiwgMHg2ODRjLCAweGQwZjQsIDB4MTkwNCwKLQkweDVmNjksIDB4MmU2MCwgMHgwODBjLCAweDY1YWEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgxZGUwLCAweDY5MDIsIDB4MjE2OCwgMHg2ODRjLCAweGQwZjQsIDB4MTVjOCwKLQkweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAxMmUsIDB4MDBlZSwgMHg2ODUzLCAweDAwMDYsIDB4MDgwNCwKLQkweDVmODYsIDB4ZDE4NCwgMHgwZGMwLCAweGQxYzQsIDB4MTFhOCwgMHgwMGI4LCAweDY5NDQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgwODBjLCAweDRjZGMsIDB4MTFjOCwgMHg2MDAwLCAweGQwZTQsIDB4MTFiMCwKLQkweDcxMWMsIDB4YTE4NiwgMHgwMDA3LCAweDExMTgsIDB4Njg1MywgMHgwMDAyLCAweDAwODgsIDB4Njg1MywKLQkweDAwMDgsIDB4MDA3MCwgMHg2ODUzLCAweDAwMGUsIDB4MDA1OCwgMHg2ODUzLCAweDAwMTcsIDB4MDA0MCwKLQkweDY4NTMsIDB4MDAzNSwgMHgwMDI4LCAweDY4NTMsIDB4MDAyOCwgMHgwMDEwLCAweDY4NTMsIDB4MDAyOSwKLQkweDAxMmUsIDB4MDBlZSwgMHgwNDE4LCAweDY4NTMsIDB4MDAyYSwgMHgwY2QwLCAweDY4NTMsIDB4MDA0NSwKLQkweDBjYjgsIDB4MmU2MCwgMHgyMDE5LCAweDAwMDIsIDB4NjAxNywgMHgwMDE0LCAweDA4MGMsIDB4YTU2NiwKLQkweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDksIDB4MDAzZSwgMHgwMDU4LCAweDIwMDksIDB4MDAwNCwKLQkweDAwNDAsIDB4MjAwOSwgMHgwMDA2LCAweDAwMjgsIDB4MjAwOSwgMHgwMDE2LCAweDAwMTAsIDB4MjAwOSwKLQkweDAwMDEsIDB4Njg1NCwgMHhhMDg0LCAweGZmMDAsIDB4YTEwNSwgMHg2ODU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLCAweDE1ZjAsIDB4MDAwNSwKLQkweDcwMmMsIDB4NzEzMCwgMHg4MTA4LCAweGExMDIsIDB4MDIzMCwgMHhhMDBlLCAweDcwMzQsIDB4NzA3MiwKLQkweDcwMzgsIDB4NzA3NiwgMHgwMDU4LCAweDcwNzAsIDB4YTA4MCwgMHgwMDQwLCAweDcwNzIsIDB4MTIzMCwKLQkweDcwNzQsIDB4YTA4MSwgMHgwMDAwLCAweDcwNzYsIDB4YTA4NSwgMHgwMDAxLCAweDc5MzIsIDB4NzEzMiwKLQkweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweDY1YTEsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MjAxMSwKLQkweDAwMDQsIDB4MjIwNCwgMHhhMDg1LCAweDgwMDIsIDB4MjAxMiwgMHgwMGRlLCAweDAwMDUsIDB4MjBlMSwKLQkweDAwMDIsIDB4M2QwOCwgMHgyMGUxLCAweDIwMDAsIDB4M2QwMCwgMHhhMDg0LCAweDcwMDAsIDB4MDExOCwKLQkweGEwODYsIDB4MTAwMCwgMHgxNTQwLCAweDIwZTEsIDB4MDAwMCwgMHgzZDAwLCAweGEwOTQsIDB4ZmYwMCwKLQkweDgyMTcsIDB4YTA4NCwgMHhmMDAwLCAweGEwODYsIDB4MzAwMCwgMHgxMTE4LCAweDA4MGMsIDB4NjFjNiwKLQkweDAwYjAsIDB4MjBlMSwgMHgwMDA0LCAweDNkNjAsIDB4ZDFiYywgMHgxMTA4LCAweDNlNjAsIDB4YWM4NCwKLQkweDAwMDcsIDB4MTE4OCwgMHhhYzgyLCAweGI0MDAsIDB4MDI3MCwgMHg2ODU4LCAweGFjMDIsIDB4MTI1OCwKLQkweDYxMjAsIDB4ZDFmNCwgMHgxMTYwLCAweDIwMDksIDB4MDA0NywgMHgwODBjLCAweDgwYTcsIDB4N2ExYywKLQkweGQyODQsIDB4MTk2OCwgMHgwMDA1LCAweGEwMTYsIDB4MDgwYywgMHgxODI0LCAweDBjYzAsIDB4MGNkOCwKLQkweDc4MWMsIDB4ZDA4YywgMHgwNTAwLCAweDAxNTYsIDB4MDEzNiwgMHgwMTQ2LCAweDIwZTEsIDB4MzAwMCwKLQkweDNkMjAsIDB4M2UyOCwgMHhhNTg0LCAweDAwNzYsIDB4MTUzMCwgMHhhNDg0LCAweDcwMDAsIDB4YTA4NiwKLQkweDEwMDAsIDB4MTFhOCwgMHgwODBjLCAweDYwNGUsIDB4MDFmMCwgMHgyMGUxLCAweDMwMDAsIDB4NzgyOCwKLQkweDc4MjgsIDB4MDgwYywgMHg2MDZhLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDIwMDksIDB4YWZjZiwKLQkweDIxMDQsIDB4YTAwNSwgMHgxMTA4LCAweDAwMDUsIDB4MDgwYywgMHg2YzUwLCAweDBjZTAsIDB4YTQ4NCwKLQkweDcwMDAsIDB4MTUxOCwgMHgwNDk5LCAweDAxYjgsIDB4NzAwMCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwKLQkweDgxMDAsIDB4MGQxOCwgMHgwMDgwLCAweGQ1YTQsIDB4MDE1OCwgMHgwODBjLCAweDFkODYsIDB4MjBlMSwKLQkweDkwMTAsIDB4MjAwMSwgMHgwMTYwLCAweDI1MDIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MDA0OCwKLQkweDAwZTksIDB4Njg4MywgMHgwMDAwLCAweDA4MGMsIDB4YWM1OSwgMHgyMGUxLCAweDMwMDAsIDB4NzgyOCwKLQkweDc4MjgsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDhiMCwgMHgwMDgxLCAweDExMzAsIDB4NzAwMCwKLQkweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDgxMDAsIDB4MWQ3MCwgMHgwODBjLCAweGFjNTksIDB4MjBlMSwKLQkweDMwMDAsIDB4NzgyOCwgMHg3ODI4LCAweDA4MGMsIDB4NjQyZCwgMHgwYzU4LCAweGE0ODQsIDB4MDFmZiwKLQkweDY4ODIsIDB4YTAwNSwgMHgwMTYwLCAweGEwODAsIDB4MDAxZiwgMHhhMDg0LCAweDAzZjgsIDB4ODBhYywKLQkweDIwZTEsIDB4MTAwMCwgMHgyZWEwLCAweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweDAwMDUsIDB4MjBhOSwKLQkweDAwMGMsIDB4MjBlMSwgMHgxMDAwLCAweDJlYTAsIDB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4YTA4NSwKLQkweDAwMDEsIDB4MGNhMCwgMHg3MDAwLCAweGEwODQsIDB4ZmYwMCwgMHhhMDhjLCAweGYwMDAsIDB4ODAwNywKLQkweGExOTYsIDB4MDAwMCwgMHgxMTE4LCAweDA4MDQsIDB4NjJjZiwgMHgwMDA1LCAweGExOTYsIDB4MjAwMCwKLQkweDExNDgsIDB4NjkwMCwgMHhhMThlLCAweDAwMDEsIDB4MTExOCwgMHgwODBjLCAweDQxZDEsIDB4MGNhOCwKLQkweDAwMzksIDB4MGM5OCwgMHhhMTk2LCAweDgwMDAsIDB4MWQ4MCwgMHgwODBjLCAweDYzNzIsIDB4MGM2OCwKLQkweDAwYzYsIDB4NmE4MCwgMHg4MmZmLCAweDA5MDQsIDB4NjFjMCwgMHg3MTEwLCAweGExOGMsIDB4ZmYwMCwKLQkweDgxMGYsIDB4YTE5NiwgMHgwMDAxLCAweDAxMjAsIDB4YTE5NiwgMHgwMDIzLCAweDE5MDQsIDB4NjFjMCwKLQkweGEwOGUsIDB4MDAyMywgMHgxNTcwLCAweDA4MGMsIDB4NjQwOCwgMHgwOTA0LCAweDYxYzAsIDB4NzEyNCwKLQkweDYxMGEsIDB4NzAzMCwgMHhhMDhlLCAweDAyMDAsIDB4MTE1MCwgMHg3MDM0LCAweGEwMDUsIDB4MTkwNCwKLQkweDYxYzAsIDB4MjAwOSwgMHgwMDE1LCAweDA4MGMsIDB4ODBhNywgMHgwODA0LCAweDYxYzAsIDB4YTA4ZSwKLQkweDAyMTQsIDB4MDExOCwgMHhhMDhlLCAweDAyMTAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMTUsIDB4MDgwYywKLQkweDgwYTcsIDB4MDgwNCwgMHg2MWMwLCAweGEwOGUsIDB4MDEwMCwgMHgxOTA0LCAweDYxYzAsIDB4NzAzNCwKLQkweGEwMDUsIDB4MTkwNCwgMHg2MWMwLCAweDIwMDksIDB4MDAxNiwgMHgwODBjLCAweDgwYTcsIDB4MDgwNCwKLQkweDYxYzAsIDB4YTA4ZSwgMHgwMDIyLCAweDE5MDQsIDB4NjFjMCwgMHg3MDMwLCAweGEwOGUsIDB4MDMwMCwKLQkweDE1ODAsIDB4NjhkMCwgMHhkMGE0LCAweDA1MjgsIDB4YzBiNSwgMHg2OGQyLCAweDcxMDAsIDB4YTE4YywKLQkweDAwZmYsIDB4Njk2ZSwgMHg3MDA0LCAweDY4NzIsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzllNiwKLQkweDc4ZWEsIDB4MDAwNiwgMHhhMDg0LCAweDAwZmYsIDB4MDAxNiwgMHgyMDA4LCAweDA4MGMsIDB4MjZhMCwKLQkweDc5MzIsIDB4NzkzNiwgMHgwMDFlLCAweDAwMGUsIDB4MDBmZSwgMHgwODBjLCAweDI2NzYsIDB4Njk0ZSwKLQkweDcwM2MsIDB4MDBlNiwgMHgyMDcxLCAweDAxNDAsIDB4NzA4NiwgMHgyMDcxLCAweGFkMDAsIDB4NzBhMiwKLQkweDAwZWUsIDB4NzAzNCwgMHhhMDA1LCAweDE5MDQsIDB4NjFjMCwgMHgyMDA5LCAweDAwMTcsIDB4MDgwNCwKLQkweDYxOTMsIDB4YTA4ZSwgMHgwNDAwLCAweDExNTgsIDB4NzAzNCwgMHhhMDA1LCAweDE5MDQsIDB4NjFjMCwKLQkweDY4ZDAsIDB4YzBhNSwgMHg2OGQyLCAweDIwMDksIDB4MDAzMCwgMHgwODA0LCAweDYxOTMsIDB4YTA4ZSwKLQkweDA1MDAsIDB4MTE0MCwgMHg3MDM0LCAweGEwMDUsIDB4MTkwNCwgMHg2MWMwLCAweDIwMDksIDB4MDAxOCwKLQkweDA4MDQsIDB4NjE5MywgMHhhMDhlLCAweDIwMTAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMTksIDB4MDgwNCwKLQkweDYxOTMsIDB4YTA4ZSwgMHgyMTEwLCAweDExMjAsIDB4MjAwOSwgMHgwMDFhLCAweDA4MDQsIDB4NjE5MywKLQkweGEwOGUsIDB4NTIwMCwgMHgxMTQwLCAweDcwMzQsIDB4YTAwNSwgMHgxOTA0LCAweDYxYzAsIDB4MjAwOSwKLQkweDAwMWIsIDB4MDgwNCwgMHg2MTkzLCAweGEwOGUsIDB4NTAwMCwgMHgxMTQwLCAweDcwMzQsIDB4YTAwNSwKLQkweDE5MDQsIDB4NjFjMCwgMHgyMDA5LCAweDAwMWMsIDB4MDgwNCwgMHg2MTkzLCAweGEwOGUsIDB4MTMwMCwKLQkweDExMjAsIDB4MjAwOSwgMHgwMDM0LCAweDA4MDQsIDB4NjE5MywgMHhhMDhlLCAweDEyMDAsIDB4MTE0MCwKLQkweDcwMzQsIDB4YTAwNSwgMHgxOTA0LCAweDYxYzAsIDB4MjAwOSwgMHgwMDI0LCAweDA4MDQsIDB4NjE5MywKLQkweGEwOGMsIDB4ZmYwMCwgMHhhMThlLCAweDI0MDAsIDB4MTExOCwgMHgyMDA5LCAweDAwMmQsIDB4MDRkOCwKLQkweGEwOGMsIDB4ZmYwMCwgMHhhMThlLCAweDUzMDAsIDB4MTExOCwgMHgyMDA5LCAweDAwMmEsIDB4MDQ5OCwKLQkweGEwOGUsIDB4MGYwMCwgMHgxMTE4LCAweDIwMDksIDB4MDAyMCwgMHgwNDY4LCAweGEwOGUsIDB4NTMwMCwKLQkweDExMDgsIDB4MDBkOCwgMHhhMDhlLCAweDYxMDQsIDB4MTFjMCwgMHgyMDExLCAweGIyOGQsIDB4ODIwOCwKLQkweDIyMDQsIDB4YTA4MiwgMHgwMDA0LCAweDIwYTgsIDB4OTVhYywgMHg5NWFjLCAweDIwMTEsIDB4ODAxNSwKLQkweDIxMWMsIDB4ODEwOCwgMHgwMDQ2LCAweDIxMjQsIDB4MDgwYywgMHgzYzVjLCAweDAwNGUsIDB4ODEwOCwKLQkweDFmMDQsIDB4NjE3NiwgMHgyMDA5LCAweDAwMjMsIDB4MDA3MCwgMHhhMDhlLCAweDYwMDAsIDB4MTExOCwKLQkweDIwMDksIDB4MDAzZiwgMHgwMDQwLCAweGEwOGUsIDB4NzgwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0NSwKLQkweDAwMTAsIDB4MjAwOSwgMHgwMDFkLCAweDAwMTYsIDB4MjAxMSwgMHhiMjgzLCAweDIyMDQsIDB4ODIxMSwKLQkweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDE1MzAsIDB4MDgwYywgMHg0YzgwLCAweDE1MTgsIDB4NjYxMiwKLQkweDY1MTYsIDB4ODZmZiwgMHgwMTgwLCAweDAwMWUsIDB4MDAxNiwgMHhhMTg2LCAweDAwMTcsIDB4MTE1OCwKLQkweDY4NmMsIDB4YTYwNiwgMHgxMTQwLCAweDY4NzAsIDB4YTUwNiwgMHhhMDg0LCAweGZmMDAsIDB4MTExOCwKLQkweDYwMDAsIDB4YzBmNSwgMHg2MDAyLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAxNjgsIDB4MDAxZSwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLCAweDA4MGMsIDB4ODBhNywKLQkweDAwY2UsIDB4MDAwNSwgMHgwMDFlLCAweDBjZTAsIDB4MDBjZSwgMHgwY2UwLCAweDAwYzYsIDB4MDA0NiwKLQkweDA4MGMsIDB4NjIyMSwgMHgxOTA0LCAweDYyMWUsIDB4YTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA4NiwKLQkweDAwMDgsIDB4MTkwNCwgMHg2MjFlLCAweGEyOGUsIDB4MDAzMywgMHgxMWU4LCAweDA4MGMsIDB4NjQwOCwKLQkweDA5MDQsIDB4NjIxZSwgMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwgMHhhMDhlLCAweDAyMDAsIDB4MTE0MCwKLQkweDcwMzQsIDB4YTAwNSwgMHgxNWQ4LCAweDIwMDksIDB4MDAxNSwgMHgwODBjLCAweDgwYTcsIDB4MDRiMCwKLQkweGEwOGUsIDB4MDEwMCwgMHgxNTk4LCAweDcwMzQsIDB4YTAwNSwgMHgxNTgwLCAweDIwMDksIDB4MDAxNiwKLQkweDA4MGMsIDB4ODBhNywgMHgwNDU4LCAweGEyOGUsIDB4MDAzMiwgMHgxNTQwLCAweDcwMzAsIDB4YTA4ZSwKLQkweDE0MDAsIDB4MTUyMCwgMHgyMDA5LCAweDAwMzgsIDB4MDAxNiwgMHgyMDExLCAweGIyODMsIDB4MjIwNCwKLQkweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTFjMCwgMHgwODBjLCAweDRjODAsIDB4MTFhOCwKLQkweDY2MTIsIDB4NjUxNiwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMTcwLCAweDAwMWUsIDB4NjExYSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDAwMWUsIDB4MDgwYywKLQkweDgwYTcsIDB4MDgwYywgMHg2YzUwLCAweDAwMTAsIDB4MDBjZSwgMHgwMDFlLCAweDAwNGUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDBmNiwgMHgwMGQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwKLQkweDNjMDAsIDB4MDAwNiwgMHgyMDc5LCAweDAwMzAsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsIDB4MWRmMiwKLQkweDE1OTAsIDB4MDgwYywgMHgxY2UyLCAweDA1YzgsIDB4MDRkOSwgMHgxMTMwLCAweDc5MDgsIDB4YTE4YywKLQkweDFmZmYsIDB4YTE4MiwgMHgwMDExLCAweDE2ODgsIDB4MjBhOSwgMHgwMDBjLCAweDIwZTEsIDB4MDAwMCwKLQkweDJlYTAsIDB4MjA5OSwgMHgwMjBhLCAweDUzYTUsIDB4MjBlMSwgMHgyMDAwLCAweDIwMDEsIDB4MDIwYSwKLQkweDIwMDQsIDB4N2EwYywgMHg3ODA4LCAweGEwODAsIDB4MDAwNywgMHhhMDg0LCAweDFmZjgsIDB4MDQwMSwKLQkweDExMjAsIDB4YTA4YSwgMHgwMTQwLCAweDFhMGMsIDB4MTRmNiwgMHg4MGFjLCAweDIwZTEsIDB4NjAwMCwKLQkweDIwOTksIDB4MDIwYSwgMHg1M2E1LCAweDIwZTEsIDB4NzAwMCwgMHg2ODI4LCAweDY4MjgsIDB4NzgwMywKLQkweDAwMDQsIDB4YTI5NCwgMHgwMDcwLCAweDAwMGUsIDB4MjBlMCwgMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMGRlLCAweDAwZmUsIDB4MDAwNSwgMHhhMDg1LCAweDAwMDEsIDB4MGM5OCwKLQkweDAwMDYsIDB4MjAwMSwgMHgwMTExLCAweDIwMDQsIDB4YTA4NCwgMHgwMDAzLCAweDAwMGUsIDB4MDAwNSwKLQkweDAwNDYsIDB4MDBlNiwgMHgwMGQ2LCAweDIwMjgsIDB4MjEzMCwgMHhhNjk2LCAweDAwZmYsIDB4MTE5OCwKLQkweGE1OTYsIDB4ZmZmZCwgMHgxMTIwLCAweDIwMDksIDB4MDA3ZiwgMHgwODA0LCAweDYyY2EsIDB4YTU5NiwKLQkweGZmZmUsIDB4MTExOCwgMHgyMDA5LCAweDAwN2UsIDB4MDRlOCwgMHhhNTk2LCAweGZmZmMsIDB4MTExOCwKLQkweDIwMDksIDB4MDA4MCwgMHgwNGI4LCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweGFkMzQsIDB4MjMxYywKLQkweGQzYWMsIDB4MDEzOCwgMHgyMDIxLCAweDAwMDAsIDB4MjBhOSwgMHgwMGZmLCAweDIwNzEsIDB4YWUzNCwKLQkweDAwMzAsIDB4MjAyMSwgMHgwMDgxLCAweDIwYTksIDB4MDA3ZSwgMHgyMDcxLCAweGFlYjUsIDB4MmUxYywKLQkweDgzZmYsIDB4MTEyOCwgMHg4MmZmLCAweDExOTgsIDB4MjQxMCwgMHhjMmZkLCAweDAwODAsIDB4MjM2OCwKLQkweDZmMTAsIDB4MDAwNiwgMHgyMTAwLCAweGE3MDYsIDB4MDAwZSwgMHg2YjE0LCAweDExMjAsIDB4YTM0NiwKLQkweDExMTAsIDB4MjQwOCwgMHgwMDc4LCAweDg3ZmYsIDB4MTExMCwgMHg4M2ZmLCAweDBkNTgsIDB4ODQyMCwKLQkweDhlNzAsIDB4MWYwNCwgMHg2MmE3LCAweDgyZmYsIDB4MTExOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAxOCwKLQkweGMyZmMsIDB4MjIwOCwgMHhhMDA2LCAweDAwZGUsIDB4MDBlZSwgMHgwMDRlLCAweDAwMDUsIDB4YTA4NCwKLQkweDAwMDcsIDB4MDAwYSwgMHgwMDA1LCAweDYyZGIsIDB4NjJkYiwgMHg2MmRiLCAweDY0MWEsIDB4NjJkYiwKLQkweDYyZGMsIDB4NjJmMSwgMHg2MzVkLCAweDAwMDUsIDB4NzExMCwgMHhkMWJjLCAweDAxODgsIDB4NzEyMCwKLQkweDIxNjAsIDB4YWM4YywgMHgwMDA3LCAweDExNjAsIDB4YWM4YSwgMHhiNDAwLCAweDAyNDgsIDB4Njg1OCwKLQkweGFjMDIsIDB4MTIzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDQ2LCAweDA4MGMsIDB4ODBhNywKLQkweDAwMDUsIDB4MDBjNiwgMHg3MTEwLCAweGQxYmMsIDB4MTkwNCwgMHg2MzQ0LCAweDIwMTEsIDB4YjI4MywKLQkweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4MjY3NiwgMHgxOTA0LCAweDYzNDQsIDB4MDgwYywKLQkweDRjODAsIDB4MTkwNCwgMHg2MzQ0LCAweDY2MTIsIDB4NjUxNiwgMHg2MDAwLCAweGQwZWMsIDB4MTVlMCwKLQkweDYyMDQsIDB4YTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4YTI4NiwgMHgwMDA2LCAweDAxNjAsIDB4MDgwYywKLQkweDU3NGYsIDB4MTFkMCwgMHg2MjA0LCAweGEyOTQsIDB4MDBmZiwgMHhhMjg2LCAweDAwMDYsIDB4MTFhMCwKLQkweGEyOTUsIDB4MDYwMCwgMHg2MjA2LCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDUzMCwKLQkweDYxMWEsIDB4NjAxZiwgMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwgMHg3MTMwLCAweDYxNTIsIDB4MjAwOSwKLQkweDAwNDQsIDB4MDgwYywgMHg4MGE3LCAweDAwYzAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwKLQkweDAxOTgsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweGEyODYsIDB4MDAwNCwKLQkweDExMTgsIDB4NjAwNywgMHgwMDA1LCAweDAwMTAsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDgwYywKLQkweDk4MDcsIDB4MDAxZSwgMHgwZGM4LCAweDYxMWEsIDB4NjAxZiwgMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwKLQkweDcxMzAsIDB4NjE1MiwgMHg2MDEzLCAweDAzMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MGMzOCwgMHg3MTEwLCAweGQxYmMsIDB4MDE4OCwKLQkweDcwMjAsIDB4MjA2MCwgMHhhYzg0LCAweDAwMDcsIDB4MTE2MCwgMHhhYzgyLCAweGI0MDAsIDB4MDI0OCwKLQkweDY4NTgsIDB4YWMwMiwgMHgxMjMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwNDUsIDB4MDgwYywKLQkweDgwYTcsIDB4MDAwNSwgMHg3MTEwLCAweGExOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExOGUsIDB4MDAwMCwKLQkweDExMzAsIDB4YTA4NCwgMHgwMDBmLCAweGEwOGEsIDB4MDAwNiwgMHgxMjA4LCAweDAwMGIsIDB4MDAwNSwKLQkweDYzODYsIDB4NjM4NywgMHg2Mzg2LCAweDYzODYsIDB4NjNmMCwgMHg2M2ZjLCAweDAwMDUsIDB4NzExMCwKLQkweGQxYmMsIDB4MDEyMCwgMHg3MDJjLCAweGQwODQsIDB4MDkwNCwgMHg2M2VmLCAweDcwMGMsIDB4NzEwOCwKLQkweDA4MGMsIDB4MjY3NiwgMHgxOTA0LCAweDYzZWYsIDB4MDgwYywgMHg0YzgwLCAweDE5MDQsIDB4NjNlZiwKLQkweDY2MTIsIDB4NjUxNiwgMHg2MjA0LCAweDcxMTAsIDB4ZDFiYywgMHgwMWY4LCAweGEyOGMsIDB4MDBmZiwKLQkweGExODYsIDB4MDAwNCwgMHgwMTE4LCAweGExODYsIDB4MDAwNiwgMHgxNWM4LCAweDAwYzYsIDB4MDgwYywKLQkweDY0MDgsIDB4MDBjZSwgMHgwOTA0LCAweDYzZWYsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDAxZSwKLQkweDA1ZjAsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAyLCAweDcxMjAsIDB4NjEwYSwKLQkweDIwMDksIDB4MDA4OCwgMHgwODBjLCAweDgwYTcsIDB4MDQ5MCwgMHhhMjhjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDYsIDB4MDE2MCwgMHhhMTg2LCAweDAwMDQsIDB4MDE0OCwgMHhhMjk0LCAweGZmMDAsIDB4ODIxNywKLQkweGEyODYsIDB4MDAwNCwgMHgwMTE4LCAweGEyODYsIDB4MDAwNiwgMHgxMTg4LCAweDAwYzYsIDB4MDgwYywKLQkweDgwMjIsIDB4MDAxZSwgMHgwMWUwLCAweDYxMWEsIDB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwNSwKLQkweDcxMjAsIDB4NjEwYSwgMHgyMDA5LCAweDAwODgsIDB4MDgwYywgMHg4MGE3LCAweDAwODAsIDB4MDBjNiwKLQkweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxNTgsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwKLQkweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwKLQkweDcxMTAsIDB4ZDFiYywgMHgwMTQwLCAweDAwYTEsIDB4MDEzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwKLQkweDAwODksIDB4MDgwYywgMHg4MGE3LCAweDAwMDUsIDB4NzExMCwgMHhkMWJjLCAweDAxNDAsIDB4MDA0MSwKLQkweDAxMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4YSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwKLQkweDcwMjAsIDB4MjA2MCwgMHhhYzg0LCAweDAwMDcsIDB4MTE1OCwgMHhhYzgyLCAweGI0MDAsIDB4MDI0MCwKLQkweDIwMDEsIDB4YWQxNiwgMHgyMDA0LCAweGFjMDIsIDB4MTIxOCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweGEwMDYsIDB4MGNlOCwgMHg3MTEwLCAweGQxYmMsIDB4MTE3OCwgMHg3MDI0LCAweDIwNjAsIDB4YWM4NCwKLQkweDAwMDcsIDB4MTE1MCwgMHhhYzgyLCAweGI0MDAsIDB4MDIzOCwgMHg2ODU4LCAweGFjMDIsIDB4MTIyMCwKLQkweDIwMDksIDB4MDA1MSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHgyMDMxLCAweDAxMDUsIDB4MDA2OSwKLQkweDAwMDUsIDB4MjAzMSwgMHgwMjA2LCAweDAwNDksIDB4MDAwNSwgMHgyMDMxLCAweDAyMDcsIDB4MDAyOSwKLQkweDAwMDUsIDB4MjAzMSwgMHgwMjEzLCAweDAwMDksIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBmNiwKLQkweDcwMDAsIDB4YTA4NCwgMHhmMDAwLCAweGEwODYsIDB4YzAwMCwgMHgwNWIwLCAweDA4MGMsIDB4ODAyMiwKLQkweDA1OTgsIDB4MDA2NiwgMHgwMGM2LCAweDAwNDYsIDB4MjAxMSwgMHhiMjgzLCAweDIyMDQsIDB4ODIxMSwKLQkweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDE1ODAsIDB4MDgwYywgMHg0YzgwLCAweDE1NjgsIDB4NjYxMiwKLQkweDY1MTYsIDB4MmMwMCwgMHgwMDRlLCAweDAwY2UsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4MDgwYywKLQkweDE1ZDksIDB4MDFmMCwgMHgyZDAwLCAweDYwNTYsIDB4NjgwMywgMHgwMDAwLCAweDY4MzcsIDB4MDAwMCwKLQkweDZjM2EsIDB4YWRmOCwgMHgwMDBmLCAweDIwYTksIDB4MDAwZSwgMHgyZmEwLCAweDJlOTgsIDB4NTNhMywKLQkweDAwNmUsIDB4NjYxMiwgMHg2MDA3LCAweDAwM2UsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBmZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDZlLCAweDBjYzAsIDB4MDA0ZSwgMHgwMGNlLCAweDBjYzgsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAwMywgMHgwMDAzLCAweDcwMGYsIDB4MDM2MSwgMHhhMDA2LCAweDcwMWEsIDB4NzAxMiwKLQkweDcwMTcsIDB4YjQwMCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNiwgMHg3MDJiLCAweDc4NDEsIDB4NzAzMiwKLQkweDcwMzcsIDB4Nzg5ZCwgMHg3MDNiLCAweGZmZmYsIDB4NzAzZiwgMHhmZmZmLCAweDcwNDIsIDB4NzA0NywKLQkweDQxYjMsIDB4MDAwNSwgMHgyMDcxLCAweGFmZGEsIDB4MWQwNCwgMHg2NGZjLCAweDIwOTEsIDB4NjAwMCwKLQkweDcwMGMsIDB4ODAwMSwgMHg3MDBlLCAweDExODAsIDB4NzAwZiwgMHgwMzYxLCAweDcwMDcsIDB4MDAwMSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwNDAsIDB4YTAwZCwgMHgwMTQ4LCAweDgxMDksIDB4NzE0MiwKLQkweDExMzAsIDB4NzA0NCwgMHgwODBmLCAweDAwMTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAyNCwKLQkweGEwMGQsIDB4MDE4OCwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHgxMTY4LCAweDcwMjMsIDB4MDAwOSwKLQkweDgxMDksIDB4NzEyNiwgMHhhMTg2LCAweDAzZTgsIDB4MTExMCwgMHg3MDI4LCAweDA4MGYsIDB4ODFmZiwKLQkweDExMTAsIDB4NzAyOCwgMHgwODBmLCAweDcwMzAsIDB4YTAwZCwgMHgwMTU4LCAweDcwMmMsIDB4ODAwMSwKLQkweDcwMmUsIDB4MTEzOCwgMHg3MDJmLCAweDAwMDksIDB4ODEwOSwgMHg3MTMyLCAweDExMTAsIDB4NzAzNCwKLQkweDA4MGYsIDB4NzAzOCwgMHhhMDA1LCAweDAxMTgsIDB4MDMxMCwgMHg4MDAxLCAweDcwM2EsIDB4NzAzYywKLQkweGEwMDUsIDB4MDExOCwgMHgwMzEwLCAweDgwMDEsIDB4NzAzZSwgMHg3MDE4LCAweGEwMGQsIDB4MDE1OCwKLQkweDcwMDgsIDB4ODAwMSwgMHg3MDBhLCAweDExMzgsIDB4NzAwYiwgMHgwMDA5LCAweDgxMDksIDB4NzExYSwKLQkweDExMTAsIDB4NzAxYywgMHgwODBmLCAweDAxMmUsIDB4NzAwNCwgMHgwMDAyLCAweDY1MjIsIDB4NjUyMywKLQkweDY1M2IsIDB4MDBlNiwgMHgyMDcxLCAweGFmZGEsIDB4NzAxOCwgMHhhMDA1LCAweDExMjAsIDB4NzExYSwKLQkweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMDYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzAxYywgMHhhMjA2LCAweDExMTAsIDB4NzAxYSwgMHg3MDFlLCAweDAwMGUsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFmZGEsIDB4NjA4OCwgMHhhMTAyLCAweDAyMDgsIDB4NjE4YSwKLQkweDAwZWUsIDB4MDAwNSwgMHgwMDA1LCAweDcxMTAsIDB4MDgwYywgMHg0Y2RjLCAweDExNTgsIDB4NjA4OCwKLQkweDgwMDEsIDB4MDI0MCwgMHg2MDhhLCAweDExMzAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywKLQkweDZjNTAsIDB4MDEyZSwgMHg4MTA4LCAweGExODIsIDB4MDBmZiwgMHgwMjE4LCAweGEwMGUsIDB4NzAwNywKLQkweDAwMDIsIDB4NzExMiwgMHgwMDA1LCAweDcwMTQsIDB4MjA2MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwM2MsIDB4YTAwNSwgMHgwMTI4LCAweDgwMDEsIDB4NjAzZSwgMHgxMTEwLCAweDA4MGMsIDB4OTg0NiwKLQkweDYwMTQsIDB4YTAwNSwgMHgwNTAwLCAweDgwMDEsIDB4NjAxNiwgMHgxMWU4LCAweDYxMWMsIDB4YTE4NiwKLQkweDAwMDMsIDB4MDExOCwgMHhhMTg2LCAweDAwMDYsIDB4MTFhMCwgMHg2MDEwLCAweDIwNjgsIDB4Njg1NCwKLQkweGEwOGEsIDB4MTk5YSwgMHgwMjcwLCAweGEwODIsIDB4MTk5OSwgMHg2ODU2LCAweGEwOGEsIDB4MTk5YSwKLQkweDAyMTAsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwKLQkweDAwMTAsIDB4MDgwYywgMHg5MzUwLCAweDAxMmUsIDB4YWM4OCwgMHgwMDE4LCAweDcxMTYsIDB4MjAwMSwKLQkweGU0MDAsIDB4YTEwMiwgMHgwMjIwLCAweDcwMTcsIDB4YjQwMCwgMHg3MDA3LCAweDAwMDAsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmRhLCAweDcwMjcsIDB4MDdkMCwgMHg3MDIzLCAweDAwMDksIDB4MDBlZSwKLQkweDAwMDUsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwKLQkweGFmZGEsIDB4NzEzMiwgMHg3MDJmLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDIwMTEsIDB4YWZlNiwKLQkweDIwMTMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhhZmRhLCAweDcxMWEsIDB4NzIxZSwKLQkweDcwMGIsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweGIwNDgsIDB4MDBjZSwKLQkweDAwMDUsIDB4YTE4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweGEwODAsIDB4YjA0OCwKLQkweDIwNjAsIDB4MDAwNSwgMHg2ODU0LCAweGEwOGEsIDB4MTk5YSwgMHgwMjEwLCAweDIwMDEsIDB4MTk5OSwKLQkweGEwMDUsIDB4MTE1MCwgMHgwMGM2LCAweDIwNjEsIDB4YjA0OCwgMHg2MDE0LCAweDAwY2UsIDB4YTAwNSwKLQkweDExMzgsIDB4MjAwMSwgMHgwMDFlLCAweDAwMjAsIDB4YTA4ZSwgMHhmZmZmLCAweDExMDgsIDB4YTAwNiwKLQkweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwgMHg2ODRjLCAweGEwOGMsIDB4MDBjMCwKLQkweGExOGUsIDB4MDBjMCwgMHgwNWIwLCAweGQwYjQsIDB4MTEzOCwgMHhkMGJjLCAweDE1MjgsIDB4MjAwOSwKLQkweDAwMDYsIDB4MDgwYywgMHg2NjFhLCAweDAwMDUsIDB4ZDBmYywgMHgwMTMwLCAweGEwODQsIDB4MDAwMywKLQkweDAxMTgsIDB4YTA4NiwgMHgwMDAzLCAweDE1YzAsIDB4NjAyMCwgMHhkMGQ0LCAweDAxMzAsIDB4YzBkNCwKLQkweDYwMjIsIDB4Njg2MCwgMHg2MDJhLCAweDY4NWMsIDB4NjAyZSwgMHgyMDA5LCAweGFkNzMsIDB4MjEwNCwKLQkweGQwODQsIDB4MDEyOCwgMHgyMDA5LCAweDAwNDIsIDB4MDgwYywgMHg4MGE3LCAweDAwMDUsIDB4MjAwOSwKLQkweDAwNDMsIDB4MDgwYywgMHg4MGE3LCAweDAwMDUsIDB4ZDBmYywgMHgwMTMwLCAweGEwODQsIDB4MDAwMywKLQkweDAxMTgsIDB4YTA4NiwgMHgwMDAzLCAweDExYzAsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsIDB4ODBhNywKLQkweDAwMDUsIDB4ZDBmYywgMHgwMTUwLCAweGEwODQsIDB4MDAwMywgMHhhMDhlLCAweDAwMDIsIDB4MDEzOCwKLQkweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweDgwYTcsIDB4MDAwNSwgMHgwMDUxLCAweDBjZTgsIDB4MjAwOSwKLQkweDAwNDMsIDB4MDgwYywgMHg4MGE3LCAweDBjYzAsIDB4MjAwOSwgMHgwMDA0LCAweDAwMTksIDB4MDAwNSwKLQkweDIwMDksIDB4MDAwMSwgMHgwMGQ2LCAweDYwMTAsIDB4YTBlYywgMHhmMDAwLCAweDAxZjAsIDB4MjA2OCwKLQkweDY5NTIsIDB4NjgwMCwgMHg2MDEyLCAweGExODYsIDB4MDAwMSwgMHgxMTg4LCAweDY5NGMsIDB4YTE4YywKLQkweDgxMDAsIDB4YTE4ZSwgMHg4MTAwLCAweDExNTgsIDB4MDBjNiwgMHgyMDYxLCAweGIwNDgsIDB4NjIwMCwKLQkweGQyOGMsIDB4MTEyMCwgMHg2MjA0LCAweDgyMTAsIDB4MDIwOCwgMHg2MjA2LCAweDAwY2UsIDB4MDgwYywKLQkweDUxMGMsIDB4NjAxMCwgMHhhMDZkLCAweDE5MGMsIDB4NjVhYSwgMHgwMGRlLCAweDAwMDUsIDB4MDE1NiwKLQkweDAwYzYsIDB4MjA2MSwgMHhiMDQ4LCAweDYwMDAsIDB4ODFmZiwgMHgwMTEwLCAweGEyMDUsIDB4MDAwOCwKLQkweGEyMDQsIDB4NjAwMiwgMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHg2ODAwLCAweGQwOGMsIDB4MTEzOCwKLQkweDY4MDgsIDB4YTAwNSwgMHgwMTIwLCAweDgwMDEsIDB4NjgwYSwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweDIwYTksIDB4MDAxMCwgMHhhMDA2LCAweDgwMDQsIDB4ODA4NiwgMHg4MThlLCAweDEyMDgsIDB4YTIwMCwKLQkweDFmMDQsIDB4NjY1YywgMHg4MDg2LCAweDgxOGUsIDB4MDAwNSwgMHgwMTU2LCAweDIwYTksIDB4MDAxMCwKLQkweGEwMDUsIDB4MDFiOCwgMHhhMTFhLCAweDEyYTgsIDB4ODIxMywgMHg4MThkLCAweDAyMjgsIDB4YTExYSwKLQkweDEyMjAsIDB4MWYwNCwgMHg2NjZjLCAweDAwMjgsIDB4YTExYSwgMHgyMzA4LCAweDgyMTAsIDB4MWYwNCwKLQkweDY2NmMsIDB4MDAwNiwgMHgzMjAwLCAweGEwODQsIDB4ZWZmZiwgMHgyMDgwLCAweDAwMGUsIDB4MDE1ZSwKLQkweDAwMDUsIDB4MDAwNiwgMHgzMjAwLCAweGEwODUsIDB4MTAwMCwgMHgwY2I4LCAweDAxMjYsIDB4MjA5MSwKLQkweDI4MDAsIDB4MjA3OSwgMHhhZmM3LCAweDAxMmUsIDB4MDBkNiwgMHgyMDY5LCAweGFmYzcsIDB4NjgwMywKLQkweDAwMDUsIDB4MjA2OSwgMHgwMDA0LCAweDJkMDQsIDB4YTA4NSwgMHg4MDAxLCAweDIwNmEsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBjNiwgMHg2MDI3LCAweDAwMDEsIDB4NzgwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDAwMiwKLQkweDY2YWEsIDB4NjZjYiwgMHg2NzFlLCAweDY2YjAsIDB4NjZjYiwgMHg2NmFhLCAweDY2YTgsIDB4NjZhOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDY1ODEsIDB4MDgwYywgMHg2YzUwLCAweDAwY2UsIDB4MDAwNSwKLQkweDYyYzAsIDB4ODJmZiwgMHgxMTEwLCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweDQ4MWIsIDB4MDgwYywKLQkweDY1MGQsIDB4NzgyOCwgMHhhMDkyLCAweDAwYzgsIDB4MTIyOCwgMHg4MDAwLCAweDc4MmEsIDB4MDgwYywKLQkweDQ4NTUsIDB4MGM4OCwgMHgwODBjLCAweDQ4MWIsIDB4NzgwNywgMHgwMDAzLCAweDc4MjcsIDB4MDAwMCwKLQkweDc4MmIsIDB4MDAwMCwgMHgwYzQwLCAweDA4MGMsIDB4NjU4MSwgMHgzYzAwLCAweDAwMDYsIDB4MjAxMSwKLQkweDAyMDksIDB4MjBlMSwgMHg0MDAwLCAweDIyMTQsIDB4MDAwZSwgMHgyMGUwLCAweDgyZmYsIDB4MDE3OCwKLQkweDYyYzAsIDB4ODJmZiwgMHgxMTYwLCAweDc4MmIsIDB4MDAwMCwgMHg3ODI0LCAweGEwNjUsIDB4MDkwYywKLQkweDE0ZjYsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsIDB4ODBhNywgMHgwMGNlLCAweDAwMDUsIDB4MzkwMCwKLQkweGEwODIsIDB4YjBlOCwgMHgxMjEwLCAweDA4MGMsIDB4N2Q4ZCwgMHgwMGM2LCAweDc4MjQsIDB4YTA2NSwKLQkweDA5MGMsIDB4MTRmNiwgMHg3ODA0LCAweGEwODYsIDB4MDAwNCwgMHgwOTA0LCAweDY3NWUsIDB4NzgyOCwKLQkweGEwOTIsIDB4MjcxMCwgMHgxMjMwLCAweDgwMDAsIDB4NzgyYSwgMHgwMGNlLCAweDA4MGMsIDB4NzgyNywKLQkweDBjMjAsIDB4NjEwNCwgMHhhMTg2LCAweDAwMDMsIDB4MTE4OCwgMHgwMGU2LCAweDIwNzEsIDB4YWQwMCwKLQkweDcwZGMsIDB4MDBlZSwgMHhkMDhjLCAweDAxNTAsIDB4MDBjNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwKLQkweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDQ4NWUsIDB4MDBlZSwgMHgwMGNlLCAweDA4MGMsIDB4YWNhMiwKLQkweDIwMDksIDB4MDAxNCwgMHgwODBjLCAweDgwYTcsIDB4MDBjZSwgMHgwODM4LCAweDIwMDEsIDB4YWZlMywKLQkweDIwMDMsIDB4MDAwMCwgMHg2MmMwLCAweDgyZmYsIDB4MTE2MCwgMHg3ODJiLCAweDAwMDAsIDB4NzgyNCwKLQkweGEwNjUsIDB4MDkwYywgMHgxNGY2LCAweDIwMDksIDB4MDAxMywgMHgwODBjLCAweDgwZmIsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDM5MDAsIDB4YTA4MiwgMHhiMGU4LCAweDEyMTAsIDB4MDgwYywKLQkweDdkOGQsIDB4NzgyNCwgMHhhMDA1LCAweDA5MGMsIDB4MTRmNiwgMHg3ODFjLCAweGEwNmQsIDB4MDkwYywKLQkweDE0ZjYsIDB4NjgwMCwgMHhjMGRjLCAweDY4MDIsIDB4NzkyNCwgMHgyMTYwLCAweDA4MGMsIDB4ODA3OCwKLQkweDY5M2MsIDB4ODFmZiwgMHgwOTBjLCAweDE0ZjYsIDB4ODEwOSwgMHg2OTNlLCAweDY4NTQsIDB4YTAxNSwKLQkweDAxMTAsIDB4N2ExZSwgMHgwMDEwLCAweDc5MTgsIDB4NzkxZSwgMHg3ODA3LCAweDAwMDAsIDB4NzgyNywKLQkweDAwMDAsIDB4MDBkZSwgMHgwMGNlLCAweDA4MGMsIDB4NmM1MCwgMHgwODg4LCAweDYxMDQsIDB4YTE4NiwKLQkweDAwMDIsIDB4MDEyOCwgMHhhMTg2LCAweDAwMDQsIDB4MDExMCwgMHgwODA0LCAweDY2ZjcsIDB4NzgwOCwKLQkweGFjMDYsIDB4MDkwNCwgMHg2NmY3LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDY3ZWUsIDB4MDBjZSwKLQkweDA4MGMsIDB4NmM1MCwgMHgwODA0LCAweDY2ZTUsIDB4MDBjNiwgMHg2MDI3LCAweDAwMDIsIDB4NjJjOCwKLQkweDYwYzQsIDB4YTIwNSwgMHgxMTc4LCAweDc5M2MsIDB4YTFlNSwgMHgwMDAwLCAweDAxMzAsIDB4MjAwOSwKLQkweDAwNDksIDB4MDgwYywgMHg4MGE3LCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweGFmZTYsIDB4MjAxMywKLQkweDAwMDAsIDB4MGNjOCwgMHgzOTA4LCAweGExOTIsIDB4YjBlOCwgMHgxMjEwLCAweDA4MGMsIDB4N2Q4ZCwKLQkweDc5M2MsIDB4ODFmZiwgMHgwZDkwLCAweDc5M2MsIDB4YTE4OCwgMHgwMDA3LCAweDIxMGMsIDB4YTE4ZSwKLQkweDAwMDYsIDB4MTEzOCwgMHg2MDE0LCAweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTIsIDB4NjAxNiwKLQkweDBjMTAsIDB4NjAxNCwgMHhhMDg0LCAweDAxODQsIDB4YTA4NSwgMHgwMDE2LCAweDYwMTYsIDB4MDhkOCwKLQkweDAwMDYsIDB4MDAxNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwKLQkweDJjMDgsIDB4MjA2MSwgMHhhZmM3LCAweDYwMjAsIDB4ODAwMCwgMHg2MDIyLCAweDYwMTAsIDB4YTAwNSwKLQkweDAxNDgsIDB4YTA4MCwgMHgwMDAzLCAweDIxMDIsIDB4NjExMiwgMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwKLQkweDAwMGUsIDB4MDAwNSwgMHg2MTE2LCAweDYxMTIsIDB4MGNjMCwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywKLQkweDYwMDAsIDB4ZDBkNCwgMHgwMTY4LCAweDY4MjAsIDB4ODAwMCwgMHg2ODIyLCAweGEwODYsIDB4MDAwMSwKLQkweDExMTAsIDB4MmMwMCwgMHg2ODFlLCAweDY4MDQsIDB4YTA4NCwgMHgwMDA3LCAweDA4MDQsIDB4NmM1NiwKLQkweGMwZDUsIDB4NjAwMiwgMHg2ODE4LCAweGEwMDUsIDB4MDE1OCwgMHg2MDU2LCAweDYwNWIsIDB4MDAwMCwKLQkweDAwMDYsIDB4MmMwMCwgMHg2ODFhLCAweDAwZGUsIDB4Njg1YSwgMHgyMDY5LCAweGFmYzcsIDB4MGMxOCwKLQkweDYwNTYsIDB4NjA1YSwgMHgyYzAwLCAweDY4MWEsIDB4NjgxZSwgMHgwOGU4LCAweDAwMDYsIDB4MDAxNiwKLQkweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAwOCwgMHhhMDA1LCAweDAxNDgsIDB4YTA4MCwKLQkweDAwMDMsIDB4MjEwMiwgMHg2MTBhLCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwKLQkweDYxMGUsIDB4NjEwYSwgMHgwY2MwLCAweDAwYzYsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjAzNCwgMHhhMDA1LCAweDAxMzAsIDB4YTA4MCwgMHgwMDAzLCAweDIxMDIsIDB4NjEzNiwKLQkweDAwY2UsIDB4MDAwNSwgMHg2MTNhLCAweDYxMzYsIDB4MGNkOCwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwKLQkweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA3MSwKLQkweGFmYzcsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4MjA5MSwgMHg4MDAwLCAweDhjZmYsIDB4MDkwNCwKLQkweDY4ODksIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMjA2LCAweDE5MDQsIDB4Njg4NCwKLQkweDg3ZmYsIDB4MDEyMCwgMHg2MDUwLCAweGExMDYsIDB4MTkwNCwgMHg2ODg0LCAweDcwM2MsIDB4YWMwNiwKLQkweDExNzAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDcwMzMsIDB4MDAwMCwKLQkweDcwM2YsIDB4MDAwMCwgMHg3MDQzLCAweDAwMDAsIDB4NzA0NywgMHgwMDAwLCAweDAwM2UsIDB4NzAzOCwKLQkweGFjMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2M2EsIDB4NzAzNCwgMHhhYzM2LCAweDExNDAsIDB4MmMwMCwKLQkweGFmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMzYsIDB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywKLQkweDAwNjYsIDB4MmMwMCwgMHhhZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwKLQkweDAwMDAsIDB4MDgwYywgMHg5NTk2LCAweDAxOTgsIDB4NjAxMCwgMHgyMDY4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MTUxMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywKLQkweDk3ZmQsIDB4MDgwYywgMHhhYmZhLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDgwYywKLQkweDk3NGUsIDB4MDBjZSwgMHgwODA0LCAweDY4MmUsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwKLQkweDY4MmUsIDB4MDEyZSwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDZlLCAweDAwN2UsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MTlkMCwKLQkweDA4MGMsIDB4YWJmYSwgMHgwODBjLCAweGE5MWYsIDB4MGMxMCwgMHgwMDA2LCAweDAwNjYsIDB4MDBjNiwKLQkweDAwZDYsIDB4MDBmNiwgMHgyMDMxLCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwKLQkweGFmYzcsIDB4NzgzOCwgMHhhMDY1LCAweDA1NTgsIDB4NjAwYywgMHgwMDA2LCAweDYwMGYsIDB4MDAwMCwKLQkweDc4M2MsIDB4YWMwNiwgMHgxMTcwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4N2E2NCwKLQkweDc4MzMsIDB4MDAwMCwgMHg3ODNmLCAweDAwMDAsIDB4Nzg0MywgMHgwMDAwLCAweDc4NDcsIDB4MDAwMCwKLQkweDAwM2UsIDB4MDgwYywgMHg5NTk2LCAweDAxNzgsIDB4NjAxMCwgMHgyMDY4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MTFiMCwgMHg2ODM3LCAweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywKLQkweDUxMGMsIDB4MDgwYywgMHg5NzQyLCAweDA4MGMsIDB4OTc0ZSwgMHgwMDBlLCAweDA4OTgsIDB4N2UzYSwKLQkweDdlMzYsIDB4MDEyZSwgMHgwMGZlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA2LCAweDFkMzAsIDB4MDgwYywgMHhhOTFmLCAweDBjNjAsIDB4MDAxNiwKLQkweDAwMjYsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MDA5OSwgMHgwODBjLCAweDY5YTksIDB4MDA4ZSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZjYsIDB4MDEyNiwgMHgyMDc5LCAweGFmYzcsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg2YTM2LCAweDA4MGMsIDB4NmFhOCwgMHgwMTJlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFmYzcsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwKLQkweDA5MDQsIDB4Njk4NSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweGEyMDYsIDB4MTkwNCwKLQkweDY5ODAsIDB4ODhmZiwgMHgwMTIwLCAweDYwNTAsIDB4YTEwNiwgMHgxOTA0LCAweDY5ODAsIDB4NzAyNCwKLQkweGFjMDYsIDB4MTUzOCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDAxZjAsIDB4MDgwYywKLQkweDY1ODEsIDB4MDgwYywgMHg3ODM0LCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzAyNywKLQkweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwKLQkweDY4MDMsIDB4MDEwMCwgMHg2ODAzLCAweDAwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwKLQkweDAxMTAsIDB4NjgyNywgMHgwMDAxLCAweDAwM2UsIDB4MDAyMCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwKLQkweDA0YjgsIDB4NzAxNCwgMHhhYzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjE2LCAweDcwMTAsIDB4YWMzNiwKLQkweDExNDAsIDB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDEyLCAweDAwMTAsIDB4NzAxMywKLQkweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4YWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwKLQkweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE4OCwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDAzLCAweDE1MTAsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywKLQkweDAwMDAsIDB4MDgwYywgMHg5N2ZkLCAweDA4MGMsIDB4YWJmYSwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDk3NDIsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4N2I4OCwgMHgwMGNlLCAweDA4MDQsIDB4NjkwZiwKLQkweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4NjkwZiwgMHgwMTJlLCAweDAwMGUsIDB4MDAxZSwKLQkweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDYsIDB4MTEyOCwgMHgwODBjLCAweGFiZmEsIDB4MDgwYywgMHhhOTFmLCAweDBjMTAsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwMiwgMHgxMTI4LCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDA5NjgsIDB4MDhjOCwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA1LCAweDE5YTgsIDB4NjAwNCwgMHhhMDg2LCAweDAwODUsIDB4MGQ1MCwKLQkweDA4ODAsIDB4MDBjNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGEyODAsIDB4YWUzNCwKLQkweDIwMDQsIDB4YTA2NSwgMHgwOTA0LCAweDZhMzIsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDA2NiwKLQkweDIwNzEsIDB4YWZjNywgMHg2NjU0LCAweDcwMTgsIDB4YWMwNiwgMHgxMTA4LCAweDc2MWEsIDB4NzAxYywKLQkweGFjMDYsIDB4MTEzMCwgMHg4NmZmLCAweDExMTgsIDB4NzAxOCwgMHg3MDFlLCAweDAwMDgsIDB4NzYxZSwKLQkweDYwNTgsIDB4YTA3ZCwgMHgwMTA4LCAweDdlNTYsIDB4YTZlZCwgMHgwMDAwLCAweDAxMTAsIDB4MmYwMCwKLQkweDY4NWEsIDB4NjA1NywgMHgwMDAwLCAweDYwNWIsIDB4MDAwMCwgMHg2MDAwLCAweGMwZDQsIDB4YzBkYywKLQkweDYwMDIsIDB4MDgwYywgMHg0YzA3LCAweDA5MDQsIDB4NmEyZSwgMHg3NjI0LCAweDg2ZmYsIDB4MDVlOCwKLQkweGE2ODAsIDB4MDAwNCwgMHgyMDA0LCAweGFkMDYsIDB4MTVjMCwgMHgwMGQ2LCAweDIwNjksIDB4MDEwMCwKLQkweDY4YzAsIDB4YTAwNSwgMHgwNTQ4LCAweDA4MGMsIDB4NjU4MSwgMHgwODBjLCAweDc4MzQsIDB4NjhjMywKLQkweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwKLQkweDZiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAxMjAsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwKLQkweDAwZGUsIDB4MDBjNiwgMHg2MDNjLCAweGEwMDUsIDB4MDExMCwgMHg4MDAxLCAweDYwM2UsIDB4MjY2MCwKLQkweDA4MGMsIDB4OTc0ZSwgMHgwMGNlLCAweDAwNDgsIDB4MDBkZSwgMHgwMGM2LCAweDI2NjAsIDB4NjAwMywKLQkweDAwMDksIDB4NjMwYSwgMHgwMGNlLCAweDA4MDQsIDB4NjlkOSwgMHg4ZGZmLCAweDAxNTgsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg5N2ZkLCAweDA4MGMsIDB4YWJmYSwKLQkweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDdiODgsIDB4MDgwNCwgMHg2OWQ5LCAweDAwNmUsIDB4MDBkZSwKLQkweDAwZWUsIDB4MDBmZSwgMHgwMTJlLCAweDAwMGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMDYsIDB4MDA2NiwKLQkweDAwYzYsIDB4MDBkNiwgMHgyMDMxLCAweDAwMDAsIDB4NzgxNCwgMHhhMDY1LCAweDA5MDQsIDB4NmE4OCwKLQkweDYwMGMsIDB4MDAwNiwgMHg2MDBmLCAweDAwMDAsIDB4NzgyNCwgMHhhYzA2LCAweDE1NDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDAxZjAsIDB4MDgwYywgMHg2NTgxLCAweDA4MGMsIDB4NzgzNCwKLQkweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzgyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwKLQkweDAwM2UsIDB4MDAyOCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgyYzMwLCAweDAwYjAsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjAxYywgMHhhMDg2LCAweDAwMDMsIDB4MTFiOCwKLQkweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDk3NDIsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4N2I4OCwgMHgwMDBlLCAweDA4MDQsIDB4NmEzZCwKLQkweDdlMTYsIDB4N2UxMiwgMHgwMGRlLCAweDAwY2UsIDB4MDA2ZSwgMHgwMDBlLCAweDAwMDUsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNiwgMHgxMTE4LCAweDA4MGMsIDB4YTkxZiwgMHgwYzU4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDIsIDB4MTEyOCwgMHg2MDA0LCAweGEwODYsIDB4MDA4NSwgMHgwOWQwLCAweDBjMTAsIDB4NjAxYywKLQkweGEwODYsIDB4MDAwNSwgMHgxOWYwLCAweDYwMDQsIDB4YTA4NiwgMHgwMDg1LCAweDBkNjAsIDB4MDhjOCwKLQkweDAwMDYsIDB4MDA2NiwgMHgwMGM2LCAweDAwZDYsIDB4NzgxOCwgMHhhMDY1LCAweDA5MDQsIDB4NmIwZSwKLQkweDYwNTQsIDB4MDAwNiwgMHg2MDU3LCAweDAwMDAsIDB4NjA1YiwgMHgwMDAwLCAweDYwMDAsIDB4YzBkNCwKLQkweGMwZGMsIDB4NjAwMiwgMHgwODBjLCAweDRjMDcsIDB4MDkwNCwgMHg2YjBiLCAweDdlMjQsIDB4ODZmZiwKLQkweDA1ZTgsIDB4YTY4MCwgMHgwMDA0LCAweDIwMDQsIDB4YWQwNiwgMHgxNWMwLCAweDAwZDYsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDA1NDgsIDB4MDgwYywgMHg2NTgxLCAweDA4MGMsIDB4NzgzNCwKLQkweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDdjYTgsIDB4NzgyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwKLQkweDAxNDAsIDB4NmIwNCwgMHhhMzg0LCAweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwKLQkweDAwM2UsIDB4MDBkZSwgMHgwMGM2LCAweDYwM2MsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4NjAzZSwKLQkweDI2NjAsIDB4MDgwYywgMHg5NzRlLCAweDAwY2UsIDB4MDA0OCwgMHgwMGRlLCAweDAwYzYsIDB4MjY2MCwKLQkweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwY2UsIDB4MDgwNCwgMHg2YWJhLCAweDhkZmYsIDB4MDEzOCwKLQkweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDdiODgsIDB4MDgwNCwgMHg2YWJhLCAweDAwMGUsIDB4MDgwNCwgMHg2YWFkLCAweDc4MWUsIDB4NzgxYSwKLQkweDAwZGUsIDB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDA2NiwKLQkweDYwMDAsIDB4ZDBkYywgMHgwMTg4LCAweDYwNGMsIDB4YTA2ZCwgMHgwMTcwLCAweDY4NDgsIDB4YTYwNiwKLQkweDExNTgsIDB4MjA3MSwgMHhhZmM3LCAweDcwMjQsIDB4YTAzNSwgMHgwMTMwLCAweGEwODAsIDB4MDAwNCwKLQkweDIwMDQsIDB4YWQwNiwgMHgxMTA4LCAweDAwMjEsIDB4MDA2ZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc4YzAsIDB4YTAwNSwgMHgxMTM4LCAweDAwYzYsIDB4MjY2MCwKLQkweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwY2UsIDB4MDRhMCwgMHgwODBjLCAweDc4MzQsIDB4NzhjMywKLQkweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNzksIDB4MDE0MCwKLQkweDdiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAxMjAsIDB4NzgwMywgMHgwMTAwLCAweDc4MDMsIDB4MDAwMCwKLQkweDIwNzksIDB4MDEwMCwgMHg3ODI0LCAweGQwODQsIDB4MDExMCwgMHg3ODI3LCAweDAwMDEsIDB4MDgwYywKLQkweDdjYTgsIDB4MDAzZSwgMHgwODBjLCAweDRjMDcsIDB4MDBjNiwgMHg2MDNjLCAweGEwMDUsIDB4MDExMCwKLQkweDgwMDEsIDB4NjAzZSwgMHgyNjYwLCAweDA4MGMsIDB4ODA3OCwgMHgwMGNlLCAweDY4MzcsIDB4MDEwMywKLQkweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4OTdmZCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDdiODgsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAwNCwKLQkweGEwODQsIDB4MDAwNywgMHgwMDAyLCAweDZiODUsIDB4NmI4OCwgMHg2YjllLCAweDZiYjcsIDB4NmJmMCwKLQkweDZiODUsIDB4NmI4MywgMHg2YjgzLCAweDA4MGMsIDB4MTRmNiwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweDcwMjQsIDB4YTA2NSwgMHgwMTQ4LCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDYwMGMsIDB4YTAxNSwKLQkweDAxNTAsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwKLQkweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDcyMTYsIDB4NzIxMiwgMHgwY2IwLCAweDYwMTgsIDB4MjA2MCwKLQkweDA4MGMsIDB4NGMwNywgMHg2MDAwLCAweGMwZGMsIDB4NjAwMiwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwKLQkweDAxMjAsIDB4NjA1NCwgMHhhMDE1LCAweDAxNDAsIDB4NzIxZSwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNywKLQkweDAwMDAsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4NzIxOCwgMHg3MjFlLCAweDBjYjAsIDB4NzAyNCwKLQkweGEwNjUsIDB4MDU5OCwgMHg3MDBjLCAweGFjMDYsIDB4MTE2MCwgMHgwODBjLCAweDdiODgsIDB4NjAwYywKLQkweGEwMTUsIDB4MDEyMCwgMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgwNDI4LCAweDcyMGUsIDB4NzIwYSwKLQkweDA0MTAsIDB4NzAxNCwgMHhhYzA2LCAweDExNjAsIDB4MDgwYywgMHg3Yjg4LCAweDYwMGMsIDB4YTAxNSwKLQkweDAxMjAsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsIDB4MDBiMCwgMHg3MjE2LCAweDcyMTIsIDB4MDA5OCwKLQkweDYwMTgsIDB4MjA2MCwgMHgwODBjLCAweDRjMDcsIDB4NjAwMCwgMHhjMGRjLCAweDYwMDIsIDB4MDgwYywKLQkweDdiODgsIDB4NzAxYywgMHhhMDY1LCAweDAxMzgsIDB4NjA1NCwgMHhhMDE1LCAweDAxMTAsIDB4NzIxZSwKLQkweDAwMTAsIDB4NzIxOCwgMHg3MjFlLCAweDcwMjcsIDB4MDAwMCwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweDcwMjQsIDB4YTA2NSwgMHgwMTQwLCAweDA4MGMsIDB4N2I4OCwgMHg2MDBjLCAweGEwMTUsIDB4MDE1MCwKLQkweDcyMGUsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4N2NhOCwgMHg3MDI3LCAweDAwMDAsIDB4MDBjZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MjBlLCAweDcyMGEsIDB4MGNiMCwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywKLQkweDY4MzAsIDB4YTA4NCwgMHgwMDAzLCAweDAwMDIsIDB4NmMxMiwgMHg2YzE0LCAweDZjMzgsIDB4NmMxMCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwgMHg2ODQwLCAweGEwODYsIDB4MDAwMSwKLQkweDAxYjgsIDB4NjgzYywgMHhhMDY1LCAweDAxMzAsIDB4NjAwYywgMHhhMDE1LCAweDAxNzAsIDB4NmEzYSwKLQkweDYwMGYsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLCAweDIwMTEsIDB4YWZlNiwKLQkweDIwMTMsIDB4MDAwMCwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHg2ODNhLCAweDY4MzYsIDB4MGM5MCwKLQkweDY4NDMsIDB4MDAwMCwgMHg2ODM4LCAweGEwNjUsIDB4MGQ2OCwgMHg2MDAzLCAweDAwMDMsIDB4MGM1MCwKLQkweDAwYzYsIDB4Njg0MywgMHgwMDAwLCAweDY4NDcsIDB4MDAwMCwgMHg2ODNjLCAweGEwNjUsIDB4MDE2OCwKLQkweDYwMGMsIDB4YTAxNSwgMHgwMTMwLCAweDZhM2EsIDB4NjAwZiwgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwKLQkweDAwMjAsIDB4NjgzZiwgMHgwMDAwLCAweDY4M2EsIDB4NjgzNiwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwKLQkweDAwZDYsIDB4MjA2OSwgMHhhZmM3LCAweDY4MDQsIDB4YTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4NmM2MSwKLQkweDZjZmQsIDB4NmNmZCwgMHg2Y2ZkLCAweDZjZmQsIDB4NmNmZiwgMHg2YzVmLCAweDZjNWYsIDB4MDgwYywKLQkweDE0ZjYsIDB4NjgyMCwgMHhhMDA1LCAweDExMTAsIDB4MDBkZSwgMHgwMDA1LCAweDAwYzYsIDB4NjgwYywKLQkweGEwNjUsIDB4MDE1MCwgMHg2ODA3LCAweDAwMDQsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MDgwYywKLQkweDZkNDksIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4NjgxNCwgMHhhMDY1LCAweDAxNTAsIDB4NjgwNywKLQkweDAwMDEsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg2ZDQ5LCAweDAwY2UsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgwMDM2LCAweDZhMWMsIDB4YTJmNSwgMHgwMDAwLCAweDA5MDQsIDB4NmNmOSwKLQkweDcwNGMsIDB4YTAwZCwgMHgwMTE4LCAweDcwODgsIDB4YTAwNSwgMHgwMWEwLCAweDcwNTQsIDB4YTA3NSwKLQkweDAxMjAsIDB4YTIwZSwgMHgwOTA0LCAweDZjZjksIDB4MDAyOCwgMHg2ODE4LCAweGEyMGUsIDB4MDkwNCwKLQkweDZjZjksIDB4MjA3MCwgMHg3MDRjLCAweGEwMGQsIDB4MGQ4OCwgMHg3MDg4LCAweGEwMDUsIDB4MWQ3MCwKLQkweDJlMDAsIDB4NjgxZSwgMHg3MzNjLCAweDcwMzgsIDB4YTMwMiwgMHgxZTQwLCAweDA4MGMsIDB4ODA0ZiwKLQkweDA5MDQsIDB4NmNmOSwgMHg4MzE4LCAweDczM2UsIDB4NjExMiwgMHgyZTEwLCAweDYyMWEsIDB4YTE4MCwKLQkweDAwMTQsIDB4MjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4NjA1YSwgMHhhMTgwLCAweDAwMTQsIDB4MjAwMywKLQkweDAwMDAsIDB4YTE4MCwgMHgwMDE1LCAweDIwMDQsIDB4YTA4YSwgMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwKLQkweDE5OTksIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsIDB4YTMxOCwgMHg2MzE2LCAweDAwM2UsIDB4MDBmNiwKLQkweDJjNzgsIDB4NzFhMCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExMTAsIDB4ZDFiYywKLQkweDAxNTAsIDB4NzEwMCwgMHhkMWY0LCAweDAxMjAsIDB4NzExNCwgMHhhMThjLCAweDAwZmYsIDB4MDA0MCwKLQkweDIwMDksIDB4MDAwMCwgMHgwMDI4LCAweGExZTAsIDB4MmJlNiwgMHgyYzBkLCAweGExOGMsIDB4MDBmZiwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweDA4MGMsIDB4NzM2ZiwgMHg3MzAwLCAweGMzZGQsIDB4NzMwMiwKLQkweDY4MDcsIDB4MDAwMiwgMHgyZjE4LCAweDZiMjYsIDB4NjgyYiwgMHgwMDAwLCAweDc4MWYsIDB4MDAwMywKLQkweDc4MDMsIDB4MDAwMSwgMHg3ODA3LCAweDAwNDAsIDB4MDBmZSwgMHgwMGVlLCAweDAwY2UsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDAzZSwgMHgwMGVlLCAweDAwY2UsIDB4MGNkMCwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwKLQkweDY4MGMsIDB4YTA2NSwgMHgwMTM4LCAweDY4MDcsIDB4MDAwNCwgMHg2ODI2LCAweDY4MmIsIDB4MDAwMCwKLQkweDA4MGMsIDB4NmQ0OSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZDYsIDB4MjA2OSwKLQkweGFmYzcsIDB4NjgzMCwgMHhhMDg2LCAweDAwMDAsIDB4MTFjMCwgMHgyMDAxLCAweGFkMGMsIDB4MjAwYywKLQkweGQxYmMsIDB4MTU1MCwgMHg2ODM4LCAweGEwN2QsIDB4MDE4MCwgMHg2ODMzLCAweDAwMDEsIDB4NjgzZSwKLQkweDY4NDcsIDB4MDAwMCwgMHgwMTI2LCAweDAwZjYsIDB4MjA5MSwgMHgyNDAwLCAweDAwMmUsIDB4MDgwYywKLQkweDFlZTYsIDB4MTEzMCwgMHgwMTJlLCAweDA4MGMsIDB4NzZhNSwgMHgwMGRlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAxMmUsIDB4ZTAwMCwgMHg2ODQzLCAweDAwMDAsIDB4NzgwMywgMHgwMDAyLCAweDc4MGMsIDB4YTAxNSwKLQkweDAxNDAsIDB4NmEzYSwgMHg3ODBmLCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwKLQkweDBjNjAsIDB4NjgzYSwgMHg2ODM2LCAweDBjYzAsIDB4YzFiYywgMHgyMTAyLCAweDA4MGMsIDB4NTdkMSwKLQkweDA4ODgsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MDAwYiwgMHgwMDA1LCAweDZkNTcsIDB4NmQ1YywKLQkweDcyMTAsIDB4NzMyYywgMHg2ZDVjLCAweDcyMTAsIDB4NzMyYywgMHg2ZDU3LCAweDZkNWMsIDB4MDgwYywKLQkweDZiNzMsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDBjNiwKLQkweDAwZjYsIDB4NjAwNCwgMHhhMDhhLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweDYxMTgsIDB4MjE3OCwKLQkweDc5YTAsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQxYmMsIDB4MDE1MCwKLQkweDc5MDAsIDB4ZDFmNCwgMHgwMTIwLCAweDc5MTQsIDB4YTE4YywgMHgwMGZmLCAweDAwNDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDAyOCwgMHhhMWY4LCAweDJiZTYsIDB4MmYwZCwgMHhhMThjLCAweDAwZmYsIDB4MmM3OCwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweGEwOGEsIDB4MDA0MCwgMHgxYTA0LCAweDZkZDAsIDB4MDAzMywKLQkweDAwZmUsIDB4MDBjZSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMDA1LCAweDZlN2MsIDB4NmVjNywKLQkweDZlZjQsIDB4NmZjMSwgMHg2ZmVmLCAweDZmZjcsIDB4NzAxZCwgMHg3MDJlLCAweDcwM2YsIDB4NzA0NywKLQkweDcwNWQsIDB4NzA0NywgMHg3MGI3LCAweDcwMmUsIDB4NzBkOCwgMHg3MGUwLCAweDcwM2YsIDB4NzBlMCwKLQkweDcwZjEsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NmRjZSwKLQkweDZkY2UsIDB4NmRjZSwgMHg2ZGNlLCAweDZkY2UsIDB4NzkwZCwgMHg3OTMyLCAweDc5NDcsIDB4Nzk2YSwKLQkweDc5OGIsIDB4NzAxZCwgMHg2ZGNlLCAweDcwMWQsIDB4NzA0NywgMHg2ZGNlLCAweDZlZjQsIDB4NmZjMSwKLQkweDZkY2UsIDB4N2RhYSwgMHg3MDQ3LCAweDZkY2UsIDB4N2RjYSwgMHg3MDQ3LCAweDZkY2UsIDB4NzAzZiwKLQkweDZlNzUsIDB4NmRlMCwgMHg2ZGNlLCAweDdkZWYsIDB4N2U2NCwgMHg3ZjNiLCAweDZkY2UsIDB4N2Y0YywKLQkweDcwMTgsIDB4N2Y2OCwgMHg2ZGNlLCAweDc5YTAsIDB4N2ZjMywgMHg2ZGNlLCAweDA4MGMsIDB4MTRmNiwKLQkweDIxMDAsIDB4MDAzMywgMHgwMGZlLCAweDAwY2UsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDAwNSwKLQkweDZkZGUsIDB4NmRkZSwgMHg2ZGRlLCAweDZlMTQsIDB4NmUzMiwgMHg2ZTQ4LCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwgMHg3ODEwLCAweDIwNjgsIDB4MjBhMywKLQkweDI0MTQsIDB4MjBhMywgMHgwMDE4LCAweDIwYTMsIDB4MDgwMCwgMHg2ODNjLCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4Njg1MCwKLQkweDIwYTIsIDB4Njg1NCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NjBjMywKLQkweDAwMTgsIDB4MDgwYywgMHg3ODIxLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDc4MTgsIDB4MjA2OCwKLQkweDY4YTAsIDB4MjA2OSwgMHhhZDAwLCAweDZhZDAsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDExMCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxMGUsIDB4MjBhMywgMHgwNTAwLCAweDIwYTMsIDB4MDAwMCwgMHg3ODEwLCAweGEwZTgsIDB4MDAwZiwKLQkweDY4MDgsIDB4MjBhMiwgMHg2ODBjLCAweDIwYTIsIDB4NjgxMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDY4MTgsIDB4MjBhMiwgMHg2ODFjLCAweDIwYTIsIDB4NjBjMywgMHgwMDEwLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwZGUsIDB4MDAwNSwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDIwYTMsIDB4NzgwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwgMHg4MDA3LCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwKLQkweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweGRmMTAsIDB4MjBhMywgMHgwMDM0LCAweDIwOTksIDB4YWQwNSwKLQkweDIwYTksIDB4MDAwNCwgMHg1M2E2LCAweDIwOTksIDB4YWQwMSwgMHgyMGE5LCAweDAwMDQsIDB4NTNhNiwKLQkweDIwOTksIDB4YWZhZCwgMHgyMGE5LCAweDAwMWEsIDB4MzMwNCwgMHg4MDA3LCAweDIwYTIsIDB4OTM5OCwKLQkweDFmMDQsIDB4NmU2NCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDA0YywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwKLQkweDYwOWEsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDIwYTMsIDB4NTIwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDBkNiwgMHgyMDY5LCAweGFkNTEsIDB4NjgwNCwKLQkweGQwODQsIDB4MDE1MCwgMHg2ODI4LCAweDIwYTMsIDB4MDAwMCwgMHgwMDE2LCAweDA4MGMsIDB4MjY4YSwKLQkweDIxYTIsIDB4MDAxZSwgMHgwMGRlLCAweDAwMjgsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YWQwNSwgMHg1M2E2LCAweDIwYTksIDB4MDAwNCwKLQkweDIwOTksIDB4YWQwMSwgMHg1M2E2LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYWMsIDB4MTEzOCwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4MiwgMHgwMDdmLCAweDAyMzgsIDB4MjAwMSwKLQkweGFkMWIsIDB4MjBhNiwgMHgyMDAxLCAweGFkMWMsIDB4MjBhNiwgMHgwMDQwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwMDEsIDB4YWQxNCwgMHgyMDA0LCAweGEwODQsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMWMsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4MDUwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwMSwKLQkweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExMzgsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODIsIDB4MDA3ZiwgMHgwMjM4LCAweDIwMDEsIDB4YWQxYiwgMHgyMGE2LCAweDIwMDEsIDB4YWQxYywKLQkweDIwYTYsIDB4MDA0MCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwMSwgMHhhZDE0LCAweDIwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjBhMiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhZDA1LCAweDUzYTYsIDB4NjBjMywKLQkweDAwMTAsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDAwYzYsIDB4NzgxOCwgMHgyMDYwLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDUwMzcsIDB4MDBjZSwKLQkweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4NiwgMHgwMDdlLCAweDExMzAsIDB4MjBhMywKLQkweDA0MDAsIDB4NjIwYywgMHhjMmI0LCAweDYyMGUsIDB4MDAxMCwgMHgyMGEzLCAweDAzMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwgMHhhMDg2LCAweDAwN2UsIDB4MTkwNCwKLQkweDZmODMsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhNCwgMHgwMWM4LCAweDIwOTksIDB4YWY4ZCwKLQkweDMzYTYsIDB4OTM5OCwgMHgyMGEzLCAweDAwMDAsIDB4OTM5OCwgMHgzMzA0LCAweGEwODQsIDB4MjAwMCwKLQkweDIwYTIsIDB4OTM5OCwgMHgzM2E2LCAweDkzOTgsIDB4MjBhMywgMHgwMDAwLCAweDkzOTgsIDB4MjAwMSwKLQkweDI3MTAsIDB4MjBhMiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgzM2E2LCAweDAwZDAsIDB4MjA5OSwKLQkweGFmOGQsIDB4MzNhNiwgMHg5Mzk4LCAweDMzYTYsIDB4OTM5OCwgMHgzMzA0LCAweDA4MGMsIDB4NTc0ZiwKLQkweDExMTgsIDB4YTA4NCwgMHgzN2ZmLCAweDAwMTAsIDB4YTA4NCwgMHgzZmZmLCAweDIwYTIsIDB4OTM5OCwKLQkweDMzYTYsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4YWQwNSwgMHg1M2E2LCAweDIwYTksIDB4MDAwNCwKLQkweDIwOTksIDB4YWQwMSwgMHg1M2E2LCAweDIwYTksIDB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwKLQkweDZmNWQsIDB4MjBhOSwgMHgwMDA4LCAweDIwYTMsIDB4MDAwMCwgMHgxZjA0LCAweDZmNjMsIDB4MjA5OSwKLQkweGFmOTUsIDB4MzMwNCwgMHhjMGRkLCAweDIwYTIsIDB4MjAwMSwgMHhhZDcxLCAweDIwMDQsIDB4ZDBlNCwKLQkweDAxNTgsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHg5Mzk4LCAweDkzOTgsIDB4OTM5OCwKLQkweDMzYTYsIDB4MjBhOSwgMHgwMDA0LCAweDAwMTAsIDB4MjBhOSwgMHgwMDA3LCAweDIwYTMsIDB4MDAwMCwKLQkweDFmMDQsIDB4NmY3ZSwgMHgwNDY4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGQwYTQsIDB4MDE0MCwKLQkweDIwMDEsIDB4YWY4ZSwgMHgyMDA0LCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweDI2Y2IsIDB4NjBlMiwKLQkweDIwOTksIDB4YWY4ZCwgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwKLQkweGFkMDUsIDB4NTNhNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHhhZDAxLCAweDUzYTYsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjBhMywgMHgwMDAwLCAweDFmMDQsIDB4NmZhMSwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMywKLQkweDAwMDAsIDB4MWYwNCwgMHg2ZmE3LCAweDIwOTksIDB4YWY5NSwgMHgyMGE5LCAweDAwMDgsIDB4NTNhNiwKLQkweDIwYTksIDB4MDAwOCwgMHgyMGEzLCAweDAwMDAsIDB4MWYwNCwgMHg2ZmIyLCAweDIwYTksIDB4MDAwYSwKLQkweDIwYTMsIDB4MDAwMCwgMHgxZjA0LCAweDZmYjgsIDB4NjBjMywgMHgwMDc0LCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwgMHgyMGEzLCAweDIwMTAsIDB4MjBhMywKLQkweDAwMTQsIDB4MjBhMywgMHgwODAwLCAweDIwYTMsIDB4MjAwMCwgMHhhMDA2LCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDAwZjYsIDB4MjA3OSwgMHhhZDUxLCAweDc5MDQsIDB4MDBmZSwKLQkweGQxYWMsIDB4MTExMCwgMHhhMDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMTEwLCAweGEwODUsIDB4MDAxMCwKLQkweGEwODUsIDB4MDAwMiwgMHgwMGQ2LCAweDA4MDQsIDB4NzA5OSwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4NTAwMCwgMHgwODA0LCAweDZmMGYsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MTBlLCAweDIwYTMsIDB4MjExMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYTIsIDB4MDAyMCwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxYWEsIDB4MjBhMywgMHgwMjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA0LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwKLQkweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMywKLQkweDIwYTMsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIwMCwgMHgwODA0LCAweDZmMGYsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDEwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgyOCwKLQkweGEwMDUsIDB4MDExMCwgMHgyMGEyLCAweDAwMTAsIDB4MjBhMywgMHgwMDAzLCAweDc4MTAsIDB4MjBhMiwKLQkweDYwYzMsIDB4MDAwOCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwgMHgwMGQ2LCAweDIwYTEsIDB4MDIwYiwKLQkweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAyMTAsIDB4MjBhMywgMHgwMDE0LCAweDIwYTMsIDB4MDgwMCwKLQkweDc4MTgsIDB4MjA2OCwgMHg2ODk0LCAweGEwODYsIDB4MDAxNCwgMHgxMTc4LCAweDY5OTgsIDB4YTE4NCwKLQkweGMwMDAsIDB4MTE0MCwgMHhkMWVjLCAweDAxMTgsIDB4MjBhMywgMHgyMTAwLCAweDAwNDAsIDB4MjBhMywKLQkweDAxMDAsIDB4MDAyOCwgMHgyMGEzLCAweDA0MDAsIDB4MDAxMCwgMHgyMGEzLCAweDA3MDAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgwMGY2LCAweDIwNzksIDB4YWQ1MSwKLQkweDc5MDQsIDB4MDBmZSwgMHhkMWFjLCAweDExMTAsIDB4YTA4NSwgMHgwMDIwLCAweGQxYTQsIDB4MDExMCwKLQkweGEwODUsIDB4MDAxMCwgMHgyMDA5LCAweGFkNzMsIDB4MjEwYywgMHhkMTg0LCAweDExMTAsIDB4YTA4NSwKLQkweDAwMDIsIDB4MDAyNiwgMHgyMDA5LCAweGFkNzEsIDB4MjEwYywgMHhkMWU0LCAweDAxMzAsIDB4YzBjNSwKLQkweGEwOTQsIDB4MDAzMCwgMHhhMjk2LCAweDAwMTAsIDB4MDE0MCwgMHhkMWVjLCAweDAxMzAsIDB4YTA5NCwKLQkweDAwMzAsIDB4YTI5NiwgMHgwMDEwLCAweDAxMDgsIDB4YzBiZCwgMHgwMDJlLCAweDIwYTIsIDB4MjBhMiwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NzgyMSwgMHgwMGRlLCAweDAwMDUsIDB4MjBhMSwKLQkweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIxMCwgMHgyMGEzLCAweDAwMTQsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMjAwLCAweDA4MDQsIDB4NmU4MiwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMywgMHgyMGEzLCAweDJhMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxYWEsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMGIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwKLQkweDAwNDYsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDM4LCAweDAwMjYsIDB4MDAzNiwKLQkweDAwNDYsIDB4MjAxOSwgMHgyMjAwLCAweDIwMjEsIDB4MDEwMCwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwKLQkweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAxNCwgMHhhMjg2LCAweDAwN2UsIDB4MTFhMCwKLQkweGEzODUsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4ZmZmZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwKLQkweGFkMTQsIDB4MjIxNCwgMHgyMDAxLCAweGFmOWQsIDB4MjAwNCwgMHhhMDA1LCAweDAxMTgsIDB4MjAxMSwKLQkweGFkMWMsIDB4MjIxNCwgMHgyMmEyLCAweDA0ZDAsIDB4YTI4NiwgMHgwMDdmLCAweDExMzgsIDB4MDBkNiwKLQkweGEzODUsIDB4MDBmZiwgMHgyMGEyLCAweDIwYTMsIDB4ZmZmZCwgMHgwMGM4LCAweDIwMDEsIDB4YWQzNCwKLQkweDIwMDQsIDB4ZDBhYywgMHgxMTEwLCAweGQyYmMsIDB4MDFjOCwgMHhhMjg2LCAweDAwODAsIDB4MDBkNiwKLQkweDExMzAsIDB4YTM4NSwgMHgwMGZmLCAweDIwYTIsIDB4MjBhMywgMHhmZmZjLCAweDAwNDAsIDB4YTJlOCwKLQkweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwKLQkweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwgMHgwMDgwLCAweDAwZDYsIDB4YTJlOCwKLQkweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEzMDUsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMDExLCAweGFkMTQsIDB4MjIxNCwgMHgyMmEyLCAweGE0ODUsIDB4MDAyOSwKLQkweDIwYTIsIDB4MDA0ZSwgMHgwMDNlLCAweDIwYTMsIDB4MDAwMCwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyZmEyLCAweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDAyZSwgMHgwMDA1LCAweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwKLQkweDIwYTMsIDB4MDJmZiwgMHgyMDExLCAweGZmZmMsIDB4MjJhMiwgMHgwMGQ2LCAweDIwNjksIDB4YWQxYiwKLQkweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MjBhMywgMHgyMDI5LCAweDIwYTMsIDB4MDAwMCwKLQkweDA4ZTAsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweGZjMDIsIDB4MjBhMywKLQkweDAwMDAsIDB4MDAwNSwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDMzMDAsIDB4MjAyMSwKLQkweDA4MDAsIDB4MDAzOCwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIzMDAsIDB4MjAyMSwKLQkweDAxMDAsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LCAweGEwOTIsIDB4MDA3ZSwKLQkweDAyZDgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEzMDUsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHg2ODEwLCAweGEwMDUsIDB4MTE0MCwgMHg2ODE0LCAweGEwMDUsIDB4MTEyOCwKLQkweDIwYTMsIDB4MDBmZiwgMHgyMGEzLCAweGZmZmUsIDB4MDAyOCwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwKLQkweDhkNjgsIDB4MmRhNiwgMHgwMGRlLCAweDAwODAsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTMwNSwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwMTEsIDB4YWQxNCwgMHgyMjE0LCAweDIyYTIsIDB4YTQ4NSwgMHgwMDk4LCAweDIwYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MDA0ZSwgMHgwMDNlLCAweDA4MGMsIDB4NzgxMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDdhMDgsIDB4MjJhMiwgMHgyZmEyLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDAyZSwKLQkweDAwMDUsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDdhMDgsIDB4MjJhMiwKLQkweDc4MTAsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAwMmUsIDB4MDAwNSwKLQkweDAwYzYsIDB4MDBmNiwgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwgMHgwYTBjLCAweDE0ZjYsIDB4YTA4YSwKLQkweDAwOGMsIDB4MWEwYywgMHgxNGY2LCAweDYxMTgsIDB4MjE3OCwgMHg3OWEwLCAweDIwMTEsIDB4YWQzNCwKLQkweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQxYmMsIDB4MDE1MCwgMHg3OTAwLCAweGQxZjQsIDB4MDEyMCwKLQkweDc5MTQsIDB4YTE4YywgMHgwMGZmLCAweDAwNDAsIDB4MjAwOSwgMHgwMDAwLCAweDAwMjgsIDB4YTFmOCwKLQkweDJiZTYsIDB4MmYwZCwgMHhhMThjLCAweDAwZmYsIDB4MmM3OCwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwKLQkweGEwODIsIDB4MDA4NSwgMHgwMDFiLCAweDAwZmUsIDB4MDBjZSwgMHgwMDA1LCAweDcyNDcsIDB4NzI1MSwKLQkweDcyNmMsIDB4NzI0NSwgMHg3MjQ1LCAweDcyNDUsIDB4NzI0NywgMHgwODBjLCAweDE0ZjYsIDB4MDE0NiwKLQkweDIwYTEsIDB4MDIwYiwgMHgwNGExLCAweDYwYzMsIDB4MDAwMCwgMHgwODBjLCAweDc4MjEsIDB4MDE0ZSwKLQkweDAwMDUsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MmI4LCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg3ODA4LCAweDIwYTIsIDB4NzgxMCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4ZmZmZiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAwMDUsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcyZjIsIDB4MjBhMywgMHgwMDAzLCAweDIwYTMsIDB4MDMwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4NjBjMywgMHgwMDA0LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAwMDUsIDB4MDAyNiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExOCwgMHhhMDkyLCAweDAwN2UsIDB4MDI4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDgxMDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODEwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDksIDB4MjBhMywgMHgwMDAwLCAweDA4MDQsIDB4NzE3NSwKLQkweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTE4LCAweGEwOTIsIDB4MDA3ZSwKLQkweDAyODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4ODQwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDAwZGUsIDB4MDA4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDg0MDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MDBkZSwgMHgyMGEzLCAweDAwMDAsIDB4MjAxMSwKLQkweGFkMTQsIDB4MjIxNCwgMHgyMmEyLCAweDIwMDEsIDB4MDA5OSwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDA4MDQsIDB4NzIwMSwgMHgwMDI2LCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExOCwKLQkweGEwOTIsIDB4MDA3ZSwgMHgwMjg4LCAweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4ODUwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwKLQkweDhkNjgsIDB4MmRhNiwgMHgwMGRlLCAweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywKLQkweDY4MTAsIDB4YTA4NSwgMHg4NTAwLCAweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywKLQkweDAwMDAsIDB4MjAxMSwgMHhhZDE0LCAweDIyMTQsIDB4MjJhMiwgMHgyMDAxLCAweDAwOTksIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgwODA0LCAweDcyMDEsIDB4MDBjNiwgMHgwMGY2LCAweDJjNzgsIDB4NzgwNCwKLQkweGEwOGEsIDB4MDA0MCwgMHgwYTBjLCAweDE0ZjYsIDB4YTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MTRmNiwKLQkweDc5MTgsIDB4MjE2MCwgMHg2MWEwLCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExMCwKLQkweGQxYmMsIDB4MDE1MCwgMHg2MTAwLCAweGQxZjQsIDB4MDEyMCwgMHg2MTE0LCAweGExOGMsIDB4MDBmZiwKLQkweDAwNDAsIDB4MjAwOSwgMHgwMDAwLCAweDAwMjgsIDB4YTFlMCwgMHgyYmU2LCAweDJjMGQsIDB4YTE4YywKLQkweDAwZmYsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4YTA4MiwgMHgwMDQwLCAweDAwMWIsIDB4MDBmZSwKLQkweDAwY2UsIDB4MDAwNSwgMHg3MzZmLCAweDc0N2IsIDB4NzQxOCwgMHg3NjFhLCAweDczNmQsIDB4NzM2ZCwKLQkweDczNmQsIDB4NzM2ZCwgMHg3MzZkLCAweDczNmQsIDB4NzM2ZCwgMHg3YjQxLCAweDdiNTEsIDB4N2I2MSwKLQkweDdiNzEsIDB4NzM2ZCwgMHg3Zjc5LCAweDczNmQsIDB4N2IzMCwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwKLQkweDAxNTYsIDB4MDE0NiwgMHg3ODBiLCAweGZmZmYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzNjZiwKLQkweDc5MTAsIDB4MjE2OCwgMHg2OTQ4LCAweDc5NTIsIDB4MjFhMiwgMHhhMDE2LCAweDIyYTIsIDB4MjJhMiwKLQkweDIyYTIsIDB4Njk0YywgMHhhMTg0LCAweDAwMGYsIDB4MTExOCwgMHgyMDAxLCAweDAwMDUsIDB4MDA0MCwKLQkweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAxOCwgMHhhMDg0LCAweDAwMDYsIDB4ODAwNCwKLQkweDAwMTYsIDB4MjAwOCwgMHg3ODU4LCAweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweGExMDUsIDB4MDAxZSwKLQkweDIwYTIsIDB4ZDFhYywgMHgwMTE4LCAweDIwYTMsIDB4MDAwMiwgMHgwMDQ4LCAweGQxYjQsIDB4MDExOCwKLQkweDIwYTMsIDB4MDAwMSwgMHgwMDIwLCAweDIwYTMsIDB4MDAwMCwgMHgyMjMwLCAweDAwMTAsIDB4NmE4MCwKLQkweDZlN2MsIDB4MjBhOSwgMHgwMDA4LCAweDAxMzYsIDB4YWQ4OCwgMHgwMDE3LCAweDIxOTgsIDB4MjBhMSwKLQkweDAyMWIsIDB4NTNhNiwgMHgwMTNlLCAweDIwYTEsIDB4MDIwYiwgMHgyMmEyLCAweDI2YTIsIDB4NjBjMywKLQkweDAwMjAsIDB4MjBlMSwgMHg5MDgwLCAweDYwMTQsIDB4YTA4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAwOSwKLQkweDYwMTYsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDMsIDB4MDdkMCwgMHgyMDAxLCAweGFmZTIsIDB4MjAwMywKLQkweDAwMDksIDB4MDgwYywgMHgxN2JmLCAweDAxNGUsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4MjBlMSwKLQkweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDdhMTgsIDB4YTI4MCwgMHgwMDIzLCAweDIwMTQsIDB4ODIxMCwKLQkweGEyOTQsIDB4MDBmZiwgMHgyMjAyLCAweDgyMTcsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweDIwMTksIDB4YWQzNCwgMHgyMzFjLCAweGQzYWMsIDB4MTExMCwgMHhkMGJjLCAweDAxODgsIDB4MDBkNiwKLQkweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNjAwLCAweDIwYTIsIDB4NjgxNCwKLQkweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MDA4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA2MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwgMHgyMDA5LCAweGFkMTQsIDB4MjEwYywKLQkweDIxYTIsIDB4MjBhMywgMHgwODI5LCAweDIwYTMsIDB4MDAwMCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDJmYTIsIDB4MjBhMywgMHhmZmZmLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MDAwNSwKLQkweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDAwYzEsIDB4NzgxMCwKLQkweDIwNjgsIDB4Njg2MCwgMHgyMGEyLCAweDY4NWMsIDB4MjBhMiwgMHg2ODgwLCAweDIwYTIsIDB4Njg3YywKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDYwYzMsIDB4MDAwYywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAyNiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExMCwgMHhkMGJjLCAweDAxODgsIDB4MDBkNiwKLQkweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwgMHgwNTAwLCAweDIwYTIsIDB4NjgxNCwKLQkweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwgMHgyZGE2LCAweDAwZGUsIDB4MDA4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA1MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwgMHgyMDExLCAweGFkMTQsIDB4MjIxNCwKLQkweDIyYTIsIDB4MjBhMywgMHgwODg5LCAweDIwYTMsIDB4MDAwMCwgMHgwODBjLCAweDc4MTAsIDB4MjJhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHg3YTA4LCAweDIyYTIsIDB4MmZhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MDAyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4NzgxMCwKLQkweGEwNmQsIDB4MDgwYywgMHg1MDI1LCAweDAxNDgsIDB4Njg0YywgMHhhMDg0LCAweDIwMjAsIDB4YTA4NiwKLQkweDIwMjAsIDB4MTExOCwgMHg3ODIwLCAweGMwY2QsIDB4NzgyMiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDc1ZDAsIDB4YTAxNiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NzgxMCwKLQkweGEwODQsIDB4ZjAwMCwgMHgxMTMwLCAweDc4MTAsIDB4YTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDA0MywKLQkweDAwMTAsIDB4YTAwNiwgMHgwMDJiLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwKLQkweDc0YjIsIDB4NzU0NywgMHg3NTUwLCAweDc1NzksIDB4NzU4YywgMHg3NWE3LCAweDc1YjAsIDB4NzRiMCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMDE2LCAweDAwMzYsIDB4Njk0YywgMHhhMThjLCAweDAwMDMsIDB4MDExOCwKLQkweGExODYsIDB4MDAwMywgMHgxMTcwLCAweDZiNzgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzNlNSwKLQkweDIzYTIsIDB4Njg2OCwgMHgyMGEyLCAweDY4NjQsIDB4MjBhMiwgMHgwMDNlLCAweDAwMWUsIDB4MDgwNCwKLQkweDc1ODMsIDB4YTE4NiwgMHgwMDAxLCAweDE5MGMsIDB4MTRmNiwgMHg2Yjc4LCAweDc4MjAsIDB4ZDBjYywKLQkweDAxMDgsIDB4YzNlNSwgMHgyM2EyLCAweDY4NjgsIDB4MjBhMiwgMHg2ODY0LCAweDIwYTIsIDB4MjJhMiwKLQkweDY4NzQsIDB4MjBhMiwgMHgyMmEyLCAweDY4N2MsIDB4MjBhMiwgMHgyMDA5LCAweDAwMTgsIDB4YTM4NCwKLQkweDAzMDAsIDB4MDkwNCwgMHg3NTQxLCAweGQzYzQsIDB4MDExMCwgMHg2ODdjLCAweGExMDgsIDB4ZDNjYywKLQkweDAxMTAsIDB4Njg3NCwgMHhhMTA4LCAweDAxNTYsIDB4MjBhOSwgMHgwMDBkLCAweGFkODAsIDB4MDAyMCwKLQkweDIwMWMsIDB4ODMxZiwgMHgyM2EyLCAweDgwMDAsIDB4MWYwNCwgMHg3NGYwLCAweDAxNWUsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHhhMTg0LCAweDAwMDMsIDB4MDkwNCwgMHg3NTQxLCAweDIwYTEsIDB4MDIwYiwKLQkweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4MDAwNiwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHgwMDBlLCAweDdiMjAsIDB4ZDNjYywgMHgwMTE4LCAweDIwYTMsIDB4MDg4OSwKLQkweDAwMTAsIDB4MjBhMywgMHgwODk4LCAweDIwYTIsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4NjFjMiwgMHgwMDNlLCAweDAwMWUsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjAxMSwKLQkweDAwMDgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDQ4OCwKLQkweDIwMTEsIDB4MDMwMiwgMHg3ODIwLCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDIyYTIsIDB4YTAxNiwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIwYTMsIDB4MDAxMiwgMHgyMmEyLCAweDIwYTMsIDB4MDAwOCwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjBhMywgMHg3MDAwLCAweDIwYTMsIDB4MDUwMCwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDBhLCAweDIyYTIsIDB4MjJhMiwgMHgyMGEzLCAweDI1MDAsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywgMHgwMDMyLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MjAxMSwgMHgwMDI4LCAweDc4MjAsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4MjJhMiwKLQkweGEwMTYsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4NjBjMywKLQkweDAwMTgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjAxMSwgMHgwMTAwLCAweDc4MjAsIDB4ZDBjYywKLQkweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MjJhMiwgMHgyMmEyLCAweDIyYTIsIDB4MjJhMiwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDA4LCAweDIyYTIsIDB4Nzg1NCwgMHhhMDg0LCAweDAwZmYsIDB4MjBhMiwKLQkweDIyYTIsIDB4MjJhMiwgMHg2MGMzLCAweDAwMjAsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjAxMSwKLQkweDAwMDgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweGEwMTYsIDB4MDg4OCwKLQkweDAwMzYsIDB4N2IxMCwgMHhhMzg0LCAweGZmMDAsIDB4NzgxMiwgMHhhMzg0LCAweDAwZmYsIDB4ODAwMSwKLQkweDExMzgsIDB4NzgyMCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHgyMmEyLCAweDAwM2UsIDB4MDgwOCwKLQkweDAwNDYsIDB4MjAyMSwgMHgwODAwLCAweDAwMDYsIDB4NzgyMCwgMHhkMGNjLCAweDAwMGUsIDB4MDEwOCwKLQkweGM0ZTUsIDB4MjRhMiwgMHgwMDRlLCAweDIyYTIsIDB4MjBhMiwgMHgwMDNlLCAweDA4MDQsIDB4NzU4MywKLQkweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDA3MDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDcwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHg3ODIwLCAweGQwY2MsIDB4MDExOCwgMHgyMGEzLCAweDA4ODksIDB4MDAxMCwKLQkweDIwYTMsIDB4MDg5OCwgMHgyMGEzLCAweDAwMDAsIDB4MDgwYywgMHg3ODEwLCAweDIyYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDAwMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxNTYsIDB4MDEzNiwgMHgwMTQ2LCAweDAwMTYsIDB4MDAzNiwKLQkweDc4MTAsIDB4YTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDAzYiwgMHgwMDNlLCAweDAwMWUsIDB4MDE0ZSwKLQkweDAxM2UsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4NzYzNCwgMHg3NjM0LCAweDc2MzYsIDB4NzYzNCwKLQkweDc2MzQsIDB4NzYzNCwgMHg3NjU4LCAweDc2MzQsIDB4MDgwYywgMHgxNGY2LCAweDc5MTAsIDB4YTE4YywKLQkweGY4ZmYsIDB4YTE4ZCwgMHgwNjAwLCAweDc5MTIsIDB4MjBhMSwgMHgwMjBiLCAweDIwMDksIDB4MDAwMywKLQkweDAwZjksIDB4MDBkNiwgMHgyMDY5LCAweGFkNTEsIDB4NjgwNCwgMHhkMGJjLCAweDAxMzAsIDB4NjgyYywKLQkweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDIwYTIsIDB4MDAxMCwgMHgyMGEzLCAweDNmMDAsIDB4MDBkZSwKLQkweDIyYTIsIDB4MjJhMiwgMHgyMmEyLCAweDYwYzMsIDB4MDAwMSwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgyMDA5LCAweDAwMDMsIDB4MDAxOSwgMHgyMGEzLCAweDdmMDAsIDB4MGM4MCwKLQkweDAwMjYsIDB4MjBlMSwgMHg5MDgwLCAweDIwZTEsIDB4NDAwMCwgMHg3ODE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4MjAxMSwgMHhhZDM0LCAweDIyMTQsIDB4ZDJhYywgMHgxMTEwLCAweGQwYmMsIDB4MDE4OCwKLQkweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHhhMDg1LCAweDAxMDAsIDB4MjBhMiwKLQkweDY4MTQsIDB4MjBhMiwgMHgyMDY5LCAweGFkMWIsIDB4MmRhNiwgMHg4ZDY4LCAweDJkYTYsIDB4MDBkZSwKLQkweDAwODgsIDB4MDBkNiwgMHhhMGU4LCAweGFlMzQsIDB4MmQ2YywgMHg2ODEwLCAweGEwODUsIDB4MDEwMCwKLQkweDIwYTIsIDB4NjgxNCwgMHgyMGEyLCAweDAwZGUsIDB4MjBhMywgMHgwMDAwLCAweDIwMTEsIDB4YWQxNCwKLQkweDIyMTQsIDB4MjJhMiwgMHgyMGEzLCAweDA4ODgsIDB4YTE4ZCwgMHgwMDA4LCAweDIxYTIsIDB4MDgwYywKLQkweDc4MTAsIDB4MjJhMiwgMHgyMGEzLCAweDAwMDAsIDB4N2EwOCwgMHgyMmEyLCAweDJmYTIsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzE1MCwKLQkweDc4MTgsIDB4MjA2OCwgMHg2OGEwLCAweDIwMjgsIDB4NzZkMCwgMHhkNmFjLCAweDExMzAsIDB4ZDBiYywKLQkweDExMjAsIDB4NjkxMCwgMHg2YTE0LCAweDc0NTAsIDB4MDAyMCwgMHg2OTEwLCAweDZhMTQsIDB4NzM2YywKLQkweDc0NzAsIDB4NzgxYywgMHhhMGJlLCAweDAwMDYsIDB4MDkwNCwgMHg3NzViLCAweGEwYmUsIDB4MDAwYSwKLQkweDE1ZTgsIDB4YTE4NSwgMHgwMjAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsIDB4NjA3MywKLQkweDIwMjksIDB4NjA3NywgMHgwMDAwLCAweDY4OGMsIDB4ODAwMCwgMHhhMDg0LCAweDAwZmYsIDB4Njg4ZSwKLQkweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDgyLCAweDc4MDgsIDB4NjA4NiwKLQkweDc4MTAsIDB4MjA3MCwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLCAweDcwMGMsIDB4NjBjNiwKLQkweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweDYwOWYsIDB4MDAwMCwgMHgwODBjLCAweDgwMTQsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4YTA4NCwKLQkweGZmZjAsIDB4YTAwNSwgMHgwMTEwLCAweDIwMDksIDB4MWI1OCwgMHgwODBjLCAweDY1ODYsIDB4MDAzZSwKLQkweDAwNGUsIDB4MDA1ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDcwZDAsIDB4ZDBhYywKLQkweDExMTAsIDB4ZDViYywgMHgwMTM4LCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwKLQkweDY0NmUsIDB4MDAzOCwgMHhhMTg1LCAweDAxMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwKLQkweDY0NmUsIDB4NjA3MywgMHgwODA5LCAweDYwNzcsIDB4MDAwOCwgMHg2ODhjLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJmMDAsIDB4NjA4MiwKLQkweDc4MDgsIDB4NjA4NiwgMHg3ODEwLCAweDIwNzAsIDB4NzAxNCwgMHg2MDhhLCAweDcwMTAsIDB4NjA4ZSwKLQkweDcwMGMsIDB4NjBjNiwgMHg3MDA4LCAweDYwY2EsIDB4Njg2YywgMHg2MGNlLCAweDYwYWYsIDB4OTVkNSwKLQkweDYwZDcsIDB4MDAwMCwgMHhhNTgyLCAweDAwODAsIDB4MDI0OCwgMHg2YTAwLCAweGQyZjQsIDB4MDEyMCwKLQkweDZhMTQsIDB4YTI5NCwgMHgwMGZmLCAweDAwMTAsIDB4MjAxMSwgMHgwMDAwLCAweDYyOWUsIDB4MDgwYywKLQkweDgwMTQsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4YTA4NCwgMHhmZmYwLCAweGEwMDUsIDB4MDExMCwKLQkweDIwMDksIDB4MWI1OCwgMHgwODBjLCAweDY1ODYsIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDc4MTAsIDB4MjA3MCwgMHg3MDRjLCAweGEwODQsIDB4MDAwMywKLQkweGEwODYsIDB4MDAwMiwgMHgwOTA0LCAweDc3YjEsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywKLQkweDExMTAsIDB4ZDViYywgMHgwMTM4LCAweGExODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwKLQkweDY0NmUsIDB4MDAzOCwgMHhhMTg1LCAweDAxMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwKLQkweDY0NmUsIDB4NjA3MywgMHgwODgwLCAweDYwNzcsIDB4MDAwOCwgMHg2ODhjLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NzgzNCwgMHg2MDdlLCAweDJmMDAsIDB4NjA4NiwKLQkweDc4MDgsIDB4NjA4MiwgMHg3MDYwLCAweDYwOGEsIDB4NzA1YywgMHg2MDhlLCAweDcwODAsIDB4NjBjNiwKLQkweDcwN2MsIDB4NjBjYSwgMHg3MDdjLCAweDc5MmMsIDB4YTEwOCwgMHg3OTJlLCAweDcwODAsIDB4NzkyOCwKLQkweGExMDksIDB4NzkyYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweGE1ODIsIDB4MDA4MCwgMHgwMjQ4LCAweDZhMDAsIDB4ZDJmNCwgMHgwMTIwLCAweDZhMTQsIDB4YTI5NCwKLQkweDAwZmYsIDB4MDAxMCwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwgMHgwODBjLCAweDgwMTEsIDB4MDgwNCwKLQkweDc3NDksIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4ZDBhYywgMHgxMTEwLCAweGQ1YmMsIDB4MDEzOCwKLQkweGExODUsIDB4MDcwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDAwMzgsIDB4YTE4NSwKLQkweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYwNmIsIDB4MDAwMCwgMHg2NDZlLCAweDA4MGMsIDB4NTAyNSwKLQkweDAxODAsIDB4MDBkNiwgMHg3ODEwLCAweGEwNmQsIDB4Njg0YywgMHgwMGRlLCAweGEwODQsIDB4MjAyMCwKLQkweGEwODYsIDB4MjAyMCwgMHgxMTMwLCAweDc4MjAsIDB4YzBjZCwgMHg3ODIyLCAweDYwNzMsIDB4MDg4OSwKLQkweDAwMTAsIDB4NjA3MywgMHgwODk4LCAweDYwNzcsIDB4MDAwMCwgMHg2ODhjLCAweDgwMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4Njg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJmMDAsIDB4NjA4NiwKLQkweDc4MDgsIDB4NjA4MiwgMHg3MDE0LCAweDYwOGEsIDB4NzAxMCwgMHg2MDhlLCAweDcwMGMsIDB4NjBjNiwKLQkweDcwMDgsIDB4NjBjYSwgMHg2ODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwKLQkweGE1ODIsIDB4MDA4MCwgMHgwMjQ4LCAweDZhMDAsIDB4ZDJmNCwgMHgwMTIwLCAweDZhMTQsIDB4YTI5NCwKLQkweDAwZmYsIDB4MDAxMCwgMHgyMDExLCAweDAwMDAsIDB4NjI5ZSwgMHg3ODIwLCAweGQwY2MsIDB4MDEyMCwKLQkweDA4MGMsIDB4ODAxNCwgMHgwODA0LCAweDc3NDksIDB4MDgwYywgMHg4MDExLCAweDA4MDQsIDB4Nzc0OSwKLQkweDdhMTgsIDB4YTI4MCwgMHgwMDIzLCAweDIwMTQsIDB4ODIxMCwgMHhhMjk0LCAweDAwZmYsIDB4MjIwMiwKLQkweDgyMTcsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4YWZjNywgMHg2ODQzLCAweDAwMDEsIDB4MDBkZSwKLQkweDAwMDUsIDB4MjBlMSwgMHg5MDgwLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MDAxOSwKLQkweDA4MGMsIDB4NjU3OCwgMHgwMDA1LCAweDAwMDYsIDB4NjAxNCwgMHhhMDg0LCAweDAwMDQsIDB4YTA4NSwKLQkweDAwMDksIDB4NjAxNiwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwKLQkweDYwMTQsIDB4YTA4NCwgMHgwMDA0LCAweGEwODUsIDB4MDAwOCwgMHg2MDE2LCAweDAwY2UsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwKLQkweDAxNDAsIDB4MDgwYywgMHg1NzRmLCAweDExNzgsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDQsIDB4YTAwNSwKLQkweDE1OTgsIDB4MDgwYywgMHg1N2QxLCAweDExMTgsIDB4MDgwYywgMHg2NTc4LCAweDA0NjgsIDB4MDBjNiwKLQkweDIwNjEsIDB4YWZjNywgMHgwMGQ4LCAweDY5MDQsIDB4YTE5NCwgMHg0MDAwLCAweDA1NTAsIDB4MDhhMSwKLQkweDY4MDMsIDB4MTAwMCwgMHg2ODAzLCAweDAwMDAsIDB4MDBjNiwgMHgyMDYxLCAweGFmYzcsIDB4NjEyOCwKLQkweGExOTIsIDB4MDBjOCwgMHgxMjU4LCAweDgxMDgsIDB4NjEyYSwgMHg2MTI0LCAweDAwY2UsIDB4ODFmZiwKLQkweDAxOTgsIDB4MDgwYywgMHg2NTc4LCAweDA4MGMsIDB4NzgyYiwgMHgwMDcwLCAweDYxMjQsIDB4YTFlNSwKLQkweDAwMDAsIDB4MDE0MCwgMHgwODBjLCAweGFjYTIsIDB4MjAwOSwgMHgwMDE0LCAweDA4MGMsIDB4ODBhNywKLQkweDA4MGMsIDB4NjU4MSwgMHgwMGNlLCAweDAwMDAsIDB4MDAyZSwgMHgwMDFlLCAweDAwZGUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MjAwMSwgMHhhZmUzLCAweDIwMDQsIDB4YTAwNSwgMHgxZGIwLCAweDAwYzYsIDB4MjA2MSwKLQkweGFmYzcsIDB4NjEyOCwgMHhhMTkyLCAweDAwMDMsIDB4MWUwOCwgMHg4MTA4LCAweDYxMmEsIDB4MDBjZSwKLQkweDA4MGMsIDB4NjU3OCwgMHgwODBjLCAweDQ4NWUsIDB4MGMzOCwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwKLQkweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDY1OGUsIDB4MjA3MSwgMHhhZmM3LCAweDcxM2MsIDB4ODFmZiwKLQkweDA1NzAsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgwODBjLCAweDU3NGYsIDB4MTE4OCwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4N2E2NCwgMHgwMDNlLCAweDcxM2MsIDB4MjE2MCwKLQkweDA4MGMsIDB4YWNhMiwgMHgyMDA5LCAweDAwNGEsIDB4MDgwYywgMHg4MGE3LCAweDA4MGMsIDB4NTdkMSwKLQkweDAwYjAsIDB4NjkwNCwgMHhhMTk0LCAweDQwMDAsIDB4MDFjMCwgMHg2ODAzLCAweDEwMDAsIDB4NjgwMywKLQkweDAwMDAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg3YTY0LCAweDAwM2UsIDB4NzEzYywKLQkweDIxNjAsIDB4MDgwYywgMHhhY2EyLCAweDIwMDksIDB4MDA0YSwgMHgwODBjLCAweDgwYTcsIDB4MDAyZSwKLQkweDAwMWUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwYzU4LCAweDAwZTYsIDB4MDBkNiwKLQkweDAwYzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDYwMTgsIDB4MjA2OCwgMHg2Y2EwLCAweDIwNzEsIDB4YWZjNywgMHg3MDE4LCAweDIwNjgsIDB4OGRmZiwKLQkweDAxOTgsIDB4NjhhMCwgMHhhNDA2LCAweDAxMTgsIDB4Njg1NCwgMHgyMDY4LCAweDBjYzAsIDB4NjAxMCwKLQkweDIwNjAsIDB4NjQzYywgMHg2NTQwLCAweDZlNDgsIDB4MmQ2MCwgMHgwODBjLCAweDRlNDEsIDB4MDEyMCwKLQkweDA4MGMsIDB4N2I4OCwgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMDBlLCAweDAwNGUsIDB4MDA1ZSwKLQkweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxMGUsIDB4MjBhMywgMHgxMjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgxYywKLQkweGEwODYsIDB4MDAwNCwgMHgxMTEwLCAweDYwOTgsIDB4MDAxOCwgMHgyMDAxLCAweGFkMTQsIDB4MjAwNCwKLQkweDIwYTIsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwKLQkweDIwYTIsIDB4MWYwNCwgMHg3OTI4LCAweDIwYTIsIDB4MjBhMiwgMHg2MGMzLCAweDAwMmMsIDB4MDgwYywKLQkweDc4MjEsIDB4MDAwNSwgMHgwMTU2LCAweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDIwYTMsIDB4MGYwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDc4MDgsIDB4MjBhMiwKLQkweDYwYzMsIDB4MDAwOCwgMHgwODBjLCAweDc4MjEsIDB4MDE0ZSwgMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwKLQkweDAxNDYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzFhYSwgMHgyMGEzLCAweDAyMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhOSwgMHgwMDA2LCAweDIwMTEsIDB4YWQ0MCwgMHgyMDE5LCAweGFkNDEsIDB4MjNhNiwKLQkweDIyYTYsIDB4YTM5OCwgMHgwMDAyLCAweGEyOTAsIDB4MDAwMiwgMHgxZjA0LCAweDc5NTcsIDB4MjBhMywKLQkweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxYywgMHgwODBjLCAweDc4MjEsIDB4MDE0ZSwKLQkweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAxNDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwYTEsIDB4MDIwYiwKLQkweDA4MGMsIDB4NzE4MywgMHgwODBjLCAweDcxOTksIDB4NzgxMCwgMHhhMDgwLCAweDAwMDAsIDB4MjAwNCwKLQkweGEwODAsIDB4MDAxNSwgMHgyMDk4LCAweDc4MDgsIDB4YTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4NTNhNiwKLQkweGEwODAsIDB4MDAwNCwgMHg4MDAzLCAweDYwYzIsIDB4MDgwYywgMHg3ODIxLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNGUsIDB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywKLQkweDcxMGUsIDB4MjBhMywgMHg2MjAwLCAweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgwOCwKLQkweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwKLQkweDAxNTYsIDB4MDE0NiwgMHgwMDE2LCAweDAwMjYsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwZSwKLQkweDc4MTAsIDB4YTA4MCwgMHgwMDAwLCAweDIwMDQsIDB4YTA4MCwgMHgwMDE3LCAweDIwOTgsIDB4NzgwOCwKLQkweGEwODgsIDB4MDAwMiwgMHgyMWE4LCAweDUzYTYsIDB4ODAwMywgMHg2MGMyLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAwNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWZjNywgMHg3MDBjLCAweDIwNjAsIDB4OGNmZiwKLQkweDAxNzgsIDB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywgMHg4NWYzLCAweDYwMGMsIDB4MDAwNiwKLQkweDA4MGMsIDB4OTk0ZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MGM3OCwKLQkweDcwMGYsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4MDEyZSwgMHgwMDBlLCAweDAwY2UsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgwMTU2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDAyNiwKLQkweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgwMTAwLCAweDIwNzksIDB4MDE0MCwKLQkweDIwNzEsIDB4YWZjNywgMHg3MDI0LCAweDIwNjAsIDB4OGNmZiwgMHgwNWEwLCAweDA4MGMsIDB4NzgzNCwKLQkweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweDY1ODEsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsIDB4ODBhNywKLQkweDIwYTksIDB4MDFmNCwgMHg2ODI0LCAweGQwOTQsIDB4MDE1OCwgMHg2ODI3LCAweDAwMDQsIDB4NzgwNCwKLQkweGEwODQsIDB4NDAwMCwgMHgwMWEwLCAweDc4MDMsIDB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwKLQkweGQwODQsIDB4MDExOCwgMHg2ODI3LCAweDAwMDEsIDB4MDAxMCwgMHgxZjA0LCAweDdhMDIsIDB4NzgwNCwKLQkweGEwODQsIDB4MTAwMCwgMHgwMTIwLCAweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwKLQkweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwKLQkweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwgMHhhMDk2LCAweDAwMDEsIDB4MDU1MCwKLQkweGEwOTYsIDB4MDAwNCwgMHgwNTM4LCAweDY4MTcsIDB4MDAwOCwgMHg2OGMzLCAweDAwMDAsIDB4MjAxMSwKLQkweDQ4MWIsIDB4MDgwYywgMHg2NTBkLCAweDIwYTksIDB4MDFmNCwgMHg2ODI0LCAweGQwOTQsIDB4MDE1OCwKLQkweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweGEwODQsIDB4NDAwMCwgMHgwMWEwLCAweDc4MDMsIDB4MTAwMCwKLQkweDc4MDMsIDB4MDAwMCwgMHgwMDc4LCAweGQwODQsIDB4MDExOCwgMHg2ODI3LCAweDAwMDEsIDB4MDAxMCwKLQkweDFmMDQsIDB4N2EzZCwgMHg3ODA0LCAweGEwODQsIDB4MTAwMCwgMHgwMTIwLCAweDc4MDMsIDB4MDEwMCwKLQkweDc4MDMsIDB4MDAwMCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgwMTU2LCAweDAwZjYsIDB4MDBlNiwKLQkweDAwZDYsIDB4MDBjNiwgMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwKLQkweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsIDB4YWZjNywgMHg3MDNjLCAweDIwNjAsIDB4OGNmZiwKLQkweDA5MDQsIDB4N2FkNSwgMHg2ODE3LCAweDAwMTAsIDB4MjAwOSwgMHgwMGZhLCAweDgxMDksIDB4MWRmMCwKLQkweDY4YzcsIDB4MDAwMCwgMHg2OGNiLCAweDAwMDgsIDB4MDgwYywgMHg2NThlLCAweDA4MGMsIDB4MjBiNSwKLQkweDAwNDYsIDB4MjAwOSwgMHgwMTdmLCAweDIwMGIsIDB4MDBhNSwgMHgyMDIxLCAweDAxNjksIDB4MjQwNCwKLQkweGEwODQsIDB4MDAwZiwgMHhhMDg2LCAweDAwMDQsIDB4MTFiMCwgMHg2OGM3LCAweDAwMDAsIDB4NjhjYiwKLQkweDAwMDgsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzksIDB4MDAyMCwgMHgyMDcxLCAweGIwMWUsIDB4NjgxNCwKLQkweGEwODQsIDB4MDE4NCwgMHhhMDg1LCAweDAwMTIsIDB4NjgxNiwgMHg3ODAzLCAweDAwMDgsIDB4NzAwMywKLQkweDAwMDAsIDB4MDBmZSwgMHgwMGVlLCAweDIwMGIsIDB4MDAwMCwgMHgwMDRlLCAweGEzOWQsIDB4MDAwMCwKLQkweDExMjAsIDB4MjAwOSwgMHgwMDQ5LCAweDA4MGMsIDB4ODBhNywgMHgyMGE5LCAweDAzZTgsIDB4NjgyNCwKLQkweGQwOTQsIDB4MDE1OCwgMHg2ODI3LCAweDAwMDQsIDB4NzgwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDFhMCwKLQkweDc4MDMsIDB4MTAwMCwgMHg3ODAzLCAweDAwMDAsIDB4MDA3OCwgMHhkMDhjLCAweDAxMTgsIDB4NjgyNywKLQkweDAwMDIsIDB4MDAxMCwgMHgxZjA0LCAweDdhYjcsIDB4NzgwNCwgMHhhMDg0LCAweDEwMDAsIDB4MDEyMCwKLQkweDc4MDMsIDB4MDEwMCwgMHg3ODAzLCAweDAwMDAsIDB4NjgyNCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwKLQkweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4YWZjNywgMHg2YTA2LCAweDAxMmUsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweGFmYzcsIDB4NmEzMiwKLQkweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAwNiwKLQkweDAxMjYsIDB4MjA3MSwgMHhhZmM3LCAweDc2MTQsIDB4MjY2MCwgMHgyNjc4LCAweDIwOTEsIDB4ODAwMCwKLQkweDhjZmYsIDB4MDUzOCwgMHg2MDFjLCAweGEyMDYsIDB4MTUwMCwgMHg3MDE0LCAweGFjMzYsIDB4MTExMCwKLQkweDY2MGMsIDB4NzYxNiwgMHg3MDEwLCAweGFjMzYsIDB4MTE0MCwgMHgyYzAwLCAweGFmMzYsIDB4MDExOCwKLQkweDJmMDAsIDB4NzAxMiwgMHgwMDEwLCAweDcwMTMsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwKLQkweGFmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywKLQkweDk3NGUsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MDhkOCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwKLQkweDA4YjgsIDB4MDEyZSwgMHgwMDBlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwKLQkweDAxNTYsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3M2NmLCAweDc4MTAsIDB4MjBhMiwKLQkweGEwMDYsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEzLCAweDEwMDAsIDB4MDgwNCwKLQkweDdiODAsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4NDAwMCwKLQkweDA0NzgsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MjAwMCwKLQkweDAwZjgsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDQwMCwKLQkweDAwNzgsIDB4MDE1NiwgMHgwMTQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDczY2YsIDB4NzgxMCwKLQkweDIwYTIsIDB4YTAwNiwgMHgyMGEyLCAweDIwYTIsIDB4MjBhMiwgMHgyMGEyLCAweDIwYTMsIDB4MDIwMCwKLQkweDAwODksIDB4NjBjMywgMHgwMDIwLCAweDA4MGMsIDB4NzgyMSwgMHgwMTRlLCAweDAxNWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmM3LCAweDcwMjAsIDB4YTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4NzAyMiwKLQkweDAwZWUsIDB4MDAwNSwgMHgyMGE5LCAweDAwMDgsIDB4MjBhMiwgMHgxZjA0LCAweDdiOTQsIDB4MjBhMiwKLQkweDIwYTIsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNzYsIDB4MDA2NiwKLQkweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhhZmM3LCAweDc2MTQsIDB4MjY2MCwKLQkweDI2NzgsIDB4MjAzOSwgMHgwMDAxLCAweDg3ZmYsIDB4MDkwNCwgMHg3YzI0LCAweDhjZmYsIDB4MDkwNCwKLQkweDdjMjQsIDB4NjAxYywgMHhhMDg2LCAweDAwMDYsIDB4MTkwNCwgMHg3YzFmLCAweDg4ZmYsIDB4MDEzOCwKLQkweDI4MDAsIDB4YWMwNiwgMHgxOTA0LCAweDdjMWYsIDB4MjAzOSwgMHgwMDAwLCAweDAwNTAsIDB4NjAxOCwKLQkweGEyMDYsIDB4MTkwNCwgMHg3YzFmLCAweDg1ZmYsIDB4MDEyMCwgMHg2MDUwLCAweGExMDYsIDB4MTkwNCwKLQkweDdjMWYsIDB4NzAyNCwgMHhhYzA2LCAweDE1MzgsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4YTAwNSwKLQkweDAxZjAsIDB4MDgwYywgMHg2NTgxLCAweDY4MTcsIDB4MDAwOCwgMHg2OGMzLCAweDAwMDAsIDB4MDgwYywKLQkweDdjYTgsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4YTM4NCwKLQkweDEwMDAsIDB4MDEyMCwgMHg2ODAzLCAweDAxMDAsIDB4NjgwMywgMHgwMDAwLCAweDIwNjksIDB4MDEwMCwKLQkweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDAwMjAsIDB4NjAwMywKLQkweDAwMDksIDB4NjMwYSwgMHgwNDYwLCAweDcwMTQsIDB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYxNiwKLQkweDcwMTAsIDB4YWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAxMiwKLQkweDAwMTAsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwKLQkweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDg5ZmYsIDB4MTE1OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMTAsIDB4MDgwYywgMHhhOTFmLCAweDA4MGMsIDB4OTc0ZSwKLQkweDA4MGMsIDB4N2I4OCwgMHg4OGZmLCAweDExOTAsIDB4MDBjZSwgMHgwODA0LCAweDdiYWIsIDB4MmM3OCwKLQkweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweDdiYWIsIDB4YTAwNiwgMHgwMTJlLCAweDAwMGUsIDB4MDA2ZSwKLQkweDAwN2UsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMTcsIDB4MDAwMCwKLQkweDAwY2UsIDB4YThjNSwgMHgwMDAxLCAweDBjODgsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWZjNywKLQkweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHg3Yzk4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDYsIDB4MTkwNCwgMHg3YzkzLCAweDg3ZmYsIDB4MDEyOCwgMHgyNzAwLCAweGFjMDYsIDB4MTkwNCwKLQkweDdjOTMsIDB4MDA0MCwgMHg2MDE4LCAweGEyMDYsIDB4MTVmMCwgMHg4NWZmLCAweDAxMTgsIDB4NjA1MCwKLQkweGExMDYsIDB4MTVjOCwgMHg3MDNjLCAweGFjMDYsIDB4MTE3MCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwKLQkweDA4MGMsIDB4N2E2NCwgMHg3MDMzLCAweDAwMDAsIDB4NzAzZiwgMHgwMDAwLCAweDcwNDMsIDB4MDAwMCwKLQkweDcwNDcsIDB4MDAwMCwgMHgwMDNlLCAweDcwMzgsIDB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYzYSwKLQkweDcwMzQsIDB4YWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAzNiwKLQkweDAwMTAsIDB4NzAzNywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwKLQkweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywKLQkweDk1OTYsIDB4MDExMCwgMHgwODBjLCAweGE5MWYsIDB4MDgwYywgMHg5NzRlLCAweDg3ZmYsIDB4MTE5MCwKLQkweDAwY2UsIDB4MDgwNCwgMHg3YzQzLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4N2M0MywKLQkweGEwMDYsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDAwNSwgMHg2MDE3LCAweDAwMDAsIDB4MDBjZSwgMHhhN2JkLCAweDAwMDEsIDB4MGM4OCwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZmM3LCAweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMiwKLQkweDExMTgsIDB4NzAwNywgMHgwMDA1LCAweDAwMTAsIDB4NzAwNywgMHgwMDAwLCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA3MSwgMHhhZmM3LCAweDJjMTAsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwKLQkweDA1MTgsIDB4MjIwMCwgMHhhYzA2LCAweDExZTAsIDB4NzAzOCwgMHhhYzM2LCAweDExMTAsIDB4NjYwYywKLQkweDc2M2EsIDB4NzAzNCwgMHhhYzM2LCAweDExNDAsIDB4MmMwMCwgMHhhZjM2LCAweDAxMTgsIDB4MmYwMCwKLQkweDcwMzYsIDB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwKLQkweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAyMCwKLQkweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4ZDgsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwKLQkweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFmYzcsIDB4NzYwYywKLQkweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsIDB4N2Q3ZSwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwKLQkweDIwMDQsIDB4YTIwNiwgMHgxOTA0LCAweDdkNzksIDB4NzAyNCwgMHhhYzA2LCAweDE1MDgsIDB4MjA2OSwKLQkweDAxMDAsIDB4NjhjMCwgMHhhMDA1LCAweDA5MDQsIDB4N2Q1NSwgMHgwODBjLCAweDc4MzQsIDB4NjhjMywKLQkweDAwMDAsIDB4MDgwYywgMHg3Y2E4LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwKLQkweDZiMDQsIDB4YTM4NCwgMHgxMDAwLCAweDAxMjAsIDB4NjgwMywgMHgwMTAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwKLQkweDcwMGMsIDB4YWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYwZSwgMHg3MDA4LCAweGFjMzYsIDB4MTE0MCwKLQkweDJjMDAsIDB4YWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAwYSwgMHgwMDEwLCAweDcwMGIsIDB4MDAwMCwKLQkweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweGFmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwKLQkweDYwMGYsIDB4MDAwMCwgMHgwODBjLCAweDk3NzgsIDB4MTE1OCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywKLQkweDk3ODksIDB4MTFmMCwgMHgwODBjLCAweDg1ZjMsIDB4MDBkOCwgMHgwODBjLCAweDdjYTgsIDB4MDhjMCwKLQkweDA4MGMsIDB4OTc4OSwgMHgxMTE4LCAweDA4MGMsIDB4ODVmMywgMHgwMDkwLCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMTY4LCAweDYwMWMsIDB4YTA4NiwgMHgwMDAzLCAweDExZjgsIDB4NjgzNywKLQkweDAxMDMsIDB4NmI0YSwgMHg2ODQ3LCAweDAwMDAsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTc0MiwKLQkweDA4MGMsIDB4OTk0ZSwgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg3Yjg4LCAweDAwY2UsIDB4MDgwNCwKLQkweDdkMDIsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg3ZDAyLCAweDAxMmUsIDB4MDAwZSwKLQkweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDYsIDB4MWQzMCwgMHgwODBjLCAweGE5MWYsIDB4MGMxOCwgMHgwMDM2LCAweDAxNTYsIDB4MDEzNiwKLQkweDAxNDYsIDB4MzkwOCwgMHhhMDA2LCAweGExOTAsIDB4MDAyMCwgMHgyMjFjLCAweGEzOWUsIDB4MjhmOSwKLQkweDExMTgsIDB4ODIxMCwgMHg4MDAwLCAweDBjYzgsIDB4YTAwNSwgMHgwMTM4LCAweDIwYTksIDB4MDAyMCwKLQkweDIxOTgsIDB4YTExMCwgMHgyMmEwLCAweDIyYzgsIDB4NTNhMywgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwM2UsIDB4MDAwNSwgMHgwMGQ2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywKLQkweDAyMDAsIDB4MjBhMywgMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjA5OSwgMHhhZmE2LCAweDIwYTksIDB4MDAwNCwgMHg1M2E2LCAweDIwYTMsIDB4MDAwNCwKLQkweDIwYTMsIDB4Nzg3OCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDA4MGMsIDB4NzgyMSwKLQkweDAwZGUsIDB4MDAwNSwgMHgyMGExLCAweDAyMGIsIDB4MDgwYywgMHg3MWFhLCAweDIwYTMsIDB4MDIxNCwKLQkweDIwYTMsIDB4MDAxOCwgMHgyMGEzLCAweDA4MDAsIDB4NzgxMCwgMHhhMDg0LCAweGZmMDAsIDB4MjBhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MTAsIDB4YTA4NCwgMHgwMGZmLCAweDIwYTIsIDB4NzgyOCwgMHgyMGEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMTgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MDBkNiwKLQkweDAwMTYsIDB4MmY2OCwgMHgyMDA5LCAweDAwMzUsIDB4MDgwYywgMHg5YTM0LCAweDE5MDQsIDB4N2U1ZCwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxMGUsIDB4MjBhMywgMHgxMzAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MjgsIDB4MjA2OCwgMHg2ODFjLCAweGEwODYsIDB4MDAwMywgMHgwNTgwLCAweDc4MTgsIDB4YTA4MCwKLQkweDAwMjgsIDB4MjAxNCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwgMHhkMGFjLCAweDExZDAsIDB4YTI4NiwKLQkweDAwN2UsIDB4MTEyOCwgMHgyMGEzLCAweDAwZmYsIDB4MjBhMywgMHhmZmZlLCAweDA0YjgsIDB4YTI4NiwKLQkweDAwN2YsIDB4MTEyOCwgMHgyMGEzLCAweDAwZmYsIDB4MjBhMywgMHhmZmZkLCAweDA0NzgsIDB4ZDJiYywKLQkweDAxODAsIDB4YTI4NiwgMHgwMDgwLCAweDExMjgsIDB4MjBhMywgMHgwMGZmLCAweDIwYTMsIDB4ZmZmYywKLQkweDA0MjgsIDB4YTJlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwKLQkweDAwZTgsIDB4MjBhMywgMHgwMDAwLCAweDYwOTgsIDB4MjBhMiwgMHgwMGMwLCAweDIwMDEsIDB4YWQzNCwKLQkweDIwMDQsIDB4ZDBhYywgMHgxMTM4LCAweDc4MTgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMDQsIDB4YTA4MiwKLQkweDAwN2UsIDB4MDI0MCwgMHgwMGQ2LCAweDIwNjksIDB4YWQxYiwgMHgyZGE2LCAweDhkNjgsIDB4MmRhNiwKLQkweDAwZGUsIDB4MDAyMCwgMHgyMGEzLCAweDAwMDAsIDB4NjAzNCwgMHgyMGEyLCAweDc4MzQsIDB4MjBhMiwKLQkweDc4MzgsIDB4MjBhMiwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAwYywKLQkweDA4MGMsIDB4NzgyMSwgMHgwMDFlLCAweDAwZGUsIDB4MDAwNSwgMHg3ODE3LCAweDAwMDEsIDB4NzgwMywKLQkweDAwMDYsIDB4MDAxZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDI2LCAweDc5MjgsIDB4MjE2OCwKLQkweDY5MWMsIDB4YTE4NiwgMHgwMDA2LCAweDAxYzAsIDB4YTE4NiwgMHgwMDAzLCAweDA5MDQsIDB4N2VkMywKLQkweGExODYsIDB4MDAwNSwgMHgwOTA0LCAweDdlYmMsIDB4YTE4NiwgMHgwMDA0LCAweDA1YjgsIDB4YTE4NiwKLQkweDAwMDgsIDB4MDkwNCwgMHg3ZWM0LCAweDc4MDcsIDB4MDAzNywgMHg3ODEzLCAweDE3MDAsIDB4MDgwYywKLQkweDdmM2IsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg3ZWY3LCAweDIwMDksIDB4NDAwMCwKLQkweDY4MDAsIDB4MDAwMiwgMHg3ZTlkLCAweDdlYTgsIDB4N2U5ZiwgMHg3ZWE4LCAweDdlYTQsIDB4N2U5ZCwKLQkweDdlOWQsIDB4N2VhOCwgMHg3ZWE4LCAweDdlYTgsIDB4N2VhOCwgMHg3ZTlkLCAweDdlOWQsIDB4N2U5ZCwKLQkweDdlOWQsIDB4N2U5ZCwgMHg3ZWE4LCAweDdlOWQsIDB4N2VhOCwgMHgwODBjLCAweDE0ZjYsIDB4NjgyMCwKLQkweGQwZTQsIDB4MDExMCwgMHhkMGNjLCAweDAxMTAsIDB4YTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MjAwMCwKLQkweDY4MjgsIDB4MjBhMiwgMHg2ODJjLCAweDIwYTIsIDB4MDgwNCwgMHg3ZWVkLCAweDA4MGMsIDB4N2VmNywKLQkweDIwYTMsIDB4MDAwMCwgMHgyMGEzLCAweDAwMDAsIDB4MjAwOSwgMHg0MDAwLCAweDZhMDAsIDB4YTI4NiwKLQkweDAwMDIsIDB4MTEwOCwgMHhhMDBlLCAweDA0ODgsIDB4MDRkMSwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjAwOSwgMHg0MDAwLCAweDA0NDgsIDB4MDQ5MSwgMHgyMGEzLCAweDAwMDAsIDB4MjBhMywKLQkweDAwMDAsIDB4MjAwOSwgMHg0MDAwLCAweGEyODYsIDB4MDAwNSwgMHgwMTE4LCAweGEyODYsIDB4MDAwMiwKLQkweDExMDgsIDB4YTAwZSwgMHgwMGQwLCAweDA0MTksIDB4NjgxMCwgMHgyMDY4LCAweDY5N2MsIDB4NjgxMCwKLQkweGExMTIsIDB4Njk4MCwgMHg2ODE0LCAweGExMDMsIDB4MjBhMiwgMHgyMmEyLCAweDc5MjgsIDB4YTE4MCwKLQkweDAwMDAsIDB4MjAwNCwgMHhhMDhlLCAweDAwMDIsIDB4MDEzMCwgMHhhMDhlLCAweDAwMDQsIDB4MDExOCwKLQkweDIwMDksIDB4NDAwMCwgMHgwMDEwLCAweDIwMDksIDB4MDAwMCwgMHgyMWEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDYwYzMsIDB4MDAxOCwgMHgwODBjLCAweDc4MjEsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAzNiwKLQkweDAwNDYsIDB4MDA1NiwgMHgwMDY2LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4YTAwNiwKLQkweDIwYTMsIDB4MDIwMCwgMHgyMGEyLCAweDc5MzQsIDB4MjFhMiwgMHg3OTM4LCAweDIxYTIsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExOCwKLQkweGEwOTIsIDB4MDA3ZSwgMHgwMjY4LCAweDAwZDYsIDB4MjA2OSwgMHhhZDFiLCAweDJkMmMsIDB4OGQ2OCwKLQkweDJkMzQsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NmIxMCwgMHg2YzE0LCAweDAwZGUsIDB4MDAzMCwKLQkweDIwMTksIDB4MDAwMCwgMHg2NDk4LCAweDIwMjksIDB4MDAwMCwgMHg2NjM0LCAweDc4MjgsIDB4YTA4MCwKLQkweDAwMDcsIDB4MjAwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTEyOCwgMHgyNWEyLCAweDI2YTIsIDB4MjNhMiwKLQkweDI0YTIsIDB4MDAyMCwgMHgyM2EyLCAweDI0YTIsIDB4MjVhMiwgMHgyNmEyLCAweDAwNmUsIDB4MDA1ZSwKLQkweDAwNGUsIDB4MDAzZSwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYWEsIDB4MjBhMywKLQkweDAxMDAsIDB4MjBhMywgMHgwMDAwLCAweDIwYTMsIDB4MDAwOSwgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywKLQkweDAwMDgsIDB4MDgwYywgMHg3ODIxLCAweDAwMDUsIDB4MjBhMSwgMHgwMjBiLCAweDA4MGMsIDB4NzEwNiwKLQkweDIwYTMsIDB4MTQwMCwgMHgyMGEzLCAweDAwMDAsIDB4NzgzNCwgMHgyMGEyLCAweDc4MzgsIDB4MjBhMiwKLQkweDc4MjgsIDB4MjBhMiwgMHg3ODJjLCAweDIwYTIsIDB4NzgzMCwgMHhhMDg0LCAweDAwZmYsIDB4ODAwNywKLQkweDIwYTIsIDB4MjBhMywgMHgwMDAwLCAweDYwYzMsIDB4MDAxMCwgMHgwODBjLCAweDc4MjEsIDB4MDAwNSwKLQkweDIwYTEsIDB4MDIwYiwgMHgwODBjLCAweDcxYTIsIDB4MjBhMywgMHgwMTAwLCAweDIwYTMsIDB4MDAwMCwKLQkweDc4MjgsIDB4MjBhMiwgMHg3ODEwLCAweDIwYTIsIDB4NjBjMywgMHgwMDA4LCAweDA4MGMsIDB4NzgyMSwKLQkweDAwMDUsIDB4MDE0NiwgMHgyMGExLCAweDAyMGIsIDB4MDAzMSwgMHg2MGMzLCAweDAwMDAsIDB4MDgwYywKLQkweDc4MjEsIDB4MDE0ZSwgMHgwMDA1LCAweDIwZTEsIDB4OTA4MCwgMHgyMGUxLCAweDQwMDAsIDB4NzgxOCwKLQkweGEwODAsIDB4MDAyOCwgMHgyMDA0LCAweDIwMTEsIDB4YWQzNCwgMHgyMjE0LCAweGQyYWMsIDB4MTExMCwKLQkweGQwYmMsIDB4MDE4OCwgMHgwMGQ2LCAweGEwZTgsIDB4YWUzNCwgMHgyZDZjLCAweDY4MTAsIDB4YTA4NSwKLQkweDAzMDAsIDB4MjBhMiwgMHg2ODE0LCAweDIwYTIsIDB4MjA2OSwgMHhhZDFiLCAweDJkYTYsIDB4OGQ2OCwKLQkweDJkYTYsIDB4MDBkZSwgMHgwMDc4LCAweDAwZDYsIDB4YTBlOCwgMHhhZTM0LCAweDJkNmMsIDB4NjgxMCwKLQkweGEwODUsIDB4MDMwMCwgMHgyMGEyLCAweDY4MTQsIDB4MjBhMiwgMHgwMGRlLCAweDIwYTMsIDB4MDAwMCwKLQkweDYyMzQsIDB4MjJhMiwgMHgyMGEzLCAweDA4MTksIDB4MjBhMywgMHgwMDAwLCAweDA4MGMsIDB4NzgxMCwKLQkweDIyYTIsIDB4MjBhMywgMHgwMDAwLCAweDJmYTIsIDB4N2EwOCwgMHgyMmEyLCAweDIwYTMsIDB4MDAwMCwKLQkweDIwYTMsIDB4MDAwMCwgMHgwMDA1LCAweDIwYTEsIDB4MDIwYiwgMHgwMDc5LCAweDc5MTAsIDB4MjFhMiwKLQkweDIwYTMsIDB4MDAwMCwgMHg2MGMzLCAweDAwMDAsIDB4MjBlMSwgMHg5MDgwLCAweDYwYTcsIDB4OTU3NSwKLQkweDA4MGMsIDB4NzgyYiwgMHgwODBjLCAweDY1NzgsIDB4MDAwNSwgMHgwMTU2LCAweDAxMzYsIDB4MDAzNiwKLQkweDAwZDYsIDB4MDBlNiwgMHgyMGUxLCAweDkwODAsIDB4MjBlMSwgMHg0MDAwLCAweDc4NTQsIDB4MjA2OCwKLQkweGFkZjAsIDB4MDAwZiwgMHg3MjEwLCAweGEyOTYsIDB4MDBjMCwgMHhhMjk0LCAweGZmZmQsIDB4NzIxMiwKLQkweDcyMTQsIDB4YTI5NCwgMHgwMzAwLCAweDcyMTYsIDB4NzEwMCwgMHhhMTk0LCAweDAwZmYsIDB4NzMwOCwKLQkweGEzODQsIDB4MDBmZiwgMHhhMDhkLCAweGMyMDAsIDB4NzEwMiwgMHhhMzg0LCAweGZmMDAsIDB4YTIxNSwKLQkweDcyMGEsIDB4NzAwNCwgMHg3MjBjLCAweDcwMGUsIDB4NzIwNiwgMHgyMGE5LCAweDAwMGEsIDB4MmU5OCwKLQkweDUzYTYsIDB4NjBhMywgMHgwMDM1LCAweDZhMzgsIDB4YTI5NCwgMHg3MDAwLCAweGEyODYsIDB4MzAwMCwKLQkweDAxMTAsIDB4NjBhMywgMHgwMDM3LCAweDAwZWUsIDB4MDBkZSwgMHgwMDNlLCAweDAxM2UsIDB4MDE1ZSwKLQkweDAwMDUsIDB4MjAwOSwgMHgwMDkyLCAweDAwMTAsIDB4MjAwOSwgMHgwMDk2LCAweDYwYWIsIDB4MDAzNiwKLQkweDYxMTYsIDB4MDAwNSwgMHgyMDYxLCAweGI0MDAsIDB4MmE3MCwgMHg3MDY0LCAweDcwNDYsIDB4NzA0YiwKLQkweGI0MDAsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA3MSwgMHhhZDAwLCAweDIwOTEsIDB4ODAwMCwKLQkweDc1NDQsIDB4YTU4MiwgMHgwMDEwLCAweDA2MDgsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDAsIDB4MDE0OCwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwgMHhhYzAyLCAweDEyMDgsIDB4MGNiMCwKLQkweDIwNjEsIDB4YjQwMCwgMHgwYzk4LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NDYsIDB4YWNhOCwKLQkweDAwMTgsIDB4NzA1OCwgMHhhNTAyLCAweDEyMzAsIDB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MDRiLCAweGI0MDAsIDB4MGNjMCwgMHhhMDA2LCAweDBjYzAsIDB4MDBlNiwKLQkweDIwNzEsIDB4YWQwMCwgMHg3NTQ0LCAweGE1ODIsIDB4MDAxMCwgMHgwNjAwLCAweDcwNDgsIDB4MjA2MCwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4YWNlMCwgMHgwMDE4LCAweDcwNTgsIDB4YWMwMiwKLQkweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweGI0MDAsIDB4MGM5OCwgMHg2MDAzLCAweDAwMDgsIDB4ODUyOSwKLQkweDc1NDYsIDB4YWNhOCwgMHgwMDE4LCAweDcwNTgsIDB4YTUwMiwgMHgxMjI4LCAweDc1NGEsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDcwNGIsIDB4YjQwMCwgMHgwY2M4LCAweGEwMDYsIDB4MGNjOCwKLQkweGFjODIsIDB4YjQwMCwgMHgwYTBjLCAweDE0ZjYsIDB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YWMwMiwKLQkweDFhMGMsIDB4MTRmNiwgMHhhMDA2LCAweDYwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDYwMTIsIDB4NjAxNiwKLQkweDYwMWEsIDB4NjAxZiwgMHgwMDAwLCAweDYwMDMsIDB4MDAwMCwgMHg2MDUyLCAweDYwNTYsIDB4NjAyMiwKLQkweDYwMjYsIDB4NjAyYSwgMHg2MDJlLCAweDYwMzIsIDB4NjAzNiwgMHg2MDNhLCAweDYwM2UsIDB4MjA2MSwKLQkweGFkMDAsIDB4NjA0NCwgMHg4MDAwLCAweDYwNDYsIDB4YTA4NiwgMHgwMDAxLCAweDAxMDgsIDB4MDAwNSwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwgMHgwMTJlLCAweDBjYzAsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwZiwgMHgwMDAyLCAweDgwYjYsIDB4ODBjNSwgMHg4MGUwLCAweDgwZmIsIDB4OWE2MSwKLQkweDlhN2MsIDB4OWE5NywgMHg4MGI2LCAweDgwYzUsIDB4ODBiNiwgMHg4MTE2LCAweGExODYsIDB4MDAxMywKLQkweDExMjgsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweGExOGUsIDB4MDA0NywKLQkweDExMTgsIDB4YTAxNiwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwgMHgwMDY2LCAweDYwMDAsIDB4YTBiMiwKLQkweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweDgwZGUsIDB4ODQ3OCwKLQkweDg2MmQsIDB4ODBkZSwgMHg4NmEyLCAweDgxY2YsIDB4ODBkZSwgMHg4MGRlLCAweDg0MGEsIDB4OGE5MSwKLQkweDgwZGUsIDB4ODBkZSwgMHg4MGRlLCAweDgwZGUsIDB4ODBkZSwgMHg4MGRlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwNjYsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMTMsIDB4MDA2ZSwKLQkweDAwMDUsIDB4ODBmOSwgMHg5MDlhLCAweDgwZjksIDB4ODBmOSwgMHg4MGY5LCAweDgwZjksIDB4ODBmOSwKLQkweDgwZjksIDB4OTA0NSwgMHg5MjAwLCAweDgwZjksIDB4OTBjNywgMHg5MTNlLCAweDkwYzcsIDB4OTEzZSwKLQkweDgwZjksIDB4MDgwYywgMHgxNGY2LCAweDAwNjYsIDB4NjAwMCwgMHhhMGIyLCAweDAwMTAsIDB4MWEwYywKLQkweDE0ZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4ODExNCwgMHg4YWQyLCAweDhiOTgsIDB4OGNiOCwKLQkweDhlMTIsIDB4ODExNCwgMHg4MTE0LCAweDgxMTQsIDB4OGFhYywgMHg4ZmY1LCAweDhmZjgsIDB4ODExNCwKLQkweDgxMTQsIDB4ODExNCwgMHg4MTE0LCAweDkwMjIsIDB4MDgwYywgMHgxNGY2LCAweDAwNjYsIDB4NjAwMCwKLQkweGEwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4ODEyZiwKLQkweDgxMmYsIDB4ODEyZiwgMHg4MTUyLCAweDgxYTUsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4ODEzMSwKLQkweDgxMmYsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4ODEyZiwgMHg4MTJmLCAweDgxMmYsIDB4MDgwYywKLQkweDE0ZjYsIDB4YTE4NiwgMHgwMDAzLCAweDE5MGMsIDB4MTRmNiwgMHgwMGQ2LCAweDYwMDMsIDB4MDAwMywKLQkweDYxMDYsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGYsIDB4MDA0MCwgMHg2ODdjLCAweDY4MGEsIDB4Njg4MCwKLQkweDY4MGUsIDB4NjgxMywgMHgwMDAwLCAweDY4MTcsIDB4MDAwMCwgMHgwMGRlLCAweDJjMTAsIDB4MDgwYywKLQkweDFlNmUsIDB4MDgwYywgMHg2ODBiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmQwZCwKLQkweDAxMmUsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDcsIDB4MDAwMiwgMHg4MTVlLCAweDgxNWUsIDB4ODE2MCwKLQkweDgxN2YsIDB4ODE1ZSwgMHg4MTVlLCAweDgxNWUsIDB4ODE1ZSwgMHg4MTkxLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZDYsIDB4MDAxNiwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywgMHg2ZDBkLCAweDYwMDMsIDB4MDAwNCwKLQkweDYxMTAsIDB4MjE2OCwgMHg2ODU0LCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweGExMDgsIDB4NjExNiwKLQkweDY4NGYsIDB4MDAyMCwgMHg2ODVjLCAweDY4NWEsIDB4Njg3NCwgMHg2ODdlLCAweDY4NzgsIDB4Njg4MiwKLQkweDY4OTcsIDB4MDAwMCwgMHg2ODliLCAweDAwMDAsIDB4MDAxZSwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywKLQkweDZjMDUsIDB4MDBkNiwgMHg2MTEwLCAweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMjAsIDB4Njg0YiwKLQkweDAwMDYsIDB4MDgwYywgMHg1MTBjLCAweDAwZGUsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmQwZCwKLQkweDAwMDUsIDB4MDgwYywgMHg2YzA1LCAweDA4MGMsIDB4MmFkOSwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMTIwLCAweDY4NGIsIDB4MDAyOSwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwKLQkweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZkMGQsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDcsIDB4MDAwMiwKLQkweDgxYjMsIDB4ODFjMiwgMHg4MWIxLCAweDgxYjEsIDB4ODFiMSwgMHg4MWIxLCAweDgxYjEsIDB4ODFiMSwKLQkweDgxYjEsIDB4MDgwYywgMHgxNGY2LCAweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4YzBmNCwKLQkweDY4NGUsIDB4MDBkZSwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MDgwYywKLQkweDE4MjQsIDB4MDAwNSwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwgMHg2ODRiLCAweDAwMDAsIDB4Njg1MywKLQkweDAwMDAsIDB4MDgwYywgMHg1MTBjLCAweDAwZGUsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4YTFiNiwKLQkweDAwMTUsIDB4MTExOCwgMHgwODBjLCAweDgwNzgsIDB4MDAzMCwgMHhhMWI2LCAweDAwMTYsIDB4MTkwYywKLQkweDE0ZjYsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MjBhOSwgMHgwMDBlLCAweDJlOTgsIDB4NjAxMCwKLQkweDIwYTAsIDB4NTNhMywgMHgyMGE5LCAweDAwMDYsIDB4MzMxMCwgMHgzNDIwLCAweDkzOTgsIDB4OTRhMCwKLQkweDMzMTgsIDB4MzQyOCwgMHgyMjJlLCAweDIzMjYsIDB4YTI5MCwgMHgwMDAyLCAweGE1YTgsIDB4MDAwMiwKLQkweGEzOTgsIDB4MDAwMiwgMHhhNGEwLCAweDAwMDIsIDB4MWYwNCwgMHg4MWVhLCAweDAwZTYsIDB4MDgwYywKLQkweDk1OTYsIDB4MDEzMCwgMHg2MDEwLCAweDIwNzAsIDB4NzAwNywgMHgwMDAwLCAweDcwMzcsIDB4MDEwMywKLQkweDAwZWUsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBkNiwgMHgwMDM2LCAweDczMzAsIDB4YTM4NiwKLQkweDAyMDAsIDB4MTEzMCwgMHg2MDE4LCAweDIwNjgsIDB4NjgxMywgMHgwMGZmLCAweDY4MTcsIDB4ZmZmZCwKLQkweDYwMTAsIDB4YTAwNSwgMHgwMTMwLCAweDIwNjgsIDB4NjgwNywgMHgwMDAwLCAweDY4MzcsIDB4MDEwMywKLQkweDZiMzIsIDB4MDgwYywgMHg4MDc4LCAweDAwM2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwMTYsIDB4MjBhOSwKLQkweDAwMmEsIDB4YWU4MCwgMHgwMDBjLCAweDIwOTgsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwKLQkweDUzYTMsIDB4MjBhOSwgMHgwMDJhLCAweDYwMTAsIDB4YTA4MCwgMHgwMDAxLCAweDIwMDQsIDB4YTA4MCwKLQkweDAwMDIsIDB4MjBhMCwgMHg1M2EzLCAweDAwZTYsIDB4NjAxMCwgMHgyMDA0LCAweDIwNzAsIDB4NzAzNywKLQkweDAxMDMsIDB4MDBlZSwgMHgwODBjLCAweDgwNzgsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MjAwOSwKLQkweDAwMDAsIDB4NzAzMCwgMHhhMDg2LCAweDAxMDAsIDB4MDE0MCwgMHg3MDM4LCAweGEwODQsIDB4MDBmZiwKLQkweDgwOGUsIDB4NzAzYywgMHhhMDg0LCAweDAwZmYsIDB4ODA4NiwgMHhhMDgwLCAweDAwMDQsIDB4YTEwOCwKLQkweDIxYTgsIDB4YWU4MCwgMHgwMDBjLCAweDIwOTgsIDB4NjAxMCwgMHhhMDgwLCAweDAwMDIsIDB4MjBhMCwKLQkweDA4MGMsIDB4NDhiZSwgMHgwMGU2LCAweDA4MGMsIDB4OTU5NiwgMHgwMTQwLCAweDYwMTAsIDB4MjA3MCwKLQkweDcwMDcsIDB4MDAwMCwgMHg3MDM0LCAweDcwYjIsIDB4NzAzNywgMHgwMTAzLCAweDAwZWUsIDB4MDgwYywKLQkweDgwNzgsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHg2MDNmLCAweDAwMDAsIDB4MmM2OCwKLQkweDAwMTYsIDB4MjAwOSwgMHgwMDM1LCAweDA4MGMsIDB4OWEzNCwgMHgwMDFlLCAweDExNjgsIDB4MDAyNiwKLQkweDYyMjgsIDB4MjI2OCwgMHgwMDJlLCAweDIwNzEsIDB4YjI4YywgMHg2YjFjLCAweGEzODYsIDB4MDAwMywKLQkweDAxMzAsIDB4YTM4NiwgMHgwMDA2LCAweDAxMjgsIDB4MDgwYywgMHg4MDc4LCAweDAwMjAsIDB4MDAzMSwKLQkweDAwMTAsIDB4MDgwYywgMHg4MzIzLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsIDB4NjgxMCwKLQkweDIwNzgsIDB4YTE4NiwgMHgwMDE1LCAweDA5MDQsIDB4ODMwYywgMHhhMThlLCAweDAwMTYsIDB4MTkwNCwKLQkweDgzMjEsIDB4NzAwYywgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwgMHgxNzAwLCAweDE5MDQsIDB4ODJlYiwKLQkweDhmZmYsIDB4MDkwNCwgMHg4MzFmLCAweDY4MDgsIDB4YTA4NiwgMHhmZmZmLCAweDE5MDQsIDB4ODMwZSwKLQkweDc4NGMsIDB4YTA4NCwgMHgwMDYwLCAweGEwODYsIDB4MDAyMCwgMHgxMTUwLCAweDc5N2MsIDB4NzgxMCwKLQkweGExMDYsIDB4MTkwNCwgMHg4MzBlLCAweDc5ODAsIDB4NzgxNCwgMHhhMTA2LCAweDE5MDQsIDB4ODMwZSwKLQkweDA4MGMsIDB4OTc0MiwgMHg2ODU4LCAweDc4NTIsIDB4Nzg0YywgMHhjMGRjLCAweGMwZjQsIDB4YzBkNCwKLQkweDc4NGUsIDB4MDAyNiwgMHhhMDBlLCAweDZhMTQsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NjY2NSwKLQkweDc4NTQsIDB4YTIwYSwgMHgwMjA4LCAweDgwMTEsIDB4N2E1NiwgMHg4MmZmLCAweDAwMmUsIDB4MTEzOCwKLQkweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweDkzNzQsIDB4MDBjZSwgMHgwODA0LCAweDgzMWYsIDB4MDBjNiwKLQkweDAwZDYsIDB4MmY2OCwgMHg2ODM4LCAweGQwZmMsIDB4MTExOCwgMHgwODBjLCAweDQ5OTMsIDB4MDAxMCwKLQkweDA4MGMsIDB4NGI3YywgMHgwMGRlLCAweDAwY2UsIDB4MTU0OCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBjZSwgMHgwNGEwLCAweDcwMDgsIDB4YTA4NiwgMHgwMDBiLCAweDExYTAsIDB4NjAxOCwKLQkweDIwMGMsIDB4YzFiYywgMHgyMTAyLCAweDAwYzYsIDB4MmQ2MCwgMHg3ODUzLCAweDAwMDMsIDB4NjAwNywKLQkweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwMiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDBjZSwgMHgwMGUwLCAweDcwMGMsIDB4YTA4NiwgMHgyYTAwLCAweDExMzgsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwNCwgMHg2ODNlLCAweDAwOTgsIDB4MDQ3MSwgMHgwMDk4LCAweDhmZmYsIDB4MDkwYywKLQkweDE0ZjYsIDB4MDBjNiwgMHgwMGQ2LCAweDJkNjAsIDB4MmY2OCwgMHg2ODRiLCAweDAwMDMsIDB4MDgwYywKLQkweDkyNmYsIDB4MDgwYywgMHg5NzQyLCAweDA4MGMsIDB4OTc0ZSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBmZSwgMHgwMDA1LCAweGExODYsIDB4MDAxNSwgMHgxMTI4LCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjgzZSwgMHgwMDY4LCAweGExOGUsIDB4MDAxNiwgMHgxMTYwLCAweDAwYzYsIDB4MmQwMCwKLQkweDIwNjAsIDB4MDgwYywgMHhhYmI0LCAweDA4MGMsIDB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDBjZSwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDcyMjgsIDB4N2M4MCwKLQkweDdiN2MsIDB4ZDJmNCwgMHgwMTMwLCAweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDY4M2UsIDB4MDgwNCwKLQkweDgzOWQsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4OTI4ZiwgMHgwMGNlLCAweDY4MDQsIDB4YTA4NiwKLQkweDAwNTAsIDB4MTE2OCwgMHgwMGM2LCAweDJkMDAsIDB4MjA2MCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNTAsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwMGNlLCAweDA0ZjAsIDB4NjgwMCwKLQkweGEwODYsIDB4MDAwZiwgMHgwMWM4LCAweDhmZmYsIDB4MDkwYywgMHgxNGY2LCAweDY4MjAsIDB4ZDBkYywKLQkweDExOTgsIDB4NjgwMCwgMHhhMDg2LCAweDAwMDQsIDB4MTE5OCwgMHg3ODRjLCAweGQwYWMsIDB4MDE4MCwKLQkweDc4NGMsIDB4YzBkYywgMHhjMGY0LCAweDc4NGUsIDB4Nzg1MCwgMHhjMGY0LCAweGMwZmMsIDB4Nzg1MiwKLQkweDIwMDEsIDB4MDAwMSwgMHg2ODJlLCAweDAwZTAsIDB4MjAwMSwgMHgwMDA3LCAweDY4MmUsIDB4MDBjMCwKLQkweDc4NGMsIDB4ZDBiNCwgMHgxMTMwLCAweGQwYWMsIDB4MGRiOCwgMHg3ODRjLCAweGQwZjQsIDB4MWRhMCwKLQkweDBjMzgsIDB4ZDJlYywgMHgxZDg4LCAweDcwMjQsIDB4YTMwNiwgMHgxMTE4LCAweDcwMjAsIDB4YTQwNiwKLQkweDBkNTgsIDB4NzAyMCwgMHg2ODM2LCAweDcwMjQsIDB4NjgzYSwgMHgyMDAxLCAweDAwMDUsIDB4NjgyZSwKLQkweDA4MGMsIDB4OTg5NCwgMHgwODBjLCAweDZjNTAsIDB4MDAxMCwgMHgwODBjLCAweDgwNzgsIDB4MDA0ZSwKLQkweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMDI2LCAweDYwMzQsIDB4MjA2OCwKLQkweDZhMWMsIDB4YTI4NiwgMHgwMDA3LCAweDA5MDQsIDB4ODNlZSwgMHhhMjg2LCAweDAwMDIsIDB4MDVmMCwKLQkweGEyODYsIDB4MDAwMCwgMHgwNWQ4LCAweDY4MDgsIDB4NjMzOCwgMHhhMzA2LCAweDE1YjgsIDB4MjA3MSwKLQkweGIyOGMsIDB4YTE4NiwgMHgwMDE1LCAweDA1NjAsIDB4YTE4ZSwgMHgwMDE2LCAweDExOTAsIDB4NjAzMCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDEsIDB4MTE2MCwgMHg3MDBjLCAweGEwODYsIDB4MmEwMCwKLQkweDExNDAsIDB4NjAzNCwgMHhhMDgwLCAweDAwMDgsIDB4MjAwYywgMHhjMWRkLCAweGMxZjUsIDB4MjEwMiwKLQkweDAwYjgsIDB4MDBjNiwgMHg2MDM0LCAweDIwNjAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwKLQkweDA5MGMsIDB4MTRmNiwgMHg2ODUzLCAweDAwMDMsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwKLQkweDYwMWYsIDB4MDAwMiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwY2UsIDB4MDAzMCwKLQkweDYwMzQsIDB4MjA3MCwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwgMHg3MDNlLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMmUsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHgyMGE5LCAweDAwMGUsIDB4MmU5OCwKLQkweDYwMTAsIDB4MjBhMCwgMHg1M2EzLCAweGExYjYsIDB4MDAxNSwgMHgxMTQ4LCAweDYwMTgsIDB4MjA2OCwKLQkweDcwMzgsIDB4NjgwYSwgMHg3MDNjLCAweDY4MGUsIDB4NjgwMCwgMHhjMDhkLCAweDY4MDIsIDB4MDBkZSwKLQkweDA4MDQsIDB4ODFmNiwgMHgyMTAwLCAweGExYjIsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4YTFiMiwKLQkweDAwNDAsIDB4MWEwNCwgMHg4NDZlLCAweDAwMDIsIDB4ODQ2MiwgMHg4NDU2LCAweDg0NjIsIDB4ODQ2MiwKLQkweDg0NjIsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NjIsIDB4ODQ1NCwgMHg4NDYyLCAweDg0NjIsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NjIsIDB4ODQ2MiwKLQkweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwgMHg4NDU0LCAweDg0NTQsIDB4ODQ1NCwKLQkweDg0NTQsIDB4ODQ2MiwgMHg4NDU0LCAweDg0NTQsIDB4MDgwYywgMHgxNGY2LCAweDYwMDMsIDB4MDAwMSwKLQkweDYxMDYsIDB4MDgwYywgMHg2N2VlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwKLQkweDAxMmUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDY3ZWUsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZjNTAsIDB4MDEyZSwgMHgwMDA1LCAweDI2MDAsIDB4MDAwMiwKLQkweDg0NjIsIDB4ODQ3NiwgMHg4NDc2LCAweDg0NjIsIDB4ODQ2MiwgMHg4NDc2LCAweDA4MGMsIDB4MTRmNiwKLQkweDYwMDQsIDB4YTBiMiwgMHgwMDgwLCAweDFhMGMsIDB4MTRmNiwgMHhhMWI2LCAweDAwMTMsIDB4MDkwNCwKLQkweDg1MTgsIDB4YTFiNiwgMHgwMDI3LCAweDE5MDQsIDB4ODRkZSwgMHgwODBjLCAweDZiNzMsIDB4NjAwNCwKLQkweDA4MGMsIDB4OTc3OCwgMHgwMTg4LCAweDA4MGMsIDB4OTc4OSwgMHgwOTA0LCAweDg0ZDgsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MDkwNCwgMHg4NGRiLCAweGEwOGUsIDB4MDAyMiwgMHgwOTA0LCAweDg0ZDgsIDB4YTA4ZSwKLQkweDAwM2QsIDB4MDkwNCwgMHg4NGRiLCAweDA0YTgsIDB4MDgwYywgMHgyYWZmLCAweDIwMDEsIDB4MDAwNywKLQkweDA4MGMsIDB4NGMzMCwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDBjLCAweDA4MGMsIDB4ODVmMywKLQkweGExODYsIDB4MDA3ZSwgMHgxMTQ4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDE0LCAweGMyODUsIDB4MDgwYywKLQkweDU3NGYsIDB4MTEwOCwgMHhjMmFkLCAweDIyMDIsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MjExMCwKLQkweDIwMTksIDB4MDAyOCwgMHgwODBjLCAweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywKLQkweDY4MWQsIDB4MDBjNiwgMHg2MDE4LCAweGEwNjUsIDB4MDExMCwgMHgwODBjLCAweDRlY2YsIDB4MDBjZSwKLQkweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywKLQkweDRjOWYsIDB4MDgwYywgMHg5OTRlLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweDA4MGMsIDB4ODVmMywgMHgwY2IwLCAweDA4MGMsIDB4ODYyMSwgMHgwYzk4LCAweGExODYsIDB4MDAxNCwKLQkweDFkYjAsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDk3NzgsIDB4MTE4OCwKLQkweDA4MGMsIDB4MmFmZiwgMHg2MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDBjLCAweDA4MGMsIDB4ODVmMywKLQkweGExODYsIDB4MDA3ZSwgMHgxMTI4LCAweDIwMDEsIDB4YWQzNCwgMHgyMDBjLCAweGMxODUsIDB4MjEwMiwKLQkweDA4YzAsIDB4MDgwYywgMHg5Nzg5LCAweDExMTgsIDB4MDgwYywgMHg4NWYzLCAweDA4OTAsIDB4NjAwNCwKLQkweGEwOGUsIDB4MDAzMiwgMHgxMTU4LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweGFkODEsIDB4MjA3OSwKLQkweDAwMDAsIDB4MDgwYywgMHgyZGYxLCAweDAwZmUsIDB4MDBlZSwgMHgwODE4LCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MGQ1MCwgMHhhMDhlLCAweDAwMjIsIDB4MDkwYywgMHg4NWYzLCAweDA4MDQsIDB4ODRkMSwKLQkweGEwYjIsIDB4MDA0MCwgMHgxYTA0LCAweDg1ZGIsIDB4MjAwOCwgMHgwMDAyLCAweDg1NjAsIDB4ODU2MSwKLQkweDg1NjQsIDB4ODU2NywgMHg4NTZhLCAweDg1NmQsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU3MCwgMHg4NTdmLCAweDg1NWUsIDB4ODU4MSwKLQkweDg1N2YsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1N2YsIDB4ODU3ZiwKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU1ZSwKLQkweDg1YmIsIDB4ODU3ZiwgMHg4NTVlLCAweDg1N2IsIDB4ODU1ZSwgMHg4NTVlLCAweDg1NWUsIDB4ODU3YywKLQkweDg1NWUsIDB4ODU1ZSwgMHg4NTVlLCAweDg1N2YsIDB4ODViMiwgMHg4NTVlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZjAsIDB4MjAwMSwgMHgwMDBiLCAweDA0NjAsIDB4MjAwMSwgMHgwMDAzLCAweDA0NDgsIDB4MjAwMSwKLQkweDAwMDUsIDB4MDQzMCwgMHgyMDAxLCAweDAwMDEsIDB4MDQxOCwgMHgyMDAxLCAweDAwMDksIDB4MDQwMCwKLQkweDA4MGMsIDB4NmI3MywgMHg2MDAzLCAweDAwMDUsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGEwLCAweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDRjMzAsIDB4MDgwNCwKLQkweDg1Y2MsIDB4MDgwYywgMHg2YjczLCAweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwNCwgMHg2MDNlLCAweDYwMDMsIDB4MDAwNCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDZiNzMsIDB4NjAwMywgMHgwMDAyLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHgwMDM2LCAweDIwMTksIDB4YWQ1YywgMHgyMzA0LCAweGEwODQsIDB4ZmYwMCwKLQkweDExMjAsIDB4MjAwMSwgMHhhZmEzLCAweDIwMWMsIDB4MDA0MCwgMHg4MDA3LCAweGEwOWEsIDB4MDAwNCwKLQkweDBlYzAsIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsIDB4YTMxOCwgMHg2MzE2LCAweDAwM2UsIDB4MDgwYywKLQkweDZjNTAsIDB4MDhlOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5OTRlLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwOGEwLCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweGFkODEsIDB4MjA3OSwKLQkweDAwMDAsIDB4MDgwYywgMHgyZGYxLCAweDAwZmUsIDB4MDBlZSwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDA4MTgsIDB4MDgwYywgMHg2YjczLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MjAwMSwgMHhhZmEzLCAweDIwMDQsIDB4NjAxNiwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDI2MDAsIDB4MjAwOCwgMHgwMDAyLCAweDg1ZTYsIDB4ODVlNCwKLQkweDg1ZTQsIDB4ODVjYywgMHg4NWNjLCAweDg1ZTQsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4MTVmMCwgMHgwMGRlLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDAwZTYsIDB4MDAyNiwgMHgwMDE2LCAweDA4MGMsIDB4OTU5NiwKLQkweDA1MDgsIDB4NjAxMCwgMHgyMDcwLCAweDcwMzQsIDB4YTA4NiwgMHgwMTM5LCAweDExNDgsIDB4MjAwMSwKLQkweDAwMzAsIDB4MjAwOSwgMHgwMDAwLCAweDIwMTEsIDB4NDAwNSwgMHgwODBjLCAweDlhMDUsIDB4MDA5MCwKLQkweDcwMzgsIDB4ZDBmYywgMHgwMTc4LCAweDcwMDcsIDB4MDAwMCwgMHgwMDE2LCAweDYwMDQsIDB4YTA4ZSwKLQkweDAwMjEsIDB4MDE2MCwgMHhhMDhlLCAweDAwM2QsIDB4MDE0OCwgMHgwMDFlLCAweDcwMzcsIDB4MDEwMywKLQkweDcwMzMsIDB4MDEwMCwgMHgwMDFlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMWUsIDB4MDAwOSwKLQkweDBjYzgsIDB4MDBlNiwgMHhhY2YwLCAweDAwMDQsIDB4MmU3NCwgMHg3MDAwLCAweDIwNzAsIDB4NzAzNywKLQkweDAxMDMsIDB4NzAyMywgMHg4MDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDY2MTgsIDB4MjY2OCwKLQkweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweDAwZGUsIDB4YTBiMiwgMHgwMDBjLCAweDFhMGMsIDB4MTRmNiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDQzLCAweDExMjAsIDB4MDgwYywgMHg5OWMxLCAweDA4MDQsIDB4ODY5MiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDMzLCAweDExMjAsIDB4MDgwYywgMHg5OTcxLCAweDA4MDQsIDB4ODY5MiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDI4LCAweDExMjAsIDB4MDgwYywgMHg5N2I5LCAweDA4MDQsIDB4ODY5MiwKLQkweDY2MDQsIDB4YTZiNiwgMHgwMDI5LCAweDExMTgsIDB4MDgwYywgMHg5N2QwLCAweDA0ZDgsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAxZiwgMHgxMTE4LCAweDA4MGMsIDB4ODFkYywgMHgwNGEwLCAweDY2MDQsIDB4YTZiNiwKLQkweDAwMDAsIDB4MTExOCwgMHgwODBjLCAweDgzZjQsIDB4MDQ2OCwgMHg2NjA0LCAweGE2YjYsIDB4MDAyMiwKLQkweDExMTgsIDB4MDgwYywgMHg4MjA0LCAweDA0MzAsIDB4NjYwNCwgMHhhNmI2LCAweDAwMzUsIDB4MTExOCwKLQkweDA4MGMsIDB4ODI2YiwgMHgwMGY4LCAweDY2MDQsIDB4YTZiNiwgMHgwMDM5LCAweDExMTgsIDB4MDgwYywKLQkweDgzYTMsIDB4MDBjMCwgMHg2NjA0LCAweGE2YjYsIDB4MDAzZCwgMHgxMTE4LCAweDA4MGMsIDB4ODIxZSwKLQkweDAwODgsIDB4NjYwNCwgMHhhNmI2LCAweDAwNDQsIDB4MTExOCwgMHgwODBjLCAweDgyM2UsIDB4MDA1MCwKLQkweGExYjYsIDB4MDAxNSwgMHgxMTEwLCAweDAwNTMsIDB4MDAyOCwgMHhhMWI2LCAweDAwMTYsIDB4MTExOCwKLQkweDA4MDQsIDB4ODgzZiwgMHgwMDA1LCAweDA4MGMsIDB4ODBiZSwgMHgwY2UwLCAweDg2YjksIDB4ODZiYywKLQkweDg2YjksIDB4ODZmZSwgMHg4NmI5LCAweDg3Y2MsIDB4ODg0ZCwgMHg4NmI5LCAweDg2YjksIDB4ODgxYiwKLQkweDg2YjksIDB4ODgyZiwgMHhhMWI2LCAweDAwNDgsIDB4MDE0MCwgMHgyMGUxLCAweDAwMDUsIDB4M2QxOCwKLQkweDNlMjAsIDB4MmMxMCwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwgMHgwMGU2LCAweGFjZjAsIDB4MDAwNCwKLQkweDJlNzQsIDB4NzAwMCwgMHgyMDcwLCAweDcwMzcsIDB4MDEwMywgMHgwMGVlLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMDUsIDB4ZTAwMCwgMHhlMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4NzA4MCwKLQkweGEwODYsIDB4MDA3NCwgMHgxNTMwLCAweDA4MGMsIDB4YTZlOSwgMHgxMWIwLCAweDAwZDYsIDB4NjAxOCwKLQkweDIwNjgsIDB4NzAzMCwgMHhkMDhjLCAweDAxMjgsIDB4NjgwMCwgMHhkMGJjLCAweDAxMTAsIDB4YzBjNSwKLQkweDY4MDIsIDB4MDBkOSwgMHgwMGRlLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjMzAsIDB4MDgwYywKLQkweDJhZmYsIDB4MDgwYywgMHg4MDc4LCAweDAwNzgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NGMzMCwKLQkweDA4MGMsIDB4MmFmZiwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4NjdlZSwKLQkweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwZWUsIDB4MDAwNSwgMHg2ODAwLCAweGQwODQsIDB4MDE2OCwKLQkweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDRjMWUsIDB4MjA2OSwgMHhhZDUxLCAweDY4MDQsIDB4ZDBhNCwKLQkweDAxMjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGM1ZCwgMHgwMDA1LCAweDAwZDYsIDB4MjAxMSwKLQkweGFkMjAsIDB4MjIwNCwgMHhhMDg2LCAweDAwNzQsIDB4MTkwNCwgMHg4N2JhLCAweDYwMTgsIDB4MjA2OCwKLQkweDZhYTAsIDB4YTI4NiwgMHgwMDdlLCAweDExMjAsIDB4MDgwYywgMHg4OTRkLCAweDA4MDQsIDB4ODc1ZSwKLQkweDA4MGMsIDB4ODk0MywgMHg2MDE4LCAweDIwNjgsIDB4YTA4MCwgMHgwMDI4LCAweDIwMTQsIDB4YTI4NiwKLQkweDAwODAsIDB4MTFjMCwgMHg2ODEzLCAweDAwZmYsIDB4NjgxNywgMHhmZmZjLCAweDYwMTAsIDB4YTAwNSwKLQkweDAxMzgsIDB4MjA2OCwgMHg2ODA3LCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLCAweDY4MzMsIDB4MDIwMCwKLQkweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjMzAsIDB4MDgwYywgMHgyYWZmLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MDQsIDB4ODdiYiwgMHgwMGU2LCAweDIwNzEsIDB4YWQzNCwgMHgyZTA0LCAweGQwOWMsIDB4MDE4OCwKLQkweDIwNzEsIDB4YjI4MCwgMHg3MTA4LCAweDcyMGMsIDB4YTE4YywgMHgwMGZmLCAweDExMTgsIDB4YTI4NCwKLQkweGZmMDAsIDB4MDEzOCwgMHg2MDE4LCAweDIwNzAsIDB4NzBhMCwgMHhkMGJjLCAweDExMTAsIDB4NzExMiwKLQkweDcyMTYsIDB4MDBlZSwgMHg2MDEwLCAweGEwMDUsIDB4MDEyOCwgMHgyMDY4LCAweDY4MzgsIDB4ZDBmNCwKLQkweDAxMDgsIDB4MDg4MCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg0YzMwLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAwMywgMHgwODBjLCAweDY3ZWUsIDB4MDgwNCwgMHg4N2JiLCAweDY4NWMsIDB4ZDBlNCwKLQkweDAxZDAsIDB4MDgwYywgMHg5OTAzLCAweDA4MGMsIDB4NTc0ZiwgMHgwMTEwLCAweGQwZGMsIDB4MTkwMCwKLQkweDIwMTEsIDB4YWQzNCwgMHgyMjA0LCAweGMwYWQsIDB4MjAxMiwgMHgyMDAxLCAweGFmOGUsIDB4MjAwNCwKLQkweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc4ZTMsIDB4MDAwMCwgMHgwODBjLCAweDI2Y2IsIDB4NzhlMiwKLQkweDAwZmUsIDB4MDgwNCwgMHg4NzI4LCAweDA4MGMsIDB4OTkzNywgMHgyMDExLCAweGFkMzQsIDB4MjIwNCwKLQkweGMwYTUsIDB4MjAxMiwgMHgwMDA2LCAweDA4MGMsIDB4YTgwMSwgMHgwMDBlLCAweDE5MDQsIDB4ODcyOCwKLQkweGMwYjUsIDB4MjAxMiwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDAwYzYsIDB4MjAwOSwKLQkweDAwZWYsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzllYSwgMHg3OTMyLCAweDc5MzYsIDB4MDBmZSwKLQkweDA4MGMsIDB4MjZhMCwgMHgwMGY2LCAweDIwNzksIDB4YWQwMCwgMHg3OTcyLCAweDIxMDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgyNjc2LCAweDc5NGUsIDB4MDBmZSwgMHg4MTA4LCAweDA4MGMsIDB4NGM4MCwKLQkweDJjMDAsIDB4MDBjZSwgMHgxOTA0LCAweDg3MjgsIDB4NjAxYSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywKLQkweDRjMzAsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywKLQkweDY3ZWUsIDB4MDAwOCwgMHgwMDExLCAweDAwZGUsIDB4MDAwNSwgMHgyMDAxLCAweGFkMDAsIDB4MjAwNCwKLQkweGEwODYsIDB4MDAwMywgMHgwMTIwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDRjMzAsIDB4MDgwYywKLQkweDJhZmYsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBlNiwgMHgwMDI2LCAweDAwMTYsIDB4MjA3MSwKLQkweGFkMDAsIDB4NzA4MCwgMHhhMDg2LCAweDAwMTQsIDB4MTVmMCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywKLQkweDExMjgsIDB4NjAxMCwgMHhhMDA1LCAweDExMTAsIDB4MDgwYywgMHgzY2NlLCAweDAwZDYsIDB4NjAxOCwKLQkweDIwNjgsIDB4MDgwYywgMHg0ZDcyLCAweDA4MGMsIDB4ODZlZCwgMHgwMGRlLCAweDA4MGMsIDB4ODlmNywKLQkweDE1NTAsIDB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4Njg5MCwgMHgwMGRlLCAweGEwMDUsIDB4MDUxOCwKLQkweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDRjMzAsIDB4MDBlNiwgMHg2MDEwLCAweGEwNzUsIDB4MDFhOCwKLQkweDcwMzQsIDB4YTA4NCwgMHgwMGZmLCAweGEwODYsIDB4MDAzOSwgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMCwKLQkweDIwMDksIDB4MDAwMCwgMHgyMDExLCAweDQwMDAsIDB4MDgwYywgMHg5YTA1LCAweDAwMzAsIDB4NzAwNywKLQkweDAwMDAsIDB4NzAzNywgMHgwMTAzLCAweDcwMzMsIDB4MDIwMCwgMHgwMGVlLCAweDA4MGMsIDB4MmFmZiwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDIwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDg3YmQsIDB4MDAxZSwKLQkweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMTEsIDB4YWQyMCwgMHgyMjA0LCAweGEwODYsIDB4MDAxNCwKLQkweDExNTgsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NGMzMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwMDUsIDB4MjAxMSwKLQkweGFkMjAsIDB4MjIwNCwgMHhhMDg2LCAweDAwMDQsIDB4MTEzOCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKLQkweDRjMzAsIDB4MDgwYywgMHg4MDc4LCAweDAwMTAsIDB4MDgwYywgMHg4N2JkLCAweDAwMDUsIDB4MDAwYiwKLQkweDAwMDUsIDB4ODZiOSwgMHg4ODU0LCAweDg2YjksIDB4ODg4YSwgMHg4NmI5LCAweDg4ZmYsIDB4ODg0ZCwKLQkweDg2YjksIDB4ODZiOSwgMHg4OTEyLCAweDg2YjksIDB4ODkyMiwgMHg2NjA0LCAweGE2YjYsIDB4MDAxZSwKLQkweDExMTAsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsIDB4ODkzMiwKLQkweDExNzgsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywKLQkweDRjMzAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDY3ZWUsIDB4MDBmOCwKLQkweDIwMDksIDB4YjI4ZSwgMHgyMTA0LCAweGEwODYsIDB4MDAwOSwgMHgxMTYwLCAweDYwMTgsIDB4MjA2OCwKLQkweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDE4MCwgMHg4MDAxLCAweDY4NDIsIDB4NjAxNywKLQkweDAwMGEsIDB4MDA2OCwgMHgyMDA5LCAweGIyOGYsIDB4MjEwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTA4NiwKLQkweDE5MDAsIDB4MTExOCwgMHgwODBjLCAweDgwNzgsIDB4MDAxMCwgMHgwODBjLCAweDg3YmQsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDg5NDAsIDB4MDBkNiwgMHgyMDY5LCAweGFmOWQsIDB4MmQwNCwKLQkweGEwMDUsIDB4MDE2OCwgMHg2MDE4LCAweDIwNjgsIDB4NjhhMCwgMHhhMDg2LCAweDAwN2UsIDB4MTEzOCwKLQkweDIwNjksIDB4YWQxYywgMHgyZDA0LCAweDgwMDAsIDB4MjA2YSwgMHgwMGRlLCAweDAwMTAsIDB4MDBkZSwKLQkweDAwNzgsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywKLQkweDRjMzAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDY3ZWUsIDB4MDQyOCwKLQkweDA4MGMsIDB4ODVmMywgMHgyMDA5LCAweGIyOGUsIDB4MjEzNCwgMHhhNmI0LCAweDAwZmYsIDB4YTY4NiwKLQkweDAwMDUsIDB4MDFlMCwgMHhhNjg2LCAweDAwMGIsIDB4MDFiMCwgMHgyMDA5LCAweGIyOGYsIDB4MjEwNCwKLQkweGEwODQsIDB4ZmYwMCwgMHgxMTE4LCAweGE2ODYsIDB4MDAwOSwgMHgwMTgwLCAweGEwODYsIDB4MTkwMCwKLQkweDExNTAsIDB4YTY4NiwgMHgwMDA5LCAweDAxNTAsIDB4MjAwMSwgMHgwMDA0LCAweDA4MGMsIDB4NGMzMCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDEwLCAweDA4MGMsIDB4ODdiZCwgMHgwMDA1LCAweDAwZDYsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxMjgsIDB4NjgzOCwgMHhkMGZjLCAweDAxMTAsIDB4MDBkZSwKLQkweDBjOTAsIDB4NjAxOCwgMHgyMDY4LCAweDY4NDAsIDB4YTA4NCwgMHgwMGZmLCAweGEwMDUsIDB4MDE0MCwKLQkweDgwMDEsIDB4Njg0MiwgMHg2MDE3LCAweDAwMGEsIDB4NjAwNywgMHgwMDE2LCAweDAwZGUsIDB4MGMyOCwKLQkweDY4YTAsIDB4YTA4NiwgMHgwMDdlLCAweDExMzgsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDgwYywKLQkweDQ4ZjUsIDB4MDBlZSwgMHgwMDEwLCAweDA4MGMsIDB4MmFkOSwgMHgwMGRlLCAweDA4YTAsIDB4MDgwYywKLQkweDg5NDAsIDB4MTE1OCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg0YzMwLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAwMywgMHgwODBjLCAweDY3ZWUsIDB4MDAyMCwgMHgwODBjLCAweDg1ZjMsIDB4MDgwYywKLQkweDg3YmQsIDB4MDAwNSwgMHgwNDY5LCAweDExNTgsIDB4MjAwMSwgMHgwMDA4LCAweDA4MGMsIDB4NGMzMCwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDUsIDB4MDgwYywgMHg2N2VlLCAweDAwMTAsIDB4MDgwYywKLQkweDg3YmQsIDB4MDAwNSwgMHgwMGU5LCAweDExNTgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NGMzMCwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMTAsIDB4MDgwYywKLQkweDg3YmQsIDB4MDAwNSwgMHgyMDA5LCAweGIyOGUsIDB4MjEwNCwgMHhhMDg2LCAweDAwMDMsIDB4MTEzOCwKLQkweDIwMDksIDB4YjI4ZiwgMHgyMTA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDJhMDAsIDB4MDAwNSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwYzYsIDB4MDAxNiwgMHhhYzg4LCAweDAwMDYsIDB4MjE2NCwKLQkweDA4MGMsIDB4NGNlYiwgMHgwMDFlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwKLQkweDAwMzYsIDB4MDAxNiwgMHg2MDE4LCAweDIwNjgsIDB4MjA3MSwgMHhhZDM0LCAweDJlMDQsIDB4YTA4NSwKLQkweDAwMDMsIDB4MjA3MiwgMHgwODBjLCAweDg5Y2MsIDB4MDUzOCwgMHgyMDAxLCAweGFkNTIsIDB4MjAwNCwKLQkweGQwYTQsIDB4MDE1OCwgMHhhMDA2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJhLCAweDA4MGMsIDB4YTk2YywKLQkweDIwMDEsIDB4YWQwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwgMHgyMDE5LCAweDAwMmEsIDB4MjAwOSwKLQkweDAwMDEsIDB4MDgwYywgMHgyYWFjLCAweDIwNzEsIDB4YWQwMCwgMHgwODBjLCAweDI4ZmEsIDB4MDBjNiwKLQkweDAxNTYsIDB4MjBhOSwgMHgwMDgxLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDJiYzksIDB4ODEwOCwKLQkweDFmMDQsIDB4ODk3ZCwgMHgwMTVlLCAweDAwY2UsIDB4MDgwYywgMHg4OTQzLCAweDY4MTMsIDB4MDBmZiwKLQkweDY4MTcsIDB4ZmZmZSwgMHgyMDcxLCAweGIyODAsIDB4MjA3OSwgMHgwMTAwLCAweDJlMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjA2OSwgMHhhZDFiLCAweDIwNmEsIDB4NzhlNiwgMHgwMDA2LCAweDhlNzAsIDB4MmUwNCwKLQkweDIwNjksIDB4YWQxYywgMHgyMDZhLCAweDc4ZWEsIDB4NzgzMiwgMHg3ODM2LCAweDIwMTAsIDB4YTA4NCwKLQkweGZmMDAsIDB4MDAxZSwgMHhhMTA1LCAweDIwMDksIDB4YWQyNywgMHgyMDBhLCAweDIyMDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4MjAwOCwgMHgwODBjLCAweDI2YTAsIDB4MDgwYywgMHg1NzRmLCAweDAxNzAsIDB4MjA2OSwKLQkweGIyOGUsIDB4MjA3MSwgMHhhZjlmLCAweDY4MTAsIDB4MjA3MiwgMHg2ODE0LCAweDcwMDYsIDB4NjgxOCwKLQkweDcwMGEsIDB4NjgxYywgMHg3MDBlLCAweDA4MGMsIDB4OTkwMywgMHgwMDQwLCAweDIwMDEsIDB4MDAwNiwKLQkweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywgMHg4MDc4LCAweDAwMWUsIDB4MDAzZSwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MDE1NiwKLQkweDIwMTksIDB4YWQyNywgMHgyMzFjLCAweDgzZmYsIDB4MDFlOCwgMHgyMDcxLCAweGIyODAsIDB4MmUxNCwKLQkweGEyOTQsIDB4MDBmZiwgMHg3MDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMjA1LCAweGEzMDYsIDB4MTE5MCwKLQkweDIwMTEsIDB4YjI5NiwgMHhhZDk4LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4OGE3YywKLQkweDExNDgsIDB4MjAxMSwgMHhiMjlhLCAweGFkOTgsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywKLQkweDhhN2MsIDB4MTEwMCwgMHgwMTVlLCAweDAwZWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwKLQkweDIwNzEsIDB4YjI4YywgMHg3MDA0LCAweGEwODYsIDB4MDAxNCwgMHgxMWE4LCAweDcwMDgsIDB4YTA4NiwKLQkweDA4MDAsIDB4MTE4OCwgMHg3MDBjLCAweGQwZWMsIDB4MDE2MCwgMHhhMDg0LCAweDBmMDAsIDB4YTA4NiwKLQkweDAxMDAsIDB4MTEzOCwgMHg3MDI0LCAweGQwYTQsIDB4MTExMCwgMHhkMGFjLCAweDAxMTAsIDB4YTAwNiwKLQkweDAwMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwKLQkweDAwNzYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwMjksIDB4YWZkMCwgMHgyNTJjLCAweDIwMjEsIDB4YWZkNiwgMHgyNDI0LCAweDIwNjEsIDB4YjQwMCwKLQkweDIwNzEsIDB4YWQwMCwgMHg3MjQ0LCAweDcwNjQsIDB4YTIwMiwgMHgxNmYwLCAweDA4MGMsIDB4YTk5MCwKLQkweDA1YTAsIDB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDU4MCwgMHhhNzg2LCAweDAwMDcsIDB4MDU2OCwKLQkweDI1MDAsIDB4YWMwNiwgMHgwNTUwLCAweDI0MDAsIDB4YWMwNiwgMHgwNTM4LCAweDAwYzYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwNCwgMHgxMTEwLCAweDA4MGMsIDB4MTkwYiwgMHhhNzg2LCAweDAwMDgsIDB4MTE0OCwKLQkweDA4MGMsIDB4OTc4OSwgMHgxMTMwLCAweDAwY2UsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4OTc0ZSwKLQkweDAwYTAsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTYwLCAweGE3ODYsIDB4MDAwMywKLQkweDExZTgsIDB4NjgzNywgMHgwMTAzLCAweDZiNGEsIDB4Njg0NywgMHgwMDAwLCAweDA4MGMsIDB4NTEwYywKLQkweDA4MGMsIDB4OTc0MiwgMHgwODBjLCAweDk3NGUsIDB4MDBjZSwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwKLQkweGFjMDIsIDB4MTIxMCwgMHgwODA0LCAweDhhMmEsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA0ZSwKLQkweDAwNWUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweGE3ODYsIDB4MDAwNiwKLQkweDFkMDAsIDB4MDgwYywgMHhhOTFmLCAweDBjMzAsIDB4MjIwYywgMHgyMzA0LCAweGExMDYsIDB4MTEzMCwKLQkweDgyMTAsIDB4ODMxOCwgMHgxZjA0LCAweDhhN2MsIDB4YTAwNiwgMHgwMDA1LCAweDIzMDQsIDB4YTEwMiwKLQkweDAyMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMTAsIDB4MjAwMSwgMHgwMDAwLCAweGExOGQsIDB4MDAwMSwKLQkweDAwMDUsIDB4NjAwNCwgMHhhMDhhLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweDA4MGMsIDB4OTc3OCwKLQkweDAxMjAsIDB4MDgwYywgMHg5Nzg5LCAweDAxNjgsIDB4MDAyOCwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywKLQkweDk3ODksIDB4MDEzOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMDUsIDB4MDgwYywgMHg4NWYzLCAweDBjYjAsIDB4YTE4MiwgMHgwMDQwLCAweDAwMDIsIDB4OGFjMiwKLQkweDhhYzIsIDB4OGFjMiwgMHg4YWMyLCAweDhhYzIsIDB4OGFjMiwgMHg4YWMyLCAweDhhYzIsIDB4OGFjMiwKLQkweDhhYzIsIDB4OGFjMiwgMHg4YWM0LCAweDhhYzQsIDB4OGFjNCwgMHg4YWM0LCAweDhhYzIsIDB4OGFjMiwKLQkweDhhYzIsIDB4OGFjNCwgMHgwODBjLCAweDE0ZjYsIDB4NjAwYiwgMHhmZmZmLCAweDYwMDMsIDB4MDAwMSwKLQkweDYxMDYsIDB4MDgwYywgMHg2N2E4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmM1MCwKLQkweDAxMmUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweGEwODIsIDB4MDA0MCwKLQkweDA4MDQsIDB4OGI1ZSwgMHhhMTg2LCAweDAwMjcsIDB4MTFlOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDJhZDksIDB4MDBkNiwgMHg2MTEwLCAweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjgzNywKLQkweDAxMDMsIDB4Njg0YiwgMHgwMDI5LCAweDY4NDcsIDB4MDAwMCwgMHg2OTRjLCAweGMxYzUsIDB4Njk0ZSwKLQkweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTQsIDB4MTEyMCwgMHg2MDA0LCAweGEwODIsIDB4MDA0MCwKLQkweDA0MjgsIDB4YTE4NiwgMHgwMDQ2LCAweDAxMzgsIDB4YTE4NiwgMHgwMDQ1LCAweDAxMjAsIDB4YTE4NiwKLQkweDAwNDcsIDB4MTkwYywgMHgxNGY2LCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwODQsIDB4MDE5OCwKLQkweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4NjY5OSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4ZTAwMCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMiwKLQkweDExMTAsIDB4MDgwNCwgMHg4Yjk4LCAweDA4MGMsIDB4ODBiZSwgMHgwMDA1LCAweDAwMDIsIDB4OGIzYywKLQkweDhiM2EsIDB4OGIzYSwgMHg4YjNhLCAweDhiM2EsIDB4OGIzYSwgMHg4YjNhLCAweDhiM2EsIDB4OGIzYSwKLQkweDhiM2EsIDB4OGIzYSwgMHg4YjU3LCAweDhiNTcsIDB4OGI1NywgMHg4YjU3LCAweDhiM2EsIDB4OGI1NywKLQkweDhiM2EsIDB4OGI1NywgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDAwZDYsIDB4NjExMCwKLQkweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWMsIDB4Njg1MiwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywKLQkweDk3NDIsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywKLQkweDZiNzMsIDB4MDgwYywgMHg4MDc4LCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDAwMDIsIDB4OGI3NCwKLQkweDhiNzIsIDB4OGI3MiwgMHg4YjcyLCAweDhiNzIsIDB4OGI3MiwgMHg4YjcyLCAweDhiNzIsIDB4OGI3MiwKLQkweDhiNzIsIDB4OGI3MiwgMHg4Yjg2LCAweDhiODYsIDB4OGI4NiwgMHg4Yjg2LCAweDhiNzIsIDB4OGI5MSwKLQkweDhiNzIsIDB4OGI4NiwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg2YzUwLCAweDYwMTAsIDB4YTA4OCwKLQkweDAwMTMsIDB4MjEwNCwgMHhhMDg1LCAweDA0MDAsIDB4MjAwYSwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywKLQkweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDYwM2UsIDB4NjAwMywgMHgwMDBmLCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMDUsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4ODA3OCwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwKLQkweDhiYjAsIDB4OGM4OCwgMHg4Y2E5LCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwKLQkweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDhiYWUsIDB4OGJhZSwgMHg4YmFlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwZTYsIDB4MDBkNiwgMHg2MDNmLCAweDAwMDAsIDB4MjA3MSwgMHhiMjgwLCAweDcxMjQsIDB4NjEwYSwKLQkweDIwNzEsIDB4YjI4YywgMHg2MTEwLCAweDIxNjgsIDB4NzYxNCwgMHhhNmI0LCAweDBmZmYsIDB4ODZmZiwKLQkweDA5MDQsIDB4OGM1NCwgMHhhNjhjLCAweDBjMDAsIDB4MDFlOCwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMTk4LCAweDY4NGMsIDB4ZDBhYywgMHgwMTgwLCAweDYwMjAsIDB4ZDBkYywKLQkweDExNjgsIDB4Njg1MCwgMHhkMGJjLCAweDExNTAsIDB4NzMxOCwgMHg2ODE0LCAweGEzMDYsIDB4MTkwNCwKLQkweDhjNjYsIDB4NzMxYywgMHg2ODEwLCAweGEzMDYsIDB4MTkwNCwgMHg4YzY2LCAweDczMTgsIDB4NmI2MiwKLQkweDczMWMsIDB4NmI1ZSwgMHhhNjhjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDAyLCAweDA1MTgsIDB4YTE4NiwKLQkweDAwMjgsIDB4MTEyOCwgMHgwODBjLCAweDk3NjcsIDB4Njg0YiwgMHgwMDFjLCAweDAwZTgsIDB4ZDZkYywKLQkweDAxYTAsIDB4Njg0YiwgMHgwMDE1LCAweDY4NGMsIDB4ZDBhYywgMHgwMTcwLCAweDY5MTQsIDB4NmExMCwKLQkweDIxMDAsIDB4YTIwNSwgMHgwMTQ4LCAweDcwMTgsIDB4YTEwNiwgMHgxMTE4LCAweDcwMWMsIDB4YTIwNiwKLQkweDAxMTgsIDB4Njk2MiwgMHg2YTVlLCAweGM2ZGMsIDB4MDAzOCwgMHhkNmQ0LCAweDAxMTgsIDB4Njg0YiwKLQkweDAwMDcsIDB4MDAxMCwgMHg2ODRiLCAweDAwMDAsIDB4NjgzNywgMHgwMTAzLCAweDZlNDYsIDB4YTAxZSwKLQkweGQ2YzQsIDB4MDFmMCwgMHhhNjg2LCAweDAxMDAsIDB4MTE0MCwgMHgyMDAxLCAweGIyOTksIDB4MjAwNCwKLQkweGEwMDUsIDB4MTExOCwgMHhjNmM0LCAweDA4MDQsIDB4OGJiZiwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwKLQkweDgzZmYsIDB4MDE3MCwgMHhhMzhhLCAweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwKLQkweDIzMDgsIDB4MjAxOSwgMHhiMjk4LCAweGFkOTAsIDB4MDAxOSwgMHgwODBjLCAweDkyN2YsIDB4MDAzZSwKLQkweGQ2Y2MsIDB4MDkwNCwgMHg4Yzc5LCAweDcxMjQsIDB4Njk1YSwgMHg4MWZmLCAweDA5MDQsIDB4OGM3OSwKLQkweGExOTIsIDB4MDAyMSwgMHgxMjUwLCAweDIwNzEsIDB4YjI5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWUxOCwKLQkweGFkOTAsIDB4MDAxZCwgMHgwODBjLCAweDkyN2YsIDB4MDRhMCwgMHg2ODM4LCAweGQwZmMsIDB4MDEyMCwKLQkweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDBjNzgsIDB4MDBmNiwgMHgyZDc4LCAweDA4MGMsIDB4OTIyNCwKLQkweDAwZmUsIDB4MDgwYywgMHg5MjZmLCAweDA0MzgsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4NTAyOSwKLQkweDAwZmUsIDB4MDE4OCwgMHg2ODRjLCAweGQwYWMsIDB4MDE3MCwgMHg2MDIwLCAweGQwZGMsIDB4MTE1OCwKLQkweDY4NTAsIDB4ZDBiYywgMHgxMTQwLCAweDY4NGMsIDB4ZDBmNCwgMHgxMTI4LCAweDA4MGMsIDB4OTg2NiwKLQkweDAwZGUsIDB4MDBlZSwgMHgwMGUwLCAweDY4NGIsIDB4MDAwMCwgMHg2ODM3LCAweDAxMDMsIDB4NmU0NiwKLQkweDY4NGMsIDB4ZDBhYywgMHgwMTMwLCAweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAxMTAsIDB4MDgwYywKLQkweDhlMDQsIDB4MDgwYywgMHg1MTBjLCAweDYyMTgsIDB4MjI2OCwgMHg2YTNjLCAweDgyMTEsIDB4NmEzZSwKLQkweDA4MGMsIDB4OTgzNCwgMHgwMGRlLCAweDAwZWUsIDB4MTExMCwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweDAwZjYsIDB4NjAwMywgMHgwMDAzLCAweDIwNzksIDB4YjI4YywgMHg3YzA0LCAweDdiMDAsIDB4N2UwYywKLQkweDdkMDgsIDB4NjAxMCwgMHgyMDc4LCAweDc4NGMsIDB4ZDBhYywgMHgwMTIwLCAweDYwMDMsIDB4MDAwMiwKLQkweDAwZmUsIDB4MDAwNSwgMHg3YzEyLCAweDdiMTYsIDB4N2UwYSwgMHg3ZDBlLCAweDAwZmUsIDB4NjAzZiwKLQkweDAwMDAsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MDgwYywgMHg2ODBiLCAweDA4MGMsIDB4NmQwZCwKLQkweDAwMDUsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDQsIDB4NjExMCwKLQkweDIwZTEsIDB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwgMHgwODBjLCAweDE4MjQsIDB4MDAwNSwKLQkweGExODIsIDB4MDA0MCwgMHgwMDAyLCAweDhjY2UsIDB4OGNjZSwgMHg4Y2NlLCAweDhjY2UsIDB4OGNjZSwKLQkweDhjZDAsIDB4OGQ2MSwgMHg4Y2NlLCAweDhjY2UsIDB4OGQ3NywgMHg4ZGRiLCAweDhjY2UsIDB4OGNjZSwKLQkweDhjY2UsIDB4OGNjZSwgMHg4ZGVhLCAweDhjY2UsIDB4OGNjZSwgMHg4Y2NlLCAweDA4MGMsIDB4MTRmNiwKLQkweDAwNzYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MjA3MSwgMHhiMjhjLCAweDYxMTAsIDB4MjE3OCwKLQkweDc2MTQsIDB4YTZiNCwgMHgwZmZmLCAweDdlNDYsIDB4N2Y0YywgMHhjN2U1LCAweDdmNGUsIDB4NjIxOCwKLQkweDIyNjgsIDB4NmEzYywgMHg4MjExLCAweDZhM2UsIDB4ODZmZiwgMHgwOTA0LCAweDhkNWMsIDB4YTY5NCwKLQkweGZmMDAsIDB4YTI4NCwgMHgwYzAwLCAweDAxMjAsIDB4NzAxOCwgMHg3ODYyLCAweDcwMWMsIDB4Nzg1ZSwKLQkweGEyODQsIDB4MDMwMCwgMHgwOTA0LCAweDhkNWMsIDB4MDgwYywgMHgxNWQ5LCAweDA5MGMsIDB4MTRmNiwKLQkweDJkMDAsIDB4Nzg0YSwgMHg3ZjRjLCAweGM3Y2QsIDB4N2Y0ZSwgMHg2ODM3LCAweDAxMDMsIDB4NzgzOCwKLQkweDY4M2EsIDB4NzgzYywgMHg2ODNlLCAweDc4NDAsIDB4Njg0MiwgMHg2ZTQ2LCAweGE2OGMsIDB4MGMwMCwKLQkweDAxMjAsIDB4NzMxOCwgMHg2YjYyLCAweDczMWMsIDB4NmI1ZSwgMHhhNjhjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDIsIDB4MDE4MCwgMHhhMTg2LCAweDAwMjgsIDB4MTExOCwgMHg2ODRiLCAweDAwMWMsIDB4MDA2MCwKLQkweGQ2ZGMsIDB4MDExOCwgMHg2ODRiLCAweDAwMTUsIDB4MDAzOCwgMHhkNmQ0LCAweDAxMTgsIDB4Njg0YiwKLQkweDAwMDcsIDB4MDAxMCwgMHg2ODRiLCAweDAwMDAsIDB4NmY0ZSwgMHg3ODUwLCAweDY4NTIsIDB4Nzg1NCwKLQkweDY4NTYsIDB4YTAxZSwgMHhkNmM0LCAweDAxOTgsIDB4NzMyOCwgMHg3MzJjLCAweDZiNTYsIDB4ODNmZiwKLQkweDAxNzAsIDB4YTM4YSwgMHgwMDA5LCAweDAyMTAsIDB4MjAxOSwgMHgwMDA4LCAweDAwMzYsIDB4MjMwOCwKLQkweDIwMTksIDB4YjI5OCwgMHhhZDkwLCAweDAwMTksIDB4MDgwYywgMHg5MjdmLCAweDAwM2UsIDB4ZDZjYywKLQkweDAxZDgsIDB4NzEyNCwgMHg2OTVhLCAweDgxZmYsIDB4MDFiOCwgMHhhMTkyLCAweDAwMjEsIDB4MTI1MCwKLQkweDIwNzEsIDB4YjI5OCwgMHg4MzFjLCAweDIzMDAsIDB4YWUxOCwgMHhhZDkwLCAweDAwMWQsIDB4MDgwYywKLQkweDkyN2YsIDB4MDA1MCwgMHg3ODM4LCAweGQwZmMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMjAsIDB4Njk1YSwKLQkweDBjNzgsIDB4MmQ3OCwgMHgwODBjLCAweDkyMjQsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDA3ZSwKLQkweDAwMDUsIDB4MDBmNiwgMHg2MDAzLCAweDAwMDMsIDB4MjA3OSwgMHhiMjhjLCAweDdjMDQsIDB4N2IwMCwKLQkweDdlMGMsIDB4N2QwOCwgMHg2MDEwLCAweDIwNzgsIDB4N2MxMiwgMHg3YjE2LCAweDdlMGEsIDB4N2QwZSwKLQkweDAwZmUsIDB4MmMxMCwgMHgwODBjLCAweDFlNmUsIDB4MDgwYywgMHg3ODFhLCAweDAwMDUsIDB4MDBkNiwKLQkweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDUwMjksIDB4MDBmZSwgMHgwMTIwLCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NjAzZSwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg2YzA1LCAweDA4MGMsIDB4NmQwZCwKLQkweDYxMTAsIDB4MjE2OCwgMHg2OTRjLCAweGQxZTQsIDB4MDkwNCwgMHg4ZGQ5LCAweGQxY2MsIDB4MDU0MCwKLQkweDY5NDgsIDB4NjgzOCwgMHhkMGZjLCAweDAxZTgsIDB4MDAxNiwgMHg2ODRjLCAweDAwMDYsIDB4Njg1MCwKLQkweDAwMDYsIDB4YWQ5MCwgMHgwMDBkLCAweGExOTgsIDB4MDAwZCwgMHgyMDA5LCAweDAwMjAsIDB4MDE1NiwKLQkweDIxYTgsIDB4MjMwNCwgMHgyMDEyLCAweDgzMTgsIDB4ODIxMCwgMHgxZjA0LCAweDhkYTEsIDB4MDE1ZSwKLQkweDAwMGUsIDB4Njg1MiwgMHgwMDBlLCAweDY4NGUsIDB4MDAxZSwgMHgyMTY4LCAweDA4MGMsIDB4MTYwMCwKLQkweDA0MTgsIDB4MDAxNiwgMHgwODBjLCAweDE2MDAsIDB4MDBkZSwgMHgwODBjLCAweDkyNmYsIDB4MDBlMCwKLQkweDY4MzcsIDB4MDEwMywgMHg2OTQ0LCAweGExODQsIDB4MDBmZiwgMHhhMGI2LCAweDAwMDIsIDB4MDE4MCwKLQkweGEwODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywgMHgwMDYwLCAweGQxZGMsIDB4MDExOCwKLQkweDY4NGIsIDB4MDAxNSwgMHgwMDM4LCAweGQxZDQsIDB4MDExOCwgMHg2ODRiLCAweDAwMDcsIDB4MDAxMCwKLQkweDY4NGIsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5ODM0LCAweDExMTAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBkZSwgMHgwMDA1LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweDdhNjQsIDB4NjAwMywKLQkweDAwMDIsIDB4MjAwMSwgMHhhZmE1LCAweDIwMDQsIDB4NjAzZSwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywKLQkweDZkMGQsIDB4MDAwNSwgMHgwODBjLCAweDZjMDUsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4NjExMCwKLQkweDIxNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNTAsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAyOSwKLQkweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5NzQyLCAweDAwZGUsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2ZDBkLCAweDAwMDUsIDB4Njg0YiwgMHgwMDE1LCAweGQxZmMsIDB4MDEzOCwKLQkweDY4NGIsIDB4MDAwNywgMHg4MDAyLCAweDgwMDAsIDB4ODEwYSwgMHhhMTg5LCAweDAwMDAsIDB4Njk2MiwKLQkweDY4NWUsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwKLQkweDhlMjgsIDB4OGUyOCwgMHg4ZTJhLCAweDhlMjgsIDB4OGVlMywgMHg4ZWVmLCAweDhlMjgsIDB4OGUyOCwKLQkweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwMDc2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDIwNzEsIDB4YjI4YywKLQkweDYxMTAsIDB4MjE3OCwgMHg3NjE0LCAweGE2YjQsIDB4MGZmZiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMTUwLCAweGE2ODQsIDB4MDBmZiwgMHgxMTM4LCAweDYwMjAsIDB4ZDBmNCwKLQkweDAxMjAsIDB4MDgwYywgMHg5ODY2LCAweDA4MDQsIDB4OGVkZSwgMHg3ZTQ2LCAweDdmNGMsIDB4YzdlNSwKLQkweDdmNGUsIDB4NjIxOCwgMHgyMjY4LCAweDZhM2MsIDB4ODIxMSwgMHg2YTNlLCAweDg2ZmYsIDB4MDkwNCwKLQkweDhlZDQsIDB4YTY5NCwgMHhmZjAwLCAweGEyODQsIDB4MGMwMCwgMHgwMTIwLCAweDcwMTgsIDB4Nzg2MiwKLQkweDcwMWMsIDB4Nzg1ZSwgMHhhMjg0LCAweDAzMDAsIDB4MDkwNCwgMHg4ZWQyLCAweGE2ODYsIDB4MDEwMCwKLQkweDExNDAsIDB4MjAwMSwgMHhiMjk5LCAweDIwMDQsIDB4YTAwNSwgMHgxMTE4LCAweGM2YzQsIDB4N2U0NiwKLQkweDBjMjgsIDB4MDgwYywgMHgxNWQ5LCAweDA5MGMsIDB4MTRmNiwgMHgyZDAwLCAweDc4NGEsIDB4N2Y0YywKLQkweGE3YmQsIDB4MDIwMCwgMHg3ZjRlLCAweDY4MzcsIDB4MDEwMywgMHg3ODM4LCAweDY4M2EsIDB4NzgzYywKLQkweDY4M2UsIDB4Nzg0MCwgMHg2ODQyLCAweDZlNDYsIDB4YTY4YywgMHgwYzAwLCAweDAxMjAsIDB4NzMxOCwKLQkweDZiNjIsIDB4NzMxYywgMHg2YjVlLCAweGE2OGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMDIsIDB4MDE4MCwKLQkweGExODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywgMHgwMDYwLCAweGQ2ZGMsIDB4MDExOCwKLQkweDY4NGIsIDB4MDAxNSwgMHgwMDM4LCAweGQ2ZDQsIDB4MDExOCwgMHg2ODRiLCAweDAwMDcsIDB4MDAxMCwKLQkweDY4NGIsIDB4MDAwMCwgMHg2ZjRlLCAweDc4NTAsIDB4Njg1MiwgMHg3ODU0LCAweDY4NTYsIDB4YTAxZSwKLQkweGQ2YzQsIDB4MDE5OCwgMHg3MzI4LCAweDczMmMsIDB4NmI1NiwgMHg4M2ZmLCAweDAxNzAsIDB4YTM4YSwKLQkweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LCAweDIwMTksIDB4YjI5OCwKLQkweGFkOTAsIDB4MDAxOSwgMHgwODBjLCAweDkyN2YsIDB4MDAzZSwgMHhkNmNjLCAweDAxZDgsIDB4NzEyNCwKLQkweDY5NWEsIDB4ODFmZiwgMHgwMWI4LCAweGExOTIsIDB4MDAyMSwgMHgxMjUwLCAweDIwNzEsIDB4YjI5OCwKLQkweDgzMWMsIDB4MjMwMCwgMHhhZTE4LCAweGFkOTAsIDB4MDAxZCwgMHgwODBjLCAweDkyN2YsIDB4MDA1MCwKLQkweDc4MzgsIDB4ZDBmYywgMHgwMTIwLCAweDIwMDksIDB4MDAyMCwgMHg2OTVhLCAweDBjNzgsIDB4MmQ3OCwKLQkweDA4MGMsIDB4OTIyNCwgMHhkNmRjLCAweDExMTAsIDB4YTAwNiwgMHgwMDMwLCAweDIwMDEsIDB4MDAwMSwKLQkweDIwNzEsIDB4YjI4YywgMHg3MjE4LCAweDczMWMsIDB4MDgwYywgMHgxODZmLCAweDAwZGUsIDB4MDBlZSwKLQkweDAwZmUsIDB4MDA3ZSwgMHgwMDA1LCAweDIwMDEsIDB4YWZhNSwgMHgyMDA0LCAweDYwM2UsIDB4MjBlMSwKLQkweDAwMDUsIDB4M2QxOCwgMHgzZTIwLCAweDJjMTAsIDB4MDgwYywgMHgxODI0LCAweDAwMDUsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwNCwgMHg2MDNlLCAweDAwZDYsIDB4NjAwMywgMHgwMDAyLCAweDYxMTAsIDB4MjE2OCwKLQkweDY5NGMsIDB4ZDFlNCwgMHgwOTA0LCAweDhmZjMsIDB4NjAzZiwgMHgwMDAwLCAweDAwZjYsIDB4MmM3OCwKLQkweDA4MGMsIDB4NTAyOSwgMHgwMGZlLCAweDA1NDgsIDB4NjgxNCwgMHg2OTEwLCAweGExMTUsIDB4MDUyOCwKLQkweDZhNjAsIDB4YTIwNiwgMHgxMTE4LCAweDY4NWMsIDB4YTEwNiwgMHgwMWY4LCAweDY4NGMsIDB4YzBlNCwKLQkweDY4NGUsIDB4Njg0NywgMHgwMDAwLCAweDY4NjMsIDB4MDAwMCwgMHg2ODVmLCAweDAwMDAsIDB4Njk3YywKLQkweDY4MTAsIDB4YTEwMiwgMHg2MDNhLCAweDY5ODAsIDB4NjgxNCwgMHhhMTAzLCAweDYwMzYsIDB4NjAyMCwKLQkweGMwZjUsIDB4NjAyMiwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHg2ODNjLCAweDgwMDAsIDB4NjgzZSwKLQkweDAwZGUsIDB4MDgwYywgMHg5ODY2LCAweDA4MDQsIDB4OGZmMywgMHg2OTRjLCAweGQxY2MsIDB4MDkwNCwKLQkweDhmYzMsIDB4Njk0OCwgMHg2ODM4LCAweGQwZmMsIDB4MDkwNCwgMHg4Zjg4LCAweDAwMTYsIDB4Njg0YywKLQkweDAwMDYsIDB4Njg1MCwgMHgwMDA2LCAweDAwZjYsIDB4MjE3OCwgMHg3OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMWUwLCAweGEwODYsIDB4MDAyOCwgMHgxMTI4LCAweDY4NGIsIDB4MDAxYywKLQkweDc4NGIsIDB4MDAxYywgMHgwMGU4LCAweGQxZGMsIDB4MDE1OCwgMHg2ODRiLCAweDAwMTUsIDB4Nzg0YiwKLQkweDAwMTUsIDB4MDgwYywgMHg5OWVlLCAweDAxMTgsIDB4Nzk0NCwgMHhjMWRjLCAweDc5NDYsIDB4MDA4MCwKLQkweGQxZDQsIDB4MDEyOCwgMHg2ODRiLCAweDAwMDcsIDB4Nzg0YiwgMHgwMDA3LCAweDAwNDgsIDB4Njg0YywKLQkweGQwYWMsIDB4MDEzMCwgMHg2ODEwLCAweDY5MTQsIDB4YTExNSwgMHgwMTEwLCAweDA4MGMsIDB4OGUwNCwKLQkweDY4NDgsIDB4Nzg0YSwgMHg2ODYwLCAweDc4NjIsIDB4Njg1YywgMHg3ODVlLCAweGFkOTAsIDB4MDAwZCwKLQkweGFmOTgsIDB4MDAwZCwgMHgyMDA5LCAweDAwMjAsIDB4MDE1NiwgMHgyMWE4LCAweDIzMDQsIDB4MjAxMiwKLQkweDgzMTgsIDB4ODIxMCwgMHgxZjA0LCAweDhmNzYsIDB4MDE1ZSwgMHgwMGZlLCAweDAwMGUsIDB4Njg1MiwKLQkweDAwMGUsIDB4Njg0ZSwgMHgwMDFlLCAweDIxNjgsIDB4MDgwYywgMHgxNjAwLCAweDA4MDQsIDB4OGZlZSwKLQkweDAwMTYsIDB4MDBmNiwgMHgyMTc4LCAweDc5NDQsIDB4YTE4NCwgMHgwMGZmLCAweGEwYjYsIDB4MDAwMiwKLQkweDAxZTAsIDB4YTA4NiwgMHgwMDI4LCAweDExMjgsIDB4Njg0YiwgMHgwMDFjLCAweDc4NGIsIDB4MDAxYywKLQkweDAwZTgsIDB4ZDFkYywgMHgwMTU4LCAweDY4NGIsIDB4MDAxNSwgMHg3ODRiLCAweDAwMTUsIDB4MDgwYywKLQkweDk5ZWUsIDB4MDExOCwgMHg3OTQ0LCAweGMxZGMsIDB4Nzk0NiwgMHgwMDgwLCAweGQxZDQsIDB4MDEyOCwKLQkweDY4NGIsIDB4MDAwNywgMHg3ODRiLCAweDAwMDcsIDB4MDA0OCwgMHg2ODRjLCAweGQwYWMsIDB4MDEzMCwKLQkweDY4MTAsIDB4NjkxNCwgMHhhMTE1LCAweDAxMTAsIDB4MDgwYywgMHg4ZTA0LCAweDY4NjAsIDB4Nzg2MiwKLQkweDY4NWMsIDB4Nzg1ZSwgMHg2ODRjLCAweDc4NGUsIDB4MDBmZSwgMHgwODBjLCAweDE2MDAsIDB4MDBkZSwKLQkweDA4MGMsIDB4OTI2ZiwgMHgwNDU4LCAweDY4MzcsIDB4MDEwMywgMHg2OTQ0LCAweGExODQsIDB4MDBmZiwKLQkweGEwYjYsIDB4MDAwMiwgMHgwMWIwLCAweGEwODYsIDB4MDAyOCwgMHgxMTE4LCAweDY4NGIsIDB4MDAxYywKLQkweDAwZDgsIDB4ZDFkYywgMHgwMTQ4LCAweDY4NGIsIDB4MDAxNSwgMHgwODBjLCAweDk5ZWUsIDB4MDExOCwKLQkweDY5NDQsIDB4YzFkYywgMHg2OTQ2LCAweDAwODAsIDB4ZDFkNCwgMHgwMTE4LCAweDY4NGIsIDB4MDAwNywKLQkweDAwNTgsIDB4Njg0YiwgMHgwMDAwLCAweDY4NGMsIDB4ZDBhYywgMHgwMTMwLCAweDY4MTAsIDB4NjkxNCwKLQkweGExMTUsIDB4MDExMCwgMHgwODBjLCAweDhlMDQsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4OTgzNCwKLQkweDExMTAsIDB4MDgwYywgMHg4MDc4LCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDZiNzMsIDB4MDAxMCwKLQkweDA4MGMsIDB4NmMwNSwgMHgwODBjLCAweDk1OTYsIDB4MDFjMCwgMHgwMGQ2LCAweDYxMTAsIDB4MjE2OCwKLQkweDY4MzcsIDB4MDEwMywgMHgyMDA5LCAweGFkMGMsIDB4MjEwYywgMHhkMThjLCAweDExYzAsIDB4ZDE4NCwKLQkweDExOTgsIDB4NjEwOCwgMHg2OTRhLCAweGExOGUsIDB4MDAyOSwgMHgxMTEwLCAweDA4MGMsIDB4YWJmYSwKLQkweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDgwYywgMHg2ZDBkLCAweDAwMDUsIDB4Njg0YiwgMHgwMDA0LCAweDBjODgsIDB4Njg0YiwKLQkweDAwMDQsIDB4MGM3MCwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwKLQkweDkwMzgsIDB4OTAzOCwgMHg5MDNhLCAweDkwMzgsIDB4OTAzZCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwKLQkweDkwMzgsIDB4OTAzOCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwgMHg5MDM4LCAweDkwMzgsIDB4OTAzOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHgwMDA2LCAweDAwMjYsIDB4YTAxNiwKLQkweDA4MGMsIDB4MTgyNCwgMHgwMDJlLCAweDAwMGUsIDB4MDAwNSwgMHhhMTgyLCAweDAwODUsIDB4MDAwMiwKLQkweDkwNTEsIDB4OTA0ZiwgMHg5MDRmLCAweDkwNWQsIDB4OTA0ZiwgMHg5MDRmLCAweDkwNGYsIDB4MDgwYywKLQkweDE0ZjYsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg2N2E4LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg2YzUwLCAweDAxMmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwNTYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MjA3MSwgMHhiMjgwLCAweDcyMjQsIDB4NjIxMiwgMHg3MjIwLCAweDA4MGMsIDB4OTU4NiwKLQkweDAxYTAsIDB4MjI2OCwgMHg2ODAwLCAweGEwODYsIDB4MDAwMCwgMHgwMTc4LCAweDYwMTgsIDB4NmQxOCwKLQkweGE1MmUsIDB4MTE1OCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHg5MjhmLCAweDAwY2UsIDB4MDEyOCwKLQkweDY4MDMsIDB4MDAwMiwgMHg2MDA3LCAweDAwODYsIDB4MDAxMCwgMHg2MDA3LCAweDAwODcsIDB4NjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwMGY2LCAweDIyNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMTUwLCAweDY4MjAsIDB4ZDBlYywgMHgwMTM4LCAweDAwYzYsIDB4MjI2MCwKLQkweDYwM2YsIDB4MDAwMCwgMHgwODBjLCAweDk4NjYsIDB4MDBjZSwgMHgwMGVlLCAweDAwZGUsIDB4MDA1ZSwKLQkweDAwMmUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTE2MCwgMHg2MDA0LCAweGEwOGEsIDB4MDA4NSwKLQkweDBhMGMsIDB4MTRmNiwgMHhhMDhhLCAweDAwOGMsIDB4MWEwYywgMHgxNGY2LCAweGEwODIsIDB4MDA4NSwKLQkweDAwNzIsIDB4YTE4NiwgMHgwMDI3LCAweDAxMjAsIDB4YTE4NiwgMHgwMDE0LCAweDE5MGMsIDB4MTRmNiwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4OTBiZSwKLQkweDkwYzAsIDB4OTBjMCwgMHg5MGJlLCAweDkwYmUsIDB4OTBiZSwgMHg5MGJlLCAweDA4MGMsIDB4MTRmNiwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4NiwKLQkweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweGEwODIsIDB4MDA4NSwgMHgyMDA4LCAweDA0YTgsIDB4YTE4NiwKLQkweDAwMjcsIDB4MTFlOCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4NjAxMCwKLQkweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNTAsIDB4NjgzNywgMHgwMTAzLCAweDY4NDcsIDB4MDAwMCwKLQkweDY4NGIsIDB4MDAyOSwgMHgwODBjLCAweDUxMGMsIDB4MDgwYywgMHg5NzQyLCAweDAwZGUsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywgMHg4MGJlLCAweDBjZTAsIDB4YTE4NiwKLQkweDAwMTQsIDB4MWRkMCwgMHgwODBjLCAweDZiNzMsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywKLQkweDk1OTYsIDB4MGQ2MCwgMHg2ODM3LCAweDAxMDMsIDB4Njg0NywgMHgwMDAwLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NTAsIDB4YzBlYywgMHg2ODUyLCAweDA4ZjAsIDB4MDAwMiwgMHg5MTBlLCAweDkxMGMsIDB4OTEwYywKLQkweDkxMGMsIDB4OTEwYywgMHg5MTBjLCAweDkxMjYsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4YTE4NiwKLQkweDAwMzUsIDB4MTExOCwgMHgyMDAxLCAweGFmYTMsIDB4MDAxMCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwKLQkweDYwMTYsIDB4NjAwMywgMHgwMDBjLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywKLQkweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4YTE4NiwKLQkweDAwMzUsIDB4MTExOCwgMHgyMDAxLCAweGFmYTMsIDB4MDAxMCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwKLQkweDYwMTYsIDB4NjAwMywgMHgwMDBlLCAweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweGExODIsIDB4MDA4YywKLQkweDEyMjAsIDB4YTE4MiwgMHgwMDg1LCAweDAyMDgsIDB4MDAxYSwgMHgwODBjLCAweDgwYmUsIDB4MDAwNSwKLQkweDkxNGYsIDB4OTE0ZiwgMHg5MTRmLCAweDkxNGYsIDB4OTE1MSwgMHg5MWE0LCAweDkxNGYsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDBkNiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHg1MDI5LCAweDAwZmUsIDB4MDE2OCwKLQkweDYwMzAsIDB4YTA4YywgMHhmZjAwLCAweDgxMGYsIDB4YTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4YTE4NiwKLQkweDAwMzUsIDB4MTExOCwgMHgwMGRlLCAweDA4MDQsIDB4OTFiNywgMHgwODBjLCAweDk3NDIsIDB4MDgwYywKLQkweDk1OTYsIDB4MDFjOCwgMHg2MDEwLCAweDIwNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NTAsIDB4ZDBiNCwKLQkweDAxMjgsIDB4Njg0YiwgMHgwMDA2LCAweGMwZWMsIDB4Njg1MiwgMHgwMDQ4LCAweGQwYmMsIDB4MDExOCwKLQkweDY4NGIsIDB4MDAwMiwgMHgwMDIwLCAweDY4NGIsIDB4MDAwNSwgMHgwODBjLCAweDk4MDMsIDB4Njg0NywKLQkweDAwMDAsIDB4MDgwYywgMHg1MTBjLCAweDJjNjgsIDB4MDgwYywgMHg4MDIyLCAweDAxYzAsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDYwMGIsIDB4ZmZmZiwgMHgyMDA5LCAweGIyOGUsIDB4MjEwYywKLQkweDYxMzYsIDB4MjAwOSwgMHhiMjhmLCAweDIxMGMsIDB4NjEzYSwgMHg2OTE4LCAweDYxMWEsIDB4MDgwYywKLQkweDk5NTYsIDB4Njk1MCwgMHg2MTUyLCAweDYwMWYsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MmQ2MCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMGRlLCAweDAwMDUsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4NTAyOSwKLQkweDAwZmUsIDB4MDU5OCwgMHg2MDMwLCAweGEwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweGExODYsIDB4MDAzNSwKLQkweDAxMzAsIDB4YTE4NiwgMHgwMDFlLCAweDAxMTgsIDB4YTE4NiwgMHgwMDM5LCAweDE1MzAsIDB4MDBkNiwKLQkweDJjNjgsIDB4MDgwYywgMHg5YTM0LCAweDE5MDQsIDB4OTFmYywgMHgwODBjLCAweDgwMjIsIDB4MDFkOCwKLQkweDYxMDYsIDB4NjAwMywgMHgwMDAxLCAweDYwMWYsIDB4MDAwMSwgMHg2OTE4LCAweDYxMWEsIDB4NjkyOCwKLQkweDYxMmEsIDB4NjkyYywgMHg2MTJlLCAweDY5MzAsIDB4YTE4YywgMHgwMGZmLCAweDYxMzIsIDB4NjkzNCwKLQkweDYxMzYsIDB4NjkzOCwgMHg2MTNhLCAweDY5NTAsIDB4NjE1MiwgMHgwODBjLCAweDk5NTYsIDB4MDgwYywKLQkweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDJkNjAsIDB4MDBmOCwgMHgwMGQ2LCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMWM4LCAweDY4MzcsIDB4MDEwMywgMHg2ODUwLCAweGQwYjQsIDB4MDEyOCwKLQkweGMwZWMsIDB4Njg1MiwgMHg2ODRiLCAweDAwMDYsIDB4MDA0OCwgMHhkMGJjLCAweDAxMTgsIDB4Njg0YiwKLQkweDAwMDIsIDB4MDAyMCwgMHg2ODRiLCAweDAwMDUsIDB4MDgwYywgMHg5ODAzLCAweDY4NDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDk3NDIsIDB4MDBkZSwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4MDgwYywgMHg5NTk2LCAweDAxNDAsIDB4NjgzNywKLQkweDAxMDMsIDB4Njg0YiwgMHgwMDI4LCAweDY4NDcsIDB4MDAwMCwgMHgwODBjLCAweDUxMGMsIDB4MDBkZSwKLQkweDAwMWUsIDB4YTE4NiwgMHgwMDEzLCAweDAxNDgsIDB4YTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4YTE4NiwKLQkweDAwMjcsIDB4MDExOCwgMHgwODBjLCAweDgwYmUsIDB4MDAzMCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDA1NiwgMHgwMDY2LCAweDAwZDYsIDB4MDBmNiwKLQkweDIwMjksIDB4MDAwMSwgMHhhMTgyLCAweDAxMDEsIDB4MTIwOCwgMHgwMDEwLCAweDIwMDksIDB4MDEwMCwKLQkweDIxMzAsIDB4MjA2OSwgMHhiMjk4LCAweDgzMWMsIDB4MjMwMCwgMHhhZDE4LCAweDIwMDksIDB4MDAyMCwKLQkweGFmOTAsIDB4MDAxZCwgMHgwODBjLCAweDkyN2YsIDB4YTZiMiwgMHgwMDIwLCAweDc4MDQsIDB4YTA2ZCwKLQkweDAxMTAsIDB4MDgwYywgMHgxNjAwLCAweDA4MGMsIDB4MTVkOSwgMHgwNTAwLCAweDg1MjgsIDB4NjgzNywKLQkweDAxMTAsIDB4NjgzYiwgMHgwMDAwLCAweDJkMjAsIDB4N2MwNiwgMHhhNjhhLCAweDAwM2QsIDB4MTIyOCwKLQkweDI2MDgsIDB4YWQ5MCwgMHgwMDBmLCAweDA0NTksIDB4MDA4OCwgMHhhNmIyLCAweDAwM2MsIDB4MjAwOSwKLQkweDAwM2MsIDB4MmQ3OCwgMHhhZDkwLCAweDAwMGYsIDB4MDQxMSwgMHgwYzI4LCAweDAwZmUsIDB4ODUyZiwKLQkweGE1YWQsIDB4MDAwMywgMHg3ZDM2LCAweGE1YWMsIDB4MDAwMCwgMHgwMDI4LCAweDAwZmUsIDB4ODUyZiwKLQkweGE1YWQsIDB4MDAwMywgMHg3ZDM2LCAweDAwZGUsIDB4MDA2ZSwgMHgwMDVlLCAweDAwMDUsIDB4MDBmNiwKLQkweDhkZmYsIDB4MDE1OCwgMHg2ODA0LCAweGEwN2QsIDB4MDEzMCwgMHg2ODA3LCAweDAwMDAsIDB4MDgwYywKLQkweDUxMGMsIDB4MmY2OCwgMHgwY2I4LCAweDA4MGMsIDB4NTEwYywgMHgwMGZlLCAweDAwMDUsIDB4MDE1NiwKLQkweGExODQsIDB4MDAwMSwgMHgwMTA4LCAweDgxMDgsIDB4ODEwYywgMHgyMWE4LCAweDIzMDQsIDB4ODAwNywKLQkweDIwMTIsIDB4ODMxOCwgMHg4MjEwLCAweDFmMDQsIDB4OTI4NiwgMHgwMTVlLCAweDAwMDUsIDB4MDA2NiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMzEsIDB4MDAwMSwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwKLQkweDAwODMsIDB4MDEyZSwgMHgwMDZlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA2NiwKLQkweDIwMzEsIDB4MDAwMCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwNmUsIDB4MDEyZSwKLQkweDAwMDUsIDB4OTJjMywgMHg5MmMzLCAweDkyYmUsIDB4OTJlNSwgMHg5MmIxLCAweDkyYmUsIDB4OTJlNSwKLQkweDkyYmUsIDB4MDgwYywgMHgxNGY2LCAweDAwMzYsIDB4MjAxOSwgMHgwMDEwLCAweDA4MGMsIDB4YTU2NiwKLQkweDYwMWYsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsIDB4MDAzZSwgMHgwMDA1LCAweGEwMDYsIDB4MDAwNSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZDYsIDB4ODZmZiwgMHgxMWQ4LCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMWMwLCAweDY4MzQsIDB4YTA4NiwgMHgwMTM5LCAweDExMjgsIDB4Njg0YiwKLQkweDAwMDUsIDB4Njg1MywgMHgwMDAwLCAweDAwMjgsIDB4YTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywKLQkweDUxZGYsIDB4MDgwYywgMHg5ODAzLCAweDA4MGMsIDB4NTEwYywgMHgwODBjLCAweDgwNzgsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBkZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNlMCwgMHg2MDAwLCAweGEwOGEsIDB4MDAxMCwKLQkweDFhMGMsIDB4MTRmNiwgMHgwMDBiLCAweDAwMDUsIDB4OTJmYywgMHg5MzE5LCAweDkyZmUsIDB4OTMzOCwKLQkweDkzMTYsIDB4OTJmYywgMHg5MmJlLCAweDkyYzMsIDB4OTJjMywgMHg5MmJlLCAweDkyYmUsIDB4OTJiZSwKLQkweDkyYmUsIDB4OTJiZSwgMHg5MmJlLCAweDkyYmUsIDB4MDgwYywgMHgxNGY2LCAweDg2ZmYsIDB4MTE5OCwKLQkweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTEwLCAweDA4MGMsIDB4OTgwMywKLQkweDAwZGUsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MDgwYywKLQkweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4MTkwYiwKLQkweDBjMjgsIDB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAyNCwgMHhhYzA2LCAweDExMTAsIDB4MDgwYywKLQkweDc5ZTEsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4YTA4NiwgMHgwMDA2LCAweDExNTAsIDB4MDA4NiwKLQkweDAwOTYsIDB4MjA0OSwgMHgwMDAxLCAweDJjNDAsIDB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwKLQkweDAwMTAsIDB4MDgwYywgMHg3OGRlLCAweDAwZWUsIDB4MTk0OCwgMHgwODBjLCAweDkyYmUsIDB4MDAwNSwKLQkweDAwMzYsIDB4MDBlNiwgMHgyMDcxLCAweGFmYzcsIDB4NzAzYywgMHhhYzA2LCAweDExNDAsIDB4MjAxOSwKLQkweDAwMDAsIDB4MDgwYywgMHg3YTY0LCAweDAwZWUsIDB4MDAzZSwgMHgwODA0LCAweDkyZmUsIDB4MDgwYywKLQkweDdjYjgsIDB4MDBlZSwgMHgwMDNlLCAweDE5MDQsIDB4OTJmZSwgMHgwODBjLCAweDkyYmUsIDB4MDAwNSwKLQkweDAwYzYsIDB4NjAxYywgMHhhMDg0LCAweDAwMGYsIDB4MDAxMywgMHgwMGNlLCAweDAwMDUsIDB4OTM2OSwKLQkweDkzZDMsIDB4OTUwMSwgMHg5Mzc0LCAweDk3NGUsIDB4OTM2OSwgMHhhNTU4LCAweDgwNzgsIDB4OTNkMywKLQkweDkzNjIsIDB4OTU1ZiwgMHgwODBjLCAweDE0ZjYsIDB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywKLQkweDg1ZjMsIDB4MDAwNSwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg2YzUwLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMDUsIDB4NjAxNywgMHgwMDAxLCAweDAwMDUsIDB4NjAxMCwgMHhhMDgwLCAweDAwMTksIDB4MmMwMiwKLQkweDYwMDAsIDB4YTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDBiLCAweDAwMDUsIDB4OTM4ZiwKLQkweDkzOTEsIDB4OTNiMSwgMHg5M2MzLCAweDkzZDAsIDB4OTM4ZiwgMHg5MzY5LCAweDkzNjksIDB4OTM2OSwKLQkweDkzYzMsIDB4OTNjMywgMHg5MzhmLCAweDkzOGYsIDB4OTM4ZiwgMHg5MzhmLCAweDkzY2QsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDBlNiwgMHg2MDEwLCAweDIwNzAsIDB4NzA1MCwgMHhjMGI1LCAweDcwNTIsIDB4MjA3MSwKLQkweGFmYzcsIDB4NzAyNCwgMHhhYzA2LCAweDAxOTAsIDB4MDgwYywgMHg3OGRlLCAweDYwMDcsIDB4MDA4NSwKLQkweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDBlZSwgMHgwMDA1LCAweDYwMTcsIDB4MDAwMSwKLQkweDBjZDgsIDB4MDBkNiwgMHg2MDEwLCAweDIwNjgsIDB4Njg1MCwgMHhjMGI1LCAweDY4NTIsIDB4MDBkZSwKLQkweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAxZiwgMHgwMDAyLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDAwZDYsIDB4NjAxNywgMHgwMDAxLCAweDYwMTAsIDB4MjA2OCwKLQkweDY4NTAsIDB4YzBiNSwgMHg2ODUyLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweDA4MGMsIDB4MTkwYiwgMHgwOGYwLCAweDYwMDAsIDB4YTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwKLQkweDAwMGIsIDB4MDAwNSwgMHg5M2VhLCAweDkzNzEsIDB4OTNlYywgMHg5M2VhLCAweDkzZWMsIDB4OTNlYywKLQkweDkzNmEsIDB4OTNlYSwgMHg5MzY0LCAweDkzNjQsIDB4OTNlYSwgMHg5M2VhLCAweDkzZWEsIDB4OTNlYSwKLQkweDkzZWEsIDB4OTNlYSwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4NjgwNCwKLQkweGEwODQsIDB4MDBmZiwgMHgwMGRlLCAweGEwOGEsIDB4MDAwYywgMHgxYTBjLCAweDE0ZjYsIDB4MDAwYiwKLQkweDAwMDUsIDB4OTQwNSwgMHg5NGE3LCAweDk0MDcsIDB4OTQ0MSwgMHg5NDA3LCAweDk0NDEsIDB4OTQwNywKLQkweDk0MTEsIDB4OTQwNSwgMHg5NDQxLCAweDk0MDUsIDB4OTQyZCwgMHgwODBjLCAweDE0ZjYsIDB4NjAwNCwKLQkweGEwOGUsIDB4MDAxNiwgMHgwNTg4LCAweGEwOGUsIDB4MDAwNCwgMHgwNTcwLCAweGEwOGUsIDB4MDAwMiwKLQkweDA1NTgsIDB4NjAwNCwgMHgwODBjLCAweDk3ODksIDB4MDkwNCwgMHg5NGMwLCAweGEwOGUsIDB4MDAyMSwKLQkweDA5MDQsIDB4OTRjNCwgMHhhMDhlLCAweDAwMjIsIDB4MDkwNCwgMHg5NGMwLCAweGEwOGUsIDB4MDAzZCwKLQkweDA5MDQsIDB4OTRjNCwgMHhhMDhlLCAweDAwMzksIDB4MDkwNCwgMHg5NGM4LCAweGEwOGUsIDB4MDAzNSwKLQkweDA5MDQsIDB4OTRjOCwgMHhhMDhlLCAweDAwMWUsIDB4MDE4OCwgMHhhMDhlLCAweDAwMDEsIDB4MTE1MCwKLQkweDAwZDYsIDB4NjAxOCwgMHgyMDY4LCAweDY4MDQsIDB4YTA4NCwgMHgwMGZmLCAweDAwZGUsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDExMCwgMHgwODBjLCAweDJhZDksIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4OTc0ZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDYxMDQsIDB4YTE4NiwgMHgwMDE2LCAweDA5MDQsIDB4OTQ5OCwKLQkweGExODYsIDB4MDAwMiwgMHgxNTE4LCAweDYwMTgsIDB4MjA2OCwgMHgyMDAxLCAweGFkMzQsIDB4MjAwNCwKLQkweGQwYWMsIDB4MTkwNCwgMHg5NGVhLCAweDY4YTAsIDB4ZDBiYywgMHgxOTA0LCAweDk0ZWEsIDB4Njg0MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDAxOTAsIDB4ODAwMSwgMHg2ODQyLCAweDYwMTMsIDB4MDAwMCwKLQkweDYwMWYsIDB4MDAwNywgMHg2MDE3LCAweDAzOTgsIDB4NjAzZiwgMHgwMDAwLCAweDA4MGMsIDB4ODAyMiwKLQkweDAxMjgsIDB4MmQwMCwgMHg2MDFhLCAweDYwMWYsIDB4MDAwMSwgMHgwNDUwLCAweDAwZGUsIDB4MDBjZSwKLQkweDYwMDQsIDB4YTA4ZSwgMHgwMDAyLCAweDExYTgsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODYsIDB4MDA3ZSwgMHgxMTcwLCAweDIwMDksIDB4YWQzNCwgMHgyMTA0LCAweGMwODUsIDB4MjAwYSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZDAwLCAweDA4MGMsIDB4NDhmNSwgMHgwMGVlLCAweDA4MGMsIDB4ODVmMywKLQkweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4MmFkOSwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHgyYWZmLCAweDAxMmUsIDB4MDBlZSwgMHgwODBjLCAweDk3NGUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDRjMzAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwKLQkweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBkZSwgMHgwMGNlLCAweDBjODAsIDB4MDBjNiwKLQkweDAwZDYsIDB4NjEwNCwgMHhhMTg2LCAweDAwMTYsIDB4MGQ1OCwgMHg2MDE4LCAweDIwNjgsIDB4Njg0MCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDA1LCAweDA5MDQsIDB4OTQ2ZSwgMHg4MDAxLCAweDY4NDIsIDB4NjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDA4MGMsIDB4NmM1MCwgMHgwMGRlLCAweDAwY2UsIDB4MDhiOCwKLQkweDA4MGMsIDB4ODVmMywgMHgwODA0LCAweDk0M2UsIDB4MDgwYywgMHg4NjIxLCAweDA4MDQsIDB4OTQzZSwKLQkweDAwZDYsIDB4MmM2OCwgMHg2MTA0LCAweDA4MGMsIDB4OWEzNCwgMHgwMGRlLCAweDAxMTgsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBiOCwgMHg2MDA0LCAweDgwMDcsIDB4NjEzMCwgMHhhMThjLCAweDAwZmYsIDB4YTEwNSwKLQkweDYwMzIsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDFmLCAweDAwMDIsIDB4NjAzOCwKLQkweDYwMGEsIDB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywKLQkweDZjNTAsIDB4MDAwNSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4MmFkOSwKLQkweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgyYWZmLCAweDYwMTMsIDB4MDAwMCwKLQkweDYwMWYsIDB4MDAwNywgMHg2MDE3LCAweDAzOTgsIDB4NjAzZiwgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwKLQkweDAwMDUsIDB4NjAwMCwgMHhhMDhhLCAweDAwMTAsIDB4MWEwYywgMHgxNGY2LCAweDAwMGIsIDB4MDAwNSwKLQkweDk1MTgsIDB4OTUxOCwgMHg5NTE4LCAweDk1MTgsIDB4OTUxOCwgMHg5NTE4LCAweDk1MTgsIDB4OTUxOCwKLQkweDk1MTgsIDB4OTM2OSwgMHg5NTE4LCAweDkzNzEsIDB4OTUxYSwgMHg5MzcxLCAweDk1MjcsIDB4OTUxOCwKLQkweDA4MGMsIDB4MTRmNiwgMHg2MDA0LCAweGEwODYsIDB4MDA4YiwgMHgwMTQ4LCAweDYwMDcsIDB4MDA4YiwKLQkweDYwMDMsIDB4MDAwZCwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywKLQkweDk3NDIsIDB4MDgwYywgMHg5NTk2LCAweDA1ODAsIDB4MDgwYywgMHgyYWQ5LCAweDAwZDYsIDB4MDgwYywKLQkweDk1OTYsIDB4MDE2OCwgMHg2MDEwLCAweDIwNjgsIDB4NjgzNywgMHgwMTAzLCAweDY4NGIsIDB4MDAwNiwKLQkweDY4NDcsIDB4MDAwMCwgMHg2ODUwLCAweGMwZWQsIDB4Njg1MiwgMHgwODBjLCAweDUxMGMsIDB4MmM2OCwKLQkweDA4MGMsIDB4ODAyMiwgMHgwMTUwLCAweDY4MTgsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4MDBjNiwKLQkweDJkNjAsIDB4MDgwYywgMHg5NzRlLCAweDAwY2UsIDB4MDAwOCwgMHgyZDYwLCAweDAwZGUsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDY3ZWUsIDB4MDgwYywgMHg2YzUwLCAweDAwMTAsIDB4MDgwYywgMHg5NzRlLCAweDAwMDUsIDB4NjAwMCwKLQkweGEwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAwYiwgMHgwMDA1LCAweDk1NzYsIDB4OTU3NiwKLQkweDk1NzYsIDB4OTU3OCwgMHg5NTc5LCAweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4OTU3NiwKLQkweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDk1NzYsIDB4OTU3NiwgMHg5NTc2LCAweDA4MGMsIDB4MTRmNiwKLQkweDAwMDUsIDB4MDgwYywgMHg3Y2I4LCAweDE5MGMsIDB4MTRmNiwgMHg2MTEwLCAweDIxNjgsIDB4Njg0YiwKLQkweDAwMDYsIDB4MDgwYywgMHg1MTBjLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweGEyODQsIDB4MDAwNywKLQkweDExNTgsIDB4YTI4MiwgMHhiNDAwLCAweDAyNDAsIDB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YTIwMiwKLQkweDEyMTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4YTAwNiwgMHgwY2U4LCAweDAwMjYsIDB4NjIxMCwKLQkweGEyOTQsIDB4ZjAwMCwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAwNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjEsIDB4YjQwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzM0NCwKLQkweDcwNjQsIDB4YTMwMiwgMHgxMmE4LCAweDYwMWMsIDB4YTIwNiwgMHgxMTYwLCAweDA4MGMsIDB4OThlMywKLQkweDAxNDgsIDB4MDgwYywgMHg5Nzg5LCAweDExMTAsIDB4MDgwYywgMHg4NWYzLCAweDAwYzYsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBjZSwgMHhhY2UwLCAweDAwMTgsIDB4NzA1OCwgMHhhYzAyLCAweDEyMDgsIDB4MGMzOCwKLQkweDAxMmUsIDB4MDAwZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwKLQkweDAwMTYsIDB4YTE4OCwgMHhhZTM0LCAweDIxMGMsIDB4ODFmZiwgMHgwMTcwLCAweDIwNjEsIDB4YjQwMCwKLQkweDIwNzEsIDB4YWQwMCwgMHgwMDE2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxMzgsIDB4NjExYSwKLQkweDA4MGMsIDB4MmFkOSwgMHgwODBjLCAweDgwNzgsIDB4YTAwNiwgMHgwMDEwLCAweGEwODUsIDB4MDAwMSwKLQkweDAwMWUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDU2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MDA1ZSwgMHgwMTgwLCAweDY2MTIsIDB4NjUxYSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDMsIDB4MjAwOSwgMHgwMDRiLCAweDA4MGMsIDB4ODBhNywKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwNWUsIDB4MDBjZSwgMHgwMDA1LCAweGEwMDYsIDB4MGNkMCwKLQkweDAwYzYsIDB4MDA1NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MmEwLCAweDAwYzYsIDB4MDgwYywKLQkweDgwMjIsIDB4MDA1ZSwgMHgwNTA4LCAweDYwMTMsIDB4MDAwMCwgMHg2NTFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwMywgMHgwMGM2LCAweDI1NjAsIDB4MDgwYywgMHg0ZWNmLCAweDAwY2UsIDB4MDgwYywKLQkweDY4ZTcsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywKLQkweGE3MTIsIDB4MDA3ZSwgMHgyMDA5LCAweDAwNGMsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwKLQkweDAxMmUsIDB4MDA1ZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2QwLCAweDAwZjYsIDB4MDBjNiwKLQkweDAwNDYsIDB4MDBjNiwgMHgwODBjLCAweDgwMjIsIDB4MmM3OCwgMHgwMGNlLCAweDAxODAsIDB4N2UxMiwKLQkweDJjMDAsIDB4NzgxYSwgMHg3ODFmLCAweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDA4MGMsIDB4OTY4MywKLQkweDJmNjAsIDB4MjAwOSwgMHgwMDRkLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDA0ZSwKLQkweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBjNiwgMHgwMDQ2LCAweDAwYzYsIDB4MDgwYywKLQkweDgwMjIsIDB4MmM3OCwgMHgwMGNlLCAweDAxNzgsIDB4N2UxMiwgMHgyYzAwLCAweDc4MWEsIDB4NzgxZiwKLQkweDAwMDMsIDB4MjAyMSwgMHgwMDA1LCAweDA0MzksIDB4MmY2MCwgMHgyMDA5LCAweDAwNGUsIDB4MDgwYywKLQkweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAwNGUsIDB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwKLQkweDAwYzYsIDB4MDA0NiwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgyYzc4LCAweDAwY2UsIDB4MDE3OCwKLQkweDdlMTIsIDB4MmMwMCwgMHg3ODFhLCAweDc4MWYsIDB4MDAwMywgMHgyMDIxLCAweDAwMDQsIDB4MDA1OSwKLQkweDJmNjAsIDB4MjAwOSwgMHgwMDUyLCAweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDA0ZSwKLQkweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4MDA3NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NGU3MSwgMHgwMTE4LCAweDIwMDEsIDB4OTY4OCwgMHgwMDI4LCAweDA4MGMsIDB4NGU0MywKLQkweDAxNTgsIDB4MjAwMSwgMHg5NjhlLCAweDAwMDYsIDB4YTAwZSwgMHgyNDAwLCAweDA4MGMsIDB4NTFkZiwKLQkweDA4MGMsIDB4NTEwYywgMHgwMDBlLCAweDA4MDcsIDB4MjQxOCwgMHgwODBjLCAweDZiMTUsIDB4NjJhMCwKLQkweDAwODYsIDB4MjA0MSwgMHgwMDAxLCAweDIwMzksIDB4MDAwMSwgMHgyNjA4LCAweDA4MGMsIDB4NjkwMCwKLQkweDAwOGUsIDB4MDgwYywgMHg2ODFkLCAweDJmMDgsIDB4MjY0OCwgMHgwODBjLCAweGE3MTIsIDB4NjEzYywKLQkweDgxZmYsIDB4MDkwYywgMHg2OWE5LCAweDAxMmUsIDB4MDA3ZSwgMHgwMDllLCAweDAwMDUsIDB4MDBjNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4OCwKLQkweDY2MGEsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwKLQkweDIwMDksIDB4MDAxZiwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwKLQkweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxODgsIDB4NjYwYSwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwOCwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwgMHgwMDIxLCAweDA4MGMsIDB4ODBhNywKLQkweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHhhMDA2LCAweDBjZDgsIDB4MDBjNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE4OCwKLQkweDY2MGEsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwgMHgwMDAxLCAweDJkMDAsIDB4NjAxMiwKLQkweDIwMDksIDB4MDAzZCwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwKLQkweDA4MGMsIDB4OTgwNywgMHgwMDFlLCAweDAxODAsIDB4NjExYSwgMHgwODBjLCAweDk5NTYsIDB4NjAxZiwKLQkweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDgwYTcsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxODgsIDB4NjYwYSwKLQkweDYxMWEsIDB4MDgwYywgMHg5OTU2LCAweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MjAwOSwKLQkweDAwNDQsIDB4MDgwYywgMHg4MGE3LCAweGEwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwKLQkweGEwMDYsIDB4MGNkOCwgMHgwMDI2LCAweDAwZDYsIDB4NjIxOCwgMHgyMjY4LCAweDZhM2MsIDB4ODJmZiwKLQkweDAxMTAsIDB4ODIxMSwgMHg2YTNlLCAweDAwZGUsIDB4MDAyZSwgMHgwMDA1LCAweDAwMDYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMTkwLCAweDYwMTMsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDcsIDB4MjAwMSwKLQkweGFmYTMsIDB4MjAwNCwgMHgwMDA2LCAweGEwODIsIDB4MDA1MSwgMHgwMDBlLCAweDAyMDgsIDB4ODAwNCwKLQkweDYwMTYsIDB4MDgwYywgMHhhYmI0LCAweDYwM2YsIDB4MDAwMCwgMHgwMDBlLCAweDAwMDUsIDB4MDA2NiwKLQkweDAwYzYsIDB4MDBkNiwgMHgyMDMxLCAweGFkNTIsIDB4MjYzNCwgMHhkNmU0LCAweDAxMjgsIDB4NjYxOCwKLQkweDI2NjAsIDB4NmU0OCwgMHgwODBjLCAweDRkZmMsIDB4MDBkZSwgMHgwMGNlLCAweDAwNmUsIDB4MDAwNSwKLQkweDAwMDYsIDB4MDAxNiwgMHg2MDA0LCAweGEwOGUsIDB4MDAwMiwgMHgwMTQwLCAweGEwOGUsIDB4MDAwMywKLQkweDAxMjgsIDB4YTA4ZSwgMHgwMDA0LCAweDAxMTAsIDB4YTA4NSwgMHgwMDAxLCAweDAwMWUsIDB4MDAwZSwKLQkweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LCAweDYwMTAsIDB4YTA2ZCwgMHgwMTQ4LCAweDY4MzQsIDB4YTA4NiwKLQkweDAxMzksIDB4MDEzOCwgMHg2ODM4LCAweGQwZmMsIDB4MDExMCwgMHhhMDA2LCAweDAwMTAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDBkZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE5MCwgMHg2MTFhLCAweDA4MGMsIDB4OTk1NiwKLQkweDYwMWYsIDB4MDAwMSwgMHgyZDAwLCAweDYwMTIsIDB4MDgwYywgMHgyYWQ5LCAweDIwMDksIDB4MDAyOCwKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwKLQkweDBjZDgsIDB4YTE4NiwgMHgwMDE1LCAweDExNzgsIDB4MjAxMSwgMHhhZDIwLCAweDIyMDQsIDB4YTA4NiwKLQkweDAwNzQsIDB4MTE0OCwgMHgwODBjLCAweDg5NDMsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAyOSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwMDIwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwKLQkweGExODYsIDB4MDAxNiwgMHgxMTI4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDRjMzAsIDB4MDBlOCwKLQkweGExODYsIDB4MDAxNSwgMHgxMWU4LCAweDIwMTEsIDB4YWQyMCwgMHgyMjA0LCAweGEwODYsIDB4MDAxNCwKLQkweDExYjgsIDB4MDBkNiwgMHg2MDE4LCAweDIwNjgsIDB4MDgwYywgMHg0ZDcyLCAweDAwZGUsIDB4MDgwYywKLQkweDg5ZjcsIDB4MTE3MCwgMHgwMGQ2LCAweDYwMTgsIDB4MjA2OCwgMHg2ODkwLCAweDAwZGUsIDB4YTAwNSwKLQkweDAxMzgsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDgxZjYsIDB4MDAyMCwKLQkweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDgwNzgsIDB4MDAwNSwgMHg2ODQ4LCAweGEwODYsIDB4MDAwNSwKLQkweDExMDgsIDB4MDAwOSwgMHgwMDA1LCAweDY4NTAsIDB4YzBhZCwgMHg2ODUyLCAweDAwMDUsIDB4MDBlNiwKLQkweDAxMjYsIDB4MjA3MSwgMHhhZDAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTQ0LCAweGE1ODIsIDB4MDAwMSwKLQkweDA2MDgsIDB4NzA0OCwgMHgyMDYwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4YWNlMCwKLQkweDAwMTgsIDB4NzA1OCwgMHhhYzAyLCAweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweGI0MDAsIDB4MGM5OCwKLQkweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NDYsIDB4YWNhOCwgMHgwMDE4LCAweDcwNTgsIDB4YTUwMiwKLQkweDEyMzAsIDB4NzU0YSwgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzA0YiwKLQkweGI0MDAsIDB4MGNjMCwgMHhhMDA2LCAweDBjYzAsIDB4MDBlNiwgMHgyMDcxLCAweGIyOGMsIDB4NzAxNCwKLQkweGQwZTQsIDB4MDE1MCwgMHg2MDEzLCAweDAwMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDBlZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBmNiwKLQkweDJjNzgsIDB4MDgwYywgMHg1MDI5LCAweDAwZmUsIDB4MDEyMCwgMHg2MDFjLCAweGEwODQsIDB4MDAwZiwKLQkweDAwMTMsIDB4MDBjZSwgMHgwMDA1LCAweDkzNjksIDB4OTg1ZSwgMHg5ODYxLCAweDk4NjQsIDB4YTlhNywKLQkweGE5YzIsIDB4YTljNSwgMHg5MzY5LCAweDkzNjksIDB4MDgwYywgMHgxNGY2LCAweGUwMDAsIDB4ZTAwMCwKLQkweDAwMDUsIDB4ZTAwMCwgMHhlMDAwLCAweDAwMDUsIDB4MDAwOSwgMHgwMDA1LCAweDAwZjYsIDB4MmM3OCwKLQkweDA4MGMsIDB4NTAyOSwgMHgwNTM4LCAweDA4MGMsIDB4ODAyMiwgMHgxMTI4LCAweDIwMDEsIDB4YWZhNSwKLQkweDIwMDQsIDB4NzgzZSwgMHgwMGY4LCAweDc4MTgsIDB4NjAxYSwgMHgwODBjLCAweDk5NTYsIDB4NzgxYywKLQkweGEwODYsIDB4MDAwMywgMHgwMTI4LCAweDc4MDgsIDB4NjAzNiwgMHgyZjAwLCAweDYwM2EsIDB4MDAyMCwKLQkweDc4MDgsIDB4NjAzYSwgMHgyZjAwLCAweDYwMzYsIDB4NjAyYSwgMHg2MDFmLCAweDAwMDEsIDB4NjAwNywKLQkweDAwMzUsIDB4NjAwMywgMHgwMDAxLCAweDc5NTAsIDB4NjE1MiwgMHgwODBjLCAweDY3YTgsIDB4MDgwYywKLQkweDZjNTAsIDB4MmY2MCwgMHgwMGZlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGY2LCAweDY4MmMsIDB4NjAzMiwKLQkweGEwOGUsIDB4MDAwMSwgMHgwMTM4LCAweGEwODYsIDB4MDAwNSwgMHgwMTQwLCAweGEwMDYsIDB4NjAyYSwKLQkweDYwMmUsIDB4MDBhMCwgMHg2ODIwLCAweGMwZjQsIDB4YzBkNSwgMHg2ODIyLCAweDY4MTAsIDB4MjA3OCwKLQkweDc4N2MsIDB4NjkzOCwgMHhhMTAyLCAweDc4ODAsIDB4NjkzNCwgMHhhMTAzLCAweDFlNzgsIDB4NjgzNCwKLQkweDYwMmEsIDB4NjgzOCwgMHhhMDg0LCAweGZmZmMsIDB4NjgzYSwgMHg2MDJlLCAweDJkMDAsIDB4NjAzNiwKLQkweDY4MDgsIDB4NjAzYSwgMHg2OTE4LCAweDYxMWEsIDB4Njk1MCwgMHg2MTUyLCAweDYwMWYsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAzOSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LCAweDY4MDMsIDB4MDAwMiwKLQkweDAwZmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDUwMjksIDB4MTExOCwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDcwLCAweDYwMjAsIDB4ZDBmNCwgMHgxMTUwLCAweGMwZjUsIDB4NjAyMiwKLQkweDYwMTAsIDB4MjA3OCwgMHg3ODI4LCAweDYwM2EsIDB4NzgyYywgMHg2MDM2LCAweDA4MGMsIDB4MTkwYiwKLQkweGEwMDYsIDB4MDBmZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHg2MDA0LCAweGEwOGUsIDB4MDAzNCwKLQkweDAxYjgsIDB4YTA4ZSwgMHgwMDM1LCAweDAxYTAsIDB4YTA4ZSwgMHgwMDM2LCAweDAxODgsIDB4YTA4ZSwKLQkweDAwMzcsIDB4MDE3MCwgMHhhMDhlLCAweDAwMzgsIDB4MDE1OCwgMHhhMDhlLCAweDAwMzksIDB4MDE0MCwKLQkweGEwOGUsIDB4MDAzYSwgMHgwMTI4LCAweGEwOGUsIDB4MDAzYiwgMHgwMTEwLCAweGEwODUsIDB4MDAwMSwKLQkweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBlNiwKLQkweDIwMDEsIDB4YWY5ZiwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDAxLCAweDAwMzIsIDB4MDgwYywKLQkweDY2NjUsIDB4MjAwMSwgMHhhZmEzLCAweDgyZmYsIDB4MTExMCwgMHgyMDExLCAweDAwMDIsIDB4MjIwMiwKLQkweDIwMDEsIDB4YWZhMSwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDcxLCAweGFmOGQsIDB4NzExYSwKLQkweDcyMWUsIDB4MjAwMSwgMHgwMDY0LCAweDA4MGMsIDB4NjY2NSwgMHgyMDAxLCAweGFmYTQsIDB4ODJmZiwKLQkweDExMTAsIDB4MjAxMSwgMHgwMDAyLCAweDIyMDIsIDB4MjAwOSwgMHhhZmE1LCAweGEyODAsIDB4MDAwYSwKLQkweDIwMGEsIDB4MDBlZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwKLQkweDAwZTYsIDB4MjAwMSwgMHhhZmEzLCAweDIwMDMsIDB4MDAyOCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwMywKLQkweDAwMTQsIDB4MjA3MSwgMHhhZjhkLCAweDcwMWIsIDB4MDAwMCwgMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwKLQkweGFmYTUsIDB4MjAwMywgMHgwMDFlLCAweDAwZWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZDYsIDB4NjA1NCwKLQkweGEwNmQsIDB4MDExMCwgMHgwODBjLCAweDE1ZjAsIDB4MDBkZSwgMHgwMDA1LCAweDAwMDUsIDB4MDBjNiwKLQkweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MDgwYywgMHg4MDIyLCAweDAwMWUsIDB4MDE3OCwKLQkweDYxMWEsIDB4MGNhMSwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDAzMywKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwKLQkweDBjZDgsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHhhZDAwLCAweGExODYsIDB4MDAxNSwKLQkweDE1MDAsIDB4NzA4MCwgMHhhMDg2LCAweDAwMTgsIDB4MTFlMCwgMHg2MDEwLCAweDIwNjgsIDB4NmEzYywKLQkweGQyZTQsIDB4MTE2MCwgMHgyYzc4LCAweDA4MGMsIDB4NmUwNSwgMHgwMWQ4LCAweDcwNmMsIDB4NmE1MCwKLQkweGEyMDYsIDB4MTE2MCwgMHg3MDcwLCAweDZhNTQsIDB4YTIwNiwgMHgxMTQwLCAweDYyMTgsIDB4YTI5MCwKLQkweDAwMjgsIDB4MjIxNCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYjFlLCAweDA4MGMsIDB4ODFmNiwKLQkweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODA3OCwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwKLQkweDAwMDUsIDB4NzA1MCwgMHg2YTU0LCAweGEyMDYsIDB4MGQ0OCwgMHgwYzgwLCAweDAwYzYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMGM2LCAweDA4MGMsIDB4ODAyMiwgMHgwMDFlLCAweDAxODAsIDB4NjExYSwKLQkweDA4MGMsIDB4OTk1NiwgMHg2MDFmLCAweDAwMDEsIDB4MmQwMCwgMHg2MDEyLCAweDIwMDksIDB4MDA0MywKLQkweDA4MGMsIDB4ODBhNywgMHhhMDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4YTAwNiwKLQkweDBjZDgsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHhhZDAwLCAweGExODYsIDB4MDAxNSwKLQkweDExYzAsIDB4NzA4MCwgMHhhMDg2LCAweDAwMDQsIDB4MTFhMCwgMHg2MDEwLCAweGEwZTgsIDB4MDAwZiwKLQkweDJjNzgsIDB4MDgwYywgMHg2ZTA1LCAweDAxYTgsIDB4NzA2YywgMHg2YTA4LCAweGEyMDYsIDB4MTEzMCwKLQkweDcwNzAsIDB4NmEwYywgMHhhMjA2LCAweDExMTAsIDB4MDgwYywgMHgyYWQ5LCAweDA4MGMsIDB4ODFmNiwKLQkweDAwMjAsIDB4MDgwYywgMHg4NWYzLCAweDA4MGMsIDB4ODA3OCwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwKLQkweDAwMDUsIDB4NzA1MCwgMHg2YTBjLCAweGEyMDYsIDB4MGQ3OCwgMHgwYzgwLCAweDAwMTYsIDB4MDAyNiwKLQkweDY4NGMsIDB4ZDBhYywgMHgwMTc4LCAweDY5MTQsIDB4NmExMCwgMHgyMTAwLCAweGEyMDUsIDB4MDE1MCwKLQkweDY4NjAsIDB4YTEwNiwgMHgxMTE4LCAweDY4NWMsIDB4YTIwNiwgMHgwMTIwLCAweDY5NjIsIDB4NmE1ZSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMzYsIDB4NjMxMCwKLQkweDIzNjgsIDB4Njg0YSwgMHg2OTUyLCAweGEyOWUsIDB4NDAwMCwgMHgxMTg4LCAweDAwYzYsIDB4NjMxOCwKLQkweDIzNjAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4NGY2ZSwgMHgxMTA4LCAweGMxODUsIDB4NjAwMCwKLQkweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDZhNjYsIDB4Njk2YSwgMHgwMGNlLCAweDAwODAsIDB4NmE2NiwKLQkweDM5MTgsIDB4YTM5OCwgMHgwMDA2LCAweDIzMWMsIDB4Njg2YiwgMHgwMDA0LCAweDZiNzIsIDB4MDBjNiwKLQkweDYzMTgsIDB4MjM2MCwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwgMHg2ODZlLCAweDAwY2UsIDB4MDgwYywKLQkweDUxMGMsIDB4MDAzZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDI2LCAweDAwMTYsIDB4YTE4NiwKLQkweDAwMzUsIDB4MDExMCwgMHg2YTM0LCAweDAwMDgsIDB4NmEyOCwgMHgwODBjLCAweDk1ODYsIDB4MDFmMCwKLQkweDIyNjAsIDB4NjExYywgMHhhMTg2LCAweDAwMDMsIDB4MDExOCwgMHhhMTg2LCAweDAwMDYsIDB4MTE5MCwKLQkweDY4MzQsIDB4YTIwNiwgMHgwMTQwLCAweDY4MzgsIDB4YTIwNiwgMHgxMTYwLCAweDYxMDgsIDB4NjgzNCwKLQkweGExMDYsIDB4MTE0MCwgMHgwMDIwLCAweDYwMDgsIDB4NjkzOCwgMHhhMTA2LCAweDExMTgsIDB4NjAxOCwKLQkweDY5MTgsIDB4YTEwNiwgMHgwMDFlLCAweDAwMmUsIDB4MDBjZSwgMHgwMDA1LCAweGEwODUsIDB4MDAwMSwKLQkweDBjYzgsIDB4MDA2NiwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDE0ZjYsIDB4MDAxMywKLQkweDAwNmUsIDB4MDAwNSwgMHg5YTdhLCAweDllZmYsIDB4YTAyNywgMHg5YTdhLCAweDlhN2EsIDB4OWE3YSwKLQkweDlhN2EsIDB4OWE3YSwgMHg5YWIyLCAweGEwYTMsIDB4OWE3YSwgMHg5YTdhLCAweDlhN2EsIDB4OWE3YSwKLQkweDlhN2EsIDB4OWE3YSwgMHgwODBjLCAweDE0ZjYsIDB4MDA2NiwgMHg2MDAwLCAweGEwYjIsIDB4MDAxMCwKLQkweDFhMGMsIDB4MTRmNiwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHg5YTk1LCAweGE0ZmQsIDB4OWE5NSwKLQkweDlhOTUsIDB4OWE5NSwgMHg5YTk1LCAweDlhOTUsIDB4OWE5NSwgMHhhNGMxLCAweGE1NDUsIDB4OWE5NSwKLQkweGFhZWEsIDB4YWIxYSwgMHhhYWVhLCAweGFiMWEsIDB4OWE5NSwgMHgwODBjLCAweDE0ZjYsIDB4MDA2NiwKLQkweDYwMDAsIDB4YTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MTRmNiwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwKLQkweDlhYjAsIDB4YTFkOCwgMHhhMjk1LCAweGEyYzIsIDB4YTM0NiwgMHg5YWIwLCAweGE0MzMsIDB4YTNkZSwKLQkweGEwYWYsIDB4YTQ5NywgMHhhNGFjLCAweDlhYjAsIDB4OWFiMCwgMHg5YWIwLCAweDlhYjAsIDB4OWFiMCwKLQkweDA4MGMsIDB4MTRmNiwgMHhhMWIyLCAweDAwODAsIDB4MWEwYywgMHgxNGY2LCAweDIxMDAsIDB4YTFiMiwKLQkweDAwNDAsIDB4MWEwNCwgMHg5ZTc5LCAweDAwMDIsIDB4OWFmYywgMHg5Y2FiLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWNiMiwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlhZmUsIDB4OWI1YSwgMHg5YjY1LCAweDliYTYsIDB4OWJjMCwKLQkweDljM2UsIDB4OWM5YywgMHg5YWZjLCAweDlhZmMsIDB4OWNiNSwgMHg5YWZjLCAweDlhZmMsIDB4OWNjNCwKLQkweDljY2IsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDlkNDIsIDB4OWFmYywKLQkweDlhZmMsIDB4OWQ0ZCwgMHg5YWZjLCAweDlhZmMsIDB4OWQxOCwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlkNjEsIDB4OWFmYywgMHg5YWZjLCAweDlhZmMsIDB4OWRkNSwgMHg5YWZjLCAweDlhZmMsIDB4OWFmYywKLQkweDlhZmMsIDB4OWFmYywgMHg5YWZjLCAweDllNDAsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NTAyZCwKLQkweDExNDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwKLQkweDExNDAsIDB4NjAwNywgMHgwMDA5LCAweDYwMmIsIDB4MDAwOSwgMHg2MDEzLCAweDAwMDAsIDB4MDgwNCwKLQkweDljYTYsIDB4MDgwYywgMHg1MDFkLCAweDAwZTYsIDB4MDBjNiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwKLQkweDYyMTgsIDB4MjI3MCwgMHg3MmEwLCAweDAwMjYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4NjhlNywKLQkweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4NjgxZCwgMHgyYzA4LCAweDA4MGMsIDB4YTcxMiwKLQkweDAwN2UsIDB4MDAxZSwgMHgyZTYwLCAweDA4MGMsIDB4NGVjZiwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwKLQkweDAwY2UsIDB4MDBlZSwgMHg2NjE4LCAweDAwYzYsIDB4MjY2MCwgMHgwODBjLCAweDRjZWIsIDB4MDBjZSwKLQkweGE2YjAsIDB4MDAwMSwgMHgyNjM0LCAweGE2ODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDI3OCwKLQkweDA4MGMsIDB4YTY1NiwgMHgxOTA0LCAweDliYTAsIDB4MDgwYywgMHhhNWY2LCAweDExMjAsIDB4NjAwNywKLQkweDAwMDgsIDB4MDgwNCwgMHg5Y2E2LCAweDYwMDcsIDB4MDAwOSwgMHgwODA0LCAweDljYTYsIDB4MDgwYywKLQkweGE4MDEsIDB4MDEyOCwgMHgwODBjLCAweGE2NTYsIDB4MGQ3OCwgMHgwODA0LCAweDliYTAsIDB4NjAxMywKLQkweDE5MDAsIDB4MGM4OCwgMHg2MTA2LCAweDA4MGMsIDB4YTVhNiwgMHg2MDA3LCAweDAwMDYsIDB4MDgwNCwKLQkweDljYTYsIDB4NjAwNywgMHgwMDA3LCAweDA4MDQsIDB4OWNhNiwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwKLQkweDllNzYsIDB4MDBkNiwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywKLQkweGE2ODYsIDB4MDAwNiwgMHgwMTg4LCAweGE2ODYsIDB4MDAwNCwgMHgwMTcwLCAweDZlMDQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTY4NiwgMHgwMDA2LCAweDAxNDAsIDB4YTY4NiwgMHgwMDA0LCAweDAxMjgsIDB4YTY4NiwKLQkweDAwMDUsIDB4MDExMCwgMHgwMGRlLCAweDAwZTAsIDB4MDgwYywgMHhhNmI0LCAweDExYTAsIDB4YTY4NiwKLQkweDAwMDYsIDB4MTE1MCwgMHgwMDI2LCAweDYyMTgsIDB4YTI5MCwgMHgwMDI4LCAweDIyMTQsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgyYjFlLCAweDAwMmUsIDB4MDgwYywgMHg0ZDcyLCAweDYwMDcsIDB4MDAwYSwKLQkweDAwZGUsIDB4MDgwNCwgMHg5Y2E2LCAweDYwMDcsIDB4MDAwYiwgMHgwMGRlLCAweDA4MDQsIDB4OWNhNiwKLQkweDA4MGMsIDB4MmFkOSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg5Y2E2LCAweDA4MGMsIDB4YWI0ZSwKLQkweDE5MDQsIDB4OWU3NiwgMHg2NjE4LCAweDAwZDYsIDB4MjY2OCwgMHg2ZTA0LCAweDAwZGUsIDB4YTY4NiwKLQkweDA3MDcsIDB4MGQ3MCwgMHgwMDI2LCAweDYyMTgsIDB4YTI5MCwgMHgwMDI4LCAweDIyMTQsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDgwYywgMHgyYjFlLCAweDAwMmUsIDB4NjAwNywgMHgwMDBjLCAweDA4MDQsIDB4OWNhNiwKLQkweDA4MGMsIDB4NTAyZCwgMHgxMTQwLCAweDIwMDEsIDB4YWQzNCwgMHgyMDA0LCAweGEwODQsIDB4MDAwOSwKLQkweGEwODYsIDB4MDAwOCwgMHgxMTEwLCAweDA4MDQsIDB4OWIwOSwgMHgwODBjLCAweDUwMWQsIDB4NjYxOCwKLQkweGE2YjAsIDB4MDAwMSwgMHgyNjM0LCAweGE2ODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMDYsIDB4MDZlOCwKLQkweDExMzgsIDB4MDAyNiwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg0YzVkLCAweDAwMmUsIDB4MDA1MCwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNCwgMHgwMTIwLCAweGE2ODYsIDB4MDAwNiwKLQkweDE5MDQsIDB4OWJhMCwgMHgwODBjLCAweGE2YzEsIDB4MTEyMCwgMHg2MDA3LCAweDAwMGUsIDB4MDgwNCwKLQkweDljYTYsIDB4MDA0NiwgMHg2NDE4LCAweGE0YTAsIDB4MDAyOCwgMHgyNDI0LCAweGE0YTQsIDB4MDBmZiwKLQkweDg0MjcsIDB4MDA0NiwgMHgwODBjLCAweDJhZDksIDB4MDA0ZSwgMHgwMDE2LCAweGEwMDYsIDB4MjAwOSwKLQkweGFkNTIsIDB4MjEwYywgMHhkMWE0LCAweDAxNTgsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywKLQkweDYwMTgsIDB4MDBkNiwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLCAweDAwZGUsIDB4MDAxZSwKLQkweDAwNGUsIDB4NjAwNywgMHgwMDAxLCAweDA4MDQsIDB4OWNhNiwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywKLQkweDRjMWUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweGFkMDUsIDB4MjAxMSwgMHhiMjkwLCAweDA4MGMsIDB4OGE3YywgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKLQkweDAxNWUsIDB4YTAwNSwgMHgwMTY4LCAweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODIsIDB4MDAwNCwKLQkweDBhMDQsIDB4OWJhMCwgMHhhNjgyLCAweDAwMDcsIDB4MGEwNCwgMHg5YmVhLCAweDA4MDQsIDB4OWJhMCwKLQkweDYwMTMsIDB4MTkwMCwgMHg2MDA3LCAweDAwMDksIDB4MDgwNCwgMHg5Y2E2LCAweDA4MGMsIDB4NTAyZCwKLQkweDExNDAsIDB4MjAwMSwgMHhhZDM0LCAweDIwMDQsIDB4YTA4NCwgMHgwMDA5LCAweGEwODYsIDB4MDAwOCwKLQkweDExMTAsIDB4MDgwNCwgMHg5YjA5LCAweDA4MGMsIDB4NTAxZCwgMHg2NjE4LCAweGE2YjAsIDB4MDAwMSwKLQkweDI2MzQsIDB4YTY4NCwgMHgwMGZmLCAweGEwODIsIDB4MDAwNiwgMHgwNmIwLCAweGE2YjQsIDB4ZmYwMCwKLQkweDg2MzcsIDB4YTY4NiwgMHgwMDA0LCAweDAxMjAsIDB4YTY4NiwgMHgwMDA2LCAweDE5MDQsIDB4OWJhMCwKLQkweDA4MGMsIDB4YTZlOSwgMHgxMTMwLCAweDA4MGMsIDB4YTVmNiwgMHgxMTE4LCAweDYwMDcsIDB4MDAxMCwKLQkweDA0ZTgsIDB4MDA0NiwgMHg2NDE4LCAweGE0YTAsIDB4MDAyOCwgMHgyNDI0LCAweGE0YTQsIDB4MDBmZiwKLQkweDg0MjcsIDB4MDA0NiwgMHgwODBjLCAweDJhZDksIDB4MDA0ZSwgMHgwMDE2LCAweGEwMDYsIDB4MjAwOSwKLQkweGFkNTIsIDB4MjEwYywgMHhkMWE0LCAweDAxNTgsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4YTk2YywKLQkweDYwMTgsIDB4MDBkNiwgMHgyMDY4LCAweDY4MDAsIDB4YzBlNSwgMHg2ODAyLCAweDAwZGUsIDB4MDAxZSwKLQkweDAwNGUsIDB4NjAwNywgMHgwMDAxLCAweDAwZDAsIDB4MDgwYywgMHhhODAxLCAweDAxNDAsIDB4YTZiNCwKLQkweGZmMDAsIDB4ODYzNywgMHhhNjg2LCAweDAwMDYsIDB4MDk1OCwgMHgwODA0LCAweDliYTAsIDB4NjAxMywKLQkweDE5MDAsIDB4NjAwNywgMHgwMDA5LCAweDAwNTAsIDB4MDgwYywgMHhhYjRlLCAweDE5MDQsIDB4OWU3NiwKLQkweDA4MGMsIDB4OWU5OCwgMHgxOTA0LCAweDliYTAsIDB4NjAwNywgMHgwMDEyLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwMDA1LCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDY3ZWUsIDB4MGNjMCwgMHg2MDA3LCAweDAwMDUsIDB4MGNjMCwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwKLQkweDllNzYsIDB4MDgwYywgMHg5ZTk4LCAweDE5MDQsIDB4OWJhMCwgMHg2MDA3LCAweDAwMjAsIDB4NjAwMywKLQkweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMDUsIDB4NjAwNywgMHgwMDIzLCAweDYwMDMsIDB4MDAwMSwKLQkweDA4MGMsIDB4NjdlZSwgMHgwMDA1LCAweDA4MGMsIDB4YWI0ZSwgMHgxOTA0LCAweDllNzYsIDB4MDgwYywKLQkweDllOTgsIDB4MTkwNCwgMHg5YmEwLCAweDAwMTYsIDB4MDAyNiwgMHgyMDExLCAweGIyOTEsIDB4MjIxNCwKLQkweGEyODYsIDB4ZmZmZiwgMHgwMTkwLCAweDJjMDgsIDB4MDgwYywgMHg5NTg2LCAweDAxZDgsIDB4MjI2MCwKLQkweDIwMTEsIDB4YjI5MCwgMHgyMjE0LCAweDYwMDgsIDB4YTIwNiwgMHgxMWEwLCAweDYwMTgsIDB4YTE5MCwKLQkweDAwMDYsIDB4MjIxNCwgMHhhMjA2LCAweDAxZTAsIDB4MDA2OCwgMHgyMDExLCAweGIyOTAsIDB4MjIxNCwKLQkweDJjMDgsIDB4MDgwYywgMHhhOTQwLCAweDExYTAsIDB4MjAxMSwgMHhiMjkxLCAweDIyMTQsIDB4YTI4NiwKLQkweGZmZmYsIDB4MDFhMCwgMHgyMTYwLCAweDYwMDcsIDB4MDAyNiwgMHg2MDEzLCAweDE3MDAsIDB4MjAxMSwKLQkweGIyODksIDB4MjIxNCwgMHhhMjk2LCAweGZmZmYsIDB4MTE2MCwgMHg2MDA3LCAweDAwMjUsIDB4MDA0OCwKLQkweDYwMWMsIDB4YTA4NiwgMHgwMDA3LCAweDFkNzAsIDB4MDgwYywgMHg4MDc4LCAweDIxNjAsIDB4NjAwNywKLQkweDAwMjUsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwKLQkweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDRjMWUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwKLQkweDIwYTksIDB4MDAwNCwgMHgyMDE5LCAweGFkMDUsIDB4MjAxMSwgMHhiMjk2LCAweDA4MGMsIDB4OGE3YywKLQkweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDEyMCwgMHg2MDA3LCAweDAwMzEsIDB4MDgwNCwKLQkweDljYTYsIDB4MDgwYywgMHg4N2JkLCAweDA4MGMsIDB4NTc0ZiwgMHgxMTU4LCAweDAwMDYsIDB4MDAyNiwKLQkweDAwMzYsIDB4MDgwYywgMHg1NzZiLCAweDAxMTAsIDB4MDgwYywgMHg1NzI2LCAweDAwM2UsIDB4MDAyZSwKLQkweDAwMGUsIDB4MDAwNSwgMHg2MTA2LCAweDA4MGMsIDB4OWViNCwgMHg2MDA3LCAweDAwMmIsIDB4MDgwNCwKLQkweDljYTYsIDB4NjAwNywgMHgwMDJjLCAweDA4MDQsIDB4OWNhNiwgMHgwODBjLCAweGFiNGUsIDB4MTkwNCwKLQkweDllNzYsIDB4MDgwYywgMHg5ZTk4LCAweDE5MDQsIDB4OWJhMCwgMHg2MTA2LCAweDA4MGMsIDB4OWViOCwKLQkweDExMjAsIDB4NjAwNywgMHgwMDJlLCAweDA4MDQsIDB4OWNhNiwgMHg2MDA3LCAweDAwMmYsIDB4MDgwNCwKLQkweDljYTYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDEsIDB4MjAwYywKLQkweGExODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDE1OCwgMHhhMTg0LCAweGZmMDAsIDB4ODAwNywKLQkweGEwODYsIDB4MDAwNiwgMHgwMTI4LCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDA4MDQsIDB4OWNhYiwKLQkweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDkwNCwgMHg5ZGQyLCAweDIwNzEsIDB4YjI4YywKLQkweDcwMTAsIDB4NjAzNiwgMHg3MDE0LCAweDYwM2EsIDB4NzEwOCwgMHg3MjBjLCAweDIwMDEsIDB4YWQ1MiwKLQkweDIwMDQsIDB4ZDBhNCwgMHgwMTQwLCAweDYwMTgsIDB4MjA2OCwgMHg2ODEwLCAweGExMDYsIDB4MTExOCwKLQkweDY4MTQsIDB4YTIwNiwgMHgwMWY4LCAweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYWMsIDB4MTU4MCwKLQkweDIwNjksIDB4YWQwMCwgMHg2ODcwLCAweGEyMDYsIDB4MTU1OCwgMHg2ODZjLCAweGExMDYsIDB4MTU0MCwKLQkweDcyMTAsIDB4MDgwYywgMHg5NTg2LCAweDA1NDgsIDB4MDgwYywgMHhhOWQ0LCAweDA1MzAsIDB4NjIyYSwKLQkweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2E4LCAweDAwY2UsIDB4MDBkZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg3MjE0LCAweGEyODYsIDB4ZmZmZiwgMHgwMTUwLCAweDA4MGMsIDB4OTU4NiwKLQkweDAxYTAsIDB4YTI4MCwgMHgwMDAyLCAweDIwMDQsIDB4NzExMCwgMHhhMTA2LCAweDExNzAsIDB4MGMwOCwKLQkweDcyMTAsIDB4MmMwOCwgMHgwODBjLCAweGE5NDAsIDB4MmMxMCwgMHgyMTYwLCAweDAxMzAsIDB4MDhjOCwKLQkweDYwMDcsIDB4MDAzNywgMHg2MDEzLCAweDE1MDAsIDB4MDhlOCwgMHg2MDA3LCAweDAwMzcsIDB4NjAxMywKLQkweDE3MDAsIDB4MDhjMCwgMHg2MDA3LCAweDAwMTIsIDB4MDhhOCwgMHg2MDE4LCAweGEwODAsIDB4MDAwMSwKLQkweDIwMDQsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4YTA4NiwgMHgwMDA2LCAweDE5MDQsIDB4OWNhYiwKLQkweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGQwZTQsIDB4MDkwNCwKLQkweDllMzgsIDB4MjA2OSwgMHhhZDAwLCAweDIwNzEsIDB4YjI4YywgMHg3MDA4LCAweDYwMzYsIDB4NzIwYywKLQkweDYyM2EsIDB4YTI4NiwgMHhmZmZmLCAweDExNDAsIDB4NzIwOCwgMHgwMGM2LCAweDJjMDgsIDB4MDgwYywKLQkweGE5NDAsIDB4MmMxMCwgMHgwMGNlLCAweDA1ODgsIDB4MDgwYywgMHg5NTg2LCAweDA1NzAsIDB4MDBjNiwKLQkweDAwMjYsIDB4MjI2MCwgMHgwODBjLCAweDkyOGYsIDB4MDAyZSwgMHgwMGNlLCAweDcxMTgsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHhhMTg2LCAweDAwMDEsIDB4MDE1OCwgMHhhMTg2LCAweDAwMDUsIDB4MDExOCwKLQkweGExODYsIDB4MDAwNywgMHgxMTc4LCAweGEyODAsIDB4MDAwNCwgMHgyMDA0LCAweGEwMDUsIDB4MDE1MCwKLQkweDAwNTYsIDB4NzUxMCwgMHg3NjE0LCAweDA4MGMsIDB4YTllYiwgMHgwMDVlLCAweDAwY2UsIDB4MDBkZSwKLQkweDAwZWUsIDB4MDAwNSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MmEwMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MGM4OCwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwKLQkweDAwMDksIDB4NjAxMywgMHgxNzAwLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MGMzMCwKLQkweDYwMDcsIDB4MDAzYiwgMHg2MDJiLCAweDAwMGIsIDB4NjAxMywgMHgwMDAwLCAweDA4MDQsIDB4OWRhYSwKLQkweDAwZTYsIDB4MDAyNiwgMHgwODBjLCAweDUwMmQsIDB4MDU1OCwgMHgwODBjLCAweDUwMWQsIDB4MDgwYywKLQkweGFiYzUsIDB4MTUyMCwgMHgyMDcxLCAweGFkMDAsIDB4NzBkMCwgMHhjMDg1LCAweDcwZDIsIDB4MDBmNiwKLQkweDIwNzksIDB4MDEwMCwgMHg3MjljLCAweGEyODQsIDB4MDBmZiwgMHg3MDZlLCAweDc4ZTYsIDB4YTI4NCwKLQkweGZmMDAsIDB4NzI3MCwgMHhhMjA1LCAweDcwNzIsIDB4NzhlYSwgMHgwMGZlLCAweDcwZGIsIDB4MDAwMCwKLQkweDIwMDEsIDB4YWQ1MiwgMHgyMDA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDExLCAweGFmZTAsIDB4MjAxMywKLQkweDA3ZDAsIDB4ZDBhYywgMHgxMTI4LCAweDA4MGMsIDB4MjhmYSwgMHgwMDEwLCAweDA4MGMsIDB4YWJmMSwKLQkweDAwMmUsIDB4MDBlZSwgMHgwODBjLCAweDgwNzgsIDB4MDgwNCwgMHg5Y2FhLCAweDA4MGMsIDB4ODA3OCwKLQkweDAwMDUsIDB4MjYwMCwgMHgwMDAyLCAweDllODEsIDB4OWU4MSwgMHg5ZTgxLCAweDllODEsIDB4OWU4MSwKLQkweDllODMsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4YWI0ZSwgMHgxZDgwLCAweDAwODksIDB4MTEzOCwKLQkweDYwMDcsIDB4MDA0NSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg2N2VlLCAweDAwMDUsIDB4MDgwYywKLQkweDJhZDksIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAwNSwKLQkweDAwZDYsIDB4MDA2NiwgMHg2NjE4LCAweDI2NjgsIDB4NmUwNCwgMHhhNmI0LCAweGZmMDAsIDB4ODYzNywKLQkweGE2ODYsIDB4MDAwNiwgMHgwMTcwLCAweGE2ODYsIDB4MDAwNCwgMHgwMTU4LCAweDZlMDQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTY4NiwgMHgwMDA2LCAweDAxMjgsIDB4YTY4NiwgMHgwMDA0LCAweDAxMTAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDA2ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwNDQ5LCAweDAwZGUsIDB4MDAwNSwKLQkweDAwZDYsIDB4MDQ5MSwgMHgxMWYwLCAweDY4MGMsIDB4YTA4YywgMHhmZjAwLCAweDY4MjAsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTExNSwgMHg2MjEyLCAweDY4MjQsIDB4NjAyYSwgMHhkMWU0LCAweDAxMTgsIDB4MjAwOSwKLQkweDAwMDEsIDB4MDA2MCwgMHhkMWVjLCAweDAxNjgsIDB4NjkyMCwgMHhhMThjLCAweDAwZmYsIDB4NjgyNCwKLQkweDA4MGMsIDB4MjY3NiwgMHgxMTMwLCAweDIxMTAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmIxZSwKLQkweDAwMTgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4YTAwNiwgMHgwMGRlLCAweDAwMDUsIDB4MjA2OSwKLQkweGIyOGQsIDB4NjgwMCwgMHhhMDgyLCAweDAwMTAsIDB4MTIyOCwgMHg2MDEzLCAweDAwMDAsIDB4YTA4NSwKLQkweDAwMDEsIDB4MDAwOCwgMHhhMDA2LCAweDAwMDUsIDB4NjAxMywgMHgwMDAwLCAweDIwNjksIDB4YjI4YywKLQkweDY4MDgsIDB4YTA4NCwgMHhmZjAwLCAweGEwODYsIDB4MDgwMCwgMHgxMTQwLCAweDY4MDAsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTA4ZSwgMHgwMDE0LCAweDAxMTAsIDB4YTA4ZSwgMHgwMDEwLCAweDAwMDUsIDB4NjAwNCwKLQkweGEwYjIsIDB4MDA4MCwgMHgxYTBjLCAweDE0ZjYsIDB4YTFiNiwgMHgwMDEzLCAweDExMzAsIDB4MjAwOCwKLQkweGExYjIsIDB4MDA0MCwgMHgxYTA0LCAweDlmZmIsIDB4MDA5MiwgMHhhMWI2LCAweDAwMjcsIDB4MDEyMCwKLQkweGExYjYsIDB4MDAxNCwgMHgxOTBjLCAweDE0ZjYsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NGM1ZCwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4OWY1ZiwKLQkweDlmNjEsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY2MSwgMHg5ZjZmLCAweDlmZjQsIDB4OWZiZiwKLQkweDlmZjQsIDB4OWZkMCwgMHg5ZmY0LCAweDlmNmYsIDB4OWZmNCwgMHg5ZmVjLCAweDlmZjQsIDB4OWZlYywKLQkweDlmZjQsIDB4OWZmNCwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwKLQkweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjYxLCAweDlmNWYsIDB4OWZmNCwKLQkweDlmNWYsIDB4OWY1ZiwgMHg5ZmY0LCAweDlmNWYsIDB4OWZmMSwgMHg5ZmY0LCAweDlmNWYsIDB4OWY1ZiwKLQkweDlmNWYsIDB4OWY1ZiwgMHg5ZmY0LCAweDlmZjQsIDB4OWY1ZiwgMHg5ZmY0LCAweDlmZjQsIDB4OWY1ZiwKLQkweDlmNjksIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4OWY1ZiwgMHg5ZmYwLCAweDlmZjQsIDB4OWY1ZiwKLQkweDlmNWYsIDB4OWZmNCwgMHg5ZmY0LCAweDlmNWYsIDB4OWY1ZiwgMHg5ZjVmLCAweDlmNWYsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDYwMDMsIDB4MDAwMiwgMHgwODBjLCAweDZjNTAsIDB4MDgwNCwKLQkweDlmZmEsIDB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NGMxZSwgMHgwODA0LCAweDlmZjQsIDB4MDBmNiwKLQkweDIwNzksIDB4YWQ1MSwgMHg3ODA0LCAweDAwZmUsIDB4ZDBhYywgMHgxOTA0LCAweDlmZjQsIDB4MjAwMSwKLQkweDAwMDAsIDB4MDgwYywgMHg0YzFlLCAweDYwMTgsIDB4YTA4MCwgMHgwMDA0LCAweDIwMDQsIDB4YTA4NiwKLQkweDAwZmYsIDB4MTE0MCwgMHgwMGY2LCAweDIwNzksIDB4YWQwMCwgMHg3ODk0LCAweDgwMDAsIDB4Nzg5NiwKLQkweDAwZmUsIDB4MDBlMCwgMHgwMGM2LCAweDYwMTgsIDB4MjA2MCwgMHg2MDAwLCAweGQwZjQsIDB4MTE0MCwKLQkweDYwMTAsIDB4YTAwNSwgMHgwMTI4LCAweDAwY2UsIDB4MDgwYywgMHgzY2NlLCAweDA4MDQsIDB4OWZmNCwKLQkweDAwY2UsIDB4MjAwMSwgMHhhZDAwLCAweDIwMDQsIDB4YTA4NiwgMHgwMDAyLCAweDExMzgsIDB4MDBmNiwKLQkweDIwNzksIDB4YWQwMCwgMHg3ODk0LCAweDgwMDAsIDB4Nzg5NiwgMHgwMGZlLCAweDIwMDEsIDB4MDAwMiwKLQkweDA4MGMsIDB4NGMzMCwgMHgwODBjLCAweDZiNzMsIDB4NjAxZiwgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwKLQkweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDY3ZWUsIDB4MDgwYywgMHg2YzUwLCAweDAwYzYsIDB4NjExOCwKLQkweDIxNjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4NjUxOSwgMHgwMGNlLCAweDA0ZDgsIDB4NjYxOCwKLQkweDAwZDYsIDB4MjY2OCwgMHg2ZTA0LCAweDAwZGUsIDB4YTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4YTY4NiwKLQkweDAwMDYsIDB4MDU1MCwgMHhhNjg2LCAweDAwMDQsIDB4MDUzOCwgMHgyMDAxLCAweDAwMDQsIDB4MDQxMCwKLQkweDIwMDEsIDB4YWQwMCwgMHgyMDA0LCAweGEwODYsIDB4MDAwMywgMHgxMTEwLCAweDA4MGMsIDB4M2NjZSwKLQkweDIwMDEsIDB4MDAwNiwgMHgwNDg5LCAweDY2MTgsIDB4MDBkNiwgMHgyNjY4LCAweDZlMDQsIDB4MDBkZSwKLQkweGE2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweGE2ODYsIDB4MDAwNiwgMHgwMTcwLCAweDIwMDEsIDB4MDAwNiwKLQkweDAwNDgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzAsIDB4MjAwMSwgMHgwMDA2LCAweDAwZTksIDB4MDAyMCwKLQkweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDRjNWQsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4ODA3OCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDI2MDAsIDB4MDAwMiwgMHhhMDAzLCAweGEwMDMsIDB4YTAwMywKLQkweGEwMDMsIDB4YTAwMywgMHhhMDA1LCAweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywKLQkweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDAxNiwgMHgwMGQ2LCAweDYxMTgsIDB4MjE2OCwKLQkweDY5MDAsIDB4ZDE4NCwgMHgwMTg4LCAweDYxMDQsIDB4YTE4ZSwgMHgwMDBhLCAweDExMjgsIDB4Njk5YywKLQkweGQxYTQsIDB4MTExMCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg0YzMwLCAweDIwMDEsIDB4MDAwMCwKLQkweDA4MGMsIDB4NGMxZSwgMHgwODBjLCAweDJhZmYsIDB4MDBkZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwKLQkweDY2MTgsIDB4MjY2OCwgMHg2ODA0LCAweGEwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwZGUsIDB4YTBiMiwKLQkweDAwMGMsIDB4MWEwYywgMHgxNGY2LCAweGExYjYsIDB4MDAxNSwgMHgxMTEwLCAweDAwM2IsIDB4MDAyOCwKLQkweGExYjYsIDB4MDAxNiwgMHgxOTBjLCAweDE0ZjYsIDB4MDA2YiwgMHgwMDA1LCAweDg2YjksIDB4ODZiOSwKLQkweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4YTA4ZiwgMHhhMDU2LCAweDg2YjksIDB4ODZiOSwKLQkweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwKLQkweGEwOGYsIDB4YTA5NiwgMHg4NmI5LCAweDg2YjksIDB4ODZiOSwgMHg4NmI5LCAweDAwZjYsIDB4MjA3OSwKLQkweGFkNTEsIDB4NzgwNCwgMHhkMGFjLCAweDExZTAsIDB4NjAxOCwgMHhhMDdkLCAweDAxYzgsIDB4NzgwMCwKLQkweGQwZjQsIDB4MTExOCwgMHg3ODEwLCAweGEwMDUsIDB4MTE5OCwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywKLQkweDRjMWUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NGMzMCwgMHg2MDFmLCAweDAwMDEsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4NjdlZSwgMHgwODBjLCAweDZjNTAsIDB4MDBhOCwKLQkweDIwMTEsIDB4YjI4MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2NzYsIDB4MTE2OCwKLQkweDAwYzYsIDB4MDgwYywgMHg0Y2RjLCAweDAxMjAsIDB4MDBjZSwgMHgwODBjLCAweDgwNzgsIDB4MDAyOCwKLQkweDA4MGMsIDB4NDkzYSwgMHgwMGNlLCAweDA4MGMsIDB4ODA3OCwgMHgwMGZlLCAweDAwMDUsIDB4NjYwNCwKLQkweGE2YjYsIDB4MDAxZSwgMHgxMTEwLCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDA4MGMsIDB4ODk0MCwKLQkweDExMzgsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDY3ZWUsIDB4MDAxMCwKLQkweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDYwMDQsIDB4YTA4YSwgMHgwMDgwLCAweDFhMGMsIDB4MTRmNiwKLQkweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4MiwKLQkweDAwNDAsIDB4MDAwMiwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzcsIDB4YTBjNSwKLQkweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwKLQkweGEwYzUsIDB4YTBjNSwgMHhhMGM1LCAweGEwYzUsIDB4YTBjNSwgMHgwODBjLCAweDE0ZjYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MDBmNiwgMHgwMTU2LCAweDAwNDYsIDB4MDAyNiwgMHg2MjE4LCAweGEyODAsIDB4MDAyYiwKLQkweDIwMDQsIDB4YTAwNSwgMHgwMTIwLCAweDIwMjEsIDB4MDAwMCwgMHgwODBjLCAweGFiOTYsIDB4NjEwNiwKLQkweDIwNzEsIDB4YjI4MCwgMHg3NDQ0LCAweGE0YTQsIDB4ZmYwMCwgMHgwOTA0LCAweGExMjksIDB4YTQ4NiwKLQkweDIwMDAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMjAwLCAweDA4MGMsIDB4NjYzZiwKLQkweDA4MGMsIDB4MTVkOSwgMHgwOTBjLCAweDE0ZjYsIDB4NjAwMywgMHgwMDA3LCAweDJkMDAsIDB4NjgzNywKLQkweDAxMGQsIDB4NjgwMywgMHgwMDAwLCAweDY4M2IsIDB4MDAwMCwgMHg2YzVhLCAweDJjMDAsIDB4Njg1ZSwKLQkweDYwMDgsIDB4NjhiMiwgMHg2MDE4LCAweDIwNzgsIDB4NzhhMCwgMHg4MDA3LCAweDcxMzAsIDB4Njk0YSwKLQkweDAwMTYsIDB4YTA4NCwgMHhmZjAwLCAweDY4NDYsIDB4Njg0ZiwgMHgwMDAwLCAweDY4NTcsIDB4MDAzNiwKLQkweDA4MGMsIDB4NTEwYywgMHgwMDFlLCAweGE0ODYsIDB4MjAwMCwgMHgxMTMwLCAweDIwMTksIDB4MDAxNywKLQkweDA4MGMsIDB4YThlYiwgMHgwODA0LCAweGExODYsIDB4YTQ4NiwgMHgwNDAwLCAweDExMzAsIDB4MjAxOSwKLQkweDAwMDIsIDB4MDgwYywgMHhhODlkLCAweDA4MDQsIDB4YTE4NiwgMHhhNDg2LCAweDAyMDAsIDB4MTExMCwKLQkweDA4MGMsIDB4YTg4MiwgMHhhNDg2LCAweDEwMDAsIDB4MTExMCwgMHgwODBjLCAweGE4ZDAsIDB4MDgwNCwKLQkweGExODYsIDB4MjA2OSwgMHhiMDQ4LCAweDZhMDAsIDB4ZDI4NCwgMHgwOTA0LCAweGExZDUsIDB4YTI4NCwKLQkweDAzMDAsIDB4MTkwNCwgMHhhMWNmLCAweDY4MDQsIDB4YTAwNSwgMHgwOTA0LCAweGExYzAsIDB4MmQ3OCwKLQkweDYwMDMsIDB4MDAwNywgMHgwODBjLCAweDE1YzAsIDB4MDkwNCwgMHhhMThkLCAweDc4MDAsIDB4ZDA4YywKLQkweDExMTgsIDB4NzgwNCwgMHg4MDAxLCAweDc4MDYsIDB4NjAxMywgMHgwMDAwLCAweDY4MDMsIDB4MDAwMCwKLQkweDY4MzcsIDB4MDExNiwgMHg2ODNiLCAweDAwMDAsIDB4NjAwOCwgMHg2OGIyLCAweDJjMDAsIDB4Njg0YSwKLQkweDYwMTgsIDB4MjA3OCwgMHg3OGEwLCAweDgwMDcsIDB4NzEzMCwgMHg2OTg2LCAweDY4NDYsIDB4NzkyOCwKLQkweDY5OGEsIDB4NzkyYywgMHg2OThlLCAweDc5MzAsIDB4Njk5MiwgMHg3OTM0LCAweDY5OTYsIDB4Njg1MywKLQkweDAwM2QsIDB4NzI0NCwgMHhhMjk0LCAweDAwMDMsIDB4YTI4NiwgMHgwMDAyLCAweDExMTgsIDB4Njg0ZiwKLQkweDAwNDAsIDB4MDA0MCwgMHhhMjg2LCAweDAwMDEsIDB4MTExOCwgMHg2ODRmLCAweDAwODAsIDB4MDAxMCwKLQkweDY4NGYsIDB4MDAwMCwgMHgyMGE5LCAweDAwMGEsIDB4MjAwMSwgMHhiMjkwLCAweGFkOTAsIDB4MDAxNSwKLQkweDIwMGMsIDB4ODEwZiwgMHgyMTEyLCAweDgwMDAsIDB4ODIxMCwgMHgxZjA0LCAweGExNzgsIDB4MjAwYywKLQkweDY5ODIsIDB4ODAwMCwgMHgyMDBjLCAweDY5N2UsIDB4MDgwYywgMHg1MTBjLCAweDAwMmUsIDB4MDA0ZSwKLQkweDAxNWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHg2MDEzLCAweDAxMDAsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MGM3MCwKLQkweDIwNjksIDB4YjI5MiwgMHgyZDA0LCAweGEwODQsIDB4ZmYwMCwgMHhhMDg2LCAweDEyMDAsIDB4MTFhOCwKLQkweDIwNjksIDB4YjI4MCwgMHg2ODZjLCAweGEwODQsIDB4MDBmZiwgMHgwMDE2LCAweDYxMTAsIDB4YTE4YywKLQkweDA3MDAsIDB4YTEwZCwgMHg2MTEyLCAweDAwMWUsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MywKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDg4OCwgMHg2MDEzLCAweDAyMDAsIDB4NjAwMywKLQkweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDgzMCwKLQkweDYwMTMsIDB4MDMwMCwgMHgwMDEwLCAweDYwMTMsIDB4MDEwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKLQkweDAwNDEsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwgMHgwODA0LCAweGExODYsIDB4NjAxMywKLQkweDA1MDAsIDB4MGM5OCwgMHg2MDEzLCAweDA2MDAsIDB4MDgxOCwgMHg2MDEzLCAweDAyMDAsIDB4MDgwMCwKLQkweGExODYsIDB4MDAxMywgMHgxMTcwLCAweDYwMDQsIDB4YTA4YSwgMHgwMDQwLCAweDBhMGMsIDB4MTRmNiwKLQkweGEwOGEsIDB4MDA1MywgMHgxYTBjLCAweDE0ZjYsIDB4YTA4MiwgMHgwMDQwLCAweDIwMDgsIDB4MDgwNCwKLQkweGEyNTIsIDB4YTE4NiwgMHgwMDUxLCAweDAxMzgsIDB4YTE4NiwgMHgwMDQ3LCAweDExZDgsIDB4NjAwNCwKLQkweGEwODYsIDB4MDA0MSwgMHgwNTE4LCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwODQsIDB4MDFmMCwKLQkweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4NjY5OSwKLQkweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDIsIDB4MTE3MCwKLQkweDA4MDQsIDB4YTI5NSwgMHhhMTg2LCAweDAwMjcsIDB4MDEyMCwgMHhhMTg2LCAweDAwMTQsIDB4MTkwYywKLQkweDE0ZjYsIDB4NjAwNCwgMHhhMDgyLCAweDAwNDAsIDB4MjAwOCwgMHgwMDFhLCAweDA4MGMsIDB4ODBiZSwKLQkweDAwMDUsIDB4YTIyYywgMHhhMjJlLCAweGEyMmUsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywKLQkweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4YTIyYywKLQkweGEyMmMsIDB4YTIyYywgMHhhMjJjLCAweGEyMmMsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDM2LCAweDAwZDYsIDB4NjAxMCwgMHhhMDZkLCAweDAxYzAsIDB4YWQ4NCwKLQkweGYwMDAsIDB4MDFhOCwgMHg2MDAzLCAweDAwMDIsIDB4NjAxOCwgMHgyMDA0LCAweGQwYmMsIDB4MTE3OCwKLQkweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGE5MWYsIDB4NjAxMywgMHgwMDAwLCAweDYwMTQsIDB4YTAwNSwKLQkweDExMjAsIDB4MjAwMSwgMHhhZmE0LCAweDIwMDQsIDB4NjAxNiwgMHg2MDAzLCAweDAwMDcsIDB4MDBkZSwKLQkweDAwM2UsIDB4MDAwNSwgMHgwMDAyLCAweGEyNjYsIDB4YTI4MywgMHhhMjZmLCAweGEyOGYsIDB4YTI2NiwKLQkweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwKLQkweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweGEyNjYsIDB4YTI2NiwgMHhhMjY2LCAweDA4MGMsIDB4MTRmNiwKLQkweDYwMTAsIDB4YTA4OCwgMHgwMDEzLCAweDIxMDQsIDB4YTA4NSwgMHgwNDAwLCAweDIwMGEsIDB4MDgwYywKLQkweDZiNzMsIDB4NjAxMCwgMHhhMDgwLCAweDAwMTMsIDB4MjAwNCwgMHhkMGI0LCAweDAxMzgsIDB4NjAwMywKLQkweDAwMDcsIDB4MjAwOSwgMHgwMDQzLCAweDA4MGMsIDB4ODBhNywgMHgwMDEwLCAweDYwMDMsIDB4MDAwMiwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweDA4MGMsIDB4NmI3MywgMHgwODBjLCAweGFiNTUsIDB4MTEyMCwKLQkweDA4MGMsIDB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywKLQkweDZiNzMsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4YTNkZSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwKLQkweGEyYWIsIDB4YTJhZCwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhZSwKLQkweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwgMHhhMmFiLCAweGEyYWIsIDB4YTJhYiwKLQkweGEyYWIsIDB4YTJiOSwgMHhhMmFiLCAweDA4MGMsIDB4MTRmNiwgMHgwMDA1LCAweDYwMDMsIDB4MDAwNCwKLQkweDYxMTAsIDB4MjBlMSwgMHgwMDA1LCAweDNkMTgsIDB4M2UyMCwgMHgyYzEwLCAweDA4MGMsIDB4MTgyNCwKLQkweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweDY2MTgsIDB4MDBkZSwgMHgwODBjLCAweGFiYjQsIDB4MDgwYywKLQkweDgwNzgsIDB4MDAwNSwgMHhhMTgyLCAweDAwNDAsIDB4MDAwMiwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkOCwKLQkweGEyZDgsIDB4YTJkOCwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkYSwgMHhhMmQ4LCAweGEyZGQsIDB4YTMxNiwKLQkweGEyZDgsIDB4YTJkOCwgMHhhMmQ4LCAweGEyZDgsIDB4YTMxNiwgMHhhMmQ4LCAweGEyZDgsIDB4YTJkOCwKLQkweDA4MGMsIDB4MTRmNiwgMHgwODBjLCAweDgwYmUsIDB4MDAwNSwgMHgyMDAxLCAweGFkNzEsIDB4MjAwNCwKLQkweGQwZTQsIDB4MDE1OCwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDIyOCwKLQkweDIwMDEsIDB4MDExZiwgMHgyMDA0LCAweDYwMzYsIDB4MDAxMCwgMHg2MDM3LCAweDAwMDAsIDB4MDgwYywKLQkweDZjMDUsIDB4MDgwYywgMHg2ZDBkLCAweDYwMTAsIDB4MDBkNiwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywKLQkweDAxNTAsIDB4YTA4YywgMHgwMDAzLCAweGExOGUsIDB4MDAwMiwgMHgwMTY4LCAweDIwMDksIDB4MDA0MSwKLQkweDAwZGUsIDB4MDgwNCwgMHhhM2RlLCAweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4MDgwYywKLQkweDY2MTgsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4YWI1NSwgMHgwMTEwLCAweDAwZGUsIDB4MDAwNSwKLQkweDA4MGMsIDB4NjYxOCwgMHgwODBjLCAweDgwNzgsIDB4MDBkZSwgMHgwY2EwLCAweDAwMzYsIDB4MDgwYywKLQkweDZjMDUsIDB4MDgwYywgMHg2ZDBkLCAweDYwMTAsIDB4MDBkNiwgMHgyMDY4LCAweDYwMTgsIDB4MjAwNCwKLQkweGQwYmMsIDB4MDE4OCwgMHg2ODRjLCAweGEwODQsIDB4MDAwMywgMHhhMDg2LCAweDAwMDIsIDB4MDE0MCwKLQkweDY4N2MsIDB4NjMyYywgMHhhMzFhLCAweDYzMmUsIDB4Njg4MCwgMHg2MzI4LCAweGEzMWIsIDB4NjMyYSwKLQkweDYwMDMsIDB4MDAwMiwgMHgwMDgwLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGE5MWYsIDB4NjAxNCwKLQkweGEwMDUsIDB4MTEyOCwgMHgyMDAxLCAweGFmYTQsIDB4MjAwNCwgMHg4MDAzLCAweDYwMTYsIDB4NjAxMywKLQkweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDAwZGUsIDB4MDAzZSwgMHgwMDA1LCAweGExODYsIDB4MDAxMywKLQkweDExNTAsIDB4NjAwNCwgMHhhMDg2LCAweDAwNDIsIDB4MTkwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywKLQkweDA4MGMsIDB4NmM1MCwgMHgwMDA1LCAweGExODYsIDB4MDAyNywgMHgwMTE4LCAweGExODYsIDB4MDAxNCwKLQkweDExODAsIDB4NjAwNCwgMHhhMDg2LCAweDAwNDIsIDB4MTkwYywgMHgxNGY2LCAweDIwMDEsIDB4MDAwNywKLQkweDA4MGMsIDB4NGM1ZCwgMHgwODBjLCAweDZiNzMsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMDUsIDB4YTE4MiwgMHgwMDQwLCAweDAwMDIsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwKLQkweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzODEsIDB4YTM4ZCwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwKLQkweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4YTM3ZiwgMHhhMzdmLCAweGEzN2YsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDAzNiwgMHgwMDQ2LCAweDIwZTEsIDB4MDAwNSwgMHgzZDE4LCAweDNlMjAsIDB4MmMxMCwKLQkweDA4MGMsIDB4MTgyNCwgMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHg2MDEwLCAweDAwZDYsIDB4MjA2OCwKLQkweDY4MTAsIDB4NmExNCwgMHgwMDA2LCAweDAwNDYsIDB4MDA1NiwgMHg2YzdjLCAweGE0MjIsIDB4NmQ4MCwKLQkweDIyMDAsIDB4YTUyYiwgMHg2MDJjLCAweGE0MjAsIDB4NjQyZSwgMHg2MDI4LCAweGE1MjksIDB4NjUyYSwKLQkweDAwNWUsIDB4MDA0ZSwgMHgwMDBlLCAweGEyMGQsIDB4MTE3OCwgMHg2ODRjLCAweGQwZmMsIDB4MDEyMCwKLQkweDIwMDksIDB4MDA0MSwgMHgwMGRlLCAweDA0OTAsIDB4NjAwMywgMHgwMDA3LCAweDYwMTcsIDB4MDAwMCwKLQkweDA4MGMsIDB4NjYxOCwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywKLQkweDUwMjksIDB4MDBmZSwgMHgwMDBlLCAweDAxMjAsIDB4NjAwMywgMHgwMDAyLCAweDAwZGUsIDB4MDAwNSwKLQkweDIwMDksIDB4YWQwZCwgMHgyMTBjLCAweGQxOWMsIDB4MDExOCwgMHg2MDAzLCAweDAwMDcsIDB4MDAxMCwKLQkweDYwMDMsIDB4MDAwNiwgMHgwMDIxLCAweDA4MGMsIDB4NjYxYSwgMHgwMGRlLCAweDAwMDUsIDB4ZDJmYywKLQkweDAxNDAsIDB4ODAwMiwgMHg4MDAwLCAweDgyMTIsIDB4YTI5MSwgMHgwMDAwLCAweDIwMDksIDB4MDAwOSwKLQkweDAwMTAsIDB4MjAwOSwgMHgwMDE1LCAweDZhNmEsIDB4Njg2NiwgMHgwMDA1LCAweGExODIsIDB4MDA0MCwKLQkweDAyMDgsIDB4MDA2MiwgMHhhMTg2LCAweDAwMTMsIDB4MDEyMCwgMHhhMTg2LCAweDAwMTQsIDB4MTkwYywKLQkweDE0ZjYsIDB4NjAyMCwgMHhkMGRjLCAweDA5MGMsIDB4MTRmNiwgMHgwMDA1LCAweGE0MDEsIDB4YTQwOCwKLQkweGE0MTQsIDB4YTQyMCwgMHhhNDAxLCAweGE0MDEsIDB4YTQwMSwgMHhhNDJmLCAweGE0MDEsIDB4YTQwMywKLQkweGE0MDMsIDB4YTQwMSwgMHhhNDAxLCAweGE0MDEsIDB4YTQwMSwgMHhhNDAzLCAweGE0MDEsIDB4YTQwMywKLQkweGE0MDEsIDB4MDgwYywgMHgxNGY2LCAweDYwMjAsIDB4ZDBkYywgMHgwOTBjLCAweDE0ZjYsIDB4MDAwNSwKLQkweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4NjdhOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMTJlLCAweDAwMDUsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywKLQkweDY3YTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YzUwLCAweDAxMmUsIDB4MDAwNSwKLQkweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsIDB4MDgwYywgMHgxZTZlLCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4MDgwYywgMHg2ODBiLCAweDA4MGMsIDB4NmQwZCwgMHgwMTJlLCAweDAwMDUsIDB4YTAxNiwKLQkweDA4MGMsIDB4MTgyNCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMzYsIDB4MDBkNiwKLQkweGExODIsIDB4MDA0MCwgMHgwMDIzLCAweDAwZGUsIDB4MDAzZSwgMHgwMTJlLCAweDAwMDUsIDB4YTQ0ZiwKLQkweGE0NTEsIDB4YTQ2MywgMHhhNDdlLCAweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0OTMsIDB4YTQ0ZiwKLQkweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4YTQ0ZiwgMHhhNDRmLCAweGE0NGYsIDB4MDgwYywKLQkweDE0ZjYsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4ZDBmYywgMHgwMWY4LCAweGEwOWMsIDB4MDAwMywKLQkweGEzOWUsIDB4MDAwMywgMHgwMWQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwNDk4LCAweDYwMTAsIDB4MjA2OCwgMHg2ODRjLCAweGQwZmMsIDB4MDE2OCwKLQkweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MDE0MCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwKLQkweDA4MGMsIDB4NjdhOCwgMHgwODBjLCAweDZjNTAsIDB4MDQwOCwgMHg2MDEzLCAweDAwMDAsIDB4NjAxNywKLQkweDAwMDAsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4YTkxZiwgMHgwMGMwLCAweDYwMTAsIDB4MjA2OCwKLQkweDY4NGMsIDB4ZDBmYywgMHgwZDkwLCAweGEwOWMsIDB4MDAwMywgMHhhMzllLCAweDAwMDMsIDB4MGQ2OCwKLQkweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsIDB4MDgwYywgMHgxZTZlLCAweDA4MGMsIDB4NjgwYiwKLQkweDA4MGMsIDB4NmQwZCwgMHgwMDE4LCAweGEwMTYsIDB4MDgwYywgMHgxODI0LCAweDAwMDUsIDB4MDgwYywKLQkweDZiNzMsIDB4NjExMCwgMHg4MWZmLCAweDAxNTgsIDB4MDBkNiwgMHgyMTY4LCAweDA4MGMsIDB4YWJmYSwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4YTkxZiwgMHgwMDNlLCAweDAwZGUsIDB4MDgwYywKLQkweDk3NGUsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4MDgwYywgMHg2YzA1LCAweDYxMTAsIDB4ODFmZiwKLQkweDAxNTgsIDB4MDBkNiwgMHgyMTY4LCAweDA4MGMsIDB4YWJmYSwgMHgwMDM2LCAweDIwMTksIDB4MDAyOSwKLQkweDA4MGMsIDB4YTkxZiwgMHgwMDNlLCAweDAwZGUsIDB4MDgwYywgMHg5NzRlLCAweDA4MGMsIDB4NmQwZCwKLQkweDAwMDUsIDB4YTE4MiwgMHgwMDg1LCAweDAwMDIsIDB4YTRjZCwgMHhhNGNiLCAweGE0Y2IsIDB4YTRkOSwKLQkweGE0Y2IsIDB4YTRjYiwgMHhhNGNiLCAweDA4MGMsIDB4MTRmNiwgMHg2MDAzLCAweDAwMGIsIDB4NjEwNiwKLQkweDA4MGMsIDB4NjdhOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZjNTAsIDB4MDEyZSwKLQkweDAwMDUsIDB4MDAyNiwgMHgwMGU2LCAweDA4MGMsIDB4YWI0ZSwgMHgwMTE4LCAweDA4MGMsIDB4ODA3OCwKLQkweDAwYzgsIDB4MjA3MSwgMHhiMjgwLCAweDcyMjQsIDB4NjIxMiwgMHg3MjIwLCAweDA4MGMsIDB4YTdjZSwKLQkweDAxMTgsIDB4NjAwNywgMHgwMDg2LCAweDAwNDAsIDB4NjAwNywgMHgwMDg3LCAweDcyMjQsIDB4YTI5NiwKLQkweGZmZmYsIDB4MTExMCwgMHg2MDA3LCAweDAwODYsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTE2MCwKLQkweDYwMDQsIDB4YTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MTRmNiwgMHhhMDhhLCAweDAwOGMsIDB4MWEwYywKLQkweDE0ZjYsIDB4YTA4MiwgMHgwMDg1LCAweDAwYTIsIDB4YTE4NiwgMHgwMDI3LCAweDAxMzAsIDB4YTE4NiwKLQkweDAwMTQsIDB4MDExOCwgMHgwODBjLCAweDgwYmUsIDB4MDA1MCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKLQkweDRjNWQsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweGE1MjcsIDB4YTUyOSwgMHhhNTI5LCAweGE1MjcsIDB4YTUyNywgMHhhNTI3LCAweGE1MjcsIDB4MDgwYywKLQkweDE0ZjYsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweGExODIsIDB4MDA4NSwgMHgwYTBjLCAweDE0ZjYsIDB4YTE4MiwgMHgwMDhjLCAweDFhMGMsIDB4MTRmNiwKLQkweGExODIsIDB4MDA4NSwgMHgwMDAyLCAweGE1NDIsIDB4YTU0MiwgMHhhNTQyLCAweGE1NDQsIDB4YTU0MiwKLQkweGE1NDIsIDB4YTU0MiwgMHgwODBjLCAweDE0ZjYsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MDE0OCwKLQkweGExODYsIDB4MDAxNCwgMHgwMTMwLCAweGExODYsIDB4MDAyNywgMHgwMTE4LCAweDA4MGMsIDB4ODBiZSwKLQkweDAwMzAsIDB4MDgwYywgMHg2YjczLCAweDA4MGMsIDB4OTc0ZSwgMHgwODBjLCAweDZjNTAsIDB4MDAwNSwKLQkweDAwMzYsIDB4MDgwYywgMHhhYmI0LCAweDYwM2YsIDB4MDAwMCwgMHgyMDE5LCAweDAwMGIsIDB4MDAzMSwKLQkweDYwMWYsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsIDB4MDAzZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAzNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgwMDg2LCAweDJjNDAsIDB4MDA5NiwgMHgyMDQ5LCAweDAwMDAsIDB4MDgwYywKLQkweDdiOWEsIDB4MDA5ZSwgMHgwMDhlLCAweDE1NzgsIDB4MDA3NiwgMHgyYzM4LCAweDA4MGMsIDB4N2MzNCwKLQkweDAwN2UsIDB4MTU0OCwgMHg2MDAwLCAweGEwODYsIDB4MDAwMCwgMHgwNTI4LCAweDYwMWMsIDB4YTA4NiwKLQkweDAwMDcsIDB4MDUwOCwgMHgwMGQ2LCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDExNTAsIDB4MDgwYywKLQkweGFiYjQsIDB4NjAxZiwgMHgwMDA3LCAweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MDgwYywKLQkweDE5MGIsIDB4NjAxMCwgMHgyMDY4LCAweDA4MGMsIDB4OTU5NiwgMHgwMTEwLCAweDA4MGMsIDB4YTkxZiwKLQkweDAwZGUsIDB4NjAxMywgMHgwMDAwLCAweDA4MGMsIDB4YWJiNCwgMHg2MDFmLCAweDAwMDcsIDB4MjAwMSwKLQkweGFmYTMsIDB4MjAwNCwgMHg2MDE2LCAweDAwM2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBjNiwKLQkweDAwMzYsIDB4MDE1NiwgMHgyMDc5LCAweGIyODAsIDB4NzkzOCwgMHg3ODNjLCAweDA4MGMsIDB4MjY3NiwKLQkweDE5MDQsIDB4YTVmMSwgMHgwMDE2LCAweDAwYzYsIDB4MDgwYywgMHg0Y2RjLCAweDE1YzAsIDB4MjAxMSwKLQkweGIyOTAsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweDhhN2MsIDB4MTU3OCwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDI2LCAweDAwMTYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4N2NmNCwKLQkweDA4MGMsIDB4NjhlNywgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDY4MWQsIDB4MDA3ZSwKLQkweDAwMWUsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MDgwYywKLQkweDRlY2YsIDB4MDAyNiwgMHg2MjA0LCAweGEyOTQsIDB4ZmYwMCwgMHg4MjE3LCAweGEyODYsIDB4MDAwNiwKLQkweDAxMTgsIDB4YTI4NiwgMHgwMDA0LCAweDExMTgsIDB4NjJhMCwgMHgwODBjLCAweDJiODcsIDB4MDAyZSwKLQkweDAwMWUsIDB4MDgwYywgMHg0OTNhLCAweDY2MTIsIDB4NjUxNiwgMHhhMDA2LCAweDAwMTAsIDB4MDBjZSwKLQkweDAwMWUsIDB4MDE1ZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwZTYsIDB4MDAxNiwgMHgyMDA5LCAweGFkMjAsIDB4MjEwNCwgMHhhMDg2LCAweDAwNzQsIDB4MTkwNCwKLQkweGE2NGIsIDB4MjA2OSwgMHhiMjhlLCAweDY5MGMsIDB4YTE4MiwgMHgwMTAwLCAweDA2YzAsIDB4NjkwOCwKLQkweGExODQsIDB4ODAwMCwgMHgwNWU4LCAweDIwMDEsIDB4YWY5ZCwgMHgyMDA0LCAweGEwMDUsIDB4MTE2MCwKLQkweDYwMTgsIDB4MjA3MCwgMHg3MDEwLCAweGEwODQsIDB4MDBmZiwgMHgwMTE4LCAweDcwMDAsIDB4ZDBmNCwKLQkweDAxMTgsIDB4YTE4NCwgMHgwODAwLCAweDA1NjAsIDB4NjkxMCwgMHhhMThhLCAweDAwMDEsIDB4MDYxMCwKLQkweDY5MTQsIDB4MjA2OSwgMHhiMmFlLCAweDY5MDQsIDB4ODFmZiwgMHgxMTk4LCAweDY5MGMsIDB4YTE4MiwKLQkweDAxMDAsIDB4MDJhOCwgMHg2OTA4LCAweDgxZmYsIDB4MTE3OCwgMHg2OTEwLCAweGExOGEsIDB4MDAwMSwKLQkweDAyODgsIDB4NjkxOCwgMHhhMThhLCAweDAwMDEsIDB4MDI5OCwgMHgwMGQwLCAweDYwMTMsIDB4MDEwMCwKLQkweDAwYTAsIDB4NjAxMywgMHgwMzAwLCAweDAwODgsIDB4NjAxMywgMHgwNTAwLCAweDAwNzAsIDB4NjAxMywKLQkweDA3MDAsIDB4MDA1OCwgMHg2MDEzLCAweDA5MDAsIDB4MDA0MCwgMHg2MDEzLCAweDBiMDAsIDB4MDAyOCwKLQkweDYwMTMsIDB4MGYwMCwgMHgwMDEwLCAweDYwMTMsIDB4MmQwMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwOCwKLQkweGEwMDYsIDB4MDAxZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwKLQkweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDYyMTgsIDB4MjI2OCwgMHg2YjA0LCAweGEzOTQsIDB4MDBmZiwKLQkweGEyODYsIDB4MDAwNiwgMHgwMTkwLCAweGEyODYsIDB4MDAwNCwgMHgwMTc4LCAweGEzOTQsIDB4ZmYwMCwKLQkweDgyMTcsIDB4YTI4NiwgMHgwMDA2LCAweDAxNDgsIDB4YTI4NiwgMHgwMDA0LCAweDAxMzAsIDB4MDBjNiwKLQkweDJkNjAsIDB4MDgwYywgMHg0Y2ViLCAweDAwY2UsIDB4MDRjMCwgMHgyMDExLCAweGIyOTYsIDB4YWQ5OCwKLQkweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4OGE3YywgMHgxNTgwLCAweDIwMTEsIDB4YjI5YSwKLQkweGFkOTgsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywgMHg4YTdjLCAweDE1MzgsIDB4MDA0NiwKLQkweDAwMTYsIDB4NmFhMCwgMHhhMjk0LCAweDAwZmYsIDB4ODIyNywgMHhhMDA2LCAweDIwMDksIDB4YWQ1MiwKLQkweDIxMGMsIDB4ZDFhNCwgMHgwMTM4LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGE5NmMsIDB4NjgwMCwKLQkweGMwZTUsIDB4NjgwMiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg2OGU3LCAweDAwNzYsIDB4MjAzOSwKLQkweDAwMDAsIDB4MDgwYywgMHg2ODFkLCAweDJjMDgsIDB4MDgwYywgMHhhNzEyLCAweDAwN2UsIDB4MjAwMSwKLQkweDAwMDcsIDB4MDgwYywgMHg0YzVkLCAweDAwMWUsIDB4MDA0ZSwgMHhhMDA2LCAweDAxNWUsIDB4MDAzZSwKLQkweDAwMmUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBkNiwgMHgyMDY5LCAweGIyOGUsIDB4NjgwMCwKLQkweGEwODYsIDB4MDgwMCwgMHgwMTE4LCAweDYwMTMsIDB4MDAwMCwgMHgwMDA4LCAweGEwMDYsIDB4MDBkZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMGY2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjA3OSwKLQkweGIyOGMsIDB4NzkzMCwgMHg3ODM0LCAweDA4MGMsIDB4MjY3NiwgMHgxMWEwLCAweDA4MGMsIDB4NGNkYywKLQkweDExODgsIDB4MjAxMSwgMHhiMjkwLCAweGFjOTgsIDB4MDAwYSwgMHgyMGE5LCAweDAwMDQsIDB4MDgwYywKLQkweDhhN2MsIDB4MTE0MCwgMHgyMDExLCAweGIyOTQsIDB4YWM5OCwgMHgwMDA2LCAweDIwYTksIDB4MDAwNCwKLQkweDA4MGMsIDB4OGE3YywgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwZmUsIDB4MDBjZSwKLQkweDAwMDUsIDB4MDBjNiwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjAxMSwKLQkweGIyODMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjc2LCAweDExYTAsIDB4MDgwYywKLQkweDRjZGMsIDB4MTE4OCwgMHgyMDExLCAweGIyOTYsIDB4YWM5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwKLQkweDA4MGMsIDB4OGE3YywgMHgxMTQwLCAweDIwMTEsIDB4YjI5YSwgMHhhYzk4LCAweDAwMDYsIDB4MjBhOSwKLQkweDAwMDQsIDB4MDgwYywgMHg4YTdjLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwKLQkweDAwY2UsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDA4NiwgMHgwMDc2LCAweDAwNjYsIDB4MDA1NiwKLQkweDAwNDYsIDB4MDAyNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyNzQwLCAweDIwMjksIDB4YWZkMCwKLQkweDI1MmMsIDB4MjAyMSwgMHhhZmQ2LCAweDI0MjQsIDB4MjA2MSwgMHhiNDAwLCAweDIwNzEsIDB4YWQwMCwKLQkweDc2NDQsIDB4NzA2NCwgMHg4MWZmLCAweDAxMjgsIDB4ODAwMSwgMHhhNjAyLCAweDFhMDQsIDB4YTc4ZSwKLQkweDAwMTgsIDB4YTYwNiwgMHgwOTA0LCAweGE3OGUsIDB4MjEwMCwgMHhhYzA2LCAweDA5MDQsIDB4YTc4NSwKLQkweDA4MGMsIDB4YTk5MCwgMHgwOTA0LCAweGE3ODUsIDB4NjcxYywgMHhhNzg2LCAweDAwMDEsIDB4MDkwNCwKLQkweGE3YTUsIDB4YTc4NiwgMHgwMDA0LCAweDA5MDQsIDB4YTdhNSwgMHhhNzg2LCAweDAwMDcsIDB4MDVlOCwKLQkweDI1MDAsIDB4YWMwNiwgMHgwNWQwLCAweDI0MDAsIDB4YWMwNiwgMHgwNWI4LCAweDA4MGMsIDB4YTlhMCwKLQkweDE1YTAsIDB4ODhmZiwgMHgwMTE4LCAweDYwNTAsIDB4YTkwNiwgMHgxNTc4LCAweDAwZDYsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwNCwgMHgxMTIwLCAweDAwMTYsIDB4MDgwYywgMHgxOTBiLCAweDAwMWUsIDB4YTc4NiwKLQkweDAwMDgsIDB4MTE0OCwgMHgwODBjLCAweDk3ODksIDB4MTEzMCwgMHgwODBjLCAweDg1ZjMsIDB4MDBkZSwKLQkweDA4MGMsIDB4OTc0ZSwgMHgwMGQwLCAweDYwMTAsIDB4MjA2OCwgMHgwODBjLCAweDk1OTYsIDB4MDE5MCwKLQkweGE3ODYsIDB4MDAwMywgMHgxNTI4LCAweDY4MzcsIDB4MDEwMywgMHg2YjRhLCAweDY4NDcsIDB4MDAwMCwKLQkweDA4MGMsIDB4YWJmYSwgMHgwMDE2LCAweDA4MGMsIDB4OTdmZCwgMHgwODBjLCAweDUxMGMsIDB4MDAxZSwKLQkweDA4MGMsIDB4OTc0MiwgMHgwMGRlLCAweDA4MGMsIDB4OTc0ZSwgMHhhY2UwLCAweDAwMTgsIDB4MjAwMSwKLQkweGFkMTYsIDB4MjAwNCwgMHhhYzAyLCAweDEyMTAsIDB4MDgwNCwgMHhhNzI2LCAweDAxMmUsIDB4MDAyZSwKLQkweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDA4ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweGE3ODYsIDB4MDAwNiwgMHgxOWMwLCAweGEzODYsIDB4MDAwNSwgMHgwMTI4LCAweDA4MGMsIDB4YWJmYSwKLQkweDA4MGMsIDB4YTkxZiwgMHgwOGY4LCAweDAwZGUsIDB4MGMwMCwgMHgwODBjLCAweGE5YTAsIDB4MTllOCwKLQkweDgxZmYsIDB4MDlkOCwgMHhhMTgwLCAweDAwMDEsIDB4MjAwNCwgMHhhMDg2LCAweDAwMTgsIDB4MDEzMCwKLQkweGExODAsIDB4MDAwMSwgMHgyMDA0LCAweGEwODYsIDB4MDAyZCwgMHgxOTc4LCAweDYwMDAsIDB4YTA4NiwKLQkweDAwMDIsIDB4MTk1OCwgMHgwODBjLCAweDk3NzgsIDB4MDEzMCwgMHgwODBjLCAweDk3ODksIDB4MTkyOCwKLQkweDA4MGMsIDB4ODVmMywgMHgwMDM4LCAweDA4MGMsIDB4MmFmZiwgMHgwODBjLCAweDk3ODksIDB4MTExMCwKLQkweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDk3NGUsIDB4MDgwNCwgMHhhNzg1LCAweDAwYzYsIDB4MDBlNiwKLQkweDAwMTYsIDB4MmMwOCwgMHgyMTcwLCAweDA4MGMsIDB4YTk0MCwgMHgwMDFlLCAweDAxMjAsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwZWUsIDB4MDBjZSwgMHgwMDA1LCAweGE3ZTYsIDB4YTdlNiwKLQkweGE3ZTYsIDB4YTdlNiwgMHhhN2U2LCAweGE3ZTYsIDB4YTdlOCwgMHhhN2U2LCAweGEwMDYsIDB4MDAwNSwKLQkweDAwNDYsIDB4MDAxNiwgMHg3MDE4LCAweGEwODAsIDB4MDAyOCwgMHgyMDI0LCAweGE0YTQsIDB4MDBmZiwKLQkweDg0MjcsIDB4MmMwMCwgMHgyMDA5LCAweDAwMjAsIDB4MDgwYywgMHhhOTZjLCAweDAwMWUsIDB4MDA0ZSwKLQkweDAwMzYsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsIDB4YTU2NiwgMHgwMDNlLCAweGEwODUsIDB4MDAwMSwKLQkweDAwMDUsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NGMxZSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwKLQkweDAwMzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4YWQwNSwgMHgyMDExLCAweGIyOTYsIDB4MDgwYywKLQkweDhhN2MsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHhhMDA1LCAweDAwMDUsIDB4MDBmNiwKLQkweDAwZTYsIDB4MDBjNiwgMHgwMDg2LCAweDAwNzYsIDB4MDA2NiwgMHgwMDI2LCAweDAxMjYsIDB4MjA5MSwKLQkweDgwMDAsIDB4Mjc0MCwgMHgyMDYxLCAweGI0MDAsIDB4MjA3OSwgMHgwMDAxLCAweDhmZmYsIDB4MDkwNCwKLQkweGE4NzUsIDB4MjA3MSwgMHhhZDAwLCAweDc2NDQsIDB4NzA2NCwgMHg4MDAxLCAweGE2MDIsIDB4MWEwNCwKLQkweGE4NzUsIDB4ODhmZiwgMHgwMTI4LCAweDI4MDAsIDB4YWMwNiwgMHgxNWIwLCAweDIwNzksIDB4MDAwMCwKLQkweDA4MGMsIDB4YTk5MCwgMHgwNTg4LCAweDI0MDAsIDB4YWMwNiwgMHgwNTcwLCAweDY3MWMsIDB4YTc4NiwKLQkweDAwMDYsIDB4MTU1MCwgMHhhNzg2LCAweDAwMDcsIDB4MDUzOCwgMHg4OGZmLCAweDExNDAsIDB4NjAxOCwKLQkweGEyMDYsIDB4MTUxMCwgMHg4NWZmLCAweDAxMTgsIDB4NjA1MCwgMHhhMTA2LCAweDExZTgsIDB4MDBkNiwKLQkweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDExNTAsIDB4MDgwYywgMHhhYmI0LCAweDYwMWYsIDB4MDAwNywKLQkweDIwMDEsIDB4YWZhMywgMHgyMDA0LCAweDYwMTYsIDB4MDgwYywgMHgxOTBiLCAweDYwMTAsIDB4MjA2OCwKLQkweDA4MGMsIDB4OTU5NiwgMHgwMTIwLCAweDAwNDYsIDB4MDgwYywgMHhhOTFmLCAweDAwNGUsIDB4MDBkZSwKLQkweDA4MGMsIDB4OTc0ZSwgMHg4OGZmLCAweDExOTgsIDB4YWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4YWQxNiwKLQkweDIwMDQsIDB4YWMwMiwgMHgxMjEwLCAweDA4MDQsIDB4YTgyNiwgMHhhMDA2LCAweDAxMmUsIDB4MDAyZSwKLQkweDAwNmUsIDB4MDA3ZSwgMHgwMDhlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4YThjNSwKLQkweDAwMDEsIDB4MGNhMCwgMHgwMDc2LCAweDAwNTYsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MjAyOSwKLQkweDAwMDEsIDB4MmMyMCwgMHgyMDE5LCAweDAwMDIsIDB4NjIxOCwgMHgwMDk2LCAweDIwNDksIDB4MDAwMCwKLQkweDA4MGMsIDB4N2I5YSwgMHgwMDllLCAweDAwOGUsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4N2MzNCwKLQkweDA4MGMsIDB4YTgxNywgMHgwMDVlLCAweDAwN2UsIDB4MDAwNSwgMHgwMDI2LCAweDAwNDYsIDB4MDA1NiwKLQkweDAwNzYsIDB4MDBjNiwgMHgwMTU2LCAweDJjMjAsIDB4MjEyOCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwKLQkweDAwMDAsIDB4MDAxNiwgMHgwMDM2LCAweDA4MGMsIDB4NGNkYywgMHgxMWIwLCAweDJjMTAsIDB4MDA1NiwKLQkweDAwODYsIDB4MjA0MSwgMHgwMDAwLCAweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDAwOTYsIDB4MjA0OSwKLQkweDAwMDAsIDB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywKLQkweDdjMzQsIDB4MDgwYywgMHhhODE3LCAweDAwNWUsIDB4MDAzZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwKLQkweGE4YTksIDB4MDE1ZSwgMHgwMGNlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwMmUsIDB4MDAwNSwKLQkweDAwNzYsIDB4MDA1NiwgMHg2MjE4LCAweDAwODYsIDB4MjA0MSwgMHgwMDAwLCAweDIwMjksIDB4MDAwMSwKLQkweDIwMTksIDB4MDA0OCwgMHgwMDk2LCAweDIwNDksIDB4MDAwMCwgMHgwODBjLCAweDdiOWEsIDB4MDA5ZSwKLQkweDAwOGUsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4N2MzNCwgMHgyYzIwLCAweDA4MGMsIDB4YTgxNywKLQkweDAwNWUsIDB4MDA3ZSwgMHgwMDA1LCAweDAwMjYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDBjNiwKLQkweDAxNTYsIDB4MmMyMCwgMHgyMGE5LCAweDAwN2YsIDB4MjAwOSwgMHgwMDAwLCAweDAwMTYsIDB4MDAzNiwKLQkweDA4MGMsIDB4NGNkYywgMHgxMWMwLCAweDJjMTAsIDB4MDA4NiwgMHgyMDQxLCAweDAwMDAsIDB4MjgyOCwKLQkweDAwNDYsIDB4MjAyMSwgMHgwMDAxLCAweDA4MGMsIDB4YWI5NiwgMHgwMDRlLCAweDAwOTYsIDB4MjA0OSwKLQkweDAwMDAsIDB4MDgwYywgMHg3YjlhLCAweDAwOWUsIDB4MDA4ZSwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywKLQkweDdjMzQsIDB4MDgwYywgMHhhODE3LCAweDAwM2UsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4YThmNiwKLQkweDAxNWUsIDB4MDBjZSwgMHgwMDdlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDJlLCAweDAwMDUsIDB4MDAxNiwKLQkweDAwZjYsIDB4MzgwMCwgMHhkMDhjLCAweDAxMzAsIDB4YWQ4MiwgMHgxMDAwLCAweDAyYjAsIDB4YWQ4MiwKLQkweGFkMDAsIDB4MDIzMCwgMHhhZDgyLCAweGU0MDAsIDB4MDI4MCwgMHhhZDgyLCAweGZmZmYsIDB4MTI2OCwKLQkweDY4MDAsIDB4YTA3ZCwgMHgwMTM4LCAweDY4MDMsIDB4MDAwMCwgMHg2YjUyLCAweDA4MGMsIDB4NTEwYywKLQkweDJmNjgsIDB4MGNiMCwgMHg2YjUyLCAweDA4MGMsIDB4NTEwYywgMHgwMGZlLCAweDAwMWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4YjQwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzQ0NCwKLQkweDcwNjQsIDB4ODAwMSwgMHhhNDAyLCAweDEyZDgsIDB4MjEwMCwgMHhhYzA2LCAweDAxNjgsIDB4NjAwMCwKLQkweGEwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMDgsIDB4YTIwNiwgMHgxMTMwLCAweDYwMTgsIDB4YTFhMCwKLQkweDAwMDYsIDB4MjQyNCwgMHhhNDA2LCAweDAxNDAsIDB4YWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4YWQxNiwKLQkweDIwMDQsIDB4YWMwMiwgMHgxMjIwLCAweDBjMDgsIDB4YTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4YTAwNiwKLQkweDAwM2UsIDB4MDA0ZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDA2LCAweDA4MGMsIDB4MTVkOSwKLQkweDAwMGUsIDB4MDkwYywgMHgxNGY2LCAweDY4MzcsIDB4MDEwZCwgMHg2ODVlLCAweDAwMjYsIDB4MjAxMCwKLQkweDA4MGMsIDB4OTU4NiwgMHgyMDAxLCAweDAwMDAsIDB4MDEyMCwgMHgyMjAwLCAweGEwODAsIDB4MDAxNCwKLQkweDIwMDQsIDB4MDAyZSwgMHg2ODRhLCAweDY5NTYsIDB4NmM0NiwgMHg2ODRmLCAweDAwMDAsIDB4YTAwNiwKLQkweDY4YjIsIDB4NjgwMiwgMHg2ODNhLCAweDY4NWEsIDB4MDgwYywgMHg1MTBjLCAweDAwZGUsIDB4MDAwNSwKLQkweDY3MDAsIDB4YTc4NiwgMHgwMDAwLCAweDAxNTgsIDB4YTc4NiwgMHgwMDAxLCAweDAxNDAsIDB4YTc4NiwKLQkweDAwMGEsIDB4MDEyOCwgMHhhNzg2LCAweDAwMDksIDB4MDExMCwgMHhhMDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweDAwZTYsIDB4NjAxOCwgMHgyMDcwLCAweDcwYTAsIDB4YTIwNiwgMHgwMGVlLCAweDAwMDUsIDB4MDAxNiwKLQkweDYwMDQsIDB4YTA4ZSwgMHgwMDFlLCAweDExYTAsIDB4ODAwNywgMHg2MTMwLCAweGExOGMsIDB4MDBmZiwKLQkweGExMDUsIDB4NjAzMiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMWYsIDB4MDAwNSwKLQkweDIwMDEsIDB4YWZhNCwgMHgyMDA0LCAweDYwMTYsIDB4MDgwYywgMHg2N2E4LCAweDA4MGMsIDB4NmM1MCwKLQkweDAwMWUsIDB4MDAwNSwgMHhlMDAwLCAweGUwMDAsIDB4MDAwNSwgMHg2MDIwLCAweGQwZTQsIDB4MDE1OCwKLQkweGQwY2MsIDB4MDExOCwgMHgwODBjLCAweDk4NjYsIDB4MDAzMCwgMHgwODBjLCAweGFiYjQsIDB4MDgwYywKLQkweDY2MTgsIDB4MDgwYywgMHg4MDc4LCAweDAwMDUsIDB4YTI4MCwgMHgwMDA3LCAweDIwMDQsIDB4YTA4NCwKLQkweDAwMGYsIDB4MDAwMiwgMHhhOWUzLCAweGE5ZTMsIDB4YTllMywgMHhhOWU4LCAweGE5ZTMsIDB4YTllNSwKLQkweGE5ZTUsIDB4YTllMywgMHhhOWU1LCAweGEwMDYsIDB4MDAwNSwgMHgwMGM2LCAweDIyNjAsIDB4MDBjZSwKLQkweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweGEyODAsIDB4MDAwNywgMHgyMDA0LCAweGEwODQsIDB4MDAwZiwKLQkweDAwMDIsIDB4YTlmYSwgMHhhOWZhLCAweGE5ZmEsIDB4YTlmYSwgMHhhOWZhLCAweGE5ZmEsIDB4YWEwNSwKLQkweGE5ZmEsIDB4YTlmYSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyYiwgMHgwMDA5LCAweDYwMTMsIDB4MmEwMCwKLQkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDY3YTgsIDB4MDAwNSwgMHgwMGM2LCAweDIyNjAsIDB4MDgwYywKLQkweGFiYjQsIDB4NjAzZiwgMHgwMDAwLCAweDYwMjAsIDB4YzBmNCwgMHhjMGNjLCAweDYwMjIsIDB4NjAzNywKLQkweDAwMDAsIDB4MDBjZSwgMHgwMGQ2LCAweDIyNjgsIDB4YTE4NiwgMHgwMDA3LCAweDE5MDQsIDB4YWE2MCwKLQkweDY4MTAsIDB4YTAwNSwgMHgwMTM4LCAweGEwODAsIDB4MDAxMywgMHgyMDA0LCAweGQwZmMsIDB4MTExMCwKLQkweDAwZGUsIDB4MDhjMCwgMHg2MDA3LCAweDAwM2EsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NjdhOCwKLQkweDA4MGMsIDB4NmM1MCwgMHgwMGM2LCAweDJkNjAsIDB4NjEwMCwgMHhhMTg2LCAweDAwMDIsIDB4MTkwNCwKLQkweGFhZTcsIDB4NjAxMCwgMHhhMDA1LCAweDExMzgsIDB4NjAwMCwgMHhhMDg2LCAweDAwMDcsIDB4MTkwYywKLQkweDE0ZjYsIDB4MDgwNCwgMHhhYWU3LCAweGEwOGMsIDB4ZjAwMCwgMHgxMTMwLCAweDAwMjgsIDB4MjA2OCwKLQkweDY4MDAsIDB4YTAwNSwgMHgxZGUwLCAweDJkMDAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4YTA4NCwKLQkweDAwMDMsIDB4YTA4NiwgMHgwMDAyLCAweDExODAsIDB4NjAxMCwgMHgyMDY4LCAweDY4NGMsIDB4YzBkYywKLQkweGMwZjQsIDB4Njg0ZSwgMHg2ODUwLCAweGMwZjQsIDB4YzBmYywgMHg2ODUyLCAweDIwMDksIDB4MDA0MywKLQkweDA4MGMsIDB4YTNkZSwgMHgwODA0LCAweGFhZTcsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4YWFlMSwKLQkweGExODYsIDB4MDAwNSwgMHgxNWYwLCAweDY4MTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMDQsIDB4ZDBiYywKLQkweDExMTgsIDB4MDBkZSwgMHgwODA0LCAweGE5ZmEsIDB4ZDBiNCwgMHgwMTI4LCAweGQwZmMsIDB4MDkwYywKLQkweDE0ZjYsIDB4MDgwNCwgMHhhYTE4LCAweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKLQkweDY3YTgsIDB4MDgwYywgMHg2YzUwLCAweDAwYzYsIDB4MmQ2MCwgMHg2MTAwLCAweGExODYsIDB4MDAwMiwKLQkweDAxMjAsIDB4YTE4NiwgMHgwMDA0LCAweDE5MDQsIDB4YWFlNywgMHgyMDcxLCAweGFmZmQsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwMywgMHgxMTI4LCAweDcwMDQsIDB4YWMwNiwgMHgxMTEwLCAweDcwMDMsIDB4MDAwMCwKLQkweDY4MTAsIDB4YTA4MCwgMHgwMDEzLCAweDIwMGMsIDB4YzFmNCwgMHhjMWRjLCAweDIxMDIsIDB4ODAwMCwKLQkweDIwMGMsIDB4YzFmNCwgMHhjMWZjLCAweGMxYmMsIDB4MjEwMiwgMHgyMDA5LCAweDAwNDIsIDB4MDgwNCwKLQkweGFhZTEsIDB4MDAzNiwgMHgwMGQ2LCAweDAwZDYsIDB4MDgwYywgMHgxNWQ5LCAweDAwM2UsIDB4MDkwYywKLQkweDE0ZjYsIDB4NjgzNywgMHgwMTBkLCAweDY4MDMsIDB4MDAwMCwgMHg2ODNiLCAweDAwMDAsIDB4Njg1YiwKLQkweDAwMDAsIDB4NmI1ZSwgMHg2ODU3LCAweDAwNDUsIDB4MmMwMCwgMHg2ODYyLCAweDYwMzQsIDB4Njg3MiwKLQkweDIzNjAsIDB4NjAyMCwgMHhjMGRkLCAweDYwMjIsIDB4NjAxOCwgMHhhMDgwLCAweDAwMjgsIDB4MjAwNCwKLQkweGEwODQsIDB4MDBmZiwgMHg4MDA3LCAweDYzNTAsIDB4NmI0YSwgMHg2ODQ2LCAweDY4NGYsIDB4MDAwMCwKLQkweDZkNmEsIDB4NmU2NiwgMHg2ODZmLCAweDAwMDEsIDB4MDgwYywgMHg1MTBjLCAweDIwMTksIDB4MDA0NSwKLQkweDYwMDgsIDB4MjA2OCwgMHgwODBjLCAweGE1NjYsIDB4MmQwMCwgMHg2MDBhLCAweDYwMWYsIDB4MDAwNiwKLQkweDYwMDMsIDB4MDAwNywgMHg2MDE3LCAweDAwMDAsIDB4NjAzZiwgMHgwMDAwLCAweDAwZGUsIDB4MDAzZSwKLQkweDAwMzgsIDB4NjAzZiwgMHgwMDAwLCAweDYwMDMsIDB4MDAwNywgMHgwODBjLCAweGEzZGUsIDB4MDBjZSwKLQkweDAwZGUsIDB4MDAwNSwgMHhhMTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweGEwODIsIDB4MDA4NSwKLQkweDIwMDgsIDB4MDBjMiwgMHhhMTg2LCAweDAwMjcsIDB4MTE3OCwgMHgwODBjLCAweDZiNzMsIDB4MDAzNiwKLQkweDAwZDYsIDB4NjAxMCwgMHgyMDY4LCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGE5MWYsIDB4MDBkZSwKLQkweDAwM2UsIDB4MDgwYywgMHg2YzUwLCAweDAwMDUsIDB4YTE4NiwgMHgwMDE0LCAweDBkNzAsIDB4MDgwYywKLQkweDgwYmUsIDB4MDAwNSwgMHhhYjEzLCAweGFiMTEsIDB4YWIxMSwgMHhhYjExLCAweGFiMTEsIDB4YWIxMSwKLQkweGFiMTMsIDB4MDgwYywgMHgxNGY2LCAweDA4MGMsIDB4NmI3MywgMHg2MDAzLCAweDAwMGMsIDB4MDgwYywKLQkweDZjNTAsIDB4MDAwNSwgMHhhMTgyLCAweDAwOGMsIDB4MTIyMCwgMHhhMTgyLCAweDAwODUsIDB4MDIwOCwKLQkweDAwMWEsIDB4MDgwYywgMHg4MGJlLCAweDAwMDUsIDB4YWIyYiwgMHhhYjJiLCAweGFiMmIsIDB4YWIyYiwKLQkweGFiMmQsIDB4YWI0YiwgMHhhYjJiLCAweDA4MGMsIDB4MTRmNiwgMHgwMGQ2LCAweDJjNjgsIDB4MDgwYywKLQkweDgwMjIsIDB4MDFhMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDIwMDksIDB4YjI4ZSwKLQkweDIxMGMsIDB4NjEzNiwgMHgyMDA5LCAweGIyOGYsIDB4MjEwYywgMHg2MTNhLCAweDYwMGIsIDB4ZmZmZiwKLQkweDY5MTgsIDB4NjExYSwgMHg2MDFmLCAweDAwMDQsIDB4MDgwYywgMHg2N2E4LCAweDJkNjAsIDB4MDgwYywKLQkweDgwNzgsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4ODA3OCwgMHgwMDA1LCAweDAwZTYsIDB4NjAxOCwKLQkweDIwNzAsIDB4NzAwMCwgMHhkMGVjLCAweDAwZWUsIDB4MDAwNSwgMHg2MDEwLCAweGEwODAsIDB4MDAxMywKLQkweDIwMGMsIDB4ZDFlYywgMHgwNWQwLCAweDIwMDEsIDB4YWQ3MSwgMHgyMDA0LCAweGQwZWMsIDB4MDVhOCwKLQkweDYwMDMsIDB4MDAwMiwgMHg2MDIwLCAweGMwZTUsIDB4NjAyMiwgMHhkMWFjLCAweDAxODAsIDB4MDBmNiwKLQkweDJjNzgsIDB4MDgwYywgMHg1MDI1LCAweDAwZmUsIDB4MDE1MCwgMHgyMDAxLCAweGFmYTUsIDB4MjAwNCwKLQkweDYwM2UsIDB4MjAwOSwgMHhhZDcxLCAweDIxMGMsIDB4ZDFmNCwgMHgxMWU4LCAweDAwODAsIDB4MjAwOSwKLQkweGFkNzEsIDB4MjEwYywgMHhkMWY0LCAweDAxMjgsIDB4NjAyMCwgMHhjMGU0LCAweDYwMjIsIDB4YTAwNiwKLQkweDAwYTAsIDB4MjAwMSwgMHhhZmE1LCAweDIwMGMsIDB4ODEwMywgMHhhMTAwLCAweDYwM2UsIDB4NjAxOCwKLQkweGEwODgsIDB4MDAyYiwgMHgyMTA0LCAweGEwMDUsIDB4MDExOCwgMHhhMDg4LCAweDAwMDMsIDB4MGNkMCwKLQkweDJjMGEsIDB4NjAwZiwgMHgwMDAwLCAweGEwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwKLQkweDAwZTYsIDB4NjE1MCwgMHhhMmYwLCAweDAwMmIsIDB4MmUwNCwgMHgyMDYwLCAweDhjZmYsIDB4MDE4MCwKLQkweDg0ZmYsIDB4MTExOCwgMHg2MDUwLCAweGExMDYsIDB4MTEzOCwgMHg2MDBjLCAweDIwNzIsIDB4MDgwYywKLQkweDY2MTgsIDB4MDgwYywgMHg4MDc4LCAweDAwMTAsIDB4YWNmMCwgMHgwMDAzLCAweDJlNjQsIDB4MGM3MCwKLQkweDAwZWUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHg2MDE4LCAweGEwZTgsIDB4MDAyYiwKLQkweDJkMDQsIDB4YTAwNSwgMHgwMTQwLCAweGFjMDYsIDB4MDEyMCwgMHgyZDA0LCAweGEwZTgsIDB4MDAwMywKLQkweDBjYjgsIDB4NjAwYywgMHgyMDZhLCAweDAwZGUsIDB4MDAwNSwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwKLQkweDIwMTEsIDB4YWQyNywgMHgyMjA0LCAweGEwODQsIDB4MDBmZiwgMHgyMDE5LCAweGIyOGUsIDB4MjMzNCwKLQkweGE2MzYsIDB4MTFkOCwgMHg4MzE4LCAweDIzMzQsIDB4MjIwNCwgMHhhMDg0LCAweGZmMDAsIDB4YTYzNiwKLQkweDExYTAsIDB4MjAxMSwgMHhiMjkwLCAweDYwMTgsIDB4YTA5OCwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwKLQkweDA4MGMsIDB4OGE3YywgMHgxMTUwLCAweDIwMTEsIDB4YjI5NCwgMHg2MDE4LCAweGEwOTgsIDB4MDAwNiwKLQkweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweDhhN2MsIDB4MTEwMCwgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwKLQkweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGFkMDAsIDB4MDgwYywgMHg0OGY1LCAweDA4MGMsIDB4MjhmYSwKLQkweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDYwMTgsIDB4MjA3MCwgMHg3MDAwLCAweGQwZmMsIDB4MDEwOCwKLQkweDAwMTEsIDB4MDBlZSwgMHgwMDA1LCAweDY4NTAsIDB4YzBlNSwgMHg2ODUyLCAweDAwMDUsIDB4MDBlNiwKLQkweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LCAweDAwMTYsIDB4MDEyNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweGFmZDAsIDB4MjUyYywgMHgyMDIxLCAweGFmZDYsIDB4MjQyNCwKLQkweDIwNjEsIDB4YjQwMCwgMHgyMDcxLCAweGFkMDAsIDB4NzY0NCwgMHg3MDY0LCAweGE2MDYsIDB4MDU3OCwKLQkweDY3MWMsIDB4YTc4NiwgMHgwMDAxLCAweDAxMTgsIDB4YTc4NiwgMHgwMDA4LCAweDE1MDAsIDB4MjUwMCwKLQkweGFjMDYsIDB4MDFlOCwgMHgyNDAwLCAweGFjMDYsIDB4MDFkMCwgMHgwODBjLCAweGE5OTAsIDB4MDFiOCwKLQkweDA4MGMsIDB4YTlhMCwgMHgxMWEwLCAweDYwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDExMjAsIDB4MDAxNiwKLQkweDA4MGMsIDB4MTkwYiwgMHgwMDFlLCAweDA4MGMsIDB4OTc3OCwgMHgxMTEwLCAweDA4MGMsIDB4MmFmZiwKLQkweDA4MGMsIDB4OTc4OSwgMHgxMTEwLCAweDA4MGMsIDB4ODVmMywgMHgwODBjLCAweDk3NGUsIDB4YWNlMCwKLQkweDAwMTgsIDB4MjAwMSwgMHhhZDE2LCAweDIwMDQsIDB4YWMwMiwgMHgxMjA4LCAweDA4NTgsIDB4MDEyZSwKLQkweDAwMWUsIDB4MDAyZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwY2UsIDB4MDBlZSwKLQkweDAwMDUsIDB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4YWQ0MCwKLQkweGQ1YTQsIDB4MDExOCwgMHg3MDM0LCAweDgwMDAsIDB4NzAzNiwgMHhkNWI0LCAweDAxMTgsIDB4NzAzMCwKLQkweDgwMDAsIDB4NzAzMiwgMHhkNWFjLCAweDAxMTgsIDB4MjA3MSwgMHhhZDRhLCAweDA0NTEsIDB4MDBlZSwKLQkweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAwNiwgMHgwMGU2LCAweDIwOTEsIDB4ODAwMCwKLQkweDIwNzEsIDB4YWQ0MCwgMHhkNWE0LCAweDAxMTgsIDB4NzAzNCwgMHg4MDAwLCAweDcwMzYsIDB4ZDViNCwKLQkweDAxMTgsIDB4NzAzMCwgMHg4MDAwLCAweDcwMzIsIDB4ZDVhYywgMHgwMTE4LCAweDIwNzEsIDB4YWQ0YSwKLQkweDAwODEsIDB4MDBlZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGFkNDIsIDB4MDAyMSwgMHgwMGVlLCAweDAwMGUsIDB4MDEyZSwKLQkweDAwMDUsIDB4MmUwNCwgMHg4MDAwLCAweDIwNzIsIDB4MTIyMCwgMHg4ZTcwLCAweDJlMDQsIDB4ODAwMCwKLQkweDIwNzIsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4YWQ0MCwgMHgwYzk5LCAweDAwZWUsIDB4MDAwNSwKLQkweDAwZTYsIDB4MjA3MSwgMHhhZDQ0LCAweDBjNjksIDB4MDBlZSwgMHgwMDA1LCAweDAwMDEsIDB4MDAwMiwKLQkweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLCAweDAxMDAsIDB4MDIwMCwKLQkweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMCwgMHg4MDAwLCAweDg1MjkKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCmluZGV4IGZhOTAxZmQuLmYxNmY5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX212IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC43IgogCiBlbnVtIHsKIAkvKiBCQVIncyBhcmUgZW51bWVyYXRlZCBpbiB0ZXJtcyBvZiBwY2lfcmVzb3VyY2Vfc3RhcnQoKSB0ZXJtcyAqLwpAQCAtNTAsNiArNTAsMTIgQEAKIAogCU1WX1BDSV9SRUdfQkFTRQkJPSAwLAogCU1WX0lSUV9DT0FMX1JFR19CQVNFCT0gMHgxODAwMCwJLyogNnh4eCBwYXJ0IG9ubHkgKi8KKwlNVl9JUlFfQ09BTF9DQVVTRQkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweDA4KSwKKwlNVl9JUlFfQ09BTF9DQVVTRV9MTwkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweDg4KSwKKwlNVl9JUlFfQ09BTF9DQVVTRV9ISQkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweDhjKSwKKwlNVl9JUlFfQ09BTF9USFJFU0hPTEQJCT0gKE1WX0lSUV9DT0FMX1JFR19CQVNFICsgMHhjYyksCisJTVZfSVJRX0NPQUxfVElNRV9USFJFU0hPTEQJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGQwKSwKKwogCU1WX1NBVEFIQzBfUkVHX0JBU0UJPSAweDIwMDAwLAogCU1WX0ZMQVNIX0NUTAkJPSAweDEwNDZjLAogCU1WX0dQSU9fUE9SVF9DVEwJPSAweDEwNGYwLApAQCAtMzAyLDkgKzMwOCw2IEBACiAJZG1hX2FkZHJfdAkJY3JwYl9kbWE7CiAJc3RydWN0IG12X3NnCQkqc2dfdGJsOwogCWRtYV9hZGRyX3QJCXNnX3RibF9kbWE7Ci0KLQl1bnNpZ25lZAkJcmVxX3Byb2R1Y2VyOwkJLyogY3Agb2YgcmVxX2luX3B0ciAqLwotCXVuc2lnbmVkCQlyc3BfY29uc3VtZXI7CQkvKiBjcCBvZiByc3Bfb3V0X3B0ciAqLwogCXUzMgkJCXBwX2ZsYWdzOwogfTsKIApAQCAtMzc4LDcgKzM4MSw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gTVZfVVNFX1FfREVQVEgsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTVZfTUFYX1NHX0NUIC8gMiwKQEAgLTc0OCw3ICs3NTAsNyBAQAogCW12X2R1bXBfbWVtKG1taW9fYmFzZSsweGYwMCwgMHg0KTsKIAltdl9kdW1wX21lbShtbWlvX2Jhc2UrMHgxZDAwLCAweDZjKTsKIAlmb3IgKGhjID0gc3RhcnRfaGM7IGhjIDwgc3RhcnRfaGMgKyBudW1faGNzOyBoYysrKSB7Ci0JCWhjX2Jhc2UgPSBtdl9oY19iYXNlKG1taW9fYmFzZSwgcG9ydCA+PiBNVl9QT1JUX0hDX1NISUZUKTsKKwkJaGNfYmFzZSA9IG12X2hjX2Jhc2UobW1pb19iYXNlLCBoYyk7CiAJCURQUklOVEsoIkhDIHJlZ3MgKEhDICVpKTpcbiIsIGhjKTsKIAkJbXZfZHVtcF9tZW0oaGNfYmFzZSwgMHgxYyk7CiAJfQpAQCAtOTM4LDggKzk0MCw2IEBACiAJd3JpdGVsZmwocHAtPmNycGJfZG1hICYgRURNQV9SU1BfUV9CQVNFX0xPX01BU0ssCiAJCSBwb3J0X21taW8gKyBFRE1BX1JTUF9RX09VVF9QVFJfT0ZTKTsKIAotCXBwLT5yZXFfcHJvZHVjZXIgPSBwcC0+cnNwX2NvbnN1bWVyID0gMDsKLQogCS8qIERvbid0IHR1cm4gb24gRURNQSBoZXJlLi4uZG8gaXQgYmVmb3JlIERNQSBjb21tYW5kcyBvbmx5LiAgRWxzZQogCSAqIHdlJ2xsIGJlIHVuYWJsZSB0byBzZW5kIG5vbi1kYXRhLCBQSU8sIGV0YyBkdWUgdG8gcmVzdHJpY3RlZCBhY2Nlc3MKIAkgKiB0byBzaGFkb3cgcmVncy4KQEAgLTEwMjMsMTYgKzEwMjMsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXZfaW5jX3FfaW5kZXgodW5zaWduZWQgKmluZGV4KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBtdl9pbmNfcV9pbmRleCh1bnNpZ25lZCBpbmRleCkKIHsKLQkqaW5kZXggPSAoKmluZGV4ICsgMSkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLOwotCXJldHVybiAqaW5kZXg7CisJcmV0dXJuIChpbmRleCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG12X2NycWJfcGFja19jbWQodTE2ICpjbWR3LCB1OCBkYXRhLCB1OCBhZGRyLCB1bnNpZ25lZCBsYXN0KQogewotCSpjbWR3ID0gZGF0YSB8IChhZGRyIDw8IENSUUJfQ01EX0FERFJfU0hJRlQpIHwgQ1JRQl9DTURfQ1MgfAorCXUxNiB0bXAgPSBkYXRhIHwgKGFkZHIgPDwgQ1JRQl9DTURfQUREUl9TSElGVCkgfCBDUlFCX0NNRF9DUyB8CiAJCShsYXN0ID8gQ1JRQl9DTURfTEFTVCA6IDApOworCSpjbWR3ID0gY3B1X3RvX2xlMTYodG1wKTsKIH0KIAogLyoqCkBAIC0xMDU0LDE1ICsxMDU0LDExIEBACiAJdTE2ICpjdzsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZjsKIAl1MTYgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGluX2luZGV4OwogCiAgCWlmIChBVEFfUFJPVF9ETUEgIT0gcWMtPnRmLnByb3RvY29sKQogCQlyZXR1cm47CiAKLQkvKiB0aGUgcmVxIHByb2R1Y2VyIGluZGV4IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSByZW1lbWJlciBpdCAqLwotCVdBUk5fT04oKChyZWFkbChtdl9hcF9iYXNlKHFjLT5hcCkgKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpID4+Ci0JCSAgRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KLQkJcHAtPnJlcV9wcm9kdWNlcik7Ci0KIAkvKiBGaWxsIGluIGNvbW1hbmQgcmVxdWVzdCBibG9jawogCSAqLwogCWlmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpCkBAIC0xMDcwLDEzICsxMDY2LDE3IEBACiAJV0FSTl9PTihNVl9NQVhfUV9ERVBUSCA8PSBxYy0+dGFnKTsKIAlmbGFncyB8PSBxYy0+dGFnIDw8IENSUUJfVEFHX1NISUZUOwogCi0JcHAtPmNycWJbcHAtPnJlcV9wcm9kdWNlcl0uc2dfYWRkciA9Ci0JCWNwdV90b19sZTMyKHBwLT5zZ190YmxfZG1hICYgMHhmZmZmZmZmZik7Ci0JcHAtPmNycWJbcHAtPnJlcV9wcm9kdWNlcl0uc2dfYWRkcl9oaSA9Ci0JCWNwdV90b19sZTMyKChwcC0+c2dfdGJsX2RtYSA+PiAxNikgPj4gMTYpOwotCXBwLT5jcnFiW3BwLT5yZXFfcHJvZHVjZXJdLmN0cmxfZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7CisJLyogZ2V0IGN1cnJlbnQgcXVldWUgaW5kZXggZnJvbSBoYXJkd2FyZSAqLworCWluX2luZGV4ID0gKHJlYWRsKG12X2FwX2Jhc2UoYXApICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKQorCQkJPj4gRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKIAotCWN3ID0gJnBwLT5jcnFiW3BwLT5yZXFfcHJvZHVjZXJdLmF0YV9jbWRbMF07CisJcHAtPmNycWJbaW5faW5kZXhdLnNnX2FkZHIgPQorCQljcHVfdG9fbGUzMihwcC0+c2dfdGJsX2RtYSAmIDB4ZmZmZmZmZmYpOworCXBwLT5jcnFiW2luX2luZGV4XS5zZ19hZGRyX2hpID0KKwkJY3B1X3RvX2xlMzIoKHBwLT5zZ190YmxfZG1hID4+IDE2KSA+PiAxNik7CisJcHAtPmNycWJbaW5faW5kZXhdLmN0cmxfZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7CisKKwljdyA9ICZwcC0+Y3JxYltpbl9pbmRleF0uYXRhX2NtZFswXTsKIAl0ZiA9ICZxYy0+dGY7CiAKIAkvKiBTYWRseSwgdGhlIENSUUIgY2Fubm90IGFjY29tb2RhdGUgYWxsIHJlZ2lzdGVycy0tdGhlcmUgYXJlCkBAIC0xMTQ1LDE2ICsxMTQ1LDEyIEBACiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBtdl9jcnFiX2lpZSAqY3JxYjsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZjsKKwl1bnNpZ25lZCBpbl9pbmRleDsKIAl1MzIgZmxhZ3MgPSAwOwogCiAgCWlmIChBVEFfUFJPVF9ETUEgIT0gcWMtPnRmLnByb3RvY29sKQogCQlyZXR1cm47CiAKLQkvKiB0aGUgcmVxIHByb2R1Y2VyIGluZGV4IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSByZW1lbWJlciBpdCAqLwotCVdBUk5fT04oKChyZWFkbChtdl9hcF9iYXNlKHFjLT5hcCkgKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpID4+Ci0JCSAgRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KLQkJcHAtPnJlcV9wcm9kdWNlcik7Ci0KIAkvKiBGaWxsIGluIEdlbiBJSUUgY29tbWFuZCByZXF1ZXN0IGJsb2NrCiAJICovCiAJaWYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSkKQEAgLTExNjMsNyArMTE1OSwxMSBAQAogCVdBUk5fT04oTVZfTUFYX1FfREVQVEggPD0gcWMtPnRhZyk7CiAJZmxhZ3MgfD0gcWMtPnRhZyA8PCBDUlFCX1RBR19TSElGVDsKIAotCWNycWIgPSAoc3RydWN0IG12X2NycWJfaWllICopICZwcC0+Y3JxYltwcC0+cmVxX3Byb2R1Y2VyXTsKKwkvKiBnZXQgY3VycmVudCBxdWV1ZSBpbmRleCBmcm9tIGhhcmR3YXJlICovCisJaW5faW5kZXggPSAocmVhZGwobXZfYXBfYmFzZShhcCkgKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpCisJCQk+PiBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLOworCisJY3JxYiA9IChzdHJ1Y3QgbXZfY3JxYl9paWUgKikgJnBwLT5jcnFiW2luX2luZGV4XTsKIAljcnFiLT5hZGRyID0gY3B1X3RvX2xlMzIocHAtPnNnX3RibF9kbWEgJiAweGZmZmZmZmZmKTsKIAljcnFiLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoKHBwLT5zZ190YmxfZG1hID4+IDE2KSA+PiAxNik7CiAJY3JxYi0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CkBAIC0xMjExLDYgKzEyMTEsNyBAQAogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShxYy0+YXApOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW5faW5kZXg7CiAJdTMyIGluX3B0cjsKIAogCWlmIChBVEFfUFJPVF9ETUEgIT0gcWMtPnRmLnByb3RvY29sKSB7CkBAIC0xMjIyLDIzICsxMjIzLDIwIEBACiAJCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CiAJfQogCi0JaW5fcHRyID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKTsKKwlpbl9wdHIgICA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7CisJaW5faW5kZXggPSAoaW5fcHRyID4+IEVETUFfUkVRX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0s7CiAKLQkvKiB0aGUgcmVxIHByb2R1Y2VyIGluZGV4IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSByZW1lbWJlciBpdCAqLwotCVdBUk5fT04oKChpbl9wdHIgPj4gRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KLQkJcHAtPnJlcV9wcm9kdWNlcik7CiAJLyogdW50aWwgd2UgZG8gcXVldWluZywgdGhlIHF1ZXVlIHNob3VsZCBiZSBlbXB0eSBhdCB0aGlzIHBvaW50ICovCi0JV0FSTl9PTigoKGluX3B0ciA+PiBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQotCQkoKHJlYWRsKHBvcnRfbW1pbyArIEVETUFfUkVRX1FfT1VUX1BUUl9PRlMpID4+Ci0JCSAgRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykpOworCVdBUk5fT04oaW5faW5kZXggIT0gKChyZWFkbChwb3J0X21taW8gKyBFRE1BX1JFUV9RX09VVF9QVFJfT0ZTKQorCQk+PiBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSk7CiAKLQltdl9pbmNfcV9pbmRleCgmcHAtPnJlcV9wcm9kdWNlcik7CS8qIG5vdyBpbmNyIHByb2R1Y2VyIGluZGV4ICovCisJaW5faW5kZXggPSBtdl9pbmNfcV9pbmRleChpbl9pbmRleCk7CS8qIG5vdyBpbmNyIHByb2R1Y2VyIGluZGV4ICovCiAKIAltdl9zdGFydF9kbWEocG9ydF9tbWlvLCBwcCk7CiAKIAkvKiBhbmQgd3JpdGUgdGhlIHJlcXVlc3QgaW4gcG9pbnRlciB0byBraWNrIHRoZSBFRE1BIHRvIGxpZmUgKi8KIAlpbl9wdHIgJj0gRURNQV9SRVFfUV9CQVNFX0xPX01BU0s7Ci0JaW5fcHRyIHw9IHBwLT5yZXFfcHJvZHVjZXIgPDwgRURNQV9SRVFfUV9QVFJfU0hJRlQ7CisJaW5fcHRyIHw9IGluX2luZGV4IDw8IEVETUFfUkVRX1FfUFRSX1NISUZUOwogCXdyaXRlbGZsKGluX3B0ciwgcG9ydF9tbWlvICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKTsKIAogCXJldHVybiAwOwpAQCAtMTI2MSwyOCArMTI1OSwyNiBAQAogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIG91dF9pbmRleDsKIAl1MzIgb3V0X3B0cjsKIAl1OCBhdGFfc3RhdHVzOwogCi0Jb3V0X3B0ciA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOworCW91dF9wdHIgICA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOworCW91dF9pbmRleCA9IChvdXRfcHRyID4+IEVETUFfUlNQX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0s7CiAKLQkvKiB0aGUgcmVzcG9uc2UgY29uc3VtZXIgaW5kZXggc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdlIHJlbWVtYmVyIGl0ICovCi0JV0FSTl9PTigoKG91dF9wdHIgPj4gRURNQV9SU1BfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KLQkJcHAtPnJzcF9jb25zdW1lcik7Ci0KLQlhdGFfc3RhdHVzID0gcHAtPmNycGJbcHAtPnJzcF9jb25zdW1lcl0uZmxhZ3MgPj4gQ1JQQl9GTEFHX1NUQVRVU19TSElGVDsKKwlhdGFfc3RhdHVzID0gbGUxNl90b19jcHUocHAtPmNycGJbb3V0X2luZGV4XS5mbGFncykKKwkJCQkJPj4gQ1JQQl9GTEFHX1NUQVRVU19TSElGVDsKIAogCS8qIGluY3JlbWVudCBvdXIgY29uc3VtZXIgaW5kZXguLi4gKi8KLQlwcC0+cnNwX2NvbnN1bWVyID0gbXZfaW5jX3FfaW5kZXgoJnBwLT5yc3BfY29uc3VtZXIpOworCW91dF9pbmRleCA9IG12X2luY19xX2luZGV4KG91dF9pbmRleCk7CiAKIAkvKiBhbmQsIHVudGlsIHdlIGRvIE5DUSwgdGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBDUlBCIHdhaXRpbmcgKi8KLQlXQVJOX09OKCgocmVhZGwocG9ydF9tbWlvICsgRURNQV9SU1BfUV9JTl9QVFJfT0ZTKSA+PgotCQkgIEVETUFfUlNQX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spICE9Ci0JCXBwLT5yc3BfY29uc3VtZXIpOworCVdBUk5fT04ob3V0X2luZGV4ICE9ICgocmVhZGwocG9ydF9tbWlvICsgRURNQV9SU1BfUV9JTl9QVFJfT0ZTKQorCQk+PiBFRE1BX1JTUF9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSk7CiAKIAkvKiB3cml0ZSBvdXQgb3VyIGluYydkIGNvbnN1bWVyIGluZGV4IHNvIEVETUEga25vd3Mgd2UncmUgY2F1Z2h0IHVwICovCiAJb3V0X3B0ciAmPSBFRE1BX1JTUF9RX0JBU0VfTE9fTUFTSzsKLQlvdXRfcHRyIHw9IHBwLT5yc3BfY29uc3VtZXIgPDwgRURNQV9SU1BfUV9QVFJfU0hJRlQ7CisJb3V0X3B0ciB8PSBvdXRfaW5kZXggPDwgRURNQV9SU1BfUV9QVFJfU0hJRlQ7CiAJd3JpdGVsZmwob3V0X3B0ciwgcG9ydF9tbWlvICsgRURNQV9SU1BfUV9PVVRfUFRSX09GUyk7CiAKIAkvKiBSZXR1cm4gQVRBIHN0YXR1cyByZWdpc3RlciBmb3IgY29tcGxldGVkIENSUEIgKi8KQEAgLTEyOTIsNiArMTI4OCw3IEBACiAvKioKICAqICAgICAgbXZfZXJyX2ludHIgLSBIYW5kbGUgZXJyb3IgaW50ZXJydXB0cyBvbiB0aGUgcG9ydAogICogICAgICBAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKKyAqICAgICAgQHJlc2V0X2FsbG93ZWQ6IGJvb2w6IDAgPT0gZG9uJ3QgdHJpZ2dlciBmcm9tIHJlc2V0IGhlcmUKICAqCiAgKiAgICAgIEluIG1vc3QgY2FzZXMsIGp1c3QgY2xlYXIgdGhlIGludGVycnVwdCBhbmQgbW92ZSBvbi4gIEhvd2V2ZXIsCiAgKiAgICAgIHNvbWUgY2FzZXMgcmVxdWlyZSBhbiBlRE1BIHJlc2V0LCB3aGljaCBpcyBkb25lIHJpZ2h0IGJlZm9yZQpAQCAtMTMwMiw3ICsxMjk5LDcgQEAKICAqICAgICAgTE9DS0lORzoKICAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgogICovCi1zdGF0aWMgdm9pZCBtdl9lcnJfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIHZvaWQgbXZfZXJyX2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHJlc2V0X2FsbG93ZWQpCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAl1MzIgZWRtYV9lcnJfY2F1c2UsIHNlcnIgPSAwOwpAQCAtMTMyNCw5ICsxMzIxLDggQEAKIAl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBFRE1BX0VSUl9JUlFfQ0FVU0VfT0ZTKTsKIAogCS8qIGNoZWNrIGZvciBmYXRhbCBoZXJlIGFuZCByZWNvdmVyIGlmIG5lZWRlZCAqLwotCWlmIChFRE1BX0VSUl9GQVRBTCAmIGVkbWFfZXJyX2NhdXNlKSB7CisJaWYgKHJlc2V0X2FsbG93ZWQgJiYgKEVETUFfRVJSX0ZBVEFMICYgZWRtYV9lcnJfY2F1c2UpKQogCQltdl9zdG9wX2FuZF9yZXNldChhcCk7Ci0JfQogfQogCiAvKioKQEAgLTEzNzUsMTIgKzEzNzEsMTIgQEAKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3Rfc2V0LT5wb3J0c1twb3J0XTsKIAkJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCi0JCWhhcmRfcG9ydCA9IHBvcnQgJiBNVl9QT1JUX01BU0s7CS8qIHJhbmdlIDAtMyAqLworCQloYXJkX3BvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQocG9ydCk7IC8qIHJhbmdlIDAuLjMgKi8KIAkJaGFuZGxlZCA9IDA7CS8qIGVuc3VyZSBhdGFfc3RhdHVzIGlzIHNldCBpZiBoYW5kbGVkKysgKi8KIAogCQkvKiBOb3RlIHRoYXQgREVWX0lSUSBtaWdodCBoYXBwZW4gc3B1cmlvdXNseSBkdXJpbmcgRURNQSwKLQkJICogYW5kIHNob3VsZCBiZSBpZ25vcmVkIGluIHN1Y2ggY2FzZXMuICBXZSBjb3VsZCBtYXNrIGl0LAotCQkgKiBidXQgaXQncyBwcmV0dHkgcmFyZSBhbmQgbWF5IG5vdCBiZSB3b3J0aCB0aGUgb3ZlcmhlYWQuCisJCSAqIGFuZCBzaG91bGQgYmUgaWdub3JlZCBpbiBzdWNoIGNhc2VzLgorCQkgKiBUaGUgY2F1c2Ugb2YgdGhpcyBpcyBzdGlsbCB1bmRlciBpbnZlc3RpZ2F0aW9uLgogCQkgKi8gCiAJCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0VETUFfRU4pIHsKIAkJCS8qIEVETUE6IGNoZWNrIGZvciByZXNwb25zZSBxdWV1ZSBpbnRlcnJ1cHQgKi8KQEAgLTEzOTQsNiArMTM5MCwxMSBAQAogCQkJCWF0YV9zdGF0dXMgPSByZWFkYigodm9pZCBfX2lvbWVtICopCiAJCQkJCSAgIGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOwogCQkJCWhhbmRsZWQgPSAxOworCQkJCS8qIGlnbm9yZSBzcHVyaW91cyBpbnRyIGlmIGRyaXZlIHN0aWxsIEJVU1kgKi8KKwkJCQlpZiAoYXRhX3N0YXR1cyAmIEFUQV9CVVNZKSB7CisJCQkJCWF0YV9zdGF0dXMgPSAwOworCQkJCQloYW5kbGVkID0gMDsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTQwNyw3ICsxNDA4LDcgQEAKIAkJCXNoaWZ0Kys7CS8qIHNraXAgYml0IDggaW4gdGhlIEhDIE1haW4gSVJRIHJlZyAqLwogCQl9CiAJCWlmICgoUE9SVDBfRVJSIDw8IHNoaWZ0KSAmIHJlbGV2YW50KSB7Ci0JCQltdl9lcnJfaW50cihhcCk7CisJCQltdl9lcnJfaW50cihhcCwgMSk7CiAJCQllcnJfbWFzayB8PSBBQ19FUlJfT1RIRVI7CiAJCQloYW5kbGVkID0gMTsKIAkJfQpAQCAtMTQ0OSw2ICsxNDUwLDcgQEAKIAlzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCA9IGRldl9pbnN0YW5jZTsKIAl1bnNpZ25lZCBpbnQgaGMsIGhhbmRsZWQgPSAwLCBuX2hjczsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBob3N0X3NldC0+bW1pb19iYXNlOworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2OwogCXUzMiBpcnFfc3RhdDsKIAogCWlycV9zdGF0ID0gcmVhZGwobW1pbyArIEhDX01BSU5fSVJRX0NBVVNFX09GUyk7CkBAIC0xNDcwLDYgKzE0NzIsMTcgQEAKIAkJCWhhbmRsZWQrKzsKIAkJfQogCX0KKworCWhwcml2ID0gaG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKKwlpZiAoSVNfNjBYWChocHJpdikpIHsKKwkJLyogZGVhbCB3aXRoIHRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBiaXRzICovCisJCWlmIChpcnFfc3RhdCAmIChUUkFOX0xPX0RPTkUgfCBUUkFOX0hJX0RPTkUgfCBQT1JUU18wXzdfQ09BTF9ET05FKSkgeworCQkJd3JpdGVsZmwoMCwgbW1pbyArIE1WX0lSUV9DT0FMX0NBVVNFX0xPKTsKKwkJCXdyaXRlbGZsKDAsIG1taW8gKyBNVl9JUlFfQ09BTF9DQVVTRV9ISSk7CisJCQl3cml0ZWxmbCgwLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCQl9CisJfQorCiAJaWYgKFBDSV9FUlIgJiBpcnFfc3RhdCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogUENJIEVSUk9SOyBQQ0kgSVJRIGNhdXNlPTB4JTA4eFxuIiwKIAkJICAgICAgIHJlYWRsKG1taW8gKyBQQ0lfSVJRX0NBVVNFX09GUykpOwpAQCAtMTg2OCw3ICsxODgxLDggQEAKIAogCWlmIChJU182MFhYKGhwcml2KSkgewogCQl1MzIgaWZjdGwgPSByZWFkbChwb3J0X21taW8gKyBTQVRBX0lOVEVSRkFDRV9DVEwpOwotCQlpZmN0bCB8PSAoMSA8PCAxMikgfCAoMSA8PCA3KTsKKwkJaWZjdGwgfD0gKDEgPDwgNyk7CQkvKiBlbmFibGUgZ2VuMmkgc3BlZWQgKi8KKwkJaWZjdGwgPSAoaWZjdGwgJiAweGZmZikgfCAweDliMTAwMDsgLyogZnJvbSBjaGlwIHNwZWMgKi8KIAkJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSU5URVJGQUNFX0NUTCk7CiAJfQogCkBAIC0yMDIxLDYgKzIwMzUsNyBAQAogc3RhdGljIHZvaWQgbXZfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBFbnRlcmluZyBtdl9lbmdfdGltZW91dFxuIixhcC0+aWQpOwogCURQUklOVEsoIkFsbCByZWdzIEAgc3RhcnQgb2YgZW5nX3RpbWVvdXRcbiIpOwpAQCAtMjAzMiwxMSArMjA0NywxNiBAQAogCSAgICAgICBhcC0+aG9zdF9zZXQtPm1taW9fYmFzZSwgYXAsIHFjLCBxYy0+c2NzaWNtZCwKIAkgICAgICAgJnFjLT5zY3NpY21kLT5jbW5kKTsKIAotCW12X2Vycl9pbnRyKGFwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisJbXZfZXJyX2ludHIoYXAsIDApOwogCW12X3N0b3BfYW5kX3Jlc2V0KGFwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAotCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfVElNRU9VVDsKLQlhdGFfZWhfcWNfY29tcGxldGUocWMpOworCVdBUk5fT04oIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpOworCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkgeworCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX1RJTUVPVVQ7CisJCWF0YV9laF9xY19jb21wbGV0ZShxYyk7CisJfQogfQogCiAvKioKQEAgLTIyMzAsNyArMjI1MCw4IEBACiAJCQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X3BvcnRfYmFzZShtbWlvLCBwb3J0KTsKIAogCQkJdTMyIGlmY3RsID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JTlRFUkZBQ0VfQ1RMKTsKLQkJCWlmY3RsIHw9ICgxIDw8IDEyKTsKKwkJCWlmY3RsIHw9ICgxIDw8IDcpOwkJLyogZW5hYmxlIGdlbjJpIHNwZWVkICovCisJCQlpZmN0bCA9IChpZmN0bCAmIDB4ZmZmKSB8IDB4OWIxMDAwOyAvKiBmcm9tIGNoaXAgc3BlYyAqLwogCQkJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSU5URVJGQUNFX0NUTCk7CiAJCX0KIApAQCAtMjMzMSw2ICsyMzUyLDcgQEAKIAlpZiAocmMpIHsKIAkJcmV0dXJuIHJjOwogCX0KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKHJjKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwppbmRleCBmNzdiZjE4Li45ZjU1MzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKQEAgLTIwMSw3ICsyMDEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKaW5kZXggY2M5MjhjNi4uN2ViNjdhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwpAQCAtMTExLDcgKzExMSw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCmluZGV4IDlmZmUxZWYuLjg4NmYzNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwpAQCAtMTMyLDcgKzEzMiw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBRU19NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYwppbmRleCAxOGMyOTZjLi4xMDY2MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCmluZGV4IDA2OGM5OGEuLmNiOTA4MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwpAQCAtMjgxLDcgKzI4MSw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKQEAgLTQ1NSw3ICs0NTQsNyBAQAogCSAqLwogCW1zbGVlcCgxMCk7CiAKLQlwcmItPmN0cmwgPSBQUkJfQ1RSTF9TUlNUOworCXByYi0+Y3RybCA9IGNwdV90b19sZTE2KFBSQl9DVFJMX1NSU1QpOwogCXByYi0+ZmlzWzFdID0gMDsgLyogbm8gUE0geWV0ICovCiAKIAl3cml0ZWwoKHUzMilwYWRkciwgcG9ydCArIFBPUlRfQ01EX0FDVElWQVRFKTsKQEAgLTU1Miw5ICs1NTEsOSBAQAogCiAJCWlmIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfQVRBUElfTk9EQVRBKSB7CiAJCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKQotCQkJCXByYi0+Y3RybCA9IFBSQl9DVFJMX1BBQ0tFVF9XUklURTsKKwkJCQlwcmItPmN0cmwgPSBjcHVfdG9fbGUxNihQUkJfQ1RSTF9QQUNLRVRfV1JJVEUpOwogCQkJZWxzZQotCQkJCXByYi0+Y3RybCA9IFBSQl9DVFJMX1BBQ0tFVF9SRUFEOworCQkJCXByYi0+Y3RybCA9IGNwdV90b19sZTE2KFBSQl9DVFJMX1BBQ0tFVF9SRUFEKTsKIAkJfSBlbHNlCiAJCQlwcmItPmN0cmwgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCmluZGV4IGFjYzg0MzkuLjcyODUzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCkBAIC04Nyw3ICs4Nyw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKaW5kZXggNzI0ZjBlZC4uNTNiMGQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKQEAgLTI5MCw3ICsyOTAsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCmluZGV4IGFlNzBmNjAuLjQxMzlhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCkBAIC0xODIsNyArMTgyLDYgQEAKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKIAkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5laF9zdHJhdGVneV9oYW5kbGVyCT0gYXRhX3Njc2lfZXJyb3IsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwppbmRleCA3YWM1YTVmLi4zOGI1MmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwpAQCAtODEsNyArODEsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCmluZGV4IDc5MWJmNjUuLjllN2FlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCkBAIC05NCw3ICs5NCw2IEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCiAJLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuZWhfc3RyYXRlZ3lfaGFuZGxlcgk9IGF0YV9zY3NpX2Vycm9yLAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKaW5kZXggODM2YmJiYi4uOGEyOWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKQEAgLTI2Myw3ICsyNjMsNiBAQAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmVoX3N0cmF0ZWd5X2hhbmRsZXIJPSBhdGFfc2NzaV9lcnJvciwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCA2OTEzYjA2Li43Mzk5NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTU2NSw3ICs1NjUsOCBAQAogCS8qIAogCSAqIElmIFNDU0ktMiBvciBsb3dlciwgc3RvcmUgdGhlIExVTiB2YWx1ZSBpbiBjbW5kLgogCSAqLwotCWlmIChjbWQtPmRldmljZS0+c2NzaV9sZXZlbCA8PSBTQ1NJXzIpIHsKKwlpZiAoY21kLT5kZXZpY2UtPnNjc2lfbGV2ZWwgPD0gU0NTSV8yICYmCisJICAgIGNtZC0+ZGV2aWNlLT5zY3NpX2xldmVsICE9IFNDU0lfVU5LTk9XTikgewogCQljbWQtPmNtbmRbMV0gPSAoY21kLT5jbW5kWzFdICYgMHgxZikgfAogCQkJICAgICAgIChjbWQtPmRldmljZS0+bHVuIDw8IDUgJiAweGUwKTsKIAl9CkBAIC0xMjQzLDcgKzEyNDQsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBjbGVhbnVwX3N5c2N0bDsKIAotCWZvcl9lYWNoX2NwdShpKQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlJTklUX0xJU1RfSEVBRCgmcGVyX2NwdShzY3NpX2RvbmVfcSwgaSkpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJTQ1NJIHN1YnN5c3RlbSBpbml0aWFsaXplZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKaW5kZXggODRjMzkzNy4uNjJmOGNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwpAQCAtNTYsNiArNTYsOCBAQAogCXsiREVOT04iLCAiRFJELTI1WCIsICJWIiwgQkxJU1RfTk9MVU59LAkJCS8qIGxvY2tzIHVwICovCiAJeyJISVRBQ0hJIiwgIkRLMzEyQyIsICJDTTgxIiwgQkxJU1RfTk9MVU59LAkvKiByZXNwb25kcyB0byBhbGwgbHVuICovCiAJeyJISVRBQ0hJIiwgIkRLMzE0QyIsICJDUjIxIiwgQkxJU1RfTk9MVU59LAkvKiByZXNwb25kcyB0byBhbGwgbHVuICovCisJeyJJQk0iLCAiMjEwNC1EVTMiLCBOVUxMLCBCTElTVF9OT0xVTn0sCQkvKiBsb2NrcyB1cCAqLworCXsiSUJNIiwgIjIxMDQtVFUzIiwgTlVMTCwgQkxJU1RfTk9MVU59LAkJLyogbG9ja3MgdXAgKi8KIAl7IklNUyIsICJDREQ1MjEvMTAiLCAiMi4wNiIsIEJMSVNUX05PTFVOfSwJLyogbG9ja3MgdXAgKi8KIAl7Ik1BWFRPUiIsICJYVC0zMjgwIiwgIlBSMDIiLCBCTElTVF9OT0xVTn0sCS8qIGxvY2tzIHVwICovCiAJeyJNQVhUT1IiLCAiWFQtNDM4MFMiLCAiQjNDIiwgQkxJU1RfTk9MVU59LAkvKiBsb2NrcyB1cCAqLwpAQCAtMTMyLDcgKzEzNCw5IEBACiAJeyJDTUQiLCAiQ1JBLTcyODAiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU59LAkvKiBDTUQgUkFJRCBDb250cm9sbGVyICovCiAJeyJDTlNJIiwgIkc3MzI0IiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOfSwJLyogQ2hhcGFycmFsIEc3MzI0IFJBSUQgKi8KIAl7IkNOU2kiLCAiRzgzMjQiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU59LAkvKiBDaGFwYXJyYWwgRzgzMjQgUkFJRCAqLwotCXsiQ09NUEFRIiwgIkxPR0lDQUwgVk9MVU1FIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAorCXsiQ09NUEFRIiwgIkFSUkFZIENPTlRST0xMRVIiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9MQVJHRUxVTiB8CisJCUJMSVNUX01BWF81MTIgfCBCTElTVF9SRVBPUlRMVU4yfSwJLyogQ29tcGFxIFJBNHgwMCAqLworCXsiQ09NUEFRIiwgIkxPR0lDQUwgVk9MVU1FIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU4gfCBCTElTVF9NQVhfNTEyfSwgLyogQ29tcGFxIFJBNHgwMCAqLwogCXsiQ09NUEFRIiwgIkNSMzUwMCIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOfSwKIAl7IkNPTVBBUSIsICJNU0ExMDAwIiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOIHwgQkxJU1RfTk9TVEFSVE9OQUREfSwKIAl7IkNPTVBBUSIsICJNU0ExMDAwIFZPTFVNRSIsIE5VTEwsIEJMSVNUX1NQQVJTRUxVTiB8IEJMSVNUX05PU1RBUlRPTkFERH0sCkBAIC0xNjEsNiArMTY1LDcgQEAKIAl7IkhQIiwgIkhTVjEwMCIsIE5VTEwsIEJMSVNUX1JFUE9SVExVTjIgfCBCTElTVF9OT1NUQVJUT05BRER9LAogCXsiSFAiLCAiQzE1NTdBIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAogCXsiSFAiLCAiQzMzMjMtMzAwIiwgIjQyNjkiLCBCTElTVF9OT1RRfSwKKwl7IkhQIiwgIkM1NzEzQSIsIE5VTEwsIEJMSVNUX05PUkVQT1JUTFVOfSwKIAl7IklCTSIsICJBdVNhVjFTMiIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOfSwKIAl7IklCTSIsICJQcm9GaWJyZSA0MDAwUiIsICIqIiwgQkxJU1RfU1BBUlNFTFVOIHwgQkxJU1RfTEFSR0VMVU59LAogCXsiSUJNIiwgIjIxMDUiLCBOVUxMLCBCTElTVF9SRVRSWV9IV0VSUk9SfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDVmMGZkZmIuLjFjNzU2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMTUzNyw4ICsxNTM3LDggQEAKIAkJICogd2hhdCB3ZSBuZWVkIHRvIGRvIHRvIGdldCBpdCB1cCBhbmQgb25saW5lIGFnYWluIChpZiB3ZSBjYW4pLgogCQkgKiBJZiB3ZSBmYWlsLCB3ZSBlbmQgdXAgdGFraW5nIHRoZSB0aGluZyBvZmZsaW5lLgogCQkgKi8KLQkJaWYgKHNob3N0LT5ob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcikgCi0JCQlzaG9zdC0+aG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoc2hvc3QpOworCQlpZiAoc2hvc3QtPnRyYW5zcG9ydHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIpCisJCQlzaG9zdC0+dHJhbnNwb3J0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcihzaG9zdCk7CiAJCWVsc2UKIAkJCXNjc2lfdW5qYW1faG9zdChzaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCmluZGV4IDM2ZTkzMDAuLmE4OWFmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwpAQCAtMTU4LDE4MCArMTU4LDYgQEAKIEVYUE9SVF9TWU1CT0woc2NzaV9zZXRfbWVkaXVtX3JlbW92YWwpOwogCiAvKgotICogVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZCAtIHVzZXJzIHNob3VsZCB1c2UgdGhlIHNjc2kgZ2VuZXJpYyAoc2cpCi0gKiBpbnRlcmZhY2UgaW5zdGVhZCwgYXMgdGhpcyBpcyBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggdG8gcGVyZm9ybWluZwotICogZ2VuZXJpYyBTQ1NJIGNvbW1hbmRzIG9uIGEgZGV2aWNlLgotICoKLSAqIFRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBhcmUgcGFzc2VkIHNob3VsZCBsb29rIGxpa2U6Ci0gKgotICogc3RydWN0IHNkYXRhIHsKLSAqICB1bnNpZ25lZCBpbnQgaW5sZW47ICAgICAgW2ldIExlbmd0aCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gZGV2aWNlIAotICogIHVuc2lnbmVkIGludCBvdXRsZW47ICAgICBbaV0gTGVuZ3RoIG9mIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGRldmljZSAKLSAqICB1bnNpZ25lZCBjaGFyIGNtZFt4XTsgICAgW2ldIFNDU0kgY29tbWFuZCAoNiA8PSB4IDw9IDEyKS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgW29dIERhdGEgcmVhZCBmcm9tIGRldmljZSBzdGFydHMgaGVyZS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgW29dIE9uIGVycm9yLCBzZW5zZSBidWZmZXIgc3RhcnRzIGhlcmUuCi0gKiAgdW5zaWduZWQgY2hhciB3ZGF0YVt5XTsgIFtpXSBEYXRhIHdyaXR0ZW4gdG8gZGV2aWNlIHN0YXJ0cyBoZXJlLgotICogfTsKLSAqIE5vdGVzOgotICogICAtICBUaGUgU0NTSSBjb21tYW5kIGxlbmd0aCBpcyBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyB0aGUgMXN0IGJ5dGUKLSAqICAgICAgb2YgdGhlIGdpdmVuIGNvbW1hbmQuIFRoZXJlIGlzIG5vIHdheSB0byBvdmVycmlkZSB0aGlzLgotICogICAtICBEYXRhIHRyYW5zZmVycyBhcmUgbGltaXRlZCB0byBQQUdFX1NJWkUgKDRLIG9uIGkzODYsIDhLIG9uIGFscGhhKS4KLSAqICAgLSAgVGhlIGxlbmd0aCAoeCArIHkpIG11c3QgYmUgYXQgbGVhc3QgT01BWF9TQl9MRU4gYnl0ZXMgbG9uZyB0bwotICogICAgICBhY2NvbW1vZGF0ZSB0aGUgc2Vuc2UgYnVmZmVyIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgotICogICAgICBUaGUgc2Vuc2UgYnVmZmVyIGlzIHRydW5jYXRlZCB0byBPTUFYX1NCX0xFTiAoMTYpIGJ5dGVzIHNvIHRoYXQKLSAqICAgICAgb2xkIGNvZGUgd2lsbCBub3QgYmUgc3VycHJpc2VkLgotICogICAtICBJZiBhIFVuaXggZXJyb3Igb2NjdXJzIChlLmcuIEVOT01FTSkgdGhlbiB0aGUgdXNlciB3aWxsIHJlY2VpdmUKLSAqICAgICAgYSBuZWdhdGl2ZSByZXR1cm4gYW5kIHRoZSBVbml4IGVycm9yIGNvZGUgaW4gJ2Vycm5vJy4gCi0gKiAgICAgIElmIHRoZSBTQ1NJIGNvbW1hbmQgc3VjY2VlZHMgdGhlbiAwIGlzIHJldHVybmVkLgotICogICAgICBQb3NpdGl2ZSBudW1iZXJzIHJldHVybmVkIGFyZSB0aGUgY29tcGFjdGVkIFNDU0kgZXJyb3IgY29kZXMgKDQgCi0gKiAgICAgIGJ5dGVzIGluIG9uZSBpbnQpIHdoZXJlIHRoZSBsb3dlc3QgYnl0ZSBpcyB0aGUgU0NTSSBzdGF0dXMuCi0gKiAgICAgIFNlZSB0aGUgZHJpdmVycy9zY3NpL3Njc2kuaCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMuCi0gKgotICovCi0jZGVmaW5lIE9NQVhfU0JfTEVOIDE2CQkvKiBPbGQgc2Vuc2UgYnVmZmVyIGxlbmd0aCAqLwotCi1pbnQgc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJICAgIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQgX191c2VyICpzaWMpCi17Ci0JY2hhciAqYnVmOwotCXVuc2lnbmVkIGNoYXIgY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXVuc2lnbmVkIGNoYXIgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKLQljaGFyIF9fdXNlciAqY21kX2luOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwotCXVuc2lnbmVkIGludCBpbmxlbiwgb3V0bGVuLCBjbWRsZW47Ci0JdW5zaWduZWQgaW50IG5lZWRlZCwgYnVmX25lZWRlZDsKLQlpbnQgdGltZW91dCwgcmV0cmllcywgcmVzdWx0OwotCWludCBkYXRhX2RpcmVjdGlvbjsKLQlnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7Ci0KLQlpZiAoIXNpYykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc2Rldi0+aG9zdC0+dW5jaGVja2VkX2lzYV9kbWEpCi0JCWdmcF9tYXNrIHw9IEdGUF9ETUE7Ci0KLQkvKgotCSAqIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFkIGF0IGxlYXN0IHRoaXMgbXVjaC4KLQkgKi8KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgc2ljLCBzaXplb2YoU2NzaV9Jb2N0bF9Db21tYW5kKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYoX19nZXRfdXNlcihpbmxlbiwgJnNpYy0+aW5sZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkJCi0JaWYoX19nZXRfdXNlcihvdXRsZW4sICZzaWMtPm91dGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyoKLQkgKiBXZSBkbyBub3QgdHJhbnNmZXIgbW9yZSB0aGFuIE1BWF9CVUYgd2l0aCB0aGlzIGludGVyZmFjZS4KLQkgKiBJZiB0aGUgdXNlciBuZWVkcyB0byB0cmFuc2ZlciBtb3JlIGRhdGEgdGhhbiB0aGlzLCB0aGV5Ci0JICogc2hvdWxkIHVzZSBzY3NpX2dlbmVyaWNzIChzZykgaW5zdGVhZC4KLQkgKi8KLQlpZiAoaW5sZW4gPiBNQVhfQlVGKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAob3V0bGVuID4gTUFYX0JVRikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbWRfaW4gPSBzaWMtPmRhdGE7Ci0JaWYoZ2V0X3VzZXIob3Bjb2RlLCBjbWRfaW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCW5lZWRlZCA9IGJ1Zl9uZWVkZWQgPSAoaW5sZW4gPiBvdXRsZW4gPyBpbmxlbiA6IG91dGxlbik7Ci0JaWYgKGJ1Zl9uZWVkZWQpIHsKLQkJYnVmX25lZWRlZCA9IChidWZfbmVlZGVkICsgNTExKSAmIH41MTE7Ci0JCWlmIChidWZfbmVlZGVkID4gTUFYX0JVRikKLQkJCWJ1Zl9uZWVkZWQgPSBNQVhfQlVGOwotCQlidWYgPSBremFsbG9jKGJ1Zl9uZWVkZWQsIGdmcF9tYXNrKTsKLQkJaWYgKCFidWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKGlubGVuID09IDApIHsKLQkJCWRhdGFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwotCQl9IGVsc2UgaWYgKG91dGxlbiA9PSAwICkgewotCQkJZGF0YV9kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIENhbiB0aGlzIGV2ZXIgaGFwcGVuPwotCQkJICovCi0JCQlkYXRhX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwotCQl9Ci0KLQl9IGVsc2UgewotCQlidWYgPSBOVUxMOwotCQlkYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOwotCX0KLQotCS8qCi0JICogT2J0YWluIHRoZSBjb21tYW5kIGZyb20gdGhlIHVzZXIncyBhZGRyZXNzIHNwYWNlLgotCSAqLwotCWNtZGxlbiA9IENPTU1BTkRfU0laRShvcGNvZGUpOwotCQotCXJlc3VsdCA9IC1FRkFVTFQ7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgY21kX2luLCBjbWRsZW4gKyBpbmxlbikpCi0JCWdvdG8gZXJyb3I7Ci0KLQlpZihfX2NvcHlfZnJvbV91c2VyKGNtZCwgY21kX2luLCBjbWRsZW4pKQotCQlnb3RvIGVycm9yOwotCi0JLyoKLQkgKiBPYnRhaW4gdGhlIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlIChpZiBhbnkpLgotCSAqLwotCi0JaWYoaW5sZW4gJiYgY29weV9mcm9tX3VzZXIoYnVmLCBjbWRfaW4gKyBjbWRsZW4sIGlubGVuKSkKLQkJZ290byBlcnJvcjsKLQotCXN3aXRjaCAob3Bjb2RlKSB7Ci0JY2FzZSBTRU5EX0RJQUdOT1NUSUM6Ci0JY2FzZSBGT1JNQVRfVU5JVDoKLQkJdGltZW91dCA9IEZPUk1BVF9VTklUX1RJTUVPVVQ7Ci0JCXJldHJpZXMgPSAxOwotCQlicmVhazsKLQljYXNlIFNUQVJUX1NUT1A6Ci0JCXRpbWVvdXQgPSBTVEFSVF9TVE9QX1RJTUVPVVQ7Ci0JCXJldHJpZXMgPSBOT1JNQUxfUkVUUklFUzsKLQkJYnJlYWs7Ci0JY2FzZSBNT1ZFX01FRElVTToKLQkJdGltZW91dCA9IE1PVkVfTUVESVVNX1RJTUVPVVQ7Ci0JCXJldHJpZXMgPSBOT1JNQUxfUkVUUklFUzsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEX0VMRU1FTlRfU1RBVFVTOgotCQl0aW1lb3V0ID0gUkVBRF9FTEVNRU5UX1NUQVRVU19USU1FT1VUOwotCQlyZXRyaWVzID0gTk9STUFMX1JFVFJJRVM7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9ERUZFQ1RfREFUQToKLQkJdGltZW91dCA9IFJFQURfREVGRUNUX0RBVEFfVElNRU9VVDsKLQkJcmV0cmllcyA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXRpbWVvdXQgPSBJT0NUTF9OT1JNQUxfVElNRU9VVDsKLQkJcmV0cmllcyA9IE5PUk1BTF9SRVRSSUVTOwotCQlicmVhazsKLQl9Ci0KLQlyZXN1bHQgPSBzY3NpX2V4ZWN1dGUoc2RldiwgY21kLCBkYXRhX2RpcmVjdGlvbiwgYnVmLCBuZWVkZWQsCi0JCQkgICAgICBzZW5zZSwgdGltZW91dCwgcmV0cmllcywgMCk7Ci0KLQkvKiAKLQkgKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgY29uZGl0aW9uLCBwYXNzIHRoZSBpbmZvIGJhY2sgdG8gdGhlIHVzZXIuIAotCSAqLwotCWlmIChyZXN1bHQpIHsKLQkJaW50IHNiX2xlbiA9IHNpemVvZigqc2Vuc2UpOwotCi0JCXNiX2xlbiA9IChzYl9sZW4gPiBPTUFYX1NCX0xFTikgPyBPTUFYX1NCX0xFTiA6IHNiX2xlbjsKLQkJaWYgKGNvcHlfdG9fdXNlcihjbWRfaW4sIHNlbnNlLCBzYl9sZW4pKQotCQkJcmVzdWx0ID0gLUVGQVVMVDsKLQl9IGVsc2UgewotCQlpZiAob3V0bGVuICYmIGNvcHlfdG9fdXNlcihjbWRfaW4sIGJ1Ziwgb3V0bGVuKSkKLQkJCXJlc3VsdCA9IC1FRkFVTFQ7Ci0JfQkKLQotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotRVhQT1JUX1NZTUJPTChzY3NpX2lvY3RsX3NlbmRfY29tbWFuZCk7Ci0KLS8qCiAgKiBUaGUgc2NzaV9pb2N0bF9nZXRfcGNpKCkgZnVuY3Rpb24gcGxhY2VzIGludG8gYXJnIHRoZSB2YWx1ZQogICogcGNpX2Rldjo6c2xvdF9uYW1lICg4IGNoYXJhY3RlcnMpIGZvciB0aGUgUENJIGRldmljZSAoaWYgYW55KS4KICAqIFJldHVybnM6IDAgb24gc3VjY2VzcwpAQCAtNDA5LDcgKzIzNSw3IEBACiAJY2FzZSBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORDoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8ICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCXJldHVybiBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZChzZGV2LCBhcmcpOworCQlyZXR1cm4gc2dfc2NzaV9pb2N0bChOVUxMLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBOVUxMLCBhcmcpOwogCWNhc2UgU0NTSV9JT0NUTF9ET09STE9DSzoKIAkJcmV0dXJuIHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKHNkZXYsIFNDU0lfUkVNT1ZBTF9QUkVWRU5UKTsKIAljYXNlIFNDU0lfSU9DVExfRE9PUlVOTE9DSzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggOGYwMTBhMy4uZmFlZTQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQkJICAgaW50IG5zZWdzLCB1bnNpZ25lZCBidWZmbGVuLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKLQlpbnQgbnJfcGFnZXMgPSAoYnVmZmxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJaW50IG5yX3BhZ2VzID0gKGJ1ZmZsZW4gKyBzZ2xbMF0ub2Zmc2V0ICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSAwLCBsZW4sIGJ5dGVzLCBvZmY7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKQEAgLTEwNjcsMTYgKzEwNjcsMjkgQEAKIAkJCWJyZWFrOwogCQljYXNlIE5PVF9SRUFEWToKIAkJCS8qCi0JCQkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlY29taW5nIHJlYWR5LAotCQkJICogcmV0cnkuCisJCQkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlY29taW5nCisJCQkgKiByZWFkeSwgb3IgaGFzIGEgdGVtcG9yYXJ5IGJsb2NrYWdlLCByZXRyeS4KIAkJCSAqLwotCQkJaWYgKHNzaGRyLmFzYyA9PSAweDA0ICYmIHNzaGRyLmFzY3EgPT0gMHgwMSkgewotCQkJCXNjc2lfcmVxdWV1ZV9jb21tYW5kKHEsIGNtZCk7Ci0JCQkJcmV0dXJuOworCQkJaWYgKHNzaGRyLmFzYyA9PSAweDA0KSB7CisJCQkJc3dpdGNoIChzc2hkci5hc2NxKSB7CisJCQkJY2FzZSAweDAxOiAvKiBiZWNvbWluZyByZWFkeSAqLworCQkJCWNhc2UgMHgwNDogLyogZm9ybWF0IGluIHByb2dyZXNzICovCisJCQkJY2FzZSAweDA1OiAvKiByZWJ1aWxkIGluIHByb2dyZXNzICovCisJCQkJY2FzZSAweDA2OiAvKiByZWNhbGN1bGF0aW9uIGluIHByb2dyZXNzICovCisJCQkJY2FzZSAweDA3OiAvKiBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgKi8KKwkJCQljYXNlIDB4MDg6IC8qIExvbmcgd3JpdGUgaW4gcHJvZ3Jlc3MgKi8KKwkJCQljYXNlIDB4MDk6IC8qIHNlbGYgdGVzdCBpbiBwcm9ncmVzcyAqLworCQkJCQlzY3NpX3JlcXVldWVfY29tbWFuZChxLCBjbWQpOworCQkJCQlyZXR1cm47CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQotCQkJaWYgKCEocmVxLT5mbGFncyAmIFJFUV9RVUlFVCkpCisJCQlpZiAoIShyZXEtPmZsYWdzICYgUkVRX1FVSUVUKSkgewogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAotCQkJCQkgICAiRGV2aWNlIG5vdCByZWFkeS5cbiIpOworCQkJCQkgICAiRGV2aWNlIG5vdCByZWFkeTogIik7CisJCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoIiIsICZzc2hkcik7CisJCQl9CiAJCQlzY3NpX2VuZF9yZXF1ZXN0KGNtZCwgMCwgdGhpc19jb3VudCwgMSk7CiAJCQlyZXR1cm47CiAJCWNhc2UgVk9MVU1FX09WRVJGTE9XOgpAQCAtMTQ3OSw2ICsxNDkyLDggQEAKIHN0YXRpYyB2b2lkIHNjc2lfa2lsbF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHJlcXVlc3RfcXVldWVfdCAqcSkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSByZXEtPnNwZWNpYWw7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCiAJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOwogCkBAIC0xNDkxLDYgKzE1MDYsMTkgQEAKIAlzY3NpX2luaXRfY21kX2VycmgoY21kKTsKIAljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCWF0b21pY19pbmMoJmNtZC0+ZGV2aWNlLT5pb3JlcXVlc3RfY250KTsKKworCS8qCisJICogU0NTSSByZXF1ZXN0IGNvbXBsZXRpb24gcGF0aCB3aWxsIGRvIHNjc2lfZGV2aWNlX3VuYnVzeSgpLAorCSAqIGJ1bXAgYnVzeSBjb3VudHMuICBUbyBidW1wIHRoZSBjb3VudGVycywgd2UgbmVlZCB0byBkYW5jZQorCSAqIHdpdGggdGhlIGxvY2tzIGFzIG5vcm1hbCBpc3N1ZSBwYXRoIGRvZXMuCisJICovCisJc2Rldi0+ZGV2aWNlX2J1c3krKzsKKwlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CisJc2hvc3QtPmhvc3RfYnVzeSsrOworCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKKwogCV9fc2NzaV9kb25lKGNtZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oIGIvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2ZTZlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX1NDU0lfU0FTX0lOVEVSTkFMX0gKKyNkZWZpbmUgX1NDU0lfU0FTX0lOVEVSTkFMX0gKKworI2RlZmluZSBTQVNfSE9TVF9BVFRSUwkJMAorI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMTcKKyNkZWZpbmUgU0FTX1JQT1JUX0FUVFJTCQk3CisjZGVmaW5lIFNBU19FTkRfREVWX0FUVFJTCTMKKyNkZWZpbmUgU0FTX0VYUEFOREVSX0FUVFJTCTcKKworc3RydWN0IHNhc19pbnRlcm5hbCB7CisJc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7CisJc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSAqZjsKKwlzdHJ1Y3Qgc2FzX2RvbWFpbl9mdW5jdGlvbl90ZW1wbGF0ZSAqZGZ0OworCisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9ob3N0X2F0dHJzW1NBU19IT1NUX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3BoeV9hdHRyc1tTQVNfUE9SVF9BVFRSU107CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9ycGh5X2F0dHJzW1NBU19SUE9SVF9BVFRSU107CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9lbmRfZGV2X2F0dHJzW1NBU19FTkRfREVWX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2V4cGFuZGVyX2F0dHJzW1NBU19FWFBBTkRFUl9BVFRSU107CisKKwlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBwaHlfYXR0cl9jb250OworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHJwaHlfYXR0cl9jb250OworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGVuZF9kZXZfYXR0cl9jb250OworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGV4cGFuZGVyX2F0dHJfY29udDsKKworCS8qCisJICogVGhlIGFycmF5IG9mIG51bGwgdGVybWluYXRlZCBwb2ludGVycyB0byBhdHRyaWJ1dGVzCisJICogbmVlZGVkIGJ5IHNjc2lfc3lzZnMuYworCSAqLworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpob3N0X2F0dHJzW1NBU19IT1NUX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnBoeV9hdHRyc1tTQVNfUE9SVF9BVFRSUyArIDFdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpycGh5X2F0dHJzW1NBU19SUE9SVF9BVFRSUyArIDFdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICplbmRfZGV2X2F0dHJzW1NBU19FTkRfREVWX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmV4cGFuZGVyX2F0dHJzW1NBU19FWFBBTkRFUl9BVFRSUyArIDFdOworfTsKKyNkZWZpbmUgdG9fc2FzX2ludGVybmFsKHRtcGwpCWNvbnRhaW5lcl9vZih0bXBsLCBzdHJ1Y3Qgc2FzX2ludGVybmFsLCB0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCBmMTQ5NDU5Li4xYTU0NzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC02NzMsNiArNjczLDcgQEAKIAljYXNlIFRZUEVfTUVESVVNX0NIQU5HRVI6CiAJY2FzZSBUWVBFX0VOQ0xPU1VSRToKIAljYXNlIFRZUEVfQ09NTToKKwljYXNlIFRZUEVfUkFJRDoKIAljYXNlIFRZUEVfUkJDOgogCQlzZGV2LT53cml0ZWFibGUgPSAxOwogCQlicmVhazsKQEAgLTczOCw2ICs3MzksMTMgQEAKIAkJc2Rldi0+c2VsZWN0X25vX2F0biA9IDE7CiAKIAkvKgorCSAqIE1heGltdW0gNTEyIHNlY3RvciB0cmFuc2ZlciBsZW5ndGgKKwkgKiBicm9rZW4gUkE0eDAwIENvbXBhcSBEaXNrIEFycmF5CisJICovCisJaWYgKCpiZmxhZ3MgJiBCTElTVF9NQVhfNTEyKQorCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTEyKTsKKworCS8qCiAJICogU29tZSBkZXZpY2VzIG1heSBub3Qgd2FudCB0byBoYXZlIGEgc3RhcnQgY29tbWFuZCBhdXRvbWF0aWNhbGx5CiAJICogaXNzdWVkIHdoZW4gYSBkZXZpY2UgaXMgYWRkZWQuCiAJICovCkBAIC0xMTIzLDEwICsxMTMxLDEzIEBACiAJICogQWxzbyBhbGxvdyBTQ1NJLTIgaWYgQkxJU1RfUkVQT1JUTFVOMiBpcyBzZXQgYW5kIGhvc3QgYWRhcHRlciBkb2VzCiAJICogc3VwcG9ydCBtb3JlIHRoYW4gOCBMVU5zLgogCSAqLwotCWlmICgoYmZsYWdzICYgQkxJU1RfTk9SRVBPUlRMVU4pIHx8IAotCSAgICAgc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMiB8fAotCSAgICAoc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMyAmJiAKLQkgICAgICghKGJmbGFncyAmIEJMSVNUX1JFUE9SVExVTjIpIHx8IHNob3N0LT5tYXhfbHVuIDw9IDgpKSApCisJaWYgKGJmbGFncyAmIEJMSVNUX05PUkVQT1JUTFVOKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RhcmdldC0+c2NzaV9sZXZlbCA8IFNDU0lfMiAmJgorCSAgICBzdGFyZ2V0LT5zY3NpX2xldmVsICE9IFNDU0lfVU5LTk9XTikKKwkJcmV0dXJuIDE7CisJaWYgKHN0YXJnZXQtPnNjc2lfbGV2ZWwgPCBTQ1NJXzMgJiYKKwkgICAgKCEoYmZsYWdzICYgQkxJU1RfUkVQT1JUTFVOMikgfHwgc2hvc3QtPm1heF9sdW4gPD0gOCkpCiAJCXJldHVybiAxOwogCWlmIChiZmxhZ3MgJiBCTElTVF9OT0xVTikKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDhkYjY1NjIuLjk1YzU0NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlICJzY3NpX3ByaXYuaCIKIAorc3RhdGljIGludCBmY19xdWV1ZV93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHdvcmtfc3RydWN0ICopOworCiAvKgogICogUmVkZWZpbmUgc28gdGhhdCB3ZSBjYW4gaGF2ZSBzYW1lIG5hbWVkIGF0dHJpYnV0ZXMgaW4gdGhlCiAgKiBzZGV2L3N0YXJnZXQvaG9zdCBvYmplY3RzLgpAQCAtMjEzLDEwICsyMTUsOCBAQAogI2RlZmluZSBGQ19NR01UU1JWUl9QT1JUSUQJCTB4MDAwMDBhCiAKIAotc3RhdGljIHZvaWQgZmNfc2hvc3RfcmVtb3ZlX3Jwb3J0cyh2b2lkICAqZGF0YSk7CiBzdGF0aWMgdm9pZCBmY190aW1lb3V0X2RlbGV0ZWRfcnBvcnQodm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCBmY19zY3NpX3NjYW5fcnBvcnQodm9pZCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF90ZXJtaW5hdGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpOwogCiAvKgogICogQXR0cmlidXRlIGNvdW50cyBwcmUgb2JqZWN0IHR5cGUuLi4KQEAgLTI4OCw0MiArMjg4LDU4IEBACiAJCQkgc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChkZXYpOworCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAKIAkvKiAKIAkgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZWFzaWx5IGRldGVjdGVkIGJ5IHRoZSBtaWRsYXllciBhcwogCSAqIGZhaWx1cmUgY2FzZXMuICBUaGUgc2NzaSBsbGRkIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcKIAkgKiBhbGwgdHJhbnNwb3J0IGF0dHJpYnV0ZXMgdG8gdmFsaWQgdmFsdWVzIHBlciBob3N0LgogCSAqLwotCWZjX2hvc3Rfbm9kZV9uYW1lKHNob3N0KSA9IC0xOwotCWZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KSA9IC0xOwotCWZjX2hvc3RfcGVybWFuZW50X3BvcnRfbmFtZShzaG9zdCkgPSAtMTsKLQlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKHNob3N0KSA9IEZDX0NPU19VTlNQRUNJRklFRDsKLQltZW1zZXQoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhzaG9zdCksIDAsCi0JCXNpemVvZihmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSkpOwotCW1lbXNldChmY19ob3N0X3N5bWJvbGljX25hbWUoc2hvc3QpLCAwLAotCQlzaXplb2YoZmNfaG9zdF9zeW1ib2xpY19uYW1lKHNob3N0KSkpOwotCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhzaG9zdCkgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKLQlmY19ob3N0X21heGZyYW1lX3NpemUoc2hvc3QpID0gLTE7Ci0JbWVtc2V0KGZjX2hvc3Rfc2VyaWFsX251bWJlcihzaG9zdCksIDAsCi0JCXNpemVvZihmY19ob3N0X3NlcmlhbF9udW1iZXIoc2hvc3QpKSk7CisJZmNfaG9zdC0+bm9kZV9uYW1lID0gLTE7CisJZmNfaG9zdC0+cG9ydF9uYW1lID0gLTE7CisJZmNfaG9zdC0+cGVybWFuZW50X3BvcnRfbmFtZSA9IC0xOworCWZjX2hvc3QtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOworCW1lbXNldChmY19ob3N0LT5zdXBwb3J0ZWRfZmM0cywgMCwKKwkJc2l6ZW9mKGZjX2hvc3QtPnN1cHBvcnRlZF9mYzRzKSk7CisJbWVtc2V0KGZjX2hvc3QtPnN5bWJvbGljX25hbWUsIDAsCisJCXNpemVvZihmY19ob3N0LT5zeW1ib2xpY19uYW1lKSk7CisJZmNfaG9zdC0+c3VwcG9ydGVkX3NwZWVkcyA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOworCWZjX2hvc3QtPm1heGZyYW1lX3NpemUgPSAtMTsKKwltZW1zZXQoZmNfaG9zdC0+c2VyaWFsX251bWJlciwgMCwKKwkJc2l6ZW9mKGZjX2hvc3QtPnNlcmlhbF9udW1iZXIpKTsKIAotCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPSAtMTsKLQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9VTktOT1dOOwotCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfVU5LTk9XTjsKLQltZW1zZXQoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCksIDAsCi0JCXNpemVvZihmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSkpOwotCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEX1VOS05PV047Ci0JZmNfaG9zdF9mYWJyaWNfbmFtZShzaG9zdCkgPSAtMTsKKwlmY19ob3N0LT5wb3J0X2lkID0gLTE7CisJZmNfaG9zdC0+cG9ydF90eXBlID0gRkNfUE9SVFRZUEVfVU5LTk9XTjsKKwlmY19ob3N0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX1VOS05PV047CisJbWVtc2V0KGZjX2hvc3QtPmFjdGl2ZV9mYzRzLCAwLAorCQlzaXplb2YoZmNfaG9zdC0+YWN0aXZlX2ZjNHMpKTsKKwlmY19ob3N0LT5zcGVlZCA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOworCWZjX2hvc3QtPmZhYnJpY19uYW1lID0gLTE7CiAKLQlmY19ob3N0X3RndGlkX2JpbmRfdHlwZShzaG9zdCkgPSBGQ19UR1RJRF9CSU5EX0JZX1dXUE47CisJZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlID0gRkNfVEdUSURfQklORF9CWV9XV1BOOwogCi0JSU5JVF9MSVNUX0hFQUQoJmZjX2hvc3RfcnBvcnRzKHNob3N0KSk7Ci0JSU5JVF9MSVNUX0hFQUQoJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpKTsKLQlmY19ob3N0X25leHRfcnBvcnRfbnVtYmVyKHNob3N0KSA9IDA7Ci0JZmNfaG9zdF9uZXh0X3RhcmdldF9pZChzaG9zdCkgPSAwOworCUlOSVRfTElTVF9IRUFEKCZmY19ob3N0LT5ycG9ydHMpOworCUlOSVRfTElTVF9IRUFEKCZmY19ob3N0LT5ycG9ydF9iaW5kaW5ncyk7CisJZmNfaG9zdC0+bmV4dF9ycG9ydF9udW1iZXIgPSAwOworCWZjX2hvc3QtPm5leHRfdGFyZ2V0X2lkID0gMDsKIAotCWZjX2hvc3RfZmxhZ3Moc2hvc3QpID0gMDsKLQlJTklUX1dPUksoJmZjX2hvc3RfcnBvcnRfZGVsX3dvcmsoc2hvc3QpLCBmY19zaG9zdF9yZW1vdmVfcnBvcnRzLCBzaG9zdCk7CisJc25wcmludGYoZmNfaG9zdC0+d29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJmY193cV8lZCIsCisJCXNob3N0LT5ob3N0X25vKTsKKwlmY19ob3N0LT53b3JrX3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQkJZmNfaG9zdC0+d29ya19xX25hbWUpOworCWlmICghZmNfaG9zdC0+d29ya19xKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNucHJpbnRmKGZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUsIEtPQkpfTkFNRV9MRU4sICJmY19kbF8lZCIsCisJCXNob3N0LT5ob3N0X25vKTsKKwlmY19ob3N0LT5kZXZsb3NzX3dvcmtfcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCQlmY19ob3N0LT5kZXZsb3NzX3dvcmtfcV9uYW1lKTsKKwlpZiAoIWZjX2hvc3QtPmRldmxvc3Nfd29ya19xKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGZjX2hvc3QtPndvcmtfcSk7CisJCWZjX2hvc3QtPndvcmtfcSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC04NzksOSArODk1LDkgQEAKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZmY19ob3N0X3Jwb3J0X2JpbmRpbmdzKHNob3N0KSkpIHsKIAkJCWdldF9saXN0X2hlYWRfZW50cnkocnBvcnQsCiAJCQkJJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpLCBwZWVycyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCWZjX3Jwb3J0X3Rlcm1pbmF0ZShycG9ydCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKKwkJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CisJCQlmY19xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnJwb3J0X2RlbGV0ZV93b3JrKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAl9CkBAIC0xMjYyLDYgKzEyNzgsOTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmNfcmVsZWFzZV90cmFuc3BvcnQpOwogCisvKioKKyAqIGZjX3F1ZXVlX3dvcmsgLSBRdWV1ZSB3b3JrIHRvIHRoZSBmY19ob3N0IHdvcmtxdWV1ZS4KKyAqIEBzaG9zdDoJUG9pbnRlciB0byBTY3NpX0hvc3QgYm91bmQgdG8gZmNfaG9zdC4KKyAqIEB3b3JrOglXb3JrIHRvIHF1ZXVlIGZvciBleGVjdXRpb24uCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTAgb24gc3VjY2VzcyAvICE9IDAgZm9yIGVycm9yCisgKiovCitzdGF0aWMgaW50CitmY19xdWV1ZV93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaWYgKHVubGlrZWx5KCFmY19ob3N0X3dvcmtfcShzaG9zdCkpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkVSUk9SOiBGQyBob3N0ICclcycgYXR0ZW1wdGVkIHRvIHF1ZXVlIHdvcmssICIKKwkJCSJ3aGVuIG5vIHdvcmtxdWV1ZSBjcmVhdGVkLlxuIiwgc2hvc3QtPmhvc3R0LT5uYW1lKTsKKwkJZHVtcF9zdGFjaygpOworCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBxdWV1ZV93b3JrKGZjX2hvc3Rfd29ya19xKHNob3N0KSwgd29yayk7Cit9CisKKy8qKgorICogZmNfZmx1c2hfd29yayAtIEZsdXNoIGEgZmNfaG9zdCdzIHdvcmtxdWV1ZS4KKyAqIEBzaG9zdDoJUG9pbnRlciB0byBTY3NpX0hvc3QgYm91bmQgdG8gZmNfaG9zdC4KKyAqKi8KK3N0YXRpYyB2b2lkCitmY19mbHVzaF93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCWlmICghZmNfaG9zdF93b3JrX3Eoc2hvc3QpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkVSUk9SOiBGQyBob3N0ICclcycgYXR0ZW1wdGVkIHRvIGZsdXNoIHdvcmssICIKKwkJCSJ3aGVuIG5vIHdvcmtxdWV1ZSBjcmVhdGVkLlxuIiwgc2hvc3QtPmhvc3R0LT5uYW1lKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm47CisJfQorCisJZmx1c2hfd29ya3F1ZXVlKGZjX2hvc3Rfd29ya19xKHNob3N0KSk7Cit9CisKKy8qKgorICogZmNfcXVldWVfZGV2bG9zc193b3JrIC0gU2NoZWR1bGUgd29yayBmb3IgdGhlIGZjX2hvc3QgZGV2bG9zcyB3b3JrcXVldWUuCisgKiBAc2hvc3Q6CVBvaW50ZXIgdG8gU2NzaV9Ib3N0IGJvdW5kIHRvIGZjX2hvc3QuCisgKiBAd29yazoJV29yayB0byBxdWV1ZSBmb3IgZXhlY3V0aW9uLgorICogQGRlbGF5OglqaWZmaWVzIHRvIGRlbGF5IHRoZSB3b3JrIHF1ZXVpbmcKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJMCBvbiBzdWNjZXNzIC8gIT0gMCBmb3IgZXJyb3IKKyAqKi8KK3N0YXRpYyBpbnQKK2ZjX3F1ZXVlX2Rldmxvc3Nfd29yayhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrLAorCQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkpCit7CisJaWYgKHVubGlrZWx5KCFmY19ob3N0X2Rldmxvc3Nfd29ya19xKHNob3N0KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRVJST1I6IEZDIGhvc3QgJyVzJyBhdHRlbXB0ZWQgdG8gcXVldWUgd29yaywgIgorCQkJIndoZW4gbm8gd29ya3F1ZXVlIGNyZWF0ZWQuXG4iLCBzaG9zdC0+aG9zdHQtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29yayhmY19ob3N0X2Rldmxvc3Nfd29ya19xKHNob3N0KSwgd29yaywgZGVsYXkpOworfQorCisvKioKKyAqIGZjX2ZsdXNoX2Rldmxvc3MgLSBGbHVzaCBhIGZjX2hvc3QncyBkZXZsb3NzIHdvcmtxdWV1ZS4KKyAqIEBzaG9zdDoJUG9pbnRlciB0byBTY3NpX0hvc3QgYm91bmQgdG8gZmNfaG9zdC4KKyAqKi8KK3N0YXRpYyB2b2lkCitmY19mbHVzaF9kZXZsb3NzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCWlmICghZmNfaG9zdF9kZXZsb3NzX3dvcmtfcShzaG9zdCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRVJST1I6IEZDIGhvc3QgJyVzJyBhdHRlbXB0ZWQgdG8gZmx1c2ggd29yaywgIgorCQkJIndoZW4gbm8gd29ya3F1ZXVlIGNyZWF0ZWQuXG4iLCBzaG9zdC0+aG9zdHQtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybjsKKwl9CisKKwlmbHVzaF93b3JrcXVldWUoZmNfaG9zdF9kZXZsb3NzX3dvcmtfcShzaG9zdCkpOworfQorCiAKIC8qKgogICogZmNfcmVtb3ZlX2hvc3QgLSBjYWxsZWQgdG8gdGVybWluYXRlIGFueSBmY190cmFuc3BvcnQtcmVsYXRlZCBlbGVtZW50cwpAQCAtMTI4MywzNiArMTM4MywxMDMgQEAKIGZjX3JlbW92ZV9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQsICpuZXh0X3Jwb3J0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3E7CisJc3RydWN0IGZjX2hvc3RfYXR0cnMgKmZjX2hvc3QgPSBzaG9zdF90b19mY19ob3N0KHNob3N0KTsKIAogCS8qIFJlbW92ZSBhbnkgcmVtb3RlIHBvcnRzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJwb3J0LCBuZXh0X3Jwb3J0LAotCQkJJmZjX2hvc3RfcnBvcnRzKHNob3N0KSwgcGVlcnMpCi0JCWZjX3Jwb3J0X3Rlcm1pbmF0ZShycG9ydCk7CisJCQkmZmNfaG9zdC0+cnBvcnRzLCBwZWVycykgeworCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKKwkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKKwkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5ycG9ydF9kZWxldGVfd29yayk7CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJwb3J0LCBuZXh0X3Jwb3J0LAotCQkJJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpLCBwZWVycykKLQkJZmNfcnBvcnRfdGVybWluYXRlKHJwb3J0KTsKKwkJCSZmY19ob3N0LT5ycG9ydF9iaW5kaW5ncywgcGVlcnMpIHsKKwkJbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7CisJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CisJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmspOworCX0KKworCS8qIGZsdXNoIGFsbCBzY2FuIHdvcmsgaXRlbXMgKi8KKwlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOworCisJLyogZmx1c2ggYWxsIHN0Z3QgZGVsZXRlLCBhbmQgcnBvcnQgZGVsZXRlIHdvcmsgaXRlbXMsIHRoZW4ga2lsbCBpdCAgKi8KKwlpZiAoZmNfaG9zdC0+d29ya19xKSB7CisJCXdvcmtfcSA9IGZjX2hvc3QtPndvcmtfcTsKKwkJZmNfaG9zdC0+d29ya19xID0gTlVMTDsKKwkJZGVzdHJveV93b3JrcXVldWUod29ya19xKTsKKwl9CisKKwkvKiBmbHVzaCBhbGwgZGV2bG9zcyB3b3JrIGl0ZW1zLCB0aGVuIGtpbGwgaXQgICovCisJaWYgKGZjX2hvc3QtPmRldmxvc3Nfd29ya19xKSB7CisJCXdvcmtfcSA9IGZjX2hvc3QtPmRldmxvc3Nfd29ya19xOworCQlmY19ob3N0LT5kZXZsb3NzX3dvcmtfcSA9IE5VTEw7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHdvcmtfcSk7CisJfQogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdmVfaG9zdCk7CiAKLS8qCi0gKiBmY19ycG9ydF90Z3RfcmVtb3ZlIC0gUmVtb3ZlcyB0aGUgc2NzaSB0YXJnZXQgb24gdGhlIHJlbW90ZSBwb3J0Ci0gKiBAcnBvcnQ6CVRoZSByZW1vdGUgcG9ydCB0byBiZSBvcGVyYXRlZCBvbgotICovCisKKy8qKgorICogZmNfc3RhcmdldF9kZWxldGUgLSBjYWxsZWQgdG8gZGVsZXRlIHRoZSBzY3NpIGRlY2VuZGVudHMgb2YgYW4gcnBvcnQKKyAqICAgICAgICAgICAgICAgICAgKHRhcmdldCBhbmQgYWxsIHNkZXZzKQorICoKKyAqIEBkYXRhOglyZW1vdGUgcG9ydCB0byBiZSBvcGVyYXRlZCBvbi4KKyAqKi8KIHN0YXRpYyB2b2lkCi1mY19ycG9ydF90Z3RfcmVtb3ZlKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitmY19zdGFyZ2V0X2RlbGV0ZSh2b2lkICpkYXRhKQogeworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSAoc3RydWN0IGZjX3Jwb3J0ICopZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CiAKLQkvKiBTdG9wIGFueXRoaW5nIG9uIHRoZSB3b3JrcSAqLwotCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmcnBvcnQtPmRldl9sb3NzX3dvcmspKQotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmcnBvcnQtPmRldl9sb3NzX3dvcmspKQorCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJc2NzaV9yZW1vdmVfdGFyZ2V0KCZycG9ydC0+ZGV2KTsKIH0KIAorCisvKioKKyAqIGZjX3Jwb3J0X2ZpbmFsX2RlbGV0ZSAtIGZpbmlzaCBycG9ydCB0ZXJtaW5hdGlvbiBhbmQgZGVsZXRlIGl0LgorICoKKyAqIEBkYXRhOglyZW1vdGUgcG9ydCB0byBiZSBkZWxldGVkLgorICoqLworc3RhdGljIHZvaWQKK2ZjX3Jwb3J0X2ZpbmFsX2RlbGV0ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSAoc3RydWN0IGZjX3Jwb3J0ICopZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBvcnQtPmRldjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKworCS8qIERlbGV0ZSBTQ1NJIHRhcmdldCBhbmQgc2RldnMgKi8KKwlpZiAocnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKQorCQlmY19zdGFyZ2V0X2RlbGV0ZShkYXRhKTsKKworCS8qCisJICogaWYgYSBzY2FuIGlzIHBlbmRpbmcsIGZsdXNoIHRoZSBTQ1NJIEhvc3Qgd29ya19xIHNvIHRoYXQgCisJICogdGhhdCB3ZSBjYW4gcmVjbGFpbSB0aGUgcnBvcnQgc2NhbiB3b3JrIGVsZW1lbnQuCisJICovCisJaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX1NDQU5fUEVORElORykKKwkJc2NzaV9mbHVzaF93b3JrKHNob3N0KTsKKworCXRyYW5zcG9ydF9yZW1vdmVfZGV2aWNlKGRldik7CisJZGV2aWNlX2RlbChkZXYpOworCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOworCXB1dF9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOworfQorCisKIC8qKgogICogZmNfcnBvcnRfY3JlYXRlIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgcmVtb3RlIEZDIHBvcnQuCiAgKiBAc2hvc3Q6CXNjc2kgaG9zdCB0aGUgcmVtb3RlIHBvcnQgaXMgY29ubmVjdGVkIHRvLgpAQCAtMTMzMCw4ICsxNDk3LDcgQEAKIGZjX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgaW50IGNoYW5uZWwsCiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzICAqaWRzKQogewotCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0KLQkJCShzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKXNob3N0LT5zaG9zdF9kYXRhOworCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAJc3RydWN0IGZjX2ludGVybmFsICpmY2kgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0xMzYwLDYgKzE1MjYsOCBAQAogCiAJSU5JVF9XT1JLKCZycG9ydC0+ZGV2X2xvc3Nfd29yaywgZmNfdGltZW91dF9kZWxldGVkX3Jwb3J0LCBycG9ydCk7CiAJSU5JVF9XT1JLKCZycG9ydC0+c2Nhbl93b3JrLCBmY19zY3NpX3NjYW5fcnBvcnQsIHJwb3J0KTsKKwlJTklUX1dPUksoJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrLCBmY19zdGFyZ2V0X2RlbGV0ZSwgcnBvcnQpOworCUlOSVRfV09SSygmcnBvcnQtPnJwb3J0X2RlbGV0ZV93b3JrLCBmY19ycG9ydF9maW5hbF9kZWxldGUsIHJwb3J0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIApAQCAtMTM2OCw3ICsxNTM2LDcgQEAKIAkJcnBvcnQtPnNjc2lfdGFyZ2V0X2lkID0gZmNfaG9zdC0+bmV4dF90YXJnZXRfaWQrKzsKIAllbHNlCiAJCXJwb3J0LT5zY3NpX3RhcmdldF9pZCA9IC0xOwotCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5wZWVycywgJmZjX2hvc3RfcnBvcnRzKHNob3N0KSk7CisJbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdC0+cnBvcnRzKTsKIAlnZXRfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMTM4OSw5ICsxNTU3LDExIEBACiAJdHJhbnNwb3J0X2FkZF9kZXZpY2UoZGV2KTsKIAl0cmFuc3BvcnRfY29uZmlndXJlX2RldmljZShkZXYpOwogCi0JaWYgKHJwb3J0LT5yb2xlcyAmIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVCkKKwlpZiAocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSB7CiAJCS8qIGluaXRpYXRlIGEgc2NhbiBvZiB0aGUgdGFyZ2V0ICovCisJCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CiAJCXNjc2lfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zY2FuX3dvcmspOworCX0KIAogCXJldHVybiBycG9ydDsKIApAQCAtMTQ1MSwxMCArMTYyMSwxNCBAQAogCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyAgKmlkcykKIHsKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmZjaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKKwlzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqZmNfaG9zdCA9IHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpOwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbWF0Y2ggPSAwOwogCisJLyogZW5zdXJlIGFueSBzdGd0IGRlbGV0ZSBmdW5jdGlvbnMgYXJlIGRvbmUgKi8KKwlmY19mbHVzaF93b3JrKHNob3N0KTsKKwogCS8qCiAJICogU2VhcmNoIHRoZSBsaXN0IG9mICJhY3RpdmUiIHJwb3J0cywgZm9yIGFuIHJwb3J0IHRoYXQgaGFzIGJlZW4KIAkgKiBkZWxldGVkLCBidXQgd2UndmUgaGVsZCBvZmYgdGhlIHJlYWwgZGVsZXRlIHdoaWxlIHRoZSB0YXJnZXQKQEAgLTE0NjIsMTIgKzE2MzYsMTIgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJwb3J0LCAmZmNfaG9zdF9ycG9ydHMoc2hvc3QpLCBwZWVycykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocnBvcnQsICZmY19ob3N0LT5ycG9ydHMsIHBlZXJzKSB7CiAKIAkJaWYgKChycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfQkxPQ0tFRCkgJiYKIAkJCShycG9ydC0+Y2hhbm5lbCA9PSBjaGFubmVsKSkgewogCi0JCQlzd2l0Y2ggKGZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSkgeworCQkJc3dpdGNoIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUpIHsKIAkJCWNhc2UgRkNfVEdUSURfQklORF9CWV9XV1BOOgogCQkJY2FzZSBGQ19UR1RJRF9CSU5EX05PTkU6CiAJCQkJaWYgKHJwb3J0LT5wb3J0X25hbWUgPT0gaWRzLT5wb3J0X25hbWUpCkBAIC0xNTIxLDI3ICsxNjk1LDM0IEBACiAJCQkJICogdHJhbnNhY3Rpb24uCiAJCQkJICovCiAJCQkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKHdvcmspKQotCQkJCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQkJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKKworCQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCQkJCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOwogCiAJCQkJLyogaW5pdGlhdGUgYSBzY2FuIG9mIHRoZSB0YXJnZXQgKi8KKwkJCQlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfU0NBTl9QRU5ESU5HOwogCQkJCXNjc2lfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zY2FuX3dvcmspOwogCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKIAkJCQlyZXR1cm4gcnBvcnQ7CiAJCQl9CiAJCX0KIAl9CiAKIAkvKiBTZWFyY2ggdGhlIGJpbmRpbmdzIGFycmF5ICovCi0JaWYgKGZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSAhPSBGQ19UR1RJRF9CSU5EX05PTkUpIHsKKwlpZiAoZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlICE9IEZDX1RHVElEX0JJTkRfTk9ORSkgewogCiAJCS8qIHNlYXJjaCBmb3IgYSBtYXRjaGluZyBjb25zaXN0ZW50IGJpbmRpbmcgKi8KIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJwb3J0LCAmZmNfaG9zdF9ycG9ydF9iaW5kaW5ncyhzaG9zdCksCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnBvcnQsICZmY19ob3N0LT5ycG9ydF9iaW5kaW5ncywKIAkJCQkJcGVlcnMpIHsKIAkJCWlmIChycG9ydC0+Y2hhbm5lbCAhPSBjaGFubmVsKQogCQkJCWNvbnRpbnVlOwogCi0JCQlzd2l0Y2ggKGZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSkgeworCQkJc3dpdGNoIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUpIHsKIAkJCWNhc2UgRkNfVEdUSURfQklORF9CWV9XV1BOOgogCQkJCWlmIChycG9ydC0+cG9ydF9uYW1lID09IGlkcy0+cG9ydF9uYW1lKQogCQkJCQltYXRjaCA9IDE7CkBAIC0xNTU5LDggKzE3NDAsNyBAQAogCQkJfQogCiAJCQlpZiAobWF0Y2gpIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmcnBvcnQtPnBlZXJzLAotCQkJCQkmZmNfaG9zdF9ycG9ydHMoc2hvc3QpKTsKKwkJCQlsaXN0X21vdmVfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdC0+cnBvcnRzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTU3NCwxNSArMTc1NCwxNyBAQAogCQkJcnBvcnQtPnJvbGVzID0gaWRzLT5yb2xlczsKIAkJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX09OTElORTsKIAotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KIAkJCWlmIChmY2ktPmYtPmRkX2ZjcnBvcnRfc2l6ZSkKIAkJCQltZW1zZXQocnBvcnQtPmRkX2RhdGEsIDAsCiAJCQkJCQlmY2ktPmYtPmRkX2ZjcnBvcnRfc2l6ZSk7CiAKLQkJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpCisJCQlpZiAocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSB7CiAJCQkJLyogaW5pdGlhdGUgYSBzY2FuIG9mIHRoZSB0YXJnZXQgKi8KKwkJCQlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfU0NBTl9QRU5ESU5HOwogCQkJCXNjc2lfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zY2FuX3dvcmspOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCQkJcmV0dXJuIHJwb3J0OwogCQl9CkBAIC0xNTk3LDMwICsxNzc5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmNfcmVtb3RlX3BvcnRfYWRkKTsKIAotLyoKLSAqIGZjX3Jwb3J0X3Rlcm1pbmF0ZSAtIHRoaXMgcm91dGluZSB0ZWFycyBkb3duIGFuZCBkZWFsbG9jYXRlcyBhIHJlbW90ZSBwb3J0LgotICogQHJwb3J0OglUaGUgcmVtb3RlIHBvcnQgdG8gYmUgdGVybWluYXRlZAotICoKLSAqIE5vdGVzOgotICoJVGhpcyByb3V0aW5lIGFzc3VtZXMgbm8gbG9ja3MgYXJlIGhlbGQgb24gZW50cnkuCi0gKi8KLXN0YXRpYyB2b2lkCi1mY19ycG9ydF90ZXJtaW5hdGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnJwb3J0LT5kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWZjX3Jwb3J0X3RndF9yZW1vdmUocnBvcnQpOwotCi0JdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKLQlkZXZpY2VfZGVsKGRldik7Ci0JdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZycG9ydC0+cGVlcnMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXB1dF9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwotfQogCiAvKioKICAqIGZjX3JlbW90ZV9wb3J0X2RlbGV0ZSAtIG5vdGlmaWVzIHRoZSBmYyB0cmFuc3BvcnQgdGhhdCBhIHJlbW90ZQpAQCAtMTY3NSwyMCArMTgzMywzOSBAQAogdm9pZAogZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHN0cnVjdCBmY19ycG9ydCAgKnJwb3J0KQogeworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwogCWludCB0aW1lb3V0ID0gcnBvcnQtPmRldl9sb3NzX3RtbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGZsdXNoIHRoZSBmY19ob3N0IHdvcmtfcSdzLCBhcyBhbGwgYWRkcyBhcmUgc3luY2hyb25vdXMuCisJICoKKwkgKiBXZSBkbyBuZWVkIHRvIHJlY2xhaW0gdGhlIHJwb3J0IHNjYW4gd29yayBlbGVtZW50LCBzbyBldmVudHVhbGx5CisJICogKGluIGZjX3Jwb3J0X2ZpbmFsX2RlbGV0ZSgpKSB3ZSdsbCBmbHVzaCB0aGUgc2NzaSBob3N0IHdvcmtfcSBpZgorCSAqIHRoZXJlJ3Mgc3RpbGwgYSBzY2FuIHBlbmRpbmcuCisJICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkvKiBJZiBubyBzY3NpIHRhcmdldCBpZCBtYXBwaW5nLCBkZWxldGUgaXQgKi8KIAlpZiAocnBvcnQtPnNjc2lfdGFyZ2V0X2lkID09IC0xKSB7Ci0JCWZjX3Jwb3J0X3Rlcm1pbmF0ZShycG9ydCk7CisJCWxpc3RfZGVsKCZycG9ydC0+cGVlcnMpOworCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9ERUxFVEVEOworCQlmY19xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnJwb3J0X2RlbGV0ZV93b3JrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKKwlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9CTE9DS0VEOworCisJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCiAJc2NzaV90YXJnZXRfYmxvY2soJnJwb3J0LT5kZXYpOwogCiAJLyogY2FwIHRoZSBsZW5ndGggdGhlIGRldmljZXMgY2FuIGJlIGJsb2NrZWQgdW50aWwgdGhleSBhcmUgZGVsZXRlZCAqLwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcnBvcnQtPmRldl9sb3NzX3dvcmssIHRpbWVvdXQgKiBIWik7Ci0KLQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9CTE9DS0VEOworCWZjX3F1ZXVlX2Rldmxvc3Nfd29yayhzaG9zdCwgJnJwb3J0LT5kZXZfbG9zc193b3JrLCB0aW1lb3V0ICogSFopOwogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdGVfcG9ydF9kZWxldGUpOwogCkBAIC0xNzE2LDggKzE4OTMsNyBAQAogZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyhzdHJ1Y3QgZmNfcnBvcnQgICpycG9ydCwgdTMyIHJvbGVzKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwotCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0KLQkJCShzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKXNob3N0LT5zaG9zdF9kYXRhOworCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3JlYXRlID0gMDsKIApAQCAtMTcyOSwxMCArMTkwNSwxMSBAQAogCQl9IGVsc2UgaWYgKCEocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSkKIAkJCWNyZWF0ZSA9IDE7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJcnBvcnQtPnJvbGVzID0gcm9sZXM7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwogCWlmIChjcmVhdGUpIHsKIAkJLyoKIAkJICogVGhlcmUgbWF5IGhhdmUgYmVlbiBhIGRlbGV0ZSB0aW1lciBydW5uaW5nIG9uIHRoZQpAQCAtMTc0NywxMCArMTkyNCwyMCBAQAogCQkgKiB0cmFuc2FjdGlvbi4KIAkJICovCiAJCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmcnBvcnQtPmRldl9sb3NzX3dvcmspKQotCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJCWZjX2ZsdXNoX2Rldmxvc3Moc2hvc3QpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJCS8qIGVuc3VyZSBhbnkgc3RndCBkZWxldGUgZnVuY3Rpb25zIGFyZSBkb25lICovCisJCWZjX2ZsdXNoX3dvcmsoc2hvc3QpOwogCiAJCS8qIGluaXRpYXRlIGEgc2NhbiBvZiB0aGUgdGFyZ2V0ICovCisJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX1NDQU5fUEVORElORzsKIAkJc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnNjYW5fd29yayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyk7CkBAIC0xNzY3LDIyICsxOTU0LDI0IEBACiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IChzdHJ1Y3QgZmNfcnBvcnQgKilkYXRhOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAorCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCiAJLyoKLQkgKiBJZiB0aGUgcG9ydCBpcyBPTkxJTkUsIHRoZW4gaXQgY2FtZSBiYWNrLCBidXQgd2FzIG5vIGxvbmdlciBhbgotCSAqIEZDUCB0YXJnZXQuIFRodXMgd2UgbmVlZCB0byB0ZWFyIGRvd24gdGhlIHNjc2lfdGFyZ2V0IG9uIGl0LgorCSAqIElmIHRoZSBwb3J0IGlzIE9OTElORSwgdGhlbiBpdCBjYW1lIGJhY2suIFZhbGlkYXRlIGl0J3Mgc3RpbGwgYW4KKwkgKiBGQ1AgdGFyZ2V0LiBJZiBub3QsIHRlYXIgZG93biB0aGUgc2NzaV90YXJnZXQgb24gaXQuCiAJICovCi0JaWYgKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9PTkxJTkUpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KKwlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9PTkxJTkUpICYmCisJICAgICEocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSkgewogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcnBvcnQtPmRldiwKLQkJCSJibG9ja2VkIEZDIHJlbW90ZSBwb3J0IHRpbWUgb3V0OiByZW1vdmluZyB0YXJnZXRcbiIpOwotCi0JCWZjX3Jwb3J0X3RndF9yZW1vdmUocnBvcnQpOwotCisJCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogbm8gbG9uZ2VyIgorCQkJIiBhIEZDUCB0YXJnZXQsIHJlbW92aW5nIHN0YXJnZXRcbiIpOworCQlmY19xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnN0Z3RfZGVsZXRlX3dvcmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTc5MywxMSArMTk4MiwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSA9PSBGQ19UR1RJRF9CSU5EX05PTkUpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSA9PSBGQ19UR1RJRF9CSU5EX05PTkUpIHsKKwkJbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7CisJCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX0RFTEVURUQ7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZycG9ydC0+ZGV2LAogCQkJImJsb2NrZWQgRkMgcmVtb3RlIHBvcnQgdGltZSBvdXQ6IHJlbW92aW5nIHRhcmdldFxuIik7Ci0JCWZjX3Jwb3J0X3Rlcm1pbmF0ZShycG9ydCk7CisJCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+cnBvcnRfZGVsZXRlX3dvcmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTgwNSw3ICsxOTk2LDcgQEAKIAkJImJsb2NrZWQgRkMgcmVtb3RlIHBvcnQgdGltZSBvdXQ6IHJlbW92aW5nIHRhcmdldCBhbmQgIgogCQkic2F2aW5nIGJpbmRpbmdcbiIpOwogCi0JbGlzdF9tb3ZlX3RhaWwoJnJwb3J0LT5wZWVycywgJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpKTsKKwlsaXN0X21vdmVfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdC0+cnBvcnRfYmluZGluZ3MpOwogCiAJLyoKIAkgKiBOb3RlOiBXZSBkbyBub3QgcmVtb3ZlIG9yIGNsZWFyIHRoZSBob3N0ZGF0YSBhcmVhLiBUaGlzIGFsbG93cwpAQCAtMTgxOSwxMCArMjAxMCwxMCBAQAogCXJwb3J0LT5tYXhmcmFtZV9zaXplID0gLTE7CiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwogCXJwb3J0LT5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKLQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9ERUxFVEVEOworCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX05PVFBSRVNFTlQ7CiAKIAkvKiByZW1vdmUgdGhlIGlkZW50aWZpZXJzIHRoYXQgYXJlbid0IHVzZWQgaW4gdGhlIGNvbnNpc3RpbmcgYmluZGluZyAqLwotCXN3aXRjaCAoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpKSB7CisJc3dpdGNoIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUpIHsKIAljYXNlIEZDX1RHVElEX0JJTkRfQllfV1dQTjoKIAkJcnBvcnQtPm5vZGVfbmFtZSA9IC0xOwogCQlycG9ydC0+cG9ydF9pZCA9IC0xOwpAQCAtMTg0MywxNyArMjAzNCw4IEBACiAJICogQXMgdGhpcyBvbmx5IG9jY3VycyBpZiB0aGUgcmVtb3RlIHBvcnQgKHNjc2kgdGFyZ2V0KQogCSAqIHdlbnQgYXdheSBhbmQgZGlkbid0IGNvbWUgYmFjayAtIHdlJ2xsIHJlbW92ZQogCSAqIGFsbCBhdHRhY2hlZCBzY3NpIGRldmljZXMuCi0JICoKLQkgKiBXZSdsbCBzY2hlZHVsZSB0aGUgc2hvc3Qgd29yayBpdGVtIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCByZW1vdmFsCi0JICogdG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBkaWZmZXJlbnQgZmx1c2ggY2FsbHMgaWYgd2UgcGVyZm9ybQotCSAqIHRoZSByZW1vdmFsIGluIGVhY2ggdGFyZ2V0IC0gYW5kIHRoZXJlIGFyZSBsb3RzIG9mIHRhcmdldHMKLQkgKiB3aG9zZSB0aW1lb3V0cyBmaXJlIGF0IHRoZSBzYW1lIHRpbWUuCiAJICovCi0KLQlpZiAoICEoZmNfaG9zdF9mbGFncyhzaG9zdCkgJiBGQ19TSE9TVF9SUE9SVF9ERUxfU0NIRURVTEVEKSkgewotCQlmY19ob3N0X2ZsYWdzKHNob3N0KSB8PSBGQ19TSE9TVF9SUE9SVF9ERUxfU0NIRURVTEVEOwotCQlzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZmY19ob3N0X3Jwb3J0X2RlbF93b3JrKHNob3N0KSk7Ci0JfQorCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c3RndF9kZWxldGVfd29yayk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTE4NzAsNDQgKzIwNTIsMTggQEAKIGZjX3Njc2lfc2Nhbl9ycG9ydCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSAoc3RydWN0IGZjX3Jwb3J0ICopZGF0YTsKLQotCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOwotCXNjc2lfc2Nhbl90YXJnZXQoJnJwb3J0LT5kZXYsIHJwb3J0LT5jaGFubmVsLCBycG9ydC0+c2NzaV90YXJnZXRfaWQsCi0JCQlTQ0FOX1dJTERfQ0FSRCwgMSk7Ci19Ci0KLQotLyoqCi0gKiBmY19zaG9zdF9yZW1vdmVfcnBvcnRzIC0gY2FsbGVkIHRvIHJlbW92ZSBhbGwgcnBvcnRzIHRoYXQgYXJlIG1hcmtlZAotICogICAgICAgICAgICAgICAgICAgICAgIGFzIGluIGEgZGVsZXRlZCAobm90IGNvbm5lY3RlZCkgc3RhdGUuCi0gKiAKLSAqIEBkYXRhOglzaG9zdCB3aG9zZSBycG9ydHMgYXJlIHRvIGJlIGxvb2tlZCBhdAotICoqLwotc3RhdGljIHZvaWQKLWZjX3Nob3N0X3JlbW92ZV9ycG9ydHModm9pZCAgKmRhdGEpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSAoc3RydWN0IFNjc2lfSG9zdCAqKWRhdGE7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgKm5leHRfcnBvcnQ7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoZmNfaG9zdF9mbGFncyhzaG9zdCkgJiBGQ19TSE9TVF9SUE9SVF9ERUxfU0NIRURVTEVEKSB7Ci0KLQkJZmNfaG9zdF9mbGFncyhzaG9zdCkgJj0gfkZDX1NIT1NUX1JQT1JUX0RFTF9TQ0hFRFVMRUQ7Ci0KLXJlc3RhcnRfc2VhcmNoOgotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnBvcnQsIG5leHRfcnBvcnQsCi0JCQkJJmZjX2hvc3RfcnBvcnRfYmluZGluZ3Moc2hvc3QpLCBwZWVycykgewotCQkJaWYgKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9ERUxFVEVEKSB7Ci0JCQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfTk9UUFJFU0VOVDsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCQlmY19ycG9ydF90Z3RfcmVtb3ZlKHJwb3J0KTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCQkJZ290byByZXN0YXJ0X3NlYXJjaDsKLQkJCX0KLQkJfQotCisJaWYgKChycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfT05MSU5FKSAmJgorCSAgICAocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSkgeworCQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKKwkJc2NzaV9zY2FuX3RhcmdldCgmcnBvcnQtPmRldiwgcnBvcnQtPmNoYW5uZWwsCisJCQlycG9ydC0+c2NzaV90YXJnZXRfaWQsIFNDQU5fV0lMRF9DQVJELCAxKTsKIAl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCAxMzRjNDRjLi5mM2IxNjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0zNSw0MCArMzUsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgogCi0KLSNkZWZpbmUgU0FTX0hPU1RfQVRUUlMJCTAKLSNkZWZpbmUgU0FTX1BPUlRfQVRUUlMJCTE3Ci0jZGVmaW5lIFNBU19SUE9SVF9BVFRSUwkJNwotI2RlZmluZSBTQVNfRU5EX0RFVl9BVFRSUwkzCi0jZGVmaW5lIFNBU19FWFBBTkRFUl9BVFRSUwk3Ci0KLXN0cnVjdCBzYXNfaW50ZXJuYWwgewotCXN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSB0OwotCXN0cnVjdCBzYXNfZnVuY3Rpb25fdGVtcGxhdGUgKmY7Ci0KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2hvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3JwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2VuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTXTsKLQotCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHBoeV9hdHRyX2NvbnQ7Ci0Jc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcnBoeV9hdHRyX2NvbnQ7Ci0Jc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZW5kX2Rldl9hdHRyX2NvbnQ7Ci0Jc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZXhwYW5kZXJfYXR0cl9jb250OwotCi0JLyoKLQkgKiBUaGUgYXJyYXkgb2YgbnVsbCB0ZXJtaW5hdGVkIHBvaW50ZXJzIHRvIGF0dHJpYnV0ZXMKLQkgKiBuZWVkZWQgYnkgc2NzaV9zeXNmcy5jCi0JICovCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTICsgMV07Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnJwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTICsgMV07Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmVuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTICsgMV07Ci19OwotI2RlZmluZSB0b19zYXNfaW50ZXJuYWwodG1wbCkJY29udGFpbmVyX29mKHRtcGwsIHN0cnVjdCBzYXNfaW50ZXJuYWwsIHQpCi0KKyNpbmNsdWRlICJzY3NpX3Nhc19pbnRlcm5hbC5oIgogc3RydWN0IHNhc19ob3N0X2F0dHJzIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJwaHlfbGlzdDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKQEAgLTQwNiw4ICszNzMsNiBAQAogCWlmICghcGh5KQogCQlyZXR1cm4gTlVMTDsKIAotCWdldF9kZXZpY2UocGFyZW50KTsKLQogCXBoeS0+bnVtYmVyID0gbnVtYmVyOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJnBoeS0+ZGV2KTsKQEAgLTQ1OSwxMCArNDI0LDcgQEAKIHZvaWQgc2FzX3BoeV9mcmVlKHN0cnVjdCBzYXNfcGh5ICpwaHkpCiB7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZwaHktPmRldik7Ci0JcHV0X2RldmljZShwaHktPmRldi5wYXJlbnQpOwotCXB1dF9kZXZpY2UocGh5LT5kZXYucGFyZW50KTsKLQlwdXRfZGV2aWNlKHBoeS0+ZGV2LnBhcmVudCk7Ci0Ja2ZyZWUocGh5KTsKKwlwdXRfZGV2aWNlKCZwaHktPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNhc19waHlfZnJlZSk7CiAKQEAgLTQ4NCw3ICs0NDYsNyBAQAogCXRyYW5zcG9ydF9yZW1vdmVfZGV2aWNlKGRldik7CiAJZGV2aWNlX2RlbChkZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOwotCXB1dF9kZXZpY2UoZGV2LT5wYXJlbnQpOworCXB1dF9kZXZpY2UoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3BoeV9kZWxldGUpOwogCkBAIC04MDAsNyArNzYyLDYgQEAKIAogCXJkZXYgPSBremFsbG9jKHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOwogCWlmICghcmRldikgewotCQlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtODM2LDcgKzc5Nyw2IEBACiAKIAlyZGV2ID0ga3phbGxvYyhzaXplb2YoKnJkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJkZXYpIHsKLQkJcHV0X2RldmljZSgmcGFyZW50LT5kZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTg4NSw2ICs4NDUsOCBAQAogCSAgICAoaWRlbnRpZnktPnRhcmdldF9wb3J0X3Byb3RvY29scyAmCiAJICAgICAoU0FTX1BST1RPQ09MX1NTUHxTQVNfUFJPVE9DT0xfU1RQfFNBU19QUk9UT0NPTF9TQVRBKSkpCiAJCXJwaHktPnNjc2lfdGFyZ2V0X2lkID0gc2FzX2hvc3QtPm5leHRfdGFyZ2V0X2lkKys7CisJZWxzZSBpZiAoaWRlbnRpZnktPmRldmljZV90eXBlID09IFNBU19FTkRfREVWSUNFKQorCQlycGh5LT5zY3NpX3RhcmdldF9pZCA9IC0xOwogCW11dGV4X3VubG9jaygmc2FzX2hvc3QtPmxvY2spOwogCiAJaWYgKGlkZW50aWZ5LT5kZXZpY2VfdHlwZSA9PSBTQVNfRU5EX0RFVklDRSAmJgpAQCAtOTEwLDYgKzg3Miw3IEBACiAgKi8KIHZvaWQgc2FzX3JwaHlfZnJlZShzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkpCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnJwaHktPmRldjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChycGh5LT5kZXYucGFyZW50LT5wYXJlbnQpOwogCXN0cnVjdCBzYXNfaG9zdF9hdHRycyAqc2FzX2hvc3QgPSB0b19zYXNfaG9zdF9hdHRycyhzaG9zdCk7CiAKQEAgLTkxNywyMSArODgwLDkgQEAKIAlsaXN0X2RlbCgmcnBoeS0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZzYXNfaG9zdC0+bG9jayk7CiAKLQl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnJwaHktPmRldik7Ci0JcHV0X2RldmljZShycGh5LT5kZXYucGFyZW50KTsKLQlwdXRfZGV2aWNlKHJwaHktPmRldi5wYXJlbnQpOwotCXB1dF9kZXZpY2UocnBoeS0+ZGV2LnBhcmVudCk7Ci0JaWYgKHJwaHktPmlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FTkRfREVWSUNFKSB7Ci0JCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqZWRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsKKwl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKIAotCQlrZnJlZShlZGV2KTsKLQl9IGVsc2UgewotCQkvKiBtdXN0IGJlIGV4cGFuZGVyICovCi0JCXN0cnVjdCBzYXNfZXhwYW5kZXJfZGV2aWNlICplZGV2ID0KLQkJCXJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHJwaHkpOwotCi0JCWtmcmVlKGVkZXYpOwotCX0KKwlwdXRfZGV2aWNlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNhc19ycGh5X2ZyZWUpOwogCkBAIC05NzEsNyArOTIyLDcgQEAKIAogCXBhcmVudC0+cnBoeSA9IE5VTEw7CiAKLQlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CisJcHV0X2RldmljZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChzYXNfcnBoeV9kZWxldGUpOwogCkBAIC0xMDA0LDcgKzk1NSw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShycGh5LCAmc2FzX2hvc3QtPnJwaHlfbGlzdCwgbGlzdCkgewogCQlzdHJ1Y3Qgc2FzX3BoeSAqcGFyZW50ID0gZGV2X3RvX3BoeShycGh5LT5kZXYucGFyZW50KTsKIAotCQlpZiAocnBoeS0+c2NzaV90YXJnZXRfaWQgPT0gLTEpCisJCWlmIChycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSB8fAorCQkgICAgcnBoeS0+c2NzaV90YXJnZXRfaWQgPT0gLTEpCiAJCQljb250aW51ZTsKIAogCQlpZiAoKGNoYW5uZWwgPT0gU0NBTl9XSUxEX0NBUkQgfHwgY2hhbm5lbCA9PSBwYXJlbnQtPnBvcnRfaWRlbnRpZmllcikgJiYKQEAgLTEwMjYsNyArOTc4LDYgQEAKICNkZWZpbmUgU0VUVVBfVEVNUExBVEUoYXR0cmIsIGZpZWxkLCBwZXJtLCB0ZXN0KQkJCQlcCiAJaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyXyMjZmllbGQ7CQlcCiAJaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XS5hdHRyLm1vZGUgPSBwZXJtOwkJCVwKLQlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdLnN0b3JlID0gTlVMTDsJCQkJXAogCWktPmF0dHJiW2NvdW50XSA9ICZpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdOwkJCVwKIAlpZiAodGVzdCkJCQkJCQkJXAogCQljb3VudCsrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDc0MDVkMGQuLmIwOTg5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC03NDgsNiArNzQ4LDcgQEAKIAkJLyoKIAkJICogbW9zdCBsaWtlbHkgb3V0IG9mIG1lbSwgYnV0IGNvdWxkIGFsc28gYmUgYSBiYWQgbWFwCiAJCSAqLworCQlzZ19maW5pc2hfcmVtX3JlcShzcnApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CkBAIC0xMDQ0LDcgKzEwNDUsNyBAQAogCQkJaWYgKCFzZ19hbGxvd19hY2Nlc3Mob3Bjb2RlLCBzZHAtPmRldmljZS0+dHlwZSkpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlyZXR1cm4gc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoc2RwLT5kZXZpY2UsIHApOworCQlyZXR1cm4gc2dfc2NzaV9pb2N0bChmaWxwLCBzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSwgTlVMTCwgcCk7CiAJY2FzZSBTR19TRVRfREVCVUc6CiAJCXJlc3VsdCA9IGdldF91c2VyKHZhbCwgaXApOwogCQlpZiAocmVzdWx0KQpAQCAtMTc5OCw4ICsxNzk5LDEwIEBACiAJcmVzID0gc3RfbWFwX3VzZXJfcGFnZXMoc2NocC0+YnVmZmVyLCBteF9zY19lbGVtcywKIAkJCQkodW5zaWduZWQgbG9uZylocC0+ZHhmZXJwLCBkeGZlcl9sZW4sIAogCQkJCShTR19EWEZFUl9UT19ERVYgPT0gaHAtPmR4ZmVyX2RpcmVjdGlvbikgPyAxIDogMCk7Ci0JaWYgKHJlcyA8PSAwKQorCWlmIChyZXMgPD0gMCkgeworCQlzZ19yZW1vdmVfc2NhdChzY2hwKTsKIAkJcmV0dXJuIDE7CisJfQogCXNjaHAtPmtfdXNlX3NnID0gcmVzOwogCXNjaHAtPmRpb19pbl91c2UgPSAxOwogCWhwLT5pbmZvIHw9IFNHX0lORk9fRElSRUNUX0lPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NpbTcxMC5jIGIvZHJpdmVycy9zY3NpL3NpbTcxMC5jCmluZGV4IDMyNzRhYjcuLjI1NTg4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zaW03MTAuYworKysgYi9kcml2ZXJzL3Njc2kvc2ltNzEwLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJZWxzZSBpZighc3RybmNtcChwb3MsICJpZDoiLCAzKSkgewogCQkJaWYoc2xvdCA9PSAtMSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNpbTcxMDogTXVzdCBzcGVjaWZ5IHNsb3QgZm9yIGlkIHBhcmFtZXRlclxuIik7Ci0JCQl9IGVsc2UgaWYoc2xvdCA+IE1BWF9TTE9UUykgeworCQkJfSBlbHNlIGlmKHNsb3QgPj0gTUFYX1NMT1RTKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2ltNzEwOiBJbGxlZ2FsIHNsb3QgJWQgZm9yIGlkICVkXG4iLCBzbG90LCB2YWwpOwogCQkJfSBlbHNlIHsKIAkJCQlpZF9hcnJheVtzbG90XSA9IHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggZDQwZTdjOC4uNTZjYjQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTQwNTQsNyArNDA1NCw3IEBACiAJfQogCiAJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBTRHAsCi0JCSAgICAiQXR0YWNoZWQgc2NzaSB0YXBlICVzIiwgdGFwZV9uYW1lKHRwbnQpKTsKKwkJICAgICJBdHRhY2hlZCBzY3NpIHRhcGUgJXNcbiIsIHRhcGVfbmFtZSh0cG50KSk7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyeSBkaXJlY3QgaS9vOiAlcyAoYWxpZ25tZW50ICVkIEIpXG4iLAogCSAgICAgICB0YXBlX25hbWUodHBudCksIHRwbnQtPnRyeV9kaW8gPyAieWVzIiA6ICJubyIsCiAJICAgICAgIHF1ZXVlX2RtYV9hbGlnbm1lbnQoU0RwLT5yZXF1ZXN0X3F1ZXVlKSArIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9kZWZzLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2RlZnMuaAppbmRleCAzNjU5ZGQ3Yi4uZGVmY2NjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9kZWZzLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpZm5kZWYgU1lNX0RFRlNfSAogI2RlZmluZSBTWU1fREVGU19ICiAKLSNkZWZpbmUgU1lNX1ZFUlNJT04gIjIuMi4yIgorI2RlZmluZSBTWU1fVkVSU0lPTiAiMi4yLjMiCiAjZGVmaW5lIFNZTV9EUklWRVJfTkFNRQkic3ltLSIgU1lNX1ZFUlNJT04KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKaW5kZXggMWZmZmQyYi4uOWM4M2I0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKQEAgLTEzNCw2NiArMTM0LDE3IEBACiAJfQogfQogCi0vKgotICogV2UgdXNlZCB0byB0cnkgdG8gZGVhbCB3aXRoIDY0LWJpdCBCQVJzIGhlcmUsIGJ1dCBkb24ndCBhbnkgbW9yZS4KLSAqIFRoZXJlIGFyZSBtYW55IHBhcnRzIG9mIHRoaXMgZHJpdmVyIHdoaWNoIHdvdWxkIG5lZWQgdG8gYmUgbW9kaWZpZWQKLSAqIHRvIGhhbmRsZSBhIDY0LWJpdCBiYXNlIGFkZHJlc3MsIGluY2x1ZGluZyBzY3JpcHRzLiAgSSdtIHVuY29tZm9ydGFibGUKLSAqIHdpdGggbWFraW5nIHRob3NlIGNoYW5nZXMgd2hlbiBJIGhhdmUgbm8gd2F5IG9mIHRlc3RpbmcgaXQsIHNvIEknbQotICoganVzdCBnb2luZyB0byBkaXNhYmxlIGl0LgotICoKLSAqIE5vdGUgdGhhdCBzb21lIG1hY2hpbmVzIChlZyBIUCByeDg2MjAgYW5kIFN1cGVyZG9tZSkgaGF2ZSBidXMgYWRkcmVzc2VzCi0gKiBiZWxvdyA0R0IgYW5kIHBoeXNpY2FsIGFkZHJlc3NlcyBhYm92ZSA0R0IuICBUaGVzZSB3aWxsIGNvbnRpbnVlIHRvIHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1wY2lfZ2V0X2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1bnNpZ25lZCBsb25nICpiYXNlcCkKLXsKLQl1MzIgdG1wOwotCXVuc2lnbmVkIGxvbmcgYmFzZTsKLSNkZWZpbmUgUENJX0JBUl9PRkZTRVQoaW5kZXgpIChQQ0lfQkFTRV9BRERSRVNTXzAgKyAoaW5kZXg8PDIpKQotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9CQVJfT0ZGU0VUKGluZGV4KyspLCAmdG1wKTsKLQliYXNlID0gdG1wOwotCWlmICgodG1wICYgMHg3KSA9PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQkFSX09GRlNFVChpbmRleCsrKSwgJnRtcCk7Ci0JCWlmICh0bXAgPiAwKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIkJBUiAlZCBpcyA2NC1iaXQsIGRpc2FibGluZ1xuIiwgaW5kZXggLSAxKTsKLQkJCWJhc2UgPSAwOwotCQl9Ci0JfQotCi0JaWYgKChiYXNlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgPT0gUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgewotCQliYXNlICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQl9IGVsc2UgewotCQliYXNlICY9IFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JfQotCi0JKmJhc2VwID0gYmFzZTsKLQlyZXR1cm4gaW5kZXg7Ci0jdW5kZWYgUENJX0JBUl9PRkZTRVQKLX0KLQogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqc3ltMl90cmFuc3BvcnRfdGVtcGxhdGUgPSBOVUxMOwogCiAvKgotICogIFVzZWQgYnkgdGhlIGVoIHRocmVhZCB0byB3YWl0IGZvciBjb21tYW5kIGNvbXBsZXRpb24uCi0gKiAgSXQgaXMgYWxsb2NhdGVkIG9uIHRoZSBlaCB0aHJlYWQgc3RhY2suCi0gKi8KLXN0cnVjdCBzeW1fZWhfd2FpdCB7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQl2b2lkICgqb2xkX2RvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKik7Ci0JaW50IHRvX2RvOwotCWludCB0aW1lZF9vdXQ7Ci19OwotCi0vKgogICogIERyaXZlciBwcml2YXRlIGFyZWEgaW4gdGhlIFNDU0kgY29tbWFuZCBzdHJ1Y3R1cmUuCiAgKi8KIHN0cnVjdCBzeW1fdWNtZCB7CQkvKiBPdmVycmlkZSB0aGUgU0NTSSBwb2ludGVyIHN0cnVjdHVyZSAqLwotCWRtYV9hZGRyX3QgZGF0YV9tYXBwaW5nOwotCXVfY2hhcglkYXRhX21hcHBlZDsKLQlzdHJ1Y3Qgc3ltX2VoX3dhaXQgKmVoX3dhaXQ7CisJZG1hX2FkZHJfdAlkYXRhX21hcHBpbmc7CisJdW5zaWduZWQgY2hhcglkYXRhX21hcHBlZDsKKwl1bnNpZ25lZCBjaGFyCXRvX2RvOwkJCS8qIEZvciBlcnJvciBoYW5kbGluZyAqLworCXZvaWQgKCpvbGRfZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKTsJLyogRm9yIGVycm9yIGhhbmRsaW5nICovCisJc3RydWN0IGNvbXBsZXRpb24gKmVoX2RvbmU7CQkvKiBGb3IgZXJyb3IgaGFuZGxpbmcgKi8KIH07CiAKICNkZWZpbmUgU1lNX1VDTURfUFRSKGNtZCkgICgoc3RydWN0IHN5bV91Y21kICopKCYoY21kKS0+U0NwKSkKQEAgLTUxNCw4ICs0NjUsNiBAQAogICovCiBpbnQgc3ltX3NldHVwX2RhdGFfYW5kX3N0YXJ0KHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHNjc2lfY21uZCAqY21kLCBzdHJ1Y3Qgc3ltX2NjYiAqY3ApCiB7Ci0Jc3RydWN0IHN5bV90Y2IgKnRwID0gJm5wLT50YXJnZXRbY3AtPnRhcmdldF07Ci0Jc3RydWN0IHN5bV9sY2IgKmxwID0gc3ltX2xwKHRwLCBjcC0+bHVuKTsKIAl1MzIgbGFzdHAsIGdvYWxwOwogCWludCBkaXI7CiAKQEAgLTU5Niw3ICs1NDUsNyBAQAogCS8qCiAJICoJYWN0aXZhdGUgdGhpcyBqb2IuCiAJICovCi0Jc3ltX3N0YXJ0X25leHRfY2NicyhucCwgbHAsIDIpOworCXN5bV9wdXRfc3RhcnRfcXVldWUobnAsIGNwKTsKIAlyZXR1cm4gMDsKIAogb3V0X2Fib3J0OgpAQCAtNzUxLDgwICs3MDAsNTQgQEAKICAqICBXaGF0IHdlIHdpbGwgZG8gcmVnYXJkaW5nIHRoZSBpbnZvbHZlZCBTQ1NJIGNvbW1hbmQuCiAgKi8KICNkZWZpbmUgU1lNX0VIX0RPX0lHTk9SRQkwCi0jZGVmaW5lIFNZTV9FSF9ET19DT01QTEVURQkxCiAjZGVmaW5lIFNZTV9FSF9ET19XQUlUCQkyCiAKIC8qCi0gKiAgT3VyIGdlbmVyYWwgY29tcGxldGlvbiBoYW5kbGVyLgorICogIHNjc2lfZG9uZSgpIGFsaWFzIHdoZW4gZXJyb3IgcmVjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9fc3ltX2VoX2RvbmUoc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgdGltZWRfb3V0KQorc3RhdGljIHZvaWQgc3ltX2VoX2RvbmUoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCXN0cnVjdCBzeW1fZWhfd2FpdCAqZXAgPSBTWU1fVUNNRF9QVFIoY21kKS0+ZWhfd2FpdDsKLQlpZiAoIWVwKQotCQlyZXR1cm47CisJc3RydWN0IHN5bV91Y21kICp1Y21kID0gU1lNX1VDTURfUFRSKGNtZCk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2NzaV9wb2ludGVyKSA8IHNpemVvZihzdHJ1Y3Qgc3ltX3VjbWQpKTsKIAotCS8qIFRyeSB0byBhdm9pZCBhIHJhY2UgaGVyZSAobm90IDEwMCUgc2FmZSkgKi8KLQlpZiAoIXRpbWVkX291dCkgewotCQllcC0+dGltZWRfb3V0ID0gMDsKLQkJaWYgKGVwLT50b19kbyA9PSBTWU1fRUhfRE9fV0FJVCAmJiAhZGVsX3RpbWVyKCZlcC0+dGltZXIpKQotCQkJcmV0dXJuOwotCX0KKwljbWQtPnNjc2lfZG9uZSA9IHVjbWQtPm9sZF9kb25lOwogCi0JLyogUmV2ZXJ0IGV2ZXJ5dGhpbmcgKi8KLQlTWU1fVUNNRF9QVFIoY21kKS0+ZWhfd2FpdCA9IE5VTEw7Ci0JY21kLT5zY3NpX2RvbmUgPSBlcC0+b2xkX2RvbmU7Ci0KLQkvKiBXYWtlIHVwIHRoZSBlaCB0aHJlYWQgaWYgaXQgd2FudHMgdG8gc2xlZXAgKi8KLQlpZiAoZXAtPnRvX2RvID09IFNZTV9FSF9ET19XQUlUKQotCQljb21wbGV0ZSgmZXAtPmRvbmUpOworCWlmICh1Y21kLT50b19kbyA9PSBTWU1fRUhfRE9fV0FJVCkKKwkJY29tcGxldGUodWNtZC0+ZWhfZG9uZSk7CiB9CiAKIC8qCi0gKiAgc2NzaV9kb25lKCkgYWxpYXMgd2hlbiBlcnJvciByZWNvdmVyeSBpcyBpbiBwcm9ncmVzcy4gCi0gKi8KLXN0YXRpYyB2b2lkIHN5bV9laF9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkgeyBfX3N5bV9laF9kb25lKGNtZCwgMCk7IH0KLQotLyoKLSAqICBTb21lIHRpbWVvdXQgaGFuZGxlciB0byBhdm9pZCB3YWl0aW5nIHRvbyBsb25nLgotICovCi1zdGF0aWMgdm9pZCBzeW1fZWhfdGltZW91dCh1X2xvbmcgcCkgeyBfX3N5bV9laF9kb25lKChzdHJ1Y3Qgc2NzaV9jbW5kICopcCwgMSk7IH0KLQotLyoKICAqICBHZW5lcmljIG1ldGhvZCBmb3Igb3VyIGVoIHByb2Nlc3NpbmcuCiAgKiAgVGhlICdvcCcgYXJndW1lbnQgdGVsbHMgd2hhdCB3ZSBoYXZlIHRvIGRvLgogICovCiBzdGF0aWMgaW50IHN5bV9laF9oYW5kbGVyKGludCBvcCwgY2hhciAqb3BuYW1lLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHN5bV9oY2IgKm5wID0gU1lNX1NPRlRDX1BUUihjbWQpOworCXN0cnVjdCBzeW1fdWNtZCAqdWNtZCA9IFNZTV9VQ01EX1BUUihjbWQpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlTWU1fUVVFSEVBRCAqcXA7CiAJaW50IHRvX2RvID0gU1lNX0VIX0RPX0lHTk9SRTsKIAlpbnQgc3RzID0gLTE7Ci0Jc3RydWN0IHN5bV9laF93YWl0IGVoLCAqZXAgPSAmZWg7CisJc3RydWN0IGNvbXBsZXRpb24gZWhfZG9uZTsKIAogCWRldl93YXJuKCZjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYsICIlcyBvcGVyYXRpb24gc3RhcnRlZC5cbiIsIG9wbmFtZSk7CiAKKwlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CiAJLyogVGhpcyBvbmUgaXMgcXVldWVkIGluIHNvbWUgcGxhY2UgLT4gdG8gd2FpdCBmb3IgY29tcGxldGlvbiAqLwogCUZPUl9FQUNIX1FVRVVFRF9FTEVNRU5UKCZucC0+YnVzeV9jY2JxLCBxcCkgewogCQlzdHJ1Y3Qgc3ltX2NjYiAqY3AgPSBzeW1fcXVlX2VudHJ5KHFwLCBzdHJ1Y3Qgc3ltX2NjYiwgbGlua19jY2JxKTsKIAkJaWYgKGNwLT5jbWQgPT0gY21kKSB7CiAJCQl0b19kbyA9IFNZTV9FSF9ET19XQUlUOwotCQkJZ290byBwcmVwYXJlOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKLXByZXBhcmU6Ci0JLyogUHJlcGFyZSBzdHVmZiB0byBlaXRoZXIgaWdub3JlLCBjb21wbGV0ZSBvciB3YWl0IGZvciBjb21wbGV0aW9uICovCi0Jc3dpdGNoKHRvX2RvKSB7Ci0JZGVmYXVsdDoKLQljYXNlIFNZTV9FSF9ET19JR05PUkU6Ci0JCWJyZWFrOwotCWNhc2UgU1lNX0VIX0RPX1dBSVQ6Ci0JCWluaXRfY29tcGxldGlvbigmZXAtPmRvbmUpOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFNZTV9FSF9ET19DT01QTEVURToKLQkJZXAtPm9sZF9kb25lID0gY21kLT5zY3NpX2RvbmU7CisJaWYgKHRvX2RvID09IFNZTV9FSF9ET19XQUlUKSB7CisJCWluaXRfY29tcGxldGlvbigmZWhfZG9uZSk7CisJCXVjbWQtPm9sZF9kb25lID0gY21kLT5zY3NpX2RvbmU7CisJCXVjbWQtPmVoX2RvbmUgPSAmZWhfZG9uZTsKKwkJd21iKCk7CiAJCWNtZC0+c2NzaV9kb25lID0gc3ltX2VoX2RvbmU7Ci0JCVNZTV9VQ01EX1BUUihjbWQpLT5laF93YWl0ID0gZXA7CiAJfQogCiAJLyogVHJ5IHRvIHByb2NlZWQgdGhlIG9wZXJhdGlvbiB3ZSBoYXZlIGJlZW4gYXNrZWQgZm9yICovCkBAIC04NTEsMjkgKzc3NCwxOSBAQAogCiAJLyogT24gZXJyb3IsIHJlc3RvcmUgZXZlcnl0aGluZyBhbmQgY3Jvc3MgZmluZ2VycyA6KSAqLwogCWlmIChzdHMpIHsKLQkJU1lNX1VDTURfUFRSKGNtZCktPmVoX3dhaXQgPSBOVUxMOwotCQljbWQtPnNjc2lfZG9uZSA9IGVwLT5vbGRfZG9uZTsKKwkJY21kLT5zY3NpX2RvbmUgPSB1Y21kLT5vbGRfZG9uZTsKIAkJdG9fZG8gPSBTWU1fRUhfRE9fSUdOT1JFOwogCX0KIAotCWVwLT50b19kbyA9IHRvX2RvOwotCS8qIENvbXBsZXRlIHRoZSBjb21tYW5kIHdpdGggbG9ja3MgaGVsZCBhcyByZXF1aXJlZCBieSB0aGUgZHJpdmVyICovCi0JaWYgKHRvX2RvID09IFNZTV9FSF9ET19DT01QTEVURSkKLQkJc3ltX3hwdF9kb25lMihucCwgY21kLCBESURfQUJPUlQpOworCXVjbWQtPnRvX2RvID0gdG9fZG87CisJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CiAKLQkvKiBXYWl0IGZvciBjb21wbGV0aW9uIHdpdGggbG9ja3MgcmVsZWFzZWQsIGFzIHJlcXVpcmVkIGJ5IGtlcm5lbCAqLwogCWlmICh0b19kbyA9PSBTWU1fRUhfRE9fV0FJVCkgewotCQlpbml0X3RpbWVyKCZlcC0+dGltZXIpOwotCQllcC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoNSpIWik7Ci0JCWVwLT50aW1lci5mdW5jdGlvbiA9IHN5bV9laF90aW1lb3V0OwotCQllcC0+dGltZXIuZGF0YSA9ICh1X2xvbmcpY21kOwotCQllcC0+dGltZWRfb3V0ID0gMTsJLyogQmUgcGVzc2ltaXN0aWMgZm9yIG9uY2UgOikgKi8KLQkJYWRkX3RpbWVyKCZlcC0+dGltZXIpOwotCQlzcGluX3VubG9ja19pcnEobnAtPnMuaG9zdC0+aG9zdF9sb2NrKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmZXAtPmRvbmUpOwotCQlzcGluX2xvY2tfaXJxKG5wLT5zLmhvc3QtPmhvc3RfbG9jayk7Ci0JCWlmIChlcC0+dGltZWRfb3V0KQorCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZWhfZG9uZSwgNSpIWikpIHsKKwkJCXVjbWQtPnRvX2RvID0gU1lNX0VIX0RPX0lHTk9SRTsKKwkJCXdtYigpOwogCQkJc3RzID0gLTI7CisJCX0KIAl9CiAJZGV2X3dhcm4oJmNtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldiwgIiVzIG9wZXJhdGlvbiAlcy5cbiIsIG9wbmFtZSwKIAkJCXN0cz09MCA/ICJjb21wbGV0ZSIgOnN0cz09LTIgPyAidGltZWQtb3V0IiA6ICJmYWlsZWQiKTsKQEAgLTg4Niw0NiArNzk5LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgc3ltNTNjOHh4X2VoX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCWludCByYzsKLQotCXNwaW5fbG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBzeW1fZWhfaGFuZGxlcihTWU1fRUhfQUJPUlQsICJBQk9SVCIsIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBzeW1fZWhfaGFuZGxlcihTWU1fRUhfQUJPUlQsICJBQk9SVCIsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgc3ltNTNjOHh4X2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlpbnQgcmM7Ci0KLQlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXJjID0gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0RFVklDRV9SRVNFVCwgIkRFVklDRSBSRVNFVCIsIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBzeW1fZWhfaGFuZGxlcihTWU1fRUhfREVWSUNFX1JFU0VULCAiREVWSUNFIFJFU0VUIiwgY21kKTsKIH0KIAogc3RhdGljIGludCBzeW01M2M4eHhfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCWludCByYzsKLQotCXNwaW5fbG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBzeW1fZWhfaGFuZGxlcihTWU1fRUhfQlVTX1JFU0VULCAiQlVTIFJFU0VUIiwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHN5bV9laF9oYW5kbGVyKFNZTV9FSF9CVVNfUkVTRVQsICJCVVMgUkVTRVQiLCBjbWQpOwogfQogCiBzdGF0aWMgaW50IHN5bTUzYzh4eF9laF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCWludCByYzsKLQotCXNwaW5fbG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBzeW1fZWhfaGFuZGxlcihTWU1fRUhfSE9TVF9SRVNFVCwgIkhPU1QgUkVTRVQiLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCXJldHVybiByYzsKKwlyZXR1cm4gc3ltX2VoX2hhbmRsZXIoU1lNX0VIX0hPU1RfUkVTRVQsICJIT1NUIFJFU0VUIiwgY21kKTsKIH0KIAogLyoKQEAgLTk0NCwxNSArODMzLDEyIEBACiAJaWYgKHJlcXRhZ3MgPiBscC0+cy5zY2Rldl9kZXB0aCkKIAkJcmVxdGFncyA9IGxwLT5zLnNjZGV2X2RlcHRoOwogCi0JbHAtPnN0YXJ0ZWRfbGltaXQgPSByZXF0YWdzID8gcmVxdGFncyA6IDI7Ci0JbHAtPnN0YXJ0ZWRfbWF4ICAgPSAxOwogCWxwLT5zLnJlcXRhZ3MgICAgID0gcmVxdGFnczsKIAogCWlmIChyZXF0YWdzICE9IG9sZHRhZ3MpIHsKIAkJZGV2X2luZm8oJnRwLT5zdGFyZ2V0LT5kZXYsCiAJCSAgICAgICAgICJ0YWdnZWQgY29tbWFuZCBxdWV1aW5nICVzLCBjb21tYW5kIHF1ZXVlIGRlcHRoICVkLlxuIiwKLQkJICAgICAgICAgIGxwLT5zLnJlcXRhZ3MgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotIAkJICAgICAgICAgIGxwLT5zdGFydGVkX2xpbWl0KTsKKwkJICAgICAgICAgIGxwLT5zLnJlcXRhZ3MgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCByZXF0YWdzKTsKIAl9CiB9CiAKQEAgLTE4NjYsMTUgKzE3NTIsMjUgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdAogc3ltX2luaXRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc3ltX2RldmljZSAqZGV2aWNlKQogewotCWludCBpOworCWludCBpID0gMjsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gYnVzX2FkZHI7CiAKIAlkZXZpY2UtPmhvc3RfaWQgPSBTWU1fU0VUVVBfSE9TVF9JRDsKIAlkZXZpY2UtPnBkZXYgPSBwZGV2OwogCi0JaSA9IHBjaV9nZXRfYmFzZV9hZGRyZXNzKHBkZXYsIDEsICZkZXZpY2UtPm1taW9fYmFzZSk7Ci0JcGNpX2dldF9iYXNlX2FkZHJlc3MocGRldiwgaSwgJmRldmljZS0+cmFtX2Jhc2UpOworCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHBkZXYsICZidXNfYWRkciwgJnBkZXYtPnJlc291cmNlWzFdKTsKKwlkZXZpY2UtPm1taW9fYmFzZSA9IGJ1c19hZGRyLnN0YXJ0OwogCi0jaWZuZGVmIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRAorCS8qCisJICogSWYgdGhlIEJBUiBpcyA2NC1iaXQsIHJlc291cmNlIDIgd2lsbCBiZSBvY2N1cGllZCBieSB0aGUKKwkgKiB1cHBlciAzMiBiaXRzCisJICovCisJaWYgKCFwZGV2LT5yZXNvdXJjZVtpXS5mbGFncykKKwkJaSsrOworCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHBkZXYsICZidXNfYWRkciwgJnBkZXYtPnJlc291cmNlW2ldKTsKKwlkZXZpY2UtPnJhbV9iYXNlID0gYnVzX2FkZHIuc3RhcnQ7CisKKyNpZmRlZiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTwogCWlmIChkZXZpY2UtPm1taW9fYmFzZSkKIAkJZGV2aWNlLT5zLmlvYWRkciA9IHBjaV9pb21hcChwZGV2LCAxLAogCQkJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CkBAIC0xOTc4LDcgKzE4NzQsOCBAQAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHN5bTUzYzh4eF9laF9idXNfcmVzZXRfaGFuZGxlciwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gc3ltNTNjOHh4X2VoX2hvc3RfcmVzZXRfaGFuZGxlciwKIAkudGhpc19pZAkJPSA3LAotCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCisJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5tYXhfc2VjdG9ycwkJPSAweEZGRkYsCiAjaWZkZWYgU1lNX0xJTlVYX1BST0NfSU5GT19TVVBQT1JUCiAJLnByb2NfaW5mbwkJPSBzeW01M2M4eHhfcHJvY19pbmZvLAogCS5wcm9jX25hbWUJCT0gTkFNRTUzQzhYWCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmgKaW5kZXggY2M5MmQwYy4uYTQ0NmNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmgKQEAgLTY4LDcgKzY4LDcgQEAKICAqLwogI2RlZmluZQlTWU1fQ09ORl9USU1FUl9JTlRFUlZBTAkJKChIWisxKS8yKQogCi0jZGVmaW5lIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORworI3VuZGVmIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwogI2RlZmluZSBTWU1fT1BUX0xJTUlUX0NPTU1BTkRfUkVPUkRFUklORwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYwppbmRleCA2MDg1MGNiLi5hNjcxYmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYwpAQCAtNzIsNyArNzIsMTAgQEAKIAogc3RhdGljIHZvaWQgc3ltX3ByaW50X21zZyhzdHJ1Y3Qgc3ltX2NjYiAqY3AsIGNoYXIgKmxhYmVsLCB1X2NoYXIgKm1zZykKIHsKLQlzeW1fcHJpbnRfYWRkcihjcC0+Y21kLCAiJXM6ICIsIGxhYmVsKTsKKwlpZiAobGFiZWwpCisJCXN5bV9wcmludF9hZGRyKGNwLT5jbWQsICIlczogIiwgbGFiZWwpOworCWVsc2UKKwkJc3ltX3ByaW50X2FkZHIoY3AtPmNtZCwgIiIpOwogCiAJc3BpX3ByaW50X21zZyhtc2cpOwogCXByaW50ZigiXG4iKTsKQEAgLTQ3Miw3ICs0NzUsNyBAQAogICogIGNhbGN1bGF0aW9ucyBtb3JlIHNpbXBsZS4KICAqLwogI2RlZmluZSBfNU0gNTAwMDAwMAotc3RhdGljIHUzMiBkaXZfMTBNW10gPSB7MipfNU0sIDMqXzVNLCA0Kl81TSwgNipfNU0sIDgqXzVNLCAxMipfNU0sIDE2Kl81TX07CitzdGF0aWMgY29uc3QgdTMyIGRpdl8xME1bXSA9IHsyKl81TSwgMypfNU0sIDQqXzVNLCA2Kl81TSwgOCpfNU0sIDEyKl81TSwgMTYqXzVNfTsKIAogLyoKICAqICBHZXQgY2xvY2sgZmFjdG9yIGFuZCBzeW5jIGRpdmlzb3IgZm9yIGEgZ2l2ZW4gCkBAIC02NDUsNiArNjQ4LDM3IEBACiB9CiAKIC8qCisgKiAgU2V0IFNDU0kgQlVTIG1vZGUuCisgKiAgLSBMVkQgY2FwYWJsZSBjaGlwcyAoODk1Lzg5NUEvODk2LzEwMTApIHJlcG9ydCB0aGUgY3VycmVudCBCVVMgbW9kZQorICogICAgdGhyb3VnaCB0aGUgU1RFU1Q0IElPIHJlZ2lzdGVyLgorICogIC0gRm9yIHByZXZpb3VzIGdlbmVyYXRpb24gY2hpcHMgKDgyNS84MjVBLzg3NSksIHRoZSB1c2VyIGhhcyB0byB0ZWxsIHVzCisgKiAgICBob3cgdG8gY2hlY2sgYWdhaW5zdCBIVkQsIHNpbmNlIGEgMTAwJSBzYWZlIGFsZ29yaXRobSBpcyBub3QgcG9zc2libGUuCisgKi8KK3N0YXRpYyB2b2lkIHN5bV9zZXRfYnVzX21vZGUoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX252cmFtICpudnJhbSkKK3sKKwlpZiAobnAtPnNjc2lfbW9kZSkKKwkJcmV0dXJuOworCisJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX1NFOworCWlmIChucC0+ZmVhdHVyZXMgJiAoRkVfVUxUUkEyfEZFX1VMVFJBMykpCisJCW5wLT5zY3NpX21vZGUgPSAobnAtPnN2X3N0ZXN0NCAmIFNNT0RFKTsKKwllbHNlIGlmCShucC0+ZmVhdHVyZXMgJiBGRV9ESUZGKSB7CisJCWlmIChTWU1fU0VUVVBfU0NTSV9ESUZGID09IDEpIHsKKwkJCWlmIChucC0+c3Zfc2NudGwzKSB7CisJCQkJaWYgKG5wLT5zdl9zdGVzdDIgJiAweDIwKQorCQkJCQlucC0+c2NzaV9tb2RlID0gU01PREVfSFZEOworCQkJfSBlbHNlIGlmIChudnJhbS0+dHlwZSA9PSBTWU1fU1lNQklPU19OVlJBTSkgeworCQkJCWlmICghKElOQihucCwgbmNfZ3ByZWcpICYgMHgwOCkpCisJCQkJCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9IVkQ7CisJCQl9CisJCX0gZWxzZSBpZiAoU1lNX1NFVFVQX1NDU0lfRElGRiA9PSAyKQorCQkJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX0hWRDsKKwl9CisJaWYgKG5wLT5zY3NpX21vZGUgPT0gU01PREVfSFZEKQorCQlucC0+cnZfc3Rlc3QyIHw9IDB4MjA7Cit9CisKKy8qCiAgKiAgUHJlcGFyZSBpbyByZWdpc3RlciB2YWx1ZXMgdXNlZCBieSBzeW1fc3RhcnRfdXAoKSAKICAqICBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgYW5kIHN1cHBvcnRlZCBmZWF0dXJlcy4KICAqLwpAQCAtNjU0LDEwICs2ODgsNyBAQAogCXUzMglwZXJpb2Q7CiAJaW50IGk7CiAKLQkvKgotCSAqICBXaWRlID8KLQkgKi8KLQlucC0+bWF4d2lkZQk9IChucC0+ZmVhdHVyZXMgJiBGRV9XSURFKT8gMSA6IDA7CisJbnAtPm1heHdpZGUgPSAobnAtPmZlYXR1cmVzICYgRkVfV0lERSkgPyAxIDogMDsKIAogCS8qCiAJICogIEd1ZXNzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGNoaXAncyBjbG9jay4KQEAgLTgzOCw2ICs4NjksNyBAQAogCSAqICBHZXQgcGFyaXR5IGNoZWNraW5nLCBob3N0IElEIGFuZCB2ZXJib3NlIG1vZGUgZnJvbSBOVlJBTQogCSAqLwogCW5wLT5teWFkZHIgPSAyNTU7CisJbnAtPnNjc2lfbW9kZSA9IDA7CiAJc3ltX252cmFtX3NldHVwX2hvc3Qoc2hvc3QsIG5wLCBudnJhbSk7CiAKIAkvKgpAQCAtODU0LDMzICs4ODYsNyBAQAogCSAqLwogCXN5bV9pbml0X2J1cnN0KG5wLCBidXJzdF9tYXgpOwogCi0JLyoKLQkgKiAgU2V0IFNDU0kgQlVTIG1vZGUuCi0JICogIC0gTFZEIGNhcGFibGUgY2hpcHMgKDg5NS84OTVBLzg5Ni8xMDEwKSByZXBvcnQgdGhlIAotCSAqICAgIGN1cnJlbnQgQlVTIG1vZGUgdGhyb3VnaCB0aGUgU1RFU1Q0IElPIHJlZ2lzdGVyLgotCSAqICAtIEZvciBwcmV2aW91cyBnZW5lcmF0aW9uIGNoaXBzICg4MjUvODI1QS84NzUpLCAKLQkgKiAgICB1c2VyIGhhcyB0byB0ZWxsIHVzIGhvdyB0byBjaGVjayBhZ2FpbnN0IEhWRCwgCi0JICogICAgc2luY2UgYSAxMDAlIHNhZmUgYWxnb3JpdGhtIGlzIG5vdCBwb3NzaWJsZS4KLQkgKi8KLQlucC0+c2NzaV9tb2RlID0gU01PREVfU0U7Ci0JaWYgKG5wLT5mZWF0dXJlcyAmIChGRV9VTFRSQTJ8RkVfVUxUUkEzKSkKLQkJbnAtPnNjc2lfbW9kZSA9IChucC0+c3Zfc3Rlc3Q0ICYgU01PREUpOwotCWVsc2UgaWYJKG5wLT5mZWF0dXJlcyAmIEZFX0RJRkYpIHsKLQkJaWYgKFNZTV9TRVRVUF9TQ1NJX0RJRkYgPT0gMSkgewotCQkJaWYgKG5wLT5zdl9zY250bDMpIHsKLQkJCQlpZiAobnAtPnN2X3N0ZXN0MiAmIDB4MjApCi0JCQkJCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9IVkQ7Ci0JCQl9Ci0JCQllbHNlIGlmIChudnJhbS0+dHlwZSA9PSBTWU1fU1lNQklPU19OVlJBTSkgewotCQkJCWlmICghKElOQihucCwgbmNfZ3ByZWcpICYgMHgwOCkpCi0JCQkJCW5wLT5zY3NpX21vZGUgPSBTTU9ERV9IVkQ7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZgkoU1lNX1NFVFVQX1NDU0lfRElGRiA9PSAyKQotCQkJbnAtPnNjc2lfbW9kZSA9IFNNT0RFX0hWRDsKLQl9Ci0JaWYgKG5wLT5zY3NpX21vZGUgPT0gU01PREVfSFZEKQotCQlucC0+cnZfc3Rlc3QyIHw9IDB4MjA7CisJc3ltX3NldF9idXNfbW9kZShucCwgbnZyYW0pOwogCiAJLyoKIAkgKiAgU2V0IExFRCBzdXBwb3J0IGZyb20gU0NSSVBUUy4KQEAgLTk3Myw4ICs5NzksOCBAQAogICoKICAqICBIYXMgdG8gYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwotI2lmbmRlZiBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQKLXN0YXRpYyBpbnQgc3ltX3JlZ3Rlc3QgKHN0cnVjdCBzeW1faGNiICpucCkKKyNpZmRlZiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTworc3RhdGljIGludCBzeW1fcmVndGVzdChzdHJ1Y3Qgc3ltX2hjYiAqbnApCiB7CiAJcmVnaXN0ZXIgdm9sYXRpbGUgdTMyIGRhdGE7CiAJLyoKQEAgLTk5MiwyMCArOTk4LDI1IEBACiAjZW5kaWYKIAkJcHJpbnRmICgiQ0FDSEUgVEVTVCBGQUlMRUQ6IHJlZyBkc3RhdC1zc3RhdDIgcmVhZGJhY2sgJXguXG4iLAogCQkJKHVuc2lnbmVkKSBkYXRhKTsKLQkJcmV0dXJuICgweDEwKTsKKwkJcmV0dXJuIDB4MTA7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc3ltX3JlZ3Rlc3Qoc3RydWN0IHN5bV9oY2IgKm5wKQoreworCXJldHVybiAwOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgc3ltX3Nub29wdGVzdCAoc3RydWN0IHN5bV9oY2IgKm5wKQorc3RhdGljIGludCBzeW1fc25vb3B0ZXN0KHN0cnVjdCBzeW1faGNiICpucCkKIHsKLQl1MzIJc3ltX3JkLCBzeW1fd3IsIHN5bV9iaywgaG9zdF9yZCwgaG9zdF93ciwgcGMsIGRzdGF0OwotCWludAlpLCBlcnI9MDsKLSNpZm5kZWYgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVECi0JZXJyIHw9IHN5bV9yZWd0ZXN0IChucCk7Ci0JaWYgKGVycikgcmV0dXJuIChlcnIpOwotI2VuZGlmCisJdTMyIHN5bV9yZCwgc3ltX3dyLCBzeW1fYmssIGhvc3RfcmQsIGhvc3Rfd3IsIHBjLCBkc3RhdDsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gc3ltX3JlZ3Rlc3QobnApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiByZXN0YXJ0X3Rlc3Q6CiAJLyoKIAkgKiAgRW5hYmxlIE1hc3RlciBQYXJpdHkgQ2hlY2tpbmcgYXMgd2UgaW50ZW5kIApAQCAtMTA5NCw3ICsxMTA1LDcgQEAKIAkJZXJyIHw9IDQ7CiAJfQogCi0JcmV0dXJuIChlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0xNDY0LDcgKzE0NzUsNyBAQAogLyoKICAqICBJbnNlcnQgYSBqb2IgaW50byB0aGUgc3RhcnQgcXVldWUuCiAgKi8KLXN0YXRpYyB2b2lkIHN5bV9wdXRfc3RhcnRfcXVldWUoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX2NjYiAqY3ApCit2b2lkIHN5bV9wdXRfc3RhcnRfcXVldWUoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX2NjYiAqY3ApCiB7CiAJdV9zaG9ydAlxaWR4OwogCkBAIC00NDgxLDcgKzQ0OTIsNyBAQAogCQkJc3dpdGNoIChucC0+bXNnaW4gWzJdKSB7CiAJCQljYXNlIE1fWF9NT0RJRllfRFA6CiAJCQkJaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfUE9JTlRFUikKLQkJCQkJc3ltX3ByaW50X21zZyhjcCwibW9kaWZ5IERQIixucC0+bXNnaW4pOworCQkJCQlzeW1fcHJpbnRfbXNnKGNwLCBOVUxMLCBucC0+bXNnaW4pOwogCQkJCXRtcCA9IChucC0+bXNnaW5bM108PDI0KSArIChucC0+bXNnaW5bNF08PDE2KSArIAogCQkJCSAgICAgIChucC0+bXNnaW5bNV08PDgpICArIChucC0+bXNnaW5bNl0pOwogCQkJCXN5bV9tb2RpZnlfZHAobnAsIHRwLCBjcCwgdG1wKTsKQEAgLTQ1MDgsNyArNDUxOSw3IEBACiAJCSAqLwogCQljYXNlIE1fSUdOX1JFU0lEVUU6CiAJCQlpZiAoREVCVUdfRkxBR1MgJiBERUJVR19QT0lOVEVSKQotCQkJCXN5bV9wcmludF9tc2coY3AsImlnbiB3aWRlIHJlc2lkdWUiLCBucC0+bXNnaW4pOworCQkJCXN5bV9wcmludF9tc2coY3AsIE5VTEwsIG5wLT5tc2dpbik7CiAJCQlpZiAoY3AtPmhvc3RfZmxhZ3MgJiBIRl9TRU5TRSkKIAkJCQlPVVRMX0RTUChucCwgU0NSSVBUQV9CQShucCwgY2xyYWNrKSk7CiAJCQllbHNlCkBAIC00NTk3LDcgKzQ2MDgsOCBAQAogCQkJICogIERlYnVnZ2luZyBwdXJwb3NlLgogCQkJICovCiAjaWZuZGVmIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwotCQkJYXNzZXJ0KGxwLT5idXN5X2l0bCA9PSAwKTsKKwkJCWlmIChscC0+YnVzeV9pdGwgIT0gMCkKKwkJCQlnb3RvIG91dF9mcmVlOwogI2VuZGlmCiAJCQkvKgogCQkJICogIEFsbG9jYXRlIHJlc291cmNlcyBmb3IgdGFncyBpZiBub3QgeWV0LgpAQCAtNDY0Miw3ICs0NjU0LDggQEAKIAkJCSAqICBEZWJ1Z2dpbmcgcHVycG9zZS4KIAkJCSAqLwogI2lmbmRlZiBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKLQkJCWFzc2VydChscC0+YnVzeV9pdGwgPT0gMCAmJiBscC0+YnVzeV9pdGxxID09IDApOworCQkJaWYgKGxwLT5idXN5X2l0bCAhPSAwIHx8IGxwLT5idXN5X2l0bHEgIT0gMCkKKwkJCQlnb3RvIG91dF9mcmVlOwogI2VuZGlmCiAJCQkvKgogCQkJICogIENvdW50IHRoaXMgbmV4dXMgZm9yIHRoaXMgTFVOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaAppbmRleCAyNDU2MDkwLi43OWFiNmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaAorKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaApAQCAtMTA0OSw2ICsxMDQ5LDggQEAKIHN0cnVjdCBzeW1fY2hpcCAqc3ltX2xvb2t1cF9jaGlwX3RhYmxlKHVfc2hvcnQgZGV2aWNlX2lkLCB1X2NoYXIgcmV2aXNpb24pOwogI2lmZGVmIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwogdm9pZCBzeW1fc3RhcnRfbmV4dF9jY2JzKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9sY2IgKmxwLCBpbnQgbWF4bik7CisjZWxzZQordm9pZCBzeW1fcHV0X3N0YXJ0X3F1ZXVlKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9jY2IgKmNwKTsKICNlbmRpZgogdm9pZCBzeW1fc3RhcnRfdXAoc3RydWN0IHN5bV9oY2IgKm5wLCBpbnQgcmVhc29uKTsKIHZvaWQgc3ltX2ludGVycnVwdChzdHJ1Y3Qgc3ltX2hjYiAqbnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDY3NGIxNWMuLmJiZjc4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTM2Miw2ICszNjIsNDAgQEAKICNkZWZpbmUgc2VyaWFsX2lucCh1cCwgb2Zmc2V0KQkJc2VyaWFsX2luKHVwLCBvZmZzZXQpCiAjZGVmaW5lIHNlcmlhbF9vdXRwKHVwLCBvZmZzZXQsIHZhbHVlKQlzZXJpYWxfb3V0KHVwLCBvZmZzZXQsIHZhbHVlKQogCisvKiBVYXJ0IGRpdmlzb3IgbGF0Y2ggcmVhZCAqLworc3RhdGljIGlubGluZSBpbnQgX3NlcmlhbF9kbF9yZWFkKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCit7CisJcmV0dXJuIHNlcmlhbF9pbnAodXAsIFVBUlRfRExMKSB8IHNlcmlhbF9pbnAodXAsIFVBUlRfRExNKSA8PCA4OworfQorCisvKiBVYXJ0IGRpdmlzb3IgbGF0Y2ggd3JpdGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfc2VyaWFsX2RsX3dyaXRlKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIGludCB2YWx1ZSkKK3sKKwlzZXJpYWxfb3V0cCh1cCwgVUFSVF9ETEwsIHZhbHVlICYgMHhmZik7CisJc2VyaWFsX291dHAodXAsIFVBUlRfRExNLCB2YWx1ZSA+PiA4ICYgMHhmZik7Cit9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCisvKiBBdTF4MDAgaGF2ZW4ndCBnb3QgYSBzdGFuZGFyZCBkaXZpc29yIGxhdGNoICovCitzdGF0aWMgaW50IHNlcmlhbF9kbF9yZWFkKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCit7CisJaWYgKHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQorCQlyZXR1cm4gX19yYXdfcmVhZGwodXAtPnBvcnQubWVtYmFzZSArIDB4MjgpOworCWVsc2UKKwkJcmV0dXJuIF9zZXJpYWxfZGxfcmVhZCh1cCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9kbF93cml0ZShzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLCBpbnQgdmFsdWUpCit7CisJaWYgKHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQorCQlfX3Jhd193cml0ZWwodmFsdWUsIHVwLT5wb3J0Lm1lbWJhc2UgKyAweDI4KTsKKwllbHNlCisJCV9zZXJpYWxfZGxfd3JpdGUodXAsIHZhbHVlKTsKK30KKyNlbHNlCisjZGVmaW5lIHNlcmlhbF9kbF9yZWFkKHVwKSBfc2VyaWFsX2RsX3JlYWQodXApCisjZGVmaW5lIHNlcmlhbF9kbF93cml0ZSh1cCwgdmFsdWUpIF9zZXJpYWxfZGxfd3JpdGUodXAsIHZhbHVlKQorI2VuZGlmCiAKIC8qCiAgKiBGb3IgdGhlIDE2Qzk1MApAQCAtNDk0LDcgKzUyOCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgc2l6ZV9maWZvKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7Ci0JdW5zaWduZWQgY2hhciBvbGRfZmNyLCBvbGRfbWNyLCBvbGRfZGxsLCBvbGRfZGxtLCBvbGRfbGNyOworCXVuc2lnbmVkIGNoYXIgb2xkX2Zjciwgb2xkX21jciwgb2xkX2xjcjsKKwl1bnNpZ25lZCBzaG9ydCBvbGRfZGw7CiAJaW50IGNvdW50OwogCiAJb2xkX2xjciA9IHNlcmlhbF9pbnAodXAsIFVBUlRfTENSKTsKQEAgLTUwNSwxMCArNTQwLDggQEAKIAkJICAgIFVBUlRfRkNSX0NMRUFSX1JDVlIgfCBVQVJUX0ZDUl9DTEVBUl9YTUlUKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9NQ1IsIFVBUlRfTUNSX0xPT1ApOwogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7Ci0Jb2xkX2RsbCA9IHNlcmlhbF9pbnAodXAsIFVBUlRfRExMKTsKLQlvbGRfZGxtID0gc2VyaWFsX2lucCh1cCwgVUFSVF9ETE0pOwotCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTCwgMHgwMSk7Ci0Jc2VyaWFsX291dHAodXAsIFVBUlRfRExNLCAweDAwKTsKKwlvbGRfZGwgPSBzZXJpYWxfZGxfcmVhZCh1cCk7CisJc2VyaWFsX2RsX3dyaXRlKHVwLCAweDAwMDEpOwogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMHgwMyk7CiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMjU2OyBjb3VudCsrKQogCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9UWCwgY291bnQpOwpAQCAtNTE5LDggKzU1Miw3IEBACiAJc2VyaWFsX291dHAodXAsIFVBUlRfRkNSLCBvbGRfZmNyKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9NQ1IsIG9sZF9tY3IpOwogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7Ci0Jc2VyaWFsX291dHAodXAsIFVBUlRfRExMLCBvbGRfZGxsKTsKLQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9ETE0sIG9sZF9kbG0pOworCXNlcmlhbF9kbF93cml0ZSh1cCwgb2xkX2RsKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIG9sZF9sY3IpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtNzUwLDggKzc4Miw3IEBACiAKIAkJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMHhFMCk7CiAKLQkJCXF1b3QgPSBzZXJpYWxfaW5wKHVwLCBVQVJUX0RMTSkgPDwgODsKLQkJCXF1b3QgKz0gc2VyaWFsX2lucCh1cCwgVUFSVF9ETEwpOworCQkJcXVvdCA9IHNlcmlhbF9kbF9yZWFkKHVwKTsKIAkJCXF1b3QgPDw9IDM7CiAKIAkJCXN0YXR1czEgPSBzZXJpYWxfaW4odXAsIDB4MDQpOyAvKiBFWENSMSAqLwpAQCAtNzU5LDggKzc5MCw3IEBACiAJCQlzdGF0dXMxIHw9IDB4MTA7ICAvKiAxLjYyNSBkaXZpc29yIGZvciBiYXVkX2Jhc2UgLS0+IDkyMTYwMCAqLwogCQkJc2VyaWFsX291dHAodXAsIDB4MDQsIHN0YXR1czEpOwogCQkJCi0JCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9ETEwsIHF1b3QgJiAweGZmKTsKLQkJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0RMTSwgcXVvdCA+PiA4KTsKKwkJCXNlcmlhbF9kbF93cml0ZSh1cCwgcXVvdCk7CiAKIAkJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMCk7CiAKQEAgLTE4NjIsOCArMTg5Miw3IEBACiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgY3ZhbCB8IFVBUlRfTENSX0RMQUIpOy8qIHNldCBETEFCICovCiAJfQogCi0Jc2VyaWFsX291dHAodXAsIFVBUlRfRExMLCBxdW90ICYgMHhmZik7CQkvKiBMUyBvZiBkaXZpc29yICovCi0Jc2VyaWFsX291dHAodXAsIFVBUlRfRExNLCBxdW90ID4+IDgpOwkJLyogTVMgb2YgZGl2aXNvciAqLworCXNlcmlhbF9kbF93cml0ZSh1cCwgcXVvdCk7CiAKIAkvKgogCSAqIExDUiBETEFCIG11c3QgYmUgc2V0IHRvIGVuYWJsZSA2NC1ieXRlIEZJRk8gbW9kZS4gSWYgdGhlIEZDUgpAQCAtMTkwNiw2ICsxOTM1LDkgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAodXAtPnBvcnQuaW90eXBlKSB7CisJY2FzZSBVUElPX0FVOgorCQlzaXplID0gMHgxMDAwMDA7CisJCS8qIGZhbGwgdGhydSAqLwogCWNhc2UgVVBJT19NRU06CiAJCWlmICghdXAtPnBvcnQubWFwYmFzZSkKIAkJCWJyZWFrOwpAQCAtMTkzOCw2ICsxOTcwLDkgQEAKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IDggPDwgdXAtPnBvcnQucmVnc2hpZnQ7CiAKIAlzd2l0Y2ggKHVwLT5wb3J0LmlvdHlwZSkgeworCWNhc2UgVVBJT19BVToKKwkJc2l6ZSA9IDB4MTAwMDAwOworCQkvKiBmYWxsIHRocnUgKi8KIAljYXNlIFVQSU9fTUVNOgogCQlpZiAoIXVwLT5wb3J0Lm1hcGJhc2UpCiAJCQlicmVhazsKQEAgLTIyMDAsMTAgKzIyMzUsMTcgQEAKIHNlcmlhbDgyNTBfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbY28tPmluZGV4XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpZXI7CisJaW50IGxvY2tlZCA9IDE7CiAKIAl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKIAorCWlmIChvb3BzX2luX3Byb2dyZXNzKSB7CisJCWxvY2tlZCA9IHNwaW5fdHJ5bG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIElFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKIAkgKi8KQEAgLTIyMjEsOCArMjI2MywxMCBAQAogCSAqCWFuZCByZXN0b3JlIHRoZSBJRVIKIAkgKi8KIAl3YWl0X2Zvcl94bWl0cih1cCwgQk9USF9FTVBUWSk7Ci0JdXAtPmllciB8PSBVQVJUX0lFUl9USFJJOwotCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCBpZXIgfCBVQVJUX0lFUl9USFJJKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgaWVyKTsKKworCWlmIChsb2NrZWQpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBzZXJpYWw4MjUwX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9hdTF4MDAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfYXUxeDAwLmMKaW5kZXggM2QxYmZkMC4uNTgwMTVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9hdTF4MDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2F1MXgwMC5jCkBAIC0zMCwxMyArMzAsMTIgQEAKIAl7CQkJCQkJXAogCQkuaW9iYXNlCQk9IF9iYXNlLAkJXAogCQkubWVtYmFzZQk9ICh2b2lkIF9faW9tZW0gKilfYmFzZSxcCi0JCS5tYXBiYXNlCT0gX2Jhc2UsCQlcCisJCS5tYXBiYXNlCT0gQ1BIWVNBRERSKF9iYXNlKSwJXAogCQkuaXJxCQk9IF9pcnEsCQkJXAogCQkudWFydGNsawk9IDAsCS8qIGZpbGxlZCAqLwlcCiAJCS5yZWdzaGlmdAk9IDIsCQkJXAogCQkuaW90eXBlCQk9IFVQSU9fQVUsCQlcCi0JCS5mbGFncwkJPSBVUEZfU0tJUF9URVNUIHwgCVwKLQkJCQkgIFVQRl9JT1JFTUFQLAkJXAorCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCAJXAogCX0KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhdTF4MDBfZGF0YVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaCBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKaW5kZXggNzNjOGEwOC4uM2IzNWNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydC5oCkBAIC01LDExICs1LDIwIEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKKyAqICAyMDA2IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAJVml0YWx5IEJvcmR1ZyA8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgogICovCiAjaWZuZGVmIENQTV9VQVJUX0gKICNkZWZpbmUgQ1BNX1VBUlRfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfdWFydF9wZC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKICNpbmNsdWRlICJjcG1fdWFydF9jcG0yLmgiCkBAIC0yNiwxNCArMzUsMTQgQEAKICNkZWZpbmUgRkxBR19TTUMJMHgwMDAwMDAwMgogI2RlZmluZSBGTEFHX0NPTlNPTEUJMHgwMDAwMDAwMQogCi0jZGVmaW5lIFVBUlRfU01DMQkwCi0jZGVmaW5lIFVBUlRfU01DMgkxCi0jZGVmaW5lIFVBUlRfU0NDMQkyCi0jZGVmaW5lIFVBUlRfU0NDMgkzCi0jZGVmaW5lIFVBUlRfU0NDMwk0Ci0jZGVmaW5lIFVBUlRfU0NDNAk1CisjZGVmaW5lIFVBUlRfU01DMQlmc2lkX3NtYzFfdWFydAorI2RlZmluZSBVQVJUX1NNQzIJZnNpZF9zbWMyX3VhcnQKKyNkZWZpbmUgVUFSVF9TQ0MxCWZzaWRfc2NjMV91YXJ0CisjZGVmaW5lIFVBUlRfU0NDMglmc2lkX3NjYzJfdWFydAorI2RlZmluZSBVQVJUX1NDQzMJZnNpZF9zY2MzX3VhcnQKKyNkZWZpbmUgVUFSVF9TQ0M0CWZzaWRfc2NjNF91YXJ0CiAKLSNkZWZpbmUgVUFSVF9OUgk2CisjZGVmaW5lIFVBUlRfTlIJCWZzX3VhcnRfbnIKIAogI2RlZmluZSBSWF9OVU1fRklGTwk0CiAjZGVmaW5lIFJYX0JVRl9TSVpFCTMyCkBAIC02NCw2ICs3Myw3IEBACiAJdWludAkJCSBkcF9hZGRyOwogCXZvaWQJCQkqbWVtX2FkZHI7CiAJZG1hX2FkZHJfdAkJIGRtYV9hZGRyOworCXUzMgkJCW1lbV9zaXplOwogCS8qIGhlbHBlcnMgKi8KIAlpbnQJCQkgYmF1ZDsKIAlpbnQJCQkgYml0czsKQEAgLTkwLDQgKzEwMCwzOCBAQAogdm9pZCBzY2MzX2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pOwogdm9pZCBzY2M0X2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pOwogCisvKgorICAgdmlydHVhbCB0byBwaHlzIHRyYW5zdGFsaW9uCisqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNwdTJjcG1fYWRkcih2b2lkKiBhZGRyLCBzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCit7CisJaW50IG9mZnNldDsKKwl1MzIgdmFsID0gKHUzMilhZGRyOworCS8qIHNhbmUgY2hlY2sgKi8KKwlpZiAobGlrZWx5KCh2YWwgPj0gKHUzMilwaW5mby0+bWVtX2FkZHIpKSAmJgorCQkJKHZhbDwoKHUzMilwaW5mby0+bWVtX2FkZHIgKyBwaW5mby0+bWVtX3NpemUpKSkgeworCQlvZmZzZXQgPSB2YWwgLSAodTMyKXBpbmZvLT5tZW1fYWRkcjsKKwkJcmV0dXJuIHBpbmZvLT5kbWFfYWRkcitvZmZzZXQ7CisJfQorCS8qIHNvbWV0aGluZyBuYXN0eSBoYXBwZW5lZCAqLworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmNwbTJjcHVfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbykKK3sKKwlpbnQgb2Zmc2V0OworCXUzMiB2YWwgPSBhZGRyOworCS8qIHNhbmUgY2hlY2sgKi8KKwlpZiAobGlrZWx5KCh2YWwgPj0gcGluZm8tPmRtYV9hZGRyKSAmJgorCQkJKHZhbDwocGluZm8tPmRtYV9hZGRyICsgcGluZm8tPm1lbV9zaXplKSkpKSB7CisJCW9mZnNldCA9IHZhbCAtICh1MzIpcGluZm8tPmRtYV9hZGRyOworCQlyZXR1cm4gKHZvaWQqKShwaW5mby0+bWVtX2FkZHIrb2Zmc2V0KTsKKwl9CisJLyogc29tZXRoaW5nIG5hc3R5IGhhcHBlbmVkICovCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKKwogI2VuZGlmIC8qIENQTV9VQVJUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBiN2JmNGM2Li41Y2JhNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC0xMiw3ICsxMiw4IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICogICAgICAgICAgICAoQykgMjAwNCBJbnRyYWNvbSwgUy5BLgotICogICAgICAgICAgICAoQykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIGJ5IFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KKyAqICAgICAgICAgICAgKEMpIDIwMDUtMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAJCVZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mc191YXJ0X3BkLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC02MCw3ICs2Miw3IEBACiAvKiBUcmFjayB3aGljaCBwb3J0cyBhcmUgY29uZmlndXJlZCBhcyB1YXJ0cyAqLwogaW50IGNwbV91YXJ0X3BvcnRfbWFwW1VBUlRfTlJdOwogLyogSG93IG1hbnkgcG9ydHMgZGlkIHdlIGNvbmZpZyBhcyB1YXJ0cyAqLwotaW50IGNwbV91YXJ0X25yOworaW50IGNwbV91YXJ0X25yID0gMDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC03MSwxOCArNzMsNTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3B1MmNwbV9hZGRyKHZvaWQgKmFkZHIpCisKKy8qIFBsYWNlLWhvbGRlciBmb3IgYm9hcmQtc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgX19pbml0CitlYXJseV91YXJ0X2dldF9wZGV2KGludCBpbmRleCkKIHsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBDUE1fQUREUikKLQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWFkZHI7Ci0JcmV0dXJuIHZpcnRfdG9fYnVzKGFkZHIpOworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmNwbTJjcHVfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCisKK3N0YXRpYyB2b2lkIGNwbV91YXJ0X2NvdW50KHZvaWQpCiB7Ci0JaWYgKGFkZHIgPj0gQ1BNX0FERFIpCi0JCXJldHVybiAodm9pZCAqKWFkZHI7Ci0JcmV0dXJuIGJ1c190b192aXJ0KGFkZHIpOworCWNwbV91YXJ0X25yID0gMDsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMxCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NNQzE7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMyCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NNQzI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzE7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzCisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0CisJY3BtX3VhcnRfcG9ydF9tYXBbY3BtX3VhcnRfbnIrK10gPSBVQVJUX1NDQzQ7CisjZW5kaWYKK30KKworLyogR2V0IFVBUlQgbnVtYmVyIGJ5IGl0cyBpZCAqLworc3RhdGljIGludCBjcG1fdWFydF9pZDJucihpbnQgaWQpCit7CisJaW50IGk7CisJaWYgKGlkIDwgVUFSVF9OUikgeworCQlmb3IgKGk9MDsgaTxVQVJUX05SOyBpKyspIHsKKwkJCWlmIChjcG1fdWFydF9wb3J0X21hcFtpXSA9PSBpZCkKKwkJCQlyZXR1cm4gaTsKKwkJfQorCX0KKworCS8qIG5vdCBmb3VuZCBvciBpbnZhbGlkIGFyZ3VtZW50ICovCisJcmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMjU4LDcgKzI5Myw3IEBACiAJCX0KIAogCQkvKiBnZXQgcG9pbnRlciAqLwotCQljcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyKTsKKwkJY3AgPSBjcG0yY3B1X2FkZHIoYmRwLT5jYmRfYnVmYWRkciwgcGluZm8pOwogCiAJCS8qIGxvb3AgdGhyb3VnaCB0aGUgYnVmZmVyICovCiAJCXdoaWxlIChpLS0gPiAwKSB7CkBAIC00MzgsNyArNDczLDExIEBACiAJCX0KIAogCQkvKiBTaHV0IHRoZW0gcmVhbGx5IGRvd24gYW5kIHJlaW5pdCBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQkJY3BtX2xpbmVfY3JfY21kKGxpbmUsIENQTV9DUl9TVE9QX1RYKTsKKwkJaWYgKElTX1NNQyhwaW5mbykpCisJCQljcG1fbGluZV9jcl9jbWQobGluZSwgQ1BNX0NSX1NUT1BfVFgpOworCQllbHNlCisJCQljcG1fbGluZV9jcl9jbWQobGluZSwgQ1BNX0NSX0dSQV9TVE9QX1RYKTsKKwogCQljcG1fdWFydF9pbml0YmQocGluZm8pOwogCX0KIH0KQEAgLTYwMSw3ICs2NDAsNyBAQAogCQkvKiBQaWNrIG5leHQgZGVzY3JpcHRvciBhbmQgZmlsbCBmcm9tIGJ1ZmZlciAqLwogCQliZHAgPSBwaW5mby0+dHhfY3VyOwogCi0JCXAgPSBjcG0yY3B1X2FkZHIoYmRwLT5jYmRfYnVmYWRkcik7CisJCXAgPSBjcG0yY3B1X2FkZHIoYmRwLT5jYmRfYnVmYWRkciwgcGluZm8pOwogCiAJCSpwKysgPSBwb3J0LT54X2NoYXI7CiAJCWJkcC0+Y2JkX2RhdGxlbiA9IDE7CkBAIC02MjgsNyArNjY3LDcgQEAKIAogCXdoaWxlICghKGJkcC0+Y2JkX3NjICYgQkRfU0NfUkVBRFkpICYmICh4bWl0LT50YWlsICE9IHhtaXQtPmhlYWQpKSB7CiAJCWNvdW50ID0gMDsKLQkJcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyKTsKKwkJcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyLCBwaW5mbyk7CiAJCXdoaWxlIChjb3VudCA8IHBpbmZvLT50eF9maWZvc2l6ZSkgewogCQkJKnArKyA9IHhtaXQtPmJ1Zlt4bWl0LT50YWlsXTsKIAkJCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCArIDEpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CkBAIC02NzcsMTIgKzcxNiwxMiBAQAogCW1lbV9hZGRyID0gcGluZm8tPm1lbV9hZGRyOwogCWJkcCA9IHBpbmZvLT5yeF9jdXIgPSBwaW5mby0+cnhfYmRfYmFzZTsKIAlmb3IgKGkgPSAwOyBpIDwgKHBpbmZvLT5yeF9ucmZpZm9zIC0gMSk7IGkrKywgYmRwKyspIHsKLQkJYmRwLT5jYmRfYnVmYWRkciA9IGNwdTJjcG1fYWRkcihtZW1fYWRkcik7CisJCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIsIHBpbmZvKTsKIAkJYmRwLT5jYmRfc2MgPSBCRF9TQ19FTVBUWSB8IEJEX1NDX0lOVFJQVDsKIAkJbWVtX2FkZHIgKz0gcGluZm8tPnJ4X2ZpZm9zaXplOwogCX0KIAotCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIpOworCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIsIHBpbmZvKTsKIAliZHAtPmNiZF9zYyA9IEJEX1NDX1dSQVAgfCBCRF9TQ19FTVBUWSB8IEJEX1NDX0lOVFJQVDsKIAogCS8qIFNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgaG9zdCBtZW1vcnkKQEAgLTY5MiwxMiArNzMxLDEyIEBACiAJbWVtX2FkZHIgPSBwaW5mby0+bWVtX2FkZHIgKyBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqIHBpbmZvLT5yeF9maWZvc2l6ZSk7CiAJYmRwID0gcGluZm8tPnR4X2N1ciA9IHBpbmZvLT50eF9iZF9iYXNlOwogCWZvciAoaSA9IDA7IGkgPCAocGluZm8tPnR4X25yZmlmb3MgLSAxKTsgaSsrLCBiZHArKykgewotCQliZHAtPmNiZF9idWZhZGRyID0gY3B1MmNwbV9hZGRyKG1lbV9hZGRyKTsKKwkJYmRwLT5jYmRfYnVmYWRkciA9IGNwdTJjcG1fYWRkcihtZW1fYWRkciwgcGluZm8pOwogCQliZHAtPmNiZF9zYyA9IEJEX1NDX0lOVFJQVDsKIAkJbWVtX2FkZHIgKz0gcGluZm8tPnR4X2ZpZm9zaXplOwogCX0KIAotCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIpOworCWJkcC0+Y2JkX2J1ZmFkZHIgPSBjcHUyY3BtX2FkZHIobWVtX2FkZHIsIHBpbmZvKTsKIAliZHAtPmNiZF9zYyA9IEJEX1NDX1dSQVAgfCBCRF9TQ19JTlRSUFQ7CiB9CiAKQEAgLTgyOSwxNCArODY4LDYgQEAKIAlpZiAocGluZm8tPmZsYWdzICYgRkxBR19DT05TT0xFKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogU2V0dXAgYW55IHBvcnQgSU8sIGNvbm5lY3QgYW55IGJhdWQgcmF0ZSBnZW5lcmF0b3JzLAotCSAqIGV0Yy4gIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBieSBib2FyZAotCSAqIGRlcGVuZGFudCBjb2RlCi0JICovCi0JaWYgKHBpbmZvLT5zZXRfbGluZWlmKQotCQlwaW5mby0+c2V0X2xpbmVpZihwaW5mbyk7Ci0KIAlpZiAoSVNfU01DKHBpbmZvKSkgewogCQlwaW5mby0+c21jcC0+c21jX3NtY20gJj0gfihTTUNNX1JYIHwgU01DTV9UWCk7CiAJCXBpbmZvLT5zbWNwLT5zbWNfc21jbXIgJj0gfihTTUNNUl9SRU4gfCBTTUNNUl9URU4pOwpAQCAtOTg4LDYgKzEwMTksNTggQEAKIAl9LAogfTsKIAoraW50IGNwbV91YXJ0X2Rydl9nZXRfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXNfY29uKQoreworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBpZHggPSBwZGF0YS0+ZnNfbm87CS8qIEl0IGlzIFVBUlRfU01DeCBvciBVQVJUX1NDQ3ggaW5kZXggKi8KKwlzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm87CisJaW50IGxpbmU7CisJdTMyIG1lbSwgcHJhbTsKKworCWxpbmUgPSBjcG1fdWFydF9pZDJucihpZHgpOworCWlmKGxpbmUgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiIlcygpOiBwb3J0ICVkIGlzIG5vdCByZWdpc3RlcmVkIiwgX19GVU5DVElPTl9fLCBpZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGluZm8gPSAoc3RydWN0IHVhcnRfY3BtX3BvcnQgKikgJmNwbV91YXJ0X3BvcnRzW2lkeF07CisKKwlwaW5mby0+YnJnID0gcGRhdGEtPmJyZzsKKworCWlmICghaXNfY29uKSB7CisJCXBpbmZvLT5wb3J0LmxpbmUgPSBsaW5lOworCQlwaW5mby0+cG9ydC5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GOworCX0KKworCWlmICghKHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmVncyIpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtID0gci0+c3RhcnQ7CisKKwlpZiAoIShyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInByYW0iKSkpCisJCXJldHVybiAtRUlOVkFMOworCXByYW0gPSByLT5zdGFydDsKKworCWlmKGlkeCA+IGZzaWRfc21jMl91YXJ0KSB7CisJCXBpbmZvLT5zY2NwID0gKHNjY190ICopbWVtOworCQlwaW5mby0+c2NjdXAgPSAoc2NjX3VhcnRfdCAqKXByYW07CisJfSBlbHNlIHsKKwkJcGluZm8tPnNtY3AgPSAoc21jX3QgKiltZW07CisJCXBpbmZvLT5zbWN1cCA9IChzbWNfdWFydF90ICopcHJhbTsKKwl9CisJcGluZm8tPnR4X25yZmlmb3MgPSBwZGF0YS0+dHhfbnVtX2ZpZm87CisJcGluZm8tPnR4X2ZpZm9zaXplID0gcGRhdGEtPnR4X2J1Zl9zaXplOworCisJcGluZm8tPnJ4X25yZmlmb3MgPSBwZGF0YS0+cnhfbnVtX2ZpZm87CisJcGluZm8tPnJ4X2ZpZm9zaXplID0gcGRhdGEtPnJ4X2J1Zl9zaXplOworCisJcGluZm8tPnBvcnQudWFydGNsayA9IHBkYXRhLT51YXJ0X2NsazsKKwlwaW5mby0+cG9ydC5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXBpbmZvLT5wb3J0LmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEUKIC8qCiAgKglQcmludCBhIHN0cmluZyB0byB0aGUgc2VyaWFsIHBvcnQgdHJ5aW5nIG5vdCB0byBkaXN0dXJiCkBAIC0xMDI3LDcgKzExMTAsNyBAQAogCQkgKiBJZiB0aGUgYnVmZmVyIGFkZHJlc3MgaXMgaW4gdGhlIENQTSBEUFJBTSwgZG9uJ3QKIAkJICogY29udmVydCBpdC4KIAkJICovCi0JCWNwID0gY3BtMmNwdV9hZGRyKGJkcC0+Y2JkX2J1ZmFkZHIpOworCQljcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyLCBwaW5mbyk7CiAKIAkJKmNwID0gKnM7CiAKQEAgLTEwNDQsNyArMTEyNyw3IEBACiAJCQl3aGlsZSAoKGJkcC0+Y2JkX3NjICYgQkRfU0NfUkVBRFkpICE9IDApCiAJCQkJOwogCi0JCQljcCA9IGNwbTJjcHVfYWRkcihiZHAtPmNiZF9idWZhZGRyKTsKKwkJCWNwID0gY3BtMmNwdV9hZGRyKGJkcC0+Y2JkX2J1ZmFkZHIsIHBpbmZvKTsKIAogCQkJKmNwID0gMTM7CiAJCQliZHAtPmNiZF9kYXRsZW4gPSAxOwpAQCAtMTA2Nyw5ICsxMTUwLDcgQEAKIAlwaW5mby0+dHhfY3VyID0gKHZvbGF0aWxlIGNiZF90ICopIGJkcDsKIH0KIAotLyoKLSAqIFNldHVwIGNvbnNvbGUuIEJlIGNhcmVmdWwgaXMgY2FsbGVkIGVhcmx5ICEKLSAqLworCiBzdGF0aWMgaW50IF9faW5pdCBjcG1fdWFydF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwpAQCAtMTA4MCw5ICsxMTYxLDI5IEBACiAJaW50IGZsb3cgPSAnbic7CiAJaW50IHJldDsKIAorCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBkYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYgPSBlYXJseV91YXJ0X2dldF9wZGV2KGNvLT5pbmRleCk7CisKKwlpZiAoIXBkZXYpIHsKKwkJcHJfaW5mbygiY3BtX3VhcnQ6IGNvbnNvbGU6IGNvbXBhdCBtb2RlXG4iKTsKKwkJLyogY29tcGF0aWJpbGl0eSAtIHdpbGwgYmUgY2xlYW5lZCB1cCAqLworCQljcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7CisJfQorCiAJcG9ydCA9CiAJICAgIChzdHJ1Y3QgdWFydF9wb3J0ICopJmNwbV91YXJ0X3BvcnRzW2NwbV91YXJ0X3BvcnRfbWFwW2NvLT5pbmRleF1dOwogCXBpbmZvID0gKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICopcG9ydDsKKwlpZiAoIXBkZXYpIHsKKwkJaWYgKHBpbmZvLT5zZXRfbGluZWlmKQorCQkJcGluZm8tPnNldF9saW5laWYocGluZm8pOworCX0gZWxzZSB7CisJCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCWlmIChwZGF0YSkKKwkJCWlmIChwZGF0YS0+aW5pdF9pb3BvcnRzKQorICAgIAkgICAgICAgICAgICAgICAgCXBkYXRhLT5pbml0X2lvcG9ydHMoKTsKKworCQljcG1fdWFydF9kcnZfZ2V0X3BsYXRmb3JtX2RhdGEocGRldiwgMSk7CisJfQogCiAJcGluZm8tPmZsYWdzIHw9IEZMQUdfQ09OU09MRTsKIApAQCAtMTA5NywxNCArMTE5OCw2IEBACiAJCQliYXVkID0gOTYwMDsKIAl9CiAKLQkvKgotCSAqIFNldHVwIGFueSBwb3J0IElPLCBjb25uZWN0IGFueSBiYXVkIHJhdGUgZ2VuZXJhdG9ycywKLQkgKiBldGMuICBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGhhbmRsZWQgYnkgYm9hcmQKLQkgKiBkZXBlbmRhbnQgY29kZQotCSAqLwotCWlmIChwaW5mby0+c2V0X2xpbmVpZikKLQkJcGluZm8tPnNldF9saW5laWYocGluZm8pOwotCiAJaWYgKElTX1NNQyhwaW5mbykpIHsKIAkJcGluZm8tPnNtY3AtPnNtY19zbWNtICY9IH4oU01DTV9SWCB8IFNNQ01fVFgpOwogCQlwaW5mby0+c21jcC0+c21jX3NtY21yICY9IH4oU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKQEAgLTExNDMsMTEgKzEyMzYsOCBAQAogCiBpbnQgX19pbml0IGNwbV91YXJ0X2NvbnNvbGVfaW5pdCh2b2lkKQogewotCWludCByZXQgPSBjcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7Ci0KLQlpZiAoIXJldCkKLQkJcmVnaXN0ZXJfY29uc29sZSgmY3BtX3NjY191YXJ0X2NvbnNvbGUpOwotCXJldHVybiByZXQ7CisJcmVnaXN0ZXJfY29uc29sZSgmY3BtX3NjY191YXJ0X2NvbnNvbGUpOworCXJldHVybiAwOwogfQogCiBjb25zb2xlX2luaXRjYWxsKGNwbV91YXJ0X2NvbnNvbGVfaW5pdCk7CkBAIC0xMTY1LDQ0ICsxMjU1LDEyOSBAQAogCS5taW5vcgkJPSBTRVJJQUxfQ1BNX01JTk9SLAogCS5jb25zCQk9IENQTV9VQVJUX0NPTlNPTEUsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBjcG1fdWFydF9pbml0KHZvaWQpCitzdGF0aWMgaW50IGNwbV91YXJ0X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldCwgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBkYXRhOworCWludCByZXQgPSAtRU5PREVWOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBDUE0gZHJpdmVyICRSZXZpc2lvbjogMC4wMSAkXG4iKTsKLQotI2lmbmRlZiBDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFCi0JcmV0ID0gY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYygpOwotCWlmIChyZXQpCisJaWYoIXBkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkNQTSBVQVJUOiBwbGF0Zm9ybSBkYXRhIG1pc3NpbmchXG4iKTsKIAkJcmV0dXJuIHJldDsKLSNlbmRpZgotCi0JY3BtX3JlZy5uciA9IGNwbV91YXJ0X25yOwotCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZjcG1fcmVnKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3BtX3VhcnRfbnI7IGkrKykgewotCQlpbnQgY29uID0gY3BtX3VhcnRfcG9ydF9tYXBbaV07Ci0JCWNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydC5saW5lID0gaTsKLQkJY3BtX3VhcnRfcG9ydHNbY29uXS5wb3J0LmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7Ci0JCXVhcnRfYWRkX29uZV9wb3J0KCZjcG1fcmVnLCAmY3BtX3VhcnRfcG9ydHNbY29uXS5wb3J0KTsKIAl9CiAKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXByX2RlYnVnKCJjcG1fdWFydF9kcnZfcHJvYmU6IEFkZGluZyBDUE0gVUFSVCAlZFxuIiwgY3BtX3VhcnRfaWQybnIocGRhdGEtPmZzX25vKSk7CisKKwlpZiAoKHJldCA9IGNwbV91YXJ0X2Rydl9nZXRfcGxhdGZvcm1fZGF0YShwZGV2LCAwKSkpCisJCXJldHVybiByZXQ7CisKKwlpZiAocGRhdGEtPmluaXRfaW9wb3J0cykKKyAgICAgICAgICAgICAgICBwZGF0YS0+aW5pdF9pb3BvcnRzKCk7CisKKwlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmY3BtX3JlZywgJmNwbV91YXJ0X3BvcnRzW3BkYXRhLT5mc19ub10ucG9ydCk7CisKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjcG1fdWFydF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwcl9kZWJ1ZygiY3BtX3VhcnRfZHJ2X3JlbW92ZTogUmVtb3ZpbmcgQ1BNIFVBUlQgJWRcbiIsCisJCQljcG1fdWFydF9pZDJucihwZGF0YS0+ZnNfbm8pKTsKKworICAgICAgICB1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmY3BtX3JlZywgJmNwbV91YXJ0X3BvcnRzW3BkYXRhLT5mc19ub10ucG9ydCk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY3BtX3NtY191YXJ0X2RyaXZlciA9IHsKKyAgICAgICAgLm5hbWUgICA9ICJmc2wtY3BtLXNtYzp1YXJ0IiwKKyAgICAgICAgLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKyAgICAgICAgLnByb2JlICA9IGNwbV91YXJ0X2Rydl9wcm9iZSwKKyAgICAgICAgLnJlbW92ZSA9IGNwbV91YXJ0X2Rydl9yZW1vdmUsCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY3BtX3NjY191YXJ0X2RyaXZlciA9IHsKKyAgICAgICAgLm5hbWUgICA9ICJmc2wtY3BtLXNjYzp1YXJ0IiwKKyAgICAgICAgLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKyAgICAgICAgLnByb2JlICA9IGNwbV91YXJ0X2Rydl9wcm9iZSwKKyAgICAgICAgLnJlbW92ZSA9IGNwbV91YXJ0X2Rydl9yZW1vdmUsCit9OworCisvKgorICAgVGhpcyBpcyBzdXBwb3NlZCB0byBtYXRjaCB1YXJ0IGRldmljZXMgb24gcGxhdGZvcm0gYnVzLAorICAgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfaXNfdWFydCAoc3RydWN0IGRldmljZSogZGV2LCB2b2lkKiBkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCWludCByZXQgPSAwOworCS8qIHRoaXMgd2FzIHNldGZ1bmMgYXMgdWFydCAqLworCWlmKHN0cnN0cihwZGV2LT5uYW1lLCI6dWFydCIpKSB7CisJCXJldCA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBjcG1fdWFydF9pbml0KHZvaWQpIHsKKworCWludCByZXQ7CisJaW50IGk7CisJc3RydWN0IGRldmljZSAqZGV2OworCXByaW50ayhLRVJOX0lORk8gIlNlcmlhbDogQ1BNIGRyaXZlciAkUmV2aXNpb246IDAuMDIgJFxuIik7CisKKwkvKiBsb29rdXAgdGhlIGJ1cyBmb3IgdWFydCBkZXZpY2VzICovCisJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZwbGF0Zm9ybV9idXNfdHlwZSwgTlVMTCwgMCwgbWF0Y2hfaXNfdWFydCk7CisKKwkvKiBUaGVyZSBhcmUgZGV2aWNlcyBvbiB0aGUgYnVzIC0gYWxsIHNob3VsZCBiZSBPSyAgKi8KKwlpZiAoZGV2KSB7CisJCWNwbV91YXJ0X2NvdW50KCk7CisJCWNwbV9yZWcubnIgPSBjcG1fdWFydF9ucjsKKworCQlpZiAoIShyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZykpKSB7CisJCQlpZiAoKHJldCA9IGRyaXZlcl9yZWdpc3RlcigmY3BtX3NtY191YXJ0X2RyaXZlcikpKSB7CisJCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWlmICgocmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZjcG1fc2NjX3VhcnRfZHJpdmVyKSkpIHsKKwkJCQlkcml2ZXJfdW5yZWdpc3RlcigmY3BtX3NjY191YXJ0X2RyaXZlcik7CisJCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCS8qIE5vIGNhcGFibGUgcGxhdGZvcm0gZGV2aWNlcyBmb3VuZCAtIGZhbGxpbmcgYmFjayB0byBsZWdhY3kgbW9kZSAqLworCQlwcl9pbmZvKCJjcG1fdWFydDogV0FSTklORzogbm8gVUFSVCBkZXZpY2VzIGZvdW5kIG9uIHBsYXRmb3JtIGJ1cyFcbiIpOworCQlwcl9pbmZvKAorCQkiY3BtX3VhcnQ6IHRoZSBkcml2ZXIgd2lsbCBndWVzcyBjb25maWd1cmF0aW9uLCBidXQgdGhpcyBtb2RlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4iKTsKKyNpZm5kZWYgQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRQorCQlyZXQgPSBjcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworI2VuZGlmCisKKwkJY3BtX3JlZy5uciA9IGNwbV91YXJ0X25yOworCQlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGNwbV91YXJ0X25yOyBpKyspIHsKKwkJCWludCBjb24gPSBjcG1fdWFydF9wb3J0X21hcFtpXTsKKwkJCWNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydC5saW5lID0gaTsKKwkJCWNwbV91YXJ0X3BvcnRzW2Nvbl0ucG9ydC5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GOworCQkJdWFydF9hZGRfb25lX3BvcnQoJmNwbV9yZWcsICZjcG1fdWFydF9wb3J0c1tjb25dLnBvcnQpOworCQl9CisKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNwbV91YXJ0X2V4aXQodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjcG1fdWFydF9ucjsgaSsrKSB7Ci0JCWludCBjb24gPSBjcG1fdWFydF9wb3J0X21hcFtpXTsKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmNwbV9yZWcsICZjcG1fdWFydF9wb3J0c1tjb25dLnBvcnQpOwotCX0KLQorCWRyaXZlcl91bnJlZ2lzdGVyKCZjcG1fc2NjX3VhcnRfZHJpdmVyKTsKKwlkcml2ZXJfdW5yZWdpc3RlcigmY3BtX3NtY191YXJ0X2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmY3BtX3JlZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwppbmRleCBkNzg5ZWU1Li4xNzQwNmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCkBAIC04LDYgKzgsOCBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqICAgICAgICAgICAgKEMpIDIwMDQgSW50cmFjb20sIFMuQS4KKyAqICAgICAgICAgICAgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogCQlWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04MSw1OCArODMsMTEgQEAKIAogdm9pZCBzbWMxX2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtcDsKLQotCSh2b2lkKWNwOwkvKiBmaXggd2FybmluZyAqLwotI2lmIGRlZmluZWQgKENPTkZJR19NUEM4ODVBRFMpCi0JLyogRW5hYmxlIFNNQzEgdHJhbnNjZWl2ZXJzICovCi0JewotCQljcC0+Y3BfcGVwYXIgfD0gMHgwMDAwMDBjMDsKLQkJY3AtPmNwX3BlZGlyICY9IH4weDAwMDAwMGMwOwotCQljcC0+Y3BfcGVzbyAmPSB+MHgwMDAwMDA0MDsKLQkJY3AtPmNwX3Blc28gfD0gMHgwMDAwMDA4MDsKLQl9Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTVBDODZYQURTKQotCXVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwMGMwOwotCi0JaWYgKCFwaW5mby0+aXNfcG9ydGIpIHsKLQkJY3AtPmNwX3BicGFyIHw9IGlvYml0czsKLQkJY3AtPmNwX3BiZGlyICY9IH5pb2JpdHM7Ci0JCWNwLT5jcF9wYm9kciAmPSB+aW9iaXRzOwotCX0gZWxzZSB7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFwYXIgfD0gaW9iaXRzOwotCQkoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9pb3BvcnQuaW9wX3BhZGlyICY9IH5pb2JpdHM7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFvZHIgJj0gfmlvYml0czsKLQl9Ci0jZW5kaWYKIAlwaW5mby0+YnJnID0gMTsKIH0KIAogdm9pZCBzbWMyX2xpbmVpZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtcDsKLQotCSh2b2lkKWNwOwkvKiBmaXggd2FybmluZyAqLwotI2lmIGRlZmluZWQgKENPTkZJR19NUEM4ODVBRFMpCi0JY3AtPmNwX3BlcGFyIHw9IDB4MDAwMDBjMDA7Ci0JY3AtPmNwX3BlZGlyICY9IH4weDAwMDAwYzAwOwotCWNwLT5jcF9wZXNvICY9IH4weDAwMDAwNDAwOwotCWNwLT5jcF9wZXNvIHw9IDB4MDAwMDA4MDA7Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTVBDODZYQURTKQotCXVuc2lnbmVkIGludCBpb2JpdHMgPSAweDAwMDAwYzAwOwotCi0JaWYgKCFwaW5mby0+aXNfcG9ydGIpIHsKLQkJY3AtPmNwX3BicGFyIHw9IGlvYml0czsKLQkJY3AtPmNwX3BiZGlyICY9IH5pb2JpdHM7Ci0JCWNwLT5jcF9wYm9kciAmPSB+aW9iaXRzOwotCX0gZWxzZSB7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFwYXIgfD0gaW9iaXRzOwotCQkoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9pb3BvcnQuaW9wX3BhZGlyICY9IH5pb2JpdHM7Ci0JCSgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2lvcG9ydC5pb3BfcGFvZHIgJj0gfmlvYml0czsKLQl9Ci0KLSNlbmRpZgotCiAJcGluZm8tPmJyZyA9IDI7CiB9CiAKQEAgLTE5MSw3ICsxNDYsNyBAQAogCQkvKiB3YXMgaG9zdGFsbG9jIGJ1dCBjaGFuZ2VkIGNhdXNlIGl0IGJsb3dzIGF3YXkgdGhlICovCiAJCS8qIGxhcmdlIHRsYiBtYXBwaW5nIHdoZW4gcGlubmluZyB0aGUga2VybmVsIGFyZWEgICAgKi8KIAkJbWVtX2FkZHIgPSAodTggKikgY3BtX2RwcmFtX2FkZHIoY3BtX2RwYWxsb2MobWVtc3osIDgpKTsKLQkJZG1hX2FkZHIgPSAwOworCQlkbWFfYWRkciA9ICh1MzIpbWVtX2FkZHI7CiAJfSBlbHNlCiAJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwpAQCAtMjA0LDggKzE1OSw5IEBACiAJfQogCiAJcGluZm8tPmRwX2FkZHIgPSBkcF9vZmZzZXQ7Ci0JcGluZm8tPm1lbV9hZGRyID0gbWVtX2FkZHI7Ci0JcGluZm8tPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJcGluZm8tPm1lbV9hZGRyID0gbWVtX2FkZHI7ICAgICAgICAgICAgIC8qICB2aXJ0dWFsIGFkZHJlc3MqLworCXBpbmZvLT5kbWFfYWRkciA9IGRtYV9hZGRyOyAgICAgICAgICAgICAvKiAgcGh5c2ljYWwgYWRkcmVzcyovCisJcGluZm8tPm1lbV9zaXplID0gbWVtc3o7CiAKIAlwaW5mby0+cnhfYnVmID0gbWVtX2FkZHI7CiAJcGluZm8tPnR4X2J1ZiA9IHBpbmZvLT5yeF9idWYgKyBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCmluZGV4IGZkOWU1M2UuLmNkYmExMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTgsNiArOCw4IEBACiAgKiAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqICAgICAgICAgICAgKEMpIDIwMDQgSW50cmFjb20sIFMuQS4KKyAqICAgICAgICAgICAgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogCQlWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNDIsMTQgKzE0NCw2IEBACiAJICogYmUgc3VwcG9ydGVkIGluIGEgc2FuZSBmYXNoaW9uLgogCSAqLwogI2lmbmRlZiBDT05GSUdfU1RYX0dQMwotI2lmZGVmIENPTkZJR19NUEM4NTYwX0FEUwotCXZvbGF0aWxlIGlvcF9jcG0yX3QgKmlvID0gJmNwbTJfaW1tci0+aW1faW9wb3J0OwotCWlvLT5pb3BfcHBhcmQgfD0gMHgwMDAwMDAxODsKLQlpby0+aW9wX3Bzb3JkICY9IH4weDAwMDAwMDA4OwkvKiBSeCAqLwotCWlvLT5pb3BfcHNvcmQgJj0gfjB4MDAwMDAwMTA7CS8qIFR4ICovCi0JaW8tPmlvcF9wZGlyZCAmPSB+MHgwMDAwMDAwODsJLyogUnggKi8KLQlpby0+aW9wX3BkaXJkIHw9IDB4MDAwMDAwMTA7CS8qIFR4ICovCi0jZWxzZQogCXZvbGF0aWxlIGlvcF9jcG0yX3QgKmlvID0gJmNwbTJfaW1tci0+aW1faW9wb3J0OwogCWlvLT5pb3BfcHBhcmIgfD0gMHgwMDhiMDAwMDsKIAlpby0+aW9wX3BkaXJiIHw9IDB4MDA4ODAwMDA7CkBAIC0xNTcsNyArMTUxLDYgQEAKIAlpby0+aW9wX3BkaXJiICY9IH4weDAwMDMwMDAwOwogCWlvLT5pb3BfcHNvcmIgJj0gfjB4MDAwMzAwMDA7CiAjZW5kaWYKLSNlbmRpZgogCWNwbTJfaW1tci0+aW1fY3BtdXguY214X3NjciAmPSAweGZmMDBmZmZmOwogCWNwbTJfaW1tci0+aW1fY3BtdXguY214X3NjciB8PSAweDAwMDkwMDAwOwogCXBpbmZvLT5icmcgPSAyOwpAQCAtMjE4LDggKzIxMSwxMCBAQAogCiAJbWVtc3ogPSBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqIHBpbmZvLT5yeF9maWZvc2l6ZSkgKwogCSAgICBMMV9DQUNIRV9BTElHTihwaW5mby0+dHhfbnJmaWZvcyAqIHBpbmZvLT50eF9maWZvc2l6ZSk7Ci0JaWYgKGlzX2NvbikKKwlpZiAoaXNfY29uKSB7CiAJCW1lbV9hZGRyID0gYWxsb2NfYm9vdG1lbShtZW1zeik7CisJCWRtYV9hZGRyID0gdmlydF90b19idXMobWVtX2FkZHIpOworCX0KIAllbHNlCiAJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwpAQCAtMjM0LDYgKzIyOSw3IEBACiAJcGluZm8tPmRwX2FkZHIgPSBkcF9vZmZzZXQ7CiAJcGluZm8tPm1lbV9hZGRyID0gbWVtX2FkZHI7CiAJcGluZm8tPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJcGluZm8tPm1lbV9zaXplID0gbWVtc3o7CiAKIAlwaW5mby0+cnhfYnVmID0gbWVtX2FkZHI7CiAJcGluZm8tPnR4X2J1ZiA9IHBpbmZvLT5yeF9idWYgKyBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCBjM2I3YTY2Li5kMjAyZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtdWFydC5oPgogCiAvKiBXZSd2ZSBiZWVuIGFzc2lnbmVkIGEgcmFuZ2Ugb24gdGhlICJMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMiIG1ham9yICovCiAjZGVmaW5lIFNFUklBTF9JTVhfTUFKT1IJMjA0CkBAIC03Myw3ICs3NCw4IEBACiAJc3RydWN0IHVhcnRfcG9ydAlwb3J0OwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCXVuc2lnbmVkIGludAkJb2xkX3N0YXR1czsKLQlpbnQgdHhpcnEscnhpcnEscnRzaXJxOworCWludAkJCXR4aXJxLHJ4aXJxLHJ0c2lycTsKKwlpbnQJCQloYXZlX3J0c2N0czoxOwogfTsKIAogLyoKQEAgLTQ5MSw4ICs0OTMsMTIgQEAKIAkJdWNyMiA9IFVDUjJfU1JTVCB8IFVDUjJfSVJUUzsKIAogCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewotCQl1Y3IyICY9IH5VQ1IyX0lSVFM7Ci0JCXVjcjIgfD0gVUNSMl9DVFNDOworCQlpZiggc3BvcnQtPmhhdmVfcnRzY3RzICkgeworCQkJdWNyMiAmPSB+VUNSMl9JUlRTOworCQkJdWNyMiB8PSBVQ1IyX0NUU0M7CisJCX0gZWxzZSB7CisJCQl0ZXJtaW9zLT5jX2NmbGFnICY9IH5DUlRTQ1RTOworCQl9CiAJfQogCiAJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpCkBAIC03MTksMjcgKzcyNSw2IEBACiAJCWlteF9wb3J0c1tpXS50aW1lci5mdW5jdGlvbiA9IGlteF90aW1lb3V0OwogCQlpbXhfcG9ydHNbaV0udGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZykmaW14X3BvcnRzW2ldOwogCX0KLQotCWlteF9ncGlvX21vZGUoUEM5X1BGX1VBUlQxX0NUUyk7Ci0JaW14X2dwaW9fbW9kZShQQzEwX1BGX1VBUlQxX1JUUyk7Ci0JaW14X2dwaW9fbW9kZShQQzExX1BGX1VBUlQxX1RYRCk7Ci0JaW14X2dwaW9fbW9kZShQQzEyX1BGX1VBUlQxX1JYRCk7Ci0JaW14X2dwaW9fbW9kZShQQjI4X1BGX1VBUlQyX0NUUyk7Ci0JaW14X2dwaW9fbW9kZShQQjI5X1BGX1VBUlQyX1JUUyk7Ci0KLQlpbXhfZ3Bpb19tb2RlKFBCMzBfUEZfVUFSVDJfVFhEKTsKLQlpbXhfZ3Bpb19tb2RlKFBCMzFfUEZfVUFSVDJfUlhEKTsKLQotI2lmIDAgLyogV2UgZG9uJ3QgbmVlZCB0aGVzZSwgb24gdGhlIG14MSB0aGUgX21vZGVtXyBzaWRlIG9mIHRoZSB1YXJ0Ci0gICAgICAgKiBpcyBpbXBsZW1lbnRlZC4KLSAgICAgICAqLwotCWlteF9ncGlvX21vZGUoUEQ3X0FGX1VBUlQyX0RUUik7Ci0JaW14X2dwaW9fbW9kZShQRDhfQUZfVUFSVDJfRENEKTsKLQlpbXhfZ3Bpb19tb2RlKFBEOV9BRl9VQVJUMl9SSSk7Ci0JaW14X2dwaW9fbW9kZShQRDEwX0FGX1VBUlQyX0RTUik7Ci0jZW5kaWYKLQotCiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0lNWF9DT05TT0xFCkBAIC05MzIsNyArOTE3LDE0IEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKIAlpbXhfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7CisKKwlwZGF0YSA9IChzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhICopZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZihwZGF0YSAmJiAocGRhdGEtPmZsYWdzICYgSU1YVUFSVF9IQVZFX1JUU0NUUykpCisJCWlteF9wb3J0c1tkZXYtPmlkXS5oYXZlX3J0c2N0cyA9IDE7CisKIAl1YXJ0X2FkZF9vbmVfcG9ydCgmaW14X3JlZywgJmlteF9wb3J0c1tkZXYtPmlkXS5wb3J0KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZpbXhfcG9ydHNbZGV2LT5pZF0pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbS5oIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbS5oCmluZGV4IGRmYzFlODYuLjA0M2Y1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc20uaAorKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogU2NvdHQgSCBLaWxhdSA8U2NvdHRfS2lsYXVAZGlnaS5jb20+Ci0gKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMubHRjZndkLmxpbnV4LmlibS5jb20+CisgKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMuaWJtLmNvbT4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCmluZGV4IGIxYjY2ZTcuLmIzZTFmNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYwpAQCAtMjAsNyArMjAsNyBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiBTY290dCBIIEtpbGF1IDxTY290dF9LaWxhdUBkaWdpLmNvbT4KLSAqIFdlbmR5IFhpb25nICAgPHdlbmR5eEB1cy5sdGNmd2QubGludXguaWJtLmNvbT4KKyAqIFdlbmR5IFhpb25nICAgPHdlbmR5eEB1cy5pYm0uY29tPgogICoKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYwppbmRleCA4N2U0ZTJjLi5hNWZjNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogU2NvdHQgSCBLaWxhdSA8U2NvdHRfS2lsYXVAZGlnaS5jb20+Ci0gKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMubHRjZndkLmxpbnV4LmlibS5jb20+CisgKiBXZW5keSBYaW9uZyAgIDx3ZW5keXhAdXMuaWJtLmNvbT4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogRm9yIHVkZWxheSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKaW5kZXggZTljMTBjMC4uMzIxYTQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYworKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCkBAIC0xMDU3LDcgKzEwNTcsNiBAQAogewogCXN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCA9ICZtMzJyX3Npb19wb3J0c1tjby0+aW5kZXhdOwogCXVuc2lnbmVkIGludCBpZXI7Ci0JaW50IGk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIFVFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IGZjZDc3NDQuLjE3ODM5ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMTUwMCwyMCArMTUwMCwxOCBAQAogc3RhdGljIHN0cnVjdCB1YXJ0X3N0YXRlICp1YXJ0X2dldChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgaW50IGxpbmUpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCWludCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmcG9ydF9tdXRleCk7CiAJc3RhdGUgPSBkcnYtPnN0YXRlICsgbGluZTsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzdGF0ZS0+bXV0ZXgpKSB7Ci0JCXN0YXRlID0gRVJSX1BUUigtRVJFU1RBUlRTWVMpOwotCQlnb3RvIG91dDsKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGVycjsKIAl9CiAKIAlzdGF0ZS0+Y291bnQrKzsKLQlpZiAoIXN0YXRlLT5wb3J0KSB7Ci0JCXN0YXRlLT5jb3VudC0tOwotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0JCXN0YXRlID0gRVJSX1BUUigtRU5YSU8pOwotCQlnb3RvIG91dDsKKwlpZiAoIXN0YXRlLT5wb3J0IHx8IHN0YXRlLT5wb3J0LT5mbGFncyAmIFVQRl9ERUFEKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfdW5sb2NrOwogCX0KIAogCWlmICghc3RhdGUtPmluZm8pIHsKQEAgLTE1MzEsMTUgKzE1MjksMTcgQEAKIAkJCXRhc2tsZXRfaW5pdCgmc3RhdGUtPmluZm8tPnRsZXQsIHVhcnRfdGFza2xldF9hY3Rpb24sCiAJCQkJICAgICAodW5zaWduZWQgbG9uZylzdGF0ZSk7CiAJCX0gZWxzZSB7Ci0JCQlzdGF0ZS0+Y291bnQtLTsKLQkJCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQkJCXN0YXRlID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl91bmxvY2s7CiAJCX0KIAl9Ci0KLSBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwb3J0X211dGV4KTsKIAlyZXR1cm4gc3RhdGU7CisKKyBlcnJfdW5sb2NrOgorCXN0YXRlLT5jb3VudC0tOworCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKyBlcnI6CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAogLyoKQEAgLTE5MDcsOSArMTkwNywxMiBAQAogc3RhdGljIHZvaWQgdWFydF9jaGFuZ2VfcG0oc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCBpbnQgcG1fc3RhdGUpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OwotCWlmIChwb3J0LT5vcHMtPnBtKQotCQlwb3J0LT5vcHMtPnBtKHBvcnQsIHBtX3N0YXRlLCBzdGF0ZS0+cG1fc3RhdGUpOwotCXN0YXRlLT5wbV9zdGF0ZSA9IHBtX3N0YXRlOworCisJaWYgKHN0YXRlLT5wbV9zdGF0ZSAhPSBwbV9zdGF0ZSkgeworCQlpZiAocG9ydC0+b3BzLT5wbSkKKwkJCXBvcnQtPm9wcy0+cG0ocG9ydCwgcG1fc3RhdGUsIHN0YXRlLT5wbV9zdGF0ZSk7CisJCXN0YXRlLT5wbV9zdGF0ZSA9IHBtX3N0YXRlOworCX0KIH0KIAogaW50IHVhcnRfc3VzcGVuZF9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtMjA4NSw0NSArMjA4OCw2IEBACiAJfQogfQogCi0vKgotICogVGhpcyByZXZlcnNlcyB0aGUgZWZmZWN0cyBvZiB1YXJ0X2NvbmZpZ3VyZV9wb3J0LCBoYW5naW5nIHVwIHRoZQotICogcG9ydCBiZWZvcmUgcmVtb3ZhbC4KLSAqLwotc3RhdGljIHZvaWQKLXVhcnRfdW5jb25maWd1cmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gc3RhdGUtPmluZm87Ci0KLQlpZiAoaW5mbyAmJiBpbmZvLT50dHkpCi0JCXR0eV92aGFuZ3VwKGluZm8tPnR0eSk7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0Jc3RhdGUtPmluZm8gPSBOVUxMOwotCi0JLyoKLQkgKiBGcmVlIHRoZSBwb3J0IElPIGFuZCBtZW1vcnkgcmVzb3VyY2VzLCBpZiBhbnkuCi0JICovCi0JaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQotCQlwb3J0LT5vcHMtPnJlbGVhc2VfcG9ydChwb3J0KTsKLQotCS8qCi0JICogSW5kaWNhdGUgdGhhdCB0aGVyZSBpc24ndCBhIHBvcnQgaGVyZSBhbnltb3JlLgotCSAqLwotCXBvcnQtPnR5cGUgPSBQT1JUX1VOS05PV047Ci0KLQkvKgotCSAqIEtpbGwgdGhlIHRhc2tsZXQsIGFuZCBmcmVlIHJlc291cmNlcy4KLQkgKi8KLQlpZiAoaW5mbykgewotCQl0YXNrbGV0X2tpbGwoJmluZm8tPnRsZXQpOwotCQlrZnJlZShpbmZvKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgdWFydF9vcHMgPSB7CiAJLm9wZW4JCT0gdWFydF9vcGVuLAogCS5jbG9zZQkJPSB1YXJ0X2Nsb3NlLApAQCAtMjI3MCw2ICsyMjM0LDcgQEAKIAlzdGF0ZSA9IGRydi0+c3RhdGUgKyBwb3J0LT5saW5lOwogCiAJbXV0ZXhfbG9jaygmcG9ydF9tdXRleCk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKIAlpZiAoc3RhdGUtPnBvcnQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC0yMzA0LDcgKzIyNjksMTMgQEAKIAkgICAgcG9ydC0+Y29ucyAmJiAhKHBvcnQtPmNvbnMtPmZsYWdzICYgQ09OX0VOQUJMRUQpKQogCQlyZWdpc3Rlcl9jb25zb2xlKHBvcnQtPmNvbnMpOwogCisJLyoKKwkgKiBFbnN1cmUgVVBGX0RFQUQgaXMgbm90IHNldC4KKwkgKi8KKwlwb3J0LT5mbGFncyAmPSB+VVBGX0RFQUQ7CisKICBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwogCW11dGV4X3VubG9jaygmcG9ydF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjMyMiw2ICsyMjkzLDcgQEAKIGludCB1YXJ0X3JlbW92ZV9vbmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKKwlzdHJ1Y3QgdWFydF9pbmZvICppbmZvOwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIApAQCAtMjMzMiwxMSArMjMwNCw0OCBAQAogCW11dGV4X2xvY2soJnBvcnRfbXV0ZXgpOwogCiAJLyoKKwkgKiBNYXJrIHRoZSBwb3J0ICJkZWFkIiAtIHRoaXMgcHJldmVudHMgYW55IG9wZW5zIGZyb20KKwkgKiBzdWNjZWVkaW5nIHdoaWxlIHdlIHNodXQgZG93biB0aGUgcG9ydC4KKwkgKi8KKwltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCXBvcnQtPmZsYWdzIHw9IFVQRl9ERUFEOworCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKworCS8qCiAJICogUmVtb3ZlIHRoZSBkZXZpY2VzIGZyb20gZGV2ZnMKIAkgKi8KIAl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoZHJ2LT50dHlfZHJpdmVyLCBwb3J0LT5saW5lKTsKIAotCXVhcnRfdW5jb25maWd1cmVfcG9ydChkcnYsIHN0YXRlKTsKKwlpbmZvID0gc3RhdGUtPmluZm87CisJaWYgKGluZm8gJiYgaW5mby0+dHR5KQorCQl0dHlfdmhhbmd1cChpbmZvLT50dHkpOworCisJLyoKKwkgKiBBbGwgdXNlcnMgb2YgdGhpcyBwb3J0IHNob3VsZCBub3cgYmUgZGlzY29ubmVjdGVkIGZyb20KKwkgKiB0aGlzIGRyaXZlciwgYW5kIHRoZSBwb3J0IHNodXQgZG93bi4gIFdlIHNob3VsZCBiZSB0aGUKKwkgKiBvbmx5IHRocmVhZCBmaWRkbGluZyB3aXRoIHRoaXMgcG9ydCBmcm9tIG5vdyBvbi4KKwkgKi8KKwlzdGF0ZS0+aW5mbyA9IE5VTEw7CisKKwkvKgorCSAqIEZyZWUgdGhlIHBvcnQgSU8gYW5kIG1lbW9yeSByZXNvdXJjZXMsIGlmIGFueS4KKwkgKi8KKwlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pCisJCXBvcnQtPm9wcy0+cmVsZWFzZV9wb3J0KHBvcnQpOworCisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoZXJlIGlzbid0IGEgcG9ydCBoZXJlIGFueW1vcmUuCisJICovCisJcG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKKworCS8qCisJICogS2lsbCB0aGUgdGFza2xldCwgYW5kIGZyZWUgcmVzb3VyY2VzLgorCSAqLworCWlmIChpbmZvKSB7CisJCXRhc2tsZXRfa2lsbCgmaW5mby0+dGxldCk7CisJCWtmcmVlKGluZm8pOworCX0KKwogCXN0YXRlLT5wb3J0ID0gTlVMTDsKIAltdXRleF91bmxvY2soJnBvcnRfbXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCmluZGV4IGMzMDMzMzYuLjJjNzA3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC05NywxMSArOTgsMTMgQEAKICNkZWZpbmUgTVVMVElfQ09VTlQgKHNpemVvZihtdWx0aV9pZCkvc2l6ZW9mKHN0cnVjdCBtdWx0aV9pZCkpCiAKIHN0cnVjdCBzZXJpYWxfaW5mbyB7Ci0JZGV2X2xpbmtfdAkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJaW50CQkJbmRldjsKIAlpbnQJCQltdWx0aTsKIAlpbnQJCQlzbGF2ZTsKIAlpbnQJCQltYW5maWQ7CisJaW50CQkJcHJvZGlkOworCWludAkJCWM5NTBjdHJsOwogCWRldl9ub2RlX3QJCW5vZGVbNF07CiAJaW50CQkJbGluZVs0XTsKIH07CkBAIC0xMTMsOSArMTE2LDM2IEBACiB9OwogCiAKLXN0YXRpYyB2b2lkIHNlcmlhbF9jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspOworc3RhdGljIGludCBzZXJpYWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluayk7CiAKIAorc3RhdGljIHZvaWQgd2FrZXVwX2NhcmQoc3RydWN0IHNlcmlhbF9pbmZvICppbmZvKQoreworCWludCBjdHJsID0gaW5mby0+Yzk1MGN0cmw7CisKKwlpZiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF9PWFNFTUkpIHsKKwkJb3V0YigxMiwgY3RybCArIDEpOworCX0gZWxzZSBpZiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF9QT1NTSU8gJiYgaW5mby0+cHJvZGlkID09IFBST0RJRF9QT1NTSU9fR0NDKSB7CisJCS8qIHJlcXVlc3RfcmVnaW9uPyBveHNlbWkgYnJhbmNoIGRvZXMgbm8gcmVxdWVzdF9yZWdpb24gdG9vLi4uICovCisJCS8qIFRoaXMgc2VxdWVuY2UgaXMgbmVlZGVkIHRvIHByb3Blcmx5IGluaXRpYWxpemUgTUM0NSBhdHRhY2hlZCB0byBPWENGOTUwLgorCQkgKiBJIHRyaWVkIGRlY3JlYXNpbmcgdGhlc2UgbXNsZWVwKClzLCBidXQgaXQgd29ya2VkIHByb3Blcmx5IChzdXJ2aXZlZAorCQkgKiAxMDAwIHN0b3Avc3RhcnQgb3BlcmF0aW9ucykgd2l0aCB0aGVzZSB0aW1lb3V0cyAob3IgYmlnZ2VyKS4gKi8KKwkJb3V0YigweEEsIGN0cmwgKyAxKTsKKwkJbXNsZWVwKDEwMCk7CisJCW91dGIoMHhFLCBjdHJsICsgMSk7CisJCW1zbGVlcCgzMDApOworCQlvdXRiKDB4QywgY3RybCArIDEpOworCQltc2xlZXAoMTAwKTsKKwkJb3V0YigweEUsIGN0cmwgKyAxKTsKKwkJbXNsZWVwKDIwMCk7CisJCW91dGIoMHhGLCBjdHJsICsgMSk7CisJCW1zbGVlcCgxMDApOworCQlvdXRiKDB4RSwgY3RybCArIDEpOworCQltc2xlZXAoMTAwKTsKKwkJb3V0YigweEMsIGN0cmwgKyAxKTsKKwl9Cit9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIHNlcmlhbF9yZW1vdmUoKSB3aWxsIHVucmVnaXN0ZXIKQEAgLTEyMyw2NyArMTUzLDQ1IEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgc2VyaWFsX3JlbW92ZShkZXZfbGlua190ICpsaW5rKQorc3RhdGljIHZvaWQgc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwogCWludCBpOwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9QUkVTRU5UOwotCiAJREVCVUcoMCwgInNlcmlhbF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAogCS8qCiAJICogUmVjaGVjayB0byBzZWUgaWYgdGhlIGRldmljZSBpcyBzdGlsbCBjb25maWd1cmVkLgogCSAqLwotCWlmIChpbmZvLT5saW5rLnN0YXRlICYgREVWX0NPTkZJRykgewotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bmRldjsgaSsrKQotCQkJc2VyaWFsODI1MF91bnJlZ2lzdGVyX3BvcnQoaW5mby0+bGluZVtpXSk7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPm5kZXY7IGkrKykKKwkJc2VyaWFsODI1MF91bnJlZ2lzdGVyX3BvcnQoaW5mby0+bGluZVtpXSk7CiAKLQkJaW5mby0+bGluay5kZXYgPSBOVUxMOworCWluZm8tPnBfZGV2LT5kZXZfbm9kZSA9IE5VTEw7CiAKLQkJaWYgKCFpbmZvLT5zbGF2ZSkgewotCQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihpbmZvLT5saW5rLmhhbmRsZSk7Ci0JCQlwY21jaWFfcmVsZWFzZV9pbyhpbmZvLT5saW5rLmhhbmRsZSwgJmluZm8tPmxpbmsuaW8pOwotCQkJcGNtY2lhX3JlbGVhc2VfaXJxKGluZm8tPmxpbmsuaGFuZGxlLCAmaW5mby0+bGluay5pcnEpOwotCQl9Ci0KLQkJaW5mby0+bGluay5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLQl9CisJaWYgKCFpbmZvLT5zbGF2ZSkKKwkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNlcmlhbF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKKwlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OworCWludCBpOwogCi0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bmRldjsgaSsrKQotCQkJc2VyaWFsODI1MF9zdXNwZW5kX3BvcnQoaW5mby0+bGluZVtpXSk7Ci0KLQkJaWYgKCFpbmZvLT5zbGF2ZSkKLQkJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGluZm8tPm5kZXY7IGkrKykKKwkJc2VyaWFsODI1MF9zdXNwZW5kX3BvcnQoaW5mby0+bGluZVtpXSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNlcmlhbF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQotCWlmIChERVZfT0sobGluaykpIHsKKwlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CiAJCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7CiAJCWludCBpOwogCi0JCWlmICghaW5mby0+c2xhdmUpCi0JCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCiAJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uZGV2OyBpKyspCiAJCQlzZXJpYWw4MjUwX3Jlc3VtZV9wb3J0KGluZm8tPmxpbmVbaV0pOworCQl3YWtldXBfY2FyZChpbmZvKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE5NywxMCArMjA1LDkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc2VyaWFsX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbzsKLQlkZXZfbGlua190ICpsaW5rOwogCiAJREVCVUcoMCwgInNlcmlhbF9hdHRhY2goKVxuIik7CiAKQEAgLTIwOSw3ICsyMTYsNyBAQAogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZiAoKmluZm8pKTsKLQlsaW5rID0gJmluZm8tPmxpbms7CisJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKQEAgLTIyMywxMiArMjMwLDcgQEAKIAl9CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXNlcmlhbF9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VyaWFsX2NvbmZpZyhsaW5rKTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNDAsOSArMjQyLDggQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHNlcmlhbF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgc2VyaWFsX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwogCiAJREVCVUcoMCwgInNlcmlhbF9kZXRhY2goMHglcClcbiIsIGxpbmspOwpAQCAtMjYzLDcgKzI2NCw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHNldHVwX3NlcmlhbChjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBzdHJ1Y3Qgc2VyaWFsX2luZm8gKiBpbmZvLAorc3RhdGljIGludCBzZXR1cF9zZXJpYWwoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgc3RydWN0IHNlcmlhbF9pbmZvICogaW5mbywKIAkJCWtpb19hZGRyX3QgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKQEAgLTI5OCw3ICsyOTksNyBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQKLWZpcnN0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKiB0dXBsZSwgY2lzcGFyc2VfdCAqIHBhcnNlKQorZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqIHR1cGxlLCBjaXNwYXJzZV90ICogcGFyc2UpCiB7CiAJaW50IGk7CiAJaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7CkBAIC0zMTEsNyArMzEyLDcgQEAKIH0KIAogc3RhdGljIGludAotbmV4dF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICogdHVwbGUsIGNpc3BhcnNlX3QgKiBwYXJzZSkKK25leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqIHR1cGxlLCBjaXNwYXJzZV90ICogcGFyc2UpCiB7CiAJaW50IGk7CiAJaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKQEAgLTMyNSwxMSArMzI2LDEwIEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHNpbXBsZV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyBpbnQgc2ltcGxlX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdGF0aWMgY29uc3Qga2lvX2FkZHJfdCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CiAJc3RhdGljIGNvbnN0IGludCBzaXplX3RhYmxlWzJdID0geyA4LCAxNiB9OwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0gKmNmZ19tZW07CiAJdHVwbGVfdCAqdHVwbGU7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAlidWYgPSBjZmdfbWVtLT5idWY7CiAKIAkvKiBJZiB0aGUgY2FyZCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGxvb2sgdXAgdGhlIHBvcnQgYW5kIGlycSAqLwotCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25maWcpOworCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZmlnKTsKIAlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNvbmZpZy5BdHRyaWJ1dGVzICYgQ09ORl9WQUxJRF9DTElFTlQpKSB7CiAJCWtpb19hZGRyX3QgcG9ydCA9IDA7CiAJCWlmICgoY29uZmlnLkJhc2VQb3J0MiAhPSAwKSAmJiAoY29uZmlnLk51bVBvcnRzMiA9PSA4KSkgewpAQCAtMzYzLDEwICszNjMsOSBAQAogCQl9CiAJCWlmIChpbmZvLT5zbGF2ZSkgewogCQkJa2ZyZWUoY2ZnX21lbSk7Ci0JCQlyZXR1cm4gc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgcG9ydCwgY29uZmlnLkFzc2lnbmVkSVJRKTsKKwkJCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgcG9ydCwgY29uZmlnLkFzc2lnbmVkSVJRKTsKIAkJfQogCX0KLQlsaW5rLT5jb25mLlZjYyA9IGNvbmZpZy5WY2M7CiAKIAkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4gKi8KIAl0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CkBAIC0zNzcsMTIgKzM3NiwxMiBAQAogCS8qIFR3byB0cmllczogd2l0aG91dCBJTyBhbGlhc2VzLCB0aGVuIHdpdGggYWxpYXNlcyAqLwogCWZvciAocyA9IDA7IHMgPCAyOyBzKyspIHsKIAkJZm9yICh0cnkgPSAwOyB0cnkgPCAyOyB0cnkrKykgewotCQkJaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogCQkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJCWlmIChpICE9IENTX1NVQ0NFU1MpCiAJCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJCQlpZiAoY2YtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCQkJbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKwkJCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCQkgICAgY2YtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CiAJCQkJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSBzaXplX3RhYmxlW3NdKSAmJgogCQkJCQkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewpAQCAtMzkwLDE5ICszODksMTkgQEAKIAkJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwogCQkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9ICh0cnkgPT0gMCkgPwogCQkJCQkgICAgMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCQkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQkJfQogbmV4dF9lbnRyeToKLQkJCQlpID0gbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJCQkJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAkJCX0KIAkJfQogCX0KIAkvKiBTZWNvbmQgcGFzczogdHJ5IHRvIGZpbmQgYW4gZW50cnkgdGhhdCBpc24ndCBwaWNreSBhYm91dAogCSAgIGl0cyBiYXNlIGFkZHJlc3MsIHRoZW4gdHJ5IHRvIGdyYWIgYW55IHN0YW5kYXJkIHNlcmlhbCBwb3J0CiAJICAgYWRkcmVzcywgYW5kIGZpbmFsbHkgdHJ5IHRvIGdldCBhbnkgZnJlZSBwb3J0LiAqLwotCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNmLT5pby5ud2luID4gMCkgJiYKIAkJICAgICgoY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0spIDw9IDMpKSB7CkBAIC00MTAsNTAgKzQwOSw0OCBAQAogCQkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewogCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGJhc2Vbal07CiAJCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBiYXNlW2pdID8gMTYgOiAzOwotCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAJCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQkJZ290byBmb3VuZF9wb3J0OwogCQkJfQogCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAl9CiAKICAgICAgIGZvdW5kX3BvcnQ6CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kLCBnaXZpbmcgdXBcbiIpOwotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWtmcmVlKGNmZ19tZW0pOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAJaWYgKGluZm8tPm11bHRpICYmIChpbmZvLT5tYW5maWQgPT0gTUFORklEXzNDT00pKQogCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ICY9IH4oMHgwOCk7Ci0JaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkJa2ZyZWUoY2ZnX21lbSk7CiAJCXJldHVybiAtMTsKIAl9CiAJa2ZyZWUoY2ZnX21lbSk7Ci0JcmV0dXJuIHNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlyZXR1cm4gc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIH0KIAotc3RhdGljIGludCBtdWx0aV9jb25maWcoZGV2X2xpbmtfdCAqIGxpbmspCitzdGF0aWMgaW50IG11bHRpX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwogCXN0cnVjdCBzZXJpYWxfY2ZnX21lbSAqY2ZnX21lbTsKIAl0dXBsZV90ICp0dXBsZTsKIAl1X2NoYXIgKmJ1ZjsKIAljaXNwYXJzZV90ICpwYXJzZTsKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZjsKLQljb25maWdfaW5mb190IGNvbmZpZzsKIAlpbnQgaSwgcmMsIGJhc2UyID0gMDsKIAogCWNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKQEAgLTQ2NCwxNCArNDYxLDYgQEAKIAljZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKIAlidWYgPSBjZmdfbWVtLT5idWY7CiAKLQlpID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZmlnKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGhhbmRsZSwgR2V0Q29uZmlndXJhdGlvbkluZm8sIGkpOwotCQlyYyA9IC0xOwotCQlnb3RvIGZyZWVfY2ZnX21lbTsKLQl9Ci0JbGluay0+Y29uZi5WY2MgPSBjb25maWcuVmNjOwotCiAJdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOwogCXR1cGxlLT5UdXBsZU9mZnNldCA9IDA7CiAJdHVwbGUtPlR1cGxlRGF0YU1heCA9IDI1NTsKQEAgLTQ4MCw3ICs0NjksNyBAQAogCiAJLyogRmlyc3QsIGxvb2sgZm9yIGEgZ2VuZXJpYyBmdWxsLXNpemVkIHdpbmRvdyAqLwogCWxpbmstPmlvLk51bVBvcnRzMSA9IGluZm8tPm11bHRpICogODsKLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKIAkJLyogVGhlIHF1YWQgcG9ydCBjYXJkcyBoYXZlIGJhZCBDSVMncywgc28ganVzdCBsb29rIGZvciBhCiAJCSAgIHdpbmRvdyBsYXJnZXIgdGhhbiA4IHBvcnRzIGFuZCBhc3N1bWUgaXQgd2lsbCBiZSByaWdodCAqLwpAQCAtNDkwLDE5ICs0NzksMTkgQEAKIAkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKIAkJCWxpbmstPmlvLklPQWRkckxpbmVzID0KIAkJCSAgICBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCWJhc2UyID0gbGluay0+aW8uQmFzZVBvcnQxICsgODsKIAkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJYnJlYWs7CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCQlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogCX0KIAogCS8qIElmIHRoYXQgZGlkbid0IHdvcmssIGxvb2sgZm9yIHR3byB3aW5kb3dzICovCiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OwogCQlpbmZvLT5tdWx0aSA9IDI7Ci0JCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogCQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNmLT5pby5ud2luID09IDIpKSB7CiAJCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKQEAgLTUxMCwyNiArNDk5LDI2IEBACiAJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblsxXS5iYXNlOwogCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0KIAkJCQkgICAgY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAkJCQliYXNlMiA9IGxpbmstPmlvLkJhc2VQb3J0MjsKIAkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAJCX0KIAl9CiAKIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVxdWVzdElPLCBpKTsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJcmMgPSAtMTsKIAkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCi0JaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kLCBnaXZpbmcgdXBcbiIpOwotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJUlEsIGkpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAJLyogU29ja2V0IER1YWwgSU86IHRoaXMgZW5hYmxlcyBpcnEncyBmb3Igc2Vjb25kIHBvcnQgKi8KQEAgLTUzNywzNSArNTI2LDQzIEBACiAJCWxpbmstPmNvbmYuUHJlc2VudCB8PSBQUkVTRU5UX0VYVF9TVEFUVVM7CiAJCWxpbmstPmNvbmYuRXh0U3RhdHVzID0gRVNSX1JFUV9BVFROX0VOQTsKIAl9Ci0JaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkJcmMgPSAtMTsKIAkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCiAJLyogVGhlIE94Zm9yZCBTZW1pY29uZHVjdG9yIE9YQ0Y5NTAgY2FyZHMgYXJlIGluIGZhY3Qgc2luZ2xlLXBvcnQ6Ci0JICAgOCByZWdpc3RlcnMgYXJlIGZvciB0aGUgVUFSVCwgdGhlIG90aGVycyBhcmUgZXh0cmEgcmVnaXN0ZXJzICovCi0JaWYgKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfT1hTRU1JKSB7CisJICogOCByZWdpc3RlcnMgYXJlIGZvciB0aGUgVUFSVCwgdGhlIG90aGVycyBhcmUgZXh0cmEgcmVnaXN0ZXJzLgorCSAqIFNpZW1lbidzIE1DNDUgUENNQ0lBIChQb3NzaW8ncyBHQ0MpIGlzIE9YQ0Y5NTAgYmFzZWQgdG9vLgorCSAqLworCWlmIChpbmZvLT5tYW5maWQgPT0gTUFORklEX09YU0VNSSB8fCAoaW5mby0+bWFuZmlkID09IE1BTkZJRF9QT1NTSU8gJiYKKwkJCQlpbmZvLT5wcm9kaWQgPT0gUFJPRElEX1BPU1NJT19HQ0MpKSB7CisJCWludCBlcnI7CisKIAkJaWYgKGNmLT5pbmRleCA9PSAxIHx8IGNmLT5pbmRleCA9PSAzKSB7Ci0JCQlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBiYXNlMiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKLQkJCW91dGIoMTIsIGxpbmstPmlvLkJhc2VQb3J0MSArIDEpOworCQkJZXJyID0gc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGJhc2UyLAorCQkJCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCQkJYmFzZTIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAJCX0gZWxzZSB7Ci0JCQlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7Ci0JCQlvdXRiKDEyLCBiYXNlMiArIDEpOworCQkJZXJyID0gc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAkJfQorCQlpbmZvLT5jOTUwY3RybCA9IGJhc2UyOworCQl3YWtldXBfY2FyZChpbmZvKTsKIAkJcmMgPSAwOwogCQlnb3RvIGZyZWVfY2ZnX21lbTsKIAl9CiAKLQlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAkvKiBUaGUgTm9raWEgY2FyZHMgYXJlIG5vdCByZWFsbHkgbXVsdGlwb3J0IGNhcmRzICovCiAJaWYgKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfTk9LSUEpIHsKIAkJcmMgPSAwOwogCQlnb3RvIGZyZWVfY2ZnX21lbTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm11bHRpIC0gMTsgaSsrKQotCQlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBiYXNlMiArICg4ICogaSksCisJCXNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBiYXNlMiArICg4ICogaSksCiAJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAlyYyA9IDA7CiBmcmVlX2NmZ19tZW06CkBAIC01ODEsOSArNTc4LDggQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXZvaWQgc2VyaWFsX2NvbmZpZyhkZXZfbGlua190ICogbGluaykKK3N0YXRpYyBpbnQgc2VyaWFsX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwogCXN0cnVjdCBzZXJpYWxfY2ZnX21lbSAqY2ZnX21lbTsKIAl0dXBsZV90ICp0dXBsZTsKQEAgLTYwOSw3ICs2MDUsNyBAQAogCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKIAkvKiBHZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciBpbmZvcm1hdGlvbiAqLwogCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKIAlpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgewogCQlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CkBAIC02MTcsMTggKzYxMywxNiBAQAogCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLT5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS0+Y29uZmlnLnJtYXNrWzBdOwogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwotCiAJLyogSXMgdGhpcyBhIGNvbXBsaWFudCBtdWx0aWZ1bmN0aW9uIGNhcmQ/ICovCiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9MT05HTElOS19NRkM7CiAJdHVwbGUtPkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OIHwgVFVQTEVfUkVUVVJOX0xJTks7Ci0JaW5mby0+bXVsdGkgPSAoZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpOworCWluZm8tPm11bHRpID0gKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUyk7CiAKIAkvKiBJcyB0aGlzIGEgbXVsdGlwb3J0IGNhcmQ/ICovCiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0JaWYgKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CisJaWYgKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgewogCQlpbmZvLT5tYW5maWQgPSBwYXJzZS0+bWFuZmlkLm1hbmY7CisJCWluZm8tPnByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBNVUxUSV9DT1VOVDsgaSsrKQogCQkJaWYgKChpbmZvLT5tYW5maWQgPT0gbXVsdGlfaWRbaV0ubWFuZmlkKSAmJgogCQkJICAgIChwYXJzZS0+bWFuZmlkLmNhcmQgPT0gbXVsdGlfaWRbaV0ucHJvZGlkKSkKQEAgLTY0MSwxMSArNjM1LDExIEBACiAJICAgbXVsdGlmdW5jdGlvbiBjYXJkcyB0aGF0IGFzayBmb3IgYXBwcm9wcmlhdGUgSU8gcG9ydCByYW5nZXMgKi8KIAl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNJRDsKIAlpZiAoKGluZm8tPm11bHRpID09IDApICYmCi0JICAgICgoZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpIHx8CisJICAgICgoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKSB8fAogCSAgICAgKHBhcnNlLT5mdW5jaWQuZnVuYyA9PSBDSVNUUExfRlVOQ0lEX01VTFRJKSB8fAogCSAgICAgKHBhcnNlLT5mdW5jaWQuZnVuYyA9PSBDSVNUUExfRlVOQ0lEX1NFUklBTCkpKSB7CiAJCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkJaWYgKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CisJCWlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKIAkJCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuICUgOCA9PSAwKSkKIAkJCQlpbmZvLT5tdWx0aSA9IGNmLT5pby53aW5bMF0ubGVuID4+IDM7CiAJCQlpZiAoKGNmLT5pby5ud2luID09IDIpICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSA4KSAmJgpAQCAtNjY0LDMxICs2NTgsMzAgQEAKIAogCWlmIChpbmZvLT5tYW5maWQgPT0gTUFORklEX0lCTSkgewogCQljb25mX3JlZ190IHJlZyA9IHsgMCwgQ1NfUkVBRCwgMHg4MDAsIDAgfTsKLQkJbGFzdF9yZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKwkJbGFzdF9yZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CiAJCWlmIChsYXN0X3JldCkgewogCQkJbGFzdF9mbiA9IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcjsKIAkJCWdvdG8gY3NfZmFpbGVkOwogCQl9CiAJCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAkJcmVnLlZhbHVlID0gcmVnLlZhbHVlIHwgMTsKLQkJbGFzdF9yZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluay0+aGFuZGxlLCAmcmVnKTsKKwkJbGFzdF9yZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CiAJCWlmIChsYXN0X3JldCkgewogCQkJbGFzdF9mbiA9IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcjsKIAkJCWdvdG8gY3NfZmFpbGVkOwogCQl9CiAJfQogCi0JbGluay0+ZGV2ID0gJmluZm8tPm5vZGVbMF07Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlWzBdOwogCWtmcmVlKGNmZ19tZW0pOwotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAgZmFpbGVkOgogCXNlcmlhbF9yZW1vdmUobGluayk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKIAlrZnJlZShjZmdfbWVtKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHNlcmlhbF9pZHNbXSA9IHsKQEAgLTczOSw2ICs3MzIsNyBAQAogCVBDTUNJQV9NRkNfREVWSUNFX1BST0RfSUQxKDEsICJNb3Rvcm9sYSBNQVJRVUlTIiwgMHhmMDNlNGU3NyksCiAJUENNQ0lBX01GQ19ERVZJQ0VfUFJPRF9JRDIoMSwgIkZBWC9Nb2RlbS9FdGhlcm5ldCBDb21ibyBDYXJkICIsIDB4MWVkNTkzMDIpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDA4OSwgMHgwMzAxKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwYTQsIDB4MDI3NiksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDAwMzkpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwNCwgMHgwMDA2KSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDUsIDB4NDEwYSksCkBAIC03NTcsNiArNzUxLDcgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxNCgiTUVHQUhFUlRaIiwgIlBDTUNJQSBNT0RFTSIsIDB4ZjUxMGRiMDQsIDB4YmQ2YzQzZWYpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyNCgiVE9TSElCQSIsICJUMTQ0UEYiLCAiUENNQ0lBIE1PREVNIiwgMHhiNDU4NWExYSwgMHg3MjcxNDA5YywgMHhiZDZjNDNlZiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJGVUpJVFNVIiwgIkZDMTRGICIsICJNQkgxMDIxMyIsIDB4NmVlNWEzZDgsIDB4MzBlYWQxMmIsIDB4YjAwZjA1YTApLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiTm92YXRlbCBXaXJlbGVzcyIsICJNZXJsaW4gVU1UUyBNb2RlbSIsICJVNjMwIiwgMHgzMjYwNzc3NiwgMHhkOWU3M2IxMywgMHhlODczMzJlKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMygiTUVHQUhFUlRaIiwgIlYuMzQgUENNQ0lBIE1PREVNIiwgMHhmNTEwZGIwNCwgMHhiYjJjY2U0YSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkJyYWluIEJveGVzIiwgIkJsdWV0b290aCBQQyBDYXJkIiwgMHhlZTEzODM4MiwgMHhkNGNlOWIwMiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNJUlJVUyBMT0dJQyIsICJGQVggTU9ERU0iLCAweGU2MjVmNDUxLCAweGNlY2Q2ZGZhKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCmluZGV4IDFjNDM5NmMuLjJiNGY5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwpAQCAtMTczMCwzICsxNzMwLDQgQEAKIAogbW9kdWxlX2luaXQoc3Vuc3VfcHJvYmUpOwogbW9kdWxlX2V4aXQoc3Vuc3VfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL2lvYzMuYyBiL2RyaXZlcnMvc24vaW9jMy5jCmluZGV4IDkzNDQ5YTEuLjUwMTMxNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc24vaW9jMy5jCisrKyBiL2RyaXZlcnMvc24vaW9jMy5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYxOSw5ICs2MjAsOSBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAjaWZkZWYgVVNFXzY0QklUX0RNQQotICAgICAgICByZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCk7CisgICAgICAgIHJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOwogICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgICAgICAgIHJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpOworICAgICAgICAgICAgICAgIHJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CiAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gb2J0YWluIDY0IGJpdCBETUEgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIiwKQEAgLTY3Nyw3ICs2NzgsNyBAQAogCS8qIFRyYWNrIFBDSS1kZXZpY2Ugc3BlY2lmaWMgZGF0YSAqLwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpZGQpOwogCWRvd25fd3JpdGUoJmlvYzNfZGV2aWNlc19yd3NlbSk7Ci0JbGlzdF9hZGQoJmlkZC0+bGlzdCwgJmlvYzNfZGV2aWNlcyk7CisJbGlzdF9hZGRfdGFpbCgmaWRkLT5saXN0LCAmaW9jM19kZXZpY2VzKTsKIAlpZGQtPmlkID0gaW9jM19jb3VudGVyKys7CiAJdXBfd3JpdGUoJmlvYzNfZGV2aWNlc19yd3NlbSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc24vaW9jNC5jIGIvZHJpdmVycy9zbi9pb2M0LmMKaW5kZXggNjcxNDBhNS4uY2RlZmY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zbi9pb2M0LmMKKysrIGIvZHJpdmVycy9zbi9pb2M0LmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShpZGQtPmlkZF9wZGV2LCBpZGQpOwogCiAJbXV0ZXhfbG9jaygmaW9jNF9tdXRleCk7Ci0JbGlzdF9hZGQoJmlkZC0+aWRkX2xpc3QsICZpb2M0X2RldmljZXMpOworCWxpc3RfYWRkX3RhaWwoJmlkZC0+aWRkX2xpc3QsICZpb2M0X2RldmljZXMpOwogCiAJLyogQWRkIHRoaXMgSU9DNCB0byBhbGwgc3VibW9kdWxlcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaXMsICZpb2M0X3N1Ym1vZHVsZXMsIGlzX2xpc3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL0tjb25maWcgYi9kcml2ZXJzL3NwaS9LY29uZmlnCmluZGV4IDdhNzVmYWUuLjIzMzM0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9zcGkvS2NvbmZpZwpAQCAtNzUsMTEgKzc1LDQ1IEBACiAJICBpbmV4cGVuc2l2ZSBiYXR0ZXJ5IHBvd2VyZWQgbWljcm9jb250cm9sbGVyIGV2YWx1YXRpb24gYm9hcmQuCiAJICBUaGlzIHNhbWUgY2FibGUgY2FuIGJlIHVzZWQgdG8gZmxhc2ggbmV3IGZpcm13YXJlLgogCitjb25maWcgU1BJX01QQzgzeHgKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzgzeHggU1BJIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIFBQQ184M3h4ICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTUElfQklUQkFORworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB1c2luZyB0aGUgRnJlZXNjYWxlIE1QQzgzeHggU1BJIGNvbnRyb2xsZXIgaW4gbWFzdGVyCisJICBtb2RlLgorCisJICBOb3RlLCB0aGlzIGRyaXZlciB1bmlxdWVseSBzdXBwb3J0cyB0aGUgU1BJIGNvbnRyb2xsZXIgb24gdGhlIE1QQzgzeHgKKwkgIGZhbWlseSBvZiBQb3dlclBDIHByb2Nlc3NvcnMuICBUaGUgTVBDODN4eCB1c2VzIGEgc2ltcGxlIHNldCBvZiBzaGlmdAorCSAgcmVnaXN0ZXJzIGZvciBkYXRhIChvcHBvc2VkIHRvIHRoZSBDUE0gYmFzZWQgZGVzY3JpcHRvciBtb2RlbCkuCisKK2NvbmZpZyBTUElfUFhBMlhYCisJdHJpc3RhdGUgIlBYQTJ4eCBTU1AgU1BJIG1hc3RlciIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgQVJDSF9QWEEgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHVzaW5nIGEgUFhBMnh4IFNTUCBwb3J0IGFzIGEgU1BJIG1hc3RlciBjb250cm9sbGVyLgorCSAgVGhlIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgYW55IFNTUCBwb3J0IGFuZCBhZGRpdGlvbmFsCisJICBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhIERvY3VtZW50YXRpb24vc3BpL3B4YTJ4eC4KKworY29uZmlnIFNQSV9TM0MyNFhYX0dQSU8KKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBTUEkgYnkgR1BJTyIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgQVJDSF9TM0MyNDEwICYmIFNQSV9CSVRCQU5HICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgQVJNIFNvQ3MgdXNpbmcKKwkgIEdQSU8gbGluZXMgdG8gcHJvdmlkZSB0aGUgU1BJIGJ1cy4gVGhpcyBjYW4gYmUgdXNlZCB3aGVyZQorCSAgdGhlIGluYnVpbHQgaGFyZHdhcmUgY2Fubm90IHByb3ZpZGUgdGhlIHRyYW5zZmVyIG1vZGUsIG9yCisJICB3aGVyZSB0aGUgYm9hcmQgaXMgdXNpbmcgbm9uIGhhcmR3YXJlIGNvbm5lY3RlZCBwaW5zLgogIwogIyBBZGQgbmV3IFNQSSBtYXN0ZXIgY29udHJvbGxlcnMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGFib3ZlIHRoaXMgbGluZQogIwogCiAKK2NvbmZpZyBTUElfUzNDMjRYWAorCXRyaXN0YXRlICJTYW1zdW5nIFMzQzI0WFggc2VyaWVzIFNQSSIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgQVJDSF9TM0MyNDEwICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgQVJNIFNvQ3MKKwogIwogIyBUaGVyZSBhcmUgbG90cyBvZiBTUEkgZGV2aWNlIHR5cGVzLCB3aXRoIHNlbnNvcnMgYW5kIG1lbW9yeQogIyBiZWluZyBwcm9iYWJseSB0aGUgbW9zdCB3aWRlbHkgdXNlZCBvbmVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQppbmRleCBjMmM4N2U4Li44ZjRjYjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQpAQCAtMTMsNiArMTMsMTAgQEAKICMgU1BJIG1hc3RlciBjb250cm9sbGVyIGRyaXZlcnMgKGJ1cykKIG9iai0kKENPTkZJR19TUElfQklUQkFORykJCSs9IHNwaV9iaXRiYW5nLm8KIG9iai0kKENPTkZJR19TUElfQlVUVEVSRkxZKQkJKz0gc3BpX2J1dHRlcmZseS5vCitvYmotJChDT05GSUdfU1BJX1BYQTJYWCkJCSs9IHB4YTJ4eF9zcGkubworb2JqLSQoQ09ORklHX1NQSV9NUEM4M3h4KQkJKz0gc3BpX21wYzgzeHgubworb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYX0dQSU8pCQkrPSBzcGlfczNjMjR4eF9ncGlvLm8KK29iai0kKENPTkZJR19TUElfUzNDMjRYWCkJCSs9IHNwaV9zM2MyNHh4Lm8KICMgCS4uLiBhZGQgYWJvdmUgdGhpcyBsaW5lIC4uLgogCiAjIFNQSSBwcm90b2NvbCBkcml2ZXJzIChkZXZpY2UvbGluayBvbiBidXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhZWM3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMCwwICsxLDE0ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlcGhlbiBTdHJlZXQgLyBTdHJlZXRGaXJlIFNvdW5kIExhYnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHhfc3BpLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gU3RyZWV0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBYQTJ4eCBTU1AgU1BJIENvbnRvbGxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIE1BWF9CVVNFUyAzCisKKyNkZWZpbmUgRE1BX0lOVF9NQVNLIChEQ1NSX0VORElOVFIgfCBEQ1NSX1NUQVJUSU5UUiB8IERDU1JfQlVTRVJSKQorI2RlZmluZSBSRVNFVF9ETUFfQ0hBTk5FTCAoRENTUl9OT0RFU0MgfCBETUFfSU5UX01BU0spCisjZGVmaW5lIElTX0RNQV9BTElHTkVEKHgpICgoKHUzMikoeCkmMHgwNyk9PTApCisKKyNkZWZpbmUgREVGSU5FX1NTUF9SRUcocmVnLCBvZmYpIFwKK3N0YXRpYyBpbmxpbmUgdTMyIHJlYWRfIyNyZWcodm9pZCAqcCkgeyByZXR1cm4gX19yYXdfcmVhZGwocCArIChvZmYpKTsgfSBcCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfIyNyZWcodTMyIHYsIHZvaWQgKnApIHsgX19yYXdfd3JpdGVsKHYsIHAgKyAob2ZmKSk7IH0KKworREVGSU5FX1NTUF9SRUcoU1NDUjAsIDB4MDApCitERUZJTkVfU1NQX1JFRyhTU0NSMSwgMHgwNCkKK0RFRklORV9TU1BfUkVHKFNTU1IsIDB4MDgpCitERUZJTkVfU1NQX1JFRyhTU0lUUiwgMHgwYykKK0RFRklORV9TU1BfUkVHKFNTRFIsIDB4MTApCitERUZJTkVfU1NQX1JFRyhTU1RPLCAweDI4KQorREVGSU5FX1NTUF9SRUcoU1NQU1AsIDB4MmMpCisKKyNkZWZpbmUgU1RBUlRfU1RBVEUgKCh2b2lkKikwKQorI2RlZmluZSBSVU5OSU5HX1NUQVRFICgodm9pZCopMSkKKyNkZWZpbmUgRE9ORV9TVEFURSAoKHZvaWQqKTIpCisjZGVmaW5lIEVSUk9SX1NUQVRFICgodm9pZCopLTEpCisKKyNkZWZpbmUgUVVFVUVfUlVOTklORyAwCisjZGVmaW5lIFFVRVVFX1NUT1BQRUQgMQorCitzdHJ1Y3QgZHJpdmVyX2RhdGEgeworCS8qIERyaXZlciBtb2RlbCBob29rdXAgKi8KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJLyogU1BJIGZyYW1ld29yayBob29rdXAgKi8KKwllbnVtIHB4YV9zc3BfdHlwZSBzc3BfdHlwZTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCisJLyogUFhBIGhvb2t1cCAqLworCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqbWFzdGVyX2luZm87CisKKwkvKiBETUEgc2V0dXAgc3R1ZmYgKi8KKwlpbnQgcnhfY2hhbm5lbDsKKwlpbnQgdHhfY2hhbm5lbDsKKwl1MzIgKm51bGxfZG1hX2J1ZjsKKworCS8qIFNTUCByZWdpc3RlciBhZGRyZXNzZXMgKi8KKwl2b2lkICppb2FkZHI7CisJdTMyIHNzZHJfcGh5c2ljYWw7CisKKwkvKiBTU1AgbWFza3MqLworCXUzMiBkbWFfY3IxOworCXUzMiBpbnRfY3IxOworCXUzMiBjbGVhcl9zcjsKKwl1MzIgbWFza19zcjsKKworCS8qIERyaXZlciBtZXNzYWdlIHF1ZXVlICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVtcF9tZXNzYWdlczsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlpbnQgYnVzeTsKKwlpbnQgcnVuOworCisJLyogTWVzc2FnZSBUcmFuc2ZlciBwdW1wICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHB1bXBfdHJhbnNmZXJzOworCisJLyogQ3VycmVudCBtZXNzYWdlIHRyYW5zZmVyIHN0YXRlIGluZm8gKi8KKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UqIGN1cl9tc2c7CisJc3RydWN0IHNwaV90cmFuc2ZlciogY3VyX3RyYW5zZmVyOworCXN0cnVjdCBjaGlwX2RhdGEgKmN1cl9jaGlwOworCXNpemVfdCBsZW47CisJdm9pZCAqdHg7CisJdm9pZCAqdHhfZW5kOworCXZvaWQgKnJ4OworCXZvaWQgKnJ4X2VuZDsKKwlpbnQgZG1hX21hcHBlZDsKKwlkbWFfYWRkcl90IHJ4X2RtYTsKKwlkbWFfYWRkcl90IHR4X2RtYTsKKwlzaXplX3QgcnhfbWFwX2xlbjsKKwlzaXplX3QgdHhfbWFwX2xlbjsKKwl1OCBuX2J5dGVzOworCXUzMiBkbWFfd2lkdGg7CisJaW50IGNzX2NoYW5nZTsKKwl2b2lkICgqd3JpdGUpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOworCXZvaWQgKCpyZWFkKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKKwlpcnFyZXR1cm5fdCAoKnRyYW5zZmVyX2hhbmRsZXIpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOworCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Cit9OworCitzdHJ1Y3QgY2hpcF9kYXRhIHsKKwl1MzIgY3IwOworCXUzMiBjcjE7CisJdTMyIHRvOworCXUzMiBwc3A7CisJdTMyIHRpbWVvdXQ7CisJdTggbl9ieXRlczsKKwl1MzIgZG1hX3dpZHRoOworCXUzMiBkbWFfYnVyc3Rfc2l6ZTsKKwl1MzIgdGhyZXNob2xkOworCXUzMiBkbWFfdGhyZXNob2xkOworCXU4IGVuYWJsZV9kbWE7CisJdTggYml0c19wZXJfd29yZDsKKwl1MzIgc3BlZWRfaHo7CisJdm9pZCAoKndyaXRlKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKKwl2b2lkICgqcmVhZCkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7CisJdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKK307CisKK3N0YXRpYyB2b2lkIHB1bXBfbWVzc2FnZXModm9pZCAqZGF0YSk7CisKK3N0YXRpYyBpbnQgZmx1c2goc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGxpbWl0ID0gbG9vcHNfcGVyX2ppZmZ5IDw8IDE7CisKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJZG8geworCQl3aGlsZSAocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkgeworCQkJcmVhZF9TU0RSKHJlZyk7CisJCX0KKwl9IHdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX0JTWSkgJiYgbGltaXQtLSk7CisJd3JpdGVfU1NTUihTU1NSX1JPUiwgcmVnKTsKKworCXJldHVybiBsaW1pdDsKK30KKworc3RhdGljIHZvaWQgcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwkvKiBDbGVhciBzdGF0dXMgYW5kIGRpc2FibGUgY2xvY2sgKi8KKwl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwl3cml0ZV9TU0NSMChkcnZfZGF0YS0+Y3VyX2NoaXAtPmNyMCAmIH5TU0NSMF9TU0UsIHJlZyk7CisKKwkvKiBMb2FkIHRoZSByZWdpc3RlcnMgKi8KKwl3cml0ZV9TU0NSMShkcnZfZGF0YS0+Y3VyX2NoaXAtPmNyMSwgcmVnKTsKKwl3cml0ZV9TU0NSMChkcnZfZGF0YS0+Y3VyX2NoaXAtPmNyMCwgcmVnKTsKKwlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApIHsKKwkJd3JpdGVfU1NUTygwLCByZWcpOworCQl3cml0ZV9TU1BTUChkcnZfZGF0YS0+Y3VyX2NoaXAtPnBzcCwgcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKK3sKK30KKworc3RhdGljIHZvaWQgbnVsbF93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXU4IG5fYnl0ZXMgPSBkcnZfZGF0YS0+bl9ieXRlczsKKworCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1RORikKKwkJCSYmIChkcnZfZGF0YS0+dHggPCBkcnZfZGF0YS0+dHhfZW5kKSkgeworCQl3cml0ZV9TU0RSKDAsIHJlZyk7CisJCWRydl9kYXRhLT50eCArPSBuX2J5dGVzOworCX0KK30KKworc3RhdGljIHZvaWQgbnVsbF9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXU4IG5fYnl0ZXMgPSBkcnZfZGF0YS0+bl9ieXRlczsKKworCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKKwkJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgeworCQlyZWFkX1NTRFIocmVnKTsKKwkJZHJ2X2RhdGEtPnJ4ICs9IG5fYnl0ZXM7CisJfQorfQorCitzdGF0aWMgdm9pZCB1OF93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfVE5GKQorCQkJJiYgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpKSB7CisJCXdyaXRlX1NTRFIoKih1OCAqKShkcnZfZGF0YS0+dHgpLCByZWcpOworCQkrK2Rydl9kYXRhLT50eDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHU4X3JlYWRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9STkUpCisJCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKKwkJKih1OCAqKShkcnZfZGF0YS0+cngpID0gcmVhZF9TU0RSKHJlZyk7CisJCSsrZHJ2X2RhdGEtPnJ4OworCX0KK30KKworc3RhdGljIHZvaWQgdTE2X3dyaXRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9UTkYpCisJCQkmJiAoZHJ2X2RhdGEtPnR4IDwgZHJ2X2RhdGEtPnR4X2VuZCkpIHsKKwkJd3JpdGVfU1NEUigqKHUxNiAqKShkcnZfZGF0YS0+dHgpLCByZWcpOworCQlkcnZfZGF0YS0+dHggKz0gMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHUxNl9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQorCQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJCSoodTE2ICopKGRydl9kYXRhLT5yeCkgPSByZWFkX1NTRFIocmVnKTsKKwkJZHJ2X2RhdGEtPnJ4ICs9IDI7CisJfQorfQorc3RhdGljIHZvaWQgdTMyX3dyaXRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9UTkYpCisJCQkmJiAoZHJ2X2RhdGEtPnR4IDwgZHJ2X2RhdGEtPnR4X2VuZCkpIHsKKwkJd3JpdGVfU1NEUigqKHUzMiAqKShkcnZfZGF0YS0+dHgpLCByZWcpOworCQlkcnZfZGF0YS0+dHggKz0gNDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHUzMl9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQorCQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJCSoodTMyICopKGRydl9kYXRhLT5yeCkgPSByZWFkX1NTRFIocmVnKTsKKwkJZHJ2X2RhdGEtPnJ4ICs9IDQ7CisJfQorfQorCitzdGF0aWMgdm9pZCAqbmV4dF90cmFuc2ZlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnMgPSBkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyOworCisJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCisJaWYgKHRyYW5zLT50cmFuc2Zlcl9saXN0Lm5leHQgIT0gJm1zZy0+dHJhbnNmZXJzKSB7CisJCWRydl9kYXRhLT5jdXJfdHJhbnNmZXIgPQorCQkJbGlzdF9lbnRyeSh0cmFucy0+dHJhbnNmZXJfbGlzdC5uZXh0LAorCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQl0cmFuc2Zlcl9saXN0KTsKKwkJcmV0dXJuIFJVTk5JTkdfU1RBVEU7CisJfSBlbHNlCisJCXJldHVybiBET05FX1NUQVRFOworfQorCitzdGF0aWMgaW50IG1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm1zZy0+c3BpLT5kZXY7CisKKwlpZiAoIWRydl9kYXRhLT5jdXJfY2hpcC0+ZW5hYmxlX2RtYSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobXNnLT5pc19kbWFfbWFwcGVkKQorCQlyZXR1cm4gIGRydl9kYXRhLT5yeF9kbWEgJiYgZHJ2X2RhdGEtPnR4X2RtYTsKKworCWlmICghSVNfRE1BX0FMSUdORUQoZHJ2X2RhdGEtPnJ4KSB8fCAhSVNfRE1BX0FMSUdORUQoZHJ2X2RhdGEtPnR4KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBNb2RpZnkgc2V0dXAgaWYgcnggYnVmZmVyIGlzIG51bGwgKi8KKwlpZiAoZHJ2X2RhdGEtPnJ4ID09IE5VTEwpIHsKKwkJKmRydl9kYXRhLT5udWxsX2RtYV9idWYgPSAwOworCQlkcnZfZGF0YS0+cnggPSBkcnZfZGF0YS0+bnVsbF9kbWFfYnVmOworCQlkcnZfZGF0YS0+cnhfbWFwX2xlbiA9IDQ7CisJfSBlbHNlCisJCWRydl9kYXRhLT5yeF9tYXBfbGVuID0gZHJ2X2RhdGEtPmxlbjsKKworCisJLyogTW9kaWZ5IHNldHVwIGlmIHR4IGJ1ZmZlciBpcyBudWxsICovCisJaWYgKGRydl9kYXRhLT50eCA9PSBOVUxMKSB7CisJCSpkcnZfZGF0YS0+bnVsbF9kbWFfYnVmID0gMDsKKwkJZHJ2X2RhdGEtPnR4ID0gZHJ2X2RhdGEtPm51bGxfZG1hX2J1ZjsKKwkJZHJ2X2RhdGEtPnR4X21hcF9sZW4gPSA0OworCX0gZWxzZQorCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiA9IGRydl9kYXRhLT5sZW47CisKKwkvKiBTdHJlYW0gbWFwIHRoZSByeCBidWZmZXIgKi8KKwlkcnZfZGF0YS0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCBkcnZfZGF0YS0+cngsCisJCQkJCQlkcnZfZGF0YS0+cnhfbWFwX2xlbiwKKwkJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRydl9kYXRhLT5yeF9kbWEpKQorCQlyZXR1cm4gMDsKKworCS8qIFN0cmVhbSBtYXAgdGhlIHR4IGJ1ZmZlciAqLworCWRydl9kYXRhLT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGRydl9kYXRhLT50eCwKKwkJCQkJCWRydl9kYXRhLT50eF9tYXBfbGVuLAorCQkJCQkJRE1BX1RPX0RFVklDRSk7CisKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZHJ2X2RhdGEtPnR4X2RtYSkpIHsKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRydl9kYXRhLT5yeF9kbWEsCisJCQkJCWRydl9kYXRhLT5yeF9tYXBfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdW5tYXBfZG1hX2J1ZmZlcnMoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoIWRydl9kYXRhLT5kbWFfbWFwcGVkKQorCQlyZXR1cm47CisKKwlpZiAoIWRydl9kYXRhLT5jdXJfbXNnLT5pc19kbWFfbWFwcGVkKSB7CisJCWRldiA9ICZkcnZfZGF0YS0+Y3VyX21zZy0+c3BpLT5kZXY7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkcnZfZGF0YS0+cnhfZG1hLAorCQkJCQlkcnZfZGF0YS0+cnhfbWFwX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRydl9kYXRhLT50eF9kbWEsCisJCQkJCWRydl9kYXRhLT50eF9tYXBfbGVuLCBETUFfVE9fREVWSUNFKTsKKwl9CisKKwlkcnZfZGF0YS0+ZG1hX21hcHBlZCA9IDA7Cit9CisKKy8qIGNhbGxlciBhbHJlYWR5IHNldCBtZXNzYWdlLT5zdGF0dXM7IGRtYSBhbmQgcGlvIGlycXMgYXJlIGJsb2NrZWQgKi8KK3N0YXRpYyB2b2lkIGdpdmViYWNrKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciogbGFzdF90cmFuc2ZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisJbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisJZHJ2X2RhdGEtPmN1cl9tc2cgPSBOVUxMOworCWRydl9kYXRhLT5jdXJfdHJhbnNmZXIgPSBOVUxMOworCWRydl9kYXRhLT5jdXJfY2hpcCA9IE5VTEw7CisJcXVldWVfd29yayhkcnZfZGF0YS0+d29ya3F1ZXVlLCAmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwlsYXN0X3RyYW5zZmVyID0gbGlzdF9lbnRyeShtc2ctPnRyYW5zZmVycy5wcmV2LAorCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQl0cmFuc2Zlcl9saXN0KTsKKworCWlmICghbGFzdF90cmFuc2Zlci0+Y3NfY2hhbmdlKQorCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfREVBU1NFUlQpOworCisJbXNnLT5zdGF0ZSA9IE5VTEw7CisJaWYgKG1zZy0+Y29tcGxldGUpCisJCW1zZy0+Y29tcGxldGUobXNnLT5jb250ZXh0KTsKK30KKworc3RhdGljIGludCB3YWl0X3NzcF9yeF9zdGFsbCh2b2lkICppb2FkZHIpCit7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGxvb3BzX3Blcl9qaWZmeSA8PCAxOworCisJd2hpbGUgKChyZWFkX1NTU1IoaW9hZGRyKSAmIFNTU1JfQlNZKSAmJiBsaW1pdC0tKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiBsaW1pdDsKK30KKworc3RhdGljIGludCB3YWl0X2RtYV9jaGFubmVsX3N0b3AoaW50IGNoYW5uZWwpCit7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGxvb3BzX3Blcl9qaWZmeSA8PCAxOworCisJd2hpbGUgKCEoRENTUihjaGFubmVsKSAmIERDU1JfU1RPUFNUQVRFKSAmJiBsaW1pdC0tKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiBsaW1pdDsKK30KKworc3RhdGljIHZvaWQgZG1hX2hhbmRsZXIoaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBkYXRhOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKwl1MzIgaXJxX3N0YXR1cyA9IERDU1IoY2hhbm5lbCkgJiBETUFfSU5UX01BU0s7CisJdTMyIHRyYWlsaW5nX3Nzc3IgPSAwOworCisJaWYgKGlycV9zdGF0dXMgJiBEQ1NSX0JVU0VSUikgeworCisJCS8qIERpc2FibGUgaW50ZXJydXB0cywgY2xlYXIgc3RhdHVzIGFuZCByZXNldCBETUEgKi8KKwkJd3JpdGVfU1NDUjAocmVhZF9TU0NSMChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKKwkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOworCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCisJCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkKKwkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJCSJkbWFfaGFuZGxlcjogZmx1c2ggZmFpbFxuIik7CisKKwkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOworCisJCWlmIChjaGFubmVsID09IGRydl9kYXRhLT50eF9jaGFubmVsKQorCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKKwkJCQkiZG1hX2hhbmRsZXI6IGJhZCBidXMgYWRkcmVzcyBvbiAiCisJCQkJInR4IGNoYW5uZWwgJWQsIHNvdXJjZSAleCB0YXJnZXQgPSAleFxuIiwKKwkJCQljaGFubmVsLCBEU0FEUihjaGFubmVsKSwgRFRBRFIoY2hhbm5lbCkpOworCQllbHNlCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCSJkbWFfaGFuZGxlcjogYmFkIGJ1cyBhZGRyZXNzIG9uICIKKwkJCQkicnggY2hhbm5lbCAlZCwgc291cmNlICV4IHRhcmdldCA9ICV4XG4iLAorCQkJCWNoYW5uZWwsIERTQURSKGNoYW5uZWwpLCBEVEFEUihjaGFubmVsKSk7CisKKwkJbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworCX0KKworCS8qIFBYQTI1NXhfU1NQIGhhcyBubyB0aW1lb3V0IGludGVycnVwdCwgd2FpdCBmb3IgdGFpbGluZyBieXRlcyAqLworCWlmICgoZHJ2X2RhdGEtPnNzcF90eXBlID09IFBYQTI1eF9TU1ApCisJCSYmIChjaGFubmVsID09IGRydl9kYXRhLT50eF9jaGFubmVsKQorCQkmJiAoaXJxX3N0YXR1cyAmIERDU1JfRU5ESU5UUikpIHsKKworCQkvKiBXYWl0IGZvciByeCB0byBzdGFsbCAqLworCQlpZiAod2FpdF9zc3Bfcnhfc3RhbGwoZHJ2X2RhdGEtPmlvYWRkcikgPT0gMCkKKwkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJImRtYV9oYW5kbGVyOiBzc3Agcnggc3RhbGwgZmFpbGVkXG4iKTsKKworCQkvKiBDbGVhciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIFNTUCBhbmQgRE1BIGNoYW5uZWxzKi8KKwkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOworCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJaWYgKHdhaXRfZG1hX2NoYW5uZWxfc3RvcChkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPT0gMCkKKwkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJImRtYV9oYW5kbGVyOiBkbWEgcnggY2hhbm5lbCBzdG9wIGZhaWxlZFxuIik7CisKKwkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOworCisJCS8qIFJlYWQgdHJhaWxpbmcgYnl0ZXMgKi8KKwkJLyogQ2FsY3VsYXRlIG51bWJlciBvZiB0cmFpbGluZyBieXRlcywgcmVhZCB0aGVtICovCisJCXRyYWlsaW5nX3Nzc3IgPSByZWFkX1NTU1IocmVnKTsKKwkJaWYgKCh0cmFpbGluZ19zc3NyICYgMHhmMDA4KSAhPSAweGYwMDApIHsKKwkJCWRydl9kYXRhLT5yeCA9IGRydl9kYXRhLT5yeF9lbmQgLQorCQkJCQkoKCh0cmFpbGluZ19zc3NyID4+IDEyKSAmIDB4MGYpICsgMSk7CisJCQlkcnZfZGF0YS0+cmVhZChkcnZfZGF0YSk7CisJCX0KKwkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGRydl9kYXRhLT5sZW47CisKKwkJLyogUmVsZWFzZSBjaGlwIHNlbGVjdCBpZiByZXF1ZXN0ZWQsIHRyYW5zZmVyIGRlbGF5cyBhcmUKKwkJICogaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycyAqLworCQlpZiAoZHJ2X2RhdGEtPmNzX2NoYW5nZSkKKwkJCWRydl9kYXRhLT5jc19jb250cm9sKFBYQTJYWF9DU19ERUFTU0VSVCk7CisKKwkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCisJCW1zZy0+c3RhdGUgPSBuZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKKworCQkvKiBTY2hlZHVsZSB0cmFuc2ZlciB0YXNrbGV0ICovCisJCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdTMyIGlycV9zdGF0dXM7CisJdTMyIHRyYWlsaW5nX3Nzc3IgPSAwOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCWlycV9zdGF0dXMgPSByZWFkX1NTU1IocmVnKSAmIGRydl9kYXRhLT5tYXNrX3NyOworCWlmIChpcnFfc3RhdHVzICYgU1NTUl9ST1IpIHsKKwkJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCisJCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CisJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSwgcmVnKTsKKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQkJd3JpdGVfU1NUTygwLCByZWcpOworCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOworCisJCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkKKwkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJCSJkbWFfdHJhbnNmZXI6IGZsdXNoIGZhaWxcbiIpOworCisJCWRldl93YXJuKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiZG1hX3RyYW5zZmVyOiBmaWZvIG92ZXJ1blxuIik7CisKKwkJZHJ2X2RhdGEtPmN1cl9tc2ctPnN0YXRlID0gRVJST1JfU1RBVEU7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CisKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIENoZWNrIGZvciBmYWxzZSBwb3NpdGl2ZSB0aW1lb3V0ICovCisJaWYgKChpcnFfc3RhdHVzICYgU1NTUl9USU5UKSAmJiBEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSAmIERDU1JfUlVOKSB7CisJCXdyaXRlX1NTU1IoU1NTUl9USU5ULCByZWcpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zdGF0dXMgJiBTU1NSX1RJTlQgfHwgZHJ2X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQpIHsKKworCQkvKiBDbGVhciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIFNTUCBhbmQgRE1BIGNoYW5uZWxzKi8KKwkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOworCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCisJCWlmICh3YWl0X2RtYV9jaGFubmVsX3N0b3AoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID09IDApCisJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkJCSJkbWFfdHJhbnNmZXI6IGRtYSByeCBjaGFubmVsIHN0b3AgZmFpbGVkXG4iKTsKKworCQlpZiAod2FpdF9zc3Bfcnhfc3RhbGwoZHJ2X2RhdGEtPmlvYWRkcikgPT0gMCkKKwkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJImRtYV90cmFuc2Zlcjogc3NwIHJ4IHN0YWxsIGZhaWxlZFxuIik7CisKKwkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOworCisJCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgdHJhaWxpbmcgYnl0ZXMsIHJlYWQgdGhlbSAqLworCQl0cmFpbGluZ19zc3NyID0gcmVhZF9TU1NSKHJlZyk7CisJCWlmICgodHJhaWxpbmdfc3NzciAmIDB4ZjAwOCkgIT0gMHhmMDAwKSB7CisJCQlkcnZfZGF0YS0+cnggPSBkcnZfZGF0YS0+cnhfZW5kIC0KKwkJCQkJKCgodHJhaWxpbmdfc3NzciA+PiAxMikgJiAweDBmKSArIDEpOworCQkJZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpOworCQl9CisJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuOworCisJCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCisJCSAqIGhhbmRsZWQgaW4gcHVtcF90cmFuc2ZlcnMgKi8KKwkJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCisJCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfREVBU1NFUlQpOworCisJCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLworCQltc2ctPnN0YXRlID0gbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7CisKKwkJLyogU2NoZWR1bGUgdHJhbnNmZXIgdGFza2xldCAqLworCQl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKiBPcHBzIHByb2JsZW0gZGV0ZWN0ZWQgKi8KKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfdHJhbnNmZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGxvb3BzX3Blcl9qaWZmeSA8PCAxOworCXUzMiBpcnFfc3RhdHVzOworCXUzMiBpcnFfbWFzayA9IChyZWFkX1NTQ1IxKHJlZykgJiBTU0NSMV9USUUpID8KKwkJCWRydl9kYXRhLT5tYXNrX3NyIDogZHJ2X2RhdGEtPm1hc2tfc3IgJiB+U1NTUl9URlM7CisKKwl3aGlsZSAoKGlycV9zdGF0dXMgPSByZWFkX1NTU1IocmVnKSAmIGlycV9tYXNrKSkgeworCisJCWlmIChpcnFfc3RhdHVzICYgU1NTUl9ST1IpIHsKKworCQkJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQkJd3JpdGVfU1NDUjAocmVhZF9TU0NSMChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKKwkJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKKwkJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKworCQkJaWYgKGZsdXNoKGRydl9kYXRhKSA9PSAwKQorCQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJCSJpbnRlcnJ1cHRfdHJhbnNmZXI6IGZsdXNoIGZhaWxcbiIpOworCisJCQkvKiBTdG9wIHRoZSBTU1AgKi8KKworCQkJZGV2X3dhcm4oJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJCSJpbnRlcnJ1cHRfdHJhbnNmZXI6IGZpZm8gb3ZlcnVuXG4iKTsKKworCQkJbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOworCQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJLyogTG9vayBmb3IgZmFsc2UgcG9zaXRpdmUgdGltZW91dCAqLworCQlpZiAoKGlycV9zdGF0dXMgJiBTU1NSX1RJTlQpCisJCQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKQorCQkJd3JpdGVfU1NTUihTU1NSX1RJTlQsIHJlZyk7CisKKwkJLyogUHVtcCBkYXRhICovCisJCWRydl9kYXRhLT5yZWFkKGRydl9kYXRhKTsKKwkJZHJ2X2RhdGEtPndyaXRlKGRydl9kYXRhKTsKKworCQlpZiAoZHJ2X2RhdGEtPnR4ID09IGRydl9kYXRhLT50eF9lbmQpIHsKKwkJCS8qIERpc2FibGUgdHggaW50ZXJydXB0ICovCisJCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+U1NDUjFfVElFLCByZWcpOworCQkJaXJxX21hc2sgPSBkcnZfZGF0YS0+bWFza19zciAmIH5TU1NSX1RGUzsKKworCQkJLyogUFhBMjV4X1NTUCBoYXMgbm8gdGltZW91dCwgcmVhZCB0cmFpbGluZyBieXRlcyAqLworCQkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKSB7CisJCQkJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfQlNZKSAmJiBsaW1pdC0tKQorCQkJCQlkcnZfZGF0YS0+cmVhZChkcnZfZGF0YSk7CisKKwkJCQlpZiAobGltaXQgPT0gMCkKKwkJCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKKwkJCQkJCSJpbnRlcnJ1cHRfdHJhbnNmZXI6ICIKKwkJCQkJCSJ0cmFpbGluZyBieXRlIHJlYWQgZmFpbGVkXG4iKTsKKwkJCX0KKwkJfQorCisJCWlmICgoaXJxX3N0YXR1cyAmIFNTU1JfVElOVCkKKwkJCQl8fCAoZHJ2X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQpKSB7CisKKwkJCS8qIENsZWFyIHRpbWVvdXQgKi8KKwkJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKKwkJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKworCQkJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCAqLworCQkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGRydl9kYXRhLT5sZW47CisKKwkJCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCisJCQkgKiBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzICovCisJCQlpZiAoZHJ2X2RhdGEtPmNzX2NoYW5nZSkKKwkJCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfREVBU1NFUlQpOworCisJCQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KKwkJCW1zZy0+c3RhdGUgPSBuZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKKworCQkJLyogU2NoZWR1bGUgdHJhbnNmZXIgdGFza2xldCAqLworCQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKwkJfQorCX0KKworCS8qIFdlIGRpZCBzb21ldGhpbmcgKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzc3BfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKilkZXZfaWQ7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCWlmICghZHJ2X2RhdGEtPmN1cl9tc2cpIHsKKworCQl3cml0ZV9TU0NSMChyZWFkX1NTQ1IwKHJlZykgJiB+U1NDUjBfU1NFLCByZWcpOworCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmludF9jcjEsIHJlZyk7CisJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCXdyaXRlX1NTVE8oMCwgcmVnKTsKKwkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisKKwkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImJhZCBtZXNzYWdlIHN0YXRlICIKKwkJCQkiaW4gaW50ZXJydXB0IGhhbmRsZXIiKTsKKworCQkvKiBOZXZlciBmYWlsICovCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIoZHJ2X2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBwdW1wX3RyYW5zZmVycyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKilkYXRhOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIgPSBOVUxMOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnByZXZpb3VzID0gTlVMTDsKKwlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gTlVMTDsKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXUzMiBjbGtfZGl2ID0gMDsKKwl1OCBiaXRzID0gMDsKKwl1MzIgc3BlZWQgPSAwOworCXUzMiBjcjA7CisKKwkvKiBHZXQgY3VycmVudCBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCW1lc3NhZ2UgPSBkcnZfZGF0YS0+Y3VyX21zZzsKKwl0cmFuc2ZlciA9IGRydl9kYXRhLT5jdXJfdHJhbnNmZXI7CisJY2hpcCA9IGRydl9kYXRhLT5jdXJfY2hpcDsKKworCS8qIEhhbmRsZSBmb3IgYWJvcnQgKi8KKwlpZiAobWVzc2FnZS0+c3RhdGUgPT0gRVJST1JfU1RBVEUpIHsKKwkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTzsKKwkJZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlyZXR1cm47CisJfQorCisJLyogSGFuZGxlIGVuZCBvZiBtZXNzYWdlICovCisJaWYgKG1lc3NhZ2UtPnN0YXRlID09IERPTkVfU1RBVEUpIHsKKwkJbWVzc2FnZS0+c3RhdHVzID0gMDsKKwkJZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlyZXR1cm47CisJfQorCisJLyogRGVsYXkgaWYgcmVxdWVzdGVkIGF0IGVuZCBvZiB0cmFuc2ZlciovCisJaWYgKG1lc3NhZ2UtPnN0YXRlID09IFJVTk5JTkdfU1RBVEUpIHsKKwkJcHJldmlvdXMgPSBsaXN0X2VudHJ5KHRyYW5zZmVyLT50cmFuc2Zlcl9saXN0LnByZXYsCisJCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIsCisJCQkJCXRyYW5zZmVyX2xpc3QpOworCQlpZiAocHJldmlvdXMtPmRlbGF5X3VzZWNzKQorCQkJdWRlbGF5KHByZXZpb3VzLT5kZWxheV91c2Vjcyk7CisJfQorCisJLyogU2V0dXAgdGhlIHRyYW5zZmVyIHN0YXRlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRyYW5zZmVyICovCisJaWYgKGZsdXNoKGRydl9kYXRhKSA9PSAwKSB7CisJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJwdW1wX3RyYW5zZmVyczogZmx1c2ggZmFpbGVkXG4iKTsKKwkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTzsKKwkJZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlyZXR1cm47CisJfQorCWRydl9kYXRhLT5uX2J5dGVzID0gY2hpcC0+bl9ieXRlczsKKwlkcnZfZGF0YS0+ZG1hX3dpZHRoID0gY2hpcC0+ZG1hX3dpZHRoOworCWRydl9kYXRhLT5jc19jb250cm9sID0gY2hpcC0+Y3NfY29udHJvbDsKKwlkcnZfZGF0YS0+dHggPSAodm9pZCAqKXRyYW5zZmVyLT50eF9idWY7CisJZHJ2X2RhdGEtPnR4X2VuZCA9IGRydl9kYXRhLT50eCArIHRyYW5zZmVyLT5sZW47CisJZHJ2X2RhdGEtPnJ4ID0gdHJhbnNmZXItPnJ4X2J1ZjsKKwlkcnZfZGF0YS0+cnhfZW5kID0gZHJ2X2RhdGEtPnJ4ICsgdHJhbnNmZXItPmxlbjsKKwlkcnZfZGF0YS0+cnhfZG1hID0gdHJhbnNmZXItPnJ4X2RtYTsKKwlkcnZfZGF0YS0+dHhfZG1hID0gdHJhbnNmZXItPnR4X2RtYTsKKwlkcnZfZGF0YS0+bGVuID0gdHJhbnNmZXItPmxlbjsKKwlkcnZfZGF0YS0+d3JpdGUgPSBkcnZfZGF0YS0+dHggPyBjaGlwLT53cml0ZSA6IG51bGxfd3JpdGVyOworCWRydl9kYXRhLT5yZWFkID0gZHJ2X2RhdGEtPnJ4ID8gY2hpcC0+cmVhZCA6IG51bGxfcmVhZGVyOworCWRydl9kYXRhLT5jc19jaGFuZ2UgPSB0cmFuc2Zlci0+Y3NfY2hhbmdlOworCisJLyogQ2hhbmdlIHNwZWVkIGFuZCBiaXQgcGVyIHdvcmQgb24gYSBwZXIgdHJhbnNmZXIgKi8KKwlpZiAodHJhbnNmZXItPnNwZWVkX2h6IHx8IHRyYW5zZmVyLT5iaXRzX3Blcl93b3JkKSB7CisKKwkJLyogRGlzYWJsZSBjbG9jayAqLworCQl3cml0ZV9TU0NSMChjaGlwLT5jcjAgJiB+U1NDUjBfU1NFLCByZWcpOworCQljcjAgPSBjaGlwLT5jcjA7CisJCWJpdHMgPSBjaGlwLT5iaXRzX3Blcl93b3JkOworCQlzcGVlZCA9IGNoaXAtPnNwZWVkX2h6OworCisJCWlmICh0cmFuc2Zlci0+c3BlZWRfaHopCisJCQlzcGVlZCA9IHRyYW5zZmVyLT5zcGVlZF9oejsKKworCQlpZiAodHJhbnNmZXItPmJpdHNfcGVyX3dvcmQpCisJCQliaXRzID0gdHJhbnNmZXItPmJpdHNfcGVyX3dvcmQ7CisKKwkJaWYgKHJlZyA9PSBTU1AxX1ZJUlQpCisJCQljbGtfZGl2ID0gU1NQMV9TZXJDbGtEaXYoc3BlZWQpOworCQllbHNlIGlmIChyZWcgPT0gU1NQMl9WSVJUKQorCQkJY2xrX2RpdiA9IFNTUDJfU2VyQ2xrRGl2KHNwZWVkKTsKKwkJZWxzZSBpZiAocmVnID09IFNTUDNfVklSVCkKKwkJCWNsa19kaXYgPSBTU1AzX1NlckNsa0RpdihzcGVlZCk7CisKKwkJaWYgKGJpdHMgPD0gOCkgeworCQkJZHJ2X2RhdGEtPm5fYnl0ZXMgPSAxOworCQkJZHJ2X2RhdGEtPmRtYV93aWR0aCA9IERDTURfV0lEVEgxOworCQkJZHJ2X2RhdGEtPnJlYWQgPSBkcnZfZGF0YS0+cmVhZCAhPSBudWxsX3JlYWRlciA/CisJCQkJCQl1OF9yZWFkZXIgOiBudWxsX3JlYWRlcjsKKwkJCWRydl9kYXRhLT53cml0ZSA9IGRydl9kYXRhLT53cml0ZSAhPSBudWxsX3dyaXRlciA/CisJCQkJCQl1OF93cml0ZXIgOiBudWxsX3dyaXRlcjsKKwkJfSBlbHNlIGlmIChiaXRzIDw9IDE2KSB7CisJCQlkcnZfZGF0YS0+bl9ieXRlcyA9IDI7CisJCQlkcnZfZGF0YS0+ZG1hX3dpZHRoID0gRENNRF9XSURUSDI7CisJCQlkcnZfZGF0YS0+cmVhZCA9IGRydl9kYXRhLT5yZWFkICE9IG51bGxfcmVhZGVyID8KKwkJCQkJCXUxNl9yZWFkZXIgOiBudWxsX3JlYWRlcjsKKwkJCWRydl9kYXRhLT53cml0ZSA9IGRydl9kYXRhLT53cml0ZSAhPSBudWxsX3dyaXRlciA/CisJCQkJCQl1MTZfd3JpdGVyIDogbnVsbF93cml0ZXI7CisJCX0gZWxzZSBpZiAoYml0cyA8PSAzMikgeworCQkJZHJ2X2RhdGEtPm5fYnl0ZXMgPSA0OworCQkJZHJ2X2RhdGEtPmRtYV93aWR0aCA9IERDTURfV0lEVEg0OworCQkJZHJ2X2RhdGEtPnJlYWQgPSBkcnZfZGF0YS0+cmVhZCAhPSBudWxsX3JlYWRlciA/CisJCQkJCQl1MzJfcmVhZGVyIDogbnVsbF9yZWFkZXI7CisJCQlkcnZfZGF0YS0+d3JpdGUgPSBkcnZfZGF0YS0+d3JpdGUgIT0gbnVsbF93cml0ZXIgPworCQkJCQkJdTMyX3dyaXRlciA6IG51bGxfd3JpdGVyOworCQl9CisKKwkJY3IwID0gY2xrX2RpdgorCQkJfCBTU0NSMF9Nb3Rvcm9sYQorCQkJfCBTU0NSMF9EYXRhU2l6ZShiaXRzID4gMTYgPyBiaXRzIC0gMTYgOiBiaXRzKQorCQkJfCBTU0NSMF9TU0UKKwkJCXwgKGJpdHMgPiAxNiA/IFNTQ1IwX0VEU1MgOiAwKTsKKworCQkvKiBTdGFydCBpdCBiYWNrIHVwICovCisJCXdyaXRlX1NTQ1IwKGNyMCwgcmVnKTsKKwl9CisKKwltZXNzYWdlLT5zdGF0ZSA9IFJVTk5JTkdfU1RBVEU7CisKKwkvKiBUcnkgdG8gbWFwIGRtYSBidWZmZXIgYW5kIGRvIGEgZG1hIHRyYW5zZmVyIGlmIHN1Y2Nlc3NmdWwgKi8KKwlpZiAoKGRydl9kYXRhLT5kbWFfbWFwcGVkID0gbWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKSkpIHsKKworCQkvKiBFbnN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQlkcnZfZGF0YS0+dHJhbnNmZXJfaGFuZGxlciA9IGRtYV90cmFuc2ZlcjsKKworCQkvKiBTZXR1cCByeCBETUEgQ2hhbm5lbCAqLworCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCQlEU0FEUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBkcnZfZGF0YS0+c3Nkcl9waHlzaWNhbDsKKwkJRFRBRFIoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gZHJ2X2RhdGEtPnJ4X2RtYTsKKwkJaWYgKGRydl9kYXRhLT5yeCA9PSBkcnZfZGF0YS0+bnVsbF9kbWFfYnVmKQorCQkJLyogTm8gdGFyZ2V0IGFkZHJlc3MgaW5jcmVtZW50ICovCisJCQlEQ01EKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IERDTURfRkxPV1NSQworCQkJCQkJCXwgZHJ2X2RhdGEtPmRtYV93aWR0aAorCQkJCQkJCXwgY2hpcC0+ZG1hX2J1cnN0X3NpemUKKwkJCQkJCQl8IGRydl9kYXRhLT5sZW47CisJCWVsc2UKKwkJCURDTUQoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gRENNRF9JTkNUUkdBRERSCisJCQkJCQkJfCBEQ01EX0ZMT1dTUkMKKwkJCQkJCQl8IGRydl9kYXRhLT5kbWFfd2lkdGgKKwkJCQkJCQl8IGNoaXAtPmRtYV9idXJzdF9zaXplCisJCQkJCQkJfCBkcnZfZGF0YS0+bGVuOworCisJCS8qIFNldHVwIHR4IERNQSBDaGFubmVsICovCisJCURDU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJCURTQURSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IGRydl9kYXRhLT50eF9kbWE7CisJCURUQURSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IGRydl9kYXRhLT5zc2RyX3BoeXNpY2FsOworCQlpZiAoZHJ2X2RhdGEtPnR4ID09IGRydl9kYXRhLT5udWxsX2RtYV9idWYpCisJCQkvKiBObyBzb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgKi8KKwkJCURDTUQoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gRENNRF9GTE9XVFJHCisJCQkJCQkJfCBkcnZfZGF0YS0+ZG1hX3dpZHRoCisJCQkJCQkJfCBjaGlwLT5kbWFfYnVyc3Rfc2l6ZQorCQkJCQkJCXwgZHJ2X2RhdGEtPmxlbjsKKwkJZWxzZQorCQkJRENNRChkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBEQ01EX0lOQ1NSQ0FERFIKKwkJCQkJCQl8IERDTURfRkxPV1RSRworCQkJCQkJCXwgZHJ2X2RhdGEtPmRtYV93aWR0aAorCQkJCQkJCXwgY2hpcC0+ZG1hX2J1cnN0X3NpemUKKwkJCQkJCQl8IGRydl9kYXRhLT5sZW47CisKKwkJLyogRW5hYmxlIGRtYSBlbmQgaXJxcyBvbiBTU1AgdG8gZGV0ZWN0IGVuZCBvZiB0cmFuc2ZlciAqLworCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlID09IFBYQTI1eF9TU1ApCisJCQlEQ01EKGRydl9kYXRhLT50eF9jaGFubmVsKSB8PSBEQ01EX0VORElSUUVOOworCisJCS8qIEZpeCBtZSwgbmVlZCB0byBoYW5kbGUgY3MgcG9sYXJpdHkgKi8KKwkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0FTU0VSVCk7CisKKwkJLyogR28gYmFieSwgZ28gKi8KKwkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisJCURDU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpIHw9IERDU1JfUlVOOworCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSB8PSBEQ1NSX1JVTjsKKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQkJd3JpdGVfU1NUTyhjaGlwLT50aW1lb3V0LCByZWcpOworCQl3cml0ZV9TU0NSMShjaGlwLT5jcjEKKwkJCQl8IGNoaXAtPmRtYV90aHJlc2hvbGQKKwkJCQl8IGRydl9kYXRhLT5kbWFfY3IxLAorCQkJCXJlZyk7CisJfSBlbHNlIHsKKwkJLyogRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIJKi8KKwkJZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIgPSBpbnRlcnJ1cHRfdHJhbnNmZXI7CisKKwkJLyogRml4IG1lLCBuZWVkIHRvIGhhbmRsZSBjcyBwb2xhcml0eSAqLworCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfQVNTRVJUKTsKKworCQkvKiBHbyBiYWJ5LCBnbyAqLworCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQkJd3JpdGVfU1NUTyhjaGlwLT50aW1lb3V0LCByZWcpOworCQl3cml0ZV9TU0NSMShjaGlwLT5jcjEKKwkJCQl8IGNoaXAtPnRocmVzaG9sZAorCQkJCXwgZHJ2X2RhdGEtPmludF9jcjEsCisJCQkJcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHB1bXBfbWVzc2FnZXModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTG9jayBxdWV1ZSBhbmQgY2hlY2sgZm9yIHF1ZXVlIHdvcmsgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSB8fCBkcnZfZGF0YS0+cnVuID09IFFVRVVFX1NUT1BQRUQpIHsKKwkJZHJ2X2RhdGEtPmJ1c3kgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBydW5uaW5nIGEgbWVzc2FnZSAqLworCWlmIChkcnZfZGF0YS0+Y3VyX21zZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogRXh0cmFjdCBoZWFkIG9mIHF1ZXVlICovCisJZHJ2X2RhdGEtPmN1cl9tc2cgPSBsaXN0X2VudHJ5KGRydl9kYXRhLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UsIHF1ZXVlKTsKKwlsaXN0X2RlbF9pbml0KCZkcnZfZGF0YS0+Y3VyX21zZy0+cXVldWUpOworCisJLyogSW5pdGlhbCBtZXNzYWdlIHN0YXRlKi8KKwlkcnZfZGF0YS0+Y3VyX21zZy0+c3RhdGUgPSBTVEFSVF9TVEFURTsKKwlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0gbGlzdF9lbnRyeShkcnZfZGF0YS0+Y3VyX21zZy0+dHJhbnNmZXJzLm5leHQsCisJCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQkJdHJhbnNmZXJfbGlzdCk7CisKKwkvKiBTZXR1cCB0aGUgU1NQIHVzaW5nIHRoZSBwZXIgY2hpcCBjb25maWd1cmF0aW9uICovCisJZHJ2X2RhdGEtPmN1cl9jaGlwID0gc3BpX2dldF9jdGxkYXRhKGRydl9kYXRhLT5jdXJfbXNnLT5zcGkpOworCXJlc3RvcmVfc3RhdGUoZHJ2X2RhdGEpOworCisJLyogTWFyayBhcyBidXN5IGFuZCBsYXVuY2ggdHJhbnNmZXJzICovCisJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKworCWRydl9kYXRhLT5idXN5ID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHRyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZHJ2X2RhdGEtPnJ1biA9PSBRVUVVRV9TVE9QUEVEKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCW1zZy0+YWN0dWFsX2xlbmd0aCA9IDA7CisJbXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJbXNnLT5zdGF0ZSA9IFNUQVJUX1NUQVRFOworCisJbGlzdF9hZGRfdGFpbCgmbXNnLT5xdWV1ZSwgJmRydl9kYXRhLT5xdWV1ZSk7CisKKwlpZiAoZHJ2X2RhdGEtPnJ1biA9PSBRVUVVRV9SVU5OSU5HICYmICFkcnZfZGF0YS0+YnVzeSkKKwkJcXVldWVfd29yayhkcnZfZGF0YS0+d29ya3F1ZXVlLCAmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCAqY2hpcF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwOworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBpbnQgY2xrX2RpdjsKKworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQCisJCQkmJiAoc3BpLT5iaXRzX3Blcl93b3JkIDwgNCB8fCBzcGktPmJpdHNfcGVyX3dvcmQgPiAzMikpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8IDQgfHwgc3BpLT5iaXRzX3Blcl93b3JkID4gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogT25seSBhbGxvYyAob3IgdXNlIGNoaXBfaW5mbykgb24gZmlyc3Qgc2V0dXAgKi8KKwljaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7CisJaWYgKGNoaXAgPT0gTlVMTCkgeworCQljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNoaXBfZGF0YSksIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXApCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQljaGlwLT5jc19jb250cm9sID0gbnVsbF9jc19jb250cm9sOworCQljaGlwLT5lbmFibGVfZG1hID0gMDsKKwkJY2hpcC0+dGltZW91dCA9IFNTUF9USU1FT1VUKDEwMDApOworCQljaGlwLT50aHJlc2hvbGQgPSBTU0NSMV9SeFRyZXNoKDEpIHwgU1NDUjFfVHhUcmVzaCgxKTsKKwkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWEgPworCQkJCQlEQ01EX0JVUlNUOCA6IDA7CisKKwkJY2hpcF9pbmZvID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJfQorCisJLyogY2hpcF9pbmZvIGlzbid0IGFsd2F5cyBuZWVkZWQgKi8KKwlpZiAoY2hpcF9pbmZvKSB7CisJCWlmIChjaGlwX2luZm8tPmNzX2NvbnRyb2wpCisJCQljaGlwLT5jc19jb250cm9sID0gY2hpcF9pbmZvLT5jc19jb250cm9sOworCisJCWNoaXAtPnRpbWVvdXQgPSBTU1BfVElNRU9VVChjaGlwX2luZm8tPnRpbWVvdXRfbWljcm9zZWNzKTsKKworCQljaGlwLT50aHJlc2hvbGQgPSBTU0NSMV9SeFRyZXNoKGNoaXBfaW5mby0+cnhfdGhyZXNob2xkKQorCQkJCQl8IFNTQ1IxX1R4VHJlc2goY2hpcF9pbmZvLT50eF90aHJlc2hvbGQpOworCisJCWNoaXAtPmVuYWJsZV9kbWEgPSBjaGlwX2luZm8tPmRtYV9idXJzdF9zaXplICE9IDAKKwkJCQkJJiYgZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hOworCQljaGlwLT5kbWFfdGhyZXNob2xkID0gMDsKKworCQlpZiAoY2hpcC0+ZW5hYmxlX2RtYSkgeworCQkJaWYgKGNoaXBfaW5mby0+ZG1hX2J1cnN0X3NpemUgPD0gOCkgeworCQkJCWNoaXAtPmRtYV90aHJlc2hvbGQgPSBTU0NSMV9SeFRyZXNoKDgpCisJCQkJCQkJfCBTU0NSMV9UeFRyZXNoKDgpOworCQkJCWNoaXAtPmRtYV9idXJzdF9zaXplID0gRENNRF9CVVJTVDg7CisJCQl9IGVsc2UgaWYgKGNoaXBfaW5mby0+ZG1hX2J1cnN0X3NpemUgPD0gMTYpIHsKKwkJCQljaGlwLT5kbWFfdGhyZXNob2xkID0gU1NDUjFfUnhUcmVzaCgxNikKKwkJCQkJCQl8IFNTQ1IxX1R4VHJlc2goMTYpOworCQkJCWNoaXAtPmRtYV9idXJzdF9zaXplID0gRENNRF9CVVJTVDE2OworCQkJfSBlbHNlIHsKKwkJCQljaGlwLT5kbWFfdGhyZXNob2xkID0gU1NDUjFfUnhUcmVzaCgzMikKKwkJCQkJCQl8IFNTQ1IxX1R4VHJlc2goMzIpOworCQkJCWNoaXAtPmRtYV9idXJzdF9zaXplID0gRENNRF9CVVJTVDMyOworCQkJfQorCQl9CisKKworCQlpZiAoY2hpcF9pbmZvLT5lbmFibGVfbG9vcGJhY2spCisJCQljaGlwLT5jcjEgPSBTU0NSMV9MQk07CisJfQorCisJaWYgKGRydl9kYXRhLT5pb2FkZHIgPT0gU1NQMV9WSVJUKQorCQljbGtfZGl2ID0gU1NQMV9TZXJDbGtEaXYoc3BpLT5tYXhfc3BlZWRfaHopOworCWVsc2UgaWYgKGRydl9kYXRhLT5pb2FkZHIgPT0gU1NQMl9WSVJUKQorCQljbGtfZGl2ID0gU1NQMl9TZXJDbGtEaXYoc3BpLT5tYXhfc3BlZWRfaHopOworCWVsc2UgaWYgKGRydl9kYXRhLT5pb2FkZHIgPT0gU1NQM19WSVJUKQorCQljbGtfZGl2ID0gU1NQM19TZXJDbGtEaXYoc3BpLT5tYXhfc3BlZWRfaHopOworCWVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2hpcC0+c3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKKworCWNoaXAtPmNyMCA9IGNsa19kaXYKKwkJCXwgU1NDUjBfTW90b3JvbGEKKwkJCXwgU1NDUjBfRGF0YVNpemUoc3BpLT5iaXRzX3Blcl93b3JkID4gMTYgPworCQkJCXNwaS0+Yml0c19wZXJfd29yZCAtIDE2IDogc3BpLT5iaXRzX3Blcl93b3JkKQorCQkJfCBTU0NSMF9TU0UKKwkJCXwgKHNwaS0+Yml0c19wZXJfd29yZCA+IDE2ID8gU1NDUjBfRURTUyA6IDApOworCWNoaXAtPmNyMSB8PSAoKChzcGktPm1vZGUgJiBTUElfQ1BIQSkgIT0gMCkgPDwgNCkKKwkJCXwgKCgoc3BpLT5tb2RlICYgU1BJX0NQT0wpICE9IDApIDw8IDMpOworCisJLyogTk9URTogIFBYQTI1eF9TU1AgX2NvdWxkXyB1c2UgZXh0ZXJuYWwgY2xvY2tpbmcgLi4uICovCisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIGJpdHMvd29yZCwgJWQgSHosIG1vZGUgJWRcbiIsCisJCQkJc3BpLT5iaXRzX3Blcl93b3JkLAorCQkJCShDTE9DS19TUEVFRF9IWikKKwkJCQkJLyAoMSArICgoY2hpcC0+Y3IwICYgU1NDUjBfU0NSKSA+PiA4KSksCisJCQkJc3BpLT5tb2RlICYgMHgzKTsKKwllbHNlCisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlZCBIeiwgbW9kZSAlZFxuIiwKKwkJCQlzcGktPmJpdHNfcGVyX3dvcmQsCisJCQkJKENMT0NLX1NQRUVEX0haLzIpCisJCQkJCS8gKDEgKyAoKGNoaXAtPmNyMCAmIFNTQ1IwX1NDUikgPj4gOCkpLAorCQkJCXNwaS0+bW9kZSAmIDB4Myk7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkIDw9IDgpIHsKKwkJY2hpcC0+bl9ieXRlcyA9IDE7CisJCWNoaXAtPmRtYV93aWR0aCA9IERDTURfV0lEVEgxOworCQljaGlwLT5yZWFkID0gdThfcmVhZGVyOworCQljaGlwLT53cml0ZSA9IHU4X3dyaXRlcjsKKwl9IGVsc2UgaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSAxNikgeworCQljaGlwLT5uX2J5dGVzID0gMjsKKwkJY2hpcC0+ZG1hX3dpZHRoID0gRENNRF9XSURUSDI7CisJCWNoaXAtPnJlYWQgPSB1MTZfcmVhZGVyOworCQljaGlwLT53cml0ZSA9IHUxNl93cml0ZXI7CisJfSBlbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gMzIpIHsKKwkJY2hpcC0+Y3IwIHw9IFNTQ1IwX0VEU1M7CisJCWNoaXAtPm5fYnl0ZXMgPSA0OworCQljaGlwLT5kbWFfd2lkdGggPSBEQ01EX1dJRFRINDsKKwkJY2hpcC0+cmVhZCA9IHUzMl9yZWFkZXI7CisJCWNoaXAtPndyaXRlID0gdTMyX3dyaXRlcjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgd29yZHNpemVcbiIpOworCQlrZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNoaXAtPmJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisKKwlzcGlfc2V0X2N0bGRhdGEoc3BpLCBjaGlwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGNoaXBfZGF0YSAqY2hpcCA9IHNwaV9nZXRfY3RsZGF0YSgoc3RydWN0IHNwaV9kZXZpY2UgKilzcGkpOworCisJa2ZyZWUoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9xdWV1ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCUlOSVRfTElTVF9IRUFEKCZkcnZfZGF0YS0+cXVldWUpOworCXNwaW5fbG9ja19pbml0KCZkcnZfZGF0YS0+bG9jayk7CisKKwlkcnZfZGF0YS0+cnVuID0gUVVFVUVfU1RPUFBFRDsKKwlkcnZfZGF0YS0+YnVzeSA9IDA7CisKKwl0YXNrbGV0X2luaXQoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycywKKwkJCXB1bXBfdHJhbnNmZXJzLAkodW5zaWduZWQgbG9uZylkcnZfZGF0YSk7CisKKwlJTklUX1dPUksoJmRydl9kYXRhLT5wdW1wX21lc3NhZ2VzLCBwdW1wX21lc3NhZ2VzLCBkcnZfZGF0YSk7CisJZHJ2X2RhdGEtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCQlkcnZfZGF0YS0+bWFzdGVyLT5jZGV2LmRldi0+YnVzX2lkKTsKKwlpZiAoZHJ2X2RhdGEtPndvcmtxdWV1ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZHJ2X2RhdGEtPnJ1biA9PSBRVUVVRV9SVU5OSU5HIHx8IGRydl9kYXRhLT5idXN5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZHJ2X2RhdGEtPnJ1biA9IFFVRVVFX1JVTk5JTkc7CisJZHJ2X2RhdGEtPmN1cl9tc2cgPSBOVUxMOworCWRydl9kYXRhLT5jdXJfdHJhbnNmZXIgPSBOVUxMOworCWRydl9kYXRhLT5jdXJfY2hpcCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKworCXF1ZXVlX3dvcmsoZHJ2X2RhdGEtPndvcmtxdWV1ZSwgJmRydl9kYXRhLT5wdW1wX21lc3NhZ2VzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0b3BfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxpbWl0ID0gNTAwOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisKKwkvKiBUaGlzIGlzIGEgYml0IGxhbWUsIGJ1dCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gZXhlY3V0aW9uIHBhdGguCisJICogQSB3YWl0X3F1ZXVlIG9uIHRoZSBkcnZfZGF0YS0+YnVzeSBjb3VsZCBiZSB1c2VkLCBidXQgdGhlbiB0aGUgY29tbW9uCisJICogZXhlY3V0aW9uIHBhdGggKHB1bXBfbWVzc2FnZXMpIHdvdWxkIGJlIHJlcXVpcmVkIHRvIGNhbGwgd2FrZV91cCBvcgorCSAqIGZyaWVuZHMgb24gZXZlcnkgU1BJIG1lc3NhZ2UuIERvIHRoaXMgaW5zdGVhZCAqLworCWRydl9kYXRhLT5ydW4gPSBRVUVVRV9TVE9QUEVEOworCXdoaWxlICghbGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSAmJiBkcnZfZGF0YS0+YnVzeSAmJiBsaW1pdC0tKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CisJCW1zbGVlcCgxMCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSB8fCBkcnZfZGF0YS0+YnVzeSkKKwkJc3RhdHVzID0gLUVCVVNZOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGVzdHJveV9xdWV1ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBzdG9wX3F1ZXVlKGRydl9kYXRhKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlkZXN0cm95X3dvcmtxdWV1ZShkcnZfZGF0YS0+d29ya3F1ZXVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqcGxhdGZvcm1faW5mbzsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqbWVtb3J5X3Jlc291cmNlOworCWludCBpcnE7CisJaW50IHN0YXR1cyA9IDA7CisKKwlwbGF0Zm9ybV9pbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBsYXRmb3JtX2luZm8tPnNzcF90eXBlID09IFNTUF9VTkRFRklORUQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5kZWZpbmVkIFNTUFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEFsbG9jYXRlIG1hc3RlciB3aXRoIHNwYWNlIGZvciBkcnZfZGF0YSBhbmQgbnVsbCBkbWEgYnVmZmVyICovCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcihkZXYsIHNpemVvZihzdHJ1Y3QgZHJpdmVyX2RhdGEpICsgMTYpOworCWlmICghbWFzdGVyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbiBub3QgYWxsb2Mgc3BpX21hc3RlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlkcnZfZGF0YS0+bWFzdGVyID0gbWFzdGVyOworCWRydl9kYXRhLT5tYXN0ZXJfaW5mbyA9IHBsYXRmb3JtX2luZm87CisJZHJ2X2RhdGEtPnBkZXYgPSBwZGV2OworCisJbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBsYXRmb3JtX2luZm8tPm51bV9jaGlwc2VsZWN0OworCW1hc3Rlci0+Y2xlYW51cCA9IGNsZWFudXA7CisJbWFzdGVyLT5zZXR1cCA9IHNldHVwOworCW1hc3Rlci0+dHJhbnNmZXIgPSB0cmFuc2ZlcjsKKworCWRydl9kYXRhLT5zc3BfdHlwZSA9IHBsYXRmb3JtX2luZm8tPnNzcF90eXBlOworCWRydl9kYXRhLT5udWxsX2RtYV9idWYgPSAodTMyICopQUxJR04oKHUzMikoZHJ2X2RhdGEgKworCQkJCQkJc2l6ZW9mKHN0cnVjdCBkcml2ZXJfZGF0YSkpLCA4KTsKKworCS8qIFNldHVwIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLworCW1lbW9yeV9yZXNvdXJjZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW1vcnlfcmVzb3VyY2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWVtb3J5IHJlc291cmNlcyBub3QgZGVmaW5lZFxuIik7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzsKKwl9CisKKwlkcnZfZGF0YS0+aW9hZGRyID0gKHZvaWQgKilpb19wMnYoKHVuc2lnbmVkIGxvbmcpKG1lbW9yeV9yZXNvdXJjZS0+c3RhcnQpKTsKKwlkcnZfZGF0YS0+c3Nkcl9waHlzaWNhbCA9IG1lbW9yeV9yZXNvdXJjZS0+c3RhcnQgKyAweDAwMDAwMDEwOworCWlmIChwbGF0Zm9ybV9pbmZvLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKSB7CisJCWRydl9kYXRhLT5pbnRfY3IxID0gU1NDUjFfVElFIHwgU1NDUjFfUklFOworCQlkcnZfZGF0YS0+ZG1hX2NyMSA9IDA7CisJCWRydl9kYXRhLT5jbGVhcl9zciA9IFNTU1JfUk9SOworCQlkcnZfZGF0YS0+bWFza19zciA9IFNTU1JfUkZTIHwgU1NTUl9URlMgfCBTU1NSX1JPUjsKKwl9IGVsc2UgeworCQlkcnZfZGF0YS0+aW50X2NyMSA9IFNTQ1IxX1RJRSB8IFNTQ1IxX1JJRSB8IFNTQ1IxX1RJTlRFOworCQlkcnZfZGF0YS0+ZG1hX2NyMSA9IFNTQ1IxX1RTUkUgfCBTU0NSMV9SU1JFIHwgU1NDUjFfVElOVEU7CisJCWRydl9kYXRhLT5jbGVhcl9zciA9IFNTU1JfUk9SIHwgU1NTUl9USU5UOworCQlkcnZfZGF0YS0+bWFza19zciA9IFNTU1JfVElOVCB8IFNTU1JfUkZTIHwgU1NTUl9URlMgfCBTU1NSX1JPUjsKKwl9CisKKwkvKiBBdHRhY2ggdG8gSVJRICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpcnEgcmVzb3VyY2Ugbm90IGRlZmluZWRcbiIpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CisJfQorCisJc3RhdHVzID0gcmVxdWVzdF9pcnEoaXJxLCBzc3BfaW50LCAwLCBkZXYtPmJ1c19pZCwgZHJ2X2RhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbiBub3QgZ2V0IElSUVxuIik7CisJCWdvdG8gb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzsKKwl9CisKKwkvKiBTZXR1cCBETUEgaWYgcmVxdWVzdGVkICovCisJZHJ2X2RhdGEtPnR4X2NoYW5uZWwgPSAtMTsKKwlkcnZfZGF0YS0+cnhfY2hhbm5lbCA9IC0xOworCWlmIChwbGF0Zm9ybV9pbmZvLT5lbmFibGVfZG1hKSB7CisKKwkJLyogR2V0IHR3byBETUEgY2hhbm5lbHMJKHJ4IGFuZCB0eCkgKi8KKwkJZHJ2X2RhdGEtPnJ4X2NoYW5uZWwgPSBweGFfcmVxdWVzdF9kbWEoInB4YTJ4eF9zcGlfc3NwX3J4IiwKKwkJCQkJCQlETUFfUFJJT19ISUdILAorCQkJCQkJCWRtYV9oYW5kbGVyLAorCQkJCQkJCWRydl9kYXRhKTsKKwkJaWYgKGRydl9kYXRhLT5yeF9jaGFubmVsIDwgMCkgeworCQkJZGV2X2VycihkZXYsICJwcm9ibGVtICglZCkgcmVxdWVzdGluZyByeCBjaGFubmVsXG4iLAorCQkJCWRydl9kYXRhLT5yeF9jaGFubmVsKTsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIG91dF9lcnJvcl9pcnFfYWxsb2M7CisJCX0KKwkJZHJ2X2RhdGEtPnR4X2NoYW5uZWwgPSBweGFfcmVxdWVzdF9kbWEoInB4YTJ4eF9zcGlfc3NwX3R4IiwKKwkJCQkJCQlETUFfUFJJT19NRURJVU0sCisJCQkJCQkJZG1hX2hhbmRsZXIsCisJCQkJCQkJZHJ2X2RhdGEpOworCQlpZiAoZHJ2X2RhdGEtPnR4X2NoYW5uZWwgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgInByb2JsZW0gKCVkKSByZXF1ZXN0aW5nIHR4IGNoYW5uZWxcbiIsCisJCQkJZHJ2X2RhdGEtPnR4X2NoYW5uZWwpOworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWdvdG8gb3V0X2Vycm9yX2RtYV9hbGxvYzsKKwkJfQorCisJCWlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDFfVklSVCkgeworCQkJCURSQ01SUlhTU0RSID0gRFJDTVJfTUFQVkxECisJCQkJCQl8IGRydl9kYXRhLT5yeF9jaGFubmVsOworCQkJCURSQ01SVFhTU0RSID0gRFJDTVJfTUFQVkxECisJCQkJCQl8IGRydl9kYXRhLT50eF9jaGFubmVsOworCQl9IGVsc2UgaWYgKGRydl9kYXRhLT5pb2FkZHIgPT0gU1NQMl9WSVJUKSB7CisJCQkJRFJDTVJSWFNTMkRSID0gRFJDTVJfTUFQVkxECisJCQkJCQl8IGRydl9kYXRhLT5yeF9jaGFubmVsOworCQkJCURSQ01SVFhTUzJEUiA9IERSQ01SX01BUFZMRAorCQkJCQkJfCBkcnZfZGF0YS0+dHhfY2hhbm5lbDsKKwkJfSBlbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDNfVklSVCkgeworCQkJCURSQ01SUlhTUzNEUiA9IERSQ01SX01BUFZMRAorCQkJCQkJfCBkcnZfZGF0YS0+cnhfY2hhbm5lbDsKKwkJCQlEUkNNUlRYU1MzRFIgPSBEUkNNUl9NQVBWTEQKKwkJCQkJCXwgZHJ2X2RhdGEtPnR4X2NoYW5uZWw7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKGRldiwgImJhZCBTU1AgdHlwZVxuIik7CisJCQlnb3RvIG91dF9lcnJvcl9kbWFfYWxsb2M7CisJCX0KKwl9CisKKwkvKiBFbmFibGUgU09DIGNsb2NrICovCisJcHhhX3NldF9ja2VuKHBsYXRmb3JtX2luZm8tPmNsb2NrX2VuYWJsZSwgMSk7CisKKwkvKiBMb2FkIGRlZmF1bHQgU1NQIGNvbmZpZ3VyYXRpb24gKi8KKwl3cml0ZV9TU0NSMCgwLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwl3cml0ZV9TU0NSMShTU0NSMV9SeFRyZXNoKDQpIHwgU1NDUjFfVHhUcmVzaCgxMiksIGRydl9kYXRhLT5pb2FkZHIpOworCXdyaXRlX1NTQ1IwKFNTQ1IwX1NlckNsa0RpdigyKQorCQkJfCBTU0NSMF9Nb3Rvcm9sYQorCQkJfCBTU0NSMF9EYXRhU2l6ZSg4KSwKKwkJCWRydl9kYXRhLT5pb2FkZHIpOworCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJd3JpdGVfU1NUTygwLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwl3cml0ZV9TU1BTUCgwLCBkcnZfZGF0YS0+aW9hZGRyKTsKKworCS8qIEluaXRpYWwgYW5kIHN0YXJ0IHF1ZXVlICovCisJc3RhdHVzID0gaW5pdF9xdWV1ZShkcnZfZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gaW5pdGlhbGl6aW5nIHF1ZXVlXG4iKTsKKwkJZ290byBvdXRfZXJyb3JfY2xvY2tfZW5hYmxlZDsKKwl9CisJc3RhdHVzID0gc3RhcnRfcXVldWUoZHJ2X2RhdGEpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHF1ZXVlXG4iKTsKKwkJZ290byBvdXRfZXJyb3JfY2xvY2tfZW5hYmxlZDsKKwl9CisKKwkvKiBSZWdpc3RlciB3aXRoIHRoZSBTUEkgZnJhbWV3b3JrICovCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2X2RhdGEpOworCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSByZWdpc3RlcmluZyBzcGkgbWFzdGVyXG4iKTsKKwkJZ290byBvdXRfZXJyb3JfcXVldWVfYWxsb2M7CisJfQorCisJcmV0dXJuIHN0YXR1czsKKworb3V0X2Vycm9yX3F1ZXVlX2FsbG9jOgorCWRlc3Ryb3lfcXVldWUoZHJ2X2RhdGEpOworCitvdXRfZXJyb3JfY2xvY2tfZW5hYmxlZDoKKwlweGFfc2V0X2NrZW4ocGxhdGZvcm1faW5mby0+Y2xvY2tfZW5hYmxlLCAwKTsKKworb3V0X2Vycm9yX2RtYV9hbGxvYzoKKwlpZiAoZHJ2X2RhdGEtPnR4X2NoYW5uZWwgIT0gLTEpCisJCXB4YV9mcmVlX2RtYShkcnZfZGF0YS0+dHhfY2hhbm5lbCk7CisJaWYgKGRydl9kYXRhLT5yeF9jaGFubmVsICE9IC0xKQorCQlweGFfZnJlZV9kbWEoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpOworCitvdXRfZXJyb3JfaXJxX2FsbG9jOgorCWZyZWVfaXJxKGlycSwgZHJ2X2RhdGEpOworCitvdXRfZXJyb3JfbWFzdGVyX2FsbG9jOgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBweGEyeHhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaXJxOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFkcnZfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZW1vdmUgdGhlIHF1ZXVlICovCisJc3RhdHVzID0gZGVzdHJveV9xdWV1ZShkcnZfZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogRGlzYWJsZSB0aGUgU1NQIGF0IHRoZSBwZXJpcGhlcmFsIGFuZCBTT0MgbGV2ZWwgKi8KKwl3cml0ZV9TU0NSMCgwLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwlweGFfc2V0X2NrZW4oZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5jbG9ja19lbmFibGUsIDApOworCisJLyogUmVsZWFzZSBETUEgKi8KKwlpZiAoZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hKSB7CisJCWlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDFfVklSVCkgeworCQkJRFJDTVJSWFNTRFIgPSAwOworCQkJRFJDTVJUWFNTRFIgPSAwOworCQl9IGVsc2UgaWYgKGRydl9kYXRhLT5pb2FkZHIgPT0gU1NQMl9WSVJUKSB7CisJCQlEUkNNUlJYU1MyRFIgPSAwOworCQkJRFJDTVJUWFNTMkRSID0gMDsKKwkJfSBlbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDNfVklSVCkgeworCQkJRFJDTVJSWFNTM0RSID0gMDsKKwkJCURSQ01SVFhTUzNEUiA9IDA7CisJCX0KKwkJcHhhX2ZyZWVfZG1hKGRydl9kYXRhLT50eF9jaGFubmVsKTsKKwkJcHhhX2ZyZWVfZG1hKGRydl9kYXRhLT5yeF9jaGFubmVsKTsKKwl9CisKKwkvKiBSZWxlYXNlIElSUSAqLworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA+PSAwKQorCQlmcmVlX2lycShpcnEsIGRydl9kYXRhKTsKKworCS8qIERpc2Nvbm5lY3QgZnJvbSB0aGUgU1BJIGZyYW1ld29yayAqLworCXNwaV91bnJlZ2lzdGVyX21hc3RlcihkcnZfZGF0YS0+bWFzdGVyKTsKKworCS8qIFByZXZlbnQgZG91YmxlIHJlbW92ZSAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9zcGlfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICgoc3RhdHVzID0gcHhhMnh4X3NwaV9yZW1vdmUocGRldikpICE9IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwgInNodXRkb3duIGZhaWxlZCB3aXRoICVkXG4iLCBzdGF0dXMpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHN1c3BlbmRfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnBtX21lc3NhZ2UpCit7CisJcG1fbWVzc2FnZV90ICpzdGF0ZSA9IHBtX21lc3NhZ2U7CisKKwlpZiAoZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBzdGF0ZS0+ZXZlbnQpIHsKKwkJZGV2X3dhcm4oZGV2LCAicG0gc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVxdWVzdFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGEyeHhfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIENoZWNrIGFsbCBjaGlsZGVybiBmb3IgY3VycmVudCBwb3dlciBzdGF0ZSAqLworCWlmIChkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnBkZXYtPmRldiwgJnN0YXRlLCBzdXNwZW5kX2RldmljZXMpICE9IDApIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInN1c3BlbmQgYWJvcnRlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdGF0dXMgPSBzdG9wX3F1ZXVlKGRydl9kYXRhKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXJldHVybiBzdGF0dXM7CisJd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJcHhhX3NldF9ja2VuKGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+Y2xvY2tfZW5hYmxlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBzdGF0dXMgPSAwOworCisJLyogRW5hYmxlIHRoZSBTU1AgY2xvY2sgKi8KKwlweGFfc2V0X2NrZW4oZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5jbG9ja19lbmFibGUsIDEpOworCisJLyogU3RhcnQgdGhlIHF1ZXVlIHJ1bm5pbmcgKi8KKwlzdGF0dXMgPSBzdGFydF9xdWV1ZShkcnZfZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWUgKCVkKVxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHB4YTJ4eF9zcGlfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHB4YTJ4eF9zcGlfcmVzdW1lIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInB4YTJ4eC1zcGkiLAorCQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHB4YTJ4eF9zcGlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHB4YTJ4eF9zcGlfcmVtb3ZlKSwKKwkuc2h1dGRvd24gPSBweGEyeHhfc3BpX3NodXRkb3duLAorCS5zdXNwZW5kID0gcHhhMnh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBweGEyeHhfc3BpX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9zcGlfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyKTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocHhhMnh4X3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHB4YTJ4eF9zcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXIpOworfQorbW9kdWxlX2V4aXQocHhhMnh4X3NwaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggOTRmNWU4ZS4uMWNlYTRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTMzOCwxOCArMzM4LDE4IEBACiAgKiBzcGlfYWxsb2NfbWFzdGVyIC0gYWxsb2NhdGUgU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiBAZGV2OiB0aGUgY29udHJvbGxlciwgcG9zc2libHkgdXNpbmcgdGhlIHBsYXRmb3JtX2J1cwogICogQHNpemU6IGhvdyBtdWNoIGRyaXZlci1wcml2YXRlIGRhdGEgdG8gcHJlYWxsb2NhdGU7IHRoZSBwb2ludGVyIHRvIHRoaXMKLSAqIAltZW1vcnkgaXMgaW4gdGhlIGNsYXNzX2RhdGEgZmllbGQgb2YgdGhlIHJldHVybmVkIGNsYXNzX2RldmljZSwKKyAqCW1lbW9yeSBpcyBpbiB0aGUgY2xhc3NfZGF0YSBmaWVsZCBvZiB0aGUgcmV0dXJuZWQgY2xhc3NfZGV2aWNlLAogICoJYWNjZXNzaWJsZSB3aXRoIHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoKS4KICAqCiAgKiBUaGlzIGNhbGwgaXMgdXNlZCBvbmx5IGJ5IFNQSSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXJzLCB3aGljaCBhcmUgdGhlCiAgKiBvbmx5IG9uZXMgZGlyZWN0bHkgdG91Y2hpbmcgY2hpcCByZWdpc3RlcnMuICBJdCdzIGhvdyB0aGV5IGFsbG9jYXRlCi0gKiBhbiBzcGlfbWFzdGVyIHN0cnVjdHVyZSwgcHJpb3IgdG8gY2FsbGluZyBzcGlfYWRkX21hc3RlcigpLgorICogYW4gc3BpX21hc3RlciBzdHJ1Y3R1cmUsIHByaW9yIHRvIGNhbGxpbmcgc3BpX3JlZ2lzdGVyX21hc3RlcigpLgogICoKICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLiAgSXQgcmV0dXJucyB0aGUgU1BJCiAgKiBtYXN0ZXIgc3RydWN0dXJlIG9uIHN1Y2Nlc3MsIGVsc2UgTlVMTC4KICAqCiAgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhc3NpZ25pbmcgdGhlIGJ1cyBudW1iZXIgYW5kIGluaXRpYWxpemluZwotICogdGhlIG1hc3RlcidzIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgc3BpX2FkZF9tYXN0ZXIoKTsgYW5kIChhZnRlciBlcnJvcnMKKyAqIHRoZSBtYXN0ZXIncyBtZXRob2RzIGJlZm9yZSBjYWxsaW5nIHNwaV9yZWdpc3Rlcl9tYXN0ZXIoKTsgYW5kIChhZnRlciBlcnJvcnMKICAqIGFkZGluZyB0aGUgZGV2aWNlKSBjYWxsaW5nIHNwaV9tYXN0ZXJfcHV0KCkgdG8gcHJldmVudCBhIG1lbW9yeSBsZWFrLgogICovCiBzdHJ1Y3Qgc3BpX21hc3RlciAqIF9faW5pdF9vcl9tb2R1bGUKQEAgLTM5NSw3ICszOTUsNyBAQAogaW50IF9faW5pdF9vcl9tb2R1bGUKIHNwaV9yZWdpc3Rlcl9tYXN0ZXIoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikKIHsKLQlzdGF0aWMgYXRvbWljX3QJCWR5bl9idXNfaWQgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdGF0aWMgYXRvbWljX3QJCWR5bl9idXNfaWQgPSBBVE9NSUNfSU5JVCgoMTw8MTYpIC0gMSk7CiAJc3RydWN0IGRldmljZQkJKmRldiA9IG1hc3Rlci0+Y2Rldi5kZXY7CiAJaW50CQkJc3RhdHVzID0gLUVOT0RFVjsKIAlpbnQJCQlkeW5hbWljID0gMDsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGNvbnZlbnRpb246ICBkeW5hbWljYWxseSBhc3NpZ25lZCBidXMgSURzIGNvdW50IGRvd24gZnJvbSB0aGUgbWF4ICovCi0JaWYgKG1hc3Rlci0+YnVzX251bSA9PSAwKSB7CisJaWYgKG1hc3Rlci0+YnVzX251bSA8IDApIHsKIAkJbWFzdGVyLT5idXNfbnVtID0gYXRvbWljX2RlY19yZXR1cm4oJmR5bl9idXNfaWQpOwogCQlkeW5hbWljID0gMTsKIAl9CkBAIC01MjIsNyArNTIyLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNwaV9zeW5jKTsKIAotI2RlZmluZQlTUElfQlVGU0laCShTTVBfQ0FDSEVfQllURVMpCisvKiBwb3J0YWJsZSBjb2RlIG11c3QgbmV2ZXIgcGFzcyBtb3JlIHRoYW4gMzIgYnl0ZXMgKi8KKyNkZWZpbmUJU1BJX0JVRlNJWgltYXgoMzIsU01QX0NBQ0hFX0JZVEVTKQogCiBzdGF0aWMgdTgJKmJ1ZjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYyBiL2RyaXZlcnMvc3BpL3NwaV9iaXRiYW5nLmMKaW5kZXggZjAzN2U1NS4uZGQyZjk1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYml0YmFuZy5jCkBAIC0xMzgsNiArMTM4LDQ1IEBACiAJcmV0dXJuIHQtPmxlbiAtIGNvdW50OwogfQogCitpbnQgc3BpX2JpdGJhbmdfc2V0dXBfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmdfY3MJKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCXU4CQkJYml0c19wZXJfd29yZDsKKwl1MzIJCQloejsKKworCWlmICh0KSB7CisJCWJpdHNfcGVyX3dvcmQgPSB0LT5iaXRzX3Blcl93b3JkOworCQloeiA9IHQtPnNwZWVkX2h6OworCX0gZWxzZSB7CisJCWJpdHNfcGVyX3dvcmQgPSAwOworCQloeiA9IDA7CisJfQorCisJLyogc3BpX3RyYW5zZmVyIGxldmVsIGNhbGxzIHRoYXQgd29yayBwZXItd29yZCAqLworCWlmICghYml0c19wZXJfd29yZCkKKwkJYml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKKwlpZiAoYml0c19wZXJfd29yZCA8PSA4KQorCQljcy0+dHhyeF9idWZzID0gYml0YmFuZ190eHJ4Xzg7CisJZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAxNikKKwkJY3MtPnR4cnhfYnVmcyA9IGJpdGJhbmdfdHhyeF8xNjsKKwllbHNlIGlmIChiaXRzX3Blcl93b3JkIDw9IDMyKQorCQljcy0+dHhyeF9idWZzID0gYml0YmFuZ190eHJ4XzMyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBuc2VjcyA9IChjbG9jayBwZXJpb2QpLzIgKi8KKwlpZiAoIWh6KQorCQloeiA9IHNwaS0+bWF4X3NwZWVkX2h6OworCWlmIChoeikgeworCQljcy0+bnNlY3MgPSAoMTAwMDAwMDAwMC8yKSAvIGh6OworCQlpZiAoY3MtPm5zZWNzID4gKE1BWF9VREVMQVlfTVMgKiAxMDAwICogMTAwMCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNwaV9iaXRiYW5nX3NldHVwX3RyYW5zZmVyKTsKKwogLyoqCiAgKiBzcGlfYml0YmFuZ19zZXR1cCAtIGRlZmF1bHQgc2V0dXAgZm9yIHBlci13b3JkIEkvTyBsb29wcwogICovCkBAIC0xNDUsOCArMTg0LDE2IEBACiB7CiAJc3RydWN0IHNwaV9iaXRiYW5nX2NzCSpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKIAlzdHJ1Y3Qgc3BpX2JpdGJhbmcJKmJpdGJhbmc7CisJaW50CQkJcmV0dmFsOwogCi0JaWYgKCFzcGktPm1heF9zcGVlZF9oeikKKwliaXRiYW5nID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwkvKiBSRVZJU0lUOiBzb21lIHN5c3RlbXMgd2lsbCB3YW50IHRvIHN1cHBvcnQgZGV2aWNlcyB1c2luZyBsc2ItZmlyc3QKKwkgKiBiaXQgZW5jb2RpbmdzIG9uIHRoZSB3aXJlLiAgSW4gcHVyZSBzb2Z0d2FyZSB0aGF0IHdvdWxkIGJlIHRyaXZpYWwsCisJICoganVzdCBiaXRiYW5nX3R4cnhfbGVfY3BoYVgoKSByb3V0aW5lcyBzaGlmdGluZyB0aGUgb3RoZXIgd2F5LCBhbmQKKwkgKiBzb21lIGhhcmR3YXJlIGNvbnRyb2xsZXJzIGFsc28gaGF2ZSB0aGlzIHN1cHBvcnQuCisJICovCisJaWYgKChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghY3MpIHsKQEAgLTE1NSwzMiArMjAyLDIwIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJc3BpLT5jb250cm9sbGVyX3N0YXRlID0gY3M7CiAJfQotCWJpdGJhbmcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAogCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQogCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwogCi0JLyogc3BpX3RyYW5zZmVyIGxldmVsIGNhbGxzIHRoYXQgd29yayBwZXItd29yZCAqLwotCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gOCkKLQkJY3MtPnR4cnhfYnVmcyA9IGJpdGJhbmdfdHhyeF84OwotCWVsc2UgaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSAxNikKLQkJY3MtPnR4cnhfYnVmcyA9IGJpdGJhbmdfdHhyeF8xNjsKLQllbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gMzIpCi0JCWNzLT50eHJ4X2J1ZnMgPSBiaXRiYW5nX3R4cnhfMzI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIHBlci13b3JkIHNoaWZ0IHJlZ2lzdGVyIGFjY2VzcywgaW4gaGFyZHdhcmUgb3IgYml0YmFuZ2luZyAqLwogCWNzLT50eHJ4X3dvcmQgPSBiaXRiYW5nLT50eHJ4X3dvcmRbc3BpLT5tb2RlICYgKFNQSV9DUE9MfFNQSV9DUEhBKV07CiAJaWYgKCFjcy0+dHhyeF93b3JkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIG5zZWNzID0gKGNsb2NrIHBlcmlvZCkvMiAqLwotCWNzLT5uc2VjcyA9ICgxMDAwMDAwMDAwLzIpIC8gKHNwaS0+bWF4X3NwZWVkX2h6KTsKLQlpZiAoY3MtPm5zZWNzID4gTUFYX1VERUxBWV9NUyAqIDEwMDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHZhbCA9IHNwaV9iaXRiYW5nX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CiAKLQlkZXZfZGJnKCZzcGktPmRldiwgIiVzLCBtb2RlICVkLCAldSBiaXRzL3csICV1IG5zZWNcbiIsCisJZGV2X2RiZygmc3BpLT5kZXYsICIlcywgbW9kZSAlZCwgJXUgYml0cy93LCAldSBuc2VjL2JpdFxuIiwKIAkJCV9fRlVOQ1RJT05fXywgc3BpLT5tb2RlICYgKFNQSV9DUE9MIHwgU1BJX0NQSEEpLAogCQkJc3BpLT5iaXRzX3Blcl93b3JkLCAyICogY3MtPm5zZWNzKTsKIApAQCAtMjQ2LDYgKzI4MSw4IEBACiAJCXVuc2lnbmVkCQl0bXA7CiAJCXVuc2lnbmVkCQljc19jaGFuZ2U7CiAJCWludAkJCXN0YXR1czsKKwkJaW50CQkJKCpzZXR1cF90cmFuc2Zlcikoc3RydWN0IHNwaV9kZXZpY2UgKiwKKwkJCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKik7CiAKIAkJbSA9IGNvbnRhaW5lcl9vZihiaXRiYW5nLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgc3BpX21lc3NhZ2UsCiAJCQkJcXVldWUpOwpAQCAtMjYyLDYgKzI5OSw3IEBACiAJCXRtcCA9IDA7CiAJCWNzX2NoYW5nZSA9IDE7CiAJCXN0YXR1cyA9IDA7CisJCXNldHVwX3RyYW5zZmVyID0gTlVMTDsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh0LCAmbS0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CiAJCQlpZiAoYml0YmFuZy0+c2h1dGRvd24pIHsKQEAgLTI2OSw2ICszMDcsMjAgQEAKIAkJCQlicmVhazsKIAkJCX0KIAorCQkJLyogb3ZlcnJpZGUgb3IgcmVzdG9yZSBzcGVlZCBhbmQgd29yZHNpemUgKi8KKwkJCWlmICh0LT5zcGVlZF9oeiB8fCB0LT5iaXRzX3Blcl93b3JkKSB7CisJCQkJc2V0dXBfdHJhbnNmZXIgPSBiaXRiYW5nLT5zZXR1cF90cmFuc2ZlcjsKKwkJCQlpZiAoIXNldHVwX3RyYW5zZmVyKSB7CisJCQkJCXN0YXR1cyA9IC1FTk9QUk9UT09QVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHNldHVwX3RyYW5zZmVyKSB7CisJCQkJc3RhdHVzID0gc2V0dXBfdHJhbnNmZXIoc3BpLCB0KTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisKIAkJCS8qIHNldCB1cCBkZWZhdWx0IGNsb2NrIHBvbGFyaXR5LCBhbmQgYWN0aXZhdGUgY2hpcDsKIAkJCSAqIHRoaXMgaW1wbGljaXRseSB1cGRhdGVzIGNsb2NrIGFuZCBzcGkgbW9kZXMgYXMKIAkJCSAqIHByZXZpb3VzbHkgcmVjb3JkZWQgZm9yIHRoaXMgZGV2aWNlIHZpYSBzZXR1cCgpLgpAQCAtMzI1LDYgKzM3NywxMCBAQAogCQltLT5zdGF0dXMgPSBzdGF0dXM7CiAJCW0tPmNvbXBsZXRlKG0tPmNvbnRleHQpOwogCisJCS8qIHJlc3RvcmUgc3BlZWQgYW5kIHdvcmRzaXplICovCisJCWlmIChzZXR1cF90cmFuc2ZlcikKKwkJCXNldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisKIAkJLyogbm9ybWFsbHkgZGVhY3RpdmF0ZSBjaGlwc2VsZWN0IC4uLiB1bmxlc3Mgbm8gZXJyb3IgYW5kCiAJCSAqIGNzX2NoYW5nZSBoYXMgaGludGVkIHRoYXQgdGhlIG5leHQgbWVzc2FnZSB3aWxsIHByb2JhYmx5CiAJCSAqIGJlIGZvciB0aGlzIGNoaXAgdG9vLgpAQCAtMzQ4LDYgKzQwNCw3IEBACiB7CiAJc3RydWN0IHNwaV9iaXRiYW5nCSpiaXRiYW5nOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXN0YXR1cyA9IDA7CiAKIAltLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAltLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CkBAIC0zNTcsMTEgKzQxNCwxNSBAQAogCQlyZXR1cm4gLUVTSFVURE9XTjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRiYW5nLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmbS0+cXVldWUsICZiaXRiYW5nLT5xdWV1ZSk7Ci0JcXVldWVfd29yayhiaXRiYW5nLT53b3JrcXVldWUsICZiaXRiYW5nLT53b3JrKTsKKwlpZiAoIXNwaS0+bWF4X3NwZWVkX2h6KQorCQlzdGF0dXMgPSAtRU5FVERPV047CisJZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJm0tPnF1ZXVlLCAmYml0YmFuZy0+cXVldWUpOworCQlxdWV1ZV93b3JrKGJpdGJhbmctPndvcmtxdWV1ZSwgJmJpdGJhbmctPndvcmspOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRiYW5nLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX2JpdGJhbmdfdHJhbnNmZXIpOwogCkBAIC00MDYsNiArNDY3LDkgQEAKIAkJYml0YmFuZy0+dXNlX2RtYSA9IDA7CiAJCWJpdGJhbmctPnR4cnhfYnVmcyA9IHNwaV9iaXRiYW5nX2J1ZnM7CiAJCWlmICghYml0YmFuZy0+bWFzdGVyLT5zZXR1cCkgeworCQkJaWYgKCFiaXRiYW5nLT5zZXR1cF90cmFuc2ZlcikKKwkJCQliaXRiYW5nLT5zZXR1cF90cmFuc2ZlciA9CisJCQkJCSBzcGlfYml0YmFuZ19zZXR1cF90cmFuc2ZlcjsKIAkJCWJpdGJhbmctPm1hc3Rlci0+c2V0dXAgPSBzcGlfYml0YmFuZ19zZXR1cDsKIAkJCWJpdGJhbmctPm1hc3Rlci0+Y2xlYW51cCA9IHNwaV9iaXRiYW5nX2NsZWFudXA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9idXR0ZXJmbHkuYyBiL2RyaXZlcnMvc3BpL3NwaV9idXR0ZXJmbHkuYwppbmRleCBmZjllNWZhLi5hMDA2YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYnV0dGVyZmx5LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jCkBAIC0zMjEsNiArMzIxLDcgQEAKIAkgKiAoZmlybXdhcmUgcmVzZXRzIGF0NDUsIGFjdHMgYXMgc3BpIHNsYXZlKSBvciBuZWl0aGVyICh3ZSBpZ25vcmUKIAkgKiBib3RoLCBBVlIgdXNlcyBBVDQ1KS4gIEhlcmUgd2UgZXhwZWN0IGZpcm13YXJlIGZvciB0aGUgZmlyc3Qgb3B0aW9uLgogCSAqLworCiAJcHAtPmluZm9bMF0ubWF4X3NwZWVkX2h6ID0gMTUgKiAxMDAwICogMTAwMDsKIAlzdHJjcHkocHAtPmluZm9bMF0ubW9kYWxpYXMsICJtdGRfZGF0YWZsYXNoIik7CiAJcHAtPmluZm9bMF0ucGxhdGZvcm1fZGF0YSA9ICZmbGFzaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTJhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogTVBDODN4eCBTUEkgY29udHJvbGxlciBkcml2ZXIuCisgKgorICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBQb2x5Y29tLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBTUEkgQ29udHJvbGxlciByZWdpc3RlcnMgKi8KK3N0cnVjdCBtcGM4M3h4X3NwaV9yZWcgeworCXU4IHJlczFbMHgyMF07CisJX19iZTMyIG1vZGU7CisJX19iZTMyIGV2ZW50OworCV9fYmUzMiBtYXNrOworCV9fYmUzMiBjb21tYW5kOworCV9fYmUzMiB0cmFuc21pdDsKKwlfX2JlMzIgcmVjZWl2ZTsKK307CisKKy8qIFNQSSBDb250cm9sbGVyIG1vZGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJU1BNT0RFX0NJX0lOQUNUSVZFSElHSAkoMSA8PCAyOSkKKyNkZWZpbmUJU1BNT0RFX0NQX0JFR0lOX0VER0VDTEsJKDEgPDwgMjgpCisjZGVmaW5lCVNQTU9ERV9ESVYxNgkJKDEgPDwgMjcpCisjZGVmaW5lCVNQTU9ERV9SRVYJCSgxIDw8IDI2KQorI2RlZmluZQlTUE1PREVfTVMJCSgxIDw8IDI1KQorI2RlZmluZQlTUE1PREVfRU5BQkxFCQkoMSA8PCAyNCkKKyNkZWZpbmUJU1BNT0RFX0xFTih4KQkJKCh4KSA8PCAyMCkKKyNkZWZpbmUJU1BNT0RFX1BNKHgpCQkoKHgpIDw8IDE2KQorCisvKgorICogRGVmYXVsdCBmb3IgU1BJIE1vZGU6CisgKiAJU1BJIE1PREUgMCAoaW5hY3RpdmUgbG93LCBwaGFzZSBtaWRkbGUsIE1TQiwgOC1iaXQgbGVuZ3RoLCBzbG93IGNsaworICovCisjZGVmaW5lCVNQTU9ERV9JTklUX1ZBTCAoU1BNT0RFX0NJX0lOQUNUSVZFSElHSCB8IFNQTU9ERV9ESVYxNiB8IFNQTU9ERV9SRVYgfCBcCisJCQkgU1BNT0RFX01TIHwgU1BNT0RFX0xFTig3KSB8IFNQTU9ERV9QTSgweGYpKQorCisvKiBTUElFIHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZQlTUElFX05FCQkweDAwMDAwMjAwCS8qIE5vdCBlbXB0eSAqLworI2RlZmluZQlTUElFX05GCQkweDAwMDAwMTAwCS8qIE5vdCBmdWxsICovCisKKy8qIFNQSU0gcmVnaXN0ZXIgdmFsdWVzICovCisjZGVmaW5lCVNQSU1fTkUJCTB4MDAwMDAyMDAJLyogTm90IGVtcHR5ICovCisjZGVmaW5lCVNQSU1fTkYJCTB4MDAwMDAxMDAJLyogTm90IGZ1bGwgKi8KKworLyogU1BJIENvbnRyb2xsZXIgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhLiAqLworc3RydWN0IG1wYzgzeHhfc3BpIHsKKwkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLworCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisKKwlzdHJ1Y3QgbXBjODN4eF9zcGlfcmVnIF9faW9tZW0gKmJhc2U7CisKKwkvKiByeCAmIHR4IGJ1ZnMgZnJvbSB0aGUgc3BpX3RyYW5zZmVyICovCisJY29uc3Qgdm9pZCAqdHg7CisJdm9pZCAqcng7CisKKwkvKiBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBzaXplZCBidWZmZXJzICovCisJdm9pZCAoKmdldF9yeCkgKHUzMiByeF9kYXRhLCBzdHJ1Y3QgbXBjODN4eF9zcGkgKik7CisJdTMyKCpnZXRfdHgpIChzdHJ1Y3QgbXBjODN4eF9zcGkgKik7CisKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdTMyIGlycTsKKworCXVuc2lnbmVkIG5zZWNzOwkJLyogKGNsb2NrIGN5Y2xlIHRpbWUpLzIgKi8KKworCXUzMiBzeXNjbGs7CisJdm9pZCAoKmFjdGl2YXRlX2NzKSAodTggY3MsIHU4IHBvbGFyaXR5KTsKKwl2b2lkICgqZGVhY3RpdmF0ZV9jcykgKHU4IGNzLCB1OCBwb2xhcml0eSk7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXBjODN4eF9zcGlfd3JpdGVfcmVnKF9fYmUzMiBfX2lvbWVtICogcmVnLCB1MzIgdmFsKQoreworCW91dF9iZTMyKHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgbXBjODN4eF9zcGlfcmVhZF9yZWcoX19iZTMyIF9faW9tZW0gKiByZWcpCit7CisJcmV0dXJuIGluX2JlMzIocmVnKTsKK30KKworI2RlZmluZSBNUEM4M1hYX1NQSV9SWF9CVUYodHlwZSkgCQkJCQkgIFwKK3ZvaWQgbXBjODN4eF9zcGlfcnhfYnVmXyMjdHlwZSh1MzIgZGF0YSwgc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaSkgXAorewkJCQkJCQkJCSAgXAorCXR5cGUgKiByeCA9IG1wYzgzeHhfc3BpLT5yeDsJCQkJCSAgXAorCSpyeCsrID0gKHR5cGUpZGF0YTsJCQkJCQkgIFwKKwltcGM4M3h4X3NwaS0+cnggPSByeDsJCQkJCQkgIFwKK30KKworI2RlZmluZSBNUEM4M1hYX1NQSV9UWF9CVUYodHlwZSkJCQkJXAordTMyIG1wYzgzeHhfc3BpX3R4X2J1Zl8jI3R5cGUoc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaSkJXAorewkJCQkJCQkJXAorCXUzMiBkYXRhOwkJCQkJCVwKKwljb25zdCB0eXBlICogdHggPSBtcGM4M3h4X3NwaS0+dHg7CQkJXAorCWRhdGEgPSAqdHgrKzsJCQkJCQlcCisJbXBjODN4eF9zcGktPnR4ID0gdHg7CQkJCQlcCisJcmV0dXJuIGRhdGE7CQkJCQkJXAorfQorCitNUEM4M1hYX1NQSV9SWF9CVUYodTgpCitNUEM4M1hYX1NQSV9SWF9CVUYodTE2KQorTVBDODNYWF9TUElfUlhfQlVGKHUzMikKK01QQzgzWFhfU1BJX1RYX0JVRih1OCkKK01QQzgzWFhfU1BJX1RYX0JVRih1MTYpCitNUEM4M1hYX1NQSV9UWF9CVUYodTMyKQorCitzdGF0aWMgdm9pZCBtcGM4M3h4X3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpOworCXU4IHBvbCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDA7CisKKwltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKKwkJaWYgKG1wYzgzeHhfc3BpLT5kZWFjdGl2YXRlX2NzKQorCQkJbXBjODN4eF9zcGktPmRlYWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwgcG9sKTsKKwl9CisKKwlpZiAodmFsdWUgPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKKwkJdTMyIHJlZ3ZhbCA9IG1wYzgzeHhfc3BpX3JlYWRfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSk7CisJCXUzMiBsZW4gPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJCWlmIChsZW4gPT0gMzIpCisJCQlsZW4gPSAwOworCQllbHNlCisJCQlsZW4gPSBsZW4gLSAxOworCisJCS8qIG1hc2sgb3V0IGJpdHMgd2UgYXJlIGdvaW5nIHRvIHNldCAqLworCQlyZWd2YWwgJj0gfjB4MzhmZjAwMDA7CisKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQorCQkJcmVndmFsIHw9IFNQTU9ERV9DUF9CRUdJTl9FREdFQ0xLOworCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCQlyZWd2YWwgfD0gU1BNT0RFX0NJX0lOQUNUSVZFSElHSDsKKworCQlyZWd2YWwgfD0gU1BNT0RFX0xFTihsZW4pOworCisJCWlmICgobXBjODN4eF9zcGktPnN5c2NsayAvIHNwaS0+bWF4X3NwZWVkX2h6KSA+PSA2NCkgeworCQkJdTggcG0gPSBtcGM4M3h4X3NwaS0+c3lzY2xrIC8gKHNwaS0+bWF4X3NwZWVkX2h6ICogNjQpOworCQkJcmVndmFsIHw9IFNQTU9ERV9QTShwbSkgfCBTUE1PREVfRElWMTY7CisJCX0gZWxzZSB7CisJCQl1OCBwbSA9IG1wYzgzeHhfc3BpLT5zeXNjbGsgLyAoc3BpLT5tYXhfc3BlZWRfaHogKiA0KTsKKwkJCXJlZ3ZhbCB8PSBTUE1PREVfUE0ocG0pOworCQl9CisKKwkJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSwgcmVndmFsKTsKKwkJaWYgKG1wYzgzeHhfc3BpLT5hY3RpdmF0ZV9jcykKKwkJCW1wYzgzeHhfc3BpLT5hY3RpdmF0ZV9jcyhzcGktPmNoaXBfc2VsZWN0LCBwb2wpOworCX0KK30KKworc3RhdGljCitpbnQgbXBjODN4eF9zcGlfc2V0dXBfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpOworCXUzMiByZWd2YWw7CisJdTggYml0c19wZXJfd29yZDsKKwl1MzIgaHo7CisKKwltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJaWYgKHQpIHsKKwkJYml0c19wZXJfd29yZCA9IHQtPmJpdHNfcGVyX3dvcmQ7CisJCWh6ID0gdC0+c3BlZWRfaHo7CisJfSBlbHNlIHsKKwkJYml0c19wZXJfd29yZCA9IDA7CisJCWh6ID0gMDsKKwl9CisKKwkvKiBzcGlfdHJhbnNmZXIgbGV2ZWwgY2FsbHMgdGhhdCB3b3JrIHBlci13b3JkICovCisJaWYgKCFiaXRzX3Blcl93b3JkKQorCQliaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOworCisJLyogTWFrZSBzdXJlIGl0cyBhIGJpdCB3aWR0aCB3ZSBzdXBwb3J0IFs0Li4xNiwgMzJdICovCisJaWYgKChiaXRzX3Blcl93b3JkIDwgNCkKKwkgICAgfHwgKChiaXRzX3Blcl93b3JkID4gMTYpICYmIChiaXRzX3Blcl93b3JkICE9IDMyKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJpdHNfcGVyX3dvcmQgPD0gOCkgeworCQltcGM4M3h4X3NwaS0+Z2V0X3J4ID0gbXBjODN4eF9zcGlfcnhfYnVmX3U4OworCQltcGM4M3h4X3NwaS0+Z2V0X3R4ID0gbXBjODN4eF9zcGlfdHhfYnVmX3U4OworCX0gZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAxNikgeworCQltcGM4M3h4X3NwaS0+Z2V0X3J4ID0gbXBjODN4eF9zcGlfcnhfYnVmX3UxNjsKKwkJbXBjODN4eF9zcGktPmdldF90eCA9IG1wYzgzeHhfc3BpX3R4X2J1Zl91MTY7CisJfSBlbHNlIGlmIChiaXRzX3Blcl93b3JkIDw9IDMyKSB7CisJCW1wYzgzeHhfc3BpLT5nZXRfcnggPSBtcGM4M3h4X3NwaV9yeF9idWZfdTMyOworCQltcGM4M3h4X3NwaS0+Z2V0X3R4ID0gbXBjODN4eF9zcGlfdHhfYnVmX3UzMjsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBuc2VjcyA9IChjbG9jayBwZXJpb2QpLzIgKi8KKwlpZiAoIWh6KQorCQloeiA9IHNwaS0+bWF4X3NwZWVkX2h6OworCW1wYzgzeHhfc3BpLT5uc2VjcyA9ICgxMDAwMDAwMDAwIC8gMikgLyBoejsKKwlpZiAobXBjODN4eF9zcGktPm5zZWNzID4gTUFYX1VERUxBWV9NUyAqIDEwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJpdHNfcGVyX3dvcmQgPT0gMzIpCisJCWJpdHNfcGVyX3dvcmQgPSAwOworCWVsc2UKKwkJYml0c19wZXJfd29yZCA9IGJpdHNfcGVyX3dvcmQgLSAxOworCisJcmVndmFsID0gbXBjODN4eF9zcGlfcmVhZF9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlKTsKKworCS8qIE1hc2sgb3V0IGJpdHNfcGVyX3dvcmRndGggKi8KKwlyZWd2YWwgJj0gMHhmZjBmZmZmZjsKKwlyZWd2YWwgfD0gU1BNT0RFX0xFTihiaXRzX3Blcl93b3JkKTsKKworCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPm1vZGUsIHJlZ3ZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM4M3h4X3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzcGlfYml0YmFuZyAqYml0YmFuZzsKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpOworCWludCByZXR2YWw7CisKKwlpZiAoIXNwaS0+bWF4X3NwZWVkX2h6KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJpdGJhbmcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCisJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisKKwlyZXR2YWwgPSBtcGM4M3h4X3NwaV9zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZGV2X2RiZygmc3BpLT5kZXYsICIlcywgbW9kZSAlZCwgJXUgYml0cy93LCAldSBuc2VjXG4iLAorCQlfX0ZVTkNUSU9OX18sIHNwaS0+bW9kZSAmIChTUElfQ1BPTCB8IFNQSV9DUEhBKSwKKwkJc3BpLT5iaXRzX3Blcl93b3JkLCAyICogbXBjODN4eF9zcGktPm5zZWNzKTsKKworCS8qIE5PVEUgd2UgX25lZWRfIHRvIGNhbGwgY2hpcHNlbGVjdCgpIGVhcmx5LCBpZGVhbGx5IHdpdGggYWRhcHRlcgorCSAqIHNldHVwLCB1bmxlc3MgdGhlIGhhcmR3YXJlIGRlZmF1bHRzIGNvb3BlcmF0ZSB0byBhdm9pZCBjb25mdXNpb24KKwkgKiBiZXR3ZWVuIG5vcm1hbCAoYWN0aXZlIGxvdykgYW5kIGludmVydGVkIGNoaXBzZWxlY3RzLgorCSAqLworCisJLyogZGVzZWxlY3QgY2hpcCAobG93IG9yIGhpZ2gpICovCisJc3Bpbl9sb2NrKCZiaXRiYW5nLT5sb2NrKTsKKwlpZiAoIWJpdGJhbmctPmJ1c3kpIHsKKwkJYml0YmFuZy0+Y2hpcHNlbGVjdChzcGksIEJJVEJBTkdfQ1NfSU5BQ1RJVkUpOworCQluZGVsYXkobXBjODN4eF9zcGktPm5zZWNzKTsKKwl9CisJc3Bpbl91bmxvY2soJmJpdGJhbmctPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9zcGlfYnVmcyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGk7CisJdTMyIHdvcmQ7CisKKwltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJbXBjODN4eF9zcGktPnR4ID0gdC0+dHhfYnVmOworCW1wYzgzeHhfc3BpLT5yeCA9IHQtPnJ4X2J1ZjsKKwltcGM4M3h4X3NwaS0+Y291bnQgPSB0LT5sZW47CisJSU5JVF9DT01QTEVUSU9OKG1wYzgzeHhfc3BpLT5kb25lKTsKKworCS8qIGVuYWJsZSByeCBpbnRzICovCisJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bWFzaywgU1BJTV9ORSk7CisKKwkvKiB0cmFuc21pdCB3b3JkICovCisJd29yZCA9IG1wYzgzeHhfc3BpLT5nZXRfdHgobXBjODN4eF9zcGkpOworCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPnRyYW5zbWl0LCB3b3JkKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1wYzgzeHhfc3BpLT5kb25lKTsKKworCS8qIGRpc2FibGUgcnggaW50cyAqLworCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPm1hc2ssIDApOworCisJcmV0dXJuIHQtPmxlbiAtIG1wYzgzeHhfc3BpLT5jb3VudDsKK30KKworaXJxcmV0dXJuX3QgbXBjODN4eF9zcGlfaXJxKHMzMiBpcnEsIHZvaWQgKmNvbnRleHRfZGF0YSwKKwkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqIHB0cmVncykKK3sKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpID0gY29udGV4dF9kYXRhOworCXUzMiBldmVudDsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKworCS8qIEdldCBpbnRlcnJ1cHQgZXZlbnRzKHR4L3J4KSAqLworCWV2ZW50ID0gbXBjODN4eF9zcGlfcmVhZF9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5ldmVudCk7CisKKwkvKiBXZSBuZWVkIGhhbmRsZSBSWCBmaXJzdCAqLworCWlmIChldmVudCAmIFNQSUVfTkUpIHsKKwkJdTMyIHJ4X2RhdGEgPSBtcGM4M3h4X3NwaV9yZWFkX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPnJlY2VpdmUpOworCisJCWlmIChtcGM4M3h4X3NwaS0+cngpCisJCQltcGM4M3h4X3NwaS0+Z2V0X3J4KHJ4X2RhdGEsIG1wYzgzeHhfc3BpKTsKKworCQlyZXQgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoKGV2ZW50ICYgU1BJRV9ORikgPT0gMCkKKwkJLyogc3BpbiB1bnRpbCBUWCBpcyBkb25lICovCisJCXdoaWxlICgoKGV2ZW50ID0KKwkJCSBtcGM4M3h4X3NwaV9yZWFkX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPmV2ZW50KSkgJgorCQkJCQkJU1BJRV9ORikgPT0gMCkKKwkJCSBjcHVfcmVsYXgoKTsKKworCW1wYzgzeHhfc3BpLT5jb3VudCAtPSAxOworCWlmIChtcGM4M3h4X3NwaS0+Y291bnQpIHsKKwkJaWYgKG1wYzgzeHhfc3BpLT50eCkgeworCQkJdTMyIHdvcmQgPSBtcGM4M3h4X3NwaS0+Z2V0X3R4KG1wYzgzeHhfc3BpKTsKKwkJCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPnRyYW5zbWl0LAorCQkJCQkgICAgICB3b3JkKTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbXBsZXRlKCZtcGM4M3h4X3NwaS0+ZG9uZSk7CisJfQorCisJLyogQ2xlYXIgdGhlIGV2ZW50cyAqLworCW1wYzgzeHhfc3BpX3dyaXRlX3JlZygmbXBjODN4eF9zcGktPmJhc2UtPmV2ZW50LCBldmVudCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpOworCXN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwl1MzIgcmVndmFsOworCWludCByZXQgPSAwOworCisJLyogR2V0IHJlc291cmNlcyhtZW1vcnksIElSUSkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgKi8KKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtcGM4M3h4X3NwaSkpOworCisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgbWFzdGVyKTsKKwlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfbWFzdGVyOworCX0KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfbWFzdGVyOworCX0KKworCW1wYzgzeHhfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCW1wYzgzeHhfc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJbXBjODN4eF9zcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IG1wYzgzeHhfc3BpX2NoaXBzZWxlY3Q7CisJbXBjODN4eF9zcGktPmJpdGJhbmcuc2V0dXBfdHJhbnNmZXIgPSBtcGM4M3h4X3NwaV9zZXR1cF90cmFuc2ZlcjsKKwltcGM4M3h4X3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBtcGM4M3h4X3NwaV9idWZzOworCW1wYzgzeHhfc3BpLT5zeXNjbGsgPSBwZGF0YS0+c3lzY2xrOworCW1wYzgzeHhfc3BpLT5hY3RpdmF0ZV9jcyA9IHBkYXRhLT5hY3RpdmF0ZV9jczsKKwltcGM4M3h4X3NwaS0+ZGVhY3RpdmF0ZV9jcyA9IHBkYXRhLT5kZWFjdGl2YXRlX2NzOworCW1wYzgzeHhfc3BpLT5nZXRfcnggPSBtcGM4M3h4X3NwaV9yeF9idWZfdTg7CisJbXBjODN4eF9zcGktPmdldF90eCA9IG1wYzgzeHhfc3BpX3R4X2J1Zl91ODsKKworCW1wYzgzeHhfc3BpLT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBtcGM4M3h4X3NwaV9zZXR1cDsKKwlpbml0X2NvbXBsZXRpb24oJm1wYzgzeHhfc3BpLT5kb25lKTsKKworCW1wYzgzeHhfc3BpLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlpZiAobXBjODN4eF9zcGktPmJhc2UgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHB1dF9tYXN0ZXI7CisJfQorCisJbXBjODN4eF9zcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKworCWlmIChtcGM4M3h4X3NwaS0+aXJxIDwgMCkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gdW5tYXBfaW87CisJfQorCisJLyogUmVnaXN0ZXIgZm9yIFNQSSBJbnRlcnJ1cHQgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShtcGM4M3h4X3NwaS0+aXJxLCBtcGM4M3h4X3NwaV9pcnEsCisJCQkgIDAsICJtcGM4M3h4X3NwaSIsIG1wYzgzeHhfc3BpKTsKKworCWlmIChyZXQgIT0gMCkKKwkJZ290byB1bm1hcF9pbzsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkYXRhLT5idXNfbnVtOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bWF4X2NoaXBzZWxlY3Q7CisKKwkvKiBTUEkgY29udHJvbGxlciBpbml0aWFsaXphdGlvbnMgKi8KKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlLCAwKTsKKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5tYXNrLCAwKTsKKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5jb21tYW5kLCAwKTsKKwltcGM4M3h4X3NwaV93cml0ZV9yZWcoJm1wYzgzeHhfc3BpLT5iYXNlLT5ldmVudCwgMHhmZmZmZmZmZik7CisKKwkvKiBFbmFibGUgU1BJIGludGVyZmFjZSAqLworCXJlZ3ZhbCA9IHBkYXRhLT5pbml0aWFsX3NwbW9kZSB8IFNQTU9ERV9JTklUX1ZBTCB8IFNQTU9ERV9FTkFCTEU7CisJbXBjODN4eF9zcGlfd3JpdGVfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSwgcmVndmFsKTsKKworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZtcGM4M3h4X3NwaS0+Yml0YmFuZyk7CisKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZnJlZV9pcnE7CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICIlczogTVBDODN4eCBTUEkgQ29udHJvbGxlciBkcml2ZXIgYXQgMHglcCAoaXJxID0gJWQpXG4iLAorCSAgICAgICBkZXYtPmRldi5idXNfaWQsIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKKworCXJldHVybiByZXQ7CisKK2ZyZWVfaXJxOgorCWZyZWVfaXJxKG1wYzgzeHhfc3BpLT5pcnEsIG1wYzgzeHhfc3BpKTsKK3VubWFwX2lvOgorCWlvdW5tYXAobXBjODN4eF9zcGktPmJhc2UpOworcHV0X21hc3RlcjoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworZnJlZV9tYXN0ZXI6CisJa2ZyZWUobWFzdGVyKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGM4M3h4X3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGk7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKworCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcGlfYml0YmFuZ19zdG9wKCZtcGM4M3h4X3NwaS0+Yml0YmFuZyk7CisJZnJlZV9pcnEobXBjODN4eF9zcGktPmlycSwgbXBjODN4eF9zcGkpOworCWlvdW5tYXAobXBjODN4eF9zcGktPmJhc2UpOworCXNwaV9tYXN0ZXJfcHV0KG1wYzgzeHhfc3BpLT5iaXRiYW5nLm1hc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBjODN4eF9zcGlfZHJpdmVyID0geworCS5wcm9iZSA9IG1wYzgzeHhfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtcGM4M3h4X3NwaV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gIm1wYzgzeHhfc3BpIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjODN4eF9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wYzgzeHhfc3BpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtcGM4M3h4X3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzgzeHhfc3BpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1wYzgzeHhfc3BpX2luaXQpOworbW9kdWxlX2V4aXQobXBjODN4eF9zcGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkt1bWFyIEdhbGEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2ltcGxlIE1QQzgzeHggU1BJIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjMTQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKQEAgLTAsMCArMSw0NTMgQEAKKy8qIGxpbnV4L2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQmVuIERvb2tzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisKKy8vI2RlZmluZSBERUJVRworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcGkuaD4KKworc3RydWN0IHMzYzI0eHhfc3BpIHsKKwkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLworCXN0cnVjdCBzcGlfYml0YmFuZwkgYml0YmFuZzsKKwlzdHJ1Y3QgY29tcGxldGlvbgkgZG9uZTsKKworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJaW50CQkJIGlycTsKKwlpbnQJCQkgbGVuOworCWludAkJCSBjb3VudDsKKworCS8qIGRhdGEgYnVmZmVycyAqLworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKnR4OworCXVuc2lnbmVkIGNoYXIJCSpyeDsKKworCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IHJlc291cmNlCQkqaW9hcmVhOworCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXI7CisJc3RydWN0IHNwaV9kZXZpY2UJKmN1cmRldjsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpwZGF0YTsKK307CisKKyNkZWZpbmUgU1BDT05fREVGQVVMVCAoUzNDMjQxMF9TUENPTl9NU1RSIHwgUzNDMjQxMF9TUENPTl9TTU9EX0lOVCkKKyNkZWZpbmUgU1BQSU5fREVGQVVMVCAoUzNDMjQxMF9TUFBJTl9LRUVQKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHh4X3NwaSAqdG9faHcoc3RydWN0IHNwaV9kZXZpY2UgKnNkZXYpCit7CisJcmV0dXJuIHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc2Rldi0+bWFzdGVyKTsKK30KKworc3RhdGljIHZvaWQgczNjMjR4eF9zcGlfY2hpcHNlbChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CisJdW5zaWduZWQgaW50IGNzcG9sID0gc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMDsKKwl1bnNpZ25lZCBpbnQgc3Bjb247CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSBCSVRCQU5HX0NTX0lOQUNUSVZFOgorCQlpZiAoaHctPnBkYXRhLT5zZXRfY3MpCisJCQlody0+cGRhdGEtPnNldF9jcyhody0+cGRhdGEsIHZhbHVlLCBjc3BvbCk7CisJCWVsc2UKKwkJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oaHctPnBkYXRhLT5waW5fY3MsIGNzcG9sIF4gMSk7CisJCWJyZWFrOworCisJY2FzZSBCSVRCQU5HX0NTX0FDVElWRToKKwkJc3Bjb24gPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BDT04pOworCisJCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKKwkJCXNwY29uIHw9IFMzQzI0MTBfU1BDT05fQ1BIQV9GTVRCOworCQllbHNlCisJCQlzcGNvbiAmPSB+UzNDMjQxMF9TUENPTl9DUEhBX0ZNVEI7CisKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUE9MX0hJR0g7CisJCWVsc2UKKwkJCXNwY29uICY9IH5TM0MyNDEwX1NQQ09OX0NQT0xfSElHSDsKKworCQlzcGNvbiB8PSBTM0MyNDEwX1NQQ09OX0VOU0NLOworCisJCS8qIHdyaXRlIG5ldyBjb25maWdyYXRpb24gKi8KKworCQl3cml0ZWIoc3Bjb24sIGh3LT5yZWdzICsgUzNDMjQxMF9TUENPTik7CisKKwkJaWYgKGh3LT5wZGF0YS0+c2V0X2NzKQorCQkJaHctPnBkYXRhLT5zZXRfY3MoaHctPnBkYXRhLCB2YWx1ZSwgY3Nwb2wpOworCQllbHNlCisJCQlzM2MyNDEwX2dwaW9fc2V0cGluKGh3LT5wZGF0YS0+cGluX2NzLCBjc3BvbCk7CisKKwkJYnJlYWs7CisKKwl9Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfc2V0dXB4ZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CisJdW5zaWduZWQgaW50IGJwdzsKKwl1bnNpZ25lZCBpbnQgaHo7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWJwdyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOworCWh6ICA9IHQgPyB0LT5zcGVlZF9oeiA6IHNwaS0+bWF4X3NwZWVkX2h6OworCisJaWYgKGJwdyAhPSA4KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiaW52YWxpZCBiaXRzLXBlci13b3JkICglZClcbiIsIGJwdyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRpdiA9IGNsa19nZXRfcmF0ZShody0+Y2xrKSAvIGh6OworCisJLyogaXMgY2xrID0gcGNsayAvICgyICogKHByZSsxKSksIG9yIGlzIGl0CisJICogICAgY2xrID0gKHBjbGsgKiAyKSAvICggcHJlICsgMSkgKi8KKworCWRpdiA9IChkaXYgLyAyKSAtIDE7CisKKwlpZiAoZGl2IDwgMCkKKwkJZGl2ID0gMTsKKworCWlmIChkaXYgPiAyNTUpCisJCWRpdiA9IDI1NTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LCAic2V0dGluZyBwcmUtc2NhbGVyIHRvICVkIChoeiAlZClcbiIsIGRpdiwgaHopOworCXdyaXRlYihkaXYsIGh3LT5yZWdzICsgUzNDMjQxMF9TUFBSRSk7CisKKwlzcGluX2xvY2soJmh3LT5iaXRiYW5nLmxvY2spOworCWlmICghaHctPmJpdGJhbmcuYnVzeSkgeworCQlody0+Yml0YmFuZy5jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7CisJCS8qIG5lZWQgdG8gbmRlbGF5IGZvciAwLjUgY2xvY2t0aWNrID8gKi8KKwl9CisJc3Bpbl91bmxvY2soJmh3LT5iaXRiYW5nLmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCisJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisKKwlpZiAoKHNwaS0+bW9kZSAmIFNQSV9MU0JfRklSU1QpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gczNjMjR4eF9zcGlfc2V0dXB4ZmVyKHNwaSwgTlVMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJzZXR1cHhmZXIgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2RiZygmc3BpLT5kZXYsICIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwKKwkJX19GVU5DVElPTl9fLCBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwKKwkJc3BpLT5tYXhfc3BlZWRfaHopOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3X3R4Ynl0ZShzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3LCBpbnQgY291bnQpCit7CisJcmV0dXJuIGh3LT50eCA/IGh3LT50eFtjb3VudF0gOiAweGZmOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3R4cngoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LCAidHhyeDogdHggJXAsIHJ4ICVwLCBsZW4gJWRcbiIsCisJCXQtPnR4X2J1ZiwgdC0+cnhfYnVmLCB0LT5sZW4pOworCisJaHctPnR4ID0gdC0+dHhfYnVmOworCWh3LT5yeCA9IHQtPnJ4X2J1ZjsKKwlody0+bGVuID0gdC0+bGVuOworCWh3LT5jb3VudCA9IDA7CisKKwkvKiBzZW5kIHRoZSBmaXJzdCBieXRlICovCisJd3JpdGViKGh3X3R4Ynl0ZShodywgMCksIGh3LT5yZWdzICsgUzNDMjQxMF9TUFREQVQpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3LT5kb25lKTsKKworCXJldHVybiBody0+Y291bnQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzM2MyNHh4X3NwaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gZGV2OworCXVuc2lnbmVkIGludCBzcHN0YSA9IHJlYWRiKGh3LT5yZWdzICsgUzNDMjQxMF9TUFNUQSk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gaHctPmNvdW50OworCisJaWYgKHNwc3RhICYgUzNDMjQxMF9TUFNUQV9EQ09MKSB7CisJCWRldl9kYmcoaHctPmRldiwgImRhdGEtY29sbGlzaW9uXG4iKTsKKwkJY29tcGxldGUoJmh3LT5kb25lKTsKKwkJZ290byBpcnFfZG9uZTsKKwl9CisKKwlpZiAoIShzcHN0YSAmIFMzQzI0MTBfU1BTVEFfUkVBRFkpKSB7CisJCWRldl9kYmcoaHctPmRldiwgInNwaSBub3QgcmVhZHkgZm9yIHR4P1xuIik7CisJCWNvbXBsZXRlKCZody0+ZG9uZSk7CisJCWdvdG8gaXJxX2RvbmU7CisJfQorCisJaHctPmNvdW50Kys7CisKKwlpZiAoaHctPnJ4KQorCQlody0+cnhbY291bnRdID0gcmVhZGIoaHctPnJlZ3MgKyBTM0MyNDEwX1NQUkRBVCk7CisKKwljb3VudCsrOworCisJaWYgKGNvdW50IDwgaHctPmxlbikKKwkJd3JpdGViKGh3X3R4Ynl0ZShodywgY291bnQpLCBody0+cmVncyArIFMzQzI0MTBfU1BUREFUKTsKKwllbHNlCisJCWNvbXBsZXRlKCZody0+ZG9uZSk7CisKKyBpcnFfZG9uZToKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3OworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHNwaV9ib2FyZF9pbmZvICpiaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X3NwaSkpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBtZW1vcnkgZm9yIHNwaV9tYXN0ZXJcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9ub21lbTsKKwl9CisKKwlodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwltZW1zZXQoaHcsIDAsIHNpemVvZihzdHJ1Y3QgczNjMjR4eF9zcGkpKTsKKworCWh3LT5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCWh3LT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWh3LT5kZXYgPSAmcGRldi0+ZGV2OworCisJaWYgKGh3LT5wZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9ub19wZGF0YTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisJaW5pdF9jb21wbGV0aW9uKCZody0+ZG9uZSk7CisKKwkvKiBzZXR1cCB0aGUgc3RhdGUgZm9yIHRoZSBiaXRiYW5nIGRyaXZlciAqLworCisJaHctPmJpdGJhbmcubWFzdGVyICAgICAgICAgPSBody0+bWFzdGVyOworCWh3LT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gczNjMjR4eF9zcGlfc2V0dXB4ZmVyOworCWh3LT5iaXRiYW5nLmNoaXBzZWxlY3QgICAgID0gczNjMjR4eF9zcGlfY2hpcHNlbDsKKwlody0+Yml0YmFuZy50eHJ4X2J1ZnMgICAgICA9IHMzYzI0eHhfc3BpX3R4cng7CisJaHctPmJpdGJhbmcubWFzdGVyLT5zZXR1cCAgPSBzM2MyNHh4X3NwaV9zZXR1cDsKKworCWRldl9kYmcoaHctPmRldiwgImJpdGJhbmcgYXQgJXBcbiIsICZody0+Yml0YmFuZyk7CisKKwkvKiBmaW5kIGFuZCBtYXAgb3VyIHJlc291cmNlcyAqLworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBJT1JFU09VUkNFX01FTVxuIik7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX25vX2lvcmVzOworCX0KKworCWh3LT5pb2FyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMSwKKwkJCQkJcGRldi0+bmFtZSk7CisKKwlpZiAoaHctPmlvYXJlYSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXNlcnZlIHJlZ2lvblxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfbm9faW9yZXM7CisJfQorCisJaHctPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzEpOworCWlmIChody0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgSU9cbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX25vX2lvbWFwOworCX0KKworCWh3LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChody0+aXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgc3BlY2lmaWVkXG4iKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfbm9faXJxOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKGh3LT5pcnEsIHMzYzI0eHhfc3BpX2lycSwgMCwgcGRldi0+bmFtZSwgaHcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGNsYWltIElSUVxuIik7CisJCWdvdG8gZXJyX25vX2lycTsKKwl9CisKKwlody0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic3BpIik7CisJaWYgKElTX0VSUihody0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBjbG9jayBmb3IgZGV2aWNlXG4iKTsKKwkJZXJyID0gUFRSX0VSUihody0+Y2xrKTsKKwkJZ290byBlcnJfbm9fY2xrOworCX0KKworCS8qIGZvciB0aGUgbW9tZW50LCBwZXJtYW5lbnRseSBlbmFibGUgdGhlIGNsb2NrICovCisKKwljbGtfZW5hYmxlKGh3LT5jbGspOworCisJLyogcHJvZ3JhbSBkZWZhdWx0cyBpbnRvIHRoZSByZWdpc3RlcnMgKi8KKworCXdyaXRlYigweGZmLCBody0+cmVncyArIFMzQzI0MTBfU1BQUkUpOworCXdyaXRlYihTUFBJTl9ERUZBVUxULCBody0+cmVncyArIFMzQzI0MTBfU1BQSU4pOworCXdyaXRlYihTUENPTl9ERUZBVUxULCBody0+cmVncyArIFMzQzI0MTBfU1BDT04pOworCisJLyogc2V0dXAgYW55IGdwaW8gd2UgY2FuICovCisKKwlpZiAoIWh3LT5wZGF0YS0+c2V0X2NzKSB7CisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oaHctPnBkYXRhLT5waW5fY3MsIDEpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKGh3LT5wZGF0YS0+cGluX2NzLCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKwl9CisKKwkvKiByZWdpc3RlciBvdXIgc3BpIGNvbnRyb2xsZXIgKi8KKworCWVyciA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZody0+Yml0YmFuZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCX0KKworCWRldl9kYmcoaHctPmRldiwgInNodXRkb3duPSVkXG4iLCBody0+Yml0YmFuZy5zaHV0ZG93bik7CisKKwkvKiByZWdpc3RlciBhbGwgdGhlIGRldmljZXMgYXNzb2NpYXRlZCAqLworCisJYmkgPSAmaHctPnBkYXRhLT5ib2FyZF9pbmZvWzBdOworCWZvciAoaSA9IDA7IGkgPCBody0+cGRhdGEtPmJvYXJkX3NpemU7IGkrKywgYmkrKykgeworCQlkZXZfaW5mbyhody0+ZGV2LCAicmVnaXN0ZXJpbmcgJXNcbiIsIGJpLT5tb2RhbGlhcyk7CisKKwkJYmktPmNvbnRyb2xsZXJfZGF0YSA9IGh3OworCQlzcGlfbmV3X2RldmljZShtYXN0ZXIsIGJpKTsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9yZWdpc3RlcjoKKwljbGtfZGlzYWJsZShody0+Y2xrKTsKKwljbGtfcHV0KGh3LT5jbGspOworCisgZXJyX25vX2NsazoKKwlmcmVlX2lycShody0+aXJxLCBodyk7CisKKyBlcnJfbm9faXJxOgorCWlvdW5tYXAoaHctPnJlZ3MpOworCisgZXJyX25vX2lvbWFwOgorCXJlbGVhc2VfcmVzb3VyY2UoaHctPmlvYXJlYSk7CisJa2ZyZWUoaHctPmlvYXJlYSk7CisKKyBlcnJfbm9faW9yZXM6CisgZXJyX25vX3BkYXRhOgorCXNwaV9tYXN0ZXJfcHV0KGh3LT5tYXN0ZXIpOzsKKworIGVycl9ub21lbToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKGh3LT5tYXN0ZXIpOworCisJY2xrX2Rpc2FibGUoaHctPmNsayk7CisJY2xrX3B1dChody0+Y2xrKTsKKworCWZyZWVfaXJxKGh3LT5pcnEsIGh3KTsKKwlpb3VubWFwKGh3LT5yZWdzKTsKKworCXJlbGVhc2VfcmVzb3VyY2UoaHctPmlvYXJlYSk7CisJa2ZyZWUoaHctPmlvYXJlYSk7CisKKwlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTsKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19kaXNhYmxlKGh3LT5jbGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19lbmFibGUoaHctPmNsayk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0eHhfc3BpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNHh4X3NwaV9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNHh4X3NwaWRydiA9IHsKKwkucHJvYmUJCT0gczNjMjR4eF9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBzM2MyNHh4X3NwaV9yZW1vdmUsCisJLnN1c3BlbmQJPSBzM2MyNHh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9zcGlfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLXNwaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNHh4X3NwaV9pbml0KHZvaWQpCit7CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0eHhfc3BpZHJ2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHMzYzI0eHhfc3BpX2V4aXQodm9pZCkKK3sKKyAgICAgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0eHhfc3BpZHJ2KTsKK30KKworbW9kdWxlX2luaXQoczNjMjR4eF9zcGlfaW5pdCk7Cittb2R1bGVfZXhpdChzM2MyNHh4X3NwaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MyNFhYIFNQSSBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9ncGlvLmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjZGNlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYwpAQCAtMCwwICsxLDE4OCBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEJlbiBEb29rcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIFMzQzI0WFggR1BJTyBiYXNlZCBTUEkgZHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NwaS1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworc3RydWN0IHMzYzI0MTBfc3BpZ3BpbyB7CisJc3RydWN0IHNwaV9iaXRiYW5nCQkgYml0YmFuZzsKKworCXN0cnVjdCBzM2MyNDEwX3NwaWdwaW9faW5mbwkqaW5mbzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqZGV2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICpzcGlkZXZfdG9fc2coc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlyZXR1cm4gc3BpLT5jb250cm9sbGVyX2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRzY2soc3RydWN0IHNwaV9kZXZpY2UgKmRldiwgaW50IG9uKQoreworCXN0cnVjdCBzM2MyNDEwX3NwaWdwaW8gKnNnID0gc3BpZGV2X3RvX3NnKGRldik7CisJczNjMjQxMF9ncGlvX3NldHBpbihzZy0+aW5mby0+cGluX2Nsaywgb24gPyAxIDogMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRtb3NpKHN0cnVjdCBzcGlfZGV2aWNlICpkZXYsIGludCBvbikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICpzZyA9IHNwaWRldl90b19zZyhkZXYpOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oc2ctPmluZm8tPnBpbl9tb3NpLCBvbiA/IDEgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ2V0bWlzbyhzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNDEwX3NwaWdwaW8gKnNnID0gc3BpZGV2X3RvX3NnKGRldik7CisJcmV0dXJuIHMzYzI0MTBfZ3Bpb19nZXRwaW4oc2ctPmluZm8tPnBpbl9taXNvKSA/IDEgOiAwOworfQorCisjZGVmaW5lIHNwaWRlbGF5KHgpIG5kZWxheSh4KQorCisjZGVmaW5lCUVYUEFORF9CSVRCQU5HX1RYUlgKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKworCitzdGF0aWMgdTMyIHMzYzI0MTBfc3BpZ3Bpb190eHJ4X21vZGUwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJICAgICAgdW5zaWduZWQgbnNlY3MsIHUzMiB3b3JkLCB1OCBiaXRzKQoreworCXJldHVybiBiaXRiYW5nX3R4cnhfYmVfY3BoYTAoc3BpLCBuc2VjcywgMCwgd29yZCwgYml0cyk7Cit9CisKK3N0YXRpYyB1MzIgczNjMjQxMF9zcGlncGlvX3R4cnhfbW9kZTEoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgICAgICB1bnNpZ25lZCBuc2VjcywgdTMyIHdvcmQsIHU4IGJpdHMpCit7CisJcmV0dXJuIGJpdGJhbmdfdHhyeF9iZV9jcGhhMShzcGksIG5zZWNzLCAwLCB3b3JkLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMF9zcGlncGlvX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKmRldiwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzM2MyNDEwX3NwaWdwaW8gKnNnID0gc3BpZGV2X3RvX3NnKGRldik7CisKKwlpZiAoc2ctPmluZm8gJiYgc2ctPmluZm8tPmNoaXBfc2VsZWN0KQorCQkoc2ctPmluZm8tPmNoaXBfc2VsZWN0KShzZy0+aW5mbywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHMzYzI0MTBfc3BpZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIJKm1hc3RlcjsKKwlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICAqc3A7CisJaW50IHJldDsKKwlpbnQgaTsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHMzYzI0MTBfc3BpZ3BpbykpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBzcGkgbWFzdGVyXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJc3AgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNwKTsKKworCS8qIGNvcHkgaW4gdGhlIHBsa2F0Zm9ybSBkYXRhICovCisJc3AtPmluZm8gPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJLyogc2V0dXAgc3BpIGJpdGJhbmcgYWRhcHRvciAqLworCXNwLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJc3AtPmJpdGJhbmcuY2hpcHNlbGVjdCA9IHMzYzI0MTBfc3BpZ3Bpb19jaGlwc2VsZWN0OworCisJc3AtPmJpdGJhbmcudHhyeF93b3JkW1NQSV9NT0RFXzBdID0gczNjMjQxMF9zcGlncGlvX3R4cnhfbW9kZTA7CisJc3AtPmJpdGJhbmcudHhyeF93b3JkW1NQSV9NT0RFXzFdID0gczNjMjQxMF9zcGlncGlvX3R4cnhfbW9kZTE7CisKKwkvKiBzZXQgc3RhdGUgb2Ygc3BpIHBpbnMgKi8KKwlzM2MyNDEwX2dwaW9fc2V0cGluKHNwLT5pbmZvLT5waW5fY2xrLCAwKTsKKwlzM2MyNDEwX2dwaW9fc2V0cGluKHNwLT5pbmZvLT5waW5fbW9zaSwgMCk7CisKKwlzM2MyNDEwX2dwaW9fY2ZncGluKHNwLT5pbmZvLT5waW5fY2xrLCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKHNwLT5pbmZvLT5waW5fbW9zaSwgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihzcC0+aW5mby0+cGluX21pc28sIFMzQzI0MTBfR1BJT19JTlBVVCk7CisKKwlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmc3AtPmJpdGJhbmcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX25vX2JpdGJhbmc7CisKKwkvKiByZWdpc3RlciB0aGUgY2hpcHMgdG8gZ28gd2l0aCB0aGUgYm9hcmQgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzcC0+aW5mby0+Ym9hcmRfc2l6ZTsgaSsrKSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyaW5nICVwOiAlc1xuIiwKKwkJCSAmc3AtPmluZm8tPmJvYXJkX2luZm9baV0sCisJCQkgc3AtPmluZm8tPmJvYXJkX2luZm9baV0ubW9kYWxpYXMpOworCisJCXNwLT5pbmZvLT5ib2FyZF9pbmZvW2ldLmNvbnRyb2xsZXJfZGF0YSA9IHNwOworCQlzcGlfbmV3X2RldmljZShtYXN0ZXIsIHNwLT5pbmZvLT5ib2FyZF9pbmZvICsgaSk7CisJfQorCisJcmV0dXJuIDA7CisKKyBlcnJfbm9fYml0YmFuZzoKKwlzcGlfbWFzdGVyX3B1dChzcC0+Yml0YmFuZy5tYXN0ZXIpOworIGVycjoKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbnQgczNjMjQxMF9zcGlncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHMzYzI0MTBfc3BpZ3BpbyAqc3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3BpX2JpdGJhbmdfc3RvcCgmc3AtPmJpdGJhbmcpOworCXNwaV9tYXN0ZXJfcHV0KHNwLT5iaXRiYW5nLm1hc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworLyogYWxsIGdwaW8gc2hvdWxkIGJlIGhlbGQgb3ZlciBzdXNwZW5kL3Jlc3VtZSwgc28gd2Ugc2hvdWxkCisgKiBub3QgbmVlZCB0byBkZWFsIHdpdGggdGhpcworKi8KKworI2RlZmluZSBzM2MyNDEwX3NwaWdwaW9fc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0MTBfc3BpZ3Bpb19yZXN1bWUgTlVMTAorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTBfc3BpZ3Bpb19kcnYgPSB7CisJLnByb2JlCQk9IHMzYzI0MTBfc3BpZ3Bpb19wcm9iZSwKKyAgICAgICAgLnJlbW92ZQkJPSBzM2MyNDEwX3NwaWdwaW9fcmVtb3ZlLAorICAgICAgICAuc3VzcGVuZAk9IHMzYzI0MTBfc3BpZ3Bpb19zdXNwZW5kLAorICAgICAgICAucmVzdW1lCQk9IHMzYzI0MTBfc3BpZ3Bpb19yZXN1bWUsCisgICAgICAgIC5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNHh4LXNwaS1ncGlvIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisgICAgICAgIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX3NwaWdwaW9faW5pdCh2b2lkKQoreworICAgICAgICByZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3NwaWdwaW9fZHJ2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHMzYzI0MTBfc3BpZ3Bpb19leGl0KHZvaWQpCit7CisgICAgICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX3NwaWdwaW9fZHJ2KTsKK30KKworbW9kdWxlX2luaXQoczNjMjQxMF9zcGlncGlvX2luaXQpOworbW9kdWxlX2V4aXQoczNjMjQxMF9zcGlncGlvX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0WFggU1BJIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwppbmRleCBkM2E3YjBjLi5kZGEwY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCkBAIC0zNSw3MyArMzUsNTIgQEAKIH0gaXhqX2luZm9fdDsKIAogc3RhdGljIHZvaWQgaXhqX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotc3RhdGljIHZvaWQgaXhqX2NvbmZpZyhkZXZfbGlua190ICogbGluayk7Ci1zdGF0aWMgdm9pZCBpeGpfY3NfcmVsZWFzZShkZXZfbGlua190ICogbGluayk7CitzdGF0aWMgaW50IGl4al9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKTsKK3N0YXRpYyB2b2lkIGl4al9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluayk7CiAKLXN0YXRpYyBpbnQgaXhqX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGl4al9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0JZGV2X2xpbmtfdCAqbGluazsKLQogCURFQlVHKDAsICJpeGpfYXR0YWNoKClcbiIpOwogCS8qIENyZWF0ZSBuZXcgaXhqIGRldmljZSAqLwotCWxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwotCWlmICghbGluaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDM7Ci0JbGluay0+Y29uZi5WY2MgPSA1MDsKLQlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLQlsaW5rLT5wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGl4al9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxpbmstPnByaXYpIHsKLQkJa2ZyZWUobGluayk7CisJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gMzsKKwlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJcF9kZXYtPnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXhqX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghcF9kZXYtPnByaXYpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChsaW5rLT5wcml2LCAwLCBzaXplb2Yoc3RydWN0IGl4al9pbmZvX3QpKTsKKwltZW1zZXQocF9kZXYtPnByaXYsIDAsIHNpemVvZihzdHJ1Y3QgaXhqX2luZm9fdCkpOwogCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcF9kZXYtPmluc3RhbmNlID0gbGluazsKLQotCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCWl4al9jb25maWcobGluayk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXhqX2NvbmZpZyhwX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIGl4al9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgaXhqX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKHBfZGV2KTsKLQogCURFQlVHKDAsICJpeGpfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAotCWxpbmstPnN0YXRlICY9IH5ERVZfUkVMRUFTRV9QRU5ESU5HOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCWl4al9jc19yZWxlYXNlKGxpbmspOworCWl4al9jc19yZWxlYXNlKGxpbmspOwogCiAgICAgICAgIGtmcmVlKGxpbmstPnByaXYpOwotICAgICAgICBrZnJlZShsaW5rKTsKIH0KIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBpeGpfZ2V0X3NlcmlhbChkZXZfbGlua190ICogbGluaywgSVhKICogaikKK3N0YXRpYyB2b2lkIGl4al9nZXRfc2VyaWFsKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaywgSVhKICogaikKIHsKLQljbGllbnRfaGFuZGxlX3QgaGFuZGxlOwogCXR1cGxlX3QgdHVwbGU7CiAJdV9zaG9ydCBidWZbMTI4XTsKIAljaGFyICpzdHI7CiAJaW50IGxhc3RfcmV0LCBsYXN0X2ZuLCBpLCBwbGFjZTsKLQloYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJREVCVUcoMCwgIml4al9nZXRfc2VyaWFsKDB4JXApXG4iLCBsaW5rKTsKIAl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gODA7CiAJdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCXN0ciA9IChjaGFyICopIGJ1ZjsKIAlwcmludGsoIlBDTUNJQSBWZXJzaW9uICVkLiVkXG4iLCBzdHJbMF0sIHN0clsxXSk7CiAJc3RyICs9IDI7CkBAIC0xNDksMjIgKzEyOCwxOSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXhqX2NvbmZpZyhkZXZfbGlua190ICogbGluaykKK3N0YXRpYyBpbnQgaXhqX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7CiAJSVhKICpqOwotCWNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CiAJaXhqX2luZm9fdCAqaW5mbzsKIAl0dXBsZV90IHR1cGxlOwogCXVfc2hvcnQgYnVmWzEyOF07CiAJY2lzcGFyc2VfdCBwYXJzZTsKLQljb25maWdfaW5mb190IGNvbmY7CiAJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CiAJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0KIAl7CiAJCTAKIAl9OwogCWludCBsYXN0X3JldCwgbGFzdF9mbjsKLQloYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJaW5mbyA9IGxpbmstPnByaXY7CiAJREVCVUcoMCwgIml4al9jb25maWcoMHglcClcbiIsIGxpbmspOwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOwpAQCAtMTcyLDE5ICsxNDgsMTcgQEAKIAl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CiAJdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CiAJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmYpKTsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKIAl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CisJCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQogCQkJZ290byBuZXh0X2VudHJ5OwogCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewogCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwpAQCAtMTk1LDcgKzE2OSw3IEBACiAJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwogCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwogCQkJfQotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCQkvKiBJZiB3ZSd2ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGRvbmUgKi8KIAkJCWJyZWFrOwpAQCAtMjAzLDEwICsxNzcsMTAgQEAKIAkgICAgICBuZXh0X2VudHJ5OgogCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCiAJCQlkZmx0ID0gKmNmZzsKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJfQogCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCAmbGluay0+Y29uZikpOworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAkvKgogIAkgKglSZWdpc3RlciB0aGUgY2FyZCB3aXRoIHRoZSBjb3JlLgpAQCAtMjE1LDQ2ICsxODksMjEgQEAKIAogCWluZm8tPm5kZXYgPSAxOwogCWluZm8tPm5vZGUubWFqb3IgPSBQSE9ORV9NQUpPUjsKLQlsaW5rLT5kZXYgPSAmaW5mby0+bm9kZTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwogCWl4al9nZXRfc2VyaWFsKGxpbmssIGopOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7Ci0JcmV0dXJuOworCXJldHVybiAwOwogICAgICAgY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAlpeGpfY3NfcmVsZWFzZShsaW5rKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgaXhqX2NzX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIGl4al9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWl4al9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCURFQlVHKDAsICJpeGpfY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAJaW5mby0+bmRldiA9IDA7Ci0JbGluay0+ZGV2ID0gTlVMTDsKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotfQotCi1zdGF0aWMgaW50IGl4al9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCi17Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXhqX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQotewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UoZGV2KTsKLQotCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKLQlpZiAoREVWX09LKGxpbmspKQotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCi0JcmV0dXJuIDA7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgaXhqX2lkc1tdID0gewpAQCAtMjY4LDExICsyMTcsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9ICJpeGpfY3MiLAogCX0sCi0JLnByb2JlCQk9IGl4al9hdHRhY2gsCisJLnByb2JlCQk9IGl4al9wcm9iZSwKIAkucmVtb3ZlCQk9IGl4al9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gaXhqX2lkcywKLQkuc3VzcGVuZAk9IGl4al9zdXNwZW5kLAotCS5yZXN1bWUJCT0gaXhqX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGl4al9wY21jaWFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwppbmRleCA3ODYwYzhhLi45NTZiN2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYworKysgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwpAQCAtNjksNyArNjksNyBAQAogI2RlZmluZSBSRVNVQk1JVF9ERUxBWQkJMTAwMAkvKiBtaWxsaXNlY29uZHMgKi8KIAogI2RlZmluZSBERUZBVUxUX0JVTEtfQUxUU0VUVElORwkxCi0jZGVmaW5lIERFRkFVTFRfSVNPQ19BTFRTRVRUSU5HCTIKKyNkZWZpbmUgREVGQVVMVF9JU09DX0FMVFNFVFRJTkcJMwogI2RlZmluZSBERUZBVUxUX0RMXzUxMl9GSVJTVAkwCiAjZGVmaW5lIERFRkFVTFRfRU5BQkxFX0lTT0MJMAogI2RlZmluZSBERUZBVUxUX1NXX0JVRkZFUklORwkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYwppbmRleCA4MzBkMmM5Li5iMzg5OTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogI2luY2x1ZGUgInVzYmF0bS5oIgogCi0jZGVmaW5lIEVBR0xFVVNCVkVSU0lPTiAidWVhZ2xlIDEuMiIKKyNkZWZpbmUgRUFHTEVVU0JWRVJTSU9OICJ1ZWFnbGUgMS4zIgogCiAKIC8qCkBAIC0yNDMsNyArMjQzLDcgQEAKICNkZWZpbmUgQlVMS19USU1FT1VUIDMwMAogI2RlZmluZSBDVFJMX1RJTUVPVVQgMTAwMAogCi0jZGVmaW5lIEFDS19USU1FT1VUIG1zZWNzX3RvX2ppZmZpZXMoMTUwMCkKKyNkZWZpbmUgQUNLX1RJTUVPVVQgbXNlY3NfdG9famlmZmllcygzMDAwKQogCiAjZGVmaW5lIFVFQV9JTlRSX0lGQUNFX05PIAkwCiAjZGVmaW5lIFVFQV9VU19JRkFDRV9OTwkJMQpAQCAtMzE0LDYgKzMxNCwxMCBAQAogCSAoKGQpICYgMHhmZikgPDwgMTYgfAkJCQkJCVwKIAkgKChhKSAmIDB4ZmYpIDw8IDggIHwJCQkJCQlcCiAJICgoYikgJiAweGZmKSkKKyNkZWZpbmUgR0VUU0ExKGEpICgoYSA+PiA4KSAmIDB4ZmYpCisjZGVmaW5lIEdFVFNBMihhKSAoYSAmIDB4ZmYpCisjZGVmaW5lIEdFVFNBMyhhKSAoKGEgPj4gMjQpICYgMHhmZikKKyNkZWZpbmUgR0VUU0E0KGEpICgoYSA+PiAxNikgJiAweGZmKQogCiAjZGVmaW5lIFNBX0NOVEwgTUFLRVNBKCdDJywgJ04nLCAnVCcsICdMJykKICNkZWZpbmUgU0FfRElBRyBNQUtFU0EoJ0QnLCAnSScsICdBJywgJ0cnKQpAQCAtNzI4LDExICs3MzIsMTIgQEAKIAl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAic2VuZGluZyBEU1AgYmxvY2sgJXUgZmFpbGVkXG4iLCBpKTsKIAlyZXR1cm47CiBiYWQxOgotCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIERTUCBwYWdlICV1IHJlcXVlc3RlZFxuIixwYWdlbm8pOworCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIERTUCBwYWdlICV1IHJlcXVlc3RlZFxuIiwgcGFnZW5vKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdha2VfdXBfY212X2FjayhzdHJ1Y3QgdWVhX3NvZnRjICpzYykKIHsKKwlCVUdfT04oc2MtPmNtdl9hY2spOwogCXNjLT5jbXZfYWNrID0gMTsKIAl3YWtlX3VwKCZzYy0+Y212X2Fja193YWl0KTsKIH0KQEAgLTc0Myw2ICs3NDgsOSBAQAogCQkJCQkJICAgc2MtPmNtdl9hY2ssIEFDS19USU1FT1VUKTsKIAlzYy0+Y212X2FjayA9IDA7CiAKKwl1ZWFfZGJnKElOU19UT19VU0JERVYoc2MpLCAid2FpdF9ldmVudF90aW1lb3V0IDogJWQgbXNcbiIsCisJCQlqaWZmaWVzX3RvX21zZWNzKHJldCkpOworCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTc5MSw2ICs3OTksMTIgQEAKIAlzdHJ1Y3QgY212IGNtdjsKIAlpbnQgcmV0OwogCisJdWVhX2VudGVycyhJTlNfVE9fVVNCREVWKHNjKSk7CisJdWVhX3ZkYmcoSU5TX1RPX1VTQkRFVihzYyksICJGdW5jdGlvbiA6ICVkLSVkLCBBZGRyZXNzIDogJWMlYyVjJWMsICIKKwkJCSJvZmZzZXQgOiAweCUwNHgsIGRhdGEgOiAweCUwOHhcbiIsCisJCQlGVU5DVElPTl9UWVBFKGZ1bmN0aW9uKSwgRlVOQ1RJT05fU1VCVFlQRShmdW5jdGlvbiksCisJCQlHRVRTQTEoYWRkcmVzcyksIEdFVFNBMihhZGRyZXNzKSwgR0VUU0EzKGFkZHJlc3MpLAorCQkJR0VUU0E0KGFkZHJlc3MpLCBvZmZzZXQsIGRhdGEpOwogCS8qIHdlIHNlbmQgYSByZXF1ZXN0LCBidXQgd2UgZXhwZWN0IGEgcmVwbHkgKi8KIAlzYy0+Y212X2Z1bmN0aW9uID0gZnVuY3Rpb24gfCAweDI7CiAJc2MtPmNtdl9pZHgrKzsKQEAgLTgwOCw3ICs4MjIsOSBAQAogCXJldCA9IHVlYV9yZXF1ZXN0KHNjLCBVRUFfU0VUX0JMT0NLLCBVRUFfTVBUWF9TVEFSVCwgQ01WX1NJWkUsICZjbXYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCXJldHVybiB3YWl0X2Ntdl9hY2soc2MpOworCXJldCA9IHdhaXRfY212X2FjayhzYyk7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdWVhX3JlYWRfY212KHN0cnVjdCB1ZWFfc29mdGMgKnNjLApAQCAtOTIyLDcgKzkzOCw3IEBACiAJICogd2UgY2hlY2sgdGhlIHN0YXR1cyBhZ2FpbiBpbiBvcmRlciB0byBkZXRlY3QgdGhlIGZhaWx1cmUgZWFybGllcgogCSAqLwogCWlmIChzYy0+c3RhdHMucGh5LmZsYWdzKSB7Ci0JCXVlYV9kYmcoSU5TX1RPX1VTQkRFVihzYyksICJTdGF0IGZsYWcgPSAlZFxuIiwKKwkJdWVhX2RiZyhJTlNfVE9fVVNCREVWKHNjKSwgIlN0YXQgZmxhZyA9IDB4JXhcbiIsCiAJCSAgICAgICBzYy0+c3RhdHMucGh5LmZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA2Myw3ICsxMDc5LDEzIEBACiAJdWVhX2VudGVycyhJTlNfVE9fVVNCREVWKHNjKSk7CiAJdWVhX2luZm8oSU5TX1RPX1VTQkRFVihzYyksICIocmUpYm9vdGluZyBzdGFydGVkXG4iKTsKIAorCS8qIG1hc2sgaW50ZXJydXB0ICovCiAJc2MtPmJvb3RpbmcgPSAxOworCS8qIFdlIG5lZWQgdG8gc2V0IHRoaXMgaGVyZSBiZWNhdXNlLCBhIGFjayB0aW1lb3V0IGNvdWxkIGhhdmUgb2NjdXJlZCwKKwkgKiBidXQgYmVmb3JlIHdlIHN0YXJ0IHRoZSByZWJvb3QsIHRoZSBhY2sgb2NjdXJzIGFuZCBzZXQgdGhpcyB0byAxLgorCSAqIFNvIHdlIHdpbGwgZmFpbGVkIHRvIHdhaXQgUmVhZHkgQ01WLgorCSAqLworCXNjLT5jbXZfYWNrID0gMDsKIAlVUERBVEVfQVRNX1NUQVQoc2lnbmFsLCBBVE1fUEhZX1NJR19MT1NUKTsKIAogCS8qIHJlc2V0IHN0YXRpc3RpY3MgKi8KQEAgLTEwODksNiArMTExMSw3IEBACiAKIAltc2xlZXAoMTAwMCk7CiAJc2MtPmNtdl9mdW5jdGlvbiA9IE1BS0VGVU5DVElPTihBRFNMRElSRUNUSVZFLCBNT0RFTVJFQURZKTsKKwkvKiBkZW1hc2sgaW50ZXJydXB0ICovCiAJc2MtPmJvb3RpbmcgPSAwOwogCiAJLyogc3RhcnQgbG9hZGluZyBEU1AgKi8KQEAgLTExMDEsNiArMTEyNCw4IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwl1ZWFfdmRiZyhJTlNfVE9fVVNCREVWKHNjKSwgIlJlYWR5IENNViByZWNlaXZlZFxuIik7CisKIAkvKiBFbnRlciBpbiBSLUlETEUgKGNtdikgdW50aWwgaW5zdHJ1Y3RlZCBvdGhlcndpc2UgKi8KIAlyZXQgPSB1ZWFfd3JpdGVfY212KHNjLCBTQV9DTlRMLCAwLCAxKTsKIAlpZiAocmV0IDwgMCkKQEAgLTExMjEsNiArMTE0Niw3IEBACiAJfQogCS8qIEVudGVyIGluIFItQUNULVJFUSAqLwogCXJldCA9IHVlYV93cml0ZV9jbXYoc2MsIFNBX0NOVEwsIDAsIDIpOworCXVlYV92ZGJnKElOU19UT19VU0JERVYoc2MpLCAiRW50ZXJpbmcgaW4gUi1BQ1QtUkVRIHN0YXRlXG4iKTsKIG91dDoKIAlyZWxlYXNlX2Zpcm13YXJlKGNtdnNfZncpOwogCXNjLT5yZXNldCA9IDA7CkBAIC0xMjM1LDYgKzEyNjEsNyBAQAogCiAJaWYgKGNtdi0+YkZ1bmN0aW9uID09IE1BS0VGVU5DVElPTihBRFNMRElSRUNUSVZFLCBNT0RFTVJFQURZKSkgewogCQl3YWtlX3VwX2Ntdl9hY2soc2MpOworCQl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI0OSw2ICsxMjc2LDcgQEAKIAlzYy0+ZGF0YSA9IHNjLT5kYXRhIDw8IDE2IHwgc2MtPmRhdGEgPj4gMTY7CiAKIAl3YWtlX3VwX2Ntdl9hY2soc2MpOworCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOwogCXJldHVybjsKIAogYmFkMjoKQEAgLTEyNTYsMTIgKzEyODQsMTQgQEAKIAkJCSJGdW5jdGlvbiA6ICVkLCBTdWJmdW5jdGlvbiA6ICVkXG4iLAogCQkJRlVOQ1RJT05fVFlQRShjbXYtPmJGdW5jdGlvbiksCiAJCQlGVU5DVElPTl9TVUJUWVBFKGNtdi0+YkZ1bmN0aW9uKSk7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CiAJcmV0dXJuOwogCiBiYWQxOgogCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIGNtdiByZWNlaXZlZCwgIgogCQkJIndQcmVhbWJsZSAlZCwgYkRpcmVjdGlvbiAlZFxuIiwKIAkJCWxlMTZfdG9fY3B1KGNtdi0+d1ByZWFtYmxlKSwgY212LT5iRGlyZWN0aW9uKTsKKwl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKIH0KIAogLyoKQEAgLTEzNDYsNyArMTM3Niw3IEBACiAJaWYgKHJldCA8IDApIHsKIAkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwKIAkJICAgICAgICJ1cmIgc3VibWl0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXQpOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyOwogCX0KIAogCXNjLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odWVhX2t0aHJlYWQsIHNjLCAidWVhZ2xlLWF0bSIpOwpAQCAtMTM2MCwxMCArMTM5MCwxMCBAQAogCiBlcnIyOgogCXVzYl9raWxsX3VyYihzYy0+dXJiX2ludCk7Ci1lcnIxOgotCWtmcmVlKGludHIpOwogZXJyOgogCXVzYl9mcmVlX3VyYihzYy0+dXJiX2ludCk7CisJc2MtPnVyYl9pbnQgPSBOVUxMOworCWtmcmVlKGludHIpOwogCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMTUwOCw3ICsxNTM4LDcgQEAKIAlpbnQgcmV0ID0gLUVOT0RFVjsgCQkJCQlcCiAJc3RydWN0IHVlYV9zb2Z0YyAqc2M7IAkJCQkJXAogIAkJCQkJCQkJXAotCW11dGV4X2xvY2soJnVlYV9tdXRleCk7IAkJCQkJXAorCW11dGV4X2xvY2soJnVlYV9tdXRleCk7IAkJCQlcCiAJc2MgPSBkZXZfdG9fdWVhKGRldik7CQkJCQlcCiAJaWYgKCFzYykgCQkJCQkJXAogCQlnb3RvIG91dDsgCQkJCQlcCkBAIC0xNTE2LDcgKzE1NDYsNyBAQAogCWlmIChyZXNldCkJCQkJCQlcCiAJCXNjLT5zdGF0cy5waHkubmFtZSA9IDA7CQkJCVwKIG91dDogCQkJCQkJCQlcCi0JbXV0ZXhfdW5sb2NrKCZ1ZWFfbXV0ZXgpOyAJCQkJCVwKKwltdXRleF91bmxvY2soJnVlYV9tdXRleCk7IAkJCQlcCiAJcmV0dXJuIHJldDsgCQkJCQkJXAogfSAJCQkJCQkJCVwKIAkJCQkJCQkJXApAQCAtMTY0Myw3ICsxNjczLDcgQEAKIAogCXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVlYV9zb2Z0YyksIEdGUF9LRVJORUwpOwogCWlmICghc2MpIHsKLQkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgInVlYV9pbml0OiBub3QgZW5vdWdoIG1lbW9yeSAhXG4iKTsKKwkJdWVhX2Vycih1c2IsICJ1ZWFfaW5pdDogbm90IGVub3VnaCBtZW1vcnkgIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCmluZGV4IGMxMjExZmMuLjU0NjI0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKQEAgLTk5LDExICs5OSwxMSBAQAogCiAjZGVmaW5lIFVEU0xfTUFYX1JDVl9VUkJTCQkxNgogI2RlZmluZSBVRFNMX01BWF9TTkRfVVJCUwkJMTYKLSNkZWZpbmUgVURTTF9NQVhfQlVGX1NJWkUJCTY0ICogMTAyNAkvKiBieXRlcyAqLworI2RlZmluZSBVRFNMX01BWF9CVUZfU0laRQkJNjU1MzYKICNkZWZpbmUgVURTTF9ERUZBVUxUX1JDVl9VUkJTCQk0CiAjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfVVJCUwkJNAotI2RlZmluZSBVRFNMX0RFRkFVTFRfUkNWX0JVRl9TSVpFCTY0ICogQVRNX0NFTExfU0laRQkvKiBieXRlcyAqLwotI2RlZmluZSBVRFNMX0RFRkFVTFRfU05EX0JVRl9TSVpFCTY0ICogQVRNX0NFTExfU0laRQkvKiBieXRlcyAqLworI2RlZmluZSBVRFNMX0RFRkFVTFRfUkNWX0JVRl9TSVpFCTMzOTIJLyogNjQgKiBBVE1fQ0VMTF9TSVpFICovCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfQlVGX1NJWkUJMzM5MgkvKiA2NCAqIEFUTV9DRUxMX1NJWkUgKi8KIAogI2RlZmluZSBBVE1fQ0VMTF9IRUFERVIJCQkoQVRNX0NFTExfU0laRSAtIEFUTV9DRUxMX1BBWUxPQUQpCiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogbW9kdWxlX3BhcmFtKHNuZF9idWZfYnl0ZXMsIHVpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhzbmRfYnVmX2J5dGVzLAogCQkgIlNpemUgb2YgdGhlIGJ1ZmZlcnMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uLCBpbiBieXRlcyAocmFuZ2U6IDEtIgotCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfTUFYX1NORF9CVUZfU0laRSkgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfTUFYX0JVRl9TSVpFKSAiLCBkZWZhdWx0OiAiCiAJCSBfX01PRFVMRV9TVFJJTkcoVURTTF9ERUZBVUxUX1NORF9CVUZfU0laRSkgIikiKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKaW5kZXggZmYwMzE4NC4uYTA4Nzg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwpAQCAtOTksNCArOTksMTEgQEAKIAkgIG5vcm1hbCBMaW51eC1VU0IgaG9zdHMgZG8gKG90aGVyIHRoYW4gdGhlIHdhcm5pbmcpLCBhbmQgaXMKIAkgIGNvbnZlbmllbnQgZm9yIG1hbnkgc3RhZ2VzIG9mIHByb2R1Y3QgZGV2ZWxvcG1lbnQuCiAKK2NvbmZpZyBVU0JfT1RHX0JMQUNLTElTVF9IVUIKKwlib29sICJEaXNhYmxlIGV4dGVybmFsIGh1YnMiCisJZGVwZW5kcyBvbiBVU0JfT1RHCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gTGludXggd2lsbCByZWZ1c2UgdG8gZW51bWVyYXRlCisJICBleHRlcm5hbCBodWJzLiAgT1RHIGhvc3RzIGFyZSBhbGxvd2VkIHRvIHJlZHVjZSBoYXJkd2FyZQorCSAgYW5kIHNvZnR3YXJlIGNvc3RzIGJ5IG5vdCBzdXBwb3J0aW5nIGV4dGVybmFsIGh1YnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggMGQyMTkzYi4uNjZiNzg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTIxMywxMSArMjEzLDkgQEAKIAogCWlmIChoY2QtPmRyaXZlci0+c3VzcGVuZCkgewogCQlyZXR2YWwgPSBoY2QtPmRyaXZlci0+c3VzcGVuZChoY2QsIG1lc3NhZ2UpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZGJnICgmZGV2LT5kZXYsICJQQ0kgcHJlLXN1c3BlbmQgZmFpbCwgJWRcbiIsCi0JCQkJcmV0dmFsKTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGhjZC0+ZHJpdmVyLT5zdXNwZW5kLCByZXR2YWwpOworCQlpZiAocmV0dmFsKQogCQkJZ290byBkb25lOwotCQl9CiAJfQogCXN5bmNocm9uaXplX2lycShkZXYtPmlycSk7CiAKQEAgLTI2Myw2ICsyNjEsNyBAQAogCQkgKiBzb21lIGRldmljZSBzdGF0ZSAoZS5nLiBhcyBwYXJ0IG9mIGNsb2NrIHJlaW5pdCkuCiAJCSAqLwogCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIFBDSV9EM2hvdCk7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwY2lfc2V0X3Bvd2VyX3N0YXRlLCByZXR2YWwpOwogCQlpZiAocmV0dmFsID09IDApIHsKIAkJCWludCB3YWtlID0gZGV2aWNlX2Nhbl93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggZmJkOTM4ZC4uZTJlMDBiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0xODA1LDYgKzE4MDUsMTIgQEAKIAkJCVVTQl9TUEVFRF9GVUxMOwogCWhjZC0+c2VsZi5yb290X2h1YiA9IHJoZGV2OwogCisJLyogd2FrZXVwIGZsYWcgaW5pdCBkZWZhdWx0cyB0byAiZXZlcnl0aGluZyB3b3JrcyIgZm9yIHJvb3QgaHVicywKKwkgKiBidXQgZHJpdmVycyBjYW4gb3ZlcnJpZGUgaXQgaW4gcmVzZXQoKSBpZiBuZWVkZWQsIGFsb25nIHdpdGgKKwkgKiByZWNvcmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbGxlcidzIHN5c3RlbSB3YWtldXAgY2FwYWJpbGl0eS4KKwkgKi8KKwlkZXZpY2VfaW5pdF93YWtldXAoJnJoZGV2LT5kZXYsIDEpOworCiAJLyogInJlc2V0IiBpcyBtaXNuYW1lZDsgaXRzIHJvbGUgaXMgbm93IG9uZS10aW1lIGluaXQuIHRoZSBjb250cm9sbGVyCiAJICogc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHJlc2V0IChhbmQgYm9vdCBmaXJtd2FyZSBraWNrZWQgb2ZmIGV0YykuCiAJICovCkBAIC0xODEzLDEzICsxODE5LDYgQEAKIAkJZ290byBlcnJfaGNkX2RyaXZlcl9zZXR1cDsKIAl9CiAKLQkvKiB3YWtldXAgZmxhZyBpbml0IGlzIGluIHRyYW5zaXRpb247IGZvciBub3cgd2UgY2FuJ3QgcmVseSBvbiBQQ0kgdG8KLQkgKiBpbml0aWFsaXplIHRoZXNlIGJpdHMgcHJvcGVybHksIHNvIHdlIGxldCByZXNldCgpIG92ZXJyaWRlIGl0LgotCSAqIFRoaXMgaW5pdCBzaG91bGQgX3ByZWNlZGVfIHRoZSByZXNldCgpIG9uY2UgUENJIGJlaGF2ZXMuCi0JICovCi0JZGV2aWNlX2luaXRfd2FrZXVwKCZyaGRldi0+ZGV2LAotCQkJZGV2aWNlX2Nhbl93YWtldXAoaGNkLT5zZWxmLmNvbnRyb2xsZXIpKTsKLQogCS8qIE5PVEU6IHJvb3QgaHViIGFuZCBjb250cm9sbGVyIGNhcGFiaWxpdGllcyBtYXkgbm90IGJlIHRoZSBzYW1lICovCiAJaWYgKGRldmljZV9jYW5fd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyKQogCQkJJiYgZGV2aWNlX2Nhbl93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDhlNjVmN2EuLjkwYjhkNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtODM2LDYgKzgzNiwxMyBAQAogCWRlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKIAloZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAorI2lmZGVmCUNPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIKKwlpZiAoaGRldi0+cGFyZW50KSB7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJpZ25vcmluZyBleHRlcm5hbCBodWJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisjZW5kaWYKKwogCS8qIFNvbWUgaHVicyBoYXZlIGEgc3ViY2xhc3Mgb2YgMSwgd2hpY2ggQUZBSUNUIGFjY29yZGluZyB0byB0aGUgKi8KIAkvKiAgc3BlY3MgaXMgbm90IGRlZmluZWQsIGJ1dCBpdCB3b3JrcyAqLwogCWlmICgoZGVzYy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCkgJiYKQEAgLTEwMjIsNyArMTAyOSw2IEBACiAJCXJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQodWRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX3NldF9kZXZpY2Vfc3RhdGUpOwogCiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTExNjIsMTkgKzExNjgsOSBAQAogc3RhdGljIGludCBjaG9vc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQgaTsKLQl1MTYgZGV2c3RhdHVzOwotCWludCBidXNfcG93ZXJlZDsKIAlpbnQgbnVtX2NvbmZpZ3M7CiAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYywgKmJlc3Q7CiAKLQkvKiBJZiB0aGlzIGZhaWxzLCBhc3N1bWUgdGhlIGRldmljZSBpcyBidXMtcG93ZXJlZCAqLwotCWRldnN0YXR1cyA9IDA7Ci0JdXNiX2dldF9zdGF0dXModWRldiwgVVNCX1JFQ0lQX0RFVklDRSwgMCwgJmRldnN0YXR1cyk7Ci0JbGUxNl90b19jcHVzKCZkZXZzdGF0dXMpOwotCWJ1c19wb3dlcmVkID0gKChkZXZzdGF0dXMgJiAoMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCkpID09IDApOwotCWRldl9kYmcoJnVkZXYtPmRldiwgImRldmljZSBpcyAlcy1wb3dlcmVkXG4iLAotCQkJYnVzX3Bvd2VyZWQgPyAiYnVzIiA6ICJzZWxmIik7Ci0KIAliZXN0ID0gTlVMTDsKIAljID0gdWRldi0+Y29uZmlnOwogCW51bV9jb25maWdzID0gdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7CkBAIC0xMTkxLDYgKzExODcsMTkgQEAKIAkJICogc2ltaWxhciBlcnJvcnMgaW4gdGhlaXIgZGVzY3JpcHRvcnMuICBJZiB0aGUgbmV4dCB0ZXN0CiAJCSAqIHdlcmUgYWxsb3dlZCB0byBleGVjdXRlLCBzdWNoIGNvbmZpZ3VyYXRpb25zIHdvdWxkIGFsd2F5cwogCQkgKiBiZSByZWplY3RlZCBhbmQgdGhlIGRldmljZXMgd291bGQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisJCSAqIEluIHRoZSBtZWFudGltZSwgd2UgcnVuIHRoZSByaXNrIG9mIHNlbGVjdGluZyBhIGNvbmZpZworCQkgKiB0aGF0IHJlcXVpcmVzIGV4dGVybmFsIHBvd2VyIGF0IGEgdGltZSB3aGVuIHRoYXQgcG93ZXIKKwkJICogaXNuJ3QgYXZhaWxhYmxlLiAgSXQgc2VlbXMgdG8gYmUgdGhlIGxlc3NlciBvZiB0d28gZXZpbHMuCisJCSAqCisJCSAqIEJ1Z3ppbGxhICM2NDQ4IHJlcG9ydHMgYSBkZXZpY2UgdGhhdCBhcHBlYXJzIHRvIGNyYXNoCisJCSAqIHdoZW4gaXQgcmVjZWl2ZXMgYSBHRVRfREVWSUNFX1NUQVRVUyByZXF1ZXN0ISAgV2UgZG9uJ3QKKwkJICogaGF2ZSBhbnkgb3RoZXIgd2F5IHRvIHRlbGwgd2hldGhlciBhIGRldmljZSBpcyBzZWxmLXBvd2VyZWQsCisJCSAqIGJ1dCBzaW5jZSB3ZSBkb24ndCB1c2UgdGhhdCBpbmZvcm1hdGlvbiBhbnl3aGVyZSBidXQgaGVyZSwKKwkJICogdGhlIGNhbGwgaGFzIGJlZW4gcmVtb3ZlZC4KKwkJICoKKwkJICogTWF5YmUgdGhlIEdFVF9ERVZJQ0VfU1RBVFVTIGNhbGwgYW5kIHRoZSB0ZXN0IGJlbG93IGNhbgorCQkgKiBiZSByZWluc3RhdGVkIHdoZW4gZGV2aWNlIGZpcm13YXJlcyBiZWNvbWUgbW9yZSByZWxpYWJsZS4KKwkJICogRG9uJ3QgaG9sZCB5b3VyIGJyZWF0aC4KIAkJICovCiAjaWYgMAogCQkvKiBSdWxlIG91dCBzZWxmLXBvd2VyZWQgY29uZmlncyBmb3IgYSBidXMtcG93ZXJlZCBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IGQ3MzUyYWEuLmI3ZmRjMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMTE5NCw3ICsxMTk0LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9nZXRfaW50Zik7CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcHV0X2ludGYpOwogCi1FWFBPUlRfU1lNQk9MKHVzYl9hbGxvY19kZXYpOwogRVhQT1JUX1NZTUJPTCh1c2JfcHV0X2Rldik7CiBFWFBPUlRfU1lNQk9MKHVzYl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0wodXNiX2h1Yl90dF9jbGVhcl9idWZmZXIpOwpAQCAtMTIwOCw3ICsxMjA3LDYgQEAKIEVYUE9SVF9TWU1CT0wodXNiX2FsdG51bV90b19hbHRzZXR0aW5nKTsKIAogRVhQT1JUX1NZTUJPTCh1c2JfcmVzZXRfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wodXNiX2Rpc2Nvbm5lY3QpOwogCiBFWFBPUlRfU1lNQk9MKF9fdXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBkODBmNzE4Li4zNjNiMmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNjksMTEgKzY5LDExIEBACiAJICAgb2Z0ZW4gbmVlZCBib2FyZC1zcGVjaWZpYyBob29rcy4KIAogY29uZmlnIFVTQl9HQURHRVRfTkVUMjI4MAotCWJvb2xlYW4gIk5ldENoaXAgMjI4MCIKKwlib29sZWFuICJOZXRDaGlwIDIyOHgiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKIAloZWxwCi0JICAgTmV0Q2hpcCAyMjgwIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKKwkgICBOZXRDaGlwIDIyODAgLyAyMjgyIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKIAkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAogCSAgIAogCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDg2NTg1OGMuLmI4ZDBiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0xNzA5LDcgKzE3MDksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF0OTF1ZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdDkxdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKQEAgLTE3MzEsNyArMTczMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXQ5MXVkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGF0OTF1ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYzNkOGU1Yy4uOWM0NDIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTIzMzgsNiArMjMzOCw5IEBACiAJCWhzX3N1YnNldF9kZXNjcmlwdG9ycygpOwogCX0KIAorCWRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQgKGdhZGdldCk7CisKIAkvKiBGb3Igbm93IFJORElTIGlzIGFsd2F5cyBhIHNlY29uZCBjb25maWcgKi8KIAlpZiAocm5kaXMpCiAJCWRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucyA9IDI7CkBAIC0yMzYxLDkgKzIzNjQsNiBAQAogI2VuZGlmCiAjZW5kaWYJLyogRFVBTFNQRUVEICovCiAKLQlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OwotCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChnYWRnZXQpOwotCiAJaWYgKGdhZGdldC0+aXNfb3RnKSB7CiAJCW90Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKIAkJZXRoX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IGNmM2JlMjkuLjZmODg3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTcxLDYgKzcxLDEyIEBACiAgKiByZXF1aXJlbWVudCBhbW91bnRzIHRvIHR3byAxNksgYnVmZmVycywgc2l6ZSBjb25maWd1cmFibGUgYnkgYSBwYXJhbWV0ZXIuCiAgKiBTdXBwb3J0IGlzIGluY2x1ZGVkIGZvciBib3RoIGZ1bGwtc3BlZWQgYW5kIGhpZ2gtc3BlZWQgb3BlcmF0aW9uLgogICoKKyAqIE5vdGUgdGhhdCB0aGUgZHJpdmVyIGlzIHNsaWdodGx5IG5vbi1wb3J0YWJsZSBpbiB0aGF0IGl0IGFzc3VtZXMgYQorICogc2luZ2xlIG1lbW9yeS9ETUEgYnVmZmVyIHdpbGwgYmUgdXNlYWJsZSBmb3IgYnVsay1pbiwgYnVsay1vdXQsIGFuZAorICogaW50ZXJydXB0LWluIGVuZHBvaW50cy4gIFdpdGggbW9zdCBkZXZpY2UgY29udHJvbGxlcnMgdGhpcyBpc24ndCBhbgorICogaXNzdWUsIGJ1dCB0aGVyZSBtYXkgYmUgc29tZSB3aXRoIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyB0aGF0IHByZXZlbnQKKyAqIGEgYnVmZmVyIGZyb20gYmVpbmcgdXNlZCBieSBtb3JlIHRoYW4gb25lIGVuZHBvaW50LgorICoKICAqIE1vZHVsZSBvcHRpb25zOgogICoKICAqCWZpbGU9ZmlsZW5hbWVbLGZpbGVuYW1lLi4uXQpAQCAtMTA4LDYgKzExNCwxNCBAQAogICogc2V0dGluZyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0aGUgbWVkaXVtIGlzIGxvYWRlZC4KICAqCiAgKiBUaGlzIGdhZGdldCBkcml2ZXIgaXMgaGVhdmlseSBiYXNlZCBvbiAiR2FkZ2V0IFplcm8iIGJ5IERhdmlkIEJyb3duZWxsLgorICogVGhlIGRyaXZlcidzIFNDU0kgY29tbWFuZCBpbnRlcmZhY2Ugd2FzIGJhc2VkIG9uIHRoZSAiSW5mb3JtYXRpb24KKyAqIHRlY2hub2xvZ3kgLSBTbWFsbCBDb21wdXRlciBTeXN0ZW0gSW50ZXJmYWNlIC0gMiIgZG9jdW1lbnQgZnJvbQorICogWDNUOS4yIFByb2plY3QgMzc1RCwgUmV2aXNpb24gMTBMLCA3LVNFUC05MywgYXZhaWxhYmxlIGF0CisgKiA8aHR0cDovL3d3dy50MTAub3JnL2Z0cC90MTAvZHJhZnRzL3MyL3MyLXIxMGwucGRmPi4gIFRoZSBzaW5nbGUgZXhjZXB0aW9uCisgKiBpcyBvcGNvZGUgMHgyMyAoUkVBRCBGT1JNQVQgQ0FQQUNJVElFUyksIHdoaWNoIHdhcyBiYXNlZCBvbiB0aGUKKyAqICJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBNYXNzIFN0b3JhZ2UgQ2xhc3MgVUZJIENvbW1hbmQgU3BlY2lmaWNhdGlvbiIKKyAqIGRvY3VtZW50LCBSZXZpc2lvbiAxLjAsIERlY2VtYmVyIDE0LCAxOTk4LCBhdmFpbGFibGUgYXQKKyAqIDxodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL3VzYm1hc3MtdWZpMTAucGRmPi4KICAqLwogCiAKQEAgLTMzNCwxMSArMzQ4LDkgQEAKIAogI2RlZmluZSBNQVhfTFVOUwk4CiAKLQkvKiBBcmdnaCEgIFRoZXJlIHNob3VsZCBiZSBhIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZCBtYWNybyEgKi8KLXN0YXRpYyBjaGFyCQkqZmlsZVtNQVhfTFVOU107Ci1zdGF0aWMgaW50CQlyb1tNQVhfTFVOU107Ci0KIHN0YXRpYyBzdHJ1Y3QgeworCWNoYXIJCSpmaWxlW01BWF9MVU5TXTsKKwlpbnQJCXJvW01BWF9MVU5TXTsKIAlpbnQJCW51bV9maWxlbmFtZXM7CiAJaW50CQludW1fcm9zOwogCXVuc2lnbmVkIGludAlubHVuczsKQEAgLTM3MCwxMCArMzgyLDExIEBACiAJfTsKIAogCi1tb2R1bGVfcGFyYW1fYXJyYXkoZmlsZSwgY2hhcnAsICZtb2RfZGF0YS5udW1fZmlsZW5hbWVzLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChmaWxlLCBtb2RfZGF0YS5maWxlLCBjaGFycCwgJm1vZF9kYXRhLm51bV9maWxlbmFtZXMsCisJCVNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhmaWxlLCAibmFtZXMgb2YgYmFja2luZyBmaWxlcyBvciBkZXZpY2VzIik7CiAKLW1vZHVsZV9wYXJhbV9hcnJheShybywgYm9vbCwgJm1vZF9kYXRhLm51bV9yb3MsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHJvLCBtb2RfZGF0YS5ybywgYm9vbCwgJm1vZF9kYXRhLm51bV9yb3MsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhybywgInRydWUgdG8gZm9yY2UgcmVhZC1vbmx5Iik7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChsdW5zLCBtb2RfZGF0YS5ubHVucywgdWludCwgU19JUlVHTyk7CkBAIC0xNzk1LDYgKzE4MDgsNyBAQAogCQkJICogdGhlIGJ1bGstb3V0IG1heHBhY2tldCBzaXplICovCiAJCQliaC0+b3V0cmVxLT5sZW5ndGggPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoID0KIAkJCQkJYW1vdW50OworCQkJYmgtPm91dHJlcS0+c2hvcnRfbm90X29rID0gMTsKIAkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKIAkJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CiAJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKQEAgLTIzOTgsNiArMjQxMiw3IEBACiAJCQkgKiB0aGUgYnVsay1vdXQgbWF4cGFja2V0IHNpemUgKi8KIAkJCWJoLT5vdXRyZXEtPmxlbmd0aCA9IGJoLT5idWxrX291dF9pbnRlbmRlZF9sZW5ndGggPQogCQkJCQlhbW91bnQ7CisJCQliaC0+b3V0cmVxLT5zaG9ydF9ub3Rfb2sgPSAxOwogCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxLAogCQkJCQkmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKTsKIAkJCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OwpAQCAtMzAyOSw2ICszMDQ0LDcgQEAKIAogCQkvKiBRdWV1ZSBhIHJlcXVlc3QgdG8gcmVhZCBhIEJ1bGstb25seSBDQlcgKi8KIAkJc2V0X2J1bGtfb3V0X3JlcV9sZW5ndGgoZnNnLCBiaCwgVVNCX0JVTEtfQ0JfV1JBUF9MRU4pOworCQliaC0+b3V0cmVxLT5zaG9ydF9ub3Rfb2sgPSAxOwogCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19vdXQsIGJoLT5vdXRyZXEsCiAJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CiAKQEAgLTM4NTksNyArMzg3NSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CiAJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07Ci0JCWN1cmx1bi0+cm8gPSByb1tpXTsKKwkJY3VybHVuLT5ybyA9IG1vZF9kYXRhLnJvW2ldOwogCQljdXJsdW4tPmRldi5wYXJlbnQgPSAmZ2FkZ2V0LT5kZXY7CiAJCWN1cmx1bi0+ZGV2LmRyaXZlciA9ICZmc2dfZHJpdmVyLmRyaXZlcjsKIAkJZGV2X3NldF9kcnZkYXRhKCZjdXJsdW4tPmRldiwgZnNnKTsKQEAgLTM4NzYsOCArMzg5Miw5IEBACiAJCQlrcmVmX2dldCgmZnNnLT5yZWYpOwogCQl9CiAKLQkJaWYgKGZpbGVbaV0gJiYgKmZpbGVbaV0pIHsKLQkJCWlmICgocmMgPSBvcGVuX2JhY2tpbmdfZmlsZShjdXJsdW4sIGZpbGVbaV0pKSAhPSAwKQorCQlpZiAobW9kX2RhdGEuZmlsZVtpXSAmJiAqbW9kX2RhdGEuZmlsZVtpXSkgeworCQkJaWYgKChyYyA9IG9wZW5fYmFja2luZ19maWxlKGN1cmx1biwKKwkJCQkJbW9kX2RhdGEuZmlsZVtpXSkpICE9IDApCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAoIW1vZF9kYXRhLnJlbW92YWJsZSkgewogCQkJRVJST1IoZnNnLCAibm8gZmlsZSBnaXZlbiBmb3IgTFVOJWRcbiIsIGkpOwpAQCAtMzk1Myw2ICszOTcwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgewogCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOwogCisJCS8qIEFsbG9jYXRlIGZvciB0aGUgYnVsay1pbiBlbmRwb2ludC4gIFdlIGFzc3VtZSB0aGF0CisJCSAqIHRoZSBidWZmZXIgd2lsbCBhbHNvIHdvcmsgd2l0aCB0aGUgYnVsay1vdXQgKGFuZAorCQkgKiBpbnRlcnJ1cHQtaW4pIGVuZHBvaW50LiAqLwogCQliaC0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlcihmc2ctPmJ1bGtfaW4sIG1vZF9kYXRhLmJ1ZmxlbiwKIAkJCQkmYmgtPmRtYSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYmgtPmJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAppbmRleCBjNDA4MTQwLi5hYTgwZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCkBAIC0xMDAsOSArMTAwLDkgQEAKICNkZWZpbmUgZ2FkZ2V0X2lzX211c2Joc2ZjKGcpCTAKICNlbmRpZgogCi0vKiBNZW50b3IgaGlnaCBzcGVlZCAiZHVhbCByb2xlIiBjb250cm9sbGVyLCBwZXJpcGhlcmFsIG1vZGUgKi8KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSERSQwotI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhkcmMoZykJIXN0cmNtcCgibXVzYmhkcmNfdWRjIiwgKGcpLT5uYW1lKQorLyogTWVudG9yIGhpZ2ggc3BlZWQgImR1YWwgcm9sZSIgY29udHJvbGxlciwgaW4gcGVyaXBoZXJhbCByb2xlICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCisjZGVmaW5lIGdhZGdldF9pc19tdXNiaGRyYyhnKQkhc3RyY21wKCJtdXNiX2hkcmMiLCAoZyktPm5hbWUpCiAjZWxzZQogI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhkcmMoZykJMAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IDNmNjE4Y2UuLjBlYjAxMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC04MTAsNyArODEwLDcgQEAKIAkJaWYgKHZhbHVlID09IDApCiAJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0VOQUJMRUQ7CiAJCWJyZWFrOwotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCWNhc2UgVVNCX1NQRUVEX0hJR0g6CiAJCS8qIGZhaWxzIGlmIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSB0aGF0IGRlc2NyaXB0b3IuLi4gKi8KIAkJdmFsdWUgPSB1c2JfZXBfZW5hYmxlIChlcCwgJmRhdGEtPmhzX2Rlc2MpOwpAQCAtOTgyLDcgKzk4Miw3IEBACiAJCQkvKiBhc3N1bWUgdGhhdCB3YXMgU0VUX0NPTkZJR1VSQVRJT04gKi8KIAkJCWlmIChkZXYtPmN1cnJlbnRfY29uZmlnKSB7CiAJCQkJdW5zaWduZWQgcG93ZXI7Ci0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCQkJaWYgKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKIAkJCQkJcG93ZXIgPSBkZXYtPmhzX2NvbmZpZy0+Yk1heFBvd2VyOwogCQkJCWVsc2UKQEAgLTEyNjIsNyArMTI2Miw3IEBACiAgKiBVbnJlY29nbml6ZWQgZXAwIHJlcXVlc3RzIG1heSBiZSBoYW5kbGVkIGluIHVzZXIgc3BhY2UuCiAgKi8KIAotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogc3RhdGljIHZvaWQgbWFrZV9xdWFsaWZpZXIgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KQogewogCXN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IJCXF1YWw7CkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogY29uZmlnX2J1ZiAoc3RydWN0IGRldl9kYXRhICpkZXYsIHU4IHR5cGUsIHVuc2lnbmVkIGluZGV4KQogewogCWludAkJbGVuOwotI2lmZGVmIEhJR0hTUEVFRAorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCWludAkJaHM7CiAjZW5kaWYKIApAQCAtMTI5OSw3ICsxMjk5LDcgQEAKIAlpZiAoaW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmZGVmIEhJR0hTUEVFRAorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCWhzID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7CiAJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKIAkJaHMgPSAhaHM7CkBAIC0xMzM1LDEyICsxMzM1LDEyIEBACiAJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CiAJCWRldi0+ZGV2LT5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OwogCi0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIICYmIGRldi0+aHNfY29uZmlnID09IDApIHsKIAkJCUVSUk9SIChkZXYsICJubyBoaWdoIHNwZWVkIGNvbmZpZz8/XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0jZW5kaWYJLyogSElHSFNQRUVEICovCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCiAKIAkJSU5GTyAoZGV2LCAiY29ubmVjdGVkXG4iKTsKIAkJZXZlbnQgPSBuZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX0NPTk5FQ1QpOwpAQCAtMTM1MiwxMSArMTM1MiwxMSBAQAogCQkJLyogLi4uIGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spIC4uLiAqLwogCQkJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX0RFRkVSX0VOQUJMRSkKIAkJCQljb250aW51ZTsKLSNpZmRlZglISUdIU1BFRUQKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKIAkJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQkJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5oc19kZXNjKTsKIAkJCWVsc2UKLSNlbmRpZgkvKiBISUdIU1BFRUQgKi8KKyNlbmRpZgkvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KIAkJCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+ZGVzYyk7CiAJCQlpZiAodmFsdWUpIHsKIAkJCQlFUlJPUiAoZGV2LCAiZGVmZXJyZWQgJXMgZW5hYmxlIC0tPiAlZFxuIiwKQEAgLTEzOTEsNyArMTM5MSw3IEBACiAJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHNpemVvZiAqZGV2LT5kZXYpOwogCQkJcmVxLT5idWYgPSBkZXYtPmRldjsKIAkJCWJyZWFrOwotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCQljYXNlIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOgogCQkJaWYgKCFkZXYtPmhzX2NvbmZpZykKIAkJCQlicmVhazsKQEAgLTE0MjgsNyArMTQyOCw3IEBACiAJCQkvLyB1c2VyIG1vZGUgZXhwZWN0ZWQgdG8gZGlzYWJsZSBlbmRwb2ludHMKIAkJfSBlbHNlIHsKIAkJCXU4CWNvbmZpZywgcG93ZXI7Ci0jaWZkZWYJSElHSFNQRUVECisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECiAJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgewogCQkJCWNvbmZpZyA9IGRldi0+aHNfY29uZmlnLT5iQ29uZmlndXJhdGlvblZhbHVlOwogCQkJCXBvd2VyID0gZGV2LT5oc19jb25maWctPmJNYXhQb3dlcjsKQEAgLTE2MTQsNiArMTYxNCw3IEBACiAJCQkJZGF0YSwgJmVwX2NvbmZpZ19vcGVyYXRpb25zLAogCQkJCSZkYXRhLT5kZW50cnkpOwogCQlpZiAoIWRhdGEtPmlub2RlKSB7CisJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCBkYXRhLT5yZXEpOwogCQkJa2ZyZWUgKGRhdGEpOwogCQkJZ290byBlbm9tZW07CiAJCX0KQEAgLTE3MjgsNyArMTcyOSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0gewotI2lmZGVmCUhJR0hTUEVFRAorI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKICNlbHNlCiAJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggZmI3M2RjMS4uMGI5MjkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFBMWCBUZWNobm9sb2d5LCBJbmMuCiAgKgorICogTW9kaWZpZWQgU2V0aCBMZXZ5IDIwMDUgUExYIFRlY2hub2xvZ3ksIEluYy4gdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggMjI4MiBjaGlwCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNzEsOCArNzMsOCBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogCi0jZGVmaW5lCURSSVZFUl9ERVNDCQkiUExYIE5FVDIyODAgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlciIKLSNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCSIyMDA1IEZlYiAwMyIKKyNkZWZpbmUJRFJJVkVSX0RFU0MJCSJQTFggTkVUMjI4eCBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJIjIwMDUgU2VwdCAyNyIKIAogI2RlZmluZQlETUFfQUREUl9JTlZBTElECSh+KGRtYV9hZGRyX3QpMCkKICNkZWZpbmUJRVBfRE9OVFVTRQkJMTMJLyogbm9uemVybyAqLwpAQCAtMTE4LDcgKzEyMCw3IEBACiAvKiBlbmFibGVfc3VzcGVuZCAtLSBXaGVuIGVuYWJsZWQsIHRoZSBkcml2ZXIgd2lsbCByZXNwb25kIHRvCiAgKiBVU0Igc3VzcGVuZCByZXF1ZXN0cyBieSBwb3dlcmluZyBkb3duIHRoZSBORVQyMjgwLiAgT3RoZXJ3aXNlLAogICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgd2lsbCBiZSBpZ25vcmVkLiAgVGhpcyBpcyBhY2NlcHRpYmxlIGZvcgotICogc2VsZi1wb3dlcmVkIGRldmljZXMsIGFuZCBoZWxwcyBhdm9pZCBzb21lIHF1aXJrcy4KKyAqIHNlbGYtcG93ZXJlZCBkZXZpY2VzCiAgKi8KIHN0YXRpYyBpbnQgZW5hYmxlX3N1c3BlbmQgPSAwOwogCkBAIC0yMjMsNiArMjI1LDExIEBACiAJZXAtPmlzX2luID0gKHRtcCAmIFVTQl9ESVJfSU4pICE9IDA7CiAJaWYgKCFlcC0+aXNfaW4pCiAJCXdyaXRlbCAoKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwllbHNlIGlmIChkZXYtPnBkZXYtPmRldmljZSAhPSAweDIyODApIHsKKwkJLyogQWRkZWQgZm9yIDIyODIsIERvbid0IHVzZSBuYWsgcGFja2V0cyBvbiBhbiBpbiBlbmRwb2ludCwgdGhpcyB3YXMgaWdub3JlZCBvbiAyMjgwICovCisJCXdyaXRlbCAoKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQkJfCAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwl9CiAKIAl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9jZmcpOwogCkBAIC0yMzIsOCArMjM5LDkgQEAKIAkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOwogCiAJCXRtcCA9ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUpCi0JCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUpCi0JCQl8IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2lycWVuYik7CisJCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUpOworCQlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgyMjgwKQorCQkJdG1wIHw9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2lycWVuYik7CiAJCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX2lycWVuYik7CiAJfSBlbHNlIHsJCQkJLyogZG1hLCBwZXItcmVxdWVzdCAqLwogCQl0bXAgPSAoMSA8PCAoOCArIGVwLT5udW0pKTsJLyogY29tcGxldGlvbiAqLwpAQCAtMzE0LDEwICszMjIsMTggQEAKIAkvKiBpbml0IHRvIG91ciBjaG9zZW4gZGVmYXVsdHMsIG5vdGFibHkgc28gdGhhdCB3ZSBOQUsgT1VUCiAJICogcGFja2V0cyB1bnRpbCB0aGUgZHJpdmVyIHF1ZXVlcyBhIHJlYWQgKCtub3RlIGVycmF0dW0gMDExMikKIAkgKi8KLQl0bXAgPSAoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUpCisJaWYgKCFlcC0+aXNfaW4gfHwgZXAtPmRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkgeworCQl0bXAgPSAoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUpCiAJCXwgKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUykKIAkJfCAoMSA8PCBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSkKIAkJfCAoMSA8PCBDTEVBUl9JTlRFUlJVUFRfTU9ERSk7CisJfSBlbHNlIHsKKwkJLyogYWRkZWQgZm9yIDIyODIgKi8KKwkJdG1wID0gKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpCisJCXwgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQl8ICgxIDw8IENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFKQorCQl8ICgxIDw8IENMRUFSX0lOVEVSUlVQVF9NT0RFKTsKKwl9CiAKIAlpZiAoZXAtPm51bSAhPSAwKSB7CiAJCXRtcCB8PSAoMSA8PCBDTEVBUl9FTkRQT0lOVF9UT0dHTEUpCkBAIC0zMjYsMTQgKzM0MiwxOCBAQAogCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CiAKIAkvKiBzY3J1YiBtb3N0IHN0YXR1cyBiaXRzLCBhbmQgZmx1c2ggYW55IGZpZm8gc3RhdGUgKi8KLQl3cml0ZWwgKCAgKDEgPDwgVElNRU9VVCkKKwlpZiAoZXAtPmRldi0+cGRldi0+ZGV2aWNlID09IDB4MjI4MCkKKwkJdG1wID0gKDEgPDwgRklGT19PVkVSRkxPVykKKwkJCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpOworCWVsc2UKKwkJdG1wID0gMDsKKworCXdyaXRlbCAodG1wIHwgKDEgPDwgVElNRU9VVCkKIAkJfCAoMSA8PCBVU0JfU1RBTExfU0VOVCkKIAkJfCAoMSA8PCBVU0JfSU5fTkFLX1NFTlQpCiAJCXwgKDEgPDwgVVNCX0lOX0FDS19SQ1ZEKQogCQl8ICgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCkKIAkJfCAoMSA8PCBVU0JfT1VUX0FDS19TRU5UKQotCQl8ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCi0JCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpCiAJCXwgKDEgPDwgRklGT19GTFVTSCkKIAkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUKQogCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpCkBAIC03MTgsNyArNzM4LDcgQEAKIAkgKi8KIAlpZiAoZXAtPmlzX2luKQogCQlkbWFjb3VudCB8PSAoMSA8PCBETUFfRElSRUNUSU9OKTsKLQllbHNlIGlmICgoZG1hY291bnQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCWlmICgoIWVwLT5pc19pbiAmJiAoZG1hY291bnQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKSB8fCBlcC0+ZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHgyMjgwKQogCQlkbWFjb3VudCB8PSAoMSA8PCBFTkRfT0ZfQ0hBSU4pOwogCiAJcmVxLT52YWxpZCA9IHZhbGlkOwpAQCAtNzYwLDkgKzc4MCwxMiBAQAogc3RhdGljIHZvaWQgc3RhcnRfcXVldWUgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgdTMyIGRtYWN0bCwgdTMyIHRkX2RtYSkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwlfX2lvbWVtICpkbWEgPSBlcC0+ZG1hOworCXVuc2lnbmVkIGludCB0bXAgPSAoMSA8PCBWQUxJRF9CSVQpIHwgKGVwLT5pc19pbiA8PCBETUFfRElSRUNUSU9OKTsKIAotCXdyaXRlbCAoKDEgPDwgVkFMSURfQklUKSB8IChlcC0+aXNfaW4gPDwgRE1BX0RJUkVDVElPTiksCi0JCQkmZG1hLT5kbWFjb3VudCk7CisJaWYgKGVwLT5kZXYtPnBkZXYtPmRldmljZSAhPSAweDIyODApCisJCXRtcCB8PSAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCisJd3JpdGVsICh0bXAsICZkbWEtPmRtYWNvdW50KTsKIAl3cml0ZWwgKHJlYWRsICgmZG1hLT5kbWFzdGF0KSwgJmRtYS0+ZG1hc3RhdCk7CiAKIAl3cml0ZWwgKHRkX2RtYSwgJmRtYS0+ZG1hZGVzYyk7CkBAIC0yMTEwLDcgKzIxMzMsMTEgQEAKIAlWREVCVUcgKGVwLT5kZXYsICIlcyBhY2sgZXBfc3RhdCAlMDh4LCByZXEgJXBcbiIsCiAJCQllcC0+ZXAubmFtZSwgdCwgcmVxID8gJnJlcS0+cmVxIDogMCk7CiAjZW5kaWYKLQl3cml0ZWwgKHQgJiB+KDEgPDwgTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwlpZiAoIWVwLT5pc19pbiB8fCBlcC0+ZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgyMjgwKQorCQl3cml0ZWwgKHQgJiB+KDEgPDwgTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwllbHNlCisJCS8qIEFkZGVkIGZvciAyMjgyICovCisJCXdyaXRlbCAodCwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKIAogCS8qIGZvciBlcDAsIG1vbml0b3IgdG9rZW4gaXJxcyB0byBjYXRjaCBkYXRhIHN0YWdlIGxlbmd0aCBlcnJvcnMKIAkgKiBhbmQgdG8gc3luY2hyb25pemUgb24gc3RhdHVzLgpAQCAtMjEzOSw3ICsyMTY2LDcgQEAKIAkJCQkJZXAtPnN0b3BwZWQgPSAxOwogCQkJCQlzZXRfaGFsdCAoZXApOwogCQkJCQltb2RlID0gMjsKLQkJCQl9IGVsc2UgaWYgKCFyZXEgJiYgZXAtPnN0b3BwZWQpCisJCQkJfSBlbHNlIGlmICghcmVxICYmICFlcC0+c3RvcHBlZCkKIAkJCQkJd3JpdGVfZmlmbyAoZXAsIE5VTEwpOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjIxNCw3ICsyMjQxLDggQEAKIAkJCWlmIChsaWtlbHkgKHJlcSkpIHsKIAkJCQlyZXEtPnRkLT5kbWFjb3VudCA9IDA7CiAJCQkJdCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKTsKLQkJCQlkbWFfZG9uZSAoZXAsIHJlcSwgY291bnQsIHQpOworCQkJCWRtYV9kb25lIChlcCwgcmVxLCBjb3VudCwKKwkJCQkJKGVwLT5vdXRfb3ZlcmZsb3cgfHwgdCkgPyAtRU9WRVJGTE9XIDogMCk7CiAJCQl9CiAKIAkJCS8qIGFsc28gZmx1c2ggdG8gcHJldmVudCBlcnJhdHVtIDAxMDYgdHJvdWJsZSAqLwpAQCAtMjI1Miw5ICsyMjgwLDcgQEAKIAkJLyogaWYgd2Ugd3JvdGUgaXQgYWxsLCB3ZSdyZSB1c3VhbGx5IGRvbmUgKi8KIAkJaWYgKHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpIHsKIAkJCWlmIChlcC0+bnVtID09IDApIHsKLQkJCQkvKiB3YWl0IGZvciBjb250cm9sIHN0YXR1cyAqLwotCQkJCWlmIChtb2RlICE9IDIpCi0JCQkJCXJlcSA9IE5VTEw7CisJCQkJLyogc2VuZCB6bHBzIHVudGlsIHRoZSBzdGF0dXMgc3RhZ2UgKi8KIAkJCX0gZWxzZSBpZiAoIXJlcS0+cmVxLnplcm8gfHwgbGVuICE9IGVwLT5lcC5tYXhwYWNrZXQpCiAJCQkJbW9kZSA9IDI7CiAJCX0KQEAgLTIzMzcsNyArMjM2Myw3IEBACiAJCQl1MzIJCQlyYXcgWzJdOwogCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlyOwogCQl9IHU7Ci0JCWludAkJCQl0bXAgPSAwOworCQlpbnQJCQkJdG1wOwogCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CQkqcmVxOwogCiAJCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikgewpAQCAtMjM2NCwxNCArMjM5MCwxOSBAQAogCQl9CiAJCWVwLT5zdG9wcGVkID0gMDsKIAkJZGV2LT5wcm90b2NvbF9zdGFsbCA9IDA7Ci0JCXdyaXRlbCAoICAoMSA8PCBUSU1FT1VUKQorCisJCWlmIChlcC0+ZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgyMjgwKQorCQkJdG1wID0gKDEgPDwgRklGT19PVkVSRkxPVykKKwkJCQl8ICgxIDw8IEZJRk9fVU5ERVJGTE9XKTsKKwkJZWxzZQorCQkJdG1wID0gMDsKKworCQl3cml0ZWwgKHRtcCB8ICgxIDw8IFRJTUVPVVQpCiAJCQl8ICgxIDw8IFVTQl9TVEFMTF9TRU5UKQogCQkJfCAoMSA8PCBVU0JfSU5fTkFLX1NFTlQpCiAJCQl8ICgxIDw8IFVTQl9JTl9BQ0tfUkNWRCkKIAkJCXwgKDEgPDwgVVNCX09VVF9QSU5HX05BS19TRU5UKQogCQkJfCAoMSA8PCBVU0JfT1VUX0FDS19TRU5UKQotCQkJfCAoMSA8PCBGSUZPX09WRVJGTE9XKQotCQkJfCAoMSA8PCBGSUZPX1VOREVSRkxPVykKIAkJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCkKIAkJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCkKIAkJCXwgKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUKQpAQCAtMjM4NSw2ICsyNDE2LDggQEAKIAkJY3B1X3RvX2xlMzJzICgmdS5yYXcgWzBdKTsKIAkJY3B1X3RvX2xlMzJzICgmdS5yYXcgWzFdKTsKIAorCQl0bXAgPSAwOworCiAjZGVmaW5lCXdfdmFsdWUJCWxlMTZfdG9fY3B1cCAoJnUuci53VmFsdWUpCiAjZGVmaW5lCXdfaW5kZXgJCWxlMTZfdG9fY3B1cCAoJnUuci53SW5kZXgpCiAjZGVmaW5lCXdfbGVuZ3RoCWxlMTZfdG9fY3B1cCAoJnUuci53TGVuZ3RoKQpAQCAtMjU5NCwxMCArMjYyNywxNyBAQAogCQl3cml0ZWwgKHN0YXQsICZkZXYtPnJlZ3MtPmlycXN0YXQxKTsKIAogCS8qIHNvbWUgc3RhdHVzIHdlIGNhbiBqdXN0IGlnbm9yZSAqLwotCXN0YXQgJj0gfigoMSA8PCBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQpCi0JCQl8ICgxIDw8IFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQpCi0JCQl8ICgxIDw8IFJFU1VNRV9JTlRFUlJVUFQpCi0JCQl8ICgxIDw8IFNPRl9JTlRFUlJVUFQpKTsKKwlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgyMjgwKQorCQlzdGF0ICY9IH4oKDEgPDwgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUKQorCQkJICB8ICgxIDw8IFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQpCisJCQkgIHwgKDEgPDwgUkVTVU1FX0lOVEVSUlVQVCkKKwkJCSAgfCAoMSA8PCBTT0ZfSU5URVJSVVBUKSk7CisJZWxzZQorCQlzdGF0ICY9IH4oKDEgPDwgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUKQorCQkJICB8ICgxIDw8IFJFU1VNRV9JTlRFUlJVUFQpCisJCQkgIHwgKDEgPDwgU09GX0RPV05fSU5URVJSVVBUKQorCQkJICB8ICgxIDw8IFNPRl9JTlRFUlJVUFQpKTsKKwogCWlmICghc3RhdCkKIAkJcmV0dXJuOwogCS8vIERFQlVHIChkZXYsICJpcnFzdGF0MSAlMDh4XG4iLCBzdGF0KTsKQEAgLTI3MDIsNiArMjc0MiwxMCBAQAogewogCXN0cnVjdCBuZXQyMjgwCQkqZGV2ID0gX2RldjsKIAorCS8qIHNoYXJlZCBpbnRlcnJ1cHQsIG5vdCBvdXJzICovCisJaWYgKCEocmVhZGwoJmRldi0+cmVncy0+aXJxc3RhdDApICYgKDEgPDwgSU5UQV9BU1NFUlRFRCkpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKIAlzcGluX2xvY2sgKCZkZXYtPmxvY2spOwogCiAJLyogaGFuZGxlIGRpc2Nvbm5lY3QsIGRtYSwgYW5kIG1vcmUgKi8KQEAgLTI3ODksMTMgKzI4MzMsMTMgQEAKIAl9CiAKIAkvKiBhbGxvYywgYW5kIHN0YXJ0IGluaXQgKi8KLQlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOworCWRldiA9IGt6YWxsb2MgKHNpemVvZiAqZGV2LCBTTEFCX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKXsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAotCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJcGNpX3NldF9kcnZkYXRhIChwZGV2LCBkZXYpOwogCXNwaW5fbG9ja19pbml0ICgmZGV2LT5sb2NrKTsKIAlkZXYtPnBkZXYgPSBwZGV2OwogCWRldi0+Z2FkZ2V0Lm9wcyA9ICZuZXQyMjgwX29wczsKQEAgLTI5MDgsNyArMjk1Miw2IEBACiAJZGV2LT5jaGlwcmV2ID0gZ2V0X2lkeF9yZWcgKGRldi0+cmVncywgUkVHX0NISVBSRVYpICYgMHhmZmZmOwogCiAJLyogZG9uZSAqLwotCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgZGV2KTsKIAlJTkZPIChkZXYsICIlc1xuIiwgZHJpdmVyX2Rlc2MpOwogCUlORk8gKGRldiwgImlycSAlcywgcGNpIG1lbSAlcCwgY2hpcCByZXYgJTA0eFxuIiwKIAkJCWJ1ZnAsIGJhc2UsIGRldi0+Y2hpcHJldik7CkBAIC0yOTM5LDYgKzI5ODIsMTMgQEAKIAkuZGV2aWNlID0JMHgyMjgwLAogCS5zdWJ2ZW5kb3IgPQlQQ0lfQU5ZX0lELAogCS5zdWJkZXZpY2UgPQlQQ0lfQU5ZX0lELAorfSwgeworCS5jbGFzcyA9IAkoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSksCisJLmNsYXNzX21hc2sgPSAJfjAsCisJLnZlbmRvciA9CTB4MTdjYywKKwkuZGV2aWNlID0JMHgyMjgyLAorCS5zdWJ2ZW5kb3IgPQlQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPQlQQ0lfQU5ZX0lELAogCiB9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKaW5kZXggZmZmNDUwOS4uOTU3ZDZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCkBAIC0yMiw0MjAgKzIyLDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBORVQyMjgwIE1FTU9SWSBNQVBQRUQgUkVHSVNURVJTCi0gKgotICogVGhlIHJlZ2lzdGVyIGxheW91dCBjYW1lIGZyb20gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoZSBiaXQKLSAqIG51bWJlciBkZWZpbml0aW9ucyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNoaXAgc3BlY2lmaWNhdGlvbi4KLSAqCi0gKiBVc2UgdGhlIHNoaWZ0IG9wZXJhdG9yICgnPDwnKSB0byBidWlsZCBiaXQgbWFza3MsIHdpdGggcmVhZGwvd3JpdGVsCi0gKiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyB0aHJvdWdoIFBDSS4KLSAqLwotCi0vKiBtYWluIHJlZ2lzdGVycywgQkFSMCArIDB4MDAwMCAqLwotc3RydWN0IG5ldDIyODBfcmVncyB7Ci0JLy8gb2Zmc2V0IDB4MDAwMAotCXUzMgkJZGV2aW5pdDsKLSNkZWZpbmUgICAgIExPQ0FMX0NMT0NLX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBGT1JDRV9QQ0lfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgUENJX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFBDSV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBGSUZPX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgQ0ZHX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFBDSV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBVU0JfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgTTgwNTFfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWVlY3RsOwotI2RlZmluZSAgICAgRUVQUk9NX0FERFJFU1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgICAgIEVFUFJPTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSAgICAgRUVQUk9NX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBFRVBST01fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIEVFUFJPTV9DSElQX1NFTEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfUkVBRF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBFRVBST01fQllURV9XUklURV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEVFUFJPTV9SRUFEX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBFRVBST01fV1JJVEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJZWVjbGtmcmVxOwotCXUzMgkJX3VudXNlZDA7Ci0JLy8gb2Zmc2V0IDB4MDAxMAotCi0JdTMyCQlwY2lpcnFlbmIwOwkJLyogaW50ZXJydXB0IFBDSSBtYXN0ZXIgLi4uICovCi0jZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCXBjaWlycWVuYjE7Ci0jZGVmaW5lICAgICBQQ0lfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX0FTU0VSVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTgKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWNwdV9pcnFlbmIwOwkJLyogLi4uIG9yIG9uYm9hcmQgODA1MSAqLwotI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQljcHVfaXJxZW5iMTsKLSNkZWZpbmUgICAgIENQVV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQotI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCi0JLy8gb2Zmc2V0IDB4MDAyMAotCXUzMgkJX3VudXNlZDE7Ci0JdTMyCQl1c2JpcnFlbmIxOwotI2RlZmluZSAgICAgVVNCX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgotI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlpcnFzdGF0MDsKLSNkZWZpbmUgICAgIElOVEFfQVNTRVJURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlpcnFzdGF0MTsKLSNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQkvLyBvZmZzZXQgMHgwMDMwCi0JdTMyCQlpZHhhZGRyOwotCXUzMgkJaWR4ZGF0YTsKLQl1MzIJCWZpZm9jdGw7Ci0jZGVmaW5lICAgICBQQ0lfQkFTRTJfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIElHTk9SRV9GSUZPX0FWQUlMQUJJTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBQQ0lfQkFTRTJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRklGT19DT05GSUdVUkFUSU9OX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCV91bnVzZWQyOwotCS8vIG9mZnNldCAweDAwNDAKLQl1MzIJCW1lbWFkZHI7Ci0jZGVmaW5lICAgICBTVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgICAgIERJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgRklGT19ESUFHTk9TVElDX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBNRU1PUllfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJbWVtZGF0YTA7Ci0JdTMyCQltZW1kYXRhMTsKLQl1MzIJCV91bnVzZWQzOwotCS8vIG9mZnNldCAweDAwNTAKLQl1MzIJCWdwaW9jdGw7Ci0jZGVmaW5lICAgICBHUElPM19MRURfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgR1BJTzJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBHUElPMV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgR1BJTzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIEdQSU8zX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBHUElPMl9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgR1BJTzFfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIEdQSU8wX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBHUElPM19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgR1BJTzJfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEdQSU8xX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBHUElPMF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJZ3Bpb3N0YXQ7Ci0jZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgR1BJTzJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEdQSU8xX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBHUElPMF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIHVzYiBjb250cm9sLCBCQVIwICsgMHgwMDgwICovCi1zdHJ1Y3QgbmV0MjI4MF91c2JfcmVncyB7Ci0JLy8gb2Zmc2V0IDB4MDA4MAotCXUzMgkJc3RkcnNwOwotI2RlZmluZSAgICAgU1RBTExfVU5TVVBQT1JURURfUkVRVUVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBTRVRfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdFVF9PVEhFUl9TUEVFRF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSAgICAgR0VUX0RFVklDRV9RVUFMSUZJRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lICAgICBTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIEVORFBPSU5UX1NFVF9DTEVBUl9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgREVWSUNFX1NFVF9DTEVBUl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgR0VUX1NFVF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEdFVF9TRVRfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBHRVRfQ09ORklHVVJBVElPTl9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgR0VUX0RFVklDRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdFVF9FTkRQT0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHRVRfSU5URVJGQUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR0VUX0RFVklDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCXByb2R2ZW5kaWQ7Ci0jZGVmaW5lICAgICBQUk9EVUNUX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIFZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlyZWxudW07Ci0JdTMyCQl1c2JjdGw7Ci0jZGVmaW5lICAgICBTRVJJQUxfTlVNQkVSX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIFBST0RVQ1RfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgVkVORE9SX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBVU0JfUk9PVF9QT1JUX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIFZCVVNfUElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgVElNRURfRElTQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIFNVU1BFTkRfSU1NRURJQVRFTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBTRUxGX1BPV0VSRURfVVNCX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUkVNT1RFX1dBS0VVUF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIFBNRV9QT0xBUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBVU0JfREVURUNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgUE1FX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIERFVklDRV9SRU1PVEVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTRUxGX1BPV0VSRURfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCS8vIG9mZnNldCAweDAwOTAKLQl1MzIJCXVzYnN0YXQ7Ci0jZGVmaW5lICAgICBISUdIX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgRlVMTF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEdFTkVSQVRFX1JFU1VNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBHRU5FUkFURV9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgICAgICAgICAgNAotCXUzMgkJeGN2cmRpYWc7Ci0jZGVmaW5lICAgICBGT1JDRV9ISUdIX1NQRUVEX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIEZPUkNFX0ZVTExfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSAgICAgVVNCX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBMSU5FX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX09QRVJBVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBUUkFOU0NFSVZFUl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgVEVSTUlOQVRJT05fU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCXNldHVwMDEyMzsKLQl1MzIJCXNldHVwNDU2NzsKLQkvLyBvZmZzZXQgMHgwMDkwCi0JdTMyCQlfdW51c2VkMDsKLQl1MzIJCW91cmFkZHI7Ci0jZGVmaW5lICAgICBGT1JDRV9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgT1VSX1VTQl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCW91cmNvbmZpZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBwY2kgY29udHJvbCwgQkFSMCArIDB4MDEwMCAqLwotc3RydWN0IG5ldDIyODBfcGNpX3JlZ3MgewotCS8vIG9mZnNldCAweDAxMDAKLQl1MzIJCSBwY2ltc3RjdGw7Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9QQVJLX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIFBDSV9NVUxUSSBMRVZFTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBETUFfTUVNT1JZX1dSSVRFX0FORF9JTlZBTElEQVRFX0VOQUJMRSAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIERNQV9SRUFEX01VTFRJUExFX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBETUFfUkVBRF9MSU5FX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgUENJX01BU1RFUl9DT01NQU5EX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgICAgICBNRU1fUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIElPX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICAgICAgQ0ZHX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgUENJX01BU1RFUl9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQllURV9XUklURV9FTkFCTEVTICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQkgcGNpbXN0YWRkcjsKLQl1MzIJCSBwY2ltc3RkYXRhOwotCXUzMgkJIHBjaW1zdHN0YXQ7Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUENJX0VYVEVSTkFMX0FSQklURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFBDSV9IT1NUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogZG1hIGNvbnRyb2wsIEJBUjAgKyAweDAxODAgLi4uIGFycmF5IG9mIGZvdXIgc3RydWN0cyBsaWtlIHRoaXMsCi0gKiBmb3IgY2hhbm5lbHMgMC4uMy4gIHNlZSBhbHNvIHN0cnVjdCBuZXQyMjgwX2RtYTogIGRlc2NyaXB0b3IKLSAqIHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIHNvbWUgb2YgdGhlc2UgcmVnaXN0ZXJzLgotICovCi1zdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyB7CS8qIFsxMS43XSAqLwotCS8vIG9mZnNldCAweDAxODAsIDB4MDFhMCwgMHgwMWMwLCAweDAxZTAsIAotCXUzMgkJZG1hY3RsOwotI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBETUFfQ0xFQVJfQ09VTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIERFU0NSSVBUT1JfUE9MTElOR19SQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSAgICAgICAgIFBPTExfQ09OVElOVU9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgUE9MTF8xX1VTRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgICAgICBQT0xMXzEwMF9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgICAgIFBPTExfMV9NU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBETUFfVkFMSURfQklUX1BPTExJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgICAgIERNQV9WQUxJRF9CSVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBETUFfT1VUX0FVVE9fU1RBUlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgRE1BX1BSRUVNUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIERNQV9GSUZPX1ZBTElEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBETUFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgRE1BX0FERFJFU1NfSE9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWRtYXN0YXQ7Ci0jZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgICAgIERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgRE1BX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIERNQV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQlfdW51c2VkMCBbMl07Ci0JLy8gb2Zmc2V0IDB4MDE5MCwgMHgwMWIwLCAweDAxZDAsIDB4MDFmMCwgCi0JdTMyCQlkbWFjb3VudDsKLSNkZWZpbmUgICAgIFZBTElEX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgRE1BX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lICAgICBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgICAgIEVORF9PRl9DSEFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSAgICAgICAgIERNQV9CWVRFX0NPVU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDE8PDI0KS0xKQotI2RlZmluZSAgICAgRE1BX0JZVEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIJCWRtYWFkZHI7Ci0JdTMyCQlkbWFkZXNjOwotCXUzMgkJX3VudXNlZDE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogZGVkaWNhdGVkIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDIwMCAqLwotCi1zdHJ1Y3QgbmV0MjI4MF9kZXBfcmVncyB7CS8qIFsxMS44XSAqLwotCS8vIG9mZnNldCAweDAyMDAsIDB4MDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MAotCXUzMgkJZGVwX2NmZzsKLQkvLyBvZmZzZXQgMHgwMjA0LCAweDAyMTQsIDB4MjI0LCAweDIzNCwgMHgyNDQKLQl1MzIJCWRlcF9yc3A7Ci0JdTMyCQlfdW51c2VkIFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBjb25maWd1cmFibGUgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMzAwIC4uLiBhcnJheSBvZiBzZXZlbiBzdHJ1Y3RzCi0gKiBsaWtlIHRoaXMsIGZvciBlcDAgdGhlbiB0aGUgY29uZmlndXJhYmxlIGVuZHBvaW50cyBBLi5GCi0gKiBlcDAgcmVzZXJ2ZWQgZm9yIGNvbnRyb2w7IEUgYW5kIEYgaGF2ZSBvbmx5IDY0IGJ5dGVzIG9mIGZpZm8KLSAqLwotc3RydWN0IG5ldDIyODBfZXBfcmVncyB7CS8qIFsxMS45XSAqLwotCS8vIG9mZnNldCAweDAzMDAsIDB4MDMyMCwgMHgwMzQwLCAweDAzNjAsIDB4MDM4MCwgMHgwM2EwLCAweDAzYzAKLQl1MzIJCWVwX2NmZzsKLSNkZWZpbmUgICAgIEVORFBPSU5UX0JZVEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRU5EUE9JTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBFTkRQT0lOVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgRU5EUE9JTlRfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX05VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyCQllcF9yc3A7Ci0jZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgICAgIFNFVF9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSAgICAgU0VUX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBTRVRfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFNFVF9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgQ0xFQVJfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIENMRUFSX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJZXBfaXJxZW5iOwotI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMAotCXUzMgkJZXBfc3RhdDsKLSNkZWZpbmUgICAgIEZJRk9fVkFMSURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgSElHSF9CQU5EV0lEVEhfT1VUX1RSQU5TQUNUSU9OX1BJRCAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIFVTQl9TVEFMTF9TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSAgICAgVVNCX0lOX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBVU0JfSU5fQUNLX1JDVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgICAgIFVTQl9PVVRfUElOR19OQUtfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgVVNCX09VVF9BQ0tfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBGSUZPX09WRVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIEZJRk9fVU5ERVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgRklGT19GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBGSUZPX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIEZJRk9fRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIE5BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCS8vIG9mZnNldCAweDAzMTAsIDB4MDMzMCwgMHgwMzUwLCAweDAzNzAsIDB4MDM5MCwgMHgwM2IwLCAweDAzZDAKLQl1MzIJCWVwX2F2YWlsOwotCXUzMgkJZXBfZGF0YTsKLQl1MzIJCV91bnVzZWQwIFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2luY2x1ZGUgPGxpbnV4L3VzYi9uZXQyMjgwLmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IDUxNDI0ZjYuLjY4ZTNkOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtNTcyLDkgKzU3MiwxMCBAQAogCXN3aXRjaCAoc3RhdHVzKSB7CiAKIAljYXNlIDA6IAkJCS8qIG5vcm1hbCBjb21wbGV0aW9uPyAqLwotCQlpZiAoZXAgPT0gZGV2LT5vdXRfZXApCisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkgewogCQkJY2hlY2tfcmVhZF9kYXRhIChkZXYsIGVwLCByZXEpOwotCQllbHNlCisJCQltZW1zZXQgKHJlcS0+YnVmLCAweDU1LCByZXEtPmxlbmd0aCk7CisJCX0gZWxzZQogCQkJcmVpbml0X3dyaXRlX2RhdGEgKGRldiwgZXAsIHJlcSk7CiAJCWJyZWFrOwogCkBAIC02MjYsNiArNjI3LDggQEAKIAogCWlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9JTl9OQU1FKSA9PSAwKQogCQlyZWluaXRfd3JpdGVfZGF0YSAoZXAtPmRyaXZlcl9kYXRhLCBlcCwgcmVxKTsKKwllbHNlCisJCW1lbXNldCAocmVxLT5idWYsIDB4NTUsIHJlcS0+bGVuZ3RoKTsKIAogCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZSAoZXAsIHJlcSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggMWUwM2YxYS4uYTFiZDJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAvKiBQQ0kgZHJpdmVyIHNlbGVjdGlvbiBtZXRhZGF0YTsgUENJIGhvdHBsdWdnaW5nIHVzZXMgdGhpcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKIAkvKiBoYW5kbGUgYW55IFVTQiAyLjAgRUhDSSBjb250cm9sbGVyICovCi0JUENJX0RFVklDRV9DTEFTUygoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgyMCksIH4wKSwKKwlQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19TRVJJQUxfVVNCX0VIQ0ksIH4wKSwKIAkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJmVoY2lfcGNpX2hjX2RyaXZlciwKIAl9LAogCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCmluZGV4IDk4MDAzMGQ2Li42YjczNTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogCiAjaWZuZGVmIENPTkZJR19BUkNIX0FUOTFSTTkyMDAKLSNlcnJvciAiVGhpcyBmaWxlIGlzIEFUOTFSTTkyMDAgYnVzIGdsdWUuICBDT05GSUdfQVJDSF9BVDkxUk05MjAwIG11c3QgYmUgZGVmaW5lZC4iCisjZXJyb3IgIkNPTkZJR19BUkNIX0FUOTFSTTkyMDAgbXVzdCBiZSBkZWZpbmVkLiIKICNlbmRpZgogCiAvKiBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uIGNsb2NrcyAqLwpAQCAtODQsOCArODQsNiBAQAogICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKICAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CiAgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCi0gKgotICogU3RvcmUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgSENEJ3Mgc3RydWN0IHBjaV9kcml2ZXIgYXMgcHJvYmUoKS4KICAqLwogaW50IHVzYl9oY2RfYXQ5MV9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMTQ4LDcgKzE0Niw2IEBACiB9CiAKIAotLyogbWF5IGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2xsZXIgZWxlY3RyaWNhbGx5IHByZXNlbnQgKi8KIC8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb250cm9sbGVyLCBidXMsIGFuZCBkZXZpY2VzIGFjdGl2ZSAqLwogCiAvKioKQEAgLTE2NiwxMSArMTYzLDExIEBACiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAlhdDkxX3N0b3BfaGMocGRldik7CiAJaW91bm1hcChoY2QtPnJlZ3MpOwotIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAotIAljbGtfcHV0KGZjbGspOwotIAljbGtfcHV0KGljbGspOwotIAlmY2xrID0gaWNsayA9IE5VTEw7CisJY2xrX3B1dChmY2xrKTsKKwljbGtfcHV0KGljbGspOworCWZjbGsgPSBpY2xrID0gTlVMTDsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKIAlyZXR1cm4gMDsKQEAgLTIzNSw4ICsyMzIsOCBAQAogCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAogCiAjaWZkZWYgQ09ORklHX1BNCi0JLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCi0JLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKICNlbmRpZgogCS5zdGFydF9wb3J0X3Jlc2V0ID0Jb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAogfTsKQEAgLTI1NCwyMSArMjUxLDIxIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXQ5MV9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQotewotCXByaW50aygiJXMoJXM6JWQpOiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLAotCQlfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKIAorLyogUkVWSVNJVCBzdXNwZW5kL3Jlc3VtZSBsb29rICJ0b28iIHNpbXBsZSBoZXJlICovCisKK3N0YXRpYyBpbnQKK29oY2lfaGNkX2F0OTFfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKIAljbGtfZGlzYWJsZShmY2xrKTsKKwljbGtfZGlzYWJsZShpY2xrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXQ5MV9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoIiVzKCVzOiVkKTogbm90IGltcGxlbWVudGVkIHlldFxuIiwKLQkJX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0KKwljbGtfZW5hYmxlKGljbGspOwogCWNsa19lbmFibGUoZmNsayk7CiAKIAlyZXR1cm4gMDsKQEAgLTI3OCw2ICsyNzUsOCBAQAogI2RlZmluZSBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUgIE5VTEwKICNlbmRpZgogCitNT0RVTEVfQUxJQVMoImF0OTFybTkyMDAtb2hjaSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9hdDkxX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXQ5MV9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNTQ0Zjc1OC4uNzNmNWEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtODYzLDcgKzg2Myw3IEBACiAJCWkgPSBvaGNpLT5udW1fcG9ydHM7CiAJCXdoaWxlIChpLS0pCiAJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFNTLAotCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKKwkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFtpXSk7CiAJCW9oY2lfZGJnIChvaGNpLCAicmVzdGFydCBjb21wbGV0ZVxuIik7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDFiZmU5NmYuLmIyNjg1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgewogCS8qIGhhbmRsZSBhbnkgVVNCIE9IQ0kgY29udHJvbGxlciAqLwotCVBDSV9ERVZJQ0VfQ0xBU1MoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgxMCwgfjApLAorCVBDSV9ERVZJQ0VfQ0xBU1MoUENJX0NMQVNTX1NFUklBTF9VU0JfT0hDSSwgfjApLAogCS5kcml2ZXJfZGF0YSA9CSh1bnNpZ25lZCBsb25nKSAmb2hjaV9wY2lfaGNfZHJpdmVyLAogCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggYWNkZTg4Ni4uZmFmZTdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMTg1LDYgKzE4NSw5IEBACiAJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLwogCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0oaW5mLT5wb3J0X21vZGUpOwogCisJaWYgKGluZi0+cG93ZXJfYnVkZ2V0KQorCQloY2QtPnBvd2VyX2J1ZGdldCA9IGluZi0+cG93ZXJfYnVkZ2V0OworCiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCA2ODJiZjIyLi4xZGE1ZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTMwLDYgKzMwLDcgQEAKIC8qIGNsb2NrIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGhjZCAqLwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKnVzYl9jbGs7CiAKIC8qIGZvcndhcmQgZGVmaW5pdGlvbnMgKi8KIApAQCAtMzcsNyArMzgsNyBAQAogCiAvKiBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLwogCi1zdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqdG9fczNjMjQxMF9pbmZvKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKnRvX3MzYzI0MTBfaW5mbyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXJldHVybiBoY2QtPnNlbGYuY29udHJvbGxlci0+cGxhdGZvcm1fZGF0YTsKIH0KQEAgLTQ3LDYgKzQ4LDEwIEBACiAJc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKmluZm8gPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJZGV2X2RiZygmZGV2LT5kZXYsICJzM2MyNDEwX3N0YXJ0X2hjOlxuIik7CisKKwljbGtfZW5hYmxlKHVzYl9jbGspOworCW1kZWxheSgyKTsJCQkvKiBsZXQgdGhlIGJ1cyBjbG9jayBzdGFiaWxpc2UgKi8KKwogCWNsa19lbmFibGUoY2xrKTsKIAogCWlmIChpbmZvICE9IE5VTEwpIHsKQEAgLTc1LDYgKzgwLDcgQEAKIAl9CiAKIAljbGtfZGlzYWJsZShjbGspOworCWNsa19kaXNhYmxlKHVzYl9jbGspOwogfQogCiAvKiBvaGNpX3MzYzI0MTBfaHViX3N0YXR1c19kYXRhCkBAIC0zMTYsNyArMzIyLDggQEAKICAqCiAqLwogCi12b2lkIHVzYl9oY2RfczNjMjQxMF9yZW1vdmUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkCit1c2JfaGNkX3MzYzI0MTBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAlzM2MyNDEwX3N0b3BfaGMoZGV2KTsKQEAgLTMzNCw4ICszNDEsOCBAQAogICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgogICoKICAqLwotaW50IHVzYl9oY2RfczNjMjQxMF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAotCQkJICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCB1c2JfaGNkX3MzYzI0MTBfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gTlVMTDsKIAlpbnQgcmV0dmFsOwpAQCAtMzUzLDE0ICszNjAsMjEgQEAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKIAkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycjA7CisJCWdvdG8gZXJyX3B1dDsKIAl9CiAKLQljbGsgPSBjbGtfZ2V0KE5VTEwsICJ1c2ItaG9zdCIpOworCWNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXNiLWhvc3QiKTsKIAlpZiAoSVNfRVJSKGNsaykpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1ob3N0IGNsb2NrXG4iKTsKIAkJcmV0dmFsID0gLUVOT0VOVDsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycl9tZW07CisJfQorCisJdXNiX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXBsbCIpOworCWlmIChJU19FUlIodXNiX2NsaykpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1ob3N0IGNsb2NrXG4iKTsKKwkJcmV0dmFsID0gLUVOT0VOVDsKKwkJZ290byBlcnJfY2xrOwogCX0KIAogCXMzYzI0MTBfc3RhcnRfaGMoZGV2LCBoY2QpOwpAQCAtMzY5LDI2ICszODMsMjkgQEAKIAlpZiAoIWhjZC0+cmVncykgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAogCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CiAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CiAJaWYgKHJldHZhbCAhPSAwKQotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvcmVtYXA7CiAKIAlyZXR1cm4gMDsKIAotIGVycjI6CisgZXJyX2lvcmVtYXA6CiAJczNjMjQxMF9zdG9wX2hjKGRldik7CiAJaW91bm1hcChoY2QtPnJlZ3MpOworCWNsa19wdXQodXNiX2Nsayk7CisKKyBlcnJfY2xrOgogCWNsa19wdXQoY2xrKTsKIAotIGVycjE6CisgZXJyX21lbToKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAotIGVycjA6CisgZXJyX3B1dDoKIAl1c2JfcHV0X2hjZChoY2QpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IDllODFjMjYuLjEwNDVmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgInBjaS1xdWlya3MuaCIKIAogCiAjZGVmaW5lIFVIQ0lfVVNCTEVHU1VQCQkweGMwCQkvKiBsZWdhY3kgc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmggYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTElOVVhfVVNCX1BDSV9RVUlSS1NfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9QQ0lfUVVJUktTX0gKKwordm9pZCB1aGNpX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOworaW50IHVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOworCisjZW5kaWYgIC8qICBfX0xJTlVYX1VTQl9QQ0lfUVVJUktTX0ggICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKaW5kZXggMTM0ZDIwMC4uMzAyYWExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYwpAQCAtNjcsMTEgKzY3LDExIEBACiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtERVZfTkFNRV9MRU5dICA9ICJzbDgxMV9jcyI7CiAKIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7Ci0JZGV2X2xpbmtfdAkJbGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJZGV2X25vZGVfdAkJbm9kZTsKIH0gbG9jYWxfaW5mb190OwogCi1zdGF0aWMgdm9pZCBzbDgxMV9jc19yZWxlYXNlKGRldl9saW5rX3QgKiBsaW5rKTsKK3N0YXRpYyB2b2lkIHNsODExX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTEzOCw0MSArMTM4LDI3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgdm9pZCBzbDgxMV9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHZvaWQgc2w4MTFfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocF9kZXYpOwotCiAJREJHKDAsICJzbDgxMV9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0JbGluay0+c3RhdGUgJj0gfkRFVl9QUkVTRU5UOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXNsODExX2NzX3JlbGVhc2UobGluayk7CisJc2w4MTFfY3NfcmVsZWFzZShsaW5rKTsKIAogCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBwYXJlbnQgbG9jYWxfaW5mb190IHN0cnVjdCAqLwogCWtmcmVlKGxpbmstPnByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBzbDgxMV9jc19yZWxlYXNlKGRldl9saW5rX3QgKiBsaW5rKQorc3RhdGljIHZvaWQgc2w4MTFfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmspCiB7Ci0KIAlEQkcoMCwgInNsODExX2NzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0JLyogVW5saW5rIHRoZSBkZXZpY2UgY2hhaW4gKi8KLQlsaW5rLT5kZXYgPSBOVUxMOwotCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kZXYpOwotCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CiB9CiAKLXN0YXRpYyB2b2lkIHNsODExX2NzX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBzbDgxMV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90CQloYW5kbGUgPSBsaW5rLT5oYW5kbGU7Ci0Jc3RydWN0IGRldmljZQkJKnBhcmVudCA9ICZoYW5kbGVfdG9fZGV2KGhhbmRsZSk7CisJc3RydWN0IGRldmljZQkJKnBhcmVudCA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCWxvY2FsX2luZm9fdAkJKmRldiA9IGxpbmstPnByaXY7CiAJdHVwbGVfdAkJCXR1cGxlOwogCWNpc3BhcnNlX3QJCXBhcnNlOwpAQCAtMTg4LDI3ICsxNzQsMjMgQEAKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKLQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAKLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KIAkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwogCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAotCQkJcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7CisJCQlwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwogCiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CiAJd2hpbGUgKDEpIHsKIAkJY2lzdHBsX2NmdGFibGVfZW50cnlfdAkqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKIAotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSAhPSAwCi0JCQkJfHwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwCisJCQkJfHwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKQogCQkJCQkJIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIApAQCAtMjM0LDEwICsyMTYsMTAgQEAKIAkJfQogCiAJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CiAJCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisJCQlsaW5rLT5jb25mLlZwcCA9CiAJCQkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKIAogCQkvKiB3ZSBuZWVkIGFuIGludGVycnVwdCAqLwpAQCAtMjU0LDE1ICsyMzYsMTQgQEAKIAkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKIAkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwogCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pICE9IDApCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQogCQkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJfQogCQlicmVhazsKIAogbmV4dF9lbnRyeToKLQkJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQkJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpOworCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAJfQogCiAJLyogcmVxdWlyZSBhbiBJUlEgYW5kIHR3byByZWdpc3RlcnMgKi8KQEAgLTI3MCw3MSArMjUxLDQ2IEBACiAJCWdvdG8gY3NfZmFpbGVkOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCUNTX0NIRUNLKFJlcXVlc3RJUlEsCi0JCQlwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJCQlwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogCWVsc2UKIAkJZ290byBjc19mYWlsZWQ7CiAKIAlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisJCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCBkcml2ZXJfbmFtZSk7CiAJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKLQlsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6IFZjYyAlZC4lZCIsCi0JICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCwKLQkgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCisJICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuVnBwKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAvMTAsIGxpbmstPmNvbmYuVnBwJTEwKTsKIAlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKIAkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKIAlwcmludGsoIlxuIik7CiAKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwotCiAJaWYgKHNsODExX2hjX2luaXQocGFyZW50LCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkKIAkJCTwgMCkgewogY3NfZmFpbGVkOgogCQlwcmludGsoInNsODExX2NzX2NvbmZpZyBmYWlsZWRcbiIpOwotCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwkJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCQlzbDgxMV9jc19yZWxlYXNlKGxpbmspOwotCQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCQlyZXR1cm4gIC1FTk9ERVY7CiAJfQotfQotCi1zdGF0aWMgaW50IHNsODExX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbDgxMV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKLXsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7Ci0KLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKLQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNsODExX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IHNsODExX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0JZGV2X2xpbmtfdCAqbGluazsKIAogCWxvY2FsID0ga21hbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsb2NhbCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGxvY2FsLCAwLCBzaXplb2YobG9jYWxfaW5mb190KSk7Ci0JbGluayA9ICZsb2NhbC0+bGluazsKKwlsb2NhbC0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEluaXRpYWxpemUgKi8KQEAgLTM0MywxNiArMjk5LDkgQEAKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwotCWxpbmstPmNvbmYuVmNjID0gMzM7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlsaW5rLT5oYW5kbGUgPSBwX2RldjsKLQlwX2Rldi0+aW5zdGFuY2UgPSBsaW5rOwotCi0JbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7Ci0Jc2w4MTFfY3NfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNsODExX2NzX2NvbmZpZyhsaW5rKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHNsODExX2lkc1tdID0gewpAQCAtMzY2LDExICszMTUsOSBAQAogCS5kcnYJCT0gewogCQkubmFtZQk9IChjaGFyICopZHJpdmVyX25hbWUsCiAJfSwKLQkucHJvYmUJCT0gc2w4MTFfY3NfYXR0YWNoLAorCS5wcm9iZQkJPSBzbDgxMV9jc19wcm9iZSwKIAkucmVtb3ZlCQk9IHNsODExX2NzX2RldGFjaCwKIAkuaWRfdGFibGUJPSBzbDgxMV9pZHMsCi0JLnN1c3BlbmQJPSBzbDgxMV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2w4MTFfcmVzdW1lLAogfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggNGVkYjgzMy4uZDIyNWUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtNTAsNiArNTAsNyBAQAogCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKICNpbmNsdWRlICJ1aGNpLWhjZC5oIgorI2luY2x1ZGUgInBjaS1xdWlya3MuaCIKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KQEAgLTEwMCw5ICsxMDEsNiBAQAogI2luY2x1ZGUgInVoY2ktcS5jIgogI2luY2x1ZGUgInVoY2ktaHViLmMiCiAKLWV4dGVybiB2b2lkIHVoY2lfcmVzZXRfaGMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGxvbmcgYmFzZSk7Ci1leHRlcm4gaW50IHVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOwotCiAvKgogICogRmluaXNoIHVwIGEgaG9zdCBjb250cm9sbGVyIHJlc2V0IGFuZCB1cGRhdGUgdGhlIHJlY29yZGVkIHN0YXRlLgogICovCkBAIC0xMTcsOCArMTE1LDcgQEAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkKIAkJb3V0dygwLCB1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIChwb3J0ICogMikpOwogCi0JdWhjaS0+cG9ydF9jX3N1c3BlbmQgPSB1aGNpLT5zdXNwZW5kZWRfcG9ydHMgPQotCQkJdWhjaS0+cmVzdW1pbmdfcG9ydHMgPSAwOworCXVoY2ktPnBvcnRfY19zdXNwZW5kID0gdWhjaS0+cmVzdW1pbmdfcG9ydHMgPSAwOwogCXVoY2ktPnJoX3N0YXRlID0gVUhDSV9SSF9SRVNFVDsKIAl1aGNpLT5pc19zdG9wcGVkID0gVUhDSV9JU19TVE9QUEVEOwogCXVoY2lfdG9faGNkKHVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CkBAIC04NjEsNyArODU4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHVoY2lfcGNpX2lkc1tdID0geyB7CiAJLyogaGFuZGxlIGFueSBVU0IgVUhDSSBjb250cm9sbGVyICovCi0JUENJX0RFVklDRV9DTEFTUygoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgwMCksIH4wKSwKKwlQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19TRVJJQUxfVVNCX1VIQ0ksIH4wKSwKIAkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJnVoY2lfZHJpdmVyLAogCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKaW5kZXggNGE2OWM3ZS4uZDVjOGY0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaApAQCAtNDE1LDcgKzQxNSw2IEBACiAKIAkvKiBTdXBwb3J0IGZvciBwb3J0IHN1c3BlbmQvcmVzdW1lL3Jlc2V0ICovCiAJdW5zaWduZWQgbG9uZyBwb3J0X2Nfc3VzcGVuZDsJCS8qIEJpdC1hcnJheXMgb2YgcG9ydHMgKi8KLQl1bnNpZ25lZCBsb25nIHN1c3BlbmRlZF9wb3J0czsKIAl1bnNpZ25lZCBsb25nIHJlc3VtaW5nX3BvcnRzOwogCXVuc2lnbmVkIGxvbmcgcG9ydHNfdGltZW91dDsJCS8qIFRpbWUgdG8gc3RvcCBzaWduYWxsaW5nICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwppbmRleCAxNTI5NzFkLi5jODQ1MWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCkBAIC04NSwxMSArODUsMTAgQEAKIHsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpKSB7CisJaWYgKGludyhwb3J0X2FkZHIpICYgKFVTQlBPUlRTQ19TVVNQIHwgVVNCUE9SVFNDX1JEKSkgewogCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1NVU1AgfCBVU0JQT1JUU0NfUkQpOwotCQljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7Ci0JCWNsZWFyX2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpOwotCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5wb3J0X2Nfc3VzcGVuZCk7CisJCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpKQorCQkJc2V0X2JpdChwb3J0LCAmdWhjaS0+cG9ydF9jX3N1c3BlbmQpOwogCiAJCS8qIFRoZSBjb250cm9sbGVyIHdvbid0IGFjdHVhbGx5IHR1cm4gb2ZmIHRoZSBSRCBiaXQgdW50aWwKIAkJICogaXQgaGFzIGhhZCBhIGNoYW5jZSB0byBzZW5kIGEgbG93LXNwZWVkIEVPUCBzZXF1ZW5jZSwKQEAgLTk3LDYgKzk2LDcgQEAKIAkJICogc2xpZ2h0bHkgbG9uZ2VyIGZvciBnb29kIGx1Y2suICovCiAJCXVkZWxheSg0KTsKIAl9CisJY2xlYXJfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cyk7CiB9CiAKIC8qIFdhaXQgZm9yIHRoZSBVSENJIGNvbnRyb2xsZXIgaW4gSFAncyBpTE8yIHNlcnZlciBtYW5hZ2VtZW50IGNoaXAuCkBAIC0yNjUsOCArMjY1LDYgQEAKIAkJCXdQb3J0Q2hhbmdlIHw9IFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EOwogCQkJbHN0YXR1cyB8PSAxOwogCQl9Ci0JCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKSkKLQkJCWxzdGF0dXMgfD0gMjsKIAkJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cykpCiAJCQlsc3RhdHVzIHw9IDQ7CiAKQEAgLTMwOSw3ICszMDcsNiBAQAogCiAJCXN3aXRjaCAod1ZhbHVlKSB7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgotCQkJc2V0X2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKTsKIAkJCVNFVF9SSF9QT1JUU1RBVChVU0JQT1JUU0NfU1VTUCk7CiAJCQlPSygwKTsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgpAQCAtMzQzLDggKzM0MCwxMSBAQAogCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19QRUMpOwogCQkJT0soMCk7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgotCQkJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpICYmCi0JCQkJCSF0ZXN0X2FuZF9zZXRfYml0KHBvcnQsCisJCQlpZiAoIShpbncocG9ydF9hZGRyKSAmIFVTQlBPUlRTQ19TVVNQKSkgeworCisJCQkJLyogTWFrZSBjZXJ0YWluIHRoZSBwb3J0IGlzbid0IHN1c3BlbmRlZCAqLworCQkJCXVoY2lfZmluaXNoX3N1c3BlbmQodWhjaSwgcG9ydCwgcG9ydF9hZGRyKTsKKwkJCX0gZWxzZSBpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydCwKIAkJCQkJCSZ1aGNpLT5yZXN1bWluZ19wb3J0cykpIHsKIAkJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1JEKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKaW5kZXggNTI0NmIzNS4uNjUwMTAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCkBAIC0yMDAsNDUgKzIwMCw0MSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG93ZXJtYXRlLgogCi1jb25maWcgVVNCX01UT1VDSAotCXRyaXN0YXRlICJNaWNyb1RvdWNoIFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCitjb25maWcgVVNCX1RPVUNIU0NSRUVOCisJdHJpc3RhdGUgIlVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCiAJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKIAktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIE1pY3JvVG91Y2ggKE5vdyAzTSkgVVNCIAotCSAgVG91Y2hzY3JlZW4gY29udHJvbGxlci4KLQotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL210b3VjaC50eHQ+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtdG91Y2h1c2IuCi0KLWNvbmZpZyBVU0JfSVRNVE9VQ0gKLQl0cmlzdGF0ZSAiSVRNIFRvdWNoIFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCi0JZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIElUTSBUb3VjaCBVU0IKLQkgIFRvdWNoc2NyZWVuIGNvbnRyb2xsZXIuCi0KLQkgIFRoaXMgdG91Y2hzY3JlZW4gaXMgdXNlZCBpbiBMRyAxNTEwU0YgbW9uaXRvcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl0bXRvdWNoLgotCi1jb25maWcgVVNCX0VHQUxBWAotCXRyaXN0YXRlICJlR2FsYXggVG91Y2hLaXQgVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKLQlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgZUdhbGF4IFRvdWNoS2l0IFVTQgotCSAgVG91Y2hzY3JlZW4gY29udHJvbGxlci4KLQotCSAgVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgb24gYSBYZW5hcmMgNzAwVFNWIG1vbml0b3IKLQkgIHdpdGggZUdhbGF4IHRvdWNoc2NyZWVuLgorCSAgVVNCIFRvdWNoc2NyZWVuIGRyaXZlciBmb3I6CisJICAtIGVHYWxheCBUb3VjaGtpdCBVU0IKKwkgIC0gUGFuSml0IFRvdWNoU2V0IFVTQgorCSAgLSAzTSBNaWNyb1RvdWNoIFVTQgorCSAgLSBJVE0KIAogCSAgSGF2ZSBhIGxvb2sgYXQgPGh0dHA6Ly9saW51eC5jaGFwdGVyNy5jaC90b3VjaGtpdC8+IGZvcgogCSAgYSB1c2FnZSBkZXNjcmlwdGlvbiBhbmQgdGhlIHJlcXVpcmVkIHVzZXItc3BhY2Ugc3R1ZmYuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRvdWNoa2l0dXNiLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYnRvdWNoc2NyZWVuLgorCitjb25maWcgVVNCX1RPVUNIU0NSRUVOX0VHQUxBWAorCWRlZmF1bHQgeQorCWJvb2wgImVHYWxheCBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgorCitjb25maWcgVVNCX1RPVUNIU0NSRUVOX1BBTkpJVAorCWRlZmF1bHQgeQorCWJvb2wgIlBhbkppdCBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgorCitjb25maWcgVVNCX1RPVUNIU0NSRUVOXzNNCisJZGVmYXVsdCB5CisJYm9vbCAiM00vTWljcm90b3VjaCBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgorCitjb25maWcgVVNCX1RPVUNIU0NSRUVOX0lUTQorCWRlZmF1bHQgeQorCWJvb2wgIklUTSBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgogCiBjb25maWcgVVNCX1lFQUxJTksKIAl0cmlzdGF0ZSAiWWVhbGluayB1c2ItcDFrIHZvaXAgcGhvbmUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCmluZGV4IGQ1MTJkOWYuLjc2NDExNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCkBAIC0zNyw2ICszNyw3IEBACiBvYmotJChDT05GSUdfVVNCX01UT1VDSCkJKz0gbXRvdWNodXNiLm8KIG9iai0kKENPTkZJR19VU0JfSVRNVE9VQ0gpCSs9IGl0bXRvdWNoLm8KIG9iai0kKENPTkZJR19VU0JfRUdBTEFYKQkrPSB0b3VjaGtpdHVzYi5vCitvYmotJChDT05GSUdfVVNCX1RPVUNIU0NSRUVOKQkrPSB1c2J0b3VjaHNjcmVlbi5vCiBvYmotJChDT05GSUdfVVNCX1BPV0VSTUFURSkJKz0gcG93ZXJtYXRlLm8KIG9iai0kKENPTkZJR19VU0JfV0FDT00pCQkrPSB3YWNvbS5vCiBvYmotJChDT05GSUdfVVNCX0FDRUNBRCkJKz0gYWNlY2FkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCmluZGV4IGQ0YmYxNzAuLjQzNTI3M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwpAQCAtMTM3Miw2ICsxMzcyLDExIEBACiAJCXVzYl9raWxsX3VyYihoaWQtPnVyYmluKTsKIH0KIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTkpJVAkJMHgxMzRjCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TSUxWRVJDUkVTVAkweDA2MmEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TSUxWRVJDUkVTVF9LQgkweDAyMDEKKwogLyoKICAqIEluaXRpYWxpemUgYWxsIHJlcG9ydHMKICAqLwpAQCAtMTU1Miw2ICsxNTU3LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9IUAkJMHgwM2YwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSFBfVVNCSFVCX0tCCTB4MDIwYwogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfSUJNCQkweDA0YjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JQk1fVVNCSFVCX0tCCTB4MzAwNQorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ1JFQVRJVkVMQUJTCTB4MDYyYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NSRUFUSVZFTEFCU19TSUxWRVJDUkVTVAkweDAyMDEKIApAQCAtMTY1NSw5ICsxNjYzLDEyIEBACiAJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDEsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDQsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDUsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fQ0lOVElRLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0RURiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9EVEYgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKIApAQCAtMTY3Myw4ICsxNjg0LDEwIEBACiAJeyBVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9VU0JIVUJfS0IsIEhJRF9RVUlSS19OT0dFVH0sCiAJeyBVU0JfVkVORE9SX0lEX0NSRUFUSVZFTEFCUywgVVNCX0RFVklDRV9JRF9DUkVBVElWRUxBQlNfU0lMVkVSQ1JFU1QsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9IUCwgVVNCX0RFVklDRV9JRF9IUF9VU0JIVUJfS0IsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9JQk0sIFVTQl9ERVZJQ0VfSURfSUJNX1VTQkhVQl9LQiwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1RBTkdUT1AsIFVTQl9ERVZJQ0VfSURfVEFOR1RPUF9VU0JQUzIsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfRFVBTF9VU0JfSk9ZUEFELCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfU0lMVkVSQ1JFU1QsIFVTQl9ERVZJQ0VfSURfU0lMVkVSQ1JFU1RfS0IsIEhJRF9RVUlSS19OT0dFVCB9LAogCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1BPV0VSTU9VU0UsIEhJRF9RVUlSS18yV0hFRUxfUE9XRVJNT1VTRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUsIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183IH0sCkBAIC0xNzAxLDYgKzE3MTQsMTEgQEAKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIDB4MDMwQSwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIDB4MDMwQiwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKIAorCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCiAJeyAwLCAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKaW5kZXggNzJlNjk4Ni4uZDVjOTFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKQEAgLTM0LDEyICszNCw2IEBACiAKICNpbmNsdWRlICJoaWQuaCIKIAotLyogRHJpdmVycycgaW5pdGlhbGl6aW5nIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOwotZXh0ZXJuIGludCBoaWRfbGczZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOwotZXh0ZXJuIGludCBoaWRfcGlkX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7Ci1leHRlcm4gaW50IGhpZF90bWZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7Ci0KIC8qCiAgKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGluaXRpYWxpemVycy4gVG8gYWRkIHN1cHBvcnQgZm9yIG5ldwogICogZGV2aWNlcywgeW91IG5lZWQgdG8gYWRkIHRoZSBVU0IgdmVuZG9yIGFuZCBwcm9kdWN0IGlkcyBoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYwppbmRleCBjYjBkODBmLi4yNWJjODVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYwpAQCAtNTEwLDcgKzUxMCw3IEBACiAJCQkJY2FzZSAweDAyNTogbWFwX2tleV9jbGVhcihLRVlfVFYpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDAyNjogbWFwX2tleV9jbGVhcihLRVlfTUVOVSk7CQlicmVhazsKIAkJCQljYXNlIDB4MDMxOiBtYXBfa2V5X2NsZWFyKEtFWV9BVURJTyk7CQlicmVhazsKLQkJCQljYXNlIDB4MDMyOiBtYXBfa2V5X2NsZWFyKEtFWV9TVUJUSVRMRSk7CWJyZWFrOworCQkJCWNhc2UgMHgwMzI6IG1hcF9rZXlfY2xlYXIoS0VZX1RFWFQpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDAzMzogbWFwX2tleV9jbGVhcihLRVlfTEFTVCk7CQlicmVhazsKIAkJCQljYXNlIDB4MDQ3OiBtYXBfa2V5X2NsZWFyKEtFWV9NUDMpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDA0ODogbWFwX2tleV9jbGVhcihLRVlfRFZEKTsJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAppbmRleCA0ZTFiNzg0Li45YzYyODM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaApAQCAtNTMzLDMgKzUzMyw4IEBACiAJCXJldHVybiBoaWQtPmZmX2V2ZW50KGhpZCwgaW5wdXQsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KKworaW50IGhpZF9sZ2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CitpbnQgaGlkX3RtZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK2ludCBoaWRfcGlkX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKaW5kZXggNmRkNjY2Ni4uYzQ2NzBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKQEAgLTMxNyw2ICszMTcsNyBAQAogCQkJCX0KIAogCQkJCXNjaGVkdWxlKCk7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCX0KIAogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jCmluZGV4IGI0YTA1MWIuLjNkOTExOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYwpAQCAtMjk3LDYgKzI5Nyw4IEBACiAJCQlyZW1vdGUtPmRhdGEuYml0c19sZWZ0IC09IDY7CiAJCX0gZWxzZSB7CiAJCQllcnIoIiVzIC0gRXJyb3IgaW4gbWVzc2FnZSwgaW52YWxpZCB0b2dnbGUuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmVtb3RlLT5zdGFnZSA9IDA7CisJCQlyZXR1cm47CiAJCX0KIAogCQlrZXlzcGFuX2xvYWRfdGVzdGVyKHJlbW90ZSwgNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC91c2J0b3VjaHNjcmVlbi5jIGIvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWEwN2MxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYwpAQCAtMCwwICsxLDYwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdXNidG91Y2hzY3JlZW4uYworICogRHJpdmVyIGZvciBVU0IgVG91Y2hzY3JlZW5zLCBzdXBwb3J0aW5nIHRob3NlIGRldmljZXM6CisgKiAgLSBlR2FsYXggVG91Y2hraXQKKyAqICAtIDNNL01pY3JvdG91Y2gKKyAqICAtIElUTQorICogIC0gUGFuSml0IFRvdWNoU2V0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgRGFuaWVsIFJpdHogPGRhbmllbC5yaXR6QGdteC5jaD4KKyAqIENvcHlyaWdodCAoQykgYnkgVG9kZCBFLiBKb2huc29uIChtdG91Y2h1c2IuYykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBEcml2ZXIgaXMgYmFzZWQgb24gdG91Y2hraXR1c2IuYworICogLSBJVE0gcGFydHMgYXJlIGZyb20gaXRtdG91Y2guYworICogLSAzTSBwYXJ0cyBhcmUgZnJvbSBtdG91Y2h1c2IuYworICogLSBQYW5KaXQgcGFydHMgYXJlIGZyb20gYW4gdW5tZXJnZWQgZHJpdmVyIGJ5IExhbnNsb3R0IEdpc2gKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vI2RlZmluZSBERUJVRworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9pbnB1dC5oPgorCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJ2MC4zIgorI2RlZmluZSBEUklWRVJfQVVUSE9SCQkiRGFuaWVsIFJpdHogPGRhbmllbC5yaXR6QGdteC5jaD4iCisjZGVmaW5lIERSSVZFUl9ERVNDCQkiVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKKworc3RhdGljIGludCBzd2FwX3h5OworbW9kdWxlX3BhcmFtKHN3YXBfeHksIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhzd2FwX3h5LCAiSWYgc2V0IFggYW5kIFkgYXhlcyBhcmUgc3dhcHBlZC4iKTsKKworLyogZGV2aWNlIHNwZWNpZmMgZGF0YS9mdW5jdGlvbnMgKi8KK3N0cnVjdCB1c2J0b3VjaF91c2I7CitzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8geworCWludCBtaW5feGMsIG1heF94YzsKKwlpbnQgbWluX3ljLCBtYXhfeWM7CisJaW50IG1pbl9wcmVzcywgbWF4X3ByZXNzOworCWludCByZXB0X3NpemU7CisJaW50IGZsYWdzOworCisJdm9pZCAoKnByb2Nlc3NfcGt0KSAoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pOworCWludCAgKCpyZWFkX2RhdGEpICAgKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpOworCWludCAgKCppbml0KSAgICAgICAgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKTsKK307CisKKyNkZWZpbmUgVVNCVE9VQ0hfRkxHX0JVRkZFUgkweDAxCisKKworLyogYSB1c2J0b3VjaCBkZXZpY2UgKi8KK3N0cnVjdCB1c2J0b3VjaF91c2IgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IGJ1Zl9sZW47CisJc3RydWN0IHVyYiAqaXJxOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZTsKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworfTsKKworc3RhdGljIHZvaWQgdXNidG91Y2hfcHJvY2Vzc19wa3Qoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKTsKKworLyogZGV2aWNlIHR5cGVzICovCitlbnVtIHsKKwlERVZUUFlFX0RVTU1ZID0gLTEsCisJREVWVFlQRV9FR0FMQVgsCisJREVWVFlQRV9QQU5KSVQsCisJREVWVFlQRV8zTSwKKwlERVZUWVBFX0lUTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J0b3VjaF9kZXZpY2VzW10gPSB7CisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9FR0FMQVgKKwl7VVNCX0RFVklDRSgweDM4MjMsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfRUdBTEFYfSwKKwl7VVNCX0RFVklDRSgweDAxMjMsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfRUdBTEFYfSwKKwl7VVNCX0RFVklDRSgweDBlZWYsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfRUdBTEFYfSwKKwl7VVNCX0RFVklDRSgweDBlZWYsIDB4MDAwMiksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfRUdBTEFYfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9QQU5KSVQKKwl7VVNCX0RFVklDRSgweDEzNGMsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfUEFOSklUfSwKKwl7VVNCX0RFVklDRSgweDEzNGMsIDB4MDAwMiksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfUEFOSklUfSwKKwl7VVNCX0RFVklDRSgweDEzNGMsIDB4MDAwMyksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfUEFOSklUfSwKKwl7VVNCX0RFVklDRSgweDEzNGMsIDB4MDAwNCksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfUEFOSklUfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl8zTQorCXtVU0JfREVWSUNFKDB4MDU5NiwgMHgwMDAxKSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV8zTX0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fSVRNCisJe1VTQl9ERVZJQ0UoMHgwNDAzLCAweGY5ZTkpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0lUTX0sCisjZW5kaWYKKworCXt9Cit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZUdhbGF4IHBhcnQKKyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9FR0FMQVgKKworI2RlZmluZSBFR0FMQVhfUEtUX1RZUEVfTUFTSwkJMHhGRQorI2RlZmluZSBFR0FMQVhfUEtUX1RZUEVfUkVQVAkJMHg4MAorI2RlZmluZSBFR0FMQVhfUEtUX1RZUEVfRElBRwkJMHgwQQorCitzdGF0aWMgaW50IGVnYWxheF9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKK3sKKwlpZiAoKHBrdFswXSAmIEVHQUxBWF9QS1RfVFlQRV9NQVNLKSAhPSBFR0FMQVhfUEtUX1RZUEVfUkVQVCkKKwkJcmV0dXJuIDA7CisKKwkqeCA9ICgocGt0WzNdICYgMHgwRikgPDwgNykgfCAocGt0WzRdICYgMHg3Rik7CisJKnkgPSAoKHBrdFsxXSAmIDB4MEYpIDw8IDcpIHwgKHBrdFsyXSAmIDB4N0YpOworCSp0b3VjaCA9IHBrdFswXSAmIDB4MDE7CisKKwlyZXR1cm4gMTsKKworfQorCitzdGF0aWMgaW50IGVnYWxheF9nZXRfcGt0X2xlbih1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3dpdGNoIChidWZbMF0gJiBFR0FMQVhfUEtUX1RZUEVfTUFTSykgeworCWNhc2UgRUdBTEFYX1BLVF9UWVBFX1JFUFQ6CisJCXJldHVybiA1OworCisJY2FzZSBFR0FMQVhfUEtUX1RZUEVfRElBRzoKKwkJcmV0dXJuIGJ1ZlsxXSArIDI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVnYWxheF9wcm9jZXNzKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHBrdF9sZW4sIGJ1Zl9sZW4sIHBvczsKKworCS8qIGlmIHRoZSBidWZmZXIgY29udGFpbnMgZGF0YSwgYXBwZW5kICovCisJaWYgKHVubGlrZWx5KHVzYnRvdWNoLT5idWZfbGVuKSkgeworCQlpbnQgdG1wOworCisJCS8qIGlmIG9ubHkgMSBieXRlIGluIGJ1ZmZlciwgYWRkIGFub3RoZXIgb25lIHRvIGdldCBsZW5ndGggKi8KKwkJaWYgKHVzYnRvdWNoLT5idWZfbGVuID09IDEpCisJCQl1c2J0b3VjaC0+YnVmZmVyWzFdID0gcGt0WzBdOworCisJCXBrdF9sZW4gPSBlZ2FsYXhfZ2V0X3BrdF9sZW4odXNidG91Y2gtPmJ1ZmZlcik7CisKKwkJLyogdW5rbm93biBwYWNrZXQ6IGRyb3AgZXZlcnl0aGluZyAqLworCQlpZiAoIXBrdF9sZW4pCisJCQlyZXR1cm47CisKKwkJLyogYXBwZW5kLCBwcm9jZXNzICovCisJCXRtcCA9IHBrdF9sZW4gLSB1c2J0b3VjaC0+YnVmX2xlbjsKKwkJbWVtY3B5KHVzYnRvdWNoLT5idWZmZXIgKyB1c2J0b3VjaC0+YnVmX2xlbiwgcGt0LCB0bXApOworCQl1c2J0b3VjaF9wcm9jZXNzX3BrdCh1c2J0b3VjaCwgcmVncywgdXNidG91Y2gtPmJ1ZmZlciwgcGt0X2xlbik7CisKKwkJYnVmZmVyID0gcGt0ICsgdG1wOworCQlidWZfbGVuID0gbGVuIC0gdG1wOworCX0gZWxzZSB7CisJCWJ1ZmZlciA9IHBrdDsKKwkJYnVmX2xlbiA9IGxlbjsKKwl9CisKKwkvKiBvbmx5IG9uZSBieXRlIGxlZnQgaW4gYnVmZmVyICovCisJaWYgKHVubGlrZWx5KGJ1Zl9sZW4gPT0gMSkpIHsKKwkJdXNidG91Y2gtPmJ1ZmZlclswXSA9IGJ1ZmZlclswXTsKKwkJdXNidG91Y2gtPmJ1Zl9sZW4gPSAxOworCQlyZXR1cm47CisJfQorCisJLyogbG9vcCBvdmVyIHRoZSBidWZmZXIgKi8KKwlwb3MgPSAwOworCXdoaWxlIChwb3MgPCBidWZfbGVuKSB7CisJCS8qIGdldCBwYWNrZXQgbGVuICovCisJCXBrdF9sZW4gPSBlZ2FsYXhfZ2V0X3BrdF9sZW4oYnVmZmVyICsgcG9zKTsKKworCQkvKiB1bmtub3duIHBhY2tldDogZHJvcCBldmVyeXRoaW5nICovCisJCWlmICh1bmxpa2VseSghcGt0X2xlbikpCisJCQlyZXR1cm47CisKKwkJLyogZnVsbCBwYWNrZXQ6IHByb2Nlc3MgKi8KKwkJaWYgKGxpa2VseShwa3RfbGVuIDw9IGJ1Zl9sZW4pKSB7CisJCQl1c2J0b3VjaF9wcm9jZXNzX3BrdCh1c2J0b3VjaCwgcmVncywgYnVmZmVyICsgcG9zLCBwa3RfbGVuKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGluY29tcGxldGUgcGFja2V0OiBzYXZlIGluIGJ1ZmZlciAqLworCQkJbWVtY3B5KHVzYnRvdWNoLT5idWZmZXIsIGJ1ZmZlciArIHBvcywgYnVmX2xlbiAtIHBvcyk7CisJCQl1c2J0b3VjaC0+YnVmX2xlbiA9IGJ1Zl9sZW4gLSBwb3M7CisJCX0KKwkJcG9zICs9IHBrdF9sZW47CisJfQorfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQYW5KaXQgUGFydAorICovCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9QQU5KSVQKK3N0YXRpYyBpbnQgcGFuaml0X3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQoreworCSp4ID0gKChwa3RbMl0gJiAweDBGKSA8PCA4KSB8IHBrdFsxXTsKKwkqeSA9ICgocGt0WzRdICYgMHgwRikgPDwgOCkgfCBwa3RbM107CisJKnRvdWNoID0gcGt0WzBdICYgMHgwMTsKKworCXJldHVybiAxOworfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAzTS9NaWNyb3RvdWNoIFBhcnQKKyAqLworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fM00KKworI2RlZmluZSBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JUICAgICAgICAgIDEKKyNkZWZpbmUgTVRPVUNIVVNCX1JFU0VUICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE1UT1VDSFVTQl9SRVFfQ1RSTExSX0lEICAgICAgICAgMTAKKworc3RhdGljIGludCBtdG91Y2hfcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCit7CisJKnggPSAocGt0WzhdIDw8IDgpIHwgcGt0WzddOworCSp5ID0gKHBrdFsxMF0gPDwgOCkgfCBwa3RbOV07CisJKnRvdWNoID0gKHBrdFsyXSAmIDB4NDApID8gMSA6IDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtdG91Y2hfaW5pdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYnRvdWNoLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNidG91Y2gtPnVkZXYsIDApLAorCSAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfUkVTRVQsCisJICAgICAgICAgICAgICAgICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCWRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBNVE9VQ0hVU0JfUkVTRVQgLSBieXRlc3xlcnI6ICVkIiwKKwkgICAgX19GVU5DVElPTl9fLCByZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYnRvdWNoLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNidG91Y2gtPnVkZXYsIDApLAorCSAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JULAorCSAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCAtIGJ5dGVzfGVycjogJWQiLAorCSAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSVRNIFBhcnQKKyAqLworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fSVRNCitzdGF0aWMgaW50IGl0bV9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKK3sKKwkqeCA9ICgocGt0WzBdICYgMHgxRikgPDwgNykgfCAocGt0WzNdICYgMHg3Rik7CisJKnggPSAoKHBrdFsxXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFs0XSAmIDB4N0YpOworCSpwcmVzcyA9ICgocGt0WzJdICYgMHgxRikgPDwgNykgfCAocGt0WzVdICYgMHg3Rik7CisJKnRvdWNoID0gfnBrdFs3XSAmIDB4MjA7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdGhlIGRpZmZlcmVudCBkZXZpY2UgZGVzY3JpcHRvcnMKKyAqLworc3RhdGljIHN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyB1c2J0b3VjaF9kZXZfaW5mb1tdID0geworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCisJW0RFVlRZUEVfRUdBTEFYXSA9IHsKKwkJLm1pbl94YwkJPSAweDAsCisJCS5tYXhfeGMJCT0gMHgwN2ZmLAorCQkubWluX3ljCQk9IDB4MCwKKwkJLm1heF95YwkJPSAweDA3ZmYsCisJCS5yZXB0X3NpemUJPSAxNiwKKwkJLmZsYWdzCQk9IFVTQlRPVUNIX0ZMR19CVUZGRVIsCisJCS5wcm9jZXNzX3BrdAk9IGVnYWxheF9wcm9jZXNzLAorCQkucmVhZF9kYXRhCT0gZWdhbGF4X3JlYWRfZGF0YSwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX1BBTkpJVAorCVtERVZUWVBFX1BBTkpJVF0gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MGZmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwZmZmLAorCQkucmVwdF9zaXplCT0gOCwKKwkJLnJlYWRfZGF0YQk9IHBhbmppdF9yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl8zTQorCVtERVZUWVBFXzNNXSA9IHsKKwkJLm1pbl94YwkJPSAweDAsCisJCS5tYXhfeGMJCT0gMHg0MDAwLAorCQkubWluX3ljCQk9IDB4MCwKKwkJLm1heF95YwkJPSAweDQwMDAsCisJCS5yZXB0X3NpemUJPSAxMSwKKwkJLnJlYWRfZGF0YQk9IG10b3VjaF9yZWFkX2RhdGEsCisJCS5pbml0CQk9IG10b3VjaF9pbml0LAorCX0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fSVRNCisJW0RFVlRZUEVfSVRNXSA9IHsKKwkJLm1pbl94YwkJPSAweDAsCisJCS5tYXhfeGMJCT0gMHgwZmZmLAorCQkubWluX3ljCQk9IDB4MCwKKwkJLm1heF95YwkJPSAweDBmZmYsCisJCS5tYXhfcHJlc3MJPSAweGZmLAorCQkucmVwdF9zaXplCT0gOCwKKwkJLnJlYWRfZGF0YQk9IGl0bV9yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyaWMgUGFydAorICovCitzdGF0aWMgdm9pZCB1c2J0b3VjaF9wcm9jZXNzX3BrdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pCit7CisJaW50IHgsIHksIHRvdWNoLCBwcmVzczsKKwlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGUgPSB1c2J0b3VjaC0+dHlwZTsKKworCWlmICghdHlwZS0+cmVhZF9kYXRhKHBrdCwgJngsICZ5LCAmdG91Y2gsICZwcmVzcykpCisJCQlyZXR1cm47CisKKwlpbnB1dF9yZWdzKHVzYnRvdWNoLT5pbnB1dCwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2tleSh1c2J0b3VjaC0+aW5wdXQsIEJUTl9UT1VDSCwgdG91Y2gpOworCisJaWYgKHN3YXBfeHkpIHsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19YLCB5KTsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19ZLCB4KTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1ksIHkpOworCX0KKwlpZiAodHlwZS0+bWF4X3ByZXNzKQorCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1BSRVNTVVJFLCBwcmVzcyk7CisJaW5wdXRfc3luYyh1c2J0b3VjaC0+aW5wdXQpOworfQorCisKK3N0YXRpYyB2b2lkIHVzYnRvdWNoX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gdXJiLT5jb250ZXh0OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVUSU1FRE9VVDoKKwkJLyogdGhpcyB1cmIgaXMgdGltaW5nIG91dCAqLworCQlkYmcoIiVzIC0gdXJiIHRpbWVkIG91dCAtIHdhcyB0aGUgZGV2aWNlIHVucGx1Z2dlZD8iLAorCQkgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNidG91Y2gtPnR5cGUtPnByb2Nlc3NfcGt0KHVzYnRvdWNoLCByZWdzLCB1c2J0b3VjaC0+ZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwpCisJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIGludCB1c2J0b3VjaF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKwl1c2J0b3VjaC0+aXJxLT5kZXYgPSB1c2J0b3VjaC0+dWRldjsKKworCWlmICh1c2Jfc3VibWl0X3VyYih1c2J0b3VjaC0+aXJxLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNidG91Y2hfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2ggPSBpbnB1dC0+cHJpdmF0ZTsKKworCXVzYl9raWxsX3VyYih1c2J0b3VjaC0+aXJxKTsKK30KKworCitzdGF0aWMgdm9pZCB1c2J0b3VjaF9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJICBzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCkKK3sKKwlpZiAodXNidG91Y2gtPmRhdGEpCisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCB1c2J0b3VjaC0+dHlwZS0+cmVwdF9zaXplLAorCQkgICAgICAgICAgICAgICAgdXNidG91Y2gtPmRhdGEsIHVzYnRvdWNoLT5kYXRhX2RtYSk7CisJa2ZyZWUodXNidG91Y2gtPmJ1ZmZlcik7Cit9CisKKworc3RhdGljIGludCB1c2J0b3VjaF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYnRvdWNoX2RldmljZV9pbmZvICp0eXBlOworCWludCBlcnI7CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKwl1c2J0b3VjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2J0b3VjaF91c2IpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXVzYnRvdWNoIHx8ICFpbnB1dF9kZXYpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwl0eXBlID0gJnVzYnRvdWNoX2Rldl9pbmZvW2lkLT5kcml2ZXJfaW5mb107CisJdXNidG91Y2gtPnR5cGUgPSB0eXBlOworCWlmICghdHlwZS0+cHJvY2Vzc19wa3QpCisJCXR5cGUtPnByb2Nlc3NfcGt0ID0gdXNidG91Y2hfcHJvY2Vzc19wa3Q7CisKKwl1c2J0b3VjaC0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgdHlwZS0+cmVwdF9zaXplLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0tFUk5FTCwgJnVzYnRvdWNoLT5kYXRhX2RtYSk7CisJaWYgKCF1c2J0b3VjaC0+ZGF0YSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmICh0eXBlLT5mbGFncyAmIFVTQlRPVUNIX0ZMR19CVUZGRVIpIHsKKwkJdXNidG91Y2gtPmJ1ZmZlciA9IGttYWxsb2ModHlwZS0+cmVwdF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1c2J0b3VjaC0+YnVmZmVyKQorCQkJZ290byBvdXRfZnJlZV9idWZmZXJzOworCX0KKworCXVzYnRvdWNoLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXNidG91Y2gtPmlycSkgeworCQlkYmcoIiVzIC0gdXNiX2FsbG9jX3VyYiBmYWlsZWQ6IHVzYnRvdWNoLT5pcnEiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CisJfQorCisJdXNidG91Y2gtPnVkZXYgPSB1ZGV2OworCXVzYnRvdWNoLT5pbnB1dCA9IGlucHV0X2RldjsKKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmxjcHkodXNidG91Y2gtPm5hbWUsIHVkZXYtPm1hbnVmYWN0dXJlciwgc2l6ZW9mKHVzYnRvdWNoLT5uYW1lKSk7CisKKwlpZiAodWRldi0+cHJvZHVjdCkgeworCQlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQkJc3RybGNhdCh1c2J0b3VjaC0+bmFtZSwgIiAiLCBzaXplb2YodXNidG91Y2gtPm5hbWUpKTsKKwkJc3RybGNhdCh1c2J0b3VjaC0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mKHVzYnRvdWNoLT5uYW1lKSk7CisJfQorCisJaWYgKCFzdHJsZW4odXNidG91Y2gtPm5hbWUpKQorCQlzbnByaW50Zih1c2J0b3VjaC0+bmFtZSwgc2l6ZW9mKHVzYnRvdWNoLT5uYW1lKSwKKwkJCSJVU0IgVG91Y2hzY3JlZW4gJTA0eDolMDR4IiwKKwkJCSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJdXNiX21ha2VfcGF0aCh1ZGV2LCB1c2J0b3VjaC0+cGh5cywgc2l6ZW9mKHVzYnRvdWNoLT5waHlzKSk7CisJc3RybGNweSh1c2J0b3VjaC0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YodXNidG91Y2gtPnBoeXMpKTsKKworCWlucHV0X2Rldi0+bmFtZSA9IHVzYnRvdWNoLT5uYW1lOworCWlucHV0X2Rldi0+cGh5cyA9IHVzYnRvdWNoLT5waHlzOworCXVzYl90b19pbnB1dF9pZCh1ZGV2LCAmaW5wdXRfZGV2LT5pZCk7CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJaW5wdXRfZGV2LT5wcml2YXRlID0gdXNidG91Y2g7CisJaW5wdXRfZGV2LT5vcGVuID0gdXNidG91Y2hfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gdXNidG91Y2hfY2xvc2U7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgdHlwZS0+bWluX3hjLCB0eXBlLT5tYXhfeGMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIHR5cGUtPm1pbl95YywgdHlwZS0+bWF4X3ljLCAwLCAwKTsKKwlpZiAodHlwZS0+bWF4X3ByZXNzKQorCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgdHlwZS0+bWluX3ByZXNzLAorCQkgICAgICAgICAgICAgICAgICAgICB0eXBlLT5tYXhfcHJlc3MsIDAsIDApOworCisJdXNiX2ZpbGxfaW50X3VyYih1c2J0b3VjaC0+aXJxLCB1c2J0b3VjaC0+dWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZSh1c2J0b3VjaC0+dWRldiwgMHg4MSksCisJCQkgdXNidG91Y2gtPmRhdGEsIHR5cGUtPnJlcHRfc2l6ZSwKKwkJCSB1c2J0b3VjaF9pcnEsIHVzYnRvdWNoLCBlbmRwb2ludC0+YkludGVydmFsKTsKKworCXVzYnRvdWNoLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHVzYnRvdWNoLT5kYXRhX2RtYTsKKwl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIGRldmljZSBzcGVjaWZpYyBpbml0ICovCisJaWYgKHR5cGUtPmluaXQpIHsKKwkJZXJyID0gdHlwZS0+aW5pdCh1c2J0b3VjaCk7CisJCWlmIChlcnIpIHsKKwkJCWRiZygiJXMgLSB0eXBlLT5pbml0KCkgZmFpbGVkLCBlcnI6ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byBvdXRfZnJlZV9idWZmZXJzOworCQl9CisJfQorCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHVzYnRvdWNoLT5pbnB1dCk7CisJaWYgKGVycikgeworCQlkYmcoIiVzIC0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCwgZXJyOiAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byBvdXRfZnJlZV9idWZmZXJzOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdXNidG91Y2gpOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlX2J1ZmZlcnM6CisJdXNidG91Y2hfZnJlZV9idWZmZXJzKHVkZXYsIHVzYnRvdWNoKTsKK291dF9mcmVlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUodXNidG91Y2gpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCB1c2J0b3VjaF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygiJXMgLSBjYWxsZWQiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCF1c2J0b3VjaCkKKwkJcmV0dXJuOworCisJZGJnKCIlcyAtIHVzYnRvdWNoIGlzIGluaXRpYWxpemVkLCBjbGVhbmluZyB1cCIsIF9fRlVOQ1RJT05fXyk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2Jfa2lsbF91cmIodXNidG91Y2gtPmlycSk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodXNidG91Y2gtPmlucHV0KTsKKwl1c2JfZnJlZV91cmIodXNidG91Y2gtPmlycSk7CisJdXNidG91Y2hfZnJlZV9idWZmZXJzKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIHVzYnRvdWNoKTsKKwlrZnJlZSh1c2J0b3VjaCk7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2J0b3VjaF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYnRvdWNoX2RyaXZlciA9IHsKKwkubmFtZQkJPSAidXNidG91Y2hzY3JlZW4iLAorCS5wcm9iZQkJPSB1c2J0b3VjaF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYnRvdWNoX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gdXNidG91Y2hfZGV2aWNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYnRvdWNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1c2J0b3VjaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNidG91Y2hfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2J0b3VjaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2J0b3VjaF9pbml0KTsKK21vZHVsZV9leGl0KHVzYnRvdWNoX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworTU9EVUxFX0FMSUFTKCJ0b3VjaGtpdHVzYiIpOworTU9EVUxFX0FMSUFTKCJpdG10b3VjaCIpOworTU9EVUxFX0FMSUFTKCJtdG91Y2h1c2IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jCmluZGV4IGQzZTE1ZGYuLmNmODRjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYwpAQCAtOSw3ICs5LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIEVnZ2VyCQk8ZWdnZXJAc3VzZS5kZT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDEgRnJlZGVyaWMgTGVwaWVkCQk8ZmxlcGllZEBtYW5kcmFrZXNvZnQuY29tPgogICogIENvcHlyaWdodCAoYykgMjAwNCBQYW5hZ2lvdGlzIElzc2FyaXMJPHBhbmFnaW90aXMuaXNzYXJpc0BtZWNoLmt1bGV1dmVuLmFjLmJlPgotICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgUGluZyBDaGVuZwkJPHBpbmdjQHdhY29tLmNvbT4KICAqCiAgKiAgQ2hhbmdlTG9nOgogICogICAgICB2MC4xICh2cCkgIC0gSW5pdGlhbCByZWxlYXNlCkBAIC01Niw2ICs1Niw4IEBACiAgKgkJICAgLSBNZXJnZWQgd2Fjb21faW50dW9zM19pcnEgaW50byB3YWNvbV9pbnR1b3NfaXJxCiAgKgl2MS40NCAocGMpIC0gQWRkZWQgc3VwcG9ydCBmb3IgR3JhcGhpcmU0LCBDaW50aXEgNzEwLCBJbnR1b3MzIDZ4MTEsIGV0Yy4KICAqCQkgICAtIFJlcG9ydCBEZXZpY2UgSURzCisgKgl2MS40NSAocGMpIC0gQWRkZWQgc3VwcG9ydCBmb3IgRFRGIDUyMSwgSW50dW9zMyAxMngxMiBhbmQgMTJ4MTkKKyAqCQkgICAtIE1pbm9yIGRhdGEgcmVwb3J0IGZpeAogICovCiAKIC8qCkBAIC03OCw3ICs4MCw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40NCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjQ1IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+IgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFdhY29tIEdyYXBoaXJlIGFuZCBXYWNvbSBJbnR1b3MgdGFibGV0IGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKQEAgLTk5LDYgKzEwMSw4IEBACiAJUEwsCiAJSU5UVU9TLAogCUlOVFVPUzMsCisJSU5UVU9TMzEyLAorCUlOVFVPUzMxOSwKIAlDSU5USVEsCiAJTUFYX1RZUEUKIH07CkBAIC0xMjcsNyArMTMxLDE5IEBACiAJY2hhciBwaHlzWzMyXTsKIH07CiAKKyNkZWZpbmUgVVNCX1JFUV9HRVRfUkVQT1JUCTB4MDEKICNkZWZpbmUgVVNCX1JFUV9TRVRfUkVQT1JUCTB4MDkKKworc3RhdGljIGludCB1c2JfZ2V0X3JlcG9ydChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgY2hhciB0eXBlLAorCQkJCXVuc2lnbmVkIGNoYXIgaWQsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAorCQl1c2JfcmN2Y3RybHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgMCksCisJCVVTQl9SRVFfR0VUX1JFUE9SVCwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkodHlwZSA8PCA4KSArIGlkLCBpbnRmLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJYnVmLCBzaXplLCAxMDApOworfQorCiBzdGF0aWMgaW50IHVzYl9zZXRfcmVwb3J0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBjaGFyIHR5cGUsCiAJCQkJdW5zaWduZWQgY2hhciBpZCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTIwNiw3ICsyMjIsOCBAQAogCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9QRU47CiAJCQlpZCA9IFNUWUxVU19ERVZJQ0VfSUQ7CiAJCX0KLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCBpZCk7IC8qIHJlcG9ydCBpbiBwcm94aW1pdHkgZm9yIHRvb2wgKi8KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCBwcm94KTsgLyogcmVwb3J0IGluIHByb3hpbWl0eSBmb3IgdG9vbCAqLworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIGlkKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBkYXRhWzNdIHwgKGRhdGFbMl0gPDwgNykgfCAoKGRhdGFbMV0gJiAweDAzKSA8PCAxNCkpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGRhdGFbNl0gfCAoZGF0YVs1XSA8PCA3KSB8ICgoZGF0YVs0XSAmIDB4MDMpIDw8IDE0KSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIHByZXNzdXJlKTsKQEAgLTIzOSw3ICsyNTYsNyBAQAogCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHdhY29tLT5kZXY7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsLCBpZDsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CkBAIC0yNjMsMTIgKzI4MCwxNSBAQAogCiAJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOwogCWlmIChkYXRhWzFdICYgMHgwNCkgewotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUlVCQkVSLCAoZGF0YVsxXSAmIDB4MjApID8gRVJBU0VSX0RFVklDRV9JRCA6IDApOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUlVCQkVSLCBkYXRhWzFdICYgMHgyMCk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDA4KTsKKwkJaWQgPSBFUkFTRVJfREVWSUNFX0lEOwogCX0gZWxzZSB7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIChkYXRhWzFdICYgMHgyMCkgPyBTVFlMVVNfREVWSUNFX0lEIDogMCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIGRhdGFbMV0gJiAweDIwKTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOworCQlpZCA9IFNUWUxVU19ERVZJQ0VfSUQ7CiAJfQorCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbMl0pKTsKIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzRdKSk7CiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbNl0pKTsKQEAgLTMxMiw3ICszMzIsOCBAQAogCX0KIAogCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBTVFlMVVNfREVWSUNFX0lEKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCAxKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIFNUWUxVU19ERVZJQ0VfSUQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbMV0pKTsKIAlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzNdKSk7CiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgKHNpZ25lZCBjaGFyKWRhdGFbNl0gKyAxMjcpOwpAQCAtMzUwLDYgKzM3MSw4IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKwlpZiAoZGF0YVswXSA9PSA5OSkgcmV0dXJuOyAvKiBmb3IgVm9saXRvIHRhYmxldHMgKi8KKwogCWlmIChkYXRhWzBdICE9IDIpIHsKIAkJZGJnKCJ3YWNvbV9ncmFwaGlyZV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZCIsIGRhdGFbMF0pOwogCQlnb3RvIGV4aXQ7CkBAIC0zNzQsMTAgKzM5NywxMCBAQAogCQkJY2FzZSAyOiAvKiBNb3VzZSB3aXRoIHdoZWVsICovCiAJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbMV0gJiAweDA0KTsKIAkJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0KSB7Ci0JCQkJCXJ3ID0gZGF0YVs3XSAmIDB4MDQgPyAtKGRhdGFbN10gJiAweDAzKSA6IChkYXRhWzddICYgMHgwMyk7Ci0JCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIHJ3KTsKKwkJCQkJcncgPSBkYXRhWzddICYgMHgwNCA/IChkYXRhWzddICYgMHgwMyktNCA6IChkYXRhWzddICYgMHgwMyk7CisJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIC1ydyk7CiAJCQkJfSBlbHNlCi0JCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIChzaWduZWQgY2hhcikgZGF0YVs2XSk7CisJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIC0oc2lnbmVkIGNoYXIpIGRhdGFbNl0pOwogCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCiAJCQljYXNlIDM6IC8qIE1vdXNlIHdpdGhvdXQgd2hlZWwgKi8KQEAgLTQwNiwzOSArNDI5LDI3IEBACiAJCX0KIAl9CiAKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMF0sIChkYXRhWzFdICYgMHgxMCkgPyBpZCA6IDApOworCWlmIChkYXRhWzFdICYgMHgxMCkKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBpZCk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJZWxzZQorCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIDApOyAvKiByZXNldCB0b29sIGlkICovCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzBdLCBkYXRhWzFdICYgMHgxMCk7CiAJaW5wdXRfc3luYyhkZXYpOwogCiAJLyogc2VuZCBwYWQgZGF0YSAqLwogCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQpIHsKLQkJLyogZmlzdCB0aW1lIHNlbmRpbmcgcGFkIGRhdGEgKi8KLQkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikgewotCQkJd2Fjb20tPmlkWzFdID0gMDsKLQkJCXdhY29tLT5zZXJpYWxbMV0gPSAoZGF0YVs3XSAmIDB4MzgpID4+IDI7Ci0JCX0KLQkJaWYgKGRhdGFbN10gJiAweGY4KSB7CisJCWlmICgod2Fjb20tPnNlcmlhbFsxXSAmIDB4YzApICE9IChkYXRhWzddICYgMHhmOCkpIHsKKwkJCXdhY29tLT5pZFsxXSA9IDE7CisJCQl3YWNvbS0+c2VyaWFsWzFdID0gKGRhdGFbN10gJiAweGY4KTsKIAkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgKGRhdGFbN10gJiAweDQwKSk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzQsIChkYXRhWzddICYgMHg4MCkpOwotCQkJaWYgKCgoZGF0YVs3XSAmIDB4MzgpID4+IDIpID09ICh3YWNvbS0+c2VyaWFsWzFdICYgMHgwZSkpCi0JCQkJLyogYWx0ZXIgUkVMX1dIRUVMIHZhbHVlIHNvIFggYXBwcyBjYW4gZ2V0IGl0ICovCi0JCQkJd2Fjb20tPnNlcmlhbFsxXSArPSAod2Fjb20tPnNlcmlhbFsxXSAmIDB4MDEpID8gLTEgOiAxOwotCQkJZWxzZQotCQkJCSB3YWNvbS0+c2VyaWFsWzFdID0gKGRhdGFbN10gJiAweDM4ICkgPj4gMjsKLQotCQkJLyogZG9uJ3QgYWx0ZXIgdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgbm8gd2hlZWwgZXZlbnQgKi8KLQkJCWlmICh3YWNvbS0+c2VyaWFsWzFdID09IDEpCi0JCQkJd2Fjb20tPnNlcmlhbFsxXSA9IDA7Ci0JCQlydyA9IHdhY29tLT5zZXJpYWxbMV07Ci0JCQlydyA9IChydyAmIDB4MDgpID8gLShydyAmIDB4MDcpIDogKHJ3ICYgMHgwNyk7CisJCQlydyA9ICgoZGF0YVs3XSAmIDB4MTgpID4+IDMpIC0gKChkYXRhWzddICYgMHgyMCkgPj4gMyk7CiAJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCBydyk7Ci0JCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX0ZJTkdFUjsKLQkJCXdhY29tLT5pZFsxXSA9IGRhdGFbN10gJiAweGY4OwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAweGYwKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9GSU5HRVIsIDB4ZjApOwogCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZjApOwogCQl9IGVsc2UgaWYgKHdhY29tLT5pZFsxXSkgewogCQkJd2Fjb20tPmlkWzFdID0gMDsKLQkJCXdhY29tLT5zZXJpYWxbMV0gPSAwOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAwKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9GSU5HRVIsIDApOwogCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZjApOwogCQl9CiAJCWlucHV0X3N5bmMoZGV2KTsKQEAgLTUxNiwyMSArNTI3LDMxIEBACiAJCQlkZWZhdWx0OiAvKiBVbmtub3duIHRvb2wgKi8KIAkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOOwogCQl9Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCB3YWNvbS0+aWRbaWR4XSk7Ci0JCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOwotCQlpbnB1dF9zeW5jKGRldik7CisJCWlmKCEoKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUykgJiYKKwkJCQkoKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzMTIpCisJCQkJCXx8ICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzE5KSkpKSB7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIHdhY29tLT5pZFtpZHhdKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQl9CiAJCXJldHVybiAxOwogCX0KIAogCS8qIEV4aXQgcmVwb3J0ICovCiAJaWYgKChkYXRhWzFdICYgMHhmZSkgPT0gMHg4MCkgewogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgMCk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KIAkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CiAJCWlucHV0X3N5bmMoZGV2KTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JcmV0dXJuIDA7CisJaWYoKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUykgJiYgKCh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzEyKQorCQkJfHwgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzMTkpKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd2Fjb21faW50dW9zX2dlbmVyYWwoc3RydWN0IHVyYiAqdXJiKQpAQCAtNjAwLDEwICs2MjEsOSBAQAogCS8qIHBhZCBwYWNrZXRzLiBXb3JrcyBhcyBhIHNlY29uZCB0b29sIGFuZCBpcyBhbHdheXMgaW4gcHJveCAqLwogCWlmIChkYXRhWzBdID09IDEyKSB7CiAJCS8qIGluaXRpYXRlIHRoZSBwYWQgYXMgYSBkZXZpY2UgKi8KLQkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikgeworCQlpZiAod2Fjb20tPnRvb2xbMV0gIT0gQlROX1RPT0xfRklOR0VSKQogCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9GSU5HRVI7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDEpOwotCQl9CisKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8wLCAoZGF0YVs1XSAmIDB4MDEpKTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8xLCAoZGF0YVs1XSAmIDB4MDIpKTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8yLCAoZGF0YVs1XSAmIDB4MDQpKTsKQEAgLTYxNCw2ICs2MzQsMTEgQEAKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl83LCAoZGF0YVs2XSAmIDB4MDgpKTsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwgKChkYXRhWzFdICYgMHgxZikgPDwgOCkgfCBkYXRhWzJdKTsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWSwgKChkYXRhWzNdICYgMHgxZikgPDwgOCkgfCBkYXRhWzRdKTsKKworCQlpZigoZGF0YVs1XSAmIDB4MGYpIHwgKGRhdGFbNl0gJiAweDBmKSB8IChkYXRhWzFdICYgMHgxZikgfCBkYXRhWzJdKQorCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAxKTsKKwkJZWxzZQorCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAwKTsKIAkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZmZmZmZmZmYpOwogCQlpbnB1dF9zeW5jKGRldik7CiAJCWdvdG8gZXhpdDsKQEAgLTY3Niw4ICs3MDEsOCBAQAogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgIGRhdGFbOF0gJiAweDA0KTsKIAkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwOCk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MTApOwotCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgKChkYXRhWzhdICYgMHgwMikgPj4gMSkKLQkJCQkJCSAtIChkYXRhWzhdICYgMHgwMSkpOworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgKGRhdGFbOF0gJiAweDAxKQorCQkJCQkJIC0gKChkYXRhWzhdICYgMHgwMikgPj4gMSkpOwogCiAJCQkvKiBJMyAyRCBtb3VzZSBzaWRlIGJ1dHRvbnMgKi8KIAkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMykgewpAQCAtNjk1LDcgKzcyMCw4IEBACiAJCX0KIAl9CiAKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgd2Fjb20tPmlkW2lkeF0pOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgd2Fjb20tPmlkW2lkeF0pOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKIAlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKIAlpbnB1dF9zeW5jKGRldik7CiAKQEAgLTczMyw3ICs3NTksOCBAQAogCXsgIldhY29tIFBMODAwIiwgICAgICAgICA4LCAgIDcyMjAsICA1NzgwLCAgNTExLCAzMiwgUEwsICAgICAgICAgd2Fjb21fcGxfaXJxIH0sCiAJeyAiV2Fjb20gUEw3MDAiLCAgICAgICAgIDgsICAgNjc1OCwgIDU0MDYsICA1MTEsIDMyLCBQTCwJIHdhY29tX3BsX2lycSB9LAogCXsgIldhY29tIFBMNTEwIiwgICAgICAgICA4LCAgIDYyODIsICA0NzYyLCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKLQl7ICJXYWNvbSBQTDcxMCIsICAgICAgICAgOCwgIDM0MDgwLCAyNzY2MCwgIDUxMSwgMzIsIFBMLAkgd2Fjb21fcGxfaXJxIH0sCisJeyAiV2Fjb20gRFRVNzEwIiwgICAgICAgIDgsICAzNDA4MCwgMjc2NjAsICA1MTEsIDMyLCBQTCwJIHdhY29tX3BsX2lycSB9LAorCXsgIldhY29tIERURjUyMSIsICAgICAgICA4LCAgIDYyODIsICA0NzYyLCAgNTExLCAzMiwgUEwsICAgICAgICAgd2Fjb21fcGxfaXJxIH0sCiAJeyAiV2Fjb20gRFRGNzIwIiwgICAgICAgIDgsICAgNjg1OCwgIDU1MDYsICA1MTEsIDMyLCBQTCwJIHdhY29tX3BsX2lycSB9LAogCXsgIldhY29tIENpbnRpcSBQYXJ0bmVyIiw4LCAgMjA0ODAsIDE1MzYwLCAgNTExLCAzMiwgUEwsICAgICAgICAgd2Fjb21fcHR1X2lycSB9LAogCXsgIldhY29tIEludHVvczIgNHg1IiwgICAxMCwgMTI3MDAsIDEwNjAwLCAxMDIzLCAxNSwgSU5UVU9TLCAgICAgd2Fjb21faW50dW9zX2lycSB9LApAQCAtNzQ0LDYgKzc3MSw4IEBACiAJeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgIDEwLCAyNTQwMCwgMjAzMjAsIDEwMjMsIDE1LCBJTlRVT1MzLCAgICB3YWNvbV9pbnR1b3NfaXJxIH0sCiAJeyAiV2Fjb20gSW50dW9zMyA2eDgiLCAgIDEwLCA0MDY0MCwgMzA0ODAsIDEwMjMsIDE1LCBJTlRVT1MzLCAgICB3YWNvbV9pbnR1b3NfaXJxIH0sCiAJeyAiV2Fjb20gSW50dW9zMyA5eDEyIiwgIDEwLCA2MDk2MCwgNDU3MjAsIDEwMjMsIDE1LCBJTlRVT1MzLCAgICB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyAxMngxMiIsIDEwLCA2MDk2MCwgNjA5NjAsIDEwMjMsIDE1LCBJTlRVT1MzMTIsICB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyAxMngxOSIsIDEwLCA5NzUzNiwgNjA5NjAsIDEwMjMsIDE1LCBJTlRVT1MzMTksICB3YWNvbV9pbnR1b3NfaXJxIH0sCiAJeyAiV2Fjb20gSW50dW9zMyA2eDExIiwgIDEwLCA1NDIwNCwgMzE3NTAsIDEwMjMsIDE1LCBJTlRVT1MzLCAgICB3YWNvbV9pbnR1b3NfaXJxIH0sCiAJeyAiV2Fjb20gQ2ludGlxIDIxVVgiLCAgIDEwLCA4NzIwMCwgNjU2MDAsIDEwMjMsIDE1LCBDSU5USVEsICAgICB3YWNvbV9pbnR1b3NfaXJxIH0sCiAJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgIDEwLCAyMDMyMCwgMTYyNDAsIDEwMjMsIDE1LCBJTlRVT1MsICAgICB3YWNvbV9pbnR1b3NfaXJxIH0sCkBAIC03NzksNiArODA4LDcgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzOCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzOSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDMCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDMykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgwMykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MikgfSwKQEAgLTc4OCw2ICs4MTgsOCBAQAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIwKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIxKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEI0KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEI1KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDNGKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ3KSB9LApAQCAtODIwLDcgKzg1Miw3IEBACiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKIAlzdHJ1Y3Qgd2Fjb20gKndhY29tOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQljaGFyIHJlcF9kYXRhWzJdID0gezB4MDIsIDB4MDJ9OworCWNoYXIgcmVwX2RhdGFbMl0sIGxpbWl0ID0gMDsKIAogCXdhY29tID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdhY29tKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CkBAIC04NTcsNiArODg5LDcgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCB3YWNvbS0+ZmVhdHVyZXMtPnhfbWF4LCA0LCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCB3YWNvbS0+ZmVhdHVyZXMtPnlfbWF4LCA0LCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgd2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXgsIDAsIDApOworCWlucHV0X2Rldi0+YWJzYml0W0xPTkcoQUJTX01JU0MpXSB8PSBCSVQoQUJTX01JU0MpOwogCiAJc3dpdGNoICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUpIHsKIAkJY2FzZSBXQUNPTV9HNDoKQEAgLTg3NSw2ICs5MDgsOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJTlRVT1MzOgorCQljYXNlIElOVFVPUzMxMjoKKwkJY2FzZSBJTlRVT1MzMTk6CiAJCWNhc2UgQ0lOVElROgogCQkJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9GSU5HRVIpOwogCQkJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fMCkgfCBCSVQoQlROXzEpIHwgQklUKEJUTl8yKSB8IEJJVChCVE5fMykgfCBCSVQoQlROXzQpIHwgQklUKEJUTl81KSB8IEJJVChCVE5fNikgfCBCSVQoQlROXzcpOwpAQCAtOTE2LDEwICs5NTEsMTMgQEAKIAogCWlucHV0X3JlZ2lzdGVyX2RldmljZSh3YWNvbS0+ZGV2KTsKIAotCS8qIGFzayB0aGUgdGFibGV0IHRvIHJlcG9ydCB0YWJsZXQgZGF0YSAqLwotCXVzYl9zZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKLQkvKiByZXBlYXQgb25jZSAobm90IHN1cmUgd2h5IHRoZSBmaXJzdCBjYWxsIG9mdGVuIGZhaWxzKSAqLwotCXVzYl9zZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKwkvKiBBc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEuIFJlcGVhdCB1bnRpbCBpdCBzdWNjZWVkcyAqLworCWRvIHsKKwkJcmVwX2RhdGFbMF0gPSAyOworCQlyZXBfZGF0YVsxXSA9IDI7CisJCXVzYl9zZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKwkJdXNiX2dldF9yZXBvcnQoaW50ZiwgMywgMiwgcmVwX2RhdGEsIDIpOworCX0gd2hpbGUgKHJlcF9kYXRhWzFdICE9IDIgJiYgbGltaXQrKyA8IDUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCB3YWNvbSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKaW5kZXggMzgyNGRmMy4uMWZkOWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjZGVmaW5lIE1BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSCAxNgogdHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKQEAgLTExNCw2ICsxMTUsNyBAQAogCiAJLyogRGUtYXNzZXJ0IHJlc2V0IChsZXQgdGhlIENQVSBydW4pICovCiAJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwwKTsKKwltc2xlZXAoMjUwKTsJLyogbGV0IGRldmljZSBzZXR0bGUgKi8KIAogCS8qIDIuIFdlIHVwbG9hZCB0aGUgRlBHQSBmaXJtd2FyZSBpbnRvIHRoZSBFTUkKIAkgKiBOb3RlOiBjb2xsZWN0IHVwIHRvIDEwMjMgKHllcyEpIGJ5dGVzIGFuZCBzZW5kIHRoZW0gd2l0aApAQCAtMTUwLDYgKzE1Miw3IEBACiAJCQlnb3RvIHdyYXBlcnI7CiAJCX0KIAl9CisJbXNsZWVwKDI1MCk7CS8qIGxldCBkZXZpY2Ugc2V0dGxlICovCiAKIAkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KIAllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDApOwpAQCAtMTkyLDYgKzE5NSw3IEBACiAJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOwogCQlnb3RvIHdyYXBlcnI7CiAJfQorCW1zbGVlcCgyNTApOwkvKiBsZXQgZGV2aWNlIHNldHRsZSAqLwogCiAJLyogcmV0dXJuIDEgdG8gZmFpbCB0aGUgZHJpdmVyIGluaWFsaXphdGlvbgogCSAqIGFuZCBnaXZlIHJlYWwgZHJpdmVyIGNoYW5nZSB0byBsb2FkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggNTJmZWEyZS4uZmUzNTEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjZGVmaW5lIE1BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSCAxNgogdHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKQEAgLTEyMyw2ICsxMjQsNyBAQAogCiAJLyogRGUtYXNzZXJ0IHJlc2V0IChsZXQgdGhlIENQVSBydW4pICovCiAJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwwKTsKKwltc2xlZXAoMjUwKTsJLyogbGV0IGRldmljZSBzZXR0bGUgKi8KIAogCS8qIDIuIFdlIHVwbG9hZCB0aGUgRlBHQSBmaXJtd2FyZSBpbnRvIHRoZSBFTUkKIAkgKiBOb3RlOiBjb2xsZWN0IHVwIHRvIDEwMjMgKHllcyEpIGJ5dGVzIGFuZCBzZW5kIHRoZW0gd2l0aApAQCAtMTY2LDYgKzE2OCw3IEBACiAJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOwogCQlnb3RvIHdyYXBlcnI7CiAJfQorCW1zbGVlcCgyNTApOwkvKiBsZXQgZGV2aWNlIHNldHRsZSAqLwogCiAJLyogNC4gV2UgcHV0IHRoZSBwYXJ0IG9mIHRoZSBmaXJtd2FyZSB0aGF0IGxpZXMgaW4gdGhlIGV4dGVybmFsIFJBTSBpbnRvIHRoZSBFWi1VU0IgKi8KIApAQCAtMjI4LDYgKzIzMSw3IEBACiAJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOwogCQlnb3RvIHdyYXBlcnI7CiAJfQorCW1zbGVlcCgyNTApOwkvKiBsZXQgZGV2aWNlIHNldHRsZSAqLwogCiAJa2ZyZWUoYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCA5ZDU5YjkwLi5jY2M1ZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMzgxLDYgKzM4MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgewogCQljaGFyCQkqYnVmOworCQl1bnNpZ25lZAlqOwogCiAJCWJ1ZiA9IGt6YWxsb2MgKHNpemUsIFNMQUJfS0VSTkVMKTsKIAkJaWYgKCFidWYpIHsKQEAgLTM5MSw2ICszOTIsMTYgQEAKIAkJLyoga21hbGxvYyBwYWdlcyBhcmUgYWx3YXlzIHBoeXNpY2FsbHkgY29udGlndW91cyEgKi8KIAkJc2dfaW5pdF9vbmUoJnNnW2ldLCBidWYsIHNpemUpOwogCisJCXN3aXRjaCAocGF0dGVybikgeworCQljYXNlIDA6CisJCQkvKiBhbHJlYWR5IHplcm9lZCAqLworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspCisJCQkJKmJ1ZisrID0gKHU4KSAoaiAlIDYzKTsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKHZhcnkpIHsKIAkJCXNpemUgKz0gdmFyeTsKIAkJCXNpemUgJT0gbWF4OwpAQCAtNDI1LDYgKzQzNiw4IEBACiAJCXVzYl9zZ193YWl0IChyZXEpOwogCQlyZXR2YWwgPSByZXEtPnN0YXR1czsKIAorCQkvKiBGSVhNRSBjaGVjayByZXN1bHRpbmcgZGF0YSBwYXR0ZXJuICovCisKIAkJLyogRklYTUUgaWYgZW5kcG9pbnQgaGFsdGVkLCBjbGVhciBoYWx0IChhbmQgbG9nKSAqLwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2FzaXguYyBiL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKaW5kZXggMzA5NDk3MC4uMTJiNTk5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwpAQCAtMzcsNyArMzcsNiBAQAogCiAjaW5jbHVkZSAidXNibmV0LmgiCiAKLQogLyogQVNJWCBBWDg4MTdYIGJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgRGV2aWNlcyAqLwogCiAjZGVmaW5lIEFYX0NNRF9TRVRfU1dfTUlJCQkweDA2CkBAIC0xMDksNyArMTA4LDcgQEAKICNkZWZpbmUgQVhfRUVQUk9NX01BR0lDCQkJMHhkZWFkYmVlZgogCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW5ub3QgZXhjZWVkIHNpemVvZih1bnNpZ25lZCBsb25nIFs1XSkgQUtBIDIwIGJ5dGVzICovCi1zdHJ1Y3QgYXg4ODE3eF9kYXRhIHsKK3N0cnVjdCBhc2l4X2RhdGEgewogCXU4IG11bHRpX2ZpbHRlcltBWF9NQ0FTVF9GSUxURVJfU0laRV07CiB9OwogCkBAIC0xMjEsNyArMTIwLDcgQEAKIAl1MTYgcmVzMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IGF4ODgxN3hfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorc3RhdGljIGludCBhc2l4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKApAQCAtMTM2LDcgKzEzNSw3IEBACiAJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIHVzYl9jb250cm9sX21zZygKQEAgLTE1MSwxOSArMTUwLDgwIEBACiAJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIH0KIAotc3RhdGljIHZvaWQgYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGFzaXhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPmNvbnRleHQ7CiAKIAlpZiAodXJiLT5zdGF0dXMgPCAwKQotCQlwcmludGsoS0VSTl9ERUJVRyAiYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soKSBmYWlsZWQgd2l0aCAlZCIsCisJCXByaW50ayhLRVJOX0RFQlVHICJhc2l4X2FzeW5jX2NtZF9jYWxsYmFjaygpIGZhaWxlZCB3aXRoICVkIiwKIAkJCXVyYi0+c3RhdHVzKTsKIAogCWtmcmVlKHJlcSk7CiAJdXNiX2ZyZWVfdXJiKHVyYik7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxN3hfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIGlubGluZSBpbnQgYXNpeF9zZXRfc3dfbWlpKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDB4MDAwMCwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmRiZyhkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHNvZnR3YXJlIE1JSSBhY2Nlc3MiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBhc2l4X3NldF9od19taWkoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMHgwMDAwLCAwLCAwLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2ZGJnKGRldiwgIkZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgTUlJIGFjY2VzcyIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFzaXhfZ2V0X3BoeWlkKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwl2b2lkICpidWY7CisKKwlidWYgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dDE7CisKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9QSFlfSUQsCisJCQkJICAgIDAsIDAsIDIsIGJ1ZikpIDwgMikgeworCQlkZXZkYmcoZGV2LCAiRXJyb3IgcmVhZGluZyBQSFlJRCByZWdpc3RlcjogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MjsKKwl9CisJcmV0ID0gKigodTggKilidWYgKyAxKTsKK291dDI6CisJa2ZyZWUoYnVmKTsKK291dDE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhc2l4X3N3X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggZmxhZ3MpCit7CisJaW50IHJldDsKKworICAgICAgICByZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgZmxhZ3MsIDAsIDAsIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlkZXZkYmcoZGV2LCJGYWlsZWQgdG8gc2VuZCBzb2Z0d2FyZSByZXNldDogJTAyeCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IG1vZGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgbW9kZSwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZGV2ZGJnKGRldiwgIkZhaWxlZCB0byB3cml0ZSBSWF9DVEwgbW9kZTogJTAyeCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhc2l4X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgYXg4ODE3Ml9pbnRfZGF0YSAqZXZlbnQ7CiAJaW50IGxpbms7CkBAIC0xNzksMTIgKzIzOSwxMiBAQAogCQkJdXNibmV0X2RlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9MSU5LX1JFU0VUICk7CiAJCX0gZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOwotCQlkZXZkYmcoZGV2LCAiYXg4ODE3eCAtIExpbmsgU3RhdHVzIGlzOiAlZCIsIGxpbmspOworCQlkZXZkYmcoZGV2LCAiTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7CiAJfQogfQogCiBzdGF0aWMgdm9pZAotYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAogCQkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CkBAIC0yMTEsNyArMjcxLDcgQEAKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIGRldi0+dWRldiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCiAJCQkgICAgICh2b2lkICopcmVxLCBkYXRhLCBzaXplLAotCQkJICAgICBheDg4MTd4X2FzeW5jX2NtZF9jYWxsYmFjaywgcmVxKTsKKwkJCSAgICAgYXNpeF9hc3luY19jbWRfY2FsbGJhY2ssIHJlcSk7CiAKIAlpZigoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CiAJCWRldmVycihkZXYsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZCIsCkBAIC0yMjEsMTAgKzI4MSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXg4ODE3eF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgdm9pZCBhc2l4X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKSZkZXYtPmRhdGE7CisJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKIAl1OCByeF9jdGwgPSAweDhjOwogCiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpAQCAtMjU1LDUzICszMTUsNTEgQEAKIAkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCQl9CiAKLQkJYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLAorCQlhc2l4X3dyaXRlX2NtZF9hc3luYyhkZXYsIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIsIDAsIDAsCiAJCQkJICAgQVhfTUNBU1RfRklMVEVSX1NJWkUsIGRhdGEtPm11bHRpX2ZpbHRlcik7CiAKIAkJcnhfY3RsIHw9IDB4MTA7CiAJfQogCi0JYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCByeF9jdGwsIDAsIDAsIE5VTEwpOworCWFzaXhfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgcnhfY3RsLCAwLCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQorc3RhdGljIGludCBhc2l4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHJlczsKLQl1OCBidWZbMV07CiAKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKLQlheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTUlJX1JFRywgcGh5X2lkLAorCWFzaXhfc2V0X3N3X21paShkZXYpOworCWFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLCBwaHlfaWQsCiAJCQkJKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9IV19NSUksIDAsIDAsIDAsICZidWYpOworCWFzaXhfc2V0X2h3X21paShkZXYpOwogCiAJcmV0dXJuIHJlcyAmIDB4ZmZmZjsKIH0KIAogLyogc2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIHJlc3VsdGluZyB2YWx1ZSB0byBjcHUgYnl0ZSBvcmRlciAqLwotc3RhdGljIGludCBheDg4MTd4X21kaW9fcmVhZF9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQorc3RhdGljIGludCBhc2l4X21kaW9fcmVhZF9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQogewotCXJldHVybiBsZTE2X3RvX2NwdShheDg4MTd4X21kaW9fcmVhZChuZXRkZXYscGh5X2lkLCBsb2MpKTsKKwlyZXR1cm4gbGUxNl90b19jcHUoYXNpeF9tZGlvX3JlYWQobmV0ZGV2LHBoeV9pZCwgbG9jKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1heDg4MTd4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK2FzaXhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHJlcyA9IHZhbDsKLQl1OCBidWZbMV07CiAKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsCisJYXNpeF9zZXRfc3dfbWlpKGRldik7CisJYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUlJX1JFRywgcGh5X2lkLAogCQkJCShfX3UxNilsb2MsIDIsICh1MTYgKikmcmVzKTsKLQlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKTsKKwlhc2l4X3NldF9od19taWkoZGV2KTsKIH0KIAogLyogc2FtZSBhcyBhYm92ZSwgYnV0IGNvbnZlcnRzIG5ldyB2YWx1ZSB0byBsZTE2IGJ5dGUgb3JkZXIgYmVmb3JlIHdyaXRpbmcgKi8KIHN0YXRpYyB2b2lkCi1heDg4MTd4X21kaW9fd3JpdGVfbGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK2FzaXhfbWRpb193cml0ZV9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQogewotCWF4ODgxN3hfbWRpb193cml0ZSggbmV0ZGV2LCBwaHlfaWQsIGxvYywgY3B1X3RvX2xlMTYodmFsKSApOworCWFzaXhfbWRpb193cml0ZSggbmV0ZGV2LCBwaHlfaWQsIGxvYywgY3B1X3RvX2xlMTYodmFsKSApOwogfQogCiBzdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCkBAIC0zMTIsMjMgKzM3MCwyMyBAQAogCXU4IG1vZGU7CiAKIAltb2RlID0gQVhfTUVESVVNX1RYX0FCT1JUX0FMTE9XIHwgQVhfTUVESVVNX0ZMT1dfQ09OVFJPTF9FTjsKLQlscGEgPSBheDg4MTd4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKLQlhZHYgPSBheDg4MTd4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKwlscGEgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKKwlhZHYgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlyZXMgPSBtaWlfbndheV9yZXN1bHQobHBhfGFkdik7CiAJaWYgKHJlcyAmIExQQV9EVVBMRVgpCiAJCW1vZGUgfD0gQVhfTUVESVVNX0ZVTExfRFVQTEVYOwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLWF4ODgxN3hfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQorYXNpeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAl1OCBvcHQ7CiAKLQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01PTklUT1JfTU9ERSwgMCwgMCwgMSwgJm9wdCkgPCAwKSB7CisJaWYgKGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NT05JVE9SX01PREUsIDAsIDAsIDEsICZvcHQpIDwgMCkgewogCQl3b2xpbmZvLT5zdXBwb3J0ZWQgPSAwOwogCQl3b2xpbmZvLT53b2xvcHRzID0gMDsKIAkJcmV0dXJuOwpAQCAtMzQ0LDcgKzQwMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWF4ODgxN3hfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQorYXNpeF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAl1OCBvcHQgPSAwOwpAQCAtMzU3LDE5ICs0MTUsMTkgQEAKIAlpZiAob3B0ICE9IDApCiAJCW9wdCB8PSBBWF9NT05JVE9SX01PREU7CiAKLQlpZiAoYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTU9OSVRPUl9NT0RFLAorCWlmIChhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NT05JVE9SX01PREUsCiAJCQkgICAgICBvcHQsIDAsIDAsICZidWYpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgaW50IGFzaXhfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlyZXR1cm4gQVhfRUVQUk9NX0xFTjsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKK3N0YXRpYyBpbnQgYXNpeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCiAJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKQEAgLTM4NiwxNCArNDQ0LDE0IEBACiAKIAkvKiBheDg4MTd4IHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovCiAJZm9yIChpPTA7IGkgPCBlZXByb20tPmxlbiAvIDI7IGkrKykgewotCQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX0VFUFJPTSwKKwkJaWYgKGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9FRVBST00sCiAJCQllZXByb20tPm9mZnNldCArIGksIDAsIDIsICZlYnVmW2ldKSA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxN3hfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCitzdGF0aWMgdm9pZCBhc2l4X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCS8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi8KQEAgLTQwMSwxNCArNDU5LDE0IEBACiAJaW5mby0+ZWVkdW1wX2xlbiA9IDB4M2U7CiB9CiAKLXN0YXRpYyBpbnQgYXg4ODE3eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCitzdGF0aWMgaW50IGFzaXhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKIAlyZXR1cm4gbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksY21kKTsKIH0KIAotc3RhdGljIGludCBheDg4MTd4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgYXNpeF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIApAQCAtNDE4LDI3ICs0NzYsMjcgQEAKIC8qIFdlIG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBldGh0b29sX29wcyBzbyB3ZSByZXF1aXJlIG91cgogICAgb3duIHN0cnVjdHVyZSBzbyB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciB1c2JuZXQKICAgIGRldmljZXMgdGhhdCBtYXkgYmUgY29ubmVjdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxN3hfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvCQk9IGF4ODgxN3hfZ2V0X2RydmluZm8sCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGFzaXhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKLQkuZ2V0X3dvbAkJPSBheDg4MTd4X2dldF93b2wsCi0JLnNldF93b2wJCT0gYXg4ODE3eF9zZXRfd29sLAotCS5nZXRfZWVwcm9tX2xlbgkJPSBheDg4MTd4X2dldF9lZXByb21fbGVuLAotCS5nZXRfZWVwcm9tCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbSwKLQkuZ2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfZ2V0X3NldHRpbmdzLAotCS5zZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9zZXRfc2V0dGluZ3MsCisJLmdldF93b2wJCT0gYXNpeF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGFzaXhfc2V0X3dvbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYXNpeF9nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQkJPSBhc2l4X2dldF9lZXByb20sCisJLmdldF9zZXR0aW5ncwkJPSBhc2l4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGFzaXhfc2V0X3NldHRpbmdzLAogfTsKIAotc3RhdGljIGludCBheDg4MTd4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQorc3RhdGljIGludCBhc2l4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRldi0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGF4ODgxN3hfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCBheDg4MTcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpidWY7CkBAIC00NTUsNTUgKzUxMywzOSBAQAogCiAJLyogVG9nZ2xlIHRoZSBHUElPcyBpbiBhIG1hbnVmYWN0dXJlci9tb2RlbCBzcGVjaWZpYyB3YXkgKi8KIAlmb3IgKGkgPSAyOyBpID49IDA7IGktLSkgewotCQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAorCQlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAogCQkJCQkoZ3Bpb19iaXRzID4+IChpICogOCkpICYgMHhmZiwgMCwgMCwKIAkJCQkJYnVmKSkgPCAwKQogCQkJZ290byBvdXQyOwogCQltc2xlZXAoNSk7CiAJfQogCi0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsCi0JCQkJMHg4MCwgMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygic2VuZCBBWF9DTURfV1JJVEVfUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LDB4ODApKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiAJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX05PREVfSUQsCisJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTk9ERV9JRCwKIAkJCQkwLCAwLCA2LCBidWYpKSA8IDApIHsKIAkJZGJnKCJyZWFkIEFYX0NNRF9SRUFEX05PREVfSUQgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKLQkvKiBHZXQgdGhlIFBIWSBpZCAqLwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCQkwLCAwLCAyLCBidWYpKSA8IDApIHsKLQkJZGJnKCJlcnJvciBvbiByZWFkIEFYX0NNRF9SRUFEX1BIWV9JRDogJTAyeCIsIHJldCk7Ci0JCWdvdG8gb3V0MjsKLQl9IGVsc2UgaWYgKHJldCA8IDIpIHsKLQkJLyogdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAyIGJ5dGVzICovCi0JCWRiZygiQVhfQ01EX1JFQURfUEhZX0lEIHJldHVybmVkIGxlc3MgdGhhbiAyIGJ5dGVzOiByZXQ9JTAyeCIsCi0JCQkJcmV0KTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQyOwotCX0KLQogCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLwogCWRldi0+bWlpLmRldiA9IGRldi0+bmV0OwotCWRldi0+bWlpLm1kaW9fcmVhZCA9IGF4ODgxN3hfbWRpb19yZWFkOwotCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBheDg4MTd4X21kaW9fd3JpdGU7CisJZGV2LT5taWkubWRpb19yZWFkID0gYXNpeF9tZGlvX3JlYWQ7CisJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm1paS5waHlfaWQgPSAqKCh1OCAqKWJ1ZiArIDEpOwotCWRldi0+bmV0LT5kb19pb2N0bCA9IGF4ODgxN3hfaW9jdGw7CisJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxN3hfc2V0X211bHRpY2FzdDsKLQlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3eF9ldGh0b29sX29wczsKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTcyX2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlheDg4MTd4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQlBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKQEAgLTUxNSwxNiArNTU3LDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODc3Ml9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8JCT0gYXg4ODE3eF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2RydmluZm8JCT0gYXNpeF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAotCS5nZXRfd29sCQk9IGF4ODgxN3hfZ2V0X3dvbCwKLQkuc2V0X3dvbAkJPSBheDg4MTd4X3NldF93b2wsCi0JLmdldF9lZXByb21fbGVuCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbV9sZW4sCi0JLmdldF9lZXByb20JCT0gYXg4ODE3eF9nZXRfZWVwcm9tLAotCS5nZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncwkJPSBheDg4MTd4X3NldF9zZXR0aW5ncywKKwkuZ2V0X3dvbAkJPSBhc2l4X2dldF93b2wsCisJLnNldF93b2wJCT0gYXNpeF9zZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbgkJPSBhc2l4X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IGFzaXhfZ2V0X2VlcHJvbSwKKwkuZ2V0X3NldHRpbmdzCQk9IGFzaXhfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gYXNpeF9zZXRfc2V0dGluZ3MsCiB9OwogCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtNTQxLDYyICs1ODMsNDUgQEAKIAkJZ290byBvdXQxOwogCX0KIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfR1BJT1MsCisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKIAkJCQkgICAgIDB4MDBCMCwgMCwgMCwgYnVmKSkgPCAwKQogCQlnb3RvIG91dDI7CiAKIAltc2xlZXAoNSk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU0VMRUNULAorCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NFTEVDVCwKIAkJCQkweDAwMDEsIDAsIDAsIGJ1ZikpIDwgMCkgewogCQlkYmcoIlNlbGVjdCBQSFkgIzEgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0lQUEQsCi0JCQkJMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHBvd2VyIGRvd24gaW50ZXJuYWwgUEhZOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBEKSkgPCAwKQogCQlnb3RvIG91dDI7Ci0JfQogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9DTEVBUiwKLQkJCQkwLCAwLCBidWYpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gcGVyZm9ybSBzb2Z0d2FyZSByZXNldDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfQ0xFQVIpKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAltc2xlZXAoMTUwKTsKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULAotCSAgICAgCQkJQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwsCi0JCQkJMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLAotCQkJCQlyZXQpOworCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMKSkgPCAwKQogCQlnb3RvIG91dDI7Ci0JfQogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsCi0JCQkJMHgwMDAwLCAwLCAwLCBidWYpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gcmVzZXQgUlhfQ1RMOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDApKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCiAJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRCwKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQsCiAJCQkJMCwgMCwgRVRIX0FMRU4sIGJ1ZikpIDwgMCkgewogCQlkYmcoIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksCi0JCQkJMCwgMCwgMCwgYnVmKSkgPCAwKSB7Ci0JCWRiZygiRW5hYmxpbmcgc29mdHdhcmUgTUlJIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zZXRfc3dfbWlpKGRldikpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAotCWlmICgoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLAorCWlmICgoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLAogCSAgICAgIAkJCTB4MDAxMCwgMiwgMiwgYnVmKSkgPCAwKQogCQkJfHwgKCooKHUxNiAqKWJ1ZikgIT0gMHgwMDNiKSkgewogCQlkYmcoIlJlYWQgUEhZIHJlZ2lzdGVyIDIgbXVzdCBiZSAweDNiMDA6ICVkIiwgcmV0KTsKQEAgLTYwNSw3NCArNjMwLDQ5IEBACiAKIAkvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi8KIAlkZXYtPm1paS5kZXYgPSBkZXYtPm5ldDsKLQlkZXYtPm1paS5tZGlvX3JlYWQgPSBheDg4MTd4X21kaW9fcmVhZDsKLQlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXg4ODE3eF9tZGlvX3dyaXRlOworCWRldi0+bWlpLm1kaW9fcmVhZCA9IGFzaXhfbWRpb19yZWFkOworCWRldi0+bWlpLm1kaW9fd3JpdGUgPSBhc2l4X21kaW9fd3JpdGU7CiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweGZmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7Ci0JZGV2LT5uZXQtPmRvX2lvY3RsID0gYXg4ODE3eF9pb2N0bDsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOworCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAKLQkvKiBHZXQgdGhlIFBIWSBpZCAqLwotCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCTAsIDAsIDIsIGJ1ZikpIDwgMCkgewotCQlkYmcoIkVycm9yIHJlYWRpbmcgUEhZIElEOiAlMDJ4IiwgcmV0KTsKKwlpZiAoKHJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBBWF9TV1JFU0VUX1BSTCkpIDwgMCkKIAkJZ290byBvdXQyOwotCX0gZWxzZSBpZiAocmV0IDwgMikgewotCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIDIgYnl0ZXMgKi8KLQkJZGJnKCJBWF9DTURfUkVBRF9QSFlfSUQgcmV0dXJuZWQgbGVzcyB0aGFuIDIgYnl0ZXM6IHJldD0lMDJ4IiwKLQkJICAgIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0MjsKLQl9Ci0JZGV2LT5taWkucGh5X2lkID0gKigodTggKilidWYgKyAxKTsKIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfUFJMLAotCQkJCTAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIlNldCBleHRlcm5hbCBQSFkgcmVzZXQgcGluIGxldmVsOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0MjsKLQl9Ci0JbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwKLQkgICAgIAkJCUFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMLAotCQkJCTAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIlNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLCByZXQpOwotCQlnb3RvIG91dDI7Ci0JfQogCW1zbGVlcCgxNTApOwogCisJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwpKSA8IDApCisJCWdvdG8gb3V0MjsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTd4X3NldF9tdWx0aWNhc3Q7CisJbXNsZWVwKDE1MCk7CisKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlheDg4MTd4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKLQlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLAorCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsCiAJCQkJQVg4ODc3Ml9NRURJVU1fREVGQVVMVCwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgbWVkaXVtIG1vZGUgcmVnaXN0ZXI6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfSVBHMCwKKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0lQRzAsCiAJCQkJQVg4ODc3Ml9JUEcwX0RFRkFVTFQgfCBBWDg4NzcyX0lQRzFfREVGQVVMVCwKIAkJCQlBWDg4NzcyX0lQRzJfREVGQVVMVCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgSVBHLElQRzEsSVBHMiBmYWlsZWQ6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KLQlpZiAoKHJldCA9Ci0JICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHNldCBoYXJkd2FyZSBNSUk6ICUwMngiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF9zZXRfaHdfbWlpKGRldikpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAogCS8qIFNldCBSWF9DVEwgdG8gZGVmYXVsdCB2YWx1ZXMgd2l0aCAyayBidWZmZXIsIGFuZCBlbmFibGUgY2FjdHVzICovCi0JaWYgKChyZXQgPQotCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDAwODgsIDAsIDAsCi0JCQkgICAgICAgYnVmKSkgPCAwKSB7Ci0JCWRiZygiUmVzZXQgUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAweDAwODgpKSA8IDApCiAJCWdvdG8gb3V0MjsKLQl9CiAKIAlrZnJlZShidWYpOwogCkBAIC03OTQsMjMgKzc5NCwyMyBAQAogCXUxNiBtb2RlOwogCiAJbW9kZSA9IEFYODg3NzJfTUVESVVNX0RFRkFVTFQ7Ci0JbHBhID0gYXg4ODE3eF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7Ci0JYWR2ID0gYXg4ODE3eF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisJbHBhID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0xQQSk7CisJYWR2ID0gYXNpeF9tZGlvX3JlYWRfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiAJcmVzID0gbWlpX253YXlfcmVzdWx0KGxwYXxhZHYpOwogCiAJaWYgKChyZXMgJiBMUEFfRFVQTEVYKSA9PSAwKQogCQltb2RlICY9IH5BWDg4NzcyX01FRElVTV9GVUxMX0RVUExFWDsKIAlpZiAoKHJlcyAmIExQQV8xMDApID09IDApCiAJCW1vZGUgJj0gfkFYODg3NzJfTUVESVVNXzEwME1COwotCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTd4X2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODE3eCBVU0IgMi4wIEV0aGVybmV0IiwKLQkuYmluZCA9IGF4ODgxN3hfYmluZCwKLQkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmJpbmQgPSBheDg4MTcyX2JpbmQsCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLAogCS5saW5rX3Jlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKQEAgLTgxOSw4ICs4MTksOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGRsaW5rX2R1Yl9lMTAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkRMaW5rIERVQi1FMTAwIFVTQiBFdGhlcm5ldCIsCi0JLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5iaW5kID0gYXg4ODE3Ml9iaW5kLAorCS5zdGF0dXMgPSBhc2l4X3N0YXR1cywKIAkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCkBAIC04MjksOCArODI5LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBuZXRnZWFyX2ZhMTIwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIk5ldGdlYXIgRkEtMTIwIFVTQiBFdGhlcm5ldCIsCi0JLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5iaW5kID0gYXg4ODE3Ml9iaW5kLAorCS5zdGF0dXMgPSBhc2l4X3N0YXR1cywKIAkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCkBAIC04MzksOCArODM5LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBoYXdraW5nX3VmMjAwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkhhd2tpbmcgVUYyMDAgVVNCIEV0aGVybmV0IiwKLQkuYmluZCA9IGF4ODgxN3hfYmluZCwKLQkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmJpbmQgPSBheDg4MTcyX2JpbmQsCisJLnN0YXR1cyA9IGFzaXhfc3RhdHVzLAogCS5saW5rX3Jlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKQEAgLTg1MCwxMyArODUwLDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4NzcyIFVTQiAyLjAgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODc3Ml9iaW5kLAotCS5zdGF0dXMgPSBheDg4MTd4X3N0YXR1cywKKwkuc3RhdHVzID0gYXNpeF9zdGF0dXMsCiAJLmxpbmtfcmVzZXQgPSBheDg4NzcyX2xpbmtfcmVzZXQsCiAJLnJlc2V0ID0gYXg4ODc3Ml9saW5rX3Jlc2V0LAogCS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVgsCiAJLnJ4X2ZpeHVwID0gYXg4ODc3Ml9yeF9maXh1cCwKIAkudHhfZml4dXAgPSBheDg4NzcyX3R4X2ZpeHVwLAotCS5kYXRhID0gMHgwMDEzMDEwMywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCmluZGV4IDViNjY3NTYuLjc2ODM5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCiAJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKLQkJCSAgICAgJnRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisJCQkgICAgIHRtcCwgMSwgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpAQCAtMzE4LDYgKzMxOCw4IEBACiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1JFQUQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgewogCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUN0cmwsIDEsIGRhdGEpOworCQlpZiAocmV0ID09IC1FU0hVVERPV04pCisJCQlnb3RvIGZhaWw7CiAJCWlmIChkYXRhWzBdICYgUEhZX0RPTkUpCiAJCQlicmVhazsKIAl9CkBAIC0zMjYsNiArMzI4LDcgQEAKIAkJKnJlZ2QgPSBsZTE2X3RvX2NwdShyZWdkaSk7CiAJCXJldHVybiByZXQ7CiAJfQorZmFpbDoKIAlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKIAkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKQEAgLTM1NCwxMiArMzU3LDE1IEBACiAJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1dSSVRFKSk7CiAJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKIAkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlDdHJsLCAxLCBkYXRhKTsKKwkJaWYgKHJldCA9PSAtRVNIVVRET1dOKQorCQkJZ290byBmYWlsOwogCQlpZiAoZGF0YVswXSAmIFBIWV9ET05FKQogCQkJYnJlYWs7CiAJfQogCWlmIChpIDwgUkVHX1RJTUVPVVQpCiAJCXJldHVybiByZXQ7CiAKK2ZhaWw6CiAJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCiAJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiAtRVRJTUVET1VUOwpAQCAtMzg3LDYgKzM5Myw4IEBACiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21DdHJsLCAxLCAmdG1wKTsKIAkJaWYgKHRtcCAmIEVQUk9NX0RPTkUpCiAJCQlicmVhazsKKwkJaWYgKHJldCA9PSAtRVNIVVRET1dOKQorCQkJZ290byBmYWlsOwogCX0KIAlpZiAoaSA8IFJFR19USU1FT1VUKSB7CiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21EYXRhLCAyLCAmcmV0ZGF0YWkpOwpAQCAtMzk0LDYgKzQwMiw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCitmYWlsOgogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQogCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKQEAgLTQzMywxMiArNDQyLDE1IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgewogCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMSwgJnRtcCk7CisJCWlmIChyZXQgPT0gLUVTSFVURE9XTikKKwkJCWdvdG8gZmFpbDsKIAkJaWYgKHRtcCAmIEVQUk9NX0RPTkUpCiAJCQlicmVhazsKIAl9CiAJZGlzYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzKTsKIAlpZiAoaSA8IFJFR19USU1FT1VUKQogCQlyZXR1cm4gcmV0OworZmFpbDoKIAlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKIAkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIC1FVElNRURPVVQ7CkBAIC0xMzc4LDkgKzEzOTAsOCBAQAogCXN0cnVjdCBwZWdhc3VzICpwZWdhc3VzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAkKIAluZXRpZl9kZXZpY2VfZGV0YWNoIChwZWdhc3VzLT5uZXQpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2spOwogCWlmIChuZXRpZl9ydW5uaW5nKHBlZ2FzdXMtPm5ldCkpIHsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcGVnYXN1cy0+Y2Fycmllcl9jaGVjayk7Ci0KIAkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CiAJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5pbnRyX3VyYik7CiAJfQpAQCAtMTQwMCwxMCArMTQxMSw5IEBACiAJCXBlZ2FzdXMtPmludHJfdXJiLT5zdGF0dXMgPSAwOwogCQlwZWdhc3VzLT5pbnRyX3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAJCWludHJfY2FsbGJhY2socGVnYXN1cy0+aW50cl91cmIsIE5VTEwpOwotCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwZWdhc3VzX3dvcmtxdWV1ZSwgJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2ssCi0JCQkJCUNBUlJJRVJfQ0hFQ0tfREVMQVkpOwogCX0KKwlxdWV1ZV9kZWxheWVkX3dvcmsocGVnYXN1c193b3JrcXVldWUsICZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrLAorCQkJCUNBUlJJRVJfQ0hFQ0tfREVMQVkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jIGIvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYwppbmRleCA0OTk5MWFjLi45NGRkZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKQEAgLTM5LDYgKzM5LDIwIEBACiAgKiBSTkRJUyBpcyBORElTIHJlbW90ZWQgb3ZlciBVU0IuICBJdCdzIGEgTVNGVCB2YXJpYW50IG9mIENEQyBBQ00gLi4uIG9mCiAgKiBjb3Vyc2UgQUNNIHdhcyBpbnRlbmRlZCBmb3IgbW9kZW1zLCBub3QgRXRoZXJuZXQgbGlua3MhICBVU0IncyBzdGFuZGFyZAogICogZm9yIEV0aGVybmV0IGxpbmtzIGlzICJDREMgRXRoZXJuZXQiLCB3aGljaCBpcyBzaWduaWZpY2FudGx5IHNpbXBsZXIuCisgKgorICogTk9URSB0aGF0IE1pY3Jvc29mdCdzICJSTkRJUyAxLjAiIHNwZWNpZmljYXRpb24gaXMgaW5jb21wbGV0ZS4gIElzc3VlcworICogaW5jbHVkZToKKyAqICAgIC0gUG93ZXIgbWFuYWdlbWVudCBpbiBwYXJ0aWN1bGFyIHJlbGllcyBvbiBpbmZvcm1hdGlvbiB0aGF0J3Mgc2NhdHRlcmVkCisgKgl0aHJvdWdoIG90aGVyIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaCBpcyBpbmNvbXBsZXRlIG9yIGluY29ycmVjdCBldmVuCisgKgl0aGVyZS4KKyAqICAgIC0gVGhlcmUgYXJlIHZhcmlvdXMgdW5kb2N1bWVudGVkIHByb3RvY29sIHJlcXVpcmVtZW50cywgc3VjaCBhcyB0aGUKKyAqCW5lZWQgdG8gc2VuZCB1bnVzZWQgZ2FyYmFnZSBpbiBjb250cm9sLU9VVCBtZXNzYWdlcy4KKyAqICAgIC0gSW4gc29tZSBjYXNlcywgTVMtV2luZG93cyB3aWxsIGVtaXQgdW5kb2N1bWVudGVkIHJlcXVlc3RzOyB0aGlzCisgKgltYXR0ZXJzIG1vcmUgdG8gcGVyaXBoZXJhbCBpbXBsZW1lbnRhdGlvbnMgdGhhbiBob3N0IG9uZXMuCisgKgorICogRm9yIHRoZXNlIHJlYXNvbnMgYW5kIG90aGVycywgKiogVVNFIE9GIFJORElTIElTIFNUUk9OR0xZIERJU0NPVVJBR0VEICoqIGluCisgKiBmYXZvciBvZiBzdWNoIG5vbi1wcm9wcmlldGFyeSBhbHRlcm5hdGl2ZXMgYXMgQ0RDIEV0aGVybmV0IG9yIHRoZSBuZXdlciAoYW5kCisgKiBjdXJyZW50bHkgcmFyZSkgIkV0aGVybmV0IEVtdWxhdGlvbiBNb2RlbCIgKEVFTSkuCiAgKi8KIAogLyoKQEAgLTcyLDE3ICs4NiwxNyBAQAogICovCiAjZGVmaW5lIFJORElTX01TR19QQUNLRVQJY2NwdTIoMHgwMDAwMDAwMSkJLyogMS1OIHBhY2tldHMgKi8KICNkZWZpbmUgUk5ESVNfTVNHX0lOSVQJCWNjcHUyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFJORElTX01TR19JTklUX0MgCShSTkRJU19NU0dfSU5JVHxSTkRJU19NU0dfQ09NUExFVElPTikKKyNkZWZpbmUgUk5ESVNfTVNHX0lOSVRfQwkoUk5ESVNfTVNHX0lOSVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCiAjZGVmaW5lIFJORElTX01TR19IQUxUCQljY3B1MigweDAwMDAwMDAzKQogI2RlZmluZSBSTkRJU19NU0dfUVVFUlkJCWNjcHUyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFJORElTX01TR19RVUVSWV9DIAkoUk5ESVNfTVNHX1FVRVJZfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfUVVFUllfQwkoUk5ESVNfTVNHX1FVRVJZfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfU0VUCQljY3B1MigweDAwMDAwMDA1KQotI2RlZmluZSBSTkRJU19NU0dfU0VUX0MgCShSTkRJU19NU0dfU0VUfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfU0VUX0MJCShSTkRJU19NU0dfU0VUfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfUkVTRVQJCWNjcHUyKDB4MDAwMDAwMDYpCi0jZGVmaW5lIFJORElTX01TR19SRVNFVF9DIAkoUk5ESVNfTVNHX1JFU0VUfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfUkVTRVRfQwkoUk5ESVNfTVNHX1JFU0VUfFJORElTX01TR19DT01QTEVUSU9OKQogI2RlZmluZSBSTkRJU19NU0dfSU5ESUNBVEUJY2NwdTIoMHgwMDAwMDAwNykKICNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRQljY3B1MigweDAwMDAwMDA4KQotI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFX0MgCShSTkRJU19NU0dfS0VFUEFMSVZFfFJORElTX01TR19DT01QTEVUSU9OKQorI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFX0MJKFJORElTX01TR19LRUVQQUxJVkV8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCiAKIC8qIGNvZGVzIGZvciAic3RhdHVzIiBmaWVsZCBvZiBjb21wbGV0aW9uIG1lc3NhZ2VzICovCiAjZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQljY3B1MigweDAwMDAwMDAwKQpAQCAtNTk2LDEzICs2MTAsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgcm5kaXNfaW5pdCh2b2lkKQogewotIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZybmRpc19kcml2ZXIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJuZGlzX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChybmRpc19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHJuZGlzX2V4aXQodm9pZCkKIHsKLSAJdXNiX2RlcmVnaXN0ZXIoJnJuZGlzX2RyaXZlcik7CisJdXNiX2RlcmVnaXN0ZXIoJnJuZGlzX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChybmRpc19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCA1YThhMmM5Li41YzYwYmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtNzEsNiArNzEsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFueWRhdGEuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0FSSzMxMTYKKwl0cmlzdGF0ZSAiVVNCIEFSSyBNaWNybyAzMTE2IFVTQiBTZXJpYWwgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFSSyBNaWNybyAzMTE2IFVTQiB0byBTZXJpYWwKKwkgIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXJrMzExNgorCiBjb25maWcgVVNCX1NFUklBTF9CRUxLSU4KIAl0cmlzdGF0ZSAiVVNCIEJlbGtpbiBhbmQgUGVyYWNvbSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTApAQCAtMTU4LDYgKzE2OCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnRkaV9zaW8uCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0ZVTlNPRlQKKwl0cmlzdGF0ZSAiVVNCIEZ1bmRhbWVudGFsIFNvZnR3YXJlIERvbmdsZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZ1bmRhbWVudGFsIFNvZnR3YXJlIGRvbmdsZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnVuc29mdC4KKwogY29uZmlnIFVTQl9TRVJJQUxfVklTT1IKIAl0cmlzdGF0ZSAiVVNCIEhhbmRzcHJpbmcgVmlzb3IgLyBQYWxtIG01MHggLyBTb255IENsaWUgRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IGY3ZmU0MTcuLjVhMDk2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUpCQkrPSBhaXJwcmltZS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9BTllEQVRBKQkJKz0gYW55ZGF0YS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2KQkJKz0gYXJrMzExNi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLKQkJKz0gY3liZXJqYWNrLm8KQEAgLTIyLDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJKQkJKz0gaW9fdGkubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcpCQkJKz0gZW1wZWcubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8pCQkrPSBmdGRpX3Npby5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUKQkJKz0gZnVuc29mdC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4pCQkJKz0gZ2FybWluX2dwcy5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9IUDRYKQkJCSs9IGhwNHgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSVBBUSkJCQkrPSBpcGFxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKaW5kZXggZGJmMWYwNjMuLjY5NGIyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCkBAIC0xOCw2ICsxOCw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4ZjNkLCAweDAxMTIpIH0sICAvKiBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIFBDIENhcmQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNDEwLCAweDExMTApIH0sIC8qIE5vdmF0ZWwgV2lyZWxlc3MgTWVybGluIENETUEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAxMTIpIH0sIC8qIFNpZXJyYSBXaXJlbGVzcyBBaXJjYXJkIDU4MCAqLwogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlYzc5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKQEAgLTAsMCArMSw0NjUgQEAKKy8qCisgKiBhcmszMTE2CisgKiAtIGltcGxlbWVudHMgYSBkcml2ZXIgZm9yIHRoZSBhcmttaWNybyBhcmszMTE2IGNoaXBzZXQgKHZlbmRvcj0weDY1NDcsCisgKiAgIHByb2R1Y3RpZD0weDAyMzIpICh1c2VkIGluIGEgZGF0YWNhYmxlIGNhbGxlZCBLUS1VOEEpCisgKgorICogLSBiYXNlZCBvbiBjb2RlIGJ5IGtyaXNmeCAtPiB0aGFua3MgISEKKyAqICAgKHNlZSBodHRwOi8vd3d3LmxpbnV4cXVlc3Rpb25zLm9yZy9xdWVzdGlvbnMvc2hvd3RocmVhZC5waHA/cD0yMTg0NDU3I3Bvc3QyMTg0NDU3KQorICoKKyAqICAtIGJhc2VkIG9uIGxvZ3MgY3JlYXRlZCBieSB1c2Jzbm9vcHkKKyAqCisgKiAgQXV0aG9yICAgOiBTaW1vbiBTY2h1bHogW2FyazMxMTZfZHJpdmVyPEFUPmF1Y3Rpb25hbnQuZGVdCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4NjU0NywgMHgwMjMyKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdHJ1Y3QgYXJrMzExNl9wcml2YXRlIHsKKwlzcGlubG9ja190IGxvY2s7CisJdTggdGVybWlvc19pbml0aWFsaXplZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBUkszMTE2X1NORChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgc2VxLAorCQkJICAgICAgIF9fdTggcmVxdWVzdCwgX191OCByZXF1ZXN0dHlwZSwKKwkJCSAgICAgICBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgpCit7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkJIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwwKSwKKwkJCQkgcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwKKwkJCQkgTlVMTCwweDAwLCAxMDAwKTsKKwlkYmcoIiUwM2QgPiBvayIsc2VxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEFSSzMxMTZfUkNWKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBzZXEsCisJCQkgICAgICAgX191OCByZXF1ZXN0LCBfX3U4IHJlcXVlc3R0eXBlLAorCQkJICAgICAgIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgX191OCBleHBlY3RlZCwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsMCksCisJCQkgICAgICByZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LAorCQkJICAgICAgYnVmLCAweDAwMDAwMDEsIDEwMDApOworCWlmIChyZXN1bHQpCisJCWRiZygiJTAzZCA8ICVkIGJ5dGVzIFsweCUwMlhdIixzZXEsIHJlc3VsdCwgYnVmWzBdKTsKKwllbHNlCisJCWRiZygiJTAzZCA8IDAgYnl0ZXMiLCBzZXEpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBBUkszMTE2X1JDVl9RVUlFVChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICAgX191OCByZXF1ZXN0LCBfX3U4IHJlcXVlc3R0eXBlLAorCQkJCSAgICAgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCBjaGFyICpidWYpCit7CisJdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LDApLAorCQkJcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwKKwkJCWJ1ZiwgMHgwMDAwMDAxLCAxMDAwKTsKK30KKworCitzdGF0aWMgaW50IGFyazMxMTZfYXR0YWNoKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJY2hhciAqYnVmOworCXN0cnVjdCBhcmszMTE2X3ByaXZhdGUgKnByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlwcml2ID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYXJrMzExNl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdikKKwkJCWdvdG8gY2xlYW51cDsKKwkJbWVtc2V0IChwcml2LCAweDAwLCBzaXplb2YgKHN0cnVjdCBhcmszMTE2X3ByaXZhdGUpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHByaXYpOworCX0KKworCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZGJnKCJlcnJvciBrbWFsbG9jIC0+IG91dCBvZiBtZW0gPyIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogMyAqLworCUFSSzMxMTZfU05EKHNlcmlhbCwgMywweEZFLDB4NDAsMHgwMDA4LDB4MDAwMik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCA0LDB4RkUsMHg0MCwweDAwMDgsMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDUsMHhGRSwweDQwLDB4MDAwMCwweDAwMDgpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgNiwweEZFLDB4NDAsMHgwMDAwLDB4MDAwQik7CisKKwkvKiA8LS0gc2VxNyAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwgNywweEZFLDB4QzAsMHgwMDAwLDB4MDAwMywgMHgwMCwgYnVmKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDgsMHhGRSwweDQwLDB4MDA4MCwweDAwMDMpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgOSwweEZFLDB4NDAsMHgwMDFBLDB4MDAwMCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLDEwLDB4RkUsMHg0MCwweDAwMDAsMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTEsMHhGRSwweDQwLDB4MDAwMCwweDAwMDMpOworCisJLyogPC0tIHNlcTEyICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDEyLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAwLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxMywweEZFLDB4NDAsMHgwMDAwLDB4MDAwNCk7CisKKwkvKiAxNCAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwxNCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMCwgYnVmKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTUsMHhGRSwweDQwLDB4MDAwMCwweDAwMDQpOworCisJLyogMTYgKi8KKwlBUkszMTE2X1JDVihzZXJpYWwsMTYsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsIDB4MDAsIGJ1Zik7CisJLyogLS0+IHNlcTE3ICovCisJQVJLMzExNl9TTkQoc2VyaWFsLDE3LDB4RkUsMHg0MCwweDAwMDEsMHgwMDA0KTsKKworCS8qIDwtLSBzZXExOCAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwxOCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMSwgYnVmKTsKKworCS8qIC0tPiBzZXExOSAqLworCUFSSzMxMTZfU05EKHNlcmlhbCwxOSwweEZFLDB4NDAsMHgwMDAzLDB4MDAwNCk7CisKKworCS8qIDwtLSBzZXEyMCAqLworCS8qIHNlZW1zIGxpa2Ugc2VyaWFsIHBvcnQgc3RhdHVzIGluZm8gKFJUUywgQ1RTLC4uLikgKi8KKwkvKiByZXR1cm5zIG1vZGVtIGNvbnRyb2wgbGluZSBzdGF0dXMgPyEgKi8KKwlBUkszMTE2X1JDVihzZXJpYWwsMjAsMHhGRSwweEMwLDB4MDAwMCwweDAwMDYsIDB4RkYsIGJ1Zik7CisKKwkvKiBzZXQgOTYwMCBiYXVkICYgZG8gc29tZSBpbml0ID8hICovCisJQVJLMzExNl9TTkQoc2VyaWFsLDE0NywweEZFLDB4NDAsMHgwMDgzLDB4MDAwMyk7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE0OCwweEZFLDB4NDAsMHgwMDM4LDB4MDAwMCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE0OSwweEZFLDB4NDAsMHgwMDAxLDB4MDAwMSk7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE1MCwweEZFLDB4NDAsMHgwMDAzLDB4MDAwMyk7CisJQVJLMzExNl9SQ1Yoc2VyaWFsLDE1MSwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwweDAzLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNTIsMHhGRSwweDQwLDB4MDAwMCwweDAwMDMpOworCUFSSzMxMTZfUkNWKHNlcmlhbCwxNTMsMHhGRSwweEMwLDB4MDAwMCwweDAwMDMsMHgwMCwgYnVmKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTU0LDB4RkUsMHg0MCwweDAwMDMsMHgwMDAzKTsKKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuKDApOworCitjbGVhbnVwOgorCWZvciAoLS1pOyBpPj0wOyAtLWkpCisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBhcmszMTE2X3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGFyazMxMTZfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYmF1ZDsKKwlpbnQgYXJrMzExNl9iYXVkOworCWNoYXIgKmJ1ZjsKKwljaGFyIGNvbmZpZzsKKworCWNvbmZpZyA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgeworCQkqKHBvcnQtPnR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmc6ICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PQorCQkgICAgIFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGNoYW5nZS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlidWYgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWRiZygiZXJyb3Iga21hbGxvYyIpOworCQlyZXR1cm47CisJfQorCisJLyogc2V0IGRhdGEgYml0IGNvdW50ICg4LzcvNi81KSAqLworCWlmIChjZmxhZyAmIENTSVpFKXsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKXsKKwkJY2FzZSBDUzU6CisJCQljb25maWcgfD0gMHgwMDsKKwkJCWRiZygic2V0dGluZyBDUzUiKTsKKwkJCWJyZWFrOworCQljYXNlIENTNjoKKwkJCWNvbmZpZyB8PSAweDAxOworCQkJZGJnKCJzZXR0aW5nIENTNiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1M3OgorCQkJY29uZmlnIHw9IDB4MDI7CisJCQlkYmcoInNldHRpbmcgQ1M3Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciAoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4LCB1c2luZyBDUzghIik7CisJCWNhc2UgQ1M4OgorCQkJY29uZmlnIHw9IDB4MDM7CisJCQlkYmcoInNldHRpbmcgQ1M4Iik7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHNldCBwYXJpdHkgKE5PTkUsRVZFTixPREQpICovCisJaWYgKGNmbGFnICYgUEFSRU5CKXsKKwkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQljb25maWcgfD0gMHgwODsKKwkJCWRiZygic2V0dGluZyBwYXJpdHkgdG8gT0REIik7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gMHgxODsKKwkJCWRiZygic2V0dGluZyBwYXJpdHkgdG8gRVZFTiIpOworCQl9CisJfSBlbHNlIHsKKwkJZGJnKCJzZXR0aW5nIHBhcml0eSB0byBOT05FIik7CisJfQorCisJLyogU0VUIFNUT1BCSVQgKDEvMikgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJY29uZmlnIHw9IDB4MDQ7CisJCWRiZyAoInNldHRpbmcgMiBzdG9wIGJpdHMiKTsKKwl9IGVsc2UgeworCQlkYmcgKCJzZXR0aW5nIDEgc3RvcCBiaXQiKTsKKwl9CisKKworCS8qIHNldCBiYXVkcmF0ZTogKi8KKwliYXVkID0gMDsKKwlzd2l0Y2ggKGNmbGFnICYgQ0JBVUQpeworCQljYXNlIEIwOgorCQkJZXJyKCJjYW4ndCBzZXQgMGJhdWQsIHVzaW5nIDk2MDAgaW5zdGVhZCIpOworCQkJYnJlYWs7CisJCWNhc2UgQjc1OgliYXVkID0gNzU7CWJyZWFrOworCQljYXNlIEIxNTA6CWJhdWQgPSAxNTA7CWJyZWFrOworCQljYXNlIEIzMDA6CWJhdWQgPSAzMDA7CWJyZWFrOworCQljYXNlIEI2MDA6CWJhdWQgPSA2MDA7CWJyZWFrOworCQljYXNlIEIxMjAwOgliYXVkID0gMTIwMDsJYnJlYWs7CisJCWNhc2UgQjE4MDA6CWJhdWQgPSAxODAwOwlicmVhazsKKwkJY2FzZSBCMjQwMDoJYmF1ZCA9IDI0MDA7CWJyZWFrOworCQljYXNlIEI0ODAwOgliYXVkID0gNDgwMDsJYnJlYWs7CisJCWNhc2UgQjk2MDA6CWJhdWQgPSA5NjAwOwlicmVhazsKKwkJY2FzZSBCMTkyMDA6CWJhdWQgPSAxOTIwMDsJYnJlYWs7CisJCWNhc2UgQjM4NDAwOgliYXVkID0gMzg0MDA7CWJyZWFrOworCQljYXNlIEI1NzYwMDoJYmF1ZCA9IDU3NjAwOwlicmVhazsKKwkJY2FzZSBCMTE1MjAwOgliYXVkID0gMTE1MjAwOwlicmVhazsKKwkJY2FzZSBCMjMwNDAwOgliYXVkID0gMjMwNDAwOwlicmVhazsKKwkJY2FzZSBCNDYwODAwOgliYXVkID0gNDYwODAwOwlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZygiZG9lcyBub3Qgc3VwcG9ydCB0aGUgYmF1ZHJhdGUgcmVxdWVzdGVkIChmaXggaXQpIik7CisJCQlicmVhazsKKwl9CisKKwkvKiBzZXQgOTYwMCBhcyBkZWZhdWx0IChpZiBnaXZlbiBiYXVkcmF0ZSBpcyBpbnZhbGlkIGZvciBleGFtcGxlKSAqLworCWlmIChiYXVkID09IDApCisJCWJhdWQgPSA5NjAwOworCisJLyoKKwkgKiBmb3VuZCBieSB0cnknbidlcnJvciwgYmUgY2FyZWZ1bCwgbWF5YmUgdGhlcmUgYXJlIG90aGVyIG9wdGlvbnMKKwkgKiBmb3IgbXVsdGlwbGljYXRvciBldGMhCisJICovCisJaWYgKGJhdWQgPT0gNDYwODAwKQorCQkvKiBzdHJhbmdlLCBmb3IgNDYwODAwIHRoZSBmb3JtdWxhIGlzIHdyb25nCisJCSAqIChkb250IHVzZSByb3VuZCgpLCB0aGVuIDk2MDBiYXVkIGlzIHdyb25nKSAqLworCQlhcmszMTE2X2JhdWQgPSA3OworCWVsc2UKKwkJYXJrMzExNl9iYXVkID0gMzAwMDAwMCAvIGJhdWQ7CisKKwkvKiA/ICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDAsMHhGRSwweEMwLDB4MDAwMCwweDAwMDMsIDB4MDMsIGJ1Zik7CisJLyogb2Zmc2V0ID0gYnVmWzBdOyAqLworCS8qIG9mZnNldCA9IDB4MDM7ICovCisJLyogZGJnKCJ1c2luZyAweCUwNFggYXMgdGFyZ2V0IGZvciAweDAwMDM6IiwweDAwODArb2Zmc2V0KTsgKi8KKworCisJLyogc2V0IGJhdWRyYXRlICovCisJZGJnKCJzZXR0aW5nIGJhdWRyYXRlIHRvICVkICgtPnJlZz0lZCkiLGJhdWQsYXJrMzExNl9iYXVkKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTQ3LDB4RkUsMHg0MCwweDAwODMsMHgwMDAzKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTQ4LDB4RkUsMHg0MCwoYXJrMzExNl9iYXVkICYgMHgwMEZGKSAgICwweDAwMDApOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNDksMHhGRSwweDQwLChhcmszMTE2X2JhdWQgJiAweEZGMDApPj44LDB4MDAwMSk7CisJQVJLMzExNl9TTkQoc2VyaWFsLDE1MCwweEZFLDB4NDAsMHgwMDAzLDB4MDAwMyk7CisKKwkvKiA/ICovCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDE1MSwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwweDAzLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNTIsMHhGRSwweDQwLDB4MDAwMCwweDAwMDMpOworCisJLyogc2V0IGRhdGEgYml0IGNvdW50LCBzdG9wIGJpdCBjb3VudCAmIHBhcml0eTogKi8KKwlkYmcoInVwZGF0aW5nIGJpdCBjb3VudCwgc3RvcCBiaXQgb3IgcGFyaXR5IChjZmc9MHglMDJYKSIsIGNvbmZpZyk7CisJQVJLMzExNl9SQ1Yoc2VyaWFsLDE1MywweEZFLDB4QzAsMHgwMDAwLDB4MDAwMywweDAwLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxNTQsMHhGRSwweDQwLGNvbmZpZywweDAwMDMpOworCisJaWYgKGNmbGFnICYgQ1JUU0NUUykKKwkJZGJnKCJDUlRTQ1RTIG5vdCBzdXBwb3J0ZWQgYnkgY2hpcHNldCA/ISIpOworCisJLyogVEVTVCBBUkszMTE2X1NORCgxNTQsMHhGRSwweDQwLDB4RkZGRiwgMHgwMDA2KTsgKi8KKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGFyazMxMTZfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdGVybWlvcyB0bXBfdGVybWlvczsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWNoYXIgKmJ1ZjsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSAgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZGJnKCJlcnJvciBrbWFsbG9jIC0+IG91dCBvZiBtZW0gPyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXN1bHQgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbihwb3J0LCBmaWxwKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogb3BlbiAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwxMTEsMHhGRSwweEMwLDB4MDAwMCwweDAwMDMsIDB4MDIsIGJ1Zik7CisKKwlBUkszMTE2X1NORChzZXJpYWwsMTEyLDB4RkUsMHg0MCwweDAwODIsMHgwMDAzKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTEzLDB4RkUsMHg0MCwweDAwMUEsMHgwMDAwKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTE0LDB4RkUsMHg0MCwweDAwMDAsMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsMTE1LDB4RkUsMHg0MCwweDAwMDIsMHgwMDAzKTsKKworCUFSSzMxMTZfUkNWKHNlcmlhbCwxMTYsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsIDB4MDMsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLDExNywweEZFLDB4NDAsMHgwMDAyLDB4MDAwNCk7CisKKwlBUkszMTE2X1JDVihzZXJpYWwsMTE4LDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAyLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwxMTksMHhGRSwweDQwLDB4MDAwMCwweDAwMDQpOworCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDEyMCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMCwgYnVmKTsKKworCUFSSzMxMTZfU05EKHNlcmlhbCwxMjEsMHhGRSwweDQwLDB4MDAwMSwweDAwMDQpOworCisJQVJLMzExNl9SQ1Yoc2VyaWFsLDEyMiwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMSwgYnVmKTsKKworCUFSSzMxMTZfU05EKHNlcmlhbCwxMjMsMHhGRSwweDQwLDB4MDAwMywweDAwMDQpOworCisJLyogcmV0dXJucyBkaWZmZXJlbnQgdmFsdWVzIChjb250cm9sIGxpbmVzID8hKSAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwxMjQsMHhGRSwweEMwLDB4MDAwMCwweDAwMDYsIDB4RkYsIGJ1Zik7CisKKwkvKiBpbml0aWFsaXNlIHRlcm1pb3M6ICovCisJaWYgKHBvcnQtPnR0eSkKKwkJYXJrMzExNl9zZXRfdGVybWlvcyhwb3J0LCAmdG1wX3Rlcm1pb3MpOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIGludCBhcmszMTE2X2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRiZygiaW9jdGwgbm90IHN1cHBvcnRlZCB5ZXQuLi4iKTsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IGFyazMxMTZfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwljaGFyICpidWY7CisJY2hhciB0ZW1wOworCisJLyogc2VlbXMgbGlrZSBzZXJpYWwgcG9ydCBzdGF0dXMgaW5mbyAoUlRTLCBDVFMsLi4uKSBpcyBzdG9yZWQKKwkgKiBpbiByZWcoPykgMHgwMDA2CisJICogcGNiIGNvbm5lY3Rpb24gcG9pbnQgMTEgPSBHTkQgLT4gc2V0cyBiaXQ0IG9mIHJlc3BvbnNlCisJICogcGNiIGNvbm5lY3Rpb24gcG9pbnQgIDcgPSBHTkQgLT4gc2V0cyBiaXQ2IG9mIHJlc3BvbnNlCisJICovCisKKwlidWYgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWRiZygiZXJyb3Iga21hbGxvYyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiByZWFkIHJlZ2lzdGVyOiAqLworCUFSSzMxMTZfUkNWX1FVSUVUKHNlcmlhbCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNixidWYpOworCXRlbXAgPSBidWZbMF07CisJa2ZyZWUoYnVmKTsKKworCS8qIGkgZG8gbm90IHJlYWxseSBrbm93IGlmIGJpdDQ9Q1RTIGFuZCBiaXQ2PURTUi4uLiB3YXMganVzdCBhCisJICogcXVpY2sgZ3Vlc3MgISEKKwkgKi8KKwlyZXR1cm4gICh0ZW1wICYgKDE8PDQpID8gVElPQ01fQ1RTIDogMCkgfAorCSAgICAgICAgKHRlbXAgJiAoMTw8NikgPyBUSU9DTV9EU1IgOiAwKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFyazMxMTZfZHJpdmVyID0geworCS5uYW1lID0JCSJhcmszMTE2IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBhcmszMTE2X2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJImFyazMxMTYiLAorCX0sCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJYXJrMzExNl9hdHRhY2gsCisJLnNldF90ZXJtaW9zID0JCWFyazMxMTZfc2V0X3Rlcm1pb3MsCisJLmlvY3RsID0JCWFyazMxMTZfaW9jdGwsCisJLnRpb2NtZ2V0ID0JCWFyazMxMTZfdGlvY21nZXQsCisJLm9wZW4gPQkJCWFyazMxMTZfb3BlbiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFyazMxMTZfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZhcmszMTE2X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmFyazMxMTZfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmFyazMxMTZfZGV2aWNlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXJrMzExNl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFyazMxMTZfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmFyazMxMTZfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoYXJrMzExNl9pbml0KTsKK21vZHVsZV9leGl0KGFyazMxMTZfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCmluZGV4IDE2N2Y4ZWMuLjgwMjNiYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtNTQsNyArNTQsNyBAQAogICogc2VyaWFsLmMgY29kZSwgZXhjZXB0IHRoYXQgdGhlIHNwZWNpZmllciBpcyAidHR5VVNCIiBpbnN0ZWFkCiAgKiBvZiAidHR5UyIuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHVzYl9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgdXNiX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQogewogCXN0cnVjdCB1c2Jjb25zX2luZm8gKmluZm8gPSAmdXNiY29uc19pbmZvOwogCWludCBiYXVkID0gOTYwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggZjNhZjgxYi4uOTg2ZDc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTMwNyw3ICszMDcsOSBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQUNUWldBVkVfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JUlRSQU5TX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSVBMVVNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TSU9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfUElEKSB9LApAQCAtNDg5LDEwICs0OTEsMTUgQEAKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVklELCBLT0JJTF9DT05WX0tBQU5fUElEKSB9LAogCXsgVVNCX0RFVklDRShQT1NJRkxFWF9WSUQsIFBPU0lGTEVYX1BQNzAwMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RUVVNCX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUNMT19DT01fMVdJUkVfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9XRVNUUkVYX01PREVMXzc3N19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1dFU1RSRVhfTU9ERUxfODkwMEZfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QQ0RKX0RBQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FTS19SRFI0MDBfUElEKSB9LAogCXsgVVNCX0RFVklDRShJQ09NX0lEMV9WSUQsIElDT01fSUQxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFQT1VDSF9WSUQsIFBBUE9VQ0hfVE1VX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQUNHX0hGRFVBTF9QSUQpIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggOGRhNzczYy4uZDY5YTkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjZGVmaW5lIEZURElfTkZfUklDX1BJRAkweDAwMDEJLyogUHJvZHVjdCBJZCAqLwogCiAKKy8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UgKGh0dHA6Ly93d3cuYWN0LXNvbHV0aW9ucy5jb20vSG9tZVByby5odG0pICovCisjZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAorCisKIC8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLwogI2RlZmluZSBGVERJX0lSVFJBTlNfUElEIDB4RkM2MCAvKiBQcm9kdWN0IElkICovCiAKQEAgLTM5LDYgKzQzLDkgQEAKIC8qIHd3dy50aG91Z2h0dGVjaG5vbG9neS5jb20vIFRULVVTQiBwcm92aWRlIHdpdGggcHJvY29tcCB1c2UgZnRkaV9zaW8gKi8KICNkZWZpbmUgRlRESV9UVFVTQl9QSUQgMHhGRjIwIC8qIFByb2R1Y3QgSWQgKi8KIAorLyogaVBsdXMgZGV2aWNlICovCisjZGVmaW5lIEZURElfSVBMVVNfUElEIDB4RDA3MCAvKiBQcm9kdWN0IElkICovCisKIC8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCiAvKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLwogI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLwpAQCAtMTUzLDYgKzE2MCwxMSBAQAogI2RlZmluZSBJQ09NX0lEMV9QSUQgICAgICAgICAgICAweDAwMDQKIAogLyoKKyAqIEFTSy5mciBkZXZpY2VzCisgKi8KKyNkZWZpbmUgRlRESV9BU0tfUkRSNDAwX1BJRAkweEM5OTEJLyogQVNLIFJEUiA0MDAgc2VyaWVzIGNhcmQgcmVhZGVyICovCisKKy8qCiAgKiBEU1MtMjAgU3luYyBTdGF0aW9uIGZvciBTb255IEVyaWNzc29uIFA4MDAKICAqLwogIApAQCAtMzk5LDYgKzQxMSwzMSBAQAogI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCiAjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCiAKKy8qCisgKiBSUi1DaXJLaXRzIExvY29CdWZmZXIgVVNCIChodHRwOi8vd3d3LnJyLWNpcmtpdHMuY29tKQorICovCisjZGVmaW5lIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElECTB4YzdkMAkvKiBMb2NvQnVmZmVyIFVTQiAqLworCisvKgorICogRWNsbyAoaHR0cDovL3d3dy5lY2xvLnB0LykgcHJvZHVjdCBJRHMuCisgKiBQSUQgMHhFQTkwIHN1Ym1pdHRlZCBieSBNYXJ0aW4gR3JpbGwuCisgKi8KKyNkZWZpbmUgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQJMHhFQTkwCS8qIENPTSB0byAxLVdpcmUgVVNCIGFkYXB0b3IgKi8KKworLyoKKyAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQorICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KKyAqLworCisjZGVmaW5lIFBBUE9VQ0hfVklECQkJMHg1MDUwCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLworCisvKgorICogQUNHIElkZW50aWZpY2F0aW9uIFRlY2hub2xvZ2llcyBHbWJIIHByb2R1Y3RzIChodHRwOi8vd3d3LmFjZy5kZS8pLgorICogU3VibWl0dGVkIGJ5IGFudG9uIC1hdC0gZ290bzEwIC1kb3QtIG9yZy4KKyAqLworI2RlZmluZSBGVERJX0FDR19IRkRVQUxfUElECQkweEREMjAJLyogSEYgRHVhbCBJU08gUmVhZGVyIChSRklEKSAqLworCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzcyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBGdW5zb2Z0IFNlcmlhbCBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDE0MDQsIDB4Y2RkYykgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZ1bnNvZnRfZHJpdmVyID0geworCS5uYW1lID0JCSJmdW5zb2Z0IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGZ1bnNvZnRfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkiZnVuc29mdCIsCisJfSwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmdW5zb2Z0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnVuc29mdF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZmdW5zb2Z0X2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdW5zb2Z0X2RldmljZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZ1bnNvZnRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZmdW5zb2Z0X2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdW5zb2Z0X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGZ1bnNvZnRfaW5pdCk7Cittb2R1bGVfZXhpdChmdW5zb2Z0X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggNDc2Y2RhMS4uYzYyY2MyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0xMzgsNiArMTM4LDcgQEAKIAogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbik7CiAKIHN0YXRpYyB2b2lkIGdlbmVyaWNfY2xlYW51cCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IDRkNDA3MDQuLjIzODAzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtMjU3LDE0ICsyNTcsMTQgQEAKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQlzcGluX2xvY2soJnBvcnQtPmxvY2spOwotCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkgewotCQlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisJc3Bpbl9sb2NrKCZ3cG9ydC0+bG9jayk7CisJaWYgKHdwb3J0LT53cml0ZV91cmJfYnVzeSkgeworCQlzcGluX3VubG9jaygmd3BvcnQtPmxvY2spOwogCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDA7CiAJfQotCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMTsKLQlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisJd3BvcnQtPndyaXRlX3VyYl9idXN5ID0gMTsKKwlzcGluX3VubG9jaygmd3BvcnQtPmxvY2spOwogCiAJY291bnQgPSAoY291bnQgPiBPTU5JTkVUX0JVTEtPVVRTSVpFKSA/IE9NTklORVRfQlVMS09VVFNJWkUgOiBjb3VudDsKIApAQCAtMjgzLDcgKzI4Myw3IEBACiAJd3BvcnQtPndyaXRlX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIod3BvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewotCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7CisJCXdwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7CiAJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwogCX0gZWxzZQogCQlyZXN1bHQgPSBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA0OTVkYjU3Li41Y2YyYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAgIDIwMDUtMDktMTAgIHYwLjQuMyBhZGRlZCBIVUFXRUkgRTYwMCBjYXJkIGFuZCBBdWRpb3ZveCBBaXJDYXJkCiAgIDIwMDUtMDktMjAgIHYwLjQuNCBpbmNyZWFzZWQgcmVjdiBidWZmZXIgc2l6ZTogdGhlIGNhcmQgc29tZXRpbWVzCiAgICAgICAgICAgICAgICAgICAgICB3YW50cyB0byBzZW5kID4yMDAwIGJ5dGVzLgorICAyMDA2LTA0LTEwICB2MC40LjIgZml4ZWQgdHdvIGFycmF5IG92ZXJydW4gZXJyb3JzIDotLwogCiAgIFdvcmsgc3BvbnNvcmVkIGJ5OiBTaWdvcyBHbWJILCBHZXJtYW55IDxpbmZvQHNpZ29zLmRlPgogCkBAIC01ODIsMTQgKzU4MywxNCBAQAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJLyogRG8gaW5kYXQgZW5kcG9pbnRzIGZpcnN0ICovCi0JZm9yIChqID0gMDsgaiA8PSBOX0lOX1VSQjsgKytqKSB7CisJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyArK2opIHsKIAkJcG9ydGRhdGEtPmluX3VyYnNbal0gPSBvcHRpb25fc2V0dXBfdXJiIChzZXJpYWwsCiAgICAgICAgICAgICAgICAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcywgVVNCX0RJUl9JTiwgcG9ydCwKICAgICAgICAgICAgICAgICAgIHBvcnRkYXRhLT5pbl9idWZmZXJbal0sIElOX0JVRkxFTiwgb3B0aW9uX2luZGF0X2NhbGxiYWNrKTsKIAl9CiAKIAkvKiBvdXRkYXQgZW5kcG9pbnRzICovCi0JZm9yIChqID0gMDsgaiA8PSBOX09VVF9VUkI7ICsraikgeworCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7ICsraikgewogCQlwb3J0ZGF0YS0+b3V0X3VyYnNbal0gPSBvcHRpb25fc2V0dXBfdXJiIChzZXJpYWwsCiAgICAgICAgICAgICAgICAgICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MsIFVTQl9ESVJfT1VULCBwb3J0LAogICAgICAgICAgICAgICAgICAgcG9ydGRhdGEtPm91dF9idWZmZXJbal0sIE9VVF9CVUZMRU4sIG9wdGlvbl9vdXRkYXRfY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IGIzMDE0ZmQuLmM5NjcxNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoRUxDT01fVkVORE9SX0lELCBFTENPTV9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShFTENPTV9WRU5ET1JfSUQsIEVMQ09NX1BST0RVQ1RfSURfVUNTR1QpIH0sCiAJeyBVU0JfREVWSUNFKElURUdOT19WRU5ET1JfSUQsIElURUdOT19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShJVEVHTk9fVkVORE9SX0lELCBJVEVHTk9fUFJPRFVDVF9JRF8yMDgwKSB9LAogCXsgVVNCX0RFVklDRShNQTYyMF9WRU5ET1JfSUQsIE1BNjIwX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKFJBVE9DX1ZFTkRPUl9JRCwgUkFUT0NfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVFJJUFBfVkVORE9SX0lELCBUUklQUF9QUk9EVUNUX0lEKSB9LApAQCAtNzgsNiArNzksNyBAQAogCXsgVVNCX0RFVklDRShTQUdFTV9WRU5ET1JfSUQsIFNBR0VNX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKExFQURURUtfVkVORE9SX0lELCBMRUFEVEVLXzk1MzFfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoU1BFRUREUkFHT05fVkVORE9SX0lELCBTUEVFRERSQUdPTl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShPVElfVkVORE9SX0lELCBPVElfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKaW5kZXggNzc5MDFkMS4uN2YyOWU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaApAQCAtMjYsNiArMjYsNyBAQAogCiAjZGVmaW5lIElURUdOT19WRU5ET1JfSUQJMHgwZWJhCiAjZGVmaW5lIElURUdOT19QUk9EVUNUX0lECTB4MTA4MAorI2RlZmluZSBJVEVHTk9fUFJPRFVDVF9JRF8yMDgwCTB4MjA4MAogCiAjZGVmaW5lIE1BNjIwX1ZFTkRPUl9JRAkJMHgwZGY3CiAjZGVmaW5lIE1BNjIwX1BST0RVQ1RfSUQJMHgwNjIwCkBAIC03OSwzICs4MCw3IEBACiAvKiBVU0IgR1NNIGNhYmxlIGZyb20gU3BlZWQgRHJhZ29uIE11bHRpbWVkaWEsIEx0ZCAqLwogI2RlZmluZSBTUEVFRERSQUdPTl9WRU5ET1JfSUQJMHgwZTU1CiAjZGVmaW5lIFNQRUVERFJBR09OX1BST0RVQ1RfSUQJMHgxMTBiCisKKy8qIE91cnMgVGVjaG5vbG9neSBJbmMgREtVLTUgY2xvbmUsIGNoaXBzZXQ6IFByb2xpZmljIFRlY2hub2xvZ3kgSW5jICovCisjZGVmaW5lIE9USV9WRU5ET1JfSUQJMHgwZWEwCisjZGVmaW5lIE9USV9QUk9EVUNUX0lECTB4Njg1OApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggMDk3ZjRlOC4uOWMzNmYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCiAjaW5jbHVkZSAicGwyMzAzLmgiCkBAIC0xODksMTEgKzE4OSwxNSBAQAogCiAJcG9ydE51bWJlciA9IHR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOwogCXBvcnQgPSBzZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07Ci0JaWYgKCFwb3J0KQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXBvcnQpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBiYWlsb3V0X2tyZWZfcHV0OworCX0KIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnBvcnQtPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKSB7CisJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBiYWlsb3V0X2tyZWZfcHV0OworCX0KIAkgCiAJKytwb3J0LT5vcGVuX2NvdW50OwogCkBAIC0yMDksNyArMjEzLDcgQEAKIAkJICogc2FmZSBiZWNhdXNlIHdlIGFyZSBjYWxsZWQgd2l0aCBCS0wgaGVsZCAqLwogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKSkgewogCQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJCWdvdG8gYmFpbG91dF9rcmVmX3B1dDsKKwkJCWdvdG8gYmFpbG91dF9tdXRleF91bmxvY2s7CiAJCX0KIAogCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBvcGVuIGlmIHRoaXMgCkBAIC0yMTksMTUgKzIyMywxNiBAQAogCQkJZ290byBiYWlsb3V0X21vZHVsZV9wdXQ7CiAJfQogCi0JdXAoJnBvcnQtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJcmV0dXJuIDA7CiAKIGJhaWxvdXRfbW9kdWxlX3B1dDoKIAltb2R1bGVfcHV0KHNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKTsKK2JhaWxvdXRfbXV0ZXhfdW5sb2NrOgorCXBvcnQtPm9wZW5fY291bnQgPSAwOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogYmFpbG91dF9rcmVmX3B1dDoKIAlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7Ci0JcG9ydC0+b3Blbl9jb3VudCA9IDA7Ci0JdXAoJnBvcnQtPnNlbSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjQwLDEwICsyNDUsMTAgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCi0JZG93bigmcG9ydC0+c2VtKTsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CiAKIAlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAwKSB7Ci0JCXVwKCZwb3J0LT5zZW0pOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjYyLDcgKzI2Nyw3IEBACiAJCW1vZHVsZV9wdXQocG9ydC0+c2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpOwogCX0KIAotCXVwKCZwb3J0LT5zZW0pOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCWtyZWZfcHV0KCZwb3J0LT5zZXJpYWwtPmtyZWYsIGRlc3Ryb3lfc2VyaWFsKTsKIH0KIApAQCAtNzgzLDcgKzc4OCw3IEBACiAJCXBvcnQtPm51bWJlciA9IGkgKyBzZXJpYWwtPm1pbm9yOwogCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CiAJCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKLQkJc2VtYV9pbml0KCZwb3J0LT5zZW0sIDEpOworCQltdXRleF9pbml0KCZwb3J0LT5tdXRleCk7CiAJCUlOSVRfV09SSygmcG9ydC0+d29yaywgdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQsIHBvcnQpOwogCQlzZXJpYWwtPnBvcnRbaV0gPSBwb3J0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCmluZGV4IGQ3ZDI3YzMuLmRjODlkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaApAQCAtMTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIFNFUklBTF9UVFlfTUFKT1IJMTg4CS8qIE5pY2UgbGVnYWwgbnVtYmVyIG5vdyAqLwogI2RlZmluZSBTRVJJQUxfVFRZX01JTk9SUwkyNTUJLyogbG9hZHMgb2YgZGV2aWNlcyA6KSAqLwpAQCAtMzEsNyArMzEsNyBAQAogICogQHNlcmlhbDogcG9pbnRlciBiYWNrIHRvIHRoZSBzdHJ1Y3QgdXNiX3NlcmlhbCBvd25lciBvZiB0aGlzIHBvcnQuCiAgKiBAdHR5OiBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR0eSBmb3IgdGhpcyBwb3J0LgogICogQGxvY2s6IHNwaW5sb2NrIHRvIGdyYWIgd2hlbiB1cGRhdGluZyBwb3J0aW9ucyBvZiB0aGlzIHN0cnVjdHVyZS4KLSAqIEBzZW06IHNlbWFwaG9yZSB1c2VkIHRvIHN5bmNocm9uaXplIHNlcmlhbF9vcGVuKCkgYW5kIHNlcmlhbF9jbG9zZSgpCisgKiBAbXV0ZXg6IG11dGV4IHVzZWQgdG8gc3luY2hyb25pemUgc2VyaWFsX29wZW4oKSBhbmQgc2VyaWFsX2Nsb3NlKCkKICAqCWFjY2VzcyBmb3IgdGhpcyBwb3J0LgogICogQG51bWJlcjogdGhlIG51bWJlciBvZiB0aGUgcG9ydCAodGhlIG1pbm9yIG51bWJlcikuCiAgKiBAaW50ZXJydXB0X2luX2J1ZmZlcjogcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGluIGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgpAQCAtNjMsNyArNjMsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICoJc2VyaWFsOwogCXN0cnVjdCB0dHlfc3RydWN0ICoJdHR5OwogCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSAgICAgICAgc2VtOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgIG11dGV4OwogCXVuc2lnbmVkIGNoYXIJCW51bWJlcjsKIAogCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCA1NTc0MTFjLi5mODA2NTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC01MDgsNiArNTA4LDcgQEAKIAllcnIoIiVzOiBVbmFibGUgdG8gcmV0cmlldmUgZmlybXdhcmUgdmVyc2lvbiwgdHJ5IHJlcGx1Z2dpbmdcbiIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCWVycigiJXM6IElmIHRoZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyAoc3RhdHVzIGxlZCBub3QgYmxpbmtpbmcpXG4iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAllcnIoIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJa2ZyZWUocmVzdWx0KTsKIAlyZXR1cm4gLUVOT0RFVjsKIAogbm9fY29tbWFuZF9wcml2YXRlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCmluZGV4IDkyYmUxMDEuLmJlOWVlYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKQEAgLTQ4LDcgKzQ4LDggQEAKIAogY29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMAogCWJvb2wgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEJMS19ERVZfSURFCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQorCWRlcGVuZHMgb24gQkxLX0RFVl9JREU9eSB8fCBCTEtfREVWX0lERT1VU0JfU1RPUkFHRQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFVTQiBNYXNzIFN0b3JlIGRldmljZXMgYmFzZWQKIAkgIG9uIHRoZSBJbi1TeXN0ZW1zIERlc2lnbiBJU0QtMjAwIFVTQi9BVEEgYnJpZGdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggYzRhOWRjZi4uYWVjNWVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC00MTEsNyArNDExLDcgQEAKIFVOVVNVQUxfREVWKCAgMHgwNTI1LCAweGExNDAsIDB4MDEwMCwgMHgwMTAwLAogCQkiSW9tZWdhIiwKIAkJIlVTQiBDbGlrISA0MCIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0lOUVVJUlkgKSwKIAogLyogWWFrdW1vIE1lZ2EgSW1hZ2UgMzcKQEAgLTc3Myw2ICs3NzMsMTMgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKiBSZXBvcnRlZCBieSBPbGl2aWVyIEJsb25kZWF1IDx6ZWl0b3VuQGdtYWlsLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNzI3LCAweDAzMDYsIDB4MDEwMCwgMHgwMTAwLAorCQkiQVRNRUwiLAorCQkiU05EMSBTdG9yYWdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFKSwKKwogLyogU3VibWl0dGVkIGJ5IFJvbWFuIEhvZGVrIDxyb21hbkBob2Rlay5uZXQ+ICovCiBVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMDAxLCAweDAyMDAsIDB4MDIwMCwKIAkJIlNhbmRpc2siLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IGY4N2MwMTcuLjQ1ODcwODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTQwMCw2ICs0MDAsOCBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwloZWxwCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIEFzaWxpYW50IDY5MDMwIGNoaXBzZXQKIAogY29uZmlnIEZCX0lNU1RUCiAJYm9vbCAiSU1TIFR3aW4gVHVyYm8gZGlzcGxheSBzdXBwb3J0IgpAQCAtOTYxLDcgKzk2Myw3IEBACiAKIGNvbmZpZyBGQl9BVFkKIAl0cmlzdGF0ZSAiQVRJIE1hY2g2NCBkaXNwbGF5IHN1cHBvcnQiIGlmIFBDSSB8fCBBVEFSSQotCWRlcGVuZHMgb24gRkIKKwlkZXBlbmRzIG9uIEZCICYmICFTUEFSQzMyCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IGIzOWU3MmQuLmQ5ZDdkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTM0MDAsNyArMzQwMCw3IEBACiAJc3RydWN0IGF0eWZiX3BhciAqcGFyOwogCWludCBpLCByYyA9IC1FTk9NRU07CiAKLQlmb3IgKGkgPSBBUlJBWV9TSVpFKGF0eV9jaGlwcyk7IGkgPj0gMDsgaS0tKQorCWZvciAoaSA9IEFSUkFZX1NJWkUoYXR5X2NoaXBzKSAtIDE7IGkgPj0gMDsgaS0tKQogCQlpZiAocGRldi0+ZGV2aWNlID09IGF0eV9jaGlwc1tpXS5wY2lfaWQpCiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKaW5kZXggOWE2YjViMy4uMzg3YTE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCkBAIC0yMjY1LDcgKzIyNjUsNyBAQAogfTsKIAogCi1zdGF0aWMgaW50IHJhZGVvbmZiX3BjaV9yZWdpc3RlciAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCByYWRlb25mYl9wY2lfcmVnaXN0ZXIgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCAzZDA0YjJkLi43ODk0NTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC0yMTQsMTAgKzIxNCwxMyBAQAogICovCiBpbnQgYXUxMTAwZmJfZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLCB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSB0b19hdTExMDBmYl9kZXZpY2UoZmJpKTsKLQl1MzIgKnBhbGV0dGUgPSBmYmRldi0+cmVncy0+bGNkX3BhbGxldHRlYmFzZTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldjsKKwl1MzIgKnBhbGV0dGU7CiAJdTMyIHZhbHVlOwogCisJZmJkZXYgPSB0b19hdTExMDBmYl9kZXZpY2UoZmJpKTsKKwlwYWxldHRlID0gZmJkZXYtPnJlZ3MtPmxjZF9wYWxsZXR0ZWJhc2U7CisKIAlpZiAocmVnbm8gPiAoQVUxMTAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTIC0gMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMTYsOSArMzE5LDExIEBACiAgKi8KIGludCBhdTExMDBmYl9mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLQlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2OwogCWludCBkeTsKIAorCWZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7CisKIAlwcmludF9kYmcoImZiX3Bhbl9kaXNwbGF5ICVwICVwIiwgdmFyLCBmYmkpOwogCiAJaWYgKCF2YXIgfHwgIWZiZGV2KSB7CkBAIC0zODIsMTAgKzM4NywxMiBAQAogICovCiBpbnQgYXUxMTAwZmJfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2OwogCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgbG9uZyBzdGFydD0wLCBvZmY7CiAKKwlmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCiAJaWYgKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NISUZUKSkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00NjcsNyArNDc0LDcgQEAKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGF1MTEwMGZiX2ZpeC5tbWlvX3N0YXJ0LCBhdTExMDBmYl9maXgubW1pb19sZW4sCiAJCQkJRFJJVkVSX05BTUUpKSB7Ci0JCXByaW50X2VycigiZmFpbCB0byBsb2NrIG1lbW9yeSByZWdpb24gYXQgMHglMDh4IiwKKwkJcHJpbnRfZXJyKCJmYWlsIHRvIGxvY2sgbWVtb3J5IHJlZ2lvbiBhdCAweCUwOGx4IiwKIAkJCQlhdTExMDBmYl9maXgubW1pb19zdGFydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNTk1LDEzICs2MDIsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitpbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK2ludCBhdTExMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggYjM2N2RlMy4uNjAwZDNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTkyMCwxOTI1ICsxOTIwLDMgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MTIwMCBMQ0QgRHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDUgQU1ECi0gKiBBdXRob3I6IEFNRAotICoKLSAqIEJhc2VkIG9uOgotICogbGludXgvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMgLS0gU2tlbGV0b24gZm9yIGEgZnJhbWUgYnVmZmVyIGRldmljZQotICogIENyZWF0ZWQgMjggRGVjIDE5OTcgYnkgR2VlcnQgVXl0dGVyaG9ldmVuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotI2luY2x1ZGUgImF1MTIwMGZiLmgiCi0KLSNpZmRlZiBDT05GSUdfUE0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X3BtLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfRkJfQVUxMjAwX0RFVlMKLSNkZWZpbmUgQ09ORklHX0ZCX0FVMTIwMF9ERVZTIDQKLSNlbmRpZgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJhdTEyMDBmYiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIkxDRCBjb250cm9sbGVyIGRyaXZlciBmb3IgQVUxMjAwIHByb2Nlc3NvcnMiCi0KLSNkZWZpbmUgREVCVUcgMQotCi0jZGVmaW5lIHByaW50X2VycihmLCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQotI2RlZmluZSBwcmludF93YXJuKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQotI2RlZmluZSBwcmludF9pbmZvKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQotCi0jaWYgREVCVUcKLSNkZWZpbmUgcHJpbnRfZGJnKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogIiBmICJcbiIsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHByaW50X2RiZyhmLCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLQotI2RlZmluZSBBVTEyMDBfTENEX0ZCX0lPQ1RMIDB4NDZGRgotCi0jZGVmaW5lIEFVMTIwMF9MQ0RfU0VUX1NDUkVFTiAxCi0jZGVmaW5lIEFVMTIwMF9MQ0RfR0VUX1NDUkVFTiAyCi0jZGVmaW5lIEFVMTIwMF9MQ0RfU0VUX1dJTkRPVyAzCi0jZGVmaW5lIEFVMTIwMF9MQ0RfR0VUX1dJTkRPVyA0Ci0jZGVmaW5lIEFVMTIwMF9MQ0RfU0VUX1BBTkVMICA1Ci0jZGVmaW5lIEFVMTIwMF9MQ0RfR0VUX1BBTkVMICA2Ci0KLSNkZWZpbmUgU0NSRUVOX1NJWkUJCSAgICAoMTw8IDEpCi0jZGVmaW5lIFNDUkVFTl9CQUNLQ09MT1IgICAgKDE8PCAyKQotI2RlZmluZSBTQ1JFRU5fQlJJR0hUTkVTUyAgICgxPDwgMykKLSNkZWZpbmUgU0NSRUVOX0NPTE9SS0VZICAgICAoMTw8IDQpCi0jZGVmaW5lIFNDUkVFTl9NQVNLICAgICAgICAgKDE8PCA1KQotCi1zdHJ1Y3QgYXUxMjAwX2xjZF9nbG9iYWxfcmVnc190IHsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHhzaXplOwotCXVuc2lnbmVkIGludCB5c2l6ZTsKLQl1bnNpZ25lZCBpbnQgYmFja2NvbG9yOwotCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwotCXVuc2lnbmVkIGludCBjb2xvcmtleTsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQl1bnNpZ25lZCBpbnQgcGFuZWxfY2hvaWNlOwotCWNoYXIgcGFuZWxfZGVzY1s4MF07Ci0KLX07Ci0KLSNkZWZpbmUgV0lOX1BPU0lUSU9OICAgICAgICAgICAgKDE8PCAwKQotI2RlZmluZSBXSU5fQUxQSEFfQ09MT1IgICAgICAgICAoMTw8IDEpCi0jZGVmaW5lIFdJTl9BTFBIQV9NT0RFICAgICAgICAgICgxPDwgMikKLSNkZWZpbmUgV0lOX1BSSU9SSVRZICAgICAgICAgICAgKDE8PCAzKQotI2RlZmluZSBXSU5fQ0hBTk5FTCAgICAgICAgICAgICAoMTw8IDQpCi0jZGVmaW5lIFdJTl9CVUZGRVJfRk9STUFUICAgICAgICgxPDwgNSkKLSNkZWZpbmUgV0lOX0NPTE9SX09SREVSICAgICAgICAgKDE8PCA2KQotI2RlZmluZSBXSU5fUElYRUxfT1JERVIgICAgICAgICAoMTw8IDcpCi0jZGVmaW5lIFdJTl9TSVpFICAgICAgICAgICAgICAgICgxPDwgOCkKLSNkZWZpbmUgV0lOX0NPTE9SS0VZX01PREUgICAgICAgKDE8PCA5KQotI2RlZmluZSBXSU5fRE9VQkxFX0JVRkZFUl9NT0RFICAoMTw8IDEwKQotI2RlZmluZSBXSU5fUkFNX0FSUkFZX01PREUgICAgICAoMTw8IDExKQotI2RlZmluZSBXSU5fQlVGRkVSX1NDQUxFICAgICAgICAoMTw8IDEyKQotI2RlZmluZSBXSU5fRU5BQkxFCSAgICAgICAgICAgICgxPDwgMTMpCi0KLXN0cnVjdCBhdTEyMDBfbGNkX3dpbmRvd19yZWdzX3QgewotCXVuc2lnbmVkIGludCBmbGFnczsKLQl1bnNpZ25lZCBpbnQgeHBvczsKLQl1bnNpZ25lZCBpbnQgeXBvczsKLQl1bnNpZ25lZCBpbnQgYWxwaGFfY29sb3I7Ci0JdW5zaWduZWQgaW50IGFscGhhX21vZGU7Ci0JdW5zaWduZWQgaW50IHByaW9yaXR5OwotCXVuc2lnbmVkIGludCBjaGFubmVsOwotCXVuc2lnbmVkIGludCBidWZmZXJfZm9ybWF0OwotCXVuc2lnbmVkIGludCBjb2xvcl9vcmRlcjsKLQl1bnNpZ25lZCBpbnQgcGl4ZWxfb3JkZXI7Ci0JdW5zaWduZWQgaW50IHhzaXplOwotCXVuc2lnbmVkIGludCB5c2l6ZTsKLQl1bnNpZ25lZCBpbnQgY29sb3JrZXlfbW9kZTsKLQl1bnNpZ25lZCBpbnQgZG91YmxlX2J1ZmZlcl9tb2RlOwotCXVuc2lnbmVkIGludCByYW1fYXJyYXlfbW9kZTsKLQl1bnNpZ25lZCBpbnQgeHNjYWxlOwotCXVuc2lnbmVkIGludCB5c2NhbGU7Ci0JdW5zaWduZWQgaW50IGVuYWJsZTsKLX07Ci0KLQotc3RydWN0IGF1MTIwMF9sY2RfaW9kYXRhX3QgewotCXVuc2lnbmVkIGludCBzdWJjbWQ7Ci0Jc3RydWN0IGF1MTIwMF9sY2RfZ2xvYmFsX3JlZ3NfdCBnbG9iYWw7Ci0Jc3RydWN0IGF1MTIwMF9sY2Rfd2luZG93X3JlZ3NfdCB3aW5kb3c7Ci19OwotCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0jZGVmaW5lIExDRF9DT05UUk9MX0RFRkFVTFRfUE8gTENEX0NPTlRST0xfUE9fMTEKLSNlbHNlCi0jZGVmaW5lIExDRF9DT05UUk9MX0RFRkFVTFRfUE8gTENEX0NPTlRST0xfUE9fMDAKLSNlbmRpZgotI2RlZmluZSBMQ0RfQ09OVFJPTF9ERUZBVUxUX1NCUFBGIExDRF9DT05UUk9MX1NCUFBGXzU2NQotCi0vKiBQcml2YXRlLCBwZXItZnJhbWVidWZmZXIgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiAoaW5kZXBlbmRlbnQgb2YgdGhlIHBhbmVsIGl0c2VsZikgKi8KLXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgewotCXN0cnVjdCBmYl9pbmZvIGZiX2luZm87CQkJLyogRkIgZHJpdmVyIGluZm8gcmVjb3JkICovCi0KLQlpbnQJCQkJCXBsYW5lOwotCXVuc2lnbmVkIGNoYXIqIAkJZmJfbWVtOwkJLyogRnJhbWVCdWZmZXIgbWVtb3J5IG1hcCAqLwotCXVuc2lnbmVkIGludAkJZmJfbGVuOwotCWRtYV9hZGRyX3QgICAgCQlmYl9waHlzOwotfTsKLQotc3RhdGljIHN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgX2F1MTIwMGZiX2RldmljZXNbQ09ORklHX0ZCX0FVMTIwMF9ERVZTXTsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTENEIGNvbnRyb2xsZXIgcmVzdHJpY3Rpb25zICovCi0jZGVmaW5lIEFVMTIwMF9MQ0RfTUFYX1hSRVMJMTI4MAotI2RlZmluZSBBVTEyMDBfTENEX01BWF9ZUkVTCTEwMjQKLSNkZWZpbmUgQVUxMjAwX0xDRF9NQVhfQlBQCTMyCi0jZGVmaW5lIEFVMTIwMF9MQ0RfTUFYX0NMSwk5NjAwMDAwMCAvKiBmaXhtZTogdGhpcyBuZWVkcyB0byBnbyBhd2F5ID8gKi8KLSNkZWZpbmUgQVUxMjAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTIDI1NgotCi0vKiBEZWZhdWx0IG51bWJlciBvZiB2aXNpYmxlIHNjcmVlbiBidWZmZXIgdG8gYWxsb2NhdGUgKi8KLSNkZWZpbmUgQVUxMjAwRkJfTkJSX1ZJREVPX0JVRkZFUlMgMQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgYXUxMjAwX2xjZCAqbGNkID0gKHN0cnVjdCBhdTEyMDBfbGNkICopIEFVMTIwMF9MQ0RfQUREUjsKLXN0YXRpYyBpbnQgd2luZG93X2luZGV4ID0gMjsgLyogZGVmYXVsdCBpcyB6ZXJvICovCi1zdGF0aWMgaW50IHBhbmVsX2luZGV4ID0gMjsgLyogZGVmYXVsdCBpcyB6ZXJvICovCi1zdGF0aWMgc3RydWN0IHdpbmRvd19zZXR0aW5ncyAqd2luOwotc3RhdGljIHN0cnVjdCBwYW5lbF9zZXR0aW5ncyAqcGFuZWw7Ci1zdGF0aWMgaW50IG5vYmxhbmtpbmcgPSAxOwotc3RhdGljIGludCBub2h3Y3Vyc29yID0gMDsKLQotc3RydWN0IHdpbmRvd19zZXR0aW5ncyB7Ci0JdW5zaWduZWQgY2hhciBuYW1lWzY0XTsKLQl1aW50MzIgbW9kZV9iYWNrY29sb3I7Ci0JdWludDMyIG1vZGVfY29sb3JrZXk7Ci0JdWludDMyIG1vZGVfY29sb3JrZXltc2s7Ci0Jc3RydWN0IHsKLQkJaW50IHhyZXM7Ci0JCWludCB5cmVzOwotCQlpbnQgeHBvczsKLQkJaW50IHlwb3M7Ci0JCXVpbnQzMiBtb2RlX3dpbmN0cmwxOyAvKiB3aW5jdHJsMVtGUk0sQ0NPLFBPLFBJUEVdICovCi0JCXVpbnQzMiBtb2RlX3dpbmVuYWJsZTsKLQl9IHdbNF07Ci19OwotCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0jZGVmaW5lIExDRF9XSU5DVFJMMV9QT18xNkJQUCBMQ0RfV0lOQ1RSTDFfUE9fMDAKLSNlbHNlCi0jZGVmaW5lIExDRF9XSU5DVFJMMV9QT18xNkJQUCBMQ0RfV0lOQ1RSTDFfUE9fMDEKLSNlbmRpZgotCi1leHRlcm4gaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQgKHZvaWQpOwotZXh0ZXJuIGludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biAodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLWludCBhdTEyMDBmYl9wbV9jYWxsYmFjayhhdTF4eHhfcG93ZXJfZGV2X3QgKmRldiwKLQkJYXUxeHh4X3JlcXVlc3RfdCByZXF1ZXN0LCB2b2lkICpkYXRhKTsKLWF1MXh4eF9wb3dlcl9kZXZfdCAqTENEX3BtX2RldjsKLSNlbmRpZgotCi0vKgotICogRGVmYXVsdCB3aW5kb3cgY29uZmlndXJhdGlvbnMKLSAqLwotc3RhdGljIHN0cnVjdCB3aW5kb3dfc2V0dGluZ3Mgd2luZG93c1tdID0gewotCXsgLyogSW5kZXggMCAqLwotCQkiMC1GUyBnZngsIDEtdmlkZW8sIDItb3ZseSBnZngsIDMtb3ZseSBnZngiLAotCQkvKiBtb2RlX2JhY2tjb2xvcgkqLyAweDAwNjYwMGZmLAotCQkvKiBtb2RlX2NvbG9ya2V5LG1zayovIDAsIDAsCi0JCXsKLQkJCXsKLQkJCS8qIHhyZXMsIHlyZXMsIHhwb3MsIHlwb3MgKi8gMCwgMCwgMCwgMCwKLQkJCS8qIG1vZGVfd2luY3RybDEgKi8gTENEX1dJTkNUUkwxX0ZSTV8xNkJQUDU2NSB8Ci0JCQkJTENEX1dJTkNUUkwxX1BPXzE2QlBQLAotCQkJLyogbW9kZV93aW5lbmFibGUqLyBMQ0RfV0lORU5BQkxFX1dFTjAsCi0JCQl9LAotCQkJewotCQkJLyogeHJlcywgeXJlcywgeHBvcywgeXBvcyAqLyAxMDAsIDEwMCwgMTAwLCAxMDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCB8Ci0JCQkJTENEX1dJTkNUUkwxX1BJUEUsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIExDRF9XSU5FTkFCTEVfV0VOMSwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCB8Ci0JCQkJTENEX1dJTkNUUkwxX1BJUEUsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIDAsCi0JCQl9LAotCQl9LAotCX0sCi0KLQl7IC8qIEluZGV4IDEgKi8KLQkJIjAtRlMgZ2Z4LCAxLXZpZGVvLCAyLW92bHkgZ2Z4LCAzLW92bHkgZ2Z4IiwKLQkJLyogbW9kZV9iYWNrY29sb3IJKi8gMHgwMDY2MDBmZiwKLQkJLyogbW9kZV9jb2xvcmtleSxtc2sqLyAwLCAwLAotCQl7Ci0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDMyMCwgMjQwLCA1LCA1LAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzI0QlBQIHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMDAsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIExDRF9XSU5FTkFCTEVfV0VOMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUKLQkJCQl8IExDRF9XSU5DVFJMMV9QT18xNkJQUCwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDEwMCwgMTAwLCAwLCAwLAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTY1IHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMTZCUFAgfAotCQkJCUxDRF9XSU5DVFJMMV9QSVBFLAotCQkJLyogbW9kZV93aW5lbmFibGUqLyAwLypMQ0RfV0lORU5BQkxFX1dFTjIqLywKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDIwMCwgMjUsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCB8Ci0JCQkJTENEX1dJTkNUUkwxX1BJUEUsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIDAsCi0JCQl9LAotCQl9LAotCX0sCi0JeyAvKiBJbmRleCAyICovCi0JCSIwLUZTIGdmeCwgMS12aWRlbywgMi1vdmx5IGdmeCwgMy1vdmx5IGdmeCIsCi0JCS8qIG1vZGVfYmFja2NvbG9yCSovIDB4MDA2NjAwZmYsCi0JCS8qIG1vZGVfY29sb3JrZXksbXNrKi8gMCwgMCwKLQkJewotCQkJewotCQkJLyogeHJlcywgeXJlcywgeHBvcywgeXBvcyAqLyAwLCAwLCAwLCAwLAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTY1IHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMTZCUFAsCi0JCQkvKiBtb2RlX3dpbmVuYWJsZSovIExDRF9XSU5FTkFCTEVfV0VOMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjUgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18xNkJQUCwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMCwKLQkJCX0sCi0JCQl7Ci0JCQkvKiB4cmVzLCB5cmVzLCB4cG9zLCB5cG9zICovIDAsIDAsIDAsIDAsCi0JCQkvKiBtb2RlX3dpbmN0cmwxICovIExDRF9XSU5DVFJMMV9GUk1fMzJCUFAgfAotCQkJCUxDRF9XSU5DVFJMMV9QT18wMHxMQ0RfV0lOQ1RSTDFfUElQRSwKLQkJCS8qIG1vZGVfd2luZW5hYmxlKi8gMC8qTENEX1dJTkVOQUJMRV9XRU4yKi8sCi0JCQl9LAotCQkJewotCQkJLyogeHJlcywgeXJlcywgeHBvcywgeXBvcyAqLyAwLCAwLCAwLCAwLAotCQkJLyogbW9kZV93aW5jdHJsMSAqLyBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTY1IHwKLQkJCQlMQ0RfV0lOQ1RSTDFfUE9fMTZCUFAgfAotCQkJCUxDRF9XSU5DVFJMMV9QSVBFLAotCQkJLyogbW9kZV93aW5lbmFibGUqLyAwLAotCQkJfSwKLQkJfSwKLQl9LAotCS8qIE5lZWQgVkdBIDY0MCBAIDI0YnBwLCBAIDMyYnBwICovCi0JLyogTmVlZCBWR0EgODAwIEAgMjRicHAsIEAgMzJicHAgKi8KLQkvKiBOZWVkIFZHQSAxMDI0IEAgMjRicHAsIEAgMzJicHAgKi8KLX07Ci0KLS8qCi0gKiBDb250cm9sbGVyIGNvbmZpZ3VyYXRpb25zIGZvciB2YXJpb3VzIHBhbmVscy4KLSAqLwotCi1zdHJ1Y3QgcGFuZWxfc2V0dGluZ3MKLXsKLQljb25zdCBjaGFyIG5hbWVbMjVdOwkJLyogRnVsbCBuYW1lIDx2ZW5kb3I+Xzxtb2RlbD4gKi8KLQotCXN0cnVjdCAJZmJfbW9uc3BlY3MgbW9uc3BlY3M7IAkvKiBGQiBtb25pdG9yIHNwZWNzICovCi0KLQkvKiBwYW5lbCB0aW1pbmdzICovCi0JdWludDMyIG1vZGVfc2NyZWVuOwotCXVpbnQzMiBtb2RlX2hvcnp0aW1pbmc7Ci0JdWludDMyIG1vZGVfdmVydHRpbWluZzsKLQl1aW50MzIgbW9kZV9jbGtjb250cm9sOwotCXVpbnQzMiBtb2RlX3B3bWRpdjsKLQl1aW50MzIgbW9kZV9wd21oaTsKLQl1aW50MzIgbW9kZV9vdXRtYXNrOwotCXVpbnQzMiBtb2RlX2ZpZm9jdHJsOwotCXVpbnQzMiBtb2RlX3RveWNsa3NyYzsKLQl1aW50MzIgbW9kZV9iYWNrbGlnaHQ7Ci0JdWludDMyIG1vZGVfYXV4cGxsOwotCWludCAoKmRldmljZV9pbml0KSh2b2lkKTsKLQlpbnQgKCpkZXZpY2Vfc2h1dGRvd24pKHZvaWQpOwotI2RlZmluZSBYcmVzIG1pbl94cmVzCi0jZGVmaW5lIFlyZXMgbWluX3lyZXMKLQl1MzIJbWluX3hyZXM7CQkvKiBNaW5pbXVtIGhvcml6b250YWwgcmVzb2x1dGlvbiAqLwotCXUzMgltYXhfeHJlczsJCS8qIE1heGltdW0gaG9yaXpvbnRhbCByZXNvbHV0aW9uICovCi0JdTMyIAltaW5feXJlczsJCS8qIE1pbmltdW0gdmVydGljYWwgcmVzb2x1dGlvbiAqLwotCXUzMiAJbWF4X3lyZXM7CQkvKiBNYXhpbXVtIHZlcnRpY2FsIHJlc29sdXRpb24gKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIGZpeG1lOiBNYXliZSBhIG1vZGVkYiBmb3IgdGhlIENSVCA/IG90aGVyd2lzZSBwYW5lbHMgc2hvdWxkIGJlIGFzLWlzICovCi0KLS8qIExpc3Qgb2YgcGFuZWxzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgQVUxMjAwIExDRCBjb250cm9sbGVyLgotICogVG8gYWRkIGEgbmV3IHBhbmVsLCBlbnRlciB0aGUgc2FtZSBzcGVjaWZpY2F0aW9ucyBhcyB0aGUKLSAqIEdlbmVyaWNfVEZUIG9uZSwgYW5kIE1BS0UgU1VSRSB0aGF0IGl0IGRvZXNuJ3QgY29uZmxpY3RzCi0gKiB3aXRoIHRoZSBjb250cm9sbGVyIHJlc3RyaWN0aW9ucy4gUmVzdHJpY3Rpb25zIGFyZToKLSAqCi0gKiBTVE4gY29sb3IgcGFuZWxzOiBtYXhfYnBwIDw9IDEyCi0gKiBTVE4gbW9ubyBwYW5lbHM6IG1heF9icHAgPD0gNAotICogVEZUIHBhbmVsczogbWF4X2JwcCA8PSAxNgotICogbWF4X3hyZXMgPD0gODAwCi0gKiBtYXhfeXJlcyA8PSA2MDAKLSAqLwotc3RhdGljIHN0cnVjdCBwYW5lbF9zZXR0aW5ncyBrbm93bl9sY2RfcGFuZWxzW10gPQotewotCVswXSA9IHsgLyogUVZHQSAzMjB4MjQwIEg6MzMuM2tIeiBWOjExMEh6ICovCi0JCS5uYW1lID0gIlFWR0FfMzIweDI0MCIsCi0JCS5tb25zcGVjcyA9IHsKLQkJCS5tb2RlZGIgPSBOVUxMLAotCQkJLm1vZGVkYl9sZW4gPSAwLAotCQkJLmhmbWluID0gMzAwMDAsCi0JCQkuaGZtYXggPSA3MDAwMCwKLQkJCS52Zm1pbiA9IDYwLAotCQkJLnZmbWF4ID0gNjAsCi0JCQkuZGNsa21pbiA9IDYwMDAwMDAsCi0JCQkuZGNsa21heCA9IDI4MDAwMDAwLAotCQkJLmlucHV0ID0gRkJfRElTUF9SR0IsCi0JCX0sCi0JCS5tb2RlX3NjcmVlbgkJPSBMQ0RfU0NSRUVOX1NYX04oMzIwKSB8Ci0JCQlMQ0RfU0NSRUVOX1NZX04oMjQwKSwKLQkJLm1vZGVfaG9yenRpbWluZwk9IDB4MDBjNDYyM2IsCi0JCS5tb2RlX3ZlcnR0aW1pbmcJPSAweDAwNTAyODE0LAotCQkubW9kZV9jbGtjb250cm9sCT0gMHgwMDAyMDAwMiwgLyogLzQ9MjRNaHogKi8KLQkJLm1vZGVfcHdtZGl2CQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX291dG1hc2sJPSAweDAwRkZGRkZGLAotCQkubW9kZV9maWZvY3RybAk9IDB4MmYyZjJmMmYsCi0JCS5tb2RlX3RveWNsa3NyYwk9IDB4MDAwMDAwMDQsIC8qIEFVWFBMTCBkaXJlY3RseSAqLwotCQkubW9kZV9iYWNrbGlnaHQJPSAweDAwMDAwMDAwLAotCQkubW9kZV9hdXhwbGwJCT0gOCwgLyogOTZNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJMzIwLCAzMjAsCi0JCTI0MCwgMjQwLAotCX0sCi0KLQlbMV0gPSB7IC8qIFZHQSA2NDB4NDgwIEg6MzAuM2tIeiBWOjU4SHogKi8KLQkJLm5hbWUgPSAiVkdBXzY0MHg0ODAiLAotCQkubW9uc3BlY3MgPSB7Ci0JCQkubW9kZWRiID0gTlVMTCwKLQkJCS5tb2RlZGJfbGVuID0gMCwKLQkJCS5oZm1pbiA9IDMwMDAwLAotCQkJLmhmbWF4ID0gNzAwMDAsCi0JCQkudmZtaW4gPSA2MCwKLQkJCS52Zm1heCA9IDYwLAotCQkJLmRjbGttaW4gPSA2MDAwMDAwLAotCQkJLmRjbGttYXggPSAyODAwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gMHgxM2Y5ZGY4MCwKLQkJLm1vZGVfaG9yenRpbWluZwk9IDB4MDAzYzU4NTksCi0JCS5tb2RlX3ZlcnR0aW1pbmcJPSAweDAwNzQxMjAxLAotCQkubW9kZV9jbGtjb250cm9sCT0gMHgwMDAyMDAwMSwgLyogLzQ9MjRNaHogKi8KLQkJLm1vZGVfcHdtZGl2CQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX291dG1hc2sJPSAweDAwRkZGRkZGLAotCQkubW9kZV9maWZvY3RybAk9IDB4MmYyZjJmMmYsCi0JCS5tb2RlX3RveWNsa3NyYwk9IDB4MDAwMDAwMDQsIC8qIEFVWFBMTCBkaXJlY3RseSAqLwotCQkubW9kZV9iYWNrbGlnaHQJPSAweDAwMDAwMDAwLAotCQkubW9kZV9hdXhwbGwJCT0gOCwgLyogOTZNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJNjQwLCA0ODAsCi0JCTY0MCwgNDgwLAotCX0sCi0KLQlbMl0gPSB7IC8qIFNWR0EgODAweDYwMCBIOjQ2LjFrSHogVjo2OUh6ICovCi0JCS5uYW1lID0gIlNWR0FfODAweDYwMCIsCi0JCS5tb25zcGVjcyA9IHsKLQkJCS5tb2RlZGIgPSBOVUxMLAotCQkJLm1vZGVkYl9sZW4gPSAwLAotCQkJLmhmbWluID0gMzAwMDAsCi0JCQkuaGZtYXggPSA3MDAwMCwKLQkJCS52Zm1pbiA9IDYwLAotCQkJLnZmbWF4ID0gNjAsCi0JCQkuZGNsa21pbiA9IDYwMDAwMDAsCi0JCQkuZGNsa21heCA9IDI4MDAwMDAwLAotCQkJLmlucHV0ID0gRkJfRElTUF9SR0IsCi0JCX0sCi0JCS5tb2RlX3NjcmVlbgkJPSAweDE4ZmE1NzgwLAotCQkubW9kZV9ob3J6dGltaW5nCT0gMHgwMGRjN2U3NywKLQkJLm1vZGVfdmVydHRpbWluZwk9IDB4MDA1ODQ4MDUsCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDIwMDAwLCAvKiAvMj00OE1oeiAqLwotCQkubW9kZV9wd21kaXYJCT0gMHgwMDAwMDAwMCwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMDAwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBGRkZGRkYsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IE5VTEwsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBOVUxMLAotCQk4MDAsIDgwMCwKLQkJNjAwLCA2MDAsCi0JfSwKLQotCVszXSA9IHsgLyogWFZHQSAxMDI0eDc2OCBIOjU2LjJrSHogVjo3MEh6ICovCi0JCS5uYW1lID0gIlhWR0FfMTAyNHg3NjgiLAotCQkubW9uc3BlY3MgPSB7Ci0JCQkubW9kZWRiID0gTlVMTCwKLQkJCS5tb2RlZGJfbGVuID0gMCwKLQkJCS5oZm1pbiA9IDMwMDAwLAotCQkJLmhmbWF4ID0gNzAwMDAsCi0JCQkudmZtaW4gPSA2MCwKLQkJCS52Zm1heCA9IDYwLAotCQkJLmRjbGttaW4gPSA2MDAwMDAwLAotCQkJLmRjbGttYXggPSAyODAwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gMHgxZmZhZmY4MCwKLQkJLm1vZGVfaG9yenRpbWluZwk9IDB4MDA3ZDBlNTcsCi0JCS5tb2RlX3ZlcnR0aW1pbmcJPSAweDAwNzQwYTAxLAotCQkubW9kZV9jbGtjb250cm9sCT0gMHgwMDBBMDAwMCwgLyogLzEgKi8KLQkJLm1vZGVfcHdtZGl2CQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX291dG1hc2sJPSAweDAwRkZGRkZGLAotCQkubW9kZV9maWZvY3RybAk9IDB4MmYyZjJmMmYsCi0JCS5tb2RlX3RveWNsa3NyYwk9IDB4MDAwMDAwMDQsIC8qIEFVWFBMTCBkaXJlY3RseSAqLwotCQkubW9kZV9iYWNrbGlnaHQJPSAweDAwMDAwMDAwLAotCQkubW9kZV9hdXhwbGwJCT0gNiwgLyogNzJNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJMTAyNCwgMTAyNCwKLQkJNzY4LCA3NjgsCi0JfSwKLQotCVs0XSA9IHsgLyogWFZHQSBYVkdBIDEyODB4MTAyNCBIOjY4LjVrSHogVjo2NUh6ICovCi0JCS5uYW1lID0gIlhWR0FfMTI4MHgxMDI0IiwKLQkJLm1vbnNwZWNzID0gewotCQkJLm1vZGVkYiA9IE5VTEwsCi0JCQkubW9kZWRiX2xlbiA9IDAsCi0JCQkuaGZtaW4gPSAzMDAwMCwKLQkJCS5oZm1heCA9IDcwMDAwLAotCQkJLnZmbWluID0gNjAsCi0JCQkudmZtYXggPSA2MCwKLQkJCS5kY2xrbWluID0gNjAwMDAwMCwKLQkJCS5kY2xrbWF4ID0gMjgwMDAwMDAsCi0JCQkuaW5wdXQgPSBGQl9ESVNQX1JHQiwKLQkJfSwKLQkJLm1vZGVfc2NyZWVuCQk9IDB4MjdmYmZmODAsCi0JCS5tb2RlX2hvcnp0aW1pbmcJPSAweDAwY2RiMmM3LAotCQkubW9kZV92ZXJ0dGltaW5nCT0gMHgwMDYwMDAwMiwKLQkJLm1vZGVfY2xrY29udHJvbAk9IDB4MDAwQTAwMDAsIC8qIC8xICovCi0JCS5tb2RlX3B3bWRpdgkJPSAweDAwMDAwMDAwLAotCQkubW9kZV9wd21oaQkJPSAweDAwMDAwMDAwLAotCQkubW9kZV9vdXRtYXNrCT0gMHgwMEZGRkZGRiwKLQkJLm1vZGVfZmlmb2N0cmwJPSAweDJmMmYyZjJmLAotCQkubW9kZV90b3ljbGtzcmMJPSAweDAwMDAwMDA0LCAvKiBBVVhQTEwgZGlyZWN0bHkgKi8KLQkJLm1vZGVfYmFja2xpZ2h0CT0gMHgwMDAwMDAwMCwKLQkJLm1vZGVfYXV4cGxsCQk9IDEwLCAvKiAxMjBNSHogQVVYUExMICovCi0JCS5kZXZpY2VfaW5pdAkJPSBOVUxMLAotCQkuZGV2aWNlX3NodXRkb3duCT0gTlVMTCwKLQkJMTI4MCwgMTI4MCwKLQkJMTAyNCwgMTAyNCwKLQl9LAotCi0JWzVdID0geyAvKiBTYW1zdW5nIDEwMjR4NzY4IFRGVCAqLwotCQkubmFtZSA9ICJTYW1zdW5nXzEwMjR4NzY4X1RGVCIsCi0JCS5tb25zcGVjcyA9IHsKLQkJCS5tb2RlZGIgPSBOVUxMLAotCQkJLm1vZGVkYl9sZW4gPSAwLAotCQkJLmhmbWluID0gMzAwMDAsCi0JCQkuaGZtYXggPSA3MDAwMCwKLQkJCS52Zm1pbiA9IDYwLAotCQkJLnZmbWF4ID0gNjAsCi0JCQkuZGNsa21pbiA9IDYwMDAwMDAsCi0JCQkuZGNsa21heCA9IDI4MDAwMDAwLAotCQkJLmlucHV0ID0gRkJfRElTUF9SR0IsCi0JCX0sCi0JCS5tb2RlX3NjcmVlbgkJPSAweDFmZmFmZjgwLAotCQkubW9kZV9ob3J6dGltaW5nCT0gMHgwMThjYzY3NywKLQkJLm1vZGVfdmVydHRpbWluZwk9IDB4MDAyNDEyMTcsCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDAwMDAwLCAvKiBTQ0IgMHgxIC80PTI0TWh6ICovCi0JCS5tb2RlX3B3bWRpdgkJPSAweDgwMDAwNjNmLCAvKiBTQ0IgMHgwICovCi0JCS5tb2RlX3B3bWhpCQk9IDB4MDM0MDAwMDAsIC8qIFNDQiAweDAgKi8KLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBGRkZGRkYsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJMTAyNCwgMTAyNCwKLQkJNzY4LCA3NjgsCi0JfSwKLQotCVs2XSA9IHsgLyogVG9zaGliYSA2NDB4NDgwIFRGVCAqLwotCQkubmFtZSA9ICJUb3NoaWJhXzY0MHg0ODBfVEZUIiwKLQkJLm1vbnNwZWNzID0gewotCQkJLm1vZGVkYiA9IE5VTEwsCi0JCQkubW9kZWRiX2xlbiA9IDAsCi0JCQkuaGZtaW4gPSAzMDAwMCwKLQkJCS5oZm1heCA9IDcwMDAwLAotCQkJLnZmbWluID0gNjAsCi0JCQkudmZtYXggPSA2MCwKLQkJCS5kY2xrbWluID0gNjAwMDAwMCwKLQkJCS5kY2xrbWF4ID0gMjgwMDAwMDAsCi0JCQkuaW5wdXQgPSBGQl9ESVNQX1JHQiwKLQkJfSwKLQkJLm1vZGVfc2NyZWVuCQk9IExDRF9TQ1JFRU5fU1hfTig2NDApIHwKLQkJCUxDRF9TQ1JFRU5fU1lfTig0ODApLAotCQkubW9kZV9ob3J6dGltaW5nCT0gTENEX0hPUlpUSU1JTkdfSFBXX04oOTYpIHwKLQkJCUxDRF9IT1JaVElNSU5HX0hORDFfTigxMykgfCBMQ0RfSE9SWlRJTUlOR19ITkQyX04oNTEpLAotCQkubW9kZV92ZXJ0dGltaW5nCT0gTENEX1ZFUlRUSU1JTkdfVlBXX04oMikgfAotCQkJTENEX1ZFUlRUSU1JTkdfVk5EMV9OKDExKSB8IExDRF9WRVJUVElNSU5HX1ZORDJfTigzMiksCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDAwMDAwLCAvKiAvND0yNE1oeiAqLwotCQkubW9kZV9wd21kaXYJCT0gMHg4MDAwMDYzZiwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMzQwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBmY2ZjZmMsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJNjQwLCA0ODAsCi0JCTY0MCwgNDgwLAotCX0sCi0KLQlbN10gPSB7IC8qIFNoYXJwIDMyMHgyNDAgVEZUICovCi0JCS5uYW1lID0gIlNoYXJwXzMyMHgyNDBfVEZUIiwKLQkJLm1vbnNwZWNzID0gewotCQkJLm1vZGVkYiA9IE5VTEwsCi0JCQkubW9kZWRiX2xlbiA9IDAsCi0JCQkuaGZtaW4gPSAxMjUwMCwKLQkJCS5oZm1heCA9IDIwMDAwLAotCQkJLnZmbWluID0gMzgsCi0JCQkudmZtYXggPSA4MSwKLQkJCS5kY2xrbWluID0gNDUwMDAwMCwKLQkJCS5kY2xrbWF4ID0gNjgwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gTENEX1NDUkVFTl9TWF9OKDMyMCkgfAotCQkJTENEX1NDUkVFTl9TWV9OKDI0MCksCi0JCS5tb2RlX2hvcnp0aW1pbmcJPSBMQ0RfSE9SWlRJTUlOR19IUFdfTig2MCkgfAotCQkJTENEX0hPUlpUSU1JTkdfSE5EMV9OKDEzKSB8IExDRF9IT1JaVElNSU5HX0hORDJfTigyKSwKLQkJLm1vZGVfdmVydHRpbWluZwk9IExDRF9WRVJUVElNSU5HX1ZQV19OKDIpIHwKLQkJCUxDRF9WRVJUVElNSU5HX1ZORDFfTigyKSB8IExDRF9WRVJUVElNSU5HX1ZORDJfTig1KSwKLQkJLm1vZGVfY2xrY29udHJvbAk9IExDRF9DTEtDT05UUk9MX1BDRF9OKDcpLCAvKjE2PTZNaHoqLwotCQkubW9kZV9wd21kaXYJCT0gMHg4MDAwMDYzZiwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMzQwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBmY2ZjZmMsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJMzIwLCAzMjAsCi0JCTI0MCwgMjQwLAotCX0sCi0KLQlbOF0gPSB7IC8qIFRvcHBvbHkgVEQwNzBXR0NCMiA3IiA4NTZ4NDgwIFRGVCAqLwotCQkubmFtZSA9ICJUb3Bwb2x5X1REMDcwV0dDQjIiLAotCQkubW9uc3BlY3MgPSB7Ci0JCQkubW9kZWRiID0gTlVMTCwKLQkJCS5tb2RlZGJfbGVuID0gMCwKLQkJCS5oZm1pbiA9IDMwMDAwLAotCQkJLmhmbWF4ID0gNzAwMDAsCi0JCQkudmZtaW4gPSA2MCwKLQkJCS52Zm1heCA9IDYwLAotCQkJLmRjbGttaW4gPSA2MDAwMDAwLAotCQkJLmRjbGttYXggPSAyODAwMDAwMCwKLQkJCS5pbnB1dCA9IEZCX0RJU1BfUkdCLAotCQl9LAotCQkubW9kZV9zY3JlZW4JCT0gTENEX1NDUkVFTl9TWF9OKDg1NikgfAotCQkJTENEX1NDUkVFTl9TWV9OKDQ4MCksCi0JCS5tb2RlX2hvcnp0aW1pbmcJPSBMQ0RfSE9SWlRJTUlOR19ITkQyX04oNDMpIHwKLQkJCUxDRF9IT1JaVElNSU5HX0hORDFfTig0MykgfCBMQ0RfSE9SWlRJTUlOR19IUFdfTigxMTQpLAotCQkubW9kZV92ZXJ0dGltaW5nCT0gTENEX1ZFUlRUSU1JTkdfVk5EMl9OKDIwKSB8Ci0JCQlMQ0RfVkVSVFRJTUlOR19WTkQxX04oMjEpIHwgTENEX1ZFUlRUSU1JTkdfVlBXX04oNCksCi0JCS5tb2RlX2Nsa2NvbnRyb2wJPSAweDAwMDIwMDAxLCAvKiAvND0yNE1oeiAqLwotCQkubW9kZV9wd21kaXYJCT0gMHg4MDAwMDYzZiwKLQkJLm1vZGVfcHdtaGkJCT0gMHgwMzQwMDAwMCwKLQkJLm1vZGVfb3V0bWFzawk9IDB4MDBmY2ZjZmMsCi0JCS5tb2RlX2ZpZm9jdHJsCT0gMHgyZjJmMmYyZiwKLQkJLm1vZGVfdG95Y2xrc3JjCT0gMHgwMDAwMDAwNCwgLyogQVVYUExMIGRpcmVjdGx5ICovCi0JCS5tb2RlX2JhY2tsaWdodAk9IDB4MDAwMDAwMDAsCi0JCS5tb2RlX2F1eHBsbAkJPSA4LCAvKiA5Nk1IeiBBVVhQTEwgKi8KLQkJLmRldmljZV9pbml0CQk9IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQsCi0JCS5kZXZpY2Vfc2h1dGRvd24JPSBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93biwKLQkJODU2LCA4NTYsCi0JCTQ4MCwgNDgwLAotCX0sCi19OwotCi0jZGVmaW5lIE5VTV9QQU5FTFMgKEFSUkFZX1NJWkUoa25vd25fbGNkX3BhbmVscykpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzcyh1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcykKLXsKLQl1bnNpZ25lZCBpbnQgaGkxLCBkaXZpZGVyOwotCi0JLyogbGltaXQgYnJpZ2h0bmVzcyBwd20gZHV0eSB0byA+PSAzMC8xNjAwICovCi0JaWYgKGJyaWdodG5lc3MgPCAzMCkgewotCQlicmlnaHRuZXNzID0gMzA7Ci0JfQotCWRpdmlkZXIgPSAobGNkLT5wd21kaXYgJiAweDNGRkZGKSArIDE7Ci0JaGkxID0gKGxjZC0+cHdtaGkgPj4gMTYpICsgMTsKLQloaTEgPSAoKChicmlnaHRuZXNzICYgMHhGRikgKyAxKSAqIGRpdmlkZXIgPj4gOCk7Ci0JbGNkLT5wd21oaSAmPSAweEZGRkY7Ci0JbGNkLT5wd21oaSB8PSAoaGkxIDw8IDE2KTsKLQotCXJldHVybiBicmlnaHRuZXNzOwotfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgaW50IHdpbmJwcCAodW5zaWduZWQgaW50IHdpbmN0cmwxKQotewotCWludCBiaXRzID0gMDsKLQotCS8qIGhvdyBtYW55IGJpdHMgYXJlIG5lZWRlZCBmb3IgZWFjaCBwaXhlbCBmb3JtYXQgKi8KLQlzd2l0Y2ggKHdpbmN0cmwxICYgTENEX1dJTkNUUkwxX0ZSTSkgewotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xQlBQOgotCQliaXRzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBMQ0RfV0lOQ1RSTDFfRlJNXzJCUFA6Ci0JCWJpdHMgPSAyOwotCQlicmVhazsKLQljYXNlIExDRF9XSU5DVFJMMV9GUk1fNEJQUDoKLQkJYml0cyA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV84QlBQOgotCQliaXRzID0gODsKLQkJYnJlYWs7Ci0JY2FzZSBMQ0RfV0lOQ1RSTDFfRlJNXzEyQlBQOgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUDY1NToKLQljYXNlIExDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NjU6Ci0JY2FzZSBMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNTU2OgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEkxNTU1OgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEk1NTUxOgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEExNTU1OgotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEE1NTUxOgotCQliaXRzID0gMTY7Ci0JCWJyZWFrOwotCWNhc2UgTENEX1dJTkNUUkwxX0ZSTV8yNEJQUDoKLQljYXNlIExDRF9XSU5DVFJMMV9GUk1fMzJCUFA6Ci0JCWJpdHMgPSAzMjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGJpdHM7Ci19Ci0KLXN0YXRpYyBpbnQgZmJpbmZvMmluZGV4IChzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfRkJfQVUxMjAwX0RFVlM7ICsraSkgewotCQlpZiAoZmJfaW5mbyA9PSAoc3RydWN0IGZiX2luZm8gKikoJl9hdTEyMDBmYl9kZXZpY2VzW2ldLmZiX2luZm8pKQotCQkJcmV0dXJuIGk7Ci0JfQotCXByaW50aygiYXUxMjAwZmI6IEVSUk9SOiBmYmluZm8yaW5kZXggZmFpbGVkIVxuIik7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGF1MTIwMF9zZXRsb2NhdGlvbiAoc3RydWN0IGF1MTIwMGZiX2RldmljZSAqZmJkZXYsIGludCBwbGFuZSwKLQlpbnQgeHBvcywgaW50IHlwb3MpCi17Ci0JdWludDMyIHdpbmN0cmwwLCB3aW5jdHJsMSwgd2luZW5hYmxlLCBmYl9vZmZzZXQgPSAwOwotCWludCB4c3osIHlzejsKLQotCS8qIEZJWCEhISBOT1QgQ0hFQ0tJTkcgRk9SIENPTVBMRVRFIE9GRlNDUkVFTiBZRVQgKi8KLQotCXdpbmN0cmwwID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwwOwotCXdpbmN0cmwxID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxOwotCXdpbmN0cmwwICY9IChMQ0RfV0lOQ1RSTDBfQSB8IExDRF9XSU5DVFJMMF9BRU4pOwotCXdpbmN0cmwxICY9IH4oTENEX1dJTkNUUkwxX1NaWCB8IExDRF9XSU5DVFJMMV9TWlkpOwotCi0JLyogQ2hlY2sgZm9yIG9mZi1zY3JlZW4gYWRqdXN0bWVudHMgKi8KLQl4c3ogPSB3aW4tPndbcGxhbmVdLnhyZXM7Ci0JeXN6ID0gd2luLT53W3BsYW5lXS55cmVzOwotCWlmICgoeHBvcyArIHdpbi0+d1twbGFuZV0ueHJlcykgPiBwYW5lbC0+WHJlcykgewotCQkvKiBPZmYtc2NyZWVuIHRvIHRoZSByaWdodCAqLwotCQl4c3ogPSBwYW5lbC0+WHJlcyAtIHhwb3M7IC8qIG9mZiBieSAxID8/PyAqLwotCQkvKnByaW50aygib2ZmIHNjcmVlbiByaWdodFxuIik7Ki8KLQl9Ci0KLQlpZiAoKHlwb3MgKyB3aW4tPndbcGxhbmVdLnlyZXMpID4gcGFuZWwtPllyZXMpIHsKLQkJLyogT2ZmLXNjcmVlbiB0byB0aGUgYm90dG9tICovCi0JCXlzeiA9IHBhbmVsLT5ZcmVzIC0geXBvczsgLyogb2ZmIGJ5IDEgPz8/ICovCi0JCS8qcHJpbnRrKCJvZmYgc2NyZWVuIGJvdHRvbVxuIik7Ki8KLQl9Ci0KLQlpZiAoeHBvcyA8IDApIHsKLQkJLyogT2ZmLXNjcmVlbiB0byB0aGUgbGVmdCAqLwotCQl4c3ogPSB3aW4tPndbcGxhbmVdLnhyZXMgKyB4cG9zOwotCQlmYl9vZmZzZXQgKz0gKCgoMCAtIHhwb3MpICogd2luYnBwKGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSkpLzgpOwotCQl4cG9zID0gMDsKLQkJLypwcmludGsoIm9mZiBzY3JlZW4gbGVmdFxuIik7Ki8KLQl9Ci0KLQlpZiAoeXBvcyA8IDApIHsKLQkJLyogT2ZmLXNjcmVlbiB0byB0aGUgdG9wICovCi0JCXlzeiA9IHdpbi0+d1twbGFuZV0ueXJlcyArIHlwb3M7Ci0JCS8qIGZpeG1lOiBmYl9vZmZzZXQgKz0gKCgwLXlwb3MpKmZiX3BhcnNbcGxhbmVdLmxpbmVfbGVuZ3RoKTsgKi8KLQkJeXBvcyA9IDA7Ci0JCS8qcHJpbnRrKCJvZmYgc2NyZWVuIHRvcFxuIik7Ki8KLQl9Ci0KLQkvKiByZWNvcmQgc2V0dGluZ3MgKi8KLQl3aW4tPndbcGxhbmVdLnhwb3MgPSB4cG9zOwotCXdpbi0+d1twbGFuZV0ueXBvcyA9IHlwb3M7Ci0KLQl4c3ogLT0gMTsKLQl5c3ogLT0gMTsKLQl3aW5jdHJsMCB8PSAoeHBvcyA8PCAyMSk7Ci0Jd2luY3RybDAgfD0gKHlwb3MgPDwgMTApOwotCXdpbmN0cmwxIHw9ICh4c3ogPDwgMTEpOwotCXdpbmN0cmwxIHw9ICh5c3ogPDwgMCk7Ci0KLQkvKiBEaXNhYmxlIHRoZSB3aW5kb3cgd2hpbGUgbWFraW5nIGNoYW5nZXMsIHRoZW4gcmVzdG9yZSBXSU5FTiAqLwotCXdpbmVuYWJsZSA9IGxjZC0+d2luZW5hYmxlICYgKDEgPDwgcGxhbmUpOwotCWF1X3N5bmMoKTsKLQlsY2QtPndpbmVuYWJsZSAmPSB+KDEgPDwgcGxhbmUpOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCA9IHdpbmN0cmwwOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHdpbmN0cmwxOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5idWYwID0KLQlsY2QtPndpbmRvd1twbGFuZV0ud2luYnVmMSA9IGZiZGV2LT5mYl9waHlzOwotCWxjZC0+d2luZG93W3BsYW5lXS53aW5idWZjdHJsID0gMDsgLyogc2VsZWN0IHdpbmJ1ZjAgKi8KLQlsY2QtPndpbmVuYWJsZSB8PSB3aW5lbmFibGU7Ci0JYXVfc3luYygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1MTIwMF9zZXRwYW5lbCAoc3RydWN0IHBhbmVsX3NldHRpbmdzICpuZXdwYW5lbCkKLXsKLQkvKgotCSAqIFBlcmZvcm0gZ2xvYmFsIHNldHVwL2luaXQgb2YgTENEIGNvbnRyb2xsZXIKLQkgKi8KLQl1aW50MzIgd2luZW5hYmxlOwotCi0JLyogTWFrZSBzdXJlIGFsbCB3aW5kb3dzIGRpc2FibGVkICovCi0Jd2luZW5hYmxlID0gbGNkLT53aW5lbmFibGU7Ci0JbGNkLT53aW5lbmFibGUgPSAwOwotCWF1X3N5bmMoKTsKLQkvKgotCSAqIEVuc3VyZSBldmVyeXRoaW5nIGlzIGRpc2FibGVkIGJlZm9yZSByZWNvbmZpZ3VyaW5nCi0JICovCi0JaWYgKGxjZC0+c2NyZWVuICYgTENEX1NDUkVFTl9TRU4pIHsKLQkJLyogV2FpdCBmb3IgdmVydGljYWwgc3luYyBwZXJpb2QgKi8KLQkJbGNkLT5pbnRzdGF0dXMgPSBMQ0RfSU5UX1NTOwotCQl3aGlsZSAoKGxjZC0+aW50c3RhdHVzICYgTENEX0lOVF9TUykgPT0gMCkgewotCQkJYXVfc3luYygpOwotCQl9Ci0KLQkJbGNkLT5zY3JlZW4gJj0gfkxDRF9TQ1JFRU5fU0VOOwkvKmRpc2FibGUgdGhlIGNvbnRyb2xsZXIqLwotCi0JCWRvIHsKLQkJCWxjZC0+aW50c3RhdHVzID0gbGNkLT5pbnRzdGF0dXM7IC8qY2xlYXIgaW50ZXJydXB0cyovCi0JCQlhdV9zeW5jKCk7Ci0JCS8qd2FpdCBmb3IgY29udHJvbGxlciB0byBzaHV0IGRvd24qLwotCQl9IHdoaWxlICgobGNkLT5pbnRzdGF0dXMgJiBMQ0RfSU5UX1NEKSA9PSAwKTsKLQotCQkvKiBDYWxsIHNodXRkb3duIG9mIGN1cnJlbnQgcGFuZWwgKGlmIHVwKSAqLwotCQkvKiB0aGlzIG11c3Qgb2NjdXIgbGFzdCwgYmVjYXVzZSBpZiBhbiBleHRlcm5hbCBjbG9jayBpcyBkcml2aW5nCi0JCSAgICB0aGUgY29udHJvbGxlciwgdGhlIGNsb2NrIGNhbm5vdCBiZSB0dXJuZWQgb2ZmIGJlZm9yZSBmaXJzdAotCQkJc2h1dHRpbmcgZG93biB0aGUgY29udHJvbGxlci4KLQkJICovCi0JCWlmIChwYW5lbC0+ZGV2aWNlX3NodXRkb3duICE9IE5VTEwpCi0JCQlwYW5lbC0+ZGV2aWNlX3NodXRkb3duKCk7Ci0JfQotCi0JLyogTmV3cGFuZWwgPT0gTlVMTCBpbmRpY2F0ZXMgYSBzaHV0ZG93biBvcGVyYXRpb24gb25seSAqLwotCWlmIChuZXdwYW5lbCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlwYW5lbCA9IG5ld3BhbmVsOwotCi0JcHJpbnRrKCJQYW5lbCglcyksICVkeCVkXG4iLCBwYW5lbC0+bmFtZSwgcGFuZWwtPlhyZXMsIHBhbmVsLT5ZcmVzKTsKLQotCS8qCi0JICogU2V0dXAgY2xvY2tpbmcgaWYgaW50ZXJuYWwgTENEIGNsb2NrIHNvdXJjZSAoYXNzdW1lcyBzeXNfYXV4cGxsIHZhbGlkKQotCSAqLwotCWlmICghKHBhbmVsLT5tb2RlX2Nsa2NvbnRyb2wgJiBMQ0RfQ0xLQ09OVFJPTF9FWFQpKQotCXsKLQkJdWludDMyIHN5c19jbGtzcmM7Ci0JCWF1X3dyaXRlbChwYW5lbC0+bW9kZV9hdXhwbGwsIFNZU19BVVhQTEwpOwotCQlzeXNfY2xrc3JjID0gYXVfcmVhZGwoU1lTX0NMS1NSQykgJiB+MHgwMDAwMDAxZjsKLQkJc3lzX2Nsa3NyYyB8PSBwYW5lbC0+bW9kZV90b3ljbGtzcmM7Ci0JCWF1X3dyaXRlbChzeXNfY2xrc3JjLCBTWVNfQ0xLU1JDKTsKLQl9Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBwYW5lbCB0aW1pbmdzCi0JICovCi0JbGNkLT5zY3JlZW4gPSBwYW5lbC0+bW9kZV9zY3JlZW47Ci0JbGNkLT5ob3J6dGltaW5nID0gcGFuZWwtPm1vZGVfaG9yenRpbWluZzsKLQlsY2QtPnZlcnR0aW1pbmcgPSBwYW5lbC0+bW9kZV92ZXJ0dGltaW5nOwotCWxjZC0+Y2xrY29udHJvbCA9IHBhbmVsLT5tb2RlX2Nsa2NvbnRyb2w7Ci0JbGNkLT5wd21kaXYgPSBwYW5lbC0+bW9kZV9wd21kaXY7Ci0JbGNkLT5wd21oaSA9IHBhbmVsLT5tb2RlX3B3bWhpOwotCWxjZC0+b3V0bWFzayA9IHBhbmVsLT5tb2RlX291dG1hc2s7Ci0JbGNkLT5maWZvY3RybCA9IHBhbmVsLT5tb2RlX2ZpZm9jdHJsOwotCWF1X3N5bmMoKTsKLQotCS8qIGZpeG1lOiBDaGVjayB3aW5kb3cgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIHN0aWxsIHZhbGlkCi0JICogZm9yIG5ldyBnZW9tZXRyeSAqLwotI2lmIDAKLQlhdTEyMDBfc2V0bG9jYXRpb24oZmJkZXYsIDAsIHdpbi0+d1swXS54cG9zLCB3aW4tPndbMF0ueXBvcyk7Ci0JYXUxMjAwX3NldGxvY2F0aW9uKGZiZGV2LCAxLCB3aW4tPndbMV0ueHBvcywgd2luLT53WzFdLnlwb3MpOwotCWF1MTIwMF9zZXRsb2NhdGlvbihmYmRldiwgMiwgd2luLT53WzJdLnhwb3MsIHdpbi0+d1syXS55cG9zKTsKLQlhdTEyMDBfc2V0bG9jYXRpb24oZmJkZXYsIDMsIHdpbi0+d1szXS54cG9zLCB3aW4tPndbM10ueXBvcyk7Ci0jZW5kaWYKLQlsY2QtPndpbmVuYWJsZSA9IHdpbmVuYWJsZTsKLQotCS8qCi0JICogUmUtZW5hYmxlIHNjcmVlbiBub3cgdGhhdCBpdCBpcyBjb25maWd1cmVkCi0JICovCi0JbGNkLT5zY3JlZW4gfD0gTENEX1NDUkVFTl9TRU47Ci0JYXVfc3luYygpOwotCi0JLyogQ2FsbCBpbml0IG9mIHBhbmVsICovCi0JaWYgKHBhbmVsLT5kZXZpY2VfaW5pdCAhPSBOVUxMKSBwYW5lbC0+ZGV2aWNlX2luaXQoKTsKLQotCS8qIEZJWCEhISEgbm90IGFwcHJvcHJpYXRlIG9uIHBhbmVsIGNoYW5nZSEhISBHbG9iYWwgc2V0dXAvaW5pdCAqLwotCWxjZC0+aW50ZW5hYmxlID0gMDsKLQlsY2QtPmludHN0YXR1cyA9IH4wOwotCWxjZC0+YmFja2NvbG9yID0gd2luLT5tb2RlX2JhY2tjb2xvcjsKLQotCS8qIFNldHVwIENvbG9yIEtleSAtIEZJWCEhISAqLwotCWxjZC0+Y29sb3JrZXkgPSB3aW4tPm1vZGVfY29sb3JrZXk7Ci0JbGNkLT5jb2xvcmtleW1zayA9IHdpbi0+bW9kZV9jb2xvcmtleW1zazsKLQotCS8qIFNldHVwIEhXQ3Vyc29yIC0gRklYISEhIE5lZWQgdG8gc3VwcG9ydCB0aGlzIGV2ZW50dWFsbHkgKi8KLQlsY2QtPmh3Yy5jdXJzb3JjdHJsID0gMDsKLQlsY2QtPmh3Yy5jdXJzb3Jwb3MgPSAwOwotCWxjZC0+aHdjLmN1cnNvcmNvbG9yMCA9IDA7Ci0JbGNkLT5od2MuY3Vyc29yY29sb3IxID0gMDsKLQlsY2QtPmh3Yy5jdXJzb3Jjb2xvcjIgPSAwOwotCWxjZC0+aHdjLmN1cnNvcmNvbG9yMyA9IDA7Ci0KLQotI2lmIDAKLSNkZWZpbmUgRChYKSBwcmludGsoIiUyNXM6ICUwOFhcbiIsICNYLCBYKQotCUQobGNkLT5zY3JlZW4pOwotCUQobGNkLT5ob3J6dGltaW5nKTsKLQlEKGxjZC0+dmVydHRpbWluZyk7Ci0JRChsY2QtPmNsa2NvbnRyb2wpOwotCUQobGNkLT5wd21kaXYpOwotCUQobGNkLT5wd21oaSk7Ci0JRChsY2QtPm91dG1hc2spOwotCUQobGNkLT5maWZvY3RybCk7Ci0JRChsY2QtPndpbmRvd1swXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1swXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1swXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1swXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzBdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbMF0ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1sxXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzFdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbMV0ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmRvd1syXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1syXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1syXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1syXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzJdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbMl0ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmRvd1szXS53aW5jdHJsMCk7Ci0JRChsY2QtPndpbmRvd1szXS53aW5jdHJsMSk7Ci0JRChsY2QtPndpbmRvd1szXS53aW5jdHJsMik7Ci0JRChsY2QtPndpbmRvd1szXS53aW5idWYwKTsKLQlEKGxjZC0+d2luZG93WzNdLndpbmJ1ZjEpOwotCUQobGNkLT53aW5kb3dbM10ud2luYnVmY3RybCk7Ci0JRChsY2QtPndpbmVuYWJsZSk7Ci0JRChsY2QtPmludGVuYWJsZSk7Ci0JRChsY2QtPmludHN0YXR1cyk7Ci0JRChsY2QtPmJhY2tjb2xvcik7Ci0JRChsY2QtPndpbmVuYWJsZSk7Ci0JRChsY2QtPmNvbG9ya2V5KTsKLSAgICBEKGxjZC0+Y29sb3JrZXltc2spOwotCUQobGNkLT5od2MuY3Vyc29yY3RybCk7Ci0JRChsY2QtPmh3Yy5jdXJzb3Jwb3MpOwotCUQobGNkLT5od2MuY3Vyc29yY29sb3IwKTsKLQlEKGxjZC0+aHdjLmN1cnNvcmNvbG9yMSk7Ci0JRChsY2QtPmh3Yy5jdXJzb3Jjb2xvcjIpOwotCUQobGNkLT5od2MuY3Vyc29yY29sb3IzKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBhdTEyMDBfc2V0bW9kZShzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldikKLXsKLQlpbnQgcGxhbmUgPSBmYmRldi0+cGxhbmU7Ci0JLyogV2luZG93L3BsYW5lIHNldHVwICovCi0JbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxID0gKCAwCi0JCXwgTENEX1dJTkNUUkwxX1BSSV9OKHBsYW5lKQotCQl8IHdpbi0+d1twbGFuZV0ubW9kZV93aW5jdHJsMSAvKiBGUk0sQ0NPLFBPLFBJUEUgKi8KLQkJKSA7Ci0KLQlhdTEyMDBfc2V0bG9jYXRpb24oZmJkZXYsIHBsYW5lLCB3aW4tPndbcGxhbmVdLnhwb3MsIHdpbi0+d1twbGFuZV0ueXBvcyk7Ci0KLQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSAoIDAKLQkJfCBMQ0RfV0lOQ1RSTDJfQ0tNT0RFXzAwCi0JCXwgTENEX1dJTkNUUkwyX0RCTQotCQl8IExDRF9XSU5DVFJMMl9CWF9OKCBmYmRldi0+ZmJfaW5mby5maXgubGluZV9sZW5ndGgpCi0JCXwgTENEX1dJTkNUUkwyX1NDWF8xCi0JCXwgTENEX1dJTkNUUkwyX1NDWV8xCi0JCSkgOwotCWxjZC0+d2luZW5hYmxlIHw9IHdpbi0+d1twbGFuZV0ubW9kZV93aW5lbmFibGU7Ci0JYXVfc3luYygpOwotfQotCi0KLS8qIElubGluZSBoZWxwZXJzICovCi0KLS8qI2RlZmluZSBwYW5lbF9pc19kdWFsKHBhbmVsKSAgKChwYW5lbC0+bW9kZV9zY3JlZW4gJiBMQ0RfU0NSRUVOX1BUKSA9PSBMQ0RfU0NSRUVOX1BUXzAxMCkqLwotLyojZGVmaW5lIHBhbmVsX2lzX2FjdGl2ZShwYW5lbCkoKHBhbmVsLT5tb2RlX3NjcmVlbiAmIExDRF9TQ1JFRU5fUFQpID09IExDRF9TQ1JFRU5fUFRfMDEwKSovCi0KLSNkZWZpbmUgcGFuZWxfaXNfY29sb3IocGFuZWwpICgocGFuZWwtPm1vZGVfc2NyZWVuICYgTENEX1NDUkVFTl9QVCkgPD0gTENEX1NDUkVFTl9QVF9DRFNUTikKLQotLyogQml0ZmllbGRzIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGNvbnRyb2xsZXIuICovCi1zdGF0aWMgc3RydWN0IGZiX2JpdGZpZWxkIHJnYl9iaXRmaWVsZHNbXVs0XSA9IHsKLSAgCS8qICAgICBSZWQsIAkgICBHcmVlbiwgCSBCbHVlLCAJICAgICBUcmFuc3AgICAqLwotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQNjU1ID4+IDI1XSA9Ci0JCXsgeyAxMCwgNiwgMCB9LCB7IDUsIDUsIDAgfSwgeyAwLCA1LCAwIH0sIHsgMCwgMCwgMCB9IH0sCi0KLQlbTENEX1dJTkNUUkwxX0ZSTV8xNkJQUDU2NSA+PiAyNV0gPQotCQl7IHsgMTEsIDUsIDAgfSwgeyA1LCA2LCAwIH0sIHsgMCwgNSwgMCB9LCB7IDAsIDAsIDAgfSB9LAotCi0JW0xDRF9XSU5DVFJMMV9GUk1fMTZCUFA1NTYgPj4gMjVdID0KLQkJeyB7IDExLCA1LCAwIH0sIHsgNiwgNSwgMCB9LCB7IDAsIDYsIDAgfSwgeyAwLCAwLCAwIH0gfSwKLQotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQSTE1NTUgPj4gMjVdID0KLQkJeyB7IDEwLCA1LCAwIH0sIHsgNSwgNSwgMCB9LCB7IDAsIDUsIDAgfSwgeyAwLCAwLCAwIH0gfSwKLQotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQSTU1NTEgPj4gMjVdID0KLQkJeyB7IDExLCA1LCAwIH0sIHsgNiwgNSwgMCB9LCB7IDEsIDUsIDAgfSwgeyAwLCAwLCAwIH0gfSwKLQotCVtMQ0RfV0lOQ1RSTDFfRlJNXzE2QlBQQTE1NTUgPj4gMjVdID0KLQkJeyB7IDEwLCA1LCAwIH0sIHsgNSwgNSwgMCB9LCB7IDAsIDUsIDAgfSwgeyAxNSwgMSwgMCB9IH0sCi0KLQlbTENEX1dJTkNUUkwxX0ZSTV8xNkJQUEE1NTUxID4+IDI1XSA9Ci0JCXsgeyAxMSwgNSwgMCB9LCB7IDYsIDUsIDAgfSwgeyAxLCA1LCAwIH0sIHsgMCwgMSwgMCB9IH0sCi0KLQlbTENEX1dJTkNUUkwxX0ZSTV8yNEJQUCA+PiAyNV0gPQotCQl7IHsgMTYsIDgsIDAgfSwgeyA4LCA4LCAwIH0sIHsgMCwgOCwgMCB9LCB7IDAsIDAsIDAgfSB9LAotCi0JW0xDRF9XSU5DVFJMMV9GUk1fMzJCUFAgPj4gMjVdID0KLQkJeyB7IDE2LCA4LCAwIH0sIHsgOCwgOCwgMCB9LCB7IDAsIDgsIDAgfSwgeyAyNCwgMCwgMCB9IH0sCi19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBIZWxwZXJzICovCi0KLXN0YXRpYyB2b2lkIGF1MTIwMGZiX3VwZGF0ZV9mYmluZm8oc3RydWN0IGZiX2luZm8gKmZiaSkKLXsKLQkvKiBGSVghISEhIFRoaXMgYWxzbyBuZWVkcyB0byB0YWtlIHRoZSB3aW5kb3cgcGl4ZWwgZm9ybWF0IGludG8gYWNjb3VudCEhISAqLwotCi0JLyogVXBkYXRlIHZhci1kZXBlbmRlbnQgRkIgaW5mbyAqLwotCWlmIChwYW5lbF9pc19jb2xvcihwYW5lbCkpIHsKLQkJaWYgKGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsIDw9IDgpIHsKLQkJCS8qIHBhbGV0dGl6ZWQgKi8KLQkJCWZiaS0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKLQkJCWZiaS0+Zml4LmxpbmVfbGVuZ3RoID0gZmJpLT52YXIueHJlc192aXJ0dWFsIC8KLQkJCQkoOC9mYmktPnZhci5iaXRzX3Blcl9waXhlbCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBub24tcGFsZXR0aXplZCAqLwotCQkJZmJpLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKLQkJCWZiaS0+Zml4LmxpbmVfbGVuZ3RoID0gZmJpLT52YXIueHJlc192aXJ0dWFsICogKGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gOCk7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBtb25vIEZJWCEhISBtb25vIDggYW5kIDQgYml0cyAqLwotCQlmYmktPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfTU9OTzEwOwotCQlmYmktPmZpeC5saW5lX2xlbmd0aCA9IGZiaS0+dmFyLnhyZXNfdmlydHVhbCAvIDg7Ci0JfQotCi0JZmJpLT5zY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoICogZmJpLT52YXIueXJlc192aXJ0dWFsOwotCXByaW50X2RiZygibGluZSBsZW5ndGg6ICVkXG4iLCBmYmktPmZpeC5saW5lX2xlbmd0aCk7Ci0JcHJpbnRfZGJnKCJiaXRzX3Blcl9waXhlbDogJWRcbiIsIGZiaS0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogQVUxMjAwIGZyYW1lYnVmZmVyIGRyaXZlciAqLwotCi0vKiBmYl9jaGVja192YXIKLSAqIFZhbGlkYXRlIHZhciBzZXR0aW5ncyB3aXRoIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyBhbmQgbW9kaWZ5IGl0IGlmIG5lY2Vzc2FyeQotICovCi1zdGF0aWMgaW50IGF1MTIwMGZiX2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJpKQotewotCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2ID0gKHN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKilmYmk7Ci0JdTMyIHBpeGNsb2NrOwotCWludCBzY3JlZW5fc2l6ZSwgcGxhbmU7Ci0KLQlwbGFuZSA9IGZiZGV2LT5wbGFuZTsKLQotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtb2RlIHJlc3BlY3QgYWxsIExDRCBjb250cm9sbGVyIGFuZAotCSAqIHBhbmVsIHJlc3RyaWN0aW9ucy4gKi8KLQl2YXItPnhyZXMgPSB3aW4tPndbcGxhbmVdLnhyZXM7Ci0JdmFyLT55cmVzID0gd2luLT53W3BsYW5lXS55cmVzOwotCi0JLyogTm8gbmVlZCBmb3IgdmlydHVhbCByZXNvbHV0aW9uIHN1cHBvcnQgKi8KLQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKLQl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKLQotCXZhci0+Yml0c19wZXJfcGl4ZWwgPSB3aW5icHAod2luLT53W3BsYW5lXS5tb2RlX3dpbmN0cmwxKTsKLQotCXNjcmVlbl9zaXplID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbDsKLQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA+IDgpIHNjcmVlbl9zaXplICo9ICh2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCk7Ci0JZWxzZSBzY3JlZW5fc2l6ZSAvPSAoOC92YXItPmJpdHNfcGVyX3BpeGVsKTsKLQotCWlmIChmYmRldi0+ZmJfbGVuIDwgc2NyZWVuX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOyAvKiBWaXJ0dWFsIHNjcmVlbiBpcyB0byBiaWcsIGFib3J0ICovCi0KLQkvKiBGSVghISEhIHdoYXQgYXJlIHRoZSBpbXBsaWNhaXRvbnMgb2YgaWdub3JpbmcgdGhpcyBmb3Igd2luZG93cyA/Pz8gKi8KLQkvKiBUaGUgbWF4IExDRCBjbG9jayBpcyBmaXhlZCB0byA0OE1IeiAodmFsdWUgb2YgQVVYX0NMSykuIFRoZSBwaXhlbAotCSAqIGNsb2NrIGNhbiBvbmx5IGJlIG9idGFpbiBieSBkaXZpZGluZyB0aGlzIHZhbHVlIGJ5IGFuIGV2ZW4gaW50ZWdlci4KLQkgKiBGYWxsYmFjayB0byBhIHNsb3dlciBwaXhlbCBjbG9jayBpZiBuZWNlc3NhcnkuICovCi0JcGl4Y2xvY2sgPSBtYXgoKHUzMikoUElDT1MyS0haKHZhci0+cGl4Y2xvY2spICogMTAwMCksIGZiaS0+bW9uc3BlY3MuZGNsa21pbik7Ci0JcGl4Y2xvY2sgPSBtaW4ocGl4Y2xvY2ssIG1pbihmYmktPm1vbnNwZWNzLmRjbGttYXgsICh1MzIpQVUxMjAwX0xDRF9NQVhfQ0xLLzIpKTsKLQotCWlmIChBVTEyMDBfTENEX01BWF9DTEsgJSBwaXhjbG9jaykgewotCQlpbnQgZGlmZiA9IEFVMTIwMF9MQ0RfTUFYX0NMSyAlIHBpeGNsb2NrOwotCQlwaXhjbG9jayAtPSBkaWZmOwotCX0KLQotCXZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1MocGl4Y2xvY2svMTAwMCk7Ci0jaWYgMAotCWlmICghcGFuZWxfaXNfYWN0aXZlKHBhbmVsKSkgewotCQlpbnQgcGNkID0gQVUxMjAwX0xDRF9NQVhfQ0xLIC8gKHBpeGNsb2NrICogMikgLSAxOwotCi0JCWlmICghcGFuZWxfaXNfY29sb3IocGFuZWwpCi0JCQkmJiAocGFuZWwtPmNvbnRyb2xfYmFzZSAmIExDRF9DT05UUk9MX01QSSkgJiYgKHBjZCA8IDMpKSB7Ci0JCQkvKiBTVE4gOGJpdCBtb25vIHBhbmVsIHN1cHBvcnQgaXMgdXAgdG8gNk1IeiBwaXhjbG9jayAqLwotCQkJdmFyLT5waXhjbG9jayA9IEtIWjJQSUNPUyg2MDAwKTsKLQkJfSBlbHNlIGlmICghcGNkKSB7Ci0JCQkvKiBPdGhlciBTVE4gcGFuZWwgc3VwcG9ydCBpcyB1cCB0byAxMk1IeiAgKi8KLQkJCXZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1MoMTIwMDApOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogU2V0IGJpdGZpZWxkIGFjY29yZGluZ2x5ICovCi0Jc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgMTY6Ci0JCXsKLQkJCS8qIDE2YnBwIFRydWUgY29sb3IuCi0JCQkgKiBUaGVzZSBtdXN0IGJlIHNldCB0byBNQVRDSCBXSU5DVFJMW0ZPUk1dICovCi0JCQlpbnQgaWR4OwotCQkJaWR4ID0gKHdpbi0+d1swXS5tb2RlX3dpbmN0cmwxICYgTENEX1dJTkNUUkwxX0ZSTSkgPj4gMjU7Ci0JCQl2YXItPnJlZCAgICA9IHJnYl9iaXRmaWVsZHNbaWR4XVswXTsKLQkJCXZhci0+Z3JlZW4gID0gcmdiX2JpdGZpZWxkc1tpZHhdWzFdOwotCQkJdmFyLT5ibHVlICAgPSByZ2JfYml0ZmllbGRzW2lkeF1bMl07Ci0JCQl2YXItPnRyYW5zcCA9IHJnYl9iaXRmaWVsZHNbaWR4XVszXTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2FzZSAzMjoKLQkJewotCQkJLyogMzJicHAgVHJ1ZSBjb2xvci4KLQkJCSAqIFRoZXNlIG11c3QgYmUgc2V0IHRvIE1BVENIIFdJTkNUUkxbRk9STV0gKi8KLQkJCWludCBpZHg7Ci0JCQlpZHggPSAod2luLT53WzBdLm1vZGVfd2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfRlJNKSA+PiAyNTsKLQkJCXZhci0+cmVkICAgID0gcmdiX2JpdGZpZWxkc1tpZHhdWzBdOwotCQkJdmFyLT5ncmVlbiAgPSByZ2JfYml0ZmllbGRzW2lkeF1bMV07Ci0JCQl2YXItPmJsdWUgICA9IHJnYl9iaXRmaWVsZHNbaWR4XVsyXTsKLQkJCXZhci0+dHJhbnNwID0gcmdiX2JpdGZpZWxkc1tpZHhdWzNdOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXByaW50X2RiZygiVW5zdXBwb3J0ZWQgZGVwdGggJWRicHAiLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBmYl9zZXRfcGFyCi0gKiBTZXQgaGFyZHdhcmUgd2l0aCB2YXIgc2V0dGluZ3MuIFRoaXMgd2lsbCBlbmFibGUgdGhlIGNvbnRyb2xsZXIgd2l0aCBhCi0gKiBzcGVjaWZpYyBtb2RlLCBub3JtYWxseSB2YWxpZGF0ZWQgd2l0aCB0aGUgZmJfY2hlY2tfdmFyIG1ldGhvZAotICovCi1zdGF0aWMgaW50IGF1MTIwMGZiX2ZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmZiaSkKLXsKLQlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldiA9IChzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICopZmJpOwotCi0JYXUxMjAwZmJfdXBkYXRlX2ZiaW5mbyhmYmkpOwotCWF1MTIwMF9zZXRtb2RlKGZiZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBmYl9zZXRjb2xyZWcKLSAqIFNldCBjb2xvciBpbiBMQ0QgcGFsZXR0ZS4KLSAqLwotc3RhdGljIGludCBhdTEyMDBmYl9mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQotewotCXZvbGF0aWxlIHUzMiAqcGFsZXR0ZSA9IGxjZC0+cGFsZXR0ZTsKLQl1MzIgdmFsdWU7Ci0KLQlpZiAocmVnbm8gPiAoQVUxMjAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTIC0gMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGZiaS0+dmFyLmdyYXlzY2FsZSkgewotCQkvKiBDb252ZXJ0IGNvbG9yIHRvIGdyYXlzY2FsZSAqLwotCQlyZWQgPSBncmVlbiA9IGJsdWUgPQotCQkJKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbiArIDc0NzEgKiBibHVlKSA+PiAxNjsKLQl9Ci0KLQlpZiAoZmJpLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKLQkJLyogUGxhY2UgY29sb3IgaW4gdGhlIHBzZXVkb3BhbGV0dGUgKi8KLQkJaWYgKHJlZ25vID4gMTYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlwYWxldHRlID0gKHUzMiopIGZiaS0+cHNldWRvX3BhbGV0dGU7Ci0KLQkJcmVkICAgPj49ICgxNiAtIGZiaS0+dmFyLnJlZC5sZW5ndGgpOwotCQlncmVlbiA+Pj0gKDE2IC0gZmJpLT52YXIuZ3JlZW4ubGVuZ3RoKTsKLQkJYmx1ZSAgPj49ICgxNiAtIGZiaS0+dmFyLmJsdWUubGVuZ3RoKTsKLQotCQl2YWx1ZSA9IChyZWQgICA8PCBmYmktPnZhci5yZWQub2Zmc2V0KSAJfAotCQkJKGdyZWVuIDw8IGZiaS0+dmFyLmdyZWVuLm9mZnNldCl8Ci0JCQkoYmx1ZSAgPDwgZmJpLT52YXIuYmx1ZS5vZmZzZXQpOwotCQl2YWx1ZSAmPSAweEZGRkY7Ci0KLQl9IGVsc2UgaWYgKDEgLypGSVghISEgcGFuZWxfaXNfYWN0aXZlKGZiZGV2LT5wYW5lbCkqLykgewotCQkvKiBDT0xPUiBURlQgUEFMTEVUVElaRUQgKHVzZSBSR0IgNTY1KSAqLwotCQl2YWx1ZSA9IChyZWQgJiAweEY4MDApfCgoZ3JlZW4gPj4gNSkgJgotCQkJCTB4MDdFMCl8KChibHVlID4+IDExKSAmIDB4MDAxRik7Ci0JCXZhbHVlICY9IDB4RkZGRjsKLQotCX0gZWxzZSBpZiAoMCAvKnBhbmVsX2lzX2NvbG9yKGZiZGV2LT5wYW5lbCkqLykgewotCQkvKiBDT0xPUiBTVE4gTU9ERSAqLwotCQl2YWx1ZSA9IDB4MTIzNDsKLQkJdmFsdWUgJj0gMHhGRkY7Ci0JfSBlbHNlIHsKLQkJLyogTU9OT0NIUk9NRSBNT0RFICovCi0JCXZhbHVlID0gKGdyZWVuID4+IDEyKSAmIDB4MDAwRjsKLQkJdmFsdWUgJj0gMHhGOwotCX0KLQotCXBhbGV0dGVbcmVnbm9dID0gdmFsdWU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZmJfYmxhbmsKLSAqIEJsYW5rIHRoZSBzY3JlZW4uIERlcGVuZGluZyBvbiB0aGUgbW9kZSwgdGhlIHNjcmVlbiB3aWxsIGJlCi0gKiBhY3RpdmF0ZWQgd2l0aCB0aGUgYmFja2xpZ2h0IGNvbG9yLCBvciBkZXNhY3RpdmF0ZWQKLSAqLwotc3RhdGljIGludCBhdTEyMDBmYl9mYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmZiaSkKLXsKLQkvKiBTaG9ydC1jaXJjdWl0IHNjcmVlbiBibGFua2luZyAqLwotCWlmIChub2JsYW5raW5nKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAoYmxhbmtfbW9kZSkgewotCi0JY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCWNhc2UgRkJfQkxBTktfTk9STUFMOgotCQkvKiBwcmludGsoInR1cm4gb24gcGFuZWxcbiIpOyAqLwotCQlhdTEyMDBfc2V0cGFuZWwocGFuZWwpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgotCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQkvKiBwcmludGsoInR1cm4gb2ZmIHBhbmVsXG4iKTsgKi8KLQkJYXUxMjAwX3NldHBhbmVsKE5VTEwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQotCX0KLQotCS8qIEZCX0JMQU5LX05PUk1BTCBpcyBhIHNvZnQgYmxhbmsgKi8KLQlyZXR1cm4gKGJsYW5rX21vZGUgPT0gRkJfQkxBTktfTk9STUFMKSA/IC1FSU5WQUwgOiAwOwotfQotCi0vKiBmYl9tbWFwCi0gKiBNYXAgdmlkZW8gbWVtb3J5IGluIHVzZXIgc3BhY2UuIFdlIGRvbid0IHVzZSB0aGUgZ2VuZXJpYyBmYl9tbWFwCi0gKiBtZXRob2QgbWFpbmx5IHRvIGFsbG93IHRoZSB1c2Ugb2YgdGhlIFRMQiBzdHJlYW1pbmcgZmxhZyAoQ0NBPTYpCi0gKi8KLXN0YXRpYyBpbnQgYXUxMjAwZmJfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi0KLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ9MCwgb2ZmOwotCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2ID0gKHN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKikgaW5mbzsKLQotI2lmZGVmIENPTkZJR19QTQotCWF1MXh4eF9wbV9hY2Nlc3MoTENEX3BtX2Rldik7Ci0jZW5kaWYKLQotCWlmICh2bWEtPnZtX3Bnb2ZmID4gKH4wVUwgPj4gUEFHRV9TSElGVCkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RhcnQgPSBmYmRldi0+ZmJfcGh5cyAmIFBBR0VfTUFTSzsKLQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgZmJkZXYtPmZiX2xlbik7Ci0KLQlvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0KLQlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCArIG9mZikgPiBsZW4pIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jb2ZmICs9IHN0YXJ0OwotCXZtYS0+dm1fcGdvZmYgPSBvZmYgPj4gUEFHRV9TSElGVDsKLQotCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX0NBQ0hFX01BU0s7IC8qIENDQT03ICovCi0KLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwotCi0JcmV0dXJuIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIG9mZiA+PiBQQUdFX1NISUZULAotCQkJCSAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJCSAgdm1hLT52bV9wYWdlX3Byb3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9nbG9iYWwodV9pbnQgY21kLCBzdHJ1Y3QgYXUxMjAwX2xjZF9nbG9iYWxfcmVnc190ICpwZGF0YSkKLXsKLQotCXVuc2lnbmVkIGludCBoaTEsIGRpdmlkZXI7Ci0KLQkvKiBTQ1JFRU5fU0laRTogdXNlciBjYW5ub3QgcmVzZXQgc2l6ZSwgbXVzdCBzd2l0Y2ggcGFuZWwgY2hvaWNlICovCi0KLQlpZiAocGRhdGEtPmZsYWdzICYgU0NSRUVOX0JBQ0tDT0xPUikKLQkJbGNkLT5iYWNrY29sb3IgPSBwZGF0YS0+YmFja2NvbG9yOwotCi0JaWYgKHBkYXRhLT5mbGFncyAmIFNDUkVFTl9CUklHSFRORVNTKSB7Ci0KLQkJLy8gbGltaXQgYnJpZ2h0bmVzcyBwd20gZHV0eSB0byA+PSAzMC8xNjAwCi0JCWlmIChwZGF0YS0+YnJpZ2h0bmVzcyA8IDMwKSB7Ci0JCQlwZGF0YS0+YnJpZ2h0bmVzcyA9IDMwOwotCQl9Ci0JCWRpdmlkZXIgPSAobGNkLT5wd21kaXYgJiAweDNGRkZGKSArIDE7Ci0JCWhpMSA9IChsY2QtPnB3bWhpID4+IDE2KSArIDE7Ci0JCWhpMSA9ICgoKHBkYXRhLT5icmlnaHRuZXNzICYgMHhGRikrMSkgKiBkaXZpZGVyID4+IDgpOwotCQlsY2QtPnB3bWhpICY9IDB4RkZGRjsKLQkJbGNkLT5wd21oaSB8PSAoaGkxIDw8IDE2KTsKLQl9Ci0KLQlpZiAocGRhdGEtPmZsYWdzICYgU0NSRUVOX0NPTE9SS0VZKQotCQlsY2QtPmNvbG9ya2V5ID0gcGRhdGEtPmNvbG9ya2V5OwotCi0JaWYgKHBkYXRhLT5mbGFncyAmIFNDUkVFTl9NQVNLKQotCQlsY2QtPmNvbG9ya2V5bXNrID0gcGRhdGEtPm1hc2s7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfZ2xvYmFsKHVfaW50IGNtZCwgc3RydWN0IGF1MTIwMF9sY2RfZ2xvYmFsX3JlZ3NfdCAqcGRhdGEpCi17Ci0JdW5zaWduZWQgaW50IGhpMSwgZGl2aWRlcjsKLQotCXBkYXRhLT54c2l6ZSA9ICgobGNkLT5zY3JlZW4gJiBMQ0RfU0NSRUVOX1NYKSA+PiAxOSkgKyAxOwotCXBkYXRhLT55c2l6ZSA9ICgobGNkLT5zY3JlZW4gJiBMQ0RfU0NSRUVOX1NZKSA+PiA4KSArIDE7Ci0KLQlwZGF0YS0+YmFja2NvbG9yID0gbGNkLT5iYWNrY29sb3I7Ci0JcGRhdGEtPmNvbG9ya2V5ID0gbGNkLT5jb2xvcmtleTsKLQlwZGF0YS0+bWFzayA9IGxjZC0+Y29sb3JrZXltc2s7Ci0KLQkvLyBicmlnaHRuZXNzCi0JaGkxID0gKGxjZC0+cHdtaGkgPj4gMTYpICsgMTsKLQlkaXZpZGVyID0gKGxjZC0+cHdtZGl2ICYgMHgzRkZGRikgKyAxOwotCXBkYXRhLT5icmlnaHRuZXNzID0gKChoaTEgPDwgOCkgLyBkaXZpZGVyKSAtIDE7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfd2luZG93KHVuc2lnbmVkIGludCBwbGFuZSwKLQlzdHJ1Y3QgYXUxMjAwX2xjZF93aW5kb3dfcmVnc190ICpwZGF0YSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsLCBicHA7Ci0KLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAwICovCi0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9QT1NJVElPTikgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiB+KExDRF9XSU5DVFJMMF9PWCB8Ci0JCQkJTENEX1dJTkNUUkwwX09ZKTsKLQkJdmFsIHw9ICgocGRhdGEtPnhwb3MgPDwgMjEpICYgTENEX1dJTkNUUkwwX09YKTsKLQkJdmFsIHw9ICgocGRhdGEtPnlwb3MgPDwgMTApICYgTENEX1dJTkNUUkwwX09ZKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwwID0gdmFsOwotCX0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX0FMUEhBX0NPTE9SKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCAmIH4oTENEX1dJTkNUUkwwX0EpOwotCQl2YWwgfD0gKChwZGF0YS0+YWxwaGFfY29sb3IgPDwgMikgJiBMQ0RfV0lOQ1RSTDBfQSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCA9IHZhbDsKLQl9Ci0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9BTFBIQV9NT0RFKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCAmIH4oTENEX1dJTkNUUkwwX0FFTik7Ci0JCXZhbCB8PSAoKHBkYXRhLT5hbHBoYV9tb2RlIDw8IDEpICYgTENEX1dJTkNUUkwwX0FFTik7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMCA9IHZhbDsKLQl9Ci0KLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAxICovCi0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9QUklPUklUWSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiB+KExDRF9XSU5DVFJMMV9QUkkpOwotCQl2YWwgfD0gKChwZGF0YS0+cHJpb3JpdHkgPDwgMzApICYgTENEX1dJTkNUUkwxX1BSSSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHZhbDsKLQl9Ci0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9DSEFOTkVMKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIH4oTENEX1dJTkNUUkwxX1BJUEUpOwotCQl2YWwgfD0gKChwZGF0YS0+Y2hhbm5lbCA8PCAyOSkgJiBMQ0RfV0lOQ1RSTDFfUElQRSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHZhbDsKLQl9Ci0JaWYgKHBkYXRhLT5mbGFncyAmIFdJTl9CVUZGRVJfRk9STUFUKSB7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIH4oTENEX1dJTkNUUkwxX0ZSTSk7Ci0JCXZhbCB8PSAoKHBkYXRhLT5idWZmZXJfZm9ybWF0IDw8IDI1KSAmIExDRF9XSU5DVFJMMV9GUk0pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgPSB2YWw7Ci0JfQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fQ09MT1JfT1JERVIpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgfihMQ0RfV0lOQ1RSTDFfQ0NPKTsKLQkJdmFsIHw9ICgocGRhdGEtPmNvbG9yX29yZGVyIDw8IDI0KSAmIExDRF9XSU5DVFJMMV9DQ08pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgPSB2YWw7Ci0JfQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fUElYRUxfT1JERVIpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgfihMQ0RfV0lOQ1RSTDFfUE8pOwotCQl2YWwgfD0gKChwZGF0YS0+cGl4ZWxfb3JkZXIgPDwgMjIpICYgTENEX1dJTkNUUkwxX1BPKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxID0gdmFsOwotCX0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX1NJWkUpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgfihMQ0RfV0lOQ1RSTDFfU1pYIHwKLQkJCQlMQ0RfV0lOQ1RSTDFfU1pZKTsKLQkJdmFsIHw9ICgoKHBkYXRhLT54c2l6ZSA8PCAxMSkgLSAxKSAmIExDRF9XSU5DVFJMMV9TWlgpOwotCQl2YWwgfD0gKCgocGRhdGEtPnlzaXplKSAtIDEpICYgTENEX1dJTkNUUkwxX1NaWSk7Ci0JCWxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSA9IHZhbDsKLQkJLyogcHJvZ3JhbSBidWZmZXIgbGluZSB3aWR0aCAqLwotCQlicHAgPSB3aW5icHAodmFsKSAvIDg7Ci0JCXZhbCA9IGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMiAmIH4oTENEX1dJTkNUUkwyX0JYKTsKLQkJdmFsIHw9ICgoKHBkYXRhLT54c2l6ZSAqIGJwcCkgPDwgOCkgJiBMQ0RfV0lOQ1RSTDJfQlgpOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSB2YWw7Ci0JfQotCi0JLyogV2luZG93IGNvbnRyb2wgcmVnaXN0ZXIgMiAqLwotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fQ09MT1JLRVlfTU9ERSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiB+KExDRF9XSU5DVFJMMl9DS01PREUpOwotCQl2YWwgfD0gKChwZGF0YS0+Y29sb3JrZXlfbW9kZSA8PCAyNCkgJiBMQ0RfV0lOQ1RSTDJfQ0tNT0RFKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyID0gdmFsOwotCX0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX0RPVUJMRV9CVUZGRVJfTU9ERSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiB+KExDRF9XSU5DVFJMMl9EQk0pOwotCQl2YWwgfD0gKChwZGF0YS0+ZG91YmxlX2J1ZmZlcl9tb2RlIDw8IDIzKSAmIExDRF9XSU5DVFJMMl9EQk0pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSB2YWw7Ci0JfQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fUkFNX0FSUkFZX01PREUpIHsKLQkJdmFsID0gbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyICYgfihMQ0RfV0lOQ1RSTDJfUkFNKTsKLQkJdmFsIHw9ICgocGRhdGEtPnJhbV9hcnJheV9tb2RlIDw8IDIxKSAmIExDRF9XSU5DVFJMMl9SQU0pOwotCQlsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgPSB2YWw7Ci0JfQotCi0JLyogQnVmZmVyIGxpbmUgd2lkdGggcHJvZ3JhbW1lZCB3aXRoIFdJTl9TSVpFICovCi0KLQlpZiAocGRhdGEtPmZsYWdzICYgV0lOX0JVRkZFUl9TQ0FMRSkgewotCQl2YWwgPSBsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiB+KExDRF9XSU5DVFJMMl9TQ1ggfAotCQkJCUxDRF9XSU5DVFJMMl9TQ1kpOwotCQl2YWwgfD0gKChwZGF0YS0+eHNpemUgPDwgMTEpICYgTENEX1dJTkNUUkwyX1NDWCk7Ci0JCXZhbCB8PSAoKHBkYXRhLT55c2l6ZSkgJiBMQ0RfV0lOQ1RSTDJfU0NZKTsKLQkJbGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyID0gdmFsOwotCX0KLQotCWlmIChwZGF0YS0+ZmxhZ3MgJiBXSU5fRU5BQkxFKSB7Ci0JCXZhbCA9IGxjZC0+d2luZW5hYmxlOwotCQl2YWwgJj0gfigxPDxwbGFuZSk7Ci0JCXZhbCB8PSAocGRhdGEtPmVuYWJsZSAmIDEpIDw8IHBsYW5lOwotCQlsY2QtPndpbmVuYWJsZSA9IHZhbDsKLQl9Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfd2luZG93KHVuc2lnbmVkIGludCBwbGFuZSwKLQlzdHJ1Y3QgYXUxMjAwX2xjZF93aW5kb3dfcmVnc190ICpwZGF0YSkKLXsKLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAwICovCi0JcGRhdGEtPnhwb3MgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwwICYgTENEX1dJTkNUUkwwX09YKSA+PiAyMTsKLQlwZGF0YS0+eXBvcyA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiBMQ0RfV0lOQ1RSTDBfT1kpID4+IDEwOwotCXBkYXRhLT5hbHBoYV9jb2xvciA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiBMQ0RfV0lOQ1RSTDBfQSkgPj4gMjsKLQlwZGF0YS0+YWxwaGFfbW9kZSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDAgJiBMQ0RfV0lOQ1RSTDBfQUVOKSA+PiAxOwotCi0JLyogV2luZG93IGNvbnRyb2wgcmVnaXN0ZXIgMSAqLwotCXBkYXRhLT5wcmlvcml0eSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEmIExDRF9XSU5DVFJMMV9QUkkpID4+IDMwOwotCXBkYXRhLT5jaGFubmVsID0gKGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIExDRF9XSU5DVFJMMV9QSVBFKSA+PiAyOTsKLQlwZGF0YS0+YnVmZmVyX2Zvcm1hdCA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfRlJNKSA+PiAyNTsKLQlwZGF0YS0+Y29sb3Jfb3JkZXIgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwxICYgTENEX1dJTkNUUkwxX0NDTykgPj4gMjQ7Ci0JcGRhdGEtPnBpeGVsX29yZGVyID0gKGxjZC0+d2luZG93W3BsYW5lXS53aW5jdHJsMSAmIExDRF9XSU5DVFJMMV9QTykgPj4gMjI7Ci0JcGRhdGEtPnhzaXplID0gKChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfU1pYKSA+PiAxMSkgKyAxOwotCXBkYXRhLT55c2l6ZSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDEgJiBMQ0RfV0lOQ1RSTDFfU1pZKSArIDE7Ci0KLQkvKiBXaW5kb3cgY29udHJvbCByZWdpc3RlciAyICovCi0JcGRhdGEtPmNvbG9ya2V5X21vZGUgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyICYgTENEX1dJTkNUUkwyX0NLTU9ERSkgPj4gMjQ7Ci0JcGRhdGEtPmRvdWJsZV9idWZmZXJfbW9kZSA9IChsY2QtPndpbmRvd1twbGFuZV0ud2luY3RybDIgJiBMQ0RfV0lOQ1RSTDJfREJNKSA+PiAyMzsKLQlwZGF0YS0+cmFtX2FycmF5X21vZGUgPSAobGNkLT53aW5kb3dbcGxhbmVdLndpbmN0cmwyICYgTENEX1dJTkNUUkwyX1JBTSkgPj4gMjE7Ci0KLQlwZGF0YS0+ZW5hYmxlID0gKGxjZC0+d2luZW5hYmxlID4+IHBsYW5lKSAmIDE7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgaW50IGF1MTIwMGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcGxhbmU7Ci0JaW50IHZhbDsKLQotI2lmZGVmIENPTkZJR19QTQotCWF1MXh4eF9wbV9hY2Nlc3MoTENEX3BtX2Rldik7Ci0jZW5kaWYKLQotCXBsYW5lID0gZmJpbmZvMmluZGV4KGluZm8pOwotCXByaW50X2RiZygiYXUxMjAwZmI6IGlvY3RsICVkIG9uIHBsYW5lICVkXG4iLCBjbWQsIHBsYW5lKTsKLQotCWlmIChjbWQgPT0gQVUxMjAwX0xDRF9GQl9JT0NUTCkgewotCQlzdHJ1Y3QgYXUxMjAwX2xjZF9pb2RhdGFfdCBpb2RhdGE7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpb2RhdGEsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZihpb2RhdGEpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXByaW50X2RiZygiRkIgSU9DVEwgY2FsbGVkXG4iKTsKLQotCQlzd2l0Y2ggKGlvZGF0YS5zdWJjbWQpIHsKLQkJY2FzZSBBVTEyMDBfTENEX1NFVF9TQ1JFRU46Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfU0VUX1NDUkVFTlxuIik7Ci0JCQlzZXRfZ2xvYmFsKGNtZCwgJmlvZGF0YS5nbG9iYWwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVTEyMDBfTENEX0dFVF9TQ1JFRU46Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfR0VUX1NDUkVFTlxuIik7Ci0JCQlnZXRfZ2xvYmFsKGNtZCwgJmlvZGF0YS5nbG9iYWwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVTEyMDBfTENEX1NFVF9XSU5ET1c6Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfU0VUX1dJTkRPV1xuIik7Ci0JCQlzZXRfd2luZG93KHBsYW5lLCAmaW9kYXRhLndpbmRvdyk7Ci0JCQlicmVhazsKLQotCQljYXNlIEFVMTIwMF9MQ0RfR0VUX1dJTkRPVzoKLQkJCXByaW50X2RiZygiQVUxMjAwX0xDRF9HRVRfV0lORE9XXG4iKTsKLQkJCWdldF93aW5kb3cocGxhbmUsICZpb2RhdGEud2luZG93KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVUxMjAwX0xDRF9TRVRfUEFORUw6Ci0JCQlwcmludF9kYmcoIkFVMTIwMF9MQ0RfU0VUX1BBTkVMXG4iKTsKLQkJCWlmICgoaW9kYXRhLmdsb2JhbC5wYW5lbF9jaG9pY2UgPj0gMCkgJiYKLQkJCQkJKGlvZGF0YS5nbG9iYWwucGFuZWxfY2hvaWNlIDwKLQkJCQkJIE5VTV9QQU5FTFMpKQotCQkJewotCQkJCXN0cnVjdCBwYW5lbF9zZXR0aW5ncyAqbmV3cGFuZWw7Ci0JCQkJcGFuZWxfaW5kZXggPSBpb2RhdGEuZ2xvYmFsLnBhbmVsX2Nob2ljZTsKLQkJCQluZXdwYW5lbCA9ICZrbm93bl9sY2RfcGFuZWxzW3BhbmVsX2luZGV4XTsKLQkJCQlhdTEyMDBfc2V0cGFuZWwobmV3cGFuZWwpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVTEyMDBfTENEX0dFVF9QQU5FTDoKLQkJCXByaW50X2RiZygiQVUxMjAwX0xDRF9HRVRfUEFORUxcbiIpOwotCQkJaW9kYXRhLmdsb2JhbC5wYW5lbF9jaG9pY2UgPSBwYW5lbF9pbmRleDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXZhbCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLCAmaW9kYXRhLCBzaXplb2YoaW9kYXRhKSk7Ci0JCWlmICh2YWwpIHsKLQkJCXByaW50X2RiZygiZXJyb3I6IGNvdWxkIG5vdCBjb3B5ICVkIGJ5dGVzXG4iLCB2YWwpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGZiX29wcyBhdTEyMDBmYl9mYl9vcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5mYl9jaGVja192YXIJPSBhdTEyMDBmYl9mYl9jaGVja192YXIsCi0JLmZiX3NldF9wYXIJPSBhdTEyMDBmYl9mYl9zZXRfcGFyLAotCS5mYl9zZXRjb2xyZWcJPSBhdTEyMDBmYl9mYl9zZXRjb2xyZWcsCi0JLmZiX2JsYW5rCT0gYXUxMjAwZmJfZmJfYmxhbmssCi0JLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKLQkuZmJfc3luYwk9IE5VTEwsCi0JLmZiX2lvY3RsCT0gYXUxMjAwZmJfaW9jdGwsCi0JLmZiX21tYXAJPSBhdTEyMDBmYl9mYl9tbWFwLAotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlycXJldHVybl90IGF1MTIwMGZiX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCogZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQkvKiBOb3RoaW5nIHRvIGRvIGZvciBub3csIGp1c3QgY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0ICovCi0JbGNkLT5pbnRzdGF0dXMgPSBsY2QtPmludHN0YXR1czsKLQlhdV9zeW5jKCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEFVMTIwMCBMQ0QgZGV2aWNlIHByb2JlIGhlbHBlcnMgKi8KLQotc3RhdGljIGludCBhdTEyMDBmYl9pbml0X2ZiaW5mbyhzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldikKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gJmZiZGV2LT5mYl9pbmZvOwotCWludCBicHA7Ci0KLQltZW1zZXQoZmJpLCAwLCBzaXplb2Yoc3RydWN0IGZiX2luZm8pKTsKLQlmYmktPmZib3BzID0gJmF1MTIwMGZiX2ZiX29wczsKLQotCWJwcCA9IHdpbmJwcCh3aW4tPndbZmJkZXYtPnBsYW5lXS5tb2RlX3dpbmN0cmwxKTsKLQotCS8qIENvcHkgbW9uaXRvciBzcGVjcyBmcm9tIHBhbmVsIGRhdGEgKi8KLQkvKiBmaXhtZTogd2UncmUgc2V0dGluZyB1cCBMQ0QgY29udHJvbGxlciB3aW5kb3dzLCBzbyB0aGVzZSBkb250IGdpdmUgYQotCWRhbW4gYXMgdG8gd2hhdCB0aGUgbW9uaXRvciBzcGVjcyBhcmUgKHRoZSBwYW5lbCBpdHNlbGYgZG9lcywgYnV0IHRoYXQKLQlpc250IGRvbmUgaGVyZS4uLnNvIG1heWJlIG5lZWQgYSBnZW5lcmljIGNhdGNoYWxsIG1vbml0b3Igc2V0dGluZz8/PyAqLwotCW1lbWNweSgmZmJpLT5tb25zcGVjcywgJnBhbmVsLT5tb25zcGVjcywgc2l6ZW9mKHN0cnVjdCBmYl9tb25zcGVjcykpOwotCi0JLyogV2UgZmlyc3QgdHJ5IHRoZSB1c2VyIG1vZGUgcGFzc2VkIGluIGFyZ3VtZW50LiBJZiB0aGF0IGZhaWxlZCwKLQkgKiBvciBpZiBubyBvbmUgaGFzIGJlZW4gc3BlY2lmaWVkLCB3ZSBkZWZhdWx0IHRvIHRoZSBmaXJzdCBtb2RlIG9mIHRoZQotCSAqIHBhbmVsIGxpc3QuIE5vdGUgdGhhdCBhZnRlciB0aGlzIGNhbGwsIHZhciBkYXRhIHdpbGwgYmUgc2V0ICovCi0JaWYgKCFmYl9maW5kX21vZGUoJmZiaS0+dmFyLAotCQkJICBmYmksCi0JCQkgIE5VTEwsIC8qIGRydl9pbmZvLm9wdF9tb2RlLCAqLwotCQkJICBmYmktPm1vbnNwZWNzLm1vZGVkYiwKLQkJCSAgZmJpLT5tb25zcGVjcy5tb2RlZGJfbGVuLAotCQkJICBmYmktPm1vbnNwZWNzLm1vZGVkYiwKLQkJCSAgYnBwKSkgewotCi0JCXByaW50X2VycigiQ2Fubm90IGZpbmQgdmFsaWQgbW9kZSBmb3IgcGFuZWwgJXMiLCBwYW5lbC0+bmFtZSk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWZiaS0+cHNldWRvX3BhbGV0dGUgPSBrbWFsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOwotCWlmICghZmJpLT5wc2V1ZG9fcGFsZXR0ZSkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtc2V0KGZiaS0+cHNldWRvX3BhbGV0dGUsIDAsIHNpemVvZih1MzIpICogMTYpOwotCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgQVUxMjAwX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTLCAwKSA8IDApIHsKLQkJcHJpbnRfZXJyKCJGYWlsIHRvIGFsbG9jYXRlIGNvbG9ybWFwICglZCBlbnRyaWVzKSIsCi0JCQkgICBBVTEyMDBfTENEX05CUl9QQUxFVFRFX0VOVFJJRVMpOwotCQlrZnJlZShmYmktPnBzZXVkb19wYWxldHRlKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0Jc3RybmNweShmYmktPmZpeC5pZCwgIkFVMTIwMCIsIHNpemVvZihmYmktPmZpeC5pZCkpOwotCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBmYmRldi0+ZmJfcGh5czsKLQlmYmktPmZpeC5zbWVtX2xlbiA9IGZiZGV2LT5mYl9sZW47Ci0JZmJpLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQlmYmktPmZpeC54cGFuc3RlcCA9IDA7Ci0JZmJpLT5maXgueXBhbnN0ZXAgPSAwOwotCWZiaS0+Zml4Lm1taW9fc3RhcnQgPSAwOwotCWZiaS0+Zml4Lm1taW9fbGVuID0gMDsKLQlmYmktPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7Ci0KLQlmYmktPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKSBmYmRldi0+ZmJfbWVtOwotCi0JYXUxMjAwZmJfdXBkYXRlX2ZiaW5mbyhmYmkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEFVMTIwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCi0KLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKLQl1bnNpZ25lZCBsb25nIHBhZ2U7Ci0JaW50IGJwcCwgcGxhbmUsIHJldDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IENPTkZJR19GQl9BVTEyMDBfREVWUzsgKytwbGFuZSkgewotCQlicHAgPSB3aW5icHAod2luLT53W3BsYW5lXS5tb2RlX3dpbmN0cmwxKTsKLQkJaWYgKHdpbi0+d1twbGFuZV0ueHJlcyA9PSAwKQotCQkJd2luLT53W3BsYW5lXS54cmVzID0gcGFuZWwtPlhyZXM7Ci0JCWlmICh3aW4tPndbcGxhbmVdLnlyZXMgPT0gMCkKLQkJCXdpbi0+d1twbGFuZV0ueXJlcyA9IHBhbmVsLT5ZcmVzOwotCi0JCWZiZGV2ID0gJl9hdTEyMDBmYl9kZXZpY2VzW3BsYW5lXTsKLQkJbWVtc2V0KGZiZGV2LCAwLCBzaXplb2Yoc3RydWN0IGF1MTIwMGZiX2RldmljZSkpOwotCQlmYmRldi0+cGxhbmUgPSBwbGFuZTsKLQotCQkvKiBBbGxvY2F0ZSB0aGUgZnJhbWVidWZmZXIgdG8gdGhlIG1heGltdW0gc2NyZWVuIHNpemUgKi8KLQkJZmJkZXYtPmZiX2xlbiA9ICh3aW4tPndbcGxhbmVdLnhyZXMgKiB3aW4tPndbcGxhbmVdLnlyZXMgKiBicHApIC8gODsKLQotCQlmYmRldi0+ZmJfbWVtID0gZG1hX2FsbG9jX25vbmNvaGVyZW50KGRldiwKLQkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAotCQkJCSZmYmRldi0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZmJkZXYtPmZiX21lbSkgewotCQkJcHJpbnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIGZyYW1idWZmZXIgKHNpemU6ICVkSykpIiwKLQkJCQkgIGZiZGV2LT5mYl9sZW4gLyAxMDI0KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJLyoKLQkJICogU2V0IHBhZ2UgcmVzZXJ2ZWQgc28gdGhhdCBtbWFwIHdpbGwgd29yay4gVGhpcyBpcyBuZWNlc3NhcnkKLQkJICogc2luY2Ugd2UnbGwgYmUgcmVtYXBwaW5nIG5vcm1hbCBtZW1vcnkuCi0JCSAqLwotCQlmb3IgKHBhZ2UgPSAodW5zaWduZWQgbG9uZylmYmRldi0+ZmJfcGh5czsKLQkJICAgICBwYWdlIDwgUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylmYmRldi0+ZmJfcGh5cyArCi0JCQkgICAgIGZiZGV2LT5mYl9sZW4pOwotCQkgICAgIHBhZ2UgKz0gUEFHRV9TSVpFKSB7Ci0JCQlTZXRQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGFnZSA+PiBQQUdFX1NISUZUKSk7IC8qIExDRCBETUEgaXMgTk9UIGNvaGVyZW50IG9uIEF1MTIwMCAqLwotCQl9Ci0JCXByaW50X2RiZygiRnJhbWVidWZmZXIgbWVtb3J5IG1hcCBhdCAlcCIsIGZiZGV2LT5mYl9tZW0pOwotCQlwcmludF9kYmcoInBoeXM9MHglMDh4LCBzaXplPSVkSyIsIGZiZGV2LT5mYl9waHlzLCBmYmRldi0+ZmJfbGVuIC8gMTAyNCk7Ci0KLQkJLyogSW5pdCBGQiBkYXRhICovCi0JCWlmICgocmV0ID0gYXUxMjAwZmJfaW5pdF9mYmluZm8oZmJkZXYpKSA8IDApCi0JCQlnb3RvIGZhaWxlZDsKLQotCQkvKiBSZWdpc3RlciBuZXcgZnJhbWVidWZmZXIgKi8KLQkJaWYgKChyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJkZXYtPmZiX2luZm8pKSA8IDApIHsKLQkJCXByaW50X2VycigiY2Fubm90IHJlZ2lzdGVyIG5ldyBmcmFtZWJ1ZmZlciIpOwotCQkJZ290byBmYWlsZWQ7Ci0JCX0KLQotCQlhdTEyMDBmYl9mYl9zZXRfcGFyKCZmYmRldi0+ZmJfaW5mbyk7Ci0KLSNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKLQkJaWYgKHBsYW5lID09IDApCi0JCQlpZiAoZmJfcHJlcGFyZV9sb2dvKCZmYmRldi0+ZmJfaW5mbywgRkJfUk9UQVRFX1VSKSkgewotCQkJCS8qIFN0YXJ0IGRpc3BsYXkgYW5kIHNob3cgbG9nbyBvbiBib290ICovCi0JCQkJZmJfc2V0X2NtYXAoJmZiZGV2LT5mYl9pbmZvLmNtYXAsCi0JCQkJCQkmZmJkZXYtPmZiX2luZm8pOwotCi0JCQkJZmJfc2hvd19sb2dvKCZmYmRldi0+ZmJfaW5mbywgRkJfUk9UQVRFX1VSKTsKLQkJCX0KLSNlbmRpZgotCX0KLQotCS8qIE5vdyBob29rIGludGVycnVwdCB0b28gKi8KLQlpZiAoKHJldCA9IHJlcXVlc3RfaXJxKEFVMTIwMF9MQ0RfSU5ULCBhdTEyMDBmYl9oYW5kbGVfaXJxLAotCQkgCSAgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsICJsY2QiLCAodm9pZCAqKWRldikpIDwgMCkgewotCQlwcmludF9lcnIoImZhaWwgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgbGluZSAlZCAoZXJyOiAlZCkiLAotCQkJICBBVTEyMDBfTENEX0lOVCwgcmV0KTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZhaWxlZDoKLQkvKiBOT1RFOiBUaGlzIG9ubHkgZG9lcyB0aGUgY3VycmVudCBwbGFuZS93aW5kb3cgdGhhdCBmYWlsZWQ7IG90aGVycyBhcmUgc3RpbGwgYWN0aXZlICovCi0JaWYgKGZiZGV2LT5mYl9tZW0pCi0JCWRtYV9mcmVlX25vbmNvaGVyZW50KGRldiwgUEFHRV9BTElHTihmYmRldi0+ZmJfbGVuKSwKLQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7Ci0JaWYgKGZiZGV2LT5mYl9pbmZvLmNtYXAubGVuICE9IDApCi0JCWZiX2RlYWxsb2NfY21hcCgmZmJkZXYtPmZiX2luZm8uY21hcCk7Ci0JaWYgKGZiZGV2LT5mYl9pbmZvLnBzZXVkb19wYWxldHRlKQotCQlrZnJlZShmYmRldi0+ZmJfaW5mby5wc2V1ZG9fcGFsZXR0ZSk7Ci0JaWYgKHBsYW5lID09IDApCi0JCWZyZWVfaXJxKEFVMTIwMF9MQ0RfSU5ULCAodm9pZCopZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwotCWludCBwbGFuZTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFR1cm4gb2ZmIHRoZSBwYW5lbCAqLwotCWF1MTIwMF9zZXRwYW5lbChOVUxMKTsKLQotCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IENPTkZJR19GQl9BVTEyMDBfREVWUzsgKytwbGFuZSkKLQl7Ci0JCWZiZGV2ID0gJl9hdTEyMDBmYl9kZXZpY2VzW3BsYW5lXTsKLQotCQkvKiBDbGVhbiB1cCBhbGwgcHJvYmUgZGF0YSAqLwotCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7Ci0JCWlmIChmYmRldi0+ZmJfbWVtKQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoZGV2LCBQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAotCQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7Ci0JCWlmIChmYmRldi0+ZmJfaW5mby5jbWFwLmxlbiAhPSAwKQotCQkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+ZmJfaW5mby5jbWFwKTsKLQkJaWYgKGZiZGV2LT5mYl9pbmZvLnBzZXVkb19wYWxldHRlKQotCQkJa2ZyZWUoZmJkZXYtPmZiX2luZm8ucHNldWRvX3BhbGV0dGUpOwotCX0KLQotCWZyZWVfaXJxKEFVMTIwMF9MQ0RfSU5ULCAodm9pZCAqKWRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQotewotCS8qIFRPRE8gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQotewotCS8qIFRPRE8gKi8KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF1MTIwMGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXUxMjAwLWxjZCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCQk9IGF1MTIwMGZiX2Rydl9wcm9iZSwKLQkucmVtb3ZlCQk9IGF1MTIwMGZiX2Rydl9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBhdTEyMDBmYl9kcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGF1MTIwMGZiX2Rydl9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEtlcm5lbCBkcml2ZXIgKi8KLQotc3RhdGljIHZvaWQgYXUxMjAwZmJfc2V0dXAodm9pZCkKLXsKLQljaGFyKiBvcHRpb25zID0gTlVMTDsKLQljaGFyKiB0aGlzX29wdDsKLQlpbnQgbnVtX3BhbmVscyA9IEFSUkFZX1NJWkUoa25vd25fbGNkX3BhbmVscyk7Ci0JaW50IHBhbmVsX2lkeCA9IC0xOwotCi0JZmJfZ2V0X29wdGlvbnMoRFJJVkVSX05BTUUsICZvcHRpb25zKTsKLQotCWlmIChvcHRpb25zKSB7Ci0JCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsIiwiKSkgIT0gTlVMTCkgewotCQkJLyogUGFuZWwgb3B0aW9uIC0gY2FuIGJlIHBhbmVsIG5hbWUsCi0JCQkgKiAiYnMiIGZvciBib2FyZC1zd2l0Y2gsIG9yIG51bWJlci9pbmRleCAqLwotCQkJaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicGFuZWw6IiwgNikpIHsKLQkJCQlpbnQgaTsKLQkJCQlsb25nIGludCBsaTsKLQkJCQljaGFyICplbmRwdHI7Ci0JCQkJdGhpc19vcHQgKz0gNjsKLQkJCQkvKiBGaXJzdCBjaGVjayBmb3IgaW5kZXgsIHdoaWNoIGFsbG93cwotCQkJCSAqIHRvIHNob3J0IGNpcmN1aXQgdGhpcyBtZXNzICovCi0JCQkJbGkgPSBzaW1wbGVfc3RydG9sKHRoaXNfb3B0LCAmZW5kcHRyLCAwKTsKLQkJCQlpZiAoKmVuZHB0ciA9PSAnXDAnKSB7Ci0JCQkJCXBhbmVsX2lkeCA9IChpbnQpbGk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHN0cmNtcCh0aGlzX29wdCwgImJzIikgPT0gMCkgewotCQkJCQlleHRlcm4gaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsKHZvaWQpOwotCQkJCQlwYW5lbF9pZHggPSBib2FyZF9hdTEyMDBmYl9wYW5lbCgpOwotCQkJCX0KLQotCQkJCWVsc2UKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhbmVsczsgaSsrKSB7Ci0JCQkJCWlmICghc3RyY21wKHRoaXNfb3B0LCBrbm93bl9sY2RfcGFuZWxzW2ldLm5hbWUpKSB7Ci0JCQkJCQlwYW5lbF9pZHggPSBpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoKHBhbmVsX2lkeCA8IDApIHx8IChwYW5lbF9pZHggPj0gbnVtX3BhbmVscykpIHsKLQkJCQkJCXByaW50X3dhcm4oIlBhbmVsICVzIG5vdCBzdXBwb3J0ZWQhIiwgdGhpc19vcHQpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXBhbmVsX2luZGV4ID0gcGFuZWxfaWR4OwotCQkJfQotCi0JCQllbHNlIGlmIChzdHJuY21wKHRoaXNfb3B0LCAibm9od2N1cnNvciIsIDEwKSA9PSAwKSB7Ci0JCQkJbm9od2N1cnNvciA9IDE7Ci0JCQl9Ci0KLQkJCS8qIFVuc3VwcG9ydGVkIG9wdGlvbiAqLwotCQkJZWxzZSB7Ci0JCQkJcHJpbnRfd2FybigiVW5zdXBwb3J0ZWQgb3B0aW9uIFwiJXNcIiIsIHRoaXNfb3B0KTsKLQkJCX0KLQkJfQotCX0KLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9wbV9jYWxsYmFjayhhdTF4eHhfcG93ZXJfZGV2X3QgKmRldiwKLQkJYXUxeHh4X3JlcXVlc3RfdCByZXF1ZXN0LCB2b2lkICpkYXRhKSB7Ci0JaW50IHJldHZhbCA9IC0xOwotCXVuc2lnbmVkIGludCBkID0gMDsKLQl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcyA9IDA7Ci0KLQlpZiAocmVxdWVzdCA9PSBBVTFYWFhfUE1fU0xFRVApIHsKLQkJYm9hcmRfYXUxMjAwZmJfcGFuZWxfc2h1dGRvd24oKTsKLQl9Ci0JZWxzZSBpZiAocmVxdWVzdCA9PSBBVTFYWFhfUE1fV0FLRVVQKSB7Ci0JCWlmKGRldi0+cHJldl9zdGF0ZSA9PSBTTEVFUF9TVEFURSkKLQkJewotCQkJaW50IHBsYW5lOwotCQkJYXUxMjAwX3NldHBhbmVsKHBhbmVsKTsKLQkJCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IENPTkZJR19GQl9BVTEyMDBfREVWUzsgKytwbGFuZSkgCXsKLQkJCQlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKLQkJCQlmYmRldiA9ICZfYXUxMjAwZmJfZGV2aWNlc1twbGFuZV07Ci0JCQkJYXUxMjAwZmJfZmJfc2V0X3BhcigmZmJkZXYtPmZiX2luZm8pOwotCQkJfQotCQl9Ci0KLQkJZCA9ICooKHVuc2lnbmVkIGludCopZGF0YSk7Ci0JCWlmKGQgPD0xMCkgYnJpZ2h0bmVzcyA9IDI2OwotCQllbHNlIGlmKGQ8PTIwKSBicmlnaHRuZXNzID0gNTE7Ci0JCWVsc2UgaWYoZDw9MzApIGJyaWdodG5lc3MgPSA3NzsKLQkJZWxzZSBpZihkPD00MCkgYnJpZ2h0bmVzcyA9IDEwMjsKLQkJZWxzZSBpZihkPD01MCkgYnJpZ2h0bmVzcyA9IDEyODsKLQkJZWxzZSBpZihkPD02MCkgYnJpZ2h0bmVzcyA9IDE1MzsKLQkJZWxzZSBpZihkPD03MCkgYnJpZ2h0bmVzcyA9IDE3OTsKLQkJZWxzZSBpZihkPD04MCkgYnJpZ2h0bmVzcyA9IDIwNDsKLQkJZWxzZSBpZihkPD05MCkgYnJpZ2h0bmVzcyA9IDIzMDsKLQkJZWxzZSBicmlnaHRuZXNzID0gMjU1OwotCQlzZXRfYnJpZ2h0bmVzcyhicmlnaHRuZXNzKTsKLQl9IGVsc2UgaWYgKHJlcXVlc3QgPT0gQVUxWFhYX1BNX0dFVFNUQVRVUykgewotCQlyZXR1cm4gZGV2LT5jdXJfc3RhdGU7Ci0JfSBlbHNlIGlmIChyZXF1ZXN0ID09IEFVMVhYWF9QTV9BQ0NFU1MpIHsKLQkJaWYgKGRldi0+Y3VyX3N0YXRlICE9IFNMRUVQX1NUQVRFKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJZWxzZSB7Ci0JCQlhdTEyMDBfc2V0cGFuZWwocGFuZWwpOwotCQl9Ci0JfSBlbHNlIGlmIChyZXF1ZXN0ID09IEFVMVhYWF9QTV9JRExFKSB7Ci0JfSBlbHNlIGlmIChyZXF1ZXN0ID09IEFVMVhYWF9QTV9DTEVBTlVQKSB7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBhdTEyMDBmYl9pbml0KHZvaWQpCi17Ci0JcHJpbnRfaW5mbygiIiBEUklWRVJfREVTQyAiIik7Ci0KLQkvKiBTZXR1cCBkcml2ZXIgd2l0aCBvcHRpb25zICovCi0JYXUxMjAwZmJfc2V0dXAoKTsKLQotCS8qIFBvaW50IHRvIHRoZSBwYW5lbCBzZWxlY3RlZCAqLwotCXBhbmVsID0gJmtub3duX2xjZF9wYW5lbHNbcGFuZWxfaW5kZXhdOwotCXdpbiA9ICZ3aW5kb3dzW3dpbmRvd19pbmRleF07Ci0KLQlwcmludGsoRFJJVkVSX05BTUUgIjogUGFuZWwgJWQgJXNcbiIsIHBhbmVsX2luZGV4LCBwYW5lbC0+bmFtZSk7Ci0JcHJpbnRrKERSSVZFUl9OQU1FICI6IFdpbiAlZCAlc1xuIiwgd2luZG93X2luZGV4LCB3aW4tPm5hbWUpOwotCi0JLyogS2lja3N0YXJ0IHRoZSBwYW5lbCwgdGhlIGZyYW1lYnVmZmVycy93aW5kb3dzIGNvbWUgc29vbiBlbm91Z2ggKi8KLQlhdTEyMDBfc2V0cGFuZWwocGFuZWwpOwotCi0JI2lmZGVmIENPTkZJR19QTQotCUxDRF9wbV9kZXYgPSBuZXdfYXUxeHh4X3Bvd2VyX2RldmljZSgiTENEIiwgJmF1MTIwMGZiX3BtX2NhbGxiYWNrLCBOVUxMKTsKLQlpZiAoIExDRF9wbV9kZXYgPT0gTlVMTCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIGNyZWF0ZSBhIHBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIuXG4iKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIgbG9hZGVkLlxuIik7Ci0JI2VuZGlmCi0KLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXUxMjAwZmJfY2xlYW51cCh2b2lkKQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChhdTEyMDBmYl9pbml0KTsKLW1vZHVsZV9leGl0KGF1MTIwMGZiX2NsZWFudXApOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwppbmRleCAzMzRiMWRiLi4yNzU5N2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwpAQCAtMjksMTIgKzI5LDE1IEBACiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zdG9yZV9wb3dlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlpbnQgcmMgPSAtRU5YSU8sIHBvd2VyOworCWludCByYyA9IC1FTlhJTzsKIAljaGFyICplbmRwOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IHRvX2JhY2tsaWdodF9kZXZpY2UoY2Rldik7CisJaW50IHBvd2VyID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJc2l6ZV90IHNpemUgPSBlbmRwIC0gYnVmOwogCi0JcG93ZXIgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKLQlpZiAoKmVuZHAgJiYgIWlzc3BhY2UoKmVuZHApKQorCWlmICgqZW5kcCAmJiBpc3NwYWNlKCplbmRwKSkKKwkJc2l6ZSsrOworCWlmIChzaXplICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRvd24oJmJkLT5zZW0pOwpAQCAtNjUsMTIgKzY4LDE1IEBACiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zdG9yZV9icmlnaHRuZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCByYyA9IC1FTlhJTywgYnJpZ2h0bmVzczsKKwlpbnQgcmMgPSAtRU5YSU87CiAJY2hhciAqZW5kcDsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGNkZXYpOworCWludCBicmlnaHRuZXNzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJc2l6ZV90IHNpemUgPSBlbmRwIC0gYnVmOwogCi0JYnJpZ2h0bmVzcyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwotCWlmICgqZW5kcCAmJiAhaXNzcGFjZSgqZW5kcCkpCisJaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCQlzaXplKys7CisJaWYgKHNpemUgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmYmQtPnNlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCmluZGV4IDg2OTA4YTYuLmJjOGFiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCkBAIC0zMSwxMiArMzEsMTUgQEAKIAogc3RhdGljIHNzaXplX3QgbGNkX3N0b3JlX3Bvd2VyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCByYywgcG93ZXI7CisJaW50IHJjID0gLUVOWElPOwogCWNoYXIgKmVuZHA7CiAJc3RydWN0IGxjZF9kZXZpY2UgKmxkID0gdG9fbGNkX2RldmljZShjZGV2KTsKKwlpbnQgcG93ZXIgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKKwlzaXplX3Qgc2l6ZSA9IGVuZHAgLSBidWY7CiAKLQlwb3dlciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwotCWlmICgqZW5kcCAmJiAhaXNzcGFjZSgqZW5kcCkpCisJaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCQlzaXplKys7CisJaWYgKHNpemUgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bigmbGQtPnNlbSk7CkBAIC00NCw4ICs0Nyw3IEBACiAJCXByX2RlYnVnKCJsY2Q6IHNldCBwb3dlciB0byAlZFxuIiwgcG93ZXIpOwogCQlsZC0+cHJvcHMtPnNldF9wb3dlcihsZCwgcG93ZXIpOwogCQlyYyA9IGNvdW50OwotCX0gZWxzZQotCQlyYyA9IC1FTlhJTzsKKwl9CiAJdXAoJmxkLT5zZW0pOwogCiAJcmV0dXJuIHJjOwpAQCAtNTMsMTQgKzU1LDEyIEBACiAKIHN0YXRpYyBzc2l6ZV90IGxjZF9zaG93X2NvbnRyYXN0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IHRvX2xjZF9kZXZpY2UoY2Rldik7CiAKIAlkb3duKCZsZC0+c2VtKTsKIAlpZiAobGlrZWx5KGxkLT5wcm9wcyAmJiBsZC0+cHJvcHMtPmdldF9jb250cmFzdCkpCiAJCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLT5nZXRfY29udHJhc3QobGQpKTsKLQllbHNlCi0JCXJjID0gLUVOWElPOwogCXVwKCZsZC0+c2VtKTsKIAogCXJldHVybiByYzsKQEAgLTY4LDEyICs2OCwxNSBAQAogCiBzdGF0aWMgc3NpemVfdCBsY2Rfc3RvcmVfY29udHJhc3Qoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaW50IHJjLCBjb250cmFzdDsKKwlpbnQgcmMgPSAtRU5YSU87CiAJY2hhciAqZW5kcDsKIAlzdHJ1Y3QgbGNkX2RldmljZSAqbGQgPSB0b19sY2RfZGV2aWNlKGNkZXYpOworCWludCBjb250cmFzdCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOworCXNpemVfdCBzaXplID0gZW5kcCAtIGJ1ZjsKIAotCWNvbnRyYXN0ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7Ci0JaWYgKCplbmRwICYmICFpc3NwYWNlKCplbmRwKSkKKwlpZiAoKmVuZHAgJiYgaXNzcGFjZSgqZW5kcCkpCisJCXNpemUrKzsKKwlpZiAoc2l6ZSAhPSBjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkb3duKCZsZC0+c2VtKTsKQEAgLTgxLDggKzg0LDcgQEAKIAkJcHJfZGVidWcoImxjZDogc2V0IGNvbnRyYXN0IHRvICVkXG4iLCBjb250cmFzdCk7CiAJCWxkLT5wcm9wcy0+c2V0X2NvbnRyYXN0KGxkLCBjb250cmFzdCk7CiAJCXJjID0gY291bnQ7Ci0JfSBlbHNlCi0JCXJjID0gLUVOWElPOworCX0KIAl1cCgmbGQtPnNlbSk7CiAKIAlyZXR1cm4gcmM7CkBAIC05MCwxNCArOTIsMTIgQEAKIAogc3RhdGljIHNzaXplX3QgbGNkX3Nob3dfbWF4X2NvbnRyYXN0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IHRvX2xjZF9kZXZpY2UoY2Rldik7CiAKIAlkb3duKCZsZC0+c2VtKTsKIAlpZiAobGlrZWx5KGxkLT5wcm9wcykpCiAJCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLT5tYXhfY29udHJhc3QpOwotCWVsc2UKLQkJcmMgPSAtRU5YSU87CiAJdXAoJmxkLT5zZW0pOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCBjYTAyMDcxOS4uNDdiYTFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTE3NDUsNyArMTc0NSw3IEBACiAJCQkJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCAwLCB0LCBjb3VudCk7CiAJCQkJeXBhbl91cF9yZWRyYXcodmMsIHQsIGNvdW50KTsKIAkJCQlpZiAodmMtPnZjX3Jvd3MgLSBiID4gMCkKLQkJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIGIgLSBjb3VudCwKKwkJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIGIsCiAJCQkJCQkJICB2Yy0+dmNfcm93cyAtIGIsIGIpOwogCQkJfSBlbHNlCiAJCQkJZmJjb25fcmVkcmF3X21vdmUodmMsIHAsIHQgKyBjb3VudCwgYiAtIHQgLSBjb3VudCwgdCk7CkBAIC0yNjMxLDcgKzI2MzEsNyBAQAogCQkJCQlzY3JfbWVtY3B5dygodTE2ICopIHEsICh1MTYgKikgcCwKIAkJCQkJCSAgICB2Yy0+dmNfc2l6ZV9yb3cpOwogCQkJCX0KLQkJCQlzb2Z0YmFja19pbiA9IHA7CisJCQkJc29mdGJhY2tfaW4gPSBzb2Z0YmFja19jdXJyID0gcDsKIAkJCQl1cGRhdGVfcmVnaW9uKHZjLCB2Yy0+dmNfb3JpZ2luLAogCQkJCQkgICAgICBsb2dvX2xpbmVzICogdmMtPnZjX2NvbHMpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IDk0NDg1NWIuLjM3MmFhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTQzNSw2ICs0MzUsMTEgQEAKIAkJCWRlcHRoID0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aDsKIAl9CiAKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SKSB7CisJCS8qIGFzc3VtZSBjb25zb2xlIGNvbG9ybWFwICovCisJCWRlcHRoID0gNDsKKwl9CisKIAlpZiAoZGVwdGggPj0gOCkgewogCQlzd2l0Y2ggKGluZm8tPmZpeC52aXN1YWwpIHsKIAkJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgpAQCAtNjY5LDEzICs2NzQsMTkgQEAKIAkJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKIAogCWlmIChwID4gdG90YWxfc2l6ZSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUZCSUc7CiAKLQlpZiAoY291bnQgPj0gdG90YWxfc2l6ZSkKKwlpZiAoY291bnQgPiB0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FRkJJRzsKIAkJY291bnQgPSB0b3RhbF9zaXplOworCX0KIAotCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKQorCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKSB7CisJCWlmICghZXJyKQorCQkJZXJyID0gLUVOT1NQQzsKKwogCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOworCX0KIAogCWJ1ZmZlciA9IGttYWxsb2MoKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50LAogCQkJIEdGUF9LRVJORUwpOwpAQCAtNzE3LDcgKzcyOCw3IEBACiAKIAlrZnJlZShidWZmZXIpOwogCi0JcmV0dXJuIChlcnIpID8gZXJyIDogY250OworCXJldHVybiAoY250KSA/IGNudCA6IGVycjsKIH0KIAogI2lmZGVmIENPTkZJR19LTU9ECmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCmluZGV4IGI3MmIwNTIuLjM0ZTA3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCkBAIC0zMDUsOTQgKzMwNSw2IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGZiX2luZm8tPmZpeC5saW5lX2xlbmd0aCk7CiB9CiAKLS8qIEZvcm1hdCBmb3IgY21hcCBpcyAiJTAyeCVjJTR4JTR4JTR4XG4iICovCi0vKiAlMDJ4IGVudHJ5ICVjIHRyYW5zcCAlNHggcmVkICU0eCBibHVlICU0eCBncmVlbiBcbiAqLwotLyogMjU2IHJvd3MgYXQgMTYgY2hhcnMgZXF1YWxzIDQwOTYsIHRoZSBub3JtYWwgcGFnZSBzaXplICovCi0vKiB0aGUgY29kZSB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IGZvciBkaWZmZXJlbnQgcGFnZSBzaXplcyAqLwotc3RhdGljIHNzaXplX3Qgc3RvcmVfY21hcChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXZpY2UsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2aWNlKTsKLQlpbnQgcmMsIGksIHN0YXJ0LCBsZW5ndGgsIHRyYW5zcCA9IDA7Ci0KLQlpZiAoKGNvdW50ID4gUEFHRV9TSVpFKSB8fCAoKGNvdW50ICUgMTYpICE9IDApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghZmJfaW5mby0+ZmJvcHMtPmZiX3NldGNvbHJlZyAmJiAhZmJfaW5mby0+ZmJvcHMtPmZiX3NldGNtYXApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3NjYW5mKGJ1ZiwgIiUwMngiLCAmc3RhcnQpOwotCWxlbmd0aCA9IGNvdW50IC8gMTY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCWlmIChidWZbaSAqIDE2ICsgMl0gIT0gJyAnKQotCQkJdHJhbnNwID0gMTsKLQotCS8qIElmIHdlIGNhbiBiYXRjaCwgZG8gaXQgKi8KLQlpZiAoZmJfaW5mby0+ZmJvcHMtPmZiX3NldGNtYXAgJiYgbGVuZ3RoID4gMSkgewotCQlzdHJ1Y3QgZmJfY21hcCB1bWFwOwotCi0JCW1lbXNldCgmdW1hcCwgMCwgc2l6ZW9mKHVtYXApKTsKLQkJaWYgKChyYyA9IGZiX2FsbG9jX2NtYXAoJnVtYXAsIGxlbmd0aCwgdHJhbnNwKSkpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJdW1hcC5zdGFydCA9IHN0YXJ0OwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCXNzY2FuZigmYnVmW2kgKiAxNiArICAzXSwgIiU0aHgiLCAmdW1hcC5yZWRbaV0pOwotCQkJc3NjYW5mKCZidWZbaSAqIDE2ICsgIDddLCAiJTRoeCIsICZ1bWFwLmJsdWVbaV0pOwotCQkJc3NjYW5mKCZidWZbaSAqIDE2ICsgMTFdLCAiJTRoeCIsICZ1bWFwLmdyZWVuW2ldKTsKLQkJCWlmICh0cmFuc3ApCi0JCQkJdW1hcC50cmFuc3BbaV0gPSAoYnVmW2kgKiAxNiArICAyXSAhPSAnICcpOwotCQl9Ci0JCXJjID0gZmJfaW5mby0+ZmJvcHMtPmZiX3NldGNtYXAoJnVtYXAsIGZiX2luZm8pOwotCQlmYl9jb3B5X2NtYXAoJnVtYXAsICZmYl9pbmZvLT5jbWFwKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZ1bWFwKTsKLQotCQlyZXR1cm4gcmMgPzogY291bnQ7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQl1MTYgcmVkLCBibHVlLCBncmVlbiwgdHNwOwotCi0JCXNzY2FuZigmYnVmW2kgKiAxNiArICAzXSwgIiU0aHgiLCAmcmVkKTsKLQkJc3NjYW5mKCZidWZbaSAqIDE2ICsgIDddLCAiJTRoeCIsICZibHVlKTsKLQkJc3NjYW5mKCZidWZbaSAqIDE2ICsgMTFdLCAiJTRoeCIsICZncmVlbik7Ci0JCXRzcCA9IChidWZbaSAqIDE2ICsgIDJdICE9ICcgJyk7Ci0JCWlmICgocmMgPSBmYl9pbmZvLT5mYm9wcy0+ZmJfc2V0Y29scmVnKHN0YXJ0KyssCi0JCQkJICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgdHNwLCBmYl9pbmZvKSkpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJZmJfaW5mby0+Y21hcC5yZWRbaV0gPSByZWQ7Ci0JCWZiX2luZm8tPmNtYXAuYmx1ZVtpXSA9IGJsdWU7Ci0JCWZiX2luZm8tPmNtYXAuZ3JlZW5baV0gPSBncmVlbjsKLQkJaWYgKHRyYW5zcCkKLQkJCWZiX2luZm8tPmNtYXAudHJhbnNwW2ldID0gdHNwOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfY21hcChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXZpY2UsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2RldmljZSk7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAoIWZiX2luZm8tPmNtYXAucmVkIHx8ICFmYl9pbmZvLT5jbWFwLmJsdWUgfHwKLQkgICAhZmJfaW5mby0+Y21hcC5ncmVlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZmJfaW5mby0+Y21hcC5sZW4gPiBQQUdFX1NJWkUgLyAxNikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBkb24ndCBtZXNzIHdpdGggdGhlIGZvcm1hdCwgdGhlIGJ1ZmZlciBpcyBQQUdFX1NJWkUgKi8KLQkvKiAyNTYgZW50cmllcyBhdCAxNiBjaGFycyBwZXIgbGluZSBlcXVhbHMgNDA5NiA9IFBBR0VfU0laRSAqLwotCWZvciAoaSA9IDA7IGkgPCBmYl9pbmZvLT5jbWFwLmxlbjsgaSsrKSB7Ci0JCXNucHJpbnRmKCZidWZbIGkgKiAxNl0sIFBBR0VfU0laRSAtIGkgKiAxNiwgIiUwMnglYyU0eCU0eCU0eFxuIiwgaSArIGZiX2luZm8tPmNtYXAuc3RhcnQsCi0JCQkoKGZiX2luZm8tPmNtYXAudHJhbnNwICYmIGZiX2luZm8tPmNtYXAudHJhbnNwW2ldKSA/ICcqJyA6ICcgJyksCi0JCQlmYl9pbmZvLT5jbWFwLnJlZFtpXSwgZmJfaW5mby0+Y21hcC5ibHVlW2ldLAotCQkJZmJfaW5mby0+Y21hcC5ncmVlbltpXSk7Ci0JfQotCXJldHVybiAxNiAqIGZiX2luZm8tPmNtYXAubGVuOwotfQotCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9ibGFuayhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXZpY2UsIGNvbnN0IGNoYXIgKiBidWYsCiAJCQkgICBzaXplX3QgY291bnQpCiB7CkBAIC01MDIsMTAgKzQxNCwxMiBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmYl9pbmZvLT5zdGF0ZSk7CiB9CiAKKy8qIFdoZW4gY21hcCBpcyBhZGRlZCBiYWNrIGluIGl0IHNob3VsZCBiZSBhIGJpbmFyeSBhdHRyaWJ1dGUKKyAqIG5vdCBhIHRleHQgb25lLiBDb25zaWRlcmF0aW9uIHNob3VsZCBhbHNvIGJlIGdpdmVuIHRvIGNvbnZlcnRpbmcKKyAqIGZiZGV2IHRvIHVzZSBjb25maWdmcyBpbnN0ZWFkIG9mIHN5c2ZzICovCiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgY2xhc3NfZGV2aWNlX2F0dHJzW10gPSB7CiAJX19BVFRSKGJpdHNfcGVyX3BpeGVsLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfYnBwLCBzdG9yZV9icHApLAogCV9fQVRUUihibGFuaywgU19JUlVHT3xTX0lXVVNSLCBzaG93X2JsYW5rLCBzdG9yZV9ibGFuayksCi0JX19BVFRSKGNvbG9yX21hcCwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2NtYXAsIHN0b3JlX2NtYXApLAogCV9fQVRUUihjb25zb2xlLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfY29uc29sZSwgc3RvcmVfY29uc29sZSksCiAJX19BVFRSKGN1cnNvciwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2N1cnNvciwgc3RvcmVfY3Vyc29yKSwKIAlfX0FUVFIobW9kZSwgU19JUlVHT3xTX0lXVVNSLCBzaG93X21vZGUsIHN0b3JlX21vZGUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCmluZGV4IDc4ODI5N2UuLjQ0YWEyZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKQEAgLTc2LDggKzc2LDggQEAKICAqCiAgKiBFeHBlcmltZW50IHdpdGggdl9vZmZzZXQgdG8gZmluZCBvdXQgd2hpY2ggd29ya3MgYmVzdCBmb3IgeW91LgogICovCi1zdGF0aWMgdTMyIHZfb2Zmc2V0X2RlZmF1bHQgX19pbml0ZGF0YTsgLyogRm9yIDMyIE1pQiBBcGVyIHNpemUsIDggc2hvdWxkIGJlIHRoZSBkZWZhdWx0ICovCi1zdGF0aWMgdTMyIHZvZmZzZXQgICAgICAgICAgX19pbml0ZGF0YSA9IDA7CitzdGF0aWMgdTMyIHZfb2Zmc2V0X2RlZmF1bHQgX19kZXZpbml0ZGF0YTsgLyogRm9yIDMyIE1pQiBBcGVyIHNpemUsIDggc2hvdWxkIGJlIHRoZSBkZWZhdWx0ICovCitzdGF0aWMgdTMyIHZvZmZzZXQgICAgICAgICAgX19kZXZpbml0ZGF0YTsKIAogc3RhdGljIGludCBpODEwZmJfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpOwogc3RhdGljIGludCAgX19kZXZpbml0IGk4MTBmYl9pbml0X3BjaSAoc3RydWN0IHBjaV9kZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vbG9nby9NYWtlZmlsZQppbmRleCA0ZWY1Y2QxLi5iOTg1ZGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9sb2dvL01ha2VmaWxlCkBAIC0zNCw3ICszNCw3IEBACiBleHRyYS15ICs9ICQoY2FsbCBsb2dvLWNmaWxlcyxfZ3JheTI1NixwZ20pCiAKICMgQ3JlYXRlIGNvbW1hbmRzIGxpa2UgInBubXRvbG9nbyAtdCBtb25vIC1uIGxvZ29fbWFjX21vbm8gLW8gLi4uIgotcXVpZXRfY21kX2xvZ28gPSBMT0dPCSRACitxdWlldF9jbWRfbG9nbyA9IExPR08gICAgJEAKIAljbWRfbG9nbyA9IHNjcmlwdHMvcG5tdG9sb2dvIFwKIAkJCS10ICQocGF0c3Vic3QgJCpfJSwlLCQobm90ZGlyICQoYmFzZW5hbWUgJDwpKSkgXAogCQkJLW4gJChub3RkaXIgJChiYXNlbmFtZSAkPCkpIC1vICRAICQ8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYwppbmRleCA4MDczYTczLi40NDAyNzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmMKQEAgLTMxNiwxNCArMzE2LDI0IEBACiAJCWNhc2UgTV9QSVhFTF9QTExfQjoKIAkJY2FzZSBNX1BJWEVMX1BMTF9DOgogCQkJewotCQkJCXVfaW50OF90IHRtcDsKKwkJCQl1X2ludDhfdCB0bXAsIHhwd3JjdHJsOwogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCQkJCiAJCQkJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7CisKKwkJCQl4cHdyY3RybCA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBXUkNUUkwpOworCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCB4cHdyY3RybCAmIH5NMTA2NF9YUFdSQ1RSTF9QQU5FTFBETik7CisJCQkJbWdhX291dGIoTV9TRVFfSU5ERVgsIE1fU0VRMSk7CisJCQkJbWdhX291dGIoTV9TRVFfREFUQSwgbWdhX2luYihNX1NFUV9EQVRBKSB8IE1fU0VRMV9TQ1JPRkYpOwogCQkJCXRtcCA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwpOworCQkJCXRtcCB8PSBNMTA2NF9YUElYQ0xLQ1RSTF9ESVM7CiAJCQkJaWYgKCEodG1wICYgTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQKSkgewotCQkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCwgdG1wIHwgTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQKTsKKwkJCQkJdG1wIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUDsKIAkJCQl9CisJCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIHRtcCk7CisJCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWERWSUNMS0NUUkwsIDApOworCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCB4cHdyY3RybCk7CisKIAkJCQltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCQkJfQogCQkJewpAQCAtNDE4LDYgKzQyOCwxNSBAQAogCQkJCSAgIGZyZXF1ZW5jeSB0byBoaWdoZXIgLSB3aXRoIDw9IGxvd2VzdCB3aW5zLCB3aGlsZQogCQkJCSAgIHdpdGggPCBoaWdoZXN0IG9uZSB3aW5zICovCiAJCQkJaWYgKGRlbHRhIDw9IGRlbHRhYXJyYXlbaWR4LTFdKSB7CisJCQkJCS8qIGFsbCBlbHNlIGJlaW5nIGVxdWFsIGV4Y2VwdCBWQ08sCisJCQkJCSAqIGNob29zZSBWQ08gbm90IG5lYXIgKHdpdGhpbiAxLzE2dGggb3Igc28pIFZDT21pbgorCQkJCQkgKiAoZnJlcXMgbmVhciBWQ09taW4gYXJlbid0IGFzIHN0YWJsZSkKKwkJCQkJICovCisJCQkJCWlmIChkZWx0YSA9PSBkZWx0YWFycmF5W2lkeC0xXQorCQkJCQkgICAgJiYgdmNvICE9IGc0NTBfbW5wMnZjbyhQTUlORk8gbW5wYXJyYXlbaWR4LTFdKQorCQkJCQkgICAgJiYgdmNvIDwgKHBpLT52Y29taW4gKiAxNyAvIDE2KSkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQkJbW5wYXJyYXlbaWR4XSA9IG1ucGFycmF5W2lkeC0xXTsKIAkJCQkJZGVsdGFhcnJheVtpZHhdID0gZGVsdGFhcnJheVtpZHgtMV07CiAJCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaAppbmRleCAyZTcyMzhhLi41NjUxM2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIE0xMDY0X1hDVVJDT0wxUkVECTB4MEMKICNkZWZpbmUgTTEwNjRfWENVUkNPTDFHUkVFTgkweDBECiAjZGVmaW5lIE0xMDY0X1hDVVJDT0wxQkxVRQkweDBFCisjZGVmaW5lIE0xMDY0X1hEVklDTEtDVFJMCTB4MEYKICNkZWZpbmUgTTEwNjRfWENVUkNPTDJSRUQJMHgxMAogI2RlZmluZSBNMTA2NF9YQ1VSQ09MMkdSRUVOCTB4MTEKICNkZWZpbmUgTTEwNjRfWENVUkNPTDJCTFVFCTB4MTIKQEAgLTE0NCw2ICsxNDUsNyBAQAogI2RlZmluZSBNMTA2NF9YVklEUExMTgkJMHg4RgogCiAjZGVmaW5lIE0xMDY0X1hQV1JDVFJMCQkweEEwCisjZGVmaW5lICAgICBNMTA2NF9YUFdSQ1RSTF9QQU5FTFBETgkweDA0CiAKICNkZWZpbmUgTTEwNjRfWFBBTk1PREUJCTB4QTIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCmluZGV4IDNhM2UxODAuLmI3MTczNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKQEAgLTY3Miw2ICs2NzIsOCBAQAogCiAjZGVmaW5lIE1fU0VRX0lOREVYCTB4MUZDNAogI2RlZmluZSBNX1NFUV9EQVRBCTB4MUZDNQorI2RlZmluZSAgICAgTV9TRVExCQkweDAxCisjZGVmaW5lICAgICAgICBNX1NFUTFfU0NST0ZGCQkweDIwCiAKICNkZWZpbmUgTV9NSVNDX1JFR19SRUFECTB4MUZDQwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21heGluZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL21heGluZWZiLmMKaW5kZXggNzQzZTdhZC4uZjg1NDIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXhpbmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF4aW5lZmIuYwpAQCAtNTUsNyArNTUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBtYXhpbmVmYl9maXggPSB7Ci0JLmlkID0JCSJNYXhpbmUgb25ib2FyZCBncmFwaGljcyAxMDI0eDc2OHg4IiwKKwkuaWQgPQkJIk1heGluZSIsCiAJLnNtZW1fbGVuID0JKDEwMjQqNzY4KSwKIAkudHlwZSA9CQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCiAJLnZpc3VhbCA9CUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwKQEAgLTEwNyw4ICsxMDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IGZiX29wcyBtYXhpbmVmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5mYl9nZXRfZml4CT0gZ2VuX2dldF9maXgsCi0JLmZiX2dldF92YXIJPSBnZW5fZ2V0X3ZhciwKIAkuZmJfc2V0Y29scmVnCT0gbWF4aW5lZmJfc2V0Y29scmVnLAogCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMKaW5kZXggNWZlMTk3OS4uNGU5NjM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbTJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG0yZmIuYwpAQCAtNzMsOCArNzMsOCBAQAogICogdGhlc2UgZmxhZ3MgYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGF0IHJlcXVlc3RzIGZvciArdmUgc3luYwogICogc2hvdWxkIGJlIHNpbGVudGx5IHR1cm5lZCBpbiAtdmUgc3luYy4KICAqLwotc3RhdGljIGludCBsb3doc3luYyBfX2RldmluaXRkYXRhID0gMDsKLXN0YXRpYyBpbnQgbG93dnN5bmMgX19kZXZpbml0ZGF0YSA9IDA7CitzdGF0aWMgaW50IGxvd2hzeW5jOworc3RhdGljIGludCBsb3d2c3luYzsKIAogLyoKICAqIFRoZSBoYXJkd2FyZSBzdGF0ZSBvZiB0aGUgZ3JhcGhpY3MgY2FyZCB0aGF0IGlzbid0IHBhcnQgb2YgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDEwZTZiM2EuLjBkYTYyNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC03Myw3ICs3Myw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCi1zdGF0aWMgY2hhciAqbW9kZV9vcHRpb24gX19pbml0ZGF0YSA9IE5VTEw7CitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb24gX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKICNpZmRlZiBNT0RVTEUKIApAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNhdmFnZV91bm1hcF9tbWlvIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIHNhdmFnZV91bm1hcF9tbWlvIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJREJHICgic2F2YWdlX3VubWFwX21taW8iKTsKQEAgLTE1OTcsNyArMTU5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzYXZhZ2VfdW5tYXBfdmlkZW8gKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgc2F2YWdlX3VubWFwX3ZpZGVvIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKQEAgLTE2MTQsNyArMTYxNCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzYXZhZ2VfaW5pdF9odyAoc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyKQorc3RhdGljIGludCBzYXZhZ2VfaW5pdF9odyAoc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyKQogewogCXVuc2lnbmVkIGNoYXIgY29uZmlnMSwgbSwgbiwgbjEsIG4yLCBzcjgsIGNyM2YsIGNyNjYgPSAwLCB0bXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCmluZGV4IDg5ODJlNTQuLmIwYjlhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIHZvaWQgICAgICAgICAgICAoKnBtaV9zdGFydCkodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICgqcG1pX3BhbCkodm9pZCk7CiBzdGF0aWMgaW50ICAgICAgICAgICAgIGRlcHRoOwotCitzdGF0aWMgaW50ICAgICAgICAgICAgIHZnYV9jb21wYXQ7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB2ZXNhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC04Myw5ICs4MywxMCBAQAogc3RhdGljIHZvaWQgdmVzYV9zZXRwYWxldHRlKGludCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgICB1bnNpZ25lZCBibHVlKQogeworCWludCBzaGlmdCA9IDE2IC0gZGVwdGg7CisKICNpZmRlZiBfX2kzODZfXwogCXN0cnVjdCB7IHVfY2hhciBibHVlLCBncmVlbiwgcmVkLCBwYWQ7IH0gZW50cnk7Ci0JaW50IHNoaWZ0ID0gMTYgLSBkZXB0aDsKIAogCWlmIChwbWlfc2V0cGFsKSB7CiAJCWVudHJ5LnJlZCAgID0gcmVkICAgPj4gc2hpZnQ7CkBAIC0xMDEsMTQgKzEwMiwyMCBAQAogICAgICAgICAgICAgICAgICAgImQiIChyZWdubyksICAgICAgICAgIC8qIEVEWCAqLwogICAgICAgICAgICAgICAgICAgIkQiICgmZW50cnkpLCAgICAgICAgIC8qIEVESSAqLwogICAgICAgICAgICAgICAgICAgIlMiICgmcG1pX3BhbCkpOyAgICAgIC8qIEVTSSAqLwotCX0gZWxzZSB7Ci0JCS8qIHdpdGhvdXQgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNlLCB0cnkgVkdBIHJlZ2lzdGVycy4uLiAqLworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKy8qCisgKiB3aXRob3V0IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBhbmQgaWYgVkdBIGNvbXBhdGlibGUsCisgKiB0cnkgVkdBIHJlZ2lzdGVycy4uLgorICovCisJaWYgKHZnYV9jb21wYXQpIHsKIAkJb3V0Yl9wKHJlZ25vLCAgICAgICBkYWNfcmVnKTsKIAkJb3V0Yl9wKHJlZCAgID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAkJb3V0Yl9wKGdyZWVuID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAkJb3V0Yl9wKGJsdWUgID4+IHNoaWZ0LCBkYWNfdmFsKTsKIAl9Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCB2ZXNhZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLApAQCAtMjE0LDYgKzIyMSw3IEBACiAJaWYgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgIT0gVklERU9fVFlQRV9WTEZCKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXZnYV9jb21wYXQgPSAoc2NyZWVuX2luZm8uY2FwYWJpbGl0aWVzICYgMikgPyAwIDogMTsKIAl2ZXNhZmJfZml4LnNtZW1fc3RhcnQgPSBzY3JlZW5faW5mby5sZmJfYmFzZTsKIAl2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA9IHNjcmVlbl9pbmZvLmxmYl9kZXB0aDsKIAlpZiAoMTUgPT0gdmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpCkBAIC0zMTgsNiArMzI2LDEyIEBACiAJCX0KIAl9CiAKKwlpZiAodmVzYWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPT0gOCAmJiAhcG1pX3NldHBhbCAmJiAhdmdhX2NvbXBhdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2ZXNhZmI6IGhhcmR3YXJlIHBhbGV0dGUgaXMgdW5jaGFuZ2VhYmxlLFxuIgorCQkgICAgICAgICAgICAgICAgICAgICIgICAgICAgIGNvbG9ycyBtYXkgYmUgaW5jb3JyZWN0XG4iKTsKKwkJdmVzYWZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOworCX0KKwogCXZlc2FmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IHZlc2FmYl9kZWZpbmVkLnhyZXM7CiAJdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gdmVzYWZiX2ZpeC5zbWVtX2xlbiAvIHZlc2FmYl9maXgubGluZV9sZW5ndGg7CiAJaWYgKHlwYW4gJiYgdmVzYWZiX2RlZmluZWQueXJlc192aXJ0dWFsID4gdmVzYWZiX2RlZmluZWQueXJlcykgewpAQCAtMzU0LDcgKzM2OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidmVzYWZiOiAlczogIgogCSAgICAgICAic2l6ZT0lZDolZDolZDolZCwgc2hpZnQ9JWQ6JWQ6JWQ6JWRcbiIsCiAJICAgICAgICh2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA+IDgpID8KLQkgICAgICAgIlRydWVjb2xvciIgOiAiUHNldWRvY29sb3IiLAorCSAgICAgICAiVHJ1ZWNvbG9yIiA6ICh2Z2FfY29tcGF0IHx8IHBtaV9zZXRwYWwpID8KKwkgICAgICAgIlBzZXVkb2NvbG9yIiA6ICJTdGF0aWMgUHNldWRvY29sb3IiLAogCSAgICAgICBzY3JlZW5faW5mby5yc3ZkX3NpemUsCiAJICAgICAgIHNjcmVlbl9pbmZvLnJlZF9zaXplLAogCSAgICAgICBzY3JlZW5faW5mby5ncmVlbl9zaXplLApkaWZmIC0tZ2l0IGEvZnMvOXAvZmNhbGwuYyBiL2ZzLzlwL2ZjYWxsLmMKaW5kZXggNzE3NDJiYTEuLjZmMjYxNzggMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZjYWxsLmMKKysrIGIvZnMvOXAvZmNhbGwuYwpAQCAtOTgsMjMgKzk4LDIwIEBACiBzdGF0aWMgdm9pZCB2OWZzX3RfY2x1bmtfY2Iodm9pZCAqYSwgc3RydWN0IHY5ZnNfZmNhbGwgKnRjLAogCXN0cnVjdCB2OWZzX2ZjYWxsICpyYywgaW50IGVycikKIHsKLQlpbnQgZmlkOworCWludCBmaWQsIGlkOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm47Ci0KKwlpZCA9IDA7CiAJZmlkID0gdGMtPnBhcmFtcy50Y2x1bmsuZmlkOworCWlmIChyYykKKwkJaWQgPSByYy0+aWQ7CisKIAlrZnJlZSh0Yyk7Ci0KLQlpZiAoIXJjKQotCQlyZXR1cm47Ci0KLQl2OXNlcyA9IGE7Ci0JaWYgKHJjLT5pZCA9PSBSQ0xVTkspCi0JCXY5ZnNfcHV0X2lkcG9vbChmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7Ci0KIAlrZnJlZShyYyk7CisJaWYgKGlkID09IFJDTFVOSykgeworCQl2OXNlcyA9IGE7CisJCXY5ZnNfcHV0X2lkcG9vbChmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzLzlwL211eC5jIGIvZnMvOXAvbXV4LmMKaW5kZXggM2U1YjEyNC4uZjQ0MDdlYiAxMDA2NDQKLS0tIGEvZnMvOXAvbXV4LmMKKysrIGIvZnMvOXAvbXV4LmMKQEAgLTUwLDE1ICs1MCwyMyBAQAogCVdwZW5kaW5nID0gOCwJCS8qIGNhbiB3cml0ZSAqLwogfTsKIAorZW51bSB7CisJTm9uZSwKKwlGbHVzaGluZywKKwlGbHVzaGVkLAorfTsKKwogc3RydWN0IHY5ZnNfbXV4X3BvbGxfdGFzazsKIAogc3RydWN0IHY5ZnNfcmVxIHsKKwlzcGlubG9ja190IGxvY2s7CiAJaW50IHRhZzsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqdGNhbGw7CiAJc3RydWN0IHY5ZnNfZmNhbGwgKnJjYWxsOwogCWludCBlcnI7CiAJdjlmc19tdXhfcmVxX2NhbGxiYWNrIGNiOwogCXZvaWQgKmNiYTsKKwlpbnQgZmx1c2g7CiAJc3RydWN0IGxpc3RfaGVhZCByZXFfbGlzdDsKIH07CiAKQEAgLTk2LDggKzEwNCw4IEBACiAKIHN0cnVjdCB2OWZzX211eF9ycGMgewogCXN0cnVjdCB2OWZzX211eF9kYXRhICptOwotCXN0cnVjdCB2OWZzX3JlcSAqcmVxOwogCWludCBlcnI7CisJc3RydWN0IHY5ZnNfZmNhbGwgKnRjYWxsOwogCXN0cnVjdCB2OWZzX2ZjYWxsICpyY2FsbDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cXVldWU7CiB9OwpAQCAtNTI0LDEwICs1MzIsOSBAQAogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3JlcXVlc3Qoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0sIHN0cnVjdCB2OWZzX3JlcSAqcmVxKQogewotCWludCBlY29kZSwgdGFnOworCWludCBlY29kZTsKIAlzdHJ1Y3Qgdjlmc19zdHIgKmVuYW1lOwogCi0JdGFnID0gcmVxLT50YWc7CiAJaWYgKCFyZXEtPmVyciAmJiByZXEtPnJjYWxsLT5pZCA9PSBSRVJST1IpIHsKIAkJZWNvZGUgPSByZXEtPnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm5vOwogCQllbmFtZSA9ICZyZXEtPnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yOwpAQCAtNTUzLDIzICs1NjAsNiBAQAogCQlpZiAoIXJlcS0+ZXJyKQogCQkJcmVxLT5lcnIgPSAtRUlPOwogCX0KLQotCWlmIChyZXEtPmVyciA9PSBFUlJFUUZMVVNIKQotCQlyZXR1cm47Ci0KLQlpZiAocmVxLT5jYikgewotCQlkcHJpbnRrKERFQlVHX01VWCwgImNhbGxpbmcgY2FsbGJhY2sgdGNhbGwgJXAgcmNhbGwgJXBcbiIsCi0JCQlyZXEtPnRjYWxsLCByZXEtPnJjYWxsKTsKLQotCQkoKnJlcS0+Y2IpIChyZXEtPmNiYSwgcmVxLT50Y2FsbCwgcmVxLT5yY2FsbCwgcmVxLT5lcnIpOwotCQlyZXEtPmNiID0gTlVMTDsKLQl9IGVsc2UKLQkJa2ZyZWUocmVxLT5yY2FsbCk7Ci0KLQl2OWZzX211eF9wdXRfdGFnKG0sIHRhZyk7Ci0KLQl3YWtlX3VwKCZtLT5lcXVldWUpOwotCWtmcmVlKHJlcSk7CiB9CiAKIC8qKgpAQCAtNjY5LDE3ICs2NTksMjYgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJyZXEsIHJwdHIsICZtLT5yZXFfbGlzdCwgcmVxX2xpc3QpIHsKIAkJCWlmIChycmVxLT50YWcgPT0gcmNhbGwtPnRhZykgewogCQkJCXJlcSA9IHJyZXE7Ci0JCQkJcmVxLT5yY2FsbCA9IHJjYWxsOwotCQkJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJCQlzcGluX3VubG9jaygmbS0+bG9jayk7Ci0JCQkJcHJvY2Vzc19yZXF1ZXN0KG0sIHJlcSk7CisJCQkJaWYgKHJlcS0+Zmx1c2ggIT0gRmx1c2hpbmcpCisJCQkJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKIAkJCQlicmVhazsKIAkJCX0KLQogCQl9CisJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKIAotCQlpZiAoIXJlcSkgewotCQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCQlpZiAocmVxKSB7CisJCQlyZXEtPnJjYWxsID0gcmNhbGw7CisJCQlwcm9jZXNzX3JlcXVlc3QobSwgcmVxKTsKKworCQkJaWYgKHJlcS0+Zmx1c2ggIT0gRmx1c2hpbmcpIHsKKwkJCQlpZiAocmVxLT5jYikKKwkJCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7CisJCQkJZWxzZQorCQkJCQlrZnJlZShyZXEtPnJjYWxsKTsKKworCQkJCXdha2VfdXAoJm0tPmVxdWV1ZSk7CisJCQl9CisJCX0gZWxzZSB7CiAJCQlpZiAoZXJyID49IDAgJiYgcmNhbGwtPmlkICE9IFJGTFVTSCkKIAkJCQlkcHJpbnRrKERFQlVHX0VSUk9SLAogCQkJCQkidW5leHBlY3RlZCByZXNwb25zZSBtdXggJXAgaWQgJWQgdGFnICVkXG4iLApAQCAtNzQ2LDcgKzc0NSw2IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJdjlmc19zZXRfdGFnKHRjLCBuKTsKLQogCWlmICgodjlmc19kZWJ1Z19sZXZlbCZERUJVR19GQ0FMTCkgPT0gREVCVUdfRkNBTEwpIHsKIAkJY2hhciBidWZbMTUwXTsKIApAQCAtNzU0LDEyICs3NTIsMTQgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICI8PDwgJXAgJXNcbiIsIG0sIGJ1Zik7CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJnJlcS0+bG9jayk7CiAJcmVxLT50YWcgPSBuOwogCXJlcS0+dGNhbGwgPSB0YzsKIAlyZXEtPnJjYWxsID0gTlVMTDsKIAlyZXEtPmVyciA9IDA7CiAJcmVxLT5jYiA9IGNiOwogCXJlcS0+Y2JhID0gY2JhOworCXJlcS0+Zmx1c2ggPSBOb25lOwogCiAJc3Bpbl9sb2NrKCZtLT5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPnJlcV9saXN0LCAmbS0+dW5zZW50X3JlcV9saXN0KTsKQEAgLTc3Niw3MiArNzc2LDEwOCBAQAogCXJldHVybiByZXE7CiB9CiAKLXN0YXRpYyB2b2lkIHY5ZnNfbXV4X2ZsdXNoX2NiKHZvaWQgKmEsIHN0cnVjdCB2OWZzX2ZjYWxsICp0YywKLQkJCSAgICAgIHN0cnVjdCB2OWZzX2ZjYWxsICpyYywgaW50IGVycikKK3N0YXRpYyB2b2lkIHY5ZnNfbXV4X2ZyZWVfcmVxdWVzdChzdHJ1Y3Qgdjlmc19tdXhfZGF0YSAqbSwgc3RydWN0IHY5ZnNfcmVxICpyZXEpCit7CisJdjlmc19tdXhfcHV0X3RhZyhtLCByZXEtPnRhZyk7CisJa2ZyZWUocmVxKTsKK30KKworc3RhdGljIHZvaWQgdjlmc19tdXhfZmx1c2hfY2Ioc3RydWN0IHY5ZnNfcmVxICpmcmVxLCB2b2lkICphKQogewogCXY5ZnNfbXV4X3JlcV9jYWxsYmFjayBjYjsKIAlpbnQgdGFnOwogCXN0cnVjdCB2OWZzX211eF9kYXRhICptOwotCXN0cnVjdCB2OWZzX3JlcSAqcmVxLCAqcnB0cjsKKwlzdHJ1Y3Qgdjlmc19yZXEgKnJlcSwgKnJyZXEsICpycHRyOwogCiAJbSA9IGE7Ci0JZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgdGMgJXAgcmMgJXAgZXJyICVkIG9sZHRhZyAlZFxuIiwgbSwgdGMsCi0JCXJjLCBlcnIsIHRjLT5wYXJhbXMudGZsdXNoLm9sZHRhZyk7CisJZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgdGMgJXAgcmMgJXAgZXJyICVkIG9sZHRhZyAlZFxuIiwgbSwKKwkJZnJlcS0+dGNhbGwsIGZyZXEtPnJjYWxsLCBmcmVxLT5lcnIsCisJCWZyZXEtPnRjYWxsLT5wYXJhbXMudGZsdXNoLm9sZHRhZyk7CiAKIAlzcGluX2xvY2soJm0tPmxvY2spOwogCWNiID0gTlVMTDsKLQl0YWcgPSB0Yy0+cGFyYW1zLnRmbHVzaC5vbGR0YWc7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQlpZiAocmVxLT50YWcgPT0gdGFnKSB7CisJdGFnID0gZnJlcS0+dGNhbGwtPnBhcmFtcy50Zmx1c2gub2xkdGFnOworCXJlcSA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJyZXEsIHJwdHIsICZtLT5yZXFfbGlzdCwgcmVxX2xpc3QpIHsKKwkJaWYgKHJyZXEtPnRhZyA9PSB0YWcpIHsKKwkJCXJlcSA9IHJyZXE7CiAJCQlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7Ci0JCQlpZiAocmVxLT5jYikgewotCQkJCWNiID0gcmVxLT5jYjsKLQkJCQlyZXEtPmNiID0gTlVMTDsKLQkJCQlzcGluX3VubG9jaygmbS0+bG9jayk7Ci0JCQkJKCpjYikgKHJlcS0+Y2JhLCByZXEtPnRjYWxsLCByZXEtPnJjYWxsLAotCQkJCSAgICAgICByZXEtPmVycik7Ci0JCQl9Ci0JCQlrZnJlZShyZXEpOwotCQkJd2FrZV91cCgmbS0+ZXF1ZXVlKTsKIAkJCWJyZWFrOwogCQl9CiAJfQorCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKIAotCWlmICghY2IpCi0JCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKKwlpZiAocmVxKSB7CisJCXNwaW5fbG9jaygmcmVxLT5sb2NrKTsKKwkJcmVxLT5mbHVzaCA9IEZsdXNoZWQ7CisJCXNwaW5fdW5sb2NrKCZyZXEtPmxvY2spOwogCi0Jdjlmc19tdXhfcHV0X3RhZyhtLCB0YWcpOwotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7CisJCWlmIChyZXEtPmNiKQorCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7CisJCWVsc2UKKwkJCWtmcmVlKHJlcS0+cmNhbGwpOworCisJCXdha2VfdXAoJm0tPmVxdWV1ZSk7CisJfQorCisJa2ZyZWUoZnJlcS0+dGNhbGwpOworCWtmcmVlKGZyZXEtPnJjYWxsKTsKKwl2OWZzX211eF9mcmVlX3JlcXVlc3QobSwgZnJlcSk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiB2OWZzX211eF9mbHVzaF9yZXF1ZXN0KHN0cnVjdCB2OWZzX211eF9kYXRhICptLCBzdHJ1Y3Qgdjlmc19yZXEgKnJlcSkKIHsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmM7CisJc3RydWN0IHY5ZnNfcmVxICpycmVxLCAqcnB0cjsKIAogCWRwcmludGsoREVCVUdfTVVYLCAibXV4ICVwIHJlcSAlcCB0YWcgJWRcbiIsIG0sIHJlcSwgcmVxLT50YWcpOwogCisJLyogaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWQgZm9yIGEgcmVxdWVzdCwgZG8gbm90aGluZyAqLworCXNwaW5fbG9jaygmcmVxLT5sb2NrKTsKKwlpZiAocmVxLT5yY2FsbCB8fCByZXEtPmVycikgeworCQlzcGluX3VubG9jaygmcmVxLT5sb2NrKTsKKwkJZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgcmVxICVwIHJlc3BvbnNlIGFscmVhZHkgcmVjZWl2ZWRcbiIsIG0sIHJlcSk7CisJCXJldHVybiAwOworCX0KKworCXJlcS0+Zmx1c2ggPSBGbHVzaGluZzsKKwlzcGluX3VubG9jaygmcmVxLT5sb2NrKTsKKworCXNwaW5fbG9jaygmbS0+bG9jayk7CisJLyogaWYgdGhlIHJlcXVlc3QgaXMgbm90IHNlbnQgeWV0LCBqdXN0IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJyZXEsIHJwdHIsICZtLT51bnNlbnRfcmVxX2xpc3QsIHJlcV9saXN0KSB7CisJCWlmIChycmVxLT50YWcgPT0gcmVxLT50YWcpIHsKKwkJCWRwcmludGsoREVCVUdfTVVYLCAibXV4ICVwIHJlcSAlcCByZXF1ZXN0IGlzIG5vdCBzZW50IHlldFxuIiwgbSwgcmVxKTsKKwkJCWxpc3RfZGVsKCZycmVxLT5yZXFfbGlzdCk7CisJCQlyZXEtPmZsdXNoID0gRmx1c2hlZDsKKwkJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKKwkJCWlmIChyZXEtPmNiKQorCQkJCSgqcmVxLT5jYikgKHJlcSwgcmVxLT5jYmEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCisJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwogCWZjID0gdjlmc19jcmVhdGVfdGZsdXNoKHJlcS0+dGFnKTsKIAl2OWZzX3NlbmRfcmVxdWVzdChtLCBmYywgdjlmc19tdXhfZmx1c2hfY2IsIG0pOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZAotdjlmc19tdXhfcnBjX2NiKHZvaWQgKmEsIHN0cnVjdCB2OWZzX2ZjYWxsICp0Yywgc3RydWN0IHY5ZnNfZmNhbGwgKnJjLCBpbnQgZXJyKQordjlmc19tdXhfcnBjX2NiKHN0cnVjdCB2OWZzX3JlcSAqcmVxLCB2b2lkICphKQogewogCXN0cnVjdCB2OWZzX211eF9ycGMgKnI7CiAKLQlpZiAoZXJyID09IEVSUkVRRkxVU0gpIHsKLQkJa2ZyZWUocmMpOwotCQlkcHJpbnRrKERFQlVHX01VWCwgImVyciByZXEgZmx1c2hcbiIpOwotCQlyZXR1cm47Ci0JfQotCisJZHByaW50ayhERUJVR19NVVgsICJyZXEgJXAgciAlcFxuIiwgcmVxLCBhKTsKIAlyID0gYTsKLQlkcHJpbnRrKERFQlVHX01VWCwgIm11eCAlcCByZXEgJXAgdGMgJXAgcmMgJXAgZXJyICVkXG4iLCByLT5tLCByLT5yZXEsCi0JCXRjLCByYywgZXJyKTsKLQlyLT5yY2FsbCA9IHJjOwotCXItPmVyciA9IGVycjsKKwlyLT5yY2FsbCA9IHJlcS0+cmNhbGw7CisJci0+ZXJyID0gcmVxLT5lcnI7CisKKwlpZiAocmVxLT5mbHVzaCE9Tm9uZSAmJiAhcmVxLT5lcnIpCisJCXItPmVyciA9IC1FUkVTVEFSVFNZUzsKKwogCXdha2VfdXAoJnItPndxdWV1ZSk7CiB9CiAKQEAgLTg1NiwxMiArODkyLDEzIEBACiB2OWZzX211eF9ycGMoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0sIHN0cnVjdCB2OWZzX2ZjYWxsICp0YywKIAkgICAgIHN0cnVjdCB2OWZzX2ZjYWxsICoqcmMpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBzaWdwZW5kaW5nOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHY5ZnNfcmVxICpyZXE7CiAJc3RydWN0IHY5ZnNfbXV4X3JwYyByOwogCiAJci5lcnIgPSAwOworCXIudGNhbGwgPSB0YzsKIAlyLnJjYWxsID0gTlVMTDsKIAlyLm0gPSBtOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnIud3F1ZXVlKTsKQEAgLTg2OSw0OCArOTA2LDUwIEBACiAJaWYgKHJjKQogCQkqcmMgPSBOVUxMOwogCisJc2lncGVuZGluZyA9IDA7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXNpZ3BlbmRpbmcgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJfQorCiAJcmVxID0gdjlmc19zZW5kX3JlcXVlc3QobSwgdGMsIHY5ZnNfbXV4X3JwY19jYiwgJnIpOwogCWlmIChJU19FUlIocmVxKSkgewogCQllcnIgPSBQVFJfRVJSKHJlcSk7CiAJCWRwcmludGsoREVCVUdfTVVYLCAiZXJyb3IgJWRcbiIsIGVycik7Ci0JCXJldHVybiBQVFJfRVJSKHJlcSk7CisJCXJldHVybiBlcnI7CiAJfQogCi0Jci5yZXEgPSByZXE7Ci0JZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgdGMgJXAgdGFnICVkIHJwYyAlcCByZXEgJXBcbiIsIG0sIHRjLAotCQlyZXEtPnRhZywgJnIsIHJlcSk7CiAJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHIud3F1ZXVlLCByLnJjYWxsICE9IE5VTEwgfHwgci5lcnIgPCAwKTsKIAlpZiAoci5lcnIgPCAwKQogCQllcnIgPSByLmVycjsKIAogCWlmIChlcnIgPT0gLUVSRVNUQVJUU1lTICYmIG0tPnRyYW5zLT5zdGF0dXMgPT0gQ29ubmVjdGVkICYmIG0tPmVyciA9PSAwKSB7Ci0JCXNwaW5fbG9jaygmbS0+bG9jayk7Ci0JCXJlcS0+dGNhbGwgPSBOVUxMOwotCQlyZXEtPmVyciA9IEVSUkVRRkxVU0g7Ci0JCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKKwkJaWYgKHY5ZnNfbXV4X2ZsdXNoX3JlcXVlc3QobSwgcmVxKSkgeworCQkJLyogd2FpdCB1bnRpbCB3ZSBnZXQgcmVzcG9uc2Ugb2YgdGhlIGZsdXNoIG1lc3NhZ2UgKi8KKwkJCWRvIHsKKwkJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHIud3F1ZXVlLAorCQkJCQlyLnJjYWxsIHx8IHIuZXJyKTsKKwkJCX0gd2hpbGUgKCFyLnJjYWxsICYmICFyLmVyciAmJiBlcnI9PS1FUkVTVEFSVFNZUyAmJgorCQkJCW0tPnRyYW5zLT5zdGF0dXM9PUNvbm5lY3RlZCAmJiAhbS0+ZXJyKTsKKwkJfQorCQlzaWdwZW5kaW5nID0gMTsKKwl9CiAKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwotCQl2OWZzX211eF9mbHVzaF9yZXF1ZXN0KG0sIHJlcSk7CisJaWYgKHNpZ3BlbmRpbmcpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKIAkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCX0KIAotCWlmICghZXJyKSB7Ci0JCWlmIChyLnJjYWxsKQotCQkJZHByaW50ayhERUJVR19NVVgsICJnb3QgcmVzcG9uc2UgaWQgJWQgdGFnICVkXG4iLAotCQkJCXIucmNhbGwtPmlkLCByLnJjYWxsLT50YWcpOwotCi0JCWlmIChyYykKLQkJCSpyYyA9IHIucmNhbGw7Ci0JCWVsc2UKLQkJCWtmcmVlKHIucmNhbGwpOwotCX0gZWxzZSB7CisJaWYgKHJjKQorCQkqcmMgPSByLnJjYWxsOworCWVsc2UKIAkJa2ZyZWUoci5yY2FsbCk7Ci0JCWRwcmludGsoREVCVUdfTVVYLCAiZ290IGVycm9yICVkXG4iLCBlcnIpOwotCQlpZiAoZXJyID4gMCkKLQkJCWVyciA9IC1FSU87Ci0JfQorCisJdjlmc19tdXhfZnJlZV9yZXF1ZXN0KG0sIHJlcSk7CisJaWYgKGVyciA+IDApCisJCWVyciA9IC1FSU87CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTUxLDEyICs5OTAsMTUgQEAKIAlzdHJ1Y3Qgdjlmc19yZXEgKnJlcSwgKnJ0bXA7CiAJTElTVF9IRUFEKGNhbmNlbF9saXN0KTsKIAotCWRwcmludGsoREVCVUdfTVVYLCAibXV4ICVwIGVyciAlZFxuIiwgbSwgZXJyKTsKKwlkcHJpbnRrKERFQlVHX0VSUk9SLCAibXV4ICVwIGVyciAlZFxuIiwgbSwgZXJyKTsKIAltLT5lcnIgPSBlcnI7CiAJc3Bpbl9sb2NrKCZtLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7CiAJCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKIAl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJm0tPnVuc2VudF9yZXFfbGlzdCwgcmVxX2xpc3QpIHsKKwkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOworCX0KIAlzcGluX3VubG9jaygmbS0+bG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmY2FuY2VsX2xpc3QsIHJlcV9saXN0KSB7CkBAIC05NjUsMTEgKzEwMDcsOSBAQAogCQkJcmVxLT5lcnIgPSBlcnI7CiAKIAkJaWYgKHJlcS0+Y2IpCi0JCQkoKnJlcS0+Y2IpIChyZXEtPmNiYSwgcmVxLT50Y2FsbCwgcmVxLT5yY2FsbCwgcmVxLT5lcnIpOworCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7CiAJCWVsc2UKIAkJCWtmcmVlKHJlcS0+cmNhbGwpOwotCi0JCWtmcmVlKHJlcSk7CiAJfQogCiAJd2FrZV91cCgmbS0+ZXF1ZXVlKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL211eC5oIGIvZnMvOXAvbXV4LmgKaW5kZXggZTkwYmZkMy4uZmIxMGM1MCAxMDA2NDQKLS0tIGEvZnMvOXAvbXV4LmgKKysrIGIvZnMvOXAvbXV4LmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiBzdHJ1Y3Qgdjlmc19tdXhfZGF0YTsKK3N0cnVjdCB2OWZzX3JlcTsKIAogLyoqCiAgKiB2OWZzX211eF9yZXFfY2FsbGJhY2sgLSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZQpAQCAtMzYsOCArMzcsNyBAQAogICogQHJjIC0gcmVzcG9uc2UgY2FsbAogICogQGVyciAtIGVycm9yIGNvZGUgKG5vbi16ZXJvIGlmIGVycm9yIG9jY3VyZWQpCiAgKi8KLXR5cGVkZWYgdm9pZCAoKnY5ZnNfbXV4X3JlcV9jYWxsYmFjaykodm9pZCAqYSwgc3RydWN0IHY5ZnNfZmNhbGwgKnRjLAotCXN0cnVjdCB2OWZzX2ZjYWxsICpyYywgaW50IGVycik7Cit0eXBlZGVmIHZvaWQgKCp2OWZzX211eF9yZXFfY2FsbGJhY2spKHN0cnVjdCB2OWZzX3JlcSAqcmVxLCB2b2lkICphKTsKIAogaW50IHY5ZnNfbXV4X2dsb2JhbF9pbml0KHZvaWQpOwogdm9pZCB2OWZzX211eF9nbG9iYWxfZXhpdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDA4M2RjZmMuLjFhOGU0NjAgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtNzIsMTEgKzcyLDE3IEBACiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCWVyciA9IHY5ZnNfdF93YWxrKHY5c2VzLCB2ZmlkLT5maWQsIGZpZCwgTlVMTCwgTlVMTCk7CisJZXJyID0gdjlmc190X3dhbGsodjlzZXMsIHZmaWQtPmZpZCwgZmlkLCBOVUxMLCAmZmNhbGwpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJyZXdhbGsgZGlkbid0IHdvcmtcbiIpOwotCQlnb3RvIHB1dF9maWQ7CisJCWlmIChmY2FsbCAmJiBmY2FsbC0+aWQgPT0gUldBTEspCisJCQlnb3RvIGNsdW5rX2ZpZDsKKwkJZWxzZSB7CisJCQl2OWZzX3B1dF9pZHBvb2woZmlkLCAmdjlzZXMtPmZpZHBvb2wpOworCQkJZ290byBmcmVlX2ZjYWxsOworCQl9CiAJfQorCWtmcmVlKGZjYWxsKTsKIAogCS8qIFRPRE86IGRvIHNwZWNpYWwgdGhpbmdzIGZvciBPX0VYQ0wsIE9fTk9GT0xMT1csIE9fU1lOQyAqLwogCS8qIHRyYW5zbGF0ZSBvcGVuIG1vZGUgYXBwcm9wcmlhdGVseSAqLwpAQCAtMTA5LDggKzExNSw3IEBACiBjbHVua19maWQ6CiAJdjlmc190X2NsdW5rKHY5c2VzLCBmaWQpOwogCi1wdXRfZmlkOgotCXY5ZnNfcHV0X2lkcG9vbChmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CitmcmVlX2ZjYWxsOgogCWtmcmVlKGZjYWxsKTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDEzM2RiMzYuLjJjYjg3YmEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0yNzAsNyArMjcwLDEwIEBACiAJZXJyID0gdjlmc190X3dhbGsodjlzZXMsIHBmaWQsIGZpZCwgTlVMTCwgJmZjYWxsKTsKIAlpZiAoZXJyIDwgMCkgewogCQlQUklOVF9GQ0FMTF9FUlJPUigiY2xvbmUgZXJyb3IiLCBmY2FsbCk7Ci0JCWdvdG8gcHV0X2ZpZDsKKwkJaWYgKGZjYWxsICYmIGZjYWxsLT5pZCA9PSBSV0FMSykKKwkJCWdvdG8gY2x1bmtfZmlkOworCQllbHNlCisJCQlnb3RvIHB1dF9maWQ7CiAJfQogCWtmcmVlKGZjYWxsKTsKIApAQCAtMzIyLDYgKzMyNSw5IEBACiAJCSZmY2FsbCk7CiAKIAlpZiAoZXJyIDwgMCkgeworCQlpZiAoZmNhbGwgJiYgZmNhbGwtPmlkID09IFJXQUxLKQorCQkJZ290byBjbHVua19maWQ7CisKIAkJUFJJTlRfRkNBTExfRVJST1IoIndhbGsgZXJyb3IiLCBmY2FsbCk7CiAJCXY5ZnNfcHV0X2lkcG9vbChuZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCQlnb3RvIGVycm9yOwpAQCAtNjQwLDE5ICs2NDYsMjYgQEAKIAl9CiAKIAlyZXN1bHQgPSB2OWZzX3Rfd2Fsayh2OXNlcywgZGlyZmlkbnVtLCBuZXdmaWQsCi0JCShjaGFyICopZGVudHJ5LT5kX25hbWUubmFtZSwgTlVMTCk7CisJCShjaGFyICopZGVudHJ5LT5kX25hbWUubmFtZSwgJmZjYWxsKTsKKwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisJCWlmIChmY2FsbCAmJiBmY2FsbC0+aWQgPT0gUldBTEspCisJCQl2OWZzX3RfY2x1bmsodjlzZXMsIG5ld2ZpZCk7CisJCWVsc2UKKwkJCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisKIAkJaWYgKHJlc3VsdCA9PSAtRU5PRU5UKSB7CiAJCQlkX2FkZChkZW50cnksIE5VTEwpOwogCQkJZHByaW50ayhERUJVR19WRlMsCiAJCQkJIlJldHVybiBuZWdhdGl2ZSBkZW50cnkgJXAgY291bnQgJWRcbiIsCiAJCQkJZGVudHJ5LCBhdG9taWNfcmVhZCgmZGVudHJ5LT5kX2NvdW50KSk7CisJCQlrZnJlZShmY2FsbCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAid2FsayBlcnJvcjolZFxuIiwgcmVzdWx0KTsKIAkJZ290byBGcmVlRmNhbGw7CiAJfQorCWtmcmVlKGZjYWxsKTsKIAogCXJlc3VsdCA9IHY5ZnNfdF9zdGF0KHY5c2VzLCBuZXdmaWQsICZmY2FsbCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggYjBhMGFlNS4uNjFjNTk5YiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTEyNywxMiArMTI3LDEzIEBACiAKIAlpZiAoKG5ld2ZpZCA9IHY5ZnNfc2Vzc2lvbl9pbml0KHY5c2VzLCBkZXZfbmFtZSwgZGF0YSkpIDwgMCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAicHJvYmxlbSBpbml0aWF0aW5nIHNlc3Npb25cbiIpOwotCQlrZnJlZSh2OXNlcyk7Ci0JCXJldHVybiBFUlJfUFRSKG5ld2ZpZCk7CisJCXNiID0gRVJSX1BUUihuZXdmaWQpOworCQlnb3RvIG91dF9mcmVlX3Nlc3Npb247CiAJfQogCiAJc2IgPSBzZ2V0KGZzX3R5cGUsIE5VTEwsIHY5ZnNfc2V0X3N1cGVyLCB2OXNlcyk7Ci0KKwlpZiAoSVNfRVJSKHNiKSkKKwkJZ290byBvdXRfY2xvc2Vfc2Vzc2lvbjsKIAl2OWZzX2ZpbGxfc3VwZXIoc2IsIHY5c2VzLCBmbGFncyk7CiAKIAlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgbW9kZSk7CkBAIC0xODUsNiArMTg2LDEyIEBACiAKIAlyZXR1cm4gc2I7CiAKK291dF9jbG9zZV9zZXNzaW9uOgorCXY5ZnNfc2Vzc2lvbl9jbG9zZSh2OXNlcyk7CitvdXRfZnJlZV9zZXNzaW9uOgorCWtmcmVlKHY5c2VzKTsKKwlyZXR1cm4gc2I7CisKIHB1dF9iYWNrX3NiOgogCS8qIGRlYWN0aXZhdGVfc3VwZXIgY2FsbHMgdjlmc19raWxsX3N1cGVyIHdoaWNoIHdpbGwgZnJlZXMgdGhlIHJlc3QgKi8KIAl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGUyMDdiZTYuLmY5YjU4NDIgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtNzk5LDYgKzc5OSw3IEBACiBjb25maWcgUFJPQ19WTUNPUkUKICAgICAgICAgYm9vbCAiL3Byb2Mvdm1jb3JlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAgICAgICAgIGRlcGVuZHMgb24gUFJPQ19GUyAmJiBFWFBFUklNRU5UQUwgJiYgQ1JBU0hfRFVNUAorCWRlZmF1bHQgeQogICAgICAgICBoZWxwCiAgICAgICAgIEV4cG9ydHMgdGhlIGR1bXAgaW1hZ2Ugb2YgY3Jhc2hlZCBrZXJuZWwgaW4gRUxGIGZvcm1hdC4KIApAQCAtODQxLDYgKzg0MiwxMiBAQAogY29uZmlnIEhVR0VUTEJGUwogCWJvb2wgIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIFg4NiB8fCBJQTY0IHx8IFBQQzY0IHx8IFNQQVJDNjQgfHwgU1VQRVJIIHx8IEJST0tFTgorCWhlbHAKKwkgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb24KKwkgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0PiBmb3IgZGV0YWlscy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwpAQCAtODYxLDcgKzg2OCw3IEBACiAKIGNvbmZpZyBDT05GSUdGU19GUwogCXRyaXN0YXRlICJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gU1lTRlMgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgY29uZmlnZnMgaXMgYSByYW0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZQogCSAgb2Ygc3lzZnMncyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWQKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggODNiZjQ3OC4uMDc4ZDNkMSAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcHJvYy8KIG9iai15CQkJCSs9IHBhcnRpdGlvbnMvCiBvYmotJChDT05GSUdfU1lTRlMpCQkrPSBzeXNmcy8KK29iai0kKENPTkZJR19DT05GSUdGU19GUykJKz0gY29uZmlnZnMvCiBvYmoteQkJCQkrPSBkZXZwdHMvCiAKIG9iai0kKENPTkZJR19QUk9GSUxJTkcpCQkrPSBkY29va2llcy5vCkBAIC0xMDAsNSArMTAxLDQgQEAKIG9iai0kKENPTkZJR19IT1NURlMpCQkrPSBob3N0ZnMvCiBvYmotJChDT05GSUdfSFBQRlMpCQkrPSBocHBmcy8KIG9iai0kKENPTkZJR19ERUJVR19GUykJCSs9IGRlYnVnZnMvCi1vYmotJChDT05GSUdfQ09ORklHRlNfRlMpCSs9IGNvbmZpZ2ZzLwogb2JqLSQoQ09ORklHX09DRlMyX0ZTKQkJKz0gb2NmczIvCmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmMKaW5kZXggZDRjMmQ2My4uYTQyMTQzYyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9uYW1laS5jCisrKyBiL2ZzL2FmZnMvbmFtZWkuYwpAQCAtNDE2LDEwICs0MTYsOSBAQAogCQkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlyZXR2YWwgPSAtRUlPOwogCWJoID0gYWZmc19icmVhZChzYiwgb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOwogCWlmICghYmgpCi0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuIC1FSU87CiAKIAkvKiBSZW1vdmUgaGVhZGVyIGZyb20gaXRzIHBhcmVudCBkaXJlY3RvcnkuICovCiAJYWZmc19sb2NrX2RpcihvbGRfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCA1N2M0OTAzLi5kNjYwM2QwIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC03NCw4ICs3NCw4IEBACiAJc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICpuZXh0OwogCWF1dG9mc193cXRfdCB3YWl0X3F1ZXVlX3Rva2VuOwogCS8qIFdlIHVzZSB0aGUgZm9sbG93aW5nIHRvIHNlZSB3aGF0IHdlIGFyZSB3YWl0aW5nIGZvciAqLwotCWludCBoYXNoOwotCWludCBsZW47CisJdW5zaWduZWQgaW50IGhhc2g7CisJdW5zaWduZWQgaW50IGxlbjsKIAljaGFyICpuYW1lOwogCXUzMiBkZXY7CiAJdTY0IGlubzsKQEAgLTg1LDcgKzg1LDYgQEAKIAlwaWRfdCB0Z2lkOwogCS8qIFRoaXMgaXMgZm9yIHN0YXR1cyByZXBvcnRpbmcgdXBvbiByZXR1cm4gKi8KIAlpbnQgc3RhdHVzOwotCWF0b21pY190IG5vdGlmeTsKIAlhdG9taWNfdCB3YWl0X2N0cjsKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggODRlMDMwYy4uNTEwMGY5ODQgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC0zMjcsNiArMzI3LDcgQEAKIHN0YXRpYyB2b2lkICphdXRvZnM0X2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CiAJaW50IG96X21vZGUgPSBhdXRvZnM0X296X21vZGUoc2JpKTsKIAl1bnNpZ25lZCBpbnQgbG9va3VwX3R5cGU7CiAJaW50IHN0YXR1czsKQEAgLTM0MCwxMyArMzQxLDggQEAKIAlpZiAob3pfbW9kZSB8fCAhbG9va3VwX3R5cGUpCiAJCWdvdG8gZG9uZTsKIAotCS8qCi0JICogSWYgYSByZXF1ZXN0IGlzIHBlbmRpbmcgd2FpdCBmb3IgaXQuCi0JICogSWYgaXQncyBhIG1vdW50IHRoZW4gaXQgd29uJ3QgYmUgZXhwaXJlZCB0aWxsIGF0IGxlYXN0Ci0JICogYSBsaWl0bGUgbGF0ZXIgYW5kIGlmIGl0J3MgYW4gZXhwaXJlIHRoZW4gd2UgbWlnaHQgbmVlZAotCSAqIHRvIG1vdW50IGl0IGFnYWluLgotCSAqLwotCWlmIChhdXRvZnM0X2lzcGVuZGluZyhkZW50cnkpKSB7CisJLyogSWYgYW4gZXhwaXJlIHJlcXVlc3QgaXMgcGVuZGluZyB3YWl0IGZvciBpdC4gKi8KKwlpZiAoaW5vICYmIChpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9FWFBJUklORykpIHsKIAkJRFBSSU5USygid2FpdGluZyBmb3IgYWN0aXZlIHJlcXVlc3QgJXAgbmFtZT0lLipzIiwKIAkJCWRlbnRyeSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC93YWl0cS5jIGIvZnMvYXV0b2ZzNC93YWl0cS5jCmluZGV4IDE0MmFiNmEuLmNlMTAzZTcgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvd2FpdHEuYworKysgYi9mcy9hdXRvZnM0L3dhaXRxLmMKQEAgLTE4OSwxNCArMTg5LDMwIEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHN0cnVjdCBhdXRvZnNfd2FpdF9xdWV1ZSAqCithdXRvZnM0X2ZpbmRfd2FpdChzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJICBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgaGFzaCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgYXV0b2ZzX3dhaXRfcXVldWUgKndxOworCisJZm9yICh3cSA9IHNiaS0+cXVldWVzOyB3cTsgd3EgPSB3cS0+bmV4dCkgeworCQlpZiAod3EtPmhhc2ggPT0gaGFzaCAmJgorCQkgICAgd3EtPmxlbiA9PSBsZW4gJiYKKwkJICAgIHdxLT5uYW1lICYmICFtZW1jbXAod3EtPm5hbWUsIG5hbWUsIGxlbikpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHdxOworfQorCiBpbnQgYXV0b2ZzNF93YWl0KHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCWVudW0gYXV0b2ZzX25vdGlmeSBub3RpZnkpCiB7CisJc3RydWN0IGF1dG9mc19pbmZvICppbm87CiAJc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICp3cTsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXVuc2lnbmVkIGludCBoYXNoID0gMDsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMsIHR5cGU7CiAKIAkvKiBJbiBjYXRhdG9uaWMgbW9kZSwgd2UgZG9uJ3Qgd2FpdCBmb3Igbm9ib2R5ICovCiAJaWYgKHNiaS0+Y2F0YXRvbmljKQpAQCAtMjIzLDIxICsyMzksNDEgQEAKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAKLQlmb3IgKHdxID0gc2JpLT5xdWV1ZXMgOyB3cSA7IHdxID0gd3EtPm5leHQpIHsKLQkJaWYgKHdxLT5oYXNoID09IGRlbnRyeS0+ZF9uYW1lLmhhc2ggJiYKLQkJICAgIHdxLT5sZW4gPT0gbGVuICYmCi0JCSAgICB3cS0+bmFtZSAmJiAhbWVtY21wKHdxLT5uYW1lLCBuYW1lLCBsZW4pKQotCQkJYnJlYWs7CisJd3EgPSBhdXRvZnM0X2ZpbmRfd2FpdChzYmksIG5hbWUsIGhhc2gsIGxlbik7CisJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisJaWYgKCF3cSAmJiBpbm8gJiYgbm90aWZ5ID09IE5GWV9OT05FKSB7CisJCS8qCisJCSAqIEVpdGhlciB3ZSd2ZSBiZXRlYW4gdGhlIHBlbmRpbmcgZXhwaXJlIHRvIHBvc3QgaXQncworCQkgKiB3YWl0IG9yIGl0IGZpbmlzaGVkIHdoaWxlIHdlIHdhaXRlZCBvbiB0aGUgbXV0ZXguCisJCSAqIFNvIHdlIG5lZWQgdG8gd2FpdCB0aWxsIGVpdGhlciwgdGhlIHdhaXQgYXBwZWFycworCQkgKiBvciB0aGUgZXhwaXJlIGZpbmlzaGVzLgorCQkgKi8KKworCQl3aGlsZSAoaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfRVhQSVJJTkcpIHsKKwkJCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTApOworCQkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc2JpLT53cV9tdXRleCkpIHsKKwkJCQlrZnJlZShuYW1lKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQkJd3EgPSBhdXRvZnM0X2ZpbmRfd2FpdChzYmksIG5hbWUsIGhhc2gsIGxlbik7CisJCQlpZiAod3EpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBOb3QgaWRlYWwgYnV0IHRoZSBzdGF0dXMgaGFzIGFscmVhZHkgZ29uZS4gT2YgdGhlIHR3bworCQkgKiBjYXNlcyB3aGVyZSB3ZSB3YWl0IG9uIE5GWV9OT05FIG5laXRoZXIgZGVwZW5kIG9uIHRoZQorCQkgKiByZXR1cm4gc3RhdHVzIG9mIHRoZSB3YWl0LgorCQkgKi8KKwkJaWYgKCF3cSkgeworCQkJa2ZyZWUobmFtZSk7CisJCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoIXdxKSB7Ci0JCS8qIENhbid0IHdhaXQgZm9yIGFuIGV4cGlyZSBpZiB0aGVyZSdzIG5vIG1vdW50ICovCi0JCWlmIChub3RpZnkgPT0gTkZZX05PTkUgJiYgIWRfbW91bnRwb2ludChkZW50cnkpKSB7Ci0JCQlrZnJlZShuYW1lKTsKLQkJCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCiAJCS8qIENyZWF0ZSBhIG5ldyB3YWl0IHF1ZXVlICovCiAJCXdxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlKSxHRlBfS0VSTkVMKTsKIAkJaWYgKCF3cSkgewpAQCAtMjYzLDIwICsyOTksNyBAQAogCQl3cS0+dGdpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJCXdxLT5zdGF0dXMgPSAtRUlOVFI7IC8qIFN0YXR1cyByZXR1cm4gaWYgaW50ZXJydXB0ZWQgKi8KIAkJYXRvbWljX3NldCgmd3EtPndhaXRfY3RyLCAyKTsKLQkJYXRvbWljX3NldCgmd3EtPm5vdGlmeSwgMSk7CiAJCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX2luYygmd3EtPndhaXRfY3RyKTsKLQkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKLQkJa2ZyZWUobmFtZSk7Ci0JCURQUklOVEsoImV4aXN0aW5nIHdhaXQgaWQgPSAweCUwOGx4LCBuYW1lID0gJS4qcywgbmZ5PSVkIiwKLQkJCSh1bnNpZ25lZCBsb25nKSB3cS0+d2FpdF9xdWV1ZV90b2tlbiwgd3EtPmxlbiwgd3EtPm5hbWUsIG5vdGlmeSk7Ci0JfQotCi0JaWYgKG5vdGlmeSAhPSBORllfTk9ORSAmJiBhdG9taWNfcmVhZCgmd3EtPm5vdGlmeSkpIHsKLQkJaW50IHR5cGU7Ci0KLQkJYXRvbWljX2RlYygmd3EtPm5vdGlmeSk7CiAKIAkJaWYgKHNiaS0+dmVyc2lvbiA8IDUpIHsKIAkJCWlmIChub3RpZnkgPT0gTkZZX01PVU5UKQpAQCAtMjk5LDYgKzMyMiwxMiBAQAogCiAJCS8qIGF1dG9mczRfbm90aWZ5X2RhZW1vbigpIG1heSBibG9jayAqLwogCQlhdXRvZnM0X25vdGlmeV9kYWVtb24oc2JpLCB3cSwgdHlwZSk7CisJfSBlbHNlIHsKKwkJYXRvbWljX2luYygmd3EtPndhaXRfY3RyKTsKKwkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKKwkJa2ZyZWUobmFtZSk7CisJCURQUklOVEsoImV4aXN0aW5nIHdhaXQgaWQgPSAweCUwOGx4LCBuYW1lID0gJS4qcywgbmZ5PSVkIiwKKwkJCSh1bnNpZ25lZCBsb25nKSB3cS0+d2FpdF9xdWV1ZV90b2tlbiwgd3EtPmxlbiwgd3EtPm5hbWUsIG5vdGlmeSk7CiAJfQogCiAJLyogd3EtPm5hbWUgaXMgTlVMTCBpZiBhbmQgb25seSBpZiB0aGUgbG9jayBpcyBhbHJlYWR5IHJlbGVhc2VkICovCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZmxhdC5jIGIvZnMvYmluZm10X2ZsYXQuYwppbmRleCA2OWY0NGRjLi5iMWM5MDJlIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZmxhdC5jCisrKyBiL2ZzL2JpbmZtdF9mbGF0LmMKQEAgLTQyOCw3ICs0MjgsNiBAQAogCWxvZmZfdCBmcG9zOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZSwgZW5kX2NvZGU7CiAJaW50IHJldDsKLQlpbnQgZXhlY19maWxlbm87CiAKIAloZHIgPSAoKHN0cnVjdCBmbGF0X2hkciAqKSBicHJtLT5idWYpOwkJLyogZXhlYy1oZWFkZXIgKi8KIAlpbm9kZSA9IGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwpAQCAtNTAyLDIxICs1MDEsMTIgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JLyogY2hlY2sgZmlsZSBkZXNjcmlwdG9yICovCi0JZXhlY19maWxlbm8gPSBnZXRfdW51c2VkX2ZkKCk7Ci0JaWYgKGV4ZWNfZmlsZW5vIDwgMCkgewotCQlyZXQgPSAtRU1GSUxFOwotCQlnb3RvIGVycjsKLQl9Ci0JZ2V0X2ZpbGUoYnBybS0+ZmlsZSk7Ci0JZmRfaW5zdGFsbChleGVjX2ZpbGVubywgYnBybS0+ZmlsZSk7Ci0KIAkvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovCiAJaWYgKGlkID09IDApIHsKIAkJcmVzdWx0ID0gZmx1c2hfb2xkX2V4ZWMoYnBybSk7CiAJCWlmIChyZXN1bHQpIHsKIAkJCXJldCA9IHJlc3VsdDsKLQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJZ290byBlcnI7CiAJCX0KIAogCQkvKiBPSywgVGhpcyBpcyB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuICovCkBAIC01NDgsNyArNTM4LDcgQEAKIAkJCQl0ZXh0cG9zID0gKHVuc2lnbmVkIGxvbmcpIC1FTk9NRU07CiAJCQlwcmludGsoIlVuYWJsZSB0byBtbWFwIHByb2Nlc3MgdGV4dCwgZXJybm8gJWRcbiIsIChpbnQpLXRleHRwb3MpOwogCQkJcmV0ID0gdGV4dHBvczsKLQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpAQCAtNTY0LDcgKzU1NCw3IEBACiAJCQkJCShpbnQpLWRhdGFwb3MpOwogCQkJZG9fbXVubWFwKGN1cnJlbnQtPm1tLCB0ZXh0cG9zLCB0ZXh0X2xlbik7CiAJCQlyZXQgPSByZWFsZGF0YXN0YXJ0OwotCQkJZ290byBlcnJfY2xvc2U7CisJCQlnb3RvIGVycjsKIAkJfQogCQlkYXRhcG9zID0gcmVhbGRhdGFzdGFydCArIE1BWF9TSEFSRURfTElCUyAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKIApAQCAtNTg3LDcgKzU3Nyw3IEBACiAJCQlkb19tdW5tYXAoY3VycmVudC0+bW0sIHRleHRwb3MsIHRleHRfbGVuKTsKIAkJCWRvX211bm1hcChjdXJyZW50LT5tbSwgcmVhbGRhdGFzdGFydCwgZGF0YV9sZW4gKyBleHRyYSk7CiAJCQlyZXQgPSByZXN1bHQ7Ci0JCQlnb3RvIGVycl9jbG9zZTsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJcmVsb2MgPSAodW5zaWduZWQgbG9uZyAqKSAoZGF0YXBvcysobnRvaGwoaGRyLT5yZWxvY19zdGFydCktdGV4dF9sZW4pKTsKQEAgLTYwNiw3ICs1OTYsNyBAQAogCQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgUkFNIGZvciBwcm9jZXNzIHRleHQvZGF0YSwgZXJybm8gJWRcbiIsCiAJCQkJCShpbnQpLXRleHRwb3MpOwogCQkJcmV0ID0gdGV4dHBvczsKLQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlyZWFsZGF0YXN0YXJ0ID0gdGV4dHBvcyArIG50b2hsKGhkci0+ZGF0YV9zdGFydCk7CkBAIC02NTIsNyArNjQyLDcgQEAKIAkJCWRvX211bm1hcChjdXJyZW50LT5tbSwgdGV4dHBvcywgdGV4dF9sZW4gKyBkYXRhX2xlbiArIGV4dHJhICsKIAkJCQlNQVhfU0hBUkVEX0xJQlMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCQkJcmV0ID0gcmVzdWx0OwotCQkJZ290byBlcnJfY2xvc2U7CisJCQlnb3RvIGVycjsKIAkJfQogCX0KIApAQCAtNzE3LDcgKzcwNyw3IEBACiAJCQkJYWRkciA9IGNhbGNfcmVsb2MoKnJwLCBsaWJpbmZvLCBpZCwgMCk7CiAJCQkJaWYgKGFkZHIgPT0gUkVMT0NfRkFJTEVEKSB7CiAJCQkJCXJldCA9IC1FTk9FWEVDOwotCQkJCQlnb3RvIGVycl9jbG9zZTsKKwkJCQkJZ290byBlcnI7CiAJCQkJfQogCQkJCSpycCA9IGFkZHI7CiAJCQl9CkBAIC03NDcsNyArNzM3LDcgQEAKIAkJCXJwID0gKHVuc2lnbmVkIGxvbmcgKikgY2FsY19yZWxvYyhhZGRyLCBsaWJpbmZvLCBpZCwgMSk7CiAJCQlpZiAocnAgPT0gKHVuc2lnbmVkIGxvbmcgKilSRUxPQ19GQUlMRUQpIHsKIAkJCQlyZXQgPSAtRU5PRVhFQzsKLQkJCQlnb3RvIGVycl9jbG9zZTsKKwkJCQlnb3RvIGVycjsKIAkJCX0KIAogCQkJLyogR2V0IHRoZSBwb2ludGVyJ3MgdmFsdWUuICAqLwpAQCAtNzYyLDcgKzc1Miw3IEBACiAJCQkJYWRkciA9IGNhbGNfcmVsb2MoYWRkciwgbGliaW5mbywgaWQsIDApOwogCQkJCWlmIChhZGRyID09IFJFTE9DX0ZBSUxFRCkgewogCQkJCQlyZXQgPSAtRU5PRVhFQzsKLQkJCQkJZ290byBlcnJfY2xvc2U7CisJCQkJCWdvdG8gZXJyOwogCQkJCX0KIAogCQkJCS8qIFdyaXRlIGJhY2sgdGhlIHJlbG9jYXRlZCBwb2ludGVyLiAgKi8KQEAgLTc4Myw4ICs3NzMsNiBAQAogCQkJc3RhY2tfbGVuKTsKIAogCXJldHVybiAwOwotZXJyX2Nsb3NlOgotCXN5c19jbG9zZShleGVjX2ZpbGVubyk7CiBlcnI6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggZWI4ZmJjNS4uMDk4YzEyYiAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTExMTYsNiArMTExNiw5IEBACiAJYnAtPmJpbzEuYmlfaW9fdmVjID0gJmJwLT5idjE7CiAJYnAtPmJpbzIuYmlfaW9fdmVjID0gJmJwLT5idjI7CiAKKwlicC0+YmlvMS5iaV9tYXhfdmVjcyA9IDE7CisJYnAtPmJpbzIuYmlfbWF4X3ZlY3MgPSAxOworCiAJYnAtPmJpbzEuYmlfZW5kX2lvID0gYmlvX3BhaXJfZW5kXzE7CiAJYnAtPmJpbzIuYmlfZW5kX2lvID0gYmlvX3BhaXJfZW5kXzI7CiAKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggYWY4OGM0My4uZjU5NThmNCAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTExMDQsNiArMTEwNCw4IEBACiAJLnJlYWR2CQk9IGdlbmVyaWNfZmlsZV9yZWFkdiwKIAkud3JpdGV2CQk9IGdlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2ssCiAJLnNlbmRmaWxlCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAorCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKKwkuc3BsaWNlX3dyaXRlCT0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKIH07CiAKIGludCBpb2N0bF9ieV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCmRpZmYgLS1naXQgYS9mcy9jaWZzL0NIQU5HRVMgYi9mcy9jaWZzL0NIQU5HRVMKaW5kZXggOGEyZGUwMy4uNzI3MWJiMCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9DSEFOR0VTCisrKyBiL2ZzL2NpZnMvQ0hBTkdFUwpAQCAtMSw3ICsxLDE4IEBACitWZXJzaW9uIDEuNDMKKy0tLS0tLS0tLS0tLQorUE9TSVggbG9ja2luZyB0byBzZXJ2ZXJzIHdoaWNoIHN1cHBvcnQgQ0lGUyBQT1NJWCBFeHRlbnNpb25zCisoZGlzYWJsZWQgYnkgZGVmYXVsdCBjb250cm9sbGVkIGJ5IHByb2MvZnMvY2lmcy9FeHBlcmltZW50YWwpLgorSGFuZGxlIGNvbnZlcnNpb24gb2YgbG9uZyBzaGFyZSBuYW1lcyAoZXNwZWNpYWxseSBBc2lhbiBsYW5ndWFnZXMpCit0byBVbmljb2RlIGR1cmluZyBtb3VudC4gCisKIFZlcnNpb24gMS40MgogLS0tLS0tLS0tLS0tCiBGaXggc2xvdyBvcGxvY2sgYnJlYWsgd2hlbiBtb3VudGVkIHRvIGRpZmZlcmVudCBzZXJ2ZXJzIGF0IHRoZSBzYW1lIHRpbWUgYW5kCi10aGUgdGlkcyBtYXRjaCBhbmQgd2UgdHJ5IHRvIGZpbmQgbWF0Y2hpbmcgZmlkIG9uIHdyb25nIHNlcnZlci4KK3RoZSB0aWRzIG1hdGNoIGFuZCB3ZSB0cnkgdG8gZmluZCBtYXRjaGluZyBmaWQgb24gd3Jvbmcgc2VydmVyLiBGaXggcmVhZAorbG9vcGluZyB3aGVuIHNpZ25pbmcgcmVxdWlyZWQgYnkgc2VydmVyICgyLjYuMTYga2VybmVsIG9ubHkpLiBGaXggcmVhZGRpcgordnMuIHJlbmFtZSByYWNlIHdoaWNoIGNvdWxkIGNhdXNlIGVhY2ggdG8gaGFuZy4gUmV0dXJuIC4gYW5kIC4uIGV2ZW4KK2lmIHNlcnZlciBkb2VzIG5vdC4gIEFsbG93IHNlYXJjaGVzIHRvIHNraXAgZmlyc3QgdGhyZWUgZW50cmllcyBhbmQKK2JlZ2luIGF0IGFueSBsb2NhdGlvbi4gRml4IG9vcHMgaW4gZmluZF93cml0ZWFibGVfZmlsZS4KIAogVmVyc2lvbiAxLjQxCiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggYjJiNGQwOC4uMDM1NTAwMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTUxMSw2ICs1MTEsMTQgQEAKIAkJCXN1cHBvcnQgYW5kIHdhbnQgdG8gbWFwIHRoZSB1aWQgYW5kIGdpZCBmaWVsZHMgCiAJCQl0byB2YWx1ZXMgc3VwcGxpZWQgYXQgbW91bnQgKHJhdGhlciB0aGFuIHRoZSAKIAkJCWFjdHVhbCB2YWx1ZXMsIHRoZW4gc2V0IHRoaXMgdG8gemVyby4gKGRlZmF1bHQgMSkKK0V4cGVyaW1lbnRhbCAgICAgICAgICAgIFdoZW4gc2V0IHRvIDEgdXNlZCB0byBlbmFibGUgY2VydGFpbiBleHBlcmltZW50YWwKKwkJCWZlYXR1cmVzIChjdXJyZW50bHkgZW5hYmxlcyBtdWx0aXBhZ2Ugd3JpdGVzCisJCQl3aGVuIHNpZ25pbmcgaXMgZW5hYmxlZCwgdGhlIG11bHRpcGFnZSB3cml0ZQorCQkJcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgd2FzIGRpc2FibGVkIHdoZW4KKwkJCXNpZ25pbmcgdHVybmVkIG9uIGluIGNhc2UgYnVmZmVyIHdhcyBtb2RpZmllZAorCQkJanVzdCBiZWZvcmUgaXQgd2FzIHNlbnQsIGFsc28gdGhpcyBmbGFnIHdpbGwKKwkJCWJlIHVzZWQgdG8gdXNlIHRoZSBuZXcgZXhwZXJpbWVudGFsIHNlc3Npb25zZXR1cAorCQkJY29kZSkuCiAKIFRoZXNlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyBhbmQgdHJhY2luZyBjYW4gYmUgZW5hYmxlZCBieSBjaGFuZ2luZyBmbGFncyBpbiAKIC9wcm9jL2ZzL2NpZnMgKGFmdGVyIHRoZSBjaWZzIG1vZHVsZSBoYXMgYmVlbiBpbnN0YWxsZWQgb3IgYnVpbHQgaW50byB0aGUgCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCBkNGI3MTNlLi5jMjYyZDg4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSAiY2lmc2ZzLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2RlZmluZSBERUNMQVJFX0dMT0JBTFNfSEVSRQpAQCAtNzUsOSArNzYsNiBAQAogbW9kdWxlX3BhcmFtKGNpZnNfbWF4X3BlbmRpbmcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNpZnNfbWF4X3BlbmRpbmcsIlNpbXVsdGFuZW91cyByZXF1ZXN0cyB0byBzZXJ2ZXIuIERlZmF1bHQ6IDUwIFJhbmdlOiAyIHRvIDI1NiIpOwogCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNpZnNfb3Bsb2NrX2V4aXRlZCk7Ci1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNpZnNfZG5vdGlmeV9leGl0ZWQpOwotCiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3NtX3JlcV9wb29scDsKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwOwogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19taWRfcG9vbHA7CkBAIC04NDEsMTAgKzgzOSw2IEBACiAJX191MTYgIG5ldGZpZDsKIAlpbnQgcmM7CiAKLQlkYWVtb25pemUoImNpZnNvcGxvY2tkIik7Ci0JYWxsb3dfc2lnbmFsKFNJR1RFUk0pOwotCi0Jb3Bsb2NrVGhyZWFkID0gY3VycmVudDsKIAlkbyB7CiAJCWlmICh0cnlfdG9fZnJlZXplKCkpIAogCQkJY29udGludWU7CkBAIC05MDAsOSArODk0LDkgQEAKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOyAgLyogeWllbGQgaW4gY2FzZSBxIHdlcmUgY29ycnVwdCAqLwogCQl9Ci0JfSB3aGlsZSghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOwotCW9wbG9ja1RocmVhZCA9IE5VTEw7Ci0JY29tcGxldGVfYW5kX2V4aXQgKCZjaWZzX29wbG9ja19leGl0ZWQsIDApOworCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2lmc19kbm90aWZ5X3RocmVhZCh2b2lkICogZHVtbXlhcmcpCkBAIC05MTAsMTAgKzkwNCw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCXN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzOwogCi0JZGFlbW9uaXplKCJjaWZzZG5vdGlmeWQiKTsKLQlhbGxvd19zaWduYWwoU0lHVEVSTSk7Ci0KLQlkbm90aWZ5VGhyZWFkID0gY3VycmVudDsKIAlkbyB7CiAJCWlmKHRyeV90b19mcmVlemUoKSkKIAkJCWNvbnRpbnVlOwpAQCAtOTMxLDggKzkyMSw5IEBACiAJCQkJd2FrZV91cF9hbGwoJnNlcy0+c2VydmVyLT5yZXNwb25zZV9xKTsKIAkJfQogCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JfSB3aGlsZSghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOwotCWNvbXBsZXRlX2FuZF9leGl0ICgmY2lmc19kbm90aWZ5X2V4aXRlZCwgMCk7CisJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2luaXQKQEAgLTk4MiwzMiArOTczLDQ4IEBACiAJfQogCiAJcmMgPSBjaWZzX2luaXRfaW5vZGVjYWNoZSgpOwotCWlmICghcmMpIHsKLQkJcmMgPSBjaWZzX2luaXRfbWlkcygpOwotCQlpZiAoIXJjKSB7Ci0JCQlyYyA9IGNpZnNfaW5pdF9yZXF1ZXN0X2J1ZnMoKTsKLQkJCWlmICghcmMpIHsKLQkJCQlyYyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNpZnNfZnNfdHlwZSk7Ci0JCQkJaWYgKCFyYykgeyAgICAgICAgICAgICAgICAKLQkJCQkJcmMgPSAoaW50KWtlcm5lbF90aHJlYWQoY2lmc19vcGxvY2tfdGhyZWFkLCBOVUxMLCAKLQkJCQkJCUNMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9WTSk7Ci0JCQkJCWlmKHJjID4gMCkgewotCQkJCQkJcmMgPSAoaW50KWtlcm5lbF90aHJlYWQoY2lmc19kbm90aWZ5X3RocmVhZCwgTlVMTCwKLQkJCQkJCQlDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgQ0xPTkVfVk0pOwotCQkJCQkJaWYocmMgPiAwKQotCQkJCQkJCXJldHVybiAwOwotCQkJCQkJZWxzZQotCQkJCQkJCWNFUlJPUigxLCgiZXJyb3IgJWQgY3JlYXRlIGRub3RpZnkgdGhyZWFkIiwgcmMpKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNFUlJPUigxLCgiZXJyb3IgJWQgY3JlYXRlIG9wbG9jayB0aHJlYWQiLHJjKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJY2lmc19kZXN0cm95X3JlcXVlc3RfYnVmcygpOwotCQkJfQotCQkJY2lmc19kZXN0cm95X21pZHMoKTsKLQkJfQotCQljaWZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOworCWlmIChyYykKKwkJZ290byBvdXRfY2xlYW5fcHJvYzsKKworCXJjID0gY2lmc19pbml0X21pZHMoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2Rlc3Ryb3lfaW5vZGVjYWNoZTsKKworCXJjID0gY2lmc19pbml0X3JlcXVlc3RfYnVmcygpOworCWlmIChyYykKKwkJZ290byBvdXRfZGVzdHJveV9taWRzOworCisJcmMgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjaWZzX2ZzX3R5cGUpOworCWlmIChyYykKKwkJZ290byBvdXRfZGVzdHJveV9yZXF1ZXN0X2J1ZnM7CisKKwlvcGxvY2tUaHJlYWQgPSBrdGhyZWFkX3J1bihjaWZzX29wbG9ja190aHJlYWQsIE5VTEwsICJjaWZzb3Bsb2NrZCIpOworCWlmIChJU19FUlIob3Bsb2NrVGhyZWFkKSkgeworCQlyYyA9IFBUUl9FUlIob3Bsb2NrVGhyZWFkKTsKKwkJY0VSUk9SKDEsKCJlcnJvciAlZCBjcmVhdGUgb3Bsb2NrIHRocmVhZCIsIHJjKSk7CisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfZmlsZXN5c3RlbTsKIAl9CisKKwlkbm90aWZ5VGhyZWFkID0ga3RocmVhZF9ydW4oY2lmc19kbm90aWZ5X3RocmVhZCwgTlVMTCwgImNpZnNkbm90aWZ5ZCIpOworCWlmIChJU19FUlIoZG5vdGlmeVRocmVhZCkpIHsKKwkJcmMgPSBQVFJfRVJSKGRub3RpZnlUaHJlYWQpOworCQljRVJST1IoMSwoImVycm9yICVkIGNyZWF0ZSBkbm90aWZ5IHRocmVhZCIsIHJjKSk7CisJCWdvdG8gb3V0X3N0b3Bfb3Bsb2NrX3RocmVhZDsKKwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9zdG9wX29wbG9ja190aHJlYWQ6CisJa3RocmVhZF9zdG9wKG9wbG9ja1RocmVhZCk7Cisgb3V0X3VucmVnaXN0ZXJfZmlsZXN5c3RlbToKKwl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNpZnNfZnNfdHlwZSk7Cisgb3V0X2Rlc3Ryb3lfcmVxdWVzdF9idWZzOgorCWNpZnNfZGVzdHJveV9yZXF1ZXN0X2J1ZnMoKTsKKyBvdXRfZGVzdHJveV9taWRzOgorCWNpZnNfZGVzdHJveV9taWRzKCk7Cisgb3V0X2Rlc3Ryb3lfaW5vZGVjYWNoZToKKwljaWZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOworIG91dF9jbGVhbl9wcm9jOgogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJY2lmc19wcm9jX2NsZWFuKCk7CiAjZW5kaWYKQEAgLTEwMjUsMTQgKzEwMzIsOCBAQAogCWNpZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJY2lmc19kZXN0cm95X21pZHMoKTsKIAljaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKCk7Ci0JaWYob3Bsb2NrVGhyZWFkKSB7Ci0JCXNlbmRfc2lnKFNJR1RFUk0sIG9wbG9ja1RocmVhZCwgMSk7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNpZnNfb3Bsb2NrX2V4aXRlZCk7Ci0JfQotCWlmKGRub3RpZnlUaHJlYWQpIHsKLQkJc2VuZF9zaWcoU0lHVEVSTSwgZG5vdGlmeVRocmVhZCwgMSk7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNpZnNfZG5vdGlmeV9leGl0ZWQpOwotCX0KKwlrdGhyZWFkX3N0b3Aob3Bsb2NrVGhyZWFkKTsKKwlrdGhyZWFkX3N0b3AoZG5vdGlmeVRocmVhZCk7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlIEZyZW5jaCA8c2ZyZW5jaEB1cy5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggNGU4MjlkYy4uYzk4NzU1ZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC05OSw1ICs5OSw1IEBACiBleHRlcm4gc3NpemVfdAljaWZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKIGV4dGVybiBpbnQgY2lmc19pb2N0bCAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZXAsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS40MiIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNDMiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCAyODc5YmEzLi4zMTBlYTJmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQkJY29uc3QgaW50IHdhaXRGbGFnKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlBvc2l4TG9jayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgX191MTYgc21iX2ZpbGVfaWQsIGNvbnN0IGludCBnZXRfZmxhZywKLQkJCWNvbnN0IF9fdTY0IGxlbiwgY29uc3QgX191NjQgb2Zmc2V0LCAKKwkJCWNvbnN0IF9fdTY0IGxlbiwgc3RydWN0IGZpbGVfbG9jayAqLCAKIAkJCWNvbnN0IF9fdTE2IGxvY2tfdHlwZSwgY29uc3QgaW50IHdhaXRGbGFnKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlREaXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbik7CiBleHRlcm4gaW50IENJRlNTTUJMb2dvZmYoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCBkNzA1NTAwLi45MjU4ODFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMTM1NSw3ICsxMzU1LDggQEAKIGludAogQ0lGU1NNQlBvc2l4TG9jayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQljb25zdCBfX3UxNiBzbWJfZmlsZV9pZCwgY29uc3QgaW50IGdldF9mbGFnLCBjb25zdCBfX3U2NCBsZW4sCi0JCWNvbnN0IF9fdTY0IGxrb2Zmc2V0LCBjb25zdCBfX3UxNiBsb2NrX3R5cGUsIGNvbnN0IGludCB3YWl0RmxhZykKKwkJc3RydWN0IGZpbGVfbG9jayAqcExvY2tEYXRhLCBjb25zdCBfX3UxNiBsb2NrX3R5cGUsIAorCQljb25zdCBpbnQgd2FpdEZsYWcpCiB7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NmaV9yZXEgKnBTTUIgID0gTlVMTDsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JzcCAqcFNNQnIgPSBOVUxMOwpAQCAtMTM2Niw2ICsxMzY3LDEwIEBACiAJX191MTYgcGFyYW1zLCBwYXJhbV9vZmZzZXQsIG9mZnNldCwgYnl0ZV9jb3VudCwgY291bnQ7CiAKIAljRllJKDEsICgiUG9zaXggTG9jayIpKTsKKworCWlmKHBMb2NrRGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gRUlOVkFMOworCiAJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CiAKIAlpZiAocmMpCkBAIC0xNDA0LDEwICsxNDA5LDEwIEBACiAKIAlwYXJtX2RhdGEtPmxvY2tfdHlwZSA9IGNwdV90b19sZTE2KGxvY2tfdHlwZSk7CiAJaWYod2FpdEZsYWcpCi0JCXBhcm1fZGF0YS0+bG9ja19mbGFncyA9IDE7CisJCXBhcm1fZGF0YS0+bG9ja19mbGFncyA9IGNwdV90b19sZTE2KDEpOwogCXBhcm1fZGF0YS0+cGlkID0gY3B1X3RvX2xlMzIoY3VycmVudC0+dGdpZCk7Ci0JcGFybV9kYXRhLT5zdGFydCA9IGxrb2Zmc2V0OwotCXBhcm1fZGF0YS0+bGVuZ3RoID0gbGVuOyAgLyogbm9ybWFsaXplIG5lZ2F0aXZlIG51bWJlcnMgKi8KKwlwYXJtX2RhdGEtPnN0YXJ0ID0gY3B1X3RvX2xlNjQocExvY2tEYXRhLT5mbF9zdGFydCk7CisJcGFybV9kYXRhLT5sZW5ndGggPSBjcHVfdG9fbGU2NChsZW4pOyAgLyogbm9ybWFsaXplIG5lZ2F0aXZlIG51bWJlcnMgKi8KIAogCXBTTUItPkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOwogCXBTTUItPkZpZCA9IHNtYl9maWxlX2lkOwpAQCAtMTQxOSw4ICsxNDI0LDMzIEBACiAJCQkoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFBvc2l4IExvY2sgPSAlZCIsIHJjKSk7Ci0JfQorCX0gZWxzZSBpZiAoZ2V0X2ZsYWcpIHsKKwkJLyogbG9jayBzdHJ1Y3R1cmUgY2FuIGJlIHJldHVybmVkIG9uIGdldCAqLworCQlfX3UxNiBkYXRhX29mZnNldDsKKwkJX191MTYgZGF0YV9jb3VudDsKKwkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKKwkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgc2l6ZW9mKHN0cnVjdCBjaWZzX3Bvc2l4X2xvY2spKSkgeworCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KKwkJCWdvdG8gcGxrX2Vycl9leGl0OworCQl9CisJCWlmKHBMb2NrRGF0YSA9PSBOVUxMKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIHBsa19lcnJfZXhpdDsKKwkJfQorCQlkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKKwkJZGF0YV9jb3VudCAgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YUNvdW50KTsKKwkJaWYoZGF0YV9jb3VudCA8IHNpemVvZihzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrKSkgeworCQkJcmMgPSAtRUlPOworCQkJZ290byBwbGtfZXJyX2V4aXQ7CisJCX0KKwkJcGFybV9kYXRhID0gKHN0cnVjdCBjaWZzX3Bvc2l4X2xvY2sgKikKKwkJCSgoY2hhciAqKSZwU01Cci0+aGRyLlByb3RvY29sICsgZGF0YV9vZmZzZXQpOworCQlpZihwYXJtX2RhdGEtPmxvY2tfdHlwZSA9PSBjcHVfdG9fbGUxNihDSUZTX1VOTENLKSkKKwkJCXBMb2NrRGF0YS0+ZmxfdHlwZSA9IEZfVU5MQ0s7CisJfQorIAorcGxrX2Vycl9leGl0OgogCWlmIChwU01CKQogCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOwogCkBAIC0zMTE5LDcgKzMxNDksNyBAQAogCQkJCXBzcmNoX2luZi0+ZW5kT2ZTZWFyY2ggPSBGQUxTRTsKIAogCQkJcHNyY2hfaW5mLT5lbnRyaWVzX2luX2J1ZmZlciAgPSBsZTE2X3RvX2NwdShwYXJtcy0+U2VhcmNoQ291bnQpOwotCQkJcHNyY2hfaW5mLT5pbmRleF9vZl9sYXN0X2VudHJ5ID0gCisJCQlwc3JjaF9pbmYtPmluZGV4X29mX2xhc3RfZW50cnkgPSAyIC8qIHNraXAgLiBhbmQgLi4gKi8gKwogCQkJCXBzcmNoX2luZi0+ZW50cmllc19pbl9idWZmZXI7CiAJCQkqcG5ldGZpZCA9IHBhcm1zLT5TZWFyY2hIYW5kbGU7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDBiODZkNWMuLmJhZTE0NzkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0yMTQ4LDYgKzIxNDgsOCBAQAogLyogV2UgbG9vayBmb3Igb2J2aW91cyBtZXNzZWQgdXAgYmNjIG9yIHN0cmluZ3MgaW4gcmVzcG9uc2Ugc28gd2UgZG8gbm90IGdvIG9mZgogICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgIHRlcm1pbmF0aW5nIGxhc3QgVW5pY29kZSBzdHJpbmcgaW4gcmVzcG9uc2UgICovCisJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJc2VzLT5zZXJ2ZXJPUyA9IGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYoc2VzLT5zZXJ2ZXJPUyA9PSBOVUxMKQogCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIxNjAsNiArMjE2Miw4IEBACiAJCQkJaWYgKHJlbWFpbmluZ193b3JkcyA+IDApIHsKIAkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKWJjY19wdHIsCiAJCQkJCQkJIHJlbWFpbmluZ193b3Jkcy0xKTsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCXNlcy0+c2VydmVyTk9TID0ga3phbGxvYygyICogKGxlbiArIDEpLEdGUF9LRVJORUwpOwogCQkJCQlpZihzZXMtPnNlcnZlck5PUyA9PSBOVUxMKQogCQkJCQkJZ290byBzZXNzc2V0dXBfbm9tZW07CkBAIC0yMTc3LDYgKzIxODEsOCBAQAogCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwogICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIGlzIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChmb3IgZS5nLiBmb3IgV2luZG93cyBYUCAmIDIwMDApICovCisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkgICAga3phbGxvYygyKihsZW4rMSksR0ZQX0tFUk5FTCk7CiAJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbiA9PSBOVUxMKQpAQCAtMjE4NywxNSArMjE5MywyMiBAQAogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW5bMipsZW5dID0gMDsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluWzErKDIqbGVuKV0gPSAwOwogCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCi0JCQkJCWVsc2UKKwkJCQkJZWxzZSB7CisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IAogCQkJCQkJCWt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCX0KIAkJCQl9IGVsc2UgewkvKiBubyByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gYW5kIE5PUyBzdHJpbmcgKi8KIAkJCQkJLyogaWYgdGhlc2Uga2NhbGxvY3MgZmFpbCBub3QgbXVjaCB3ZQogCQkJCQkgICBjYW4gZG8sIGJ1dCBiZXR0ZXIgdG8gbm90IGZhaWwgdGhlCiAJCQkJCSAgIHNlc3NzZXR1cCBpdHNlbGYgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJICAgIGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCSAgICBremFsbG9jKDIsIEdGUF9LRVJORUwpOwogCQkJCX0KQEAgLTIyMDQsNiArMjIxNyw4IEBACiAJCQkJaWYgKCgobG9uZykgYmNjX3B0ciArIGxlbikgLSAobG9uZykKIAkJCQkgICAgcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpCiAJCQkJCSAgICA8PSBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0ga3phbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOwogCQkJCQlpZihzZXMtPnNlcnZlck9TID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIyMTQsNiArMjIyOSw4IEBACiAJCQkJCWJjY19wdHIrKzsKIAogCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHNlcy0+c2VydmVyTk9TID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIyMjMsNiArMjI0MCw4IEBACiAJCQkJCWJjY19wdHIrKzsKIAogCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTI0MjcsNiArMjQ0Niw4IEBACiAvKiBXZSBsb29rIGZvciBvYnZpb3VzIG1lc3NlZCB1cCBiY2Mgb3Igc3RyaW5ncyBpbiByZXNwb25zZSBzbyB3ZSBkbyBub3QgZ28gb2ZmCiAgICB0aGUgZW5kIHNpbmNlIChhdCBsZWFzdCkgV0lOMksgYW5kIFdpbmRvd3MgWFAgaGF2ZSBhIG1ham9yIGJ1ZyBpbiBub3QgbnVsbAogICAgdGVybWluYXRpbmcgbGFzdCBVbmljb2RlIHN0cmluZyBpbiByZXNwb25zZSAgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLApAQCAtMjQ0MSw2ICsyNDYyLDggQEAKIAkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKiliY2NfcHRyLAogCQkJCQkJCQkgcmVtYWluaW5nX3dvcmRzCiAJCQkJCQkJCSAtIDEpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPQogCQkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwKIAkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CkBAIC0yNDU0LDcgKzI0NzcsOSBAQAogCQkJCQkJcmVtYWluaW5nX3dvcmRzIC09IGxlbiArIDE7CiAJCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0ciwgcmVtYWluaW5nX3dvcmRzKTsJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIG5vdCBudWxsIHRlcm1pbmF0ZWQgKGUuZy5XaW5kb3dzIFhQLzIwMDApICovCisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MoMioobGVuKzEpLEdGUF9LRVJORUwpOwogCQkJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlckRvbWFpbiwKIAkJCQkJCQkgICAgIChfX2xlMTYgKiliY2NfcHRyLCAKQEAgLTI0NjMsMTEgKzI0ODgsMTggQEAKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpblsyKmxlbl0gPSAwOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluWzErKDIqbGVuKV0gPSAwOwogCQkJCQkJfSAvKiBlbHNlIG5vIG1vcmUgcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIHN0cmluZyAqLwotCQkJCQkJZWxzZQorCQkJCQkJZWxzZSB7CisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkJICAgIGt6YWxsb2MoMixHRlBfS0VSTkVMKTsKLQkJCQkJfSBlbHNlIHsJLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCisJCQkJCQl9CisJCQkJCX0gZWxzZSB7Lyogbm8gcm9vbSB1c2UgZHVtbXkgZG9tYWluJk5PUyAqLworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKDIsIEdGUF9LRVJORUwpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKDIsIEdGUF9LRVJORUwpOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsJLyogQVNDSUkgKi8KQEAgLTI0NzYsNiArMjUwOCw4IEBACiAJCQkJCWlmICgoKGxvbmcpIGJjY19wdHIgKyBsZW4pIC0gKGxvbmcpCiAJCQkJCSAgICBwQnl0ZUFyZWEoc21iX2J1ZmZlcl9yZXNwb25zZSkKIAkJCQkJICAgIDw9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSkgeworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAkJCQkJCXNlcy0+c2VydmVyT1MgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck9TLCBiY2NfcHRyLCBsZW4pOwogCkBAIC0yNDg0LDYgKzI1MTgsOCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyTk9TLCBiY2NfcHRyLCBsZW4pOwogCQkJCQkJYmNjX3B0ciArPSBsZW47CkBAIC0yNDkxLDYgKzI1MjcsOCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlckRvbWFpbiwgYmNjX3B0ciwgbGVuKTsKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMjcyOCw2ICsyNzY2LDggQEAKIC8qIFdlIGxvb2sgZm9yIG9idmlvdXMgbWVzc2VkIHVwIGJjYyBvciBzdHJpbmdzIGluIHJlc3BvbnNlIHNvIHdlIGRvIG5vdCBnbyBvZmYKICAgIHRoZSBlbmQgc2luY2UgKGF0IGxlYXN0KSBXSU4ySyBhbmQgV2luZG93cyBYUCBoYXZlIGEgbWFqb3IgYnVnIGluIG5vdCBudWxsCiAgICB0ZXJtaW5hdGluZyBsYXN0IFVuaWNvZGUgc3RyaW5nIGluIHJlc3BvbnNlICAqLworCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCXNlcy0+c2VydmVyT1MgPQogCQkJCQkgICAga3phbGxvYygyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKIAkJCQkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+c2VydmVyT1MsCkBAIC0yNzQzLDYgKzI3ODMsOCBAQAogCQkJCQkJCQkgYmNjX3B0ciwKIAkJCQkJCQkJIHJlbWFpbmluZ193b3JkcwogCQkJCQkJCQkgLSAxKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKDIgKiAobGVuICsgMSksCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjc2MCw2ICsyODAyLDggQEAKIAkJCQkJCWlmIChyZW1haW5pbmdfd29yZHMgPiAwKSB7CiAJCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwkKICAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKwkJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCQkgICAga3phbGxvYygyICoKIAkJCQkJCQkJICAgIChsZW4gKwpAQCAtMjc3NywxMyArMjgyMSwyMCBAQAogCQkJCQkJCQlbMSArICgyICogbGVuKV0KIAkJCQkJCQkgICAgPSAwOwogCQkJCQkJfSAvKiBlbHNlIG5vIG1vcmUgcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIHN0cmluZyAqLwotCQkJCQkJZWxzZQorCQkJCQkJZWxzZSB7CisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkJICAgIGt6YWxsb2MoMiwKIAkJCQkJCQkJICAgIEdGUF9LRVJORUwpOworCQkJCQkJfQogCQkJCQl9IGVsc2UgewkvKiBubyByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gYW5kIE5PUyBzdHJpbmcgKi8KKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKTsKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkgICAga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKDIsIEdGUF9LRVJORUwpOwogCQkJCQl9CkBAIC0yNzkyLDYgKzI4NDMsOCBAQAogCQkJCQlpZiAoKChsb25nKSBiY2NfcHRyICsgbGVuKSAtIChsb25nKQogCQkJCQkgICAgcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpCiAJCQkJCSAgICA8PSBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKKwkJCQkJCWlmKHNlcy0+c2VydmVyT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJCSAgICBremFsbG9jKGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjgwMyw2ICsyODU2LDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjgxMiw2ICsyODY3LDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCSAgICBremFsbG9jKGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMzExNiw2ICszMTczLDggQEAKIC8qIFdlIGxvb2sgZm9yIG9idmlvdXMgbWVzc2VkIHVwIGJjYyBvciBzdHJpbmdzIGluIHJlc3BvbnNlIHNvIHdlIGRvIG5vdCBnbyBvZmYKICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgdGVybWluYXRpbmcgbGFzdCBVbmljb2RlIHN0cmluZyBpbiByZXNwb25zZSAgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLApAQCAtMzEzMSw2ICszMTkwLDggQEAKIAkJCQkJCQkJIGJjY19wdHIsCiAJCQkJCQkJCSByZW1haW5pbmdfd29yZHMKIAkJCQkJCQkJIC0gMSk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCQkgICAga3phbGxvYygyICogKGxlbiArIDEpLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTMxNDcsNiArMzIwOCw4IEBACiAJCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0ciwgcmVtYWluaW5nX3dvcmRzKTsJCiAgICAgIC8qIGxhc3Qgc3RyaW5nIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKwkJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCQkgICAga3phbGxvYygyICoKIAkJCQkJCQkJICAgIChsZW4gKwpAQCAtMzE3MiwxMCArMzIzNSwxNyBAQAogCQkJCQkJCQkJICBsZW4pXQogCQkJCQkJCSAgICA9IDA7CiAJCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCi0JCQkJCQllbHNlCisJCQkJCQllbHNlIHsKKwkJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga3phbGxvYygyLEdGUF9LRVJORUwpOworCQkJCQkJfQogCQkJCQl9IGVsc2UgeyAgLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewkvKiBBU0NJSSAqLwpAQCAtMzE4Myw2ICszMjUzLDggQEAKIAkJCQkJaWYgKCgobG9uZykgYmNjX3B0ciArIGxlbikgLSAKICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwQnl0ZUFyZWEoc21iX2J1ZmZlcl9yZXNwb25zZSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CisJCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGt6YWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJPUyxiY2NfcHRyLCBsZW4pOwogCkBAIC0zMTkxLDYgKzMyNjMsOCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbisxLEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsJCiAJCQkJCQliY2NfcHRyICs9IGxlbjsKQEAgLTMxOTgsNiArMzI3Miw4IEBACiAJCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MobGVuKzEsR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyRG9tYWluLCBiY2NfcHRyLCBsZW4pOwogCQkJCQkJYmNjX3B0ciArPSBsZW47CkBAIC0zMjgyLDcgKzMzNTgsOCBAQAogCQliY2NfcHRyKys7IC8qIGFsaWduICovCiAJfQogCi0JaWYoc2VzLT5zZXJ2ZXItPnNlY01vZGUgJiAoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQorCWlmKHNlcy0+c2VydmVyLT5zZWNNb2RlICYgCisJCQkoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQogCQlzbWJfYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkU7CiAKIAlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfU1RBVFVTMzIpIHsKQEAgLTMyOTQsOCArMzM3MSwxMCBAQAogCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CiAJCXNtYl9idWZmZXItPkZsYWdzMiB8PSBTTUJGTEcyX1VOSUNPREU7CiAJCWxlbmd0aCA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgdHJlZSwgMTAwLCBubHNfY29kZXBhZ2UpOwotCQliY2NfcHRyICs9IDIgKiBsZW5ndGg7CS8qIGNvbnZlcnQgbnVtIG9mIDE2IGJpdCB3b3JkcyB0byBieXRlcyAqLworCQkgICAgY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIHRyZWUsIAorCQkJNiAvKiBtYXggdXRmOCBjaGFyIGxlbmd0aCBpbiBieXRlcyAqLyAqIAorCQkJKC8qIHNlcnZlciBsZW4qLyArIDI1NiAvKiBzaGFyZSBsZW4gKi8pLCBubHNfY29kZXBhZ2UpOworCQliY2NfcHRyICs9IDIgKiBsZW5ndGg7CS8qIGNvbnZlcnQgbnVtIDE2IGJpdCB3b3JkcyB0byBieXRlcyAqLwogCQliY2NfcHRyICs9IDI7CS8qIHNraXAgdHJhaWxpbmcgbnVsbCAqLwogCX0gZWxzZSB7CQkvKiBBU0NJSSAqLwogCQlzdHJjcHkoYmNjX3B0ciwgdHJlZSk7CkBAIC0zNDQ3LDYgKzM1MjYsMTIgQEAKIAkJCXBTZXNJbmZvLT5zZXJ2ZXItPnNlY01vZGUsCiAJCQlwU2VzSW5mby0+c2VydmVyLT5jYXBhYmlsaXRpZXMsCiAJCQlwU2VzSW5mby0+c2VydmVyLT50aW1lWm9uZSkpOworI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorCQlpZihleHBlcmltRW5hYmxlZCA+IDEpCisJCQlyYyA9IENJRlNfU2Vzc1NldHVwKHhpZCwgcFNlc0luZm8sIENJRlNfTlRMTSAvKiB0eXBlICovLAorCQkJCQkgICAgJm50bG12Ml9mbGFnLCBubHNfaW5mbyk7CQorCQllbHNlCisjZW5kaWYKIAkJaWYgKGV4dGVuZGVkX3NlY3VyaXR5CiAJCQkJJiYgKHBTZXNJbmZvLT5jYXBhYmlsaXRpZXMgJiBDQVBfRVhURU5ERURfU0VDVVJJVFkpCiAJCQkJJiYgKHBTZXNJbmZvLT5zZXJ2ZXItPnNlY1R5cGUgPT0gTlRMTVNTUCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IDFkMGNhM2UuLjgyMzE1ZWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTM5LDkgKzEzOSw3IEBACiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMxNiw5ICszMTQsNyBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQltdXRleF9sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKQogCQlyYyA9IC1FTk9NRU07CiAJZWxzZSBpZiAocFRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpIHsKQEAgLTQ0MCw2ICs0MzYsMjAgQEAKIAljaWZzX3NiID0gQ0lGU19TQihwYXJlbnRfZGlyX2lub2RlLT5pX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKKwkvKgorCSAqIERvbid0IGFsbG93IHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIGluIGEgcGF0aCBjb21wb25lbnQuCisJICogVGhlIFZGUyB3aWxsIG5vdCBhbGxvdyAiLyIsIGJ1dCAiXCIgaXMgYWxsb3dlZCBieSBwb3NpeC4KKwkgKi8KKwlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfUE9TSVhfUEFUSFMpKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgZGlyZW50cnktPmRfbmFtZS5sZW47IGkrKykKKwkJCWlmIChkaXJlbnRyeS0+ZF9uYW1lLm5hbWVbaV0gPT0gJ1xcJykgeworCQkJCWNGWUkoMSwgKCJJbnZhbGlkIGZpbGUgbmFtZSIpKTsKKwkJCQlGcmVlWGlkKHhpZCk7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCQl9CisJfQorCiAJLyogY2FuIG5vdCBncmFiIHRoZSByZW5hbWUgc2VtIGhlcmUgc2luY2UgaXQgd291bGQKIAlkZWFkbG9jayBpbiB0aGUgY2FzZXMgKGJlZ2lubmluZyBvZiBzeXNfcmVuYW1lIGl0c2VsZikKIAlpbiB3aGljaCB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNiIHJlbmFtZSBzZW0gKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmNudGwuYyBiL2ZzL2NpZnMvZmNudGwuYwppbmRleCBlYzRkZmU5Li42MzNhOTM4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZjbnRsLmMKKysrIGIvZnMvY2lmcy9mY250bC5jCkBAIC04Niw5ICs4Niw3IEBACiAJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOwotCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IDVjNDk3YzUuLmUyYjRjZTEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC04NCw2ICs4NCw4IEBACiAJCXJldHVybiBGSUxFX09WRVJXUklURV9JRjsKIAllbHNlIGlmICgoZmxhZ3MgJiBPX0NSRUFUKSA9PSBPX0NSRUFUKQogCQlyZXR1cm4gRklMRV9PUEVOX0lGOworCWVsc2UgaWYgKChmbGFncyAmIE9fVFJVTkMpID09IE9fVFJVTkMpCisJCXJldHVybiBGSUxFX09WRVJXUklURTsKIAllbHNlCiAJCXJldHVybiBGSUxFX09QRU47CiB9CkBAIC0yMDMsOSArMjA1LDcgQEAKIAkJfQogCX0KIAotCW11dGV4X2xvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NTgsNyArNjU4LDcgQEAKIAkJCWVsc2UKIAkJCQlwb3NpeF9sb2NrX3R5cGUgPSBDSUZTX1dSTENLOwogCQkJcmMgPSBDSUZTU01CUG9zaXhMb2NrKHhpZCwgcFRjb24sIG5ldGZpZCwgMSAvKiBnZXQgKi8sCi0JCQkJCWxlbmd0aCwJcGZMb2NrLT5mbF9zdGFydCwKKwkJCQkJbGVuZ3RoLAlwZkxvY2ssCiAJCQkJCXBvc2l4X2xvY2tfdHlwZSwgd2FpdF9mbGFnKTsKIAkJCUZyZWVYaWQoeGlkKTsKIAkJCXJldHVybiByYzsKQEAgLTcwNiw3ICs3MDYsNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl9CiAJCXJjID0gQ0lGU1NNQlBvc2l4TG9jayh4aWQsIHBUY29uLCBuZXRmaWQsIDAgLyogc2V0ICovLAotCQkJCSAgICAgIGxlbmd0aCwgcGZMb2NrLT5mbF9zdGFydCwKKwkJCQkgICAgICBsZW5ndGgsIHBmTG9jaywKIAkJCQkgICAgICBwb3NpeF9sb2NrX3R5cGUsIHdhaXRfZmxhZyk7CiAJfSBlbHNlCiAJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCBwVGNvbiwgbmV0ZmlkLCBsZW5ndGgsIHBmTG9jay0+Zmxfc3RhcnQsCkBAIC05MDYsOSArOTA2LDEwIEBACiAJCQkJaWYgKHJjICE9IDApCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJLyogQkIgRklYTUUgV2UgY2FuIG5vdCBzaWduIGFjcm9zcyB0d28gYnVmZmVycyB5ZXQgKi8KLQkJCWlmKChwVGNvbi0+c2VzLT5zZXJ2ZXItPnNlY01vZGUgJiAKLQkJCSAoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKSA9PSAwKSB7CisJCQlpZihleHBlcmltRW5hYmxlZCB8fCAocFRjb24tPnNlcy0+c2VydmVyICYmCisJCQkJKChwVGNvbi0+c2VzLT5zZXJ2ZXItPnNlY01vZGUgJiAKKwkJCQkoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQorCQkJCT09IDApKSkgewogCQkJCXN0cnVjdCBrdmVjIGlvdlsyXTsKIAkJCQl1bnNpZ25lZCBpbnQgbGVuOwogCkBAIC05MjMsMTMgKzkyNCwxMyBAQAogCQkJCQkJKnBvZmZzZXQsICZieXRlc193cml0dGVuLAogCQkJCQkJaW92LCAxLCBsb25nX29wKTsKIAkJCX0gZWxzZQotCQkJLyogQkIgRklYTUUgZml4dXAgaW5kZW50YXRpb24gb2YgbGluZSBiZWxvdyAqLwotCQkJcmMgPSBDSUZTU01CV3JpdGUoeGlkLCBwVGNvbiwKLQkJCQkgb3Blbl9maWxlLT5uZXRmaWQsCi0JCQkJIG1pbl90KGNvbnN0IGludCwgY2lmc19zYi0+d3NpemUsIAotCQkJCSAgICAgICB3cml0ZV9zaXplIC0gdG90YWxfd3JpdHRlbiksCi0JCQkJICpwb2Zmc2V0LCAmYnl0ZXNfd3JpdHRlbiwKLQkJCQkgd3JpdGVfZGF0YSArIHRvdGFsX3dyaXR0ZW4sIE5VTEwsIGxvbmdfb3ApOworCQkJCXJjID0gQ0lGU1NNQldyaXRlKHhpZCwgcFRjb24sCisJCQkJCSBvcGVuX2ZpbGUtPm5ldGZpZCwKKwkJCQkJIG1pbl90KGNvbnN0IGludCwgY2lmc19zYi0+d3NpemUsCisJCQkJCSAgICAgICB3cml0ZV9zaXplIC0gdG90YWxfd3JpdHRlbiksCisJCQkJCSAqcG9mZnNldCwgJmJ5dGVzX3dyaXR0ZW4sCisJCQkJCSB3cml0ZV9kYXRhICsgdG90YWxfd3JpdHRlbiwKKwkJCQkJIE5VTEwsIGxvbmdfb3ApOwogCQl9CiAJCWlmIChyYyB8fCAoYnl0ZXNfd3JpdHRlbiA9PSAwKSkgewogCQkJaWYgKHRvdGFsX3dyaXR0ZW4pCkBAIC05NjgsNiArOTY5LDE2IEBACiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlOwogCWludCByYzsKIAorCS8qIEhhdmluZyBhIG51bGwgaW5vZGUgaGVyZSAoYmVjYXVzZSBtYXBwaW5nLT5ob3N0IHdhcyBzZXQgdG8gemVybyBieQorCXRoZSBWRlMgb3IgTU0pIHNob3VsZCBub3QgaGFwcGVuIGJ1dCB3ZSBoYWQgcmVwb3J0cyBvZiBvbiBvb3BzIChkdWUgdG8KKwlpdCBiZWluZyB6ZXJvKSBkdXJpbmcgc3RyZXNzIHRlc3RjYXNlcyBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBpdCAqLworCisJaWYoY2lmc19pbm9kZSA9PSBOVUxMKSB7CisJCWNFUlJPUigxLCgiTnVsbCBpbm9kZSBwYXNzZWQgdG8gY2lmc193cml0ZWFibGVfZmlsZSIpKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkob3Blbl9maWxlLCAmY2lmc19pbm9kZS0+b3BlbkZpbGVMaXN0LCBmbGlzdCkgewogCQlpZiAob3Blbl9maWxlLT5jbG9zZVBlbmQpCkBAIC0xMDkzLDEyICsxMTA0LDExIEBACiAJaWYgKGNpZnNfc2ItPndzaXplIDwgUEFHRV9DQUNIRV9TSVpFKQogCQlyZXR1cm4gZ2VuZXJpY193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7CiAKLQkvKiBCQiBGSVhNRSB3ZSBkbyBub3QgaGF2ZSBjb2RlIHRvIHNpZ24gYWNyb3NzIG11bHRpcGxlIGJ1ZmZlcnMgeWV0LAotCSAgIHNvIGdvIHRvIG9sZGVyIHdyaXRlcGFnZSBzdHlsZSB3cml0ZSB3aGljaCB3ZSBjYW4gc2lnbiBpZiBuZWVkZWQgKi8KIAlpZigoY2lmc19zYi0+dGNvbi0+c2VzKSAmJiAoY2lmc19zYi0+dGNvbi0+c2VzLT5zZXJ2ZXIpKQogCQlpZihjaWZzX3NiLT50Y29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCi0JCQlyZXR1cm4gZ2VuZXJpY193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7CisJCQlpZighZXhwZXJpbUVuYWJsZWQpCisJCQkJcmV0dXJuIGdlbmVyaWNfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMpOwogCiAJLyoKIAkgKiBCQjogSXMgdGhpcyBtZWFuaW5nZnVsIGZvciBhIG5vbi1ibG9jay1kZXZpY2UgZmlsZSBzeXN0ZW0/CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggOTU3ZGRkMS4uNDA5Mzc2NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtNzIyLDkgKzcyMiw3IEBACiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC04MDcsOSArODA1LDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExNDEsOSArMTEzNyw3IEBACiAJCQlyYyA9IDA7CiAJfQogCQkKLQltdXRleF9sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9saW5rLmMgYi9mcy9jaWZzL2xpbmsuYwppbmRleCA5NTYyZjViLi4yZWM5OWY4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2xpbmsuYworKysgYi9mcy9jaWZzL2xpbmsuYwpAQCAtNDgsMTAgKzQ4LDggQEAKIC8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIGNyb3NzIGRldmljZSBsaW5rcyBzaW5jZSBzZXJ2ZXIgd2lsbCBkbyB0aGF0CiAgICBCQiBub3RlIERGUyBjYXNlIGluIGZ1dHVyZSB0aG91Z2ggKHdoZW4gd2UgbWF5IGhhdmUgdG8gY2hlY2spICovCiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmcm9tTmFtZSA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkob2xkX2ZpbGUpOwogCXRvTmFtZSA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoKGZyb21OYW1lID09IE5VTEwpIHx8ICh0b05hbWUgPT0gTlVMTCkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGNpZnNfaGxfZXhpdDsKQEAgLTEwMyw5ICsxMDEsNyBAQAogCiAJeGlkID0gR2V0WGlkKCk7CiAKLQltdXRleF9sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCiAJaWYgKCFmdWxsX3BhdGgpCiAJCWdvdG8gb3V0X25vX2ZyZWU7CkBAIC0xNjQsOSArMTYwLDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbnRsbXNzcC5jIGIvZnMvY2lmcy9udGxtc3NwLmMKaW5kZXggNzg4NjZmOS4uMTE1MzU5YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9udGxtc3NwLmMKKysrIGIvZnMvY2lmcy9udGxtc3NwLmMKQEAgLTEyMSw2ICsxMjEsMjAgQEAKIAl9CiAKIAorCS8qIGNvcHkgc2Vzc2lvbiBrZXkgKi8KKworCS8qIGlmIFVuaWNvZGUsIGFsaWduIHN0cmluZ3MgdG8gdHdvIGJ5dGUgYm91bmRhcnkgKi8KKworCS8qIGNvcHkgdXNlciBuYW1lICovIC8qIEJCIERvIHdlIG5lZWQgdG8gc3BlY2lhbCBjYXNlIG51bGwgdXNlciBuYW1lPyAqLworCisJLyogY29weSBkb21haW4gbmFtZSAqLworCisJLyogY29weSBMaW51eCB2ZXJzaW9uICovCisKKwkvKiBjb3B5IG5ldHdvcmsgb3BlcmF0aW5nIHN5c3RlbSBuYW1lICovCisKKwkvKiB1cGRhdGUgYmNjIGFuZCBzbWIgYnVmZmVyIGxlbmd0aCAqLworCiAvKglyYyA9IFNlbmRSZWNlaXZlMih4aWQsIHNlcywgaW92LCBudW1faW92ZWNzLCAmcmVzcF9idWZfdHlwZSwgMCk7ICovCiAJLyogU01CIHJlcXVlc3QgYnVmIGZyZWVkIGluIFNlbmRSZWNlaXZlMiAqLwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IDJmNmUyODIuLmI2ODljNTAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvcmVhZGRpci5jCisrKyBiL2ZzL2NpZnMvcmVhZGRpci5jCkBAIC00MDQsOSArNDA0LDcgQEAKIAlpZihwVGNvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOwotCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU5Miw2ICs1OTAsMTMgQEAKIAlmaXJzdF9lbnRyeV9pbl9idWZmZXIgPSAKIAkJY2lmc0ZpbGUtPnNyY2hfaW5mLmluZGV4X29mX2xhc3RfZW50cnkgLSAKIAkJCWNpZnNGaWxlLT5zcmNoX2luZi5lbnRyaWVzX2luX2J1ZmZlcjsKKworCS8qIGlmIGZpcnN0IGVudHJ5IGluIGJ1ZiBpcyB6ZXJvIHRoZW4gaXMgZmlyc3QgYnVmZmVyCisJaW4gc2VhcmNoIHJlc3BvbnNlIGRhdGEgd2hpY2ggbWVhbnMgaXQgaXMgbGlrZWx5IC4gYW5kIC4uCisJd2lsbCBiZSBpbiB0aGlzIGJ1ZmZlciwgYWx0aG91Z2ggc29tZSBzZXJ2ZXJzIGRvIG5vdCByZXR1cm4KKwkuIGFuZCAuLiBmb3IgdGhlIHJvb3Qgb2YgYSBkcml2ZSBhbmQgZm9yIHRob3NlIHdlIG5lZWQKKwl0byBzdGFydCB0d28gZW50cmllcyBlYXJsaWVyICovCisKIC8qCWR1bXBfY2lmc19maWxlX3N0cnVjdChmaWxlLCAiSW4gZmNlICIpOyovCiAJaWYoKChpbmRleF90b19maW5kIDwgY2lmc0ZpbGUtPnNyY2hfaW5mLmluZGV4X29mX2xhc3RfZW50cnkpICYmIAogCSAgICAgaXNfZGlyX2NoYW5nZWQoZmlsZSkpIHx8IApAQCAtNjM0LDIzICs2MzksMTQgQEAKIAkJY2hhciAqIGVuZF9vZl9zbWIgPSBjaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0ICsgCiAJCQlzbWJDYWxjU2l6ZSgoc3RydWN0IHNtYl9oZHIgKikKIAkJCQljaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0KTsKKworCQljdXJyZW50X2VudHJ5ID0gY2lmc0ZpbGUtPnNyY2hfaW5mLnNyY2hfZW50cmllc19zdGFydDsKIAkJZmlyc3RfZW50cnlfaW5fYnVmZmVyID0gY2lmc0ZpbGUtPnNyY2hfaW5mLmluZGV4X29mX2xhc3RfZW50cnkKIAkJCQkJLSBjaWZzRmlsZS0+c3JjaF9pbmYuZW50cmllc19pbl9idWZmZXI7CiAJCXBvc19pbl9idWYgPSBpbmRleF90b19maW5kIC0gZmlyc3RfZW50cnlfaW5fYnVmZmVyOwogCQljRllJKDEsKCJmb3VuZCBlbnRyeSAtIHBvc19pbl9idWYgJWQiLHBvc19pbl9idWYpKTsgCi0JCWN1cnJlbnRfZW50cnkgPSBjaWZzRmlsZS0+c3JjaF9pbmYuc3JjaF9lbnRyaWVzX3N0YXJ0OwogCQlmb3IoaT0wOyhpPChwb3NfaW5fYnVmKSkgJiYgKGN1cnJlbnRfZW50cnkgIT0gTlVMTCk7aSsrKSB7CiAJCQkvKiBnbyBlbnRyeSBieSBlbnRyeSBmaWd1cmluZyBvdXQgd2hpY2ggaXMgZmlyc3QgKi8KLQkJCS8qIGlmKCAuIG9yIC4uKQotCQkJCXNraXAgKi8KLQkJCXJjID0gY2lmc19lbnRyeV9pc19kb3QoY3VycmVudF9lbnRyeSxjaWZzRmlsZSk7Ci0JCQlpZihyYyA9PSAxKSAvKiBpcyAuIG9yIC4uIHNvIHNraXAgKi8gewotCQkJCWNGWUkoMSwoIkVudHJ5IGlzIC4iKSk7IC8qIEJCIHJlbW92ZW1lIEJCICovCi0JCQkJLyogY29udGludWU7ICovCi0JCQl9IGVsc2UgaWYgKHJjID09IDIgKSB7Ci0JCQkJY0ZZSSgxLCgiRW50cnkgaXMgLi4iKSk7IC8qIEJCIHJlbW92ZW1lIEJCICovCi0JCQkJLyogY29udGludWU7ICovCi0JCQl9CiAJCQljdXJyZW50X2VudHJ5ID0gbnh0X2Rpcl9lbnRyeShjdXJyZW50X2VudHJ5LGVuZF9vZl9zbWIpOwogCQl9CiAJCWlmKChjdXJyZW50X2VudHJ5ID09IE5VTEwpICYmIChpIDwgcG9zX2luX2J1ZikpIHsKQEAgLTc3MCw2ICs3NjYsMTEgQEAKIAlpZihmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCXJjID0gY2lmc19lbnRyeV9pc19kb3QocGZpbmRFbnRyeSxwQ2lmc0YpOworCS8qIHNraXAgLiBhbmQgLi4gc2luY2Ugd2UgYWRkZWQgdGhlbSBmaXJzdCAqLworCWlmKHJjICE9IDApIAorCQlyZXR1cm4gMDsKKwogCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKIAogCXFzdHJpbmcubmFtZSA9IHNjcmF0Y2hfYnVmOwpAQCAtODk4LDIyICs4OTksMjIgQEAKIAogCXN3aXRjaCAoKGludCkgZmlsZS0+Zl9wb3MpIHsKIAljYXNlIDA6Ci0JCS8qaWYgKGZpbGxkaXIoZGlyZW50cnksICIuIiwgMSwgZmlsZS0+Zl9wb3MsCisJCWlmIChmaWxsZGlyKGRpcmVudHJ5LCAiLiIsIDEsIGZpbGUtPmZfcG9zLAogCQkgICAgIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKLQkJCWNFUlJPUigxLCAoIkZpbGxkaXIgZm9yIGN1cnJlbnQgZGlyIGZhaWxlZCAiKSk7CisJCQljRVJST1IoMSwgKCJGaWxsZGlyIGZvciBjdXJyZW50IGRpciBmYWlsZWQiKSk7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlicmVhazsKIAkJfQotCQlmaWxlLT5mX3BvcysrOyAqLworCQlmaWxlLT5mX3BvcysrOwogCWNhc2UgMToKLQkJLyogaWYgKGZpbGxkaXIoZGlyZW50cnksICIuLiIsIDIsIGZpbGUtPmZfcG9zLAorCQlpZiAoZmlsbGRpcihkaXJlbnRyeSwgIi4uIiwgMiwgZmlsZS0+Zl9wb3MsCiAJCSAgICAgZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKIAkJCWNFUlJPUigxLCAoIkZpbGxkaXIgZm9yIHBhcmVudCBkaXIgZmFpbGVkICIpKTsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9Ci0JCWZpbGUtPmZfcG9zKys7ICovCi0JY2FzZSAyOgorCQlmaWxlLT5mX3BvcysrOworCWRlZmF1bHQ6CiAJCS8qIDEpIElmIHNlYXJjaCBpcyBhY3RpdmUsIAogCQkJaXMgaW4gY3VycmVudCBzZWFyY2ggYnVmZmVyPyAKIAkJCWlmIGl0IGJlZm9yZSB0aGVuIHJlc3RhcnQgc2VhcmNoCkBAIC05MjcsNyArOTI4LDYgQEAKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCX0KLQlkZWZhdWx0OgogCQlpZihmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkgewogCQkJcmMgPSAtRUlOVkFMOwogCQkJRnJlZVhpZCh4aWQpOwpAQCAtOTQ3LDggKzk0Nyw2IEBACiAJCWtmcmVlKGNpZnNGaWxlLT5zZWFyY2hfcmVzdW1lX25hbWUpOwogCQljaWZzRmlsZS0+c2VhcmNoX3Jlc3VtZV9uYW1lID0gTlVMTDsgKi8KIAotCQkvKiBCQiBhY2NvdW50IGZvciAuIGFuZCAuLiBpbiBmX3BvcyBhcyBzcGVjaWFsIGNhc2UgKi8KLQogCQlyYyA9IGZpbmRfY2lmc19lbnRyeSh4aWQscFRjb24sIGZpbGUsCiAJCQkJJmN1cnJlbnRfZW50cnksJm51bV90b19maWxsKTsKIAkJaWYocmMpIHsKQEAgLTk3Nyw3ICs5NzUsOCBAQAogCQkJCQkgIG51bV90b19maWxsLCBpKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0KKwkJCS8qIGlmIGJ1Z2d5IHNlcnZlciByZXR1cm5zIC4gYW5kIC4uIGxhdGUgZG8KKwkJCXdlIHdhbnQgdG8gY2hlY2sgZm9yIHRoYXQgaGVyZT8gKi8KIAkJCXJjID0gY2lmc19maWxsZGlyKGN1cnJlbnRfZW50cnksIGZpbGUsIAogCQkJCQlmaWxsZGlyLCBkaXJlbnRyeSx0bXBfYnVmKTsKIAkJCWZpbGUtPmZfcG9zKys7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3hhdHRyLmMgYi9mcy9jaWZzL3hhdHRyLmMKaW5kZXggMzkzODQ0NC4uNzc1NGQ2NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy94YXR0ci5jCisrKyBiL2ZzL2NpZnMveGF0dHIuYwpAQCAtNjIsOSArNjIsNyBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JbXV0ZXhfbG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE2LDkgKzExNCw3IEBACiAJY2lmc19zYiA9IENJRlNfU0Ioc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCW11dGV4X2xvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCW11dGV4X3VubG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIyMyw5ICsyMTksNyBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQltdXRleF9sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQltdXRleF91bmxvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNDEsOSArMzM1LDcgQEAKIAljaWZzX3NiID0gQ0lGU19TQihzYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JbXV0ZXhfbG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA3ZjhlMjZlLi5iMWY2NDc4IDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTIxNyw2ICsxMjE3LDEwIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCisJcmV0ID0gc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKGZpbGUsIHR5cGUgPT0gUkVBRCA/IE1BWV9SRUFEOk1BWV9XUklURSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKIAlmbnYgPSBOVUxMOwogCWlmICh0eXBlID09IFJFQUQpIHsKIAkJZm4gPSBmaWxlLT5mX29wLT5yZWFkOwpAQCAtMTMxMyw2ICsxMzE3LDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorYXNtbGlua2FnZSBsb25nCitjb21wYXRfc3lzX3Ztc3BsaWNlKGludCBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKmlvdjMyLAorCQkgICAgdW5zaWduZWQgaW50IG5yX3NlZ3MsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpOworCXN0cnVjdCBpb3ZlYyAqaW92OworCWlmIChucl9zZWdzID4gVUlPX01BWElPVikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaW92ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgaSsrKSB7CisJCXN0cnVjdCBjb21wYXRfaW92ZWMgdjsKKwkJaWYgKGdldF91c2VyKHYuaW92X2Jhc2UsICZpb3YzMltpXS5pb3ZfYmFzZSkgfHwKKwkJICAgIGdldF91c2VyKHYuaW92X2xlbiwgJmlvdjMyW2ldLmlvdl9sZW4pIHx8CisJCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKHYuaW92X2Jhc2UpLCAmaW92W2ldLmlvdl9iYXNlKSB8fAorCQkgICAgcHV0X3VzZXIodi5pb3ZfbGVuLCAmaW92W2ldLmlvdl9sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiBzeXNfdm1zcGxpY2UoZmQsIGlvdiwgbnJfc2VncywgZmxhZ3MpOworfQorCiAvKgogICogRXhhY3RseSBsaWtlIGZzL29wZW4uYzpzeXNfb3BlbigpLCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IHNldCB0aGUKICAqIE9fTEFSR0VGSUxFIGZsYWcuCkBAIC0xODg5LDcgKzE5MTMsNyBAQAogCX0KIAogCWlmIChzaWdtYXNrKSB7Ci0JCWlmIChzaWdzZXRzaXplIHw9IHNpemVvZihjb21wYXRfc2lnc2V0X3QpKQorCQlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2YoY29tcGF0X3NpZ3NldF90KSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnNzMzIsIHNpZ21hc2ssIHNpemVvZihzczMyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIwMDYsMTA5ICsyMDMwLDExNSBAQAogCXN0cnVjdCBrbmZzZF9maAkJY3IzMl9nZXRmczsKIH07CiAKLXN0YXRpYyBpbnQgY29tcGF0X25mc19zdmNfdHJhbnMoc3RydWN0IG5mc2N0bF9hcmcgKmthcmcsIHN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgY29tcGF0X25mc19zdmNfdHJhbnMoc3RydWN0IG5mc2N0bF9hcmcgKmthcmcsCisJCQkJc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnIF9fdXNlciAqYXJnKQogewotCWludCBlcnI7Ci0KLQllcnIgPSBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICZhcmctPmNhMzJfc3ZjLCBzaXplb2YoYXJnLT5jYTMyX3N2YykpOwotCWVyciB8PSBnZXRfdXNlcihrYXJnLT5jYV92ZXJzaW9uLCAmYXJnLT5jYTMyX3ZlcnNpb24pOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX3N2Yy5zdmNfcG9ydCwgJmFyZy0+Y2EzMl9zdmMuc3ZjMzJfcG9ydCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2Ffc3ZjLnN2Y19udGhyZWFkcywgJmFyZy0+Y2EzMl9zdmMuc3ZjMzJfbnRocmVhZHMpOwotCXJldHVybiAoZXJyKSA/IC1FRkFVTFQgOiAwOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX3N2Yywgc2l6ZW9mKGFyZy0+Y2EzMl9zdmMpKSB8fAorCQlnZXRfdXNlcihrYXJnLT5jYV92ZXJzaW9uLCAmYXJnLT5jYTMyX3ZlcnNpb24pIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2Ffc3ZjLnN2Y19wb3J0LCAmYXJnLT5jYTMyX3N2Yy5zdmMzMl9wb3J0KSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX3N2Yy5zdmNfbnRocmVhZHMsCisJCQkJJmFyZy0+Y2EzMl9zdmMuc3ZjMzJfbnRocmVhZHMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb21wYXRfbmZzX2NsbnRfdHJhbnMoc3RydWN0IG5mc2N0bF9hcmcgKmthcmcsIHN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgY29tcGF0X25mc19jbG50X3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLAorCQkJCXN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKIHsKLQlpbnQgZXJyOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX2NsaWVudCwKKwkJCXNpemVvZihhcmctPmNhMzJfY2xpZW50KSkgfHwKKwkJZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKSB8fAorCQlfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9jbGllbnQuY2xfaWRlbnRbMF0sCisJCQkJJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9pZGVudFswXSwKKwkJCQlORlNDTE5UX0lETUFYKSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX2NsaWVudC5jbF9uYWRkciwKKwkJCQkmYXJnLT5jYTMyX2NsaWVudC5jbDMyX25hZGRyKSB8fAorCQlfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9jbGllbnQuY2xfYWRkcmxpc3RbMF0sCisJCQkJJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9hZGRybGlzdFswXSwKKwkJCQkoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSAqIE5GU0NMTlRfQUREUk1BWCkpIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfY2xpZW50LmNsX2Zoa2V5dHlwZSwKKwkJCQkmYXJnLT5jYTMyX2NsaWVudC5jbDMyX2Zoa2V5dHlwZSkgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9jbGllbnQuY2xfZmhrZXlsZW4sCisJCQkJJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9maGtleWxlbikgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfY2xpZW50LmNsX2Zoa2V5WzBdLAorCQkJCSZhcmctPmNhMzJfY2xpZW50LmNsMzJfZmhrZXlbMF0sCisJCQkJTkZTQ0xOVF9LRVlNQVgpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGFjY2Vzc19vayhWRVJJRllfUkVBRCwgJmFyZy0+Y2EzMl9jbGllbnQsIHNpemVvZihhcmctPmNhMzJfY2xpZW50KSk7Ci0JZXJyIHw9IGdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbik7Ci0JZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2NsaWVudC5jbF9pZGVudFswXSwKLQkJCSAgJmFyZy0+Y2EzMl9jbGllbnQuY2wzMl9pZGVudFswXSwKLQkJCSAgTkZTQ0xOVF9JRE1BWCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfY2xpZW50LmNsX25hZGRyLCAmYXJnLT5jYTMyX2NsaWVudC5jbDMyX25hZGRyKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfY2xpZW50LmNsX2FkZHJsaXN0WzBdLAotCQkJICAmYXJnLT5jYTMyX2NsaWVudC5jbDMyX2FkZHJsaXN0WzBdLAotCQkJICAoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSAqIE5GU0NMTlRfQUREUk1BWCkpOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX2NsaWVudC5jbF9maGtleXR5cGUsCi0JCSAgICAgICZhcmctPmNhMzJfY2xpZW50LmNsMzJfZmhrZXl0eXBlKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9jbGllbnQuY2xfZmhrZXlsZW4sCi0JCSAgICAgICZhcmctPmNhMzJfY2xpZW50LmNsMzJfZmhrZXlsZW4pOwotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9jbGllbnQuY2xfZmhrZXlbMF0sCi0JCQkgICZhcmctPmNhMzJfY2xpZW50LmNsMzJfZmhrZXlbMF0sCi0JCQkgIE5GU0NMTlRfS0VZTUFYKTsKLQotCXJldHVybiAoZXJyKSA/IC1FRkFVTFQgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvbXBhdF9uZnNfZXhwX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLCBzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCitzdGF0aWMgaW50IGNvbXBhdF9uZnNfZXhwX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLAorCQkJCXN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX2V4cG9ydCwgc2l6ZW9mKGFyZy0+Y2EzMl9leHBvcnQpKTsKLQllcnIgfD0gZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZXhwb3J0LmV4X2NsaWVudFswXSwKLQkJCSAgJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9jbGllbnRbMF0sCi0JCQkgIE5GU0NMTlRfSURNQVgpOwotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9leHBvcnQuZXhfcGF0aFswXSwKLQkJCSAgJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9wYXRoWzBdLAotCQkJICBORlNfTUFYUEFUSExFTik7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2RldiwKLQkJICAgICAgJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9kZXYpOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX2V4cG9ydC5leF9pbm8sCi0JCSAgICAgICZhcmctPmNhMzJfZXhwb3J0LmV4MzJfaW5vKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfZmxhZ3MsCi0JCSAgICAgICZhcmctPmNhMzJfZXhwb3J0LmV4MzJfZmxhZ3MpOwotCWVyciB8PSBfX2dldF91c2VyKGthcmctPmNhX2V4cG9ydC5leF9hbm9uX3VpZCwKLQkJICAgICAgJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9hbm9uX3VpZCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fZ2lkLAotCQkgICAgICAmYXJnLT5jYTMyX2V4cG9ydC5leDMyX2Fub25fZ2lkKTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgJmFyZy0+Y2EzMl9leHBvcnQsCisJCQkJc2l6ZW9mKGFyZy0+Y2EzMl9leHBvcnQpKSB8fAorCQlnZXRfdXNlcihrYXJnLT5jYV92ZXJzaW9uLCAmYXJnLT5jYTMyX3ZlcnNpb24pIHx8CisJCV9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2V4cG9ydC5leF9jbGllbnRbMF0sCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9jbGllbnRbMF0sCisJCQkJTkZTQ0xOVF9JRE1BWCkgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZXhwb3J0LmV4X3BhdGhbMF0sCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9wYXRoWzBdLAorCQkJCU5GU19NQVhQQVRITEVOKSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX2V4cG9ydC5leF9kZXYsCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9kZXYpIHx8CisJCV9fZ2V0X3VzZXIoa2FyZy0+Y2FfZXhwb3J0LmV4X2lubywKKwkJCQkmYXJnLT5jYTMyX2V4cG9ydC5leDMyX2lubykgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfZmxhZ3MsCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9mbGFncykgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfYW5vbl91aWQsCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9hbm9uX3VpZCkgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9leHBvcnQuZXhfYW5vbl9naWQsCisJCQkJJmFyZy0+Y2EzMl9leHBvcnQuZXgzMl9hbm9uX2dpZCkpCisJCXJldHVybiAtRUZBVUxUOwogCVNFVF9VSUQoa2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fdWlkLCBrYXJnLT5jYV9leHBvcnQuZXhfYW5vbl91aWQpOwogCVNFVF9HSUQoa2FyZy0+Y2FfZXhwb3J0LmV4X2Fub25fZ2lkLCBrYXJnLT5jYV9leHBvcnQuZXhfYW5vbl9naWQpOwogCi0JcmV0dXJuIChlcnIpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X25mc19nZXRmZF90cmFucyhzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZywgc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnIF9fdXNlciAqYXJnKQorc3RhdGljIGludCBjb21wYXRfbmZzX2dldGZkX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLAorCQkJCXN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZykKIHsKLQlpbnQgZXJyOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCAmYXJnLT5jYTMyX2dldGZkLAorCQkJc2l6ZW9mKGFyZy0+Y2EzMl9nZXRmZCkpIHx8CisJCWdldF91c2VyKGthcmctPmNhX3ZlcnNpb24sICZhcmctPmNhMzJfdmVyc2lvbikgfHwKKwkJX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZmQuZ2RfYWRkciwKKwkJCQkmYXJnLT5jYTMyX2dldGZkLmdkMzJfYWRkciwKKwkJCQkoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKSB8fAorCQlfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9nZXRmZC5nZF9wYXRoLAorCQkJCSZhcmctPmNhMzJfZ2V0ZmQuZ2QzMl9wYXRoLAorCQkJCShORlNfTUFYUEFUSExFTisxKSkgfHwKKwkJX19nZXRfdXNlcihrYXJnLT5jYV9nZXRmZC5nZF92ZXJzaW9uLAorCQkJCSZhcmctPmNhMzJfZ2V0ZmQuZ2QzMl92ZXJzaW9uKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICZhcmctPmNhMzJfZ2V0ZmQsIHNpemVvZihhcmctPmNhMzJfZ2V0ZmQpKTsKLQllcnIgfD0gZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZmQuZ2RfYWRkciwKLQkJCSAgJmFyZy0+Y2EzMl9nZXRmZC5nZDMyX2FkZHIsCi0JCQkgIChzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpOwotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9nZXRmZC5nZF9wYXRoLAotCQkJICAmYXJnLT5jYTMyX2dldGZkLmdkMzJfcGF0aCwKLQkJCSAgKE5GU19NQVhQQVRITEVOKzEpKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9nZXRmZC5nZF92ZXJzaW9uLAotCQkgICAgICAmYXJnLT5jYTMyX2dldGZkLmdkMzJfdmVyc2lvbik7Ci0KLQlyZXR1cm4gKGVycikgPyAtRUZBVUxUIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb21wYXRfbmZzX2dldGZzX3RyYW5zKHN0cnVjdCBuZnNjdGxfYXJnICprYXJnLCBzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcpCitzdGF0aWMgaW50IGNvbXBhdF9uZnNfZ2V0ZnNfdHJhbnMoc3RydWN0IG5mc2N0bF9hcmcgKmthcmcsCisJCQkJc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnIF9fdXNlciAqYXJnKQogewotCWludCBlcnI7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsJmFyZy0+Y2EzMl9nZXRmcyxzaXplb2YoYXJnLT5jYTMyX2dldGZzKSkgfHwKKwkJZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKSB8fAorCQlfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9nZXRmcy5nZF9hZGRyLAorCQkJCSZhcmctPmNhMzJfZ2V0ZnMuZ2QzMl9hZGRyLAorCQkJCShzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpIHx8CisJCV9fY29weV9mcm9tX3VzZXIoJmthcmctPmNhX2dldGZzLmdkX3BhdGgsCisJCQkJJmFyZy0+Y2EzMl9nZXRmcy5nZDMyX3BhdGgsCisJCQkJKE5GU19NQVhQQVRITEVOKzEpKSB8fAorCQlfX2dldF91c2VyKGthcmctPmNhX2dldGZzLmdkX21heGxlbiwKKwkJCQkmYXJnLT5jYTMyX2dldGZzLmdkMzJfbWF4bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICZhcmctPmNhMzJfZ2V0ZnMsIHNpemVvZihhcmctPmNhMzJfZ2V0ZnMpKTsKLQllcnIgfD0gZ2V0X3VzZXIoa2FyZy0+Y2FfdmVyc2lvbiwgJmFyZy0+Y2EzMl92ZXJzaW9uKTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigma2FyZy0+Y2FfZ2V0ZnMuZ2RfYWRkciwKLQkJCSAgJmFyZy0+Y2EzMl9nZXRmcy5nZDMyX2FkZHIsCi0JCQkgIChzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpOwotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZrYXJnLT5jYV9nZXRmcy5nZF9wYXRoLAotCQkJICAmYXJnLT5jYTMyX2dldGZzLmdkMzJfcGF0aCwKLQkJCSAgKE5GU19NQVhQQVRITEVOKzEpKTsKLQllcnIgfD0gX19nZXRfdXNlcihrYXJnLT5jYV9nZXRmcy5nZF9tYXhsZW4sCi0JCSAgICAgICZhcmctPmNhMzJfZ2V0ZnMuZ2QzMl9tYXhsZW4pOwotCi0JcmV0dXJuIChlcnIpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFRoaXMgcmVhbGx5IGRvZXNuJ3QgbmVlZCB0cmFuc2xhdGlvbnMsIHdlIGFyZSBvbmx5IHBhc3NpbmcKICAqIGJhY2sgYSB1bmlvbiB3aGljaCBjb250YWlucyBvcGFxdWUgbmZzIGZpbGUgaGFuZGxlIGRhdGEuCiAgKi8KLXN0YXRpYyBpbnQgY29tcGF0X25mc19nZXRmaF9yZXNfdHJhbnModW5pb24gbmZzY3RsX3JlcyAqa3JlcywgdW5pb24gY29tcGF0X25mc2N0bF9yZXMgX191c2VyICpyZXMpCitzdGF0aWMgaW50IGNvbXBhdF9uZnNfZ2V0ZmhfcmVzX3RyYW5zKHVuaW9uIG5mc2N0bF9yZXMgKmtyZXMsCisJCQkJdW5pb24gY29tcGF0X25mc2N0bF9yZXMgX191c2VyICpyZXMpCiB7CiAJaW50IGVycjsKIApAQCAtMjExNyw4ICsyMTQ3LDkgQEAKIAlyZXR1cm4gKGVycikgPyAtRUZBVUxUIDogMDsKIH0KIAotYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfbmZzc2VydmN0bChpbnQgY21kLCBzdHJ1Y3QgY29tcGF0X25mc2N0bF9hcmcgX191c2VyICphcmcsCi0JCQkJCXVuaW9uIGNvbXBhdF9uZnNjdGxfcmVzIF9fdXNlciAqcmVzKQorYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfbmZzc2VydmN0bChpbnQgY21kLAorCQkJCXN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyBfX3VzZXIgKmFyZywKKwkJCQl1bmlvbiBjb21wYXRfbmZzY3RsX3JlcyBfX3VzZXIgKnJlcykKIHsKIAlzdHJ1Y3QgbmZzY3RsX2FyZyAqa2FyZzsKIAl1bmlvbiBuZnNjdGxfcmVzICprcmVzOwpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCA4ZWQ5YjA2Li41Zjk1MjE4IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtNTA0LDE0ICs1MDQsMTYgQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAotCWlmIChncm91cCAmJiBncm91cC0+ZGVmYXVsdF9ncm91cHMpIHsKLQkJLyogRllJLCB3ZSdyZSBmYWtpbmcgbWtkaXIgaGVyZQorCWlmIChncm91cC0+ZGVmYXVsdF9ncm91cHMpIHsKKwkJLyoKKwkJICogRllJLCB3ZSdyZSBmYWtpbmcgbWtkaXIgaGVyZQogCQkgKiBJJ20gbm90IHN1cmUgd2UgbmVlZCB0aGlzIHNlbWFwaG9yZSwgYXMgd2UncmUgY2FsbGVkCiAJCSAqIGZyb20gb3VyIHBhcmVudCdzIG1rZGlyLiAgVGhhdCBob2xkcyBvdXIgcGFyZW50J3MKIAkJICogaV9tdXRleCwgc28gYWZhaWsgbG9va3VwIGNhbm5vdCBjb250aW51ZSB0aHJvdWdoIG91cgogCQkgKiBwYXJlbnQgdG8gZmluZCB1cywgbGV0IGFsb25lIG1lc3Mgd2l0aCBvdXIgdHJlZS4KIAkJICogVGhhdCBzYWlkLCB0YWtpbmcgb3VyIGlfbXV0ZXggaXMgY2xvc2VyIHRvIG1rZGlyCi0JCSAqIGVtdWxhdGlvbiwgYW5kIHNob3VsZG4ndCBodXJ0LiAqLworCQkgKiBlbXVsYXRpb24sIGFuZCBzaG91bGRuJ3QgaHVydC4KKwkJICovCiAJCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAkJZm9yIChpID0gMDsgZ3JvdXAtPmRlZmF1bHRfZ3JvdXBzW2ldOyBpKyspIHsKQEAgLTU0NiwyMCArNTQ4LDM0IEBACiAKIAkJaXRlbS0+Y2lfZ3JvdXAgPSBOVUxMOwogCQlpdGVtLT5jaV9wYXJlbnQgPSBOVUxMOworCisJCS8qIERyb3AgdGhlIHJlZmVyZW5jZSBmb3IgY2lfZW50cnkgKi8KIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCisJCS8qIERyb3AgdGhlIHJlZmVyZW5jZSBmb3IgY2lfcGFyZW50ICovCiAJCWNvbmZpZ19ncm91cF9wdXQoZ3JvdXApOwogCX0KIH0KIAogc3RhdGljIHZvaWQgbGlua19vYmooc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSwgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCS8qIFBhcmVudCBzZWVtcyByZWR1bmRhbnQgd2l0aCBncm91cCwgYnV0IGl0IG1ha2VzIGNlcnRhaW4KLQkgKiB0cmF2ZXJzYWxzIG11Y2ggbmljZXIuICovCisJLyoKKwkgKiBQYXJlbnQgc2VlbXMgcmVkdW5kYW50IHdpdGggZ3JvdXAsIGJ1dCBpdCBtYWtlcyBjZXJ0YWluCisJICogdHJhdmVyc2FscyBtdWNoIG5pY2VyLgorCSAqLwogCWl0ZW0tPmNpX3BhcmVudCA9IHBhcmVudF9pdGVtOworCisJLyoKKwkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBwYXJlbnQgZm9yIHRoZSBjaGlsZCdzIGNpX3BhcmVudAorCSAqIGxpbmsuCisJICovCiAJaXRlbS0+Y2lfZ3JvdXAgPSBjb25maWdfZ3JvdXBfZ2V0KHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSkpOwogCWxpc3RfYWRkX3RhaWwoJml0ZW0tPmNpX2VudHJ5LCAmaXRlbS0+Y2lfZ3JvdXAtPmNnX2NoaWxkcmVuKTsKIAorCS8qCisJICogV2UgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgY2hpbGQgZm9yIGNpX2VudHJ5IG9uIHRoZSBwYXJlbnQncworCSAqIGNnX2NoaWxkcmVuCisJICovCiAJY29uZmlnX2l0ZW1fZ2V0KGl0ZW0pOwogfQogCkBAIC02ODQsNiArNzAwLDEwIEBACiAJdHlwZSA9IHBhcmVudF9pdGVtLT5jaV90eXBlOwogCUJVR19PTighdHlwZSk7CiAKKwkvKgorCSAqIElmIC0+ZHJvcF9pdGVtKCkgZXhpc3RzLCBpdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlCisJICogY29uZmlnX2l0ZW1fcHV0KCkuCisJICovCiAJaWYgKHR5cGUtPmN0X2dyb3VwX29wcyAmJiB0eXBlLT5jdF9ncm91cF9vcHMtPmRyb3BfaXRlbSkKIAkJdHlwZS0+Y3RfZ3JvdXBfb3BzLT5kcm9wX2l0ZW0odG9fY29uZmlnX2dyb3VwKHBhcmVudF9pdGVtKSwKIAkJCQkJCWl0ZW0pOwpAQCAtNjk0LDIzICs3MTQsMjggQEAKIAogc3RhdGljIGludCBjb25maWdmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIG1vZHVsZV9nb3QgPSAwOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwOwogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5czsKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IE5VTEw7CiAJY2hhciAqbmFtZTsKIAotCWlmIChkZW50cnktPmRfcGFyZW50ID09IGNvbmZpZ2ZzX3NiLT5zX3Jvb3QpCi0JCXJldHVybiAtRVBFUk07CisJaWYgKGRlbnRyeS0+ZF9wYXJlbnQgPT0gY29uZmlnZnNfc2ItPnNfcm9vdCkgeworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KIAogCXNkID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9mc2RhdGE7Ci0JaWYgKCEoc2QtPnNfdHlwZSAmIENPTkZJR0ZTX1VTRVRfRElSKSkKLQkJcmV0dXJuIC1FUEVSTTsKKwlpZiAoIShzZC0+c190eXBlICYgQ09ORklHRlNfVVNFVF9ESVIpKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQogCisJLyogR2V0IGEgd29ya2luZyByZWYgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJcGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LT5kX3BhcmVudCk7CiAJdHlwZSA9IHBhcmVudF9pdGVtLT5jaV90eXBlOwogCXN1YnN5cyA9IHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSktPmNnX3N1YnN5czsKQEAgLTcxOSwxNSArNzQ0LDE2IEBACiAJaWYgKCF0eXBlIHx8ICF0eXBlLT5jdF9ncm91cF9vcHMgfHwKIAkgICAgKCF0eXBlLT5jdF9ncm91cF9vcHMtPm1ha2VfZ3JvdXAgJiYKIAkgICAgICF0eXBlLT5jdF9ncm91cF9vcHMtPm1ha2VfaXRlbSkpIHsKLQkJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKLQkJcmV0dXJuIC1FUEVSTTsgIC8qIFdoYXQgbGFjay1vZi1ta2RpciByZXR1cm5zICovCisJCXJldCA9IC1FUEVSTTsgIC8qIExhY2stb2YtbWtkaXIgcmV0dXJucyAtRVBFUk0gKi8KKwkJZ290byBvdXRfcHV0OwogCX0KIAogCW5hbWUgPSBrbWFsbG9jKGRlbnRyeS0+ZF9uYW1lLmxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmICghbmFtZSkgewotCQljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcHV0OwogCX0KKwogCXNucHJpbnRmKG5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiArIDEsICIlcyIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJZG93bigmc3Vic3lzLT5zdV9zZW0pOwpAQCAtNzQ4LDQwICs3NzQsNjcgQEAKIAogCWtmcmVlKG5hbWUpOwogCWlmICghaXRlbSkgewotCQljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJLyoKKwkJICogSWYgaXRlbSA9PSBOVUxMLCB0aGVuIGxpbmtfb2JqKCkgd2FzIG5ldmVyIGNhbGxlZC4KKwkJICogVGhlcmUgYXJlIG5vIGV4dHJhIHJlZmVyZW5jZXMgdG8gY2xlYW4gdXAuCisJCSAqLworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9wdXQ7CiAJfQogCi0JcmV0ID0gLUVJTlZBTDsKKwkvKgorCSAqIGxpbmtfb2JqKCkgaGFzIGJlZW4gY2FsbGVkICh2aWEgbGlua19ncm91cCgpIGZvciBncm91cHMpLgorCSAqIEZyb20gaGVyZSBvbiBvdXQsIGVycm9ycyBtdXN0IGNsZWFuIHRoYXQgdXAuCisJICovCisKIAl0eXBlID0gaXRlbS0+Y2lfdHlwZTsKLQlpZiAodHlwZSkgewotCQlvd25lciA9IHR5cGUtPmN0X293bmVyOwotCQlpZiAodHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCQlpZiAoZ3JvdXApIHsKLQkJCQlyZXQgPSBjb25maWdmc19hdHRhY2hfZ3JvdXAocGFyZW50X2l0ZW0sCi0JCQkJCQkJICAgIGl0ZW0sCi0JCQkJCQkJICAgIGRlbnRyeSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IGNvbmZpZ2ZzX2F0dGFjaF9pdGVtKHBhcmVudF9pdGVtLAotCQkJCQkJCSAgIGl0ZW0sCi0JCQkJCQkJICAgZGVudHJ5KTsKLQkJCX0KLQotCQkJaWYgKHJldCkgewotCQkJCWRvd24oJnN1YnN5cy0+c3Vfc2VtKTsKLQkJCQlpZiAoZ3JvdXApCi0JCQkJCXVubGlua19ncm91cChncm91cCk7Ci0JCQkJZWxzZQotCQkJCQl1bmxpbmtfb2JqKGl0ZW0pOwotCQkJCWNsaWVudF9kcm9wX2l0ZW0ocGFyZW50X2l0ZW0sIGl0ZW0pOwotCQkJCXVwKCZzdWJzeXMtPnN1X3NlbSk7Ci0KLQkJCQljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwotCQkJCW1vZHVsZV9wdXQob3duZXIpOwotCQkJfQotCQl9CisJaWYgKCF0eXBlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubGluazsKIAl9CiAKKwlvd25lciA9IHR5cGUtPmN0X293bmVyOworCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubGluazsKKwl9CisKKwkvKgorCSAqIEkgaGF0ZSBkb2luZyBpdCB0aGlzIHdheSwgYnV0IGlmIHRoZXJlIGlzCisJICogYW4gZXJyb3IsICBtb2R1bGVfcHV0KCkgcHJvYmFibHkgc2hvdWxkCisJICogaGFwcGVuIGFmdGVyIGFueSBjbGVhbnVwLgorCSAqLworCW1vZHVsZV9nb3QgPSAxOworCisJaWYgKGdyb3VwKQorCQlyZXQgPSBjb25maWdmc19hdHRhY2hfZ3JvdXAocGFyZW50X2l0ZW0sIGl0ZW0sIGRlbnRyeSk7CisJZWxzZQorCQlyZXQgPSBjb25maWdmc19hdHRhY2hfaXRlbShwYXJlbnRfaXRlbSwgaXRlbSwgZGVudHJ5KTsKKworb3V0X3VubGluazoKKwlpZiAocmV0KSB7CisJCS8qIFRlYXIgZG93biBldmVyeXRoaW5nIHdlIGJ1aWx0IHVwICovCisJCWRvd24oJnN1YnN5cy0+c3Vfc2VtKTsKKwkJaWYgKGdyb3VwKQorCQkJdW5saW5rX2dyb3VwKGdyb3VwKTsKKwkJZWxzZQorCQkJdW5saW5rX29iaihpdGVtKTsKKwkJY2xpZW50X2Ryb3BfaXRlbShwYXJlbnRfaXRlbSwgaXRlbSk7CisJCXVwKCZzdWJzeXMtPnN1X3NlbSk7CisKKwkJaWYgKG1vZHVsZV9nb3QpCisJCQltb2R1bGVfcHV0KG93bmVyKTsKKwl9CisKK291dF9wdXQ6CisJLyoKKwkgKiBsaW5rX29iaigpL2xpbmtfZ3JvdXAoKSB0b29rIGEgcmVmZXJlbmNlIGZyb20gY2hpbGQtPnBhcmVudCwKKwkgKiBzbyB0aGUgcGFyZW50IGlzIHNhZmVseSBwaW5uZWQuICBXZSBjYW4gZHJvcCBvdXIgd29ya2luZworCSAqIHJlZmVyZW5jZS4KKwkgKi8KKwljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOworCitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODAxLDYgKzg1NCw3IEBACiAJaWYgKHNkLT5zX3R5cGUgJiBDT05GSUdGU19VU0VUX0RFRkFVTFQpCiAJCXJldHVybiAtRVBFUk07CiAKKwkvKiBHZXQgYSB3b3JraW5nIHJlZiB1bnRpbCB3ZSBoYXZlIHRoZSBjaGlsZCAqLwogCXBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS0+ZF9wYXJlbnQpOwogCXN1YnN5cyA9IHRvX2NvbmZpZ19ncm91cChwYXJlbnRfaXRlbSktPmNnX3N1YnN5czsKIAlCVUdfT04oIXN1YnN5cyk7CkBAIC04MTcsNiArODcxLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwkvKiBHZXQgYSB3b3JraW5nIHJlZiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KIAlpdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeSk7CiAKIAkvKiBEcm9wIHJlZmVyZW5jZSBmcm9tIGFib3ZlLCBpdGVtIGFscmVhZHkgaG9sZHMgb25lLiAqLwpkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IDg1ZDE2NmMuLmI1NWI0ZWEgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTY3LDEyICs2NywxMyBAQAogc3RhdGljIGludCBkZWJ1Z2ZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgaW50IG1vZGUsIGRldl90IGRldikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVidWdmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlLCBkZXYpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycm9yID0gLUVQRVJNOwogCiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKKwlpbm9kZSA9IGRlYnVnZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSwgZGV2KTsKIAlpZiAoaW5vZGUpIHsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZGdldChkZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvZGlyZWN0LWlvLmMgYi9mcy9kaXJlY3QtaW8uYwppbmRleCA5MTBhOGVkLi5iMDVkMWIyIDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtOTI5LDggKzkyOSw3IEBACiAJCQlibG9ja19pbl9wYWdlICs9IHRoaXNfY2h1bmtfYmxvY2tzOwogCQkJZGlvLT5ibG9ja3NfYXZhaWxhYmxlIC09IHRoaXNfY2h1bmtfYmxvY2tzOwogbmV4dF9ibG9jazoKLQkJCWlmIChkaW8tPmJsb2NrX2luX2ZpbGUgPiBkaW8tPmZpbmFsX2Jsb2NrX2luX3JlcXVlc3QpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oZGlvLT5ibG9ja19pbl9maWxlID4gZGlvLT5maW5hbF9ibG9ja19pbl9yZXF1ZXN0KTsKIAkJCWlmIChkaW8tPmJsb2NrX2luX2ZpbGUgPT0gZGlvLT5maW5hbF9ibG9ja19pbl9yZXF1ZXN0KQogCQkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCA2YjM4ODY5Li44MWQ4N2E0IDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTU5MCw4ICs1OTAsNyBAQAogCWF0b21pY19kZWMoJmRxdW90LT5kcV9jb3VudCk7CiAjaWZkZWYgX19EUVVPVF9QQVJBTk9JQQogCS8qIHNhbml0eSBjaGVjayAqLwotCWlmICghbGlzdF9lbXB0eSgmZHF1b3QtPmRxX2ZyZWUpKQotCQlCVUcoKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRxdW90LT5kcV9mcmVlKSk7CiAjZW5kaWYKIAlwdXRfZHF1b3RfbGFzdChkcXVvdCk7CiAJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CkBAIC02NjYsOCArNjY1LDcgQEAKIAkJcmV0dXJuIE5PRFFVT1Q7CiAJfQogI2lmZGVmIF9fRFFVT1RfUEFSQU5PSUEKLQlpZiAoIWRxdW90LT5kcV9zYikJLyogSGFzIHNvbWVib2R5IGludmFsaWRhdGVkIGVudHJ5IHVuZGVyIHVzPyAqLwotCQlCVUcoKTsKKwlCVUdfT04oIWRxdW90LT5kcV9zYik7CS8qIEhhcyBzb21lYm9keSBpbnZhbGlkYXRlZCBlbnRyeSB1bmRlciB1cz8gKi8KICNlbmRpZgogCiAJcmV0dXJuIGRxdW90OwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAyNDJmZTFhLi4xYjQ0OTFjIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNTk5LDcgKzU5OSw3IEBACiAJc3dpdGNoIChvcCkgewogCWNhc2UgRVBPTExfQ1RMX0FERDoKIAkJaWYgKCFlcGkpIHsKLQkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTFJESFVQOworCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVA7CiAKIAkJCWVycm9yID0gZXBfaW5zZXJ0KGVwLCAmZXBkcywgdGZpbGUsIGZkKTsKIAkJfSBlbHNlCkBAIC02MTMsNyArNjEzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBFUE9MTF9DVExfTU9EOgogCQlpZiAoZXBpKSB7Ci0JCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQOwogCQkJZXJyb3IgPSBlcF9tb2RpZnkoZXAsIGVwaSwgJmVwZHMpOwogCQl9IGVsc2UKIAkJCWVycm9yID0gLUVOT0VOVDsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA5NTBlYmQ0Li4zYTc5ZDk3IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC01NjEsNyArNTYxLDcgQEAKIAlhcmNoX3BpY2tfbW1hcF9sYXlvdXQobW0pOwogCWlmIChvbGRfbW0pIHsKIAkJdXBfcmVhZCgmb2xkX21tLT5tbWFwX3NlbSk7Ci0JCWlmIChhY3RpdmVfbW0gIT0gb2xkX21tKSBCVUcoKTsKKwkJQlVHX09OKGFjdGl2ZV9tbSAhPSBvbGRfbW0pOwogCQltbXB1dChvbGRfbW0pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC02NjUsOSArNjY1LDcgQEAKIAkgKiBhbmQgdG8gYXNzdW1lIGl0cyBQSUQ6CiAJICovCiAJaWYgKCF0aHJlYWRfZ3JvdXBfbGVhZGVyKGN1cnJlbnQpKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50OwogCQlzdHJ1Y3QgZGVudHJ5ICpwcm9jX2RlbnRyeTEsICpwcm9jX2RlbnRyeTI7Ci0JCXVuc2lnbmVkIGxvbmcgcHRyYWNlOwogCiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRoZSB0aHJlYWQgZ3JvdXAgbGVhZGVyIHRvIGJlIGEgem9tYmllLgpAQCAtNjc4LDYgKzY3NiwxOCBAQAogCQl3aGlsZSAobGVhZGVyLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKQogCQkJeWllbGQoKTsKIAorCQkvKgorCQkgKiBUaGUgb25seSByZWNvcmQgd2UgaGF2ZSBvZiB0aGUgcmVhbC10aW1lIGFnZSBvZiBhCisJCSAqIHByb2Nlc3MsIHJlZ2FyZGxlc3Mgb2YgZXhlY3MgaXQncyBkb25lLCBpcyBzdGFydF90aW1lLgorCQkgKiBBbGwgdGhlIHBhc3QgQ1BVIHRpbWUgaXMgYWNjdW11bGF0ZWQgaW4gc2lnbmFsX3N0cnVjdAorCQkgKiBmcm9tIHNpc3RlciB0aHJlYWRzIG5vdyBkZWFkLiAgQnV0IGluIHRoaXMgbm9uLWxlYWRlcgorCQkgKiBleGVjLCBub3RoaW5nIHN1cnZpdmVzIGZyb20gdGhlIG9yaWdpbmFsIGxlYWRlciB0aHJlYWQsCisJCSAqIHdob3NlIGJpcnRoIG1hcmtzIHRoZSB0cnVlIGFnZSBvZiB0aGlzIHByb2Nlc3Mgbm93LgorCQkgKiBXaGVuIHdlIHRha2Ugb24gaXRzIGlkZW50aXR5IGJ5IHN3aXRjaGluZyB0byBpdHMgUElELCB3ZQorCQkgKiBhbHNvIHRha2UgaXRzIGJpcnRoZGF0ZSAoYWx3YXlzIGVhcmxpZXIgdGhhbiBvdXIgb3duKS4KKwkJICovCisJCWN1cnJlbnQtPnN0YXJ0X3RpbWUgPSBsZWFkZXItPnN0YXJ0X3RpbWU7CisKIAkJc3Bpbl9sb2NrKCZsZWFkZXItPnByb2NfbG9jayk7CiAJCXNwaW5fbG9jaygmY3VycmVudC0+cHJvY19sb2NrKTsKIAkJcHJvY19kZW50cnkxID0gcHJvY19waWRfdW5oYXNoKGN1cnJlbnQpOwpAQCAtNjkyLDIyICs3MDIsNiBAQAogCQkgKiB0d28gdGhyZWFkcyB3aXRoIGEgc3dpdGNoZWQgUElELCBhbmQgcmVsZWFzZQogCQkgKiB0aGUgZm9ybWVyIHRocmVhZCBncm91cCBsZWFkZXI6CiAJCSAqLwotCQlwdHJhY2UgPSBsZWFkZXItPnB0cmFjZTsKLQkJcGFyZW50ID0gbGVhZGVyLT5wYXJlbnQ7Ci0JCWlmICh1bmxpa2VseShwdHJhY2UpICYmIHVubGlrZWx5KHBhcmVudCA9PSBjdXJyZW50KSkgewotCQkJLyoKLQkJCSAqIEpva2VyIHdhcyBwdHJhY2luZyBoaXMgb3duIGdyb3VwIGxlYWRlciwKLQkJCSAqIGFuZCBub3cgaGUgd2FudHMgdG8gYmUgaGlzIG93biBwYXJlbnQhCi0JCQkgKiBXZSBjYW4ndCBoYXZlIHRoYXQuCi0JCQkgKi8KLQkJCXB0cmFjZSA9IDA7Ci0JCX0KLQotCQlwdHJhY2VfdW5saW5rKGN1cnJlbnQpOwotCQlwdHJhY2VfdW5saW5rKGxlYWRlcik7Ci0JCXJlbW92ZV9wYXJlbnQoY3VycmVudCk7Ci0JCXJlbW92ZV9wYXJlbnQobGVhZGVyKTsKLQogCiAJCS8qIEJlY29tZSBhIHByb2Nlc3MgZ3JvdXAgbGVhZGVyIHdpdGggdGhlIG9sZCBsZWFkZXIncyBwaWQuCiAJCSAqIE5vdGU6IFRoZSBvbGQgbGVhZGVyIGFsc28gdXNlcyB0aGlzcGlkIHVudGlsIHJlbGVhc2VfdGFzawpAQCAtNzE4LDE5ICs3MTIsMTUgQEAKIAkJYXR0YWNoX3BpZChjdXJyZW50LCBQSURUWVBFX1BJRCwgIGN1cnJlbnQtPnBpZCk7CiAJCWF0dGFjaF9waWQoY3VycmVudCwgUElEVFlQRV9QR0lELCBjdXJyZW50LT5zaWduYWwtPnBncnApOwogCQlhdHRhY2hfcGlkKGN1cnJlbnQsIFBJRFRZUEVfU0lELCAgY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uKTsKLQkJbGlzdF9hZGRfdGFpbCgmY3VycmVudC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOworCQlsaXN0X2FkZF90YWlsX3JjdSgmY3VycmVudC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwogCi0JCWN1cnJlbnQtPnBhcmVudCA9IGN1cnJlbnQtPnJlYWxfcGFyZW50ID0gbGVhZGVyLT5yZWFsX3BhcmVudDsKLQkJbGVhZGVyLT5wYXJlbnQgPSBsZWFkZXItPnJlYWxfcGFyZW50ID0gY2hpbGRfcmVhcGVyOwogCQljdXJyZW50LT5ncm91cF9sZWFkZXIgPSBjdXJyZW50OwotCQlsZWFkZXItPmdyb3VwX2xlYWRlciA9IGxlYWRlcjsKKwkJbGVhZGVyLT5ncm91cF9sZWFkZXIgPSBjdXJyZW50OwogCi0JCWFkZF9wYXJlbnQoY3VycmVudCk7Ci0JCWFkZF9wYXJlbnQobGVhZGVyKTsKLQkJaWYgKHB0cmFjZSkgewotCQkJY3VycmVudC0+cHRyYWNlID0gcHRyYWNlOwotCQkJX19wdHJhY2VfbGluayhjdXJyZW50LCBwYXJlbnQpOwotCQl9CisJCS8qIFJlZHVjZSBsZWFkZXIgdG8gYSB0aHJlYWQgKi8KKwkJZGV0YWNoX3BpZChsZWFkZXIsIFBJRFRZUEVfUEdJRCk7CisJCWRldGFjaF9waWQobGVhZGVyLCBQSURUWVBFX1NJRCk7CisJCWxpc3RfZGVsX2luaXQoJmxlYWRlci0+dGFza3MpOwogCiAJCWN1cnJlbnQtPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKIApkaWZmIC0tZ2l0IGEvZnMvZXhwb3J0ZnMvZXhwZnMuYyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKaW5kZXggYjA2YjU0Zi4uNGMzOTAwOSAxMDA2NDQKLS0tIGEvZnMvZXhwb3J0ZnMvZXhwZnMuYworKysgYi9mcy9leHBvcnRmcy9leHBmcy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJaWYgKGFjY2VwdGFibGUoY29udGV4dCwgcmVzdWx0KSkKIAkJCXJldHVybiByZXN1bHQ7CiAJCWlmIChTX0lTRElSKHJlc3VsdC0+ZF9pbm9kZS0+aV9tb2RlKSkgewotCQkJLyogdGhlcmUgaXMgbm8gb3RoZXIgZGVudHJ5LCBzbyBmYWlsICovCisJCQllcnIgPSAtRUFDQ0VTOwogCQkJZ290byBlcnJfcmVzdWx0OwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCA0OGFlMDMzLi4yZWRkN2VlIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC03MTEsNyArNzExLDcgQEAKIAkgKiBkaXJlY3QgYmxvY2tzIGJsb2NrcwogCSAqLwogCWlmIChudW0gPT0gMCAmJiBibGtzID4gMSkgewotCQljdXJyZW50X2Jsb2NrID0gbGUzMl90b19jcHUod2hlcmUtPmtleSArIDEpOworCQljdXJyZW50X2Jsb2NrID0gbGUzMl90b19jcHUod2hlcmUtPmtleSkgKyAxOwogCQlmb3IgKGkgPSAxOyBpIDwgYmxrczsgaSsrKQogCQkJKih3aGVyZS0+cCArIGkgKSA9IGNwdV90b19sZTMyKGN1cnJlbnRfYmxvY2srKyk7CiAJfQpAQCAtNzI0LDcgKzcyNCw3IEBACiAJaWYgKGJsb2NrX2kpIHsKIAkJYmxvY2tfaS0+bGFzdF9hbGxvY19sb2dpY2FsX2Jsb2NrID0gYmxvY2sgKyBibGtzIC0gMTsKIAkJYmxvY2tfaS0+bGFzdF9hbGxvY19waHlzaWNhbF9ibG9jayA9Ci0JCQkJbGUzMl90b19jcHUod2hlcmVbbnVtXS5rZXkgKyBibGtzIC0gMSk7CisJCQkJbGUzMl90b19jcHUod2hlcmVbbnVtXS5rZXkpICsgYmxrcyAtIDE7CiAJfQogCiAJLyogV2UgYXJlIGRvbmUgd2l0aCBhdG9taWMgc3R1ZmYsIG5vdyBkbyB0aGUgcmVzdCBvZiBob3VzZWtlZXBpbmcgKi8KQEAgLTgxNCwxMSArODE0LDEzIEBACiAKIAkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCiAJaWYgKCFwYXJ0aWFsKSB7Ci0JCWZpcnN0X2Jsb2NrID0gY2hhaW5bZGVwdGggLSAxXS5rZXk7CisJCWZpcnN0X2Jsb2NrID0gbGUzMl90b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwogCQljbGVhcl9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAJCWNvdW50Kys7CiAJCS8qbWFwIG1vcmUgYmxvY2tzKi8KIAkJd2hpbGUgKGNvdW50IDwgbWF4YmxvY2tzICYmIGNvdW50IDw9IGJsb2Nrc190b19ib3VuZGFyeSkgeworCQkJdW5zaWduZWQgbG9uZyBibGs7CisKIAkJCWlmICghdmVyaWZ5X2NoYWluKGNoYWluLCBwYXJ0aWFsKSkgewogCQkJCS8qCiAJCQkJICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieQpAQCAtODMxLDggKzgzMyw5IEBACiAJCQkJY291bnQgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKGxlMzJfdG9fY3B1KCooY2hhaW5bZGVwdGgtMV0ucCtjb3VudCkgPT0KLQkJCQkJKGZpcnN0X2Jsb2NrICsgY291bnQpKSkKKwkJCWJsayA9IGxlMzJfdG9fY3B1KCooY2hhaW5bZGVwdGgtMV0ucCArIGNvdW50KSk7CisKKwkJCWlmIChibGsgPT0gZmlyc3RfYmxvY2sgKyBjb3VudCkKIAkJCQljb3VudCsrOwogCQkJZWxzZQogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IGFhZjFkYTEuLjhjMjJhYTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJZmxhZ3MgJj0gfkVYVDNfRElSU1lOQ19GTDsKIAorCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCW9sZGZsYWdzID0gZWktPmlfZmxhZ3M7CiAKIAkJLyogVGhlIEpPVVJOQUxfREFUQSBmbGFnIGlzIG1vZGlmaWFibGUgb25seSBieSByb290ICovCkBAIC02MCw4ICs2MSwxMCBAQAogCQkgKiBUaGlzIHRlc3QgbG9va3MgbmljZXIuIFRoYW5rcyB0byBQYXVsaW5lIE1pZGRlbGluawogCQkgKi8KIAkJaWYgKChmbGFncyBeIG9sZGZsYWdzKSAmIChFWFQzX0FQUEVORF9GTCB8IEVYVDNfSU1NVVRBQkxFX0ZMKSkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQorCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC02OSwxNCArNzIsMTggQEAKIAkJICogdGhlIHJlbGV2YW50IGNhcGFiaWxpdHkuCiAJCSAqLwogCQlpZiAoKGpmbGFnIF4gb2xkZmxhZ3MpICYgKEVYVDNfSk9VUk5BTF9EQVRBX0ZMKSkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQorCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCX0KIAkJfQogCiAKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKLQkJaWYgKElTX0VSUihoYW5kbGUpKQorCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKKwkJfQogCQlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCQloYW5kbGUtPmhfc3luYyA9IDE7CiAJCWVyciA9IGV4dDNfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGlub2RlLCAmaWxvYyk7CkBAIC05MywxMSArMTAwLDE0IEBACiAJCWVyciA9IGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKIGZsYWdzX2VycjoKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQkJaWYgKGVycikKKwkJaWYgKGVycikgeworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQlyZXR1cm4gZXJyOworCQl9CiAKIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQzX0pPVVJOQUxfREFUQV9GTCkpCiAJCQllcnIgPSBleHQzX2NoYW5nZV9pbm9kZV9qb3VybmFsX2ZsYWcoaW5vZGUsIGpmbGFnKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCWNhc2UgRVhUM19JT0NfR0VUVkVSU0lPTjoKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDEwNDFkYWIuLjM0YjM5ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCQlnb3RvIGV4aXRfYmg7CiAJCX0KIAkJbG9ja19idWZmZXIoYmgpOwotCQltZW1jcHkoZ2RiLT5iX2RhdGEsIHNiaS0+c19ncm91cF9kZXNjW2ldLCBiaC0+Yl9zaXplKTsKKwkJbWVtY3B5KGdkYi0+Yl9kYXRhLCBzYmktPnNfZ3JvdXBfZGVzY1tpXS0+Yl9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShnZGIpOwogCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZ2RiKTsKQEAgLTk3NCw2ICs5NzQsNyBAQAogCWlmIChvX2Jsb2Nrc19jb3VudCAhPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLAogCQkJICAgICAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7CisJCXVubG9ja19zdXBlcihzYik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X3B1dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCAyYTI0NzkxLi5kMzVjYmM2IDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTQ1Myw4ICs0NTMsNyBAQAogCQkJLyogTWFrZSBzdXJlIHdlIGFyZSBjYWxsZWQgd2l0aCBvbmUgb2YgdGhlIFBPTExfKgogCQkJICAgcmVhc29ucywgb3RoZXJ3aXNlIHdlIGNvdWxkIGxlYWsga2VybmVsIHN0YWNrIGludG8KIAkJCSAgIHVzZXJzcGFjZS4gICovCi0JCQlpZiAoKHJlYXNvbiAmIF9fU0lfTUFTSykgIT0gX19TSV9QT0xMKQotCQkJCUJVRygpOworCQkJQlVHX09OKChyZWFzb24gJiBfX1NJX01BU0spICE9IF9fU0lfUE9MTCk7CiAJCQlpZiAocmVhc29uIC0gUE9MTF9JTiA+PSBOU0lHUE9MTCkKIAkJCQlzaS5zaV9iYW5kICA9IH4wTDsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA4ODlmNzIyLi40OTAzNWIxIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC0xNSwzMCArMTUsMzUgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgogCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYXJ0bmVyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHVuc2lnbmVkIGludCogY250KQorc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlLCB1bnNpZ25lZCBpbnQgKmNudCkKIHsKIAlpbnQgY3VyID0gKmNudDsJCi0Jd2hpbGUoY3VyID09ICpjbnQpIHsKLQkJcGlwZV93YWl0KGlub2RlKTsKLQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisKKwl3aGlsZSAoY3VyID09ICpjbnQpIHsKKwkJcGlwZV93YWl0KGlub2RlLT5pX3BpcGUpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHdha2VfdXBfcGFydG5lcihzdHJ1Y3QgaW5vZGUqIGlub2RlKQogewotCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbm9kZS0+aV9waXBlLT53YWl0KTsKIH0KIAogc3RhdGljIGludCBmaWZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWlmICghaW5vZGUtPmlfcGlwZSkgeworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKKwlpZiAoIXBpcGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJaWYoIXBpcGVfbmV3KGlub2RlKSkKKwkJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhpbm9kZSk7CisJCWlmICghcGlwZSkKIAkJCWdvdG8gZXJyX25vY2xlYW51cDsKKwkJaW5vZGUtPmlfcGlwZSA9IHBpcGU7CiAJfQogCWZpbHAtPmZfdmVyc2lvbiA9IDA7CiAKQEAgLTUzLDE4ICs1OCwxOCBAQAogCSAqICBvcGVuZWQsIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHdyaXRpbmcgdGhlIEZJRk8uCiAJICovCiAJCWZpbHAtPmZfb3AgPSAmcmVhZF9maWZvX2ZvcHM7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlpZiAoUElQRV9SRUFERVJTKCppbm9kZSkrKyA9PSAwKQorCQlwaXBlLT5yX2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMrKyA9PSAwKQogCQkJd2FrZV91cF9wYXJ0bmVyKGlub2RlKTsKIAotCQlpZiAoIVBJUEVfV1JJVEVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+d3JpdGVycykgewogCQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKIAkJCQkvKiBzdXBwcmVzcyBQT0xMSFVQIHVudGlsIHdlIGhhdmUKIAkJCQkgKiBzZWVuIGEgd3JpdGVyICovCi0JCQkJZmlscC0+Zl92ZXJzaW9uID0gUElQRV9XQ09VTlRFUigqaW5vZGUpOworCQkJCWZpbHAtPmZfdmVyc2lvbiA9IHBpcGUtPndfY291bnRlcjsKIAkJCX0gZWxzZSAKIAkJCXsKLQkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmUElQRV9XQ09VTlRFUigqaW5vZGUpKTsKKwkJCQl3YWl0X2Zvcl9wYXJ0bmVyKGlub2RlLCAmcGlwZS0+d19jb3VudGVyKTsKIAkJCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQkJZ290byBlcnJfcmQ7CiAJCQl9CkBAIC03OCwxNiArODMsMTYgQEAKIAkgKiAgZXJybm89RU5YSU8gd2hlbiB0aGVyZSBpcyBubyBwcm9jZXNzIHJlYWRpbmcgdGhlIEZJRk8uCiAJICovCiAJCXJldCA9IC1FTlhJTzsKLQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIVBJUEVfUkVBREVSUygqaW5vZGUpKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhcGlwZS0+cmVhZGVycykKIAkJCWdvdG8gZXJyOwogCiAJCWZpbHAtPmZfb3AgPSAmd3JpdGVfZmlmb19mb3BzOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSsrKQorCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKCFwaXBlLT53cml0ZXJzKyspCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKLQkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZQSVBFX1JDT1VOVEVSKCppbm9kZSkpOworCQlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKKwkJCXdhaXRfZm9yX3BhcnRuZXIoaW5vZGUsICZwaXBlLT5yX2NvdW50ZXIpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gZXJyX3dyOwogCQl9CkBAIC0xMDIsMTEgKzEwNywxMSBAQAogCSAqLwogCQlmaWxwLT5mX29wID0gJnJkd3JfZmlmb19mb3BzOwogCi0JCVBJUEVfUkVBREVSUygqaW5vZGUpKys7Ci0JCVBJUEVfV1JJVEVSUygqaW5vZGUpKys7Ci0JCVBJUEVfUkNPVU5URVIoKmlub2RlKSsrOwotCQlQSVBFX1dDT1VOVEVSKCppbm9kZSkrKzsKLQkJaWYgKFBJUEVfUkVBREVSUygqaW5vZGUpID09IDEgfHwgUElQRV9XUklURVJTKCppbm9kZSkgPT0gMSkKKwkJcGlwZS0+cmVhZGVycysrOworCQlwaXBlLT53cml0ZXJzKys7CisJCXBpcGUtPnJfY291bnRlcisrOworCQlwaXBlLT53X2NvdW50ZXIrKzsKKwkJaWYgKHBpcGUtPnJlYWRlcnMgPT0gMSB8fCBwaXBlLT53cml0ZXJzID09IDEpCiAJCQl3YWtlX3VwX3BhcnRuZXIoaW5vZGUpOwogCQlicmVhazsKIApAQCAtMTE2LDI3ICsxMjEsMjcgQEAKIAl9CiAKIAkvKiBPayEgKi8KLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyX3JkOgotCWlmICghLS1QSVBFX1JFQURFUlMoKmlub2RlKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKKwlpZiAoIS0tcGlwZS0+cmVhZGVycykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKIAlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJZ290byBlcnI7CiAKIGVycl93cjoKLQlpZiAoIS0tUElQRV9XUklURVJTKCppbm9kZSkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7CisJaWYgKCEtLXBpcGUtPndyaXRlcnMpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CiAJcmV0ID0gLUVSRVNUQVJUU1lTOwogCWdvdG8gZXJyOwogCiBlcnI6Ci0JaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpCisJaWYgKCFwaXBlLT5yZWFkZXJzICYmICFwaXBlLT53cml0ZXJzKQogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAKIGVycl9ub2NsZWFudXA6Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19vbHQuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmMKaW5kZXggNzZhMDcwOC4uMDQ5NTAwODQ3IDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX29sdC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmMKQEAgLTQyLDI0ICs0MiwyMSBAQAogc3RhdGljIGlubGluZSB2b2lkCiB2eGZzX2dldF9mc2hlYWQoc3RydWN0IHZ4ZnNfb2x0ZnNoZWFkICpmc2hwLCBzdHJ1Y3Qgdnhmc19zYl9pbmZvICppbmZwKQogewotCWlmIChpbmZwLT52c2lfZnNoaW5vKQotCQlCVUcoKTsKKwlCVUdfT04oaW5mcC0+dnNpX2ZzaGlubyk7CiAJaW5mcC0+dnNpX2ZzaGlubyA9IGZzaHAtPm9sdF9mc2lub1swXTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiB2eGZzX2dldF9pbGlzdChzdHJ1Y3Qgdnhmc19vbHRpbGlzdCAqaWxpc3RwLCBzdHJ1Y3Qgdnhmc19zYl9pbmZvICppbmZwKQogewotCWlmIChpbmZwLT52c2lfaWV4dCkKLQkJQlVHKCk7CisJQlVHX09OKGluZnAtPnZzaV9pZXh0KTsKIAlpbmZwLT52c2lfaWV4dCA9IGlsaXN0cC0+b2x0X2lleHRbMF07IAogfQogCiBzdGF0aWMgaW5saW5lIHVfbG9uZwogdnhmc19vYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYnAsIGRhZGRyX3QgYmxvY2ssIHVfbG9uZyBic2l6ZSkKIHsKLQlpZiAoc2JwLT5zX2Jsb2Nrc2l6ZSAlIGJzaXplKQotCQlCVUcoKTsKKwlCVUdfT04oc2JwLT5zX2Jsb2Nrc2l6ZSAlIGJzaXplKTsKIAlyZXR1cm4gKGJsb2NrICogKHNicC0+c19ibG9ja3NpemUgLyBic2l6ZSkpOwogfQogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCAyM2QxZjUyLi4xMDRhNjJkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICBGVVNFOiBGaWxlc3lzdGVtIGluIFVzZXJzcGFjZQotICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSAgTWlrbG9zIFN6ZXJlZGkgPG1pa2xvc0BzemVyZWRpLmh1PgorICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiAgTWlrbG9zIFN6ZXJlZGkgPG1pa2xvc0BzemVyZWRpLmh1PgogCiAgIFRoaXMgcHJvZ3JhbSBjYW4gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLgogICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KQEAgLTIzLDEzICsyMywxMSBAQAogCiBzdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqZnVzZV9nZXRfY29ubihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JZmMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGZjICYmICFmYy0+Y29ubmVjdGVkKQotCQlmYyA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0JcmV0dXJuIGZjOworCS8qCisJICogTG9ja2xlc3MgYWNjZXNzIGlzIE9LLCBiZWNhdXNlIGZpbGUtPnByaXZhdGUgZGF0YSBpcyBzZXQKKwkgKiBvbmNlIGR1cmluZyBtb3VudCBhbmQgaXMgdmFsaWQgdW50aWwgdGhlIGZpbGUgaXMgcmVsZWFzZWQuCisJICovCisJcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YTsKIH0KIAogc3RhdGljIHZvaWQgZnVzZV9yZXF1ZXN0X2luaXQoc3RydWN0IGZ1c2VfcmVxICpyZXEpCkBAIC03NCwxMCArNzIsOCBAQAogICovCiB2b2lkIGZ1c2VfcmVzZXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlpbnQgcHJlYWxsb2NhdGVkID0gcmVxLT5wcmVhbGxvY2F0ZWQ7CiAJQlVHX09OKGF0b21pY19yZWFkKCZyZXEtPmNvdW50KSAhPSAxKTsKIAlmdXNlX3JlcXVlc3RfaW5pdChyZXEpOwotCXJlcS0+cHJlYWxsb2NhdGVkID0gcHJlYWxsb2NhdGVkOwogfQogCiBzdGF0aWMgdm9pZCBfX2Z1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCkBAIC05Miw4MCArODgsNjQgQEAKIAlhdG9taWNfZGVjKCZyZXEtPmNvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZG9fZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMpCitzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jb25uICpmYykKIHsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlCVUdfT04obGlzdF9lbXB0eSgmZmMtPnVudXNlZF9saXN0KSk7Ci0JcmVxID0gbGlzdF9lbnRyeShmYy0+dW51c2VkX2xpc3QubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQlsaXN0X2RlbF9pbml0KCZyZXEtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCWZ1c2VfcmVxdWVzdF9pbml0KHJlcSk7Ci0JcmVxLT5wcmVhbGxvY2F0ZWQgPSAxOwotCXJlcS0+aW4uaC51aWQgPSBjdXJyZW50LT5mc3VpZDsKLQlyZXEtPmluLmguZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JcmVxLT5pbi5oLnBpZCA9IGN1cnJlbnQtPnBpZDsKLQlyZXR1cm4gcmVxOwotfQotCi0vKiBUaGlzIGNhbiByZXR1cm4gTlVMTCwgYnV0IG9ubHkgaW4gY2FzZSBpdCdzIGludGVycnVwdGVkIGJ5IGEgU0lHS0lMTCAqLwotc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQotewotCWludCBpbnRyOwogCXNpZ3NldF90IG9sZHNldDsKKwlpbnQgaW50cjsKKwlpbnQgZXJyOwogCiAJYXRvbWljX2luYygmZmMtPm51bV93YWl0aW5nKTsKIAlibG9ja19zaWdzKCZvbGRzZXQpOwotCWludHIgPSBkb3duX2ludGVycnVwdGlibGUoJmZjLT5vdXRzdGFuZGluZ19zZW0pOworCWludHIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmMtPmJsb2NrZWRfd2FpdHEsICFmYy0+YmxvY2tlZCk7CiAJcmVzdG9yZV9zaWdzKCZvbGRzZXQpOwotCWlmIChpbnRyKSB7Ci0JCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gZG9fZ2V0X3JlcXVlc3QoZmMpOwotfQorCWVyciA9IC1FSU5UUjsKKwlpZiAoaW50cikKKwkJZ290byBvdXQ7CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggZnVzZV9sb2NrIGhlbGQgKi8KLXN0YXRpYyB2b2lkIGZ1c2VfcHV0YmFja19yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKLXsKLQlpZiAocmVxLT5wcmVhbGxvY2F0ZWQpIHsKLQkJYXRvbWljX2RlYygmZmMtPm51bV93YWl0aW5nKTsKLQkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJmZjLT51bnVzZWRfbGlzdCk7Ci0JfSBlbHNlCi0JCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7CisJcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CisJZXJyID0gLUVOT01FTTsKKwlpZiAoIXJlcSkKKwkJZ290byBvdXQ7CiAKLQkvKiBJZiB3ZSBhcmUgaW4gZGVidCBkZWNyZWFzZSB0aGF0IGZpcnN0ICovCi0JaWYgKGZjLT5vdXRzdGFuZGluZ19kZWJ0KQotCQlmYy0+b3V0c3RhbmRpbmdfZGVidC0tOwotCWVsc2UKLQkJdXAoJmZjLT5vdXRzdGFuZGluZ19zZW0pOworCXJlcS0+aW4uaC51aWQgPSBjdXJyZW50LT5mc3VpZDsKKwlyZXEtPmluLmguZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJcmVxLT5pbi5oLnBpZCA9IGN1cnJlbnQtPnBpZDsKKwlyZXEtPndhaXRpbmcgPSAxOworCXJldHVybiByZXE7CisKKyBvdXQ6CisJYXRvbWljX2RlYygmZmMtPm51bV93YWl0aW5nKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiB2b2lkIGZ1c2VfcHV0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZXEtPmNvdW50KSkgewotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JCWZ1c2VfcHV0YmFja19yZXF1ZXN0KGZjLCByZXEpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJaWYgKHJlcS0+d2FpdGluZykKKwkJCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7CisJCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBmdXNlX3B1dF9yZXF1ZXN0X2xvY2tlZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJlcS0+Y291bnQpKQotCQlmdXNlX3B1dGJhY2tfcmVxdWVzdChmYywgcmVxKTsKLX0KLQotdm9pZCBmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKKy8qCisgKiBDYWxsZWQgd2l0aCBzYnB1dF9zZW0gaGVsZCBmb3IgcmVhZCAocmVxdWVzdF9lbmQpIG9yIHdyaXRlCisgKiAoZnVzZV9wdXRfc3VwZXIpLiAgQnkgdGhlIHRpbWUgZnVzZV9wdXRfc3VwZXIoKSBpcyBmaW5pc2hlZCwgYWxsCisgKiBpbm9kZXMgYmVsb25naW5nIHRvIGJhY2tncm91bmQgcmVxdWVzdHMgbXVzdCBiZSByZWxlYXNlZCwgc28gdGhlCisgKiBpcHV0cyBoYXZlIHRvIGJlIGRvbmUgd2l0aGluIHRoZSBsb2NrZWQgcmVnaW9uLgorICovCit2b2lkIGZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpcHV0KHJlcS0+aW5vZGUpOwogCWlwdXQocmVxLT5pbm9kZTIpOwotCWlmIChyZXEtPmZpbGUpCi0JCWZwdXQocmVxLT5maWxlKTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJbGlzdF9kZWwoJnJlcS0+YmdfZW50cnkpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCWlmIChmYy0+bnVtX2JhY2tncm91bmQgPT0gRlVTRV9NQVhfQkFDS0dST1VORCkgeworCQlmYy0+YmxvY2tlZCA9IDA7CisJCXdha2VfdXBfYWxsKCZmYy0+YmxvY2tlZF93YWl0cSk7CisJfQorCWZjLT5udW1fYmFja2dyb3VuZC0tOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiB9CiAKIC8qCkBAIC0xODQsMjQgKzE2NCwyOSBAQAogICogaW50ZXJydXB0ZWQgYW5kIHB1dCBpbiB0aGUgYmFja2dyb3VuZCwgaXQgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvcgogICogYW5kIGhlbmNlIG5ldmVyIGJlIHJlc2V0IGFuZCByZXVzZWQuCiAgKgotICogQ2FsbGVkIHdpdGggZnVzZV9sb2NrLCB1bmxvY2tzIGl0CisgKiBDYWxsZWQgd2l0aCBmYy0+bG9jaywgdW5sb2NrcyBpdAogICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CiAJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX0ZJTklTSEVEOwogCWlmICghcmVxLT5iYWNrZ3JvdW5kKSB7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCXdha2VfdXAoJnJlcS0+d2FpdHEpOwotCQlmdXNlX3B1dF9yZXF1ZXN0X2xvY2tlZChmYywgcmVxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmVuZCkgKHN0cnVjdCBmdXNlX2Nvbm4gKiwgc3RydWN0IGZ1c2VfcmVxICopID0gcmVxLT5lbmQ7CiAJCXJlcS0+ZW5kID0gTlVMTDsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJCWRvd25fcmVhZCgmZmMtPnNicHV0X3NlbSk7CiAJCWlmIChmYy0+bW91bnRlZCkKLQkJCWZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHJlcSk7CisJCQlmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChmYywgcmVxKTsKIAkJdXBfcmVhZCgmZmMtPnNicHV0X3NlbSk7CisKKwkJLyogZnB1dCBtdXN0IGdvIG91dHNpZGUgc2JwdXRfc2VtLCBvdGhlcndpc2UgaXQgY2FuIGRlYWRsb2NrICovCisJCWlmIChyZXEtPmZpbGUpCisJCQlmcHV0KHJlcS0+ZmlsZSk7CisKIAkJaWYgKGVuZCkKIAkJCWVuZChmYywgcmVxKTsKIAkJZWxzZQpAQCAtMjQyLDYgKzIyNyw5IEBACiB7CiAJcmVxLT5iYWNrZ3JvdW5kID0gMTsKIAlsaXN0X2FkZCgmcmVxLT5iZ19lbnRyeSwgJmZjLT5iYWNrZ3JvdW5kKTsKKwlmYy0+bnVtX2JhY2tncm91bmQrKzsKKwlpZiAoZmMtPm51bV9iYWNrZ3JvdW5kID09IEZVU0VfTUFYX0JBQ0tHUk9VTkQpCisJCWZjLT5ibG9ja2VkID0gMTsKIAlpZiAocmVxLT5pbm9kZSkKIAkJcmVxLT5pbm9kZSA9IGlncmFiKHJlcS0+aW5vZGUpOwogCWlmIChyZXEtPmlub2RlMikKQEAgLTI1MCwxNiArMjM4LDE2IEBACiAJCWdldF9maWxlKHJlcS0+ZmlsZSk7CiB9CiAKLS8qIENhbGxlZCB3aXRoIGZ1c2VfbG9jayBoZWxkLiAgUmVsZWFzZXMsIGFuZCB0aGVuIHJlYWNxdWlyZXMgaXQuICovCisvKiBDYWxsZWQgd2l0aCBmYy0+bG9jayBoZWxkLiAgUmVsZWFzZXMsIGFuZCB0aGVuIHJlYWNxdWlyZXMgaXQuICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X3dhaXRfYW5zd2VyKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlzaWdzZXRfdCBvbGRzZXQ7CiAKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCWJsb2NrX3NpZ3MoJm9sZHNldCk7CiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJlcS0+d2FpdHEsIHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfRklOSVNIRUQpOwogCXJlc3RvcmVfc2lncygmb2xkc2V0KTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJaWYgKHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfRklOSVNIRUQgJiYgIXJlcS0+aW50ZXJydXB0ZWQpCiAJCXJldHVybjsKIApAQCAtMjczLDkgKzI2MSw5IEBACiAJCSAgIGxvY2tlZCBzdGF0ZSwgdGhlcmUgbXVzdG4ndCBiZSBhbnkgZmlsZXN5c3RlbQogCQkgICBvcGVyYXRpb24gKGUuZy4gcGFnZSBmYXVsdCksIHNpbmNlIHRoYXQgY291bGQgbGVhZAogCQkgICB0byBkZWFkbG9jayAqLwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJd2FpdF9ldmVudChyZXEtPndhaXRxLCAhcmVxLT5sb2NrZWQpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIAlpZiAocmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9QRU5ESU5HKSB7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtMzA0LDE5ICsyOTIsMTQgQEAKIAlyZXEtPmluLmgudW5pcXVlID0gZmMtPnJlcWN0cjsKIAlyZXEtPmluLmgubGVuID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2luX2hlYWRlcikgKwogCQlsZW5fYXJncyhyZXEtPmluLm51bWFyZ3MsIChzdHJ1Y3QgZnVzZV9hcmcgKikgcmVxLT5pbi5hcmdzKTsKLQlpZiAoIXJlcS0+cHJlYWxsb2NhdGVkKSB7Ci0JCS8qIElmIHJlcXVlc3QgaXMgbm90IHByZWFsbG9jYXRlZCAoZWl0aGVyIEZPUkdFVCBvcgotCQkgICBSRUxFQVNFKSwgdGhlbiBzdGlsbCBkZWNyZWFzZSBvdXRzdGFuZGluZ19zZW0sIHNvCi0JCSAgIHVzZXIgY2FuJ3Qgb3BlbiBpbmZpbml0ZSBudW1iZXIgb2YgZmlsZXMgd2hpbGUgbm90Ci0JCSAgIHByb2Nlc3NpbmcgdGhlIFJFTEVBU0UgcmVxdWVzdHMuICBIb3dldmVyIGZvcgotCQkgICBlZmZpY2llbmN5IGRvIGl0IHdpdGhvdXQgYmxvY2tpbmcsIHNvIGlmIGRvd24oKQotCQkgICB3b3VsZCBibG9jaywganVzdCBpbmNyZWFzZSB0aGUgZGVidCBpbnN0ZWFkICovCi0JCWlmIChkb3duX3RyeWxvY2soJmZjLT5vdXRzdGFuZGluZ19zZW0pKQotCQkJZmMtPm91dHN0YW5kaW5nX2RlYnQrKzsKLQl9CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnBlbmRpbmcpOwogCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9QRU5ESU5HOworCWlmICghcmVxLT53YWl0aW5nKSB7CisJCXJlcS0+d2FpdGluZyA9IDE7CisJCWF0b21pY19pbmMoJmZjLT5udW1fd2FpdGluZyk7CisJfQogCXdha2VfdXAoJmZjLT53YWl0cSk7CisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIH0KIAogLyoKQEAgLTMyNSw3ICszMDgsNyBAQAogdm9pZCByZXF1ZXN0X3NlbmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCXJlcS0+aXNyZXBseSA9IDE7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWlmICghZmMtPmNvbm5lY3RlZCkKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FTk9UQ09OTjsKIAllbHNlIGlmIChmYy0+Y29ubl9lcnJvcikKQEAgLTMzOCwxNSArMzIxLDE2IEBACiAKIAkJcmVxdWVzdF93YWl0X2Fuc3dlcihmYywgcmVxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcmVxdWVzdF9zZW5kX25vd2FpdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWJhY2tncm91bmRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoZmMtPmNvbm5lY3RlZCkgewogCQlxdWV1ZV9yZXF1ZXN0KGZjLCByZXEpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9IGVsc2UgewogCQlyZXEtPm91dC5oLmVycm9yID0gLUVOT1RDT05OOwogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKQEAgLTM2Miw5ICszNDYsNiBAQAogdm9pZCByZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJcmVxLT5pc3JlcGx5ID0gMTsKLQlzcGluX2xvY2soJmZ1c2VfbG9jayk7Ci0JYmFja2dyb3VuZF9yZXF1ZXN0KGZjLCByZXEpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwogCXJlcXVlc3Rfc2VuZF9ub3dhaXQoZmMsIHJlcSk7CiB9CiAKQEAgLTM3MywxNiArMzU0LDE2IEBACiAgKiBhbnl0aGluZyB0aGF0IGNvdWxkIGNhdXNlIGEgcGFnZS1mYXVsdC4gIElmIHRoZSByZXF1ZXN0IHdhcyBhbHJlYWR5CiAgKiBpbnRlcnJ1cHRlZCBiYWlsIG91dC4KICAqLwotc3RhdGljIGludCBsb2NrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCitzdGF0aWMgaW50IGxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJaW50IGVyciA9IDA7CiAJaWYgKHJlcSkgewotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQlpZiAocmVxLT5pbnRlcnJ1cHRlZCkKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCWVsc2UKIAkJCXJlcS0+bG9ja2VkID0gMTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0zOTIsMTggKzM3MywxOSBAQAogICogcmVxdWVzdGVyIHRocmVhZCBpcyBjdXJyZW50bHkgd2FpdGluZyBmb3IgaXQgdG8gYmUgdW5sb2NrZWQsIHNvCiAgKiB3YWtlIGl0IHVwLgogICovCi1zdGF0aWMgdm9pZCB1bmxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIHVubG9ja19yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpZiAocmVxKSB7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCXJlcS0+bG9ja2VkID0gMDsKIAkJaWYgKHJlcS0+aW50ZXJydXB0ZWQpCiAJCQl3YWtlX3VwKCZyZXEtPndhaXRxKTsKLQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJfQogfQogCiBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlIHsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAlpbnQgd3JpdGU7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJY29uc3Qgc3RydWN0IGlvdmVjICppb3Y7CkBAIC00MTYsMTEgKzM5OCwxMiBAQAogCXVuc2lnbmVkIGxlbjsKIH07CiAKLXN0YXRpYyB2b2lkIGZ1c2VfY29weV9pbml0KHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBpbnQgd3JpdGUsCi0JCQkgICBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCitzdGF0aWMgdm9pZCBmdXNlX2NvcHlfaW5pdChzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgc3RydWN0IGZ1c2VfY29ubiAqZmMsCisJCQkgICBpbnQgd3JpdGUsIHN0cnVjdCBmdXNlX3JlcSAqcmVxLAorCQkJICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKIAltZW1zZXQoY3MsIDAsIHNpemVvZigqY3MpKTsKKwljcy0+ZmMgPSBmYzsKIAljcy0+d3JpdGUgPSB3cml0ZTsKIAljcy0+cmVxID0gcmVxOwogCWNzLT5pb3YgPSBpb3Y7CkBAIC00NTAsNyArNDMzLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAlpbnQgZXJyOwogCi0JdW5sb2NrX3JlcXVlc3QoY3MtPnJlcSk7CisJdW5sb2NrX3JlcXVlc3QoY3MtPmZjLCBjcy0+cmVxKTsKIAlmdXNlX2NvcHlfZmluaXNoKGNzKTsKIAlpZiAoIWNzLT5zZWdsZW4pIHsKIAkJQlVHX09OKCFjcy0+bnJfc2Vncyk7CkBAIC00NzMsNyArNDU2LDcgQEAKIAljcy0+c2VnbGVuIC09IGNzLT5sZW47CiAJY3MtPmFkZHIgKz0gY3MtPmxlbjsKIAotCXJldHVybiBsb2NrX3JlcXVlc3QoY3MtPnJlcSk7CisJcmV0dXJuIGxvY2tfcmVxdWVzdChjcy0+ZmMsIGNzLT5yZXEpOwogfQogCiAvKiBEbyBhcyBtdWNoIGNvcHkgdG8vZnJvbSB1c2Vyc3BhY2UgYnVmZmVyIGFzIHdlIGNhbiAqLwpAQCAtNTg1LDkgKzU2OCw5IEBACiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCi0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQlzY2hlZHVsZSgpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZmYy0+d2FpdHEsICZ3YWl0KTsKQEAgLTYwNiwxOCArNTg5LDIxIEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqb2ZmKQogewogCWludCBlcnI7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJc3RydWN0IGZ1c2VfaW4gKmluOwogCXN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgY3M7CiAJdW5zaWduZWQgcmVxc2l6ZTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CisJaWYgKCFmYykKKwkJcmV0dXJuIC1FUEVSTTsKIAogIHJlc3RhcnQ6Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IC1FUEVSTTsKLQlpZiAoIWZjKQorCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWVyciA9IC1FQUdBSU47CisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgZmMtPmNvbm5lY3RlZCAmJgorCSAgICBsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpCiAJCWdvdG8gZXJyX3VubG9jazsKKwogCXJlcXVlc3Rfd2FpdChmYyk7CiAJZXJyID0gLUVOT0RFVjsKIAlpZiAoIWZjLT5jb25uZWN0ZWQpCkBAIC02NDEsMTQgKzYyNywxNCBAQAogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKIAkJZ290byByZXN0YXJ0OwogCX0KLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlmdXNlX2NvcHlfaW5pdCgmY3MsIDEsIHJlcSwgaW92LCBucl9zZWdzKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworCWZ1c2VfY29weV9pbml0KCZjcywgZmMsIDEsIHJlcSwgaW92LCBucl9zZWdzKTsKIAllcnIgPSBmdXNlX2NvcHlfb25lKCZjcywgJmluLT5oLCBzaXplb2YoaW4tPmgpKTsKIAlpZiAoIWVycikKIAkJZXJyID0gZnVzZV9jb3B5X2FyZ3MoJmNzLCBpbi0+bnVtYXJncywgaW4tPmFyZ3BhZ2VzLAogCQkJCSAgICAgKHN0cnVjdCBmdXNlX2FyZyAqKSBpbi0+YXJncywgMCk7CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlyZXEtPmxvY2tlZCA9IDA7CiAJaWYgKCFlcnIgJiYgcmVxLT5pbnRlcnJ1cHRlZCkKIAkJZXJyID0gLUVOT0VOVDsKQEAgLTY2MywxMiArNjQ5LDEyIEBACiAJZWxzZSB7CiAJCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9TRU5UOwogCQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnByb2Nlc3NpbmcpOwotCQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAl9CiAJcmV0dXJuIHJlcXNpemU7CiAKICBlcnJfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzM1LDkgKzcyMSw5IEBACiAJc3RydWN0IGZ1c2VfY29weV9zdGF0ZSBjczsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKCFmYykKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAtRVBFUk07CiAKLQlmdXNlX2NvcHlfaW5pdCgmY3MsIDAsIE5VTEwsIGlvdiwgbnJfc2Vncyk7CisJZnVzZV9jb3B5X2luaXQoJmNzLCBmYywgMCwgTlVMTCwgaW92LCBucl9zZWdzKTsKIAlpZiAobmJ5dGVzIDwgc2l6ZW9mKHN0cnVjdCBmdXNlX291dF9oZWFkZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzQ5LDcgKzczNSw3IEBACiAJICAgIG9oLmxlbiAhPSBuYnl0ZXMpCiAJCWdvdG8gZXJyX2ZpbmlzaDsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghZmMtPmNvbm5lY3RlZCkKIAkJZ290byBlcnJfdW5sb2NrOwpAQCAtNzYwLDkgKzc0Niw5IEBACiAJCWdvdG8gZXJyX3VubG9jazsKIAogCWlmIChyZXEtPmludGVycnVwdGVkKSB7Ci0JCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQlmdXNlX2NvcHlfZmluaXNoKCZjcyk7Ci0JCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CkBAIC03NzAsMTIgKzc1NiwxMiBAQAogCXJlcS0+b3V0LmggPSBvaDsKIAlyZXEtPmxvY2tlZCA9IDE7CiAJY3MucmVxID0gcmVxOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiAKIAllcnIgPSBjb3B5X291dF9hcmdzKCZjcywgJnJlcS0+b3V0LCBuYnl0ZXMpOwogCWZ1c2VfY29weV9maW5pc2goJmNzKTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAlyZXEtPmxvY2tlZCA9IDA7CiAJaWYgKCFlcnIpIHsKIAkJaWYgKHJlcS0+aW50ZXJydXB0ZWQpCkBAIC03ODcsNyArNzczLDcgQEAKIAlyZXR1cm4gZXJyID8gZXJyIDogbmJ5dGVzOwogCiAgZXJyX3VubG9jazoKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogIGVycl9maW5pc2g6CiAJZnVzZV9jb3B5X2ZpbmlzaCgmY3MpOwogCXJldHVybiBlcnI7CkBAIC04MDQsMTggKzc5MCwxOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgZnVzZV9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJdW5zaWduZWQgbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOwogCWlmICghZmMpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gUE9MTEVSUjsKIAogCXBvbGxfd2FpdChmaWxlLCAmZmMtPndhaXRxLCB3YWl0KTsKIAotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmZjLT5wZW5kaW5nKSkKLSAgICAgICAgICAgICAgICBtYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJaWYgKCFmYy0+Y29ubmVjdGVkKQorCQltYXNrID0gUE9MTEVSUjsKKwllbHNlIGlmICghbGlzdF9lbXB0eSgmZmMtPnBlbmRpbmcpKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAogCXJldHVybiBtYXNrOwogfQpAQCAtODIzLDcgKzgxMCw3IEBACiAvKgogICogQWJvcnQgYWxsIHJlcXVlc3RzIG9uIHRoZSBnaXZlbiBsaXN0IChwZW5kaW5nIG9yIHByb2Nlc3NpbmcpCiAgKgotICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbmQgcmVhY3F1aXJlcyBmdXNlX2xvY2sKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYW5kIHJlYWNxdWlyZXMgZmMtPmxvY2sKICAqLwogc3RhdGljIHZvaWQgZW5kX3JlcXVlc3RzKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewpAQCAtODMyLDcgKzgxOSw3IEBACiAJCXJlcSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FQ09OTkFCT1JURUQ7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwotCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCX0KIH0KIApAQCAtODYzLDEwICs4NTAsMTAgQEAKIAkJCXJlcS0+ZW5kID0gTlVMTDsKIAkJCS8qIFRoZSBlbmQgZnVuY3Rpb24gd2lsbCBjb25zdW1lIHRoaXMgcmVmZXJlbmNlICovCiAJCQlfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTsKLQkJCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIAkJCXdhaXRfZXZlbnQocmVxLT53YWl0cSwgIXJlcS0+bG9ja2VkKTsKIAkJCWVuZChmYywgcmVxKTsKLQkJCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwkJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQl9CiAJfQogfQpAQCAtODkzLDM1ICs4ODAsNDQgQEAKICAqLwogdm9pZCBmdXNlX2Fib3J0X2Nvbm4oc3RydWN0IGZ1c2VfY29ubiAqZmMpCiB7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWlmIChmYy0+Y29ubmVjdGVkKSB7CiAJCWZjLT5jb25uZWN0ZWQgPSAwOwogCQllbmRfaW9fcmVxdWVzdHMoZmMpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cGVuZGluZyk7CiAJCWVuZF9yZXF1ZXN0cyhmYywgJmZjLT5wcm9jZXNzaW5nKTsKIAkJd2FrZV91cF9hbGwoJmZjLT53YWl0cSk7CisJCWtpbGxfZmFzeW5jKCZmYy0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgZnVzZV9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlmYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGZ1c2VfZ2V0X2Nvbm4oZmlsZSk7CiAJaWYgKGZjKSB7CisJCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCQlmYy0+Y29ubmVjdGVkID0gMDsKIAkJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnBlbmRpbmcpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cHJvY2Vzc2luZyk7Ci0JfQotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCWlmIChmYykKKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwkJZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJmZjLT5mYXN5bmMpOwogCQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOworCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZ1c2VfZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCit7CisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOworCWlmICghZmMpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBObyBsb2NraW5nIC0gZmFzeW5jX2hlbHBlciBkb2VzIGl0cyBvd24gbG9ja2luZyAqLworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmZjLT5mYXN5bmMpOworfQorCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApAQCAtOTMxLDYgKzkyNyw3IEBACiAJLndyaXRldgkJPSBmdXNlX2Rldl93cml0ZXYsCiAJLnBvbGwJCT0gZnVzZV9kZXZfcG9sbCwKIAkucmVsZWFzZQk9IGZ1c2VfZGV2X3JlbGVhc2UsCisJLmZhc3luYwkJPSBmdXNlX2Rldl9mYXN5bmMsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZnVzZV9taXNjZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggMjU2MzU1Yi4uOGQ3NTQ2ZSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMTcsOCArMTE3LDggQEAKIAkJCXJldHVybiAwOwogCiAJCWZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0JCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCQlpZiAoIXJlcSkKKwkJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwkJaWYgKElTX0VSUihyZXEpKQogCQkJcmV0dXJuIDA7CiAKIAkJZnVzZV9sb29rdXBfaW5pdChyZXEsIGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZW50cnksICZvdXRhcmcpOwpAQCAtMTg4LDkgKzE4OCw5IEBACiAJaWYgKGVudHJ5LT5kX25hbWUubGVuID4gRlVTRV9OQU1FX01BWCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihyZXEpKTsKIAogCWZ1c2VfbG9va3VwX2luaXQocmVxLCBkaXIsIGVudHJ5LCAmb3V0YXJnKTsKIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CkBAIC0yNDQsMTUgKzI0NCwxNCBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCWludCBmbGFncyA9IG5kLT5pbnRlbnQub3Blbi5mbGFncyAtIDE7CiAKLQllcnIgPSAtRU5PU1lTOwogCWlmIChmYy0+bm9fY3JlYXRlKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9TWVM7CiAKLQllcnIgPSAtRUlOVFI7Ci0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCWdvdG8gb3V0OworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCisJZXJyID0gLUVOT01FTTsKIAlmZiA9IGZ1c2VfZmlsZV9hbGxvYygpOwogCWlmICghZmYpCiAJCWdvdG8gb3V0X3B1dF9yZXF1ZXN0OwpAQCAtMzE0LDcgKzMxMyw2IEBACiAJZnVzZV9maWxlX2ZyZWUoZmYpOwogIG91dF9wdXRfcmVxdWVzdDoKIAlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwotIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNzUsOSArMzczLDkgQEAKIHsKIAlzdHJ1Y3QgZnVzZV9ta25vZF9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5tb2RlID0gbW9kZTsKQEAgLTQwNyw5ICs0MDUsOSBAQAogewogCXN0cnVjdCBmdXNlX21rZGlyX2luIGluYXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLm1vZGUgPSBtb2RlOwpAQCAtNDI3LDkgKzQyNSw5IEBACiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAJdW5zaWduZWQgbGVuID0gc3RybGVuKGxpbmspICsgMTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9TWU1MSU5LOwogCXJlcS0+aW4ubnVtYXJncyA9IDI7CkBAIC00NDQsOSArNDQyLDkgQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1VOTElOSzsKIAlyZXEtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKQEAgLTQ3Niw5ICs0NzQsOSBAQAogewogCWludCBlcnI7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfUk1ESVI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRpcik7CkBAIC01MDQsOSArNTAyLDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX3JlbmFtZV9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4ob2xkZGlyKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5uZXdkaXIgPSBnZXRfbm9kZV9pZChuZXdkaXIpOwpAQCAtNTUzLDkgKzU1MSw5IEBACiAJc3RydWN0IGZ1c2VfbGlua19pbiBpbmFyZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5vbGRub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CkBAIC01ODMsOSArNTgxLDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX2F0dHJfb3V0IGFyZzsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX0dFVEFUVFI7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKQEAgLTY3Myw5ICs2NzEsOSBAQAogCWlmIChmYy0+bm9fYWNjZXNzKQogCQlyZXR1cm4gMDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcubWFzayA9IG1hc2s7CkBAIC03ODAsOSArNzc4LDkgQEAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkgewpAQCAtODA5LDExICs4MDcsMTEgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CiAJY2hhciAqbGluazsKIAotCWlmICghcmVxKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihyZXEpKTsKIAogCWxpbmsgPSAoY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFsaW5rKSB7CkBAIC05MzMsOSArOTMxLDkgQEAKIAkJfQogCX0KIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaWF0dHJfdG9fZmF0dHIoYXR0ciwgJmluYXJnKTsKQEAgLTk5NSw5ICs5OTMsOSBAQAogCWlmIChmYy0+bm9fc2V0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMDM1LDkgKzEwMzMsOSBAQAogCWlmIChmYy0+bm9fZ2V0eGF0dHIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuc2l6ZSA9IHNpemU7CkBAIC0xMDg1LDkgKzEwODMsOSBAQAogCWlmIChmYy0+bm9fbGlzdHhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwogCWluYXJnLnNpemUgPSBzaXplOwpAQCAtMTEzMSw5ICsxMTI5LDkgQEAKIAlpZiAoZmMtPm5vX3JlbW92ZXhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1JFTU9WRVhBVFRSOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDk3NWYyNjkuLmZjMzQyY2YgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMiw5ICsyMiw5IEBACiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJaW50IGVycjsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKGluYXJnKSk7CiAJaW5hcmcuZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgfihPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkgfCBPX1RSVU5DKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogCWlmIChmYy0+bm9fZmx1c2gpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5maCA9IGZmLT5maDsKQEAgLTIyMyw5ICsyMjMsOSBAQAogCWlmICgoIWlzZGlyICYmIGZjLT5ub19mc3luYykgfHwgKGlzZGlyICYmIGZjLT5ub19mc3luY2RpcikpCiAJCXJldHVybiAwOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAltZW1zZXQoJmluYXJnLCAwLCBzaXplb2YoaW5hcmcpKTsKIAlpbmFyZy5maCA9IGZmLT5maDsKQEAgLTI5Nyw5ICsyOTcsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG91dDsKIAotCWVyciA9IC1FSU5UUjsKLQlyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKLQlpZiAoIXJlcSkKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWVyciA9IFBUUl9FUlIocmVxKTsKKwlpZiAoSVNfRVJSKHJlcSkpCiAJCWdvdG8gb3V0OwogCiAJcmVxLT5vdXQucGFnZV96ZXJvaW5nID0gMTsKQEAgLTM2OCwxMCArMzY4LDEwIEBACiAJICAgICAocmVxLT5udW1fcGFnZXMgKyAxKSAqIFBBR0VfQ0FDSEVfU0laRSA+IGZjLT5tYXhfcmVhZCB8fAogCSAgICAgcmVxLT5wYWdlc1tyZXEtPm51bV9wYWdlcyAtIDFdLT5pbmRleCArIDEgIT0gcGFnZS0+aW5kZXgpKSB7CiAJCWZ1c2Vfc2VuZF9yZWFkcGFnZXMocmVxLCBkYXRhLT5maWxlLCBpbm9kZSk7Ci0JCWRhdGEtPnJlcSA9IHJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCQlpZiAoIXJlcSkgeworCQlkYXRhLT5yZXEgPSByZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCQlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJcmV0dXJuIC1FSU5UUjsKKwkJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAJCX0KIAl9CiAJcmVxLT5wYWdlc1tyZXEtPm51bV9wYWdlc10gPSBwYWdlOwpAQCAtMzkyLDEzICszOTIsMTcgQEAKIAogCWRhdGEuZmlsZSA9IGZpbGU7CiAJZGF0YS5pbm9kZSA9IGlub2RlOwotCWRhdGEucmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFkYXRhLnJlcSkKLQkJcmV0dXJuIC1FSU5UUjsKKwlkYXRhLnJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihkYXRhLnJlcSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEucmVxKTsKIAogCWVyciA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsIGZ1c2VfcmVhZHBhZ2VzX2ZpbGwsICZkYXRhKTsKLQlpZiAoIWVycikKLQkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOworCWlmICghZXJyKSB7CisJCWlmIChkYXRhLnJlcS0+bnVtX3BhZ2VzKQorCQkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOworCQllbHNlCisJCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBkYXRhLnJlcSk7CisJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ1MSw5ICs0NTUsOSBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwpAQCAtNTI4LDkgKzUzMiw5IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCiAJCXJldHVybiAtRUlPOwogCi0JcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVFI7CisJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZV90IG5yZXM7CkBAIC01NjEsOCArNTY1LDEyIEBACiAJCWJ1ZiArPSBucmVzOwogCQlpZiAobnJlcyAhPSBuYnl0ZXMpCiAJCQlicmVhazsKLQkJaWYgKGNvdW50KQotCQkJZnVzZV9yZXNldF9yZXF1ZXN0KHJlcSk7CisJCWlmIChjb3VudCkgeworCQkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwkJCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJCQlpZiAoSVNfRVJSKHJlcSkpCisJCQkJYnJlYWs7CisJCX0KIAl9CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkgewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggYTE2YTA0Zi4uMDQ3NDIwMiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0xOCw4ICsxOCw4IEBACiAvKiogTWF4IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgc2luZ2xlIHJlYWQgcmVxdWVzdCAqLwogI2RlZmluZSBGVVNFX01BWF9QQUdFU19QRVJfUkVRIDMyCiAKLS8qKiBJZiBtb3JlIHJlcXVlc3RzIGFyZSBvdXRzdGFuZGluZywgdGhlbiB0aGUgb3BlcmF0aW9uIHdpbGwgYmxvY2sgKi8KLSNkZWZpbmUgRlVTRV9NQVhfT1VUU1RBTkRJTkcgMTAKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZyBiYWNrZ3JvdW5kIHJlcXVlc3RzICovCisjZGVmaW5lIEZVU0VfTUFYX0JBQ0tHUk9VTkQgMTAKIAogLyoqIEl0IGNvdWxkIGJlIGFzIGxhcmdlIGFzIFBBVEhfTUFYLCBidXQgd291bGQgdGhhdCBoYXZlIGFueSB1c2VzPyAqLwogI2RlZmluZSBGVVNFX05BTUVfTUFYIDEwMjQKQEAgLTEzMSw4ICsxMzEsOCBAQAogICogQSByZXF1ZXN0IHRvIHRoZSBjbGllbnQKICAqLwogc3RydWN0IGZ1c2VfcmVxIHsKLQkvKiogVGhpcyBjYW4gYmUgb24gZWl0aGVyIHVudXNlZF9saXN0LCBwZW5kaW5nIHByb2Nlc3Npbmcgb3IKLQkgICAgaW8gbGlzdHMgaW4gZnVzZV9jb25uICovCisJLyoqIFRoaXMgY2FuIGJlIG9uIGVpdGhlciBwZW5kaW5nIHByb2Nlc3Npbmcgb3IgaW8gbGlzdHMgaW4KKwkgICAgZnVzZV9jb25uICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJLyoqIEVudHJ5IG9uIHRoZSBiYWNrZ3JvdW5kIGxpc3QgKi8KQEAgLTE0NCwxNSArMTQ0LDEyIEBACiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGJpdGZpZWxkcyBhcmUgZWl0aGVyIHNldCBvbmNlIGJlZm9yZSB0aGUKIAkgKiByZXF1ZXN0IGlzIHF1ZXVlZCBvciBzZXR0aW5nL2NsZWFyaW5nIHRoZW0gaXMgcHJvdGVjdGVkIGJ5Ci0JICogZnVzZV9sb2NrCisJICogZnVzZV9jb25uLT5sb2NrCiAJICovCiAKIAkvKiogVHJ1ZSBpZiB0aGUgcmVxdWVzdCBoYXMgcmVwbHkgKi8KIAl1bnNpZ25lZCBpc3JlcGx5OjE7CiAKLQkvKiogVGhlIHJlcXVlc3QgaXMgcHJlYWxsb2NhdGVkICovCi0JdW5zaWduZWQgcHJlYWxsb2NhdGVkOjE7Ci0KIAkvKiogVGhlIHJlcXVlc3Qgd2FzIGludGVycnVwdGVkICovCiAJdW5zaWduZWQgaW50ZXJydXB0ZWQ6MTsKIApAQCAtMTYyLDYgKzE1OSw5IEBACiAJLyoqIERhdGEgaXMgYmVpbmcgY29waWVkIHRvL2Zyb20gdGhlIHJlcXVlc3QgKi8KIAl1bnNpZ25lZCBsb2NrZWQ6MTsKIAorCS8qKiBSZXF1ZXN0IGlzIGNvdW50ZWQgYXMgIndhaXRpbmciICovCisJdW5zaWduZWQgd2FpdGluZzoxOworCiAJLyoqIFN0YXRlIG9mIHRoZSByZXF1ZXN0ICovCiAJZW51bSBmdXNlX3JlcV9zdGF0ZSBzdGF0ZTsKIApAQCAtMjEzLDYgKzIxMyw5IEBACiAgKiB1bm1vdW50ZWQuCiAgKi8KIHN0cnVjdCBmdXNlX2Nvbm4geworCS8qKiBMb2NrIHByb3RlY3RpbmcgYWNjZXNzZXNzIHRvICBtZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdCBsb2NrOworCiAJLyoqIFRoZSB1c2VyIGlkIGZvciB0aGlzIG1vdW50ICovCiAJdWlkX3QgdXNlcl9pZDsKIApAQCAtMjQ0LDE5ICsyNDcsMjAgQEAKIAkgICAgaW50ZXJydXB0ZWQgcmVxdWVzdCkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJhY2tncm91bmQ7CiAKLQkvKiogQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCi0Jc3RydWN0IHNlbWFwaG9yZSBvdXRzdGFuZGluZ19zZW07CisJLyoqIE51bWJlciBvZiByZXF1ZXN0cyBjdXJyZW50bHkgaW4gdGhlIGJhY2tncm91bmQgKi8KKwl1bnNpZ25lZCBudW1fYmFja2dyb3VuZDsKIAotCS8qKiBUaGlzIGNvdW50cyB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIGlmCi0JICAgIG91dHN0YW5kaW5nX3NlbSB3b3VsZCBnbyBuZWdhdGl2ZSAqLwotCXVuc2lnbmVkIG91dHN0YW5kaW5nX2RlYnQ7CisJLyoqIEZsYWcgaW5kaWNhdGluZyBpZiBjb25uZWN0aW9uIGlzIGJsb2NrZWQuICBUaGlzIHdpbGwgYmUKKwkgICAgdGhlIGNhc2UgYmVmb3JlIHRoZSBJTklUIHJlcGx5IGlzIHJlY2VpdmVkLCBhbmQgaWYgdGhlcmUKKwkgICAgYXJlIHRvbyBtYW55IG91dHN0YWRpbmcgYmFja2dyb3VuZHMgcmVxdWVzdHMgKi8KKwlpbnQgYmxvY2tlZDsKKworCS8qKiB3YWl0cSBmb3IgYmxvY2tlZCBjb25uZWN0aW9uICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgYmxvY2tlZF93YWl0cTsKIAogCS8qKiBSVyBzZW1hcGhvcmUgZm9yIGV4Y2x1c2lvbiB3aXRoIGZ1c2VfcHV0X3N1cGVyKCkgKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIHNicHV0X3NlbTsKIAotCS8qKiBUaGUgbGlzdCBvZiB1bnVzZWQgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHVudXNlZF9saXN0OwotCiAJLyoqIFRoZSBuZXh0IHVuaXF1ZSByZXF1ZXN0IGlkICovCiAJdTY0IHJlcWN0cjsKIApAQCAtMzE4LDYgKzMyMiw5IEBACiAKIAkvKioga29iamVjdCAqLwogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisKKwkvKiogT19BU1lOQyByZXF1ZXN0cyAqLworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmdXNlX2Nvbm4gKmdldF9mdXNlX2Nvbm5fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTM0OSwyMSArMzU2LDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnM7CiAKIC8qKgotICogVGhpcyBpcyB0aGUgc2luZ2xlIGdsb2JhbCBzcGlubG9jayB3aGljaCBwcm90ZWN0cyBGVVNFJ3Mgc3RydWN0dXJlcwotICoKLSAqIFRoZSBmb2xsb3dpbmcgZGF0YSBpcyBwcm90ZWN0ZWQgYnkgdGhpcyBsb2NrOgotICoKLSAqICAtIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgb2YgdGhlIGRldmljZSBmaWxlCi0gKiAgLSB0aGUgc19mc19pbmZvIGZpZWxkIG9mIHRoZSBzdXBlciBibG9jawotICogIC0gdW51c2VkX2xpc3QsIHBlbmRpbmcsIHByb2Nlc3NpbmcgbGlzdHMgaW4gZnVzZV9jb25uCi0gKiAgLSBiYWNrZ3JvdW5kIGxpc3QgaW4gZnVzZV9jb25uCi0gKiAgLSB0aGUgdW5pcXVlIHJlcXVlc3QgSUQgY291bnRlciByZXFjdHIgaW4gZnVzZV9jb25uCi0gKiAgLSB0aGUgc2IgKHN1cGVyX2Jsb2NrKSBmaWVsZCBpbiBmdXNlX2Nvbm4KLSAqICAtIHRoZSBmaWxlIChkZXZpY2UgZmlsZSkgZmllbGQgaW4gZnVzZV9jb25uCi0gKi8KLWV4dGVybiBzcGlubG9ja190IGZ1c2VfbG9jazsKLQotLyoqCiAgKiBHZXQgYSBmaWxsZWQgaW4gaW5vZGUKICAqLwogc3RydWN0IGlub2RlICpmdXNlX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBub2RlaWQsCkBAIC00NjEsMTEgKzQ1MywxMSBAQAogLyoqCiAgKiBSZXNlcnZlIGEgcHJlYWxsb2NhdGVkIHJlcXVlc3QKICAqLwotc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKK3N0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKIAogLyoqCi0gKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIGEgcmVxdWVzdC4gIElmIGNvdW50IGdvZXMgdG8gemVybyBwdXQKLSAqIG9uIHVudXNlZCBsaXN0IChwcmVhbGxvY2F0ZWQpIG9yIGZyZWUgcmVxdWVzdCAobm90IHByZWFsbG9jYXRlZCkuCisgKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIGEgcmVxdWVzdC4gIElmIGNvdW50IGdvZXMgdG8gemVybyBmcmVlCisgKiB0aGUgcmVxdWVzdC4KICAqLwogdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7CiAKQEAgLTQ4Nyw3ICs0NzksNyBAQAogLyoqCiAgKiBSZWxlYXNlIGlub2RlcyBhbmQgZmlsZSBhc3NvY2lhdGVkIHdpdGggYmFja2dyb3VuZCByZXF1ZXN0CiAgKi8KLXZvaWQgZnVzZV9yZWxlYXNlX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfcmVxICpyZXEpOwordm9pZCBmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpOwogCiAvKiBBYm9ydCBhbGwgcmVxdWVzdHMgKi8KIHZvaWQgZnVzZV9hYm9ydF9jb25uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA4NzllNmZiLi43NjI3MDIyIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgRlVTRTogRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UKLSAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KKyAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgIE1pa2xvcyBTemVyZWRpIDxtaWtsb3NAc3plcmVkaS5odT4KIAogICBUaGlzIHByb2dyYW0gY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTC4KICAgU2VlIHRoZSBmaWxlIENPUFlJTkcuCkBAIC0yMiw3ICsyMiw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXNwaW5sb2NrX3QgZnVzZV9sb2NrOwogc3RhdGljIGttZW1fY2FjaGVfdCAqZnVzZV9pbm9kZV9jYWNoZXA7CiBzdGF0aWMgc3RydWN0IHN1YnN5c3RlbSBjb25uZWN0aW9uc19zdWJzeXM7CiAKQEAgLTIwNywxNSArMjA2LDE3IEBACiAKIAlkb3duX3dyaXRlKCZmYy0+c2JwdXRfc2VtKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjLT5iYWNrZ3JvdW5kKSkKLQkJZnVzZV9yZWxlYXNlX2JhY2tncm91bmQobGlzdF9lbnRyeShmYy0+YmFja2dyb3VuZC5uZXh0LAorCQlmdXNlX3JlbGVhc2VfYmFja2dyb3VuZChmYywKKwkJCQkJbGlzdF9lbnRyeShmYy0+YmFja2dyb3VuZC5uZXh0LAogCQkJCQkJICAgc3RydWN0IGZ1c2VfcmVxLCBiZ19lbnRyeSkpOwogCi0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXNwaW5fbG9jaygmZmMtPmxvY2spOwogCWZjLT5tb3VudGVkID0gMDsKIAlmYy0+Y29ubmVjdGVkID0gMDsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCXVwX3dyaXRlKCZmYy0+c2JwdXRfc2VtKTsKIAkvKiBGbHVzaCBhbGwgcmVhZGVycyBvbiB0aGlzIGZzICovCisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2FsbCgmZmMtPndhaXRxKTsKIAlrb2JqZWN0X2RlbCgmZmMtPmtvYmopOwogCWtvYmplY3RfcHV0KCZmYy0+a29iaik7CkBAIC0yNDIsOSArMjQzLDkgQEAKIAlzdHJ1Y3QgZnVzZV9zdGF0ZnNfb3V0IG91dGFyZzsKIAlpbnQgZXJyOwogCi0gICAgICAgIHJlcSA9IGZ1c2VfZ2V0X3JlcXVlc3QoZmMpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlRSOworCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CisJaWYgKElTX0VSUihyZXEpKQorCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCiAJbWVtc2V0KCZvdXRhcmcsIDAsIHNpemVvZihvdXRhcmcpKTsKIAlyZXEtPmluLm51bWFyZ3MgPSAwOwpAQCAtMzY5LDE1ICszNzAsNyBAQAogCiBzdGF0aWMgdm9pZCBmdXNlX2Nvbm5fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKLQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm5fa29iaihrb2JqKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZmMtPnVudXNlZF9saXN0KSkgewotCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKLQkJcmVxID0gbGlzdF9lbnRyeShmYy0+dW51c2VkX2xpc3QubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCWZ1c2VfcmVxdWVzdF9mcmVlKHJlcSk7Ci0JfQotCWtmcmVlKGZjKTsKKwlrZnJlZShnZXRfZnVzZV9jb25uX2tvYmooa29iaikpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqbmV3X2Nvbm4odm9pZCkKQEAgLTM4Niw2NCArMzc5LDI1IEBACiAKIAlmYyA9IGt6YWxsb2Moc2l6ZW9mKCpmYyksIEdGUF9LRVJORUwpOwogCWlmIChmYykgewotCQlpbnQgaTsKKwkJc3Bpbl9sb2NrX2luaXQoJmZjLT5sb2NrKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPndhaXRxKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPmJsb2NrZWRfd2FpdHEpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnBlbmRpbmcpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnByb2Nlc3NpbmcpOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPmlvKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmZjLT51bnVzZWRfbGlzdCk7CiAJCUlOSVRfTElTVF9IRUFEKCZmYy0+YmFja2dyb3VuZCk7Ci0JCXNlbWFfaW5pdCgmZmMtPm91dHN0YW5kaW5nX3NlbSwgMSk7IC8qIE9uZSBmb3IgSU5JVCAqLwogCQlpbml0X3J3c2VtKCZmYy0+c2JwdXRfc2VtKTsKIAkJa29ial9zZXRfa3NldF9zKGZjLCBjb25uZWN0aW9uc19zdWJzeXMpOwogCQlrb2JqZWN0X2luaXQoJmZjLT5rb2JqKTsKIAkJYXRvbWljX3NldCgmZmMtPm51bV93YWl0aW5nLCAwKTsKLQkJZm9yIChpID0gMDsgaSA8IEZVU0VfTUFYX09VVFNUQU5ESU5HOyBpKyspIHsKLQkJCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7Ci0JCQlpZiAoIXJlcSkgewotCQkJCWtvYmplY3RfcHV0KCZmYy0+a29iaik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmZmMtPnVudXNlZF9saXN0KTsKLQkJfQogCQlmYy0+YmRpLnJhX3BhZ2VzID0gKFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0KSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJZmMtPmJkaS51bnBsdWdfaW9fZm4gPSBkZWZhdWx0X3VucGx1Z19pb19mbjsKIAkJZmMtPnJlcWN0ciA9IDA7CisJCWZjLT5ibG9ja2VkID0gMTsKIAl9CiAJcmV0dXJuIGZjOwogfQogCi1zdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqZ2V0X2Nvbm4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmM7Ci0JaW50IGVycjsKLQotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKGZpbGUtPmZfb3AgIT0gJmZ1c2VfZGV2X29wZXJhdGlvbnMpCi0JCWdvdG8gb3V0X2VycjsKLQotCWVyciA9IC1FTk9NRU07Ci0JZmMgPSBuZXdfY29ubigpOwotCWlmICghZmMpCi0JCWdvdG8gb3V0X2VycjsKLQotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQllcnIgPSAtRUlOVkFMOwotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWtvYmplY3RfZ2V0KCZmYy0+a29iaik7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmM7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7Ci0JcmV0dXJuIGZjOwotCi0gb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKLQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwotIG91dF9lcnI6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2V0X3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbW9kZSkKIHsKIAlzdHJ1Y3QgZnVzZV9hdHRyIGF0dHI7CkBAIC00NjcsNyArNDIxLDYgQEAKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgZnVzZV9pbml0X291dCAqYXJnID0gJnJlcS0+bWlzYy5pbml0X291dDsKIAogCWlmIChyZXEtPm91dC5oLmVycm9yIHx8IGFyZy0+bWFqb3IgIT0gRlVTRV9LRVJORUxfVkVSU0lPTikKQEAgLTQ4NiwyMiArNDM5LDEzIEBACiAJCWZjLT5taW5vciA9IGFyZy0+bWlub3I7CiAJCWZjLT5tYXhfd3JpdGUgPSBhcmctPm1pbm9yIDwgNSA/IDQwOTYgOiBhcmctPm1heF93cml0ZTsKIAl9Ci0KLQkvKiBBZnRlciBJTklUIHJlcGx5IGlzIHJlY2VpdmVkIG90aGVyIHJlcXVlc3RzIGNhbiBnbwotCSAgIG91dC4gIFNvIGRvIChGVVNFX01BWF9PVVRTVEFORElORyAtIDEpIG51bWJlciBvZgotCSAgIHVwKClzIG9uIG91dHN0YW5kaW5nX3NlbS4gIFRoZSBsYXN0IHVwKCkgaXMgZG9uZSBpbgotCSAgIGZ1c2VfcHV0YmFja19yZXF1ZXN0KCkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgRlVTRV9NQVhfT1VUU1RBTkRJTkc7IGkrKykKLQkJdXAoJmZjLT5vdXRzdGFuZGluZ19zZW0pOwotCiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKKwlmYy0+YmxvY2tlZCA9IDA7CisJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKIH0KIAotc3RhdGljIHZvaWQgZnVzZV9zZW5kX2luaXQoc3RydWN0IGZ1c2VfY29ubiAqZmMpCitzdGF0aWMgdm9pZCBmdXNlX3NlbmRfaW5pdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBmdXNlX3JlYWRfc3VwZXIoKSBzbyB0aGVyZSdzIGd1YXJhbnRlZWQKLQkgICB0byBiZSBleGFjdGx5IG9uZSByZXF1ZXN0IGF2YWlsYWJsZSAqLwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7CiAJc3RydWN0IGZ1c2VfaW5pdF9pbiAqYXJnID0gJnJlcS0+bWlzYy5pbml0X2luOwogCiAJYXJnLT5tYWpvciA9IEZVU0VfS0VSTkVMX1ZFUlNJT047CkBAIC01MjUsMTIgKzQ2OSw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY29ubl9pZCh2b2lkKQogeworCS8qIEJLTCBpcyBoZWxkIGZvciAtPmdldF9zYigpICovCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjdHIgPSAxOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwotCXZhbCA9IGN0cisrOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwotCXJldHVybiB2YWw7CisJcmV0dXJuIGN0cisrOwogfQogCiBzdGF0aWMgaW50IGZ1c2VfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQpAQCAtNTQwLDYgKzQ4MSw3IEBACiAJc3RydWN0IGZ1c2VfbW91bnRfZGF0YSBkOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5OworCXN0cnVjdCBmdXNlX3JlcSAqaW5pdF9yZXE7CiAJaW50IGVycjsKIAogCWlmICghcGFyc2VfZnVzZV9vcHQoKGNoYXIgKikgZGF0YSwgJmQpKQpAQCAtNTU1LDEwICs0OTcsMTIgQEAKIAlpZiAoIWZpbGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmMgPSBnZXRfY29ubihmaWxlLCBzYik7Ci0JZnB1dChmaWxlKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJcmV0dXJuIFBUUl9FUlIoZmMpOworCWlmIChmaWxlLT5mX29wICE9ICZmdXNlX2Rldl9vcGVyYXRpb25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZjID0gbmV3X2Nvbm4oKTsKKwlpZiAoIWZjKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWZjLT5mbGFncyA9IGQuZmxhZ3M7CiAJZmMtPnVzZXJfaWQgPSBkLnVzZXJfaWQ7CkBAIC01NzksMjcgKzUyMyw0OCBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwlpbml0X3JlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygpOworCWlmICghaW5pdF9yZXEpCisJCWdvdG8gZXJyX3B1dF9yb290OworCiAJZXJyID0ga29iamVjdF9zZXRfbmFtZSgmZmMtPmtvYmosICIlbGx1IiwgY29ubl9pZCgpKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9wdXRfcm9vdDsKKwkJZ290byBlcnJfZnJlZV9yZXE7CiAKIAllcnIgPSBrb2JqZWN0X2FkZCgmZmMtPmtvYmopOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3B1dF9yb290OworCQlnb3RvIGVycl9mcmVlX3JlcTsKKworCS8qIFNldHRpbmcgZmlsZS0+cHJpdmF0ZV9kYXRhIGNhbid0IHJhY2Ugd2l0aCBvdGhlciBtb3VudCgpCisJICAgaW5zdGFuY2VzLCBzaW5jZSBCS0wgaXMgaGVsZCBmb3IgLT5nZXRfc2IoKSAqLworCWVyciA9IC1FSU5WQUw7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJZ290byBlcnJfa29iamVjdF9kZWw7CiAKIAlzYi0+c19yb290ID0gcm9vdF9kZW50cnk7Ci0Jc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwogCWZjLT5tb3VudGVkID0gMTsKIAlmYy0+Y29ubmVjdGVkID0gMTsKLQlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKKwlrb2JqZWN0X2dldCgmZmMtPmtvYmopOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZjOworCS8qCisJICogYXRvbWljX2RlY19hbmRfdGVzdCgpIGluIGZwdXQoKSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5CisJICogbWVtb3J5IGJhcnJpZXIgZm9yIGZpbGUtPnByaXZhdGVfZGF0YSB0byBiZSB2aXNpYmxlIG9uIGFsbAorCSAqIENQVXMgYWZ0ZXIgdGhpcworCSAqLworCWZwdXQoZmlsZSk7CiAKLQlmdXNlX3NlbmRfaW5pdChmYyk7CisJZnVzZV9zZW5kX2luaXQoZmMsIGluaXRfcmVxKTsKIAogCXJldHVybiAwOwogCisgZXJyX2tvYmplY3RfZGVsOgorCWtvYmplY3RfZGVsKCZmYy0+a29iaik7CisgZXJyX2ZyZWVfcmVxOgorCWZ1c2VfcmVxdWVzdF9mcmVlKGluaXRfcmVxKTsKICBlcnJfcHV0X3Jvb3Q6CiAJZHB1dChyb290X2RlbnRyeSk7CiAgZXJyOgorCWZwdXQoZmlsZSk7CiAJa29iamVjdF9wdXQoJmZjLT5rb2JqKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzUzLDcgKzcxOCw2IEBACiAJcHJpbnRrKCJmdXNlIGluaXQgKEFQSSB2ZXJzaW9uICVpLiVpKVxuIiwKIAkgICAgICAgRlVTRV9LRVJORUxfVkVSU0lPTiwgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTik7CiAKLQlzcGluX2xvY2tfaW5pdCgmZnVzZV9sb2NrKTsKIAlyZXMgPSBmdXNlX2ZzX2luaXQoKTsKIAlpZiAocmVzKQogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwppbmRleCA4ZjA3ZThmLi43NDZhYmM5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2Jub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jCkBAIC00NjYsOCArNDY2LDcgQEAKIAlmb3IgKHAgPSAmbm9kZS0+dHJlZS0+bm9kZV9oYXNoW2hmc19ibm9kZV9oYXNoKG5vZGUtPnRoaXMpXTsKIAkgICAgICpwICYmICpwICE9IG5vZGU7IHAgPSAmKCpwKS0+bmV4dF9oYXNoKQogCQk7Ci0JaWYgKCEqcCkKLQkJQlVHKCk7CisJQlVHX09OKCEqcCk7CiAJKnAgPSBub2RlLT5uZXh0X2hhc2g7CiAJbm9kZS0+dHJlZS0+bm9kZV9oYXNoX2NudC0tOwogfQpAQCAtNjIyLDggKzYyMSw3IEBACiAKIAkJZHByaW50KERCR19CTk9ERV9SRUZTLCAicHV0X25vZGUoJWQ6JWQpOiAlZFxuIiwKIAkJICAgICAgIG5vZGUtPnRyZWUtPmNuaWQsIG5vZGUtPnRoaXMsIGF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKLQkJaWYgKCFhdG9taWNfcmVhZCgmbm9kZS0+cmVmY250KSkKLQkJCUJVRygpOworCQlCVUdfT04oIWF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKIAkJaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZub2RlLT5yZWZjbnQsICZ0cmVlLT5oYXNoX2xvY2spKQogCQkJcmV0dXJuOwogCQlmb3IgKGkgPSAwOyBpIDwgdHJlZS0+cGFnZXNfcGVyX2Jub2RlOyBpKyspIHsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuYwppbmRleCBhNjdlZGZhLi5lZmZhODk5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC0yNjksOCArMjY5LDcgQEAKIAl1OCAqZGF0YSwgYnl0ZSwgbTsKIAogCWRwcmludChEQkdfQk5PREVfTU9ELCAiYnRyZWVfZnJlZV9ub2RlOiAldVxuIiwgbm9kZS0+dGhpcyk7Ci0JaWYgKCFub2RlLT50aGlzKQotCQlCVUcoKTsKKwlCVUdfT04oIW5vZGUtPnRoaXMpOwogCXRyZWUgPSBub2RlLT50cmVlOwogCW5pZHggPSBub2RlLT50aGlzOwogCW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDMyYjdjMzMuLjNhMjQ0NmEgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTcyLDggKzE3Miw3IEBACiAKIHZvaWQgZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSAKIHsKLQlpZiAoaW5vZGVfaGFzX2J1ZmZlcnMoaW5vZGUpKQotCQlCVUcoKTsKKwlCVUdfT04oaW5vZGVfaGFzX2J1ZmZlcnMoaW5vZGUpKTsKIAlzZWN1cml0eV9pbm9kZV9mcmVlKGlub2RlKTsKIAlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUpCiAJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKQEAgLTI0OSwxMiArMjQ4LDkgQEAKIAltaWdodF9zbGVlcCgpOwogCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CiAgICAgICAgCi0JaWYgKGlub2RlLT5pX2RhdGEubnJwYWdlcykKLQkJQlVHKCk7Ci0JaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0ZSRUVJTkcpKQotCQlCVUcoKTsKLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0NMRUFSKQotCQlCVUcoKTsKKwlCVUdfT04oaW5vZGUtPmlfZGF0YS5ucnBhZ2VzKTsKKwlCVUdfT04oIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpOworCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpOwogCXdhaXRfb25faW5vZGUoaW5vZGUpOwogCURRVU9UX0RST1AoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9zYiAmJiBpbm9kZS0+aV9zYi0+c19vcC0+Y2xlYXJfaW5vZGUpCkBAIC0xMDU0LDggKzEwNTAsNyBAQAogCWhsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9oYXNoKTsKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJd2FrZV91cF9pbm9kZShpbm9kZSk7Ci0JaWYgKGlub2RlLT5pX3N0YXRlICE9IElfQ0xFQVIpCi0JCUJVRygpOworCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAhPSBJX0NMRUFSKTsKIAlkZXN0cm95X2lub2RlKGlub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeS5jIGIvZnMvaW5vdGlmeS5jCmluZGV4IDM2N2M0ODcuLjczMmVjNGIgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnkuYworKysgYi9mcy9pbm90aWZ5LmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCVdBUk5fT04oZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRCk7CiAJc3Bpbl9sb2NrKCZlbnRyeS0+ZF9sb2NrKTsKIAlwYXJlbnQgPSBlbnRyeS0+ZF9wYXJlbnQ7Ci0JaWYgKGlub3RpZnlfaW5vZGVfd2F0Y2hlZChwYXJlbnQtPmRfaW5vZGUpKQorCWlmIChwYXJlbnQtPmRfaW5vZGUgJiYgaW5vdGlmeV9pbm9kZV93YXRjaGVkKHBhcmVudC0+ZF9pbm9kZSkpCiAJCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOwogCXNwaW5fdW5sb2NrKCZlbnRyeS0+ZF9sb2NrKTsKIH0KQEAgLTg0OCw3ICs4NDgsMTEgQEAKIAkJaW5vZGUgPSB3YXRjaC0+aW5vZGU7CiAJCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgZGV2KTsKKworCQkvKiBtYWtlIHN1cmUgd2UgZGlkbid0IHJhY2Ugd2l0aCBhbm90aGVyIGxpc3QgcmVtb3ZhbCAqLworCQlpZiAobGlrZWx5KGlkcl9maW5kKCZkZXYtPmlkciwgd2F0Y2gtPndkKSkpCisJCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGRldik7CisKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKQEAgLTg5MCw4ICs4OTQsNyBAQAogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCiAJLyogbWFrZSBzdXJlIHRoYXQgd2UgZGlkIG5vdCByYWNlICovCi0Jd2F0Y2ggPSBpZHJfZmluZCgmZGV2LT5pZHIsIHdkKTsKLQlpZiAobGlrZWx5KHdhdGNoKSkKKwlpZiAobGlrZWx5KGlkcl9maW5kKCZkZXYtPmlkciwgd2QpID09IHdhdGNoKSkKIAkJcmVtb3ZlX3dhdGNoKHdhdGNoLCBkZXYpOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2JhY2tncm91bmQuYyBiL2ZzL2pmZnMyL2JhY2tncm91bmQuYwppbmRleCA3Yjc3YTk1Li5mZjJhODcyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMKKysrIGIvZnMvamZmczIvYmFja2dyb3VuZC5jCkBAIC0zNSw4ICszNSw3IEBACiAJcGlkX3QgcGlkOwogCWludCByZXQgPSAwOwogCi0JaWYgKGMtPmdjX3Rhc2spCi0JCUJVRygpOworCUJVR19PTihjLT5nY190YXNrKTsKIAogCWluaXRfY29tcGxldGlvbigmYy0+Z2NfdGhyZWFkX3N0YXJ0KTsKIAlpbml0X2NvbXBsZXRpb24oJmMtPmdjX3RocmVhZF9leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL25vZGVsaXN0LmMgYi9mcy9qZmZzMi9ub2RlbGlzdC5jCmluZGV4IGQ0ZDBjNDEuLjFkNDY2NzcgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL25vZGVsaXN0LmMKKysrIGIvZnMvamZmczIvbm9kZWxpc3QuYwpAQCAtNDM4LDcgKzQzOCw4IEBACiAJaWYgKGMtPm10ZC0+cG9pbnQpIHsKIAkJZXJyID0gYy0+bXRkLT5wb2ludChjLT5tdGQsIG9mcywgbGVuLCAmcmV0bGVuLCAmYnVmZmVyKTsKIAkJaWYgKCFlcnIgJiYgcmV0bGVuIDwgdG4tPmNzaXplKSB7Ci0JCQlKRkZTMl9XQVJOSU5HKCJNVEQgcG9pbnQgcmV0dXJuZWQgbGVuIHRvbyBzaG9ydDogJXUgaW5zdGVhZCBvZiAldS5cbiIsIHJldGxlbiwgdG4tPmNzaXplKTsKKwkJCUpGRlMyX1dBUk5JTkcoIk1URCBwb2ludCByZXR1cm5lZCBsZW4gdG9vIHNob3J0OiAlenUgIgorCQkJCQkiaW5zdGVhZCBvZiAldS5cbiIsIHJldGxlbiwgdG4tPmNzaXplKTsKIAkJCWMtPm10ZC0+dW5wb2ludChjLT5tdGQsIGJ1ZmZlciwgb2ZzLCBsZW4pOwogCQl9IGVsc2UgaWYgKGVycikKIAkJCUpGRlMyX1dBUk5JTkcoIk1URCBwb2ludCBmYWlsZWQ6IGVycm9yIGNvZGUgJWQuXG4iLCBlcnIpOwpAQCAtNDYxLDcgKzQ2Miw4IEBACiAJCX0KIAogCQlpZiAocmV0bGVuICE9IGxlbikgewotCQkJSkZGUzJfRVJST1IoInNob3J0IHJlYWQgYXQgJSMwOHg6ICVkIGluc3RlYWQgb2YgJWQuXG4iLCBvZnMsIHJldGxlbiwgbGVuKTsKKwkJCUpGRlMyX0VSUk9SKCJzaG9ydCByZWFkIGF0ICUjMDh4OiAlemQgaW5zdGVhZCBvZiAlZC5cbiIsCisJCQkJCW9mcywgcmV0bGVuLCBsZW4pOwogCQkJZXJyID0gLUVJTzsKIAkJCWdvdG8gZnJlZV9vdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwppbmRleCBmMjg2OTZmLi4yYjIyMGRkIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmMKKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCkBAIC01NDIsNyArNTQyLDcgQEAKIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBtZXRhcGFnZSAqbXA7Ci0JaW50IGJ1c3kgPSAwOworCWludCByZXQgPSAxOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAKIAlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFBBR0VfQ0FDSEVfU0laRTsgb2Zmc2V0ICs9IFBTSVpFKSB7CkBAIC01NTIsMzAgKzU1MiwyMCBAQAogCQkJY29udGludWU7CiAKIAkJamZzX2luZm8oIm1ldGFwYWdlX3JlbGVhc2VwYWdlOiBtcCA9IDB4JXAiLCBtcCk7Ci0JCWlmIChtcC0+Y291bnQgfHwgbXAtPm5vaG9tZW9rKSB7CisJCWlmIChtcC0+Y291bnQgfHwgbXAtPm5vaG9tZW9rIHx8CisJCSAgICB0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpKSB7CiAJCQlqZnNfaW5mbygiY291bnQgPSAlbGQsIG5vaG9tZW9rID0gJWQiLCBtcC0+Y291bnQsCiAJCQkJIG1wLT5ub2hvbWVvayk7Ci0JCQlidXN5ID0gMTsKKwkJCXJldCA9IDA7CiAJCQljb250aW51ZTsKIAkJfQotCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCQkvL1dBUk5fT04odGVzdF9iaXQoTUVUQV9kaXJ0eSwgJm1wLT5mbGFnKSk7Ci0JCWlmICh0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpKSB7Ci0JCQlkdW1wX21lbSgiZGlydHkgbXAgaW4gbWV0YXBhZ2VfcmVsZWFzZXBhZ2UiLCBtcCwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBtZXRhcGFnZSkpOwotCQkJZHVtcF9tZW0oInBhZ2UiLCBwYWdlLCBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKLQkJCWR1bXBfc3RhY2soKTsKLQkJfQogCQlpZiAobXAtPmxzbikKIAkJCXJlbW92ZV9mcm9tX2xvZ3N5bmMobXApOwogCQlyZW1vdmVfbWV0YXBhZ2UocGFnZSwgbXApOwogCQlJTkNSRU1FTlQobXBTdGF0LnBhZ2VmcmVlKTsKIAkJZnJlZV9tZXRhcGFnZShtcCk7CiAJfQotCWlmIChidXN5KQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBtZXRhcGFnZV9pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNsb2NrLmMgYi9mcy9sb2NrZC9zdmNsb2NrLmMKaW5kZXggZDJiNjZiYS4uM2VmNzM5MSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjbG9jay5jCisrKyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJc3ZjX3dha2VfdXAoYmxvY2stPmJfZGFlbW9uKTsKIH0KIAotdm9pZCBubG1zdmNfZ3JhbnRfcmVsZWFzZSh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgbmxtc3ZjX2dyYW50X3JlbGVhc2Uodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmxtX3Jxc3QJCSpjYWxsID0gZGF0YTsKIApkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggZGRhODNkNi4uYWI2MWE4YiAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC00NDYsMTUgKzQ0NiwxNCBAQAogICovCiBzdGF0aWMgaW50IGxlYXNlX2luaXQoc3RydWN0IGZpbGUgKmZpbHAsIGludCB0eXBlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKICB7CisJaWYgKGFzc2lnbl90eXBlKGZsLCB0eXBlKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWZsLT5mbF9vd25lciA9IGN1cnJlbnQtPmZpbGVzOwogCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCiAJZmwtPmZsX2ZpbGUgPSBmaWxwOwogCWZsLT5mbF9mbGFncyA9IEZMX0xFQVNFOwotCWlmIChhc3NpZ25fdHlwZShmbCwgdHlwZSkgIT0gMCkgewotCQlsb2Nrc19mcmVlX2xvY2soZmwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAJZmwtPmZsX3N0YXJ0ID0gMDsKIAlmbC0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKIAlmbC0+Zmxfb3BzID0gTlVMTDsKQEAgLTQ2NiwxNiArNDY1LDE5IEBACiBzdGF0aWMgaW50IGxlYXNlX2FsbG9jKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgdHlwZSwgc3RydWN0IGZpbGVfbG9jayAqKmZscCkKIHsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gLUVOT01FTTsKIAogCWlmIChmbCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAKIAllcnJvciA9IGxlYXNlX2luaXQoZmlscCwgdHlwZSwgZmwpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCWlmIChlcnJvcikgeworCQlsb2Nrc19mcmVlX2xvY2soZmwpOworCQlmbCA9IE5VTEw7CisJfQorb3V0OgogCSpmbHAgPSBmbDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qIENoZWNrIGlmIHR3byBsb2NrcyBvdmVybGFwIGVhY2ggb3RoZXIuCkBAIC03NTMsNiArNzU1LDcgQEAKIAlpZiAocmVxdWVzdC0+ZmxfdHlwZSA9PSBGX1VOTENLKQogCQlnb3RvIG91dDsKIAorCWVycm9yID0gLUVOT01FTTsKIAluZXdfZmwgPSBsb2Nrc19hbGxvY19sb2NrKCk7CiAJaWYgKG5ld19mbCA9PSBOVUxMKQogCQlnb3RvIG91dDsKQEAgLTc3OSw2ICs3ODIsNyBAQAogCWxvY2tzX2NvcHlfbG9jayhuZXdfZmwsIHJlcXVlc3QpOwogCWxvY2tzX2luc2VydF9sb2NrKCZpbm9kZS0+aV9mbG9jaywgbmV3X2ZsKTsKIAluZXdfZmwgPSBOVUxMOworCWVycm9yID0gMDsKIAogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKQEAgLTEzNzIsNiArMTM3Niw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKG15X2JlZm9yZSAhPSBOVUxMKSB7CisJCSpmbHAgPSAqbXlfYmVmb3JlOwogCQllcnJvciA9IGxlYXNlLT5mbF9sbW9wcy0+ZmxfY2hhbmdlKG15X2JlZm9yZSwgYXJnKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjIzMCw3ICsyMjM1LDEyIEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCWogPSAwOwotCXJjdV9yZWFkX2xvY2soKTsKKworCS8qCisJICogV2UgYXJlIG5vdCB0YWtpbmcgYSByZWYgdG8gdGhlIGZpbGUgc3RydWN0dXJlcywgc28KKwkgKiB3ZSBuZWVkIHRvIGFjcXVpcmUgLT5maWxlX2xvY2suCisJICovCisJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwpAQCAtMjI0OCw3ICsyMjU4LDcgQEAKIAkJCXNldCA+Pj0gMTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQogRVhQT1JUX1NZTUJPTChzdGVhbF9sb2Nrcyk7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA5NjcyM2FlLi5kNmUyZWUyIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTEwODAsOCArMTA4MCw4IEBACiAJbmQtPmZsYWdzID0gZmxhZ3M7CiAJbmQtPmRlcHRoID0gMDsKIAotCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCWlmICgqbmFtZT09Jy8nKSB7CisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCQlpZiAoY3VycmVudC0+ZnMtPmFsdHJvb3QgJiYgIShuZC0+ZmxhZ3MgJiBMT09LVVBfTk9BTFQpKSB7CiAJCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5hbHRyb290bW50KTsKIAkJCW5kLT5kZW50cnkgPSBkZ2V0KGN1cnJlbnQtPmZzLT5hbHRyb290KTsKQEAgLTEwOTIsMzMgKzEwOTIsMzUgQEAKIAkJfQogCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5yb290bW50KTsKIAkJbmQtPmRlbnRyeSA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QpOworCQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCX0gZWxzZSBpZiAoZGZkID09IEFUX0ZEQ1dEKSB7CisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5wd2RtbnQpOwogCQluZC0+ZGVudHJ5ID0gZGdldChjdXJyZW50LT5mcy0+cHdkKTsKKwkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAkJZmlsZSA9IGZnZXRfbGlnaHQoZGZkLCAmZnB1dF9uZWVkZWQpOwogCQlyZXR2YWwgPSAtRUJBREY7CiAJCWlmICghZmlsZSkKLQkJCWdvdG8gdW5sb2NrX2ZhaWw7CisJCQlnb3RvIG91dF9mYWlsOwogCiAJCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwogCiAJCXJldHZhbCA9IC1FTk9URElSOwogCQlpZiAoIVNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQotCQkJZ290byBmcHV0X3VubG9ja19mYWlsOworCQkJZ290byBmcHV0X2ZhaWw7CiAKIAkJcmV0dmFsID0gZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9FWEVDKTsKIAkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZnB1dF91bmxvY2tfZmFpbDsKKwkJCWdvdG8gZnB1dF9mYWlsOwogCiAJCW5kLT5tbnQgPSBtbnRnZXQoZmlsZS0+Zl92ZnNtbnQpOwogCQluZC0+ZGVudHJ5ID0gZGdldChkZW50cnkpOwogCiAJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOwogCX0KLQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQgPSAwOwogCXJldHZhbCA9IGxpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKIG91dDoKQEAgLTExMjcsMTMgKzExMjksMTIgQEAKIAkJCQluZC0+ZGVudHJ5LT5kX2lub2RlKSkKIAkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPmRlbnRyeS0+ZF9pbm9kZSwgZmxhZ3MpOwogCX0KK291dF9mYWlsOgogCXJldHVybiByZXR2YWw7CiAKLWZwdXRfdW5sb2NrX2ZhaWw6CitmcHV0X2ZhaWw6CiAJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7Ci11bmxvY2tfZmFpbDoKLQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCXJldHVybiByZXR2YWw7CisJZ290byBvdXRfZmFpbDsKIH0KIAogaW50IGZhc3RjYWxsIHBhdGhfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCBhMjNmMzQ4Li5jYWU3NGRkIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xMjgsMTUgKzEyOCwxNCBAQAogc3RhdGljIGludAogbmZzX29wZW5kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IHJlcyA9IDA7CisJaW50IHJlczsKIAogCWRmcHJpbnRrKFZGUywgIk5GUzogb3BlbmRpciglcy8lbGQpXG4iLAogCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAKIAlsb2NrX2tlcm5lbCgpOwogCS8qIENhbGwgZ2VuZXJpYyBvcGVuIGNvZGUgaW4gb3JkZXIgdG8gY2FjaGUgY3JlZGVudGlhbHMgKi8KLQlpZiAoIXJlcykKLQkJcmVzID0gbmZzX29wZW4oaW5vZGUsIGZpbHApOworCXJlcyA9IG5mc19vcGVuKGlub2RlLCBmaWxwKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCAwZjU4M2NiLi4zYzcyYjBjIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC0xMTIsMTAgKzExMiw5IEBACiAgKi8KIHNzaXplX3QgbmZzX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBpb2NiLT5raV9maWxwLT5mX2RlbnRyeTsKLQogCWRwcmludGsoIk5GUzogbmZzX2RpcmVjdF9JTyAoJXMpIG9mZi9ubyglTGQvJWx1KSBFSU5WQUxcbiIsCi0JCQlkZW50cnktPmRfbmFtZS5uYW1lLCAobG9uZyBsb25nKSBwb3MsIG5yX3NlZ3MpOworCQkJaW9jYi0+a2lfZmlscC0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJKGxvbmcgbG9uZykgcG9zLCBucl9zZWdzKTsKIAogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtNDY4LDcgKzQ2Nyw2IEBACiBzdGF0aWMgdm9pZCBuZnNfZGlyZWN0X2NvbW1pdF9zY2hlZHVsZShzdHJ1Y3QgbmZzX2RpcmVjdF9yZXEgKmRyZXEpCiB7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICpkYXRhID0gZHJlcS0+Y29tbWl0X2RhdGE7Ci0Jc3RydWN0IHJwY190YXNrICp0YXNrID0gJmRhdGEtPnRhc2s7CiAKIAlkYXRhLT5pbm9kZSA9IGRyZXEtPmlub2RlOwogCWRhdGEtPmNyZWQgPSBkcmVxLT5jdHgtPmNyZWQ7CkBAIC00ODksNyArNDg3LDcgQEAKIAkvKiBOb3RlOiB0YXNrLnRrX29wcy0+cnBjX3JlbGVhc2Ugd2lsbCBmcmVlIGRyZXEtPmNvbW1pdF9kYXRhICovCiAJZHJlcS0+Y29tbWl0X2RhdGEgPSBOVUxMOwogCi0JZHByaW50aygiTkZTOiAlNXUgaW5pdGlhdGVkIGNvbW1pdCBjYWxsXG4iLCB0YXNrLT50a19waWQpOworCWRwcmludGsoIk5GUzogJTV1IGluaXRpYXRlZCBjb21taXQgY2FsbFxuIiwgZGF0YS0+dGFzay50a19waWQpOwogCiAJbG9ja19rZXJuZWwoKTsKIAlycGNfZXhlY3V0ZSgmZGF0YS0+dGFzayk7CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCBmMWRmMmM4Li5mYWRlMDJjIDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTUzNCwxMCArNTM0LDkgQEAKICAqLwogc3RhdGljIGludCBuZnNfZmxvY2soc3RydWN0IGZpbGUgKmZpbHAsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQogewotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwotCiAJZHByaW50aygiTkZTOiBuZnNfZmxvY2soZj0lcy8lbGQsIHQ9JXgsIGZsPSV4KVxuIiwKLQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sCisJCQlmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19pZCwKKwkJCWZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubywKIAkJCWZsLT5mbF90eXBlLCBmbC0+ZmxfZmxhZ3MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggMmY3NjU2Yi4uZDBiOTkxYSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTcwMCwxMiArNzAwLDkgQEAKIAkvKgogCSAqIERpc3BsYXkgc3VwZXJibG9jayBJL08gY291bnRlcnMKIAkgKi8KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgbmZzX2lvc3RhdHMgKnN0YXRzOwogCi0JCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkpCi0JCQljb250aW51ZTsKLQogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihuZnNzLT5pb19zdGF0cywgY3B1KTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA0N2VjZTFkLi5kODZjMGRiIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBuZnM0X2ludGVudF9zZXRfZmlsZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW50IG5mczRfaW50ZW50X3NldF9maWxlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIApAQCAtMTIyNyw4ICsxMjI3LDEwIEBACiAJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHg7CiAJCWN0eCA9IChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKIAkJY3R4LT5zdGF0ZSA9IHN0YXRlOwotCX0gZWxzZQotCQluZnM0X2Nsb3NlX3N0YXRlKHN0YXRlLCBuZC0+aW50ZW50Lm9wZW4uZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJbmZzNF9jbG9zZV9zdGF0ZShzdGF0ZSwgbmQtPmludGVudC5vcGVuLmZsYWdzKTsKKwlyZXR1cm4gUFRSX0VSUihmaWxwKTsKIH0KIAogc3RydWN0IGRlbnRyeSAqCkBAIC0xODM1LDcgKzE4MzcsNyBAQAogCQkJbmZzX3NldGF0dHJfdXBkYXRlX2lub2RlKHN0YXRlLT5pbm9kZSwgc2F0dHIpOwogCX0KIAlpZiAoc3RhdHVzID09IDAgJiYgbmQgIT0gTlVMTCAmJiAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pKQotCQluZnM0X2ludGVudF9zZXRfZmlsZShuZCwgZGVudHJ5LCBzdGF0ZSk7CisJCXN0YXR1cyA9IG5mczRfaW50ZW50X3NldF9maWxlKG5kLCBkZW50cnksIHN0YXRlKTsKIAllbHNlCiAJCW5mczRfY2xvc2Vfc3RhdGUoc3RhdGUsIGZsYWdzKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvYXV0aC5jIGIvZnMvbmZzZC9hdXRoLmMKaW5kZXggY2ZlOWNlOC4uNmU5MmIwZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9hdXRoLmMKKysrIGIvZnMvbmZzZC9hdXRoLmMKQEAgLTE0LDQ2ICsxNCw0NiBAQAogCiBpbnQgbmZzZF9zZXR1c2VyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZXhwb3J0ICpleHApCiB7Ci0Jc3RydWN0IHN2Y19jcmVkCSpjcmVkID0gJnJxc3RwLT5ycV9jcmVkOworCXN0cnVjdCBzdmNfY3JlZAljcmVkID0gcnFzdHAtPnJxX2NyZWQ7CiAJaW50IGk7CiAJaW50IHJldDsKIAogCWlmIChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX0FMTFNRVUFTSCkgewotCQljcmVkLT5jcl91aWQgPSBleHAtPmV4X2Fub25fdWlkOwotCQljcmVkLT5jcl9naWQgPSBleHAtPmV4X2Fub25fZ2lkOwotCQlwdXRfZ3JvdXBfaW5mbyhjcmVkLT5jcl9ncm91cF9pbmZvKTsKLQkJY3JlZC0+Y3JfZ3JvdXBfaW5mbyA9IGdyb3Vwc19hbGxvYygwKTsKKwkJY3JlZC5jcl91aWQgPSBleHAtPmV4X2Fub25fdWlkOworCQljcmVkLmNyX2dpZCA9IGV4cC0+ZXhfYW5vbl9naWQ7CisJCWNyZWQuY3JfZ3JvdXBfaW5mbyA9IGdyb3Vwc19hbGxvYygwKTsKIAl9IGVsc2UgaWYgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfUk9PVFNRVUFTSCkgewogCQlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ2k7Ci0JCWlmICghY3JlZC0+Y3JfdWlkKQotCQkJY3JlZC0+Y3JfdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKLQkJaWYgKCFjcmVkLT5jcl9naWQpCi0JCQljcmVkLT5jcl9naWQgPSBleHAtPmV4X2Fub25fZ2lkOwotCQlnaSA9IGdyb3Vwc19hbGxvYyhjcmVkLT5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzKTsKKwkJaWYgKCFjcmVkLmNyX3VpZCkKKwkJCWNyZWQuY3JfdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKKwkJaWYgKCFjcmVkLmNyX2dpZCkKKwkJCWNyZWQuY3JfZ2lkID0gZXhwLT5leF9hbm9uX2dpZDsKKwkJZ2kgPSBncm91cHNfYWxsb2MoY3JlZC5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzKTsKIAkJaWYgKGdpKQotCQkJZm9yIChpID0gMDsgaSA8IGNyZWQtPmNyX2dyb3VwX2luZm8tPm5ncm91cHM7IGkrKykgewotCQkJCWlmICghR1JPVVBfQVQoY3JlZC0+Y3JfZ3JvdXBfaW5mbywgaSkpCisJCQlmb3IgKGkgPSAwOyBpIDwgY3JlZC5jcl9ncm91cF9pbmZvLT5uZ3JvdXBzOyBpKyspIHsKKwkJCQlpZiAoIUdST1VQX0FUKGNyZWQuY3JfZ3JvdXBfaW5mbywgaSkpCiAJCQkJCUdST1VQX0FUKGdpLCBpKSA9IGV4cC0+ZXhfYW5vbl9naWQ7CiAJCQkJZWxzZQotCQkJCQlHUk9VUF9BVChnaSwgaSkgPSBHUk9VUF9BVChjcmVkLT5jcl9ncm91cF9pbmZvLCBpKTsKKwkJCQkJR1JPVVBfQVQoZ2ksIGkpID0gR1JPVVBfQVQoY3JlZC5jcl9ncm91cF9pbmZvLCBpKTsKIAkJCX0KLQkJcHV0X2dyb3VwX2luZm8oY3JlZC0+Y3JfZ3JvdXBfaW5mbyk7Ci0JCWNyZWQtPmNyX2dyb3VwX2luZm8gPSBnaTsKLQl9CisJCWNyZWQuY3JfZ3JvdXBfaW5mbyA9IGdpOworCX0gZWxzZQorCQlnZXRfZ3JvdXBfaW5mbyhjcmVkLmNyX2dyb3VwX2luZm8pOwogCi0JaWYgKGNyZWQtPmNyX3VpZCAhPSAodWlkX3QpIC0xKQotCQljdXJyZW50LT5mc3VpZCA9IGNyZWQtPmNyX3VpZDsKKwlpZiAoY3JlZC5jcl91aWQgIT0gKHVpZF90KSAtMSkKKwkJY3VycmVudC0+ZnN1aWQgPSBjcmVkLmNyX3VpZDsKIAllbHNlCiAJCWN1cnJlbnQtPmZzdWlkID0gZXhwLT5leF9hbm9uX3VpZDsKLQlpZiAoY3JlZC0+Y3JfZ2lkICE9IChnaWRfdCkgLTEpCi0JCWN1cnJlbnQtPmZzZ2lkID0gY3JlZC0+Y3JfZ2lkOworCWlmIChjcmVkLmNyX2dpZCAhPSAoZ2lkX3QpIC0xKQorCQljdXJyZW50LT5mc2dpZCA9IGNyZWQuY3JfZ2lkOwogCWVsc2UKIAkJY3VycmVudC0+ZnNnaWQgPSBleHAtPmV4X2Fub25fZ2lkOwogCi0JaWYgKCFjcmVkLT5jcl9ncm91cF9pbmZvKQorCWlmICghY3JlZC5jcl9ncm91cF9pbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBzZXRfY3VycmVudF9ncm91cHMoY3JlZC0+Y3JfZ3JvdXBfaW5mbyk7Ci0JaWYgKChjcmVkLT5jcl91aWQpKSB7CisJcmV0ID0gc2V0X2N1cnJlbnRfZ3JvdXBzKGNyZWQuY3JfZ3JvdXBfaW5mbyk7CisJcHV0X2dyb3VwX2luZm8oY3JlZC5jcl9ncm91cF9pbmZvKTsKKwlpZiAoKGNyZWQuY3JfdWlkKSkgewogCQljYXBfdChjdXJyZW50LT5jYXBfZWZmZWN0aXZlKSAmPSB+Q0FQX05GU0RfTUFTSzsKIAl9IGVsc2UgewogCQljYXBfdChjdXJyZW50LT5jYXBfZWZmZWN0aXZlKSB8PSAoQ0FQX05GU0RfTUFTSyAmCmRpZmYgLS1naXQgYS9mcy9uZnNkL2V4cG9ydC5jIGIvZnMvbmZzZC9leHBvcnQuYwppbmRleCBjMzQwYmUwLi4zZWVjMzAwIDEwMDY0NAotLS0gYS9mcy9uZnNkL2V4cG9ydC5jCisrKyBiL2ZzL25mc2QvZXhwb3J0LmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCWlmICgobGVuPXF3b3JkX2dldCgmbWVzZywgYnVmLCBQQUdFX1NJWkUpKSA8PSAwKQogCQlnb3RvIG91dDsKIAllcnIgPSBwYXRoX2xvb2t1cChidWYsIDAsICZuZCk7Ci0JaWYgKGVycikgZ290byBvdXQ7CisJaWYgKGVycikgZ290byBvdXRfbm9fcGF0aDsKIAogCWV4cC5oLmZsYWdzID0gMDsKIAlleHAuZXhfY2xpZW50ID0gZG9tOwpAQCAtNDc1LDYgKzQ3NSw3IEBACiAgb3V0OgogCWlmIChuZC5kZW50cnkpCiAJCXBhdGhfcmVsZWFzZSgmbmQpOworIG91dF9ub19wYXRoOgogCWlmIChkb20pCiAJCWF1dGhfZG9tYWluX3B1dChkb20pOwogCWtmcmVlKGJ1Zik7CkBAIC0xMDY1LDkgKzEwNjYsMTEgQEAKIAkJcnYgPSBuZnNlcnJfcGVybTsKIAllbHNlIGlmIChJU19FUlIoZXhwKSkKIAkJcnYgPSBuZnNlcnJubyhQVFJfRVJSKGV4cCkpOwotCWVsc2UKKwllbHNlIHsKIAkJcnYgPSBmaF9jb21wb3NlKGZocCwgZXhwLAogCQkJCWZzaWRfa2V5LT5la19kZW50cnksIE5VTEwpOworCQlleHBfcHV0KGV4cCk7CisJfQogCWNhY2hlX3B1dCgmZnNpZF9rZXktPmgsICZzdmNfZXhwa2V5X2NhY2hlKTsKIAlyZXR1cm4gcnY7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczNwcm9jLmMgYi9mcy9uZnNkL25mczNwcm9jLmMKaW5kZXggNmQyZGZlZC4uZjYxMTQyYSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzM3Byb2MuYwpAQCAtNjgyLDcgKzY4Miw3IEBACiAgIFBST0MobG9va3VwLAkgZGlyb3AsCQlkaXJvcCwJCWZoYW5kbGUyLCBSQ19OT0NBQ0hFLCBTVCtGSCtwQVQrcEFUKSwKICAgUFJPQyhhY2Nlc3MsCSBhY2Nlc3MsCWFjY2VzcywJCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtwQVQrMSksCiAgIFBST0MocmVhZGxpbmssIHJlYWRsaW5rLAlyZWFkbGluaywJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK3BBVCsxK05GUzNfTUFYUEFUSExFTi80KSwKLSAgUFJPQyhyZWFkLAkgcmVhZCwJCXJlYWQsCQlmaGFuZGxlLCAgUkNfTk9DQUNIRSwgU1QrcEFUKzQrTkZTU1ZDX01BWEJMS1NJWkUpLAorICBQUk9DKHJlYWQsCSByZWFkLAkJcmVhZCwJCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtwQVQrNCtORlNTVkNfTUFYQkxLU0laRS80KSwKICAgUFJPQyh3cml0ZSwJIHdyaXRlLAkJd3JpdGUsCQlmaGFuZGxlLCAgUkNfUkVQTEJVRkYsIFNUK1dDKzQpLAogICBQUk9DKGNyZWF0ZSwJIGNyZWF0ZSwJY3JlYXRlLAkJZmhhbmRsZTIsIFJDX1JFUExCVUZGLCBTVCsoMStGSCtwQVQpK1dDKSwKICAgUFJPQyhta2RpciwJIG1rZGlyLAkJY3JlYXRlLAkJZmhhbmRsZTIsIFJDX1JFUExCVUZGLCBTVCsoMStGSCtwQVQpK1dDKSwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGFjbC5jIGIvZnMvbmZzZC9uZnM0YWNsLmMKaW5kZXggNzM5MWY0YS4uZWRiMTA3ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0YWNsLmMKKysrIGIvZnMvbmZzZC9uZnM0YWNsLmMKQEAgLTcxMCw5ICs3MTAsOSBAQAogCQkvKiBBbHNvLCB0aGUgcmVtYWluaW5nIGVudHJpZXMgYXJlIGZvciBuYW1lZCB1c2VycyBhbmQKIAkJICogZ3JvdXBzLCBhbmQgY29tZSBpbiB0aHJlZXMgKG1hc2ssIGFsbG93LCBkZW55KTogKi8KIAkJaWYgKG40YWNsLT5uYWNlcyA8IDcpCi0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKChuNGFjbC0+bmFjZXMgLSA3KSAlIDMpCi0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIDQgKyAobjRhY2wtPm5hY2VzIC0gNykvMzsKIAl9CiB9CkBAIC03OTAsNyArNzkwLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShkYWNsLCBhY2UtPnR5cGUsIGFjZS0+ZmxhZywKLQkJCQlhY2UtPmFjY2Vzc19tYXNrLCBhY2UtPndob3R5cGUsIGFjZS0+d2hvKSA9PSAtMTsKKwkJCQlhY2UtPmFjY2Vzc19tYXNrLCBhY2UtPndob3R5cGUsIGFjZS0+d2hvKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gb3V0OwogCkBAIC04NjYsNyArODY2LDcgQEAKIAlzdHJ1Y3QgbmZzNF9hY2UgKmFjZTsKIAogCWlmICgoYWNlID0ga21hbGxvYyhzaXplb2YoKmFjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJYWNlLT50eXBlID0gdHlwZTsKIAlhY2UtPmZsYWcgPSBmbGFnOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKaW5kZXggYzg3MmJkMC4uZGJhZjNmOSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYworKysgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCkBAIC00NDEsOCArNDQxLDkgQEAKIAkJZ290byBvdXRfY2xudDsKIAl9CiAKLQkvKiB0aGUgdGFzayBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgbmZzNF9jbGllbnQgc3RydWN0ICovCiAJY2ItPmNiX2NsaWVudCA9IGNsbnQ7CisKKwkvKiB0aGUgdGFzayBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgbmZzNF9jbGllbnQgc3RydWN0ICovCiAJYXRvbWljX2luYygmY2xwLT5jbF9jb3VudCk7CiAKIAltc2cucnBjX2NyZWQgPSBuZnNkNF9sb29rdXBjcmVkKGNscCwwKTsKQEAgLTQ2MCwxMyArNDYxLDEyIEBACiBvdXRfcnBjaW9kOgogCWF0b21pY19kZWMoJmNscC0+Y2xfY291bnQpOwogCXJwY2lvZF9kb3duKCk7CisJY2ItPmNiX2NsaWVudCA9IE5VTEw7CiBvdXRfY2xudDoKIAlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOwotCWdvdG8gb3V0X2VycjsKIG91dF9lcnI6CiAJZHByaW50aygiTkZTRDogd2FybmluZzogbm8gY2FsbGJhY2sgcGF0aCB0byBjbGllbnQgJS4qc1xuIiwKIAkJKGludCljbHAtPmNsX25hbWUubGVuLCBjbHAtPmNsX25hbWUuZGF0YSk7Ci0JY2ItPmNiX2NsaWVudCA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRwcm9jLmMgYi9mcy9uZnNkL25mczRwcm9jLmMKaW5kZXggNmQ2M2YxZC4uYjBlMDk1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzNHByb2MuYwpAQCAtMjg4LDggKzI4OCw2IEBACiAJZmhfcHV0KGN1cnJlbnRfZmgpOwogCXN0YXR1cyA9IGV4cF9wc2V1ZG9yb290KHJxc3RwLT5ycV9jbGllbnQsIGN1cnJlbnRfZmgsCiAJCQkgICAgICAmcnFzdHAtPnJxX2NoYW5kbGUpOwotCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBuZnNlcnJubyhuZnNkX3NldHVzZXIocnFzdHAsIGN1cnJlbnRfZmgtPmZoX2V4cG9ydCkpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk3NSw3ICs5NzMsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHN2Y19wcm9jZWR1cmUJCW5mc2RfcHJvY2VkdXJlczRbMl0gPSB7CiAgIFBST0MobnVsbCwJIHZvaWQsCQl2b2lkLAkJdm9pZCwJICBSQ19OT0NBQ0hFLCAxKSwKLSAgUFJPQyhjb21wb3VuZCwgY29tcG91bmQsCWNvbXBvdW5kLAljb21wb3VuZCwgUkNfTk9DQUNIRSwgTkZTRF9CVUZTSVpFKQorICBQUk9DKGNvbXBvdW5kLCBjb21wb3VuZCwJY29tcG91bmQsCWNvbXBvdW5kLCBSQ19OT0NBQ0hFLCBORlNEX0JVRlNJWkUvNCkKIH07CiAKIHN0cnVjdCBzdmNfdmVyc2lvbgluZnNkX3ZlcnNpb240ID0gewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggNDdlYzExMi4uOTZjNzU3OCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0xNDcsNiArMTQ3LDQyIEBACiAJa3JlZl9nZXQoJmZpLT5maV9yZWYpOwogfQogCitzdGF0aWMgaW50IG51bV9kZWxlZ2F0aW9uczsKKworLyoKKyAqIE9wZW4gb3duZXIgc3RhdGUgKHNoYXJlIGxvY2tzKQorICovCisKKy8qIGhhc2ggdGFibGVzIGZvciBuZnM0X3N0YXRlb3duZXIgKi8KKyNkZWZpbmUgT1dORVJfSEFTSF9CSVRTICAgICAgICAgICAgICA4CisjZGVmaW5lIE9XTkVSX0hBU0hfU0laRSAgICAgICAgICAgICAoMSA8PCBPV05FUl9IQVNIX0JJVFMpCisjZGVmaW5lIE9XTkVSX0hBU0hfTUFTSyAgICAgICAgICAgICAoT1dORVJfSEFTSF9TSVpFIC0gMSkKKworI2RlZmluZSBvd25lcmlkX2hhc2h2YWwoaWQpIFwKKyAgICAgICAgKChpZCkgJiBPV05FUl9IQVNIX01BU0spCisjZGVmaW5lIG93bmVyc3RyX2hhc2h2YWwoY2xpZW50aWQsIG93bmVybmFtZSkgXAorICAgICAgICAoKChjbGllbnRpZCkgKyBvcGFxdWVfaGFzaHZhbCgob3duZXJuYW1lLmRhdGEpLCAob3duZXJuYW1lLmxlbikpKSAmIE9XTkVSX0hBU0hfTUFTSykKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQJb3duZXJpZF9oYXNodGJsW09XTkVSX0hBU0hfU0laRV07CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZAlvd25lcnN0cl9oYXNodGJsW09XTkVSX0hBU0hfU0laRV07CisKKy8qIGhhc2ggdGFibGUgZm9yIG5mczRfZmlsZSAqLworI2RlZmluZSBGSUxFX0hBU0hfQklUUyAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZJTEVfSEFTSF9TSVpFICAgICAgICAgICAgICAgICAgKDEgPDwgRklMRV9IQVNIX0JJVFMpCisjZGVmaW5lIEZJTEVfSEFTSF9NQVNLICAgICAgICAgICAgICAgICAgKEZJTEVfSEFTSF9TSVpFIC0gMSkKKy8qIGhhc2ggdGFibGUgZm9yIChvcGVuKW5mczRfc3RhdGVpZCAqLworI2RlZmluZSBTVEFURUlEX0hBU0hfQklUUyAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1RBVEVJRF9IQVNIX1NJWkUgICAgICAgICAgICAgICgxIDw8IFNUQVRFSURfSEFTSF9CSVRTKQorI2RlZmluZSBTVEFURUlEX0hBU0hfTUFTSyAgICAgICAgICAgICAgKFNUQVRFSURfSEFTSF9TSVpFIC0gMSkKKworI2RlZmluZSBmaWxlX2hhc2h2YWwoeCkgXAorICAgICAgICBoYXNoX3B0cih4LCBGSUxFX0hBU0hfQklUUykKKyNkZWZpbmUgc3RhdGVpZF9oYXNodmFsKG93bmVyX2lkLCBmaWxlX2lkKSAgXAorICAgICAgICAoKChvd25lcl9pZCkgKyAoZmlsZV9pZCkpICYgU1RBVEVJRF9IQVNIX01BU0spCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfaGFzaHRibFtGSUxFX0hBU0hfU0laRV07CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzdGF0ZWlkX2hhc2h0YmxbU1RBVEVJRF9IQVNIX1NJWkVdOworCiBzdGF0aWMgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqCiBhbGxvY19pbml0X2RlbGVnKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHUzMiB0eXBlKQogewpAQCAtMTU1LDkgKzE5MSwxMiBAQAogCXN0cnVjdCBuZnM0X2NhbGxiYWNrICpjYiA9ICZzdHAtPnN0X3N0YXRlb3duZXItPnNvX2NsaWVudC0+Y2xfY2FsbGJhY2s7CiAKIAlkcHJpbnRrKCJORlNEIGFsbG9jX2luaXRfZGVsZWdcbiIpOworCWlmIChudW1fZGVsZWdhdGlvbnMgPiBTVEFURUlEX0hBU0hfU0laRSAqIDQpCisJCXJldHVybiBOVUxMOwogCWRwID0ga21lbV9jYWNoZV9hbGxvYyhkZWxlZ19zbGFiLCBHRlBfS0VSTkVMKTsKIAlpZiAoZHAgPT0gTlVMTCkKIAkJcmV0dXJuIGRwOworCW51bV9kZWxlZ2F0aW9ucysrOwogCUlOSVRfTElTVF9IRUFEKCZkcC0+ZGxfcGVyZmlsZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRwLT5kbF9wZXJjbG50KTsKIAlJTklUX0xJU1RfSEVBRCgmZHAtPmRsX3JlY2FsbF9scnUpOwpAQCAtMTkyLDYgKzIzMSw3IEBACiAJCWRwcmludGsoIk5GU0Q6IGZyZWVpbmcgZHAgJXBcbiIsZHApOwogCQlwdXRfbmZzNF9maWxlKGRwLT5kbF9maWxlKTsKIAkJa21lbV9jYWNoZV9mcmVlKGRlbGVnX3NsYWIsIGRwKTsKKwkJbnVtX2RlbGVnYXRpb25zLS07CiAJfQogfQogCkBAIC0zMzAsMjIgKzM3MCwyOSBAQAogfQogCiBzdGF0aWMgdm9pZAorc2h1dGRvd25fY2FsbGJhY2tfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKQoreworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50OworCisJLyogc2h1dGRvd24gcnBjIGNsaWVudCwgZW5kaW5nIGFueSBvdXRzdGFuZGluZyByZWNhbGwgcnBjcyAqLworCWlmIChjbG50KSB7CisJCWNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50ID0gTlVMTDsKKwkJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKKwkJcnBjaW9kX2Rvd24oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCiBleHBpcmVfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKQogewogCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcDsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcDsKLQlzdHJ1Y3QgbmZzNF9jYWxsYmFjayAqY2IgPSAmY2xwLT5jbF9jYWxsYmFjazsKLQlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBjbHAtPmNsX2NhbGxiYWNrLmNiX2NsaWVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlYXBsaXN0OwogCiAJZHByaW50aygiTkZTRDogZXhwaXJlX2NsaWVudCBjbF9jb3VudCAlZFxuIiwKIAkgICAgICAgICAgICAgICAgICAgIGF0b21pY19yZWFkKCZjbHAtPmNsX2NvdW50KSk7CiAKLQkvKiBzaHV0ZG93biBycGMgY2xpZW50LCBlbmRpbmcgYW55IG91dHN0YW5kaW5nIHJlY2FsbCBycGNzICovCi0JaWYgKGF0b21pY19yZWFkKCZjYi0+Y2Jfc2V0KSA9PSAxICYmIGNsbnQpIHsKLQkJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKLQkJY2xudCA9IGNscC0+Y2xfY2FsbGJhY2suY2JfY2xpZW50ID0gTlVMTDsKLQl9CisJc2h1dGRvd25fY2FsbGJhY2tfY2xpZW50KGNscCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmcmVhcGxpc3QpOwogCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwpAQCAtOTM2LDQwICs5ODMsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIAotICogT3BlbiBvd25lciBzdGF0ZSAoc2hhcmUgbG9ja3MpCi0gKi8KLQotLyogaGFzaCB0YWJsZXMgZm9yIG5mczRfc3RhdGVvd25lciAqLwotI2RlZmluZSBPV05FUl9IQVNIX0JJVFMgICAgICAgICAgICAgIDgKLSNkZWZpbmUgT1dORVJfSEFTSF9TSVpFICAgICAgICAgICAgICgxIDw8IE9XTkVSX0hBU0hfQklUUykKLSNkZWZpbmUgT1dORVJfSEFTSF9NQVNLICAgICAgICAgICAgIChPV05FUl9IQVNIX1NJWkUgLSAxKQotCi0jZGVmaW5lIG93bmVyaWRfaGFzaHZhbChpZCkgXAotICAgICAgICAoKGlkKSAmIE9XTkVSX0hBU0hfTUFTSykKLSNkZWZpbmUgb3duZXJzdHJfaGFzaHZhbChjbGllbnRpZCwgb3duZXJuYW1lKSBcCi0gICAgICAgICgoKGNsaWVudGlkKSArIG9wYXF1ZV9oYXNodmFsKChvd25lcm5hbWUuZGF0YSksIChvd25lcm5hbWUubGVuKSkpICYgT1dORVJfSEFTSF9NQVNLKQotCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZAlvd25lcmlkX2hhc2h0YmxbT1dORVJfSEFTSF9TSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkCW93bmVyc3RyX2hhc2h0YmxbT1dORVJfSEFTSF9TSVpFXTsKLQotLyogaGFzaCB0YWJsZSBmb3IgbmZzNF9maWxlICovCi0jZGVmaW5lIEZJTEVfSEFTSF9CSVRTICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgRklMRV9IQVNIX1NJWkUgICAgICAgICAgICAgICAgICAoMSA8PCBGSUxFX0hBU0hfQklUUykKLSNkZWZpbmUgRklMRV9IQVNIX01BU0sgICAgICAgICAgICAgICAgICAoRklMRV9IQVNIX1NJWkUgLSAxKQotLyogaGFzaCB0YWJsZSBmb3IgKG9wZW4pbmZzNF9zdGF0ZWlkICovCi0jZGVmaW5lIFNUQVRFSURfSEFTSF9CSVRTICAgICAgICAgICAgICAxMAotI2RlZmluZSBTVEFURUlEX0hBU0hfU0laRSAgICAgICAgICAgICAgKDEgPDwgU1RBVEVJRF9IQVNIX0JJVFMpCi0jZGVmaW5lIFNUQVRFSURfSEFTSF9NQVNLICAgICAgICAgICAgICAoU1RBVEVJRF9IQVNIX1NJWkUgLSAxKQotCi0jZGVmaW5lIGZpbGVfaGFzaHZhbCh4KSBcCi0gICAgICAgIGhhc2hfcHRyKHgsIEZJTEVfSEFTSF9CSVRTKQotI2RlZmluZSBzdGF0ZWlkX2hhc2h2YWwob3duZXJfaWQsIGZpbGVfaWQpICBcCi0gICAgICAgICgoKG93bmVyX2lkKSArIChmaWxlX2lkKSkgJiBTVEFURUlEX0hBU0hfTUFTSykKLQotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZmlsZV9oYXNodGJsW0ZJTEVfSEFTSF9TSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlaWRfaGFzaHRibFtTVEFURUlEX0hBU0hfU0laRV07Ci0KIC8qIE9QRU4gU2hhcmUgc3RhdGUgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9maWxlICoKIGFsbG9jX2luaXRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlubykKQEAgLTExODYsOCArMTE5OSw3IEBACiB7CiAJZHByaW50aygiTkZTRDogbW92ZV90b19jbG9zZV9scnUgbmZzNF9zdGF0ZW93bmVyICVwXG4iLCBzb3ApOwogCi0JdW5oYXNoX3N0YXRlb3duZXIoc29wKTsKLQlsaXN0X2FkZF90YWlsKCZzb3AtPnNvX2Nsb3NlX2xydSwgJmNsb3NlX2xydSk7CisJbGlzdF9tb3ZlX3RhaWwoJnNvcC0+c29fY2xvc2VfbHJ1LCAmY2xvc2VfbHJ1KTsKIAlzb3AtPnNvX3RpbWUgPSBnZXRfc2Vjb25kcygpOwogfQogCkBAIC0xOTE2LDggKzE5MjgsNyBAQAogCQl9CiAJCWRwcmludGsoIk5GU0Q6IHB1cmdpbmcgdW51c2VkIG9wZW4gc3RhdGVvd25lciAoc29faWQgJWQpXG4iLAogCQkJc29wLT5zb19pZCk7Ci0JCWxpc3RfZGVsKCZzb3AtPnNvX2Nsb3NlX2xydSk7Ci0JCW5mczRfcHV0X3N0YXRlb3duZXIoc29wKTsKKwkJcmVsZWFzZV9zdGF0ZW93bmVyKHNvcCk7CiAJfQogCWlmIChjbGllbnRpZF92YWwgPCBORlNEX0xBVU5EUk9NQVRfTUlOVElNRU9VVCkKIAkJY2xpZW50aWRfdmFsID0gTkZTRF9MQVVORFJPTUFUX01JTlRJTUVPVVQ7CkBAIC0yNDk1LDM2ICsyNTA2LDI3IEBACiAJCWxvY2stPmZsX2VuZCA9IE9GRlNFVF9NQVg7CiB9CiAKLXN0YXRpYyBpbnQKLW5mczRfdmVyaWZ5X2xvY2tfc3RhdGVvd25lcihzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AsIHVuc2lnbmVkIGludCBoYXNodmFsKQotewotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxvY2FsID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQkJCSAgICAgICAgCi0JaWYgKGhhc2h2YWwgPj0gTE9DS19IQVNIX1NJWkUpCi0JCWdvdG8gb3V0OwotCWxpc3RfZm9yX2VhY2hfZW50cnkobG9jYWwsICZsb2NrX293bmVyaWRfaGFzaHRibFtoYXNodmFsXSwgc29faWRoYXNoKSB7Ci0JCWlmIChsb2NhbCA9PSBzb3ApIHsKLQkJCXN0YXR1cyA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLW91dDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCisvKiBIYWNrITogRm9yIG5vdywgd2UncmUgZGVmaW5pbmcgdGhpcyBqdXN0IHNvIHdlIGNhbiB1c2UgYSBwb2ludGVyIHRvIGl0CisgKiBhcyBhIHVuaXF1ZSBjb29raWUgdG8gaWRlbnRpZnkgb3VyIChORlN2NCdzKSBwb3NpeCBsb2Nrcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbmZzZF9wb3NpeF9tbmdfb3BzICA9IHsKK307CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmZzNF9zZXRfbG9ja19kZW5pZWQoc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBuZnNkNF9sb2NrX2RlbmllZCAqZGVueSkKIHsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSAoc3RydWN0IG5mczRfc3RhdGVvd25lciAqKSBmbC0+Zmxfb3duZXI7Ci0JdW5zaWduZWQgaW50IGh2YWwgPSBsb2Nrb3duZXJpZF9oYXNodmFsKHNvcC0+c29faWQpOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvcDsKKwl1bnNpZ25lZCBpbnQgaHZhbDsKIAotCWRlbnktPmxkX3NvcCA9IE5VTEw7Ci0JaWYgKG5mczRfdmVyaWZ5X2xvY2tfc3RhdGVvd25lcihzb3AsIGh2YWwpKSB7CisJaWYgKGZsLT5mbF9sbW9wcyA9PSAmbmZzZF9wb3NpeF9tbmdfb3BzKSB7CisJCXNvcCA9IChzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICopIGZsLT5mbF9vd25lcjsKKwkJaHZhbCA9IGxvY2tvd25lcmlkX2hhc2h2YWwoc29wLT5zb19pZCk7CiAJCWtyZWZfZ2V0KCZzb3AtPnNvX3JlZik7CiAJCWRlbnktPmxkX3NvcCA9IHNvcDsKIAkJZGVueS0+bGRfY2xpZW50aWQgPSBzb3AtPnNvX2NsaWVudC0+Y2xfY2xpZW50aWQ7CisJfSBlbHNlIHsKKwkJZGVueS0+bGRfc29wID0gTlVMTDsKKwkJZGVueS0+bGRfY2xpZW50aWQuY2xfYm9vdCA9IDA7CisJCWRlbnktPmxkX2NsaWVudGlkLmNsX2lkID0gMDsKIAl9CiAJZGVueS0+bGRfc3RhcnQgPSBmbC0+Zmxfc3RhcnQ7CiAJZGVueS0+bGRfbGVuZ3RoID0gfih1NjQpMDsKQEAgLTI3MzYsNiArMjczOCw3IEBACiAJZmlsZV9sb2NrLmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJZmlsZV9sb2NrLmZsX2ZpbGUgPSBmaWxwOwogCWZpbGVfbG9jay5mbF9mbGFncyA9IEZMX1BPU0lYOworCWZpbGVfbG9jay5mbF9sbW9wcyA9ICZuZnNkX3Bvc2l4X21uZ19vcHM7CiAKIAlmaWxlX2xvY2suZmxfc3RhcnQgPSBsb2NrLT5sa19vZmZzZXQ7CiAJaWYgKChsb2NrLT5sa19sZW5ndGggPT0gfih1NjQpMCkgfHwgCkBAIC0yODQxLDYgKzI4NDQsNyBAQAogCQlmaWxlX2xvY2suZmxfb3duZXIgPSAoZmxfb3duZXJfdClsb2NrdC0+bHRfc3RhdGVvd25lcjsKIAlmaWxlX2xvY2suZmxfcGlkID0gY3VycmVudC0+dGdpZDsKIAlmaWxlX2xvY2suZmxfZmxhZ3MgPSBGTF9QT1NJWDsKKwlmaWxlX2xvY2suZmxfbG1vcHMgPSAmbmZzZF9wb3NpeF9tbmdfb3BzOwogCiAJZmlsZV9sb2NrLmZsX3N0YXJ0ID0gbG9ja3QtPmx0X29mZnNldDsKIAlpZiAoKGxvY2t0LT5sdF9sZW5ndGggPT0gfih1NjQpMCkgfHwgTE9GRl9PVkVSRkxPVyhsb2NrdC0+bHRfb2Zmc2V0LCBsb2NrdC0+bHRfbGVuZ3RoKSkKQEAgLTI5MDAsNiArMjkwNCw3IEBACiAJZmlsZV9sb2NrLmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJZmlsZV9sb2NrLmZsX2ZpbGUgPSBmaWxwOwogCWZpbGVfbG9jay5mbF9mbGFncyA9IEZMX1BPU0lYOyAKKwlmaWxlX2xvY2suZmxfbG1vcHMgPSAmbmZzZF9wb3NpeF9tbmdfb3BzOwogCWZpbGVfbG9jay5mbF9zdGFydCA9IGxvY2t1LT5sdV9vZmZzZXQ7CiAKIAlpZiAoKGxvY2t1LT5sdV9sZW5ndGggPT0gfih1NjQpMCkgfHwgTE9GRl9PVkVSRkxPVyhsb2NrdS0+bHVfb2Zmc2V0LCBsb2NrdS0+bHVfbGVuZ3RoKSkKQEAgLTMyMTEsMTUgKzMyMTYsOCBAQAogCWludCBpOwogCXN0cnVjdCBuZnM0X2NsaWVudCAqY2xwID0gTlVMTDsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IE5VTEw7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0LCByZWFwbGlzdDsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZjbG9zZV9scnUpIHsKLQkJc29wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIsIHNvX2Nsb3NlX2xydSk7Ci0JCWxpc3RfZGVsKCZzb3AtPnNvX2Nsb3NlX2xydSk7Ci0JCW5mczRfcHV0X3N0YXRlb3duZXIoc29wKTsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgQ0xJRU5UX0hBU0hfU0laRTsgaSsrKSB7CiAJCXdoaWxlICghbGlzdF9lbXB0eSgmY29uZl9pZF9oYXNodGJsW2ldKSkgewogCQkJY2xwID0gbGlzdF9lbnRyeShjb25mX2lkX2hhc2h0YmxbaV0ubmV4dCwgc3RydWN0IG5mczRfY2xpZW50LCBjbF9pZGhhc2gpOwpAQCAtMzI0NCw4ICszMjQyLDYgQEAKIAl9CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZsYXVuZHJvbWF0X3dvcmspOwotCWZsdXNoX3dvcmtxdWV1ZShsYXVuZHJ5X3dxKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShsYXVuZHJ5X3dxKTsKIAluZnNkNF9zaHV0ZG93bl9yZWNkaXIoKTsKIAluZnM0X2luaXQgPSAwOwogfQpAQCAtMzI1Myw2ICszMjQ5LDggQEAKIHZvaWQKIG5mczRfc3RhdGVfc2h1dGRvd24odm9pZCkKIHsKKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUobGF1bmRyeV93cSwgJmxhdW5kcm9tYXRfd29yayk7CisJZGVzdHJveV93b3JrcXVldWUobGF1bmRyeV93cSk7CiAJbmZzNF9sb2NrX3N0YXRlKCk7CiAJbmZzNF9yZWxlYXNlX3JlY2xhaW0oKTsKIAlfX25mczRfc3RhdGVfc2h1dGRvd24oKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggMDM4NTdmZC4uZGUzOTk4ZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTI5OSwxMSArMjk5LDEwIEBACiAJCQkJCQlidWYsIGR1bW15MzIsICZhY2Uud2hvKTsKIAkJCWlmIChzdGF0dXMpCiAJCQkJZ290byBvdXRfbmZzZXJyOwotCQkJaWYgKG5mczRfYWNsX2FkZF9hY2UoKmFjbCwgYWNlLnR5cGUsIGFjZS5mbGFnLAotCQkJCSBhY2UuYWNjZXNzX21hc2ssIGFjZS53aG90eXBlLCBhY2Uud2hvKSAhPSAwKSB7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCXN0YXR1cyA9IG5mczRfYWNsX2FkZF9hY2UoKmFjbCwgYWNlLnR5cGUsIGFjZS5mbGFnLAorCQkJCSBhY2UuYWNjZXNzX21hc2ssIGFjZS53aG90eXBlLCBhY2Uud2hvKTsKKwkJCWlmIChzdGF0dXMpCiAJCQkJZ290byBvdXRfbmZzZXJyOwotCQkJfQogCQl9CiAJfSBlbHNlCiAJCSphY2wgPSBOVUxMOwpAQCAtMjA4NSwyNyArMjA4NCwyMCBAQAogCVdSSVRFMzIoZW9mKTsKIAlXUklURTMyKG1heGNvdW50KTsKIAlBREpVU1RfQVJHUygpOwotCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9ICgoY2hhciopcmVzcC0+cCkgLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKLQorCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9IChjaGFyKilwCisJCQkJCS0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CiAJcmVzcC0+eGJ1Zi0+cGFnZV9sZW4gPSBtYXhjb3VudDsKIAotCS8qIHJlYWQgemVybyBieXRlcyAtPiBkb24ndCBzZXQgdXAgdGFpbCAqLwotCWlmKCFtYXhjb3VudCkKLQkJcmV0dXJuIDA7ICAgICAgICAKLQotCS8qIHNldCB1cCBwYWdlIGZvciByZW1haW5pbmcgcmVzcG9uc2VzICovCi0Jc3ZjX3Rha2VfcGFnZShyZXNwLT5ycXN0cCk7Ci0JcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IAotCQlwYWdlX2FkZHJlc3MocmVzcC0+cnFzdHAtPnJxX3Jlc3BhZ2VzW3Jlc3AtPnJxc3RwLT5ycV9yZXN1c2VkLTFdKTsKLQlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSByZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xOworCS8qIFVzZSByZXN0IG9mIGhlYWQgZm9yIHBhZGRpbmcgYW5kIHJlbWFpbmluZyBvcHM6ICovCisJcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKKwlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlID0gcDsKIAlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOwotCXJlc3AtPnAgPSByZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlOwotCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyBQQUdFX1NJWkUvNDsKLQogCWlmIChtYXhjb3VudCYzKSB7Ci0JCSoocmVzcC0+cCkrKyA9IDA7CisJCVJFU0VSVkVfU1BBQ0UoNCk7CisJCVdSSVRFMzIoMCk7CiAJCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgKz0gbWF4Y291bnQmMzsKIAkJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfbGVuID0gNCAtIChtYXhjb3VudCYzKTsKKwkJQURKVVNUX0FSR1MoKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTQyLDIxICsyMTM0LDIwIEBACiAKIAlXUklURTMyKG1heGNvdW50KTsKIAlBREpVU1RfQVJHUygpOwotCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9ICgoY2hhciopcmVzcC0+cCkgLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKLQotCXN2Y190YWtlX3BhZ2UocmVzcC0+cnFzdHApOwotCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSAKLQkJcGFnZV9hZGRyZXNzKHJlc3AtPnJxc3RwLT5ycV9yZXNwYWdlc1tyZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMTsKLQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOwotCXJlc3AtPnAgPSByZXNwLT54YnVmLT50YWlsWzBdLmlvdl9iYXNlOwotCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyBQQUdFX1NJWkUvNDsKLQorCXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2xlbiA9IChjaGFyKilwCisJCQkJLSAoY2hhciopcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKIAlyZXNwLT54YnVmLT5wYWdlX2xlbiA9IG1heGNvdW50OworCisJLyogVXNlIHJlc3Qgb2YgaGVhZCBmb3IgcGFkZGluZyBhbmQgcmVtYWluaW5nIG9wczogKi8KKwlyZXNwLT5ycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSAwOworCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSBwOworCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7CiAJaWYgKG1heGNvdW50JjMpIHsKLQkJKihyZXNwLT5wKSsrID0gMDsKKwkJUkVTRVJWRV9TUEFDRSg0KTsKKwkJV1JJVEUzMigwKTsKIAkJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSArPSBtYXhjb3VudCYzOwogCQlyZXNwLT54YnVmLT50YWlsWzBdLmlvdl9sZW4gPSA0IC0gKG1heGNvdW50JjMpOworCQlBREpVU1RfQVJHUygpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNjYsNyArMjE1Nyw3IEBACiB7CiAJaW50IG1heGNvdW50OwogCWxvZmZfdCBvZmZzZXQ7Ci0JdTMyICpwYWdlLCAqc2F2ZXA7CisJdTMyICpwYWdlLCAqc2F2ZXAsICp0YWlsYmFzZTsKIAlFTkNPREVfSEVBRDsKIAogCWlmIChuZnNlcnIpCkBAIC0yMTgyLDYgKzIxNzMsNyBAQAogCVdSSVRFMzIoMCk7CiAJQURKVVNUX0FSR1MoKTsKIAlyZXNwLT54YnVmLT5oZWFkWzBdLmlvdl9sZW4gPSAoKGNoYXIqKXJlc3AtPnApIC0gKGNoYXIqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CisJdGFpbGJhc2UgPSBwOwogCiAJbWF4Y291bnQgPSBQQUdFX1NJWkU7CiAJaWYgKG1heGNvdW50ID4gcmVhZGRpci0+cmRfbWF4Y291bnQpCkBAIC0yMjI2LDE0ICsyMjE4LDEyIEBACiAJKnArKyA9IGh0b25sKHJlYWRkaXItPmNvbW1vbi5lcnIgPT0gbmZzZXJyX2VvZik7CiAJcmVzcC0+eGJ1Zi0+cGFnZV9sZW4gPSAoKGNoYXIqKXApIC0gKGNoYXIqKXBhZ2VfYWRkcmVzcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMV0pOwogCi0JLyogYWxsb2NhdGUgYSBwYWdlIGZvciB0aGUgdGFpbCAqLwotCXN2Y190YWtlX3BhZ2UocmVzcC0+cnFzdHApOwotCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSAKLQkJcGFnZV9hZGRyZXNzKHJlc3AtPnJxc3RwLT5ycV9yZXNwYWdlc1tyZXNwLT5ycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JcmVzcC0+cnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtMTsKKwkvKiBVc2UgcmVzdCBvZiBoZWFkIGZvciBwYWRkaW5nIGFuZCByZW1haW5pbmcgb3BzOiAqLworCXJlc3AtPnJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IDA7CisJcmVzcC0+eGJ1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9IHRhaWxiYXNlOwogCXJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2xlbiA9IDA7CiAJcmVzcC0+cCA9IHJlc3AtPnhidWYtPnRhaWxbMF0uaW92X2Jhc2U7Ci0JcmVzcC0+ZW5kID0gcmVzcC0+cCArIFBBR0VfU0laRS80OworCXJlc3AtPmVuZCA9IHJlc3AtPnAgKyAoUEFHRV9TSVpFIC0gcmVzcC0+eGJ1Zi0+aGVhZFswXS5pb3ZfbGVuKS80OwogCiAJcmV0dXJuIDA7CiBlcnJfbm9fdmVyZjoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzcHJvYy5jIGIvZnMvbmZzZC9uZnNwcm9jLmMKaW5kZXggM2U2Yjc1Yy4uMDZjZDBkYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnNwcm9jLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogICBQUk9DKG5vbmUsCSB2b2lkLAkJdm9pZCwJCW5vbmUsCQlSQ19OT0NBQ0hFLCBTVCksCiAgIFBST0MobG9va3VwLAkgZGlyb3BhcmdzLAlkaXJvcHJlcywJZmhhbmRsZSwJUkNfTk9DQUNIRSwgU1QrRkgrQVQpLAogICBQUk9DKHJlYWRsaW5rLCByZWFkbGlua2FyZ3MsCXJlYWRsaW5rcmVzLAlub25lLAkJUkNfTk9DQUNIRSwgU1QrMStORlNfTUFYUEFUSExFTi80KSwKLSAgUFJPQyhyZWFkLAkgcmVhZGFyZ3MsCXJlYWRyZXMsCWZoYW5kbGUsCVJDX05PQ0FDSEUsIFNUK0FUKzErTkZTU1ZDX01BWEJMS1NJWkUpLAorICBQUk9DKHJlYWQsCSByZWFkYXJncywJcmVhZHJlcywJZmhhbmRsZSwJUkNfTk9DQUNIRSwgU1QrQVQrMStORlNTVkNfTUFYQkxLU0laRS80KSwKICAgUFJPQyhub25lLAkgdm9pZCwJCXZvaWQsCQlub25lLAkJUkNfTk9DQUNIRSwgU1QpLAogICBQUk9DKHdyaXRlLAkgd3JpdGVhcmdzLAlhdHRyc3RhdCwJZmhhbmRsZSwJUkNfUkVQTEJVRkYsIFNUK0FUKSwKICAgUFJPQyhjcmVhdGUsCSBjcmVhdGVhcmdzLAlkaXJvcHJlcywJZmhhbmRsZSwJUkNfUkVQTEJVRkYsIFNUK0ZIK0FUKSwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDMxMDE4MzMuLjFkNjVmMTMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMzcxLDcgKzM3MSw2IEBACiBzdGF0aWMgc3NpemVfdCBuZnNkX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqa2V5LCB2b2lkICoqYnVmKQogewogCXNzaXplX3QgYnVmbGVuOwotCWludCBlcnJvcjsKIAogCWJ1ZmxlbiA9IHZmc19nZXR4YXR0cihkZW50cnksIGtleSwgTlVMTCwgMCk7CiAJaWYgKGJ1ZmxlbiA8PSAwKQpAQCAtMzgxLDEwICszODAsNyBAQAogCWlmICghKmJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnJvciA9IHZmc19nZXR4YXR0cihkZW50cnksIGtleSwgKmJ1ZiwgYnVmbGVuKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0JcmV0dXJuIGJ1ZmxlbjsKKwlyZXR1cm4gdmZzX2dldHhhdHRyKGRlbnRyeSwga2V5LCAqYnVmLCBidWZsZW4pOwogfQogI2VuZGlmCiAKQEAgLTE5MjYsMTEgKzE5MjIsMTAgQEAKIAkJdmFsdWUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXNpemUgPSBwb3NpeF9hY2xfdG9feGF0dHIoYWNsLCB2YWx1ZSwgc2l6ZSk7Ci0JCWlmIChzaXplIDwgMCkgewotCQkJZXJyb3IgPSBzaXplOworCQllcnJvciA9IHBvc2l4X2FjbF90b194YXR0cihhY2wsIHZhbHVlLCBzaXplKTsKKwkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gZ2V0b3V0OwotCQl9CisJCXNpemUgPSBlcnJvcjsKIAl9IGVsc2UKIAkJc2l6ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCAwZDg1OGQwLi40NzE1MmJmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC0yNzYsMTMgKzI3NiwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gb2NmczJfd3JpdGVfemVyb19wYWdlKCkgd2hpY2ggaGFzIGRvbmUKKyAqIGl0J3Mgb3duIGNsdXN0ZXIgbG9ja2luZy4gKi8KK2ludCBvY2ZzMl9wcmVwYXJlX3dyaXRlX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3sKKwlpbnQgcmV0OworCisJZG93bl9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKworCXJldCA9IGJsb2NrX3ByZXBhcmVfd3JpdGUocGFnZSwgZnJvbSwgdG8sIG9jZnMyX2dldF9ibG9jayk7CisKKwl1cF9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBvY2ZzMl9wcmVwYXJlX3dyaXRlKCkgY2FuIGJlIGFuIG91dGVyLW1vc3Qgb2NmczIgY2FsbCB3aGVuIGl0IGlzIGNhbGxlZAogICogZnJvbSBsb29wYmFjay4gIEl0IG11c3QgYmUgYWJsZSB0byBwZXJmb3JtIGl0cyBvd24gbG9ja2luZyBhcm91bmQKICAqIG9jZnMyX2dldF9ibG9jaygpLgogICovCi1pbnQgb2NmczJfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3N0YXRpYyBpbnQgb2NmczJfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJaW50IHJldDsKQEAgLTI5NSwxMSArMzExLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZG93bl9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKLQotCXJldCA9IGJsb2NrX3ByZXBhcmVfd3JpdGUocGFnZSwgZnJvbSwgdG8sIG9jZnMyX2dldF9ibG9jayk7Ci0KLQl1cF9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwlyZXQgPSBvY2ZzMl9wcmVwYXJlX3dyaXRlX25vbG9jayhpbm9kZSwgcGFnZSwgZnJvbSwgdG8pOwogCiAJb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIDApOwogb3V0OgpAQCAtNjI1LDExICs2MzcsMzEgQEAKIAlpbnQgcmV0OwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CisKKwkvKgorCSAqIFdlIGdldCBQUiBkYXRhIGxvY2tzIGV2ZW4gZm9yIE9fRElSRUNULiAgVGhpcyBhbGxvd3MKKwkgKiBjb25jdXJyZW50IE9fRElSRUNUIEkvTyBidXQgZG9lc24ndCBsZXQgT19ESVJFQ1Qgd2l0aAorCSAqIGV4dGVuZGluZyBhbmQgYnVmZmVyZWQgemVyb2luZyB3cml0ZXMgcmFjZS4gIElmIHRoZXkgZGlkCisJICogcmFjZSB0aGVuIHRoZSBidWZmZXJlZCB6ZXJvaW5nIGNvdWxkIGJlIHdyaXR0ZW4gYmFjayBhZnRlcgorCSAqIHRoZSBPX0RJUkVDVCBJL08uICBJdCdzIG9uZSB0aGluZyB0byB0ZWxsIHBlb3BsZSBub3QgdG8gbWl4CisJICogYnVmZmVyZWQgYW5kIE9fRElSRUNUIHdyaXRlcywgYnV0IGV4cGVjdGluZyB0aGVtIHRvCisJICogdW5kZXJzdGFuZCB0aGF0IGZpbGUgZXh0ZW5zaW9uIGlzIGFsc28gYW4gaW1wbGljaXQgYnVmZmVyZWQKKwkgKiB3cml0ZSBpcyB0b28gbXVjaC4gIEJ5IGdldHRpbmcgdGhlIFBSIHdlIGZvcmNlIHdyaXRlYmFjayBvZgorCSAqIHRoZSBidWZmZXJlZCB6ZXJvaW5nIGJlZm9yZSBwcm9jZWVkaW5nLgorCSAqLworCXJldCA9IG9jZnMyX2RhdGFfbG9jayhpbm9kZSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDApOworCiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLAogCQkJCQkgICAgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LCBvZmZzZXQsCiAJCQkJCSAgICBucl9zZWdzLCAKIAkJCQkJICAgIG9jZnMyX2RpcmVjdF9JT19nZXRfYmxvY2tzLAogCQkJCQkgICAgb2NmczJfZGlvX2VuZF9pbyk7CitvdXQ6CiAJbWxvZ19leGl0KHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuaCBiL2ZzL29jZnMyL2FvcHMuaAppbmRleCBkNDA0NTZkLi5lODhjM2YwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmgKKysrIGIvZnMvb2NmczIvYW9wcy5oCkBAIC0yMiw4ICsyMiw4IEBACiAjaWZuZGVmIE9DRlMyX0FPUFNfSAogI2RlZmluZSBPQ0ZTMl9BT1BTX0gKIAotaW50IG9jZnMyX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOworaW50IG9jZnMyX3ByZXBhcmVfd3JpdGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKIAogc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpvY2ZzMl9zdGFydF93YWxrX3BhZ2VfdHJhbnMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwppbmRleCBiZmYwZjBkLi4yMWYzOGFjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCB7CiAJYXRvbWljX3QgICAgICAgICAgd2NfbnVtX3JlcXM7CiAJc3RydWN0IGNvbXBsZXRpb24gd2NfaW9fY29tcGxldGU7CisJaW50ICAgICAgICAgICAgICAgd2NfZXJyb3I7CiB9OwogCiBzdGF0aWMgdm9pZCBvMmhiX3dyaXRlX3RpbWVvdXQodm9pZCAqYXJnKQpAQCAtMTg2LDYgKzE4Nyw3IEBACiB7CiAJYXRvbWljX3NldCgmd2MtPndjX251bV9yZXFzLCBudW1faW9zKTsKIAlpbml0X2NvbXBsZXRpb24oJndjLT53Y19pb19jb21wbGV0ZSk7CisJd2MtPndjX2Vycm9yID0gMDsKIH0KIAogLyogVXNlZCBpbiBlcnJvciBwYXRocyB0b28gKi8KQEAgLTIxOCw4ICsyMjAsMTAgQEAKIHsKIAlzdHJ1Y3QgbzJoYl9iaW9fd2FpdF9jdHh0ICp3YyA9IGJpby0+YmlfcHJpdmF0ZTsKIAotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIklPIEVycm9yICVkXG4iLCBlcnJvcik7CisJCXdjLT53Y19lcnJvciA9IGVycm9yOworCX0KIAogCWlmIChiaW8tPmJpX3NpemUpCiAJCXJldHVybiAxOwpAQCAtMzkwLDYgKzM5NCw4IEBACiAKIGJhaWxfYW5kX3dhaXQ6CiAJbzJoYl93YWl0X29uX2lvKHJlZywgJndjKTsKKwlpZiAod2Mud2NfZXJyb3IgJiYgIXN0YXR1cykKKwkJc3RhdHVzID0gd2Mud2NfZXJyb3I7CiAKIAlpZiAoYmlvcykgewogCQlmb3IoaSA9IDA7IGkgPCBudW1fYmlvczsgaSsrKQpAQCAtNzkwLDIwICs3OTYsMjQgQEAKIAlyZXR1cm4gaGlnaGVzdDsKIH0KIAotc3RhdGljIHZvaWQgbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKK3N0YXRpYyBpbnQgbzJoYl9kb19kaXNrX2hlYXJ0YmVhdChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKIAlpbnQgaSwgcmV0LCBoaWdoZXN0X25vZGUsIGNoYW5nZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBjb25maWd1cmVkX25vZGVzW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKIAlzdHJ1Y3QgYmlvICp3cml0ZV9iaW87CiAJc3RydWN0IG8yaGJfYmlvX3dhaXRfY3R4dCB3cml0ZV93YzsKIAotCWlmIChvMm5tX2NvbmZpZ3VyZWRfbm9kZV9tYXAoY29uZmlndXJlZF9ub2Rlcywgc2l6ZW9mKGNvbmZpZ3VyZWRfbm9kZXMpKSkKLQkJcmV0dXJuOworCXJldCA9IG8ybm1fY29uZmlndXJlZF9ub2RlX21hcChjb25maWd1cmVkX25vZGVzLAorCQkJCSAgICAgICBzaXplb2YoY29uZmlndXJlZF9ub2RlcykpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAogCWhpZ2hlc3Rfbm9kZSA9IG8yaGJfaGlnaGVzdF9ub2RlKGNvbmZpZ3VyZWRfbm9kZXMsIE8yTk1fTUFYX05PREVTKTsKIAlpZiAoaGlnaGVzdF9ub2RlID49IE8yTk1fTUFYX05PREVTKSB7CiAJCW1sb2coTUxfTk9USUNFLCAib2NmczJfaGVhcnRiZWF0OiBubyBjb25maWd1cmVkIG5vZGVzIGZvdW5kIVxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTm8gc2Vuc2UgaW4gcmVhZGluZyB0aGUgc2xvdHMgb2Ygbm9kZXMgdGhhdCBkb24ndCBleGlzdApAQCAtODEzLDcgKzgyMyw3IEBACiAJcmV0ID0gbzJoYl9yZWFkX3Nsb3RzKHJlZywgaGlnaGVzdF9ub2RlICsgMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogV2l0aCBhbiB1cCB0byBkYXRlIHZpZXcgb2YgdGhlIHNsb3RzLCB3ZSBjYW4gY2hlY2sgdGhhdCBubwpAQCAtODMxLDcgKzg0MSw3IEBACiAJcmV0ID0gbzJoYl9pc3N1ZV9ub2RlX3dyaXRlKHJlZywgJndyaXRlX2JpbywgJndyaXRlX3djKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlpID0gLTE7CkBAIC04NDcsNiArODU3LDE1IEBACiAJICovCiAJbzJoYl93YWl0X29uX2lvKHJlZywgJndyaXRlX3djKTsKIAliaW9fcHV0KHdyaXRlX2Jpbyk7CisJaWYgKHdyaXRlX3djLndjX2Vycm9yKSB7CisJCS8qIERvIG5vdCByZS1hcm0gdGhlIHdyaXRlIHRpbWVvdXQgb24gSS9PIGVycm9yIC0gd2UKKwkJICogY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZSBuZXcgYmxvY2sgZXZlciBtYWRlIGl0IHRvCisJCSAqIGRpc2sgKi8KKwkJbWxvZyhNTF9FUlJPUiwgIldyaXRlIGVycm9yICVkIG9uIGRldmljZSBcIiVzXCJcbiIsCisJCSAgICAgd3JpdGVfd2Mud2NfZXJyb3IsIHJlZy0+aHJfZGV2X25hbWUpOworCQlyZXR1cm4gd3JpdGVfd2Mud2NfZXJyb3I7CisJfQorCiAJbzJoYl9hcm1fd3JpdGVfdGltZW91dChyZWcpOwogCiAJLyogbGV0IHRoZSBwZXJzb24gd2hvIGxhdW5jaGVkIHVzIGtub3cgd2hlbiB0aGluZ3MgYXJlIHN0ZWFkeSAqLwpAQCAtODU0LDYgKzg3Myw4IEBACiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZWctPmhyX3N0ZWFkeV9pdGVyYXRpb25zKSkKIAkJCXdha2VfdXAoJm8yaGJfc3RlYWR5X3F1ZXVlKTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogU3VidHJhY3QgYiBmcm9tIGEsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBhLiBhICptdXN0KiBoYXZlIGEgbGFyZ2VyCkBAIC05MTMsNyArOTM0LDEwIEBACiAJCSAqIGxpa2VseSB0byB0aW1lIGl0c2VsZiBvdXQuICovCiAJCWRvX2dldHRpbWVvZmRheSgmYmVmb3JlX2hiKTsKIAotCQlvMmhiX2RvX2Rpc2tfaGVhcnRiZWF0KHJlZyk7CisJCWkgPSAwOworCQlkbyB7CisJCQlyZXQgPSBvMmhiX2RvX2Rpc2tfaGVhcnRiZWF0KHJlZyk7CisJCX0gd2hpbGUgKHJldCAmJiArK2kgPCAyKTsKIAogCQlkb19nZXR0aW1lb2ZkYXkoJmFmdGVyX2hiKTsKIAkJZWxhcHNlZF9tc2VjID0gbzJoYl9lbGFwc2VkX21zZWNzKCZiZWZvcmVfaGIsICZhZnRlcl9oYik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vdXNlcmRsbS5jIGIvZnMvb2NmczIvZGxtL3VzZXJkbG0uYwppbmRleCBjMzc2NGY0Li43NGNhNGU1ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYworKysgYi9mcy9vY2ZzMi9kbG0vdXNlcmRsbS5jCkBAIC0xMzksNiArMTM5LDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwltbG9nX2J1Z19vbl9tc2cobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPT0gTEtNX0lWTU9ERSwKKwkJCSJMb2NrcmVzICVzLCByZXF1ZXN0ZWQgaXZtb2RlLiBmbGFncyAweCV4XG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwogCS8qIHdlJ3JlIGRvd25jb252ZXJ0aW5nLiAqLwogCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8IGxvY2tyZXMtPmxfbGV2ZWwpIHsKIAkJaWYgKGxvY2tyZXMtPmxfcmVxdWVzdGVkIDw9CkBAIC0yMjksMjMgKzIzMyw0MiBAQAogCiAJbWxvZygwLCAiVU5MT0NLIEFTVCBjYWxsZWQgb24gbG9jayAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAotCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKKwlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwgJiYgc3RhdHVzICE9IERMTV9DQU5DRUxHUkFOVCkKIAkJbWxvZyhNTF9FUlJPUiwgIkRsbSByZXR1cm5zIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikKKwkvKiBUaGUgdGVhcmRvd24gZmxhZyBnZXRzIHNldCBlYXJseSBkdXJpbmcgdGhlIHVubG9jayBwcm9jZXNzLAorCSAqIHNvIHRlc3QgdGhlIGNhbmNlbCBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgYXN0IGlzbid0CisJICogZm9yIGEgY29uY3VycmVudCBjYW5jZWwuICovCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04KKwkgICAgJiYgIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpIHsKIAkJbG9ja3Jlcy0+bF9sZXZlbCA9IExLTV9JVk1PREU7Ci0JZWxzZSB7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7CisJCW1sb2coMCwgIkxvY2sgJXMsIGNhbmNlbCBmYWlscywgZmxhZ3MgMHgleFxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOworCQkvKiBXZSB0cmllZCB0byBjYW5jZWwgYSBjb252ZXJ0IHJlcXVlc3QsIGJ1dCBpdCB3YXMKKwkJICogYWxyZWFkeSBncmFudGVkLiBEb24ndCBjbGVhciB0aGUgYnVzeSBmbGFnIC0gdGhlCisJCSAqIGFzdCBzaG91bGQndmUgZG9uZSB0aGlzIGFscmVhZHkuICovCisJCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSk7CisJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7CisJCWdvdG8gb3V0X25vY2xlYXI7CisJfSBlbHNlIHsKKwkJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKTsKKwkJLyogQ2FuY2VsIHN1Y2NlZWRlZCwgd2Ugd2FudCB0byByZS1xdWV1ZSAqLworCQltbG9nKDAsICJMb2NrICVzLCBjYW5jZWwgc3VjY2VlZHMsIGZsYWdzIDB4JXhcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKIAkJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBMS01fSVZNT0RFOyAvKiBjYW5jZWwgYW4KIAkJCQkJCSAgICAqIHVwY29udmVydAogCQkJCQkJICAgICogcmVxdWVzdC4gKi8KIAkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKIAkJLyogd2Ugd2FudCB0aGUgdW5ibG9jayB0aHJlYWQgdG8gbG9vayBhdCBpdCBhZ2FpbgogCQkgKiBub3cuICovCi0JCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKKwkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkKKwkJCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKIAl9CiAKIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKK291dF9ub2NsZWFyOgogCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwogCiAJd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7CkBAIC0yNjgsMTMgKzI5MSwyNiBAQAogCiAJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwogCi0JQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSk7Ci0JQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpKTsKKwltbG9nX2J1Z19vbl9tc2coIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX1FVRVVFRCksCisJCQkiTG9ja3JlcyAlcywgZmxhZ3MgMHgleFxuIiwKKwkJCWxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CiAKLQkvKiBub3RpY2UgdGhhdCB3ZSBkb24ndCBjbGVhciBVU0VSX0xPQ0tfQkxPQ0tFRCBoZXJlLiBUaGF0J3MKLQkgKiBmb3IgdXNlcl9hc3QgdG8gZG8uICovCisJLyogbm90aWNlIHRoYXQgd2UgZG9uJ3QgY2xlYXIgVVNFUl9MT0NLX0JMT0NLRUQgaGVyZS4gSWYgaXQncworCSAqIHNldCwgd2Ugd2FudCB1c2VyX2FzdCBjbGVhciBpdC4gKi8KIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfUVVFVUVEOwogCisJLyogSXQncyB2YWxpZCB0byBnZXQgaGVyZSBhbmQgbm8gbG9uZ2VyIGJlIGJsb2NrZWQgLSBpZiB3ZSBnZXQKKwkgKiBzZXZlcmFsIGJhc3RzIGluIGEgcm93LCB3ZSBtaWdodCBiZSBxdWV1ZWQgYnkgdGhlIGZpcnN0CisJICogb25lLCB0aGUgdW5ibG9jayB0aHJlYWQgbWlnaHQgcnVuIGFuZCBjbGVhciB0aGUgcXVldWVkCisJICogZmxhZywgYW5kIGZpbmFsbHkgd2UgbWlnaHQgZ2V0IGFub3RoZXIgYmFzdCB3aGljaCByZS1xdWV1ZXMKKwkgKiB1cyBiZWZvcmUgb3VyIGFzdCBmb3IgdGhlIGRvd25jb252ZXJ0IGlzIGNhbGxlZC4gKi8KKwlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKSB7CisJCW1sb2coMCwgIkxvY2tyZXMgJXMsIGZsYWdzIDB4JXg6IHF1ZXVlZCBidXQgbm90IGJsb2NraW5nXG4iLAorCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCWdvdG8gZHJvcF9yZWY7CisJfQorCiAJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04pIHsKIAkJbWxvZygwLCAibG9jayBpcyBpbiB0ZWFyZG93biBzbyB3ZSBkbyBub3RoaW5nXG4iKTsKIAkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CkBAIC0yODIsNyArMzE4LDkgQEAKIAl9CiAKIAlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCW1sb2coMCwgIkJVU1kgZmxhZyBkZXRlY3RlZC4uLlxuIik7CisJCW1sb2coMCwgIkNhbmNlbCBsb2NrICVzLCBmbGFncyAweCV4XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKIAkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSB7CiAJCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAkJCWdvdG8gZHJvcF9yZWY7CkBAIC0yOTYsMTQgKzMzNCw3IEBACiAJCQkJICAgTEtNX0NBTkNFTCwKIAkJCQkgICB1c2VyX3VubG9ja19hc3QsCiAJCQkJICAgbG9ja3Jlcyk7Ci0JCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7Ci0JCQkvKiBJZiB3ZSBnb3QgdGhpcywgdGhlbiB0aGUgYXN0IHdhcyBmaXJlZAotCQkJICogYmVmb3JlIHdlIGNvdWxkIGNhbmNlbC4gV2UgY2xlYW51cCBvdXIKLQkJCSAqIHN0YXRlLCBhbmQgcmVzdGFydCB0aGUgZnVuY3Rpb24uICovCi0JCQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfSU5fQ0FOQ0VMOwotCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpCisJCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKIAkJCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKIAkJZ290byBkcm9wX3JlZjsKIAl9CkBAIC01ODEsNiArNjEyLDE0IEBACiAJbWxvZygwLCAiYXNrZWQgdG8gZGVzdHJveSAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgeworCQltbG9nKDAsICJMb2NrIGlzIGFscmVhZHkgdG9ybiBkb3duXG4iKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0lOX1RFQVJET1dOOworCiAJd2hpbGUgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgewogCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIApAQCAtNjA2LDcgKzY0NSw2IEBACiAKIAlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQVRUQUNIRUQ7CiAJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfQlVTWTsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19JTl9URUFSRE9XTjsKIAlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKIAogCW1sb2coMCwgInVubG9ja2luZyBsb2NrcmVzICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IDQ2MDFmYzIuLjFhNWM2OTAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTU2OSw3ICs1NjksNyBAQAogCiAJcmV0ID0gLUVOT01FTTsKIAljdHh0Lm5ld19lbnQgPSBrbWVtX2NhY2hlX2FsbG9jKG9jZnMyX2VtX2VudF9jYWNoZXAsCi0JCQkJCUdGUF9LRVJORUwpOworCQkJCQlHRlBfTk9GUyk7CiAJaWYgKCFjdHh0Lm5ld19lbnQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTgzLDE0ICs1ODMsMTQgQEAKIAkJaWYgKGN0eHQubmVlZF9sZWZ0ICYmICFjdHh0LmxlZnRfZW50KSB7CiAJCQljdHh0LmxlZnRfZW50ID0KIAkJCQlrbWVtX2NhY2hlX2FsbG9jKG9jZnMyX2VtX2VudF9jYWNoZXAsCi0JCQkJCQkgR0ZQX0tFUk5FTCk7CisJCQkJCQkgR0ZQX05PRlMpOwogCQkJaWYgKCFjdHh0LmxlZnRfZW50KQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChjdHh0Lm5lZWRfcmlnaHQgJiYgIWN0eHQucmlnaHRfZW50KSB7CiAJCQljdHh0LnJpZ2h0X2VudCA9CiAJCQkJa21lbV9jYWNoZV9hbGxvYyhvY2ZzMl9lbV9lbnRfY2FjaGVwLAotCQkJCQkJIEdGUF9LRVJORUwpOworCQkJCQkJIEdGUF9OT0ZTKTsKIAkJCWlmICghY3R4dC5yaWdodF9lbnQpCiAJCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAzNGU5MDNhLi5hOTU1OWM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0yNjAsNiArMjYwLDE3IEBACiAJaWYgKG5ld19pX3NpemUgPT0gbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpCiAJCWdvdG8gYmFpbDsKIAorCS8qIFRoaXMgZm9yY2VzIG90aGVyIG5vZGVzIHRvIHN5bmMgYW5kIGRyb3AgdGhlaXIgcGFnZXMuIERvCisJICogdGhpcyBldmVuIGlmIHdlIGhhdmUgYSB0cnVuY2F0ZSB3aXRob3V0IGFsbG9jYXRpb24gY2hhbmdlIC0KKwkgKiBvY2ZzMiBjbHVzdGVyIHNpemVzIGNhbiBiZSBtdWNoIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUsIHNvCisJICogd2UgaGF2ZSB0byB0cnVuY2F0ZSB0aGVtIGFueXdheS4gICovCisJc3RhdHVzID0gb2NmczJfZGF0YV9sb2NrKGlub2RlLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOworCiAJaWYgKGxlMzJfdG9fY3B1KGZlLT5pX2NsdXN0ZXJzKSA9PQogCSAgICBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMob3NiLT5zYiwgbmV3X2lfc2l6ZSkpIHsKIAkJbWxvZygwLCAiZmUtPmlfY2x1c3RlcnMgPSAldSwgc28gd2UgZG8gYSBzaW1wbGUgdHJ1bmNhdGVcbiIsCkBAIC0yNzIsMTQgKzI4Myw2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkvKiBUaGlzIGZvcmNlcyBvdGhlciBub2RlcyB0byBzeW5jIGFuZCBkcm9wIHRoZWlyIHBhZ2VzICovCi0Jc3RhdHVzID0gb2NmczJfZGF0YV9sb2NrKGlub2RlLCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0Jb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOwotCiAJLyogYWxyaWdodCwgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBkbyBhIGZ1bGwgYmxvd24gYWxsb2Mgc2l6ZQogCSAqIGNoYW5nZS4gT3JwaGFuIHRoZSBpbm9kZSBzbyB0aGF0IHJlY292ZXJ5IGNhbiBjb21wbGV0ZSB0aGUKIAkgKiB0cnVuY2F0ZSBpZiBuZWNlc3NhcnkuIFRoaXMgZG9lcyB0aGUgdGFzayBvZiBtYXJraW5nCkBAIC02MTAsNyArNjEzLDggQEAKIAogLyogU29tZSBwYXJ0cyBvZiB0aGlzIHRha2VuIGZyb20gZ2VuZXJpY19jb250X2V4cGFuZCwgd2hpY2ggdHVybmVkIG91dAogICogdG8gYmUgdG9vIGZyYWdpbGUgdG8gZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQgd2l0aG91dCB1cyBoYXZpbmcgdG8KLSAqIHdvcnJ5IGFib3V0IHJlY3Vyc2l2ZSBsb2NraW5nIGluIC0+Y29tbWl0X3dyaXRlKCkuICovCisgKiB3b3JyeSBhYm91dCByZWN1cnNpdmUgbG9ja2luZyBpbiAtPnByZXBhcmVfd3JpdGUoKSBhbmQKKyAqIC0+Y29tbWl0X3dyaXRlKCkuICovCiBzdGF0aWMgaW50IG9jZnMyX3dyaXRlX3plcm9fcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSB1NjQgc2l6ZSkKIHsKQEAgLTYzOCw3ICs2NDIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9wcmVwYXJlX3dyaXRlKE5VTEwsIHBhZ2UsIG9mZnNldCwgb2Zmc2V0KTsKKwlyZXQgPSBvY2ZzMl9wcmVwYXJlX3dyaXRlX25vbG9jayhpbm9kZSwgcGFnZSwgb2Zmc2V0LCBvZmZzZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNjkyLDEzICs2OTYsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiAKKyAqIEEgdGFpbF90b19za2lwIHZhbHVlID4gMCBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBiZWluZyBjYWxsZWQgZnJvbQorICogb2NmczJfZmlsZV9haW9fd3JpdGUoKS4gVGhpcyBoYXMgdGhlIGZvbGxvd2luZyBpbXBsaWNhdGlvbnM6CisgKgorICogLSB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBpX3NpemUKKyAqIC0gZGlfYmggd2lsbCBiZSBOVUxMLCB3aGljaCBpcyBmaW5lIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgaW4gdGhlCisgKiAgIGNhc2Ugd2hlcmUgd2Ugd2FudCB0byB1cGRhdGUgaV9zaXplLgorICogLSBvY2ZzMl96ZXJvX2V4dGVuZCgpIHdpbGwgdGhlbiBvbmx5IGJlIGZpbGxpbmcgdGhlIGhvbGUgY3JlYXRlZAorICogICBiZXR3ZWVuIGlfc2l6ZSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSB3cml0ZS4KKyAqLwogc3RhdGljIGludCBvY2ZzMl9leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkJICAgICB1NjQgbmV3X2lfc2l6ZSkKKwkJCSAgICAgdTY0IG5ld19pX3NpemUsCisJCQkgICAgIHNpemVfdCB0YWlsX3RvX3NraXApCiB7CiAJaW50IHJldCA9IDA7CiAJdTMyIGNsdXN0ZXJzX3RvX2FkZDsKIAorCUJVR19PTighdGFpbF90b19za2lwICYmICFkaV9iaCk7CisKIAkvKiBzZXRhdHRyIHNvbWV0aW1lcyBjYWxscyB1cyBsaWtlIHRoaXMuICovCiAJaWYgKG5ld19pX3NpemUgPT0gMCkKIAkJZ290byBvdXQ7CkBAIC03MTEsMjcgKzcyOCw0NCBAQAogCQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnM7CiAKIAlpZiAoY2x1c3RlcnNfdG9fYWRkKSB7CisJCS8qIAorCQkgKiBwcm90ZWN0IHRoZSBwYWdlcyB0aGF0IG9jZnMyX3plcm9fZXh0ZW5kIGlzIGdvaW5nIHRvCisJCSAqIGJlIHB1bGxpbmcgaW50byB0aGUgcGFnZSBjYWNoZS4uIHdlIGRvIHRoaXMgYmVmb3JlIHRoZQorCQkgKiBtZXRhZGF0YSBleHRlbmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaW50byB0aGUgc2l0dWF0aW9uCisJCSAqIHdoZXJlIHdlJ3ZlIGV4dGVuZGVkIHRoZSBtZXRhZGF0YSBidXQgY2FuJ3QgZ2V0IHRoZSBkYXRhCisJCSAqIGxvY2sgdG8gemVyby4KKwkJICovCisJCXJldCA9IG9jZnMyX2RhdGFfbG9jayhpbm9kZSwgMSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXJldCA9IG9jZnMyX2V4dGVuZF9hbGxvY2F0aW9uKGlub2RlLCBjbHVzdGVyc190b19hZGQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZChpbm9kZSwgbmV3X2lfc2l6ZSk7CisJCXJldCA9IG9jZnMyX3plcm9fZXh0ZW5kKGlub2RlLCAodTY0KW5ld19pX3NpemUgLSB0YWlsX3RvX3NraXApOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KLQl9IAotCi0JLyogTm8gYWxsb2NhdGlvbiByZXF1aXJlZCwgd2UganVzdCB1c2UgdGhpcyBoZWxwZXIgdG8KLQkgKiBkbyBhIHRyaXZpYWwgdXBkYXRlIG9mIGlfc2l6ZS4gKi8KLQlyZXQgPSBvY2ZzMl9zaW1wbGVfc2l6ZV91cGRhdGUoaW5vZGUsIGRpX2JoLCBuZXdfaV9zaXplKTsKLQlpZiAocmV0IDwgMCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwogCX0KIAorCWlmICghdGFpbF90b19za2lwKSB7CisJCS8qIFdlJ3JlIGJlaW5nIGNhbGxlZCBmcm9tIG9jZnMyX3NldGF0dHIoKSB3aGljaCB3YW50cworCQkgKiB1cyB0byB1cGRhdGUgaV9zaXplICovCisJCXJldCA9IG9jZnMyX3NpbXBsZV9zaXplX3VwZGF0ZShpbm9kZSwgZGlfYmgsIG5ld19pX3NpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dF91bmxvY2s6CisJaWYgKGNsdXN0ZXJzX3RvX2FkZCkgLyogdGhpcyBpcyB0aGUgb25seSBjYXNlIGluIHdoaWNoIHdlIGxvY2sgKi8KKwkJb2NmczJfZGF0YV91bmxvY2soaW5vZGUsIDEpOworCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc5MCw3ICs4MjQsNyBAQAogCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gYXR0ci0+aWFfc2l6ZSkKIAkJCXN0YXR1cyA9IG9jZnMyX3RydW5jYXRlX2ZpbGUoaW5vZGUsIGJoLCBhdHRyLT5pYV9zaXplKTsKIAkJZWxzZQotCQkJc3RhdHVzID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIGJoLCBhdHRyLT5pYV9zaXplKTsKKwkJCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF9maWxlKGlub2RlLCBiaCwgYXR0ci0+aWFfc2l6ZSwgMCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTA0NiwyMSArMTA4MCwxMiBAQAogCQlpZiAoIWNsdXN0ZXJzKQogCQkJYnJlYWs7CiAKLQkJcmV0ID0gb2NmczJfZXh0ZW5kX2FsbG9jYXRpb24oaW5vZGUsIGNsdXN0ZXJzKTsKKwkJcmV0ID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIE5VTEwsIG5ld3NpemUsIGNvdW50KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWlmIChyZXQgIT0gLUVOT1NQQykKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQotCi0JCS8qIEZpbGwgYW55IGhvbGVzIHdoaWNoIHdvdWxkJ3ZlIGJlZW4gY3JlYXRlZCBieSB0aGlzCi0JCSAqIHdyaXRlLiBJZiB3ZSdyZSBPX0FQUEVORCwgdGhpcyB3aWxsIHdpbmQgdXAKLQkJICogKGNvcnJlY3RseSkgYmVpbmcgYSBub29wLiAqLwotCQlyZXQgPSBvY2ZzMl96ZXJvX2V4dGVuZChpbm9kZSwgKHU2NCkgbmV3c2l6ZSAtIGNvdW50KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9CiAJCWJyZWFrOwogCX0KIApAQCAtMTE0Myw2ICsxMTY4LDIyIEBACiAJCW9jZnMyX2lvY2Jfc2V0X3J3X2xvY2tlZChpb2NiKTsKIAl9CiAKKwkvKgorCSAqIFdlJ3JlIGZpbmUgbGV0dGluZyBmb2xrcyByYWNlIHRydW5jYXRlcyBhbmQgZXh0ZW5kaW5nCisJICogd3JpdGVzIHdpdGggcmVhZCBhY3Jvc3MgdGhlIGNsdXN0ZXIsIGp1c3QgbGlrZSB0aGV5IGNhbgorCSAqIGxvY2FsbHkuIEhlbmNlIG5vIHJ3X2xvY2sgZHVyaW5nIHJlYWQuCisJICogCisJICogVGFrZSBhbmQgZHJvcCB0aGUgbWV0YSBkYXRhIGxvY2sgdG8gdXBkYXRlIGlub2RlIGZpZWxkcworCSAqIGxpa2UgaV9zaXplLiBUaGlzIGFsbG93cyB0aGUgY2hlY2tzIGRvd24gYmVsb3cKKwkgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSBhIGNoYW5jZSBvZiBhY3R1YWxseSB3b3JraW5nLiAKKwkgKi8KKwlyZXQgPSBvY2ZzMl9tZXRhX2xvY2soaW5vZGUsIE5VTEwsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBiYWlsOworCX0KKwlvY2ZzMl9tZXRhX3VubG9jayhpbm9kZSwgMCk7CisKIAlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgYnVmLCBjb3VudCwgaW9jYi0+a2lfcG9zKTsKIAlpZiAocmV0ID09IC1FSU5WQUwpCiAJCW1sb2coTUxfRVJST1IsICJnZW5lcmljX2ZpbGVfYWlvX3JlYWQgcmV0dXJuZWQgLUVJTlZBTFxuIik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggNmE2MTBhZS4uZWViYzNjZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpyZXR2YWwgPSBOVUxMOwogCi0JcmV0dmFsID0ga2NhbGxvYygxLCBzaXplb2YoKnJldHZhbCksIEdGUF9LRVJORUwpOworCXJldHZhbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXR2YWwpLCBHRlBfTk9GUyk7CiAJaWYgKCFyZXR2YWwpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGpvdXJuYWwgIgogCQkgICAgICJoYW5kbGUhXG4iKTsKQEAgLTg3MCw5ICs4NzAsMTEgQEAKIAkJaWYgKHBfYmxvY2tzID4gQ09OQ1VSUkVOVF9KT1VSTkFMX0ZJTEwpCiAJCQlwX2Jsb2NrcyA9IENPTkNVUlJFTlRfSk9VUk5BTF9GSUxMOwogCisJCS8qIFdlIGFyZSByZWFkaW5nIGpvdXJuYWwgZGF0YSB3aGljaCBzaG91bGQgbm90CisJCSAqIGJlIHB1dCBpbiB0aGUgdXB0b2RhdGUgY2FjaGUgKi8KIAkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAogCQkJCQkgICBwX2Jsa25vLCBwX2Jsb2NrcywgYmhzLCAwLAotCQkJCQkgICBpbm9kZSk7CisJCQkJCSAgIE5VTEwpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtOTgyLDcgKzk4NCw3IEBACiB7CiAJc3RydWN0IG9jZnMyX2xhX3JlY292ZXJ5X2l0ZW0gKml0ZW07CiAKLQlpdGVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2xhX3JlY292ZXJ5X2l0ZW0pLCBHRlBfS0VSTkVMKTsKKwlpdGVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2xhX3JlY292ZXJ5X2l0ZW0pLCBHRlBfTk9GUyk7CiAJaWYgKCFpdGVtKSB7CiAJCS8qIFRob3VnaCB3ZSB3aXNoIHRvIGF2b2lkIGl0LCB3ZSBhcmUgaW4gZmFjdCBzYWZlIGluCiAJCSAqIHNraXBwaW5nIGxvY2FsIGFsbG9jIGNsZWFudXAgYXMgZnNjay5vY2ZzMiBpcyBtb3JlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi91cHRvZGF0ZS5jIGIvZnMvb2NmczIvdXB0b2RhdGUuYwppbmRleCAwNGE2ODRkLi5iOGEwMGE3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi91cHRvZGF0ZS5jCisrKyBiL2ZzL29jZnMyL3VwdG9kYXRlLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBleHBhbmRfdHJlZSk7CiAKLQluZXcgPSBrbWVtX2NhY2hlX2FsbG9jKG9jZnMyX3VwdG9kYXRlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhvY2ZzMl91cHRvZGF0ZV9jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAoIW5ldykgewogCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCQlyZXR1cm47CkBAIC0zNDksNyArMzQ5LDcgQEAKIAkJICogaGFzIG5vIHdheSBvZiB0cmFja2luZyB0aGF0LiAqLwogCQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykgewogCQkJdHJlZVtpXSA9IGttZW1fY2FjaGVfYWxsb2Mob2NmczJfdXB0b2RhdGVfY2FjaGVwLAotCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICBHRlBfTk9GUyk7CiAJCQlpZiAoIXRyZWVbaV0pIHsKIAkJCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCQkJCWdvdG8gb3V0X2ZyZWU7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi92b3RlLmMgYi9mcy9vY2ZzMi92b3RlLmMKaW5kZXggNTMwNDlhMi4uZWU0Mjc2NSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdm90ZS5jCisrKyBiL2ZzL29jZnMyL3ZvdGUuYwpAQCAtNTg2LDcgKzU4Niw3IEBACiB7CiAJc3RydWN0IG9jZnMyX25ldF93YWl0X2N0eHQgKnc7CiAKLQl3ID0ga2NhbGxvYygxLCBzaXplb2YoKncpLCBHRlBfS0VSTkVMKTsKKwl3ID0ga2NhbGxvYygxLCBzaXplb2YoKncpLCBHRlBfTk9GUyk7CiAJaWYgKCF3KSB7CiAJCW1sb2dfZXJybm8oLUVOT01FTSk7CiAJCWdvdG8gYmFpbDsKQEAgLTc0OSw3ICs3NDksNyBAQAogCiAJQlVHX09OKCFvY2ZzMl9pc192YWxpZF92b3RlX3JlcXVlc3QodHlwZSkpOwogCi0JcmVxdWVzdCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJcmVxdWVzdCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX05PRlMpOwogCWlmICghcmVxdWVzdCkgewogCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCX0gZWxzZSB7CkBAIC0xMTI5LDcgKzExMjksNyBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfdm90ZV93b3JrICp3b3JrOwogCi0Jd29yayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl92b3RlX3dvcmspLCBHRlBfS0VSTkVMKTsKKwl3b3JrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX3ZvdGVfd29yayksIEdGUF9OT0ZTKTsKIAlpZiAoIXdvcmspIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IGMzMmM4OWQuLjMxN2I3YzcgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTMzMSw3ICszMzEsMTAgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19mdHJ1bmNhdGUodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKLQlyZXR1cm4gZG9fc3lzX2Z0cnVuY2F0ZShmZCwgbGVuZ3RoLCAxKTsKKwlsb25nIHJldCA9IGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBMRlMgdmVyc2lvbnMgb2YgdHJ1bmNhdGUgYXJlIG9ubHkgbmVlZGVkIG9uIDMyIGJpdCBtYWNoaW5lcyAqLwpAQCAtMzQzLDcgKzM0NiwxMCBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2Z0cnVuY2F0ZTY0KHVuc2lnbmVkIGludCBmZCwgbG9mZl90IGxlbmd0aCkKIHsKLQlyZXR1cm4gZG9fc3lzX2Z0cnVuY2F0ZShmZCwgbGVuZ3RoLCAwKTsKKwlsb25nIHJldCA9IGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMCk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKQEAgLTEwOTMsMjIgKzEwOTksMzEgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19vcGVuKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKIHsKKwlsb25nIHJldDsKKwogCWlmIChmb3JjZV9vX2xhcmdlZmlsZSgpKQogCQlmbGFncyB8PSBPX0xBUkdFRklMRTsKIAotCXJldHVybiBkb19zeXNfb3BlbihBVF9GRENXRCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwlyZXQgPSBkb19zeXNfb3BlbihBVF9GRENXRCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNfb3Blbik7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfb3BlbmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IGZsYWdzLAogCQkJICAgaW50IG1vZGUpCiB7CisJbG9uZyByZXQ7CisKIAlpZiAoZm9yY2Vfb19sYXJnZWZpbGUoKSkKIAkJZmxhZ3MgfD0gT19MQVJHRUZJTEU7CiAKLQlyZXR1cm4gZG9fc3lzX29wZW4oZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOworCXJldCA9IGRvX3N5c19vcGVuKGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzeXNfb3BlbmF0KTsKIAogI2lmbmRlZiBfX2FscGhhX18KIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGFmMGNiNGIuLjdlZjFmMDkgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTMzMSw3ICszMzEsOSBAQAogCWRldmZzX3JlbW92ZSgiJXMvcGFydCVkIiwgZGlzay0+ZGV2ZnNfbmFtZSwgcGFydCk7CiAJaWYgKHAtPmhvbGRlcl9kaXIpCiAJCWtvYmplY3RfdW5yZWdpc3RlcihwLT5ob2xkZXJfZGlyKTsKLQlrb2JqZWN0X3VucmVnaXN0ZXIoJnAtPmtvYmopOworCWtvYmplY3RfdWV2ZW50KCZwLT5rb2JqLCBLT0JKX1JFTU9WRSk7CisJa29iamVjdF9kZWwoJnAtPmtvYmopOworCWtvYmplY3RfcHV0KCZwLT5rb2JqKTsKIH0KIAogdm9pZCBhZGRfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydCwgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IGxlbikKQEAgLTM1Nyw3ICszNTksMTAgQEAKIAkJc25wcmludGYocC0+a29iai5uYW1lLEtPQkpfTkFNRV9MRU4sIiVzJWQiLGRpc2stPmtvYmoubmFtZSxwYXJ0KTsKIAlwLT5rb2JqLnBhcmVudCA9ICZkaXNrLT5rb2JqOwogCXAtPmtvYmoua3R5cGUgPSAma3R5cGVfcGFydDsKLQlrb2JqZWN0X3JlZ2lzdGVyKCZwLT5rb2JqKTsKKwlrb2JqZWN0X2luaXQoJnAtPmtvYmopOworCWtvYmplY3RfYWRkKCZwLT5rb2JqKTsKKwlpZiAoIWRpc2stPnBhcnRfdWV2ZW50X3N1cHByZXNzKQorCQlrb2JqZWN0X3VldmVudCgmcC0+a29iaiwgS09CSl9BREQpOwogCXBhcnRpdGlvbl9zeXNmc19hZGRfc3ViZGlyKHApOwogCWRpc2stPnBhcnRbcGFydC0xXSA9IHA7CiB9CkBAIC0zNjcsNiArMzcyLDcgQEAKIAljaGFyICpuYW1lOwogCXN0YXRpYyBjaGFyICpibG9ja19zdHIgPSAiYmxvY2s6IjsKIAlpbnQgc2l6ZTsKKwljaGFyICpzOwogCiAJc2l6ZSA9IHN0cmxlbihibG9ja19zdHIpICsgc3RybGVuKGRpc2stPmRpc2tfbmFtZSkgKyAxOwogCW5hbWUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtMzc0LDYgKzM4MCwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAlzdHJjcHkobmFtZSwgYmxvY2tfc3RyKTsKIAlzdHJjYXQobmFtZSwgZGlzay0+ZGlza19uYW1lKTsKKwkvKiBld3d3Li4uIHNvbWUgb2YgdGhlc2UgYnVnZ2VycyBoYXZlIC8gaW4gbmFtZS4uLiAqLworCXMgPSBzdHJjaHIobmFtZSwgJy8nKTsKKwlpZiAocykKKwkJKnMgPSAnISc7CiAJcmV0dXJuIG5hbWU7CiB9CiAKQEAgLTM5NSw2ICs0MDUsOCBAQAogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJY2hhciAqczsKKwlpbnQgaTsKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwOwogCWludCBlcnI7CiAKIAlzdHJsY3B5KGRpc2stPmtvYmoubmFtZSxkaXNrLT5kaXNrX25hbWUsS09CSl9OQU1FX0xFTik7CkBAIC00MDYsMTMgKzQxOCwxMiBAQAogCQlyZXR1cm47CiAJZGlza19zeXNmc19zeW1saW5rcyhkaXNrKTsKICAJZGlza19zeXNmc19hZGRfc3ViZGlycyhkaXNrKTsKLQlrb2JqZWN0X3VldmVudCgmZGlzay0+a29iaiwgS09CSl9BREQpOwogCiAJLyogTm8gbWlub3JzIHRvIHVzZSBmb3IgcGFydGl0aW9ucyAqLwogCWlmIChkaXNrLT5taW5vcnMgPT0gMSkgewogCQlpZiAoZGlzay0+ZGV2ZnNfbmFtZVswXSAhPSAnXDAnKQogCQkJZGV2ZnNfYWRkX2Rpc2soZGlzayk7Ci0JCXJldHVybjsKKwkJZ290byBleGl0OwogCX0KIAogCS8qIGFsd2F5cyBhZGQgaGFuZGxlIGZvciB0aGUgd2hvbGUgZGlzayAqLwpAQCAtNDIwLDE2ICs0MzEsMzIgQEAKIAogCS8qIE5vIHN1Y2ggZGV2aWNlIChlLmcuLCBtZWRpYSB3ZXJlIGp1c3QgcmVtb3ZlZCkgKi8KIAlpZiAoIWdldF9jYXBhY2l0eShkaXNrKSkKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAKIAliZGV2ID0gYmRnZXRfZGlzayhkaXNrLCAwKTsKIAlpZiAoIWJkZXYpCi0JCXJldHVybjsKKwkJZ290byBleGl0OwogCisJLyogc2NhbiBwYXJ0aXRpb24gdGFibGUsIGJ1dCBzdXBwcmVzcyB1ZXZlbnRzICovCiAJYmRldi0+YmRfaW52YWxpZGF0ZWQgPSAxOwotCWlmIChibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQsIDApIDwgMCkKLQkJcmV0dXJuOworCWRpc2stPnBhcnRfdWV2ZW50X3N1cHByZXNzID0gMTsKKwllcnIgPSBibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQsIDApOworCWRpc2stPnBhcnRfdWV2ZW50X3N1cHByZXNzID0gMDsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBleGl0OwogCWJsa2Rldl9wdXQoYmRldik7CisKK2V4aXQ6CisJLyogYW5ub3VuY2UgZGlzayBhZnRlciBwb3NzaWJsZSBwYXJ0aXRpb25zIGFyZSBhbHJlYWR5IGNyZWF0ZWQgKi8KKwlrb2JqZWN0X3VldmVudCgmZGlzay0+a29iaiwgS09CSl9BREQpOworCisJLyogYW5ub3VuY2UgcG9zc2libGUgcGFydGl0aW9ucyAqLworCWZvciAoaSA9IDE7IGkgPCBkaXNrLT5taW5vcnM7IGkrKykgeworCQlwID0gZGlzay0+cGFydFtpLTFdOworCQlpZiAoIXAgfHwgIXAtPm5yX3NlY3RzKQorCQkJY29udGludWU7CisJCWtvYmplY3RfdWV2ZW50KCZwLT5rb2JqLCBLT0JKX0FERCk7CisJfQogfQogCiBpbnQgcmVzY2FuX3BhcnRpdGlvbnMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCkBAIC01MDYsNiArNTMzLDcgQEAKIAogCWRldmZzX3JlbW92ZV9kaXNrKGRpc2spOwogCisJa29iamVjdF91ZXZlbnQoJmRpc2stPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlpZiAoZGlzay0+aG9sZGVyX2RpcikKIAkJa29iamVjdF91bnJlZ2lzdGVyKGRpc2stPmhvbGRlcl9kaXIpOwogCWlmIChkaXNrLT5zbGF2ZV9kaXIpCkBAIC01MTgsNyArNTQ2LDcgQEAKIAkJCWtmcmVlKGRpc2tfbmFtZSk7CiAJCX0KIAkJcHV0X2RldmljZShkaXNrLT5kcml2ZXJmc19kZXYpOworCQlkaXNrLT5kcml2ZXJmc19kZXYgPSBOVUxMOwogCX0KLQlrb2JqZWN0X3VldmVudCgmZGlzay0+a29iaiwgS09CSl9SRU1PVkUpOwogCWtvYmplY3RfZGVsKCZkaXNrLT5rb2JqKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAxMDlhMTAyLi41YWNkODk1IDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC0zNiw3ICszNiw3IEBACiAgKi8KIAogLyogRHJvcCB0aGUgaW5vZGUgc2VtYXBob3JlIGFuZCB3YWl0IGZvciBhIHBpcGUgZXZlbnQsIGF0b21pY2FsbHkgKi8KLXZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlub2RlKQordm9pZCBwaXBlX3dhaXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIApAQCAtNDQsMTUgKzQ0LDE5IEBACiAJICogUGlwZXMgYXJlIHN5c3RlbS1sb2NhbCByZXNvdXJjZXMsIHNvIHNsZWVwaW5nIG9uIHRoZW0KIAkgKiBpcyBjb25zaWRlcmVkIGEgbm9uaW50ZXJhY3RpdmUgd2FpdDoKIAkgKi8KLQlwcmVwYXJlX3RvX3dhaXQoUElQRV9XQUlUKCppbm9kZSksICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEV8VEFTS19OT05JTlRFUkFDVElWRSk7Ci0JbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7CisJcHJlcGFyZV90b193YWl0KCZwaXBlLT53YWl0LCAmd2FpdCwKKwkJCVRBU0tfSU5URVJSVVBUSUJMRSB8IFRBU0tfTk9OSU5URVJBQ1RJVkUpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAJc2NoZWR1bGUoKTsKLQlmaW5pc2hfd2FpdChQSVBFX1dBSVQoKmlub2RlKSwgJndhaXQpOwotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwlmaW5pc2hfd2FpdCgmcGlwZS0+d2FpdCwgJndhaXQpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfbG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50Ci1waXBlX2lvdl9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbGVuKQorcGlwZV9pb3ZfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCWludCBhdG9taWMpCiB7CiAJdW5zaWduZWQgbG9uZyBjb3B5OwogCkBAIC02MSw4ICs2NSwxMyBAQAogCQkJaW92Kys7CiAJCWNvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIGlvdi0+aW92X2xlbik7CiAKLQkJaWYgKGNvcHlfZnJvbV91c2VyKHRvLCBpb3YtPmlvdl9iYXNlLCBjb3B5KSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoYXRvbWljKSB7CisJCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh0bywgaW92LT5pb3ZfYmFzZSwgY29weSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodG8sIGlvdi0+aW92X2Jhc2UsIGNvcHkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9CiAJCXRvICs9IGNvcHk7CiAJCWxlbiAtPSBjb3B5OwogCQlpb3YtPmlvdl9iYXNlICs9IGNvcHk7CkBAIC03Miw3ICs4MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXBpcGVfaW92X2NvcHlfdG9fdXNlcihzdHJ1Y3QgaW92ZWMgKmlvdiwgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBsZW4pCitwaXBlX2lvdl9jb3B5X3RvX3VzZXIoc3RydWN0IGlvdmVjICppb3YsIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkgICAgICBpbnQgYXRvbWljKQogewogCXVuc2lnbmVkIGxvbmcgY29weTsKIApAQCAtODEsOCArOTEsMTMgQEAKIAkJCWlvdisrOwogCQljb3B5ID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuLCBpb3YtPmlvdl9sZW4pOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoaW92LT5pb3ZfYmFzZSwgZnJvbSwgY29weSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGF0b21pYykgeworCQkJaWYgKF9fY29weV90b191c2VyX2luYXRvbWljKGlvdi0+aW92X2Jhc2UsIGZyb20sIGNvcHkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJaWYgKGNvcHlfdG9fdXNlcihpb3YtPmlvdl9iYXNlLCBmcm9tLCBjb3B5KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCQlmcm9tICs9IGNvcHk7CiAJCWxlbiAtPSBjb3B5OwogCQlpb3YtPmlvdl9iYXNlICs9IGNvcHk7CkBAIC05MSw0OSArMTA2LDExNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCisvKgorICogQXR0ZW1wdCB0byBwcmUtZmF1bHQgaW4gdGhlIHVzZXIgbWVtb3J5LCBzbyB3ZSBjYW4gdXNlIGF0b21pYyBjb3BpZXMuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbm90IGZhdWx0ZWQgaW4uCisgKi8KK3N0YXRpYyBpbnQgaW92X2ZhdWx0X2luX3BhZ2VzX3dyaXRlKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl3aGlsZSAoIWlvdi0+aW92X2xlbikKKwkJaW92Kys7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQl1bnNpZ25lZCBsb25nIHRoaXNfbGVuOworCisJCXRoaXNfbGVuID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuLCBpb3YtPmlvdl9sZW4pOworCQlpZiAoZmF1bHRfaW5fcGFnZXNfd3JpdGVhYmxlKGlvdi0+aW92X2Jhc2UsIHRoaXNfbGVuKSkKKwkJCWJyZWFrOworCisJCWxlbiAtPSB0aGlzX2xlbjsKKwkJaW92Kys7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFByZS1mYXVsdCBpbiB0aGUgdXNlciBtZW1vcnksIHNvIHdlIGNhbiB1c2UgYXRvbWljIGNvcGllcy4KKyAqLworc3RhdGljIHZvaWQgaW92X2ZhdWx0X2luX3BhZ2VzX3JlYWQoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXdoaWxlICghaW92LT5pb3ZfbGVuKQorCQlpb3YrKzsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgdGhpc19sZW47CisKKwkJdGhpc19sZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIGlvdi0+aW92X2xlbik7CisJCWZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKGlvdi0+aW92X2Jhc2UsIHRoaXNfbGVuKTsKKwkJbGVuIC09IHRoaXNfbGVuOworCQlpb3YrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFub25fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCSAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidWYtPnBhZ2U7CiAKIAkvKgogCSAqIElmIG5vYm9keSBlbHNlIHVzZXMgdGhpcyBwYWdlLCBhbmQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEKIAkgKiB0ZW1wb3JhcnkgcGFnZSwgbGV0J3Mga2VlcCB0cmFjayBvZiBpdCBhcyBhIG9uZS1kZWVwCi0JICogYWxsb2NhdGlvbiBjYWNoZQorCSAqIGFsbG9jYXRpb24gY2FjaGUuIChPdGhlcndpc2UganVzdCByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gaXQpCiAJICovCi0JaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSAmJiAhaW5mby0+dG1wX3BhZ2UpIHsKLQkJaW5mby0+dG1wX3BhZ2UgPSBwYWdlOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBPdGhlcndpc2UganVzdCByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gaXQKLQkgKi8KLQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSAmJiAhcGlwZS0+dG1wX3BhZ2UpCisJCXBpcGUtPnRtcF9wYWdlID0gcGFnZTsKKwllbHNlCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgKmFub25fcGlwZV9idWZfbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3ZvaWQgKmdlbmVyaWNfcGlwZV9idWZfbWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiwgaW50IGF0b21pYykKIHsKKwlpZiAoYXRvbWljKSB7CisJCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19BVE9NSUM7CisJCXJldHVybiBrbWFwX2F0b21pYyhidWYtPnBhZ2UsIEtNX1VTRVIwKTsKKwl9CisKIAlyZXR1cm4ga21hcChidWYtPnBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQordm9pZCBnZW5lcmljX3BpcGVfYnVmX3VubWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsIHZvaWQgKm1hcF9kYXRhKQogewotCWt1bm1hcChidWYtPnBhZ2UpOworCWlmIChidWYtPmZsYWdzICYgUElQRV9CVUZfRkxBR19BVE9NSUMpIHsKKwkJYnVmLT5mbGFncyAmPSB+UElQRV9CVUZfRkxBR19BVE9NSUM7CisJCWt1bm1hcF9hdG9taWMobWFwX2RhdGEsIEtNX1VTRVIwKTsKKwl9IGVsc2UKKwkJa3VubWFwKGJ1Zi0+cGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgYW5vbl9waXBlX2J1Zl9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQoraW50IGdlbmVyaWNfcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCSAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewotCWJ1Zi0+c3RvbGVuID0gMTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKKworCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKKwkJbG9ja19wYWdlKHBhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBnZW5lcmljX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3sKKwlwYWdlX2NhY2hlX2dldChidWYtPnBhZ2UpOworfQorCitpbnQgZ2VuZXJpY19waXBlX2J1Zl9waW4oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBhbm9uX3BpcGVfYnVmX29wcyA9IHsKIAkuY2FuX21lcmdlID0gMSwKLQkubWFwID0gYW5vbl9waXBlX2J1Zl9tYXAsCi0JLnVubWFwID0gYW5vbl9waXBlX2J1Zl91bm1hcCwKKwkubWFwID0gZ2VuZXJpY19waXBlX2J1Zl9tYXAsCisJLnVubWFwID0gZ2VuZXJpY19waXBlX2J1Zl91bm1hcCwKKwkucGluID0gZ2VuZXJpY19waXBlX2J1Zl9waW4sCiAJLnJlbGVhc2UgPSBhbm9uX3BpcGVfYnVmX3JlbGVhc2UsCi0JLnN0ZWFsID0gYW5vbl9waXBlX2J1Zl9zdGVhbCwKKwkuc3RlYWwgPSBnZW5lcmljX3BpcGVfYnVmX3N0ZWFsLAorCS5nZXQgPSBnZW5lcmljX3BpcGVfYnVmX2dldCwKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xNDEsNyArMjIyLDcgQEAKIAkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCWludCBkb193YWtldXA7CiAJc3NpemVfdCByZXQ7CiAJc3RydWN0IGlvdmVjICppb3YgPSAoc3RydWN0IGlvdmVjICopX2lvdjsKQEAgLTE1NCwzMSArMjM1LDQzIEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWluZm8gPSBpbm9kZS0+aV9waXBlOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlmb3IgKDs7KSB7Ci0JCWludCBidWZzID0gaW5mby0+bnJidWZzOworCQlpbnQgYnVmcyA9IHBpcGUtPm5yYnVmczsKIAkJaWYgKGJ1ZnMpIHsKLQkJCWludCBjdXJidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBjdXJidWY7CisJCQlpbnQgY3VyYnVmID0gcGlwZS0+Y3VyYnVmOworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgY3VyYnVmOwogCQkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCQkJdm9pZCAqYWRkcjsKIAkJCXNpemVfdCBjaGFycyA9IGJ1Zi0+bGVuOwotCQkJaW50IGVycm9yOworCQkJaW50IGVycm9yLCBhdG9taWM7CiAKIAkJCWlmIChjaGFycyA+IHRvdGFsX2xlbikKIAkJCQljaGFycyA9IHRvdGFsX2xlbjsKIAotCQkJYWRkciA9IG9wcy0+bWFwKGZpbHAsIGluZm8sIGJ1Zik7Ci0JCQlpZiAoSVNfRVJSKGFkZHIpKSB7CisJCQllcnJvciA9IG9wcy0+cGluKHBpcGUsIGJ1Zik7CisJCQlpZiAoZXJyb3IpIHsKIAkJCQlpZiAoIXJldCkKLQkJCQkJcmV0ID0gUFRSX0VSUihhZGRyKTsKKwkJCQkJZXJyb3IgPSByZXQ7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnJvciA9IHBpcGVfaW92X2NvcHlfdG9fdXNlcihpb3YsIGFkZHIgKyBidWYtPm9mZnNldCwgY2hhcnMpOwotCQkJb3BzLT51bm1hcChpbmZvLCBidWYpOworCisJCQlhdG9taWMgPSAhaW92X2ZhdWx0X2luX3BhZ2VzX3dyaXRlKGlvdiwgY2hhcnMpOworcmVkbzoKKwkJCWFkZHIgPSBvcHMtPm1hcChwaXBlLCBidWYsIGF0b21pYyk7CisJCQllcnJvciA9IHBpcGVfaW92X2NvcHlfdG9fdXNlcihpb3YsIGFkZHIgKyBidWYtPm9mZnNldCwgY2hhcnMsIGF0b21pYyk7CisJCQlvcHMtPnVubWFwKHBpcGUsIGJ1ZiwgYWRkcik7CiAJCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQkJaWYgKCFyZXQpIHJldCA9IC1FRkFVTFQ7CisJCQkJLyoKKwkJCQkgKiBKdXN0IHJldHJ5IHdpdGggdGhlIHNsb3cgcGF0aCBpZiB3ZSBmYWlsZWQuCisJCQkJICovCisJCQkJaWYgKGF0b21pYykgeworCQkJCQlhdG9taWMgPSAwOworCQkJCQlnb3RvIHJlZG87CisJCQkJfQorCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSBlcnJvcjsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJldCArPSBjaGFyczsKQEAgLTE4NiwxMCArMjc5LDEwIEBACiAJCQlidWYtPmxlbiAtPSBjaGFyczsKIAkJCWlmICghYnVmLT5sZW4pIHsKIAkJCQlidWYtPm9wcyA9IE5VTEw7Ci0JCQkJb3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7CisJCQkJb3BzLT5yZWxlYXNlKHBpcGUsIGJ1Zik7CiAJCQkJY3VyYnVmID0gKGN1cmJ1ZiArIDEpICYgKFBJUEVfQlVGRkVSUy0xKTsKLQkJCQlpbmZvLT5jdXJidWYgPSBjdXJidWY7Ci0JCQkJaW5mby0+bnJidWZzID0gLS1idWZzOworCQkJCXBpcGUtPmN1cmJ1ZiA9IGN1cmJ1ZjsKKwkJCQlwaXBlLT5ucmJ1ZnMgPSAtLWJ1ZnM7CiAJCQkJZG9fd2FrZXVwID0gMTsKIAkJCX0KIAkJCXRvdGFsX2xlbiAtPSBjaGFyczsKQEAgLTE5OCw5ICsyOTEsOSBAQAogCQl9CiAJCWlmIChidWZzKQkvKiBNb3JlIHRvIGRvPyAqLwogCQkJY29udGludWU7Ci0JCWlmICghUElQRV9XUklURVJTKCppbm9kZSkpCisJCWlmICghcGlwZS0+d3JpdGVycykKIAkJCWJyZWFrOwotCQlpZiAoIVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSkpIHsKKwkJaWYgKCFwaXBlLT53YWl0aW5nX3dyaXRlcnMpIHsKIAkJCS8qIHN5c2NhbGwgbWVyZ2luZzogVXN1YWxseSB3ZSBtdXN0IG5vdCBzbGVlcAogCQkJICogaWYgT19OT05CTE9DSyBpcyBzZXQsIG9yIGlmIHdlIGdvdCBzb21lIGRhdGEuCiAJCQkgKiBCdXQgaWYgYSB3cml0ZXIgc2xlZXBzIGluIGtlcm5lbCBzcGFjZSwgdGhlbgpAQCAtMjE0LDIwICszMDcsMjIgQEAKIAkJCX0KIAkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWlmICghcmV0KSByZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhQSVBFX1dBSVQoKmlub2RlKSk7Ci0gCQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworIAkJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAkJfQotCQlwaXBlX3dhaXQoaW5vZGUpOworCQlwaXBlX3dhaXQocGlwZSk7CiAJfQotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCS8qIFNpZ25hbCB3cml0ZXJzIGFzeW5jaHJvbm91c2x5IHRoYXQgdGhlcmUgaXMgbW9yZSByb29tLiAgKi8KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCS8qIFNpZ25hbCB3cml0ZXJzIGFzeW5jaHJvbm91c2x5IHRoYXQgdGhlcmUgaXMgbW9yZSByb29tLiAqLwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9PVVQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQogCWlmIChyZXQgPiAwKQogCQlmaWxlX2FjY2Vzc2VkKGZpbHApOwpAQCAtMjM4LDYgKzMzMyw3IEBACiBwaXBlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IGJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OworCiAJcmV0dXJuIHBpcGVfcmVhZHYoZmlscCwgJmlvdiwgMSwgcHBvcyk7CiB9CiAKQEAgLTI0Niw3ICszNDIsNyBAQAogCSAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCXNzaXplX3QgcmV0OwogCWludCBkb193YWtldXA7CiAJc3RydWN0IGlvdmVjICppb3YgPSAoc3RydWN0IGlvdmVjICopX2lvdjsKQEAgLTI2MCwxMCArMzU2LDEwIEBACiAKIAlkb193YWtldXAgPSAwOwogCXJldCA9IDA7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCWluZm8gPSBpbm9kZS0+aV9waXBlOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAotCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpIHsKKwlpZiAoIXBpcGUtPnJlYWRlcnMpIHsKIAkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCXJldCA9IC1FUElQRTsKIAkJZ290byBvdXQ7CkBAIC0yNzEsMjcgKzM2NywzNiBAQAogCiAJLyogV2UgdHJ5IHRvIG1lcmdlIHNtYWxsIHdyaXRlcyAqLwogCWNoYXJzID0gdG90YWxfbGVuICYgKFBBR0VfU0laRS0xKTsgLyogc2l6ZSBvZiB0aGUgbGFzdCBidWZmZXIgKi8KLQlpZiAoaW5mby0+bnJidWZzICYmIGNoYXJzICE9IDApIHsKLQkJaW50IGxhc3RidWYgPSAoaW5mby0+Y3VyYnVmICsgaW5mby0+bnJidWZzIC0gMSkgJiAoUElQRV9CVUZGRVJTLTEpOwotCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBsYXN0YnVmOworCWlmIChwaXBlLT5ucmJ1ZnMgJiYgY2hhcnMgIT0gMCkgeworCQlpbnQgbGFzdGJ1ZiA9IChwaXBlLT5jdXJidWYgKyBwaXBlLT5ucmJ1ZnMgLSAxKSAmCisJCQkJCQkJKFBJUEVfQlVGRkVSUy0xKTsKKwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgbGFzdGJ1ZjsKIAkJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wcyA9IGJ1Zi0+b3BzOwogCQlpbnQgb2Zmc2V0ID0gYnVmLT5vZmZzZXQgKyBidWYtPmxlbjsKLQkJaWYgKG9wcy0+Y2FuX21lcmdlICYmIG9mZnNldCArIGNoYXJzIDw9IFBBR0VfU0laRSkgewotCQkJdm9pZCAqYWRkcjsKLQkJCWludCBlcnJvcjsKIAotCQkJYWRkciA9IG9wcy0+bWFwKGZpbHAsIGluZm8sIGJ1Zik7Ci0JCQlpZiAoSVNfRVJSKGFkZHIpKSB7Ci0JCQkJZXJyb3IgPSBQVFJfRVJSKGFkZHIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihvZmZzZXQgKyBhZGRyLCBpb3YsCi0JCQkJCQkJY2hhcnMpOwotCQkJb3BzLT51bm1hcChpbmZvLCBidWYpOwotCQkJcmV0ID0gZXJyb3I7Ci0JCQlkb193YWtldXAgPSAxOworCQlpZiAob3BzLT5jYW5fbWVyZ2UgJiYgb2Zmc2V0ICsgY2hhcnMgPD0gUEFHRV9TSVpFKSB7CisJCQlpbnQgZXJyb3IsIGF0b21pYyA9IDE7CisJCQl2b2lkICphZGRyOworCisJCQllcnJvciA9IG9wcy0+cGluKHBpcGUsIGJ1Zik7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBvdXQ7CisKKwkJCWlvdl9mYXVsdF9pbl9wYWdlc19yZWFkKGlvdiwgY2hhcnMpOworcmVkbzE6CisJCQlhZGRyID0gb3BzLT5tYXAocGlwZSwgYnVmLCBhdG9taWMpOworCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihvZmZzZXQgKyBhZGRyLCBpb3YsCisJCQkJCQkJY2hhcnMsIGF0b21pYyk7CisJCQlvcHMtPnVubWFwKHBpcGUsIGJ1ZiwgYWRkcik7CisJCQlyZXQgPSBlcnJvcjsKKwkJCWRvX3dha2V1cCA9IDE7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlpZiAoYXRvbWljKSB7CisJCQkJCWF0b21pYyA9IDA7CisJCQkJCWdvdG8gcmVkbzE7CisJCQkJfQorCQkJCWdvdG8gb3V0OworCQkJfQogCQkJYnVmLT5sZW4gKz0gY2hhcnM7CiAJCQl0b3RhbF9sZW4gLT0gY2hhcnM7CiAJCQlyZXQgPSBjaGFyczsKQEAgLTMwMiwxNyArNDA3LDIwIEBACiAKIAlmb3IgKDs7KSB7CiAJCWludCBidWZzOwotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisKKwkJaWYgKCFwaXBlLT5yZWFkZXJzKSB7CiAJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKLQkJCWlmICghcmV0KSByZXQgPSAtRVBJUEU7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVBJUEU7CiAJCQlicmVhazsKIAkJfQotCQlidWZzID0gaW5mby0+bnJidWZzOworCQlidWZzID0gcGlwZS0+bnJidWZzOwogCQlpZiAoYnVmcyA8IFBJUEVfQlVGRkVSUykgewotCQkJaW50IG5ld2J1ZiA9IChpbmZvLT5jdXJidWYgKyBidWZzKSAmIChQSVBFX0JVRkZFUlMtMSk7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBuZXdidWY7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGluZm8tPnRtcF9wYWdlOwotCQkJaW50IGVycm9yOworCQkJaW50IG5ld2J1ZiA9IChwaXBlLT5jdXJidWYgKyBidWZzKSAmIChQSVBFX0JVRkZFUlMtMSk7CisJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBuZXdidWY7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBpcGUtPnRtcF9wYWdlOworCQkJY2hhciAqc3JjOworCQkJaW50IGVycm9yLCBhdG9taWMgPSAxOwogCiAJCQlpZiAoIXBhZ2UpIHsKIAkJCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIpOwpAQCAtMzIwLDkgKzQyOCw5IEBACiAJCQkJCXJldCA9IHJldCA/IDogLUVOT01FTTsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCWluZm8tPnRtcF9wYWdlID0gcGFnZTsKKwkJCQlwaXBlLT50bXBfcGFnZSA9IHBhZ2U7CiAJCQl9Ci0JCQkvKiBBbHdheXMgd2FrZXVwLCBldmVuIGlmIHRoZSBjb3B5IGZhaWxzLiBPdGhlcndpc2UKKwkJCS8qIEFsd2F5cyB3YWtlIHVwLCBldmVuIGlmIHRoZSBjb3B5IGZhaWxzLiBPdGhlcndpc2UKIAkJCSAqIHdlIGxvY2sgdXAgKE9fTk9OQkxPQ0stKXJlYWRlcnMgdGhhdCBzbGVlcCBkdWUgdG8KIAkJCSAqIHN5c2NhbGwgbWVyZ2luZy4KIAkJCSAqIEZJWE1FISBJcyB0aGlzIHJlYWxseSB0cnVlPwpAQCAtMzMyLDEwICs0NDAsMjcgQEAKIAkJCWlmIChjaGFycyA+IHRvdGFsX2xlbikKIAkJCQljaGFycyA9IHRvdGFsX2xlbjsKIAotCQkJZXJyb3IgPSBwaXBlX2lvdl9jb3B5X2Zyb21fdXNlcihrbWFwKHBhZ2UpLCBpb3YsIGNoYXJzKTsKLQkJCWt1bm1hcChwYWdlKTsKKwkJCWlvdl9mYXVsdF9pbl9wYWdlc19yZWFkKGlvdiwgY2hhcnMpOworcmVkbzI6CisJCQlpZiAoYXRvbWljKQorCQkJCXNyYyA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJCWVsc2UKKwkJCQlzcmMgPSBrbWFwKHBhZ2UpOworCisJCQllcnJvciA9IHBpcGVfaW92X2NvcHlfZnJvbV91c2VyKHNyYywgaW92LCBjaGFycywKKwkJCQkJCQlhdG9taWMpOworCQkJaWYgKGF0b21pYykKKwkJCQlrdW5tYXBfYXRvbWljKHNyYywgS01fVVNFUjApOworCQkJZWxzZQorCQkJCWt1bm1hcChwYWdlKTsKKwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJCWlmICghcmV0KSByZXQgPSAtRUZBVUxUOworCQkJCWlmIChhdG9taWMpIHsKKwkJCQkJYXRvbWljID0gMDsKKwkJCQkJZ290byByZWRvMjsKKwkJCQl9CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IGVycm9yOwogCQkJCWJyZWFrOwogCQkJfQogCQkJcmV0ICs9IGNoYXJzOwpAQCAtMzQ1LDggKzQ3MCw4IEBACiAJCQlidWYtPm9wcyA9ICZhbm9uX3BpcGVfYnVmX29wczsKIAkJCWJ1Zi0+b2Zmc2V0ID0gMDsKIAkJCWJ1Zi0+bGVuID0gY2hhcnM7Ci0JCQlpbmZvLT5ucmJ1ZnMgPSArK2J1ZnM7Ci0JCQlpbmZvLT50bXBfcGFnZSA9IE5VTEw7CisJCQlwaXBlLT5ucmJ1ZnMgPSArK2J1ZnM7CisJCQlwaXBlLT50bXBfcGFnZSA9IE5VTEw7CiAKIAkJCXRvdGFsX2xlbiAtPSBjaGFyczsKIAkJCWlmICghdG90YWxfbGVuKQpAQCAtMzU1LDI3ICs0ODAsMjkgQEAKIAkJaWYgKGJ1ZnMgPCBQSVBFX0JVRkZFUlMpCiAJCQljb250aW51ZTsKIAkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQlpZiAoIXJldCkgcmV0ID0gLUVBR0FJTjsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FQUdBSU47CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWlmICghcmV0KSByZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX0lOKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKwkJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOwogCQkJZG9fd2FrZXVwID0gMDsKIAkJfQotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpKys7Ci0JCXBpcGVfd2FpdChpbm9kZSk7Ci0JCVBJUEVfV0FJVElOR19XUklURVJTKCppbm9kZSktLTsKKwkJcGlwZS0+d2FpdGluZ193cml0ZXJzKys7CisJCXBpcGVfd2FpdChwaXBlKTsKKwkJcGlwZS0+d2FpdGluZ193cml0ZXJzLS07CiAJfQogb3V0OgotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJa2lsbF9mYXN5bmMoUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpLCBTSUdJTywgUE9MTF9JTik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOwogCX0KIAlpZiAocmV0ID4gMCkKIAkJZmlsZV91cGRhdGVfdGltZShmaWxwKTsKQEAgLTM4Nyw2ICs1MTQsNyBAQAogCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9ICh2b2lkIF9fdXNlciAqKWJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OworCiAJcmV0dXJuIHBpcGVfd3JpdGV2KGZpbHAsICZpb3YsIDEsIHBwb3MpOwogfQogCkBAIC0zOTcsNyArNTI1LDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWJhZF9waXBlX3coc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorYmFkX3BpcGVfdyhzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCSAgIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVCQURGOwogfQpAQCAtNDA3LDIxICs1MzYsMjIgQEAKIAkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCWludCBjb3VudCwgYnVmLCBucmJ1ZnM7CiAKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEZJT05SRUFEOgotCQkJbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCQkJaW5mbyA9ICBpbm9kZS0+aV9waXBlOworCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJcGlwZSA9IGlub2RlLT5pX3BpcGU7CiAJCQljb3VudCA9IDA7Ci0JCQlidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlucmJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7CisJCQlidWYgPSBwaXBlLT5jdXJidWY7CisJCQlucmJ1ZnMgPSBwaXBlLT5ucmJ1ZnM7CiAJCQl3aGlsZSAoLS1ucmJ1ZnMgPj0gMCkgewotCQkJCWNvdW50ICs9IGluZm8tPmJ1ZnNbYnVmXS5sZW47CisJCQkJY291bnQgKz0gcGlwZS0+YnVmc1tidWZdLmxlbjsKIAkJCQlidWYgPSAoYnVmKzEpICYgKFBJUEVfQlVGRkVSUy0xKTsKIAkJCX0KLQkJCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKIAkJCXJldHVybiBwdXRfdXNlcihjb3VudCwgKGludCBfX3VzZXIgKilhcmcpOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MzQsMTcgKzU2NCwxNyBAQAogewogCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvID0gaW5vZGUtPmlfcGlwZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlpbnQgbnJidWZzOwogCi0JcG9sbF93YWl0KGZpbHAsIFBJUEVfV0FJVCgqaW5vZGUpLCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlscCwgJnBpcGUtPndhaXQsIHdhaXQpOwogCiAJLyogUmVhZGluZyBvbmx5IC0tIG5vIG5lZWQgZm9yIGFjcXVpcmluZyB0aGUgc2VtYXBob3JlLiAgKi8KLQlucmJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7CisJbnJidWZzID0gcGlwZS0+bnJidWZzOwogCW1hc2sgPSAwOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCW1hc2sgPSAobnJidWZzID4gMCkgPyBQT0xMSU4gfCBQT0xMUkROT1JNIDogMDsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSAmJiBmaWxwLT5mX3ZlcnNpb24gIT0gUElQRV9XQ09VTlRFUigqaW5vZGUpKQorCQlpZiAoIXBpcGUtPndyaXRlcnMgJiYgZmlscC0+Zl92ZXJzaW9uICE9IHBpcGUtPndfY291bnRlcikKIAkJCW1hc2sgfD0gUE9MTEhVUDsKIAl9CiAKQEAgLTQ1NCw3ICs1ODQsNyBAQAogCQkgKiBNb3N0IFVuaWNlcyBkbyBub3Qgc2V0IFBPTExFUlIgZm9yIEZJRk9zIGJ1dCBvbiBMaW51eCB0aGV5CiAJCSAqIGJlaGF2ZSBleGFjdGx5IGxpa2UgcGlwZXMgZm9yIHBvbGwoKS4KIAkJICovCi0JCWlmICghUElQRV9SRUFERVJTKCppbm9kZSkpCisJCWlmICghcGlwZS0+cmVhZGVycykKIAkJCW1hc2sgfD0gUE9MTEVSUjsKIAl9CiAKQEAgLTQ2NCwxNyArNTk0LDIxIEBACiBzdGF0aWMgaW50CiBwaXBlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRlY3IsIGludCBkZWN3KQogewotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlQSVBFX1JFQURFUlMoKmlub2RlKSAtPSBkZWNyOwotCVBJUEVfV1JJVEVSUygqaW5vZGUpIC09IGRlY3c7Ci0JaWYgKCFQSVBFX1JFQURFUlMoKmlub2RlKSAmJiAhUElQRV9XUklURVJTKCppbm9kZSkpIHsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXBpcGUgPSBpbm9kZS0+aV9waXBlOworCXBpcGUtPnJlYWRlcnMgLT0gZGVjcjsKKwlwaXBlLT53cml0ZXJzIC09IGRlY3c7CisKKwlpZiAoIXBpcGUtPnJlYWRlcnMgJiYgIXBpcGUtPndyaXRlcnMpIHsKIAkJZnJlZV9waXBlX2luZm8oaW5vZGUpOwogCX0gZWxzZSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOwotCQlraWxsX2Zhc3luYyhQSVBFX0ZBU1lOQ19XUklURVJTKCppbm9kZSksIFNJR0lPLCBQT0xMX09VVCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODUsOSArNjE5LDkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldHZhbDsKIAotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfUkVBREVSUygqaW5vZGUpKTsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfcmVhZGVycyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTUwMiw5ICs2MzYsOSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0dmFsOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19XUklURVJTKCppbm9kZSkpOwotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY193cml0ZXJzKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNTE3LDE2ICs2NTEsMTcgQEAKIHBpcGVfcmR3cl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gaW5vZGUtPmlfcGlwZTsKIAlpbnQgcmV0dmFsOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCBQSVBFX0ZBU1lOQ19SRUFERVJTKCppbm9kZSkpOworCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCiAJaWYgKHJldHZhbCA+PSAwKQotCQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgUElQRV9GQVNZTkNfV1JJVEVSUygqaW5vZGUpKTsKKwkJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZwaXBlLT5mYXN5bmNfd3JpdGVycyk7CiAKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNTY1LDkgKzcwMCw5IEBACiB7CiAJLyogV2UgY291bGQgaGF2ZSBwZXJoYXBzIHVzZWQgYXRvbWljX3QsIGJ1dCB0aGlzIGFuZCBmcmllbmRzCiAJICAgYmVsb3cgYXJlIHRoZSBvbmx5IHBsYWNlcy4gIFNvIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlLiAgKi8KLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JUElQRV9SRUFERVJTKCppbm9kZSkrKzsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsOSArNzEwLDkgQEAKIHN0YXRpYyBpbnQKIHBpcGVfd3JpdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQltdXRleF9sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0JUElQRV9XUklURVJTKCppbm9kZSkrKzsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODUsMTIgKzcyMCwxMiBAQAogc3RhdGljIGludAogcGlwZV9yZHdyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJUElQRV9SRUFERVJTKCppbm9kZSkrKzsKKwkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJUElQRV9XUklURVJTKCppbm9kZSkrKzsKLQltdXRleF91bmxvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzMsMzcgKzgwOCwzOCBAQAogCS5mYXN5bmMJCT0gcGlwZV9yZHdyX2Zhc3luYywKIH07CiAKLXZvaWQgZnJlZV9waXBlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKK3N0cnVjdCBwaXBlX2lub2RlX2luZm8gKiBhbGxvY19waXBlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvID0gaW5vZGUtPmlfcGlwZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCi0JaW5vZGUtPmlfcGlwZSA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUzsgaSsrKSB7Ci0JCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gaW5mby0+YnVmcyArIGk7Ci0JCWlmIChidWYtPm9wcykKLQkJCWJ1Zi0+b3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7CisJcGlwZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwaXBlX2lub2RlX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAocGlwZSkgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwaXBlLT53YWl0KTsKKwkJcGlwZS0+cl9jb3VudGVyID0gcGlwZS0+d19jb3VudGVyID0gMTsKKwkJcGlwZS0+aW5vZGUgPSBpbm9kZTsKIAl9Ci0JaWYgKGluZm8tPnRtcF9wYWdlKQotCQlfX2ZyZWVfcGFnZShpbmZvLT50bXBfcGFnZSk7Ci0Ja2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gcGlwZTsKIH0KIAotc3RydWN0IGlub2RlKiBwaXBlX25ldyhzdHJ1Y3QgaW5vZGUqIGlub2RlKQordm9pZCBfX2ZyZWVfcGlwZV9pbmZvKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpCiB7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbzsKKwlpbnQgaTsKIAotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKQotCQlnb3RvIGZhaWxfcGFnZTsKLQlpbm9kZS0+aV9waXBlID0gaW5mbzsKKwlmb3IgKGkgPSAwOyBpIDwgUElQRV9CVUZGRVJTOyBpKyspIHsKKwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgaTsKKwkJaWYgKGJ1Zi0+b3BzKQorCQkJYnVmLT5vcHMtPnJlbGVhc2UocGlwZSwgYnVmKTsKKwl9CisJaWYgKHBpcGUtPnRtcF9wYWdlKQorCQlfX2ZyZWVfcGFnZShwaXBlLT50bXBfcGFnZSk7CisJa2ZyZWUocGlwZSk7Cit9CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQlQSVBFX1JDT1VOVEVSKCppbm9kZSkgPSBQSVBFX1dDT1VOVEVSKCppbm9kZSkgPSAxOwotCi0JcmV0dXJuIGlub2RlOwotZmFpbF9wYWdlOgotCXJldHVybiBOVUxMOwordm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCV9fZnJlZV9waXBlX2luZm8oaW5vZGUtPmlfcGlwZSk7CisJaW5vZGUtPmlfcGlwZSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnBpcGVfbW50IF9fcmVhZF9tb3N0bHk7CkBAIC03MTEsNiArODQ3LDcgQEAKIHsKIAlyZXR1cm4gMTsKIH0KKwogc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlCT0gcGlwZWZzX2RlbGV0ZV9kZW50cnksCiB9OwpAQCAtNzE4LDEzICs4NTUsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKiBnZXRfcGlwZV9pbm9kZSh2b2lkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUocGlwZV9tbnQtPm1udF9zYik7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAogCWlmICghaW5vZGUpCiAJCWdvdG8gZmFpbF9pbm9kZTsKIAotCWlmKCFwaXBlX25ldyhpbm9kZSkpCisJcGlwZSA9IGFsbG9jX3BpcGVfaW5mbyhpbm9kZSk7CisJaWYgKCFwaXBlKQogCQlnb3RvIGZhaWxfaXB1dDsKLQlQSVBFX1JFQURFUlMoKmlub2RlKSA9IFBJUEVfV1JJVEVSUygqaW5vZGUpID0gMTsKKwlpbm9kZS0+aV9waXBlID0gcGlwZTsKKworCXBpcGUtPnJlYWRlcnMgPSBwaXBlLT53cml0ZXJzID0gMTsKIAlpbm9kZS0+aV9mb3AgPSAmcmR3cl9waXBlX2ZvcHM7CiAKIAkvKgpAQCAtNzM5LDEwICs4ODAsMTIgQEAKIAlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKIAlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfU0laRTsKKwogCXJldHVybiBpbm9kZTsKIAogZmFpbF9pcHV0OgogCWlwdXQoaW5vZGUpOworCiBmYWlsX2lub2RlOgogCXJldHVybiBOVUxMOwogfQpAQCAtNzU1LDcgKzg5OCw3IEBACiAJc3RydWN0IGlub2RlICogaW5vZGU7CiAJc3RydWN0IGZpbGUgKmYxLCAqZjI7CiAJaW50IGVycm9yOwotCWludCBpLGo7CisJaW50IGksIGo7CiAKIAllcnJvciA9IC1FTkZJTEU7CiAJZjEgPSBnZXRfZW1wdHlfZmlscCgpOwpAQCAtNzg4LDYgKzkzMSw3IEBACiAJZGVudHJ5ID0gZF9hbGxvYyhwaXBlX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKIAlpZiAoIWRlbnRyeSkKIAkJZ290byBjbG9zZV9mMTJfaW5vZGVfaV9qOworCiAJZGVudHJ5LT5kX29wID0gJnBpcGVmc19kZW50cnlfb3BlcmF0aW9uczsKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAlmMS0+Zl92ZnNtbnQgPSBmMi0+Zl92ZnNtbnQgPSBtbnRnZXQobW50Z2V0KHBpcGVfbW50KSk7CkBAIC04MTEsNiArOTU1LDcgQEAKIAlmZF9pbnN0YWxsKGosIGYyKTsKIAlmZFswXSA9IGk7CiAJZmRbMV0gPSBqOworCiAJcmV0dXJuIDA7CiAKIGNsb3NlX2YxMl9pbm9kZV9pX2o6CkBAIC04MzUsOCArOTgwLDkgQEAKICAqIGRfbmFtZSAtIHBpcGU6IHdpbGwgZ28gbmljZWx5IGFuZCBraWxsIHRoZSBzcGVjaWFsLWNhc2luZyBpbiBwcm9jZnMuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqcGlwZWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQorc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqCitwaXBlZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCisJICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIGdldF9zYl9wc2V1ZG8oZnNfdHlwZSwgInBpcGU6IiwgTlVMTCwgUElQRUZTX01BR0lDKTsKIH0KQEAgLTg1MCw2ICs5OTYsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9waXBlX2ZzKHZvaWQpCiB7CiAJaW50IGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnBpcGVfZnNfdHlwZSk7CisKIAlpZiAoIWVycikgewogCQlwaXBlX21udCA9IGtlcm5fbW91bnQoJnBpcGVfZnNfdHlwZSk7CiAJCWlmIChJU19FUlIocGlwZV9tbnQpKSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGEzYTNlZWMuLjZjYzc3ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yOTcsMTYgKzI5NywyMCBAQAogCiAJZmlsZXMgPSBnZXRfZmlsZXNfc3RydWN0KHRhc2spOwogCWlmIChmaWxlcykgewotCQlyY3VfcmVhZF9sb2NrKCk7CisJCS8qCisJCSAqIFdlIGFyZSBub3QgdGFraW5nIGEgcmVmIHRvIHRoZSBmaWxlIHN0cnVjdHVyZSwgc28gd2UgbXVzdAorCQkgKiBob2xkIC0+ZmlsZV9sb2NrLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJZmlsZSA9IGZjaGVja19maWxlcyhmaWxlcywgZmQpOwogCQlpZiAoZmlsZSkgewogCQkJKm1udCA9IG1udGdldChmaWxlLT5mX3Zmc21udCk7CiAJCQkqZGVudHJ5ID0gZGdldChmaWxlLT5mX2RlbnRyeSk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJCXB1dF9maWxlc19zdHJ1Y3QoZmlsZXMpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJcHV0X2ZpbGVzX3N0cnVjdChmaWxlcyk7CiAJfQogCXJldHVybiAtRU5PRU5UOwpAQCAtMTUyMyw3ICsxNTI3LDEyIEBACiAJaWYgKCFmaWxlcykKIAkJZ290byBvdXRfdW5sb2NrOwogCWlub2RlLT5pX21vZGUgPSBTX0lGTE5LOwotCXJjdV9yZWFkX2xvY2soKTsKKworCS8qCisJICogV2UgYXJlIG5vdCB0YWtpbmcgYSByZWYgdG8gdGhlIGZpbGUgc3RydWN0dXJlLCBzbyB3ZSBtdXN0CisJICogaG9sZCAtPmZpbGVfbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJmZpbGVzLT5maWxlX2xvY2spOwogCWZpbGUgPSBmY2hlY2tfZmlsZXMoZmlsZXMsIGZkKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0X3VubG9jazI7CkBAIC0xNTMxLDcgKzE1NDAsNyBAQAogCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVJVU1IgfCBTX0lYVVNSOwogCWlmIChmaWxlLT5mX21vZGUgJiAyKQogCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVdVU1IgfCBTX0lYVVNSOwotCXJjdV9yZWFkX3VubG9jaygpOworCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlwdXRfZmlsZXNfc3RydWN0KGZpbGVzKTsKIAlpbm9kZS0+aV9vcCA9ICZwcm9jX3BpZF9saW5rX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfc2l6ZSA9IDY0OwpAQCAtMTU0MSw3ICsxNTUwLDcgQEAKIAlyZXR1cm4gTlVMTDsKIAogb3V0X3VubG9jazI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOwogCXB1dF9maWxlc19zdHJ1Y3QoZmlsZXMpOwogb3V0X3VubG9jazoKIAlpcHV0KGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvdm1jb3JlLmMgYi9mcy9wcm9jL3ZtY29yZS5jCmluZGV4IDdlZmE3M2QuLjIwZDRiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvdm1jb3JlLmMKKysrIGIvZnMvcHJvYy92bWNvcmUuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJCQkJc2l6ZV90IGJ1ZmxlbiwgbG9mZl90ICpmcG9zKQogewogCXNzaXplX3QgYWNjID0gMCwgdG1wOwotCXNpemVfdCB0c3osIG5yX2J5dGVzOwotCXU2NCBzdGFydDsKKwlzaXplX3QgdHN6OworCXU2NCBzdGFydCwgbnJfYnl0ZXM7CiAJc3RydWN0IHZtY29yZSAqY3Vycl9tID0gTlVMTDsKIAogCWlmIChidWZsZW4gPT0gMCB8fCAqZnBvcyA+PSB2bWNvcmVfc2l6ZSkKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCA2MjU2Y2E4Li41YmMwZTkyIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJZ290byBFaW52YWw7CiAKIAlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChpbm9kZS0+aV9mbG9jayAmJiBNQU5EQVRPUllfTE9DSyhpbm9kZSkpIHsKKwlpZiAodW5saWtlbHkoaW5vZGUtPmlfZmxvY2sgJiYgTUFOREFUT1JZX0xPQ0soaW5vZGUpKSkgewogCQlpbnQgcmV0dmFsID0gbG9ja3NfbWFuZGF0b3J5X2FyZWEoCiAJCQlyZWFkX3dyaXRlID09IFJFQUQgPyBGTE9DS19WRVJJRllfUkVBRCA6IEZMT0NLX1ZFUklGWV9XUklURSwKIAkJCWlub2RlLCBmaWxlLCBwb3MsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKaW5kZXggNThjNDE4Zi4uOTdhZTFiOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKQEAgLTQwOCw4ICs0MDgsOSBAQAogCQlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxUKTsKIAkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKIAkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCXJldCA9IGFjbCA/IDEgOiAwOwotCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCQlyZXQgPSAoYWNsICYmICFJU19FUlIoYWNsKSk7CisJCWlmIChyZXQpCisJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IDA3MTY2MGYuLmE4MTA5YmEgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0zMTAsOCArMzEwLDkgQEAKIAkJCSAgIGZkX3NldCBfX3VzZXIgKmV4cCwgczY0ICp0aW1lb3V0KQogewogCWZkX3NldF9iaXRzIGZkczsKLQljaGFyICpiaXRzOwotCWludCByZXQsIHNpemUsIG1heF9mZHNldDsKKwl2b2lkICpiaXRzOworCWludCByZXQsIG1heF9mZHNldDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwogCS8qIEFsbG9jYXRlIHNtYWxsIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgdG8gc2F2ZSBtZW1vcnkgYW5kIGJlIGZhc3RlciAqLwogCWxvbmcgc3RhY2tfZmRzW1NFTEVDVF9TVEFDS19BTExPQy9zaXplb2YobG9uZyldOwpAQCAtMzMzLDIwICszMzQsMjEgQEAKIAkgKiBzaW5jZSB3ZSB1c2VkIGZkc2V0IHdlIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluIHVuaXRzIG9mCiAJICogbG9uZy13b3Jkcy4gCiAJICovCi0JcmV0ID0gLUVOT01FTTsKIAlzaXplID0gRkRTX0JZVEVTKG4pOwotCWlmICg2KnNpemUgPCBTRUxFQ1RfU1RBQ0tfQUxMT0MpCi0JCWJpdHMgPSBzdGFja19mZHM7Ci0JZWxzZQorCWJpdHMgPSBzdGFja19mZHM7CisJaWYgKHNpemUgPiBzaXplb2Yoc3RhY2tfZmRzKSAvIDYpIHsKKwkJLyogTm90IGVub3VnaCBzcGFjZSBpbiBvbi1zdGFjayBhcnJheTsgbXVzdCB1c2Uga21hbGxvYyAqLworCQlyZXQgPSAtRU5PTUVNOwogCQliaXRzID0ga21hbGxvYyg2ICogc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiaXRzKQotCQlnb3RvIG91dF9ub2ZkczsKLQlmZHMuaW4gICAgICA9ICh1bnNpZ25lZCBsb25nICopICBiaXRzOwotCWZkcy5vdXQgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAgIHNpemUpOwotCWZkcy5leCAgICAgID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAyKnNpemUpOwotCWZkcy5yZXNfaW4gID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyAzKnNpemUpOwotCWZkcy5yZXNfb3V0ID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA0KnNpemUpOwotCWZkcy5yZXNfZXggID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA1KnNpemUpOworCQlpZiAoIWJpdHMpCisJCQlnb3RvIG91dF9ub2ZkczsKKwl9CisJZmRzLmluICAgICAgPSBiaXRzOworCWZkcy5vdXQgICAgID0gYml0cyArICAgc2l6ZTsKKwlmZHMuZXggICAgICA9IGJpdHMgKyAyKnNpemU7CisJZmRzLnJlc19pbiAgPSBiaXRzICsgMypzaXplOworCWZkcy5yZXNfb3V0ID0gYml0cyArIDQqc2l6ZTsKKwlmZHMucmVzX2V4ICA9IGJpdHMgKyA1KnNpemU7CiAKIAlpZiAoKHJldCA9IGdldF9mZF9zZXQobiwgaW5wLCBmZHMuaW4pKSB8fAogCSAgICAocmV0ID0gZ2V0X2ZkX3NldChuLCBvdXRwLCBmZHMub3V0KSkgfHwKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2Rpci5jIGIvZnMvc21iZnMvZGlyLmMKaW5kZXggMzRjN2ExMS4uNzBkOWM1YSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvZGlyLmMKKysrIGIvZnMvc21iZnMvZGlyLmMKQEAgLTQzNCw2ICs0MzQsMTEgQEAKIAlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gU01CX01BWE5BTUVMRU4pCiAJCWdvdG8gb3V0OwogCisJLyogRG8gbm90IGFsbG93IGxvb2t1cCBvZiBuYW1lcyB3aXRoIGJhY2tzbGFzaGVzIGluICovCisJZXJyb3IgPSAtRUlOVkFMOworCWlmIChtZW1jaHIoZGVudHJ5LT5kX25hbWUubmFtZSwgJ1xcJywgZGVudHJ5LT5kX25hbWUubGVuKSkKKwkJZ290byBvdXQ7CisKIAlsb2NrX2tlcm5lbCgpOwogCWVycm9yID0gc21iX3Byb2NfZ2V0YXR0cihkZW50cnksICZmaW5mbyk7CiAjaWZkZWYgU01CRlNfUEFSQU5PSUEKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2ZpbGUuYyBiL2ZzL3NtYmZzL2ZpbGUuYwppbmRleCBjNTZiZDk5Li5lZDlhMjRkIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9maWxlLmMKKysrIGIvZnMvc21iZnMvZmlsZS5jCkBAIC0xNzgsMTEgKzE3OCw5IEBACiAJdW5zaWduZWQgb2Zmc2V0ID0gUEFHRV9DQUNIRV9TSVpFOwogCWludCBlcnI7CiAKLQlpZiAoIW1hcHBpbmcpCi0JCUJVRygpOworCUJVR19PTighbWFwcGluZyk7CiAJaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCWlmICghaW5vZGUpCi0JCUJVRygpOworCUJVR19PTighaW5vZGUpOwogCiAJZW5kX2luZGV4ID0gaW5vZGUtPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9yZXF1ZXN0LmMgYi9mcy9zbWJmcy9yZXF1ZXN0LmMKaW5kZXggYzcxYzM3NS4uYzcxZGQyNyAxMDA2NDQKLS0tIGEvZnMvc21iZnMvcmVxdWVzdC5jCisrKyBiL2ZzL3NtYmZzL3JlcXVlc3QuYwpAQCAtMzM5LDkgKzMzOSwxMSBAQAogCQkvKgogCQkgKiBPbiB0aW1lb3V0IG9yIG9uIGludGVycnVwdCB3ZSB3YW50IHRvIHRyeSBhbmQgcmVtb3ZlIHRoZQogCQkgKiByZXF1ZXN0IGZyb20gdGhlIHJlY3ZxL3htaXRxLgorCQkgKiBGaXJzdCBjaGVjayBpZiB0aGUgcmVxdWVzdCBpcyBzdGlsbCBwYXJ0IG9mIGEgcXVldWUuIChNYXkKKwkJICogaGF2ZSBiZWVuIHJlbW92ZWQgYnkgc29tZSBlcnJvciBjb25kaXRpb24pCiAJCSAqLwogCQlzbWJfbG9ja19zZXJ2ZXIoc2VydmVyKTsKLQkJaWYgKCEocmVxLT5ycV9mbGFncyAmIFNNQl9SRVFfUkVDRUlWRUQpKSB7CisJCWlmICghbGlzdF9lbXB0eSgmcmVxLT5ycV9xdWV1ZSkpIHsKIAkJCWxpc3RfZGVsX2luaXQoJnJlcS0+cnFfcXVldWUpOwogCQkJc21iX3JwdXQocmVxKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA3YzJiYmYxLi5hMjg1ZmQ3IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtOSwxMSArOSwxMiBAQAogICogdGhhdCB0cmFuc2ZlcnMgZGF0YSBidWZmZXJzIHRvIG9yIGZyb20gYSBwaXBlIGJ1ZmZlci4KICAqCiAgKiBOYW1lZCBieSBMYXJyeSBNY1ZveSwgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gZnJvbSBMaW51cywgZXh0ZW5kZWQgYnkKLSAqIEplbnMgdG8gc3VwcG9ydCBzcGxpY2luZyB0byBmaWxlcyBhbmQgZml4aW5nIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uCi0gKiBidWdzLgorICogSmVucyB0byBzdXBwb3J0IHNwbGljaW5nIHRvIGZpbGVzLCBuZXR3b3JrLCBkaXJlY3Qgc3BsaWNpbmcsIGV0YyBhbmQKKyAqIGZpeGluZyBsb3RzIG9mIGJ1Z3MuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMjIsMTQzICsyMywxOTYgQEAKICNpbmNsdWRlIDxsaW51eC9waXBlX2ZzX2kuaD4KICNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogCi0vKgotICogUGFzc2VkIHRvIHRoZSBhY3RvcnMKLSAqLwotc3RydWN0IHNwbGljZV9kZXNjIHsKLQl1bnNpZ25lZCBpbnQgbGVuLCB0b3RhbF9sZW47CS8qIGN1cnJlbnQgYW5kIHJlbWFpbmluZyBsZW5ndGggKi8KLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBzcGxpY2UgZmxhZ3MgKi8KLQlzdHJ1Y3QgZmlsZSAqZmlsZTsJCS8qIGZpbGUgdG8gcmVhZC93cml0ZSAqLwotCWxvZmZfdCBwb3M7CQkJLyogZmlsZSBwb3NpdGlvbiAqLworc3RydWN0IHBhcnRpYWxfcGFnZSB7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbGVuOwogfTsKIAotc3RhdGljIGludCBwYWdlX2NhY2hlX3BpcGVfYnVmX3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sCisvKgorICogUGFzc2VkIHRvIHNwbGljZV90b19waXBlCisgKi8KK3N0cnVjdCBzcGxpY2VfcGlwZV9kZXNjIHsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwkJLyogcGFnZSBtYXAgKi8KKwlzdHJ1Y3QgcGFydGlhbF9wYWdlICpwYXJ0aWFsOwkvKiBwYWdlc1tdIG1heSBub3QgYmUgY29udGlnICovCisJaW50IG5yX3BhZ2VzOwkJCS8qIG51bWJlciBvZiBwYWdlcyBpbiBtYXAgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBzcGxpY2UgZmxhZ3MgKi8KKwlzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzOy8qIG9wcyBhc3NvY2lhdGVkIHdpdGggb3V0cHV0IHBpcGUgKi8KK307CisKKy8qCisgKiBBdHRlbXB0IHRvIHN0ZWFsIGEgcGFnZSBmcm9tIGEgcGlwZSBidWZmZXIuIFRoaXMgc2hvdWxkIHBlcmhhcHMgZ28gaW50bworICogYSB2bSBoZWxwZXIgZnVuY3Rpb24sIGl0J3MgYWxyZWFkeSBzaW1wbGlmaWVkIHF1aXRlIGEgYml0IGJ5IHRoZQorICogYWRkaXRpb24gb2YgcmVtb3ZlX21hcHBpbmcoKS4gSWYgc3VjY2VzcyBpcyByZXR1cm5lZCwgdGhlIGNhbGxlciBtYXkKKyAqIGF0dGVtcHQgdG8gcmV1c2UgdGhpcyBwYWdlIGZvciBhbm90aGVyIGRlc3RpbmF0aW9uLgorICovCitzdGF0aWMgaW50IHBhZ2VfY2FjaGVfcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gYnVmLT5wYWdlOwotCi0JV0FSTl9PTighUGFnZUxvY2tlZChwYWdlKSk7Ci0JV0FSTl9PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKLQotCWlmICghcmVtb3ZlX21hcHBpbmcocGFnZV9tYXBwaW5nKHBhZ2UpLCBwYWdlKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoUGFnZUxSVShwYWdlKSkgewotCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCUJVR19PTighUGFnZUxSVShwYWdlKSk7Ci0JCV9fQ2xlYXJQYWdlTFJVKHBhZ2UpOwotCQlkZWxfcGFnZV9mcm9tX2xydSh6b25lLCBwYWdlKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JfQotCi0JYnVmLT5zdG9sZW4gPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlX2NhY2hlX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKLQkJCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci0JcGFnZV9jYWNoZV9yZWxlYXNlKGJ1Zi0+cGFnZSk7Ci0JYnVmLT5wYWdlID0gTlVMTDsKLQlidWYtPnN0b2xlbiA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpwYWdlX2NhY2hlX3BpcGVfYnVmX21hcChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1Zi0+cGFnZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAogCWxvY2tfcGFnZShwYWdlKTsKIAotCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJV0FSTl9PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKKworCS8qCisJICogQXQgbGVhc3QgZm9yIGV4dDIgd2l0aCBub2JoIG9wdGlvbiwgd2UgbmVlZCB0byB3YWl0IG9uIHdyaXRlYmFjaworCSAqIGNvbXBsZXRpbmcgb24gdGhpcyBwYWdlLCBzaW5jZSB3ZSdsbCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZWNhY2hlLgorCSAqIE90aGVyd2lzZSB0cnVuY2F0ZSB3b250IHdhaXQgb24gdGhlIHBhZ2UsIGFsbG93aW5nIHRoZSBkaXNrCisJICogYmxvY2tzIHRvIGJlIHJldXNlZCBieSBzb21lb25lIGVsc2UgYmVmb3JlIHdlIGFjdHVhbGx5IHdyb3RlIG91cgorCSAqIGRhdGEgdG8gdGhlbS4gZnMgY29ycnVwdGlvbiBlbnN1ZXMuCisJICovCisJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwkJdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKKworCWlmICghcmVtb3ZlX21hcHBpbmcobWFwcGluZywgcGFnZSkpIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOworCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKLQl9Ci0KLQlyZXR1cm4ga21hcChidWYtPnBhZ2UpOworCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19MUlU7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZ2VfY2FjaGVfcGlwZV9idWZfdW5tYXAoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywKLQkJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIHBhZ2VfY2FjaGVfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKIHsKLQlpZiAoIWJ1Zi0+c3RvbGVuKQotCQl1bmxvY2tfcGFnZShidWYtPnBhZ2UpOwotCWt1bm1hcChidWYtPnBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShidWYtPnBhZ2UpOworCWJ1Zi0+ZmxhZ3MgJj0gflBJUEVfQlVGX0ZMQUdfTFJVOworfQorCitzdGF0aWMgaW50IHBhZ2VfY2FjaGVfcGlwZV9idWZfcGluKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidWYtPnBhZ2U7CisJaW50IGVycjsKKworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCWxvY2tfcGFnZShwYWdlKTsKKworCQkvKgorCQkgKiBQYWdlIGdvdCB0cnVuY2F0ZWQvdW5oYXNoZWQuIFRoaXMgd2lsbCBjYXVzZSBhIDAtYnl0ZQorCQkgKiBzcGxpY2UsIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhZ2UuCisJCSAqLworCQlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKKwkJCWVyciA9IC1FTk9EQVRBOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qCisJCSAqIFVoIG9oLCByZWFkLWVycm9yIGZyb20gZGlzay4KKwkJICovCisJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qCisJCSAqIFBhZ2UgaXMgb2sgYWZ0ZXJhbGwsIHdlIGFyZSBkb25lLgorCQkgKi8KKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZSA9IDAsCi0JLm1hcCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfbWFwLAotCS51bm1hcCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfdW5tYXAsCisJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAorCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCisJLnBpbiA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfcGluLAogCS5yZWxlYXNlID0gcGFnZV9jYWNoZV9waXBlX2J1Zl9yZWxlYXNlLAogCS5zdGVhbCA9IHBhZ2VfY2FjaGVfcGlwZV9idWZfc3RlYWwsCisJLmdldCA9IGdlbmVyaWNfcGlwZV9idWZfZ2V0LAogfTsKIAotc3RhdGljIHNzaXplX3QgbW92ZV90b19waXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICoqcGFnZXMsCi0JCQkgICAgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbikKK3N0YXRpYyBpbnQgdXNlcl9wYWdlX3BpcGVfYnVmX3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87Ci0JaW50IHJldCwgZG9fd2FrZXVwLCBpOworCWlmICghKGJ1Zi0+ZmxhZ3MgJiBQSVBFX0JVRl9GTEFHX0dJRlQpKQorCQlyZXR1cm4gMTsKKworCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19MUlU7CisJcmV0dXJuIGdlbmVyaWNfcGlwZV9idWZfc3RlYWwocGlwZSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHVzZXJfcGFnZV9waXBlX2J1Zl9vcHMgPSB7CisJLmNhbl9tZXJnZSA9IDAsCisJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAorCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCisJLnBpbiA9IGdlbmVyaWNfcGlwZV9idWZfcGluLAorCS5yZWxlYXNlID0gcGFnZV9jYWNoZV9waXBlX2J1Zl9yZWxlYXNlLAorCS5zdGVhbCA9IHVzZXJfcGFnZV9waXBlX2J1Zl9zdGVhbCwKKwkuZ2V0ID0gZ2VuZXJpY19waXBlX2J1Zl9nZXQsCit9OworCisvKgorICogUGlwZSBvdXRwdXQgd29ya2VyLiBUaGlzIHNldHMgdXAgb3VyIHBpcGUgZm9ybWF0IHdpdGggdGhlIHBhZ2UgY2FjaGUKKyAqIHBpcGUgYnVmZmVyIG9wZXJhdGlvbnMuIE90aGVyd2lzZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHJlZ3VsYXIgcGlwZV93cml0ZXYoKS4KKyAqLworc3RhdGljIHNzaXplX3Qgc3BsaWNlX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCSAgICAgIHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQpCit7CisJaW50IHJldCwgZG9fd2FrZXVwLCBwYWdlX25yOwogCiAJcmV0ID0gMDsKIAlkb193YWtldXAgPSAwOwotCWkgPSAwOworCXBhZ2VfbnIgPSAwOwogCi0JbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfbG9jaygmcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOwogCi0JaW5mbyA9IGlub2RlLT5pX3BpcGU7CiAJZm9yICg7OykgewotCQlpbnQgYnVmczsKLQotCQlpZiAoIVBJUEVfUkVBREVSUygqaW5vZGUpKSB7CisJCWlmICghcGlwZS0+cmVhZGVycykgewogCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRVBJUEU7CiAJCQlicmVhazsKIAkJfQogCi0JCWJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7Ci0JCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKSB7Ci0JCQlpbnQgbmV3YnVmID0gKGluZm8tPmN1cmJ1ZiArIGJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOwotCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBpbmZvLT5idWZzICsgbmV3YnVmOwotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpKytdOwotCQkJdW5zaWduZWQgbG9uZyB0aGlzX2xlbjsKKwkJaWYgKHBpcGUtPm5yYnVmcyA8IFBJUEVfQlVGRkVSUykgeworCQkJaW50IG5ld2J1ZiA9IChwaXBlLT5jdXJidWYgKyBwaXBlLT5ucmJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOworCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlLT5idWZzICsgbmV3YnVmOwogCi0JCQl0aGlzX2xlbiA9IFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldDsKLQkJCWlmICh0aGlzX2xlbiA+IGxlbikKLQkJCQl0aGlzX2xlbiA9IGxlbjsKKwkJCWJ1Zi0+cGFnZSA9IHNwZC0+cGFnZXNbcGFnZV9ucl07CisJCQlidWYtPm9mZnNldCA9IHNwZC0+cGFydGlhbFtwYWdlX25yXS5vZmZzZXQ7CisJCQlidWYtPmxlbiA9IHNwZC0+cGFydGlhbFtwYWdlX25yXS5sZW47CisJCQlidWYtPm9wcyA9IHNwZC0+b3BzOworCQkJaWYgKHNwZC0+ZmxhZ3MgJiBTUExJQ0VfRl9HSUZUKQorCQkJCWJ1Zi0+ZmxhZ3MgfD0gUElQRV9CVUZfRkxBR19HSUZUOwogCi0JCQlidWYtPnBhZ2UgPSBwYWdlOwotCQkJYnVmLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQlidWYtPmxlbiA9IHRoaXNfbGVuOwotCQkJYnVmLT5vcHMgPSAmcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHM7Ci0JCQlpbmZvLT5ucmJ1ZnMgPSArK2J1ZnM7Ci0JCQlkb193YWtldXAgPSAxOworCQkJcGlwZS0+bnJidWZzKys7CisJCQlwYWdlX25yKys7CisJCQlyZXQgKz0gYnVmLT5sZW47CiAKLQkJCXJldCArPSB0aGlzX2xlbjsKLQkJCWxlbiAtPSB0aGlzX2xlbjsKLQkJCW9mZnNldCA9IDA7Ci0JCQlpZiAoIS0tbnJfcGFnZXMpCisJCQlpZiAocGlwZS0+aW5vZGUpCisJCQkJZG9fd2FrZXVwID0gMTsKKworCQkJaWYgKCEtLXNwZC0+bnJfcGFnZXMpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoIWxlbikKLQkJCQlicmVhazsKLQkJCWlmIChidWZzIDwgUElQRV9CVUZGRVJTKQorCQkJaWYgKHBpcGUtPm5yYnVmcyA8IFBJUEVfQlVGRkVSUykKIAkJCQljb250aW51ZTsKIAogCQkJYnJlYWs7CiAJCX0KIAorCQlpZiAoc3BkLT5mbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWlmICghcmV0KQogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKQEAgLTE2NiwxMzcgKzIyMCwyNzIgQEAKIAkJfQogCiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sCi0JCQkJICAgIFBPTExfSU4pOworCQkJc21wX21iKCk7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcGlwZS0+d2FpdCkpCisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworCQkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJCQlkb193YWtldXAgPSAwOwogCQl9CiAKLQkJUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSsrOwotCQlwaXBlX3dhaXQoaW5vZGUpOwotCQlQSVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpLS07CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycysrOworCQlwaXBlX3dhaXQocGlwZSk7CisJCXBpcGUtPndhaXRpbmdfd3JpdGVycy0tOwogCX0KIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1JFQURFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfSU4pOworCQlzbXBfbWIoKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBpcGUtPndhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJfQogCi0Jd2hpbGUgKGkgPCBucl9wYWdlcykKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2krK10pOworCXdoaWxlIChwYWdlX25yIDwgc3BkLT5ucl9wYWdlcykKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHNwZC0+cGFnZXNbcGFnZV9ucisrXSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGlub2RlICpwaXBlLAotCQkJCSAgICAgIHNpemVfdCBsZW4pCitzdGF0aWMgaW50CitfX2dlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKKwkJCSAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbi0+Zl9tYXBwaW5nOwotCXVuc2lnbmVkIGludCBvZmZzZXQsIG5yX3BhZ2VzOwotCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdLCAqc2hhZG93W1BJUEVfQlVGRkVSU107CisJdW5zaWduZWQgaW50IGxvZmYsIG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX0JVRkZFUlNdOworCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgcGFydGlhbFtQSVBFX0JVRkZFUlNdOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXBnb2ZmX3QgaW5kZXgsIHBpZHg7Ci0JaW50IGksIGo7CisJcGdvZmZfdCBpbmRleCwgZW5kX2luZGV4OworCWxvZmZfdCBpc2l6ZTsKKwlzaXplX3QgdG90YWxfbGVuOworCWludCBlcnJvciwgcGFnZV9ucjsKKwlzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyBzcGQgPSB7CisJCS5wYWdlcyA9IHBhZ2VzLAorCQkucGFydGlhbCA9IHBhcnRpYWwsCisJCS5mbGFncyA9IGZsYWdzLAorCQkub3BzID0gJnBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzLAorCX07CiAKLQlpbmRleCA9IGluLT5mX3BvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCW9mZnNldCA9IGluLT5mX3BvcyAmIH5QQUdFX0NBQ0hFX01BU0s7Ci0JbnJfcGFnZXMgPSAobGVuICsgb2Zmc2V0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpbmRleCA9ICpwcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJbG9mZiA9ICpwcG9zICYgflBBR0VfQ0FDSEVfTUFTSzsKKwlucl9wYWdlcyA9IChsZW4gKyBsb2ZmICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCWlmIChucl9wYWdlcyA+IFBJUEVfQlVGRkVSUykKIAkJbnJfcGFnZXMgPSBQSVBFX0JVRkZFUlM7CiAKIAkvKgotCSAqIGluaXRpYXRlIHJlYWQtYWhlYWQgb24gdGhpcyBwYWdlIHJhbmdlCisJICogSW5pdGlhdGUgcmVhZC1haGVhZCBvbiB0aGlzIHBhZ2UgcmFuZ2UuIGhvd2V2ZXIsIGRvbid0IGNhbGwgaW50bworCSAqIHJlYWQtYWhlYWQgaWYgdGhpcyBpcyBhIG5vbi16ZXJvIG9mZnNldCAod2UgYXJlIGxpa2VseSBkb2luZyBzbWFsbAorCSAqIGNodW5rIHNwbGljZSBhbmQgdGhlIHBhZ2UgaXMgYWxyZWFkeSB0aGVyZSkgZm9yIGEgc2luZ2xlIHBhZ2UuCiAJICovCi0JZG9fcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgaW4sIGluZGV4LCBucl9wYWdlcyk7CisJaWYgKCFsb2ZmIHx8IG5yX3BhZ2VzID4gMSkKKwkJcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgJmluLT5mX3JhLCBpbiwgaW5kZXgsIG5yX3BhZ2VzKTsKIAogCS8qCi0JICogR2V0IGFzIG1hbnkgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBhcyBwb3NzaWJsZS4uCi0JICogU3RhcnQgSU8gb24gdGhlIHBhZ2UgY2FjaGUgZW50cmllcyB3ZSBjcmVhdGUgKHdlCi0JICogY2FuIGFzc3VtZSB0aGF0IGFueSBwcmUtZXhpc3Rpbmcgb25lcyB3ZSBmaW5kIGhhdmUKLQkgKiBhbHJlYWR5IGhhZCBJTyBzdGFydGVkIG9uIHRoZW0pLgorCSAqIE5vdyBmaWxsIGluIHRoZSBob2xlczoKIAkgKi8KLQlpID0gZmluZF9nZXRfcGFnZXMobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBwYWdlcyk7CisJZXJyb3IgPSAwOworCXRvdGFsX2xlbiA9IDA7CiAKIAkvKgotCSAqIGNvbW1vbiBjYXNlIC0gd2UgZm91bmQgYWxsIHBhZ2VzIGFuZCB0aGV5IGFyZSBjb250aWd1b3VzLAotCSAqIGtpY2sgdGhlbSBvZmYKKwkgKiBMb29rdXAgdGhlIChob3BlZnVsbHkpIGZ1bGwgcmFuZ2Ugb2YgcGFnZXMgd2UgbmVlZC4KIAkgKi8KLQlpZiAoaSAmJiAocGFnZXNbaSAtIDFdLT5pbmRleCA9PSBpbmRleCArIGkgLSAxKSkKLQkJZ290byBzcGxpY2VfdGhlbTsKKwlzcGQubnJfcGFnZXMgPSBmaW5kX2dldF9wYWdlc19jb250aWcobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBwYWdlcyk7CiAKIAkvKgotCSAqIGZpbGwgc2hhZG93W10gd2l0aCBwYWdlcyBhdCB0aGUgcmlnaHQgbG9jYXRpb25zLCBzbyB3ZSBvbmx5Ci0JICogaGF2ZSB0byBmaWxsIGhvbGVzCisJICogSWYgZmluZF9nZXRfcGFnZXNfY29udGlnKCkgcmV0dXJuZWQgZmV3ZXIgcGFnZXMgdGhhbiB3ZSBuZWVkZWQsCisJICogYWxsb2NhdGUgdGhlIHJlc3QuCiAJICovCi0JbWVtc2V0KHNoYWRvdywgMCwgaSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Ci0JZm9yIChqID0gMCwgcGlkeCA9IGluZGV4OyBqIDwgaTsgcGlkeCsrLCBqKyspCi0JCXNoYWRvd1twYWdlc1tqXS0+aW5kZXggLSBwaWR4XSA9IHBhZ2VzW2pdOwotCi0JLyoKLQkgKiBub3cgZmlsbCBpbiB0aGUgaG9sZXMKLQkgKi8KLQlmb3IgKGkgPSAwLCBwaWR4ID0gaW5kZXg7IGkgPCBucl9wYWdlczsgcGlkeCsrLCBpKyspIHsKLQkJaW50IGVycm9yOwotCi0JCWlmIChzaGFkb3dbaV0pCi0JCQljb250aW51ZTsKLQorCWluZGV4ICs9IHNwZC5ucl9wYWdlczsKKwl3aGlsZSAoc3BkLm5yX3BhZ2VzIDwgbnJfcGFnZXMpIHsKIAkJLyoKLQkJICogbm8gcGFnZSB0aGVyZSwgbG9vayBvbmUgdXAgLyBjcmVhdGUgaXQKKwkJICogUGFnZSBjb3VsZCBiZSB0aGVyZSwgZmluZF9nZXRfcGFnZXNfY29udGlnKCkgYnJlYWtzIG9uCisJCSAqIHRoZSBmaXJzdCBob2xlLgogCQkgKi8KLQkJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgcGlkeCwKLQkJCQkJCSAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwotCQlpZiAoIXBhZ2UpCi0JCQlicmVhazsKKwkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgpOworCQlpZiAoIXBhZ2UpIHsKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgdGhlIHJlYWQtYWhlYWQgZW5naW5lIGlzIG5vdGlmaWVkCisJCQkgKiBhYm91dCB0aGlzIGZhaWx1cmUuCisJCQkgKi8KKwkJCWhhbmRsZV9yYV9taXNzKG1hcHBpbmcsICZpbi0+Zl9yYSwgaW5kZXgpOwogCi0JCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCi0JCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJZWxzZSB7Ci0JCQllcnJvciA9IG1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShpbiwgcGFnZSk7CisJCQkvKgorCQkJICogcGFnZSBkaWRuJ3QgZXhpc3QsIGFsbG9jYXRlIG9uZS4KKwkJCSAqLworCQkJcGFnZSA9IHBhZ2VfY2FjaGVfYWxsb2NfY29sZChtYXBwaW5nKTsKKwkJCWlmICghcGFnZSkKKwkJCQlicmVhazsKIAorCQkJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywgaW5kZXgsCisJCQkJCSAgICAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlpZiAoZXJyb3IgPT0gLUVFWElTVCkKKwkJCQkJY29udGludWU7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQkvKgorCQkJICogYWRkX3RvX3BhZ2VfY2FjaGUoKSBsb2NrcyB0aGUgcGFnZSwgdW5sb2NrIGl0CisJCQkgKiB0byBhdm9pZCBjb252b2x1dGluZyB0aGUgbG9naWMgYmVsb3cgZXZlbiBtb3JlLgorCQkJICovCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQotCQlzaGFkb3dbaV0gPSBwYWdlOwotCX0KIAotCWlmICghaSkgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJIGlmIChzaGFkb3dbaV0pCi0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHNoYWRvd1tpXSk7Ci0JCX0KLQkJcmV0dXJuIDA7CisJCXBhZ2VzW3NwZC5ucl9wYWdlcysrXSA9IHBhZ2U7CisJCWluZGV4Kys7CiAJfQogCi0JbWVtY3B5KHBhZ2VzLCBzaGFkb3csIGkgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwotCiAJLyoKLQkgKiBOb3cgd2Ugc3BsaWNlIHRoZW0gaW50byB0aGUgcGlwZS4uCisJICogTm93IGxvb3Agb3ZlciB0aGUgbWFwIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBJTyBvbiBhbnkKKwkgKiBwYWdlcywgZmlsbCBpbiB0aGUgcGFydGlhbCBtYXAsIGV0Yy4KIAkgKi8KLXNwbGljZV90aGVtOgotCXJldHVybiBtb3ZlX3RvX3BpcGUocGlwZSwgcGFnZXMsIGksIG9mZnNldCwgbGVuKTsKKwlpbmRleCA9ICpwcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJbnJfcGFnZXMgPSBzcGQubnJfcGFnZXM7CisJc3BkLm5yX3BhZ2VzID0gMDsKKwlmb3IgKHBhZ2VfbnIgPSAwOyBwYWdlX25yIDwgbnJfcGFnZXM7IHBhZ2VfbnIrKykgeworCQl1bnNpZ25lZCBpbnQgdGhpc19sZW47CisKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKworCQkvKgorCQkgKiB0aGlzX2xlbiBpcyB0aGUgbWF4IHdlJ2xsIHVzZSBmcm9tIHRoaXMgcGFnZQorCQkgKi8KKwkJdGhpc19sZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIFBBR0VfQ0FDSEVfU0laRSAtIGxvZmYpOworCQlwYWdlID0gcGFnZXNbcGFnZV9ucl07CisKKwkJLyoKKwkJICogSWYgdGhlIHBhZ2UgaXNuJ3QgdXB0b2RhdGUsIHdlIG1heSBuZWVkIHRvIHN0YXJ0IGlvIG9uIGl0CisJCSAqLworCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCQkJLyoKKwkJCSAqIElmIGluIG5vbmJsb2NrIG1vZGUgdGhlbiBkb250IGJsb2NrIG9uIHdhaXRpbmcKKwkJCSAqIGZvciBhbiBpbi1mbGlnaHQgaW8gcGFnZQorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykKKwkJCQlicmVhazsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCisJCQkvKgorCQkJICogcGFnZSB3YXMgdHJ1bmNhdGVkLCBzdG9wIGhlcmUuIGlmIHRoaXMgaXNuJ3QgdGhlCisJCQkgKiBmaXJzdCBwYWdlLCB3ZSdsbCBqdXN0IGNvbXBsZXRlIHdoYXQgd2UgYWxyZWFkeQorCQkJICogYWRkZWQKKwkJCSAqLworCQkJaWYgKCFwYWdlLT5tYXBwaW5nKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogcGFnZSB3YXMgYWxyZWFkeSB1bmRlciBpbyBhbmQgaXMgbm93IGRvbmUsIGdyZWF0CisJCQkgKi8KKwkJCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQlnb3RvIGZpbGxfaXQ7CisJCQl9CisKKwkJCS8qCisJCQkgKiBuZWVkIHRvIHJlYWQgaW4gdGhlIHBhZ2UKKwkJCSAqLworCQkJZXJyb3IgPSBtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UoaW4sIHBhZ2UpOworCQkJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQkJCS8qCisJCQkJICogV2UgcmVhbGx5IHNob3VsZCByZS1sb29rdXAgdGhlIHBhZ2UgaGVyZSwKKwkJCQkgKiBidXQgaXQgY29tcGxpY2F0ZXMgdGhpbmdzIGEgbG90LiBJbnN0ZWFkCisJCQkJICogbGV0cyBqdXN0IGRvIHdoYXQgd2UgYWxyZWFkeSBzdG9yZWQsIGFuZAorCQkJCSAqIHdlJ2xsIGdldCBpdCB0aGUgbmV4dCB0aW1lIHdlIGFyZSBjYWxsZWQuCisJCQkJICovCisJCQkJaWYgKGVycm9yID09IEFPUF9UUlVOQ0FURURfUEFHRSkKKwkJCQkJZXJyb3IgPSAwOworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBpX3NpemUgbXVzdCBiZSBjaGVja2VkIGFmdGVyIC0+cmVhZHBhZ2UoKS4KKwkJCSAqLworCQkJaXNpemUgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KTsKKwkJCWVuZF9pbmRleCA9IChpc2l6ZSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCQlpZiAodW5saWtlbHkoIWlzaXplIHx8IGluZGV4ID4gZW5kX2luZGV4KSkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIGlmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSwgc2VlIGlmIHdlIG5lZWQgdG8gc2hyaW5rCisJCQkgKiB0aGUgbGVuZ3RoIGFuZCBzdG9wCisJCQkgKi8KKwkJCWlmIChlbmRfaW5kZXggPT0gaW5kZXgpIHsKKwkJCQlsb2ZmID0gUEFHRV9DQUNIRV9TSVpFIC0gKGlzaXplICYgflBBR0VfQ0FDSEVfTUFTSyk7CisJCQkJaWYgKHRvdGFsX2xlbiArIGxvZmYgPiBpc2l6ZSkKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBmb3JjZSBxdWl0IGFmdGVyIGFkZGluZyB0aGlzIHBhZ2UKKwkJCQkgKi8KKwkJCQlsZW4gPSB0aGlzX2xlbjsKKwkJCQl0aGlzX2xlbiA9IG1pbih0aGlzX2xlbiwgbG9mZik7CisJCQkJbG9mZiA9IDA7CisJCQl9CisJCX0KK2ZpbGxfaXQ6CisJCXBhcnRpYWxbcGFnZV9ucl0ub2Zmc2V0ID0gbG9mZjsKKwkJcGFydGlhbFtwYWdlX25yXS5sZW4gPSB0aGlzX2xlbjsKKwkJbGVuIC09IHRoaXNfbGVuOworCQl0b3RhbF9sZW4gKz0gdGhpc19sZW47CisJCWxvZmYgPSAwOworCQlzcGQubnJfcGFnZXMrKzsKKwkJaW5kZXgrKzsKKwl9CisKKwkvKgorCSAqIFJlbGVhc2UgYW55IHBhZ2VzIGF0IHRoZSBlbmQsIGlmIHdlIHF1aXQgZWFybHkuICdpJyBpcyBob3cgZmFyCisJICogd2UgZ290LCAnbnJfcGFnZXMnIGlzIGhvdyBtYW55IHBhZ2VzIGFyZSBpbiB0aGUgbWFwLgorCSAqLworCXdoaWxlIChwYWdlX25yIDwgbnJfcGFnZXMpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1twYWdlX25yKytdKTsKKworCWlmIChzcGQubnJfcGFnZXMpCisJCXJldHVybiBzcGxpY2VfdG9fcGlwZShwaXBlLCAmc3BkKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAotc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3QgaW5vZGUgKnBpcGUsCi0JCQkJIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKKy8qKgorICogZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkIC0gc3BsaWNlIGRhdGEgZnJvbSBmaWxlIHRvIGEgcGlwZQorICogQGluOgkJZmlsZSB0byBzcGxpY2UgZnJvbQorICogQHBpcGU6CXBpcGUgdG8gc3BsaWNlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCisgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncworICoKKyAqIFdpbGwgcmVhZCBwYWdlcyBmcm9tIGdpdmVuIGZpbGUgYW5kIGZpbGwgdGhlbSBpbnRvIGEgcGlwZS4KKyAqLworc3NpemVfdCBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCisJCQkJIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCisJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzc2l6ZV90IHNwbGljZWQ7CiAJaW50IHJldDsKIAogCXJldCA9IDA7CiAJc3BsaWNlZCA9IDA7CisKIAl3aGlsZSAobGVuKSB7Ci0JCXJldCA9IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluLCBwaXBlLCBsZW4pOworCQlyZXQgPSBfX2dlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CiAKLQkJaWYgKHJldCA8PSAwKQorCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOworCQllbHNlIGlmICghcmV0KSB7CisJCQlpZiAoc3BsaWNlZCkKKwkJCQlicmVhazsKKwkJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCi0JCWluLT5mX3BvcyArPSByZXQ7CisJCSpwcG9zICs9IHJldDsKIAkJbGVuIC09IHJldDsKIAkJc3BsaWNlZCArPSByZXQ7CiAJfQpAQCAtMzA3LDM4ICs0OTYsMjggQEAKIAlyZXR1cm4gcmV0OwogfQogCitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCk7CisKIC8qCi0gKiBTZW5kICdsZW4nIGJ5dGVzIHRvIHNvY2tldCBmcm9tICdmaWxlJyBhdCBwb3NpdGlvbiAncG9zJyB1c2luZyBzZW5kcGFnZSgpLgorICogU2VuZCAnc2QtPmxlbicgYnl0ZXMgdG8gc29ja2V0IGZyb20gJ3NkLT5maWxlJyBhdCBwb3NpdGlvbiAnc2QtPnBvcycKKyAqIHVzaW5nIHNlbmRwYWdlKCkuIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQuCiAgKi8KLXN0YXRpYyBpbnQgcGlwZV90b19zZW5kcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvLAorc3RhdGljIGludCBwaXBlX3RvX3NlbmRwYWdlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBzZC0+ZmlsZTsKIAlsb2ZmX3QgcG9zID0gc2QtPnBvczsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXNzaXplX3QgcmV0OwotCXZvaWQgKnB0cjsKKwlpbnQgcmV0LCBtb3JlOwogCi0JLyoKLQkgKiBzdWItb3B0aW1hbCwgYnV0IHdlIGFyZSBsaW1pdGVkIGJ5IHRoZSBwaXBlIC0+bWFwLiB3ZSBkb24ndAotCSAqIG5lZWQgYSBrbWFwJ2VkIGJ1ZmZlciBoZXJlLCB3ZSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHdlCi0JICogaGF2ZSB0aGUgcGFnZSBwaW5uZWQgaWYgdGhlIHBpcGUgcGFnZSBvcmlnaW5hdGVzIGZyb20gdGhlCi0JICogcGFnZSBjYWNoZQotCSAqLwotCXB0ciA9IGJ1Zi0+b3BzLT5tYXAoZmlsZSwgaW5mbywgYnVmKTsKLQlpZiAoSVNfRVJSKHB0cikpCi0JCXJldHVybiBQVFJfRVJSKHB0cik7CisJcmV0ID0gYnVmLT5vcHMtPnBpbihwaXBlLCBidWYpOworCWlmICghcmV0KSB7CisJCW1vcmUgPSAoc2QtPmZsYWdzICYgU1BMSUNFX0ZfTU9SRSkgfHwgc2QtPmxlbiA8IHNkLT50b3RhbF9sZW47CiAKLQlvZmZzZXQgPSBwb3MgJiB+UEFHRV9DQUNIRV9NQVNLOworCQlyZXQgPSBmaWxlLT5mX29wLT5zZW5kcGFnZShmaWxlLCBidWYtPnBhZ2UsIGJ1Zi0+b2Zmc2V0LAorCQkJCQkgICBzZC0+bGVuLCAmcG9zLCBtb3JlKTsKKwl9CiAKLQlyZXQgPSBmaWxlLT5mX29wLT5zZW5kcGFnZShmaWxlLCBidWYtPnBhZ2UsIG9mZnNldCwgc2QtPmxlbiwgJnBvcywKLQkJCQkJc2QtPmxlbiA8IHNkLT50b3RhbF9sZW4pOwotCi0JYnVmLT5vcHMtPnVubWFwKGluZm8sIGJ1Zik7Ci0JaWYgKHJldCA9PSBzZC0+bGVuKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0zNTQsNTggKzUzMyw4NyBAQAogICoJLSBEZXN0aW5hdGlvbiBwYWdlIGRvZXMgbm90IGV4aXN0LCB3ZSBjYW4gYWRkIHRoZSBwaXBlIHBhZ2UgdG8KICAqCSAgdGhlIHBhZ2UgY2FjaGUgYW5kIGF2b2lkIHRoZSBjb3B5LgogICoKLSAqIEZvciBub3cgd2UganVzdCBkbyB0aGUgc2xvd2VyIHRoaW5nIGFuZCBhbHdheXMgY29weSBwYWdlcyBvdmVyLCBpdCdzCi0gKiBlYXNpZXIgdGhhbiBtaWdyYXRpbmcgcGFnZXMgZnJvbSB0aGUgcGlwZSB0byB0aGUgdGFyZ2V0IGZpbGUuIEZvciB0aGUKLSAqIGNhc2Ugb2YgZG9pbmcgZmlsZSB8IGZpbGUgc3BsaWNpbmcsIHRoZSBtaWdyYXRlIGFwcHJvYWNoIGhhZCBzb21lIExSVQotICogbmFzdGluZXNzLi4uCisgKiBJZiBhc2tlZCB0byBtb3ZlIHBhZ2VzIHRvIHRoZSBvdXRwdXQgZmlsZSAoU1BMSUNFX0ZfTU9WRSBpcyBzZXQgaW4KKyAqIHNkLT5mbGFncyksIHdlIGF0dGVtcHQgdG8gbWlncmF0ZSBwYWdlcyBmcm9tIHRoZSBwaXBlIHRvIHRoZSBvdXRwdXQKKyAqIGZpbGUgYWRkcmVzcyBzcGFjZSBwYWdlIGNhY2hlLiBUaGlzIGlzIHBvc3NpYmxlIGlmIG5vIG9uZSBlbHNlIGhhcworICogdGhlIHBpcGUgcGFnZSByZWZlcmVuY2VkIG91dHNpZGUgb2YgdGhlIHBpcGUgYW5kIHBhZ2UgY2FjaGUuIElmCisgKiBTUExJQ0VfRl9NT1ZFIGlzbid0IHNldCwgb3Igd2UgY2Fubm90IG1vdmUgdGhlIHBhZ2UsIHdlIHNpbXBseSBjcmVhdGUKKyAqIGEgbmV3IHBhZ2UgaW4gdGhlIG91dHB1dCBmaWxlIHBhZ2UgY2FjaGUgYW5kIGZpbGwvZGlydHkgdGhhdC4KICAqLwotc3RhdGljIGludCBwaXBlX3RvX2ZpbGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaW5mbywgc3RydWN0IHBpcGVfYnVmZmVyICpidWYsCitzdGF0aWMgaW50IHBpcGVfdG9fZmlsZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiwKIAkJCXN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBzZC0+ZmlsZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWdmcF90IGdmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB0aGlzX2xlbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlwZ29mZl90IGluZGV4OwotCWNoYXIgKnNyYzsKIAlpbnQgcmV0OwogCiAJLyoKLQkgKiBhZnRlciB0aGlzLCBwYWdlIHdpbGwgYmUgbG9ja2VkIGFuZCB1bm1hcHBlZAorCSAqIG1ha2Ugc3VyZSB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlciBpcyB1cHRvZGF0ZQogCSAqLwotCXNyYyA9IGJ1Zi0+b3BzLT5tYXAoZmlsZSwgaW5mbywgYnVmKTsKLQlpZiAoSVNfRVJSKHNyYykpCi0JCXJldHVybiBQVFJfRVJSKHNyYyk7CisJcmV0ID0gYnVmLT5vcHMtPnBpbihwaXBlLCBidWYpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OwogCiAJaW5kZXggPSBzZC0+cG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJb2Zmc2V0ID0gc2QtPnBvcyAmIH5QQUdFX0NBQ0hFX01BU0s7CiAKKwl0aGlzX2xlbiA9IHNkLT5sZW47CisJaWYgKHRoaXNfbGVuICsgb2Zmc2V0ID4gUEFHRV9DQUNIRV9TSVpFKQorCQl0aGlzX2xlbiA9IFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldDsKKwogCS8qCi0JICogcmV1c2UgYnVmIHBhZ2UsIGlmIFNQTElDRV9GX01PVkUgaXMgc2V0CisJICogUmV1c2UgYnVmIHBhZ2UsIGlmIFNQTElDRV9GX01PVkUgaXMgc2V0IGFuZCB3ZSBhcmUgZG9pbmcgYSBmdWxsCisJICogcGFnZS4KIAkgKi8KLQlpZiAoc2QtPmZsYWdzICYgU1BMSUNFX0ZfTU9WRSkgewotCQlpZiAoYnVmLT5vcHMtPnN0ZWFsKGluZm8sIGJ1ZikpCisJaWYgKChzZC0+ZmxhZ3MgJiBTUExJQ0VfRl9NT1ZFKSAmJiB0aGlzX2xlbiA9PSBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJLyoKKwkJICogSWYgc3RlYWwgc3VjY2VlZHMsIGJ1Zi0+cGFnZSBpcyBub3cgcHJ1bmVkIGZyb20gdGhlCisJCSAqIHBhZ2VjYWNoZSBhbmQgd2UgY2FuIHJldXNlIGl0LiBUaGUgcGFnZSB3aWxsIGFsc28gYmUKKwkJICogbG9ja2VkIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuLgorCQkgKi8KKwkJaWYgKGJ1Zi0+b3BzLT5zdGVhbChwaXBlLCBidWYpKQogCQkJZ290byBmaW5kX3BhZ2U7CiAKIAkJcGFnZSA9IGJ1Zi0+cGFnZTsKLQkJaWYgKGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwKLQkJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpKQorCQlpZiAoYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgaW5kZXgsIGdmcF9tYXNrKSkgeworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQlnb3RvIGZpbmRfcGFnZTsKKwkJfQorCisJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOworCisJCWlmICghKGJ1Zi0+ZmxhZ3MgJiBQSVBFX0JVRl9GTEFHX0xSVSkpCisJCQlscnVfY2FjaGVfYWRkKHBhZ2UpOwogCX0gZWxzZSB7CiBmaW5kX3BhZ2U6Ci0JCXJldCA9IC1FTk9NRU07Ci0JCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIGluZGV4LAotCQkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7Ci0JCWlmICghcGFnZSkKLQkJCWdvdG8gb3V0OworCQlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaW5kZXgpOworCQlpZiAoIXBhZ2UpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKG1hcHBpbmcpOworCQkJaWYgKHVubGlrZWx5KCFwYWdlKSkKKwkJCQlnb3RvIG91dF9ub21lbTsKKworCQkJLyoKKwkJCSAqIFRoaXMgd2lsbCBhbHNvIGxvY2sgdGhlIHBhZ2UKKwkJCSAqLworCQkJcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsIGluZGV4LAorCQkJCQkJICAgIGdmcF9tYXNrKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKQorCQkJCWdvdG8gb3V0OworCQl9CiAKIAkJLyoKLQkJICogSWYgdGhlIHBhZ2UgaXMgdXB0b2RhdGUsIGl0IGlzIGFsc28gbG9ja2VkLiBJZiBpdCBpc24ndAotCQkgKiB1cHRvZGF0ZSwgd2UgY2FuIG1hcmsgaXQgdXB0b2RhdGUgaWYgd2UgYXJlIGZpbGxpbmcgdGhlCi0JCSAqIGZ1bGwgcGFnZS4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gcmVhZCBpdCBpbiBmaXJzdC4uLgorCQkgKiBXZSBnZXQgaGVyZSB3aXRoIHRoZSBwYWdlIGxvY2tlZC4gSWYgdGhlIHBhZ2UgaXMgYWxzbworCQkgKiB1cHRvZGF0ZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBtb3JlLiBJZiBpdCBpc24ndCwgd2UKKwkJICogbWF5IG5lZWQgdG8gYnJpbmcgaXQgaW4gaWYgd2UgYXJlIG5vdCBnb2luZyB0byBvdmVyd3JpdGUKKwkJICogdGhlIGZ1bGwgcGFnZS4KIAkJICovCiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCQlpZiAoc2QtPmxlbiA8IFBBR0VfQ0FDSEVfU0laRSkgeworCQkJaWYgKHRoaXNfbGVuIDwgUEFHRV9DQUNIRV9TSVpFKSB7CiAJCQkJcmV0ID0gbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlKGZpbGUsIHBhZ2UpOwogCQkJCWlmICh1bmxpa2VseShyZXQpKQogCQkJCQlnb3RvIG91dDsKQEAgLTQxNCw3ICs2MjIsNyBAQAogCiAJCQkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJCQkJLyoKLQkJCQkJICogcGFnZSBnb3QgaW52YWxpZGF0ZWQsIHJlcGVhdAorCQkJCQkgKiBQYWdlIGdvdCBpbnZhbGlkYXRlZCwgcmVwZWF0LgogCQkJCQkgKi8KIAkJCQkJaWYgKCFwYWdlLT5tYXBwaW5nKSB7CiAJCQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTQyNCw0OCArNjMyLDczIEBACiAJCQkJCXJldCA9IC1FSU87CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJV0FSTl9PTighUGFnZUxvY2tlZChwYWdlKSk7CisJCQl9IGVsc2UKIAkJCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCQl9CiAJCX0KIAl9CiAKLQlyZXQgPSBtYXBwaW5nLT5hX29wcy0+cHJlcGFyZV93cml0ZShmaWxlLCBwYWdlLCAwLCBzZC0+bGVuKTsKLQlpZiAocmV0KQorCXJldCA9IG1hcHBpbmctPmFfb3BzLT5wcmVwYXJlX3dyaXRlKGZpbGUsIHBhZ2UsIG9mZnNldCwgb2Zmc2V0K3RoaXNfbGVuKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KTsKKworCQlpZiAocmV0ICE9IEFPUF9UUlVOQ0FURURfUEFHRSkKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChyZXQgPT0gQU9QX1RSVU5DQVRFRF9QQUdFKQorCQkJZ290byBmaW5kX3BhZ2U7CisKKwkJLyoKKwkJICogcHJlcGFyZV93cml0ZSgpIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKKwkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4KKwkJICovCisJCWlmIChzZC0+cG9zICsgdGhpc19sZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCiAJCWdvdG8gb3V0OwotCi0JaWYgKCFidWYtPnN0b2xlbikgewotCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0KLQkJbWVtY3B5KGRzdCArIG9mZnNldCwgc3JjICsgYnVmLT5vZmZzZXQsIHNkLT5sZW4pOwotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJa3VubWFwX2F0b21pYyhkc3QsIEtNX1VTRVIwKTsKIAl9CiAKLQlyZXQgPSBtYXBwaW5nLT5hX29wcy0+Y29tbWl0X3dyaXRlKGZpbGUsIHBhZ2UsIDAsIHNkLT5sZW4pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwlpZiAoYnVmLT5wYWdlICE9IHBhZ2UpIHsKKwkJLyoKKwkJICogQ2FyZWZ1bCwgLT5tYXAoKSB1c2VzIEtNX1VTRVIwIQorCQkgKi8KKwkJY2hhciAqc3JjID0gYnVmLT5vcHMtPm1hcChwaXBlLCBidWYsIDEpOworCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMSk7CiAKLQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQlyZXQgPSB3cml0ZV9vbmVfcGFnZShwYWdlLCAwKTsKLW91dDoKLQlpZiAocmV0IDwgMCkKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JaWYgKCFidWYtPnN0b2xlbikKKwkJbWVtY3B5KGRzdCArIG9mZnNldCwgc3JjICsgYnVmLT5vZmZzZXQsIHRoaXNfbGVuKTsKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCWt1bm1hcF9hdG9taWMoZHN0LCBLTV9VU0VSMSk7CisJCWJ1Zi0+b3BzLT51bm1hcChwaXBlLCBidWYsIHNyYyk7CisJfQorCisJcmV0ID0gbWFwcGluZy0+YV9vcHMtPmNvbW1pdF93cml0ZShmaWxlLCBwYWdlLCBvZmZzZXQsIG9mZnNldCt0aGlzX2xlbik7CisJaWYgKCFyZXQpIHsKKwkJLyoKKwkJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBhbmQgbWFyayBwYWdlIGFzCisJCSAqIGFjY2Vzc2VkLCB3ZSBhcmUgbm93IGRvbmUhCisJCSAqLworCQlyZXQgPSB0aGlzX2xlbjsKKwkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOworCQliYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKG1hcHBpbmcpOworCX0gZWxzZSBpZiAocmV0ID09IEFPUF9UUlVOQ0FURURfUEFHRSkgewogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JYnVmLT5vcHMtPnVubWFwKGluZm8sIGJ1Zik7CisJCWdvdG8gZmluZF9wYWdlOworCX0KK291dDoKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CitvdXRfbm9tZW06CiAJcmV0dXJuIHJldDsKIH0KIAotdHlwZWRlZiBpbnQgKHNwbGljZV9hY3Rvcikoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKiwKLQkJCSAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqKTsKLQotc3RhdGljIHNzaXplX3QgbW92ZV9mcm9tX3BpcGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCSAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKLQkJCSAgICAgIHNwbGljZV9hY3RvciAqYWN0b3IpCisvKgorICogUGlwZSBpbnB1dCB3b3JrZXIuIE1vc3Qgb2YgdGhpcyBsb2dpYyB3b3JrcyBsaWtlIGEgcmVndWxhciBwaXBlLCB0aGUKKyAqIGtleSBoZXJlIGlzIHRoZSAnYWN0b3InIHdvcmtlciBwYXNzZWQgaW4gdGhhdCBhY3R1YWxseSBtb3ZlcyB0aGUgZGF0YQorICogdG8gdGhlIHdhbnRlZCBkZXN0aW5hdGlvbi4gU2VlIHBpcGVfdG9fZmlsZS9waXBlX3RvX3NlbmRwYWdlIGFib3ZlLgorICovCitzc2l6ZV90IHNwbGljZV9mcm9tX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IGZpbGUgKm91dCwKKwkJCSBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSBzcGxpY2VfYWN0b3IgKmFjdG9yKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmluZm87CiAJaW50IHJldCwgZG9fd2FrZXVwLCBlcnI7CiAJc3RydWN0IHNwbGljZV9kZXNjIHNkOwogCkBAIC00NzUsNTggKzcwOCw2NiBAQAogCXNkLnRvdGFsX2xlbiA9IGxlbjsKIAlzZC5mbGFncyA9IGZsYWdzOwogCXNkLmZpbGUgPSBvdXQ7Ci0Jc2QucG9zID0gb3V0LT5mX3BvczsKKwlzZC5wb3MgPSAqcHBvczsKIAotCW11dGV4X2xvY2soUElQRV9NVVRFWCgqaW5vZGUpKTsKKwlpZiAocGlwZS0+aW5vZGUpCisJCW11dGV4X2xvY2soJnBpcGUtPmlub2RlLT5pX211dGV4KTsKIAotCWluZm8gPSBpbm9kZS0+aV9waXBlOwogCWZvciAoOzspIHsKLQkJaW50IGJ1ZnMgPSBpbmZvLT5ucmJ1ZnM7Ci0KLQkJaWYgKGJ1ZnMpIHsKLQkJCWludCBjdXJidWYgPSBpbmZvLT5jdXJidWY7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IGluZm8tPmJ1ZnMgKyBjdXJidWY7CisJCWlmIChwaXBlLT5ucmJ1ZnMpIHsKKwkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIHBpcGUtPmN1cmJ1ZjsKIAkJCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHMgPSBidWYtPm9wczsKIAogCQkJc2QubGVuID0gYnVmLT5sZW47CiAJCQlpZiAoc2QubGVuID4gc2QudG90YWxfbGVuKQogCQkJCXNkLmxlbiA9IHNkLnRvdGFsX2xlbjsKIAotCQkJZXJyID0gYWN0b3IoaW5mbywgYnVmLCAmc2QpOwotCQkJaWYgKGVycikgeworCQkJZXJyID0gYWN0b3IocGlwZSwgYnVmLCAmc2QpOworCQkJaWYgKGVyciA8PSAwKSB7CiAJCQkJaWYgKCFyZXQgJiYgZXJyICE9IC1FTk9EQVRBKQogCQkJCQlyZXQgPSBlcnI7CiAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmV0ICs9IHNkLmxlbjsKLQkJCWJ1Zi0+b2Zmc2V0ICs9IHNkLmxlbjsKLQkJCWJ1Zi0+bGVuIC09IHNkLmxlbjsKKwkJCXJldCArPSBlcnI7CisJCQlidWYtPm9mZnNldCArPSBlcnI7CisJCQlidWYtPmxlbiAtPSBlcnI7CisKKwkJCXNkLmxlbiAtPSBlcnI7CisJCQlzZC5wb3MgKz0gZXJyOworCQkJc2QudG90YWxfbGVuIC09IGVycjsKKwkJCWlmIChzZC5sZW4pCisJCQkJY29udGludWU7CisKIAkJCWlmICghYnVmLT5sZW4pIHsKIAkJCQlidWYtPm9wcyA9IE5VTEw7Ci0JCQkJb3BzLT5yZWxlYXNlKGluZm8sIGJ1Zik7Ci0JCQkJY3VyYnVmID0gKGN1cmJ1ZiArIDEpICYgKFBJUEVfQlVGRkVSUyAtIDEpOwotCQkJCWluZm8tPmN1cmJ1ZiA9IGN1cmJ1ZjsKLQkJCQlpbmZvLT5ucmJ1ZnMgPSAtLWJ1ZnM7Ci0JCQkJZG9fd2FrZXVwID0gMTsKKwkJCQlvcHMtPnJlbGVhc2UocGlwZSwgYnVmKTsKKwkJCQlwaXBlLT5jdXJidWYgPSAocGlwZS0+Y3VyYnVmICsgMSkgJiAoUElQRV9CVUZGRVJTIC0gMSk7CisJCQkJcGlwZS0+bnJidWZzLS07CisJCQkJaWYgKHBpcGUtPmlub2RlKQorCQkJCQlkb193YWtldXAgPSAxOwogCQkJfQogCi0JCQlzZC5wb3MgKz0gc2QubGVuOwotCQkJc2QudG90YWxfbGVuIC09IHNkLmxlbjsKIAkJCWlmICghc2QudG90YWxfbGVuKQogCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGJ1ZnMpCisJCWlmIChwaXBlLT5ucmJ1ZnMpCiAJCQljb250aW51ZTsKLQkJaWYgKCFQSVBFX1dSSVRFUlMoKmlub2RlKSkKKwkJaWYgKCFwaXBlLT53cml0ZXJzKQogCQkJYnJlYWs7Ci0JCWlmICghUElQRV9XQUlUSU5HX1dSSVRFUlMoKmlub2RlKSkgeworCQlpZiAoIXBpcGUtPndhaXRpbmdfd3JpdGVycykgewogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQogCisJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWlmICghcmV0KQogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKQEAgLTUzNCwxMDggKzc3NSw0OTcgQEAKIAkJfQogCiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsKLQkJCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSxTSUdJTyxQT0xMX09VVCk7CisJCQlzbXBfbWIoKTsKKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmcGlwZS0+d2FpdCk7CisJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJCQlkb193YWtldXAgPSAwOwogCQl9CiAKLQkJcGlwZV93YWl0KGlub2RlKTsKKwkJcGlwZV93YWl0KHBpcGUpOwogCX0KIAotCW11dGV4X3VubG9jayhQSVBFX01VVEVYKCppbm9kZSkpOworCWlmIChwaXBlLT5pbm9kZSkKKwkJbXV0ZXhfdW5sb2NrKCZwaXBlLT5pbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlub2RlKSk7Ci0JCWtpbGxfZmFzeW5jKFBJUEVfRkFTWU5DX1dSSVRFUlMoKmlub2RlKSwgU0lHSU8sIFBPTExfT1VUKTsKKwkJc21wX21iKCk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwaXBlLT53YWl0KSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGlwZS0+d2FpdCk7CisJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAl9CiAKLQltdXRleF9sb2NrKCZvdXQtPmZfbWFwcGluZy0+aG9zdC0+aV9tdXRleCk7Ci0Jb3V0LT5mX3BvcyA9IHNkLnBvczsKLQltdXRleF91bmxvY2soJm91dC0+Zl9tYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwotCiB9CiAKLXNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqb3V0LAotCQkJCSAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorLyoqCisgKiBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlIC0gc3BsaWNlIGRhdGEgZnJvbSBhIHBpcGUgdG8gYSBmaWxlCisgKiBAcGlwZToJcGlwZSBpbmZvCisgKiBAb3V0OglmaWxlIHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCisgKiBAZmxhZ3M6CXNwbGljZSBtb2RpZmllciBmbGFncworICoKKyAqIFdpbGwgZWl0aGVyIG1vdmUgb3IgY29weSBwYWdlcyAoZGV0ZXJtaW5lZCBieSBAZmxhZ3Mgb3B0aW9ucykgZnJvbQorICogdGhlIGdpdmVuIHBpcGUgaW5vZGUgdG8gdGhlIGdpdmVuIGZpbGUuCisgKgorICovCitzc2l6ZV90CitnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkgIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXJldHVybiBtb3ZlX2Zyb21fcGlwZShpbm9kZSwgb3V0LCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOwotfQorCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb3V0LT5mX21hcHBpbmc7CisJc3NpemVfdCByZXQ7CiAKLXNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKm91dCwKLQkJCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIG1vdmVfZnJvbV9waXBlKGlub2RlLCBvdXQsIGxlbiwgZmxhZ3MsIHBpcGVfdG9fc2VuZHBhZ2UpOworCXJldCA9IHNwbGljZV9mcm9tX3BpcGUocGlwZSwgb3V0LCBwcG9zLCBsZW4sIGZsYWdzLCBwaXBlX3RvX2ZpbGUpOworCWlmIChyZXQgPiAwKSB7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCisJCSpwcG9zICs9IHJldDsKKworCQkvKgorCQkgKiBJZiBmaWxlIG9yIGlub2RlIGlzIFNZTkMgYW5kIHdlIGFjdHVhbGx5IHdyb3RlIHNvbWUgZGF0YSwKKwkJICogc3luYyBpdC4KKwkJICovCisJCWlmICh1bmxpa2VseSgob3V0LT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKKwkJCWludCBlcnI7CisKKwkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJCWVyciA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsCisJCQkJCQkgIE9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwkJCWlmIChlcnIpCisJCQkJcmV0ID0gZXJyOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKTsKIAotc3RhdGljIGxvbmcgZG9fc3BsaWNlX2Zyb20oc3RydWN0IGlub2RlICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0LCBzaXplX3QgbGVuLAotCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKQorLyoqCisgKiBnZW5lcmljX3NwbGljZV9zZW5kcGFnZSAtIHNwbGljZSBkYXRhIGZyb20gYSBwaXBlIHRvIGEgc29ja2V0CisgKiBAaW5vZGU6CXBpcGUgaW5vZGUKKyAqIEBvdXQ6CXNvY2tldCB0byB3cml0ZSB0bworICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHNwbGljZQorICogQGZsYWdzOglzcGxpY2UgbW9kaWZpZXIgZmxhZ3MKKyAqCisgKiBXaWxsIHNlbmQgQGxlbiBieXRlcyBmcm9tIHRoZSBwaXBlIHRvIGEgbmV0d29yayBzb2NrZXQuIE5vIGRhdGEgY29weWluZworICogaXMgaW52b2x2ZWQuCisgKgorICovCitzc2l6ZV90IGdlbmVyaWNfc3BsaWNlX3NlbmRwYWdlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkJbG9mZl90ICpwcG9zLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JbG9mZl90IHBvczsKKwlyZXR1cm4gc3BsaWNlX2Zyb21fcGlwZShwaXBlLCBvdXQsIHBwb3MsIGxlbiwgZmxhZ3MsIHBpcGVfdG9fc2VuZHBhZ2UpOworfQorCitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfc3BsaWNlX3NlbmRwYWdlKTsKKworLyoKKyAqIEF0dGVtcHQgdG8gaW5pdGlhdGUgYSBzcGxpY2UgZnJvbSBwaXBlIHRvIGZpbGUuCisgKi8KK3N0YXRpYyBsb25nIGRvX3NwbGljZV9mcm9tKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCisJCQkgICBsb2ZmX3QgKnBwb3MsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKIAlpbnQgcmV0OwogCi0JaWYgKCFvdXQtPmZfb3AgfHwgIW91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKQorCWlmICh1bmxpa2VseSghb3V0LT5mX29wIHx8ICFvdXQtPmZfb3AtPnNwbGljZV93cml0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJaWYgKHVubGlrZWx5KCEob3V0LT5mX21vZGUgJiBGTU9ERV9XUklURSkpKQogCQlyZXR1cm4gLUVCQURGOwogCi0JcG9zID0gb3V0LT5mX3BvczsKLQlyZXQgPSByd192ZXJpZnlfYXJlYShXUklURSwgb3V0LCAmcG9zLCBsZW4pOworCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKFdSSVRFLCBvdXQsIHBwb3MsIGxlbik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIG91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKHBpcGUsIG91dCwgbGVuLCBmbGFncyk7CisJcmV0dXJuIG91dC0+Zl9vcC0+c3BsaWNlX3dyaXRlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBsb25nIGRvX3NwbGljZV90byhzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBpbm9kZSAqcGlwZSwgc2l6ZV90IGxlbiwKKy8qCisgKiBBdHRlbXB0IHRvIGluaXRpYXRlIGEgc3BsaWNlIGZyb20gYSBmaWxlIHRvIGEgcGlwZS4KKyAqLworc3RhdGljIGxvbmcgZG9fc3BsaWNlX3RvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAorCQkJIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCiAJCQkgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWxvZmZfdCBwb3MsIGlzaXplLCBsZWZ0OworCWxvZmZfdCBpc2l6ZSwgbGVmdDsKIAlpbnQgcmV0OwogCi0JaWYgKCFpbi0+Zl9vcCB8fCAhaW4tPmZfb3AtPnNwbGljZV9yZWFkKQorCWlmICh1bmxpa2VseSghaW4tPmZfb3AgfHwgIWluLT5mX29wLT5zcGxpY2VfcmVhZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEoaW4tPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCWlmICh1bmxpa2VseSghKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkpCiAJCXJldHVybiAtRUJBREY7CiAKLQlwb3MgPSBpbi0+Zl9wb3M7Ci0JcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sICZwb3MsIGxlbik7CisJcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIHBwb3MsIGxlbik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCiAJaXNpemUgPSBpX3NpemVfcmVhZChpbi0+Zl9tYXBwaW5nLT5ob3N0KTsKLQlpZiAodW5saWtlbHkoaW4tPmZfcG9zID49IGlzaXplKSkKKwlpZiAodW5saWtlbHkoKnBwb3MgPj0gaXNpemUpKQogCQlyZXR1cm4gMDsKIAkKLQlsZWZ0ID0gaXNpemUgLSBpbi0+Zl9wb3M7Ci0JaWYgKGxlZnQgPCBsZW4pCisJbGVmdCA9IGlzaXplIC0gKnBwb3M7CisJaWYgKHVubGlrZWx5KGxlZnQgPCBsZW4pKQogCQlsZW4gPSBsZWZ0OwogCi0JcmV0dXJuIGluLT5mX29wLT5zcGxpY2VfcmVhZChpbiwgcGlwZSwgbGVuLCBmbGFncyk7CisJcmV0dXJuIGluLT5mX29wLT5zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBsb25nIGRvX3NwbGljZShzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCi0JCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK2xvbmcgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCwKKwkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBpbm9kZSAqcGlwZTsKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOworCWxvbmcgcmV0LCBieXRlczsKKwlsb2ZmX3Qgb3V0X29mZjsKKwl1bW9kZV90IGlfbW9kZTsKKwlpbnQgaTsKIAotCXBpcGUgPSBpbi0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JaWYgKHBpcGUtPmlfcGlwZSkKLQkJcmV0dXJuIGRvX3NwbGljZV9mcm9tKHBpcGUsIG91dCwgbGVuLCBmbGFncyk7CisJLyoKKwkgKiBXZSByZXF1aXJlIHRoZSBpbnB1dCBiZWluZyBhIHJlZ3VsYXIgZmlsZSwgYXMgd2UgZG9uJ3Qgd2FudCB0bworCSAqIHJhbmRvbWx5IGRyb3AgZGF0YSBmb3IgZWcgc29ja2V0IC0+IHNvY2tldCBzcGxpY2luZy4gVXNlIHRoZQorCSAqIHBpcGVkIHNwbGljaW5nIGZvciB0aGF0IQorCSAqLworCWlfbW9kZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlOworCWlmICh1bmxpa2VseSghU19JU1JFRyhpX21vZGUpICYmICFTX0lTQkxLKGlfbW9kZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBpcGUgPSBvdXQtPmZfZGVudHJ5LT5kX2lub2RlOwotCWlmIChwaXBlLT5pX3BpcGUpCi0JCXJldHVybiBkb19zcGxpY2VfdG8oaW4sIHBpcGUsIGxlbiwgZmxhZ3MpOworCS8qCisJICogbmVpdGhlciBpbiBub3Igb3V0IGlzIGEgcGlwZSwgc2V0dXAgYW4gaW50ZXJuYWwgcGlwZSBhdHRhY2hlZCB0bworCSAqICdvdXQnIGFuZCB0cmFuc2ZlciB0aGUgd2FudGVkIGRhdGEgZnJvbSAnaW4nIHRvICdvdXQnIHRocm91Z2ggdGhhdAorCSAqLworCXBpcGUgPSBjdXJyZW50LT5zcGxpY2VfcGlwZTsKKwlpZiAodW5saWtlbHkoIXBpcGUpKSB7CisJCXBpcGUgPSBhbGxvY19waXBlX2luZm8oTlVMTCk7CisJCWlmICghcGlwZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgYW4gaW1tZWRpYXRlIHJlYWRlciwgYnV0IHdlJ2xsIHJlYWQgdGhlIHN0dWZmCisJCSAqIG91dCBvZiB0aGUgcGlwZSByaWdodCBhZnRlciB0aGUgc3BsaWNlX3RvX3BpcGUoKS4gU28gc2V0CisJCSAqIFBJUEVfUkVBREVSUyBhcHByb3ByaWF0ZWx5LgorCQkgKi8KKwkJcGlwZS0+cmVhZGVycyA9IDE7CisKKwkJY3VycmVudC0+c3BsaWNlX3BpcGUgPSBwaXBlOworCX0KKworCS8qCisJICogRG8gdGhlIHNwbGljZS4KKwkgKi8KKwlyZXQgPSAwOworCWJ5dGVzID0gMDsKKwlvdXRfb2ZmID0gMDsKKworCXdoaWxlIChsZW4pIHsKKwkJc2l6ZV90IHJlYWRfbGVuLCBtYXhfcmVhZF9sZW47CisKKwkJLyoKKwkJICogRG8gYXQgbW9zdCBQSVBFX0JVRkZFUlMgcGFnZXMgd29ydGggb2YgdHJhbnNmZXI6CisJCSAqLworCQltYXhfcmVhZF9sZW4gPSBtaW4obGVuLCAoc2l6ZV90KShQSVBFX0JVRkZFUlMqUEFHRV9TSVpFKSk7CisKKwkJcmV0ID0gZG9fc3BsaWNlX3RvKGluLCBwcG9zLCBwaXBlLCBtYXhfcmVhZF9sZW4sIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKworCQlyZWFkX2xlbiA9IHJldDsKKworCQkvKgorCQkgKiBOT1RFOiBub25ibG9ja2luZyBtb2RlIG9ubHkgYXBwbGllcyB0byB0aGUgaW5wdXQuIFdlCisJCSAqIG11c3Qgbm90IGRvIHRoZSBvdXRwdXQgaW4gbm9uYmxvY2tpbmcgbW9kZSBhcyB0aGVuIHdlCisJCSAqIGNvdWxkIGdldCBzdHVjayBkYXRhIGluIHRoZSBpbnRlcm5hbCBwaXBlOgorCQkgKi8KKwkJcmV0ID0gZG9fc3BsaWNlX2Zyb20ocGlwZSwgb3V0LCAmb3V0X29mZiwgcmVhZF9sZW4sCisJCQkJICAgICBmbGFncyAmIH5TUExJQ0VfRl9OT05CTE9DSyk7CisJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkJYnl0ZXMgKz0gcmV0OworCQlsZW4gLT0gcmV0OworCisJCS8qCisJCSAqIEluIG5vbmJsb2NraW5nIG1vZGUsIGlmIHdlIGdvdCBiYWNrIGEgc2hvcnQgcmVhZCB0aGVuCisJCSAqIHRoYXQgd2FzIGR1ZSB0byBlaXRoZXIgYW4gSU8gZXJyb3Igb3IgZHVlIHRvIHRoZQorCQkgKiBwYWdlY2FjaGUgZW50cnkgbm90IGJlaW5nIHRoZXJlLiBJbiB0aGUgSU8gZXJyb3IgY2FzZQorCQkgKiB0aGUgX25leHRfIHNwbGljZSBhdHRlbXB0IHdpbGwgcHJvZHVjZSBhIGNsZWFuIElPIGVycm9yCisJCSAqIHJldHVybiB2YWx1ZSAobm90IGEgc2hvcnQgcmVhZCksIHNvIGluIGJvdGggY2FzZXMgaXQncworCQkgKiBjb3JyZWN0IHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBoZXJlOgorCQkgKi8KKwkJaWYgKChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSAmJiAocmVhZF9sZW4gPCBtYXhfcmVhZF9sZW4pKQorCQkJYnJlYWs7CisJfQorCisJcGlwZS0+bnJidWZzID0gcGlwZS0+Y3VyYnVmID0gMDsKKworCXJldHVybiBieXRlczsKKworb3V0X3JlbGVhc2U6CisJLyoKKwkgKiBJZiB3ZSBkaWQgYW4gaW5jb21wbGV0ZSB0cmFuc2ZlciB3ZSBtdXN0IHJlbGVhc2UKKwkgKiB0aGUgcGlwZSBidWZmZXJzIGluIHF1ZXN0aW9uOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlM7IGkrKykgeworCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBpOworCisJCWlmIChidWYtPm9wcykgeworCQkJYnVmLT5vcHMtPnJlbGVhc2UocGlwZSwgYnVmKTsKKwkJCWJ1Zi0+b3BzID0gTlVMTDsKKwkJfQorCX0KKwlwaXBlLT5ucmJ1ZnMgPSBwaXBlLT5jdXJidWYgPSAwOworCisJLyoKKwkgKiBJZiB3ZSB0cmFuc2ZlcnJlZCBzb21lIGRhdGEsIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzOgorCSAqLworCWlmIChieXRlcyA+IDApCisJCXJldHVybiBieXRlczsKKworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woZG9fc3BsaWNlX2RpcmVjdCk7CisKKy8qCisgKiBEZXRlcm1pbmUgd2hlcmUgdG8gc3BsaWNlIHRvL2Zyb20uCisgKi8KK3N0YXRpYyBsb25nIGRvX3NwbGljZShzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCBfX3VzZXIgKm9mZl9pbiwKKwkJICAgICAgc3RydWN0IGZpbGUgKm91dCwgbG9mZl90IF9fdXNlciAqb2ZmX291dCwKKwkJICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CisJbG9mZl90IG9mZnNldCwgKm9mZjsKKwlsb25nIHJldDsKKworCXBpcGUgPSBpbi0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlpZiAocGlwZSkgeworCQlpZiAob2ZmX2luKQorCQkJcmV0dXJuIC1FU1BJUEU7CisJCWlmIChvZmZfb3V0KSB7CisJCQlpZiAob3V0LT5mX29wLT5sbHNlZWsgPT0gbm9fbGxzZWVrKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZvZmZzZXQsIG9mZl9vdXQsIHNpemVvZihsb2ZmX3QpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCW9mZiA9ICZvZmZzZXQ7CisJCX0gZWxzZQorCQkJb2ZmID0gJm91dC0+Zl9wb3M7CisKKwkJcmV0ID0gZG9fc3BsaWNlX2Zyb20ocGlwZSwgb3V0LCBvZmYsIGxlbiwgZmxhZ3MpOworCisJCWlmIChvZmZfb3V0ICYmIGNvcHlfdG9fdXNlcihvZmZfb3V0LCBvZmYsIHNpemVvZihsb2ZmX3QpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaXBlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCWlmIChwaXBlKSB7CisJCWlmIChvZmZfb3V0KQorCQkJcmV0dXJuIC1FU1BJUEU7CisJCWlmIChvZmZfaW4pIHsKKwkJCWlmIChpbi0+Zl9vcC0+bGxzZWVrID09IG5vX2xsc2VlaykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmb2Zmc2V0LCBvZmZfaW4sIHNpemVvZihsb2ZmX3QpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCW9mZiA9ICZvZmZzZXQ7CisJCX0gZWxzZQorCQkJb2ZmID0gJmluLT5mX3BvczsKKworCQlyZXQgPSBkb19zcGxpY2VfdG8oaW4sIG9mZiwgcGlwZSwgbGVuLCBmbGFncyk7CisKKwkJaWYgKG9mZl9pbiAmJiBjb3B5X3RvX3VzZXIob2ZmX2luLCBvZmYsIHNpemVvZihsb2ZmX3QpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQorLyoKKyAqIE1hcCBhbiBpb3YgaW50byBhbiBhcnJheSBvZiBwYWdlcyBhbmQgb2Zmc2V0L2xlbmd0aCB0dXBwbGVzLiBXaXRoIHRoZQorICogcGFydGlhbF9wYWdlIHN0cnVjdHVyZSwgd2UgY2FuIG1hcCBzZXZlcmFsIG5vbi1jb250aWd1b3VzIHJhbmdlcyBpbnRvCisgKiBvdXIgb25lcyBwYWdlc1tdIG1hcCBpbnN0ZWFkIG9mIHNwbGl0dGluZyB0aGF0IG9wZXJhdGlvbiBpbnRvIHBpZWNlcy4KKyAqIENvdWxkIGVhc2lseSBiZSBleHBvcnRlZCBhcyBhIGdlbmVyaWMgaGVscGVyIGZvciBvdGhlciB1c2VycywgaW4gd2hpY2gKKyAqIGNhc2Ugb25lIHdvdWxkIHByb2JhYmx5IHdhbnQgdG8gYWRkIGEgJ21heF9ucl9wYWdlcycgcGFyYW1ldGVyIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2lvdmVjX3BhZ2VfYXJyYXkoY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqaW92LAorCQkJCXVuc2lnbmVkIGludCBucl92ZWNzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkJCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgKnBhcnRpYWwsIGludCBhbGlnbmVkKQoreworCWludCBidWZmZXJzID0gMCwgZXJyb3IgPSAwOworCisJLyoKKwkgKiBJdCdzIG9rIHRvIHRha2UgdGhlIG1tYXBfc2VtIGZvciByZWFkaW5nLCBldmVuCisJICogYWNyb3NzIGEgImdldF91c2VyKCkiLgorCSAqLworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXdoaWxlIChucl92ZWNzKSB7CisJCXVuc2lnbmVkIGxvbmcgb2ZmLCBucGFnZXM7CisJCXZvaWQgX191c2VyICpiYXNlOworCQlzaXplX3QgbGVuOworCQlpbnQgaTsKKworCQkvKgorCQkgKiBHZXQgdXNlciBhZGRyZXNzIGJhc2UgYW5kIGxlbmd0aCBmb3IgdGhpcyBpb3ZlYy4KKwkJICovCisJCWVycm9yID0gZ2V0X3VzZXIoYmFzZSwgJmlvdi0+aW92X2Jhc2UpOworCQlpZiAodW5saWtlbHkoZXJyb3IpKQorCQkJYnJlYWs7CisJCWVycm9yID0gZ2V0X3VzZXIobGVuLCAmaW92LT5pb3ZfbGVuKTsKKwkJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFNhbml0eSBjaGVjayB0aGlzIGlvdmVjLiAwIHJlYWQgc3VjY2VlZHMuCisJCSAqLworCQlpZiAodW5saWtlbHkoIWxlbikpCisJCQlicmVhazsKKwkJZXJyb3IgPSAtRUZBVUxUOworCQlpZiAodW5saWtlbHkoIWJhc2UpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogR2V0IHRoaXMgYmFzZSBvZmZzZXQgYW5kIG51bWJlciBvZiBwYWdlcywgdGhlbiBtYXAKKwkJICogaW4gdGhlIHVzZXIgcGFnZXMuCisJCSAqLworCQlvZmYgPSAodW5zaWduZWQgbG9uZykgYmFzZSAmIH5QQUdFX01BU0s7CisKKwkJLyoKKwkJICogSWYgYXNrZWQgZm9yIGFsaWdubWVudCwgdGhlIG9mZnNldCBtdXN0IGJlIHplcm8gYW5kIHRoZQorCQkgKiBsZW5ndGggYSBtdWx0aXBsZSBvZiB0aGUgUEFHRV9TSVpFLgorCQkgKi8KKwkJZXJyb3IgPSAtRUlOVkFMOworCQlpZiAoYWxpZ25lZCAmJiAob2ZmIHx8IGxlbiAmIH5QQUdFX01BU0spKQorCQkJYnJlYWs7CisKKwkJbnBhZ2VzID0gKG9mZiArIGxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJCWlmIChucGFnZXMgPiBQSVBFX0JVRkZFUlMgLSBidWZmZXJzKQorCQkJbnBhZ2VzID0gUElQRV9CVUZGRVJTIC0gYnVmZmVyczsKKworCQllcnJvciA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgYmFzZSwgbnBhZ2VzLCAwLCAwLAorCQkJCSAgICAgICAmcGFnZXNbYnVmZmVyc10sIE5VTEwpOworCisJCWlmICh1bmxpa2VseShlcnJvciA8PSAwKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEZpbGwgdGhpcyBjb250aWd1b3VzIHJhbmdlIGludG8gdGhlIHBhcnRpYWwgcGFnZSBtYXAuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZXJyb3I7IGkrKykgeworCQkJY29uc3QgaW50IHBsZW4gPSBtaW5fdChzaXplX3QsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTsKKworCQkJcGFydGlhbFtidWZmZXJzXS5vZmZzZXQgPSBvZmY7CisJCQlwYXJ0aWFsW2J1ZmZlcnNdLmxlbiA9IHBsZW47CisKKwkJCW9mZiA9IDA7CisJCQlsZW4gLT0gcGxlbjsKKwkJCWJ1ZmZlcnMrKzsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRpZG4ndCBjb21wbGV0ZSB0aGlzIGlvdiwgc3RvcCBoZXJlIHNpbmNlIGl0IHByb2JhYmx5CisJCSAqIG1lYW5zIHdlIGhhdmUgdG8gbW92ZSBzb21lIG9mIHRoaXMgaW50byBhIHBpcGUgdG8KKwkJICogYmUgYWJsZSB0byBjb250aW51ZS4KKwkJICovCisJCWlmIChsZW4pCisJCQlicmVhazsKKworCQkvKgorCQkgKiBEb24ndCBjb250aW51ZSBpZiB3ZSBtYXBwZWQgZmV3ZXIgcGFnZXMgdGhhbiB3ZSBhc2tlZCBmb3IsCisJCSAqIG9yIGlmIHdlIG1hcHBlZCB0aGUgbWF4IG51bWJlciBvZiBwYWdlcyB0aGF0IHdlIGhhdmUKKwkJICogcm9vbSBmb3IuCisJCSAqLworCQlpZiAoZXJyb3IgPCBucGFnZXMgfHwgYnVmZmVycyA9PSBQSVBFX0JVRkZFUlMpCisJCQlicmVhazsKKworCQlucl92ZWNzLS07CisJCWlvdisrOworCX0KKworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoYnVmZmVycykKKwkJcmV0dXJuIGJ1ZmZlcnM7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB2bXNwbGljZSBzcGxpY2VzIGEgdXNlciBhZGRyZXNzIHJhbmdlIGludG8gYSBwaXBlLiBJdCBjYW4gYmUgdGhvdWdodCBvZgorICogYXMgc3BsaWNlLWZyb20tbWVtb3J5LCB3aGVyZSB0aGUgcmVndWxhciBzcGxpY2UgaXMgc3BsaWNlLWZyb20tZmlsZSAob3IKKyAqIHRvIGZpbGUpLiBJbiBib3RoIGNhc2VzIHRoZSBvdXRwdXQgaXMgYSBwaXBlLCBuYXR1cmFsbHkuCisgKgorICogTm90ZSB0aGF0IHZtc3BsaWNlIG9ubHkgc3VwcG9ydHMgc3BsaWNpbmcgX2Zyb21fIHVzZXIgbWVtb3J5IHRvIGEgcGlwZSwKKyAqIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gU3BsaWNpbmcgZnJvbSB1c2VyIG1lbW9yeSBpcyBhIHNpbXBsZSBvcGVyYXRpb24KKyAqIHRoYXQgY2FuIGJlIHN1cHBvcnRlZCB3aXRob3V0IGFueSBmdW5reSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIG9yIG5hc3R5CisgKiB2bSB0cmlja3MuIFdlIHNpbXBseSBtYXAgaW4gdGhlIHVzZXIgbWVtb3J5IGFuZCBmaWxsIHRoZW0gaW50byBhIHBpcGUuCisgKiBUaGUgcmV2ZXJzZSBpc24ndCBxdWl0ZSBhcyBlYXN5LCB0aG91Z2guIFRoZXJlIGFyZSB0d28gcG9zc2libGUgc29sdXRpb25zCisgKiBmb3IgdGhhdDoKKyAqCisgKgktIG1lbWNweSgpIHRoZSBkYXRhIGludGVybmFsbHksIGF0IHdoaWNoIHBvaW50IHdlIG1pZ2h0IGFzIHdlbGwganVzdAorICoJICBkbyBhIHJlZ3VsYXIgcmVhZCgpIG9uIHRoZSBidWZmZXIgYW55d2F5LgorICoJLSBMb3RzIG9mIG5hc3R5IHZtIHRyaWNrcywgdGhhdCBhcmUgbmVpdGhlciBmYXN0IG5vciBmbGV4aWJsZSAoaXQKKyAqCSAgaGFzIHJlc3RyaWN0aW9uIGxpbWl0YXRpb25zIG9uIGJvdGggZW5kcyBvZiB0aGUgcGlwZSkuCisgKgorICogQWxhcywgaXQgaXNuJ3QgaGVyZS4KKyAqCisgKi8KK3N0YXRpYyBsb25nIGRvX3Ztc3BsaWNlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICppb3YsCisJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcGlwZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3QgcGFydGlhbF9wYWdlIHBhcnRpYWxbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyBzcGQgPSB7CisJCS5wYWdlcyA9IHBhZ2VzLAorCQkucGFydGlhbCA9IHBhcnRpYWwsCisJCS5mbGFncyA9IGZsYWdzLAorCQkub3BzID0gJnVzZXJfcGFnZV9waXBlX2J1Zl9vcHMsCisJfTsKKworCWlmICh1bmxpa2VseSghcGlwZSkpCisJCXJldHVybiAtRUJBREY7CisJaWYgKHVubGlrZWx5KG5yX3NlZ3MgPiBVSU9fTUFYSU9WKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAodW5saWtlbHkoIW5yX3NlZ3MpKQorCQlyZXR1cm4gMDsKKworCXNwZC5ucl9wYWdlcyA9IGdldF9pb3ZlY19wYWdlX2FycmF5KGlvdiwgbnJfc2VncywgcGFnZXMsIHBhcnRpYWwsCisJCQkJCSAgICBmbGFncyAmIFNQTElDRV9GX0dJRlQpOworCWlmIChzcGQubnJfcGFnZXMgPD0gMCkKKwkJcmV0dXJuIHNwZC5ucl9wYWdlczsKKworCXJldHVybiBzcGxpY2VfdG9fcGlwZShwaXBlLCAmc3BkKTsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c192bXNwbGljZShpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKmlvdiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJbG9uZyBlcnJvcjsKKwlpbnQgZnB1dDsKKworCWVycm9yID0gLUVCQURGOworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dCk7CisJaWYgKGZpbGUpIHsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJZXJyb3IgPSBkb192bXNwbGljZShmaWxlLCBpb3YsIG5yX3NlZ3MsIGZsYWdzKTsKKworCQlmcHV0X2xpZ2h0KGZpbGUsIGZwdXQpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkX2luLCBsb2ZmX3QgX191c2VyICpvZmZfaW4sCisJCQkgICBpbnQgZmRfb3V0LCBsb2ZmX3QgX191c2VyICpvZmZfb3V0LAorCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWxvbmcgZXJyb3I7CiAJc3RydWN0IGZpbGUgKmluLCAqb3V0OwpAQCAtNjQ1LDEzICsxMjc1LDE1IEBACiAJCXJldHVybiAwOwogCiAJZXJyb3IgPSAtRUJBREY7Ci0JaW4gPSBmZ2V0X2xpZ2h0KGZkaW4sICZmcHV0X2luKTsKKwlpbiA9IGZnZXRfbGlnaHQoZmRfaW4sICZmcHV0X2luKTsKIAlpZiAoaW4pIHsKIAkJaWYgKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlvdXQgPSBmZ2V0X2xpZ2h0KGZkb3V0LCAmZnB1dF9vdXQpOworCQkJb3V0ID0gZmdldF9saWdodChmZF9vdXQsICZmcHV0X291dCk7CiAJCQlpZiAob3V0KSB7CiAJCQkJaWYgKG91dC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCQkJCWVycm9yID0gZG9fc3BsaWNlKGluLCBvdXQsIGxlbiwgZmxhZ3MpOworCQkJCQllcnJvciA9IGRvX3NwbGljZShpbiwgb2ZmX2luLAorCQkJCQkJCSAgb3V0LCBvZmZfb3V0LAorCQkJCQkJCSAgbGVuLCBmbGFncyk7CiAJCQkJZnB1dF9saWdodChvdXQsIGZwdXRfb3V0KTsKIAkJCX0KIAkJfQpAQCAtNjYxLDMgKzEyOTMsMTk4IEBACiAKIAlyZXR1cm4gZXJyb3I7CiB9CisKKy8qCisgKiBMaW5rIGNvbnRlbnRzIG9mIGlwaXBlIHRvIG9waXBlLgorICovCitzdGF0aWMgaW50IGxpbmtfcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppcGlwZSwKKwkJICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpvcGlwZSwKKwkJICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBpcGVfYnVmZmVyICppYnVmLCAqb2J1ZjsKKwlpbnQgcmV0LCBkb193YWtldXAsIGksIGlwaXBlX2ZpcnN0OworCisJcmV0ID0gZG9fd2FrZXVwID0gaXBpcGVfZmlyc3QgPSAwOworCisJLyoKKwkgKiBQb3RlbnRpYWwgQUJCQSBkZWFkbG9jaywgd29yayBhcm91bmQgaXQgYnkgb3JkZXJpbmcgbG9jaworCSAqIGdyYWJiaW5nIGJ5IGlub2RlIGFkZHJlc3MuIE90aGVyd2lzZSB0d28gZGlmZmVyZW50IHByb2Nlc3NlcworCSAqIGNvdWxkIGRlYWRsb2NrIChvbmUgZG9pbmcgdGVlIGZyb20gQSAtPiBCLCB0aGUgb3RoZXIgZnJvbSBCIC0+IEEpLgorCSAqLworCWlmIChpcGlwZS0+aW5vZGUgPCBvcGlwZS0+aW5vZGUpIHsKKwkJaXBpcGVfZmlyc3QgPSAxOworCQltdXRleF9sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCQltdXRleF9sb2NrKCZvcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJm9waXBlLT5pbm9kZS0+aV9tdXRleCk7CisJCW11dGV4X2xvY2soJmlwaXBlLT5pbm9kZS0+aV9tdXRleCk7CisJfQorCisJZm9yIChpID0gMDs7IGkrKykgeworCQlpZiAoIW9waXBlLT5yZWFkZXJzKSB7CisJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FUElQRTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpcGlwZS0+bnJidWZzIC0gaSkgeworCQkJaWJ1ZiA9IGlwaXBlLT5idWZzICsgKChpcGlwZS0+Y3VyYnVmICsgaSkgJiAoUElQRV9CVUZGRVJTIC0gMSkpOworCisJCQkvKgorCQkJICogSWYgd2UgaGF2ZSByb29tLCBmaWxsIHRoaXMgYnVmZmVyCisJCQkgKi8KKwkJCWlmIChvcGlwZS0+bnJidWZzIDwgUElQRV9CVUZGRVJTKSB7CisJCQkJaW50IG5idWYgPSAob3BpcGUtPmN1cmJ1ZiArIG9waXBlLT5ucmJ1ZnMpICYgKFBJUEVfQlVGRkVSUyAtIDEpOworCisJCQkJLyoKKwkJCQkgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhpcyBwaXBlIGJ1ZmZlciwKKwkJCQkgKiBzbyB3ZSBjYW4gY29weSB0aGUgY29udGVudHMgb3Zlci4KKwkJCQkgKi8KKwkJCQlpYnVmLT5vcHMtPmdldChpcGlwZSwgaWJ1Zik7CisKKwkJCQlvYnVmID0gb3BpcGUtPmJ1ZnMgKyBuYnVmOworCQkJCSpvYnVmID0gKmlidWY7CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGluaGVyaXQgdGhlIGdpZnQgZmxhZywgd2UgbmVlZCB0bworCQkJCSAqIHByZXZlbnQgbXVsdGlwbGUgc3RlYWxzIG9mIHRoaXMgcGFnZS4KKwkJCQkgKi8KKwkJCQlvYnVmLT5mbGFncyAmPSB+UElQRV9CVUZfRkxBR19HSUZUOworCisJCQkJaWYgKG9idWYtPmxlbiA+IGxlbikKKwkJCQkJb2J1Zi0+bGVuID0gbGVuOworCisJCQkJb3BpcGUtPm5yYnVmcysrOworCQkJCWRvX3dha2V1cCA9IDE7CisJCQkJcmV0ICs9IG9idWYtPmxlbjsKKwkJCQlsZW4gLT0gb2J1Zi0+bGVuOworCisJCQkJaWYgKCFsZW4pCisJCQkJCWJyZWFrOworCQkJCWlmIChvcGlwZS0+bnJidWZzIDwgUElQRV9CVUZGRVJTKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGhhdmUgaW5wdXQgYXZhaWxhYmxlLCBidXQgbm8gb3V0cHV0IHJvb20uCisJCQkgKiBJZiB3ZSBhbHJlYWR5IGNvcGllZCBkYXRhLCByZXR1cm4gdGhhdC4gSWYgd2UKKwkJCSAqIG5lZWQgdG8gZHJvcCB0aGUgb3BpcGUgbG9jaywgaXQgbXVzdCBiZSBvcmRlcmVkCisJCQkgKiBsYXN0IHRvIGF2b2lkIGRlYWRsb2Nrcy4KKwkJCSAqLworCQkJaWYgKChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB8fCAhaXBpcGVfZmlyc3QpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZG9fd2FrZXVwKSB7CisJCQkJc21wX21iKCk7CisJCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm9waXBlLT53YWl0KSkKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvcGlwZS0+d2FpdCk7CisJCQkJa2lsbF9mYXN5bmMoJm9waXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCQkJCWRvX3dha2V1cCA9IDA7CisJCQl9CisKKwkJCW9waXBlLT53YWl0aW5nX3dyaXRlcnMrKzsKKwkJCXBpcGVfd2FpdChvcGlwZSk7CisJCQlvcGlwZS0+d2FpdGluZ193cml0ZXJzLS07CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIE5vIGlucHV0IGJ1ZmZlcnMsIGRvIHRoZSB1c3VhbCBjaGVja3MgZm9yIGF2YWlsYWJsZQorCQkgKiB3cml0ZXJzIGFuZCBibG9ja2luZyBhbmQgd2FpdCBpZiBuZWNlc3NhcnkKKwkJICovCisJCWlmICghaXBpcGUtPndyaXRlcnMpCisJCQlicmVhazsKKwkJaWYgKCFpcGlwZS0+d2FpdGluZ193cml0ZXJzKSB7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIHBpcGVfd2FpdCgpIGRyb3BzIHRoZSBpcGlwZSBtdXRleC4gVG8gYXZvaWQgZGVhZGxvY2tzCisJCSAqIHdpdGggYW5vdGhlciBwcm9jZXNzLCB3ZSBjYW4gb25seSBzYWZlbHkgZG8gdGhhdCBpZgorCQkgKiB0aGUgaXBpcGUgbG9jayBpcyBvcmRlcmVkIGxhc3QuCisJCSAqLworCQlpZiAoKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spIHx8IGlwaXBlX2ZpcnN0KSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZpcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmaXBpcGUtPndhaXQpOworCQlraWxsX2Zhc3luYygmaXBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOworCisJCXBpcGVfd2FpdChpcGlwZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpcGlwZS0+aW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BpcGUtPmlub2RlLT5pX211dGV4KTsKKworCWlmIChkb193YWtldXApIHsKKwkJc21wX21iKCk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZvcGlwZS0+d2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9waXBlLT53YWl0KTsKKwkJa2lsbF9mYXN5bmMoJm9waXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgdGVlKDEpIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3Mgb24gcGlwZXMuIEl0IGRvZXNuJ3QgY29weQorICogYW55IGRhdGEsIGl0IHNpbXBseSByZWZlcmVuY2VzIHRoZSAnaW4nIHBhZ2VzIG9uIHRoZSAnb3V0JyBwaXBlLgorICogVGhlICdmbGFncycgdXNlZCBhcmUgdGhlIFNQTElDRV9GXyogdmFyaWFudHMsIGN1cnJlbnRseSB0aGUgb25seQorICogYXBwbGljYWJsZSBvbmUgaXMgU1BMSUNFX0ZfTk9OQkxPQ0suCisgKi8KK3N0YXRpYyBsb25nIGRvX3RlZShzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBmaWxlICpvdXQsIHNpemVfdCBsZW4sCisJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppcGlwZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKm9waXBlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9waXBlOworCisJLyoKKwkgKiBMaW5rIGlwaXBlIHRvIHRoZSB0d28gb3V0cHV0IHBpcGVzLCBjb25zdW1pbmcgYXMgd2UgZ28gYWxvbmcuCisJICovCisJaWYgKGlwaXBlICYmIG9waXBlKQorCQlyZXR1cm4gbGlua19waXBlKGlwaXBlLCBvcGlwZSwgbGVuLCBmbGFncyk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c190ZWUoaW50IGZkaW4sIGludCBmZG91dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmaWxlICppbjsKKwlpbnQgZXJyb3IsIGZwdXRfaW47CisKKwlpZiAodW5saWtlbHkoIWxlbikpCisJCXJldHVybiAwOworCisJZXJyb3IgPSAtRUJBREY7CisJaW4gPSBmZ2V0X2xpZ2h0KGZkaW4sICZmcHV0X2luKTsKKwlpZiAoaW4pIHsKKwkJaWYgKGluLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCQlpbnQgZnB1dF9vdXQ7CisJCQlzdHJ1Y3QgZmlsZSAqb3V0ID0gZmdldF9saWdodChmZG91dCwgJmZwdXRfb3V0KTsKKworCQkJaWYgKG91dCkgeworCQkJCWlmIChvdXQtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJCQllcnJvciA9IGRvX3RlZShpbiwgb3V0LCBsZW4sIGZsYWdzKTsKKwkJCQlmcHV0X2xpZ2h0KG91dCwgZnB1dF9vdXQpOworCQkJfQorCQl9CisgCQlmcHV0X2xpZ2h0KGluLCBmcHV0X2luKTsKKyAJfQorCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IDk5NDhjYzEuLjBmMjgyZmEgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotI2lmbmRlZiBfX0FSQ0hfV0FOVF9TVEFUNjQKKyNpZiAhZGVmaW5lZChfX0FSQ0hfV0FOVF9TVEFUNjQpIHx8IGRlZmluZWQoX19BUkNIX1dBTlRfU1lTX05FV0ZTVEFUQVQpCiBhc21saW5rYWdlIGxvbmcgc3lzX25ld2ZzdGF0YXQoaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAogCQkJCXN0cnVjdCBzdGF0IF9fdXNlciAqc3RhdGJ1ZiwgaW50IGZsYWcpCiB7CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggODYxNjAwNi4uYWFiNWZmZSAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtNjEsNyArNjEsNyBAQAogICogd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYSBjcmFzaC4KICAqLwogYXNtbGlua2FnZSBsb25nIHN5c19zeW5jX2ZpbGVfcmFuZ2UoaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbmJ5dGVzLAotCQkJCQlpbnQgZmxhZ3MpCisJCQkJCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBmaWxlICpmaWxlOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgKiBgZW5kYnl0ZScgaXMgaW5jbHVzaXZlCiAgKi8KIGludCBkb19zeW5jX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBlbmRieXRlLAotCQkJaW50IGZsYWdzKQorCQkJdW5zaWduZWQgaW50IGZsYWdzKQogewogCWludCByZXQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IGYyNjg4MGEuLjYxMGI1YmQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC00Myw2ICs0Myw3IEBACiAKIAltZW1zZXQoc2QsIDAsIHNpemVvZigqc2QpKTsKIAlhdG9taWNfc2V0KCZzZC0+c19jb3VudCwgMSk7CisJYXRvbWljX3NldCgmc2QtPnNfZXZlbnQsIDApOwogCUlOSVRfTElTVF9IRUFEKCZzZC0+c19jaGlsZHJlbik7CiAJbGlzdF9hZGQoJnNkLT5zX3NpYmxpbmcsICZwYXJlbnRfc2QtPnNfY2hpbGRyZW4pOwogCXNkLT5zX2VsZW1lbnQgPSBlbGVtZW50OwpAQCAtNTAsNyArNTEsNyBAQAogCXJldHVybiBzZDsKIH0KIAotLyoqCisvKgogICoKICAqIFJldHVybiAtRUVYSVNUIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzeXNmcyBlbGVtZW50IHdpdGggdGhlIHNhbWUgbmFtZSBmb3IKICAqIHRoZSBzYW1lIHBhcmVudC4KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA4MzBmNzZmYS4uY2YzNzg2NiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIApAQCAtNTcsNiArNTgsNyBAQAogCXN0cnVjdCBzeXNmc19vcHMJKiBvcHM7CiAJc3RydWN0IHNlbWFwaG9yZQlzZW07CiAJaW50CQkJbmVlZHNfcmVhZF9maWxsOworCWludAkJCWV2ZW50OwogfTsKIAogCkBAIC03Miw2ICs3NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZmlsbF9yZWFkX2J1ZmZlcihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3Qgc3lzZnNfYnVmZmVyICogYnVmZmVyKQogeworCXN0cnVjdCBzeXNmc19kaXJlbnQgKiBzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CiAJc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIgPSB0b19hdHRyKGRlbnRyeSk7CiAJc3RydWN0IGtvYmplY3QgKiBrb2JqID0gdG9fa29iaihkZW50cnktPmRfcGFyZW50KTsKIAlzdHJ1Y3Qgc3lzZnNfb3BzICogb3BzID0gYnVmZmVyLT5vcHM7CkBAIC04Myw2ICs4Niw3IEBACiAJaWYgKCFidWZmZXItPnBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCisJYnVmZmVyLT5ldmVudCA9IGF0b21pY19yZWFkKCZzZC0+c19ldmVudCk7CiAJY291bnQgPSBvcHMtPnNob3coa29iaixhdHRyLGJ1ZmZlci0+cGFnZSk7CiAJYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwgPSAwOwogCUJVR19PTihjb3VudCA+IChzc2l6ZV90KVBBR0VfU0laRSk7CkBAIC0xODMsNyArMTg3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQotCQljb3VudCA9IFBBR0VfU0laRTsKKwkJY291bnQgPSBQQUdFX1NJWkUgLSAxOwogCWVycm9yID0gY29weV9mcm9tX3VzZXIoYnVmZmVyLT5wYWdlLGJ1Zixjb3VudCk7CiAJYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwgPSAxOwogCXJldHVybiBlcnJvciA/IC1FRkFVTFQgOiBjb3VudDsKQEAgLTM0OCwxMiArMzUyLDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFN5c2ZzIGF0dHJpYnV0ZSBmaWxlcyBhcmUgcG9sbGFibGUuICBUaGUgaWRlYSBpcyB0aGF0IHlvdSByZWFkCisgKiB0aGUgY29udGVudCBhbmQgdGhlbiB5b3UgdXNlICdwb2xsJyBvciAnc2VsZWN0JyB0byB3YWl0IGZvcgorICogdGhlIGNvbnRlbnQgdG8gY2hhbmdlLiAgV2hlbiB0aGUgY29udGVudCBjaGFuZ2VzIChhc3N1bWluZyB0aGUKKyAqIG1hbmFnZXIgZm9yIHRoZSBrb2JqZWN0IHN1cHBvcnRzIG5vdGlmaWNhdGlvbiksIHBvbGwgd2lsbAorICogcmV0dXJuIFBPTExFUlJ8UE9MTFBSSSwgYW5kIHNlbGVjdCB3aWxsIHJldHVybiB0aGUgZmQgd2hldGhlcgorICogaXQgaXMgd2FpdGluZyBmb3IgcmVhZCwgd3JpdGUsIG9yIGV4Y2VwdGlvbnMuCisgKiBPbmNlIHBvbGwvc2VsZWN0IGluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgeW91CisgKiBuZWVkIHRvIGNsb3NlIGFuZCByZS1vcGVuIHRoZSBmaWxlLCBhcyBzaW1wbHkgc2Vla2luZyBhbmQgcmVhZGluZworICogYWdhaW4gd2lsbCBub3QgZ2V0IG5ldyBkYXRhLCBvciByZXNldCB0aGUgc3RhdGUgb2YgJ3BvbGwnLgorICogUmVtaW5kZXI6IHRoaXMgb25seSB3b3JrcyBmb3IgYXR0cmlidXRlcyB3aGljaCBhY3RpdmVseSBzdXBwb3J0CisgKiBpdCwgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB0ZXN0IGFuIGF0dHJpYnV0ZSBmcm9tIHVzZXJzcGFjZQorICogdG8gc2VlIGlmIGl0IHN1cHBvcnRzIHBvbGwgKE5ldGhlciAncG9sbCcgb3IgJ3NlbGVjdCcgcmV0dXJuCisgKiBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlKS4gIFdoZW4gaW4gZG91YnQsIHNldCBhIHN1aXRhYmxlIHRpbWVvdXQgdmFsdWUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc3lzZnNfYnVmZmVyICogYnVmZmVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBrb2JqZWN0ICoga29iaiA9IHRvX2tvYmooZmlscC0+Zl9kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QgPSBmaWxwLT5mX2RlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJlcyA9IDA7CisKKwlwb2xsX3dhaXQoZmlscCwgJmtvYmotPnBvbGwsIHdhaXQpOworCisJaWYgKGJ1ZmZlci0+ZXZlbnQgIT0gYXRvbWljX3JlYWQoJnNkLT5zX2V2ZW50KSkgeworCQlyZXMgPSBQT0xMRVJSfFBPTExQUkk7CisJCWJ1ZmZlci0+bmVlZHNfcmVhZF9maWxsID0gMTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzdGVwX2Rvd24oc3RydWN0IGRlbnRyeSAqZGlyLCBjb25zdCBjaGFyICogbmFtZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICogZGU7CisKKwlpZiAoZGlyID09IE5VTEwgfHwgZGlyLT5kX2lub2RlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlkZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIGRpciwgc3RybGVuKG5hbWUpKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChkaXIpOworCWlmIChJU19FUlIoZGUpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZGUtPmRfaW5vZGUgPT0gTlVMTCkgeworCQlkcHV0KGRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBkZTsKK30KKwordm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKiBrLCBjaGFyICpkaXIsIGNoYXIgKmF0dHIpCit7CisJc3RydWN0IGRlbnRyeSAqZGUgPSBrLT5kZW50cnk7CisJaWYgKGRlKQorCQlkZ2V0KGRlKTsKKwlpZiAoZGUgJiYgZGlyKQorCQlkZSA9IHN0ZXBfZG93bihkZSwgZGlyKTsKKwlpZiAoZGUgJiYgYXR0cikKKwkJZGUgPSBzdGVwX2Rvd24oZGUsIGF0dHIpOworCWlmIChkZSkgeworCQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QgPSBkZS0+ZF9mc2RhdGE7CisJCWlmIChzZCkKKwkJCWF0b21pY19pbmMoJnNkLT5zX2V2ZW50KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZrLT5wb2xsKTsKKwkJZHB1dChkZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfbm90aWZ5KTsKKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXNmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQJCT0gc3lzZnNfcmVhZF9maWxlLAogCS53cml0ZQkJPSBzeXNmc193cml0ZV9maWxlLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkub3BlbgkJPSBzeXNmc19vcGVuX2ZpbGUsCiAJLnJlbGVhc2UJPSBzeXNmc19yZWxlYXNlLAorCS5wb2xsCQk9IHN5c2ZzX3BvbGwsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2lub2RlLmMgYi9mcy9zeXNmcy9pbm9kZS5jCmluZGV4IDRjMjlhYzQuLmYwYjM0N2IgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2lub2RlLmMKKysrIGIvZnMvc3lzZnMvaW5vZGUuYwpAQCAtMTc1LDggKzE3NSw3IEBACiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBiaW5fYXR0cjsKIAlzdHJ1Y3Qgc3lzZnNfc3ltbGluayAgKiBzbDsKIAotCWlmICghc2QgfHwgIXNkLT5zX2VsZW1lbnQpCi0JCUJVRygpOworCUJVR19PTighc2QgfHwgIXNkLT5zX2VsZW1lbnQpOwogCiAJc3dpdGNoIChzZC0+c190eXBlKSB7CiAJCWNhc2UgU1lTRlNfRElSOgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3lzZnMuaCBiL2ZzL3N5c2ZzL3N5c2ZzLmgKaW5kZXggMzI5NThhNy4uMzY1MWZmYiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0xMSw2ICsxMSw3IEBACiAKIGV4dGVybiBpbnQgc3lzZnNfYWRkX2ZpbGUoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICosIGludCk7CiBleHRlcm4gdm9pZCBzeXNmc19oYXNoX2FuZF9yZW1vdmUoc3RydWN0IGRlbnRyeSAqIGRpciwgY29uc3QgY2hhciAqIG5hbWUpOworZXh0ZXJuIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2ZpbmQoc3RydWN0IHN5c2ZzX2RpcmVudCAqZGlyLCBjb25zdCBjaGFyICogbmFtZSk7CiAKIGV4dGVybiBpbnQgc3lzZnNfY3JlYXRlX3N1YmRpcihzdHJ1Y3Qga29iamVjdCAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBkZW50cnkgKiopOwogZXh0ZXJuIHZvaWQgc3lzZnNfcmVtb3ZlX3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICopOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9kaXIuYyBiL2ZzL3N5c3YvZGlyLmMKaW5kZXggOGM2NmU5Mi4uZDcwNzQzNCAxMDA2NDQKLS0tIGEvZnMvc3lzdi9kaXIuYworKysgYi9mcy9zeXN2L2Rpci5jCkBAIC0yNTMsOCArMjUzLDcgQEAKIAogCWxvY2tfcGFnZShwYWdlKTsKIAllcnIgPSBtYXBwaW5nLT5hX29wcy0+cHJlcGFyZV93cml0ZShOVUxMLCBwYWdlLCBmcm9tLCB0byk7Ci0JaWYgKGVycikKLQkJQlVHKCk7CisJQlVHX09OKGVycik7CiAJZGUtPmlub2RlID0gMDsKIAllcnIgPSBkaXJfY29tbWl0X2NodW5rKHBhZ2UsIGZyb20sIHRvKTsKIAlkaXJfcHV0X3BhZ2UocGFnZSk7CkBAIC0zNTMsOCArMzUyLDcgQEAKIAogCWxvY2tfcGFnZShwYWdlKTsKIAllcnIgPSBwYWdlLT5tYXBwaW5nLT5hX29wcy0+cHJlcGFyZV93cml0ZShOVUxMLCBwYWdlLCBmcm9tLCB0byk7Ci0JaWYgKGVycikKLQkJQlVHKCk7CisJQlVHX09OKGVycik7CiAJZGUtPmlub2RlID0gY3B1X3RvX2ZzMTYoU1lTVl9TQihpbm9kZS0+aV9zYiksIGlub2RlLT5pX2lubyk7CiAJZXJyID0gZGlyX2NvbW1pdF9jaHVuayhwYWdlLCBmcm9tLCB0byk7CiAJZGlyX3B1dF9wYWdlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCA4MWUwZTg0Li4yOTgzYWZkIDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYworKysgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMzEyLDEyICszMTIsMTAgQEAKIAllcnIgPSAwOwogCiAJYmggPSBpbm9kZV9nZXRibGsoaW5vZGUsIGJsb2NrLCAmZXJyLCAmcGh5cywgJm5ldyk7Ci0JaWYgKGJoKQotCQlCVUcoKTsKKwlCVUdfT04oYmgpOwogCWlmIChlcnIpCiAJCWdvdG8gYWJvcnQ7Ci0JaWYgKCFwaHlzKQotCQlCVUcoKTsKKwlCVUdfT04oIXBoeXMpOwogCiAJaWYgKG5ldykKIAkJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCA2Y2JiZDE2Li40ZDE5MWVmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC04NzAsMTIgKzg3MCwxNCBAQAogCXBnb2ZmX3QgICAgICAgICAgICAgICAgIGVuZF9pbmRleCwgbGFzdF9pbmRleCwgdGxhc3Q7CiAJc3NpemVfdAkJCXNpemUsIGxlbjsKIAlpbnQJCQlmbGFncywgZXJyLCBpb21hcF92YWxpZCA9IDAsIHVwdG9kYXRlID0gMTsKLQlpbnQJCQlwYWdlX2RpcnR5LCBjb3VudCA9IDAsIHRyeWxvY2tfZmxhZyA9IDA7CisJaW50CQkJcGFnZV9kaXJ0eSwgY291bnQgPSAwOworCWludAkJCXRyeWxvY2sgPSAwOwogCWludAkJCWFsbF9iaCA9IHVubWFwcGVkOwogCi0JLyogd2FpdCBmb3Igb3RoZXIgSU8gdGhyZWFkcz8gKi8KLQlpZiAoc3RhcnRpbyAmJiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FICYmIHdiYy0+bm9uYmxvY2tpbmcpKQotCQl0cnlsb2NrX2ZsYWcgfD0gQk1BUElfVFJZTE9DSzsKKwlpZiAoc3RhcnRpbykgeworCQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FICYmIHdiYy0+bm9uYmxvY2tpbmcpCisJCQl0cnlsb2NrIHw9IEJNQVBJX1RSWUxPQ0s7CisJfQogCiAJLyogSXMgdGhpcyBwYWdlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlPyAqLwogCW9mZnNldCA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKQEAgLTk1NiwxNSArOTU4LDEzIEBACiAKIAkJCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSkgewogCQkJCXR5cGUgPSBJT01BUF9VTldSSVRURU47Ci0JCQkJZmxhZ3MgPSBCTUFQSV9XUklURXxCTUFQSV9JR05TVEFURTsKKwkJCQlmbGFncyA9IEJNQVBJX1dSSVRFIHwgQk1BUElfSUdOU1RBVEU7CiAJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9kZWxheShiaCkpIHsKIAkJCQl0eXBlID0gSU9NQVBfREVMQVk7Ci0JCQkJZmxhZ3MgPSBCTUFQSV9BTExPQ0FURTsKLQkJCQlpZiAoIXN0YXJ0aW8pCi0JCQkJCWZsYWdzIHw9IHRyeWxvY2tfZmxhZzsKKwkJCQlmbGFncyA9IEJNQVBJX0FMTE9DQVRFIHwgdHJ5bG9jazsKIAkJCX0gZWxzZSB7CiAJCQkJdHlwZSA9IElPTUFQX05FVzsKLQkJCQlmbGFncyA9IEJNQVBJX1dSSVRFfEJNQVBJX01NQVA7CisJCQkJZmxhZ3MgPSBCTUFQSV9XUklURSB8IEJNQVBJX01NQVA7CiAJCQl9CiAKIAkJCWlmICghaW9tYXBfdmFsaWQpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggOWZiMDMxMi4uMjZmZWQwNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogewogCWFfbGlzdF90CSphZW50cnk7CiAKLQlhZW50cnkgPSBrbWFsbG9jKHNpemVvZihhX2xpc3RfdCksIEdGUF9BVE9NSUMgJiB+X19HRlBfSElHSCk7CisJYWVudHJ5ID0ga21hbGxvYyhzaXplb2YoYV9saXN0X3QpLCBHRlBfTk9XQUlUKTsKIAlpZiAobGlrZWx5KGFlbnRyeSkpIHsKIAkJc3Bpbl9sb2NrKCZhc19sb2NrKTsKIAkJYWVudHJ5LT5uZXh0ID0gYXNfZnJlZV9oZWFkOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IDg1OTk3YjEuLmM4NDc0MTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTY5LDcgKzY5LDYgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfYWlvX3JlYWQoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKQEAgLTkwLDcgKzg5LDYgQEAKIAlyZXR1cm4gX194ZnNfZmlsZV9yZWFkKGlvY2IsIGJ1ZiwgSU9fSVNBSU98SU9fSU5WSVMsIGNvdW50LCBwb3MpOwogfQogCi0KIFNUQVRJQyBpbmxpbmUgc3NpemVfdAogX194ZnNfZmlsZV93cml0ZSgKIAlzdHJ1Y3Qga2lvY2IJKmlvY2IsCkBAIC0xMTMsNyArMTExLDYgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfYWlvX3dyaXRlKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCkBAIC0xMzQsNyArMTMxLDYgQEAKIAlyZXR1cm4gX194ZnNfZmlsZV93cml0ZShpb2NiLCBidWYsIElPX0lTQUlPfElPX0lOVklTLCBjb3VudCwgcG9zKTsKIH0KIAotCiBTVEFUSUMgaW5saW5lIHNzaXplX3QKIF9feGZzX2ZpbGVfcmVhZHYoCiAJc3RydWN0IGZpbGUJCSpmaWxlLApAQCAtMTc5LDcgKzE3NSw2IEBACiAJcmV0dXJuIF9feGZzX2ZpbGVfcmVhZHYoZmlsZSwgaW92LCBJT19JTlZJUywgbnJfc2VncywgcHBvcyk7CiB9CiAKLQogU1RBVElDIGlubGluZSBzc2l6ZV90CiBfX3hmc19maWxlX3dyaXRldigKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUsCkBAIC0yMDQsNyArMTk5LDYgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfd3JpdGV2KAogCXN0cnVjdCBmaWxlCQkqZmlsZSwKQEAgLTIyOCw3ICsyMjIsNyBAQAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX3NlbmRmaWxlKAogCXN0cnVjdCBmaWxlCQkqZmlscCwKLQlsb2ZmX3QJCQkqcHBvcywKKwlsb2ZmX3QJCQkqcG9zLAogCXNpemVfdAkJCWNvdW50LAogCXJlYWRfYWN0b3JfdAkJYWN0b3IsCiAJdm9pZAkJCSp0YXJnZXQpCkBAIC0yMzYsMTAgKzIzMCw4NCBAQAogCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzc2l6ZV90CQkJcnZhbDsKIAotCVZPUF9TRU5ERklMRSh2cCwgZmlscCwgcHBvcywgMCwgY291bnQsIGFjdG9yLCB0YXJnZXQsIE5VTEwsIHJ2YWwpOworCVZPUF9TRU5ERklMRSh2cCwgZmlscCwgcG9zLCAwLCBjb3VudCwgYWN0b3IsIHRhcmdldCwgTlVMTCwgcnZhbCk7CiAJcmV0dXJuIHJ2YWw7CiB9CiAKK1NUQVRJQyBzc2l6ZV90Cit4ZnNfZmlsZV9zZW5kZmlsZV9pbnZpcygKKwlzdHJ1Y3QgZmlsZQkJKmZpbHAsCisJbG9mZl90CQkJKnBvcywKKwlzaXplX3QJCQljb3VudCwKKwlyZWFkX2FjdG9yX3QJCWFjdG9yLAorCXZvaWQJCQkqdGFyZ2V0KQoreworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90CQkJcnZhbDsKKworCVZPUF9TRU5ERklMRSh2cCwgZmlscCwgcG9zLCBJT19JTlZJUywgY291bnQsIGFjdG9yLCB0YXJnZXQsIE5VTEwsIHJ2YWwpOworCXJldHVybiBydmFsOworfQorCitTVEFUSUMgc3NpemVfdAoreGZzX2ZpbGVfc3BsaWNlX3JlYWQoCisJc3RydWN0IGZpbGUJCSppbmZpbHAsCisJbG9mZl90CQkJKnBwb3MsCisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKKwlzaXplX3QJCQlsZW4sCisJdW5zaWduZWQgaW50CQlmbGFncykKK3sKKwl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShpbmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90CQkJcnZhbDsKKworCVZPUF9TUExJQ0VfUkVBRCh2cCwgaW5maWxwLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzLCAwLCBOVUxMLCBydmFsKTsKKwlyZXR1cm4gcnZhbDsKK30KKworU1RBVElDIHNzaXplX3QKK3hmc19maWxlX3NwbGljZV9yZWFkX2ludmlzKAorCXN0cnVjdCBmaWxlCQkqaW5maWxwLAorCWxvZmZfdAkJCSpwcG9zLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCisJc2l6ZV90CQkJbGVuLAorCXVuc2lnbmVkIGludAkJZmxhZ3MpCit7CisJdm5vZGVfdAkJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5maWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3NpemVfdAkJCXJ2YWw7CisKKwlWT1BfU1BMSUNFX1JFQUQodnAsIGluZmlscCwgcHBvcywgcGlwZSwgbGVuLCBmbGFncywgSU9fSU5WSVMsIE5VTEwsIHJ2YWwpOworCXJldHVybiBydmFsOworfQorCitTVEFUSUMgc3NpemVfdAoreGZzX2ZpbGVfc3BsaWNlX3dyaXRlKAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCisJc3RydWN0IGZpbGUJCSpvdXRmaWxwLAorCWxvZmZfdAkJCSpwcG9zLAorCXNpemVfdAkJCWxlbiwKKwl1bnNpZ25lZCBpbnQJCWZsYWdzKQoreworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKG91dGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90CQkJcnZhbDsKKworCVZPUF9TUExJQ0VfV1JJVEUodnAsIHBpcGUsIG91dGZpbHAsIHBwb3MsIGxlbiwgZmxhZ3MsIDAsIE5VTEwsIHJ2YWwpOworCXJldHVybiBydmFsOworfQorCitTVEFUSUMgc3NpemVfdAoreGZzX2ZpbGVfc3BsaWNlX3dyaXRlX2ludmlzKAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCisJc3RydWN0IGZpbGUJCSpvdXRmaWxwLAorCWxvZmZfdAkJCSpwcG9zLAorCXNpemVfdAkJCWxlbiwKKwl1bnNpZ25lZCBpbnQJCWZsYWdzKQoreworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKG91dGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90CQkJcnZhbDsKKworCVZPUF9TUExJQ0VfV1JJVEUodnAsIHBpcGUsIG91dGZpbHAsIHBwb3MsIGxlbiwgZmxhZ3MsIElPX0lOVklTLCBOVUxMLCBydmFsKTsKKwlyZXR1cm4gcnZhbDsKK30KIAogU1RBVElDIGludAogeGZzX2ZpbGVfb3BlbigKQEAgLTI1MSwxMyArMzE5LDEwIEBACiAKIAlpZiAoIShmaWxwLT5mX2ZsYWdzICYgT19MQVJHRUZJTEUpICYmIGlfc2l6ZV9yZWFkKGlub2RlKSA+IE1BWF9OT05fTEZTKQogCQlyZXR1cm4gLUVGQklHOwotCi0JQVNTRVJUKHZwKTsKIAlWT1BfT1BFTih2cCwgTlVMTCwgZXJyb3IpOwogCXJldHVybiAtZXJyb3I7CiB9CiAKLQogU1RBVElDIGludAogeGZzX2ZpbGVfcmVsZWFzZSgKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlLApAQCAtMjcxLDcgKzMzNiw2IEBACiAJcmV0dXJuIC1lcnJvcjsKIH0KIAotCiBTVEFUSUMgaW50CiB4ZnNfZmlsZV9mc3luYygKIAlzdHJ1Y3QgZmlsZQkqZmlscCwKQEAgLTI4NSwyMSArMzQ5LDExIEBACiAKIAlpZiAoZGF0YXN5bmMpCiAJCWZsYWdzIHw9IEZTWU5DX0RBVEE7Ci0KLQlBU1NFUlQodnApOwogCVZPUF9GU1lOQyh2cCwgZmxhZ3MsIE5VTEwsICh4ZnNfb2ZmX3QpMCwgKHhmc19vZmZfdCktMSwgZXJyb3IpOwogCXJldHVybiAtZXJyb3I7CiB9CiAKLS8qCi0gKiB4ZnNfZmlsZV9yZWFkZGlyIG1hcHMgdG8gVk9QX1JFQURESVIoKS4KLSAqIFdlIG5lZWQgdG8gYnVpbGQgYSB1aW8sIGNyZWQsIC4uLgotICovCi0KLSNkZWZpbmUgbmV4dGRwKGRwKSAgICAgICgoc3RydWN0IHhmc19kaXJlbnQgKikoKGNoYXIgKikoZHApICsgKGRwKS0+ZF9yZWNsZW4pKQotCiAjaWZkZWYgQ09ORklHX1hGU19ETUFQSQotCiBTVEFUSUMgc3RydWN0IHBhZ2UgKgogeGZzX3ZtX25vcGFnZSgKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKmFyZWEsCkBAIC0zMTksMTAgKzM3Myw4IEBACiAKIAlyZXR1cm4gZmlsZW1hcF9ub3BhZ2UoYXJlYSwgYWRkcmVzcywgdHlwZSk7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfWEZTX0RNQVBJICovCiAKLQogU1RBVElDIGludAogeGZzX2ZpbGVfcmVhZGRpcigKIAlzdHJ1Y3QgZmlsZQkqZmlscCwKQEAgLTMzMCw3ICszODIsNyBAQAogCWZpbGxkaXJfdAlmaWxsZGlyKQogewogCWludAkJZXJyb3IgPSAwOwotCXZub2RlX3QJCSp2cDsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAl1aW9fdAkJdWlvOwogCWlvdmVjX3QJCWlvdjsKIAlpbnQJCWVvZiA9IDA7CkBAIC0zNDAsOSArMzkyLDYgQEAKIAl4ZnNfb2ZmX3QJc3RhcnRfb2Zmc2V0LCBjdXJyX29mZnNldDsKIAl4ZnNfZGlyZW50X3QJKmRicCA9IE5VTEw7CiAKLQl2cCA9IHZuX2Zyb21faW5vZGUoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOwotCUFTU0VSVCh2cCk7Ci0KIAkvKiBUcnkgZmFpcmx5IGhhcmQgdG8gZ2V0IG1lbW9yeSAqLwogCWRvIHsKIAkJaWYgKChyZWFkX2J1ZiA9IChjYWRkcl90KWttYWxsb2MocmxlbiwgR0ZQX0tFUk5FTCkpKQpAQCAtMzg3LDcgKzQzNiw3IEBACiAJCQl9CiAJCQlzaXplIC09IGRicC0+ZF9yZWNsZW47CiAJCQljdXJyX29mZnNldCA9IChsb2ZmX3QpZGJwLT5kX29mZiAvKiAmIDB4N2ZmZmZmZmYgKi87Ci0JCQlkYnAgPSBuZXh0ZHAoZGJwKTsKKwkJCWRicCA9ICh4ZnNfZGlyZW50X3QgKikoKGNoYXIgKilkYnAgKyBkYnAtPmRfcmVjbGVuKTsKIAkJfQogCX0KIGRvbmU6CkBAIC00MDIsNyArNDUxLDYgQEAKIAlyZXR1cm4gLWVycm9yOwogfQogCi0KIFNUQVRJQyBpbnQKIHhmc19maWxlX21tYXAoCiAJc3RydWN0IGZpbGUJKmZpbHAsCkBAIC00NTcsMTEgKzUwNSwxMCBAQAogCXVuc2lnbmVkIGludAljbWQsCiAJdW5zaWduZWQgbG9uZwlhcmcpCiB7Ci0JaW50CQllcnJvcjsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CisJaW50CQllcnJvcjsKIAotCUFTU0VSVCh2cCk7CiAJVk9QX0lPQ1RMKHZwLCBpbm9kZSwgZmlscCwgSU9fSU5WSVMsIGNtZCwgKHZvaWQgX191c2VyICopYXJnLCBlcnJvcik7CiAJVk1PRElGWSh2cCk7CiAKQEAgLTUzNyw2ICs1ODQsOCBAQAogCS5haW9fcmVhZAk9IHhmc19maWxlX2Fpb19yZWFkLAogCS5haW9fd3JpdGUJPSB4ZnNfZmlsZV9haW9fd3JpdGUsCiAJLnNlbmRmaWxlCT0geGZzX2ZpbGVfc2VuZGZpbGUsCisJLnNwbGljZV9yZWFkCT0geGZzX2ZpbGVfc3BsaWNlX3JlYWQsCisJLnNwbGljZV93cml0ZQk9IHhmc19maWxlX3NwbGljZV93cml0ZSwKIAkudW5sb2NrZWRfaW9jdGwJPSB4ZnNfZmlsZV9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHhmc19maWxlX2NvbXBhdF9pb2N0bCwKQEAgLTU1OCw3ICs2MDcsOSBAQAogCS53cml0ZXYJCT0geGZzX2ZpbGVfd3JpdGV2X2ludmlzLAogCS5haW9fcmVhZAk9IHhmc19maWxlX2Fpb19yZWFkX2ludmlzLAogCS5haW9fd3JpdGUJPSB4ZnNfZmlsZV9haW9fd3JpdGVfaW52aXMsCi0JLnNlbmRmaWxlCT0geGZzX2ZpbGVfc2VuZGZpbGUsCisJLnNlbmRmaWxlCT0geGZzX2ZpbGVfc2VuZGZpbGVfaW52aXMsCisJLnNwbGljZV9yZWFkCT0geGZzX2ZpbGVfc3BsaWNlX3JlYWRfaW52aXMsCisJLnNwbGljZV93cml0ZQk9IHhmc19maWxlX3NwbGljZV93cml0ZV9pbnZpcywKIAkudW5sb2NrZWRfaW9jdGwJPSB4ZnNfZmlsZV9pb2N0bF9pbnZpcywKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHhmc19maWxlX2NvbXBhdF9pbnZpc19pb2N0bCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCAxNDkyMzczLi4yZTJlMjc1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC02NzMsOCArNjczLDcgQEAKIAlpZiAoaWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7CiAJCXZhdHRyLnZhX21hc2sgfD0gWEZTX0FUX0FUSU1FOwogCQl2YXR0ci52YV9hdGltZSA9IGF0dHItPmlhX2F0aW1lOwotCQlpZiAoaWFfdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkKLQkJCWlub2RlLT5pX2F0aW1lID0gYXR0ci0+aWFfYXRpbWU7CisJCWlub2RlLT5pX2F0aW1lID0gYXR0ci0+aWFfYXRpbWU7CiAJfQogCWlmIChpYV92YWxpZCAmIEFUVFJfTVRJTUUpIHsKIAkJdmF0dHIudmFfbWFzayB8PSBYRlNfQVRfTVRJTUU7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCAxZmUwOWYyLi5lOWZlNDNkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTEwMyw2ICsxMDMsNyBAQAogICovCiAjdW5kZWYgIEhBVkVfUkVGQ0FDSEUJLyogcmVmZXJlbmNlIGNhY2hlIG5vdCBuZWVkZWQgZm9yIE5GUyBpbiAyLjYgKi8KICNkZWZpbmUgSEFWRV9TRU5ERklMRQkvKiBzZW5kZmlsZSgyKSBleGlzdHMgaW4gMi42LCBidXQgbm90IGluIDIuNCAqLworI2RlZmluZSBIQVZFX1NQTElDRQkvKiBhIHNwbGljZSgyKSBleGlzdHMgaW4gMi42LCBidXQgbm90IGluIDIuNCAqLwogI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgSEFWRV9QRVJDUFVfU0IJLyogcGVyIGNwdSBzdXBlcmJsb2NrIGNvdW50ZXJzIGFyZSBhIDIuNiBmZWF0dXJlICovCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwppbmRleCA4NGRkZjE4Li42N2VmZTMzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwpAQCAtMzAxLDM2ICszMDEsMjMgQEAKIAl2b2lkCQkJKnRhcmdldCwKIAljcmVkX3QJCQkqY3JlZHApCiB7CisJeGZzX2lub2RlX3QJCSppcCA9IFhGU19CSFZUT0koYmRwKTsKKwl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7CiAJc3NpemVfdAkJCXJldDsKLQl4ZnNfZnNpemVfdAkJbjsKLQl4ZnNfaW5vZGVfdAkJKmlwOwotCXhmc19tb3VudF90CQkqbXA7Ci0Jdm5vZGVfdAkJCSp2cDsKLQotCWlwID0gWEZTX0JIVlRPSShiZHApOwotCXZwID0gQkhWX1RPX1ZOT0RFKGJkcCk7Ci0JbXAgPSBpcC0+aV9tb3VudDsKIAogCVhGU19TVEFUU19JTkMoeHNfcmVhZF9jYWxscyk7Ci0KLQluID0gWEZTX01BWElPRkZTRVQobXApIC0gKm9mZnNldDsKLQlpZiAoKG4gPD0gMCkgfHwgKGNvdW50ID09IDApKQotCQlyZXR1cm4gMDsKLQotCWlmIChuIDwgY291bnQpCi0JCWNvdW50ID0gbjsKLQotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCiAJCXJldHVybiAtRUlPOwogCiAJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAKLQlpZiAoRE1fRVZFTlRfRU5BQkxFRCh2cC0+dl92ZnNwLCBpcCwgRE1fRVZFTlRfUkVBRCkgJiYKKwlpZiAoRE1fRVZFTlRfRU5BQkxFRChCSFZfVE9fVk5PREUoYmRwKS0+dl92ZnNwLCBpcCwgRE1fRVZFTlRfUkVBRCkgJiYKIAkgICAgKCEoaW9mbGFncyAmIElPX0lOVklTKSkpIHsKIAkJdnJ3bG9ja190IGxvY2t0eXBlID0gVlJXTE9DS19SRUFEOwogCQlpbnQgZXJyb3I7CiAKLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCBCSFZfVE9fVk5PREUoYmRwKSwgKm9mZnNldCwgY291bnQsCisJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgQkhWX1RPX1ZOT0RFKGJkcCksCisJCQkJICAgICAgKm9mZnNldCwgY291bnQsCiAJCQkJICAgICAgRklMUF9ERUxBWV9GTEFHKGZpbHApLCAmbG9ja3R5cGUpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CkBAIC0zNDAsMTIgKzMyNyw5OCBAQAogCXhmc19yd19lbnRlcl90cmFjZShYRlNfU0VOREZJTEVfRU5URVIsICZpcC0+aV9pb2NvcmUsCiAJCSAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpdGFyZ2V0LCBjb3VudCwgKm9mZnNldCwgaW9mbGFncyk7CiAJcmV0ID0gZ2VuZXJpY19maWxlX3NlbmRmaWxlKGZpbHAsIG9mZnNldCwgY291bnQsIGFjdG9yLCB0YXJnZXQpOwotCi0JeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQogCWlmIChyZXQgPiAwKQogCQlYRlNfU1RBVFNfQUREKHhzX3JlYWRfYnl0ZXMsIHJldCk7CiAKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCXJldHVybiByZXQ7Cit9CisKK3NzaXplX3QKK3hmc19zcGxpY2VfcmVhZCgKKwliaHZfZGVzY190CQkqYmRwLAorCXN0cnVjdCBmaWxlCQkqaW5maWxwLAorCWxvZmZfdAkJCSpwcG9zLAorCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCisJc2l6ZV90CQkJY291bnQsCisJaW50CQkJZmxhZ3MsCisJaW50CQkJaW9mbGFncywKKwljcmVkX3QJCQkqY3JlZHApCit7CisJeGZzX2lub2RlX3QJCSppcCA9IFhGU19CSFZUT0koYmRwKTsKKwl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7CisJc3NpemVfdAkJCXJldDsKKworCVhGU19TVEFUU19JTkMoeHNfcmVhZF9jYWxscyk7CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQorCQlyZXR1cm4gLUVJTzsKKworCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCisJaWYgKERNX0VWRU5UX0VOQUJMRUQoQkhWX1RPX1ZOT0RFKGJkcCktPnZfdmZzcCwgaXAsIERNX0VWRU5UX1JFQUQpICYmCisJICAgICghKGlvZmxhZ3MgJiBJT19JTlZJUykpKSB7CisJCXZyd2xvY2tfdCBsb2NrdHlwZSA9IFZSV0xPQ0tfUkVBRDsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgQkhWX1RPX1ZOT0RFKGJkcCksCisJCQkJCSpwcG9zLCBjb3VudCwKKwkJCQkJRklMUF9ERUxBWV9GTEFHKGluZmlscCksICZsb2NrdHlwZSk7CisJCWlmIChlcnJvcikgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwkJCXJldHVybiAtZXJyb3I7CisJCX0KKwl9CisJeGZzX3J3X2VudGVyX3RyYWNlKFhGU19TUExJQ0VfUkVBRF9FTlRFUiwgJmlwLT5pX2lvY29yZSwKKwkJCSAgIHBpcGUsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CisJcmV0ID0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluZmlscCwgcHBvcywgcGlwZSwgY291bnQsIGZsYWdzKTsKKwlpZiAocmV0ID4gMCkKKwkJWEZTX1NUQVRTX0FERCh4c19yZWFkX2J5dGVzLCByZXQpOworCisJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwlyZXR1cm4gcmV0OworfQorCitzc2l6ZV90Cit4ZnNfc3BsaWNlX3dyaXRlKAorCWJodl9kZXNjX3QJCSpiZHAsCisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKKwlzdHJ1Y3QgZmlsZQkJKm91dGZpbHAsCisJbG9mZl90CQkJKnBwb3MsCisJc2l6ZV90CQkJY291bnQsCisJaW50CQkJZmxhZ3MsCisJaW50CQkJaW9mbGFncywKKwljcmVkX3QJCQkqY3JlZHApCit7CisJeGZzX2lub2RlX3QJCSppcCA9IFhGU19CSFZUT0koYmRwKTsKKwl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7CisJc3NpemVfdAkJCXJldDsKKworCVhGU19TVEFUU19JTkMoeHNfd3JpdGVfY2FsbHMpOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKKwkJcmV0dXJuIC1FSU87CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisKKwlpZiAoRE1fRVZFTlRfRU5BQkxFRChCSFZfVE9fVk5PREUoYmRwKS0+dl92ZnNwLCBpcCwgRE1fRVZFTlRfV1JJVEUpICYmCisJICAgICghKGlvZmxhZ3MgJiBJT19JTlZJUykpKSB7CisJCXZyd2xvY2tfdCBsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEU7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1dSSVRFLCBCSFZfVE9fVk5PREUoYmRwKSwKKwkJCQkJKnBwb3MsIGNvdW50LAorCQkJCQlGSUxQX0RFTEFZX0ZMQUcob3V0ZmlscCksICZsb2NrdHlwZSk7CisJCWlmIChlcnJvcikgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisJCQlyZXR1cm4gLWVycm9yOworCQl9CisJfQorCXhmc19yd19lbnRlcl90cmFjZShYRlNfU1BMSUNFX1dSSVRFX0VOVEVSLCAmaXAtPmlfaW9jb3JlLAorCQkJICAgcGlwZSwgY291bnQsICpwcG9zLCBpb2ZsYWdzKTsKKwlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHBpcGUsIG91dGZpbHAsIHBwb3MsIGNvdW50LCBmbGFncyk7CisJaWYgKHJldCA+IDApCisJCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7CisKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjMsNyArNDM2LDcgQEAKIAl4ZnNfZnNpemVfdAllbmRfc2l6ZSkKIHsKIAl4ZnNfZmlsZW9mZl90CWxhc3RfZnNiOwotCXhmc19tb3VudF90CSptcDsKKwl4ZnNfbW91bnRfdAkqbXAgPSBpby0+aW9fbW91bnQ7CiAJaW50CQluaW1hcHM7CiAJaW50CQl6ZXJvX29mZnNldDsKIAlpbnQJCXplcm9fbGVuOwpAQCAtMzczLDggKzQ0Niw2IEBACiAKIAlBU1NFUlQoaXNtcmxvY2tlZChpby0+aW9fbG9jaywgTVJfVVBEQVRFKSAhPSAwKTsKIAotCW1wID0gaW8tPmlvX21vdW50OwotCiAJemVyb19vZmZzZXQgPSBYRlNfQl9GU0JfT0ZGU0VUKG1wLCBpc2l6ZSk7CiAJaWYgKHplcm9fb2Zmc2V0ID09IDApIHsKIAkJLyoKQEAgLTQwNSwxMCArNDc2LDkgQEAKIAkgKiBkb24ndCBkZWFkbG9jayB3aGVuIHRoZSBidWZmZXIgY2FjaGUgY2FsbHMgYmFjayB0byB1cy4KIAkgKi8KIAlYRlNfSVVOTE9DSyhtcCwgaW8sIFhGU19JTE9DS19FWENMfCBYRlNfRVhUU0laRV9SRCk7CisKIAlsb2ZmID0gWEZTX0ZTQl9UT19CKG1wLCBsYXN0X2ZzYik7Ci0KIAl6ZXJvX2xlbiA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSAtIHplcm9fb2Zmc2V0OwotCiAJZXJyb3IgPSB4ZnNfaW96ZXJvKGlwLCBsb2ZmICsgemVyb19vZmZzZXQsIHplcm9fbGVuLCBlbmRfc2l6ZSk7CiAKIAlYRlNfSUxPQ0sobXAsIGlvLCBYRlNfSUxPQ0tfRVhDTHxYRlNfRVhUU0laRV9SRCk7CkBAIC00NDEsNyArNTExLDcgQEAKIAl4ZnNfZmlsZW9mZl90CXplcm9fY291bnRfZnNiOwogCXhmc19maWxlb2ZmX3QJbGFzdF9mc2I7CiAJeGZzX2V4dGxlbl90CWJ1Zl9sZW5fZnNiOwotCXhmc19tb3VudF90CSptcDsKKwl4ZnNfbW91bnRfdAkqbXAgPSBpby0+aW9fbW91bnQ7CiAJaW50CQluaW1hcHM7CiAJaW50CQllcnJvciA9IDA7CiAJeGZzX2JtYnRfaXJlY190CWltYXA7CkBAIC00NTAsOCArNTIwLDYgQEAKIAlBU1NFUlQoaXNtcmxvY2tlZChpby0+aW9faW9sb2NrLCBNUl9VUERBVEUpKTsKIAlBU1NFUlQob2Zmc2V0ID4gaXNpemUpOwogCi0JbXAgPSBpby0+aW9fbW91bnQ7Ci0KIAkvKgogCSAqIEZpcnN0IGhhbmRsZSB6ZXJvaW5nIHRoZSBibG9jayBvbiB3aGljaCBpc2l6ZSByZXNpZGVzLgogCSAqIFdlIG9ubHkgemVybyBhIHBhcnQgb2YgdGhhdCBibG9jayBzbyBpdCBpcyBoYW5kbGVkIHNwZWNpYWxseS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmgKaW5kZXggMzg4NjRhOC4uOGY0NTM5OSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmgKQEAgLTYwLDYgKzYwLDggQEAKICNkZWZpbmUJWEZTX0lPTUFQX0FMTE9DX0VOVEVSCTI1CiAjZGVmaW5lCVhGU19JT01BUF9BTExPQ19NQVAJMjYKICNkZWZpbmUJWEZTX0lPTUFQX1VOV1JJVFRFTgkyNworI2RlZmluZSBYRlNfU1BMSUNFX1JFQURfRU5URVIJMjgKKyNkZWZpbmUgWEZTX1NQTElDRV9XUklURV9FTlRFUgkyOQogZXh0ZXJuIHZvaWQgeGZzX3J3X2VudGVyX3RyYWNlKGludCwgc3RydWN0IHhmc19pb2NvcmUgKiwKIAkJCQl2b2lkICosIHNpemVfdCwgbG9mZl90LCBpbnQpOwogZXh0ZXJuIHZvaWQgeGZzX2ludmFsX2NhY2hlZF90cmFjZShzdHJ1Y3QgeGZzX2lvY29yZSAqLApAQCAtNzgsNiArODAsNyBAQAogCQkJc3RydWN0IHhmc19pb21hcCAqLCBpbnQgKik7CiBleHRlcm4gaW50IHhmc2Jkc3RyYXQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKIGV4dGVybiBpbnQgeGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CitleHRlcm4gaW50IHhmc19kZXZfaXNfcmVhZF9vbmx5KHN0cnVjdCB4ZnNfbW91bnQgKiwgY2hhciAqKTsKIAogZXh0ZXJuIGludCB4ZnNfemVyb19lb2Yoc3RydWN0IHZub2RlICosIHN0cnVjdCB4ZnNfaW9jb3JlICosIHhmc19vZmZfdCwKIAkJCQl4ZnNfZnNpemVfdCwgeGZzX2ZzaXplX3QpOwpAQCAtOTAsNyArOTMsMTEgQEAKIGV4dGVybiBzc2l6ZV90IHhmc19zZW5kZmlsZShzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IGZpbGUgKiwKIAkJCQlsb2ZmX3QgKiwgaW50LCBzaXplX3QsIHJlYWRfYWN0b3JfdCwKIAkJCQl2b2lkICosIHN0cnVjdCBjcmVkICopOwotCi1leHRlcm4gaW50IHhmc19kZXZfaXNfcmVhZF9vbmx5KHN0cnVjdCB4ZnNfbW91bnQgKiwgY2hhciAqKTsKK2V4dGVybiBzc2l6ZV90IHhmc19zcGxpY2VfcmVhZChzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IGZpbGUgKiwgbG9mZl90ICosCisJCQkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIGludCwgaW50LAorCQkJCXN0cnVjdCBjcmVkICopOworZXh0ZXJuIHNzaXplX3QgeGZzX3NwbGljZV93cml0ZShzdHJ1Y3QgYmh2X2Rlc2MgKiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLAorCQkJCXN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QsIGludCwgaW50LAorCQkJCXN0cnVjdCBjcmVkICopOwogCiAjZW5kaWYJLyogX19YRlNfTFJXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggMTg4NDMwMC4uNjhmNDc5MyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC02Nyw3ICs2Nyw4IEBACiAKIFNUQVRJQyBzdHJ1Y3QgeGZzX21vdW50X2FyZ3MgKgogeGZzX2FyZ3NfYWxsb2NhdGUoCi0Jc3RydWN0IHN1cGVyX2Jsb2NrCSpzYikKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAorCWludAkJCXNpbGVudCkKIHsKIAlzdHJ1Y3QgeGZzX21vdW50X2FyZ3MJKmFyZ3M7CiAKQEAgLTgwLDggKzgxLDggQEAKIAkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0RJUlNZTkM7CiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfU1lOQ0hST05PVVMpCiAJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9XU1lOQzsKLQotCS8qIERlZmF1bHQgdG8gMzIgYml0IGlub2RlcyBvbiBMaW51eCBhbGwgdGhlIHRpbWUgKi8KKwlpZiAoc2lsZW50KQorCQlhcmdzLT5mbGFncyB8PSBYRlNNTlRfUVVJRVQ7CiAJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UXzMyQklUSU5PREVTOwogCiAJcmV0dXJuIGFyZ3M7CkBAIC03MTksNyArNzIwLDcgQEAKIAljaGFyCQkJKm9wdGlvbnMpCiB7CiAJdmZzX3QJCQkqdmZzcCA9IHZmc19mcm9tX3NiKHNiKTsKLQlzdHJ1Y3QgeGZzX21vdW50X2FyZ3MJKmFyZ3MgPSB4ZnNfYXJnc19hbGxvY2F0ZShzYik7CisJc3RydWN0IHhmc19tb3VudF9hcmdzCSphcmdzID0geGZzX2FyZ3NfYWxsb2NhdGUoc2IsIDApOwogCWludAkJCWVycm9yOwogCiAJVkZTX1BBUlNFQVJHUyh2ZnNwLCBvcHRpb25zLCBhcmdzLCAxLCBlcnJvcik7CkBAIC04MjUsNyArODI2LDcgQEAKIHsKIAl2bm9kZV90CQkJKnJvb3R2cDsKIAlzdHJ1Y3QgdmZzCQkqdmZzcCA9IHZmc19hbGxvY2F0ZShzYik7Ci0Jc3RydWN0IHhmc19tb3VudF9hcmdzCSphcmdzID0geGZzX2FyZ3NfYWxsb2NhdGUoc2IpOworCXN0cnVjdCB4ZnNfbW91bnRfYXJncwkqYXJncyA9IHhmc19hcmdzX2FsbG9jYXRlKHNiLCBzaWxlbnQpOwogCXN0cnVjdCBrc3RhdGZzCQlzdGF0dmZzOwogCWludAkJCWVycm9yLCBlcnJvcjI7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCmluZGV4IDA2ZjU4NDUuLjJhOGUxNmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaApAQCAtMTczLDYgKzE3MywxMiBAQAogdHlwZWRlZiBzc2l6ZV90ICgqdm9wX3NlbmRmaWxlX3QpKGJodl9kZXNjX3QgKiwgc3RydWN0IGZpbGUgKiwKIAkJCQlsb2ZmX3QgKiwgaW50LCBzaXplX3QsIHJlYWRfYWN0b3JfdCwKIAkJCQl2b2lkICosIHN0cnVjdCBjcmVkICopOwordHlwZWRlZiBzc2l6ZV90ICgqdm9wX3NwbGljZV9yZWFkX3QpKGJodl9kZXNjX3QgKiwgc3RydWN0IGZpbGUgKiwgbG9mZl90ICosCisJCQkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIGludCwgaW50LAorCQkJCXN0cnVjdCBjcmVkICopOwordHlwZWRlZiBzc2l6ZV90ICgqdm9wX3NwbGljZV93cml0ZV90KShiaHZfZGVzY190ICosIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwKKwkJCQlzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCBpbnQsIGludCwKKwkJCQlzdHJ1Y3QgY3JlZCAqKTsKIHR5cGVkZWYgaW50CSgqdm9wX2lvY3RsX3QpKGJodl9kZXNjX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosCiAJCQkJaW50LCB1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOwogdHlwZWRlZiBpbnQJKCp2b3BfZ2V0YXR0cl90KShiaHZfZGVzY190ICosIHN0cnVjdCB2YXR0ciAqLCBpbnQsCkBAIC0yMzEsNiArMjM3LDggQEAKIAl2b3BfcmVhZF90CQl2b3BfcmVhZDsKIAl2b3Bfd3JpdGVfdAkJdm9wX3dyaXRlOwogCXZvcF9zZW5kZmlsZV90CQl2b3Bfc2VuZGZpbGU7CisJdm9wX3NwbGljZV9yZWFkX3QJdm9wX3NwbGljZV9yZWFkOworCXZvcF9zcGxpY2Vfd3JpdGVfdAl2b3Bfc3BsaWNlX3dyaXRlOwogCXZvcF9pb2N0bF90CQl2b3BfaW9jdGw7CiAJdm9wX2dldGF0dHJfdAkJdm9wX2dldGF0dHI7CiAJdm9wX3NldGF0dHJfdAkJdm9wX3NldGF0dHI7CkBAIC0yNzYsNiArMjg0LDEwIEBACiAJcnYgPSBfVk9QXyh2b3Bfd3JpdGUsIHZwKSgodnApLT52X2ZiaHYsZmlsZSxpb3Ysc2VncyxvZmZzZXQsaW9mbGFncyxjcikKICNkZWZpbmUgVk9QX1NFTkRGSUxFKHZwLGYsb2ZmLGlvZmxhZ3MsY250LGFjdCx0YXJnLGNyLHJ2KQkJXAogCXJ2ID0gX1ZPUF8odm9wX3NlbmRmaWxlLCB2cCkoKHZwKS0+dl9mYmh2LGYsb2ZmLGlvZmxhZ3MsY250LGFjdCx0YXJnLGNyKQorI2RlZmluZSBWT1BfU1BMSUNFX1JFQUQodnAsZixvLHBpcGUsY250LGZsLGlvZmwsY3IscnYpCQkJXAorCXJ2ID0gX1ZPUF8odm9wX3NwbGljZV9yZWFkLCB2cCkoKHZwKS0+dl9mYmh2LGYsbyxwaXBlLGNudCxmbCxpb2ZsLGNyKQorI2RlZmluZSBWT1BfU1BMSUNFX1dSSVRFKHZwLGYsbyxwaXBlLGNudCxmbCxpb2ZsLGNyLHJ2KQkJCVwKKwlydiA9IF9WT1BfKHZvcF9zcGxpY2Vfd3JpdGUsIHZwKSgodnApLT52X2ZiaHYsZixvLHBpcGUsY250LGZsLGlvZmwsY3IpCiAjZGVmaW5lIFZPUF9CTUFQKHZwLG9mLHN6LHJ3LGIsbixydikJCQkJCVwKIAlydiA9IF9WT1BfKHZvcF9ibWFwLCB2cCkoKHZwKS0+dl9mYmh2LG9mLHN6LHJ3LGIsbikKICNkZWZpbmUgVk9QX09QRU4odnAsIGNyLCBydikJCQkJCQlcCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKaW5kZXggNzNjMWU1ZTguLjdmYjVlY2EgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTI2MjQsNyArMjYyNCw3IEBACiB7CiAJaW50CQllcnJvcjsKIAl4ZnNfbW91bnRfdAkqbXA7Ci0JdWludAkJZGVsYmxrcywgYmxrZmxhZ3M7CisJdWludAkJZGVsYmxrcywgYmxrZmxhZ3MsIHByamZsYWdzID0gMDsKIAl4ZnNfZHF1b3RfdAkqdW5yZXN1ZHEsICp1bnJlc2dkcSwgKmRlbGJsa3N1ZHEsICpkZWxibGtzZ2RxOwogCiAJQVNTRVJUKFhGU19JU0xPQ0tFRF9JTk9ERShpcCkpOwpAQCAtMjY1MCwxMCArMjY1MCwxMyBAQAogCQl9CiAJfQogCWlmIChYRlNfSVNfT1FVT1RBX09OKGlwLT5pX21vdW50KSAmJiBnZHFwKSB7Ci0JCWlmICgoWEZTX0lTX0dRVU9UQV9PTihpcC0+aV9tb3VudCkgJiYKLQkJICAgICBpcC0+aV9kLmRpX2dpZCAhPSBiZTMyX3RvX2NwdShnZHFwLT5xX2NvcmUuZF9pZCkpIHx8Ci0JCSAgICAoWEZTX0lTX1BRVU9UQV9PTihpcC0+aV9tb3VudCkgJiYKLQkJICAgICBpcC0+aV9kLmRpX3Byb2ppZCAhPSBiZTMyX3RvX2NwdShnZHFwLT5xX2NvcmUuZF9pZCkpKSB7CisJCWlmIChYRlNfSVNfUFFVT1RBX09OKGlwLT5pX21vdW50KSAmJgorCQkgICAgIGlwLT5pX2QuZGlfcHJvamlkICE9IGJlMzJfdG9fY3B1KGdkcXAtPnFfY29yZS5kX2lkKSkKKwkJCXByamZsYWdzID0gWEZTX1FNT1BUX0VOT1NQQzsKKworCQlpZiAocHJqZmxhZ3MgfHwKKwkJICAgIChYRlNfSVNfR1FVT1RBX09OKGlwLT5pX21vdW50KSAmJgorCQkgICAgIGlwLT5pX2QuZGlfZ2lkICE9IGJlMzJfdG9fY3B1KGdkcXAtPnFfY29yZS5kX2lkKSkpIHsKIAkJCWRlbGJsa3NnZHEgPSBnZHFwOwogCQkJaWYgKGRlbGJsa3MpIHsKIAkJCQlBU1NFUlQoaXAtPmlfZ2RxdW90KTsKQEAgLTI2NjQsNyArMjY2Nyw3IEBACiAKIAlpZiAoKGVycm9yID0geGZzX3RyYW5zX3Jlc2VydmVfcXVvdGFfYnlkcXVvdHModHAsIGlwLT5pX21vdW50LAogCQkJCWRlbGJsa3N1ZHEsIGRlbGJsa3NnZHEsIGlwLT5pX2QuZGlfbmJsb2NrcywgMSwKLQkJCQlmbGFncyB8IGJsa2ZsYWdzKSkpCisJCQkJZmxhZ3MgfCBibGtmbGFncyB8IHByamZsYWdzKSkpCiAJCXJldHVybiAoZXJyb3IpOwogCiAJLyoKQEAgLTI2ODEsNyArMjY4NCw3IEBACiAJCUFTU0VSVCh1bnJlc3VkcSB8fCB1bnJlc2dkcSk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyhOVUxMLCBpcC0+aV9tb3VudCwKIAkJCQlkZWxibGtzdWRxLCBkZWxibGtzZ2RxLCAoeGZzX3FjbnRfdClkZWxibGtzLCAwLAotCQkJCWZsYWdzIHwgYmxrZmxhZ3MpKSkKKwkJCQlmbGFncyB8IGJsa2ZsYWdzIHwgcHJqZmxhZ3MpKSkKIAkJCXJldHVybiAoZXJyb3IpOwogCQl4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyhOVUxMLCBpcC0+aV9tb3VudCwKIAkJCQl1bnJlc3VkcSwgdW5yZXNnZHEsIC0oKHhmc19xY250X3QpZGVsYmxrcyksIDAsCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKaW5kZXggZDhlMTMxZS4uOTE2ODkxOCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwpAQCAtNTk1LDEyICs1OTUsMTkgQEAKIAl9CiB9CiAKK1NUQVRJQyBpbnQKK3hmc19xdW90YV9lcnJvcih1aW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFhGU19RTU9QVF9FTk9TUEMpCisJCXJldHVybiBFTk9TUEM7CisJcmV0dXJuIEVEUVVPVDsKK30KKwogLyoKICAqIFRoaXMgcmVzZXJ2ZXMgZGlzayBibG9ja3MgYW5kIGlub2RlcyBhZ2FpbnN0IGEgZHF1b3QuCiAgKiBGbGFncyBpbmRpY2F0ZSBpZiB0aGUgZHF1b3QgaXMgdG8gYmUgbG9ja2VkIGhlcmUgYW5kIGFsc28KICAqIGlmIHRoZSBibGsgcmVzZXJ2YXRpb24gaXMgZm9yIFJUIG9yIHJlZ3VsYXIgYmxvY2tzLgogICogU2VuZGluZyBpbiBYRlNfUU1PUFRfRk9SQ0VfUkVTIGZsYWcgc2tpcHMgdGhlIHF1b3RhIGNoZWNrLgotICogUmV0dXJucyBFRFFVT1QgaWYgcXVvdGEgaXMgZXhjZWVkZWQuCiAgKi8KIFNUQVRJQyBpbnQKIHhmc190cmFuc19kcXJlc3YoCkBAIC02NjYsMTkgKzY3MywxNSBAQAogCQkJICovCiAJCQlpZiAoaGFyZGxpbWl0ID4gMFVMTCAmJgogCQkJICAgICAoaGFyZGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7Ci0JCQkJZXJyb3IgPSBFRFFVT1Q7CisJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJfQogCiAJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgogCQkJICAgICAoc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aW1lciBvciB3YXJuaW5ncyBoYXMgZXhwaXJlZCwKLQkJCQkgKiByZXR1cm4gRURRVU9UCi0JCQkJICovCiAJCQkJaWYgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKIAkJCQkgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewotCQkJCQllcnJvciA9IEVEUVVPVDsKKwkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CiAJCQl9CkBAIC02OTUsMTYgKzY5OCwxMiBAQAogCQkJaWYgKCFzb2Z0bGltaXQpCiAJCQkJc29mdGxpbWl0ID0gcS0+cWlfaXNvZnRsaW1pdDsKIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmIGNvdW50ID49IGhhcmRsaW1pdCkgewotCQkJCWVycm9yID0gRURRVU9UOworCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKIAkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCX0gZWxzZSBpZiAoc29mdGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBzb2Z0bGltaXQpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRpbWVyIG9yIHdhcm5pbmdzIGhhcyBleHBpcmVkLAotCQkJCSAqIHJldHVybiBFRFFVT1QKLQkJCQkgKi8KIAkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewotCQkJCQllcnJvciA9IEVEUVVPVDsKKwkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CiAJCQl9CkBAIC03NTEsMTMgKzc1MCwxNCBAQAogCiAKIC8qCi0gKiBHaXZlbiBhIGRxdW90KHMpLCBtYWtlIGRpc2sgYmxvY2sgYW5kL29yIGlub2RlIHJlc2VydmF0aW9ucyBhZ2FpbnN0IHRoZW0uCisgKiBHaXZlbiBkcXVvdChzKSwgbWFrZSBkaXNrIGJsb2NrIGFuZC9vciBpbm9kZSByZXNlcnZhdGlvbnMgYWdhaW5zdCB0aGVtLgogICogVGhlIGZhY3QgdGhhdCB0aGlzIGRvZXMgdGhlIHJlc2VydmF0aW9uIGFnYWluc3QgYm90aCB0aGUgdXNyIGFuZAotICogZ3JwIHF1b3RhcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBmb2xsb3dzIGEgYm90aC1vci1ub3RoaW5nCisgKiBncnAvcHJqIHF1b3RhcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBmb2xsb3dzIGEgYm90aC1vci1ub3RoaW5nCiAgKiBhcHByb2FjaC4KICAqCiAgKiBmbGFncyA9IFhGU19RTU9QVF9EUUxPQ0sgaW5kaWNhdGUgaWYgZHF1b3QocykgbmVlZCB0byBiZSBsb2NrZWQuCiAgKgkgICBYRlNfUU1PUFRfRk9SQ0VfUkVTIGV2YWRlcyBsaW1pdCBlbmZvcmNlbWVudC4gVXNlZCBieSBjaG93bi4KKyAqCSAgIFhGU19RTU9QVF9FTk9TUEMgcmV0dXJucyBFTk9TUEMgbm90IEVEUVVPVC4gIFVzZWQgYnkgcHF1b3RhLgogICoJICAgWEZTX1RSQU5TX0RRX1JFU19CTEtTIHJlc2VydmVzIHJlZ3VsYXIgZGlzayBibG9ja3MKICAqCSAgIFhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHJlc2VydmVzIHJlYWx0aW1lIGRpc2sgYmxvY2tzCiAgKiBkcXVvdHMgYXJlIHVubG9ja2VkIG9uIHJldHVybiwgaWYgdGhleSB3ZXJlIG5vdCBsb2NrZWQgYnkgY2FsbGVyLgpAQCAtNzcyLDI1ICs3NzIsMjcgQEAKIAlsb25nCQluaW5vcywKIAl1aW50CQlmbGFncykKIHsKLQlpbnQJCXJlc3ZkOworCWludAkJcmVzdmQgPSAwLCBlcnJvcjsKIAotCWlmICghIFhGU19JU19RVU9UQV9PTihtcCkpCi0JCXJldHVybiAoMCk7CisJaWYgKCFYRlNfSVNfUVVPVEFfT04obXApKQorCQlyZXR1cm4gMDsKIAogCWlmICh0cCAmJiB0cC0+dF9kcWluZm8gPT0gTlVMTCkKIAkJeGZzX3RyYW5zX2FsbG9jX2RxaW5mbyh0cCk7CiAKIAlBU1NFUlQoZmxhZ3MgJiBYRlNfUU1PUFRfUkVTQkxLX01BU0spOwotCXJlc3ZkID0gMDsKIAogCWlmICh1ZHFwKSB7Ci0JCWlmICh4ZnNfdHJhbnNfZHFyZXN2KHRwLCBtcCwgdWRxcCwgbmJsa3MsIG5pbm9zLCBmbGFncykpCi0JCQlyZXR1cm4gKEVEUVVPVCk7CisJCWVycm9yID0geGZzX3RyYW5zX2RxcmVzdih0cCwgbXAsIHVkcXAsIG5ibGtzLCBuaW5vcywKKwkJCQkJKGZsYWdzICYgflhGU19RTU9QVF9FTk9TUEMpKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCQlyZXN2ZCA9IDE7CiAJfQogCiAJaWYgKGdkcXApIHsKLQkJaWYgKHhmc190cmFuc19kcXJlc3YodHAsIG1wLCBnZHFwLCBuYmxrcywgbmlub3MsIGZsYWdzKSkgeworCQllcnJvciA9IHhmc190cmFuc19kcXJlc3YodHAsIG1wLCBnZHFwLCBuYmxrcywgbmlub3MsIGZsYWdzKTsKKwkJaWYgKGVycm9yKSB7CiAJCQkvKgogCQkJICogY2FuJ3QgZG8gaXQsIHNvIGJhY2tvdXQgcHJldmlvdXMgcmVzZXJ2YXRpb24KIAkJCSAqLwpAQCAtNzk5LDE0ICs4MDEsMTQgQEAKIAkJCQl4ZnNfdHJhbnNfZHFyZXN2KHRwLCBtcCwgdWRxcCwKIAkJCQkJCSAtbmJsa3MsIC1uaW5vcywgZmxhZ3MpOwogCQkJfQotCQkJcmV0dXJuIChFRFFVT1QpOworCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJfQogCiAJLyoKIAkgKiBEaWRuJ3QgY2hhbmdlIGFueXRoaW5nIGNyaXRpY2FsLCBzbywgbm8gbmVlZCB0byBsb2cKIAkgKi8KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAKQEAgLTgxNCw4ICs4MTYsNiBAQAogICogTG9jayB0aGUgZHF1b3QgYW5kIGNoYW5nZSB0aGUgcmVzZXJ2YXRpb24gaWYgd2UgY2FuLgogICogVGhpcyBkb2Vzbid0IGNoYW5nZSB0aGUgYWN0dWFsIHVzYWdlLCBqdXN0IHRoZSByZXNlcnZhdGlvbi4KICAqIFRoZSBpbm9kZSBzZW50IGluIGlzIGxvY2tlZC4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgRURRVU9UIG9yIG90aGVyIGVycm9ycyBvdGhlcndpc2UKICAqLwogU1RBVElDIGludAogeGZzX3RyYW5zX3Jlc2VydmVfcXVvdGFfbmJsa3MoCkBAIC04MjQsMjAgKzgyNCwyNCBAQAogCXhmc19pbm9kZV90CSppcCwKIAlsb25nCQluYmxrcywKIAlsb25nCQluaW5vcywKLQl1aW50CQl0eXBlKQorCXVpbnQJCWZsYWdzKQogewogCWludAkJZXJyb3I7CiAKIAlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOworCWlmIChYRlNfSVNfUFFVT1RBX09OKG1wKSkKKwkJZmxhZ3MgfD0gWEZTX1FNT1BUX0VOT1NQQzsKIAogCUFTU0VSVChpcC0+aV9pbm8gIT0gbXAtPm1fc2Iuc2JfdXF1b3Rpbm8pOwogCUFTU0VSVChpcC0+aV9pbm8gIT0gbXAtPm1fc2Iuc2JfZ3F1b3Rpbm8pOwogCiAJQVNTRVJUKFhGU19JU0xPQ0tFRF9JTk9ERV9FWENMKGlwKSk7CiAJQVNTRVJUKFhGU19JU19RVU9UQV9SVU5OSU5HKGlwLT5pX21vdW50KSk7Ci0JQVNTRVJUKCh0eXBlICYgflhGU19RTU9QVF9GT1JDRV9SRVMpID09IFhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHx8Ci0JICAgICAgICh0eXBlICYgflhGU19RTU9QVF9GT1JDRV9SRVMpID09IFhGU19UUkFOU19EUV9SRVNfQkxLUyk7CisJQVNTRVJUKChmbGFncyAmIH4oWEZTX1FNT1BUX0ZPUkNFX1JFUyB8IFhGU19RTU9QVF9FTk9TUEMpKSA9PQorCQkJCVhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHx8CisJICAgICAgIChmbGFncyAmIH4oWEZTX1FNT1BUX0ZPUkNFX1JFUyB8IFhGU19RTU9QVF9FTk9TUEMpKSA9PQorCQkJCVhGU19UUkFOU19EUV9SRVNfQkxLUyk7CiAKIAkvKgogCSAqIFJlc2VydmUgbmJsa3MgYWdhaW5zdCB0aGVzZSBkcXVvdHMsIHdpdGggdHJhbnMgYXMgdGhlIG1lZGlhdG9yLgpAQCAtODQ1LDggKzg0OSw4IEBACiAJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZV9xdW90YV9ieWRxdW90cyh0cCwgbXAsCiAJCQkJCQkgaXAtPmlfdWRxdW90LCBpcC0+aV9nZHF1b3QsCiAJCQkJCQkgbmJsa3MsIG5pbm9zLAotCQkJCQkJIHR5cGUpOwotCXJldHVybiAoZXJyb3IpOworCQkJCQkJIGZsYWdzKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggNjRlZTA3ZC4uODU1ODIyNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTk0Miw4ICsxOTQyLDEwIEBACiAJCS8qCiAJCSAqIEFsbG9jYXRlIGFzIG1hbnkgYmxvY2tzIGFzIHBvc3NpYmxlIGF0IG9uY2UuCiAJCSAqLwotCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2FnX3ZleHRlbnQoJnRhcmdzKSkpCisJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfYWdfdmV4dGVudCgmdGFyZ3MpKSkgeworCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKIAkJCXJldHVybiBlcnJvcjsKKwkJfQogCQkvKgogCQkgKiBTdG9wIGlmIHdlIHJ1biBvdXQuICBXb24ndCBoYXBwZW4gaWYgY2FsbGVycyBhcmUgb2JleWluZwogCQkgKiB0aGUgcmVzdHJpY3Rpb25zIGNvcnJlY3RseS4gIENhbiBoYXBwZW4gZm9yIGZyZWUgY2FsbHMKQEAgLTE5NjAsNiArMTk2Miw3IEBACiAJCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJfQorCXhmc190cmFuc19icmVsc2UodHAsIGFnZmxicCk7CiAJYXJncy0+YWdicCA9IGFnYnA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IGQzODRlNDguLjI2OTM5ZDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC00NzE5LDE4ICs0NzE5LDE3IEBACiAJCQkJLyoKIAkJCQkgKiBNYWtlIGEgdHJhbnNhY3Rpb24tbGVzcyBxdW90YSByZXNlcnZhdGlvbiBmb3IKIAkJCQkgKiBkZWxheWVkIGFsbG9jYXRpb24gYmxvY2tzLiBUaGlzIG51bWJlciBnZXRzCi0JCQkJICogYWRqdXN0ZWQgbGF0ZXIuCi0JCQkJICogV2UgcmV0dXJuIEVEUVVPVCBpZiB3ZSBoYXZlbid0IGFsbG9jYXRlZAotCQkJCSAqIGJsa3MgYWxyZWFkeSBpbnNpZGUgdGhpcyBsb29wOworCQkJCSAqIGFkanVzdGVkIGxhdGVyLiAgV2UgcmV0dXJuIGlmIHdlIGhhdmVuJ3QKKwkJCQkgKiBhbGxvY2F0ZWQgYmxvY2tzIGFscmVhZHkgaW5zaWRlIHRoaXMgbG9vcC4KIAkJCQkgKi8KLQkJCQlpZiAoWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEFfTkJMS1MoCisJCQkJaWYgKChlcnJvciA9IFhGU19UUkFOU19SRVNFUlZFX1FVT1RBX05CTEtTKAogCQkJCQkJbXAsIE5VTEwsIGlwLCAobG9uZylhbGVuLCAwLAogCQkJCQkJcnQgPyBYRlNfUU1PUFRfUkVTX1JUQkxLUyA6Ci0JCQkJCQkgICAgIFhGU19RTU9QVF9SRVNfUkVHQkxLUykpIHsKKwkJCQkJCSAgICAgWEZTX1FNT1BUX1JFU19SRUdCTEtTKSkpIHsKIAkJCQkJaWYgKG4gPT0gMCkgewogCQkJCQkJKm5tYXAgPSAwOwogCQkJCQkJQVNTRVJUKGN1ciA9PSBOVUxMKTsKLQkJCQkJCXJldHVybiBYRlNfRVJST1IoRURRVU9UKTsKKwkJCQkJCXJldHVybiBlcnJvcjsKIAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuaCBiL2ZzL3hmcy94ZnNfYm1hcC5oCmluZGV4IGY4MzM5OWMuLjhlMGQ3M2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5oCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5oCkBAIC0zNTMsMTAgKzM1MywxMSBAQAogCXhmc19leHRudW1fdAkJbnVtKTsKIAogLyoKLSAqIENhbGwgeGZzX2JtYXBfZG9fc2VhcmNoX2V4dGVudHMoKSB0byBzZWFyY2ggZm9yIHRoZSBleHRlbnQKLSAqIHJlY29yZCBjb250YWluaW5nIGJsb2NrIGJuby4gSWYgaW4gbXVsdGktbGV2ZWwgaW4tY29yZSBleHRlbnQKLSAqIGFsbG9jYXRpb24gbW9kZSwgZmluZCBhbmQgZXh0cmFjdCB0aGUgdGFyZ2V0IGV4dGVudCBidWZmZXIsCi0gKiBvdGhlcndpc2UganVzdCB1c2UgdGhlIGRpcmVjdCBleHRlbnQgbGlzdC4KKyAqIFNlYXJjaCB0aGUgZXh0ZW50IHJlY29yZHMgZm9yIHRoZSBlbnRyeSBjb250YWluaW5nIGJsb2NrIGJuby4KKyAqIElmIGJubyBsaWVzIGluIGEgaG9sZSwgcG9pbnQgdG8gdGhlIG5leHQgZW50cnkuICBJZiBibm8gbGllcworICogcGFzdCBlb2YsICplb2ZwIHdpbGwgYmUgc2V0LCBhbmQgKnByZXZwIHdpbGwgY29udGFpbiB0aGUgbGFzdAorICogZW50cnkgKG51bGwgaWYgbm9uZSkuICBFbHNlLCAqbGFzdHhwIHdpbGwgYmUgc2V0IHRvIHRoZSBpbmRleAorICogb2YgdGhlIGZvdW5kIGVudHJ5OyAqZ290cCB3aWxsIGNvbnRhaW4gdGhlIGVudHJ5LgogICovCiB4ZnNfYm1idF9yZWNfdCAqCiB4ZnNfYm1hcF9zZWFyY2hfbXVsdGlfZXh0ZW50cyhzdHJ1Y3QgeGZzX2lmb3JrICosIHhmc19maWxlb2ZmX3QsIGludCAqLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19jbG50LmggYi9mcy94ZnMveGZzX2NsbnQuaAppbmRleCAwMjJmZmY2Li41YjdlYjgxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2NsbnQuaAorKysgYi9mcy94ZnMveGZzX2NsbnQuaApAQCAtNjgsNiArNjgsNyBAQAogCQkJCQkJICogZW5mb3JjZW1lbnQgKi8KICNkZWZpbmUgWEZTTU5UX1BRVU9UQUVORgkweDAwMDAwMDQwCS8qIElSSVggcHJvamVjdCBxdW90YSBsaW1pdAogCQkJCQkJICogZW5mb3JjZW1lbnQgKi8KKyNkZWZpbmUgWEZTTU5UX1FVSUVUCQkweDAwMDAwMDgwCS8qIGRvbid0IHJlcG9ydCBtb3VudCBlcnJvcnMgKi8KICNkZWZpbmUgWEZTTU5UX05PQUxJR04JCTB4MDAwMDAyMDAJLyogZG9uJ3QgYWxsb2NhdGUgYXQKIAkJCQkJCSAqIHN0cmlwZSBib3VuZGFyaWVzKi8KICNkZWZpbmUgWEZTTU5UX1JFVEVSUgkJMHgwMDAwMDQwMAkvKiByZXR1cm4gZXJyb3IgdG8gdXNlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19lcnJvci5oIGIvZnMveGZzL3hmc19lcnJvci5oCmluZGV4IDI2YjhlNzAuLmJjNDMxNjMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXJyb3IuaAorKysgYi9mcy94ZnMveGZzX2Vycm9yLmgKQEAgLTE4Niw0ICsxODYsNyBAQAogI2RlZmluZSB4ZnNfZnNfcmVwYWlyX2Ntbl9lcnIobGV2ZWwsIG1wLCBmbXQsIGFyZ3MuLi4pIFwKIAl4ZnNfZnNfY21uX2VycihsZXZlbCwgbXAsIGZtdCAiICBVbm1vdW50IGFuZCBydW4geGZzX3JlcGFpci4iLCAjIyBhcmdzKQogCisjZGVmaW5lIHhmc19mc19tb3VudF9jbW5fZXJyKGYsIGZtdCwgYXJncy4uLikgXAorCSgoZiAmIFhGU19NRlNJX1FVSUVUKT8gY21uX2VycihDRV9XQVJOLCAiWEZTOiAiIGZtdCwgIyMgYXJncykgOiAodm9pZCkwKQorCiAjZW5kaWYJLyogX19YRlNfRVJST1JfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCA0ZWViODU2Li5kZWRkYmQwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTE1OCw5ICsxNTgsMTAgQEAKICAJICovCiAJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CiAJbmV3aW5vID0gYmUzMl90b19jcHUoYWdpLT5hZ2lfbmV3aW5vKTsKLQlpZihsaWtlbHkobmV3aW5vICE9IE5VTExBR0lOTykpIHsKLQkJYXJncy5hZ2JubyA9IFhGU19BR0lOT19UT19BR0JOTyhhcmdzLm1wLCBuZXdpbm8pICsKLQkJCQlYRlNfSUFMTE9DX0JMT0NLUyhhcmdzLm1wKTsKKwlhcmdzLmFnYm5vID0gWEZTX0FHSU5PX1RPX0FHQk5PKGFyZ3MubXAsIG5ld2lubykgKworCQkJWEZTX0lBTExPQ19CTE9DS1MoYXJncy5tcCk7CisJaWYgKGxpa2VseShuZXdpbm8gIT0gTlVMTEFHSU5PICYmCisJCSAgKGFyZ3MuYWdibm8gPCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9sZW5ndGgpKSkpIHsKIAkJYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MubXAsCiAJCQkJYmUzMl90b19jcHUoYWdpLT5hZ2lfc2Vxbm8pLCBhcmdzLmFnYm5vKTsKIAkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9USElTX0JOTzsKQEAgLTE4Miw4ICsxODMsOCBAQAogCQkgKiBTZXQgdGhlIGFsaWdubWVudCBmb3IgdGhlIGFsbG9jYXRpb24uCiAJCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uIHRoZW4gYWxpZ24gYXQgc3RyaXBlIHVuaXQKIAkJICogYm91bmRhcnkuCi0JCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jayAKLQkJICogdGhlbiB3ZSdyZSBkb2luZyBJL08gZm9yIGlub2RlcyBpbiBmaWxlc3lzdGVtIGJsb2NrIHNpemUgCisJCSAqIElmIHRoZSBjbHVzdGVyIHNpemUgaXMgc21hbGxlciB0aGFuIGEgZmlsZXN5c3RlbSBibG9jaworCQkgKiB0aGVuIHdlJ3JlIGRvaW5nIEkvTyBmb3IgaW5vZGVzIGluIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZQogCQkgKiBwaWVjZXMsIHNvIGRvbid0IG5lZWQgYWxpZ25tZW50IGFueXdheS4KIAkJICovCiAJCWlzYWxpZ25lZCA9IDA7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAkJCWFyZ3MuYWxpZ25tZW50ID0gYXJncy5tcC0+bV9kYWxpZ247CiAJCQlpc2FsaWduZWQgPSAxOwogCQl9IGVsc2UgaWYgKFhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKCZhcmdzLm1wLT5tX3NiKSAmJgotCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49IAorCQkJICAgYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49CiAJCQkgICBYRlNfQl9UT19GU0JUKGFyZ3MubXAsCiAJCQkgIAlYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKGFyZ3MubXApKSkKIAkJCQlhcmdzLmFsaWdubWVudCA9IGFyZ3MubXAtPm1fc2Iuc2JfaW5vYWxpZ25tdDsKQEAgLTIyMCw3ICsyMjEsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9Ci0gCisKIAkvKgogCSAqIElmIHN0cmlwZSBhbGlnbm1lbnQgaXMgdHVybmVkIG9uLCB0aGVuIHRyeSBhZ2FpbiB3aXRoIGNsdXN0ZXIKIAkgKiBhbGlnbm1lbnQuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IGJiMzMxMTMuLmI1Mzg1NDMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC00MjEsNyArNDIxLDEwIEBACiAJCQlpcC0+aV9jaGFzaCA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX2lwID0gaXA7CiAJCQljaGxuZXctPmNobF9ibGtubyA9IGlwLT5pX2Jsa25vOworCQkJaWYgKGNoLT5jaF9saXN0KQorCQkJCWNoLT5jaF9saXN0LT5jaGxfcHJldiA9IGNobG5ldzsKIAkJCWNobG5ldy0+Y2hsX25leHQgPSBjaC0+Y2hfbGlzdDsKKwkJCWNobG5ldy0+Y2hsX3ByZXYgPSBOVUxMOwogCQkJY2gtPmNoX2xpc3QgPSBjaGxuZXc7CiAJCQljaGxuZXcgPSBOVUxMOwogCQl9CkBAIC03MjMsMjMgKzcyNiwxNSBAQAogCQlBU1NFUlQoaXAtPmlfY25leHQgPT0gaXAgJiYgaXAtPmlfY3ByZXYgPT0gaXApOwogCQlBU1NFUlQoaXAtPmlfY2hhc2ggIT0gTlVMTCk7CiAJCWNobT1OVUxMOwotCQlmb3IgKGNobCA9IGNoLT5jaF9saXN0OyBjaGwgIT0gTlVMTDsgY2hsID0gY2hsLT5jaGxfbmV4dCkgewotCQkJaWYgKGNobC0+Y2hsX2Jsa25vID09IGlwLT5pX2Jsa25vKSB7Ci0JCQkJaWYgKGNobSA9PSBOVUxMKSB7Ci0JCQkJCS8qIGZpcnN0IGl0ZW0gb24gdGhlIGxpc3QgKi8KLQkJCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNobS0+Y2hsX25leHQgPSBjaGwtPmNobF9uZXh0OwotCQkJCX0KLQkJCQlrbWVtX3pvbmVfZnJlZSh4ZnNfY2hhc2hsaXN0X3pvbmUsIGNobCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCUFTU0VSVChjaGwtPmNobF9pcCAhPSBpcCk7Ci0JCQkJY2htID0gY2hsOwotCQkJfQotCQl9Ci0JCUFTU0VSVF9BTFdBWVMoY2hsICE9IE5VTEwpOwotICAgICAgIH0gZWxzZSB7CisJCWNobCA9IGlwLT5pX2NoYXNoOworCQlpZiAoY2hsLT5jaGxfcHJldikKKwkJCWNobC0+Y2hsX3ByZXYtPmNobF9uZXh0ID0gY2hsLT5jaGxfbmV4dDsKKwkJZWxzZQorCQkJY2gtPmNoX2xpc3QgPSBjaGwtPmNobF9uZXh0OworCQlpZiAoY2hsLT5jaGxfbmV4dCkKKwkJCWNobC0+Y2hsX25leHQtPmNobF9wcmV2ID0gY2hsLT5jaGxfcHJldjsKKwkJa21lbV96b25lX2ZyZWUoeGZzX2NoYXNobGlzdF96b25lLCBjaGwpOworCX0gZWxzZSB7CiAJCS8qIGRlbGV0ZSBvbmUgaW5vZGUgZnJvbSBhIG5vbi1lbXB0eSBsaXN0ICovCiAJCWlxID0gaXAtPmlfY25leHQ7CiAJCWlxLT5pX2NwcmV2ID0gaXAtPmlfY3ByZXY7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNDgxNDZiZC4uOTRiNjBkZDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI3MzIsMTYgKzI3MzIsMjkgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA+IDApOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlwLT5pX3BpbmNvdW50KSkgewotCQl2bm9kZV90CSp2cCA9IFhGU19JVE9WX05VTEwoaXApOworCQkvKgorCQkgKiBJZiB0aGUgaW5vZGUgaXMgY3VycmVudGx5IGJlaW5nIHJlY2xhaW1lZCwgdGhlCisJCSAqIGxpbnV4IGlub2RlIF9hbmRfIHRoZSB4ZnMgdm5vZGUgbWF5IGhhdmUgYmVlbgorCQkgKiBmcmVlZCBzbyB3ZSBjYW5ub3QgcmVmZXJlbmNlIGVpdGhlciBvZiB0aGVtIHNhZmVseS4KKwkJICogSGVuY2Ugd2Ugc2hvdWxkIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgdG8gdGhlbQorCQkgKiBpZiB0aGUgeGZzIGlub2RlIGlzIGN1cnJlbnRseSBpbiB0aGUgcmVjbGFpbQorCQkgKiBwYXRoLgorCQkgKgorCQkgKiBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIGlzc3VlIHRoZSB1bnBpbiB3YWtldXAKKwkJICogY2FsbCBhcyB0aGUgaW5vZGUgcmVjbGFpbSBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvcgorCQkgKiB0aGUgaW5vZGUgdG8gYmVjb21lIHVucGlubmVkLgorCQkgKi8KKwkJaWYgKCEoaXAtPmlfZmxhZ3MgJiAoWEZTX0lSRUNMQUlNfFhGU19JUkVDTEFJTUFCTEUpKSkgeworCQkJdm5vZGVfdAkqdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKIAotCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCi0JCWlmICh2cCkgewotCQkJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwkJCS8qIG1ha2Ugc3luYyBjb21lIGJhY2sgYW5kIGZsdXNoIHRoaXMgaW5vZGUgKi8KKwkJCWlmICh2cCkgeworCQkJCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKLQkJCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQotCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpCisJCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQl9CiAJCX0KLQogCQl3YWtlX3VwKCZpcC0+aV9pcGluX3dhaXQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAzOWVmOWMzLi4zYjU0NGRiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0xODksNiArMTg5LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2NoYXNobGlzdCB7CiAJc3RydWN0IHhmc19jaGFzaGxpc3QJKmNobF9uZXh0OworCXN0cnVjdCB4ZnNfY2hhc2hsaXN0CSpjaGxfcHJldjsKIAlzdHJ1Y3QgeGZzX2lub2RlCSpjaGxfaXA7CiAJeGZzX2RhZGRyX3QJCWNobF9ibGtubzsJLyogc3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mCiAJCQkJCQkgKiB0aGUgY2x1c3RlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDcyZTdlNzguLmMwYjFjMjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTIxMyw3ICsyMTMsOCBAQAogU1RBVElDIGludAogeGZzX21vdW50X3ZhbGlkYXRlX3NiKAogCXhmc19tb3VudF90CSptcCwKLQl4ZnNfc2JfdAkqc2JwKQorCXhmc19zYl90CSpzYnAsCisJaW50CQlmbGFncykKIHsKIAkvKgogCSAqIElmIHRoZSBsb2cgZGV2aWNlIGFuZCBkYXRhIGRldmljZSBoYXZlIHRoZQpAQCAtMjIzLDMzICsyMjQsMjkgQEAKIAkgKiBhIHZvbHVtZSBmaWxlc3lzdGVtIGluIGEgbm9uLXZvbHVtZSBtYW5uZXIuCiAJICovCiAJaWYgKHNicC0+c2JfbWFnaWNudW0gIT0gWEZTX1NCX01BR0lDKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogYmFkIG1hZ2ljIG51bWJlciIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgImJhZCBtYWdpYyBudW1iZXIiKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFV1JPTkdGUyk7CiAJfQogCiAJaWYgKCFYRlNfU0JfR09PRF9WRVJTSU9OKHNicCkpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBiYWQgdmVyc2lvbiIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgImJhZCB2ZXJzaW9uIik7CiAJCXJldHVybiBYRlNfRVJST1IoRVdST05HRlMpOwogCX0KIAogCWlmICh1bmxpa2VseSgKIAkgICAgc2JwLT5zYl9sb2dzdGFydCA9PSAwICYmIG1wLT5tX2xvZ2Rldl90YXJncCA9PSBtcC0+bV9kZGV2X3RhcmdwKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JIlhGUzogZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaGF2aW5nIGFuIGV4dGVybmFsIGxvZzsgIgotCSJzcGVjaWZ5IGxvZ2RldiBvbiB0aGVcbm1vdW50IGNvbW1hbmQgbGluZS4iKTsKLQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19tb3VudF92YWxpZGF0ZV9zYigxKSIsCi0JCQkJICAgICBYRlNfRVJSTEVWRUxfSElHSCwgbXAsIHNicCk7Ci0JCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaGF2aW5nIGFuIGV4dGVybmFsIGxvZzsgIgorCQkJInNwZWNpZnkgbG9nZGV2IG9uIHRoZVxubW91bnQgY29tbWFuZCBsaW5lLiIpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCiAJaWYgKHVubGlrZWx5KAogCSAgICBzYnAtPnNiX2xvZ3N0YXJ0ICE9IDAgJiYgbXAtPm1fbG9nZGV2X3RhcmdwICE9IG1wLT5tX2RkZXZfdGFyZ3ApKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBhcyBoYXZpbmcgYW4gaW50ZXJuYWwgbG9nOyAiCi0JImRvbid0IHNwZWNpZnkgbG9nZGV2IG9uXG50aGUgbW91bnQgY29tbWFuZCBsaW5lLiIpOwotCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX21vdW50X3ZhbGlkYXRlX3NiKDIpIiwKLQkJCQkgICAgIFhGU19FUlJMRVZFTF9ISUdILCBtcCwgc2JwKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKKwkJCSJmaWxlc3lzdGVtIGlzIG1hcmtlZCBhcyBoYXZpbmcgYW4gaW50ZXJuYWwgbG9nOyAiCisJCQkiZG8gbm90IHNwZWNpZnkgbG9nZGV2IG9uXG50aGUgbW91bnQgY29tbWFuZCBsaW5lLiIpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQogCiAJLyoKQEAgLTI3MywxMCArMjcwLDggQEAKIAkgICAgKHNicC0+c2JfYmxvY2tsb2cgLSBzYnAtPnNiX2lub2RlbG9nICE9IHNicC0+c2JfaW5vcGJsb2cpCXx8CiAJICAgIChzYnAtPnNiX3JleHRzaXplICogc2JwLT5zYl9ibG9ja3NpemUgPiBYRlNfTUFYX1JURVhUU0laRSkJfHwKIAkgICAgKHNicC0+c2JfcmV4dHNpemUgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSA8IFhGU19NSU5fUlRFWFRTSVpFKQl8fAotCSAgICAoc2JwLT5zYl9pbWF4X3BjdCA+IDEwMCB8fCBzYnAtPnNiX2ltYXhfcGN0IDwgMSkpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogU0Igc2FuaXR5IGNoZWNrIDEgZmFpbGVkIik7Ci0JCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfbW91bnRfdmFsaWRhdGVfc2IoMykiLAotCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsIHNicCk7CisJICAgIChzYnAtPnNiX2ltYXhfcGN0ID4gMTAwIC8qIHplcm8gc2JfaW1heF9wY3QgaXMgdmFsaWQgKi8pKSkgeworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHNhbml0eSBjaGVjayAxIGZhaWxlZCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCkBAIC0yODksOSArMjg0LDcgQEAKIAkgICAgICh4ZnNfZHJmc2Jub190KXNicC0+c2JfYWdjb3VudCAqIHNicC0+c2JfYWdibG9ja3MgfHwKIAkgICAgc2JwLT5zYl9kYmxvY2tzIDwgKHhmc19kcmZzYm5vX3QpKHNicC0+c2JfYWdjb3VudCAtIDEpICoKIAkJCSAgICAgIHNicC0+c2JfYWdibG9ja3MgKyBYRlNfTUlOX0FHX0JMT0NLUykpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBTQiBzYW5pdHkgY2hlY2sgMiBmYWlsZWQiKTsKLQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50X3ZhbGlkYXRlX3NiKDQpIiwKLQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHNhbml0eSBjaGVjayAyIGZhaWxlZCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCkBAIC0zMDcsMTUgKzMwMCwxMyBAQAogCSAgICAoc2JwLT5zYl9kYmxvY2tzIDw8IChzYnAtPnNiX2Jsb2NrbG9nIC0gQkJTSElGVCkpID4gVUlOVF9NQVggfHwKIAkgICAgKHNicC0+c2JfcmJsb2NrcyA8PCAoc2JwLT5zYl9ibG9ja2xvZyAtIEJCU0hJRlQpKSA+IFVJTlRfTUFYKSkgewogI2VuZGlmCi0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkiWEZTOiBGaWxlIHN5c3RlbSBpcyB0b28gbGFyZ2UgdG8gYmUgbW91bnRlZCBvbiB0aGlzIHN5c3RlbS4iKTsKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZmlsZSBzeXN0ZW0gdG9vIGxhcmdlIHRvIGJlIG1vdW50ZWQgb24gdGhpcyBzeXN0ZW0uIik7CiAJCXJldHVybiBYRlNfRVJST1IoRTJCSUcpOwogCX0KIAogCWlmICh1bmxpa2VseShzYnAtPnNiX2lucHJvZ3Jlc3MpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmlsZSBzeXN0ZW0gYnVzeSIpOwotCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfbW91bnRfdmFsaWRhdGVfc2IoNSkiLAotCQkJCSBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CisJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLCAiZmlsZSBzeXN0ZW0gYnVzeSIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCkBAIC0zMjMsOCArMzE0LDggQEAKIAkgKiBWZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCBoYXMgbmV2ZXIgd29ya2VkIG9uIExpbnV4LgogCSAqLwogCWlmICh1bmxpa2VseSghWEZTX1NCX1ZFUlNJT05fSEFTRElSVjIoc2JwKSkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCSJYRlM6IEF0dGVtcHRlZCB0byBtb3VudCBmaWxlIHN5c3RlbSB1c2luZyB2ZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKKwkJCSJmaWxlIHN5c3RlbSB1c2luZyB2ZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCIpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NZUyk7CiAJfQogCkBAIC0zMzIsMTEgKzMyMywxMSBAQAogCSAqIFVudGlsIHRoaXMgaXMgZml4ZWQgb25seSBwYWdlLXNpemVkIG9yIHNtYWxsZXIgZGF0YSBibG9ja3Mgd29yay4KIAkgKi8KIAlpZiAodW5saWtlbHkoc2JwLT5zYl9ibG9ja3NpemUgPiBQQUdFX1NJWkUpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJIlhGUzogQXR0ZW1wdGVkIHRvIG1vdW50IGZpbGUgc3lzdGVtIHdpdGggYmxvY2tzaXplICVkIGJ5dGVzIiwKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZmlsZSBzeXN0ZW0gd2l0aCBibG9ja3NpemUgJWQgYnl0ZXMiLAogCQkJc2JwLT5zYl9ibG9ja3NpemUpOwotCQljbW5fZXJyKENFX1dBUk4sCi0JCSJYRlM6IE9ubHkgcGFnZS1zaXplZCAoJWxkKSBvciBsZXNzIGJsb2Nrc2l6ZXMgY3VycmVudGx5IHdvcmsuIiwKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkib25seSBwYWdlc2l6ZSAoJWxkKSBvciBsZXNzIHdpbGwgY3VycmVudGx5IHdvcmsuIiwKIAkJCVBBR0VfU0laRSk7CiAJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKIAl9CkBAIC00ODQsNyArNDc1LDcgQEAKICAqIERvZXMgdGhlIGluaXRpYWwgcmVhZCBvZiB0aGUgc3VwZXJibG9jay4KICAqLwogaW50Ci14ZnNfcmVhZHNiKHhmc19tb3VudF90ICptcCkKK3hmc19yZWFkc2IoeGZzX21vdW50X3QgKm1wLCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50CXNlY3Rvcl9zaXplOwogCXVuc2lnbmVkIGludAlleHRyYV9mbGFnczsKQEAgLTUwNiw3ICs0OTcsNyBAQAogCWJwID0geGZzX2J1Zl9yZWFkX2ZsYWdzKG1wLT5tX2RkZXZfdGFyZ3AsIFhGU19TQl9EQUREUiwKIAkJCQlCVE9CQihzZWN0b3Jfc2l6ZSksIGV4dHJhX2ZsYWdzKTsKIAlpZiAoIWJwIHx8IFhGU19CVUZfSVNFUlJPUihicCkpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBTQiByZWFkIGZhaWxlZCIpOworCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHJlYWQgZmFpbGVkIik7CiAJCWVycm9yID0gYnAgPyBYRlNfQlVGX0dFVEVSUk9SKGJwKSA6IEVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTUyMCw5ICs1MTEsOSBAQAogCXNicCA9IFhGU19CVUZfVE9fU0JQKGJwKTsKIAl4ZnNfeGxhdGVzYihYRlNfQlVGX1BUUihicCksICYobXAtPm1fc2IpLCAxLCBYRlNfU0JfQUxMX0JJVFMpOwogCi0JZXJyb3IgPSB4ZnNfbW91bnRfdmFsaWRhdGVfc2IobXAsICYobXAtPm1fc2IpKTsKKwllcnJvciA9IHhmc19tb3VudF92YWxpZGF0ZV9zYihtcCwgJihtcC0+bV9zYiksIGZsYWdzKTsKIAlpZiAoZXJyb3IpIHsKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBTQiB2YWxpZGF0ZSBmYWlsZWQiKTsKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsICJTQiB2YWxpZGF0ZSBmYWlsZWQiKTsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtNTMwLDggKzUyMSw4IEBACiAJICogV2UgbXVzdCBiZSBhYmxlIHRvIGRvIHNlY3Rvci1zaXplZCBhbmQgc2VjdG9yLWFsaWduZWQgSU8uCiAJICovCiAJaWYgKHNlY3Rvcl9zaXplID4gbXAtPm1fc2Iuc2Jfc2VjdHNpemUpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogZGV2aWNlIHN1cHBvcnRzIG9ubHkgJXUgYnl0ZSBzZWN0b3JzIChub3QgJXUpIiwKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiZGV2aWNlIHN1cHBvcnRzIG9ubHkgJXUgYnl0ZSBzZWN0b3JzIChub3QgJXUpIiwKIAkJCXNlY3Rvcl9zaXplLCBtcC0+bV9zYi5zYl9zZWN0c2l6ZSk7CiAJCWVycm9yID0gRU5PU1lTOwogCQlnb3RvIGZhaWw7CkBAIC01NDgsNyArNTM5LDcgQEAKIAkJYnAgPSB4ZnNfYnVmX3JlYWRfZmxhZ3MobXAtPm1fZGRldl90YXJncCwgWEZTX1NCX0RBRERSLAogCQkJCQlCVE9CQihzZWN0b3Jfc2l6ZSksIGV4dHJhX2ZsYWdzKTsKIAkJaWYgKCFicCB8fCBYRlNfQlVGX0lTRVJST1IoYnApKSB7Ci0JCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFNCIHJlLXJlYWQgZmFpbGVkIik7CisJCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywgIlNCIHJlLXJlYWQgZmFpbGVkIik7CiAJCQllcnJvciA9IGJwID8gWEZTX0JVRl9HRVRFUlJPUihicCkgOiBFTk9NRU07CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTY3OCw3ICs2NjksNyBAQAogCWludAkJZXJyb3IgPSAwOwogCiAJaWYgKG1wLT5tX3NiX2JwID09IE5VTEwpIHsKLQkJaWYgKChlcnJvciA9IHhmc19yZWFkc2IobXApKSkgeworCQlpZiAoKGVycm9yID0geGZzX3JlYWRzYihtcCwgbWZzaV9mbGFncykpKSB7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggNjZjYmVlNy4uNjY4YWQyMyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtNTEwLDkgKzUxMCwxMiBAQAogICovCiAjZGVmaW5lIFhGU19NRlNJX1NFQ09ORAkJMHgwMQkvKiBTZWNvbmRhcnkgbW91bnQgLS0gc2tpcCBzdHVmZiAqLwogI2RlZmluZSBYRlNfTUZTSV9DTElFTlQJCTB4MDIJLyogSXMgYSBjbGllbnQgLS0gc2tpcCBsb3RzIG9mIHN0dWZmICovCisvKglYRlNfTUZTSV9SUklOT0RFUwkqLwogI2RlZmluZSBYRlNfTUZTSV9OT1VOTElOSwkweDA4CS8qIFNraXAgdW5saW5rZWQgaW5vZGUgcHJvY2Vzc2luZyBpbiAqLwogCQkJCQkvKiBsb2cgcmVjb3ZlcnkgKi8KICNkZWZpbmUgWEZTX01GU0lfTk9fUVVPVEFDSEVDSwkweDEwCS8qIFNraXAgcXVvdGFjaGVjayBwcm9jZXNzaW5nICovCisvKglYRlNfTUZTSV9DT05WRVJUX1NVTklUCSovCisjZGVmaW5lIFhGU19NRlNJX1FVSUVUCQkweDQwCS8qIEJlIHNpbGVudCBpZiBtb3VudCBlcnJvcnMgZm91bmQgKi8KIAogLyoKICAqIE1hY3JvcyBmb3IgZ2V0dGluZyBmcm9tIG1vdW50IHRvIHZmcyBhbmQgYmFjay4KQEAgLTU4MSw3ICs1ODQsNyBAQAogZXh0ZXJuIGludAl4ZnNfbW9kX2luY29yZV9zYl9iYXRjaCh4ZnNfbW91bnRfdCAqLCB4ZnNfbW9kX3NiX3QgKiwKIAkJCXVpbnQsIGludCk7CiBleHRlcm4gc3RydWN0IHhmc19idWYgKnhmc19nZXRzYih4ZnNfbW91bnRfdCAqLCBpbnQpOwotZXh0ZXJuIGludAl4ZnNfcmVhZHNiKHhmc19tb3VudF90ICptcCk7CitleHRlcm4gaW50CXhmc19yZWFkc2IoeGZzX21vdW50X3QgKiwgaW50KTsKIGV4dGVybiB2b2lkCXhmc19mcmVlc2IoeGZzX21vdW50X3QgKik7CiBleHRlcm4gdm9pZAl4ZnNfZG9fZm9yY2Vfc2h1dGRvd24oYmh2X2Rlc2NfdCAqLCBpbnQsIGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQJeGZzX3N5bmNzdWIoeGZzX21vdW50X3QgKiwgaW50LCBpbnQsIGludCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcXVvdGEuaCBiL2ZzL3hmcy94ZnNfcXVvdGEuaAppbmRleCA0ZjZhMDM0Li43ZmJlZjk3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3F1b3RhLmgKKysrIGIvZnMveGZzL3hmc19xdW90YS5oCkBAIC0xOTYsMTAgKzE5NiwxMSBAQAogI2RlZmluZSBYRlNfUU1PUFRfUVVPVEFPRkYJMHgwMDAwMDgwIC8qIHF1b3RhcyBhcmUgYmVpbmcgdHVybmVkIG9mZiAqLwogI2RlZmluZSBYRlNfUU1PUFRfVU1PVU5USU5HCTB4MDAwMDEwMCAvKiBmaWxlc3lzIGlzIGJlaW5nIHVubW91bnRlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfRE9MT0cJCTB4MDAwMDIwMCAvKiBsb2cgYnVmIGNoYW5nZXMgKGluIHF1b3RhY2hlY2spICovCi0jZGVmaW5lIFhGU19RTU9QVF9ET1dBUk4gICAgICAgIDB4MDAwMDQwMCAvKiBpbmNyZWFzZSB3YXJuaW5nIGNudCBpZiBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgWEZTX1FNT1BUX0RPV0FSTiAgICAgICAgMHgwMDAwNDAwIC8qIGluY3JlYXNlIHdhcm5pbmcgY250IGlmIG5lZWRlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfSUxPQ0tFRAkweDAwMDA4MDAgLyogaW5vZGUgaXMgYWxyZWFkeSBsb2NrZWQgKGV4Y2wpICovCi0jZGVmaW5lIFhGU19RTU9QVF9EUVJFUEFJUgkweDAwMDEwMDAgLyogcmVwYWlyIGRxdW90LCBpZiBkYW1hZ2VkLiAqLworI2RlZmluZSBYRlNfUU1PUFRfRFFSRVBBSVIJMHgwMDAxMDAwIC8qIHJlcGFpciBkcXVvdCBpZiBkYW1hZ2VkICovCiAjZGVmaW5lIFhGU19RTU9QVF9HUVVPVEEJMHgwMDAyMDAwIC8qIGdyb3VwIGRxdW90IHJlcXVlc3RlZCAqLworI2RlZmluZSBYRlNfUU1PUFRfRU5PU1BDCTB4MDAwNDAwMCAvKiBlbm9zcGMgaW5zdGVhZCBvZiBlZHF1b3QgKHByaikgKi8KIAogLyoKICAqIGZsYWdzIHRvIHhmc190cmFuc19tb2RfZHF1b3QgdG8gaW5kaWNhdGUgd2hpY2ggZmllbGQgbmVlZHMgdG8gYmUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcmVuYW1lLmMgYi9mcy94ZnMveGZzX3JlbmFtZS5jCmluZGV4IDgxYTA1Y2YuLjFmMTQ4NzYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcmVuYW1lLmMKKysrIGIvZnMveGZzL3hmc19yZW5hbWUuYwpAQCAtMzE2LDYgKzMxNiwxOCBAQAogCQl9CiAJfQogCisJLyoKKwkgKiBJZiB3ZSBhcmUgdXNpbmcgcHJvamVjdCBpbmhlcml0YW5jZSwgd2Ugb25seSBhbGxvdyByZW5hbWVzCisJICogaW50byBvdXIgdHJlZSB3aGVuIHRoZSBwcm9qZWN0IElEcyBhcmUgdGhlIHNhbWU7IGVsc2UgdGhlCisJICogdHJlZSBxdW90YSBtZWNoYW5pc20gd291bGQgYmUgY2lyY3VtdmVudGVkLgorCSAqLworCWlmICh1bmxpa2VseSgodGFyZ2V0X2RwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKSAmJgorCQkgICAgICh0YXJnZXRfZHAtPmlfZC5kaV9wcm9qaWQgIT0gc3JjX2lwLT5pX2QuZGlfcHJvamlkKSkpIHsKKwkJZXJyb3IgPSBYRlNfRVJST1IoRVhERVYpOworCQl4ZnNfcmVuYW1lX3VubG9jazQoaW5vZGVzLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwkJZ290byByZWxlX3JldHVybjsKKwl9CisKIAluZXdfcGFyZW50ID0gKHNyY19kcCAhPSB0YXJnZXRfZHApOwogCXNyY19pc19kaXJlY3RvcnkgPSAoKHNyY19pcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCA1MDRkMmE4Li4zNmVhMWIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTQ0Miw2ICs0NDIsOSBAQAogCXAgPSB2ZnNfYmh2X2xvb2t1cCh2ZnNwLCBWRlNfUE9TSVRJT05fSU8pOwogCW1wLT5tX2lvX29wcyA9IHAgPyAqKHhmc19pb29wc190ICopIHZmc19iaHZfY3VzdG9tKHApIDogeGZzX2lvY29yZV94ZnM7CiAKKwlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfUVVJRVQpCisJCWZsYWdzIHw9IFhGU19NRlNJX1FVSUVUOworCiAJLyoKIAkgKiBPcGVuIHJlYWwgdGltZSBhbmQgbG9nIGRldmljZXMgLSBvcmRlciBpcyBpbXBvcnRhbnQuCiAJICovCkBAIC00OTIsNyArNDk1LDcgQEAKIAllcnJvciA9IHhmc19zdGFydF9mbGFncyh2ZnNwLCBhcmdzLCBtcCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMTsKLQllcnJvciA9IHhmc19yZWFkc2IobXApOworCWVycm9yID0geGZzX3JlYWRzYihtcCwgZmxhZ3MpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjE7CiAJZXJyb3IgPSB4ZnNfZmluaXNoX2ZsYWdzKHZmc3AsIGFyZ3MsIG1wKTsKQEAgLTY2NiwzMSArNjY5LDIyIEBACiAJeGZzX21vdW50X3QJKm1wID0gWEZTX0JIVlRPTShiZHApOwogCWludAkJZXJyb3I7CiAKLQlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfQkFSUklFUikKLQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0JBUlJJRVI7Ci0JZWxzZQotCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX0JBUlJJRVI7Ci0KLQlpZiAoKHZmc3AtPnZmc19mbGFnICYgVkZTX1JET05MWSkgJiYKLQkgICAgISgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCXZmc3AtPnZmc19mbGFnICY9IH5WRlNfUkRPTkxZOwotCi0JCWlmIChhcmdzLT5mbGFncyAmIFhGU01OVF9CQVJSSUVSKQorCWlmICghKCpmbGFncyAmIE1TX1JET05MWSkpIHsJCQkvKiBydy9ybyAtPiBydyAqLworCQlpZiAodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKQorCQkJdmZzcC0+dmZzX2ZsYWcgJj0gflZGU19SRE9OTFk7CisJCWlmIChhcmdzLT5mbGFncyAmIFhGU01OVF9CQVJSSUVSKSB7CisJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfQkFSUklFUjsKIAkJCXhmc19tb3VudGZzX2NoZWNrX2JhcnJpZXJzKG1wKTsKLQl9Ci0KLQlpZiAoISh2ZnNwLT52ZnNfZmxhZyAmIFZGU19SRE9OTFkpICYmCi0JICAgICgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCX0gZWxzZSB7CisJCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX0JBUlJJRVI7CisJCX0KKwl9IGVsc2UgaWYgKCEodmZzcC0+dmZzX2ZsYWcgJiBWRlNfUkRPTkxZKSkgewkvKiBydyAtPiBybyAqLwogCQlWRlNfU1lOQyh2ZnNwLCBTWU5DX0ZTREFUQXxTWU5DX0JERkxVU0h8U1lOQ19BVFRSLCBOVUxMLCBlcnJvcik7Ci0KIAkJeGZzX3F1aWVzY2VfZnMobXApOwotCi0JCS8qIE9rIG5vdyB3cml0ZSBvdXQgYW4gdW5tb3VudCByZWNvcmQgKi8KIAkJeGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKIAkJeGZzX3VubW91bnRmc193cml0ZXNiKG1wKTsKIAkJdmZzcC0+dmZzX2ZsYWcgfD0gVkZTX1JET05MWTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY5Nyw4ICsxNjkxLDkgQEAKIAlpbnQJCQlkc3VuaXQsIGRzd2lkdGgsIHZvbF9kc3VuaXQsIHZvbF9kc3dpZHRoOwogCWludAkJCWlvc2l6ZTsKIAotCWFyZ3MtPmZsYWdzMiB8PSBYRlNNTlQyX0NPTVBBVF9JT1NJWkU7CiAJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0lERUxFVEU7CisJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0JBUlJJRVI7CisJYXJncy0+ZmxhZ3MyIHw9IFhGU01OVDJfQ09NUEFUX0lPU0laRTsKIAogCWlmICghb3B0aW9ucykKIAkJZ290byBkb25lOwpAQCAtMTk0Nyw4ICsxOTQyLDYgQEAKIAkJc2VxX3ByaW50ZihtLCAiLCIgTU5UT1BUX0lLRUVQKTsKIAlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9DT01QQVRfSU9TSVpFKSkKIAkJc2VxX3ByaW50ZihtLCAiLCIgTU5UT1BUX0xBUkdFSU8pOwotCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKQotCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfQkFSUklFUik7CiAKIAlpZiAoISh2ZnNwLT52ZnNfZmxhZyAmIFZGU18zMkJJVElOT0RFUykpCiAJCXNlcV9wcmludGYobSwgIiwiIE1OVE9QVF82NEJJVElOT0RFKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCBkZTQ5NjAxLi43MDI3YWU2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0yNjYzLDcgKzI2NjMsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseSgodGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKSAmJgogCQkgICAgICh0ZHAtPmlfZC5kaV9wcm9qaWQgIT0gc2lwLT5pX2QuZGlfcHJvamlkKSkpIHsKLQkJZXJyb3IgPSBYRlNfRVJST1IoRVBFUk0pOworCQllcnJvciA9IFhGU19FUlJPUihFWERFVik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIApAQCAtNDY0OSw2ICs0NjQ5LDEwIEBACiAjaWZkZWYgSEFWRV9TRU5ERklMRQogCS52b3Bfc2VuZGZpbGUJCT0geGZzX3NlbmRmaWxlLAogI2VuZGlmCisjaWZkZWYgSEFWRV9TUExJQ0UKKwkudm9wX3NwbGljZV9yZWFkCT0geGZzX3NwbGljZV9yZWFkLAorCS52b3Bfc3BsaWNlX3dyaXRlCT0geGZzX3NwbGljZV93cml0ZSwKKyNlbmRpZgogCS52b3Bfd3JpdGUJCT0geGZzX3dyaXRlLAogCS52b3BfaW9jdGwJCT0geGZzX2lvY3RsLAogCS52b3BfZ2V0YXR0cgkJPSB4ZnNfZ2V0YXR0ciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKaW5kZXggZTI3ZGM4Zi4uYjliZWNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAogLyogQ3VycmVudCBBQ1BJQ0Egc3Vic3lzdGVtIHZlcnNpb24gaW4gWVlZWU1NREQgZm9ybWF0ICovCiAKLSNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDYwMTI3CisjZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDA2MDYwOAogCiAvKgogICogT1MgbmFtZSwgdXNlZCBmb3IgdGhlIF9PUyBvYmplY3QuICBUaGUgX09TIG9iamVjdCBpcyBlc3NlbnRpYWxseSBvYnNvbGV0ZSwKQEAgLTgxLDYgKzgxLDcgQEAKICNkZWZpbmUgQUNQSV9NQVhfUEFSU0VfQ0FDSEVfREVQVEggICAgICA5NgkvKiBQYXJzZSB0cmVlIG9iamVjdHMgKi8KICNkZWZpbmUgQUNQSV9NQVhfRVhUUEFSU0VfQ0FDSEVfREVQVEggICA5NgkvKiBQYXJzZSB0cmVlIG9iamVjdHMgKi8KICNkZWZpbmUgQUNQSV9NQVhfT0JKRUNUX0NBQ0hFX0RFUFRIICAgICA5NgkvKiBJbnRlcnByZXRlciBvcGVyYW5kIG9iamVjdHMgKi8KKyNkZWZpbmUgQUNQSV9NQVhfTkFNRVNQQUNFX0NBQ0hFX0RFUFRIICA5NgkvKiBOYW1lc3BhY2Ugb2JqZWN0cyAqLwogCiAvKgogICogU2hvdWxkIHRoZSBzdWJzeXN0ZW0gYWJvcnQgdGhlIGxvYWRpbmcgb2YgYW4gQUNQSSB0YWJsZSBpZiB0aGUKQEAgLTEwMiw5ICsxMDMsOSBAQAogCiAjZGVmaW5lIEFDUElfTUFYX1NFTUFQSE9SRV9DT1VOVCAgICAgICAgMjU2CiAKLS8qIE1heCByZWZlcmVuY2UgY291bnQgKGZvciBkZWJ1ZyBvbmx5KSAqLworLyogTWF4aW11bSBvYmplY3QgcmVmZXJlbmNlIGNvdW50IChkZXRlY3RzIG9iamVjdCBkZWxldGlvbiBpc3N1ZXMpICovCiAKLSNkZWZpbmUgQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UICAgICAgICAweDQwMAorI2RlZmluZSBBQ1BJX01BWF9SRUZFUkVOQ0VfQ09VTlQgICAgICAgIDB4ODAwCiAKIC8qIFNpemUgb2YgY2FjaGVkIG1lbW9yeSBtYXBwaW5nIGZvciBzeXN0ZW0gbWVtb3J5IG9wZXJhdGlvbiByZWdpb24gKi8KIApAQCAtMTcxLDEyICsxNzIsNyBAQAogCiAvKiBBcnJheSBzaXplcy4gIFVzZWQgZm9yIHJhbmdlIGNoZWNraW5nIGFsc28gKi8KIAotI2RlZmluZSBBQ1BJX05VTV9BQ0NFU1NfVFlQRVMgICAgICAgICAgIDYKLSNkZWZpbmUgQUNQSV9OVU1fVVBEQVRFX1JVTEVTICAgICAgICAgICAzCi0jZGVmaW5lIEFDUElfTlVNX0xPQ0tfUlVMRVMgICAgICAgICAgICAgMgotI2RlZmluZSBBQ1BJX05VTV9NQVRDSF9PUFMgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQUNQSV9OVU1fT1BDT0RFUyAgICAgICAgICAgICAgICAyNTYKLSNkZWZpbmUgQUNQSV9OVU1fRklFTERfTkFNRVMgICAgICAgICAgICAyCisjZGVmaW5lIEFDUElfTUFYX01BVENIX09QQ09ERSAgICAgICAgICAgNQogCiAvKiBSU0RQIGNoZWNrc3VtcyAqLwogCkBAIC0xODcsMTAgKzE4Myw2IEBACiAKICNkZWZpbmUgQUNQSV9TTUJVU19CVUZGRVJfU0laRSAgICAgICAgICAzNAogCi0vKiBOdW1iZXIgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIF9PU0kgcmVzZXJ2ZWQgbWV0aG9kICovCi0KLSNkZWZpbmUgQUNQSV9OVU1fT1NJX1NUUklOR1MgICAgICAgICAgICAxMAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogQUNQSSBBTUwgRGVidWdnZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2Rpc2FzbS5oIGIvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKaW5kZXggMTFhOGZlMy4uOWE3ZDY5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZGlzYXNtLmgKQEAgLTUwLDI2ICs1MCw3MiBAQAogI2RlZmluZSBCTE9DS19QQVJFTiAgICAgICAgICAgICAxCiAjZGVmaW5lIEJMT0NLX0JSQUNFICAgICAgICAgICAgIDIKICNkZWZpbmUgQkxPQ0tfQ09NTUFfTElTVCAgICAgICAgNAorI2RlZmluZSBBQ1BJX0RFRkFVTFRfUkVTTkFNRSAgICAqKHUzMiAqKSAiX19SRCIKIAogc3RydWN0IGFjcGlfZXh0ZXJuYWxfbGlzdCB7CiAJY2hhciAqcGF0aDsKKwljaGFyICppbnRlcm5hbF9wYXRoOwogCXN0cnVjdCBhY3BpX2V4dGVybmFsX2xpc3QgKm5leHQ7CisJdTMyIHZhbHVlOworCXUxNiBsZW5ndGg7CisJdTggdHlwZTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYWNwaV9leHRlcm5hbF9saXN0ICphY3BpX2dibF9leHRlcm5hbF9saXN0OwogCi0vKiBTdHJpbmdzIHVzZWQgZm9yIGRlY29kaW5nIGZsYWdzIHRvIEFTTCBrZXl3b3JkcyAqLwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8geworCXU4IG9wY29kZTsKKwl1OCBvZmZzZXQ7CisJY2hhciAqbmFtZTsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3dvcmRfZGVjb2RlWzRdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2lycV9kZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbG9ja19ydWxlW0FDUElfTlVNX0xPQ0tfUlVMRVNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2FjY2Vzc190eXBlc1tBQ1BJX05VTV9BQ0NFU1NfVFlQRVNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3VwZGF0ZV9ydWxlc1tBQ1BJX05VTV9VUERBVEVfUlVMRVNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX21hdGNoX29wc1tBQ1BJX05VTV9NQVRDSF9PUFNdOworfSBhY3BpX2RtdGFibGVfaW5mbzsKKworLyoKKyAqIFZhbHVlcyBmb3IgT3Bjb2RlIGFib3ZlLgorICogTm90ZTogMC03IG11c3Qgbm90IGNoYW5nZSwgdXNlZCBhcyBhIGZsYWcgc2hpZnQgdmFsdWUKKyAqLworI2RlZmluZSBBQ1BJX0RNVF9GTEFHMCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9ETVRfRkxBRzEgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfRE1UX0ZMQUcyICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBQ1BJX0RNVF9GTEFHMyAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQUNQSV9ETVRfRkxBRzQgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFDUElfRE1UX0ZMQUc1ICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBQ1BJX0RNVF9GTEFHNiAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQUNQSV9ETVRfRkxBRzcgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFDUElfRE1UX0ZMQUdTMCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBQ1BJX0RNVF9GTEFHUzIgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQUNQSV9ETVRfVUlOVDggICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBQ1BJX0RNVF9VSU5UMTYgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEFDUElfRE1UX1VJTlQyNCAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQUNQSV9ETVRfVUlOVDMyICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBQ1BJX0RNVF9VSU5UNTYgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFDUElfRE1UX1VJTlQ2NCAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQUNQSV9ETVRfU1RSSU5HICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBQ1BJX0RNVF9OQU1FNCAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEFDUElfRE1UX05BTUU2ICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQUNQSV9ETVRfTkFNRTggICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBBQ1BJX0RNVF9DSEtTVU0gICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEFDUElfRE1UX1NQQUNFSUQgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQUNQSV9ETVRfR0FTICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBBQ1BJX0RNVF9NQURUICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEFDUElfRE1UX1NSQVQgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQUNQSV9ETVRfRVhJVCAgICAgICAgICAgICAgICAgICAyNQorCit0eXBlZGVmCit2b2lkICgqQUNQSV9UQUJMRV9IQU5ETEVSKSAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICogdGFibGUpOworCitzdHJ1Y3QgYWNwaV9kbXRhYmxlX2RhdGEgeworCWNoYXIgKnNpZ25hdHVyZTsKKwlzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gKnRhYmxlX2luZm87CisJQUNQSV9UQUJMRV9IQU5ETEVSIHRhYmxlX2hhbmRsZXI7Cit9OwogCiBzdHJ1Y3QgYWNwaV9vcF93YWxrX2luZm8gewogCXUzMiBsZXZlbDsKKwl1MzIgbGFzdF9sZXZlbDsKKwl1MzIgY291bnQ7CiAJdTMyIGJpdF9vZmZzZXQ7CisJdTMyIGZsYWdzOwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CiB9OwogCkBAIC03Nyw2ICsxMjMsMTAwIEBACiBhY3BpX3N0YXR1cygqYXNsX3dhbGtfY2FsbGJhY2spICh1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqIG9wLAogCQkJCSB1MzIgbGV2ZWwsIHZvaWQgKmNvbnRleHQpOwogCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV90YWcgeworCXUzMiBiaXRfaW5kZXg7CisJY2hhciAqdGFnOworfTsKKworLyogU3RyaW5ncyB1c2VkIGZvciBkZWNvZGluZyBmbGFncyB0byBBU0wga2V5d29yZHMgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3dvcmRfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfaXJxX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2xvY2tfcnVsZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2FjY2Vzc190eXBlc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3VwZGF0ZV9ydWxlc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX21hdGNoX29wc1tdOworCitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YxW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YyW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2YzW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2Y0W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19hc2ZfaGRyW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19ib290W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19jcGVwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19jcGVwMFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZGJncFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZWNkdFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZmFjc1tdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fZmFkdDFbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX2ZhZHQyW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19nYXNbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX2hlYWRlcltdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9faHBldFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDBbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQxW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0MltdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDNbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQ0W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0NVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdDZbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21hZHQ3W107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19tYWR0OFtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fbWFkdF9oZHJbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21jZmdbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX21jZmcwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19yc2RwMVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fcnNkcDJbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3Nic3RbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NsaXRbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NwY3JbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NwbWlbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NyYXRbXTsKK2V4dGVybiBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gYWNwaV9kbV90YWJsZV9pbmZvX3NyYXQwW107CitleHRlcm4gc3RydWN0IGFjcGlfZG10YWJsZV9pbmZvIGFjcGlfZG1fdGFibGVfaW5mb19zcmF0MVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fdGNwYVtdOworZXh0ZXJuIHN0cnVjdCBhY3BpX2RtdGFibGVfaW5mbyBhY3BpX2RtX3RhYmxlX2luZm9fd2RydFtdOworCisvKgorICogZG10YWJsZQorICovCit2b2lkIGFjcGlfZG1fZHVtcF9kYXRhX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCit2b2lkCithY3BpX2RtX2R1bXBfdGFibGUodTMyIHRhYmxlX2xlbmd0aCwKKwkJICAgdTMyIHRhYmxlX29mZnNldCwKKwkJICAgdm9pZCAqdGFibGUsCisJCSAgIHUzMiBzdWJfdGFibGVfbGVuZ3RoLCBzdHJ1Y3QgYWNwaV9kbXRhYmxlX2luZm8gKmluZm8pOworCit2b2lkIGFjcGlfZG1fbGluZV9oZWFkZXIodTMyIG9mZnNldCwgdTMyIGJ5dGVfbGVuZ3RoLCBjaGFyICpuYW1lKTsKKwordm9pZCBhY3BpX2RtX2xpbmVfaGVhZGVyMih1MzIgb2Zmc2V0LCB1MzIgYnl0ZV9sZW5ndGgsIGNoYXIgKm5hbWUsIHUzMiB2YWx1ZSk7CisKKy8qCisgKiBkbXRiZHVtcAorICovCit2b2lkIGFjcGlfZG1fZHVtcF9hc2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX2NwZXAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX2ZhZHQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX3NyYXQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX21jZmcoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3ZvaWQgYWNwaV9kbV9kdW1wX21hZHQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSk7CisKK3UzMiBhY3BpX2RtX2R1bXBfcnNkcChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwordm9pZCBhY3BpX2RtX2R1bXBfcnNkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwordm9pZCBhY3BpX2RtX2R1bXBfc2xpdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwordm9pZCBhY3BpX2RtX2R1bXBfeHNkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKKwogLyoKICAqIGRtd2FsawogICovCkBAIC04NCw2ICsyMjQsMTEgQEAKIGFjcGlfZG1fZGlzYXNzZW1ibGUoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSwKIAkJICAgIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcmlnaW4sIHUzMiBudW1fb3Bjb2Rlcyk7CiAKK3ZvaWQKK2FjcGlfZG1fd2Fsa19wYXJzZV90cmVlKHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcCwKKwkJCWFzbF93YWxrX2NhbGxiYWNrIGRlc2NlbmRpbmdfY2FsbGJhY2ssCisJCQlhc2xfd2Fsa19jYWxsYmFjayBhc2NlbmRpbmdfY2FsbGJhY2ssIHZvaWQgKmNvbnRleHQpOworCiAvKgogICogZG1vcGNvZGUKICAqLwpAQCAtMTY2LDYgKzMxMSw3IEBACiAKIHZvaWQKIGFjcGlfZG1fcmVzb3VyY2VfdGVtcGxhdGUoc3RydWN0IGFjcGlfb3Bfd2Fsa19pbmZvICppbmZvLAorCQkJICB1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3AsCiAJCQkgIHU4ICogYnl0ZV9kYXRhLCB1MzIgYnl0ZV9jb3VudCk7CiAKIHU4IGFjcGlfZG1faXNfcmVzb3VyY2VfdGVtcGxhdGUodW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wKTsKQEAgLTE3Niw2ICszMjIsOCBAQAogCiB2b2lkIGFjcGlfZG1fZGVjb2RlX2F0dHJpYnV0ZSh1OCBhdHRyaWJ1dGUpOwogCit2b2lkIGFjcGlfZG1fZGVzY3JpcHRvcl9uYW1lKHZvaWQpOworCiAvKgogICogZG1yZXNyY2wKICAqLwpAQCAtMjQ4LDYgKzM5NiwxNSBAQAogLyoKICAqIGRtdXRpbHMKICAqLwotdm9pZCBhY3BpX2RtX2FkZF90b19leHRlcm5hbF9saXN0KGNoYXIgKnBhdGgpOwordm9pZCBhY3BpX2RtX2FkZF90b19leHRlcm5hbF9saXN0KGNoYXIgKnBhdGgsIHU4IHR5cGUsIHUzMiB2YWx1ZSk7CisKKy8qCisgKiBkbXJlc3RhZworICovCit2b2lkIGFjcGlfZG1fZmluZF9yZXNvdXJjZXModW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKnJvb3QpOworCit2b2lkCithY3BpX2RtX2NoZWNrX3Jlc291cmNlX3JlZmVyZW5jZSh1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3AsCisJCQkJIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwogCiAjZW5kaWYJCQkJLyogX19BQ0RJU0FTTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2Rpc3BhdC5oIGIvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKaW5kZXggYzQxYTkyNi4uMjg4Zjg0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKQEAgLTE5NCw3ICsxOTQsOSBAQAogYWNwaV9kc19yZXN0YXJ0X2NvbnRyb2xfbWV0aG9kKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCiAJCQkgICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2MpOwogCi12b2lkIGFjcGlfZHNfdGVybWluYXRlX2NvbnRyb2xfbWV0aG9kKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwordm9pZAorYWNwaV9kc190ZXJtaW5hdGVfY29udHJvbF9tZXRob2QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX2Rlc2MsCisJCQkJIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9kc19iZWdpbl9tZXRob2RfZXhlY3V0aW9uKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2Rfbm9kZSwKQEAgLTMwMiw3ICszMDQsNyBAQAogCQkgICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGUsCiAJCSAgICAgIHU4ICogYW1sX3N0YXJ0LAogCQkgICAgICB1MzIgYW1sX2xlbmd0aCwKLQkJICAgICAgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8sIHU4IHBhc3NfbnVtYmVyKTsKKwkJICAgICAgc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbywgdTggcGFzc19udW1iZXIpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9kc19vYmpfc3RhY2tfcG9wX2FuZF9kZWxldGUodTMyIHBvcF9jb3VudCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2V2ZW50cy5oIGIvaW5jbHVkZS9hY3BpL2FjZXZlbnRzLmgKaW5kZXggZjI3MTdiZS4uMjM0MTQyODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2V2ZW50cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2V2ZW50cy5oCkBAIC05Myw3ICs5Myw3IEBACiAgKi8KIHU4IGFjcGlfZXZfdmFsaWRfZ3BlX2V2ZW50KHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZXZfd2Fsa19ncGVfbGlzdChBQ1BJX0dQRV9DQUxMQkFDSyBncGVfd2Fsa19jYWxsYmFjayk7CithY3BpX3N0YXR1cyBhY3BpX2V2X3dhbGtfZ3BlX2xpc3QoYWNwaV9ncGVfY2FsbGJhY2sgZ3BlX3dhbGtfY2FsbGJhY2spOwogCiBhY3BpX3N0YXR1cwogYWNwaV9ldl9kZWxldGVfZ3BlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICpncGVfeHJ1cHRfaW5mbywKQEAgLTEzOCw3ICsxMzgsNyBAQAogYWNwaV9ldl9hZGRyZXNzX3NwYWNlX2Rpc3BhdGNoKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlZ2lvbl9vYmosCiAJCQkgICAgICAgdTMyIGZ1bmN0aW9uLAogCQkJICAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkJICAgICAgIHUzMiBiaXRfd2lkdGgsIHZvaWQgKnZhbHVlKTsKKwkJCSAgICAgICB1MzIgYml0X3dpZHRoLCBhY3BpX2ludGVnZXIgKiB2YWx1ZSk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V2X2F0dGFjaF9yZWdpb24odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcl9vYmosCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oIGIvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAppbmRleCBkYzc2OGFhLi43OTdjYTFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKQEAgLTE2MCw4ICsxNjAsOSBAQAogI2RlZmluZSBBRV9BTUxfQkFEX1JFU09VUkNFX1ZBTFVFICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAxRiB8IEFFX0NPREVfQU1MKQogI2RlZmluZSBBRV9BTUxfQ0lSQ1VMQVJfUkVGRVJFTkNFICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAyMCB8IEFFX0NPREVfQU1MKQogI2RlZmluZSBBRV9BTUxfQkFEX1JFU09VUkNFX0xFTkdUSCAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAyMSB8IEFFX0NPREVfQU1MKQorI2RlZmluZSBBRV9BTUxfSUxMRUdBTF9BRERSRVNTICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAyMiB8IEFFX0NPREVfQU1MKQogCi0jZGVmaW5lIEFFX0NPREVfQU1MX01BWCAgICAgICAgICAgICAgICAgMHgwMDIxCisjZGVmaW5lIEFFX0NPREVfQU1MX01BWCAgICAgICAgICAgICAgICAgMHgwMDIyCiAKIC8qCiAgKiBJbnRlcm5hbCBleGNlcHRpb25zIHVzZWQgZm9yIGNvbnRyb2wKQEAgLTI3NSw3ICsyNzYsOCBAQAogCSJBRV9BTUxfTk9fUkVTT1VSQ0VfRU5EX1RBRyIsCiAJIkFFX0FNTF9CQURfUkVTT1VSQ0VfVkFMVUUiLAogCSJBRV9BTUxfQ0lSQ1VMQVJfUkVGRVJFTkNFIiwKLQkiQUVfQU1MX0JBRF9SRVNPVVJDRV9MRU5HVEgiCisJIkFFX0FNTF9CQURfUkVTT1VSQ0VfTEVOR1RIIiwKKwkiQUVfQU1MX0lMTEVHQUxfQUREUkVTUyIKIH07CiAKIGNoYXIgY29uc3QgKmFjcGlfZ2JsX2V4Y2VwdGlvbl9uYW1lc19jdHJsW10gPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNnbG9iYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCmluZGV4IDczNGNjNzcuLjE0NTMxZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCkBAIC0xMDcsNiArMTA3LDcgQEAKICAqIDMpIEFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGxvY2Fscy9hcmdzIChhdXRvLWluaXQgdG8gaW50ZWdlciAwKQogICogNCkgQWxsb3cgQU5ZIG9iamVjdCB0eXBlIHRvIGJlIGEgc291cmNlIG9wZXJhbmQgZm9yIHRoZSBTdG9yZSgpIG9wZXJhdG9yCiAgKiA1KSBBbGxvdyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgKGludmFsaWQgdGFyZ2V0IG5hbWUpIGluIHBhY2thZ2Ugb2JqZWN0cworICogNikgRW5hYmxlIHdhcm5pbmcgbWVzc2FnZXMgZm9yIGJlaGF2aW9yIHRoYXQgaXMgbm90IEFDUEkgc3BlYyBjb21wbGlhbnQKICAqLwogQUNQSV9FWFRFUk4gdTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9lbmFibGVfaW50ZXJwcmV0ZXJfc2xhY2ssIEZBTFNFKTsKIApAQCAtMTE0LDcgKzExNSw3IEBACiAgKiBBdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZSBBTEwgY29udHJvbCBtZXRob2RzPyBEZWZhdWx0IGlzIEZBTFNFLCBtZWFuaW5nCiAgKiB0byB1c2UgdGhlIFNlcmlhbGl6ZWQvbm90X3NlcmlhbGl6ZWQgbWV0aG9kIGZsYWdzIG9uIGEgcGVyIG1ldGhvZCBiYXNpcy4KICAqIE9ubHkgY2hhbmdlIHRoaXMgaWYgdGhlIEFTTCBjb2RlIGlzIHBvb3JseSB3cml0dGVuIGFuZCBjYW5ub3QgaGFuZGxlCi0gKiByZWVudHJhbmN5IGV2ZW4gdGhvdWdoIG1ldGhvZHMgYXJlIG1hcmtlZCAibm90X3NlcmlhbGl6ZWQiLgorICogcmVlbnRyYW5jeSBldmVuIHRob3VnaCBtZXRob2RzIGFyZSBtYXJrZWQgIk5vdFNlcmlhbGl6ZWQiLgogICovCiBBQ1BJX0VYVEVSTiB1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2FsbF9tZXRob2RzX3NlcmlhbGl6ZWQsIEZBTFNFKTsKIApAQCAtMTQ5LDEwICsxNTAsMTAgQEAKIEFDUElfRVhURVJOIHUzMiBhY3BpX2dibF90YWJsZV9mbGFnczsKIEFDUElfRVhURVJOIHUzMiBhY3BpX2dibF9yc2R0X3RhYmxlX2NvdW50OwogQUNQSV9FWFRFUk4gc3RydWN0IHJzZHBfZGVzY3JpcHRvciAqYWNwaV9nYmxfUlNEUDsKLUFDUElfRVhURVJOIFhTRFRfREVTQ1JJUFRPUiAqYWNwaV9nYmxfWFNEVDsKLUFDUElfRVhURVJOIEZBRFRfREVTQ1JJUFRPUiAqYWNwaV9nYmxfRkFEVDsKK0FDUElfRVhURVJOIHN0cnVjdCB4c2R0X2Rlc2NyaXB0b3IgKmFjcGlfZ2JsX1hTRFQ7CitBQ1BJX0VYVEVSTiBzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yICphY3BpX2dibF9GQURUOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICphY3BpX2dibF9EU0RUOwotQUNQSV9FWFRFUk4gRkFDU19ERVNDUklQVE9SICphY3BpX2dibF9GQUNTOworQUNQSV9FWFRFUk4gc3RydWN0IGZhY3NfZGVzY3JpcHRvciAqYWNwaV9nYmxfRkFDUzsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2NvbW1vbl9mYWNzIGFjcGlfZ2JsX2NvbW1vbl9mQUNTOwogLyoKICAqIFNpbmNlIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBTU0RUcyBhbmQgUFNEVHMsIGEgc2luZ2xlIHBvaW50ZXIgaXMgbm90CkBAIC0xNzcsMTUgKzE3OCwxNSBAQAogLyoKICAqIEFDUEkgVGFibGUgaW5mbyBhcnJheXMKICAqLwotZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX2xpc3QgYWNwaV9nYmxfdGFibGVfbGlzdHNbTlVNX0FDUElfVEFCTEVfVFlQRVNdOwotZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgYWNwaV9nYmxfdGFibGVfZGF0YVtOVU1fQUNQSV9UQUJMRV9UWVBFU107CitleHRlcm4gc3RydWN0IGFjcGlfdGFibGVfbGlzdCBhY3BpX2dibF90YWJsZV9saXN0c1tBQ1BJX1RBQkxFX0lEX01BWCArIDFdOworZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX3N1cHBvcnQgYWNwaV9nYmxfdGFibGVfZGF0YVtBQ1BJX1RBQkxFX0lEX01BWCArIDFdOwogCiAvKgogICogUHJlZGVmaW5lZCBtdXRleCBvYmplY3RzLiAgVGhpcyBhcnJheSBjb250YWlucyB0aGUKICAqIGFjdHVhbCBPUyBtdXRleCBoYW5kbGVzLCBpbmRleGVkIGJ5IHRoZSBsb2NhbCBBQ1BJX01VVEVYX0hBTkRMRXMuCiAgKiAoVGhlIHRhYmxlIG1hcHMgbG9jYWwgaGFuZGxlcyB0byB0aGUgcmVhbCBPUyBoYW5kbGVzKQogICovCi1BQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9tdXRleF9pbmZvIGFjcGlfZ2JsX211dGV4X2luZm9bTlVNX01VVEVYXTsKK0FDUElfRVhURVJOIHN0cnVjdCBhY3BpX211dGV4X2luZm8gYWNwaV9nYmxfbXV0ZXhfaW5mb1tBQ1BJX05VTV9NVVRFWF07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTIwMyw2ICsyMDQsNyBAQAogCiAvKiBPYmplY3QgY2FjaGVzICovCiAKK0FDUElfRVhURVJOIGFjcGlfY2FjaGVfdCAqYWNwaV9nYmxfbmFtZXNwYWNlX2NhY2hlOwogQUNQSV9FWFRFUk4gYWNwaV9jYWNoZV90ICphY3BpX2dibF9zdGF0ZV9jYWNoZTsKIEFDUElfRVhURVJOIGFjcGlfY2FjaGVfdCAqYWNwaV9nYmxfcHNfbm9kZV9jYWNoZTsKIEFDUElfRVhURVJOIGFjcGlfY2FjaGVfdCAqYWNwaV9nYmxfcHNfbm9kZV9leHRfY2FjaGU7CkBAIC0yNDQsNyArMjQ2LDYgQEAKIGV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lc1s0XTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyBhY3BpX2dibF9hbWxfb3BfaW5mb1tBTUxfTlVNX09QQ09ERVNdOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3JlZ2lvbl90eXBlc1tBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlNdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3ZhbGlkX29zaV9zdHJpbmdzW0FDUElfTlVNX09TSV9TVFJJTkdTXTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjkxLDE0ICsyOTIsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBQYXJzZXIgZ2xvYmFscwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1BQ1BJX0VYVEVSTiB1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYWNwaV9nYmxfcGFyc2VkX25hbWVzcGFjZV9yb290OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBIYXJkd2FyZSBnbG9iYWxzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMjEsNyArMzE0LDExIEBACiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqYWNwaV9nYmxfZ3BlX3hydXB0X2xpc3RfaGVhZDsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvCiAgICAgKmFjcGlfZ2JsX2dwZV9mYWR0X2Jsb2Nrc1tBQ1BJX01BWF9HUEVfQkxPQ0tTXTsKKworLyogU3BpbmxvY2tzICovCisKIEFDUElfRVhURVJOIGFjcGlfaGFuZGxlIGFjcGlfZ2JsX2dwZV9sb2NrOworQUNQSV9FWFRFUk4gYWNwaV9oYW5kbGUgYWNwaV9nYmxfaGFyZHdhcmVfbG9jazsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2xvY2FsLmgKaW5kZXggODM2MTgyMC4uMWVlY2E3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCkBAIC00NCw3ICs0NCwxMCBAQAogI2lmbmRlZiBfX0FDTE9DQUxfSF9fCiAjZGVmaW5lIF9fQUNMT0NBTF9IX18KIAorLyogYWNwaXNyYzpzdHJ1Y3RfZGVmcyAtLSBmb3IgYWNwaXNyYyBjb252ZXJzaW9uICovCisKICNkZWZpbmUgQUNQSV9XQUlUX0ZPUkVWRVIgICAgICAgICAgICAgICAweEZGRkYJLyogdTE2LCBhcyBwZXIgQUNQSSBzcGVjICovCisjZGVmaW5lIEFDUElfSU5GSU5JVEVfQ09OQ1VSUkVOQ1kgICAgICAgMHhGRgogCiB0eXBlZGVmIHZvaWQgKmFjcGlfbXV0ZXg7CiB0eXBlZGVmIHUzMiBhY3BpX211dGV4X2hhbmRsZTsKQEAgLTY5LDUyICs3Miw1NSBAQAogICogUHJlZGVmaW5lZCBoYW5kbGVzIGZvciB0aGUgbXV0ZXggb2JqZWN0cyB1c2VkIHdpdGhpbiB0aGUgc3Vic3lzdGVtCiAgKiBBbGwgbXV0ZXggb2JqZWN0cyBhcmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IGFjcGlfdXRfbXV0ZXhfaW5pdGlhbGl6ZS4KICAqCi0gKiBUaGUgYWNxdWlyZS9yZWxlYXNlIG9yZGVyaW5nIHByb3RvY29sIGlzIGltcGxpZWQgdmlhIHRoaXMgbGlzdC4gIE11dGV4ZXMKKyAqIFRoZSBhY3F1aXJlL3JlbGVhc2Ugb3JkZXJpbmcgcHJvdG9jb2wgaXMgaW1wbGllZCB2aWEgdGhpcyBsaXN0LiBNdXRleGVzCiAgKiB3aXRoIGEgbG93ZXIgdmFsdWUgbXVzdCBiZSBhY3F1aXJlZCBiZWZvcmUgbXV0ZXhlcyB3aXRoIGEgaGlnaGVyIHZhbHVlLgogICoKLSAqIE5PVEU6IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBiZSByZWZsZWN0ZWQgaW4gdGhlIGFjcGlfZ2JsX211dGV4X25hbWVzIHRhYmxlIGFsc28hCisgKiBOT1RFOiBhbnkgY2hhbmdlcyBoZXJlIG11c3QgYmUgcmVmbGVjdGVkIGluIHRoZSBhY3BpX2dibF9tdXRleF9uYW1lcworICogdGFibGUgYmVsb3cgYWxzbyEKICAqLwotI2RlZmluZSBBQ1BJX01UWF9FWEVDVVRFICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQUNQSV9NVFhfSU5URVJQUkVURVIgICAgICAgICAgICAxCi0jZGVmaW5lIEFDUElfTVRYX1BBUlNFUiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBBQ1BJX01UWF9ESVNQQVRDSEVSICAgICAgICAgICAgIDMKLSNkZWZpbmUgQUNQSV9NVFhfVEFCTEVTICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIEFDUElfTVRYX09QX1JFR0lPTlMgICAgICAgICAgICAgNQotI2RlZmluZSBBQ1BJX01UWF9OQU1FU1BBQ0UgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQUNQSV9NVFhfRVZFTlRTICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEFDUElfTVRYX0hBUkRXQVJFICAgICAgICAgICAgICAgOAotI2RlZmluZSBBQ1BJX01UWF9DQUNIRVMgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgQUNQSV9NVFhfTUVNT1JZICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBBQ1BJX01UWF9ERUJVR19DTURfQ09NUExFVEUgICAgIDExCi0jZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9SRUFEWSAgICAgICAgMTIKKyNkZWZpbmUgQUNQSV9NVFhfSU5URVJQUkVURVIgICAgICAgICAgICAwCS8qIEFNTCBJbnRlcnByZXRlciwgbWFpbiBsb2NrICovCisjZGVmaW5lIEFDUElfTVRYX0NPTlRST0xfTUVUSE9EICAgICAgICAgMQkvKiBDb250cm9sIG1ldGhvZCB0ZXJtaW5hdGlvbiBbVEJEOiBtYXkgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeV0gKi8KKyNkZWZpbmUgQUNQSV9NVFhfVEFCTEVTICAgICAgICAgICAgICAgICAyCS8qIERhdGEgZm9yIEFDUEkgdGFibGVzICovCisjZGVmaW5lIEFDUElfTVRYX05BTUVTUEFDRSAgICAgICAgICAgICAgMwkvKiBBQ1BJIE5hbWVzcGFjZSAqLworI2RlZmluZSBBQ1BJX01UWF9FVkVOVFMgICAgICAgICAgICAgICAgIDQJLyogRGF0YSBmb3IgQUNQSSBldmVudHMgKi8KKyNkZWZpbmUgQUNQSV9NVFhfQ0FDSEVTICAgICAgICAgICAgICAgICA1CS8qIEludGVybmFsIGNhY2hlcywgZ2VuZXJhbCBwdXJwb3NlcyAqLworI2RlZmluZSBBQ1BJX01UWF9NRU1PUlkgICAgICAgICAgICAgICAgIDYJLyogRGVidWcgbWVtb3J5IHRyYWNraW5nIGxpc3RzICovCisjZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9DT01QTEVURSAgICAgNwkvKiBBTUwgZGVidWdnZXIgKi8KKyNkZWZpbmUgQUNQSV9NVFhfREVCVUdfQ01EX1JFQURZICAgICAgICA4CS8qIEFNTCBkZWJ1Z2dlciAqLwogCi0jZGVmaW5lIE1BWF9NVVRFWCAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTlVNX01VVEVYICAgICAgICAgICAgICAgICAgICAgICBNQVhfTVVURVgrMQorI2RlZmluZSBBQ1BJX01BWF9NVVRFWCAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQUNQSV9OVU1fTVVURVggICAgICAgICAgICAgICAgICBBQ1BJX01BWF9NVVRFWCsxCiAKICNpZiBkZWZpbmVkKEFDUElfREVCVUdfT1VUUFVUKSB8fCBkZWZpbmVkKEFDUElfREVCVUdHRVIpCiAjaWZkZWYgREVGSU5FX0FDUElfR0xPQkFMUwogCi0vKiBOYW1lcyBmb3IgdGhlIG11dGV4ZXMgdXNlZCBpbiB0aGUgc3Vic3lzdGVtICovCisvKiBEZWJ1ZyBuYW1lcyBmb3IgdGhlIG11dGV4ZXMgYWJvdmUgKi8KIAotc3RhdGljIGNoYXIgKmFjcGlfZ2JsX211dGV4X25hbWVzW10gPSB7Ci0JIkFDUElfTVRYX0V4ZWN1dGUiLAorc3RhdGljIGNoYXIgKmFjcGlfZ2JsX211dGV4X25hbWVzW0FDUElfTlVNX01VVEVYXSA9IHsKIAkiQUNQSV9NVFhfSW50ZXJwcmV0ZXIiLAotCSJBQ1BJX01UWF9QYXJzZXIiLAotCSJBQ1BJX01UWF9EaXNwYXRjaGVyIiwKKwkiQUNQSV9NVFhfTWV0aG9kIiwKIAkiQUNQSV9NVFhfVGFibGVzIiwKLQkiQUNQSV9NVFhfb3BfcmVnaW9ucyIsCiAJIkFDUElfTVRYX05hbWVzcGFjZSIsCiAJIkFDUElfTVRYX0V2ZW50cyIsCi0JIkFDUElfTVRYX0hhcmR3YXJlIiwKIAkiQUNQSV9NVFhfQ2FjaGVzIiwKIAkiQUNQSV9NVFhfTWVtb3J5IiwKLQkiQUNQSV9NVFhfZGVidWdfY21kX2NvbXBsZXRlIiwKLQkiQUNQSV9NVFhfZGVidWdfY21kX3JlYWR5IiwKKwkiQUNQSV9NVFhfRGVidWdDbWRDb21wbGV0ZSIsCisJIkFDUElfTVRYX0RlYnVnQ21kUmVhZHkiCiB9OwogCiAjZW5kaWYKICNlbmRpZgogCisvKgorICogUHJlZGVmaW5lZCBoYW5kbGVzIGZvciBzcGlubG9ja3MgdXNlZCB3aXRoaW4gdGhlIHN1YnN5c3RlbS4KKyAqIFRoZXNlIHNwaW5sb2NrcyBhcmUgY3JlYXRlZCBieSBhY3BpX3V0X211dGV4X2luaXRpYWxpemUKKyAqLworI2RlZmluZSBBQ1BJX0xPQ0tfR1BFUyAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNQSV9MT0NLX0hBUkRXQVJFICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQUNQSV9NQVhfTE9DSyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfTlVNX0xPQ0sgICAgICAgICAgICAgICAgICAgQUNQSV9NQVhfTE9DSysxCisKIC8qIE93bmVyIElEcyBhcmUgdXNlZCB0byB0cmFjayBuYW1lc3BhY2Ugbm9kZXMgZm9yIHNlbGVjdGl2ZSBkZWxldGlvbiAqLwogCiB0eXBlZGVmIHU4IGFjcGlfb3duZXJfaWQ7CkBAIC0xMjksNyArMTM1LDcgQEAKIHN0cnVjdCBhY3BpX211dGV4X2luZm8gewogCWFjcGlfbXV0ZXggbXV0ZXg7CiAJdTMyIHVzZV9jb3VudDsKLQl1MzIgdGhyZWFkX2lkOworCWFjcGlfdGhyZWFkX2lkIHRocmVhZF9pZDsKIH07CiAKIC8qIExvY2sgZmxhZyBwYXJhbWV0ZXIgZm9yIHZhcmlvdXMgaW50ZXJmYWNlcyAqLwpAQCAtMTQ0LDYgKzE1MCw4IEBACiAjZGVmaW5lIEFDUElfRklFTERfRFdPUkRfR1JBTlVMQVJJVFkgICAgNAogI2RlZmluZSBBQ1BJX0ZJRUxEX1FXT1JEX0dSQU5VTEFSSVRZICAgIDgKIAorI2RlZmluZSBBQ1BJX0VOVFJZX05PVF9GT1VORCAgICAgICAgICAgIE5VTEwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTmFtZXNwYWNlIHR5cGVkZWZzIGFuZCBzdHJ1Y3RzCkBAIC0xNTgsNDkgKzE2Niw1NSBAQAogCUFDUElfSU1PREVfRVhFQ1VURSA9IDB4MEUKIH0gYWNwaV9pbnRlcnByZXRlcl9tb2RlOwogCi0vKgotICogVGhlIE5vZGUgZGVzY3JpYmVzIGEgbmFtZWQgb2JqZWN0IHRoYXQgYXBwZWFycyBpbiB0aGUgQU1MCi0gKiBBbiBhY3BpX25vZGUgaXMgdXNlZCB0byBzdG9yZSBOb2Rlcy4KLSAqCi0gKiBkYXRhX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMsIGFuZCBNVVNUCi0gKiBiZSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGlzIHN0cnVjdHVyZS4KLSAqLwogdW5pb24gYWNwaV9uYW1lX3VuaW9uIHsKIAl1MzIgaW50ZWdlcjsKIAljaGFyIGFzY2lpWzRdOwogfTsKIAorLyoKKyAqIFRoZSBOYW1lc3BhY2UgTm9kZSBkZXNjcmliZXMgYSBuYW1lZCBvYmplY3QgdGhhdCBhcHBlYXJzIGluIHRoZSBBTUwuCisgKiBkZXNjcmlwdG9yX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMuCisgKgorICogVGhlIG5vZGUgaXMgb3B0aW1pemVkIGZvciBib3RoIDMyLWJpdCBhbmQgNjQtYml0IHBsYXRmb3JtczoKKyAqIDIwIGJ5dGVzIGZvciB0aGUgMzItYml0IGNhc2UsIDMyIGJ5dGVzIGZvciB0aGUgNjQtYml0IGNhc2UuCisgKgorICogTm90ZTogVGhlIGRlc2NyaXB0b3JfdHlwZSBhbmQgVHlwZSBmaWVsZHMgbXVzdCBhcHBlYXIgaW4gdGhlIGlkZW50aWNhbAorICogcG9zaXRpb24gaW4gYm90aCB0aGUgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgYW5kIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QKKyAqIHN0cnVjdHVyZXMuCisgKi8KIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIHsKLQl1OCBkZXNjcmlwdG9yOwkJLyogVXNlZCB0byBkaWZmZXJlbnRpYXRlIG9iamVjdCBkZXNjcmlwdG9yIHR5cGVzICovCi0JdTggdHlwZTsJCS8qIFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZSAqLwotCXUxNiByZWZlcmVuY2VfY291bnQ7CS8qIEN1cnJlbnQgY291bnQgb2YgcmVmZXJlbmNlcyBhbmQgY2hpbGRyZW4gKi8KKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CS8qIEludGVycHJldGVyIG9iamVjdCAqLworCXU4IGRlc2NyaXB0b3JfdHlwZTsJLyogRGlmZmVyZW50aWF0ZSBvYmplY3QgZGVzY3JpcHRvciB0eXBlcyAqLworCXU4IHR5cGU7CQkvKiBBQ1BJIFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmFtZSAqLworCXU4IGZsYWdzOwkJLyogTWlzY2VsbGFuZW91cyBmbGFncyAqLworCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CS8qIE5vZGUgY3JlYXRvciAqLwogCXVuaW9uIGFjcGlfbmFtZV91bmlvbiBuYW1lOwkvKiBBQ1BJIE5hbWUsIGFsd2F5cyA0IGNoYXJzIHBlciBBQ1BJIHNwZWMgKi8KLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmplY3Q7CS8qIFBvaW50ZXIgdG8gYXR0YWNoZWQgQUNQSSBvYmplY3QgKG9wdGlvbmFsKSAqLwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpjaGlsZDsJLyogRmlyc3QgY2hpbGQgKi8KLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGVlcjsJLyogTmV4dCBwZWVyICovCi0JdTggb3duZXJfaWQ7CQkvKiBXaG8gY3JlYXRlZCB0aGlzIG5vZGUgKi8KLQl1OCBmbGFnczsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGVlcjsJLyogUGVlci4gUGFyZW50IGlmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1Qgc2V0ICovCiAKLQkvKiBGaWVsZHMgdXNlZCBieSB0aGUgQVNMIGNvbXBpbGVyIG9ubHkgKi8KLQotI2lmZGVmIEFDUElfQVNMX0NPTVBJTEVSCi0JdTMyIHZhbHVlOworCS8qCisJICogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIEFTTCBjb21waWxlciBhbmQgZGlzYXNzZW1ibGVyIG9ubHkKKwkgKi8KKyNpZmRlZiBBQ1BJX0xBUkdFX05BTUVTUEFDRV9OT0RFCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wOworCXUzMiB2YWx1ZTsKKwl1MzIgbGVuZ3RoOwogI2VuZGlmCiB9OwogCi0jZGVmaW5lIEFDUElfRU5UUllfTk9UX0ZPVU5EICAgICAgICAgICAgTlVMTAorLyogTmFtZXNwYWNlIE5vZGUgZmxhZ3MgKi8KIAotLyogTm9kZSBmbGFncyAqLworI2RlZmluZSBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUICAgICAgICAgIDB4MDEJLyogRW5kLW9mLWxpc3QsIFBlZXIgZmllbGQgcG9pbnRzIHRvIHBhcmVudCAqLworI2RlZmluZSBBTk9CSl9EQVRBX1dJRFRIXzMyICAgICAgICAgICAgIDB4MDIJLyogUGFyZW50IHRhYmxlIHVzZXMgMzItYml0IG1hdGggKi8KKyNkZWZpbmUgQU5PQkpfTUVUSE9EX0FSRyAgICAgICAgICAgICAgICAweDA0CS8qIE5vZGUgaXMgYSBtZXRob2QgYXJndW1lbnQgKi8KKyNkZWZpbmUgQU5PQkpfTUVUSE9EX0xPQ0FMICAgICAgICAgICAgICAweDA4CS8qIE5vZGUgaXMgYSBtZXRob2QgbG9jYWwgKi8KKyNkZWZpbmUgQU5PQkpfU1VCVFJFRV9IQVNfSU5JICAgICAgICAgICAweDEwCS8qIFVzZWQgdG8gb3B0aW1pemUgZGV2aWNlIGluaXRpYWxpemF0aW9uICovCiAKLSNkZWZpbmUgQU5PQkpfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QgICAgICAgICAgMHgwMgotI2RlZmluZSBBTk9CSl9EQVRBX1dJRFRIXzMyICAgICAgICAgICAgIDB4MDQJLyogUGFyZW50IHRhYmxlIGlzIDY0LWJpdHMgKi8KLSNkZWZpbmUgQU5PQkpfTUVUSE9EX0FSRyAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFOT0JKX01FVEhPRF9MT0NBTCAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBBTk9CSl9NRVRIT0RfTk9fUkVUVkFMICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQU5PQkpfTUVUSE9EX1NPTUVfTk9fUkVUVkFMICAgICAweDQwCi0jZGVmaW5lIEFOT0JKX0lTX0JJVF9PRkZTRVQgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBBTk9CSl9JU19FWFRFUk5BTCAgICAgICAgICAgICAgIDB4MDgJLyogaV9hU0wgb25seTogVGhpcyBvYmplY3QgY3JlYXRlZCB2aWEgRXh0ZXJuYWwoKSAqLworI2RlZmluZSBBTk9CSl9NRVRIT0RfTk9fUkVUVkFMICAgICAgICAgIDB4MTAJLyogaV9hU0wgb25seTogTWV0aG9kIGhhcyBubyByZXR1cm4gdmFsdWUgKi8KKyNkZWZpbmUgQU5PQkpfTUVUSE9EX1NPTUVfTk9fUkVUVkFMICAgICAweDIwCS8qIGlfYVNMIG9ubHk6IE1ldGhvZCBoYXMgYXQgbGVhc3Qgb25lIHJldHVybiB2YWx1ZSAqLworI2RlZmluZSBBTk9CSl9JU19CSVRfT0ZGU0VUICAgICAgICAgICAgIDB4NDAJLyogaV9hU0wgb25seTogUmVmZXJlbmNlIGlzIGEgYml0IG9mZnNldCAqLworI2RlZmluZSBBTk9CSl9JU19SRUZFUkVOQ0VEICAgICAgICAgICAgIDB4ODAJLyogaV9hU0wgb25seTogT2JqZWN0IHdhcyByZWZlcmVuY2VkICovCiAKIC8qCiAgKiBBQ1BJIFRhYmxlIERlc2NyaXB0b3IuICBPbmUgcGVyIEFDUEkgdGFibGUKQEAgLTIxMiw4ICsyMjYsOCBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqcG9pbnRlcjsKIAl1OCAqYW1sX3N0YXJ0OwogCXU2NCBwaHlzaWNhbF9hZGRyZXNzOwotCXUzMiBhbWxfbGVuZ3RoOwogCWFjcGlfc2l6ZSBsZW5ndGg7CisJdTMyIGFtbF9sZW5ndGg7CiAJYWNwaV9vd25lcl9pZCBvd25lcl9pZDsKIAl1OCB0eXBlOwogCXU4IGFsbG9jYXRpb247CkBAIC0yNzYsNiArMjkwLDkgQEAKIAl1OCBmaWVsZF90eXBlOwogfTsKIAordHlwZWRlZgorYWNwaV9zdGF0dXMoKkFDUElfSU5URVJOQUxfTUVUSE9EKSAoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqIHdhbGtfc3RhdGUpOworCiAvKgogICogQml0bWFwcGVkIEFDUEkgdHlwZXMuICBVc2VkIGludGVybmFsbHkgb25seQogICovCkBAIC0zNzcsNyArMzk0LDcgQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrOwogfTsKIAotdHlwZWRlZiBhY3BpX3N0YXR1cygqQUNQSV9HUEVfQ0FMTEJBQ0spIChzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqCit0eXBlZGVmIGFjcGlfc3RhdHVzKCphY3BpX2dwZV9jYWxsYmFjaykgKHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICoKIAkJCQkJIGdwZV94cnVwdF9pbmZvLAogCQkJCQkgc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gKgogCQkJCQkgZ3BlX2Jsb2NrKTsKQEAgLTQxNiwxMyArNDMzLDE0IEBACiAjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfRkFMU0UgICAgICAgICAweEMzCiAjZGVmaW5lIEFDUElfQ09OVFJPTF9QUkVESUNBVEVfVFJVRSAgICAgICAgICAweEM0CiAKLSNkZWZpbmUgQUNQSV9TVEFURV9DT01NT04gICAvKiBUd28gMzItYml0IGZpZWxkcyBhbmQgYSBwb2ludGVyICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgIFwKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsgICAgICBcCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU7ICAgICAgXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOyAgIFwKLQl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dDsKKyNkZWZpbmUgQUNQSV9TVEFURV9DT01NT04gXAorCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5leHQ7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTsgLyogVG8gZGlmZmVyZW50aWF0ZSB2YXJpb3VzIGludGVybmFsIG9ianMgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7IFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOworCisJLyogVGhlcmUgYXJlIDIgYnl0ZXMgYXZhaWxhYmxlIGhlcmUgdW50aWwgdGhlIG5leHQgbmF0dXJhbCBhbGlnbm1lbnQgYm91bmRhcnkgKi8KIAogc3RydWN0IGFjcGlfY29tbW9uX3N0YXRlIHsKIEFDUElfU1RBVEVfQ09NTU9OfTsKQEAgLTQzOCwxMiArNDU2LDEyIEBACiAgKiBQa2cgc3RhdGUgLSB1c2VkIHRvIHRyYXZlcnNlIG5lc3RlZCBwYWNrYWdlIHN0cnVjdHVyZXMKICAqLwogc3RydWN0IGFjcGlfcGtnX3N0YXRlIHsKLQlBQ1BJX1NUQVRFX0NPTU1PTiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzb3VyY2Vfb2JqZWN0OworCUFDUElfU1RBVEVfQ09NTU9OIHUxNiBpbmRleDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzb3VyY2Vfb2JqZWN0OwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmRlc3Rfb2JqZWN0OwogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CiAJdm9pZCAqdGhpc190YXJnZXRfb2JqOwogCXUzMiBudW1fcGFja2FnZXM7Ci0JdTE2IGluZGV4OwogfTsKIAogLyoKQEAgLTQ1MSwxMCArNDY5LDEwIEBACiAgKiBBbGxvd3MgbmVzdGluZyBvZiB0aGVzZSBjb25zdHJ1Y3RzCiAgKi8KIHN0cnVjdCBhY3BpX2NvbnRyb2xfc3RhdGUgewotCUFDUElfU1RBVEVfQ09NTU9OIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpwcmVkaWNhdGVfb3A7CisJQUNQSV9TVEFURV9DT01NT04gdTE2IG9wY29kZTsKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqcHJlZGljYXRlX29wOwogCXU4ICphbWxfcHJlZGljYXRlX3N0YXJ0OwkvKiBTdGFydCBvZiBpZi93aGlsZSBwcmVkaWNhdGUgKi8KIAl1OCAqcGFja2FnZV9lbmQ7CS8qIEVuZCBvZiBpZi93aGlsZSBibG9jayAqLwotCXUxNiBvcGNvZGU7CiB9OwogCiAvKgpAQCAtNDY1LDExICs0ODMsMTEgQEAKIH07CiAKIHN0cnVjdCBhY3BpX3BzY29wZV9zdGF0ZSB7Ci0JQUNQSV9TVEFURV9DT01NT04gdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm9wOwkvKiBDdXJyZW50IG9wIGJlaW5nIHBhcnNlZCAqLworCUFDUElfU1RBVEVfQ09NTU9OIHUzMiBhcmdfY291bnQ7CS8qIE51bWJlciBvZiBmaXhlZCBhcmd1bWVudHMgKi8KKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqb3A7CS8qIEN1cnJlbnQgb3AgYmVpbmcgcGFyc2VkICovCiAJdTggKmFyZ19lbmQ7CQkvKiBDdXJyZW50IGFyZ3VtZW50IGVuZCAqLwogCXU4ICpwa2dfZW5kOwkJLyogQ3VycmVudCBwYWNrYWdlIGVuZCAqLwogCXUzMiBhcmdfbGlzdDsJCS8qIE5leHQgYXJndW1lbnQgdG8gcGFyc2UgKi8KLQl1MzIgYXJnX2NvdW50OwkJLyogTnVtYmVyIG9mIGZpeGVkIGFyZ3VtZW50cyAqLwogfTsKIAogLyoKQEAgLTQ3NywxMCArNDk1LDEwIEBACiAgKiBzdGF0ZXMgYXJlIGNyZWF0ZWQgd2hlbiB0aGVyZSBhcmUgbmVzdGVkIGNvbnRyb2wgbWV0aG9kcyBleGVjdXRpbmcuCiAgKi8KIHN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSB7Ci0JQUNQSV9TVEFURV9DT01NT04gc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZV9saXN0OwkvKiBIZWFkIG9mIGxpc3Qgb2Ygd2Fsa19zdGF0ZXMgZm9yIHRoaXMgdGhyZWFkICovCisJQUNQSV9TVEFURV9DT01NT04gdTggY3VycmVudF9zeW5jX2xldmVsOwkvKiBNdXRleCBTeW5jIChuZXN0ZWQgYWNxdWlyZSkgbGV2ZWwgKi8KKwlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlX2xpc3Q7CS8qIEhlYWQgb2YgbGlzdCBvZiB3YWxrX3N0YXRlcyBmb3IgdGhpcyB0aHJlYWQgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3F1aXJlZF9tdXRleF9saXN0OwkvKiBMaXN0IG9mIGFsbCBjdXJyZW50bHkgYWNxdWlyZWQgbXV0ZXhlcyAqLwotCXUzMiB0aHJlYWRfaWQ7CQkvKiBSdW5uaW5nIHRocmVhZCBJRCAqLwotCXU4IGN1cnJlbnRfc3luY19sZXZlbDsJLyogTXV0ZXggU3luYyAobmVzdGVkIGFjcXVpcmUpIGxldmVsICovCisJYWNwaV90aHJlYWRfaWQgdGhyZWFkX2lkOwkvKiBSdW5uaW5nIHRocmVhZCBJRCAqLwogfTsKIAogLyoKQEAgLTQ4OCwxMCArNTA2LDkgQEAKICAqIEFNTCBhcmd1bWVudHMKICAqLwogc3RydWN0IGFjcGlfcmVzdWx0X3ZhbHVlcyB7Ci0JQUNQSV9TVEFURV9DT01NT04KLQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2NbQUNQSV9PQkpfTlVNX09QRVJBTkRTXTsKLQl1OCBudW1fcmVzdWx0czsKKwlBQ1BJX1NUQVRFX0NPTU1PTiB1OCBudW1fcmVzdWx0czsKIAl1OCBsYXN0X2luc2VydDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzY1tBQ1BJX09CSl9OVU1fT1BFUkFORFNdOwogfTsKIAogdHlwZWRlZgpAQCAtNTQ2LDcgKzU2Myw3IEBACiAjZW5kaWYKIAl1MzIgcGFyc2VfYXJnczsJCS8qIEdyYW1tYXIvUGFyc2UgdGltZSBhcmd1bWVudHMgKi8KIAl1MzIgcnVudGltZV9hcmdzOwkvKiBJbnRlcnByZXQgdGltZSBhcmd1bWVudHMgKi8KLQl1MzIgZmxhZ3M7CQkvKiBNaXNjIGZsYWdzICovCisJdTE2IGZsYWdzOwkJLyogTWlzYyBmbGFncyAqLwogCXU4IG9iamVjdF90eXBlOwkJLyogQ29ycmVzcG9uZGluZyBpbnRlcm5hbCBvYmplY3QgdHlwZSAqLwogCXU4IGNsYXNzOwkJLyogT3Bjb2RlIGNsYXNzICovCiAJdTggdHlwZTsJCS8qIE9wY29kZSB0eXBlICovCkBAIC01NjMsMjkgKzU4MCwzMSBAQAogfTsKIAogI2RlZmluZSBBQ1BJX1BBUlNFX0NPTU1PTiBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlOyAgICAgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBUeXBlIG9mIE9wICovXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcGNvZGU7ICAgICAvKiBBTUwgb3Bjb2RlICovXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vZmZzZXQ7ICAgICAvKiBPZmZzZXQgb2YgZGVjbGFyYXRpb24gaW4gQU1MICovXAotCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICAgICAgICAgICAgICpwYXJlbnQ7ICAgICAgICAvKiBQYXJlbnQgb3AgKi9cCi0JdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAgICAgKm5leHQ7ICAgICAgICAgIC8qIE5leHQgb3AgKi9cCisJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgICAgICAgICAqcGFyZW50OyAgICAgICAgLyogUGFyZW50IG9wICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOyAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBUeXBlIG9mIE9wICovXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29wY29kZTsgICAgIC8qIEFNTCBvcGNvZGUgKi9cCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWxfb2Zmc2V0OyAgICAgLyogT2Zmc2V0IG9mIGRlY2xhcmF0aW9uIGluIEFNTCAqL1wKKwl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAgICAgICAgICpuZXh0OyAgICAgICAgICAvKiBOZXh0IG9wICovXAorCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgKm5vZGU7ICAgICAgICAgIC8qIEZvciB1c2UgYnkgaW50ZXJwcmV0ZXIgKi9cCisJdW5pb24gYWNwaV9wYXJzZV92YWx1ZSAgICAgICAgICB2YWx1ZTsgICAgICAgICAgLyogVmFsdWUgb3IgYXJncyBhc3NvY2lhdGVkIHdpdGggdGhlIG9wY29kZSAqL1wKIAlBQ1BJX0RJU0FTTV9PTkxZX01FTUJFUlMgKFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhc21fZmxhZ3M7ICAgLyogVXNlZCBkdXJpbmcgQU1MIGRpc2Fzc2VtYmx5ICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FzbV9vcGNvZGU7ICAvKiBTdWJ0eXBlIHVzZWQgZm9yIGRpc2Fzc2VtYmx5ICovXAotCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcF9uYW1lWzE2XSkgLyogT3AgbmFtZSAoZGVidWcgb25seSkgKi9cCi0JCQkgICAvKiBOT04tREVCVUcgbWVtYmVycyBiZWxvdzogKi9cCi0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgICAgICAgICAgKm5vZGU7ICAgICAgICAgIC8qIEZvciB1c2UgYnkgaW50ZXJwcmV0ZXIgKi9cCi0JdW5pb24gYWNwaV9wYXJzZV92YWx1ZSAgICAgICAgICAgICAgdmFsdWU7CS8qIFZhbHVlIG9yIGFyZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGNvZGUgKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FzbV9mbGFnczsgICAvKiBVc2VkIGR1cmluZyBBTUwgZGlzYXNzZW1ibHkgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhc21fb3Bjb2RlOyAgLyogU3VidHlwZSB1c2VkIGZvciBkaXNhc3NlbWJseSAqL1wKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtbF9vcF9uYW1lWzE2XSkJLyogT3AgbmFtZSAoZGVidWcgb25seSkgKi8KIAotI2RlZmluZSBBQ1BJX0RBU01fQlVGRkVSICAgICAgICAweDAwCi0jZGVmaW5lIEFDUElfREFTTV9SRVNPVVJDRSAgICAgIDB4MDEKLSNkZWZpbmUgQUNQSV9EQVNNX1NUUklORyAgICAgICAgMHgwMgotI2RlZmluZSBBQ1BJX0RBU01fVU5JQ09ERSAgICAgICAweDAzCi0jZGVmaW5lIEFDUElfREFTTV9FSVNBSUQgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9EQVNNX01BVENIT1AgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX0RBU01fQlVGRkVSICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQUNQSV9EQVNNX1JFU09VUkNFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfREFTTV9TVFJJTkcgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX0RBU01fVU5JQ09ERSAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9EQVNNX0VJU0FJRCAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfREFTTV9NQVRDSE9QICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX0RBU01fTE5PVF9QUkVGSVggICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9EQVNNX0xOT1RfU1VGRklYICAgICAgICAgICAweDA3CisjZGVmaW5lIEFDUElfREFTTV9JR05PUkUgICAgICAgICAgICAgICAgMHgwOAogCiAvKgotICogZ2VuZXJpYyBvcGVyYXRpb24gKGZvciBleGFtcGxlOiAgSWYsIFdoaWxlLCBTdG9yZSkKKyAqIEdlbmVyaWMgb3BlcmF0aW9uIChmb3IgZXhhbXBsZTogIElmLCBXaGlsZSwgU3RvcmUpCiAgKi8KIHN0cnVjdCBhY3BpX3BhcnNlX29ial9jb21tb24gewogQUNQSV9QQVJTRV9DT01NT059OwpAQCAtNjAxLDcgKzYyMCw3IEBACiAJdTMyIG5hbWU7CQkvKiA0LWJ5dGUgbmFtZSBvciB6ZXJvIGlmIG5vIG5hbWUgKi8KIH07CiAKLS8qIFRoZSBwYXJzZSBub2RlIGlzIHRoZSBmdW5kYW1lbnRhbCBlbGVtZW50IG9mIHRoZSBwYXJzZSB0cmVlICovCisvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBieSB0aGUgaV9hU0wgY29tcGlsZXIgb25seSAqLwogCiAjZGVmaW5lIEFDUElfTUFYX1BBUlNFT1BfTkFNRSAgIDIwCiAKQEAgLTY0Myw3ICs2NjIsNiBAQAogICogbWV0aG9kLgogICovCiBzdHJ1Y3QgYWNwaV9wYXJzZV9zdGF0ZSB7Ci0JdTMyIGFtbF9zaXplOwogCXU4ICphbWxfc3RhcnQ7CQkvKiBGaXJzdCBBTUwgYnl0ZSAqLwogCXU4ICphbWw7CQkvKiBOZXh0IEFNTCBieXRlICovCiAJdTggKmFtbF9lbmQ7CQkvKiAobGFzdCArIDEpIEFNTCBieXRlICovCkBAIC02NTMsMjIgKzY3MSwyMyBAQAogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpzdGFydF9ub2RlOwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGU7CS8qIEN1cnJlbnQgc2NvcGUgKi8KIAl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqc3RhcnRfc2NvcGU7CisJdTMyIGFtbF9zaXplOwogfTsKIAogLyogUGFyc2Ugb2JqZWN0IGZsYWdzICovCiAKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX05BTUVEICAgICAgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0RFRkVSUkVEICAgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0JZVEVMSVNUICAgICAgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0lOX0NBQ0hFICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0dFTkVSSUMgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfUEFSU0VPUF9OQU1FRCAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX1BBUlNFT1BfREVGRVJSRUQgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0JZVEVMSVNUICAgICAgICAgICAweDA4CisjZGVmaW5lIEFDUElfUEFSU0VPUF9JTl9DQUNIRSAgICAgICAgICAgMHg4MAogCiAvKiBQYXJzZSBvYmplY3QgZGlzYXNtX2ZsYWdzICovCiAKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0lHTk9SRSAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX1BBUkFNTElTVCAgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX0VNUFRZX1RFUk1MSVNUICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9QQVJTRU9QX1NQRUNJQUwgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0lHTk9SRSAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfUEFSU0VPUF9QQVJBTUxJU1QgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX1BBUlNFT1BfRU1QVFlfVEVSTUxJU1QgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX1NQRUNJQUwgICAgICAgICAgICAweDEwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTY3Niw4ICs2OTUsOCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIFBDSV9ST09UX0hJRF9TVFJJTkcgICAgICAgICAiUE5QMEEwMyIKLSNkZWZpbmUgUENJX0VYUFJFU1NfUk9PVF9ISURfU1RSSU5HICJQTlAwQTA4IgorI2RlZmluZSBQQ0lfUk9PVF9ISURfU1RSSU5HICAgICAgICAgICAgICJQTlAwQTAzIgorI2RlZmluZSBQQ0lfRVhQUkVTU19ST09UX0hJRF9TVFJJTkcgICAgICJQTlAwQTA4IgogCiBzdHJ1Y3QgYWNwaV9iaXRfcmVnaXN0ZXJfaW5mbyB7CiAJdTggcGFyZW50X3JlZ2lzdGVyOwpAQCAtNzEwLDEzICs3MjksMTQgQEAKICNkZWZpbmUgQUNQSV9CSVRNQVNLX1BDSUVYUF9XQUtFX1NUQVRVUyAgICAgICAgIDB4NDAwMAkvKiBBQ1BJIDMuMCAqLwogI2RlZmluZSBBQ1BJX0JJVE1BU0tfV0FLRV9TVEFUVVMgICAgICAgICAgICAgICAgMHg4MDAwCiAKLSNkZWZpbmUgQUNQSV9CSVRNQVNLX0FMTF9GSVhFRF9TVEFUVVMgICAgICAgICAgIChBQ1BJX0JJVE1BU0tfVElNRVJfU1RBVFVTICAgICAgICAgIHwgXAotCQkJIEFDUElfQklUTUFTS19CVVNfTUFTVEVSX1NUQVRVUyAgICAgfCBcCi0JCQkgQUNQSV9CSVRNQVNLX0dMT0JBTF9MT0NLX1NUQVRVUyAgICB8IFwKLQkJCSBBQ1BJX0JJVE1BU0tfUE9XRVJfQlVUVE9OX1NUQVRVUyAgIHwgXAotCQkJIEFDUElfQklUTUFTS19TTEVFUF9CVVRUT05fU1RBVFVTICAgfCBcCi0JCQkgQUNQSV9CSVRNQVNLX1JUX0NMT0NLX1NUQVRVUyAgICAgICB8IFwKLQkJCSBBQ1BJX0JJVE1BU0tfV0FLRV9TVEFUVVMpCisjZGVmaW5lIEFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTICAgICAgICAgICAoXAorCUFDUElfQklUTUFTS19USU1FUl9TVEFUVVMgICAgICAgICAgfCBcCisJQUNQSV9CSVRNQVNLX0JVU19NQVNURVJfU1RBVFVTICAgICB8IFwKKwlBQ1BJX0JJVE1BU0tfR0xPQkFMX0xPQ0tfU1RBVFVTICAgIHwgXAorCUFDUElfQklUTUFTS19QT1dFUl9CVVRUT05fU1RBVFVTICAgfCBcCisJQUNQSV9CSVRNQVNLX1NMRUVQX0JVVFRPTl9TVEFUVVMgICB8IFwKKwlBQ1BJX0JJVE1BU0tfUlRfQ0xPQ0tfU1RBVFVTICAgICAgIHwgXAorCUFDUElfQklUTUFTS19XQUtFX1NUQVRVUykKIAogI2RlZmluZSBBQ1BJX0JJVE1BU0tfVElNRVJfRU5BQkxFICAgICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFDUElfQklUTUFTS19HTE9CQUxfTE9DS19FTkFCTEUgICAgICAgICAweDAwMjAKQEAgLTgyMCw3ICs4NDAsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIEFDUElfQVNDSUlfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIEFDUElfQVNDSUlfWkVSTyAgICAgICAgICAgICAgICAgMHgzMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC04NDIsOSArODYyLDkgQEAKIAl1MzIgb2JqZWN0czsKIH07CiAKLSNkZWZpbmUgQUNQSV9EQl9SRURJUkVDVEFCTEVfT1VUUFVUICAweDAxCi0jZGVmaW5lIEFDUElfREJfQ09OU09MRV9PVVRQVVQgICAgICAgMHgwMgotI2RlZmluZSBBQ1BJX0RCX0RVUExJQ0FURV9PVVRQVVQgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9EQl9SRURJUkVDVEFCTEVfT1VUUFVUICAgICAweDAxCisjZGVmaW5lIEFDUElfREJfQ09OU09MRV9PVVRQVVQgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX0RCX0RVUExJQ0FURV9PVVRQVVQgICAgICAgIDB4MDMKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtODU0LDE4ICs4NzQsMTggQEAKIAogLyogRW50cnkgZm9yIGEgbWVtb3J5IGFsbG9jYXRpb24gKGRlYnVnIG9ubHkpICovCiAKLSNkZWZpbmUgQUNQSV9NRU1fTUFMTE9DICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQUNQSV9NRU1fQ0FMTE9DICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQUNQSV9NQVhfTU9EVUxFX05BTUUgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFDUElfTUVNX01BTExPQyAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBQ1BJX01FTV9DQUxMT0MgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQUNQSV9NQVhfTU9EVUxFX05BTUUgICAgICAgICAgICAxNgogCiAjZGVmaW5lIEFDUElfQ09NTU9OX0RFQlVHX01FTV9IRUFERVIgXAotCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgICAgICpwcmV2aW91czsgXAotCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgICAgICpuZXh0OyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTsgXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDsgXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU7IFwKLQljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVbQUNQSV9NQVhfTU9EVUxFX05BTUVdOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NfdHlwZTsKKwlzdHJ1Y3QgYWNwaV9kZWJ1Z19tZW1fYmxvY2sgICAgICpwcmV2aW91czsgXAorCXN0cnVjdCBhY3BpX2RlYnVnX21lbV9ibG9jayAgICAgKm5leHQ7IFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU7IFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDsgXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTsgXAorCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlW0FDUElfTUFYX01PRFVMRV9OQU1FXTsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NfdHlwZTsKIAogc3RydWN0IGFjcGlfZGVidWdfbWVtX2hlYWRlciB7CiBBQ1BJX0NPTU1PTl9ERUJVR19NRU1fSEVBREVSfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKaW5kZXggZjJiZTJhOC4uMzhmOWFhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKQEAgLTU2LDYgKzU2LDEwIEBACiAjZGVmaW5lIEFDUElfQ0xFQVJfQklUKHRhcmdldCxiaXQpICAgICAgKCh0YXJnZXQpICY9IH4oYml0KSkKICNkZWZpbmUgQUNQSV9NSU4oYSxiKSAgICAgICAgICAgICAgICAgICAoKChhKTwoYikpPyhhKTooYikpCiAKKy8qIFNpemUgY2FsY3VsYXRpb24gKi8KKworI2RlZmluZSBBQ1BJX0FSUkFZX0xFTkdUSCh4KSAgICAgICAgICAgIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKKwogI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSAxNgogCiAvKgpAQCAtOTksNyArMTAzLDcgQEAKICAqIHByaW50ZigpIGZvcm1hdCBoZWxwZXJzCiAgKi8KIAotLyogU3BsaXQgNjQtYml0IGludGVnZXIgaW50byB0d28gMzItYml0IHZhbHVlcy4gVXNlIHdpdGggJTguOFglOC44WCAqLworLyogU3BsaXQgNjQtYml0IGludGVnZXIgaW50byB0d28gMzItYml0IHZhbHVlcy4gVXNlIHdpdGggJTguOF94JTguOF94ICovCiAKICNkZWZpbmUgQUNQSV9GT1JNQVRfVUlOVDY0KGkpICAgICAgICAgICBBQ1BJX0hJRFdPUkQoaSksQUNQSV9MT0RXT1JEKGkpCiAKQEAgLTEzMCw3ICsxMzQsNiBAQAogI2RlZmluZSBBQ1BJX1RPX1BPSU5URVIoaSkgICAgICAgICAgICAgIEFDUElfQUREX1BUUiAodm9pZCwodm9pZCAqKSBOVUxMLChhY3BpX25hdGl2ZV91aW50KSBpKQogI2RlZmluZSBBQ1BJX1RPX0lOVEVHRVIocCkgICAgICAgICAgICAgIEFDUElfUFRSX0RJRkYgKHAsKHZvaWQgKikgTlVMTCkKICNkZWZpbmUgQUNQSV9PRkZTRVQoZCxmKSAgICAgICAgICAgICAgICAoYWNwaV9zaXplKSBBQ1BJX1BUUl9ESUZGICgmKCgoZCAqKTApLT5mKSwodm9pZCAqKSBOVUxMKQotI2RlZmluZSBBQ1BJX0ZBRFRfT0ZGU0VUKGYpICAgICAgICAgICAgIEFDUElfT0ZGU0VUIChGQURUX0RFU0NSSVBUT1IsIGYpCiAKICNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMTYKICNkZWZpbmUgQUNQSV9TVE9SRV9QT0lOVEVSKGQscykgICAgICAgICBBQ1BJX01PVkVfMzJfVE9fMzIoZCxzKQpAQCAtMTQxLDYgKzE0NCwxMiBAQAogI2RlZmluZSBBQ1BJX1BUUl9UT19QSFlTQUREUihpKSAgICAgICAgIEFDUElfVE9fSU5URUdFUihpKQogI2VuZGlmCiAKKyNpZm5kZWYgQUNQSV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRAorI2RlZmluZSBBQ1BJX0NPTVBBUkVfTkFNRShhLGIpICAgICAgICAgICgqQUNQSV9DQVNUX1BUUiAodTMyLChhKSkgPT0gKkFDUElfQ0FTVF9QVFIgKHUzMiwoYikpKQorI2Vsc2UKKyNkZWZpbmUgQUNQSV9DT01QQVJFX05BTUUoYSxiKSAgICAgICAgICAoIUFDUElfU1RSTkNNUCAoQUNQSV9DQVNUX1BUUiAoY2hhciwoYSkpLCBBQ1BJX0NBU1RfUFRSIChjaGFyLChiKSksIEFDUElfTkFNRV9TSVpFKSkKKyNlbmRpZgorCiAvKgogICogTWFjcm9zIGZvciBtb3ZpbmcgZGF0YSBhcm91bmQgdG8vZnJvbSBidWZmZXJzIHRoYXQgYXJlIHBvc3NpYmx5IHVuYWxpZ25lZC4KICAqIElmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgdHJhbnNmZXIgb2YgdW5hbGlnbmVkIGRhdGEsIGp1c3QgZG8gdGhlIHN0b3JlLgpAQCAtMzQxLDI5ICszNTAsMzMgQEAKIC8qCiAgKiBSb3VuZGluZyBtYWNyb3MgKFBvd2VyIG9mIHR3byBib3VuZGFyaWVzIG9ubHkpCiAgKi8KLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOKHZhbHVlLGJvdW5kYXJ5KSAgICAgICgoKGFjcGlfbmF0aXZlX3VpbnQpKHZhbHVlKSkgJiBcCisjZGVmaW5lIEFDUElfUk9VTkRfRE9XTih2YWx1ZSxib3VuZGFyeSkgICAgICgoKGFjcGlfbmF0aXZlX3VpbnQpKHZhbHVlKSkgJiBcCiAJCQkJCQkJCQkJCQkofigoKGFjcGlfbmF0aXZlX3VpbnQpIGJvdW5kYXJ5KS0xKSkpCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9VUCh2YWx1ZSxib3VuZGFyeSkgICAgICAgICgoKChhY3BpX25hdGl2ZV91aW50KSh2YWx1ZSkpICsgXAorI2RlZmluZSBBQ1BJX1JPVU5EX1VQKHZhbHVlLGJvdW5kYXJ5KSAgICAgICAoKCgoYWNwaV9uYXRpdmVfdWludCkodmFsdWUpKSArIFwKIAkJCQkJCQkJCQkJCSgoKGFjcGlfbmF0aXZlX3VpbnQpIGJvdW5kYXJ5KS0xKSkgJiBcCiAJCQkJCQkJCQkJCQkofigoKGFjcGlfbmF0aXZlX3VpbnQpIGJvdW5kYXJ5KS0xKSkpCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzMyX0JJVFMoYSkgICAgICAgIEFDUElfUk9VTkRfRE9XTihhLDQpCi0jZGVmaW5lIEFDUElfUk9VTkRfRE9XTl9UT182NF9CSVRTKGEpICAgICAgICBBQ1BJX1JPVU5EX0RPV04oYSw4KQotI2RlZmluZSBBQ1BJX1JPVU5EX0RPV05fVE9fTkFUSVZFX1dPUkQoYSkgICAgQUNQSV9ST1VORF9ET1dOKGEsQUxJR05FRF9BRERSRVNTX0JPVU5EQVJZKQorLyogTm90ZTogc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpIGV2YWx1YXRlcyB0byBlaXRoZXIgMiwgNCwgb3IgOCAqLwogCi0jZGVmaW5lIEFDUElfUk9VTkRfVVBfdG9fMzJfYklUUyhhKSAgICAgICAgICBBQ1BJX1JPVU5EX1VQKGEsNCkKLSNkZWZpbmUgQUNQSV9ST1VORF9VUF90b182NF9iSVRTKGEpICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSw4KQotI2RlZmluZSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKGEpICAgICAgQUNQSV9ST1VORF9VUChhLEFMSUdORURfQUREUkVTU19CT1VOREFSWSkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzMyQklUKGEpICAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsNCkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPXzY0QklUKGEpICAgICAgICAgQUNQSV9ST1VORF9ET1dOKGEsOCkKKyNkZWZpbmUgQUNQSV9ST1VORF9ET1dOX1RPX05BVElWRV9XT1JEKGEpICAgQUNQSV9ST1VORF9ET1dOKGEsc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpKQogCi0jZGVmaW5lIEFDUElfUk9VTkRfQklUU19VUF9UT19CWVRFUyhhKSAgICAgICBBQ1BJX0RJVl84KChhKSArIDcpCi0jZGVmaW5lIEFDUElfUk9VTkRfQklUU19ET1dOX1RPX0JZVEVTKGEpICAgICBBQ1BJX0RJVl84KChhKSkKKyNkZWZpbmUgQUNQSV9ST1VORF9VUF9UT18zMkJJVChhKSAgICAgICAgICAgQUNQSV9ST1VORF9VUChhLDQpCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fNjRCSVQoYSkgICAgICAgICAgIEFDUElfUk9VTkRfVVAoYSw4KQorI2RlZmluZSBBQ1BJX1JPVU5EX1VQX1RPX05BVElWRV9XT1JEKGEpICAgICBBQ1BJX1JPVU5EX1VQKGEsc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpKQogCi0jZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fMUsoYSkgICAgICAgICAgICAgICAoKChhKSArIDEwMjMpID4+IDEwKQorI2RlZmluZSBBQ1BJX1JPVU5EX0JJVFNfVVBfVE9fQllURVMoYSkgICAgICBBQ1BJX0RJVl84KChhKSArIDcpCisjZGVmaW5lIEFDUElfUk9VTkRfQklUU19ET1dOX1RPX0JZVEVTKGEpICAgIEFDUElfRElWXzgoKGEpKQorCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE9fMUsoYSkgICAgICAgICAgICAgICgoKGEpICsgMTAyMykgPj4gMTApCiAKIC8qIEdlbmVyaWMgKG5vbi1wb3dlci1vZi10d28pIHJvdW5kaW5nICovCiAKLSNkZWZpbmUgQUNQSV9ST1VORF9VUF9UTyh2YWx1ZSxib3VuZGFyeSkgICAgICgoKHZhbHVlKSArICgoYm91bmRhcnkpLTEpKSAvIChib3VuZGFyeSkpCisjZGVmaW5lIEFDUElfUk9VTkRfVVBfVE8odmFsdWUsYm91bmRhcnkpICAgICgoKHZhbHVlKSArICgoYm91bmRhcnkpLTEpKSAvIChib3VuZGFyeSkpCisKKyNkZWZpbmUgQUNQSV9JU19NSVNBTElHTkVEKHZhbHVlKSAgICAgICAgICAgKCgoYWNwaV9uYXRpdmVfdWludCl2YWx1ZSkgJiAoc2l6ZW9mKGFjcGlfbmF0aXZlX3VpbnQpLTEpKQogCiAvKgogICogQml0bWFzayBjcmVhdGlvbgpAQCAtMzcxLDEwICszODQsMTAgQEAKICAqIE1BU0tfQklUU19BQk9WRSBjcmVhdGVzIGEgbWFzayBzdGFydGluZyBBVCB0aGUgcG9zaXRpb24gYW5kIGFib3ZlCiAgKiBNQVNLX0JJVFNfQkVMT1cgY3JlYXRlcyBhIG1hc2sgc3RhcnRpbmcgb25lIGJpdCBCRUxPVyB0aGUgcG9zaXRpb24KICAqLwotI2RlZmluZSBBQ1BJX01BU0tfQklUU19BQk9WRShwb3NpdGlvbikgICAgICAgKH4oKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkpCi0jZGVmaW5lIEFDUElfTUFTS19CSVRTX0JFTE9XKHBvc2l0aW9uKSAgICAgICAoKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkKKyNkZWZpbmUgQUNQSV9NQVNLX0JJVFNfQUJPVkUocG9zaXRpb24pICAgICAgKH4oKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkpCisjZGVmaW5lIEFDUElfTUFTS19CSVRTX0JFTE9XKHBvc2l0aW9uKSAgICAgICgoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQogCi0jZGVmaW5lIEFDUElfSVNfT0NUQUxfRElHSVQoZCkgICAgICAgICAgICAgICAoKChjaGFyKShkKSA+PSAnMCcpICYmICgoY2hhcikoZCkgPD0gJzcnKSkKKyNkZWZpbmUgQUNQSV9JU19PQ1RBTF9ESUdJVChkKSAgICAgICAgICAgICAgKCgoY2hhcikoZCkgPj0gJzAnKSAmJiAoKGNoYXIpKGQpIDw9ICc3JykpCiAKIC8qIEJpdGZpZWxkcyB3aXRoaW4gQUNQSSByZWdpc3RlcnMgKi8KIApAQCAtMzk2LDggKzQwOSw4IEBACiAgKgogICogVGhlICJEZXNjcmlwdG9yIiBmaWVsZCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYm90aCBzdHJ1Y3R1cmVzLgogICovCi0jZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5kZXNjcmlwdG9yX2lkKQotI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCx0KSAgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+ZGVzY3JpcHRvcl9pZCA9IHQpCisjZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5jb21tb24uZGVzY3JpcHRvcl90eXBlKQorI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCx0KSAgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IHQpCiAKIC8qIE1hY3JvIHRvIHRlc3QgdGhlIG9iamVjdCB0eXBlICovCiAKQEAgLTQ4Niw3ICs0OTksNiBAQAogI2RlZmluZSBBQ1BJX0VSUk9SKHBsaXN0KQogI2RlZmluZSBBQ1BJX0VSUk9SX05BTUVTUEFDRShzLGUpCiAjZGVmaW5lIEFDUElfRVJST1JfTUVUSE9EKHMsbixwLGUpCi0KICNlbmRpZgogCiAvKgpAQCAtNTE0LDEyICs1MjYsMTIgQEAKICNkZWZpbmUgQUNQSV9HRVRfRlVOQ1RJT05fTkFNRSAgICAgICAgICBfYWNwaV9mdW5jdGlvbl9uYW1lCiAvKgogICogVGhlIE5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgcHJvY2VkdXJlIG5hbWUgYXMgYSBxdW90ZWQgc3RyaW5nLgotICogVGhpcyBpcyBkZWNsYXJlZCBhcyBhIGxvY2FsIHN0cmluZyAoIm15X2Z1bmN0aW9uX25hbWUiKSBzbyB0aGF0IGl0IGNhbgorICogVGhpcyBpcyBkZWNsYXJlZCBhcyBhIGxvY2FsIHN0cmluZyAoIk15RnVuY3Rpb25OYW1lIikgc28gdGhhdCBpdCBjYW4KICAqIGJlIGFsc28gdXNlZCBieSB0aGUgZnVuY3Rpb24gZXhpdCBtYWNyb3MgYmVsb3cuCiAgKiBOb3RlOiAoY29uc3QgY2hhcikgaXMgdXNlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlYnVnIGludGVyZmFjZXMKICAqIGFuZCBtYWNyb3Mgc3VjaCBhcyBfX0ZVTkNUSU9OX18uCiAgKi8KLSNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpICAgICAgICBjb25zdCBjaGFyICpfYWNwaV9mdW5jdGlvbl9uYW1lID0gbmFtZTsKKyNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpICAgICAgICBjb25zdCBjaGFyICpfYWNwaV9mdW5jdGlvbl9uYW1lID0gI25hbWU7CiAKICNlbHNlCiAvKiBDb21waWxlciBzdXBwb3J0cyBfX0ZVTkNUSU9OX18gKG9yIGVxdWl2YWxlbnQpIC0tIElnbm9yZSB0aGlzIG1hY3JvICovCkBAIC01MjgsMTMgKzU0MCwxMyBAQAogI2VuZGlmCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRShhKSAgICAgICAgICBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgXAotCQkJCQkJCQkJICBhY3BpX3V0X3RyYWNlKEFDUElfREVCVUdfUEFSQU1FVEVSUykKKwkJCSAgYWNwaV91dF90cmFjZShBQ1BJX0RFQlVHX1BBUkFNRVRFUlMpCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGEsYikgICAgQUNQSV9GVU5DVElPTl9OQU1FKGEpIFwKLQkJCQkJCQkJCQkJYWNwaV91dF90cmFjZV9wdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCh2b2lkICopYikKKwkJCQkJICAgYWNwaV91dF90cmFjZV9wdHIoQUNQSV9ERUJVR19QQVJBTUVURVJTLCh2b2lkICopYikKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoYSxiKSAgICBBQ1BJX0ZVTkNUSU9OX05BTUUoYSkgXAotCQkJCQkJCQkJCQlhY3BpX3V0X3RyYWNlX3UzMihBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsKHUzMiliKQorCQkJCQkJCSBhY3BpX3V0X3RyYWNlX3UzMihBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsKHUzMiliKQogI2RlZmluZSBBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihhLGIpICAgIEFDUElfRlVOQ1RJT05fTkFNRShhKSBcCi0JCQkJCQkJCQkJCWFjcGlfdXRfdHJhY2Vfc3RyKEFDUElfREVCVUdfUEFSQU1FVEVSUywoY2hhciAqKWIpCisJCQkJCQkJCQkgIGFjcGlfdXRfdHJhY2Vfc3RyKEFDUElfREVCVUdfUEFSQU1FVEVSUywoY2hhciAqKWIpCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9FTlRSWSgpICAgICAgICAgICBhY3BpX3V0X3RyYWNrX3N0YWNrX3B0cigpCiAKQEAgLTU0Myw3ICs1NTUsNyBAQAogICogV0FSTklORzogVGhlc2UgbWFjcm9zIGluY2x1ZGUgYSByZXR1cm4gc3RhdGVtZW50LiAgVGhpcyBpcyB1c3VhbGx5IGNvbnNpZGVyZWQKICAqIGJhZCBmb3JtLCBidXQgaGF2aW5nIGEgc2VwYXJhdGUgZXhpdCBtYWNybyBpcyB2ZXJ5IHVnbHkgYW5kIGRpZmZpY3VsdCB0byBtYWludGFpbi4KICAqIE9uZSBvZiB0aGUgRlVOQ1RJT05fVFJBQ0UgbWFjcm9zIGFib3ZlIG11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlIG1hY3JvcwotICogc28gdGhhdCAiX2FjcGlfZnVuY3Rpb25fbmFtZSIgaXMgZGVmaW5lZC4KKyAqIHNvIHRoYXQgIl9BY3BpRnVuY3Rpb25OYW1lIiBpcyBkZWZpbmVkLgogICoKICAqIE5vdGU6IHRoZSBET19XSElMRTAgbWFjcm8gaXMgdXNlZCB0byBwcmV2ZW50IHNvbWUgY29tcGlsZXJzIGZyb20gY29tcGxhaW5pbmcKICAqIGFib3V0IHRoZXNlIGNvbnN0cnVjdHMuCkBAIC02NTQsNiArNjY2LDcgQEAKICNkZWZpbmUgQUNQSV9EVU1QX1NUQUNLX0VOVFJZKGEpCiAjZGVmaW5lIEFDUElfRFVNUF9PUEVSQU5EUyhhLGIsYyxkLGUpCiAjZGVmaW5lIEFDUElfRFVNUF9FTlRSWShhLGIpCisjZGVmaW5lIEFDUElfRFVNUF9UQUJMRVMoYSxiKQogI2RlZmluZSBBQ1BJX0RVTVBfUEFUSE5BTUUoYSxiLGMsZCkKICNkZWZpbmUgQUNQSV9EVU1QX1JFU09VUkNFX0xJU1QoYSkKICNkZWZpbmUgQUNQSV9EVU1QX0JVRkZFUihhLGIpCkBAIC03MDksMTkgKzcyMiwxOSBAQAogCiAvKiBNZW1vcnkgYWxsb2NhdGlvbiAqLwogCi0jZGVmaW5lIEFDUElfTUVNX0FMTE9DQVRFKGEpICAgICAgICAgICAgYWNwaV91dF9hbGxvY2F0ZSgoYWNwaV9zaXplKShhKSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9DQUxMT0NBVEUoYSkgICAgICAgICAgIGFjcGlfdXRfY2FsbG9jYXRlKChhY3BpX3NpemUpKGEpLCBfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfb3NfZnJlZShhKQorI2RlZmluZSBBQ1BJX0FMTE9DQVRFKGEpICAgICAgICAgICAgYWNwaV91dF9hbGxvY2F0ZSgoYWNwaV9zaXplKShhKSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQorI2RlZmluZSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChhKSAgICAgYWNwaV91dF9hbGxvY2F0ZV96ZXJvZWQoKGFjcGlfc2l6ZSkoYSksIF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgICAgICBhY3BpX29zX2ZyZWUoYSkKICNkZWZpbmUgQUNQSV9NRU1fVFJBQ0tJTkcoYSkKIAogI2Vsc2UKIAogLyogTWVtb3J5IGFsbG9jYXRpb24gKi8KIAotI2RlZmluZSBBQ1BJX01FTV9BTExPQ0FURShhKSAgICAgICAgICAgIGFjcGlfdXRfYWxsb2NhdGVfYW5kX3RyYWNrKChhY3BpX3NpemUpKGEpLF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCi0jZGVmaW5lIEFDUElfTUVNX0NBTExPQ0FURShhKSAgICAgICAgICAgYWNwaV91dF9jYWxsb2NhdGVfYW5kX3RyYWNrKChhY3BpX3NpemUpKGEpLCBfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9GUkVFKGEpICAgICAgICAgICAgICAgIGFjcGlfdXRfZnJlZV9hbmRfdHJhY2soYSxfQ09NUE9ORU5ULF9hY3BpX21vZHVsZV9uYW1lLF9fTElORV9fKQotI2RlZmluZSBBQ1BJX01FTV9UUkFDS0lORyhhKSAgICAgICAgICAgIGEKKyNkZWZpbmUgQUNQSV9BTExPQ0FURShhKSAgICAgICAgICAgIGFjcGlfdXRfYWxsb2NhdGVfYW5kX3RyYWNrKChhY3BpX3NpemUpKGEpLF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfQUxMT0NBVEVfWkVST0VEKGEpICAgICBhY3BpX3V0X2FsbG9jYXRlX3plcm9lZF9hbmRfdHJhY2soKGFjcGlfc2l6ZSkoYSksIF9DT01QT05FTlQsX2FjcGlfbW9kdWxlX25hbWUsX19MSU5FX18pCisjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgICAgICBhY3BpX3V0X2ZyZWVfYW5kX3RyYWNrKGEsX0NPTVBPTkVOVCxfYWNwaV9tb2R1bGVfbmFtZSxfX0xJTkVfXykKKyNkZWZpbmUgQUNQSV9NRU1fVFJBQ0tJTkcoYSkgICAgICAgIGEKIAogI2VuZGlmCQkJCS8qIEFDUElfREJHX1RSQUNLX0FMTE9DQVRJT05TICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY25hbWVzcC5oIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKaW5kZXggYjY2N2E4MC4uODNiNTJmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmgKQEAgLTYzLDYgKzYzLDggQEAKICNkZWZpbmUgQUNQSV9OU19ET05UX09QRU5fU0NPUEUgICAgIDB4MDIKICNkZWZpbmUgQUNQSV9OU19OT19QRUVSX1NFQVJDSCAgICAgIDB4MDQKICNkZWZpbmUgQUNQSV9OU19FUlJPUl9JRl9GT1VORCAgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9OU19QUkVGSVhfSVNfU0NPUEUgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9OU19FWFRFUk5BTCAgICAgICAgICAgIDB4MjAKIAogI2RlZmluZSBBQ1BJX05TX1dBTEtfVU5MT0NLICAgICAgICAgVFJVRQogI2RlZmluZSBBQ1BJX05TX1dBTEtfTk9fVU5MT0NLICAgICAgRkFMU0UKQEAgLTE3MSwxOSArMTczLDE3IEBACiAvKgogICogbnNldmFsIC0gTmFtZXNwYWNlIGV2YWx1YXRpb24gZnVuY3Rpb25zCiAgKi8KLWFjcGlfc3RhdHVzIGFjcGlfbnNfZXZhbHVhdGVfYnlfaGFuZGxlKHN0cnVjdCBhY3BpX3BhcmFtZXRlcl9pbmZvICppbmZvKTsKLQotYWNwaV9zdGF0dXMKLWFjcGlfbnNfZXZhbHVhdGVfYnlfbmFtZShjaGFyICpwYXRobmFtZSwgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOwotCi1hY3BpX3N0YXR1cwotYWNwaV9uc19ldmFsdWF0ZV9yZWxhdGl2ZShjaGFyICpwYXRobmFtZSwgc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOworYWNwaV9zdGF0dXMgYWNwaV9uc19ldmFsdWF0ZShzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKIAogLyoKICAqIG5zbmFtZXMgLSBOYW1lIGFuZCBTY29wZSBtYW5pcHVsYXRpb24KICAqLwogdTMyIGFjcGlfbnNfb3BlbnNfc2NvcGUoYWNwaV9vYmplY3RfdHlwZSB0eXBlKTsKIAordm9pZAorYWNwaV9uc19idWlsZF9leHRlcm5hbF9wYXRoKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlLAorCQkJICAgIGFjcGlfc2l6ZSBzaXplLCBjaGFyICpuYW1lX2J1ZmZlcik7CisKIGNoYXIgKmFjcGlfbnNfZ2V0X2V4dGVybmFsX3BhdGhuYW1lKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKTsKIAogY2hhciAqYWNwaV9uc19uYW1lX29mX2N1cnJlbnRfc2NvcGUoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CkBAIC0xOTYsOSArMTk2LDkgQEAKIGFjcGlfbnNfcGF0dGVybl9tYXRjaChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqb2JqX25vZGUsIGNoYXIgKnNlYXJjaF9mb3IpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9uc19nZXRfbm9kZV9ieV9wYXRoKGNoYXIgKmV4dGVybmFsX3BhdGhuYW1lLAotCQkJIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICppbl9wcmVmaXhfbm9kZSwKLQkJCSB1MzIgZmxhZ3MsIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICoqb3V0X25vZGUpOworYWNwaV9uc19nZXRfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcHJlZml4X25vZGUsCisJCSBjaGFyICpleHRlcm5hbF9wYXRobmFtZSwKKwkJIHUzMiBmbGFncywgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipvdXRfbm9kZSk7CiAKIGFjcGlfc2l6ZSBhY3BpX25zX2dldF9wYXRobmFtZV9sZW5ndGgoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpOwogCkBAIC0yNDEsMTAgKzI0MSwxMCBAQAogCQkJIHUzMiBmbGFncywgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXRfbm9kZSk7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX25zX3NlYXJjaF9ub2RlKHUzMiBlbnRyeV9uYW1lLAotCQkgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCi0JCSAgICBhY3BpX29iamVjdF90eXBlIHR5cGUsCi0JCSAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKnJldF9ub2RlKTsKK2FjcGlfbnNfc2VhcmNoX29uZV9zY29wZSh1MzIgZW50cnlfbmFtZSwKKwkJCSBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSBhY3BpX29iamVjdF90eXBlIHR5cGUsCisJCQkgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKipyZXRfbm9kZSk7CiAKIHZvaWQKIGFjcGlfbnNfaW5zdGFsbF9ub2RlKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNvYmplY3QuaCBiL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCmluZGV4IGQxMzBjZmUuLjE3NDdkOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oCkBAIC0xLDcgKzEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogTmFtZTogYWNvYmplY3QuaCAtIERlZmluaXRpb24gb2YgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAoSW50ZXJuYWwgb2JqZWN0IG9ubHkpCisgKiBOYW1lOiBhY29iamVjdC5oIC0gRGVmaW5pdGlvbiBvZiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAoSW50ZXJuYWwgb2JqZWN0IG9ubHkpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00NSwxMCArNDUsMTIgQEAKICNpZm5kZWYgX0FDT0JKRUNUX0gKICNkZWZpbmUgX0FDT0JKRUNUX0gKIAorLyogYWNwaXNyYzpzdHJ1Y3RfZGVmcyAtLSBmb3IgYWNwaXNyYyBjb252ZXJzaW9uICovCisKIC8qCi0gKiBUaGUgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICBpcyB1c2VkIHRvIHBhc3MgQU1MIG9wZXJhbmRzIGZyb20gdGhlIGRpc3BhdGNoZXIKKyAqIFRoZSB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0IGlzIHVzZWQgdG8gcGFzcyBBTUwgb3BlcmFuZHMgZnJvbSB0aGUgZGlzcGF0Y2hlcgogICogdG8gdGhlIGludGVycHJldGVyLCBhbmQgdG8ga2VlcCB0cmFjayBvZiB0aGUgdmFyaW91cyBoYW5kbGVycyBzdWNoIGFzCi0gKiBhZGRyZXNzIHNwYWNlIGhhbmRsZXJzIGFuZCBub3RpZnkgaGFuZGxlcnMuICBUaGUgb2JqZWN0IGlzIGEgY29uc3RhbnQKKyAqIGFkZHJlc3Mgc3BhY2UgaGFuZGxlcnMgYW5kIG5vdGlmeSBoYW5kbGVycy4gVGhlIG9iamVjdCBpcyBhIGNvbnN0YW50CiAgKiBzaXplIGluIG9yZGVyIHRvIGFsbG93IGl0IHRvIGJlIGNhY2hlZCBhbmQgcmV1c2VkLgogICovCiAKQEAgLTYxLDE3ICs2MywyNSBAQAogLyoKICAqIENvbW1vbiBhcmVhIGZvciBhbGwgb2JqZWN0cy4KICAqCi0gKiBkYXRhX3R5cGUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgZGVzY3JpcHRvcnMsIGFuZCBNVVNUCi0gKiBiZSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqIGRlc2NyaXB0b3JfdHlwZSBpcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBkZXNjcmlwdG9ycywgYW5kCisgKiBtdXN0IGJlIGluIHRoZSBzYW1lIHBsYWNlIGFjcm9zcyBhbGwgZGVzY3JpcHRvcnMKKyAqCisgKiBOb3RlOiBUaGUgZGVzY3JpcHRvcl90eXBlIGFuZCBUeXBlIGZpZWxkcyBtdXN0IGFwcGVhciBpbiB0aGUgaWRlbnRpY2FsCisgKiBwb3NpdGlvbiBpbiBib3RoIHRoZSBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSBhbmQgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdAorICogc3RydWN0dXJlcy4KICAqLwotI2RlZmluZSBBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSICAgLyogU0laRS9BTElHTk1FTlQ6IDMyIGJpdHMsIG9uZSBwdHIgcGx1cyB0cmFpbGluZyA4LWJpdCBmbGFnICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOyAgICAgICAgIC8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGFjcGlfb2JqZWN0X3R5cGUgKi9cCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9jb3VudDsgICAgLyogRm9yIG9iamVjdCBkZWxldGlvbiBtYW5hZ2VtZW50ICovXAotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqbmV4dF9vYmplY3Q7ICAgICAgIC8qIE9iamVjdHMgbGlua2VkIHRvIHBhcmVudCBOUyBub2RlICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyNkZWZpbmUgQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBcCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqbmV4dF9vYmplY3Q7ICAgICAgIC8qIE9iamVjdHMgbGlua2VkIHRvIHBhcmVudCBOUyBub2RlICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOyAgICAvKiBUbyBkaWZmZXJlbnRpYXRlIHZhcmlvdXMgaW50ZXJuYWwgb2JqcyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgLyogYWNwaV9vYmplY3RfdHlwZSAqL1wKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9jb3VudDsgICAgLyogRm9yIG9iamVjdCBkZWxldGlvbiBtYW5hZ2VtZW50ICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisJLyoKKwkgKiBOb3RlOiBUaGVyZSBhcmUgMyBieXRlcyBhdmFpbGFibGUgaGVyZSBiZWZvcmUgdGhlCisJICogbmV4dCBuYXR1cmFsIGFsaWdubWVudCBib3VuZGFyeSAoZm9yIGJvdGggMzIvNjQgY2FzZXMpCisJICovCiAKLS8qIFZhbHVlcyBmb3IgZmxhZyBieXRlIGFib3ZlICovCisvKiBWYWx1ZXMgZm9yIEZsYWcgYnl0ZSBhYm92ZSAqLwogCiAjZGVmaW5lIEFPUE9CSl9BTUxfQ09OU1RBTlQgICAgICAgICAweDAxCiAjZGVmaW5lIEFPUE9CSl9TVEFUSUNfUE9JTlRFUiAgICAgICAweDAyCkBAIC03OSwzNiArODksNyBAQAogI2RlZmluZSBBT1BPQkpfT0JKRUNUX0lOSVRJQUxJWkVEICAgMHgwOAogI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAogI2RlZmluZSBBT1BPQkpfU0lOR0xFX0RBVFVNICAgICAgICAgMHgyMAotCi0vKgotICogQ29tbW9uIGJpdGZpZWxkIGZvciB0aGUgZmllbGQgb2JqZWN0cwotICogIkZpZWxkIERhdHVtIiAgLS0gYSBkYXR1bSBmcm9tIHRoZSBhY3R1YWwgZmllbGQgb2JqZWN0Ci0gKiAiQnVmZmVyIERhdHVtIiAtLSBhIGRhdHVtIGZyb20gYSB1c2VyIGJ1ZmZlciwgcmVhZCBmcm9tIG9yIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGZpZWxkCi0gKi8KLSNkZWZpbmUgQUNQSV9DT01NT05fRklFTERfSU5GTyAgICAgIC8qIFNJWkUvQUxJR05NRU5UOiAyNCBiaXRzICsgdGhyZWUgMzItYml0IHZhbHVlcyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZmxhZ3M7ICAgICAgICAvKiBBY2Nlc3MsIHVwZGF0ZSwgYW5kIGxvY2sgYml0cyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOyAgICAgICAgICAvKiBGcm9tIGFjY2Vzc19hcyBrZXl3b3JkICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYnl0ZV93aWR0aDsgIC8qIFJlYWQvV3JpdGUgc2l6ZSBpbiBieXRlcyAqL1wKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X2xlbmd0aDsgICAgICAgICAvKiBMZW5ndGggb2YgZmllbGQgaW4gYml0cyAqL1wKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9ieXRlX29mZnNldDsgICAvKiBCeXRlIG9mZnNldCB3aXRoaW4gY29udGFpbmluZyBvYmplY3QgKi9cCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2ZpZWxkX2JpdF9vZmZzZXQ7LyogQml0IG9mZnNldCB3aXRoaW4gZmlyc3QgZmllbGQgZGF0dW0gKDAtNjMpICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYml0X3dpZHRoOyAgIC8qIFJlYWQvV3JpdGUgc2l6ZSBpbiBiaXRzICg4LTY0KSAqL1wKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7ICAgICAgICAgICAgICAvKiBWYWx1ZSB0byBzdG9yZSBpbnRvIHRoZSBCYW5rIG9yIEluZGV4IHJlZ2lzdGVyICovXAotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICAgICAgICAgICAgICAqbm9kZTsJLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCi0KLS8qCi0gKiBGaWVsZHMgY29tbW9uIHRvIGJvdGggU3RyaW5ncyBhbmQgQnVmZmVycwotICovCi0jZGVmaW5lIEFDUElfQ09NTU9OX0JVRkZFUl9JTkZPIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOwotCi0vKgotICogQ29tbW9uIGZpZWxkcyBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgQVNMIG5vdGlmaWNhdGlvbnMKLSAqLwotI2RlZmluZSBBQ1BJX0NPTU1PTl9OT1RJRllfSU5GTyBcCi0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAgICAgICAgICpzeXN0ZW1fbm90aWZ5OyAgICAgLyogSGFuZGxlciBmb3Igc3lzdGVtIG5vdGlmaWVzICovXAotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgICAgICAgICAqZGV2aWNlX25vdGlmeTsgICAgIC8qIEhhbmRsZXIgZm9yIGRyaXZlciBub3RpZmllcyAqL1wKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICAgICAgICAgKmhhbmRsZXI7CS8qIEhhbmRsZXIgZm9yIEFkZHJlc3Mgc3BhY2UgKi8KKyNkZWZpbmUgQU9QT0JKX0lOVkFMSUQgICAgICAgICAgICAgIDB4NDAJLyogVXNlZCBpZiBob3N0IE9TIHdvbid0IGFsbG93IGFuIG9wX3JlZ2lvbiBhZGRyZXNzICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMjUsMjUgKzEwNiwzMSBAQAogCiAvKgogICogTm90ZTogVGhlIFN0cmluZyBhbmQgQnVmZmVyIG9iamVjdCBtdXN0IGJlIGlkZW50aWNhbCB0aHJvdWdoIHRoZSBQb2ludGVyCi0gKiBlbGVtZW50LiAgVGhlcmUgaXMgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhpcy4KKyAqIGFuZCBsZW5ndGggZWxlbWVudHMuICBUaGVyZSBpcyBjb2RlIHRoYXQgZGVwZW5kcyBvbiB0aGlzLgorICoKKyAqIEZpZWxkcyBjb21tb24gdG8gYm90aCBTdHJpbmdzIGFuZCBCdWZmZXJzCiAgKi8KKyNkZWZpbmUgQUNQSV9DT01NT05fQlVGRkVSX0lORk8oX3R5cGUpIFwKKwlfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2ludGVyOyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKIHN0cnVjdCBhY3BpX29iamVjdF9zdHJpbmcgewkvKiBOdWxsIHRlcm1pbmF0ZWQsIEFTQ0lJIGNoYXJhY3RlcnMgb25seSAqLwotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fQlVGRkVSX0lORk8gY2hhciAqcG9pbnRlcjsJLyogU3RyaW5nIGluIEFNTCBzdHJlYW0gb3IgYWxsb2NhdGVkIHN0cmluZyAqLworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fQlVGRkVSX0lORk8oY2hhcikJLyogU3RyaW5nIGluIEFNTCBzdHJlYW0gb3IgYWxsb2NhdGVkIHN0cmluZyAqLwogfTsKIAogc3RydWN0IGFjcGlfb2JqZWN0X2J1ZmZlciB7Ci0JQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBBQ1BJX0NPTU1PTl9CVUZGRVJfSU5GTyB1OCAqIHBvaW50ZXI7CS8qIEJ1ZmZlciBpbiBBTUwgc3RyZWFtIG9yIGFsbG9jYXRlZCBidWZmZXIgKi8KLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsJLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCi0JdTggKmFtbF9zdGFydDsKKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIEFDUElfQ09NTU9OX0JVRkZFUl9JTkZPKHU4KQkvKiBCdWZmZXIgaW4gQU1MIHN0cmVhbSBvciBhbGxvY2F0ZWQgYnVmZmVyICovCiAJdTMyIGFtbF9sZW5ndGg7CisJdTggKmFtbF9zdGFydDsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsJLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovCiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfcGFja2FnZSB7Ci0JQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1MzIgY291bnQ7CS8qICMgb2YgZWxlbWVudHMgaW4gcGFja2FnZSAqLwotCXUzMiBhbWxfbGVuZ3RoOwotCXU4ICphbWxfc3RhcnQ7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CS8qIExpbmsgYmFjayB0byBwYXJlbnQgbm9kZSAqLworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CS8qIExpbmsgYmFjayB0byBwYXJlbnQgbm9kZSAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50czsJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gYWNwaV9vYmplY3RzICovCisJdTggKmFtbF9zdGFydDsKKwl1MzIgYW1sX2xlbmd0aDsKKwl1MzIgY291bnQ7CQkvKiAjIG9mIGVsZW1lbnRzIGluIHBhY2thZ2UgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE1NiwyMyArMTQzLDYgQEAKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHZvaWQgKnNlbWFwaG9yZTsKIH07CiAKLSNkZWZpbmUgQUNQSV9JTkZJTklURV9DT05DVVJSRU5DWSAgIDB4RkYKLQotdHlwZWRlZgotYWNwaV9zdGF0dXMoKkFDUElfSU5URVJOQUxfTUVUSE9EKSAoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqIHdhbGtfc3RhdGUpOwotCi1zdHJ1Y3QgYWNwaV9vYmplY3RfbWV0aG9kIHsKLQlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHU4IG1ldGhvZF9mbGFnczsKLQl1OCBwYXJhbV9jb3VudDsKLQl1MzIgYW1sX2xlbmd0aDsKLQl2b2lkICpzZW1hcGhvcmU7Ci0JdTggKmFtbF9zdGFydDsKLQlBQ1BJX0lOVEVSTkFMX01FVEhPRCBpbXBsZW1lbnRhdGlvbjsKLQl1OCBjb25jdXJyZW5jeTsKLQl1OCB0aHJlYWRfY291bnQ7Ci0JYWNwaV9vd25lcl9pZCBvd25lcl9pZDsKLX07Ci0KIHN0cnVjdCBhY3BpX29iamVjdF9tdXRleCB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBzeW5jX2xldmVsOwkvKiAwLTE1LCBzcGVjaWZpZWQgaW4gTXV0ZXgoKSBjYWxsICovCiAJdTE2IGFjcXVpc2l0aW9uX2RlcHRoOwkvKiBBbGxvdyBtdWx0aXBsZSBBY3F1aXJlcywgc2FtZSB0aHJlYWQgKi8KQEAgLTE4NiwxMSArMTU2LDIzIEBACiAKIHN0cnVjdCBhY3BpX29iamVjdF9yZWdpb24gewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggc3BhY2VfaWQ7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcjsJLyogSGFuZGxlciBmb3IgcmVnaW9uIGFjY2VzcyAqLwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiBDb250YWluaW5nIG5hbWVzcGFjZSBub2RlICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcjsJLyogSGFuZGxlciBmb3IgcmVnaW9uIGFjY2VzcyAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHQ7Ci0JdTMyIGxlbmd0aDsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKKwl1MzIgbGVuZ3RoOworfTsKKworc3RydWN0IGFjcGlfb2JqZWN0X21ldGhvZCB7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBtZXRob2RfZmxhZ3M7CisJdTggcGFyYW1fY291bnQ7CisJdTggY29uY3VycmVuY3k7CisJdm9pZCAqc2VtYXBob3JlOworCXU4ICphbWxfc3RhcnQ7CisJQUNQSV9JTlRFUk5BTF9NRVRIT0QgaW1wbGVtZW50YXRpb247CisJdTMyIGFtbF9sZW5ndGg7CisJdTggdGhyZWFkX2NvdW50OworCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTksNiArMTgxLDE0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKgorICogQ29tbW9uIGZpZWxkcyBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgQVNMIG5vdGlmaWNhdGlvbnMKKyAqLworI2RlZmluZSBBQ1BJX0NPTU1PTl9OT1RJRllfSU5GTyBcCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAgICAgICAqc3lzdGVtX25vdGlmeTsgICAgIC8qIEhhbmRsZXIgZm9yIHN5c3RlbSBub3RpZmllcyAqL1wKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICAgICpkZXZpY2Vfbm90aWZ5OyAgICAgLyogSGFuZGxlciBmb3IgZHJpdmVyIG5vdGlmaWVzICovXAorCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICAgICAgKmhhbmRsZXI7CS8qIEhhbmRsZXIgZm9yIEFkZHJlc3Mgc3BhY2UgKi8KKwogc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9jb21tb24gewkvKiBDT01NT04gTk9USUZZIGZvciBQT1dFUiwgUFJPQ0VTU09SLCBERVZJQ0UsIGFuZCBUSEVSTUFMICovCiBBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIEFDUElfQ09NTU9OX05PVElGWV9JTkZPfTsKIApAQCAtMjEzLDkgKzIwMyw5IEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfcHJvY2Vzc29yIHsKLQlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIEFDUElfQ09NTU9OX05PVElGWV9JTkZPIHUzMiBwcm9jX2lkOwotCXUzMiBsZW5ndGg7Ci0JYWNwaV9pb19hZGRyZXNzIGFkZHJlc3M7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBwcm9jX2lkOworCXU4IGxlbmd0aDsKKwkgQUNQSV9DT01NT05fTk9USUZZX0lORk8gYWNwaV9pb19hZGRyZXNzIGFkZHJlc3M7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfdGhlcm1hbF96b25lIHsKQEAgLTIyNyw5ICsyMTcsMjQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qCisgKiBDb21tb24gYml0ZmllbGQgZm9yIHRoZSBmaWVsZCBvYmplY3RzCisgKiAiRmllbGQgRGF0dW0iICAtLSBhIGRhdHVtIGZyb20gdGhlIGFjdHVhbCBmaWVsZCBvYmplY3QKKyAqICJCdWZmZXIgRGF0dW0iIC0tIGEgZGF0dW0gZnJvbSBhIHVzZXIgYnVmZmVyLCByZWFkIGZyb20gb3IgdG8gYmUgd3JpdHRlbiB0byB0aGUgZmllbGQKKyAqLworI2RlZmluZSBBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2ZsYWdzOyAgICAgICAgLyogQWNjZXNzLCB1cGRhdGUsIGFuZCBsb2NrIGJpdHMgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU7ICAgICAgICAgIC8qIEZyb20gYWNjZXNzX2FzIGtleXdvcmQgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYnl0ZV93aWR0aDsgIC8qIFJlYWQvV3JpdGUgc2l6ZSBpbiBieXRlcyAqL1wKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAgICAgICpub2RlOyAgICAgICAgICAgICAgLyogTGluayBiYWNrIHRvIHBhcmVudCBub2RlICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X2xlbmd0aDsgICAgICAgICAvKiBMZW5ndGggb2YgZmllbGQgaW4gYml0cyAqL1wKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfYnl0ZV9vZmZzZXQ7ICAgLyogQnl0ZSBvZmZzZXQgd2l0aGluIGNvbnRhaW5pbmcgb2JqZWN0ICovXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7ICAgICAgICAgICAgICAvKiBWYWx1ZSB0byBzdG9yZSBpbnRvIHRoZSBCYW5rIG9yIEluZGV4IHJlZ2lzdGVyICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZmllbGRfYml0X29mZnNldDsvKiBCaXQgb2Zmc2V0IHdpdGhpbiBmaXJzdCBmaWVsZCBkYXR1bSAoMC02MykgKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfYml0X3dpZHRoOwkvKiBSZWFkL1dyaXRlIHNpemUgaW4gYml0cyAoOC02NCkgKi8KKwogc3RydWN0IGFjcGlfb2JqZWN0X2ZpZWxkX2NvbW1vbiB7CS8qIENPTU1PTiBGSUVMRCAoZm9yIEJVRkZFUiwgUkVHSU9OLCBCQU5LLCBhbmQgSU5ERVggZmllbGRzKSAqLwotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fRklFTERfSU5GTyB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqOwkvKiBDb250YWluaW5nIE9wZXJhdGlvbiBSZWdpb24gb2JqZWN0ICovCi0JLyogKFJFR0lPTi9CQU5LIGZpZWxkcyBvbmx5KSAqLworCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgQUNQSV9DT01NT05fRklFTERfSU5GTyB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZWdpb25fb2JqOwkvKiBQYXJlbnQgT3BlcmF0aW9uIFJlZ2lvbiBvYmplY3QgKFJFR0lPTi9CQU5LIGZpZWxkcyBvbmx5KSAqLwogfTsKIAogc3RydWN0IGFjcGlfb2JqZWN0X3JlZ2lvbl9maWVsZCB7CkBAIC0yNDQsNyArMjQ5LDcgQEAKIHN0cnVjdCBhY3BpX29iamVjdF9pbmRleF9maWVsZCB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBBQ1BJX0NPTU1PTl9GSUVMRF9JTkZPCiAJICAgIC8qCi0JICAgICAqIE5vICJyZWdpb25fb2JqIiBwb2ludGVyIG5lZWRlZCBzaW5jZSB0aGUgSW5kZXggYW5kIERhdGEgcmVnaXN0ZXJzCisJICAgICAqIE5vICJSZWdpb25PYmoiIHBvaW50ZXIgbmVlZGVkIHNpbmNlIHRoZSBJbmRleCBhbmQgRGF0YSByZWdpc3RlcnMKIAkgICAgICogYXJlIGVhY2ggZmllbGQgZGVmaW5pdGlvbnMgdW50byB0aGVtc2VsdmVzLgogCSAgICAgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICppbmRleF9vYmo7CS8qIEluZGV4IHJlZ2lzdGVyICovCkBAIC0yNjksMTMgKzI3NCw5IEBACiAJdm9pZCAqY29udGV4dDsKIH07CiAKLS8qIEZsYWdzIGZvciBhZGRyZXNzIGhhbmRsZXIgKi8KLQotI2RlZmluZSBBQ1BJX0FERFJfSEFORExFUl9ERUZBVUxUX0lOU1RBTExFRCAgMHgxCi0KIHN0cnVjdCBhY3BpX29iamVjdF9hZGRyX2hhbmRsZXIgewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggc3BhY2VfaWQ7Ci0JdTE2IGhmbGFnczsKKwl1OCBoYW5kbGVyX2ZsYWdzOwogCWFjcGlfYWRyX3NwYWNlX2hhbmRsZXIgaGFuZGxlcjsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsJLyogUGFyZW50IGRldmljZSAqLwogCXZvaWQgKmNvbnRleHQ7CkBAIC0yODQsNiArMjg1LDEwIEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV4dDsKIH07CiAKKy8qIEZsYWdzIGZvciBhZGRyZXNzIGhhbmRsZXIgKGhhbmRsZXJfZmxhZ3MpICovCisKKyNkZWZpbmUgQUNQSV9BRERSX0hBTkRMRVJfREVGQVVMVF9JTlNUQUxMRUQgIDB4MDEKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNwZWNpYWwgaW50ZXJuYWwgb2JqZWN0cwpAQCAtMjk3LDEwICszMDIsMTAgQEAKIHN0cnVjdCBhY3BpX29iamVjdF9yZWZlcmVuY2UgewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggdGFyZ2V0X3R5cGU7CS8qIFVzZWQgZm9yIGluZGV4X29wICovCiAJdTE2IG9wY29kZTsKLQl1MzIgb2Zmc2V0OwkJLyogVXNlZCBmb3IgYXJnX29wLCBsb2NhbF9vcCwgYW5kIGluZGV4X29wICovCi0Jdm9pZCAqb2JqZWN0OwkJLyogbmFtZV9vcD0+SEFORExFIHRvIG9iaiwgaW5kZXhfb3A9PnVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgICovCisJdm9pZCAqb2JqZWN0OwkJLyogbmFtZV9vcD0+SEFORExFIHRvIG9iaiwgaW5kZXhfb3A9PnVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKi8KIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqd2hlcmU7CisJdTMyIG9mZnNldDsJCS8qIFVzZWQgZm9yIGFyZ19vcCwgbG9jYWxfb3AsIGFuZCBpbmRleF9vcCAqLwogfTsKIAogLyoKQEAgLTMxMSwxMiArMzE2LDEwIEBACiAgKiBDdXJyZW50bHk6IFJlZ2lvbiBhbmQgZmllbGRfdW5pdCB0eXBlcwogICovCiBzdHJ1Y3QgYWNwaV9vYmplY3RfZXh0cmEgewotCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggYnl0ZV9maWxsMTsKLQl1MTYgd29yZF9maWxsMTsKLQl1MzIgYW1sX2xlbmd0aDsKLQl1OCAqYW1sX3N0YXJ0OwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2RfUkVHOwkvKiBfUkVHIG1ldGhvZCBmb3IgdGhpcyByZWdpb24gKGlmIGFueSkgKi8KKwlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICptZXRob2RfUkVHOwkvKiBfUkVHIG1ldGhvZCBmb3IgdGhpcyByZWdpb24gKGlmIGFueSkgKi8KIAl2b2lkICpyZWdpb25fY29udGV4dDsJLyogUmVnaW9uLXNwZWNpZmljIGRhdGEgKi8KKwl1OCAqYW1sX3N0YXJ0OworCXUzMiBhbWxfbGVuZ3RoOwogfTsKIAogLyogQWRkaXRpb25hbCBkYXRhIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG5hbWVzcGFjZSBub2RlcyAqLwpAQCAtMzkxLDggKzM5NCwxMyBAQAogI2RlZmluZSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgQUNQSV9ERVNDX1RZUEVfTUFYICAgICAgICAgICAgICAweDBGCiAKK3N0cnVjdCBhY3BpX2NvbW1vbl9kZXNjcmlwdG9yIHsKKwl2b2lkICpjb21tb25fcG9pbnRlcjsKKwl1OCBkZXNjcmlwdG9yX3R5cGU7CS8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovCit9OworCiB1bmlvbiBhY3BpX2Rlc2NyaXB0b3IgewotCXU4IGRlc2NyaXB0b3JfaWQ7CS8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovCisJc3RydWN0IGFjcGlfY29tbW9uX2Rlc2NyaXB0b3IgY29tbW9uOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3Qgb2JqZWN0OwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIG5vZGU7CiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3Qgb3A7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNvcGNvZGUuaCBiL2luY2x1ZGUvYWNwaS9hY29wY29kZS5oCmluZGV4IGU2ZDc4YmQuLjc2NTlhNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY29wY29kZS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY29wY29kZS5oCkBAIC05NCw3ICs5NCw3IEBACiAjZGVmaW5lIEFSR1BfQ09OQ0FUX1JFU19PUCAgICAgICAgICAgICAgQVJHUF9MSVNUMyAoQVJHUF9URVJNQVJHLCAgICBBUkdQX1RFUk1BUkcsICAgICAgIEFSR1BfVEFSR0VUKQogI2RlZmluZSBBUkdQX0NPTkRfUkVGX09GX09QICAgICAgICAgICAgIEFSR1BfTElTVDIgKEFSR1BfU1VQRVJOQU1FLCAgQVJHUF9TVVBFUk5BTUUpCiAjZGVmaW5lIEFSR1BfQ09OVElOVUVfT1AgICAgICAgICAgICAgICAgQVJHX05PTkUKLSNkZWZpbmUgQVJHUF9DT1BZX09QICAgICAgICAgICAgICAgICAgICBBUkdQX0xJU1QyIChBUkdQX1NVUEVSTkFNRSwgIEFSR1BfU0lNUExFTkFNRSkKKyNkZWZpbmUgQVJHUF9DT1BZX09QICAgICAgICAgICAgICAgICAgICBBUkdQX0xJU1QyIChBUkdQX1RFUk1BUkcsICAgIEFSR1BfU0lNUExFTkFNRSkKICNkZWZpbmUgQVJHUF9DUkVBVEVfQklUX0ZJRUxEX09QICAgICAgICBBUkdQX0xJU1QzIChBUkdQX1RFUk1BUkcsICAgIEFSR1BfVEVSTUFSRywgICAgICAgQVJHUF9OQU1FKQogI2RlZmluZSBBUkdQX0NSRUFURV9CWVRFX0ZJRUxEX09QICAgICAgIEFSR1BfTElTVDMgKEFSR1BfVEVSTUFSRywgICAgQVJHUF9URVJNQVJHLCAgICAgICBBUkdQX05BTUUpCiAjZGVmaW5lIEFSR1BfQ1JFQVRFX0RXT1JEX0ZJRUxEX09QICAgICAgQVJHUF9MSVNUMyAoQVJHUF9URVJNQVJHLCAgICBBUkdQX1RFUk1BUkcsICAgICAgIEFSR1BfTkFNRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKaW5kZXggNzc4NWQ0OC4uOGQ1MDM5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTUwLDcgKzUwLDcgQEAKICAqIGNvbXBvbmVudCBiYXNpcyBhbmQgYSBwZXItZXhjZXB0aW9uLXR5cGUgYmFzaXMuCiAgKi8KIAotLyogQ29tcG9uZW50IElEcyBhcmUgdXNlZCBpbiB0aGUgZ2xvYmFsICJkZWJ1Z19sYXllciIgKi8KKy8qIENvbXBvbmVudCBJRHMgYXJlIHVzZWQgaW4gdGhlIGdsb2JhbCAiRGVidWdMYXllciIgKi8KIAogI2RlZmluZSBBQ1BJX1VUSUxJVElFUyAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBQ1BJX0hBUkRXQVJFICAgICAgICAgICAgICAgMHgwMDAwMDAwMgpAQCAtMTIxLDcgKzEyMSw3IEBACiAjZGVmaW5lIEFDUElfTFZfSU5URVJSVVBUUyAgICAgICAgICAweDA4MDAwMDAwCiAjZGVmaW5lIEFDUElfTFZfVkVSQk9TSVRZMyAgICAgICAgICAweDBGMDAwMDAwIHwgQUNQSV9MVl9WRVJCT1NJVFkyCiAKLS8qIEV4Y2VwdGlvbmFsbHkgdmVyYm9zZSBvdXRwdXQgLS0gYWxzbyB1c2VkIGluIHRoZSBnbG9iYWwgImRlYnVnX2xldmVsIiAqLworLyogRXhjZXB0aW9uYWxseSB2ZXJib3NlIG91dHB1dCAtLSBhbHNvIHVzZWQgaW4gdGhlIGdsb2JhbCAiRGVidWdMZXZlbCIgICovCiAKICNkZWZpbmUgQUNQSV9MVl9BTUxfRElTQVNTRU1CTEUgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgQUNQSV9MVl9WRVJCT1NFX0lORk8gICAgICAgIDB4MjAwMDAwMDAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICovCiAjZGVmaW5lIEFDUElfREVCVUdfTEVWRUwoZGwpICAgICAgICAodTMyKSBkbCxBQ1BJX0RFQlVHX1BBUkFNRVRFUlMKIAotLyogRXhjZXB0aW9uIGxldmVsIC0tIHVzZWQgaW4gdGhlIGdsb2JhbCAiZGVidWdfbGV2ZWwiICovCisvKiBFeGNlcHRpb24gbGV2ZWwgLS0gdXNlZCBpbiB0aGUgZ2xvYmFsICJEZWJ1Z0xldmVsIiAqLwogCiAjZGVmaW5lIEFDUElfREJfSU5JVCAgICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0lOSVQpCiAjZGVmaW5lIEFDUElfREJfREVCVUdfT0JKRUNUICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0RFQlVHX09CSkVDVCkKQEAgLTE0NCwxMyArMTQ0LDEzIEBACiAKIC8qCiAgKiBUaGVzZSB0d28gbGV2ZWxzIGFyZSBlc3NlbnRpYWxseSBvYnNvbGV0ZSwgYWxsIGluc3RhbmNlcyBpbiB0aGUKLSAqIEFDUElDQSBjb3JlIGNvZGUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IFJFUE9SVF9FUlJPUiBhbmQgUkVQT1JUX1dBUk5JTkcKKyAqIEFDUElDQSBjb3JlIGNvZGUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IEFDUElfRVJST1IgYW5kIEFDUElfV0FSTklORwogICogKEtlcHQgaGVyZSBiZWNhdXNlIHNvbWUgZHJpdmVycyBtYXkgc3RpbGwgdXNlIHRoZW0pCiAgKi8KICNkZWZpbmUgQUNQSV9EQl9FUlJPUiAgICAgICAgICAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfRVJST1IpCiAjZGVmaW5lIEFDUElfREJfV0FSTiAgICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1dBUk4pCiAKLS8qIFRyYWNlIGxldmVsIC0tIGFsc28gdXNlZCBpbiB0aGUgZ2xvYmFsICJkZWJ1Z19sZXZlbCIgKi8KKy8qIFRyYWNlIGxldmVsIC0tIGFsc28gdXNlZCBpbiB0aGUgZ2xvYmFsICJEZWJ1Z0xldmVsIiAqLwogCiAjZGVmaW5lIEFDUElfREJfSU5JVF9OQU1FUyAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0lOSVRfTkFNRVMpCiAjZGVmaW5lIEFDUElfREJfVEhSRUFEUyAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1RIUkVBRFMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwYXJzZXIuaCBiL2luY2x1ZGUvYWNwaS9hY3BhcnNlci5oCmluZGV4IDVhMWZmNDg0Li45ZDQ5ZDNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwYXJzZXIuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwYXJzZXIuaApAQCAtNDYsNyArNDYsNyBAQAogCiAjZGVmaW5lIE9QX0hBU19SRVRVUk5fVkFMVUUgICAgICAgICAgICAgMQogCi0vKiB2YXJpYWJsZSAjIGFyZ3VtZW50cyAqLworLyogVmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gVGhpcyBmaWVsZCBtdXN0IGJlIDMyIGJpdHMgKi8KIAogI2RlZmluZSBBQ1BJX1ZBUl9BUkdTICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDMyX01BWAogCkBAIC03MSw3ICs3MSw3IEBACiAvKgogICogcHN4ZmFjZSAtIFBhcnNlciBleHRlcm5hbCBpbnRlcmZhY2VzCiAgKi8KLWFjcGlfc3RhdHVzIGFjcGlfcHNfZXhlY3V0ZV9tZXRob2Qoc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gKmluZm8pOworYWNwaV9zdGF0dXMgYWNwaV9wc19leGVjdXRlX21ldGhvZChzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICppbmZvKTsKIAogLyoKICAqIHBzYXJncyAtIFBhcnNlIEFNTCBvcGNvZGUgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IDZkY2EzZDUuLjQzZjhjMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC01OSw3ICs1OSw3IEBACiAKICNkZWZpbmUgQUNQSV9CVVNfRklMRV9ST09UCSJhY3BpIgogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYWNwaV9yb290X2RpcjsKLWV4dGVybiBGQURUX0RFU0NSSVBUT1IgYWNwaV9mYWR0OworZXh0ZXJuIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3IgYWNwaV9mYWR0OwogCiBlbnVtIGFjcGlfYnVzX3JlbW92YWxfdHlwZSB7CiAJQUNQSV9CVVNfUkVNT1ZBTF9OT1JNQUwgPSAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmggYi9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaAppbmRleCA5NzBlOWE2Li44ZjQ3M2M4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaApAQCAtNTAsMTIgKzUwLDE2IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vYWNlbnYuaCIKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAKLS8qIFByaW9yaXRpZXMgZm9yIGFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbiAqLworLyogVHlwZXMgZm9yIGFjcGlfb3NfZXhlY3V0ZSAqLwogCi0jZGVmaW5lIE9TRF9QUklPUklUWV9HUEUgICAgICAgICAgICAxCi0jZGVmaW5lIE9TRF9QUklPUklUWV9ISUdIICAgICAgICAgICAyCi0jZGVmaW5lIE9TRF9QUklPUklUWV9NRUQgICAgICAgICAgICAzCi0jZGVmaW5lIE9TRF9QUklPUklUWV9MTyAgICAgICAgICAgICA0Cit0eXBlZGVmIGVudW0geworCU9TTF9HTE9CQUxfTE9DS19IQU5ETEVSLAorCU9TTF9OT1RJRllfSEFORExFUiwKKwlPU0xfR1BFX0hBTkRMRVIsCisJT1NMX0RFQlVHR0VSX1RIUkVBRCwKKwlPU0xfRUNfUE9MTF9IQU5ETEVSLAorCU9TTF9FQ19CVVJTVF9IQU5ETEVSCit9IGFjcGlfZXhlY3V0ZV90eXBlOwogCiAjZGVmaW5lIEFDUElfTk9fVU5JVF9MSU1JVCAgICAgICAgICAoKHUzMikgLTEpCiAjZGVmaW5lIEFDUElfTVVURVhfU0VNICAgICAgICAgICAgICAxCkBAIC0xNjEsMTMgKzE2NSwxMSBAQAogLyoKICAqIFRocmVhZHMgYW5kIFNjaGVkdWxpbmcKICAqLwotdTMyIGFjcGlfb3NfZ2V0X3RocmVhZF9pZCh2b2lkKTsKK2FjcGlfdGhyZWFkX2lkIGFjcGlfb3NfZ2V0X3RocmVhZF9pZCh2b2lkKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfb3NfcXVldWVfZm9yX2V4ZWN1dGlvbih1MzIgcHJpb3JpdHksCi0JCQkgICAgYWNwaV9vc2RfZXhlY19jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqY29udGV4dCk7Ci0KLXZvaWQgYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZSh2b2lkICpjb250ZXh0KTsKK2FjcGlfb3NfZXhlY3V0ZShhY3BpX2V4ZWN1dGVfdHlwZSB0eXBlLAorCQlhY3BpX29zZF9leGVjX2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KTsKIAogdm9pZCBhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpOwogCkBAIC0yMTQsNiArMjE2LDEyIEBACiAvKgogICogTWlzY2VsbGFuZW91cwogICovCithY3BpX3N0YXR1cyBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZShjaGFyICppbnRlcmZhY2UpOworCithY3BpX3N0YXR1cworYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzKHU4IHNwYWNlX2lkLAorCQkJIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLCBhY3BpX3NpemUgbGVuZ3RoKTsKKwogdTggYWNwaV9vc19yZWFkYWJsZSh2b2lkICpwb2ludGVyLCBhY3BpX3NpemUgbGVuZ3RoKTsKIAogI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCkBAIC0yNTUsMTEgKzI2Myw0IEBACiAKIHZvaWQgYWNwaV9vc19jbG9zZV9kaXJlY3Rvcnkodm9pZCAqZGlyX2hhbmRsZSk7CiAKLS8qCi0gKiBEZWJ1ZwotICovCi12b2lkCi1hY3BpX29zX2RiZ19hc3NlcnQodm9pZCAqZmFpbGVkX2Fzc2VydGlvbiwKLQkJICAgdm9pZCAqZmlsZV9uYW1lLCB1MzIgbGluZV9udW1iZXIsIGNoYXIgKm1lc3NhZ2UpOwotCiAjZW5kaWYJCQkJLyogX19BQ1BJT1NYRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCA2NmNmMmVjLi4wNDllOWFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC0yNjgsNyArMjY4LDcgQEAKICAqIFJlc291cmNlIGludGVyZmFjZXMKICAqLwogdHlwZWRlZgotYWNwaV9zdGF0dXMoKkFDUElfV0FMS19SRVNPVVJDRV9DQUxMQkFDSykgKHN0cnVjdCBhY3BpX3Jlc291cmNlICogcmVzb3VyY2UsCithY3BpX3N0YXR1cygqYWNwaV93YWxrX3Jlc291cmNlX2NhbGxiYWNrKSAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKiByZXNvdXJjZSwKIAkJCQkJICAgdm9pZCAqY29udGV4dCk7CiAKIGFjcGlfc3RhdHVzCkBAIC0yOTAsNyArMjkwLDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX3dhbGtfcmVzb3VyY2VzKGFjcGlfaGFuZGxlIGRldmljZV9oYW5kbGUsCiAJCSAgICBjaGFyICpuYW1lLAotCQkgICAgQUNQSV9XQUxLX1JFU09VUkNFX0NBTExCQUNLIHVzZXJfZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOworCQkgICAgYWNwaV93YWxrX3Jlc291cmNlX2NhbGxiYWNrIHVzZXJfZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMoYWNwaV9oYW5kbGUgZGV2aWNlX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Jlc3JjLmggYi9pbmNsdWRlL2FjcGkvYWNyZXNyYy5oCmluZGV4IGZhMDJlODAuLmFkMTFmYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Jlc3JjLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcmVzcmMuaApAQCAtMTY0LDIzICsxNjQsMjYgQEAKIC8qCiAgKiByc3V0aWxzCiAgKi8KLWFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9wcnRfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9yc19nZXRfY3JzX21ldGhvZF9kYXRhKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKTsKK2FjcGlfcnNfZ2V0X3BydF9tZXRob2RfZGF0YShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOwogCi0jaWZkZWYJQUNQSV9GVVRVUkVfVVNBR0UKIGFjcGlfc3RhdHVzCi1hY3BpX3JzX2dldF9wcnNfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOwotI2VuZGlmCQkJCS8qIEFDUElfRlVUVVJFX1VTQUdFICovCithY3BpX3JzX2dldF9jcnNfbWV0aG9kX2RhdGEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfcnNfZ2V0X3Byc19tZXRob2RfZGF0YShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldF9idWZmZXIpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9yc19nZXRfbWV0aG9kX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlLAogCQkJY2hhciAqcGF0aCwgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfcnNfc2V0X3Nyc19tZXRob2RfZGF0YShhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0X2J1ZmZlcik7CithY3BpX3JzX3NldF9zcnNfbWV0aG9kX2RhdGEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpyZXRfYnVmZmVyKTsKIAogLyoKICAqIHJzY2FsYwpAQCAtMTk4LDggKzIwMSw5IEBACiAJCQkJICAgICBhY3BpX3NpemUgKiBidWZmZXJfc2l6ZV9uZWVkZWQpOwogCiBhY3BpX3N0YXR1cwotYWNwaV9yc19jb252ZXJ0X2FtbF90b19yZXNvdXJjZXModTggKiBhbWxfYnVmZmVyLAotCQkJCSB1MzIgYW1sX2J1ZmZlcl9sZW5ndGgsIHU4ICogb3V0cHV0X2J1ZmZlcik7CithY3BpX3JzX2NvbnZlcnRfYW1sX3RvX3Jlc291cmNlcyh1OCAqIGFtbCwKKwkJCQkgdTMyIGxlbmd0aCwKKwkJCQkgdTMyIG9mZnNldCwgdTggcmVzb3VyY2VfaW5kZXgsIHZvaWQgKipjb250ZXh0KTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfcnNfY29udmVydF9yZXNvdXJjZXNfdG9fYW1sKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3N0cnVjdC5oIGIvaW5jbHVkZS9hY3BpL2Fjc3RydWN0LmgKaW5kZXggZDhjMWMyYy4uNWU4MDk1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjc3RydWN0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjc3RydWN0LmgKQEAgLTQ0LDYgKzQ0LDggQEAKICNpZm5kZWYgX19BQ1NUUlVDVF9IX18KICNkZWZpbmUgX19BQ1NUUlVDVF9IX18KIAorLyogYWNwaXNyYzpzdHJ1Y3RfZGVmcyAtLSBmb3IgYWNwaXNyYyBjb252ZXJzaW9uICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFRyZWUgd2Fsa2luZyB0eXBlZGVmcyBhbmQgc3RydWN0cwpAQCAtNTEsNjcgKzUzLDc2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFdhbGsgc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9mIGEgcGFyc2UgdHJlZSB3YWxrLiAgVXNlZCBmb3IgYm90aCBhIGxlaXN1cmVseSBzdHJvbGwgdGhyb3VnaAotICogdGhlIHRyZWUgKGZvciB3aGF0ZXZlciByZWFzb24pLCBhbmQgZm9yIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbi4KKyAqIFdhbGsgc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9mIGEgcGFyc2UgdHJlZSB3YWxrLiAgVXNlZCBmb3IgYm90aCBhIGxlaXN1cmVseQorICogc3Ryb2xsIHRocm91Z2ggdGhlIHRyZWUgKGZvciB3aGF0ZXZlciByZWFzb24pLCBhbmQgZm9yIGNvbnRyb2wgbWV0aG9kCisgKiBleGVjdXRpb24uCiAgKi8KICNkZWZpbmUgQUNQSV9ORVhUX09QX0RPV05XQVJEICAgICAgIDEKICNkZWZpbmUgQUNQSV9ORVhUX09QX1VQV0FSRCAgICAgICAgIDIKIAorLyoKKyAqIEdyb3VwcyBvZiBkZWZpbml0aW9ucyBmb3Igd2Fsa190eXBlIHVzZWQgZm9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YKKyAqIHdhbGtlcnMgKG5ldmVyIHNpbXVsdGFuZW91c2x5KSAtIGZsYWdzIGZvciBpbnRlcnByZXRlcjoKKyAqLwogI2RlZmluZSBBQ1BJX1dBTEtfTk9OX01FVEhPRCAgICAgICAgMAotI2RlZmluZSBBQ1BJX1dBTEtfTUVUSE9EICAgICAgICAgICAgMQotI2RlZmluZSBBQ1BJX1dBTEtfTUVUSE9EX1JFU1RBUlQgICAgMgotI2RlZmluZSBBQ1BJX1dBTEtfQ09OU1RfUkVRVUlSRUQgICAgMwotI2RlZmluZSBBQ1BJX1dBTEtfQ09OU1RfT1BUSU9OQUwgICAgNAorI2RlZmluZSBBQ1BJX1dBTEtfTUVUSE9EICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBQ1BJX1dBTEtfTUVUSE9EX1JFU1RBUlQgICAgMHgwMgorCisvKiBGbGFncyBmb3IgaV9hU0wgY29tcGlsZXIgb25seSAqLworCisjZGVmaW5lIEFDUElfV0FMS19DT05TVF9SRVFVSVJFRCAgICAweDEwCisjZGVmaW5lIEFDUElfV0FMS19DT05TVF9PUFRJT05BTCAgICAweDIwCiAKIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgewotCXU4IGRhdGFfdHlwZTsJCS8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzIE1VU1QgQkUgRklSU1QhICovCisJc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqbmV4dDsJLyogTmV4dCB3YWxrX3N0YXRlIGluIGxpc3QgKi8KKwl1OCBkZXNjcmlwdG9yX3R5cGU7CS8qIFRvIGRpZmZlcmVudGlhdGUgdmFyaW91cyBpbnRlcm5hbCBvYmpzICovCiAJdTggd2Fsa190eXBlOwotCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CS8qIE93bmVyIG9mIG9iamVjdHMgY3JlYXRlZCBkdXJpbmcgdGhlIHdhbGsgKi8KLQl1OCBsYXN0X3ByZWRpY2F0ZTsJLyogUmVzdWx0IG9mIGxhc3QgcHJlZGljYXRlICovCi0JdTggY3VycmVudF9yZXN1bHQ7CS8qICovCisJdTE2IG9wY29kZTsJCS8qIEN1cnJlbnQgQU1MIG9wY29kZSAqLwogCXU4IG5leHRfb3BfaW5mbzsJLyogSW5mbyBhYm91dCBuZXh0X29wICovCiAJdTggbnVtX29wZXJhbmRzOwkvKiBTdGFjayBwb2ludGVyIGZvciBPcGVyYW5kc1tdIGFycmF5ICovCisJYWNwaV9vd25lcl9pZCBvd25lcl9pZDsJLyogT3duZXIgb2Ygb2JqZWN0cyBjcmVhdGVkIGR1cmluZyB0aGUgd2FsayAqLworCXU4IGxhc3RfcHJlZGljYXRlOwkvKiBSZXN1bHQgb2YgbGFzdCBwcmVkaWNhdGUgKi8KKwl1OCBjdXJyZW50X3Jlc3VsdDsKIAl1OCByZXR1cm5fdXNlZDsKLQl1MTYgb3Bjb2RlOwkJLyogQ3VycmVudCBBTUwgb3Bjb2RlICovCiAJdTggc2NvcGVfZGVwdGg7CiAJdTggcGFzc19udW1iZXI7CQkvKiBQYXJzZSBwYXNzIGR1cmluZyB0YWJsZSBsb2FkICovCi0JdTMyIGFyZ19jb3VudDsJCS8qIHB1c2ggZm9yIGZpeGVkIG9yIHZhciBhcmdzICovCiAJdTMyIGFtbF9vZmZzZXQ7CiAJdTMyIGFyZ190eXBlczsKIAl1MzIgbWV0aG9kX2JyZWFrcG9pbnQ7CS8qIEZvciBzaW5nbGUgc3RlcHBpbmcgKi8KIAl1MzIgdXNlcl9icmVha3BvaW50OwkvKiBVc2VyIEFNTCBicmVha3BvaW50ICovCiAJdTMyIHBhcnNlX2ZsYWdzOworCisJc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgcGFyc2VyX3N0YXRlOwkvKiBDdXJyZW50IHN0YXRlIG9mIHBhcnNlciAqLwogCXUzMiBwcmV2X2FyZ190eXBlczsKKwl1MzIgYXJnX2NvdW50OwkJLyogcHVzaCBmb3IgZml4ZWQgb3IgdmFyIGFyZ3MgKi8KKworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIGFyZ3VtZW50c1tBQ1BJX01FVEhPRF9OVU1fQVJHU107CS8qIENvbnRyb2wgbWV0aG9kIGFyZ3VtZW50cyAqLworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIGxvY2FsX3ZhcmlhYmxlc1tBQ1BJX01FVEhPRF9OVU1fTE9DQUxTXTsJLyogQ29udHJvbCBtZXRob2QgbG9jYWxzICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb3BlcmFuZHNbQUNQSV9PQkpfTlVNX09QRVJBTkRTICsgMV07CS8qIE9wZXJhbmRzIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIgKCsxIGZvciBOVUxMIHRlcm1pbmF0b3IpICovCisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnBhcmFtczsKIAogCXU4ICphbWxfbGFzdF93aGlsZTsKLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSBhcmd1bWVudHNbQUNQSV9NRVRIT0RfTlVNX0FSR1NdOwkvKiBDb250cm9sIG1ldGhvZCBhcmd1bWVudHMgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqY2FsbGVyX3JldHVybl9kZXNjOwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqY29udHJvbF9zdGF0ZTsJLyogTGlzdCBvZiBjb250cm9sIHN0YXRlcyAobmVzdGVkIElGcykgKi8KIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGVmZXJyZWRfbm9kZTsJLyogVXNlZCB3aGVuIGV4ZWN1dGluZyBkZWZlcnJlZCBvcGNvZGVzICovCiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwkvKiBJbmZvIGZvciBHUEUgKF9MeHgvX0V4eCBtZXRob2RzIG9ubHkgKi8KIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICppbXBsaWNpdF9yZXR1cm5fb2JqOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIGxvY2FsX3ZhcmlhYmxlc1tBQ1BJX01FVEhPRF9OVU1fTE9DQUxTXTsJLyogQ29udHJvbCBtZXRob2QgbG9jYWxzICovCiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9jYWxsX25vZGU7CS8qIENhbGxlZCBtZXRob2QgTm9kZSAqLwogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICptZXRob2RfY2FsbF9vcDsJLyogbWV0aG9kX2NhbGwgT3AgaWYgcnVubmluZyBhIG1ldGhvZCAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm1ldGhvZF9kZXNjOwkvKiBNZXRob2QgZGVzY3JpcHRvciBpZiBydW5uaW5nIGEgbWV0aG9kICovCiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9ub2RlOwkvKiBNZXRob2Qgbm9kZSBpZiBydW5uaW5nIGEgbWV0aG9kLiAqLwogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcDsJLyogQ3VycmVudCBwYXJzZXIgb3AgKi8KLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcGVyYW5kc1tBQ1BJX09CSl9OVU1fT1BFUkFORFMgKyAxXTsJLyogT3BlcmFuZHMgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlciAoKzEgZm9yIE5VTEwgdGVybWluYXRvcikgKi8KIAljb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyAqb3BfaW5mbzsJLyogSW5mbyBvbiBjdXJyZW50IG9wY29kZSAqLwogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcmlnaW47CS8qIFN0YXJ0IG9mIHdhbGsgW09ic29sZXRlXSAqLwotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipwYXJhbXM7Ci0Jc3RydWN0IGFjcGlfcGFyc2Vfc3RhdGUgcGFyc2VyX3N0YXRlOwkvKiBDdXJyZW50IHN0YXRlIG9mIHBhcnNlciAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJlc3VsdF9vYmo7CiAJdW5pb24gYWNwaV9nZW5lcmljX3N0YXRlICpyZXN1bHRzOwkvKiBTdGFjayBvZiBhY2N1bXVsYXRlZCByZXN1bHRzICovCiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX2Rlc2M7CS8qIFJldHVybiBvYmplY3QsIGlmIGFueSAqLwogCXVuaW9uIGFjcGlfZ2VuZXJpY19zdGF0ZSAqc2NvcGVfaW5mbzsJLyogU3RhY2sgb2YgbmVzdGVkIHNjb3BlcyAqLwotCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKnByZXZfb3A7CS8qIExhc3Qgb3AgdGhhdCB3YXMgcHJvY2Vzc2VkICovCiAJdW5pb24gYWNwaV9wYXJzZV9vYmplY3QgKm5leHRfb3A7CS8qIG5leHQgb3AgdG8gYmUgcHJvY2Vzc2VkICovCisJc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQ7CiAJYWNwaV9wYXJzZV9kb3dud2FyZHMgZGVzY2VuZGluZ19jYWxsYmFjazsKIAlhY3BpX3BhcnNlX3Vwd2FyZHMgYXNjZW5kaW5nX2NhbGxiYWNrOwotCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAqdGhyZWFkOwotCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKm5leHQ7CS8qIE5leHQgd2Fsa19zdGF0ZSBpbiBsaXN0ICovCiB9OwogCiAvKiBJbmZvIHVzZWQgYnkgYWNwaV9wc19pbml0X29iamVjdHMgKi8KQEAgLTEzMSwzMiArMTQyLDYgQEAKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogfTsKIAotLyogSW5mbyB1c2VkIGJ5IGFjcGlfbnNfaW5pdGlhbGl6ZV9kZXZpY2VzICovCi0KLXN0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8gewotCXUxNiBkZXZpY2VfY291bnQ7Ci0JdTE2IG51bV9TVEE7Ci0JdTE2IG51bV9JTkk7Ci0Jc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKLX07Ci0KLS8qIFRCRDogW1Jlc3RydWN0dXJlXSBNZXJnZSB3aXRoIHN0cnVjdCBhYm92ZSAqLwotCi1zdHJ1Y3QgYWNwaV93YWxrX2luZm8gewotCXUzMiBkZWJ1Z19sZXZlbDsKLQl1MzIgY291bnQ7Ci0JYWNwaV9vd25lcl9pZCBvd25lcl9pZDsKLQl1OCBkaXNwbGF5X3R5cGU7Ci19OwotCi0vKiBEaXNwbGF5IFR5cGVzICovCi0KLSNkZWZpbmUgQUNQSV9ESVNQTEFZX1NVTU1BUlkgICAgKHU4KSAwCi0jZGVmaW5lIEFDUElfRElTUExBWV9PQkpFQ1RTICAgICh1OCkgMQotI2RlZmluZSBBQ1BJX0RJU1BMQVlfTUFTSyAgICAgICAodTgpIDEKLQotI2RlZmluZSBBQ1BJX0RJU1BMQVlfU0hPUlQgICAgICAodTgpIDIKLQogc3RydWN0IGFjcGlfZ2V0X2RldmljZXNfaW5mbyB7CiAJYWNwaV93YWxrX2NhbGxiYWNrIHVzZXJfZnVuY3Rpb247CiAJdm9pZCAqY29udGV4dDsKQEAgLTE4OSwxNiArMTc0LDIxIEBACiAJfSBtaWQ7CiB9OwogCi0vKiBJbnRlcm5hbCBtZXRob2QgcGFyYW1ldGVyIGxpc3QgKi8KLQotc3RydWN0IGFjcGlfcGFyYW1ldGVyX2luZm8gewotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIHRvIHBhc3Mgb2JqZWN0IGV2YWx1YXRpb24gcGFyYW1ldGVycy4KKyAqIFB1cnBvc2UgaXMgdG8gcmVkdWNlIENQVSBzdGFjayB1c2UuCisgKi8KK3N0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8geworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwcmVmaXhfbm9kZTsKKwljaGFyICpwYXRobmFtZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcGFyYW1ldGVyczsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcmVzb2x2ZWRfbm9kZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0OwogCXU4IHBhc3NfbnVtYmVyOwogCXU4IHBhcmFtZXRlcl90eXBlOwogCXU4IHJldHVybl9vYmplY3RfdHlwZTsKKwl1OCBmbGFnczsKIH07CiAKIC8qIFR5cGVzIGZvciBwYXJhbWV0ZXJfdHlwZSBhYm92ZSAqLwpAQCAtMjA2LDQgKzE5NiwzNSBAQAogI2RlZmluZSBBQ1BJX1BBUkFNX0FSR1MgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgQUNQSV9QQVJBTV9HUEUgICAgICAgICAgICAgICAgICAxCiAKKy8qIFZhbHVlcyBmb3IgRmxhZ3MgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUUgICAgICAgIDEKKworLyogSW5mbyB1c2VkIGJ5IGFjcGlfbnNfaW5pdGlhbGl6ZV9kZXZpY2VzICovCisKK3N0cnVjdCBhY3BpX2RldmljZV93YWxrX2luZm8geworCXUxNiBkZXZpY2VfY291bnQ7CisJdTE2IG51bV9TVEE7CisJdTE2IG51bV9JTkk7CisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKKwlzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvICpldmFsdWF0ZV9pbmZvOworfTsKKworLyogVEJEOiBbUmVzdHJ1Y3R1cmVdIE1lcmdlIHdpdGggc3RydWN0IGFib3ZlICovCisKK3N0cnVjdCBhY3BpX3dhbGtfaW5mbyB7CisJdTMyIGRlYnVnX2xldmVsOworCXUzMiBjb3VudDsKKwlhY3BpX293bmVyX2lkIG93bmVyX2lkOworCXU4IGRpc3BsYXlfdHlwZTsKK307CisKKy8qIERpc3BsYXkgVHlwZXMgKi8KKworI2RlZmluZSBBQ1BJX0RJU1BMQVlfU1VNTUFSWSAgICAgICAgKHU4KSAwCisjZGVmaW5lIEFDUElfRElTUExBWV9PQkpFQ1RTICAgICAgICAodTgpIDEKKyNkZWZpbmUgQUNQSV9ESVNQTEFZX01BU0sgICAgICAgICAgICh1OCkgMQorCisjZGVmaW5lIEFDUElfRElTUExBWV9TSE9SVCAgICAgICAgICAodTgpIDIKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YWJsZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3RhYmxlcy5oCmluZGV4IDMwYTQ3NTQuLjRkYmFmMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RhYmxlcy5oCkBAIC0xMzYsNyArMTM2LDExIEBACiBhY3BpX3N0YXR1cwogYWNwaV90Yl92ZXJpZnlfdGFibGVfY2hlY2tzdW0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9oZWFkZXIpOwogCi11OCBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHZvaWQgKmJ1ZmZlciwgdTMyIGxlbmd0aCk7Cit1OCBhY3BpX3RiX3N1bV90YWJsZSh2b2lkICpidWZmZXIsIHUzMiBsZW5ndGgpOworCit1OCBhY3BpX3RiX2dlbmVyYXRlX2NoZWNrc3VtKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCit2b2lkIGFjcGlfdGJfc2V0X2NoZWNrc3VtKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOwogCiBhY3BpX3N0YXR1cwogYWNwaV90Yl92YWxpZGF0ZV90YWJsZV9oZWFkZXIoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCBlZDUzZjg0Li5iMTI1Y2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBOYW1lOiBhY3RibC5oIC0gVGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gQUNQSSBzcGVjaWZpY2F0aW9uCisgKiBOYW1lOiBhY3RibC5oIC0gQmFzaWMgQUNQSSBUYWJsZSBEZWZpbml0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNDUsNjYgKzQ1LDQ1IEBACiAjZGVmaW5lIF9fQUNUQkxfSF9fCiAKIC8qCisgKiBWYWx1ZXMgZm9yIGRlc2NyaXB0aW9uIHRhYmxlIGhlYWRlciBzaWduYXR1cmVzLiBVc2VmdWwgYmVjYXVzZSB0aGV5IG1ha2UKKyAqIGl0IG1vcmUgZGlmZmljdWx0IHRvIGluYWR2ZXJ0ZW50bHkgdHlwZSBpbiB0aGUgd3Jvbmcgc2lnbmF0dXJlLgorICovCisjZGVmaW5lIERTRFRfU0lHICAgICAgICAgICAgICAgICJEU0RUIgkvKiBEaWZmZXJlbnRpYXRlZCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgRkFEVF9TSUcgICAgICAgICAgICAgICAgIkZBQ1AiCS8qIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgRkFDU19TSUcgICAgICAgICAgICAgICAgIkZBQ1MiCS8qIEZpcm13YXJlIEFDUEkgQ29udHJvbCBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgUFNEVF9TSUcgICAgICAgICAgICAgICAgIlBTRFQiCS8qIFBlcnNpc3RlbnQgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIFJTRFBfU0lHICAgICAgICAgICAgICAgICJSU0QgUFRSICIJLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gUG9pbnRlciAqLworI2RlZmluZSBSU0RUX1NJRyAgICAgICAgICAgICAgICAiUlNEVCIJLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgWFNEVF9TSUcgICAgICAgICAgICAgICAgIlhTRFQiCS8qIEV4dGVuZGVkICBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgU1NEVF9TSUcgICAgICAgICAgICAgICAgIlNTRFQiCS8qIFNlY29uZGFyeSBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgUlNEUF9OQU1FICAgICAgICAgICAgICAgIlJTRFAiCisKKy8qCisgKiBBbGwgdGFibGVzIGFuZCBzdHJ1Y3R1cmVzIG11c3QgYmUgYnl0ZS1wYWNrZWQgdG8gbWF0Y2ggdGhlIEFDUEkKKyAqIHNwZWNpZmljYXRpb24sIHNpbmNlIHRoZSB0YWJsZXMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gQklPUworICovCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgQUNQSSB0YWJsZXMgdGhhdCBhcmUgZGlyZWN0bHkgY29uc3VtZWQgYnkgdGhlIHN1YnN5c3RlbS4KKyAqCisgKiBUaGUgUlNEUCBhbmQgRkFDUyBkbyBub3QgdXNlIHRoZSBjb21tb24gQUNQSSB0YWJsZSBoZWFkZXIuIEFsbCBvdGhlciBBQ1BJCisgKiB0YWJsZXMgdXNlIHRoZSBoZWFkZXIuCisgKgogICogTm90ZSBhYm91dCBiaXRmaWVsZHM6IFRoZSB1OCB0eXBlIGlzIHVzZWQgZm9yIGJpdGZpZWxkcyBpbiBBQ1BJIHRhYmxlcy4KICAqIFRoaXMgaXMgdGhlIG9ubHkgdHlwZSB0aGF0IGlzIGV2ZW4gcmVtb3RlbHkgcG9ydGFibGUuIEFueXRoaW5nIGVsc2UgaXMgbm90CiAgKiBwb3J0YWJsZSwgc28gZG8gbm90IHVzZSBhbnkgb3RoZXIgYml0ZmllbGQgdHlwZXMuCiAgKi8KIAotLyoKLSAqICBWYWx1ZXMgZm9yIGRlc2NyaXB0aW9uIHRhYmxlIGhlYWRlciBzaWduYXR1cmVzCi0gKi8KLSNkZWZpbmUgUlNEUF9OQU1FICAgICAgICAgICAgICAgIlJTRFAiCi0jZGVmaW5lIFJTRFBfU0lHICAgICAgICAgICAgICAgICJSU0QgUFRSICIJLyogUlNEVCBQb2ludGVyIHNpZ25hdHVyZSAqLwotI2RlZmluZSBBUElDX1NJRyAgICAgICAgICAgICAgICAiQVBJQyIJLyogTXVsdGlwbGUgQVBJQyBEZXNjcmlwdGlvbiBUYWJsZSAqLwotI2RlZmluZSBEU0RUX1NJRyAgICAgICAgICAgICAgICAiRFNEVCIJLyogRGlmZmVyZW50aWF0ZWQgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlICovCi0jZGVmaW5lIEZBRFRfU0lHICAgICAgICAgICAgICAgICJGQUNQIgkvKiBGaXhlZCBBQ1BJIERlc2NyaXB0aW9uIFRhYmxlICovCi0jZGVmaW5lIEZBQ1NfU0lHICAgICAgICAgICAgICAgICJGQUNTIgkvKiBGaXJtd2FyZSBBQ1BJIENvbnRyb2wgU3RydWN0dXJlICovCi0jZGVmaW5lIFBTRFRfU0lHICAgICAgICAgICAgICAgICJQU0RUIgkvKiBQZXJzaXN0ZW50IFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLwotI2RlZmluZSBSU0RUX1NJRyAgICAgICAgICAgICAgICAiUlNEVCIJLyogUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgWFNEVF9TSUcgICAgICAgICAgICAgICAgIlhTRFQiCS8qIEV4dGVuZGVkICBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgU1NEVF9TSUcgICAgICAgICAgICAgICAgIlNTRFQiCS8qIFNlY29uZGFyeSBTeXN0ZW0gRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgU0JTVF9TSUcgICAgICAgICAgICAgICAgIlNCU1QiCS8qIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZSAqLwotI2RlZmluZSBTUElDX1NJRyAgICAgICAgICAgICAgICAiU1BJQyIJLyogSU9TQVBJQyB0YWJsZSAqLwotI2RlZmluZSBCT09UX1NJRyAgICAgICAgICAgICAgICAiQk9PVCIJLyogQm9vdCB0YWJsZSAqLwotCi0jZGVmaW5lIEdMX09XTkVEICAgICAgICAgICAgICAgIDB4MDIJLyogT3duZXJzaGlwIG9mIGdsb2JhbCBsb2NrIGlzIGJpdCAxICovCi0KLS8qCi0gKiBDb21tb24gdGFibGUgdHlwZXMuICBUaGUgYmFzZSBjb2RlIGNhbiByZW1haW4KLSAqIGNvbnN0YW50IGlmIHRoZSB1bmRlcmx5aW5nIHRhYmxlcyBhcmUgY2hhbmdlZAotICovCi0jZGVmaW5lIFJTRFRfREVTQ1JJUFRPUiAgICAgICAgIHN0cnVjdCByc2R0X2Rlc2NyaXB0b3JfcmV2MgotI2RlZmluZSBYU0RUX0RFU0NSSVBUT1IgICAgICAgICBzdHJ1Y3QgeHNkdF9kZXNjcmlwdG9yX3JldjIKLSNkZWZpbmUgRkFDU19ERVNDUklQVE9SICAgICAgICAgc3RydWN0IGZhY3NfZGVzY3JpcHRvcl9yZXYyCi0jZGVmaW5lIEZBRFRfREVTQ1JJUFRPUiAgICAgICAgIHN0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MgotCi0jcHJhZ21hIHBhY2soMSkKLQotLyoKLSAqIEFDUEkgVmVyc2lvbi1pbmRlcGVuZGVudCB0YWJsZXMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogTk9URTogVGhlIHRhYmxlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBBQ1BJIHZlcnNpb25zICgxLjAsIDIuMCwgZXRjLikKLSAqIGFyZSBpbiBzZXBhcmF0ZSBmaWxlcy4KLSAqLwotc3RydWN0IHJzZHBfZGVzY3JpcHRvciB7CS8qIFJvb3QgU3lzdGVtIERlc2NyaXB0b3IgUG9pbnRlciAqLwotCWNoYXIgc2lnbmF0dXJlWzhdOwkvKiBBQ1BJIHNpZ25hdHVyZSwgY29udGFpbnMgIlJTRCBQVFIgIiAqLwotCXU4IGNoZWNrc3VtOwkJLyogQUNQSSAxLjAgY2hlY2tzdW0gKi8KLQljaGFyIG9lbV9pZFs2XTsJCS8qIE9FTSBpZGVudGlmaWNhdGlvbiAqLwotCXU4IHJldmlzaW9uOwkJLyogTXVzdCBiZSAoMCkgZm9yIEFDUEkgMS4wIG9yICgyKSBmb3IgQUNQSSAyLjArICovCi0JdTMyIHJzZHRfcGh5c2ljYWxfYWRkcmVzczsJLyogMzItYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFJTRFQgKi8KLQl1MzIgbGVuZ3RoOwkJLyogWFNEVCBMZW5ndGggaW4gYnl0ZXMsIGluY2x1ZGluZyBoZWFkZXIgKi8KLQl1NjQgeHNkdF9waHlzaWNhbF9hZGRyZXNzOwkvKiA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgWFNEVCAqLwotCXU4IGV4dGVuZGVkX2NoZWNrc3VtOwkvKiBDaGVja3N1bSBvZiBlbnRpcmUgdGFibGUgKEFDUEkgMi4wKSAqLwotCWNoYXIgcmVzZXJ2ZWRbM107CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLX07CisgKiBBQ1BJIFRhYmxlIEhlYWRlci4gVGhpcyBjb21tb24gaGVhZGVyIGlzIHVzZWQgYnkgYWxsIHRhYmxlcyBleGNlcHQgdGhlCisgKiBSU0RQIGFuZCBGQUNTLiBUaGUgZGVmaW5lIGlzIHVzZWQgZm9yIGRpcmVjdCBpbmNsdXNpb24gb2YgaGVhZGVyIGludG8KKyAqIG90aGVyIEFDUEkgdGFibGVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGFjcGlfY29tbW9uX2ZhY3MgewkvKiBDb21tb24gRkFDUyBmb3IgaW50ZXJuYWwgdXNlICovCi0JdTMyICpnbG9iYWxfbG9jazsKLQl1NjQgKmZpcm13YXJlX3dha2luZ192ZWN0b3I7Ci0JdTggdmVjdG9yX3dpZHRoOwotfTsKLQotI2RlZmluZSBBQ1BJX1RBQkxFX0hFQURFUl9ERUYgICAvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8gXAorI2RlZmluZSBBQ1BJX1RBQkxFX0hFQURFUl9ERUYgXAogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlWzRdOyAgICAgICAgICAgLyogQVNDSUkgdGFibGUgc2lnbmF0dXJlICovXAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOyAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRhYmxlIGluIGJ5dGVzLCBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgKi9cCiAJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjsgICAgICAgICAgICAgICAvKiBBQ1BJIFNwZWNpZmljYXRpb24gbWlub3IgdmVyc2lvbiAjICovXApAQCAtMTEyLDE1NCArOTEsMjM5IEBACiAJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZW1faWRbNl07ICAgICAgICAgICAgICAvKiBBU0NJSSBPRU0gaWRlbnRpZmljYXRpb24gKi9cCiAJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZW1fdGFibGVfaWRbOF07ICAgICAgICAvKiBBU0NJSSBPRU0gdGFibGUgaWRlbnRpZmljYXRpb24gKi9cCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZW1fcmV2aXNpb247ICAgICAgICAgICAvKiBPRU0gcmV2aXNpb24gbnVtYmVyICovXAotCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNsX2NvbXBpbGVyX2lkIFs0XTsgICAgLyogQVNDSUkgQVNMIGNvbXBpbGVyIHZlbmRvciBJRCAqL1wKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbF9jb21waWxlcl9pZFs0XTsgICAgIC8qIEFTQ0lJIEFTTCBjb21waWxlciB2ZW5kb3IgSUQgKi9cCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2xfY29tcGlsZXJfcmV2aXNpb247CS8qIEFTTCBjb21waWxlciB2ZXJzaW9uICovCiAKLXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciB7CS8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLworc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIHsKIEFDUElfVEFCTEVfSEVBREVSX0RFRn07CiAKIC8qCi0gKiBNQURUIHZhbHVlcyBhbmQgc3RydWN0dXJlcworICogR0FTIC0gR2VuZXJpYyBBZGRyZXNzIFN0cnVjdHVyZSAoQUNQSSAyLjArKQogICovCitzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeworCXU4IGFkZHJlc3Nfc3BhY2VfaWQ7CS8qIEFkZHJlc3Mgc3BhY2Ugd2hlcmUgc3RydWN0IG9yIHJlZ2lzdGVyIGV4aXN0cyAqLworCXU4IHJlZ2lzdGVyX2JpdF93aWR0aDsJLyogU2l6ZSBpbiBiaXRzIG9mIGdpdmVuIHJlZ2lzdGVyICovCisJdTggcmVnaXN0ZXJfYml0X29mZnNldDsJLyogQml0IG9mZnNldCB3aXRoaW4gdGhlIHJlZ2lzdGVyICovCisJdTggYWNjZXNzX3dpZHRoOwkvKiBNaW5pbXVtIEFjY2VzcyBzaXplIChBQ1BJIDMuMCkgKi8KKwl1NjQgYWRkcmVzczsJCS8qIDY0LWJpdCBhZGRyZXNzIG9mIHN0cnVjdCBvciByZWdpc3RlciAqLworfTsKIAotLyogVmFsdWVzIGZvciBNQURUIFBDQVRDb21wYXQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUlNEUCAtIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFBvaW50ZXIgKFNpZ25hdHVyZSBpcyAiUlNEIFBUUiAiKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgRFVBTF9QSUMgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNVUxUSVBMRV9BUElDICAgICAgICAgICAxCitzdHJ1Y3QgcnNkcF9kZXNjcmlwdG9yIHsKKwljaGFyIHNpZ25hdHVyZVs4XTsJLyogQUNQSSBzaWduYXR1cmUsIGNvbnRhaW5zICJSU0QgUFRSICIgKi8KKwl1OCBjaGVja3N1bTsJCS8qIEFDUEkgMS4wIGNoZWNrc3VtICovCisJY2hhciBvZW1faWRbNl07CQkvKiBPRU0gaWRlbnRpZmljYXRpb24gKi8KKwl1OCByZXZpc2lvbjsJCS8qIE11c3QgYmUgKDApIGZvciBBQ1BJIDEuMCBvciAoMikgZm9yIEFDUEkgMi4wKyAqLworCXUzMiByc2R0X3BoeXNpY2FsX2FkZHJlc3M7CS8qIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBSU0RUICovCisJdTMyIGxlbmd0aDsJCS8qIFRhYmxlIGxlbmd0aCBpbiBieXRlcywgaW5jbHVkaW5nIGhlYWRlciAoQUNQSSAyLjArKSAqLworCXU2NCB4c2R0X3BoeXNpY2FsX2FkZHJlc3M7CS8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBYU0RUIChBQ1BJIDIuMCspICovCisJdTggZXh0ZW5kZWRfY2hlY2tzdW07CS8qIENoZWNrc3VtIG9mIGVudGlyZSB0YWJsZSAoQUNQSSAyLjArKSAqLworCXU4IHJlc2VydmVkWzNdOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworfTsKIAotLyogTWFzdGVyIE1BRFQgKi8KKyNkZWZpbmUgQUNQSV9SU0RQX1JFVjBfU0laRSAgICAgMjAJLyogU2l6ZSBvZiBvcmlnaW5hbCBBQ1BJIDEuMCBSU0RQICovCiAKLXN0cnVjdCBtdWx0aXBsZV9hcGljX3RhYmxlIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYJLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCi0JdTMyIGxvY2FsX2FwaWNfYWRkcmVzczsJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBsb2NhbCBBUElDICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFJTRFQvWFNEVCAtIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCByc2R0X2Rlc2NyaXB0b3IgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MzIgdGFibGVfb2Zmc2V0X2VudHJ5WzFdOwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBBQ1BJIHRhYmxlcyAqLworfTsKKworc3RydWN0IHhzZHRfZGVzY3JpcHRvciB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU2NCB0YWJsZV9vZmZzZXRfZW50cnlbMV07CS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIEFDUEkgdGFibGVzICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZBQ1MgLSBGaXJtd2FyZSBBQ1BJIENvbnRyb2wgU3RydWN0dXJlIChGQUNTKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBmYWNzX2Rlc2NyaXB0b3IgeworCWNoYXIgc2lnbmF0dXJlWzRdOwkvKiBBU0NJSSB0YWJsZSBzaWduYXR1cmUgKi8KKwl1MzIgbGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSwgaW4gYnl0ZXMgKi8KKwl1MzIgaGFyZHdhcmVfc2lnbmF0dXJlOwkvKiBIYXJkd2FyZSBjb25maWd1cmF0aW9uIHNpZ25hdHVyZSAqLworCXUzMiBmaXJtd2FyZV93YWtpbmdfdmVjdG9yOwkvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgRmlybXdhcmUgV2FraW5nIFZlY3RvciAqLworCXUzMiBnbG9iYWxfbG9jazsJLyogR2xvYmFsIExvY2sgZm9yIHNoYXJlZCBoYXJkd2FyZSByZXNvdXJjZXMgKi8KIAogCS8qIEZsYWdzICgzMiBiaXRzKSAqLwogCi0JdTggUENBVGNvbXBhdDoxOwkvKiAwMDogICAgU3lzdGVtIGFsc28gaGFzIGR1YWwgODI1OXMgKi8KKwl1OCBTNGJpb3NfZjoxOwkJLyogMDA6ICAgIFM0QklPUyBzdXBwb3J0IGlzIHByZXNlbnQgKi8KIAkgdTg6NzsJCQkvKiAwMS0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogCXU4IHJlc2VydmVkMVszXTsJLyogMDgtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKworCXU2NCB4ZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsJLyogNjQtYml0IHZlcnNpb24gb2YgdGhlIEZpcm13YXJlIFdha2luZyBWZWN0b3IgKEFDUEkgMi4wKykgKi8KKwl1OCB2ZXJzaW9uOwkJLyogVmVyc2lvbiBvZiB0aGlzIHRhYmxlIChBQ1BJIDIuMCspICovCisJdTggcmVzZXJ2ZWRbMzFdOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiB9OwogCi0vKiBWYWx1ZXMgZm9yIFR5cGUgaW4gQVBJQ19IRUFERVJfREVGICovCi0KLSNkZWZpbmUgQVBJQ19QUk9DRVNTT1IgICAgICAgICAgMAotI2RlZmluZSBBUElDX0lPICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFQSUNfWFJVUFRfT1ZFUlJJREUgICAgIDIKLSNkZWZpbmUgQVBJQ19OTUkgICAgICAgICAgICAgICAgMwotI2RlZmluZSBBUElDX0xPQ0FMX05NSSAgICAgICAgICA0Ci0jZGVmaW5lIEFQSUNfQUREUkVTU19PVkVSUklERSAgIDUKLSNkZWZpbmUgQVBJQ19JT19TQVBJQyAgICAgICAgICAgNgotI2RlZmluZSBBUElDX0xPQ0FMX1NBUElDICAgICAgICA3Ci0jZGVmaW5lIEFQSUNfWFJVUFRfU09VUkNFICAgICAgIDgKLSNkZWZpbmUgQVBJQ19SRVNFUlZFRCAgICAgICAgICAgOQkvKiA5IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBBQ1BJX0dMT0NLX1BFTkRJTkcgICAgICAweDAxCS8qIDAwOiBQZW5kaW5nIGdsb2JhbCBsb2NrIG93bmVyc2hpcCAqLworI2RlZmluZSBBQ1BJX0dMT0NLX09XTkVEICAgICAgICAweDAyCS8qIDAxOiBHbG9iYWwgbG9jayBpcyBvd25lZCAqLwogCiAvKgotICogTUFEVCBzdWItc3RydWN0dXJlcyAoRm9sbG93IE1VTFRJUExFX0FQSUNfREVTQ1JJUFRJT05fVEFCTEUpCisgKiBDb21tb24gRkFDUyAtIFRoaXMgaXMgYSB2ZXJzaW9uLWluZGVwZW5kZW50IEZBQ1Mgc3RydWN0dXJlIHVzZWQgZm9yIGludGVybmFsIHVzZSBvbmx5CiAgKi8KLSNkZWZpbmUgQVBJQ19IRUFERVJfREVGICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIEFQSUMgc3ViLXN0cnVjdHVyZSBoZWFkZXIgKi9cCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7Ci0KLXN0cnVjdCBhcGljX2hlYWRlciB7Ci1BUElDX0hFQURFUl9ERUZ9OwotCi0vKiBWYWx1ZXMgZm9yIE1QUyBJTlRJIGZsYWdzICovCi0KLSNkZWZpbmUgUE9MQVJJVFlfQ09ORk9STVMgICAgICAgMAotI2RlZmluZSBQT0xBUklUWV9BQ1RJVkVfSElHSCAgICAxCi0jZGVmaW5lIFBPTEFSSVRZX1JFU0VSVkVEICAgICAgIDIKLSNkZWZpbmUgUE9MQVJJVFlfQUNUSVZFX0xPVyAgICAgMwotCi0jZGVmaW5lIFRSSUdHRVJfQ09ORk9STVMgICAgICAgIDAKLSNkZWZpbmUgVFJJR0dFUl9FREdFICAgICAgICAgICAgMQotI2RlZmluZSBUUklHR0VSX1JFU0VSVkVEICAgICAgICAyCi0jZGVmaW5lIFRSSUdHRVJfTEVWRUwgICAgICAgICAgIDMKLQotLyogQ29tbW9uIGZsYWcgZGVmaW5pdGlvbnMgKDE2IGJpdHMgZWFjaCkgKi8KLQotI2RlZmluZSBNUFNfSU5USV9GTEFHUyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xhcml0eSAgICAgICAgOiAyOyAgICAvKiAwMC0wMTogUG9sYXJpdHkgb2YgQVBJQyBJL08gaW5wdXQgc2lnbmFscyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJfbW9kZSAgICA6IDI7ICAgIC8qIDAyLTAzOiBUcmlnZ2VyIG1vZGUgb2YgQVBJQyBpbnB1dCBzaWduYWxzICovXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNDsgICAgLyogMDQtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi9cCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7CS8qIDA4LTE1OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0KLSNkZWZpbmUgTE9DQUxfQVBJQ19GTEFHUyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JfZW5hYmxlZDogMTsgICAvKiAwMDogICAgUHJvY2Vzc29yIGlzIHVzYWJsZSBpZiBzZXQgKi9cCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA3OyAgICAvKiAwMS0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqL1wKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsJLyogMDgtMTU6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQotLyogU3ViLXN0cnVjdHVyZXMgZm9yIE1BRFQgKi8KLQotc3RydWN0IG1hZHRfcHJvY2Vzc29yX2FwaWMgewotCUFQSUNfSEVBREVSX0RFRiB1OCBwcm9jZXNzb3JfaWQ7CS8qIEFDUEkgcHJvY2Vzc29yIGlkICovCi0JdTggbG9jYWxfYXBpY19pZDsJLyogUHJvY2Vzc29yJ3MgbG9jYWwgQVBJQyBpZCAqLwotIExPQ0FMX0FQSUNfRkxBR1N9OwotCi1zdHJ1Y3QgbWFkdF9pb19hcGljIHsKLQlBUElDX0hFQURFUl9ERUYgdTggaW9fYXBpY19pZDsJLyogSS9PIEFQSUMgSUQgKi8KLQl1OCByZXNlcnZlZDsJCS8qIFJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0JdTMyIGFkZHJlc3M7CQkvKiBBUElDIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl1MzIgaW50ZXJydXB0OwkJLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgd2hlcmUgSU5USQotCQkJCSAqIGxpbmVzIHN0YXJ0ICovCitzdHJ1Y3QgYWNwaV9jb21tb25fZmFjcyB7CisJdTMyICpnbG9iYWxfbG9jazsKKwl1NjQgKmZpcm13YXJlX3dha2luZ192ZWN0b3I7CisJdTggdmVjdG9yX3dpZHRoOwogfTsKIAotc3RydWN0IG1hZHRfaW50ZXJydXB0X292ZXJyaWRlIHsKLQlBUElDX0hFQURFUl9ERUYgdTggYnVzOwkvKiAwIC0gSVNBICovCi0JdTggc291cmNlOwkJLyogSW50ZXJydXB0IHNvdXJjZSAoSVJRKSAqLwotCXUzMiBpbnRlcnJ1cHQ7CQkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCAqLwotIE1QU19JTlRJX0ZMQUdTfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRkFEVCAtIEZpeGVkIEFDUEkgRGVzY3JpcHRpb24gVGFibGUgKFNpZ25hdHVyZSAiRkFDUCIpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IG1hZHRfbm1pX3NvdXJjZSB7Ci0JQVBJQ19IRUFERVJfREVGIE1QU19JTlRJX0ZMQUdTIHUzMiBpbnRlcnJ1cHQ7CS8qIEdsb2JhbCBzeXN0ZW0gaW50ZXJydXB0ICovCi19OworLyogRmllbGRzIGNvbW1vbiB0byBhbGwgdmVyc2lvbnMgb2YgdGhlIEZBRFQgKi8KIAotc3RydWN0IG1hZHRfbG9jYWxfYXBpY19ubWkgewotCUFQSUNfSEVBREVSX0RFRiB1OCBwcm9jZXNzb3JfaWQ7CS8qIEFDUEkgcHJvY2Vzc29yIGlkICovCi0JTVBTX0lOVElfRkxBR1MgdTggbGludDsJLyogTElOVG4gdG8gd2hpY2ggTk1JIGlzIGNvbm5lY3RlZCAqLwotfTsKKyNkZWZpbmUgQUNQSV9GQURUX0NPTU1PTiBcCisJQUNQSV9UQUJMRV9IRUFERVJfREVGIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX2Zpcm13YXJlX2N0cmw7ICAgLyogMzItYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgRkFDUyAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9kc2R0OyAgICAgICAgICAgIC8qIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOyAgICAgICAgICAvKiBTeXN0ZW0gSW50ZXJydXB0IE1vZGVsIGlzbid0IHVzZWQgaW4gQUNQSSAyLjAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJfUE1fcHJvZmlsZTsgIC8qIENvbnZleXMgcHJlZmVycmVkIHBvd2VyIG1hbmFnZW1lbnQgcHJvZmlsZSB0byBPU1BNLiAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lfaW50OyAgICAgICAgICAgIC8qIFN5c3RlbSB2ZWN0b3Igb2YgU0NJIGludGVycnVwdCAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWlfY21kOyAgICAgICAgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBTTUkgY29tbWFuZCBwb3J0ICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZW5hYmxlOyAgICAgICAgLyogVmFsdWUgdG8gd3JpdGUgdG8gc21pX2NtZCB0byBlbmFibGUgQUNQSSAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3BpX2Rpc2FibGU7ICAgICAgIC8qIFZhbHVlIHRvIHdyaXRlIHRvIHNtaV9jbWQgdG8gZGlzYWJsZSBBQ1BJICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFM0Ymlvc19yZXE7ICAgICAgICAgLyogVmFsdWUgdG8gd3JpdGUgdG8gU01JIENNRCB0byBlbnRlciBTNEJJT1Mgc3RhdGUgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHN0YXRlX2NudDsgICAgICAgICAvKiBQcm9jZXNzb3IgcGVyZm9ybWFuY2Ugc3RhdGUgY29udHJvbCovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMWFfZXZ0X2JsazsgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYSBFdmVudCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMWJfZXZ0X2JsazsgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYiBFdmVudCBSZWcgQmxrICovIFwKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMWFfY250X2JsazsgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYSBDb250cm9sIFJlZyBCbGsgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYl9jbnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFiIENvbnRyb2wgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTJfY250X2JsazsgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMiBDb250cm9sIFJlZyBCbGsgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG1fdG1yX2JsazsgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IFRpbWVyIEN0cmwgUmVnIEJsayAqLyBcCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9ncGUwX2JsazsgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAwIFJlZyBCbGsgKi8gXAorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfZ3BlMV9ibGs7ICAgICAgICAvKiBQb3J0IGFkZHIgb2YgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMSBSZWcgQmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9ldnRfbGVuOyAgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfZXZ0X2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTFfY250X2xlbjsgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtMV94X2NudF9ibGsgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0yX2NudF9sZW47ICAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBwbTJfY250X2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbV90bV9sZW47ICAgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtX3RtX2JsayAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGUwX2Jsa19sZW47ICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IGdwZTBfYmxrICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTFfYmxrX2xlbjsgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMV9ibGsgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9iYXNlOyAgICAgICAgICAvKiBPZmZzZXQgaW4gZ3BlIG1vZGVsIHdoZXJlIGdwZTEgZXZlbnRzIHN0YXJ0ICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzdF9jbnQ7ICAgICAgICAgICAgLyogU3VwcG9ydCBmb3IgdGhlIF9DU1Qgb2JqZWN0IGFuZCBDIFN0YXRlcyBjaGFuZ2Ugbm90aWZpY2F0aW9uLiovIFwKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdmwyX2xhdDsgICAgICAgICAgLyogV29yc3QgY2FzZSBIVyBsYXRlbmN5IHRvIGVudGVyL2V4aXQgQzIgc3RhdGUgKi8gXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDNfbGF0OyAgICAgICAgICAvKiBXb3JzdCBjYXNlIEhXIGxhdGVuY3kgdG8gZW50ZXIvZXhpdCBDMyBzdGF0ZSAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9zaXplOyAgICAgICAgIC8qIFByb2Nlc3NvcidzIG1lbW9yeSBjYWNoZSBsaW5lIHdpZHRoLCBpbiBieXRlcyAqLyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9zdHJpZGU7ICAgICAgIC8qIE51bWJlciBvZiBmbHVzaCBzdHJpZGVzIHRoYXQgbmVlZCB0byBiZSByZWFkICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dHlfb2Zmc2V0OyAgICAgICAgLyogUHJvY2Vzc29yJ3MgZHV0eSBjeWNsZSBpbmRleCBpbiBwcm9jZXNzb3IncyBQX0NOVCByZWcqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXR5X3dpZHRoOyAgICAgICAgIC8qIFByb2Nlc3NvcidzIGR1dHkgY3ljbGUgdmFsdWUgYml0IHdpZHRoIGluIFBfQ05UIHJlZ2lzdGVyLiovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheV9hbHJtOyAgICAgICAgICAgLyogSW5kZXggdG8gZGF5LW9mLW1vbnRoIGFsYXJtIGluIFJUQyBDTU9TIFJBTSAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fYWxybTsgICAgICAgICAgIC8qIEluZGV4IHRvIG1vbnRoLW9mLXllYXIgYWxhcm0gaW4gUlRDIENNT1MgUkFNICovIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnR1cnk7ICAgICAgICAgICAgLyogSW5kZXggdG8gY2VudHVyeSBpbiBSVEMgQ01PUyBSQU0gKi8gXAorCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFwY19ib290X2FyY2g7ICAgICAvKiBJQS1QQyBCb290IEFyY2hpdGVjdHVyZSBGbGFncy4gU2VlIFRhYmxlIDUtMTAgZm9yIGRlc2NyaXB0aW9uKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOyAgICAgICAgICAvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiAKLXN0cnVjdCBtYWR0X2FkZHJlc3Nfb3ZlcnJpZGUgewotCUFQSUNfSEVBREVSX0RFRiB1MTYgcmVzZXJ2ZWQ7CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1NjQgYWRkcmVzczsJCS8qIEFQSUMgcGh5c2ljYWwgYWRkcmVzcyAqLwotfTsKKy8qCisgKiBBQ1BJIDIuMCsgRkFEVAorICovCitzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yIHsKKwlBQ1BJX0ZBRFRfQ09NTU9OCisJICAgIC8qIEZsYWdzICgzMiBiaXRzKSAqLworCXU4IHdiX2ludmQ6MTsJCS8qIDAwOiAgICBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCisJdTggd2JfaW52ZF9mbHVzaDoxOwkvKiAwMTogICAgVGhlIHdiaW52ZCBmbHVzaGVzIGJ1dCBkb2VzIG5vdCBpbnZhbGlkYXRlICovCisJdTggcHJvY19jMToxOwkJLyogMDI6ICAgIEFsbCBwcm9jZXNzb3JzIHN1cHBvcnQgQzEgc3RhdGUgKi8KKwl1OCBwbHZsMl91cDoxOwkJLyogMDM6ICAgIEMyIHN0YXRlIHdvcmtzIG9uIE1QIHN5c3RlbSAqLworCXU4IHB3cl9idXR0b246MTsJLyogMDQ6ICAgIFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlICovCisJdTggc2xlZXBfYnV0dG9uOjE7CS8qIDA1OiAgICBTbGVlcCBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSwgb3Igbm90IHByZXNlbnQgKi8KKwl1OCBmaXhlZF9yVEM6MTsJCS8qIDA2OiAgICBSVEMgd2FrZXVwIHN0YXQgbm90IGluIGZpeGVkIHJlZ2lzdGVyIHNwYWNlICovCisJdTggcnRjczQ6MTsJCS8qIDA3OiAgICBSVEMgd2FrZXVwIHN0YXQgbm90IHBvc3NpYmxlIGZyb20gUzQgKi8KKwl1OCB0bXJfdmFsX2V4dDoxOwkvKiAwODogICAgdG1yX3ZhbCBpcyAzMiBiaXRzIDA9MjQtYml0cyAqLworCXU4IGRvY2tfY2FwOjE7CQkvKiAwOTogICAgRG9ja2luZyBzdXBwb3J0ZWQgKi8KKwl1OCByZXNldF9yZWdfc3VwOjE7CS8qIDEwOiAgICBTeXN0ZW0gcmVzZXQgdmlhIHRoZSBGQURUIFJFU0VUX1JFRyBzdXBwb3J0ZWQgKi8KKwl1OCBzZWFsZWRfY2FzZToxOwkvKiAxMTogICAgTm8gaW50ZXJuYWwgZXhwYW5zaW9uIGNhcGFiaWxpdGllcyBhbmQgY2FzZSBpcyBzZWFsZWQgKi8KKwl1OCBoZWFkbGVzczoxOwkJLyogMTI6ICAgIE5vIGxvY2FsIHZpZGVvIGNhcGFiaWxpdGllcyBvciBsb2NhbCBpbnB1dCBkZXZpY2VzICovCisJdTggY3B1X3N3X3NsZWVwOjE7CS8qIDEzOiAgICBNdXN0IGV4ZWN1dGUgbmF0aXZlIGluc3RydWN0aW9uIGFmdGVyIHdyaXRpbmcgU0xQX1RZUHggcmVnaXN0ZXIgKi8KIAotc3RydWN0IG1hZHRfaW9fc2FwaWMgewotCUFQSUNfSEVBREVSX0RFRiB1OCBpb19zYXBpY19pZDsJLyogSS9PIFNBUElDIElEICovCi0JdTggcmVzZXJ2ZWQ7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JdTMyIGludGVycnVwdF9iYXNlOwkvKiBHbG9jYWwgaW50ZXJydXB0IGZvciBTQVBJQyBzdGFydCAqLwotCXU2NCBhZGRyZXNzOwkJLyogU0FQSUMgcGh5c2ljYWwgYWRkcmVzcyAqLwotfTsKKwl1OCBwY2lfZXhwX3dhazoxOwkvKiAxNDogICAgU3lzdGVtIHN1cHBvcnRzIFBDSUVYUF9XQUtFIChTVFMvRU4pIGJpdHMgKEFDUEkgMy4wKSAqLworCXU4IHVzZV9wbGF0Zm9ybV9jbG9jazoxOwkvKiAxNTogICAgT1NQTSBzaG91bGQgdXNlIHBsYXRmb3JtLXByb3ZpZGVkIHRpbWVyIChBQ1BJIDMuMCkgKi8KKwl1OCBTNHJ0Y19zdHNfdmFsaWQ6MTsJLyogMTY6ICAgIENvbnRlbnRzIG9mIFJUQ19TVFMgdmFsaWQgYWZ0ZXIgUzQgd2FrZSAoQUNQSSAzLjApICovCisJdTggcmVtb3RlX3Bvd2VyX29uX2NhcGFibGU6MTsJLyogMTc6ICAgIFN5c3RlbSBpcyBjb21wYXRpYmxlIHdpdGggcmVtb3RlIHBvd2VyIG9uIChBQ1BJIDMuMCkgKi8KKwl1OCBmb3JjZV9hcGljX2NsdXN0ZXJfbW9kZWw6MTsJLyogMTg6ICAgIEFsbCBsb2NhbCBBUElDcyBtdXN0IHVzZSBjbHVzdGVyIG1vZGVsIChBQ1BJIDMuMCkgKi8KKwl1OCBmb3JjZV9hcGljX3BoeXNpY2FsX2Rlc3RpbmF0aW9uX21vZGU6MTsJLyogMTk6ICAgQWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KKwkgdTg6NDsJCQkvKiAyMC0yMzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCXU4IHJlc2VydmVkMzsJCS8qIDI0LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiAKLXN0cnVjdCBtYWR0X2xvY2FsX3NhcGljIHsKLQlBUElDX0hFQURFUl9ERUYgdTggcHJvY2Vzc29yX2lkOwkvKiBBQ1BJIHByb2Nlc3NvciBpZCAqLwotCXU4IGxvY2FsX3NhcGljX2lkOwkvKiBTQVBJQyBJRCAqLwotCXU4IGxvY2FsX3NhcGljX2VpZDsJLyogU0FQSUMgRUlEICovCi0JdTggcmVzZXJ2ZWRbM107CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JIExPQ0FMX0FQSUNfRkxBR1MgdTMyIHByb2Nlc3Nvcl91SUQ7CS8qIE51bWVyaWMgVUlEIC0gQUNQSSAzLjAgKi8KLQljaGFyIHByb2Nlc3Nvcl91SURzdHJpbmdbMV07CS8qIFN0cmluZyBVSUQgIC0gQUNQSSAzLjAgKi8KLX07Ci0KLXN0cnVjdCBtYWR0X2ludGVycnVwdF9zb3VyY2UgewotCUFQSUNfSEVBREVSX0RFRiBNUFNfSU5USV9GTEFHUyB1OCBpbnRlcnJ1cHRfdHlwZTsJLyogMT1QTUksIDI9SU5JVCwgMz1jb3JyZWN0ZWQgKi8KLQl1OCBwcm9jZXNzb3JfaWQ7CS8qIFByb2Nlc3NvciBJRCAqLwotCXU4IHByb2Nlc3Nvcl9laWQ7CS8qIFByb2Nlc3NvciBFSUQgKi8KLQl1OCBpb19zYXBpY192ZWN0b3I7CS8qIFZlY3RvciB2YWx1ZSBmb3IgUE1JIGludGVycnVwdHMgKi8KLQl1MzIgaW50ZXJydXB0OwkJLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgKi8KLQl1MzIgZmxhZ3M7CQkvKiBJbnRlcnJ1cHQgU291cmNlIEZsYWdzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHJlc2V0X3JlZ2lzdGVyOwkvKiBSZXNldCByZWdpc3RlciBhZGRyZXNzIGluIEdBUyBmb3JtYXQgKi8KKwl1OCByZXNldF92YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZXNldF9yZWdpc3RlciBwb3J0IHRvIHJlc2V0IHRoZSBzeXN0ZW0gKi8KKwl1OCByZXNlcnZlZDRbM107CS8qIFRoZXNlIHRocmVlIGJ5dGVzIG11c3QgYmUgemVybyAqLworCXU2NCB4ZmlybXdhcmVfY3RybDsJLyogNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgRkFDUyAqLworCXU2NCBYZHNkdDsJCS8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMWFfZXZ0X2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFhIGFjcGlfZXZlbnQgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbTFiX2V2dF9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCAxYiBhY3BpX2V2ZW50IFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0xYV9jbnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWEgQ29udHJvbCBSZWcgQmxrIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMWJfY250X2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFiIENvbnRyb2wgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbTJfY250X2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDIgQ29udHJvbCBSZWcgQmxrIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtX3Rtcl9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCBUaW1lciBDdHJsIFJlZyBCbGsgYWRkcmVzcyAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4Z3BlMF9ibGs7CS8qIEV4dGVuZGVkIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDAgUmVnIEJsayBhZGRyZXNzICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhncGUxX2JsazsJLyogRXh0ZW5kZWQgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMSBSZWcgQmxrIGFkZHJlc3MgKi8KIH07CiAKIC8qCi0gKiBTbWFydCBCYXR0ZXJ5CisgKiAiRG93bi1yZXZ2ZWQiIEFDUEkgMi4wIEZBRFQgZGVzY3JpcHRvcgorICogRGVmaW5lZCBoZXJlIHRvIGFsbG93IGNvbXBpbGVyIHRvIGdlbmVyYXRlIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdAogICovCi1zdHJ1Y3Qgc21hcnRfYmF0dGVyeV90YWJsZSB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiB3YXJuaW5nX2xldmVsOwotCXUzMiBsb3dfbGV2ZWw7Ci0JdTMyIGNyaXRpY2FsX2xldmVsOworc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyX21pbnVzIHsKKwlBQ1BJX0ZBRFRfQ09NTU9OIHUzMiBmbGFnczsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgcmVzZXRfcmVnaXN0ZXI7CS8qIFJlc2V0IHJlZ2lzdGVyIGFkZHJlc3MgaW4gR0FTIGZvcm1hdCAqLworCXU4IHJlc2V0X3ZhbHVlOwkJLyogVmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlc2V0X3JlZ2lzdGVyIHBvcnQgdG8gcmVzZXQgdGhlIHN5c3RlbS4gKi8KKwl1OCByZXNlcnZlZDdbM107CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIH07CiAKKy8qCisgKiBBQ1BJIDEuMCBGQURUCisgKiBEZWZpbmVkIGhlcmUgdG8gYWxsb3cgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0CisgKi8KK3N0cnVjdCBmYWR0X2Rlc2NyaXB0b3JfcmV2MSB7CisJQUNQSV9GQURUX0NPTU1PTiB1MzIgZmxhZ3M7Cit9OworCisvKiBGQURUOiBQcmVmZXJlZCBQb3dlciBNYW5hZ2VtZW50IFByb2ZpbGVzICovCisKKyNkZWZpbmUgUE1fVU5TUEVDSUZJRUQgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBNX0RFU0tUT1AgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQTV9NT0JJTEUgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUE1fV09SS1NUQVRJT04gICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFBNX0VOVEVSUFJJU0VfU0VSVkVSICAgICAgICAgICAgNAorI2RlZmluZSBQTV9TT0hPX1NFUlZFUiAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUE1fQVBQTElBTkNFX1BDICAgICAgICAgICAgICAgICA2CisKKy8qIEZBRFQ6IEJvb3QgQXJjaCBGbGFncyAqLworCisjZGVmaW5lIEJBRl9MRUdBQ1lfREVWSUNFUyAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEJBRl84MDQyX0tFWUJPQVJEX0NPTlRST0xMRVIgICAgMHgwMDAyCisKKyNkZWZpbmUgRkFEVDJfUkVWSVNJT05fSUQgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZBRFQyX01JTlVTX1JFVklTSU9OX0lEICAgICAgICAgMgorCisvKiBSZXNldCB0byBkZWZhdWx0IHBhY2tpbmcgKi8KKwogI3ByYWdtYSBwYWNrKCkKIAogLyoKKyAqIFRoaXMgbWFjcm8gaXMgdGVtcG9yYXJ5IHVudGlsIHRoZSB0YWJsZSBiaXRmaWVsZCBmbGFnIGRlZmluaXRpb25zCisgKiBhcmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgYSBGbGFncyBmaWVsZC4KKyAqLworI2RlZmluZSBBQ1BJX0ZMQUdfT0ZGU0VUKGQsZixvKSAgICAgICAgICh1OCkgKEFDUElfT0ZGU0VUIChkLGYpICsgXAorCQkJICBzaXplb2YoKChkICopMCktPmYpICsgbykKKy8qCisgKiBHZXQgdGhlIHJlbWFpbmluZyBBQ1BJIHRhYmxlcworICovCisjaW5jbHVkZSAiYWN0YmwxLmgiCisKKy8qCiAgKiBBQ1BJIFRhYmxlIGluZm9ybWF0aW9uLiAgV2Ugc2F2ZSB0aGUgdGFibGUgYWRkcmVzcywgbGVuZ3RoLAogICogYW5kIHR5cGUgb2YgbWVtb3J5IGFsbG9jYXRpb24gKG1hcHBlZCBvciBhbGxvY2F0ZWQpIGZvciBlYWNoCiAgKiB0YWJsZSBmb3IgMSkgd2hlbiB3ZSBleGl0LCBhbmQgMikgaWYgYSBuZXcgdGFibGUgaXMgaW5zdGFsbGVkCkBAIC0yOTAsMjcgKzM1NCwxNyBAQAogCXU4IGZsYWdzOwogfTsKIAotLyoKLSAqIEdldCB0aGUgQUNQSSB2ZXJzaW9uLXNwZWNpZmljIHRhYmxlcwotICovCi0jaW5jbHVkZSAiYWN0YmwxLmgiCQkvKiBBY3BpIDEuMCB0YWJsZSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImFjdGJsMi5oIgkJLyogQWNwaSAyLjAgdGFibGUgZGVmaW5pdGlvbnMgKi8KLQogZXh0ZXJuIHU4IGFjcGlfZmFkdF9pc192MTsJLyogaXMgc2V0IHRvIDEgaWYgRkFEVCBpcyByZXZpc2lvbiAxLAogCQkJCSAqIG5lZWRlZCBmb3IgY2VydGFpbiB3b3JrYXJvdW5kcyAqLworLyogTWFjcm9zIHVzZWQgdG8gZ2VuZXJhdGUgb2Zmc2V0cyB0byBzcGVjaWZpYyB0YWJsZSBmaWVsZHMgKi8KIAotI3ByYWdtYSBwYWNrKDEpCi0vKgotICogSGlnaCBwZXJmb3JtYW5jZSB0aW1lcgotICovCi1zdHJ1Y3QgaHBldF90YWJsZSB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiBoYXJkd2FyZV9pZDsKLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgYmFzZV9hZGRyZXNzOwotCXU4IGhwZXRfbnVtYmVyOwotCXUxNiBjbG9ja190aWNrOwotCXU4IGF0dHJpYnV0ZXM7Ci19OworI2RlZmluZSBBQ1BJX0ZBQ1NfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBmYWNzX2Rlc2NyaXB0b3IsZikKKyNkZWZpbmUgQUNQSV9GQURUX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yLCBmKQorI2RlZmluZSBBQ1BJX0dBU19PRkZTRVQoZikgICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyxmKQorI2RlZmluZSBBQ1BJX0hEUl9PRkZTRVQoZikgICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcixmKQorI2RlZmluZSBBQ1BJX1JTRFBfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCByc2RwX2Rlc2NyaXB0b3IsZikKIAotI3ByYWdtYSBwYWNrKCkKKyNkZWZpbmUgQUNQSV9GQURUX0ZMQUdfT0ZGU0VUKGYsbykgICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yLGYsbykKKyNkZWZpbmUgQUNQSV9GQUNTX0ZMQUdfT0ZGU0VUKGYsbykgICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgZmFjc19kZXNjcmlwdG9yLGYsbykKIAogI2VuZGlmCQkJCS8qIF9fQUNUQkxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKaW5kZXggY2Q0MjhkNS4uNzQ1YTY0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBOYW1lOiBhY3RibDEuaCAtIEFDUEkgMS4wIHRhYmxlcworICogTmFtZTogYWN0YmwxLmggLSBBZGRpdGlvbmFsIEFDUEkgdGFibGUgZGVmaW5pdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTQ0LDkyICs0NCw1OTkgQEAKICNpZm5kZWYgX19BQ1RCTDFfSF9fCiAjZGVmaW5lIF9fQUNUQkwxX0hfXwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEFkZGl0aW9uYWwgQUNQSSBUYWJsZXMKKyAqCisgKiBUaGVzZSB0YWJsZXMgYXJlIG5vdCBjb25zdW1lZCBkaXJlY3RseSBieSB0aGUgQUNQSUNBIHN1YnN5c3RlbSwgYnV0IGFyZQorICogaW5jbHVkZWQgaGVyZSB0byBzdXBwb3J0IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgQU1MIGRpc2Fzc2VtYmxlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVmFsdWVzIGZvciBkZXNjcmlwdGlvbiB0YWJsZSBoZWFkZXIgc2lnbmF0dXJlcy4gVXNlZnVsIGJlY2F1c2UgdGhleSBtYWtlCisgKiBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4gdGhlIHdyb25nIHNpZ25hdHVyZS4KKyAqLworI2RlZmluZSBBQ1BJX1NJR19BU0YgICAgICAgICAgICAiQVNGISIJLyogQWxlcnQgU3RhbmRhcmQgRm9ybWF0IHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0JPT1QgICAgICAgICAgICJCT09UIgkvKiBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0NQRVAgICAgICAgICAgICJDUEVQIgkvKiBDb3JyZWN0ZWQgUGxhdGZvcm0gRXJyb3IgUG9sbGluZyB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19EQkdQICAgICAgICAgICAiREJHUCIJLyogRGVidWcgUG9ydCB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19FQ0RUICAgICAgICAgICAiRUNEVCIJLyogRW1iZWRkZWQgQ29udHJvbGxlciBCb290IFJlc291cmNlcyBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19IUEVUICAgICAgICAgICAiSFBFVCIJLyogSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfTUFEVCAgICAgICAgICAgIkFQSUMiCS8qIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfTUNGRyAgICAgICAgICAgIk1DRkciCS8qIFBDSSBNZW1vcnkgTWFwcGVkIENvbmZpZ3VyYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfU0JTVCAgICAgICAgICAgIlNCU1QiCS8qIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19TTElUICAgICAgICAgICAiU0xJVCIJLyogU3lzdGVtIExvY2FsaXR5IERpc3RhbmNlIEluZm9ybWF0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NQQ1IgICAgICAgICAgICJTUENSIgkvKiBTZXJpYWwgUG9ydCBDb25zb2xlIFJlZGlyZWN0aW9uIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NQTUkgICAgICAgICAgICJTUE1JIgkvKiBTZXJ2ZXIgUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcmZhY2UgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfU1JBVCAgICAgICAgICAgIlNSQVQiCS8qIFN5c3RlbSBSZXNvdXJjZSBBZmZpbml0eSBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19UQ1BBICAgICAgICAgICAiVENQQSIJLyogVHJ1c3RlZCBDb21wdXRpbmcgUGxhdGZvcm0gQWxsaWFuY2UgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfV0RSVCAgICAgICAgICAgIldEUlQiCS8qIFdhdGNoZG9nIFJlc291cmNlIFRhYmxlICovCisKKy8qIExlZ2FjeSBuYW1lcyAqLworCisjZGVmaW5lIEFQSUNfU0lHICAgICAgICAgICAgICAgICJBUElDIgkvKiBNdWx0aXBsZSBBUElDIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIEJPT1RfU0lHICAgICAgICAgICAgICAgICJCT09UIgkvKiBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlICovCisjZGVmaW5lIFNCU1RfU0lHICAgICAgICAgICAgICAgICJTQlNUIgkvKiBTbWFydCBCYXR0ZXJ5IFNwZWNpZmljYXRpb24gVGFibGUgKi8KKworLyoKKyAqIEFsbCB0YWJsZXMgbXVzdCBiZSBieXRlLXBhY2tlZCB0byBtYXRjaCB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uLCBzaW5jZQorICogdGhlIHRhYmxlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSBCSU9TLgorICovCiAjcHJhZ21hIHBhY2soMSkKIAogLyoKLSAqIEFDUEkgMS4wIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChSU0RUKQorICogTm90ZSBhYm91dCBiaXRmaWVsZHM6IFRoZSB1OCB0eXBlIGlzIHVzZWQgZm9yIGJpdGZpZWxkcyBpbiBBQ1BJIHRhYmxlcy4KKyAqIFRoaXMgaXMgdGhlIG9ubHkgdHlwZSB0aGF0IGlzIGV2ZW4gcmVtb3RlbHkgcG9ydGFibGUuIEFueXRoaW5nIGVsc2UgaXMgbm90CisgKiBwb3J0YWJsZSwgc28gZG8gbm90IHVzZSBhbnkgb3RoZXIgYml0ZmllbGQgdHlwZXMuCiAgKi8KLXN0cnVjdCByc2R0X2Rlc2NyaXB0b3JfcmV2MSB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGCS8qIEFDUEkgY29tbW9uIHRhYmxlIGhlYWRlciAqLwotCXUzMiB0YWJsZV9vZmZzZXRfZW50cnlbMV07CS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIEFDUEkgdGFibGVzICovCi19OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEFTRiAtIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCB0YWJsZSAoU2lnbmF0dXJlICJBU0YhIikKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9hc2YgeworQUNQSV9UQUJMRV9IRUFERVJfREVGfTsKKworI2RlZmluZSBBQ1BJX0FTRl9IRUFERVJfREVGIFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7IFwKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOyBcCisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKK3N0cnVjdCBhY3BpX2FzZl9oZWFkZXIgeworQUNQSV9BU0ZfSEVBREVSX0RFRn07CisKKy8qIFZhbHVlcyBmb3IgVHlwZSBmaWVsZCAqLworCisjZGVmaW5lIEFTRl9JTkZPICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVNGX0FMRVJUICAgICAgICAgICAgICAgMQorI2RlZmluZSBBU0ZfQ09OVFJPTCAgICAgICAgICAgICAyCisjZGVmaW5lIEFTRl9CT09UICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVNGX0FERFJFU1MgICAgICAgICAgICAgNAorI2RlZmluZSBBU0ZfUkVTRVJWRUQgICAgICAgICAgICA1CiAKIC8qCi0gKiBBQ1BJIDEuMCBGaXJtd2FyZSBBQ1BJIENvbnRyb2wgU3RydWN0dXJlIChGQUNTKQorICogQVNGIHN1YnRhYmxlcwogICovCi1zdHJ1Y3QgZmFjc19kZXNjcmlwdG9yX3JldjEgewotCWNoYXIgc2lnbmF0dXJlWzRdOwkvKiBBU0NJSSB0YWJsZSBzaWduYXR1cmUgKi8KLQl1MzIgbGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSBpbiBieXRlcyAqLwotCXUzMiBoYXJkd2FyZV9zaWduYXR1cmU7CS8qIEhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gc2lnbmF0dXJlICovCi0JdTMyIGZpcm13YXJlX3dha2luZ192ZWN0b3I7CS8qIEFDUEkgT1Mgd2FraW5nIHZlY3RvciAqLwotCXUzMiBnbG9iYWxfbG9jazsJLyogR2xvYmFsIExvY2sgKi8KKworLyogMDogQVNGIEluZm9ybWF0aW9uICovCisKK3N0cnVjdCBhY3BpX2FzZl9pbmZvIHsKKwlBQ1BJX0FTRl9IRUFERVJfREVGIHU4IG1pbl9yZXNldF92YWx1ZTsKKwl1OCBtaW5fcG9sbF9pbnRlcnZhbDsKKwl1MTYgc3lzdGVtX2lkOworCXUzMiBtZmdfaWQ7CisJdTggZmxhZ3M7CisJdTggcmVzZXJ2ZWQyWzNdOworfTsKKworLyogMTogQVNGIEFsZXJ0cyAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfYWxlcnQgeworCUFDUElfQVNGX0hFQURFUl9ERUYgdTggYXNzZXJ0X21hc2s7CisJdTggZGVhc3NlcnRfbWFzazsKKwl1OCBhbGVydHM7CisJdTggZGF0YV9sZW5ndGg7CisJdTggYXJyYXlbMV07Cit9OworCisvKiAyOiBBU0YgUmVtb3RlIENvbnRyb2wgKi8KKworc3RydWN0IGFjcGlfYXNmX3JlbW90ZSB7CisJQUNQSV9BU0ZfSEVBREVSX0RFRiB1OCBjb250cm9sczsKKwl1OCBkYXRhX2xlbmd0aDsKKwl1MTYgcmVzZXJ2ZWQyOworCXU4IGFycmF5WzFdOworfTsKKworLyogMzogQVNGIFJNQ1AgQm9vdCBPcHRpb25zICovCisKK3N0cnVjdCBhY3BpX2FzZl9ybWNwIHsKKwlBQ1BJX0FTRl9IRUFERVJfREVGIHU4IGNhcGFiaWxpdGllc1s3XTsKKwl1OCBjb21wbGV0aW9uX2NvZGU7CisJdTMyIGVudGVycHJpc2VfaWQ7CisJdTggY29tbWFuZDsKKwl1MTYgcGFyYW1ldGVyOworCXUxNiBib290X29wdGlvbnM7CisJdTE2IG9lbV9wYXJhbWV0ZXJzOworfTsKKworLyogNDogQVNGIEFkZHJlc3MgKi8KKworc3RydWN0IGFjcGlfYXNmX2FkZHJlc3MgeworCUFDUElfQVNGX0hFQURFUl9ERUYgdTggZXByb21fYWRkcmVzczsKKwl1OCBkZXZpY2VzOworCXU4IHNtYnVzX2FkZHJlc3Nlc1sxXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQk9PVCAtIFNpbXBsZSBCb290IEZsYWcgVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9ib290IHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTggY21vc19pbmRleDsJLyogSW5kZXggaW4gQ01PUyBSQU0gZm9yIHRoZSBib290IHJlZ2lzdGVyICovCisJdTggcmVzZXJ2ZWRbM107Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENQRVAgLSBDb3JyZWN0ZWQgUGxhdGZvcm0gRXJyb3IgUG9sbGluZyB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2NwZXAgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1NjQgcmVzZXJ2ZWQ7Cit9OworCisvKiBTdWJ0YWJsZSAqLworCitzdHJ1Y3QgYWNwaV9jcGVwX3BvbGxpbmcgeworCXU4IHR5cGU7CisJdTggbGVuZ3RoOworCXU4IHByb2Nlc3Nvcl9pZDsJLyogUHJvY2Vzc29yIElEICovCisJdTggcHJvY2Vzc29yX2VpZDsJLyogUHJvY2Vzc29yIEVJRCAqLworCXUzMiBwb2xsaW5nX2ludGVydmFsOwkvKiBQb2xsaW5nIGludGVydmFsIChtc2VjKSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEQkdQIC0gRGVidWcgUG9ydCB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2RiZ3AgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1OCBpbnRlcmZhY2VfdHlwZTsJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBkZWJ1Z19wb3J0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFQ0RUIC0gRW1iZWRkZWQgQ29udHJvbGxlciBCb290IFJlc291cmNlcyBUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBlY19ib290X3Jlc291cmNlcyB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBlY19jb250cm9sOwkvKiBBZGRyZXNzIG9mIEVDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGVjX2RhdGE7CS8qIEFkZHJlc3Mgb2YgRUMgZGF0YSByZWdpc3RlciAqLworCXUzMiB1aWQ7CQkvKiBVbmlxdWUgSUQgLSBtdXN0IGJlIHNhbWUgYXMgdGhlIEVDIF9VSUQgbWV0aG9kICovCisJdTggZ3BlX2JpdDsJCS8qIFRoZSBHUEUgZm9yIHRoZSBFQyAqLworCXU4IGVjX2lkWzFdOwkJLyogRnVsbCBuYW1lcGF0aCBvZiB0aGUgRUMgaW4gdGhlIEFDUEkgbmFtZXNwYWNlICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEhQRVQgLSBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX2hwZXRfdGFibGUgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MzIgaGFyZHdhcmVfaWQ7CS8qIEhhcmR3YXJlIElEIG9mIGV2ZW50IHRpbWVyIGJsb2NrICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGJhc2VfYWRkcmVzczsJLyogQWRkcmVzcyBvZiBldmVudCB0aW1lciBibG9jayAqLworCXU4IGhwZXRfbnVtYmVyOwkJLyogSFBFVCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MTYgY2xvY2tfdGljazsJCS8qIE1haW4gY291bnRlciBtaW4gdGljaywgcGVyaW9kaWMgbW9kZSAqLworCXU4IGF0dHJpYnV0ZXM7Cit9OworCisjaWYgMAkJCQkvKiBIUEVUIGZsYWdzIHRvIGJlIGNvbnZlcnRlZCB0byBtYWNyb3MgKi8KK3N0cnVjdCB7CQkJLyogRmxhZ3MgKDggYml0cykgKi8KKwl1OCBwYWdlX3Byb3RlY3Q6MTsJLyogMDA6ICAgIE5vIHBhZ2UgcHJvdGVjdGlvbiAqLworCXU4IHBhZ2VfcHJvdGVjdDQ6MTsJLyogMDE6ICAgIDRfa0IgcGFnZSBwcm90ZWN0ZWQgKi8KKwl1OCBwYWdlX3Byb3RlY3Q2NDoxOwkvKiAwMjogICAgNjRfa0IgcGFnZSBwcm90ZWN0ZWQgKi8KKwkgdTg6NTsJCQkvKiAwMy0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworfSBmbGFnczsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1BRFQgLSBNdWx0aXBsZSBBUElDIERlc2NyaXB0aW9uIFRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IG11bHRpcGxlX2FwaWNfdGFibGUgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MzIgbG9jYWxfYXBpY19hZGRyZXNzOwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGxvY2FsIEFQSUMgKi8KIAogCS8qIEZsYWdzICgzMiBiaXRzKSAqLwogCi0JdTggUzRiaW9zX2Y6MTsJCS8qIDAwOiAgICBTNEJJT1Mgc3VwcG9ydCBpcyBwcmVzZW50ICovCisJdTggUENBVGNvbXBhdDoxOwkvKiAwMDogICAgU3lzdGVtIGFsc28gaGFzIGR1YWwgODI1OXMgKi8KIAkgdTg6NzsJCQkvKiAwMS0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogCXU4IHJlc2VydmVkMVszXTsJLyogMDgtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQotCXU4IHJlc2VydmVkMls0MF07CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIH07CiAKKy8qIFZhbHVlcyBmb3IgTUFEVCBQQ0FUQ29tcGF0ICovCisKKyNkZWZpbmUgRFVBTF9QSUMgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVUxUSVBMRV9BUElDICAgICAgICAgICAxCisKKy8qIENvbW1vbiBNQURUIFN1Yi10YWJsZSBoZWFkZXIgKi8KKworI2RlZmluZSBBUElDX0hFQURFUl9ERUYgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCitzdHJ1Y3QgYXBpY19oZWFkZXIgeworQVBJQ19IRUFERVJfREVGfTsKKworLyogVmFsdWVzIGZvciBUeXBlIGluIHN0cnVjdCBhcGljX2hlYWRlciAqLworCisjZGVmaW5lIEFQSUNfUFJPQ0VTU09SICAgICAgICAgIDAKKyNkZWZpbmUgQVBJQ19JTyAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBUElDX1hSVVBUX09WRVJSSURFICAgICAyCisjZGVmaW5lIEFQSUNfTk1JICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVBJQ19MT0NBTF9OTUkgICAgICAgICAgNAorI2RlZmluZSBBUElDX0FERFJFU1NfT1ZFUlJJREUgICA1CisjZGVmaW5lIEFQSUNfSU9fU0FQSUMgICAgICAgICAgIDYKKyNkZWZpbmUgQVBJQ19MT0NBTF9TQVBJQyAgICAgICAgNworI2RlZmluZSBBUElDX1hSVVBUX1NPVVJDRSAgICAgICA4CisjZGVmaW5lIEFQSUNfUkVTRVJWRUQgICAgICAgICAgIDkJLyogOSBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KKworLyogRmxhZyBkZWZpbml0aW9ucyBmb3IgTUFEVCBzdWItdGFibGVzICovCisKKyNkZWZpbmUgQUNQSV9NQURUX0lGTEFHUyAvKiBJTlRJIGZsYWdzICgxNiBiaXRzKSAqLyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xhcml0eSAgICAgICAgOiAyOyAgICAvKiAwMC0wMTogUG9sYXJpdHkgb2YgQVBJQyBJL08gaW5wdXQgc2lnbmFscyAqL1wKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJfbW9kZSAgICA6IDI7ICAgIC8qIDAyLTAzOiBUcmlnZ2VyIG1vZGUgb2YgQVBJQyBpbnB1dCBzaWduYWxzICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNDsgICAgLyogMDQtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7CS8qIDA4LTE1OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisKKyNkZWZpbmUgQUNQSV9NQURUX0xGTEFHUyAvKiBMb2NhbCBTYXBpYyBmbGFncyAoMzIgYml0cykgKi8gXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yX2VuYWJsZWQ6IDE7ICAgLyogMDA6ICAgIFByb2Nlc3NvciBpcyB1c2FibGUgaWYgc2V0ICovXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNzsgICAgLyogMDEtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi9cCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDJbM107CS8qIDA4LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisKKy8qIFZhbHVlcyBmb3IgTVBTIElOVEkgZmxhZ3MgKi8KKworI2RlZmluZSBQT0xBUklUWV9DT05GT1JNUyAgICAgICAwCisjZGVmaW5lIFBPTEFSSVRZX0FDVElWRV9ISUdIICAgIDEKKyNkZWZpbmUgUE9MQVJJVFlfUkVTRVJWRUQgICAgICAgMgorI2RlZmluZSBQT0xBUklUWV9BQ1RJVkVfTE9XICAgICAzCisKKyNkZWZpbmUgVFJJR0dFUl9DT05GT1JNUyAgICAgICAgMAorI2RlZmluZSBUUklHR0VSX0VER0UgICAgICAgICAgICAxCisjZGVmaW5lIFRSSUdHRVJfUkVTRVJWRUQgICAgICAgIDIKKyNkZWZpbmUgVFJJR0dFUl9MRVZFTCAgICAgICAgICAgMworCiAvKgotICogQUNQSSAxLjAgRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAoRkFEVCkKKyAqIE1BRFQgU3ViLXRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhcGljX2hlYWRlcgogICovCi1zdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjEgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRgkvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KLQl1MzIgZmlybXdhcmVfY3RybDsJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovCi0JdTMyIGRzZHQ7CQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgKi8KLQl1OCBtb2RlbDsJCS8qIFN5c3RlbSBJbnRlcnJ1cHQgTW9kZWwgKi8KLQl1OCByZXNlcnZlZDE7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JdTE2IHNjaV9pbnQ7CQkvKiBTeXN0ZW0gdmVjdG9yIG9mIFNDSSBpbnRlcnJ1cHQgKi8KLQl1MzIgc21pX2NtZDsJCS8qIFBvcnQgYWRkcmVzcyBvZiBTTUkgY29tbWFuZCBwb3J0ICovCi0JdTggYWNwaV9lbmFibGU7CQkvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGVuYWJsZSBBQ1BJICovCi0JdTggYWNwaV9kaXNhYmxlOwkvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGRpc2FibGUgQUNQSSAqLwotCXU4IFM0Ymlvc19yZXE7CQkvKiBWYWx1ZSB0byB3cml0ZSB0byBTTUkgQ01EIHRvIGVudGVyIFM0QklPUyBzdGF0ZSAqLwotCXU4IHJlc2VydmVkMjsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1MzIgcG0xYV9ldnRfYmxrOwkvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIGFjcGlfZXZlbnQgUmVnIEJsayAqLwotCXUzMiBwbTFiX2V2dF9ibGs7CS8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgYWNwaV9ldmVudCBSZWcgQmxrICovCi0JdTMyIHBtMWFfY250X2JsazsJLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYSBDb250cm9sIFJlZyBCbGsgKi8KLQl1MzIgcG0xYl9jbnRfYmxrOwkvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFiIENvbnRyb2wgUmVnIEJsayAqLwotCXUzMiBwbTJfY250X2JsazsJLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAyIENvbnRyb2wgUmVnIEJsayAqLwotCXUzMiBwbV90bXJfYmxrOwkJLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCBUaW1lciBDdHJsIFJlZyBCbGsgKi8KLQl1MzIgZ3BlMF9ibGs7CQkvKiBQb3J0IGFkZHIgb2YgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMCBSZWcgQmxrICovCi0JdTMyIGdwZTFfYmxrOwkJLyogUG9ydCBhZGRyIG9mIEdlbmVyYWwgUHVycG9zZSBhY3BpX2V2ZW50IDEgUmVnIEJsayAqLwotCXU4IHBtMV9ldnRfbGVuOwkJLyogQnl0ZSBsZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfZXZ0X2JsayAqLwotCXU4IHBtMV9jbnRfbGVuOwkJLyogQnl0ZSBsZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfY250X2JsayAqLwotCXU4IHBtMl9jbnRfbGVuOwkJLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgcG0yX2NudF9ibGsgKi8KLQl1OCBwbV90bV9sZW47CQkvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBwbV90bV9ibGsgKi8KLQl1OCBncGUwX2Jsa19sZW47CS8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IGdwZTBfYmxrICovCi0JdTggZ3BlMV9ibGtfbGVuOwkvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBncGUxX2JsayAqLwotCXU4IGdwZTFfYmFzZTsJCS8qIE9mZnNldCBpbiBncGUgbW9kZWwgd2hlcmUgZ3BlMSBldmVudHMgc3RhcnQgKi8KLQl1OCByZXNlcnZlZDM7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JdTE2IHBsdmwyX2xhdDsJCS8qIFdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMyIHN0YXRlICovCi0JdTE2IHBsdmwzX2xhdDsJCS8qIFdvcnN0IGNhc2UgSFcgbGF0ZW5jeSB0byBlbnRlci9leGl0IEMzIHN0YXRlICovCi0JdTE2IGZsdXNoX3NpemU7CQkvKiBTaXplIG9mIGFyZWEgcmVhZCB0byBmbHVzaCBjYWNoZXMgKi8KLQl1MTYgZmx1c2hfc3RyaWRlOwkvKiBTdHJpZGUgdXNlZCBpbiBmbHVzaGluZyBjYWNoZXMgKi8KLQl1OCBkdXR5X29mZnNldDsJCS8qIEJpdCBsb2NhdGlvbiBvZiBkdXR5IGN5Y2xlIGZpZWxkIGluIHBfY250IHJlZyAqLwotCXU4IGR1dHlfd2lkdGg7CQkvKiBCaXQgd2lkdGggb2YgZHV0eSBjeWNsZSBmaWVsZCBpbiBwX2NudCByZWcgKi8KLQl1OCBkYXlfYWxybTsJCS8qIEluZGV4IHRvIGRheS1vZi1tb250aCBhbGFybSBpbiBSVEMgQ01PUyBSQU0gKi8KLQl1OCBtb25fYWxybTsJCS8qIEluZGV4IHRvIG1vbnRoLW9mLXllYXIgYWxhcm0gaW4gUlRDIENNT1MgUkFNICovCi0JdTggY2VudHVyeTsJCS8qIEluZGV4IHRvIGNlbnR1cnkgaW4gUlRDIENNT1MgUkFNICovCi0JdTggcmVzZXJ2ZWQ0WzNdOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisKKy8qIDA6IHByb2Nlc3NvciBBUElDICovCisKK3N0cnVjdCBtYWR0X3Byb2Nlc3Nvcl9hcGljIHsKKwlBUElDX0hFQURFUl9ERUYgdTggcHJvY2Vzc29yX2lkOwkvKiBBQ1BJIHByb2Nlc3NvciBpZCAqLworCXU4IGxvY2FsX2FwaWNfaWQ7CS8qIFByb2Nlc3NvcidzIGxvY2FsIEFQSUMgaWQgKi8KKyBBQ1BJX01BRFRfTEZMQUdTfTsKKworLyogMTogSU8gQVBJQyAqLworCitzdHJ1Y3QgbWFkdF9pb19hcGljIHsKKwlBUElDX0hFQURFUl9ERUYgdTggaW9fYXBpY19pZDsJLyogSS9PIEFQSUMgSUQgKi8KKwl1OCByZXNlcnZlZDsJCS8qIFJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisJdTMyIGFkZHJlc3M7CQkvKiBBUElDIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MzIgaW50ZXJydXB0OwkJLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgd2hlcmUgSU5USSBsaW5lcyBzdGFydCAqLworfTsKKworLyogMjogSW50ZXJydXB0IE92ZXJyaWRlICovCisKK3N0cnVjdCBtYWR0X2ludGVycnVwdF9vdmVycmlkZSB7CisJQVBJQ19IRUFERVJfREVGIHU4IGJ1czsJLyogMCAtIElTQSAqLworCXU4IHNvdXJjZTsJCS8qIEludGVycnVwdCBzb3VyY2UgKElSUSkgKi8KKwl1MzIgaW50ZXJydXB0OwkJLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgKi8KKyBBQ1BJX01BRFRfSUZMQUdTfTsKKworLyogMzogTk1JIFNvdXJjZXMgKi8KKworc3RydWN0IG1hZHRfbm1pX3NvdXJjZSB7CisJQVBJQ19IRUFERVJfREVGIEFDUElfTUFEVF9JRkxBR1MgdTMyIGludGVycnVwdDsJLyogR2xvYmFsIHN5c3RlbSBpbnRlcnJ1cHQgKi8KK307CisKKy8qIDQ6IExvY2FsIEFQSUMgTk1JICovCisKK3N0cnVjdCBtYWR0X2xvY2FsX2FwaWNfbm1pIHsKKwlBUElDX0hFQURFUl9ERUYgdTggcHJvY2Vzc29yX2lkOwkvKiBBQ1BJIHByb2Nlc3NvciBpZCAqLworCUFDUElfTUFEVF9JRkxBR1MgdTggbGludDsJLyogTElOVG4gdG8gd2hpY2ggTk1JIGlzIGNvbm5lY3RlZCAqLworfTsKKworLyogNTogQWRkcmVzcyBPdmVycmlkZSAqLworCitzdHJ1Y3QgbWFkdF9hZGRyZXNzX292ZXJyaWRlIHsKKwlBUElDX0hFQURFUl9ERUYgdTE2IHJlc2VydmVkOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTY0IGFkZHJlc3M7CQkvKiBBUElDIHBoeXNpY2FsIGFkZHJlc3MgKi8KK307CisKKy8qIDY6IEkvTyBTYXBpYyAqLworCitzdHJ1Y3QgbWFkdF9pb19zYXBpYyB7CisJQVBJQ19IRUFERVJfREVGIHU4IGlvX3NhcGljX2lkOwkvKiBJL08gU0FQSUMgSUQgKi8KKwl1OCByZXNlcnZlZDsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKwl1MzIgaW50ZXJydXB0X2Jhc2U7CS8qIEdsb2NhbCBpbnRlcnJ1cHQgZm9yIFNBUElDIHN0YXJ0ICovCisJdTY0IGFkZHJlc3M7CQkvKiBTQVBJQyBwaHlzaWNhbCBhZGRyZXNzICovCit9OworCisvKiA3OiBMb2NhbCBTYXBpYyAqLworCitzdHJ1Y3QgbWFkdF9sb2NhbF9zYXBpYyB7CisJQVBJQ19IRUFERVJfREVGIHU4IHByb2Nlc3Nvcl9pZDsJLyogQUNQSSBwcm9jZXNzb3IgaWQgKi8KKwl1OCBsb2NhbF9zYXBpY19pZDsJLyogU0FQSUMgSUQgKi8KKwl1OCBsb2NhbF9zYXBpY19laWQ7CS8qIFNBUElDIEVJRCAqLworCXU4IHJlc2VydmVkWzNdOwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCSBBQ1BJX01BRFRfTEZMQUdTIHUzMiBwcm9jZXNzb3JfdUlEOwkvKiBOdW1lcmljIFVJRCAtIEFDUEkgMy4wICovCisJY2hhciBwcm9jZXNzb3JfdUlEc3RyaW5nWzFdOwkvKiBTdHJpbmcgVUlEICAtIEFDUEkgMy4wICovCit9OworCisvKiA4OiBQbGF0Zm9ybSBJbnRlcnJ1cHQgU291cmNlICovCisKK3N0cnVjdCBtYWR0X2ludGVycnVwdF9zb3VyY2UgeworCUFQSUNfSEVBREVSX0RFRiBBQ1BJX01BRFRfSUZMQUdTIHU4IGludGVycnVwdF90eXBlOwkvKiAxPVBNSSwgMj1JTklULCAzPWNvcnJlY3RlZCAqLworCXU4IHByb2Nlc3Nvcl9pZDsJLyogUHJvY2Vzc29yIElEICovCisJdTggcHJvY2Vzc29yX2VpZDsJLyogUHJvY2Vzc29yIEVJRCAqLworCXU4IGlvX3NhcGljX3ZlY3RvcjsJLyogVmVjdG9yIHZhbHVlIGZvciBQTUkgaW50ZXJydXB0cyAqLworCXUzMiBpbnRlcnJ1cHQ7CQkvKiBHbG9iYWwgc3lzdGVtIGludGVycnVwdCAqLworCXUzMiBmbGFnczsJCS8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KK307CisKKyNpZmRlZiBEVVBMSUNBVEVfREVGSU5JVElPTl9XSVRIX0xJTlVYX0FDUElfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNQ0ZHIC0gUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSBhbmQgc3ViLXRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfbWNmZyB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU4IHJlc2VydmVkWzhdOworfTsKKworc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uIHsKKwl1NjQgYmFzZV9hZGRyZXNzOwkvKiBCYXNlIGFkZHJlc3MsIHByb2Nlc3Nvci1yZWxhdGl2ZSAqLworCXUxNiBwY2lfc2VnbWVudDsJLyogUENJIHNlZ21lbnQgZ3JvdXAgbnVtYmVyICovCisJdTggc3RhcnRfYnVzX251bWJlcjsJLyogU3RhcnRpbmcgUENJIEJ1cyBudW1iZXIgKi8KKwl1OCBlbmRfYnVzX251bWJlcjsJLyogRmluYWwgUENJIEJ1cyBudW1iZXIgKi8KKwl1MzIgcmVzZXJ2ZWQ7Cit9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0JTVCAtIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBzbWFydF9iYXR0ZXJ5X3RhYmxlIHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTMyIHdhcm5pbmdfbGV2ZWw7CisJdTMyIGxvd19sZXZlbDsKKwl1MzIgY3JpdGljYWxfbGV2ZWw7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNMSVQgLSBTeXN0ZW0gTG9jYWxpdHkgRGlzdGFuY2UgSW5mb3JtYXRpb24gVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3Qgc3lzdGVtX2xvY2FsaXR5X2luZm8geworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1NjQgbG9jYWxpdHlfY291bnQ7CisJdTggZW50cnlbMV1bMV07Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNQQ1IgLSBTZXJpYWwgUG9ydCBDb25zb2xlIFJlZGlyZWN0aW9uIHRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfc3BjciB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHU4IGludGVyZmFjZV90eXBlOwkvKiAwPWZ1bGwgMTY1NTAsIDE9c3Vic2V0IG9mIDE2NTUwICovCisJdTggcmVzZXJ2ZWRbM107CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHNlcmlhbF9wb3J0OworCXU4IGludGVycnVwdF90eXBlOworCXU4IHBjX2ludGVycnVwdDsKKwl1MzIgaW50ZXJydXB0OworCXU4IGJhdWRfcmF0ZTsKKwl1OCBwYXJpdHk7CisJdTggc3RvcF9iaXRzOworCXU4IGZsb3dfY29udHJvbDsKKwl1OCB0ZXJtaW5hbF90eXBlOworCXU4IHJlc2VydmVkMjsKKwl1MTYgcGNpX2RldmljZV9pZDsKKwl1MTYgcGNpX3ZlbmRvcl9pZDsKKwl1OCBwY2lfYnVzOworCXU4IHBjaV9kZXZpY2U7CisJdTggcGNpX2Z1bmN0aW9uOworCXUzMiBwY2lfZmxhZ3M7CisJdTggcGNpX3NlZ21lbnQ7CisJdTMyIHJlc2VydmVkMzsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU1BNSSAtIFNlcnZlciBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3NwbWkgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1OCByZXNlcnZlZDsKKwl1OCBpbnRlcmZhY2VfdHlwZTsKKwl1MTYgc3BlY19yZXZpc2lvbjsJLyogVmVyc2lvbiBvZiBJUE1JICovCisJdTggaW50ZXJydXB0X3R5cGU7CisJdTggZ3BlX251bWJlcjsJCS8qIEdQRSBhc3NpZ25lZCAqLworCXU4IHJlc2VydmVkMjsKKwl1OCBwY2lfZGV2aWNlX2ZsYWc7CisJdTMyIGludGVycnVwdDsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgaXBtaV9yZWdpc3RlcjsKKwl1OCBwY2lfc2VnbWVudDsKKwl1OCBwY2lfYnVzOworCXU4IHBjaV9kZXZpY2U7CisJdTggcGNpX2Z1bmN0aW9uOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTUkFUIC0gU3lzdGVtIFJlc291cmNlIEFmZmluaXR5IFRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHN5c3RlbV9yZXNvdXJjZV9hZmZpbml0eSB7CisJQUNQSV9UQUJMRV9IRUFERVJfREVGIHUzMiByZXNlcnZlZDE7CS8qIE11c3QgYmUgdmFsdWUgJzEnICovCisJdTY0IHJlc2VydmVkMjsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qIFNSQVQgY29tbW9uIHN1Yi10YWJsZSBoZWFkZXIgKi8KKworI2RlZmluZSBTUkFUX1NVQlRBQkxFX0hFQURFUiBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKKy8qIFZhbHVlcyBmb3IgVHlwZSBhYm92ZSAqLworCisjZGVmaW5lIFNSQVRfQ1BVX0FGRklOSVRZICAgICAgIDAKKyNkZWZpbmUgU1JBVF9NRU1PUllfQUZGSU5JVFkgICAgMQorI2RlZmluZSBTUkFUX1JFU0VSVkVEICAgICAgICAgICAyCisKKy8qIFNSQVQgc3ViLXRhYmxlcyAqLworCitzdHJ1Y3Qgc3RhdGljX3Jlc291cmNlX2FsbG9jIHsKKwlTUkFUX1NVQlRBQkxFX0hFQURFUiB1OCBwcm94aW1pdHlfZG9tYWluX2xvOworCXU4IGFwaWNfaWQ7CiAKIAkvKiBGbGFncyAoMzIgYml0cykgKi8KIAotCXU4IHdiX2ludmQ6MTsJCS8qIDAwOiAgICBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCi0JdTggd2JfaW52ZF9mbHVzaDoxOwkvKiAwMTogICAgVGhlIHdiaW52ZCBmbHVzaGVzIGJ1dCBkb2VzIG5vdCBpbnZhbGlkYXRlICovCi0JdTggcHJvY19jMToxOwkJLyogMDI6ICAgIEFsbCBwcm9jZXNzb3JzIHN1cHBvcnQgQzEgc3RhdGUgKi8KLQl1OCBwbHZsMl91cDoxOwkJLyogMDM6ICAgIEMyIHN0YXRlIHdvcmtzIG9uIE1QIHN5c3RlbSAqLwotCXU4IHB3cl9idXR0b246MTsJLyogMDQ6ICAgIFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlICovCi0JdTggc2xlZXBfYnV0dG9uOjE7CS8qIDA1OiAgICBTbGVlcCBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSwgb3Igbm90IHByZXNlbnQgKi8KLQl1OCBmaXhlZF9yVEM6MTsJCS8qIDA2OiAgICBSVEMgd2FrZXVwIHN0YXQgbm90IGluIGZpeGVkIHJlZ2lzdGVyIHNwYWNlICovCi0JdTggcnRjczQ6MTsJCS8qIDA3OiAgICBSVEMgd2FrZXVwIHN0YXQgbm90IHBvc3NpYmxlIGZyb20gUzQgKi8KLQl1OCB0bXJfdmFsX2V4dDoxOwkvKiAwODogICAgdG1yX3ZhbCB3aWR0aCBpcyAzMiBiaXRzICgwID0gMjQgYml0cykgKi8KLQkgdTg6NzsJCQkvKiAwOS0xNTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXU4IHJlc2VydmVkNVsyXTsJLyogMTYtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKwl1OCBlbmFibGVkOjE7CQkvKiAwMDogICAgVXNlIGFmZmluaXR5IHN0cnVjdHVyZSAqLworCSB1ODo3OwkJCS8qIDAxLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTggcmVzZXJ2ZWQzWzNdOwkvKiAwOC0zMTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCisJdTggbG9jYWxfc2FwaWNfZWlkOworCXU4IHByb3hpbWl0eV9kb21haW5faGlbM107CisJdTMyIHJlc2VydmVkNDsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIH07CiAKK3N0cnVjdCBtZW1vcnlfYWZmaW5pdHkgeworCVNSQVRfU1VCVEFCTEVfSEVBREVSIHUzMiBwcm94aW1pdHlfZG9tYWluOworCXUxNiByZXNlcnZlZDM7CisJdTY0IGJhc2VfYWRkcmVzczsKKwl1NjQgYWRkcmVzc19sZW5ndGg7CisJdTMyIHJlc2VydmVkNDsKKworCS8qIEZsYWdzICgzMiBiaXRzKSAqLworCisJdTggZW5hYmxlZDoxOwkJLyogMDA6ICAgIFVzZSBhZmZpbml0eSBzdHJ1Y3R1cmUgKi8KKwl1OCBob3RfcGx1Z2dhYmxlOjE7CS8qIDAxOiAgICBNZW1vcnkgcmVnaW9uIGlzIGhvdCBwbHVnZ2FibGUgKi8KKwl1OCBub25fdm9sYXRpbGU6MTsJLyogMDI6ICAgIE1lbW9yeSBpcyBub24tdm9sYXRpbGUgKi8KKwkgdTg6NTsJCQkvKiAwMy0wNzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLworCXU4IHJlc2VydmVkNVszXTsJLyogMDgtMzE6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KKworCXU2NCByZXNlcnZlZDY7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRDUEEgLSBUcnVzdGVkIENvbXB1dGluZyBQbGF0Zm9ybSBBbGxpYW5jZSB0YWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3RjcGEgeworCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MTYgcmVzZXJ2ZWQ7CisJdTMyIG1heF9sb2dfbGVuZ3RoOwkvKiBNYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGV2ZW50IGxvZyBhcmVhICovCisJdTY0IGxvZ19hZGRyZXNzOwkvKiBBZGRyZXNzIG9mIHRoZSBldmVudCBsb2cgYXJlYSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBXRFJUIC0gV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV93ZHJ0IHsKKwlBQ1BJX1RBQkxFX0hFQURFUl9ERUYgdTMyIGhlYWRlcl9sZW5ndGg7CS8qIFdhdGNoZG9nIEhlYWRlciBMZW5ndGggKi8KKwl1OCBwY2lfc2VnbWVudDsJCS8qIFBDSSBTZWdtZW50IG51bWJlciAqLworCXU4IHBjaV9idXM7CQkvKiBQQ0kgQnVzIG51bWJlciAqLworCXU4IHBjaV9kZXZpY2U7CQkvKiBQQ0kgRGV2aWNlIG51bWJlciAqLworCXU4IHBjaV9mdW5jdGlvbjsJLyogUENJIEZ1bmN0aW9uIG51bWJlciAqLworCXUzMiB0aW1lcl9wZXJpb2Q7CS8qIFBlcmlvZCBvZiBvbmUgdGltZXIgY291bnQgKG1zZWMpICovCisJdTMyIG1heF9jb3VudDsJCS8qIE1heGltdW0gY291bnRlciB2YWx1ZSBzdXBwb3J0ZWQgKi8KKwl1MzIgbWluX2NvdW50OwkJLyogTWluaW11bSBjb3VudGVyIHZhbHVlICovCisJdTggZmxhZ3M7CisJdTggcmVzZXJ2ZWRbM107CisJdTMyIGVudHJpZXM7CQkvKiBOdW1iZXIgb2Ygd2F0Y2hkb2cgZW50cmllcyB0aGF0IGZvbGxvdyAqLworfTsKKworI2lmIDAJCQkJLyogRmxhZ3MsIHdpbGwgYmUgY29udmVydGVkIHRvIG1hY3JvcyAqLwordTggZW5hYmxlZDoxOwkJCS8qIDAwOiAgICBUaW1lciBlbmFibGVkICovCit1ODo2OwkJCQkvKiAwMS0wNjogUmVzZXJ2ZWQgKi8KK3U4IHNsZWVwX3N0b3A6MTsJCS8qIDA3OiAgICBUaW1lciBzdG9wcGVkIGluIHNsZWVwIHN0YXRlICovCisjZW5kaWYKKworLyogTWFjcm9zIHVzZWQgdG8gZ2VuZXJhdGUgb2Zmc2V0cyB0byBzcGVjaWZpYyB0YWJsZSBmaWVsZHMgKi8KKworI2RlZmluZSBBQ1BJX0FTRjBfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX2FzZl9pbmZvLGYpCisjZGVmaW5lIEFDUElfQVNGMV9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfYXNmX2FsZXJ0LGYpCisjZGVmaW5lIEFDUElfQVNGMl9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfYXNmX3JlbW90ZSxmKQorI2RlZmluZSBBQ1BJX0FTRjNfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX2FzZl9ybWNwLGYpCisjZGVmaW5lIEFDUElfQVNGNF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfYXNmX2FkZHJlc3MsZikKKyNkZWZpbmUgQUNQSV9CT09UX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV90YWJsZV9ib290LGYpCisjZGVmaW5lIEFDUElfQ1BFUF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfY3BlcCxmKQorI2RlZmluZSBBQ1BJX0NQRVAwX09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX2NwZXBfcG9sbGluZyxmKQorI2RlZmluZSBBQ1BJX0RCR1BfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX2RiZ3AsZikKKyNkZWZpbmUgQUNQSV9FQ0RUX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgZWNfYm9vdF9yZXNvdXJjZXMsZikKKyNkZWZpbmUgQUNQSV9IUEVUX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgaHBldF90YWJsZSxmKQorI2RlZmluZSBBQ1BJX01BRFRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBtdWx0aXBsZV9hcGljX3RhYmxlLGYpCisjZGVmaW5lIEFDUElfTUFEVDBfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfcHJvY2Vzc29yX2FwaWMsZikKKyNkZWZpbmUgQUNQSV9NQURUMV9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9pb19hcGljLGYpCisjZGVmaW5lIEFDUElfTUFEVDJfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfaW50ZXJydXB0X292ZXJyaWRlLGYpCisjZGVmaW5lIEFDUElfTUFEVDNfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfbm1pX3NvdXJjZSxmKQorI2RlZmluZSBBQ1BJX01BRFQ0X09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBtYWR0X2xvY2FsX2FwaWNfbm1pLGYpCisjZGVmaW5lIEFDUElfTUFEVDVfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfYWRkcmVzc19vdmVycmlkZSxmKQorI2RlZmluZSBBQ1BJX01BRFQ2X09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBtYWR0X2lvX3NhcGljLGYpCisjZGVmaW5lIEFDUElfTUFEVDdfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IG1hZHRfbG9jYWxfc2FwaWMsZikKKyNkZWZpbmUgQUNQSV9NQURUOF9PRkZTRVQoZikgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9pbnRlcnJ1cHRfc291cmNlLGYpCisjZGVmaW5lIEFDUElfTUFEVEhfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFwaWNfaGVhZGVyLGYpCisjZGVmaW5lIEFDUElfTUNGR19PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfbWNmZyxmKQorI2RlZmluZSBBQ1BJX01DRkcwX09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX21jZmdfYWxsb2NhdGlvbixmKQorI2RlZmluZSBBQ1BJX1NCU1RfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBzbWFydF9iYXR0ZXJ5X3RhYmxlLGYpCisjZGVmaW5lIEFDUElfU0xJVF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IHN5c3RlbV9sb2NhbGl0eV9pbmZvLGYpCisjZGVmaW5lIEFDUElfU1BDUl9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfc3BjcixmKQorI2RlZmluZSBBQ1BJX1NQTUlfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX3NwbWksZikKKyNkZWZpbmUgQUNQSV9TUkFUX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3Qgc3lzdGVtX3Jlc291cmNlX2FmZmluaXR5LGYpCisjZGVmaW5lIEFDUElfU1JBVDBfT0ZGU0VUKGYpICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IHN0YXRpY19yZXNvdXJjZV9hbGxvYyxmKQorI2RlZmluZSBBQ1BJX1NSQVQxX09GRlNFVChmKSAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBtZW1vcnlfYWZmaW5pdHksZikKKyNkZWZpbmUgQUNQSV9UQ1BBX09GRlNFVChmKSAgICAgICAgICAgICAodTgpIEFDUElfT0ZGU0VUIChzdHJ1Y3QgYWNwaV90YWJsZV90Y3BhLGYpCisjZGVmaW5lIEFDUElfV0RSVF9PRkZTRVQoZikgICAgICAgICAgICAgKHU4KSBBQ1BJX09GRlNFVCAoc3RydWN0IGFjcGlfdGFibGVfd2RydCxmKQorCisjZGVmaW5lIEFDUElfSFBFVF9GTEFHX09GRlNFVChmLG8pICAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IGhwZXRfdGFibGUsZixvKQorI2RlZmluZSBBQ1BJX1NSQVQwX0ZMQUdfT0ZGU0VUKGYsbykgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBzdGF0aWNfcmVzb3VyY2VfYWxsb2MsZixvKQorI2RlZmluZSBBQ1BJX1NSQVQxX0ZMQUdfT0ZGU0VUKGYsbykgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBtZW1vcnlfYWZmaW5pdHksZixvKQorI2RlZmluZSBBQ1BJX01BRFRfRkxBR19PRkZTRVQoZixvKSAgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBtdWx0aXBsZV9hcGljX3RhYmxlLGYsbykKKyNkZWZpbmUgQUNQSV9NQURUMF9GTEFHX09GRlNFVChmLG8pICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9wcm9jZXNzb3JfYXBpYyxmLG8pCisjZGVmaW5lIEFDUElfTUFEVDJfRkxBR19PRkZTRVQoZixvKSAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IG1hZHRfaW50ZXJydXB0X292ZXJyaWRlLGYsbykKKyNkZWZpbmUgQUNQSV9NQURUM19GTEFHX09GRlNFVChmLG8pICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9ubWlfc291cmNlLGYsbykKKyNkZWZpbmUgQUNQSV9NQURUNF9GTEFHX09GRlNFVChmLG8pICAgICBBQ1BJX0ZMQUdfT0ZGU0VUIChzdHJ1Y3QgbWFkdF9sb2NhbF9hcGljX25taSxmLG8pCisjZGVmaW5lIEFDUElfTUFEVDdfRkxBR19PRkZTRVQoZixvKSAgICAgQUNQSV9GTEFHX09GRlNFVCAoc3RydWN0IG1hZHRfbG9jYWxfc2FwaWMsZixvKQorI2RlZmluZSBBQ1BJX01BRFQ4X0ZMQUdfT0ZGU0VUKGYsbykgICAgIEFDUElfRkxBR19PRkZTRVQgKHN0cnVjdCBtYWR0X2ludGVycnVwdF9zb3VyY2UsZixvKQorCisvKiBSZXNldCB0byBkZWZhdWx0IHBhY2tpbmcgKi8KKwogI3ByYWdtYSBwYWNrKCkKIAogI2VuZGlmCQkJCS8qIF9fQUNUQkwxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCmluZGV4IGRmYzdhYzEuLjY3ZWZlNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKQEAgLTQ0LDIzNCArNDQsNiBAQAogI2lmbmRlZiBfX0FDVEJMMl9IX18KICNkZWZpbmUgX19BQ1RCTDJfSF9fCiAKLS8qCi0gKiBQcmVmZXJlZCBQb3dlciBNYW5hZ2VtZW50IFByb2ZpbGVzCi0gKi8KLSNkZWZpbmUgUE1fVU5TUEVDSUZJRUQgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBNX0RFU0tUT1AgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQTV9NT0JJTEUgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUE1fV09SS1NUQVRJT04gICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBNX0VOVEVSUFJJU0VfU0VSVkVSICAgICAgICAgICAgNAotI2RlZmluZSBQTV9TT0hPX1NFUlZFUiAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUE1fQVBQTElBTkNFX1BDICAgICAgICAgICAgICAgICA2Ci0KLS8qCi0gKiBBQ1BJIEJvb3QgQXJjaCBGbGFncwotICovCi0jZGVmaW5lIEJBRl9MRUdBQ1lfREVWSUNFUyAgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEJBRl84MDQyX0tFWUJPQVJEX0NPTlRST0xMRVIgICAgMHgwMDAyCi0KLSNkZWZpbmUgRkFEVDJfUkVWSVNJT05fSUQgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEZBRFQyX01JTlVTX1JFVklTSU9OX0lEICAgICAgICAgMgotCi0jcHJhZ21hIHBhY2soMSkKLQotLyoKLSAqIEFDUEkgMi4wIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlIChSU0RUKQotICovCi1zdHJ1Y3QgcnNkdF9kZXNjcmlwdG9yX3JldjIgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRgkvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KLQl1MzIgdGFibGVfb2Zmc2V0X2VudHJ5WzFdOwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBBQ1BJIHRhYmxlcyAqLwotfTsKLQotLyoKLSAqIEFDUEkgMi4wIEV4dGVuZGVkIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAoWFNEVCkKLSAqLwotc3RydWN0IHhzZHRfZGVzY3JpcHRvcl9yZXYyIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYJLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCi0JdTY0IHRhYmxlX29mZnNldF9lbnRyeVsxXTsJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gQUNQSSB0YWJsZXMgKi8KLX07Ci0KLS8qCi0gKiBBQ1BJIDIuMCBGaXJtd2FyZSBBQ1BJIENvbnRyb2wgU3RydWN0dXJlIChGQUNTKQotICovCi1zdHJ1Y3QgZmFjc19kZXNjcmlwdG9yX3JldjIgewotCWNoYXIgc2lnbmF0dXJlWzRdOwkvKiBBU0NJSSB0YWJsZSBzaWduYXR1cmUgKi8KLQl1MzIgbGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSwgaW4gYnl0ZXMgKi8KLQl1MzIgaGFyZHdhcmVfc2lnbmF0dXJlOwkvKiBIYXJkd2FyZSBjb25maWd1cmF0aW9uIHNpZ25hdHVyZSAqLwotCXUzMiBmaXJtd2FyZV93YWtpbmdfdmVjdG9yOwkvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgRmlybXdhcmUgV2FraW5nIFZlY3Rvci4gKi8KLQl1MzIgZ2xvYmFsX2xvY2s7CS8qIEdsb2JhbCBMb2NrIHVzZWQgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIHNoYXJlZCBoYXJkd2FyZSByZXNvdXJjZXMgKi8KLQotCS8qIEZsYWdzICgzMiBiaXRzKSAqLwotCi0JdTggUzRiaW9zX2Y6MTsJCS8qIDAwOiAgICBTNEJJT1Mgc3VwcG9ydCBpcyBwcmVzZW50ICovCi0JIHU4Ojc7CQkJLyogMDEtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1OCByZXNlcnZlZDFbM107CS8qIDA4LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0KLQl1NjQgeGZpcm13YXJlX3dha2luZ192ZWN0b3I7CS8qIDY0LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBGaXJtd2FyZSBXYWtpbmcgVmVjdG9yLiAqLwotCXU4IHZlcnNpb247CQkvKiBWZXJzaW9uIG9mIHRoaXMgdGFibGUgKi8KLQl1OCByZXNlcnZlZDNbMzFdOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi19OwotCi0vKgotICogQUNQSSAyLjArIEdlbmVyaWMgQWRkcmVzcyBTdHJ1Y3R1cmUgKEdBUykKLSAqLwotc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHsKLQl1OCBhZGRyZXNzX3NwYWNlX2lkOwkvKiBBZGRyZXNzIHNwYWNlIHdoZXJlIHN0cnVjdCBvciByZWdpc3RlciBleGlzdHMuICovCi0JdTggcmVnaXN0ZXJfYml0X3dpZHRoOwkvKiBTaXplIGluIGJpdHMgb2YgZ2l2ZW4gcmVnaXN0ZXIgKi8KLQl1OCByZWdpc3Rlcl9iaXRfb2Zmc2V0OwkvKiBCaXQgb2Zmc2V0IHdpdGhpbiB0aGUgcmVnaXN0ZXIgKi8KLQl1OCBhY2Nlc3Nfd2lkdGg7CS8qIE1pbmltdW0gQWNjZXNzIHNpemUgKEFDUEkgMy4wKSAqLwotCXU2NCBhZGRyZXNzOwkJLyogNjQtYml0IGFkZHJlc3Mgb2Ygc3RydWN0IG9yIHJlZ2lzdGVyICovCi19OwotCi0jZGVmaW5lIEZBRFRfUkVWMl9DT01NT04gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfZmlybXdhcmVfY3RybDsgICAvKiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX2RzZHQ7ICAgICAgICAgICAgLyogMzItYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgRFNEVCAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7ICAgICAgICAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgTW9kZWwgaXNuJ3QgdXNlZCBpbiBBQ1BJIDIuMCovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcl9QTV9wcm9maWxlOyAgLyogQ29udmV5cyBwcmVmZXJyZWQgcG93ZXIgbWFuYWdlbWVudCBwcm9maWxlIHRvIE9TUE0uICovIFwKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaV9pbnQ7ICAgICAgICAgICAgLyogU3lzdGVtIHZlY3RvciBvZiBTQ0kgaW50ZXJydXB0ICovIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtaV9jbWQ7ICAgICAgICAgICAgLyogUG9ydCBhZGRyZXNzIG9mIFNNSSBjb21tYW5kIHBvcnQgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9lbmFibGU7ICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBzbWlfY21kIHRvIGVuYWJsZSBBQ1BJICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfZGlzYWJsZTsgICAgICAgLyogVmFsdWUgdG8gd3JpdGUgdG8gc21pX2NtZCB0byBkaXNhYmxlIEFDUEkgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUzRiaW9zX3JlcTsgICAgICAgICAvKiBWYWx1ZSB0byB3cml0ZSB0byBTTUkgQ01EIHRvIGVudGVyIFM0QklPUyBzdGF0ZSAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3RhdGVfY250OyAgICAgICAgIC8qIFByb2Nlc3NvciBwZXJmb3JtYW5jZSBzdGF0ZSBjb250cm9sKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYV9ldnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFhIGFjcGlfZXZlbnQgUmVnIEJsayAqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTFiX2V2dF9ibGs7ICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMWIgYWNwaV9ldmVudCBSZWcgQmxrICovIFwKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYxX3BtMWFfY250X2JsazsgICAgLyogUG9ydCBhZGRyZXNzIG9mIFBvd2VyIE1ndCAxYSBDb250cm9sIFJlZyBCbGsgKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG0xYl9jbnRfYmxrOyAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IDFiIENvbnRyb2wgUmVnIEJsayAqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9wbTJfY250X2JsazsgICAgIC8qIFBvcnQgYWRkcmVzcyBvZiBQb3dlciBNZ3QgMiBDb250cm9sIFJlZyBCbGsgKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfcG1fdG1yX2JsazsgICAgICAvKiBQb3J0IGFkZHJlc3Mgb2YgUG93ZXIgTWd0IFRpbWVyIEN0cmwgUmVnIEJsayAqLyBcCi0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMV9ncGUwX2JsazsgICAgICAgIC8qIFBvcnQgYWRkciBvZiBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAwIFJlZyBCbGsgKi8gXAotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFfZ3BlMV9ibGs7ICAgICAgICAvKiBQb3J0IGFkZHIgb2YgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMSBSZWcgQmxrICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtMV9ldnRfbGVuOyAgICAgICAgLyogQnl0ZSBsZW5ndGggb2YgcG9ydHMgYXQgcG0xX3hfZXZ0X2JsayAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTFfY250X2xlbjsgICAgICAgIC8qIEJ5dGUgbGVuZ3RoIG9mIHBvcnRzIGF0IHBtMV94X2NudF9ibGsgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0yX2NudF9sZW47ICAgICAgICAvKiBCeXRlIExlbmd0aCBvZiBwb3J0cyBhdCBwbTJfY250X2JsayAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbV90bV9sZW47ICAgICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IHBtX3RtX2JsayAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGUwX2Jsa19sZW47ICAgICAgIC8qIEJ5dGUgTGVuZ3RoIG9mIHBvcnRzIGF0IGdwZTBfYmxrICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwZTFfYmxrX2xlbjsgICAgICAgLyogQnl0ZSBMZW5ndGggb2YgcG9ydHMgYXQgZ3BlMV9ibGsgKi8gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BlMV9iYXNlOyAgICAgICAgICAvKiBPZmZzZXQgaW4gZ3BlIG1vZGVsIHdoZXJlIGdwZTEgZXZlbnRzIHN0YXJ0ICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzdF9jbnQ7ICAgICAgICAgICAgLyogU3VwcG9ydCBmb3IgdGhlIF9DU1Qgb2JqZWN0IGFuZCBDIFN0YXRlcyBjaGFuZ2Ugbm90aWZpY2F0aW9uLiovIFwKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdmwyX2xhdDsgICAgICAgICAgLyogV29yc3QgY2FzZSBIVyBsYXRlbmN5IHRvIGVudGVyL2V4aXQgQzIgc3RhdGUgKi8gXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx2bDNfbGF0OyAgICAgICAgICAvKiBXb3JzdCBjYXNlIEhXIGxhdGVuY3kgdG8gZW50ZXIvZXhpdCBDMyBzdGF0ZSAqLyBcCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9zaXplOyAgICAgICAgIC8qIE51bWJlciBvZiBmbHVzaCBzdHJpZGVzIHRoYXQgbmVlZCB0byBiZSByZWFkICovIFwKLQl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX3N0cmlkZTsgICAgICAgLyogUHJvY2Vzc29yJ3MgbWVtb3J5IGNhY2hlIGxpbmUgd2lkdGgsIGluIGJ5dGVzICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1dHlfb2Zmc2V0OyAgICAgICAgLyogUHJvY2Vzc29yJ3MgZHV0eSBjeWNsZSBpbmRleCBpbiBwcm9jZXNzb3IncyBQX0NOVCByZWcqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXR5X3dpZHRoOyAgICAgICAgIC8qIFByb2Nlc3NvcidzIGR1dHkgY3ljbGUgdmFsdWUgYml0IHdpZHRoIGluIFBfQ05UIHJlZ2lzdGVyLiovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheV9hbHJtOyAgICAgICAgICAgLyogSW5kZXggdG8gZGF5LW9mLW1vbnRoIGFsYXJtIGluIFJUQyBDTU9TIFJBTSAqLyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fYWxybTsgICAgICAgICAgIC8qIEluZGV4IHRvIG1vbnRoLW9mLXllYXIgYWxhcm0gaW4gUlRDIENNT1MgUkFNICovIFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnR1cnk7ICAgICAgICAgICAgLyogSW5kZXggdG8gY2VudHVyeSBpbiBSVEMgQ01PUyBSQU0gKi8gXAotCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFwY19ib290X2FyY2g7ICAgICAvKiBJQS1QQyBCb290IEFyY2hpdGVjdHVyZSBGbGFncy4gU2VlIFRhYmxlIDUtMTAgZm9yIGRlc2NyaXB0aW9uKi8KLQotLyoKLSAqIEFDUEkgMi4wKyBGaXhlZCBBQ1BJIERlc2NyaXB0aW9uIFRhYmxlIChGQURUKQotICovCi1zdHJ1Y3QgZmFkdF9kZXNjcmlwdG9yX3JldjIgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRgkvKiBBQ1BJIGNvbW1vbiB0YWJsZSBoZWFkZXIgKi8KLQlGQURUX1JFVjJfQ09NTU9OIHU4IHJlc2VydmVkMjsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCi0JLyogRmxhZ3MgKDMyIGJpdHMpICovCi0KLQl1OCB3Yl9pbnZkOjE7CQkvKiAwMDogICAgVGhlIHdiaW52ZCBpbnN0cnVjdGlvbiB3b3JrcyBwcm9wZXJseSAqLwotCXU4IHdiX2ludmRfZmx1c2g6MTsJLyogMDE6ICAgIFRoZSB3YmludmQgZmx1c2hlcyBidXQgZG9lcyBub3QgaW52YWxpZGF0ZSAqLwotCXU4IHByb2NfYzE6MTsJCS8qIDAyOiAgICBBbGwgcHJvY2Vzc29ycyBzdXBwb3J0IEMxIHN0YXRlICovCi0JdTggcGx2bDJfdXA6MTsJCS8qIDAzOiAgICBDMiBzdGF0ZSB3b3JrcyBvbiBNUCBzeXN0ZW0gKi8KLQl1OCBwd3JfYnV0dG9uOjE7CS8qIDA0OiAgICBQb3dlciBidXR0b24gaXMgaGFuZGxlZCBhcyBhIGdlbmVyaWMgZmVhdHVyZSAqLwotCXU4IHNsZWVwX2J1dHRvbjoxOwkvKiAwNTogICAgU2xlZXAgYnV0dG9uIGlzIGhhbmRsZWQgYXMgYSBnZW5lcmljIGZlYXR1cmUsIG9yIG5vdCBwcmVzZW50ICovCi0JdTggZml4ZWRfclRDOjE7CQkvKiAwNjogICAgUlRDIHdha2V1cCBzdGF0IG5vdCBpbiBmaXhlZCByZWdpc3RlciBzcGFjZSAqLwotCXU4IHJ0Y3M0OjE7CQkvKiAwNzogICAgUlRDIHdha2V1cCBzdGF0IG5vdCBwb3NzaWJsZSBmcm9tIFM0ICovCi0JdTggdG1yX3ZhbF9leHQ6MTsJLyogMDg6ICAgIHRtcl92YWwgaXMgMzIgYml0cyAwPTI0LWJpdHMgKi8KLQl1OCBkb2NrX2NhcDoxOwkJLyogMDk6ICAgIERvY2tpbmcgc3VwcG9ydGVkICovCi0JdTggcmVzZXRfcmVnX3N1cDoxOwkvKiAxMDogICAgU3lzdGVtIHJlc2V0IHZpYSB0aGUgRkFEVCBSRVNFVF9SRUcgc3VwcG9ydGVkICovCi0JdTggc2VhbGVkX2Nhc2U6MTsJLyogMTE6ICAgIE5vIGludGVybmFsIGV4cGFuc2lvbiBjYXBhYmlsaXRpZXMgYW5kIGNhc2UgaXMgc2VhbGVkICovCi0JdTggaGVhZGxlc3M6MTsJCS8qIDEyOiAgICBObyBsb2NhbCB2aWRlbyBjYXBhYmlsaXRpZXMgb3IgbG9jYWwgaW5wdXQgZGV2aWNlcyAqLwotCXU4IGNwdV9zd19zbGVlcDoxOwkvKiAxMzogICAgTXVzdCBleGVjdXRlIG5hdGl2ZSBpbnN0cnVjdGlvbiBhZnRlciB3cml0aW5nIFNMUF9UWVB4IHJlZ2lzdGVyICovCi0KLQl1OCBwY2lfZXhwX3dhazoxOwkvKiAxNDogICAgU3lzdGVtIHN1cHBvcnRzIFBDSUVYUF9XQUtFIChTVFMvRU4pIGJpdHMgKEFDUEkgMy4wKSAqLwotCXU4IHVzZV9wbGF0Zm9ybV9jbG9jazoxOwkvKiAxNTogICAgT1NQTSBzaG91bGQgdXNlIHBsYXRmb3JtLXByb3ZpZGVkIHRpbWVyIChBQ1BJIDMuMCkgKi8KLQl1OCBTNHJ0Y19zdHNfdmFsaWQ6MTsJLyogMTY6ICAgIENvbnRlbnRzIG9mIFJUQ19TVFMgdmFsaWQgYWZ0ZXIgUzQgd2FrZSAoQUNQSSAzLjApICovCi0JdTggcmVtb3RlX3Bvd2VyX29uX2NhcGFibGU6MTsJLyogMTc6ICAgIFN5c3RlbSBpcyBjb21wYXRpYmxlIHdpdGggcmVtb3RlIHBvd2VyIG9uIChBQ1BJIDMuMCkgKi8KLQl1OCBmb3JjZV9hcGljX2NsdXN0ZXJfbW9kZWw6MTsJLyogMTg6ICAgIEFsbCBsb2NhbCBBUElDcyBtdXN0IHVzZSBjbHVzdGVyIG1vZGVsIChBQ1BJIDMuMCkgKi8KLQl1OCBmb3JjZV9hcGljX3BoeXNpY2FsX2Rlc3RpbmF0aW9uX21vZGU6MTsJLyogMTk6ICAgYWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KLQkgdTg6NDsJCQkvKiAyMC0yMzogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCXU4IHJlc2VydmVkMzsJCS8qIDI0LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0KLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgcmVzZXRfcmVnaXN0ZXI7CS8qIFJlc2V0IHJlZ2lzdGVyIGFkZHJlc3MgaW4gR0FTIGZvcm1hdCAqLwotCXU4IHJlc2V0X3ZhbHVlOwkJLyogVmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlc2V0X3JlZ2lzdGVyIHBvcnQgdG8gcmVzZXQgdGhlIHN5c3RlbSAqLwotCXU4IHJlc2VydmVkNFszXTsJLyogVGhlc2UgdGhyZWUgYnl0ZXMgbXVzdCBiZSB6ZXJvICovCi0JdTY0IHhmaXJtd2FyZV9jdHJsOwkvKiA2NC1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBGQUNTICovCi0JdTY0IFhkc2R0OwkJLyogNjQtYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgRFNEVCAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0xYV9ldnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWEgYWNwaV9ldmVudCBSZWcgQmxrIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMWJfZXZ0X2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IDFiIGFjcGlfZXZlbnQgUmVnIEJsayBhZGRyZXNzICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhwbTFhX2NudF9ibGs7CS8qIEV4dGVuZGVkIFBvd2VyIE1ndCAxYSBDb250cm9sIFJlZyBCbGsgYWRkcmVzcyAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG0xYl9jbnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMWIgQ29udHJvbCBSZWcgQmxrIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeHBtMl9jbnRfYmxrOwkvKiBFeHRlbmRlZCBQb3dlciBNZ3QgMiBDb250cm9sIFJlZyBCbGsgYWRkcmVzcyAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4cG1fdG1yX2JsazsJLyogRXh0ZW5kZWQgUG93ZXIgTWd0IFRpbWVyIEN0cmwgUmVnIEJsayBhZGRyZXNzICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHhncGUwX2JsazsJLyogRXh0ZW5kZWQgR2VuZXJhbCBQdXJwb3NlIGFjcGlfZXZlbnQgMCBSZWcgQmxrIGFkZHJlc3MgKi8KLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeGdwZTFfYmxrOwkvKiBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgYWNwaV9ldmVudCAxIFJlZyBCbGsgYWRkcmVzcyAqLwotfTsKLQotLyogIkRvd24tcmV2dmVkIiBBQ1BJIDIuMCBGQURUIGRlc2NyaXB0b3IgKi8KLQotc3RydWN0IGZhZHRfZGVzY3JpcHRvcl9yZXYyX21pbnVzIHsKLQlBQ1BJX1RBQkxFX0hFQURFUl9ERUYJLyogQUNQSSBjb21tb24gdGFibGUgaGVhZGVyICovCi0JRkFEVF9SRVYyX0NPTU1PTiB1OCByZXNlcnZlZDI7CS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1MzIgZmxhZ3M7Ci0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHJlc2V0X3JlZ2lzdGVyOwkvKiBSZXNldCByZWdpc3RlciBhZGRyZXNzIGluIEdBUyBmb3JtYXQgKi8KLQl1OCByZXNldF92YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZXNldF9yZWdpc3RlciBwb3J0IHRvIHJlc2V0IHRoZSBzeXN0ZW0uICovCi0JdTggcmVzZXJ2ZWQ3WzNdOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi19OwotCi0vKiBFQ0RUIC0gRW1iZWRkZWQgQ29udHJvbGxlciBCb290IFJlc291cmNlcyBUYWJsZSAqLwotCi1zdHJ1Y3QgZWNfYm9vdF9yZXNvdXJjZXMgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRiBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgZWNfY29udHJvbDsJLyogQWRkcmVzcyBvZiBFQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlciAqLwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBlY19kYXRhOwkvKiBBZGRyZXNzIG9mIEVDIGRhdGEgcmVnaXN0ZXIgKi8KLQl1MzIgdWlkOwkJLyogVW5pcXVlIElEIC0gbXVzdCBiZSBzYW1lIGFzIHRoZSBFQyBfVUlEIG1ldGhvZCAqLwotCXU4IGdwZV9iaXQ7CQkvKiBUaGUgR1BFIGZvciB0aGUgRUMgKi8KLQl1OCBlY19pZFsxXTsJCS8qIEZ1bGwgbmFtZXBhdGggb2YgdGhlIEVDIGluIHRoZSBBQ1BJIG5hbWVzcGFjZSAqLwotfTsKLQotLyogU1JBVCAtIFN5c3RlbSBSZXNvdXJjZSBBZmZpbml0eSBUYWJsZSAqLwotCi1zdHJ1Y3Qgc3RhdGljX3Jlc291cmNlX2FsbG9jIHsKLQl1OCB0eXBlOwotCXU4IGxlbmd0aDsKLQl1OCBwcm94aW1pdHlfZG9tYWluX2xvOwotCXU4IGFwaWNfaWQ7Ci0KLQkvKiBGbGFncyAoMzIgYml0cykgKi8KLQotCXU4IGVuYWJsZWQ6MTsJCS8qIDAwOiAgICBVc2UgYWZmaW5pdHkgc3RydWN0dXJlICovCi0JIHU4Ojc7CQkJLyogMDEtMDc6IFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLQl1OCByZXNlcnZlZDNbM107CS8qIDA4LTMxOiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0KLQl1OCBsb2NhbF9zYXBpY19laWQ7Ci0JdTggcHJveGltaXR5X2RvbWFpbl9oaVszXTsKLQl1MzIgcmVzZXJ2ZWQ0OwkJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotfTsKLQotc3RydWN0IG1lbW9yeV9hZmZpbml0eSB7Ci0JdTggdHlwZTsKLQl1OCBsZW5ndGg7Ci0JdTMyIHByb3hpbWl0eV9kb21haW47Ci0JdTE2IHJlc2VydmVkMzsKLQl1NjQgYmFzZV9hZGRyZXNzOwotCXU2NCBhZGRyZXNzX2xlbmd0aDsKLQl1MzIgcmVzZXJ2ZWQ0OwotCi0JLyogRmxhZ3MgKDMyIGJpdHMpICovCi0KLQl1OCBlbmFibGVkOjE7CQkvKiAwMDogICAgVXNlIGFmZmluaXR5IHN0cnVjdHVyZSAqLwotCXU4IGhvdF9wbHVnZ2FibGU6MTsJLyogMDE6ICAgIE1lbW9yeSByZWdpb24gaXMgaG90IHBsdWdnYWJsZSAqLwotCXU4IG5vbl92b2xhdGlsZToxOwkvKiAwMjogICAgTWVtb3J5IGlzIG5vbi12b2xhdGlsZSAqLwotCSB1ODo1OwkJCS8qIDAzLTA3OiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi0JdTggcmVzZXJ2ZWQ1WzNdOwkvKiAwOC0zMTogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwotCi0JdTY0IHJlc2VydmVkNjsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KLX07Ci0KLXN0cnVjdCBzeXN0ZW1fcmVzb3VyY2VfYWZmaW5pdHkgewotCUFDUElfVEFCTEVfSEVBREVSX0RFRiB1MzIgcmVzZXJ2ZWQxOwkvKiBNdXN0IGJlIHZhbHVlICcxJyAqLwotCXU2NCByZXNlcnZlZDI7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCi19OwotCi0vKiBTTElUIC0gU3lzdGVtIExvY2FsaXR5IERpc3RhbmNlIEluZm9ybWF0aW9uIFRhYmxlICovCi0KLXN0cnVjdCBzeXN0ZW1fbG9jYWxpdHlfaW5mbyB7Ci0JQUNQSV9UQUJMRV9IRUFERVJfREVGIHU2NCBsb2NhbGl0eV9jb3VudDsKLQl1OCBlbnRyeVsxXVsxXTsKLX07Ci0KLSNwcmFnbWEgcGFjaygpCisvKiBDb2RlIG1vdmVkIHRvIGJvdGggYWN0YmwuaCBhbmQgYWN0YmwxLmggKi8KIAogI2VuZGlmCQkJCS8qIF9fQUNUQkwyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKaW5kZXggN2NhODljZC4uNzdjZjEyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCkBAIC00NCw2ICs0NCw4IEBACiAjaWZuZGVmIF9fQUNUWVBFU19IX18KICNkZWZpbmUgX19BQ1RZUEVTX0hfXwogCisvKiBhY3Bpc3JjOnN0cnVjdF9kZWZzIC0tIGZvciBhY3Bpc3JjIGNvbnZlcnNpb24gKi8KKwogLyoKICAqIEFDUElfTUFDSElORV9XSURUSCBtdXN0IGJlIHNwZWNpZmllZCBpbiBhbiBPUy0gb3IgY29tcGlsZXItZGVwZW5kZW50IGhlYWRlcgogICogYW5kIG11c3QgYmUgZWl0aGVyIDE2LCAzMiwgb3IgNjQKQEAgLTE1NCw3ICsxNTYsNiBAQAogI2RlZmluZSBBQ1BJX01BWF9QVFIgICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDY0X01BWAogI2RlZmluZSBBQ1BJX1NJWkVfTUFYICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDY0X01BWAogCi0jZGVmaW5lIEFMSUdORURfQUREUkVTU19CT1VOREFSWSAgICAgICAgMHgwMDAwMDAwOAogI2RlZmluZSBBQ1BJX1VTRV9OQVRJVkVfRElWSURFCS8qIEhhcyBuYXRpdmUgNjQtYml0IGludGVnZXIgc3VwcG9ydCAqLwogCiAvKgpAQCAtMTk1LDggKzE5Niw2IEBACiAjZGVmaW5lIEFDUElfTUFYX1BUUiAgICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMzJfTUFYCiAjZGVmaW5lIEFDUElfU0laRV9NQVggICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMzJfTUFYCiAKLSNkZWZpbmUgQUxJR05FRF9BRERSRVNTX0JPVU5EQVJZICAgICAgICAweDAwMDAwMDA0Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVHlwZXMgc3BlY2lmaWMgdG8gMTYtYml0IHRhcmdldHMKQEAgLTIyMyw3ICsyMjIsNiBAQAogI2RlZmluZSBBQ1BJX01BWF9QVFIgICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDE2X01BWAogI2RlZmluZSBBQ1BJX1NJWkVfTUFYICAgICAgICAgICAgICAgICAgIEFDUElfVUlOVDE2X01BWAogCi0jZGVmaW5lIEFMSUdORURfQUREUkVTU19CT1VOREFSWSAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBBQ1BJX1VTRV9OQVRJVkVfRElWSURFCS8qIE5vIDY0LWJpdCBpbnRlZ2Vycywgb2sgdG8gdXNlIG5hdGl2ZSBkaXZpZGUgKi8KIAogLyogNjQtYml0IGludGVnZXJzIGNhbm5vdCBiZSBzdXBwb3J0ZWQgKi8KQEAgLTI1NCw3ICsyNTIsNyBAQAogLyogVXNlIEM5OSB1aW50cHRyX3QgZm9yIHBvaW50ZXIgY2FzdGluZyBpZiBhdmFpbGFibGUsICJ2b2lkICoiIG90aGVyd2lzZSAqLwogCiAjaWZuZGVmIGFjcGlfdWludHB0cl90Ci0jZGVmaW5lIGFjcGlfdWludHB0cl90ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoKKyNkZWZpbmUgYWNwaV91aW50cHRyX3QgICAgICAgICAgICAgICAgICB2b2lkICoKICNlbmRpZgogCiAvKgpAQCAtMjYzLDcgKzI2MSw3IEBACiAgKiBtYW5hZ2VyIGltcGxlbWVudGF0aW9uIGlzIHRvIGJlIHVzZWQgKEFDUElfVVNFX0xPQ0FMX0NBQ0hFKQogICovCiAjaWZuZGVmIGFjcGlfY2FjaGVfdAotI2RlZmluZSBhY3BpX2NhY2hlX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QKKyNkZWZpbmUgYWNwaV9jYWNoZV90ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWNwaV9tZW1vcnlfbGlzdAogI2VuZGlmCiAKIC8qCkBAIC0yNzEsNyArMjY5LDcgQEAKICAqIGxvY2sgYW5kIHVubG9jayBPU0wgaW50ZXJmYWNlcy4KICAqLwogI2lmbmRlZiBhY3BpX2NwdV9mbGFncwotI2RlZmluZSBhY3BpX2NwdV9mbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9uYXRpdmVfdWludAorI2RlZmluZSBhY3BpX2NwdV9mbGFncyAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX3VpbnQKICNlbmRpZgogCiAvKgpAQCAtMjkyLDYgKzI5MCwyMSBAQAogI2RlZmluZSBBQ1BJX1VOVVNFRF9WQVIKICNlbmRpZgogCisvKgorICogQWxsIEFDUElDQSBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYXJlCisgKiB0YWdnZWQgd2l0aCB0aGlzIG1hY3JvIHdoaWNoIGNhbiBiZSBkZWZpbmVkIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgaG9zdC4KKyAqLworI2lmbmRlZiBBQ1BJX0VYUE9SVF9TWU1CT0wKKyNkZWZpbmUgQUNQSV9FWFBPUlRfU1lNQk9MKHN5bWJvbCkKKyNlbmRpZgorCisvKgorICogdGhyZWFkX2lkIGlzIHJldHVybmVkIGJ5IGFjcGlfb3NfZ2V0X3RocmVhZF9pZC4KKyAqLworI2lmbmRlZiBhY3BpX3RocmVhZF9pZAorI2RlZmluZSBhY3BpX3RocmVhZF9pZCAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX3VpbnQKKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEluZGVwZW5kZW50IHR5cGVzCkBAIC00NzcsMTUgKzQ5MCwxNSBAQAogICovCiB0eXBlZGVmIHUzMiBhY3BpX3RhYmxlX3R5cGU7CiAKLSNkZWZpbmUgQUNQSV9UQUJMRV9SU0RQICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAwCi0jZGVmaW5lIEFDUElfVEFCTEVfRFNEVCAgICAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgMQotI2RlZmluZSBBQ1BJX1RBQkxFX0ZBRFQgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDIKLSNkZWZpbmUgQUNQSV9UQUJMRV9GQUNTICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAzCi0jZGVmaW5lIEFDUElfVEFCTEVfUFNEVCAgICAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgNAotI2RlZmluZSBBQ1BJX1RBQkxFX1NTRFQgICAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDUKLSNkZWZpbmUgQUNQSV9UQUJMRV9YU0RUICAgICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSA2Ci0jZGVmaW5lIEFDUElfVEFCTEVfTUFYICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBOVU1fQUNQSV9UQUJMRV9UWVBFUyAgICAgICAgICAgIChBQ1BJX1RBQkxFX01BWCsxKQorI2RlZmluZSBBQ1BJX1RBQkxFX0lEX1JTRFAgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDAKKyNkZWZpbmUgQUNQSV9UQUJMRV9JRF9EU0RUICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSAxCisjZGVmaW5lIEFDUElfVEFCTEVfSURfRkFEVCAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgMgorI2RlZmluZSBBQ1BJX1RBQkxFX0lEX0ZBQ1MgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDMKKyNkZWZpbmUgQUNQSV9UQUJMRV9JRF9QU0RUICAgICAgICAgICAgICAoYWNwaV90YWJsZV90eXBlKSA0CisjZGVmaW5lIEFDUElfVEFCTEVfSURfU1NEVCAgICAgICAgICAgICAgKGFjcGlfdGFibGVfdHlwZSkgNQorI2RlZmluZSBBQ1BJX1RBQkxFX0lEX1hTRFQgICAgICAgICAgICAgIChhY3BpX3RhYmxlX3R5cGUpIDYKKyNkZWZpbmUgQUNQSV9UQUJMRV9JRF9NQVggICAgICAgICAgICAgICA2CisjZGVmaW5lIEFDUElfTlVNX1RBQkxFX1RZUEVTICAgICAgICAgICAgKEFDUElfVEFCTEVfSURfTUFYKzEpCiAKIC8qCiAgKiBUeXBlcyBhc3NvY2lhdGVkIHdpdGggQUNQSSBuYW1lcyBhbmQgb2JqZWN0cy4gIFRoZSBmaXJzdCBncm91cCBvZgpAQCAtODE2LDcgKzgyOSw3IEBACiAJdTMyIGRlYnVnX2xldmVsOwogCXUzMiBkZWJ1Z19sYXllcjsKIAl1MzIgbnVtX3RhYmxlX3R5cGVzOwotCXN0cnVjdCBhY3BpX3RhYmxlX2luZm8gdGFibGVfaW5mb1tOVU1fQUNQSV9UQUJMRV9UWVBFU107CisJc3RydWN0IGFjcGlfdGFibGVfaW5mbyB0YWJsZV9pbmZvW0FDUElfVEFCTEVfSURfTUFYICsgMV07CiB9OwogCiAvKgpAQCAtODU4LDcgKzg3MSw3IEBACiAJCQkJICAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LAogCQkJCSAgICAgIHZvaWQgKnJlZ2lvbl9jb250ZXh0KTsKIAotI2RlZmluZSBBQ1BJX0RFRkFVTFRfSEFORExFUiAgICAgICAgTlVMTAorI2RlZmluZSBBQ1BJX0RFRkFVTFRfSEFORExFUiAgICAgICAgICAgIE5VTEwKIAogdHlwZWRlZgogYWNwaV9zdGF0dXMoKmFjcGlfYWRyX3NwYWNlX3NldHVwKSAoYWNwaV9oYW5kbGUgcmVnaW9uX2hhbmRsZSwKQEAgLTkxMSwxMiArOTI0LDEzIEBACiAjZGVmaW5lIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UICAgICAgICAgMHgwMQogI2RlZmluZSBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCAgICAgICAgIDB4MDIKICNkZWZpbmUgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFDUElfU1RBX0RFVklDRV9PSyAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9TVEFfREVWSUNFX09LICAgICAgICAgICAgICAweDA4CS8qIFN5bm9ueW0gKi8KICNkZWZpbmUgQUNQSV9TVEFfQkFUVEVSWV9QUkVTRU5UICAgICAgICAweDEwCiAKICNkZWZpbmUgQUNQSV9DT01NT05fT0JKX0lORk8gXAotCWFjcGlfb2JqZWN0X3R5cGUgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAvKiBBQ1BJIG9iamVjdCB0eXBlICovIFwKLQlhY3BpX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCS8qIEFDUEkgb2JqZWN0IE5hbWUgKi8KKwlhY3BpX29iamVjdF90eXBlICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAvKiBBQ1BJIG9iamVjdCB0eXBlICovIFwKKwlhY3BpX25hbWUgICAgICAgICAgICAgICAgICAgICAgIG5hbWUJLyogQUNQSSBvYmplY3QgTmFtZSAqLwogCiBzdHJ1Y3QgYWNwaV9vYmpfaW5mb19oZWFkZXIgewogCUFDUElfQ09NTU9OX09CSl9JTkZPOwpAQCAtOTU3LDcgKzk3MSw3IEBACiAgKiBEZWZpbml0aW9ucyBmb3IgUmVzb3VyY2UgQXR0cmlidXRlcwogICovCiB0eXBlZGVmIHUxNiBhY3BpX3JzX2xlbmd0aDsJLyogUmVzb3VyY2UgTGVuZ3RoIGZpZWxkIGlzIGZpeGVkIGF0IDE2IGJpdHMgKi8KLXR5cGVkZWYgdTMyIGFjcGlfcnNkZXNjX3NpemU7CS8qIE1heCBSZXNvdXJjZSBEZXNjcmlwdG9yIHNpemUgaXMgKGxlbmd0aCszKSA9ICg2NF9rLTEpKzMgKi8KK3R5cGVkZWYgdTMyIGFjcGlfcnNkZXNjX3NpemU7CS8qIE1heCBSZXNvdXJjZSBEZXNjcmlwdG9yIHNpemUgaXMgKExlbmd0aCszKSA9ICg2NF9rLTEpKzMgKi8KIAogLyoKICAqICBNZW1vcnkgQXR0cmlidXRlcwpAQCAtOTcyLDggKzk4Niw4IEBACiAKIC8qCiAgKiAgSU8gQXR0cmlidXRlcwotICogIFRoZSBJU0EgSW8gcmFuZ2VzIGFyZTogICAgIG4wMDAtbjBfZmZoLCBuNDAwLW40X2ZmaCwgbjgwMC1uOF9mZmgsIG5fYzAwLW5fY0ZGaC4KLSAqICBUaGUgbm9uLUlTQSBJbyByYW5nZXMgYXJlOiBuMTAwLW4zX2ZmaCwgbjUwMC1uN19mZmgsIG45MDAtbl9iRmZoLCBuX2NkMC1uX2ZGRmguCisgKiAgVGhlIElTQSBJTyByYW5nZXMgYXJlOiAgICAgbjAwMC1uMF9mRmgsIG40MDAtbjRfZkZoLCBuODAwLW44X2ZGaCwgbl9jMDAtbl9jRkZoLgorICogIFRoZSBub24tSVNBIElPIHJhbmdlcyBhcmU6IG4xMDAtbjNfZkZoLCBuNTAwLW43X2ZGaCwgbjkwMC1uX2JGRmgsIG5fY2QwLW5fZkZGaC4KICAqLwogI2RlZmluZSBBQ1BJX05PTl9JU0FfT05MWV9SQU5HRVMgICAgICAgICh1OCkgMHgwMQogI2RlZmluZSBBQ1BJX0lTQV9PTkxZX1JBTkdFUyAgICAgICAgICAgICh1OCkgMHgwMgpAQCAtMTE3MSwxMiArMTE4NSwxMiBAQAogLyogRmllbGRzIGNvbW1vbiB0byBhbGwgYWRkcmVzcyBkZXNjcmlwdG9ycywgMTYvMzIvNjQgYml0ICovCiAKICNkZWZpbmUgQUNQSV9SRVNPVVJDRV9BRERSRVNTX0NPTU1PTiBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfdHlwZTsgXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyX2NvbnN1bWVyOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2FkZHJlc3NfZml4ZWQ7IFwKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzc19maXhlZDsgXAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfYXR0cmlidXRlICAgICAgIGluZm87CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlcl9jb25zdW1lcjsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYWRkcmVzc19maXhlZDsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2FkZHJlc3NfZml4ZWQ7IFwKKwl1bmlvbiBhY3BpX3Jlc291cmNlX2F0dHJpYnV0ZSAgIGluZm87CiAKIHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MgewogQUNQSV9SRVNPVVJDRV9BRERSRVNTX0NPTU1PTn07CkBAIC0xMjk3LDE2ICsxMzExLDYgQEAKIAogI2RlZmluZSBBQ1BJX05FWFRfUkVTT1VSQ0UocmVzKSAgICAgICAgICAgICAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKikoKHU4ICopIHJlcyArIHJlcy0+bGVuZ3RoKQogCi0jaWZuZGVmIEFDUElfTUlTQUxJR05NRU5UX05PVF9TVVBQT1JURUQKLSNkZWZpbmUgQUNQSV9BTElHTl9SRVNPVVJDRV9TSVpFKGxlbmd0aCkgICAgKGxlbmd0aCkKLSNlbHNlCi0jZGVmaW5lIEFDUElfQUxJR05fUkVTT1VSQ0VfU0laRShsZW5ndGgpICAgIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQobGVuZ3RoKQotI2VuZGlmCi0KLS8qCi0gKiBFTkQ6IG9mIGRlZmluaXRpb25zIGZvciBSZXNvdXJjZSBBdHRyaWJ1dGVzCi0gKi8KLQogc3RydWN0IGFjcGlfcGNpX3JvdXRpbmdfdGFibGUgewogCXUzMiBsZW5ndGg7CiAJdTMyIHBpbjsKQEAgLTEzMTUsOCArMTMxOSw0IEBACiAJY2hhciBzb3VyY2VbNF07CQkvKiBwYWQgdG8gNjQgYml0cyBzbyBzaXplb2YoKSB3b3JrcyBpbiBhbGwgY2FzZXMgKi8KIH07CiAKLS8qCi0gKiBFTkQ6IG9mIGRlZmluaXRpb25zIGZvciBQQ0kgUm91dGluZyB0YWJsZXMKLSAqLwotCiAjZW5kaWYJCQkJLyogX19BQ1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaCBiL2luY2x1ZGUvYWNwaS9hY3V0aWxzLmgKaW5kZXggMDkyNzc2NS4uYmEwMzllYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN1dGlscy5oCkBAIC01MCwyNCArNTAsMjQgQEAKIAogI2lmIGRlZmluZWQoQUNQSV9ESVNBU1NFTUJMRVIpIHx8IGRlZmluZWQgKEFDUElfREVCVUdHRVIpCiAKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9CTWRlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9jb25maWdfZGVjb2RlWzRdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2NvbnN1bWVfZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX0RFQ2RlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9IRWRlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9pb19kZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfTExkZWNvZGVbMl07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbWF4X2RlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9NRU1kZWNvZGVbNF07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbWluX2RlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9NVFBkZWNvZGVbNF07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfUk5HZGVjb2RlWzRdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX1JXZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX1NIUmRlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9TSVpkZWNvZGVbNF07Ci1leHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfVFJTZGVjb2RlWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX1RUUGRlY29kZVsyXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9UWVBkZWNvZGVbNF07CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfYm1fZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfY29uZmlnX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2NvbnN1bWVfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfZGVjX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2hlX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2lvX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX2xsX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX21heF9kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9tZW1fZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfbWluX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX210cF9kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9ybmdfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfcndfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfc2hyX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3Npel9kZWNvZGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF90cnNfZGVjb2RlW107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfdHRwX2RlY29kZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3R5cF9kZWNvZGVbXTsKICNlbmRpZgogCiAvKiBUeXBlcyBmb3IgUmVzb3VyY2UgZGVzY3JpcHRvciBlbnRyaWVzICovCkBAIC03OCw2ICs3OCwxMiBAQAogI2RlZmluZSBBQ1BJX1NNQUxMX1ZBUklBQkxFX0xFTkdUSCAgICAgIDMKIAogdHlwZWRlZgorYWNwaV9zdGF0dXMoKmFjcGlfd2Fsa19hbWxfY2FsbGJhY2spICh1OCAqIGFtbCwKKwkJCQkgICAgICB1MzIgbGVuZ3RoLAorCQkJCSAgICAgIHUzMiBvZmZzZXQsCisJCQkJICAgICAgdTggcmVzb3VyY2VfaW5kZXgsIHZvaWQgKipjb250ZXh0KTsKKwordHlwZWRlZgogYWNwaV9zdGF0dXMoKmFjcGlfcGtnX2NhbGxiYWNrKSAodTggb2JqZWN0X3R5cGUsCiAJCQkJIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiBzb3VyY2Vfb2JqZWN0LAogCQkJCSB1bmlvbiBhY3BpX2dlbmVyaWNfc3RhdGUgKiBzdGF0ZSwKQEAgLTI3Nyw2ICsyODMsOCBAQAogCiB2b2lkIGFjcGlfdXRfZHVtcF9idWZmZXIodTggKiBidWZmZXIsIHUzMiBjb3VudCwgdTMyIGRpc3BsYXksIHUzMiBjb21wb25lbnRfaWQpOwogCit2b2lkIGFjcGlfdXRfZHVtcF9idWZmZXIyKHU4ICogYnVmZmVyLCB1MzIgY291bnQsIHUzMiBkaXNwbGF5KTsKKwogdm9pZCBhY3BpX3V0X3JlcG9ydF9lcnJvcihjaGFyICptb2R1bGVfbmFtZSwgdTMyIGxpbmVfbnVtYmVyKTsKIAogdm9pZCBhY3BpX3V0X3JlcG9ydF9pbmZvKGNoYXIgKm1vZHVsZV9uYW1lLCB1MzIgbGluZV9udW1iZXIpOwpAQCAtNDQ1LDYgKzQ1Myw4IEBACiAvKgogICogdXRtaXNjCiAgKi8KK3U4IGFjcGlfdXRfaXNfYW1sX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCiBhY3BpX3N0YXR1cyBhY3BpX3V0X2FsbG9jYXRlX293bmVyX2lkKGFjcGlfb3duZXJfaWQgKiBvd25lcl9pZCk7CiAKIHZvaWQgYWNwaV91dF9yZWxlYXNlX293bmVyX2lkKGFjcGlfb3duZXJfaWQgKiBvd25lcl9pZCk7CkBAIC00NjAsNyArNDcwLDkgQEAKIAogdTggYWNwaV91dF92YWxpZF9hY3BpX25hbWUodTMyIG5hbWUpOwogCi11OCBhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcmFjdGVyKGNoYXIgY2hhcmFjdGVyKTsKK2FjcGlfbmFtZSBhY3BpX3V0X3JlcGFpcl9uYW1lKGFjcGlfbmFtZSBuYW1lKTsKKwordTggYWNwaV91dF92YWxpZF9hY3BpX2NoYXIoY2hhciBjaGFyYWN0ZXIsIGFjcGlfbmF0aXZlX3VpbnQgcG9zaXRpb24pOwogCiBhY3BpX3N0YXR1cwogYWNwaV91dF9zdHJ0b3VsNjQoY2hhciAqc3RyaW5nLCB1MzIgYmFzZSwgYWNwaV9pbnRlZ2VyICogcmV0X2ludGVnZXIpOwpAQCAtNDY5LDYgKzQ4MSwyNSBAQAogCiAjZGVmaW5lIEFDUElfQU5ZX0JBU0UgICAgICAgIDAKIAordTMyIGFjcGlfdXRfZHdvcmRfYnl0ZV9zd2FwKHUzMiB2YWx1ZSk7CisKK3ZvaWQgYWNwaV91dF9zZXRfaW50ZWdlcl93aWR0aCh1OCByZXZpc2lvbik7CisKKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAordm9pZAorYWNwaV91dF9kaXNwbGF5X2luaXRfcGF0aG5hbWUodTggdHlwZSwKKwkJCSAgICAgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpvYmpfaGFuZGxlLAorCQkJICAgICAgY2hhciAqcGF0aCk7CisjZW5kaWYKKworLyoKKyAqIHV0cmVzcmMKKyAqLworYWNwaV9zdGF0dXMKK2FjcGlfdXRfd2Fsa19hbWxfcmVzb3VyY2VzKHU4ICogYW1sLAorCQkJICAgYWNwaV9zaXplIGFtbF9sZW5ndGgsCisJCQkgICBhY3BpX3dhbGtfYW1sX2NhbGxiYWNrIHVzZXJfZnVuY3Rpb24sIHZvaWQgKipjb250ZXh0KTsKKwogYWNwaV9zdGF0dXMgYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZSh2b2lkICphbWwsIHU4ICogcmV0dXJuX2luZGV4KTsKIAogdTMyIGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbGVuZ3RoKHZvaWQgKmFtbCk7CkBAIC00ODMsMjAgKzUxNCw2IEBACiBhY3BpX3V0X2dldF9yZXNvdXJjZV9lbmRfdGFnKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAogCQkJICAgICB1OCAqKiBlbmRfdGFnKTsKIAotdTggYWNwaV91dF9nZW5lcmF0ZV9jaGVja3N1bSh1OCAqIGJ1ZmZlciwgdTMyIGxlbmd0aCk7Ci0KLXUzMiBhY3BpX3V0X2R3b3JkX2J5dGVfc3dhcCh1MzIgdmFsdWUpOwotCi12b2lkIGFjcGlfdXRfc2V0X2ludGVnZXJfd2lkdGgodTggcmV2aXNpb24pOwotCi0jaWZkZWYgQUNQSV9ERUJVR19PVVRQVVQKLXZvaWQKLWFjcGlfdXRfZGlzcGxheV9pbml0X3BhdGhuYW1lKHU4IHR5cGUsCi0JCQkgICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqb2JqX2hhbmRsZSwKLQkJCSAgICAgIGNoYXIgKnBhdGgpOwotCi0jZW5kaWYKLQogLyoKICAqIHV0bXV0ZXggLSBtdXRleCBzdXBwb3J0CiAgKi8KQEAgLTUyMywxNCArNTQwLDE1IEBACiAKIHZvaWQgKmFjcGlfdXRfYWxsb2NhdGUoYWNwaV9zaXplIHNpemUsIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpOwogCi12b2lkICphY3BpX3V0X2NhbGxvY2F0ZShhY3BpX3NpemUgc2l6ZSwgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7Cit2b2lkICphY3BpX3V0X2FsbG9jYXRlX3plcm9lZChhY3BpX3NpemUgc2l6ZSwKKwkJCSAgICAgIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpOwogCiAjaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKIHZvaWQgKmFjcGlfdXRfYWxsb2NhdGVfYW5kX3RyYWNrKGFjcGlfc2l6ZSBzaXplLAogCQkJCSB1MzIgY29tcG9uZW50LCBjaGFyICptb2R1bGUsIHUzMiBsaW5lKTsKIAotdm9pZCAqYWNwaV91dF9jYWxsb2NhdGVfYW5kX3RyYWNrKGFjcGlfc2l6ZSBzaXplLAotCQkJCSAgdTMyIGNvbXBvbmVudCwgY2hhciAqbW9kdWxlLCB1MzIgbGluZSk7Cit2b2lkICphY3BpX3V0X2FsbG9jYXRlX3plcm9lZF9hbmRfdHJhY2soYWNwaV9zaXplIHNpemUsCisJCQkJCXUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpOwogCiB2b2lkCiBhY3BpX3V0X2ZyZWVfYW5kX3RyYWNrKHZvaWQgKmFkZHJlc3MsIHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSwgdTMyIGxpbmUpOwpAQCAtNTQwLDYgKzU1OCwxMSBAQAogI2VuZGlmCQkJCS8qIEFDUElfRlVUVVJFX1VTQUdFICovCiAKIHZvaWQgYWNwaV91dF9kdW1wX2FsbG9jYXRpb25zKHUzMiBjb21wb25lbnQsIGNoYXIgKm1vZHVsZSk7CisKK2FjcGlfc3RhdHVzCithY3BpX3V0X2NyZWF0ZV9saXN0KGNoYXIgKmxpc3RfbmFtZSwKKwkJICAgIHUxNiBvYmplY3Rfc2l6ZSwgc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QgKipyZXR1cm5fY2FjaGUpOworCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9BQ1VUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hbWxjb2RlLmggYi9pbmNsdWRlL2FjcGkvYW1sY29kZS5oCmluZGV4IDM3OTY0YTUuLmNmMTg0MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hbWxjb2RlLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FtbGNvZGUuaApAQCAtMTgwLDggKzE4MCwxMCBAQAogI2RlZmluZSBBTUxfQkFOS19GSUVMRF9PUCAgICAgICAgICAgKHUxNikgMHg1Yjg3CiAjZGVmaW5lIEFNTF9EQVRBX1JFR0lPTl9PUCAgICAgICAgICAodTE2KSAweDViODgJLyogQUNQSSAyLjAgKi8KIAotLyogQm9ndXMgb3Bjb2RlcyAodGhleSBhcmUgYWN0dWFsbHkgdHdvIHNlcGFyYXRlIG9wY29kZXMpICovCi0KKy8qCisgKiBDb21iaW5hdGlvbiBvcGNvZGVzIChhY3R1YWxseSB0d28gb25lLWJ5dGUgb3Bjb2RlcykKKyAqIFVzZWQgYnkgdGhlIGRpc2Fzc2VtYmxlciBhbmQgaV9hU0wgY29tcGlsZXIKKyAqLwogI2RlZmluZSBBTUxfTEdSRUFURVJFUVVBTF9PUCAgICAgICAgKHUxNikgMHg5Mjk1CiAjZGVmaW5lIEFNTF9MTEVTU0VRVUFMX09QICAgICAgICAgICAodTE2KSAweDkyOTQKICNkZWZpbmUgQU1MX0xOT1RFUVVBTF9PUCAgICAgICAgICAgICh1MTYpIDB4OTI5MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FtbHJlc3JjLmggYi9pbmNsdWRlL2FjcGkvYW1scmVzcmMuaAppbmRleCBmYjQ3MzUzLi5iZTAzODE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYW1scmVzcmMuaAorKysgYi9pbmNsdWRlL2FjcGkvYW1scmVzcmMuaApAQCAtNDIsMzkgKzQyLDQ1IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAgKi8KIAorLyogYWNwaXNyYzpzdHJ1Y3RfZGVmcyAtLSBmb3IgYWNwaXNyYyBjb252ZXJzaW9uICovCisKICNpZm5kZWYgX19BTUxSRVNSQ19ICiAjZGVmaW5lIF9fQU1MUkVTUkNfSAogCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAiX0FEUiIKLSNkZWZpbmUgQVNMX1JFU05BTUVfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICJfQUxOIgotI2RlZmluZSBBU0xfUkVTTkFNRV9BRERSRVNTU1BBQ0UgICAgICAgICAgICAgICAgIl9BU0kiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0FDQ0VTU1NJWkUgICAgICAgICAgICAgICAgICAiX0FTWiIKLSNkZWZpbmUgQVNMX1JFU05BTUVfVFlQRVNQRUNJRklDQVRUUklCVVRFUyAgICAgICJfQVRUIgotI2RlZmluZSBBU0xfUkVTTkFNRV9CQVNFQUREUkVTUyAgICAgICAgICAgICAgICAgIl9CQVMiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0JVU01BU1RFUiAgICAgICAgICAgICAgICAgICAiX0JNXyIJLyogTWFzdGVyKDEpLCBTbGF2ZSgwKSAqLwotI2RlZmluZSBBU0xfUkVTTkFNRV9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgIl9ERUMiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAiX0RNQSIKLSNkZWZpbmUgQVNMX1JFU05BTUVfRE1BVFlQRSAgICAgICAgICAgICAgICAgICAgICJfVFlQIgkvKiBDb21wYXRpYmxlKDApLCBBKDEpLCBCKDIpLCBGKDMpICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0dSQU5VTEFSSVRZICAgICAgICAgICAgICAgICAiX0dSQSIKLSNkZWZpbmUgQVNMX1JFU05BTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICJfSU5UIgotI2RlZmluZSBBU0xfUkVTTkFNRV9JTlRFUlJVUFRMRVZFTCAgICAgICAgICAgICAgIl9MTF8iCS8qIGFjdGl2ZV9sbygxKSwgYWN0aXZlX2hpKDApICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0lOVEVSUlVQVFNIQVJFICAgICAgICAgICAgICAiX1NIUiIJLyogU2hhcmVhYmxlKDEpLCBub19zaGFyZSgwKSAqLwotI2RlZmluZSBBU0xfUkVTTkFNRV9JTlRFUlJVUFRUWVBFICAgICAgICAgICAgICAgIl9IRV8iCS8qIEVkZ2UoMSksIExldmVsKDApICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAiX0xFTiIKLSNkZWZpbmUgQVNMX1JFU05BTUVfTUVNQVRUUklCVVRFUyAgICAgICAgICAgICAgICJfTVRQIgkvKiBNZW1vcnkoMCksIFJlc2VydmVkKDEpLCBBQ1BJKDIpLCBOVlMoMykgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfTUVNVFlQRSAgICAgICAgICAgICAgICAgICAgICJfTUVNIgkvKiBub25fY2FjaGUoMCksIENhY2hlYWJsZSgxKSBDYWNoZStjb21iaW5lKDIpLCBDYWNoZStwcmVmZXRjaCgzKSAqLwotI2RlZmluZSBBU0xfUkVTTkFNRV9NQVhBRERSICAgICAgICAgICAgICAgICAgICAgIl9NQVgiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX01JTkFERFIgICAgICAgICAgICAgICAgICAgICAiX01JTiIKLSNkZWZpbmUgQVNMX1JFU05BTUVfTUFYVFlQRSAgICAgICAgICAgICAgICAgICAgICJfTUFGIgotI2RlZmluZSBBU0xfUkVTTkFNRV9NSU5UWVBFICAgICAgICAgICAgICAgICAgICAgIl9NSUYiCi0jZGVmaW5lIEFTTF9SRVNOQU1FX1JFR0lTVEVSQklUT0ZGU0VUICAgICAgICAgICAiX1JCTyIKLSNkZWZpbmUgQVNMX1JFU05BTUVfUkVHSVNURVJCSVRXSURUSCAgICAgICAgICAgICJfUkJXIgotI2RlZmluZSBBU0xfUkVTTkFNRV9SQU5HRVRZUEUgICAgICAgICAgICAgICAgICAgIl9STkciCi0jZGVmaW5lIEFTTF9SRVNOQU1FX1JFQURXUklURVRZUEUgICAgICAgICAgICAgICAiX1JXXyIJLyogcmVhZF9vbmx5KDApLCBXcml0ZWFibGUgKDEpICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX1RSQU5TTEFUSU9OICAgICAgICAgICAgICAgICAiX1RSQSIKLSNkZWZpbmUgQVNMX1JFU05BTUVfVFJBTlNUWVBFICAgICAgICAgICAgICAgICAgICJfVFJTIgkvKiBTcGFyc2UoMSksIERlbnNlKDApICovCi0jZGVmaW5lIEFTTF9SRVNOQU1FX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAiX1RUUCIJLyogVHJhbnNsYXRpb24oMSksIFN0YXRpYyAoMCkgKi8KLSNkZWZpbmUgQVNMX1JFU05BTUVfWEZFUlRZUEUgICAgICAgICAgICAgICAgICAgICJfU0l6IgkvKiA4KDApLCA4X2FuZDE2KDEpLCAxNigyKSAqLworLyoKKyAqIFJlc291cmNlIGRlc2NyaXB0b3IgdGFncywgYXMgZGVmaW5lZCBpbiB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uLgorICogVXNlZCB0byBzeW1ib2xpY2FsbHkgcmVmZXJlbmNlIGZpZWxkcyB3aXRoaW4gYSBkZXNjcmlwdG9yLgorICovCisjZGVmaW5lIEFDUElfUkVTVEFHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAiX0FEUiIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICJfQUxOIgorI2RlZmluZSBBQ1BJX1JFU1RBR19BRERSRVNTU1BBQ0UgICAgICAgICAgICAgICAgIl9BU0kiCisjZGVmaW5lIEFDUElfUkVTVEFHX0FDQ0VTU1NJWkUgICAgICAgICAgICAgICAgICAiX0FTWiIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfVFlQRVNQRUNJRklDQVRUUklCVVRFUyAgICAgICJfQVRUIgorI2RlZmluZSBBQ1BJX1JFU1RBR19CQVNFQUREUkVTUyAgICAgICAgICAgICAgICAgIl9CQVMiCisjZGVmaW5lIEFDUElfUkVTVEFHX0JVU01BU1RFUiAgICAgICAgICAgICAgICAgICAiX0JNXyIJLyogTWFzdGVyKDEpLCBTbGF2ZSgwKSAqLworI2RlZmluZSBBQ1BJX1JFU1RBR19ERUNPREUgICAgICAgICAgICAgICAgICAgICAgIl9ERUMiCisjZGVmaW5lIEFDUElfUkVTVEFHX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAiX0RNQSIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfRE1BVFlQRSAgICAgICAgICAgICAgICAgICAgICJfVFlQIgkvKiBDb21wYXRpYmxlKDApLCBBKDEpLCBCKDIpLCBGKDMpICovCisjZGVmaW5lIEFDUElfUkVTVEFHX0dSQU5VTEFSSVRZICAgICAgICAgICAgICAgICAiX0dSQSIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICJfSU5UIgorI2RlZmluZSBBQ1BJX1JFU1RBR19JTlRFUlJVUFRMRVZFTCAgICAgICAgICAgICAgIl9MTF8iCS8qIGFjdGl2ZV9sbygxKSwgYWN0aXZlX2hpKDApICovCisjZGVmaW5lIEFDUElfUkVTVEFHX0lOVEVSUlVQVFNIQVJFICAgICAgICAgICAgICAiX1NIUiIJLyogU2hhcmVhYmxlKDEpLCBub19zaGFyZSgwKSAqLworI2RlZmluZSBBQ1BJX1JFU1RBR19JTlRFUlJVUFRUWVBFICAgICAgICAgICAgICAgIl9IRV8iCS8qIEVkZ2UoMSksIExldmVsKDApICovCisjZGVmaW5lIEFDUElfUkVTVEFHX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAiX0xFTiIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfTUVNQVRUUklCVVRFUyAgICAgICAgICAgICAgICJfTVRQIgkvKiBNZW1vcnkoMCksIFJlc2VydmVkKDEpLCBBQ1BJKDIpLCBOVlMoMykgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfTUVNVFlQRSAgICAgICAgICAgICAgICAgICAgICJfTUVNIgkvKiBub25fY2FjaGUoMCksIENhY2hlYWJsZSgxKSBDYWNoZStjb21iaW5lKDIpLCBDYWNoZStwcmVmZXRjaCgzKSAqLworI2RlZmluZSBBQ1BJX1JFU1RBR19NQVhBRERSICAgICAgICAgICAgICAgICAgICAgIl9NQVgiCisjZGVmaW5lIEFDUElfUkVTVEFHX01JTkFERFIgICAgICAgICAgICAgICAgICAgICAiX01JTiIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfTUFYVFlQRSAgICAgICAgICAgICAgICAgICAgICJfTUFGIgorI2RlZmluZSBBQ1BJX1JFU1RBR19NSU5UWVBFICAgICAgICAgICAgICAgICAgICAgIl9NSUYiCisjZGVmaW5lIEFDUElfUkVTVEFHX1JFR0lTVEVSQklUT0ZGU0VUICAgICAgICAgICAiX1JCTyIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfUkVHSVNURVJCSVRXSURUSCAgICAgICAgICAgICJfUkJXIgorI2RlZmluZSBBQ1BJX1JFU1RBR19SQU5HRVRZUEUgICAgICAgICAgICAgICAgICAgIl9STkciCisjZGVmaW5lIEFDUElfUkVTVEFHX1JFQURXUklURVRZUEUgICAgICAgICAgICAgICAiX1JXXyIJLyogcmVhZF9vbmx5KDApLCBXcml0ZWFibGUgKDEpICovCisjZGVmaW5lIEFDUElfUkVTVEFHX1RSQU5TTEFUSU9OICAgICAgICAgICAgICAgICAiX1RSQSIKKyNkZWZpbmUgQUNQSV9SRVNUQUdfVFJBTlNUWVBFICAgICAgICAgICAgICAgICAgICJfVFJTIgkvKiBTcGFyc2UoMSksIERlbnNlKDApICovCisjZGVmaW5lIEFDUElfUkVTVEFHX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAiX1RUUCIJLyogVHJhbnNsYXRpb24oMSksIFN0YXRpYyAoMCkgKi8KKyNkZWZpbmUgQUNQSV9SRVNUQUdfWEZFUlRZUEUgICAgICAgICAgICAgICAgICAgICJfU0laIgkvKiA4KDApLCA4X2FuZDE2KDEpLCAxNigyKSAqLwogCiAvKiBEZWZhdWx0IHNpemVzIGZvciAic21hbGwiIHJlc291cmNlIGRlc2NyaXB0b3JzICovCiAKQEAgLTEwOSw3ICsxMTUsNyBAQAogICogU01BTEwgZGVzY3JpcHRvcnMKICAqLwogI2RlZmluZSBBTUxfUkVTT1VSQ0VfU01BTExfSEVBREVSX0NPTU1PTiBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlOwogCiBzdHJ1Y3QgYW1sX3Jlc291cmNlX3NtYWxsX2hlYWRlciB7CiBBTUxfUkVTT1VSQ0VfU01BTExfSEVBREVSX0NPTU1PTn07CkBAIC0xNjIsOCArMTY4LDggQEAKICAqIExBUkdFIGRlc2NyaXB0b3JzCiAgKi8KICNkZWZpbmUgQU1MX1JFU09VUkNFX0xBUkdFX0hFQURFUl9DT01NT04gXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfdHlwZTtcCi0JdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfbGVuZ3RoOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl90eXBlO1wKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX2xlbmd0aDsKIAogc3RydWN0IGFtbF9yZXNvdXJjZV9sYXJnZV9oZWFkZXIgewogQU1MX1JFU09VUkNFX0xBUkdFX0hFQURFUl9DT01NT059OwpAQCAtMTk0LDkgKzIwMCw5IEBACiB9OwogCiAjZGVmaW5lIEFNTF9SRVNPVVJDRV9BRERSRVNTX0NPTU1PTiBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfdHlwZTsgXAotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOyBcCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNfZmxhZ3M7CisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV90eXBlOyBcCisJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsgXAorCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNfZmxhZ3M7CiAKIHN0cnVjdCBhbWxfcmVzb3VyY2VfYWRkcmVzcyB7CiBBTUxfUkVTT1VSQ0VfTEFSR0VfSEVBREVSX0NPTU1PTiBBTUxfUkVTT1VSQ0VfQUREUkVTU19DT01NT059OwpAQCAtMjY2LDYgKzI3Miw3IEBACiB1bmlvbiBhbWxfcmVzb3VyY2UgewogCS8qIERlc2NyaXB0b3IgaGVhZGVycyAqLwogCisJdTggZGVzY3JpcHRvcl90eXBlOwogCXN0cnVjdCBhbWxfcmVzb3VyY2Vfc21hbGxfaGVhZGVyIHNtYWxsX2hlYWRlcjsKIAlzdHJ1Y3QgYW1sX3Jlc291cmNlX2xhcmdlX2hlYWRlciBsYXJnZV9oZWFkZXI7CiAKQEAgLTI5Niw5ICszMDMsOSBAQAogCS8qIFV0aWxpdHkgb3ZlcmxheXMgKi8KIAogCXN0cnVjdCBhbWxfcmVzb3VyY2VfYWRkcmVzcyBhZGRyZXNzOwotCXUzMiB1MzJfaXRlbTsKLQl1MTYgdTE2X2l0ZW07Ci0JdTggVThpdGVtOworCXUzMiBkd29yZF9pdGVtOworCXUxNiB3b3JkX2l0ZW07CisJdTggYnl0ZV9pdGVtOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCmluZGV4IDIyM2VjNjQuLjQ1M2E0NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCkBAIC00OSwzMyArNDksNDEgQEAKICAqLwogCiAjaWZkZWYgQUNQSV9MSUJSQVJZCisvKgorICogTm90ZTogVGhlIG5vbi1kZWJ1ZyB2ZXJzaW9uIG9mIHRoZSBhY3BpX2xpYnJhcnkgZG9lcyBub3QgY29udGFpbiBhbnkKKyAqIGRlYnVnIHN1cHBvcnQsIGZvciBtaW5pbWltYWwgc2l6ZS4gVGhlIGRlYnVnIHZlcnNpb24gdXNlcyBBQ1BJX0ZVTExfREVCVUcKKyAqLwogI2RlZmluZSBBQ1BJX1VTRV9MT0NBTF9DQUNIRQogI2VuZGlmCiAKLSNpZmRlZiBBQ1BJX0RVTVBfQVBQCi0jaWZuZGVmIE1TRE9TCi0jZGVmaW5lIEFDUElfREVCVUdfT1VUUFVUCi0jZW5kaWYKLSNkZWZpbmUgQUNQSV9BUFBMSUNBVElPTgotI2RlZmluZSBBQ1BJX0RJU0FTU0VNQkxFUgotI2RlZmluZSBBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04KLSNlbmRpZgotCi0jaWZkZWYgQUNQSV9FWEVDX0FQUAotI3VuZGVmIERFQlVHR0VSX1RIUkVBRElORwotI2RlZmluZSBERUJVR0dFUl9USFJFQURJTkcgICAgICBERUJVR0dFUl9TSU5HTEVfVEhSRUFERUQKLSNkZWZpbmUgQUNQSV9ERUJVR19PVVRQVVQKLSNkZWZpbmUgQUNQSV9BUFBMSUNBVElPTgotI2RlZmluZSBBQ1BJX0RFQlVHR0VSCi0jZGVmaW5lIEFDUElfRElTQVNTRU1CTEVSCi0jZGVmaW5lIEFDUElfTVVURVhfREVCVUcKLSNlbmRpZgotCiAjaWZkZWYgQUNQSV9BU0xfQ09NUElMRVIKICNkZWZpbmUgQUNQSV9ERUJVR19PVVRQVVQKICNkZWZpbmUgQUNQSV9BUFBMSUNBVElPTgogI2RlZmluZSBBQ1BJX0RJU0FTU0VNQkxFUgogI2RlZmluZSBBQ1BJX0NPTlNUQU5UX0VWQUxfT05MWQorI2RlZmluZSBBQ1BJX0xBUkdFX05BTUVTUEFDRV9OT0RFCisjZGVmaW5lIEFDUElfREFUQV9UQUJMRV9ESVNBU1NFTUJMWQorI2VuZGlmCisKKyNpZmRlZiBBQ1BJX0VYRUNfQVBQCisjdW5kZWYgREVCVUdHRVJfVEhSRUFESU5HCisjZGVmaW5lIERFQlVHR0VSX1RIUkVBRElORyAgICAgIERFQlVHR0VSX1NJTkdMRV9USFJFQURFRAorI2RlZmluZSBBQ1BJX0ZVTExfREVCVUcKKyNkZWZpbmUgQUNQSV9BUFBMSUNBVElPTgorI2RlZmluZSBBQ1BJX0RFQlVHR0VSCisjZGVmaW5lIEFDUElfTVVURVhfREVCVUcKKyNkZWZpbmUgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKKyNlbmRpZgorCisjaWZkZWYgQUNQSV9EQVNNX0FQUAorI2lmbmRlZiBNU0RPUworI2RlZmluZSBBQ1BJX0RFQlVHX09VVFBVVAorI2VuZGlmCisjZGVmaW5lIEFDUElfQVBQTElDQVRJT04KKyNkZWZpbmUgQUNQSV9ESVNBU1NFTUJMRVIKKyNkZWZpbmUgQUNQSV9OT19NRVRIT0RfRVhFQ1VUSU9OCisjZGVmaW5lIEFDUElfTEFSR0VfTkFNRVNQQUNFX05PREUKKyNkZWZpbmUgQUNQSV9EQVRBX1RBQkxFX0RJU0FTU0VNQkxZCiAjZW5kaWYKIAogI2lmZGVmIEFDUElfQVBQTElDQVRJT04KQEAgLTgzLDYgKzkxLDEyIEBACiAjZGVmaW5lIEFDUElfVVNFX0xPQ0FMX0NBQ0hFCiAjZW5kaWYKIAorI2lmZGVmIEFDUElfRlVMTF9ERUJVRworI2RlZmluZSBBQ1BJX0RFQlVHR0VSCisjZGVmaW5lIEFDUElfREVCVUdfT1VUUFVUCisjZGVmaW5lIEFDUElfRElTQVNTRU1CTEVSCisjZW5kaWYKKwogLyoKICAqIEVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24uICBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8gaW50ZXJmYWNlIHRvIHRoZQogICogbG9jYWwgZ2VuZXJhdGlvbiBlbnZpcm9ubWVudC4KQEAgLTEzNyw3ICsxNTEsNyBAQAogI2VsaWYgZGVmaW5lZChNU0RPUykJCS8qIE11c3QgYXBwZWFyIGFmdGVyIFdJTjMyIGFuZCBXSU42NCBjaGVjayAqLwogI2luY2x1ZGUgImFjZG9zMTYuaCIKIAotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQogI2luY2x1ZGUgImFjZnJlZWJzZC5oIgogCiAjZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCkBAIC0xNjMsMTcgKzE3Nyw2IEBACiAKICNlbmRpZgogCi0vKgotICogTWVtb3J5IGFsbG9jYXRpb24gdHJhY2tpbmcuICBVc2VkIG9ubHkgaWYKLSAqIDEpIFRoaXMgaXMgdGhlIGRlYnVnIHZlcnNpb24KLSAqIDIpIFRoaXMgaXMgTk9UIGEgMTYtYml0IHZlcnNpb24gb2YgdGhlIGNvZGUgKG5vdCBlbm91Z2ggcmVhbC1tb2RlIG1lbW9yeSkKLSAqLwotI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCi0jaWYgQUNQSV9NQUNISU5FX1dJRFRIICE9IDE2Ci0jZGVmaW5lIEFDUElfREJHX1RSQUNLX0FMTE9DQVRJT05TCi0jZW5kaWYKLSNlbmRpZgotCiAvKiEgW0VuZF0gbm8gc291cmNlIGNvZGUgdHJhbnNsYXRpb24gISovCiAKIC8qCkBAIC0yNzEsOCArMjc0LDggQEAKIC8qCiAgKiBTdG9yYWdlIGFsaWdubWVudCBwcm9wZXJ0aWVzCiAgKi8KLSNkZWZpbmUgIF9BVVBCTkQgICAgICAgICAgICAgICAgKHNpemVvZiAoYWNwaV9uYXRpdmVfdWludCkgLSAxKQotI2RlZmluZSAgX0FETkJORCAgICAgICAgICAgICAgICAoc2l6ZW9mIChhY3BpX25hdGl2ZV91aW50KSAtIDEpCisjZGVmaW5lICBfQVVQQk5EICAgICAgICAgICAgICAgIChzaXplb2YgKGFjcGlfbmF0aXZlX2ludCkgLSAxKQorI2RlZmluZSAgX0FETkJORCAgICAgICAgICAgICAgICAoc2l6ZW9mIChhY3BpX25hdGl2ZV9pbnQpIC0gMSkKIAogLyoKICAqIFZhcmlhYmxlIGFyZ3VtZW50IGxpc3QgbWFjcm8gZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCmluZGV4IDJlNmQ1NDUuLmI1NjU1YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtNTIsMjcgKzUyLDIyIEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0KLSNkZWZpbmUgc3RydG91bCBzaW1wbGVfc3RydG91bAotCi0jZGVmaW5lIEFDUElfTUFDSElORV9XSURUSCAgQklUU19QRVJfTE9ORwotCi0vKiBUeXBlKHMpIGZvciB0aGUgT1NMICovCi0KLSNpZmRlZiBBQ1BJX1VTRV9MT0NBTF9DQUNIRQotI2RlZmluZSBhY3BpX2NhY2hlX3QJc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QKLSNlbHNlCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2RlZmluZSBhY3BpX2NhY2hlX3QJa21lbV9jYWNoZV90Ci0jZW5kaWYKKworLyogSG9zdC1kZXBlbmRlbnQgdHlwZXMgYW5kIGRlZmluZXMgKi8KKworI2RlZmluZSBBQ1BJX01BQ0hJTkVfV0lEVEggICAgICAgICAgQklUU19QRVJfTE9ORworI2RlZmluZSBhY3BpX2NhY2hlX3QgICAgICAgICAgICAgICAgICAgICAgICBrbWVtX2NhY2hlX3QKKyNkZWZpbmUgQUNQSV9FWFBPUlRfU1lNQk9MKHN5bWJvbCkgIEVYUE9SVF9TWU1CT0woc3ltYm9sKTsKKyNkZWZpbmUgc3RydG91bCAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9zdHJ0b3VsCiAKIC8qIEZ1bGwgbmFtZXNwYWNlIHBhdGhuYW1lIGxlbmd0aCBsaW1pdCAtIGFyYml0cmFyeSAqLwotCiAjZGVmaW5lIEFDUElfUEFUSE5BTUVfTUFYICAgICAgICAgICAgICAyNTYKIAogI2Vsc2UJCQkJLyogIV9fS0VSTkVMX18gKi8KQEAgLTEwNCw0ICs5OSw4IEBACiAKICNkZWZpbmUgYWNwaV9jcHVfZmxhZ3MgdW5zaWduZWQgbG9uZwogCisjZGVmaW5lIGFjcGlfdGhyZWFkX2lkIHUzMgorCitzdGF0aWMgaW5saW5lIGFjcGlfdGhyZWFkX2lkIGFjcGlfb3NfZ2V0X3RocmVhZF9pZCh2b2lkKSB7IHJldHVybiAwOyB9CisKICNlbmRpZgkJCQkvKiBfX0FDTElOVVhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q0MjU4Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggMTI4IE5vZGVzIC0gTWFydmVsICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTcKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKaW5kZXggOTk1MDcwNi4uZTE0MzIxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKQEAgLTQ1LDEwICs0NSw4IEBACiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCV9faGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKLWV4dGVybiBjcHVtYXNrX3QgY3B1X3ByZXNlbnRfbWFzazsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CiBleHRlcm4gaW50IHNtcF9udW1fY3B1czsKLSNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcAljcHVfcHJlc2VudF9tYXNrCisjZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAJY3B1X3ByZXNlbnRfbWFwCiAKIGludCBzbXBfY2FsbF9mdW5jdGlvbl9vbl9jcHUodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbyxpbnQgcmV0cnksIGludCB3YWl0LCBjcHVtYXNrX3QgY3B1KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1iaXRzLmgKaW5kZXggZjQ4MzdmYS4uNTU0MTEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90ZXJtYml0cy5oCkBAIC0xNDgsNiArMTQ4LDcgQEAKICNkZWZpbmUgSFVQQ0wJMDAwNDAwMDAKIAogI2RlZmluZSBDTE9DQUwJMDAxMDAwMDAKKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLwogCiAvKiBjX2xmbGFnIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9kZWJ1Zy1tYWNyby5TCmluZGV4IGU0ZjFmYTUuLjdiMWZjZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZGVidWctbWFjcm8uUwpAQCAtOSw2ICs5LDcgQEAKICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIAkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9lbnRyeS1tYWNyby5TCmluZGV4IGRmMzEzMTMuLjFlYjM1MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZW50cnktbWFjcm8uUwpAQCAtMTAsNiArMTAsNyBAQAogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KIAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9tY2kuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9tY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjg2MzZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX21jaS5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX21jaS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQorICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCisgKgorICogTXVsdGlNZWRpYSBDYXJkIEludGVyZmFjZSAoTUNJKSByZWdpc3RlcnMuCisgKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVDkxUk05MjAwX01DSV9ICisjZGVmaW5lIEFUOTFSTTkyMDBfTUNJX0gKKworI2RlZmluZSBBVDkxX01DSV9DUgkJMHgwMAkJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfTUNJRU4JCSgxIDw8ICAwKQkvKiBNdWx0aS1NZWRpYSBJbnRlcmZhY2UgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX01DSV9NQ0lESVMJCSgxIDw8ICAxKQkvKiBNdWx0aS1NZWRpYSBJbnRlcmZhY2UgRGlzYWJsZSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUFdTRU4JCSgxIDw8ICAyKQkvKiBQb3dlciBTYXZlIE1vZGUgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX01DSV9QV1NESVMJCSgxIDw8ICAzKQkvKiBQb3dlciBTYXZlIE1vZGUgRGlzYWJsZSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfU1dSU1QJCSgxIDw8ICA3KQkvKiBTb2Z0d2FyZSBSZXNldCAqLworCisjZGVmaW5lIEFUOTFfTUNJX01SCQkweDA0CQkvKiBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01DSV9DTEtESVYJCSgweGZmICA8PCAgMCkJLyogQ2xvY2sgRGl2aWRlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUFdTRElWCQkoMyAgICAgPDwgIDgpCS8qIFBvd2VyIFNhdmluZyBEaXZpZGVyICovCisjZGVmaW5lCQlBVDkxX01DSV9QRENQQURWCSgxICAgICA8PCAxNCkJLyogUERDIFBhZGRpbmcgVmFsdWUgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1BEQ01PREUJKDEgICAgIDw8IDE1KQkvKiBQREMtb3JpZW50YXRlZCBNb2RlICovCisjZGVmaW5lCQlBVDkxX01DSV9CTEtMRU4gCSgweGZmZiA8PCAxOCkJLyogRGF0YSBCbG9jayBMZW5ndGggKi8KKworI2RlZmluZSBBVDkxX01DSV9EVE9SCQkweDA4CQkvKiBEYXRhIFRpbWVvdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0RUT0NZQwkJKDB4ZiA8PCAwKQkvKiBEYXRhIFRpbWVvdXQgQ3ljbGUgTnVtYmVyICovCisjZGVmaW5lCQlBVDkxX01DSV9EVE9NVUwJCSg3ICAgPDwgNCkJLyogRGF0YSBUaW1lb3V0IE11bHRpcGxpZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF8xCQkoMCA8PCAgNCkKKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF8xNgkJKDEgPDwgIDQpCisjZGVmaW5lCQlBVDkxX01DSV9EVE9NVUxfMTI4CQkoMiA8PCAgNCkKKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF8yNTYJCSgzIDw8ICA0KQorI2RlZmluZQkJQVQ5MV9NQ0lfRFRPTVVMXzFLCQkoNCA8PCAgNCkKKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF80SwkJKDUgPDwgIDQpCisjZGVmaW5lCQlBVDkxX01DSV9EVE9NVUxfNjRLCQkoNiA8PCAgNCkKKyNkZWZpbmUJCUFUOTFfTUNJX0RUT01VTF8xTQkJKDcgPDwgIDQpCisKKyNkZWZpbmUgQVQ5MV9NQ0lfU0RDUgkJMHgwYwkJLyogU0QgQ2FyZCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfU0RDU0VMCQkoMHhmIDw8IDApCS8qIFNEIENhcmQgU2VsZWN0b3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1NEQ0JVUwkJKDEgICA8PCA3KQkvKiAxLWJpdCBvciA0LWJpdCBidXMgKi8KKworI2RlZmluZSBBVDkxX01DSV9BUkdSCQkweDEwCQkvKiBBcmd1bWVudCBSZWdpc3RlciAqLworCisjZGVmaW5lIEFUOTFfTUNJX0NNRFIJCTB4MTQJCS8qIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0NNRE5CCQkoMHgzZiA8PCAwKQkvKiBDb21tYW5kIE51bWJlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUlNQVFlQCQkoMyAgICA8PCA2KQkvKiBSZXNwb25zZSBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQ0lfUlNQVFlQX05PTkUJKDAgPDwgIDYpCisjZGVmaW5lCQkJQVQ5MV9NQ0lfUlNQVFlQXzQ4CSgxIDw8ICA2KQorI2RlZmluZQkJCUFUOTFfTUNJX1JTUFRZUF8xMzYJKDIgPDwgIDYpCisjZGVmaW5lCQlBVDkxX01DSV9TUENNRAkJKDcgICAgPDwgOCkJLyogU3BlY2lhbCBDb21tYW5kICovCisjZGVmaW5lCQkJQVQ5MV9NQ0lfU1BDTURfTk9ORQkoMCA8PCAgOCkKKyNkZWZpbmUJCQlBVDkxX01DSV9TUENNRF9JTklUCSgxIDw8ICA4KQorI2RlZmluZQkJCUFUOTFfTUNJX1NQQ01EX1NZTkMJKDIgPDwgIDgpCisjZGVmaW5lCQkJQVQ5MV9NQ0lfU1BDTURfSUNNRAkoNCA8PCAgOCkKKyNkZWZpbmUJCQlBVDkxX01DSV9TUENNRF9JUkVTUAkoNSA8PCAgOCkKKyNkZWZpbmUJCUFUOTFfTUNJX09QRENNRAkJKDEgPDwgMTEpCS8qIE9wZW4gRHJhaW4gQ29tbWFuZCAqLworI2RlZmluZQkJQVQ5MV9NQ0lfTUFYTEFUCQkoMSA8PCAxMikJLyogTWF4IExhdGVuY3kgZm9yIENvbW1hbmQgdG8gUmVzcG9uc2UgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1RSQ01ECQkoMyA8PCAxNikJLyogVHJhbnNmZXIgQ29tbWFuZCAqLworI2RlZmluZQkJCUFUOTFfTUNJX1RSQ01EX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQ0lfVFJDTURfU1RBUlQJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQ0lfVFJDTURfU1RPUAkoMiA8PCAxNikKKyNkZWZpbmUJCUFUOTFfTUNJX1RSRElSCQkoMSA8PCAxOCkJLyogVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lCQlBVDkxX01DSV9UUlRZUAkJKDMgPDwgMTkpCS8qIFRyYW5zZmVyIFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01DSV9UUlRZUF9CTE9DSwkoMCA8PCAxOSkKKyNkZWZpbmUJCQlBVDkxX01DSV9UUlRZUF9NVUxUSVBMRQkoMSA8PCAxOSkKKyNkZWZpbmUJCQlBVDkxX01DSV9UUlRZUF9TVFJFQU0JKDIgPDwgMTkpCisKKyNkZWZpbmUgQVQ5MV9NQ0lfUlNQUihuKQkoMHgyMCArICgobikgKiA0KSkJLyogUmVzcG9uc2UgUmVnaXN0ZXJzIDAtMyAqLworI2RlZmluZSBBVDkxX01DUl9SRFIJCTB4MzAJCS8qIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX01DUl9URFIJCTB4MzQJCS8qIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX01DSV9TUgkJMHg0MAkJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01DSV9DTURSRFkJCSgxIDw8ICAwKQkvKiBDb21tYW5kIFJlYWR5ICovCisjZGVmaW5lCQlBVDkxX01DSV9SWFJEWQkJKDEgPDwgIDEpIAkvKiBSZWNlaXZlciBSZWFkeSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfVFhSRFkJCSgxIDw8ICAyKQkvKiBUcmFuc21pdCBSZWFkeSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfQkxLRQkJKDEgPDwgIDMpCS8qIERhdGEgQmxvY2sgRW5kZWQgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0RUSVAJCSgxIDw8ICA0KQkvKiBEYXRhIFRyYW5zZmVyIGluIFByb2dyZXNzICovCisjZGVmaW5lCQlBVDkxX01DSV9OT1RCVVNZCSgxIDw8ICA1KQkvKiBEYXRhIE5vdCBCdXN5ICovCisjZGVmaW5lCQlBVDkxX01DSV9FTkRSWAkJKDEgPDwgIDYpCS8qIEVuZCBvZiBSWCBCdWZmZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0VORFRYCQkoMSA8PCAgNykJLyogRW5kIGZvIFRYIEJ1ZmZlciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUlhCVUZGCQkoMSA8PCAxNCkJLyogUlggQnVmZmVyIEZ1bGwgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1RYQlVGRQkJKDEgPDwgMTUpCS8qIFRYIEJ1ZmZlciBFbXB0eSAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUklOREUJCSgxIDw8IDE2KSAgCS8qIFJlc3BvbnNlIEluZGV4IEVycm9yICovCisjZGVmaW5lCQlBVDkxX01DSV9SRElSRQkJKDEgPDwgMTcpCS8qIFJlc3BvbnNlIERpcmVjdGlvbiBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUkNSQ0UJCSgxIDw8IDE4KSAgIAkvKiBSZXNwb25zZSBDUkMgRXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1JFTkRFCQkoMSA8PCAxOSkJLyogUmVzcG9uc2UgRW5kIEJpdCBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9NQ0lfUlRPRQkJKDEgPDwgMjApCS8qIFJlcG9uc2UgVGltZS1vdXQgRXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0RDUkNFCQkoMSA8PCAyMSkJLyogRGF0YSBDUkMgRXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0RUT0UJCSgxIDw8IDIyKQkvKiBEYXRhIFRpbWUtb3V0IEVycm9yICovCisjZGVmaW5lCQlBVDkxX01DSV9PVlJFCQkoMSA8PCAzMCkJLyogT3ZlcnJ1biAqLworI2RlZmluZQkJQVQ5MV9NQ0lfVU5SRQkJKDEgPDwgMzEpCS8qIFVuZGVycnVuICovCisKKyNkZWZpbmUgQVQ5MV9NQ0lfSUVSCQkweDQ0CQkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfTUNJX0lEUgkJMHg0OAkJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9NQ0lfSU1SCQkweDRjCQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaAppbmRleCAyZTdkMTEzLi40ZmRlZjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2JvYXJkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCkBAIC0zOCw2ICszOCw4IEBACiBleHRlcm4gaW50IGF0OTFfc2VyaWFsX21hcFtBVDkxX05SX1VBUlRdOwogZXh0ZXJuIGludCBhdDkxX2NvbnNvbGVfcG9ydDsKIAorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKICAvKiBVU0IgRGV2aWNlICovCiBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB7CiAJdTgJdmJ1c19waW47CQkvKiBoaWdoID09IGhvc3QgcG93ZXJpbmcgdXMgKi8KQEAgLTc3LDQgKzc5LDI2IEBACiB9OwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7CiAKKyAvKiBOQU5EIC8gU21hcnRNZWRpYSAqLworc3RydWN0IGF0OTFfbmFuZF9kYXRhIHsKKwl1OAkJZW5hYmxlX3BpbjsJLyogY2hpcCBlbmFibGUgKi8KKwl1OAkJZGV0X3BpbjsJLyogY2FyZCBkZXRlY3QgKi8KKwl1OAkJcmR5X3BpbjsJLyogcmVhZHkvYnVzeSAqLworCXU4CQlhbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBBTEUgKi8KKwl1OAkJY2xlOwkJLyogYWRkcmVzcyBsaW5lIG51bWJlciBjb25uZWN0ZWQgdG8gQ0xFICovCisgICAgICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uKiAoKnBhcnRpdGlvbl9pbmZvKShpbnQsIGludCopOworfTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgKmRhdGEpOworCisgLyogSTJDKi8KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmModm9pZCk7CisKKyAvKiBSVEMgKi8KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydGModm9pZCk7CisKKyAvKiBMRURzICovCitleHRlcm4gdTggYXQ5MV9sZWRzX2NwdTsKK2V4dGVybiB1OCBhdDkxX2xlZHNfdGltZXI7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKaW5kZXggMjY0NmMwMS4uNTllNmY0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaApAQCAtNjUsNiArNjUsOSBAQAogLyogU21hcnRNZWRpYSAqLwogI2RlZmluZSBBVDkxX1NNQVJUTUVESUFfQkFTRQkweDQwMDAwMDAwCS8qIE5DUzM6IFNtYXJ0bWVkaWEgcGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCiAKKy8qIENvbXBhY3QgRmxhc2ggKi8KKyNkZWZpbmUgQVQ5MV9DRl9CQVNFCQkweDUwMDAwMDAwCS8qIE5DUzQtTkNTNjogQ29tcGFjdCBGbGFzaCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KKwogLyogTXVsdGktTWFzdGVyIE1lbW9yeSBjb250cm9sbGVyICovCiAjZGVmaW5lIEFUOTFfVUhQX0JBU0UJCTB4MDAzMDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oCmluZGV4IDIzMzliNzYuLjFhZGZkMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9oYXJkd2FyZS5oCkBAIC01MywxNiArNTMsMTIgQEAKICNkZWZpbmUgU0NSRUVOX0VORAkJMHhkZmMwMDAwMAogI2RlZmluZSBTQ1JFRU5fQkFTRQkJMHhkZjgwMDAwMAogCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKLQogI2RlZmluZSBWSURDX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGUwNDAwMDAwCiAjZGVmaW5lIElPTURfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKICNkZWZpbmUgSU9DX0JBU0UJCUlPTUVNKDB4ZTAyMDAwMDApCiAjZGVmaW5lIEZMT1BQWURNQV9CQVNFCQlJT01FTSgweGUwMDJhMDAwKQogI2RlZmluZSBQQ0lPX0JBU0UJCUlPTUVNKDB4ZTAwMTAwMDApCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCS8qIFJPTSAqLwotCiAjZGVmaW5lIHZpZGNfd3JpdGVsKHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgVklEQ19CQVNFKQogCiAvKiBpbi9vdXQgYmlhcyBmb3IgdGhlIElTQSBzbG90IHJlZ2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL21lbW9yeS5oCmluZGV4IDM0ZjQwYTYuLjMxNzgxNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvbWVtb3J5LmgKQEAgLTI2LDQgKzI2LDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFJPTQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHgwMDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kZWJ1Zy1tYWNyby5TCmluZGV4IGY2MWNhZGEuLjkyMTNiZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKQEAgLTE4LDQgKzE4LDQgQEAKIAogI2RlZmluZSBVQVJUX1NISUZUCTIKICNkZWZpbmUgRkxPV19DT05UUk9MCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9oYXJkd2FyZS5oCmluZGV4IDRlNDFjMjMuLjNjZTg2NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2hhcmR3YXJlLmgKQEAgLTU3LDkgKzU3LDYgQEAKIC8qCiAgKiBSQU0gZGVmaW5pdGlvbnMKICAqLwotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAotCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJMHhmZjAwMDAwMAkvKiBJUlFfU1RBVCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL21lbW9yeS5oCmluZGV4IDAyZjE0NDUuLmM3YzUwMGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvbWVtb3J5LmgKQEAgLTI4LDQgKzI4LDEwIEBACiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKHgpCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gU1JBTQorICovCisjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg0MDAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaAppbmRleCA2NmIxOWM3Li5hZTViNzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3VuY29tcHJlc3MuaApAQCAtMTAsNyArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogCi0jZGVmaW5lIFNFUklBTF9CQVNFCSgodW5zaWduZWQgY2hhciAqKTB4ZmUwMDBiZTApCisjZGVmaW5lIFNFUklBTF9CQVNFCSgodW5zaWduZWQgY2hhciAqKTB4ZjAwMDBiZTApCiAKIC8qCiAgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaAppbmRleCAyZWYyMjAwLi5lYzUxZmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCkBAIC00OCw5ICs0OCw2IEBACiAjZGVmaW5lIFBDSUNGRzBfU0laRQkJMHgwMTAwMDAwMAogI2RlZmluZSBQQ0lDRkcwX0JBU0UJCTB4ZmEwMDAwMDAKIAotI2RlZmluZSBGTFVTSF9TSVpFCQkweDAwMTAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZjkwMDAwMDAKLQogI2RlZmluZSBQQ0lNRU1fU0laRQkJMHgwMTAwMDAwMAogI2RlZmluZSBQQ0lNRU1fQkFTRQkJMHhmMDAwMDAwMAogCkBAIC02MSw5ICs1OCw2IEBACiAjZGVmaW5lIFBDSU1FTV9TSVpFCQkweDgwMDAwMDAwCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQkweDgwMDAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfU0laRQkJMHgwMDEwMDAwMAotI2RlZmluZSBGTFVTSF9CQVNFCQkweDdlMDAwMDAwCi0KICNkZWZpbmUgV0ZMVVNIX1NJWkUJCTB4MDEwMDAwMDAKICNkZWZpbmUgV0ZMVVNIX0JBU0UJCTB4N2QwMDAwMDAKIApAQCAtOTQsNyArODgsNiBAQAogI2RlZmluZSBYQlVTX1NXSVRDSF9KMTdfMTEJKCgqWEJVU19TV0lUQ0gpICYgKDEgPDwgNSkpCiAjZGVmaW5lIFhCVVNfU1dJVENIX0oxN185CSgoKlhCVVNfU1dJVENIKSAmICgxIDw8IDYpKQogCi0jZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHg1MDAwMDAwMAogI2RlZmluZSBVTkNBQ0hFQUJMRV9BRERSCShBUk1DU1JfQkFTRSArIDB4MTA4KQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCmluZGV4IDA5ZTMzNWMuLjk5MTgxZmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKQEAgLTQ5LDEyICs0OSwyMiBAQAogI2RlZmluZSBUQVNLX1NJWkUJCVVMKDB4YmYwMDAwMDApCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCQlVTCgweGMwMDAwMDAwKQogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYS4KKyAqLworI2RlZmluZSBGTFVTSF9CQVNFCQkweGY5MDAwMDAwCisKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQ08yODUpCiAKIC8qIFRhc2sgc2l6ZSBhbmQgcGFnZSBvZmZzZXQgYXQgMS41R0IgKi8KICNkZWZpbmUgVEFTS19TSVpFCQlVTCgweDVmMDAwMDAwKQogI2RlZmluZSBQQUdFX09GRlNFVAkJVUwoMHg2MDAwMDAwMCkKIAorLyoKKyAqIENhY2hlIGZsdXNoaW5nIGFyZWEuCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHg3ZTAwMDAwMAorCiAjZWxzZQogCiAjZXJyb3IgIlVuZGVmaW5lZCBmb290YnJpZGdlIGFyY2hpdGVjdHVyZSIKQEAgLTcyLDQgKzgyLDYgQEAKICAqLwogI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UgKChUQVNLX1NJWkUgKyAweDAxMDAwMDAwKSAvIDMpCiAKKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDUwMDAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RzNzJ4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RzNzJ4eC5oCmluZGV4IDQxMjIxNWUuLmE5NGY2M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC90czcyeHguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdHM3Mnh4LmgKQEAgLTEyLDYgKzEyLDggQEAKICAqIGZlYmZjMDAwCVs2N10wMDAwMDAwCTRLCU5BTkQgZGF0YSByZWdpc3RlcgogICogZmViZmIwMDAJWzY3XTA0MDAwMDAJNEsJTkFORCBjb250cm9sIHJlZ2lzdGVyCiAgKiBmZWJmYTAwMAlbNjddMDgwMDAwMAk0SwlOQU5EIGJ1c3kgcmVnaXN0ZXIKKyAqIGZlYmY5MDAwCTEwODAwMDAwCTRLCVRTLTU2MjAgUlRDIGluZGV4IHJlZ2lzdGVyCisgKiBmZWJmODAwMAkxMTcwMDAwMAk0SwlUUy01NjIwIFJUQyBkYXRhIHJlZ2lzdGVyCiAgKi8KIAogI2RlZmluZSBUUzcyWFhfTU9ERUxfUEhZU19CQVNFCQkweDIyMDAwMDAwCkBAIC01OCw2ICs2MCwxNSBAQAogI2RlZmluZSBUUzcyWFhfTkFORF9CVVNZX1NJWkUJCTB4MDAwMDEwMDAKIAogCisjZGVmaW5lIFRTNzJYWF9SVENfSU5ERVhfVklSVF9CQVNFCTB4ZmViZjkwMDAKKyNkZWZpbmUgVFM3MlhYX1JUQ19JTkRFWF9QSFlTX0JBU0UJMHgxMDgwMDAwMAorI2RlZmluZSBUUzcyWFhfUlRDX0lOREVYX1NJWkUJCTB4MDAwMDEwMDAKKworI2RlZmluZSBUUzcyWFhfUlRDX0RBVEFfVklSVF9CQVNFCTB4ZmViZjgwMDAKKyNkZWZpbmUgVFM3MlhYX1JUQ19EQVRBX1BIWVNfQkFTRQkweDExNzAwMDAwCisjZGVmaW5lIFRTNzJYWF9SVENfREFUQV9TSVpFCQkweDAwMDAxMDAwCisKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZGVidWctbWFjcm8uUwppbmRleCA4M2Y1NTJmLi5jNjExODcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZGVidWctbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZGVidWctbWFjcm8uUwpAQCAtMTYsNyArMTYsNyBAQAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4MDAwMDAwMDAJQCBwaHlzaWNhbAogCQltb3ZuZQlccngsICMweGUwMDAwMDAwCUAgdmlydHVhbAotCQlvcnIJXHJ4LCBccngsICMweDAwMjAwMDAwCisJCW9ycmVxCVxyeCwgXHJ4LCAjMHgwMDIwMDAwMAlAIHBoeXNpY2FsCiAJCW9ycglccngsIFxyeCwgIzB4MDAwMDYwMDAJQCBVQVJUMSBvZmZzZXQKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2RtYS5oCmluZGV4IGI0NWZhMzYuLjYyMWZmMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZG1hLmgKQEAgLTE3LDI3ICsxNywxNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLworCiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0vKgotICogRE1BIHJlZ2lzdHJhdGlvbgotICovCi0KIHR5cGVkZWYgZW51bSB7CiAJRE1BX1BSSU9fSElHSCA9IDAsCi0JRE1BX1BSSU9fTUVESVVNID0gMywKLQlETUFfUFJJT19MT1cgPSA2CisJRE1BX1BSSU9fTUVESVVNID0gMSwKKwlETUFfUFJJT19MT1cgPSAyCiB9IGlteF9kbWFfcHJpbzsKIAotaW50IGlteF9yZXF1ZXN0X2RtYShjaGFyICpuYW1lLCBpbXhfZG1hX3ByaW8gcHJpbywKLQkJICAgIHZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKLQkJICAgIHZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKLQkJICAgIHZvaWQgKmRhdGEpOwotCi12b2lkIGlteF9mcmVlX2RtYShpbnQgZG1hX2NoKTsKLQotCiAjZGVmaW5lIERNQV9SRVFfVUFSVDNfVCAgICAgICAgMgogI2RlZmluZSBETUFfUkVRX1VBUlQzX1IgICAgICAgIDMKICNkZWZpbmUgRE1BX1JFUV9TU0kyX1QgICAgICAgICA0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14LWRtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjA2M2MxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1kbWEuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9pbXhhZHMvZG1hLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpZm5kZWYgX19BU01fQVJDSF9JTVhfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JTVhfRE1BX0gKKworI2RlZmluZSBJTVhfRE1BX0NIQU5ORUxTICAxMQorCisvKgorICogc3RydWN0IGlteF9kbWFfY2hhbm5lbCAtIGkuTVggc3BlY2lmaWMgRE1BIGV4dGVuc2lvbgorICogQG5hbWU6IG5hbWUgc3BlY2lmaWVkIGJ5IERNQSBjbGllbnQKKyAqIEBpcnFfaGFuZGxlcjogY2xpZW50IGNhbGxiYWNrIGZvciBlbmQgb2YgdHJhbnNmZXIKKyAqIEBlcnJfaGFuZGxlcjogY2xpZW50IGNhbGxiYWNrIGZvciBlcnJvciBjb25kaXRpb24KKyAqIEBkYXRhOiBjbGllbnRzIGNvbnRleHQgZGF0YSBmb3IgY2FsbGJhY2tzCisgKiBAZG1hX21vZGU6IGRpcmVjdGlvbiBvZiB0aGUgdHJhbnNmZXIgJURNQV9NT0RFX1JFQUQgb3IgJURNQV9NT0RFX1dSSVRFCisgKiBAc2c6IHBvaW50ZXIgdG8gdGhlIGFjdHVhbCByZWFkL3dyaXR0ZW4gY2h1bmsgZm9yIHNjYXR0ZXItZ2F0aGVyIGVtdWxhdGlvbgorICogQHNnYmM6IGNvdW50ZXIgb2YgcHJvY2Vzc2VkIGJ5dGVzIGluIHRoZSBhY3R1YWwgcmVhZC93cml0dGVuIGNodW5rCisgKiBAcmVzYnl0ZXM6IHRvdGFsIHJlc2lkdWFsIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlcgorICogICAgICAgICAgICAoaXQgY2FuIGJlIGxvd2VyIG9yIHNhbWUgYXMgc3VtIG9mIFNHIG1hcHBlZCBjaHVuayBzaXplcykKKyAqIEBzZ2NvdW50OiBudW1iZXIgb2YgY2h1bmtzIHRvIGJlIHJlYWQvd3JpdHRlbgorICoKKyAqIFN0cnVjdHVyZSBpcyB1c2VkIGZvciBJTVggRE1BIHByb2Nlc3NpbmcuIEl0IHdvdWxkIGJlIHByb2JhYmx5IGdvb2QKKyAqIEBzdHJ1Y3QgZG1hX3N0cnVjdCBpbiB0aGUgZnV0dXJlIGZvciBleHRlcm5hbCBpbnRlcmZhY2luZyBhbmQgdXNlCisgKiBAc3RydWN0IGlteF9kbWFfY2hhbm5lbCBvbmx5IGFzIGV4dGVuc2lvbiB0byBpdC4KKyAqLworCitzdHJ1Y3QgaW14X2RtYV9jaGFubmVsIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl2b2lkICgqZXJyX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdm9pZCAqZGF0YTsKKwlkbWFtb2RlX3QgIGRtYV9tb2RlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IHNnYmM7CisJdW5zaWduZWQgaW50IHNnY291bnQ7CisJdW5zaWduZWQgaW50IHJlc2J5dGVzOworCWludCBkbWFfbnVtOworfTsKKworZXh0ZXJuIHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgaW14X2RtYV9jaGFubmVsc1tJTVhfRE1BX0NIQU5ORUxTXTsKKworCisvKiBUaGUgdHlwZSB0byBkaXN0aW5ndWlzaCBjaGFubmVsIG51bWJlcnMgcGFyYW1ldGVyIGZyb20gb3JkaW5hbCBpbnQgdHlwZSAqLwordHlwZWRlZiBpbnQgaW14X2RtYWNoX3Q7CisKK2ludAoraW14X2RtYV9zZXR1cF9zaW5nbGUoaW14X2RtYWNoX3QgZG1hX2NoLCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aCwgdW5zaWduZWQgaW50IGRldl9hZGRyLCBkbWFtb2RlX3QgZG1hbW9kZSk7CisKK2ludAoraW14X2RtYV9zZXR1cF9zZyhpbXhfZG1hY2hfdCBkbWFfY2gsCisJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCwgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsCisJCSB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGRtYW1vZGVfdCBkbWFtb2RlKTsKKworaW50CitpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGlteF9kbWFjaF90IGRtYV9jaCwKKwkJdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQl2b2lkICgqZXJyX2hhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpOworCit2b2lkIGlteF9kbWFfZW5hYmxlKGlteF9kbWFjaF90IGRtYV9jaCk7CisKK3ZvaWQgaW14X2RtYV9kaXNhYmxlKGlteF9kbWFjaF90IGRtYV9jaCk7CisKK2ludCBpbXhfZG1hX3JlcXVlc3QoaW14X2RtYWNoX3QgZG1hX2NoLCBjb25zdCBjaGFyICpuYW1lKTsKKwordm9pZCBpbXhfZG1hX2ZyZWUoaW14X2RtYWNoX3QgZG1hX2NoKTsKKworaW50IGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKGlteF9kbWFjaF90ICpwZG1hX2NoLCBjb25zdCBjaGFyICpuYW1lLCBpbXhfZG1hX3ByaW8gcHJpbyk7CisKKworI2VuZGlmCS8qIF9BU01fQVJDSF9JTVhfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtdWFydC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC11YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2ODVlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtdWFydC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgQVNNQVJNX0FSQ0hfVUFSVF9ICisjZGVmaW5lIEFTTUFSTV9BUkNIX1VBUlRfSAorCisjZGVmaW5lIElNWFVBUlRfSEFWRV9SVFNDVFMgKDE8PDApCisKK3N0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L21tYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L21tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MzcxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvbW1jLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBBU01BUk1fQVJDSF9NTUNfSAorI2RlZmluZSBBU01BUk1fQVJDSF9NTUNfSAorCisjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CisKK3N0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSB7CisJaW50ICgqY2FyZF9wcmVzZW50KSh2b2lkKTsKK307CisKK2V4dGVybiB2b2lkIGlteF9zZXRfbW1jX2luZm8oc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhICppbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2RlYnVnLW1hY3JvLlMKaW5kZXggZWI5OWZkNi4uMmIyNWU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvZGVidWctbWFjcm8uUwpAQCAtMTcsNiArMTcsOSBAQAogCQl0c3QJXHJ4LCAjMQkJCQlAIG1tdSBlbmFibGVkPwogCQlsZHJlcQlccngsID1JWFAyM1hYX1BFUklQSEVSQUxfUEhZUyAJQCBwaHlzaWNhbAogCQlsZHJuZQlccngsID1JWFAyM1hYX1BFUklQSEVSQUxfVklSVAlAIHZpcnR1YWwKKyNpZmRlZiBfX0FSTUVCX18KKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDAwMworI2VuZGlmCiAJCS5lbmRtCiAKICNkZWZpbmUgVUFSVF9TSElGVAkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9tZW1vcnkuaAppbmRleCBiZWJjZjBhLi5jODVmYzA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvbWVtb3J5LmgKQEAgLTI4LDYgKzI4LDcgQEAKICAqCQl0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh2KQkJCQkJCVwKIAkoeyB1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCVwKQEAgLTQwLDYgKzQxLDIyIEBACiAJZGF0YSA9ICooKHZvbGF0aWxlIGludCAqKUlYUDIzWFhfUENJX1NEUkFNX0JBUik7CQlcCiAJIF9fcGh5c190b192aXJ0KCgoKGIgLSAoZGF0YSAmIDB4ZmZmZmZmZjApKSArIDB4MDAwMDAwMDApKSk7IH0pCiAKKy8qCisgKiBDb2hlcmVuY3kgc3VwcG9ydC4gIE9ubHkgc3VwcG9ydGVkIG9uIEEyIENQVXMgb3Igb24gQTEKKyAqIHN5c3RlbXMgdGhhdCBoYXZlIHRoZSBjYWNoZSBjb2hlcmVuY3kgd29ya2Fyb3VuZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19peHAyM3h4X2FyY2hfaXNfY29oZXJlbnQodm9pZCkKK3sKKwlleHRlcm4gdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKKworCWlmICgoKHByb2Nlc3Nvcl9pZCAmIDE1KSA+PSA0KSB8fCBtYWNoaW5lX2lzX3JvYWRydW5uZXIoKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkJX19peHAyM3h4X2FyY2hfaXNfY29oZXJlbnQoKQorCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L3BsYXRmb3JtLmgKaW5kZXggZjg1YjQ2OC4uZTRkOTkwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvcGxhdGZvcm0uaApAQCAtMjIsNiArMjIsNyBAQAogaW50IGl4cDIzeHhfcGNpX3NldHVwKGludCwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKIHZvaWQgaXhwMjN4eF9wY2lfcHJlaW5pdCh2b2lkKTsKIHN0cnVjdCBwY2lfYnVzICppeHAyM3h4X3BjaV9zY2FuX2J1cyhpbnQsIHN0cnVjdCBwY2lfc3lzX2RhdGEqKTsKK3ZvaWQgaXhwMjN4eF9wY2lfc2xhdmVfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgaXhwMjN4eF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaAppbmRleCA5NDJiNjIyLi5iNTk1MjBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaApAQCAtMjYwLDYgKzI2MCwxMiBAQAogCiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfUENJCisKKyNkZWZpbmUJX19pbyh2KQkJdgorCisjZWxzZQorCiAvKgogICogSVhQNHh4IGRvZXMgbm90IGhhdmUgYSB0cmFuc3BhcmVudCBjcHUgLT4gUENJIEkvTyB0cmFuc2xhdGlvbgogICogd2luZG93LiAgSW5zdGVhZCwgaXQgaGFzIGEgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IG11c3QgYmUgdHdlYWtlZApAQCAtNTc4LDYgKzU4NCw3IEBACiAKICNkZWZpbmUJaW9wb3J0X21hcChwb3J0LCBucikJCSgodm9pZCBfX2lvbWVtKikocG9ydCArIFBJT19PRkZTRVQpKQogI2RlZmluZQlpb3BvcnRfdW5tYXAoYWRkcikKKyNlbmRpZgkvLyAhQ09ORklHX1BDSQogCiAjZW5kaWYJLy8gIF9fQVNNX0FSTV9BUkNIX0lPX0gKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L21lbW9yeS5oCmluZGV4IGVlMjExZDIuLmFmOTY2N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbWVtb3J5LmgKQEAgLTE0LDcgKzE0LDcgQEAKICAqLwogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChDT05GSUdfUENJKQogCiB2b2lkIGl4cDR4eF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2hhcmR3YXJlLmgKaW5kZXggYjc1NTA3OS4uMmFiNDNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9oYXJkd2FyZS5oCkBAIC01Miw5ICs1Miw2IEBACiAjZGVmaW5lIElTQV9TSVpFCQkweDIwMDAwMDAwCiAjZGVmaW5lIElTQV9CQVNFCQkweGUwMDAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCS8qIFJPTSAqLwotI2RlZmluZSBGTFVTSF9CQVNFCQkweGRmMDAwMDAwCi0KICNkZWZpbmUgUENJT19CQVNFCQlJT19CQVNFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaAppbmRleCA5ZTUwYTE3Li40MDJkZjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9tZW1vcnkuaApAQCAtMjAsNCArMjAsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDQwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCmluZGV4IDIzOGM1OTUuLmIxMDA4YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3NlcmlhbF9sNzIwMC5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFVBUlREUgkJCTB4MDAJLyogVHgvUnggZGF0YSAqLwogI2RlZmluZSBSWFNUQVQJCQkweDA0CS8qIFJ4IHN0YXR1cyAqLwogI2RlZmluZSBIX1VCUkxDUgkJMHgwOAkvKiBtb2RlIHJlZ2lzdGVyIGhpZ2ggKi8KLSNkZWZpbmUgTV9VQlJMQ1IJCTB4MEMJLyogbW9kZSByZWcgbWlkIChNU0Igb2YgYnVhZCkqLworI2RlZmluZSBNX1VCUkxDUgkJMHgwQwkvKiBtb2RlIHJlZyBtaWQgKE1TQiBvZiBiYXVkKSovCiAjZGVmaW5lIExfVUJSTENSCQkweDEwCS8qIG1vZGUgcmVnIGxvdyAoTFNCIG9mIGJhdWQpKi8KICNkZWZpbmUgVUFSVENPTgkJCTB4MTQJLyogY29udHJvbCByZWdpc3RlciAqLwogI2RlZmluZSBVQVJURkxHCQkJMHgxOAkvKiBmbGFnIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC91bmNvbXByZXNzLmgKaW5kZXggOWZjZDQwYS4uMDRiZTJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3VuY29tcHJlc3MuaApAQCAtNiw3ICs2LDcgQEAKICAqIENoYW5nZWxvZzoKICAqICAwNS0wMS0yMDAwCVNKSAlDcmVhdGVkCiAgKiAgMDUtMTMtMjAwMAlTSkgJRmlsbGVkIGluIGZ1bmN0aW9uIGJvZGllcwotICogIDA3LTI2LTIwMDAJU0pICVJlbW92ZWQgaGFyZCBjb2RlZCBidWFkIHJhdGUKKyAqICAwNy0yNi0yMDAwCVNKSAlSZW1vdmVkIGhhcmQgY29kZWQgYmF1ZCByYXRlCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvbWVtb3J5LmgKaW5kZXggYzkyYmNiOC4uOWYxYTU4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L21lbW9yeS5oCkBAIC0zMSw4ICszMSw2IEBACiAKICNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAKLSNkZWZpbmUgTk9ERVNfU0hJRlQJNAkvKiBVcCB0byAxNiBub2RlcyAqLwotCiAvKgogICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oCmluZGV4IDU5MGJhYzIuLjY1MTMwNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYWljMjMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2FpYzIzLmgKQEAgLTU3LDYgKzU3LDcgQEAKICNkZWZpbmUgTEhWX01JTgkJCQkweDAwMDAKIAogLy8gQW5hbG9nIGF1ZGlvIHBhdGggY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBTVEFfUkVHKHgpCQkJKCh4KTw8NikKICNkZWZpbmUgU1RFX0VOQUJMRUQJCQkweDAwMjAKICNkZWZpbmUgREFDX1NFTEVDVEVECQkJMHgwMDEwCiAjZGVmaW5lIEJZUEFTU19PTgkJCTB4MDAwOApAQCAtMTA5LDQgKzExMCw3IEBACiAjZGVmaW5lIFRMVjMyMEFJQzIzSUQxICAgICAgICAgICAgICAgICAgKDB4MWEpCS8vIGNzIGxvdwogI2RlZmluZSBUTFYzMjBBSUMyM0lEMiAgICAgICAgICAgICAgICAgICgweDFiKQkvLyBjcyBoaWdoCiAKK3ZvaWQgdGx2MzIwYWljMjNfcG93ZXJfdXAodm9pZCk7Cit2b2lkIHRsdjMyMGFpYzIzX3Bvd2VyX2Rvd24odm9pZCk7CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0FJQzIzX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtYW1zLWRlbHRhLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzBmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9BTVNfREVMVEFfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQU1TX0RFTFRBX0gKKworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0FNU19ERUxUQSkKKworI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX1BIWVMJCTB4MDEwMDAwMDAKKyNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMV9WSVJUCQkweEVBMDAwMDAwCisjZGVmaW5lIEFNU19ERUxUQV9NT0RFTV9QSFlTCQkweDA0MDAwMDAwCisjZGVmaW5lIEFNU19ERUxUQV9NT0RFTV9WSVJUCQkweEVCMDAwMDAwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfUEhZUwkJMHgwODAwMDAwMAorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gyX1ZJUlQJCTB4RUMwMDAwMDAKKworI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX0xFRF9DQU1FUkEJMHgwMQorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX0xFRF9BRFZFUlQJMHgwMgorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gxX0xFRF9FTUFJTAkweDA0CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDFfTEVEX0hBTkRTRlJFRQkweDA4CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDFfTEVEX1ZPSUNFTUFJTAkweDEwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDFfTEVEX1ZPSUNFCTB4MjAKKworI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gyX0xDRF9WQkxFTgkweDAwMDEKKyNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMl9MQ0RfTkRJU1AJMHgwMDAyCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OQ0UJMHgwMDA0CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OUkUJMHgwMDA4CisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV1AJMHgwMDEwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV0UJMHgwMDIwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9BTEUJMHgwMDQwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTkFORF9DTEUJMHgwMDgwCisjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fTlJFU0VUCTB4MTAwMAorI2RlZmluZSBBTVNfREVMVEFfTEFUQ0gyX01PREVNX0NPREVDCTB4MjAwMAorCisjZGVmaW5lIEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCCTEyCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit2b2lkIGFtc19kZWx0YV9sYXRjaDFfd3JpdGUodTggbWFzaywgdTggdmFsdWUpOwordm9pZCBhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKHUxNiBtYXNrLCB1MTYgdmFsdWUpOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9BTVNfREVMVEEgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9BTVNfREVMVEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1hcG9sbG9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFwb2xsb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBjNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1hcG9sbG9uLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtYXBvbGxvbi5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFNhbXN1bmcgT01BUDI0WFggQXBvbGxvbiBib2FyZC4KKyAqCisgKiBJbml0aWFsIGNyZWF0aW9uIGJ5IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfQVBPTExPTl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0gKKworLyogUGxhY2Vob2xkZXIgZm9yIEFQT0xMT04gc3BlY2lmaWMgZGVmaW5lcyAqLworLyogR1BNQyBDUzAgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzBfQkFTRQkJMHgwMDAwMDAwMAorLyogR1BNQyBDUzEgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzFfQkFTRQkJMHgwODAwMDAwMAorI2RlZmluZSBBUE9MTE9OX0VUSFJfU1RBUlQJCShBUE9MTE9OX0NTMV9CQVNFICsgMHgzMDApCisjZGVmaW5lIEFQT0xMT05fRVRIUl9HUElPX0lSUQkJNzQKKy8qIEdQTUMgQ1MyIC0gcmVzZXJ2ZWQgZm9yIE9uZU5BTkQgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzJfQkFTRQkJMHgxMDAwMDAwMAorLyogR1BNQyBDUzMgLSByZXNlcnZlZCBmb3IgTk9SIG9yIE5BTkQgKi8KKyNkZWZpbmUgQVBPTExPTl9DUzNfQkFTRQkJMHgxODAwMDAwMAorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMi5oCmluZGV4IDM5Y2E1YTMuLmIyODg4ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgyLmgKQEAgLTM0LDkgKzM0LDUgQEAKIC8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwogI2RlZmluZSBPTUFQMTYxMF9FVEhSX1NUQVJUCQkweDA0MDAwMzAwCiAKLS8qIFNhbXN1bmcgTkFORCBmbGFzaCBhdCBDUzJCIG9yIENTMyhOQU5EIEJvb3QpICovCi0jZGVmaW5lIE9NQVBfTkFORF9GTEFTSF9TVEFSVDEgICAgICAgICAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyICAgICAgICAgICAweDBDMDAwMDAwIC8qIENTMyAqLwotCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IMl9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaAppbmRleCAxYjEyYzFkLi43NjFlYTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oCkBAIC0zMCwxMCArMzAsNiBAQAogLyogSW4gT01BUDE3MTAgSDMgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KICNkZWZpbmUgT01BUDE3MTBfRVRIUl9TVEFSVAkJMHgwNDAwMDMwMAogCi0vKiBTYW1zdW5nIE5BTkQgZmxhc2ggYXQgQ1MyQiBvciBDUzMoTkFORCBCb290KSAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQxICAgICAgICAgICAweDBBMDAwMDAwIC8qIENTMkIgKi8KLSNkZWZpbmUgT01BUF9OQU5EX0ZMQVNIX1NUQVJUMiAgICAgICAgICAgMHgwQzAwMDAwMCAvKiBDUzMgKi8KLQogI2RlZmluZSBNQVhJUlFOVU0JCQkoSUhfQk9BUkRfQkFTRSkKICNkZWZpbmUgTUFYRklRTlVNCQkJTUFYSVJRTlVNCiAjZGVmaW5lIE1BWFNXSU5VTQkJCU1BWElSUU5VTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCmluZGV4IDMzZWEyOWEuLjdlZjY2NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKQEAgLTMzLDEyICszMyw2IEBACiAvKiBHUE1DIENTMSAqLwogI2RlZmluZSBPTUFQMjRYWF9FVEhSX1NUQVJUICAgICAgICAgICAgIDB4MDgwMDAzMDAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJOTIKLQotI2RlZmluZSBINF9DUzBfQkFTRQkJICAgICAweDA0MDAwMDAwCi0KLSNkZWZpbmUgSDRfQ1MwX0JBU0UJCSAgICAgMHgwNDAwMDAwMAotCi0jZGVmaW5lIEg0X0NTMF9CQVNFCQkgICAgIDB4MDQwMDAwMDAKLQorI2RlZmluZSBINF9DUzBfQkFTRQkJCTB4MDQwMDAwMDAKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0g0X0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1uZXRzdGFyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW5ldHN0YXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjYzBmYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW5ldHN0YXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgMk4gVGVsZWtvbXVuaWthY2UsIExhZGlzbGF2IE1pY2hsIDxtaWNobEAybi5jej4KLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgT01BUDU5MTAgYmFzZWQgTmV0U3RhciBib2FyZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9ORVRTVEFSX0gKLSNkZWZpbmUgX19BU01fQVJDSF9ORVRTVEFSX0gKLQotI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+Ci0KLSNkZWZpbmUgT01BUF9OQU5EX0ZMQVNIX1NUQVJUMQkJT01BUF9DUzFfUEhZUyArICgxIDw8IDIzKQotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyCQlPTUFQX0NTMV9QSFlTICsgKDIgPDwgMjMpCi0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9ORVRTVEFSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtbm9raWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtbm9raWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1ub2tpYS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1ub2tpYS5oCisgKgorICogIEluZm9ybWF0aW9uIHN0cnVjdHVyZXMgZm9yIE5va2lhLXNwZWNpZmljIGJvYXJkIGNvbmZpZyBkYXRhCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNQlOb2tpYSBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX09NQVBfQk9BUkRfTk9LSUFfSAorI2RlZmluZSBfT01BUF9CT0FSRF9OT0tJQV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE9NQVBfVEFHX05PS0lBX0JUCTB4NGUwMQorI2RlZmluZSBPTUFQX1RBR19XTEFOX0NYMzExMFgJMHg0ZTAyCisjZGVmaW5lIE9NQVBfVEFHX0NCVVMJCTB4NGUwMworI2RlZmluZSBPTUFQX1RBR19FTV9BU0lDX0JCNQkweDRlMDQKKworCisjZGVmaW5lIEJUX0NISVBfQ1NSCQkxCisjZGVmaW5lIEJUX0NISVBfVEkJCTIKKworI2RlZmluZSBCVF9TWVNDTEtfMTIJCTEKKyNkZWZpbmUgQlRfU1lTQ0xLXzM4XzQJCTIKKworc3RydWN0IG9tYXBfYmx1ZXRvb3RoX2NvbmZpZyB7CisJdTggICAgY2hpcF90eXBlOworCXU4ICAgIGJ0X3dha2V1cF9ncGlvOworCXU4ICAgIGhvc3Rfd2FrZXVwX2dwaW87CisJdTggICAgcmVzZXRfZ3BpbzsKKwl1OCAgICBidF91YXJ0OworCXU4ICAgIGJkX2FkZHJbNl07CisJdTggICAgYnRfc3lzY2xrOworfTsKKworc3RydWN0IG9tYXBfd2xhbl9jeDMxMTB4X2NvbmZpZyB7CisJdTggIGNoaXBfdHlwZTsKKwlzMTYgcG93ZXJfZ3BpbzsKKwlzMTYgaXJxX2dwaW87CisJczE2IHNwaV9jc19ncGlvOworfTsKKworc3RydWN0IG9tYXBfY2J1c19jb25maWcgeworCXMxNiBjbGtfZ3BpbzsKKwlzMTYgZGF0X2dwaW87CisJczE2IHNlbF9ncGlvOworfTsKKworc3RydWN0IG9tYXBfZW1fYXNpY19iYjVfY29uZmlnIHsKKwlzMTYgcmV0dV9pcnFfZ3BpbzsKKwlzMTYgdGFodm9faXJxX2dwaW87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtcGVyc2V1czIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtcGVyc2V1czIuaAppbmRleCA2OTFlNTJhLi5lYjc0NDIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLXBlcnNldXMyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1wZXJzZXVzMi5oCkBAIC00Miw4ICs0Miw0IEBACiAKICNkZWZpbmUgTlJfSVJRUwkJCShNQVhJUlFOVU0gKyAxKQogCi0vKiBTYW1zdW5nIE5BTkQgZmxhc2ggYXQgQ1MyQiBvciBDUzMoTkFORCBCb290KSAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQxCSAgIDB4MEEwMDAwMDAgLyogQ1MyQiAqLwotI2RlZmluZSBPTUFQX05BTkRfRkxBU0hfU1RBUlQyCSAgIDB4MEMwMDAwMDAgLyogQ1MzICovCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCmluZGV4IGEwMDQwY2QuLjZkNjI0MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTIxLDkgKzIxLDEyIEBACiAjZGVmaW5lIE9NQVBfVEFHX0xDRAkJMHg0ZjA1CiAjZGVmaW5lIE9NQVBfVEFHX0dQSU9fU1dJVENICTB4NGYwNgogI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDcKKyNkZWZpbmUgT01BUF9UQUdfRkJNRU0JCTB4NGYwOAorI2RlZmluZSBPTUFQX1RBR19TVElfQ09OU09MRQkweDRmMDkKIAogI2RlZmluZSBPTUFQX1RBR19CT09UX1JFQVNPTiAgICAweDRmODAKICNkZWZpbmUgT01BUF9UQUdfRkxBU0hfUEFSVAkweDRmODEKKyNkZWZpbmUgT01BUF9UQUdfVkVSU0lPTl9TVFIJMHg0ZjgyCiAKIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyB7CiAJLyogMCBmb3IgMTIgTUh6LCAxIGZvciAxMyBNSHogYW5kIDIgZm9yIDE5LjIgTUh6ICovCkBAIC01NCw2ICs1NywxMSBAQAogCXUzMiBjb25zb2xlX3NwZWVkOwogfTsKIAorc3RydWN0IG9tYXBfc3RpX2NvbnNvbGVfY29uZmlnIHsKKwl1bnNpZ25lZCBlbmFibGU6MTsKKwl1OCBjaGFubmVsOworfTsKKwogc3RydWN0IG9tYXBfdXNiX2NvbmZpZyB7CiAJLyogQ29uZmlndXJlIGRyaXZlcnMgYWNjb3JkaW5nIHRvIHRoZSBjb25uZWN0b3JzIG9uIHlvdXIgYm9hcmQ6CiAJICogIC0gIkEiIGNvbm5lY3RvciAocmVjdGFndWxhcikKQEAgLTg3LDYgKzk1LDEzIEBACiAJY2hhciBjdHJsX25hbWVbMTZdOwogfTsKIAorc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHsKKwl1MzIgZmJfc3JhbV9zdGFydDsKKwl1MzIgZmJfc3JhbV9zaXplOworCXUzMiBmYl9zZHJhbV9zdGFydDsKKwl1MzIgZmJfc2RyYW1fc2l6ZTsKK307CisKIC8qIENvdmVyOgogICogICAgICBoaWdoIC0+IGNsb3NlZAogICogICAgICBsb3cgIC0+IG9wZW4KQEAgLTEwNiw2ICsxMjEsMTIgQEAKIAlpbnQga2V5X2NvZGU6MjQ7IC8qIExpbnV4IGtleSBjb2RlICovCiB9OwogCitzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyB7CisJLyogQml0IGZpZWxkIG9mIFVBUlRzIHByZXNlbnQ7IGJpdCAwIC0tPiBVQVJUMSAqLworCXVuc2lnbmVkIGludCBlbmFibGVkX3VhcnRzOworfTsKKworCiBzdHJ1Y3Qgb21hcF9mbGFzaF9wYXJ0X2NvbmZpZyB7CiAJY2hhciBwYXJ0X3RhYmxlWzBdOwogfTsKQEAgLTExNCwxMSArMTM1LDE0IEBACiAJY2hhciByZWFzb25fc3RyWzEyXTsKIH07CiAKLXN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHsKLQkvKiBCaXQgZmllbGQgb2YgVUFSVHMgcHJlc2VudDsgYml0IDAgLS0+IFVBUlQxICovCi0JdW5zaWduZWQgaW50IGVuYWJsZWRfdWFydHM7CitzdHJ1Y3Qgb21hcF92ZXJzaW9uX2NvbmZpZyB7CisJY2hhciBjb21wb25lbnRbMTJdOworCWNoYXIgdmVyc2lvblsxMl07CiB9OwogCisKKyNpbmNsdWRlIDxhc20tYXJtL2FyY2gtb21hcC9ib2FyZC1ub2tpYS5oPgorCiBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfZW50cnkgewogCXUxNiB0YWc7CiAJdTE2IGxlbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaAppbmRleCA0NmEwNDAyLi4zYzRlYjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCkBAIC0xOSw2ICsxOSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAljb25zdCBjaGFyCQkqbmFtZTsKKwlpbnQJCQlpZDsKIAlzdHJ1Y3QgY2xrCQkqcGFyZW50OwogCXVuc2lnbmVkIGxvbmcJCXJhdGU7CiAJX191MzIJCQlmbGFnczsKQEAgLTU3LDYgKzU4LDcgQEAKIGV4dGVybiB2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CiBleHRlcm4gdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIGludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsayk7CiAKIC8qIENsb2NrIGZsYWdzICovCiAjZGVmaW5lIFJBVEVfQ0tDVEwJCSgxIDw8IDApCS8qIE1haW4gZml4ZWQgcmF0aW8gY2xvY2tzICovCkBAIC04MCwxMCArODIsMTEgQEAKICNkZWZpbmUgQ01fUExMX1NFTDEJCSgxIDw8IDE4KQogI2RlZmluZSBDTV9QTExfU0VMMgkJKDEgPDwgMTkpCiAjZGVmaW5lIENNX1NZU0NMS09VVF9TRUwxCSgxIDw8IDIwKQotI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCSgxIDw8IDIxKQotI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkoMSA8PCAyMikKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE2WFgJKDEgPDwgMjMpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAyNDJYCSgxIDw8IDI0KQotI2RlZmluZSBDTE9DS19JTl9PTUFQMjQzWAkoMSA8PCAyNSkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDMxMAkoMSA8PCAyMSkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkoMSA8PCAyMikKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE1MTAJKDEgPDwgMjMpCisjZGVmaW5lIENMT0NLX0lOX09NQVAxNlhYCSgxIDw8IDI0KQorI2RlZmluZSBDTE9DS19JTl9PTUFQMjQyWAkoMSA8PCAyNSkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0M1gJKDEgPDwgMjYpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggZDRlNzNlZi4uY2ExMjAyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC00MDQsNiArNDA0LDcgQEAKIGV4dGVybiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfZW5hYmxlX2xjZF9kbWEodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3N0b3BfbGNkX2RtYSh2b2lkKTsKK2V4dGVybiBpbnQgIG9tYXBfbGNkX2RtYV9leHRfcnVubmluZyh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIoaW50IGV4dGVybmFsKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKGludCBzaW5nbGUpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBmYl94cmVzLCB1MTYgZmJfeXJlcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKaW5kZXggMTE3NzJjNy4uZTY1MjJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmgKQEAgLTg4LDUgKzg4LDYgQEAKIHZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CiAKIGludCBvbWFwX2RtX3RpbWVyc19hY3RpdmUodm9pZCk7Cit1MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2sodTMyIGlucHV0bWFzayk7CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcC5oCmluZGV4IDU3YmY0ZjMuLjA2ZGFkODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3AuaApAQCAtMTgxLDEwICsxODEsMTYgQEAKICNkZWZpbmUgT01BUF9EU1BfTUJDTURfUE1fRU5BQkxFCTB4MDEKIAogI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9LRlVOQ19GQkNUTAkweDAwCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0tGVU5DX0FVRElPX1BXUgkweDAxCiAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfRkJDVExfVVBECTB4MDAwMAogI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9GQkNUTF9FTkFCTEUJMHgwMDAyCiAjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0ZCQ1RMX0RJU0FCTEUJMHgwMDAzCiAKKyNkZWZpbmUgT01BUF9EU1BfTUJDTURfQVVESU9fUFdSX1VQCTB4MDAwMAorI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9BVURJT19QV1JfRE9XTjEJMHgwMDAxCisjZGVmaW5lIE9NQVBfRFNQX01CQ01EX0FVRElPX1BXUl9ET1dOMgkweDAwMDIKKwogI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UREVMX1NBRkUJMHgwMDAwCiAjZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RERUxfS0lMTAkweDAwMDEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAppbmRleCA0ZmNjZTY5Li4xNmE0NTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaApAQCAtMjcsMTEgKzI3LDEyIEBACiAjaWZuZGVmIEFTTV9BUkNIX0RTUF9DT01NT05fSAogI2RlZmluZSBBU01fQVJDSF9EU1BfQ09NTU9OX0gKIAotdm9pZCBvbWFwX2RzcF9wbV9zdXNwZW5kKHZvaWQpOwotdm9pZCBvbWFwX2RzcF9wbV9yZXN1bWUodm9pZCk7Ci12b2lkIG9tYXBfZHNwX3JlcXVlc3RfbXB1aSh2b2lkKTsKLXZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOwotaW50IG9tYXBfZHNwX3JlcXVlc3RfbWVtKHZvaWQpOwotaW50IG9tYXBfZHNwX3JlbGVhc2VfbWVtKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVxdWVzdF9tcHVpKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOworZXh0ZXJuIGludCBvbWFwX2RzcF9yZXF1ZXN0X21lbSh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9kc3BfcmVsZWFzZV9tZW0odm9pZCk7CisKK2V4dGVybiB2b2lkICgqb21hcF9kc3BfYXVkaW9fcHdyX3VwX3JlcXVlc3QpKGludCBzdGFnZSk7CitleHRlcm4gdm9pZCAoKm9tYXBfZHNwX2F1ZGlvX3B3cl9kb3duX3JlcXVlc3QpKGludCBzdGFnZSk7CiAKICNlbmRpZiAvKiBBU01fQVJDSF9EU1BfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpb2V4cGFuZGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDNiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPRVhQQU5ERVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfR1BJT0VYUEFOREVSX0gKKworLyogRnVuY3Rpb24gUHJvdG90eXBlcyBmb3IgR1BJTyBFeHBhbmRlciBmdW5jdGlvbnMgKi8KKworaW50IHJlYWRfZ3Bpb19leHBhKHU4ICosIGludCk7CitpbnQgd3JpdGVfZ3Bpb19leHBhKHU4ICwgaW50KTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9HUElPRVhQQU5ERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCmluZGV4IDU0MDZiODcuLjc5MDliNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKQEAgLTMwNiw2ICszMDYsMTAgQEAKICNpbmNsdWRlICJib2FyZC1oNC5oIgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04KKyNpbmNsdWRlICJib2FyZC1hcG9sbG9uLmgiCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfT1NLCiAjaW5jbHVkZSAiYm9hcmQtb3NrLmgiCiAjZW5kaWYKQEAgLTMxNCwxMCArMzE4LDYgQEAKICNpbmNsdWRlICJib2FyZC12b2ljZWJsdWUuaCIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BQ0hfTkVUU1RBUgotI2luY2x1ZGUgImJvYXJkLW5ldHN0YXIuaCIKLSNlbmRpZgotCiAjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi8KIAogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lyZGEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWFlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lyZGEuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJkYS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEtvbWFsIFNoYWggPGtvbWFsX3NoYWg4MDIwMDNAeWFob28uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNQVJNX0FSQ0hfSVJEQV9ICisjZGVmaW5lIEFTTUFSTV9BUkNIX0lSREFfSAorCisvKiBib2FyZCBzcGVjaWZpYyB0cmFuc2NlaXZlciBjYXBhYmlsaXRpZXMgKi8KKworI2RlZmluZSBJUl9TRUwJCTEJLyogU2VsZWN0cyBJckRBICovCisjZGVmaW5lIElSX1NJUk1PREUJMgorI2RlZmluZSBJUl9GSVJNT0RFCTQKKyNkZWZpbmUgSVJfTUlSTU9ERQk4CisKK3N0cnVjdCBvbWFwX2lyZGFfY29uZmlnIHsKKwlpbnQgdHJhbnNjZWl2ZXJfY2FwOworCWludCAoKnRyYW5zY2VpdmVyX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpOworCWludCAoKnNlbGVjdF9pcmRhKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7CisJLyogVmVyeSBzcGVjaWZpYyB0byB0aGUgbmVlZHMgb2Ygc29tZSBwbGF0Zm9ybXMgKGgzLGg0KQorCSAqIGhhdmluZyBjYWxscyB3aGljaCBjYW4gc2xlZXAgaW4gaXJkYV9zZXRfc3BlZWQuCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGdwaW9fZXhwYTsKKwlpbnQgcnhfY2hhbm5lbDsKKwlpbnQgdHhfY2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQ7CisJaW50IHR4X3RyaWdnZXI7CisJaW50IHJ4X3RyaWdnZXI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKaW5kZXggNGZmY2UxZC4uNDIwOThkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKQEAgLTI0Miw2ICsyNDIsMTEgQEAKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMgkzMAogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTkszCTMxCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzQJMzIKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AxX0lSUV9UWAk1OQorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYCTYwCisjZGVmaW5lIElOVF8yNFhYX01DQlNQMl9JUlFfVFgJNjIKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9SWAk2MworI2RlZmluZSBJTlRfMjRYWF9VQVJUM19JUlEJNzQKIAogLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMCkgYW5kCiAgKiAxNiBNUFVJTyBsaW5lcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9rZXlwYWQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAva2V5cGFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwMjNhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAva2V5cGFkLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2tleXBhZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBLb21hbCBTaGFoIDxrb21hbF9zaGFoODAyMDAzQHlhaG9vLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTUFSTV9BUkNIX0tFWVBBRF9ICisjZGVmaW5lIEFTTUFSTV9BUkNIX0tFWVBBRF9ICisKK3N0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgeworCWludCByb3dzOworCWludCBjb2xzOworCWludCAqa2V5bWFwOworCXVuc2lnbmVkIGludCByZXA6MTsKKwkvKiBzcGVjaWZpYyB0byBPTUFQMjQyeCovCisJdW5zaWduZWQgaW50ICpyb3dfZ3Bpb3M7CisJdW5zaWduZWQgaW50ICpjb2xfZ3Bpb3M7Cit9OworCisvKiBHcm91cCAoMC4uMykgLS0gd2hlbiBtdWx0aXBsZSBrZXlzIGFyZSBwcmVzc2VkLCBvbmx5IHRoZQorICoga2V5cyBwcmVzc2VkIGluIHRoZSBzYW1lIGdyb3VwIGFyZSBjb25zaWRlcmVkIGFzIHByZXNzZWQuIFRoaXMgaXMKKyAqIGluIG9yZGVyIHRvIHdvcmthcm91bmQgY2VydGFpbiBjcmFwcHkgSFcgZGVzaWducyB0aGF0IHByb2R1Y2UgZ2hvc3QKKyAqIGtleXByZXNzZXMuICovCisjZGVmaW5lIEdST1VQXzAJCSgwIDw8IDE2KQorI2RlZmluZSBHUk9VUF8xCQkoMSA8PCAxNikKKyNkZWZpbmUgR1JPVVBfMgkJKDIgPDwgMTYpCisjZGVmaW5lIEdST1VQXzMJCSgzIDw8IDE2KQorI2RlZmluZSBHUk9VUF9NQVNLCUdST1VQXzMKKworI2RlZmluZSBLRVkoY29sLCByb3csIHZhbCkgKCgoY29sKSA8PCAyOCkgfCAoKHJvdykgPDwgMjQpIHwgKHZhbCkpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xjZF9scGg4OTIzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xjZF9scGg4OTIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0ZTY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbGNkX2xwaDg5MjMuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fTENEX0xQSDg5MjNfSAorI2RlZmluZSBfX0xDRF9MUEg4OTIzX0gKKworZW51bSBsY2RfbHBoODkyM190ZXN0X251bSB7CisJTENEX0xQSDg5MjNfVEVTVF9SR0JfTElORVMsCit9OworCitlbnVtIGxjZF9scGg4OTIzX3Rlc3RfcmVzdWx0IHsKKwlMQ0RfTFBIODkyM19URVNUX1NVQ0NFU1MsCisJTENEX0xQSDg5MjNfVEVTVF9JTlZBTElELAorCUxDRF9MUEg4OTIzX1RFU1RfRkFJTEVELAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jYnNwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jYnNwLmgKaW5kZXggZTc5ZDk4YS4uZWQwZGRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY2JzcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWNic3AuaApAQCAtMzcsNiArMzcsMTEgQEAKICNkZWZpbmUgT01BUDE2MTBfTUNCU1AyX0JBU0UJMHhmZmZiMTAwMAogI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDNfQkFTRQkweGUxMDE3MDAwCiAKKyNkZWZpbmUgT01BUDI0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAorI2RlZmluZSBPTUFQMjRYWF9NQ0JTUDJfQkFTRQkweDQ4MDc2MDAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMgkweDAwCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjEJMHgwMgogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIyCTB4MDQKQEAgLTcxLDkgKzc2LDYyIEBACiAKICNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQgMwogCisjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDE1MTBfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQorI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDE1MTBfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQorCisjZGVmaW5lIEFVRElPX01DQlNQCQlPTUFQX01DQlNQMQorI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVBfRE1BX01DQlNQMV9UWAorI2RlZmluZSBBVURJT19ETUFfUlgJCU9NQVBfRE1BX01DQlNQMV9SWAorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjIJMHgwMAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIxCTB4MDQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSMgkweDA4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RYUjEJMHgwQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUENSMgkweDEwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NQQ1IxCTB4MTQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNSMgkweDE4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDUjEJMHgxQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ1IyCTB4MjAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENSMQkweDI0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NSR1IyCTB4MjgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1JHUjEJMHgyQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19NQ1IyCTB4MzAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfTUNSMQkweDM0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJBCTB4MzgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkIJMHgzQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSQQkweDQwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJCCTB4NDQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUENSMAkweDQ4CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJDCTB4NEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkQJMHg1MAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSQwkweDU0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJECTB4NTgKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkUJMHg1QworI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSRgkweDYwCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJFCTB4NjQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkYJMHg2OAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19SQ0VSRwkweDZDCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJICTB4NzAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkcJMHg3NAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSSAkweDc4CisKKyNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQgMgorCisjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQorI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQorCisjZGVmaW5lIEFVRElPX01DQlNQCQlPTUFQX01DQlNQMgorI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgKKyNkZWZpbmUgQVVESU9fRE1BX1JYCQlPTUFQMjRYWF9ETUFfTUNCU1AyX1JYCisKKyNlbmRpZgorCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVBRChiYXNlLCByZWcpCQlfX3Jhd19yZWFkdygoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKICNkZWZpbmUgT01BUF9NQ0JTUF9XUklURShiYXNlLCByZWcsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU1BDUjEgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBSUlNUCQkJMHgwMDAxCiAjZGVmaW5lIFJSRFkJCQkweDAwMDIKQEAgLTE5NSw2ICsyNTMsMTAgQEAKIAlPTUFQX01DQlNQMywKIH0gb21hcF9tY2JzcF9pZDsKIAordHlwZWRlZiBpbnQgX19iaXR3aXNlIG9tYXBfbWNic3BfaW9fdHlwZV90OworI2RlZmluZSBPTUFQX01DQlNQX0lSUV9JTyAoKF9fZm9yY2Ugb21hcF9tY2JzcF9pb190eXBlX3QpIDEpCisjZGVmaW5lIE9NQVBfTUNCU1BfUE9MTF9JTyAoKF9fZm9yY2Ugb21hcF9tY2JzcF9pb190eXBlX3QpIDIpCisKIHR5cGVkZWYgZW51bSB7CiAJT01BUF9NQ0JTUF9XT1JEXzggPSAwLAogCU9NQVBfTUNCU1BfV09SRF8xMiwKQEAgLTI0Niw2ICszMDgsOSBAQAogCiBpbnQgb21hcF9tY2JzcF94bWl0X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKIGludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpOworaW50IG9tYXBfbWNic3Bfc3BpX21hc3Rlcl94bWl0X3dvcmRfcG9sbCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKTsKK2ludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfcmVjdl93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgKiB3b3JkKTsKKwogCiAvKiBTUEkgc3BlY2lmaWMgQVBJICovCiB2b2lkIG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3Bfc3BpX2NmZyAqIHNwaV9jZmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY3NwaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllN2Y0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jc3BpLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfT01BUDJfTUNTUElfSAorI2RlZmluZSBfT01BUDJfTUNTUElfSAorCitzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nCWJhc2U7CisJdW5zaWduZWQgc2hvcnQJbnVtX2NzOworfTsKKworc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgeworCXVuc2lnbmVkIHR1cmJvX21vZGU6MTsKKworCS8qIERvIHdlIHdhbnQgb25lIGNoYW5uZWwgZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lPyAqLworCXVuc2lnbmVkIHNpbmdsZV9jaGFubmVsOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaAppbmRleCA0NmJlOGI4Li44OGNkNGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTkVMQVVTX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU5FTEFVU19ICiAKLWV4dGVybiB2b2lkIG1lbmVsYXVzX21tY19yZWdpc3Rlcih2b2lkICgqY2FsbGJhY2spKHU4IGNhcmRfbWFzayksCitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfcmVnaXN0ZXIodm9pZCAoKmNhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGRhdGEsIHU4IGNhcmRfbWFzayksCiAJCQkJICB1bnNpZ25lZCBsb25nIGRhdGEpOwogZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX3JlbW92ZSh2b2lkKTsKIGV4dGVybiB2b2lkIG1lbmVsYXVzX21tY19vcGVuZHJhaW4oaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAppbmRleCAxMzQxNWE5YS4uMGRjMjRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCkBAIC0xMTIsMTQgKzExMiwxMyBAQAogICogICBhcyBtdXggY29uZmlnCiAgKi8KICNkZWZpbmUgTVVYX0NGR183MzAoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsCVwKLQkJICAgcHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cywJXAotCQkgICBwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cywgZGVidWdfc3RhdHVzKVwKKwkJICAgcHVsbF9iaXQsIHB1bGxfc3RhdHVzLCBkZWJ1Z19zdGF0dXMpXAogewkJCQkJCQlcCiAJLm5hbWUgPQkgZGVzYywJCQkJCVwKIAkuZGVidWcgPSBkZWJ1Z19zdGF0dXMsCQkJCVwKIAlNVVhfUkVHXzczMChtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSkJCVwKIAlQVUxMX1JFR183MzAobXV4X3JlZywgcHVsbF9iaXQsIHB1bGxfc3RhdHVzKQlcCi0JUFVfUERfUkVHKHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzKQkJXAorCVBVX1BEX1JFRyhOQSwgMCkJCVwKIH0sCiAKICNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXApAQCAtMTcyLDYgKzE3MSwxMSBAQAogCUU0XzczMF9LQkMyLAogCUY0XzczMF9LQkMzLAogCUUzXzczMF9LQkM0LAorCisJLyogVVNCICovCisJQUExN183MzBfVVNCX0RNLAorCVcxNl83MzBfVVNCX1BVX0VOLAorCVcxN183MzBfVVNCX1ZCVVNJLAogfTsKIAogZW51bSBvbWFwMXh4eF9pbmRleCB7CkBAIC00MDMsOSArNDA3LDUzIEBACiAJLyogMjR4eCBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KIAlXMTlfMjRYWF9TWVNfTklSUSwKIAorCS8qIDI0eHggY2xvY2sgKi8KKwlXMTRfMjRYWF9TWVNfQ0xLT1VULAorCisJLyogMjQyWCBNY0JTUCAqLworCVkxNV8yNFhYX01DQlNQMl9DTEtYLAorCVIxNF8yNFhYX01DQlNQMl9GU1gsCisJVzE1XzI0WFhfTUNCU1AyX0RSLAorCVYxNV8yNFhYX01DQlNQMl9EWCwKKwogCS8qIDI0eHggR1BJTyAqLworCU0yMV8yNDJYX0dQSU8xMSwKKwlBQTEwXzI0MlhfR1BJTzEzLAorCUFBNl8yNDJYX0dQSU8xNCwKKwlBQTRfMjQyWF9HUElPMTUsCisJWTExXzI0MlhfR1BJTzE2LAorCUFBMTJfMjQyWF9HUElPMTcsCisJQUE4XzI0MlhfR1BJTzU4LAogCVkyMF8yNFhYX0dQSU82MCwKKwlXNF9fMjRYWF9HUElPNzQsCiAJTTE1XzI0WFhfR1BJTzkyLAorCVYxNF8yNFhYX0dQSU8xMTcsCisKKwlQMjBfMjRYWF9UU0NfSVJRLAorCisJLyogVUFSVDMgKi8KKwlLMTVfMjRYWF9VQVJUM19UWCwKKwlLMTRfMjRYWF9VQVJUM19SWCwKKworCS8qIEtleXBhZCBHUElPKi8KKwlUMTlfMjRYWF9LQlIwLAorCVIxOV8yNFhYX0tCUjEsCisJVjE4XzI0WFhfS0JSMiwKKwlNMjFfMjRYWF9LQlIzLAorCUU1X18yNFhYX0tCUjQsCisJTTE4XzI0WFhfS0JSNSwKKwlSMjBfMjRYWF9LQkMwLAorCU0xNF8yNFhYX0tCQzEsCisJSDE5XzI0WFhfS0JDMiwKKwlWMTdfMjRYWF9LQkMzLAorCVAyMV8yNFhYX0tCQzQsCisJTDE0XzI0WFhfS0JDNSwKKwlOMTlfMjRYWF9LQkM2LAorCisJLyogMjR4eCBNZW5lbGF1cyBLZXlwYWQgR1BJTyAqLworCUIzX18yNFhYX0tCUjUsCisJQUE0XzI0WFhfS0JDMiwKKwlCMTNfMjRYWF9LQkM2LAogfTsKIAogI2lmZGVmCUNPTkZJR19PTUFQX01VWApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwLWFsc2EuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcC1hbHNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0Njk1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcC1hbHNhLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAtYWxzYS5oCisgKgorICogQWxzYSBEcml2ZXIgZm9yIEFJQzIzIGFuZCBUU0MyMTAxIGNvZGVjcyBvbiBPTUFQIHBsYXRmb3JtIGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlrYSBMYWl0aW8gPGxhbWlrckBjYy5qeXUuZmk+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhIC0gSU5kVCAtIE1hbmF1cyBCcmF6aWwKKyAqIFdyaXR0ZW4gYnkgRGFuaWVsIFBldHJpbmksIERhdmlkIENvaGVuLCBBbmRlcnNvbiBCcmlnbGlhCisgKiAgICAgICAgICAgIHtkYW5pZWwucGV0cmluaSwgZGF2aWQuY29oZW4sIGFuZGVyc29uLmJyaWdsaWF9QGluZHQub3JnLmJyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgSGlzdG9yeQorICogIC0tLS0tLS0KKyAqCisgKiAgMjAwNS8wNy8yNSBJTmRULTEwTEUgS2VybmVsIFRlYW0gLSAJQWxzYSBkcml2ZXIgZm9yIG9tYXAgb3NrLAorICogIAkJCQkJb3JpZ2luYWwgdmVyc2lvbiBiYXNlZCBpbiBzYTExMDAgZHJpdmVyCisgKiAgCQkJCQlhbmQgb21hcCBvc3MgZHJpdmVyLgorICovCisKKyNpZm5kZWYgX19PTUFQX0FMU0FfSAorI2RlZmluZSBfX09NQVBfQUxTQV9ICisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWNic3AuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2RlZmluZSBETUFfQlVGX1NJWkUJKDEwMjQgKiA4KQorCisvKgorICogQnVmZmVyIG1hbmFnZW1lbnQgZm9yIGFsc2EgYW5kIGRtYQorICovCitzdHJ1Y3QgYXVkaW9fc3RyZWFtIHsKKwljaGFyICppZDsJCS8qIGlkZW50aWZpY2F0aW9uIHN0cmluZyAqLworCWludCBzdHJlYW1faWQ7CQkvKiBudW1lcmljIGlkZW50aWZpY2F0aW9uICovCisJaW50IGRtYV9kZXY7CQkvKiBkbWEgbnVtYmVyIG9mIHRoYXQgZGV2aWNlICovCisJaW50ICpsY2g7CQkvKiBDaGFpbiBvZiBjaGFubmVscyB0aGlzIHN0cmVhbSBpcyBsaW5rZWQgdG8gKi8KKwljaGFyIHN0YXJ0ZWQ7CQkvKiB0byBzdG9yZSBpZiB0aGUgY2hhaW4gd2FzIHN0YXJ0ZWQgb3Igbm90ICovCisJaW50IGRtYV9xX2hlYWQ7CQkvKiBETUEgQ2hhbm5lbCBRIEhlYWQgKi8KKwlpbnQgZG1hX3FfdGFpbDsJCS8qIERNQSBDaGFubmVsIFEgVGFpbCAqLworCWNoYXIgZG1hX3FfY291bnQ7CS8qIERNQSBDaGFubmVsIFEgQ291bnQgKi8KKwlpbnQgYWN0aXZlOjE7CQkvKiB3ZSBhcmUgdXNpbmcgdGhpcyBzdHJlYW0gZm9yIHRyYW5zZmVyIG5vdyAqLworCWludCBwZXJpb2Q7CQkvKiBjdXJyZW50IHRyYW5zZmVyIHBlcmlvZCAqLworCWludCBwZXJpb2RzOwkJLyogY3VycmVudCBjb3VudCBvZiBwZXJpb2RzIHJlZ2lzdGVyZCBpbiB0aGUgRE1BIGVuZ2luZSAqLworCXNwaW5sb2NrX3QgZG1hX2xvY2s7CS8qIGZvciBsb2NraW5nIGluIERNQSBvcGVyYXRpb25zICovCisJc25kX3BjbV9zdWJzdHJlYW1fdCAqc3RyZWFtOwkvKiB0aGUgcGNtIHN0cmVhbSAqLworCXVuc2lnbmVkIGxpbmtlZDoxOwkvKiBkbWEgY2hhbm5lbHMgbGlua2VkICovCisJaW50IG9mZnNldDsJCS8qIHN0b3JlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBlcmlvZCBpbiB0aGUgYWxzYSBidWZmZXIgKi8KKwlpbnQgKCpod19zdGFydCkodm9pZCk7ICAvKiBpbnRlcmZhY2UgdG8gc3RhcnQgSFcgaW50ZXJmYWNlLCBlLmcuIE1jQlNQICovCisJaW50ICgqaHdfc3RvcCkodm9pZCk7ICAgLyogaW50ZXJmYWNlIHRvIHN0b3AgSFcgaW50ZXJmYWNlLCBlLmcuIE1jQlNQICovCit9OworCisvKgorICogQWxzYSBjYXJkIHN0cnVjdHVyZSBmb3IgYWljMjMKKyAqLworc3RydWN0IHNuZF9jYXJkX29tYXBfY29kZWMgeworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc25kX3BjbV90ICpwY207CisJbG9uZyBzYW1wbGVyYXRlOworCXN0cnVjdCBhdWRpb19zdHJlYW0gc1syXTsJLyogcGxheWJhY2sgJiBjYXB0dXJlICovCit9OworCisvKiBDb2RlYyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhbmQgZnVuY3Rpb24gcG9pbnRlcnMuCisgKiBDb2RlYyAob21hcC1hbHNhLWFpYzIzLmMgYW5kIG9tYXAtYWxzYS10c2MyMTAxLmMpCisgKiBhcmUgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nIHRoZSBmdW5jdGlvbiBwb2ludGVycy4KKyAqLworc3RydWN0IG9tYXBfYWxzYV9jb2RlY19jb25maWcgeworCWNoYXIgCSpuYW1lOworCXN0cnVjdAlvbWFwX21jYnNwX3JlZ19jZmcgKm1jYnNwX3JlZ3NfYWxzYTsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdF90ICpod19jb25zdHJhaW50c19yYXRlczsKKwlzbmRfcGNtX2hhcmR3YXJlX3QgKnNuZF9vbWFwX2Fsc2FfcGxheWJhY2s7CisJc25kX3BjbV9oYXJkd2FyZV90ICpzbmRfb21hcF9hbHNhX2NhcHR1cmU7CisJdm9pZAkoKmNvZGVjX2NvbmZpZ3VyZV9kZXYpKHZvaWQpOworCXZvaWQJKCpjb2RlY19zZXRfc2FtcGxlcmF0ZSkobG9uZyk7CisJdm9pZAkoKmNvZGVjX2Nsb2NrX3NldHVwKSh2b2lkKTsKKwlpbnQJKCpjb2RlY19jbG9ja19vbikodm9pZCk7CisJaW50IAkoKmNvZGVjX2Nsb2NrX29mZikodm9pZCk7CisJaW50CSgqZ2V0X2RlZmF1bHRfc2FtcGxlcmF0ZSkodm9pZCk7Cit9OworCisvKioqKioqKioqKiogTWl4ZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHNuZF9vbWFwX21peGVyKHN0cnVjdCBzbmRfY2FyZF9vbWFwX2NvZGVjICopOwordm9pZCBzbmRfb21hcF9pbml0X21peGVyKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BNCit2b2lkIHNuZF9vbWFwX3N1c3BlbmRfbWl4ZXIodm9pZCk7Cit2b2lkIHNuZF9vbWFwX3Jlc3VtZV9taXhlcih2b2lkKTsKKyNlbmRpZgorCitpbnQgc25kX29tYXBfYWxzYV9wb3N0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBvbWFwX2Fsc2FfY29kZWNfY29uZmlnICpjb25maWcpOworaW50IHNuZF9vbWFwX2Fsc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworI2lmZGVmIENPTkZJR19QTQoraW50IHNuZF9vbWFwX2Fsc2Ffc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworaW50IHNuZF9vbWFwX2Fsc2FfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworI2Vsc2UKKyNkZWZpbmUgc25kX29tYXBfYWxzYV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc25kX29tYXBfYWxzYV9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3ZvaWQgY2FsbGJhY2tfb21hcF9hbHNhX3NvdW5kX2RtYSh2b2lkICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCmluZGV4IDRiYTI2MjIuLmZjY2RiM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaApAQCAtMzQsOSArMzQsMTAgQEAKICNkZWZpbmUgT01BUEZCX01JUlJPUgkJT01BUF9JT1coMzEsIGludCkKICNkZWZpbmUgT01BUEZCX1NZTkNfR0ZYCQlPTUFQX0lPKDM3KQogI2RlZmluZSBPTUFQRkJfVlNZTkMJCU9NQVBfSU8oMzgpCi0jZGVmaW5lIE9NQVBGQl9TRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDAsIGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlKQorI2RlZmluZSBPTUFQRkJfU0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQwLCBpbnQpCisjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XX09MRCBPTUFQX0lPVyg0MSwgc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93X29sZCkKICNkZWZpbmUgT01BUEZCX0dFVF9DQVBTCQlPTUFQX0lPUig0MiwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUgT01BUEZCX0dFVF9VUERBVEVfTU9ERQlPTUFQX0lPVyg0MywgZW51bSBvbWFwZmJfdXBkYXRlX21vZGUpCisjZGVmaW5lIE9NQVBGQl9HRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDMsIGludCkKICNkZWZpbmUgT01BUEZCX0xDRF9URVNUCQlPTUFQX0lPVyg0NSwgaW50KQogI2RlZmluZSBPTUFQRkJfQ1RSTF9URVNUCU9NQVBfSU9XKDQ2LCBpbnQpCiAjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XCU9NQVBfSU9XKDQ3LCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cpCkBAIC02Niw5ICs2NywxNCBAQAogfTsKIAogc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93IHsKLQl1MzIgeCwgeTsKLQl1MzIgd2lkdGgsIGhlaWdodDsKLQl1MzIgZm9ybWF0OworCV9fdTMyIHgsIHk7CisJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBmb3JtYXQ7Cit9OworCitzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3dfb2xkIHsKKwlfX3UzMiB4LCB5OworCV9fdTMyIHdpZHRoLCBoZWlnaHQ7CiB9OwogCiBlbnVtIG9tYXBmYl9wbGFuZSB7CkBAIC04MywxNyArODksMTcgQEAKIH07CiAKIHN0cnVjdCBvbWFwZmJfc2V0dXBfcGxhbmUgewotCXU4ICBwbGFuZTsKLQl1OCAgY2hhbm5lbF9vdXQ7Ci0JdTMyIG9mZnNldDsKLQl1MzIgcG9zX3gsIHBvc195OwotCXUzMiB3aWR0aCwgaGVpZ2h0OwotCXUzMiBjb2xvcl9tb2RlOworCV9fdTggIHBsYW5lOworCV9fdTggIGNoYW5uZWxfb3V0OworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBwb3NfeCwgcG9zX3k7CisJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBjb2xvcl9tb2RlOwogfTsKIAogc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUgewotCXU4ICBwbGFuZTsKLQl1OCAgZW5hYmxlOworCV9fdTggIHBsYW5lOworCV9fdTggIGVuYWJsZTsKIH07CiAKIGVudW0gb21hcGZiX2NvbG9yX2tleV90eXBlIHsKQEAgLTEwMywxMCArMTA5LDEwIEBACiB9OwogCiBzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSB7Ci0JdTggIGNoYW5uZWxfb3V0OwotCXUzMiBiYWNrZ3JvdW5kOwotCXUzMiB0cmFuc19rZXk7Ci0JdTggIGtleV90eXBlOworCV9fdTggIGNoYW5uZWxfb3V0OworCV9fdTMyIGJhY2tncm91bmQ7CisJX191MzIgdHJhbnNfa2V5OworCV9fdTggIGtleV90eXBlOwogfTsKIAogZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgewpAQCAtMTIwLDYgKzEyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKICNkZWZpbmUgT01BUF9MQ0RDX0lOVl9WU1lOQyAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgT01BUF9MQ0RDX0lOVl9IU1lOQyAgICAgICAgICAgICAweDAwMDIKQEAgLTE4NCwxOSArMTkzLDM4IEBACiAJaW50IHJlX2N5Y2xlX3RpbWU7CiAJaW50IGNzX3B1bHNlX3dpZHRoOwogCWludCBhY2Nlc3NfdGltZTsKKworCWludCBjbGtfZGl2OworCisJdTMyIHRpbVs1XTsJCS8qIHNldCBieSBleHRpZi0+Y29udmVydF90aW1pbmdzICovCisKKwlpbnQgY29udmVydGVkOwogfTsKIAogc3RydWN0IGxjZF9jdHJsX2V4dGlmIHsKIAlpbnQgICgqaW5pdCkJCSh2b2lkKTsKIAl2b2lkICgqY2xlYW51cCkJCSh2b2lkKTsKKwl2b2lkICgqZ2V0X2Nsa19pbmZvKQkodTMyICpjbGtfcGVyaW9kLCB1MzIgKm1heF9jbGtfZGl2KTsKKwlpbnQgICgqY29udmVydF90aW1pbmdzKQkoc3RydWN0IGV4dGlmX3RpbWluZ3MgKnRpbWluZ3MpOwogCXZvaWQgKCpzZXRfdGltaW5ncykJKGNvbnN0IHN0cnVjdCBleHRpZl90aW1pbmdzICp0aW1pbmdzKTsKLQl2b2lkICgqd3JpdGVfY29tbWFuZCkJKHUzMiBjbWQpOwotCXUzMiAgKCpyZWFkX2RhdGEpCSh2b2lkKTsKLQl2b2lkICgqd3JpdGVfZGF0YSkJKHUzMiBkYXRhKTsKKwl2b2lkICgqc2V0X2JpdHNfcGVyX2N5Y2xlKShpbnQgYnBjKTsKKwl2b2lkICgqd3JpdGVfY29tbWFuZCkJKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdm9pZCAoKnJlYWRfZGF0YSkJKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdm9pZCAoKndyaXRlX2RhdGEpCShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwogCXZvaWQgKCp0cmFuc2Zlcl9hcmVhKQkoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAogCQkJCSB2b2lkIChjYWxsYmFjaykodm9pZCAqIGRhdGEpLCB2b2lkICpkYXRhKTsKKwl1bnNpZ25lZCBsb25nCQltYXhfdHJhbnNtaXRfc2l6ZTsKIH07CiAKK3N0cnVjdCBvbWFwZmJfbm90aWZpZXJfYmxvY2sgeworCXN0cnVjdCBub3RpZmllcl9ibG9jawluYjsKKwl2b2lkCQkJKmRhdGE7Cit9OworCit0eXBlZGVmIGludCAoKm9tYXBmYl9ub3RpZmllcl9jYWxsYmFja190KShzdHJ1Y3Qgb21hcGZiX25vdGlmaWVyX2Jsb2NrICosCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkJCSAgIHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldik7CisKIHN0cnVjdCBsY2RfY3RybCB7CiAJY29uc3QgY2hhcgkqbmFtZTsKIAl2b2lkCQkqZGF0YTsKQEAgLTIwNCw5ICsyMzIsMTEgQEAKIAlpbnQJCSgqaW5pdCkJCSAgKHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiwKIAkJCQkJICAgaW50IGV4dF9tb2RlLCBpbnQgcmVxX3ZyYW1fc2l6ZSk7CiAJdm9pZAkJKCpjbGVhbnVwKQkgICh2b2lkKTsKKwl2b2lkCQkoKmJpbmRfY2xpZW50KQkgIChzdHJ1Y3Qgb21hcGZiX25vdGlmaWVyX2Jsb2NrICpuYik7CiAJdm9pZAkJKCpnZXRfdnJhbV9sYXlvdXQpKHVuc2lnbmVkIGxvbmcgKnNpemUsCiAJCQkJCSAgIHZvaWQgKip2aXJ0X2Jhc2UsCiAJCQkJCSAgIGRtYV9hZGRyX3QgKnBoeXNfYmFzZSk7CisJaW50CQkoKm1tYXApCQkgIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAJdW5zaWduZWQgbG9uZwkoKmdldF9jYXBzKQkgICh2b2lkKTsKIAlpbnQJCSgqc2V0X3VwZGF0ZV9tb2RlKShlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSBtb2RlKTsKIAllbnVtIG9tYXBmYl91cGRhdGVfbW9kZSAoKmdldF91cGRhdGVfbW9kZSkodm9pZCk7CkBAIC0yNDAsNyArMjcwLDcgQEAKIAlpbnQJCQlzdGF0ZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBleHRfbGNkYzsgICAgICAgICAgICAgICAvKiBVc2luZyBleHRlcm5hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQ0QgY29udHJvbGxlciAqLwotCXN0cnVjdCBzZW1hcGhvcmUJcnF1ZXVlX3NlbWE7CisJc3RydWN0IG11dGV4CQlycXVldWVfbXV0ZXg7CiAKIAl2b2lkCQkJKnZyYW1fdmlydF9iYXNlOwogCWRtYV9hZGRyX3QJCXZyYW1fcGh5c19iYXNlOwpAQCAtMjYxLDEyICsyOTEsMTMgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogfTsKIAotZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaDNfcGFuZWw7Ci1leHRlcm4gc3RydWN0IGxjZF9wYW5lbCBoMl9wYW5lbDsKLWV4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIHAyX3BhbmVsOwotZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgb3NrX3BhbmVsOwotZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaW5ub3ZhdG9yMTYxMF9wYW5lbDsKLWV4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIGlubm92YXRvcjE1MTBfcGFuZWw7CitzdHJ1Y3Qgb21hcGZiX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBvbWFwX2xjZF9jb25maWcgICBsY2Q7CisJc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIGZibWVtOworfTsKKworI2RlZmluZSBPTUFQRkJfRVZFTlRfUkVBRFkJMQorI2RlZmluZSBPTUFQRkJfRVZFTlRfRElTQUJMRUQJMgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIGV4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDFfbGNkX2N0cmw7CkBAIC0yNzQsNyArMzA1LDIwIEBACiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAyX2Rpc3BfY3RybDsKICNlbmRpZgogCitleHRlcm4gdm9pZCBvbWFwZmJfcmVnaXN0ZXJfcGFuZWwoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpOwogZXh0ZXJuIHZvaWQgb21hcGZiX3dyaXRlX2ZpcnN0X3BpeGVsKHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiwgdTE2IHBpeHZhbCk7CitleHRlcm4gdm9pZCBvbWFwZmJfbm90aWZ5X2NsaWVudHMoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAorCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCk7CitleHRlcm4gaW50ICBvbWFwZmJfcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBvbWFwZmJfbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSAgICBvbWFwZmJfbm90aWZpZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKwkJCQkgICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CitleHRlcm4gaW50ICBvbWFwZmJfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG9tYXBmYl9ub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCAgb21hcGZiX3VwZGF0ZV93aW5kb3dfYXN5bmMoc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93ICp3aW4sCisJCQkJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSwKKwkJCQkJdm9pZCAqY2FsbGJhY2tfZGF0YSk7CisKKy8qIGluIGFyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgKi8KK2V4dGVybiB2b2lkIG9tYXBmYl9yZXNlcnZlX21lbSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhY2U5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BhcmFtLmgKQEAgLTAsMCArMSw4IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcGFyYW0uaAorICoKKyAqLworCisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSX0haCisjZGVmaW5lIEhaCUNPTkZJR19PTUFQXzMyS19USU1FUl9IWgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKaW5kZXggN2M3OTA0Mi4uMDViMDAzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaApAQCAtNDksNyArNDksNyBAQAogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUG93ZXJtYW5hZ2VtZW50IGJpdG1hc2tzCisgKiBQb3dlciBtYW5hZ2VtZW50IGJpdG1hc2tzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KICNkZWZpbmUgSURMRV9XQUlUX0NZQ0xFUwkJMHgwMDAwMGZmZgpAQCAtMTEyLDMyICsxMTIsNTkgQEAKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCitleHRlcm4gdm9pZCBwcmV2ZW50X2lkbGVfc2xlZXAodm9pZCk7CitleHRlcm4gdm9pZCBhbGxvd19pZGxlX3NsZWVwKHZvaWQpOworCisvKioKKyAqIGNsa19kZW55X2lkbGUgLSBQcmV2ZW50cyB0aGUgY2xvY2sgZnJvbSBiZWluZyBpZGxlZCBkdXJpbmcgTVBVIGlkbGUKKyAqIEBjbGs6IGNsb2NrIHNpZ25hbCBoYW5kbGUKKyAqLwordm9pZCBjbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7CisKKy8qKgorICogY2xrX2FsbG93X2lkbGUgLSBDb3VudGVycyBwcmV2aW91cyBjbGtfZGVueV9pZGxlCisgKiBAY2xrOiBjbG9jayBzaWduYWwgaGFuZGxlCisgKi8KK3ZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworCiBleHRlcm4gdm9pZCBvbWFwX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXAyNHh4X2NwdV9zdXNwZW5kKHUzMiBkbGxfY3RybCwgdTMyIGNwdV9yZXZpc2lvbik7CiBleHRlcm4gdm9pZCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgaW50IG9tYXA3MzBfY3B1X3N1c3BlbmRfc3o7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTYxMF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDI0eHhfY3B1X3N1c3BlbmRfc3o7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3o7CitleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmRfc3o7CiAKICNpZmRlZiBDT05GSUdfT01BUF9TRVJJQUxfV0FLRQogZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfd2FrZV90cmlnZ2VyKGludCBlbmFibGUpOwogI2Vsc2UKKyNkZWZpbmUgb21hcF9zZXJpYWxfd2FrZXVwX2luaXQoKQl7fQogI2RlZmluZSBvbWFwX3NlcmlhbF93YWtlX3RyaWdnZXIoeCkJe30KICNlbmRpZgkvKiBDT05GSUdfT01BUF9TRVJJQUxfV0FLRSAqLwogCi1leHRlcm4gdW5zaWduZWQgaW50IG9tYXA3MzBfY3B1X3N1c3BlbmRfc3o7Ci1leHRlcm4gdW5zaWduZWQgaW50IG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3o7Ci1leHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6OwotZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKLWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE2MTBfY3B1X3N1c3BlbmRfc3o7Ci1leHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwotCiAjZGVmaW5lIEFSTV9TQVZFKHgpIGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCiAjZGVmaW5lIEFSTV9SRVNUT1JFKHgpIG9tYXBfd3JpdGVsKChhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQogI2RlZmluZSBBUk1fU0hPVyh4KSBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV8jI3hdCiAKKyNkZWZpbmUgRFNQX1NBVkUoeCkgZHNwX3NsZWVwX3NhdmVbRFNQX1NMRUVQX1NBVkVfIyN4XSA9IF9fcmF3X3JlYWR3KHgpCisjZGVmaW5lIERTUF9SRVNUT1JFKHgpIF9fcmF3X3dyaXRldygoZHNwX3NsZWVwX3NhdmVbRFNQX1NMRUVQX1NBVkVfIyN4XSksICh4KSkKKyNkZWZpbmUgRFNQX1NIT1coeCkgZHNwX3NsZWVwX3NhdmVbRFNQX1NMRUVQX1NBVkVfIyN4XQorCiAjZGVmaW5lIFVMUERfU0FWRSh4KSB1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWR3KHgpCiAjZGVmaW5lIFVMUERfUkVTVE9SRSh4KSBvbWFwX3dyaXRldygodWxwZF9zbGVlcF9zYXZlW1VMUERfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQogI2RlZmluZSBVTFBEX1NIT1coeCkgdWxwZF9zbGVlcF9zYXZlW1VMUERfU0xFRVBfU0FWRV8jI3hdCkBAIC0xNTQsNiArMTgxLDEwIEBACiAjZGVmaW5lIE1QVUkxNjEwX1JFU1RPUkUoeCkgb21hcF93cml0ZWwoKG1wdWkxNjEwX3NsZWVwX3NhdmVbTVBVSTE2MTBfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQogI2RlZmluZSBNUFVJMTYxMF9TSE9XKHgpIG1wdWkxNjEwX3NsZWVwX3NhdmVbTVBVSTE2MTBfU0xFRVBfU0FWRV8jI3hdCiAKKyNkZWZpbmUgT01BUDI0WFhfU0FWRSh4KSBvbWFwMjR4eF9zbGVlcF9zYXZlW09NQVAyNFhYX1NMRUVQX1NBVkVfIyN4XSA9IHgKKyNkZWZpbmUgT01BUDI0WFhfUkVTVE9SRSh4KSB4ID0gb21hcDI0eHhfc2xlZXBfc2F2ZVtPTUFQMjRYWF9TTEVFUF9TQVZFXyMjeF0KKyNkZWZpbmUgT01BUDI0WFhfU0hPVyh4KSBvbWFwMjR4eF9zbGVlcF9zYXZlW09NQVAyNFhYX1NMRUVQX1NBVkVfIyN4XQorCiAvKgogICogTGlzdCBvZiBnbG9iYWwgT01BUCByZWdpc3RlcnMgdG8gcHJlc2VydmUuCiAgKiBNb3JlIG9uZXMgbGlrZSBDUCBhbmQgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIHZhbHVlcyBhcmUgcHJlc2VydmVkCkBAIC0xNzYsNiArMjA3LDE1IEBACiAJQVJNX1NMRUVQX1NBVkVfU0laRQogfTsKIAorZW51bSBkc3Bfc2F2ZV9zdGF0ZSB7CisJRFNQX1NMRUVQX1NBVkVfU1RBUlQgPSAwLAorCS8qCisJICogRFNQIHJlZ2lzdGVycyAxNiBiaXRzCisJICovCisJRFNQX1NMRUVQX1NBVkVfRFNQX0lETEVDVDIsCisJRFNQX1NMRUVQX1NBVkVfU0laRQorfTsKKwogZW51bSB1bHBkX3NhdmVfc3RhdGUgewogCVVMUERfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCiAJLyoKQEAgLTI1NCw1ICsyOTQsMzAgQEAKICNlbmRpZgogfTsKIAorZW51bSBvbWFwMjR4eF9zYXZlX3N0YXRlIHsKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX1NUQVJUID0gMCwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0lOVENfTUlSMCwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0lOVENfTUlSMSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0lOVENfTUlSMiwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0ZDTEtFTjFfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0ZDTEtFTjJfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjFfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjJfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjRfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0dQSU8xX0lSUUVOQUJMRTEsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9HUElPMl9JUlFFTkFCTEUxLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfR1BJTzNfSVJRRU5BQkxFMSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0dQSU80X0lSUUVOQUJMRTEsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9HUElPM19PRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0dQSU80X09FLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfR1BJTzNfUklTSU5HREVURUNULAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfR1BJTzNfRkFMTElOR0RFVEVDVCwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NPTlRST0xfUEFEQ09ORl9TUEkxX05DUzIsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0RYLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ09OVFJPTF9QQURDT05GX1NTSTFfRkxBR19UWCwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NPTlRST0xfUEFEQ09ORl9TWVNfTklSUVcwLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfU0laRQorfTsKKwogI2VuZGlmIC8qIEFTU0VNQkxFUiAqLwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9QTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ByY20uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCmluZGV4IDdiNDhhNWMuLjdiY2FmOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCkBAIC0xLDUgKzEsNyBAQAogLyoKLSAqIHByY20uaCAtIEFjY2VzcyBkZWZpbmF0aW9ucyBmb3IgdXNlIGluIE9NQVAyNFhYIGNsb2NrIGFuZCBwb3dlciBtYW5hZ2VtZW50CisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ByY20uaAorICoKKyAqIEFjY2VzcyBkZWZpbmF0aW9ucyBmb3IgdXNlIGluIE9NQVAyNFhYIGNsb2NrIGFuZCBwb3dlciBtYW5hZ2VtZW50CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCiAgKgpAQCAtMjEsNDA1ICsyMyw3IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAogCi0vKiBTRVRfUEVSRk9STUFOQ0VfTEVWRUwgUEFSQU1FVEVSUyAqLwotI2RlZmluZSBQUkNNX0hBTEZfU1BFRUQgMQotI2RlZmluZSBQUkNNX0ZVTExfU1BFRUQgMgotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotI2RlZmluZSBQUkNNX1JFRzMyKG9mZnNldCkJX19SRUczMihPTUFQMjRYWF9QUkNNX0JBU0UgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBQUkNNX1JFVklTSU9OCQlQUkNNX1JFRzMyKDB4MDAwKQotI2RlZmluZSBQUkNNX1NZU0NPTkZJRwkJUFJDTV9SRUczMigweDAxMCkKLSNkZWZpbmUgUFJDTV9JUlFTVEFUVVNfTVBVCVBSQ01fUkVHMzIoMHgwMTgpCi0jZGVmaW5lIFBSQ01fSVJRRU5BQkxFX01QVQlQUkNNX1JFRzMyKDB4MDFDKQotI2RlZmluZSBQUkNNX1ZPTFRDVFJMCQlQUkNNX1JFRzMyKDB4MDUwKQotI2RlZmluZSBQUkNNX1ZPTFRTVAkJUFJDTV9SRUczMigweDA1NCkKLSNkZWZpbmUgUFJDTV9DTEtTUkNfQ1RSTAlQUkNNX1JFRzMyKDB4MDYwKQotI2RlZmluZSBQUkNNX0NMS09VVF9DVFJMCVBSQ01fUkVHMzIoMHgwNzApCi0jZGVmaW5lIFBSQ01fQ0xLRU1VTF9DVFJMCVBSQ01fUkVHMzIoMHgwNzgpCi0jZGVmaW5lIFBSQ01fQ0xLQ0ZHX0NUUkwJUFJDTV9SRUczMigweDA4MCkKLSNkZWZpbmUgUFJDTV9DTEtDRkdfU1RBVFVTCVBSQ01fUkVHMzIoMHgwODQpCi0jZGVmaW5lIFBSQ01fVk9MVFNFVFVQCQlQUkNNX1JFRzMyKDB4MDkwKQotI2RlZmluZSBQUkNNX0NMS1NTRVRVUAkJUFJDTV9SRUczMigweDA5NCkKLSNkZWZpbmUgUFJDTV9QT0xDVFJMCQlQUkNNX1JFRzMyKDB4MDk4KQotCi0vKiBHRU5FUkFMIFBVUlBPU0UgKi8KLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMQlQUkNNX1JFRzMyKDB4MEIwKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyCVBSQ01fUkVHMzIoMHgwQjQpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTMJUFJDTV9SRUczMigweDBCOCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNAlQUkNNX1JFRzMyKDB4MEJDKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U1CVBSQ01fUkVHMzIoMHgwQzApCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTYJUFJDTV9SRUczMigweDBDNCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNwlQUkNNX1JFRzMyKDB4MEM4KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U4CVBSQ01fUkVHMzIoMHgwQ0MpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTkJUFJDTV9SRUczMigweDBEMCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTAJUFJDTV9SRUczMigweDBENCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTEJUFJDTV9SRUczMigweDBEOCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTIJUFJDTV9SRUczMigweDBEQykKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTMJUFJDTV9SRUczMigweDBFMCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTQJUFJDTV9SRUczMigweDBFNCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTUJUFJDTV9SRUczMigweDBFOCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTYJUFJDTV9SRUczMigweDBFQykKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTcJUFJDTV9SRUczMigweDBGMCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTgJUFJDTV9SRUczMigweDBGNCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTkJUFJDTV9SRUczMigweDBGOCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMjAJUFJDTV9SRUczMigweDBGQykKLQotLyogTVBVICovCi0jZGVmaW5lIENNX0NMS1NFTF9NUFUJCVBSQ01fUkVHMzIoMHgxNDApCi0jZGVmaW5lIENNX0NMS1NUQ1RSTF9NUFUJUFJDTV9SRUczMigweDE0OCkKLSNkZWZpbmUgUk1fUlNUU1RfTVBVCQlQUkNNX1JFRzMyKDB4MTU4KQotI2RlZmluZSBQTV9XS0RFUF9NUFUJCVBSQ01fUkVHMzIoMHgxQzgpCi0jZGVmaW5lIFBNX0VWR0VOQ1RSTF9NUFUJUFJDTV9SRUczMigweDFENCkKLSNkZWZpbmUgUE1fRVZFR0VOT05USU1fTVBVCVBSQ01fUkVHMzIoMHgxRDgpCi0jZGVmaW5lIFBNX0VWRUdFTk9GRlRJTV9NUFUJUFJDTV9SRUczMigweDFEQykKLSNkZWZpbmUgUE1fUFdTVENUUkxfTVBVCQlQUkNNX1JFRzMyKDB4MUUwKQotI2RlZmluZSBQTV9QV1NUU1RfTVBVCQlQUkNNX1JFRzMyKDB4MUU0KQotCi0vKiBDT1JFICovCi0jZGVmaW5lIENNX0ZDTEtFTjFfQ09SRQkJUFJDTV9SRUczMigweDIwMCkKLSNkZWZpbmUgQ01fRkNMS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjA0KQotI2RlZmluZSBDTV9GQ0xLRU4zX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDgpCi0jZGVmaW5lIENNX0lDTEtFTjFfQ09SRQkJUFJDTV9SRUczMigweDIxMCkKLSNkZWZpbmUgQ01fSUNMS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjE0KQotI2RlZmluZSBDTV9JQ0xLRU4zX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTgpCi0jZGVmaW5lIENNX0lDTEtFTjRfQ09SRQkJUFJDTV9SRUczMigweDIxQykKLSNkZWZpbmUgQ01fSURMRVNUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjIwKQotI2RlZmluZSBDTV9JRExFU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjQpCi0jZGVmaW5lIENNX0lETEVTVDNfQ09SRQkJUFJDTV9SRUczMigweDIyOCkKLSNkZWZpbmUgQ01fSURMRVNUNF9DT1JFCQlQUkNNX1JFRzMyKDB4MjJDKQotI2RlZmluZSBDTV9BVVRPSURMRTFfQ09SRQlQUkNNX1JFRzMyKDB4MjMwKQotI2RlZmluZSBDTV9BVVRPSURMRTJfQ09SRQlQUkNNX1JFRzMyKDB4MjM0KQotI2RlZmluZSBDTV9BVVRPSURMRTNfQ09SRQlQUkNNX1JFRzMyKDB4MjM4KQotI2RlZmluZSBDTV9BVVRPSURMRTRfQ09SRQlQUkNNX1JFRzMyKDB4MjNDKQotI2RlZmluZSBDTV9DTEtTRUwxX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDApCi0jZGVmaW5lIENNX0NMS1NFTDJfQ09SRQkJUFJDTV9SRUczMigweDI0NCkKLSNkZWZpbmUgQ01fQ0xLU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDI0OCkKLSNkZWZpbmUgUE1fV0tFTjFfQ09SRQkJUFJDTV9SRUczMigweDJBMCkKLSNkZWZpbmUgUE1fV0tFTjJfQ09SRQkJUFJDTV9SRUczMigweDJBNCkKLSNkZWZpbmUgUE1fV0tTVDFfQ09SRQkJUFJDTV9SRUczMigweDJCMCkKLSNkZWZpbmUgUE1fV0tTVDJfQ09SRQkJUFJDTV9SRUczMigweDJCNCkKLSNkZWZpbmUgUE1fV0tERVBfQ09SRQkJUFJDTV9SRUczMigweDJDOCkKLSNkZWZpbmUgUE1fUFdTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MkUwKQotI2RlZmluZSBQTV9QV1NUU1RfQ09SRQkJUFJDTV9SRUczMigweDJFNCkKLQotLyogR0ZYICovCi0jZGVmaW5lIENNX0ZDTEtFTl9HRlgJCVBSQ01fUkVHMzIoMHgzMDApCi0jZGVmaW5lIENNX0lDTEtFTl9HRlgJCVBSQ01fUkVHMzIoMHgzMTApCi0jZGVmaW5lIENNX0lETEVTVF9HRlgJCVBSQ01fUkVHMzIoMHgzMjApCi0jZGVmaW5lIENNX0NMS1NFTF9HRlgJCVBSQ01fUkVHMzIoMHgzNDApCi0jZGVmaW5lIENNX0NMS1NUQ1RSTF9HRlgJUFJDTV9SRUczMigweDM0OCkKLSNkZWZpbmUgUk1fUlNUQ1RSTF9HRlgJCVBSQ01fUkVHMzIoMHgzNTApCi0jZGVmaW5lIFJNX1JTVFNUX0dGWAkJUFJDTV9SRUczMigweDM1OCkKLSNkZWZpbmUgUE1fV0tERVBfR0ZYCQlQUkNNX1JFRzMyKDB4M0M4KQotI2RlZmluZSBQTV9QV1NUQ1RSTF9HRlgJCVBSQ01fUkVHMzIoMHgzRTApCi0jZGVmaW5lIFBNX1BXU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzRTQpCi0KLS8qIFdBS0UtVVAgKi8KLSNkZWZpbmUgQ01fRkNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MDApCi0jZGVmaW5lIENNX0lDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDEwKQotI2RlZmluZSBDTV9JRExFU1RfV0tVUAkJUFJDTV9SRUczMigweDQyMCkKLSNkZWZpbmUgQ01fQVVUT0lETEVfV0tVUAlQUkNNX1JFRzMyKDB4NDMwKQotI2RlZmluZSBDTV9DTEtTRUxfV0tVUAkJUFJDTV9SRUczMigweDQ0MCkKLSNkZWZpbmUgUk1fUlNUQ1RSTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDUwKQotI2RlZmluZSBSTV9SU1RUSU1FX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTQpCi0jZGVmaW5lIFJNX1JTVFNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTgpCi0jZGVmaW5lIFBNX1dLRU5fV0tVUAkJUFJDTV9SRUczMigweDRBMCkKLSNkZWZpbmUgUE1fV0tTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NEIwKQotCi0vKiBDTE9DS1MgKi8KLSNkZWZpbmUgQ01fQ0xLRU5fUExMCQlQUkNNX1JFRzMyKDB4NTAwKQotI2RlZmluZSBDTV9JRExFU1RfQ0tHRU4JCVBSQ01fUkVHMzIoMHg1MjApCi0jZGVmaW5lIENNX0FVVE9JRExFX1BMTAkJUFJDTV9SRUczMigweDUzMCkKLSNkZWZpbmUgQ01fQ0xLU0VMMV9QTEwJCVBSQ01fUkVHMzIoMHg1NDApCi0jZGVmaW5lIENNX0NMS1NFTDJfUExMCQlQUkNNX1JFRzMyKDB4NTQ0KQotCi0vKiBEU1AgKi8KLSNkZWZpbmUgQ01fRkNMS0VOX0RTUAkJUFJDTV9SRUczMigweDgwMCkKLSNkZWZpbmUgQ01fSUNMS0VOX0RTUAkJUFJDTV9SRUczMigweDgxMCkKLSNkZWZpbmUgQ01fSURMRVNUX0RTUAkJUFJDTV9SRUczMigweDgyMCkKLSNkZWZpbmUgQ01fQVVUT0lETEVfRFNQCQlQUkNNX1JFRzMyKDB4ODMwKQotI2RlZmluZSBDTV9DTEtTRUxfRFNQCQlQUkNNX1JFRzMyKDB4ODQwKQotI2RlZmluZSBDTV9DTEtTVENUUkxfRFNQCVBSQ01fUkVHMzIoMHg4NDgpCi0jZGVmaW5lIFJNX1JTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4ODUwKQotI2RlZmluZSBSTV9SU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4NTgpCi0jZGVmaW5lIFBNX1dLRU5fRFNQCQlQUkNNX1JFRzMyKDB4OEEwKQotI2RlZmluZSBQTV9XS0RFUF9EU1AJCVBSQ01fUkVHMzIoMHg4QzgpCi0jZGVmaW5lIFBNX1BXU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDhFMCkKLSNkZWZpbmUgUE1fUFdTVFNUX0RTUAkJUFJDTV9SRUczMigweDhFNCkKLSNkZWZpbmUgUFJDTV9JUlFTVEFUVVNfRFNQCVBSQ01fUkVHMzIoMHg4RjApCi0jZGVmaW5lIFBSQ01fSVJRRU5BQkxFX0RTUAlQUkNNX1JFRzMyKDB4OEY0KQotCi0vKiBJVkEgKi8KLSNkZWZpbmUgUFJDTV9JUlFTVEFUVVNfSVZBCVBSQ01fUkVHMzIoMHg4RjgpCi0jZGVmaW5lIFBSQ01fSVJRRU5BQkxFX0lWQQlQUkNNX1JFRzMyKDB4OEZDKQotCi0vKiBNb2RlbSBvbiAyNDMwICovCi0jZGVmaW5lIENNX0ZDTEtFTl9NRE0JCVBSQ01fUkVHMzIoMHhDMDApCi0jZGVmaW5lIENNX0lDTEtFTl9NRE0JCVBSQ01fUkVHMzIoMHhDMTApCi0jZGVmaW5lIENNX0lETEVTVF9NRE0JCVBSQ01fUkVHMzIoMHhDMjApCi0jZGVmaW5lIENNX0NMS1NFTF9NRE0JCVBSQ01fUkVHMzIoMHhDNDApCi0KLS8qIEZJWE1FOiBNb3ZlIHRvIGhlYWRlciBmb3IgMjQzMCAqLwotI2RlZmluZSBESVNQX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NTAwMDApCi0jZGVmaW5lIERJU1BfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKERJU1BfQkFTRSArIChvZmZzZXQpKQotCi0jZGVmaW5lIE9NQVAyNFhYX0dQTUNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHhhMDAwKQotI2RlZmluZSBHUE1DX0JBU0UJCShPTUFQMjRYWF9HUE1DX0JBU0UpCi0jZGVmaW5lIEdQTUNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQTUNfQkFTRSArIChvZmZzZXQpKQotCi0jZGVmaW5lIEdQVDFfQkFTRQkJKE9NQVAyNFhYX0dQVDEpCi0jZGVmaW5lIEdQVDFfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQVDFfQkFTRSArIChvZmZzZXQpKQotCi0vKiBNaXNjIHN5c2NvbmZpZyAqLwotI2RlZmluZSBESVNQQ19TWVNDT05GSUcJCURJU1BfUkVHMzIoMHg0MTApCi0jZGVmaW5lIFNQSV9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDk4MDAwKQotI2RlZmluZSBNQ1NQSTFfU1lTQ09ORklHCV9fUkVHMzIoU1BJX0JBU0UgKyAweDEwKQotI2RlZmluZSBNQ1NQSTJfU1lTQ09ORklHCV9fUkVHMzIoU1BJX0JBU0UrMHgyMDAwICsgMHgxMCkKLQotLy8jZGVmaW5lIERTUF9NTVVfU1lTQ09ORklHCTB4NUEwMDAwMTAKLSNkZWZpbmUgQ0FNRVJBX01NVV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyQzEwKQotLy8jZGVmaW5lIElWQV9NTVVfU1lTQ09ORklHCTB4NUQwMDAwMTAKLS8vI2RlZmluZSBEU1BfRE1BX1NZU0NPTkZJRwkweDAwRkNDMDJDCi0jZGVmaW5lIENBTUVSQV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MjgyQykKLSNkZWZpbmUgU1lTVEVNX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHg2MDJDKQotI2RlZmluZSBHUE1DX1NZU0NPTkZJRwkJR1BNQ19SRUczMigweDAxMCkKLSNkZWZpbmUgTUFJTEJPWEVTX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5NDAxMCkKLSNkZWZpbmUgVUFSVDFfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QTA1NCkKLSNkZWZpbmUgVUFSVDJfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QzA1NCkKLSNkZWZpbmUgVUFSVDNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2RTA1NCkKLS8vI2RlZmluZSBJVkFfU1lTQ09ORklHCQkweDVDMDYwMDEwCi0jZGVmaW5lIFNEUkNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDEwKQotI2RlZmluZSBTTVNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NNU19CQVNFKzB4MTApCi0jZGVmaW5lIFNTSV9TWVNDT05GSUcJCV9fUkVHMzIoRElTUF9CQVNFKzB4ODAxMCkKLS8vI2RlZmluZSBWTFlOUV9TWVNDT05GSUcJMHg2N0ZGRkUxMAotCi0vKiBya3cgLSBnb29kIGNhbm5pZGF0ZXMgZm9yIFBNXyB0byBzdGFydCB3aGF0IG5tIHdhcyB0cnlpbmcgKi8KLSNkZWZpbmUgT01BUDI0WFhfR1BUMgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHgyQTAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUNAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3QTAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUNQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3QzAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUNgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3RTAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUNwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4MDAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUOAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4MjAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUOQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4NDAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTAJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODYwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDExCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg4MDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQxMgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4QTAwMCkKLQotI2RlZmluZSBHUFRJTUVSMV9TWVNDT05GSUcJR1BUMV9SRUczMigweDAxMCkKLSNkZWZpbmUgR1BUSU1FUjJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMiArIDB4MTApCi0jZGVmaW5lIEdQVElNRVIzX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDMgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSNF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ0ICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjVfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNSArIDB4MTApCi0jZGVmaW5lIEdQVElNRVI2X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDYgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSN19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ3ICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjhfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUOCArIDB4MTApCi0jZGVmaW5lIEdQVElNRVI5X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDkgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSMTBfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTAgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSMTFfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTEgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSMTJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTIgKyAweDEwKQotCi0jZGVmaW5lIEdQSU9YX0JBU0UoWCkJCShPTUFQMjRYWF9HUElPX0JBU0UrKDB4MjAwMCooKFgpLTEpKSkKLQotI2RlZmluZSBHUElPMV9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMSkrMHgxMCkpCi0jZGVmaW5lIEdQSU8yX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgyKSsweDEwKSkKLSNkZWZpbmUgR1BJTzNfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDMpKzB4MTApKQotI2RlZmluZSBHUElPNF9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoNCkrMHgxMCkpCi0KLS8qIEdQIFRJTUVSIDEgKi8KLSNkZWZpbmUgR1BUSU1FUjFfVElTVEFUCQlHUFQxX1JFRzMyKDB4MDE0KQotI2RlZmluZSBHUFRJTUVSMV9USVNSCQlHUFQxX1JFRzMyKDB4MDE4KQotI2RlZmluZSBHUFRJTUVSMV9USUVSCQlHUFQxX1JFRzMyKDB4MDFDKQotI2RlZmluZSBHUFRJTUVSMV9UV0VSCQlHUFQxX1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUFRJTUVSMV9UQ0xSCQlHUFQxX1JFRzMyKDB4MDI0KQotI2RlZmluZSBHUFRJTUVSMV9UQ1JSCQlHUFQxX1JFRzMyKDB4MDI4KQotI2RlZmluZSBHUFRJTUVSMV9UTERSCQlHUFQxX1JFRzMyKDB4MDJDKQotI2RlZmluZSBHUFRJTUVSMV9UVEdSCQlHUFQxX1JFRzMyKDB4MDMwKQotI2RlZmluZSBHUFRJTUVSMV9UV1BTCQlHUFQxX1JFRzMyKDB4MDM0KQotI2RlZmluZSBHUFRJTUVSMV9UTUFSCQlHUFQxX1JFRzMyKDB4MDM4KQotI2RlZmluZSBHUFRJTUVSMV9UQ0FSMQkJR1BUMV9SRUczMigweDAzQykKLSNkZWZpbmUgR1BUSU1FUjFfVFNJQ1IJCUdQVDFfUkVHMzIoMHgwNDApCi0jZGVmaW5lIEdQVElNRVIxX1RDQVIyCQlHUFQxX1JFRzMyKDB4MDQ0KQotCi0vKiBya3cgLS0gYmFzZSBmaXggdXAgcGxlYXNlLi4uICovCi0jZGVmaW5lIEdQVElNRVIzX1RJU1IJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDc4MDE4KQotCi0vKiBTRFJDICovCi0jZGVmaW5lIFNEUkNfRExMQV9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2MCkKLSNkZWZpbmUgU0RSQ19ETExBX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2NCkKLSNkZWZpbmUgU0RSQ19ETExCX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY4KQotI2RlZmluZSBTRFJDX0RMTEJfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDZDKQotI2RlZmluZSBTRFJDX1BPV0VSCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA3MCkKLSNkZWZpbmUgU0RSQ19NUl8wCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA4NCkKLQotLyogR1BJTyAxICovCi0jZGVmaW5lIEdQSU8xX0JBU0UJCUdQSU9YX0JBU0UoMSkKLSNkZWZpbmUgR1BJTzFfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8xX0JBU0UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgR1BJTzFfSVJRRU5BQkxFMQlHUElPMV9SRUczMigweDAxQykKLSNkZWZpbmUgR1BJTzFfSVJRU1RBVFVTMQlHUElPMV9SRUczMigweDAxOCkKLSNkZWZpbmUgR1BJTzFfSVJRRU5BQkxFMglHUElPMV9SRUczMigweDAyQykKLSNkZWZpbmUgR1BJTzFfSVJRU1RBVFVTMglHUElPMV9SRUczMigweDAyOCkKLSNkZWZpbmUgR1BJTzFfV0FLRVVQRU5BQkxFCUdQSU8xX1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUElPMV9SSVNJTkdERVRFQ1QJR1BJTzFfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIEdQSU8xX0RBVEFJTgkJR1BJTzFfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQSU8xX09FCQlHUElPMV9SRUczMigweDAzNCkKLSNkZWZpbmUgR1BJTzFfREFUQU9VVAkJR1BJTzFfUkVHMzIoMHgwM0MpCi0KLS8qIEdQSU8yICovCi0jZGVmaW5lIEdQSU8yX0JBU0UJCUdQSU9YX0JBU0UoMikKLSNkZWZpbmUgR1BJTzJfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8yX0JBU0UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgR1BJTzJfSVJRRU5BQkxFMQlHUElPMl9SRUczMigweDAxQykKLSNkZWZpbmUgR1BJTzJfSVJRU1RBVFVTMQlHUElPMl9SRUczMigweDAxOCkKLSNkZWZpbmUgR1BJTzJfSVJRRU5BQkxFMglHUElPMl9SRUczMigweDAyQykKLSNkZWZpbmUgR1BJTzJfSVJRU1RBVFVTMglHUElPMl9SRUczMigweDAyOCkKLSNkZWZpbmUgR1BJTzJfV0FLRVVQRU5BQkxFCUdQSU8yX1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUElPMl9SSVNJTkdERVRFQ1QJR1BJTzJfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIEdQSU8yX0RBVEFJTgkJR1BJTzJfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQSU8yX09FCQlHUElPMl9SRUczMigweDAzNCkKLSNkZWZpbmUgR1BJTzJfREFUQU9VVAkJR1BJTzJfUkVHMzIoMHgwM0MpCi0KLS8qIEdQSU8gMyAqLwotI2RlZmluZSBHUElPM19CQVNFCQlHUElPWF9CQVNFKDMpCi0jZGVmaW5lIEdQSU8zX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPM19CQVNFICsgKG9mZnNldCkpCi0jZGVmaW5lIEdQSU8zX0lSUUVOQUJMRTEJR1BJTzNfUkVHMzIoMHgwMUMpCi0jZGVmaW5lIEdQSU8zX0lSUVNUQVRVUzEJR1BJTzNfUkVHMzIoMHgwMTgpCi0jZGVmaW5lIEdQSU8zX0lSUUVOQUJMRTIJR1BJTzNfUkVHMzIoMHgwMkMpCi0jZGVmaW5lIEdQSU8zX0lSUVNUQVRVUzIJR1BJTzNfUkVHMzIoMHgwMjgpCi0jZGVmaW5lIEdQSU8zX1dBS0VVUEVOQUJMRQlHUElPM19SRUczMigweDAyMCkKLSNkZWZpbmUgR1BJTzNfUklTSU5HREVURUNUCUdQSU8zX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBHUElPM19GQUxMSU5HREVURUNUCUdQSU8zX1JFRzMyKDB4MDRDKQotI2RlZmluZSBHUElPM19EQVRBSU4JCUdQSU8zX1JFRzMyKDB4MDM4KQotI2RlZmluZSBHUElPM19PRQkJR1BJTzNfUkVHMzIoMHgwMzQpCi0jZGVmaW5lIEdQSU8zX0RBVEFPVVQJCUdQSU8zX1JFRzMyKDB4MDNDKQotI2RlZmluZSBHUElPM19ERUJPVU5DRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDUwKQotI2RlZmluZSBHUElPM19ERUJPVU5DSU5HVElNRQlHUElPM19SRUczMigweDA1NCkKLQotLyogR1BJTyA0ICovCi0jZGVmaW5lIEdQSU80X0JBU0UJCUdQSU9YX0JBU0UoNCkKLSNkZWZpbmUgR1BJTzRfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU80X0JBU0UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgR1BJTzRfSVJRRU5BQkxFMQlHUElPNF9SRUczMigweDAxQykKLSNkZWZpbmUgR1BJTzRfSVJRU1RBVFVTMQlHUElPNF9SRUczMigweDAxOCkKLSNkZWZpbmUgR1BJTzRfSVJRRU5BQkxFMglHUElPNF9SRUczMigweDAyQykKLSNkZWZpbmUgR1BJTzRfSVJRU1RBVFVTMglHUElPNF9SRUczMigweDAyOCkKLSNkZWZpbmUgR1BJTzRfV0FLRVVQRU5BQkxFCUdQSU80X1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUElPNF9SSVNJTkdERVRFQ1QJR1BJTzRfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIEdQSU80X0ZBTExJTkdERVRFQ1QJR1BJTzRfUkVHMzIoMHgwNEMpCi0jZGVmaW5lIEdQSU80X0RBVEFJTgkJR1BJTzRfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQSU80X09FCQlHUElPNF9SRUczMigweDAzNCkKLSNkZWZpbmUgR1BJTzRfREFUQU9VVAkJR1BJTzRfUkVHMzIoMHgwM0MpCi0jZGVmaW5lIEdQSU80X0RFQk9VTkNFTkFCTEUJR1BJTzRfUkVHMzIoMHgwNTApCi0jZGVmaW5lIEdQSU80X0RFQk9VTkNJTkdUSU1FCUdQSU80X1JFRzMyKDB4MDU0KQotCi0KLS8qIElPIENPTkZJRyAqLwotI2RlZmluZSBDT05UUk9MX0JBU0UJCShPTUFQMjRYWF9DVFJMX0JBU0UpCi0jZGVmaW5lIENPTlRST0xfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKENPTlRST0xfQkFTRSArIChvZmZzZXQpKQotCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TUEkxX05DUzIJQ09OVFJPTF9SRUczMigweDEwNCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19YVEFMT1VUCUNPTlRST0xfUkVHMzIoMHgxMzQpCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUMV9SWAlDT05UUk9MX1JFRzMyKDB4MEM4KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AxX0RYCUNPTlRST0xfUkVHMzIoMHgxMEMpCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05DUzQJQ09OVFJPTF9SRUczMigweDA5MCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19ENQkJQ09OVFJPTF9SRUczMigweDBCOCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EOQkJQ09OVFJPTF9SRUczMigweDBCQykKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EMTMJCUNPTlRST0xfUkVHMzIoMHgwQzApCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfVlNZTkMJQ09OVFJPTF9SRUczMigweDBDQykKLQotLyogQ09OVFJPTCAqLwotI2RlZmluZSBDT05UUk9MX0RFVkNPTkYJCUNPTlRST0xfUkVHMzIoMHgyNzQpCi0KLS8qIElOVEVSUlVQVCBDT05UUk9MTEVSICovCi0jZGVmaW5lIElOVENfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHhmZTAwMCkKLSNkZWZpbmUgSU5UQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoSU5UQ19CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgSU5UQzFfVV9CQVNFCQlJTlRDX1JFRzMyKDB4MDAwKQotI2RlZmluZSBJTlRDX01JUjAJCUlOVENfUkVHMzIoMHgwODQpCi0jZGVmaW5lIElOVENfTUlSX1NFVDAJCUlOVENfUkVHMzIoMHgwOEMpCi0jZGVmaW5lIElOVENfTUlSX0NMRUFSMAkJSU5UQ19SRUczMigweDA4OCkKLSNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIwCQlJTlRDX1JFRzMyKDB4MDk0KQotI2RlZmluZSBJTlRDX01JUjEJCUlOVENfUkVHMzIoMHgwQTQpCi0jZGVmaW5lIElOVENfTUlSX1NFVDEJCUlOVENfUkVHMzIoMHgwQUMpCi0jZGVmaW5lIElOVENfTUlSX0NMRUFSMQkJSU5UQ19SRUczMigweDBBOCkKLSNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIxCQlJTlRDX1JFRzMyKDB4MEI0KQotI2RlZmluZSBJTlRDX01JUjIJCUlOVENfUkVHMzIoMHgwQzQpCi0jZGVmaW5lIElOVENfTUlSX1NFVDIJCUlOVENfUkVHMzIoMHgwQ0MpCi0jZGVmaW5lIElOVENfTUlSX0NMRUFSMgkJSU5UQ19SRUczMigweDBDOCkKLSNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIyCQlJTlRDX1JFRzMyKDB4MEQ0KQotI2RlZmluZSBJTlRDX1NJUl9JUlEJCUlOVENfUkVHMzIoMHgwNDApCi0jZGVmaW5lIElOVENfQ09OVFJPTAkJSU5UQ19SRUczMigweDA0OCkKLSNkZWZpbmUgSU5UQ19JTFIxMQkJSU5UQ19SRUczMigweDEyQykKLSNkZWZpbmUgSU5UQ19JTFIzMgkJSU5UQ19SRUczMigweDE4MCkKLSNkZWZpbmUgSU5UQ19JTFIzNwkJSU5UQ19SRUczMigweDE5NCkKLSNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCi0KLS8qIFJBTSBGSVJFV0FMTCAqLwotI2RlZmluZSBSQU1GV19CQVNFCQkoMHg2ODAwNTAwMCkKLSNkZWZpbmUgUkFNRldfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKFJBTUZXX0JBU0UgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBSQU1GV19SRVFJTkZPUEVSTTAJUkFNRldfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIFJBTUZXX1JFQURQRVJNMAkJUkFNRldfUkVHMzIoMHgwNTApCi0jZGVmaW5lIFJBTUZXX1dSSVRFUEVSTTAJUkFNRldfUkVHMzIoMHgwNTgpCi0KLS8qIEdQTUMgQ1MxIEZQR0EgT04gVVNFUiBJTlRFUkZBQ0UgTU9EVUxFICovCi0vLyNkZWZpbmUgREVCVUdfQk9BUkRfTEVEX1JFR0lTVEVSIDB4MDQwMDAwMTQKLQotLyogR1BNQyBDUzAgKi8KLSNkZWZpbmUgR1BNQ19DT05GSUcxXzAJCUdQTUNfUkVHMzIoMHgwNjApCi0jZGVmaW5lIEdQTUNfQ09ORklHMl8wCQlHUE1DX1JFRzMyKDB4MDY0KQotI2RlZmluZSBHUE1DX0NPTkZJRzNfMAkJR1BNQ19SRUczMigweDA2OCkKLSNkZWZpbmUgR1BNQ19DT05GSUc0XzAJCUdQTUNfUkVHMzIoMHgwNkMpCi0jZGVmaW5lIEdQTUNfQ09ORklHNV8wCQlHUE1DX1JFRzMyKDB4MDcwKQotI2RlZmluZSBHUE1DX0NPTkZJRzZfMAkJR1BNQ19SRUczMigweDA3NCkKLSNkZWZpbmUgR1BNQ19DT05GSUc3XzAJCUdQTUNfUkVHMzIoMHgwNzgpCi0KLS8qIEdQTUMgQ1MxICovCi0jZGVmaW5lIEdQTUNfQ09ORklHMV8xCQlHUE1DX1JFRzMyKDB4MDkwKQotI2RlZmluZSBHUE1DX0NPTkZJRzJfMQkJR1BNQ19SRUczMigweDA5NCkKLSNkZWZpbmUgR1BNQ19DT05GSUczXzEJCUdQTUNfUkVHMzIoMHgwOTgpCi0jZGVmaW5lIEdQTUNfQ09ORklHNF8xCQlHUE1DX1JFRzMyKDB4MDlDKQotI2RlZmluZSBHUE1DX0NPTkZJRzVfMQkJR1BNQ19SRUczMigweDBhMCkKLSNkZWZpbmUgR1BNQ19DT05GSUc2XzEJCUdQTUNfUkVHMzIoMHgwYTQpCi0jZGVmaW5lIEdQTUNfQ09ORklHN18xCQlHUE1DX1JFRzMyKDB4MGE4KQotCi0vKiBEU1MgKi8KLSNkZWZpbmUgRFNTX0NPTlRST0wJCURJU1BfUkVHMzIoMHgwNDApCi0jZGVmaW5lIERJU1BDX0NPTlRST0wJCURJU1BfUkVHMzIoMHg0NDApCi0jZGVmaW5lIERJU1BDX1NZU1NUQVRVUwkJRElTUF9SRUczMigweDQxNCkKLSNkZWZpbmUgRElTUENfSVJRU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE4KQotI2RlZmluZSBESVNQQ19JUlFFTkFCTEUJCURJU1BfUkVHMzIoMHg0MUMpCi0jZGVmaW5lIERJU1BDX0NPTkZJRwkJRElTUF9SRUczMigweDQ0NCkKLSNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjAJRElTUF9SRUczMigweDQ0QykKLSNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjEJRElTUF9SRUczMigweDQ1MCkKLSNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IwCURJU1BfUkVHMzIoMHg0NTQpCi0jZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMQlESVNQX1JFRzMyKDB4NDU4KQotI2RlZmluZSBESVNQQ19MSU5FX05VTUJFUglESVNQX1JFRzMyKDB4NDYwKQotI2RlZmluZSBESVNQQ19USU1JTkdfSAkJRElTUF9SRUczMigweDQ2NCkKLSNkZWZpbmUgRElTUENfVElNSU5HX1YJCURJU1BfUkVHMzIoMHg0NjgpCi0jZGVmaW5lIERJU1BDX1BPTF9GUkVRCQlESVNQX1JFRzMyKDB4NDZDKQotI2RlZmluZSBESVNQQ19ESVZJU09SCQlESVNQX1JFRzMyKDB4NDcwKQotI2RlZmluZSBESVNQQ19TSVpFX0RJRwkJRElTUF9SRUczMigweDQ3OCkKLSNkZWZpbmUgRElTUENfU0laRV9MQ0QJCURJU1BfUkVHMzIoMHg0N0MpCi0jZGVmaW5lIERJU1BDX0dGWF9CQTAJCURJU1BfUkVHMzIoMHg0ODApCi0jZGVmaW5lIERJU1BDX0dGWF9CQTEJCURJU1BfUkVHMzIoMHg0ODQpCi0jZGVmaW5lIERJU1BDX0dGWF9QT1NJVElPTglESVNQX1JFRzMyKDB4NDg4KQotI2RlZmluZSBESVNQQ19HRlhfU0laRQkJRElTUF9SRUczMigweDQ4QykKLSNkZWZpbmUgRElTUENfR0ZYX0FUVFJJQlVURVMJRElTUF9SRUczMigweDRBMCkKLSNkZWZpbmUgRElTUENfR0ZYX0ZJRk9fVEhSRVNIT0xECURJU1BfUkVHMzIoMHg0QTQpCi0jZGVmaW5lIERJU1BDX0dGWF9ST1dfSU5DCURJU1BfUkVHMzIoMHg0QUMpCi0jZGVmaW5lIERJU1BDX0dGWF9QSVhFTF9JTkMJRElTUF9SRUczMigweDRCMCkKLSNkZWZpbmUgRElTUENfR0ZYX1dJTkRPV19TS0lQCURJU1BfUkVHMzIoMHg0QjQpCi0jZGVmaW5lIERJU1BDX0dGWF9UQUJMRV9CQQlESVNQX1JFRzMyKDB4NEI4KQotI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMQlESVNQX1JFRzMyKDB4NUQ0KQotI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMglESVNQX1JFRzMyKDB4NUQ4KQotI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwlESVNQX1JFRzMyKDB4NURDKQotCi0vKiBXYWtlIHVwIGRlZmluZSBmb3IgYm9hcmQgKi8KLSNkZWZpbmUgR1BJTzk3CQkJKDEgPDwgMSkKLSNkZWZpbmUgR1BJTzg4CQkJKDEgPDwgMjQpCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCit1MzIgb21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKHZvaWQpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaAppbmRleCBlNzJjY2JmLi42ZmMwZGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaApAQCAtMjAsNiArMjAsOCBAQAogCQkJCSAgICAgIHUzMiBtZW1fdHlwZSk7CiBleHRlcm4gdTMyIG9tYXAyX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIgc2RyY19yZnJfdmFsLCBpbnQgYnlwYXNzKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcF9mYl9zcmFtX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcF9mYl9zcmFtX3NpemU7CiAKIC8qIERvIG5vdCB1c2UgdGhlc2UgKi8KIGV4dGVybiB2b2lkIHNyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBja2N0bCwgdTMyIGRwbGxjdGwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggNjcyNGE4MS4uNjc5NzBkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC05LDEyICs5LDEzIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KIAogI2lmbmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKICNkZWZpbmUgdm9pY2VibHVlX3Jlc2V0KCkJCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKK2V4dGVybiB2b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKIAljcHVfZG9faWRsZSgpOwpAQCAtMzgsMjQgKzM5LDEyIEBACiAJCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfYXJjaF9yZXNldChjaGFyIG1vZGUpCi17Ci0JdTMyIHJhdGU7Ci0Jc3RydWN0IGNsayAqdmNsaywgKnNjbGs7Ci0KLQl2Y2xrID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOwotCXNjbGsgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLQlyYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCWNsa19zZXRfcmF0ZSh2Y2xrLCByYXRlKTsJLyogZ28gdG8gYnlwYXNzIGZvciBPTUFQIGxpbWl0YXRpb24gKi8KLQlSTV9SU1RDVFJMX1dLVVAgfD0gMjsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQogewogCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCiAJCW9tYXAxX2FyY2hfcmVzZXQobW9kZSk7CiAJZWxzZQotCQlvbWFwMl9hcmNoX3Jlc2V0KG1vZGUpOworCQlvbWFwX3ByY21fYXJjaF9yZXNldChtb2RlKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZG1hLmgKaW5kZXggM2U4OGEyYS4uYTAwODE1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9kbWEuaApAQCAtMjQsMjcgKzI0LDI5IEBACiAJdm9sYXRpbGUgdTMyIGRjbWQ7CS8qIERDTUQgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCiB9IHB4YV9kbWFfZGVzYzsKIAordHlwZWRlZiBlbnVtIHsKKwlETUFfUFJJT19ISUdIID0gMCwKKwlETUFfUFJJT19NRURJVU0gPSAxLAorCURNQV9QUklPX0xPVyA9IDIKK30gcHhhX2RtYV9wcmlvOworCiAjaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KQogCiAjZGVmaW5lIFBYQV9ETUFfQ0hBTk5FTFMJMzIKLSNkZWZpbmUgUFhBX0RNQV9OQkNIKHByaW8pCSgocHJpbyA9PSBETUFfUFJJT19MT1cpID8gMTYgOiA4KQogCi10eXBlZGVmIGVudW0gewotCURNQV9QUklPX0hJR0ggPSAwLAotCURNQV9QUklPX01FRElVTSA9IDgsCi0JRE1BX1BSSU9fTE9XID0gMTYKLX0gcHhhX2RtYV9wcmlvOworI2RlZmluZSBweGFfZm9yX2VhY2hfZG1hX3ByaW8oY2gsIHByaW8pCQkJCQlcCitmb3IgKAkJCQkJCQkJCVwKKwljaCA9IHByaW8gKiA0OwkJCQkJCQlcCisJY2ggIT0gKDQgPDwgcHJpbykgKyAxNjsJCQkJCQlcCisJY2ggPSAoY2ggKyAxID09ICg0IDw8IHByaW8pKSA/IChwcmlvICogNCArIDE2KSA6IChjaCArIDEpCVwKKykKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KQogCiAjZGVmaW5lIFBYQV9ETUFfQ0hBTk5FTFMJMTYKLSNkZWZpbmUgUFhBX0RNQV9OQkNIKHByaW8pCSgocHJpbyA9PSBETUFfUFJJT19MT1cpID8gOCA6IDQpCiAKLXR5cGVkZWYgZW51bSB7Ci0JRE1BX1BSSU9fSElHSCA9IDAsCi0JRE1BX1BSSU9fTUVESVVNID0gNCwKLQlETUFfUFJJT19MT1cgPSA4Ci19IHB4YV9kbWFfcHJpbzsKKyNkZWZpbmUgcHhhX2Zvcl9lYWNoX2RtYV9wcmlvKGNoLCBwcmlvKQkJCQkJXAorCWZvciAoY2ggPSBwcmlvICogNDsgY2ggIT0gKDQgPDwgcHJpbyk7IGNoKyspCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL29oY2kuaAppbmRleCA3ZGE4OTU2Li5lODQ4YTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9vaGNpLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgUE1NX05QU19NT0RFICAgICAgICAgICAxCiAjZGVmaW5lIFBNTV9HTE9CQUxfTU9ERSAgICAgICAgMgogI2RlZmluZSBQTU1fUEVSUE9SVF9NT0RFICAgICAgIDMKKworCWludCBwb3dlcl9idWRnZXQ7CiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X29oY2lfaW5mbyhzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTU5MGMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTJ4eF9zcGkuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXBoZW4gU3RyZWV0IC8gU3RyZWV0RmlyZSBTb3VuZCBMYWJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBQWEEyWFhfU1BJX0hfCisjZGVmaW5lIFBYQTJYWF9TUElfSF8KKworI2RlZmluZSBQWEEyWFhfQ1NfQVNTRVJUICgweDAxKQorI2RlZmluZSBQWEEyWFhfQ1NfREVBU1NFUlQgKDB4MDIpCisKKyNpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpCisjZGVmaW5lIENMT0NLX1NQRUVEX0haIDM2ODY0MDAKKyNkZWZpbmUgU1NQMV9TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovMi8oeCsxKSk8PDgpJjB4MDAwMGZmMDApCisjZGVmaW5lIFNTUDJfU2VyQ2xrRGl2KHgpICgoKENMT0NLX1NQRUVEX0haLyh4KzEpKTw8OCkmMHgwMDBmZmYwMCkKKyNkZWZpbmUgU1NQM19TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovKHgrMSkpPDw4KSYweDAwMGZmZjAwKQorI2RlZmluZSBTU1BfVElNRU9VVF9TQ0FMRSAoMjcxMikKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkKKyNkZWZpbmUgQ0xPQ0tfU1BFRURfSFogMTMwMDAwMDAKKyNkZWZpbmUgU1NQMV9TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovKHgrMSkpPDw4KSYweDAwMGZmZjAwKQorI2RlZmluZSBTU1AyX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8oeCsxKSk8PDgpJjB4MDAwZmZmMDApCisjZGVmaW5lIFNTUDNfU2VyQ2xrRGl2KHgpICgoKENMT0NLX1NQRUVEX0haLyh4KzEpKTw8OCkmMHgwMDBmZmYwMCkKKyNkZWZpbmUgU1NQX1RJTUVPVVRfU0NBTEUgKDc2OSkKKyNlbmRpZgorCisjZGVmaW5lIFNTUF9USU1FT1VUKHgpICgoeCoxMDAwMCkvU1NQX1RJTUVPVVRfU0NBTEUpCisjZGVmaW5lIFNTUDFfVklSVCAoKHZvaWQgKikoaW9fcDJ2KF9fUFJFRyhTU0NSMF9QKDEpKSkpKQorI2RlZmluZSBTU1AyX1ZJUlQgKCh2b2lkICopKGlvX3AydihfX1BSRUcoU1NDUjBfUCgyKSkpKSkKKyNkZWZpbmUgU1NQM19WSVJUICgodm9pZCAqKShpb19wMnYoX19QUkVHKFNTQ1IwX1AoMykpKSkpCisKK2VudW0gcHhhX3NzcF90eXBlIHsKKwlTU1BfVU5ERUZJTkVEID0gMCwKKwlQWEEyNXhfU1NQLCAgLyogcHhhIDIxMCwgMjUwLCAyNTUsIDI2eCAqLworCVBYQTI1eF9OU1NQLCAvKiBweGEgMjU1LCAyNnggKGluY2x1ZGluZyBBU1NQKSAqLworCVBYQTI3eF9TU1AsCit9OworCisvKiBkZXZpY2UucGxhdGZvcm1fZGF0YSBmb3IgU1NQIGNvbnRyb2xsZXIgZGV2aWNlcyAqLworc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHsKKwllbnVtIHB4YV9zc3BfdHlwZSBzc3BfdHlwZTsKKwl1MzIgY2xvY2tfZW5hYmxlOworCXUxNiBudW1fY2hpcHNlbGVjdDsKKwl1OCBlbmFibGVfZG1hOworfTsKKworLyogc3BpX2JvYXJkX2luZm8uY29udHJvbGxlcl9kYXRhIGZvciBTUEkgc2xhdmUgZGV2aWNlcywKKyAqIGNvcGllZCB0byBzcGlfZGV2aWNlLnBsYXRmb3JtX2RhdGEgLi4uIG1vc3RseSBmb3IgZG1hIHR1bmluZworICovCitzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIHsKKwl1OCB0eF90aHJlc2hvbGQ7CisJdTggcnhfdGhyZXNob2xkOworCXU4IGRtYV9idXJzdF9zaXplOworCXUzMiB0aW1lb3V0X21pY3Jvc2VjczsKKwl1OCBlbmFibGVfbG9vcGJhY2s7CisJdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKK307CisKKyNlbmRpZiAvKlBYQTJYWF9TUElfSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaGFyZHdhcmUuaAppbmRleCA5ZDdmODczLi43NDgwZjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvaGFyZHdhcmUuaApAQCAtNDYsNyArNDYsNiBAQAogI2RlZmluZSBTQ1JFRU5fRU5ECQkweGRmYzAwMDAwCiAjZGVmaW5lIFNDUkVFTl9CQVNFCQkweGRmODAwMDAwCiAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAogI2RlZmluZSBVTkNBQ0hFQUJMRV9BRERSCTB4ZGYwMTAwMDAKIAogLyoKQEAgLTU5LDggKzU4LDYgQEAKICNkZWZpbmUgUENJT19CQVNFCQlJT01FTSgweGUwMDEwMDAwKQogI2RlZmluZSBGTE9QUFlETUFfQkFTRQkJSU9NRU0oMHhlMDAyYTAwMCkKIAotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4MDAwMDAwMDAJLyogUk9NICovCi0KICNkZWZpbmUgdmlkY193cml0ZWwodmFsKQlfX3Jhd193cml0ZWwodmFsLCBWSURDX0JBU0UpCiAKICNkZWZpbmUgSU9fRUNfRUFTSV9CQVNFCQkweDgxNDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmgKaW5kZXggMDU5MmNiMy4uMzAzYzQyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaApAQCAtMzAsNCArMzAsMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMKaW5kZXggY2MwNmIxYi4uODk0YzM1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUwpAQCAtNiwxMTYgKzYsODMgQEAKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKi8KIAotICogTW9kaWZpY2F0aW9uczoKLSAqICAgICAxMC1NYXItMjAwNSBMQ1ZSICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICovCisvKiBXZSBoYXZlIGEgcHJvYmxlbSB0aGF0IHRoZSBJTlRPRkZTRVQgcmVnaXN0ZXIgZG9lcyBub3QgYWx3YXlzCisgKiBzaG93IG9uZSBpbnRlcnJ1cHQuIE9jY2FzaW9uYWxseSB3ZSBnZXQgdHdvIGludGVycnVwdHMgdGhyb3VnaAorICogdGhlIHByaW9yaXRpc2VyLCBhbmQgdGhpcyBjYXVzZXMgdGhlIElOVE9GRlNFVCByZWdpc3RlciB0byBzaG93CisgKiB3aGF0IGxvb2tzIGxpa2UgdGhlIGxvZ2ljYWwtb3Igb2YgdGhlIHR3byBpbnRlcnJ1cHQgbnVtYmVycy4KKyAqCisgKiBUaGFua3MgdG8gS2xhdXMsIFNoYW5ub24sIGV0IGFsIGZvciBoZWxwaW5nIHRvIGRlYnVnIHRoaXMgcHJvYmxlbQorKi8KKworI2RlZmluZSBJTlRQTkQJCSgweDEwKQorI2RlZmluZSBJTlRPRkZTRVQJKDB4MTQpCisjZGVmaW5lIEVYVElOVFBFTkQJKDB4YTgpCisjZGVmaW5lIEVYVElOVE1BU0sJKDB4YTQpCisKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAKLQogCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKIAotCQltb3YJXHRtcCwgI1MzQzI0WFhfVkFfSVJRCi0JCWxkcglcaXJxbnIsIFsgXHRtcCwgIzB4MTQgXQkJQCBnZXQgaXJxIG5vCi0zMDAwMDoKLQkJdGVxCVxpcnFuciwgIzQKLQkJdGVxbmUJXGlycW5yLCAjNQotCQliZXEJMTAwMmYJCQkJQCBleHRlcm5hbCBpcnEgcmVnCisJCW1vdglcYmFzZSwgI1MzQzI0WFhfVkFfSVJRCiAKLQkJQCBkZWJ1ZyBjaGVjayB0byBzZWUgaWYgaW50ZXJydXB0IHJlcG9ydGVkIGlzIHRoZSBzYW1lCi0JCUAgYXMgdGhlIG9mZnNldC4uLi4KKwkJbGRyCVxpcnFzdGF0LCBbIFxiYXNlLCAjSU5UUE5EXQorCQliaWNzCVxpcnFuciwgXGlycXN0YXQsICMzPDw0CQlAQCBvbmx5IGFuIEdQSU8gSVJRCisJCWJlcQkyMDAwZgogCi0JCXRlcQlcaXJxbnIsICMwCi0JCWJlcQkyMDAwMmYKLQkJbGRyCVxpcnFzdGF0LCBbIFx0bXAsICMweDEwIF0JQCBJTlRQTkQKLQkJbW92CVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIFxpcnFucgotCQl0c3QJXGlycXN0YXQsICMxCi0JCWJuZQkyMDAwMmYKKwkJQEAgdHJ5IHRoZSBpbnRlcnJ1cHQgb2Zmc2V0IHJlZ2lzdGVyLCBzaW5jZSBpdCBpcyB0aGVyZQogCi0JCS8qIGRlYnVnL3dhcm5pbmcgaWYgd2UgZ2V0IGFuIGludmFsdWQgcmVzcG9uc2UgZnJvbSB0aGUKLQkJICogSU5UT0ZGU0VUIHJlZ2lzdGVyICovCi0jaWYgMQotCQlzdG1mZAlyMTMhLCB7IHIwIC0gcjQgLCByOC1yMTIsIHIxNCB9Ci0JCWxkcglyMSwJWyBcdG1wLCAjMHgxNCBdCQlAIElOVE9GRlNFVAotCQlsZHIJcjIsCVsgXHRtcCwgIzB4MTAgXQkJQCBJTlRQTkQKLQkJbGRyCXIzLAlbIFx0bXAsICMweDAwIF0JCUAgU1JDUE5ECi0JCWFkcglyMCwgMjAwMDNmCi0JCWJsCXByaW50awotCQliCTIwMDA0ZgorCQlsZHIJXGlycW5yLCBbIFxiYXNlLCAjSU5UT0ZGU0VUIF0KKwkJbW92CVx0bXAsICMxCisJCXRzdAlcaXJxc3RhdCwgXHRtcCwgbHNsIFxpcnFucgorCQlhZGRuZQlcaXJxbnIsIFxpcnFuciwgI0lSUV9FSU5UMAorCQlibmUJMTAwMWYKIAotMjAwMDM6Ci0JCS5hc2NpaQkiPDc+aXJxOiBlcnIgLSBiYWQgb2Zmc2V0ICVkLCBpbnRwbmQ9JTA4eCwgc3JjcG5kPSUwOHhcbiIKLQkJLmJ5dGUJMAotCQkuYWxpZ24JNAotMjAwMDQ6Ci0JCW1vdglyMSwgIzEKLQkJbW92CVx0bXAsICNTM0MyNFhYX1ZBX0lSUQotCQlsZG1mZAlyMTMhLCB7IHIwIC0gcjQgLCByOC1yMTIsIHIxNCB9Ci0jZW5kaWYKKwkJQEAgdGhlIG51bWJlciBzcGVjaWZpZWQgaXMgbm90IGEgdmFsaWQgaXJxLCBzbyB0cnkKKwkJQEAgYW5kIHdvcmsgaXQgb3V0IGZvciBvdXJzZWx2ZXMKIAotCQlAIHRyeSB3b3JraW5nIG91dCBpbnRlcnJ1cHQgbnVtYmVyIGZvciBvdXJzZWx2ZXMKLQkJbW92CVxpcnFuciwgIzAKLQkJbGRyCVxpcnFzdGF0LCBbIFx0bXAsICMweDEwIF0JQCBJTlRQTkQKLTEwMDIxOgotCQltb3ZzCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIzEKLQkJYmNzCTMwMDAwYgkJQCB0cnkgYW5kIHJlLXN0YXJ0IHRoZSBwcm9jY2VzcwotCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCi0JCWNtcAlcaXJxbnIsICMzMgotCQlibGUJMTAwMjFiCisJCW1vdglcaXJxbnIsICNJUlFfRUlOVDAJCUBAIHN0YXJ0IGhlcmUKKwkJYgkzMDAwZgogCi0JCUAgZm91bmQgbm8gaW50ZXJydXB0LCBzZXQgWiBmbGFnIGFuZCBsZWF2ZQotCQltb3ZzCVxpcnFuciwgIzAKLQkJYgkxMDAxZgorMjAwMDoKKwkJQEAgbG9hZCB0aGUgR1BJTyBpbnRlcnJ1cHQgcmVnaXN0ZXIsIGFuZCBjaGVjayBpdAogCi0yMDAwNToKLTIwMDAyOgkJQCBleGl0Ci0JCUAgd2UgYmFzZSB0aGUgczNjMjQxMHggaW50ZXJydXB0cyBhdCAxNiBhbmQgYWJvdmUgdG8gYWxsb3cKLQkJQCBpc2EgcGVyaXBoZXJhbHMgdG8gaGF2ZSB0aGVpciBzdGFuZGFyZCBpbnRlcnJ1cHRzLCBhbHNvCi0JCUAgZW5zdXJlIHRoYXQgWiBmbGFnIGlzIHVuLXNldCBvbiBleGl0CisJCWFkZAlcdG1wLCBcYmFzZSwgI1MzQzI0WFhfVkFfR1BJTyAtIFMzQzI0WFhfVkFfSVJRCisJCWxkcglcaXJxc3RhdCwgWyBcdG1wLCAjIEVYVElOVFBFTkQgXQorCQlsZHIJXGlycW5yLCAgIFsgXHRtcCwgIyBFWFRJTlRNQVNLIF0KKwkJYmljcwlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgorCQliZXEJMTAwMWYKIAotCQlAIG5vdGUsIHdlIGNhbm5vdCBiZSBzdXJlIGlmIHdlIGdldCBJUlFfRUlOVDAgKDApIHRoYXQKLQkJQCB0aGVyZSBpcyBzaW1wbHkgbm8gaW50ZXJydXB0IHBlbmRpbmcsIHNvIGluIGFsbCBvdGhlcgotCQlAIGNhc2VzIHdlIGp1bXAgdG8gc2F5IHdlIGhhdmUgZm91bmQgc29tZXRoaW5nLCBvdGhlcndpc2UKLQkJQCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGludGVycnVwdCByZWFsbHkgaXMgYXNzcnRlZAotCQlhZGRzCVxpcnFuciwgXGlycW5yLCAjSVJRX0VJTlQwCi0JCXRlcQlcaXJxbnIsICNJUlFfRUlOVDAKLQkJYm5lCTEwMDFmCQkJCUAgZXhpdAotCQlsZHIJXGlycXN0YXQsIFsgXHRtcCwgIzB4MTAgXQlAIElOVFBORAotCQl0ZXEJXGlycXN0YXQsICMwCi0JCW1vdmVxCVxpcnFuciwgIzAKLQkJYgkxMDAxZgorCQltb3YJXGlycW5yLCAjKElSUV9FSU5UNCAtIDQpCiAKLQkJQCB3ZSBnZXQgaGVyZSBmcm9tIG5vIG1haW4gb3IgZXh0ZXJuYWwgaW50ZXJydXB0cyBwZW5kaW5nCi0xMDAyOgotCQlhZGQJXHRtcCwgXHRtcCwgI1MzQzI0WFhfVkFfR1BJTyAtIFMzQzI0WFhfVkFfSVJRCi0JCWxkcglcaXJxc3RhdCwgWyBcdG1wLCAjIDB4YTggXQlAIEVYVElOVFBFTkQKLQkJbGRyCVxpcnFuciwgWyBcdG1wLCAjIDB4YTQgXQlAIEVYVElOVE1BU0sKKwkJQEAgd29yayBvdXQgd2hpY2ggaXJxIChpZiBhbnkpIHdlIGdvdAorMzAwMDoKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsIzE2CisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMTYKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IjMTYKKwkJdHN0CVxpcnFzdGF0LCAjMHhmZgorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzgKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IjOAorCQl0c3QJXGlycXN0YXQsICMweGYKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM0CisJCW1vdmVxCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIzQKKwkJdHN0CVxpcnFzdGF0LCAjMHgzCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMgorCQltb3ZlcQlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciMyCisJCXRzdAlcaXJxc3RhdCwgIzB4MQorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzEKIAotCQliaWMJXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIJQCBjbGVhciBtYXNrZWQgaXJxcworCQlAQCB3ZSBoYXZlIHRoZSB2YWx1ZQorCQltb3ZzCVxpcnFuciwgXGlycW5yCiAKLQkJbW92CVxpcnFuciwgI0lSUV9FSU5UNAkJQCBzdGFydCBleHRpbnQgbm9zCi0JCW1vdglcaXJxc3RhdCwgXGlycXN0YXQsIGxzciM0CUAgaWdub3JlIGJvdHRvbSA0IGJpdHMKLTEwMDIxOgotCQltb3ZzCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyIzEKLQkJYmNzCTEwMDRmCi0JCWFkZAlcaXJxbnIsIFxpcnFuciwgIzEKLQkJY21wCVxpcnFuciwgI0lSUV9FSU5UMjMKLQkJYmxlCTEwMDIxYgotCi0JCUAgZm91bmQgbm8gaW50ZXJydXB0LCBzZXQgWiBmbGFnIGFuZCBsZWF2ZQotCQltb3ZzCVxpcnFuciwgIzAKLQotMTAwNDoJCUAgZW5zdXJlIFogZmxhZyBjbGVhciBpbiBjYXNlIG91ciBNT1ZTIHNoaWZ0ZWQgb3V0IHRoZSBsYXN0IGJpdAotCQl0ZXEJXGlycW5yLCAjMAogMTAwMToKLQkJQCBleGl0IGlycSByb3V0aW5lCi0JCS5lbmRtCisJCUBAIGV4aXQgaGVyZSwgWiBmbGFnIHVuc2V0IGlmIElSUQogCisJLmVuZG0KIAogCQkvKiBjdXJyZW50bHkgZG9uJ3QgbmVlZCBhbiBkaXNhYmxlX2ZpcSBtYWNybyAqLwogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2xlZHMtZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwN2VkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2xlZHMtZ3Bpby5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKKyAqCisgKiAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCAtIExFRHMgR1BJTyBjb25uZWN0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0xFRFNHUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9MRURTR1BJT19IICJsZWRzLWdwaW8uaCIKKworI2RlZmluZSBTM0MyNFhYX0xFREZfQUNUTE9XCSgxPDwwKQkJLyogTEVEIGlzIG9uIHdoZW4gR1BJTyBsb3cgKi8KKyNkZWZpbmUgUzNDMjRYWF9MRURGX1RSSVNUQVRFCSgxPDwxKQkJLyogdHJpc3RhdGUgdG8gdHVybiBvZmYgKi8KKworc3RydWN0IHMzYzI0eHhfbGVkX3BsYXRkYXRhIHsKKwl1bnNpZ25lZCBpbnQJCSBncGlvOworCXVuc2lnbmVkIGludAkJIGZsYWdzOworCisJY2hhcgkJCSpuYW1lOworCWNoYXIJCQkqZGVmX3RyaWdnZXI7Cit9OworCisjZW5kaWYgLyogX19BU01fQVJDSF9MRURTR1BJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS1ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4YzAwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3BpLWdwaW8uaApAQCAtMCwwICsxLDMxIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBTUEkgQ29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1BJR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1BJR1BJT19IIF9fRklMRV9fCisKK3N0cnVjdCBzM2MyNDEwX3NwaWdwaW9faW5mbzsKK3N0cnVjdCBzcGlfYm9hcmRfaW5mbzsKKworc3RydWN0IHMzYzI0MTBfc3BpZ3Bpb19pbmZvIHsKKwl1bnNpZ25lZCBsb25nCQkgcGluX2NsazsKKwl1bnNpZ25lZCBsb25nCQkgcGluX21vc2k7CisJdW5zaWduZWQgbG9uZwkJIHBpbl9taXNvOworCisJdW5zaWduZWQgbG9uZwkJIGJvYXJkX3NpemU7CisJc3RydWN0IHNwaV9ib2FyZF9pbmZvCSpib2FyZF9pbmZvOworCisJdm9pZCAoKmNoaXBfc2VsZWN0KShzdHJ1Y3QgczNjMjQxMF9zcGlncGlvX2luZm8gKnNwaSwgaW50IGNzKTsKK307CisKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1BJR1BJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDI5YTFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGkuaApAQCAtMCwwICsxLDI5IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBTUEkgQ29udHJvbGxlciBwbGF0Zm9ybV9kZXZpY2UgaW5mbworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1BJX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TUElfSCBfX0ZJTEVfXworCitzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbzsKK3N0cnVjdCBzcGlfYm9hcmRfaW5mbzsKKworc3RydWN0IHMzYzI0MTBfc3BpX2luZm8geworCXVuc2lnbmVkIGxvbmcJCSBwaW5fY3M7CS8qIHNpbXBsZSBncGlvIGNzICovCisKKwl1bnNpZ25lZCBsb25nCQkgYm9hcmRfc2l6ZTsKKwlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8JKmJvYXJkX2luZm87CisKKwl2b2lkICgqc2V0X2NzKShzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBwb2wpOworfTsKKworCisjZW5kaWYgLyogX19BU01fQVJDSF9TUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaAppbmRleCAyODcxMWFhLi5lZTAwOGE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaApAQCAtMTQsMTAgKzE0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCi0vKiBGbHVzaGluZyBhcmVhcyAqLwotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4ZTAwMDAwMDAJLyogU0ExMTAwIHplcm8gYmFuayAqLwotI2RlZmluZSBGTFVTSF9CQVNFCQkweGY1MDAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0VfTUlOSUNBQ0hFCTB4ZjU4MDAwMDAKICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZhMDUwMDAwCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCmluZGV4IDAxOGE5ZjAuLmEyOWZhYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKQEAgLTkxLDQgKzkxLDExIEBACiAKICNlbmRpZgogCisvKgorICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFNBMTEwMCB6ZXJvIGJhbmsKKyAqLworI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgRkxVU0hfQkFTRQkJMHhmNTAwMDAwMAorI2RlZmluZSBGTFVTSF9CQVNFX01JTklDQUNIRQkweGY1MTAwMDAwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2hhcmR3YXJlLmgKaW5kZXggNGQzNWY4Yy4uZWNiYTQ1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9oYXJkd2FyZS5oCkBAIC0xNywxMSArMTcsNiBAQAogICovCiAjZGVmaW5lIElPX0JBU0UJCQkweGUwMDAwMDAwCiAKLS8qCi0gKiBSQU0gZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4ODAwMDAwMDAKLQogI2Vsc2UKIAogI2RlZmluZSBJT19CQVNFCQkJMApAQCAtMzMsNyArMjgsNiBAQAogI2RlZmluZSBST01DQVJEX1NJWkUJCTB4MDgwMDAwMDAKICNkZWZpbmUgUk9NQ0FSRF9TVEFSVAkJMHgxMDAwMDAwMAogCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKICNkZWZpbmUgUENJT19CQVNFCQkweGUwMDAwMDAwCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9tZW1vcnkuaAppbmRleCA5NWEyOWI0Li42OTY4ZDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9tZW1vcnkuaApAQCAtMzksNCArMzksMTAgQEAKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCiAKKy8qCisgKiBDYWNoZSBmbHVzaGluZyBhcmVhCisgKi8KKyNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDgwMDAwMDAwCisjZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYnVnLmggYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKaW5kZXggN2ZiMDIxMy4uNWFiODIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9idWcuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0FTTUFSTV9CVUdfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKaW5kZXggZTNlODU0MS4uNjNjYTc0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZG1hX2lzX2NvbnNpc3RlbnQoZG1hX2FkZHJfdCBoYW5kbGUpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuICEhYXJjaF9pc19jb2hlcmVudCgpOwogfQogCiAvKgpAQCAtMTQ1LDcgKzE0NSw5IEBACiBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCWNvbnNpc3RlbnRfc3luYyhjcHVfYWRkciwgc2l6ZSwgZGlyKTsKKwlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJY29uc2lzdGVudF9zeW5jKGNwdV9hZGRyLCBzaXplLCBkaXIpOworCiAJcmV0dXJuIHZpcnRfdG9fZG1hKGRldiwgKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIpOwogfQogI2Vsc2UKQEAgLTI1NSw3ICsyNTcsOSBAQAogCiAJCXNnLT5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fZG1hKGRldiwgc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKIAkJdmlydCA9IHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkgKyBzZy0+b2Zmc2V0OwotCQljb25zaXN0ZW50X3N5bmModmlydCwgc2ctPmxlbmd0aCwgZGlyKTsKKworCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJCWNvbnNpc3RlbnRfc3luYyh2aXJ0LCBzZy0+bGVuZ3RoLCBkaXIpOwogCX0KIAogCXJldHVybiBuZW50czsKQEAgLTMxMCwxNCArMzE0LDE2IEBACiBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKIAkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQljb25zaXN0ZW50X3N5bmMoKHZvaWQgKilkbWFfdG9fdmlydChkZXYsIGhhbmRsZSksIHNpemUsIGRpcik7CisJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCWNvbnNpc3RlbnRfc3luYygodm9pZCAqKWRtYV90b192aXJ0KGRldiwgaGFuZGxlKSwgc2l6ZSwgZGlyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKIAkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQljb25zaXN0ZW50X3N5bmMoKHZvaWQgKilkbWFfdG9fdmlydChkZXYsIGhhbmRsZSksIHNpemUsIGRpcik7CisJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCWNvbnNpc3RlbnRfc3luYygodm9pZCAqKWRtYV90b192aXJ0KGRldiwgaGFuZGxlKSwgc2l6ZSwgZGlyKTsKIH0KICNlbHNlCiBleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CkBAIC0zNDcsNyArMzUzLDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZysrKSB7CiAJCWNoYXIgKnZpcnQgPSBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKLQkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CisJCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CiAJfQogfQogCkBAIC0zNTksNyArMzY2LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrLCBzZysrKSB7CiAJCWNoYXIgKnZpcnQgPSBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKLQkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CisJCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQkJY29uc2lzdGVudF9zeW5jKHZpcnQsIHNnLT5sZW5ndGgsIGRpcik7CiAJfQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCmluZGV4IDYyNDZiZjguLjUyYmFlMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaApAQCAtMjYsNyArMjYsOSBAQAogCiBzdHJ1Y3QgdmZwX2hhcmRfc3RydWN0IHsKIAlfX3U2NCBmcHJlZ3NbMTZdOworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIAlfX3UzMiBmcG14X3N0YXRlOworI2VuZGlmCiAJX191MzIgZnBleGM7CiAJX191MzIgZnBzY3I7CiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAppbmRleCBhZmE1YzNlLi4yMDkyODk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCkBAIC0xNzIsMTAgKzE3MiwxMCBAQAogICogIHZpcnRfYWRkcl92YWxpZChrKQlpbmRpY2F0ZXMgd2hldGhlciBhIHZpcnR1YWwgYWRkcmVzcyBpcyB2YWxpZAogICovCiAjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KLSNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkoUEhZU19QRk5fT0ZGU0VUKQorI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCVBIWVNfUEZOX09GRlNFVAogI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IFBIWVNfUEZOX09GRlNFVCAmJiAocGZuKSA8IChQSFlTX1BGTl9PRkZTRVQgKyBtYXhfbWFwbnIpKQogCi0jZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJKHBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKCh1bnNpZ25lZCBsb25nKShrYWRkcikgPj0gUEFHRV9PRkZTRVQgJiYgKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQogCiAjZGVmaW5lIFBIWVNfVE9fTklEKGFkZHIpCSgwKQpAQCAtMTg3LDggKzE4Nyw4IEBACiAgKiBhcm91bmQgaW4gbWVtb3J5LgogICovCiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgotI2RlZmluZSBhcmNoX3Bmbl90b19uaWQocGZuKQkoUEZOX1RPX05JRChwZm4pKQotI2RlZmluZSBhcmNoX2xvY2FsX3BhZ2Vfb2Zmc2V0KHBmbiwgbmlkKSAoTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfT0ZGU0VUKSkKKyNkZWZpbmUgYXJjaF9wZm5fdG9fbmlkKHBmbikJUEZOX1RPX05JRChwZm4pCisjZGVmaW5lIGFyY2hfbG9jYWxfcGFnZV9vZmZzZXQocGZuLCBuaWQpIExPQ0FMX01BUF9OUigocGZuKSA8PCBQQUdFX1NISUZUKQogCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkJCQkJXAogCSh7CQkJCQkJCVwKQEAgLTIzNCw2ICsyMzQsMTQgQEAKICNkZWZpbmUgdmlydF90b19kbWEoZGV2LCBhZGRyKQkJKF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIGFkZHIpKQogI2VuZGlmCiAKKy8qCisgKiBPcHRpb25hbCBjb2hlcmVuY3kgc3VwcG9ydC4gIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgc2VsZWN0ZWQKKyAqIEludGVsIFhTQzMtYmFzZWQgc3lzdGVtcy4KKyAqLworI2lmbmRlZiBhcmNoX2lzX2NvaGVyZW50CisjZGVmaW5lIGFyY2hfaXNfY29oZXJlbnQoKQkJMAorI2VuZGlmCisKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLWFybS9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGYzNjgxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vbnVtbm9kZXMuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0vKiBUaGlzIGRlY2xhcmF0aW9uIGZvciB0aGUgc2l6ZSBvZiB0aGUgTlVNQSAoQ09ORklHX0RJU0NPTlRJR01FTSkKLSAqIG1lbW9yeSBub2RlIHRhYmxlIGlzIHRoZSBkZWZhdWx0LgotICoKLSAqIEEgZ29vZCBwbGFjZSB0byBvdmVycmlkZSB0aGlzIHZhbHVlIGlzIGluY2x1ZGUvYXNtL2FyY2gvbWVtb3J5LmguCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUk1fTlVNTk9ERVNfSAotI2RlZmluZSBfX0FTTV9BUk1fTlVNTk9ERVNfSAotCi0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotCi0jaWZuZGVmIE5PREVTX1NISUZUCi0jIGRlZmluZSBOT0RFU19TSElGVAkyCS8qIE5vcm1hbGx5LCBNYXggNCBOb2RlcyAqLwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtaHdkZWYuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLWh3ZGVmLmgKaW5kZXggMWQwMzM0OS4uMWJjMWY5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtaHdkZWYuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS1od2RlZi5oCkBAIC03Myw2ICs3Myw3IEBACiAjZGVmaW5lIFBURV9FWFRfQVBfVVJXX1NSVwkoUFRFX0VYVF9BUDF8UFRFX0VYVF9BUDApCiAjZGVmaW5lIFBURV9FWFRfVEVYKHgpCQkoKHgpIDw8IDYpCS8qIHY1ICovCiAjZGVmaW5lIFBURV9FWFRfQVBYCQkoMSA8PCA5KQkvKiB2NiAqLworI2RlZmluZSBQVEVfRVhUX0NPSEVSRU5UCSgxIDw8IDkpCS8qIFhTY2FsZTMgKi8KICNkZWZpbmUgUFRFX0VYVF9TSEFSRUQJCSgxIDw8IDEwKQkvKiB2NiAqLwogI2RlZmluZSBQVEVfRVhUX05HCQkoMSA8PCAxMSkJLyogdjYgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKaW5kZXggZTU5NWFlMi4uZTg1YzA4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCkBAIC0xNTYsNiArMTU2LDcgQEAKICNkZWZpbmUgTF9QVEVfV1JJVEUJCSgxIDw8IDUpCiAjZGVmaW5lIExfUFRFX0VYRUMJCSgxIDw8IDYpCiAjZGVmaW5lIExfUFRFX0RJUlRZCQkoMSA8PCA3KQorI2RlZmluZSBMX1BURV9DT0hFUkVOVAkJKDEgPDwgOSkJLyogSS9PIGNvaGVyZW50ICh4c2MzKSAqLwogI2RlZmluZSBMX1BURV9TSEFSRUQJCSgxIDw8IDEwKQkvKiBzaGFyZWQgYmV0d2VlbiBDUFVzICh2NikgKi8KICNkZWZpbmUgTF9QVEVfQVNJRAkJKDEgPDwgMTEpCS8qIG5vbi1nbG9iYWwgKHVzZSBBU0lELCB2NikgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmggYi9pbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaAppbmRleCBhOWM3NWIyLi44NDI1MjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaApAQCAtNDUsOCArNDUsNiBAQAogCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgUFJPQ19JTkZPX1NaCTQ4Ci0KICNkZWZpbmUgSFdDQVBfU1dQCTEKICNkZWZpbmUgSFdDQVBfSEFMRgkyCiAjZGVmaW5lIEhXQ0FQX1RIVU1CCTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKaW5kZXggNDNhZDRlNS4uNDA2Y2E5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKQEAgLTE0Miw2ICsxNDIsOSBAQAogCTogImNjIik7CiB9CiAKKy8qIHdyaXRlX2Nhbl9sb2NrIC0gd291bGQgd3JpdGVfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCisjZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrID09IDB4ODAwMDAwMDApCisKIC8qCiAgKiBSZWFkIGxvY2tzIGFyZSBhIGJpdCBtb3JlIGhhaXJ5OgogICogIC0gRXhjbHVzaXZlbHkgbG9hZCB0aGUgbG9jayB2YWx1ZS4KQEAgLTE5OCw0ICsyMDEsNyBAQAogCiAjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSBnZW5lcmljX19yYXdfcmVhZF90cnlsb2NrKGxvY2spCiAKKy8qIHJlYWRfY2FuX2xvY2sgLSB3b3VsZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPyAqLworI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrIDwgMHg4MDAwMDAwMCkKKwogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAppbmRleCA5NWIzYWJmLi43Yzk1NjhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCkBAIC0xMjcsNiArMTI3LDEyIEBACiB9CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX1hTQzMpCisjZGVmaW5lCWNwdV9pc194c2NhbGUoKQkwCisjZWxzZQorI2RlZmluZQljcHVfaXNfeHNjYWxlKCkJMQorI2VuZGlmCisKICNkZWZpbmUgc2V0X2NyKHgpCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKIAkibWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMAlAIHNldCBDUiIJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCmluZGV4IDY1YWMzMDUuLmNiZjM5YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKQEAgLTM2MCw2ICszNjAsMjQgQEAKICNkZWZpbmUgX19BUk1fTlJfdXNyMzIJCQkoX19BUk1fTlJfQkFTRSs0KQogI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzCQkoX19BUk1fTlJfQkFTRSs1KQogCisvKgorICogVGhlIGZvbGxvd2luZyBzeXNjYWxscyBhcmUgb2Jzb2xldGUgYW5kIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIEVBQkkuCisgKi8KKyNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgJiYgIWRlZmluZWQoX19LRVJORUxfXykKKyN1bmRlZiBfX05SX3RpbWUKKyN1bmRlZiBfX05SX3Vtb3VudAorI3VuZGVmIF9fTlJfc3RpbWUKKyN1bmRlZiBfX05SX2FsYXJtCisjdW5kZWYgX19OUl91dGltZQorI3VuZGVmIF9fTlJfZ2V0cmxpbWl0CisjdW5kZWYgX19OUl9zZWxlY3QKKyN1bmRlZiBfX05SX3JlYWRkaXIKKyN1bmRlZiBfX05SX21tYXAKKyN1bmRlZiBfX05SX3NvY2tldGNhbGwKKyN1bmRlZiBfX05SX3N5c2NhbGwKKyN1bmRlZiBfX05SX2lwYworI2VuZGlmCisKICNkZWZpbmUgX19zeXMyKHgpICN4CiAjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKIApAQCAtMzkyLDcgKzQxMCw4IEBACiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCiAgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCiAJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCi0JOiBfX1NZU19SRUdfTElTVCgpICk7CQkJCQkJXAorCTogX19TWVNfUkVHX0xJU1QoKQkJCQkJCVwKKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKICAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAogICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKIH0KQEAgLTQwNiw3ICs0MjUsOCBAQAogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAogICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAogCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAotCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCkgKSApOwkJCQlcCisJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSApCQkJCQlcCisJOiAibWVtb3J5IiApOwkJCQkJCQlcCiAgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKICAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCiB9CkBAIC00MjEsNyArNDQxLDggQEAKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKICAgX19zeXNjYWxsKG5hbWUpCQkJCQkJCVwKIAk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKLQk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpICkgKTsJCQlcCisJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSApCQkJXAorCTogIm1lbW9yeSIgKTsJCQkJCQkJXAogICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQpAQCAtNDM4LDcgKzQ1OSw4IEBACiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCiAgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCiAJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCi0JOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSApICk7CVwKKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpICkJCVwKKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKICAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAogICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKIH0KQEAgLTQ1Niw3ICs0NzgsOCBAQAogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAogICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAogCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAotCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMiksICJyIiAoX19yMykgKSApOyBcCisJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSwgInIiIChfX3IzKSApIFwKKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKICAgX19yZXMgPSBfX3Jlc19yMDsJCQkJCQkJXAogICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKIH0KQEAgLTQ3Niw3ICs0OTksOCBAQAogICBfX3N5c2NhbGwobmFtZSkJCQkJCQkJXAogCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAogCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMiksCQlcCi0JCQkgICJyIiAoX19yMyksICJyIiAoX19yNCkgKSApOwkJCVwKKwkJCSAgInIiIChfX3IzKSwgInIiIChfX3I0KSApCQkJXAorCTogIm1lbW9yeSIgKTsJCQkJCQkJXAogICBfX3JlcyA9IF9fcmVzX3IwOwkJCQkJCQlcCiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQpAQCAtNDk2LDcgKzUyMCw4IEBACiAgIF9fc3lzY2FsbChuYW1lKQkJCQkJCQlcCiAJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCiAJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSwJCVwKLQkJCSAgInIiIChfX3IzKSwgInIiIChfX3I0KSwgInIiIChfX3I1KSApICk7CVwKKwkJCSAgInIiIChfX3IzKSwgInIiIChfX3I0KSwgInIiIChfX3I1KSApCQlcCisJOiAibWVtb3J5IiApOwkJCQkJCQlcCiAgIF9fcmVzID0gX19yZXNfcjA7CQkJCQkJCVwKICAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmggYi9pbmNsdWRlL2FzbS1hcm0vdmZwbWFjcm9zLmgKaW5kZXggMTViZDZlNy4uMjdmZTAyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3ZmcG1hY3Jvcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS92ZnBtYWNyb3MuaApAQCAtMTYsMTAgKzE2LDE4IEBACiAKIAlAIHJlYWQgYWxsIHRoZSB3b3JraW5nIHJlZ2lzdGVycyBiYWNrIGludG8gdGhlIFZGUAogCS5tYWNybwlWRlBGTERNSUEsIGJhc2UKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAJTERDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMyo0CQkgICAgQCBGTERNSUFYIFxiYXNlISwge2QwLWQxNX0KKyNlbHNlCisJTERDCXAxMSwgY3IwLCBbXGJhc2VdLCMzMio0CQkgICAgQCBGTERNSUFEIFxiYXNlISwge2QwLWQxNX0KKyNlbmRpZgogCS5lbmRtCiAKIAlAIHdyaXRlIGFsbCB0aGUgd29ya2luZyByZWdpc3RlcnMgb3V0IG9mIHRoZSBWRlAKIAkubWFjcm8JVkZQRlNUTUlBLCBiYXNlCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgogCVNUQwlwMTEsIGNyMCwgW1xiYXNlXSwjMzMqNAkJICAgIEAgRlNUTUlBWCBcYmFzZSEsIHtkMC1kMTV9CisjZWxzZQorCVNUQwlwMTEsIGNyMCwgW1xiYXNlXSwjMzIqNAkJICAgIEAgRlNUTUlBRCBcYmFzZSEsIHtkMC1kMTV9CisjZW5kaWYKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKaW5kZXggMWQ2M2MyYS4uYjFjNTkzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oCkBAIC04LDcgKzgsNiBAQAogICovCiAKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50KTsKLSNkZWZpbmUgcHJlcGFyZV90b19zd2l0Y2goKSAgICAgZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgbGFzdCA9IHJlc3VtZShwcmV2LG5leHQsIFwKIAkJCQkJIChpbnQpJigoc3RydWN0IHRhc2tfc3RydWN0ICopMCktPnRocmVhZCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKaW5kZXggMjYyN2JiZC4uYmIyZGZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCkBAIC0yODgsNyArMjg4LDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKaW5kZXggZjcyZmYwYy4uMTczNGVkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaApAQCAtMTgsOCArMTgsNiBAQAogCiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKIAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpICAgIGRvIHsgfSB3aGlsZSgwKQotCiAvKgogICogc3dpdGNoX3RvKHByZXYsIG5leHQpIHNob3VsZCBzd2l0Y2ggZnJvbSB0YXNrIGBwcmV2JyB0byBgbmV4dCcKICAqIGBwcmV2JyB3aWxsIG5ldmVyIGJlIHRoZSBzYW1lIGFzIGBuZXh0Jy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAppbmRleCAzMjI1MzFjLi4yNjYyYTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCkBAIC0yODksNyArMjg5LDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCmluZGV4IDM1OGU0ZDMuLmMyMDU5YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCkBAIC0xNTksMTcgKzE1OSw4IEBACiAjZGVmaW5lIGxhenlfbW11X3Byb3RfdXBkYXRlKHB0ZSkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZm5kZWYgX19IQVZFX0FSQ0hfTVVMVElQTEVfWkVST19QQUdFCisjaWZuZGVmIF9fSEFWRV9BUkNIX01PVkVfUFRFCiAjZGVmaW5lIG1vdmVfcHRlKHB0ZSwgcHJvdCwgb2xkX2FkZHIsIG5ld19hZGRyKQkocHRlKQotI2Vsc2UKLSNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKLSh7CQkJCQkJCQkJXAotIAlwdGVfdCBuZXdwdGUgPSAocHRlKTsJCQkJCQlcCi0JaWYgKHB0ZV9wcmVzZW50KHB0ZSkgJiYgcGZuX3ZhbGlkKHB0ZV9wZm4ocHRlKSkgJiYJCVwKLQkJCXB0ZV9wYWdlKHB0ZSkgPT0gWkVST19QQUdFKG9sZF9hZGRyKSkJCVwKLQkJbmV3cHRlID0gbWtfcHRlKFpFUk9fUEFHRShuZXdfYWRkciksIChwcm90KSk7CQlcCi0JbmV3cHRlOwkJCQkJCQkJXAotfSkKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaAppbmRleCBkZmU5NmM3Li44ZTgxY2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaApAQCAtNCw4ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxlKDApCi0KIC8qCiAgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIHB0ciwgZmlyc3QgY2hlY2tpbmcgdGhhdAogICogcHRyIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLiAgVGhpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaAppbmRleCA1NmE0YTU2Li5hZGIwNTE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaApAQCAtMjg1LDcgKzI4NSw3IEBACiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCShfX05SX21xX29wZW4rMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCShfX05SX21xX29wZW4rNCkKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCShfX05SX21xX29wZW4rNSkKLSNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkyODMKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyODMKICNkZWZpbmUgX19OUl93YWl0aWQJCTI4NAogLyogI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CTI4NSAqLwogI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4NgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAppbmRleCBmZjlhYzhkLi4yODgyMzNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaApAQCAtMTM5LDYgKzEzOSw4IEBACiAKIGV4dGVybiBpbnQgdGltZXJfb3Zlcl84MjU0OwogCitleHRlcm4gaW50IG1vZGVybl9hcGljKHZvaWQpOworCiAjZWxzZSAvKiAhQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkgeyB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCmluZGV4IDIyZDgwZWMuLjRkZGNlNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaApAQCAtMTgzLDYgKzE4Myw3IEBACiB7CiAJaW50IF9faTsKICNpZmRlZiBDT05GSUdfTTM4NgorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaWYodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODY9PTMpKQogCQlnb3RvIG5vX3hhZGQ7CiAjZW5kaWYKQEAgLTE5NiwxMCArMTk3LDEwIEBACiAKICNpZmRlZiBDT05GSUdfTTM4Ngogbm9feGFkZDogLyogTGVnYWN5IDM4NiBwcm9jZXNzb3IgKi8KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX2kgPSBhdG9taWNfcmVhZCh2KTsKIAlhdG9taWNfc2V0KHYsIGkgKyBfX2kpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIGkgKyBfX2k7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgKaW5kZXggNWMwYjU4Ny4uYjQ0YmZjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgKQEAgLTcxLDYgKzcxLDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfUDQJCSgzKjMyKyA3KSAvKiBQNCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MgKDMqMzIrIDgpIC8qIFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVAJCSgzKjMyKyA5KSAvKiBzbXAga2VybmVsIHJ1bm5pbmcgb24gdXAgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUsgKDMqMzIrMTApIC8qIEZYU0FWRSBsZWFrcyBGT1AvRklQL0ZPUCAqLwogCiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwMSAoZWN4KSwgd29yZCA0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTTMJKDQqMzIrIDApIC8qIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMtMyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lODIwLmggYi9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaAppbmRleCBlZGY2NWJlLi5jYTgyYWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaApAQCAtMzUsNiArMzUsMTAgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgZTgyMG1hcCBlODIwOworCitleHRlcm4gaW50IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgIHVuc2lnbmVkIHR5cGUpOworCiAjZW5kaWYvKiFfX0FTU0VNQkxZX18qLwogCiAjZW5kaWYvKl9fRTgyMF9IRUFERVIqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmggYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAppbmRleCAxNmVmOWY5Li43ZjFhOGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaApAQCAtODksNiArODksNyBAQAogICogdGhlbiAzMiBiaXQgSFBFVCBjb3VudGVyIHdyYXBzYXJvdW5kIGluIGxlc3MgdGhhbiAwLjUgc2VjLgogICovCiAjZGVmaW5lIEhQRVRfTUlOX1BFUklPRCAoMTAwMDAwVUwpCisjZGVmaW5lIEhQRVRfVElDS19SQVRFICAoSFogKiAxMDAwMDBVTCkKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF90aWNrOyAgCS8qIGhwZXQgY2xrcyBjb3VudCBwZXIgdGljayAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF9hZGRyZXNzOwkvKiBocGV0IG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pMzg3LmggYi9pbmNsdWRlL2FzbS1pMzg2L2kzODcuaAppbmRleCAxNTJkMGJhLi5iYzFkNmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2kzODcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2kzODcuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgpAQCAtMzgsMTcgKzM5LDM4IEBACiBleHRlcm4gdm9pZCBrZXJuZWxfZnB1X2JlZ2luKHZvaWQpOwogI2RlZmluZSBrZXJuZWxfZnB1X2VuZCgpIGRvIHsgc3R0cygpOyBwcmVlbXB0X2VuYWJsZSgpOyB9IHdoaWxlKDApCiAKKy8qIFdlIG5lZWQgYSBzYWZlIGFkZHJlc3MgdGhhdCBpcyBjaGVhcCB0byBmaW5kIGFuZCB0aGF0IGlzIGFscmVhZHkKKyAgIGluIEwxIGR1cmluZyBjb250ZXh0IHN3aXRjaC4gVGhlIGJlc3QgY2hvaWNlcyBhcmUgdW5mb3J0dW5hdGVseQorICAgZGlmZmVyZW50IGZvciBVUCBhbmQgU01QICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzYWZlX2FkZHJlc3MgKF9fcGVyX2NwdV9vZmZzZXRbMF0pCisjZWxzZQorI2RlZmluZSBzYWZlX2FkZHJlc3MgKGtzdGF0X2NwdSgwKS5jcHVzdGF0LnVzZXIpCisjZW5kaWYKKwogLyoKICAqIFRoZXNlIG11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdCBkaXNhYmxlZAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zYXZlX2luaXRfZnB1KCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayApCiB7CisJLyogVXNlIG1vcmUgbm9wcyB0aGFuIHN0cmljdGx5IG5lZWRlZCBpbiBjYXNlIHRoZSBjb21waWxlcgorCSAgIHZhcmllcyBjb2RlICovCiAJYWx0ZXJuYXRpdmVfaW5wdXQoCi0JCSJmbnNhdmUgJTEgOyBmd2FpdCA7IiBHRU5FUklDX05PUDIsCi0JCSJmeHNhdmUgJTEgOyBmbmNsZXgiLAorCQkiZm5zYXZlICVbZnhdIDtmd2FpdDsiIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDQsCisJCSJmeHNhdmUgJVtmeF1cbiIKKwkJImJ0ICQ3LCVbZnN3XSA7IGpuYyAxZiA7IGZuY2xleFxuMToiLAogCQlYODZfRkVBVFVSRV9GWFNSLAotCQkibSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlKQotCQk6Im1lbW9yeSIpOworCQlbZnhdICJtIiAodHNrLT50aHJlYWQuaTM4Ny5meHNhdmUpLAorCQlbZnN3XSAibSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlLnN3ZCkgOiAibWVtb3J5Iik7CisJLyogQU1EIEs3L0s4IENQVXMgZG9uJ3Qgc2F2ZS9yZXN0b3JlIEZEUC9GSVAvRk9QIHVubGVzcyBhbiBleGNlcHRpb24KKwkgICBpcyBwZW5kaW5nLiAgQ2xlYXIgdGhlIHg4NyBzdGF0ZSBoZXJlIGJ5IHNldHRpbmcgaXQgdG8gZml4ZWQKKyAgIAkgICB2YWx1ZXMuIHNhZmVfYWRkcmVzcyBpcyBhIHJhbmRvbSB2YXJpYWJsZSB0aGF0IHNob3VsZCBiZSBpbiBMMSAqLworCWFsdGVybmF0aXZlX2lucHV0KAorCQlHRU5FUklDX05PUDggR0VORVJJQ19OT1AyLAorCQkiZW1tc1xuXHQiCSAgCS8qIGNsZWFyIHN0YWNrIHRhZ3MgKi8KKwkJImZpbGRsICVbYWRkcl0iLCAJLyogc2V0IEY/UCB0byBkZWZpbmVkIHZhbHVlICovCisJCVg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLLAorCQlbYWRkcl0gIm0iIChzYWZlX2FkZHJlc3MpKTsKIAl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAppbmRleCA1MWM0ZTVmLi5kOTJlMjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaApAQCAtMjAwLDYgKzIwMCw3IEBACiBleHRlcm4gaW50IGlvX2FwaWNfZ2V0X3ZlcnNpb24gKGludCBpb2FwaWMpOwogZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKTsKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKK2V4dGVybiBpbnQgdGltZXJfdXNlc19pb2FwaWNfcGluXzA7CiAjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KIAogZXh0ZXJuIGludCAoKmlvYXBpY19yZW51bWJlcl9pcnEpKGludCBpb2FwaWMsIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKaW5kZXggNjIxMTNkMy4uNzcwYmY2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oCkBAIC0xOCw3ICsxOCw2IEBACiBleHRlcm4gdm9pZCBnZXRfc21wX2NvbmZpZyAodm9pZCk7CiBleHRlcm4gaW50IG5yX2lvYXBpY3M7CiBleHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKLWV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3R5cGUgW01BWF9NUF9CVVNTRVNdOwogZXh0ZXJuIGludCBtcF9pcnFfZW50cmllczsKIGV4dGVybiBzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxcyBbTUFYX0lSUV9TT1VSQ0VTXTsKIGV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxZjM4Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi0KLS8qIE1heCAxNiBOb2RlcyAqLwotI2RlZmluZSBOT0RFU19TSElGVAk0Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FDUElfU1JBVCkKLQotLyogTWF4IDggTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJMwotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl9OVU1BUSAqLwotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IDI3YmRlOTcuLjI3NTZkNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgKQEAgLTE4LDYgKzE4LDkgQEAKICNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpIHNldF9wdGUocHRlcHRyLHB0ZXZhbCkKICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IChwbWR2YWwpKQogCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQlkbyB7IHNldF9wdGVfYXQobW0sIGFkZHIsIHhwLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBtZF9jbGVhcih4cCkJZG8geyBzZXRfcG1kKHhwLCBfX3BtZCgwKSk7IH0gd2hpbGUgKDApCisKICNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKG1tLGFkZHIseHApCV9fcHRlKHhjaGcoJih4cCktPnB0ZV9sb3csIDApKQogI2RlZmluZSBwdGVfc2FtZShhLCBiKQkJKChhKS5wdGVfbG93ID09IChiKS5wdGVfbG93KQogI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAzNmE1YWE2Li5kY2NiMWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTNsZXZlbC5oCkBAIC04NSw2ICs4NSwyNiBAQAogI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKSBwdWRfcGFnZSgqKHB1ZCkpICsgXAogCQkJcG1kX2luZGV4KGFkZHJlc3MpKQogCisvKgorICogRm9yIFBURXMgYW5kIFBERXMsIHdlIG11c3QgY2xlYXIgdGhlIFAtYml0IGZpcnN0IHdoZW4gY2xlYXJpbmcgYSBwYWdlIHRhYmxlCisgKiBlbnRyeSwgc28gY2xlYXIgdGhlIGJvdHRvbSBoYWxmIGZpcnN0IGFuZCBlbmZvcmNlIG9yZGVyaW5nIHdpdGggYSBjb21waWxlcgorICogYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVwLT5wdGVfbG93ID0gMDsKKwlzbXBfd21iKCk7CisJcHRlcC0+cHRlX2hpZ2ggPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWQpCit7CisJdTMyICp0bXAgPSAodTMyICopcG1kOworCSp0bXAgPSAwOworCXNtcF93bWIoKTsKKwkqKHRtcCArIDEpID0gMDsKK30KKwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CiAJcHRlX3QgcmVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAppbmRleCBlZTA1NmM0Li42NzJjM2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApAQCAtMjA0LDEyICsyMDQsMTAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBnMFtdOwogCiAjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCSgoeCkucHRlX2xvdyAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQotI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkJZG8geyBzZXRfcHRlX2F0KG1tLCBhZGRyLCB4cCwgX19wdGUoMCkpOyB9IHdoaWxlICgwKQogCiAvKiBUbyBhdm9pZCBoYXJtZnVsIHJhY2VzLCBwbWRfbm9uZSh4KSBzaG91bGQgY2hlY2sgb25seSB0aGUgbG93ZXIgd2hlbiBQQUUgKi8KICNkZWZpbmUgcG1kX25vbmUoeCkJKCEodW5zaWduZWQgbG9uZylwbWRfdmFsKHgpKQogI2RlZmluZSBwbWRfcHJlc2VudCh4KQkocG1kX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCi0jZGVmaW5lIHBtZF9jbGVhcih4cCkJZG8geyBzZXRfcG1kKHhwLCBfX3BtZCgwKSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lCXBtZF9iYWQoeCkJKChwbWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCiAKIApAQCAtMjY4LDcgKzI2Niw3IEBACiAJcHRlX3QgcHRlOwogCWlmIChmdWxsKSB7CiAJCXB0ZSA9ICpwdGVwOwotCQkqcHRlcCA9IF9fcHRlKDApOworCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwogCX0gZWxzZSB7CiAJCXB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKaW5kZXggMmU3ZjNlMi4uZWI0YjE1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCkBAIC0yODgsNyArMjg4LDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAvKiAjZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjg1ICovCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg2CkBAIC0zMTgsMTAgKzMxOCwxMiBAQAogI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMxMAogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMTEKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzEyCi0jZGVmaW5lIF9fTlJfc3lzX3NwbGljZQkJMzEzCi0jZGVmaW5lIF9fTlJfc3lzX3N5bmNfZmlsZV9yYW5nZSAzMTQKKyNkZWZpbmUgX19OUl9zcGxpY2UJCTMxMworI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkzMTQKKyNkZWZpbmUgX19OUl90ZWUJCTMxNQorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkzMTYKIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMTUKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzE3CiAKIC8qCiAgKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyODogc2VlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmggYi9pbmNsdWRlL2FzbS1pYTY0L2FjcGktZXh0LmgKaW5kZXggNTZkMmRkYy4uNzM0ZDEzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9hY3BpLWV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS1leHQuaApAQCAtMSwxMiArMSwxNSBAQAogLyoKLSAqIGlhNjQvcGxhdGZvcm0vaHAvY29tbW9uL2hwX2FjcGkuaAorICogKGMpIENvcHlyaWdodCAyMDAzLCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglBbGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkBocC5jb20+CisgKglCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkCi0gKiBDb3B5cmlnaHQgKEMpIEFsZXggV2lsbGlhbXNvbgotICogQ29weXJpZ2h0IChDKSBCam9ybiBIZWxnYWFzCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFZlbmRvciBzcGVjaWZpYyBleHRlbnNpb25zIHRvIEFDUEkuCiAgKi8KKwogI2lmbmRlZiBfQVNNX0lBNjRfQUNQSV9FWFRfSAogI2RlZmluZSBfQVNNX0lBNjRfQUNQSV9FWFRfSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGkuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCmluZGV4IGQ3MzQ1ODUuLjA5YTVkZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCkBAIC0xMTAsOSArMTEwLDggQEAKIGV4dGVybiBpbnQgYWRkaXRpb25hbF9jcHVzOwogCiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQotLyogUHJveGltaXR5IGJpdG1hcCBsZW5ndGg7IF9QWE0gaXMgYXQgbW9zdCAyNTUgKDggYml0KSovCi0jaWZkZWYgQ09ORklHX0lBNjRfTlJfTk9ERVMKLSNkZWZpbmUgTUFYX1BYTV9ET01BSU5TIENPTkZJR19JQTY0X05SX05PREVTCisjaWYgTUFYX05VTU5PREVTID4gMjU2CisjZGVmaW5lIE1BWF9QWE1fRE9NQUlOUyBNQVhfTlVNTk9ERVMKICNlbHNlCiAjZGVmaW5lIE1BWF9QWE1fRE9NQUlOUyAoMjU2KQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaAppbmRleCA5MDkyMWUxLi42Y2M1MTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAppbmRleCAyMThjNDU4Li5jMTk1YTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKQEAgLTU4LDYgKzU4LDggQEAKIAlESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwKIAlESUVfTUNBX1JFTkRaVk9VU19QUk9DRVNTLAogCURJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLAorCURJRV9NQ0FfTkVXX1RJTUVPVVQsCisJRElFX0lOSVRfRU5URVIsCiAJRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwKIAlESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsCiAJRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlYy5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKaW5kZXggYzNlNGVkOC4uYTljOTk1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKQEAgLTM0Nyw5ICszNDcsMTEgQEAKICNlbmRpZgogI2lmbmRlZiBwbGF0Zm9ybV9wY2lfbGVnYWN5X3JlYWQKICMgZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfcmVhZAlpYTY0X3BjaV9sZWdhY3lfcmVhZAorZXh0ZXJuIGludCBpYTY0X3BjaV9sZWdhY3lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MTYgcG9ydCwgdTMyICp2YWwsIHU4IHNpemUpOwogI2VuZGlmCiAjaWZuZGVmIHBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUKICMgZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUJaWE2NF9wY2lfbGVnYWN5X3dyaXRlCitleHRlcm4gaW50IGlhNjRfcGNpX2xlZ2FjeV93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MTYgcG9ydCwgdTMyIHZhbCwgdTggc2l6ZSk7CiAjZW5kaWYKICNpZm5kZWYgcGxhdGZvcm1faW5iCiAjIGRlZmluZSBwbGF0Zm9ybV9pbmIJCV9faWE2NF9pbmIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmggYi9pbmNsdWRlL2FzbS1pYTY0L21jYS5oCmluZGV4IGJmYmJiOGQuLjljNTM4OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaApAQCAtMTQ4LDYgKzE0OCwxMSBAQAogZXh0ZXJuIHZvaWQgaWE2NF91bnJlZ19NQ0FfZXh0ZW5zaW9uKHZvaWQpOwogZXh0ZXJuIHU2NCBpYTY0X2dldF9ybmF0KHU2NCAqKTsKIAorc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgeworCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqc29zOworCWludCAqbW9uYXJjaF9jcHU7Cit9OworCiAjZWxzZQkvKiBfX0FTU0VNQkxZX18gKi8KIAogI2RlZmluZSBJQTY0X01DQV9DT1JSRUNURUQJMHgwCS8qIEVycm9yIGhhcyBiZWVuIGNvcnJlY3RlZCBieSBPU19NQ0EgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaAppbmRleCA1YTMyMjRmLi5iZWQ3M2E2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tdXRleC5oCkBAIC04NCw3ICs4NCw3IEBACiBzdGF0aWMgaW5saW5lIGludAogX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKGF0b21pY190ICpjb3VudCwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7Ci0JaWYgKGxpa2VseShjbXB4Y2hnX2FjcShjb3VudCwgMSwgMCkpID09IDEpCisJaWYgKGNtcHhjaGdfYWNxKGNvdW50LCAxLCAwKSA9PSAxKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkMzU2Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0jaWZkZWYgQ09ORklHX0lBNjRfRElHCi0vKiBNYXggOCBOb2RlcyAqLwotIyAgZGVmaW5lIE5PREVTX1NISUZUCTMKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjRfSFBfWlgxKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKQotLyogTWF4IDMyIE5vZGVzICovCi0jICBkZWZpbmUgTk9ERVNfU0hJRlQJNQotI2VsaWYgZGVmaW5lZChDT05GSUdfSUE2NF9TR0lfU04yKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCi0jICBpZiBDT05GSUdfSUE2NF9OUl9OT0RFUyA9PSAyNTYKLSMgICAgZGVmaW5lIE5PREVTX1NISUZUCTgKLSMgIGVsaWYgQ09ORklHX0lBNjRfTlJfTk9ERVMgPD0gNTEyCi0jICAgIGRlZmluZSBOT0RFU19TSElGVCAgICA5Ci0jICBlbGlmIENPTkZJR19JQTY0X05SX05PREVTIDw9IDEwMjQKLSMgICAgZGVmaW5lIE5PREVTX1NISUZUICAgIDEwCi0jICBlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuMi9zbl9od3BlcmYuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc24yL3NuX2h3cGVyZi5oCmluZGV4IDI5MWVmM2QuLmU2MWViYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc24yL3NuX2h3cGVyZi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc24yL3NuX2h3cGVyZi5oCkBAIC00NSw4ICs0NSwxMiBAQAogI2RlZmluZSBTTl9IV1BFUkZfSVNfTk9ERSh4KQkJKCh4KSAmJiBzdHJzdHIoKHgpLT5uYW1lLCAiU0h1YiIpKQogI2RlZmluZSBTTl9IV1BFUkZfSVNfTk9ERV9TSFVCMih4KQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJTSHViIDIuIikpCiAjZGVmaW5lIFNOX0hXUEVSRl9JU19JT05PREUoeCkJCSgoeCkgJiYgc3Ryc3RyKCh4KS0+bmFtZSwgIlRJTyIpKQotI2RlZmluZSBTTl9IV1BFUkZfSVNfUk9VVEVSKHgpCQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJSb3V0ZXIiKSkKICNkZWZpbmUgU05fSFdQRVJGX0lTX05MM1JPVVRFUih4KQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJOTDNSb3V0ZXIiKSkKKyNkZWZpbmUgU05fSFdQRVJGX0lTX05MNFJPVVRFUih4KQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJOTDRSb3V0ZXIiKSkKKyNkZWZpbmUgU05fSFdQRVJGX0lTX09MRFJPVVRFUih4KQkoKHgpICYmIHN0cnN0cigoeCktPm5hbWUsICJSb3V0ZXIiKSkKKyNkZWZpbmUgU05fSFdQRVJGX0lTX1JPVVRFUih4KQkJKFNOX0hXUEVSRl9JU19OTDNST1VURVIoeCkgfHwgCQlcCisJCQkJCSAJU05fSFdQRVJGX0lTX05MNFJPVVRFUih4KSB8fCAJXAorCQkJCQkgCVNOX0hXUEVSRl9JU19PTERST1VURVIoeCkpCiAjZGVmaW5lIFNOX0hXUEVSRl9GT1JFSUdOKHgpCQkoKHgpICYmICEoeCktPnNuX2h3cF90aGlzX3BhcnQgJiYgISh4KS0+c25faHdwX2lzX3NoYXJlZCkKICNkZWZpbmUgU05fSFdQRVJGX1NBTUVfT0JKVFlQRSh4LHkpCSgoU05fSFdQRVJGX0lTX05PREUoeCkgJiYgU05fSFdQRVJGX0lTX05PREUoeSkpIHx8XAogCQkJCQkoU05fSFdQRVJGX0lTX0lPTk9ERSh4KSAmJiBTTl9IV1BFUkZfSVNfSU9OT0RFKHkpKSB8fFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCmluZGV4IGJmNGNjODYuLjUxYWNhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtOCw3ICs4LDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAogCkBAIC04NSw2ICs4NSw3IEBACiAKICNkZWZpbmUgIFNOX1NBTF9HRVRfUFJPTV9GRUFUVVJFX1NFVAkJICAgMHgwMjAwMDA2NQogI2RlZmluZSAgU05fU0FMX1NFVF9PU19GRUFUVVJFX1NFVAkJICAgMHgwMjAwMDA2NgorI2RlZmluZSAgU05fU0FMX0lOSkVDVF9FUlJPUgkJCSAgIDB4MDIwMDAwNjcKIAogLyoKICAqIFNlcnZpY2Utc3BlY2lmaWMgY29uc3RhbnRzCkBAIC03MDUsMTAgKzcwNiw4IEBACiBzbl9jaGFuZ2VfbWVtcHJvdGVjdCh1NjQgcGFkZHIsIHU2NCBsZW4sIHU2NCBwZXJtcywgdTY0ICpuYXNpZF9hcnJheSkKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKLQlpbnQgY25vZGVpZDsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAotCWNub2RlaWQgPSBuYXNpZF90b19jbm9kZWlkKGdldF9ub2RlX251bWJlcihwYWRkcikpOwogCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CiAJaWE2NF9zYWxfb2VtY2FsbF9ub2xvY2soJnJldF9zdHVmZiwgU05fU0FMX01FTVBST1RFQ1QsIHBhZGRyLCBsZW4sCiAJCQkJKHU2NCluYXNpZF9hcnJheSwgcGVybXMsIDAsIDAsIDApOwpAQCAtMTE0MCw0ICsxMTM5LDE2IEBACiAJcmV0dXJuIHJ2LnN0YXR1czsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3NuX2luamVjdF9lcnJvcih1NjQgcGFkZHIsIHU2NCAqZGF0YSwgdTY0ICplY2MpCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCWlhNjRfc2FsX29lbWNhbGxfbm9sb2NrKCZyZXRfc3R1ZmYsIFNOX1NBTF9JTkpFQ1RfRVJST1IsIHBhZGRyLCAodTY0KWRhdGEsCisJCQkJKHU2NCllY2MsIDAsIDAsIDAsIDApOworCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CiAjZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NOX1NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKaW5kZXggNTYzOTRhMi4uZTUzOTJjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaApAQCAtNjcsNyArNjcsNyBAQAogI2RlZmluZSBlbmRfb2Zfc3RhY2socCkgKHVuc2lnbmVkIGxvbmcgKikoKHZvaWQgKikocCkgKyBJQTY0X1JCU19PRkZTRVQpCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEFTS19TVFJVQ1RfQUxMT0NBVE9SCi0jZGVmaW5lIGFsbG9jX3Rhc2tfc3RydWN0KCkJKCh0YXNrX3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIEtFUk5FTF9TVEFDS19TSVpFX09SREVSKSkKKyNkZWZpbmUgYWxsb2NfdGFza19zdHJ1Y3QoKQkoKHRhc2tfdCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIEtFUk5FTF9TVEFDS19TSVpFX09SREVSKSkKICNkZWZpbmUgZnJlZV90YXNrX3N0cnVjdCh0c2spCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0c2spLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgKaW5kZXggM2VlMTlkZi4uNjE2YjVlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaApAQCAtMjMsNiArMjMsMTEgQEAKICNkZWZpbmUgUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVMgMjU1CiAKIC8qCisgKiBEaXN0YW5jZSBhYm92ZSB3aGljaCB3ZSBiZWdpbiB0byB1c2Ugem9uZSByZWNsYWltCisgKi8KKyNkZWZpbmUgUkVDTEFJTV9ESVNUQU5DRSAxNQorCisvKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgQ1BVICdjcHUnCiAgKi8KICNkZWZpbmUgY3B1X3RvX25vZGUoY3B1KSAoaW50KShjcHVfdG9fbm9kZV9tYXBbY3B1XSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCmluZGV4IDM2MDcwYzEuLjcxMDc3NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaApAQCAtMjg2LDEyICsyODYsMTcgQEAKIC8qIDEyOTQsIDEyOTUgcmVzZXJ2ZWQgZm9yIHBzZWxlY3QvcHBvbGwgKi8KICNkZWZpbmUgX19OUl91bnNoYXJlCQkJMTI5NgogI2RlZmluZSBfX05SX3NwbGljZQkJCTEyOTcKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJCTEyOTgKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCTEyOTkKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJCTEzMDAKKyNkZWZpbmUgX19OUl90ZWUJCQkxMzAxCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQkxMzAyCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJCTI3NCAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLworI2RlZmluZSBOUl9zeXNjYWxscwkJCTI3OSAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLwogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC92Z2EuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdmdhLmgKaW5kZXggYmMzMzQ5Zi4uMDkxMTc3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC92Z2EuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3ZnYS5oCkBAIC0xNyw3ICsxNyw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyB2Z2FfY29uc29sZV9pb2Jhc2U7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB2Z2FfY29uc29sZV9tZW1iYXNlOwogCi0jZGVmaW5lIFZHQV9NQVBfTUVNKHgpCSgodW5zaWduZWQgbG9uZykgaW9yZW1hcCh2Z2FfY29uc29sZV9tZW1iYXNlICsgKHgpLCAwKSkKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCkJKCh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUodmdhX2NvbnNvbGVfbWVtYmFzZSArICh4KSwgMCkpCiAKICNkZWZpbmUgdmdhX3JlYWRiKHgpCSgqKHgpKQogI2RlZmluZSB2Z2Ffd3JpdGViKHgseSkJKCooeSkgPSAoeCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oIGIvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaAppbmRleCBiN2Y0ZDhhLi4xYTFhYTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmgKQEAgLTEwOSw2ICsxMDksOSBAQAogCXB1c2gJcjEzCiAJbXZmYWNoaQlyMTMKIAlwdXNoCXIxMworCWxkaQlyMTMsICMwCisJcHVzaAlyMTMJCTsgZHVtbXkgcHVzaCBhY2MxaAorCXB1c2gJcjEzCQk7IGR1bW15IHB1c2ggYWNjMWwKICNlbHNlCiAjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgogI2VuZGlmCkBAIC0xNTYsNiArMTU5LDggQEAKIAlwb3AJcjEzCiAJbXZ0YWNsbwlyMTMsIGExCiAjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQorCXBvcAlyMTMJCTsgZHVtbXkgcG9wIGFjYzFoCisJcG9wCXIxMwkJOyBkdW1teSBwb3AgYWNjMWwKIAlwb3AJcjEzCiAJbXZ0YWNoaQlyMTMKIAlwb3AJcjEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL21hcHBpMy9tYXBwaTNfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL21hcHBpMy9tYXBwaTNfcGxkLmgKaW5kZXggMWQzYzI1ZC4uMDMxMzY5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tYXBwaTMvbWFwcGkzX3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbWFwcGkzL21hcHBpM19wbGQuaApAQCAtNTMsMTYgKzUzLDE0IEBACiAvKiBQb3dlciBDb250cm9sIG9mIE1NQyBhbmQgQ0YgKi8KICNkZWZpbmUgUExEX0NQQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDE0MDAwKQogCi0KLS8qPT09PSBJQ1UgPT09PSovCi0jZGVmaW5lICBNMzJSX0lSUV9QQzEwNCAgICAgICAgKDUpICAgLyogSU5UNChQQy8xMDQpICovCi0jZGVmaW5lICBNMzJSX0lSUV9JMkMgICAgICAgICAgKDI4KSAgLyogSTJDLUJVUyAgICAgKi8KLSNkZWZpbmUgIFBMRF9JUlFfQ0ZJUkVRICAgICAgICg2KSAgLyogSU5UNSBDRkMgQ2FyZCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgIFBMRF9JUlFfQ0ZDX0lOU0VSVCAgICg3KSAgLyogSU5UNiBDRkMgQ2FyZCBJbnNlcnQgKi8KLSNkZWZpbmUgIFBMRF9JUlFfSURFSVJFUSAgICAgICg4KSAgLyogSU5UNyBJREUgSW50ZXJydXB0ICAgKi8KLSNkZWZpbmUgIFBMRF9JUlFfTU1DQ0FSRCAgICAgICg0MykgIC8qIE1NQyBDYXJkIEluc2VydCAqLwotI2RlZmluZSAgUExEX0lSUV9NTUNJUlEgICAgICAgKDQ0KSAgLyogTU1DIFRyYW5zZmVyIERvbmUgKi8KLQorLyogSUNVICovCisjZGVmaW5lIE0zMlJfSVJRX1BDMTA0CQkoNSkJLyogSU5UNChQQy8xMDQpICovCisjZGVmaW5lIE0zMlJfSVJRX0kyQwkJKDI4KQkvKiBJMkMtQlVTICovCisjZGVmaW5lIFBMRF9JUlFfQ0ZJUkVRCQkoNikJLyogSU5UNSBDRkMgQ2FyZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUExEX0lSUV9DRkNfSU5TRVJUCSg3KQkvKiBJTlQ2IENGQyBDYXJkIEluc2VydCAmIEVqZWN0ICovCisjZGVmaW5lIFBMRF9JUlFfSURFSVJFUQkJKDgpCS8qIElOVDcgSURFIEludGVycnVwdCAqLworI2RlZmluZSBQTERfSVJRX01NQ0NBUkQJCSg0MykJLyogTU1DIENhcmQgSW5zZXJ0ICovCisjZGVmaW5lIFBMRF9JUlFfTU1DSVJRCQkoNDQpCS8qIE1NQyBUcmFuc2ZlciBEb25lICovCiAKICNpZiAwCiAvKiBMRUQgQ29udHJvbApAQCAtOTcsNyArOTUsNiBAQAogI2RlZmluZSBQTERfQ1JDMTZBREFUQQkJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMDgpCiAjZGVmaW5lIFBMRF9DUkMxNkFJTkRBVEEJX19yZWcxNihQTERfQkFTRSArIDB4MTgwMGEpCiAKLQogI2lmIDAKIC8qIFJUQyAqLwogI2RlZmluZSBQTERfUlRDQ1IJCV9fcmVnMTYoUExEX0JBU0UgKyAweDFjMDAwKQpAQCAtMTQwLDQgKzEzNyw3IEBACiAKICNlbmRpZgogCisvKiBSZXNldCBDb250cm9sICovCisjZGVmaW5lIFBMRF9SRUJPT1QJCV9fcmVnMTYoUExEX0JBU0UgKyAweDM4MDAwKQorCiAjZW5kaWYJLyogX01BUFBJM19QTEQuSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tbTMyci9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzlhMzlkNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9BU01fTlVNTk9ERVNfSF8KLSNkZWZpbmUgX0FTTV9OVU1OT0RFU19IXwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjcwMCkKLSNkZWZpbmUJTk9ERVNfU0hJRlQJMQkvKiBNYXggMiBOb2RlcyAqLwotI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMCAqLwotCi0jZW5kaWYJLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwotCi0jZW5kaWYJLyogX0FTTV9OVU1OT0RFU19IXyAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaAppbmRleCAwZDA1OGIyLi41M2M3OTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKQEAgLTQzLDYgKzQzLDE0IEBACiAjZGVmaW5lIFBUX0FDQzFMCTE4CiAjZGVmaW5lIFBUX0FDQ0gJCVBUX0FDQzBICiAjZGVmaW5lIFBUX0FDQ0wJCVBUX0FDQzBMCisjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQorI2RlZmluZSBQVF9BQ0NICQkxNQorI2RlZmluZSBQVF9BQ0NMCQkxNgorI2RlZmluZSBQVF9EVU1NWV9BQ0MxSAkxNworI2RlZmluZSBQVF9EVU1NWV9BQ0MxTAkxOAorI2Vsc2UKKyNlcnJvciB1bmtub3duIGlzYSBjb25pZmlndXJhdGlvbgorI2VuZGlmCiAjZGVmaW5lIFBUX1BTVwkJMTkKICNkZWZpbmUgUFRfQlBDCQkyMAogI2RlZmluZSBQVF9CQlBTVwkyMQpAQCAtNTIsMjEgKzYwLDYgQEAKICNkZWZpbmUgUFRfTFIJCTI1CiAjZGVmaW5lIFBUX1NQSQkJMjYKICNkZWZpbmUgUFRfT1JJR1IwCTI3Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQotI2RlZmluZSBQVF9BQ0NICQkxNQotI2RlZmluZSBQVF9BQ0NMCQkxNgotI2RlZmluZSBQVF9QU1cJCTE3Ci0jZGVmaW5lIFBUX0JQQwkJMTgKLSNkZWZpbmUgUFRfQkJQU1cJMTkKLSNkZWZpbmUgUFRfQkJQQwkJMjAKLSNkZWZpbmUgUFRfU1BVCQkyMQotI2RlZmluZSBQVF9GUAkJMjIKLSNkZWZpbmUgUFRfTFIJCTIzCi0jZGVmaW5lIFBUX1NQSQkJMjQKLSNkZWZpbmUgUFRfT1JJR1IwCTI1Ci0jZWxzZQotI2Vycm9yIHVua25vd24gaXNhIGNvbmlmaWd1cmF0aW9uCi0jZW5kaWYKIAogLyogdmlydHVhbCBwdF9yZWcgZW50cnkgZm9yIGdkYiAqLwogI2RlZmluZSBQVF9QQwkJMzAKQEAgLTEyMSw2ICsxMTQsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKIAl1bnNpZ25lZCBsb25nIGFjY2g7CiAJdW5zaWduZWQgbG9uZyBhY2NsOworCXVuc2lnbmVkIGxvbmcgZHVtbXlfYWNjMWg7CisJdW5zaWduZWQgbG9uZyBkdW1teV9hY2MxbDsKICNlbHNlCiAjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAppbmRleCBiZjQ0N2M1Li44MTc1MGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKQEAgLTksNyArOSw3IEBACiAgKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgIExpbnVzIFRvcnZhbGRzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC03NywyNyArNzcsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBjb3VudDsKLQogCW1pZ2h0X3NsZWVwKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiMgZG93bgkJCQlcblx0IgotCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKLQkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJImFkZGkJJTAsICMtMTsJCVxuXHQiCi0JCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJOiAiPSZyIiAoY291bnQpCi0JCTogInIiICgmc2VtLT5jb3VudCkKLQkJOiAibWVtb3J5IgotI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKLQkJLCAicjQiCi0jZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLwotCSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGNvdW50IDwgMCkpCisJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApKQogCQlfX2Rvd24oc2VtKTsKIH0KIApAQCAtMTA3LDI4ICs4OCwxMCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY291bnQ7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAltaWdodF9zbGVlcCgpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIjIGRvd25faW50ZXJydXB0aWJsZQkJXG5cdCIKLQkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCi0JCU0zMlJfTE9DSyIgJTAsIEAlMTsJCVxuXHQiCi0JCSJhZGRpCSUwLCAjLTE7CQlcblx0IgotCQlNMzJSX1VOTE9DSyIgJTAsIEAlMTsJCVxuXHQiCi0JCTogIj0mciIgKGNvdW50KQotCQk6ICJyIiAoJnNlbS0+Y291bnQpCi0JCTogIm1lbW9yeSIKLSNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCi0JCSwgInI0IgotI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KLQkpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICh1bmxpa2VseShjb3VudCA8IDApKQorCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKIAkJcmVzdWx0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKIAogCXJldHVybiByZXN1bHQ7CkBAIC0xNzQsMjYgKzEzNyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBjb3VudDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIjIHVwCQkJCVxuXHQiCi0JCURDQUNIRV9DTEVBUigiJTAiLCAicjQiLCAiJTEiKQotCQlNMzJSX0xPQ0siICUwLCBAJTE7CQlcblx0IgotCQkiYWRkaQklMCwgIzE7CQkJXG5cdCIKLQkJTTMyUl9VTkxPQ0siICUwLCBAJTE7CQlcblx0IgotCQk6ICI9JnIiIChjb3VudCkKLQkJOiAiciIgKCZzZW0tPmNvdW50KQotCQk6ICJtZW1vcnkiCi0jaWZkZWYgQ09ORklHX0NISVBfTTMyNzAwX1RTMQotCQksICJyNCIKLSNlbmRpZgkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCi0JKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkoY291bnQgPD0gMCkpCisJaWYgKHVubGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKCZzZW0tPmNvdW50KSA8PSAwKSkKIAkJX191cChzZW0pOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCmluZGV4IGMyMzNlMmQuLjk0MmI4YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCkBAIC0zMiw2ICszMiw4IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQogCXVuc2lnbmVkIGxvbmcgc2NfYWNjaDsKIAl1bnNpZ25lZCBsb25nIHNjX2FjY2w7CisJdW5zaWduZWQgbG9uZyBzY19kdW1teV9hY2MxaDsKKwl1bnNpZ25lZCBsb25nIHNjX2R1bW15X2FjYzFsOwogI2Vsc2UKICNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc21wLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCmluZGV4IDc4ODViN2QuLjExODQyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaApAQCAtNjcsNyArNjcsOCBAQAogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKIAogZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7Ci0jZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAgY3B1X2NhbGxvdXRfbWFwCitleHRlcm4gY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXA7CitleHRlcm4gY3B1bWFza190IGNwdV9wcmVzZW50X21hcDsKIAogc3RhdGljIF9faW5saW5lX18gaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKaW5kZXggZDZhMmM2MS4uZTU1MDEzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCkBAIC02LDggKzYsOCBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgIGJ5IEhpcm95dWtpIEtvbmRvLCBIaXJva2F6dSBUYWthdGEsIGFuZCBIaXRvc2hpIFlhbWFtb3RvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAxICBIaXJveXVraSBLb25kbywgSGlyb2thenUgVGFrYXRhLCBhbmQgSGl0b3NoaSBZYW1hbW90bworICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xOSw1MyArMTksMjggQEAKICAqIHN3aXRjaF90byhwcmV2LCBuZXh0KSBzaG91bGQgc3dpdGNoIGZyb20gdGFzayBgcHJldicgdG8gYG5leHQnCiAgKiBgcHJldicgd2lsbCBuZXZlciBiZSB0aGUgc2FtZSBhcyBgbmV4dCcuCiAgKgotICogYG5leHQnIGFuZCBgcHJldicgc2hvdWxkIGJlIHN0cnVjdCB0YXNrX3N0cnVjdCwgYnV0IGl0IGlzbid0IGFsd2F5cyBkZWZpbmVkCisgKiBgbmV4dCcgYW5kIGBwcmV2JyBzaG91bGQgYmUgdGFza190LCBidXQgaXQgaXNuJ3QgYWx3YXlzIGRlZmluZWQKICAqLwogCi0jaWZuZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgcHJlcGFyZV90b19zd2l0Y2goKSAgZG8geyB9IHdoaWxlKDApCi0jZW5kaWYJLyogbm90IENPTkZJR19TTVAgKi8KLQogI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgIGRvIHsgXAotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgIGFyZzAgX19hc21fXyAoInIwIikgPSAodW5zaWduZWQgbG9uZylwcmV2OyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAgYXJnMSBfX2FzbV9fICgicjEiKSA9ICh1bnNpZ25lZCBsb25nKW5leHQ7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICAqb2xkc3AgX19hc21fXyAoInIyIikgPSAmKHByZXYtPnRocmVhZC5zcCk7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICAqbmV3c3AgX19hc21fXyAoInIzIikgPSAmKG5leHQtPnRocmVhZC5zcCk7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICAqb2xkbHIgX19hc21fXyAoInI0IikgPSAmKHByZXYtPnRocmVhZC5scik7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICAqbmV3bHIgX19hc21fXyAoInI1IikgPSAmKG5leHQtPnRocmVhZC5scik7IFwKLQlyZWdpc3RlciBzdHJ1Y3QgdGFza19zdHJ1Y3QgICpfX2xhc3QgX19hc21fXyAoInI2Iik7IFwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIFwKLQkJInN0ICAgICByOCwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICAgcjksIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgcjEwLCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxMSwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTIsIEAtcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkic3QgICAgcjEzLCBALXIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxNCwgQC1yMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzZXRoICByMTQsICNoaWdoKDFmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkib3IzICAgcjE0LCByMTQsICNsb3coMWYpICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgIHIxNCwgQHI0ICAgIDsgc3RvcmUgb2xkIExSICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJzdCAgICByMTUsIEByMiAgICA7IHN0b3JlIG9sZCBTUCAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgcjE1LCBAcjMgICAgOyBsb2FkIG5ldyBTUCAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJInN0ICAgICByMCwgQC1yMTUgIDsgc3RvcmUgJ3ByZXYnIG9udG8gbmV3IHN0YWNrICBcblx0IiBcCi0JCSJsZCAgICByMTQsIEByNSAgICA7IGxvYWQgbmV3IExSICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkiam1wICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJIi5maWxsaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgIiBcCi0JCSIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgIHI2LCBAcjE1KyAgOyBsb2FkICdwcmV2JyBmcm9tIG5ldyBzdGFjayAgIFxuXHQiIFwKLQkJImxkICAgIHIxNCwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJsZCAgICByMTMsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgcjEyLCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgIHIxMSwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCSJsZCAgICByMTAsIEByMTUrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotCQkibGQgICAgIHI5LCBAcjE1KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLQkJImxkICAgICByOCwgQHIxNSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0JCTogIj0mciIgKF9fbGFzdCkgXAotCQk6ICJyIiAoYXJnMCksICJyIiAoYXJnMSksICJyIiAob2xkc3ApLCAiciIgKG5ld3NwKSwgXAotCQkgICJyIiAob2xkbHIpLCAiciIgKG5ld2xyKSBcCi0JCTogIm1lbW9yeSIgXAorCQkiCXNldGgJbHIsICNoaWdoKDFmKQkJCQlcbiIgXAorCQkiCW9yMwlsciwgbHIsICNsb3coMWYpCQkJXG4iIFwKKwkJIglzdAlsciwgQCU0ICA7IHN0b3JlIG9sZCBMUgkJCVxuIiBcCisJCSIJbGQJbHIsIEAlNSAgOyBsb2FkIG5ldyBMUgkJCVxuIiBcCisJCSIJc3QJc3AsIEAlMiAgOyBzdG9yZSBvbGQgU1AJCQlcbiIgXAorCQkiCWxkCXNwLCBAJTMgIDsgbG9hZCBuZXcgU1AJCQlcbiIgXAorCQkiCXB1c2gJJTEgIDsgc3RvcmUgYHByZXYnIG9uIG5ldyBzdGFjawkJXG4iIFwKKwkJIglqbXAJbHIJCQkJCVxuIiBcCisJCSIJLmZpbGxpbnNuCQkJCQlcbiIgXAorCQkiMToJCQkJCQkJXG4iIFwKKwkJIglwb3AJJTAgIDsgcmVzdG9yZSBgX19sYXN0JyBmcm9tIG5ldyBzdGFjawlcbiIgXAorCQk6ICI9ciIgKGxhc3QpIFwKKwkJOiAiMCIgKHByZXYpLCBcCisJCSAgInIiICgmKHByZXYtPnRocmVhZC5zcCkpLCAiciIgKCYobmV4dC0+dGhyZWFkLnNwKSksIFwKKwkJICAiciIgKCYocHJldi0+dGhyZWFkLmxyKSksICJyIiAoJihuZXh0LT50aHJlYWQubHIpKSBcCisJCTogIm1lbW9yeSIsICJsciIgXAogCSk7IFwKLQlsYXN0ID0gX19sYXN0OyBcCiB9IHdoaWxlKDApCiAKIC8qCkBAIC0xNzEsOCArMTQ2LDggQEAKICNkZWZpbmUgRENBQ0hFX0NMRUFSKHJlZzAsIHJlZzEsIGFkZHIpCiAjZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsCi0JaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0bXAgPSAwOwpAQCAtMjI0LDcgKzE5OSw3IEBACiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRwkxCiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jbXB4Y2hnX3UzMih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCBvbGQsIHVuc2lnbmVkIGludCBuZXcpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1OCw3ICsyMzMsNyBAQAogICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgY21weGNoZygpLiAgKi8KIGV4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBfX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQogewogCXN3aXRjaCAoc2l6ZSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaAppbmRleCBlOGFlNjE5Li44MTljYzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaApAQCAtNSwxNyArNSw5IEBACiAgKiAgbGludXgvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKICAqCiAgKiAgTTMyUiB2ZXJzaW9uLgotICogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI3VuZGVmIFVBQ0NFU1NfREVCVUcKLQotI2lmZGVmIFVBQ0NFU1NfREVCVUcKLSNkZWZpbmUgVUFQUklOVEsoYXJncy4uLikgcHJpbnRrKGFyZ3MpCi0jZWxzZQotI2RlZmluZSBVQVBSSU5USyhhcmdzLi4uKQotI2VuZGlmIC8qIFVBQ0NFU1NfREVCVUcgKi8KLQogLyoKICAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKICAqLwpAQCAtMzgsMjcgKzMwLDI5IEBACiAjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQogCiAjaWZkZWYgQ09ORklHX01NVQorCiAjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQogI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhQQUdFX09GRlNFVCkKLSNlbHNlCi0jZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQotI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRygweEZGRkZGRkZGKQotI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KLQogI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQotI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKICNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCi0jZWxzZQorCisjZWxzZSAvKiBub3QgQ09ORklHX01NVSAqLworCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGKQorI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRygweEZGRkZGRkZGKQorI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorCiBzdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZnModm9pZCkKIHsKLSAgcmV0dXJuIFVTRVJfRFM7CisJcmV0dXJuIFVTRVJfRFM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHMpCiB7CiB9Ci0jZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZW5kaWYgLyogbm90IENPTkZJR19NTVUgKi8KIAogI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKIApAQCAtODMsOSArNzcsOSBAQAogCQkiCXN1YngJJTAsICUwXG4iCQkJCVwKIAkJIgljbXB1CSU0LCAlMVxuIgkJCQlcCiAJCSIJc3VieAklMCwgJTVcbiIJCQkJXAotCQk6ICI9JnIiKGZsYWcpLCAiPXIiKHN1bSkJCQkJXAotCQk6ICIxIihhZGRyKSwgInIiKChpbnQpKHNpemUpKSwgCQkJCVwKLQkJICAiciIoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZyksICJyIigwKQlcCisJCTogIj0mciIgKGZsYWcpLCAiPXIiIChzdW0pCQkJCVwKKwkJOiAiMSIgKGFkZHIpLCAiciIgKChpbnQpKHNpemUpKSwgCQkJXAorCQkgICJyIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZyksICJyIiAoMCkJXAogCQk6ICJjYml0IiApOwkJCQkJCVwKIAlmbGFnOyB9KQogCkBAIC0xMTMsMTAgKzEwNywxMCBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc19vayhpbnQgdHlwZSwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotICBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7Ci0gIHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylhZGRyOwogCi0gIHJldHVybiAoKHZhbCA+PSBtZW1vcnlfc3RhcnQpICYmICgodmFsICsgc2l6ZSkgPCBtZW1vcnlfZW5kKSk7CisJcmV0dXJuICgodmFsID49IG1lbW9yeV9zdGFydCkgJiYgKCh2YWwgKyBzaXplKSA8IG1lbW9yeV9lbmQpKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKQEAgLTE1NSwzOSArMTQ5LDYgQEAKICAqIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGFyZWEgb2YgdXNlciBtZW1vcnkpLgogICovCiAKLWV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMSh2b2lkKTsKLWV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKLWV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfNCh2b2lkKTsKLQotI2lmbmRlZiBNT0RVTEUKLSNkZWZpbmUgX19nZXRfdXNlcl94KHNpemUscmV0LHgscHRyKSAJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSIJbXYJcjAsICUwXG4iCQkJCVwKLQkJIgltdglyMSwgJTFcbiIgCQkJCVwKLQkJIglibCBfX2dldF91c2VyXyIgI3NpemUgIlxuIgkJCVwKLQkJIgltdgklMCwgcjBcbiIJCQkJXAotCQkiCW12CSUxLCByMVxuIiAJCQkJXAotCQk6ICI9ciIocmV0KSwgIj1yIih4KSAJCQkJCVwKLQkJOiAiMCIocHRyKQkJCQkJCVwKLQkJOiAicjAiLCAicjEiLCAicjE0IiApCi0jZWxzZSAvKiBNT0RVTEUgKi8KLS8qCi0gKiBVc2UgImpsIiBpbnN0ZWFkIG9mICJibCIgZm9yIE1PRFVMRQotICovCi0jZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiCW12CXIwLCAlMFxuIgkJCQlcCi0JCSIJbXYJcjEsICUxXG4iIAkJCQlcCi0JCSIJc2V0aAlsciwgI2hpZ2goX19nZXRfdXNlcl8iICNzaXplICIpXG4iCVwKLQkJIglvcjMJbHIsIGxyLCAjbG93KF9fZ2V0X3VzZXJfIiAjc2l6ZSAiKVxuIglcCi0JCSIJamwgCWxyXG4iCQkJCQlcCi0JCSIJbXYJJTAsIHIwXG4iCQkJCVwKLQkJIgltdgklMSwgcjFcbiIgCQkJCVwKLQkJOiAiPXIiKHJldCksICI9ciIoeCkgCQkJCQlcCi0JCTogIjAiKHB0cikJCQkJCQlcCi0JCTogInIwIiwgInIxIiwgInIxNCIgKQotI2VuZGlmCi0KIC8qIENhcmVmdWw6IHdlIGhhdmUgdG8gY2FzdCB0aGUgcmVzdWx0IHRvIHRoZSB0eXBlIG9mIHRoZSBwb2ludGVyIGZvciBzaWduCiAgICByZWFzb25zICovCiAvKioKQEAgLTIwOCwyMCArMTY5LDcgQEAKICAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCiAgKi8KICNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpCQkJCQkJCVwKLSh7CWludCBfX3JldF9ndTsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX192YWxfZ3U7CQkJCQkJXAotCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAotCXN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsJCQkJCVwKLQljYXNlIDE6ICBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQljYXNlIDI6ICBfX2dldF91c2VyX3goMixfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQljYXNlIDQ6ICBfX2dldF91c2VyX3goNCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQlkZWZhdWx0OiBfX2dldF91c2VyX3goWCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQl9CQkJCQkJCQlcCi0JKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX3ZhbF9ndTsJCQkJXAotCV9fcmV0X2d1OwkJCQkJCQlcCi19KQotCi1leHRlcm4gdm9pZCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKwlfX2dldF91c2VyX2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKIAogLyoqCiAgKiBwdXRfdXNlcjogLSBXcml0ZSBhIHNpbXBsZSB2YWx1ZSBpbnRvIHVzZXIgc3BhY2UuCkBAIC0yNDAsOCArMTg4LDcgQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciAtRUZBVUxUIG9uIGVycm9yLgogICovCiAjZGVmaW5lIHB1dF91c2VyKHgscHRyKQkJCQkJCQlcCi0gIF9fcHV0X3VzZXJfY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCi0KKwlfX3B1dF91c2VyX2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQogCiAvKioKICAqIF9fZ2V0X3VzZXI6IC0gR2V0IGEgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgpAQCAtMjY0LDggKzIxMSw2NCBAQAogICogT24gZXJyb3IsIHRoZSB2YXJpYWJsZSBAeCBpcyBzZXQgdG8gemVyby4KICAqLwogI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBcCi0gIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisJX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKIAorI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAwOwkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLChwdHIpLChzaXplKSxfX2d1X2Vycik7CQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV92YWwgPSAwOwkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfYWRkciA9IChwdHIpOwkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELF9fZ3VfYWRkcixzaXplKSkJCQlcCisJCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCxfX2d1X2FkZHIsKHNpemUpLF9fZ3VfZXJyKTsJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorfSkKKworZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJCVwKKwlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCSAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInViIik7IGJyZWFrOwkJXAorCSAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInVoIik7IGJyZWFrOwkJXAorCSAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsIiIpOyBicmVhazsJCVwKKwkgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUpCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSIJLmZpbGxpbnNuXG4iCQkJCQlcCisJCSIxOglsZCJpdHlwZSIgJTEsQCUyXG4iCQkJCVwKKwkJIgkuZmlsbGluc25cbiIJCQkJCVwKKwkJIjI6XG4iCQkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAorCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAorCQkiMzoJbGRpICUwLCUzXG4iCQkJCQlcCisJCSIJc2V0aCByMTQsI2hpZ2goMmIpXG4iCQkJCVwKKwkJIglvcjMgcjE0LHIxNCwjbG93KDJiKVxuIgkJCQlcCisJCSIJam1wIHIxNFxuIgkJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCQkJXAorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCisJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKKwkJIi5wcmV2aW91cyIJCQkJCQlcCisJCTogIj0mciIgKGVyciksICI9JnIiICh4KQkJCQlcCisJCTogInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpCQkJXAorCQk6ICJyMTQiLCAibWVtb3J5IikKIAogLyoqCiAgKiBfX3B1dF91c2VyOiAtIFdyaXRlIGEgc2ltcGxlIHZhbHVlIGludG8gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgpAQCAtMjg3LDExICsyOTAsMTMgQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciAtRUZBVUxUIG9uIGVycm9yLgogICovCiAjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIFwKLSAgX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorCV9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKwogCiAjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3B1X2VycjsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlfX3B1dF91c2VyX3NpemUoKHgpLChwdHIpLChzaXplKSxfX3B1X2Vycik7CQkJXAogCV9fcHVfZXJyOwkJCQkJCQlcCiB9KQpAQCAtMzA4LDI4ICszMTMsMjggQEAKIH0pCiAKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQotI2RlZmluZSBfX3B1dF91c2VyX3U2NCh4LCBhZGRyLCBlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIxOiAgICAgc3QgJUwxLEAlMlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAiMjogICAgIHN0ICVIMSxAKDQsJTIpXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIjM6XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIjQ6ICAgICBsZGkgJTAsJTNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICBzZXRoIHIxNCwjaGlnaCgzYilcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICBvcjMgcjE0LHIxNCwjbG93KDNiKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICBqbXAgcjE0XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAubG9uZyAxYiw0YlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIiAgICAgICAubG9uZyAyYiw0YlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIi5wcmV2aW91cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgOiAiPSZyIihlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDogInIiKHgpLCAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCVwKKyNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKQkJCQkJXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuZmlsbGluc25cbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiMTogICAgIHN0ICVMMSxAJTJcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zblxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIyOiAgICAgc3QgJUgxLEAoNCwlMilcbiIJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmZpbGxpbnNuXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIjM6XG4iCQkJCQkJCVwKKyAgICAgICAgICAgICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisgICAgICAgICAgICAgICAgIiAgICAgICAuYmFsaWduIDRcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiNDogICAgIGxkaSAlMCwlM1xuIgkJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgc2V0aCByMTQsI2hpZ2goM2IpXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIG9yMyByMTQscjE0LCNsb3coM2IpXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIGptcCByMTRcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG4iCQkJCQkJXAorICAgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5iYWxpZ24gNFxuIgkJCQkJXAorICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMWIsNGJcbiIJCQkJCVwKKyAgICAgICAgICAgICAgICAiICAgICAgIC5sb25nIDJiLDRiXG4iCQkJCQlcCisgICAgICAgICAgICAgICAgIi5wcmV2aW91cyIJCQkJCQlcCisgICAgICAgICAgICAgICAgOiAiPSZyIiAoZXJyKQkJCQkJCVwKKyAgICAgICAgICAgICAgICA6ICJyIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKQkJXAogICAgICAgICAgICAgICAgIDogInIxNCIsICJtZW1vcnkiKQogCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9fKQpAQCAtMzUzLDEzICszNTgsMTUgQEAKIAkJIgkubG9uZyAxYiw0YlxuIgkJCQkJXAogCQkiCS5sb25nIDJiLDRiXG4iCQkJCQlcCiAJCSIucHJldmlvdXMiCQkJCQkJXAotCQk6ICI9JnIiKGVycikJCQkJCQlcCi0JCTogInIiKHgpLCAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCVwKKwkJOiAiPSZyIiAoZXJyKQkJCQkJCVwKKwkJOiAiciIgKHgpLCAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikJCVwKIAkJOiAicjE0IiwgIm1lbW9yeSIpCiAjZWxzZQogI2Vycm9yIG5vIGVuZGlhbiBkZWZpbmVkCiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7CisKICNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCXJldHZhbCA9IDA7CQkJCQkJCVwKQEAgLTM5OCw1MiArNDA1LDggQEAKIAkJIgkuYmFsaWduIDRcbiIJCQkJCVwKIAkJIgkubG9uZyAxYiwzYlxuIgkJCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJCVwKLQkJOiAiPSZyIihlcnIpCQkJCQkJXAotCQk6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCi0JCTogInIxNCIsICJtZW1vcnkiKQotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JbG9uZyBfX2d1X2VycjsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQkJXAotCV9fZ2V0X3VzZXJfc2l6ZShfX2d1X3ZhbCwocHRyKSwoc2l6ZSksX19ndV9lcnIpOwkJXAotCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKLQlfX2d1X2VycjsJCQkJCQkJXAotfSkKLQotZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7Ci0KLSNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCXJldHZhbCA9IDA7CQkJCQkJCVwKLQlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKLQlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAotCSAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInViIik7IGJyZWFrOwkJXAotCSAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInVoIik7IGJyZWFrOwkJXAotCSAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsIiIpOyBicmVhazsJCVwKLQkgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUpCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSIJLmZpbGxpbnNuXG4iCQkJCQlcCi0JCSIxOglsZCJpdHlwZSIgJTEsQCUyXG4iCQkJCVwKLQkJIgkuZmlsbGluc25cbiIJCQkJCVwKLQkJIjI6XG4iCQkJCQkJCVwKLQkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQkJXAotCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAotCQkiMzoJbGRpICUwLCUzXG4iCQkJCQlcCi0JCSIJc2V0aCByMTQsI2hpZ2goMmIpXG4iCQkJCVwKLQkJIglvcjMgcjE0LHIxNCwjbG93KDJiKVxuIgkJCQlcCi0JCSIJam1wIHIxNFxuIgkJCQkJXAotCQkiLnByZXZpb3VzXG4iCQkJCQkJXAotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCi0JCSIJLmJhbGlnbiA0XG4iCQkJCQlcCi0JCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKLQkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj0mciIoZXJyKSwgIj0mciIoeCkJCQkJCVwKLQkJOiAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCQlcCisJCTogIj0mciIgKGVycikJCQkJCQlcCisJCTogInIiICh4KSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpCQlcCiAJCTogInIxNCIsICJtZW1vcnkiKQogCiAvKgpAQCAtNDUzLDcgKzQxNiw2IEBACiAgKiBhbnl0aGluZywgc28gdGhpcyBpcyBhY2N1cmF0ZS4KICAqLwogCi0KIC8qCiAgKiBDb3B5IFRvL0Zyb20gVXNlcnNwYWNlCiAgKi8KQEAgLTUxMSw4ICs0NzMsOSBAQAogCQkiCS5sb25nIDJiLDliXG4iCQkJCQlcCiAJCSIJLmxvbmcgM2IsOWJcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJOiAiPSZyIihfX2RzdCksICI9JnIiKF9fc3JjKSwgIj0mciIoc2l6ZSksICI9JnIiKF9fYykJXAotCQk6ICIwIih0byksICIxIihmcm9tKSwgIjIiKHNpemUpLCAiMyIoc2l6ZSAvIDQpCQlcCisJCTogIj0mciIgKF9fZHN0KSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKHNpemUpLAkJXAorCQkgICI9JnIiIChfX2MpCQkJCQkJXAorCQk6ICIwIiAodG8pLCAiMSIgKGZyb20pLCAiMiIgKHNpemUpLCAiMyIgKHNpemUgLyA0KQlcCiAJCTogInIxNCIsICJtZW1vcnkiKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTU3Myw4ICs1MzYsOSBAQAogCQkiCS5sb25nIDJiLDdiXG4iCQkJCQlcCiAJCSIJLmxvbmcgM2IsN2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJOiAiPSZyIihfX2RzdCksICI9JnIiKF9fc3JjKSwgIj0mciIoc2l6ZSksICI9JnIiKF9fYykJXAotCQk6ICIwIih0byksICIxIihmcm9tKSwgIjIiKHNpemUpLCAiMyIoc2l6ZSAvIDQpCQlcCisJCTogIj0mciIgKF9fZHN0KSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKHNpemUpLAkJXAorCQkgICI9JnIiIChfX2MpCQkJCQkJXAorCQk6ICIwIiAodG8pLCAiMSIgKGZyb20pLCAiMiIgKHNpemUpLCAiMyIgKHNpemUgLyA0KQlcCiAJCTogInIxNCIsICJtZW1vcnkiKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTY3Niw3ICs2NDAsNyBAQAogI2RlZmluZSBjb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pCQkJXAogKHsJCQkJCQkJXAogCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCi1fX2dlbmVyaWNfY29weV9mcm9tX3VzZXIoKHRvKSwoZnJvbSksKG4pKTsJXAorCV9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcigodG8pLChmcm9tKSwobikpOwlcCiB9KQogCiBsb25nIF9fbXVzdF9jaGVjayBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaAppbmRleCAzOWJlODdjLi5iZTBlYjAxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeQkJKF9fTlJfbXFfb3Blbis0KQogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJKF9fTlJfbXFfb3Blbis1KQotI2RlZmluZSBfX05SX3N5c19rZXhlY19sb2FkCTI4MworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaAppbmRleCA0MjUyMGNjLi4xMzg2YWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogI2lmIGRlZmluZWQgKENPTkZJR19DUFVfUjQzMDApCQkJCQkJXAogICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfUjRYMDApCQkJCQlcCiAgICAgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9SNTAwMCkJCQkJCVwKKyAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1JNNzAwMCkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX05FVkFEQSkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1RYNDlYWCkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX01JUFM2NCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaAppbmRleCAzMGIxOGVhLi5mNTRhYTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCkBAIC0xNyw3ICsxNywyNiBAQAogI2lmZGVmIENPTkZJR182NEJJVAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby02NC5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkubWFjcm8JbG9jYWxfaXJxX2VuYWJsZSByZWc9dDAKKwltZmMwCVxyZWcsIENQMF9UQ1NUQVRVUworCW9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCisJeG9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCisJbXRjMAlccmVnLCBDUDBfVENTVEFUVVMKKwllaGIKKwkuZW5kbQorCisJLm1hY3JvCWxvY2FsX2lycV9kaXNhYmxlIHJlZz10MAorCW1mYzAJXHJlZywgQ1AwX1RDU1RBVFVTCisJb3JpCVxyZWcsIFxyZWcsIFRDU1RBVFVTX0lYTVQKKwltdGMwCVxyZWcsIENQMF9UQ1NUQVRVUworCWVoYgorCS5lbmRtCisjZWxzZQogCS5tYWNybwlsb2NhbF9pcnFfZW5hYmxlIHJlZz10MAogCW1mYzAJXHJlZywgQ1AwX1NUQVRVUwogCW9yaQlccmVnLCBccmVnLCAxCkBAIC0zMiw2ICs1MSw3IEBACiAJbXRjMAlccmVnLCBDUDBfU1RBVFVTCiAJaXJxX2Rpc2FibGVfaGF6YXJkCiAJLmVuZG0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNpZmRlZiBDT05GSUdfQ1BVX1NCMQogCS5tYWNybwlmcHVfZW5hYmxlX2hhemFyZApAQCAtNDgsNCArNjgsMzEgQEAKIAkuZW5kbQogI2VuZGlmCiAKKy8qCisgKiBUZW1wb3JhcnkgdW50aWwgYWxsIGdhcyBoYXZlIE1UIEFTRSBzdXBwb3J0CisgKi8KKwkubWFjcm8JRE1UCXJlZz0wCisJLndvcmQJKDB4NDE2MDBiYzEgfCAoXHJlZyA8PCAxNikpCisJLmVuZG0KKworCS5tYWNybwlFTVQJcmVnPTAKKwkud29yZAkoMHg0MTYwMGJlMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCURWUEUJcmVnPTAKKwkud29yZAkoMHg0MTYwMDAwMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCUVWUEUJcmVnPTAKKwkud29yZAkoMHg0MTYwMDAyMSB8IChccmVnIDw8IDE2KSkKKwkuZW5kbQorCisJLm1hY3JvCU1GVFIJcnQ9MCwgcmQ9MCwgdT0wLCBzZWw9MAorCSAud29yZAkoMHg0MTAwMDAwMCB8IChccnQgPDwgMTYpIHwgKFxyZCA8PCAxMSkgfCAoXHUgPDwgNSkgfCAoXHNlbCkpCisJLmVuZG0KKworCS5tYWNybwlNVFRSCXJ0PTAsIHJkPTAsIHU9MCwgc2VsPTAKKwkgLndvcmQJKDB4NDE4MDAwMDAgfCAoXHJ0IDw8IDE2KSB8IChccmQgPDwgMTEpIHwgKFx1IDw8IDUpIHwgKFxzZWwpKQorCS5lbmRtCisKICNlbmRpZiAvKiBfQVNNX0FTTU1BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCmluZGV4IGExNzI4ZjguLmQyZjQ0NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtNDY3LDY0ICs0NjcsNTYgQEAKIH0KIAogLyoKKyAqIGZscyAtIGZpbmQgbGFzdCBiaXQgc2V0LgorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMgZmZzLgorICogTm90ZSBmbHMoMCkgPSAwLCBmbHMoMSkgPSAxLCBmbHMoMHg4MDAwMDAwMCkgPSAzMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmxzKGludCB3b3JkKQoreworCV9fYXNtX18gKCJjbHogJTAsICUxIiA6ICI9ciIgKHdvcmQpIDogInIiICh3b3JkKSk7CisKKwlyZXR1cm4gMzIgLSB3b3JkOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpCitzdGF0aWMgaW5saW5lIGludCBmbHM2NChfX3U2NCB3b3JkKQoreworCV9fYXNtX18gKCJkY2x6ICUwLCAlMSIgOiAiPXIiICh3b3JkKSA6ICJyIiAod29yZCkpOworCisJcmV0dXJuIDY0IC0gd29yZDsKK30KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CisjZW5kaWYKKworLyoKICAqIGZmcyAtIGZpbmQgZmlyc3QgYml0IHNldC4KICAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKICAqCi0gKiBSZXR1cm5zIDEuLlNaTE9ORwotICogUmV0dXJucyAwIGlmIG5vIGJpdCBleGlzdHMKKyAqIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAqIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcyByb3V0aW5lcywgdGhlcmVmb3JlCisgKiBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBhYm92ZSBmZnogKG1hbiBmZnMpLgogICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnModW5zaWduZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB3b3JkKQogewogCWlmICghd29yZCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gX19mZnMod29yZCkgKyAxOwotfQotCi0vKgotICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGluIHdvcmQuCi0gKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCi0gKgotICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQotewotCXJldHVybiBfX2ZmcyAofndvcmQpOwotfQotCi0vKgotICogZmxzIC0gZmluZCBsYXN0IGJpdCBzZXQuCi0gKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCi0gKgotICogUmV0dXJucyAxLi5TWkxPTkcKLSAqIFJldHVybnMgMCBpZiBubyBiaXQgZXhpc3RzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmbHModW5zaWduZWQgbG9uZyB3b3JkKQotewotI2lmZGVmIENPTkZJR19DUFVfTUlQUzMyCi0JX19hc21fXyAoImNseiAlMCwgJTEiIDogIj1yIiAod29yZCkgOiAiciIgKHdvcmQpKTsKLQotCXJldHVybiAzMiAtIHdvcmQ7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfTUlQUzY0Ci0JX19hc21fXyAoImRjbHogJTAsICUxIiA6ICI9ciIgKHdvcmQpIDogInIiICh3b3JkKSk7Ci0KLQlyZXR1cm4gNjQgLSB3b3JkOwotI2VuZGlmCisJcmV0dXJuIGZscyh3b3JkICYgLXdvcmQpOwogfQogCiAjZWxzZQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAKICNlbmRpZiAvKmRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9NSVBTNjQpICovCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmZ6Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKaW5kZXggYWVhZTlmYS4uNDdiYzhmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKQEAgLTc0LDYgKzc0LDcgQEAKIAogZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9zaWd0cmFtcCkodW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX2FsbCkodm9pZCk7CitleHRlcm4gdm9pZCAoKmxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodm9pZCAqIGFkZHIpOwogZXh0ZXJuIHZvaWQgKCpmbHVzaF9kYXRhX2NhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAppbmRleCAzZjJiNmQ5Li4yNTRlMTFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgY3B1X2hhc19zYjFfY2FjaGUJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9TQjFfQ0FDSEUpCiAjZW5kaWYKICNpZm5kZWYgY3B1X2hhc19mcHUKLSNkZWZpbmUgY3B1X2hhc19mcHUJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfRlBVKQorI2RlZmluZSBjcHVfaGFzX2ZwdQkJKGN1cnJlbnRfY3B1X2RhdGEub3B0aW9ucyAmIE1JUFNfQ1BVX0ZQVSkKICNlbmRpZgogI2lmbmRlZiBjcHVfaGFzXzMyZnByCiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfMzJGUFIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKaW5kZXggMTQwYmUxYy4uNjU3MmFjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaApAQCAtNzMsNiArNzMsMTYgQEAKIAlzdHJ1Y3QgY2FjaGVfZGVzYwlkY2FjaGU7CS8qIFByaW1hcnkgRCBvciBjb21iaW5lZCBJL0QgY2FjaGUgKi8KIAlzdHJ1Y3QgY2FjaGVfZGVzYwlzY2FjaGU7CS8qIFNlY29uZGFyeSBjYWNoZSAqLwogCXN0cnVjdCBjYWNoZV9kZXNjCXRjYWNoZTsJLyogVGVydGlhcnkvc3BsaXQgc2Vjb25kYXJ5IGNhY2hlICovCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQorCS8qCisJICogSW4gdGhlIE1JUFMgTVQgIlNNVEMiIG1vZGVsLCBlYWNoIFRDIGlzIGNvbnNpZGVyZWQKKwkgKiB0byBiZSBhICJDUFUiIGZvciB0aGUgcHVycG9zZXMgb2Ygc2NoZWR1bGluZywgYnV0CisJICogZXhjZXB0aW9uIHJlc291cmNlcywgQVNJRCBzcGFjZXMsIGV0YywgYXJlIGNvbW1vbgorCSAqIHRvIGFsbCBUQ3Mgd2l0aGluIHRoZSBzYW1lIFZQRS4KKwkgKi8KKwlpbnQJCQl2cGVfaWQ7ICAvKiBWaXJ0dWFsIFByb2Nlc3NvciBudW1iZXIgKi8KKwlpbnQJCQl0Y19pZDsgICAvKiBUaHJlYWQgQ29udGV4dCBudW1iZXIgKi8KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVCAqLwogCXZvaWQgCQkJKmRhdGE7CS8qIEFkZGl0aW9uYWwgZGF0YSAqLwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFNNUF9DQUNIRV9CWVRFUykpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LmgKaW5kZXggODE4YjlhOS4uZGZmMmEwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS5oCkBAIC01MSw2ICs1MSw3IEBACiAjZGVmaW5lIFBSSURfSU1QX1I0MzAwCQkweDBiMDAKICNkZWZpbmUgUFJJRF9JTVBfVlI0MVhYCQkweDBjMDAKICNkZWZpbmUgUFJJRF9JTVBfUjEyMDAwCQkweDBlMDAKKyNkZWZpbmUgUFJJRF9JTVBfUjE0MDAwCQkweDBmMDAKICNkZWZpbmUgUFJJRF9JTVBfUjgwMDAJCTB4MTAwMAogI2RlZmluZSBQUklEX0lNUF9QUjQ0NTAJCTB4MTIwMAogI2RlZmluZSBQUklEX0lNUF9SNDYwMAkJMHgyMDAwCkBAIC04Nyw2ICs4OCw3IEBACiAjZGVmaW5lIFBSSURfSU1QXzI0SwkJMHg5MzAwCiAjZGVmaW5lIFBSSURfSU1QXzM0SwkJMHg5NTAwCiAjZGVmaW5lIFBSSURfSU1QXzI0S0UJCTB4OTYwMAorI2RlZmluZSBQUklEX0lNUF83NEsJCTB4OTcwMAogCiAvKgogICogVGhlc2UgYXJlIHRoZSBQUklEJ3MgZm9yIHdoZW4gMjM6MTYgPT0gUFJJRF9DT01QX1NJQllURQpAQCAtMTk2LDcgKzE5OCw5IEBACiAjZGVmaW5lIENQVV8zNEsJCQk2MAogI2RlZmluZSBDUFVfUFI0NDUwCQk2MQogI2RlZmluZSBDUFVfU0IxQQkJNjIKLSNkZWZpbmUgQ1BVX0xBU1QJCTYyCisjZGVmaW5lIENQVV83NEsJCQk2MworI2RlZmluZSBDUFVfUjE0MDAwCQk2NAorI2RlZmluZSBDUFVfTEFTVAkJNjQKIAogLyoKICAqIElTQSBMZXZlbCBlbmNvZGluZ3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaAppbmRleCA2NGRkNDUxLi45MjhmMzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWxheS5oCkBAIC0xOSwyMCArMTksMjIgQEAKIHsKIAlpZiAoc2l6ZW9mKGxvbmcpID09IDQpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZXRcdG5vcmVvcmRlclxuIgotCQkiMTpcdGJuZXpcdCUwLDFiXG5cdCIKLQkJInN1YnVcdCUwLDFcblx0IgotCQkiLnNldFx0cmVvcmRlciIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuYWxpZ24JMwkJCQkJXG4iCisJCSIxOglibmV6CSUwLCAxYgkJCQkJXG4iCisJCSIJc3VidQklMCwgMQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKIAkJOiAiPXIiIChsb29wcykKIAkJOiAiMCIgKGxvb3BzKSk7CiAJZWxzZSBpZiAoc2l6ZW9mKGxvbmcpID09IDgpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZXRcdG5vcmVvcmRlclxuIgotCQkiMTpcdGJuZXpcdCUwLDFiXG5cdCIKLQkJImRzdWJ1XHQlMCwxXG5cdCIKLQkJIi5zZXRcdHJlb3JkZXIiCi0JCToiPXIiIChsb29wcykKLQkJOiIwIiAobG9vcHMpKTsKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuYWxpZ24JMwkJCQkJXG4iCisJCSIxOglibmV6CSUwLCAxYgkJCQkJXG4iCisJCSIJZHN1YnUJJTAsIDEJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJCTogIj1yIiAobG9vcHMpCisJCTogIjAiIChsb29wcykpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZHMxNzQyLmggYi9pbmNsdWRlL2FzbS1taXBzL2RzMTc0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjJjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RzMTc0Mi5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICovCisjaWZuZGVmIF9BU01fRFMxNzQyX0gKKyNkZWZpbmUgX0FTTV9EUzE3NDJfSAorCisjaW5jbHVkZSA8ZHMxNzQyLmg+CisKKyNlbmRpZiAvKiBfQVNNX0RTMTc0Ml9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2VsZi5oIGIvaW5jbHVkZS9hc20tbWlwcy9lbGYuaAppbmRleCA4NTFmMDEzLi5iZGM5ZGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmgKQEAgLTExOSw4ICsxMTksNDkgQEAKICNkZWZpbmUgU0hUX01JUFNfQ09ORkxJQ1QJMHg3MDAwMDAwMgogI2RlZmluZSBTSFRfTUlQU19HUFRBQgkJMHg3MDAwMDAwMwogI2RlZmluZSBTSFRfTUlQU19VQ09ERQkJMHg3MDAwMDAwNAorI2RlZmluZSBTSFRfTUlQU19ERUJVRwkJMHg3MDAwMDAwNQorI2RlZmluZSBTSFRfTUlQU19SRUdJTkZPCTB4NzAwMDAwMDYKKyNkZWZpbmUgU0hUX01JUFNfUEFDS0FHRQkweDcwMDAwMDA3CisjZGVmaW5lIFNIVF9NSVBTX1BBQ0tTWU0JMHg3MDAwMDAwOAorI2RlZmluZSBTSFRfTUlQU19SRUxECQkweDcwMDAwMDA5CisjZGVmaW5lIFNIVF9NSVBTX0lGQUNFCQkweDcwMDAwMDBiCisjZGVmaW5lIFNIVF9NSVBTX0NPTlRFTlQJMHg3MDAwMDAwYworI2RlZmluZSBTSFRfTUlQU19PUFRJT05TCTB4NzAwMDAwMGQKKyNkZWZpbmUgU0hUX01JUFNfU0hEUgkJMHg3MDAwMDAxMAorI2RlZmluZSBTSFRfTUlQU19GREVTQwkJMHg3MDAwMDAxMQorI2RlZmluZSBTSFRfTUlQU19FWFRTWU0JCTB4NzAwMDAwMTIKKyNkZWZpbmUgU0hUX01JUFNfREVOU0UJCTB4NzAwMDAwMTMKKyNkZWZpbmUgU0hUX01JUFNfUERFU0MJCTB4NzAwMDAwMTQKKyNkZWZpbmUgU0hUX01JUFNfTE9DU1lNCQkweDcwMDAwMDE1CisjZGVmaW5lIFNIVF9NSVBTX0FVWFNZTQkJMHg3MDAwMDAxNgorI2RlZmluZSBTSFRfTUlQU19PUFRTWU0JCTB4NzAwMDAwMTcKKyNkZWZpbmUgU0hUX01JUFNfTE9DU1RSCQkweDcwMDAwMDE4CisjZGVmaW5lIFNIVF9NSVBTX0xJTkUJCTB4NzAwMDAwMTkKKyNkZWZpbmUgU0hUX01JUFNfUkZERVNDCQkweDcwMDAwMDFhCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBU1lNCTB4NzAwMDAwMWIKKyNkZWZpbmUgU0hUX01JUFNfREVMVEFJTlNUCTB4NzAwMDAwMWMKKyNkZWZpbmUgU0hUX01JUFNfREVMVEFDTEFTUwkweDcwMDAwMDFkCisjZGVmaW5lIFNIVF9NSVBTX0RXQVJGCQkweDcwMDAwMDFlCisjZGVmaW5lIFNIVF9NSVBTX0RFTFRBREVDTAkweDcwMDAwMDFmCisjZGVmaW5lIFNIVF9NSVBTX1NZTUJPTF9MSUIJMHg3MDAwMDAyMAorI2RlZmluZSBTSFRfTUlQU19FVkVOVFMJCTB4NzAwMDAwMjEKKyNkZWZpbmUgU0hUX01JUFNfVFJBTlNMQVRFCTB4NzAwMDAwMjIKKyNkZWZpbmUgU0hUX01JUFNfUElYSUUJCTB4NzAwMDAwMjMKKyNkZWZpbmUgU0hUX01JUFNfWExBVEUJCTB4NzAwMDAwMjQKKyNkZWZpbmUgU0hUX01JUFNfWExBVEVfREVCVUcJMHg3MDAwMDAyNQorI2RlZmluZSBTSFRfTUlQU19XSElSTAkJMHg3MDAwMDAyNgorI2RlZmluZSBTSFRfTUlQU19FSF9SRUdJT04JMHg3MDAwMDAyNworI2RlZmluZSBTSFRfTUlQU19YTEFURV9PTEQJMHg3MDAwMDAyOAorI2RlZmluZSBTSFRfTUlQU19QRFJfRVhDRVBUSU9OCTB4NzAwMDAwMjkKIAotI2RlZmluZSBTSEZfTUlQU19HUFJFTAkweDEwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX0dQUkVMCQkweDEwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX01FUkdFCQkweDIwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX0FERFIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0hGX01JUFNfU1RSSU5HCQkweDgwMDAwMDAwCisjZGVmaW5lIFNIRl9NSVBTX05PU1RSSVAJMHgwODAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19MT0NBTAkJMHgwNDAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19OQU1FUwkJMHgwMjAwMDAwMAorI2RlZmluZSBTSEZfTUlQU19OT0RVUEVTCTB4MDEwMDAwMDAKIAogI2lmbmRlZiBFTEZfQVJDSAogLyogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaAppbmRleCA5YzgyOGIxLi5iMGY1MDAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKQEAgLTIxLDYgKzIxLDEwIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgorI2luY2x1ZGUgPGFzbS9taXBzX210Lmg+CisjZW5kaWYKKwogc3RydWN0IHNpZ2NvbnRleHQ7CiBzdHJ1Y3Qgc2lnY29udGV4dDMyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmgKaW5kZXggYTU1NDA4OS4uMTJkMTE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3dhci5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBfX0ZVVEVYX1NNUF9TWU5DICIJc3luYwkJCQkJXG4iCkBAIC0xNiwzMCArMTcsNTggQEAKIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKQkJXAogewkJCQkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIgkuc2V0CXB1c2gJCQkJCVxuIglcCi0JIgkuc2V0CW5vYXQJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMzCQkJCQlcbiIJXAotCSIxOglsbAklMSwgKCUzKQkjIF9fZnV0ZXhfYXRvbWljX29wMQlcbiIJXAotCSIJLnNldAltaXBzMAkJCQkJXG4iCVwKLQkiCSIgaW5zbgkiCQkJCQlcbiIJXAotCSIJLnNldAltaXBzMwkJCQkJXG4iCVwKLQkiMjoJc2MJJDEsICglMykJCQkJXG4iCVwKLQkiCWJlcXpsCSQxLCAxYgkJCQkJXG4iCVwKLQlfX0ZVVEVYX1NNUF9TWU5DCQkJCQkJXAotCSIzOgkJCQkJCQlcbiIJXAotCSIJLnNldAlwb3AJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMwCQkJCQlcbiIJXAotCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIgkJCQlcbiIJXAotCSI0OglsaQklMCwgJTUJCQkJCVxuIglcCi0JIglqCTJiCQkJCQlcbiIJXAotCSIJLnByZXZpb3VzCQkJCQlcbiIJXAotCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIglcCi0JIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCQlcbiIJXAotCSIJIl9fVUFfQUREUiAiXHQyYiwgNGIJCQkJXG4iCVwKLQkiCS5wcmV2aW91cwkJCQkJXG4iCVwKLQk6ICI9ciIgKHJldCksICI9ciIgKG9sZHZhbCkJCQkJCVwKLQk6ICIwIiAoMCksICJyIiAodWFkZHIpLCAiSnIiIChvcGFyZyksICJpIiAoLUVGQVVMVCkpOwkJXAorCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIJLnNldAlwdXNoCQkJCVxuIglcCisJCSIJLnNldAlub2F0CQkJCVxuIglcCisJCSIJLnNldAltaXBzMwkJCQlcbiIJXAorCQkiMToJbGwJJTEsICglMykJIyBfX2Z1dGV4X2F0b21pY19vcAlcbiIgXAorCQkiCS5zZXQJbWlwczAJCQkJXG4iCVwKKwkJIgkiIGluc24JIgkJCQlcbiIJXAorCQkiCS5zZXQJbWlwczMJCQkJXG4iCVwKKwkJIjI6CXNjCSQxLCAoJTMpCQkJXG4iCVwKKwkJIgliZXF6bAkkMSwgMWIJCQkJXG4iCVwKKwkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAorCQkiMzoJCQkJCQlcbiIJXAorCQkiCS5zZXQJcG9wCQkJCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU1CQkJCVxuIglcCisJCSIJagkyYgkJCQlcbiIJXAorCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKKwkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJOiAiPXIiIChyZXQpLCAiPXIiIChvbGR2YWwpCQkJCVwKKwkJOiAiMCIgKDApLCAiciIgKHVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpKTsJXAorCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkiCS5zZXQJcHVzaAkJCQlcbiIJXAorCQkiCS5zZXQJbm9hdAkJCQlcbiIJXAorCQkiCS5zZXQJbWlwczMJCQkJXG4iCVwKKwkJIjE6CWxsCSUxLCAoJTMpCSMgX19mdXRleF9hdG9taWNfb3AJXG4iIFwKKwkJIgkuc2V0CW1pcHMwCQkJCVxuIglcCisJCSIJIiBpbnNuCSIJCQkJXG4iCVwKKwkJIgkuc2V0CW1pcHMzCQkJCVxuIglcCisJCSIyOglzYwkkMSwgKCUzKQkJCVxuIglcCisJCSIJYmVxegkkMSwgMWIJCQkJXG4iCVwKKwkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAorCQkiMzoJCQkJCQlcbiIJXAorCQkiCS5zZXQJcG9wCQkJCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU1CQkJCVxuIglcCisJCSIJagkyYgkJCQlcbiIJXAorCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKKwkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJOiAiPXIiIChyZXQpLCAiPXIiIChvbGR2YWwpCQkJCVwKKwkJOiAiMCIgKDApLCAiciIgKHVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpKTsJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlyZXQgPSAtRU5PU1lTOwkJCQkJCVwKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTEwMiw3ICsxMzEsNjkgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyhpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCkKIHsKLQlyZXR1cm4gLUVOT1NZUzsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYwkJCVxuIgorCQkiCS5zZXQJcHVzaAkJCQkJXG4iCisJCSIJLnNldAlub2F0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CWxsCSUwLCAlMgkJCQkJXG4iCisJCSIJYm5lCSUwLCAlejMsIDNmCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQkiCW1vdmUJJDEsICV6NAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIyOglzYwkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSQxLCAxYgkJCQkJXG4iCisJCV9fRlVURVhfU01QX1NZTkMKKwkJIjM6CQkJCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJCQlcbiIKKwkJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiCQkJCVxuIgorCQkiNDoJbGkJJTAsICU1CQkJCQlcbiIKKwkJIglqCTNiCQkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCQlcbiIKKwkJIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCQlcbiIKKwkJIgkiX19VQV9BRERSICJcdDJiLCA0YgkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPVIiICgqdWFkZHIpCisJCTogIlIiICgqdWFkZHIpLCAiSnIiIChvbGR2YWwpLCAiSnIiIChuZXd2YWwpLCAiaSIgKC1FRkFVTFQpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYwkJCVxuIgorCQkiCS5zZXQJcHVzaAkJCQkJXG4iCisJCSIJLnNldAlub2F0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CWxsCSUwLCAlMgkJCQkJXG4iCisJCSIJYm5lCSUwLCAlejMsIDNmCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQkiCW1vdmUJJDEsICV6NAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIyOglzYwkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXoJJDEsIDFiCQkJCQlcbiIKKwkJX19GVVRFWF9TTVBfU1lOQworCQkiMzoJCQkJCQkJXG4iCisJCSIJLnNldAlwb3AJCQkJCVxuIgorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQkJXG4iCisJCSI0OglsaQklMCwgJTUJCQkJCVxuIgorCQkiCWoJM2IJCQkJCVxuIgorCQkiCS5wcmV2aW91cwkJCQkJXG4iCisJCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIgorCQkiCSJfX1VBX0FERFIgIlx0MWIsIDRiCQkJCVxuIgorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJCVxuIgorCQkiCS5wcmV2aW91cwkJCQkJXG4iCisJCTogIj0mciIgKHJldHZhbCksICI9UiIgKCp1YWRkcikKKwkJOiAiUiIgKCp1YWRkciksICJKciIgKG9sZHZhbCksICJKciIgKG5ld3ZhbCksICJpIiAoLUVGQVVMVCkKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0dXJuIHJldHZhbDsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCmluZGV4IGZlYjI5YTcuLmRhZGMwNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCkBAIC0yODQsNiArMjg0LDggQEAKICNkZWZpbmUgaW5zdHJ1Y3Rpb25faGF6YXJkKCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK2V4dGVybiB2b2lkIG1pcHNfaWhiKHZvaWQpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfQVNNX0hBWkFSRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pbnN0LmggYi9pbmNsdWRlL2FzbS1taXBzL2luc3QuaAppbmRleCBlMDc0NWY0Li4xZWQ4ZDBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2luc3QuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2luc3QuaApAQCAtNiw2ICs2LDcgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoaWVtbyBTZXVmZXIKICAqLwogI2lmbmRlZiBfQVNNX0lOU1RfSAogI2RlZmluZSBfQVNNX0lOU1RfSApAQCAtMjEsMTQgKzIyLDE0IEBACiAJY29wMF9vcCwgY29wMV9vcCwgY29wMl9vcCwgY29wMXhfb3AsCiAJYmVxbF9vcCwgYm5lbF9vcCwgYmxlemxfb3AsIGJndHpsX29wLAogCWRhZGRpX29wLCBkYWRkaXVfb3AsIGxkbF9vcCwgbGRyX29wLAotCW1ham9yXzFjX29wLCBqYWx4X29wLCBtYWpvcl8xZV9vcCwgbWFqb3JfMWZfb3AsCisJc3BlYzJfb3AsIGphbHhfb3AsIG1kbXhfb3AsIHNwZWMzX29wLAogCWxiX29wLCBsaF9vcCwgbHdsX29wLCBsd19vcCwKIAlsYnVfb3AsIGxodV9vcCwgbHdyX29wLCBsd3Vfb3AsCiAJc2Jfb3AsIHNoX29wLCBzd2xfb3AsIHN3X29wLAogCXNkbF9vcCwgc2RyX29wLCBzd3Jfb3AsIGNhY2hlX29wLAogCWxsX29wLCBsd2MxX29wLCBsd2MyX29wLCBwcmVmX29wLAogCWxsZF9vcCwgbGRjMV9vcCwgbGRjMl9vcCwgbGRfb3AsCi0Jc2Nfb3AsIHN3YzFfb3AsIHN3YzJfb3AsIHJkaHdyX29wLAorCXNjX29wLCBzd2MxX29wLCBzd2MyX29wLCBtYWpvcl8zYl9vcCwKIAlzY2Rfb3AsIHNkYzFfb3AsIHNkYzJfb3AsIHNkX29wCiB9OwogCkBAIC0zNyw3ICszOCw3IEBACiAgKi8KIGVudW0gc3BlY19vcCB7CiAJc2xsX29wLCBtb3ZjX29wLCBzcmxfb3AsIHNyYV9vcCwKLQlzbGx2X29wLCBzcmx2X29wLCBzcmF2X29wLCBzcGVjMV91bnVzZWRfb3AsIC8qIE9wY29kZSAweDA3IGlzIHVudXNlZCAqLworCXNsbHZfb3AsIHBtb25fb3AsIHNybHZfb3AsIHNyYXZfb3AsCiAJanJfb3AsIGphbHJfb3AsIG1vdnpfb3AsIG1vdm5fb3AsCiAJc3lzY2FsbF9vcCwgYnJlYWtfb3AsIHNwaW1fb3AsIHN5bmNfb3AsCiAJbWZoaV9vcCwgbXRoaV9vcCwgbWZsb19vcCwgbXRsb19vcCwKQEAgLTU1LDYgKzU2LDI4IEBACiB9OwogCiAvKgorICogZnVuYyBmaWVsZCBvZiBzcGVjMiBvcGNvZGUuCisgKi8KK2VudW0gc3BlYzJfb3AgeworCW1hZGRfb3AsIG1hZGR1X29wLCBtdWxfb3AsIHNwZWMyXzNfdW51c2VkX29wLAorCW1zdWJfb3AsIG1zdWJ1X29wLCAvKiBtb3JlIHVudXNlZCBvcHMgKi8KKwljbHpfb3AgPSAweDIwLCBjbG9fb3AsCisJZGNsel9vcCA9IDB4MjQsIGRjbG9fb3AsCisJc2RicHBfb3AgPSAweDNmCit9OworCisvKgorICogZnVuYyBmaWVsZCBvZiBzcGVjMyBvcGNvZGUuCisgKi8KK2VudW0gc3BlYzNfb3AgeworCWV4dF9vcCwgZGV4dG1fb3AsIGRleHR1X29wLCBkZXh0X29wLAorCWluc19vcCwgZGluc21fb3AsIGRpbnN1X29wLCBkaW5zX29wLAorCWJzaGZsX29wID0gMHgyMCwKKwlkYnNoZmxfb3AgPSAweDI0LAorCXJkaHdyX29wID0gMHgzZgorfTsKKworLyoKICAqIHJ0IGZpZWxkIG9mIGJjb25kIG9wY29kZXMuCiAgKi8KIGVudW0gcnRfb3AgewpAQCAtMTUxLDggKzE3NCw4IEBACiAgKiBmdW5jIGZpZWxkIGZvciBtYWQgb3Bjb2RlcyAoTUlQUyBJVikuCiAgKi8KIGVudW0gbWFkX2Z1bmMgewotCW1hZGRfb3AgICAgICA9IDB4MDgsIG1zdWJfb3AgICAgICA9IDB4MGEsCi0Jbm1hZGRfb3AgICAgID0gMHgwYywgbm1zdWJfb3AgICAgID0gMHgwZQorCW1hZGRfZnBfb3AgICAgICA9IDB4MDgsIG1zdWJfZnBfb3AgICAgICA9IDB4MGEsCisJbm1hZGRfZnBfb3AgICAgID0gMHgwYywgbm1zdWJfZnBfb3AgICAgID0gMHgwZQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmggYi9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCmluZGV4IDc3NDM0ODcuLjRiYjljMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaApAQCAtMTksNyArMTksMTIgQEAKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJJDEsICQyLCAxCSMgU01UQyAtIGNsZWFyIFRDU3RhdHVzLklYTVQJXG4iCisJIglvcmkJJDEsIDB4NDAwCQkJCQlcbiIKKwkiCXhvcmkJJDEsIDB4NDAwCQkJCQlcbiIKKwkiCW10YzAJJDEsICQyLCAxCQkJCQlcbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpCiAJIgllaQkJCQkJCQlcbiIKICNlbHNlCiAJIgltZmMwCSQxLCQxMgkJCQkJCVxuIgpAQCAtNjIsNyArNjcsMTIgQEAKIAkiCS5tYWNybwlsb2NhbF9pcnFfZGlzYWJsZVxuIgogCSIJLnNldAlwdXNoCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJJDEsICQyLCAxCQkJCQlcbiIKKwkiCW9yaQkkMSwgMHg0MDAJCQkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgorCSIJbXRjMAkkMSwgJDIsIDEJCQkJCVxuIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMikKIAkiCWRpCQkJCQkJCVxuIgogI2Vsc2UKIAkiCW1mYzAJJDEsJDEyCQkJCQkJXG4iCkBAIC04OCw3ICs5OCwxMSBAQAogCSIJLm1hY3JvCWxvY2FsX3NhdmVfZmxhZ3MgZmxhZ3MJCQkJXG4iCiAJIgkuc2V0CXB1c2gJCQkJCQlcbiIKIAkiCS5zZXQJcmVvcmRlcgkJCQkJCVxuIgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJXFxmbGFncywgJDIsIDEJCQkJCVxuIgorI2Vsc2UKIAkiCW1mYzAJXFxmbGFncywgJDEyCQkJCQlcbiIKKyNlbmRpZgogCSIJLnNldAlwb3AJCQkJCQlcbiIKIAkiCS5lbmRtCQkJCQkJCVxuIik7CiAKQEAgLTEwMiw3ICsxMTYsMTMgQEAKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyCQkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkiCW1mYzAJXFxyZXN1bHQsICQyLCAxCQkJCQlcbiIKKwkiCW9yaQkkMSwgXFxyZXN1bHQsIDB4NDAwCQkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgorCSIJbXRjMAkkMSwgJDIsIDEJCQkJCVxuIgorCSIJYW5kaQlcXHJlc3VsdCwgXFxyZXN1bHQsIDB4NDAwCQkJXG4iCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKQogCSIJZGkJXFxyZXN1bHQJCQkJCVxuIgogCSIJYW5kaQlcXHJlc3VsdCwgMQkJCQkJXG4iCiAjZWxzZQpAQCAtMTI4LDcgKzE0OCwxNCBAQAogCSIJLnNldAlwdXNoCQkJCQkJXG4iCiAJIgkuc2V0CW5vcmVvcmRlcgkJCQkJXG4iCiAJIgkuc2V0CW5vYXQJCQkJCQlcbiIKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSAmJiBkZWZpbmVkKENPTkZJR19JUlFfQ1BVKQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkibWZjMAkkMSwgJDIsIDEJCQkJCQlcbiIKKwkiYW5kaQlcXGZsYWdzLCAweDQwMAkJCQkJCVxuIgorCSJvcmkJJDEsIDB4NDAwCQkJCQkJXG4iCisJInhvcmkJJDEsIDB4NDAwCQkJCQkJXG4iCisJIm9yCVxcZmxhZ3MsICQxCQkJCQkJXG4iCisJIm10YzAJXFxmbGFncywgJDIsIDEJCQkJCQlcbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpICYmIGRlZmluZWQoQ09ORklHX0lSUV9DUFUpCiAJLyoKIAkgKiBTbG93LCBidXQgZG9lc24ndCBzdWZmZXIgZnJvbSBhIHJlbGF0aXZseSB1bmxpa2VseSByYWNlCiAJICogY29uZGl0aW9uIHdlJ3JlIGhhdmluZyBzaW5jZSBkYXlzIDEuCkBAIC0xNjcsMTEgKzE5NCwyOSBAQAogCQk6ICJtZW1vcnkiKTsJCQkJCQlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwkJCQkJXAotCSEoZmxhZ3MgJiAxKTsJCQkJCQkJXAotfSkKK3N0YXRpYyBpbmxpbmUgaW50IGlycXNfZGlzYWJsZWQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBTTVRDIG1vZGVsIHVzZXMgVENTdGF0dXMuSVhNVCB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIGEgdGhyZWFkL0NQVQorCSAqLworCXVuc2lnbmVkIGxvbmcgX19yZXN1bHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCS5zZXQJbm9yZW9yZGVyCQkJCQlcbiIKKwkiCW1mYzAJJTAsICQyLCAxCQkJCQlcbiIKKwkiCWFuZGkJJTAsIDB4NDAwCQkJCQlcbiIKKwkiCXNsdAklMCwgJDAsICUwCQkJCQlcbiIKKwkiCS5zZXQJcmVvcmRlcgkJCQkJCVxuIgorCTogIj1yIiAoX19yZXN1bHQpKTsKKworCXJldHVybiBfX3Jlc3VsdDsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiAhKGZsYWdzICYgMSk7CisjZW5kaWYKK30KIAogI2VuZGlmIC8qIF9BU01fSU5URVJSVVBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IDhhMzQyY2MuLmRkZTY3N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtMTEsNiArMTEsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKwogI2luY2x1ZGUgPGlycS5oPgogCiAjaWZkZWYgQ09ORklHX0k4MjU5CkBAIC0yNiw2ICsyOSwyMyBAQAogCiBleHRlcm4gYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBDbGVhciBpbnRlcnJ1cHQgbWFzayBoYW5kbGluZyAiYmFja3N0b3AiIGlmIGlycV9od21hc2sKKyAqIGVudHJ5IHNvIGluZGljYXRlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGFjaygpIG9yIGVuZCgpCisgKiBmdW5jdGlvbnMgd2lsbCB0YWtlIG92ZXIgcmUtZW5hYmxpbmcgdGhlIGxvdy1sZXZlbCBtYXNrLgorICogT3RoZXJ3aXNlIGl0IHdpbGwgYmUgZG9uZSBvbiByZXR1cm4gZnJvbSBleGNlcHRpb24uCisgKi8KKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChpcnFfaHdtYXNrW2lycV0gJiAweDAwMDBmZjAwKQkJCQlcCisJCXdyaXRlX2MwX3RjY29udGV4dChyZWFkX2MwX3RjY29udGV4dCgpICYJCVwKKwkJICAgICAgICAgICAgICAgICAgIH4oaXJxX2h3bWFza1tpcnFdICYgMHgwMDAwZmYwMCkpOwlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCiAvKgpAQCAtMzksNiArNTksNyBAQAogI2RlZmluZSBkb19JUlEoaXJxLCByZWdzKQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaXJxX2VudGVyKCk7CQkJCQkJCVwKKwlfX0RPX0lSUV9TTVRDX0hPT0soKTsJCQkJCQlcCiAJX19kb19JUlEoKGlycSksIChyZWdzKSk7CQkJCQlcCiAJaXJxX2V4aXQoKTsJCQkJCQkJXAogfSB3aGlsZSAoMCkKQEAgLTQ2LDUgKzY3LDE0IEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCitzdHJ1Y3QgaXJxYWN0aW9uOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpcnFfaHdtYXNrW107CitleHRlcm4gaW50IHNldHVwX2lycV9zbXRjKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKiBuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaHdtYXNrKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2tzcGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMva3NwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWU3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2tzcGQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fS1NQRF9ICisjZGVmaW5lIF9BU01fS1NQRF9ICisKK3N0cnVjdCBrc3BkX25vdGlmaWNhdGlvbnMgeworCXZvaWQgKCprc3BkX3NwX2V4aXQpKGludCBzcF9pZCk7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisjaWZkZWYgQ09ORklHX01JUFNfQVBTUF9LU1BECitleHRlcm4gdm9pZCBrc3BkX25vdGlmeShzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpub3RpZnkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3BkX25vdGlmeShzdHJ1Y3Qga3NwZF9ub3RpZmljYXRpb25zICpub3RpZnkpCit7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCmluZGV4IDU1MDk3OWEuLmUzMzE1MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCkBAIC0xMDQsNjUgKzEwNCwxMDcgQEAKICNlbmRpZgogCiAvKiBNSVBTIHBvcnQgYW5kIG1lbW9yeS1tYXBwZWQgSS9PIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9mbHVzaF9wcm9sb2d1ZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzKQorCQlwcmVlbXB0X2Rpc2FibGUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfZXBpbG9ndWUodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKKwkJcHJlZW1wdF9lbmFibGUoKTsKKyNlbmRpZgorfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpIHsKIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKLQkJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKQotCQkJZmx1c2hfZGNhY2hlX3BhZ2UodmlydF90b19wYWdlKGFkZHIpKTsKKworCQl3aGlsZSAoYWRkciA8IGVuZCkgeworCQkJbG9jYWxfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKCh2b2lkICopYWRkcik7CisJCQlhZGRyICs9IFBBR0VfU0laRTsKKwkJfQogCX0KIH0KIAorLyoKKyAqIGluc3coKSBhbmQgZ2FuZyBtaWdodCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBzbyB3ZSBjYW4ndAorICogc2VuZCBJUElzIGZvciBmbHVzaGluZyBkdWUgdG8gdGhlIHBvdGVuY2lhbCBvZiBkZWFkbG9ja3MsIHNlZSB0aGUgY29tbWVudAorICogYWJvdmUgc21wX2NhbGxfZnVuY3Rpb24oKSBpbiBhcmNoL21pcHMva2VybmVsL3NtcC5jLiAgV2Ugd29yayBhcm91bmQgdGhlCisgKiBwcm9ibGVtIGJ5IGRpc2FibGluZyBwcmVlbXB0aW9uIHNvIHdlIGtub3cgd2UgYWN0dWFsbHkgcGVyZm9ybSB0aGUgZmx1c2gKKyAqIG9uIHRoZSBwcm9jZXNzb3IgdGhhdCBhY3R1YWxseSBoYXMgdGhlIGxpbmVzIHRvIGJlIGZsdXNoZWQgd2hpY2ggaG9wZWZ1bGx5CisgKiBpcyBldmVuIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgYW55d2F5LgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsCiAJdW5zaWduZWQgaW50IGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJaW5zdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CisJX19pZGVfZmx1c2hfcHJvbG9ndWUoKTsKIAlpbnNsKHBvcnQsIGFkZHIsIGNvdW50KTsKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgY291bnQgKiA0KTsKKwlfX2lkZV9mbHVzaF9lcGlsb2d1ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLAogCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CisJX19pZGVfZmx1c2hfcHJvbG9ndWUoKTsKIAlvdXRzdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwKIAl1bnNpZ25lZCBsb25nIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJb3V0c2wocG9ydCwgYWRkciwgY291bnQpOwogCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylhZGRyLCBjb3VudCAqIDQpOworCV9faWRlX2ZsdXNoX2VwaWxvZ3VlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9tbV9pbnN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJcmVhZHN3KHBvcnQsIGFkZHIsIGNvdW50KTsKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgY291bnQgKiAyKTsKKwlfX2lkZV9mbHVzaF9lcGlsb2d1ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfbW1faW5zbCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlfX2lkZV9mbHVzaF9wcm9sb2d1ZSgpOwogCXJlYWRzbChwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogNCk7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX21tX291dHN3KHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogeworCV9faWRlX2ZsdXNoX3Byb2xvZ3VlKCk7CiAJd3JpdGVzdyhwb3J0LCBhZGRyLCBjb3VudCk7CiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZXBpbG9ndWUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faWRlX21tX291dHNsKHZvaWQgX19pb21lbSAqIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlfX2lkZV9mbHVzaF9wcm9sb2d1ZSgpOwogCXdyaXRlc2wocG9ydCwgYWRkciwgY291bnQpOwogCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylhZGRyLCBjb3VudCAqIDQpOworCV9faWRlX2ZsdXNoX2VwaWxvZ3VlKCk7CiB9CiAKIC8qIGlkZV9pbnN3IGNhbGxzIGluc3csIG5vdCBfX2lkZV9pbnN3LiAgV2h5PyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWptcjM5MjcvZHMxNzQyLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaAppbmRleCBjZmY2MTkyLi44YThmZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9kczE3NDIuaApAQCAtMywxNCArMywxNCBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDA2IGJ5IFJhbGYgQmFlY2hsZQogICovCiAjaWZuZGVmIF9fQVNNX01BQ0hfSk1SMzkyN19EUzE3NDJfSAogI2RlZmluZSBfX0FTTV9NQUNIX0pNUjM5MjdfRFMxNzQyX0gKIAogI2luY2x1ZGUgPGFzbS9qbXIzOTI3L2ptcjM5MjcuaD4KIAotI2RlZmluZSBydGNfcmVhZChyZWcpCQkoam1yMzkyN19udnJhbV9pbihhZGRyKSkKKyNkZWZpbmUgcnRjX3JlYWQocmVnKQkJKGptcjM5MjdfbnZyYW1faW4ocmVnKSkKICNkZWZpbmUgcnRjX3dyaXRlKGRhdGEsIHJlZykJKGptcjM5MjdfbnZyYW1fb3V0KChkYXRhKSwocmVnKSkpCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0pNUjM5MjdfRFMxNzQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNWVmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9NSVBTX1BBUkFNX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NSVBTX1BBUkFNX0gKKworI2RlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01JUFNfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYXJ2ZWxsLmggYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaAppbmRleCA5MjI1YjMzLi42YmIyMTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hcnZlbGwuaApAQCAtNTMsNCArNTMsNiBAQAogCXVuc2lnbmVkIGxvbmcgICBjb25maWdfdnJlZzsKIH07CiAKK2V4dGVybiB2b2lkIGxsX212NjQzNDBfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2VuZGlmCS8qIF9fQVNNX01JUFNfTUFSVkVMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzLmgKaW5kZXggMDk5ODE1MS4uYThhZTEyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXMuaApAQCAtMzMsMTMgKzMzLDI5IEBACiAjZGVmaW5lIEFUTEFTX1JUQ19BRFJfUkVHICAgICAgIDB4MWYwMDA4MDAKICNkZWZpbmUgQVRMQVNfUlRDX0RBVF9SRUcgICAgICAgMHgxZjAwMDgwOAogCi0KIC8qCiAgKiBBdGxhcyBpbnRlcnJ1cHQgY29udHJvbGxlciByZWdpc3RlciBiYXNlLgogICovCiAjZGVmaW5lIEFUTEFTX0lDVFJMX1JFR1NfQkFTRSAgIDB4MWYwMDAwMDAKIAogLyoKKyAqIEF0bGFzIHJlZ2lzdGVycyBhcmUgbWVtb3J5IG1hcHBlZCBvbiA2NC1iaXQgYWxpZ25lZCBib3VuZGFyaWVzIGFuZAorICogb25seSB3b3JkIGFjY2VzcyBhcmUgYWxsb3dlZC4KKyAqLworc3RydWN0IGF0bGFzX2ljdHJsX3JlZ3MgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyYXc7CisJaW50IGR1bW15MTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c2V0ZW47CisJaW50IGR1bW15MjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50cnN0ZW47CisJaW50IGR1bW15MzsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50ZW5hYmxlOworCWludCBkdW1teTQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHN0YXR1czsKKwlpbnQgZHVtbXk1OworfTsKKworLyoKICAqIEF0bGFzIFVBUlQgcmVnaXN0ZXIgYmFzZS4KICAqLwogI2RlZmluZSBBVExBU19VQVJUX1JFR1NfQkFTRSAgICAweDFmMDAwOTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmgKaW5kZXggYmJhMzVjMS4uZmQ3ZWJjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXNpbnQuaApAQCAtNjIsMjMgKzYyLDQgQEAKICNkZWZpbmUgQVRMQVNJTlRfUkVTMzEJCShBVExBU0lOVF9CQVNFKzMxKQogI2RlZmluZSBBVExBU0lOVF9FTkQJCShBVExBU0lOVF9CQVNFKzMxKQogCi0vKgotICogQXRsYXMgcmVnaXN0ZXJzIGFyZSBtZW1vcnkgbWFwcGVkIG9uIDY0LWJpdCBhbGlnbmVkIGJvdW5kYXJpZXMgYW5kCi0gKiBvbmx5IHdvcmQgYWNjZXNzIGFyZSBhbGxvd2VkLgotICovCi1zdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyB7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyYXc7Ci0gICAgICAgIGludCBkdW1teTE7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRzZXRlbjsKLSAgICAgICAgaW50IGR1bW15MjsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHJzdGVuOwotICAgICAgICBpbnQgZHVtbXkzOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50ZW5hYmxlOwotICAgICAgICBpbnQgZHVtbXk0OwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50c3RhdHVzOwotICAgICAgICBpbnQgZHVtbXk1OwotfTsKLQotZXh0ZXJuIHZvaWQgYXRsYXNpbnRfaW5pdCh2b2lkKTsKLQogI2VuZGlmIC8qICEoX01JUFNfQVRMQVNJTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKaW5kZXggMjViNmZmYy4uZmE4YjkxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKQEAgLTY3LDYgKzY3LDcgQEAKICNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0ZQR0EyICAgICA3CiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBUjIgICAgOAogI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTMgICAgIDkKKyNkZWZpbmUgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFXzI0SyAgICAgICAxMAogCiAvKioqKiBBcnRpZmljaWFsIGNvcmlkIGRlZmluZXMgKioqKi8KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNfbXQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc19tdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWEzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNfbXQuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogRGVmaW5pdGlvbnMgYW5kIGRlY2FscmF0aW9ucyBmb3IgTUlQUyBNVCBzdXBwb3J0CisgKiB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBTTVRDLCBWU01QLCBhbmQvb3IgQVAvU1AKKyAqIGtlcm5lbCBtb2RlbHMuCisgKi8KKyNpZm5kZWYgX19BU01fTUlQU19NVF9ICisjZGVmaW5lIF9fQVNNX01JUFNfTVRfSAorCitleHRlcm4gY3B1bWFza190IG10X2ZwdV9jcHVtYXNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXRfZnBlbXVsX3RocmVzaG9sZDsKKworZXh0ZXJuIHZvaWQgbWlwc19tdF9yZWdkdW1wKHVuc2lnbmVkIGxvbmcgcHJldmlvdXNfbXZwY29udHJvbF92YWx1ZSk7CitleHRlcm4gdm9pZCBtaXBzX210X3NldF9jcHVvcHRpb25zKHZvaWQpOworCisjZW5kaWYgLyogX19BU01fTUlQU19NVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNtdHJlZ3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oCmluZGV4IGE2NjljMDcuLmY2MzdjZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc210cmVncy5oCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotZXh0ZXJuIHZvaWQgbWlwc19tdF9yZWdkdW1wKHZvaWQpOworZXh0ZXJuIHZvaWQgbWlwc19tdF9yZWdkdW1wKHVuc2lnbmVkIGxvbmcgcHJldmlvdXNfbXZwY29udHJvbF92YWx1ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGR2cGUodm9pZCkKIHsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIJLnNldAlub3Jlb3JkZXIJCQkJCVxuIgogCSIJLnNldAltaXBzMzJyMgkJCQkJXG4iCi0JIgllbXQJCQkJCQkJXG4iCisJIgkud29yZAkweDQxNjAwYmUxCQkJIyBlbXQJCVxuIgogCSIJZWhiCQkJCQkJCVxuIgogCSIJLnNldAltaXBzMAkJCQkJCVxuIgogCSIJLnNldAlyZW9yZGVyIik7CkBAIC0yODIsOCArMjgyLDExIEBACiAJCQkJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAogCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAogCSIJLnNldAltaXBzMzJyMgkJCQlcbiIJXAotCSIJbWZ0Z3ByCSUwLCIgI3J0ICIJCQkJXG4iCVwKKwkiCSMgbWZ0Z3ByICQxLCIgI3J0ICIJCQkJXG4iCVwKKwkiCS53b3JkCTB4NDEwMDA4MjAgfCAoIiAjcnQgIiA8PCAxNikJCVxuIglcCisJIgltb3ZlCSUwLCAkMQkJCQkJXG4iCVwKIAkiCS5zZXQJcG9wCQkJCQlcbiIJXAogCTogIj1yIiAoX19yZXMpKTsJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0yOTUsOSArMjk4LDcgQEAKIAl1bnNpZ25lZCBsb25nIF9fcmVzOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIi5zZXQgbm9hdFxuXHQiCQkJCQkJCVwKLQkibWZ0clx0JTAsICIgI3J0ICIsICIgI3UgIiwgIiAjc2VsICJcblx0IgkJCVwKLQkiLnNldCBhdFxuXHQiCQkJCQkJCVwKKwkiCW1mdHIJJTAsICIgI3J0ICIsICIgI3UgIiwgIiAjc2VsICIJCVxuIglcCiAJOiAiPXIiIChfX3JlcykpOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX3JlczsJCQkJCQkJCVwKQEAgLTM2NCw2ICszNjUsOSBAQAogI2RlZmluZSByZWFkX3ZwZV9jMF9lYmFzZSgpCQltZnRjMCgxNSwxKQogI2RlZmluZSB3cml0ZV92cGVfYzBfZWJhc2UodmFsKQkJbXR0YzAoMTUsIDEsIHZhbCkKICNkZWZpbmUgd3JpdGVfdnBlX2MwX2NvbXBhcmUodmFsKQltdHRjMCgxMSwgMCwgdmFsKQorI2RlZmluZSByZWFkX3ZwZV9jMF9iYWR2YWRkcigpCQltZnRjMCg4LCAwKQorI2RlZmluZSByZWFkX3ZwZV9jMF9lcGMoKQkJbWZ0YzAoMTQsIDApCisjZGVmaW5lIHdyaXRlX3ZwZV9jMF9lcGModmFsKQkJbXR0YzAoMTQsIDAsIHZhbCkKIAogCiAvKiBUQyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCmluZGV4IDAzNWJhMGEuLjVhZjc1MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKQEAgLTI5MSw3ICsyOTEsNyBAQAogI2RlZmluZSBTVDBfREwJCQkoX1VMQ0FTVF8oMSkgPDwgMjQpCiAKIC8qCi0gKiBFbmFibGUgdGhlIE1JUFMgRFNQIEFTRQorICogRW5hYmxlIHRoZSBNSVBTIE1ETVggYW5kIERTUCBBU0VzCiAgKi8KICNkZWZpbmUgU1QwX01YCQkJMHgwMTAwMDAwMAogCkBAIC04MzYsNiArODM2LDkgQEAKICNkZWZpbmUgcmVhZF9jMF9jYWNoZSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDApCS8qIFRYMzl4eCAqLwogI2RlZmluZSB3cml0ZV9jMF9jYWNoZSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDAsIHZhbCkKIAorI2RlZmluZSByZWFkX2MwX2JhZHZhZGRyKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQ4LCAwKQorI2RlZmluZSB3cml0ZV9jMF9iYWR2YWRkcih2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDgsIDAsIHZhbCkKKwogI2RlZmluZSByZWFkX2MwX2NvdW50KCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkOSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfY291bnQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCAwLCB2YWwpCiAKQEAgLTg1OCw3ICs4NjEsMTkgQEAKICNkZWZpbmUgd3JpdGVfYzBfY29tcGFyZTModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNywgdmFsKQogCiAjZGVmaW5lIHJlYWRfYzBfc3RhdHVzKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMCkKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjZGVmaW5lIHdyaXRlX2MwX3N0YXR1cyh2YWwpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMCwgdmFsKTsJCQkJXAorCV9fZWhiKCk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisjZWxzZQorLyoKKyAqIExlZ2FjeSBub24tU01UQyBjb2RlLCB3aGljaCBtYXkgYmUgaGF6YXJkb3VzCisgKiBidXQgd2hpY2ggbWlnaHQgbm90IHN1cHBvcnQgRUhCCisgKi8KICNkZWZpbmUgd3JpdGVfYzBfc3RhdHVzKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDAsIHZhbCkKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKICNkZWZpbmUgcmVhZF9jMF9jYXVzZSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDEzLCAwKQogI2RlZmluZSB3cml0ZV9jMF9jYXVzZSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDEzLCAwLCB2YWwpCkBAIC0xMDAxLDYgKzEwMTYsOSBAQAogI2RlZmluZSByZWFkX2MwX3RhZ2xvKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjgsIDApCiAjZGVmaW5lIHdyaXRlX2MwX3RhZ2xvKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjgsIDAsIHZhbCkKIAorI2RlZmluZSByZWFkX2MwX2R0YWdsbygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjgsIDIpCisjZGVmaW5lIHdyaXRlX2MwX2R0YWdsbyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAyLCB2YWwpCisKICNkZWZpbmUgcmVhZF9jMF90YWdoaSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI5LCAwKQogI2RlZmluZSB3cml0ZV9jMF90YWdoaSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI5LCAwLCB2YWwpCiAKQEAgLTEzNTQsNiArMTM3MiwxMSBAQAogLyoKICAqIE1hbmlwdWxhdGUgYml0cyBpbiBhIGMwIHJlZ2lzdGVyLgogICovCisjaWZuZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBTTVRDIExpbnV4IHJlcXVpcmVzIHNodXR0aW5nLWRvd24gbWljcm90aHJlYWQgc2NoZWR1bGluZworICogZHVyaW5nIENQMCByZWdpc3RlciByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZXMuCisgKi8KICNkZWZpbmUgX19CVUlMRF9TRVRfQzAobmFtZSkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCiBzZXRfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBzZXQpCQkJCQlcCkBAIC0xMzkyLDYgKzE0MTUsMTE5IEBACiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CiAKKyNlbHNlIC8qIFNNVEMgdmVyc2lvbnMgdGhhdCBtYW5hZ2UgTVQgc2NoZWR1bGluZyAqLworCisjaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgorCisvKgorICogVGhpcyBpcyBhIGR1cGxpY2F0ZSBvZiBkbXQoKSBpbiBtaXBzbXRyZWdzLmggdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAorICogaGVhZGVyIGZpbGUgcmVjdXJzaW9uLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2RtdCh2b2lkKQoreworCWludCByZXM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCS5zZXQJcHVzaAkJCQkJCVxuIgorCSIJLnNldAltaXBzMzJyMgkJCQkJXG4iCisJIgkuc2V0CW5vYXQJCQkJCQlcbiIKKwkiCS53b3JkCTB4NDE2MTBCQzEJCQkjIGRtdCAkMQlcbiIKKwkiCWVoYgkJCQkJCQlcbiIKKwkiCW1vdmUJJTAsICQxCQkJCQkJXG4iCisJIgkuc2V0CXBvcAkJCQkJCVxuIgorCTogIj1yIiAocmVzKSk7CisKKwlpbnN0cnVjdGlvbl9oYXphcmQoKTsKKworCXJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgX19WUEVDT05UUk9MX1RFX1NISUZUCTE1CisjZGVmaW5lIF9fVlBFQ09OVFJPTF9URQkJKDFVTCA8PCBfX1ZQRUNPTlRST0xfVEVfU0hJRlQpCisKKyNkZWZpbmUgX19FTVRfRU5BQkxFCQlfX1ZQRUNPTlRST0xfVEUKKworc3RhdGljIGlubGluZSB2b2lkIF9fZW10KHVuc2lnbmVkIGludCBwcmV2aW91cykKK3sKKwlpZiAoKHByZXZpb3VzICYgX19FTVRfRU5BQkxFKSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCisJCSIJLnNldAltaXBzMzJyMgkJCQlcbiIKKwkJIgkud29yZAkweDQxNjAwYmUxCQkjIGVtdAkJXG4iCisJCSIJZWhiCQkJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19laGIodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWVoYgkJCQkJCQlcbiIpOworfQorCisvKgorICogTm90ZSB0aGF0IGxvY2FsX2lycV9zYXZlL3Jlc3RvcmUgYWZmZWN0IFRDLXNwZWNpZmljIElYTVQgc3RhdGUsCisgKiBub3QgU3RhdHVzLklFIGFzIGluIG5vbi1TTVRDIGtlcm5lbC4KKyAqLworCisjZGVmaW5lIF9fQlVJTERfU0VUX0MwKG5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgfD0gc2V0OwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwlfX2VtdChvbXQpOwkJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2xlYXJfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjbGVhcikJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwlfX2VtdChvbXQpOwkJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJCQkJCQkJCVwKKwlvbXQgPSBfX2RtdCgpOwkJCQkJCVwKKwlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAorCXJlcyAmPSB+Y2hhbmdlOwkJCQkJCVwKKwlyZXMgfD0gKG5ldyAmIGNoYW5nZSk7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJX19lbXQob210KTsJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30KKyNlbmRpZgorCiBfX0JVSUxEX1NFVF9DMChzdGF0dXMpCiBfX0JVSUxEX1NFVF9DMChjYXVzZSkKIF9fQlVJTERfU0VUX0MwKGNvbmZpZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaAppbmRleCA2MWNmMjI1Li42ZTA5ZjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCkBAIC0xNyw2ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgorI2luY2x1ZGUgPGFzbS9zbXRjLmg+CisjZW5kaWYgLyogU01UQyAqLwogCiAvKgogICogRm9yIHRoZSBmYXN0IHRsYiBtaXNzIGhhbmRsZXJzLCB3ZSBrZWVwIGEgcGVyIGNwdSBhcnJheSBvZiBwb2ludGVycwpAQCAtNTQsNiArNTgsMTQgQEAKICNkZWZpbmUgQVNJRF9JTkMJMHgxCiAjZGVmaW5lIEFTSURfTUFTSwkweGZmZgogCisvKiBTTVRDLzM0SyBkZWJ1ZyBoYWNrIC0gYnV0IG1heWJlIHdlJ2xsIGtlZXAgaXQgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01UQykKKworI2RlZmluZSBBU0lEX0lOQwkweDEKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNtdGNfYXNpZF9tYXNrOworI2RlZmluZSBBU0lEX01BU0sJKHNtdGNfYXNpZF9tYXNrKQorI2RlZmluZQlIV19BU0lEX01BU0sJMHhmZgorLyogRW5kIFNNVEMvMzRLIGRlYnVnIGhhY2sgKi8KICNlbHNlIC8qIEZJWE1FOiBub3QgY29ycmVjdCBmb3IgUjYwMDAgKi8KIAogI2RlZmluZSBBU0lEX0lOQwkweDEKQEAgLTc2LDYgKzg4LDggQEAKICNkZWZpbmUgQVNJRF9WRVJTSU9OX01BU0sgICgodW5zaWduZWQgbG9uZyl+KEFTSURfTUFTS3woQVNJRF9NQVNLLTEpKSkKICNkZWZpbmUgQVNJRF9GSVJTVF9WRVJTSU9OICgodW5zaWduZWQgbG9uZykofkFTSURfVkVSU0lPTl9NQVNLKSArIDEpCiAKKyNpZm5kZWYgQ09ORklHX01JUFNfTVRfU01UQworLyogTm9ybWFsLCBjbGFzc2ljIE1JUFMgZ2V0X25ld19tbXVfY29udGV4dCAqLwogc3RhdGljIGlubGluZSB2b2lkCiBnZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGNwdSkKIHsKQEAgLTkxLDYgKzEwNSwxMiBAQAogCWNwdV9jb250ZXh0KGNwdSwgbW0pID0gYXNpZF9jYWNoZShjcHUpID0gYXNpZDsKIH0KIAorI2Vsc2UgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCisjZGVmaW5lIGdldF9uZXdfbW11X2NvbnRleHQobW0sY3B1KSBzbXRjX2dldF9uZXdfbW11X2NvbnRleHQoKG1tKSwoY3B1KSkKKworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKwogLyoKICAqIEluaXRpYWxpemUgdGhlIGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhIG5ldyBtbV9zdHJ1Y3QKICAqIGluc3RhbmNlLgpAQCAtMTExLDE0ICsxMzEsNDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJdW5zaWduZWQgbG9uZyBvbGRhc2lkOworCXVuc2lnbmVkIGxvbmcgbXRmbGFnczsKKwlpbnQgbXl0bGIgPSAoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpID8gMCA6IGNwdV9kYXRhW2NwdV0udnBlX2lkOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltdGZsYWdzID0gZHZwZSgpOworI2Vsc2UgLyogTm90IFNNVEMgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJLyogQ2hlY2sgaWYgb3VyIEFTSUQgaXMgb2YgYW4gb2xkZXIgdmVyc2lvbiBhbmQgdGh1cyBpbnZhbGlkICovCiAJaWYgKChjcHVfY29udGV4dChjcHUsIG5leHQpIF4gYXNpZF9jYWNoZShjcHUpKSAmIEFTSURfVkVSU0lPTl9NQVNLKQogCQlnZXRfbmV3X21tdV9jb250ZXh0KG5leHQsIGNwdSk7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJLyoKKwkgKiBJZiB0aGUgRW50cnlIaSBBU0lEIGJlaW5nIHJlcGxhY2VkIGhhcHBlbnMgdG8gYmUKKwkgKiB0aGUgdmFsdWUgZmxhZ2dlZCBhdCBBU0lEIHJlY3ljbGluZyB0aW1lIGFzIGhhdmluZworCSAqIGFuIGV4dGVuZGVkIGxpZmUsIGNsZWFyIHRoZSBiaXQgc2hvd2luZyBpdCBiZWluZworCSAqIGluIHVzZSBieSB0aGlzICJDUFUiLCBhbmQgaWYgdGhhdCdzIHRoZSBsYXN0IGJpdCwKKwkgKiBmcmVlIHVwIHRoZSBBU0lEIHZhbHVlIGZvciB1c2UgYW5kIGZsdXNoIGFueSBvbGQKKwkgKiBpbnN0YW5jZXMgb2YgaXQgZnJvbSB0aGUgVExCLgorCSAqLworCW9sZGFzaWQgPSAocmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0spOworCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSkgeworCQlzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKwkJaWYoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdID09IDApCisJCQlzbXRjX2ZsdXNoX3RsYl9hc2lkKG9sZGFzaWQpOworCX0KKwkvKgorCSAqIFRyZWFkIHNvZnRseSBvbiBFbnRyeUhpLCBhbmQgc28gbG9uZyBhcyB3ZSBzdXBwb3J0CisJICogaGF2aW5nIEFTSURfTUFTSyBzbWFsbGVyIHRoYW4gdGhlIGhhcmR3YXJlIG1heGltdW0sCisJICogbWFrZSBzdXJlIG5vICJzb2Z0IiBiaXRzIGJlY29tZSAiaGFyZCIuLi4KKwkgKi8KKwl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spCisJCQl8IChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCisJZXZwZShtdGZsYWdzKTsKKyNlbHNlCiAJd3JpdGVfYzBfZW50cnloaShjcHVfY29udGV4dChjcHUsIG5leHQpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCiAJLyoKQEAgLTE1MSwxMiArMjAzLDM0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXVuc2lnbmVkIGxvbmcgb2xkYXNpZDsKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3M7CisJaW50IG15dGxiID0gKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA/IDAgOiBjcHVfZGF0YVtjcHVdLnZwZV9pZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkvKiBVbmNvbmRpdGlvbmFsbHkgZ2V0IGEgbmV3IEFTSUQuICAqLwogCWdldF9uZXdfbW11X2NvbnRleHQobmV4dCwgY3B1KTsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLworCW10ZmxhZ3MgPSBkdnBlKCk7CisJb2xkYXNpZCA9IHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLOworCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSkgeworCQlzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKyAgICAgICAJCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSA9PSAwKQorICAgICAgICAgICAgICAgCQkgc210Y19mbHVzaF90bGJfYXNpZChvbGRhc2lkKTsKKwl9CisJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KKwl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spIHwKKwkgICAgICAgICAgICAgICAgIChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCisJZXZwZShtdGZsYWdzKTsKKyNlbHNlCiAJd3JpdGVfYzBfZW50cnloaShjcHVfY29udGV4dChjcHUsIG5leHQpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCiAJLyogbWFyayBtbXUgb3duZXJzaGlwIGNoYW5nZSAqLwpAQCAtMTc0LDE3ICsyNDgsNDkgQEAKIGRyb3BfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIG9sZGFzaWQ7CisJLyogQ2FuJ3QgdXNlIHNwaW5sb2NrIGJlY2F1c2UgY2FsbGVkIGZyb20gVExCIGZsdXNoIHdpdGhpbiBEVlBFICovCisJdW5zaWduZWQgaW50IHByZXZ2cGU7CisJaW50IG15dGxiID0gKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA/IDAgOiBjcHVfZGF0YVtjcHVdLnZwZV9pZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlpZiAoY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkgIHsKIAkJZ2V0X25ld19tbXVfY29udGV4dChtbSwgY3B1KTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS8qIFNlZSBjb21tZW50cyBmb3Igc2ltaWxhciBjb2RlIGFib3ZlICovCisJCXByZXZ2cGUgPSBkdnBlKCk7CisJCW9sZGFzaWQgPSAocmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0spOworCQlpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0pIHsKKwkJICBzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKwkJICBpZihzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gPT0gMCkKKwkJCXNtdGNfZmx1c2hfdGxiX2FzaWQob2xkYXNpZCk7CisJCX0KKwkJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KKwkJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQorCQkJCXwgY3B1X2FzaWQoY3B1LCBtbSkpOworCQllaGIoKTsgLyogTWFrZSBzdXJlIGl0IHByb3BhZ2F0ZXMgdG8gVENTdGF0dXMgKi8KKwkJZXZwZShwcmV2dnBlKTsKKyNlbHNlIC8qIG5vdCBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2FzaWQoY3B1LCBtbSkpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAl9IGVsc2UgewogCQkvKiB3aWxsIGdldCBhIG5ldyBjb250ZXh0IG5leHQgdGltZSAqLworI2lmbmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAJCWNwdV9jb250ZXh0KGNwdSwgbW0pID0gMDsKLQl9CisjZWxzZSAvKiBTTVRDICovCisJCWludCBpOwogCisJCS8qIFNNVEMgc2hhcmVzIHRoZSBUTEIgKGFuZCBBU0lEcykgYWNyb3NzIFZQRXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9vbmxpbmVfY3B1cygpOyBpKyspIHsKKwkgICAgCSAgICBpZigoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpCisJICAgIAkgICAgfHwgKGNwdV9kYXRhW2ldLnZwZV9pZCA9PSBjcHVfZGF0YVtjcHVdLnZwZV9pZCkpCisJCQljcHVfY29udGV4dChpLCBtbSkgPSAwOworCQl9CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbnVtbm9kZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwMGMxNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICi0KLS8qIE1heCAxMjggTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJNgotCi0jZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAppbmRleCBhMWVhYjEzLi40MDM1ZWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtMTM5LDkgKzEzOSwxMSBAQAogCiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKIAorI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKKyNlbmRpZgogCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKaW5kZXggNGQ2YmM0NS4uMDg3YzIwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKQEAgLTE3Nyw0OCArMTc3LDY3IEBACiAJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEwKSB8ICgob2Zmc2V0KSA8PCAxNSkgfSkKIAogLyoKLSAqIEJpdHMgMCwgMSwgMiwgOSBhbmQgMTAgYXJlIHRha2VuLCBzcGxpdCB1cCB0aGUgMjcgYml0cyBvZiBvZmZzZXQKLSAqIGludG8gdGhpcyByYW5nZToKKyAqIEJpdHMgMCwgNCwgOCwgYW5kIDkgYXJlIHRha2VuLCBzcGxpdCB1cCAyOCBiaXRzIG9mIG9mZnNldCBpbnRvIHRoaXMgcmFuZ2U6CiAgKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjcKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjgKIAotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgXAotCSgoKChfcHRlKS5wdGUgPj4gMykgJiAweDNmICkgKyAoKChfcHRlKS5wdGUgPj4gMTEpIDw8IDggKSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpCSgoKChfcHRlKS5wdGUgPj4gMSApICYgMHgwNykgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiAyICkgJiAweDM4KSB8IFwKKwkJCQkgKCgoX3B0ZSkucHRlID4+IDEwKSA8PCAgNiApKQogCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKLQkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDNmKSA8PCAzKSArICgoKG9mZikgPj4gOCkgPDwgMTEpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDA3KSA8PCAxICkgfCBcCisJCQkJCSAgICgoKG9mZikgJiAweDM4KSA8PCAyICkgfCBcCisJCQkJCSAgICgoKG9mZikgPj4gIDYgKSA8PCAxMCkgfCBcCisJCQkJCSAgIF9QQUdFX0ZJTEUgfSkKIAogI2Vsc2UKIAogLyogU3dhcCBlbnRyaWVzIG11c3QgaGF2ZSBWQUxJRCBhbmQgR0xPQkFMIGJpdHMgY2xlYXJlZC4gKi8KLSNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDgpICYgMHgxZikKLSNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiAxMykKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoKHgpLnZhbCA+PiAyKSAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KSAJICgoeCkudmFsID4+IDcpCiAjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KQlcCi0JCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCA4KSB8ICgob2Zmc2V0KSA8PCAxMykgfSkKKwkJKChzd3BfZW50cnlfdCkgIHsgKCh0eXBlKSA8PCAyKSB8ICgob2Zmc2V0KSA8PCA3KSB9KQorI2Vsc2UKKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCgoeCkudmFsID4+IDgpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpIAkgKCh4KS52YWwgPj4gMTMpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KQlcCisJCSgoc3dwX2VudHJ5X3QpICB7ICgodHlwZSkgPDwgOCkgfCAoKG9mZnNldCkgPDwgMTMpIH0pCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQogLyoKLSAqIEJpdHMgMCwgMSwgMiwgNyBhbmQgOCBhcmUgdGFrZW4sIHNwbGl0IHVwIHRoZSAyNyBiaXRzIG9mIG9mZnNldAotICogaW50byB0aGlzIHJhbmdlOgorICogQml0cyAwIGFuZCAxIG9mIHB0ZV9oaWdoIGFyZSB0YWtlbiwgdXNlIHRoZSByZXN0IGZvciB0aGUgcGFnZSBvZmZzZXQuLi4KICAqLwotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyNworI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMAogCi0jaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IxKQotCS8qIGZpeG1lICovCi0jZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKSAoKChfcHRlKS5wdGVfaGlnaCA+PiA2KSArICgoX3B0ZSkucHRlX2hpZ2ggJiAweDNmKSkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgXAotCSgocHRlX3QpeygoKG9mZikgJiAweDNmKSArICgob2ZmKSA8PCA2KSArIF9QQUdFX0ZJTEUpfSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpCSgoX3B0ZSkucHRlX2hpZ2ggPj4gMikKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgCSgocHRlX3QpIHsgX1BBR0VfRklMRSwgKG9mZikgPDwgMiB9KQogCiAjZWxzZQotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgXAotCSgoKChfcHRlKS5wdGUgPj4gMykgJiAweDFmICkgKyAoKChfcHRlKS5wdGUgPj4gOSkgPDwgNiApKQorLyoKKyAqIEJpdHMgMCwgNCwgNiwgYW5kIDcgYXJlIHRha2VuLCBzcGxpdCB1cCAyOCBiaXRzIG9mIG9mZnNldCBpbnRvIHRoaXMgcmFuZ2U6CisgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjgKIAotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCi0JKChwdGVfdCkgeyAoKChvZmYpICYgMHgxZikgPDwgMykgKyAoKChvZmYpID4+IDYpIDw8IDkpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkJKCgoKF9wdGUpLnB0ZSA+PiAxKSAmIDB4NykgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiAyKSAmIDB4OCkgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiA4KSA8PCAgNCkpCisKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKChvZmYpICYgMHg3KSA8PCAxKSB8IFwKKwkJCQkJICAgKCgob2ZmKSAmIDB4OCkgPDwgMikgfCBcCisJCQkJCSAgICgoKG9mZikgPj4gIDQpIDw8IDgpIHwgXAorCQkJCQkgICBfUEFHRV9GSUxFIH0pCiAjZW5kaWYKIAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpICgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlX2hpZ2ggfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgMCwgKHgpLnZhbCB9KQorI2Vsc2UKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQorI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAppbmRleCA4MjE2NmIyLi4yZmFmNWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaApAQCAtMjI0LDE1ICsyMjQsMTIgQEAKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCiAvKgotICogQml0cyAwLCAxLCAyLCA3IGFuZCA4IGFyZSB0YWtlbiwgc3BsaXQgdXAgdGhlIDMyIGJpdHMgb2Ygb2Zmc2V0Ci0gKiBpbnRvIHRoaXMgcmFuZ2U6CisgKiBCaXRzIDAsIDQsIDYsIGFuZCA3IGFyZSB0YWtlbi4gTGV0J3MgbGVhdmUgYml0cyAxLCAyLCAzLCBhbmQgNSBhbG9uZSB0bworICogbWFrZSB0aGluZ3MgZWFzaWVyLCBhbmQgb25seSB1c2UgdGhlIHVwcGVyIDU2IGJpdHMgZm9yIHRoZSBwYWdlIG9mZnNldC4uLgogICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTMyCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTU2CiAKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpIFwKLQkoKCgoX3B0ZSkucHRlID4+IDMpICYgMHgxZiApICsgKCgoX3B0ZSkucHRlID4+IDkpIDw8IDYgKSkKLQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCi0JKChwdGVfdCkgeyAoKChvZmYpICYgMHgxZikgPDwgMykgKyAoKChvZmYpID4+IDYpIDw8IDkpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkJKChfcHRlKS5wdGUgPj4gOCkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKG9mZikgPDwgOCkgfCBfUEFHRV9GSUxFIH0pCiAKICNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAppbmRleCA3MDJhMjhmLi5kMGFmMmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaApAQCAtNzAsNyArNzAsMTUgQEAKICNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSBcCiAJKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UgKyAoKCh1bnNpZ25lZCBsb25nKSh2YWRkcikpICYgemVyb19wYWdlX21hc2spKSkKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9NVUxUSVBMRV9aRVJPX1BBR0UKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEUKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKKyh7CQkJCQkJCQkJXAorIAlwdGVfdCBuZXdwdGUgPSAocHRlKTsJCQkJCQlcCisJaWYgKHB0ZV9wcmVzZW50KHB0ZSkgJiYgcGZuX3ZhbGlkKHB0ZV9wZm4ocHRlKSkgJiYJCVwKKwkJCXB0ZV9wYWdlKHB0ZSkgPT0gWkVST19QQUdFKG9sZF9hZGRyKSkJCVwKKwkJbmV3cHRlID0gbWtfcHRlKFpFUk9fUEFHRShuZXdfYWRkciksIChwcm90KSk7CQlcCisJbmV3cHRlOwkJCQkJCQkJXAorfSkKIAogZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CiAKQEAgLTgyLDEwICs5MCwxMSBAQAogI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3BoeXMocG1kKSA+PiBQQUdFX1NISUZUKSkKICNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkJcG1kX3ZhbChwbWQpCiAKLSNkZWZpbmUgcHRlX25vbmUocHRlKQkJKCEocHRlX3ZhbChwdGUpICYgfl9QQUdFX0dMT0JBTCkpCi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCi0KICNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCisKKyNkZWZpbmUgcHRlX25vbmUocHRlKQkJKCEoKChwdGUpLnB0ZV9sb3cgfCAocHRlKS5wdGVfaGlnaCkgJiB+X1BBR0VfR0xPQkFMKSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1BSRVNFTlQpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiAJcHRlcC0+cHRlX2hpZ2ggPSBwdGUucHRlX2hpZ2g7CkBAIC05MywyNyArMTAyLDM1IEBACiAJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwogCS8vcHJpbnRrKCJwdGVfaGlnaCAleCBwdGVfbG93ICV4XG4iLCBwdGVwLT5wdGVfaGlnaCwgcHRlcC0+cHRlX2xvdyk7CiAKLQlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfR0xPQkFMKSB7CisJaWYgKHB0ZS5wdGVfbG93ICYgX1BBR0VfR0xPQkFMKSB7CiAJCXB0ZV90ICpidWRkeSA9IHB0ZXBfYnVkZHkocHRlcCk7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgYnVkZHkgaXMgZ2xvYmFsIHRvbyAoaWYgaXQncyAhbm9uZSwKIAkJICogaXQgYmV0dGVyIGFscmVhZHkgYmUgZ2xvYmFsKQogCQkgKi8KLQkJaWYgKHB0ZV9ub25lKCpidWRkeSkpCi0JCQlidWRkeS0+cHRlX2xvdyB8PSBfUEFHRV9HTE9CQUw7CisJCWlmIChwdGVfbm9uZSgqYnVkZHkpKSB7CisJCQlidWRkeS0+cHRlX2xvdyAgfD0gX1BBR0VfR0xPQkFMOworCQkJYnVkZHktPnB0ZV9oaWdoIHw9IF9QQUdFX0dMT0JBTDsKKwkJfQogCX0KIH0KICNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogeworCXB0ZV90IG51bGwgPSBfX3B0ZSgwKTsKKwogCS8qIFByZXNlcnZlIGdsb2JhbCBzdGF0dXMgZm9yIHRoZSBwYWlyICovCi0JaWYgKHB0ZV92YWwoKnB0ZXBfYnVkZHkocHRlcCkpICYgX1BBR0VfR0xPQkFMKQotCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9HTE9CQUwpKTsKLQllbHNlCi0JCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKDApKTsKKwlpZiAocHRlcF9idWRkeShwdGVwKS0+cHRlX2xvdyAmIF9QQUdFX0dMT0JBTCkKKwkJbnVsbC5wdGVfbG93ID0gbnVsbC5wdGVfaGlnaCA9IF9QQUdFX0dMT0JBTDsKKworCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIG51bGwpOwogfQogI2Vsc2UKKworI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoIShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfR0xPQkFMKSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKKwogLyoKICAqIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gcHRlJ3MKICAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZwpAQCAtMTc0LDc1ICsxOTEsNzYgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHRlX3VzZXIocHRlX3QgcHRlKQl7IEJVRygpOyByZXR1cm4gMDsgfQogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMl9SMSkKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JFQUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCXsgcmV0dXJuIChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9XUklURTsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX0ZJTEU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlLnB0ZV9sb3cgJiBfUEFHRV9SRUFEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX1dSSVRFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZS5wdGVfbG93ICYgX1BBR0VfRklMRTsgfQorCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSk7Ci0JKHB0ZSkucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9XUklURTsKKwlwdGUucHRlX2xvdyAgJj0gfihfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSk7CisJcHRlLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfV1JJVEU7CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93ICY9IH4oX1BBR0VfUkVBRCB8IF9QQUdFX1NJTEVOVF9SRUFEKTsKLQkocHRlKS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1JFQUQ7CisJcHRlLnB0ZV9sb3cgICY9IH4oX1BBR0VfUkVBRCB8IF9QQUdFX1NJTEVOVF9SRUFEKTsKKwlwdGUucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOwogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9NT0RJRklFRHxfUEFHRV9TSUxFTlRfV1JJVEUpOwotCShwdGUpLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfV1JJVEU7CisJcHRlLnB0ZV9sb3cgICY9IH4oX1BBR0VfTU9ESUZJRUQgfCBfUEFHRV9TSUxFTlRfV1JJVEUpOworCXB0ZS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1dSSVRFOwogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93ICY9IH4oX1BBR0VfQUNDRVNTRUR8X1BBR0VfU0lMRU5UX1JFQUQpOwotCShwdGUpLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfUkVBRDsKKwlwdGUucHRlX2xvdyAgJj0gfihfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NJTEVOVF9SRUFEKTsKKwlwdGUucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOwogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfV1JJVEU7Ci0JaWYgKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9NT0RJRklFRCkgewotCQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX1NJTEVOVF9XUklURTsKLQkJKHB0ZSkucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworCXB0ZS5wdGVfbG93IHw9IF9QQUdFX1dSSVRFOworCWlmIChwdGUucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEKSB7CisJCXB0ZS5wdGVfbG93ICB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisJCXB0ZS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CiAJfQogCXJldHVybiBwdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9SRUFEOwotCWlmICgocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQpIHsKLQkJKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKLQkJKHB0ZSkucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJcHRlLnB0ZV9sb3cgfD0gX1BBR0VfUkVBRDsKKwlpZiAocHRlLnB0ZV9sb3cgJiBfUEFHRV9BQ0NFU1NFRCkgeworCQlwdGUucHRlX2xvdyAgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJCXB0ZS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKIAl9CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9NT0RJRklFRDsKLQlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1dSSVRFKSB7Ci0JCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOwotCQkocHRlKS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisJcHRlLnB0ZV9sb3cgfD0gX1BBR0VfTU9ESUZJRUQ7CisJaWYgKHB0ZS5wdGVfbG93ICYgX1BBR0VfV1JJVEUpIHsKKwkJcHRlLnB0ZV9sb3cgIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwkJcHRlLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKIAl9CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9BQ0NFU1NFRDsKLQlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JFQUQpCi0JCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7Ci0JCShwdGUpLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCXB0ZS5wdGVfbG93IHw9IF9QQUdFX0FDQ0VTU0VEOworCWlmIChwdGUucHRlX2xvdyAmIF9QQUdFX1JFQUQpCisJCXB0ZS5wdGVfbG93ICB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwkJcHRlLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOwogCXJldHVybiBwdGU7CiB9CiAjZWxzZQpAQCAtMzM1LDggKzM1Myw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IxKQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsKLQlwdGUucHRlX2xvdyAmPSBfUEFHRV9DSEdfTUFTSzsKLQlwdGUucHRlX2xvdyB8PSBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXB0ZS5wdGVfbG93ICAmPSBfUEFHRV9DSEdfTUFTSzsKKwlwdGUucHRlX2hpZ2ggJj0gfjB4M2Y7CisJcHRlLnB0ZV9sb3cgIHw9IHBncHJvdF92YWwobmV3cHJvdCk7CiAJcHRlLnB0ZV9oaWdoIHw9IHBncHJvdF92YWwobmV3cHJvdCkgJiAweDNmOwogCXJldHVybiBwdGU7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaAppbmRleCAzOWQyYmQ1Li4wZmI3NWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX0FTTV9QUk9DRVNTT1JfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgpAQCAtMTA3LDYgKzEwOCwxMCBAQAogCiAjZGVmaW5lIElOSVRfRFNQIHt7MCx9LH0KIAorI2RlZmluZSBJTklUX0NQVU1BU0sgeyBcCisJezAsfSBcCit9CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHNlZzsKIH0gbW1fc2VnbWVudF90OwpAQCAtMTI5LDYgKzEzNCwxMiBAQAogCiAJLyogU2F2ZWQgZnB1L2ZwdSBlbXVsYXRvciBzdHVmZi4gKi8KIAl1bmlvbiBtaXBzX2ZwdV91bmlvbiBmcHU7CisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKwkvKiBFbXVsYXRlZCBpbnN0cnVjdGlvbiBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcgZW11bGF0ZWRfZnA7CisJLyogU2F2ZWQgcGVyLXRocmVhZCBzY2hlZHVsZXIgYWZmaW5pdHkgbWFzayAqLworCWNwdW1hc2tfdCB1c2VyX2NwdXNfYWxsb3dlZDsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogCiAJLyogU2F2ZWQgc3RhdGUgb2YgdGhlIERTUCBBU0UsIGlmIGF2YWlsYWJsZS4gKi8KIAlzdHJ1Y3QgbWlwc19kc3Bfc3RhdGUgZHNwOwpAQCAtMTQyLDYgKzE1Myw3IEBACiAjZGVmaW5lIE1GX0xPR0FERQkyCQkvKiBMb2cgYWRkcmVzcyBlcnJvcnMgdG8gc3lzbG9nICovCiAjZGVmaW5lIE1GXzMyQklUX1JFR1MJNAkJLyogYWxzbyBpbXBsaWVzIDE2LzMyIGZwcnMgKi8KICNkZWZpbmUgTUZfMzJCSVRfQUREUgk4CQkvKiAzMi1iaXQgYWRkcmVzcyBzcGFjZSAobzMyL24zMikgKi8KKyNkZWZpbmUgTUZfRlBVQk9VTkQJMHgxMAkJLyogdGhyZWFkIGJvdW5kIHRvIEZQVS1mdWxsIENQVSBzZXQgKi8KIAl1bnNpZ25lZCBsb25nIG1mbGFnczsKIAl1bnNpZ25lZCBsb25nIGlyaXhfdHJhbXBvbGluZTsgIC8qIFdoZWVlLi4uICovCiAJdW5zaWduZWQgbG9uZyBpcml4X29sZGN0eDsKQEAgLTE1Myw2ICsxNjUsMTIgQEAKICNkZWZpbmUgTUZfTjMyCQlNRl8zMkJJVF9BRERSCiAjZGVmaW5lIE1GX042NAkJMAogCisjaWZkZWYgQ09ORklHX01JUFNfTVRfRlBBRkYKKyNkZWZpbmUgRlBBRkZfSU5JVCAwLCBJTklUX0NQVU1BU0ssCisjZWxzZQorI2RlZmluZSBGUEFGRl9JTklUCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKwogI2RlZmluZSBJTklUX1RIUkVBRCAgeyBcCiAgICAgICAgIC8qIFwKICAgICAgICAgICogc2F2ZWQgbWFpbiBwcm9jZXNzb3IgcmVnaXN0ZXJzIFwKQEAgLTE2OCw2ICsxODYsMTAgQEAKIAkgKi8gXAogCUlOSVRfRlBVLCBcCiAJLyogXAorCSAqIGZwdSBhZmZpbml0eSBzdGF0ZSAobnVsbCBpZiBub3QgRlBBRkYpIFwKKwkgKi8gXAorCUZQQUZGX0lOSVQgXAorCS8qIFwKIAkgKiBzYXZlZCBkc3AvZHNwIGVtdWxhdG9yIHN0dWZmIFwKIAkgKi8gXAogCUlOSVRfRFNQLCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaAppbmRleCA5NWM1ODM5Li5mYTlkODcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKQEAgLTQ1LDYgKzQ1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBjcDBfYmFkdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBjcDBfY2F1c2U7CiAJdW5zaWduZWQgbG9uZyBjcDBfZXBjOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwl1bnNpZ25lZCBsb25nIGNwMF90Y3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIHNtdGNfcGFkOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIH07CiAKIC8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oCmluZGV4IDkwYzM3NDcuLjNjOGUzYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcjRrY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3I0a2NhY2hlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlb3BzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CiAKIC8qCiAgKiBUaGlzIG1hY3JvIHJldHVybiBhIHByb3Blcmx5IHNpZ24tZXh0ZW5kZWQgYWRkcmVzcyBzdWl0YWJsZSBhcyBiYXNlIGFkZHJlc3MKQEAgLTM3LDE2ICszOCwxMjAgQEAKIAkiCWNhY2hlCSUwLCAlMQkJCQkJXG4iCVwKIAkiCS5zZXQJcG9wCQkJCQlcbiIJXAogCToJCQkJCQkJCVwKLQk6ICJpIiAob3ApLCAibSIgKCoodW5zaWduZWQgY2hhciAqKShhZGRyKSkpCisJOiAiaSIgKG9wKSwgIlIiICgqKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpKQorCisjaWZkZWYgQ09ORklHX01JUFNfTVQKKy8qCisgKiBUZW1wb3JhcnkgaGFja3MgZm9yIFNNVEMgZGVidWcuIE9wdGlvbmFsbHkgZm9yY2Ugc2luZ2xlLXRocmVhZGVkCisgKiBleGVjdXRpb24gZHVyaW5nIEktY2FjaGUgZmx1c2hlcy4KKyAqLworCisjZGVmaW5lIFBST1RFQ1RfQ0FDSEVfRkxVU0hFUyAxCisKKyNpZmRlZiBQUk9URUNUX0NBQ0hFX0ZMVVNIRVMKKworZXh0ZXJuIGludCBtdF9wcm90aWZsdXNoOworZXh0ZXJuIGludCBtdF9wcm90ZGZsdXNoOworZXh0ZXJuIHZvaWQgbXRfY2ZsdXNoX2xvY2tkb3duKHZvaWQpOworZXh0ZXJuIHZvaWQgbXRfY2ZsdXNoX3JlbGVhc2Uodm9pZCk7CisKKyNkZWZpbmUgQkVHSU5fTVRfSVBST1QgXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwkJCVwKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3MgPSAwOwkJCVwKKwlpZihtdF9wcm90aWZsdXNoKSB7CQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCVwKKwkJZWhiKCk7CQkJCQlcCisJCW10ZmxhZ3MgPSBkdnBlKCk7CQkJXAorCQltdF9jZmx1c2hfbG9ja2Rvd24oKTsJCQlcCisJfQorCisjZGVmaW5lIEVORF9NVF9JUFJPVCBcCisJaWYobXRfcHJvdGlmbHVzaCkgewkJCQlcCisJCW10X2NmbHVzaF9yZWxlYXNlKCk7CQkJXAorCQlldnBlKG10ZmxhZ3MpOwkJCQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCVwKKwl9CisKKyNkZWZpbmUgQkVHSU5fTVRfRFBST1QgXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwkJCVwKKwl1bnNpZ25lZCBsb25nIG10ZmxhZ3MgPSAwOwkJCVwKKwlpZihtdF9wcm90ZGZsdXNoKSB7CQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCVwKKwkJZWhiKCk7CQkJCQlcCisJCW10ZmxhZ3MgPSBkdnBlKCk7CQkJXAorCQltdF9jZmx1c2hfbG9ja2Rvd24oKTsJCQlcCisJfQorCisjZGVmaW5lIEVORF9NVF9EUFJPVCBcCisJaWYobXRfcHJvdGRmbHVzaCkgewkJCQlcCisJCW10X2NmbHVzaF9yZWxlYXNlKCk7CQkJXAorCQlldnBlKG10ZmxhZ3MpOwkJCQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCVwKKwl9CisKKyNlbHNlCisKKyNkZWZpbmUgQkVHSU5fTVRfSVBST1QKKyNkZWZpbmUgQkVHSU5fTVRfRFBST1QKKyNkZWZpbmUgRU5EX01UX0lQUk9UCisjZGVmaW5lIEVORF9NVF9EUFJPVAorCisjZW5kaWYgLyogUFJPVEVDVF9DQUNIRV9GTFVTSEVTICovCisKKyNkZWZpbmUgX19pZmx1c2hfcHJvbG9ndWUJCQkJCQlcCisJdW5zaWduZWQgbG9uZyByZWR1bmRhbmNlOwkJCQkJXAorCWV4dGVybiBpbnQgbXRfbl9pZmx1c2hlczsJCQkJCVwKKwlCRUdJTl9NVF9JUFJPVAkJCQkJCQlcCisJZm9yIChyZWR1bmRhbmNlID0gMDsgcmVkdW5kYW5jZSA8IG10X25faWZsdXNoZXM7IHJlZHVuZGFuY2UrKykgeworCisjZGVmaW5lIF9faWZsdXNoX2VwaWxvZ3VlCQkJCQkJXAorCUVORF9NVF9JUFJPVAkJCQkJCQlcCisJfQorCisjZGVmaW5lIF9fZGZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgcmVkdW5kYW5jZTsJCQkJCVwKKwlleHRlcm4gaW50IG10X25fZGZsdXNoZXM7CQkJCQlcCisJQkVHSU5fTVRfRFBST1QJCQkJCQkJXAorCWZvciAocmVkdW5kYW5jZSA9IDA7IHJlZHVuZGFuY2UgPCBtdF9uX2RmbHVzaGVzOyByZWR1bmRhbmNlKyspIHsKKworI2RlZmluZSBfX2RmbHVzaF9lcGlsb2d1ZSBcCisJRU5EX01UX0RQUk9UCSBcCisJfQorCisjZGVmaW5lIF9faW52X2RmbHVzaF9wcm9sb2d1ZSBfX2RmbHVzaF9wcm9sb2d1ZQorI2RlZmluZSBfX2ludl9kZmx1c2hfZXBpbG9ndWUgX19kZmx1c2hfZXBpbG9ndWUKKyNkZWZpbmUgX19zZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX3NmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9faW52X3NmbHVzaF9wcm9sb2d1ZSBfX3NmbHVzaF9wcm9sb2d1ZQorI2RlZmluZSBfX2ludl9zZmx1c2hfZXBpbG9ndWUgX19zZmx1c2hfZXBpbG9ndWUKKworI2Vsc2UgLyogQ09ORklHX01JUFNfTVQgKi8KKworI2RlZmluZSBfX2lmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9faWZsdXNoX2VwaWxvZ3VlIH0KKyNkZWZpbmUgX19kZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX2RmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9faW52X2RmbHVzaF9wcm9sb2d1ZSB7CisjZGVmaW5lIF9faW52X2RmbHVzaF9lcGlsb2d1ZSB9CisjZGVmaW5lIF9fc2ZsdXNoX3Byb2xvZ3VlIHsKKyNkZWZpbmUgX19zZmx1c2hfZXBpbG9ndWUgfQorI2RlZmluZSBfX2ludl9zZmx1c2hfcHJvbG9ndWUgeworI2RlZmluZSBfX2ludl9zZmx1c2hfZXBpbG9ndWUgfQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVQgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9saW5lX2luZGV4ZWQodW5zaWduZWQgbG9uZyBhZGRyKQogeworCV9faWZsdXNoX3Byb2xvZ3VlCiAJY2FjaGVfb3AoSW5kZXhfSW52YWxpZGF0ZV9JLCBhZGRyKTsKKwlfX2lmbHVzaF9lcGlsb2d1ZQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX2xpbmVfaW5kZXhlZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19kZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChJbmRleF9Xcml0ZWJhY2tfSW52X0QsIGFkZHIpOworCV9fZGZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9zY2FjaGVfbGluZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTU2LDE3ICsxNjEsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlfX2lmbHVzaF9wcm9sb2d1ZQogCWNhY2hlX29wKEhpdF9JbnZhbGlkYXRlX0ksIGFkZHIpOworCV9faWZsdXNoX2VwaWxvZ3VlCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19kZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9ELCBhZGRyKTsKKwlfX2RmbHVzaF9lcGlsb2d1ZQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CisJX19kZmx1c2hfcHJvbG9ndWUKIAljYWNoZV9vcChIaXRfSW52YWxpZGF0ZV9ELCBhZGRyKTsKKwlfX2RmbHVzaF9lcGlsb2d1ZQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9zY2FjaGVfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0yMzksOSArMzUwLDEzIEBACiAJICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2NwdV9kYXRhLmRlc2Mud2F5Yml0OwkJXAogCXVuc2lnbmVkIGxvbmcgd3MsIGFkZHI7CQkJCQkJXAogCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCQkJCQkJCQkJXAogCWZvciAod3MgPSAwOyB3cyA8IHdzX2VuZDsgd3MgKz0gd3NfaW5jKQkJCQlcCiAJCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGxzaXplICogMzIpCVwKIAkJCWNhY2hlIyNsc2l6ZSMjX3Vucm9sbDMyKGFkZHJ8d3MsaW5kZXhvcCk7CVwKKwkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9lcGlsb2d1ZQkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxhc3RfIyNwZngjI2NhY2hlIyNsc2l6ZSMjX3BhZ2UodW5zaWduZWQgbG9uZyBwYWdlKQlcCkBAIC0yNDksMTAgKzM2NCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlOwkJCQkJXAogCXVuc2lnbmVkIGxvbmcgZW5kID0gcGFnZSArIFBBR0VfU0laRTsJCQkJXAogCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX3Byb2xvZ3VlCQkJCQkJXAorCQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJY2FjaGUjI2xzaXplIyNfdW5yb2xsMzIoc3RhcnQsaGl0b3ApOwkJCVwKIAkJc3RhcnQgKz0gbHNpemUgKiAzMjsJCQkJCVwKIAl9IHdoaWxlIChzdGFydCA8IGVuZCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fIyNwZngjI2ZsdXNoX2VwaWxvZ3VlCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF8jI3BmeCMjY2FjaGUjI2xzaXplIyNfcGFnZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgcGFnZSkgXApAQCAtMjY1LDkgKzM4NCwxMyBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9jcHVfZGF0YS5kZXNjLndheWJpdDsJCVwKIAl1bnNpZ25lZCBsb25nIHdzLCBhZGRyOwkJCQkJCVwKIAkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9wcm9sb2d1ZQkJCQkJCVwKKwkJCQkJCQkJCVwKIAlmb3IgKHdzID0gMDsgd3MgPCB3c19lbmQ7IHdzICs9IHdzX2luYykJCQkJXAogCQlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBsc2l6ZSAqIDMyKQlcCiAJCQljYWNoZSMjbHNpemUjI191bnJvbGwzMihhZGRyfHdzLGluZGV4b3ApOwlcCisJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfZXBpbG9ndWUJCQkJCQlcCiB9CiAKIF9fQlVJTERfQkxBU1RfQ0FDSEUoZCwgZGNhY2hlLCBJbmRleF9Xcml0ZWJhY2tfSW52X0QsIEhpdF9Xcml0ZWJhY2tfSW52X0QsIDE2KQpAQCAtMjg4LDEyICs0MTEsMTcgQEAKIAl1bnNpZ25lZCBsb25nIGxzaXplID0gY3B1XyMjZGVzYyMjX2xpbmVfc2l6ZSgpOwkJCVwKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCAmIH4obHNpemUgLSAxKTsJCQlcCiAJdW5zaWduZWQgbG9uZyBhZW5kID0gKGVuZCAtIDEpICYgfihsc2l6ZSAtIDEpOwkJCVwKKwkJCQkJCQkJCVwKKwlfXyMjcGZ4IyNmbHVzaF9wcm9sb2d1ZQkJCQkJCVwKKwkJCQkJCQkJCVwKIAl3aGlsZSAoMSkgewkJCQkJCQlcCiAJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyKTsJCQkJXAogCQlpZiAoYWRkciA9PSBhZW5kKQkJCQkJXAogCQkJYnJlYWs7CQkJCQkJXAogCQlhZGRyICs9IGxzaXplOwkJCQkJCVwKIAl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJX18jI3BmeCMjZmx1c2hfZXBpbG9ndWUJCQkJCQlcCiB9CiAKIF9fQlVJTERfQkxBU1RfQ0FDSEVfUkFOR0UoZCwgZGNhY2hlLCBIaXRfV3JpdGViYWNrX0ludl9ELCBwcm90ZWN0ZWRfKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcnRjLmgKaW5kZXggYTJhYmM0NS4uODJhZDQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3J0Yy5oCkBAIC0zMiw3ICszMiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBub3d0aW1lOwogCi0Jbm93dGltZSA9IHJ0Y19nZXRfdGltZSgpOworCW5vd3RpbWUgPSBydGNfbWlwc19nZXRfdGltZSgpOwogCXRvX3RtKG5vd3RpbWUsIHRpbWUpOwogCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKIApAQCAtNDcsNyArNDcsNyBAQAogCW5vd3RpbWUgPSBta3RpbWUodGltZS0+dG1feWVhcisxOTAwLCB0aW1lLT50bV9tb24rMSwKIAkJCXRpbWUtPnRtX21kYXksIHRpbWUtPnRtX2hvdXIsIHRpbWUtPnRtX21pbiwKIAkJCXRpbWUtPnRtX3NlYyk7Ci0JcmV0ID0gcnRjX3NldF90aW1lKG5vd3RpbWUpOworCXJldCA9IHJ0Y19taXBzX3NldF90aW1lKG5vd3RpbWUpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcnRseC5oIGIvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmgKaW5kZXggMTI5OGMzZi4uNzZjZDUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ydGx4LmgKQEAgLTMsMzIgKzMsNDYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBfUlRMWF9ICi0jZGVmaW5lIF9SVExYX0hfCisjaWZuZGVmIF9fQVNNX1JUTFhfSAorI2RlZmluZSBfX0FTTV9SVExYX0hfCiAKICNkZWZpbmUgTFhfTk9ERV9CQVNFIDEwCiAKICNkZWZpbmUgTUlQU0NQVV9JTlRfQkFTRSAgICAgICAxNgogI2RlZmluZSBNSVBTX0NQVV9SVExYX0lSUSAwCiAKLSNkZWZpbmUgUlRMWF9WRVJTSU9OIDEKKyNkZWZpbmUgUlRMWF9WRVJTSU9OIDIKICNkZWZpbmUgUlRMWF94SUQgMHgxMjM0NTYwMAogI2RlZmluZSBSVExYX0lEIChSVExYX3hJRCB8IFJUTFhfVkVSU0lPTikKICNkZWZpbmUgUlRMWF9DSEFOTkVMUyA4CiAKLSNkZWZpbmUgUlRMWF9CVUZGRVJfU0laRSAxMDI0CisjZGVmaW5lIFJUTFhfQ0hBTk5FTF9TVERJTwkwCisjZGVmaW5lIFJUTFhfQ0hBTk5FTF9EQkcJMQorI2RlZmluZSBSVExYX0NIQU5ORUxfU1lTSU8JMgogCi0vKgotICogbHhfc3RhdGUgYml0cwotICovCi0jZGVmaW5lIFJUTFhfU1RBVEVfT1BFTkVEIDFVTAorZXh0ZXJuIGludCBydGx4X29wZW4oaW50IGluZGV4LCBpbnQgY2FuX3NsZWVwKTsKK2V4dGVybiBpbnQgcnRseF9yZWxlYXNlKGludCBpbmRleCk7CitleHRlcm4gc3NpemVfdCBydGx4X3JlYWQoaW50IGluZGV4LCB2b2lkICpidWZmLCBzaXplX3QgY291bnQsIGludCB1c2VyKTsKK2V4dGVybiBzc2l6ZV90IHJ0bHhfd3JpdGUoaW50IGluZGV4LCB2b2lkICpidWZmZXIsIHNpemVfdCBjb3VudCwgaW50IHVzZXIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBydGx4X3JlYWRfcG9sbChpbnQgaW5kZXgsIGludCBjYW5fc2xlZXApOworZXh0ZXJuIHVuc2lnbmVkIGludCBydGx4X3dyaXRlX3BvbGwoaW50IGluZGV4KTsKKworZW51bSBydGx4X3N0YXRlIHsKKwlSVExYX1NUQVRFX1VOVVNFRCwKKwlSVExYX1NUQVRFX0lOSVRJQUxJU0VELAorCVJUTFhfU1RBVEVfUkVNT1RFX1JFQURZLAorCVJUTFhfU1RBVEVfT1BFTkVECit9OworCisjZGVmaW5lIFJUTFhfQlVGRkVSX1NJWkUgMTAyNAogCiAvKiBlYWNoIGNoYW5uZWwgc3VwcG9ydHMgcmVhZCBhbmQgd3JpdGUuCiAgICBsaW51eCAodnBlMCkgcmVhZHMgbHhfYnVmZmVyICBhbmQgd3JpdGVzIHJ0X2J1ZmZlcgogICAgU1AgKHZwZTEpIHJlYWRzIHJ0X2J1ZmZlciBhbmQgd3JpdGVzIGx4X2J1ZmZlcgogKi8KIHN0cnVjdCBydGx4X2NoYW5uZWwgewotCXVuc2lnbmVkIGxvbmcgbHhfc3RhdGU7CisJZW51bSBydGx4X3N0YXRlIHJ0X3N0YXRlOworCWVudW0gcnRseF9zdGF0ZSBseF9zdGF0ZTsKIAogCWludCBidWZmZXJfc2l6ZTsKIApAQCAtMzgsMTUgKzUyLDEzIEBACiAKIAlpbnQgbHhfd3JpdGUsIGx4X3JlYWQ7CiAJY2hhciAqbHhfYnVmZmVyOwotCi0Jdm9pZCAqcXVldWVzOwotCiB9OwogCiBzdHJ1Y3QgcnRseF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIGlkOworCWVudW0gcnRseF9zdGF0ZSBzdGF0ZTsKIAogCXN0cnVjdCBydGx4X2NoYW5uZWwgY2hhbm5lbFtSVExYX0NIQU5ORUxTXTsKIH07CiAKLSNlbmRpZiAvKiBfUlRMWF9IXyAqLworI2VuZGlmIC8qIF9fQVNNX1JUTFhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCmluZGV4IDdiMjM2NjQuLjcxOTZjZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaApAQCAtNzcsMTUgKzc3LDE1IEBACiAjaW5jbHVkZSA8YXNtL2l0ODcxMi5oPgogI2RlZmluZSBJVEVfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgLmJhdWRfYmFzZSA9IEJBU0VfQkFVRCwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfVUFSVF9CQVNFKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9VQVJUX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwgXAorICAgICAgLmlycSA9IElUODE3Ml9VQVJUX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sIFwKICAgICB7IC5iYXVkX2Jhc2UgPSAoMjQwMDAwMDAvKDE2KjEzKSksIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUODcxMl9VQVJUMV9QT1JUKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9TRVJJUlFfNCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnR5cGUgPSAweDMgfSwgXAorICAgICAgLmlycSA9IElUODE3Ml9TRVJJUlFfNCwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sIFwKICAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAwICovIFwKICAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjBfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sIFwKKyAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCBcCiAgICAgLyogU21hcnQgQ2FyZCBSZWFkZXIgMSAqLyBcCiAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IxX0JBU0UpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1NDUjFfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LAorICAgICAgLmlycSA9IElUODE3Ml9TQ1IxX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sCiAjZWxzZQogI2RlZmluZSBJVEVfU0VSSUFMX1BPUlRfREVGTlMKICNlbmRpZgpAQCAtOTUsMTAgKzk1LDEwIEBACiAjaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfaW50Lmg+CiAjZGVmaW5lIElWUl9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9VQVJUX0JBU0UpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1VBUlRfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAudHlwZSA9IDB4MyB9LCAgICAgICAgIFwKKyAgICAgIC5pcnEgPSBJVDgxNzJfVUFSVF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCAgICAgICAgIFwKICAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAxICovIFwKICAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjFfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMV9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC50eXBlID0gMHgzIH0sCisgICAgICAuaXJxID0gSVQ4MTcyX1NDUjFfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAucG9ydCA9IFBPUlRfMTY1NTAgfSwKICNlbHNlCiAjZGVmaW5lIElWUl9TRVJJQUxfUE9SVF9ERUZOUwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCmluZGV4IDhlZGFiYjAuLmNlZmE2NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oCkBAIC01NSw4ICs1NSwxNCBAQAogc3RydWN0IHNpZ2NvbnRleHQgewogCXVuc2lnbmVkIGxvbmcJc2NfcmVnc1szMl07CiAJdW5zaWduZWQgbG9uZwlzY19mcHJlZ3NbMzJdOwotCXVuc2lnbmVkIGxvbmcJc2NfaGlbNF07Ci0JdW5zaWduZWQgbG9uZwlzY19sb1s0XTsKKwl1bnNpZ25lZCBsb25nCXNjX21kaGk7CisJdW5zaWduZWQgbG9uZwlzY19oaTE7CisJdW5zaWduZWQgbG9uZwlzY19oaTI7CisJdW5zaWduZWQgbG9uZwlzY19oaTM7CisJdW5zaWduZWQgbG9uZwlzY19tZGxvOworCXVuc2lnbmVkIGxvbmcJc2NfbG8xOworCXVuc2lnbmVkIGxvbmcJc2NfbG8yOworCXVuc2lnbmVkIGxvbmcJc2NfbG8zOwogCXVuc2lnbmVkIGxvbmcJc2NfcGM7CiAJdW5zaWduZWQgaW50CXNjX2ZwY19jc3I7CiAJdW5zaWduZWQgaW50CXNjX3VzZWRfbWF0aDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCmluZGV4IDc1YzZmZTdjLi5lMTRlNGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKQEAgLTQ4LDcgKzQ4LDYgQEAKICNkZWZpbmUgU01QX0NBTExfRlVOQ1RJT04JMHgyCiAKIGV4dGVybiBjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwogI2RlZmluZSBjcHVfcG9zc2libGVfbWFwCXBoeXNfY3B1X3ByZXNlbnRfbWFwCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwpAQCAtODYsOSArODUsOSBAQAogZXh0ZXJuIHZvaWQgcGxhdF9zbXBfc2V0dXAodm9pZCk7CiAKIC8qCi0gKiBDYWxsZWQgYWZ0ZXIgaW5pdF9JUlEgYnV0IGJlZm9yZSBfX2NwdV91cC4KKyAqIENhbGxlZCBpbiBzbXBfcHJlcGFyZV9jcHVzLgogICovCi1leHRlcm4gdm9pZCBwcm9tX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOworZXh0ZXJuIHZvaWQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIAogLyoKICAqIExhc3QgY2hhbmNlIGZvciB0aGUgYm9hcmQgY29kZSB0byBmaW5pc2ggU01QIGluaXRpYWxpemF0aW9uIGJlZm9yZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbXRjLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtdGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk0MWQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXRjLmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfQVNNX1NNVENfTVRfSAorI2RlZmluZSBfQVNNX1NNVENfTVRfSAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIFNNVEMgbXVsdGl0YXNraW5nIG9uIE1JUFMgTVQgY29yZXMKKyAqLworCisjaW5jbHVkZSA8YXNtL21pcHNfbXQuaD4KKworLyoKKyAqIFN5c3RlbS13aWRlIFNNVEMgc3RhdHVzIGluZm9ybWF0aW9uCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBzbXRjX3N0YXR1czsKKworI2RlZmluZSBTTVRDX1RMQl9TSEFSRUQJMHgwMDAwMDAwMQorI2RlZmluZSBTTVRDX01UQ19BQ1RJVkUJMHgwMDAwMDAwMgorCisvKgorICogVExCL0FTSUQgTWFuYWdlbWVudCBpbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgTUFYX1NNVENfVExCUyAyCisjZGVmaW5lIE1BWF9TTVRDX0FTSURTIDI1NgorI2lmIE5SX0NQVVMgPD0gOAordHlwZWRlZiBjaGFyIGFzaWR1c2U7CisjZWxzZQorI2lmIE5SX0NQVVMgPD0gMTYKK3R5cGVkZWYgc2hvcnQgYXNpZHVzZTsKKyNlbHNlCit0eXBlZGVmIGxvbmcgYXNpZHVzZTsKKyNlbmRpZgorI2VuZGlmCisKK2V4dGVybiBhc2lkdXNlIHNtdGNfbGl2ZV9hc2lkW01BWF9TTVRDX1RMQlNdW01BWF9TTVRDX0FTSURTXTsKKwordm9pZCBzbXRjX2dldF9uZXdfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgY3B1KTsKKwordm9pZCBzbXRjX2ZsdXNoX3RsYl9hc2lkKHVuc2lnbmVkIGxvbmcgYXNpZCk7CitleHRlcm4gaW50IG1pcHNtdF9idWlsZF9jcHVfbWFwKGludCBzdGFydHNsb3QpOworZXh0ZXJuIHZvaWQgbWlwc210X3ByZXBhcmVfY3B1cyh2b2lkKTsKK2V4dGVybiB2b2lkIHNtdGNfc21wX2ZpbmlzaCh2b2lkKTsKK2V4dGVybiB2b2lkIHNtdGNfYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKKworLyoKKyAqIFNoYXJpbmcgdGhlIFRMQiBiZXR3ZWVuIG11bHRpcGxlIFZQRXMgbWVhbnMgdGhhdCB0aGUKKyAqICJyYW5kb20iIGluZGV4IHNlbGVjdGlvbiBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0bworICogc2VsZWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBJbmRleCByZWdpc3Rlci4gVG8KKyAqIGF2b2lkIGFkZGl0aW9uYWwgVExCIHByZXNzdXJlLCB0aGUgSW5kZXggcmVnaXN0ZXJzCisgKiBhcmUgInBhcmtlZCIgd2l0aCBhbiBub24tVmFsaWQgdmFsdWUuCisgKi8KKworI2RlZmluZSBQQVJLRURfSU5ERVgJKCh1bnNpZ25lZCBpbnQpMHg4MDAwMDAwMCkKKworI2VuZGlmIC8qICBfQVNNX1NNVENfTVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbXRjX2lwaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbXRjX2lwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmMzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NtdGNfaXBpLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBEZWZpbml0aW9ucyB1c2VkIGluIE1JUFMgTVQgU01UQyAiSW50ZXJwcm9jZXNzb3IgSW50ZXJydXB0IiBjb2RlLgorICovCisjaWZuZGVmIF9fQVNNX1NNVENfSVBJX0gKKyNkZWZpbmUgX19BU01fU01UQ19JUElfSAorCisvLyNkZWZpbmUgU01UQ19JUElfREVCVUcKKworI2lmZGVmIFNNVENfSVBJX0RFQlVHCisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNlbmRpZiAvKiBTTVRDX0lQSV9ERUJVRyAqLworCisvKgorICogQW4gSVBJICJtZXNzYWdlIgorICovCisKK3N0cnVjdCBzbXRjX2lwaSB7CisJc3RydWN0IHNtdGNfaXBpICpmbGluazsKKwlpbnQgdHlwZTsKKwl2b2lkICphcmc7CisJaW50IGRlc3Q7CisjaWZkZWYJU01UQ19JUElfREVCVUcKKwlpbnQgc2VuZGVyOworCWxvbmcgc3RhbXA7CisjZW5kaWYgLyogU01UQ19JUElfREVCVUcgKi8KK307CisKKy8qCisgKiBEZWZpbmVkIElQSSBUeXBlcworICovCisKKyNkZWZpbmUgTElOVVhfU01QX0lQSSAxCisjZGVmaW5lIFNNVENfQ0xPQ0tfVElDSyAyCisKKy8qCisgKiBBIHF1ZXVlIG9mIElQSSBtZXNzYWdlcworICovCisKK3N0cnVjdCBzbXRjX2lwaV9xIHsKKwlzdHJ1Y3Qgc210Y19pcGkgKmhlYWQ7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBzbXRjX2lwaSAqdGFpbDsKKwlpbnQgZGVwdGg7Cit9OworCitleHRlcm4gc3RydWN0IHNtdGNfaXBpX3EgSVBJUVtOUl9DUFVTXTsKK2V4dGVybiBzdHJ1Y3Qgc210Y19pcGlfcSBmcmVlSVBJcTsKKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfaXBpX25xKHN0cnVjdCBzbXRjX2lwaV9xICpxLCBzdHJ1Y3Qgc210Y19pcGkgKnApCit7CisJbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJaWYgKHEtPmhlYWQgPT0gTlVMTCkKKwkJcS0+aGVhZCA9IHEtPnRhaWwgPSBwOworCWVsc2UKKwkJcS0+dGFpbC0+ZmxpbmsgPSBwOworCXAtPmZsaW5rID0gTlVMTDsKKwlxLT50YWlsID0gcDsKKwlxLT5kZXB0aCsrOworI2lmZGVmCVNNVENfSVBJX0RFQlVHCisJcC0+c2VuZGVyID0gcmVhZF9jMF90Y2JpbmQoKTsKKwlwLT5zdGFtcCA9IHJlYWRfYzBfY291bnQoKTsKKyNlbmRpZiAvKiBTTVRDX0lQSV9ERUJVRyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc210Y19pcGkgKnNtdGNfaXBpX2RxKHN0cnVjdCBzbXRjX2lwaV9xICpxKQoreworCXN0cnVjdCBzbXRjX2lwaSAqcDsKKwlsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocS0+aGVhZCA9PSBOVUxMKQorCQlwID0gTlVMTDsKKwllbHNlIHsKKwkJcCA9IHEtPmhlYWQ7CisJCXEtPmhlYWQgPSBxLT5oZWFkLT5mbGluazsKKwkJcS0+ZGVwdGgtLTsKKwkJLyogQXJndWFibHkgdW5uZWNlc3NhcnksIGJ1dCBsZWF2ZXMgcXVldWUgY2xlYW5lciAqLworCQlpZiAocS0+aGVhZCA9PSBOVUxMKQorCQkJcS0+dGFpbCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfaXBpX3JlcShzdHJ1Y3Qgc210Y19pcGlfcSAqcSwgc3RydWN0IHNtdGNfaXBpICpwKQoreworCWxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCWlmIChxLT5oZWFkID09IE5VTEwpIHsKKwkJcS0+aGVhZCA9IHEtPnRhaWwgPSBwOworCQlwLT5mbGluayA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcC0+ZmxpbmsgPSBxLT5oZWFkOworCQlxLT5oZWFkID0gcDsKKwl9CisJcS0+ZGVwdGgrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNtdGNfaXBpX3FkZXB0aChzdHJ1Y3Qgc210Y19pcGlfcSAqcSkKK3sKKwlsb25nIGZsYWdzOworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCXJldHZhbCA9IHEtPmRlcHRoOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitleHRlcm4gdm9pZCBzbXRjX3NlbmRfaXBpKGludCBjcHUsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgYWN0aW9uKTsKKworI2VuZGlmIC8qIF9fQVNNX1NNVENfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc210Y19wcm9jLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtdGNfcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZGE2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NtdGNfcHJvYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgU01UQyAvcHJvYyBlbnRyaWVzCisgKiBDb3B5cmlnaHQoQykgMjAwNSBNSVBTIFRlY2hub2xvZ2llcyBJbmMuCisgKi8KKyNpZm5kZWYgX19BU01fU01UQ19QUk9DX0gKKyNkZWZpbmUgX19BU01fU01UQ19QUk9DX0gKKworLyoKKyAqIHBlci0iQ1BVIiBzdGF0aXN0aWNzCisgKi8KKworc3RydWN0IHNtdGNfY3B1X3Byb2MgeworCXVuc2lnbmVkIGxvbmcgdGltZXJpbnRzOworCXVuc2lnbmVkIGxvbmcgc2VsZmlwaXM7Cit9OworCitleHRlcm4gc3RydWN0IHNtdGNfY3B1X3Byb2Mgc210Y19jcHVfc3RhdHNbTlJfQ1BVU107CisKKy8qIENvdW50IG9mIG51bWJlciBvZiByZWNvdmVyaWVzIG9mICJzdG9sZW4iIEZQVSBhY2Nlc3MgcmlnaHRzIG9uIDM0SyAqLworCitleHRlcm4gYXRvbWljX3Qgc210Y19mcHVfcmVjb3ZlcmllczsKKworI2VuZGlmIC8qIF9fQVNNX1NNVENfUFJPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NwYXJzZW1lbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zcGFyc2VtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVhYzZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zcGFyc2VtZW0uaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9NSVBTX1NQQVJTRU1FTV9ICisjZGVmaW5lIF9NSVBTX1NQQVJTRU1FTV9ICisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCisvKgorICogU0VDVElPTl9TSVpFX0JJVFMJCTJeTjogaG93IGJpZyBlYWNoIHNlY3Rpb24gd2lsbCBiZQorICogTUFYX1BIWVNNRU1fQklUUwkJMl5OOiBob3cgbXVjaCBtZW1vcnkgd2UgY2FuIGhhdmUgaW4gdGhhdCBzcGFjZQorICovCisjZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTICAgICAgIDI4CisjZGVmaW5lIE1BWF9QSFlTTUVNX0JJVFMgICAgICAgIDM1CisKKyNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCisjZW5kaWYgLyogX01JUFNfU1BBUlNFTUVNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmggYi9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaAppbmRleCAyYWNmM2U4Li5jNDg1NmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaApAQCAtMTQsOSArMTQsMTQgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisKIAkJLm1hY3JvCVNBVkVfQVQKIAkJLnNldAlwdXNoCiAJCS5zZXQJbm9hdApAQCAtNTcsMTMgKzYyLDMwIEBACiAjaWZkZWYgQ09ORklHX1NNUAogCQkubWFjcm8JZ2V0X3NhdmVkX3NwCS8qIFNNUCB2YXJpYXRpb24gKi8KICNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCS5zZXQJbWlwczMyCisJCW1mYzAJazAsIENQMF9UQ0JJTkQ7CisJCS5zZXQJbWlwczAKKwkJbHVpCWsxLCAlaGkoa2VybmVsc3ApCisJCXNybAlrMCwgazAsIDE5CisJCS8qIE5vIG5lZWQgdG8gc2hpZnQgZG93biBhbmQgdXAgdG8gY2xlYXIgYml0cyAwLTEgKi8KKyNlbHNlCiAJCW1mYzAJazAsIENQMF9DT05URVhUCiAJCWx1aQlrMSwgJWhpKGtlcm5lbHNwKQogCQlzcmwJazAsIGswLCAyMworI2VuZGlmCiAJCWFkZHUJazEsIGswCiAJCUxPTkdfTAlrMSwgJWxvKGtlcm5lbHNwKShrMSkKICNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJLnNldAltaXBzNjQKKwkJbWZjMAlrMCwgQ1AwX1RDQklORDsKKwkJLnNldAltaXBzMAorCQlsdWkJazAsICVoaWdoZXN0KGtlcm5lbHNwKQorCQlkc3JsCWsxLCAxOQorCQkvKiBObyBuZWVkIHRvIHNoaWZ0IGRvd24gYW5kIHVwIHRvIGNsZWFyIGJpdHMgMC0yICovCisjZWxzZQogCQlNRkMwCWsxLCBDUDBfQ09OVEVYVAogCQlsdWkJazAsICVoaWdoZXN0KGtlcm5lbHNwKQogCQlkc3JsCWsxLCAyMwpAQCAtNzEsMjAgKzkzLDMxIEBACiAJCWRzbGwJazAsIGswLCAxNgogCQlkYWRkaXUJazAsICVoaShrZXJuZWxzcCkKIAkJZHNsbAlrMCwgazAsIDE2CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlkYWRkdQlrMSwgazEsIGswCiAJCUxPTkdfTAlrMSwgJWxvKGtlcm5lbHNwKShrMSkKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCQkuZW5kbQogCiAJCS5tYWNybwlzZXRfc2F2ZWRfc3Agc3RhY2twIHRlbXAgdGVtcDIKICNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCW1mYzAJXHRlbXAsIENQMF9UQ0JJTkQKKwkJc3JsCVx0ZW1wLCAxOQorI2Vsc2UKIAkJbWZjMAlcdGVtcCwgQ1AwX0NPTlRFWFQKIAkJc3JsCVx0ZW1wLCAyMwogI2VuZGlmCisjZW5kaWYKICNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCW1mYzAJXHRlbXAsIENQMF9UQ0JJTkQKKwkJZHNybAlcdGVtcCwgMTkKKyNlbHNlCiAJCU1GQzAJXHRlbXAsIENQMF9DT05URVhUCiAJCWRzcmwJXHRlbXAsIDIzCiAjZW5kaWYKKyNlbmRpZgogCQlMT05HX1MJXHN0YWNrcCwga2VybmVsc3AoXHRlbXApCiAJCS5lbmRtCiAjZWxzZQpAQCAtMTIyLDEwICsxNTUsMjUgQEAKIAkJUFRSX1NVQlUgc3AsIGsxLCBQVF9TSVpFCiAJCUxPTkdfUwlrMCwgUFRfUjI5KHNwKQogCQlMT05HX1MJJDMsIFBUX1IzKHNwKQorCQkvKgorCQkgKiBZb3UgbWlnaHQgdGhpbmsgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBzYXZlICQwLAorCQkgKiBidXQgdGhlIEZQVSBlbXVsYXRvciBhbmQgZ2RiIHJlbW90ZSBkZWJ1ZyBzdHViCisJCSAqIG5lZWQgaXQgdG8gb3BlcmF0ZSBjb3JyZWN0bHkKKwkJICovCiAJCUxPTkdfUwkkMCwgUFRfUjAoc3ApCiAJCW1mYzAJdjEsIENQMF9TVEFUVVMKIAkJTE9OR19TCSQyLCBQVF9SMihzcCkKIAkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKgorCQkgKiBJZGVhbGx5LCB0aGVzZSBpbnN0cnVjdGlvbnMgd291bGQgYmUgc2h1ZmZsZWQgaW4KKwkJICogdG8gY292ZXIgdGhlIHBpcGVsaW5lIGRlbGF5LgorCQkgKi8KKwkJLnNldAltaXBzMzIKKwkJbWZjMAl2MSwgQ1AwX1RDU1RBVFVTCisJCS5zZXQJbWlwczAKKwkJTE9OR19TCXYxLCBQVF9UQ1NUQVRVUyhzcCkKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCUxPTkdfUwkkNCwgUFRfUjQoc3ApCiAJCW1mYzAJdjEsIENQMF9DQVVTRQogCQlMT05HX1MJJDUsIFBUX1I1KHNwKQpAQCAtMjM0LDE0ICsyODIsMzYgQEAKIAkJLmVuZG0KIAogI2Vsc2UKKy8qCisgKiBGb3IgU01UQyBrZXJuZWwsIGdsb2JhbCBJRSBzaG91bGQgYmUgbGVmdCBzZXQsIGFuZCBpbnRlcnJ1cHRzCisgKiBjb250cm9sbGVkIGV4Y2x1c2l2ZWx5IHZpYSBJWE1ULgorICovCiAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisjZGVmaW5lIFNUQVRNQVNLIDB4MWUKKyNlbHNlCisjZGVmaW5lIFNUQVRNQVNLIDB4MWYKKyNlbmRpZgogCQkubWFjcm8JUkVTVE9SRV9TT01FCiAJCS5zZXQJcHVzaAogCQkuc2V0CXJlb3JkZXIKIAkJLnNldAlub2F0CisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkuc2V0CW1pcHMzMnIyCisJCS8qCisJCSAqIFRoaXMgbWF5IG5vdCByZWFsbHkgYmUgbmVjZXNzYXJ5IGlmIGludHMgYXJlIGFscmVhZHkKKwkJICogaW5oaWJpdGVkIGhlcmUuCisJCSAqLworCQltZmMwCXYwLCBDUDBfVENTVEFUVVMKKwkJb3JpCXYwLCBUQ1NUQVRVU19JWE1UCisJCW10YzAJdjAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJRE1UCTUJCQkJIyBkbXQgYTEKKwkJamFsCW1pcHNfaWhiCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQltZmMwCWEwLCBDUDBfU1RBVFVTCi0JCW9yaQlhMCwgMHgxZgotCQl4b3JpCWEwLCAweDFmCisJCW9yaQlhMCwgU1RBVE1BU0sKKwkJeG9yaQlhMCwgU1RBVE1BU0sKIAkJbXRjMAlhMCwgQ1AwX1NUQVRVUwogCQlsaQl2MSwgMHhmZjAwCiAJCWFuZAlhMCwgdjEKQEAgLTI1MCw2ICszMjAsMjYgQEAKIAkJYW5kCXYwLCB2MQogCQlvcgl2MCwgYTAKIAkJbXRjMAl2MCwgQ1AwX1NUQVRVUworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKy8qCisgKiBPbmx5IGFmdGVyIEVYTC9FUkwgaGF2ZSBiZWVuIHJlc3RvcmVkIHRvIHN0YXR1cyBjYW4gd2UKKyAqIHJlc3RvcmUgVENTdGF0dXMuSVhNVC4KKyAqLworCQlMT05HX0wJdjEsIFBUX1RDU1RBVFVTKHNwKQorCQllaGIKKwkJbWZjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWFuZGkJdjEsIFRDU1RBVFVTX0lYTVQKKwkJLyogV2Uga25vdyB0aGF0IFRDU3RhdHVhLklYTVQgc2hvdWxkIGJlIHNldCBmcm9tIGFib3ZlICovCisJCXhvcmkJdjAsIHYwLCBUQ1NUQVRVU19JWE1UCisJCW9yCXYwLCB2MCwgdjEKKwkJbXRjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWVoYgorCQlhbmRpCWExLCBhMSwgVlBFQ09OVFJPTF9URQorCQliZXF6CWExLCAxZgorCQllbXQKKzE6CisJCS5zZXQJbWlwczAKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCUxPTkdfTAl2MSwgUFRfRVBDKHNwKQogCQlNVEMwCXYxLCBDUDBfRVBDCiAJCUxPTkdfTAkkMzEsIFBUX1IzMShzcCkKQEAgLTMwMiwxMSArMzkyLDMzIEBACiAgKiBTZXQgY3AwIGVuYWJsZSBiaXQgYXMgc2lnbiB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCBzdGFjawogICovCiAJCS5tYWNybwlDTEkKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQogCQltZmMwCXQwLCBDUDBfU1RBVFVTCiAJCWxpCXQxLCBTVDBfQ1UwIHwgMHgxZgogCQlvcgl0MCwgdDEKIAkJeG9yaQl0MCwgMHgxZgogCQltdGMwCXQwLCBDUDBfU1RBVFVTCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCS8qCisJCSAqIEZvciBTTVRDLCB3ZSBuZWVkIHRvIHNldCBwcml2aWxlZ2UKKwkJICogYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbmx5IGZvciB0aGUKKwkJICogY3VycmVudCBUQywgdXNpbmcgdGhlIFRDU3RhdHVzIHJlZ2lzdGVyLgorCQkgKi8KKwkJbWZjMAl0MCxDUDBfVENTVEFUVVMKKwkJLyogRm9ydHVuYXRlbHkgQ1UgMCBpcyBpbiB0aGUgc2FtZSBwbGFjZSBpbiBib3RoIHJlZ2lzdGVycyAqLworCQkvKiBTZXQgVENVMCwgVE1YLCBUS1NVIChmb3IgbGF0ZXIgaW52ZXJzaW9uKSBhbmQgSVhNVCAqLworCQlsaQl0MSwgU1QwX0NVMCB8IDB4MDgwMDFjMDAKKwkJb3IJdDAsdDEKKwkJLyogQ2xlYXIgVEtTVSwgbGVhdmUgSVhNVCAqLworCQl4b3JpCXQwLCAweDAwMDAxODAwCisJCW10YzAJdDAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJLyogV2UgbmVlZCB0byBsZWF2ZSB0aGUgZ2xvYmFsIElFIGJpdCBzZXQsIGJ1dCBjbGVhciBFWEwuLi4qLworCQltZmMwCXQwLCBDUDBfU1RBVFVTCisJCW9yaQl0MCwgU1QwX0VYTCB8IFNUMF9FUkwKKwkJeG9yaQl0MCwgU1QwX0VYTCB8IFNUMF9FUkwKKwkJbXRjMAl0MCwgQ1AwX1NUQVRVUworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJaXJxX2Rpc2FibGVfaGF6YXJkCiAJCS5lbmRtCiAKQEAgLTMxNSwxMSArNDI3LDM1IEBACiAgKiBTZXQgY3AwIGVuYWJsZSBiaXQgYXMgc2lnbiB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCBzdGFjawogICovCiAJCS5tYWNybwlTVEkKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQogCQltZmMwCXQwLCBDUDBfU1RBVFVTCiAJCWxpCXQxLCBTVDBfQ1UwIHwgMHgxZgogCQlvcgl0MCwgdDEKIAkJeG9yaQl0MCwgMHgxZQogCQltdGMwCXQwLCBDUDBfU1RBVFVTCisjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCS8qCisJCSAqIEZvciBTTVRDLCB3ZSBuZWVkIHRvIHNldCBwcml2aWxlZ2UKKwkJICogYW5kIGVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgZm9yIHRoZQorCQkgKiBjdXJyZW50IFRDLCB1c2luZyB0aGUgVENTdGF0dXMgcmVnaXN0ZXIuCisJCSAqLworCQllaGIKKwkJbWZjMAl0MCxDUDBfVENTVEFUVVMKKwkJLyogRm9ydHVuYXRlbHkgQ1UgMCBpcyBpbiB0aGUgc2FtZSBwbGFjZSBpbiBib3RoIHJlZ2lzdGVycyAqLworCQkvKiBTZXQgVENVMCwgVEtTVSAoZm9yIGxhdGVyIGludmVyc2lvbikgYW5kIElYTVQgKi8KKwkJbGkJdDEsIFNUMF9DVTAgfCAweDA4MDAxYzAwCisJCW9yCXQwLHQxCisJCS8qIENsZWFyIFRLU1UgKmFuZCogSVhNVCAqLworCQl4b3JpCXQwLCAweDAwMDAxYzAwCisJCW10YzAJdDAsIENQMF9UQ1NUQVRVUworCQllaGIKKwkJLyogV2UgbmVlZCB0byBsZWF2ZSB0aGUgZ2xvYmFsIElFIGJpdCBzZXQsIGJ1dCBjbGVhciBFWEwuLi4qLworCQltZmMwCXQwLCBDUDBfU1RBVFVTCisJCW9yaQl0MCwgU1QwX0VYTAorCQl4b3JpCXQwLCBTVDBfRVhMCisJCW10YzAJdDAsIENQMF9TVEFUVVMKKwkJLyogaXJxX2VuYWJsZV9oYXphcmQgYmVsb3cgc2hvdWxkIGV4cGFuZCB0byBFSEIgZm9yIDI0Sy8zNEsgY3B1cyAqLworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAkJaXJxX2VuYWJsZV9oYXphcmQKIAkJLmVuZG0KIApAQCAtMzI4LDExICs0NjQsNTYgQEAKICAqIFNldCBjcDAgZW5hYmxlIGJpdCBhcyBzaWduIHRoYXQgd2UncmUgcnVubmluZyBvbiB0aGUga2VybmVsIHN0YWNrCiAgKi8KIAkJLm1hY3JvCUtNT0RFCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCQkvKgorCQkgKiBUaGlzIGdldHMgYmFyb3F1ZSBpbiBTTVRDLiAgV2Ugd2FudCB0bworCQkgKiBwcm90ZWN0IHRoZSBub24tYXRvbWljIGNsZWFyaW5nIG9mIEVYTAorCQkgKiB3aXRoIERNVC9FTVQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHRha2UKKwkJICogYW4gaW50ZXJydXB0IHdoaWxlIERNVCBpcyBzdGlsbCBpbiBlZmZlY3QuCisJCSAqLworCisJCS8qIEtNT0RFIGdldHMgaW52b2tlZCBmcm9tIGJvdGggcmVvcmRlciBhbmQgbm9yZW9yZGVyIGNvZGUgKi8KKwkJLnNldAlwdXNoCisJCS5zZXQJbWlwczMycjIKKwkJLnNldAlub3Jlb3JkZXIKKwkJbWZjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCWFuZGkJdjEsIHYwLCBUQ1NUQVRVU19JWE1UCisJCW9yaQl2MCwgVENTVEFUVVNfSVhNVAorCQltdGMwCXYwLCBDUDBfVENTVEFUVVMKKwkJZWhiCisJCURNVAkyCQkJCSMgZG10CXYwCisJCS8qCisJCSAqIFdlIGRvbid0IGtub3cgYSBwcmlvcmkgaWYgcmEgaXMgImxpdmUiCisJCSAqLworCQltb3ZlCXQwLCByYQorCQlqYWwJbWlwc19paGIKKwkJbm9wCS8qIGRlbGF5IHNsb3QgKi8KKwkJbW92ZQlyYSwgdDAKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJbGkJdDEsIFNUMF9DVTAgfCAweDFlCiAJCW9yCXQwLCB0MQogCQl4b3JpCXQwLCAweDFlCiAJCW10YzAJdDAsIENQMF9TVEFUVVMKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCWVoYgorCQlhbmRpCXYwLCB2MCwgVlBFQ09OVFJPTF9URQorCQliZXF6CXYwLCAyZgorCQlub3AJLyogZGVsYXkgc2xvdCAqLworCQllbXQKKzI6CisJCW1mYzAJdjAsIENQMF9UQ1NUQVRVUworCQkvKiBDbGVhciBJWE1ULCB0aGVuIE9SIGluIHByZXZpb3VzIHZhbHVlICovCisJCW9yaQl2MCwgVENTVEFUVVNfSVhNVAorCQl4b3JpCXYwLCBUQ1NUQVRVU19JWE1UCisJCW9yCXYwLCB2MSwgdjAKKwkJbXRjMAl2MCwgQ1AwX1RDU1RBVFVTCisJCS8qCisJCSAqIGlycV9kaXNhYmxlX2hhemFyZCBiZWxvdyBzaG91bGQgZXhwYW5kIHRvIEVIQgorCQkgKiBvbiAyNEsvMzRLIENQVVMKKwkJICovCisJCS5zZXQgcG9wCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlpcnFfZGlzYWJsZV9oYXphcmQKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKaW5kZXggNDA5N2ZhYy4uMjYxZjcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCkBAIC0xNTUsNiArMTU1LDM3IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAorI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisKKy8qCisgKiBIYW5kbGUgdGhlIHNjaGVkdWxlciByZXN1bWUgZW5kIG9mIEZQVSBhZmZpbml0eSBtYW5hZ2VtZW50LiAgV2UgZG8gdGhpcworICogaW5saW5lIHRvIHRyeSB0byBrZWVwIHRoZSBvdmVyaGVhZCBkb3duLiBJZiB3ZSBoYXZlIGJlZW4gZm9yY2VkIHRvIHJ1biBvbgorICogYSAiQ1BVIiB3aXRoIGFuIEZQVSBiZWNhdXNlIG9mIGEgcHJldmlvdXMgaGlnaCBsZXZlbCBvZiBGUCBjb21wdXRhdGlvbiwKKyAqIGJ1dCBkaWQgbm90IGFjdHVhbGx5IHVzZSB0aGUgRlBVIGR1cmluZyB0aGUgbW9zdCByZWNlbnQgdGltZS1zbGljZSAoQ1UxCisgKiBpc24ndCBzZXQpLCB3ZSB1bmRvIHRoZSByZXN0cmljdGlvbiBvbiBjcHVzX2FsbG93ZWQuCisgKgorICogV2UncmUgbm90IGNhbGxpbmcgc2V0X2NwdXNfYWxsb3dlZCgpIGhlcmUsIGJlY2F1c2Ugd2UgaGF2ZSBubyBuZWVkIHRvCisgKiBmb3JjZSBwcm9tcHQgbWlncmF0aW9uIC0gd2UncmUgYWxyZWFkeSBzd2l0Y2hpbmcgdGhlIGN1cnJlbnQgQ1BVIHRvIGEKKyAqIGRpZmZlcmVudCB0aHJlYWQuCisgKi8KKworI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChjcHVfaGFzX2ZwdSAmJgkJCQkJCVwKKwkgICAgKHByZXYtPnRocmVhZC5tZmxhZ3MgJiBNRl9GUFVCT1VORCkgJiYJCQlcCisJICAgICAoIShLU1RLX1NUQVRVUyhwcmV2KSAmIFNUMF9DVTEpKSkgewkJCVwKKwkJcHJldi0+dGhyZWFkLm1mbGFncyAmPSB+TUZfRlBVQk9VTkQ7CQkJXAorCQlwcmV2LT5jcHVzX2FsbG93ZWQgPSBwcmV2LT50aHJlYWQudXNlcl9jcHVzX2FsbG93ZWQ7CVwKKwl9CQkJCQkJCQlcCisJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKKwkJX19zYXZlX2RzcChwcmV2KTsJCQkJCVwKKwluZXh0LT50aHJlYWQuZW11bGF0ZWRfZnAgPSAwOwkJCQkJXAorCShsYXN0KSA9IHJlc3VtZShwcmV2LCBuZXh0LCBuZXh0LT50aHJlYWRfaW5mbyk7CQkJXAorCWlmIChjcHVfaGFzX2RzcCkJCQkJCQlcCisJCV9fcmVzdG9yZV9kc3AoY3VycmVudCk7CQkJCQlcCit9IHdoaWxlKDApCisKKyNlbHNlCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKQEAgLTE2Myw2ICsxOTQsNyBAQAogCWlmIChjcHVfaGFzX2RzcCkJCQkJCQlcCiAJCV9fcmVzdG9yZV9kc3AoY3VycmVudCk7CQkJCQlcCiB9IHdoaWxlKDApCisjZW5kaWYKIAogLyoKICAqIE9uIFNNUCBzeXN0ZW1zLCB3aGVuIHRoZSBzY2hlZHVsZXIgZG9lcyBtaWdyYXRpb24tY29zdCBhdXRvZGV0ZWN0aW9uLApAQCAtNDQwLDggKzQ3Miw4IEBACiBleHRlcm4gdm9pZCBzZXRfaGFuZGxlciAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIGV4dGVybiB2b2lkIHNldF91bmNhY2hlZF9oYW5kbGVyICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOwogZXh0ZXJuIHZvaWQgKnNldF92aV9oYW5kbGVyIChpbnQgbiwgdm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCAqc2V0X3ZpX3Nyc19oYW5kbGVyIChpbnQgbiwgdm9pZCAqYWRkciwgaW50IHJlZ3NldCk7CiBleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZWJhc2U7CiBleHRlcm4gdm9pZCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIE5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCmluZGV4IGI1Yzc4YTQuLjEwNjhmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaApAQCAtMzI0LDE2ICszMjQsMTggQEAKICNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX0xpbnV4ICsgMzAxKQogI2RlZmluZSBfX05SX3Bwb2xsCQkJKF9fTlJfTGludXggKyAzMDIpCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX0xpbnV4ICsgMzAzKQorI2RlZmluZSBfX05SX3NwbGljZQkJCShfX05SX0xpbnV4ICsgMzA0KQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJKF9fTlJfTGludXggKyAzMDUpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggbzMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzAzCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTMwNQogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLwogCiAjZGVmaW5lIF9fTlJfTzMyX0xpbnV4CQkJNDAwMAotI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscwkJMzAzCisjZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMDUKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKIApAQCAtNjA0LDE2ICs2MDYsMTggQEAKICNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX0xpbnV4ICsgMjYwKQogI2RlZmluZSBfX05SX3Bwb2xsCQkJKF9fTlJfTGludXggKyAyNjEpCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX0xpbnV4ICsgMjYyKQorI2RlZmluZSBfX05SX3NwbGljZQkJCShfX05SX0xpbnV4ICsgMjYzKQorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJKF9fTlJfTGludXggKyAyNjQpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggNjQtYml0IGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjYyCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2NAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCAqLwogCiAjZGVmaW5lIF9fTlJfNjRfTGludXgJCQk1MDAwCi0jZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI2MgorI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzCQkyNjQKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCiAKQEAgLTg4OCwxNiArODkyLDE4IEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCQkoX19OUl9MaW51eCArIDI2NCkKICNkZWZpbmUgX19OUl9wcG9sbAkJCShfX05SX0xpbnV4ICsgMjY1KQogI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkoX19OUl9MaW51eCArIDI2NikKKyNkZWZpbmUgX19OUl9zcGxpY2UJCQkoX19OUl9MaW51eCArIDI2NykKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJCShfX05SX0xpbnV4ICsgMjY4KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IE4zMiBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2NgorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNjgKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCiAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNjYKKyNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI2OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZwZS5oIGIvaW5jbHVkZS9hc20tbWlwcy92cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmUxYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fVlBFX0gKKyNkZWZpbmUgX0FTTV9WUEVfSAorCitzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgeworCXZvaWQgKCpzdGFydCkoaW50IHZwZSk7CisJdm9pZCAoKnN0b3ApKGludCB2cGUpOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworCitleHRlcm4gaW50IHZwZV9ub3RpZnkoaW50IGluZGV4LCBzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm5vdGlmeSk7CisKK2V4dGVybiB2b2lkICp2cGVfZ2V0X3NoYXJlZChpbnQgaW5kZXgpOworZXh0ZXJuIGludCB2cGVfZ2V0dWlkKGludCBpbmRleCk7CitleHRlcm4gaW50IHZwZV9nZXRnaWQoaW50IGluZGV4KTsKK2V4dGVybiBjaGFyICp2cGVfZ2V0Y3dkKGludCBpbmRleCk7CisKKyNlbmRpZiAvKiBfQVNNX1ZQRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pby5oCmluZGV4IDI5ZGEzMTE5Li4yNDRmNmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaApAQCAtMTI2LDI0ICsxMjYsMTcgQEAKIAogZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAorLyogTW9zdCBtYWNoaW5lcyByZWFjdCBwb29ybHkgdG8gSS9PLXNwYWNlIGJlaW5nIGNhY2hlYWJsZS4uLiBJbnN0ZWFkIGxldCdzCisgKiBkZWZpbmUgaW9yZW1hcCgpIGluIHRlcm1zIG9mIGlvcmVtYXBfbm9jYWNoZSgpLgorICovCiBleHRlcm4gaW5saW5lIHZvaWQgX19pb21lbSAqIGlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgMCk7CisJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIF9QQUdFX05PX0NBQ0hFKTsKIH0KLQotLyoKLSAqIFRoaXMgb25lIG1hcHMgaGlnaCBhZGRyZXNzIGRldmljZSBtZW1vcnkgYW5kIHR1cm5zIG9mZiBjYWNoaW5nIGZvciB0aGF0IGFyZWEuCi0gKiBpdCdzIHVzZWZ1bCBpZiBzb21lIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBpbiBzdWNoIGFuIGFyZWEgYW5kIHdyaXRlIGNvbWJpbmluZwotICogb3IgcmVhZCBjYWNoaW5nIGlzIG5vdCBkZXNpcmFibGU6Ci0gKi8KLWV4dGVybiBpbmxpbmUgdm9pZCAqIGlvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotICAgICAgICByZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgX1BBR0VfTk9fQ0FDSEUgLyogX1BBR0VfUENEICovKTsKLX0KKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKG9mZiwgc3opCWlvcmVtYXAoKG9mZiksIChzeikpCiAKIGV4dGVybiB2b2lkIGlvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKIAotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKikgKGFkZHIpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL251bW5vZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjc2NTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL251bW5vZGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAotI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19ICi0KLS8qIE1heCA4IE5vZGVzICovCi0jZGVmaW5lIE5PREVTX1NISUZUCTMKLQotI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oCmluZGV4IDQ1ZTAyYWEuLmMwZGQ0NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaApAQCAtMSwxMyArMSwzMCBAQAogI2lmbmRlZiBfUEFSSVNDX1BBR0VfSAogI2RlZmluZSBfUEFSSVNDX1BBR0VfSAogCi0vKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBQQUdFX1NISUZUCTEyCi0jZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCisjaWYgIWRlZmluZWQoX19LRVJORUxfXykKKy8qIHRoaXMgaXMgZm9yIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgKDRrIHBhZ2Ugc2l6ZSkgKi8KKyMgZGVmaW5lIFBBR0VfU0hJRlQJMTIJLyogNGsgKi8KKyMgZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjIGRlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQorI2VuZGlmCisKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQorIyBkZWZpbmUgUEFHRV9TSElGVAkxMgkvKiA0ayAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV8xNktCKQorIyBkZWZpbmUgUEFHRV9TSElGVAkxNAkvKiAxNmsgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNjRLQikKKyMgZGVmaW5lIFBBR0VfU0hJRlQJMTYJLyogNjRrICovCisjZWxzZQorIyBlcnJvciAidW5rbm93biBkZWZhdWx0IGtlcm5lbCBwYWdlIHNpemUiCisjZW5kaWYKKyNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKKworCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAppbmRleCA0ZTM0YzZiLi5hZWMwODllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKQEAgLTU5LDE2ICs1OSwxNSBAQAogI2RlZmluZSAgSVNUQUNLX1NJWkUgIDMyNzY4IC8qIEludGVycnVwdCBTdGFjayBTaXplICovCiAjZGVmaW5lICBJU1RBQ0tfT1JERVIgMwogCi0vKiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBpbml0aWFsbHkgbWFwcGVkIGtlcm5lbCBtZW1vcnkgKGkuZS4gY3VycmVudGx5Ci0gKiAwIHRvIDE8PDIzID09IDhNQiAqLworLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbGx5IG1hcHBlZCBrZXJuZWwgbWVtb3J5ICovCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI0CisjZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI0CS8qIDAgdG8gMTw8MjQgPSAxNk1CICovCiAjZWxzZQotI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyMworI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyMwkvKiAwIHRvIDE8PDIzID0gOE1CICovCiAjZW5kaWYKICNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfU0laRQkoMSA8PCBLRVJORUxfSU5JVElBTF9PUkRFUikKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKICNkZWZpbmUgUFRfTkxFVkVMUwkzCiAjZGVmaW5lIFBHRF9PUkRFUgkxIC8qIE51bWJlciBvZiBwYWdlcyBwZXIgcGdkICovCiAjZGVmaW5lIFBNRF9PUkRFUgkxIC8qIE51bWJlciBvZiBwYWdlcyBwZXIgcG1kICovCkBAIC0xMTEsMTEgKzExMCwxNSBAQAogI2RlZmluZSBNQVhfQUREUkJJVFMJKFBHRElSX1NISUZUICsgQklUU19QRVJfUEdEKQogI2RlZmluZSBNQVhfQUREUkVTUwkoMVVMIDw8IE1BWF9BRERSQklUUykKIAotI2RlZmluZSBTUEFDRUlEX1NISUZUIChNQVhfQUREUkJJVFMgLSAzMikKKyNkZWZpbmUgU1BBQ0VJRF9TSElGVAkoTUFYX0FERFJCSVRTIC0gMzIpCiAKIC8qIFRoaXMgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGluaXRpYWwgcGFnZXMgd2UgbmVlZCBmb3IgdGhlIGluaXRpYWwKICAqIHBhZ2UgdGFibGVzICovCi0jZGVmaW5lIFBUX0lOSVRJQUwJKDEgPDwgKEtFUk5FTF9JTklUSUFMX09SREVSIC0gUE1EX1NISUZUKSkKKyNpZiAoS0VSTkVMX0lOSVRJQUxfT1JERVIpID49IChQTURfU0hJRlQpCisjIGRlZmluZSBQVF9JTklUSUFMCSgxIDw8IChLRVJORUxfSU5JVElBTF9PUkRFUiAtIFBNRF9TSElGVCkpCisjZWxzZQorIyBkZWZpbmUgUFRfSU5JVElBTAkoMSkgIC8qIGFsbCBpbml0aWFsIFBURXMgZml0IGludG8gb25lIHBhZ2UgKi8KKyNlbmRpZgogCiAvKgogICogcGdkIGVudHJpZXMgdXNlZCB1cCBieSB1c2VyL2tlcm5lbDoKQEAgLTE2MCw2ICsxNjMsMTAgQEAKICAqIHRvIHplcm8gKi8KICNkZWZpbmUgUFRFX1NISUZUCSAgIAl4bGF0ZV9wYWJpdChfUEFHRV9VU0VSX0JJVCkKIAorLyogUEZOX1BURV9TSElGVCBkZWZpbmVzIHRoZSBzaGlmdCBvZiBhIFBURSB2YWx1ZSB0byBhY2Nlc3MgdGhlIFBGTiBmaWVsZCAqLworI2RlZmluZSBQRk5fUFRFX1NISUZUCQkxMgorCisKIC8qIHRoaXMgaXMgaG93IG1hbnkgYml0cyBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZSBmdW5jdGlvbnMgKi8KICNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKEJJVFNfUEVSX0xPTkcgLSBQVEVfU0hJRlQpCiAKQEAgLTE4OCw3ICsxOTUsOCBAQAogLyogVGhlIHBnZC9wbWQgY29udGFpbnMgYSBwdHIgKGluIHBoeXMgYWRkciBzcGFjZSk7IHNpbmNlIGFsbCBwZ2RzL3BtZHMKICAqIGFyZSBwYWdlLWFsaWduZWQsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIFBBR0VfT0ZGU0VUIGJpdHMsIGV4Y2VwdAogICogZm9yIGEgZmV3IG1ldGEtaW5mb3JtYXRpb24gYml0cywgc28gd2Ugc2hpZnQgdGhlIGFkZHJlc3MgdG8gYmUKLSAqIGFibGUgdG8gZWZmZWN0aXZlbHkgYWRkcmVzcyA0MC1iaXRzIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuICovCisgKiBhYmxlIHRvIGVmZmVjdGl2ZWx5IGFkZHJlc3MgNDAvNDIvNDQtYml0cyBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCisgKiBkZXBlbmRpbmcgb24gNGsvMTZrLzY0ayBQQUdFX1NJWkUgKi8KICNkZWZpbmUgX1B4RF9QUkVTRU5UX0JJVCAgIDMxCiAjZGVmaW5lIF9QeERfQVRUQUNIRURfQklUICAzMAogI2RlZmluZSBfUHhEX1ZBTElEX0JJVCAgICAgMjkKQEAgLTE5OCw3ICsyMDYsNyBAQAogI2RlZmluZSBQeERfRkxBR19WQUxJRCAgICAoMSA8PCB4bGF0ZV9wYWJpdChfUHhEX1ZBTElEX0JJVCkpCiAjZGVmaW5lIFB4RF9GTEFHX01BU0sgICAgICgweGYpCiAjZGVmaW5lIFB4RF9GTEFHX1NISUZUICAgICg0KQotI2RlZmluZSBQeERfVkFMVUVfU0hJRlQgICAoOCkKKyNkZWZpbmUgUHhEX1ZBTFVFX1NISUZUICAgKDgpIC8qIChQQUdFX1NISUZULVB4RF9GTEFHX1NISUZUKSAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC0yNDYsNiArMjU0LDcgQEAKICNkZWZpbmUgX19TMTEwICBQQUdFX1JXWAogI2RlZmluZSBfX1MxMTEgIFBBR0VfUldYCiAKKwogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW107IC8qIGRlY2xhcmVkIGluIGluaXRfdGFzay5jICovCiAKIC8qIGluaXRpYWwgcGFnZSB0YWJsZXMgZm9yIDAtOE1CIGZvciBrZXJuZWwgKi8KQEAgLTI3Miw3ICsyODEsNyBAQAogI2RlZmluZSBwZ2RfZmxhZyh4KQkocGdkX3ZhbCh4KSAmIFB4RF9GTEFHX01BU0spCiAjZGVmaW5lIHBnZF9hZGRyZXNzKHgpCSgodW5zaWduZWQgbG9uZykocGdkX3ZhbCh4KSAmfiBQeERfRkxBR19NQVNLKSA8PCBQeERfVkFMVUVfU0hJRlQpCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZiBQVF9OTEVWRUxTID09IDMKIC8qIFRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgcGVybWFuZW50IHBtZCBpcyBub3QgdGhlcmUgaWYgaXQgY29udGFpbnMKICAqIHRoZSBnYXRld2F5IG1hcmtlciAqLwogI2RlZmluZSBwbWRfbm9uZSh4KQkoIXBtZF92YWwoeCkgfHwgcG1kX2ZsYWcoeCkgPT0gUHhEX0ZMQUdfQVRUQUNIRUQpCkBAIC0yODIsNyArMjkxLDcgQEAKICNkZWZpbmUgcG1kX2JhZCh4KQkoIShwbWRfZmxhZyh4KSAmIFB4RF9GTEFHX1ZBTElEKSkKICNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF9mbGFnKHgpICYgUHhEX0ZMQUdfUFJFU0VOVCkKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKnBtZCkgewotI2lmZGVmIENPTkZJR182NEJJVAorI2lmIFBUX05MRVZFTFMgPT0gMwogCWlmIChwbWRfZmxhZygqcG1kKSAmIFB4RF9GTEFHX0FUVEFDSEVEKQogCQkvKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludGluZyB0byB0aGUgcGVybWFuZW50IHBtZAogCQkgKiBhdHRhY2hlZCB0byB0aGUgcGdkOyBjYW5ub3QgY2xlYXIgaXQgKi8KQEAgLTMwMyw3ICszMTIsNyBAQAogI2RlZmluZSBwZ2RfYmFkKHgpICAgICAgKCEocGdkX2ZsYWcoeCkgJiBQeERfRkxBR19WQUxJRCkpCiAjZGVmaW5lIHBnZF9wcmVzZW50KHgpICAocGdkX2ZsYWcoeCkgJiBQeERfRkxBR19QUkVTRU5UKQogc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkKSB7Ci0jaWZkZWYgQ09ORklHXzY0QklUCisjaWYgUFRfTkxFVkVMUyA9PSAzCiAJaWYocGdkX2ZsYWcoKnBnZCkgJiBQeERfRkxBR19BVFRBQ0hFRCkKIAkJLyogVGhpcyBpcyB0aGUgcGVybWFuZW50IHBtZCBhdHRhY2hlZCB0byB0aGUgcGdkOyBjYW5ub3QKIAkJICogZnJlZSBpdCAqLwpAQCAtMzUxLDcgKzM2MCw3IEBACiAoewkJCQkJCQkJCVwKIAlwdGVfdCBfX3B0ZTsJCQkJCQkJXAogCQkJCQkJCQkJXAotCXB0ZV92YWwoX19wdGUpID0gKChhZGRyKStwZ3Byb3RfdmFsKHBncHJvdCkpOwkJCVwKKwlwdGVfdmFsKF9fcHRlKSA9ICgoKChhZGRyKT4+UEFHRV9TSElGVCk8PFBGTl9QVEVfU0hJRlQpICsgcGdwcm90X3ZhbChwZ3Byb3QpKTsJXAogCQkJCQkJCQkJXAogCV9fcHRlOwkJCQkJCQkJXAogfSkKQEAgLTM2MSwyMCArMzcwLDE2IEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKIHsKIAlwdGVfdCBwdGU7Ci0JcHRlX3ZhbChwdGUpID0gKHBmbiA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocGdwcm90KTsKKwlwdGVfdmFsKHB0ZSkgPSAocGZuIDw8IFBGTl9QVEVfU0hJRlQpIHwgcGdwcm90X3ZhbChwZ3Byb3QpOwogCXJldHVybiBwdGU7CiB9CiAKLS8qIFRoaXMgdGFrZXMgYSBwaHlzaWNhbCBwYWdlIGFkZHJlc3MgdGhhdCBpcyB1c2VkIGJ5IHRoZSByZW1hcHBpbmcgZnVuY3Rpb25zICovCi0jZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdlLCBwZ3Byb3QpIFwKLSh7IHB0ZV90IF9fcHRlOyBwdGVfdmFsKF9fcHRlKSA9IHBoeXNwYWdlICsgcGdwcm90X3ZhbChwZ3Byb3QpOyBfX3B0ZTsgfSkKLQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsgcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7IHJldHVybiBwdGU7IH0KIAogLyogUGVybWFuZW50IGFkZHJlc3Mgb2YgYSBwYWdlLiAgT24gcGFyaXNjIHdlIGRvbid0IGhhdmUgaGlnaG1lbS4gKi8KIAotI2RlZmluZSBwdGVfcGZuKHgpIChwdGVfdmFsKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCShwdGVfdmFsKHgpID4+IFBGTl9QVEVfU0hJRlQpCiAKICNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCiAKQEAgLTQ5OSw2ICs1MDQsMjYgQEAKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAorCisvKiBUTEIgcGFnZSBzaXplIGVuY29kaW5nIC0gc2VlIHRhYmxlIDMtMSBpbiBwYXJpc2MyMC5wZGYgKi8KKyNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR180SwkJMAorI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzE2SwkxCisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfNjRLCTIKKyNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR18yNTZLCTMKKyNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR18xTQkJNAorI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzRNCQk1CisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfMTZNCTYKKyNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR182NE0JNworCisjaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV80S0IpCisjIGRlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQgX1BBR0VfU0laRV9FTkNPRElOR180SworI2VsaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV8xNktCKQorIyBkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxUIF9QQUdFX1NJWkVfRU5DT0RJTkdfMTZLCisjZWxpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzY0S0IpCisjIGRlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQgX1BBR0VfU0laRV9FTkNPRElOR182NEsKKyNlbmRpZgorCisKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCmluZGV4IGM1NmZjY2IuLjBlMWEzMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKQEAgLTc4MCw4ICs3ODAsMTQgQEAKICNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkoX19OUl9MaW51eCArIDI4NSkKICNkZWZpbmUgX19OUl9mY2htb2RhdAkJKF9fTlJfTGludXggKyAyODYpCiAjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkoX19OUl9MaW51eCArIDI4NykKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkoX19OUl9MaW51eCArIDI4OCkKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJKF9fTlJfTGludXggKyAyODkpCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CShfX05SX0xpbnV4ICsgMjkwKQorI2RlZmluZSBfX05SX3NwbGljZQkJKF9fTlJfTGludXggKyAyOTEpCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCShfX05SX0xpbnV4ICsgMjkyKQorI2RlZmluZSBfX05SX3RlZQkJKF9fTlJfTGludXggKyAyOTMpCiAKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAgICAgMjg4CisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgICAgIDI5NAogCiAjZGVmaW5lIEhQVVhfR0FURVdBWV9BRERSICAgICAgIDB4QzAwMDAwMDQKICNkZWZpbmUgTElOVVhfR0FURVdBWV9BRERSICAgICAgMHgxMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAppbmRleCA0MzIxNDgzLi45ZmNmMDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFBQQ19GRUFUVVJFX0JPT0tFCQkweDAwMDA4MDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX1NNVAkJCTB4MDAwMDQwMDAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfSUNBQ0hFX1NOT09QCTB4MDAwMDIwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfQVJDSF8yXzA1CQkweDAwMDAxMDAwCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMzIwLDYgKzMyMSwxMSBAQAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCiAJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKIAkgICAgQ1BVX0ZUUl9NTUNSQV9TSUhWIHwgQ1BVX0ZUUl9QVVJSKQorI2RlZmluZSBDUFVfRlRSU19QT1dFUjYgKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKKwkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgXAorCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCisJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKKwkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKQogI2RlZmluZSBDUFVfRlRSU19DRUxMCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCkBAIC0zMzEsOCArMzM3LDggQEAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIENQVV9GVFJTX1BPU1NJQkxFCVwKIAkgICAgKENQVV9GVFJTX1BPV0VSMyB8IENQVV9GVFJTX1JTNjQgfCBDUFVfRlRSU19QT1dFUjQgfAlcCi0JICAgIENQVV9GVFJTX1BQQzk3MCB8IENQVV9GVFJTX1BPV0VSNSB8IENQVV9GVFJTX0NFTEwgfAlcCi0gICAgICAgICAgICBDUFVfRlRSX0NJX0xBUkdFX1BBR0UpCisJICAgIENQVV9GVFJTX1BQQzk3MCB8IENQVV9GVFJTX1BPV0VSNSB8IENQVV9GVFJTX1BPV0VSNiB8CVwKKwkgICAgQ1BVX0ZUUlNfQ0VMTCB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKICNlbHNlCiBlbnVtIHsKIAlDUFVfRlRSU19QT1NTSUJMRSA9CkBAIC0zNzYsOCArMzgyLDggQEAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIENQVV9GVFJTX0FMV0FZUwkJXAogCSAgICAoQ1BVX0ZUUlNfUE9XRVIzICYgQ1BVX0ZUUlNfUlM2NCAmIENQVV9GVFJTX1BPV0VSNCAmCVwKLQkgICAgQ1BVX0ZUUlNfUFBDOTcwICYgQ1BVX0ZUUlNfUE9XRVI1ICYgQ1BVX0ZUUlNfQ0VMTCAmCVwKLQkgICAgQ1BVX0ZUUlNfUE9TU0lCTEUpCisJICAgIENQVV9GVFJTX1BQQzk3MCAmIENQVV9GVFJTX1BPV0VSNSAmIENQVV9GVFJTX1BPV0VSNiAmCVwKKwkgICAgQ1BVX0ZUUlNfQ0VMTCAmIENQVV9GVFJTX1BPU1NJQkxFKQogI2Vsc2UKIGVudW0gewogCUNQVV9GVFJTX0FMV0FZUyA9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaAppbmRleCA1MjA3NzU4Li44NjhjNzEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKQEAgLTYwLDI0ICs2MCwxMCBAQAogICogZGV2aWNlIChpbmNsdWRpbmcgY29uZmlnIHNwYWNlIGkvbykuICBDYWxsIGVlaF9hZGRfZGV2aWNlX2xhdGUKICAqIHRvIGZpbmlzaCB0aGUgZWVoIHNldHVwIGZvciB0aGlzIGRldmljZS4KICAqLwotdm9pZCBlZWhfYWRkX2RldmljZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci12b2lkIGVlaF9hZGRfZGV2aWNlX2xhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIGVlaF9hZGRfZGV2aWNlX3RyZWVfZWFybHkoc3RydWN0IGRldmljZV9ub2RlICopOwogdm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2xhdGUoc3RydWN0IHBjaV9idXMgKik7CiAKIC8qKgotICogZWVoX3JlbW92ZV9kZXZpY2UgLSB1bmRvIEVFSCBzZXR1cCBmb3IgdGhlIGluZGljYXRlZCBwY2kgZGV2aWNlCi0gKiBAZGV2OiBwY2kgZGV2aWNlIHRvIGJlIHJlbW92ZWQKLSAqCi0gKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbQotICogYSBydW5uaW5nIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4gIEl0IHVucmVnaXN0ZXJzCi0gKiB0aGUgUENJIGRldmljZSBmcm9tIHRoZSBFRUggc3Vic3lzdGVtLiAgSS9PIGVycm9ycyBhZmZlY3RpbmcKLSAqIHRoaXMgZGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIGRldGVjdGVkIGFmdGVyIHRoaXMgY2FsbDsgdGh1cywKLSAqIGkvbyBlcnJvcnMgYWZmZWN0aW5nIHRoaXMgc2xvdCBtYXkgbGVhdmUgdGhpcyBkZXZpY2UgdW51c2FibGUuCi0gKi8KLXZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7Ci0KLS8qKgogICogZWVoX3JlbW92ZV9kZXZpY2VfcmVjdXJzaXZlIC0gdW5kbyBFRUggZm9yIGRldmljZSAmIGNoaWxkcmVuLgogICogQGRldjogcGNpIGRldmljZSB0byBiZSByZW1vdmVkCiAgKgpAQCAtMTE2LDEyICsxMDIsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2FkZHJfY2FjaGVfYnVpbGQodm9pZCkgeyB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlZWhfYWRkX2RldmljZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKSB7IH0KLQotc3RhdGljIGlubGluZSB2b2lkIGVlaF9hZGRfZGV2aWNlX2xhdGUoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlZWhfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KLQogc3RhdGljIGlubGluZSB2b2lkIGVlaF9hZGRfZGV2aWNlX3RyZWVfZWFybHkoc3RydWN0IGRldmljZV9ub2RlICpkbikgeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2xhdGUoc3RydWN0IHBjaV9idXMgKmJ1cykgeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaAppbmRleCBiNzJjMDRmLi42Y2M3ZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKQEAgLTQsNDcgKzQsODggQEAKIAogI2RlZmluZSBIVlNDCQkJLmxvbmcgMHg0NDAwMDAyMgogCi0jZGVmaW5lIEhfU3VjY2VzcwkwCi0jZGVmaW5lIEhfQnVzeQkJMQkvKiBIYXJkd2FyZSBidXN5IC0tIHJldHJ5IGxhdGVyICovCi0jZGVmaW5lIEhfQ2xvc2VkCTIJLyogUmVzb3VyY2UgY2xvc2VkICovCi0jZGVmaW5lIEhfQ29uc3RyYWluZWQJNAkvKiBSZXNvdXJjZSByZXF1ZXN0IGNvbnN0cmFpbmVkIHRvIG1heCBhbGxvd2VkICovCi0jZGVmaW5lIEhfSW5Qcm9ncmVzcyAgIDE0CS8qIEtpbmQgb2YgbGlrZSBidXN5ICovCi0jZGVmaW5lIEhfUGVuZGluZyAgICAgIDE3CS8qIHJldHVybmVkIGZyb20gSF9QT0xMX1BFTkRJTkcgKi8KLSNkZWZpbmUgSF9Db250aW51ZSAgICAgMTgJLyogUmV0dXJuZWQgZnJvbSBIX0pvaW4gb24gc3VjY2VzcyAqLwotI2RlZmluZSBIX0xvbmdCdXN5U3RhcnRSYW5nZSAgIDk5MDAgIC8qIFN0YXJ0IG9mIGxvbmcgYnVzeSByYW5nZSAqLwotI2RlZmluZSBIX0xvbmdCdXN5T3JkZXIxbXNlYyAgIDk5MDAgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDFtc2VjIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCi0jZGVmaW5lIEhfTG9uZ0J1c3lPcmRlcjEwbXNlYyAgOTkwMSAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMTBtc2VjIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCi0jZGVmaW5lIEhfTG9uZ0J1c3lPcmRlcjEwMG1zZWMgOTkwMiAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMTAwbXNlYyBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLwotI2RlZmluZSBIX0xvbmdCdXN5T3JkZXIxc2VjICAgIDk5MDMgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDFzZWMgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KLSNkZWZpbmUgSF9Mb25nQnVzeU9yZGVyMTBzZWMgICA5OTA0ICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxMHNlYyBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLwotI2RlZmluZSBIX0xvbmdCdXN5T3JkZXIxMDBzZWMgIDk5MDUgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwMHNlYyBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLwotI2RlZmluZSBIX0xvbmdCdXN5RW5kUmFuZ2UgICAgIDk5MDUgIC8qIEVuZCBvZiBsb25nIGJ1c3kgcmFuZ2UgKi8KLSNkZWZpbmUgSF9IYXJkd2FyZQktMQkvKiBIYXJkd2FyZSBlcnJvciAqLwotI2RlZmluZSBIX0Z1bmN0aW9uCS0yCS8qIEZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSF9Qcml2aWxlZ2UJLTMJLyogQ2FsbGVyIG5vdCBwcml2aWxlZ2VkICovCi0jZGVmaW5lIEhfUGFyYW1ldGVyCS00CS8qIFBhcmFtZXRlciBpbnZhbGlkLCBvdXQtb2YtcmFuZ2Ugb3IgY29uZmxpY3RpbmcgKi8KLSNkZWZpbmUgSF9CYWRfTW9kZQktNQkvKiBJbGxlZ2FsIG1zciB2YWx1ZSAqLwotI2RlZmluZSBIX1BURUdfRnVsbAktNgkvKiBQVEVHIGlzIGZ1bGwgKi8KLSNkZWZpbmUgSF9Ob3RfRm91bmQJLTcJLyogUFRFIHdhcyBub3QgZm91bmQiICovCi0jZGVmaW5lIEhfUmVzZXJ2ZWRfREFCUgktOAkvKiBEQUJSIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgYnkgdGhlIGh5cGVydmlzb3Igb24gdGhpcyBwcm9jZXNzb3IiICovCi0jZGVmaW5lIEhfTm9NZW0gICAgICAgICAgICAgICAgIC05Ci0jZGVmaW5lIEhfQXV0aG9yaXR5ICAgICAgICAgICAgLTEwCi0jZGVmaW5lIEhfUGVybWlzc2lvbiAgICAgICAgICAgLTExCi0jZGVmaW5lIEhfRHJvcHBlZCAgICAgICAgICAgICAgLTEyCi0jZGVmaW5lIEhfU291cmNlUGFybSAgICAgICAgICAgLTEzCi0jZGVmaW5lIEhfRGVzdFBhcm0gICAgICAgICAgICAgLTE0Ci0jZGVmaW5lIEhfUmVtb3RlUGFybSAgICAgICAgICAgLTE1Ci0jZGVmaW5lIEhfUmVzb3VyY2UgICAgICAgICAgICAgLTE2CisjZGVmaW5lIEhfU1VDQ0VTUwkwCisjZGVmaW5lIEhfQlVTWQkJMQkvKiBIYXJkd2FyZSBidXN5IC0tIHJldHJ5IGxhdGVyICovCisjZGVmaW5lIEhfQ0xPU0VECTIJLyogUmVzb3VyY2UgY2xvc2VkICovCisjZGVmaW5lIEhfTk9UX0FWQUlMQUJMRSAzCisjZGVmaW5lIEhfQ09OU1RSQUlORUQJNAkvKiBSZXNvdXJjZSByZXF1ZXN0IGNvbnN0cmFpbmVkIHRvIG1heCBhbGxvd2VkICovCisjZGVmaW5lIEhfUEFSVElBTCAgICAgICA1CisjZGVmaW5lIEhfSU5fUFJPR1JFU1MJMTQJLyogS2luZCBvZiBsaWtlIGJ1c3kgKi8KKyNkZWZpbmUgSF9QQUdFX1JFR0lTVEVSRUQgMTUKKyNkZWZpbmUgSF9QQVJUSUFMX1NUT1JFICAgMTYKKyNkZWZpbmUgSF9QRU5ESU5HCTE3CS8qIHJldHVybmVkIGZyb20gSF9QT0xMX1BFTkRJTkcgKi8KKyNkZWZpbmUgSF9DT05USU5VRQkxOAkvKiBSZXR1cm5lZCBmcm9tIEhfSm9pbiBvbiBzdWNjZXNzICovCisjZGVmaW5lIEhfTE9OR19CVVNZX1NUQVJUX1JBTkdFCQk5OTAwICAvKiBTdGFydCBvZiBsb25nIGJ1c3kgcmFuZ2UgKi8KKyNkZWZpbmUgSF9MT05HX0JVU1lfT1JERVJfMV9NU0VDCTk5MDAgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDFtc2VjIFwKKwkJCQkJCSBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLworI2RlZmluZSBIX0xPTkdfQlVTWV9PUkRFUl8xMF9NU0VDCTk5MDEgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwbXNlYyBcCisJCQkJCQkgaXMgYSBnb29kIHRpbWUgdG8gcmV0cnkgKi8KKyNkZWZpbmUgSF9MT05HX0JVU1lfT1JERVJfMTAwX01TRUMgCTk5MDIgIC8qIExvbmcgYnVzeSwgaGludCB0aGF0IDEwMG1zZWMgXAorCQkJCQkJIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCisjZGVmaW5lIEhfTE9OR19CVVNZX09SREVSXzFfU0VDCQk5OTAzICAvKiBMb25nIGJ1c3ksIGhpbnQgdGhhdCAxc2VjIFwKKwkJCQkJCSBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLworI2RlZmluZSBIX0xPTkdfQlVTWV9PUkRFUl8xMF9TRUMJOTkwNCAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMTBzZWMgXAorCQkJCQkJIGlzIGEgZ29vZCB0aW1lIHRvIHJldHJ5ICovCisjZGVmaW5lIEhfTE9OR19CVVNZX09SREVSXzEwMF9TRUMJOTkwNSAgLyogTG9uZyBidXN5LCBoaW50IHRoYXQgMTAwc2VjIFwKKwkJCQkJCSBpcyBhIGdvb2QgdGltZSB0byByZXRyeSAqLworI2RlZmluZSBIX0xPTkdfQlVTWV9FTkRfUkFOR0UJCTk5MDUgIC8qIEVuZCBvZiBsb25nIGJ1c3kgcmFuZ2UgKi8KKyNkZWZpbmUgSF9IQVJEV0FSRQktMQkvKiBIYXJkd2FyZSBlcnJvciAqLworI2RlZmluZSBIX0ZVTkNUSU9OCS0yCS8qIEZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgSF9QUklWSUxFR0UJLTMJLyogQ2FsbGVyIG5vdCBwcml2aWxlZ2VkICovCisjZGVmaW5lIEhfUEFSQU1FVEVSCS00CS8qIFBhcmFtZXRlciBpbnZhbGlkLCBvdXQtb2YtcmFuZ2Ugb3IgY29uZmxpY3RpbmcgKi8KKyNkZWZpbmUgSF9CQURfTU9ERQktNQkvKiBJbGxlZ2FsIG1zciB2YWx1ZSAqLworI2RlZmluZSBIX1BURUdfRlVMTAktNgkvKiBQVEVHIGlzIGZ1bGwgKi8KKyNkZWZpbmUgSF9OT1RfRk9VTkQJLTcJLyogUFRFIHdhcyBub3QgZm91bmQiICovCisjZGVmaW5lIEhfUkVTRVJWRURfREFCUgktOAkvKiBEQUJSIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgYnkgdGhlIGh5cGVydmlzb3Igb24gdGhpcyBwcm9jZXNzb3IiICovCisjZGVmaW5lIEhfTk9fTUVNCS05CisjZGVmaW5lIEhfQVVUSE9SSVRZCS0xMAorI2RlZmluZSBIX1BFUk1JU1NJT04JLTExCisjZGVmaW5lIEhfRFJPUFBFRAktMTIKKyNkZWZpbmUgSF9TT1VSQ0VfUEFSTQktMTMKKyNkZWZpbmUgSF9ERVNUX1BBUk0JLTE0CisjZGVmaW5lIEhfUkVNT1RFX1BBUk0JLTE1CisjZGVmaW5lIEhfUkVTT1VSQ0UJLTE2CisjZGVmaW5lIEhfQURBUFRFUl9QQVJNICAtMTcKKyNkZWZpbmUgSF9SSF9QQVJNICAgICAgIC0xOAorI2RlZmluZSBIX1JDUV9QQVJNICAgICAgLTE5CisjZGVmaW5lIEhfU0NRX1BBUk0gICAgICAtMjAKKyNkZWZpbmUgSF9FUV9QQVJNICAgICAgIC0yMQorI2RlZmluZSBIX1JUX1BBUk0gICAgICAgLTIyCisjZGVmaW5lIEhfU1RfUEFSTSAgICAgICAtMjMKKyNkZWZpbmUgSF9TSUdUX1BBUk0gICAgIC0yNAorI2RlZmluZSBIX1RPS0VOX1BBUk0gICAgLTI1CisjZGVmaW5lIEhfTUxFTkdUSF9QQVJNICAtMjcKKyNkZWZpbmUgSF9NRU1fUEFSTSAgICAgIC0yOAorI2RlZmluZSBIX01FTV9BQ0NFU1NfUEFSTSAtMjkKKyNkZWZpbmUgSF9BVFRSX1BBUk0gICAgIC0zMAorI2RlZmluZSBIX1BPUlRfUEFSTSAgICAgLTMxCisjZGVmaW5lIEhfTUNHX1BBUk0gICAgICAtMzIKKyNkZWZpbmUgSF9WTF9QQVJNICAgICAgIC0zMworI2RlZmluZSBIX1RTSVpFX1BBUk0gICAgLTM0CisjZGVmaW5lIEhfVFJBQ0VfUEFSTSAgICAtMzUKKworI2RlZmluZSBIX01BU0tfUEFSTSAgICAgLTM3CisjZGVmaW5lIEhfTUNHX0ZVTEwgICAgICAtMzgKKyNkZWZpbmUgSF9BTElBU19FWElTVCAgIC0zOQorI2RlZmluZSBIX1BfQ09VTlRFUiAgICAgLTQwCisjZGVmaW5lIEhfVEFCTEVfRlVMTCAgICAtNDEKKyNkZWZpbmUgSF9BTFRfVEFCTEUgICAgIC00MgorI2RlZmluZSBIX01SX0NPTkRJVElPTiAgLTQzCisjZGVmaW5lIEhfTk9UX0VOT1VHSF9SRVNPVVJDRVMgLTQ0CisjZGVmaW5lIEhfUl9TVEFURSAgICAgICAtNDUKKyNkZWZpbmUgSF9SRVNDSU5ERU5EICAgIC00NgorCiAKIC8qIExvbmcgQnVzeSBpcyBhIGNvbmRpdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUKICAqIHdoZW4gYSBjYWxsIGNhbm5vdCBiZSBjb21wbGV0ZWQgbm93LCBidXQgdGhlIGlkZW50aWNhbCBjYWxsCiAgKiBzaG91bGQgYmUgcmV0cmllZCBsYXRlci4gIFRoaXMgcHJldmVudHMgY2FsbHMgYmxvY2tpbmcgaW4gdGhlCi0gKiBmaXJtd2FyZSBmb3IgbG9uZyBwZXJpb2RzIG9mIHRpbWUuIEFubm95aW5nbHkgdGhlIGZpcm13YXJlIGNhbiByZXR1cm4KKyAqIGZpcm13YXJlIGZvciBsb25nIHBlcmlvZHMgb2YgdGltZS4gIEFubm95aW5nbHkgdGhlIGZpcm13YXJlIGNhbiByZXR1cm4KICAqIGEgcmFuZ2Ugb2YgcmV0dXJuIGNvZGVzLCBoaW50aW5nIGF0IGhvdyBsb25nIHdlIHNob3VsZCB3YWl0IGJlZm9yZQogICogcmV0cnlpbmcuICBJZiB5b3UgZG9uJ3QgY2FyZSBmb3IgdGhlIGhpbnQsIHRoZSBtYWNybyBiZWxvdyBpcyBhIGdvb2QKICAqIHdheSB0byBjaGVjayBmb3IgdGhlIGxvbmdfYnVzeSByZXR1cm4gY29kZXMKICAqLwotI2RlZmluZSBIX2lzTG9uZ0J1c3koeCkgICgoeCA+PSBIX0xvbmdCdXN5U3RhcnRSYW5nZSkgJiYgKHggPD0gSF9Mb25nQnVzeUVuZFJhbmdlKSkKKyNkZWZpbmUgSF9JU19MT05HX0JVU1koeCkgICgoeCA+PSBIX0xPTkdfQlVTWV9TVEFSVF9SQU5HRSkgXAorCQkJICAgICAmJiAoeCA8PSBIX0xPTkdfQlVTWV9FTkRfUkFOR0UpKQogCiAvKiBGbGFncyAqLwogI2RlZmluZSBIX0xBUkdFX1BBR0UJCSgxVUw8PCg2My0xNikpCkBAIC02Niw2ICsxMDcsOSBAQAogI2RlZmluZSBIX0RBQlJYX0tFUk5FTAkJKDFVTDw8KDYzLTYyKSkKICNkZWZpbmUgSF9EQUJSWF9VU0VSCQkoMVVMPDwoNjMtNjMpKQogCisvKiBFYWNoIGNvbnRyb2wgYmxvY2sgaGFzIHRvIGJlIG9uIGEgNEsgYm9uZGFyeSAqLworI2RlZmluZSBIX0NCX0FMSUdOTUVOVCAgICAgICAgICA0MDk2CisKIC8qIHBTZXJpZXMgaHlwZXJ2aXNvciBvcGNvZGVzICovCiAjZGVmaW5lIEhfUkVNT1ZFCQkweDA0CiAjZGVmaW5lIEhfRU5URVIJCQkweDA4CkBAIC05OSwyNSArMTQzLDUyIEBACiAjZGVmaW5lIEhfUEVSRk1PTgkJMHg3YwogI2RlZmluZSBIX01JR1JBVEVfRE1BCQkweDc4CiAjZGVmaW5lIEhfUkVHSVNURVJfVlBBCQkweERDCi0jZGVmaW5lIEhfQ0VERQkJICAgICAgICAweEUwCisjZGVmaW5lIEhfQ0VERQkJCTB4RTAKICNkZWZpbmUgSF9DT05GRVIJCTB4RTQKLSNkZWZpbmUgSF9QUk9ECQkgICAgICAgIDB4RTgKKyNkZWZpbmUgSF9QUk9ECQkJMHhFOAogI2RlZmluZSBIX0dFVF9QUFAJCTB4RUMKICNkZWZpbmUgSF9TRVRfUFBQCQkweEYwCiAjZGVmaW5lIEhfUFVSUgkJCTB4RjQKLSNkZWZpbmUgSF9QSUMJCSAgICAgICAgMHhGOAorI2RlZmluZSBIX1BJQwkJCTB4RjgKICNkZWZpbmUgSF9SRUdfQ1JRCQkweEZDCiAjZGVmaW5lIEhfRlJFRV9DUlEJCTB4MTAwCiAjZGVmaW5lIEhfVklPX1NJR05BTAkJMHgxMDQKICNkZWZpbmUgSF9TRU5EX0NSUQkJMHgxMDgKLSNkZWZpbmUgSF9DT1BZX1JETUEgICAgICAgICAgICAgMHgxMTAKKyNkZWZpbmUgSF9DT1BZX1JETUEJCTB4MTEwCiAjZGVmaW5lIEhfU0VUX1hEQUJSCQkweDEzNAogI2RlZmluZSBIX1NUVUZGX1RDRQkJMHgxMzgKICNkZWZpbmUgSF9QVVRfVENFX0lORElSRUNUCTB4MTNDCiAjZGVmaW5lIEhfVlRFUk1fUEFSVE5FUl9JTkZPCTB4MTUwCiAjZGVmaW5lIEhfUkVHSVNURVJfVlRFUk0JMHgxNTQKICNkZWZpbmUgSF9GUkVFX1ZURVJNCQkweDE1OAotI2RlZmluZSBIX1BPTExfUEVORElORwkgICAgICAgIDB4MUQ4CisjZGVmaW5lIEhfUkVTRVRfRVZFTlRTICAgICAgICAgIDB4MTVDCisjZGVmaW5lIEhfQUxMT0NfUkVTT1VSQ0UgICAgICAgIDB4MTYwCisjZGVmaW5lIEhfRlJFRV9SRVNPVVJDRSAgICAgICAgIDB4MTY0CisjZGVmaW5lIEhfTU9ESUZZX1FQICAgICAgICAgICAgIDB4MTY4CisjZGVmaW5lIEhfUVVFUllfUVAgICAgICAgICAgICAgIDB4MTZDCisjZGVmaW5lIEhfUkVSRUdJU1RFUl9QTVIgICAgICAgIDB4MTcwCisjZGVmaW5lIEhfUkVHSVNURVJfU01SICAgICAgICAgIDB4MTc0CisjZGVmaW5lIEhfUVVFUllfTVIgICAgICAgICAgICAgIDB4MTc4CisjZGVmaW5lIEhfUVVFUllfTVcgICAgICAgICAgICAgIDB4MTdDCisjZGVmaW5lIEhfUVVFUllfSENBICAgICAgICAgICAgIDB4MTgwCisjZGVmaW5lIEhfUVVFUllfUE9SVCAgICAgICAgICAgIDB4MTg0CisjZGVmaW5lIEhfTU9ESUZZX1BPUlQgICAgICAgICAgIDB4MTg4CisjZGVmaW5lIEhfREVGSU5FX0FRUDEgICAgICAgICAgIDB4MThDCisjZGVmaW5lIEhfR0VUX1RSQUNFX0JVRkZFUiAgICAgIDB4MTkwCisjZGVmaW5lIEhfREVGSU5FX0FRUDAgICAgICAgICAgIDB4MTk0CisjZGVmaW5lIEhfUkVTSVpFX01SICAgICAgICAgICAgIDB4MTk4CisjZGVmaW5lIEhfQVRUQUNIX01DUVAgICAgICAgICAgIDB4MTlDCisjZGVmaW5lIEhfREVUQUNIX01DUVAgICAgICAgICAgIDB4MUEwCisjZGVmaW5lIEhfQ1JFQVRFX1JQVCAgICAgICAgICAgIDB4MUE0CisjZGVmaW5lIEhfUkVNT1ZFX1JQVCAgICAgICAgICAgIDB4MUE4CisjZGVmaW5lIEhfUkVHSVNURVJfUlBBR0VTICAgICAgIDB4MUFDCisjZGVmaW5lIEhfRElTQUJMRV9BTkRfR0VUQyAgICAgIDB4MUIwCisjZGVmaW5lIEhfRVJST1JfREFUQSAgICAgICAgICAgIDB4MUI0CisjZGVmaW5lIEhfR0VUX0hDQV9JTkZPICAgICAgICAgIDB4MUI4CisjZGVmaW5lIEhfR0VUX1BFUkZfQ09VTlQgICAgICAgIDB4MUJDCisjZGVmaW5lIEhfTUFOQUdFX1RSQUNFICAgICAgICAgIDB4MUMwCisjZGVmaW5lIEhfUVVFUllfSU5UX1NUQVRFICAgICAgIDB4MUU0CisjZGVmaW5lIEhfUE9MTF9QRU5ESU5HCQkweDFEOAogI2RlZmluZSBIX0pPSU4JCQkweDI5OAogI2RlZmluZSBIX0VOQUJMRV9DUlEJCTB4MkIwCiAKQEAgLTE1Miw3ICsyMjMsNyBAQAogICovCiBsb25nIHBscGFyX2hjYWxsXzhhcmdfMnJldCh1bnNpZ25lZCBsb25nIG9wY29kZSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKLQkJICAJICAgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgdW5zaWduZWQgbG9uZyBhcmcyLAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc0LAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc1LApAQCAtMTc2LDYgKzI0Nyw0MiBAQAogCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQzLAogCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQ0KTsKIAorbG9uZyBwbHBhcl9oY2FsbF83YXJnXzdyZXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzIsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzQsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzUsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzYsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzcsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQxLAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDMsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ0LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDYsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ3KTsKKworbG9uZyBwbHBhcl9oY2FsbF85YXJnXzlyZXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzIsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzQsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzUsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzYsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzcsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzgsCisJCQkgICB1bnNpZ25lZCBsb25nIGFyZzksCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQxLAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDMsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ0LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDYsCisJCQkgICB1bnNpZ25lZCBsb25nICpvdXQ3LAorCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0OCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDkpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19IVkNBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oCmluZGV4IDY4ZWZiZWEuLmYxYzI0NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmgKQEAgLTksNiArOSw5IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKy8qIENoZWNrIG9mIGV4aXN0ZW5jZSBvZiBsZWdhY3kgZGV2aWNlcyAqLworZXh0ZXJuIGludCBjaGVja19sZWdhY3lfaW9wb3J0KHVuc2lnbmVkIGxvbmcgYmFzZV9wb3J0KTsKKwogI2lmbmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20tcHBjL2lvLmg+CiAjZWxzZQpAQCAtNDM3LDkgKzQ0MCw2IEBACiAjZGVmaW5lIGRtYV9jYWNoZV93YmFjayhfc3RhcnQsX3NpemUpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGRtYV9jYWNoZV93YmFja19pbnYoX3N0YXJ0LF9zaXplKQlkbyB7IH0gd2hpbGUgKDApCiAKLS8qIENoZWNrIG9mIGV4aXN0ZW5jZSBvZiBsZWdhY3kgZGV2aWNlcyAqLwotZXh0ZXJuIGludCBjaGVja19sZWdhY3lfaW9wb3J0KHVuc2lnbmVkIGxvbmcgYmFzZV9wb3J0KTsKLQogCiAvKgogICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCmluZGV4IGQ1Njc3Y2IuLjE4Y2EyOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKQEAgLTcwLDE3ICs3MCwxOCBAQAogZXh0ZXJuIHN0cnVjdCBpb21tdV90YWJsZSAqaW9tbXVfaW5pdF90YWJsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKiB0YmwpOwogCiBleHRlcm4gaW50IGlvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsIHVuc2lnbmVkIGxvbmcgbWFzaywKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIGV4dGVybiB2b2lkIGlvbW11X3VubWFwX3NnKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAogZXh0ZXJuIHZvaWQgKmlvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzaXplX3Qgc2l6ZSwKLQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZyk7CisJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgbWFzaywgZ2ZwX3QgZmxhZyk7CiBleHRlcm4gdm9pZCBpb21tdV9mcmVlX2NvaGVyZW50KHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzaXplX3Qgc2l6ZSwKIAkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CiBleHRlcm4gZG1hX2FkZHJfdCBpb21tdV9tYXBfc2luZ2xlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCB2b2lkICp2YWRkciwKLQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisJCXNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIG1hc2ssCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiBleHRlcm4gdm9pZCBpb21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCmluZGV4IDUxZjg3ZDkuLjdiYzZkNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaApAQCAtNTQsNiArNTQsMTMgQEAKICAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCB2aXJ0X2lycV90b19yZWFsX21hcFtOUl9JUlFTXTsKIAorLyogVGhlIG1heGltdW0gdmlydHVhbCBJUlEgbnVtYmVyIHRoYXQgd2Ugc3VwcG9ydC4gIFRoaXMKKyAqIGNhbiBiZSBzZXQgYnkgdGhlIHBsYXRmb3JtIGFuZCB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCisgKiB2YWx1ZSBvZiBfX2lycV9vZmZzZXRfdmFsdWUuICBJdCBkZWZhdWx0cyB0byBhbmQgaXMKKyAqIGNhcHBlZCBieSAoTlJfSVJRUyAtIDEpLgorICovCitleHRlcm4gdW5zaWduZWQgaW50IHZpcnRfaXJxX21heDsKKwogLyogQ3JlYXRlIGEgbWFwcGluZyBmb3IgYSByZWFsX2lycSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCiAgKiBSZXR1cm4gdGhlIHZpcnR1YWwgaXJxIGFzIGEgY29udmVuaWVuY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKaW5kZXggNWVkODQ3Ni4uMGY5MjU0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKQEAgLTI1Myw3ICsyNTMsMTEgQEAKIAogI2RlZmluZSBfX21hY2hpbmVfZGVzYyBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIubWFjaGluZS5kZXNjIikpKQogCi0jZGVmaW5lIGRlZmluZV9tYWNoaW5lKG5hbWUpIHN0cnVjdCBtYWNoZGVwX2NhbGxzIG1hY2hfIyNuYW1lIF9fbWFjaGluZV9kZXNjID0KKyNkZWZpbmUgZGVmaW5lX21hY2hpbmUobmFtZSkJCQkJCVwKKwlleHRlcm4gc3RydWN0IG1hY2hkZXBfY2FsbHMgbWFjaF8jI25hbWU7CQlcCisJRVhQT1JUX1NZTUJPTChtYWNoXyMjbmFtZSk7CQkJCVwKKwlzdHJ1Y3QgbWFjaGRlcF9jYWxscyBtYWNoXyMjbmFtZSBfX21hY2hpbmVfZGVzYyA9CisKICNkZWZpbmUgbWFjaGluZV9pcyhuYW1lKSBcCiAJKHsgXAogCQlleHRlcm4gc3RydWN0IG1hY2hkZXBfY2FsbHMgbWFjaF8jI25hbWUgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9udW1ub2Rlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTM4ZWRhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX01BWF9OVU1OT0RFU19ICi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiBNYXggMTYgTm9kZXMgKi8KLSNkZWZpbmUgTk9ERVNfU0hJRlQJNAotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzY0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfNjQuaAppbmRleCAzZmIwNjFiLi5lYWI3NzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfNjQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfNjQuaApAQCAtMTAxLDYgKzEwMSw3IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAtICgxVSA8PCBHRVRfSFRMQl9BUkVBKGFkZHIpKSkgJiAweGZmZmYpCiAKICNkZWZpbmUgQVJDSF9IQVNfSFVHRVBBR0VfT05MWV9SQU5HRQorI2RlZmluZSBBUkNIX0hBU19IVUdFVExCX0ZSRUVfUEdEX1JBTkdFCiAjZGVmaW5lIEFSQ0hfSEFTX1BSRVBBUkVfSFVHRVBBR0VfUkFOR0UKICNkZWZpbmUgQVJDSF9IQVNfU0VUQ0xFQVJfSFVHRV9QVEUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BnYWxsb2MuaAppbmRleCBhMDBlZTAwLi45ZjA5MTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BnYWxsb2MuaApAQCAtMTcsMTEgKzE3LDEzIEBACiAjZGVmaW5lIFBURV9DQUNIRV9OVU0JMAogI2RlZmluZSBQTURfQ0FDSEVfTlVNCTEKICNkZWZpbmUgUEdEX0NBQ0hFX05VTQkyCisjZGVmaW5lIEhVR0VQVEVfQ0FDSEVfTlVNIDMKICNlbHNlCiAjZGVmaW5lIFBURV9DQUNIRV9OVU0JMAogI2RlZmluZSBQTURfQ0FDSEVfTlVNCTEKICNkZWZpbmUgUFVEX0NBQ0hFX05VTQkxCiAjZGVmaW5lIFBHRF9DQUNIRV9OVU0JMAorI2RlZmluZSBIVUdFUFRFX0NBQ0hFX05VTSAyCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCmluZGV4IGY0MzFkOGIwLi43Y2ZjZmYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKQEAgLTExNyw2ICsxMTcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkX2xpc3Q7CiAJaW50IG51bWJlcjsKKwlpbnQgbmlkOwogCXUzMiBpc3JjOwogCXUzMiBub2RlOwogCXU2NCBmbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGVybWJpdHMuaAppbmRleCBlYmY2MDU1Li42ZDUzM2IwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90ZXJtYml0cy5oCkBAIC0xNTMsNiArMTUzLDcgQEAKICNkZWZpbmUgSFVQQ0wJMDAwNDAwMDAKIAogI2RlZmluZSBDTE9DQUwJMDAxMDAwMDAKKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLwogCiAvKiBjX2xmbGFnIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaAppbmRleCBmZmM3NDYyLi44OGI1NTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCkBAIC0zNyw2ICszNyw4IEBACiAJaW50CQlwcmVlbXB0X2NvdW50OwkJLyogMCA9PiBwcmVlbXB0YWJsZSwKIAkJCQkJCSAgIDwwID0+IEJVRyAqLwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7CisJdW5zaWduZWQgbG9uZwlsb2NhbF9mbGFnczsJCS8qIHByaXZhdGUgZmxhZ3MgZm9yIHRocmVhZCAqLworCiAJLyogbG93IGxldmVsIGZsYWdzIC0gaGFzIGF0b21pYyBvcGVyYXRpb25zIGRvbmUgb24gaXQgKi8KIAl1bnNpZ25lZCBsb25nCWZsYWdzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiB9OwpAQCAtMTQzLDYgKzE0NSwxMiBAQAogCQkJCSBfVElGX05FRURfUkVTQ0hFRCB8IF9USUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1BFUlNZU0NBTExfTUFTSwkoX1RJRl9SRVNUT1JFQUxMfF9USUZfTk9FUlJPUikKIAorLyogQml0cyBpbiBsb2NhbF9mbGFncyAqLworLyogRG9uJ3QgbW92ZSBUTEZfTkFQUElORyB3aXRob3V0IGFkanVzdGluZyB0aGUgY29kZSBpbiBlbnRyeV8zMi5TICovCisjZGVmaW5lIFRMRl9OQVBQSU5HCQkwCS8qIGlkbGUgdGhyZWFkIGVuYWJsZWQgTkFQIG1vZGUgKi8KKworI2RlZmluZSBfVExGX05BUFBJTkcJCSgxIDw8IFRMRl9OQVBQSU5HKQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAppbmRleCAxZTE5Y2QwLi44NzM2MmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC00LDYgKzQsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKK3N0cnVjdCBzeXNfZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOworCiAjaWZkZWYgQ09ORklHX05VTUEKIAogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KQEAgLTI3LDYgKzMwLDggQEAKIAlyZXR1cm4gZmlyc3RfY3B1KHRtcCk7CiB9CiAKK2ludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSk7CisKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUobm9kZSkgICAgKC0xKQogI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKIApAQCAtNTcsMTAgKzYyLDI5IEBACiAKIGV4dGVybiB2b2lkIF9faW5pdCBkdW1wX251bWFfY3B1X3RvcG9sb2d5KHZvaWQpOwogCitleHRlcm4gaW50IHN5c2ZzX2FkZF9kZXZpY2VfdG9fbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBpbnQgbmlkKTsKK2V4dGVybiB2b2lkIHN5c2ZzX3JlbW92ZV9kZXZpY2VfZnJvbV9ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGludCBuaWQpOworCiAjZWxzZQogCitzdGF0aWMgaW5saW5lIGludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfbnVtYV9jcHVfdG9wb2xvZ3kodm9pZCkge30KIAorc3RhdGljIGlubGluZSBpbnQgc3lzZnNfYWRkX2RldmljZV90b19ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGludCBuaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19yZW1vdmVfZGV2aWNlX2Zyb21fbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCQkJaW50IG5pZCkKK3sKK30KKworCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCmluZGV4IDM4NzJlOTIuLmQ4M2ZjMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2RlZmluZSBWRVJJRllfUkVBRAkwCiAjZGVmaW5lIFZFUklGWV9XUklURQkxCkBAIC0xNzksOSArMTgwLDExIEBACiAjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCQkJXAogKHsJCQkJCQkJCVwKIAlsb25nIF9fcHVfZXJyOwkJCQkJCVwKLQltaWdodF9zbGVlcCgpOwkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX3B1X2FkZHIgPSAocHRyKTsJCVwKKwlpZiAoIWlzX2tlcm5lbF9hZGRyKCh1bnNpZ25lZCBsb25nKV9fcHVfYWRkcikpCQlcCisJCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCiAJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKLQlfX3B1dF91c2VyX3NpemUoKHgpLCAocHRyKSwgKHNpemUpLCBfX3B1X2Vycik7CQlcCisJX19wdXRfdXNlcl9zaXplKCh4KSwgX19wdV9hZGRyLCAoc2l6ZSksIF9fcHVfZXJyKTsJXAogCV9fcHVfZXJyOwkJCQkJCVwKIH0pCiAKQEAgLTI1OCw5ICsyNjEsMTEgQEAKICh7CQkJCQkJCQlcCiAJbG9uZyBfX2d1X2VycjsJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCVwKKwljb25zdCBfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX2d1X2FkZHIgPSAocHRyKTsJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQlcCi0JbWlnaHRfc2xlZXAoKTsJCQkJCQlcCi0JX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCAocHRyKSwgKHNpemUpLCBfX2d1X2Vycik7CVwKKwlpZiAoIWlzX2tlcm5lbF9hZGRyKCh1bnNpZ25lZCBsb25nKV9fZ3VfYWRkcikpCQlcCisJCW1pZ2h0X3NsZWVwKCk7CQkJCQlcCisJX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLCBfX2d1X2FkZHIsIChzaXplKSwgX19ndV9lcnIpOwlcCiAJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQlcCiAJX19ndV9lcnI7CQkJCQkJXAogfSkKQEAgLTI3MCw5ICsyNzUsMTEgQEAKICh7CQkJCQkJCQlcCiAJbG9uZyBfX2d1X2VycjsJCQkJCQlcCiAJbG9uZyBsb25nIF9fZ3VfdmFsOwkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfYWRkciA9IChwdHIpOwlcCiAJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKLQltaWdodF9zbGVlcCgpOwkJCQkJCVwKLQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsIChwdHIpLCAoc2l6ZSksIF9fZ3VfZXJyKTsJXAorCWlmICghaXNfa2VybmVsX2FkZHIoKHVuc2lnbmVkIGxvbmcpX19ndV9hZGRyKSkJCVwKKwkJbWlnaHRfc2xlZXAoKTsJCQkJCVwKKwlfX2dldF91c2VyX3NpemUoX19ndV92YWwsIF9fZ3VfYWRkciwgKHNpemUpLCBfX2d1X2Vycik7CVwKIAkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCVwKIAlfX2d1X2VycjsJCQkJCQlcCiB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKaW5kZXggNTM2YmEwOC4uZWRkZTI0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCkBAIC0zMDIsOCArMzAyLDI5IEBACiAjZGVmaW5lIF9fTlJfcHBvbGwJCTI4MQogI2RlZmluZSBfX05SX3Vuc2hhcmUJCTI4MgogI2RlZmluZSBfX05SX3NwbGljZQkJMjgzCisjZGVmaW5lIF9fTlJfdGVlCQkyODQKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJMjg1CisjZGVmaW5lIF9fTlJfb3BlbmF0CQkyODYKKyNkZWZpbmUgX19OUl9ta2RpcmF0CQkyODcKKyNkZWZpbmUgX19OUl9ta25vZGF0CQkyODgKKyNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjg5CisjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyOTAKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdAkJMjkxCisjZWxzZQorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMjkxCisjZW5kaWYKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJMjkyCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5MworI2RlZmluZSBfX05SX2xpbmthdAkJMjk0CisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTUKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTYKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk3CisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkyOTgKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMjk5CisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTI4NAorI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzMDEKIAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKQEAgLTQ1Niw2ICs0NzcsNyBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19ORVdGU1RBVEFUCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oIGIvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKaW5kZXggOTczZTYwOS4uMzFmMzYyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgQ1BNX0NSX0lOSVRfVFgJCSgodXNob3J0KTB4MDAwMikKICNkZWZpbmUgQ1BNX0NSX0hVTlRfTU9ERQkoKHVzaG9ydCkweDAwMDMpCiAjZGVmaW5lIENQTV9DUl9TVE9QX1RYCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIENQTV9DUl9HUkFfU1RPUF9UWAkoKHVzaG9ydCkweDAwMDUpCiAjZGVmaW5lIENQTV9DUl9SRVNUQVJUX1RYCSgodXNob3J0KTB4MDAwNikKICNkZWZpbmUgQ1BNX0NSX0NMT1NFX1JYX0JECSgodXNob3J0KTB4MDAwNykKICNkZWZpbmUgQ1BNX0NSX1NFVF9HQUREUgkoKHVzaG9ydCkweDAwMDgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oIGIvaW5jbHVkZS9hc20tcHBjL2NwbTIuaAppbmRleCBiNjM4Yjg3Li5jNzAzNDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9jcG0yLmgKQEAgLTY5LDcgKzY5LDcgQEAKICNkZWZpbmUgQ1BNX0NSX0lOSVRfVFgJCSgodXNob3J0KTB4MDAwMikKICNkZWZpbmUgQ1BNX0NSX0hVTlRfTU9ERQkoKHVzaG9ydCkweDAwMDMpCiAjZGVmaW5lIENQTV9DUl9TVE9QX1RYCQkoKHVzaG9ydCkweDAwMDQpCi0jZGVmaW5lIENQTV9DUl9HUkFfU1RPUF9UWCAgICAgICgodXNob3J0KTB4MDAwNSkKKyNkZWZpbmUgQ1BNX0NSX0dSQV9TVE9QX1RYCSgodXNob3J0KTB4MDAwNSkKICNkZWZpbmUgQ1BNX0NSX1JFU1RBUlRfVFgJKCh1c2hvcnQpMHgwMDA2KQogI2RlZmluZSBDUE1fQ1JfU0VUX0dBRERSCSgodXNob3J0KTB4MDAwOCkKICNkZWZpbmUgQ1BNX0NSX1NUQVJUX0lETUEJKCh1c2hvcnQpMHgwMDA5KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKaW5kZXggYTcwYmEyZS4uMGZiNjhhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCkBAIC0yMCw2ICsyMCw3IEBACiAvKiBUaGlzIG11c3QgbWF0Y2ggd2hhdCBpcyBpbiBhcmNoL3BwYy9NYWtlZmlsZSAqLwogI2RlZmluZSBQQUdFX09GRlNFVAlDT05GSUdfS0VSTkVMX1NUQVJUCiAjZGVmaW5lIEtFUk5FTEJBU0UJUEFHRV9PRkZTRVQKKyNkZWZpbmUgaXNfa2VybmVsX2FkZHIoeCkJKCh4KSA+PSBQQUdFX09GRlNFVCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmgKaW5kZXggNGI5NGY3MC4uNDBmMTk3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCkBAIC0zOSw2ICszOSw4IEBACiAjZXJyb3IgIm5lZWQgZGVmaW5pdGlvbiBvZiBwcGNfc3lzX2RldmljZXMiCiAjZW5kaWYKIAorI2RlZmluZSBQUENfU1lTX0lPUkVTT1VSQ0VfRklYVVBQRUQJMHgwMDAwMDAwMQkKKwogc3RydWN0IHBwY19zeXNfc3BlYyB7CiAJLyogUFBDIHN5cyBpcyBtYXRjaGVkIHZpYSAoSUQgJiBtYXNrKSA9PSB2YWx1ZSwgaWQgY291bGQgYmUKIAkgKiBQVlIsIFNWUiwgSU1NUiwgKiBldGMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcmVnX2Jvb2tlLmggYi9pbmNsdWRlL2FzbS1wcGMvcmVnX2Jvb2tlLmgKaW5kZXggMDBhZDljNy4uNDk0NGMwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaApAQCAtMjM3LDYgKzIzNyw3IEBACiAjZW5kaWYKIAogLyogQml0IGRlZmluaXRpb25zIGZvciBDQ1IxLiAqLworI2RlZmluZQlDQ1IxX0RQQwkweDAwMDAwMTAwIC8qIERpc2FibGUgTDEgSS1DYWNoZS9ELUNhY2hlIHBhcml0eSBjaGVja2luZyAqLwogI2RlZmluZQlDQ1IxX1RDUwkweDAwMDAwMDgwIC8qIFRpbWVyIENsb2NrIFNlbGVjdCAqLwogCiAvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBNQ1NSLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKaW5kZXggZGUxZDk5Mi4uMzk5YmYwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX0FSQ0hfUzM5MF9BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfUzM5MF9BVE9NSUNfXwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKwogLyoKICAqICBpbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jYWNoZS5oIGIvaW5jbHVkZS9hc20tczM5MC9jYWNoZS5oCmluZGV4IGUyMGNkZDkuLmNkZjQzMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlLmgKQEAgLTE2LDQgKzE2LDYgQEAKIAogI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JOAogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmggYi9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCmluZGV4IDRjYmMzMzYuLjE1ZmQyZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaApAQCAtMTQsMTIgKzE0LDEyIEBACiAjaW5jbHVkZSA8dHlwZXMuaD4KICNlbmRpZgogCi1leHRlcm4gX191OCBfYXNjZWJjXzUwMFtdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyA1MDAgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY2FzY181MDBbXTsgICAvKiBFQkNESUMgNTAwIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KLWV4dGVybiBfX3U4IF9hc2NlYmNbXTsgICAvKiBBU0NJSSAtPiBFQkNESUMgY29udmVyc2lvbiB0YWJsZSAqLwotZXh0ZXJuIF9fdTggX2ViY2FzY1tdOyAgIC8qIEVCQ0RJQyAtPiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlICovCi1leHRlcm4gX191OCBfZWJjX3RvbG93ZXJbXTsgLyogRUJDRElDIC0+IGxvd2VyY2FzZSAqLwotZXh0ZXJuIF9fdTggX2ViY190b3VwcGVyW107IC8qIEVCQ0RJQyAtPiB1cHBlcmNhc2UgKi8KK2V4dGVybiBfX3U4IF9hc2NlYmNfNTAwWzI1Nl07ICAgLyogQVNDSUkgLT4gRUJDRElDIDUwMCBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjYXNjXzUwMFsyNTZdOyAgIC8qIEVCQ0RJQyA1MDAgLT4gQVNDSUkgY29udmVyc2lvbiB0YWJsZSAqLworZXh0ZXJuIF9fdTggX2FzY2ViY1syNTZdOyAgIC8qIEFTQ0lJIC0+IEVCQ0RJQyBjb252ZXJzaW9uIHRhYmxlICovCitleHRlcm4gX191OCBfZWJjYXNjWzI1Nl07ICAgLyogRUJDRElDIC0+IEFTQ0lJIGNvbnZlcnNpb24gdGFibGUgKi8KK2V4dGVybiBfX3U4IF9lYmNfdG9sb3dlclsyNTZdOyAvKiBFQkNESUMgLT4gbG93ZXJjYXNlICovCitleHRlcm4gX191OCBfZWJjX3RvdXBwZXJbMjU2XTsgLyogRUJDRElDIC0+IHVwcGVyY2FzZSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGNvZGVwYWdlX2NvbnZlcnQoY29uc3QgX191OCAqY29kZXBhZ2UsIHZvbGF0aWxlIF9fdTggKiBhZGRyLCB1bnNpZ25lZCBsb25nIG5yKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCmluZGV4IDZhMzMyYTkuLjE4MDI3NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKQEAgLTEsNiArMSwxMjIgQEAKLSNpZm5kZWYgX0FTTV9GVVRFWF9ICi0jZGVmaW5lIF9BU01fRlVURVhfSAorI2lmbmRlZiBfQVNNX1MzOTBfRlVURVhfSAorI2RlZmluZSBfQVNNX1MzOTBfRlVURVhfSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZnV0ZXguaD4KKyNpZmRlZiBfX0tFUk5FTF9fCiAKLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgX19mdXRleF9hdG9taWNfZml4dXAgXAorCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCQkgICAgICIgICAuYWxpZ24gNFxuIgkJCQkJXAorCQkgICAgICIgICAubG9uZyAgMGIsNGIsMmIsNGIsM2IsNGJcbiIJCQlcCisJCSAgICAgIi5wcmV2aW91cyIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworI2RlZmluZSBfX2Z1dGV4X2F0b21pY19maXh1cCBcCisJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCisJCSAgICAgIiAgIC5hbGlnbiA4XG4iCQkJCQlcCisJCSAgICAgIiAgIC5xdWFkICAwYiw0YiwyYiw0YiwzYiw0YlxuIgkJCVwKKwkJICAgICAiLnByZXZpb3VzIgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLworCisjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wKGluc24sIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZykJXAorCWFzbSB2b2xhdGlsZSgiICAgc2FjZiAyNTZcbiIJCQkJCVwKKwkJICAgICAiMDogbCAgICUxLDAoJTYpXG4iCQkJCVwKKwkJICAgICAiMTogIiBpbnNuCQkJCQkJXAorCQkgICAgICIyOiBjcyAgJTEsJTIsMCglNilcbiIJCQkJXAorCQkgICAgICIzOiBqbCAgMWJcbiIJCQkJCVwKKwkJICAgICAiICAgbGhpICUwLDBcbiIJCQkJCVwKKwkJICAgICAiNDogc2FjZiAwXG4iCQkJCQlcCisJCSAgICAgX19mdXRleF9hdG9taWNfZml4dXAJCQkJXAorCQkgICAgIDogIj1kIiAocmV0KSwgIj0mZCIgKG9sZHZhbCksICI9JmQiIChuZXd2YWwpLAlcCisJCSAgICAgICAiPW0iICgqdWFkZHIpCQkJCQlcCisJCSAgICAgOiAiMCIgKC1FRkFVTFQpLCAiZCIgKG9wYXJnKSwgImEiICh1YWRkciksCQlcCisJCSAgICAgICAibSIgKCp1YWRkcikgOiAiY2MiICk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2F0b21pY19vcF9pbnVzZXIgKGludCBlbmNvZGVkX29wLCBpbnQgX191c2VyICp1YWRkcikKK3sKKwlpbnQgb3AgPSAoZW5jb2RlZF9vcCA+PiAyOCkgJiA3OworCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKKwlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKKwlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOworCWludCBvbGR2YWwgPSAwLCBuZXd2YWwsIHJldDsKKwlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCisJCW9wYXJnID0gMSA8PCBvcGFyZzsKKworCWlmICghIGFjY2Vzc19vayAoVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWluY19wcmVlbXB0X2NvdW50KCk7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBGVVRFWF9PUF9TRVQ6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlNVxuIiwKKwkJCQkgIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQUREOgorCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTFcbmFyICUyLCU1XG4iLAorCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9PUjoKKwkJX19mdXRleF9hdG9taWNfb3AoImxyICUyLCUxXG5vciAlMiwlNVxuIiwKKwkJCQkgIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQU5ETjoKKwkJX19mdXRleF9hdG9taWNfb3AoImxyICUyLCUxXG5uciAlMiwlNVxuIiwKKwkJCQkgIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfWE9SOgorCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTFcbnhyICUyLCU1XG4iLAorCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlkZWNfcHJlZW1wdF9jb3VudCgpOworCisJaWYgKCFyZXQpIHsKKwkJc3dpdGNoIChjbXApIHsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6IHJldCA9IChvbGR2YWwgPT0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX05FOiByZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MVDogcmV0ID0gKG9sZHZhbCA8IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HRTogcmV0ID0gKG9sZHZhbCA+PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTEU6IHJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dUOiByZXQgPSAob2xkdmFsID4gY21wYXJnKTsgYnJlYWs7CisJCWRlZmF1bHQ6IHJldCA9IC1FTk9TWVM7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2Z1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQoreworCWludCByZXQ7CisKKwlpZiAoISBhY2Nlc3Nfb2sgKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYXNtIHZvbGF0aWxlKCIgICBjcyAgICUxLCU0LDAoJTUpXG4iCisJCSAgICAgIjA6IGxyICAgJTAsJTFcbiIKKwkJICAgICAiMTpcbiIKKyNpZm5kZWYgX19zMzkweF9fCisJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJICAgICAiICAgLmFsaWduIDRcbiIKKwkJICAgICAiICAgLmxvbmcgIDBiLDFiXG4iCisJCSAgICAgIi5wcmV2aW91cyIKKyNlbHNlIC8qIF9fczM5MHhfXyAqLworCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCSAgICAgIiAgIC5hbGlnbiA4XG4iCisJCSAgICAgIiAgIC5xdWFkICAwYiwxYlxuIgorCQkgICAgICIucHJldmlvdXMiCisjZW5kaWYgLyogX19zMzkweF9fICovCisJCSAgICAgOiAiPWQiIChyZXQpLCAiK2QiIChvbGR2YWwpLCAiPW0iICgqdWFkZHIpCisJCSAgICAgOiAiMCIgKC1FRkFVTFQpLCAiZCIgKG5ld3ZhbCksICJhIiAodWFkZHIpLCAibSIgKCp1YWRkcikKKwkJICAgICA6ICJjYyIsICJtZW1vcnkiICk7CisJcmV0dXJuIG9sZHZhbDsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfQVNNX1MzOTBfRlVURVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAppbmRleCBkYjA2MDZjMS4uYmVhNzI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKQEAgLTk4LDggKzk4LDggQEAKICNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHhENTgKICNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweEQ2MAogI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLICAgICAgICAgICAgICAgIDB4RDY4Ci0jZGVmaW5lIF9fTENfQ1BVSUQgICAgICAgICAgICAgICAgICAgICAgMHhEOTAKLSNkZWZpbmUgX19MQ19DUFVBRERSICAgICAgICAgICAgICAgICAgICAweEQ5OAorI2RlZmluZSBfX0xDX0NQVUlECQkJMHhEODAKKyNkZWZpbmUgX19MQ19DUFVBRERSCQkJMHhEODgKICNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweERCOAogI2RlZmluZSBfX0xDX0pJRkZZX1RJTUVSCQkweERDMAogI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEREOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKaW5kZXggNjU3ZDU4Mi4uNDFjMjc5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCkBAIC0yOTYsOCArMjk2LDE0IEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwMQogI2RlZmluZSBfX05SX3Bwb2xsCQkzMDIKICNkZWZpbmUgX19OUl91bnNoYXJlCQkzMDMKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzA0CisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwNQorI2RlZmluZSBfX05SX3NwbGljZQkJMzA2CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTMwNworI2RlZmluZSBfX05SX3RlZQkJMzA4CisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMwOQogCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDMwNAorI2RlZmluZSBOUl9zeXNjYWxscyAzMTAKIAogLyogCiAgKiBUaGVyZSBhcmUgc29tZSBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbm90IHByZXNlbnQgb24gNjQgYml0LCBzb21lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9udW1ub2Rlcy5oIGIvaW5jbHVkZS9hc20tc2gvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczZTg1Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9udW1ub2Rlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fTUFYX05VTU5PREVTX0gKLSNkZWZpbmUgX0FTTV9NQVhfTlVNTk9ERVNfSAotCi0vKiBNYXggMiBOb2RlcyAqLwotI2RlZmluZSBOT0RFU19TSElGVAkxCi0KLSNlbmRpZiAvKiBfQVNNX01BWF9OVU1OT0RFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCmluZGV4IGYyYzhlMTQuLjA1NTIwY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCkBAIC0yOTAsNyArMjkwLDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgICAgKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeSAgICAgICAgICAoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAgICAgIChfX05SX21xX29wZW4rNSkKLSNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkyODMKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyODMKICNkZWZpbmUgX19OUl93YWl0aWQJCTI4NAogI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4NQogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKaW5kZXggMmExY2ZhNC4uMWY4ZjM5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCkBAIC0zMzMsNyArMzMzLDcgQEAKICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgICAgKF9fTlJfbXFfb3BlbiszKQogI2RlZmluZSBfX05SX21xX25vdGlmeSAgICAgICAgICAoX19OUl9tcV9vcGVuKzQpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAgICAgIChfX05SX21xX29wZW4rNSkKLSNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkzMTEKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkzMTEKICNkZWZpbmUgX19OUl93YWl0aWQJCTMxMgogI2RlZmluZSBfX05SX2FkZF9rZXkJCTMxMwogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTMxNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaAppbmRleCA2NGVjNjQwLi40NWE1NzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCiAjZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfdGltZSBhbGlhcwkgMjUgICAgRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KKyNkZWZpbmUgX19OUl92bXNwbGljZQkgICAgICAgICAyNSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MJCQkgICAqLwogI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgMjcgLyogSW1wbGVtZW50ZWQgdmlhIHNldGl0aW1lciBpbiBTdW5PUyAgICAgICAgICAqLwogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCSAyOCAvKiBDb21tb24JCQkJCSAgICovCkBAIC0xODAsNyArMTgwLDcgQEAKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfYWZmaW5pdHkgMTYxIC8qIExpbnV4IHNwZWNpZmljLCBnZXRmaCB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9nZXRkb21haW5uYW1lICAgICAgMTYyIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lICAgICAgMTYzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9uaV9zeXNjYWxsCTE2NCAgICBFTk9TWVMgdW5kZXIgU3VuT1MJCQkgICAqLworLyogI2RlZmluZSBfX05SX3V0cmFwX2luc3RhbGwgICAxNjQgICAgTGludXggc3BhcmM2NCBzcGVjaWZpYwkJCSAgICovCiAjZGVmaW5lIF9fTlJfcXVvdGFjdGwgICAgICAgICAgIDE2NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzICAgIDE2NiAvKiBMaW51eCBzcGVjaWZpYywgZXhwb3J0ZnMgdW5kZXIgU3VuT1MgICAgICAgICovCiAjZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgIDE2NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNDgsNyArMjQ4LDcgQEAKICNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgMjI5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgMjMwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl90aW1lICAgICAgICAgICAgICAgMjMxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9vbGRzdGF0ICAgICAgICAgMjMyICAgIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zcGxpY2UgICAgICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI3MSw3ICsyNzEsNyBAQAogI2RlZmluZSBfX05SX2dldHNpZCAgICAgICAgICAgICAyNTIKICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgICAgICAgICAgMjUzCiAjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAgICAgICAgIDI1NAotI2RlZmluZSBfX05SX2FwbGliICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjU1CiAjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTYKICNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI1NwogI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNTgKQEAgLTI5Niw3ICsyOTYsNyBAQAogI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc3CiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzgKICNkZWZpbmUgX19OUl93YWl0aWQJCTI3OQotI2RlZmluZSBfX05SX3N5c19zZXRhbHRyb290CTI4MAorI2RlZmluZSBfX05SX3RlZQkJMjgwCiAjZGVmaW5lIF9fTlJfYWRkX2tleQkJMjgxCiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgyCiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODMKQEAgLTMxNiwxMSArMzE2LDEzIEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTI5NwogI2RlZmluZSBfX05SX3Bwb2xsCQkyOTgKICNkZWZpbmUgX19OUl91bnNoYXJlCQkyOTkKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQogCi0vKiBXQVJOSU5HOiBZb3UgTUFZIE5PVCBhZGQgc3lzY2FsbCBudW1iZXJzIGxhcmdlciB0aGFuIDI5OSwgc2luY2UKKy8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAxLCBzaW5jZQogICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQotICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAyOTkgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKLSAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMjk5IHJhbmdlLgorICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDEgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKKyAqICAgICAgICAgIGZpbmQgYSBmcmVlIHNsb3QgaW4gdGhlIDAtMzAxIHJhbmdlLgogICovCiAKICNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdmdhLmggYi9pbmNsdWRlL2FzbS1zcGFyYy92Z2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjlkNWIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdmdhLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqCUFjY2VzcyB0byBWR0EgdmlkZW9yYW0KKyAqCisgKgkoYykgMTk5OCBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9BU01fVkdBX0hfCisjZGVmaW5lIF9MSU5VWF9BU01fVkdBX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBWVF9CVUZfSEFWRV9SVworCisjdW5kZWYgc2NyX3dyaXRldworI3VuZGVmIHNjcl9yZWFkdworCitzdGF0aWMgaW5saW5lIHZvaWQgc2NyX3dyaXRldyh1MTYgdmFsLCB1MTYgKmFkZHIpCit7CisJQlVHX09OKChsb25nKSBhZGRyID49IDApOworCisJKmFkZHIgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHNjcl9yZWFkdyhjb25zdCB1MTYgKmFkZHIpCit7CisJQlVHX09OKChsb25nKSBhZGRyID49IDApOworCisJcmV0dXJuICphZGRyOworfQorCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgscykgKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCmluZGV4IGM3ZDU4MDQuLmE4ZDM5ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKQEAgLTQsNyArNCwxNDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgorCisvKiB3ZSBpbXBsZW1lbnQgdGhlIEFQSSBiZWxvdyBpbiB0ZXJtcyBvZiB0aGUgZXhpc3RpbmcgUENJIG9uZSwKKyAqIHNvIGluY2x1ZGUgaXQgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKy8qIG5lZWQgc3RydWN0IHBhZ2UgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCitzdGF0aWMgaW5saW5lIGludAorZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfZG1hX3N1cHBvcnRlZCh0b19wY2lfZGV2KGRldiksIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXJldHVybiBwY2lfc2V0X2RtYV9tYXNrKHRvX3BjaV9kZXYoZGV2KSwgZG1hX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCisJCSAgIGdmcF90IGZsYWcpCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9pb21tdV9vcHMtPmFsbG9jX2NvbnNpc3RlbnQodG9fcGNpX2RldihkZXYpLCBzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9tYXBfc2luZ2xlKHRvX3BjaV9kZXYoZGV2KSwgY3B1X2FkZHIsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcGNpX3VubWFwX3NpbmdsZSh0b19wY2lfZGV2KGRldiksIGRtYV9hZGRyLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcmV0dXJuIHBjaV9tYXBfcGFnZSh0b19wY2lfZGV2KGRldiksIHBhZ2UsIG9mZnNldCwgc2l6ZSwgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlwY2lfdW5tYXBfcGFnZSh0b19wY2lfZGV2KGRldiksIGRtYV9hZGRyZXNzLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisKKwlyZXR1cm4gcGNpX21hcF9zZyh0b19wY2lfZGV2KGRldiksIHNnLCBuZW50cywgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV91bm1hcF9zZyh0b19wY2lfZGV2KGRldiksIHNnLCBuaHdlbnRyaWVzLCAoaW50KWRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCisJCQkJICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSwgZG1hX2hhbmRsZSwKKwkJCQkgICAgICAgc2l6ZSwgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHRvX3BjaV9kZXYoZGV2KSwgc2csIG5lbGVtcywgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKworCXBjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSwgc2csIG5lbGVtcywgKGludClkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyKTsKK30KKwogI2Vsc2UKIAogc3RydWN0IGRldmljZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BjaS5oCmluZGV4IDdjNWE1ODkuLmUxZWE2N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wY2kuaApAQCAtNDIsNyArNDIsNyBAQAogc3RydWN0IHBjaV9kZXY7CiAKIHN0cnVjdCBwY2lfaW9tbXVfb3BzIHsKLQl2b2lkICooKmFsbG9jX2NvbnNpc3RlbnQpKHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwgZG1hX2FkZHJfdCAqKTsKKwl2b2lkICooKmFsbG9jX2NvbnNpc3RlbnQpKHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwgZG1hX2FkZHJfdCAqLCBnZnBfdCk7CiAJdm9pZCAoKmZyZWVfY29uc2lzdGVudCkoc3RydWN0IHBjaV9kZXYgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwogCWRtYV9hZGRyX3QgKCptYXBfc2luZ2xlKShzdHJ1Y3QgcGNpX2RldiAqLCB2b2lkICosIHNpemVfdCwgaW50KTsKIAl2b2lkICgqdW5tYXBfc2luZ2xlKShzdHJ1Y3QgcGNpX2RldiAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7CkBAIC01OSw3ICs1OSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSkKIHsKLQlyZXR1cm4gcGNpX2lvbW11X29wcy0+YWxsb2NfY29uc2lzdGVudChod2Rldiwgc2l6ZSwgZG1hX2hhbmRsZSk7CisJcmV0dXJuIHBjaV9pb21tdV9vcHMtPmFsbG9jX2NvbnNpc3RlbnQoaHdkZXYsIHNpemUsIGRtYV9oYW5kbGUsIEdGUF9BVE9NSUMpOwogfQogCiAvKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCmluZGV4IDgyMDMyZTEuLmJhZWYxM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaApAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBwZXJjcHVfbW9kY29weShwY3B1ZHN0LCBzcmMsIHNpemUpCQkJXAogZG8gewkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBfX2k7CQkJCQlcCi0JZm9yX2VhY2hfY3B1KF9faSkJCQkJCVwKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoX19pKQkJCQlcCiAJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldChfX2kpLAkJXAogCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJCVwKIH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCmluZGV4IGM0NGU3NDYuLmNkNDY0ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCkBAIC02ODksNiArNjg5LDIzIEBACiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCQlcCiAJc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMFVMKSkKIAorI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQorI2RlZmluZSBfX0hBVkVfQVJDSF9NT1ZFX1BURQorI2RlZmluZSBtb3ZlX3B0ZShwdGUsIHByb3QsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXAorKHsJCQkJCQkJCQlcCisgCXB0ZV90IG5ld3B0ZSA9IChwdGUpOwkJCQkJCVwKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvciAmJiBwdGVfcHJlc2VudChwdGUpKSB7CQlcCisJCXVuc2lnbmVkIGxvbmcgdGhpc19wZm4gPSBwdGVfcGZuKHB0ZSk7CQkJXAorCQkJCQkJCQkJXAorCQlpZiAocGZuX3ZhbGlkKHRoaXNfcGZuKSAmJgkJCQlcCisJCSAgICAoKChvbGRfYWRkcikgXiAobmV3X2FkZHIpKSAmICgxIDw8IDEzKSkpCQlcCisJCQlmbHVzaF9kY2FjaGVfcGFnZV9hbGwoY3VycmVudC0+bW0sCQlcCisJCQkJCSAgICAgIHBmbl90b19wYWdlKHRoaXNfcGZuKSk7CVwKKwl9CQkJCQkJCQlcCisJbmV3cHRlOwkJCQkJCQkJXAorfSkKKyNlbmRpZgorCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMjA0OF07CiBleHRlcm4gcG1kX3Qgc3dhcHBlcl9sb3dfcG1kX2RpclsyMDQ4XTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCmluZGV4IDlhZDVkOWMuLmUzYTdjNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKQEAgLTIyLDggKzIyLDYgQEAKIC8qIExvY2FsIGNwdSBvbmx5LiAgKi8KIGV4dGVybiB2b2lkIF9fZmx1c2hfdGxiX2FsbCh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfcGFnZSh1bnNpZ25lZCBsb25nIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyByKTsKLQogZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogI2lmbmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaAppbmRleCBhMjg0OTg2Li45OThlZjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgX19OUl9jYXBzZXQJCSAyMiAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwogI2RlZmluZSBfX05SX3NldHVpZCAgICAgICAgICAgICAgMjMgLyogSW1wbGVtZW50ZWQgdmlhIHNldHJldWlkIGluIFN1bk9TICAgICAgICAgICAqLwogI2RlZmluZSBfX05SX2dldHVpZCAgICAgICAgICAgICAgMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3RpbWUgYWxpYXMJIDI1ICAgIEVOT1NZUyB1bmRlciBTdW5PUwkJCSAgICovCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KICNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLwpAQCAtMjUwLDcgKzI1MCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX05SX3RpbWUJCTIzMSAvKiBMaW51eCBzcGFyYzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZW5kaWYKLS8qICNkZWZpbmUgX19OUl9vbGRzdGF0ICAgICAgICAgMjMyICAgIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zcGxpY2UgICAgICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI3Myw3ICsyNzMsNyBAQAogI2RlZmluZSBfX05SX2dldHNpZCAgICAgICAgICAgICAyNTIKICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgICAgICAgICAgMjUzCiAjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAgICAgICAgIDI1NAotI2RlZmluZSBfX05SX2FwbGliICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjU1CiAjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTYKICNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI1NwogI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNTgKQEAgLTI5OCw3ICsyOTgsNyBAQAogI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc3CiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzgKICNkZWZpbmUgX19OUl93YWl0aWQJCTI3OQotLyojZGVmaW5lIF9fTlJfc3lzX3NldGFsdHJvb3QJMjgwIGF2YWlsYWJsZSAod2FzIHNldGFsdHJvb3QpICovCisjZGVmaW5lIF9fTlJfdGVlCQkyODAKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4MwpAQCAtMzE4LDExICszMTgsMTMgQEAKICNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMjk3CiAjZGVmaW5lIF9fTlJfcHBvbGwJCTI5OAogI2RlZmluZSBfX05SX3Vuc2hhcmUJCTI5OQorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDAKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzAxCiAKLS8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMjk5LCBzaW5jZQorLyogV0FSTklORzogWW91IE1BWSBOT1QgYWRkIHN5c2NhbGwgbnVtYmVycyBsYXJnZXIgdGhhbiAzMDEsIHNpbmNlCiAgKiAgICAgICAgICBhbGwgb2YgdGhlIHN5c2NhbGwgdGFibGVzIGluIHRoZSBTcGFyYyBrZXJuZWwgYXJlCi0gKiAgICAgICAgICBzaXplZCB0byBoYXZlIDI5OSBlbnRyaWVzIChzdGFydGluZyBhdCB6ZXJvKS4gIFRoZXJlZm9yZQotICogICAgICAgICAgZmluZCBhIGZyZWUgc2xvdCBpbiB0aGUgMC0yOTkgcmFuZ2UuCisgKiAgICAgICAgICBzaXplZCB0byBoYXZlIDMwMSBlbnRyaWVzIChzdGFydGluZyBhdCB6ZXJvKS4gIFRoZXJlZm9yZQorICogICAgICAgICAgZmluZCBhIGZyZWUgc2xvdCBpbiB0aGUgMC0zMDEgcmFuZ2UuCiAgKi8KIAogI2RlZmluZSBfc3lzY2FsbDAodHlwZSxuYW1lKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pcnFmbGFncy5oIGIvaW5jbHVkZS9hc20tdW0vaXJxZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTliOWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaXJxZmxhZ3MuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9JUlFGTEFHU19ICisjZGVmaW5lIF9fVU1fSVJRRkxBR1NfSAorCisvKiBFbXB0eSBmb3Igbm93ICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKaW5kZXggMzA2NTZjOS4uNmUyNTI4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oCkBAIC01Niw2ICs1Niw5IEBACiBleHRlcm4gaW50IGFyY2hfc3dpdGNoX3Rsc19za2FzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0byk7CiBleHRlcm4gaW50IGFyY2hfc3dpdGNoX3Rsc190dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pOwogCitleHRlcm4gdm9pZCBhcmNoX3N3aXRjaF90b190dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pOworZXh0ZXJuIHZvaWQgYXJjaF9zd2l0Y2hfdG9fc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG8pOworCiBzdGF0aWMgaW5saW5lIGludCBkb19nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyAqaW5mbykKIHsKIAlyZXR1cm4gQ0hPT1NFX01PREVfUFJPQyhkb19nZXRfdGhyZWFkX2FyZWFfdHQsIGRvX2dldF90aHJlYWRfYXJlYV9za2FzLCBpbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaAppbmRleCBiZWE1YTAxLi4xNmM3MzRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdWFjY2Vzcy5oCkBAIC00MSwxMSArNDEsMTEgQEAKIAogI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikgXAogKHsgXAotCWNvbnN0IF9fdHlwZW9mX18ocHRyKSBfX3ByaXZhdGVfcHRyID0gcHRyOwlcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wcml2YXRlX3B0ciA9IChwdHIpOwlcCiAJX190eXBlb2ZfXyh4KSBfX3ByaXZhdGVfdmFsOwkJCVwKIAlpbnQgX19wcml2YXRlX3JldCA9IC1FRkFVTFQ7CQkJXAogCSh4KSA9IChfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpKTA7CQkJCVwKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigodm9pZCAqKSAmX19wcml2YXRlX3ZhbCwgKF9fcHJpdmF0ZV9wdHIpLAlcCisJaWYgKF9fY29weV9mcm9tX3VzZXIoKF9fZm9yY2Ugdm9pZCAqKSZfX3ByaXZhdGVfdmFsLCAoX19wcml2YXRlX3B0ciksXAogCQkJICAgICBzaXplb2YoKihfX3ByaXZhdGVfcHRyKSkpID09IDApIHsJCVwKIAkJKHgpID0gKF9fdHlwZW9mX18oKihfX3ByaXZhdGVfcHRyKSkpIF9fcHJpdmF0ZV92YWw7CVwKIAkJX19wcml2YXRlX3JldCA9IDA7CQkJCQlcCkBAIC02Miw3ICs2Miw3IEBACiAKICNkZWZpbmUgX19wdXRfdXNlcih4LCBwdHIpIFwKICh7IFwKLSAgICAgICAgX190eXBlb2ZfXyhwdHIpIF9fcHJpdmF0ZV9wdHIgPSBwdHI7IFwKKyAgICAgICAgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wcml2YXRlX3B0ciA9IHB0cjsgXAogICAgICAgICBfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpIF9fcHJpdmF0ZV92YWw7IFwKICAgICAgICAgaW50IF9fcHJpdmF0ZV9yZXQgPSAtRUZBVUxUOyBcCiAgICAgICAgIF9fcHJpdmF0ZV92YWwgPSAoX190eXBlb2ZfXygqKF9fcHJpdmF0ZV9wdHIpKSkgKHgpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaAppbmRleCAxMDdkZWNiLi43MDkxYWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKQEAgLTE4LDggKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpCWRvIHsgfSB3aGlsZSAoMCkKLQogLyoKICAqIHN3aXRjaF90byhuKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgcHRyLCBmaXJzdCBjaGVja2luZyB0aGF0CiAgKiBwdHIgaXNuJ3QgdGhlIGN1cnJlbnQgdGFzaywgaW4gd2hpY2ggY2FzZSBpdCBkb2VzIG5vdGhpbmcuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCmluZGV4IGM4MDQzYTEuLmY4ZGZmMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCkBAIC0yMCw4ICsyMCw4IEBACiAgICAgICAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2VfYWxpZ25lZCIpKSkKICNlbmRpZgogCi0jZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQotCiAjZW5kaWYKIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaAppbmRleCA3NmJiNjE5Li42NjI5NjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmgKQEAgLTY0LDYgKzY0LDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVQX0dPT0QJKDMqMzIrIDQpIC8qIHJlcCBtaWNyb2NvZGUgd29ya3Mgd2VsbCBvbiB0aGlzIENQVSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MgKDMqMzIrNSkgLyogVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9TWU5DX1JEVFNDICAoMyozMis2KSAgLyogUkRUU0Mgc3luY3MgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUsgKDMqMzIrNykgIC8qIEZJUC9GT1AvRkRQIGxlYWtzIHRocm91Z2ggRlhTQVZFICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxIChlY3gpLCB3b3JkIDQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMwkoNCozMisgMCkgLyogU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucy0zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaAppbmRleCA4ZGNjMzI2Li42NzBhMzM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKQEAgLTQ3LDcgKzQ3LDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGU4MjBfZW5kX29mX3JhbSh2b2lkKTsKIGV4dGVybiB2b2lkIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXModm9pZCk7CiBleHRlcm4gdm9pZCBlODIwX3ByaW50X21hcChjaGFyICp3aG8pOwotZXh0ZXJuIGludCBlODIwX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7CitleHRlcm4gaW50IGU4MjBfYW55X21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7CitleHRlcm4gaW50IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7CiAKIGV4dGVybiB2b2lkIGU4MjBfYm9vdG1lbV9mcmVlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsdW5zaWduZWQgbG9uZyBlbmQpOwogZXh0ZXJuIHZvaWQgZTgyMF9zZXR1cF9nYXAodm9pZCk7CkBAIC01OCw2ICs1OSw4IEBACiBleHRlcm4gdm9pZCBfX2luaXQgcGFyc2VfbWVtbWFwb3B0KGNoYXIgKnAsIGNoYXIgKiplbmQpOwogCiBleHRlcm4gc3RydWN0IGU4MjBtYXAgZTgyMDsKKworZXh0ZXJuIHVuc2lnbmVkIGViZGFfYWRkciwgZWJkYV9zaXplOwogI2VuZGlmLyohX19BU1NFTUJMWV9fKi8KIAogI2VuZGlmLypfX0U4MjBfSEVBREVSKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaAppbmRleCBjOTg2MzNhLi5iNGY4ZjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oCkBAIC0xNTksNyArMTU5LDcgQEAKICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKIAogLyogMUdCIGZvciA2NGJpdCwgOE1CIGZvciAzMmJpdCAqLwotI2RlZmluZSBTVEFDS19STkRfTUFTSyAoaXNfY29tcGF0X3Rhc2soKSA/IDB4N2ZmIDogMHgzZmZmZmYpCisjZGVmaW5lIFNUQUNLX1JORF9NQVNLICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IDB4N2ZmIDogMHgzZmZmZmYpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaAppbmRleCAwOGI3NWMxLi4xOGZmN2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmgKQEAgLTUxLDYgKzUxLDggQEAKIAogI2RlZmluZSBIUEVUX1ROX1JPVVRFX1NISUZUCTkKIAorI2RlZmluZSBIUEVUX1RJQ0tfUkFURSAoSFogKiAxMDAwMDBVTCkKKwogZXh0ZXJuIGludCBpc19ocGV0X2VuYWJsZWQodm9pZCk7CiBleHRlcm4gaW50IGhwZXRfcnRjX3RpbWVyX2luaXQodm9pZCk7CiBleHRlcm4gaW50IG9lbV9mb3JjZV9ocGV0X3RpbWVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2kzODcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pMzg3LmgKaW5kZXggODc2ZWI5YS4uY2JhOGEzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2kzODcuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaTM4Ny5oCkBAIC03Miw2ICs3MiwyMyBAQAogI2RlZmluZSBzZXRfZnB1X3N3ZCh0LHZhbCkgKCh0KS0+dGhyZWFkLmkzODcuZnhzYXZlLnN3ZCA9ICh2YWwpKQogI2RlZmluZSBzZXRfZnB1X2Z4c3JfdHdkKHQsdmFsKSAoKHQpLT50aHJlYWQuaTM4Ny5meHNhdmUudHdkID0gKHZhbCkpCiAKKyNkZWZpbmUgWDg3X0ZTV19FUyAoMSA8PCA3KQkvKiBFeGNlcHRpb24gU3VtbWFyeSAqLworCisvKiBBTUQgQ1BVcyBkb24ndCBzYXZlL3Jlc3RvcmUgRkRQL0ZJUC9GT1AgdW5sZXNzIGFuIGV4Y2VwdGlvbgorICAgaXMgcGVuZGluZy4gQ2xlYXIgdGhlIHg4NyBzdGF0ZSBoZXJlIGJ5IHNldHRpbmcgaXQgdG8gZml4ZWQKKyAgIHZhbHVlcy4gVGhlIGtlcm5lbCBkYXRhIHNlZ21lbnQgY2FuIGJlIHNvbWV0aW1lcyAwIGFuZCBzb21ldGltZXMKKyAgIG5ldyB1c2VyIHZhbHVlLiBCb3RoIHNob3VsZCBiZSBvay4KKyAgIFVzZSB0aGUgUERBIGFzIHNhZmUgYWRkcmVzcyBiZWNhdXNlIGl0IHNob3VsZCBiZSBhbHJlYWR5IGluIEwxLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ZwdV9zdGF0ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkKK3sKKwlpZiAodW5saWtlbHkoZngtPnN3ZCAmIFg4N19GU1dfRVMpKQorCQkgYXNtIHZvbGF0aWxlKCJmbmNsZXgiKTsKKwlhbHRlcm5hdGl2ZV9pbnB1dChBU01fTk9QOCBBU01fTk9QMiwKKwkgICAgIAkgICAgICIgICAgZW1tc1xuIgkJLyogY2xlYXIgc3RhY2sgdGFncyAqLworCSAgICAgCSAgICAgIiAgICBmaWxkbCAlJWdzOjAiLAkvKiBsb2FkIHRvIGNsZWFyIHN0YXRlICovCisJCSAgICAgWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUspOworfQorCiBzdGF0aWMgaW5saW5lIGludCByZXN0b3JlX2ZwdV9jaGVja2luZyhzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkgCiB7IAogCWludCBlcnI7CkBAIC0xMTksNiArMTM2LDcgQEAKICNlbmRpZgogCWlmICh1bmxpa2VseShlcnIpKQogCQlfX2NsZWFyX3VzZXIoZngsIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSk7CisJLyogTm8gbmVlZCB0byBjbGVhciBoZXJlIGJlY2F1c2UgdGhlIGNhbGxlciBjbGVhcnMgVVNFRF9NQVRIICovCiAJcmV0dXJuIGVycjsKIH0gCiAKQEAgLTE0OSw3ICsxNjcsNyBAQAogCQkJCSJpIiAob2Zmc2V0b2YoX190eXBlb2ZfXygqdHNrKSwKIAkJCQkJICAgICAgdGhyZWFkLmkzODcuZnhzYXZlKSkpOwogI2VuZGlmCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImZuY2xleCIpOworCWNsZWFyX2ZwdV9zdGF0ZSgmdHNrLT50aHJlYWQuaTM4Ny5meHNhdmUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX2ZwdV9iZWdpbih2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lhMzJfdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMl91bmlzdGQuaAppbmRleCBlZWIyYmNkLi5iNGY0YjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMl91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMl91bmlzdGQuaApAQCAtMzE3LDYgKzMxNyw0IEBACiAjZGVmaW5lIF9fTlJfaWEzMl9wcG9sbAkJCTMwOQogI2RlZmluZSBfX05SX2lhMzJfdW5zaGFyZQkJMzEwCiAKLSNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscyAzMTUJLyogbXVzdCBiZSA+IHRoYW4gYmlnZ2VzdCBzeXNjYWxsISAqLwotCiAjZW5kaWYgLyogX0FTTV9YODZfNjRfSUEzMl9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKaW5kZXggY2FmZGZiMy4uYTA1ZGE4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKQEAgLTE3Nyw3ICsxNzcsNyBAQAogewogCXJldHVybiAqKF9fZm9yY2Ugdm9sYXRpbGUgX191MTYgKilhZGRyOwogfQotc3RhdGljIGlubGluZSBfX3UzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MzIgX19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3UzMiAqKWFkZHI7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaAppbmRleCBlZTFiYzY5Li41MjQ4NGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKQEAgLTIwNSw2ICsyMDUsNyBAQAogZXh0ZXJuIGludCBpb19hcGljX2dldF92ZXJzaW9uIChpbnQgaW9hcGljKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyAoaW50IGlvYXBpYyk7CiBleHRlcm4gaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nIChpbnQgaW9hcGljLCBpbnQgcGluLCBpbnQgaXJxLCBpbnQsIGludCk7CitleHRlcm4gaW50IHRpbWVyX3VzZXNfaW9hcGljX3Bpbl8wOwogI2VuZGlmCiAKIGV4dGVybiBpbnQgc2lzX2FwaWNfYnVnOyAvKiBkdW1teSAqLyAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaAppbmRleCA1ZDI5OGI3Li43MjI5Nzg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oCkBAIC03MCw2ICs3MCw5IEBACiAjZGVmaW5lIE1DRV9USFJFU0hPTERfQkFTRSAgICAgIE1DRV9FWFRFTkRFRF9CQU5LICsgMSAvKiBNQ0VfQU1EICovCiAjZGVmaW5lIE1DRV9USFJFU0hPTERfRFJBTV9FQ0MgIE1DRV9USFJFU0hPTERfQkFTRSArIDQKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKIHZvaWQgbWNlX2xvZyhzdHJ1Y3QgbWNlICptKTsKICNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAogdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CkBAIC04Nyw0ICs5MCw4IEBACiB9CiAjZW5kaWYKIAorZXh0ZXJuIGF0b21pY190IG1jZV9lbnRyeTsKKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCmluZGV4IDZiMThjZDguLjY5NDRlNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKQEAgLTEyLDcgKzEyLDggQEAKIAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotI2RlZmluZSBOT0RFTUFQU0laRSAweGZmZgorLyogU2hvdWxkIHJlYWxseSBzd2l0Y2ggdG8gZHluYW1pYyBhbGxvY2F0aW9uIGF0IHNvbWUgcG9pbnQgKi8KKyNkZWZpbmUgTk9ERU1BUFNJWkUgMHg0ZmZmCiAKIC8qIFNpbXBsZSBwZXJmZWN0IGhhc2ggdG8gbWFwIHBoeXNpY2FsIGFkZHJlc3NlcyB0byBub2RlIG51bWJlcnMgKi8KIHN0cnVjdCBtZW1ub2RlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbnVtYS5oCmluZGV4IGY2Y2JiNGMuLjFjYzkyZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9udW1hLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L251bWEuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9YODY2NF9OVU1BX0ggMQogCiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLSNpbmNsdWRlIDxhc20vbnVtbm9kZXMuaD4KIAogc3RydWN0IGJvb3Rub2RlIHsKIAl1NjQgc3RhcnQsZW5kOyAKQEAgLTE4LDYgKzE3LDggQEAKIGV4dGVybiBpbnQgbnVtYV9vZmY7CiAKIGV4dGVybiB2b2lkIG51bWFfc2V0X25vZGUoaW50IGNwdSwgaW50IG5vZGUpOworZXh0ZXJuIHZvaWQgc3JhdF9yZXNlcnZlX2FkZF9hcmVhKGludCBub2RlaWQpOworZXh0ZXJuIGludCBob3RhZGRfcGVyY2VudDsKIAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYXBpY2lkX3RvX25vZGVbMjU2XTsKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbnVtbm9kZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiZTE2Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbnVtbm9kZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODY2NF9OVU1OT0RFU19ICi0jZGVmaW5lIF9BU01fWDg2NjRfTlVNTk9ERVNfSCAxCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmZGVmIENPTkZJR19OVU1BCi0jZGVmaW5lIE5PREVTX1NISUZUCTYKLSNlbHNlCi0jZGVmaW5lIE5PREVTX1NISUZUCTAKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaAppbmRleCA0NDA1YjRhLi43ZjMzYWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIHBlcmNwdV9tb2Rjb3B5KHBjcHVkc3QsIHNyYywgc2l6ZSkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKLQlmb3JfZWFjaF9jcHUoX19pKQkJCQkJXAorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShfX2kpCQkJCVwKIAkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0KF9faSksCQlcCiAJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQkJXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKaW5kZXggZjE4NDQzZi4uYjllNTMyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RpbWV4LmgKQEAgLTMzLDcgKzMzLDcgQEAKIAl1bnNpZ25lZCBlYXg7CiAJLyogRG9uJ3QgZG8gYW4gYWRkaXRpb25hbCBzeW5jIG9uIENQVXMgd2hlcmUgd2Uga25vdwogCSAgIFJEVFNDIGlzIGFscmVhZHkgc3luY2hyb25vdXMuICovCi0JYWx0ZXJuYXRpdmVfaW8oQVNNX05PUDIsICJjcHVpZCIsIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MsCisJYWx0ZXJuYXRpdmVfaW8oImNwdWlkIiwgQVNNX05PUDIsIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MsCiAJCQkgICI9YSIgKGVheCksICIwIiAoMSkgOiAiZWJ4IiwiZWN4IiwiZWR4IiwibWVtb3J5Iik7CiAJcmR0c2NsbChyZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKaW5kZXggZjIxZmYyYy4uZmViNzdjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaApAQCAtNjExLDggKzYxMSwxNCBAQAogX19TWVNDQUxMKF9fTlJfZ2V0X3JvYnVzdF9saXN0LCBzeXNfZ2V0X3JvYnVzdF9saXN0KQogI2RlZmluZSBfX05SX3NwbGljZQkJMjc1CiBfX1NZU0NBTEwoX19OUl9zcGxpY2UsIHN5c19zcGxpY2UpCisjZGVmaW5lIF9fTlJfdGVlCQkyNzYKK19fU1lTQ0FMTChfX05SX3RlZSwgc3lzX3RlZSkKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjc3CitfX1NZU0NBTEwoX19OUl9zeW5jX2ZpbGVfcmFuZ2UsIHN5c19zeW5jX2ZpbGVfcmFuZ2UpCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTI3OAorX19TWVNDQUxMKF9fTlJfdm1zcGxpY2UsIHN5c192bXNwbGljZSkKIAotI2RlZmluZSBfX05SX3N5c2NhbGxfbWF4IF9fTlJfc3BsaWNlCisjZGVmaW5lIF9fTlJfc3lzY2FsbF9tYXggX19OUl92bXNwbGljZQogCiAjaWZuZGVmIF9fTk9fU1RVQlMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lvY3Rscy5oCmluZGV4IDEwYzQ0MzQuLjNiODlhNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaW9jdGxzLmgKQEAgLTEwNyw2ICsxMDcsNiBAQAogI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgX0lPVygnVCcsIDkxLCBzdHJ1Y3Qgc2VyaWFsX211bHRpcG9ydF9zdHJ1Y3QpIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCiAKICNkZWZpbmUgVElPQ01JV0FJVAlfSU8oJ1QnLCA5MikgLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KLSNkZWZpbmUgVElPQ0dJQ09VTlQJX0lPUignVCcsIDkzLCBzdHJ1Y3QgYXN5bmNfaWNvdW50KSAvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCiAKICNlbmRpZiAvKiBfWFRFTlNBX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc2lnbmFsLmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc2lnbmFsLmgKaW5kZXggNWQ2ZmM5Yy4uYTk5YzlhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaWduYWwuaApAQCAtMTE4LDkgKzExOCw5IEBACiAgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCiAgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KICAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAogI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKICNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0FfUFJPQkVJUlEJCTB4MDgwMDAwMDAKICNlbmRpZgogCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKaW5kZXggOTI4NDg2Ny4uYjI5ZjdhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaApAQCAtMTExLDggKzExMSw2IEBACiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KIAotI2RlZmluZSBwcmVwYXJlX3RvX3N3aXRjaCgpCWRvIHsgfSB3aGlsZSgwKQotCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkJCVwKIGRvIHsJCQkJCQlcCiAJY2xlYXJfY3BlbmFibGUoKTsJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggMWM0N2M1OS4uYjc0YzE0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtODMsNiArODMsNyBAQAogI2RlZmluZSBBVURJVF9DT05GSUdfQ0hBTkdFCTEzMDUJLyogQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlICovCiAjZGVmaW5lIEFVRElUX1NPQ0tBRERSCQkxMzA2CS8qIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZyAqLwogI2RlZmluZSBBVURJVF9DV0QJCTEzMDcJLyogQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAqLworI2RlZmluZSBBVURJVF9JUENfU0VUX1BFUk0JMTMxMQkvKiBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlICovCiAKICNkZWZpbmUgQVVESVRfQVZDCQkxNDAwCS8qIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKi8KICNkZWZpbmUgQVVESVRfU0VMSU5VWF9FUlIJMTQwMQkvKiBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMgKi8KQEAgLTE0NSw2ICsxNDYsMTEgQEAKICNkZWZpbmUgQVVESVRfUEVSUwkxMAogI2RlZmluZSBBVURJVF9BUkNICTExCiAjZGVmaW5lIEFVRElUX01TR1RZUEUJMTIKKyNkZWZpbmUgQVVESVRfU0VfVVNFUgkxMwkvKiBzZWN1cml0eSBsYWJlbCB1c2VyICovCisjZGVmaW5lIEFVRElUX1NFX1JPTEUJMTQJLyogc2VjdXJpdHkgbGFiZWwgcm9sZSAqLworI2RlZmluZSBBVURJVF9TRV9UWVBFCTE1CS8qIHNlY3VyaXR5IGxhYmVsIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfU0VfU0VOCTE2CS8qIHNlY3VyaXR5IGxhYmVsIHNlbnNpdGl2aXR5IGxhYmVsICovCisjZGVmaW5lIEFVRElUX1NFX0NMUgkxNwkvKiBzZWN1cml0eSBsYWJlbCBjbGVhcmFuY2UgbGFiZWwgKi8KIAogCQkJCS8qIFRoZXNlIGFyZSBPTkxZIHVzZWZ1bCB3aGVuIGNoZWNraW5nCiAJCQkJICogYXQgc3lzY2FsbCBleGl0IHRpbWUgKEFVRElUX0FUX0VYSVQpLiAqLwpAQCAtMjg3LDEwICsyOTMsMTAgQEAKIAkJCQkvKiBQdWJsaWMgQVBJICovCiBleHRlcm4gaW50ICBhdWRpdF9hbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogZXh0ZXJuIHZvaWQgYXVkaXRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBhcmNoLAorZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShpbnQgYXJjaCwKIAkJCQlpbnQgbWFqb3IsIHVuc2lnbmVkIGxvbmcgYTAsIHVuc2lnbmVkIGxvbmcgYTEsCiAJCQkJdW5zaWduZWQgbG9uZyBhMiwgdW5zaWduZWQgbG9uZyBhMyk7Ci1leHRlcm4gdm9pZCBhdWRpdF9zeXNjYWxsX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgZmFpbGVkLCBsb25nIHJldHVybl9jb2RlKTsKK2V4dGVybiB2b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChpbnQgZmFpbGVkLCBsb25nIHJldHVybl9jb2RlKTsKIGV4dGVybiB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBhdWRpdF9wdXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgX19hdWRpdF9pbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBmbGFncyk7CkBAIC0zMTQsNyArMzIwLDggQEAKIAkJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdCwgdW5zaWduZWQgaW50ICpzZXJpYWwpOwogZXh0ZXJuIGludCAgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdWlkX3QgbG9naW51aWQpOwogZXh0ZXJuIHVpZF90IGF1ZGl0X2dldF9sb2dpbnVpZChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KTsKLWV4dGVybiBpbnQgYXVkaXRfaXBjX3Blcm1zKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUsIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKTsKK2V4dGVybiBpbnQgYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CitleHRlcm4gaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CiBleHRlcm4gaW50IGF1ZGl0X3NvY2tldGNhbGwoaW50IG5hcmdzLCB1bnNpZ25lZCBsb25nICphcmdzKTsKIGV4dGVybiBpbnQgYXVkaXRfc29ja2FkZHIoaW50IGxlbiwgdm9pZCAqYWRkcik7CiBleHRlcm4gaW50IGF1ZGl0X2F2Y19wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQpOwpAQCAtMzIzLDggKzMzMCw4IEBACiAjZWxzZQogI2RlZmluZSBhdWRpdF9hbGxvYyh0KSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9mcmVlKHQpIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBhdWRpdF9zeXNjYWxsX2VudHJ5KHQsdGEsYSxiLGMsZCxlKSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfc3lzY2FsbF9leGl0KHQsZixyKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfc3lzY2FsbF9lbnRyeSh0YSxhLGIsYyxkLGUpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9zeXNjYWxsX2V4aXQoZixyKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfZ2V0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfcHV0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgX19hdWRpdF9pbm9kZShuLGksZikgZG8geyA7IH0gd2hpbGUgKDApCkBAIC0zMzMsNyArMzQwLDggQEAKICNkZWZpbmUgYXVkaXRfaW5vZGVfY2hpbGQoZCxpLHApIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdHNjX2dldF9zdGFtcChjLHQscykgZG8geyBCVUcoKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfZ2V0X2xvZ2ludWlkKGMpICh7IC0xOyB9KQotI2RlZmluZSBhdWRpdF9pcGNfcGVybXMocSx1LGcsbSxpKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9pcGNfb2JqKGkpICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X2lwY19zZXRfcGVybShxLHUsZyxtLGkpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X3NvY2tldGNhbGwobixhKSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9zb2NrYWRkcihsZW4sIGFkZHIpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X2F2Y19wYXRoKGRlbnRyeSwgbW50KSAoeyAwOyB9KQpAQCAtMzY2LDcgKzM3NCw3IEBACiBleHRlcm4gaW50IGF1ZGl0X2ZpbHRlcl91c2VyKHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqY2IsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgYXVkaXRfZmlsdGVyX3R5cGUoaW50IHR5cGUpOwogZXh0ZXJuIGludCAgYXVkaXRfcmVjZWl2ZV9maWx0ZXIoaW50IHR5cGUsIGludCBwaWQsIGludCB1aWQsIGludCBzZXEsCi0JCQkJIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhc3osIHVpZF90IGxvZ2ludWlkKTsKKwkJCSB2b2lkICpkYXRhLCBzaXplX3QgZGF0YXN6LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCk7CiAjZWxzZQogI2RlZmluZSBhdWRpdF9sb2coYyxnLHQsZiwuLi4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfc3RhcnQoYyxnLHQpICh7IE5VTEw7IH0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBkMGNhYzhiLi41OWUxMjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE3LDYgKzE3LDggQEAKIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogCitzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kOworCiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKIHR5cGVkZWYgc3RydWN0IHJlcXVlc3RfcXVldWUgcmVxdWVzdF9xdWV1ZV90Owogc3RydWN0IGVsZXZhdG9yX3F1ZXVlOwpAQCAtNjExLDYgKzYxMyw4IEBACiBleHRlcm4gaW50IGJsa19yZW1vdmVfcGx1ZyhyZXF1ZXN0X3F1ZXVlX3QgKik7CiBleHRlcm4gdm9pZCBibGtfcmVjb3VudF9zZWdtZW50cyhyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGJpbyAqKTsKIGV4dGVybiBpbnQgc2NzaV9jbWRfaW9jdGwoc3RydWN0IGZpbGUgKiwgc3RydWN0IGdlbmRpc2sgKiwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKTsKK2V4dGVybiBpbnQgc2dfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLAorCQlzdHJ1Y3QgZ2VuZGlzayAqLCBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqKTsKIGV4dGVybiB2b2lkIGJsa19zdGFydF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N0b3BfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKTsKIGV4dGVybiB2b2lkIGJsa19zeW5jX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKaW5kZXggZGUzZWI4ZC4uZGEyZDEwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ib290bWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBpbml0X2Jvb3RtZW0gKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBtZW1lbmQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGZyZWVfYm9vdG1lbSAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtICh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCk7CitleHRlcm4gdm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpOwogZXh0ZXJuIHZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX2xvdyh1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCQkgdW5zaWduZWQgbG9uZyBnb2FsKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVidWdmcy5oIGIvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgKaW5kZXggMTc2ZTJkMy4uMDQ3NTY3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgKQEAgLTU4LDkgKzU4LDggQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCi0JCQkJCQkgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCQkJIHZvaWQgKmRhdGEsCi0JCQkJCQkgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcykKKwkJCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLAorCQkJCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQogewogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggZjZlNzJhNi4uZThlNTNiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0yMDAsNiArMjAwLDcgQEAKICAqIEBub2RlOiBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBkcml2ZXIgY29yZSBvbmx5LgogICogQGtvYmo6IGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIGRyaXZlciBjb3JlIG9ubHkuCiAgKiBAZGV2dF9hdHRyOiBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBkcml2ZXIgY29yZSBvbmx5LgorICogQGdyb3Vwczogb3B0aW9uYWwgYWRkaXRpb25hbCBncm91cHMgdG8gYmUgY3JlYXRlZAogICogQGRldjogaWYgc2V0LCBhIHN5bWxpbmsgdG8gdGhlIHN0cnVjdCBkZXZpY2UgaXMgY3JlYXRlZCBpbiB0aGUgc3lzZnMKICAqIGRpcmVjdG9yeSBmb3IgdGhpcyBzdHJ1Y3QgY2xhc3MgZGV2aWNlLgogICogQGNsYXNzX2RhdGE6IHBvaW50ZXIgdG8gd2hhdGV2ZXIgeW91IHdhbnQgdG8gc3RvcmUgaGVyZSBmb3IgdGhpcyBzdHJ1Y3QKQEAgLTIyOCw2ICsyMjksNyBAQAogCXN0cnVjdCBkZXZpY2UJCSogZGV2OwkJLyogbm90IG5lY2Vzc2FyeSwgYnV0IG5pY2UgdG8gaGF2ZSAqLwogCXZvaWQJCQkqIGNsYXNzX2RhdGE7CS8qIGNsYXNzLXNwZWNpZmljIGRhdGEgKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlCSpwYXJlbnQ7CS8qIHBhcmVudCBvZiB0aGlzIGNoaWxkIGRldmljZSwgaWYgdGhlcmUgaXMgb25lICovCisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAgKiogZ3JvdXBzOwkvKiBvcHRpb25hbCBncm91cHMgKi8KIAogCXZvaWQJKCpyZWxlYXNlKShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYpOwogCWludAkoKnVldmVudCkoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICoqZW52cCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCA5YjQ3NTFhLi42MzU2OTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0xNCw2ICsxNCw3IEBACiB9OwogCiAjZGVmaW5lIERNQV82NEJJVF9NQVNLCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAorI2RlZmluZSBETUFfNDhCSVRfTUFTSwkweDAwMDBmZmZmZmZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzQwQklUX01BU0sJMHgwMDAwMDBmZmZmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8zOUJJVF9NQVNLCTB4MDAwMDAwN2ZmZmZmZmZmZlVMTAogI2RlZmluZSBETUFfMzJCSVRfTUFTSwkweDAwMDAwMDAwZmZmZmZmZmZVTEwKQEAgLTIxLDcgKzIyLDcgQEAKICNkZWZpbmUgRE1BXzMwQklUX01BU0sJMHgwMDAwMDAwMDNmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8yOUJJVF9NQVNLCTB4MDAwMDAwMDAxZmZmZmZmZlVMTAogI2RlZmluZSBETUFfMjhCSVRfTUFTSwkweDAwMDAwMDAwMGZmZmZmZmZVTEwKLSNkZWZpbmUgRE1BXzI0QklUX01BU0sgMHgwMDAwMDAwMDAwZmZmZmZmVUxMCisjZGVmaW5lIERNQV8yNEJJVF9NQVNLCTB4MDAwMDAwMDAwMGZmZmZmZlVMTAogCiAjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaCBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAppbmRleCBhZDEzM2ZjLi4xNzEzYWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCkBAIC0yMSw3ICsyMSw3IEBACiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKLXR5cGVkZWYgaW50IChlbGV2YXRvcl9pbml0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIGVsZXZhdG9yX3QgKik7Cit0eXBlZGVmIHZvaWQgKihlbGV2YXRvcl9pbml0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIGVsZXZhdG9yX3QgKik7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2V4aXRfZm4pIChlbGV2YXRvcl90ICopOwogCiBzdHJ1Y3QgZWxldmF0b3Jfb3BzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLmggYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLmgKaW5kZXggMmQ3MTYwOC4uMzNkOGYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlybXdhcmUuaApAQCAtMTksNSArMTksNCBAQAogCXZvaWQgKCpjb250KShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KSk7CiAKIHZvaWQgcmVsZWFzZV9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKLXZvaWQgcmVnaXN0ZXJfZmlybXdhcmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDRlZDdlNjAuLmY4MTNiYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIxMyw2ICsyMTMsMTAgQEAKICNkZWZpbmUgRklCTUFQCSAgIF9JTygweDAwLDEpCS8qIGJtYXAgYWNjZXNzICovCiAjZGVmaW5lIEZJR0VUQlNaICAgX0lPKDB4MDAsMikJLyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi8KIAorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUJMQorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUJCTIKKyNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIJNAorCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpAQCAtNzU4LDExICs3NjIsOCBAQAogZXh0ZXJuIGludCBmY250bF9nZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKIC8qIGZzL3N5bmMuYyAqLwotI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUJMQotI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUJCTIKLSNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIJNAogZXh0ZXJuIGludCBkb19zeW5jX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBlbmRieXRlLAotCQkJaW50IGZsYWdzKTsKKwkJCXVuc2lnbmVkIGludCBmbGFncyk7CiAKIC8qIGZzL2xvY2tzLmMgKi8KIGV4dGVybiB2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICopOwpAQCAtODY0LDcgKzg2NSw3IEBACiAJICovCiAJc3RydWN0IG11dGV4IHNfdmZzX3JlbmFtZV9tdXRleDsJLyogS2x1ZGdlICovCiAKLQkvKiBHcmFudWFsaXR5IG9mIGMvbS9hdGltZSBpbiBucy4KKwkvKiBHcmFudWxhcml0eSBvZiBjL20vYXRpbWUgaW4gbnMuCiAJICAgQ2Fubm90IGJlIHdvcnNlIHRoYW4gYSBzZWNvbmQgKi8KIAl1MzIJCSAgIHNfdGltZV9ncmFuOwogfTsKQEAgLTEwMzksOCArMTA0MCw4IEBACiAJaW50ICgqY2hlY2tfZmxhZ3MpKGludCk7CiAJaW50ICgqZGlyX25vdGlmeSkoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAlpbnQgKCpmbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKLQlzc2l6ZV90ICgqc3BsaWNlX3dyaXRlKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotCXNzaXplX3QgKCpzcGxpY2VfcmVhZCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IGlub2RlICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKKwlzc2l6ZV90ICgqc3BsaWNlX3dyaXRlKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CisJc3NpemVfdCAoKnNwbGljZV9yZWFkKShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiB9OwogCiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7CkBAIC0xNjExLDggKzE2MTIsMTcgQEAKIGV4dGVybiB2b2lkIGRvX2dlbmVyaWNfbWFwcGluZ19yZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCSAgICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqLCBzdHJ1Y3QgZmlsZSAqLAogCQkJCSAgICBsb2ZmX3QgKiwgcmVhZF9kZXNjcmlwdG9yX3QgKiwgcmVhZF9hY3Rvcl90KTsKLWV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworCisvKiBmcy9zcGxpY2UuYyAqLworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLAorCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLAorCQlzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19zcGxpY2Vfc2VuZHBhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJc3RydWN0IGZpbGUgKm91dCwgbG9mZl90ICosIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CitleHRlcm4gbG9uZyBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LAorCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBleHRlcm4gdm9pZAogZmlsZV9yYV9zdGF0ZV9pbml0KHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3VhcnRfcGQuaCBiL2luY2x1ZGUvbGludXgvZnNfdWFydF9wZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTc1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzX3VhcnRfcGQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogUGxhdGZvcm0gaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBDUE0gVWFydCBkcml2ZXIuCisgKgorICogMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogVml0YWx5IEJvcmR1ZyA8dmJvcmR1Z0BydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBGU19VQVJUX1BEX0gKKyNkZWZpbmUgRlNfVUFSVF9QRF9ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK2VudW0gZnNfdWFydF9pZCB7CisJZnNpZF9zbWMxX3VhcnQsCisJZnNpZF9zbWMyX3VhcnQsCisJZnNpZF9zY2MxX3VhcnQsCisJZnNpZF9zY2MyX3VhcnQsCisJZnNpZF9zY2MzX3VhcnQsCisJZnNpZF9zY2M0X3VhcnQsCisJZnNfdWFydF9uciwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGZzX3VhcnRfaWRfc2NjMmZzaWQoaW50IGlkKQoreworICAgIHJldHVybiBmc2lkX3NjYzFfdWFydCArIGlkIC0gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnNfdWFydF9pZF9mc2lkMnNjYyhpbnQgaWQpCit7CisgICAgcmV0dXJuIGlkIC0gZnNpZF9zY2MxX3VhcnQgKyAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBmc191YXJ0X2lkX3NtYzJmc2lkKGludCBpZCkKK3sKKyAgICByZXR1cm4gZnNpZF9zbWMxX3VhcnQgKyBpZCAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZzX3VhcnRfaWRfZnNpZDJzbWMoaW50IGlkKQoreworICAgIHJldHVybiBpZCAtIGZzaWRfc21jMV91YXJ0ICsgMTsKK30KKworc3RydWN0IGZzX3VhcnRfcGxhdGZvcm1faW5mbyB7CisgICAgICAgIHZvaWQoKmluaXRfaW9wb3J0cykodm9pZCk7CisJLyogZGV2aWNlIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJaW50IGZzX25vOwkJLyogY29udHJvbGxlciBpbmRleCAqLworCXUzMiB1YXJ0X2NsazsKKwl1OCB0eF9udW1fZmlmbzsKKwl1OCB0eF9idWZfc2l6ZTsKKwl1OCByeF9udW1fZmlmbzsKKwl1OCByeF9idWZfc2l6ZTsKKwl1OCBicmc7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAppbmRleCBhM2EwZTA3Li4xNmZiZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC0xMTAsNSArMTEwLDE2IEBACiAjZGVmaW5lIEZTTF9VU0IyX1BPUlQwX0VOQUJMRUQJMHgwMDAwMDAwMQogI2RlZmluZSBGU0xfVVNCMl9QT1JUMV9FTkFCTEVECTB4MDAwMDAwMDIKIAorc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSB7CisJdTMyIAlpbml0aWFsX3NwbW9kZTsJLyogaW5pdGlhbCBTUE1PREUgdmFsdWUgKi8KKwl1MTYJYnVzX251bTsKKworCS8qIGJvYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJdTE2CW1heF9jaGlwc2VsZWN0OworCXZvaWQJKCphY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KTsKKwl2b2lkCSgqZGVhY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KTsKKwl1MzIJc3lzY2xrOworfTsKKwogI2VuZGlmCQkJCS8qIF9GU0xfREVWSUNFX0hfICovCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCmluZGV4IDljOGU2ZGEuLjcxZTdiMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKQEAgLTQwLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgZ2FtZXBvcnQgKnBhcmVudCwgKmNoaWxkOwogCiAJc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2OwotCXN0cnVjdCBzZW1hcGhvcmUgZHJ2X3NlbTsJLyogcHJvdGVjdHMgc2VyaW8tPmRydiBzbyBhdHRyaWJ1dGVzIGNhbiBwaW4gZHJpdmVyICovCisJc3RydWN0IG11dGV4IGRydl9tdXRleDsJCS8qIHByb3RlY3RzIHNlcmlvLT5kcnYgc28gYXR0cmlidXRlcyBjYW4gcGluIGRyaXZlciAqLwogCiAJc3RydWN0IGRldmljZSBkZXY7CiAJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7CS8qIHBvcnQgaGFzIGJlZW4gZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIGRyaXZlciBjb3JlICovCkBAIC0xMzcsMTIgKzEzOCwxMiBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBnYW1lcG9ydF9waW5fZHJpdmVyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCiB7Ci0JcmV0dXJuIGRvd25faW50ZXJydXB0aWJsZSgmZ2FtZXBvcnQtPmRydl9zZW0pOworCXJldHVybiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdhbWVwb3J0LT5kcnZfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfdW5waW5fZHJpdmVyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCiB7Ci0JdXAoJmdhbWVwb3J0LT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJmdhbWVwb3J0LT5kcnZfbXV0ZXgpOwogfQogCiB2b2lkIF9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDEwYTI3ZjIuLjJlZjg0NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTEwNSw2ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpc2tzIHRoYXQgY2FuJ3QgYmUgcGFydGl0aW9uZWQuICovCiAJY2hhciBkaXNrX25hbWVbMzJdOwkJLyogbmFtZSBvZiBtYWpvciBkcml2ZXIgKi8KIAlzdHJ1Y3QgaGRfc3RydWN0ICoqcGFydDsJLyogW2luZGV4ZWQgYnkgbWlub3JdICovCisJaW50IHBhcnRfdWV2ZW50X3N1cHByZXNzOwogCXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqZm9wczsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggNzg1MWU2Yi4uM2FjNDUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC01Nyw2ICs1Nyw4IEBACiAJCQlfX0dGUF9OT0ZBSUx8X19HRlBfTk9SRVRSWXxfX0dGUF9OT19HUk9XfF9fR0ZQX0NPTVB8IFwKIAkJCV9fR0ZQX05PTUVNQUxMT0N8X19HRlBfSEFSRFdBTEwpCiAKKy8qIFRoaXMgZXF1YWxzIDAsIGJ1dCB1c2UgY29uc3RhbnRzIGluIGNhc2UgdGhleSBldmVyIGNoYW5nZSAqLworI2RlZmluZSBHRlBfTk9XQUlUCShHRlBfQVRPTUlDICYgfl9fR0ZQX0hJR0gpCiAvKiBHRlBfQVRPTUlDIG1lYW5zIGJvdGggIXdhaXQgKF9fR0ZQX1dBSVQgbm90IHNldCkgYW5kIHVzZSBlbWVyZ2VuY3kgcG9vbCAqLwogI2RlZmluZSBHRlBfQVRPTUlDCShfX0dGUF9ISUdIKQogI2RlZmluZSBHRlBfTk9JTwkoX19HRlBfV0FJVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggYjIwOTM5Mi4uMzA2YWNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTgwLDcgKzgwLDcgQEAKICAqIEBmaXJzdDoJCXBvaW50ZXIgdG8gdGhlIHRpbWVyIG5vZGUgd2hpY2ggZXhwaXJlcyBmaXJzdAogICogQHJlc29sdXRpb246CQl0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2ssIGluIG5hbm9zZWNvbmRzCiAgKiBAZ2V0X3RpbWU6CQlmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBjbG9jawotICogQGdldF9zb2ZpcnFfdGltZToJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBzb2Z0aXJxCisgKiBAZ2V0X3NvZnRpcnFfdGltZToJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBzb2Z0aXJxCiAgKiBAY3Vycl90aW1lcjoJCXRoZSB0aW1lciB3aGljaCBpcyBleGVjdXRpbmcgYSBjYWxsYmFjayByaWdodCBub3cKICAqIEBzb2Z0aXJxX3RpbWU6CXRoZSB0aW1lIHdoZW4gcnVubmluZyB0aGUgaHJ0aW1lciBxdWV1ZSBpbiB0aGUgc29mdGlycQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyby5oIGIvaW5jbHVkZS9saW51eC9pMm8uaAppbmRleCBkZDdkNjI3Li5jMTE1ZTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyby5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJvLmgKQEAgLTExMTQsOCArMTExNCwxMSBAQAogCiAJbW1zZy0+bWZhID0gcmVhZGwoYy0+aW5fcG9ydCk7CiAJaWYgKHVubGlrZWx5KG1tc2ctPm1mYSA+PSBjLT5pbl9xdWV1ZS5sZW4pKSB7CisJCXUzMiBtZmEgPSBtbXNnLT5tZmE7CisKIAkJbWVtcG9vbF9mcmVlKG1tc2csIGMtPmluX21zZy5tZW1wb29sKTsKLQkJaWYobW1zZy0+bWZhID09IEkyT19RVUVVRV9FTVBUWSkKKworCQlpZiAobWZhID09IEkyT19RVUVVRV9FTVBUWSkKIAkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDhkMmRiNDEuLmE4YmVmMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMTIyMCw3ICsxMjIwLDYgQEAKIGVudW0gewogCS8qIFVzZXMgSVNBIGNvbnRyb2wgcG9ydHMgbm90IFBDSSBvbmVzLiAqLwogCUlERVBDSV9GTEFHX0lTQV9QT1JUUwkJPSAoMSA8PCAwKSwKLQlJREVQQ0lfRkxBR19GT1JDRV9QREMJCT0gKDEgPDwgMSksCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggZWQwYWM3Yy4uOTNkY2JlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTI0NSw3ICsyNDUsOCBAQAogI2RlZmluZSBfX2NwdWV4aXRkYXRhCV9fZXhpdGRhdGEKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpIHx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZX01PRFVMRSkKICNkZWZpbmUgX19tZW1pbml0CiAjZGVmaW5lIF9fbWVtaW5pdGRhdGEKICNkZWZpbmUgX19tZW1leGl0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggMWQ0ZTM0MS4uY2UxYTc1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTIsOCArMTIsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2Vsc2UKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgpAQCAtNTgsNiArNTYsOCBAQAogCiAjZGVmaW5lIEVWSU9DR1ZFUlNJT04JCV9JT1IoJ0UnLCAweDAxLCBpbnQpCQkJLyogZ2V0IGRyaXZlciB2ZXJzaW9uICovCiAjZGVmaW5lIEVWSU9DR0lECQlfSU9SKCdFJywgMHgwMiwgc3RydWN0IGlucHV0X2lkKQkvKiBnZXQgZGV2aWNlIElEICovCisjZGVmaW5lIEVWSU9DR1JFUAkJX0lPUignRScsIDB4MDMsIGludFsyXSkJCQkvKiBnZXQgcmVwZWF0IHNldHRpbmdzICovCisjZGVmaW5lIEVWSU9DU1JFUAkJX0lPVygnRScsIDB4MDMsIGludFsyXSkJCQkvKiBzZXQgcmVwZWF0IHNldHRpbmdzICovCiAjZGVmaW5lIEVWSU9DR0tFWUNPREUJCV9JT1IoJ0UnLCAweDA0LCBpbnRbMl0pCQkJLyogZ2V0IGtleWNvZGUgKi8KICNkZWZpbmUgRVZJT0NTS0VZQ09ERQkJX0lPVygnRScsIDB4MDQsIGludFsyXSkJCQkvKiBzZXQga2V5Y29kZSAqLwogCkBAIC0zNDUsNiArMzQ1LDggQEAKICNkZWZpbmUgS0VZX1NBVkUJCTIzNAogI2RlZmluZSBLRVlfRE9DVU1FTlRTCQkyMzUKIAorI2RlZmluZSBLRVlfQkFUVEVSWQkJMjM2CisKICNkZWZpbmUgS0VZX1VOS05PV04JCTI0MAogCiAjZGVmaW5lIEJUTl9NSVNDCQkweDEwMApAQCAtNDIxLDcgKzQyMyw3IEBACiAjZGVmaW5lIEJUTl9HRUFSX1VQCQkweDE1MQogCiAjZGVmaW5lIEtFWV9PSwkJCTB4MTYwCi0jZGVmaW5lIEtFWV9TRUxFQ1QgCQkweDE2MQorI2RlZmluZSBLRVlfU0VMRUNUCQkweDE2MQogI2RlZmluZSBLRVlfR09UTwkJMHgxNjIKICNkZWZpbmUgS0VZX0NMRUFSCQkweDE2MwogI2RlZmluZSBLRVlfUE9XRVIyCQkweDE2NApAQCAtNTEyLDYgKzUxNCwxNSBAQAogI2RlZmluZSBLRVlfRk5fUwkJMHgxZTMKICNkZWZpbmUgS0VZX0ZOX0IJCTB4MWU0CiAKKyNkZWZpbmUgS0VZX0JSTF9ET1QxCQkweDFmMQorI2RlZmluZSBLRVlfQlJMX0RPVDIJCTB4MWYyCisjZGVmaW5lIEtFWV9CUkxfRE9UMwkJMHgxZjMKKyNkZWZpbmUgS0VZX0JSTF9ET1Q0CQkweDFmNAorI2RlZmluZSBLRVlfQlJMX0RPVDUJCTB4MWY1CisjZGVmaW5lIEtFWV9CUkxfRE9UNgkJMHgxZjYKKyNkZWZpbmUgS0VZX0JSTF9ET1Q3CQkweDFmNworI2RlZmluZSBLRVlfQlJMX0RPVDgJCTB4MWY4CisKIC8qIFdlIGF2b2lkIGxvdyBjb21tb24ga2V5cyBpbiBtb2R1bGUgYWxpYXNlcyBzbyB0aGV5IGRvbid0IGdldCBodWdlLiAqLwogI2RlZmluZSBLRVlfTUlOX0lOVEVSRVNUSU5HCUtFWV9NVVRFCiAjZGVmaW5lIEtFWV9NQVgJCQkweDFmZgpAQCAtNTY4LDE1ICs1NzksMTAgQEAKICAqIFN3aXRjaCBldmVudHMKICAqLwogCi0jZGVmaW5lIFNXXzAJCTB4MDAKLSNkZWZpbmUgU1dfMQkJMHgwMQotI2RlZmluZSBTV18yCQkweDAyCi0jZGVmaW5lIFNXXzMJCTB4MDMKLSNkZWZpbmUgU1dfNAkJMHgwNAotI2RlZmluZSBTV181CQkweDA1Ci0jZGVmaW5lIFNXXzYJCTB4MDYKLSNkZWZpbmUgU1dfNwkJMHgwNwotI2RlZmluZSBTV19NQVgJCTB4MGYKKyNkZWZpbmUgU1dfTElECQkJMHgwMCAgLyogc2V0ID0gbGlkIHNodXQgKi8KKyNkZWZpbmUgU1dfVEFCTEVUX01PREUJCTB4MDEgIC8qIHNldCA9IHRhYmxldCBtb2RlICovCisjZGVmaW5lIFNXX0hFQURQSE9ORV9JTlNFUlQJMHgwMiAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KKyNkZWZpbmUgU1dfTUFYCQkJMHgwZgogCiAvKgogICogTWlzYyBldmVudHMKQEAgLTc5Niw1MiArODAyLDE2IEBACiAKICNkZWZpbmUgRkZfTUFYCQkweDdmCiAKLXN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgewotCi0Ja2VybmVsX3Vsb25nX3QgZmxhZ3M7Ci0KLQlzdHJ1Y3QgaW5wdXRfaWQgaWQ7Ci0KLQlrZXJuZWxfdWxvbmdfdCBldmJpdFtFVl9NQVgvQklUU19QRVJfTE9ORysxXTsKLQlrZXJuZWxfdWxvbmdfdCBrZXliaXRbS0VZX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCWtlcm5lbF91bG9uZ190IHJlbGJpdFtSRUxfTUFYL0JJVFNfUEVSX0xPTkcrMV07Ci0Ja2VybmVsX3Vsb25nX3QgYWJzYml0W0FCU19NQVgvQklUU19QRVJfTE9ORysxXTsKLQlrZXJuZWxfdWxvbmdfdCBtc2NiaXRbTVNDX01BWC9CSVRTX1BFUl9MT05HKzFdOwotCWtlcm5lbF91bG9uZ190IGxlZGJpdFtMRURfTUFYL0JJVFNfUEVSX0xPTkcrMV07Ci0Ja2VybmVsX3Vsb25nX3Qgc25kYml0W1NORF9NQVgvQklUU19QRVJfTE9ORysxXTsKLQlrZXJuZWxfdWxvbmdfdCBmZmJpdFtGRl9NQVgvQklUU19QRVJfTE9ORysxXTsKLQlrZXJuZWxfdWxvbmdfdCBzd2JpdFtTV19NQVgvQklUU19QRVJfTE9ORysxXTsKLQotCWtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOwotfTsKLQotLyoKLSAqIFN0cnVjdHVyZSBmb3IgaG90cGx1ZyAmIGRldmljZTwtPmRyaXZlciBtYXRjaGluZy4KLSAqLwotCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9CVVMJMQotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SCTIKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1BST0RVQ1QJNAotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVSU0lPTgk4Ci0KLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUCTB4MDEwCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQJMHgwMjAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1JFTEJJVAkweDA0MAotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQUJTQklUCTB4MDgwCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9NU0NJVAkweDEwMAotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfTEVEQklUCTB4MjAwCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TTkRCSVQJMHg0MDAKLSNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0ZGQklUCTB4ODAwCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TV0JJVAkweDEwMDAKLQogI2lmZGVmIF9fS0VSTkVMX18KIAogLyoKICAqIEluLWtlcm5lbCBkZWZpbml0aW9ucy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiAjZGVmaW5lIE5CSVRTKHgpICgoKHgpL0JJVFNfUEVSX0xPTkcpKzEpCiAjZGVmaW5lIEJJVCh4KQkoMVVMPDwoKHgpJUJJVFNfUEVSX0xPTkcpKQpAQCAtOTI5LDcgKzg5OSw3IEBACiAKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpncmFiOwogCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CS8qIHNlcmlhbGl6ZXMgb3BlbiBhbmQgY2xvc2Ugb3BlcmF0aW9ucyAqLworCXN0cnVjdCBtdXRleCBtdXRleDsJLyogc2VyaWFsaXplcyBvcGVuIGFuZCBjbG9zZSBvcGVyYXRpb25zICovCiAJdW5zaWduZWQgaW50IHVzZXJzOwogCiAJc3RydWN0IGNsYXNzX2RldmljZSBjZGV2OwpAQCAtOTQyLDkgKzkxMiw0OSBAQAogfTsKICNkZWZpbmUgdG9faW5wdXRfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaW5wdXRfZGV2LCBjZGV2KQogCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VcCisvKgorICogVmVyaWZ5IHRoYXQgd2UgYXJlIGluIHN5bmMgd2l0aCBpbnB1dF9kZXZpY2VfaWQgbW9kX2RldmljZXRhYmxlLmggI2RlZmluZXMKKyAqLworCisjaWYgRVZfTUFYICE9IElOUFVUX0RFVklDRV9JRF9FVl9NQVgKKyNlcnJvciAiRVZfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfRVZfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjaWYgS0VZX01BWCAhPSBJTlBVVF9ERVZJQ0VfSURfS0VZX01BWAorI2Vycm9yICJLRVlfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfS0VZX01BWCBkbyBub3QgbWF0Y2giCisjZW5kaWYKKworI2lmIFJFTF9NQVggIT0gSU5QVVRfREVWSUNFX0lEX1JFTF9NQVgKKyNlcnJvciAiUkVMX01BWCBhbmQgSU5QVVRfREVWSUNFX0lEX1JFTF9NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNpZiBBQlNfTUFYICE9IElOUFVUX0RFVklDRV9JRF9BQlNfTUFYCisjZXJyb3IgIkFCU19NQVggYW5kIElOUFVUX0RFVklDRV9JRF9BQlNfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjaWYgTVNDX01BWCAhPSBJTlBVVF9ERVZJQ0VfSURfTVNDX01BWAorI2Vycm9yICJNU0NfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfTVNDX01BWCBkbyBub3QgbWF0Y2giCisjZW5kaWYKKworI2lmIExFRF9NQVggIT0gSU5QVVRfREVWSUNFX0lEX0xFRF9NQVgKKyNlcnJvciAiTEVEX01BWCBhbmQgSU5QVVRfREVWSUNFX0lEX0xFRF9NQVggZG8gbm90IG1hdGNoIgorI2VuZGlmCisKKyNpZiBTTkRfTUFYICE9IElOUFVUX0RFVklDRV9JRF9TTkRfTUFYCisjZXJyb3IgIlNORF9NQVggYW5kIElOUFVUX0RFVklDRV9JRF9TTkRfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjaWYgRkZfTUFYICE9IElOUFVUX0RFVklDRV9JRF9GRl9NQVgKKyNlcnJvciAiRkZfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfRkZfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjaWYgU1dfTUFYICE9IElOUFVUX0RFVklDRV9JRF9TV19NQVgKKyNlcnJvciAiU1dfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfU1dfTUFYIGRvIG5vdCBtYXRjaCIKKyNlbmRpZgorCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgXAogCShJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQlVTIHwgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFTkRPUiB8IElOUFVUX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKQotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OXAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OIFwKIAkoSU5QVVRfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRVJTSU9OKQogCiBzdHJ1Y3QgaW5wdXRfaGFuZGxlOwpAQCAtOTk1LDExICsxMDA1LDYgQEAKIAogc3RydWN0IGlucHV0X2RldiAqaW5wdXRfYWxsb2NhdGVfZGV2aWNlKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfZnJlZV9kZXZpY2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCWtmcmVlKGRldik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZ2V0X2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIHRvX2lucHV0X2RldihjbGFzc19kZXZpY2VfZ2V0KCZkZXYtPmNkZXYpKTsKQEAgLTEwMTAsNiArMTAxNSwxMiBAQAogCWNsYXNzX2RldmljZV9wdXQoJmRldi0+Y2Rldik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9mcmVlX2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJaWYgKGRldikKKwkJaW5wdXRfcHV0X2RldmljZShkZXYpOworfQorCiBpbnQgaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKik7CiB2b2lkIGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKaW5kZXggOTk5MDVlMS4uMDQzMzc2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKQEAgLTM2LDYgKzM2LDggQEAKIC8qIExBVENIIGlzIHVzZWQgaW4gdGhlIGludGVydmFsIHRpbWVyIGFuZCBmdGFwZSBzZXR1cC4gKi8KICNkZWZpbmUgTEFUQ0ggICgoQ0xPQ0tfVElDS19SQVRFICsgSFovMikgLyBIWikJLyogRm9yIGRpdmlkZXIgKi8KIAorI2RlZmluZSBMQVRDSF9IUEVUICgoSFBFVF9USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQorCiAvKiBTdXBwb3NlIHdlIHdhbnQgdG8gZGV2aWRlIHR3byBudW1iZXJzIE5PTSBhbmQgREVOOiBOT00vREVOLCB0aGUgd2UgY2FuCiAgKiBpbXByb3ZlIGFjY3VyYWN5IGJ5IHNoaWZ0aW5nIExTSCBiaXRzLCBoZW5jZSBjYWxjdWxhdGluZzoKICAqICAgICAoTk9NIDw8IExTSCkgLyBERU4KQEAgLTUxLDkgKzUzLDEzIEBACiAvKiBIWiBpcyB0aGUgcmVxdWVzdGVkIHZhbHVlLiBBQ1RIWiBpcyBhY3R1YWwgSFogKCI8PCA4IiBpcyBmb3IgYWNjdXJhY3kpICovCiAjZGVmaW5lIEFDVEhaIChTSF9ESVYgKENMT0NLX1RJQ0tfUkFURSwgTEFUQ0gsIDgpKQogCisjZGVmaW5lIEFDVEhaX0hQRVQgKFNIX0RJViAoSFBFVF9USUNLX1JBVEUsIExBVENIX0hQRVQsIDgpKQorCiAvKiBUSUNLX05TRUMgaXMgdGhlIHRpbWUgYmV0d2VlbiB0aWNrcyBpbiBuc2VjIGFzc3VtaW5nIHJlYWwgQUNUSFogKi8KICNkZWZpbmUgVElDS19OU0VDIChTSF9ESVYgKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaLCA4KSkKIAorI2RlZmluZSBUSUNLX05TRUNfSFBFVCAoU0hfRElWKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaX0hQRVQsIDgpKQorCiAvKiBUSUNLX1VTRUMgaXMgdGhlIHRpbWUgYmV0d2VlbiB0aWNrcyBpbiB1c2VjIGFzc3VtaW5nIGZha2UgVVNFUl9IWiAqLwogI2RlZmluZSBUSUNLX1VTRUMgKCgxMDAwMDAwVUwgKyBVU0VSX0haLzIpIC8gVVNFUl9IWikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCmluZGV4IGU4N2MzMmEuLjRlYjg1MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKQEAgLTEzNSw2ICsxMzUsOCBAQAogCiAjZGVmaW5lIFUoeCkgKCh4KSBeIDB4ZjAwMCkKIAorI2RlZmluZSBCUkxfVUNfUk9XIDB4MjgwMAorCiAvKiBrZXlib2FyZC5jICovCiAKIHN0cnVjdCBjb25zb2xlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggYTM3MjBmOS4uZjRmYzU3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMjQsNiArMTI0LDcgQEAKIGV4dGVybiBjaGFyICpnZXRfb3B0aW9ucyhjb25zdCBjaGFyICpzdHIsIGludCBuaW50cywgaW50ICppbnRzKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWVtcGFyc2UoY2hhciAqcHRyLCBjaGFyICoqcmV0cHRyKTsKIAorZXh0ZXJuIGludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IF9fa2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIGludCBrZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IHNlc3Npb25fb2ZfcGdycChpbnQgcGdycCk7CkBAIC0xNzYsNyArMTc3LDcgQEAKIAogZXh0ZXJuIHZvaWQgYnVzdF9zcGlubG9ja3MoaW50IHllcyk7CiBleHRlcm4gaW50IG9vcHNfaW5fcHJvZ3Jlc3M7CQkvKiBJZiBzZXQsIGFuIG9vcHMsIHBhbmljKCksIEJVRygpIG9yIGRpZSgpIGlzIGluIHByb2dyZXNzICovCi1leHRlcm4gX19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzIGludCBwYW5pY190aW1lb3V0OworZXh0ZXJuIGludCBwYW5pY190aW1lb3V0OwogZXh0ZXJuIGludCBwYW5pY19vbl9vb3BzOwogZXh0ZXJuIGludCB0YWludGVkOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnByaW50X3RhaW50ZWQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmggYi9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmgKaW5kZXggMDg0ODgwNC4uZGU3Njg0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgva2V5Ym9hcmQuaApAQCAtNDQsNiArNDQsNyBAQAogI2RlZmluZSBLVF9BU0NJSQk5CiAjZGVmaW5lIEtUX0xPQ0sJCTEwCiAjZGVmaW5lIEtUX1NMT0NLCTEyCisjZGVmaW5lIEtUX0JSTAkJMTQKIAogI2RlZmluZSBLKHQsdikJCSgoKHQpPDw4KXwodikpCiAjZGVmaW5lIEtUWVAoeCkJCSgoeCkgPj4gOCkKQEAgLTQyNyw1ICs0MjgsMTcgQEAKIAogI2RlZmluZSBOUl9MT0NLCQk4CiAKKyNkZWZpbmUgS19CUkxfQkxBTksgICAgIEsoS1RfQlJMLCAwKQorI2RlZmluZSBLX0JSTF9ET1QxICAgICAgSyhLVF9CUkwsIDEpCisjZGVmaW5lIEtfQlJMX0RPVDIgICAgICBLKEtUX0JSTCwgMikKKyNkZWZpbmUgS19CUkxfRE9UMyAgICAgIEsoS1RfQlJMLCAzKQorI2RlZmluZSBLX0JSTF9ET1Q0ICAgICAgSyhLVF9CUkwsIDQpCisjZGVmaW5lIEtfQlJMX0RPVDUgICAgICBLKEtUX0JSTCwgNSkKKyNkZWZpbmUgS19CUkxfRE9UNiAgICAgIEsoS1RfQlJMLCA2KQorI2RlZmluZSBLX0JSTF9ET1Q3ICAgICAgSyhLVF9CUkwsIDcpCisjZGVmaW5lIEtfQlJMX0RPVDggICAgICBLKEtUX0JSTCwgOCkKKworI2RlZmluZSBOUl9CUkwJCTkKKwogI2RlZmluZSBNQVhfRElBQ1IJMjU2CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKaW5kZXggNGNiMTIxNC4uYzE4N2M1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjZGVmaW5lIEtPQkpfTkFNRV9MRU4JCQkyMApAQCAtNTYsNiArNTcsNyBAQAogCXN0cnVjdCBrc2V0CQkqIGtzZXQ7CiAJc3RydWN0IGtvYmpfdHlwZQkqIGt0eXBlOwogCXN0cnVjdCBkZW50cnkJCSogZGVudHJ5OworCXdhaXRfcXVldWVfaGVhZF90CXBvbGw7CiB9OwogCiBleHRlcm4gaW50IGtvYmplY3Rfc2V0X25hbWUoc3RydWN0IGtvYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pCkBAIC0yNTUsOSArMjU3LDggQEAKIH07CiAKIGV4dGVybiBpbnQgc3Vic3lzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdWJzeXN0ZW0gKiAsIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlICopOwotZXh0ZXJuIHZvaWQgc3Vic3lzX3JlbW92ZV9maWxlKHN0cnVjdCBzdWJzeXN0ZW0gKiAsIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlICopOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgZGVmaW5lZChDT05GSUdfTkVUKQorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpCiB2b2lkIGtvYmplY3RfdWV2ZW50KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbik7CiAKIGludCBhZGRfdWV2ZW50X3ZhcihjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBpbnQgKmN1cl9pbmRleCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKaW5kZXggNDYxN2U3NS4uZGMyM2M3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKQEAgLTE5LDM5ICsxOSwzOCBAQAogICovCiAKIGVudW0gbGVkX2JyaWdodG5lc3MgewotCUxFRF9PRkYgPSAwLAotCUxFRF9IQUxGID0gMTI3LAotCUxFRF9GVUxMID0gMjU1LAorCUxFRF9PRkYJCT0gMCwKKwlMRURfSEFMRgk9IDEyNywKKwlMRURfRlVMTAk9IDI1NSwKIH07CiAKIHN0cnVjdCBsZWRfY2xhc3NkZXYgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGJyaWdodG5lc3M7Ci0JaW50IGZsYWdzOwotI2RlZmluZSBMRURfU1VTUEVOREVEICAgICAgICgxIDw8IDApCisJY29uc3QgY2hhcgkJKm5hbWU7CisJaW50CQkJIGJyaWdodG5lc3M7CisJaW50CQkJIGZsYWdzOwogCi0JLyogQSBmdW5jdGlvbiB0byBzZXQgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIGxlZCAqLwotCXZvaWQgKCpicmlnaHRuZXNzX3NldCkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKTsKKyNkZWZpbmUgTEVEX1NVU1BFTkRFRAkJKDEgPDwgMCkKIAotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQkvKiBMRUQgRGV2aWNlIGxpbmtlZCBsaXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOworCS8qIFNldCBMRUQgYnJpZ2h0bmVzcyBsZXZlbCAqLworCXZvaWQJCSgqYnJpZ2h0bmVzc19zZXQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcyk7CiAKLQkvKiBUcmlnZ2VyIGRhdGEgKi8KLQljaGFyICpkZWZhdWx0X3RyaWdnZXI7CisJc3RydWN0IGNsYXNzX2RldmljZQkqY2xhc3NfZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJIG5vZGU7CQkJLyogTEVEIERldmljZSBsaXN0ICovCisJY2hhcgkJCSpkZWZhdWx0X3RyaWdnZXI7CS8qIFRyaWdnZXIgdG8gdXNlICovCisKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwotCXJ3bG9ja190IHRyaWdnZXJfbG9jazsKIAkvKiBQcm90ZWN0cyB0aGUgdHJpZ2dlciBkYXRhIGJlbG93ICovCisJcndsb2NrX3QJCSB0cmlnZ2VyX2xvY2s7CiAKLQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXI7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0cmlnX2xpc3Q7Ci0Jdm9pZCAqdHJpZ2dlcl9kYXRhOworCXN0cnVjdCBsZWRfdHJpZ2dlcgkqdHJpZ2dlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSB0cmlnX2xpc3Q7CisJdm9pZAkJCSp0cmlnZ2VyX2RhdGE7CiAjZW5kaWYKIH07CiAKIGV4dGVybiBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKLQkJCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CisJCQkJIHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIGV4dGVybiB2b2lkIGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIGV4dGVybiB2b2lkIGxlZF9jbGFzc2Rldl9zdXNwZW5kKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIGV4dGVybiB2b2lkIGxlZF9jbGFzc2Rldl9yZXN1bWUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwpAQCAtNjUsMTYgKzY0LDE2IEBACiAKIHN0cnVjdCBsZWRfdHJpZ2dlciB7CiAJLyogVHJpZ2dlciBQcm9wZXJ0aWVzICovCi0JY29uc3QgY2hhciAqbmFtZTsKLQl2b2lkICgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKLQl2b2lkICgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOworCWNvbnN0IGNoYXIJICpuYW1lOworCXZvaWQJCSgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKKwl2b2lkCQkoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAogCS8qIExFRHMgdW5kZXIgY29udHJvbCBieSB0aGlzIHRyaWdnZXIgKGZvciBzaW1wbGUgdHJpZ2dlcnMpICovCi0Jcndsb2NrX3QgbGVkZGV2X2xpc3RfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxlZF9jZGV2czsKKwlyd2xvY2tfdAkgIGxlZGRldl9saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAgbGVkX2NkZXZzOwogCiAJLyogTGluayB0byBuZXh0IHJlZ2lzdGVyZWQgdHJpZ2dlciAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbmV4dF90cmlnOworCXN0cnVjdCBsaXN0X2hlYWQgIG5leHRfdHJpZzsKIH07CiAKIC8qIFJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgZm9yIGNvbXBsZXggdHJpZ2dlcnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDBkNjEzNTcuLmI4MGQyZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNTIzLDcgKzUyMyw2IEBACiBleHRlcm4gaW50IGF0YV9zY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGF0YV9zY3NpX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwotZXh0ZXJuIGludCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KTsKIGV4dGVybiB2b2lkIGF0YV9laF9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9laF9xY19yZXRyeShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlicHMyLmggYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCmluZGV4IGE3MTBiZGQuLjA4YTQ1MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlicHMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJwczIuaApAQCAtMjgsNyArMjgsNyBAQAogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKIAkvKiBFbnN1cmVzIHRoYXQgb25seSBvbmUgY29tbWFuZCBpcyBleGVjdXRpbmcgYXQgYSB0aW1lICovCi0Jc3RydWN0IHNlbWFwaG9yZSBjbWRfc2VtOworCXN0cnVjdCBtdXRleCBjbWRfbXV0ZXg7CiAKIAkvKiBVc2VkIHRvIHNpZ25hbCBjb21wbGV0aW9uIGZyb20gaW50ZXJydXB0IGhhbmRsZXIgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCA2NzI1OGI0Li43NmYwNTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtNjE5LDcgKzYxOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9kZWxfaW5pdChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbikKIHsKLQlpZiAobi0+cHByZXYpICB7CisJaWYgKCFobGlzdF91bmhhc2hlZChuKSkgewogCQlfX2hsaXN0X2RlbChuKTsKIAkJSU5JVF9ITElTVF9OT0RFKG4pOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbTQ4dDg2LmggYi9pbmNsdWRlL2xpbnV4L200OHQ4Ni5oCmluZGV4IDkwNjUxOTkuLjkxNWQ2YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbTQ4dDg2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tNDh0ODYuaApAQCAtMTEsNiArMTEsNiBAQAogCiBzdHJ1Y3QgbTQ4dDg2X29wcwogewotCXZvaWQgKCp3cml0ZWIpKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcik7Ci0JdW5zaWduZWQgY2hhciAoKnJlYWRiKSh1bnNpZ25lZCBsb25nIGFkZHIpOworCXZvaWQgKCp3cml0ZWJ5dGUpKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcik7CisJdW5zaWduZWQgY2hhciAoKnJlYWRieXRlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAppbmRleCA5NjhiMWFhLi45MTEyMDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC01OCw4ICs1OCw2IEBACiAvKiBuZWVkIHNvbWUgZGVmaW5lcyBmb3IgdGhlc2UgZm9yIGFyY2hzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCAqLwogZXh0ZXJuIHZvaWQgb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogLyogVk0gaW50ZXJmYWNlIHRoYXQgbWF5IGJlIHVzZWQgYnkgZmlybXdhcmUgaW50ZXJmYWNlICovCi1leHRlcm4gaW50IGFkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7Ci1leHRlcm4gaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiBleHRlcm4gaW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAogLyogcmVhc29uYWJseSBnZW5lcmljIGludGVyZmFjZSB0byBleHBhbmQgdGhlIHBoeXNpY2FsIHBhZ2VzIGluIGEgem9uZSAgKi8KQEAgLTkyLDExICs5MCw2IEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fYWRkX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQotewotCXJldHVybiBtaHBfbm90aW1wbGVtZW50ZWQoX19GVU5DVElPTl9fKTsKLX0KICNlbmRpZiAvKiAhIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogc3RhdGljIGlubGluZSBpbnQgX19yZW1vdmVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCkBAIC0xMDUsNCArOTgsOCBAQAogCWR1bXBfc3RhY2soKTsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KKworZXh0ZXJuIGludCBhZGRfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpOworZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpOworCiAjZW5kaWYgLyogX19MSU5VWF9NRU1PUllfSE9UUExVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaAppbmRleCA2YTc2MjFiLi5mNWZkY2ExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CitzdHJ1Y3QgbW1fc3RydWN0OwogCiAjaWZkZWYgQ09ORklHX05VTUEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDZhYTAxNmYuLjExNTQ2ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTIyOSwxMCArMjI5LDkgQEAKIAkJdW5zaWduZWQgbG9uZyBwcml2YXRlOwkJLyogTWFwcGluZy1wcml2YXRlIG9wYXF1ZSBkYXRhOgogCQkJCQkgCSAqIHVzdWFsbHkgdXNlZCBmb3IgYnVmZmVyX2hlYWRzCiAJCQkJCQkgKiBpZiBQYWdlUHJpdmF0ZSBzZXQ7IHVzZWQgZm9yCi0JCQkJCQkgKiBzd3BfZW50cnlfdCBpZiBQYWdlU3dhcENhY2hlLgotCQkJCQkJICogV2hlbiBwYWdlIGlzIGZyZWUsIHRoaXMKKwkJCQkJCSAqIHN3cF9lbnRyeV90IGlmIFBhZ2VTd2FwQ2FjaGU7CiAJCQkJCQkgKiBpbmRpY2F0ZXMgb3JkZXIgaW4gdGhlIGJ1ZGR5Ci0JCQkJCQkgKiBzeXN0ZW0uCisJCQkJCQkgKiBzeXN0ZW0gaWYgUEdfYnVkZHkgaXMgc2V0LgogCQkJCQkJICovCiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwkvKiBJZiBsb3cgYml0IGNsZWFyLCBwb2ludHMgdG8KIAkJCQkJCSAqIGlub2RlIGFkZHJlc3Nfc3BhY2UsIG9yIE5VTEwuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggMzBkZDk3OC4uOTkxYTM3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtMjgsNiArMjgsNyBAQAogCXVuc2lnbmVkIHNob3J0CQljbWRjbGFzczsKIAl1bnNpZ25lZCBzaG9ydAkJdGFjY19jbGtzOwogCXVuc2lnbmVkIGludAkJdGFjY19uczsKKwl1bnNpZ25lZCBpbnQJCXIyd19mYWN0b3I7CiAJdW5zaWduZWQgaW50CQltYXhfZHRyOwogCXVuc2lnbmVkIGludAkJcmVhZF9ibGtiaXRzOwogCXVuc2lnbmVkIGludAkJd3JpdGVfYmxrYml0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggYmRjNTU2ZC4uMDNhMTRhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKQEAgLTY5LDYgKzY5LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXRpbWVvdXRfbnM7CS8qIGRhdGEgdGltZW91dCAoaW4gbnMsIG1heCA4MG1zKSAqLwogCXVuc2lnbmVkIGludAkJdGltZW91dF9jbGtzOwkvKiBkYXRhIHRpbWVvdXQgKGluIGNsb2NrcykgKi8KIAl1bnNpZ25lZCBpbnQJCWJsa3N6X2JpdHM7CS8qIGRhdGEgYmxvY2sgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJYmxrc3o7CQkvKiBkYXRhIGJsb2NrIHNpemUgKi8KIAl1bnNpZ25lZCBpbnQJCWJsb2NrczsJCS8qIG51bWJlciBvZiBibG9ja3MgKi8KIAl1bnNpZ25lZCBpbnQJCWVycm9yOwkJLyogZGF0YSBlcnJvciAqLwogCXVuc2lnbmVkIGludAkJZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBiNWMyMTEyLi4yZDgzMzcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyogRnJlZSBtZW1vcnkgbWFuYWdlbWVudCAtIHpvbmVkIGJ1ZGR5IGFsbG9jYXRvci4gICovCiAjaWZuZGVmIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSCkBAIC0yMiw2ICsyMyw3IEBACiAjZWxzZQogI2RlZmluZSBNQVhfT1JERVIgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIKICNlbmRpZgorI2RlZmluZSBNQVhfT1JERVJfTlJfUEFHRVMgKDEgPDwgKE1BWF9PUkRFUiAtIDEpKQogCiBzdHJ1Y3QgZnJlZV9hcmVhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IDdiMDhjMTEuLmY2OTc3NzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtMjQ5LDQgKzI0OSw1MiBAQAogCV9fdTE2IGlkOwogfTsKIAorLyogSW5wdXQgKi8KKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0VWX01BWAkJMHgxZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfS0VZX01BWAkJMHgxZmYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1JFTF9NQVgJCTB4MGYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0FCU19NQVgJCTB4M2YKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01TQ19NQVgJCTB4MDcKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0xFRF9NQVgJCTB4MGYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1NORF9NQVgJCTB4MDcKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0ZGX01BWAkJMHg3ZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfU1dfTUFYCQkweDBmCisKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUwkxCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IJMgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVAk0CisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRVJTSU9OCTgKKworI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQJMHgwMDEwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQJMHgwMDIwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9SRUxCSVQJMHgwMDQwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQJMHgwMDgwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9NU0NJVAkweDAxMDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0xFREJJVAkweDAyMDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1NOREJJVAkweDA0MDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0ZGQklUCTB4MDgwMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU1dCSVQJMHgxMDAwCisKK3N0cnVjdCBpbnB1dF9kZXZpY2VfaWQgeworCisJa2VybmVsX3Vsb25nX3QgZmxhZ3M7CisKKwlfX3UxNiBidXN0eXBlOworCV9fdTE2IHZlbmRvcjsKKwlfX3UxNiBwcm9kdWN0OworCV9fdTE2IHZlcnNpb247CisKKwlrZXJuZWxfdWxvbmdfdCBldmJpdFtJTlBVVF9ERVZJQ0VfSURfRVZfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCWtlcm5lbF91bG9uZ190IGtleWJpdFtJTlBVVF9ERVZJQ0VfSURfS0VZX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKwlrZXJuZWxfdWxvbmdfdCByZWxiaXRbSU5QVVRfREVWSUNFX0lEX1JFTF9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisJa2VybmVsX3Vsb25nX3QgYWJzYml0W0lOUFVUX0RFVklDRV9JRF9BQlNfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCWtlcm5lbF91bG9uZ190IG1zY2JpdFtJTlBVVF9ERVZJQ0VfSURfTVNDX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKwlrZXJuZWxfdWxvbmdfdCBsZWRiaXRbSU5QVVRfREVWSUNFX0lEX0xFRF9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisJa2VybmVsX3Vsb25nX3Qgc25kYml0W0lOUFVUX0RFVklDRV9JRF9TTkRfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCWtlcm5lbF91bG9uZ190IGZmYml0W0lOUFVUX0RFVklDRV9JRF9GRl9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisJa2VybmVsX3Vsb25nX3Qgc3diaXRbSU5QVVRfREVWSUNFX0lEX1NXX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOworfTsKKwogI2VuZGlmIC8qIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L212NjQzeHguaCBiL2luY2x1ZGUvbGludXgvbXY2NDN4eC5oCmluZGV4IDk1NWQzMDYuLmVkZmEwMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXY2NDN4eC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXY2NDN4eC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9fQVNNX01WNjQzWFhfSAogI2RlZmluZSBfX0FTTV9NVjY0M1hYX0gKIAotI2lmZGVmIF9fTUlQU19fCisjaWZkZWYgX19taXBzX18KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hcnZlbGwuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNDBjY2Y4Yy4uZjQxNjliYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC00MzMsOCArNDMzLDcgQEAKIAogCS8qIHJlZ2lzdGVyL3VucmVnaXN0ZXIgc3RhdGUgbWFjaGluZSAqLwogCWVudW0geyBORVRSRUdfVU5JTklUSUFMSVpFRD0wLAotCSAgICAgICBORVRSRUdfUkVHSVNURVJJTkcsCS8qIGNhbGxlZCByZWdpc3Rlcl9uZXRkZXZpY2UgKi8KLQkgICAgICAgTkVUUkVHX1JFR0lTVEVSRUQsCS8qIGNvbXBsZXRlZCByZWdpc3RlciB0b2RvICovCisJICAgICAgIE5FVFJFR19SRUdJU1RFUkVELAkvKiBjb21wbGV0ZWQgcmVnaXN0ZXJfbmV0ZGV2aWNlICovCiAJICAgICAgIE5FVFJFR19VTlJFR0lTVEVSSU5HLAkvKiBjYWxsZWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2UgKi8KIAkgICAgICAgTkVUUkVHX1VOUkVHSVNURVJFRCwJLyogY29tcGxldGVkIHVucmVnaXN0ZXIgdG9kbyAqLwogCSAgICAgICBORVRSRUdfUkVMRUFTRUQsCQkvKiBjYWxsZWQgZnJlZV9uZXRkZXYgKi8KQEAgLTUwNiw2ICs1MDUsOCBAQAogCiAJLyogY2xhc3MvbmV0L25hbWUgZW50cnkgKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlCWNsYXNzX2RldjsKKwkvKiBzcGFjZSBmb3Igb3B0aW9uYWwgc3RhdGlzdGljcyBhbmQgd2lyZWxlc3Mgc3lzZnMgZ3JvdXBzICovCisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAgKnN5c2ZzX2dyb3Vwc1szXTsKIH07CiAKICNkZWZpbmUJTkVUREVWX0FMSUdOCQkzMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggNDEyZTUyYy4uYjMxYTliYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC0xMTAsNiArMTEwLDggQEAKIC8qIEZ1bmN0aW9uIHRvIHJlZ2lzdGVyL3VucmVnaXN0ZXIgaG9vayBwb2ludHMuICovCiBpbnQgbmZfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZyk7CiB2b2lkIG5mX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZyk7CitpbnQgbmZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgbmZfdW5yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgdW5zaWduZWQgaW50IG4pOwogCiAvKiBGdW5jdGlvbnMgdG8gcmVnaXN0ZXIgZ2V0L3NldHNvY2tvcHQgcmFuZ2VzIChub24taW5jbHVzaXZlKS4gIFlvdQogICAgbmVlZCB0byBjaGVjayBwZXJtaXNzaW9ucyB5b3Vyc2VsZiEgKi8KQEAgLTI4MSwxNiArMjgzLDQyIEBACiAgICBSZXR1cm5zIHRydWUgb3IgZmFsc2UuICovCiBleHRlcm4gaW50IHNrYl9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IHdyaXRhYmxlX2xlbik7CiAKLXN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciB7Ci0Jdm9pZCAoKnNhdmUpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKTsKLQlpbnQgKCpyZXJvdXRlKShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pOwotCWludCByZXJfc2l6ZTsKK3N0cnVjdCBuZl9hZmluZm8geworCXVuc2lnbmVkIHNob3J0CWZhbWlseTsKKwl1bnNpZ25lZCBpbnQJKCpjaGVja3N1bSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCisJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCk7CisJdm9pZAkJKCpzYXZlcm91dGUpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmZfaW5mbyAqaW5mbyk7CisJaW50CQkoKnJlcm91dGUpKHN0cnVjdCBza19idWZmICoqc2tiLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKTsKKwlpbnQJCXJvdXRlX2tleV9zaXplOwogfTsKIAotI2RlZmluZSBuZl9pbmZvX3Jlcm91dGUoeCkgKCh2b2lkICopeCArIHNpemVvZihzdHJ1Y3QgbmZfaW5mbykpCitleHRlcm4gc3RydWN0IG5mX2FmaW5mbyAqbmZfYWZpbmZvW107CitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9hZmluZm8gKm5mX2dldF9hZmluZm8odW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXJldHVybiByY3VfZGVyZWZlcmVuY2UobmZfYWZpbmZvW2ZhbWlseV0pOworfQogCi1leHRlcm4gaW50IG5mX3JlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKGludCBwZiwgc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpyZXIpOwotZXh0ZXJuIGludCBuZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKGludCBwZik7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCSAgICB1X2ludDhfdCBwcm90b2NvbCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbzsKKwl1bnNpZ25lZCBpbnQgY3N1bSA9IDA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJYWZpbmZvID0gbmZfZ2V0X2FmaW5mbyhmYW1pbHkpOworCWlmIChhZmluZm8pCisJCWNzdW0gPSBhZmluZm8tPmNoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBjc3VtOworfQorCitleHRlcm4gaW50IG5mX3JlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm8pOworZXh0ZXJuIHZvaWQgbmZfdW5yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKTsKKworI2RlZmluZSBuZl9pbmZvX3Jlcm91dGUoeCkgKCh2b2lkICopeCArIHNpemVvZihzdHJ1Y3QgbmZfaW5mbykpCiAKICNpbmNsdWRlIDxuZXQvZmxvdy5oPgogZXh0ZXJuIHZvaWQgKCppcF9uYXRfZGVjb2RlX3Nlc3Npb24pKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBmbG93aSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCmluZGV4IDEzNTBlNDcuLjQ4Y2MzMmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTE0Miw2ICsxNDIsMTIgQEAKICNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oPgogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2RlZmluZSBDT01QQVRfVE9fVVNFUgkJMQorI2RlZmluZSBDT01QQVRfRlJPTV9VU0VSCS0xCisjZGVmaW5lIENPTVBBVF9DQUxDX1NJWkUJMAorI2VuZGlmCisKIHN0cnVjdCB4dF9tYXRjaAogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTE3NSw2ICsxODEsOSBAQAogCXZvaWQgKCpkZXN0cm95KShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sCiAJCQl1bnNpZ25lZCBpbnQgbWF0Y2hpbmZvc2l6ZSk7CiAKKwkvKiBDYWxsZWQgd2hlbiB1c2Vyc3BhY2UgYWxpZ24gZGlmZmVycyBmcm9tIGtlcm5lbCBzcGFjZSBvbmUgKi8KKwlpbnQgKCpjb21wYXQpKHZvaWQgKm1hdGNoLCB2b2lkICoqZHN0cHRyLCBpbnQgKnNpemUsIGludCBjb252ZXJ0KTsKKwogCS8qIFNldCB0aGlzIHRvIFRISVNfTU9EVUxFIGlmIHlvdSBhcmUgYSBtb2R1bGUsIG90aGVyd2lzZSBOVUxMICovCiAJc3RydWN0IG1vZHVsZSAqbWU7CiAKQEAgLTIyMCw2ICsyMjksOSBAQAogCXZvaWQgKCpkZXN0cm95KShjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsIHZvaWQgKnRhcmdpbmZvLAogCQkJdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSk7CiAKKwkvKiBDYWxsZWQgd2hlbiB1c2Vyc3BhY2UgYWxpZ24gZGlmZmVycyBmcm9tIGtlcm5lbCBzcGFjZSBvbmUgKi8KKwlpbnQgKCpjb21wYXQpKHZvaWQgKnRhcmdldCwgdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLCBpbnQgY29udmVydCk7CisKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCkBAIC0zMTQsNiArMzI2LDczIEBACiBleHRlcm4gc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgeHRfZnJlZV90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKKyNpbmNsdWRlIDxuZXQvY29tcGF0Lmg+CisKK3N0cnVjdCBjb21wYXRfeHRfZW50cnlfbWF0Y2gKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOIC0gMV07CisJCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJfSB1c2VyOworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJCQljb21wYXRfdXB0cl90IG1hdGNoOworCQl9IGtlcm5lbDsKKwkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJfSB1OworCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCBjb21wYXRfeHRfZW50cnlfdGFyZ2V0Cit7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCQkJY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4gLSAxXTsKKwkJCXVfaW50OF90IHJldmlzaW9uOworCQl9IHVzZXI7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCQljb21wYXRfdXB0cl90IHRhcmdldDsKKwkJfSBrZXJuZWw7CisJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwl9IHU7CisJdW5zaWduZWQgY2hhciBkYXRhWzBdOworfTsKKworLyogRklYTUU6IHRoaXMgd29ya3Mgb25seSBvbiAzMiBiaXQgdGFza3MKKyAqIG5lZWQgdG8gY2hhbmdlIHdob2xlIGFwcHJvYWNoIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSBhbGlnbiBhcyBmdW5jdGlvbiBvZgorICogY3VycmVudCB0YXNrIGFsaWdubWVudCAqLworCitzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzCit7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQorCXVfaW50MzJfdCBjbnRbNF07CisjZWxzZQorCXVfaW50NjRfdCBjbnRbMl07CisjZW5kaWYKK307CisKK3N0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbworeworCWNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwljb21wYXRfdWludF90IG51bV9jb3VudGVyczsKKwlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzIGNvdW50ZXJzWzBdOworfTsKKworI2RlZmluZSBDT01QQVRfWFRfQUxJR04ocykgKCgocykgKyAoX19hbGlnbm9mX18oc3RydWN0IGNvbXBhdF94dF9jb3VudGVycyktMSkpIFwKKwkJJiB+KF9fYWxpZ25vZl9fKHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnMpLTEpKQorCitleHRlcm4gdm9pZCB4dF9jb21wYXRfbG9jayhpbnQgYWYpOworZXh0ZXJuIHZvaWQgeHRfY29tcGF0X3VubG9jayhpbnQgYWYpOworZXh0ZXJuIGludCB4dF9jb21wYXRfbWF0Y2godm9pZCAqbWF0Y2gsIHZvaWQgKipkc3RwdHIsIGludCAqc2l6ZSwgaW50IGNvbnZlcnQpOworZXh0ZXJuIGludCB4dF9jb21wYXRfdGFyZ2V0KHZvaWQgKnRhcmdldCwgdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLAorCQlpbnQgY29udmVydCk7CisKKyNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX1hfVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4MGZiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9YVF9FU1BfSAorI2RlZmluZSBfWFRfRVNQX0gKKworc3RydWN0IHh0X2VzcAoreworCXVfaW50MzJfdCBzcGlzWzJdOwkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KKwl1X2ludDhfdCAgaW52ZmxhZ3M7CS8qIEludmVyc2UgZmxhZ3MgKi8KK307CisKKy8qIFZhbHVlcyBmb3IgImludmZsYWdzIiBmaWVsZCBpbiBzdHJ1Y3QgeHRfZXNwLiAqLworI2RlZmluZSBYVF9FU1BfSU5WX1NQSQkweDAxCS8qIEludmVydCB0aGUgc2Vuc2Ugb2Ygc3BpLiAqLworI2RlZmluZSBYVF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisKKyNlbmRpZiAvKl9YVF9FU1BfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWVlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9YVF9NVUxUSVBPUlRfSAorI2RlZmluZSBfWFRfTVVMVElQT1JUX0gKKworZW51bSB4dF9tdWx0aXBvcnRfZmxhZ3MKK3sKKwlYVF9NVUxUSVBPUlRfU09VUkNFLAorCVhUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKKwlYVF9NVUxUSVBPUlRfRUlUSEVSCit9OworCisjZGVmaW5lIFhUX01VTFRJX1BPUlRTCTE1CisKKy8qIE11c3QgZml0IGluc2lkZSB1bmlvbiB4dF9tYXRjaGluZm86IDE2IGJ5dGVzICovCitzdHJ1Y3QgeHRfbXVsdGlwb3J0Cit7CisJdV9pbnQ4X3QgZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLworCXVfaW50OF90IGNvdW50OwkJCQkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KKwl1X2ludDE2X3QgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworfTsKKworc3RydWN0IHh0X211bHRpcG9ydF92MQoreworCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KKwl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KKwl1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0IGZsYWdzICovCisJdV9pbnQ4X3QgaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCit9OworCisjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDQzYzA5ZDcuLjg1MzAxYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTgwLDYgKzgwLDggQEAKICNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gaW50IGlwX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOwogZXh0ZXJuIGludCBpcF94ZnJtX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9pcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpOwogI2VuZGlmIC8qX19LRVJORUxfXyovCiAKICNlbmRpZiAvKl9fTElOVVhfSVBfTkVURklMVEVSX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCmluZGV4IDA5ODdjZWEuLmVhY2U4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKQEAgLTMsNiArMyw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oPgorCiAjZGVmaW5lIFJBU19QT1JUIDE3MTkKICNkZWZpbmUgUTkzMV9QT1JUIDE3MjAKICNkZWZpbmUgSDMyM19SVFBfQ0hBTk5FTF9NQVggNAkvKiBBdWRpbywgdmlkZW8sIEZBWCBhbmQgb3RoZXIgKi8KQEAgLTI1LDYgKzI3LDU2IEBACiAJfTsKIH07CiAKK3N0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0OworCitleHRlcm4gaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOworZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKK2V4dGVybiB2b2lkIGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCisJCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CitleHRlcm4gaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQkgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKK2V4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKK2V4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAorCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAorCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKK2V4dGVybiBpbnQgKCpuYXRfdDEyMF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworZXh0ZXJuIGludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgICAgIGludCBpZHgsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKaW5kZXggMGJkODI4MC4uYzZlOWEwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCkBAIC0yLDcgKzIsNyBAQAogICogaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCAtIEJFUiBhbmQgUEVSIGRlY29kaW5nIGxpYnJhcnkgZm9yIEguMzIzCiAgKiAJCQkgICAgICAJICAgICBjb25udHJhY2svTkFUIG1vZHVsZS4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AaG90bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICoKICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAppbmRleCBkNWI4YzBkLi5jMGRhYzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKQEAgLTMxNiw1ICszMTYsMjMgQEAKIAkJCQkgdm9pZCAqdXNlcmRhdGEpOwogCiAjZGVmaW5lIElQVF9BTElHTihzKSBYVF9BTElHTihzKQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KKworc3RydWN0IGNvbXBhdF9pcHRfZW50cnkKK3sKKwlzdHJ1Y3QgaXB0X2lwIGlwOworCWNvbXBhdF91aW50X3QgbmZjYWNoZTsKKwl1X2ludDE2X3QgdGFyZ2V0X29mZnNldDsKKwl1X2ludDE2X3QgbmV4dF9vZmZzZXQ7CisJY29tcGF0X3VpbnRfdCBjb21lZnJvbTsKKwlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzIGNvdW50ZXJzOworCXVuc2lnbmVkIGNoYXIgZWxlbXNbMF07Cit9OworCisjZGVmaW5lIENPTVBBVF9JUFRfQUxJR04ocykgCUNPTVBBVF9YVF9BTElHTihzKQorCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogI2VuZGlmIC8qX19LRVJORUxfXyovCiAjZW5kaWYgLyogX0lQVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKaW5kZXggYzc4MmE4My4uNzgyOTZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKQEAgLTEsMTYgKzEsMTAgQEAKICNpZm5kZWYgX0lQVF9FU1BfSAogI2RlZmluZSBfSVBUX0VTUF9ICiAKLXN0cnVjdCBpcHRfZXNwCi17Ci0JdV9pbnQzMl90IHNwaXNbMl07CQkJLyogU2VjdXJpdHkgUGFyYW1ldGVyIEluZGV4ICovCi0JdV9pbnQ4X3QgIGludmZsYWdzOwkJCS8qIEludmVyc2UgZmxhZ3MgKi8KLX07CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oPgogCi0KLQotLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfZXNwLiAqLwotI2RlZmluZSBJUFRfRVNQX0lOVl9TUEkJCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBzcGkuICovCi0jZGVmaW5lIElQVF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisjZGVmaW5lIGlwdF9lc3AgeHRfZXNwCisjZGVmaW5lIElQVF9FU1BfSU5WX1NQSQkJWFRfRVNQX0lOVl9TUEkKKyNkZWZpbmUgSVBUX0VTUF9JTlZfTUFTSwlYVF9FU1BfSU5WX01BU0sKIAogI2VuZGlmIC8qX0lQVF9FU1BfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCmluZGV4IGU2YjZmZmYuLjU1ZmU4NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCkBAIC0xLDMwICsxLDE1IEBACiAjaWZuZGVmIF9JUFRfTVVMVElQT1JUX0gKICNkZWZpbmUgX0lQVF9NVUxUSVBPUlRfSAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogCi1lbnVtIGlwdF9tdWx0aXBvcnRfZmxhZ3MKLXsKLQlJUFRfTVVMVElQT1JUX1NPVVJDRSwKLQlJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OLAotCUlQVF9NVUxUSVBPUlRfRUlUSEVSCi19OworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaD4KIAotI2RlZmluZSBJUFRfTVVMVElfUE9SVFMJMTUKKyNkZWZpbmUgSVBUX01VTFRJUE9SVF9TT1VSQ0UJCVhUX01VTFRJUE9SVF9TT1VSQ0UKKyNkZWZpbmUgSVBUX01VTFRJUE9SVF9ERVNUSU5BVElPTglYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KKyNkZWZpbmUgSVBUX01VTFRJUE9SVF9FSVRIRVIJCVhUX01VTFRJUE9SVF9FSVRIRVIKIAotLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIGlwdF9tYXRjaGluZm86IDE2IGJ5dGVzICovCi1zdHJ1Y3QgaXB0X211bHRpcG9ydAotewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi19OworI2RlZmluZSBJUFRfTVVMVElfUE9SVFMJCQlYVF9NVUxUSV9QT1JUUwogCi1zdHJ1Y3QgaXB0X211bHRpcG9ydF92MQotewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi0JdV9pbnQ4X3QgcGZsYWdzW0lQVF9NVUxUSV9QT1JUU107CS8qIFBvcnQgZmxhZ3MgKi8KLQl1X2ludDhfdCBpbnZlcnQ7CQkJLyogSW52ZXJ0IGZsYWcgKi8KLX07CisjZGVmaW5lIGlwdF9tdWx0aXBvcnQJCQl4dF9tdWx0aXBvcnQKKyNkZWZpbmUgaXB0X211bHRpcG9ydF92MQkJeHRfbXVsdGlwb3J0X3YxCisKICNlbmRpZiAvKl9JUFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCmluZGV4IDE0ZjJiZDAuLjUyYTdiOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTczLDYgKzczLDkgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCitleHRlcm4gdW5zaWduZWQgaW50IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKKwogZXh0ZXJuIGludCBpcHY2X25ldGZpbHRlcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXB2Nl9uZXRmaWx0ZXJfZmluaSh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ORVRGSUxURVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaAppbmRleCBhOTFiNmFiLi5mNjJlYWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2VzcC5oCkBAIC0xLDE0ICsxLDEwIEBACiAjaWZuZGVmIF9JUDZUX0VTUF9ICiAjZGVmaW5lIF9JUDZUX0VTUF9ICiAKLXN0cnVjdCBpcDZ0X2VzcAotewotCXVfaW50MzJfdCBzcGlzWzJdOwkJCS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCi19OworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9lc3AuaD4KIAotLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcDZ0X2VzcC4gKi8KLSNkZWZpbmUgSVA2VF9FU1BfSU5WX1NQSQkJMHgwMQkvKiBJbnZlcnQgdGhlIHNlbnNlIG9mIHNwaS4gKi8KLSNkZWZpbmUgSVA2VF9FU1BfSU5WX01BU0sJMHgwMQkvKiBBbGwgcG9zc2libGUgZmxhZ3MuICovCisjZGVmaW5lIGlwNnRfZXNwIHh0X2VzcAorI2RlZmluZSBJUDZUX0VTUF9JTlZfU1BJCVhUX0VTUF9JTlZfU1BJCisjZGVmaW5lIElQNlRfRVNQX0lOVl9NQVNLCVhUX0VTUF9JTlZfTUFTSwogCiAjZW5kaWYgLypfSVA2VF9FU1BfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmgKaW5kZXggZWZlNDk1NC4uMDQyYzkyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X211bHRpcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tdWx0aXBvcnQuaApAQCAtMSwyMSArMSwxNCBAQAogI2lmbmRlZiBfSVA2VF9NVUxUSVBPUlRfSAogI2RlZmluZSBfSVA2VF9NVUxUSVBPUlRfSAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KIAotZW51bSBpcDZ0X211bHRpcG9ydF9mbGFncwotewotCUlQNlRfTVVMVElQT1JUX1NPVVJDRSwKLQlJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKLQlJUDZUX01VTFRJUE9SVF9FSVRIRVIKLX07CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oPgogCi0jZGVmaW5lIElQNlRfTVVMVElfUE9SVFMJMTUKKyNkZWZpbmUgSVA2VF9NVUxUSVBPUlRfU09VUkNFCQlYVF9NVUxUSVBPUlRfU09VUkNFCisjZGVmaW5lIElQNlRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCVhUX01VTFRJUE9SVF9ERVNUSU5BVElPTgorI2RlZmluZSBJUDZUX01VTFRJUE9SVF9FSVRIRVIJCVhUX01VTFRJUE9SVF9FSVRIRVIKIAotLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIGlwNnRfbWF0Y2hpbmZvOiAxNiBieXRlcyAqLwotc3RydWN0IGlwNnRfbXVsdGlwb3J0Ci17Ci0JdV9pbnQ4X3QgZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLwotCXVfaW50OF90IGNvdW50OwkJCQkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KLQl1X2ludDE2X3QgcG9ydHNbSVA2VF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi19OwotI2VuZGlmIC8qX0lQVF9NVUxUSVBPUlRfSCovCisjZGVmaW5lIElQNlRfTVVMVElfUE9SVFMJCVhUX01VTFRJX1BPUlRTCisKKyNkZWZpbmUgaXA2dF9tdWx0aXBvcnQJCQl4dF9tdWx0aXBvcnQKKworI2VuZGlmIC8qX0lQNlRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCBmOGYzZDFjLi44N2I4YTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMTQzLDYgKzE0Myw3IEBACiAJX191MzIJCQlkc3RfZ3JvdXA7CiAJa2VybmVsX2NhcF90CQllZmZfY2FwOwogCV9fdTMyCQkJbG9naW51aWQ7CS8qIExvZ2luIChhdWRpdCkgdWlkICovCisJX191MzIJCQlzaWQ7CQkvKiBTRUxpbnV4IHNlY3VyaXR5IGlkICovCiB9OwogCiAjZGVmaW5lIE5FVExJTktfQ0Ioc2tiKQkJKCooc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zKikmKChza2IpLT5jYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L251bWEuaCBiL2luY2x1ZGUvbGludXgvbnVtYS5oCmluZGV4IGYwYzUzOWIuLmU0ODFmZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnVtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvbnVtYS5oCkBAIC0zLDExICszLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCi0jaWZuZGVmIENPTkZJR19GTEFUTUVNCi0jaW5jbHVkZSA8YXNtL251bW5vZGVzLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBOT0RFU19TSElGVAorI2lmZGVmIENPTkZJR19OT0RFU19TSElGVAorI2RlZmluZSBOT0RFU19TSElGVCAgICAgQ09ORklHX05PREVTX1NISUZUCisjZWxzZQogI2RlZmluZSBOT0RFU19TSElGVCAgICAgMAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggOWVhNjI5Yy4uZDI3NmE0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTQ4LDggKzQ4LDIwIEBACiAKIC8qCiAgKiBEb24ndCB1c2UgdGhlICpfZG9udHVzZSBmbGFncy4gIFVzZSB0aGUgbWFjcm9zLiAgT3RoZXJ3aXNlIHlvdSdsbCBicmVhawotICogbG9ja2VkLSBhbmQgZGlydHktcGFnZSBhY2NvdW50aW5nLiAgVGhlIHRvcCBlaWdodCBiaXRzIG9mIHBhZ2UtPmZsYWdzIGFyZQotICogdXNlZCBmb3IgcGFnZS0+em9uZSwgc28gcHV0dGluZyBmbGFnIGJpdHMgdGhlcmUgZG9lc24ndCB3b3JrLgorICogbG9ja2VkLSBhbmQgZGlydHktcGFnZSBhY2NvdW50aW5nLgorICoKKyAqIFRoZSBwYWdlIGZsYWdzIGZpZWxkIGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLCB0aGUgbWFpbiBmbGFncyBhcmVhCisgKiB3aGljaCBleHRlbmRzIGZyb20gdGhlIGxvdyBiaXRzIHVwd2FyZHMsIGFuZCB0aGUgZmllbGRzIGFyZWEgd2hpY2gKKyAqIGV4dGVuZHMgZnJvbSB0aGUgaGlnaCBiaXRzIGRvd253YXJkcy4KKyAqCisgKiAgfCBGSUVMRCB8IC4uLiB8IEZMQUdTIHwKKyAqICBOLTEgICAgIF4gICAgICAgICAgICAgMAorICogICAgICAgICAgKE4tRkxBR1NfUkVTRVJWRUQpCisgKgorICogVGhlIGZpZWxkcyBhcmVhIGlzIHJlc2VydmVkIGZvciBmaWVsZHMgbWFwcGluZyB6b25lLCBub2RlIGFuZCBTUEFSU0VNRU0KKyAqIHNlY3Rpb24uICBUaGUgYm91bmRyeSBiZXR3ZWVuIHRoZXNlIHR3byBhcmVhcyBpcyBkZWZpbmVkIGJ5CisgKiBGTEFHU19SRVNFUlZFRCB3aGljaCBkZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgZmllbGRzIHNlY3Rpb24KKyAqIChzZWUgbGludXgvbW16b25lLmgpLiAgTmV3IGZsYWdzIG11c3QgX25vdF8gb3ZlcmxhcCB3aXRoIHRoaXMgYXJlYS4KICAqLwogI2RlZmluZSBQR19sb2NrZWQJIAkgMAkvKiBQYWdlIGlzIGxvY2tlZC4gRG9uJ3QgdG91Y2guICovCiAjZGVmaW5lIFBHX2Vycm9yCQkgMQpAQCAtNzQsNyArODYsOSBAQAogI2RlZmluZSBQR19tYXBwZWR0b2Rpc2sJCTE2CS8qIEhhcyBibG9ja3MgYWxsb2NhdGVkIG9uLWRpc2sgKi8KICNkZWZpbmUgUEdfcmVjbGFpbQkJMTcJLyogVG8gYmUgcmVjbGFpbWVkIGFzYXAgKi8KICNkZWZpbmUgUEdfbm9zYXZlX2ZyZWUJCTE4CS8qIEZyZWUsIHNob3VsZCBub3QgYmUgd3JpdHRlbiAqLwotI2RlZmluZSBQR191bmNhY2hlZAkJMTkJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KKyNkZWZpbmUgUEdfYnVkZHkJCTE5CS8qIFBhZ2UgaXMgZnJlZSwgb24gYnVkZHkgbGlzdHMgKi8KKworI2RlZmluZSBQR191bmNhY2hlZAkJMjAJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KIAogLyoKICAqIEdsb2JhbCBwYWdlIGFjY291bnRpbmcuICBPbmUgaW5zdGFuY2UgcGVyIENQVS4gIE9ubHkgdW5zaWduZWQgbG9uZ3MgYXJlCkBAIC0zMTcsNiArMzMxLDEwIEBACiAjZGVmaW5lIFNldFBhZ2VOb3NhdmVGcmVlKHBhZ2UpCXNldF9iaXQoUEdfbm9zYXZlX2ZyZWUsICYocGFnZSktPmZsYWdzKQogI2RlZmluZSBDbGVhclBhZ2VOb3NhdmVGcmVlKHBhZ2UpCQljbGVhcl9iaXQoUEdfbm9zYXZlX2ZyZWUsICYocGFnZSktPmZsYWdzKQogCisjZGVmaW5lIFBhZ2VCdWRkeShwYWdlKQkJdGVzdF9iaXQoUEdfYnVkZHksICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBfX1NldFBhZ2VCdWRkeShwYWdlKQlfX3NldF9iaXQoUEdfYnVkZHksICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBfX0NsZWFyUGFnZUJ1ZGR5KHBhZ2UpCV9fY2xlYXJfYml0KFBHX2J1ZGR5LCAmKHBhZ2UpLT5mbGFncykKKwogI2RlZmluZSBQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpCXRlc3RfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIFNldFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkgc2V0X2JpdChQR19tYXBwZWR0b2Rpc2ssICYocGFnZSktPmZsYWdzKQogI2RlZmluZSBDbGVhclBhZ2VNYXBwZWRUb0Rpc2socGFnZSkgY2xlYXJfYml0KFBHX21hcHBlZHRvZGlzaywgJihwYWdlKS0+ZmxhZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDk1MzllZmQuLjdhMWFmNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC03OCw2ICs3OCw4IEBACiAJCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgZ2ZwX3QgZ2ZwX21hc2spOwogdW5zaWduZWQgZmluZF9nZXRfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgc3RhcnQsCiAJCQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpOwordW5zaWduZWQgZmluZF9nZXRfcGFnZXNfY29udGlnKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcyk7CiB1bnNpZ25lZCBmaW5kX2dldF9wYWdlc190YWcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgKmluZGV4LAogCQkJaW50IHRhZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDQ4NzdlMzUuLjkzNmVmODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKQEAgLTUwLDcgKzUwLDcgQEAKIGV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKTsKIGV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX3N1cHBvcnRfc2V0KHUzMiBmbGFncyk7CiAjZWxzZQotI2lmICFkZWZpbmVkKGFjcGlfc3RhdHVzKQorI2lmICFkZWZpbmVkKEFFX0VSUk9SKQogdHlwZWRlZiB1MzIgCQlhY3BpX3N0YXR1czsKICNkZWZpbmUgQUVfRVJST1IgICAgICAJKGFjcGlfc3RhdHVzKSAoMHgwMDAxKQogI2VuZGlmICAgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggMGFhZDVhMy4uM2E2YTRlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC05Nyw3ICs5NywxMyBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fYml0d2lzZSBwY2lfYnVzX2ZsYWdzX3Q7CiBlbnVtIHBjaV9idXNfZmxhZ3MgewotCVBDSV9CVVNfRkxBR1NfTk9fTVNJID0gKHBjaV9idXNfZmxhZ3NfdCkgMSwKKwlQQ0lfQlVTX0ZMQUdTX05PX01TSSA9IChfX2ZvcmNlIHBjaV9idXNfZmxhZ3NfdCkgMSwKK307CisKK3N0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBuZXh0OworCWNoYXIgY2FwX25yOworCXUzMiBkYXRhWzBdOwogfTsKIAogLyoKQEAgLTE1OSw2ICsxNjUsNyBAQAogCXVuc2lnbmVkIGludAlibG9ja191Y2ZnX2FjY2VzczoxOwkvKiB1c2Vyc3BhY2UgY29uZmlnIHNwYWNlIGFjY2VzcyBpcyBibG9ja2VkICovCiAKIAl1MzIJCXNhdmVkX2NvbmZpZ19zcGFjZVsxNl07IC8qIGNvbmZpZyBzcGFjZSBzYXZlZCBhdCBzdXNwZW5kIHRpbWUgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBzYXZlZF9jYXBfc3BhY2U7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKnJvbV9hdHRyOyAvKiBhdHRyaWJ1dGUgZGVzY3JpcHRvciBmb3Igc3lzZnMgUk9NIGVudHJ5ICovCiAJaW50IHJvbV9hdHRyX2VuYWJsZWQ7CQkvKiBoYXMgZGlzcGxheSBvZiB0aGUgcm9tIGF0dHJpYnV0ZSBiZWVuIGVuYWJsZWQ/ICovCiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKnJlc19hdHRyW0RFVklDRV9DT1VOVF9SRVNPVVJDRV07IC8qIHN5c2ZzIGZpbGUgZm9yIHJlc291cmNlcyAqLwpAQCAtMTY5LDYgKzE3NiwzMCBAQAogI2RlZmluZQl0b19wY2lfZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNpX2RldiwgZGV2KQogI2RlZmluZSBmb3JfZWFjaF9wY2lfZGV2KGQpIHdoaWxlICgoZCA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGQpKSAhPSBOVUxMKQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpwY2lfZmluZF9zYXZlZF9jYXAoCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsY2hhciBjYXApCit7CisJc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnRtcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBwb3MsICZwY2lfZGV2LT5zYXZlZF9jYXBfc3BhY2UsIG5leHQpIHsKKwkJaWYgKHRtcC0+Y2FwX25yID09IGNhcCkKKwkJCXJldHVybiB0bXA7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2FkZF9zYXZlZF9jYXAoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKm5ld19jYXApCit7CisJaGxpc3RfYWRkX2hlYWQoJm5ld19jYXAtPm5leHQsICZwY2lfZGV2LT5zYXZlZF9jYXBfc3BhY2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbW92ZV9zYXZlZF9jYXAoc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKmNhcCkKK3sKKwlobGlzdF9kZWwoJmNhcC0+bmV4dCk7Cit9CisKIC8qCiAgKiAgRm9yIFBDSSBkZXZpY2VzLCB0aGUgcmVnaW9uIG51bWJlcnMgYXJlIGFzc2lnbmVkIHRoaXMgd2F5OgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggODcwZmUzOC4uNTkwZGM2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM1Niw2ICszNTYsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX1NBVEEgICAweDQzNmUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERQkweDQzNzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NBVEEgICAweDQzNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NBVEEyCTB4NDM3YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQQkweDQzODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NSQUlECTB4NDM4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFCTB4NDM4YwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVkxTSQkJMHgxMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTIJMHgwMDA1CkBAIC00OTcsNyArNTAxLDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9TTUJVUwkweDc0NmIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9BVURJTwkweDc0NmQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODE1MV8wCTB4NzQ1NAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMgICAgIDB4NzQ1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRQkweDc0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDCTB4NzQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBICAgIDB4MjA5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRkxBU0ggIDB4MjA5MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfQVVESU8gIDB4MjA5MwpAQCAtMTIyNiw2ICsxMjMxLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4MF8wCTB4MDIwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjM4XzAJMHgwMjM4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BUODgwCQkweDAyNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQQkweDAzMDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMAkweDAyNTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wCTB4MDI2OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9LOFQ4MDBQUk9fMAkweDAyODIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCmluZGV4IDc1YzdmNTUuLmVhNGY3Y2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaApAQCAtNSwxOSArNSwzNyBAQAogCiAjZGVmaW5lIFBJUEVfQlVGRkVSUyAoMTYpCiAKKyNkZWZpbmUgUElQRV9CVUZfRkxBR19MUlUJMHgwMQkvKiBwYWdlIGlzIG9uIHRoZSBMUlUgKi8KKyNkZWZpbmUgUElQRV9CVUZfRkxBR19BVE9NSUMJMHgwMgkvKiB3YXMgYXRvbWljYWxseSBtYXBwZWQgKi8KKyNkZWZpbmUgUElQRV9CVUZfRkxBR19HSUZUCTB4MDQJLyogcGFnZSBpcyBhIGdpZnQgKi8KKwogc3RydWN0IHBpcGVfYnVmZmVyIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47CiAJc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wczsKLQl1bnNpZ25lZCBpbnQgc3RvbGVuOworCXVuc2lnbmVkIGludCBmbGFnczsKIH07CiAKKy8qCisgKiBOb3RlIG9uIHRoZSBuZXN0aW5nIG9mIHRoZXNlIGZ1bmN0aW9uczoKKyAqCisgKiAtPnBpbigpCisgKgktPnN0ZWFsKCkKKyAqCS4uLgorICoJLT5tYXAoKQorICoJLi4uCisgKgktPnVubWFwKCkKKyAqCisgKiBUaGF0IGlzLCAtPm1hcCgpIG11c3QgYmUgY2FsbGVkIG9uIGEgcGlubmVkIGJ1ZmZlciwgc2FtZSBnb2VzIGZvciAtPnN0ZWFsKCkuCisgKi8KIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHsKIAlpbnQgY2FuX21lcmdlOwotCXZvaWQgKiAoKm1hcCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7Ci0Jdm9pZCAoKnVubWFwKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKKwl2b2lkICogKCptYXApKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICosIGludCk7CisJdm9pZCAoKnVubWFwKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqLCB2b2lkICopOworCWludCAoKnBpbikoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICopOwogCWludCAoKnN0ZWFsKShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKKwl2b2lkICgqZ2V0KShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKIH07CiAKIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gewpAQCAtMzMsMzIgKzUxLDUzIEBACiAJdW5zaWduZWQgaW50IHdfY291bnRlcjsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3JlYWRlcnM7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiB9OwogCiAvKiBEaWZmZXJzIGZyb20gUElQRV9CVUYgaW4gdGhhdCBQSVBFX1NJWkUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgYWN0dWFsCiAgICBtZW1vcnkgYWxsb2NhdGlvbiwgd2hlcmVhcyBQSVBFX0JVRiBtYWtlcyBhdG9taWNpdHkgZ3VhcmFudGVlcy4gICovCiAjZGVmaW5lIFBJUEVfU0laRQkJUEFHRV9TSVpFCiAKLSNkZWZpbmUgUElQRV9NVVRFWChpbm9kZSkJKCYoaW5vZGUpLmlfbXV0ZXgpCi0jZGVmaW5lIFBJUEVfV0FJVChpbm9kZSkJKCYoaW5vZGUpLmlfcGlwZS0+d2FpdCkKLSNkZWZpbmUgUElQRV9SRUFERVJTKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPnJlYWRlcnMpCi0jZGVmaW5lIFBJUEVfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53cml0ZXJzKQotI2RlZmluZSBQSVBFX1dBSVRJTkdfV1JJVEVSUyhpbm9kZSkJKChpbm9kZSkuaV9waXBlLT53YWl0aW5nX3dyaXRlcnMpCi0jZGVmaW5lIFBJUEVfUkNPVU5URVIoaW5vZGUpCSgoaW5vZGUpLmlfcGlwZS0+cl9jb3VudGVyKQotI2RlZmluZSBQSVBFX1dDT1VOVEVSKGlub2RlKQkoKGlub2RlKS5pX3BpcGUtPndfY291bnRlcikKLSNkZWZpbmUgUElQRV9GQVNZTkNfUkVBREVSUyhpbm9kZSkgICAgICgmKChpbm9kZSkuaV9waXBlLT5mYXN5bmNfcmVhZGVycykpCi0jZGVmaW5lIFBJUEVfRkFTWU5DX1dSSVRFUlMoaW5vZGUpICAgICAoJigoaW5vZGUpLmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpKQotCiAvKiBEcm9wIHRoZSBpbm9kZSBzZW1hcGhvcmUgYW5kIHdhaXQgZm9yIGEgcGlwZSBldmVudCwgYXRvbWljYWxseSAqLwotdm9pZCBwaXBlX3dhaXQoc3RydWN0IGlub2RlICogaW5vZGUpOwordm9pZCBwaXBlX3dhaXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSk7CiAKLXN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7Ci12b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSogaW5vZGUpOworc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqIGFsbG9jX3BpcGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7Cit2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKK3ZvaWQgX19mcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICopOworCisvKiBHZW5lcmljIHBpcGUgYnVmZmVyIG9wcyBmdW5jdGlvbnMgKi8KK3ZvaWQgKmdlbmVyaWNfcGlwZV9idWZfbWFwKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKiwgc3RydWN0IHBpcGVfYnVmZmVyICosIGludCk7Cit2b2lkIGdlbmVyaWNfcGlwZV9idWZfdW5tYXAoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKiwgdm9pZCAqKTsKK3ZvaWQgZ2VuZXJpY19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CitpbnQgZ2VuZXJpY19waXBlX2J1Zl9waW4oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKik7CitpbnQgZ2VuZXJpY19waXBlX2J1Zl9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBwaXBlX2J1ZmZlciAqKTsKIAogLyoKICAqIHNwbGljZSBpcyB0aWVkIHRvIHBpcGVzIGFzIGEgdHJhbnNwb3J0IChhdCBsZWFzdCBmb3Igbm93KSwgc28gd2UnbGwganVzdAogICogYWRkIHRoZSBzcGxpY2UgZmxhZ3MgaGVyZS4KICAqLwogI2RlZmluZSBTUExJQ0VfRl9NT1ZFCSgweDAxKQkvKiBtb3ZlIHBhZ2VzIGluc3RlYWQgb2YgY29weWluZyAqLworI2RlZmluZSBTUExJQ0VfRl9OT05CTE9DSyAoMHgwMikgLyogZG9uJ3QgYmxvY2sgb24gdGhlIHBpcGUgc3BsaWNpbmcgKGJ1dCAqLworCQkJCSAvKiB3ZSBtYXkgc3RpbGwgYmxvY2sgb24gdGhlIGZkIHdlIHNwbGljZSAqLworCQkJCSAvKiBmcm9tL3RvLCBvZiBjb3Vyc2UgKi8KKyNkZWZpbmUgU1BMSUNFX0ZfTU9SRQkoMHgwNCkJLyogZXhwZWN0IG1vcmUgZGF0YSAqLworI2RlZmluZSBTUExJQ0VfRl9HSUZUCSgweDA4KQkvKiBwYWdlcyBwYXNzZWQgaW4gYXJlIGEgZ2lmdCAqLworCisvKgorICogUGFzc2VkIHRvIHRoZSBhY3RvcnMKKyAqLworc3RydWN0IHNwbGljZV9kZXNjIHsKKwl1bnNpZ25lZCBpbnQgbGVuLCB0b3RhbF9sZW47CS8qIGN1cnJlbnQgYW5kIHJlbWFpbmluZyBsZW5ndGggKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBzcGxpY2UgZmxhZ3MgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsJCS8qIGZpbGUgdG8gcmVhZC93cml0ZSAqLworCWxvZmZfdCBwb3M7CQkJLyogZmlsZSBwb3NpdGlvbiAqLworfTsKKwordHlwZWRlZiBpbnQgKHNwbGljZV9hY3Rvcikoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKiwKKwkJCSAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqKTsKKworZXh0ZXJuIHNzaXplX3Qgc3BsaWNlX2Zyb21fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHN0cnVjdCBmaWxlICosCisJCQkJbG9mZl90ICosIHNpemVfdCwgdW5zaWduZWQgaW50LAorCQkJCXNwbGljZV9hY3RvciAqKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNmRmMjU4NS4uNjZiZTU4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTk5LDYgKzE5OSwxMiBAQAogCiBleHRlcm4gaW50IGRwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqLCBwbV9tZXNzYWdlX3QpOwogZXh0ZXJuIHZvaWQgZHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChjb25zdCBjaGFyICpmdW5jdGlvbiwgdm9pZCAqZm4sIGludCByZXQpOworCisjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoX19GVU5DVElPTl9fLCBmbiwgcmV0KTsJCVwKKwl9IHdoaWxlICgwKQogCiAjZWxzZSAvKiAhQ09ORklHX1BNICovCiAKQEAgLTIxOSw2ICsyMjUsOCBAQAogewogfQogCisjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KSBkbyB7IH0gd2hpbGUgKDApCisKICNlbmRpZgogCiAvKiBjaGFuZ2VzIHRvIGRldmljZV9tYXlfd2FrZXVwIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHBtIHN0YXRlIGNoYW5nZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmggYi9pbmNsdWRlL2xpbnV4L3BtX2xlZ2FjeS5oCmluZGV4IDEyNTJiNDUuLjAwODkzMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9sZWdhY3kuaApAQCAtMTYsMTEgKzE2LDYgQEAKIHBtX3JlZ2lzdGVyKHBtX2Rldl90IHR5cGUsIHVuc2lnbmVkIGxvbmcgaWQsIHBtX2NhbGxiYWNrIGNhbGxiYWNrKTsKIAogLyoKLSAqIFVucmVnaXN0ZXIgYSBkZXZpY2Ugd2l0aCBwb3dlciBtYW5hZ2VtZW50Ci0gKi8KLXZvaWQgX19kZXByZWNhdGVkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KTsKLQotLyoKICAqIFVucmVnaXN0ZXIgYWxsIGRldmljZXMgd2l0aCBtYXRjaGluZyBjYWxsYmFjawogICovCiB2b2lkIF9fZGVwcmVjYXRlZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYWxsYmFjayk7CkBAIC00MSw4ICszNiw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldikge30KLQogc3RhdGljIGlubGluZSB2b2lkIHBtX3VucmVnaXN0ZXJfYWxsKHBtX2NhbGxiYWNrIGNhbGxiYWNrKSB7fQogCiBzdGF0aWMgaW5saW5lIGludCBwbV9zZW5kX2FsbChwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggMTM1ODcxZC4uNGI0N2EwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTc5LDcgKzc5LDcgQEAKIHN0cnVjdCB2bWNvcmUgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwogCWxvZmZfdCBvZmZzZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAppbmRleCA3NzRlMWFjLi5mMWZiYWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTIyNyw4ICsyMjcsOCBAQAogCQkJCSAqLwogCiAJLyogVGhlc2UgYXJlIG9ubHkgdmFsaWQgd2l0aCBmZWF0dXJlIGJpdCAnNCcgKi8KLQlfX3U2NAlyZXNoYXBlX3Bvc2l0aW9uOwkvKiBuZXh0IGFkZHJlc3MgaW4gYXJyYXktc3BhY2UgZm9yIHJlc2hhcGUgKi8KIAlfX3UzMgluZXdfbGV2ZWw7CS8qIG5ldyBsZXZlbCB3ZSBhcmUgcmVzaGFwaW5nIHRvCQkqLworCV9fdTY0CXJlc2hhcGVfcG9zaXRpb247CS8qIG5leHQgYWRkcmVzcyBpbiBhcnJheS1zcGFjZSBmb3IgcmVzaGFwZSAqLwogCV9fdTMyCWRlbHRhX2Rpc2tzOwkvKiBjaGFuZ2UgaW4gbnVtYmVyIG9mIHJhaWRfZGlza3MJCSovCiAJX191MzIJbmV3X2xheW91dDsJLyogbmV3IGxheW91dAkJCQkJKi8KIAlfX3UzMgluZXdfY2h1bms7CS8qIG5ldyBjaHVuayBzaXplIChieXRlcykJCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDU2NzMwMDguLjk3MDI4NGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTEzMiw2ICsxMzIsNyBAQAogfQogCiBleHRlcm4gaW50IHJjdV9wZW5kaW5nKGludCBjcHUpOworZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwogCiAvKioKICAqIHJjdV9yZWFkX2xvY2sgLSBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDU0MWY0ODI4Li4yOWI3ZDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC02ODQsNiArNjg0LDcgQEAKIAogc3RydWN0IGF1ZGl0X2NvbnRleHQ7CQkvKiBTZWUgYXVkaXQuYyAqLwogc3RydWN0IG1lbXBvbGljeTsKK3N0cnVjdCBwaXBlX2lub2RlX2luZm87CiAKIGVudW0gc2xlZXBfdHlwZSB7CiAJU0xFRVBfTk9STUFMLApAQCAtODgyLDYgKzg4MywxMSBAQAogCiAJYXRvbWljX3QgZnNfZXhjbDsJLyogaG9sZGluZyBmcyBleGNsdXNpdmUgcmVzb3VyY2VzICovCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKKworCS8qCisJICogY2FjaGUgbGFzdCB1c2VkIHBpcGUgZm9yIHNwbGljZQorCSAqLworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnNwbGljZV9waXBlOwogfTsKIAogc3RhdGljIGlubGluZSBwaWRfdCBwcm9jZXNzX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtOTA1LDcgKzkxMSw2IEBACiBleHRlcm4gdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2RlZmluZSBnZXRfdGFza19zdHJ1Y3QodHNrKSBkbyB7IGF0b21pY19pbmMoJih0c2spLT51c2FnZSk7IH0gd2hpbGUoMCkKIAotZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3RfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApOwogZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHB1dF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCkBAIC0xMTg3LDggKzExOTIsNyBAQAogI2RlZmluZSByZW1vdmVfcGFyZW50KHApCWxpc3RfZGVsX2luaXQoJihwKS0+c2libGluZykKICNkZWZpbmUgYWRkX3BhcmVudChwKQkJbGlzdF9hZGRfdGFpbCgmKHApLT5zaWJsaW5nLCYocCktPnBhcmVudC0+Y2hpbGRyZW4pCiAKLSNkZWZpbmUgbmV4dF90YXNrKHApCWxpc3RfZW50cnkoKHApLT50YXNrcy5uZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQotI2RlZmluZSBwcmV2X3Rhc2socCkJbGlzdF9lbnRyeSgocCktPnRhc2tzLnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGFza3MpCisjZGVmaW5lIG5leHRfdGFzayhwKQlsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZSgocCktPnRhc2tzLm5leHQpLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRhc2tzKQogCiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3MocCkgXAogCWZvciAocCA9ICZpbml0X3Rhc2sgOyAocCA9IG5leHRfdGFzayhwKSkgIT0gJmluaXRfdGFzayA7ICkKQEAgLTEyMDMsOSArMTIwNywxMCBAQAogI2RlZmluZSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KSBcCiAJd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IGcpCiAKLSNkZWZpbmUgdGhyZWFkX2dyb3VwX2xlYWRlcihwKQkocC0+cGlkID09IHAtPnRnaWQpCisvKiBkZV90aHJlYWQgZGVwZW5kcyBvbiB0aHJlYWRfZ3JvdXBfbGVhZGVyIG5vdCBiZWluZyBhIHBpZCBiYXNlZCBjaGVjayAqLworI2RlZmluZSB0aHJlYWRfZ3JvdXBfbGVhZGVyKHApCShwID09IHAtPmdyb3VwX2xlYWRlcikKIAotc3RhdGljIGlubGluZSB0YXNrX3QgKm5leHRfdGhyZWFkKHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgdGFza190ICpuZXh0X3RocmVhZChjb25zdCB0YXNrX3QgKnApCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHAtPnRocmVhZF9ncm91cC5uZXh0KSwKIAkJCQl0YXNrX3QsIHRocmVhZF9ncm91cCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmggYi9pbmNsdWRlL2xpbnV4L3NjcmVlbl9pbmZvLmgKaW5kZXggNjMzNjk4Ny4uMjkyNWU2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3JlZW5faW5mby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NyZWVuX2luZm8uaApAQCAtNDEsNyArNDEsOCBAQAogCXUxNiB2ZXNhcG1fb2ZmOwkJLyogMHgzMCAqLwogCXUxNiBwYWdlczsJCS8qIDB4MzIgKi8KIAl1MTYgdmVzYV9hdHRyaWJ1dGVzOwkvKiAweDM0ICovCi0JCQkJLyogMHgzNiAtLSAweDNmIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdTMyIGNhcGFiaWxpdGllczsgICAgICAgLyogMHgzNiAqLworCQkJCS8qIDB4M2EgLS0gMHgzZiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9hc3kuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9hc3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMjQyNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFfYXN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfYXN5LmgJSGVhZGVyIGZpbGUgZm9yIHRoZSBTYW5nb21hIFM1MDgvUzUxNCBhc3luY2hyb25vdXMgY29kZSBBUEkJCi0qCi0qIEF1dGhvcjogCUdpZGVvbiBIYWNrIAkKLSoKLSogQ29weXJpZ2h0OgkoYykgMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIEphbiAyOCwgMjAwMAlHaWRlb24gSGFjayAJSW5pdGlhbCBWZXJzaW9uCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIF9XQU5QSVBFX0FTWU5DX0gKLSNkZWZpbmUgX1dBTlBJUEVfQVNZTkNfSAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFNFVF9BU1lfQ09ORklHVVJBVElPTgkJMHhFMgkvKiBzZXQgdGhlIGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBRF9BU1lfQ09ORklHVVJBVElPTgkJMHhFMwkvKiByZWFkIHRoZSBjdXJyZW50IGFzeWNocm9ub3VzIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgRU5BQkxFX0FTWV9DT01NVU5JQ0FUSU9OUwkweEU0CS8qIGVuYWJsZSBhc3ljaHJvbm91cyBjb21tdW5pY2F0aW9ucyAqLwotI2RlZmluZSBESVNBQkxFX0FTWV9DT01NVU5JQ0FUSU9OUwkweEU1CS8qIGRpc2FibGUgYXN5Y2hyb25vdXMgY29tbXVuaWNhdGlvbnMgKi8KLSNkZWZpbmUgUkVBRF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMJMHhFNwkvKiByZXRyaWV2ZSB0aGUgYXN5Y2hyb25vdXMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBGTFVTSF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMJMHhFOAkvKiBmbHVzaCB0aGUgYXN5Y2hyb25vdXMgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBUUkFOU01JVF9BU1lfQlJFQUtfU0lHTkFMCTB4RUMJLyogdHJhbnNtaXQgYW4gYXN5Y2hyb25vdXMgYnJlYWsgc2lnbmFsICovCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgIFJldHVybiBjb2RlcyBmcm9tIGludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIENPTU1BTkRfSU5WQUxJRF9GT1JfUE9SVAkweDUwCS8qIHRoZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIHRoZSBzZWxlY3RlZCBwb3J0ICovCi0jZGVmaW5lIERJU0FCTEVfQVNZX0NPTU1TX0JFRk9SRV9DRkcgCTB4RTEJLyogY29tbXVuaWNhdGlvbnMgbXVzdCBiZSBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBBU1lfQ09NTVNfRU5BQkxFRAkJMHhFMQkvKiBjb21tdW5pY2F0aW9ucyBhcmUgY3VycmVudGx5IGVuYWJsZWQgKi8KLSNkZWZpbmUgQVNZX0NPTU1TX0RJU0FCTEVECQkweEUxCS8qIGNvbW11bmljYXRpb25zIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQgKi8KLSNkZWZpbmUgQVNZX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkweEUyCS8qIHBlcmZvcm0gYSBTRVRfQVNZX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCi0jZGVmaW5lIExHVEhfQVNZX0NGR19EQVRBX0lOVkFMSUQgIAkweEUyCS8qIHRoZSBsZW5ndGggb2YgdGhlIHBhc3NlZCBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLwotI2RlZmluZSBJTlZBTElEX0FTWV9DRkdfREFUQQkJMHhFMwkvKiB0aGUgcGFzc2VkIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIEFTWV9CUkVBS19TSUdOQUxfQlVTWQkJMHhFQwkvKiBhIGJyZWFrIHNpZ25hbCBpcyBiZWluZyB0cmFuc21pdHRlZCAqLwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfQVNZX0NPTkZJR1VSQVRJT04vUkVBRF9BU1lfQ09ORklHVVJBVElPTiBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZQkJCVBBQ0tFRDsJCQkJCQkJLyogdGhlIGJhdWQgcmF0ZSAqLwkKLQl1bnNpZ25lZCBzaG9ydCBsaW5lX2NvbmZpZ19vcHRpb25zCVBBQ0tFRDsJLyogbGluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlbV9jb25maWdfb3B0aW9ucwlQQUNLRUQ7CS8qIG1vZGVtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGFzeV9BUElfb3B0aW9ucwkJUEFDS0VEOwkvKiBhc3luY2hyb25vdXMgQVBJIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBhc3lfcHJvdG9jb2xfb3B0aW9ucwlQQUNLRUQ7IC8qIGFzeW5jaHJvbm91cyBwcm90b2NvbCBvcHRpb25zICovCi0JdW5zaWduZWQgc2hvcnQgVHhfYml0c19wZXJfY2hhcgkJUEFDS0VEOwkvKiBudW1iZXIgb2YgYml0cyBwZXIgdHggY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgUnhfYml0c19wZXJfY2hhcgkJUEFDS0VEOwkvKiBudW1iZXIgb2YgYml0cyBwZXIgcmVjZWl2ZWQgY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgc3RvcF9iaXRzCQlQQUNLRUQ7CS8qIG51bWJlciBvZiBzdG9wIGJpdHMgcGVyIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0IHBhcml0eQkJCVBBQ0tFRDsJLyogcGFyaXR5IGRlZmluaXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha190aW1lcgkJUEFDS0VEOwkvKiB0aGUgYnJlYWsgc2lnbmFsIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgYXN5X1J4X2ludGVyX2NoYXJfdGltZXIJUEFDS0VEOwkvKiB0aGUgcmVjZWl2ZSBpbnRlci1jaGFyYWN0ZXIgdGltZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBhc3lfUnhfY29tcGxldGVfbGVuZ3RoCVBBQ0tFRDsJLyogdGhlIHJlY2VpdmUgJ2J1ZmZlciBjb21wbGV0ZScgbGVuZ3RoICovCi0JdW5zaWduZWQgc2hvcnQgWE9OX2NoYXIJCQlQQUNLRUQ7CS8qIHRoZSBYT04gY2hhcmFjdGVyICovCi0JdW5zaWduZWQgc2hvcnQgWE9GRl9jaGFyCQlQQUNLRUQ7CS8qIHRoZSBYT0ZGIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0IGFzeV9zdGF0aXN0aWNzX29wdGlvbnMJUEFDS0VEOwkvKiBhc3luYyBvcGVyYXRpb25hbCBzdGF0IG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0ICAgIFBBQ0tFRDsvKiBwdHIgdG8gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9hc3lfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsvKiBwdHIgdG8gdGhlIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi0JdW5zaWduZWQgbG9uZyBwdHJfYXN5X1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7LyogcHRyIHRvIHRoZSByZWNlaXZlIHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi19IEFTWV9DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogcGVybWl0dGVkIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGZvciBzZXR0aW5nIHRoZSBhc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNSU5fQVNZX0JBVURfUkFURQkJNTAJLyogbWF4aW11bSBiYXVkIHJhdGUgKi8KLSNkZWZpbmUgTUFYX0FTWV9CQVVEX1JBVEUJCTI1MDAwMAkvKiBtaW5pbXVtIGJhdWQgcmF0ZSAqLwotI2RlZmluZSBNSU5fQVNZX0JJVFNfUEVSX0NIQVIJCTUJLyogbWluaW11bSBudW1iZXIgb2YgYml0cyBwZXIgY2hhcmFjdGVyICovCi0jZGVmaW5lIE1BWF9BU1lfQklUU19QRVJfQ0hBUgkJOAkvKiBtYXhpbXVtIG51bWJlciBvZiBiaXRzIHBlciBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgTUlOX0JSRUFLX1RNUl9WQUwJCTAJLyogbWluaW11bSBicmVhayBzaWduYWwgdGltZXIgKi8KLSNkZWZpbmUgTUFYX0JSRUFLX1RNUl9WQUwJCTUwMDAJLyogbWF4aW11bSBicmVhayBzaWduYWwgdGltZXIgKi8KLSNkZWZpbmUgTUlOX0FTWV9SWF9JTlRFUl9DSEFSX1RNUgkwCS8qIG1pbmltdW0gcmVjZWl2ZSBpbnRlci1jaGFyYWN0ZXIgdGltZXIgKi8KLSNkZWZpbmUgTUFYX0FTWV9SWF9JTlRFUl9DSEFSX1RNUgkzMDAwMAkvKiBtYXhpbXVtIHJlY2VpdmUgaW50ZXItY2hhcmFjdGVyIHRpbWVyICovCi0jZGVmaW5lIE1JTl9BU1lfUlhfQ1BMVF9MRU5HVEgJCTAJLyogbWluaW11bSByZWNlaXZlICdsZW5ndGggY29tcGxldGUnIHZhbHVlICovCi0jZGVmaW5lIE1BWF9BU1lfUlhfQ1BMVF9MRU5HVEgJCTIwMDAJLyogbWF4aW11bSByZWNlaXZlICdsZW5ndGggY29tcGxldGUnIHZhbHVlICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdhc3lfQVBJX29wdGlvbnMnICovCi0jZGVmaW5lIEFTWV9SWF9EQVRBX1RSQU5TUEFSRU5UCQkweDAwMDEJLyogZG8gbm90IHN0cmlwIHBhcml0eSBhbmQgdW51c2VkIGJpdHMgZnJvbSByZWNlaXZlZCBjaGFyYWN0ZXJzICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdhc3lfcHJvdG9jb2xfb3B0aW9ucycgKi8KLSNkZWZpbmUgQVNZX1JUU19IU19GT1JfUlgJCTB4MDAwMQkvKiBSVFMgaGFuZHNoYWtpbmcgaXMgdXNlZCBmb3IgcmVjZXB0aW9uIGNvbnRyb2wgKi8KLSNkZWZpbmUgQVNZX1hPTl9YT0ZGX0hTX0ZPUl9SWAkJMHgwMDAyCS8qIFhPTi9YT0ZGIGhhbmRzaGFraW5nIGlzIHVzZWQgZm9yIHJlY2VwdGlvbiBjb250cm9sICovCi0jZGVmaW5lIEFTWV9YT05fWE9GRl9IU19GT1JfVFgJCTB4MDAwNAkvKiBYT04vWE9GRiBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotI2RlZmluZSBBU1lfRENEX0hTX0ZPUl9UWAkJMHgwMDA4CS8qIERDRCBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotI2RlZmluZSBBU1lfQ1RTX0hTX0ZPUl9UWAkJMHgwMDIwCS8qIENUUyBoYW5kc2hha2luZyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gY29udHJvbCAqLwotCi0vKiBiaXQgc2V0dGluZ3MgZm9yIHRoZSAnc3RvcF9iaXRzJyBkZWZpbml0aW9uICovCi0jZGVmaW5lIE9ORV9TVE9QX0JJVAkJCTEJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgMSBzdG9wIGJpdCAqLwotI2RlZmluZSBUV09fU1RPUF9CSVRTCQkJMgkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciAyIHN0b3AgYml0cyAqLwotI2RlZmluZSBPTkVfQU5EX0FfSEFMRl9TVE9QX0JJVFMJMwkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciAxLjUgc3RvcCBiaXRzICovCi0KLS8qIGJpdCBzZXR0aW5ncyBmb3IgdGhlICdwYXJpdHknIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgTk9fUEFSSVRZCQkJMAkJCS8qIHJlcHJlc2VudGF0aW9uIGZvciBubyBwYXJpdHkgKi8KLSNkZWZpbmUgT0REX1BBUklUWQkJCTEJCQkvKiByZXByZXNlbnRhdGlvbiBmb3Igb2RkIHBhcml0eSAqLwotI2RlZmluZSBFVkVOX1BBUklUWQkJCTIJCQkvKiByZXByZXNlbnRhdGlvbiBmb3IgZXZlbiBwYXJpdHkgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ09NTVNfRVJST1JfU1RBVFMgY29tbWFuZCAoYXN5bmNocm9ub3VzIG1vZGUpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBjb21tdW5pY2F0aW9ucyBlcnJvciBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IFJ4X292ZXJydW5fZXJyX2NvdW50ICAgCVBBQ0tFRDsJLyogcmVjZWl2ZXIgb3ZlcnJ1biBlcnJvciBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X3Bhcml0eV9lcnJfY291bnQJUEFDS0VEOwkvKiBwYXJpdHkgZXJyb3JzIHJlY2VpdmVkIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfZnJhbWluZ19lcnJfY291bnQJUEFDS0VEOwkvKiBmcmFtaW5nIGVycm9ycyByZWNlaXZlZCBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8yIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgY29tbXNfZXJyX3N0YXRfcmVzZXJ2ZWRfMyBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIHNob3J0IGNvbW1zX2Vycl9zdGF0X3Jlc2VydmVkXzQgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF81IFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgRENEX3N0YXRlX2NoYW5nZV9jb3VudCAJUEFDS0VEOwkvKiBEQ0Qgc3RhdGUgY2hhbmdlIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgQ1RTX3N0YXRlX2NoYW5nZV9jb3VudAlQQUNLRUQ7CS8qIENUUyBzdGF0ZSBjaGFuZ2UgY291bnQgKi8KLX0gQVNZX0NPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgUkVBRF9BU1lfT1BFUkFUSU9OQUxfU1RBVFMgY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0KLQkvKiBEYXRhIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2Jsb2Nrc19UeF9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIGJsb2NrcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19UeF9jb3VudCAgUEFDS0VEOy8qIG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9UeF90aHJvdWdocHV0ICAgUEFDS0VEOy8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KLQl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7LyogbWlsbGlzZWNvbmQgdGltZSB1c2VkIGZvciB0aGUgVHggdGhyb3VnaHB1dCBjb21wdXRhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgVHhfRGF0YV9kaXNjYXJkX2xndGhfZXJyX2NvdW50IFBBQ0tFRDsvKiBudW1iZXIgb2YgRGF0YSBibG9ja3MgZGlzY2FyZGVkIChsZW5ndGggZXJyb3IpICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MSBQQUNLRUQ7LyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDIgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQzIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBEYXRhIHJlY2VwdGlvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2Jsb2Nrc19SeF9jb3VudCBQQUNLRUQ7LyogbnVtYmVyIG9mIGJsb2NrcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCAgUEFDS0VEOy8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0ICAgUEFDS0VEOy8qIHJlY2VpdmUgdGhyb3VnaHB1dCAqLwotCXVuc2lnbmVkIGxvbmcgbm9fbXNfZm9yX0RhdGFfUnhfdGhydXB1dF9jb21wIFBBQ0tFRDsvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCi0JdW5zaWduZWQgbG9uZyBSeF9EYXRhX2J5dGVzX2Rpc2NhcmRfY291bnQgICAgUEFDS0VEOy8qIHJlY2VpdmVkIERhdGEgYnl0ZXMgZGlzY2FyZGVkICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9SeF9zdGF0MSAgICAgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQotCS8qIGhhbmRzaGFraW5nIHByb3RvY29sIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBYT05fY2hhcnNfVHhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9OIGNoYXJhY3RlcnMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBYT0ZGX2NoYXJzX1R4X2NvdW50CVBBQ0tFRDsJLyogbnVtYmVyIG9mIFhPRkYgY2hhcmFjdGVycyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIHNob3J0IFhPTl9jaGFyc19SeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBYT04gY2hhcmFjdGVycyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIHNob3J0IFhPRkZfY2hhcnNfUnhfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgWE9GRiBjaGFyYWN0ZXJzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgc2hvcnQgVHhfaGFsdF9tb2RlbV9sb3dfY291bnQJUEFDS0VEOyAvKiBudW1iZXIgb2YgdGltZXMgVHggaGFsdGVkIChtb2RlbSBsaW5lIGxvdykgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9oYWx0X1JUU19sb3dfY291bnQJUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgUnggaGFsdGVkIGJ5IHNldHRpbmcgUlRTIGxvdyAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfaGFuZHNoYWtpbmdfc3RhdDEgUEFDS0VEOy8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQotCS8qIGJyZWFrIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha19UeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBicmVhayBzZXF1ZW5jZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBicmVha19SeF9jb3VudAlQQUNLRUQ7CS8qIG51bWJlciBvZiBicmVhayBzZXF1ZW5jZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2JyZWFrX3N0YXQxIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEJUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCi19IEFTWV9PUEVSQVRJT05BTF9TVEFUU19TVFJVQ1Q7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIERhdGEgdHJhbnNtaXNzaW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBEYXRhIGJsb2NrIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQgbnVtYmVyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnRzICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdCBlbGVtZW50IGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfVHhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFuc21pdCBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLX0gQVNZX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOwotCi0KLS8qIHRoZSBEYXRhIGJsb2NrIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50IHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgb3BwX2ZsYWcgUEFDS0VEOwkJCQkJCQkJLyogb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBzaG9ydCBkYXRhX2xlbmd0aCBQQUNLRUQ7CQkJCQkJLyogbGVuZ3RoIG9mIHRoZSBibG9jayB0byBiZSB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CQkJCQkJCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkJCQkJCQkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJCQkJCQkJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJCQkJCQkvKiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgKi8KLX0gQVNZX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSByZWNlcHRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgYmxvY2sgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgICAgUEFDS0VEOy8qIG51bWJlciBvZiByZWNlaXZlIHN0YXR1cyBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1J4X3N0YXR1c19lbGVtZW50cyAgUEFDS0VEOy8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBlbGVtZW50IGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIG5leHRfUnhfc3RhdHVzX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsvKiBwb2ludGVyIHRvIHRoZSBuZXh0IHJlY2VpdmUgZWxlbWVudCB0byBiZSB1c2VkICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJfUnhfYnVmZmVyCVBBQ0tFRDsvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGVuZF9hZGRyX1J4X2J1ZmZlciAJUEFDS0VEOy8qIGVuZCBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCi19IEFTWV9SWF9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKLQotLyogdGhlIERhdGEgYmxvY2sgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIAkJUEFDS0VEOwkvKiBvcHAgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuZ3RoIAlQQUNLRUQ7CS8qIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YSBibG9jayAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSAJUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCAJUEFDS0VEOyAvKiByZWNlaXZlIHRpbWUgc3RhbXAgKEhETENfU1RSRUFNSU5HX01PREUpICovCi0JdW5zaWduZWQgc2hvcnQgZGF0YV9idWZmZXJlZCAJUEFDS0VEOwkvKiB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgc3RpbGwgYnVmZmVyZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIAlQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXJlYSAqLwotfSBBU1lfREFUQV9SWF9TVEFUVVNfRUxfU1RSVUNUOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9jaGRsYy5oIGIvaW5jbHVkZS9saW51eC9zZGxhX2NoZGxjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZTM1YTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhX2NoZGxjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBzZGxhX2NoZGxjLmgJU2FuZ29tYSBDaXNjbyBIRExDIGZpcm13YXJlIEFQSSBkZWZpbml0aW9ucwotCi0gQXV0aG9yOiAgICAgIAlHaWRlb24gSGFjawotCQlOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+CQotCi0gQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLQotCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0JCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLQkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0JCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBPY3QgMDQsIDE5OTkgIE5lbmFkIENvcmJpYyAgICBVcGRhdGVkIEFQSSBzdXBwb3J0Ci0gIEp1biAwMiwgMTk5OSAgR2lkZW9uIEhhY2sgICAgIENoYW5nZXMgZm9yIFM1MTQgdXNhZ2UuCi0gIE9jdCAyOCwgMTk5OAlKYXNwcmVldCBTaW5naAlNYWRlIGNoYW5nZXMgZm9yIER1YWwgUG9ydCBDSERMQy4KLSAgSnVuIDExLCAxOTk4CURhdmlkIEZvbmcJSW5pdGlhbCB2ZXJzaW9uLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSBPcmdhbml6YXRpb24KLQktIENvbXBhdGliaWxpdHkgbm90ZXMKLQktIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQotCS0gSW50ZXJmYWNlIGNvbW1hbmRzCi0JLSBSZXR1cm4gY29kZSBmcm9tIGludGVyZmFjZSBjb21tYW5kcwotCS0gQ29uc3RhbnRzIGZvciB0aGUgY29tbWFuZHMgKHN0cnVjdHVyZXMgZm9yIGNhc3RpbmcgZGF0YSkKLQktIFVEUCBNYW5hZ2VtZW50IGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9TRExBX0NIRExDX0gKLSMgIGRlZmluZSBfU0RMQ19DSERMQ19ICi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBOb3RlczoKLQotCUFsbCBzdHJ1Y3RyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpZ25lZC4gIAotCi0JQ29tcGlsZXIJUGxhdGZvcm0KLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlHTlUgQwkJTGludXgKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmbmRlZglQQUNLRUQKLSNkZWZpbmUJUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYJLyogUEFDS0VEICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgIENvbnN0YW50cyBkZWZpbmluZyB0aGUgc2hhcmVkIG1lbW9yeSBjb250cm9sIGJsb2NrIChtYWlsYm94KQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFBSSV9CQVNFX0FERFJfTUJfU1RSVUNUIAkweEUwMDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCi0jZGVmaW5lIFNFQ19CQVNFX0FERFJfTUJfU1RSVUNUIAkweEU4MDAgCS8qIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggc3RydWN0dXJlIG9uIHRoZSBhZGFwdGVyICovCi0jZGVmaW5lIFNJWkVPRl9NQl9EQVRBX0JGUgkJMjAzMgkvKiB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIG1haWxib3ggZGF0YSBhcmVhICovCi0jZGVmaW5lIE5VTUJFUl9NQl9SRVNFUlZFRF9CWVRFUwkweDBCCS8qIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgYnl0ZXMgaW4gdGhlIG1haWxib3ggaGVhZGVyIGFyZWEgKi8KLQotCi0jZGVmaW5lIE1JTl9MR1RIX0NIRExDX0RBVEFfQ0ZHICAJMzAwIAkvKiBtaW4gbGVuZ3RoIG9mIHRoZSBDSERMQyBkYXRhIGZpZWxkIChmb3IgY29uZmlndXJhdGlvbiBwdXJwb3NlcykgKi8KLSNkZWZpbmUgUFJJX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAxNTM1NCAvKiBQUklNQVJZIC0gbWF4IGxlbmd0aCBvZiB0aGUgQ0hETEMgZGF0YSBmaWVsZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogdGhlIG9wcCBmbGFnICovCi0JdW5zaWduZWQgY2hhciBjb21tYW5kIFBBQ0tFRDsJCQkvKiB0aGUgdXNlciBjb21tYW5kICovCi0JdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7CQkvKiB0aGUgZGF0YSBsZW5ndGggKi8KLSAgCXVuc2lnbmVkIGNoYXIgcmV0dXJuX2NvZGUgUEFDS0VEOwkJLyogdGhlIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgY2hhciBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gUEFDS0VEOwkvKiB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX01BSUxCT1hfU1RSVUNUOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHBpZF90ICAgICAgICAgICAgICAgICAgIHBpZF9udW0gUEFDS0VEOwotICAgICAgICBDSERMQ19NQUlMQk9YX1NUUlVDVCAgICAgY21kYXJlYSBQQUNLRUQ7Ci0KLX0gQ01EQkxPQ0tfU1RSVUNUOwotCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSBjb21tYW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBnbG9iYWwgaW50ZXJmYWNlIGNvbW1hbmRzICovCi0jZGVmaW5lIFJFQURfR0xPQkFMX0VYQ0VQVElPTl9DT05ESVRJT04JMHgwMQotI2RlZmluZSBTRVRfR0xPQkFMX0NPTkZJR1VSQVRJT04JMHgwMgotI2RlZmluZSBSRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OCTB4MDMKLSNkZWZpbmUgUkVBRF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNAotI2RlZmluZSBGTFVTSF9HTE9CQUxfU1RBVElTVElDUwkJMHgwNQotI2RlZmluZSBTRVRfTU9ERU1fU1RBVFVTCQkweDA2CS8qIHNldCBzdGF0dXMgb2YgRFRSIG9yIFJUUyAqLwotI2RlZmluZSBSRUFEX01PREVNX1NUQVRVUwkJMHgwNwkvKiByZWFkIHN0YXR1cyBvZiBDVFMgYW5kIERDRCAqLwotI2RlZmluZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTCQkweDA4CQotI2RlZmluZSBGTFVTSF9DT01NU19FUlJPUl9TVEFUUwkJMHgwOQotI2RlZmluZSBTRVRfVFJBQ0VfQ09ORklHVVJBVElPTgkJMHgwQQkvKiBzZXQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCi0jZGVmaW5lIFJFQURfVFJBQ0VfQ09ORklHVVJBVElPTgkweDBCCS8qIHJlYWQgdGhlIGxpbmUgdHJhY2UgY29uZmlnICovCi0jZGVmaW5lIFJFQURfVFJBQ0VfU1RBVElTVElDUwkJMHgwQwkvKiByZWFkIHRoZSB0cmFjZSBzdGF0aXN0aWNzICovCi0jZGVmaW5lIEZMVVNIX1RSQUNFX1NUQVRJU1RJQ1MJCTB4MEQJLyogZmx1c2ggdGhlIHRyYWNlIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwJCTB4MUMJLyogc2V0IHRoZSBzdGF0dXMgb2YgdGhlIFM1MDgvRlQxIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgU0VUX0ZUMV9DT05GSUdVUkFUSU9OCQkweDE4CS8qIHNldCB0aGUgRlQxIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBRF9GVDFfQ09ORklHVVJBVElPTgkJMHgxOQkvKiByZWFkIHRoZSBGVDEgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUUkFOU01JVF9BU1lOQ19EQVRBX1RPX0ZUMQkweDFBCS8qIG91dHB1dCBhc3luY2hyb25vdXMgZGF0YSB0byB0aGUgRlQxICovCi0jZGVmaW5lIFJFQ0VJVkVfQVNZTkNfREFUQV9GUk9NX0ZUMQkweDFCCS8qIHJlY2VpdmUgYXN5bmNocm9ub3VzIGRhdGEgZnJvbSB0aGUgRlQxICovCi0jZGVmaW5lIEZUMV9NT05JVE9SX1NUQVRVU19DVFJMCQkweDFDCS8qIHNldCB0aGUgc3RhdHVzIG9mIHRoZSBGVDEgbW9uaXRvcmluZyAqLwotCi0jZGVmaW5lIFJFQURfRlQxX09QRVJBVElPTkFMX1NUQVRTCTB4MUQJLyogcmVhZCB0aGUgUzUwOC9GVDEgb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBTRVRfRlQxX01PREUJCQkweDFFCS8qIHNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgUzUwOC9GVDEgbW9kdWxlICovCi0KLS8qIENIRExDLWxldmVsIGludGVyZmFjZSBjb21tYW5kcyAqLwotI2RlZmluZSBSRUFEX0NIRExDX0NPREVfVkVSU0lPTgkJMHgyMAkKLSNkZWZpbmUgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OCTB4MjEJLyogcmVhZCBleGNlcHRpb24gY29uZGl0aW9uIGZyb20gdGhlIGFkYXB0ZXIgKi8KLSNkZWZpbmUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04JCTB4MjIKLSNkZWZpbmUgUkVBRF9DSERMQ19DT05GSUdVUkFUSU9OCTB4MjMKLSNkZWZpbmUgRU5BQkxFX0NIRExDX0NPTU1VTklDQVRJT05TCTB4MjQKLSNkZWZpbmUgRElTQUJMRV9DSERMQ19DT01NVU5JQ0FUSU9OUwkweDI1Ci0jZGVmaW5lIFJFQURfQ0hETENfTElOS19TVEFUVVMJCTB4MjYKLSNkZWZpbmUgUkVBRF9DSERMQ19PUEVSQVRJT05BTF9TVEFUUwkweDI3Ci0jZGVmaW5lIEZMVVNIX0NIRExDX09QRVJBVElPTkFMX1NUQVRTCTB4MjgKLSNkZWZpbmUgU0VUX0NIRExDX0lOVEVSUlVQVF9UUklHR0VSUwkweDMwCS8qIHNldCBhcHBsaWNhdGlvbiBpbnRlcnJ1cHQgdHJpZ2dlcnMgKi8KLSNkZWZpbmUgUkVBRF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMJMHgzMQkvKiByZWFkIGFwcGxpY2F0aW9uIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogU3BlY2lhbCBVRFAgZHJpdmVycyBtYW5hZ2VtZW50IGNvbW1hbmRzICovCi0jZGVmaW5lIENQSVBFX0VOQUJMRV9UUkFDSU5HCQkJCTB4NTAKLSNkZWZpbmUgQ1BJUEVfRElTQUJMRV9UUkFDSU5HCQkJCTB4NTEKLSNkZWZpbmUgQ1BJUEVfR0VUX1RSQUNFX0lORk8JCQkJMHg1MgotI2RlZmluZSBDUElQRV9HRVRfSUJBX0RBVEEJCQkJMHg1MwotI2RlZmluZSBDUElQRV9GVDFfUkVBRF9TVEFUVVMJCQkJMHg1NAotI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9JRlNFTkQJCQkweDU1Ci0jZGVmaW5lIENQSVBFX0RSSVZFUl9TVEFUX0lOVFIJCQkJMHg1NgotI2RlZmluZSBDUElQRV9EUklWRVJfU1RBVF9HRU4JCQkJMHg1NwotI2RlZmluZSBDUElQRV9GTFVTSF9EUklWRVJfU1RBVFMJCQkweDU4Ci0jZGVmaW5lIENQSVBFX1JPVVRFUl9VUF9USU1FCQkJCTB4NTkKLQotLyogRHJpdmVyIHNwZWNpZmljIGNvbW1hbmRzIGZvciBBUEkgKi8KLSNkZWZpbmUJQ0hETENfUkVBRF9UUkFDRV9EQVRBCQkweEU0CS8qIHJlYWQgdHJhY2UgZGF0YSAqLwotI2RlZmluZSBUUkFDRV9BTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgVFJBQ0VfUFJPVAkJCTB4MDEKLSNkZWZpbmUgVFJBQ0VfREFUQQkJCTB4MDIKLQotI2RlZmluZSBESVNDQVJEX1JYX0VSUk9SX0ZSQU1FUwkweDAwMDEKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICBSZXR1cm4gY29kZXMgZnJvbSBpbnRlcmZhY2UgY29tbWFuZHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBDT01NQU5EX09LCQkJCTB4MDAKLQotLyogcmV0dXJuIGNvZGVzIGZyb20gZ2xvYmFsIGludGVyZmFjZSBjb21tYW5kcyAqLwotI2RlZmluZSBOT19HTE9CQUxfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MDEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KLSNkZWZpbmUgTEdUSF9HTE9CQUxfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIExHVEhfVFJBQ0VfQ0ZHX0RBVEFfSU5WQUxJRAkJMHgwMQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgdHJhY2UgY29uZmlndXJhdGlvbiBkYXRhIGlzIGludmFsaWQgKi8KLSNkZWZpbmUgSVJRX1RJTUVPVVRfVkFMVUVfSU5WQUxJRAkJMHgwMgkvKiBhbiBpbnZhbGlkIGFwcGxpY2F0aW9uIElSUSB0aW1lb3V0IHZhbHVlIHdhcyBzZWxlY3RlZCAqLwotI2RlZmluZSBUUkFDRV9DT05GSUdfSU5WQUxJRAkJCTB4MDIJLyogdGhlIHBhc3NlZCBsaW5lIHRyYWNlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCAqLwotI2RlZmluZSBBREFQVEVSX09QRVJBVElOR19GUkVRX0lOVkFMSUQJCTB4MDMJLyogYW4gaW52YWxpZCBhZGFwdGVyIG9wZXJhdGluZyBmcmVxdWVuY3kgd2FzIHNlbGVjdGVkICovCi0jZGVmaW5lIFRSQ19ERUFDX1RNUl9JTlZBTElECQkJMHgwMwkvKiB0aGUgdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyIGlzIGludmFsaWQgKi8KLSNkZWZpbmUgUzUwOF9GVDFfQURQVFJfTk9UX1BSRVNFTlQJCTB4MEMJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSU5WQUxJRF9GVDFfU1RBVFVTX1NFTEVDVElPTiAgICAgICAgICAgIDB4MEQgICAgLyogdGhlIFM1MDgvRlQxIHN0YXR1cyBzZWxlY3Rpb24gaXMgaW52YWxpZCAqLwotI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0VOQUJMRUQJCTB4MEQgICAgLyogdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzIGhhdmUgbm90IGJlZW4gZW5hYmxlZCAqLwotI2RlZmluZSBGVDFfT1BfU1RBVFNfTk9UX0FWQUlMQUJMRQkJMHgwRSAgICAvKiB0aGUgRlQxIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgYXJlIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlICovCi0jZGVmaW5lIFM1MDhfRlQxX01PREVfU0VMRUNUSU9OX0JVU1kJCTB4MEUJLyogdGhlIFM1MDgvRlQxIGFkYXB0ZXIgaXMgYnVzeSBzZWxlY3RpbmcgdGhlIG9wZXJhdGlvbmFsIG1vZGUgKi8KLQotLyogcmV0dXJuIGNvZGVzIGZyb20gY29tbWFuZCBSRUFEX0dMT0JBTF9FWENFUFRJT05fQ09ORElUSU9OICovCi0jZGVmaW5lIEVYQ0VQX01PREVNX1NUQVRVU19DSEFOR0UJCTB4MTAJCS8qIGEgbW9kZW0gc3RhdHVzIGNoYW5nZSBvY2N1cnJlZCAqLwotI2RlZmluZSBFWENFUF9UUkNfRElTQUJMRUQJCQkweDExCQkvKiB0aGUgdHJhY2UgaGFzIGJlZW4gZGlzYWJsZWQgKi8KLSNkZWZpbmUgRVhDRVBfSVJRX1RJTUVPVVQJCQkweDEyCQkvKiBJUlEgdGltZW91dCAqLwotCi0vKiByZXR1cm4gY29kZXMgZnJvbSBDSERMQy1sZXZlbCBpbnRlcmZhY2UgY29tbWFuZHMgKi8KLSNkZWZpbmUgTk9fQ0hETENfRVhDRVBfQ09ORF9UT19SRVBPUlQJCTB4MjEJLyogdGhlcmUgaXMgbm8gQ0hETEMgZXhjZXB0aW9uIGNvbmRpdGlvbiB0byByZXBvcnQgKi8KLSNkZWZpbmUgQ0hETENfQ09NTVNfRElTQUJMRUQJCQkweDIxCS8qIGNvbW11bmljYXRpb25zIGFyZSBub3QgY3VycmVudGx5IGVuYWJsZWQgKi8KLSNkZWZpbmUgQ0hETENfQ09NTVNfRU5BQkxFRAkJCTB4MjEJLyogY29tbXVuaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBlbmFibGVkICovCi0jZGVmaW5lIERJU0FCTEVfQ0hETENfQ09NTVNfQkVGT1JFX0NGRwkJMHgyMQkvKiBDSERMQyBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEVOQUJMRV9DSERMQ19DT01NU19CRUZPUkVfQ09OTgkJMHgyMQkvKiBjb21tdW5pY2F0aW9ucyBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIHVzaW5nIHRoZSBDSERMQ19DT05ORUNUIGNvbm1tYW5kICovCi0jZGVmaW5lIENIRExDX0NGR19CRUZPUkVfQ09NTVNfRU5BQkxFRAkJMHgyMgkvKiBwZXJmb3JtIGEgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gYmVmb3JlIGVuYWJsaW5nIGNvbW1zICovCi0jZGVmaW5lIExHVEhfQ0hETENfQ0ZHX0RBVEFfSU5WQUxJRCAJCTB4MjIJLyogdGhlIGxlbmd0aCBvZiB0aGUgcGFzc2VkIENIRExDIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIExHVEhfSU5UX1RSSUdHRVJTX0RBVEFfSU5WQUxJRAkJMHgyMgkvKiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXNzZWQgaW50ZXJydXB0IHRyaWdnZXIgZGF0YSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIElOVkFMSURfSVJRX1NFTEVDVEVECQkJMHgyMwkvKiBpbiBpbnZhbGlkIElSUSB3YXMgc2VsZWN0ZWQgaW4gdGhlIFNFVF9DSERMQ19JTlRFUlJVUFRfVFJJR0dFUlMgKi8KLSNkZWZpbmUgSU5WQUxJRF9DSERMQ19DRkdfREFUQQkJCTB4MjMJLyogdGhlIHBhc3NlZCBDSERMQyBjb25maWd1cmF0aW9uIGRhdGEgaXMgaW52YWxpZCAqLwotI2RlZmluZSBJUlFfVE1SX1ZBTFVFX0lOVkFMSUQJCQkweDI0CS8qIGFuIGludmFsaWQgYXBwbGljYXRpb24gSVJRIHRpbWVyIHZhbHVlIHdhcyBzZWxlY3RlZCAqLwotI2RlZmluZSBMQVJHRVJfUEVSQ0VOVF9UWF9CRlJfUkVRVUlSRUQJCTB4MjQJLyogYSBsYXJnZXIgVHggYnVmZmVyIHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQgKi8KLSNkZWZpbmUgTEFSR0VSX1BFUkNFTlRfUlhfQkZSX1JFUVVJUkVECQkweDI1CS8qIGEgbGFyZ2VyIFJ4IGJ1ZmZlciBwZXJjZW50YWdlIGlzIHJlcXVpcmVkICovCi0jZGVmaW5lIFM1MTRfQk9USF9QT1JUU19TQU1FX0NMS19NT0RFCQkweDI2CS8qIFM1MTQgLSBib3RoIHBvcnRzIG11c3QgaGF2ZSBzYW1lIGNsb2NrIG1vZGUgKi8KLSNkZWZpbmUgSU5WQUxJRF9DTU5EX0hETENfU1RSRUFNX01PREUgICAgICAgICAgIDB4NEUgICAgLyogdGhlIENIRExDIGludGVyZmFjZSBjb21tYW5kIGlzIGludmFsaWQgZm9yIEhETEMgc3RyZWFtaW5nIG1vZGUgKi8KLSNkZWZpbmUgSU5WQUxJRF9DSERMQ19DT01NQU5ECQkJMHg0RgkvKiB0aGUgZGVmaW5lZCBDSERMQyBpbnRlcmZhY2UgY29tbWFuZCBpcyBpbnZhbGlkICovCi0KLS8qIHJldHVybiBjb2RlcyBmcm9tIGNvbW1hbmQgUkVBRF9DSERMQ19FWENFUFRJT05fQ09ORElUSU9OICovCi0jZGVmaW5lIEVYQ0VQX0xJTktfQUNUSVZFCQkJMHgzMAkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGFjdGl2ZSAqLwotI2RlZmluZSBFWENFUF9MSU5LX0lOQUNUSVZFX01PREVNCQkweDMxCS8qIHRoZSBDSERMQyBsaW5rIGhhcyBiZWNvbWUgaW5hY3RpdmUgKG1vZGVtIHN0YXR1cykgKi8KLSNkZWZpbmUgRVhDRVBfTElOS19JTkFDVElWRV9LUEFMVgkJMHgzMgkvKiB0aGUgQ0hETEMgbGluayBoYXMgYmVjb21lIGluYWN0aXZlIChrZWVwYWxpdmUgc3RhdHVzKSAqLwotI2RlZmluZSBFWENFUF9JUF9BRERSRVNTX0RJU0NPVkVSRUQJCTB4MzMJLyogdGhlIElQIGFkZHJlc3MgaGFzIGJlZW4gZGlzY292ZXJlZCAqLwotI2RlZmluZSBFWENFUF9MT09QQkFDS19DT05ESVRJT04JCTB4MzQJLyogYSBsb29wYmFjayBjb25kaXRpb24gaGFzIG9jY3VycmVkICovCi0KLQotLyogcmV0dXJuIGNvZGUgZnJvbSBjb21tYW5kIENIRExDX1NFTkRfV0FJVCBhbmQgQ0hETENfU0VORF9OT19XQUlUICovCi0jZGVmaW5lIExJTktfRElTQ09OTkVDVEVECQkJMHgyMQotI2RlZmluZSBOT19UWF9CRlJTX0FWQUlMCQkJMHgyNAotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvbnN0YW50cyBmb3IgdGhlIFNFVF9HTE9CQUxfQ09ORklHVVJBVElPTi9SRUFEX0dMT0JBTF9DT05GSUdVUkFUSU9OIGNvbW1hbmRzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBhZGFwdGVyX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogYWRhcHRlciBjb25maWcgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dCBQQUNLRUQ7CQkvKiBhcHBsaWNhdGlvbiBJUlEgdGltZW91dCAqLwotCXVuc2lnbmVkIGxvbmcgYWRhcHRlcl9vcGVyYXRpbmdfZnJlcXVlbmN5IFBBQ0tFRDsJLyogYWRhcHRlciBvcGVyYXRpbmcgZnJlcXVlbmN5ICovCi19IEdMT0JBTF9DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnYXBwX0lSUV90aW1lb3V0JyAqLwotI2RlZmluZSBNQVhfQVBQX0lSUV9USU1FT1VUX1ZBTFVFCTUwMDAJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIElSUSB0aW1lb3V0ICovCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0dMT0JBTF9TVEFUSVNUSUNTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGdsb2JhbCBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IGFwcF9JUlFfdGltZW91dF9jb3VudCBQQUNLRUQ7Ci19IEdMT0JBTF9TVEFUU19TVFJVQ1Q7Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NPTU1TX0VSUk9SX1NUQVRTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGNvbW11bmljYXRpb25zIGVycm9yIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgc2hvcnQgUnhfb3ZlcnJ1bl9lcnJfY291bnQgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IENSQ19lcnJfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlciBDUkMgZXJyb3IgY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9hYm9ydF9jb3VudCBQQUNLRUQ7IAkvKiBhYm9ydCBmcmFtZXMgcmVjdmQgY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9kaXNfcHJpX2JmcnNfZnVsbF9jb3VudCBQQUNLRUQ7LyogcmVjZWl2ZXIgZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb21tc19lcnJfc3RhdF9yZXNlcnZlZF8xIFBBQ0tFRDsvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBzZWNfVHhfYWJvcnRfbXNkX1R4X2ludF9jb3VudCBQQUNLRUQ7IC8qIHNlY29uZGFyeSAtIGFib3J0IGZyYW1lcyB0cmFuc21pdHRlZCBjb3VudCAobWlzc2VkIFR4IGludGVycnVwdCkgKi8KLQl1bnNpZ25lZCBzaG9ydCBtaXNzZWRfVHhfdW5kX2ludF9jb3VudCBQQUNLRUQ7CS8qIG1pc3NlZCB0eCB1bmRlcnJ1biBpbnRlcnJ1cHQgY291bnQgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VjX1R4X2Fib3J0X2NvdW50IFBBQ0tFRDsgICAvKnNlY29uZGFyeS1hYm9ydCBmcmFtZXMgdHggY291bnQgKi8KLQl1bnNpZ25lZCBzaG9ydCBEQ0Rfc3RhdGVfY2hhbmdlX2NvdW50IFBBQ0tFRDsgLyogRENEIHN0YXRlIGNoYW5nZSAqLwotCXVuc2lnbmVkIHNob3J0IENUU19zdGF0ZV9jaGFuZ2VfY291bnQgUEFDS0VEOyAvKiBDVFMgc3RhdGUgY2hhbmdlICovCi19IENPTU1TX0VSUk9SX1NUQVRTX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzIHVzZWQgZm9yIGxpbmUgdHJhY2luZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgdHJhY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKFNFVF9UUkFDRV9DT05GSUdVUkFUSU9OL1JFQURfVFJBQ0VfQ09ORklHVVJBVElPTiBjb21tYW5kcykgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIHRyYWNlX2NvbmZpZyBQQUNLRUQ7CQkvKiB0cmFjZSBjb25maWd1cmF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgdHJhY2VfZGVhY3RpdmF0aW9uX3RpbWVyIFBBQ0tFRDsJLyogdHJhY2UgZGVhY3RpdmF0aW9uIHRpbWVyICovCi0JdW5zaWduZWQgbG9uZyBwdHJfdHJhY2Vfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBsaW5lIHRyYWNlIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLX0gTElORV9UUkFDRV9DT05GSUdfU1RSVUNUOwotCi0vKiAndHJhY2VfY29uZmlnJyBiaXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgVFJBQ0VfSU5BQ1RJVkUJCTB4MDAJLyogdHJhY2UgaXMgaW5hY3RpdmUgKi8KLSNkZWZpbmUgVFJBQ0VfQUNUSVZFCQkweDAxCS8qIHRyYWNlIGlzIGFjdGl2ZSAqLwotI2RlZmluZSBUUkFDRV9ERUxBWV9NT0RFCTB4MDQJLyogb3BlcmF0ZSB0aGUgdHJhY2UgaW4gZGVsYXkgbW9kZSAqLwotI2RlZmluZSBUUkFDRV9EQVRBX0ZSQU1FUwkweDA4CS8qIHRyYWNlIERhdGEgZnJhbWVzICovCi0jZGVmaW5lIFRSQUNFX1NMQVJQX0ZSQU1FUwkweDEwCS8qIHRyYWNlIFNMQVJQIGZyYW1lcyAqLwotI2RlZmluZSBUUkFDRV9DRFBfRlJBTUVTCTB4MjAJLyogdHJhY2UgQ0RQIGZyYW1lcyAqLwotCi0vKiB0aGUgbGluZSB0cmFjZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl90cmFjZV9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgbGluZSB0cmFjZSBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX3RyYWNlX3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhY2UgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X3RyYWNlX2VsZW1lbnRfdG9fdXNlIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgbmV4dCB0cmFjZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl90cmFjZV9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHJfdHJhY2VfYnVmZmVyIFBBQ0tFRDsJCS8qIGVuZCBhZGRyZXNzIG9mIHRoZSB0cmFjZSBkYXRhIGJ1ZmZlciAqLwotfSBUUkFDRV9TVEFUVVNfRUxfQ0ZHX1NUUlVDVDsKLQotLyogdGhlIGxpbmUgdHJhY2Ugc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkJLyogb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBzaG9ydCB0cmFjZV9sZW5ndGggUEFDS0VEOwkJLyogdHJhY2UgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciB0cmFjZV90eXBlIFBBQ0tFRDsJCS8qIHRyYWNlIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCB0cmFjZV90aW1lX3N0YW1wIFBBQ0tFRDsJLyogdGltZSBzdGFtcCAqLwotCXVuc2lnbmVkIHNob3J0IHRyYWNlX3Jlc2VydmVkXzEgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0JdW5zaWduZWQgbG9uZyB0cmFjZV9yZXNlcnZlZF8yIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9kYXRhX2JmciBQQUNLRUQ7CQkvKiBwdHIgdG8gdGhlIHRyYWNlIGRhdGEgYnVmZmVyICovCi19IFRSQUNFX1NUQVRVU19FTEVNRU5UX1NUUlVDVDsKLQotLyogInRyYWNlX3R5cGUiIGJpdCBzZXR0aW5ncyAqLwotI2RlZmluZSBUUkFDRV9JTkNPTUlORyAJCQkweDAwCi0jZGVmaW5lIFRSQUNFX09VVEdPSU5HSU5HIAkJMHgwMQotI2RlZmluZSBUUkFDRV9JTkNPTUlOR19BQk9SVEVEIAkJMHgxMAotI2RlZmluZSBUUkFDRV9JTkNPTUlOR19DUkNfRVJST1IgCTB4MjAKLSNkZWZpbmUgVFJBQ0VfSU5DT01JTkdfT1ZFUlJVTl9FUlJPUiAJMHg0MAotCi0KLQotLyogdGhlIGxpbmUgdHJhY2Ugc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGZyYW1lc190cmFjZWRfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgZnJhbWVzIHRyYWNlZCAqLwotCXVuc2lnbmVkIGxvbmcgdHJjX2ZybXNfbm90X3JlY29yZGVkX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYWNlIGZyYW1lcyBkaXNjYXJkZWQgKi8KLX0gTElORV9UUkFDRV9TVEFUU19TVFJVQ1Q7Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBGVDFfTU9OSVRPUl9TVEFUVVNfQ1RSTCBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgRElTQUJMRV9GVDFfU1RBVFVTX1NUQVRJU1RJQ1MJMHgwMCAgICAvKiBkaXNhYmxlIHRoZSBGVDEgc3RhdHVzIGFuZCBzdGF0aXN0aWNzIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgRU5BQkxFX1JFQURfRlQxX1NUQVRVUwkJMHgwMSAgICAvKiByZWFkIHRoZSBGVDEgb3BlcmF0aW9uYWwgc3RhdHVzICovCi0jZGVmaW5lIEVOQUJMRV9SRUFEX0ZUMV9PUF9TVEFUUwkweDAyICAgIC8qIHJlYWQgdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0jZGVmaW5lIEZMVVNIX0ZUMV9PUF9TVEFUUwkJMHgwNCAJLyogZmx1c2ggdGhlIEZUMSBvcGVyYXRpb25hbCBzdGF0aXN0aWNzICovCi0KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgQ29uc3RhbnRzIGZvciB0aGUgU0VUX0NIRExDX0NPTkZJR1VSQVRJT04gY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZSBQQUNLRUQ7CQkvKiB0aGUgYmF1ZCByYXRlICovCQotCXVuc2lnbmVkIHNob3J0IGxpbmVfY29uZmlnX29wdGlvbnMgUEFDS0VEOwkvKiBsaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IG1vZGVtX2NvbmZpZ19vcHRpb25zIFBBQ0tFRDsJLyogbW9kZW0gY29uZmlncmF0aW9uIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlbV9zdGF0dXNfdGltZXIgUEFDS0VEOwkvKiB0aW1lciBmb3IgbW9uaXRvcmluZyBtb2RlbSBzdGF0dXMgY2hhbmdlcyAqLwotCXVuc2lnbmVkIHNob3J0IENIRExDX0FQSV9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgQVBJIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBDSERMQ19wcm90b2NvbF9vcHRpb25zIFBBQ0tFRDsJLyogQ0hETEMgcHJvdG9jb2wgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRfZGF0YV9idWZmZXJfZm9yX1R4IFBBQ0tFRDsJLyogcGVyY2VudGFnZSBkYXRhIGJ1ZmZlcmluZyB1c2VkIGZvciBUeCAqLwotCXVuc2lnbmVkIHNob3J0IENIRExDX3N0YXRpc3RpY3Nfb3B0aW9ucyBQQUNLRUQ7CS8qIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IG1heF9DSERMQ19kYXRhX2ZpZWxkX2xlbmd0aCBQQUNLRUQ7CS8qIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgQ0hETEMgRGF0YSBmaWVsZCAqLwotCXVuc2lnbmVkIHNob3J0IHRyYW5zbWl0X2tlZXBhbGl2ZV90aW1lciBQQUNLRUQ7CQkvKiB0aGUgdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgcmVjZWl2ZV9rZWVwYWxpdmVfdGltZXIgUEFDS0VEOwkJLyogdGhlIHJlY2VpdmUga2VlcGFsaXZlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQga2VlcGFsaXZlX2Vycm9yX3RvbGVyYW5jZSBQQUNLRUQ7CS8qIHRoZSByZWNlaXZlIGtlZXBhbGl2ZSBlcnJvciB0b2xlcmFuY2UgKi8KLQl1bnNpZ25lZCBzaG9ydCBTTEFSUF9yZXF1ZXN0X3RpbWVyIFBBQ0tFRDsJCS8qIHRoZSBTTEFSUCByZXF1ZXN0IHRpbWVyICovCi0JdW5zaWduZWQgbG9uZyBJUF9hZGRyZXNzIFBBQ0tFRDsJCQkvKiB0aGUgSVAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgSVBfbmV0bWFzayBQQUNLRUQ7CQkJLyogdGhlIElQIG5ldG1hc2sgKi8KLQl1bnNpZ25lZCBsb25nIHB0cl9zaGFyZWRfbWVtX2luZm9fc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi0JdW5zaWduZWQgbG9uZyBwdHJfQ0hETENfVHhfc3RhdF9lbF9jZmdfc3RydWN0IFBBQ0tFRDsJLyogYSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX0NIRExDX1J4X3N0YXRfZWxfY2ZnX3N0cnVjdCBQQUNLRUQ7CS8qIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotfSBDSERMQ19DT05GSUdVUkFUSU9OX1NUUlVDVDsKLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnbGluZV9jb25maWdfb3B0aW9ucycgKi8KLSNkZWZpbmUgSU5URVJGQUNFX0xFVkVMX1YzNQkJCQkJMHgwMDAwIC8qIFYuMzUgaW50ZXJmYWNlIGxldmVsICovCi0jZGVmaW5lIElOVEVSRkFDRV9MRVZFTF9SUzIzMgkJCQkJMHgwMDAxIC8qIFJTLTIzMiBpbnRlcmZhY2UgbGV2ZWwgKi8KLQotLyogc2V0dGluZ3MgZm9yIHRoZSAnbW9kZW1fY29uZmlnX29wdGlvbnMnICovCi0KLSNkZWZpbmUgRE9OVF9SQUlTRV9EVFJfUlRTX09OX0VOX0NPTU1TCQkweDAwMDEKLS8qIGRvbid0IGF1dG9tYXRpY2FsbHkgcmFpc2UgRFRSIGFuZCBSVFMgd2hlbiBwZXJmb3JtaW5nIGFuCi0gICBFTkFCTEVfQ0hETENfQ09NTVVOSUNBVElPTlMgY29tbWFuZCAqLwotCi0jZGVmaW5lIERPTlRfUkVQT1JUX0NIR19JTl9NT0RFTV9TVEFUIAkJMHgwMDAyCi0vKiBkb24ndCByZXBvcnQgY2hhbmdlcyBpbiBtb2RlbSBzdGF0dXMgdG8gdGhlIGFwcGxpY2F0aW9uICovCi0KLQotLyogYml0IHNldHRpbmdzIGZvciB0aGUgJ0NIRExDX3Byb3RvY29sX29wdGlvbnMnIGJ5dGUgKi8KLQotI2RlZmluZSBJR05PUkVfRENEX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMQotLyogaWdub3JlIERDRCBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KLQotI2RlZmluZSBJR05PUkVfQ1RTX0ZPUl9MSU5LX1NUQVQJCTB4MDAwMgotLyogaWdub3JlIENUUyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8KLQotI2RlZmluZSBJR05PUkVfS1BBTFZfRk9SX0xJTktfU1RBVAkJMHgwMDA0Ci0vKiBpZ25vcmUga2VlcGFsaXZlIGZyYW1lcyBpbiBkZXRlcm1pbmluZyB0aGUgQ0hETEMgbGluayBzdGF0dXMgKi8gCi0KLSNkZWZpbmUgU0lOR0xFX1RYX0JVRkZFUgkJCTB4NDAwMCAKLS8qIGNvbmZpZ3VyZSBhIHNpbmdsZSB0cmFuc21pdCBidWZmZXIgKi8KLQotI2RlZmluZSBIRExDX1NUUkVBTUlOR19NT0RFCQkJMHg4MDAwCi0KLS8qICAgc2V0dGluZ3MgZm9yIHRoZSAnQ0hETENfc3RhdGlzdGljc19vcHRpb25zJyAqLwotCi0jZGVmaW5lIENIRExDX1RYX0RBVEFfQllURV9DT1VOVF9TVEFUCQkweDAwMDEKLS8qIHJlY29yZCB0aGUgbnVtYmVyIG9mIERhdGEgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KLQotI2RlZmluZSBDSERMQ19SWF9EQVRBX0JZVEVfQ09VTlRfU1RBVAkJMHgwMDAyCi0vKiByZWNvcmQgdGhlIG51bWJlciBvZiBEYXRhIGJ5dGVzIHJlY2VpdmVkICovCi0KLSNkZWZpbmUgQ0hETENfVFhfVEhST1VHSFBVVF9TVEFUCQkweDAwMDQKLS8qIGNvbXB1dGUgdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgdGhyb3VnaHB1dCAqLwotCi0jZGVmaW5lIENIRExDX1JYX1RIUk9VR0hQVVRfU1RBVAkJMHgwMDA4Ci0vKiBjb21wdXRlIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgdGhyb3VnaHB1dCAqLwotCi0KLS8qIHBlcm1pdHRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgQ0hETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQUklfTUFYX0JBVURfUkFURV9TNTA4CTI2NjY2NjYgLyogUFJJTUFSWSAgIC0gbWF4aW11bSBiYXVkIHJhdGUgKFM1MDgpICovCi0jZGVmaW5lIFNFQ19NQVhfQkFVRF9SQVRFX1M1MDgJMjU4MDY0IAkvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSNkZWZpbmUgUFJJX01BWF9CQVVEX1JBVEVfUzUxNCAgMjc1MDAwMCAvKiBQUklNQVJZICAgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSNkZWZpbmUgU0VDX01BWF9CQVVEX1JBVEVfUzUxNCAgNTE1NjI1ICAvKiBTRUNPTkRBUlkgLSBtYXhpbXVtIGJhdWQgcmF0ZSAoUzUwOCkgKi8KLSAKLSNkZWZpbmUgTUlOX01PREVNX1RJTUVSCTAJCQkvKiBtaW5pbXVtIG1vZGVtIHN0YXR1cyB0aW1lciAqLwotI2RlZmluZSBNQVhfTU9ERU1fVElNRVIJNTAwMAkJCS8qIG1heGltdW0gbW9kZW0gc3RhdHVzIHRpbWVyICovCi0KLSNkZWZpbmUgU0VDX01BWF9OT19EQVRBX0JZVEVTX0lOX0ZSQU1FICAyMDQ4IC8qIFNFQ09OREFSWSAtIG1heCBsZW5ndGggb2YgdGhlIENIRExDIGRhdGEgZmllbGQgKi8KLQotI2RlZmluZSBNSU5fVHhfS1BBTFZfVElNRVIJMAkgIC8qIG1pbmltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0jZGVmaW5lIE1BWF9UeF9LUEFMVl9USU1FUgk2MDAwMAkgIC8qIG1heGltdW0gdHJhbnNtaXQga2VlcGFsaXZlIHRpbWVyICovCi0jZGVmaW5lIERFRkFVTFRfVHhfS1BBTFZfVElNRVIJMTAwMDAJICAvKiBkZWZhdWx0IHRyYW5zbWl0IGtlZXBhbGl2ZSB0aW1lciAqLwotCi0jZGVmaW5lIE1JTl9SeF9LUEFMVl9USU1FUgkxMAkgIC8qIG1pbmltdW0gcmVjZWl2ZSBrZWVwYWxpdmUgdGltZXIgKi8KLSNkZWZpbmUgTUFYX1J4X0tQQUxWX1RJTUVSCTYwMDAwCSAgLyogbWF4aW11bSByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLwotI2RlZmluZSBERUZBVUxUX1J4X0tQQUxWX1RJTUVSCTEwMDAwCSAgLyogZGVmYXVsdCByZWNlaXZlIGtlZXBhbGl2ZSB0aW1lciAqLwotCi0jZGVmaW5lIE1JTl9LUEFMVl9FUlJfVE9MCTEJICAvKiBtaW4ga3BhbHYgZXJyb3IgdG9sZXJhbmNlIGNvdW50ICovCi0jZGVmaW5lIE1BWF9LUEFMVl9FUlJfVE9MCTIwCSAgLyogbWF4IGtwYWx2IGVycm9yIHRvbGVyYW5jZSBjb3VudCAqLwotI2RlZmluZSBERUZBVUxUX0tQQUxWX0VSUl9UT0wJMwkgIC8qIGRlZmF1bHQgdmFsdWUgKi8KLQotI2RlZmluZSBNSU5fU0xBUlBfUkVRX1RJTUVSCTAJICAvKiBtaW4gdHJhbnNtaXQgU0xBUlAgUmVxdWVzdCB0aW1lciAqLwotI2RlZmluZSBNQVhfU0xBUlBfUkVRX1RJTUVSCTYwMDAwCSAgLyogbWF4IHRyYW5zbWl0IFNMQVJQIFJlcXVlc3QgdGltZXIgKi8KLSNkZWZpbmUgREVGQVVMVF9TTEFSUF9SRVFfVElNRVIJMAkgIC8qIGRlZmF1bHQgdmFsdWUgLS0gbm8gU0xBUlAgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdGhlIFJFQURfQ0hETENfTElOS19TVEFUVVMgY29tbWFuZAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgQ0hETEMgc3RhdHVzIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgQ0hETENfbGlua19zdGF0dXMgUEFDS0VEOwkvKiBDSERMQyBsaW5rIHN0YXR1cyAqLwotCXVuc2lnbmVkIGNoYXIgbm9fRGF0YV9mcm1zX2Zvcl9hcHAgUEFDS0VEOwkvKiBudW1iZXIgb2YgRGF0YSBmcmFtZXMgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyIHJlY2VpdmVyX3N0YXR1cyBQQUNLRUQ7CS8qIGVuYWJsZWQvZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBjaGFyIFNMQVJQX3N0YXRlIFBBQ0tFRDsJLyogaW50ZXJuYWwgU0xBUlAgc3RhdGUgKi8KLX0gQ0hETENfTElOS19TVEFUVVNfU1RSVUNUOwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdDSERMQ19saW5rX3N0YXR1cycgdmFyaWFibGUgKi8KLSNkZWZpbmUgQ0hETENfTElOS19JTkFDVElWRQkJMHgwMAkvKiB0aGUgQ0hETEMgbGluayBpcyBpbmFjdGl2ZSAqLwotI2RlZmluZSBDSERMQ19MSU5LX0FDVElWRQkJMHgwMQkvKiB0aGUgQ0hETEMgbGluayBpcyBhY3RpdmUgKi8KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICBDb25zdGFudHMgZm9yIHRoZSBSRUFEX0NIRExDX09QRVJBVElPTkFMX1NUQVRTIGNvbW1hbmQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIENIRExDIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0KLQkvKiBEYXRhIGZyYW1lIHRyYW5zbWlzc2lvbiBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2ZyYW1lc19UeF9jb3VudCBQQUNLRUQ7CS8qICMgb2YgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBEYXRhX2J5dGVzX1R4X2NvdW50IFBBQ0tFRDsgCS8qICMgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIERhdGFfVHhfdGhyb3VnaHB1dCBQQUNLRUQ7CS8qIHRyYW5zbWl0IHRocm91Z2hwdXQgKi8KLQl1bnNpZ25lZCBsb25nIG5vX21zX2Zvcl9EYXRhX1R4X3RocnVwdXRfY29tcCBQQUNLRUQ7CS8qIG1pbGxpc2Vjb25kIHRpbWUgdXNlZCBmb3IgdGhlIFR4IHRocm91Z2hwdXQgY29tcHV0YXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIFR4X0RhdGFfZGlzY2FyZF9sZ3RoX2Vycl9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKGxlbmd0aCBlcnJvcikgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1R4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9EYXRhX2ZybV9UeF9zdGF0MiBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfRGF0YV9mcm1fVHhfc3RhdDMgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQotCS8qIERhdGEgZnJhbWUgcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIERhdGFfZnJhbWVzX1J4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9ieXRlc19SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgRGF0YV9SeF90aHJvdWdocHV0IFBBQ0tFRDsJLyogcmVjZWl2ZSB0aHJvdWdocHV0ICovCi0JdW5zaWduZWQgbG9uZyBub19tc19mb3JfRGF0YV9SeF90aHJ1cHV0X2NvbXAgUEFDS0VEOwkvKiBtaWxsaXNlY29uZCB0aW1lIHVzZWQgZm9yIHRoZSBSeCB0aHJvdWdocHV0IGNvbXB1dGF0aW9uICovCi0JdW5zaWduZWQgbG9uZyBSeF9EYXRhX2Rpc2NhcmRfc2hvcnRfY291bnQgUEFDS0VEOwkvKiByZWNlaXZlZCBEYXRhIGZyYW1lcyBkaXNjYXJkZWQgKHRvbyBzaG9ydCkgKi8KLQl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9sb25nX2NvdW50IFBBQ0tFRDsJLyogcmVjZWl2ZWQgRGF0YSBmcmFtZXMgZGlzY2FyZGVkICh0b28gbG9uZykgKi8KLQl1bnNpZ25lZCBsb25nIFJ4X0RhdGFfZGlzY2FyZF9pbmFjdGl2ZV9jb3VudCBQQUNLRUQ7CS8qIHJlY2VpdmVkIERhdGEgZnJhbWVzIGRpc2NhcmRlZCAobGluayBpbmFjdGl2ZSkgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0RhdGFfZnJtX1J4X3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0KLQkvKiBTTEFSUCBmcmFtZSB0cmFuc21pc3Npb24vcmVjZXB0aW9uIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9UeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUV9SeF9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgU0xBUlAgUmVxdWVzdCBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIENIRExDX1NMQVJQX1JFUExZX1R4X2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIFNMQVJQIFJlcGx5IGZyYW1lcyB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGxvbmcgQ0hETENfU0xBUlBfUkVQTFlfUnhfY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgU0xBUlAgUmVwbHkgZnJhbWVzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9UeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19TTEFSUF9LUEFMVl9SeF9jb3VudCBQQUNLRUQ7CS8qIG51bWJlciBvZiBTTEFSUCBrZWVwYWxpdmUgZnJhbWVzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9TTEFSUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX1NMQVJQX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0RQIGZyYW1lIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGxvbmcgQ0hETENfQ0RQX1R4X2NvdW50IFBBQ0tFRDsJCS8qIG51bWJlciBvZiBDRFAgZnJhbWVzIHRyYW5zbWl0dGVkICovCi0JdW5zaWduZWQgbG9uZyBDSERMQ19DRFBfUnhfY291bnQgUEFDS0VEOwkJLyogbnVtYmVyIG9mIENEUCBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NCBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NSBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX0NEUF9zdGF0NiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQotCS8qIEluY29taW5nIGZyYW1lcyB3aXRoIGEgZm9ybWF0IGVycm9yIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9mcm1faW5jb21wX0NIRExDX2hkcl9jb3VudCBQQUNLRUQ7CS8qIGZyYW1lcyByZWNlaXZlZCBvZiB3aXRoIGluY29tcGxldGUgQ2lzY28gSERMQyBoZWFkZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBSeF9mcm1zX3Rvb19sb25nX2NvdW50IFBBQ0tFRDsJCS8qIGZyYW1lcyByZWNlaXZlZCBvZiBleGNlc3NpdmUgbGVuZ3RoIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19hZGRyX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBhZGRyZXNzIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ19jdHJsX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBDSERMQyBjb250cm9sIGZpZWxkIGNvdW50ICovCi0JdW5zaWduZWQgc2hvcnQgUnhfaW52YWxpZF9DSERMQ190eXBlX2NvdW50IFBBQ0tFRDsJLyogZnJhbWVzIHJlY2VpdmVkIG9mIGFuIGludmFsaWQgQ0hETEMgZnJhbWUgdHlwZSBjb3VudCAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX2ludmFsaWRfY29kZV9jb3VudCBQQUNLRUQ7CS8qIFNMQVJQIGZyYW1lIHJlY2VpdmVkIHdpdGggYW4gaW52YWxpZCBwYWNrZXQgY29kZSAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9JUF9hZGRyIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgSVAgYWRkcmVzcyAqLwotCXVuc2lnbmVkIHNob3J0IFJ4X1NMQVJQX1JlcGx5X2JhZF9uZXRtYXNrIFBBQ0tFRDsJLyogU0xBUlAgUmVwbHkgcmVjZWl2ZWQgLSBiYWQgbmV0bWFzayAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIxIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnIzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZnJtX2Zvcm1hdF9lcnI0IFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0hETEMgdGltZW91dC9yZXRyeSBzdGF0aXN0aWNzICovCi0JdW5zaWduZWQgc2hvcnQgU0xBUlBfUnhfa2VlcGFsaXZlX1RPX2NvdW50IFBBQ0tFRDsJLyogdGltZW91dCBjb3VudCBmb3IgaW5jb21pbmcgU0xBUlAgZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgU0xBUlBfUmVxdWVzdF9UT19jb3VudCBQQUNLRUQ7CQkvKiB0aW1lb3V0IGNvdW50IGZvciBTTEFSUCBSZXF1ZXN0IGZyYW1lcyAqLwotCXVuc2lnbmVkIGxvbmcgVG9fcmV0cnlfcmVzZXJ2ZWRfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyBUb19yZXRyeV9yZXNlcnZlZF9zdGF0MiBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIFRvX3JldHJ5X3Jlc2VydmVkX3N0YXQzIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCi0JLyogQ0hETEMgbGluayBhY3RpdmUvaW5hY3RpdmUgYW5kIGxvb3BiYWNrIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBsaW5rX2FjdGl2ZV9jb3VudCBQQUNLRUQ7CQkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGFjdGl2ZSAqLwotCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfbW9kZW1fY291bnQgUEFDS0VEOwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgbGluayB3ZW50IGluYWN0aXZlIChtb2RlbSBmYWlsdXJlKSAqLwotCXVuc2lnbmVkIHNob3J0IGxpbmtfaW5hY3RpdmVfa2VlcGFsaXZlX2NvdW50IFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGxpbmsgd2VudCBpbmFjdGl2ZSAoa2VlcGFsaXZlIGZhaWx1cmUpICovCi0JdW5zaWduZWQgc2hvcnQgbGlua19sb29wZWRfY291bnQgUEFDS0VEOwkJLyogbGluayBsb29wZWQgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIGxpbmtfc3RhdHVzX3Jlc2VydmVkX3N0YXQxIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgbGlua19zdGF0dXNfcmVzZXJ2ZWRfc3RhdDIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlICovCi0KLQkvKiBtaXNjZWxsYW5lb3VzIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDEgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF9taXNjX3N0YXQyIFBBQ0tFRDsJCS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWlzY19zdGF0MyBQQUNLRUQ7CQkvKiByZXNlcnZlZCBmb3IgbGF0ZXIgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX21pc2Nfc3RhdDQgUEFDS0VEOwkJLyogcmVzZXJ2ZWQgZm9yIGxhdGVyICovCi0KLX0gQ0hETENfT1BFUkFUSU9OQUxfU1RBVFNfU1RSVUNUOwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgdXNpbmcgYXBwbGljYXRpb24gaW50ZXJydXB0cwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBTRVRfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTL1JFQURfQ0hETENfSU5URVJSVVBUX1RSSUdHRVJTIGNvbW1hbmQgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIENIRExDX2ludGVycnVwdF90cmlnZ2VycyBQQUNLRUQ7CS8qIENIRExDIGludGVycnVwdCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyIElSUSBQQUNLRUQ7CQkJLyogSVJRIHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfdGltZXIgUEFDS0VEOwkJLyogaW50ZXJydXB0IHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgbWlzY19pbnRlcnJ1cHRfYml0cyBQQUNLRUQ7CS8qIG1pc2NlbGxhbmVvdXMgYml0cyAqLwotfSBDSERMQ19JTlRfVFJJR0dFUlNfU1RSVUNUOwotCi0vKiAnQ0hETENfaW50ZXJydXB0X3RyaWdnZXJzJyBiaXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgQVBQX0lOVF9PTl9SWF9GUkFNRQkJMHgwMQkvKiBpbnRlcnJ1cHQgb24gRGF0YSBmcmFtZSByZWNlcHRpb24gKi8KLSNkZWZpbmUgQVBQX0lOVF9PTl9UWF9GUkFNRQkJMHgwMgkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBEYXRhIGZyYW1lIG1heSBiZSB0cmFuc21pdHRlZCAqLwotI2RlZmluZSBBUFBfSU5UX09OX0NPTU1BTkRfQ09NUExFVEUJMHgwNAkvKiBpbnRlcnJ1cHQgd2hlbiBhbiBpbnRlcmZhY2UgY29tbWFuZCBpcyBjb21wbGV0ZSAqLwotI2RlZmluZSBBUFBfSU5UX09OX1RJTUVSCQkweDA4CS8qIGludGVycnVwdCBvbiBhIGRlZmluZWQgbWlsbGlzZWNvbmQgdGltZW91dCAqLwotI2RlZmluZSBBUFBfSU5UX09OX0dMT0JBTF9FWENFUF9DT05EIAkweDEwCS8qIGludGVycnVwdCBvbiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uICovCi0jZGVmaW5lIEFQUF9JTlRfT05fQ0hETENfRVhDRVBfQ09ORAkweDIwCS8qIGludGVycnVwdCBvbiBhbiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9uICovCi0jZGVmaW5lIEFQUF9JTlRfT05fVFJBQ0VfREFUQV9BVkFJTAkweDgwCS8qIGludGVycnVwdCB3aGVuIHRyYWNlIGRhdGEgaXMgYXZhaWxhYmxlICovCi0KLS8qIGludGVycnVwdCB0eXBlcyBpbmRpY2F0ZWQgYXQgJ2ludGVycnVwdF90eXBlJyBieXRlIG9mIHRoZSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUICovCi0jZGVmaW5lIE5PX0FQUF9JTlRTX1BFTkQJCTB4MDAJLyogbm8gaW50ZXJydXBzIGFyZSBwZW5kaW5nICovCi0jZGVmaW5lIFJYX0FQUF9JTlRfUEVORAkJCTB4MDEJLyogYSByZWNlaXZlIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIFRYX0FQUF9JTlRfUEVORAkJCTB4MDIJLyogYSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgcGVuZGluZyAqLwotI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0FQUF9JTlRfUEVORAkweDA0CS8qIGEgJ2NvbW1hbmQgY29tcGxldGUnIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIFRJTUVSX0FQUF9JTlRfUEVORAkJMHgwOAkvKiBhIHRpbWVyIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIEdMT0JBTF9FWENFUF9DT05EX0FQUF9JTlRfUEVORCAJMHgxMAkvKiBhIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9uIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jZGVmaW5lIENIRExDX0VYQ0VQX0NPTkRfQVBQX0lOVF9QRU5EIAkweDIwCS8qIGFuIENIRExDIGV4Y2VwdGlvbiBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcgKi8KLSNkZWZpbmUgVFJBQ0VfREFUQV9BVkFJTF9BUFBfSU5UX1BFTkQJMHg4MAkvKiBhIHRyYWNlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0KLQotLyogbW9kZW0gc3RhdHVzIGNoYW5nZXMgKi8KLSNkZWZpbmUgRENEX0hJR0gJCQkweDA4Ci0jZGVmaW5lIENUU19ISUdICQkJMHgyMAotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSB0cmFuc21pc3Npb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgZnJhbWUgdHJhbnNtaXQgc3RhdHVzIGVsZW1lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBudW1iZXJfVHhfc3RhdHVzX2VsZW1lbnRzIFBBQ0tFRDsJLyogbnVtYmVyIG9mIHRyYW5zbWl0IHN0YXR1cyBlbGVtZW50cyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyX1R4X3N0YXR1c19lbGVtZW50cyBQQUNLRUQ7CS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhbnNtaXQgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X1R4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgdHJhbnNtaXQgZWxlbWVudCB0byBiZSB1c2VkICovCi19IENIRExDX1RYX1NUQVRVU19FTF9DRkdfU1RSVUNUOwotCi0vKiB0aGUgRGF0YSBmcmFtZSB0cmFuc21pdCBzdGF0dXMgZWxlbWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIG9wcF9mbGFnIFBBQ0tFRDsJCS8qIG9wcCBmbGFnICovCi0JdW5zaWduZWQgc2hvcnQgZnJhbWVfbGVuZ3RoIFBBQ0tFRDsJLyogbGVuZ3RoIG9mIHRoZSBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkXzIgUEFDS0VEOwkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0JdW5zaWduZWQgbG9uZyByZXNlcnZlZF8zIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotCXVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX0RBVEFfVFhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgIENvbnN0YW50cyBmb3IgRGF0YSBmcmFtZSByZWNlcHRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIERhdGEgZnJhbWUgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0IG51bWJlcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBudW1iZXIgb2YgcmVjZWl2ZSBzdGF0dXMgZWxlbWVudHMgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9zdGF0dXNfZWxlbWVudHMgUEFDS0VEOwkvKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZWxlbWVudCBsaXN0ICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X1J4X3N0YXR1c19lbGVtZW50X3RvX3VzZSBQQUNLRUQ7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgcmVjZWl2ZSBlbGVtZW50IHRvIGJlIHVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRhdGEgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBlbmRfYWRkcl9SeF9idWZmZXIgUEFDS0VEOwkJLyogZW5kIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgKi8KLX0gQ0hETENfUlhfU1RBVFVTX0VMX0NGR19TVFJVQ1Q7Ci0KLS8qIHRoZSBEYXRhIGZyYW1lIHJlY2VpdmUgc3RhdHVzIGVsZW1lbnQgc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyBQQUNLRUQ7CQkvKiBvcHAgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGZyYW1lX2xlbmd0aCBQQUNLRUQ7ICAgLyogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBmcmFtZSAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2ZsYWcgUEFDS0VEOyAvKiBmcmFtZSBlcnJvcnMgKEhETENfU1RSRUFNSU5HX01PREUpKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgdGltZV9zdGFtcCBQQUNLRUQ7IC8qIHJlY2VpdmUgdGltZSBzdGFtcCAoSERMQ19TVFJFQU1JTkdfTU9ERSkgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZF8xIFBBQ0tFRDsgCS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRfMiBQQUNLRUQ7IAkvKiByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyX2RhdGFfYmZyIFBBQ0tFRDsJLyogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhICovCi19IENIRExDX0RBVEFfUlhfU1RBVFVTX0VMX1NUUlVDVDsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICAgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uIGFyZWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogdGhlIGdsb2JhbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAJdW5zaWduZWQgY2hhciBnbG9iYWxfc3RhdHVzIFBBQ0tFRDsJCS8qIGdsb2JhbCBzdGF0dXMgKi8KLSAJdW5zaWduZWQgY2hhciBtb2RlbV9zdGF0dXMgUEFDS0VEOwkJLyogY3VycmVudCBtb2RlbSBzdGF0dXMgKi8KLSAJdW5zaWduZWQgY2hhciBnbG9iYWxfZXhjZXBfY29uZGl0aW9ucyBQQUNLRUQ7CS8qIGdsb2JhbCBleGNlcHRpb24gY29uZGl0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgZ2xvYl9pbmZvX3Jlc2VydmVkWzVdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGNvZGVuYW1lWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIG5hbWUgKi8KLQl1bnNpZ25lZCBjaGFyIGNvZGV2ZXJzaW9uWzRdIFBBQ0tFRDsJCS8qIEZpcm13YXJlIHZlcnNpb24gKi8KLX0gR0xPQkFMX0lORk9STUFUSU9OX1NUUlVDVDsKLQotLyogdGhlIENIRExDIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgQ0hETENfc3RhdHVzIFBBQ0tFRDsJCS8qIENIRExDIHN0YXR1cyAqLwotIAl1bnNpZ25lZCBjaGFyIENIRExDX2V4Y2VwX2NvbmRpdGlvbnMgUEFDS0VEOwkvKiBDSERMQyBleGNlcHRpb24gY29uZGl0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgQ0hETENfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBDSERMQ19JTkZPUk1BVElPTl9TVFJVQ1Q7Ci0KLS8qIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3R5cGUgUEFDS0VEOwkJLyogdHlwZSBvZiBpbnRlcnJ1cHQgdHJpZ2dlcmVkICovCi0gCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0X3Blcm1pc3Npb24gUEFDS0VEOwkvKiBpbnRlcnJ1cHQgcGVybWlzc2lvbiBtYXNrICovCi0JdW5zaWduZWQgY2hhciBpbnRfaW5mb19yZXNlcnZlZFsxNF0gUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBJTlRFUlJVUFRfSU5GT1JNQVRJT05fU1RSVUNUOwotCi0vKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gCXVuc2lnbmVkIGNoYXIgcGFyYWxsZWxfcG9ydF9BX2lucHV0IFBBQ0tFRDsJLyogaW5wdXQgLSBwYXJhbGxlbCBwb3J0IEEgKi8KLSAJdW5zaWduZWQgY2hhciBwYXJhbGxlbF9wb3J0X0JfaW5wdXQgUEFDS0VEOwkvKiBpbnB1dCAtIHBhcmFsbGVsIHBvcnQgQiAqLwotCXVuc2lnbmVkIGNoYXIgRlQxX2luZm9fcmVzZXJ2ZWRbMTRdIFBBQ0tFRDsJLyogcmVzZXJ2ZWQgKi8KLX0gRlQxX0lORk9STUFUSU9OX1NUUlVDVDsKLQotLyogdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlHTE9CQUxfSU5GT1JNQVRJT05fU1RSVUNUIGdsb2JhbF9pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgZ2xvYmFsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCUNIRExDX0lORk9STUFUSU9OX1NUUlVDVCBDSERMQ19pbmZvX3N0cnVjdCBQQUNLRUQ7CQkvKiB0aGUgQ0hETEMgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi0JSU5URVJSVVBUX0lORk9STUFUSU9OX1NUUlVDVCBpbnRlcnJ1cHRfaW5mb19zdHJ1Y3QgUEFDS0VEOwkvKiB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCUZUMV9JTkZPUk1BVElPTl9TVFJVQ1QgRlQxX2luZm9fc3RydWN0IFBBQ0tFRDsJCQkvKiB0aGUgUzUwOC9GVDEgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCi19IFNIQVJFRF9NRU1PUllfSU5GT19TVFJVQ1Q7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgICBVRFAgTWFuYWdlbWVudCBjb25zdGFudHMgYW5kIHN0cnVjdHVyZXMgCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFRoZSBlbWJlZGRlZCBjb250cm9sIGJsb2NrIGZvciBVRFAgbWdtdCAKLSAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBtYWlsYm94IHN0cnVjdHVyZSwgd2l0aG91dCB0aGUgbGFyZ2UgZGF0YSBmaWVsZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIG9wcF9mbGFnIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAvKiB0aGUgb3BwIGZsYWcgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciAgY29tbWFuZCBQQUNLRUQ7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSB1c2VyIGNvbW1hbmQgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVmZmVyX2xlbmd0aCBQQUNLRUQ7ICAgICAgICAgICAgIC8qIHRoZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICByZXR1cm5fY29kZSBQQUNLRUQ7ICAgICAgICAgICAgICAgLyogdGhlIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciAgTUJfcmVzZXJ2ZWRbTlVNQkVSX01CX1JFU0VSVkVEX0JZVEVTXSBQQUNLRUQ7CS8qIHJlc2VydmVkIGZvciBsYXRlciAqLwotfSBjYmxvY2tfdDsKLQotCi0vKiBVRFAgbWFuYWdlbWVudCBwYWNrZXQgbGF5b3V0IChkYXRhIGFyZWEgb2YgaXAgcGFja2V0KSAqLwotLyoKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCQlzaWduYXR1cmVbOF0JUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJCXJlcXVlc3RfcmVwbHkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJCWlkCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgkJcmVzZXJ2ZWRbNl0JUEFDS0VEOwotCWNibG9ja190CQljYmxvY2sJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCQludW1fZnJhbWVzCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCQlpc21vcmVkYXRhCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIAkJZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdIAlQQUNLRUQ7Ci19IHVkcF9tYW5hZ2VtZW50X3BhY2tldF90OwotCi0qLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgkJbnVtX2ZyYW1lcwlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcgkJaXNtb3JlZGF0YQlQQUNLRUQ7Ci19IHRyYWNlX2luZm9fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWlwX3BrdF90IAkJaXBfcGt0CQlQQUNLRUQ7Ci0JdWRwX3BrdF90CQl1ZHBfcGt0CQlQQUNLRUQ7Ci0Jd3BfbWdtdF90CQl3cF9tZ210CQlQQUNLRUQ7Ci0JY2Jsb2NrX3QgICAgICAgICAgICAgICAgY2Jsb2NrICAgICAgICAgIFBBQ0tFRDsKLQl0cmFjZV9pbmZvX3QgICAgICAgCXRyYWNlX2luZm8gICAgICBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgZGF0YVtTSVpFT0ZfTUJfREFUQV9CRlJdICAgICAgUEFDS0VEOwotfSBjaGRsY191ZHBfcGt0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZ0MV9leGVjX2NtZHsKLQl1bnNpZ25lZCBjaGFyICBjb21tYW5kIFBBQ0tFRDsgICAgICAgICAgICAgICAgICAgLyogdGhlIHVzZXIgY29tbWFuZCAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBidWZmZXJfbGVuZ3RoIFBBQ0tFRDsgICAgICAgICAgICAgLyogdGhlIGRhdGEgbGVuZ3RoICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgIHJldHVybl9jb2RlIFBBQ0tFRDsgICAgICAgICAgICAgICAvKiB0aGUgcmV0dXJuIGNvZGUgKi8KLQl1bnNpZ25lZCBjaGFyICBNQl9yZXNlcnZlZFtOVU1CRVJfTUJfUkVTRVJWRURfQllURVNdIFBBQ0tFRDsKLX0gZnQxX2V4ZWNfY21kX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyICBvcHBfZmxhZyAJCQlQQUNLRUQ7Ci0JZnQxX2V4ZWNfY21kX3QgY21kCQkJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICBkYXRhW1NJWkVPRl9NQl9EQVRBX0JGUl0gICAgICAJUEFDS0VEOwotfSBmdDFfZXhlY190OwotCi0jZGVmaW5lIFVEUE1HTVRfU0lHTkFUVVJFCSJDVFBJUEVBQiIKLQotCi0vKiBVRFAvSVAgcGFja2V0IChmb3IgVURQIG1hbmFnZW1lbnQpIGxheW91dCAqLwotLyoKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzJdCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlpcF9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQyWzRdCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWlwX3R0bAkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJaXBfcHJvdG9jb2wJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWlwX2NoZWNrc3VtCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX3NyY19hZGRyZXNzCVBBQ0tFRDsKLQl1bnNpZ25lZCBsb25nCWlwX2RzdF9hZGRyZXNzCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfc3JjX3BvcnQJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdWRwX2NoZWNrc3VtCVBBQ0tFRDsKLQl1ZHBfbWFuYWdlbWVudF9wYWNrZXRfdCB1bV9wYWNrZXQgUEFDS0VEOwotfSBpcF9wYWNrZXRfdDsKLSovCi0KLS8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCi0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIJc3RhdHVzCQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglkYXRhX2F2YWlsCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAlyZWFsX2xlbmd0aAlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdGltZV9zdGFtcAlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhcglkYXRhWzFdCQlQQUNLRUQ7Ci19IHRyYWNlX3BrdF90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgllcnJvcl9mbGFnCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzEzXQlQQUNLRUQ7Ci19IGFwaV9yeF9oZHJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICBhcGlfcnhfaGRyX3QJYXBpX3J4X2hkciAgICAgIFBBQ0tFRDsKLSAgICAgICAgdm9pZCAqICAgCWRhdGEgICAgCVBBQ0tFRDsKLX0gYXBpX3J4X2VsZW1lbnRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgCWF0dHIJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICAJcmVzZXJ2ZWRbMTVdCVBBQ0tFRDsKLX0gYXBpX3R4X2hkcl90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JYXBpX3R4X2hkcl90IAlhcGlfdHhfaGRyCVBBQ0tFRDsKLQl2b2lkICoJCWRhdGEJCVBBQ0tFRDsKLX0gYXBpX3R4X2VsZW1lbnRfdDsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICBDb25zdGFudHMgZm9yIHRoZSBTRVRfRlQxX0NPTkZJR1VSQVRJT04vUkVBRF9GVDFfQ09ORklHVVJBVElPTiBjb21tYW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHRoZSBGVDEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCBmcmFtaW5nX21vZGU7Ci0JdW5zaWduZWQgc2hvcnQgZW5jb2RpbmdfbW9kZTsKLQl1bnNpZ25lZCBzaG9ydCBsaW5lX2J1aWxkX291dDsKLQl1bnNpZ25lZCBzaG9ydCBjaGFubmVsX2Jhc2U7Ci0JdW5zaWduZWQgc2hvcnQgYmF1ZF9yYXRlX2ticHM7CQkJCQkvKiB0aGUgYmF1ZCByYXRlIChpbiBrYnBzKSAqLwkKLQl1bnNpZ25lZCBzaG9ydCBjbG9ja19tb2RlOwotfSBmdDFfY29uZmlnX3Q7Ci0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2ZyYW1pbmdfbW9kZScgKi8KLSNkZWZpbmUgRVNGX0ZSQU1JTkcgCTB4MDAJLyogRVNGIGZyYW1pbmcgKi8KLSNkZWZpbmUgRDRfRlJBTUlORyAgCTB4MDEJLyogRDQgZnJhbWluZyAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdlbmNvZGluZ19tb2RlJyAqLwotI2RlZmluZSBCOFpTX0VOQ09ESU5HIAkweDAwCS8qIEI4WlMgZW5jb2RpbmcgKi8KLSNkZWZpbmUgQU1JX0VOQ09ESU5HCTB4MDEJLyogQU1JIGVuY29kaW5nICovCi0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2xpbmVfYnVpbGRfb3V0JyAqLwotI2RlZmluZSBMTl9CTERfQ1NVXzBkQl9EU1gxXzBfdG9fMTMzCTB4MDAJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKDBkYikgb3IgRFNYLTEgKDAtMTMzZnQpICovCi0jZGVmaW5lIExOX0JMRF9EU1gxXzEzM190b18yNjYJCTB4MDEJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoMTMzLTI2NmZ0KSAqLwotI2RlZmluZSBMTl9CTERfRFNYMV8yNjZfdG9fMzk5CQkweDAyCS8qIHNldCBidWlsZCBvdXQgRFNYLTEgKDI2Ni0zOTlmdCkgKi8KLSNkZWZpbmUgTE5fQkxEX0RTWDFfMzk5X3RvXzUzMwkJMHgwMwkvKiBzZXQgYnVpbGQgb3V0IERTWC0xICgzOTktNTMzZnQpICovCi0jZGVmaW5lIExOX0JMRF9EU1gxXzUzM190b182NTUJCTB4MDQJLyogc2V0IGJ1aWxkIG91dCBEU1gtMSAoNTMzLTY1NWZ0KSAqLwotI2RlZmluZSBMTl9CTERfQ1NVX05FR183ZEIJCTB4MDUJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC03LjVkYikgKi8KLSNkZWZpbmUgTE5fQkxEX0NTVV9ORUdfMTVkQgkJMHgwNgkvKiBzZXQgYnVpbGQgb3V0IHRvIENTVSAoLTE1ZGIpICovCi0jZGVmaW5lIExOX0JMRF9DU1VfTkVHXzIyZEIJCTB4MDcJLyogc2V0IGJ1aWxkIG91dCB0byBDU1UgKC0yMi41ZGIpICovCi0KLS8qIHNldHRpbmdzIGZvciB0aGUgJ2NoYW5uZWxfYmFzZScgKi8KLSNkZWZpbmUgTUlOX0NIQU5ORUxfQkFTRV9WQUxVRQkJMQkJLyogdGhlIG1pbmltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLwotI2RlZmluZSBNQVhfQ0hBTk5FTF9CQVNFX1ZBTFVFCQkyNAkJLyogdGhlIG1heGltdW0gcGVybWl0dGVkIGNoYW5uZWwgYmFzZSB2YWx1ZSAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdiYXVkX3JhdGVfa2JwcycgKi8KLSNkZWZpbmUgTUlOX0JBVURfUkFURV9LQlBTCQkwCQkvKiB0aGUgbWluaW11bSBwZXJtaXR0ZWQgYmF1ZCByYXRlIChrYnBzKSAqLwotI2RlZmluZSBNQVhfQkFVRF9SQVRFX0tCUFMgCQkxNTM2CS8qIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBiYXVkIHJhdGUgKGticHMpICovCi0jZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcJMHhGRkZGIC8qIHRoZSBiYXVkIHJhdGUgdXNlZCB0byB0cmlnZ2VyIGFuIGF1dG9tYXRpYyBGVDEgY29uZmlndXJhdGlvbiAqLwotCi0vKiBzZXR0aW5ncyBmb3IgdGhlICdjbG9ja19tb2RlJyAqLwotI2RlZmluZSBDTE9DS19NT0RFX05PUk1BTAkJMHgwMAkvKiBjbG9jayBtb2RlIHNldCB0byBub3JtYWwgKHNsYXZlKSAqLwotI2RlZmluZSBDTE9DS19NT0RFX01BU1RFUgkJMHgwMQkvKiBjbG9jayBtb2RlIHNldCB0byBtYXN0ZXIgKi8KLQotCi0jZGVmaW5lIEJBVURfUkFURV9GVDFfQVVUT19DT05GSUcgICAJMHhGRkZGCi0jZGVmaW5lIEFVVE9fRlQxX0NPTkZJR19OT1RfQ09NUExFVEUJMHgwOAotI2RlZmluZSBBVVRPX0ZUMV9DRkdfRkFJTF9PUF9NT0RFCTB4MEMKLSNkZWZpbmUgQVVUT19GVDFfQ0ZHX0ZBSUxfSU5WQUxJRF9MSU5FIAkweDBECi0KLSAKLSNpZmRlZgkJX01TQ18KLSMgIHByYWdtYQlwYWNrKCkKLSNlbmRpZgotI2VuZGlmCS8qIF9TRExBX0NIRExDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaCBiL2luY2x1ZGUvbGludXgvc2RsYV9wcHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzOTIzMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFfcHBwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFfcHBwLmgJU2FuZ29tYSBQUFAgZmlybXdhcmUgQVBJIGRlZmluaXRpb25zLgotKgotKiBBdXRob3I6CU5lbmFkIENvcmJpYwk8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0xOTk3IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRmViIDI0LCAyMDAwICBOZW5hZCBDb3JiaWMgICAgdjIuMS4yCi0qIEphbiAwNiwgMTk5NwlHZW5lIEtvemluCXYyLjAKLSogQXByIDExLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBX1BQUF9ICi0jZGVmaW5lCV9TRExBX1BQUF9ICi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTm90ZXM6Ci0gKiAtLS0tLS0KLSAqIDEuIEFsbCBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBieXRlLWFsaW5lZC4gIAotICoKLSAqCUNvbXBpbGVyCVBsYXRmb3JtCi0gKgktLS0tLS0tLQktLS0tLS0tLQotICoJR05VIEMJCUxpbnV4CQkKLSAqLwotCi0jaWZuZGVmCVBBQ0tFRAotIyAgICBkZWZpbmUJUEFDS0VECV9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYJLyogUEFDS0VEICovCi0KLS8qIEFkYXB0ZXIgbWVtb3J5IGxheW91dCBhbmQgaW1wb3J0YW50IGNvbnN0YW50cyAqLwotI2RlZmluZQlQUFA1MDhfTUJfVkVDVAkweEUwMDAJLyogbWFpbGJveCB3aW5kb3cgdmVjdG9yICovCi0jZGVmaW5lCVBQUDUwOF9NQl9PRkZTCTAJCS8qIG1haWxib3ggb2Zmc2V0ICovCi0jZGVmaW5lCVBQUDUwOF9GTEdfT0ZGUwkweDEwMDAJLyogc3RhdHVzIGZsYWdzIG9mZnNldCAqLwotI2RlZmluZQlQUFA1MDhfQlVGX09GRlMJMHgxMTAwCS8qIGJ1ZmZlciBpbmZvIGJsb2NrIG9mZnNldCAqLwotI2RlZmluZSBQUFA1MTRfTUJfT0ZGUyAgMHhFMDAwICAvKiBtYWlsYm94IG9mZnNldCAqLwotI2RlZmluZSBQUFA1MTRfRkxHX09GRlMgMHhGMDAwICAvKiBzdGF0dXMgZmxhZ3Mgb2Zmc2V0ICovCi0jZGVmaW5lIFBQUDUxNF9CVUZfT0ZGUyAweEYxMDAgIC8qIGJ1ZmZlciBpbmZvIGJsb2NrIG9mZnNldCAqLwotCi0jZGVmaW5lIFBQUF9NQVhfREFUQQkxMDA4CS8qIGNvbW1hbmQgYmxvY2sgZGF0YSBidWZmZXIgbGVuZ3RoICovCi0KLS8qKioqKiogRGF0YSBTdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBQUCBDb21tYW5kIEJsb2NrLgotICovCi10eXBlZGVmIHN0cnVjdCBwcHBfY21kewotCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgIHJzcnZbMTFdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLX0gcHBwX2NtZF90OwotCi10eXBlZGVmIHN0cnVjdCBjYmxvY2t7Ci0JdW5zaWduZWQgY2hhciAgb3BwX2ZsYWcJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiBsZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwkvKiByZXR1cm4gY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgIHJzcnZbMTFdCVBBQ0tFRDsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLX0gY2Jsb2NrX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBwcF91ZHBfcGt0ewotCWlwX3BrdF90IAlpcF9wa3QJUEFDS0VEOwotCXVkcF9wa3RfdAl1ZHBfcGt0CVBBQ0tFRDsKLQl3cF9tZ210X3QJd3BfbWdtdCBQQUNLRUQ7Ci0JY2Jsb2NrX3QJY2Jsb2NrICBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgIGRhdGFbTUFYX0xHVEhfVURQX01HTlRfUEtUXSBQQUNLRUQ7Ci19IHBwcF91ZHBfcGt0X3Q7CQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcglzdGF0dXMJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWRhdGFfYXZhaWwJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXJlYWxfbGVuZ3RoCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl0aW1lX3N0YW1wCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCWRhdGFbMV0JCVBBQ0tFRDsKLX0gdHJhY2VfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgCW9wcF9mbGFnCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXRyYWNlX3R5cGUJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IAl0cmFjZV9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IAl0cmFjZV9kYXRhX3B0cglQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgIHRyYWNlX3RpbWVfc3RhbXAgUEFDS0VEOwotfSB0cmFjZV9lbGVtZW50X3Q7Ci0KLS8qICdjb21tYW5kJyBmaWVsZCBkZWZpbmVzICovCi0jZGVmaW5lIFBQUF9SRUFEX0NPREVfVkVSU0lPTgkweDEwCS8qIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBQX1NFVF9DT05GSUcJCTB4MDUKLSNkZWZpbmUgUFBQX1JFQURfQ09ORklHCQkweDA2Ci0jZGVmaW5lCVBQUF9TRVRfSU5UUl9GTEFHUwkweDIwCi0jZGVmaW5lCVBQUF9SRUFEX0lOVFJfRkxBR1MJMHgyMQotI2RlZmluZQlQUFBfU0VUX0lOQk9VTkRfQVVUSAkweDMwCi0jZGVmaW5lCVBQUF9TRVRfT1VUQk9VTkRfQVVUSAkweDMxCi0jZGVmaW5lCVBQUF9HRVRfQ09OTkVDVElPTl9JTkZPCTB4MzIKLQotI2RlZmluZSBQUFBfQ09NTV9FTkFCTEUJCTB4MDMJLyogb3BlcmF0aW9uYWwgY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBQX0NPTU1fRElTQUJMRQkweDA0Ci0jZGVmaW5lCVBQUF9TRU5EX1NJR05fRlJBTUUJMHgyMwotI2RlZmluZQlQUFBfUkVBRF9TSUdOX1JFU1BPTlNFCTB4MjQKLSNkZWZpbmUJUFBQX0RBVEFMSU5FX01PTklUT1IJMHgzMwotCi0jZGVmaW5lIFBQUF9SRUFEX1NUQVRJU1RJQ1MJMHgwNwkvKiBzdGF0aXN0aWNzIGNvbW1hbmRzICovCi0jZGVmaW5lIFBQUF9GTFVTSF9TVEFUSVNUSUNTCTB4MDgKLSNkZWZpbmUgUFBQX1JFQURfRVJST1JfU1RBVFMJMHgwOQotI2RlZmluZSBQUFBfRkxVU0hfRVJST1JfU1RBVFMJMHgwQQotI2RlZmluZSBQUFBfUkVBRF9QQUNLRVRfU1RBVFMJMHgxMgotI2RlZmluZSBQUFBfRkxVU0hfUEFDS0VUX1NUQVRTCTB4MTMKLSNkZWZpbmUgUFBQX1JFQURfTENQX1NUQVRTCTB4MTQKLSNkZWZpbmUgUFBQX0ZMVVNIX0xDUF9TVEFUUwkweDE1Ci0jZGVmaW5lIFBQUF9SRUFEX0xQQktfU1RBVFMJMHgxNgotI2RlZmluZSBQUFBfRkxVU0hfTFBCS19TVEFUUwkweDE3Ci0jZGVmaW5lIFBQUF9SRUFEX0lQQ1BfU1RBVFMJMHgxOAotI2RlZmluZSBQUFBfRkxVU0hfSVBDUF9TVEFUUwkweDE5Ci0jZGVmaW5lIFBQUF9SRUFEX0lQWENQX1NUQVRTCTB4MUEKLSNkZWZpbmUgUFBQX0ZMVVNIX0lQWENQX1NUQVRTCTB4MUIKLSNkZWZpbmUgUFBQX1JFQURfUEFQX1NUQVRTCTB4MUMKLSNkZWZpbmUgUFBQX0ZMVVNIX1BBUF9TVEFUUwkweDFECi0jZGVmaW5lIFBQUF9SRUFEX0NIQVBfU1RBVFMJMHgxRQotI2RlZmluZSBQUFBfRkxVU0hfQ0hBUF9TVEFUUwkweDFGCi0KLS8qICdyZXN1bHQnIGZpZWxkIGRlZmluZXMgKi8KLSNkZWZpbmUgUFBQUkVTX09LCQkweDAwCS8qIGNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5ICovCi0jZGVmaW5lCVBQUFJFU19JTlZBTElEX1NUQVRFCTB4MDkJLyogaW52YWxpZCBjb21tYW5kIGluIHRoaXMgY29udGV4dCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBQUCBNYWlsYm94LgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgUFBQPz8/X01CX09GRlMgaW50byBQUFA/Pz9fTUJfVkVDVAotICovCi10eXBlZGVmIHN0cnVjdCBwcHBfbWJveAotewotCXVuc2lnbmVkIGNoYXIgZmxhZwlQQUNLRUQ7CS8qIDAwaDogY29tbWFuZCBleGVjdXRpb24gZmxhZyAqLwotCXBwcF9jbWRfdCAgICAgY21kCVBBQ0tFRDsgLyogMDFoOiBjb21tYW5kIGJsb2NrICovCi0JdW5zaWduZWQgY2hhciBkYXRhWzFdCVBBQ0tFRDsJLyogMTBoOiB2YXJpYWJsZSBsZW5ndGggZGF0YSBidWZmZXIgKi8KLX0gcHBwX21ib3hfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQUFAgU3RhdHVzIEZsYWdzLgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgUFBQPz8/X0ZMR19PRkZTIGludG8KLSAqCVBQUD8/P19NQl9WRUNULgotICovCi10eXBlZGVmIHN0cnVjdAlwcHBfZmxhZ3MKLXsKLQl1bnNpZ25lZCBjaGFyIGlmbGFnCQlQQUNLRUQ7CS8qIDAwOiBpbnRlcnJ1cHQgZmxhZyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hc2sJCVBBQ0tFRDsJLyogMDE6IGludGVycnVwdCBtYXNrICovCi0JdW5zaWduZWQgY2hhciByZXNydgkJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgbXN0YXR1cwkJUEFDS0VEOwkvKiAwMzogbW9kZW0gc3RhdHVzICovCi0JdW5zaWduZWQgY2hhciBsY3Bfc3RhdGUJCVBBQ0tFRDsgLyogMDQ6IExDUCBzdGF0ZSAqLwotCXVuc2lnbmVkIGNoYXIgcHBwX3BoYXNlCQlQQUNLRUQ7CS8qIDA1OiBQUFAgcGhhc2UgKi8KLQl1bnNpZ25lZCBjaGFyIGlwX3N0YXRlCQlQQUNLRUQ7IC8qIDA2OiBJUENQIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBpcHhfc3RhdGUJCVBBQ0tFRDsgLyogMDc6IElQWENQIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBwYXBfc3RhdGUJCVBBQ0tFRDsgLyogMDg6IFBBUCBzdGF0ZSAqLwotCXVuc2lnbmVkIGNoYXIgY2hhcF9zdGF0ZQlQQUNLRUQ7IC8qIDA5OiBDSEFQIHN0YXRlICovCi0JdW5zaWduZWQgc2hvcnQgZGlzY19jYXVzZQlQQUNLRUQ7CS8qIDBBOiBkaXNjb25uZWN0aW9uIGNhdXNlICovCi19IHBwcF9mbGFnc190OwotCi0vKiAnaWZsYWcnIGRlZmluZXMgKi8KLSNkZWZpbmUJUFBQX0lOVFJfUlhSRFkJCTB4MDEJLyogUnggcmVhZHkgKi8KLSNkZWZpbmUJUFBQX0lOVFJfVFhSRFkJCTB4MDIJLyogVHggcmVhZHkgKi8KLSNkZWZpbmUJUFBQX0lOVFJfTU9ERU0JCTB4MDQJLyogbW9kZW0gc3RhdHVzIGNoYW5nZSAoRENELCBDVFMpICovCi0jZGVmaW5lCVBQUF9JTlRSX0NNRAkJMHgwOAkvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZWQgKi8KLSNkZWZpbmUJUFBQX0lOVFJfRElTQwkJMHgxMAkvKiBkYXRhIGxpbmsgZGlzY29ubmVjdGVkICovCi0jZGVmaW5lCVBQUF9JTlRSX09QRU4JCTB4MjAJLyogZGF0YSBsaW5rIG9wZW4gKi8KLSNkZWZpbmUJUFBQX0lOVFJfRFJPUF9EVFIJMHg0MAkvKiBEVFIgZHJvcCB0aW1lb3V0IGV4cGlyZWQgKi8KLSNkZWZpbmUgUFBQX0lOVFJfVElNRVIgICAgICAgICAgMHg4MCAgICAvKiB0aW1lciBpbnRlcnJ1cHQgKi8KLQotCi0vKiAnbXN0YXR1cycgZGVmaW5lcyAqLwotI2RlZmluZQlQUFBfTURNX0RDRAkJMHgwOAkvKiBtZG1fc3RhdHVzOiBEQ0QgKi8KLSNkZWZpbmUJUFBQX01ETV9DVFMJCTB4MjAJLyogbWRtX3N0YXR1czogQ1RTICovCi0KLS8qICdkaXNjX2NhdXNlJyBkZWZpbmVzICovCi0jZGVmaW5lIFBQUF9MT0NBTF9URVJNSU5BVElPTiAgIDB4MDAwMQkvKiBMb2NhbCBSZXF1ZXN0IGJ5IFBQUCB0ZXJtaW5hdGlvbiBwaGFzZSAqLwotI2RlZmluZSBQUFBfRENEX0NUU19EUk9QICAgICAgICAweDAwMDIgIC8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQuIExpbmsgZG93biAqLwotI2RlZmluZSBQUFBfUkVNT1RFX1RFUk1JTkFUSU9OCTB4MDgwMAkvKiBSZW1vdGUgUmVxdWVzdCBieSBQUFAgdGVybWluYXRpb24gcGhhc2UgKi8KLQotLyogJ21pc2NfY29uZmlnX2JpdHMnIGRlZmluZXMgKi8KLSNkZWZpbmUgRE9OVF9SRV9UWF9BQk9SVEVEX0lfRlJBTUVTIAkweDAxCi0jZGVmaW5lIFRYX0ZSTV9CWVRFX0NPVU5UX1NUQVRTICAgICAgICAgMHgwMgotI2RlZmluZSBSWF9GUk1fQllURV9DT1VOVF9TVEFUUyAgICAgICAgIDB4MDQKLSNkZWZpbmUgVElNRV9TVEFNUF9JTl9SWF9GUkFNRVMgICAgICAgICAweDA4Ci0jZGVmaW5lIE5PTl9TVERfQURQVFJfRlJFUSAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBJTlRFUkZBQ0VfTEVWRUxfUlMyMzIgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQVVUT19MSU5LX1JFQ09WRVJZICAgICAgICAgICAgICAweDEwMAotI2RlZmluZSBET05UX1RFUk1JTkFURV9MTktfTUFYX0NPTkZJRyAgIDB4MjAwICAgICAgICAgICAgICAgICAgICAKLQotLyogJ2F1dGhlbnRpY2F0aW9uIG9wdGlvbnMnIGRlZmluZXMgKi8KLSNkZWZpbmUgTk9fQVVUSEVOVElDQVRJT04JMHgwMAotI2RlZmluZSBJTkJPVU5EX0FVVEgJCTB4ODAKLSNkZWZpbmUgUEFQX0FVVEgJCTB4MDEKLSNkZWZpbmUgQ0hBUF9BVVRICQkweDAyCQkKLQotLyogJ2lwIG9wdGlvbnMnIGRlZmluZXMgKi8KLSNkZWZpbmUgTF9BTkRfUl9JUF9OT19BU1NJRwkweDAwCi0jZGVmaW5lIExfSVBfTE9DQUxfQVNTSUcgICAgCTB4MDEKLSNkZWZpbmUgTF9JUF9SRU1PVEVfQVNTSUcgICAJMHgwMgotI2RlZmluZSBSX0lQX0xPQ0FMX0FTU0lHICAgICAgICAweDA0Ci0jZGVmaW5lIFJfSVBfUkVNT1RFX0FTU0lHICAgICAgIDB4MDgKLSNkZWZpbmUgRU5BQkxFX0lQCQkweDgwCi0KLS8qICdpcHggb3B0aW9ucycgZGVmaW5lcyAqLwotI2RlZmluZSBST1VUSU5HX1BST1RfREVGQVVMVCAgICAweDIwCi0jZGVmaW5lIEVOQUJMRV9JUFgJCTB4ODAKLSNkZWZpbmUgRElTQUJMRV9JUFgJCTB4MDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQUFAgQnVmZmVyIEluZm8uCi0gKglUaGlzIHN0cnVjdHVyZSBpcyBsb2NhdGVkIGF0IG9mZnNldCBQUFA1MDhfQlVGX09GRlMgaW50bwotICoJUFBQNTA4X01CX1ZFQ1QuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcDUwOF9idWZfaW5mbwotewotCXVuc2lnbmVkIHNob3J0IHR4Yl9udW0JUEFDS0VEOwkvKiAwMDogbnVtYmVyIG9mIHRyYW5zbWl0IGJ1ZmZlcnMgKi8KLQl1bnNpZ25lZCBsb25nICB0eGJfcHRyCVBBQ0tFRDsJLyogMDI6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjdGwuICovCi0JdW5zaWduZWQgbG9uZyAgdHhiX254dCAgUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgIHJzcnYxWzIyXSBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgcnhiX251bQlQQUNLRUQ7CS8qIDIwOiBudW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJzICovCi0JdW5zaWduZWQgbG9uZyAgcnhiX3B0cglQQUNLRUQ7CS8qIDIyOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgY3RsLiAqLwotCXVuc2lnbmVkIGxvbmcgIHJ4YjFfcHRyCVBBQ0tFRDsJLyogMjY6IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ1Zi5jdGwuICovCi0JdW5zaWduZWQgbG9uZyAgcnhiX2Jhc2UJUEFDS0VEOwkvKiAyQTogcG9pbnRlciB0byB0aGUgYnVmZmVyIGJhc2UgKi8KLQl1bnNpZ25lZCBjaGFyICByc3J2MlsyXQlQQUNLRUQ7Ci0JdW5zaWduZWQgbG9uZyAgcnhiX2VuZAlQQUNLRUQ7CS8qIDMwOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgZW5kICovCi19IHBwcDUwOF9idWZfaW5mb190OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIENvbnRyb2wgQmxvY2suCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9idWZfY3RsCi17Ci0JdW5zaWduZWQgY2hhciAgZmxhZwkJUEFDS0VEOwkvKiAwMDogJ2J1ZmZlciByZWFkeScgZmxhZyAqLwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aAkJUEFDS0VEOwkvKiAwMTogbGVuZ3RoIG9mIGRhdGEgKi8KLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDFbMV0JUEFDS0VEOwkvKiAwMzogKi8KLQl1bnNpZ25lZCBjaGFyICBwcm90bwkJUEFDS0VEOwkvKiAwNDogcHJvdG9jb2wgKi8KLQl1bnNpZ25lZCBzaG9ydCB0aW1lc3RhbXAJUEFDS0VEOwkvKiAwNTogdGltZSBzdGFtcCAoUnggb25seSkgKi8KLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDJbNV0JUEFDS0VEOwkvKiAwNzogKi8KLQl1bmlvbgotCXsKLQkJdW5zaWduZWQgc2hvcnQgb19wWzJdOwkvKiAxQzogYnVmZmVyIG9mZnNldCAmIHBhZ2UgKFM1MDIpICovCi0JCXVuc2lnbmVkIGxvbmcgIHB0cjsJLyogMUM6IGJ1ZmZlciBwb2ludGVyIChTNTA4KSAqLwotCX0gYnVmCQkJCVBBQ0tFRDsKLX0gcHBwX2J1Zl9jdGxfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTNTA4IEFkYXB0ZXIgQ29uZmlndXJhdGlvbiBCbG9jayAocGFzc2VkIHRvIHRoZSBQUFBfU0VUX0NPTkZJRyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwNTA4X2NvbmYKLXsKLQl1bnNpZ25lZCBsb25nICBsaW5lX3NwZWVkCVBBQ0tFRDsJLyogMDA6IGJhdWQgcmF0ZSwgYnBzICovCi0JdW5zaWduZWQgc2hvcnQgdHhidWZfcGVyY2VudAlQQUNLRUQ7CS8qIDA0OiAlIG9mIFR4IGJ1ZmZlciAqLwotCXVuc2lnbmVkIHNob3J0IGNvbmZfZmxhZ3MJUEFDS0VEOwkvKiAwNjogY29uZmlndXJhdGlvbiBiaXRzICovCi0JdW5zaWduZWQgc2hvcnQgbXR1X2xvY2FsCVBBQ0tFRDsJLyogMDg6IGxvY2FsIE1UVSAqLwotCXVuc2lnbmVkIHNob3J0IG10dV9yZW1vdGUJUEFDS0VEOwkvKiAwQTogcmVtb3RlIE1UVSAqLwotCXVuc2lnbmVkIHNob3J0IHJlc3RhcnRfdG1yCVBBQ0tFRDsJLyogMEM6IHJlc3RhcnQgdGltZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBhdXRoX3JzcnRfdG1yCVBBQ0tFRDsJLyogMEU6IGF1dGhlbnRpY2F0aW9uIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgYXV0aF93YWl0X3RtcglQQUNLRUQ7CS8qIDEwOiBhdXRoZW50aWNhdGlvbiB0aW1lciAqLwotCXVuc2lnbmVkIHNob3J0IG1kbV9mYWlsX3RtcglQQUNLRUQ7CS8qIDEyOiBtb2RlbSBmYWlsdXJlIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgZHRyX2Ryb3BfdG1yCVBBQ0tFRDsJLyogMTQ6IERUUiBkcm9wIHRpbWVyICovCi0JdW5zaWduZWQgc2hvcnQgY29ubmVjdF90bW91dAlQQUNLRUQ7CS8qIDE2OiBjb25uZWN0aW9uIHRpbWVvdXQgKi8KLQl1bnNpZ25lZCBzaG9ydCBjb25mX3JldHJ5CVBBQ0tFRDsJLyogMTg6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCB0ZXJtX3JldHJ5CVBBQ0tFRDsJLyogMUE6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCBmYWlsX3JldHJ5CVBBQ0tFRDsJLyogMUM6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBzaG9ydCBhdXRoX3JldHJ5CVBBQ0tFRDsJLyogMUU6IG1heC4gcmV0cnkgKi8KLQl1bnNpZ25lZCBjaGFyICBhdXRoX29wdGlvbnMJUEFDS0VEOwkvKiAyMDogYXV0aGVudGljYXRpb24gb3B0LiAqLwotCXVuc2lnbmVkIGNoYXIgIGlwX29wdGlvbnMJUEFDS0VEOwkvKiAyMTogSVAgb3B0aW9ucyAqLwotCXVuc2lnbmVkIGxvbmcgIGlwX2xvY2FsCQlQQUNLRUQ7CS8qIDIyOiBsb2NhbCBJUCBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgaXBfcmVtb3RlCVBBQ0tFRDsJLyogMjY6IHJlbW90ZSBJUCBhZGRyZXNzICovCi0JdW5zaWduZWQgY2hhciAgaXB4X29wdGlvbnMJUEFDS0VEOwkvKiAyQTogSVBYIG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfbmV0bm9bNF0JUEFDS0VEOwkvKiAyQjogSVBYIG5ldCBudW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfbG9jYWxbNl0JUEFDS0VEOwkvKiAyRjogbG9jYWwgSVBYIG5vZGUgbnVtYmVyKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMzU6IHJlbW90ZSBJUFggbm9kZSBudW0uKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcm91dGVyWzQ4XQlQQUNLRUQ7CS8qIDNCOiBJUFggcm91dGVyIG5hbWUqLwotCXVuc2lnbmVkIGxvbmcgIGFsdF9jcHVfY2xvY2sJUEFDS0VEOwkvKiA2QjogICovCi19IHBwcDUwOF9jb25mX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUzUwOCBBZGFwdGVyIFJlYWQgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbiBCbG9jayAKLSAqICAgIFJldHVybmVkIGJ5IHRoZSBQUFBfR0VUX0NPTk5FQ1RJT05fSU5GTyBjb21tYW5kCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcDUwOF9jb25uZWN0X2luZm8KLXsKLQl1bnNpZ25lZCBzaG9ydCAJbXJ1CQlQQUNLRUQ7CS8qIDAwLTAxIFJlbW90ZSBNYXggUmVjJyBVbml0ICovCi0JdW5zaWduZWQgY2hhciAgCWlwX29wdGlvbnMgCVBBQ0tFRDsgLyogMDI6IE5lZ290aWF0ZWQgaXAgb3B0aW9ucyAgKi8KLQl1bnNpZ25lZCBsb25nICAJaXBfbG9jYWwJUEFDS0VEOwkvKiAwMy0wNjogbG9jYWwgSVAgYWRkcmVzcyAgICAqLwotCXVuc2lnbmVkIGxvbmcgIAlpcF9yZW1vdGUJUEFDS0VEOwkvKiAwNy0wQTogcmVtb3RlIElQIGFkZHJlc3MgICAqLwotCXVuc2lnbmVkIGNoYXIJaXB4X29wdGlvbnMJUEFDS0VEOyAvKiAwQjogTmVnb3RpYXRlZCBpcHggb3B0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfbmV0bm9bNF0JUEFDS0VEOwkvKiAwQy0wRjogSVBYIG5ldCBudW1iZXIgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfbG9jYWxbNl0JUEFDS0VEOwkvKiAxMC0xRjogbG9jYWwgSVBYIG5vZGUgIyAgICAqLwotCXVuc2lnbmVkIGNoYXIgIAlpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMTYtMUI6IHJlbW90ZSBJUFggbm9kZSAjICAgKi8KLQl1bnNpZ25lZCBjaGFyICAJaXB4X3JvdXRlcls0OF0JUEFDS0VEOwkvKiAxQy00QjogSVBYIHJvdXRlciBuYW1lICAgICAqLwotCXVuc2lnbmVkIGNoYXIJYXV0aF9zdGF0dXMJUEFDS0VEOyAvKiA0QzogQXV0aGVudGljYXRpb24gU3RhdHVzICAqLwotCXVuc2lnbmVkIGNoYXIgCWluYmRfYXV0aF9wZWVySURbMV0gUEFDS0VEOyAvKiA0RDogdmFyaWFibGUgbGVuZ3RoIGluYm91bmQgYXV0aGVudGljYXRlZCBwZWVyIElEICovCi19IHBwcDUwOF9jb25uZWN0X2luZm9fdDsKLQotLyogJ2xpbmVfc3BlZWQnIGZpZWxkICovCi0jZGVmaW5lCVBQUF9CSVRSQVRFXzEyMDAJMHgwMQotI2RlZmluZQlQUFBfQklUUkFURV8yNDAwCTB4MDIKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNDgwMAkweDAzCi0jZGVmaW5lCVBQUF9CSVRSQVRFXzk2MDAJMHgwNAotI2RlZmluZQlQUFBfQklUUkFURV8xOTIwMAkweDA1Ci0jZGVmaW5lCVBQUF9CSVRSQVRFXzM4NDAwCTB4MDYKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNDUwMDAJMHgwNwotI2RlZmluZQlQUFBfQklUUkFURV81NjAwMAkweDA4Ci0jZGVmaW5lCVBQUF9CSVRSQVRFXzY0MDAwCTB4MDkKLSNkZWZpbmUJUFBQX0JJVFJBVEVfNzQwMDAJMHgwQQotI2RlZmluZQlQUFBfQklUUkFURV8xMTIwMDAJMHgwQgotI2RlZmluZQlQUFBfQklUUkFURV8xMjgwMDAJMHgwQwotI2RlZmluZQlQUFBfQklUUkFURV8xNTYwMDAJMHgwRAotCi0vKiBEZWZpbmVzIGZvciB0aGUgJ2NvbmZfZmxhZ3MnIGZpZWxkICovCi0jZGVmaW5lCVBQUF9JR05PUkVfVFhfQUJPUlQJMHgwMQkvKiBkb24ndCByZS10cmFuc21pdCBhYm9ydGVkIGZyYW1lcyAqLwotI2RlZmluZQlQUFBfRU5BQkxFX1RYX1NUQVRTCTB4MDIJLyogZW5hYmxlIFR4IHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJUFBQX0VOQUJMRV9SWF9TVEFUUwkweDA0CS8qIGVuYWJsZSBSeCBzdGF0aXN0aWNzICovCi0jZGVmaW5lCVBQUF9FTkFCTEVfVElNRVNUQU1QCTB4MDgJLyogZW5hYmxlIHRpbWVzdGFtcCAqLwotCi0vKiAnaXBfb3B0aW9ucycgZGVmaW5lcyAqLwotI2RlZmluZQlQUFBfTE9DQUxfSVBfTE9DQUwJMHgwMQotI2RlZmluZQlQUFBfTE9DQUxfSVBfUkVNT1RFCTB4MDIKLSNkZWZpbmUJUFBQX1JFTU9URV9JUF9MT0NBTAkweDA0Ci0jZGVmaW5lCVBQUF9SRU1PVEVfSVBfUkVNT1RFCTB4MDgKLQotLyogJ2lweF9vcHRpb25zJyBkZWZpbmVzICovCi0jZGVmaW5lCVBQUF9SRU1PVEVfSVBYX05FVE5PCTB4MDEKLSNkZWZpbmUJUFBQX1JFTU9URV9JUFhfTE9DQUwJMHgwMgotI2RlZmluZQlQUFBfUkVNT1RFX0lQWF9SRU1PVEUJMHgwNAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX1JJUF9TQVAJMHgwOAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX05MU1AJMHgxMAotI2RlZmluZQlQUFBfSVBYX1JPVVRFX0RFRkFVTFQJMHgyMAotI2RlZmluZQlQUFBfSVBYX0NPTkZfQ09NUExFVEUJMHg0MAotI2RlZmluZQlQUFBfSVBYX0VOQUJMRQkJMHg4MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFM1MDggQWRhcHRlciBDb25maWd1cmF0aW9uIEJsb2NrIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfQ09ORklHIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdAlwcHA1MDhfZ2V0X2NvbmYKLXsKLQl1bnNpZ25lZCBsb25nICBicHMJUEFDS0VEOwkvKiAwMDogYmF1ZCByYXRlLCBicHMgKi8KLQlwcHA1MDhfY29uZl90ICBjb25mCVBBQ0tFRDsJLyogMDQ6IHJlcXVlc3RlZCBjb25maWcuICovCi0JdW5zaWduZWQgc2hvcnQgdHhiX251bQlQQUNLRUQ7CS8qIDZGOiBudW1iZXIgb2YgVHggYnVmZmVycyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Yl9udW0JUEFDS0VEOwkvKiA3MTogbnVtYmVyIG9mIFJ4IGJ1ZmZlcnMgKi8KLX0gcHBwNTA4X2dldF9jb25mX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUzUwOCBPcGVyYXRpb25hbCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfU1RBVElTVElDIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdCBwcHA1MDhfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDEJUEFDS0VEOwkvKiAwMDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfbGVuCVBBQ0tFRDsJLyogMDI6ICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyCVBBQ0tFRDsJLyogMDQ6ICovCi0JdW5zaWduZWQgbG9uZyAgdHhfZnJhbWVzCVBBQ0tFRDsJLyogMDY6ICovCi0JdW5zaWduZWQgbG9uZyAgdHhfYnl0ZXMJUEFDS0VEOwkvKiAwQTogKi8KLQl1bnNpZ25lZCBsb25nICByeF9mcmFtZXMJUEFDS0VEOwkvKiAwRTogKi8KLQl1bnNpZ25lZCBsb25nICByeF9ieXRlcwlQQUNLRUQ7CS8qIDEyOiAqLwotfSBwcHA1MDhfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBBZGFwdGVyIEVycm9yIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9FUlJPUl9TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2Vycl9zdGF0cwotewotCXVuc2lnbmVkIGNoYXIJIHJ4X292ZXJydW4JUEFDS0VEOwkvKiAwMDogUnggb3ZlcnJ1biBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyCSByeF9iYWRfY3JjCVBBQ0tFRDsJLyogMDE6IFJ4IENSQyBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyCSByeF9hYm9ydAlQQUNLRUQ7CS8qIDAyOiBSeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIJIHJ4X2xvc3QJUEFDS0VEOwkvKiAwMzogUnggZnJhbWVzIGxvc3QgKi8KLQl1bnNpZ25lZCBjaGFyCSB0eF9hYm9ydAlQQUNLRUQ7CS8qIDA0OiBUeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIJIHR4X3VuZGVycnVuCVBBQ0tFRDsJLyogMDU6IFR4IHVuZGVycnVuIGVycm9ycyAqLwotCXVuc2lnbmVkIGNoYXIJIHR4X21pc3NlZF9pbnRyCVBBQ0tFRDsJLyogMDY6IFR4IHVuZGVycnVucyBtaXNzZWQgKi8KLQl1bnNpZ25lZCBjaGFyCSByZXNlcnZlZAlQQUNLRUQ7CS8qIDA3OiBUeCB1bmRlcnJ1bnMgbWlzc2VkICovCi0JdW5zaWduZWQgY2hhcgkgZGNkX3RyYW5zCVBBQ0tFRDsJLyogMDg6IERDRCB0cmFuc2l0aW9ucyAqLwotCXVuc2lnbmVkIGNoYXIJIGN0c190cmFucwlQQUNLRUQ7CS8qIDA5OiBDVFMgdHJhbnNpdGlvbnMgKi8KLX0gcHBwX2Vycl9zdGF0c190OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBhY2tldCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfUEFDS0VUX1NUQVRTIGNvbW1hbmQpLgotICovCi10eXBlZGVmIHN0cnVjdAlwcHBfcGt0X3N0YXRzCi17Ci0JdW5zaWduZWQgc2hvcnQgcnhfYmFkX2hlYWRlcglQQUNLRUQ7CS8qIDAwOiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Byb3RfdW5rbnduCVBBQ0tFRDsJLyogMDI6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfdG9vX2xhcmdlCVBBQ0tFRDsJLyogMDQ6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfbGNwCQlQQUNLRUQ7CS8qIDA2OiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2xjcAkJUEFDS0VEOwkvKiAwODogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcGNwCQlQQUNLRUQ7CS8qIDBBOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2lwY3AJCVBBQ0tFRDsJLyogMEM6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfaXB4Y3AJCVBBQ0tFRDsJLyogMEU6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfaXB4Y3AJCVBBQ0tFRDsJLyogMTA6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcGFwCQlQQUNLRUQ7CS8qIDEyOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X3BhcAkJUEFDS0VEOwkvKiAxNDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jaGFwCQlQQUNLRUQ7CS8qIDE2OiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NoYXAJCVBBQ0tFRDsJLyogMTg6ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfbHFyCQlQQUNLRUQ7CS8qIDFBOiAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2xxcgkJUEFDS0VEOwkvKiAxQzogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcAkJUEFDS0VEOwkvKiAxRTogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9pcAkJUEFDS0VEOwkvKiAyMDogKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9pcHgJCVBBQ0tFRDsJLyogMjI6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfaXB4CQlQQUNLRUQ7CS8qIDI0OiAqLwotfSBwcHBfcGt0X3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTENQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9MQ1BfU1RBVFMgY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9sY3Bfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gTENQIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAwMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX2FjawlQQUNLRUQ7CS8qIDA0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29uZl9uYWsJUEFDS0VEOwkvKiAwNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMDg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAwQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX2FjawlQQUNLRUQ7CS8qIDBDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29kZV9yZWoJUEFDS0VEOwkvKiAwRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9wcm90b19yZWoJUEFDS0VEOwkvKiAxMDogUHJvdG9jb2wtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfZWNob19ycXN0CVBBQ0tFRDsJLyogMTI6IEVjaG8tUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2VjaG9fcmVwbHkJUEFDS0VEOwkvKiAxNDogRWNoby1SZXBseSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDE2OiBEaXNjYXJkLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAxODogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX2FjawlQQUNLRUQ7CS8qIDFBOiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29uZl9uYWsJUEFDS0VEOwkvKiAxQzogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMUU6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAyMDogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX2FjawlQQUNLRUQ7CS8qIDIyOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29kZV9yZWoJUEFDS0VEOwkvKiAyNDogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9wcm90b19yZWoJUEFDS0VEOwkvKiAyNjogUHJvdG9jb2wtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfZWNob19ycXN0CVBBQ0tFRDsJLyogMjg6IEVjaG8tUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2VjaG9fcmVwbHkJUEFDS0VEOwkvKiAyQTogRWNoby1SZXBseSAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2Rpc2NfcnFzdAlQQUNLRUQ7CS8qIDJFOiBEaXNjYXJkLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAzMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hY2tfaW52YWwJUEFDS0VEOwkvKiAzMjogaW52YWxpZCBDb25mLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlal9pbnZhbAlQQUNLRUQ7CS8qIDM0OiBpbnZhbGlkIENvbmYtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcmVqX2JhZGlkCVBBQ0tFRDsJLyogMzY6IENvbmYtUmVqZWN0IHcvYmFkIElEICovCi19IHBwcF9sY3Bfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb29wYmFjayBFcnJvciBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfTFBCS19TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2xwYmtfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCBjb25mX21hZ2ljCVBBQ0tFRDsJLyogMDA6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvY19lY2hvX3Jxc3QJUEFDS0VEOwkvKiAwMjogICovCi0JdW5zaWduZWQgc2hvcnQgcmVtX2VjaG9fcnFzdAlQQUNLRUQ7CS8qIDA0OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb2NfZWNob19yZXBseQlQQUNLRUQ7CS8qIDA2OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCByZW1fZWNob19yZXBseQlQQUNLRUQ7CS8qIDA4OiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb2NfZGlzY19ycXN0CVBBQ0tFRDsJLyogMEE6ICAqLwotCXVuc2lnbmVkIHNob3J0IHJlbV9kaXNjX3Jxc3QJUEFDS0VEOwkvKiAwQzogICovCi0JdW5zaWduZWQgc2hvcnQgZWNob190eF9jb2xsc24JUEFDS0VEOwkvKiAwRTogICovCi0JdW5zaWduZWQgc2hvcnQgZWNob19yeF9jb2xsc24JUEFDS0VEOwkvKiAxMDogICovCi19IHBwcF9scGJrX3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUHJvdG9jb2wgU3RhdGlzdGljcyAocmV0dXJuZWQgYnkgdGhlIFBQUF9SRUFEX0lQQ1BfU1RBVFMgYW5kCi0gKiBQUFBfUkVBRF9JUFhDUF9TVEFUUyBjb21tYW5kcykuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9wcm90X3N0YXRzCi17Ci0JdW5zaWduZWQgc2hvcnQgcnhfdW5rbm93bglQQUNLRUQ7CS8qIDAwOiB1bmtub3duIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAwMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9jb25mX2FjawlQQUNLRUQ7CS8qIDA0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29uZl9uYWsJUEFDS0VEOwkvKiAwNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMDg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAwQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90ZXJtX2FjawlQQUNLRUQ7CS8qIDBDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfY29kZV9yZWoJUEFDS0VEOwkvKiAwRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAxMDogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX3Jxc3QJUEFDS0VEOwkvKiAxMjogQ29uZmlndXJlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jb25mX2FjawlQQUNLRUQ7CS8qIDE0OiBDb25maWd1cmUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29uZl9uYWsJUEFDS0VEOwkvKiAxNjogQ29uZmlndXJlLU5hayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2NvbmZfcmVqCVBBQ0tFRDsJLyogMTg6IENvbmZpZ3VyZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX3Jxc3QJUEFDS0VEOwkvKiAxQTogVGVybWluYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF90ZXJtX2FjawlQQUNLRUQ7CS8qIDFDOiBUZXJtaW5hdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfY29kZV9yZWoJUEFDS0VEOwkvKiAxRTogQ29kZS1SZWplY3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAyMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hY2tfaW52YWwJUEFDS0VEOwkvKiAyMjogaW52YWxpZCBDb25mLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlal9pbnZhbAlQQUNLRUQ7CS8qIDI0OiBpbnZhbGlkIENvbmYtUmVqZWN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhfcmVqX2JhZGlkCVBBQ0tFRDsJLyogMjY6IENvbmYtUmVqZWN0IHcvYmFkIElEICovCi19IHBwcF9wcm90X3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUEFQIFN0YXRpc3RpY3MgKHJldHVybmVkIGJ5IHRoZSBQUFBfUkVBRF9QQVBfU1RBVFMgY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9wYXBfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfcnFzdAlQQUNLRUQ7CS8qIDAyOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2F1dGhfYWNrCVBBQ0tFRDsJLyogMDQ6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9hdXRoX25hawlQQUNLRUQ7CS8qIDA2OiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQJCVBBQ0tFRDsJLyogMDg6ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9ycXN0CVBBQ0tFRDsJLyogMEE6IEF1dGhlbnRpY2F0ZS1SZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhfYXV0aF9hY2sJUEFDS0VEOwkvKiAwQzogQXV0aGVudGljYXRlLUFjayAqLwotCXVuc2lnbmVkIHNob3J0IHR4X2F1dGhfbmFrCVBBQ0tFRDsJLyogMEU6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF90b29fbGFyZ2UJUEFDS0VEOwkvKiAxMDogcGFja2V0cyB0b28gbGFyZ2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGVlcmlkCVBBQ0tFRDsJLyogMTI6IGludmFsaWQgcGVlciBJRCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9wYXNzd2QJUEFDS0VEOwkvKiAxNDogaW52YWxpZCBwYXNzd29yZCAqLwotfSBwcHBfcGFwX3N0YXRzX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ0hBUCBTdGF0aXN0aWNzIChyZXR1cm5lZCBieSB0aGUgUFBQX1JFQURfQ0hBUF9TVEFUUyBjb21tYW5kKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QJcHBwX2NoYXBfc3RhdHMKLXsKLQl1bnNpZ25lZCBzaG9ydCByeF91bmtub3duCVBBQ0tFRDsJLyogMDA6IHVua25vd24gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2NoYWxsZW5nZQlQQUNLRUQ7CS8qIDAyOiBBdXRoZW50aWNhdGUtUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X3Jlc3BvbnNlCVBBQ0tFRDsJLyogMDQ6IEF1dGhlbnRpY2F0ZS1BY2sgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9zdWNjZXNzCVBBQ0tFRDsJLyogMDY6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9mYWlsdXJlCVBBQ0tFRDsJLyogMDg6IEF1dGhlbnRpY2F0ZS1OYWsgKi8KLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZAkJUEFDS0VEOwkvKiAwQTogKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9jaGFsbGVuZ2UJUEFDS0VEOwkvKiAwQzogQXV0aGVudGljYXRlLVJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eF9yZXNwb25zZQlQQUNLRUQ7CS8qIDBFOiBBdXRoZW50aWNhdGUtQWNrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfc3VjY2VzcwlQQUNLRUQ7CS8qIDEwOiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgdHhfZmFpbHVyZQlQQUNLRUQ7CS8qIDEyOiBBdXRoZW50aWNhdGUtTmFrICovCi0JdW5zaWduZWQgc2hvcnQgcnhfdG9vX2xhcmdlCVBBQ0tFRDsJLyogMTQ6IHBhY2tldHMgdG9vIGxhcmdlICovCi0JdW5zaWduZWQgc2hvcnQgcnhfYmFkX3BlZXJpZAlQQUNLRUQ7CS8qIDE2OiBpbnZhbGlkIHBlZXIgSUQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfcGFzc3dkCVBBQ0tFRDsJLyogMTg6IGludmFsaWQgcGFzc3dvcmQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeF9iYWRfbWQ1CVBBQ0tFRDsJLyogMUE6IGludmFsaWQgTUQ1IGZvcm1hdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4X2JhZF9yZXNwCVBBQ0tFRDsJLyogMUM6IGludmFsaWQgcmVzcG9uc2UgKi8KLX0gcHBwX2NoYXBfc3RhdHNfdDsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb25uZWN0aW9uIEluZm9ybWF0aW9uIChyZXR1cm5lZCBieSB0aGUgUFBQX0dFVF9DT05ORUNUSU9OX0lORk8gY29tbWFuZCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0CXBwcF9jb25uX2luZm8KLXsKLQl1bnNpZ25lZCBzaG9ydCByZW1vdGVfbXJ1CVBBQ0tFRDsJLyogMDA6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlwX29wdGlvbnMJUEFDS0VEOwkvKiAwMjogICovCi0JdW5zaWduZWQgY2hhciAgaXBfbG9jYWxbNF0JUEFDS0VEOwkvKiAwMzogICovCi0JdW5zaWduZWQgY2hhciAgaXBfcmVtb3RlWzRdCVBBQ0tFRDsJLyogMDc6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9vcHRpb25zCVBBQ0tFRDsJLyogMEI6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9uZXR3b3JrWzRdCVBBQ0tFRDsJLyogMEM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9sb2NhbFs2XQlQQUNLRUQ7CS8qIDEwOiAgKi8KLQl1bnNpZ25lZCBjaGFyICBpcHhfcmVtb3RlWzZdCVBBQ0tFRDsJLyogMTY6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGlweF9yb3V0ZXJbNDhdCVBBQ0tFRDsJLyogMUM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIGF1dGhfc3RhdHVzCVBBQ0tFRDsJLyogNEM6ICAqLwotCXVuc2lnbmVkIGNoYXIgIHBlZXJfaWRbMF0JUEFDS0VEOwkvKiA0RDogICovCi19IHBwcF9jb25uX2luZm9fdDsKLQotLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFNFVF9UUklHR0VSX0lOVFIgY29tbWFuZAotICovCi0KLXR5cGVkZWYgc3RydWN0IHBwcF9pbnRyX2luZm97Ci0JdW5zaWduZWQgY2hhciAgaV9lbmFibGUJCVBBQ0tFRDsgLyogMCBJbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyICBpcnEgICAgICAgICAgICAgIFBBQ0tFRDsgLyogMSBJcnEgbnVtYmVyICovCi0JdW5zaWduZWQgc2hvcnQgdGltZXJfbGVuICAgICAgICBQQUNLRUQ7IC8qIDIgVGltZXIgZGVsYXkgKi8KLX0gcHBwX2ludHJfaW5mb190OwotCi0KLSNkZWZpbmUgRlQxX01PTklUT1JfU1RBVFVTX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBTRVRfRlQxX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxCi0KLQotCi0vKiBTcGVjaWFsIFVEUCBkcml2ZXJzIG1hbmFnZW1lbnQgY29tbWFuZHMgKi8KLSNkZWZpbmUgUFBJUEVfRU5BQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAotI2RlZmluZSBQUElQRV9ESVNBQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxCi0jZGVmaW5lIFBQSVBFX0dFVF9UUkFDRV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKLSNkZWZpbmUgUFBJUEVfR0VUX0lCQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMwotI2RlZmluZSBQUElQRV9LSUxMX0JPQVJEICAgICAJCQkJMHgyNAotI2RlZmluZSBQUElQRV9GVDFfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1Ci0jZGVmaW5lIFBQSVBFX0RSSVZFUl9TVEFUX0lGU0VORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYKLSNkZWZpbmUgUFBJUEVfRFJJVkVSX1NUQVRfSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNwotI2RlZmluZSBQUElQRV9EUklWRVJfU1RBVF9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4Ci0jZGVmaW5lIFBQSVBFX0ZMVVNIX0RSSVZFUl9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkKLSNkZWZpbmUgUFBJUEVfUk9VVEVSX1VQX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMAotCi0jZGVmaW5lIERJU0FCTEVfVFJBQ0lORyAJCQkJMHgwMAotI2RlZmluZSBUUkFDRV9TSUdOQUxMSU5HX0ZSQU1FUwkJCQkweDAxCi0jZGVmaW5lIFRSQUNFX0RBVEFfRlJBTUVTCQkJCTB4MDIKLQotCi0KLSNpZmRlZgkJX01TQ18KLSMgIHByYWdtYQlwYWNrKCkKLSNlbmRpZgotI2VuZGlmCS8qIF9TRExBX1BQUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NkbGFfeDI1LmggYi9pbmNsdWRlL2xpbnV4L3NkbGFfeDI1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZGI5ODAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhX3gyNS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhX3gyNS5oCVNhbmdvbWEgWC4yNSBmaXJtd2FyZSBBUEkgZGVmaW5pdGlvbnMuCi0qCi0qIEF1dGhvcjoJTmVuYWQgQ29yYmljCTxuY29yYmljQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk1LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIEZlYiAyOCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIFVwZGF0ZWQgZm9yIHNvY2tldCBiYXNlZCB4MjVhcGkKLSogRGVjIDEzLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYJX1NETEFfWDI1X0gKLSNkZWZpbmUJX1NETEFfWDI1X0gKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBOb3RlczoKLSAqIC0tLS0tLQotICogMS4gQWxsIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXJlIGJ5dGUtYWxpbmVkLiAgCi0gKglDb21waWxlcglQbGF0Zm9ybQkKLSAqCS0tLS0tLS0tCS0tLS0tLS0tCi0gKglHTlUgQwkJTGludXgKLSAqCi0gKi8KLQotI2lmbmRlZglQQUNLRUQKLSMJZGVmaW5lCVBBQ0tFRAlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotI2VuZGlmCS8qIFBBQ0tFRCAqLwotCi0vKioqKioqCUNPTlNUQU5UUyBERUZJTklUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlYMjVfTUFYX0NIQU4JMjU1CS8qIG1heCBudW1iZXIgb2Ygb3BlbiBYLjI1IGNpcmN1aXRzICovCi0jZGVmaW5lCVgyNV9NQVhfREFUQQkxMDI0CS8qIG1heCBsZW5ndGggb2YgWC4yNSBkYXRhIGJ1ZmZlciAqLwotLyoKLSAqIFguMjUgc2hhcmVkIG1lbW9yeSBsYXlvdXQuCi0gKi8KLSNkZWZpbmUJWDI1X01CT1hfT0ZGUwkweDE2QjAJLyogZ2VuZXJhbCBtYWlsYm94IGJsb2NrICovCi0jZGVmaW5lCVgyNV9SWE1CT1hfT0ZGUwkweDFBRDAJLyogcmVjZWl2ZSBtYWlsYm94ICovCi0jZGVmaW5lCVgyNV9TVEFUVVNfT0ZGUwkweDFFRjAJLyogWC4yNSBzdGF0dXMgc3RydWN0dXJlICovCi0jZGVmaW5lIFgyNV9NQl9WRUNUT1IJMHhFMDAwCS8qIFM1MTQgbWFpbGJveCB3aW5kb3cgdmVjb3RyICovCi0jZGVmaW5lIFgyNV9NSVNDX0hETENfQklUUyAweDFGMDAgLypYLjI1IG1pc2NhbGxhbmVvdXMgSERMQyBiaXRzICovCi0KLS8qIGNvZGUgbGV2ZWxzICovCi0jZGVmaW5lIEhETENfTEVWRUwgMHgwMQotI2RlZmluZSBYMjVfTEVWRUwgIDB4MDIKLSNkZWZpbmUgWDI1X0FORF9IRExDX0xFVkVMIDB4MDMKLSNkZWZpbmUgRE9fSERMQ19MRVZFTF9FUlJPUl9DSEVDS0lORyAweDA0Ci0KLS8qKioqKiogREFUQSBTVFJVQ1RVUkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgQ29tbWFuZCBCbG9jay4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgWDI1Q21kCi17Ci0JdW5zaWduZWQgY2hhciBjb21tYW5kCVBBQ0tFRDsJLyogY29tbWFuZCBjb2RlICovCi0JdW5zaWduZWQgc2hvcnQgbGVuZ3RoCVBBQ0tFRDsJLyogdHJhbnNmZXIgZGF0YSBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3VsdAlQQUNLRUQ7CS8qIHJldHVybiBjb2RlICovCi0JdW5zaWduZWQgY2hhciBwZglQQUNLRUQ7CS8qIFAvRiBiaXQgKi8KLQl1bnNpZ25lZCBzaG9ydCBsY24JUEFDS0VEOwkvKiBsb2dpY2FsIGNoYW5uZWwgKi8KLQl1bnNpZ25lZCBjaGFyIHFkbQlQQUNLRUQ7CS8qIFEvRC9NIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyIGRpYWduCVBBQ0tFRDsJLyogZGlhZ25vc3RpY3MgKi8KLQl1bnNpZ25lZCBjaGFyIHBrdFR5cGUJUEFDS0VEOwkvKiBwYWNrZXQgdHlwZSAqLwotCXVuc2lnbmVkIGNoYXIgcmVzcnZbNF0JUEFDS0VEOwkvKiByZXNlcnZlZCAqLwotfSBUWDI1Q21kOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdjb21tYW5kJyBmaWVsZC4KLSAqLwotLyotLS0tLSBHZW5lcmFsIGNvbW1hbmRzIC0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgWDI1X1NFVF9HTE9CQUxfVkFSUwkweDBCICAgCS8qIHNldCBnbG9iYWwgdmFyaWFibGVzICovIAotI2RlZmluZSBYMjVfUkVBRF9NT0RFTV9TVEFUVVMJMHgwQyAJLyogcmVhZCBtb2RlbSBzdGF0dXMgKi8KLSNkZWZpbmUgWDI1X1JFQURfQ09ERV9WRVJTSU9OCTB4MTUJLyogcmVhZCBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlciAqLwotI2RlZmluZSBYMjVfVFJBQ0VfQ09ORklHVVJFCTB4MTQJLyogY29uZmlndXJlIHRyYWNlIGZhY2lsaXR5ICovCi0jZGVmaW5lIFgyNV9SRUFEX1RSQUNFX0RBVEEJMHgxNgkvKiByZWFkIHRyYWNlIGRhdGEgKi8KLSNkZWZpbmUJWDI1X1NFVF9JTlRFUlJVUFRfTU9ERQkweDE3CS8qIHNldCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBtb2RlICovCi0jZGVmaW5lCVgyNV9SRUFEX0lOVEVSUlVQVF9NT0RFCTB4MTgJLyogcmVhZCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBtb2RlICovCi0vKi0tLS0tIEhETEMtbGV2ZWwgY29tbWFuZHMgLS0tLS0tLS0tLS0qLwotI2RlZmluZSBYMjVfSERMQ19MSU5LX0NPTkZJR1VSRQkweDAxCS8qIGNvbmZpZ3VyZSBIRExDIGxpbmsgbGV2ZWwgKi8gICAKLSNkZWZpbmUgWDI1X0hETENfTElOS19PUEVOCTB4MDIJLyogb3BlbiBIRExDIGxpbmsgKi8gICAgICAgICAJCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfQ0xPU0UJMHgwMwkvKiBjbG9zZSBIRExDIGxpbmsgKi8KLSNkZWZpbmUgWDI1X0hETENfTElOS19TRVRVUAkweDA0CS8qIHNldCB1cCBIRExDIGxpbmsgKi8gCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfRElTQwkweDA1CS8qIGRpc2Nvbm5lY3QgREhMQyBsaW5rICovCi0jZGVmaW5lIFgyNV9IRExDX0xJTktfU1RBVFVTCTB4MDYJLyogcmVhZCBESExDIGxpbmsgc3RhdHVzICovCi0jZGVmaW5lIFgyNV9IRExDX1JFQURfU1RBVFMJMHgwNwkvKiByZWFkIG9wZXJhdGlvbmFsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgWDI1X0hETENfRkxVU0hfU1RBVFMJMHgwOCAJLyogZmx1c2ggb3BlcmF0aW9uYWwgc3RhdGlzdGljcyAqLwotI2RlZmluZSBYMjVfSERMQ19SRUFEX0NPTU1fRVJSCTB4MDkgCS8qIHJlYWQgZXJyb3Igc3RhdGlzdGljcyAqLwotI2RlZmluZSBYMjVfSERMQ19GTFVTSF9DT01NX0VSUgkweDBBCS8qIGZsdXNoIGVycm9yIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUgWDI1X0hETENfRkxVU0hfQlVGRkVSUwkweDBECS8qIGZsdXNoIEhETEMtbGV2ZWwgZGF0YSBidWZmZXJzICovCi0jZGVmaW5lIFgyNV9IRExDX1NQUlZTX0NOVF9TVEFUIDB4MEYJLyogcmVhZCBzdXJlcnZpc29yeSBjb3VudCBzdGF0dXMgKi8KLSNkZWZpbmUgWDI1X0hETENfU0VORF9VSV9GUkFNRQkweDEwCS8qIHNlbmQgdW5udW1iZXJlZCBpbmZvcm1hdGlvbiBmcmFtZSAqLwotI2RlZmluZSBYMjVfSERMQ19XUklURQkJMHgxMQkvKiBzZW5kIEhETEMgaW5mb3JtYXRpb24gZnJhbWUgKi8KLSNkZWZpbmUgWDI1X0hETENfUkVBRAkJMHgyMQkvKiByZWFkIEhETEMgaW5mb3JtYXRpb24gZnJhbWUgKi8KLSNkZWZpbmUgWDI1X0hETENfUkVBRF9DT05GSUcJMHgxMgkvKiByZWFkIEhETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBYMjVfSERMQ19TRVRfQ09ORklHCTB4MTMJLyogc2V0IEhETEMgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBTRVRfUFJPVE9DT0xfTEVWRUwJMHgxRgkvKiBzZXQgcHJvdG9jb2wgbGV2ZWwgKi8KLS8qLS0tLS0gWC4yNS1sZXZlbCBjb21tYW5kcyAtLS0tLS0tLS0tLSovCi0jZGVmaW5lIFgyNV9SRUFECQkweDIyCS8qIHJlYWQgWC4yNSBwYWNrZXQgKi8KLSNkZWZpbmUgWDI1X1dSSVRFCQkweDIzCS8qIHNlbmQgWC4yNSBwYWNrZXQgKi8KLSNkZWZpbmUgWDI1X1BMQUNFX0NBTEwJCTB4MzAJLyogcGxhY2UgYSBjYWxsIG9uIFNWQyAqLwotI2RlZmluZSBYMjVfQUNDRVBUX0NBTEwJCTB4MzEJLyogYWNjZXB0IGluY29tbWluZyBjYWxsICovCi0jZGVmaW5lIFgyNV9DTEVBUl9DQUxMCQkweDMyCS8qIGNsZWFyIGNhbGwgKi8KLSNkZWZpbmUgWDI1X0NMRUFSX0NPTkZSTQkweDMzCS8qIHNlbmQgY2xlYXIgY29uZmlybWF0aW9uIHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTRVQJCTB4MzQJLyogc2VuZCByZXNldCByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTRVRfQ09ORlJNCTB4MzUJLyogc2VuZCByZXNldCBjb25maXJtYXRpb24gcGFja2V0ICovCi0jZGVmaW5lIFgyNV9SRVNUQVJUCQkweDM2CS8qIHNlbmQgcmVzdGFydCByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVTVEFSVF9DT05GUk0JMHgzNwkvKiBzZW5kIHJlc3RhcnQgY29uZmlybWF0aW9uIHBhY2tldCAqLwotI2RlZmluZSBYMjVfSU5URVJSVVBUCQkweDM4CS8qIHNlbmQgaW50ZXJydXB0IHJlcXVlc3QgcGFja2V0ICovCi0jZGVmaW5lIFgyNV9JTlRFUlJVUFRfQ09ORlJNCTB4MzkJLyogc2VuZCBpbnRlcnJ1cHQgY29uZmlybWF0aW9uIHBrdCAqLwotI2RlZmluZSBYMjVfUkVHSVNUUkFUSU9OX1JRU1QJMHgzQQkvKiBzZW5kIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotI2RlZmluZSBYMjVfUkVHSVNUUkFUSU9OX0NPTkZSTQkweDNCCS8qIHNlbmQgcmVnaXN0cmF0aW9uIGNvbmZpcm1hdGlvbiAqLwotI2RlZmluZSBYMjVfSVNfREFUQV9BVkFJTEFCTEUJMHg0MAkvKiBxdWVycnkgcmVjZWl2ZSBxdWV1ZSAqLwotI2RlZmluZSBYMjVfSU5DT01NSU5HX0NBTExfQ1RMCTB4NDEJLyogc2VsZWN0IGluY29tbWluZyBjYWxsIG9wdGlvbnMgKi8KLSNkZWZpbmUgWDI1X0NPTkZJR1VSRV9QVkMJMHg0MgkvKiBjb25maWd1cmUgUFZDICovCi0jZGVmaW5lIFgyNV9HRVRfQUNUSVZFX0NIQU5ORUxTCTB4NDMJLyogZ2V0IGEgbGlzdCBvZiBhY3RpdmUgY2lyY3VpdHMgKi8KLSNkZWZpbmUgWDI1X1JFQURfQ0hBTk5FTF9DT05GSUcJMHg0NAkvKiByZWFkIHZpcnQuIGNpcmN1aXQgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBYMjVfRkxVU0hfREFUQV9CVUZGRVJTCTB4NDUJLyogZmx1c2ggWC4yNS1sZXZlbCBkYXRhIGJ1ZmZlcnMgKi8KLSNkZWZpbmUgWDI1X1JFQURfSElTVE9SWV9UQUJMRQkweDQ2CS8qIHJlYWQgYXN5bmNocm9ub3VzIGV2ZW50IGxvZyAqLwotI2RlZmluZSBYMjVfSElTVE9SWV9UQUJMRV9DVEwJMHg0NwkvKiBjb250cm9sIGFzeW5jaHJvbm91cyBldmVudCBsb2cgKi8KLSNkZWZpbmUJWDI1X0dFVF9UWF9EX0JJVF9TVEFUVVMJMHg0OAkvKiBpcyBwYWNrZXQgd2l0aCBELWJpdCBhY2tub3dsZWdlZCAqLwotI2RlZmluZQlYMjVfUkVBRF9TVEFUSVNUSUNTCTB4NDkJLyogcmVhZCBYLjI1LWxldmVsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJWDI1X0ZMVVNIX1NUQVRJU1RJQ1MJMHg0QQkvKiBmbHVzaCBYLjI1LWxldmVsIHN0YXRpc3RpY3MgKi8KLSNkZWZpbmUJWDI1X1JFQURfQ09ORklHVVJBVElPTgkweDUwCS8qIHJlYWQgSERMQyAmIFguMjUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZQlYMjVfU0VUX0NPTkZJR1VSQVRJT04JMHg1MQkvKiBzZXQgSERMQyAmIFguMjUgY29uZmlndXJhdGlvbiAqLwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdyZXN1bHQnIGZpZWxkLgotICovCi0vKi0tLS0tIEdlbmVyYWwgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBYMjVSRVNfT0sJCTB4MDAKLSNkZWZpbmUgWDI1UkVTX0VSUk9SCQkweDAxCi0jZGVmaW5lIFgyNVJFU19MSU5LX05PVF9JTl9BQk0JMHgwMgkvKiBsaW5rIGlzIG5vdCBpbiBBQk0gbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfTElOS19DTE9TRUQJMHgwMwotI2RlZmluZSBYMjVSRVNfSU5WQUxfTEVOR1RICTB4MDQKLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NNRAkweDA1Ci0jZGVmaW5lIFgyNVJFU19VTk5VTUJFUkVEX0ZSQU1FCTB4MDYJLyogdW5udW5iZXJlZCBmcmFtZSByZWNlaXZlZCAqLwotI2RlZmluZSBYMjVSRVNfRlJNX1JFSkVDVF9NT0RFCTB4MDcJLyogbGluayBpcyBpbiBGcmFtZSBSZWplY3QgbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfTU9ERU1fRkFJTFVSRQkweDA4CS8qIERDRCBhbmQvb3IgQ1RTIGRyb3BwZWQgKi8KLSNkZWZpbmUgWDI1UkVTX04yX1JFVFJZX0xJTUlUCTB4MDkJLyogTjIgcmV0cnkgbGltaXQgaGFzIGJlZW4gZXhjZWVkZWQgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0xDTgkweDMwCS8qIGludmFsaWQgbG9naWNhbCBjaGFubmVsIG51bWJlciAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfU1RBVEUJMHgzMQkvKiBjaGFubmVsIGlzIG5vdCBpbiBkYXRhIHhmZXIgbW9kZSAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfREFUQV9MRU4JMHgzMgkvKiBpbnZhbGlkIGRhdGEgbGVuZ3RoICovCi0jZGVmaW5lIFgyNVJFU19OT1RfUkVBRFkJMHgzMwkvKiBubyBkYXRhIGF2YWlsYWJsZSAvIGJ1ZmZlcnMgZnVsbCAqLwotI2RlZmluZSBYMjVSRVNfTkVUV09SS19ET1dOCTB4MzQKLSNkZWZpbmUgWDI1UkVTX0NIQU5ORUxfSU5fVVNFCTB4MzUJLyogdGhlcmUgaXMgZGF0YSBxdWV1ZWQgb24gdGhpcyBMQ04gKi8KLSNkZWZpbmUgWDI1UkVTX1JFR1NUX05PVF9TVVBQUlQJMHgzNgkvKiByZWdpc3RyYXRpb24gbm90IHN1cHBvcnRlZCAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfRk9STUFUCTB4MzcJLyogaW52YWxpZCBwYWNrZXQgZm9ybWF0ICovCi0jZGVmaW5lIFgyNVJFU19EX0JJVF9OT1RfU1VQUFJUCTB4MzgJLyogRC1iaXQgcHJhZ21hdGljcyBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIFgyNVJFU19GQUNJTF9OT1RfU1VQUFJUCTB4MzkJLyogQ2FsbCBmYWNpbGl0eSBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIFgyNVJFU19JTlZBTF9DQUxMX0FSRwkweDNBCS8qIGVycm9ybmVvdXMgY2FsbCBhcmd1bWVudHMgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NBTExfREFUQQkweDNCCS8qIGVycm9ybmVvdXMgY2FsbCB1c2VyIGRhdGEgKi8KLSNkZWZpbmUgWDI1UkVTX0FTWU5DX1BBQ0tFVAkweDQwCS8qIGFzeW5jaHJvbm91cyBwYWNrZXQgcmVjZWl2ZWQgKi8KLSNkZWZpbmUgWDI1UkVTX1BST1RPX1ZJT0xBVElPTgkweDQxCS8qIHByb3RvY29sIHZpb2xhdGlvbiBvY2N1cnJlZCAqLwotI2RlZmluZSBYMjVSRVNfUEtUX1RJTUVPVVQJMHg0MgkvKiBYLjI1IHBhY2tldCB0aW1lIG91dCAqLwotI2RlZmluZSBYMjVSRVNfUEtUX1JFVFJZX0xJTUlUCTB4NDMJLyogWC4yNSBwYWNrZXQgcmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KLS8qLS0tLS0gQ29tbWFuZC1kZXBlbmRlbnQgcmVzdWx0cyAtLS0tLSovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0RJU0MJMHgwMAkvKiBIRExDX0xJTktfU1RBVFVTICovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0lOX0FCTQkweDAxCS8qIEhETENfTElOS19TVEFUVVMgKi8KLSNkZWZpbmUgWDI1UkVTX05PX0RBVEEJCTB4MDEJLyogSERMQ19SRUFEL1JFQURfVFJBQ0VfREFUQSovCi0jZGVmaW5lIFgyNVJFU19UUkFDRV9JTkFDVElWRQkweDAyCS8qIFJFQURfVFJBQ0VfREFUQSAqLwotI2RlZmluZSBYMjVSRVNfTElOS19JU19PUEVOCTB4MDEJLyogSERMQ19MSU5LX09QRU4gKi8KLSNkZWZpbmUgWDI1UkVTX0xJTktfSVNfRElTQwkweDAyCS8qIEhETENfTElOS19ESVNDICovCi0jZGVmaW5lIFgyNVJFU19MSU5LX0lTX0NMT1NFRAkweDAzCS8qIEhETENfTElOS19DTE9TRSAqLwotI2RlZmluZSBYMjVSRVNfSU5WQUxfUEFSQU0JMHgzMQkvKiBJTkNPTU1JTkdfQ0FMTF9DVEwgKi8KLSNkZWZpbmUgWDI1UkVTX0lOVkFMX0NPTkZJRwkweDM1CS8qIFJFR0lTVFJfUlFTVC9DT05GUk0gKi8KLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAncWRtX2JpdHMnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNUNNRF9RX0JJVF9NQVNLCTB4MDQKLSNkZWZpbmUgWDI1Q01EX0RfQklUX01BU0sJMHgwMgotI2RlZmluZSBYMjVDTURfTV9CSVRfTUFTSwkweDAxCi0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3BrdF90eXBlJyBmaWVsZC4KLSAqLwotLyotLS0tLSBBc3luY2hyb25vdXMgZXZlbnRzIC0tLS0tLSovCi0jZGVmaW5lIEFTRV9DTEVBUl9SUVNUCQkweDAyCi0jZGVmaW5lIEFTRV9SRVNFVF9SUVNUCQkweDA0Ci0jZGVmaW5lIEFTRV9SRVNUQVJUX1JRU1QJMHgwOAotI2RlZmluZSBBU0VfSU5URVJSVVBUCQkweDEwCi0jZGVmaW5lIEFTRV9EVEVfUkVHSVNUUl9SUVNUCTB4MjAKLSNkZWZpbmUgQVNFX0NBTExfUlFTVAkJMHgzMAotI2RlZmluZSBBU0VfQ0FMTF9BQ0NFUFRFRAkweDMxCi0jZGVmaW5lIEFTRV9DTEVBUl9DT05GUk0JMHgzMgotI2RlZmluZSBBU0VfUkVTRVRfQ09ORlJNCTB4MzMKLSNkZWZpbmUgQVNFX1JFU1RBUlRfQ09ORlJNCTB4MzQKLSNkZWZpbmUgQVNFX0lOVEVSUlVQVF9DT05GUk0JMHgzNQotI2RlZmluZSBBU0VfRENFX1JFR0lTVFJfQ09ORlJNCTB4MzYKLSNkZWZpbmUgQVNFX0RJQUdOT1NUSUMJCTB4MzcKLSNkZWZpbmUgQVNFX0NBTExfQVVUT19DTEVBUgkweDM4Ci0jZGVmaW5lIEFVVE9fUkVTUE9OU0VfRkxBRwkweDgwCi0vKi0tLS0tIFRpbWUtT3V0IGV2ZW50cyAtLS0tLS0tLS0tKi8KLSNkZWZpbmUgVE9FX1JFU1RBUlRfUlFTVAkweDAzCi0jZGVmaW5lIFRPRV9DQUxMX1JRU1QJCTB4MDUKLSNkZWZpbmUgVE9FX0NMRUFSX1JRU1QJCTB4MDgKLSNkZWZpbmUgVE9FX1JFU0VUX1JRU1QJCTB4MEEKLS8qLS0tLS0gUHJvdG9jb2wgVmlvbGF0aW9uIGV2ZW50cyAqLwotI2RlZmluZSBQVkVfQ0xFQVJfUlFTVAkJMHgzMgotI2RlZmluZSBQVkVfUkVTRVRfUlFTVAkJMHgzMwotI2RlZmluZSBQVkVfUkVTVEFSVF9SUVNUCTB4MzQKLSNkZWZpbmUgUFZFX0RJQUdOT1NUSUMJCTB4MzcKLQotI2RlZmluZSBJTlRSX09OX1JYX0ZSQU1FICAgICAgICAgICAgMHgwMQotI2RlZmluZSBJTlRSX09OX1RYX0ZSQU1FICAgICAgICAgICAgMHgwMgotI2RlZmluZSBJTlRSX09OX01PREVNX1NUQVRVU19DSEFOR0UgMHgwNAotI2RlZmluZSBJTlRSX09OX0NPTU1BTkRfQ09NUExFVEUgICAgMHgwOAotI2RlZmluZSBJTlRSX09OX1gyNV9BU1lfVFJBTlNBQ1RJT04gMHgxMAotI2RlZmluZSBJTlRSX09OX1RJTUVSCQkgICAgMHg0MAotI2RlZmluZSBESVJFQ1RfUlhfSU5UUl9VU0FHRSAgICAgICAgMHg4MAotCi0jZGVmaW5lIE5PX0lOVFJfUEVORElORyAgCSAgICAgICAgMHgwMAotI2RlZmluZSBSWF9JTlRSX1BFTkRJTkcJCQkweDAxCQotI2RlZmluZSBUWF9JTlRSX1BFTkRJTkcJCQkweDAyCi0jZGVmaW5lIE1PREVNX0lOVFJfUEVORElORwkJMHgwNAotI2RlZmluZSBDT01NQU5EX0NPTVBMRVRFX0lOVFJfUEVORElORyAJMHgwOAotI2RlZmluZSBYMjVfQVNZX1RSQU5TX0lOVFJfUEVORElORwkweDEwCi0jZGVmaW5lIFRJTUVSX0lOVFJfUEVORElORwkJMHg0MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgTWFpbGJveC4KLSAqCVRoaXMgc3RydWN0dXJlIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0cyBYMjVfTUJPWF9PRkZTIGFuZCBYMjVfUlhNQk9YX09GRlMKLSAqCWludG8gc2hhcmVkIG1lbW9yeSB3aW5kb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNU1ib3gKLXsKLQl1bnNpZ25lZCBjaGFyIG9wZmxhZwlQQUNLRUQ7CS8qIDAwaDogZXhlY3V0aW9uIGZsYWcgKi8KLQlUWDI1Q21kIGNtZAkJUEFDS0VEOwkvKiAwMWg6IGNvbW1hbmQgYmxvY2sgKi8KLQl1bnNpZ25lZCBjaGFyIGRhdGFbMV0JUEFDS0VEOwkvKiAxMGg6IGRhdGEgYnVmZmVyICovCi19IFRYMjVNYm94OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgVGltZSBTdGFtcCBTdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRpbWVTdGFtcAotewotCXVuc2lnbmVkIGNoYXIgbW9udGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZGF0ZQlQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBzZWMJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgbWluCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIGhvdXIJUEFDS0VEOwotfSBUWDI1VGltZVN0YW1wOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFguMjUgU3RhdHVzIEJsb2NrLgotICoJVGhpcyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgWDI1X1NUQVRVU19PRkYgaW50byBzaGFyZWQgbWVtb3J5Ci0gKgl3aW5kb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVN0YXR1cwotewotCXVuc2lnbmVkIHNob3J0IHB2Y19tYXAJUEFDS0VEOwkvKiAwMGg6IFBWQyBtYXAgKi8KLQl1bnNpZ25lZCBzaG9ydCBpY2NfbWFwCVBBQ0tFRDsJLyogMDJoOiBJbmNvbW1pbmcgQ2hhbi4gbWFwICovCi0JdW5zaWduZWQgc2hvcnQgdHdjX21hcAlQQUNLRUQ7CS8qIDA0aDogVHdvLXdheSBDbmFuLiBtYXAgKi8KLQl1bnNpZ25lZCBzaG9ydCBvZ2NfbWFwCVBBQ0tFRDsJLyogMDZoOiBPdXRnb2luZyBDaGFuLiBtYXAgKi8KLQlUWDI1VGltZVN0YW1wIHRzdGFtcAlQQUNLRUQ7CS8qIDA4aDogdGltZXN0YW1wIChCQ0QpICovCi0JdW5zaWduZWQgY2hhciBpZmxhZ3MJUEFDS0VEOwkvKiAwRGg6IGludGVycnVwdCBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hc2sgICAgIFBBQ0tFRDsgLyogMEVoOiBpbnRlcnJ1cHQgbWFzayAgKi8KLQl1bnNpZ25lZCBjaGFyIHJlc3J2CVBBQ0tFRDsJLyogMEVoOiAqLwotCXVuc2lnbmVkIGNoYXIgZ2ZsYWdzCVBBQ0tFRDsJLyogMTBoOiBtaXNjLiBIRExDL1gyNSBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgY2ZsYWdzW1gyNV9NQVhfQ0hBTl0gUEFDS0VEOyAvKiBjaGFubmVsIHN0YXR1cyBieXRlcyAqLwotfSBUWDI1U3RhdHVzOwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnaWZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfUlhfSU5UUgkweDAxCS8qIHJlY2VpdmUgaW50ZXJydXB0ICovCi0jZGVmaW5lIFgyNV9UWF9JTlRSCTB4MDIJLyogdHJhbnNtaXQgaW50ZXJydXB0ICovCi0jZGVmaW5lIFgyNV9NT0RFTV9JTlRSCTB4MDQJLyogbW9kZW0gc3RhdHVzIGludGVycnVwdCAoQ1RTL0RDRCkgKi8KLSNkZWZpbmUgWDI1X0VWRU5UX0lOVFIJMHgxMAkvKiBhc3luY3Jvbm91cyBldmVudCBlbmNvdW50ZXJlZCAqLwotI2RlZmluZSBYMjVfQ01EX0lOVFIJMHgwOAkvKiBpbnRlcmZhY2UgY29tbWFuZCBjb21wbGV0ZSAqLwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnZ2ZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfSERMQ19BQk0JMHgwMQkvKiBIRExDIGlzIGluIEFCTSBtb2RlICovCi0jZGVmaW5lIFgyNV9SWF9SRUFEWQkweDAyCS8qIFguMjUgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgWDI1X1RSQUNFX1JFQURZCTB4MDgJLyogdHJhY2UgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgWDI1X0VWRU5UX0lORAkweDIwCS8qIGFzeW5jaHJvbm91cyBldmVudCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgWDI1X1RYX1JFQURZCTB4NDAJLyogc3BhY2UgaXMgYXZhaWxhYmxlIGluIFR4IGJ1Zi4qLwotCi0vKgotICogQml0bWFza3MgZm9yIHRoZSAnY2ZsYWdzJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfWEZFUl9NT0RFCTB4ODAJLyogY2hhbm5lbCBpcyBpbiBkYXRhIHRyYW5zZmVyIG1vZGUgKi8KLSNkZWZpbmUgWDI1X1RYV0lOX09QRU4JMHg0MAkvKiB0cmFuc21pdCB3aW5kb3cgb3BlbiAqLwotI2RlZmluZSBYMjVfUlhCVUZfTUFTSwkweDNGCS8qIG51bWJlciBvZiBkYXRhIGJ1ZmZlcnMgYXZhaWxhYmxlICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRm9sbG93aW5nIGRlZmluaXRpb25zIHN0cnVjdHVyaXplIGNvbnRlbnRzIG9mIHRoZSBUWDI1TWJveC5kYXRhIGZpZWxkIGZvcgotICogZGlmZmVyZW50IFguMjUgaW50ZXJmYWNlIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWDI1X1NFVF9HTE9CQUxfVkFSUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVHbG9iYWxWYXJzCi17Ci0JdW5zaWduZWQgY2hhciByZXNydglQQUNLRUQ7CS8qIDAwaDogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGR0ckN0bAlQQUNLRUQ7CS8qIDAxaDogRFRSIGNvbnRyb2wgY29kZSAqLwotCXVuc2lnbmVkIGNoYXIgcmVzRXJyCVBBQ0tFRDsJLyogMDFoOiAnMScgLSByZXNldCBtb2RlbSBlcnJvciAqLwotfSBUWDI1R2xvYmFsVmFyczsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAnZHRyQ3RsJyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVfUkFJU0VfRFRSCTB4MDEKLSNkZWZpbmUgWDI1X0RST1BfRFRSCTB4MDIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9NT0RFTV9TVEFUVVMgQ29tbWFuZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgWDI1TW9kZW1TdGF0dXMKLXsKLQl1bnNpZ25lZCBjaGFyCXN0YXR1cwlQQUNLRUQ7CQkvKiAwMGg6IG1vZGVtIHN0YXR1cyAqLwotfSBUWDI1TW9kZW1TdGF0dXM7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3N0YXR1cycgZmllbGQuCi0gKi8KLSNkZWZpbmUgWDI1X0NUU19NQVNLCTB4MjAKLSNkZWZpbmUgWDI1X0RDRF9NQVNLCTB4MDgKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19MSU5LX1NUQVRVUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVMaW5rU3RhdHVzCi17Ci0JdW5zaWduZWQgY2hhciB0eFF1ZXVlZAlQQUNLRUQ7CS8qIDAwaDogcXVldWVkIFR4IEktZnJhbWVzKi8KLQl1bnNpZ25lZCBjaGFyIHJ4UXVldWVkCVBBQ0tFRDsJLyogMDFoOiBxdWV1ZWQgUnggSS1mcmFtZXMqLwotCXVuc2lnbmVkIGNoYXIgc3RhdGlvbglQQUNLRUQ7CS8qIDAyaDogRFRFL0RDRSBjb25maWcuICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZAlQQUNLRUQ7CS8qIDAzaDogcmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHNmVGFsbHkJUEFDS0VEOwkvKiAwNGg6IHN1cGVydmlzb3J5IGZyYW1lIHRhbGx5ICovCi19IFRYMjVMaW5rU3RhdHVzOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICdzdGF0aW9uJyBmaWVsZC4KLSAqLwotI2RlZmluZQlYMjVfU1RBVElPTl9EVEUJMHgwMQkvKiBzdGF0aW9uIGNvbmZpZ3VyZWQgYXMgRFRFICovCi0jZGVmaW5lIFgyNV9TVEFUSU9OX0RDRQkweDAyCS8qIHN0YXRpb24gY29uZmlndXJlZCBhcyBEQ0UgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19SRUFEX1NUQVRTIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEhkbGNTdGF0cwotewkJCQkJCS8qCWEgbnVtYmVyIG9mIC4uLiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4SUZyYW1lcwlQQUNLRUQ7CS8qIDAwaDogcmVhZHkgUnggSS1mcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCByeE5vc2VxCQlQQUNLRUQ7CS8qIDAyaDogZnJtcyBvdXQtb2Ytc2VxdWVuY2UgKi8KLQl1bnNpZ25lZCBzaG9ydCByeE5vZGF0YQkJUEFDS0VEOwkvKiAwNGg6IEktZnJtcyB3aXRob3V0IGRhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydCByeERpc2NhcmRlZAlQQUNLRUQ7CS8qIDA2aDogZGlzY2FyZGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4VG9vTG9uZwlQQUNLRUQ7CS8qIDA4aDogZnJhbWVzIHRvbyBsb25nICovCi0JdW5zaWduZWQgc2hvcnQgcnhCYWRBZGRyCVBBQ0tFRDsJLyogMEFoOiBmcm1zIHdpdGggaW52YWwuYWRkciovCi0JdW5zaWduZWQgc2hvcnQgdHhBY2tlZAkJUEFDS0VEOwkvKiAwQ2g6IGFja25vd2xlZGdlZCBJLWZybXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJldHJhbnNtCVBBQ0tFRDsJLyogMEVoOiByZS10cmFuc21pdC4gSS1mcm1zICovCi0JdW5zaWduZWQgc2hvcnQgdDFUaW1lb3V0CVBBQ0tFRDsJLyogMTBoOiBUMSB0aW1lb3V0cyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4U0FCTQkJUEFDS0VEOwkvKiAxMmg6IHJlY2VpdmVkIFNBQk0gZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgcnhESVNDCQlQQUNLRUQ7CS8qIDE0aDogcmVjZWl2ZWQgRElTQyBmcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCByeERNCQlQQUNLRUQ7CS8qIDE2aDogcmVjZWl2ZWQgRE0gZnJhbWVzICovCi0JdW5zaWduZWQgc2hvcnQgcnhGUk1SCQlQQUNLRUQ7CS8qIDE4aDogRlJNUiBmcmFtZXMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFNBQk0JCVBBQ0tFRDsJLyogMUFoOiB0cmFuc20uIFNBQk0gZnJhbWVzKi8KLQl1bnNpZ25lZCBzaG9ydCB0eERJU0MJCVBBQ0tFRDsJLyogMUNoOiB0cmFuc20uIERJU0MgZnJhbWVzKi8KLQl1bnNpZ25lZCBzaG9ydCB0eERNCQlQQUNLRUQ7CS8qIDFFaDogdHJhbnNtLiBETSBmcmFtZXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eEZSTVIJCVBBQ0tFRDsJLyogMjBoOiB0cmFuc20uIEZSTVIgZnJhbWVzKi8KLX0gVEhkbGNTdGF0czsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfSERMQ19SRUFEX0NPTU1fRVJSIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEhkbGNDb21tRXJyCi17CQkJCQkJLyoJYSBudW1iZXIgb2YgLi4uICovCi0JdW5zaWduZWQgY2hhciByeE92ZXJydW4JCVBBQ0tFRDsJLyogMDBoOiBSeCBvdmVycnVuIGVycm9ycyAqLwotCXVuc2lnbmVkIGNoYXIgcnhCYWRDcmMJCVBBQ0tFRDsJLyogMDFoOiBSeCBDUkMgZXJyb3JzICovCi0JdW5zaWduZWQgY2hhciByeEFib3J0ZWQJCVBBQ0tFRDsJLyogMDJoOiBSeCBhYm9ydGVkIGZyYW1lcyAqLwotCXVuc2lnbmVkIGNoYXIgcnhEcm9wcGVkCQlQQUNLRUQ7CS8qIDAzaDogZnJhbWVzIGxvc3QgKi8KLQl1bnNpZ25lZCBjaGFyIHR4QWJvcnRlZAkJUEFDS0VEOwkvKiAwNGg6IFR4IGFib3J0ZWQgZnJhbWVzICovCi0JdW5zaWduZWQgY2hhciB0eFVuZGVycnVuCVBBQ0tFRDsJLyogMDVoOiBUeCB1bmRlcnJ1biBlcnJvcnMgKi8KLQl1bnNpZ25lZCBjaGFyIHR4TWlzc0ludHIJUEFDS0VEOwkvKiAwNmg6IG1pc3NlZCB1bmRlcnJ1biBpbnRzICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZAkJUEFDS0VEOwkvKiAwN2g6IHJlc2VydmVkICovCi0JdW5zaWduZWQgY2hhciBkcm9wcGVkRENECVBBQ0tFRDsJLyogMDhoOiB0aW1lcyBEQ0QgZHJvcHBlZCAqLwotCXVuc2lnbmVkIGNoYXIgZHJvcHBlZENUUwlQQUNLRUQ7CS8qIDA5aDogdGltZXMgQ1RTIGRyb3BwZWQgKi8KLX0gVEhkbGNDb21tRXJyOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFgyNV9TRVRfQ09ORklHVVJBVElPTiAmIFgyNV9SRUFEX0NPTkZJR1VSQVRJT04gQ29tbWFuZHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNUNvbmZpZwotewotdW5zaWduZWQgY2hhciBiYXVkUmF0ZQkJUEFDS0VEOwkvKiAwMGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDEJCVBBQ0tFRDsJLyogMDFoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQyCQlQQUNLRUQ7CS8qIDAyaDogICovCi0JdW5zaWduZWQgY2hhciBuMgkJUEFDS0VEOwkvKiAwM2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGhkbGNNVFUJCVBBQ0tFRDsJLyogMDRoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGhkbGNXaW5kb3cJUEFDS0VEOwkvKiAwNmg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDQJCVBBQ0tFRDsJLyogMDdoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGF1dG9Nb2RlbQkJUEFDS0VEOwkvKiAwOGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgYXV0b0hkbGMJCVBBQ0tFRDsJLyogMDloOiAgKi8KLQl1bnNpZ25lZCBjaGFyIGhkbGNPcHRpb25zCVBBQ0tFRDsJLyogMEFoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHN0YXRpb24JCVBBQ0tFRDsJLyogMEJoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHBrdFdpbmRvdwkJUEFDS0VEOwkvKiAwQ2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGRlZlBrdFNpemUJUEFDS0VEOwkvKiAwRGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IHBrdE1UVQkJUEFDS0VEOwkvKiAwRmg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvUFZDCQlQQUNLRUQ7CS8qIDExaDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlQVkMJCVBBQ0tFRDsJLyogMTNoOiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb0luY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDE1aDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlJbmNvbW1pbmdTVkMJUEFDS0VEOwkvKiAxN2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGxvVHdvV2F5U1ZDCVBBQ0tFRDsJLyogMTloOiAgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaVR3b1dheVNWQwlQQUNLRUQ7CS8qIDFCaDogICovCi0JdW5zaWduZWQgc2hvcnQgbG9PdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDFEaDogICovCi0JdW5zaWduZWQgc2hvcnQgaGlPdXRnb2luZ1NWQwlQQUNLRUQ7CS8qIDFGaDogICovCi0JdW5zaWduZWQgc2hvcnQgb3B0aW9ucwkJUEFDS0VEOwkvKiAyMWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VPcHQJUEFDS0VEOwkvKiAyM2g6ICAqLwotCXVuc2lnbmVkIHNob3J0IGZhY2lsMQkJUEFDS0VEOwkvKiAyNGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGZhY2lsMgkJUEFDS0VEOwkvKiAyNmg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGNjaXR0RmFjaWwJUEFDS0VEOwkvKiAyOGg6ICAqLwotCXVuc2lnbmVkIHNob3J0IG90aGVyRmFjaWwJUEFDS0VEOwkvKiAyQWg6ICAqLwotCXVuc2lnbmVkIHNob3J0IGNjaXR0Q29tcGF0CVBBQ0tFRDsJLyogMkNoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQxMHQyMAkJUEFDS0VEOwkvKiAyRWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDExdDIxCQlQQUNLRUQ7CS8qIDJGaDogICovCi0JdW5zaWduZWQgY2hhciB0MTJ0MjIJCVBBQ0tFRDsJLyogMzBoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHQxM3QyMwkJUEFDS0VEOwkvKiAzMWg6ICAqLwotCXVuc2lnbmVkIGNoYXIgdDE2dDI2CQlQQUNLRUQ7CS8qIDMySDogICovCi0JdW5zaWduZWQgY2hhciB0MjgJCVBBQ0tFRDsJLyogMzNoOiAgKi8KLQl1bnNpZ25lZCBjaGFyIHIxMHIyMAkJUEFDS0VEOwkvKiAzNGg6ICAqLwotCXVuc2lnbmVkIGNoYXIgcjEycjIyCQlQQUNLRUQ7CS8qIDM1aDogICovCi0JdW5zaWduZWQgY2hhciByMTNyMjMJCVBBQ0tFRDsJLyogMzZoOiAgKi8KLX0gVFgyNUNvbmZpZzsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9DSEFOTkVMX0NPTkZJRyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVDaGFuQWxsb2MJCQkvKi0tLS0tIENoYW5uZWwgYWxsb2NhdGlvbiAtKi8KLXsKLQl1bnNpZ25lZCBzaG9ydCBsb1BWQwkJUEFDS0VEOwkvKiAwMGg6IGxvd2VzdCBQVkMgbnVtYmVyICovCi0JdW5zaWduZWQgc2hvcnQgaGlQVkMJCVBBQ0tFRDsJLyogMDJoOiBoaWdoZXN0IFBWQyBudW1iZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBsb0luY29tbWluZ1NWQwlQQUNLRUQ7CS8qIDA0aDogbG93ZXN0IGluY29taW5nIFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGhpSW5jb21taW5nU1ZDCVBBQ0tFRDsJLyogMDZoOiBoaWdoZXN0IGluY29taW5nIFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGxvVHdvV2F5U1ZDCVBBQ0tFRDsJLyogMDhoOiBsb3dlc3QgdHdvLXdheSBTVkMgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaVR3b1dheVNWQwlQQUNLRUQ7CS8qIDBBaDogaGlnaGVzdCB0d28td2F5IFNWQyAqLwotCXVuc2lnbmVkIHNob3J0IGxvT3V0Z29pbmdTVkMJUEFDS0VEOwkvKiAwQ2g6IGxvd2VzdCBvdXRnb2luZyBTVkMgKi8KLQl1bnNpZ25lZCBzaG9ydCBoaU91dGdvaW5nU1ZDCVBBQ0tFRDsJLyogMEVoOiBoaWdoZXN0IG91dGdvaW5nIFNWQyAqLwotfSBUWDI1Q2hhbkFsbG9jOwotCi10eXBlZGVmIHN0cnVjdCBYMjVDaGFuQ2ZnCQkvKi0tLS0tLSBDaGFubmVsIGNvbmZpZ3VyYXRpb24gLS0tLS0qLwotewotCXVuc2lnbmVkIGNoYXIgdHlwZQlQQUNLRUQ7CS8qIDAwaDogY2hhbm5lbCB0eXBlICovCi0JdW5zaWduZWQgY2hhciB0eENvbmYJUEFDS0VEOwkvKiAwMWg6IFR4IHBhY2tldCBhbmQgd2luZG93IHNpemVzICovCi0JdW5zaWduZWQgY2hhciByeENvbmYJUEFDS0VEOwkvKiAwMWg6IFJ4IHBhY2tldCBhbmQgd2luZG93IHNpemVzICovCi19IFRYMjVDaGFuQ2ZnOwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlICd0eXBlJyBmaWVsZC4KLSAqLwotI2RlZmluZQlYMjVfUFZDICAJMHgwMQkvKiBQVkMgKi8KLSNkZWZpbmUJWDI1X1NWQ19JTgkweDAzCS8qIEluY29taW5nIFNWQyAqLwotI2RlZmluZQlYMjVfU1ZDX1RXT1dBWQkweDA3CS8qIFR3by13YXkgU1ZDICovCi0jZGVmaW5lCVgyNV9TVkNfT1VUCTB4MEIJLyogT3V0Z29pbmcgU1ZDICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogWDI1X1JFQURfU1RBVElTVElDUyBDb21tYW5kLgotICovCi10eXBlZGVmIHN0cnVjdCBYMjVTdGF0cwotewkJCQkJCS8qIG51bWJlciBvZiBwYWNrZXRzIFR4L1J4J2VkICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZXN0YXJ0UnFzdAlQQUNLRUQ7CS8qIDAwaDogUmVzdGFydCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXN0YXJ0UnFzdAlQQUNLRUQ7CS8qIDAyaDogUmVzdGFydCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZXN0YXJ0Q29uZglQQUNLRUQ7CS8qIDA0aDogUmVzdGFydCBDb25maXJtYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCByeFJlc3RhcnRDb25mCVBBQ0tFRDsJLyogMDZoOiBSZXN0YXJ0IENvbmZpcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHR4UmVzZXRScXN0CVBBQ0tFRDsJLyogMDhoOiBSZXNldCBSZXF1ZXN0ICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXNldFJxc3QJUEFDS0VEOwkvKiAwQWg6IFJlc2V0IFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJlc2V0Q29uZglQQUNLRUQ7CS8qIDBDaDogUmVzZXQgQ29uZmlybWF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgcnhSZXNldENvbmYJUEFDS0VEOwkvKiAwRWg6IFJlc2V0IENvbmZpcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2FsbFJlcXVlc3QJUEFDS0VEOwkvKiAxMGg6IENhbGwgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Q2FsbFJlcXVlc3QJUEFDS0VEOwkvKiAxMmg6IENhbGwgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2FsbEFjY2VwdAlQQUNLRUQ7CS8qIDE0aDogQ2FsbCBBY2NlcHQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeENhbGxBY2NlcHQJUEFDS0VEOwkvKiAxNmg6IENhbGwgQWNjZXB0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhDbGVhclJxc3QJUEFDS0VEOwkvKiAxOGg6IENsZWFyIFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCByeENsZWFyUnFzdAlQQUNLRUQ7CS8qIDFBaDogQ2xlYXIgUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHR4Q2xlYXJDb25mCVBBQ0tFRDsJLyogMUNoOiBDbGVhciBDb25maXJtYXRpb24gKi8KLQl1bnNpZ25lZCBzaG9ydCByeENsZWFyQ29uZglQQUNLRUQ7CS8qIDFFaDogQ2xlYXIgQ29uZmlybWF0aW9uICovCi0JdW5zaWduZWQgc2hvcnQgdHhEaWFnbm9zdGljCVBBQ0tFRDsJLyogMjBoOiBEaWFnbm9zdGljICovCi0JdW5zaWduZWQgc2hvcnQgcnhEaWFnbm9zdGljCVBBQ0tFRDsJLyogMjJoOiBEaWFnbm9zdGljICovCi0JdW5zaWduZWQgc2hvcnQgdHhSZWdScXN0CVBBQ0tFRDsJLyogMjRoOiBSZWdpc3RyYXRpb24gUmVxdWVzdCAqLwotCXVuc2lnbmVkIHNob3J0IHJ4UmVnUnFzdAlQQUNLRUQ7CS8qIDI2aDogUmVnaXN0cmF0aW9uIFJlcXVlc3QgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJlZ0NvbmYJUEFDS0VEOwkvKiAyOGg6IFJlZ2lzdHJhdGlvbiBDb25maXJtLiovCi0JdW5zaWduZWQgc2hvcnQgcnhSZWdDb25mCVBBQ0tFRDsJLyogMkFoOiBSZWdpc3RyYXRpb24gQ29uZmlybS4qLwotCXVuc2lnbmVkIHNob3J0IHR4SW50ZXJydXB0CVBBQ0tFRDsJLyogMkNoOiBJbnRlcnJ1cHQgKi8KLQl1bnNpZ25lZCBzaG9ydCByeEludGVycnVwdAlQQUNLRUQ7CS8qIDJFaDogSW50ZXJydXB0ICovCi0JdW5zaWduZWQgc2hvcnQgdHhJbnRyQ29uZglQQUNLRUQ7CS8qIDMwaDogSW50ZXJydXB0IENvbmZpcm0uICovCi0JdW5zaWduZWQgc2hvcnQgcnhJbnRyQ29uZglQQUNLRUQ7CS8qIDMyaDogSW50ZXJydXB0IENvbmZpcm0uICovCi0JdW5zaWduZWQgc2hvcnQgdHhEYXRhCQlQQUNLRUQ7CS8qIDM0aDogRGF0YSAqLwotCXVuc2lnbmVkIHNob3J0IHJ4RGF0YQkJUEFDS0VEOwkvKiAzNmg6IERhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJSCQlQQUNLRUQ7CS8qIDM4aDogUlIgKi8KLQl1bnNpZ25lZCBzaG9ydCByeFJSCQlQQUNLRUQ7CS8qIDNBaDogUlIgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eFJOUgkJUEFDS0VEOwkvKiAzQ2g6IFJOUiAqLwotCXVuc2lnbmVkIHNob3J0IHJ4Uk5SCQlQQUNLRUQ7CS8qIDNFaDogUk5SICovCi19IFRYMjVTdGF0czsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9ISVNUT1JZX1RBQkxFIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNUV2ZW50TG9nCi17Ci0JdW5zaWduZWQgY2hhcgl0eXBlCVBBQ0tFRDsJLyogMDBoOiB0cmFuc2FjdGlvbiB0eXBlICovCi0JdW5zaWduZWQgc2hvcnQJbGNuCVBBQ0tFRDsJLyogMDFoOiBsb2dpY2FsIGNoYW5uZWwgbnVtICovCi0JdW5zaWduZWQgY2hhcglwYWNrZXQJUEFDS0VEOwkvKiAwM2g6IGFzeW5jIHBhY2tldCB0eXBlICovCi0JdW5zaWduZWQgY2hhcgljYXVzZQlQQUNLRUQ7CS8qIDA0aDogWC4yNSBjYXVzZSBmaWVsZCAqLwotCXVuc2lnbmVkIGNoYXIJZGlhZwlQQUNLRUQ7CS8qIDA1aDogWC4yNSBkaWFnIGZpZWxkICovCi0JVFgyNVRpbWVTdGFtcAl0cwlQQUNLRUQ7CS8qIDA2aDogdGltZSBzdGFtcCAqLwotfSBUWDI1RXZlbnRMb2c7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNUxPR19JTkNPTU1JTkcJMHgwMAotI2RlZmluZSBYMjVMT0dfQVBQTElDQVRJT04gCTB4MDEKLSNkZWZpbmUgWDI1TE9HX0FVVE9NQVRJQwkweDAyCi0jZGVmaW5lIFgyNUxPR19FUlJPUgkJMHgwNAotI2RlZmluZSBYMjVMT0dfVElNRU9VVAkJMHgwOAotI2RlZmluZSBYMjVMT0dfUkVDT1ZFUlkJCTB4MTAKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAncGFja2V0JyBmaWVsZC4KLSAqLwotI2RlZmluZSBYMjVMT0dfQ0FMTF9SUVNUCTB4MEIKLSNkZWZpbmUgWDI1TE9HX0NBTExfQUNDRVBURUQJMHgwRgotI2RlZmluZSBYMjVMT0dfQ0xFQVJfUlFTVAkweDEzCi0jZGVmaW5lIFgyNUxPR19DTEVBUl9DT05GUk0JMHgxNwotI2RlZmluZSBYMjVMT0dfUkVTRVRfUlFTVAkweDFCCi0jZGVmaW5lIFgyNUxPR19SRVNFVF9DT05GUk0JMHgxRgotI2RlZmluZSBYMjVMT0dfUkVTVEFSVF9SUVNUCTB4RkIKLSNkZWZpbmUgWDI1TE9HX1JFU1RBUlRfQ09NRlJNCTB4RkYKLSNkZWZpbmUgWDI1TE9HX0RJQUdOT1NUSUMJMHhGMQotI2RlZmluZSBYMjVMT0dfRFRFX1JFR19SUVNUCTB4RjMKLSNkZWZpbmUgWDI1TE9HX0RURV9SRUdfQ09NRlJNCTB4RjcKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfVFJBQ0VfQ09ORklHVVJFIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRyYWNlQ2ZnCi17Ci0JdW5zaWduZWQgY2hhciBmbGFncwlQQUNLRUQ7CS8qIDAwaDogdHJhY2UgY29uZmlndXJhdGlvbiBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgdGltZW91dAlQQUNLRUQ7CS8qIDAxaDogdGltZW91dCBmb3IgdHJhY2UgZGVsYXkgbW9kZSovCi19IFRYMjVUcmFjZUNmZzsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAnZmxhZ3MnIGZpZWxkLgotICovCi0jZGVmaW5lIFgyNV9UUkNfRU5BQkxFCQkweDAxCS8qIGJpdDA6ICcxJyAtIHRyYWNlIGVuYWJsZWQgKi8KLSNkZWZpbmUgWDI1X1RSQ19USU1FU1RBTVAJMHgwMgkvKiBiaXQxOiAnMScgLSB0aW1lIHN0YW1waW5nIGVuYWJsZWQqLwotI2RlZmluZSBYMjVfVFJDX0RFTEFZCQkweDA0CS8qIGJpdDI6ICcxJyAtIHRyYWNlIGRlbGF5IGVuYWJsZWQgKi8KLSNkZWZpbmUgWDI1X1RSQ19EQVRBCQkweDA4CS8qIGJpdDM6ICcxJyAtIHRyYWNlIGRhdGEgcGFja2V0cyAqLwotI2RlZmluZSBYMjVfVFJDX1NVUEVSVklTT1JZCTB4MTAgICAgLyogYml0NDogJzEnIC0gdHJhY2Ugc3VwcnZpc29yeSBwa3RzKi8KLSNkZWZpbmUgWDI1X1RSQ19BU1lOQ0hST05PVVMJMHgyMAkvKiBiaXQ1OiAnMScgLSB0cmFjZSBhc3luY2guIHBhY2tldHMqLwotI2RlZmluZSBYMjVfVFJDX0hETEMJCTB4NDAJLyogYml0NjogJzEnIC0gdHJhY2UgYWxsIHBhY2tldHMgKi8KLSNkZWZpbmUgWDI1X1RSQ19SRUFECQkweDgwCS8qIGJpdDc6ICcxJyAtIGdldCBjdXJyZW50IGNvbmZpZy4gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBYMjVfUkVBRF9UUkFDRV9EQVRBIENvbW1hbmQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFgyNVRyYWNlCQkJLyotLS0tLSBUcmFjZSBkYXRhIHN0cnVjdHVyZSAtLS0tLS0tKi8KLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiAwMGg6IHRyYWNlIGRhdGEgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciB0eXBlCVBBQ0tFRDsJLyogMDJoOiB0cmFjZSB0eXBlICovCi0JdW5zaWduZWQgY2hhciBsb3N0X2NudAlQQUNLRUQ7CS8qIDAzaDogTiBvZiB0cmFjZXMgbG9zdCAqLwotCVRYMjVUaW1lU3RhbXAgdHN0YW1wCVBBQ0tFRDsJLyogMDRoOiBtb24vZGF0ZS9zZWMvbWluL2hvdXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBtaWxsaXNlYwlQQUNLRUQ7CS8qIDA5aDogbXMgdGltZSBzdGFtcCAqLwotCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7CS8qIDBCaDogdHJhY2VkIGZyYW1lICovCi19IFRYMjVUcmFjZTsKLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCi0gKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX01BU0sJMHgwRgkvKiBiaXRzIDAuLjM6IHRyYWNlIHR5cGUgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX1JYX0ZSQU1FCTB4MDAJLyogcmVjZWl2ZWQgZnJhbWUgdHJhY2UgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX1RYX0ZSQU1FCTB4MDEJLyogdHJhbnNtaXR0ZWQgZnJhbWUgKi8KLSNkZWZpbmUgWDI1X1RSQ19UWVBFX0VSUl9GUkFNRQkweDAyCS8qIGVycm9yIGZyYW1lICovCi0KLSNkZWZpbmUgWDI1X1RSQ19FUlJPUl9NQVNLCTB4RjAJLyogYml0cyA0Li43OiBlcnJvciBjb2RlICovCi0jZGVmaW5lIFgyNV9UUkNFUlJfUlhfQUJPUlQJMHgxMAkvKiByZWNlaXZlIGFib3J0IGVycm9yICovCi0jZGVmaW5lIFgyNV9UUkNFUlJfUlhfQkFEQ1JDCTB4MjAJLyogcmVjZWl2ZSBDUkMgZXJyb3IgKi8KLSNkZWZpbmUgWDI1X1RSQ0VSUl9SWF9PVkVSUlVOCTB4MzAJLyogcmVjZWl2ZXIgb3ZlcnJ1biBlcnJvciAqLwotI2RlZmluZSBYMjVfVFJDRVJSX1JYX1RPT19MT05HCTB4NDAJLyogZXhjZXNzaXZlIGZyYW1lIGxlbmd0aCBlcnJvciAqLwotI2RlZmluZSBYMjVfVFJDRVJSX1RYX0FCT1JUCTB4NzAJLyogYWJvcnRlZCBmcmFtZSB0cmFuc21pdHRpb24gZXJyb3IgKi8KLSNkZWZpbmUgWDI1X1RSQ0VSUl9UWF9VTkRFUlJVTgkweDgwCS8qIHRyYW5zbWl0IHVuZGVycnVuIGVycm9yICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRm9sbG93aW5nIGRlZmluaXRpb25zIGRlc2NyaWJlIEhETEMgZnJhbWUgYW5kIFguMjUgcGFja2V0IGZvcm1hdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiBzdHJ1Y3QgSERMQ0ZyYW1lCQkvKi0tLS0tIERITEMgRnJhbWUgRm9ybWF0IC0tLS0tLS0tLS0qLwotewotCXVuc2lnbmVkIGNoYXIgYWRkcglQQUNLRUQ7CS8qIGFkZHJlc3MgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyIGNudGwJUEFDS0VEOwkvKiBjb250cm9sIGZpZWxkICovCi0JdW5zaWduZWQgY2hhciBkYXRhWzBdCVBBQ0tFRDsKLX0gVEhETENGcmFtZTsKLQotdHlwZWRlZiBzdHJ1Y3QgWDI1UGt0CQkJLyotLS0tLSBYLjI1IFBha2V0IEZvcm1hdCAtLS0tLS0tLS0tKi8KLXsKLQl1bnNpZ25lZCBjaGFyIGxjbl9oaQlQQUNLRUQ7CS8qIDQgTVNCIG9mIExvZ2ljYWwgQ2hhbm5lbCBOdW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIGxjbl9sbwlQQUNLRUQ7CS8qIDggTFNCIG9mIExvZ2ljYWwgQ2hhbm5lbCBOdW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIHR5cGUJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgZGF0YVswXQlQQUNLRUQ7Ci19IFRYMjVQa3Q7Ci0KLS8qCi0gKiBEZWZpbmVzIGZvciB0aGUgJ2xjbl9oaScgZmllbGQuCi0gKi8KLSNkZWZpbmUJWDI1X1FfQklUX01BU0sJCTB4ODAJLyogRGF0YSBRdWFsaWZpZXIgQml0IG1hc2sgKi8KLSNkZWZpbmUJWDI1X0RfQklUX01BU0sJCTB4NDAJLyogRGVsaXZlcnkgQ29uZmlybWF0aW9uIEJpdCBtYXNrICovCi0jZGVmaW5lCVgyNV9NX0JJVFNfTUFTSwkJMHgzMAkvKiBNb2R1bG8gQml0cyBtYXNrICovCi0jZGVmaW5lCVgyNV9MQ05fTVNCX01BU0sJMHgwRgkvKiBMQ04gbW9zdCBzaWduaWZpY2FudCBiaXRzIG1hc2sgKi8KLQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSAndHlwZScgZmllbGQuCi0gKi8KLSNkZWZpbmUJWDI1UEtUX0RBVEEJCTB4MDEJLyogRGF0YSBwYWNrZXQgbWFzayAqLwotI2RlZmluZQlYMjVQS1RfU1VQRVJWSVNPUlkJMHgwMgkvKiBTdXBlcnZpc29yeSBwYWNrZXQgbWFzayAqLwotI2RlZmluZQlYMjVQS1RfQ0FMTF9SUVNUCTB4MEIJLyogQ2FsbCBSZXF1ZXN0L0luY29taW5nICovCi0jZGVmaW5lCVgyNVBLVF9DQUxMX0FDQ0VQVEVECTB4MEYJLyogQ2FsbCBBY2NlcHRlZC9Db25uZWN0ZWQgKi8KLSNkZWZpbmUJWDI1UEtUX0NMRUFSX1JRU1QJMHgxMwkvKiBDbGVhciBSZXF1ZXN0L0luZGljYXRpb24gKi8KLSNkZWZpbmUJWDI1UEtUX0NMRUFSX0NPTkZSTQkweDE3CS8qIENsZWFyIENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTRVRfUlFTVAkweDFCCS8qIFJlc2V0IFJlcXVlc3QvSW5kaWNhdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTRVRfQ09ORlJNCTB4MUYJLyogUmVzZXQgQ29uZmlybWF0aW9uICovCi0jZGVmaW5lCVgyNVBLVF9SRVNUQVJUX1JRU1QJMHhGQgkvKiBSZXN0YXJ0IFJlcXVlc3QvSW5kaWNhdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfUkVTVEFSVF9DT05GUk0JMHhGRgkvKiBSZXN0YXJ0IENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfSU5URVJSVVBUCTB4MjMJLyogSW50ZXJydXB0ICovCi0jZGVmaW5lCVgyNVBLVF9JTlRFUlJVUFRfQ09ORlJNCTB4MjcJLyogSW50ZXJydXB0IENvbmZpcm1hdGlvbiAqLwotI2RlZmluZQlYMjVQS1RfRElBR05PU1RJQwkweEYxCS8qIERpYWdub3N0aWMgKi8KLSNkZWZpbmUJWDI1UEtUX1JFR0lTVFJfUlFTVAkweEYzCS8qIFJlZ2lzdHJhdGlvbiBSZXF1ZXN0ICovCi0jZGVmaW5lCVgyNVBLVF9SRUdJU1RSX0NPTkZSTQkweEY3CS8qIFJlZ2lzdHJhdGlvbiBDb25maXJtYXRpb24gKi8KLSNkZWZpbmUJWDI1UEtUX1JSX01BU0tFRAkweDAxCS8qIFJlY2VpdmUgUmVhZHkgcGFja2V0IGFmdGVyIG1hc2tpbmcgKi8KLSNkZWZpbmUJWDI1UEtUX1JOUl9NQVNLRUQJMHgwNQkvKiBSZWNlaXZlIE5vdCBSZWFkeSBhZnRlciBtYXNraW5nICAqLwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlUWDI1Q21kIGNtZAkJUEFDS0VEOwotCWNoYXIgZGF0YVtYMjVfTUFYX0RBVEFdCVBBQ0tFRDsKLX0gbWJveF9jbWRfdDsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciAgcWRtCVBBQ0tFRDsJLyogUS9EL00gYml0cyAqLwotCXVuc2lnbmVkIGNoYXIgIGNhdXNlCVBBQ0tFRDsJLyogY2F1c2UgZmllbGQgKi8KLQl1bnNpZ25lZCBjaGFyICBkaWFnbglQQUNLRUQ7CS8qIGRpYWdub3N0aWNzICovCi0JdW5zaWduZWQgY2hhciAgcGt0VHlwZSAgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aCAgIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyICByZXN1bHQJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGxjbglQQUNLRUQ7Ci0JY2hhciByZXNlcnZlZFs3XQlQQUNLRUQ7Ci19eDI1YXBpX2hkcl90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl4MjVhcGlfaGRyX3QgaGRyCVBBQ0tFRDsKLQljaGFyIGRhdGFbWDI1X01BWF9EQVRBXQlQQUNLRUQ7Ci19eDI1YXBpX3Q7Ci0KLQotLyogCi0gKiBYUElQRU1PTiBEZWZpbml0aW9ucwotICovCi0KLS8qIHZhbGlkIGlwX3Byb3RvY29sIGZvciBVRFAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBVRFBNR01UX1VEUF9QUk9UT0NPTCAweDExCi0jZGVmaW5lIFVEUE1HTVRfWFBJUEVfU0lHTkFUVVJFICAgICAgICAgIlhMSU5LOE5EIgotI2RlZmluZSBVRFBNR01UX0RSVlJTVEFUU19TSUdOQVRVUkUgICAgICJEUlZTVEFUUyIKLQotLyogdmFsdWVzIGZvciByZXF1ZXN0L3JlcGx5IGJ5dGUgKi8KLSNkZWZpbmUgVURQTUdNVF9SRVFVRVNUCTB4MDEKLSNkZWZpbmUgVURQTUdNVF9SRVBMWQkweDAyCi0jZGVmaW5lIFVEUF9PRkZTRVQJMTIKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBvcHBfZmxhZyAgUEFDS0VEOyAvKiB0aGUgb3BwIGZsYWcgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbW1hbmQJUEFDS0VEOwkvKiBjb21tYW5kIGNvZGUgKi8KLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGgJUEFDS0VEOwkvKiB0cmFuc2ZlciBkYXRhIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgcmVzdWx0CVBBQ0tFRDsJLyogcmV0dXJuIGNvZGUgKi8KLQl1bnNpZ25lZCBjaGFyIHBmCVBBQ0tFRDsJLyogUC9GIGJpdCAqLwotCXVuc2lnbmVkIHNob3J0IGxjbglQQUNLRUQ7CS8qIGxvZ2ljYWwgY2hhbm5lbCAqLwotCXVuc2lnbmVkIGNoYXIgcWRtCVBBQ0tFRDsJLyogUS9EL00gYml0cyAqLwotCXVuc2lnbmVkIGNoYXIgY2F1c2UJUEFDS0VEOwkvKiBjYXVzZSBmaWVsZCAqLwotCXVuc2lnbmVkIGNoYXIgZGlhZ24JUEFDS0VEOwkvKiBkaWFnbm9zdGljcyAqLwotCXVuc2lnbmVkIGNoYXIgcGt0VHlwZQlQQUNLRUQ7CS8qIHBhY2tldCB0eXBlICovCi0JdW5zaWduZWQgY2hhciByZXNydls0XQlQQUNLRUQ7CS8qIHJlc2VydmVkICovCi19IGNibG9ja190OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JaXBfcGt0X3QgCQlpcF9wa3QJCVBBQ0tFRDsKLQl1ZHBfcGt0X3QJCXVkcF9wa3QJCVBBQ0tFRDsKLQl3cF9tZ210X3QgCQl3cF9tZ210ICAgICAgIAlQQUNLRUQ7Ci0gICAgICAgIGNibG9ja190ICAgICAgICAgICAgICAgIGNibG9jayAgICAgICAgICBQQUNLRUQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIGRhdGFbNDA4MF0gICAgICBQQUNLRUQ7Ci19IHgyNV91ZHBfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgcmVhZF9oZGxjX3N0YXQgewotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfb2sgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X291dF9vZl9zZXEgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfbm9fZGF0YSBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc19yeF9kcm9wcGVkIFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3J4X2RhdGFfdG9vX2xvbmcgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IGluZl9mcmFtZXNfcnhfaW52YWxpZF9hZGRyIFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBpbmZfZnJhbWVzX3R4X29rIFBBQ0tFRDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgaW5mX2ZyYW1lc190eF9yZXRyYW5zbWl0IFBBQ0tFRDsKLSAgICAgICAJdW5zaWduZWQgc2hvcnQgVDFfdGltZW91dHMgUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IFNBQk1fZnJhbWVzX3J4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBESVNDX2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgRE1fZnJhbWVzX3J4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBGUk1SX2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQgU0FCTV9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IERJU0NfZnJhbWVzX3R4IFBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydCBETV9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IEZSTVJfZnJhbWVzX3R4IFBBQ0tFRDsKLX0gcmVhZF9oZGxjX3N0YXRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVhZF9jb21tc19lcnJfc3RhdHN7Ci0JdW5zaWduZWQgY2hhciBvdmVycnVuX2Vycl9yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBDUkNfZXJyIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIGFib3J0X2ZyYW1lc19yeCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBmcmFtZXNfZHJvcHBlZF9idWZfZnVsbCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBhYm9ydF9mcmFtZXNfdHggUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNtaXRfdW5kZXJydW5zIFBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyIG1pc3NlZF90eF91bmRlcnJ1bnNfaW50ciBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBEQ0RfZHJvcCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciBDVFNfZHJvcCBQQUNLRUQ7Ci19IHJlYWRfY29tbXNfZXJyX3N0YXRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHRyYWNlX2RhdGEgewotCXVuc2lnbmVkIHNob3J0IGxlbmd0aCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgdHlwZSBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgdHJhY2VfZHJvcHBlZCBQQUNLRUQ7Ci0JdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWRbNV0gUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcCBQQUNLRUQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgIGRhdGEgUEFDS0VEOwotfSB0cmFjZV9kYXRhX3Q7Ci0KLWVudW0ge1VEUF9YUElQRV9UWVBFfTsKLQotI2RlZmluZSBYUElQRV9FTkFCTEVfVFJBQ0lORyAgICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBYUElQRV9ESVNBQkxFX1RSQUNJTkcgICAgICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZSBYUElQRV9HRVRfVFJBQ0VfSU5GTyAgICAgICAgICAgICAgICAgICAgMHgxNgotI2RlZmluZSBYUElQRV9GVDFfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgMHg3NAotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9JRlNFTkQgICAgICAgICAgICAgICAgMHg3NQotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9JTlRSICAgICAgICAgICAgICAgICAgMHg3NgotI2RlZmluZSBYUElQRV9EUklWRVJfU1RBVF9HRU4gICAgICAgICAgICAgICAgICAgMHg3NwotI2RlZmluZSBYUElQRV9GTFVTSF9EUklWRVJfU1RBVFMgICAgICAgICAgICAgICAgMHg3OAotI2RlZmluZSBYUElQRV9ST1VURVJfVVBfVElNRSAgICAgICAgICAgICAgICAgICAgMHg3OSAgICAgICAgCi0jZGVmaW5lIFhQSVBFX1NFVF9GVDFfTU9ERQkJCTB4ODEKLSNkZWZpbmUgWFBJUEVfRlQxX1NUQVRVU19DVFJMCQkJMHg4MAotCi0KLS8qIGVycm9yIG1lc3NhZ2VzICovCi0jZGVmaW5lIE5PX0JVRkZTX09SX0NMT1NFRF9XSU4gIDB4MzMKLSNkZWZpbmUgREFUQV9MRU5HVEhfVE9PX0JJRyAgICAgMHgzMgotI2RlZmluZSBOT19EQVRBX0FWQUlMQUJMRSAgICAgICAweDMzCi0jZGVmaW5lIFo4MF9USU1FT1VUX0VSUk9SICAgICAgIDB4MGEgICAKLSNkZWZpbmUJTk9fQlVGRlMJCTB4MDgKLQotCi0vKiBUcmFjZSBvcHRpb25zICovCi0jZGVmaW5lIFRSQUNFX0RFRkFVTFQJCTB4MDMKLSNkZWZpbmUgVFJBQ0VfU1VQRVJWSVNPUl9GUk1TCTB4MTAKLSNkZWZpbmUgVFJBQ0VfQVNZTkNfRlJNUwkweDIwCi0jZGVmaW5lIFRSQUNFX0FMTF9IRExDX0ZSTVMJMHg0MAotI2RlZmluZSBUUkFDRV9EQVRBX0ZSTVMJCTB4MDgKLQotCi0jZW5kaWYJLyogX1NETEFfWDI1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYWRydi5oIGIvaW5jbHVkZS9saW51eC9zZGxhZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NWUxMDMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogc2RsYWRydi5oCVNETEEgU3VwcG9ydCBNb2R1bGUuICBLZXJuZWwgQVBJIERlZmluaXRpb25zLgotKgotKiBBdXRob3I6IAlHaWRlb24gSGFjawkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0yMDAwIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogSnVuIDAyLCAxOTk5IAlHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBQQ0kgYWRhcHRlci4KLSogRGVjIDExLCAxOTk2CUdlbmUgS296aW4JQ29tcGxldGUgb3ZlcmhhdWwuCi0qIE9jdCAxNywgMTk5NglHZW5lIEtvemluCU1pbm9yIGJ1ZyBmaXhlcy4KLSogSnVuIDEyLCAxOTk2CUdlbmUgS296aW4gCUFkZGVkIHN1cHBvcnQgZm9yIFM1MDMgY2FyZC4KLSogRGVjIDA2LCAxOTk1CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBRFJWX0gKLSNkZWZpbmUJX1NETEFEUlZfSAotCi0KLSNkZWZpbmUJU0RMQV9NQVhJT1JBTkdFCTQJLyogbWF4aW11bSBJL08gcG9ydCByYW5nZSAqLwotI2RlZmluZQlTRExBX1dJTkRPV1NJWkUJMHgyMDAwCS8qIGRlZmF1bHQgZHVhbC1wb3J0IG1lbW9yeSB3aW5kb3cgc2l6ZSAqLwotLyoqKioqKiBEYXRhIFN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQWRhcHRlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBQb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byBhbGwKLSAqIEFQSXMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHNkbGFodwotewotCXVuc2lnbmVkIHR5cGU7CQkJLyogYWRhcHRlciB0eXBlICovCi0JdW5zaWduZWQgZndpZDsJCQkvKiBmaXJtd2FyZSBJRCAqLwotCXVuc2lnbmVkIHBvcnQ7CQkJLyogYWRhcHRlciBJL08gcG9ydCBiYXNlICovCi0JaW50IGlycTsJCQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCBsZXZlbCAqLwotCWNoYXIgUzUxNF9jcHVfbm9bMV07CQkvKiBQQ0kgQ1BVIE51bWJlciAqLwotCXVuc2lnbmVkIGNoYXIgUzUxNF9zbG90X25vOwkvKiBQQ0kgU2xvdCBOdW1iZXIgKi8KLQljaGFyIGF1dG9fcGNpX2NmZzsJCS8qIEF1dG9kZXRlY3QgUENJIFNsb3QgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLwotCXZvaWQgKiBkcG1iYXNlOwkJCS8qIGR1YWwtcG9ydCBtZW1vcnkgYmFzZSAqLwotCXVuc2lnbmVkIGRwbXNpemU7CQkvKiBkdWFsLXBvcnQgbWVtb3J5IHNpemUgKi8KLQl1bnNpZ25lZCBwY2xrOwkJCS8qIENQVSBjbG9jayByYXRlLCBrSHogKi8KLQl1bnNpZ25lZCBsb25nIG1lbW9yeTsJCS8qIG1lbW9yeSBzaXplICovCi0JdW5zaWduZWQgbG9uZyB2ZWN0b3I7CQkvKiBsb2NhbCBvZmZzZXQgb2YgdGhlIERQTSB3aW5kb3cgKi8KLQl1bnNpZ25lZCBpb19yYW5nZTsJCS8qIEkvTyBwb3J0IHJhbmdlICovCi0JdW5zaWduZWQgY2hhciByZWdzW1NETEFfTUFYSU9SQU5HRV07IC8qIHdhcyB3cml0dGVuIHRvIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIHJlc2VydmVkWzVdOwotfSBzZGxhaHdfdDsKLQotLyoqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWV4dGVybiBpbnQgc2RsYV9zZXR1cAkoc2RsYWh3X3QqIGh3LCB2b2lkKiBzZm0sIHVuc2lnbmVkIGxlbik7Ci1leHRlcm4gaW50IHNkbGFfZG93bgkoc2RsYWh3X3QqIGh3KTsKLWV4dGVybiB2b2lkIFM1MTRfaW50YWNrICAoc2RsYWh3X3QqIGh3LCB1MzIgaW50X3N0YXR1cyk7Ci1leHRlcm4gdm9pZCByZWFkX1M1MTRfaW50X3N0YXQgKHNkbGFod190KiBodywgdTMyKiBpbnRfc3RhdHVzKTsKLWV4dGVybiBpbnQgc2RsYV9tYXBtZW0JKHNkbGFod190KiBodywgdW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiBpbnQgc2RsYV9wZWVrCShzZGxhaHdfdCogaHcsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCogYnVmLAotCQkJIHVuc2lnbmVkIGxlbik7Ci1leHRlcm4gaW50IHNkbGFfcG9rZQkoc2RsYWh3X3QqIGh3LCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQqIGJ1ZiwKLQkJCSB1bnNpZ25lZCBsZW4pOwotZXh0ZXJuIGludCBzZGxhX2V4ZWMJKHZvaWQqIG9wZmxhZyk7Ci0KLWV4dGVybiB1bnNpZ25lZCB3YW5waXBlX2h3X3Byb2JlKHZvaWQpOwotCi0jZW5kaWYJLyogX1NETEFEUlZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZGxhcGNpLmggYi9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3YzkwNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3NkbGFwY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBzZGxhcGNpLmgJV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gTGluayBEcml2ZXIuCi0qCQlEZWZpbml0aW9ucyBmb3IgdGhlIFNETEEgUENJIGFkYXB0ZXIuCi0qCi0qIEF1dGhvcjoJR2lkZW9uIEhhY2sJPGdoYWNrQHNhbmdvbWEuY29tPgotKgotKiBDb3B5cmlnaHQ6CShjKSAxOTk5LTIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiBKdW4gMDIsIDE5OTkJR2lkZW9uIEhhY2sJSW5pdGlhbCB2ZXJzaW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9TRExBUENJX0gKLSNkZWZpbmUJX1NETEFQQ0lfSAotCi0vKioqKioqIERlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIGlkZW50aWZ5aW5nIGFuZCBmaW5kaW5nIFM1MTQgUENJIGFkYXB0ZXJzICovCi0jZGVmaW5lIFYzX1ZFTkRPUl9JRAkJMHgxMUIwCQkvKiBWMyB2ZW5kb3IgSUQgbnVtYmVyICovCi0jZGVmaW5lIFYzX0RFVklDRV9JRCAgCQkweDAwMDIJCS8qIFYzIGRldmljZSBJRCBudW1iZXIgKi8KLSNkZWZpbmUgU0FOR09NQV9TVUJTWVNfVkVORE9SIAkweDQ3NTMJCS8qIElEIGZvciBTYW5nb21hICovCi0jZGVmaW5lIFBDSV9ERVZfU0xPVF9NQVNLCTB4MUYJCS8qIG1hc2sgZm9yIHNsb3QgbnVtYmVyaW5nICovCi0jZGVmaW5lIFBDSV9JUlFfTk9UX0FMTE9DQVRFRAkweEZGCQkvKiBpbnRlcnJ1cHQgbGluZSBmb3Igbm8gSVJRICovCi0KLS8qIExvY2FsIFBDSSByZWdpc3RlciBvZmZzZXRzICovIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1dPUkQJMHgwMAkJLyogdmVuZG9yIElEICovCi0jZGVmaW5lIFBDSV9JT19CQVNFX0RXT1JECTB4MTAJCS8qIElPIGJhc2UgKi8JCi0jZGVmaW5lIFBDSV9NRU1fQkFTRTBfRFdPUkQJMHgxNAkJLyogbWVtb3J5IGJhc2UgLSBhcHBlcnR1cmUgMCAqLwotI2RlZmluZSBQQ0lfTUVNX0JBU0UxX0RXT1JEICAgICAweDE4CQkvKiBtZW1vcnkgYmFzZSAtIGFwcGVydHVyZSAxICovCi0jZGVmaW5lIFBDSV9TVUJTWVNfVkVORE9SX1dPUkQgCTB4MkMJCS8qIHN1YnN5c3RlbSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgUENJX0lOVF9MSU5FX0JZVEUJMHgzQwkJLyogaW50ZXJydXB0IGxpbmUgKi8KLSNkZWZpbmUgUENJX0lOVF9QSU5fQllURQkweDNECQkvKiBpbnRlcnJ1cHQgcGluICovCi0jZGVmaW5lIFBDSV9NQVAwX0RXT1JECQkweDQwCQkvKiBQQ0kgdG8gbG9jYWwgYnVzIGFkZHJlc3MgMCAqLwotI2RlZmluZSBQQ0lfTUFQMV9EV09SRCAgICAgICAgICAweDQ0CQkvKiBQQ0kgdG8gbG9jYWwgYnVzIGFkZHJlc3MgMSAqLwotI2RlZmluZSBQQ0lfSU5UX1NUQVRVUyAgICAgICAgICAweDQ4CQkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lIFBDSV9JTlRfQ09ORklHCQkweDRDCQkvKiBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAqLwotICAKLS8qIExvY2FsIFBDSSByZWdpc3RlciB1c2FnZSAqLwotI2RlZmluZSBQQ0lfTUVNT1JZX0VOQUJMRQkweDAwMDAwMDAzCS8qIGVuYWJsZSBQQ0kgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9DUFVfQV9NRU1fRElTQUJMRQkweDAwMDAwMDAyCS8qIGRpc2FibGUgQ1BVIEEgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9DUFVfQl9NRU1fRElTQUJMRSAgCTB4MDAxMDAwMDIJLyogZGlzYWJsZSBDUFUgQiBtZW1vcnkgKi8KLSNkZWZpbmUgUENJX0VOQUJMRV9JUlFfQ1BVX0EJMHgwMDVBMDAwNAkvKiBlbmFibGUgSVJRIGZvciBDUFUgQSAqLwotI2RlZmluZSBQQ0lfRU5BQkxFX0lSUV9DUFVfQiAgICAweDAwNUEwMDA4CS8qIGVuYWJsZSBJUlEgZm9yIENQVSBCICovCi0jZGVmaW5lIFBDSV9ESVNBQkxFX0lSUV9DUFVfQSAgIDB4MDAwMDAwMDQJLyogZGlzYWJsZSBJUlEgZm9yIENQVSBBICovCi0jZGVmaW5lIFBDSV9ESVNBQkxFX0lSUV9DUFVfQiAgIDB4MDAwMDAwMDgJLyogZGlzYWJsZSBJUlEgZm9yIENQVSBCICovCi0gCi0vKiBTZXR0aW5nIGZvciB0aGUgSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlciAqLyAgCi0jZGVmaW5lIElSUV9DUFVfQSAgICAgICAgICAgICAgIDB4MDQgICAgICAgICAgICAvKiBJUlEgZm9yIENQVSBBICovCi0jZGVmaW5lIElSUV9DUFVfQiAgICAgICAgICAgICAgIDB4MDgJCS8qIElSUSBmb3IgQ1BVIEIgKi8KLQotLyogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgUzUxNCBtZW1vcnkgKi8KLSNkZWZpbmUgTUFYX1NJWkVPRl9TNTE0X01FTU9SWQkoMjU2ICogMTAyNCkKLQotLyogUzUxNCBjb250cm9sIHJlZ2lzdGVyIG9mZnNldHMgd2l0aGluIHRoZSBtZW1vcnkgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBTNTE0X0NUUkxfUkVHX0JZVEUJMHg4MDAwMAotIAotLyogUzUxNCBhZGFwdGVyIGNvbnRyb2wgYnl0ZXMgKi8KLSNkZWZpbmUgUzUxNF9DUFVfSEFMVCAJCTB4MDAKLSNkZWZpbmUgUzUxNF9DUFVfU1RBUlQJCTB4MDEKLQotLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIFM1MTQgYWRhcHRlcnMgc3VwcG9ydGVkICovCi0jZGVmaW5lIE1BWF9TNTE0X0NBUkRTCQkyMAkKLQotI2RlZmluZSBQQ0lfQ0FSRF9UWVBFCQkweDJFCi0jZGVmaW5lIFM1MTRfRFVBTF9DUFUJCTB4MTIKLSNkZWZpbmUgUzUxNF9TSU5HTEVfQ1BVCQkweDExCi0KLSNlbmRpZgkvKiBfU0RMQVBDSV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2RsYXNmbS5oIGIvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWFhOGEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9zZGxhc2ZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHNkbGFzZm0uaAlXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBMaW5rIERyaXZlci4KLSoJCURlZmluaXRpb25zIGZvciB0aGUgU0RMQSBGaXJtd2FyZSBNb2R1bGUgKFNGTSkuCi0qCi0qIEF1dGhvcjogCUdpZGVvbiBIYWNrIAkKLSoKLSogQ29weXJpZ2h0OgkoYykgMTk5NS0xOTk5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KLSoKLSoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogSnVuIDAyLCAxOTk5ICBHaWRlb24gSGFjawlBZGRlZCBzdXBwb3J0IGZvciB0aGUgUzUxNCBhZGFwdGVyLgotKiBEZWMgMTEsIDE5OTYJR2VuZSBLb3ppbglDb3NtZXRpYyBjaGFuZ2VzCi0qIEFwciAxNiwgMTk5NglHZW5lIEtvemluCUNoYW5nZWQgYWRhcHRlciAmIGZpcm13YXJlIElEcy4gVmVyc2lvbiAyCi0qIERlYyAxNSwgMTk5NQlHZW5lIEtvemluCVN0cnVjdHVyZXMgY2hhbmVkCi0qIE5vdiAwOSwgMTk5NQlHZW5lIEtvemluCUluaXRpYWwgdmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZglfU0RMQVNGTV9ICi0jZGVmaW5lCV9TRExBU0ZNX0gKLQotLyoqKioqKiBEZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJU0ZNX1ZFUlNJT04JMgotI2RlZmluZQlTRk1fU0lHTkFUVVJFCSJTRk0gLSBTYW5nb21hIFNETEEgRmlybXdhcmUgTW9kdWxlIgotCi0vKiBtaW4vbWF4ICovCi0jZGVmaW5lCVNGTV9JTUFHRV9TSVpFCTB4ODAwMAkvKiBtYXggc2l6ZSBvZiBTRExBIGNvZGUgaW1hZ2UgZmlsZSAqLwotI2RlZmluZQlTRk1fREVTQ1JfTEVOCTI1NgkvKiBtYXggbGVuZ3RoIG9mIGRlc2NyaXB0aW9uIHN0cmluZyAqLwotI2RlZmluZQlTRk1fTUFYX1NETEEJMTYJLyogbWF4IG51bWJlciBvZiBjb21wYXRpYmxlIGFkYXB0ZXJzICovCi0KLS8qIEFkYXB0ZXIgdHlwZXMgKi8KLSNkZWZpbmUgU0RMQV9TNTAyQQk1MDIwCi0jZGVmaW5lIFNETEFfUzUwMkUJNTAyMQotI2RlZmluZSBTRExBX1M1MDMJNTAzMAotI2RlZmluZSBTRExBX1M1MDgJNTA4MAotI2RlZmluZSBTRExBX1M1MDcJNTA3MAotI2RlZmluZSBTRExBX1M1MDkJNTA5MAotI2RlZmluZSBTRExBX1M1MTQJNTE0MAotCi0vKiBTNTE0IFBDSSBhZGFwdGVyIENQVSBudW1iZXJzICovCi0jZGVmaW5lIFM1MTRfQ1BVX0EJJ0EnCi0jZGVmaW5lIFM1MTRfQ1BVX0IJJ0InCi0KLQotLyogRmlybXdhcmUgaWRlbnRpZmljYXRpb24gbnVtYmVyczoKLSAqICAgIDAgIC4uICA5OTkJVGVzdCAmIERpYWdub3N0aWNzCi0gKiAgMTAwMCAuLiAxOTk5CVN0cmVhbWluZyBIRExDCi0gKiAgMjAwMCAuLiAyOTk5CUJpc3luYwotICogIDMwMDAgLi4gMzk5OQlTRExDCi0gKiAgNDAwMCAuLiA0OTk5CUhETEMKLSAqICA1MDAwIC4uIDU5OTkJWC4yNQotICogIDYwMDAgLi4gNjk5OQlGcmFtZSBSZWxheQotICogIDcwMDAgLi4gNzk5OQlQUFAKLSAqICA4MDAwIC4uIDg5OTkgICAgICAgIENpc2NvIEhETEMKLSAqLwotI2RlZmluZQlTRklEX0NBTElCNTAyCSAyMDAKLSNkZWZpbmUJU0ZJRF9TVFJNNTAyCTEyMDAKLSNkZWZpbmUJU0ZJRF9TVFJNNTA4CTE4MDAKLSNkZWZpbmUJU0ZJRF9CU0M1MDIJMjIwMAotI2RlZmluZQlTRklEX1NETEM1MDIJMzIwMAotI2RlZmluZQlTRklEX0hETEM1MDIJNDIwMAotI2RlZmluZQlTRklEX0hETEM1MDgJNDgwMAotI2RlZmluZQlTRklEX1gyNV81MDIJNTIwMAotI2RlZmluZQlTRklEX1gyNV81MDgJNTgwMAotI2RlZmluZQlTRklEX0ZSNTAyCTYyMDAKLSNkZWZpbmUJU0ZJRF9GUjUwOAk2ODAwCi0jZGVmaW5lCVNGSURfUFBQNTAyCTcyMDAKLSNkZWZpbmUJU0ZJRF9QUFA1MDgJNzgwMAotI2RlZmluZSBTRklEX1BQUDUxNAk3MTQwCi0jZGVmaW5lCVNGSURfQ0hETEM1MDgJODgwMAotI2RlZmluZSBTRklEX0NIRExDNTE0CTgxNDAKLQotLyoqKioqKiBEYXRhIFR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgc3RydWN0CXNmbV9pbmZvCQkvKiBmaXJtd2FyZSBtb2R1bGUgaW5mb3JtYXRpb24gKi8KLXsKLQl1bnNpZ25lZCBzaG9ydAljb2RlaWQ7CQkvKiBmaXJtd2FyZSBJRCAqLwotCXVuc2lnbmVkIHNob3J0CXZlcnNpb247CS8qIGZpcm1hd2FyZSB2ZXJzaW9uIG51bWJlciAqLwotCXVuc2lnbmVkIHNob3J0CWFkYXB0ZXJbU0ZNX01BWF9TRExBXTsgLyogY29tcGF0aWJsZSBhZGFwdGVyIHR5cGVzICovCi0JdW5zaWduZWQgbG9uZwltZW1zaXplOwkvKiBtaW5pbXVtIG1lbW9yeSBzaXplICovCi0JdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWRbMl07CS8qIHJlc2VydmVkICovCi0JdW5zaWduZWQgc2hvcnQJc3RhcnRvZmZzOwkvKiBlbnRyeSBwb2ludCBvZmZzZXQgKi8KLQl1bnNpZ25lZCBzaG9ydAl3aW5vZmZzOwkvKiBkdWFsLXBvcnQgbWVtb3J5IHdpbmRvdyBvZmZzZXQgKi8KLQl1bnNpZ25lZCBzaG9ydAljb2Rlb2ZmczsJLyogY29kZSBsb2FkIG9mZnNldCAqLwotCXVuc2lnbmVkIHNob3J0CWNvZGVzaXplOwkvKiBjb2RlIHNpemUgKi8KLQl1bnNpZ25lZCBzaG9ydAlkYXRhb2ZmczsJLyogY29uZmlndXJhdGlvbiBkYXRhIGxvYWQgb2Zmc2V0ICovCi0JdW5zaWduZWQgc2hvcnQJZGF0YXNpemU7CS8qIGNvbmZpZ3VyYXRpb24gZGF0YSBzaXplICovCi19IHNmbV9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNmbQkJCS8qIFNETEEgZmlybXdhcmUgZmlsZSBzdHJ1Y3RpcmUgKi8KLXsKLQljaGFyCQlzaWduYXR1cmVbODBdOwkvKiBTRk0gZmlsZSBzaWduYXR1cmUgKi8KLQl1bnNpZ25lZCBzaG9ydAl2ZXJzaW9uOwkvKiBmaWxlIGZvcm1hdCB2ZXJzaW9uICovCi0JdW5zaWduZWQgc2hvcnQJY2hlY2tzdW07CS8qIGluZm8gKyBpbWFnZSAqLwotCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkWzZdOwkvKiByZXNlcnZlZCAqLwotCWNoYXIJCWRlc2NyW1NGTV9ERVNDUl9MRU5dOyAvKiBkZXNjcmlwdGlvbiBzdHJpbmcgKi8KLQlzZm1faW5mb190CWluZm87CQkvKiBmaXJtd2FyZSBtb2R1bGUgaW5mbyAqLwotCXVuc2lnbmVkIGNoYXIJaW1hZ2VbMV07CS8qIGNvZGUgaW1hZ2UgKHZhcmlhYmxlIHNpemUpICovCi19IHNmbV90OwotCi0jZW5kaWYJLyogX1NETEFTRk1fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggYWFhMGE1Yy4uMWJhYjQ4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtODY5LDExICs4NjksNiBAQAogICoJQGlwY3AgY29udGFpbnMgdGhlIGtlcm5lbCBJUEMgcGVybWlzc2lvbiBzdHJ1Y3R1cmUKICAqCUBmbGFnIGNvbnRhaW5zIHRoZSBkZXNpcmVkIChyZXF1ZXN0ZWQpIHBlcm1pc3Npb24gc2V0CiAgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCi0gKiBAaXBjX2dldHNlY3VyaXR5OgotICogICAgICBDb3B5IHRoZSBzZWN1cml0eSBsYWJlbCBhc3NvY2lhdGVkIHdpdGggdGhlIGlwYyBvYmplY3QgaW50bwotICogICAgICBAYnVmZmVyLiAgQGJ1ZmZlciBtYXkgYmUgTlVMTCB0byByZXF1ZXN0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgCi0gKiAgICAgIHJlcXVpcmVkLiAgQHNpemUgaW5kaWNhdGVzIHRoZSBzaXplIG9mIEBidWZmZXIgaW4gYnl0ZXMuIFJldHVybiAKLSAqICAgICAgbnVtYmVyIG9mIGJ5dGVzIHVzZWQvcmVxdWlyZWQgb24gc3VjY2Vzcy4KICAqCiAgKiBTZWN1cml0eSBob29rcyBmb3IgaW5kaXZpZHVhbCBtZXNzYWdlcyBoZWxkIGluIFN5c3RlbSBWIElQQyBtZXNzYWdlIHF1ZXVlcwogICogQG1zZ19tc2dfYWxsb2Nfc2VjdXJpdHk6CkBAIC0xMjIzLDcgKzEyMTgsNiBAQAogCXZvaWQgKCp0YXNrX3RvX2lub2RlKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAJaW50ICgqaXBjX3Blcm1pc3Npb24pIChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqIGlwY3AsIHNob3J0IGZsYWcpOwotCWludCAoKmlwY19nZXRzZWN1cml0eSkoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwogCiAJaW50ICgqbXNnX21zZ19hbGxvY19zZWN1cml0eSkgKHN0cnVjdCBtc2dfbXNnICogbXNnKTsKIAl2b2lkICgqbXNnX21zZ19mcmVlX3NlY3VyaXR5KSAoc3RydWN0IG1zZ19tc2cgKiBtc2cpOwpAQCAtMTg4NywxMSArMTg4MSw2IEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aXBjX3Blcm1pc3Npb24gKGlwY3AsIGZsYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pcGNfZ2V0c2VjdXJpdHkoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCi17Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aXBjX2dldHNlY3VyaXR5KGlwY3AsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21zZ19tc2dfYWxsb2MgKHN0cnVjdCBtc2dfbXNnICogbXNnKQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPm1zZ19tc2dfYWxsb2Nfc2VjdXJpdHkgKG1zZyk7CkBAIC0yNTMyLDExICsyNTIxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaXBjX2dldHNlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbXNnX21zZ19hbGxvYyAoc3RydWN0IG1zZ19tc2cgKiBtc2cpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXguaCBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDdiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbGludXguaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIFNFTGludXggc2VydmljZXMgZXhwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4KKyAqCisgKiBBdXRob3I6IEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJQk0gQ29ycG9yYXRpb24sIFRpbW90aHkgUi4gQ2hhdmV6IDx0aW55dGltQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0xJTlVYX1NFTElOVVhfSAorI2RlZmluZSBfTElOVVhfU0VMSU5VWF9ICisKK3N0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGU7CitzdHJ1Y3QgYXVkaXRfY29udGV4dDsKK3N0cnVjdCBpbm9kZTsKK3N0cnVjdCBrZXJuX2lwY19wZXJtOworCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCAtIGFsbG9jL2luaXQgYW4gc2VsaW51eCBhdWRpdCBydWxlIHN0cnVjdHVyZS4KKyAqCUBmaWVsZDogdGhlIGZpZWxkIHRoaXMgcnVsZSByZWZlcnMgdG8KKyAqCUBvcDogdGhlIG9wZXJhdGVyIHRoZSBydWxlIHVzZXMKKyAqCUBydWxlc3RyOiB0aGUgdGV4dCAidGFyZ2V0IiBvZiB0aGUgcnVsZQorICoJQHJ1bGU6IHBvaW50ZXIgdG8gdGhlIG5ldyBydWxlIHN0cnVjdHVyZSByZXR1cm5lZCB2aWEgdGhpcworICoKKyAqCVJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtZXJybm8gaWYgbm90LiAgT24gc3VjY2VzcywgdGhlIHJ1bGUgc3RydWN0dXJlCisgKgl3aWxsIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5LiAgVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhpcyBzdHJ1Y3R1cmUgd2l0aAorICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoKSBhZnRlciB1c2UuCisgKi8KK2ludCBzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICoqcnVsZSk7CisKKy8qKgorICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUgLSBmcmVlIGFuIHNlbGludXggYXVkaXQgcnVsZSBzdHJ1Y3R1cmUuCisgKglAcnVsZTogcG9pbnRlciB0byB0aGUgYXVkaXQgcnVsZSB0byBiZSBmcmVlZAorICoKKyAqCVRoaXMgd2lsbCBmcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBydWxlLgorICoJSWYgQHJ1bGUgaXMgTlVMTCwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKyAqLwordm9pZCBzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICpydWxlKTsKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2ggLSBkZXRlcm1pbmUgaWYgYSBjb250ZXh0IElEIG1hdGNoZXMgYSBydWxlLgorICoJQGN0eGlkOiB0aGUgY29udGV4dCBJRCB0byBjaGVjaworICoJQGZpZWxkOiB0aGUgZmllbGQgdGhpcyBydWxlIHJlZmVycyB0bworICoJQG9wOiB0aGUgb3BlcmF0ZXIgdGhlIHJ1bGUgdXNlcworICoJQHJ1bGU6IHBvaW50ZXIgdG8gdGhlIGF1ZGl0IHJ1bGUgdG8gY2hlY2sgYWdhaW5zdAorICoJQGFjdHg6IHRoZSBhdWRpdCBjb250ZXh0IChjYW4gYmUgTlVMTCkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGVjaworICoKKyAqCVJldHVybnMgMSBpZiB0aGUgY29udGV4dCBpZCBtYXRjaGVzIHRoZSBydWxlLCAwIGlmIGl0IGRvZXMgbm90LCBhbmQKKyAqCS1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHUzMiBjdHhpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKnJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KTsKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjayAtIHNldCB0aGUgY2FsbGJhY2sgZm9yIHBvbGljeSByZWxvYWRzLgorICoJQGNhbGxiYWNrOiB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBwb2xpY3kgaXMgcmVsb2FkZWQKKyAqCisgKglUaGlzIHNldHMgdGhlIGZ1bmN0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCB1cGRhdGUgdGhlIHJ1bGVzCisgKgl1cG9uIHBvbGljeSByZWxvYWRzLiAgVGhpcyBjYWxsYmFjayBzaG91bGQgcmVidWlsZCBhbGwgZXhpc3RpbmcgcnVsZXMKKyAqCXVzaW5nIHNlbGludXhfYXVkaXRfcnVsZV9pbml0KCkuCisgKi8KK3ZvaWQgc2VsaW51eF9hdWRpdF9zZXRfY2FsbGJhY2soaW50ICgqY2FsbGJhY2spKHZvaWQpKTsKKworLyoqCisgKglzZWxpbnV4X3Rhc2tfY3R4aWQgLSBkZXRlcm1pbmUgYSBjb250ZXh0IElEIGZvciBhIHByb2Nlc3MuCisgKglAdHNrOiB0aGUgdGFzayBvYmplY3QKKyAqCUBjdHhpZDogSUQgdmFsdWUgcmV0dXJuZWQgdmlhIHRoaXMKKyAqCisgKglPbiByZXR1cm4sIGN0eGlkIHdpbGwgY29udGFpbiBhbiBJRCBmb3IgdGhlIGNvbnRleHQuICBUaGlzIHZhbHVlCisgKglzaG91bGQgb25seSBiZSB1c2VkIG9wYXF1ZWx5LgorICovCit2b2lkIHNlbGludXhfdGFza19jdHhpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTMyICpjdHhpZCk7CisKKy8qKgorICogICAgIHNlbGludXhfY3R4aWRfdG9fc3RyaW5nIC0gbWFwIGEgc2VjdXJpdHkgY29udGV4dCBJRCB0byBhIHN0cmluZworICogICAgIEBjdHhpZDogc2VjdXJpdHkgY29udGV4dCBJRCB0byBiZSBjb252ZXJ0ZWQuCisgKiAgICAgQGN0eDogYWRkcmVzcyBvZiBjb250ZXh0IHN0cmluZyB0byBiZSByZXR1cm5lZAorICogICAgIEBjdHhsZW46IGxlbmd0aCBvZiByZXR1cm5lZCBjb250ZXh0IHN0cmluZy4KKyAqCisgKiAgICAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1lcnJubyBpZiBub3QuICBPbiBzdWNjZXNzLCB0aGUgY29udGV4dAorICogICAgIHN0cmluZyB3aWxsIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5LCBhbmQgdGhlIGNhbGxlciBtdXN0IGNhbGwKKyAqICAgICBrZnJlZSgpIG9uIGl0IGFmdGVyIHVzZS4KKyAqLworaW50IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKHUzMiBjdHhpZCwgY2hhciAqKmN0eCwgdTMyICpjdHhsZW4pOworCisvKioKKyAqICAgICBzZWxpbnV4X2dldF9pbm9kZV9zaWQgLSBnZXQgdGhlIGlub2RlJ3Mgc2VjdXJpdHkgY29udGV4dCBJRAorICogICAgIEBpbm9kZTogaW5vZGUgc3RydWN0dXJlIHRvIGdldCB0aGUgc2lkIGZyb20uCisgKiAgICAgQHNpZDogcG9pbnRlciB0byBzZWN1cml0eSBjb250ZXh0IElEIHRvIGJlIGZpbGxlZCBpbi4KKyAqCisgKiAgICAgUmV0dXJucyBub3RoaW5nCisgKi8KK3ZvaWQgc2VsaW51eF9nZXRfaW5vZGVfc2lkKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqc2lkKTsKKworLyoqCisgKiAgICAgc2VsaW51eF9nZXRfaXBjX3NpZCAtIGdldCB0aGUgaXBjIHNlY3VyaXR5IGNvbnRleHQgSUQKKyAqICAgICBAaXBjcDogaXBjIHN0cnVjdHVyZSB0byBnZXQgdGhlIHNpZCBmcm9tLgorICogICAgIEBzaWQ6IHBvaW50ZXIgdG8gc2VjdXJpdHkgY29udGV4dCBJRCB0byBiZSBmaWxsZWQgaW4uCisgKgorICogICAgIFJldHVybnMgbm90aGluZworICovCit2b2lkIHNlbGludXhfZ2V0X2lwY19zaWQoY29uc3Qgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHUzMiAqc2lkKTsKKworLyoqCisgKiAgICAgc2VsaW51eF9nZXRfdGFza19zaWQgLSByZXR1cm4gdGhlIFNJRCBvZiB0YXNrCisgKiAgICAgQHRzazogdGhlIHRhc2sgd2hvc2UgU0lEIHdpbGwgYmUgcmV0dXJuZWQKKyAqICAgICBAc2lkOiBwb2ludGVyIHRvIHNlY3VyaXR5IGNvbnRleHQgSUQgdG8gYmUgZmlsbGVkIGluLgorICoKKyAqICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqLwordm9pZCBzZWxpbnV4X2dldF90YXNrX3NpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTMyICpzaWQpOworCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfYXVkaXRfcnVsZV9pbml0KHUzMiBmaWVsZCwgdTMyIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcnVsZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKipydWxlKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICpydWxlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHUzMiBjdHhpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYWN0eCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfYXVkaXRfc2V0X2NhbGxiYWNrKGludCAoKmNhbGxiYWNrKSh2b2lkKSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X3Rhc2tfY3R4aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqY3R4aWQpCit7CisJKmN0eGlkID0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9jdHhpZF90b19zdHJpbmcodTMyIGN0eGlkLCBjaGFyICoqY3R4LCB1MzIgKmN0eGxlbikKK3sKKyAgICAgICAqY3R4ID0gTlVMTDsKKyAgICAgICAqY3R4bGVuID0gMDsKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfZ2V0X2lub2RlX3NpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNpZCkKK3sKKwkqc2lkID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfZ2V0X2lwY19zaWQoY29uc3Qgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHUzMiAqc2lkKQoreworCSpzaWQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKQoreworCSpzaWQgPSAwOworfQorCisjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVggKi8KKworI2VuZGlmIC8qIF9MSU5VWF9TRUxJTlVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZmNhOWIwZi4uNWEwOTU1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTczLDcgKzczLDcgQEAKIH0KIAogLyogU3RhcnQgb2YgcmVhZCBjYWxjdWxhdGlvbiAtLSBmZXRjaCBsYXN0IGNvbXBsZXRlIHdyaXRlciB0b2tlbiAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCByZWFkX3NlcWJlZ2luKGNvbnN0IHNlcWxvY2tfdCAqc2wpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIHJlYWRfc2VxYmVnaW4oY29uc3Qgc2VxbG9ja190ICpzbCkKIHsKIAl1bnNpZ25lZCByZXQgPSBzbC0+c2VxdWVuY2U7CiAJc21wX3JtYigpOwpAQCAtODgsNyArODgsNyBAQAogICogICAgCiAgKiBVc2luZyB4b3Igc2F2ZXMgb25lIGNvbmRpdGlvbmFsIGJyYW5jaC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcmVhZF9zZXFyZXRyeShjb25zdCBzZXFsb2NrX3QgKnNsLCB1bnNpZ25lZCBpdikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlYWRfc2VxcmV0cnkoY29uc3Qgc2VxbG9ja190ICpzbCwgdW5zaWduZWQgaXYpCiB7CiAJc21wX3JtYigpOwogCXJldHVybiAoaXYgJiAxKSB8IChzbC0+c2VxdWVuY2UgXiBpdik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggYzMyZTYwZS4uYmQxNDg1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMjU0LDYgKzI1NCw3IEBACiAjZGVmaW5lIFVQRl9DT05TX0ZMT1cJCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMjMpKQogI2RlZmluZSBVUEZfU0hBUkVfSVJRCQkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDI0KSkKICNkZWZpbmUgVVBGX0JPT1RfQVVUT0NPTkYJKChfX2ZvcmNlIHVwZl90KSAoMSA8PCAyOCkpCisjZGVmaW5lIFVQRl9ERUFECQkoKF9fZm9yY2UgdXBmX3QpICgxIDw8IDMwKSkKICNkZWZpbmUgVVBGX0lPUkVNQVAJCSgoX19mb3JjZSB1cGZfdCkgKDEgPDwgMzEpKQogCiAjZGVmaW5lIFVQRl9DSEFOR0VfTUFTSwkJKChfX2ZvcmNlIHVwZl90KSAoMHgxN2ZmZikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlvLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKaW5kZXggNjkwYWFiYy4uNjM0OGU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpby5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaW8uaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKQEAgLTQyLDcgKzQzLDcgQEAKIAlzdHJ1Y3Qgc2VyaW8gKnBhcmVudCwgKmNoaWxkOwogCiAJc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2OwkvKiBhY2Nlc3NlZCBmcm9tIGludGVycnVwdCwgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgc2VyaW8tPmxvY2sgYW5kIHNlcmlvLT5zZW0gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGRydl9zZW07CS8qIHByb3RlY3RzIHNlcmlvLT5kcnYgc28gYXR0cmlidXRlcyBjYW4gcGluIGRyaXZlciAqLworCXN0cnVjdCBtdXRleCBkcnZfbXV0ZXg7CQkvKiBwcm90ZWN0cyBzZXJpby0+ZHJ2IHNvIGF0dHJpYnV0ZXMgY2FuIHBpbiBkcml2ZXIgKi8KIAogCXN0cnVjdCBkZXZpY2UgZGV2OwogCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwkvKiBwb3J0IGhhcyBiZWVuIGZ1bGx5IHJlZ2lzdGVyZWQgd2l0aCBkcml2ZXIgY29yZSAqLwpAQCAtMTUxLDE3ICsxNTIsMTcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgc2VyaW9fcGluX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewotCXJldHVybiBkb3duX2ludGVycnVwdGlibGUoJnNlcmlvLT5kcnZfc2VtKTsKKwlyZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzZXJpby0+ZHJ2X211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNlcmlvX3Bpbl9kcml2ZXJfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7Ci0JZG93bigmc2VyaW8tPmRydl9zZW0pOworCW11dGV4X2xvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VyaW9fdW5waW5fZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8pCiB7Ci0JdXAoJnNlcmlvLT5kcnZfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcmlvLT5kcnZfbXV0ZXgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCmluZGV4IDE2MmE4ZmQuLjcwNzM5ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaApAQCAtMTQsMTAgKzE0LDEyIEBACiAgKgogICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgogICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKiBTQV9QUk9CRUlSUSBpcyBzZXQgYnkgY2FsbGVycyB3aGVuIHRoZXkgZXhwZWN0IHNoYXJpbmcgbWlzbWF0Y2hlcyB0byBvY2N1cgogICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCiAjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAogI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAorI2RlZmluZSBTQV9QUk9CRUlSUQkJMHgwODAwMDAwMAorCiAvKgogICogQXMgYWJvdmUsIHRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIElPUkVTT1VSQ0VfSVJRXyogZGVmaW5lcyBpbgogICogbGludXgvaW9wb3J0LmggdG8gc2VsZWN0IHRoZSBpbnRlcnJ1cHQgbGluZSBiZWhhdmlvdXIuICBXaGVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCBjNDYxOWE0Li5mOGYyMzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTM0NCw2ICszNDQsMTMgQEAKIAkJCQkgICAgIHZvaWQgKmhlcmUpOwogZXh0ZXJuIHZvaWQJICAgICAgc2tiX3VuZGVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCiAJCQkJICAgICAgdm9pZCAqaGVyZSk7CitleHRlcm4gdm9pZAkgICAgICBza2JfdHJ1ZXNpemVfYnVnKHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3RydWVzaXplX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHVubGlrZWx5KChpbnQpc2tiLT50cnVlc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikgKyBza2ItPmxlbikpCisJCXNrYl90cnVlc2l6ZV9idWcoc2tiKTsKK30KIAogZXh0ZXJuIGludCBza2JfYXBwZW5kX2RhdGF0b19mcmFncyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggM2FmMDNiMS4uMmQ5ODVkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogCiBleHRlcm4gdm9pZCBrZnJlZShjb25zdCB2b2lkICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBrc2l6ZShjb25zdCB2b2lkICopOworZXh0ZXJuIGludCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvYWRzNzg0Ni5oIGIvaW5jbHVkZS9saW51eC9zcGkvYWRzNzg0Ni5oCmluZGV4IDcyMjYxZTAuLmFkYjNkYWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9hZHM3ODQ2LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvYWRzNzg0Ni5oCkBAIC0xNCw1ICsxNCwxMiBAQAogCXUxNgl4X21pbiwgeF9tYXg7CiAJdTE2CXlfbWluLCB5X21heDsKIAl1MTYJcHJlc3N1cmVfbWluLCBwcmVzc3VyZV9tYXg7CisKKwl1MTYJZGVib3VuY2VfbWF4OwkJLyogbWF4IG51bWJlciBvZiBhZGRpdGlvbmFsIHJlYWRpbmdzCisJCQkJCSAqIHBlciBzYW1wbGUgKi8KKwl1MTYJZGVib3VuY2VfdG9sOwkJLyogdG9sZXJhbmNlIHVzZWQgZm9yIGZpbHRlcmluZyAqLworCXUxNglkZWJvdW5jZV9yZXA7CQkvKiBhZGRpdGlvbmFsIGNvbnNlY3V0aXZlIGdvb2QgcmVhZGluZ3MKKwkJCQkJICogcmVxdWlyZWQgYWZ0ZXIgdGhlIGZpcnN0IHR3byAqLworCWludAkoKmdldF9wZW5kb3duX3N0YXRlKSh2b2lkKTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKaW5kZXggYjA1ZjE0Ni4uZTkyOGMwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKQEAgLTMxLDE4ICszMSwyMyBAQAogICogQG1hc3RlcjogU1BJIGNvbnRyb2xsZXIgdXNlZCB3aXRoIHRoZSBkZXZpY2UuCiAgKiBAbWF4X3NwZWVkX2h6OiBNYXhpbXVtIGNsb2NrIHJhdGUgdG8gYmUgdXNlZCB3aXRoIHRoaXMgY2hpcAogICoJKG9uIHRoaXMgYm9hcmQpOyBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZGV2aWNlJ3MgZHJpdmVyLgorICoJVGhlIHNwaV90cmFuc2Zlci5zcGVlZF9oeiBjYW4gb3ZlcnJpZGUgdGhpcyBmb3IgZWFjaCB0cmFuc2Zlci4KICAqIEBjaGlwLXNlbGVjdDogQ2hpcHNlbGVjdCwgZGlzdGluZ3Vpc2hpbmcgY2hpcHMgaGFuZGxlZCBieSAibWFzdGVyIi4KICAqIEBtb2RlOiBUaGUgc3BpIG1vZGUgZGVmaW5lcyBob3cgZGF0YSBpcyBjbG9ja2VkIG91dCBhbmQgaW4uCiAgKglUaGlzIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIuCisgKglUaGUgImFjdGl2ZSBsb3ciIGRlZmF1bHQgZm9yIGNoaXBzZWxlY3QgbW9kZSBjYW4gYmUgb3ZlcnJpZGRlbiwKKyAqCWFzIGNhbiB0aGUgIk1TQiBmaXJzdCIgZGVmYXVsdCBmb3IgZWFjaCB3b3JkIGluIGEgdHJhbnNmZXIuCiAgKiBAYml0c19wZXJfd29yZDogRGF0YSB0cmFuc2ZlcnMgaW52b2x2ZSBvbmUgb3IgbW9yZSB3b3Jkczsgd29yZCBzaXplcwotICogCWxpa2UgZWlnaHQgb3IgMTIgYml0cyBhcmUgY29tbW9uLiAgSW4tbWVtb3J5IHdvcmRzaXplcyBhcmUKKyAqCWxpa2UgZWlnaHQgb3IgMTIgYml0cyBhcmUgY29tbW9uLiAgSW4tbWVtb3J5IHdvcmRzaXplcyBhcmUKICAqCXBvd2VycyBvZiB0d28gYnl0ZXMgKGUuZy4gMjAgYml0IHNhbXBsZXMgdXNlIDMyIGJpdHMpLgotICoJVGhpcyBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZGV2aWNlJ3MgZHJpdmVyLgorICoJVGhpcyBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZGV2aWNlJ3MgZHJpdmVyLCBvciBsZWZ0IGF0IHRoZQorICoJZGVmYXVsdCAoMCkgaW5kaWNhdGluZyBwcm90b2NvbCB3b3JkcyBhcmUgZWlnaHQgYml0IGJ5dGVzLgorICoJVGhlIHNwaV90cmFuc2Zlci5iaXRzX3Blcl93b3JkIGNhbiBvdmVycmlkZSB0aGlzIGZvciBlYWNoIHRyYW5zZmVyLgogICogQGlycTogTmVnYXRpdmUsIG9yIHRoZSBudW1iZXIgcGFzc2VkIHRvIHJlcXVlc3RfaXJxKCkgdG8gcmVjZWl2ZQotICogCWludGVycnVwdHMgZnJvbSB0aGlzIGRldmljZS4KKyAqCWludGVycnVwdHMgZnJvbSB0aGlzIGRldmljZS4KICAqIEBjb250cm9sbGVyX3N0YXRlOiBDb250cm9sbGVyJ3MgcnVudGltZSBzdGF0ZQogICogQGNvbnRyb2xsZXJfZGF0YTogQm9hcmQtc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIGNvbnRyb2xsZXIsIHN1Y2ggYXMKLSAqIAlGSUZPIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnM7IGZyb20gYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEKKyAqCUZJRk8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyczsgZnJvbSBib2FyZF9pbmZvLmNvbnRyb2xsZXJfZGF0YQogICoKICAqIEFuIHNwaV9kZXZpY2UgaXMgdXNlZCB0byBpbnRlcmNoYW5nZSBkYXRhIGJldHdlZW4gYW4gU1BJIHNsYXZlCiAgKiAodXN1YWxseSBhIGRpc2NyZXRlIGNoaXApIGFuZCBDUFUgbWVtb3J5LgpAQCAtNjUsNiArNzAsNyBAQAogI2RlZmluZQlTUElfTU9ERV8yCShTUElfQ1BPTHwwKQogI2RlZmluZQlTUElfTU9ERV8zCShTUElfQ1BPTHxTUElfQ1BIQSkKICNkZWZpbmUJU1BJX0NTX0hJR0gJMHgwNAkJCS8qIGNoaXBzZWxlY3QgYWN0aXZlIGhpZ2g/ICovCisjZGVmaW5lCVNQSV9MU0JfRklSU1QJMHgwOAkJCS8qIHBlci13b3JkIGJpdHMtb24td2lyZSAqLwogCXU4CQkJYml0c19wZXJfd29yZDsKIAlpbnQJCQlpcnE7CiAJdm9pZAkJCSpjb250cm9sbGVyX3N0YXRlOwpAQCAtNzMsNyArNzksNiBAQAogCiAJLy8gbGlrZWx5IG5lZWQgbW9yZSBob29rcyBmb3IgbW9yZSBwcm90b2NvbCBvcHRpb25zIGFmZmVjdGluZyBob3cKIAkvLyB0aGUgY29udHJvbGxlciB0YWxrcyB0byBlYWNoIGNoaXAsIGxpa2U6Ci0JLy8gIC0gYml0IG9yZGVyIChkZWZhdWx0IGlzIHdvcmR3aXNlIG1zYi1maXJzdCkKIAkvLyAgLSBtZW1vcnkgcGFja2luZyAoMTIgYml0IHNhbXBsZXMgaW50byBsb3cgYml0cywgb3RoZXJzIHplcm9lZCkKIAkvLyAgLSBwcmlvcml0eQogCS8vICAtIGRyb3AgY2hpcHNlbGVjdCBhZnRlciBlYWNoIHdvcmQKQEAgLTE0MywxMyArMTQ4LDEzIEBACiAgKiBzdHJ1Y3Qgc3BpX21hc3RlciAtIGludGVyZmFjZSB0byBTUEkgbWFzdGVyIGNvbnRyb2xsZXIKICAqIEBjZGV2OiBjbGFzcyBpbnRlcmZhY2UgdG8gdGhpcyBkcml2ZXIKICAqIEBidXNfbnVtOiBib2FyZC1zcGVjaWZpYyAoYW5kIG9mdGVuIFNPQy1zcGVjaWZpYykgaWRlbnRpZmllciBmb3IgYQotICogCWdpdmVuIFNQSSBjb250cm9sbGVyLgorICoJZ2l2ZW4gU1BJIGNvbnRyb2xsZXIuCiAgKiBAbnVtX2NoaXBzZWxlY3Q6IGNoaXBzZWxlY3RzIGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGluZGl2aWR1YWwKLSAqIAlTUEkgc2xhdmVzLCBhbmQgYXJlIG51bWJlcmVkIGZyb20gemVybyB0byBudW1fY2hpcHNlbGVjdHMuCi0gKiAJZWFjaCBzbGF2ZSBoYXMgYSBjaGlwc2VsZWN0IHNpZ25hbCwgYnV0IGl0J3MgY29tbW9uIHRoYXQgbm90Ci0gKiAJZXZlcnkgY2hpcHNlbGVjdCBpcyBjb25uZWN0ZWQgdG8gYSBzbGF2ZS4KKyAqCVNQSSBzbGF2ZXMsIGFuZCBhcmUgbnVtYmVyZWQgZnJvbSB6ZXJvIHRvIG51bV9jaGlwc2VsZWN0cy4KKyAqCWVhY2ggc2xhdmUgaGFzIGEgY2hpcHNlbGVjdCBzaWduYWwsIGJ1dCBpdCdzIGNvbW1vbiB0aGF0IG5vdAorICoJZXZlcnkgY2hpcHNlbGVjdCBpcyBjb25uZWN0ZWQgdG8gYSBzbGF2ZS4KICAqIEBzZXR1cDogdXBkYXRlcyB0aGUgZGV2aWNlIG1vZGUgYW5kIGNsb2NraW5nIHJlY29yZHMgdXNlZCBieSBhCi0gKiAJZGV2aWNlJ3MgU1BJIGNvbnRyb2xsZXI7IHByb3RvY29sIGNvZGUgbWF5IGNhbGwgdGhpcy4KKyAqCWRldmljZSdzIFNQSSBjb250cm9sbGVyOyBwcm90b2NvbCBjb2RlIG1heSBjYWxsIHRoaXMuCiAgKiBAdHJhbnNmZXI6IGFkZHMgYSBtZXNzYWdlIHRvIHRoZSBjb250cm9sbGVyJ3MgdHJhbnNmZXIgcXVldWUuCiAgKiBAY2xlYW51cDogZnJlZXMgY29udHJvbGxlci1zcGVjaWZpYyBzdGF0ZQogICoKQEAgLTE2NywxMyArMTcyLDEzIEBACiBzdHJ1Y3Qgc3BpX21hc3RlciB7CiAJc3RydWN0IGNsYXNzX2RldmljZQljZGV2OwogCi0JLyogb3RoZXIgdGhhbiB6ZXJvICg9PSBhc3NpZ24gb25lIGR5bmFtaWNhbGx5KSwgYnVzX251bSBpcyBmdWxseQorCS8qIG90aGVyIHRoYW4gbmVnYXRpdmUgKD09IGFzc2lnbiBvbmUgZHluYW1pY2FsbHkpLCBidXNfbnVtIGlzIGZ1bGx5CiAJICogYm9hcmQtc3BlY2lmaWMuICB1c3VhbGx5IHRoYXQgc2ltcGxpZmllcyB0byBiZWluZyBTT0Mtc3BlY2lmaWMuCi0JICogZXhhbXBsZTogIG9uZSBTT0MgaGFzIHRocmVlIFNQSSBjb250cm9sbGVycywgbnVtYmVyZWQgMS4uMywKKwkgKiBleGFtcGxlOiAgb25lIFNPQyBoYXMgdGhyZWUgU1BJIGNvbnRyb2xsZXJzLCBudW1iZXJlZCAwLi4yLAogCSAqIGFuZCBvbmUgYm9hcmQncyBzY2hlbWF0aWNzIG1pZ2h0IHNob3cgaXQgdXNpbmcgU1BJLTIuICBzb2Z0d2FyZQogCSAqIHdvdWxkIG5vcm1hbGx5IHVzZSBidXNfbnVtPTIgZm9yIHRoYXQgY29udHJvbGxlci4KIAkgKi8KLQl1MTYJCQlidXNfbnVtOworCXMxNgkJCWJ1c19udW07CiAKIAkvKiBjaGlwc2VsZWN0cyB3aWxsIGJlIGludGVncmFsIHRvIG1hbnkgY29udHJvbGxlcnM7IHNvbWUgb3RoZXJzCiAJICogbWlnaHQgdXNlIGJvYXJkLXNwZWNpZmljIEdQSU9zLgpAQCAtMjY4LDEwICsyNzMsMTQgQEAKICAqIEB0eF9kbWE6IERNQSBhZGRyZXNzIG9mIHR4X2J1ZiwgaWYgc3BpX21lc3NhZ2UuaXNfZG1hX21hcHBlZAogICogQHJ4X2RtYTogRE1BIGFkZHJlc3Mgb2YgcnhfYnVmLCBpZiBzcGlfbWVzc2FnZS5pc19kbWFfbWFwcGVkCiAgKiBAbGVuOiBzaXplIG9mIHJ4IGFuZCB0eCBidWZmZXJzIChpbiBieXRlcykKKyAqIEBzcGVlZF9oejogU2VsZWN0IGEgc3BlZWQgb3RoZXIgdGhlbiB0aGUgZGV2aWNlIGRlZmF1bHQgZm9yIHRoaXMKKyAqICAgICAgdHJhbnNmZXIuIElmIDAgdGhlIGRlZmF1bHQgKGZyb20gc3BpX2RldmljZSkgaXMgdXNlZC4KKyAqIEBiaXRzX3Blcl93b3JkOiBzZWxlY3QgYSBiaXRzX3Blcl93b3JkIG90aGVyIHRoZW4gdGhlIGRldmljZSBkZWZhdWx0CisgKiAgICAgIGZvciB0aGlzIHRyYW5zZmVyLiBJZiAwIHRoZSBkZWZhdWx0IChmcm9tIHNwaV9kZXZpY2UpIGlzIHVzZWQuCiAgKiBAY3NfY2hhbmdlOiBhZmZlY3RzIGNoaXBzZWxlY3QgYWZ0ZXIgdGhpcyB0cmFuc2ZlciBjb21wbGV0ZXMKICAqIEBkZWxheV91c2VjczogbWljcm9zZWNvbmRzIHRvIGRlbGF5IGFmdGVyIHRoaXMgdHJhbnNmZXIgYmVmb3JlCi0gKiAJKG9wdGlvbmFsbHkpIGNoYW5naW5nIHRoZSBjaGlwc2VsZWN0IHN0YXR1cywgdGhlbiBzdGFydGluZwotICogCXRoZSBuZXh0IHRyYW5zZmVyIG9yIGNvbXBsZXRpbmcgdGhpcyBzcGlfbWVzc2FnZS4KKyAqCShvcHRpb25hbGx5KSBjaGFuZ2luZyB0aGUgY2hpcHNlbGVjdCBzdGF0dXMsIHRoZW4gc3RhcnRpbmcKKyAqCXRoZSBuZXh0IHRyYW5zZmVyIG9yIGNvbXBsZXRpbmcgdGhpcyBzcGlfbWVzc2FnZS4KICAqIEB0cmFuc2Zlcl9saXN0OiB0cmFuc2ZlcnMgYXJlIHNlcXVlbmNlZCB0aHJvdWdoIHNwaV9tZXNzYWdlLnRyYW5zZmVycwogICoKICAqIFNQSSB0cmFuc2ZlcnMgYWx3YXlzIHdyaXRlIHRoZSBzYW1lIG51bWJlciBvZiBieXRlcyBhcyB0aGV5IHJlYWQuCkBAIC0zMjIsNyArMzMxLDkgQEAKIAlkbWFfYWRkcl90CXJ4X2RtYTsKIAogCXVuc2lnbmVkCWNzX2NoYW5nZToxOworCXU4CQliaXRzX3Blcl93b3JkOwogCXUxNgkJZGVsYXlfdXNlY3M7CisJdTMyCQlzcGVlZF9oejsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdHJhbnNmZXJfbGlzdDsKIH07CkBAIC0zNTYsNyArMzY3LDcgQEAKICAqIGFuZCBpdHMgdHJhbnNmZXJzLCBpZ25vcmUgdGhlbSB1bnRpbCBpdHMgY29tcGxldGlvbiBjYWxsYmFjay4KICAqLwogc3RydWN0IHNwaV9tZXNzYWdlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIAl0cmFuc2ZlcnM7CisJc3RydWN0IGxpc3RfaGVhZAl0cmFuc2ZlcnM7CiAKIAlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOwogCkBAIC0zNzQsNyArMzg1LDcgQEAKIAkgKi8KIAogCS8qIGNvbXBsZXRpb24gaXMgcmVwb3J0ZWQgdGhyb3VnaCBhIGNhbGxiYWNrICovCi0Jdm9pZCAJCQkoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0KTsKKwl2b2lkCQkJKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCk7CiAJdm9pZAkJCSpjb250ZXh0OwogCXVuc2lnbmVkCQlhY3R1YWxfbGVuZ3RoOwogCWludAkJCXN0YXR1czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaV9iaXRiYW5nLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfYml0YmFuZy5oCmluZGV4IGM5NjFmZTkuLjE2Y2UxNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3NwaV9iaXRiYW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpX2JpdGJhbmcuaApAQCAtMzAsNiArMzAsMTIgQEAKIAogCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXI7CiAKKwkvKiBzZXR1cF90cmFuc2ZlcigpIGNoYW5nZXMgY2xvY2sgYW5kL29yIHdvcmRzaXplIHRvIG1hdGNoIHNldHRpbmdzCisJICogZm9yIHRoaXMgdHJhbnNmZXI7IHplcm9lcyByZXN0b3JlIGRlZmF1bHRzIGZyb20gc3BpX2RldmljZS4KKwkgKi8KKwlpbnQJKCpzZXR1cF90cmFuc2Zlcikoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpOworCiAJdm9pZAkoKmNoaXBzZWxlY3QpKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBpc19vbik7CiAjZGVmaW5lCUJJVEJBTkdfQ1NfQUNUSVZFCTEJLyogbm9ybWFsbHkgbkNTLCBhY3RpdmUgbG93ICovCiAjZGVmaW5lCUJJVEJBTkdfQ1NfSU5BQ1RJVkUJMApAQCAtNTEsNiArNTcsOCBAQAogZXh0ZXJuIGludCBzcGlfYml0YmFuZ19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKIGV4dGVybiB2b2lkIHNwaV9iaXRiYW5nX2NsZWFudXAoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSk7CiBleHRlcm4gaW50IHNwaV9iaXRiYW5nX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSk7CitleHRlcm4gaW50IHNwaV9iaXRiYW5nX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJICAgICAgc3RydWN0IHNwaV90cmFuc2ZlciAqdCk7CiAKIC8qIHN0YXJ0IG9yIHN0b3AgcXVldWUgcHJvY2Vzc2luZyAqLwogZXh0ZXJuIGludCBzcGlfYml0YmFuZ19zdGFydChzdHJ1Y3Qgc3BpX2JpdGJhbmcgKnNwaSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCBkZWUyMjE0Li5jNjEzMDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTEzLDExICsxMyw2IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi1leHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLWV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKLQogZXh0ZXJuIGNoYXIgKnN0cm5kdXBfdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nKTsKIAogLyoKQEAgLTcwLDYgKzY1LDE4IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUk5MRU4KIGV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICosX19rZXJuZWxfc2l6ZV90KTsKICNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJQQlJLCitleHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU0VQCitleHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1BOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDU1BOCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CisjZW5kaWYKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1TRVQKIGV4dGVybiB2b2lkICogbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAppbmRleCA4Zjk2ZTlkLi43N2Y3OGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCkBAIC02OSw5ICs2OSwyMSBAQAogLyoKICAqIEVYUE9SVGVkIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgcnBjX2lvc3RhdHMgc3RydWN0dXJlcwogICovCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCiBzdHJ1Y3QgcnBjX2lvc3RhdHMgKglycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQkJcnBjX2NvdW50X2lvc3RhdHMoc3RydWN0IHJwY190YXNrICopOwogdm9pZAkJCXJwY19wcmludF9pb3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQkJcnBjX2ZyZWVfaW9zdGF0cyhzdHJ1Y3QgcnBjX2lvc3RhdHMgKik7CiAKKyNlbHNlICAvKiAgQ09ORklHX1BST0NfRlMgICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJwY19pb3N0YXRzICpycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpIHsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBycGNfY291bnRfaW9zdGF0cyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcnBjX3ByaW50X2lvc3RhdHMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBycGNfY2xudCAqY2xudCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBycGNfZnJlZV9pb3N0YXRzKHN0cnVjdCBycGNfaW9zdGF0cyAqc3RhdHMpIHt9CisKKyNlbmRpZiAgLyogIENPTkZJR19QUk9DX0ZTICAqLworCiAjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19NRVRSSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKaW5kZXggNTBjYWIyYS4uNTAzNTY0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTE5NywxNSArMTk3LDE2IEBACiAJcmV0dXJuIHJxc3RwLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZCsrXTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3ZjX3Rha2VfcGFnZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQorc3RhdGljIGlubGluZSB2b2lkIHN2Y190YWtlX3BhZ2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocnFzdHAtPnJxX2FyZ2hpIDw9IHJxc3RwLT5ycV9hcmd1c2VkKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAJcnFzdHAtPnJxX2FyZ2hpLS07CiAJcnFzdHAtPnJxX3Jlc3BhZ2VzW3Jxc3RwLT5ycV9yZXN1c2VkXSA9CiAJCXJxc3RwLT5ycV9hcmdwYWdlc1tycXN0cC0+cnFfYXJnaGldOwogCXJxc3RwLT5ycV9yZXN1c2VkKys7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfcHVzaGJhY2tfYWxscGFnZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCA3ZWViYmFiLi5lOGJiZTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC01Myw2ICs1Myw3IEBACiAKIHN0cnVjdCBycGNfdGFzazsKIHN0cnVjdCBycGNfeHBydDsKK3N0cnVjdCBzZXFfZmlsZTsKIAogLyoKICAqIFRoaXMgZGVzY3JpYmVzIGEgY29tcGxldGUgUlBDIHJlcXVlc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggNTRlYWM4YS4uZjAzYzI0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogLyogbGludXgvbW0vcGFnZV9hbGxvYy5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaF9wYWdlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIGV4dGVybiBsb25nIG5yX3N3YXBfcGFnZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZXModm9pZCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfcGFnZXNfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCk7CkBAIC0yOTUsNyArMjk2LDcgQEAKICNkZWZpbmUgcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN3cCx2bWEsYWRkcikJTlVMTAogI2RlZmluZSBsb29rdXBfc3dhcF9jYWNoZShzd3ApCQkJTlVMTAogI2RlZmluZSB2YWxpZF9zd2FwaGFuZGxlcyhzd3AsIG9mZikJCTAKLSNkZWZpbmUgY2FuX3NoYXJlX3N3YXBfcGFnZShwKQkJCTAKKyNkZWZpbmUgY2FuX3NoYXJlX3N3YXBfcGFnZShwKQkJCShwYWdlX21hcGNvdW50KHApID09IDEpCiAjZGVmaW5lIG1vdmVfdG9fc3dhcF9jYWNoZShwLCBzd3ApCQkxCiAjZGVmaW5lIG1vdmVfZnJvbV9zd2FwX2NhY2hlKHAsIGksIG0pCQkxCiAjZGVmaW5lIF9fZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwKQkJLypOT1RISU5HKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA1NzE3MTQ3Li42MGQ0OWU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01Miw2ICs1Miw3IEBACiBzdHJ1Y3QgbXFfYXR0cjsKIHN0cnVjdCBjb21wYXRfc3RhdDsKIHN0cnVjdCBjb21wYXRfdGltZXZhbDsKK3N0cnVjdCByb2J1c3RfbGlzdF9oZWFkOwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTU2OSw5ICs1NzAsMjIgQEAKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX29wZW5hdCh1bnNpZ25lZCBpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCiAJCQkJICAgaW50IGZsYWdzLCBpbnQgbW9kZSk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3Vuc2hhcmUodW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzKTsKLWFzbWxpbmthZ2UgbG9uZyBzeXNfc3BsaWNlKGludCBmZGluLCBpbnQgZmRvdXQsIHNpemVfdCBsZW4sCi0JCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKKworYXNtbGlua2FnZSBsb25nIHN5c19zcGxpY2UoaW50IGZkX2luLCBsb2ZmX3QgX191c2VyICpvZmZfaW4sCisJCQkgICBpbnQgZmRfb3V0LCBsb2ZmX3QgX191c2VyICpvZmZfb3V0LAorCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworYXNtbGlua2FnZSBsb25nIHN5c192bXNwbGljZShpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKmlvdiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCithc21saW5rYWdlIGxvbmcgc3lzX3RlZShpbnQgZmRpbiwgaW50IGZkb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBhc21saW5rYWdlIGxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZShpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBuYnl0ZXMsCi0JCQkJCWludCBmbGFncyk7CisJCQkJCXVuc2lnbmVkIGludCBmbGFncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX2dldF9yb2J1c3RfbGlzdChpbnQgcGlkLAorCQkJCSAgICBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKipoZWFkX3B0ciwKKwkJCQkgICAgc2l6ZV90IF9fdXNlciAqbGVuX3B0cik7Cithc21saW5rYWdlIGxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdChzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKmhlYWQsCisJCQkJICAgIHNpemVfdCBsZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzZnMuaAppbmRleCAzOTJkYTVhLi4xZWE1ZDNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCkBAIC03NCw2ICs3NCw3IEBACiAJdW1vZGVfdAkJCXNfbW9kZTsKIAlzdHJ1Y3QgZGVudHJ5CQkqIHNfZGVudHJ5OwogCXN0cnVjdCBpYXR0cgkJKiBzX2lhdHRyOworCWF0b21pY190CQlzX2V2ZW50OwogfTsKIAogI2RlZmluZSBTWVNGU19ST09UCQkweDAwMDEKQEAgLTExNyw2ICsxMTgsNyBAQAogCiBpbnQgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKik7CiB2b2lkIHN5c2ZzX3JlbW92ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICopOwordm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKiBrLCBjaGFyICpkaXIsIGNoYXIgKmF0dHIpOwogCiAjZWxzZSAvKiBDT05GSUdfU1lTRlMgKi8KIApAQCAtMTg1LDYgKzE4NywxMCBAQAogCTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqIGssIGNoYXIgKmRpciwgY2hhciAqYXR0cikKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLwogCiAjZW5kaWYgLyogX1NZU0ZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKaW5kZXggMDk3NmExNi4uMzE1NDgzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtNiw5ICs2LDEwIEBACiBleHRlcm4gaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywgc2l6ZV90IHNpemUpOwogZXh0ZXJuIGludCB0dHlfcHJlcGFyZV9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICoqY2hhcnMsIGNoYXIgKipmbGFncywgc2l6ZV90IHNpemUpOwordm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogc3RhdGljIGlubGluZSBpbnQgdHR5X2luc2VydF9mbGlwX2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCQkgICAgICAgdW5zaWduZWQgY2hhciBjaCwgY2hhciBmbGFnKQorCQkJCQl1bnNpZ25lZCBjaGFyIGNoLCBjaGFyIGZsYWcpCiB7CiAJc3RydWN0IHR0eV9idWZmZXIgKnRiID0gdHR5LT5idWYudGFpbDsKIAlpZiAodGIgJiYgdGItPmFjdGl2ZSAmJiB0Yi0+dXNlZCA8IHRiLT5zaXplKSB7CkBAIC0xOSwyNiArMjAsNCBAQAogCXJldHVybiB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHR0eSwgJmNoLCAmZmxhZywgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLnRhaWwtPmFjdGl2ZSA9IDA7Ci0JCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOwotfQotCi0jdW5kZWYgX0lOTElORV8KLQotCiAjZW5kaWYgLyogX0xJTlVYX1RUWV9GTElQX0ggKi8KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW5wdXQuaCBiL2luY2x1ZGUvbGludXgvdWlucHV0LmgKaW5kZXggMGZmN2NhNi4uNzE2ODMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VpbnB1dC5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICoKICAqIEF1dGhvcjogQXJpc3RldSBTZXJnaW8gUm96YW5za2kgRmlsaG8gPGFyaXNAY2F0aGVkcmFsbGFicy5vcmc+Ci0gKiAKKyAqCiAgKiBDaGFuZ2VzL1JldmlzaW9uczoKICAqCTAuMgkxNi8xMC8yMDA0IChNaWNhaCBEb3d0eSA8bWljYWhAbmF2aS5jeD4pCiAgKgkJLSBhZGRlZCBmb3JjZSBmZWVkYmFjayBzdXBwb3J0CkBAIC01MSw3ICs1MSw3IEBACiAKIHN0cnVjdCB1aW5wdXRfZGV2aWNlIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSpkZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZQlzZW07CisJc3RydWN0IG11dGV4CQltdXRleDsKIAllbnVtIHVpbnB1dF9zdGF0ZQlzdGF0ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0cTsKIAl1bnNpZ25lZCBjaGFyCQlyZWFkeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL25ldDIyODAuaCBiL2luY2x1ZGUvbGludXgvdXNiL25ldDIyODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAyZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvbmV0MjI4MC5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogTmV0Q2hpcCAyMjgwIGhpZ2gvZnVsbCBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXIuCisgKiBVbmxpa2UgbWFueSBzdWNoIGNvbnRyb2xsZXJzLCB0aGlzIG9uZSB0YWxrcyBQQ0kuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9VU0JfTkVUMjI4MF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX05FVDIyODBfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE5ldENoaXAgVGVjaG5vbG9neSwgSW5jLiAoaHR0cDovL3d3dy5uZXRjaGlwLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBORVQyMjgwIE1FTU9SWSBNQVBQRUQgUkVHSVNURVJTCisgKgorICogVGhlIHJlZ2lzdGVyIGxheW91dCBjYW1lIGZyb20gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoZSBiaXQKKyAqIG51bWJlciBkZWZpbml0aW9ucyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNoaXAgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBVc2UgdGhlIHNoaWZ0IG9wZXJhdG9yICgnPDwnKSB0byBidWlsZCBiaXQgbWFza3MsIHdpdGggcmVhZGwvd3JpdGVsCisgKiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyB0aHJvdWdoIFBDSS4KKyAqLworCisvKiBtYWluIHJlZ2lzdGVycywgQkFSMCArIDB4MDAwMCAqLworc3RydWN0IG5ldDIyODBfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDAwMAorCXUzMgkJZGV2aW5pdDsKKyNkZWZpbmUgICAgIExPQ0FMX0NMT0NLX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBGT1JDRV9QQ0lfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgUENJX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFBDSV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBGSUZPX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgQ0ZHX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBDSV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBVU0JfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgTTgwNTFfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVlY3RsOworI2RlZmluZSAgICAgRUVQUk9NX0FERFJFU1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIEVFUFJPTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgRUVQUk9NX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBFRVBST01fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIEVFUFJPTV9DSElQX1NFTEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfUkVBRF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBFRVBST01fQllURV9XUklURV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEVFUFJPTV9SRUFEX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBFRVBST01fV1JJVEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZWVjbGtmcmVxOworCXUzMgkJX3VudXNlZDA7CisJLy8gb2Zmc2V0IDB4MDAxMAorCisJdTMyCQlwY2lpcnFlbmIwOwkJLyogaW50ZXJydXB0IFBDSSBtYXN0ZXIgLi4uICovCisjZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXBjaWlycWVuYjE7CisjZGVmaW5lICAgICBQQ0lfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX0FTU0VSVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWNwdV9pcnFlbmIwOwkJLyogLi4uIG9yIG9uYm9hcmQgODA1MSAqLworI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQljcHVfaXJxZW5iMTsKKyNkZWZpbmUgICAgIENQVV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisJLy8gb2Zmc2V0IDB4MDAyMAorCXUzMgkJX3VudXNlZDE7CisJdTMyCQl1c2JpcnFlbmIxOworI2RlZmluZSAgICAgVVNCX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlpcnFzdGF0MDsKKyNkZWZpbmUgICAgIElOVEFfQVNTRVJURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlpcnFzdGF0MTsKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBTT0ZfRE9XTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAwMzAKKwl1MzIJCWlkeGFkZHI7CisJdTMyCQlpZHhkYXRhOworCXUzMgkJZmlmb2N0bDsKKyNkZWZpbmUgICAgIFBDSV9CQVNFMl9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgSUdOT1JFX0ZJRk9fQVZBSUxBQklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBDSV9CQVNFMl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBGSUZPX0NPTkZJR1VSQVRJT05fU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJX3VudXNlZDI7CisJLy8gb2Zmc2V0IDB4MDA0MAorCXUzMgkJbWVtYWRkcjsKKyNkZWZpbmUgICAgIFNUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSAgICAgRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBGSUZPX0RJQUdOT1NUSUNfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIE1FTU9SWV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQltZW1kYXRhMDsKKwl1MzIJCW1lbWRhdGExOworCXUzMgkJX3VudXNlZDM7CisJLy8gb2Zmc2V0IDB4MDA1MAorCXUzMgkJZ3Bpb2N0bDsKKyNkZWZpbmUgICAgIEdQSU8zX0xFRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgR1BJTzNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEdQSU8xX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBHUElPMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgR1BJTzNfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEdQSU8yX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBHUElPMV9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgR1BJTzBfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEdQSU8zX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHUElPMl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BJTzFfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdQSU8wX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlncGlvc3RhdDsKKyNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogdXNiIGNvbnRyb2wsIEJBUjAgKyAweDAwODAgKi8KK3N0cnVjdCBuZXQyMjgwX3VzYl9yZWdzIHsKKwkvLyBvZmZzZXQgMHgwMDgwCisJdTMyCQlzdGRyc3A7CisjZGVmaW5lICAgICBTVEFMTF9VTlNVUFBPUlRFRF9SRVFVRVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFNFVF9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR0VUX09USEVSX1NQRUVEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lICAgICBHRVRfREVWSUNFX1FVQUxJRklFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgICAgIFNFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRU5EUE9JTlRfU0VUX0NMRUFSX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBERVZJQ0VfU0VUX0NMRUFSX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBHRVRfU0VUX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR0VUX1NFVF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdFVF9DT05GSUdVUkFUSU9OX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBHRVRfREVWSUNFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR0VUX0VORFBPSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdFVF9JTlRFUkZBQ0VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHRVRfREVWSUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJcHJvZHZlbmRpZDsKKyNkZWZpbmUgICAgIFBST0RVQ1RfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXJlbG51bTsKKwl1MzIJCXVzYmN0bDsKKyNkZWZpbmUgICAgIFNFUklBTF9OVU1CRVJfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgUFJPRFVDVF9JRF9TVFJJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBWRU5ET1JfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFVTQl9ST09UX1BPUlRfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgVkJVU19QSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBUSU1FRF9ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgU1VTUEVORF9JTU1FRElBVEVMWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIFNFTEZfUE9XRVJFRF9VU0JfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBSRU1PVEVfV0FLRVVQX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgUE1FX1BPTEFSSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFVTQl9ERVRFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQTUVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREVWSUNFX1JFTU9URV9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNFTEZfUE9XRVJFRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDA5MAorCXUzMgkJdXNic3RhdDsKKyNkZWZpbmUgICAgIEhJR0hfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBGVUxMX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR0VORVJBVEVfUkVTVU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdFTkVSQVRFX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgICAgICAgICAgICAgICAgICAgICA0CisJdTMyCQl4Y3ZyZGlhZzsKKyNkZWZpbmUgICAgIEZPUkNFX0hJR0hfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgRk9SQ0VfRlVMTF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lICAgICBVU0JfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIExJTkVfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfT1BFUkFUSU9OX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBURVJNSU5BVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJc2V0dXAwMTIzOworCXUzMgkJc2V0dXA0NTY3OworCS8vIG9mZnNldCAweDAwOTAKKwl1MzIJCV91bnVzZWQwOworCXUzMgkJb3VyYWRkcjsKKyNkZWZpbmUgICAgIEZPUkNFX0lNTUVESUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBPVVJfVVNCX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJb3VyY29uZmlnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHBjaSBjb250cm9sLCBCQVIwICsgMHgwMTAwICovCitzdHJ1Y3QgbmV0MjI4MF9wY2lfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDEwMAorCXUzMgkJIHBjaW1zdGN0bDsKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1BBUktfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgUENJX01VTFRJIExFVkVMX0FSQklURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9NRU1PUllfV1JJVEVfQU5EX0lOVkFMSURBVEVfRU5BQkxFICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX1JFQURfTVVMVElQTEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIERNQV9SRUFEX0xJTkVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NPTU1BTkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgICAgIE1FTV9SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgSU9fUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgICAgICBDRkdfUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUENJX01BU1RFUl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfUkVBRF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICAgICAgUENJX01BU1RFUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9CWVRFX1dSSVRFX0VOQUJMRVMgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCSBwY2ltc3RhZGRyOworCXUzMgkJIHBjaW1zdGRhdGE7CisJdTMyCQkgcGNpbXN0c3RhdDsKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBQQ0lfRVhURVJOQUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgUENJX0hPU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBkbWEgY29udHJvbCwgQkFSMCArIDB4MDE4MCAuLi4gYXJyYXkgb2YgZm91ciBzdHJ1Y3RzIGxpa2UgdGhpcywKKyAqIGZvciBjaGFubmVscyAwLi4zLiAgc2VlIGFsc28gc3RydWN0IG5ldDIyODBfZG1hOiAgZGVzY3JpcHRvcgorICogdGhhdCBjYW4gYmUgbG9hZGVkIGludG8gc29tZSBvZiB0aGVzZSByZWdpc3RlcnMuCisgKi8KK3N0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIHsJLyogWzExLjddICovCisJLy8gb2Zmc2V0IDB4MDE4MCwgMHgwMWEwLCAweDAxYzAsIDB4MDFlMCwKKwl1MzIJCWRtYWN0bDsKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBERVNDUklQVE9SX1BPTExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgICAgICBQT0xMX0NPTlRJTlVPVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIFBPTExfMV9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICAgICAgUE9MTF8xMDBfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgICAgICBQT0xMXzFfTVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lICAgICBETUFfVkFMSURfQklUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRE1BX09VVF9BVVRPX1NUQVJUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIERNQV9QUkVFTVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBETUFfRklGT19WQUxJREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRE1BX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERNQV9BRERSRVNTX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlkbWFzdGF0OworI2RlZmluZSAgICAgRE1BX0FCT1JUX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgRE1BX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERNQV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlfdW51c2VkMCBbMl07CisJLy8gb2Zmc2V0IDB4MDE5MCwgMHgwMWIwLCAweDAxZDAsIDB4MDFmMCwKKwl1MzIJCWRtYWNvdW50OworI2RlZmluZSAgICAgVkFMSURfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBETUFfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgICAgIERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSAgICAgRU5EX09GX0NIQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lICAgICAgICAgRE1BX0JZVEVfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMTw8MjQpLTEpCisjZGVmaW5lICAgICBETUFfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZG1hYWRkcjsKKwl1MzIJCWRtYWRlc2M7CisJdTMyCQlfdW51c2VkMTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBkZWRpY2F0ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMjAwICovCisKK3N0cnVjdCBuZXQyMjgwX2RlcF9yZWdzIHsJLyogWzExLjhdICovCisJLy8gb2Zmc2V0IDB4MDIwMCwgMHgwMjEwLCAweDIyMCwgMHgyMzAsIDB4MjQwCisJdTMyCQlkZXBfY2ZnOworCS8vIG9mZnNldCAweDAyMDQsIDB4MDIxNCwgMHgyMjQsIDB4MjM0LCAweDI0NAorCXUzMgkJZGVwX3JzcDsKKwl1MzIJCV91bnVzZWQgWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGNvbmZpZ3VyYWJsZSBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAzMDAgLi4uIGFycmF5IG9mIHNldmVuIHN0cnVjdHMKKyAqIGxpa2UgdGhpcywgZm9yIGVwMCB0aGVuIHRoZSBjb25maWd1cmFibGUgZW5kcG9pbnRzIEEuLkYKKyAqIGVwMCByZXNlcnZlZCBmb3IgY29udHJvbDsgRSBhbmQgRiBoYXZlIG9ubHkgNjQgYnl0ZXMgb2YgZmlmbworICovCitzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzIHsJLyogWzExLjldICovCisJLy8gb2Zmc2V0IDB4MDMwMCwgMHgwMzIwLCAweDAzNDAsIDB4MDM2MCwgMHgwMzgwLCAweDAzYTAsIDB4MDNjMAorCXUzMgkJZXBfY2ZnOworI2RlZmluZSAgICAgRU5EUE9JTlRfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEVORFBPSU5UX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBFTkRQT0lOVF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVwX3JzcDsKKyNkZWZpbmUgICAgIFNFVF9OQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSAgICAgU0VUX0VQX0hJREVfU1RBVFVTX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lICAgICBTRVRfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIFNFVF9JTlRFUlJVUFRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgU0VUX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIFNFVF9FTkRQT0lOVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBDTEVBUl9FUF9GT1JDRV9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgQ0xFQVJfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9pcnFlbmI7CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9zdGF0OworI2RlZmluZSAgICAgRklGT19WQUxJRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBISUdIX0JBTkRXSURUSF9PVVRfVFJBTlNBQ1RJT05fUElEICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgVVNCX1NUQUxMX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBVU0JfSU5fTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFVTQl9JTl9BQ0tfUkNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgVVNCX09VVF9QSU5HX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBVU0JfT1VUX0FDS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEZJRk9fT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRklGT19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBGSUZPX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEZJRk9fRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRklGT19GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDMxMCwgMHgwMzMwLCAweDAzNTAsIDB4MDM3MCwgMHgwMzkwLCAweDAzYjAsIDB4MDNkMAorCXUzMgkJZXBfYXZhaWw7CisJdTMyCQllcF9kYXRhOworCXUzMgkJX3VudXNlZDAgWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9ORVQyMjgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaCBiL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaAppbmRleCBmYWRjNTM1Li5kYzdjNjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCkBAIC0xMiw2ICsxMiwxMSBAQAogI2Vsc2UKICNkZWZpbmUgTU9EVUxFX1ZFUk1BR0lDX1BSRUVNUFQgIiIKICNlbmRpZgorI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEICJtb2RfdW5sb2FkICIKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEICIiCisjZW5kaWYKICNpZm5kZWYgTU9EVUxFX0FSQ0hfVkVSTUFHSUMKICNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgIiIKICNlbmRpZgpAQCAtMTksNSArMjQsNSBAQAogI2RlZmluZSBWRVJNQUdJQ19TVFJJTkcgCQkJCQkJXAogCVVUU19SRUxFQVNFICIgIgkJCQkJCQlcCiAJTU9EVUxFX1ZFUk1BR0lDX1NNUCBNT0RVTEVfVkVSTUFHSUNfUFJFRU1QVCAJCQlcCi0JTU9EVUxFX0FSQ0hfVkVSTUFHSUMgCQkJCQkJXAorCU1PRFVMRV9WRVJNQUdJQ19NT0RVTEVfVU5MT0FEIE1PRFVMRV9BUkNIX1ZFUk1BR0lDIAkJXAogCSJnY2MtIiBfX3N0cmluZ2lmeShfX0dOVUNfXykgIi4iIF9fc3RyaW5naWZ5KF9fR05VQ19NSU5PUl9fKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggYWYyZDYxNS4uYWQ3ZmE5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC05NjYsNjYgKzk2NiwxNyBAQAogCiAvKiBUZWxldGV4dCBXb3JsZCBTeXN0ZW0gVGVsZXRleHQKICAgIChXU1QpLCBkZWZpbmVkIG9uIElUVS1SIEJULjY1My0yICovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CICAgICAgKDB4MDAwMDAxKQotI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyAgICAgICgweDAwMDAwMikKLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CICAgICAoMHgwMDAwMTApCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1NFQ0FNICAgICAgKDB4MDAwMDIwKQotCi0vKiBUZWxldGV4dCBOb3J0aCBBbWVyaWNhbiBCcm9hZGNhc3QgVGVsZXRleHQgU3BlY2lmaWNhdGlvbgotICAgKE5BQlRTKSwgZGVmaW5lZCBvbiBJVFUtUiBCVC42NTMtMiAqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0MgICAgICgweDAwMDA0MCkKLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19EICAgICAoMHgwMDAwODApCi0KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAgICAgICAgICAoMHgwMDAxKQogLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0sIGRlZmluZWQgb24gRVRTIDMwMCAyMzEqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDAwMDQwMCkKLQorI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDA0MDApCiAvKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MDAxMDAwKQotI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzYyNSAgICAgICAgICgweDAwMjAwMCkKLQorI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSAgICAgICAgICgweDEwMDApCiAvKiBXaWRlIFNjcmVlbiBTeXN0ZW0sIGRlZmluZWQgb24gSVRVLVIgQlQxMTE5LjEgKi8KLSNkZWZpbmUgVjRMMl9TTElDRURfV1NTXzYyNSAgICAgICAgICAgICAoMHgwMDQwMDApCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgICAgICAgICAgICAgKDB4NDAwMCkKIAotLyogV2lkZSBTY3JlZW4gU3lzdGVtLCBkZWZpbmVkIG9uIElFQyA2MTg4MCAqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNTI1ICAgICAgICAgICAgICgweDAwODAwMCkKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQogCi0vKiBWZXJ0aWNhbCBJbnRlcnZhbCBUaW1lY29kZSAoVklUQyksIGRlZmluZWQgb24gU01QVEUgMTJNICovCi0jZGVmaW5lIFY0bDJfU0xJQ0VEX1ZJVENfNjI1CQkoMHgwMTAwMDApCi0jZGVmaW5lIFY0bDJfU0xJQ0VEX1ZJVENfNTI1CQkoMHgwMjAwMDApCi0KLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQgkJKFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CICB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CKQotCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUCQkoVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IgIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1NFQ0FNICB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0MgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfRCkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OCQkoVjRMMl9TTElDRURfQ0FQVElPTl81MjUgICAgIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9DQVBUSU9OXzYyNSkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9XU1MJCQkoVjRMMl9TTElDRURfV1NTXzUyNSAgICAgICAgIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9XU1NfNjI1KQotCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZJVEMJCShWNEwyX1NMSUNFRF9WSVRDXzUyNSAgICAgICAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1ZJVENfNjI1KQotCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV81MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfQiB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19DIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0QgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICB8XAotCQkJCQkgVjRMMl9TTElDRURfV1NTXzUyNSAgICAgICAgIHxcCi0JCQkJCSBWNGwyX1NMSUNFRF9WSVRDXzUyNSkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNjI1ICAgICAgICAgICAgIChWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQiAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9DICB8XAotCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfU0VDQU0gIHxcCi0JCQkJCSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgfFwKLQkJCQkJIFY0TDJfU0xJQ0VEX0NBUFRJT05fNjI1ICAgICB8XAotCQkJCQkgVjRMMl9TTElDRURfV1NTXzYyNSAgICAgICAgIHxcCi0JCQkJCSBWNGwyX1NMSUNFRF9WSVRDXzYyNSkKIAogc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAKIHsKQEAgLTExOTAsOCArMTE0MSwxMyBAQAogLyogIENvbXBhdGliaWxpdHkgbGF5ZXIgaW50ZXJmYWNlICAtLSAgdjRsMS1jb21wYXQgbW9kdWxlICovCiB0eXBlZGVmIGludCAoKnY0bDJfa2lvY3RsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIGludCB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgICBpbnQgY21kLCB2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCk7CisjZWxzZQorI2RlZmluZSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsaW9jdGwpIC1FSU5WQUwKKyNlbmRpZgogCiAvKiAzMiBCaXRzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIDY0IGJpdHMgcHJvY2Vzc29ycyAqLwogZXh0ZXJuIGxvbmcgdjRsX2NvbXBhdF9pb2N0bDMyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAppbmRleCA1MzBhZTNmLi5mYWI1YWVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaApAQCAtNzMsMTEgKzczLDYgQEAKIGludCB2dF93YWl0YWN0aXZlKGludCB2dCk7CiB2b2lkIGNoYW5nZV9jb25zb2xlKHN0cnVjdCB2Y19kYXRhICpuZXdfdmMpOwogdm9pZCByZXNldF92YyhzdHJ1Y3QgdmNfZGF0YSAqdmMpOwotI2lmZGVmIENPTkZJR19WVAotaW50IGlzX2NvbnNvbGVfc3VzcGVuZF9zYWZlKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NvbnNvbGVfc3VzcGVuZF9zYWZlKHZvaWQpIHsgcmV0dXJuIDE7IH0KLSNlbmRpZgogCiAvKgogICogdmNfc2NyZWVuLmMgc2hhcmVzIHRoaXMgdGVtcG9yYXJ5IGJ1ZmZlciB3aXRoIHRoZSBjb25zb2xlIHdyaXRlIGNvZGUgc28gdGhhdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YW5waXBlLmggYi9pbmNsdWRlL2xpbnV4L3dhbnBpcGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlOTg2MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhbnBpcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogd2FucGlwZS5oCVdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIExpbmsgRHJpdmVyLgotKgkJVXNlci1sZXZlbCBBUEkgZGVmaW5pdGlvbnMuCi0qCi0qIEF1dGhvcjogCU5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KLSoJCUdpZGVvbiBIYWNrICAJCi0qCi0qIENvcHlyaWdodDoJKGMpIDE5OTUtMjAwMCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0qCi0qCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0qCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIE5vdiAzLCAgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIGNvbmZpZ19pZCB0byBzZGxhX3Qgc3RydWN0dXJlLgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGRldGVybWluZSB0aGUgcHJvdG9jb2wgcnVubmluZy4KLSogSnVsIDEzLCAyMDAwICBOZW5hZCBDb3JiaWMJQWRkZWQgU3luY1BQUCBTdXBwb3J0Ci0qIEZlYiAyNCwgMjAwMCAgTmVuYWQgQ29yYmljICAgIEFkZGVkIHN1cHBvcnQgZm9yIHgyNWFwaSBkcml2ZXIKLSogT2N0IDA0LCAxOTk5ICBOZW5hZCBDb3JiaWMgICAgTmV3IENIRExDIGFuZCBGUkFNRSBSRUxBWSBjb2RlLCBTTVAgc3VwcG9ydAotKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrCUFkZGVkICd1cGRhdGVfY2FsbF9jb3VudCcgZm9yIENpc2NvIEhETEMgCi0qCQkJCXN1cHBvcnQKLSogSnVuIDI2LCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgJ2lwX21vZGUnIGluIHNkbGFfdC51LnAgZm9yIGR5bmFtaWMgSVAKLSoJCQkJcm91dGluZyBtb2RlIGNvbmZpZ3VyYXRpb24KLSogSnVuIDEyLCAxOTk4CURhdmlkIEZvbmcJQWRkZWQgQ2lzY28gSERMQyB1bmlvbiBtZW1iZXIgaW4gc2RsYV90Ci0qIERlYyAwOCwgMTk5NwlKYXNwcmVldCBTaW5naCAgQWRkZWQgJ2F1dGhlbnRpY2F0b3InIGluIHVuaW9uIG9mICdzZGxhX3QnIAotKiBOb3YgMjYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgJ2xvYWRfc2hhcmluZycgc3RydWN0dXJlLiAgQWxzbyBhZGRlZCAKLSoJCQkJJ2RldnNfc3RydWN0JywnZGV2X3RvX2RldnRpbnRfbmV4dCcgdG8gJ3NkbGFfdCcJCi0qIE5vdiAyNCwgMTk5NwlKYXNwcmVldCBTaW5naAlBZGRlZCAnaXJxX2Rpc19pZl9zZW5kX2NvdW50JywgCi0qCQkJCSdpcnFfZGlzX3BvbGxfY291bnQnIHRvICdzZGxhX3QnLgotKiBOb3YgMDYsIDE5OTcJSmFzcHJlZXQgU2luZ2gJQWRkZWQgYSBkZWZpbmUgY2FsbGVkICdJTlRSX1RFU1RfTU9ERScKLSogT2N0IDIwLCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkICdidWZmX2ludHJfbW9kZV91bmJ1c3knIGFuZCAKLSoJCQkJJ2RsY2lfaW50cl9tb2RlX3VuYnVzeScgdG8gJ3NkbGFfdCcKLSogT2N0IDE4LCAxOTk3CUphc3ByZWV0IFNpbmdoCUFkZGVkIHN0cnVjdHVyZSB0byBtYWludGFpbiBnbG9iYWwgZHJpdmVyCi0qCQkJCXN0YXRpc3RpY3MuCi0qIEphbiAxNSwgMTk5NwlHZW5lIEtvemluCVZlcnNpb24gMy4xLjAKLSoJCQkJIG8gYWRkZWQgVURQIG1hbmFnZW1lbnQgc3R1ZmYKLSogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JVmVyc2lvbiAzLjAuMAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCV9XQU5QSVBFX0gKLSNkZWZpbmUJX1dBTlBJUEVfSAotCi0jaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+Ci0KLS8qIERlZmluZXMgKi8KLQotI2lmbmRlZglQQUNLRUQKLSNkZWZpbmUJUEFDS0VECV9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZW5kaWYKLQotI2RlZmluZQlXQU5QSVBFX01BR0lDCTB4NDE0QzQ0NTNMCS8qIHNpZ25hdHVyZTogJ1NETEEnIHJldmVyc2VkICovCi0KLS8qIElPQ1RMIG51bWJlcnMgKHVwIHRvIDE2KSAqLwotI2RlZmluZQlXQU5QSVBFX0RVTVAJKFJPVVRFUl9VU0VSKzApCS8qIGR1bXAgYWRhcHRlcidzIG1lbW9yeSAqLwotI2RlZmluZQlXQU5QSVBFX0VYRUMJKFJPVVRFUl9VU0VSKzEpCS8qIGV4ZWN1dGUgZmlybXdhcmUgY29tbWFuZCAqLwotCi0jZGVmaW5lIFRSQUNFX0FMTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBUUkFDRV9QUk9UCQkJMHgwMQotI2RlZmluZSBUUkFDRV9EQVRBCQkJMHgwMgotCi0vKiB2YWx1ZXMgZm9yIHJlcXVlc3QvcmVwbHkgYnl0ZSAqLwotI2RlZmluZSBVRFBNR01UX1JFUVVFU1QJMHgwMQotI2RlZmluZSBVRFBNR01UX1JFUExZCTB4MDIKLSNkZWZpbmUgVURQX09GRlNFVAkxMgotCi0jZGVmaW5lIE1BWF9DTURfQlVGRiAJMTAKLSNkZWZpbmUgTUFYX1gyNV9MQ04gCTI1NQkvKiBNYXhpbXVtIG51bWJlciBvZiB4MjUgY2hhbm5lbHMgKi8KLSNkZWZpbmUgTUFYX0xDTl9OVU0JNDA5NQkvKiBNYXhpbXVtIGxjbiBudW1iZXIgKi8KLSNkZWZpbmUgTUFYX0ZUMV9SRVRSWSAJMTAwCi0KLSNpZm5kZWYgQUZfV0FOUElQRQotCSNkZWZpbmUgQUZfV0FOUElQRSAyNQotCSNpZm5kZWYgUEZfV0FOUElQRQotCQkjZGVmaW5lIFBGX1dBTlBJUEUgQUZfV0FOUElQRQotCSNlbmRpZgotI2VuZGlmCi0KLQotI2RlZmluZSBUWF9USU1FT1VUIDUqSFoKLQotLyogR2VuZXJhbCBDcml0aWNhbCBGbGFncyAqLwotI2RlZmluZSBTRU5EX0NSSVQJMHgwMAotI2RlZmluZSBQRVJJX0NSSVQJMHgwMQotCi0vKiBDaGRsYyBhbmQgUFBQIHBvbGxpbmcgY3JpdGljYWwgZmxhZyAqLwotI2RlZmluZSBQT0xMX0NSSVQJMHgwMwotCi0vKiBGcmFtZSBSZWxheSBUeCBJUlEgc2VuZCBjcml0aWNhbCBmbGFnICovCi0jZGVmaW5lIFNFTkRfVFhJUlFfQ1JJVCAweDAyCi0KLS8qIEZyYW1lIFJlbGF5IEFSUCBjcml0aWNhbCBmbGFnICovCi0jZGVmaW5lIEFSUF9DUklUCTB4MDMKLQotLyogQml0IG1hcHMgZm9yIGR5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24KLSAqIERZTl9PUFRfT04gOiB0dXJucyB0aGlzIG9wdGlvbiBvbi9vZmYgCi0gKiBERVZfRE9XTiAgIDogZGV2aWNlIHdhcyBzaHV0ZG93biBieSB0aGUgZHJpdmVyIG5vdAotICogICAgICAgICAgICAgIGJ5IHVzZXIgCi0gKi8KLSNkZWZpbmUgRFlOX09QVF9PTgkweDAwCi0jZGVmaW5lIERFVl9ET1dOCTB4MDEKLQotLyoKLSAqIERhdGEgc3RydWN0dXJlcyBmb3IgSU9DVEwgY2FsbHMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc2RsYV9kdW1wCS8qIFdBTlBJUEVfRFVNUCAqLwotewotCXVuc2lnbmVkIGxvbmcgbWFnaWM7CS8qIGZvciB2ZXJpZmljYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIG9mZnNldDsJLyogYWJzb2x1dGUgYWRhcHRlciBtZW1vcnkgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwkvKiBibG9jayBsZW5ndGggKi8KLQl2b2lkKiBwdHI7CQkvKiAtPiBidWZmZXIgKi8KLX0gc2RsYV9kdW1wX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNkbGFfZXhlYwkvKiBXQU5QSVBFX0VYRUMgKi8KLXsKLQl1bnNpZ25lZCBsb25nIG1hZ2ljOwkvKiBmb3IgdmVyaWZpY2F0aW9uICovCi0Jdm9pZCogY21kOwkJLyogLT4gY29tbWFuZCBzdHJ1Y3R1cmUgKi8KLQl2b2lkKiBkYXRhOwkJLyogLT4gZGF0YSBidWZmZXIgKi8KLX0gc2RsYV9leGVjX3Q7Ci0KLS8qIFVEUCBtYW5hZ2VtZW50IHN0dWZmICovCi0KLXR5cGVkZWYgc3RydWN0IHd1bV9oZWFkZXIKLXsKLQl1bnNpZ25lZCBjaGFyIHNpZ25hdHVyZVs4XTsJLyogMDBoOiBzaWduYXR1cmUgKi8KLQl1bnNpZ25lZCBjaGFyIHR5cGU7CQkvKiAwOGg6IHJlcXVlc3QvcmVwbHkgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CQkvKiAwOWg6IGNvbW1uYW5kICovCi0JdW5zaWduZWQgY2hhciByZXNlcnZlZFs2XTsJLyogMEFoOiByZXNlcnZlZCAqLwotfSB3dW1faGVhZGVyX3Q7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gRGF0YSBTdHJ1Y3R1cmUgZm9yIGdsb2JhbCBzdGF0aXN0aWNzCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi10eXBlZGVmIHN0cnVjdCBnbG9iYWxfc3RhdHMKLXsKLQl1bnNpZ25lZCBsb25nIGlzcl9lbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlzcl9hbHJlYWR5X2NyaXRpY2FsOwkJCi0JdW5zaWduZWQgbG9uZyBpc3Jfcng7Ci0JdW5zaWduZWQgbG9uZyBpc3JfdHg7Ci0JdW5zaWduZWQgbG9uZyBpc3JfaW50cl90ZXN0OwotCXVuc2lnbmVkIGxvbmcgaXNyX3NwdXJpb3VzOwotCXVuc2lnbmVkIGxvbmcgaXNyX2VuYWJsZV90eF9pbnQ7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX2NvcnJ1cHRfcnhfYmZyOwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9vbl9vcnBoYW5lZF9ETENJOwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JdW5zaWduZWQgbG9uZyB0eF9pbnRyX2Rldl9ub3Rfc3RhcnRlZDsKLQl1bnNpZ25lZCBsb25nIHBvbGxfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX2FscmVhZHlfY3JpdGljYWw7Ci0JdW5zaWduZWQgbG9uZyBwb2xsX3Byb2Nlc3NlZDsKLQl1bnNpZ25lZCBsb25nIHBvbGxfdGJ1c3lfYmFkX3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIHBvbGxfaG9zdF9kaXNhYmxlX2lycTsKLQl1bnNpZ25lZCBsb25nIHBvbGxfaG9zdF9lbmFibGVfaXJxOwotCi19IGdsb2JhbF9zdGF0c190OwotCi0KLXR5cGVkZWYgc3RydWN0ewotCXVuc2lnbmVkIHNob3J0CXVkcF9zcmNfcG9ydAkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9kc3RfcG9ydAkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CXVkcF9sZW5ndGgJCVBBQ0tFRDsKLQl1bnNpZ25lZCBzaG9ydAl1ZHBfY2hlY2tzdW0JCVBBQ0tFRDsKLX0gdWRwX3BrdF90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCXZlcl9pbmV0X2hkcl9sZW5ndGgJUEFDS0VEOwotCXVuc2lnbmVkIGNoYXIJc2VydmljZV90eXBlCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJdG90YWxfbGVuZ3RoCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJaWRlbnRpZmllcgkJUEFDS0VEOwotCXVuc2lnbmVkIHNob3J0CWZsYWdzX2ZyYWdfb2Zmc2V0CVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXR0bAkJCVBBQ0tFRDsKLQl1bnNpZ25lZCBjaGFyCXByb3RvY29sCQlQQUNLRUQ7Ci0JdW5zaWduZWQgc2hvcnQJaGRyX2NoZWNrc3VtCQlQQUNLRUQ7Ci0JdW5zaWduZWQgbG9uZwlpcF9zcmNfYWRkcmVzcwkJUEFDS0VEOwotCXVuc2lnbmVkIGxvbmcJaXBfZHN0X2FkZHJlc3MJCVBBQ0tFRDsKLX0gaXBfcGt0X3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBzaWduYXR1cmVbOF0gICAgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXF1ZXN0X3JlcGx5ICAgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBpZCAgICAgICAgICAgICAgUEFDS0VEOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXNlcnZlZFs2XSAgICAgUEFDS0VEOwotfSB3cF9tZ210X3Q7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gRGF0YSBTdHJ1Y3R1cmUgZm9yIGlmX3NlbmQgIHN0YXRpc3RpY3MKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAKLXR5cGVkZWYgc3RydWN0IGlmX3NlbmRfc3RhdHsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX3NrYl9udWxsOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9icm9hZGNhc3Q7Ci0JdW5zaWduZWQgbG9uZyBpZl9zZW5kX211bHRpY2FzdDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfY3JpdGljYWxfSVNSOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jcml0aWNhbF9ub25fSVNSOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF90YnVzeTsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdGJ1c3lfdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfUElQRV9yZXF1ZXN0OwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF93YW5fZGlzY29ubmVjdGVkOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9kbGNpX2Rpc2Nvbm5lY3RlZDsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfbm9fYmZyczsKLQl1bnNpZ25lZCBsb25nIGlmX3NlbmRfYWRwdHJfYmZyc19mdWxsOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9iZnJfcGFzc2VkX3RvX2FkcHRyOwotCXVuc2lnbmVkIGxvbmcgaWZfc2VuZF9wcm90b2NvbF9lcnJvcjsKLSAgICAgICAJdW5zaWduZWQgbG9uZyBpZl9zZW5kX2Jmcl9ub3RfcGFzc2VkX3RvX2FkcHRyOwotICAgICAgIAl1bnNpZ25lZCBsb25nIGlmX3NlbmRfdHhfaW50X2VuYWJsZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaWZfc2VuZF9jb25zZWNfc2VuZF9mYWlsOyAKLX0gaWZfc2VuZF9zdGF0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHJ4X2ludHJfc3RhdHsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfbm9fc29ja2V0OwotCXVuc2lnbmVkIGxvbmcgcnhfaW50cl9kZXZfbm90X3N0YXJ0ZWQ7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX1BJUEVfcmVxdWVzdDsKLQl1bnNpZ25lZCBsb25nIHJ4X2ludHJfYmZyX25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRyX2Jmcl9wYXNzZWRfdG9fc3RhY2s7Ci19IHJ4X2ludHJfc3RhdF90OwkKLQotdHlwZWRlZiBzdHJ1Y3QgcGlwZV9tZ210X3N0YXR7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X2ttYWxsb2NfZXJyOwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9kaXJlY3Rpb25fZXJyOwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9hZHB0cl90eXBlX2VycjsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF9PSzsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfY21uZF90aW1lb3V0OwotCXVuc2lnbmVkIGxvbmcgVURQX1BJUEVfbWdtdF9hZHB0cl9zZW5kX3Bhc3NlZDsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfYWRwdHJfc2VuZF9mYWlsZWQ7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X25vdF9wYXNzZWRfdG9fc3RhY2s7Ci0JdW5zaWduZWQgbG9uZyBVRFBfUElQRV9tZ210X3Bhc3NlZF90b19zdGFjazsKLQl1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfbm9fc29ja2V0OwotICAgICAgICB1bnNpZ25lZCBsb25nIFVEUF9QSVBFX21nbXRfcGFzc2VkX3RvX2FkcHRyOwotfSBwaXBlX21nbXRfc3RhdF90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotfSBiaF9kYXRhX3QsIGNtZF9kYXRhX3Q7Ci0KLSNkZWZpbmUgTUFYX0xHVEhfVURQX01HTlRfUEtUIDIwMDAKLSAKLQotLyogVGhpcyBpcyB1c2VkIGZvciBpbnRlcnJ1cHQgdGVzdGluZyAqLwotI2RlZmluZSBJTlRSX1RFU1RfTU9ERQkweDAyCi0KLSNkZWZpbmUJV1VNX1NJR05BVFVSRV9MCTB4NTA0OTUwNDYKLSNkZWZpbmUJV1VNX1NJR05BVFVSRV9ICTB4NDQ0RTM4NDUKLQotI2RlZmluZQlXVU1fS0lMTAkweDUwCi0jZGVmaW5lCVdVTV9FWEVDCTB4NTEKLQotI2RlZmluZSBXQU5QSVBFCQkweDAwCi0jZGVmaW5lIEFQSQkJMHgwMQotI2RlZmluZSBCUklER0UJCTB4MDIKLSNkZWZpbmUgQlJJREdFX05PREUJMHgwMwotCi0jaWZkZWYJX19LRVJORUxfXwotLyoqKioqKiBLZXJuZWwgSW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9zZGxhZHJ2Lmg+CS8qIFNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvc2RsYXNmbS5oPgkvKiBTRExBIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbFAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+Ci0jaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotCi0vKioqKioqIERhdGEgU3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQWRhcHRlciBEYXRhIFNwYWNlLgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgaGFuZGxlIG11bHRpcGxlIGNhcmRzLCBvdGhlcndpc2UKLSAqIHN0YXRpYyBkYXRhIHdvdWxkIGRvIGl0LgotICovCi10eXBlZGVmIHN0cnVjdCBzZGxhCi17Ci0JY2hhciBkZXZuYW1lW1dBTl9EUlZOQU1FX1NaKzFdOwkvKiBjYXJkIG5hbWUgKi8KLQlzZGxhaHdfdCBodzsJCQkvKiBoYXJkd2FyZSBjb25maWd1cmF0aW9uICovCi0Jc3RydWN0IHdhbl9kZXZpY2Ugd2FuZGV2OwkvKiBXQU4gZGV2aWNlIGRhdGEgc3BhY2UgKi8KLQkKLQl1bnNpZ25lZCBvcGVuX2NudDsJCS8qIG51bWJlciBvZiBvcGVuIGludGVyZmFjZXMgKi8KLQl1bnNpZ25lZCBsb25nIHN0YXRlX3RpY2s7CS8qIGxpbmsgc3RhdGUgdGltZXN0YW1wICovCi0JdW5zaWduZWQgaW50cl9tb2RlOwkJLyogVHlwZSBvZiBJbnRlcnJ1cHQgTW9kZSAqLwotCWNoYXIgaW5faXNyOwkJCS8qIGludGVycnVwdC1pbi1zZXJ2aWNlIGZsYWcgKi8KLQljaGFyIGJ1ZmZfaW50X21vZGVfdW5idXN5OwkvKiBmbGFnIGZvciBjYXJyeWluZyBvdXQgZGV2X3RpbnQgKi8gIAotCWNoYXIgZGxjaV9pbnRfbW9kZV91bmJ1c3k7CS8qIGZsYWcgZm9yIGNhcnJ5aW5nIG91dCBkZXZfdGludCAqLwotCWxvbmcgY29uZmlndXJlZDsJCS8qIGZsYWcgZm9yIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zICovCi0JCi0JdW5zaWduZWQgc2hvcnQgaXJxX2Rpc19pZl9zZW5kX2NvdW50OyAvKiBEaXNhYmxpbmcgaXJxcyBpbiBpZl9zZW5kKi8KLQl1bnNpZ25lZCBzaG9ydCBpcnFfZGlzX3BvbGxfY291bnQ7ICAgLyogRGlzYWJsaW5nIGlycXMgaW4gcG9sbCByb3V0aW5lKi8KLQl1bnNpZ25lZCBzaG9ydCBmb3JjZV9lbmFibGVfaXJxOwotCWNoYXIgVHJhY2luZ0VuYWJsZWQ7CQkvKiBmbGFnIGZvciBlbmFibGluZyB0cmFjZSAqLwotCWdsb2JhbF9zdGF0c190IHN0YXRpc3RpY3M7CS8qIGdsb2JhbCBzdGF0aXN0aWNzICovCi0Jdm9pZCogbWJveDsJCQkvKiAtPiBtYWlsYm94ICovCi0Jdm9pZCogcnhtYjsJCQkvKiAtPiByZWNlaXZlIG1haWxib3ggKi8KLQl2b2lkKiBmbGFnczsJCQkvKiAtPiBhZGFwdGVyIHN0YXR1cyBmbGFncyAqLwotCXZvaWQgKCppc3IpKHN0cnVjdCBzZGxhKiBjYXJkKTsJLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLwotCXZvaWQgKCpwb2xsKShzdHJ1Y3Qgc2RsYSogY2FyZCk7IC8qIHBvbGxpbmcgcm91dGluZSAqLwotCWludCAoKmV4ZWMpKHN0cnVjdCBzZGxhKiBjYXJkLCB2b2lkKiB1X2NtZCwgdm9pZCogdV9kYXRhKTsKLQkJCQkJLyogVXNlZCBieSB0aGUgbGlzdGVuKCkgc3lzdGVtIGNhbGwgKi8JCQotCS8qIFdhbnBpcGUgU29ja2V0IEludGVyZmFjZSAqLwotCWludCAgICgqZnVuYykgKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBzb2NrICopOwotCXN0cnVjdCBzb2NrICpzazsKLQotCS8qIFNodXRkb3duIGZ1bmN0aW9uICovCi0Jdm9pZCAoKmRpc2FibGVfY29tbSkgKHN0cnVjdCBzZGxhICpjYXJkKTsKLQotCS8qIFNlY29uZGFyeSBQb3J0IERldmljZTogUGlnZ2liYWNraW5nICovCi0Jc3RydWN0IHNkbGEgKm5leHQ7Ci0KLQkvKiBUVFkgZHJpdmVyIHZhcmlhYmxlcyAqLwotCXVuc2lnbmVkIGNoYXIgdHR5X29wdDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXVuc2lnbmVkIGludCB0dHlfbWlub3I7Ci0JdW5zaWduZWQgaW50IHR0eV9vcGVuOwotCXVuc2lnbmVkIGNoYXIgKnR0eV9idWY7Ci0JdW5zaWduZWQgY2hhciAqdHR5X3J4OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0dHlfd29yazsKLQkKLQl1bmlvbgotCXsKLQkJc3RydWN0Ci0JCXsJCQkvKioqKioqIFguMjUgc3BlY2lmaWMgZGF0YSAqKioqKioqKioqLwotCQkJdTMyIGxvX3B2YzsKLQkJCXUzMiBoaV9wdmM7Ci0JCQl1MzIgbG9fc3ZjOwotCQkJdTMyIGhpX3N2YzsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpzdmNfdG9fZGV2X21hcFtNQVhfWDI1X0xDTl07Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqcHZjX3RvX2Rldl9tYXBbTUFYX1gyNV9MQ05dOwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldjsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpjbWRfZGV2OwotCQkJdTMyIG5vX2RldjsKLQkJCXZvbGF0aWxlIHU4ICpoZGxjX2J1Zl9zdGF0dXM7Ci0JCQl1MzIgdHhfaW50ZXJydXB0c19wZW5kaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHRpbWVyX2ludF9lbmFibGVkOwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnBvbGxfZGV2aWNlOwotCQkJYXRvbWljX3QgY29tbWFuZF9idXN5OwotCi0JCQl1MTYgdWRwX3BrdF9sZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHVkcF90eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgdTggIHVkcF9wa3Rfc3JjOwotCQkJdTMyIHVkcF9sY247Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdWRwX2RldjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHM4IHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotCi0JCSAJdTggTEFQQl9oZGxjOwkJLyogT3B0aW9uIHRvIHR1cm4gb2ZmIFgyNSBhbmQgcnVuIG9ubHkgTEFQQiAqLwotCQkJdTggbG9nZ2luZzsJCS8qIE9wdGlvbiB0byBsb2cgY2FsbCBtZXNzYWdlcyAqLwotCQkJdTggb29iX29uX21vZGVtOwkvKiBPcHRpb24gdG8gc2VuZCBtb2RlbSBzdGF0dXMgdG8gdGhlIGFwaSAqLwotCQkJdTE2IG51bV9vZl9jaDsJCS8qIE51bWJlciBvZiBjaGFubmVscyBjb25maWd1cmVkIGJ5IHRoZSB1c2VyICovCi0KLQkJCXN0cnVjdCB3b3JrX3N0cnVjdCB4MjVfcG9sbF93b3JrOwotCQkJc3RydWN0IHRpbWVyX2xpc3QgeDI1X3RpbWVyOwotCQl9IHg7Ci0JCXN0cnVjdAotCQl7CQkJLyoqKioqKiBmcmFtZSByZWxheSBzcGVjaWZpYyBkYXRhICoqKi8KLQkJCXZvaWQqIHJ4bWJfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeG1iX2xhc3Q7CS8qIC0+IGxhc3QgUnggYnVmZmVyICovCi0JCQl1bnNpZ25lZCByeF9iYXNlOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGJhc2UgKi8KLQkJCXVuc2lnbmVkIHJ4X3RvcDsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBlbmQgKi8KLQkJCXVuc2lnbmVkIHNob3J0IG5vZGVfZGxjaVsxMDBdOwotCQkJdW5zaWduZWQgc2hvcnQgZGxjaV9udW07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGxjaV90b19kZXZfbWFwWzk5MSArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHhfaW50ZXJydXB0c19wZW5kaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdGltZXJfaW50X2VuYWJsZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB1ZHBfcGt0X2xndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdWRwX3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVkcF9wa3Rfc3JjOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdWRwX2RsY2k7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVkcF9wa3RfZGF0YVtNQVhfTEdUSF9VRFBfTUdOVF9QS1RdOwotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdHJjX2VsX2Jhc2U7ICAgICAgCQkvKiBmaXJzdCB0cmFjZSBlbGVtZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiB0cmNfZWxfbGFzdDsgICAgICAJCS8qIGxhc3QgdHJhY2UgZWxlbWVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3Vycl90cmNfZWw7ICAgICAgCQkvKiBjdXJyZW50IHRyYWNlIGVsZW1lbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRyY19iZnJfc3BhY2U7IAkJLyogdHJhY2UgYnVmZmVyIHNwYWNlICovCi0JCQl1bnNpZ25lZCBjaGFyICB1cGRhdGVfY29tbXNfc3RhdHM7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqYXJwX2RldjsKLQkJCXNwaW5sb2NrX3QgaWZfc2VuZF9sb2NrOwotCQl9IGY7Ci0JCXN0cnVjdAkJCS8qKioqKiogUFBQLXNwZWNpZmljIGRhdGEgKioqKioqKioqKiovCi0JCXsKLQkJCWNoYXIgaWZfbmFtZVtXQU5fSUZOQU1FX1NaKzFdOwkvKiBpbnRlcmZhY2UgbmFtZSAqLwotCQkJdm9pZCogdHhidWY7CQkvKiAtPiBjdXJyZW50IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfYmFzZTsJLyogLT4gZmlyc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFJ4IGJ1ZmZlciAqLwotCQkJdW5zaWduZWQgcnhfYmFzZTsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCByeF90b3A7CS8qIFM1MDggcmVjZWl2ZSBidWZmZXIgZW5kICovCi0JCQljaGFyIGlwX21vZGU7CQkvKiBTVEFUSUMvSE9TVC9QRUVSIElQIE1vZGUgKi8KLQkJCWNoYXIgYXV0aGVudGljYXRvcjsJLyogQXV0aGVudGljYXRvciBmb3IgUEFQL0NIQVAgKi8KLQkJCXVuc2lnbmVkIGNoYXIgY29tbV9lbmFibGVkOyAvKiBJcyBjb21tIGVuYWJsZWQgb3Igbm90ICovCi0JCQl1bnNpZ25lZCBjaGFyIHBlZXJfcm91dGU7ICAgLyogUHJvY2VzcyBQZWVyIFJvdXRlICovCQotCQkJdW5zaWduZWQgbG9uZyAqdHhidWZfbmV4dDsgIC8qIE5leHQgVHggYnVmZmVyIHRvIHVzZSAqLyAKLQkJCXVuc2lnbmVkIGxvbmcgKnJ4YnVmX25leHQ7ICAvKiBOZXh0IFJ4IGJ1ZmZlciB0byB1c2UgKi8KLQkJfSBwOwotCQlzdHJ1Y3QJCQkvKiBDaXNjbyBIRExDLXNwZWNpZmljIGRhdGEgKi8KLQkJewotCQkJY2hhciBpZl9uYW1lW1dBTl9JRk5BTUVfU1orMV07CS8qIGludGVyZmFjZSBuYW1lICovCi0JCQl1bnNpZ25lZCBjaGFyIGNvbW1fcG9ydDsvKiBDb21tdW5pY2F0aW9uIFBvcnQgTyBvciAxICovCi0JCQl1bnNpZ25lZCBjaGFyIHVzZWRieTsgIC8qIFVzZWQgYnkgV0FOUElQRSBvciBBUEkgKi8KLQkJCXZvaWQqIHJ4bWI7CQkvKiBSZWNlaXZlIG1haWwgYm94ICovCi0JCQl2b2lkKiBmbGFnczsJCS8qIGZsYWdzICovCi0JCQl2b2lkKiB0eF9zdGF0dXM7CS8qIFR4IHN0YXR1cyBlbGVtZW50ICovCi0JCQl2b2lkKiByeF9zdGF0dXM7CS8qIFJ4IHN0YXR1cyBlbGVtZW50ICovCi0JCQl2b2lkKiB0eGJ1ZjsJCS8qIC0+IGN1cnJlbnQgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBUeCBidWZmZXIgKi8KLQkJCXZvaWQqIHR4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9iYXNlOwkvKiAtPiBmaXJzdCBSeCBidWZmZXIgKi8KLQkJCXZvaWQqIHJ4YnVmX2xhc3Q7CS8qIC0+IGxhc3QgUnggYnVmZmVyICovCi0JCQl1bnNpZ25lZCByeF9iYXNlOwkvKiBTNTA4IHJlY2VpdmUgYnVmZmVyIGJhc2UgKi8KLQkJCXVuc2lnbmVkIHJ4X3RvcDsJLyogUzUwOCByZWNlaXZlIGJ1ZmZlciBlbmQgKi8KLQkJCXVuc2lnbmVkIGNoYXIgcmVjZWl2ZV9vbmx5OyAvKiBoaWdoIHNwZWVkIHJlY2VpdmVycyAqLwotCQkJdW5zaWduZWQgc2hvcnQgcHJvdG9jb2xfb3B0aW9uczsKLQkJCXVuc2lnbmVkIHNob3J0IGtwYWx2X3R4OwkvKiBUeCBrcGFsdiB0aW1lciAqLwotCQkJdW5zaWduZWQgc2hvcnQga3BhbHZfcng7CS8qIFJ4IGtwYWx2IHRpbWVyICovCi0JCQl1bnNpZ25lZCBzaG9ydCBrcGFsdl9lcnI7CS8qIEVycm9yIHRvbGVyYW5jZSAqLwotCQkJdW5zaWduZWQgc2hvcnQgc2xhcnBfdGltZXI7CS8qIFNMQVJQIHJlcSB0aW1lciAqLwotCQkJdW5zaWduZWQgc3RhdGU7CQkJLyogc3RhdGUgb2YgdGhlIGxpbmsgKi8KLQkJCXVuc2lnbmVkIGNoYXIgYXBpX3N0YXR1czsKLQkJCXVuc2lnbmVkIGNoYXIgdXBkYXRlX2NhbGxfY291bnQ7Ci0JCQl1bnNpZ25lZCBzaG9ydCBhcGlfb3B0aW9uczsJLyogZm9yIGFzeW5jIGNvbmZpZyAqLwotCQkJdW5zaWduZWQgY2hhciAgYXN5bmNfbW9kZTsKLQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eF9iaXRzX3Blcl9jaGFyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHJ4X2JpdHNfcGVyX2NoYXI7Ci0JCSAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RvcF9iaXRzOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHBhcml0eTsKLQkJCXVuc2lnbmVkIHNob3J0IGJyZWFrX3RpbWVyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IGludGVyX2NoYXJfdGltZXI7Ci0JCSAgICAgICAgdW5zaWduZWQgc2hvcnQgcnhfY29tcGxldGVfbGVuZ3RoOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHhvbl9jaGFyOwotCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHhvZmZfY2hhcjsKLQkJCXVuc2lnbmVkIGNoYXIgY29tbV9lbmFibGVkOyAvKiBJcyBjb21tIGVuYWJsZWQgb3Igbm90ICovCi0JCQl1bnNpZ25lZCBjaGFyIGJhY2t1cDsKLQkJfSBjOwotCQlzdHJ1Y3QKLQkJewotCQkJdm9pZCogdHhfc3RhdHVzOwkvKiBUeCBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogcnhfc3RhdHVzOwkvKiBSeCBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogdHJhY2Vfc3RhdHVzOwkvKiBUcmFjZSBzdGF0dXMgZWxlbWVudCAqLwotCQkJdm9pZCogdHhidWY7CQkvKiAtPiBjdXJyZW50IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHhidWZfYmFzZTsJLyogLT4gZmlyc3QgVHggYnVmZmVyICovCi0JCQl2b2lkKiB0eGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFR4IGJ1ZmZlciAqLwotCQkJdm9pZCogcnhidWZfYmFzZTsJLyogLT4gZmlyc3QgUnggYnVmZmVyICovCi0JCQl2b2lkKiByeGJ1Zl9sYXN0OwkvKiAtPiBsYXN0IFJ4IGJ1ZmZlciAqLwotCQkJdm9pZCogdHJhY2VidWY7CQkvKiAtPiBjdXJyZW50IFRyYWNlIGJ1ZmZlciAqLwotCQkJdm9pZCogdHJhY2VidWZfYmFzZTsJLyogLT4gY3VycmVudCBUcmFjZSBidWZmZXIgKi8KLQkJCXZvaWQqIHRyYWNlYnVmX2xhc3Q7CS8qIC0+IGN1cnJlbnQgVHJhY2UgYnVmZmVyICovCi0JCQl1bnNpZ25lZCByeF9iYXNlOwkvKiByZWNlaXZlIGJ1ZmZlciBiYXNlICovCi0JCQl1bnNpZ25lZCByeF9lbmQ7CS8qIHJlY2VpdmUgYnVmZmVyIGVuZCAqLwotCQkJdW5zaWduZWQgdHJhY2VfYmFzZTsJLyogdHJhY2UgYnVmZmVyIGJhc2UgKi8KLQkJCXVuc2lnbmVkIHRyYWNlX2VuZDsJLyogdHJhY2UgYnVmZmVyIGVuZCAqLwotCi0JCX0gaDsKLQl9IHU7Ci19IHNkbGFfdDsKLQotLyoqKioqKiBQdWJsaWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgd2FucGlwZV9vcGVuICAgICAgKHNkbGFfdCogY2FyZCk7CQkJLyogd3BtYWluLmMgKi8KLXZvaWQgd2FucGlwZV9jbG9zZSAgICAgKHNkbGFfdCogY2FyZCk7CQkJLyogd3BtYWluLmMgKi8KLXZvaWQgd2FucGlwZV9zZXRfc3RhdGUgKHNkbGFfdCogY2FyZCwgaW50IHN0YXRlKTsJLyogd3BtYWluLmMgKi8KLQotaW50IHdweF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiB3cHguYyAqLwotaW50IHdwZl9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiB3cGYuYyAqLwotaW50IHdwcF9pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOwkvKiB3cHAuYyAqLwotaW50IHdwY19pbml0IChzZGxhX3QqIGNhcmQsIHdhbmRldl9jb25mX3QqIGNvbmYpOyAvKiBDaXNjbyBIRExDICovCi1pbnQgYnNjX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIEJTQyBzdHJlYW1pbmcgKi8KLWludCBoZGxjX2luaXQoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsJLyogSERMQyBzdXBwb3J0ICovCi1pbnQgd3BmdDFfaW5pdCAoc2RsYV90KiBjYXJkLCB3YW5kZXZfY29uZl90KiBjb25mKTsgICAgIC8qIEZUMSBDb25maWcgc3VwcG9ydCAqLwotaW50IHdzcHBwX2luaXQgKHNkbGFfdCogY2FyZCwgd2FuZGV2X2NvbmZfdCogY29uZik7CS8qIFN5bmMgUFBQIG9uIHRvcCBvZiBSQVcgQ0hETEMgKi8KLQotZXh0ZXJuIHNkbGFfdCAqIHdhbnBpcGVfZmluZF9jYXJkKGNoYXIgKik7Ci1leHRlcm4gc2RsYV90ICogd2FucGlwZV9maW5kX2NhcmRfbnVtIChpbnQpOwotCi1leHRlcm4gdm9pZCB3YW5waXBlX3F1ZXVlX3dvcmsgKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIHdhbnBpcGVfbWFya19iaCAodm9pZCk7Ci1leHRlcm4gdm9pZCB3YWtldXBfc2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IGNoYW5nZV9kZXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgZmxhZ3MpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2lwX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9wdGlvbik7Ci1leHRlcm4gdm9pZCBhZGRfZ2F0ZXdheShzZGxhX3QgKmNhcmQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0KLSNlbmRpZgkvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYJLyogX1dBTlBJUEVfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaCBiL2luY2x1ZGUvbWVkaWEvY3gyNTg0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlN2U1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaApAQCAtMCwwICsxLDY0IEBACisvKgorICAgIGN4MjU4NDAuaCAtIGRlZmluaXRpb24gZm9yIGN4MjU4NDAvMS8yLzMgaW5wdXRzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX0NYMjU4NDBfSF8KKyNkZWZpbmUgX0NYMjU4NDBfSF8KKworZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHsKKwkvKiBDb21wb3NpdGUgdmlkZW8gaW5wdXRzIEluMS1JbjggKi8KKwlDWDI1ODQwX0NPTVBPU0lURTEgPSAxLAorCUNYMjU4NDBfQ09NUE9TSVRFMiwKKwlDWDI1ODQwX0NPTVBPU0lURTMsCisJQ1gyNTg0MF9DT01QT1NJVEU0LAorCUNYMjU4NDBfQ09NUE9TSVRFNSwKKwlDWDI1ODQwX0NPTVBPU0lURTYsCisJQ1gyNTg0MF9DT01QT1NJVEU3LAorCUNYMjU4NDBfQ09NUE9TSVRFOCwKKworCS8qIFMtVmlkZW8gaW5wdXRzIGNvbnNpc3Qgb2Ygb25lIGx1bWEgaW5wdXQgKEluMS1JbjQpIE9SZWQgd2l0aCBvbmUKKwkgICBjaHJvbWEgaW5wdXQgKEluNS1JbjgpICovCisJQ1gyNTg0MF9TVklERU9fTFVNQTEgPSAweDEwLAorCUNYMjU4NDBfU1ZJREVPX0xVTUEyID0gMHgyMCwKKwlDWDI1ODQwX1NWSURFT19MVU1BMyA9IDB4MzAsCisJQ1gyNTg0MF9TVklERU9fTFVNQTQgPSAweDQwLAorCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTQgPSAweDQwMCwKKwlDWDI1ODQwX1NWSURFT19DSFJPTUE1ID0gMHg1MDAsCisJQ1gyNTg0MF9TVklERU9fQ0hST01BNiA9IDB4NjAwLAorCUNYMjU4NDBfU1ZJREVPX0NIUk9NQTcgPSAweDcwMCwKKwlDWDI1ODQwX1NWSURFT19DSFJPTUE4ID0gMHg4MDAsCisKKwkvKiBTLVZpZGVvIGFsaWFzZXMgZm9yIGNvbW1vbiBsdW1hL2Nocm9tYSBjb21iaW5hdGlvbnMgKi8KKwlDWDI1ODQwX1NWSURFTzEgPSAweDUxMCwKKwlDWDI1ODQwX1NWSURFTzIgPSAweDYyMCwKKwlDWDI1ODQwX1NWSURFTzMgPSAweDczMCwKKwlDWDI1ODQwX1NWSURFTzQgPSAweDg0MCwKK307CisKK2VudW0gY3gyNTg0MF9hdWRpb19pbnB1dCB7CisJLyogQXVkaW8gaW5wdXRzOiBzZXJpYWwgb3IgSW40LUluOCAqLworCUNYMjU4NDBfQVVESU9fU0VSSUFMLAorCUNYMjU4NDBfQVVESU80ID0gNCwKKwlDWDI1ODQwX0FVRElPNSwKKwlDWDI1ODQwX0FVRElPNiwKKwlDWDI1ODQwX0FVRElPNywKKwlDWDI1ODQwX0FVRElPOCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9tc3AzNDAwLmggYi9pbmNsdWRlL21lZGlhL21zcDM0MDAuaAppbmRleCAwYmU2MWEwLi42YWI4NTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL21zcDM0MDAuaAorKysgYi9pbmNsdWRlL21lZGlhL21zcDM0MDAuaApAQCAtODAsMTYgKzgwLDE2IEBACiAgKi8KIAogLyogU0NBUlQgaW5wdXQgdG8gRFNQIHNlbGVjdGlvbiAqLwotI2RlZmluZSBNU1BfSU5fU0NBUlRfMSAgCTAgIC8qIFBpbiBTQzFfSU4gKi8KLSNkZWZpbmUgTVNQX0lOX1NDQVJUXzIgIAkxICAvKiBQaW4gU0MyX0lOICovCi0jZGVmaW5lIE1TUF9JTl9TQ0FSVF8zICAJMiAgLyogUGluIFNDM19JTiAqLwotI2RlZmluZSBNU1BfSU5fU0NBUlRfNCAgCTMgIC8qIFBpbiBTQzRfSU4gKi8KKyNkZWZpbmUgTVNQX0lOX1NDQVJUMSAgCQkwICAvKiBQaW4gU0MxX0lOICovCisjZGVmaW5lIE1TUF9JTl9TQ0FSVDIgIAkJMSAgLyogUGluIFNDMl9JTiAqLworI2RlZmluZSBNU1BfSU5fU0NBUlQzICAJCTIgIC8qIFBpbiBTQzNfSU4gKi8KKyNkZWZpbmUgTVNQX0lOX1NDQVJUNCAgCQkzICAvKiBQaW4gU0M0X0lOICovCiAjZGVmaW5lIE1TUF9JTl9NT05PICAgICAJNiAgLyogUGluIE1PTk9fSU4gKi8KICNkZWZpbmUgTVNQX0lOX01VVEUgICAgIAk3ICAvKiBNdXRlIERTUCBpbnB1dCAqLwogI2RlZmluZSBNU1BfU0NBUlRfVE9fRFNQKGluKSAJKGluKQogLyogVHVuZXIgaW5wdXQgdG8gZGVtb2R1bGF0b3IgYW5kIERTUCBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgTVNQX0lOX1RVTkVSXzEgCQkwICAvKiBBbmFsb2cgU291bmQgSUYgaW5wdXQgcGluIEFOQV9JTjEgKi8KLSNkZWZpbmUgTVNQX0lOX1RVTkVSXzIgIAkxICAvKiBBbmFsb2cgU291bmQgSUYgaW5wdXQgcGluIEFOQV9JTjIgKi8KKyNkZWZpbmUgTVNQX0lOX1RVTkVSMSAJCTAgIC8qIEFuYWxvZyBTb3VuZCBJRiBpbnB1dCBwaW4gQU5BX0lOMSAqLworI2RlZmluZSBNU1BfSU5fVFVORVIyIAkJMSAgLyogQW5hbG9nIFNvdW5kIElGIGlucHV0IHBpbiBBTkFfSU4yICovCiAjZGVmaW5lIE1TUF9UVU5FUl9UT19EU1AoaW4pIAkoKGluKSA8PCAzKQogCiAvKiBUaGUgbXNwIGhhcyB1cCB0byA1IERTUCBvdXRwdXRzLCBlYWNoIG91dHB1dCBjYW4gaW5kZXBlbmRlbnRseSBzZWxlY3QKQEAgLTEwOSwxNCArMTA5LDE0IEBACiAgICBEU1AuIFRoaXMgaXMgY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4gQWxzbyBub3QgaW1wbGVtZW50ZWQgaXMgdGhlCiAgICBtdWx0aS1jaGFubmVsIGNhcGFibGUgSTJTMyBpbnB1dCBvZiB0aGUgNDR4MEcuIElmIHNvbWVvbmUgY2FuIGRlbW9uc3RyYXRlCiAgICBhIG5lZWQgZm9yIG9uZSBvZiB0aG9zZSBmZWF0dXJlcyB0aGVuIGFkZGl0aW9uYWwgc3VwcG9ydCBjYW4gYmUgYWRkZWQuICovCi0jZGVmaW5lIE1TUF9EU1BfT1VUX1RVTkVSIAkwICAvKiBUdW5lciBvdXRwdXQgKi8KLSNkZWZpbmUgTVNQX0RTUF9PVVRfU0NBUlQgCTIgIC8qIFNDQVJUIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9JMlMxIAk1ICAvKiBJMlMxIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9JMlMyIAk2ICAvKiBJMlMyIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9JMlMzICAgIAk3ICAvKiBJMlMzIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9NQUlOX0FWQyAJMTEgLyogTUFJTiBBVkMgcHJvY2Vzc2VkIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9NQUlOIAkxMiAvKiBNQUlOIG91dHB1dCAqLwotI2RlZmluZSBNU1BfRFNQX09VVF9BVVggCTEzIC8qIEFVWCBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9JTl9UVU5FUiAJMCAgLyogVHVuZXIgRFNQIGlucHV0ICovCisjZGVmaW5lIE1TUF9EU1BfSU5fU0NBUlQgCTIgIC8qIFNDQVJUIERTUCBpbnB1dCAqLworI2RlZmluZSBNU1BfRFNQX0lOX0kyUzEgCTUgIC8qIEkyUzEgRFNQIGlucHV0ICovCisjZGVmaW5lIE1TUF9EU1BfSU5fSTJTMiAJNiAgLyogSTJTMiBEU1AgaW5wdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9JTl9JMlMzICAgIAk3ICAvKiBJMlMzIERTUCBpbnB1dCAqLworI2RlZmluZSBNU1BfRFNQX0lOX01BSU5fQVZDIAkxMSAvKiBNQUlOIEFWQyBwcm9jZXNzZWQgRFNQIGlucHV0ICovCisjZGVmaW5lIE1TUF9EU1BfSU5fTUFJTiAJMTIgLyogTUFJTiBEU1AgaW5wdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9JTl9BVVggCQkxMyAvKiBBVVggRFNQIGlucHV0ICovCiAjZGVmaW5lIE1TUF9EU1BfVE9fTUFJTihpbikgICAJKChpbikgPDwgNCkKICNkZWZpbmUgTVNQX0RTUF9UT19BVVgoaW4pICAgIAkoKGluKSA8PCA4KQogI2RlZmluZSBNU1BfRFNQX1RPX1NDQVJUMShpbikgCSgoaW4pIDw8IDEyKQpAQCAtMTI1LDE2ICsxMjUsMTYgQEAKIAogLyogT3V0cHV0IFNDQVJUIHNlbGVjdDogdGhlIFNDQVJUIG91dHB1dHMgY2FuIHNlbGVjdCB3aGljaCBpbnB1dAogICAgdG8gdXNlLiAqLwotI2RlZmluZSBNU1BfT1VUX1NDQVJUMSAJCTAgIC8qIFNDQVJUMSBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KLSNkZWZpbmUgTVNQX09VVF9TQ0FSVDIgCQkxICAvKiBTQ0FSVDIgaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCi0jZGVmaW5lIE1TUF9PVVRfU0NBUlQzIAkJMiAgLyogU0NBUlQzIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLwotI2RlZmluZSBNU1BfT1VUX1NDQVJUNCAJCTMgIC8qIFNDQVJUNCBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KLSNkZWZpbmUgTVNQX09VVF9TQ0FSVDFfREEgCTQgIC8qIERTUCBTQ0FSVDEgb3V0cHV0ICovCi0jZGVmaW5lIE1TUF9PVVRfU0NBUlQyX0RBIAk1ICAvKiBEU1AgU0NBUlQyIG91dHB1dCAqLwotI2RlZmluZSBNU1BfT1VUX01PTk8gCQk2ICAvKiBNT05PIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLwotI2RlZmluZSBNU1BfT1VUX01VVEUgCQk3ICAvKiBNVVRFIG91dHB1dCAqLwotI2RlZmluZSBNU1BfT1VUX1RPX1NDQVJUMShpbikgICAJKGluKQotI2RlZmluZSBNU1BfT1VUX1RPX1NDQVJUMihpbikgICAJKChpbikgPDwgNCkKKyNkZWZpbmUgTVNQX1NDX0lOX1NDQVJUMSAJMCAgLyogU0NBUlQxIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLworI2RlZmluZSBNU1BfU0NfSU5fU0NBUlQyIAkxICAvKiBTQ0FSVDIgaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCisjZGVmaW5lIE1TUF9TQ19JTl9TQ0FSVDMgCTIgIC8qIFNDQVJUMyBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KKyNkZWZpbmUgTVNQX1NDX0lOX1NDQVJUNCAJMyAgLyogU0NBUlQ0IGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLworI2RlZmluZSBNU1BfU0NfSU5fRFNQX1NDQVJUMSAJNCAgLyogRFNQIFNDQVJUMSBpbnB1dCAqLworI2RlZmluZSBNU1BfU0NfSU5fRFNQX1NDQVJUMiAJNSAgLyogRFNQIFNDQVJUMiBpbnB1dCAqLworI2RlZmluZSBNU1BfU0NfSU5fTU9OTyAJCTYgIC8qIE1PTk8gaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCisjZGVmaW5lIE1TUF9TQ19JTl9NVVRFIAkJNyAgLyogTVVURSBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX1NDX1RPX1NDQVJUMShpbikJKGluKQorI2RlZmluZSBNU1BfU0NfVE9fU0NBUlQyKGluKQkoKGluKSA8PCA0KQogCiAvKiBTaG9ydGN1dCBtYWNyb3MgKi8KICNkZWZpbmUgTVNQX0lOUFVUKHNjLCB0LCBtYWluX2F1eF9zcmMsIHNjX2kyc19zcmMpIFwKQEAgLTE0NSwxNCArMTQ1LDE0IEBACiAJIE1TUF9EU1BfVE9fU0NBUlQxKHNjX2kyc19zcmMpIHwgXAogCSBNU1BfRFNQX1RPX1NDQVJUMihzY19pMnNfc3JjKSB8IFwKIAkgTVNQX0RTUF9UT19JMlMoc2NfaTJzX3NyYykpCi0jZGVmaW5lIE1TUF9JTlBVVF9ERUZBVUxUIE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMSwgTVNQX0lOX1RVTkVSXzEsIFwKLQkJCQkgICAgTVNQX0RTUF9PVVRfVFVORVIsIE1TUF9EU1BfT1VUX1RVTkVSKQorI2RlZmluZSBNU1BfSU5QVVRfREVGQVVMVCBNU1BfSU5QVVQoTVNQX0lOX1NDQVJUMSwgTVNQX0lOX1RVTkVSMSwgXAorCQkJCSAgICBNU1BfRFNQX0lOX1RVTkVSLCBNU1BfRFNQX0lOX1RVTkVSKQogI2RlZmluZSBNU1BfT1VUUFVUKHNjKSBcCi0JKE1TUF9PVVRfVE9fU0NBUlQxKHNjKSB8IFwKLQkgTVNQX09VVF9UT19TQ0FSVDIoc2MpKQorCShNU1BfU0NfVE9fU0NBUlQxKHNjKSB8IFwKKwkgTVNQX1NDX1RPX1NDQVJUMihzYykpCiAvKiBUaGlzIGVxdWFscyB0aGUgUkVTRVQgcG9zaXRpb24gb2YgdGhlIG1zcDM0MDAgQUNCIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1TUF9PVVRQVVRfREVGQVVMVCAoTVNQX09VVF9UT19TQ0FSVDEoTVNQX09VVF9TQ0FSVDMpIHwgXAotCQkJICAgIE1TUF9PVVRfVE9fU0NBUlQyKE1TUF9PVVRfU0NBUlQxX0RBKSkKKyNkZWZpbmUgTVNQX09VVFBVVF9ERUZBVUxUIChNU1BfU0NfVE9fU0NBUlQxKE1TUF9TQ19JTl9TQ0FSVDMpIHwgXAorCQkJICAgIE1TUF9TQ19UT19TQ0FSVDIoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpKQogCiAvKiBUdW5lciBpbnB1dHMgdnMuIG1zcCB2ZXJzaW9uICovCiAvKiBDaGlwICAgICAgVFVORVJfMSAgIFRVTkVSXzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0ODM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgc2FhNzExNS5oIC0gZGVmaW5pdGlvbiBmb3Igc2FhNzExMy80LzUgaW5wdXRzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX1NBQTcxMTVfSF8KKyNkZWZpbmUgX1NBQTcxMTVfSF8KKworLyogU0FBNzExMy80LzUgSFcgaW5wdXRzICovCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMCAwCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMSAxCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMiAyCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMyAzCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNCA0IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTEzICovCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNSA1IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTEzICovCisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMCAgICA2CisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMSAgICA3CisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMiAgICA4CisjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMyAgICA5CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxMjcuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzEyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiY2Y4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxMjcuaApAQCAtMCwwICsxLDQxIEBACisvKgorICAgIHNhYTcxMjcuaCAtIGRlZmluaXRpb24gZm9yIHNhYTcxMjYvNy84LzkgaW5wdXRzL291dHB1dHMKKworICAgIENvcHlyaWdodCAoQykgMjAwNiBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfU0FBNzEyN19IXworI2RlZmluZSBfU0FBNzEyN19IXworCisvKiBFbnVtZXJhdGlvbiBmb3IgdGhlIHN1cHBvcnRlZCBpbnB1dCB0eXBlcyAqLworZW51bSBzYWE3MTI3X2lucHV0X3R5cGUgeworCVNBQTcxMjdfSU5QVVRfVFlQRV9OT1JNQUwsCisJU0FBNzEyN19JTlBVVF9UWVBFX1RFU1RfSU1BR0UKK307CisKKy8qIEVudW1lcmF0aW9uIGZvciB0aGUgc3VwcG9ydGVkIG91dHB1dCBzaWduYWwgdHlwZXMgKi8KK2VudW0gc2FhNzEyN19vdXRwdXRfdHlwZSB7CisJU0FBNzEyN19PVVRQVVRfVFlQRV9CT1RILAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfQ09NUE9TSVRFLAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfU1ZJREVPLAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfUkdCLAorCVNBQTcxMjdfT1VUUFVUX1RZUEVfWVVWX0MsCisJU0FBNzEyN19PVVRQVVRfVFlQRV9ZVVZfVgorfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdXBkNjQwMzFhLmggYi9pbmNsdWRlL21lZGlhL3VwZDY0MDMxYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDZhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3VwZDY0MDMxYS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiB1cGQ2NDAzMWEgLSBORUMgRWxlY3Ryb25pY3MgR2hvc3QgUmVkdWN0aW9uIGlucHV0IGRlZmluZXMKKyAqCisgKiAyMDA2IGJ5IEhhbnMgVmVya3VpbCAoaHZlcmt1aWxAeHM0YWxsLm5sKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9VUEQ2NDAzMUFfSF8KKyNkZWZpbmUgX1VQRDY0MDMxQV9IXworCisvKiBHaG9zdCByZWR1Y3Rpb24gbW9kZXMgKi8KKyNkZWZpbmUgVVBENjQwMzFBX0dSX09OIAkwCisjZGVmaW5lIFVQRDY0MDMxQV9HUl9PRkYgCTEKKyNkZWZpbmUgVVBENjQwMzFBX0dSX1RIUk9VR0ggCTMKKworLyogRGlyZWN0IDNEL1lDUyBDb25uZWN0aW9uICovCisjZGVmaW5lIFVQRDY0MDMxQV8zRFlDU19ESVNBQkxFICAgKDAgPDwgMikKKyNkZWZpbmUgVVBENjQwMzFBXzNEWUNTX0NPTVBPU0lURSAoMiA8PCAyKQorI2RlZmluZSBVUEQ2NDAzMUFfM0RZQ1NfU1ZJREVPICAgICgzIDw8IDIpCisKKy8qIENvbXBvc2l0ZSBzeW5jIGRpZ2l0YWwgc2VwYXJhdGlvbiBjaXJjdWl0ICovCisjZGVmaW5lIFVQRDY0MDMxQV9DT01QT1NJVEVfRVhURVJOQUwgKDEgPDwgNCkKKworLyogVmVydGljYWwgc3luYyBkaWdpdGFsIHNlcGFyYXRpb24gY2lyY3VpdCAqLworI2RlZmluZSBVUEQ2NDAzMUFfVkVSVElDQUxfRVhURVJOQUwgKDEgPDwgNSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3VwZDY0MDgzLmggYi9pbmNsdWRlL21lZGlhL3VwZDY0MDgzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliNmYzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvdXBkNjQwODMuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogdXBkNjQwOHggLSBORUMgRWxlY3Ryb25pY3MgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiBpbnB1dCBkZWZpbmVzCisgKgorICogMjAwNiBieSBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVBENjQwODNfSF8KKyNkZWZpbmUgX1VQRDY0MDgzX0hfCisKKy8qIFRoZXJlIGFyZSB0d28gYml0cyBvZiBpbmZvcm1hdGlvbiB0aGF0IHRoZSBkcml2ZXIgbmVlZHMgaW4gb3JkZXIKKyAgIHRvIHNlbGVjdCB0aGUgY29ycmVjdCByb3V0aW5nOiB0aGUgb3BlcmF0aW5nIG1vZGUgYW5kIHRoZSBzZWxlY3Rpb24KKyAgIG9mIHRoZSBZIGlucHV0IChleHRlcm5hbCBvciBpbnRlcm5hbCkuCisKKyAgIFRoZSBmaXJzdCB0d28gb3BlcmF0aW5nIG1vZGVzIGV4cGVjdCBhIGNvbXBvc2l0ZSBzaWduYWwgb24gdGhlIFkgaW5wdXQsCisgICB0aGUgc2Vjb25kIHR3byBvcGVyYXRpbmcgbW9kZXMgdXNlIGJvdGggdGhlIFkgYW5kIEMgaW5wdXRzLgorCisgICBOb3JtYWxseSBZQ1NfTU9ERSBpcyB1c2VkIGZvciB0dW5lciBhbmQgY29tcG9zaXRlIGlucHV0cywgYW5kIHRoZQorICAgWUNOUiBtb2RlIGlzIHVzZWQgZm9yIFMtVmlkZW8gaW5wdXRzLgorCisgICBUaGUgZXh0ZXJuYWwgWS1BREMgaXMgc2VsZWN0ZWQgd2hlbiB0aGUgY29tcG9zaXRlIGlucHV0IGNvbWVzIGZyb20gYQorICAgdXBkNjQwMzFhIGdob3N0IHJlZHVjdGlvbiBkZXZpY2UuIElmIHRoaXMgZGV2aWNlIGlzIG5vdCBwcmVzZW50LCBvcgorICAgdGhlIGlucHV0IGlzIGEgUy1WaWRlbyBzaWduYWwsIHRoZW4gdGhlIGludGVybmFsIFktQURDIGlucHV0IHNob3VsZAorICAgYmUgdXNlZC4gKi8KKworLyogT3BlcmF0aW5nIG1vZGVzOiAqLworCisvKiBZQ1MgbW9kZTogWS9DIHNlcGFyYXRpb24gKGJ1cnN0IGxvY2tlZCBjbG9ja2luZykgKi8KKyNkZWZpbmUgVVBENjQwODNfWUNTX01PREUgICAgICAwCisvKiBZQ1MrIG1vZGU6IDJEIFkvQyBzZXBhcmF0aW9uIGFuZCBZQ05SIChidXJzdCBsb2NrZWQgY2xvY2tpbmcpICovCisjZGVmaW5lIFVQRDY0MDgzX1lDU19QTFVTX01PREUgMQorCisvKiBOb3RlOiB0aGUgZm9sbG93aW5nIHR3byBtb2RlcyBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorICAgZXh0ZXJuYWwgWS1BREMuICovCisvKiBNTk5SIG1vZGU6IGZyYW1lIGNvbWIgdHlwZSBZTlIrQyBkZWxheSAobGluZSBsb2NrZWQgY2xvY2tpbmcpICovCisjZGVmaW5lIFVQRDY0MDgzX01OTlJfTU9ERSAgICAgMgorLyogWUNOUiBtb2RlOiBmcmFtZSByZWN1cnNpdmUgWUNOUiAoYnVyc3QgbG9ja2VkIGNsb2NraW5nKSAqLworI2RlZmluZSBVUEQ2NDA4M19ZQ05SX01PREUgICAgIDMKKworLyogU2VsZWN0IGV4dGVybmFsIFktQURDOiB0aGlzIHNob3VsZCBiZSBzZXQgaWYgdGhpcyBkZXZpY2UgaXMgdXNlZCBpbgorICAgY29tYmluYXRpb24gd2l0aCB0aGUgdXBkNjQwMzFhIGdob3N0IHJlZHVjdGlvbiBkZXZpY2UuCisgICBPdGhlcndpc2UgbGVhdmUgYXQgMCAodXNlIGludGVybmFsIFktQURDKS4gKi8KKyNkZWZpbmUgVVBENjQwODNfRVhUX1lfQURDICAgICAoMSA8PCAyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FycC5oIGIvaW5jbHVkZS9uZXQvYXJwLmgKaW5kZXggYTEzZTMwYy4uNjQzYmRlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQvYXJwLmgKQEAgLTEwLDggKzEwLDYgQEAKIGV4dGVybiBzdHJ1Y3QgbmVpZ2hfdGFibGUgYXJwX3RibDsKIAogZXh0ZXJuIHZvaWQJYXJwX2luaXQodm9pZCk7Ci1leHRlcm4gaW50CWFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiBleHRlcm4gaW50CWFycF9maW5kKHVuc2lnbmVkIGNoYXIgKmhhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJYXJwX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIHZvaWQgICAgIGFycF9zZW5kKGludCB0eXBlLCBpbnQgcHR5cGUsIHUzMiBkZXN0X2lwLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCBkMDUyYjIyLi41YmQ5OTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDI1LmgKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC0xNDUsMTQgKzE0NSwxNCBAQAogI2RlZmluZQlBWDI1X0RFRl9DT05NT0RFCTIJCQkvKiBDb25uZWN0ZWQgbW9kZSBhbGxvd2VkICovCiAjZGVmaW5lCUFYMjVfREVGX1dJTkRPVwkJMgkJCS8qIFdpbmRvdz0yICovCiAjZGVmaW5lCUFYMjVfREVGX0VXSU5ET1cJMzIJCQkvKiBNb2R1bGUtMTI4IFdpbmRvdz0zMiAqLwotI2RlZmluZQlBWDI1X0RFRl9UMQkJKDEwICogSFopCQkvKiBUMT0xMHMgKi8KLSNkZWZpbmUJQVgyNV9ERUZfVDIJCSgzICogSFopCQkvKiBUMj0zcyAgKi8KLSNkZWZpbmUJQVgyNV9ERUZfVDMJCSgzMDAgKiBIWikJCS8qIFQzPTMwMHMgKi8KKyNkZWZpbmUJQVgyNV9ERUZfVDEJCTEwMDAwCQkJLyogVDE9MTBzICovCisjZGVmaW5lCUFYMjVfREVGX1QyCQkzMDAwCQkJLyogVDI9M3MgICovCisjZGVmaW5lCUFYMjVfREVGX1QzCQkzMDAwMDAJCQkvKiBUMz0zMDBzICovCiAjZGVmaW5lCUFYMjVfREVGX04yCQkxMAkJCS8qIE4yPTEwICovCi0jZGVmaW5lIEFYMjVfREVGX0lETEUJCSgwICogNjAgKiBIWikJCS8qIElkbGU9Tm9uZSAqLworI2RlZmluZSBBWDI1X0RFRl9JRExFCQkwCQkJLyogSWRsZT1Ob25lICovCiAjZGVmaW5lIEFYMjVfREVGX1BBQ0xFTgkJMjU2CQkJLyogUGFjbGVuPTI1NiAqLwogI2RlZmluZQlBWDI1X0RFRl9QUk9UT0NPTAlBWDI1X1BST1RPX1NURF9TSU1QTEVYCS8qIFN0YW5kYXJkIEFYLjI1ICovCi0jZGVmaW5lIEFYMjVfREVGX0RTX1RJTUVPVVQJKDMgKiA2MCAqIEhaKQkJLyogREFNQSB0aW1lb3V0IDMgbWludXRlcyAqLworI2RlZmluZSBBWDI1X0RFRl9EU19USU1FT1VUCTE4MDAwMAkJCS8qIERBTUEgdGltZW91dCAzIG1pbnV0ZXMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYXgyNV91aWRfYXNzb2MgewogCXN0cnVjdCBobGlzdF9ub2RlCXVpZF9ub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29tcGF0LmggYi9pbmNsdWRlL25ldC9jb21wYXQuaAppbmRleCA4NjYyYjhmLi5lNjVjYmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtMyw2ICszLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCitzdHJ1Y3Qgc29jazsKKwogI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgpAQCAtMjMsNyArMjUsNiBAQAogCWNvbXBhdF9pbnRfdAljbXNnX3R5cGU7CiB9OwogCi1zdHJ1Y3Qgc29jazsKIGV4dGVybiBpbnQgY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKik7CiAKICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKaW5kZXggNDcyNWZmOC4uZDU5MjZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTk1NSwxMSArOTU1LDEzIEBACiAKICNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMIDEKICNkZWZpbmUgSUVFRTgwMjExXzI0R0haX01BWF9DSEFOTkVMIDE0Ci0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9DSEFOTkVMUyAgICAxNAorI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCArIDEpCiAKICNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMIDM0CiAjZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAxNjUKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTICAgIDEzMQorI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCArIDEpCiAKIGVudW0gewogCUlFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPSAoMSA8PCAwKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaAppbmRleCBiOTcxZDhjLi4wNTJlZDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCkBAIC05NiwxMCArOTYsMTMgQEAKIAkgKgogCSAqIGJzc3ZhbGlkIGlzIHRydWUgaWYgd2UgZm91bmQgYSBtYXRjaGluZyBuZXR3b3JrCiAJICogYW5kIHNhdmVkIGl0J3MgQlNTSUQgaW50byB0aGUgYnNzaWQgYWJvdmUuCisJICoKKwkgKiBic3NmaXhlZCBpcyB1c2VkIGZvciBTSU9DU0lXQVAuCiAJICovCiAJdTggc3RhdGljX2Vzc2lkOjEsCiAJICAgYXNzb2NpYXRpbmc6MSwKLQkgICBic3N2YWxpZDoxOworCSAgIGJzc3ZhbGlkOjEsCisJICAgYnNzZml4ZWQ6MTsKIAogCS8qIFNjYW4gcmV0cmllcyByZW1haW5pbmcgKi8KIAlpbnQgc2Nhbl9yZXRyeTsKQEAgLTIwMSw3ICsyMDQsOCBAQAogCQogCS8qIGNvdXBsZSBvZiBmbGFncyAqLwogCXU4IHNjYW5uaW5nOjEsIC8qIHByb3RlY3RzIHNjYW5uaW5nIGZyb20gYmVpbmcgZG9uZSBtdWx0aXBsZSB0aW1lcyBhdCBvbmNlICovCi0JICAgYXNzb2NpYXRlZDoxOworCSAgIGFzc29jaWF0ZWQ6MSwKKwkgICBydW5uaW5nOjE7CiAJCiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm8gKnNjYW5pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX2luZm8gYXNzb2NpbmZvOwpAQCAtMjY3LDggKzI3MSw5IEBACiAjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9GQUlMRUQJCTUKICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIX1RJTUVPVVQJCTYKICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfTkVUX05PVF9GT1VORAk3CisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRAkJOAogLyoga2VlcCB0aGlzIHVwZGF0ZWQhICovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfTEFTVAkJCTcKKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUCQkJOAogLyoKICAqIElmIHlvdSB3YW50IHRvIGJlIG5vdGlmaWVkIG9mIGNlcnRhaW4gZXZlbnRzLCB5b3UgY2FuIGNhbGwKICAqIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5W19hdG9taWNdIHdpdGgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaAppbmRleCAyNWY3MDhmLi41OWYwYzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCkBAIC00OCwzMSArNDgsNyBAQAogCXJldHVybiBpbmV0Nl9laGFzaGZuKGxhZGRyLCBscG9ydCwgZmFkZHIsIGZwb3J0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5ldDZfaGFzaChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJc3RydWN0IHNvY2sgKnNrKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OwotCXJ3bG9ja190ICpsb2NrOwotCi0JQlVHX1RSQVAoc2tfdW5oYXNoZWQoc2spKTsKLQotCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQlsaXN0ID0gJmhhc2hpbmZvLT5saXN0ZW5pbmdfaGFzaFtpbmV0X3NrX2xpc3Rlbl9oYXNoZm4oc2spXTsKLQkJbG9jayA9ICZoYXNoaW5mby0+bGhhc2hfbG9jazsKLQkJaW5ldF9saXN0ZW5fd2xvY2soaGFzaGluZm8pOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBoYXNoOwotCQlzay0+c2tfaGFzaCA9IGhhc2ggPSBpbmV0Nl9za19laGFzaGZuKHNrKTsKLQkJaGFzaCAmPSAoaGFzaGluZm8tPmVoYXNoX3NpemUgLSAxKTsKLQkJbGlzdCA9ICZoYXNoaW5mby0+ZWhhc2hbaGFzaF0uY2hhaW47Ci0JCWxvY2sgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmxvY2s7Ci0JCXdyaXRlX2xvY2sobG9jayk7Ci0JfQotCi0JX19za19hZGRfbm9kZShzaywgbGlzdCk7Ci0Jc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOwotCXdyaXRlX3VubG9jayhsb2NrKTsKLX0KK2V4dGVybiB2b2lkIF9faW5ldDZfaGFzaChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sIHN0cnVjdCBzb2NrICpzayk7CiAKIC8qCiAgKiBTb2NrZXRzIGluIFRDUF9DTE9TRSBzdGF0ZSBhcmUgX2Fsd2F5c18gdGFrZW4gb3V0IG9mIHRoZSBoYXNoLCBzbwpAQCAtODAsNTIgKzU2LDEyIEBACiAgKgogICogVGhlIHNvY2toYXNoIGxvY2sgbXVzdCBiZSBoZWxkIGFzIGEgcmVhZGVyIGhlcmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKgotCQlfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCitleHRlcm4gc3RydWN0IHNvY2sgKl9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCQkJICAgY29uc3QgdTE2IHNwb3J0LAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCB1MTYgaG51bSwKLQkJCQkJICAgY29uc3QgaW50IGRpZikKLXsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0JY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JY29uc3QgX191MzIgcG9ydHMgPSBJTkVUX0NPTUJJTkVEX1BPUlRTKHNwb3J0LCBobnVtKTsKLQkvKiBPcHRpbWl6ZSBoZXJlIGZvciBkaXJlY3QgaGl0LCBvbmx5IGxpc3RlbmluZyBjb25uZWN0aW9ucyBjYW4KLQkgKiBoYXZlIHdpbGRjYXJkcyBhbnl3YXlzLgotCSAqLwotCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihkYWRkciwgaG51bSwgc2FkZHIsIHNwb3J0KTsKLQlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSBpbmV0X2VoYXNoX2J1Y2tldChoYXNoaW5mbywgaGFzaCk7Ci0KLQlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7Ci0JcmVhZF9sb2NrKCZoZWFkLT5sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJmhlYWQtPmNoYWluKSB7Ci0JCS8qIEZvciBJUFY2IGRvIHRoZSBjaGVhcGVyIHBvcnQgYW5kIGZhbWlseSB0ZXN0cyBmaXJzdC4gKi8KLQkJaWYgKElORVQ2X01BVENIKHNrLCBoYXNoLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQotCQkJZ290byBoaXQ7IC8qIFlvdSBzdW5rIG15IGJhdHRsZXNoaXAhICovCi0JfQotCS8qIE11c3QgY2hlY2sgZm9yIGEgVElNRV9XQUlUJ2VyIGJlZm9yZSBnb2luZyB0byBsaXN0ZW5lciBoYXNoLiAqLwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmKGhlYWQgKyBoYXNoaW5mby0+ZWhhc2hfc2l6ZSktPmNoYWluKSB7Ci0JCWNvbnN0IHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTsKLQotCQlpZigqKChfX3UzMiAqKSYodHctPnR3X2Rwb3J0KSkJPT0gcG9ydHMJJiYKLQkJICAgc2stPnNrX2ZhbWlseQkJPT0gUEZfSU5FVDYpIHsKLQkJCWNvbnN0IHN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPSBpbmV0Nl90d3NrKHNrKTsKLQotCQkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmdHc2LT50d192Nl9kYWRkciwgc2FkZHIpCSYmCi0JCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X3Jjdl9zYWRkciwgZGFkZHIpCSYmCi0JCQkgICAgKCFzay0+c2tfYm91bmRfZGV2X2lmIHx8IHNrLT5za19ib3VuZF9kZXZfaWYgPT0gZGlmKSkKLQkJCQlnb3RvIGhpdDsKLQkJfQotCX0KLQlyZWFkX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JcmV0dXJuIE5VTEw7Ci0KLWhpdDoKLQlzb2NrX2hvbGQoc2spOwotCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKLQlyZXR1cm4gc2s7Ci19CisJCQkJCSAgIGNvbnN0IGludCBkaWYpOwogCiBleHRlcm4gc3RydWN0IHNvY2sgKmluZXQ2X2xvb2t1cF9saXN0ZW5lcihzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCiAJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKaW5kZXggMWRhMjk0Yy4uZTgzN2Y5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBpbmV0X3R3c2tfZGVhZF9oYXNoZWQoY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcpCiB7Ci0JcmV0dXJuIHR3LT50d19kZWF0aF9ub2RlLnBwcmV2ICE9IE5VTEw7CisJcmV0dXJuICFobGlzdF91bmhhc2hlZCgmdHctPnR3X2RlYXRoX25vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF90d3NrX2RlYWRfbm9kZV9pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggOGZlNjE1Ni4uM2QyZTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC05NSw2ICs5NSw3IEBACiBleHRlcm4gaW50CQlpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX21jX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCWlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpOwogZXh0ZXJuIGludAkJaXBfZG9fbmF0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJCWlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcCk7CiBleHRlcm4gaW50CQlpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIGludCBpcGZyYWdvayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggNmQ2ZjA2My4uNGFiZWRiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQkJCSAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNvY2sgKikpOwogCiAKLWV4dGVybiBpbnQJCQlpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50KTsKK2V4dGVybiBpbnQJCQlpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGV4dGVybiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKiAgaXB2Nl9kdXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KTsKIGV4dGVybiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKglpcHY2X3JlbmV3X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaAppbmRleCA4NmFlZmIxLi5jMGM4OTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwogCi0JSVJMTVBfU1RBVEUgICAgIGxzYXBfc3RhdGU7ICAvKiBDb25uZWN0aW9uIHN0YXRlICovCisJTFNBUF9TVEFURSAgICAgIGxzYXBfc3RhdGU7ICAvKiBDb25uZWN0aW9uIHN0YXRlICovCiAJbm90aWZ5X3QgICAgICAgIG5vdGlmeTsgICAgICAvKiBJbmRpY2F0aW9uL0NvbmZpcm0gZW50cnkgcG9pbnRzICovCiAJc3RydWN0IHFvc19pbmZvIHFvczsgICAgICAgICAvKiBRb1MgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCmluZGV4IGIwNjY2ZDYuLjQ5MDFlZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0yMTEsNiArMjExLDcgQEAKICNkZWZpbmUgTkVJR0hfVVBEQVRFX0ZfQURNSU4JCQkweDgwMDAwMDAwCiAKIGV4dGVybiB2b2lkCQkJbmVpZ2hfdGFibGVfaW5pdChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCk7CitleHRlcm4gdm9pZAkJCW5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluayhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCk7CiBleHRlcm4gaW50CQkJbmVpZ2hfdGFibGVfY2xlYXIoc3RydWN0IG5laWdoX3RhYmxlICp0YmwpOwogZXh0ZXJuIHN0cnVjdCBuZWlnaGJvdXIgKgluZWlnaF9sb29rdXAoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsCiAJCQkJCSAgICAgY29uc3Qgdm9pZCAqcGtleSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldHJvbS5oIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKaW5kZXggYTVlZTUzYi4uZTBjYTExMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0cm9tLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKQEAgLTQyLDExICs0MiwxMSBAQAogI2RlZmluZQlOUl9DT05EX1BFRVJfUlhfQlVTWQkJMHgwNAogI2RlZmluZQlOUl9DT05EX09XTl9SWF9CVVNZCQkweDA4CiAKLSNkZWZpbmUgTlJfREVGQVVMVF9UMQkJCSgxMjAgKiBIWikJLyogT3V0c3RhbmRpbmcgZnJhbWVzIC0gMTIwIHNlY29uZHMgKi8KLSNkZWZpbmUgTlJfREVGQVVMVF9UMgkJCSg1ICAgKiBIWikJLyogUmVzcG9uc2UgZGVsYXkgICAgIC0gNSBzZWNvbmRzICovCisjZGVmaW5lIE5SX0RFRkFVTFRfVDEJCQkxMjAwMDAJCS8qIE91dHN0YW5kaW5nIGZyYW1lcyAtIDEyMCBzZWNvbmRzICovCisjZGVmaW5lIE5SX0RFRkFVTFRfVDIJCQk1MDAwCQkvKiBSZXNwb25zZSBkZWxheSAgICAgLSA1IHNlY29uZHMgKi8KICNkZWZpbmUgTlJfREVGQVVMVF9OMgkJCTMJCS8qIE51bWJlciBvZiBSZXRyaWVzIC0gMyAqLwotI2RlZmluZQlOUl9ERUZBVUxUX1Q0CQkJKDE4MCAqIEhaKQkvKiBCdXN5IERlbGF5IC0gMTgwIHNlY29uZHMgKi8KLSNkZWZpbmUJTlJfREVGQVVMVF9JRExFCQkJKDAgKiA2MCAqIEhaKQkvKiBObyBBY3Rpdml0eSBUaW1lb3V0IC0gbm9uZSAqLworI2RlZmluZQlOUl9ERUZBVUxUX1Q0CQkJMTgwMDAwCQkvKiBCdXN5IERlbGF5IC0gMTgwIHNlY29uZHMgKi8KKyNkZWZpbmUJTlJfREVGQVVMVF9JRExFCQkJMAkJLyogTm8gQWN0aXZpdHkgVGltZW91dCAtIG5vbmUgKi8KICNkZWZpbmUJTlJfREVGQVVMVF9XSU5ET1cJCTQJCS8qIERlZmF1bHQgV2luZG93IFNpemUgLSA0ICovCiAjZGVmaW5lCU5SX0RFRkFVTFRfT0JTCQkJNgkJLyogRGVmYXVsdCBPYnNvbGVzY2VuY2UgQ291bnQgLSA2ICovCiAjZGVmaW5lCU5SX0RFRkFVTFRfUVVBTAkJCTEwCQkvKiBEZWZhdWx0IE5laWdoYm91ciBRdWFsaXR5IC0gMTAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jvc2UuaCBiL2luY2x1ZGUvbmV0L3Jvc2UuaAppbmRleCAzMjQ5Yjk3Li4wMTJiMDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3NlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm9zZS5oCkBAIC00OSwxNCArNDksMTQgQEAKIAlST1NFX1NUQVRFXzUJCQkvKiBEZWZlcnJlZCBDYWxsIEFjY2VwdGFuY2UgKi8KIH07CiAKLSNkZWZpbmUgUk9TRV9ERUZBVUxUX1QwCQkJKDE4MCAqIEhaKQkvKiBEZWZhdWx0IFQxMCBUMjAgdmFsdWUgKi8KLSNkZWZpbmUgUk9TRV9ERUZBVUxUX1QxCQkJKDIwMCAqIEhaKQkvKiBEZWZhdWx0IFQxMSBUMjEgdmFsdWUgKi8KLSNkZWZpbmUgUk9TRV9ERUZBVUxUX1QyCQkJKDE4MCAqIEhaKQkvKiBEZWZhdWx0IFQxMiBUMjIgdmFsdWUgKi8KLSNkZWZpbmUJUk9TRV9ERUZBVUxUX1QzCQkJKDE4MCAqIEhaKQkvKiBEZWZhdWx0IFQxMyBUMjMgdmFsdWUgKi8KLSNkZWZpbmUJUk9TRV9ERUZBVUxUX0hCCQkJKDUgKiBIWikJLyogRGVmYXVsdCBIb2xkYmFjayB2YWx1ZSAqLwotI2RlZmluZQlST1NFX0RFRkFVTFRfSURMRQkJKDAgKiA2MCAqIEhaKQkvKiBObyBBY3Rpdml0eSBUaW1lb3V0IC0gbm9uZSAqLworI2RlZmluZSBST1NFX0RFRkFVTFRfVDAJCQkxODAwMDAJCS8qIERlZmF1bHQgVDEwIFQyMCB2YWx1ZSAqLworI2RlZmluZSBST1NFX0RFRkFVTFRfVDEJCQkyMDAwMDAJCS8qIERlZmF1bHQgVDExIFQyMSB2YWx1ZSAqLworI2RlZmluZSBST1NFX0RFRkFVTFRfVDIJCQkxODAwMDAJCS8qIERlZmF1bHQgVDEyIFQyMiB2YWx1ZSAqLworI2RlZmluZQlST1NFX0RFRkFVTFRfVDMJCQkxODAwMDAJCS8qIERlZmF1bHQgVDEzIFQyMyB2YWx1ZSAqLworI2RlZmluZQlST1NFX0RFRkFVTFRfSEIJCQk1MDAwCQkvKiBEZWZhdWx0IEhvbGRiYWNrIHZhbHVlICovCisjZGVmaW5lCVJPU0VfREVGQVVMVF9JRExFCQkwCQkvKiBObyBBY3Rpdml0eSBUaW1lb3V0IC0gbm9uZSAqLwogI2RlZmluZQlST1NFX0RFRkFVTFRfUk9VVElORwkJMQkJLyogRGVmYXVsdCByb3V0aW5nIGZsYWcgKi8KLSNkZWZpbmUJUk9TRV9ERUZBVUxUX0ZBSUxfVElNRU9VVAkoMTIwICogSFopCS8qIFRpbWUgdW50aWwgbGluayBjb25zaWRlcmVkIHVzYWJsZSAqLworI2RlZmluZQlST1NFX0RFRkFVTFRfRkFJTF9USU1FT1VUCTEyMDAwMAkJLyogVGltZSB1bnRpbCBsaW5rIGNvbnNpZGVyZWQgdXNhYmxlICovCiAjZGVmaW5lCVJPU0VfREVGQVVMVF9NQVhWQwkJNTAJCS8qIE1heGltdW0gbnVtYmVyIG9mIFZDcyBwZXIgbmVpZ2hib3VyICovCiAjZGVmaW5lCVJPU0VfREVGQVVMVF9XSU5ET1dfU0laRQk3CQkvKiBEZWZhdWx0IHdpbmRvdyBzaXplICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKaW5kZXggMzRhMWEwOS4uODA3ZDZmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKQEAgLTk5LDYgKzk5LDcgQEAKIAlTQ1RQX0NNRF9ERUxfTk9OX1BSSU1BUlksIC8qIFJlbW92ZXMgbm9uLXByaW1hcnkgcGVlciB0cmFuc3BvcnRzLiAqLwogCVNDVFBfQ01EX1QzX1JUWF9USU1FUlNfU1RPUCwgLyogU3RvcHMgVDMtcnR4IHBlbmRpbmcgdGltZXJzICovCiAJU0NUUF9DTURfRk9SQ0VfUFJJTV9SRVRSQU4sICAvKiBGb3JjZXMgcmV0cmFucy4gb3ZlciBwcmltYXJ5IHBhdGguICovCisJU0NUUF9DTURfU0VUX1NLX0VSUiwJIC8qIFNldCBza19lcnIgKi8KIAlTQ1RQX0NNRF9MQVNUCiB9IHNjdHBfdmVyYl90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGU2NzNiMmMuLmFhNjAzM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC00NjEsMTIgKzQ2MSwxMiBAQAogICogdGhlcmUgaXMgcm9vbSBmb3IgYSBwYXJhbSBoZWFkZXIgdG9vLgogICovCiAjZGVmaW5lIHNjdHBfd2Fsa19wYXJhbXMocG9zLCBjaHVuaywgbWVtYmVyKVwKLV9zY3RwX3dhbGtfcGFyYW1zKChwb3MpLCAoY2h1bmspLCBXT1JEX1JPVU5EKG50b2hzKChjaHVuayktPmNodW5rX2hkci5sZW5ndGgpKSwgbWVtYmVyKQorX3NjdHBfd2Fsa19wYXJhbXMoKHBvcyksIChjaHVuayksIG50b2hzKChjaHVuayktPmNodW5rX2hkci5sZW5ndGgpLCBtZW1iZXIpCiAKICNkZWZpbmUgX3NjdHBfd2Fsa19wYXJhbXMocG9zLCBjaHVuaywgZW5kLCBtZW1iZXIpXAogZm9yIChwb3MudiA9IGNodW5rLT5tZW1iZXI7XAogICAgICBwb3MudiA8PSAodm9pZCAqKWNodW5rICsgZW5kIC0gc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCkgJiZcCi0gICAgIHBvcy52IDw9ICh2b2lkICopY2h1bmsgKyBlbmQgLSBXT1JEX1JPVU5EKG50b2hzKHBvcy5wLT5sZW5ndGgpKSAmJlwKKyAgICAgcG9zLnYgPD0gKHZvaWQgKiljaHVuayArIGVuZCAtIG50b2hzKHBvcy5wLT5sZW5ndGgpICYmXAogICAgICBudG9ocyhwb3MucC0+bGVuZ3RoKSA+PSBzaXplb2Yoc2N0cF9wYXJhbWhkcl90KTtcCiAgICAgIHBvcy52ICs9IFdPUkRfUk9VTkQobnRvaHMocG9zLnAtPmxlbmd0aCkpKQogCkBAIC00NzcsNyArNDc3LDcgQEAKIGZvciAoZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKiljaHVua19oZHIgKyBcCiAJICAgIHNpemVvZihzY3RwX2NodW5raGRyX3QpKTtcCiAgICAgICh2b2lkICopZXJyIDw9ICh2b2lkICopY2h1bmtfaGRyICsgZW5kIC0gc2l6ZW9mKHNjdHBfZXJyaGRyX3QpICYmXAotICAgICAodm9pZCAqKWVyciA8PSAodm9pZCAqKWNodW5rX2hkciArIGVuZCAtIFdPUkRfUk9VTkQobnRvaHMoZXJyLT5sZW5ndGgpKSAmJlwKKyAgICAgKHZvaWQgKillcnIgPD0gKHZvaWQgKiljaHVua19oZHIgKyBlbmQgLSBudG9ocyhlcnItPmxlbmd0aCkgJiZcCiAgICAgIG50b2hzKGVyci0+bGVuZ3RoKSA+PSBzaXplb2Yoc2N0cF9lcnJoZHJfdCk7IFwKICAgICAgZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKillcnIgKyBXT1JEX1JPVU5EKG50b2hzKGVyci0+bGVuZ3RoKSkpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IGViYTk5ZjMuLjdmNGZlYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC03MTIsNiArNzEyLDcgQEAKIAlfX3U4IHRzbl9nYXBfYWNrZWQ7CS8qIElzIHRoaXMgY2h1bmsgYWNrZWQgYnkgYSBHQVAgQUNLPyAqLwogCV9fczggZmFzdF9yZXRyYW5zbWl0OwkgLyogSXMgdGhpcyBjaHVuayBmYXN0IHJldHJhbnNtaXR0ZWQ/ICovCiAJX191OCB0c25fbWlzc2luZ19yZXBvcnQ7IC8qIERhdGEgY2h1bmsgbWlzc2luZyBjb3VudGVyLiAqLworCV9fdTggZGF0YV9hY2NlcHRlZDsgCS8qIEF0IGxlYXN0IDEgY2h1bmsgaW4gdGhpcyBwYWNrZXQgYWNjZXB0ZWQgKi8KIH07CiAKIHZvaWQgc2N0cF9jaHVua19ob2xkKHN0cnVjdCBzY3RwX2NodW5rICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGFmMmIwNTQuLmM5ZmFkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTI3OSw3ICsyNzksNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBza19oYXNoZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBzay0+c2tfbm9kZS5wcHJldiAhPSBOVUxMOworCXJldHVybiAhc2tfdW5oYXNoZWQoc2spOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNrX25vZGVfaW5pdChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKQEAgLTQ1NCw2ICs0NTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tfc3RyZWFtX2ZyZWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlza2JfdHJ1ZXNpemVfY2hlY2soc2tiKTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1FVRVVFX1NIUlVOSyk7CiAJc2stPnNrX3dtZW1fcXVldWVkICAgLT0gc2tiLT50cnVlc2l6ZTsKIAlzay0+c2tfZm9yd2FyZF9hbGxvYyArPSBza2ItPnRydWVzaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveDI1ZGV2aWNlLmggYi9pbmNsdWRlL25ldC94MjVkZXZpY2UuaAppbmRleCAxYTMxODM3Li4xZDEwYzg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94MjVkZXZpY2UuaAorKysgYi9pbmNsdWRlL25ldC94MjVkZXZpY2UuaApAQCAtOCw2ICs4LDcgQEAKIHN0YXRpYyBpbmxpbmUgX19iZTE2IHgyNV90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAkKIAlyZXR1cm4gaHRvbnMoRVRIX1BfWDI1KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCBlMTAwMjkxLi5hZmE1MDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xNDMsNiArMTQzLDExIEBACiAJLyogUmVwbGF5IGRldGVjdGlvbiBzdGF0ZSBhdCB0aGUgdGltZSB3ZSBzZW50IHRoZSBsYXN0IG5vdGlmaWNhdGlvbiAqLwogCXN0cnVjdCB4ZnJtX3JlcGxheV9zdGF0ZSBwcmVwbGF5OwogCisJLyogaW50ZXJuYWwgZmxhZyB0aGF0IG9ubHkgaG9sZHMgc3RhdGUgZm9yIGRlbGF5ZWQgYWV2ZW50IGF0IHRoZQorCSAqIG1vbWVudAorCSovCisJdTMyCQkJeGZsYWdzOworCiAJLyogUmVwbGF5IGRldGVjdGlvbiBub3RpZmljYXRpb24gc2V0dGluZ3MgKi8KIAl1MzIJCQlyZXBsYXlfbWF4YWdlOwogCXUzMgkJCXJlcGxheV9tYXhkaWZmOwpAQCAtMTY4LDYgKzE3Myw5IEBACiAJdm9pZAkJCSpkYXRhOwogfTsKIAorLyogeGZsYWdzIC0gbWFrZSBlbnVtIGlmIG1vcmUgc2hvdyB1cCAqLworI2RlZmluZSBYRlJNX1RJTUVfREVGRVIJMQorCiBlbnVtIHsKIAlYRlJNX1NUQVRFX1ZPSUQsCiAJWEZSTV9TVEFURV9BQ1EsCkBAIC0yNDIsNyArMjUwLDYgQEAKIAogZXh0ZXJuIHZvaWQgeGZybV9zdGF0ZV9kZWxldGVfdHVubmVsKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIAotc3RydWN0IHhmcm1fZGVjYXBfc3RhdGU7CiBzdHJ1Y3QgeGZybV90eXBlCiB7CiAJY2hhcgkJCSpkZXNjcmlwdGlvbjsKQEAgLTI1MSw3ICsyNTgsNyBAQAogCiAJaW50CQkJKCppbml0X3N0YXRlKShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiAJdm9pZAkJCSgqZGVzdHJ1Y3Rvcikoc3RydWN0IHhmcm1fc3RhdGUgKik7Ci0JaW50CQkJKCppbnB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKiwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CQkJKCppbnB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CQkJKCpvdXRwdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCBza19idWZmICpwc2tiKTsKIAkvKiBFc3RpbWF0ZSBtYXhpbWFsIHNpemUgb2YgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIG9mIGEgZGdyYW0gKi8KIAl1MzIJCQkoKmdldF9tYXhfc2l6ZSkoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50IHNpemUpOwpAQCAtNjA2LDI1ICs2MTMsMTEgQEAKIAogZXh0ZXJuIHZvaWQgeGZybV9kc3RfaWZkb3duKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLS8qIERlY2Fwc3VsYXRpb24gc3RhdGUsIHVzZWQgYnkgdGhlIGlucHV0IHRvIHN0b3JlIGRhdGEgZHVyaW5nCi0gKiBkZWNhcHN1bGF0aW9uIHByb2NlZHVyZSwgdG8gYmUgdXNlZCBsYXRlciAoZHVyaW5nIHRoZSBwb2xpY3kKLSAqIGNoZWNrCi0gKi8KLXN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlIHsKLQljaGFyCWRlY2FwX2RhdGFbMjBdOwotCV9fdTE2CWRlY2FwX3R5cGU7Ci19OyAgIAotCi1zdHJ1Y3Qgc2VjX2RlY2FwX3N0YXRlIHsKLQlzdHJ1Y3QgeGZybV9zdGF0ZQkqeHZlYzsKLQlzdHJ1Y3QgeGZybV9kZWNhcF9zdGF0ZSBkZWNhcDsKLX07Ci0KIHN0cnVjdCBzZWNfcGF0aAogewogCWF0b21pY190CQlyZWZjbnQ7CiAJaW50CQkJbGVuOwotCXN0cnVjdCBzZWNfZGVjYXBfc3RhdGUJeFtYRlJNX01BWF9ERVBUSF07CisJc3RydWN0IHhmcm1fc3RhdGUJKnh2ZWNbWEZSTV9NQVhfREVQVEhdOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvYnVsa21lbS5oIGIvaW5jbHVkZS9wY21jaWEvYnVsa21lbS5oCmluZGV4IGI1M2I3OGQuLjZiYzc0NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2J1bGttZW0uaAorKysgYi9pbmNsdWRlL3BjbWNpYS9idWxrbWVtLmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgUkVHSU9OX0JBUl9NQVNLCQkweGUwMDAKICNkZWZpbmUgUkVHSU9OX0JBUl9TSElGVAkxMwogCi1pbnQgcGNtY2lhX2dldF9maXJzdF9yZWdpb24oY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgcmVnaW9uX2luZm9fdCAqcmduKTsKLWludCBwY21jaWFfZ2V0X25leHRfcmVnaW9uKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHJlZ2lvbl9pbmZvX3QgKnJnbik7CitpbnQgcGNtY2lhX2dldF9maXJzdF9yZWdpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgcmVnaW9uX2luZm9fdCAqcmduKTsKK2ludCBwY21jaWFfZ2V0X25leHRfcmVnaW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHJlZ2lvbl9pbmZvX3QgKnJnbik7CiAKICNlbmRpZiAvKiBfTElOVVhfQlVMS01FTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmggYi9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmgKaW5kZXggZGExOWMyOS4uYzFkYTg1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBjaXNjb2RlLmggLS0gRGVmaW5pdGlvbnMgZm9yIGJ1bGsgbWVtb3J5IHNlcnZpY2VzCisgKiBjaXNjb2RlLmgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEyMiw0ICsxMjIsNyBAQAogCiAjZGVmaW5lIE1BTkZJRF9YSVJDT00JCQkweDAxMDUKIAorI2RlZmluZSBNQU5GSURfUE9TU0lPCQkJMHgwMzBjCisjZGVmaW5lIFBST0RJRF9QT1NTSU9fR0NDCQkweDAwMDMKKwogI2VuZGlmIC8qIF9MSU5VWF9DSVNDT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oIGIvaW5jbHVkZS9wY21jaWEvY2lzdHBsLmgKaW5kZXggYzZhMDY5NS4uZDNiYmIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY2lzdHBsLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvY2lzdHBsLmgKQEAgLTU4NiwxMiArNTg2LDcgQEAKICAgICBjaXNkYXRhX3QJRGF0YVtDSVNUUExfTUFYX0NJU19TSVpFXTsKIH0gY2lzZHVtcF90OwogCi1pbnQgcGNtY2lhX2dldF9maXJzdF90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSk7Ci1pbnQgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIHR1cGxlX3QgKnR1cGxlKTsKLWludCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoY2xpZW50X2hhbmRsZV90IGhhbmRsZSwgdHVwbGVfdCAqdHVwbGUpOwotaW50IHBjbWNpYV9wYXJzZV90dXBsZShjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpOwogCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX2NpcyhjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBjaXNpbmZvX3QgKmluZm8pOwogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgY2lzZHVtcF90ICpjaXMpOwogCiAvKiBkb24ndCB1c2Ugb3V0c2lkZSBvZiBQQ01DSUEgY29yZSB5ZXQgKi8KQEAgLTYwMiw0ICs1OTcsMjAgQEAKIAogaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgY2lzaW5mb190ICppbmZvKTsKIAorLyogLi4uIGJ1dCB1c2UgdGhlc2Ugd3JhcHBlcnMgaW5zdGVhZCAqLworI2RlZmluZSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LCB0dXBsZSkgXAorCQlwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSkKKworI2RlZmluZSBwY21jaWFfZ2V0X25leHRfdHVwbGUocF9kZXYsIHR1cGxlKSBcCisJCXBjY2FyZF9nZXRfbmV4dF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCisKKyNkZWZpbmUgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBfZGV2LCB0dXBsZSkgXAorCQlwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocF9kZXYtPnNvY2tldCwgdHVwbGUpCisKKyNkZWZpbmUgcGNtY2lhX3BhcnNlX3R1cGxlKHBfZGV2LCB0dXBsZSwgcGFyc2UpIFwKKwkJcGNjYXJkX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSkKKworI2RlZmluZSBwY21jaWFfdmFsaWRhdGVfY2lzKHBfZGV2LCBpbmZvKSBcCisJCXBjY2FyZF92YWxpZGF0ZV9jaXMocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIGluZm8pCisKICNlbmRpZiAvKiBMSU5VWF9DSVNUUExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3MuaCBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKaW5kZXggNTI2NjBmMy4uZDU4MzhjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC0xMDksMTcgKzEwOSw2IEBACiAKICNkZWZpbmUgQ0xJRU5UX1RISVNfU09DS0VUCTB4MDEKIAotLyogRm9yIFJlZ2lzdGVyQ2xpZW50ICovCi10eXBlZGVmIHN0cnVjdCBjbGllbnRfcmVnX3QgewotICAgIGRldl9pbmZvX3QJKmRldl9pbmZvOwotICAgIHVfaW50CUF0dHJpYnV0ZXM7ICAvKiBVTlVTRUQgKi8KLSAgICB1X2ludAlFdmVudE1hc2s7Ci0gICAgaW50CQkoKmV2ZW50X2hhbmRsZXIpKGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSwKLQkJCQkgZXZlbnRfY2FsbGJhY2tfYXJnc190ICopOwotICAgIGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCBldmVudF9jYWxsYmFja19hcmdzOwotICAgIHVfaW50CVZlcnNpb247Ci19IGNsaWVudF9yZWdfdDsKLQogLyogTW9kaWZ5Q29uZmlndXJhdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgbW9kY29uZl90IHsKICAgICB1X2ludAlBdHRyaWJ1dGVzOwpAQCAtMTI3LDE1ICsxMTYsMTYgQEAKIH0gbW9kY29uZl90OwogCiAvKiBBdHRyaWJ1dGVzIGZvciBNb2RpZnlDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIENPTkZfSVJRX0NIQU5HRV9WQUxJRAkweDEwMAotI2RlZmluZSBDT05GX1ZDQ19DSEFOR0VfVkFMSUQJMHgyMDAKLSNkZWZpbmUgQ09ORl9WUFAxX0NIQU5HRV9WQUxJRAkweDQwMAotI2RlZmluZSBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElECTB4ODAwCisjZGVmaW5lIENPTkZfSVJRX0NIQU5HRV9WQUxJRAkweDAxMDAKKyNkZWZpbmUgQ09ORl9WQ0NfQ0hBTkdFX1ZBTElECTB4MDIwMAorI2RlZmluZSBDT05GX1ZQUDFfQ0hBTkdFX1ZBTElECTB4MDQwMAorI2RlZmluZSBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElECTB4MDgwMAorI2RlZmluZSBDT05GX0lPX0NIQU5HRV9XSURUSAkweDEwMDAKIAogLyogRm9yIFJlcXVlc3RDb25maWd1cmF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBjb25maWdfcmVxX3QgewogICAgIHVfaW50CUF0dHJpYnV0ZXM7Ci0gICAgdV9pbnQJVmNjLCBWcHAxLCBWcHAyOworICAgIHVfaW50CVZwcDsgLyogYm90aCBWcHAxIGFuZCBWcHAyICovCiAgICAgdV9pbnQJSW50VHlwZTsKICAgICB1X2ludAlDb25maWdCYXNlOwogICAgIHVfY2hhcglTdGF0dXMsIFBpbiwgQ29weSwgRXh0U3RhdHVzOwpAQCAtMzg5LDIzICszNzksMjcgQEAKIGludCBwY21jaWFfZ2V0X21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOwogaW50IHBjbWNpYV9tYXBfbWVtX3BhZ2Uod2luZG93X2hhbmRsZV90IHdpbiwgbWVtcmVxX3QgKnJlcSk7CiBpbnQgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgbW9kY29uZl90ICptb2QpOwotaW50IHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLWludCBwY21jaWFfcmVsZWFzZV9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9yZWxlYXNlX2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luZG93X2hhbmRsZV90IHdpbik7CiBpbnQgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNvbmZpZ19yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfcmVxdWVzdF9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpOwogaW50IHBjbWNpYV9yZXF1ZXN0X2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKTsKIGludCBwY21jaWFfcmVxdWVzdF93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKipwX2Rldiwgd2luX3JlcV90ICpyZXEsIHdpbmRvd19oYW5kbGVfdCAqd2gpOwotaW50IHBjbWNpYV9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY2xpZW50X3JlcV90ICpyZXEpOwogaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiBpbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK2ludCBwY2NhcmRfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKKworc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBwY21jaWFfZGV2X3ByZXNlbnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3ZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKIHN0cnVjdCBwY21jaWFfc29ja2V0ICogcGNtY2lhX2dldF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiB2b2lkIHBjbWNpYV9wdXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogCisvKiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyAqLworI2RlZmluZSBwY21jaWFfcmVzZXRfY2FyZChwX2RldiwgcmVxKSBcCisJCXBjY2FyZF9yZXNldF9jYXJkKHBfZGV2LT5zb2NrZXQpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZHMuaCBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKaW5kZXggOGUyYTk2My4uOGMzMzlmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvZHMuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kcy5oCkBAIC0zOSw3ICszOSw3IEBACiB0eXBlZGVmIHN0cnVjdCBiaW5kX2luZm9fdCB7CiAgICAgZGV2X2luZm9fdAkJZGV2X2luZm87CiAgICAgdV9jaGFyCQlmdW5jdGlvbjsKLSAgICBzdHJ1Y3QgZGV2X2xpbmtfdAkqaW5zdGFuY2U7CisgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmluc3RhbmNlOwogICAgIGNoYXIJCW5hbWVbREVWX05BTUVfTEVOXTsKICAgICB1X3Nob3J0CQltYWpvciwgbWlub3I7CiAgICAgdm9pZAkJKm5leHQ7CkBAIC05Niw2ICs5Niw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKIHR5cGVkZWYgc3RydWN0IGRldl9ub2RlX3QgewogICAgIGNoYXIJCWRldl9uYW1lW0RFVl9OQU1FX0xFTl07CkBAIC0xMDMsMzQgKzEwNCw5IEBACiAgICAgc3RydWN0IGRldl9ub2RlX3QJKm5leHQ7CiB9IGRldl9ub2RlX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGRldl9saW5rX3QgewotICAgIGRldl9ub2RlX3QJCSpkZXY7Ci0gICAgdV9pbnQJCXN0YXRlLCBvcGVuOwotICAgIHdhaXRfcXVldWVfaGVhZF90CXBlbmRpbmc7Ci0gICAgY2xpZW50X2hhbmRsZV90CWhhbmRsZTsKLSAgICBpb19yZXFfdAkJaW87Ci0gICAgaXJxX3JlcV90CQlpcnE7Ci0gICAgY29uZmlnX3JlcV90CWNvbmY7Ci0gICAgd2luZG93X2hhbmRsZV90CXdpbjsKLSAgICB2b2lkCQkqcHJpdjsKLSAgICBzdHJ1Y3QgZGV2X2xpbmtfdAkqbmV4dDsKLX0gZGV2X2xpbmtfdDsKLQotLyogRmxhZ3MgZm9yIGRldmljZSBzdGF0ZSAqLwotI2RlZmluZSBERVZfUFJFU0VOVAkJMHgwMQotI2RlZmluZSBERVZfQ09ORklHCQkweDAyCi0jZGVmaW5lIERFVl9TVEFMRV9DT05GSUcJMHgwNAkvKiByZWxlYXNlIG9uIGNsb3NlICovCi0jZGVmaW5lIERFVl9TVEFMRV9MSU5LCQkweDA4CS8qIGRldGFjaCBvbiByZWxlYXNlICovCi0jZGVmaW5lIERFVl9DT05GSUdfUEVORElORwkweDEwCi0jZGVmaW5lIERFVl9SRUxFQVNFX1BFTkRJTkcJMHgyMAotI2RlZmluZSBERVZfU1VTUEVORAkJMHg0MAotI2RlZmluZSBERVZfQlVTWQkJMHg4MAotCi0jZGVmaW5lIERFVl9PSyhsKSBcCi0gICAgKChsKSAmJiAoKGwtPnN0YXRlICYgfkRFVl9CVVNZKSA9PSAoREVWX0NPTkZJR3xERVZfUFJFU0VOVCkpKQotCiAKIHN0cnVjdCBwY21jaWFfc29ja2V0Oworc3RydWN0IGNvbmZpZ190OwogCiBzdHJ1Y3QgcGNtY2lhX2RyaXZlciB7CiAJaW50ICgqcHJvYmUpCQkoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldik7CkBAIC0xNDgsNiArMTI0LDcgQEAKIGludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpOwogdm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcik7CiAKKwogc3RydWN0IHBjbWNpYV9kZXZpY2UgewogCS8qIHRoZSBzb2NrZXQgYW5kIHRoZSBkZXZpY2Vfbm8gW2ZvciBtdWx0aWZ1bmN0aW9uIGRldmljZXNdCiAJICAgdW5pcXVlbHkgZGVmaW5lIGEgcGNtY2lhX2RldmljZSAqLwpAQCAtMTYwLDIxICsxMzcsNDAgQEAKIAkvKiB0aGUgaGFyZHdhcmUgImZ1bmN0aW9uIiBkZXZpY2U7IGNlcnRhaW4gc3ViZGV2aWNlcyBjYW4KIAkgKiBzaGFyZSBvbmUgaGFyZHdhcmUgImZ1bmN0aW9uIiBkZXZpY2UuICovCiAJdTgJCQlmdW5jOworCXN0cnVjdCBjb25maWdfdCoJZnVuY3Rpb25fY29uZmlnOwogCiAJc3RydWN0IGxpc3RfaGVhZAlzb2NrZXRfZGV2aWNlX2xpc3Q7CiAKLQkvKiBkZXByZWNhdGVkLCBhIGNsZWFuZWQgdXAgdmVyc2lvbiB3aWxsIGJlIG1vdmVkIGludG8gdGhpcwotCSAgIHN0cnVjdCBzb29uICovCi0JZGV2X2xpbmtfdAkJKmluc3RhbmNlOwotCXVfaW50CQkJc3RhdGU7CisJLyogZGVwcmVjYXRlZCwgd2lsbCBiZSBjbGVhbmVkIHVwIHNvb24gKi8KKwlkZXZfbm9kZV90CQkqZGV2X25vZGU7CisJdV9pbnQJCQlvcGVuOworCWlvX3JlcV90CQlpbzsKKwlpcnFfcmVxX3QJCWlycTsKKwljb25maWdfcmVxX3QJCWNvbmY7CisJd2luZG93X2hhbmRsZV90CQl3aW47CisKKwkvKiBJcyB0aGUgZGV2aWNlIHN1c3BlbmRlZCwgb3IgaW4gdGhlIHByb2Nlc3Mgb2YKKwkgKiBiZWluZyByZW1vdmVkPyAqLworCXUxNgkJCXN1c3BlbmRlZDoxOworCXUxNgkJCV9yZW1vdmVkOjE7CisKKwkvKiBGbGFncyB3aGV0aGVyIGlvLCBpcnEsIHdpbiBjb25maWd1cmF0aW9ucyB3ZXJlCisJICogcmVxdWVzdGVkLCBhbmQgd2hldGhlciB0aGUgY29uZmlndXJhdGlvbiBpcyAibG9ja2VkIiAqLworCXUxNgkJCV9pcnE6MTsKKwl1MTYJCQlfaW86MTsKKwl1MTYJCQlfd2luOjQ7CisJdTE2CQkJX2xvY2tlZDoxOworCisJLyogRmxhZyB3aGV0aGVyIGEgImZ1enp5IiBmdW5jX2lkIGJhc2VkIG1hdGNoIGlzCisJICogYWxsb3dlZC4gKi8KKwl1MTYJCQlhbGxvd19mdW5jX2lkX21hdGNoOjE7CiAKIAkvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRldmljZSAqLwotCXU4CQkJaGFzX21hbmZfaWQ6MTsKLQl1OAkJCWhhc19jYXJkX2lkOjE7Ci0JdTgJCQloYXNfZnVuY19pZDoxOworCXUxNgkJCWhhc19tYW5mX2lkOjE7CisJdTE2CQkJaGFzX2NhcmRfaWQ6MTsKKwl1MTYJCQloYXNfZnVuY19pZDoxOwogCi0JdTgJCQlhbGxvd19mdW5jX2lkX21hdGNoOjE7Ci0JdTgJCQlyZXNlcnZlZDo0OworCXUxNgkJCXJlc2VydmVkOjM7CiAKIAl1OAkJCWZ1bmNfaWQ7CiAJdTE2CQkJbWFuZl9pZDsKQEAgLTE4MiwyMiArMTc4LDI0IEBACiAKIAljaGFyICoJCQlwcm9kX2lkWzRdOwogCisJc3RydWN0IGRldmljZQkJZGV2OworCisjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCS8qIGRldmljZSBkcml2ZXIgd2FudGVkIGJ5IGNhcmRtZ3IgKi8KIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqCWNhcmRtZ3I7CisjZW5kaWYKIAotCXN0cnVjdCBkZXZpY2UJCWRldjsKKwkvKiBkYXRhIHByaXZhdGUgdG8gZHJpdmVycyAqLworCXZvaWQJCQkqcHJpdjsKIH07CiAKICNkZWZpbmUgdG9fcGNtY2lhX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjbWNpYV9kZXZpY2UsIGRldikKICNkZWZpbmUgdG9fcGNtY2lhX2RydihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjbWNpYV9kcml2ZXIsIGRydikKIAotI2RlZmluZSBoYW5kbGVfdG9fcGRldihoYW5kbGUpIChoYW5kbGUpCiAjZGVmaW5lIGhhbmRsZV90b19kZXYoaGFuZGxlKSAoaGFuZGxlLT5kZXYpCiAKLSNkZWZpbmUgZGV2X3RvX2luc3RhbmNlKGRldikgKGRldi0+aW5zdGFuY2UpCi0KIC8qIGVycm9yIHJlcG9ydGluZyAqLwotdm9pZCBjc19lcnJvcihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCk7Cit2b2lkIGNzX2Vycm9yKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIGludCBmdW5jLCBpbnQgcmV0KTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggMjg4OWE2OS4uNWUwYTAxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogdGFza19zdHJ1Y3QsIGNvbXBsZXRpb24gKi8KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC0xNDYsMTQgKzE0NywxNSBAQAogLyogIVNTX0NBUF9TVEFUSUNfTUFQICovCiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX25vbnN0YXRpY19vcHM7CiAKKy8qIHN0YXRpYyBtZW0sIGR5bmFtaWMgSU8gc29ja2V0cyAqLworZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9pb2R5bl9vcHM7CisKIC8qCiAgKiAgQ2FsbHMgdG8gc2V0IHVwIGxvdy1sZXZlbCAiU29ja2V0IFNlcnZpY2VzIiBkcml2ZXJzCiAgKi8KIHN0cnVjdCBwY21jaWFfc29ja2V0OwogCiB0eXBlZGVmIHN0cnVjdCBpb193aW5kb3dfdCB7Ci0JdV9pbnQJCQlBdHRyaWJ1dGVzOwotCWtpb19hZGRyX3QJCUJhc2VQb3J0LCBOdW1Qb3J0czsKIAlraW9fYWRkcl90CQlJblVzZSwgQ29uZmlnOwogCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKIH0gaW9fd2luZG93X3Q7CkBAIC0xNjIsNyArMTY0LDcgQEAKIHR5cGVkZWYgc3RydWN0IHdpbmRvd190IHsKIAl1X3Nob3J0CQkJbWFnaWM7CiAJdV9zaG9ydAkJCWluZGV4OwotCWNsaWVudF9oYW5kbGVfdAkJaGFuZGxlOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpoYW5kbGU7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgCSpzb2NrOwogCXBjY2FyZF9tZW1fbWFwCQljdGw7CiB9IHdpbmRvd190OwpAQCAtMTg2LDcgKzE4OCw2IEBACiAJdV9zaG9ydAkJCQlsb2NrX2NvdW50OwogCXBjY2FyZF9tZW1fbWFwCQkJY2lzX21lbTsKIAl2b2lkIF9faW9tZW0gCQkJKmNpc192aXJ0OwotCXN0cnVjdCBjb25maWdfdAkJCSpjb25maWc7CiAJc3RydWN0IHsKIAkJdV9pbnQJCQlBc3NpZ25lZElSUTsKIAkJdV9pbnQJCQlDb25maWc7CkBAIC0yNDEsNyArMjQyLDcgQEAKICNlbmRpZgogCiAJLyogc3RhdGUgdGhyZWFkICovCi0Jc3RydWN0IHNlbWFwaG9yZQkJc2t0X3NlbTsJLyogcHJvdGVjdHMgc29ja2V0IGgvdyBzdGF0ZSAqLworCXN0cnVjdCBtdXRleAkJCXNrdF9tdXRleDsJLyogcHJvdGVjdHMgc29ja2V0IGgvdyBzdGF0ZSAqLwogCiAJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwogCXN0cnVjdCBjb21wbGV0aW9uCQl0aHJlYWRfZG9uZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKaW5kZXggZjQwNGZlMi4uYWQ2M2MyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NhLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKQEAgLTkxLDM0ICs5MSw2IEBACiAJSUJfU0FfQkVTVCA9IDMKIH07CiAKLWVudW0gaWJfc2FfcmF0ZSB7Ci0JSUJfU0FfUkFURV8yXzVfR0JQUyA9IDIsCi0JSUJfU0FfUkFURV81X0dCUFMgICA9IDUsCi0JSUJfU0FfUkFURV8xMF9HQlBTICA9IDMsCi0JSUJfU0FfUkFURV8yMF9HQlBTICA9IDYsCi0JSUJfU0FfUkFURV8zMF9HQlBTICA9IDQsCi0JSUJfU0FfUkFURV80MF9HQlBTICA9IDcsCi0JSUJfU0FfUkFURV82MF9HQlBTICA9IDgsCi0JSUJfU0FfUkFURV84MF9HQlBTICA9IDksCi0JSUJfU0FfUkFURV8xMjBfR0JQUyA9IDEwCi19OwotCi1zdGF0aWMgaW5saW5lIGludCBpYl9zYV9yYXRlX2VudW1fdG9faW50KGVudW0gaWJfc2FfcmF0ZSByYXRlKQotewotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgSUJfU0FfUkFURV8yXzVfR0JQUzogcmV0dXJuICAxOwotCWNhc2UgSUJfU0FfUkFURV81X0dCUFM6ICAgcmV0dXJuICAyOwotCWNhc2UgSUJfU0FfUkFURV8xMF9HQlBTOiAgcmV0dXJuICA0OwotCWNhc2UgSUJfU0FfUkFURV8yMF9HQlBTOiAgcmV0dXJuICA4OwotCWNhc2UgSUJfU0FfUkFURV8zMF9HQlBTOiAgcmV0dXJuIDEyOwotCWNhc2UgSUJfU0FfUkFURV80MF9HQlBTOiAgcmV0dXJuIDE2OwotCWNhc2UgSUJfU0FfUkFURV82MF9HQlBTOiAgcmV0dXJuIDI0OwotCWNhc2UgSUJfU0FfUkFURV84MF9HQlBTOiAgcmV0dXJuIDMyOwotCWNhc2UgSUJfU0FfUkFURV8xMjBfR0JQUzogcmV0dXJuIDQ4OwotCWRlZmF1bHQ6IAkgICAgICAgICAgcmV0dXJuIC0xOwotCX0KLX0KLQogLyoKICAqIFN0cnVjdHVyZXMgZm9yIFNBIHJlY29yZHMgYXJlIG5hbWVkICJzdHJ1Y3QgaWJfc2FfeHh4X3JlYy4iICBObwogICogYXR0ZW1wdCBpcyBtYWRlIHRvIHBhY2sgc3RydWN0dXJlcyB0byBtYXRjaCB0aGUgcGh5c2ljYWwgbGF5b3V0IG9mCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCmluZGV4IGMxYWQ2MjcuLjZiYmYxYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCkBAIC0zMTQsNiArMzE0LDM0IEBACiAJSUJfQUhfR1JICT0gMQogfTsKIAorZW51bSBpYl9yYXRlIHsKKwlJQl9SQVRFX1BPUlRfQ1VSUkVOVCA9IDAsCisJSUJfUkFURV8yXzVfR0JQUyA9IDIsCisJSUJfUkFURV81X0dCUFMgICA9IDUsCisJSUJfUkFURV8xMF9HQlBTICA9IDMsCisJSUJfUkFURV8yMF9HQlBTICA9IDYsCisJSUJfUkFURV8zMF9HQlBTICA9IDQsCisJSUJfUkFURV80MF9HQlBTICA9IDcsCisJSUJfUkFURV82MF9HQlBTICA9IDgsCisJSUJfUkFURV84MF9HQlBTICA9IDksCisJSUJfUkFURV8xMjBfR0JQUyA9IDEwCit9OworCisvKioKKyAqIGliX3JhdGVfdG9fbXVsdCAtIENvbnZlcnQgdGhlIElCIHJhdGUgZW51bSB0byBhIG11bHRpcGxlIG9mIHRoZQorICogYmFzZSByYXRlIG9mIDIuNSBHYml0L3NlYy4gIEZvciBleGFtcGxlLCBJQl9SQVRFXzVfR0JQUyB3aWxsIGJlCisgKiBjb252ZXJ0ZWQgdG8gMiwgc2luY2UgNSBHYml0L3NlYyBpcyAyICogMi41IEdiaXQvc2VjLgorICogQHJhdGU6IHJhdGUgdG8gY29udmVydC4KKyAqLworaW50IGliX3JhdGVfdG9fbXVsdChlbnVtIGliX3JhdGUgcmF0ZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKKworLyoqCisgKiBtdWx0X3RvX2liX3JhdGUgLSBDb252ZXJ0IGEgbXVsdGlwbGUgb2YgMi41IEdiaXQvc2VjIHRvIGFuIElCIHJhdGUKKyAqIGVudW0uCisgKiBAbXVsdDogbXVsdGlwbGUgdG8gY29udmVydC4KKyAqLworZW51bSBpYl9yYXRlIG11bHRfdG9faWJfcmF0ZShpbnQgbXVsdCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKKwogc3RydWN0IGliX2FoX2F0dHIgewogCXN0cnVjdCBpYl9nbG9iYWxfcm91dGUJZ3JoOwogCXUxNgkJCWRsaWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpbmZvLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpbmZvLmgKaW5kZXggMTc0MTAxYi4uZDMxYjE2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aW5mby5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmluZm8uaApAQCAtMjgsNCArMjgsNSBAQAogI2RlZmluZSBCTElTVF9OT19VTERfQVRUQUNICTB4MTAwMDAwIC8qIGRldmljZSBpcyBhY3R1YWxseSBmb3IgUkFJRCBjb25maWcgKi8KICNkZWZpbmUgQkxJU1RfU0VMRUNUX05PX0FUTgkweDIwMDAwMCAvKiBzZWxlY3Qgd2l0aG91dCBBVE4gKi8KICNkZWZpbmUgQkxJU1RfUkVUUllfSFdFUlJPUgkweDQwMDAwMCAvKiByZXRyeSBIQVJEV0FSRV9FUlJPUiAqLworI2RlZmluZSBCTElTVF9NQVhfNTEyCQkweDgwMDAwMCAvKiBtYXhpbXVtIDUxMiBzZWN0b3IgY2RiIGxlbmd0aCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggZGM2ODYyZC4uZGU2Y2U1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtMTQwLDcgKzE0MCw2IEBACiAJICoKIAkgKiBTdGF0dXM6IFJFUVVJUkVECShhdCBsZWFzdCBvbmUgb2YgdGhlbSkKIAkgKi8KLQlpbnQgKCogZWhfc3RyYXRlZ3lfaGFuZGxlcikoc3RydWN0IFNjc2lfSG9zdCAqKTsKIAlpbnQgKCogZWhfYWJvcnRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKIAlpbnQgKCogZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJaW50ICgqIGVoX2J1c19yZXNldF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKaW5kZXggZDRiZTRkOS4uZWRiOTUyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCkBAIC00MSw4ICs0MSw2IEBACiB9IFNjc2lfRkNUYXJnQWRkcmVzczsKIAogZXh0ZXJuIGludCBzY3NpX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQsIHZvaWQgX191c2VyICopOwotZXh0ZXJuIGludCBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwKLQkJCQkgICBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY21kLAogCQkJCSAgIHZvaWQgX191c2VyICphcmcsIHN0cnVjdCBmaWxlICpmaWxwKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaAppbmRleCBiMzY1N2YxLi5jY2ExZDQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaApAQCAtNTAsNiArNTAsMTEgQEAKIAl1bnNpZ25lZCBpbnQgY3JlYXRlX3dvcmtfcXVldWUgOiAxOwogCiAJLyoKKwkgKiBBbGxvd3MgYSB0cmFuc3BvcnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlci4KKwkgKi8KKwl2b2lkICgqIGVoX3N0cmF0ZWd5X2hhbmRsZXIpKHN0cnVjdCBTY3NpX0hvc3QgKik7CisKKwkvKgogCSAqIFRoaXMgaXMgYW4gb3B0aW9uYWwgcm91dGluZSB0aGF0IGFsbG93cyB0aGUgdHJhbnNwb3J0IHRvIGJlY29tZQogCSAqIGludm9sdmVkIHdoZW4gYSBzY3NpIGlvIHRpbWVyIGZpcmVzLiBUaGUgcmV0dXJuIHZhbHVlIHRlbGxzIHRoZQogCSAqIHRpbWVyIHJvdXRpbmUgaG93IHRvIGZpbmlzaCB0aGUgaW8gdGltZW91dCBoYW5kbGluZzoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKaW5kZXggY2YzZmVjOC4uNTYyNjIyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKQEAgLTIwMiwxMiArMjAyLDE5IEBACiAJLyogaW50ZXJuYWwgZGF0YSAqLwogCXVuc2lnbmVkIGludCBjaGFubmVsOwogCXUzMiBudW1iZXI7CisJdTggZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCBwZWVyczsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKICAJc3RydWN0IHdvcmtfc3RydWN0IGRldl9sb3NzX3dvcms7CiAgCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX3dvcms7CisgCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGd0X2RlbGV0ZV93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBycG9ydF9kZWxldGVfd29yazsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YodW5zaWduZWQgbG9uZykpKSk7CiAKKy8qIGJpdCBmaWVsZCB2YWx1ZXMgZm9yIHN0cnVjdCBmY19ycG9ydCAiZmxhZ3MiIGZpZWxkOiAqLworI2RlZmluZSBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcJMHgwMQorI2RlZmluZSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcJCTB4MDIKKwogI2RlZmluZQlkZXZfdG9fcnBvcnQoZCkJCQkJXAogCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZmNfcnBvcnQsIGRldikKICNkZWZpbmUgdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGNsYXNzZGV2KQlcCkBAIC0zMjcsMTMgKzMzNCwxNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcnBvcnRfYmluZGluZ3M7CiAJdTMyIG5leHRfcnBvcnRfbnVtYmVyOwogCXUzMiBuZXh0X3RhcmdldF9pZDsKLQl1OCBmbGFnczsKLSAJc3RydWN0IHdvcmtfc3RydWN0IHJwb3J0X2RlbF93b3JrOworCisJLyogd29yayBxdWV1ZXMgZm9yIHJwb3J0IHN0YXRlIG1hbmlwdWxhdGlvbiAqLworCWNoYXIgd29ya19xX25hbWVbS09CSl9OQU1FX0xFTl07CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfcTsKKwljaGFyIGRldmxvc3Nfd29ya19xX25hbWVbS09CSl9OQU1FX0xFTl07CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRldmxvc3Nfd29ya19xOwogfTsKIAotLyogdmFsdWVzIGZvciBzdHJ1Y3QgZmNfaG9zdF9hdHRycyAiZmxhZ3MiIGZpZWxkOiAqLwotI2RlZmluZSBGQ19TSE9TVF9SUE9SVF9ERUxfU0NIRURVTEVECTB4MDEKLQorI2RlZmluZSBzaG9zdF90b19mY19ob3N0KHgpIFwKKwkoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKQogCiAjZGVmaW5lIGZjX2hvc3Rfbm9kZV9uYW1lKHgpIFwKIAkoKChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKSh4KS0+c2hvc3RfZGF0YSktPm5vZGVfbmFtZSkKQEAgLTM3NSwxMCArMzg1LDE0IEBACiAJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5uZXh0X3Jwb3J0X251bWJlcikKICNkZWZpbmUgZmNfaG9zdF9uZXh0X3RhcmdldF9pZCh4KSBcCiAJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5uZXh0X3RhcmdldF9pZCkKLSNkZWZpbmUgZmNfaG9zdF9mbGFncyh4KSBcCi0JKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5mbGFncykKLSNkZWZpbmUgZmNfaG9zdF9ycG9ydF9kZWxfd29yayh4KSBcCi0JKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5ycG9ydF9kZWxfd29yaykKKyNkZWZpbmUgZmNfaG9zdF93b3JrX3FfbmFtZSh4KSBcCisJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT53b3JrX3FfbmFtZSkKKyNkZWZpbmUgZmNfaG9zdF93b3JrX3EoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+d29ya19xKQorI2RlZmluZSBmY19ob3N0X2Rldmxvc3Nfd29ya19xX25hbWUoeCkgXAorCSgoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopKHgpLT5zaG9zdF9kYXRhKS0+ZGV2bG9zc193b3JrX3FfbmFtZSkKKyNkZWZpbmUgZmNfaG9zdF9kZXZsb3NzX3dvcmtfcSh4KSBcCisJKCgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikoeCktPnNob3N0X2RhdGEpLT5kZXZsb3NzX3dvcmtfcSkKIAogCiAvKiBUaGUgZnVuY3Rpb25zIGJ5IHdoaWNoIHRoZSB0cmFuc3BvcnQgY2xhc3MgYW5kIHRoZSBkcml2ZXIgY29tbXVuaWNhdGUgKi8KQEAgLTQ2MSwxMCArNDc1LDE1IEBACiAKIAlzd2l0Y2ggKHJwb3J0LT5wb3J0X3N0YXRlKSB7CiAJY2FzZSBGQ19QT1JUU1RBVEVfT05MSU5FOgotCQlyZXN1bHQgPSAwOworCQlpZiAocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKQorCQkJcmVzdWx0ID0gMDsKKwkJZWxzZSBpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKQorCQkJcmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKKwkJZWxzZQorCQkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgRkNfUE9SVFNUQVRFX0JMT0NLRUQ6Ci0JCXJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJcmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc3JwLmggYi9pbmNsdWRlL3Njc2kvc3JwLmgKaW5kZXggNmMyNjgxZC4uNjM3Zjc3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3NycC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zcnAuaApAQCAtOTUsMTQgKzk1LDE1IEBACiAKIC8qCiAgKiBXZSBuZWVkIHRoZSBwYWNrZWQgYXR0cmlidXRlIGJlY2F1c2UgdGhlIFNSUCBzcGVjIHB1dHMgdGhlIGxpc3Qgb2YKLSAqIGRlc2NyaXB0b3JzIGF0IGFuIG9mZnNldCBvZiAyMCwgd2hpY2ggaXMgbm90IGFsaWduZWQgdG8gdGhlIHNpemUKLSAqIG9mIHN0cnVjdCBzcnBfZGlyZWN0X2J1Zi4KKyAqIGRlc2NyaXB0b3JzIGF0IGFuIG9mZnNldCBvZiAyMCwgd2hpY2ggaXMgbm90IGFsaWduZWQgdG8gdGhlIHNpemUgb2YKKyAqIHN0cnVjdCBzcnBfZGlyZWN0X2J1Zi4gIFRoZSB3aG9sZSBzdHJ1Y3R1cmUgbXVzdCBiZSBwYWNrZWQgdG8gYXZvaWQKKyAqIGhhdmluZyB0aGUgMjAtYnl0ZSBzdHJ1Y3R1cmUgcGFkZGVkIHRvIDI0IGJ5dGVzIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzLgogICovCiBzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiB7CiAJc3RydWN0IHNycF9kaXJlY3RfYnVmCXRhYmxlX2Rlc2M7CiAJX19iZTMyCQkJbGVuOwotCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZglkZXNjX2xpc3RbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci19OworCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZglkZXNjX2xpc3RbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBlbnVtIHsKIAlTUlBfTVVMVElDSEFOX1NJTkdMRSA9IDAsCkBAIC0xMjIsNiArMTIzLDExIEBACiAJdTgJdGFyZ2V0X3BvcnRfaWRbMTZdOwogfTsKIAorLyoKKyAqIFRoZSBTUlAgc3BlYyBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBMT0dJTl9SU1Agc3RydWN0dXJlIHRvIGJlIDUyCisgKiBieXRlcywgc28gaXQgbmVlZHMgdG8gYmUgcGFja2VkIHRvIGF2b2lkIGhhdmluZyBpdCBwYWRkZWQgdG8gNTYKKyAqIGJ5dGVzIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzLgorICovCiBzdHJ1Y3Qgc3JwX2xvZ2luX3JzcCB7CiAJdTgJb3Bjb2RlOwogCXU4CXJlc2VydmVkMVszXTsKQEAgLTEzMiw3ICsxMzgsNyBAQAogCV9fYmUxNglidWZfZm10OwogCXU4CXJzcF9mbGFnczsKIAl1OAlyZXNlcnZlZDJbMjVdOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBzcnBfbG9naW5fcmVqIHsKIAl1OAlvcGNvZGU7CkBAIC0yMDcsNiArMjEzLDExIEBACiAJU1JQX1JTUF9GTEFHX0RJVU5ERVIgID0gMSA8PCA1CiB9OwogCisvKgorICogVGhlIFNSUCBzcGVjIGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIFJTUCBzdHJ1Y3R1cmUgdG8gYmUgMzYgYnl0ZXMsCisgKiBzbyBpdCBuZWVkcyB0byBiZSBwYWNrZWQgdG8gYXZvaWQgaGF2aW5nIGl0IHBhZGRlZCB0byA0MCBieXRlcyBvbgorICogNjQtYml0IGFyY2hpdGVjdHVyZXMuCisgKi8KIHN0cnVjdCBzcnBfcnNwIHsKIAl1OAlvcGNvZGU7CiAJdTgJc29sX25vdDsKQEAgLTIyMSw2ICsyMzIsNiBAQAogCV9fYmUzMglzZW5zZV9kYXRhX2xlbjsKIAlfX2JlMzIJcmVzcF9kYXRhX2xlbjsKIAl1OAlkYXRhWzBdOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNlbmRpZiAvKiBTQ1NJX1NSUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IDdmMzJjMTIuLjUxMzUxNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC0xNzAsMTMgKzE3MCwxMyBAQAogfQogCiAvKiBpbml0LmMgKi8KLWludCBzbmRfcG93ZXJfd2FpdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSwgc3RydWN0IGZpbGUgKmZpbGUpOworaW50IHNuZF9wb3dlcl93YWl0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlKTsKIAogI2Vsc2UgLyogISBDT05GSUdfUE0gKi8KIAogI2RlZmluZSBzbmRfcG93ZXJfbG9jayhjYXJkKQkJZG8geyAodm9pZCkoY2FyZCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNuZF9wb3dlcl91bmxvY2soY2FyZCkJCWRvIHsgKHZvaWQpKGNhcmQpOyB9IHdoaWxlICgwKQotc3RhdGljIGlubGluZSBpbnQgc25kX3Bvd2VyX3dhaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgc3RhdGUsIHN0cnVjdCBmaWxlICpmaWxlKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBzbmRfcG93ZXJfd2FpdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBzdGF0ZSkgeyByZXR1cm4gMDsgfQogI2RlZmluZSBzbmRfcG93ZXJfZ2V0X3N0YXRlKGNhcmQpCVNORFJWX0NUTF9QT1dFUl9EMAogI2RlZmluZSBzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIHN0YXRlKQlkbyB7ICh2b2lkKShjYXJkKTsgfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggMTViODg1Ni4uMzczNDI1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0zNjcsMjcgKzM2NywyNyBAQAogCXN0cnVjdCBzbmRfcGNtX2dyb3VwIHNlbGZfZ3JvdXA7CS8qIGZha2UgZ3JvdXAgZm9yIG5vbiBsaW5rZWQgc3Vic3RyZWFtICh3aXRoIHN1YnN0cmVhbSBsb2NrIGluc2lkZSkgKi8KIAlzdHJ1Y3Qgc25kX3BjbV9ncm91cCAqZ3JvdXA7CQkvKiBwb2ludGVyIHRvIGN1cnJlbnQgZ3JvdXAgKi8KIAkvKiAtLSBhc3NpZ25lZCBmaWxlcyAtLSAqLwotCXN0cnVjdCBzbmRfcGNtX2ZpbGUgKmZpbGU7CisJdm9pZCAqZmlsZTsKIAlzdHJ1Y3QgZmlsZSAqZmZpbGU7CisJdm9pZCAoKnBjbV9yZWxlYXNlKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKik7CiAjaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKIAkvKiAtLSBPU1MgdGhpbmdzIC0tICovCiAJc3RydWN0IHNuZF9wY21fb3NzX3N1YnN0cmVhbSBvc3M7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTCiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX3Jvb3Q7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2luZm9fZW50cnk7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2h3X3BhcmFtc19lbnRyeTsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2Nfc3dfcGFyYW1zX2VudHJ5OwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19zdGF0dXNfZW50cnk7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX3ByZWFsbG9jX2VudHJ5OworI2VuZGlmCiAJLyogbWlzYyBmbGFncyAqLwogCXVuc2lnbmVkIGludCBub19tbWFwX2N0cmw6IDE7CisJdW5zaWduZWQgaW50IGh3X29wZW5lZDogMTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQotI2RlZmluZSBTVUJTVFJFQU1fQlVTWShzdWJzdHJlYW0pICgoc3Vic3RyZWFtKS0+ZmlsZSAhPSBOVUxMIHx8ICgoc3Vic3RyZWFtKS0+b3NzLmZpbGUgIT0gTlVMTCkpCi0jZWxzZQogI2RlZmluZSBTVUJTVFJFQU1fQlVTWShzdWJzdHJlYW0pICgoc3Vic3RyZWFtKS0+ZmlsZSAhPSBOVUxMKQotI2VuZGlmCiAKIAogc3RydWN0IHNuZF9wY21fc3RyIHsKQEAgLTQwMiwxMiArNDAyLDE0IEBACiAJc3RydWN0IHNuZF9wY21fb3NzX3N0cmVhbSBvc3M7CiAjZW5kaWYKIAlzdHJ1Y3Qgc25kX3BjbV9maWxlICpmaWxlczsKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTCiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX3Jvb3Q7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2luZm9fZW50cnk7Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVRworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKIAl1bnNpZ25lZCBpbnQgeHJ1bl9kZWJ1ZzsJLyogMCA9IGRpc2FibGVkLCAxID0gdmVyYm9zZSwgMiA9IHN0YWNrdHJhY2UgKi8KIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfeHJ1bl9kZWJ1Z19lbnRyeTsKICNlbmRpZgorI2VuZGlmCiB9OwogCiBzdHJ1Y3Qgc25kX3BjbSB7CkBAIC00NjAsNyArNDYyLDYgQEAKIAkJICAgICAgc3RydWN0IHNuZF9wY21faW5mbyBfX3VzZXIgKmluZm8pOwogaW50IHNuZF9wY21fc3RhdHVzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkgICBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMgKnN0YXR1cyk7Ci1pbnQgc25kX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfcGNtX3N0YXJ0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfcGNtX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBzdGF0dXMpOwogaW50IHNuZF9wY21fZHJhaW5fZG9uZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC00NjgsMTEgKzQ2OSwxMyBAQAogaW50IHNuZF9wY21fc3VzcGVuZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9zdXNwZW5kX2FsbChzdHJ1Y3Qgc25kX3BjbSAqcGNtKTsKICNlbmRpZgotaW50IHNuZF9wY21fa2VybmVsX3BsYXliYWNrX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotaW50IHNuZF9wY21fa2VybmVsX2NhcHR1cmVfaW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiBpbnQgc25kX3BjbV9rZXJuZWxfaW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgc25kX3BjbV9vcGVuX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLCBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKipyc3Vic3RyZWFtKTsKK2ludCBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICoqcnN1YnN0cmVhbSk7CiB2b2lkIHNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworaW50IHNuZF9wY21fYXR0YWNoX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICoqcnN1YnN0cmVhbSk7Cit2b2lkIHNuZF9wY21fZGV0YWNoX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiB2b2lkIHNuZF9wY21fdm1hX25vdGlmeV9kYXRhKHZvaWQgKmNsaWVudCwgdm9pZCAqZGF0YSk7CiBpbnQgc25kX3BjbV9tbWFwX2RhdGEoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOwogCkBAIC04OTksNyArOTAyLDYgQEAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNuZF9wY21fZm9ybWF0X3NpbGVuY2VfNjQoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpOwogaW50IHNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBmcmFtZXMpOwogc25kX3BjbV9mb3JtYXRfdCBzbmRfcGNtX2J1aWxkX2xpbmVhcl9mb3JtYXQoaW50IHdpZHRoLCBpbnQgdW5zaWduZCwgaW50IGJpZ19lbmRpYW4pOwotY29uc3QgY2hhciAqc25kX3BjbV9mb3JtYXRfbmFtZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCk7CiAKIHZvaWQgc25kX3BjbV9zZXRfb3BzKHN0cnVjdCBzbmRfcGNtICogcGNtLCBpbnQgZGlyZWN0aW9uLCBzdHJ1Y3Qgc25kX3BjbV9vcHMgKm9wcyk7CiB2b2lkIHNuZF9wY21fc2V0X3N5bmMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmggYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaAppbmRleCBiZmYwNzc4ZS4uYzg1NDY0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKQEAgLTY5LDE0ICs2OSwxNSBAQAogCiBzdHJ1Y3Qgc25kX3BjbV9vc3Nfc3Vic3RyZWFtIHsKIAl1bnNpZ25lZCBvc3M6IDE7CQkJLyogb3NzIG1vZGUgKi8KLQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwOwkJLyogYWN0aXZlIHNldHVwICovCi0Jc3RydWN0IHNuZF9wY21fb3NzX2ZpbGUgKmZpbGU7CisJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwIHNldHVwOwkJLyogYWN0aXZlIHNldHVwICovCiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9vc3Nfc3RyZWFtIHsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwX2xpc3Q7CS8qIHNldHVwIGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19lbnRyeTsKKyNlbmRpZgogfTsKIAogc3RydWN0IHNuZF9wY21fb3NzIHsKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmMgYi9pbml0L2RvX21vdW50cy5jCmluZGV4IGFkYjdjYWQuLmY0YjdiOWQgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmMKKysrIGIvaW5pdC9kb19tb3VudHMuYwpAQCAtMzEwLDYgKzMxMCwxMSBAQAogCiAJCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwgYik7CiAJfQorCisJcHJpbnRrKCJObyBmaWxlc3lzdGVtIGNvdWxkIG1vdW50IHJvb3QsIHRyaWVkOiAiKTsKKwlmb3IgKHAgPSBmc19uYW1lczsgKnA7IHAgKz0gc3RybGVuKHApKzEpCisJCXByaW50aygiICVzIiwgcCk7CisJcHJpbnRrKCJcbiIpOwogCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwgX19iZGV2bmFtZShST09UX0RFViwgYikpOwogb3V0OgogCXB1dG5hbWUoZnNfbmFtZXMpOwpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggNjc5ZDg3MC4uZjgxY2ZhNCAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC0yNiwxMCArMjYsMTIgQEAKIAogLyogbGluayBoYXNoICovCiAKKyNkZWZpbmUgTl9BTElHTihsZW4pICgoKChsZW4pICsgMSkgJiB+MykgKyAyKQorCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgaGFzaCB7CiAJaW50IGlubywgbWlub3IsIG1ham9yOwogCXN0cnVjdCBoYXNoICpuZXh0OwotCWNoYXIgKm5hbWU7CisJY2hhciBuYW1lW05fQUxJR04oUEFUSF9NQVgpXTsKIH0gKmhlYWRbMzJdOwogCiBzdGF0aWMgaW5saW5lIGludCBoYXNoKGludCBtYWpvciwgaW50IG1pbm9yLCBpbnQgaW5vKQpAQCAtNTcsNyArNTksNyBAQAogCXEtPmlubyA9IGlubzsKIAlxLT5taW5vciA9IG1pbm9yOwogCXEtPm1ham9yID0gbWFqb3I7Ci0JcS0+bmFtZSA9IG5hbWU7CisJc3RyY3B5KHEtPm5hbWUsIG5hbWUpOwogCXEtPm5leHQgPSBOVUxMOwogCSpwID0gcTsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzMyw4ICsxMzUsNiBAQAogCWNvdW50IC09IG47CiB9CiAKLSNkZWZpbmUgTl9BTElHTihsZW4pICgoKChsZW4pICsgMSkgJiB+MykgKyAyKQotCiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyICpjb2xsZWN0ZWQ7CiBzdGF0aWMgX19pbml0ZGF0YSBpbnQgcmVtYWluczsKIHN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbGxlY3Q7CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDRhMmYwODkuLmY3MTViOWIgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC01ODIsNyArNTgyLDcgQEAKIAogCQlyZXN1bHQgPSAoKmNhbGwpKCk7CiAKLQkJaWYgKHJlc3VsdCAmJiAocmVzdWx0ICE9IC1FTk9ERVYgfHwgaW5pdGNhbGxfZGVidWcpKSB7CisJCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpIHsKIAkJCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCIsIHJlc3VsdCk7CiAJCQltc2cgPSBtc2didWY7CiAJCX0KZGlmZiAtLWdpdCBhL2lwYy9tc2cuYyBiL2lwYy9tc2cuYwppbmRleCA0OGE3ZjE3Li43ZDEzNDBjIDEwMDY0NAotLS0gYS9pcGMvbXNnLmMKKysrIGIvaXBjL21zZy5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKiBtb3N0bHkgcmV3cml0dGVuLCB0aHJlYWRlZCBhbmQgd2FrZS1vbmUgc2VtYW50aWNzIGFkZGVkCiAgKiBNU0dNQVggbGltaXQgcmVtb3ZlZCwgc3lzY3RsJ3MgYWRkZWQKICAqIChjKSAxOTk5IE1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+CisgKgorICogc3VwcG9ydCBmb3IgYXVkaXQgb2YgaXBjIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBwZXJtaXNzaW9uIGNoYW5nZXMKKyAqIER1c3RpbiBLaXJrbGFuZCA8ZHVzdGluLmtpcmtsYW5kQHVzLmlibS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KQEAgLTQ0Nyw2ICs0NTAsMTEgQEAKIAlpZiAobXNnX2NoZWNraWQobXNxLG1zcWlkKSkKIAkJZ290byBvdXRfdW5sb2NrX3VwOwogCWlwY3AgPSAmbXNxLT5xX3Blcm07CisKKwllcnIgPSBhdWRpdF9pcGNfb2JqKGlwY3ApOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VubG9ja191cDsKKwogCWVyciA9IC1FUEVSTTsKIAlpZiAoY3VycmVudC0+ZXVpZCAhPSBpcGNwLT5jdWlkICYmIAogCSAgICBjdXJyZW50LT5ldWlkICE9IGlwY3AtPnVpZCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTQ2MCw3ICs0NjgsOCBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJUENfU0VUOgogCXsKLQkJaWYgKChlcnIgPSBhdWRpdF9pcGNfcGVybXMoc2V0YnVmLnFieXRlcywgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApKSkKKwkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKHNldGJ1Zi5xYnl0ZXMsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsIHNldGJ1Zi5tb2RlLCBpcGNwKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X3VubG9ja191cDsKIAogCQllcnIgPSAtRVBFUk07CmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggNjQyNjU5Yy4uNzkxOWY4ZSAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtNjEsNiArNjEsOSBAQAogICogKGMpIDIwMDEgUmVkIEhhdCBJbmMgPGFsYW5AcmVkaGF0LmNvbT4KICAqIExvY2tsZXNzIHdha2V1cAogICogKGMpIDIwMDMgTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KKyAqCisgKiBzdXBwb3J0IGZvciBhdWRpdCBvZiBpcGMgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHBlcm1pc3Npb24gY2hhbmdlcworICogRHVzdGluIEtpcmtsYW5kIDxkdXN0aW4ua2lya2xhbmRAdXMuaWJtLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC04MjAsNiArODIzLDExIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CQogCWlwY3AgPSAmc21hLT5zZW1fcGVybTsKKworCWVyciA9IGF1ZGl0X2lwY19vYmooaXBjcCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCiAJaWYgKGN1cnJlbnQtPmV1aWQgIT0gaXBjcC0+Y3VpZCAmJiAKIAkgICAgY3VycmVudC0+ZXVpZCAhPSBpcGNwLT51aWQgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkgICAgCWVycj0tRVBFUk07CkBAIC04MzYsNyArODQ0LDggQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJUENfU0VUOgotCQlpZiAoKGVyciA9IGF1ZGl0X2lwY19wZXJtcygwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSwgaXBjcCkpKQorCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrOwogCQlpcGNwLT51aWQgPSBzZXRidWYudWlkOwogCQlpcGNwLT5naWQgPSBzZXRidWYuZ2lkOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IGY4MDZhMmUzLi44MDk4OTY4IDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKiBTaGFyZWQgL2Rldi96ZXJvIHN1cHBvcnQsIEthbm9qIFNhcmNhciA8a2Fub2pAc2dpLmNvbT4KICAqIE1vdmUgdGhlIG1tIGZ1bmN0aW9uYWxpdHkgb3ZlciB0byBtbS9zaG1lbS5jLCBDaHJpc3RvcGggUm9obGFuZCA8Y3JAc2FwLmNvbT4KICAqCisgKiBzdXBwb3J0IGZvciBhdWRpdCBvZiBpcGMgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHBlcm1pc3Npb24gY2hhbmdlcworICogRHVzdGluIEtpcmtsYW5kIDxkdXN0aW4ua2lya2xhbmRAdXMuaWJtLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC05MSw4ICs5Myw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2htX2luYyAoaW50IGlkKSB7CiAJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwOwogCi0JaWYoIShzaHAgPSBzaG1fbG9jayhpZCkpKQotCQlCVUcoKTsKKwlzaHAgPSBzaG1fbG9jayhpZCk7CisJQlVHX09OKCFzaHApOwogCXNocC0+c2htX2F0aW0gPSBnZXRfc2Vjb25kcygpOwogCXNocC0+c2htX2xwcmlkID0gY3VycmVudC0+dGdpZDsKIAlzaHAtPnNobV9uYXR0Y2grKzsKQEAgLTE0Miw4ICsxNDQsOCBAQAogCiAJbXV0ZXhfbG9jaygmc2htX2lkcy5tdXRleCk7CiAJLyogcmVtb3ZlIGZyb20gdGhlIGxpc3Qgb2YgYXR0YWNoZXMgb2YgdGhlIHNobSBzZWdtZW50ICovCi0JaWYoIShzaHAgPSBzaG1fbG9jayhpZCkpKQotCQlCVUcoKTsKKwlzaHAgPSBzaG1fbG9jayhpZCk7CisJQlVHX09OKCFzaHApOwogCXNocC0+c2htX2xwcmlkID0gY3VycmVudC0+dGdpZDsKIAlzaHAtPnNobV9kdGltID0gZ2V0X3NlY29uZHMoKTsKIAlzaHAtPnNobV9uYXR0Y2gtLTsKQEAgLTE2Miw2ICsxNjQsOCBAQAogCXJldCA9IHNobWVtX21tYXAoZmlsZSwgdm1hKTsKIAlpZiAocmV0ID09IDApIHsKIAkJdm1hLT52bV9vcHMgPSAmc2htX3ZtX29wczsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKKwkJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOwogCQlzaG1faW5jKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiAJfQogCkBAIC0yODMsOCArMjg3LDcgQEAKIAkJZXJyID0gLUVFWElTVDsKIAl9IGVsc2UgewogCQlzaHAgPSBzaG1fbG9jayhpZCk7Ci0JCWlmKHNocD09TlVMTCkKLQkJCUJVRygpOworCQlCVUdfT04oc2hwPT1OVUxMKTsKIAkJaWYgKHNocC0+c2htX3NlZ3N6IDwgc2l6ZSkKIAkJCWVyciA9IC1FSU5WQUw7CiAJCWVsc2UgaWYgKGlwY3Blcm1zKCZzaHAtPnNobV9wZXJtLCBzaG1mbGcpKQpAQCAtNTQxLDYgKzU0NCwxMCBAQAogCQlpZihlcnIpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKKwkJZXJyID0gYXVkaXRfaXBjX29iaigmKHNocC0+c2htX3Blcm0pKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3VubG9jazsKKwogCQlpZiAoIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkgewogCQkJZXJyID0gLUVQRVJNOwogCQkJaWYgKGN1cnJlbnQtPmV1aWQgIT0gc2hwLT5zaG1fcGVybS51aWQgJiYKQEAgLTU5Myw2ICs2MDAsMTAgQEAKIAkJaWYoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwogCisJCWVyciA9IGF1ZGl0X2lwY19vYmooJihzaHAtPnNobV9wZXJtKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bmxvY2tfdXA7CisKIAkJaWYgKGN1cnJlbnQtPmV1aWQgIT0gc2hwLT5zaG1fcGVybS51aWQgJiYKIAkJICAgIGN1cnJlbnQtPmV1aWQgIT0gc2hwLT5zaG1fcGVybS5jdWlkICYmIAogCQkgICAgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKQEAgLTYyNiwxMiArNjM3LDE1IEBACiAJCWVycj0tRUlOVkFMOwogCQlpZihzaHA9PU5VTEwpCiAJCQlnb3RvIG91dF91cDsKLQkJaWYgKChlcnIgPSBhdWRpdF9pcGNfcGVybXMoMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwKLQkJCQkJc2V0YnVmLm1vZGUsICYoc2hwLT5zaG1fcGVybSkpKSkKLQkJCWdvdG8gb3V0X3VubG9ja191cDsKIAkJZXJyID0gc2htX2NoZWNraWQoc2hwLHNobWlkKTsKIAkJaWYoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOworCQllcnIgPSBhdWRpdF9pcGNfb2JqKCYoc2hwLT5zaG1fcGVybSkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfdW5sb2NrX3VwOworCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsICYoc2hwLT5zaG1fcGVybSkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfdW5sb2NrX3VwOwogCQllcnI9LUVQRVJNOwogCQlpZiAoY3VycmVudC0+ZXVpZCAhPSBzaHAtPnNobV9wZXJtLnVpZCAmJgogCQkgICAgY3VycmVudC0+ZXVpZCAhPSBzaHAtPnNobV9wZXJtLmN1aWQgJiYgCkBAIC03NzQsOCArNzg4LDggQEAKIAl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCW11dGV4X2xvY2soJnNobV9pZHMubXV0ZXgpOwotCWlmKCEoc2hwID0gc2htX2xvY2soc2htaWQpKSkKLQkJQlVHKCk7CisJc2hwID0gc2htX2xvY2soc2htaWQpOworCUJVR19PTighc2hwKTsKIAlzaHAtPnNobV9uYXR0Y2gtLTsKIAlpZihzaHAtPnNobV9uYXR0Y2ggPT0gMCAmJgogCSAgIHNocC0+c2htX3Blcm0ubW9kZSAmIFNITV9ERVNUKQpkaWZmIC0tZ2l0IGEvaXBjL3V0aWwuYyBiL2lwYy91dGlsLmMKaW5kZXggMjMxNTFlZi4uODE5MzI5OSAxMDA2NDQKLS0tIGEvaXBjL3V0aWwuYworKysgYi9pcGMvdXRpbC5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKgkgICAgICBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgogICogT2N0IDIwMDIgLSBPbmUgbG9jayBwZXIgSVBDIGlkLiBSQ1UgaXBjX2ZyZWUgZm9yIGxvY2stZnJlZSBncm93X2FyeSgpLgogICogICAgICAgICAgICBNaW5nbWluZyBDYW8gPGNtbUB1cy5pYm0uY29tPgorICogTWFyIDIwMDYgLSBzdXBwb3J0IGZvciBhdWRpdCBvZiBpcGMgb2JqZWN0IHByb3BlcnRpZXMKKyAqICAgICAgICAgICAgRHVzdGluIEtpcmtsYW5kIDxkdXN0aW4ua2lya2xhbmRAdXMuaWJtLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0yNyw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KIAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIApAQCAtMTgzLDggKzE4Niw3IEBACiAJaWYobmV3ID09IE5VTEwpCiAJCXJldHVybiBzaXplOwogCW5ldy0+c2l6ZSA9IG5ld3NpemU7Ci0JbWVtY3B5KG5ldy0+cCwgaWRzLT5lbnRyaWVzLT5wLCBzaXplb2Yoc3RydWN0IGtlcm5faXBjX3Blcm0gKikqc2l6ZSArCi0JCQkJCXNpemVvZihzdHJ1Y3QgaXBjX2lkX2FyeSkpOworCW1lbWNweShuZXctPnAsIGlkcy0+ZW50cmllcy0+cCwgc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKnNpemUpOwogCWZvcihpPXNpemU7aTxuZXdzaXplO2krKykgewogCQluZXctPnBbaV0gPSBOVUxMOwogCX0KQEAgLTI2Niw4ICsyNjgsNyBAQAogewogCXN0cnVjdCBrZXJuX2lwY19wZXJtKiBwOwogCWludCBsaWQgPSBpZCAlIFNFUV9NVUxUSVBMSUVSOwotCWlmKGxpZCA+PSBpZHMtPmVudHJpZXMtPnNpemUpCi0JCUJVRygpOworCUJVR19PTihsaWQgPj0gaWRzLT5lbnRyaWVzLT5zaXplKTsKIAogCS8qIAogCSAqIGRvIG5vdCBuZWVkIGEgcmN1X2RlcmVmZXJlbmNlKCkoKSBoZXJlIHRvIGZvcmNlIG9yZGVyaW5nCkBAIC0yNzUsOCArMjc2LDcgQEAKIAkgKi8JCiAJcCA9IGlkcy0+ZW50cmllcy0+cFtsaWRdOwogCWlkcy0+ZW50cmllcy0+cFtsaWRdID0gTlVMTDsKLQlpZihwPT1OVUxMKQotCQlCVUcoKTsKKwlCVUdfT04ocD09TlVMTCk7CiAJaWRzLT5pbl91c2UtLTsKIAogCWlmIChsaWQgPT0gaWRzLT5tYXhfaWQpIHsKQEAgLTQ2Nyw4ICs0NjcsMTAgQEAKICAKIGludCBpcGNwZXJtcyAoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHNob3J0IGZsYWcpCiB7CS8qIGZsYWcgd2lsbCBtb3N0IHByb2JhYmx5IGJlIDAgb3IgU18uLi5VR08gZnJvbSA8bGludXgvc3RhdC5oPiAqLwotCWludCByZXF1ZXN0ZWRfbW9kZSwgZ3JhbnRlZF9tb2RlOworCWludCByZXF1ZXN0ZWRfbW9kZSwgZ3JhbnRlZF9tb2RlLCBlcnI7CiAKKwlpZiAodW5saWtlbHkoKGVyciA9IGF1ZGl0X2lwY19vYmooaXBjcCkpKSkKKwkJcmV0dXJuIGVycjsKIAlyZXF1ZXN0ZWRfbW9kZSA9IChmbGFnID4+IDYpIHwgKGZsYWcgPj4gMykgfCBmbGFnOwogCWdyYW50ZWRfbW9kZSA9IGlwY3AtPm1vZGU7CiAJaWYgKGN1cnJlbnQtPmV1aWQgPT0gaXBjcC0+Y3VpZCB8fCBjdXJyZW50LT5ldWlkID09IGlwY3AtPnVpZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggYzhjY2JkMC4uZGY1N2I0OSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTU1LDYgKzU1LDkgQEAKICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CisKKyNpbmNsdWRlICJhdWRpdC5oIgogCiAvKiBObyBhdWRpdGluZyB3aWxsIHRha2UgcGxhY2UgdW50aWwgYXVkaXRfaW5pdGlhbGl6ZWQgIT0gMC4KICAqIChJbml0aWFsaXphdGlvbiBoYXBwZW5zIGFmdGVyIHNrYl9pbml0IGlzIGNhbGxlZC4pICovCkBAIC0yMjcsNDkgKzIzMCwxMDMgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXVkaXRfc2V0X3JhdGVfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X3JhdGVfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKLQlpbnQgb2xkCQkgPSBhdWRpdF9yYXRlX2xpbWl0OwotCWF1ZGl0X3JhdGVfbGltaXQgPSBsaW1pdDsKLQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwgCisJaW50IG9sZAk9IGF1ZGl0X3JhdGVfbGltaXQ7CisKKwlpZiAoc2lkKSB7CisJCWNoYXIgKmN0eCA9IE5VTEw7CisJCXUzMiBsZW47CisJCWludCByYzsKKwkJaWYgKChyYyA9IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkiYXVkaXRfcmF0ZV9saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSBzdWJqPSVzIiwKKwkJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCwgY3R4KTsKKwkJa2ZyZWUoY3R4KTsKKwl9IGVsc2UKKwkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCiAJCQkiYXVkaXRfcmF0ZV9saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCi0JCQlhdWRpdF9yYXRlX2xpbWl0LCBvbGQsIGxvZ2ludWlkKTsKKwkJCWxpbWl0LCBvbGQsIGxvZ2ludWlkKTsKKwlhdWRpdF9yYXRlX2xpbWl0ID0gbGltaXQ7CiAJcmV0dXJuIG9sZDsKIH0KIAotc3RhdGljIGludCBhdWRpdF9zZXRfYmFja2xvZ19saW1pdChpbnQgbGltaXQsIHVpZF90IGxvZ2ludWlkKQorc3RhdGljIGludCBhdWRpdF9zZXRfYmFja2xvZ19saW1pdChpbnQgbGltaXQsIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQogewotCWludCBvbGQJCSA9IGF1ZGl0X2JhY2tsb2dfbGltaXQ7Ci0JYXVkaXRfYmFja2xvZ19saW1pdCA9IGxpbWl0OwotCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCWludCBvbGQJPSBhdWRpdF9iYWNrbG9nX2xpbWl0OworCisJaWYgKHNpZCkgeworCQljaGFyICpjdHggPSBOVUxMOworCQl1MzIgbGVuOworCQlpbnQgcmM7CisJCWlmICgocmMgPSBzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkgICAgImF1ZGl0X2JhY2tsb2dfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUgc3Viaj0lcyIsCisJCQkJbGltaXQsIG9sZCwgbG9naW51aWQsIGN0eCk7CisJCWtmcmVlKGN0eCk7CisJfSBlbHNlCisJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAogCQkJImF1ZGl0X2JhY2tsb2dfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAotCQkJYXVkaXRfYmFja2xvZ19saW1pdCwgb2xkLCBsb2dpbnVpZCk7CisJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCk7CisJYXVkaXRfYmFja2xvZ19saW1pdCA9IGxpbWl0OwogCXJldHVybiBvbGQ7CiB9CiAKLXN0YXRpYyBpbnQgYXVkaXRfc2V0X2VuYWJsZWQoaW50IHN0YXRlLCB1aWRfdCBsb2dpbnVpZCkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X2VuYWJsZWQoaW50IHN0YXRlLCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKLQlpbnQgb2xkCQkgPSBhdWRpdF9lbmFibGVkOworCWludCBvbGQgPSBhdWRpdF9lbmFibGVkOworCiAJaWYgKHN0YXRlICE9IDAgJiYgc3RhdGUgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JYXVkaXRfZW5hYmxlZCA9IHN0YXRlOwotCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCisJaWYgKHNpZCkgeworCQljaGFyICpjdHggPSBOVUxMOworCQl1MzIgbGVuOworCQlpbnQgcmM7CisJCWlmICgocmMgPSBzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJImF1ZGl0X2VuYWJsZWQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUgc3Viaj0lcyIsCisJCQkJc3RhdGUsIG9sZCwgbG9naW51aWQsIGN0eCk7CisJCWtmcmVlKGN0eCk7CisJfSBlbHNlCisJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAogCQkJImF1ZGl0X2VuYWJsZWQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAotCQkJYXVkaXRfZW5hYmxlZCwgb2xkLCBsb2dpbnVpZCk7CisJCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCk7CisJYXVkaXRfZW5hYmxlZCA9IHN0YXRlOwogCXJldHVybiBvbGQ7CiB9CiAKLXN0YXRpYyBpbnQgYXVkaXRfc2V0X2ZhaWx1cmUoaW50IHN0YXRlLCB1aWRfdCBsb2dpbnVpZCkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X2ZhaWx1cmUoaW50IHN0YXRlLCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKLQlpbnQgb2xkCQkgPSBhdWRpdF9mYWlsdXJlOworCWludCBvbGQgPSBhdWRpdF9mYWlsdXJlOworCiAJaWYgKHN0YXRlICE9IEFVRElUX0ZBSUxfU0lMRU5UCiAJICAgICYmIHN0YXRlICE9IEFVRElUX0ZBSUxfUFJJTlRLCiAJICAgICYmIHN0YXRlICE9IEFVRElUX0ZBSUxfUEFOSUMpCiAJCXJldHVybiAtRUlOVkFMOwotCWF1ZGl0X2ZhaWx1cmUgPSBzdGF0ZTsKLQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKworCWlmIChzaWQpIHsKKwkJY2hhciAqY3R4ID0gTlVMTDsKKwkJdTMyIGxlbjsKKwkJaW50IHJjOworCQlpZiAoKHJjID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkpCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCSJhdWRpdF9mYWlsdXJlPSVkIG9sZD0lZCBieSBhdWlkPSV1IHN1Ymo9JXMiLAorCQkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkLCBjdHgpOworCQlrZnJlZShjdHgpOworCX0gZWxzZQorCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKIAkJCSJhdWRpdF9mYWlsdXJlPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKLQkJCWF1ZGl0X2ZhaWx1cmUsIG9sZCwgbG9naW51aWQpOworCQkJc3RhdGUsIG9sZCwgbG9naW51aWQpOworCWF1ZGl0X2ZhaWx1cmUgPSBzdGF0ZTsKIAlyZXR1cm4gb2xkOwogfQogCkBAIC0zODcsNyArNDQ0LDcgQEAKIAogc3RhdGljIGludCBhdWRpdF9yZWNlaXZlX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKIHsKLQl1MzIJCQl1aWQsIHBpZCwgc2VxOworCXUzMgkJCXVpZCwgcGlkLCBzZXEsIHNpZDsKIAl2b2lkCQkJKmRhdGE7CiAJc3RydWN0IGF1ZGl0X3N0YXR1cwkqc3RhdHVzX2dldCwgc3RhdHVzX3NldDsKIAlpbnQJCQllcnI7CkBAIC00MTMsNiArNDcwLDcgQEAKIAlwaWQgID0gTkVUTElOS19DUkVEUyhza2IpLT5waWQ7CiAJdWlkICA9IE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkOwogCWxvZ2ludWlkID0gTkVUTElOS19DQihza2IpLmxvZ2ludWlkOworCXNpZCAgPSBORVRMSU5LX0NCKHNrYikuc2lkOwogCXNlcSAgPSBubGgtPm5sbXNnX3NlcTsKIAlkYXRhID0gTkxNU0dfREFUQShubGgpOwogCkBAIC00MzMsMjUgKzQ5MSw0MyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXN0YXR1c19nZXQgICA9IChzdHJ1Y3QgYXVkaXRfc3RhdHVzICopZGF0YTsKIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfRU5BQkxFRCkgewotCQkJZXJyID0gYXVkaXRfc2V0X2VuYWJsZWQoc3RhdHVzX2dldC0+ZW5hYmxlZCwgbG9naW51aWQpOworCQkJZXJyID0gYXVkaXRfc2V0X2VuYWJsZWQoc3RhdHVzX2dldC0+ZW5hYmxlZCwKKwkJCQkJCQlsb2dpbnVpZCwgc2lkKTsKIAkJCWlmIChlcnIgPCAwKSByZXR1cm4gZXJyOwogCQl9CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX0ZBSUxVUkUpIHsKLQkJCWVyciA9IGF1ZGl0X3NldF9mYWlsdXJlKHN0YXR1c19nZXQtPmZhaWx1cmUsIGxvZ2ludWlkKTsKKwkJCWVyciA9IGF1ZGl0X3NldF9mYWlsdXJlKHN0YXR1c19nZXQtPmZhaWx1cmUsCisJCQkJCQkJIGxvZ2ludWlkLCBzaWQpOwogCQkJaWYgKGVyciA8IDApIHJldHVybiBlcnI7CiAJCX0KIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfUElEKSB7CiAJCQlpbnQgb2xkICAgPSBhdWRpdF9waWQ7CisJCQlpZiAoc2lkKSB7CisJCQkJY2hhciAqY3R4ID0gTlVMTDsKKwkJCQl1MzIgbGVuOworCQkJCWludCByYzsKKwkJCQlpZiAoKHJjID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCisJCQkJCQlzaWQsICZjdHgsICZsZW4pKSkKKwkJCQkJcmV0dXJuIHJjOworCQkJCWVsc2UKKwkJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsCisJCQkJCQlBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCQkJImF1ZGl0X3BpZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSBzdWJqPSVzIiwKKwkJCQkJCXN0YXR1c19nZXQtPnBpZCwgb2xkLAorCQkJCQkJbG9naW51aWQsIGN0eCk7CisJCQkJa2ZyZWUoY3R4KTsKKwkJCX0gZWxzZQorCQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCQkiYXVkaXRfcGlkPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKKwkJCQkJICBzdGF0dXNfZ2V0LT5waWQsIG9sZCwgbG9naW51aWQpOwogCQkJYXVkaXRfcGlkID0gc3RhdHVzX2dldC0+cGlkOwotCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkJImF1ZGl0X3BpZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCi0JCQkJICBhdWRpdF9waWQsIG9sZCwgbG9naW51aWQpOwogCQl9CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1JBVEVfTElNSVQpCi0JCQlhdWRpdF9zZXRfcmF0ZV9saW1pdChzdGF0dXNfZ2V0LT5yYXRlX2xpbWl0LCBsb2dpbnVpZCk7CisJCQlhdWRpdF9zZXRfcmF0ZV9saW1pdChzdGF0dXNfZ2V0LT5yYXRlX2xpbWl0LAorCQkJCQkJCSBsb2dpbnVpZCwgc2lkKTsKIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfQkFDS0xPR19MSU1JVCkKIAkJCWF1ZGl0X3NldF9iYWNrbG9nX2xpbWl0KHN0YXR1c19nZXQtPmJhY2tsb2dfbGltaXQsCi0JCQkJCQkJbG9naW51aWQpOworCQkJCQkJCWxvZ2ludWlkLCBzaWQpOwogCQlicmVhazsKIAljYXNlIEFVRElUX1VTRVI6CiAJY2FzZSBBVURJVF9GSVJTVF9VU0VSX01TRy4uLkFVRElUX0xBU1RfVVNFUl9NU0c6CkBAIC00NjUsOCArNTQxLDIzIEBACiAJCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBtc2dfdHlwZSk7CiAJCQlpZiAoYWIpIHsKIAkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAotCQkJCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSBtc2c9JyUuMTAyNHMnIiwKLQkJCQkJCSBwaWQsIHVpZCwgbG9naW51aWQsIChjaGFyICopZGF0YSk7CisJCQkJCQkgInVzZXIgcGlkPSVkIHVpZD0ldSBhdWlkPSV1IiwKKwkJCQkJCSBwaWQsIHVpZCwgbG9naW51aWQpOworCQkJCWlmIChzaWQpIHsKKwkJCQkJY2hhciAqY3R4ID0gTlVMTDsKKwkJCQkJdTMyIGxlbjsKKwkJCQkJaWYgKHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAorCQkJCQkJCXNpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsIAorCQkJCQkJCSIgc3NpZD0ldSIsIHNpZCk7CisJCQkJCQkvKiBNYXliZSBjYWxsIGF1ZGl0X3BhbmljPyAqLworCQkJCQl9IGVsc2UKKwkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsIAorCQkJCQkJCSIgc3Viaj0lcyIsIGN0eCk7CisJCQkJCWtmcmVlKGN0eCk7CisJCQkJfQorCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbXNnPSclLjEwMjRzJyIsCisJCQkJCSAoY2hhciAqKWRhdGEpOwogCQkJCWF1ZGl0X3NldF9waWQoYWIsIHBpZCk7CiAJCQkJYXVkaXRfbG9nX2VuZChhYik7CiAJCQl9CkBAIC00ODAsNyArNTcxLDcgQEAKIAljYXNlIEFVRElUX0xJU1Q6CiAJCWVyciA9IGF1ZGl0X3JlY2VpdmVfZmlsdGVyKG5saC0+bmxtc2dfdHlwZSwgTkVUTElOS19DQihza2IpLnBpZCwKIAkJCQkJICAgdWlkLCBzZXEsIGRhdGEsIG5sbXNnX2xlbihubGgpLAotCQkJCQkgICBsb2dpbnVpZCk7CisJCQkJCSAgIGxvZ2ludWlkLCBzaWQpOwogCQlicmVhazsKIAljYXNlIEFVRElUX0FERF9SVUxFOgogCWNhc2UgQVVESVRfREVMX1JVTEU6CkBAIC00OTAsNyArNTgxLDcgQEAKIAljYXNlIEFVRElUX0xJU1RfUlVMRVM6CiAJCWVyciA9IGF1ZGl0X3JlY2VpdmVfZmlsdGVyKG5saC0+bmxtc2dfdHlwZSwgTkVUTElOS19DQihza2IpLnBpZCwKIAkJCQkJICAgdWlkLCBzZXEsIGRhdGEsIG5sbXNnX2xlbihubGgpLAotCQkJCQkgICBsb2dpbnVpZCk7CisJCQkJCSAgIGxvZ2ludWlkLCBzaWQpOwogCQlicmVhazsKIAljYXNlIEFVRElUX1NJR05BTF9JTkZPOgogCQlzaWdfZGF0YS51aWQgPSBhdWRpdF9zaWdfdWlkOwpAQCAtNTY0LDYgKzY1NSwxMSBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmF1ZGl0X3NrYl9xdWV1ZSk7CiAJYXVkaXRfaW5pdGlhbGl6ZWQgPSAxOwogCWF1ZGl0X2VuYWJsZWQgPSBhdWRpdF9kZWZhdWx0OworCisJLyogUmVnaXN0ZXIgdGhlIGNhbGxiYWNrIHdpdGggc2VsaW51eC4gIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkCisJICogd2hlbiBhIG5ldyBwb2xpY3kgaXMgbG9hZGVkLiAqLworCXNlbGludXhfYXVkaXRfc2V0X2NhbGxiYWNrKCZzZWxpbnV4X2F1ZGl0X3J1bGVfdXBkYXRlKTsKKwogCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9LRVJORUwsICJpbml0aWFsaXplZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmggYi9rZXJuZWwvYXVkaXQuaAppbmRleCBiYzUzOTIwLi42ZjczMzkyIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuaAorKysgYi9rZXJuZWwvYXVkaXQuaApAQCAtNTQsOSArNTQsMTEgQEAKIAogLyogUnVsZSBsaXN0cyAqLwogc3RydWN0IGF1ZGl0X2ZpZWxkIHsKLQl1MzIJCQl0eXBlOwotCXUzMgkJCXZhbDsKLQl1MzIJCQlvcDsKKwl1MzIJCQkJdHlwZTsKKwl1MzIJCQkJdmFsOworCXUzMgkJCQlvcDsKKwljaGFyCQkJCSpzZV9zdHI7CisJc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZQkqc2VfcnVsZTsKIH07CiAKIHN0cnVjdCBhdWRpdF9rcnVsZSB7CkBAIC04NiwzICs4OCw1IEBACiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19sb3N0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9wYW5pYyhjb25zdCBjaGFyICptZXNzYWdlKTsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggYXVkaXRfbmV0bGlua19tdXRleDsKKworZXh0ZXJuIGludCBzZWxpbnV4X2F1ZGl0X3J1bGVfdXBkYXRlKHZvaWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwppbmRleCBkM2E4NTM5Li43YzEzNDkwIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYworKysgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAjaW5jbHVkZSAiYXVkaXQuaCIKIAogLyogVGhlcmUgYXJlIHRocmVlIGxpc3RzIG9mIHJ1bGVzIC0tIG9uZSB0byBzZWFyY2ggYXQgdGFzayBjcmVhdGlvbgpAQCAtNDIsNiArNDMsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2ZyZWVfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmUpCiB7CisJaW50IGk7CisJaWYgKGUtPnJ1bGUuZmllbGRzKQorCQlmb3IgKGkgPSAwOyBpIDwgZS0+cnVsZS5maWVsZF9jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmZS0+cnVsZS5maWVsZHNbaV07CisJCQlrZnJlZShmLT5zZV9zdHIpOworCQkJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoZi0+c2VfcnVsZSk7CisJCX0KIAlrZnJlZShlLT5ydWxlLmZpZWxkcyk7CiAJa2ZyZWUoZSk7CiB9CkBAIC01Miw5ICs2MCwyOSBAQAogCWF1ZGl0X2ZyZWVfcnVsZShlKTsKIH0KIAorLyogSW5pdGlhbGl6ZSBhbiBhdWRpdCBmaWx0ZXJsaXN0IGVudHJ5LiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X2luaXRfZW50cnkodTMyIGZpZWxkX2NvdW50KQoreworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGF1ZGl0X2ZpZWxkICpmaWVsZHM7CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZW50cnkpKQorCQlyZXR1cm4gTlVMTDsKKworCWZpZWxkcyA9IGt6YWxsb2Moc2l6ZW9mKCpmaWVsZHMpICogZmllbGRfY291bnQsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZmllbGRzKSkgeworCQlrZnJlZShlbnRyeSk7CisJCXJldHVybiBOVUxMOworCX0KKwllbnRyeS0+cnVsZS5maWVsZHMgPSBmaWVsZHM7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKIC8qIFVucGFjayBhIGZpbHRlciBmaWVsZCdzIHN0cmluZyByZXByZXNlbnRhdGlvbiBmcm9tIHVzZXItc3BhY2UKICAqIGJ1ZmZlci4gKi8KLXN0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBjaGFyICphdWRpdF91bnBhY2tfc3RyaW5nKHZvaWQgKipidWZwLCBzaXplX3QgKnJlbWFpbiwgc2l6ZV90IGxlbikKK3N0YXRpYyBjaGFyICphdWRpdF91bnBhY2tfc3RyaW5nKHZvaWQgKipidWZwLCBzaXplX3QgKnJlbWFpbiwgc2l6ZV90IGxlbikKIHsKIAljaGFyICpzdHI7CiAKQEAgLTg0LDcgKzExMiw2IEBACiB7CiAJdW5zaWduZWQgbGlzdG5yOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGF1ZGl0X2ZpZWxkICpmaWVsZHM7CiAJaW50IGksIGVycjsKIAogCWVyciA9IC1FSU5WQUw7CkBAIC0xMDgsMjMgKzEzNSwxNCBAQAogCQlnb3RvIGV4aXRfZXJyOwogCiAJZXJyID0gLUVOT01FTTsKLQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghZW50cnkpKQorCWVudHJ5ID0gYXVkaXRfaW5pdF9lbnRyeShydWxlLT5maWVsZF9jb3VudCk7CisJaWYgKCFlbnRyeSkKIAkJZ290byBleGl0X2VycjsKLQlmaWVsZHMgPSBrbWFsbG9jKHNpemVvZigqZmllbGRzKSAqIHJ1bGUtPmZpZWxkX2NvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoIWZpZWxkcykpIHsKLQkJa2ZyZWUoZW50cnkpOwotCQlnb3RvIGV4aXRfZXJyOwotCX0KLQotCW1lbXNldCgmZW50cnktPnJ1bGUsIDAsIHNpemVvZihzdHJ1Y3QgYXVkaXRfa3J1bGUpKTsKLQltZW1zZXQoZmllbGRzLCAwLCBzaXplb2Yoc3RydWN0IGF1ZGl0X2ZpZWxkKSk7CiAKIAllbnRyeS0+cnVsZS5mbGFncyA9IHJ1bGUtPmZsYWdzICYgQVVESVRfRklMVEVSX1BSRVBFTkQ7CiAJZW50cnktPnJ1bGUubGlzdG5yID0gbGlzdG5yOwogCWVudHJ5LT5ydWxlLmFjdGlvbiA9IHJ1bGUtPmFjdGlvbjsKIAllbnRyeS0+cnVsZS5maWVsZF9jb3VudCA9IHJ1bGUtPmZpZWxkX2NvdW50OwotCWVudHJ5LT5ydWxlLmZpZWxkcyA9IGZpZWxkczsKIAogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9CSVRNQVNLX1NJWkU7IGkrKykKIAkJZW50cnktPnJ1bGUubWFza1tpXSA9IHJ1bGUtPm1hc2tbaV07CkBAIC0xNTAsMTUgKzE2OCwyMCBAQAogCWZvciAoaSA9IDA7IGkgPCBydWxlLT5maWVsZF9jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZlbnRyeS0+cnVsZS5maWVsZHNbaV07CiAKLQkJaWYgKHJ1bGUtPmZpZWxkc1tpXSAmIEFVRElUX1VOVVNFRF9CSVRTKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBleGl0X2ZyZWU7Ci0JCX0KLQogCQlmLT5vcCA9IHJ1bGUtPmZpZWxkc1tpXSAmIChBVURJVF9ORUdBVEV8QVVESVRfT1BFUkFUT1JTKTsKIAkJZi0+dHlwZSA9IHJ1bGUtPmZpZWxkc1tpXSAmIH4oQVVESVRfTkVHQVRFfEFVRElUX09QRVJBVE9SUyk7CiAJCWYtPnZhbCA9IHJ1bGUtPnZhbHVlc1tpXTsKIAorCQlpZiAoZi0+dHlwZSAmIEFVRElUX1VOVVNFRF9CSVRTIHx8CisJCSAgICBmLT50eXBlID09IEFVRElUX1NFX1VTRVIgfHwKKwkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfUk9MRSB8fAorCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9UWVBFIHx8CisJCSAgICBmLT50eXBlID09IEFVRElUX1NFX1NFTiB8fAorCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9DTFIpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCiAJCWVudHJ5LT5ydWxlLnZlcnNfb3BzID0gKGYtPm9wICYgQVVESVRfT1BFUkFUT1JTKSA/IDIgOiAxOwogCiAJCS8qIFN1cHBvcnQgZm9yIGxlZ2FjeSBvcGVyYXRvcnMgd2hlcmUKQEAgLTE4OCw4ICsyMTEsOSBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CiAJdm9pZCAqYnVmcDsKLQkvKiBzaXplX3QgcmVtYWluID0gZGF0YXN6IC0gc2l6ZW9mKHN0cnVjdCBhdWRpdF9ydWxlX2RhdGEpOyAqLworCXNpemVfdCByZW1haW4gPSBkYXRhc3ogLSBzaXplb2Yoc3RydWN0IGF1ZGl0X3J1bGVfZGF0YSk7CiAJaW50IGk7CisJY2hhciAqc3RyOwogCiAJZW50cnkgPSBhdWRpdF90b19lbnRyeV9jb21tb24oKHN0cnVjdCBhdWRpdF9ydWxlICopZGF0YSk7CiAJaWYgKElTX0VSUihlbnRyeSkpCkBAIC0yMDcsMTAgKzIzMSwzNSBAQAogCiAJCWYtPm9wID0gZGF0YS0+ZmllbGRmbGFnc1tpXSAmIEFVRElUX09QRVJBVE9SUzsKIAkJZi0+dHlwZSA9IGRhdGEtPmZpZWxkc1tpXTsKKwkJZi0+dmFsID0gZGF0YS0+dmFsdWVzW2ldOworCQlmLT5zZV9zdHIgPSBOVUxMOworCQlmLT5zZV9ydWxlID0gTlVMTDsKIAkJc3dpdGNoKGYtPnR5cGUpIHsKLQkJLyogY2FsbCB0eXBlLXNwZWNpZmljIGNvbnZlcnNpb24gcm91dGluZXMgaGVyZSAqLwotCQlkZWZhdWx0OgotCQkJZi0+dmFsID0gZGF0YS0+dmFsdWVzW2ldOworCQljYXNlIEFVRElUX1NFX1VTRVI6CisJCWNhc2UgQVVESVRfU0VfUk9MRToKKwkJY2FzZSBBVURJVF9TRV9UWVBFOgorCQljYXNlIEFVRElUX1NFX1NFTjoKKwkJY2FzZSBBVURJVF9TRV9DTFI6CisJCQlzdHIgPSBhdWRpdF91bnBhY2tfc3RyaW5nKCZidWZwLCAmcmVtYWluLCBmLT52YWwpOworCQkJaWYgKElTX0VSUihzdHIpKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJZW50cnktPnJ1bGUuYnVmbGVuICs9IGYtPnZhbDsKKworCQkJZXJyID0gc2VsaW51eF9hdWRpdF9ydWxlX2luaXQoZi0+dHlwZSwgZi0+b3AsIHN0ciwKKwkJCQkJCSAgICAgICZmLT5zZV9ydWxlKTsKKwkJCS8qIEtlZXAgY3VycmVudGx5IGludmFsaWQgZmllbGRzIGFyb3VuZCBpbiBjYXNlIHRoZXkKKwkJCSAqIGJlY29tZSB2YWxpZCBhZnRlciBhIHBvbGljeSByZWxvYWQuICovCisJCQlpZiAoZXJyID09IC1FSU5WQUwpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdWRpdCBydWxlIGZvciBzZWxpbnV4ICIKKwkJCQkgICAgICAgIlwnJXNcJyBpcyBpbnZhbGlkXG4iLCAgc3RyKTsKKwkJCQllcnIgPSAwOworCQkJfQorCQkJaWYgKGVycikgeworCQkJCWtmcmVlKHN0cik7CisJCQkJZ290byBleGl0X2ZyZWU7CisJCQl9IGVsc2UKKwkJCQlmLT5zZV9zdHIgPSBzdHI7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMjg2LDcgKzMzNSwxNCBAQAogCQlkYXRhLT5maWVsZHNbaV0gPSBmLT50eXBlOwogCQlkYXRhLT5maWVsZGZsYWdzW2ldID0gZi0+b3A7CiAJCXN3aXRjaChmLT50eXBlKSB7Ci0JCS8qIGNhbGwgdHlwZS1zcGVjaWZpYyBjb252ZXJzaW9uIHJvdXRpbmVzIGhlcmUgKi8KKwkJY2FzZSBBVURJVF9TRV9VU0VSOgorCQljYXNlIEFVRElUX1NFX1JPTEU6CisJCWNhc2UgQVVESVRfU0VfVFlQRToKKwkJY2FzZSBBVURJVF9TRV9TRU46CisJCWNhc2UgQVVESVRfU0VfQ0xSOgorCQkJZGF0YS0+YnVmbGVuICs9IGRhdGEtPnZhbHVlc1tpXSA9CisJCQkJYXVkaXRfcGFja19zdHJpbmcoJmJ1ZnAsIGYtPnNlX3N0cik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRhdGEtPnZhbHVlc1tpXSA9IGYtPnZhbDsKIAkJfQpAQCAtMzE0LDcgKzM3MCwxNCBAQAogCQkJcmV0dXJuIDE7CiAKIAkJc3dpdGNoKGEtPmZpZWxkc1tpXS50eXBlKSB7Ci0JCS8qIGNhbGwgdHlwZS1zcGVjaWZpYyBjb21wYXJpc29uIHJvdXRpbmVzIGhlcmUgKi8KKwkJY2FzZSBBVURJVF9TRV9VU0VSOgorCQljYXNlIEFVRElUX1NFX1JPTEU6CisJCWNhc2UgQVVESVRfU0VfVFlQRToKKwkJY2FzZSBBVURJVF9TRV9TRU46CisJCWNhc2UgQVVESVRfU0VfQ0xSOgorCQkJaWYgKHN0cmNtcChhLT5maWVsZHNbaV0uc2Vfc3RyLCBiLT5maWVsZHNbaV0uc2Vfc3RyKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGEtPmZpZWxkc1tpXS52YWwgIT0gYi0+ZmllbGRzW2ldLnZhbCkKIAkJCQlyZXR1cm4gMTsKQEAgLTMyOCw2ICszOTEsODEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogRHVwbGljYXRlIHNlbGludXggZmllbGQgaW5mb3JtYXRpb24uICBUaGUgc2VfcnVsZSBpcyBvcGFxdWUsIHNvIG11c3QgYmUKKyAqIHJlLWluaXRpYWxpemVkLiAqLworc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZHVwZV9zZWxpbnV4X2ZpZWxkKHN0cnVjdCBhdWRpdF9maWVsZCAqZGYsCisJCQkJCSAgIHN0cnVjdCBhdWRpdF9maWVsZCAqc2YpCit7CisJaW50IHJldCA9IDA7CisJY2hhciAqc2Vfc3RyOworCisJLyogb3VyIG93biBjb3B5IG9mIHNlX3N0ciAqLworCXNlX3N0ciA9IGtzdHJkdXAoc2YtPnNlX3N0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KElTX0VSUihzZV9zdHIpKSkKKwkgICAgcmV0dXJuIC1FTk9NRU07CisJZGYtPnNlX3N0ciA9IHNlX3N0cjsKKworCS8qIG91ciBvd24gKHJlZnJlc2hlZCkgY29weSBvZiBzZV9ydWxlICovCisJcmV0ID0gc2VsaW51eF9hdWRpdF9ydWxlX2luaXQoZGYtPnR5cGUsIGRmLT5vcCwgZGYtPnNlX3N0ciwKKwkJCQkgICAgICAmZGYtPnNlX3J1bGUpOworCS8qIEtlZXAgY3VycmVudGx5IGludmFsaWQgZmllbGRzIGFyb3VuZCBpbiBjYXNlIHRoZXkKKwkgKiBiZWNvbWUgdmFsaWQgYWZ0ZXIgYSBwb2xpY3kgcmVsb2FkLiAqLworCWlmIChyZXQgPT0gLUVJTlZBTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdWRpdCBydWxlIGZvciBzZWxpbnV4IFwnJXNcJyBpcyAiCisJCSAgICAgICAiaW52YWxpZFxuIiwgZGYtPnNlX3N0cik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogRHVwbGljYXRlIGFuIGF1ZGl0IHJ1bGUuICBUaGlzIHdpbGwgYmUgYSBkZWVwIGNvcHkgd2l0aCB0aGUgZXhjZXB0aW9uCisgKiBvZiB0aGUgd2F0Y2ggLSB0aGF0IHBvaW50ZXIgaXMgY2FycmllZCBvdmVyLiAgVGhlIHNlbGludXggc3BlY2lmaWMgZmllbGRzCisgKiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlIGNvcHkuICBUaGUgcG9pbnQgaXMgdG8gYmUgYWJsZSB0byByZXBsYWNlIHRoZSBvbGQKKyAqIHJ1bGUgd2l0aCB0aGUgbmV3IHJ1bGUgaW4gdGhlIGZpbHRlcmxpc3QsIHRoZW4gZnJlZSB0aGUgb2xkIHJ1bGUuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9kdXBlX3J1bGUoc3RydWN0IGF1ZGl0X2tydWxlICpvbGQpCit7CisJdTMyIGZjb3VudCA9IG9sZC0+ZmllbGRfY291bnQ7CisJc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgYXVkaXRfa3J1bGUgKm5ldzsKKwlpbnQgaSwgZXJyID0gMDsKKworCWVudHJ5ID0gYXVkaXRfaW5pdF9lbnRyeShmY291bnQpOworCWlmICh1bmxpa2VseSghZW50cnkpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW5ldyA9ICZlbnRyeS0+cnVsZTsKKwluZXctPnZlcnNfb3BzID0gb2xkLT52ZXJzX29wczsKKwluZXctPmZsYWdzID0gb2xkLT5mbGFnczsKKwluZXctPmxpc3RuciA9IG9sZC0+bGlzdG5yOworCW5ldy0+YWN0aW9uID0gb2xkLT5hY3Rpb247CisJZm9yIChpID0gMDsgaSA8IEFVRElUX0JJVE1BU0tfU0laRTsgaSsrKQorCQluZXctPm1hc2tbaV0gPSBvbGQtPm1hc2tbaV07CisJbmV3LT5idWZsZW4gPSBvbGQtPmJ1ZmxlbjsKKwluZXctPmZpZWxkX2NvdW50ID0gb2xkLT5maWVsZF9jb3VudDsKKwltZW1jcHkobmV3LT5maWVsZHMsIG9sZC0+ZmllbGRzLCBzaXplb2Yoc3RydWN0IGF1ZGl0X2ZpZWxkKSAqIGZjb3VudCk7CisKKwkvKiBkZWVwIGNvcHkgdGhpcyBpbmZvcm1hdGlvbiwgdXBkYXRpbmcgdGhlIHNlX3J1bGUgZmllbGRzLCBiZWNhdXNlCisJICogdGhlIG9yaWdpbmFscyB3aWxsIGFsbCBiZSBmcmVlZCB3aGVuIHRoZSBvbGQgcnVsZSBpcyBmcmVlZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmNvdW50OyBpKyspIHsKKwkJc3dpdGNoIChuZXctPmZpZWxkc1tpXS50eXBlKSB7CisJCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJY2FzZSBBVURJVF9TRV9ST0xFOgorCQljYXNlIEFVRElUX1NFX1RZUEU6CisJCWNhc2UgQVVESVRfU0VfU0VOOgorCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJCWVyciA9IGF1ZGl0X2R1cGVfc2VsaW51eF9maWVsZCgmbmV3LT5maWVsZHNbaV0sCisJCQkJCQkgICAgICAgJm9sZC0+ZmllbGRzW2ldKTsKKwkJfQorCQlpZiAoZXJyKSB7CisJCQlhdWRpdF9mcmVlX3J1bGUoZW50cnkpOworCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwkJfQorCX0KKworCXJldHVybiBlbnRyeTsKK30KKwogLyogQWRkIHJ1bGUgdG8gZ2l2ZW4gZmlsdGVybGlzdCBpZiBub3QgYSBkdXBsaWNhdGUuICBQcm90ZWN0ZWQgYnkKICAqIGF1ZGl0X25ldGxpbmtfbXV0ZXguICovCiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LApAQCAtNDQ4LDkgKzU4NiwxMCBAQAogICogQGRhdGE6IHBheWxvYWQgZGF0YQogICogQGRhdGFzejogc2l6ZSBvZiBwYXlsb2FkIGRhdGEKICAqIEBsb2dpbnVpZDogbG9naW51aWQgb2Ygc2VuZGVyCisgKiBAc2lkOiBTRSBMaW51eCBTZWN1cml0eSBJRCBvZiBzZW5kZXIKICAqLwogaW50IGF1ZGl0X3JlY2VpdmVfZmlsdGVyKGludCB0eXBlLCBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgc2VxLCB2b2lkICpkYXRhLAotCQkJIHNpemVfdCBkYXRhc3osIHVpZF90IGxvZ2ludWlkKQorCQkJIHNpemVfdCBkYXRhc3osIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCWludCAqZGVzdDsKQEAgLTQ5Myw5ICs2MzIsMjMgQEAKIAogCQllcnIgPSBhdWRpdF9hZGRfcnVsZShlbnRyeSwKIAkJCQkgICAgICZhdWRpdF9maWx0ZXJfbGlzdFtlbnRyeS0+cnVsZS5saXN0bnJdKTsKLQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkiYXVpZD0ldSBhZGQgcnVsZSB0byBsaXN0PSVkIHJlcz0lZFxuIiwKLQkJCWxvZ2ludWlkLCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQlpZiAoc2lkKSB7CisJCQljaGFyICpjdHggPSBOVUxMOworCQkJdTMyIGxlbjsKKwkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSB7CisJCQkJLyogTWF5YmUgY2FsbCBhdWRpdF9wYW5pYz8gKi8KKwkJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkgImF1aWQ9JXUgc3NpZD0ldSBhZGQgcnVsZSB0byBsaXN0PSVkIHJlcz0lZCIsCisJCQkJIGxvZ2ludWlkLCBzaWQsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7CisJCQl9IGVsc2UKKwkJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkgImF1aWQ9JXUgc3Viaj0lcyBhZGQgcnVsZSB0byBsaXN0PSVkIHJlcz0lZCIsCisJCQkJIGxvZ2ludWlkLCBjdHgsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7CisJCQlrZnJlZShjdHgpOworCQl9IGVsc2UKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCSJhdWlkPSV1IGFkZCBydWxlIHRvIGxpc3Q9JWQgcmVzPSVkIiwKKwkJCQlsb2dpbnVpZCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKIAogCQlpZiAoZXJyKQogCQkJYXVkaXRfZnJlZV9ydWxlKGVudHJ5KTsKQEAgLTUxMSw5ICs2NjQsMjQgQEAKIAogCQllcnIgPSBhdWRpdF9kZWxfcnVsZShlbnRyeSwKIAkJCQkgICAgICZhdWRpdF9maWx0ZXJfbGlzdFtlbnRyeS0+cnVsZS5saXN0bnJdKTsKLQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkiYXVpZD0ldSByZW1vdmUgcnVsZSBmcm9tIGxpc3Q9JWQgcmVzPSVkXG4iLAotCQkJbG9naW51aWQsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7CisKKwkJaWYgKHNpZCkgeworCQkJY2hhciAqY3R4ID0gTlVMTDsKKwkJCXUzMiBsZW47CisJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkgeworCQkJCS8qIE1heWJlIGNhbGwgYXVkaXRfcGFuaWM/ICovCisJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJCSJhdWlkPSV1IHNzaWQ9JXUgcmVtb3ZlIHJ1bGUgZnJvbSBsaXN0PSVkIHJlcz0lZCIsCisJCQkJCSBsb2dpbnVpZCwgc2lkLCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQkJfSBlbHNlCisJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCQkJCSJhdWlkPSV1IHN1Ymo9JXMgcmVtb3ZlIHJ1bGUgZnJvbSBsaXN0PSVkIHJlcz0lZCIsCisJCQkJCSBsb2dpbnVpZCwgY3R4LCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQkJa2ZyZWUoY3R4KTsKKwkJfSBlbHNlCisJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkiYXVpZD0ldSByZW1vdmUgcnVsZSBmcm9tIGxpc3Q9JWQgcmVzPSVkIiwKKwkJCQlsb2dpbnVpZCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKIAogCQlhdWRpdF9mcmVlX3J1bGUoZW50cnkpOwogCQlicmVhazsKQEAgLTYyOCwzICs3OTYsNjIgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmVzdWx0OwogfQorCisvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJ1bGUgY29udGFpbnMgYW55IHNlbGludXggZmllbGRzLiAgUmV0dXJucyAxIGlmIHRoZXJlCisgICBhcmUgc2VsaW51eCBmaWVsZHMgc3BlY2lmaWVkIGluIHRoZSBydWxlLCAwIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X3J1bGVfaGFzX3NlbGludXgoc3RydWN0IGF1ZGl0X2tydWxlICpydWxlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJ1bGUtPmZpZWxkX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGF1ZGl0X2ZpZWxkICpmID0gJnJ1bGUtPmZpZWxkc1tpXTsKKwkJc3dpdGNoIChmLT50eXBlKSB7CisJCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJY2FzZSBBVURJVF9TRV9ST0xFOgorCQljYXNlIEFVRElUX1NFX1RZUEU6CisJCWNhc2UgQVVESVRfU0VfU0VOOgorCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCByZS1pbml0aWFsaXplIHRoZSBzZV9ydWxlIGZpZWxkIG9mIGFsbCBhcHBsaWNhYmxlIHJ1bGVzLgorICogSXQgd2lsbCB0cmF2ZXJzZSB0aGUgZmlsdGVyIGxpc3RzIHNlcmFyY2hpbmcgZm9yIHJ1bGVzIHRoYXQgY29udGFpbiBzZWxpbnV4CisgKiBzcGVjaWZpYyBmaWx0ZXIgZmllbGRzLiAgV2hlbiBzdWNoIGEgcnVsZSBpcyBmb3VuZCwgaXQgaXMgY29waWVkLCB0aGUKKyAqIHNlbGludXggZmllbGQgaXMgcmUtaW5pdGlhbGl6ZWQsIGFuZCB0aGUgb2xkIHJ1bGUgaXMgcmVwbGFjZWQgd2l0aCB0aGUKKyAqIHVwZGF0ZWQgcnVsZS4gKi8KK2ludCBzZWxpbnV4X2F1ZGl0X3J1bGVfdXBkYXRlKHZvaWQpCit7CisJc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwgKm4sICpuZW50cnk7CisJaW50IGksIGVyciA9IDA7CisKKwkvKiBhdWRpdF9uZXRsaW5rX211dGV4IHN5bmNocm9uaXplcyB0aGUgd3JpdGVycyAqLworCW11dGV4X2xvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IEFVRElUX05SX0ZJTFRFUlM7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG4sICZhdWRpdF9maWx0ZXJfbGlzdFtpXSwgbGlzdCkgeworCQkJaWYgKCFhdWRpdF9ydWxlX2hhc19zZWxpbnV4KCZlbnRyeS0+cnVsZSkpCisJCQkJY29udGludWU7CisKKwkJCW5lbnRyeSA9IGF1ZGl0X2R1cGVfcnVsZSgmZW50cnktPnJ1bGUpOworCQkJaWYgKHVubGlrZWx5KElTX0VSUihuZW50cnkpKSkgeworCQkJCS8qIHNhdmUgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkIGZvciB0aGUKKwkJCQkgKiByZXR1cm4gdmFsdWUgKi8KKwkJCQlpZiAoIWVycikKKwkJCQkJZXJyID0gUFRSX0VSUihuZW50cnkpOworCQkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyBzZWxpbnV4IGZpbHRlcnMiKTsKKwkJCQlsaXN0X2RlbF9yY3UoJmVudHJ5LT5saXN0KTsKKwkJCX0gZWxzZSB7CisJCQkJbGlzdF9yZXBsYWNlX3JjdSgmZW50cnktPmxpc3QsICZuZW50cnktPmxpc3QpOworCQkJfQorCQkJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCA3ZjE2MGRmLi4xYzAzYTRlIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAKICNpbmNsdWRlICJhdWRpdC5oIgogCkBAIC04OSw3ICs5MCw3IEBACiAJdWlkX3QJCXVpZDsKIAlnaWRfdAkJZ2lkOwogCWRldl90CQlyZGV2OwotCWNoYXIJCSpjdHg7CisJdTMyCQlvc2lkOwogfTsKIAogc3RydWN0IGF1ZGl0X2F1eF9kYXRhIHsKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXVpZF90CQkJdWlkOwogCWdpZF90CQkJZ2lkOwogCW1vZGVfdAkJCW1vZGU7Ci0JY2hhciAJCQkqY3R4OworCXUzMgkJCW9zaWQ7CiB9OwogCiBzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfc29ja2V0Y2FsbCB7CkBAIC0xNjcsNyArMTY4LDggQEAKIAkJCSAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsCiAJCQkgICAgICBlbnVtIGF1ZGl0X3N0YXRlICpzdGF0ZSkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaSwgaiwgbmVlZF9zaWQgPSAxOworCXUzMiBzaWQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcnVsZS0+ZmllbGRfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmcnVsZS0+ZmllbGRzW2ldOwpAQCAtMjU3LDYgKzI1OSwyNyBAQAogCQkJaWYgKGN0eCkKIAkJCQlyZXN1bHQgPSBhdWRpdF9jb21wYXJhdG9yKGN0eC0+bG9naW51aWQsIGYtPm9wLCBmLT52YWwpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJY2FzZSBBVURJVF9TRV9ST0xFOgorCQljYXNlIEFVRElUX1NFX1RZUEU6CisJCWNhc2UgQVVESVRfU0VfU0VOOgorCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJCS8qIE5PVEU6IHRoaXMgbWF5IHJldHVybiBuZWdhdGl2ZSB2YWx1ZXMgaW5kaWNhdGluZworCQkJICAgYSB0ZW1wb3JhcnkgZXJyb3IuICBXZSBzaW1wbHkgdHJlYXQgdGhpcyBhcyBhCisJCQkgICBtYXRjaCBmb3Igbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbiB0aGF0CisJCQkgICBtYXkgYmUgd2FudGVkLiAgIEFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBhbHNvIGJlCisJCQkgICBsb2dnZWQgdXBvbiBlcnJvciAqLworCQkJaWYgKGYtPnNlX3J1bGUpIHsKKwkJCQlpZiAobmVlZF9zaWQpIHsKKwkJCQkJc2VsaW51eF90YXNrX2N0eGlkKHRzaywgJnNpZCk7CisJCQkJCW5lZWRfc2lkID0gMDsKKwkJCQl9CisJCQkJcmVzdWx0ID0gc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHNpZCwgZi0+dHlwZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+b3AsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPnNlX3J1bGUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCk7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBBVURJVF9BUkcwOgogCQljYXNlIEFVRElUX0FSRzE6CiAJCWNhc2UgQVVESVRfQVJHMjoKQEAgLTMyOSw3ICszNTIsNiBAQAogCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOwogfQogCi0vKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0YXNrX2xvY2soKSBoZWxkLiAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYXVkaXRfZ2V0X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJCQkgICAgICBpbnQgcmV0dXJuX3ZhbGlkLAogCQkJCQkJICAgICAgaW50IHJldHVybl9jb2RlKQpAQCAtMzkxLDkgKzQxMyw2IEBACiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBjb250ZXh0LT5uYW1lX2NvdW50OyBpKyspIHsKLQkJY2hhciAqcCA9IGNvbnRleHQtPm5hbWVzW2ldLmN0eDsKLQkJY29udGV4dC0+bmFtZXNbaV0uY3R4ID0gTlVMTDsKLQkJa2ZyZWUocCk7CiAJCWlmIChjb250ZXh0LT5uYW1lc1tpXS5uYW1lKQogCQkJX19wdXRuYW1lKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpOwogCX0KQEAgLTQxNiwxMSArNDM1LDYgQEAKIAkJCWRwdXQoYXhpLT5kZW50cnkpOwogCQkJbW50cHV0KGF4aS0+bW50KTsKIAkJfQotCQlpZiAoIGF1eC0+dHlwZSA9PSBBVURJVF9JUEMgKSB7Ci0JCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsICpheGkgPSAodm9pZCAqKWF1eDsKLQkJCWlmIChheGktPmN0eCkKLQkJCQlrZnJlZShheGktPmN0eCk7Ci0JCX0KIAogCQljb250ZXh0LT5hdXggPSBhdXgtPm5leHQ7CiAJCWtmcmVlKGF1eCk7CkBAIC01MDYsNyArNTIwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJhdWRpdDogZnJlZWQgJWQgY29udGV4dHNcbiIsIGNvdW50KTsKIH0KIAotc3RhdGljIHZvaWQgYXVkaXRfbG9nX3Rhc2tfY29udGV4dChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgdm9pZCBhdWRpdF9sb2dfdGFza19jb250ZXh0KHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiKQogewogCWNoYXIgKmN0eCA9IE5VTEw7CiAJc3NpemVfdCBsZW4gPSAwOwpAQCAtNTE4LDcgKzUzMiw3IEBACiAJCXJldHVybjsKIAl9CiAKLQljdHggPSBrbWFsbG9jKGxlbiwgZ2ZwX21hc2spOworCWN0eCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0eCkKIAkJZ290byBlcnJvcl9wYXRoOwogCkBAIC01MzYsNDcgKzU1MCw0NiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgYXVkaXRfbG9nX3Rhc2tfaW5mbyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgdm9pZCBhdWRpdF9sb2dfdGFza19pbmZvKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQljaGFyIG5hbWVbc2l6ZW9mKGN1cnJlbnQtPmNvbW0pXTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCWNoYXIgbmFtZVtzaXplb2YodHNrLT5jb21tKV07CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCi0JZ2V0X3Rhc2tfY29tbShuYW1lLCBjdXJyZW50KTsKKwkvKiB0c2sgPT0gY3VycmVudCAqLworCisJZ2V0X3Rhc2tfY29tbShuYW1lLCB0c2spOwogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgY29tbT0iKTsKIAlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBuYW1lKTsKIAotCWlmICghbW0pCi0JCXJldHVybjsKLQotCS8qCi0JICogdGhpcyBpcyBicml0dGxlOyBhbGwgY2FsbGVycyB0aGF0IHBhc3MgR0ZQX0FUT01JQyB3aWxsIGhhdmUKLQkgKiBOVUxMIGN1cnJlbnQtPm1tIGFuZCB3ZSB3b24ndCBnZXQgaGVyZS4KLQkgKi8KLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0Jdm1hID0gbW0tPm1tYXA7Ci0Jd2hpbGUgKHZtYSkgewotCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKSAmJgotCQkgICAgdm1hLT52bV9maWxlKSB7Ci0JCQlhdWRpdF9sb2dfZF9wYXRoKGFiLCAiZXhlPSIsCi0JCQkJCSB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LAotCQkJCQkgdm1hLT52bV9maWxlLT5mX3Zmc21udCk7Ci0JCQlicmVhazsKKwlpZiAobW0pIHsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQl2bWEgPSBtbS0+bW1hcDsKKwkJd2hpbGUgKHZtYSkgeworCQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYKKwkJCSAgICB2bWEtPnZtX2ZpbGUpIHsKKwkJCQlhdWRpdF9sb2dfZF9wYXRoKGFiLCAiZXhlPSIsCisJCQkJCQkgdm1hLT52bV9maWxlLT5mX2RlbnRyeSwKKwkJCQkJCSB2bWEtPnZtX2ZpbGUtPmZfdmZzbW50KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZtYSA9IHZtYS0+dm1fbmV4dDsKIAkJfQotCQl2bWEgPSB2bWEtPnZtX25leHQ7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JYXVkaXRfbG9nX3Rhc2tfY29udGV4dChhYiwgZ2ZwX21hc2spOworCWF1ZGl0X2xvZ190YXNrX2NvbnRleHQoYWIpOwogfQogCi1zdGF0aWMgdm9pZCBhdWRpdF9sb2dfZXhpdChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCwgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgdm9pZCBhdWRpdF9sb2dfZXhpdChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JaW50IGk7CisJaW50IGksIGNhbGxfcGFuaWMgPSAwOwogCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOwogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YSAqYXV4OwogCWNvbnN0IGNoYXIgKnR0eTsKIAotCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIGdmcF9tYXNrLCBBVURJVF9TWVNDQUxMKTsKKwkvKiB0c2sgPT0gY3VycmVudCAqLworCisJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgQVVESVRfU1lTQ0FMTCk7CiAJaWYgKCFhYikKIAkJcmV0dXJuOwkJLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImFyY2g9JXggc3lzY2FsbD0lZCIsCkBAIC01ODcsOCArNjAwLDggQEAKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzdWNjZXNzPSVzIGV4aXQ9JWxkIiwgCiAJCQkJIChjb250ZXh0LT5yZXR1cm5fdmFsaWQ9PUFVRElUU0NfU1VDQ0VTUyk/InllcyI6Im5vIiwKIAkJCQkgY29udGV4dC0+cmV0dXJuX2NvZGUpOwotCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eSAmJiBjdXJyZW50LT5zaWduYWwtPnR0eS0+bmFtZSkKLQkJdHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHktPm5hbWU7CisJaWYgKHRzay0+c2lnbmFsICYmIHRzay0+c2lnbmFsLT50dHkgJiYgdHNrLT5zaWduYWwtPnR0eS0+bmFtZSkKKwkJdHR5ID0gdHNrLT5zaWduYWwtPnR0eS0+bmFtZTsKIAllbHNlCiAJCXR0eSA9ICIobm9uZSkiOwogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCkBAIC02MDcsMTIgKzYyMCwxMiBAQAogCQkgIGNvbnRleHQtPmdpZCwKIAkJICBjb250ZXh0LT5ldWlkLCBjb250ZXh0LT5zdWlkLCBjb250ZXh0LT5mc3VpZCwKIAkJICBjb250ZXh0LT5lZ2lkLCBjb250ZXh0LT5zZ2lkLCBjb250ZXh0LT5mc2dpZCwgdHR5KTsKLQlhdWRpdF9sb2dfdGFza19pbmZvKGFiLCBnZnBfbWFzayk7CisJYXVkaXRfbG9nX3Rhc2tfaW5mbyhhYiwgdHNrKTsKIAlhdWRpdF9sb2dfZW5kKGFiKTsKIAogCWZvciAoYXV4ID0gY29udGV4dC0+YXV4OyBhdXg7IGF1eCA9IGF1eC0+bmV4dCkgewogCi0JCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIGdmcF9tYXNrLCBhdXgtPnR5cGUpOworCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBHRlBfS0VSTkVMLCBhdXgtPnR5cGUpOwogCQlpZiAoIWFiKQogCQkJY29udGludWU7IC8qIGF1ZGl0X3BhbmljIGhhcyBiZWVuIGNhbGxlZCAqLwogCkBAIC02MjAsOCArNjMzLDM5IEBACiAJCWNhc2UgQVVESVRfSVBDOiB7CiAJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsICpheGkgPSAodm9pZCAqKWF1eDsKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsIAotCQkJCQkgIiBxYnl0ZXM9JWx4IGl1aWQ9JXUgaWdpZD0ldSBtb2RlPSV4IG9iaj0lcyIsCi0JCQkJCSBheGktPnFieXRlcywgYXhpLT51aWQsIGF4aS0+Z2lkLCBheGktPm1vZGUsIGF4aS0+Y3R4KTsKKwkJCQkgIiBxYnl0ZXM9JWx4IGl1aWQ9JXUgaWdpZD0ldSBtb2RlPSV4IiwKKwkJCQkgYXhpLT5xYnl0ZXMsIGF4aS0+dWlkLCBheGktPmdpZCwgYXhpLT5tb2RlKTsKKwkJCWlmIChheGktPm9zaWQgIT0gMCkgeworCQkJCWNoYXIgKmN0eCA9IE5VTEw7CisJCQkJdTMyIGxlbjsKKwkJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCisJCQkJCQlheGktPm9zaWQsICZjdHgsICZsZW4pKSB7CisJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsCisJCQkJCQkJYXhpLT5vc2lkKTsKKwkJCQkJY2FsbF9wYW5pYyA9IDE7CisJCQkJfSBlbHNlCisJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKKwkJCQlrZnJlZShjdHgpOworCQkJfQorCQkJYnJlYWs7IH0KKworCQljYXNlIEFVRElUX0lQQ19TRVRfUEVSTTogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCSIgbmV3IHFieXRlcz0lbHggbmV3IGl1aWQ9JXUgbmV3IGlnaWQ9JXUgbmV3IG1vZGU9JXgiLAorCQkJCWF4aS0+cWJ5dGVzLCBheGktPnVpZCwgYXhpLT5naWQsIGF4aS0+bW9kZSk7CisJCQlpZiAoYXhpLT5vc2lkICE9IDApIHsKKwkJCQljaGFyICpjdHggPSBOVUxMOworCQkJCXUzMiBsZW47CisJCQkJaWYgKHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAorCQkJCQkJYXhpLT5vc2lkLCAmY3R4LCAmbGVuKSkgeworCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLAorCQkJCQkJCWF4aS0+b3NpZCk7CisJCQkJCWNhbGxfcGFuaWMgPSAxOworCQkJCX0gZWxzZQorCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9iaj0lcyIsIGN0eCk7CisJCQkJa2ZyZWUoY3R4KTsKKwkJCX0KIAkJCWJyZWFrOyB9CiAKIAkJY2FzZSBBVURJVF9TT0NLRVRDQUxMOiB7CkBAIC02NDksNyArNjkzLDcgQEAKIAl9CiAKIAlpZiAoY29udGV4dC0+cHdkICYmIGNvbnRleHQtPnB3ZG1udCkgewotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBnZnBfbWFzaywgQVVESVRfQ1dEKTsKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgQVVESVRfQ1dEKTsKIAkJaWYgKGFiKSB7CiAJCQlhdWRpdF9sb2dfZF9wYXRoKGFiLCAiY3dkPSIsIGNvbnRleHQtPnB3ZCwgY29udGV4dC0+cHdkbW50KTsKIAkJCWF1ZGl0X2xvZ19lbmQoYWIpOwpAQCAtNjU5LDcgKzcwMyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgaW5vICA9IGNvbnRleHQtPm5hbWVzW2ldLmlubzsKIAkJdW5zaWduZWQgbG9uZyBwaW5vID0gY29udGV4dC0+bmFtZXNbaV0ucGlubzsKIAotCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBnZnBfbWFzaywgQVVESVRfUEFUSCk7CisJCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEdGUF9LRVJORUwsIEFVRElUX1BBVEgpOwogCQlpZiAoIWFiKQogCQkJY29udGludWU7IC8qIGF1ZGl0X3BhbmljIGhhcyBiZWVuIGNhbGxlZCAqLwogCkBAIC02ODUsMzIgKzcyOSwzNSBAQAogCQkJCQkgY29udGV4dC0+bmFtZXNbaV0uZ2lkLCAKIAkJCQkJIE1BSk9SKGNvbnRleHQtPm5hbWVzW2ldLnJkZXYpLCAKIAkJCQkJIE1JTk9SKGNvbnRleHQtPm5hbWVzW2ldLnJkZXYpKTsKLQkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLmN0eCkgewotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvYmo9JXMiLAotCQkJCQljb250ZXh0LT5uYW1lc1tpXS5jdHgpOworCQlpZiAoY29udGV4dC0+bmFtZXNbaV0ub3NpZCAhPSAwKSB7CisJCQljaGFyICpjdHggPSBOVUxMOworCQkJdTMyIGxlbjsKKwkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKKwkJCQljb250ZXh0LT5uYW1lc1tpXS5vc2lkLCAmY3R4LCAmbGVuKSkgeworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsCisJCQkJCQljb250ZXh0LT5uYW1lc1tpXS5vc2lkKTsKKwkJCQljYWxsX3BhbmljID0gMjsKKwkJCX0gZWxzZQorCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKKwkJCWtmcmVlKGN0eCk7CiAJCX0KIAogCQlhdWRpdF9sb2dfZW5kKGFiKTsKIAl9CisJaWYgKGNhbGxfcGFuaWMpCisJCWF1ZGl0X3BhbmljKCJlcnJvciBjb252ZXJ0aW5nIHNpZCB0byBzdHJpbmciKTsKIH0KIAogLyoqCiAgKiBhdWRpdF9mcmVlIC0gZnJlZSBhIHBlci10YXNrIGF1ZGl0IGNvbnRleHQKICAqIEB0c2s6IHRhc2sgd2hvc2UgYXVkaXQgY29udGV4dCBibG9jayB0byBmcmVlCiAgKgotICogQ2FsbGVkIGZyb20gY29weV9wcm9jZXNzIGFuZCBfX3B1dF90YXNrX3N0cnVjdC4KKyAqIENhbGxlZCBmcm9tIGNvcHlfcHJvY2VzcyBhbmQgZG9fZXhpdAogICovCiB2b2lkIGF1ZGl0X2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQ7CiAKLQkvKgotCSAqIE5vIG5lZWQgdG8gbG9jayB0aGUgdGFzayAtIHdoZW4gd2UgZXhlY3V0ZSBhdWRpdF9mcmVlKCkKLQkgKiB0aGVuIHRoZSB0YXNrIGhhcyBubyBleHRlcm5hbCByZWZlcmVuY2VzIGFueW1vcmUsIGFuZAotCSAqIHdlIGFyZSB0ZWFyaW5nIGl0IGRvd24uIChUaGUgbG9ja2luZyBhbHNvIGNvbmZ1c2VzCi0JICogREVCVUdfTE9DS0RFUCAtIHRoaXMgZnJlZWluZyBtYXkgb2NjdXIgaW4gc29mdGlycQotCSAqIGNvbnRleHRzIGFzIHdlbGwsIHZpYSBSQ1UuKQotCSAqLwogCWNvbnRleHQgPSBhdWRpdF9nZXRfY29udGV4dCh0c2ssIDAsIDApOwogCWlmIChsaWtlbHkoIWNvbnRleHQpKQogCQlyZXR1cm47CkBAIC03MTksOCArNzY2LDkgQEAKIAkgKiBmdW5jdGlvbiAoZS5nLiwgZXhpdF9ncm91cCksIHRoZW4gZnJlZSBjb250ZXh0IGJsb2NrLiAKIAkgKiBXZSB1c2UgR0ZQX0FUT01JQyBoZXJlIGJlY2F1c2Ugd2UgbWlnaHQgYmUgZG9pbmcgdGhpcyAKIAkgKiBpbiB0aGUgY29udGV4dCBvZiB0aGUgaWRsZSB0aHJlYWQgKi8KKwkvKiB0aGF0IGNhbiBoYXBwZW4gb25seSBpZiB3ZSBhcmUgY2FsbGVkIGZyb20gZG9fZXhpdCgpICovCiAJaWYgKGNvbnRleHQtPmluX3N5c2NhbGwgJiYgY29udGV4dC0+YXVkaXRhYmxlKQotCQlhdWRpdF9sb2dfZXhpdChjb250ZXh0LCBHRlBfQVRPTUlDKTsKKwkJYXVkaXRfbG9nX2V4aXQoY29udGV4dCwgdHNrKTsKIAogCWF1ZGl0X2ZyZWVfY29udGV4dChjb250ZXh0KTsKIH0KQEAgLTc0MywxMCArNzkxLDExIEBACiAgKiB3aWxsIG9ubHkgYmUgd3JpdHRlbiBpZiBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbCByZXF1ZXN0cyB0aGF0IGl0CiAgKiBiZSB3cml0dGVuKS4KICAqLwotdm9pZCBhdWRpdF9zeXNjYWxsX2VudHJ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgYXJjaCwgaW50IG1ham9yLAordm9pZCBhdWRpdF9zeXNjYWxsX2VudHJ5KGludCBhcmNoLCBpbnQgbWFqb3IsCiAJCQkgdW5zaWduZWQgbG9uZyBhMSwgdW5zaWduZWQgbG9uZyBhMiwKIAkJCSB1bnNpZ25lZCBsb25nIGEzLCB1bnNpZ25lZCBsb25nIGE0KQogeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IHRzay0+YXVkaXRfY29udGV4dDsKIAllbnVtIGF1ZGl0X3N0YXRlICAgICBzdGF0ZTsKIApAQCAtODI0LDIyICs4NzMsMTggQEAKICAqIG1lc3NhZ2UpLCB0aGVuIHdyaXRlIG91dCB0aGUgc3lzY2FsbCBpbmZvcm1hdGlvbi4gIEluIGNhbGwgY2FzZXMsCiAgKiBmcmVlIHRoZSBuYW1lcyBzdG9yZWQgZnJvbSBnZXRuYW1lKCkuCiAgKi8KLXZvaWQgYXVkaXRfc3lzY2FsbF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdmFsaWQsIGxvbmcgcmV0dXJuX2NvZGUpCit2b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChpbnQgdmFsaWQsIGxvbmcgcmV0dXJuX2NvZGUpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0OwogCi0JZ2V0X3Rhc2tfc3RydWN0KHRzayk7Ci0JdGFza19sb2NrKHRzayk7CiAJY29udGV4dCA9IGF1ZGl0X2dldF9jb250ZXh0KHRzaywgdmFsaWQsIHJldHVybl9jb2RlKTsKLQl0YXNrX3VubG9jayh0c2spOwogCi0JLyogTm90IGhhdmluZyBhIGNvbnRleHQgaGVyZSBpcyBvaywgc2luY2UgdGhlIHBhcmVudCBtYXkgaGF2ZQotCSAqIGNhbGxlZCBfX3B1dF90YXNrX3N0cnVjdC4gKi8KIAlpZiAobGlrZWx5KCFjb250ZXh0KSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCWlmIChjb250ZXh0LT5pbl9zeXNjYWxsICYmIGNvbnRleHQtPmF1ZGl0YWJsZSkKLQkJYXVkaXRfbG9nX2V4aXQoY29udGV4dCwgR0ZQX0tFUk5FTCk7CisJCWF1ZGl0X2xvZ19leGl0KGNvbnRleHQsIHRzayk7CiAKIAljb250ZXh0LT5pbl9zeXNjYWxsID0gMDsKIAljb250ZXh0LT5hdWRpdGFibGUgID0gMDsKQEAgLTg1NCw4ICs4OTksNiBAQAogCQlhdWRpdF9mcmVlX2F1eChjb250ZXh0KTsKIAkJdHNrLT5hdWRpdF9jb250ZXh0ID0gY29udGV4dDsKIAl9Ci0gb3V0OgotCXB1dF90YXNrX3N0cnVjdCh0c2spOwogfQogCiAvKioKQEAgLTkzNiw0MCArOTc5LDExIEBACiAjZW5kaWYKIH0KIAotdm9pZCBhdWRpdF9pbm9kZV9jb250ZXh0KGludCBpZHgsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBhdWRpdF9pbm9kZV9jb250ZXh0KGludCBpZHgsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwotCWNvbnN0IGNoYXIgKnN1ZmZpeCA9IHNlY3VyaXR5X2lub2RlX3hhdHRyX2dldHN1ZmZpeCgpOwotCWNoYXIgKmN0eCA9IE5VTEw7Ci0JaW50IGxlbiA9IDA7CiAKLQlpZiAoIXN1ZmZpeCkKLQkJZ290byByZXQ7Ci0KLQlsZW4gPSBzZWN1cml0eV9pbm9kZV9nZXRzZWN1cml0eShpbm9kZSwgc3VmZml4LCBOVUxMLCAwLCAwKTsKLQlpZiAobGVuID09IC1FT1BOT1RTVVBQKQotCQlnb3RvIHJldDsKLQlpZiAobGVuIDwgMCkgCi0JCWdvdG8gZXJyb3JfcGF0aDsKLQotCWN0eCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eCkgCi0JCWdvdG8gZXJyb3JfcGF0aDsKLQotCWxlbiA9IHNlY3VyaXR5X2lub2RlX2dldHNlY3VyaXR5KGlub2RlLCBzdWZmaXgsIGN0eCwgbGVuLCAwKTsKLQlpZiAobGVuIDwgMCkKLQkJZ290byBlcnJvcl9wYXRoOwotCi0Ja2ZyZWUoY29udGV4dC0+bmFtZXNbaWR4XS5jdHgpOwotCWNvbnRleHQtPm5hbWVzW2lkeF0uY3R4ID0gY3R4OwotCWdvdG8gcmV0OwotCi1lcnJvcl9wYXRoOgotCWlmIChjdHgpCi0JCWtmcmVlKGN0eCk7Ci0JYXVkaXRfcGFuaWMoImVycm9yIGluIGF1ZGl0X2lub2RlX2NvbnRleHQiKTsKLXJldDoKLQlyZXR1cm47CisJc2VsaW51eF9nZXRfaW5vZGVfc2lkKGlub2RlLCAmY29udGV4dC0+bmFtZXNbaWR4XS5vc2lkKTsKIH0KIAogCkBAIC0xMTU1LDQwICsxMTY5LDM3IEBACiAJcmV0dXJuIGN0eCA/IGN0eC0+bG9naW51aWQgOiAtMTsKIH0KIAotc3RhdGljIGNoYXIgKmF1ZGl0X2lwY19jb250ZXh0KHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQorLyoqCisgKiBhdWRpdF9pcGNfb2JqIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGlwYyBvYmplY3QKKyAqIEBpcGNwOiBpcGMgcGVybWlzc2lvbnMKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IGF1ZGl0X2lwY19vYmooc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCiB7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwotCWNoYXIgKmN0eCA9IE5VTEw7Ci0JaW50IGxlbiA9IDA7CiAKIAlpZiAobGlrZWx5KCFjb250ZXh0KSkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAwOwogCi0JbGVuID0gc2VjdXJpdHlfaXBjX2dldHNlY3VyaXR5KGlwY3AsIE5VTEwsIDApOwotCWlmIChsZW4gPT0gLUVPUE5PVFNVUFApCi0JCWdvdG8gcmV0OwotCWlmIChsZW4gPCAwKQotCQlnb3RvIGVycm9yX3BhdGg7CisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWN0eCA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWN0eCkKLQkJZ290byBlcnJvcl9wYXRoOworCWF4LT51aWQgPSBpcGNwLT51aWQ7CisJYXgtPmdpZCA9IGlwY3AtPmdpZDsKKwlheC0+bW9kZSA9IGlwY3AtPm1vZGU7CisJc2VsaW51eF9nZXRfaXBjX3NpZChpcGNwLCAmYXgtPm9zaWQpOwogCi0JbGVuID0gc2VjdXJpdHlfaXBjX2dldHNlY3VyaXR5KGlwY3AsIGN0eCwgbGVuKTsKLQlpZiAobGVuIDwgMCkKLQkJZ290byBlcnJvcl9wYXRoOwotCi0JcmV0dXJuIGN0eDsKLQotZXJyb3JfcGF0aDoKLQlrZnJlZShjdHgpOwotCWF1ZGl0X3BhbmljKCJlcnJvciBpbiBhdWRpdF9pcGNfY29udGV4dCIpOwotcmV0OgotCXJldHVybiBOVUxMOworCWF4LT5kLnR5cGUgPSBBVURJVF9JUEM7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOwogfQogCiAvKioKLSAqIGF1ZGl0X2lwY19wZXJtcyAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBpcGMKKyAqIGF1ZGl0X2lwY19zZXRfcGVybSAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBuZXcgaXBjIHBlcm1pc3Npb25zCiAgKiBAcWJ5dGVzOiBtc2dxIGJ5dGVzCiAgKiBAdWlkOiBtc2dxIHVzZXIgaWQKICAqIEBnaWQ6IG1zZ3EgZ3JvdXAgaWQKQEAgLTExOTYsNyArMTIwNyw3IEBACiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCiAgKi8KLWludCBhdWRpdF9pcGNfcGVybXModW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSwgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCitpbnQgYXVkaXRfaXBjX3NldF9wZXJtKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUsIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQogewogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKQEAgLTEyMTIsOSArMTIyMyw5IEBACiAJYXgtPnVpZCA9IHVpZDsKIAlheC0+Z2lkID0gZ2lkOwogCWF4LT5tb2RlID0gbW9kZTsKLQlheC0+Y3R4ID0gYXVkaXRfaXBjX2NvbnRleHQoaXBjcCk7CisJc2VsaW51eF9nZXRfaXBjX3NpZChpcGNwLCAmYXgtPm9zaWQpOwogCi0JYXgtPmQudHlwZSA9IEFVRElUX0lQQzsKKwlheC0+ZC50eXBlID0gQVVESVRfSVBDX1NFVF9QRVJNOwogCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CiAJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCA3MjI0OGQxLi5hYjgxZmRkIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC0yMjMxLDE5ICsyMjMxLDI1IEBACiAgKiBTbyBvbmx5IEdGUF9LRVJORUwgYWxsb2NhdGlvbnMsIGlmIGFsbCBub2RlcyBpbiB0aGUgY3B1c2V0IGFyZQogICogc2hvcnQgb2YgbWVtb3J5LCBtaWdodCByZXF1aXJlIHRha2luZyB0aGUgY2FsbGJhY2tfbXV0ZXggbXV0ZXguCiAgKgotICogVGhlIGZpcnN0IGxvb3Agb3ZlciB0aGUgem9uZWxpc3QgaW4gbW0vcGFnZV9hbGxvYy5jOl9fYWxsb2NfcGFnZXMoKQotICogY2FsbHMgaGVyZSB3aXRoIF9fR0ZQX0hBUkRXQUxMIGFsd2F5cyBzZXQgaW4gZ2ZwX21hc2ssIGVuZm9yY2luZwotICogaGFyZHdhbGwgY3B1c2V0cyAtIG5vIGFsbG9jYXRpb24gb24gYSBub2RlIG91dHNpZGUgdGhlIGNwdXNldCBpcwotICogYWxsb3dlZCAodW5sZXNzIGluIGludGVycnVwdCwgb2YgY291cnNlKS4KKyAqIFRoZSBmaXJzdCBjYWxsIGhlcmUgZnJvbSBtbS9wYWdlX2FsbG9jOmdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKQorICogaGFzIF9fR0ZQX0hBUkRXQUxMIHNldCBpbiBnZnBfbWFzaywgZW5mb3JjaW5nIGhhcmR3YWxsIGNwdXNldHMsIHNvCisgKiBubyBhbGxvY2F0aW9uIG9uIGEgbm9kZSBvdXRzaWRlIHRoZSBjcHVzZXQgaXMgYWxsb3dlZCAodW5sZXNzIGluCisgKiBpbnRlcnJ1cHQsIG9mIGNvdXJzZSkuCiAgKgotICogVGhlIHNlY29uZCBsb29wIGRvZXNuJ3QgZXZlbiBjYWxsIGhlcmUgZm9yIEdGUF9BVE9NSUMgcmVxdWVzdHMKLSAqIChpZiB0aGUgX19hbGxvY19wYWdlcygpIGxvY2FsIHZhcmlhYmxlICd3YWl0JyBpcyBzZXQpLiAgVGhhdCBjaGVjawotICogYW5kIHRoZSBjaGVja3MgYmVsb3cgaGF2ZSB0aGUgY29tYmluZWQgYWZmZWN0IGluIHRoZSBzZWNvbmQgbG9vcCBvZgotICogdGhlIF9fYWxsb2NfcGFnZXMoKSByb3V0aW5lIHRoYXQ6CisgKiBUaGUgc2Vjb25kIHBhc3MgdGhyb3VnaCBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkgZG9lc24ndCBldmVuIGNhbGwKKyAqIGhlcmUgZm9yIEdGUF9BVE9NSUMgY2FsbHMuICBGb3IgdGhvc2UgY2FsbHMsIHRoZSBfX2FsbG9jX3BhZ2VzKCkKKyAqIHZhcmlhYmxlICd3YWl0JyBpcyBub3Qgc2V0LCBhbmQgdGhlIGJpdCBBTExPQ19DUFVTRVQgaXMgbm90IHNldAorICogaW4gYWxsb2NfZmxhZ3MuICBUaGF0IGxvZ2ljIGFuZCB0aGUgY2hlY2tzIGJlbG93IGhhdmUgdGhlIGNvbWJpbmVkCisgKiBhZmZlY3QgdGhhdDoKICAqCWluX2ludGVycnVwdCAtIGFueSBub2RlIG9rIChjdXJyZW50IHRhc2sgY29udGV4dCBpcnJlbGV2YW50KQogICoJR0ZQX0FUT01JQyAgIC0gYW55IG5vZGUgb2sKICAqCUdGUF9LRVJORUwgICAtIGFueSBub2RlIGluIGVuY2xvc2luZyBtZW1fZXhjbHVzaXZlIGNwdXNldCBvawogICoJR0ZQX1VTRVIgICAgIC0gb25seSBub2RlcyBpbiBjdXJyZW50IHRhc2tzIG1lbXMgYWxsb3dlZCBvay4KKyAqCisgKiBSdWxlOgorICogICAgRG9uJ3QgY2FsbCBjcHVzZXRfem9uZV9hbGxvd2VkKCkgaWYgeW91IGNhbid0IHNsZWVwLCB1bmxlc3MgeW91CisgKiAgICBwYXNzIGluIHRoZSBfX0dGUF9IQVJEV0FMTCBmbGFnIHNldCBpbiBnZnBfZmxhZywgd2hpY2ggZGlzYWJsZXMKKyAqICAgIHRoZSBjb2RlIHRoYXQgbWlnaHQgc2NhbiB1cCBhbmNlc3RvciBjcHVzZXRzIGFuZCBzbGVlcC4KICAqKi8KIAogaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCkBAIC0yMjU1LDYgKzIyNjEsNyBAQAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcmV0dXJuIDE7CiAJbm9kZSA9IHotPnpvbmVfcGdkYXQtPm5vZGVfaWQ7CisJbWlnaHRfc2xlZXBfaWYoIShnZnBfbWFzayAmIF9fR0ZQX0hBUkRXQUxMKSk7CiAJaWYgKG5vZGVfaXNzZXQobm9kZSwgY3VycmVudC0+bWVtc19hbGxvd2VkKSkKIAkJcmV0dXJuIDE7CiAJaWYgKGdmcF9tYXNrICYgX19HRlBfSEFSRFdBTEwpCS8qIElmIGhhcmR3YWxsIHJlcXVlc3QsIHN0b3AgaGVyZSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNmMyZWViOC4uZTk1YjkzMiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpcGVfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+IC8qIGZvciBhdWRpdF9mcmVlKCkgKi8KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtNTUsNyArNTcsNyBAQAogCQlkZXRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCk7CiAJCWRldGFjaF9waWQocCwgUElEVFlQRV9TSUQpOwogCi0JCWxpc3RfZGVsX2luaXQoJnAtPnRhc2tzKTsKKwkJbGlzdF9kZWxfcmN1KCZwLT50YXNrcyk7CiAJCV9fZ2V0X2NwdV92YXIocHJvY2Vzc19jb3VudHMpLS07CiAJfQogCWxpc3RfZGVsX3JjdSgmcC0+dGhyZWFkX2dyb3VwKTsKQEAgLTkwOSw2ICs5MTEsOCBAQAogCWlmICh1bmxpa2VseSh0c2stPmNvbXBhdF9yb2J1c3RfbGlzdCkpCiAJCWNvbXBhdF9leGl0X3JvYnVzdF9saXN0KHRzayk7CiAjZW5kaWYKKwlpZiAodW5saWtlbHkodHNrLT5hdWRpdF9jb250ZXh0KSkKKwkJYXVkaXRfZnJlZSh0c2spOwogCWV4aXRfbW0odHNrKTsKIAogCWV4aXRfc2VtKHRzayk7CkBAIC05NDEsNiArOTQ1LDkgQEAKIAlpZiAodHNrLT5pb19jb250ZXh0KQogCQlleGl0X2lvX2NvbnRleHQoKTsKIAorCWlmICh0c2stPnNwbGljZV9waXBlKQorCQlfX2ZyZWVfcGlwZV9pbmZvKHRzay0+c3BsaWNlX3BpcGUpOworCiAJLyogUEZfREVBRCBjYXVzZXMgZmluYWwgcHV0X3Rhc2tfc3RydWN0IGFmdGVyIHdlIHNjaGVkdWxlLiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwogCUJVR19PTih0c2stPmZsYWdzICYgUEZfREVBRCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZXh0YWJsZS5jIGIva2VybmVsL2V4dGFibGUuYwppbmRleCA3NTAxYjUzLi43ZmUyNjI4IDEwMDY0NAotLS0gYS9rZXJuZWwvZXh0YWJsZS5jCisrKyBiL2tlcm5lbC9leHRhYmxlLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAlyZXR1cm4gZTsKIH0KIAotc3RhdGljIGludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfc3RleHQgJiYKIAkgICAgYWRkciA8PSAodW5zaWduZWQgbG9uZylfZXRleHQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAzMzg0ZWI4Li5hYzgxMDBlIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTExNCw4ICsxMTQsNiBAQAogCVdBUk5fT04oYXRvbWljX3JlYWQoJnRzay0+dXNhZ2UpKTsKIAlXQVJOX09OKHRzayA9PSBjdXJyZW50KTsKIAotCWlmICh1bmxpa2VseSh0c2stPmF1ZGl0X2NvbnRleHQpKQotCQlhdWRpdF9mcmVlKHRzayk7CiAJc2VjdXJpdHlfdGFza19mcmVlKHRzayk7CiAJZnJlZV91aWQodHNrLT51c2VyKTsKIAlwdXRfZ3JvdXBfaW5mbyh0c2stPmdyb3VwX2luZm8pOwpAQCAtMTI0LDEyICsxMjIsNiBAQAogCQlmcmVlX3Rhc2sodHNrKTsKIH0KIAotdm9pZCBfX3B1dF90YXNrX3N0cnVjdF9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcmN1KTsKLQlfX3B1dF90YXNrX3N0cnVjdCh0c2spOwotfQotCiB2b2lkIF9faW5pdCBmb3JrX2luaXQodW5zaWduZWQgbG9uZyBtZW1wYWdlcykKIHsKICNpZm5kZWYgX19IQVZFX0FSQ0hfVEFTS19TVFJVQ1RfQUxMT0NBVE9SCkBAIC0xODYsNiArMTc4LDcgQEAKIAlhdG9taWNfc2V0KCZ0c2stPnVzYWdlLDIpOwogCWF0b21pY19zZXQoJnRzay0+ZnNfZXhjbCwgMCk7CiAJdHNrLT5idHJhY2Vfc2VxID0gMDsKKwl0c2stPnNwbGljZV9waXBlID0gTlVMTDsKIAlyZXR1cm4gdHNrOwogfQogCkBAIC0xMjEwLDcgKzEyMDMsNyBAQAogCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIHByb2Nlc3NfZ3JvdXAocCkpOwogCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1NJRCwgcC0+c2lnbmFsLT5zZXNzaW9uKTsKIAotCQkJbGlzdF9hZGRfdGFpbCgmcC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOworCQkJbGlzdF9hZGRfdGFpbF9yY3UoJnAtPnRhc2tzLCAmaW5pdF90YXNrLnRhc2tzKTsKIAkJCV9fZ2V0X2NwdV92YXIocHJvY2Vzc19jb3VudHMpKys7CiAJCX0KIAkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BJRCwgcC0+cGlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGYxODFmZjQuLjAxZmEyYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNDU2LDYgKzQ1Niw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9zdGFydCk7CiAKIC8qKgogICogaHJ0aW1lcl90cnlfdG9fY2FuY2VsIC0gdHJ5IHRvIGRlYWN0aXZhdGUgYSB0aW1lcgpAQCAtNDg0LDYgKzQ4NSw3IEBACiAJcmV0dXJuIHJldDsKIAogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl90cnlfdG9fY2FuY2VsKTsKIAogLyoqCiAgKiBocnRpbWVyX2NhbmNlbCAtIGNhbmNlbCBhIHRpbWVyIGFuZCB3YWl0IGZvciB0aGUgaGFuZGxlciB0byBmaW5pc2guCkBAIC01MDEsOCArNTAzLDEwIEBACiAKIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0dXJuIHJldDsKKwkJY3B1X3JlbGF4KCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9jYW5jZWwpOwogCiAvKioKICAqIGhydGltZXJfZ2V0X3JlbWFpbmluZyAtIGdldCByZW1haW5pbmcgdGltZSBmb3IgdGhlIHRpbWVyCkBAIC01MjEsNiArNTI1LDcgQEAKIAogCXJldHVybiByZW07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2dldF9yZW1haW5pbmcpOwogCiAjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKIC8qKgpAQCAtNTc5LDYgKzU4NCw3IEBACiAJdGltZXItPmJhc2UgPSAmYmFzZXNbY2xvY2tfaWRdOwogCXRpbWVyLT5ub2RlLnJiX3BhcmVudCA9IEhSVElNRVJfSU5BQ1RJVkU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2luaXQpOwogCiAvKioKICAqIGhydGltZXJfZ2V0X3JlcyAtIGdldCB0aGUgdGltZXIgcmVzb2x1dGlvbiBmb3IgYSBjbG9jawpAQCAtNTk4LDYgKzYwNCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfZ2V0X3Jlcyk7CiAKIC8qCiAgKiBFeHBpcmUgdGhlIHBlciBiYXNlIGhydGltZXItcXVldWU6CkBAIC04MzUsNyArODQyLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgaHJ0aW1lcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKK3N0YXRpYyBpbnQgaHJ0aW1lcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwpAQCAtODU5LDcgKzg2Niw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIGhydGltZXJzX25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBocnRpbWVyc19uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGhydGltZXJfY3B1X25vdGlmeSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvTWFrZWZpbGUgYi9rZXJuZWwvaXJxL01ha2VmaWxlCmluZGV4IDJiMzNmODUuLjlmNzdmNTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvTWFrZWZpbGUKKysrIGIva2VybmVsL2lycS9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIAotb2JqLXkgOj0gaGFuZGxlLm8gbWFuYWdlLm8gc3B1cmlvdXMubyBtaWdyYXRpb24ubworb2JqLXkgOj0gaGFuZGxlLm8gbWFuYWdlLm8gc3B1cmlvdXMubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFKSArPSBhdXRvcHJvYmUubwogb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mubworb2JqLSQoQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEpICs9IG1pZ3JhdGlvbi5vCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCBhYzc2NmFkLi4xMjc5ZTM0IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTI0Niw4ICsyNDYsMTAgQEAKIAogbWlzbWF0Y2g6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycSBoYW5kbGVyIG1pc21hdGNoXG4iLCBfX0ZVTkNUSU9OX18pOwotCWR1bXBfc3RhY2soKTsKKwlpZiAoIShuZXctPmZsYWdzICYgU0FfUFJPQkVJUlEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycSBoYW5kbGVyIG1pc21hdGNoXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkdW1wX3N0YWNrKCk7CisJfQogCXJldHVybiAtRUJVU1k7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDUyYTg2NTUuLjEzNGY5ZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMSw2ICsxLDUgQEAKLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEpCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKIHZvaWQgc2V0X3BlbmRpbmdfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewpAQCAtNjEsNSArNjAsMyBAQAogCX0KIAljcHVzX2NsZWFyKHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSk7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMTE1NmViMC4uMWZiZjQ2NiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC01ODUsNiArNTg1LDkgQEAKIAlpbnQgaTsKIAogCXJwLT5rcC5wcmVfaGFuZGxlciA9IHByZV9oYW5kbGVyX2tyZXRwcm9iZTsKKwlycC0+a3AucG9zdF9oYW5kbGVyID0gTlVMTDsKKwlycC0+a3AuZmF1bHRfaGFuZGxlciA9IE5VTEw7CisJcnAtPmtwLmJyZWFrX2hhbmRsZXIgPSBOVUxMOwogCiAJLyogUHJlLWFsbG9jYXRlIG1lbW9yeSBmb3IgbWF4IGtyZXRwcm9iZSBpbnN0YW5jZXMgKi8KIAlpZiAocnAtPm1heGFjdGl2ZSA8PSAwKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZDI0ZGViMC4uYmJlMDQ4NiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNzA1LDE0ICs3MDUsMTQgQEAKIAogdm9pZCBzeW1ib2xfcHV0X2FkZHIodm9pZCAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtb2R1bGUgKm1vZGFkZHI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKWFkZHIpKQorCWlmIChjb3JlX2tlcm5lbF90ZXh0KCh1bnNpZ25lZCBsb25nKWFkZHIpKQorCQlyZXR1cm47CisKKwlpZiAoIShtb2RhZGRyID0gbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylhZGRyKSkpCiAJCUJVRygpOwotCi0JbW9kdWxlX3B1dChtb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKWFkZHIpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtb2RsaXN0X2xvY2ssIGZsYWdzKTsKKwltb2R1bGVfcHV0KG1vZGFkZHIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ltYm9sX3B1dF9hZGRyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCBmODk1YzdjLi5jYzJhNGM5IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjcsNyArMjcsNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwYXVzZV9vbl9vb3BzX2xvY2spOwogCiBpbnQgcGFuaWNfdGltZW91dDsKLUVYUE9SVF9TWU1CT0wocGFuaWNfdGltZW91dCk7CiAKIEFUT01JQ19OT1RJRklFUl9IRUFEKHBhbmljX25vdGlmaWVyX2xpc3QpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDlmZDhkNGYuLmNlMGRmYjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC00MSw3ICs0MSw3IEBACiAJZGVwZW5kcyBvbiBQTSAmJiBTV0FQICYmIChYODYgJiYgKCFTTVAgfHwgU1VTUEVORF9TTVApKSB8fCAoKEZSViB8fCBQUEMzMikgJiYgIVNNUCkKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgdGhlIHBvc3NpYmlsaXR5IG9mIHN1c3BlbmRpbmcgdGhlIG1hY2hpbmUuCi0JICBJdCBkb2Vzbid0IG5lZWQgQVBNLgorCSAgSXQgZG9lc24ndCBuZWVkIEFDUEkgb3IgQVBNLgogCSAgWW91IG1heSBzdXNwZW5kIHlvdXIgbWFjaGluZSBieSAnc3dzdXNwJyBvciAnc2h1dGRvd24gLXogPHRpbWU+JyAKIAkgIChwYXRjaCBmb3Igc3lzdmluaXQgbmVlZGVkKS4gCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGVlMzcxZjUuLmE2ZDllZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJCWlmICgqcyAmJiAhc3RybmNtcChidWYsICpzLCBsZW4pKQogCQkJYnJlYWs7CiAJfQotCWlmICgqcykKKwlpZiAoc3RhdGUgPCBQTV9TVVNQRU5EX01BWCAmJiAqcykKIAkJZXJyb3IgPSBlbnRlcl9zdGF0ZShzdGF0ZSk7CiAJZWxzZQogCQllcnJvciA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG0uYyBiL2tlcm5lbC9wb3dlci9wbS5jCmluZGV4IDBmNjkwOGMuLjg0MDYzYWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wbS5jCisrKyBiL2tlcm5lbC9wb3dlci9wbS5jCkBAIC03NSwyNSArNzUsNiBAQAogCXJldHVybiBkZXY7CiB9CiAKLS8qKgotICoJcG1fdW5yZWdpc3RlciAtICB1bnJlZ2lzdGVyIGEgZGV2aWNlIHdpdGggcG93ZXIgbWFuYWdlbWVudAotICoJQGRldjogZGV2aWNlIHRvIHVucmVnaXN0ZXIKLSAqCi0gKglSZW1vdmUgYSBkZXZpY2UgZnJvbSB0aGUgcG93ZXIgbWFuYWdlbWVudCBub3RpZmljYXRpb24gbGlzdHMuIFRoZQotICoJZGV2IHBhc3NlZCBtdXN0IGJlIGEgaGFuZGxlIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgcG1fcmVnaXN0ZXIuCi0gKi8KLSAKLXZvaWQgcG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG1fZGV2ICpkZXYpCi17Ci0JaWYgKGRldikgewotCQltdXRleF9sb2NrKCZwbV9kZXZzX2xvY2spOwotCQlsaXN0X2RlbCgmZGV2LT5lbnRyeSk7Ci0JCW11dGV4X3VubG9jaygmcG1fZGV2c19sb2NrKTsKLQotCQlrZnJlZShkZXYpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgX19wbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldikKIHsKIAlpZiAoZGV2KSB7CkBAIC0yNTgsNyArMjM5LDYgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChwbV9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKHBtX3VucmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChwbV91bnJlZ2lzdGVyX2FsbCk7CiBFWFBPUlRfU1lNQk9MKHBtX3NlbmRfYWxsKTsKIEVYUE9SVF9TWU1CT0wocG1fYWN0aXZlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggYzU4NjNkMC4uM2VlZWRiYiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTI0MCwxNCArMjQwLDE1IEBACiAgKglmcmVlX3BhZ2VkaXIgLSBmcmVlIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIGFsbG9jX3BhZ2VkaXIoKQogICovCiAKLXN0YXRpYyB2b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QpCitzdGF0aWMgdm9pZCBmcmVlX3BhZ2VkaXIoc3RydWN0IHBiZSAqcGJsaXN0LCBpbnQgY2xlYXJfbm9zYXZlX2ZyZWUpCiB7CiAJc3RydWN0IHBiZSAqcGJlOwogCiAJd2hpbGUgKHBibGlzdCkgewogCQlwYmUgPSAocGJsaXN0ICsgUEJfUEFHRV9TS0lQKS0+bmV4dDsKIAkJQ2xlYXJQYWdlTm9zYXZlKHZpcnRfdG9fcGFnZShwYmxpc3QpKTsKLQkJQ2xlYXJQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UocGJsaXN0KSk7CisJCWlmIChjbGVhcl9ub3NhdmVfZnJlZSkKKwkJCUNsZWFyUGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKHBibGlzdCkpOwogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGJsaXN0KTsKIAkJcGJsaXN0ID0gcGJlOwogCX0KQEAgLTM4OSw3ICszOTAsNyBAQAogCQlwYmUtPm5leHQgPSBhbGxvY19pbWFnZV9wYWdlKGdmcF9tYXNrLCBzYWZlX25lZWRlZCk7CiAJfQogCWlmICghcGJlKSB7IC8qIGdldF96ZXJvZWRfcGFnZSgpIGZhaWxlZCAqLwotCQlmcmVlX3BhZ2VkaXIocGJsaXN0KTsKKwkJZnJlZV9wYWdlZGlyKHBibGlzdCwgMSk7CiAJCXBibGlzdCA9IE5VTEw7CiAgICAgICAgIH0gZWxzZQogCQljcmVhdGVfcGJlX2xpc3QocGJsaXN0LCBucl9wYWdlcyk7CkBAIC03MzYsNyArNzM3LDcgQEAKIAkJcGJsaXN0ID0gYWxsb2NfcGFnZWRpcihucl9jb3B5X3BhZ2VzLCBHRlBfQVRPTUlDLCAxKTsKIAkJaWYgKHBibGlzdCkKIAkJCWNvcHlfcGFnZV9iYWNrdXBfbGlzdChwYmxpc3QsIHApOwotCQlmcmVlX3BhZ2VkaXIocCk7CisJCWZyZWVfcGFnZWRpcihwLCAwKTsKIAkJaWYgKCFwYmxpc3QpCiAJCQllcnJvciA9IC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDhjYzE5NDMuLmMwNTZmMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTM2MCw4ICszNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3VyX2luZGV4LCBzdGFydF9wcmludDsKIAlzdGF0aWMgaW50IG1zZ19sZXZlbCA9IC0xOwogCi0JaWYgKCgobG9uZykoc3RhcnQgLSBlbmQpKSA+IDApCi0JCUJVRygpOworCUJVR19PTigoKGxvbmcpKHN0YXJ0IC0gZW5kKSkgPiAwKTsKIAogCWN1cl9pbmRleCA9IHN0YXJ0OwogCXN0YXJ0X3ByaW50ID0gc3RhcnQ7CkBAIC03MDgsOCArNzA3LDcgQEAKICAqLwogdm9pZCBhY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpCiB7Ci0JaWYgKGluX2ludGVycnVwdCgpKQotCQlCVUcoKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWRvd24oJmNvbnNvbGVfc2VtKTsKIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Byb2ZpbGUuYyBiL2tlcm5lbC9wcm9maWxlLmMKaW5kZXggNWE3MzBmZC4uNjhhZmUxMiAxMDA2NDQKLS0tIGEva2VybmVsL3Byb2ZpbGUuYworKysgYi9rZXJuZWwvcHJvZmlsZS5jCkBAIC0yOTksNyArMjk5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIGludCBfX2RldmluaXQgcHJvZmlsZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICppbmZvLAorc3RhdGljIGludCBwcm9maWxlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmluZm8sCiAJCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpfX2NwdSkKIHsKIAlpbnQgbm9kZSwgY3B1ID0gKHVuc2lnbmVkIGxvbmcpX19jcHU7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggODZhN2Y2Yy4uOTIxYzIyYSAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzAsOCArMzAsNyBAQAogICovCiB2b2lkIF9fcHRyYWNlX2xpbmsodGFza190ICpjaGlsZCwgdGFza190ICpuZXdfcGFyZW50KQogewotCWlmICghbGlzdF9lbXB0eSgmY2hpbGQtPnB0cmFjZV9saXN0KSkKLQkJQlVHKCk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZjaGlsZC0+cHRyYWNlX2xpc3QpKTsKIAlpZiAoY2hpbGQtPnBhcmVudCA9PSBuZXdfcGFyZW50KQogCQlyZXR1cm47CiAJbGlzdF9hZGQoJmNoaWxkLT5wdHJhY2VfbGlzdCwgJmNoaWxkLT5wYXJlbnQtPnB0cmFjZV9jaGlsZHJlbik7CkBAIC01NywxMCArNTYsNiBAQAogCQkJc2lnbmFsX3dha2VfdXAoY2hpbGQsIDEpOwogCQl9CiAJfQotCWlmIChjaGlsZC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9HUk9VUF9FWElUKSB7Ci0JCXNpZ2FkZHNldCgmY2hpbGQtPnBlbmRpbmcuc2lnbmFsLCBTSUdLSUxMKTsKLQkJc2lnbmFsX3dha2VfdXAoY2hpbGQsIDEpOwotCX0KIAlzcGluX3VubG9jaygmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogfQogCkBAIC04Miw3ICs3Nyw4IEBACiAJCWFkZF9wYXJlbnQoY2hpbGQpOwogCX0KIAotCXB0cmFjZV91bnRyYWNlKGNoaWxkKTsKKwlpZiAoY2hpbGQtPnN0YXRlID09IFRBU0tfVFJBQ0VEKQorCQlwdHJhY2VfdW50cmFjZShjaGlsZCk7CiB9CiAKIC8qCkBAIC0xNTIsMTIgKzE0OCwzNCBAQAogaW50IHB0cmFjZV9hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCWludCByZXR2YWw7Ci0JdGFza19sb2NrKHRhc2spOworCiAJcmV0dmFsID0gLUVQRVJNOwogCWlmICh0YXNrLT5waWQgPD0gMSkKLQkJZ290byBiYWQ7CisJCWdvdG8gb3V0OwogCWlmICh0YXNrLT50Z2lkID09IGN1cnJlbnQtPnRnaWQpCi0JCWdvdG8gYmFkOworCQlnb3RvIG91dDsKKworcmVwZWF0OgorCS8qCisJICogTmFzdHksIG5hc3R5LgorCSAqCisJICogV2Ugd2FudCB0byBob2xkIGJvdGggdGhlIHRhc2stbG9jayBhbmQgdGhlCisJICogdGFza2xpc3RfbG9jayBmb3Igd3JpdGluZyBhdCB0aGUgc2FtZSB0aW1lLgorCSAqIEJ1dCB0aGF0J3MgYWdhaW5zdCB0aGUgcnVsZXMgKHRhc2tsaXN0X2xvY2sKKwkgKiBpcyB0YWtlbiBmb3IgcmVhZGluZyBieSBpbnRlcnJ1cHRzIG9uIG90aGVyCisJICogY3B1J3MgdGhhdCBtYXkgaGF2ZSB0YXNrX2xvY2spLgorCSAqLworCXRhc2tfbG9jayh0YXNrKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmICghd3JpdGVfdHJ5bG9jaygmdGFza2xpc3RfbG9jaykpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQl0YXNrX3VubG9jayh0YXNrKTsKKwkJZG8geworCQkJY3B1X3JlbGF4KCk7CisJCX0gd2hpbGUgKCF3cml0ZV9jYW5fbG9jaygmdGFza2xpc3RfbG9jaykpOworCQlnb3RvIHJlcGVhdDsKKwl9CisKIAkvKiB0aGUgc2FtZSBwcm9jZXNzIGNhbm5vdCBiZSBhdHRhY2hlZCBtYW55IHRpbWVzICovCiAJaWYgKHRhc2stPnB0cmFjZSAmIFBUX1BUUkFDRUQpCiAJCWdvdG8gYmFkOwpAQCAtMTcwLDE3ICsxODgsMTUgQEAKIAkJCQkgICAgICA/IFBUX0FUVEFDSEVEIDogMCk7CiAJaWYgKGNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQogCQl0YXNrLT5wdHJhY2UgfD0gUFRfUFRSQUNFX0NBUDsKLQl0YXNrX3VubG9jayh0YXNrKTsKIAotCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAlfX3B0cmFjZV9saW5rKHRhc2ssIGN1cnJlbnQpOwotCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCiAJZm9yY2Vfc2lnX3NwZWNpZmljKFNJR1NUT1AsIHRhc2spOwotCXJldHVybiAwOwogCiBiYWQ6CisJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJdGFza191bmxvY2sodGFzayk7CitvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNDIxLDIxICs0MzcsMjIgQEAKICAqLwogaW50IHB0cmFjZV90cmFjZW1lKHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVQRVJNOwogCiAJLyoKIAkgKiBBcmUgd2UgYWxyZWFkeSBiZWluZyB0cmFjZWQ/CiAJICovCi0JaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpCi0JCXJldHVybiAtRVBFUk07Ci0JcmV0ID0gc2VjdXJpdHlfcHRyYWNlKGN1cnJlbnQtPnBhcmVudCwgY3VycmVudCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIC1FUEVSTTsKLQkvKgotCSAqIFNldCB0aGUgcHRyYWNlIGJpdCBpbiB0aGUgcHJvY2VzcyBwdHJhY2UgZmxhZ3MuCi0JICovCi0JY3VycmVudC0+cHRyYWNlIHw9IFBUX1BUUkFDRUQ7Ci0JcmV0dXJuIDA7CisJdGFza19sb2NrKGN1cnJlbnQpOworCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKSB7CisJCXJldCA9IHNlY3VyaXR5X3B0cmFjZShjdXJyZW50LT5wYXJlbnQsIGN1cnJlbnQpOworCQkvKgorCQkgKiBTZXQgdGhlIHB0cmFjZSBiaXQgaW4gdGhlIHByb2Nlc3MgcHRyYWNlIGZsYWdzLgorCQkgKi8KKwkJaWYgKCFyZXQpCisJCQljdXJyZW50LT5wdHJhY2UgfD0gUFRfUFRSQUNFRDsKKwl9CisJdGFza191bmxvY2soY3VycmVudCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDEzNDU4YmIuLjIwNThmODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC00NzksMTIgKzQ3OSwzMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbW1lZGlhdGUgUkNVLXJlbGF0ZWQgd29yayB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIHJldHVybmluZyAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZQorICogUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LSBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKi8KIGludCByY3VfcGVuZGluZyhpbnQgY3B1KQogewogCXJldHVybiBfX3JjdV9wZW5kaW5nKCZyY3VfY3RybGJsaywgJnBlcl9jcHUocmN1X2RhdGEsIGNwdSkpIHx8CiAJCV9fcmN1X3BlbmRpbmcoJnJjdV9iaF9jdHJsYmxrLCAmcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KSk7CiB9CiAKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZworICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQorICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICovCitpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQoreworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X2RhdGEsIGNwdSk7CisJc3RydWN0IHJjdV9kYXRhICpyZHBfYmggPSAmcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KTsKKworCXJldHVybiAoISFyZHAtPmN1cmxpc3QgfHwgISFyZHBfYmgtPmN1cmxpc3QgfHwgcmN1X3BlbmRpbmcoY3B1KSk7Cit9CisKIHZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1LCBpbnQgdXNlcikKIHsKIAlpZiAodXNlciB8fCAKQEAgLTUyMCw3ICs1MzksNyBAQAogCXRhc2tsZXRfaW5pdCgmcGVyX2NwdShyY3VfdGFza2xldCwgY3B1KSwgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzLCAwVUwpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIAorc3RhdGljIGludCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwpAQCAtNTM3LDcgKzU1Niw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIHJjdV9uYiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmN1X25iID0gewogCS5ub3RpZmllcl9jYWxsCT0gcmN1X2NwdV9ub3RpZnksCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGRkMTUzZDYuLmMxM2YxYmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC00Nzg4LDcgKzQ3ODgsNyBAQAogLyogUmVnaXN0ZXIgYXQgaGlnaGVzdCBwcmlvcml0eSBzbyB0aGF0IHRhc2sgbWlncmF0aW9uIChtaWdyYXRlX2FsbF90YXNrcykKICAqIGhhcHBlbnMgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZS4KICAqLwotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIG1pZ3JhdGlvbl9ub3RpZmllciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWlncmF0aW9uX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gbWlncmF0aW9uX2NhbGwsCiAJLnByaW9yaXR5ID0gMTAKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggOTIwMjViMS4uZTVmOGFlYSAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtNzY5LDggKzc2OSw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWlycXNfZGlzYWJsZWQoKSkKLQkJQlVHKCk7CisJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCWFzc2VydF9zcGluX2xvY2tlZCgmdC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkvKiBTaG9ydC1jaXJjdWl0IGlnbm9yZWQgc2lnbmFscy4gICovCkBAIC04NjksNyArODY4LDYgQEAKIAkJaWYgKHQgPT0gTlVMTCkKIAkJCS8qIHJlc3RhcnQgYmFsYW5jaW5nIGF0IHRoaXMgdGhyZWFkICovCiAJCQl0ID0gcC0+c2lnbmFsLT5jdXJyX3RhcmdldCA9IHA7Ci0JCUJVR19PTih0LT50Z2lkICE9IHAtPnRnaWQpOwogCiAJCXdoaWxlICghd2FudHNfc2lnbmFsKHNpZywgdCkpIHsKIAkJCXQgPSBuZXh0X3RocmVhZCh0KTsKQEAgLTEzODQsOCArMTM4Miw3IEBACiAJCSAqIHRoZSBvdmVycnVuIGNvdW50LiAgT3RoZXIgdXNlcyBzaG91bGQgbm90IHRyeSB0bwogCQkgKiBzZW5kIHRoZSBzaWduYWwgbXVsdGlwbGUgdGltZXMuCiAJCSAqLwotCQlpZiAocS0+aW5mby5zaV9jb2RlICE9IFNJX1RJTUVSKQotCQkJQlVHKCk7CisJCUJVR19PTihxLT5pbmZvLnNpX2NvZGUgIT0gU0lfVElNRVIpOwogCQlxLT5pbmZvLnNpX292ZXJydW4rKzsKIAkJZ290byBvdXQ7CiAJfSAKQEAgLTE3NTcsOSArMTc1NCw5IEBACiAJCQkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCiAJCQlwdHJhY2Vfc3RvcChzaWduciwgc2lnbnIsIGluZm8pOwogCi0JCQkvKiBXZSdyZSBiYWNrLiAgRGlkIHRoZSBkZWJ1Z2dlciBjYW5jZWwgdGhlIHNpZyBvciBncm91cF9leGl0PyAqLworCQkJLyogV2UncmUgYmFjay4gIERpZCB0aGUgZGVidWdnZXIgY2FuY2VsIHRoZSBzaWc/ICAqLwogCQkJc2lnbnIgPSBjdXJyZW50LT5leGl0X2NvZGU7Ci0JCQlpZiAoc2lnbnIgPT0gMCB8fCBjdXJyZW50LT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX0dST1VQX0VYSVQpCisJCQlpZiAoc2lnbnIgPT0gMCkKIAkJCQljb250aW51ZTsKIAogCQkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IGVjOGZlZDQuLjMzNmY5MmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGNwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKK3N0YXRpYyBpbnQgY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkJICB2b2lkICpoY3B1KQogewpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIGNwdV9uZmIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNwdV9uZmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVfY2FsbGJhY2sKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IGNlZDkxZTEuLjE0YzdmYWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIGIva2VybmVsL3NvZnRsb2NrdXAuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAvKgogICogQ3JlYXRlL2Rlc3Ryb3kgd2F0Y2hkb2cgdGhyZWFkcyBhcyBDUFVzIGNvbWUgYW5kIGdvOgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdAorc3RhdGljIGludAogY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlpbnQgaG90Y3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBjcHVfbmZiID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVfbmZiID0gewogCS5ub3RpZmllcl9jYWxsID0gY3B1X2NhbGxiYWNrCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzX25pLmMgYi9rZXJuZWwvc3lzX25pLmMKaW5kZXggZDgyODY0Yy4uNTQzMzE5NSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c19uaS5jCisrKyBiL2tlcm5lbC9zeXNfbmkuYwpAQCAtMTIwLDMgKzEyMCwxNSBAQAogY29uZF9zeXNjYWxsKHBwY19ydGFzKTsKIGNvbmRfc3lzY2FsbChzeXNfc3B1X3J1bik7CiBjb25kX3N5c2NhbGwoc3lzX3NwdV9jcmVhdGUpOworCisvKiBtbXUgZGVwZW5kaW5nIHdlYWsgc3lzY2FsbCBlbnRyaWVzICovCitjb25kX3N5c2NhbGwoc3lzX21wcm90ZWN0KTsKK2NvbmRfc3lzY2FsbChzeXNfbXN5bmMpOworY29uZF9zeXNjYWxsKHN5c19tbG9jayk7Citjb25kX3N5c2NhbGwoc3lzX211bmxvY2spOworY29uZF9zeXNjYWxsKHN5c19tbG9ja2FsbCk7Citjb25kX3N5c2NhbGwoc3lzX211bmxvY2thbGwpOworY29uZF9zeXNjYWxsKHN5c19taW5jb3JlKTsKK2NvbmRfc3lzY2FsbChzeXNfbWFkdmlzZSk7Citjb25kX3N5c2NhbGwoc3lzX21yZW1hcCk7Citjb25kX3N5c2NhbGwoc3lzX3JlbWFwX2ZpbGVfcGFnZXMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUuYyBiL2tlcm5lbC90aW1lLmMKaW5kZXggZmY4ZTcwMS4uYjAwZGRjNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS5jCkBAIC00MTAsNyArNDEwLDcgQEAKICAqIGN1cnJlbnRfZnNfdGltZSAtIFJldHVybiBGUyB0aW1lCiAgKiBAc2I6IFN1cGVyYmxvY2suCiAgKgotICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgdHJ1bmNhdGVkIHRvIHRoZSB0aW1lIGdyYW51YWxpdHkgc3VwcG9ydGVkIGJ5CisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSB0cnVuY2F0ZWQgdG8gdGhlIHRpbWUgZ3JhbnVsYXJpdHkgc3VwcG9ydGVkIGJ5CiAgKiB0aGUgZnMuCiAgKi8KIHN0cnVjdCB0aW1lc3BlYyBjdXJyZW50X2ZzX3RpbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTQyMSwxMSArNDIxLDExIEBACiBFWFBPUlRfU1lNQk9MKGN1cnJlbnRfZnNfdGltZSk7CiAKIC8qKgotICogdGltZXNwZWNfdHJ1bmMgLSBUcnVuY2F0ZSB0aW1lc3BlYyB0byBhIGdyYW51YWxpdHkKKyAqIHRpbWVzcGVjX3RydW5jIC0gVHJ1bmNhdGUgdGltZXNwZWMgdG8gYSBncmFudWxhcml0eQogICogQHQ6IFRpbWVzcGVjCi0gKiBAZ3JhbjogR3JhbnVhbGl0eSBpbiBucy4KKyAqIEBncmFuOiBHcmFudWxhcml0eSBpbiBucy4KICAqCi0gKiBUcnVuY2F0ZSBhIHRpbWVzcGVjIHRvIGEgZ3JhbnVhbGl0eS4gZ3JhbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBhIHNlY29uZC4KKyAqIFRydW5jYXRlIGEgdGltZXNwZWMgdG8gYSBncmFudWxhcml0eS4gZ3JhbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBhIHNlY29uZC4KICAqIEFsd2F5cyByb3VuZHMgZG93bi4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IHVzZWQgZm9yIHRpbWVzdGFtcHMgcmV0dXJuZWQgYnkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggNmI4MTJjMC4uOWU0OWRlZSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTgxLDkgKzgxLDEwIEBACiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIHR5cGVkZWYgc3RydWN0IHR2ZWNfdF9iYXNlX3MgdHZlY19iYXNlX3Q7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcyk7CisKIHR2ZWNfYmFzZV90IGJvb3RfdHZlY19iYXNlczsKIEVYUE9SVF9TWU1CT0woYm9vdF90dmVjX2Jhc2VzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh0dmVjX2Jhc2VfdCAqLCB0dmVjX2Jhc2VzKSA9IHsgJmJvb3RfdHZlY19iYXNlcyB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3J1bm5pbmdfdGltZXIodHZlY19iYXNlX3QgKmJhc2UsCiAJCQkJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKQEAgLTU0MCw2ICs1NDEsMjIgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOwogCisJLyoKKwkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgb3RoZXIgQ1BVcyBzZXJ2aWNlIHRpbWVyIElSUXMgYW5kIGluY3JlbWVudAorCSAqIGppZmZpZXMsIGJ1dCB3ZSBoYXZlIG5vdCB5ZXQgZ290IGEgbG9jYWwgdGltZXIgdGljayB0byBwcm9jZXNzCisJICogdGhlIHRpbWVyIHdoZWVscy4gIEluIHRoYXQgY2FzZSwgdGhlIGV4cGlyeSB0aW1lIGNhbiBiZSBiZWZvcmUKKwkgKiBqaWZmaWVzLCBidXQgc2luY2UgdGhlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciBoZXJlIGlzIHJlbGF0aXZlIHRvCisJICogamlmZmllcywgdGhlIGRlZmF1bHQgZXhwcmVzc2lvbiB3aGVuIGhpZ2gtcmVzb2x1dGlvbiB0aW1lcnMgYXJlCisJICogbm90IGFjdGl2ZSwKKwkgKgorCSAqICAgdGltZV9iZWZvcmUoTUFYX0pJRkZZX09GRlNFVCArIGppZmZpZXMsIGV4cGlyZXMpCisJICoKKwkgKiB3b3VsZCBmYWxzZWx5IGV2YWx1YXRlIHRvIHRydWUuICBJZiB0aGF0IGlzIHRoZSBjYXNlLCBqdXN0CisJICogcmV0dXJuIGppZmZpZXMgc28gdGhhdCB3ZSBjYW4gaW1tZWRpYXRlbHkgZmlyZSB0aGUgbG9jYWwgdGltZXIKKwkgKi8KKwlpZiAodGltZV9iZWZvcmUoZXhwaXJlcywgamlmZmllcykpCisJCXJldHVybiBqaWZmaWVzOworCiAJaWYgKHRpbWVfYmVmb3JlKGhyX2V4cGlyZXMsIGV4cGlyZXMpKQogCQlyZXR1cm4gaHJfZXhwaXJlczsKIApAQCAtMTIyNCwyOCArMTI0MSwzNiBAQAogewogCWludCBqOwogCXR2ZWNfYmFzZV90ICpiYXNlOworCXN0YXRpYyBjaGFyIF9fZGV2aW5pdGRhdGEgdHZlY19iYXNlX2RvbmVbTlJfQ1BVU107CiAKLQliYXNlID0gcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOwotCWlmICghYmFzZSkgeworCWlmICghdHZlY19iYXNlX2RvbmVbY3B1XSkgewogCQlzdGF0aWMgY2hhciBib290X2RvbmU7CiAKLQkJLyoKLQkJICogQ2Fubm90IGRvIGFsbG9jYXRpb24gaW4gaW5pdF90aW1lcnMgYXMgdGhhdCBydW5zIGJlZm9yZSB0aGUKLQkJICogYWxsb2NhdG9yIGluaXRpYWxpemVzIChhbmQgd291bGQgd2FzdGUgbWVtb3J5IGlmIHRoZXJlIGFyZQotCQkgKiBtb3JlIHBvc3NpYmxlIENQVXMgdGhhbiB3aWxsIGV2ZXIgYmUgaW5zdGFsbGVkL2Jyb3VnaHQgdXApLgotCQkgKi8KIAkJaWYgKGJvb3RfZG9uZSkgeworCQkJLyoKKwkJCSAqIFRoZSBBUHMgdXNlIHRoaXMgcGF0aCBsYXRlciBpbiBib290CisJCQkgKi8KIAkJCWJhc2UgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKCpiYXNlKSwgR0ZQX0tFUk5FTCwKIAkJCQkJCWNwdV90b19ub2RlKGNwdSkpOwogCQkJaWYgKCFiYXNlKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJbWVtc2V0KGJhc2UsIDAsIHNpemVvZigqYmFzZSkpOworCQkJcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpID0gYmFzZTsKIAkJfSBlbHNlIHsKLQkJCWJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzOworCQkJLyoKKwkJCSAqIFRoaXMgaXMgZm9yIHRoZSBib290IENQVSAtIHdlIHVzZSBjb21waWxlLXRpbWUKKwkJCSAqIHN0YXRpYyBpbml0aWFsaXNhdGlvbiBiZWNhdXNlIHBlci1jcHUgbWVtb3J5IGlzbid0CisJCQkgKiByZWFkeSB5ZXQgYW5kIGJlY2F1c2UgdGhlIG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBub3QKKwkJCSAqIGluaXRpYWxpc2VkIGVpdGhlci4KKwkJCSAqLwogCQkJYm9vdF9kb25lID0gMTsKKwkJCWJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzOwogCQl9Ci0JCXBlcl9jcHUodHZlY19iYXNlcywgY3B1KSA9IGJhc2U7CisJCXR2ZWNfYmFzZV9kb25lW2NwdV0gPSAxOworCX0gZWxzZSB7CisJCWJhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7CiAJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPmxvY2spOwogCWZvciAoaiA9IDA7IGogPCBUVk5fU0laRTsgaisrKSB7CiAJCUlOSVRfTElTVF9IRUFEKGJhc2UtPnR2NS52ZWMgKyBqKTsKQEAgLTEzMDUsNyArMTMzMCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHRpbWVyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCAKK3N0YXRpYyBpbnQgdGltZXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwpAQCAtMTMyNSw3ICsxMzUwLDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fZGV2aW5pdGRhdGEgdGltZXJzX25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0aW1lcnNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSB0aW1lcl9jcHVfbm90aWZ5LAogfTsKIApAQCAtMTQ1NSw3ICsxNDgwLDcgQEAKIAkgKi8KIAlpZiAoamlmZmllcyAlIElOVEVSUE9MQVRPUl9BREpVU1QgPT0gMCkKIAl7Ci0JCWlmICh0aW1lX2ludGVycG9sYXRvci0+c2tpcHMgPT0gMCAmJiB0aW1lX2ludGVycG9sYXRvci0+b2Zmc2V0ID4gVElDS19OU0VDKQorCQlpZiAodGltZV9pbnRlcnBvbGF0b3ItPnNraXBzID09IDAgJiYgdGltZV9pbnRlcnBvbGF0b3ItPm9mZnNldCA+IHRpY2tfbnNlYykKIAkJCXRpbWVfaW50ZXJwb2xhdG9yLT5uc2VjX3Blcl9jeWMtLTsKIAkJaWYgKHRpbWVfaW50ZXJwb2xhdG9yLT5uc19za2lwcGVkID4gSU5URVJQT0xBVE9SX01BWF9TS0lQICYmIHRpbWVfaW50ZXJwb2xhdG9yLT5vZmZzZXQgPT0gMCkKIAkJCXRpbWVfaW50ZXJwb2xhdG9yLT5uc2VjX3Blcl9jeWMrKzsKQEAgLTE0NzksOCArMTUwNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICh0aS0+ZnJlcXVlbmN5ID09IDAgfHwgdGktPm1hc2sgPT0gMCkKLQkJQlVHKCk7CisJQlVHX09OKHRpLT5mcmVxdWVuY3kgPT0gMCB8fCB0aS0+bWFzayA9PSAwKTsKIAogCXRpLT5uc2VjX3Blcl9jeWMgPSAoKHU2NClOU0VDX1BFUl9TRUMgPDwgdGktPnNoaWZ0KSAvIHRpLT5mcmVxdWVuY3k7CiAJc3Bpbl9sb2NrKCZ0aW1lX2ludGVycG9sYXRvcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC91aWQxNi5jIGIva2VybmVsL3VpZDE2LmMKaW5kZXggYWEyNTYwNS4uMTg3ZTJhNCAxMDA2NDQKLS0tIGEva2VybmVsL3VpZDE2LmMKKysrIGIva2VybmVsL3VpZDE2LmMKQEAgLTIwLDQzICsyMCw2NyBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2Nob3duMTYoY29uc3QgY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwgb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCkKIHsKLQlyZXR1cm4gc3lzX2Nob3duKGZpbGVuYW1lLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKKwlsb25nIHJldCA9IHN5c19jaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2xjaG93bjE2KGNvbnN0IGNoYXIgX191c2VyICogZmlsZW5hbWUsIG9sZF91aWRfdCB1c2VyLCBvbGRfZ2lkX3QgZ3JvdXApCiB7Ci0JcmV0dXJuIHN5c19sY2hvd24oZmlsZW5hbWUsIGxvdzJoaWdodWlkKHVzZXIpLCBsb3cyaGlnaGdpZChncm91cCkpOworCWxvbmcgcmV0ID0gc3lzX2xjaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2ZjaG93bjE2KHVuc2lnbmVkIGludCBmZCwgb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCkKIHsKLQlyZXR1cm4gc3lzX2ZjaG93bihmZCwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CisJbG9uZyByZXQgPSBzeXNfZmNob3duKGZkLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmVnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRyZWdpZChsb3cyaGlnaGdpZChyZ2lkKSwgbG93MmhpZ2hnaWQoZWdpZCkpOworCWxvbmcgcmV0ID0gc3lzX3NldHJlZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldGdpZDE2KG9sZF9naWRfdCBnaWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0Z2lkKGxvdzJoaWdoZ2lkKGdpZCkpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXVpZDE2KG9sZF91aWRfdCBydWlkLCBvbGRfdWlkX3QgZXVpZCkKIHsKLQlyZXR1cm4gc3lzX3NldHJldWlkKGxvdzJoaWdodWlkKHJ1aWQpLCBsb3cyaGlnaHVpZChldWlkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0cmV1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0dWlkMTYob2xkX3VpZF90IHVpZCkKIHsKLQlyZXR1cm4gc3lzX3NldHVpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwlsb25nIHJldCA9IHN5c19zZXR1aWQobG93MmhpZ2h1aWQodWlkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJlc3VpZDE2KG9sZF91aWRfdCBydWlkLCBvbGRfdWlkX3QgZXVpZCwgb2xkX3VpZF90IHN1aWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRyZXN1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpLAotCQlsb3cyaGlnaHVpZChzdWlkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0cmVzdWlkKGxvdzJoaWdodWlkKHJ1aWQpLCBsb3cyaGlnaHVpZChldWlkKSwKKwkJCQkgbG93MmhpZ2h1aWQoc3VpZCkpOworCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLworCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRyZXN1aWQxNihvbGRfdWlkX3QgX191c2VyICpydWlkLCBvbGRfdWlkX3QgX191c2VyICpldWlkLCBvbGRfdWlkX3QgX191c2VyICpzdWlkKQpAQCAtNzIsOCArOTYsMTEgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRyZXNnaWQxNihvbGRfZ2lkX3QgcmdpZCwgb2xkX2dpZF90IGVnaWQsIG9sZF9naWRfdCBzZ2lkKQogewotCXJldHVybiBzeXNfc2V0cmVzZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSwKLQkJbG93MmhpZ2hnaWQoc2dpZCkpOworCWxvbmcgcmV0ID0gc3lzX3NldHJlc2dpZChsb3cyaGlnaGdpZChyZ2lkKSwgbG93MmhpZ2hnaWQoZWdpZCksCisJCQkJIGxvdzJoaWdoZ2lkKHNnaWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cmVzZ2lkMTYob2xkX2dpZF90IF9fdXNlciAqcmdpZCwgb2xkX2dpZF90IF9fdXNlciAqZWdpZCwgb2xkX2dpZF90IF9fdXNlciAqc2dpZCkKQEAgLTg5LDEyICsxMTYsMTggQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRmc3VpZDE2KG9sZF91aWRfdCB1aWQpCiB7Ci0JcmV0dXJuIHN5c19zZXRmc3VpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwlsb25nIHJldCA9IHN5c19zZXRmc3VpZChsb3cyaGlnaHVpZCh1aWQpKTsKKwkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KKwlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0ZnNnaWQxNihvbGRfZ2lkX3QgZ2lkKQogewotCXJldHVybiBzeXNfc2V0ZnNnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJbG9uZyByZXQgPSBzeXNfc2V0ZnNnaWQobG93MmhpZ2hnaWQoZ2lkKSk7CisJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCisJcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGdyb3VwczE2X3RvX3VzZXIob2xkX2dpZF90IF9fdXNlciAqZ3JvdXBsaXN0LApkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IGU5ZTQ2NGEuLjg4MGZiNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogfQogCiAvKiBXZSdyZSBob2xkaW5nIHRoZSBjcHVjb250cm9sIG11dGV4IGhlcmUgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHdvcmtxdWV1ZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHdvcmtxdWV1ZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwKIAkJCQkgIHZvaWQgKmhjcHUpCiB7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGQ1N2ZkOTEuLmNjYjBjMWYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogY29uZmlnIERFQlVHX01VVEVYRVMKIAlib29sICJNdXRleCBkZWJ1Z2dpbmcsIGRlYWRsb2NrIGRldGVjdGlvbiIKLQlkZWZhdWx0IHkKKwlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgVGhpcyBhbGxvd3MgbXV0ZXggc2VtYW50aWNzIHZpb2xhdGlvbnMgYW5kIG11dGV4IHJlbGF0ZWQgZGVhZGxvY2tzCkBAIC0xODksNyArMTg5LDcgQEAKIGNvbmZpZyBVTldJTkRfSU5GTwogCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHVud2luZCBpbmZvcm1hdGlvbiIKIAlkZXBlbmRzIG9uICFJQTY0Ci0JZGVwZW5kcyBvbiAhTU9EVUxFUyB8fCAhKE1JUFMgfHwgUEFSSVNDIHx8IFBQQyB8fCBTVVBFUkggfHwgU1BBUkM2NCB8fCBWODUwKQorCWRlcGVuZHMgb24gIU1PRFVMRVMgfHwgIShNSVBTIHx8IFBBUklTQyB8fCBQUEMgfHwgU1VQRVJIIHx8IFY4NTApCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2Ugd2lsbCBiZSBzbGlnaHRseSBsYXJnZXIKIAkgIGJ1dCBub3Qgc2xvd2VyLCBhbmQgaXQgd2lsbCBnaXZlIHZlcnkgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDI1MjA0YTQuLjY4N2FiNDEgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiB7CiAJa3JlZl9pbml0KCZrb2JqLT5rcmVmKTsKIAlJTklUX0xJU1RfSEVBRCgma29iai0+ZW50cnkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmtvYmotPnBvbGwpOwogCWtvYmotPmtzZXQgPSBrc2V0X2dldChrb2JqLT5rc2V0KTsKIH0KIApAQCAtMTk3LDE0ICsxOTgsMTQgQEAKIAogCQkvKiBiZSBub2lzeSBvbiBlcnJvciBpc3N1ZXMgKi8KIAkJaWYgKGVycm9yID09IC1FRVhJU1QpCi0JCQlwcmludGsoImtvYmplY3RfYWRkIGZhaWxlZCBmb3IgJXMgd2l0aCAtRUVYSVNULCAiCisJCQlwcl9kZWJ1Zygia29iamVjdF9hZGQgZmFpbGVkIGZvciAlcyB3aXRoIC1FRVhJU1QsICIKIAkJCSAgICAgICAiZG9uJ3QgdHJ5IHRvIHJlZ2lzdGVyIHRoaW5ncyB3aXRoIHRoZSAiCiAJCQkgICAgICAgInNhbWUgbmFtZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4iLAogCQkJICAgICAgIGtvYmplY3RfbmFtZShrb2JqKSk7CiAJCWVsc2UKLQkJCXByaW50aygia29iamVjdF9hZGQgZmFpbGVkIGZvciAlcyAoJWQpXG4iLAorCQkJcHJfZGVidWcoImtvYmplY3RfYWRkIGZhaWxlZCBmb3IgJXMgKCVkKVxuIiwKIAkJCSAgICAgICBrb2JqZWN0X25hbWUoa29iaiksIGVycm9yKTsKLQkJZHVtcF9zdGFjaygpOworCQkvKiBkdW1wX3N0YWNrKCk7ICovCiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtNDIxLDcgKzQyMiw2IEBACiAKIAlyZXR1cm4gazsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGtvYmplY3RfYWRkX2Rpcik7CiAKIC8qKgogICoJa3NldF9pbml0IC0gaW5pdGlhbGl6ZSBhIGtzZXQgZm9yIHVzZQpAQCAtNTY4LDcgKzU2OCw3IEBACiAgKglAczoJc3Vic3lzdGVtLgogICoJQGE6CWF0dHJpYnV0ZSBkZXNjaXB0b3IuCiAgKi8KLQorI2lmIDAKIHZvaWQgc3Vic3lzX3JlbW92ZV9maWxlKHN0cnVjdCBzdWJzeXN0ZW0gKiBzLCBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSAqIGEpCiB7CiAJaWYgKHN1YnN5c19nZXQocykpIHsKQEAgLTU3Niw2ICs1NzYsNyBAQAogCQlzdWJzeXNfcHV0KHMpOwogCX0KIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIEVYUE9SVF9TWU1CT0woa29iamVjdF9pbml0KTsKIEVYUE9SVF9TWU1CT0woa29iamVjdF9yZWdpc3Rlcik7CkBAIC01ODcsMTAgKzU4OCw3IEBACiAKIEVYUE9SVF9TWU1CT0woa3NldF9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGtzZXRfdW5yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGtzZXRfZmluZF9vYmopOwogCi1FWFBPUlRfU1lNQk9MKHN1YnN5c3RlbV9pbml0KTsKIEVYUE9SVF9TWU1CT0woc3Vic3lzdGVtX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0woc3Vic3lzdGVtX3VucmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChzdWJzeXNfY3JlYXRlX2ZpbGUpOwotRVhQT1JUX1NZTUJPTChzdWJzeXNfcmVtb3ZlX2ZpbGUpOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCA5ODIyMjZkLi43ZjIwZTdiIDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtMjUsMTEgKzI1LDEzIEBACiAjZGVmaW5lIEJVRkZFUl9TSVpFCTIwNDgJLyogYnVmZmVyIGZvciB0aGUgdmFyaWFibGVzICovCiAjZGVmaW5lIE5VTV9FTlZQCTMyCS8qIG51bWJlciBvZiBlbnYgcG9pbnRlcnMgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpICYmIGRlZmluZWQoQ09ORklHX05FVCkKKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHKQogdTY0IHVldmVudF9zZXFudW07CiBjaGFyIHVldmVudF9oZWxwZXJbVUVWRU5UX0hFTFBFUl9QQVRIX0xFTl0gPSAiL3NiaW4vaG90cGx1ZyI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNlcXVlbmNlX2xvY2spOworI2lmIGRlZmluZWQoQ09ORklHX05FVCkKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdWV2ZW50X3NvY2s7CisjZW5kaWYKIAogc3RhdGljIGNoYXIgKmFjdGlvbl90b19zdHJpbmcoZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24pCiB7CkBAIC0xNTUsNiArMTU3LDcgQEAKIAlzcGluX3VubG9jaygmc2VxdWVuY2VfbG9jayk7CiAJc3ByaW50ZihzZXFfYnVmZiwgIlNFUU5VTT0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZXEpOwogCisjaWYgZGVmaW5lZChDT05GSUdfTkVUKQogCS8qIHNlbmQgbmV0bGluayBtZXNzYWdlICovCiAJaWYgKHVldmVudF9zb2NrKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xNzksNiArMTgyLDcgQEAKIAkJCW5ldGxpbmtfYnJvYWRjYXN0KHVldmVudF9zb2NrLCBza2IsIDAsIDEsIEdGUF9LRVJORUwpOwogCQl9CiAJfQorI2VuZGlmCiAKIAkvKiBjYWxsIHVldmVudF9oZWxwZXIsIHVzdWFsbHkgb25seSBlbmFibGVkIGR1cmluZyBlYXJseSBib290ICovCiAJaWYgKHVldmVudF9oZWxwZXJbMF0pIHsKQEAgLTI0OSw2ICsyNTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3VldmVudF92YXIpOwogCisjaWYgZGVmaW5lZChDT05GSUdfTkVUKQogc3RhdGljIGludCBfX2luaXQga29iamVjdF91ZXZlbnRfaW5pdCh2b2lkKQogewogCXVldmVudF9zb2NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfS09CSkVDVF9VRVZFTlQsIDEsIE5VTEwsCkBAIC0yNjQsNSArMjY5LDYgQEAKIH0KIAogcG9zdGNvcmVfaW5pdGNhbGwoa29iamVjdF91ZXZlbnRfaW5pdCk7CisjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHICovCmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggYjNjMjhhMy4uMDY0ZjYzMSAxMDA2NDQKLS0tIGEvbGliL3N0cmluZy5jCisrKyBiL2xpYi9zdHJpbmcuYwpAQCAtMzYyLDYgKzM2Miw3IEBACiBFWFBPUlRfU1lNQk9MKHN0cnNwbik7CiAjZW5kaWYKIAorI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJDU1BOCiAvKioKICAqIHN0cmNzcG4gLSBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzdWJzdHJpbmcgb2YgQHMgd2hpY2ggZG9lcwogICogCW5vdCBjb250YWluIGxldHRlcnMgaW4gQHJlamVjdApAQCAtMzg0LDYgKzM4NSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogRVhQT1JUX1NZTUJPTChzdHJjc3BuKTsKKyNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlBCUksKIC8qKgpAQCAtNDAzLDYgKzQwNSw3IEBACiAJfQogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKICNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNFUApAQCAtNDY3LDcgKzQ3MCw3IEBACiB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciAqdG1wID0gZGVzdDsKLQljaGFyICpzID0gc3JjOworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CiAKIAl3aGlsZSAoY291bnQtLSkKIAkJKnRtcCsrID0gKnMrKzsKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCBkM2UzYmQyLi5kMjEzZmVkIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAlyZXR1cm4oZnJlZV9hbGxfYm9vdG1lbV9jb3JlKE5PREVfREFUQSgwKSkpOwogfQogCi12b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3ZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX25vcGFuaWModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCiB7CiAJYm9vdG1lbV9kYXRhX3QgKmJkYXRhOwogCXZvaWQgKnB0cjsKQEAgLTQwOSw3ICs0MDksMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkYXRhLCAmYmRhdGFfbGlzdCwgbGlzdCkKIAkJaWYgKChwdHIgPSBfX2FsbG9jX2Jvb3RtZW1fY29yZShiZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIDApKSkKIAkJCXJldHVybihwdHIpOworCXJldHVybiBOVUxMOworfQogCit2b2lkICogX19pbml0IF9fYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZ29hbCkKK3sKKwl2b2lkICptZW0gPSBfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLGFsaWduLGdvYWwpOworCWlmIChtZW0pCisJCXJldHVybiBtZW07CiAJLyoKIAkgKiBXaG9vcHMsIHdlIGNhbm5vdCBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuCiAJICovCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggM2VmMjA3My4uZmQ1NzQ0MiAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtNjk3LDYgKzY5NywzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogZmluZF9nZXRfcGFnZXNfY29udGlnIC0gZ2FuZyBjb250aWd1b3VzIHBhZ2VjYWNoZSBsb29rdXAKKyAqIEBtYXBwaW5nOglUaGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2gKKyAqIEBpbmRleDoJVGhlIHN0YXJ0aW5nIHBhZ2UgaW5kZXgKKyAqIEBucl9wYWdlczoJVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCisgKiBAcGFnZXM6CVdoZXJlIHRoZSByZXN1bHRpbmcgcGFnZXMgYXJlIHBsYWNlZAorICoKKyAqIGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZygpIHdvcmtzIGV4YWN0bHkgbGlrZSBmaW5kX2dldF9wYWdlcygpLCBleGNlcHQKKyAqIHRoYXQgdGhlIHJldHVybmVkIG51bWJlciBvZiBwYWdlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBjb250aWd1b3VzLgorICoKKyAqIGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZygpIHJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCB3ZXJlIGZvdW5kLgorICovCit1bnNpZ25lZCBmaW5kX2dldF9wYWdlc19jb250aWcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsCisJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlyZWFkX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCXJldCA9IHJhZGl4X3RyZWVfZ2FuZ19sb29rdXAoJm1hcHBpbmctPnBhZ2VfdHJlZSwKKwkJCQkodm9pZCAqKilwYWdlcywgaW5kZXgsIG5yX3BhZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKKwkJaWYgKHBhZ2VzW2ldLT5tYXBwaW5nID09IE5VTEwgfHwgcGFnZXNbaV0tPmluZGV4ICE9IGluZGV4KQorCQkJYnJlYWs7CisKKwkJcGFnZV9jYWNoZV9nZXQocGFnZXNbaV0pOworCQlpbmRleCsrOworCX0KKwlyZWFkX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJcmV0dXJuIGk7Cit9CisKIC8qCiAgKiBMaWtlIGZpbmRfZ2V0X3BhZ2VzLCBleGNlcHQgd2Ugb25seSByZXR1cm4gcGFnZXMgd2hpY2ggYXJlIHRhZ2dlZCB3aXRoCiAgKiBgdGFnJy4gICBXZSB1cGRhdGUgKmluZGV4IHRvIGluZGV4IHRoZSBuZXh0IHBhZ2UgZm9yIHRoZSB0cmF2ZXJzYWwuCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggNTU4ODVmNi4uOWIyNzRmZGYgMTAwNjQ0Ci0tLSBhL21tL2hpZ2htZW0uYworKysgYi9tbS9oaWdobWVtLmMKQEAgLTc0LDggKzc0LDcgQEAKIAkJcGttYXBfY291bnRbaV0gPSAwOwogCiAJCS8qIHNhbml0eSBjaGVjayAqLwotCQlpZiAocHRlX25vbmUocGttYXBfcGFnZV90YWJsZVtpXSkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHB0ZV9ub25lKHBrbWFwX3BhZ2VfdGFibGVbaV0pKTsKIAogCQkvKgogCQkgKiBEb24ndCBuZWVkIGFuIGF0b21pYyBmZXRjaC1hbmQtY2xlYXIgb3AgaGVyZTsKQEAgLTE1OCw4ICsxNTcsNyBAQAogCWlmICghdmFkZHIpCiAJCXZhZGRyID0gbWFwX25ld192aXJ0dWFsKHBhZ2UpOwogCXBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0rKzsKLQlpZiAocGttYXBfY291bnRbUEtNQVBfTlIodmFkZHIpXSA8IDIpCi0JCUJVRygpOworCUJVR19PTihwa21hcF9jb3VudFtQS01BUF9OUih2YWRkcildIDwgMik7CiAJc3Bpbl91bmxvY2soJmttYXBfbG9jayk7CiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CiB9CkBAIC0xNzQsOCArMTcyLDcgQEAKIAogCXNwaW5fbG9jaygma21hcF9sb2NrKTsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKLQlpZiAoIXZhZGRyKQotCQlCVUcoKTsKKwlCVUdfT04oIXZhZGRyKTsKIAluciA9IFBLTUFQX05SKHZhZGRyKTsKIAogCS8qCkBAIC0yMjAsOCArMjE3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlwYWdlX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9wYWdlX3Bvb2woUE9PTF9TSVpFLCAwKTsKLQlpZiAoIXBhZ2VfcG9vbCkKLQkJQlVHKCk7CisJQlVHX09OKCFwYWdlX3Bvb2wpOwogCXByaW50aygiaGlnaG1lbSBib3VuY2UgcG9vbCBzaXplOiAlZCBwYWdlc1xuIiwgUE9PTF9TSVpFKTsKIAogCXJldHVybiAwOwpAQCAtMjY0LDggKzI2MCw3IEBACiAKIAlpc2FfcGFnZV9wb29sID0gbWVtcG9vbF9jcmVhdGUoSVNBX1BPT0xfU0laRSwgbWVtcG9vbF9hbGxvY19wYWdlc19pc2EsCiAJCQkJICAgICAgIG1lbXBvb2xfZnJlZV9wYWdlcywgKHZvaWQgKikgMCk7Ci0JaWYgKCFpc2FfcGFnZV9wb29sKQotCQlCVUcoKTsKKwlCVUdfT04oIWlzYV9wYWdlX3Bvb2wpOwogCiAJcHJpbnRrKCJpc2EgYm91bmNlIHBvb2wgc2l6ZTogJWQgcGFnZXNcbiIsIElTQV9QT09MX1NJWkUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IGFmM2Q1NzMuLjRlMTk2MTUgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYworKysgYi9tbS9tYWR2aXNlLmMKQEAgLTE2OCw2ICsxNjgsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX1NIQVJFRHxWTV9XUklURSkpICE9IChWTV9TSEFSRUR8Vk1fV1JJVEUpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwogCW1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKIAogCW9mZnNldCA9IChsb2ZmX3QpKHN0YXJ0IC0gdm1hLT52bV9zdGFydCkKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDFmZTc2ZDkuLjcwZGY1YzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtNjksMTIgKzY5LDE2IEBACiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpICs9IFBBR0VTX1BFUl9TRUNUSU9OKSB7CiAJCWVyciA9IF9fYWRkX3NlY3Rpb24oem9uZSwgcGh5c19zdGFydF9wZm4gKyBpKTsKIAotCQlpZiAoZXJyKQorCQkvKiBXZSB3YW50IHRvIGtlZXAgYWRkaW5nIHRoZSByZXN0IG9mIHRoZQorCQkgKiBzZWN0aW9ucyBpZiB0aGUgZmlyc3Qgb25lcyBhbHJlYWR5IGV4aXN0CisJCSAqLworCQlpZiAoZXJyICYmIChlcnIgIT0gLUVFWElTVCkpCiAJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19hZGRfcGFnZXMpOwogCiBzdGF0aWMgdm9pZCBncm93X3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKQEAgLTg3LDggKzkxLDggQEAKIAlpZiAoc3RhcnRfcGZuIDwgem9uZS0+em9uZV9zdGFydF9wZm4pCiAJCXpvbmUtPnpvbmVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCi0JaWYgKGVuZF9wZm4gPiBvbGRfem9uZV9lbmRfcGZuKQotCQl6b25lLT5zcGFubmVkX3BhZ2VzID0gZW5kX3BmbiAtIHpvbmUtPnpvbmVfc3RhcnRfcGZuOworCXpvbmUtPnNwYW5uZWRfcGFnZXMgPSBtYXgob2xkX3pvbmVfZW5kX3BmbiwgZW5kX3BmbikgLQorCQkJCXpvbmUtPnpvbmVfc3RhcnRfcGZuOwogCiAJem9uZV9zcGFuX3dyaXRldW5sb2NrKHpvbmUpOwogfQpAQCAtMTAyLDggKzEwNiw4IEBACiAJaWYgKHN0YXJ0X3BmbiA8IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbikKIAkJcGdkYXQtPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCi0JaWYgKGVuZF9wZm4gPiBvbGRfcGdkYXRfZW5kX3BmbikKLQkJcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IGVuZF9wZm4gLSBwZ2RhdC0+bm9kZV9zdGFydF9wZm47CisJcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IG1heChvbGRfcGdkYXRfZW5kX3BmbiwgZW5kX3BmbikgLQorCQkJCQlwZ2RhdC0+bm9kZV9zdGFydF9wZm47CiB9CiAKIGludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IGRlYzgyNDkuLjg3NzhmNTggMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xNzYxLDcgKzE3NjEsNiBAQAogCQltZC0+bWFwY291bnRfbWF4ID0gY291bnQ7CiAKIAltZC0+bm9kZVtwYWdlX3RvX25pZChwYWdlKV0rKzsKLQljb25kX3Jlc2NoZWQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAwOWY2ZTRhLi4xYzI1MDQwIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC0xNiw4ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBmb3IgdHJ5X3RvX3JlbGVhc2VfcGFnZSgpLAotCQkJCQlidWZmZXJfaGVhZHNfb3Zlcl9saW1pdCAqLworI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KQEAgLTI4LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLSNpbmNsdWRlICJpbnRlcm5hbC5oIgotCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgdG8gdGFrZSBvZmYgdGhlIExSVSBmb3IgbWlncmF0aW9uICovCiAjZGVmaW5lIE1JR1JBVEVfQ0hVTktfU0laRSAyNTYKIApAQCAtMTc2LDcgKzE3Myw2IEBACiByZXRyeToKIAlyZXR1cm4gLUVBR0FJTjsKIH0KLUVYUE9SVF9TWU1CT0woc3dhcF9wYWdlKTsKIAogLyoKICAqIFJlbW92ZSByZWZlcmVuY2VzIGZvciBhIHBhZ2UgYW5kIGVzdGFibGlzaCB0aGUgbmV3IHBhZ2Ugd2l0aCB0aGUgY29ycmVjdApAQCAtMjM0LDcgKzIzMCw3IEBACiAJaWYgKCFwYWdlX21hcHBpbmcocGFnZSkgfHwgcGFnZV9jb3VudChwYWdlKSAhPSBucl9yZWZzIHx8CiAJCQkqcmFkaXhfcG9pbnRlciAhPSBwYWdlKSB7CiAJCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAkvKgpAQCAtNDQzLDYgKzQzOSwxNyBAQAogCQkJZ290byB1bmxvY2tfYm90aDsKICAgICAgICAgICAgICAgICB9CiAKKwkJLyogTWFrZSBzdXJlIHRoZSBkaXJ0eSBiaXQgaXMgdXAgdG8gZGF0ZSAqLworCQlpZiAodHJ5X3RvX3VubWFwKHBhZ2UsIDEpID09IFNXQVBfRkFJTCkgeworCQkJcmMgPSAtRVBFUk07CisJCQlnb3RvIHVubG9ja19ib3RoOworCQl9CisKKwkJaWYgKHBhZ2VfbWFwY291bnQocGFnZSkpIHsKKwkJCXJjID0gLUVBR0FJTjsKKwkJCWdvdG8gdW5sb2NrX2JvdGg7CisJCX0KKwogCQkvKgogCQkgKiBEZWZhdWx0IGhhbmRsaW5nIGlmIGEgZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm92aWRlCiAJCSAqIGEgbWlncmF0aW9uIGZ1bmN0aW9uLiBXZSBjYW4gb25seSBtaWdyYXRlIGNsZWFuCmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggNGY1YjU3MC4uZTZlZTEyMyAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTIxLDE0ICsxMjEsMjYgQEAKIAkJICogb25seSBjYWxsIGlmIHdlJ3JlIGFib3V0IHRvIGZhaWwuCiAJCSAqLwogCQluID0gbnJfZnJlZV9wYWdlcygpOworCisJCS8qCisJCSAqIExlYXZlIHJlc2VydmVkIHBhZ2VzLiBUaGUgcGFnZXMgYXJlIG5vdCBmb3IgYW5vbnltb3VzIHBhZ2VzLgorCQkgKi8KKwkJaWYgKG4gPD0gdG90YWxyZXNlcnZlX3BhZ2VzKQorCQkJZ290byBlcnJvcjsKKwkJZWxzZQorCQkJbiAtPSB0b3RhbHJlc2VydmVfcGFnZXM7CisKKwkJLyoKKwkJICogTGVhdmUgdGhlIGxhc3QgMyUgZm9yIHJvb3QKKwkJICovCiAJCWlmICghY2FwX3N5c19hZG1pbikKIAkJCW4gLT0gbiAvIDMyOwogCQlmcmVlICs9IG47CiAKIAkJaWYgKGZyZWUgPiBwYWdlcykKIAkJCXJldHVybiAwOwotCQl2bV91bmFjY3RfbWVtb3J5KHBhZ2VzKTsKLQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZ290byBlcnJvcjsKIAl9CiAKIAlhbGxvd2VkID0gKHRvdGFscmFtX3BhZ2VzIC0gaHVnZXRsYl90b3RhbF9wYWdlcygpKQpAQCAtMTUwLDcgKzE2Miw3IEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZ2bV9jb21taXR0ZWRfc3BhY2UpIDwgKGxvbmcpYWxsb3dlZCkKIAkJcmV0dXJuIDA7Ci0KK2Vycm9yOgogCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwogCiAJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjAsNiArMjMyLDE3IEBACiAKIAlpZiAoYnJrIDwgbW0tPmVuZF9jb2RlKQogCQlnb3RvIG91dDsKKworCS8qCisJICogQ2hlY2sgYWdhaW5zdCBybGltaXQgaGVyZS4gSWYgdGhpcyBjaGVjayBpcyBkb25lIGxhdGVyIGFmdGVyIHRoZSB0ZXN0CisJICogb2Ygb2xkYnJrIHdpdGggbmV3YnJrIHRoZW4gaXQgY2FuIGVzY2FwZSB0aGUgdGVzdCBhbmQgbGV0IHRoZSBkYXRhCisJICogc2VnbWVudCBncm93IGJleW9uZCBpdHMgc2V0IGxpbWl0IHRoZSBpbiBjYXNlIHdoZXJlIHRoZSBsaW1pdCBpcworCSAqIG5vdCBwYWdlIGFsaWduZWQgLVJhbSBHdXB0YQorCSAqLworCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCWlmIChybGltIDwgUkxJTV9JTkZJTklUWSAmJiBicmsgLSBtbS0+c3RhcnRfZGF0YSA+IHJsaW0pCisJCWdvdG8gb3V0OworCiAJbmV3YnJrID0gUEFHRV9BTElHTihicmspOwogCW9sZGJyayA9IFBBR0VfQUxJR04obW0tPmJyayk7CiAJaWYgKG9sZGJyayA9PSBuZXdicmspCkBAIC0yMzIsMTEgKzI1NSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIENoZWNrIGFnYWluc3QgcmxpbWl0Li4gKi8KLQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9EQVRBXS5ybGltX2N1cjsKLQlpZiAocmxpbSA8IFJMSU1fSU5GSU5JVFkgJiYgYnJrIC0gbW0tPnN0YXJ0X2RhdGEgPiBybGltKQotCQlnb3RvIG91dDsKLQogCS8qIENoZWNrIGFnYWluc3QgZXhpc3RpbmcgbW1hcCBtYXBwaW5ncy4gKi8KIAlpZiAoZmluZF92bWFfaW50ZXJzZWN0aW9uKG1tLCBvbGRicmssIG5ld2JyaytQQUdFX1NJWkUpKQogCQlnb3RvIG91dDsKQEAgLTI5NCw4ICszMTIsNyBAQAogCWkgPSBicm93c2VfcmIoJm1tLT5tbV9yYik7CiAJaWYgKGkgIT0gbW0tPm1hcF9jb3VudCkKIAkJcHJpbnRrKCJtYXBfY291bnQgJWQgcmIgJWRcbiIsIG1tLT5tYXBfY291bnQsIGkpLCBidWcgPSAxOwotCWlmIChidWcpCi0JCUJVRygpOworCUJVR19PTihidWcpOwogfQogI2Vsc2UKICNkZWZpbmUgdmFsaWRhdGVfbW0obW0pIGRvIHsgfSB3aGlsZSAoMCkKQEAgLTQzMiw4ICs0NDksNyBAQAogCXN0cnVjdCByYl9ub2RlICoqIHJiX2xpbmssICogcmJfcGFyZW50OwogCiAJX192bWEgPSBmaW5kX3ZtYV9wcmVwYXJlKG1tLCB2bWEtPnZtX3N0YXJ0LCZwcmV2LCAmcmJfbGluaywgJnJiX3BhcmVudCk7Ci0JaWYgKF9fdm1hICYmIF9fdm1hLT52bV9zdGFydCA8IHZtYS0+dm1fZW5kKQotCQlCVUcoKTsKKwlCVUdfT04oX192bWEgJiYgX192bWEtPnZtX3N0YXJ0IDwgdm1hLT52bV9lbmQpOwogCV9fdm1hX2xpbmsobW0sIHZtYSwgcHJldiwgcmJfbGluaywgcmJfcGFyZW50KTsKIAltbS0+bWFwX2NvdW50Kys7CiB9CkBAIC04MTMsOCArODI5LDcgQEAKIAkgKiAoZS5nLiBzdGFzaCBpbmZvIGluIG5leHQncyBhbm9uX3ZtYV9ub2RlIHdoZW4gYXNzaWduaW5nCiAJICogYW4gYW5vbl92bWEsIG9yIHdoZW4gdHJ5aW5nIHZtYV9tZXJnZSkuICBBbm90aGVyIHRpbWUuCiAJICovCi0JaWYgKGZpbmRfdm1hX3ByZXYodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCwgJm5lYXIpICE9IHZtYSkKLQkJQlVHKCk7CisJQlVHX09OKGZpbmRfdm1hX3ByZXYodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCwgJm5lYXIpICE9IHZtYSk7CiAJaWYgKCFuZWFyKQogCQlnb3RvIG5vbmU7CiAKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGRiNDVlZmEuLjAyOWZhZGEgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTE0NywxNCArMTE0NywyNiBAQAogCQkgKiBvbmx5IGNhbGwgaWYgd2UncmUgYWJvdXQgdG8gZmFpbC4KIAkJICovCiAJCW4gPSBucl9mcmVlX3BhZ2VzKCk7CisKKwkJLyoKKwkJICogTGVhdmUgcmVzZXJ2ZWQgcGFnZXMuIFRoZSBwYWdlcyBhcmUgbm90IGZvciBhbm9ueW1vdXMgcGFnZXMuCisJCSAqLworCQlpZiAobiA8PSB0b3RhbHJlc2VydmVfcGFnZXMpCisJCQlnb3RvIGVycm9yOworCQllbHNlCisJCQluIC09IHRvdGFscmVzZXJ2ZV9wYWdlczsKKworCQkvKgorCQkgKiBMZWF2ZSB0aGUgbGFzdCAzJSBmb3Igcm9vdAorCQkgKi8KIAkJaWYgKCFjYXBfc3lzX2FkbWluKQogCQkJbiAtPSBuIC8gMzI7CiAJCWZyZWUgKz0gbjsKIAogCQlpZiAoZnJlZSA+IHBhZ2VzKQogCQkJcmV0dXJuIDA7Ci0JCXZtX3VuYWNjdF9tZW1vcnkocGFnZXMpOwotCQlyZXR1cm4gLUVOT01FTTsKKworCQlnb3RvIGVycm9yOwogCX0KIAogCWFsbG93ZWQgPSB0b3RhbHJhbV9wYWdlcyAqIHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvIC8gMTAwOwpAQCAtMTE3NSw3ICsxMTg3LDcgQEAKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnZtX2NvbW1pdHRlZF9zcGFjZSkgPCAobG9uZylhbGxvd2VkKQogCQlyZXR1cm4gMDsKLQorZXJyb3I6CiAJdm1fdW5hY2N0X21lbW9yeShwYWdlcyk7CiAKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDc4NzQ3YWYuLjA0MmU2NDMgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtNDYsMTUgKzQ2LDI1IEBACiB1bnNpZ25lZCBsb25nIGJhZG5lc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHVwdGltZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvaW50cywgY3B1X3RpbWUsIHJ1bl90aW1lLCBzOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRzazsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOwogCi0JaWYgKCFwLT5tbSkKKwl0YXNrX2xvY2socCk7CisJbW0gPSBwLT5tbTsKKwlpZiAoIW1tKSB7CisJCXRhc2tfdW5sb2NrKHApOwogCQlyZXR1cm4gMDsKKwl9CiAKIAkvKgogCSAqIFRoZSBtZW1vcnkgc2l6ZSBvZiB0aGUgcHJvY2VzcyBpcyB0aGUgYmFzaXMgZm9yIHRoZSBiYWRuZXNzLgogCSAqLwotCXBvaW50cyA9IHAtPm1tLT50b3RhbF92bTsKKwlwb2ludHMgPSBtbS0+dG90YWxfdm07CisKKwkvKgorCSAqIEFmdGVyIHRoaXMgdW5sb2NrIHdlIGNhbiBubyBsb25nZXIgZGVyZWZlcmVuY2UgbG9jYWwgdmFyaWFibGUgYG1tJworCSAqLworCXRhc2tfdW5sb2NrKHApOwogCiAJLyoKIAkgKiBQcm9jZXNzZXMgd2hpY2ggZm9yayBhIGxvdCBvZiBjaGlsZCBwcm9jZXNzZXMgYXJlIGxpa2VseQpAQCAtNjQsMTEgKzc0LDExIEBACiAJICogY2hpbGQgaXMgZWF0aW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIG1lbW9yeSwgYWRkaW5nIG9ubHkgaGFsZgogCSAqIHRvIHRoZSBwYXJlbnRzIHdpbGwgbWFrZSB0aGUgY2hpbGQgb3VyIGtpbGwgY2FuZGlkYXRlIG9mIGNob2ljZS4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoKHRzaywgJnAtPmNoaWxkcmVuKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hsZDsKLQkJY2hsZCA9IGxpc3RfZW50cnkodHNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNpYmxpbmcpOwotCQlpZiAoY2hsZC0+bW0gIT0gcC0+bW0gJiYgY2hsZC0+bW0pCi0JCQlwb2ludHMgKz0gY2hsZC0+bW0tPnRvdGFsX3ZtLzIgKyAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZwLT5jaGlsZHJlbiwgc2libGluZykgeworCQl0YXNrX2xvY2soY2hpbGQpOworCQlpZiAoY2hpbGQtPm1tICE9IG1tICYmIGNoaWxkLT5tbSkKKwkJCXBvaW50cyArPSBjaGlsZC0+bW0tPnRvdGFsX3ZtLzIgKyAxOworCQl0YXNrX3VubG9jayhjaGlsZCk7CiAJfQogCiAJLyoKQEAgLTI0NCwxNyArMjU0LDI0IEBACiAJZm9yY2Vfc2lnKFNJR0tJTEwsIHApOwogfQogCi1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqb29tX2tpbGxfdGFzayh0YXNrX3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgaW50IG9vbV9raWxsX3Rhc2sodGFza190ICpwLCBjb25zdCBjaGFyICptZXNzYWdlKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ2V0X3Rhc2tfbW0ocCk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdGFza190ICogZywgKiBxOwogCi0JaWYgKCFtbSkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKG1tID09ICZpbml0X21tKSB7Ci0JCW1tcHV0KG1tKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCW1tID0gcC0+bW07CisKKwkvKiBXQVJOSU5HOiBtbSBtYXkgbm90IGJlIGRlcmVmZXJlbmNlZCBzaW5jZSB3ZSBkaWQgbm90IG9idGFpbiBpdHMKKwkgKiB2YWx1ZSBmcm9tIGdldF90YXNrX21tKHApLiAgVGhpcyBpcyBPSyBzaW5jZSBhbGwgd2UgbmVlZCB0byBkbyBpcworCSAqIGNvbXBhcmUgbW0gdG8gcS0+bW0gYmVsb3cuCisJICoKKwkgKiBGdXJ0aGVybW9yZSwgZXZlbiBpZiBtbSBjb250YWlucyBhIG5vbi1OVUxMIHZhbHVlLCBwLT5tbSBtYXkKKwkgKiBjaGFuZ2UgdG8gTlVMTCBhdCBhbnkgdGltZSBzaW5jZSB3ZSBkbyBub3QgaG9sZCB0YXNrX2xvY2socCkuCisJICogSG93ZXZlciwgdGhpcyBpcyBvZiBubyBjb25jZXJuIHRvIHVzLgorCSAqLworCisJaWYgKG1tID09IE5VTEwgfHwgbW0gPT0gJmluaXRfbW0pCisJCXJldHVybiAxOwogCiAJX19vb21fa2lsbF90YXNrKHAsIG1lc3NhZ2UpOwogCS8qCkBAIC0yNjYsMTMgKzI4MywxMiBAQAogCQkJX19vb21fa2lsbF90YXNrKHEsIG1lc3NhZ2UpOwogCXdoaWxlX2VhY2hfdGhyZWFkKGcsIHEpOwogCi0JcmV0dXJuIG1tOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkJdW5zaWduZWQgbG9uZyBwb2ludHMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgaW50IG9vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHBvaW50cywKKwkJY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRzazsKIApAQCAtMjgzLDkgKzI5OSw4IEBACiAJCWMgPSBsaXN0X2VudHJ5KHRzaywgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKIAkJaWYgKGMtPm1tID09IHAtPm1tKQogCQkJY29udGludWU7Ci0JCW1tID0gb29tX2tpbGxfdGFzayhjLCBtZXNzYWdlKTsKLQkJaWYgKG1tKQotCQkJcmV0dXJuIG1tOworCQlpZiAoIW9vbV9raWxsX3Rhc2soYywgbWVzc2FnZSkpCisJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIG9vbV9raWxsX3Rhc2socCwgbWVzc2FnZSk7CiB9CkBAIC0zMDAsNyArMzE1LDYgQEAKICAqLwogdm9pZCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwogCXRhc2tfdCAqcDsKIAl1bnNpZ25lZCBsb25nIHBvaW50cyA9IDA7CiAKQEAgLTMyMCwxMiArMzM0LDEyIEBACiAJICovCiAJc3dpdGNoIChjb25zdHJhaW5lZF9hbGxvYyh6b25lbGlzdCwgZ2ZwX21hc2spKSB7CiAJY2FzZSBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1k6Ci0JCW1tID0gb29tX2tpbGxfcHJvY2VzcyhjdXJyZW50LCBwb2ludHMsCisJCW9vbV9raWxsX3Byb2Nlc3MoY3VycmVudCwgcG9pbnRzLAogCQkJCSJObyBhdmFpbGFibGUgbWVtb3J5IChNUE9MX0JJTkQpIik7CiAJCWJyZWFrOwogCiAJY2FzZSBDT05TVFJBSU5UX0NQVVNFVDoKLQkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIHBvaW50cywKKwkJb29tX2tpbGxfcHJvY2VzcyhjdXJyZW50LCBwb2ludHMsCiAJCQkJIk5vIGF2YWlsYWJsZSBtZW1vcnkgaW4gY3B1c2V0Iik7CiAJCWJyZWFrOwogCkBAIC0zNDcsOCArMzYxLDcgQEAKIAkJCXBhbmljKCJPdXQgb2YgbWVtb3J5IGFuZCBubyBraWxsYWJsZSBwcm9jZXNzZXMuLi5cbiIpOwogCQl9CiAKLQkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKHAsIHBvaW50cywgIk91dCBvZiBtZW1vcnkiKTsKLQkJaWYgKCFtbSkKKwkJaWYgKG9vbV9raWxsX3Byb2Nlc3MocCwgcG9pbnRzLCAiT3V0IG9mIG1lbW9yeSIpKQogCQkJZ290byByZXRyeTsKIAogCQlicmVhazsKQEAgLTM1Nyw4ICszNzAsNiBAQAogb3V0OgogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAljcHVzZXRfdW5sb2NrKCk7Ci0JaWYgKG1tKQotCQltbXB1dChtbSk7CiAKIAkvKgogCSAqIEdpdmUgInAiIGEgZ29vZCBjaGFuY2Ugb2Yga2lsbGluZyBpdHNlbGYgYmVmb3JlIHdlCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA4OTNkNzY3Li43NWQ3ZjQ4IDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTcyLDEzICs3MiwxMiBAQAogaW50IHZtX2RpcnR5X3JhdGlvID0gNDA7CiAKIC8qCi0gKiBUaGUgaW50ZXJ2YWwgYmV0d2VlbiBga3VwZGF0ZSctc3R5bGUgd3JpdGViYWNrcywgaW4gY2VudGlzZWNvbmRzCi0gKiAoaHVuZHJlZHRocyBvZiBhIHNlY29uZCkKKyAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzLCBpbiBqaWZmaWVzCiAgKi8KIGludCBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgPSA1ICogSFo7CiAKIC8qCi0gKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgY2VudGlzZWNvbmRzIGZvciB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gcmVtYWluIGRpcnR5CisgKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgamlmZmllcyBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQogICovCiBpbnQgZGlydHlfZXhwaXJlX2ludGVydmFsID0gMzAgKiBIWjsKIApAQCAtMjU4LDcgKzI1Nyw3IEBACiAvKioKICAqIGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIgLSBiYWxhbmNlIGRpcnR5IG1lbW9yeSBzdGF0ZQogICogQG1hcHBpbmc6IGFkZHJlc3Nfc3BhY2Ugd2hpY2ggd2FzIGRpcnRpZWQKLSAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIHRoZSBjYWxsZXIgaGFzIGp1c3QgZGlydGllZAorICogQG5yX3BhZ2VzX2RpcnRpZWQ6IG51bWJlciBvZiBwYWdlcyB3aGljaCB0aGUgY2FsbGVyIGhhcyBqdXN0IGRpcnRpZWQKICAqCiAgKiBQcm9jZXNzZXMgd2hpY2ggYXJlIGRpcnR5aW5nIG1lbW9yeSBzaG91bGQgY2FsbCBpbiBoZXJlIG9uY2UgZm9yIGVhY2ggcGFnZQogICogd2hpY2ggd2FzIG5ld2x5IGRpcnRpZWQuICBUaGUgZnVuY3Rpb24gd2lsbCBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIHN5c3RlbSdzCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZGM1MjNhMS4uMjUzYTQ1MCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKQEAgLTUxLDYgKzUyLDcgQEAKIEVYUE9SVF9TWU1CT0wobm9kZV9wb3NzaWJsZV9tYXApOwogdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlcyBfX3JlYWRfbW9zdGx5OwogdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2hfcGFnZXMgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzIF9fcmVhZF9tb3N0bHk7CiBsb25nIG5yX3N3YXBfcGFnZXM7CiBpbnQgcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwogCkBAIC0xNTEsNyArMTUzLDggQEAKIAkJCTEgPDwgUEdfcmVjbGFpbSB8CiAJCQkxIDw8IFBHX3NsYWIgICAgfAogCQkJMSA8PCBQR19zd2FwY2FjaGUgfAotCQkJMSA8PCBQR193cml0ZWJhY2sgKTsKKwkJCTEgPDwgUEdfd3JpdGViYWNrIHwKKwkJCTEgPDwgUEdfYnVkZHkgKTsKIAlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKIAlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwpAQCAtMjMwLDE4ICsyMzMsMjAgQEAKICAqIHpvbmUtPmxvY2sgaXMgYWxyZWFkeSBhY3F1aXJlZCB3aGVuIHdlIHVzZSB0aGVzZS4KICAqIFNvLCB3ZSBkb24ndCBuZWVkIGF0b21pYyBwYWdlLT5mbGFncyBvcGVyYXRpb25zIGhlcmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKSB7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKIAlyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeworc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCit7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7Ci0JX19TZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwlfX1NldFBhZ2VCdWRkeShwYWdlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJtdl9wYWdlX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKQogewotCV9fQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwlfX0NsZWFyUGFnZUJ1ZGR5KHBhZ2UpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CiB9CiAKQEAgLTI4MCwxMSArMjg1LDEzIEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEgcGFnZSBpcyBmcmVlICYmIGlzIHRoZSBidWRkeQogICogd2UgY2FuIGRvIGNvYWxlc2NlIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGlmCiAgKiAoYSkgdGhlIGJ1ZGR5IGlzIG5vdCBpbiBhIGhvbGUgJiYKLSAqIChiKSB0aGUgYnVkZHkgaXMgZnJlZSAmJgotICogKGMpIHRoZSBidWRkeSBpcyBvbiB0aGUgYnVkZHkgc3lzdGVtICYmCi0gKiAoZCkgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlci4KLSAqIGZvciByZWNvcmRpbmcgcGFnZSdzIG9yZGVyLCB3ZSB1c2UgcGFnZV9wcml2YXRlKHBhZ2UpIGFuZCBQR19wcml2YXRlLgorICogKGIpIHRoZSBidWRkeSBpcyBpbiB0aGUgYnVkZHkgc3lzdGVtICYmCisgKiAoYykgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlci4KICAqCisgKiBGb3IgcmVjb3JkaW5nIHdoZXRoZXIgYSBwYWdlIGlzIGluIHRoZSBidWRkeSBzeXN0ZW0sIHdlIHVzZSBQR19idWRkeS4KKyAqIFNldHRpbmcsIGNsZWFyaW5nLCBhbmQgdGVzdGluZyBQR19idWRkeSBpcyBzZXJpYWxpemVkIGJ5IHpvbmUtPmxvY2suCisgKgorICogRm9yIHJlY29yZGluZyBwYWdlJ3Mgb3JkZXIsIHdlIHVzZSBwYWdlX3ByaXZhdGUocGFnZSkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfaXNfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKIHsKQEAgLTI5MywxMSArMzAwLDExIEBACiAJCXJldHVybiAwOwogI2VuZGlmCiAKLSAgICAgICBpZiAoUGFnZVByaXZhdGUocGFnZSkgICAgICAgICAgICYmCi0gICAgICAgICAgIChwYWdlX29yZGVyKHBhZ2UpID09IG9yZGVyKSAmJgotICAgICAgICAgICAgcGFnZV9jb3VudChwYWdlKSA9PSAwKQotICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgcmV0dXJuIDA7CisJaWYgKFBhZ2VCdWRkeShwYWdlKSAmJiBwYWdlX29yZGVyKHBhZ2UpID09IG9yZGVyKSB7CisJCUJVR19PTihwYWdlX2NvdW50KHBhZ2UpICE9IDApOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMTMsNyArMzIwLDcgQEAKICAqIGFzIG5lY2Vzc2FyeSwgcGx1cyBzb21lIGFjY291bnRpbmcgbmVlZGVkIHRvIHBsYXkgbmljZWx5IHdpdGggb3RoZXIKICAqIHBhcnRzIG9mIHRoZSBWTSBzeXN0ZW0uCiAgKiBBdCBlYWNoIGxldmVsLCB3ZSBrZWVwIGEgbGlzdCBvZiBwYWdlcywgd2hpY2ggYXJlIGhlYWRzIG9mIGNvbnRpbnVvdXMKLSAqIGZyZWUgcGFnZXMgb2YgbGVuZ3RoIG9mICgxIDw8IG9yZGVyKSBhbmQgbWFya2VkIHdpdGggUEdfUHJpdmF0ZS5QYWdlJ3MKKyAqIGZyZWUgcGFnZXMgb2YgbGVuZ3RoIG9mICgxIDw8IG9yZGVyKSBhbmQgbWFya2VkIHdpdGggUEdfYnVkZHkuIFBhZ2UncwogICogb3JkZXIgaXMgcmVjb3JkZWQgaW4gcGFnZV9wcml2YXRlKHBhZ2UpIGZpZWxkLgogICogU28gd2hlbiB3ZSBhcmUgYWxsb2NhdGluZyBvciBmcmVlaW5nIG9uZSwgd2UgY2FuIGRlcml2ZSB0aGUgc3RhdGUgb2YgdGhlCiAgKiBvdGhlci4gIFRoYXQgaXMsIGlmIHdlIGFsbG9jYXRlIGEgc21hbGwgYmxvY2ssIGFuZCBib3RoIHdlcmUgICAKQEAgLTM3Niw3ICszODMsOCBAQAogCQkJMSA8PCBQR19zbGFiCXwKIAkJCTEgPDwgUEdfc3dhcGNhY2hlIHwKIAkJCTEgPDwgUEdfd3JpdGViYWNrIHwKLQkJCTEgPDwgUEdfcmVzZXJ2ZWQgKSkpKQorCQkJMSA8PCBQR19yZXNlcnZlZCB8CisJCQkxIDw8IFBHX2J1ZGR5ICkpKSkKIAkJYmFkX3BhZ2UocGFnZSk7CiAJaWYgKFBhZ2VEaXJ0eShwYWdlKSkKIAkJX19DbGVhclBhZ2VEaXJ0eShwYWdlKTsKQEAgLTUyNCw3ICs1MzIsOCBAQAogCQkJMSA8PCBQR19zbGFiICAgIHwKIAkJCTEgPDwgUEdfc3dhcGNhY2hlIHwKIAkJCTEgPDwgUEdfd3JpdGViYWNrIHwKLQkJCTEgPDwgUEdfcmVzZXJ2ZWQgKSkpKQorCQkJMSA8PCBQR19yZXNlcnZlZCB8CisJCQkxIDw8IFBHX2J1ZGR5ICkpKSkKIAkJYmFkX3BhZ2UocGFnZSk7CiAKIAkvKgpAQCAtOTQyLDcgKzk1MSw3IEBACiAJCWdvdG8gZ290X3BnOwogCiAJZG8gewotCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgZ2ZwX21hc2spKQorCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgZ2ZwX21hc2t8X19HRlBfSEFSRFdBTEwpKQogCQkJd2FrZXVwX2tzd2FwZCgqeiwgb3JkZXIpOwogCX0gd2hpbGUgKCooKyt6KSk7CiAKQEAgLTk2MSw3ICs5NzAsOCBAQAogCQlhbGxvY19mbGFncyB8PSBBTExPQ19IQVJERVI7CiAJaWYgKGdmcF9tYXNrICYgX19HRlBfSElHSCkKIAkJYWxsb2NfZmxhZ3MgfD0gQUxMT0NfSElHSDsKLQlhbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7CisJaWYgKHdhaXQpCisJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX0NQVVNFVDsKIAogCS8qCiAJICogR28gdGhyb3VnaCB0aGUgem9uZWxpc3QgYWdhaW4uIExldCBfX0dGUF9ISUdIIGFuZCBhbGxvY2F0aW9ucwpAQCAtMTk1NCw3ICsxOTY0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IHBhZ2VzZXRfY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHBhZ2VzZXRfY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAogCQl2b2lkICpoY3B1KQogewpAQCAtMjExNSwxNCArMjEyNSwyMiBAQAogI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAogCS8qIGlhNjQgZ2V0cyBpdHMgb3duIG5vZGVfbWVtX21hcCwgYmVmb3JlIHRoaXMsIHdpdGhvdXQgYm9vdG1lbSAqLwogCWlmICghcGdkYXQtPm5vZGVfbWVtX21hcCkgewotCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RhcnQsIGVuZDsKIAkJc3RydWN0IHBhZ2UgKm1hcDsKIAotCQlzaXplID0gKHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJCS8qCisJCSAqIFRoZSB6b25lJ3MgZW5kcG9pbnRzIGFyZW4ndCByZXF1aXJlZCB0byBiZSBNQVhfT1JERVIKKwkJICogYWxpZ25lZCBidXQgdGhlIG5vZGVfbWVtX21hcCBlbmRwb2ludHMgbXVzdCBiZSBpbiBvcmRlcgorCQkgKiBmb3IgdGhlIGJ1ZGR5IGFsbG9jYXRvciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCisJCSAqLworCQlzdGFydCA9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiAmIH4oTUFYX09SREVSX05SX1BBR0VTIC0gMSk7CisJCWVuZCA9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7CisJCWVuZCA9IEFMSUdOKGVuZCwgTUFYX09SREVSX05SX1BBR0VTKTsKKwkJc2l6ZSA9ICAoZW5kIC0gc3RhcnQpICogc2l6ZW9mKHN0cnVjdCBwYWdlKTsKIAkJbWFwID0gYWxsb2NfcmVtYXAocGdkYXQtPm5vZGVfaWQsIHNpemUpOwogCQlpZiAoIW1hcCkKIAkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgc2l6ZSk7Ci0JCXBnZGF0LT5ub2RlX21lbV9tYXAgPSBtYXA7CisJCXBnZGF0LT5ub2RlX21lbV9tYXAgPSBtYXAgKyAocGdkYXQtPm5vZGVfc3RhcnRfcGZuIC0gc3RhcnQpOwogCX0KICNpZmRlZiBDT05GSUdfRkxBVE1FTQogCS8qCkBAIC0yNDcyLDYgKzI0OTAsMzggQEAKIH0KIAogLyoKKyAqIGNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMgLSBjYWxsZWQgd2hlbiBzeXNjdGxfbG93ZXJfem9uZV9yZXNlcnZlX3JhdGlvCisgKglvciBtaW5fZnJlZV9rYnl0ZXMgY2hhbmdlcy4KKyAqLworc3RhdGljIHZvaWQgY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcyh2b2lkKQoreworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlX3BhZ2VzID0gMDsKKwlpbnQgaSwgajsKKworCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKKwkJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOworCQkJdW5zaWduZWQgbG9uZyBtYXggPSAwOworCisJCQkvKiBGaW5kIHZhbGlkIGFuZCBtYXhpbXVtIGxvd21lbV9yZXNlcnZlIGluIHRoZSB6b25lICovCisJCQlmb3IgKGogPSBpOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKKwkJCQlpZiAoem9uZS0+bG93bWVtX3Jlc2VydmVbal0gPiBtYXgpCisJCQkJCW1heCA9IHpvbmUtPmxvd21lbV9yZXNlcnZlW2pdOworCQkJfQorCisJCQkvKiB3ZSB0cmVhdCBwYWdlc19oaWdoIGFzIHJlc2VydmVkIHBhZ2VzLiAqLworCQkJbWF4ICs9IHpvbmUtPnBhZ2VzX2hpZ2g7CisKKwkJCWlmIChtYXggPiB6b25lLT5wcmVzZW50X3BhZ2VzKQorCQkJCW1heCA9IHpvbmUtPnByZXNlbnRfcGFnZXM7CisJCQlyZXNlcnZlX3BhZ2VzICs9IG1heDsKKwkJfQorCX0KKwl0b3RhbHJlc2VydmVfcGFnZXMgPSByZXNlcnZlX3BhZ2VzOworfQorCisvKgogICogc2V0dXBfcGVyX3pvbmVfbG93bWVtX3Jlc2VydmUgLSBjYWxsZWQgd2hlbmV2ZXIKICAqCXN5c2N0bF9sb3dlcl96b25lX3Jlc2VydmVfcmF0aW8gY2hhbmdlcy4gIEVuc3VyZXMgdGhhdCBlYWNoIHpvbmUKICAqCWhhcyBhIGNvcnJlY3QgcGFnZXMgcmVzZXJ2ZWQgdmFsdWUsIHNvIGFuIGFkZXF1YXRlIG51bWJlciBvZgpAQCAtMjUwMiw2ICsyNTUyLDkgQEAKIAkJCX0KIAkJfQogCX0KKworCS8qIHVwZGF0ZSB0b3RhbHJlc2VydmVfcGFnZXMgKi8KKwljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKIC8qCkBAIC0yNTIzLDkgKzI1NzYsMTEgQEAKIAl9CiAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7CisJCXU2NCB0bXA7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7Ci0JCXRtcCA9IChwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzKSAvIGxvd21lbV9wYWdlczsKKwkJdG1wID0gKHU2NClwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzOworCQlkb19kaXYodG1wLCBsb3dtZW1fcGFnZXMpOwogCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewogCQkJLyoKIAkJCSAqIF9fR0ZQX0hJR0ggYW5kIFBGX01FTUFMTE9DIGFsbG9jYXRpb25zIHVzdWFsbHkgZG9uJ3QKQEAgLTI1NTIsMTAgKzI2MDcsMTMgQEAKIAkJCXpvbmUtPnBhZ2VzX21pbiA9IHRtcDsKIAkJfQogCi0JCXpvbmUtPnBhZ2VzX2xvdyAgID0gem9uZS0+cGFnZXNfbWluICsgdG1wIC8gNDsKLQkJem9uZS0+cGFnZXNfaGlnaCAgPSB6b25lLT5wYWdlc19taW4gKyB0bXAgLyAyOworCQl6b25lLT5wYWdlc19sb3cgICA9IHpvbmUtPnBhZ2VzX21pbiArICh0bXAgPj4gMik7CisJCXpvbmUtPnBhZ2VzX2hpZ2ggID0gem9uZS0+cGFnZXNfbWluICsgKHRtcCA+PiAxKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKIAl9CisKKwkvKiB1cGRhdGUgdG90YWxyZXNlcnZlX3BhZ2VzICovCisJY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcygpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggMzdlYWY0MmUuLjFlNDNjOGEgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0xNzc4LDYgKzE3ODAsNyBAQAogCWlmICghc2ltcGxlX2VtcHR5KGRlbnRyeSkpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCisJZGVudHJ5LT5kX2lub2RlLT5pX25saW5rLS07CiAJZGlyLT5pX25saW5rLS07CiAJcmV0dXJuIHNobWVtX3VubGluayhkaXIsIGRlbnRyeSk7CiB9CkBAIC0yMTAwLDYgKzIxMDMsNyBAQAogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKIAlzYi0+c19tYWdpYyA9IFRNUEZTX01BR0lDOwogCXNiLT5zX29wID0gJnNobWVtX29wczsKKwlzYi0+c190aW1lX2dyYW4gPSAxOwogCiAJaW5vZGUgPSBzaG1lbV9nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCBtb2RlLCAwKTsKIAlpZiAoIWlub2RlKQpAQCAtMjE3Myw2ICsyMTc3LDcgQEAKIAkucHJlcGFyZV93cml0ZQk9IHNobWVtX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IHNpbXBsZV9jb21taXRfd3JpdGUsCiAjZW5kaWYKKwkubWlncmF0ZXBhZ2UJPSBtaWdyYXRlX3BhZ2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggNGNiZjhiYi4uZjFiNjQ0ZSAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtMjA3LDExICsyMDcsNiBAQAogI2RlZmluZQlCVUZDVExfQUNUSVZFCSgoKGttZW1fYnVmY3RsX3QpKH4wVSkpLTIpCiAjZGVmaW5lCVNMQUJfTElNSVQJKCgoa21lbV9idWZjdGxfdCkofjBVKSktMykKIAotLyogTWF4IG51bWJlciBvZiBvYmpzLXBlci1zbGFiIGZvciBjYWNoZXMgd2hpY2ggdXNlIG9mZi1zbGFiIHNsYWJzLgotICogTmVlZGVkIHRvIGF2b2lkIGEgcG9zc2libGUgbG9vcGluZyBjb25kaXRpb24gaW4gY2FjaGVfZ3JvdygpLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvZmZzbGFiX2xpbWl0OwotCiAvKgogICogc3RydWN0IHNsYWIKICAqCkBAIC00MjAsNiArNDE1LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9mcmVlYWJsZTsKIAl1bnNpZ25lZCBsb25nIG5vZGVfYWxsb2NzOwogCXVuc2lnbmVkIGxvbmcgbm9kZV9mcmVlczsKKwl1bnNpZ25lZCBsb25nIG5vZGVfb3ZlcmZsb3c7CiAJYXRvbWljX3QgYWxsb2NoaXQ7CiAJYXRvbWljX3QgYWxsb2NtaXNzOwogCWF0b21pY190IGZyZWVoaXQ7CkBAIC00NjUsNiArNDYxLDcgQEAKICNkZWZpbmUJU1RBVFNfSU5DX0VSUih4KQkoKHgpLT5lcnJvcnMrKykKICNkZWZpbmUJU1RBVFNfSU5DX05PREVBTExPQ1MoeCkJKCh4KS0+bm9kZV9hbGxvY3MrKykKICNkZWZpbmUJU1RBVFNfSU5DX05PREVGUkVFUyh4KQkoKHgpLT5ub2RlX2ZyZWVzKyspCisjZGVmaW5lIFNUQVRTX0lOQ19BQ09WRVJGTE9XKHgpICAgKCh4KS0+bm9kZV9vdmVyZmxvdysrKQogI2RlZmluZQlTVEFUU19TRVRfRlJFRUFCTEUoeCwgaSkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgoeCktPm1heF9mcmVlYWJsZSA8IGkpCQkJCVwKQEAgLTQ4NCw2ICs0ODEsNyBAQAogI2RlZmluZQlTVEFUU19JTkNfRVJSKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX05PREVBTExPQ1MoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19JTkNfTk9ERUZSRUVTKHgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU1RBVFNfSU5DX0FDT1ZFUkZMT1coeCkgICBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX1NFVF9GUkVFQUJMRSh4LCBpKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ0hJVCh4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ01JU1MoeCkJZG8geyB9IHdoaWxlICgwKQpAQCAtNjk3LDYgKzY5NSwxNCBAQAogCUZVTEwKIH0gZ19jcHVjYWNoZV91cDsKIAorLyoKKyAqIHVzZWQgYnkgYm9vdCBjb2RlIHRvIGRldGVybWluZSBpZiBpdCBjYW4gdXNlIHNsYWIgYmFzZWQgYWxsb2NhdG9yCisgKi8KK2ludCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKQoreworCXJldHVybiBnX2NwdWNhY2hlX3VwID09IEZVTEw7Cit9CisKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgd29ya19zdHJ1Y3QsIHJlYXBfd29yayk7CiAKIHN0YXRpYyB2b2lkIGZyZWVfYmxvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqKm9ianBwLCBpbnQgbGVuLApAQCAtOTc2LDcgKzk4Miw4IEBACiAJCSAqIFRoYXQgd2F5IHdlIGNvdWxkIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBwdXR0aW5nIHRoZSBvYmplY3RzCiAJCSAqIGludG8gdGhlIGZyZWUgbGlzdHMgYW5kIGdldHRpbmcgdGhlbSBiYWNrIGxhdGVyLgogCQkgKi8KLQkJdHJhbnNmZXJfb2JqZWN0cyhybDMtPnNoYXJlZCwgYWMsIGFjLT5saW1pdCk7CisJCWlmIChybDMtPnNoYXJlZCkKKwkJCXRyYW5zZmVyX29iamVjdHMocmwzLT5zaGFyZWQsIGFjLCBhYy0+bGltaXQpOwogCiAJCWZyZWVfYmxvY2soY2FjaGVwLCBhYy0+ZW50cnksIGFjLT5hdmFpbCwgbm9kZSk7CiAJCWFjLT5hdmFpbCA9IDA7CkBAIC0xMDMzLDcgKzEwNDAsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IGNwdXVwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlsb25nIGNwdSA9IChsb25nKWhjcHU7CkBAIC0xMjk3LDggKzEzMDQsNyBAQAogCQlpZiAoY2FjaGVfY2FjaGUubnVtKQogCQkJYnJlYWs7CiAJfQotCWlmICghY2FjaGVfY2FjaGUubnVtKQotCQlCVUcoKTsKKwlCVUdfT04oIWNhY2hlX2NhY2hlLm51bSk7CiAJY2FjaGVfY2FjaGUuZ2Zwb3JkZXIgPSBvcmRlcjsKIAljYWNoZV9jYWNoZS5jb2xvdXIgPSBsZWZ0X292ZXIgLyBjYWNoZV9jYWNoZS5jb2xvdXJfb2ZmOwogCWNhY2hlX2NhY2hlLnNsYWJfc2l6ZSA9IEFMSUdOKGNhY2hlX2NhY2hlLm51bSAqIHNpemVvZihrbWVtX2J1ZmN0bF90KSArCkBAIC0xMzQ1LDEyICsxMzUxLDYgQEAKIAkJCQkJTlVMTCwgTlVMTCk7CiAJCX0KIAotCQkvKiBJbmMgb2ZmLXNsYWIgYnVmY3RsIGxpbWl0IHVudGlsIHRoZSBjZWlsaW5nIGlzIGhpdC4gKi8KLQkJaWYgKCEoT0ZGX1NMQUIoc2l6ZXMtPmNzX2NhY2hlcCkpKSB7Ci0JCQlvZmZzbGFiX2xpbWl0ID0gc2l6ZXMtPmNzX3NpemUgLSBzaXplb2Yoc3RydWN0IHNsYWIpOwotCQkJb2Zmc2xhYl9saW1pdCAvPSBzaXplb2Yoa21lbV9idWZjdGxfdCk7Ci0JCX0KLQogCQlzaXplcy0+Y3NfZG1hY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZXMtPm5hbWVfZG1hLAogCQkJCQlzaXplcy0+Y3Nfc2l6ZSwKIAkJCQkJQVJDSF9LTUFMTE9DX01JTkFMSUdOLApAQCAtMTQ1NCw3ICsxNDU0LDE0IEBACiAJaW50IGk7CiAKIAlmbGFncyB8PSBjYWNoZXAtPmdmcGZsYWdzOworI2lmbmRlZiBDT05GSUdfTU1VCisJLyogbm9tbXUgdXNlcyBzbGFiJ3MgZm9yIHByb2Nlc3MgYW5vbnltb3VzIG1lbW9yeSBhbGxvY2F0aW9ucywgc28KKwkgKiByZXF1aXJlcyBfX0dGUF9DT01QIHRvIHByb3Blcmx5IHJlZmNvdW50IGhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucyIKKwkgKi8KKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlaWQsIChmbGFncyB8IF9fR0ZQX0NPTVApLCBjYWNoZXAtPmdmcG9yZGVyKTsKKyNlbHNlCiAJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZWlkLCBmbGFncywgY2FjaGVwLT5nZnBvcmRlcik7CisjZW5kaWYKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiBOVUxMOwogCWFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC0xNzYyLDYgKzE3NjksNyBAQAogc3RhdGljIHNpemVfdCBjYWxjdWxhdGVfc2xhYl9vcmRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAogCQkJc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwl1bnNpZ25lZCBsb25nIG9mZnNsYWJfbGltaXQ7CiAJc2l6ZV90IGxlZnRfb3ZlciA9IDA7CiAJaW50IGdmcG9yZGVyOwogCkBAIC0xNzczLDkgKzE3ODEsMTggQEAKIAkJaWYgKCFudW0pCiAJCQljb250aW51ZTsKIAotCQkvKiBNb3JlIHRoYW4gb2Zmc2xhYl9saW1pdCBvYmplY3RzIHdpbGwgY2F1c2UgcHJvYmxlbXMgKi8KLQkJaWYgKChmbGFncyAmIENGTEdTX09GRl9TTEFCKSAmJiBudW0gPiBvZmZzbGFiX2xpbWl0KQotCQkJYnJlYWs7CisJCWlmIChmbGFncyAmIENGTEdTX09GRl9TTEFCKSB7CisJCQkvKgorCQkJICogTWF4IG51bWJlciBvZiBvYmpzLXBlci1zbGFiIGZvciBjYWNoZXMgd2hpY2gKKwkJCSAqIHVzZSBvZmYtc2xhYiBzbGFicy4gTmVlZGVkIHRvIGF2b2lkIGEgcG9zc2libGUKKwkJCSAqIGxvb3BpbmcgY29uZGl0aW9uIGluIGNhY2hlX2dyb3coKS4KKwkJCSAqLworCQkJb2Zmc2xhYl9saW1pdCA9IHNpemUgLSBzaXplb2Yoc3RydWN0IHNsYWIpOworCQkJb2Zmc2xhYl9saW1pdCAvPSBzaXplb2Yoa21lbV9idWZjdGxfdCk7CisKKyAJCQlpZiAobnVtID4gb2Zmc2xhYl9saW1pdCkKKwkJCQlicmVhazsKKwkJfQogCiAJCS8qIEZvdW5kIHNvbWV0aGluZyBhY2NlcHRhYmxlIC0gc2F2ZSBpdCBhd2F5ICovCiAJCWNhY2hlcC0+bnVtID0gbnVtOwpAQCAtMTk3NCw4ICsxOTkxLDcgQEAKIAkgKiBBbHdheXMgY2hlY2tzIGZsYWdzLCBhIGNhbGxlciBtaWdodCBiZSBleHBlY3RpbmcgZGVidWcgc3VwcG9ydCB3aGljaAogCSAqIGlzbid0IGF2YWlsYWJsZS4KIAkgKi8KLQlpZiAoZmxhZ3MgJiB+Q1JFQVRFX01BU0spCi0JCUJVRygpOworCUJVR19PTihmbGFncyAmIH5DUkVBVEVfTUFTSyk7CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgc2l6ZSBpcyBpbiB0ZXJtcyBvZiB3b3Jkcy4gIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkCkBAIC0yMTgzLDExICsyMTk5LDE0IEBACiAJY2hlY2tfaXJxX29uKCk7CiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdOwotCQlpZiAobDMpIHsKKwkJaWYgKGwzICYmIGwzLT5hbGllbikKKwkJCWRyYWluX2FsaWVuX2NhY2hlKGNhY2hlcCwgbDMtPmFsaWVuKTsKKwl9CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CisJCWlmIChsMykKIAkJCWRyYWluX2FycmF5KGNhY2hlcCwgbDMsIGwzLT5zaGFyZWQsIDEsIG5vZGUpOwotCQkJaWYgKGwzLT5hbGllbikKLQkJCQlkcmFpbl9hbGllbl9jYWNoZShjYWNoZXAsIGwzLT5hbGllbik7Ci0JCX0KIAl9CiB9CiAKQEAgLTIyMDYsOCArMjIyNSw3IEBACiAKIAkJc2xhYnAgPSBsaXN0X2VudHJ5KGwzLT5zbGFic19mcmVlLnByZXYsIHN0cnVjdCBzbGFiLCBsaXN0KTsKICNpZiBERUJVRwotCQlpZiAoc2xhYnAtPmludXNlKQotCQkJQlVHKCk7CisJCUJVR19PTihzbGFicC0+aW51c2UpOwogI2VuZGlmCiAJCWxpc3RfZGVsKCZzbGFicC0+bGlzdCk7CiAKQEAgLTIyNDgsOCArMjI2Niw3IEBACiAgKi8KIGludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQogewotCWlmICghY2FjaGVwIHx8IGluX2ludGVycnVwdCgpKQotCQlCVUcoKTsKKwlCVUdfT04oIWNhY2hlcCB8fCBpbl9pbnRlcnJ1cHQoKSk7CiAKIAlyZXR1cm4gX19jYWNoZV9zaHJpbmsoY2FjaGVwKTsKIH0KQEAgLTIyNzcsOCArMjI5NCw3IEBACiAJaW50IGk7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzOwogCi0JaWYgKCFjYWNoZXAgfHwgaW5faW50ZXJydXB0KCkpCi0JCUJVRygpOworCUJVR19PTighY2FjaGVwIHx8IGluX2ludGVycnVwdCgpKTsKIAogCS8qIERvbid0IGxldCBDUFVzIHRvIGNvbWUgYW5kIGdvICovCiAJbG9ja19jcHVfaG90cGx1ZygpOwpAQCAtMjMyMywxMyArMjMzOSwxNSBAQAogCiAvKiBHZXQgdGhlIG1lbW9yeSBmb3IgYSBzbGFiIG1hbmFnZW1lbnQgb2JqLiAqLwogc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY19zbGFibWdtdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLAotCQkJCSAgIGludCBjb2xvdXJfb2ZmLCBnZnBfdCBsb2NhbF9mbGFncykKKwkJCQkgICBpbnQgY29sb3VyX29mZiwgZ2ZwX3QgbG9jYWxfZmxhZ3MsCisJCQkJICAgaW50IG5vZGVpZCkKIHsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAKIAlpZiAoT0ZGX1NMQUIoY2FjaGVwKSkgewogCQkvKiBTbGFiIG1hbmFnZW1lbnQgb2JqIGlzIG9mZi1zbGFiLiAqLwotCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLT5zbGFicF9jYWNoZSwgbG9jYWxfZmxhZ3MpOworCQlzbGFicCA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAtPnNsYWJwX2NhY2hlLAorCQkJCQkgICAgICBsb2NhbF9mbGFncywgbm9kZWlkKTsKIAkJaWYgKCFzbGFicCkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CkBAIC0yMzM5LDYgKzIzNTcsNyBAQAogCXNsYWJwLT5pbnVzZSA9IDA7CiAJc2xhYnAtPmNvbG91cm9mZiA9IGNvbG91cl9vZmY7CiAJc2xhYnAtPnNfbWVtID0gb2JqcCArIGNvbG91cl9vZmY7CisJc2xhYnAtPm5vZGVpZCA9IG5vZGVpZDsKIAlyZXR1cm4gc2xhYnA7CiB9CiAKQEAgLTI0NzcsOCArMjQ5Niw3IEBACiAJICogQmUgbGF6eSBhbmQgb25seSBjaGVjayBmb3IgdmFsaWQgZmxhZ3MgaGVyZSwgIGtlZXBpbmcgaXQgb3V0IG9mIHRoZQogCSAqIGNyaXRpY2FsIHBhdGggaW4ga21lbV9jYWNoZV9hbGxvYygpLgogCSAqLwotCWlmIChmbGFncyAmIH4oU0xBQl9ETUEgfCBTTEFCX0xFVkVMX01BU0sgfCBTTEFCX05PX0dST1cpKQotCQlCVUcoKTsKKwlCVUdfT04oZmxhZ3MgJiB+KFNMQUJfRE1BIHwgU0xBQl9MRVZFTF9NQVNLIHwgU0xBQl9OT19HUk9XKSk7CiAJaWYgKGZsYWdzICYgU0xBQl9OT19HUk9XKQogCQlyZXR1cm4gMDsKIApAQCAtMjUyNSw3ICsyNTQzLDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAkvKiBHZXQgc2xhYiBtYW5hZ2VtZW50LiAqLwotCXNsYWJwID0gYWxsb2Nfc2xhYm1nbXQoY2FjaGVwLCBvYmpwLCBvZmZzZXQsIGxvY2FsX2ZsYWdzKTsKKwlzbGFicCA9IGFsbG9jX3NsYWJtZ210KGNhY2hlcCwgb2JqcCwgb2Zmc2V0LCBsb2NhbF9mbGFncywgbm9kZWlkKTsKIAlpZiAoIXNsYWJwKQogCQlnb3RvIG9wcHMxOwogCkBAIC0zMDg2LDkgKzMxMDQsMTEgQEAKIAkJCWlmIChsMy0+YWxpZW4gJiYgbDMtPmFsaWVuW25vZGVpZF0pIHsKIAkJCQlhbGllbiA9IGwzLT5hbGllbltub2RlaWRdOwogCQkJCXNwaW5fbG9jaygmYWxpZW4tPmxvY2spOwotCQkJCWlmICh1bmxpa2VseShhbGllbi0+YXZhaWwgPT0gYWxpZW4tPmxpbWl0KSkKKwkJCQlpZiAodW5saWtlbHkoYWxpZW4tPmF2YWlsID09IGFsaWVuLT5saW1pdCkpIHsKKwkJCQkJU1RBVFNfSU5DX0FDT1ZFUkZMT1coY2FjaGVwKTsKIAkJCQkJX19kcmFpbl9hbGllbl9jYWNoZShjYWNoZXAsCiAJCQkJCQkJICAgIGFsaWVuLCBub2RlaWQpOworCQkJCX0KIAkJCQlhbGllbi0+ZW50cnlbYWxpZW4tPmF2YWlsKytdID0gb2JqcDsKIAkJCQlzcGluX3VubG9jaygmYWxpZW4tPmxvY2spOwogCQkJfSBlbHNlIHsKQEAgLTM3NjYsNyArMzc4Niw3IEBACiAJc2VxX3B1dHMobSwgIiA6IHNsYWJkYXRhIDxhY3RpdmVfc2xhYnM+IDxudW1fc2xhYnM+IDxzaGFyZWRhdmFpbD4iKTsKICNpZiBTVEFUUwogCXNlcV9wdXRzKG0sICIgOiBnbG9iYWxzdGF0IDxsaXN0YWxsb2NzPiA8bWF4b2Jqcz4gPGdyb3duPiA8cmVhcGVkPiAiCi0JCSAiPGVycm9yPiA8bWF4ZnJlZWFibGU+IDxub2RlYWxsb2NzPiA8cmVtb3RlZnJlZXM+Iik7CisJCSAiPGVycm9yPiA8bWF4ZnJlZWFibGU+IDxub2RlYWxsb2NzPiA8cmVtb3RlZnJlZXM+IDxhbGllbm92ZXJmbG93PiIpOwogCXNlcV9wdXRzKG0sICIgOiBjcHVzdGF0IDxhbGxvY2hpdD4gPGFsbG9jbWlzcz4gPGZyZWVoaXQ+IDxmcmVlbWlzcz4iKTsKICNlbmRpZgogCXNlcV9wdXRjKG0sICdcbicpOwpAQCAtMzg4MCwxMSArMzkwMCwxMiBAQAogCQl1bnNpZ25lZCBsb25nIG1heF9mcmVlYWJsZSA9IGNhY2hlcC0+bWF4X2ZyZWVhYmxlOwogCQl1bnNpZ25lZCBsb25nIG5vZGVfYWxsb2NzID0gY2FjaGVwLT5ub2RlX2FsbG9jczsKIAkJdW5zaWduZWQgbG9uZyBub2RlX2ZyZWVzID0gY2FjaGVwLT5ub2RlX2ZyZWVzOworCQl1bnNpZ25lZCBsb25nIG92ZXJmbG93cyA9IGNhY2hlcC0+bm9kZV9vdmVyZmxvdzsKIAogCQlzZXFfcHJpbnRmKG0sICIgOiBnbG9iYWxzdGF0ICU3bHUgJTZsdSAlNWx1ICU0bHUgXAotCQkJCSU0bHUgJTRsdSAlNGx1ICU0bHUiLCBhbGxvY3MsIGhpZ2gsIGdyb3duLAorCQkJCSU0bHUgJTRsdSAlNGx1ICU0bHUgJTRsdSIsIGFsbG9jcywgaGlnaCwgZ3Jvd24sCiAJCQkJcmVhcGVkLCBlcnJvcnMsIG1heF9mcmVlYWJsZSwgbm9kZV9hbGxvY3MsCi0JCQkJbm9kZV9mcmVlcyk7CisJCQkJbm9kZV9mcmVlcywgb3ZlcmZsb3dzKTsKIAl9CiAJLyogY3B1IHN0YXRzICovCiAJewpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDliY2M3ZTIuLmE2ODI1NWIgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTM1NCw5ICszNTQsNyBAQAogCWlmICghcGRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXBkYXRhLT5wdHJzW2ldID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZGF0YS0+cHRyc1tpXSkKIAkJCWdvdG8gdW53aW5kX29vbTsKQEAgLTM4MywxMSArMzgxLDkgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcGVyY3B1X2RhdGEgKnAgPSAoc3RydWN0IHBlcmNwdV9kYXRhICopICh+KHVuc2lnbmVkIGxvbmcpIG9ianApOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQogCQlrZnJlZShwLT5wdHJzW2ldKTsKLQl9CisKIAlrZnJlZShwKTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9wZXJjcHUpOwpkaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuYwppbmRleCAwYTUxZjM2Li4xMDAwNDBjIDEwMDY0NAotLS0gYS9tbS9zcGFyc2UuYworKysgYi9tbS9zcGFyc2UuYwpAQCAtMzIsNyArMzIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGFycmF5X3NpemUgPSBTRUNUSU9OU19QRVJfUk9PVCAqCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBtZW1fc2VjdGlvbik7CiAKLQlzZWN0aW9uID0gYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBhcnJheV9zaXplKTsKKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKKwkJc2VjdGlvbiA9IGttYWxsb2Nfbm9kZShhcnJheV9zaXplLCBHRlBfS0VSTkVMLCBuaWQpOworCWVsc2UKKwkJc2VjdGlvbiA9IGFsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgYXJyYXlfc2l6ZSk7CiAKIAlpZiAoc2VjdGlvbikKIAkJbWVtc2V0KHNlY3Rpb24sIDAsIGFycmF5X3NpemUpOwpAQCAtODQsMTEgKzg3LDggQEAKIAl1bnNpZ25lZCBsb25nIHJvb3RfbnI7CiAJc3RydWN0IG1lbV9zZWN0aW9uKiByb290OwogCi0JZm9yIChyb290X25yID0gMDsKLQkgICAgIHJvb3RfbnIgPCBOUl9NRU1fU0VDVElPTlM7Ci0JICAgICByb290X25yICs9IFNFQ1RJT05TX1BFUl9ST09UKSB7Ci0JCXJvb3QgPSBfX25yX3RvX3NlY3Rpb24ocm9vdF9ucik7Ci0KKwlmb3IgKHJvb3RfbnIgPSAwOyByb290X25yIDwgTlJfU0VDVElPTl9ST09UUzsgcm9vdF9ucisrKSB7CisJCXJvb3QgPSBfX25yX3RvX3NlY3Rpb24ocm9vdF9uciAqIFNFQ1RJT05TX1BFUl9ST09UKTsKIAkJaWYgKCFyb290KQogCQkJY29udGludWU7CiAKQEAgLTI4MSw5ICsyODEsOSBAQAogCiAJcmV0ID0gc3BhcnNlX2luaXRfb25lX3NlY3Rpb24obXMsIHNlY3Rpb25fbnIsIG1lbW1hcCk7CiAKLQlpZiAocmV0IDw9IDApCi0JCV9fa2ZyZWVfc2VjdGlvbl9tZW1tYXAobWVtbWFwLCBucl9wYWdlcyk7CiBvdXQ6CiAJcGdkYXRfcmVzaXplX3VubG9jayhwZ2RhdCwgJmZsYWdzKTsKKwlpZiAocmV0IDw9IDApCisJCV9fa2ZyZWVfc2VjdGlvbl9tZW1tYXAobWVtbWFwLCBucl9wYWdlcyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCBkN2FmMjk2Li5lMGUxNTgzIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKKysrIGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0xNDgsOCArMTQ4LDcgQEAKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlpbnQgZXJyOwogCi0JaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQotCQlCVUcoKTsKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCiAJZm9yICg7OykgewogCQllbnRyeSA9IGdldF9zd2FwX3BhZ2UoKTsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA3MjllYjNlLi5jMDUwNGYxIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0zMjEsOCArMzIxLDcgQEAKIAkJaW50IGk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGFyZWEtPm5yX3BhZ2VzOyBpKyspIHsKLQkJCWlmICh1bmxpa2VseSghYXJlYS0+cGFnZXNbaV0pKQotCQkJCUJVRygpOworCQkJQlVHX09OKCFhcmVhLT5wYWdlc1tpXSk7CiAJCQlfX2ZyZWVfcGFnZShhcmVhLT5wYWdlc1tpXSk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBhY2RmMDAxLi40NDBhNzMzIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIGxvb3BfYWdhaW46CiAJdG90YWxfc2Nhbm5lZCA9IDA7CiAJbnJfcmVjbGFpbWVkID0gMDsKLQlzYy5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlLAorCXNjLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGU7CiAJc2MubnJfbWFwcGVkID0gcmVhZF9wYWdlX3N0YXRlKG5yX21hcHBlZCk7CiAKIAlpbmNfcGFnZV9zdGF0ZShwYWdlb3V0cnVuKTsKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAgICBub3QgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLiAgU28gaWYgdGhlIGxhc3QgY3B1IGluIGEgbm9kZSBnb2VzCiAgICBhd2F5LCB3ZSBnZXQgY2hhbmdlZCB0byBydW4gYW55d2hlcmU6IGFzIHRoZSBmaXJzdCBvbmUgY29tZXMgYmFjaywKICAgIHJlc3RvcmUgdGhlaXIgY3B1IGJpbmRpbmdzLiAqLwotc3RhdGljIGludCBfX2RldmluaXQgY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBjcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlwZ19kYXRhX3QgKnBnZGF0OwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IGFmZDgzODUuLmU5ZGM4MDMgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTY0Myw2ICs2NDMsNSBAQAogCiBtb2R1bGVfaW5pdChyaWZfaW5pdCk7CiAKLUVYUE9SVF9TWU1CT0wodHJfc291cmNlX3JvdXRlKTsKIEVYUE9SVF9TWU1CT0wodHJfdHlwZV90cmFucyk7CiBFWFBPUlRfU1lNQk9MKGFsbG9jX3RyZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggM2FiNGU3OS4uNzJkODUyOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTIsNyArMiw2IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC01NCwyNCArNTMsMjQgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyAqYXRtYXJwZDsKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgY2xpcF90Ymw7CiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgaWRsZV90aW1lcjsKLXN0YXRpYyBpbnQgc3RhcnRfdGltZXIgPSAxOwogCi0KLXN0YXRpYyBpbnQgdG9fYXRtYXJwZChlbnVtIGF0bWFycF9jdHJsX3R5cGUgdHlwZSxpbnQgaXRmLHVuc2lnbmVkIGxvbmcgaXApCitzdGF0aWMgaW50IHRvX2F0bWFycGQoZW51bSBhdG1hcnBfY3RybF90eXBlIHR5cGUsIGludCBpdGYsIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBhdG1hcnBfY3RybCAqY3RybDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JRFBSSU5USygidG9fYXRtYXJwZCglZClcbiIsdHlwZSk7Ci0JaWYgKCFhdG1hcnBkKSByZXR1cm4gLUVVTkFUQ0g7CisJRFBSSU5USygidG9fYXRtYXJwZCglZClcbiIsIHR5cGUpOworCWlmICghYXRtYXJwZCkKKwkJcmV0dXJuIC1FVU5BVENIOwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0bWFycF9jdHJsKSxHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikgcmV0dXJuIC1FTk9NRU07CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOwogCWN0cmwgPSAoc3RydWN0IGF0bWFycF9jdHJsICopIHNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgYXRtYXJwX2N0cmwpKTsKIAljdHJsLT50eXBlID0gdHlwZTsKIAljdHJsLT5pdGZfbnVtID0gaXRmOwogCWN0cmwtPmlwID0gaXA7Ci0JYXRtX2ZvcmNlX2NoYXJnZShhdG1hcnBkLHNrYi0+dHJ1ZXNpemUpOworCWF0bV9mb3JjZV9jaGFyZ2UoYXRtYXJwZCwgc2tiLT50cnVlc2l6ZSk7CiAKIAlzayA9IHNrX2F0bShhdG1hcnBkKTsKIAlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CkBAIC03OSwyNiArNzgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgdm9pZCBsaW5rX3ZjYyhzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjLHN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5KQorc3RhdGljIHZvaWQgbGlua192Y2Moc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYywgc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnkpCiB7Ci0JRFBSSU5USygibGlua192Y2MgJXAgdG8gZW50cnkgJXAgKG5laWdoICVwKVxuIixjbGlwX3ZjYyxlbnRyeSwKLQkgICAgZW50cnktPm5laWdoKTsKKwlEUFJJTlRLKCJsaW5rX3ZjYyAlcCB0byBlbnRyeSAlcCAobmVpZ2ggJXApXG4iLCBjbGlwX3ZjYywgZW50cnksCisJCWVudHJ5LT5uZWlnaCk7CiAJY2xpcF92Y2MtPmVudHJ5ID0gZW50cnk7Ci0JY2xpcF92Y2MtPnhvZmYgPSAwOyAvKiBAQEAgbWF5IG92ZXJydW4gYnVmZmVyIGJ5IG9uZSBwYWNrZXQgKi8KKwljbGlwX3ZjYy0+eG9mZiA9IDA7CS8qIEBAQCBtYXkgb3ZlcnJ1biBidWZmZXIgYnkgb25lIHBhY2tldCAqLwogCWNsaXBfdmNjLT5uZXh0ID0gZW50cnktPnZjY3M7CiAJZW50cnktPnZjY3MgPSBjbGlwX3ZjYzsKIAllbnRyeS0+bmVpZ2gtPnVzZWQgPSBqaWZmaWVzOwogfQogCi0KIHN0YXRpYyB2b2lkIHVubGlua19jbGlwX3ZjYyhzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjKQogewogCXN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5ID0gY2xpcF92Y2MtPmVudHJ5OwogCXN0cnVjdCBjbGlwX3ZjYyAqKndhbGs7CiAKIAlpZiAoIWVudHJ5KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIixjbGlwX3ZjYyk7CisJCXByaW50ayhLRVJOX0NSSVQgIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIiwgY2xpcF92Y2MpOwogCQlyZXR1cm47CiAJfQogCXNwaW5fbG9ja19iaCgmZW50cnktPm5laWdoLT5kZXYtPnhtaXRfbG9jayk7CS8qIGJsb2NrIGNsaXBfc3RhcnRfeG1pdCgpICovCkBAIC0xMDcsMjQgKzEwNCwyNCBAQAogCQlpZiAoKndhbGsgPT0gY2xpcF92Y2MpIHsKIAkJCWludCBlcnJvcjsKIAotCQkJKndhbGsgPSBjbGlwX3ZjYy0+bmV4dDsgLyogYXRvbWljICovCisJCQkqd2FsayA9IGNsaXBfdmNjLT5uZXh0OwkvKiBhdG9taWMgKi8KIAkJCWNsaXBfdmNjLT5lbnRyeSA9IE5VTEw7CiAJCQlpZiAoY2xpcF92Y2MtPnhvZmYpCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShlbnRyeS0+bmVpZ2gtPmRldik7CiAJCQlpZiAoZW50cnktPnZjY3MpCiAJCQkJZ290byBvdXQ7Ci0JCQllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMtMTsKLQkJCQkvKiBmb3JjZSByZXNvbHV0aW9uIG9yIGV4cGlyYXRpb24gKi8KKwkJCWVudHJ5LT5leHBpcmVzID0gamlmZmllcyAtIDE7CisJCQkvKiBmb3JjZSByZXNvbHV0aW9uIG9yIGV4cGlyYXRpb24gKi8KIAkJCWVycm9yID0gbmVpZ2hfdXBkYXRlKGVudHJ5LT5uZWlnaCwgTlVMTCwgTlVEX05PTkUsCiAJCQkJCSAgICAgTkVJR0hfVVBEQVRFX0ZfQURNSU4pOwogCQkJaWYgKGVycm9yKQogCQkJCXByaW50ayhLRVJOX0NSSVQgInVubGlua19jbGlwX3ZjYzogIgotCQkJCSAgICAibmVpZ2hfdXBkYXRlIGZhaWxlZCB3aXRoICVkXG4iLGVycm9yKTsKKwkJCQkgICAgICAgIm5laWdoX3VwZGF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyb3IpOwogCQkJZ290byBvdXQ7CiAJCX0KIAlwcmludGsoS0VSTl9DUklUICJBVE1BUlA6IHVubGlua19jbGlwX3ZjYyBmYWlsZWQgKGVudHJ5ICVwLCB2Y2MgIgotCSAgIjB4JXApXG4iLGVudHJ5LGNsaXBfdmNjKTsKLW91dDoKKwkgICAgICAgIjB4JXApXG4iLCBlbnRyeSwgY2xpcF92Y2MpOworICAgICAgb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZlbnRyeS0+bmVpZ2gtPmRldi0+eG1pdF9sb2NrKTsKIH0KIApAQCAtMTUzLDEzICsxNTAsMTMgQEAKIAkJRFBSSU5USygiZGVzdHJ1Y3Rpb24gcG9zdHBvbmVkIHdpdGggcmVmICVkXG4iLAogCQkJYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOwogCi0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJm4tPmFycF9xdWV1ZSkpICE9IE5VTEwpIAorCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZuLT5hcnBfcXVldWUpKSAhPSBOVUxMKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJCXJldHVybiAwOwogCX0KIAotCURQUklOVEsoImV4cGlyZWQgbmVpZ2ggJXBcbiIsbik7CisJRFBSSU5USygiZXhwaXJlZCBuZWlnaCAlcFxuIiwgbik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE2Nyw3ICsxNjQsNyBAQAogewogCXdyaXRlX2xvY2soJmNsaXBfdGJsLmxvY2spOwogCV9fbmVpZ2hfZm9yX2VhY2hfcmVsZWFzZSgmY2xpcF90YmwsIG5laWdoX2NoZWNrX2NiKTsKLQltb2RfdGltZXIoJmlkbGVfdGltZXIsIGppZmZpZXMrQ0xJUF9DSEVDS19JTlRFUlZBTCpIWik7CisJbW9kX3RpbWVyKCZpZGxlX3RpbWVyLCBqaWZmaWVzICsgQ0xJUF9DSEVDS19JTlRFUlZBTCAqIEhaKTsKIAl3cml0ZV91bmxvY2soJmNsaXBfdGJsLmxvY2spOwogfQogCkBAIC0xNzcsMTMgKzE3NCwxMyBAQAogCiAJRFBSSU5USygiY2xpcF9hcnBfcmN2XG4iKTsKIAl2Y2MgPSBBVE1fU0tCKHNrYiktPnZjYzsKLQlpZiAoIXZjYyB8fCAhYXRtX2NoYXJnZSh2Y2Msc2tiLT50cnVlc2l6ZSkpIHsKKwlpZiAoIXZjYyB8fCAhYXRtX2NoYXJnZSh2Y2MsIHNrYi0+dHJ1ZXNpemUpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAwOwogCX0KLQlEUFJJTlRLKCJwdXNoaW5nIHRvICVwXG4iLHZjYyk7Ci0JRFBSSU5USygidXNpbmcgJXBcbiIsQ0xJUF9WQ0ModmNjKS0+b2xkX3B1c2gpOwotCUNMSVBfVkNDKHZjYyktPm9sZF9wdXNoKHZjYyxza2IpOworCURQUklOVEsoInB1c2hpbmcgdG8gJXBcbiIsIHZjYyk7CisJRFBSSU5USygidXNpbmcgJXBcbiIsIENMSVBfVkNDKHZjYyktPm9sZF9wdXNoKTsKKwlDTElQX1ZDQyh2Y2MpLT5vbGRfcHVzaCh2Y2MsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MywzNCArMTkwLDM4IEBACiAJMHgwMywJLyogQ3RybDogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiBDb21tYW5kIFBEVSAqLwogCTB4MDAsCS8qIE9VSTogRXRoZXJUeXBlICovCiAJMHgwMCwKLQkweDAwIH07CisJMHgwMAorfTsKIAotc3RhdGljIHZvaWQgY2xpcF9wdXNoKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGNsaXBfcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2MgPSBDTElQX1ZDQyh2Y2MpOwogCiAJRFBSSU5USygiY2xpcCBwdXNoXG4iKTsKIAlpZiAoIXNrYikgewotCQlEUFJJTlRLKCJyZW1vdmluZyBWQ0MgJXBcbiIsY2xpcF92Y2MpOwotCQlpZiAoY2xpcF92Y2MtPmVudHJ5KSB1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOwotCQljbGlwX3ZjYy0+b2xkX3B1c2godmNjLE5VTEwpOyAvKiBwYXNzIG9uIHRoZSBiYWQgbmV3cyAqLworCQlEUFJJTlRLKCJyZW1vdmluZyBWQ0MgJXBcbiIsIGNsaXBfdmNjKTsKKwkJaWYgKGNsaXBfdmNjLT5lbnRyeSkKKwkJCXVubGlua19jbGlwX3ZjYyhjbGlwX3ZjYyk7CisJCWNsaXBfdmNjLT5vbGRfcHVzaCh2Y2MsIE5VTEwpOwkvKiBwYXNzIG9uIHRoZSBiYWQgbmV3cyAqLwogCQlrZnJlZShjbGlwX3ZjYyk7CiAJCXJldHVybjsKIAl9Ci0JYXRtX3JldHVybih2Y2Msc2tiLT50cnVlc2l6ZSk7CisJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCXNrYi0+ZGV2ID0gY2xpcF92Y2MtPmVudHJ5ID8gY2xpcF92Y2MtPmVudHJ5LT5uZWlnaC0+ZGV2IDogY2xpcF9kZXZzOwotCQkvKiBjbGlwX3ZjYy0+ZW50cnkgPT0gTlVMTCBpZiB3ZSBkb24ndCBoYXZlIGFuIElQIGFkZHJlc3MgeWV0ICovCisJLyogY2xpcF92Y2MtPmVudHJ5ID09IE5VTEwgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBJUCBhZGRyZXNzIHlldCAqLwogCWlmICghc2tiLT5kZXYpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuOwogCX0KIAlBVE1fU0tCKHNrYiktPnZjYyA9IHZjYzsKIAlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0JaWYgKCFjbGlwX3ZjYy0+ZW5jYXAgfHwgc2tiLT5sZW4gPCBSRkMxNDgzTExDX0xFTiB8fCBtZW1jbXAoc2tiLT5kYXRhLAotCSAgICBsbGNfb3VpLHNpemVvZihsbGNfb3VpKSkpIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CisJaWYgKCFjbGlwX3ZjYy0+ZW5jYXAKKwkgICAgfHwgc2tiLT5sZW4gPCBSRkMxNDgzTExDX0xFTgorCSAgICB8fCBtZW1jbXAoc2tiLT5kYXRhLCBsbGNfb3VpLCBzaXplb2YgKGxsY19vdWkpKSkKKwkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAllbHNlIHsKIAkJc2tiLT5wcm90b2NvbCA9ICgodTE2ICopIHNrYi0+ZGF0YSlbM107Ci0JCXNrYl9wdWxsKHNrYixSRkMxNDgzTExDX0xFTik7CisJCXNrYl9wdWxsKHNrYiwgUkZDMTQ4M0xMQ19MRU4pOwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKSB7CiAJCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMjM1LDU4ICsyMzYsNTQgQEAKIAluZXRpZl9yeChza2IpOwogfQogCi0KIC8qCiAgKiBOb3RlOiB0aGVzZSBzcGlubG9ja3MgX211c3Rfbm90XyBibG9jayBvbiBub24tU01QLiBUaGUgb25seSBnb2FsIGlzIHRoYXQKICAqIGNsaXBfcG9wIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gdGhlIGNyaXRpY2FsIHNlY3Rpb24gaW4gY2xpcF9zdGFydF94bWl0LgogICovCiAKLQotc3RhdGljIHZvaWQgY2xpcF9wb3Aoc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgY2xpcF9wb3Aoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjID0gQ0xJUF9WQ0ModmNjKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAJaW50IG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5USygiY2xpcF9wb3AodmNjICVwKVxuIix2Y2MpOwotCWNsaXBfdmNjLT5vbGRfcG9wKHZjYyxza2IpOworCURQUklOVEsoImNsaXBfcG9wKHZjYyAlcClcbiIsIHZjYyk7CisJY2xpcF92Y2MtPm9sZF9wb3AodmNjLCBza2IpOwogCS8qIHNrYi0+ZGV2ID09IE5VTEwgaW4gb3V0Ym91bmQgQVJQIHBhY2tldHMgKi8KLQlpZiAoIWRldikgcmV0dXJuOwotCXNwaW5fbG9ja19pcnFzYXZlKCZQUklWKGRldiktPnhvZmZfbG9jayxmbGFncyk7Ci0JaWYgKGF0bV9tYXlfc2VuZCh2Y2MsMCkpIHsKLQkJb2xkID0geGNoZygmY2xpcF92Y2MtPnhvZmYsMCk7Ci0JCWlmIChvbGQpIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnFzYXZlKCZQUklWKGRldiktPnhvZmZfbG9jaywgZmxhZ3MpOworCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgeworCQlvbGQgPSB4Y2hnKCZjbGlwX3ZjYy0+eG9mZiwgMCk7CisJCWlmIChvbGQpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBSSVYoZGV2KS0+eG9mZl9sb2NrLGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZQUklWKGRldiktPnhvZmZfbG9jaywgZmxhZ3MpOwogfQogCi0KIHN0YXRpYyB2b2lkIGNsaXBfbmVpZ2hfZGVzdHJveShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKIHsKLQlEUFJJTlRLKCJjbGlwX25laWdoX2Rlc3Ryb3kgKG5laWdoICVwKVxuIixuZWlnaCk7CisJRFBSSU5USygiY2xpcF9uZWlnaF9kZXN0cm95IChuZWlnaCAlcClcbiIsIG5laWdoKTsKIAlpZiAoTkVJR0gyRU5UUlkobmVpZ2gpLT52Y2NzKQogCQlwcmludGsoS0VSTl9DUklUICJjbGlwX25laWdoX2Rlc3Ryb3k6IHZjY3MgIT0gTlVMTCAhISFcbiIpOwogCU5FSUdIMkVOVFJZKG5laWdoKS0+dmNjcyA9ICh2b2lkICopIDB4ZGVhZGJlZWY7CiB9CiAKLQotc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBjbGlwX25laWdoX3NvbGljaXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JRFBSSU5USygiY2xpcF9uZWlnaF9zb2xpY2l0IChuZWlnaCAlcCwgc2tiICVwKVxuIixuZWlnaCxza2IpOwotCXRvX2F0bWFycGQoYWN0X25lZWQsUFJJVihuZWlnaC0+ZGV2KS0+bnVtYmVyLE5FSUdIMkVOVFJZKG5laWdoKS0+aXApOworCURQUklOVEsoImNsaXBfbmVpZ2hfc29saWNpdCAobmVpZ2ggJXAsIHNrYiAlcClcbiIsIG5laWdoLCBza2IpOworCXRvX2F0bWFycGQoYWN0X25lZWQsIFBSSVYobmVpZ2gtPmRldiktPm51bWJlciwgTkVJR0gyRU5UUlkobmVpZ2gpLT5pcCk7CiB9CiAKLQotc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9lcnJvcihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgY2xpcF9uZWlnaF9lcnJvcihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKICNpZm5kZWYgQ09ORklHX0FUTV9DTElQX05PX0lDTVAKLQlpY21wX3NlbmQoc2tiLElDTVBfREVTVF9VTlJFQUNILElDTVBfSE9TVF9VTlJFQUNILDApOworCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCk7CiAjZW5kaWYKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5laWdoX29wcyBjbGlwX25laWdoX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnNvbGljaXQgPQkJY2xpcF9uZWlnaF9zb2xpY2l0LApAQCAtMjk3LDcgKzI5NCw2IEBACiAJLnF1ZXVlX3htaXQgPQkJZGV2X3F1ZXVlX3htaXQsCiB9OwogCi0KIHN0YXRpYyBpbnQgY2xpcF9jb25zdHJ1Y3RvcihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKIHsKIAlzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeSA9IE5FSUdIMkVOVFJZKG5laWdoKTsKQEAgLTMwNSw5ICszMDEsMTAgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtczsKIAotCURQUklOVEsoImNsaXBfY29uc3RydWN0b3IgKG5laWdoICVwLCBlbnRyeSAlcClcbiIsbmVpZ2gsZW50cnkpOworCURQUklOVEsoImNsaXBfY29uc3RydWN0b3IgKG5laWdoICVwLCBlbnRyeSAlcClcbiIsIG5laWdoLCBlbnRyeSk7CiAJbmVpZ2gtPnR5cGUgPSBpbmV0X2FkZHJfdHlwZShlbnRyeS0+aXApOwotCWlmIChuZWlnaC0+dHlwZSAhPSBSVE5fVU5JQ0FTVCkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5laWdoLT50eXBlICE9IFJUTl9VTklDQVNUKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CkBAIC0zMjYsMTMgKzMyMywxMyBAQAogCSAgICBuZWlnaC0+b3BzLT5jb25uZWN0ZWRfb3V0cHV0IDogbmVpZ2gtPm9wcy0+b3V0cHV0OwogCWVudHJ5LT5uZWlnaCA9IG5laWdoOwogCWVudHJ5LT52Y2NzID0gTlVMTDsKLQllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMtMTsKKwllbnRyeS0+ZXhwaXJlcyA9IGppZmZpZXMgLSAxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIGNsaXBfaGFzaChjb25zdCB2b2lkICpwa2V5LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBqaGFzaF8yd29yZHMoKih1MzIgKilwa2V5LCBkZXYtPmlmaW5kZXgsIGNsaXBfdGJsLmhhc2hfcm5kKTsKKwlyZXR1cm4gamhhc2hfMndvcmRzKCoodTMyICopIHBrZXksIGRldi0+aWZpbmRleCwgY2xpcF90YmwuaGFzaF9ybmQpOwogfQogCiBzdGF0aWMgc3RydWN0IG5laWdoX3RhYmxlIGNsaXBfdGJsID0gewpAQCAtMzY2LDcgKzM2Myw2IEBACiAJLmdjX3RocmVzaDMgCT0gMTAyNCwKIH07CiAKLQogLyogQEBAIGNvcHkgYmggbG9ja2luZyBmcm9tIGFycC5jIC0tIG5lZWQgdG8gYmgtZW5hYmxlIGF0bSBjb2RlIGJlZm9yZSAqLwogCiAvKgpAQCAtMzc2LDE1ICszNzIsMTMgQEAKICAqIGNsaXBfc2V0ZW50cnkuCiAgKi8KIAotCi1zdGF0aWMgaW50IGNsaXBfZW5jYXAoc3RydWN0IGF0bV92Y2MgKnZjYyxpbnQgbW9kZSkKK3N0YXRpYyBpbnQgY2xpcF9lbmNhcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgbW9kZSkKIHsKIAlDTElQX1ZDQyh2Y2MpLT5lbmNhcCA9IG1vZGU7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBjbGlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2xpcF9wcml2ICpjbGlwX3ByaXYgPSBQUklWKGRldik7CiAJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnk7CkBAIC0zOTIsNyArMzg2LDcgQEAKIAlpbnQgb2xkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRLKCJjbGlwX3N0YXJ0X3htaXQgKHNrYiAlcClcbiIsc2tiKTsKKwlEUFJJTlRLKCJjbGlwX3N0YXJ0X3htaXQgKHNrYiAlcClcbiIsIHNrYik7CiAJaWYgKCFza2ItPmRzdCkgewogCQlwcmludGsoS0VSTl9FUlIgImNsaXBfc3RhcnRfeG1pdDogc2tiLT5kc3QgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTQwMSw5ICszOTUsOSBAQAogCX0KIAlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKICNpZiAwCi0JCXNrYi0+ZHN0LT5uZWlnaGJvdXIgPSBjbGlwX2ZpbmRfbmVpZ2hib3VyKHNrYi0+ZHN0LDEpOworCQlza2ItPmRzdC0+bmVpZ2hib3VyID0gY2xpcF9maW5kX25laWdoYm91cihza2ItPmRzdCwgMSk7CiAJCWlmICghc2tiLT5kc3QtPm5laWdoYm91cikgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOyAvKiBsb3N0IHRoYXQgb25lICovCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CS8qIGxvc3QgdGhhdCBvbmUgKi8KIAkJCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTQxNyw3MyArNDExLDczIEBACiAJaWYgKCFlbnRyeS0+dmNjcykgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+ZXhwaXJlcykpIHsKIAkJCS8qIHNob3VsZCBiZSByZXNvbHZlZCAqLwotCQkJZW50cnktPmV4cGlyZXMgPSBqaWZmaWVzK0FUTUFSUF9SRVRSWV9ERUxBWSpIWjsKLQkJCXRvX2F0bWFycGQoYWN0X25lZWQsUFJJVihkZXYpLT5udW1iZXIsZW50cnktPmlwKTsKKwkJCWVudHJ5LT5leHBpcmVzID0gamlmZmllcyArIEFUTUFSUF9SRVRSWV9ERUxBWSAqIEhaOworCQkJdG9fYXRtYXJwZChhY3RfbmVlZCwgUFJJVihkZXYpLT5udW1iZXIsIGVudHJ5LT5pcCk7CiAJCX0KIAkJaWYgKGVudHJ5LT5uZWlnaC0+YXJwX3F1ZXVlLnFsZW4gPCBBVE1BUlBfTUFYX1VOUkVTX1BBQ0tFVFMpCi0JCQlza2JfcXVldWVfdGFpbCgmZW50cnktPm5laWdoLT5hcnBfcXVldWUsc2tiKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZlbnRyeS0+bmVpZ2gtPmFycF9xdWV1ZSwgc2tiKTsKIAkJZWxzZSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCQlyZXR1cm4gMDsKIAl9Ci0JRFBSSU5USygibmVpZ2ggJXAsIHZjY3MgJXBcbiIsZW50cnksZW50cnktPnZjY3MpOworCURQUklOVEsoIm5laWdoICVwLCB2Y2NzICVwXG4iLCBlbnRyeSwgZW50cnktPnZjY3MpOwogCUFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjID0gZW50cnktPnZjY3MtPnZjYzsKLQlEUFJJTlRLKCJ1c2luZyBuZWlnaGJvdXIgJXAsIHZjYyAlcFxuIixza2ItPmRzdC0+bmVpZ2hib3VyLHZjYyk7CisJRFBSSU5USygidXNpbmcgbmVpZ2hib3VyICVwLCB2Y2MgJXBcbiIsIHNrYi0+ZHN0LT5uZWlnaGJvdXIsIHZjYyk7CiAJaWYgKGVudHJ5LT52Y2NzLT5lbmNhcCkgewogCQl2b2lkICpoZXJlOwogCi0JCWhlcmUgPSBza2JfcHVzaChza2IsUkZDMTQ4M0xMQ19MRU4pOwotCQltZW1jcHkoaGVyZSxsbGNfb3VpLHNpemVvZihsbGNfb3VpKSk7CisJCWhlcmUgPSBza2JfcHVzaChza2IsIFJGQzE0ODNMTENfTEVOKTsKKwkJbWVtY3B5KGhlcmUsIGxsY19vdWksIHNpemVvZihsbGNfb3VpKSk7CiAJCSgodTE2ICopIGhlcmUpWzNdID0gc2tiLT5wcm90b2NvbDsKIAl9CiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSB2Y2MtPmF0bV9vcHRpb25zOwogCWVudHJ5LT52Y2NzLT5sYXN0X3VzZSA9IGppZmZpZXM7Ci0JRFBSSU5USygiYXRtX3NrYiglcCktPnZjYyglcCktPmRldiglcClcbiIsc2tiLHZjYyx2Y2MtPmRldik7Ci0Jb2xkID0geGNoZygmZW50cnktPnZjY3MtPnhvZmYsMSk7IC8qIGFzc3VtZSBYT0ZGIC4uLiAqLworCURQUklOVEsoImF0bV9za2IoJXApLT52Y2MoJXApLT5kZXYoJXApXG4iLCBza2IsIHZjYywgdmNjLT5kZXYpOworCW9sZCA9IHhjaGcoJmVudHJ5LT52Y2NzLT54b2ZmLCAxKTsJLyogYXNzdW1lIFhPRkYgLi4uICovCiAJaWYgKG9sZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX3N0YXJ0X3htaXQ6IFhPRkYtPlhPRkYgdHJhbnNpdGlvblxuIik7CiAJCXJldHVybiAwOwogCX0KIAljbGlwX3ByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAljbGlwX3ByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCSh2b2lkKSB2Y2MtPnNlbmQodmNjLHNrYik7Ci0JaWYgKGF0bV9tYXlfc2VuZCh2Y2MsMCkpIHsKKwl2Y2MtPnNlbmQodmNjLCBza2IpOworCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQllbnRyeS0+dmNjcy0+eG9mZiA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssZmxhZ3MpOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsgLyogWE9GRiAtPiB0aHJvdHRsZSBpbW1lZGlhdGVseSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGlwX3ByaXYtPnhvZmZfbG9jaywgZmxhZ3MpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsJLyogWE9GRiAtPiB0aHJvdHRsZSBpbW1lZGlhdGVseSAqLwogCWJhcnJpZXIoKTsKIAlpZiAoIWVudHJ5LT52Y2NzLT54b2ZmKQogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQkvKiBPaCwgd2UganVzdCByYWNlZCB3aXRoIGNsaXBfcG9wLiBuZXRpZl9zdGFydF9xdWV1ZSBzaG91bGQgYmUKLQkJICAgZ29vZCBlbm91Z2gsIGJlY2F1c2Ugbm90aGluZyBzaG91bGQgcmVhbGx5IGJlIGFzbGVlcCBiZWNhdXNlCi0JCSAgIG9mIHRoZSBicmllZiBuZXRpZl9zdG9wX3F1ZXVlLiBJZiB0aGlzIGlzbid0IHRydWUgb3IgaWYgaXQKLQkJICAgY2hhbmdlcywgdXNlIG5ldGlmX3dha2VfcXVldWUgaW5zdGVhZC4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGlwX3ByaXYtPnhvZmZfbG9jayxmbGFncyk7CisJLyogT2gsIHdlIGp1c3QgcmFjZWQgd2l0aCBjbGlwX3BvcC4gbmV0aWZfc3RhcnRfcXVldWUgc2hvdWxkIGJlCisJICAgZ29vZCBlbm91Z2gsIGJlY2F1c2Ugbm90aGluZyBzaG91bGQgcmVhbGx5IGJlIGFzbGVlcCBiZWNhdXNlCisJICAgb2YgdGhlIGJyaWVmIG5ldGlmX3N0b3BfcXVldWUuIElmIHRoaXMgaXNuJ3QgdHJ1ZSBvciBpZiBpdAorCSAgIGNoYW5nZXMsIHVzZSBuZXRpZl93YWtlX3F1ZXVlIGluc3RlYWQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNsaXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuICZQUklWKGRldiktPnN0YXRzOwogfQogCi0KLXN0YXRpYyBpbnQgY2xpcF9ta2lwKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHRpbWVvdXQpCitzdGF0aWMgaW50IGNsaXBfbWtpcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgdGltZW91dCkKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjOwogCXN0cnVjdCBza19idWZmX2hlYWQgY29weTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKCF2Y2MtPnB1c2gpIHJldHVybiAtRUJBREZEOwotCWNsaXBfdmNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNsaXBfdmNjKSxHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaXBfdmNjKSByZXR1cm4gLUVOT01FTTsKLQlEUFJJTlRLKCJta2lwIGNsaXBfdmNjICVwIHZjYyAlcFxuIixjbGlwX3ZjYyx2Y2MpOworCWlmICghdmNjLT5wdXNoKQorCQlyZXR1cm4gLUVCQURGRDsKKwljbGlwX3ZjYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGlwX3ZjYyksIEdGUF9LRVJORUwpOworCWlmICghY2xpcF92Y2MpCisJCXJldHVybiAtRU5PTUVNOworCURQUklOVEsoIm1raXAgY2xpcF92Y2MgJXAgdmNjICVwXG4iLCBjbGlwX3ZjYywgdmNjKTsKIAljbGlwX3ZjYy0+dmNjID0gdmNjOwogCXZjYy0+dXNlcl9iYWNrID0gY2xpcF92Y2M7CiAJc2V0X2JpdChBVE1fVkZfSVNfQ0xJUCwgJnZjYy0+ZmxhZ3MpOwpAQCAtNDkxLDcgKzQ4NSw3IEBACiAJY2xpcF92Y2MtPnhvZmYgPSAwOwogCWNsaXBfdmNjLT5lbmNhcCA9IDE7CiAJY2xpcF92Y2MtPmxhc3RfdXNlID0gamlmZmllczsKLQljbGlwX3ZjYy0+aWRsZV90aW1lb3V0ID0gdGltZW91dCpIWjsKKwljbGlwX3ZjYy0+aWRsZV90aW1lb3V0ID0gdGltZW91dCAqIEhaOwogCWNsaXBfdmNjLT5vbGRfcHVzaCA9IHZjYy0+cHVzaDsKIAljbGlwX3ZjYy0+b2xkX3BvcCA9IHZjYy0+cG9wOwogCXZjYy0+cHVzaCA9IGNsaXBfcHVzaDsKQEAgLTUwMSwyNyArNDk1LDI1IEBACiAJLyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmQgTUtJUCAqLwogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNvcHkpKSAhPSBOVUxMKQogCQlpZiAoIWNsaXBfZGV2cykgewotCQkJYXRtX3JldHVybih2Y2Msc2tiLT50cnVlc2l6ZSk7CisJCQlhdG1fcmV0dXJuKHZjYywgc2tiLT50cnVlc2l6ZSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKIAotCQkJY2xpcF9wdXNoKHZjYyxza2IpOworCQkJY2xpcF9wdXNoKHZjYywgc2tiKTsKIAkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07CiAJCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOwogCQl9CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX3NldGVudHJ5KHN0cnVjdCBhdG1fdmNjICp2Y2MsdTMyIGlwKQorc3RhdGljIGludCBjbGlwX3NldGVudHJ5KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHUzMiBpcCkKIHsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKIAlzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeTsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGNsaXBfdmNjICpjbGlwX3ZjYzsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGlwLCAudG9zID0gMSB9IH0gfTsKKwlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGlwLCAudG9zID0gMX19IH07CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKIAlpZiAodmNjLT5wdXNoICE9IGNsaXBfcHVzaCkgewpAQCAtNTM4LDI4ICs1MzAsMjkgQEAKIAkJdW5saW5rX2NsaXBfdmNjKGNsaXBfdmNjKTsKIAkJcmV0dXJuIDA7CiAJfQotCWVycm9yID0gaXBfcm91dGVfb3V0cHV0X2tleSgmcnQsJmZsKTsKLQlpZiAoZXJyb3IpIHJldHVybiBlcnJvcjsKLQluZWlnaCA9IF9fbmVpZ2hfbG9va3VwKCZjbGlwX3RibCwmaXAscnQtPnUuZHN0LmRldiwxKTsKKwllcnJvciA9IGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCW5laWdoID0gX19uZWlnaF9sb29rdXAoJmNsaXBfdGJsLCAmaXAsIHJ0LT51LmRzdC5kZXYsIDEpOwogCWlwX3J0X3B1dChydCk7CiAJaWYgKCFuZWlnaCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZW50cnkgPSBORUlHSDJFTlRSWShuZWlnaCk7CiAJaWYgKGVudHJ5ICE9IGNsaXBfdmNjLT5lbnRyeSkgewotCQlpZiAoIWNsaXBfdmNjLT5lbnRyeSkgRFBSSU5USygic2V0ZW50cnk6IGFkZFxuIik7CisJCWlmICghY2xpcF92Y2MtPmVudHJ5KQorCQkJRFBSSU5USygic2V0ZW50cnk6IGFkZFxuIik7CiAJCWVsc2UgewogCQkJRFBSSU5USygic2V0ZW50cnk6IHVwZGF0ZVxuIik7CiAJCQl1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOwogCQl9Ci0JCWxpbmtfdmNjKGNsaXBfdmNjLGVudHJ5KTsKKwkJbGlua192Y2MoY2xpcF92Y2MsIGVudHJ5KTsKIAl9Ci0JZXJyb3IgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsY19vdWksIE5VRF9QRVJNQU5FTlQsIAotCQkJICAgICBORUlHSF9VUERBVEVfRl9PVkVSUklERXxORUlHSF9VUERBVEVfRl9BRE1JTik7CisJZXJyb3IgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsY19vdWksIE5VRF9QRVJNQU5FTlQsCisJCQkgICAgIE5FSUdIX1VQREFURV9GX09WRVJSSURFIHwgTkVJR0hfVVBEQVRFX0ZfQURNSU4pOwogCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogCXJldHVybiBlcnJvcjsKIH0KIAotCiBzdGF0aWMgdm9pZCBjbGlwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGlwX3N0YXJ0X3htaXQ7CkBAIC01NjgsMTUgKzU2MSwxNCBAQAogCWRldi0+dHlwZSA9IEFSUEhSRF9BVE07CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBSRkMxNDgzTExDX0xFTjsKIAlkZXYtPm10dSA9IFJGQzE2MjZfTVRVOwotCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOyAvKiAibm9ybWFsIiBxdWV1ZSAocGFja2V0cykgKi8KLQkgICAgLyogV2hlbiB1c2luZyBhICJyZWFsIiBxZGlzYywgdGhlIHFkaXNjIGRldGVybWluZXMgdGhlIHF1ZXVlICovCi0JICAgIC8qIGxlbmd0aC4gdHhfcXVldWVfbGVuIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGRlZmF1bHQgY2FzZSwgKi8KLQkgICAgLyogd2l0aG91dCBhbnkgbW9yZSBlbGFib3JhdGUgcXVldWluZy4gMTAwIGlzIGEgcmVhc29uYWJsZSAqLwotCSAgICAvKiBjb21wcm9taXNlIGJldHdlZW4gZGVjZW50IGJ1cnN0LXRvbGVyYW5jZSBhbmQgcHJvdGVjdGlvbiAqLwotCSAgICAvKiBhZ2FpbnN0IG1lbW9yeSBob2dzLiAqLworCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwkvKiAibm9ybWFsIiBxdWV1ZSAocGFja2V0cykgKi8KKwkvKiBXaGVuIHVzaW5nIGEgInJlYWwiIHFkaXNjLCB0aGUgcWRpc2MgZGV0ZXJtaW5lcyB0aGUgcXVldWUgKi8KKwkvKiBsZW5ndGguIHR4X3F1ZXVlX2xlbiBpcyBvbmx5IHVzZWQgZm9yIHRoZSBkZWZhdWx0IGNhc2UsICovCisJLyogd2l0aG91dCBhbnkgbW9yZSBlbGFib3JhdGUgcXVldWluZy4gMTAwIGlzIGEgcmVhc29uYWJsZSAqLworCS8qIGNvbXByb21pc2UgYmV0d2VlbiBkZWNlbnQgYnVyc3QtdG9sZXJhbmNlIGFuZCBwcm90ZWN0aW9uICovCisJLyogYWdhaW5zdCBtZW1vcnkgaG9ncy4gKi8KIH0KIAotCiBzdGF0aWMgaW50IGNsaXBfY3JlYXRlKGludCBudW1iZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTU4NSwxOSArNTc3LDE5IEBACiAKIAlpZiAobnVtYmVyICE9IC0xKSB7CiAJCWZvciAoZGV2ID0gY2xpcF9kZXZzOyBkZXY7IGRldiA9IFBSSVYoZGV2KS0+bmV4dCkKLQkJCWlmIChQUklWKGRldiktPm51bWJlciA9PSBudW1iZXIpIHJldHVybiAtRUVYSVNUOwotCX0KLQllbHNlIHsKKwkJCWlmIChQUklWKGRldiktPm51bWJlciA9PSBudW1iZXIpCisJCQkJcmV0dXJuIC1FRVhJU1Q7CisJfSBlbHNlIHsKIAkJbnVtYmVyID0gMDsKIAkJZm9yIChkZXYgPSBjbGlwX2RldnM7IGRldjsgZGV2ID0gUFJJVihkZXYpLT5uZXh0KQogCQkJaWYgKFBSSVYoZGV2KS0+bnVtYmVyID49IG51bWJlcikKLQkJCQludW1iZXIgPSBQUklWKGRldiktPm51bWJlcisxOworCQkJCW51bWJlciA9IFBSSVYoZGV2KS0+bnVtYmVyICsgMTsKIAl9CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgY2xpcF9wcml2KSwgIiIsIGNsaXBfc2V0dXApOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAljbGlwX3ByaXYgPSBQUklWKGRldik7Ci0Jc3ByaW50ZihkZXYtPm5hbWUsImF0bSVkIixudW1iZXIpOworCXNwcmludGYoZGV2LT5uYW1lLCAiYXRtJWQiLCBudW1iZXIpOwogCXNwaW5fbG9ja19pbml0KCZjbGlwX3ByaXYtPnhvZmZfbG9jayk7CiAJY2xpcF9wcml2LT5udW1iZXIgPSBudW1iZXI7CiAJZXJyb3IgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTYwNyw1MyArNTk5LDQ4IEBACiAJfQogCWNsaXBfcHJpdi0+bmV4dCA9IGNsaXBfZGV2czsKIAljbGlwX2RldnMgPSBkZXY7Ci0JRFBSSU5USygicmVnaXN0ZXJlZCAobmV0OiVzKVxuIixkZXYtPm5hbWUpOworCURQUklOVEsoInJlZ2lzdGVyZWQgKG5ldDolcylcbiIsIGRldi0+bmFtZSk7CiAJcmV0dXJuIG51bWJlcjsKIH0KIAotCi1zdGF0aWMgaW50IGNsaXBfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyx1bnNpZ25lZCBsb25nIGV2ZW50LAotICAgIHZvaWQgKmRldikKK3N0YXRpYyBpbnQgY2xpcF9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgICB2b2lkICphcmcpCiB7Ci0JLyogaWdub3JlIG5vbi1DTElQIGRldmljZXMgKi8KLQlpZiAoKChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXYpLT50eXBlICE9IEFSUEhSRF9BVE0gfHwKLQkgICAgKChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXYpLT5oYXJkX3N0YXJ0X3htaXQgIT0gY2xpcF9zdGFydF94bWl0KQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CisKKwlpZiAoZXZlbnQgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKKwkJbmVpZ2hfaWZkb3duKCZjbGlwX3RibCwgZGV2KTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCS8qIGlnbm9yZSBub24tQ0xJUCBkZXZpY2VzICovCisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+aGFyZF9zdGFydF94bWl0ICE9IGNsaXBfc3RhcnRfeG1pdCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCiAJc3dpdGNoIChldmVudCkgewotCQljYXNlIE5FVERFVl9VUDoKLQkJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9VUFxuIik7Ci0JCQkodm9pZCkgdG9fYXRtYXJwZChhY3RfdXAsUFJJVihkZXYpLT5udW1iZXIsMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKLQkJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9ET1dOXG4iKTsKLQkJCSh2b2lkKSB0b19hdG1hcnBkKGFjdF9kb3duLFBSSVYoZGV2KS0+bnVtYmVyLDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVUREVWX0NIQU5HRToKLQkJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgotCQkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX0NIQU5HRSpcbiIpOwotCQkJKHZvaWQpIHRvX2F0bWFycGQoYWN0X2NoYW5nZSxQUklWKGRldiktPm51bWJlciwwKTsKLQkJCWJyZWFrOwotCQljYXNlIE5FVERFVl9SRUJPT1Q6Ci0JCWNhc2UgTkVUREVWX1JFR0lTVEVSOgotCQljYXNlIE5FVERFVl9ET1dOOgotCQkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgJWxkXG4iLGV2ZW50KTsKLQkJCS8qIGlnbm9yZSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX2RldmljZV9ldmVudDogdW5rbm93biBldmVudCAiCi0JCQkgICAgIiVsZFxuIixldmVudCk7Ci0JCQlicmVhazsKKwljYXNlIE5FVERFVl9VUDoKKwkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX1VQXG4iKTsKKwkJdG9fYXRtYXJwZChhY3RfdXAsIFBSSVYoZGV2KS0+bnVtYmVyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKKwkJRFBSSU5USygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX0RPV05cbiIpOworCQl0b19hdG1hcnBkKGFjdF9kb3duLCBQUklWKGRldiktPm51bWJlciwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0NIQU5HRToKKwljYXNlIE5FVERFVl9DSEFOR0VNVFU6CisJCURQUklOVEsoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9DSEFOR0UqXG4iKTsKKwkJdG9fYXRtYXJwZChhY3RfY2hhbmdlLCBQUklWKGRldiktPm51bWJlciwgMCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKLQotc3RhdGljIGludCBjbGlwX2luZXRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLHVuc2lnbmVkIGxvbmcgZXZlbnQsCi0gICAgdm9pZCAqaWZhKQorc3RhdGljIGludCBjbGlwX2luZXRfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgdm9pZCAqaWZhKQogewogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAotCWluX2RldiA9ICgoc3RydWN0IGluX2lmYWRkciAqKSBpZmEpLT5pZmFfZGV2OworCWluX2RldiA9ICgoc3RydWN0IGluX2lmYWRkciAqKWlmYSktPmlmYV9kZXY7CiAJaWYgKCFpbl9kZXYgfHwgIWluX2Rldi0+ZGV2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsaXBfaW5ldF9ldmVudDogbm8gZGV2aWNlXG4iKTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtNjYyLDIzICs2NDksMjAgQEAKIAkgKiBUcmFuc2l0aW9ucyBhcmUgb2YgdGhlIGRvd24tY2hhbmdlLXVwIHR5cGUsIHNvIGl0J3Mgc3VmZmljaWVudCB0bwogCSAqIGhhbmRsZSB0aGUgY2hhbmdlIG9uIHVwLgogCSAqLwotCWlmIChldmVudCAhPSBORVRERVZfVVApIHJldHVybiBOT1RJRllfRE9ORTsKLQlyZXR1cm4gY2xpcF9kZXZpY2VfZXZlbnQodGhpcyxORVRERVZfQ0hBTkdFLGluX2Rldi0+ZGV2KTsKKwlpZiAoZXZlbnQgIT0gTkVUREVWX1VQKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcmV0dXJuIGNsaXBfZGV2aWNlX2V2ZW50KHRoaXMsIE5FVERFVl9DSEFOR0UsIGluX2Rldi0+ZGV2KTsKIH0KIAogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNsaXBfZGV2X25vdGlmaWVyID0gewotCWNsaXBfZGV2aWNlX2V2ZW50LAotCU5VTEwsCi0JMAorCS5ub3RpZmllcl9jYWxsID0gY2xpcF9kZXZpY2VfZXZlbnQsCiB9OwogCiAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbGlwX2luZXRfbm90aWZpZXIgPSB7Ci0JY2xpcF9pbmV0X2V2ZW50LAotCU5VTEwsCi0JMAorCS5ub3RpZmllcl9jYWxsID0gY2xpcF9pbmV0X2V2ZW50LAogfTsKIAogCkBAIC02ODYsMTQgKzY3MCwxMiBAQAogc3RhdGljIHZvaWQgYXRtYXJwZF9jbG9zZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCURQUklOVEsoImF0bWFycGRfY2xvc2VcbiIpOwotCWF0bWFycGQgPSBOVUxMOyAvKiBhc3N1bWVkIHRvIGJlIGF0b21pYyAqLwotCWJhcnJpZXIoKTsKLQl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpOwotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcik7Ci0JaWYgKHNrYl9wZWVrKCZza19hdG0odmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSkpCi0JCXByaW50ayhLRVJOX0VSUiAiYXRtYXJwZF9jbG9zZTogY2xvc2luZyB3aXRoIHJlcXVlc3RzICIKLQkJICAgICJwZW5kaW5nXG4iKTsKKworCXJ0bmxfbG9jaygpOworCWF0bWFycGQgPSBOVUxMOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpOworCXJ0bmxfdW5sb2NrKCk7CisKIAlEUFJJTlRLKCIoZG9uZSlcbiIpOwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQpAQCAtNzE0LDE0ICs2OTYsMTQgQEAKIAogc3RhdGljIGludCBhdG1faW5pdF9hdG1hcnAoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLQlpZiAoYXRtYXJwZCkgcmV0dXJuIC1FQUREUklOVVNFOwotCWlmIChzdGFydF90aW1lcikgewotCQlzdGFydF90aW1lciA9IDA7Ci0JCWluaXRfdGltZXIoJmlkbGVfdGltZXIpOwotCQlpZGxlX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzK0NMSVBfQ0hFQ0tfSU5URVJWQUwqSFo7Ci0JCWlkbGVfdGltZXIuZnVuY3Rpb24gPSBpZGxlX3RpbWVyX2NoZWNrOwotCQlhZGRfdGltZXIoJmlkbGVfdGltZXIpOworCXJ0bmxfbG9jaygpOworCWlmIChhdG1hcnBkKSB7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiAtRUFERFJJTlVTRTsKIAl9CisKKwltb2RfdGltZXIoJmlkbGVfdGltZXIsIGppZmZpZXMrQ0xJUF9DSEVDS19JTlRFUlZBTCpIWik7CisKIAlhdG1hcnBkID0gdmNjOwogCXNldF9iaXQoQVRNX1ZGX01FVEEsJnZjYy0+ZmxhZ3MpOwogCXNldF9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKTsKQEAgLTczMSwxMCArNzEzLDcgQEAKIAl2Y2MtPnB1c2ggPSBOVUxMOwogCXZjYy0+cG9wID0gTlVMTDsgLyogY3Jhc2ggKi8KIAl2Y2MtPnB1c2hfb2FtID0gTlVMTDsgLyogY3Jhc2ggKi8KLQlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcikpCi0JCXByaW50ayhLRVJOX0VSUiAicmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyIGZhaWxlZFxuIik7Ci0JaWYgKHJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpKQotCQlwcmludGsoS0VSTl9FUlIgInJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyIGZhaWxlZFxuIik7CisJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ0LDUzICs3MjMsNTMgQEAKIAlpbnQgZXJyID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ01LQ0xJUDoKLQkJY2FzZSBBVE1BUlBEX0NUUkw6Ci0JCWNhc2UgQVRNQVJQX01LSVA6Ci0JCWNhc2UgQVRNQVJQX1NFVEVOVFJZOgotCQljYXNlIEFUTUFSUF9FTkNBUDoKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWNhc2UgU0lPQ01LQ0xJUDoKKwljYXNlIEFUTUFSUERfQ1RSTDoKKwljYXNlIEFUTUFSUF9NS0lQOgorCWNhc2UgQVRNQVJQX1NFVEVOVFJZOgorCWNhc2UgQVRNQVJQX0VOQ0FQOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ01LQ0xJUDoKLQkJCWVyciA9IGNsaXBfY3JlYXRlKGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1BUlBEX0NUUkw6Ci0JCQllcnIgPSBhdG1faW5pdF9hdG1hcnAodmNjKTsKLQkJCWlmICghZXJyKSB7Ci0JCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEFUTUFSUF9NS0lQOgotCQkJZXJyID0gY2xpcF9ta2lwKHZjYyAsYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUTUFSUF9TRVRFTlRSWToKLQkJCWVyciA9IGNsaXBfc2V0ZW50cnkodmNjLCBhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNQVJQX0VOQ0FQOgotCQkJZXJyID0gY2xpcF9lbmNhcCh2Y2MsIGFyZyk7Ci0JCQlicmVhazsKKwljYXNlIFNJT0NNS0NMSVA6CisJCWVyciA9IGNsaXBfY3JlYXRlKGFyZyk7CisJCWJyZWFrOworCWNhc2UgQVRNQVJQRF9DVFJMOgorCQllcnIgPSBhdG1faW5pdF9hdG1hcnAodmNjKTsKKwkJaWYgKCFlcnIpIHsKKwkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOworCQkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFUTUFSUF9NS0lQOgorCQllcnIgPSBjbGlwX21raXAodmNjLCBhcmcpOworCQlicmVhazsKKwljYXNlIEFUTUFSUF9TRVRFTlRSWToKKwkJZXJyID0gY2xpcF9zZXRlbnRyeSh2Y2MsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgQVRNQVJQX0VOQ0FQOgorCQllcnIgPSBjbGlwX2VuY2FwKHZjYywgYXJnKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIGNsaXBfaW9jdGxfb3BzID0gewotCS5vd25lciAJPSBUSElTX01PRFVMRSwKLQkuaW9jdGwJPSBjbGlwX2lvY3RsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pb2N0bCA9IGNsaXBfaW9jdGwsCiB9OwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIHZvaWQgc3ZjX2FkZHIoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKmFkZHIpCiB7Ci0Jc3RhdGljIGludCBjb2RlW10gPSB7IDEsMiwxMCw2LDEsMCB9OwotCXN0YXRpYyBpbnQgZTE2NFtdID0geyAxLDgsNCw2LDEsMCB9OworCXN0YXRpYyBpbnQgY29kZVtdID0geyAxLCAyLCAxMCwgNiwgMSwgMCB9OworCXN0YXRpYyBpbnQgZTE2NFtdID0geyAxLCA4LCA0LCA2LCAxLCAwIH07CiAKIAlpZiAoKmFkZHItPnNhc19hZGRyLnB1YikgewogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYWRkci0+c2FzX2FkZHIucHViKTsKQEAgLTgwOSw3ICs3ODgsNyBAQAogCQlmb3IgKGkgPSAwOyBmaWVsZHNbaV07IGkrKykgewogCQkJZm9yIChqID0gZmllbGRzW2ldOyBqOyBqLS0pCiAJCQkJc2VxX3ByaW50ZihzZXEsICIlMDJYIiwgKnBydisrKTsKLQkJCWlmIChmaWVsZHNbaSsxXSkKKwkJCWlmIChmaWVsZHNbaSArIDFdKQogCQkJCXNlcV9wdXRjKHNlcSwgJy4nKTsKIAkJfQogCX0KQEAgLTgyOCw4ICs4MDcsNyBAQAogCXN2YyA9ICgoY2xpcF92Y2MgPT0gU0VRX05PX1ZDQ19UT0tFTikgfHwKIAkgICAgICAgKHNrX2F0bShjbGlwX3ZjYy0+dmNjKS0+c2tfZmFtaWx5ID09IEFGX0FUTVNWQykpOwogCi0JbGxjID0gKChjbGlwX3ZjYyA9PSBTRVFfTk9fVkNDX1RPS0VOKSB8fAotCSAgICAgICBjbGlwX3ZjYy0+ZW5jYXApOworCWxsYyA9ICgoY2xpcF92Y2MgPT0gU0VRX05PX1ZDQ19UT0tFTikgfHwgY2xpcF92Y2MtPmVuY2FwKTsKIAogCWlmIChjbGlwX3ZjYyA9PSBTRVFfTk9fVkNDX1RPS0VOKQogCQlleHAgPSBlbnRyeS0+bmVpZ2gtPnVzZWQ7CkBAIC04MzksMTAgKzgxNyw3IEBACiAJZXhwID0gKGppZmZpZXMgLSBleHApIC8gSFo7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUtNnMlLTRzJS00cyU1bGQgIiwKLQkJICAgZGV2LT5uYW1lLAotCQkgICBzdmMgPyAiU1ZDIiA6ICJQVkMiLAotCQkgICBsbGMgPyAiTExDIiA6ICJOVUxMIiwKLQkJICAgZXhwKTsKKwkJICAgZGV2LT5uYW1lLCBzdmMgPyAiU1ZDIiA6ICJQVkMiLCBsbGMgPyAiTExDIiA6ICJOVUxMIiwgZXhwKTsKIAogCW9mZiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkLiVkLiVkLiVkIiwKIAkJCU5JUFFVQUQoZW50cnktPmlwKSk7CkBAIC04NjAsOCArODM1LDcgQEAKIAl9IGVsc2UgaWYgKCFzdmMpIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlZC4lZC4lZFxuIiwKIAkJCSAgIGNsaXBfdmNjLT52Y2MtPmRldi0+bnVtYmVyLAotCQkJICAgY2xpcF92Y2MtPnZjYy0+dnBpLAotCQkJICAgY2xpcF92Y2MtPnZjYy0+dmNpKTsKKwkJCSAgIGNsaXBfdmNjLT52Y2MtPnZwaSwgY2xpcF92Y2MtPnZjYy0+dmNpKTsKIAl9IGVsc2UgewogCQlzdmNfYWRkcihzZXEsICZjbGlwX3ZjYy0+dmNjLT5yZW1vdGUpOwogCQlzZXFfcHV0YyhzZXEsICdcbicpOwpAQCAtODk0LDcgKzg2OCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpjbGlwX3NlcV92Y2Nfd2FsayhzdHJ1Y3QgY2xpcF9zZXFfc3RhdGUgKnN0YXRlLAotCQkJICAgICAgIHN0cnVjdCBhdG1hcnBfZW50cnkgKmUsIGxvZmZfdCAqcG9zKQorCQkJICAgICAgIHN0cnVjdCBhdG1hcnBfZW50cnkgKmUsIGxvZmZfdCAqIHBvcykKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKnZjYyA9IHN0YXRlLT52Y2M7CiAKQEAgLTkxMSwyNCArODg1LDI0IEBACiAKIAlyZXR1cm4gdmNjOwogfQotICAKKwogc3RhdGljIHZvaWQgKmNsaXBfc2VxX3N1Yl9pdGVyKHN0cnVjdCBuZWlnaF9zZXFfc3RhdGUgKl9zdGF0ZSwKLQkJCSAgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuLCBsb2ZmX3QgKnBvcykKKwkJCSAgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuLCBsb2ZmX3QgKiBwb3MpCiB7Ci0Jc3RydWN0IGNsaXBfc2VxX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgY2xpcF9zZXFfc3RhdGUgKikgX3N0YXRlOworCXN0cnVjdCBjbGlwX3NlcV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGNsaXBfc2VxX3N0YXRlICopX3N0YXRlOwogCiAJcmV0dXJuIGNsaXBfc2VxX3ZjY193YWxrKHN0YXRlLCBORUlHSDJFTlRSWShuKSwgcG9zKTsKIH0KIAotc3RhdGljIHZvaWQgKmNsaXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3N0YXRpYyB2b2lkICpjbGlwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICogcG9zKQogewogCXJldHVybiBuZWlnaF9zZXFfc3RhcnQoc2VxLCBwb3MsICZjbGlwX3RibCwgTkVJR0hfU0VRX05FSUdIX09OTFkpOwogfQogCiBzdGF0aWMgaW50IGNsaXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNoYXIgYXRtX2FycF9iYW5uZXJbXSA9IAotCQkiSVBpdGYgVHlwZUVuY3AgSWRsZSBJUCBhZGRyZXNzICAgICAgQVRNIGFkZHJlc3NcbiI7CisJc3RhdGljIGNoYXIgYXRtX2FycF9iYW5uZXJbXSA9CisJICAgICJJUGl0ZiBUeXBlRW5jcCBJZGxlIElQIGFkZHJlc3MgICAgICBBVE0gYWRkcmVzc1xuIjsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzZXEsIGF0bV9hcnBfYmFubmVyKTsKQEAgLTkzOSw3ICs5MTMsNyBAQAogCiAJCWF0bWFycF9pbmZvKHNlcSwgbi0+ZGV2LCBORUlHSDJFTlRSWShuKSwgdmNjKTsKIAl9Ci0gIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhcnBfc2VxX29wcyA9IHsKQEAgLTk4OCwyMCArOTYyLDE5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bV9jbGlwX2luaXQodm9pZCkKIHsKLQluZWlnaF90YWJsZV9pbml0KCZjbGlwX3RibCk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOworCW5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluaygmY2xpcF90YmwpOwogCiAJY2xpcF90YmxfaG9vayA9ICZjbGlwX3RibDsKIAlyZWdpc3Rlcl9hdG1faW9jdGwoJmNsaXBfaW9jdGxfb3BzKTsKKwlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmNsaXBfZGV2X25vdGlmaWVyKTsKKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmY2xpcF9pbmV0X25vdGlmaWVyKTsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOworCXNldHVwX3RpbWVyKCZpZGxlX3RpbWVyLCBpZGxlX3RpbWVyX2NoZWNrLCAwKTsKIAogCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXJwIiwgU19JUlVHTywgYXRtX3Byb2Nfcm9vdCk7CiAJaWYgKHApCiAJCXAtPnByb2NfZm9wcyA9ICZhcnBfc2VxX2ZvcHM7Ci19Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpAQCAtMTAxMiwxMyArOTg1LDE1IEBACiAKIAlyZW1vdmVfcHJvY19lbnRyeSgiYXJwIiwgYXRtX3Byb2Nfcm9vdCk7CiAKKwl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcik7CisKIAlkZXJlZ2lzdGVyX2F0bV9pb2N0bCgmY2xpcF9pb2N0bF9vcHMpOwogCiAJLyogRmlyc3QsIHN0b3AgdGhlIGlkbGUgdGltZXIsIHNvIGl0IHN0b3BzIGJhbmdpbmcKIAkgKiBvbiB0aGUgdGFibGUuCiAJICovCi0JaWYgKHN0YXJ0X3RpbWVyID09IDApCi0JCWRlbF90aW1lcigmaWRsZV90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmlkbGVfdGltZXIpOwogCiAJLyogTmV4dCwgcHVyZ2UgdGhlIHRhYmxlLCBzbyB0aGF0IHRoZSBkZXZpY2UKIAkgKiB1bnJlZ2lzdGVyIGxvb3AgYmVsb3cgZG9lcyBub3QgaGFuZyBkdWUgdG8KQEAgLTEwNDIsNSArMTAxNyw2IEBACiAKIG1vZHVsZV9pbml0KGF0bV9jbGlwX2luaXQpOwogbW9kdWxlX2V4aXQoYXRtX2NsaXBfZXhpdCk7Ci0KK01PRFVMRV9BVVRIT1IoIldlcm5lciBBbG1lc2JlcmdlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDbGFzc2ljYWwvSVAgb3ZlciBBVE0gaW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggZGJmOWI0Ny4uYTJlMGRkMCAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMjI4LDYgKzIyOCw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9maW5kX2NiKTsKKwogdm9pZCBheDI1X3NlbmRfdG9fcmF3KGF4MjVfYWRkcmVzcyAqYWRkciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKQogewogCWF4MjVfY2IgKnM7CkBAIC00MjQsNiArNDI2LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF4MjVfZmlsbGluX2NiX2Zyb21fZGV2KGF4MjVfY2IgKmF4MjUsIGF4MjVfZGV2ICpheDI1X2RldikKK3sKKwlheDI1LT5ydHQgICAgID0gbXNlY3NfdG9famlmZmllcyhheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1QxXSkgLyAyOworCWF4MjUtPnQxICAgICAgPSBtc2Vjc190b19qaWZmaWVzKGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfVDFdKTsKKwlheDI1LT50MiAgICAgID0gbXNlY3NfdG9famlmZmllcyhheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1QyXSk7CisJYXgyNS0+dDMgICAgICA9IG1zZWNzX3RvX2ppZmZpZXMoYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19UM10pOworCWF4MjUtPm4yICAgICAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX04yXTsKKwlheDI1LT5wYWNsZW4gID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19QQUNMRU5dOworCWF4MjUtPmlkbGUgICAgPSBtc2Vjc190b19qaWZmaWVzKGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfSURMRV0pOworCWF4MjUtPmJhY2tvZmYgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0JBQ0tPRkZdOworCisJaWYgKGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfQVhERUZNT0RFXSkgeworCQlheDI1LT5tb2R1bHVzID0gQVgyNV9FTU9EVUxVUzsKKwkJYXgyNS0+d2luZG93ICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfRVdJTkRPV107CisJfSBlbHNlIHsKKwkJYXgyNS0+bW9kdWx1cyA9IEFYMjVfTU9EVUxVUzsKKwkJYXgyNS0+d2luZG93ICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfV0lORE9XXTsKKwl9Cit9CisKIC8qCiAgKglGaWxsIGluIGEgY3JlYXRlZCBBWC4yNSBjcmVhdGVkIGNvbnRyb2wgYmxvY2sgd2l0aCB0aGUgZGVmYXVsdAogICoJdmFsdWVzIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlLgpAQCAtNDMzLDM5ICs0NTUsMjggQEAKIAlheDI1LT5heDI1X2RldiA9IGF4MjVfZGV2OwogCiAJaWYgKGF4MjUtPmF4MjVfZGV2ICE9IE5VTEwpIHsKLQkJYXgyNS0+cnR0ICAgICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfVDFdIC8gMjsKLQkJYXgyNS0+dDEgICAgICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfVDFdOwotCQlheDI1LT50MiAgICAgID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19UMl07Ci0JCWF4MjUtPnQzICAgICAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1QzXTsKLQkJYXgyNS0+bjIgICAgICA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfTjJdOwotCQlheDI1LT5wYWNsZW4gID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19QQUNMRU5dOwotCQlheDI1LT5pZGxlICAgID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19JRExFXTsKLQkJYXgyNS0+YmFja29mZiA9IGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfQkFDS09GRl07CisJCWF4MjVfZmlsbGluX2NiX2Zyb21fZGV2KGF4MjUsIGF4MjVfZGV2KTsKKwkJcmV0dXJuOworCX0KIAotCQlpZiAoYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19BWERFRk1PREVdKSB7Ci0JCQlheDI1LT5tb2R1bHVzID0gQVgyNV9FTU9EVUxVUzsKLQkJCWF4MjUtPndpbmRvdyAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0VXSU5ET1ddOwotCQl9IGVsc2UgewotCQkJYXgyNS0+bW9kdWx1cyA9IEFYMjVfTU9EVUxVUzsKLQkJCWF4MjUtPndpbmRvdyAgPSBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1dJTkRPV107Ci0JCX0KKwkvKgorCSAqIE5vIGRldmljZSwgdXNlIGtlcm5lbCAvIEFYLjI1IHNwZWMgZGVmYXVsdCB2YWx1ZXMKKwkgKi8KKwlheDI1LT5ydHQgICAgID0gbXNlY3NfdG9famlmZmllcyhBWDI1X0RFRl9UMSkgLyAyOworCWF4MjUtPnQxICAgICAgPSBtc2Vjc190b19qaWZmaWVzKEFYMjVfREVGX1QxKTsKKwlheDI1LT50MiAgICAgID0gbXNlY3NfdG9famlmZmllcyhBWDI1X0RFRl9UMik7CisJYXgyNS0+dDMgICAgICA9IG1zZWNzX3RvX2ppZmZpZXMoQVgyNV9ERUZfVDMpOworCWF4MjUtPm4yICAgICAgPSBBWDI1X0RFRl9OMjsKKwlheDI1LT5wYWNsZW4gID0gQVgyNV9ERUZfUEFDTEVOOworCWF4MjUtPmlkbGUgICAgPSBtc2Vjc190b19qaWZmaWVzKEFYMjVfREVGX0lETEUpOworCWF4MjUtPmJhY2tvZmYgPSBBWDI1X0RFRl9CQUNLT0ZGOworCisJaWYgKEFYMjVfREVGX0FYREVGTU9ERSkgeworCQlheDI1LT5tb2R1bHVzID0gQVgyNV9FTU9EVUxVUzsKKwkJYXgyNS0+d2luZG93ICA9IEFYMjVfREVGX0VXSU5ET1c7CiAJfSBlbHNlIHsKLQkJYXgyNS0+cnR0ICAgICA9IEFYMjVfREVGX1QxIC8gMjsKLQkJYXgyNS0+dDEgICAgICA9IEFYMjVfREVGX1QxOwotCQlheDI1LT50MiAgICAgID0gQVgyNV9ERUZfVDI7Ci0JCWF4MjUtPnQzICAgICAgPSBBWDI1X0RFRl9UMzsKLQkJYXgyNS0+bjIgICAgICA9IEFYMjVfREVGX04yOwotCQlheDI1LT5wYWNsZW4gID0gQVgyNV9ERUZfUEFDTEVOOwotCQlheDI1LT5pZGxlICAgID0gQVgyNV9ERUZfSURMRTsKLQkJYXgyNS0+YmFja29mZiA9IEFYMjVfREVGX0JBQ0tPRkY7Ci0KLQkJaWYgKEFYMjVfREVGX0FYREVGTU9ERSkgewotCQkJYXgyNS0+bW9kdWx1cyA9IEFYMjVfRU1PRFVMVVM7Ci0JCQlheDI1LT53aW5kb3cgID0gQVgyNV9ERUZfRVdJTkRPVzsKLQkJfSBlbHNlIHsKLQkJCWF4MjUtPm1vZHVsdXMgPSBBWDI1X01PRFVMVVM7Ci0JCQlheDI1LT53aW5kb3cgID0gQVgyNV9ERUZfV0lORE9XOwotCQl9CisJCWF4MjUtPm1vZHVsdXMgPSBBWDI1X01PRFVMVVM7CisJCWF4MjUtPndpbmRvdyAgPSBBWDI1X0RFRl9XSU5ET1c7CiAJfQogfQogCkBAIC0xOTc5LDI0ICsxOTkwLDYgQEAKIAkubm90aWZpZXJfY2FsbCA9YXgyNV9kZXZpY2VfZXZlbnQsCiB9OwogCi1FWFBPUlRfU1lNQk9MKGF4MjVfaGFyZF9oZWFkZXIpOwotRVhQT1JUX1NZTUJPTChheDI1X3JlYnVpbGRfaGVhZGVyKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9maW5kYnl1aWQpOwotRVhQT1JUX1NZTUJPTChheDI1X2ZpbmRfY2IpOwotRVhQT1JUX1NZTUJPTChheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9saW5rZmFpbF9yZWxlYXNlKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9saXN0ZW5fcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChheDI1X2xpc3Rlbl9yZWxlYXNlKTsKLUVYUE9SVF9TWU1CT0woYXgyNV9wcm90b2NvbF9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfcHJvdG9jb2xfcmVsZWFzZSk7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfc2VuZF9mcmFtZSk7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfdWlkX3BvbGljeSk7Ci1FWFBPUlRfU1lNQk9MKGF4MjVjbXApOwotRVhQT1JUX1NZTUJPTChheDJhc2MpOwotRVhQT1JUX1NZTUJPTChhc2MyYXgpOwotRVhQT1JUX1NZTUJPTChudWxsX2F4MjVfYWRkcmVzcyk7Ci1FWFBPUlRfU1lNQk9MKGF4MjVfZGlzcGxheV90aW1lcik7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGF4MjVfaW5pdCh2b2lkKQogewogCWludCByYyA9IHByb3RvX3JlZ2lzdGVyKCZheDI1X3Byb3RvLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfYWRkci5jIGIvbmV0L2F4MjUvYXgyNV9hZGRyLmMKaW5kZXggMDE2NGExNS4uNWYwODk2YSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9hZGRyLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9hZGRyLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTMzLDYgKzM0LDggQEAKICAqLwogYXgyNV9hZGRyZXNzIG51bGxfYXgyNV9hZGRyZXNzID0ge3sweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDAwfX07CiAKK0VYUE9SVF9TWU1CT0wobnVsbF9heDI1X2FkZHJlc3MpOworCiAvKgogICoJYXgyNSAtPiBhc2NpaSBjb252ZXJzaW9uCiAgKi8KQEAgLTY0LDYgKzY3LDggQEAKIAogfQogCitFWFBPUlRfU1lNQk9MKGF4MmFzYyk7CisKIC8qCiAgKglhc2NpaSAtPiBheDI1IGNvbnZlcnNpb24KICAqLwpAQCAtOTcsNiArMTAyLDggQEAKIAlhZGRyLT5heDI1X2NhbGxbNl0gJj0gMHgxRTsKIH0KIAorRVhQT1JUX1NZTUJPTChhc2MyYXgpOworCiAvKgogICoJQ29tcGFyZSB0d28gYXguMjUgYWRkcmVzc2VzCiAgKi8KQEAgLTExNiw2ICsxMjMsOCBAQAogIAlyZXR1cm4gMjsJCQkvKiBQYXJ0aWFsIG1hdGNoICovCiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNWNtcCk7CisKIC8qCiAgKglDb21wYXJlIHR3byBBWC4yNSBkaWdpcGVhdGVyIHBhdGhzLgogICovCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2RzX3RpbWVyLmMgYi9uZXQvYXgyNS9heDI1X2RzX3RpbWVyLmMKaW5kZXggMDYxMDgzZS4uNTk2MTQ1OSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9kc190aW1lci5jCisrKyBiL25ldC9heDI1L2F4MjVfZHNfdGltZXIuYwpAQCAtNjEsNyArNjEsOCBAQAogCQlyZXR1cm47CiAKIAlkZWxfdGltZXIoJmF4MjVfZGV2LT5kYW1hLnNsYXZlX3RpbWVyKTsKLQlheDI1X2Rldi0+ZGFtYS5zbGF2ZV90aW1lb3V0ID0gYXgyNV9kZXYtPnZhbHVlc1tBWDI1X1ZBTFVFU19EU19USU1FT1VUXSAvIDEwOworCWF4MjVfZGV2LT5kYW1hLnNsYXZlX3RpbWVvdXQgPQorCQltc2Vjc190b19qaWZmaWVzKGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfRFNfVElNRU9VVF0pIC8gMTA7CiAJYXgyNV9kc19hZGRfdGltZXIoYXgyNV9kZXYpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKaW5kZXggZDY4YWZmMS4uM2JiMTUyNyAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCisrKyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC03NCw2ICs3NSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9wcm90b2NvbF9yZWdpc3Rlcik7CisKIHZvaWQgYXgyNV9wcm90b2NvbF9yZWxlYXNlKHVuc2lnbmVkIGludCBwaWQpCiB7CiAJc3RydWN0IHByb3RvY29sX3N0cnVjdCAqcywgKnByb3RvY29sOwpAQCAtMTA2LDYgKzEwOSw4IEBACiAJd3JpdGVfdW5sb2NrKCZwcm90b2NvbF9saXN0X2xvY2spOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfcHJvdG9jb2xfcmVsZWFzZSk7CisKIGludCBheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKHZvaWQgKCpmdW5jKShheDI1X2NiICosIGludCkpCiB7CiAJc3RydWN0IGxpbmtmYWlsX3N0cnVjdCAqbGlua2ZhaWw7CkBAIC0xMjMsNiArMTI4LDggQEAKIAlyZXR1cm4gMTsKIH0KIAorRVhQT1JUX1NZTUJPTChheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKTsKKwogdm9pZCBheDI1X2xpbmtmYWlsX3JlbGVhc2Uodm9pZCAoKmZ1bmMpKGF4MjVfY2IgKiwgaW50KSkKIHsKIAlzdHJ1Y3QgbGlua2ZhaWxfc3RydWN0ICpzLCAqbGlua2ZhaWw7CkBAIC0xNTUsNiArMTYyLDggQEAKIAlzcGluX3VubG9ja19iaCgmbGlua2ZhaWxfbG9jayk7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9saW5rZmFpbF9yZWxlYXNlKTsKKwogaW50IGF4MjVfbGlzdGVuX3JlZ2lzdGVyKGF4MjVfYWRkcmVzcyAqY2FsbHNpZ24sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxpc3Rlbl9zdHJ1Y3QgKmxpc3RlbjsKQEAgLTE3Niw2ICsxODUsOCBAQAogCXJldHVybiAxOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfbGlzdGVuX3JlZ2lzdGVyKTsKKwogdm9pZCBheDI1X2xpc3Rlbl9yZWxlYXNlKGF4MjVfYWRkcmVzcyAqY2FsbHNpZ24sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxpc3Rlbl9zdHJ1Y3QgKnMsICpsaXN0ZW47CkBAIC0yMDgsNiArMjE5LDggQEAKIAlzcGluX3VubG9ja19iaCgmbGlzdGVuX2xvY2spOwogfQogCitFWFBPUlRfU1lNQk9MKGF4MjVfbGlzdGVuX3JlbGVhc2UpOworCiBpbnQgKCpheDI1X3Byb3RvY29sX2Z1bmN0aW9uKHVuc2lnbmVkIGludCBwaWQpKShzdHJ1Y3Qgc2tfYnVmZiAqLCBheDI1X2NiICopCiB7CiAJaW50ICgqcmVzKShzdHJ1Y3Qgc2tfYnVmZiAqLCBheDI1X2NiICopID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfaXAuYyBiL25ldC9heDI1L2F4MjVfaXAuYwppbmRleCBkNjQzZGFjLi5hMGI1MzRmIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X2lwLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9pcC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0yMjEsMyArMjIyLDUgQEAKIAogI2VuZGlmCiAKK0VYUE9SVF9TWU1CT0woYXgyNV9oYXJkX2hlYWRlcik7CitFWFBPUlRfU1lNQk9MKGF4MjVfcmVidWlsZF9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9vdXQuYyBiL25ldC9heDI1L2F4MjVfb3V0LmMKaW5kZXggNWZjMDQ4ZC4uNWQ5OTg1MiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9vdXQuYworKysgYi9uZXQvYXgyNS9heDI1X291dC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xMDQsNiArMTA1LDggQEAKIAlyZXR1cm4gYXgyNTsJCQkvKiBXZSBoYWQgdG8gY3JlYXRlIGl0ICovCiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9zZW5kX2ZyYW1lKTsKKwogLyoKICAqCUFsbCBvdXRnb2luZyBBWC4yNSBJIGZyYW1lcyBwYXNzIHZpYSB0aGlzIHJvdXRpbmUuIFRoZXJlZm9yZSB0aGlzIGlzCiAgKgl3aGVyZSB0aGUgZnJhZ21lbnRhdGlvbiBvZiBmcmFtZXMgdGFrZXMgcGxhY2UuIElmIGZyYWdtZW50IGlzIHNldCB0bwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jIGIvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jCmluZGV4IGYwNGY4NjMuLjVhYzk4MjUgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfcm91dGUuYworKysgYi9uZXQvYXgyNS9heDI1X3JvdXRlLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogLyoKICAqCUZpbmQgQVguMjUgcm91dGUKICAqCi0gKglPbmx5IHJvdXRlcyB3aXRoIGEgcmVmZXJuY2Ugcm91dCBvZiB6ZXJvIGNhbiBiZSBkZXN0cm95ZWQuCisgKglPbmx5IHJvdXRlcyB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IG9mIHplcm8gY2FuIGJlIGRlc3Ryb3llZC4KICAqLwogc3RhdGljIGF4MjVfcm91dGUgKmF4MjVfZ2V0X3JvdXRlKGF4MjVfYWRkcmVzcyAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfdGltZXIuYyBiL25ldC9heDI1L2F4MjVfdGltZXIuYwppbmRleCA3YTZiNTBhLi5lYzI1NDA1IDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X3RpbWVyLmMKKysrIGIvbmV0L2F4MjUvYXgyNV90aW1lci5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTEzNyw2ICsxMzgsOCBAQAogCXJldHVybiB0aW1lci0+ZXhwaXJlcyAtIGppZmZpZXM7CiB9CiAKK0VYUE9SVF9TWU1CT0woYXgyNV9kaXNwbGF5X3RpbWVyKTsKKwogc3RhdGljIHZvaWQgYXgyNV9oZWFydGJlYXRfZXhwaXJ5KHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7CiAJaW50IHByb3RvID0gQVgyNV9QUk9UT19TVERfU0lNUExFWDsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfdWlkLmMgYi9uZXQvYXgyNS9heDI1X3VpZC5jCmluZGV4IGI4YjU4NTQuLjVlOWE4MWUgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfdWlkLmMKKysrIGIvbmV0L2F4MjUvYXgyNV91aWQuYwpAQCAtNDksNiArNDksOCBAQAogCiBpbnQgYXgyNV91aWRfcG9saWN5ID0gMDsKIAorRVhQT1JUX1NZTUJPTChheDI1X3VpZF9wb2xpY3kpOworCiBheDI1X3VpZF9hc3NvYyAqYXgyNV9maW5kYnl1aWQodWlkX3QgdWlkKQogewogCWF4MjVfdWlkX2Fzc29jICpheDI1X3VpZCwgKnJlcyA9IE5VTEw7CkBAIC02Nyw2ICs2OSw4IEBACiAJcmV0dXJuIHJlczsKIH0KIAorRVhQT1JUX1NZTUJPTChheDI1X2ZpbmRieXVpZCk7CisKIGludCBheDI1X3VpZF9pb2N0bChpbnQgY21kLCBzdHJ1Y3Qgc29ja2FkZHJfYXgyNSAqc2F4KQogewogCWF4MjVfdWlkX2Fzc29jICpheDI1X3VpZDsKZGlmZiAtLWdpdCBhL25ldC9heDI1L3N5c2N0bF9uZXRfYXgyNS5jIGIvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMKaW5kZXggODk0YTIyNS4uYmRiNjRjMyAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMKKysrIGIvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMKQEAgLTE4LDE0ICsxOCwxNCBAQAogc3RhdGljIGludCBtaW5fY29ubW9kZVsxXSwJCW1heF9jb25tb2RlW10gPSB7Mn07CiBzdGF0aWMgaW50IG1pbl93aW5kb3dbXSA9IHsxfSwJCW1heF93aW5kb3dbXSA9IHs3fTsKIHN0YXRpYyBpbnQgbWluX2V3aW5kb3dbXSA9IHsxfSwJCW1heF9ld2luZG93W10gPSB7NjN9Owotc3RhdGljIGludCBtaW5fdDFbXSA9IHsxfSwJCW1heF90MVtdID0gezMwICogSFp9Owotc3RhdGljIGludCBtaW5fdDJbXSA9IHsxfSwJCW1heF90MltdID0gezIwICogSFp9Owotc3RhdGljIGludCBtaW5fdDNbMV0sICAgCQltYXhfdDNbXSA9IHszNjAwICogSFp9Owotc3RhdGljIGludCBtaW5faWRsZVsxXSwgIAkJbWF4X2lkbGVbXSA9IHs2NTUzNSAqIEhafTsKK3N0YXRpYyBpbnQgbWluX3QxW10gPSB7MX0sCQltYXhfdDFbXSA9IHszMDAwMH07CitzdGF0aWMgaW50IG1pbl90MltdID0gezF9LAkJbWF4X3QyW10gPSB7MjAwMDB9Oworc3RhdGljIGludCBtaW5fdDNbMV0sCQkJbWF4X3QzW10gPSB7MzYwMDAwMH07CitzdGF0aWMgaW50IG1pbl9pZGxlWzFdLAkJCW1heF9pZGxlW10gPSB7NjU1MzUwMDB9Owogc3RhdGljIGludCBtaW5fbjJbXSA9IHsxfSwJCW1heF9uMltdID0gezMxfTsKIHN0YXRpYyBpbnQgbWluX3BhY2xlbltdID0gezF9LAkJbWF4X3BhY2xlbltdID0gezUxMn07CiBzdGF0aWMgaW50IG1pbl9wcm90b1sxXSwJCW1heF9wcm90b1tdID0geyBBWDI1X1BST1RPX01BWCB9Owotc3RhdGljIGludCBtaW5fZHNfdGltZW91dFsxXSwgICAJbWF4X2RzX3RpbWVvdXRbXSA9IHs2NTUzNSAqIEhafTsKK3N0YXRpYyBpbnQgbWluX2RzX3RpbWVvdXRbMV0sCQltYXhfZHNfdGltZW91dFtdID0gezY1NTM1MDAwfTsKIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpheDI1X3RhYmxlX2hlYWRlcjsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggNmI2MTMyMy4uMGMyZDEzYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAl9CiAKIAlpZiAoKGVyciA9IGhjaV9zZW5kX3Njbyhjb25uLT5oY29uLCBza2IpKSA8IDApCi0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIGVycjsKIAogCXJldHVybiBjb3VudDsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IDIyZDgwNmMuLjEyZGEyMWEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGJyX2RlaW5pdCh2b2lkKQogewotCWxsY19zYXBfY2xvc2UoYnJfc3RwX3NhcCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGJyX3N0cF9zYXAtPnJjdl9mdW5jLCBOVUxMKTsKIAogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJYnJfbmV0ZmlsdGVyX2ZpbmkoKTsKQEAgLTY3LDYgKzY3LDcgQEAKIAogCXN5bmNocm9uaXplX25ldCgpOwogCisJbGxjX3NhcF9wdXQoYnJfc3RwX3NhcCk7CiAJYnJfZmRiX2dldF9ob29rID0gTlVMTDsKIAlicl9mZGJfcHV0X2hvb2sgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IDJkMjRmYjQuLjU2ZjNhYTQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKQEAgLTI5LDEwICszMCwxNSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBhY2tldF9sZW5ndGgoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5sZW4gLSAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkgPyBWTEFOX0hMRU4gOiAwKTsKK30KKwogaW50IGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBkcm9wIG10dSBvdmVyc2l6ZWQgcGFja2V0cyBleGNlcHQgdHNvICovCi0JaWYgKHNrYi0+bGVuID4gc2tiLT5kZXYtPm10dSAmJiAhc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkKKwlpZiAocGFja2V0X2xlbmd0aChza2IpID4gc2tiLT5kZXYtPm10dSAmJiAhc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkKIAkJa2ZyZWVfc2tiKHNrYik7CiAJZWxzZSB7CiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCA1OWVlZjQyLi5mNWQ0N2JmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zMDAsMzQgKzMwMCwyMiBAQAogCXJ0bmxfbG9jaygpOwogCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7CiAJCXJldCA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjE7CisJCWlmIChyZXQgPCAwKSB7CisJCQlmcmVlX25ldGRldihkZXYpOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0KLQkvKiBuZXR3b3JrIGRldmljZSBrb2JqZWN0IGlzIG5vdCBzZXR1cCB1bnRpbAotCSAqIGFmdGVyIHJ0bmxfdW5sb2NrIGRvZXMgaXQncyBob3RwbHVnIG1hZ2ljLgotCSAqIHNvIGhvbGQgcmVmZXJlbmNlIHRvIGF2b2lkIHJhY2UuCi0JICovCi0JZGV2X2hvbGQoZGV2KTsKLQlydG5sX3VubG9jaygpOworCQlnb3RvIG91dDsKIAogCXJldCA9IGJyX3N5c2ZzX2FkZGJyKGRldik7Ci0JZGV2X3B1dChkZXYpOwotCi0JaWYgKHJldCkgCi0JCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKHJldCkKKwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKICBvdXQ6Ci0JcmV0dXJuIHJldDsKLQotIGVycjI6Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLSBlcnIxOgogCXJ0bmxfdW5sb2NrKCk7Ci0JZ290byBvdXQ7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGJyX2RlbF9icmlkZ2UoY29uc3QgY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCBiNzc2NjU2Li5iZmE0ZDhjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC02Niw2ICs2Niw3IEBACiAJfQogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7CisJCWJyLT5zdGF0aXN0aWNzLm11bHRpY2FzdCsrOwogCQlicl9mbG9vZF9mb3J3YXJkKGJyLCBza2IsICFwYXNzZWR1cCk7CiAJCWlmICghcGFzc2VkdXApCiAJCQlicl9wYXNzX2ZyYW1lX3VwKGJyLCBza2IpOwpAQCAtMTI1LDkgKzEyNiw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktPmhfZGVzdDsKIAotCWlmIChwLT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkKLQkJZ290byBlcnI7Ci0KIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX3NvdXJjZSkpCiAJCWdvdG8gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCBmMjk0NTBiLi4zZGE5MjY0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTc2NSw2ICs3NjUsMTUgQEAKIAlyZXR1cm4gTkZfU1RPTEVOOwogfQogCitzdGF0aWMgaW50IGJyX25mX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApICYmCisJICAgIHNrYi0+bGVuID4gc2tiLT5kZXYtPm10dSAmJgorCSAgICAhKHNrYl9zaGluZm8oc2tiKS0+dWZvX3NpemUgfHwgc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkpCisJCXJldHVybiBpcF9mcmFnbWVudChza2IsIGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpOworCWVsc2UKKwkJcmV0dXJuIGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQoc2tiKTsKK30KIAogLyogUEZfQlJJREdFL1BPU1RfUk9VVElORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCkBAIC04MjQsNyArODMzLDcgQEAKIAkJcmVhbG91dGRldiA9IG5mX2JyaWRnZS0+bmV0b3V0ZGV2OwogI2VuZGlmCiAJTkZfSE9PSyhwZiwgTkZfSVBfUE9TVF9ST1VUSU5HLCBza2IsIE5VTEwsIHJlYWxvdXRkZXYsCi0JCWJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpOworCQlicl9uZl9kZXZfcXVldWVfeG1pdCk7CiAKIAlyZXR1cm4gTkZfU1RPTEVOOwogCkBAIC04NjksNyArODc4LDcgQEAKIAogCWlmICgob3V0LT5oYXJkX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQgJiYKIAkgICAgIG9rZm4gIT0gYnJfbmZfZm9yd2FyZF9maW5pc2ggJiYKLQkgICAgIG9rZm4gIT0gYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCAmJiBva2ZuICE9IGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpCisJICAgICBva2ZuICE9IGJyX25mX2xvY2FsX291dF9maW5pc2ggJiYgb2tmbiAhPSBicl9uZl9kZXZfcXVldWVfeG1pdCkKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKIAkgICAgfHwgKChvdXQtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pICYmCiAJCVZMQU5fREVWX0lORk8ob3V0KS0+cmVhbF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBicl9kZXZfeG1pdCkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBkMTU5YzkyLi40NjZlZDM0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCWlmIChpbmZvLT5iaXRtYXNrICYgRUJUX0xPR19ORkxPRykKIAkJbmZfbG9nX3BhY2tldChQRl9CUklER0UsIGhvb2tuciwgc2tiLCBpbiwgb3V0LCAmbGksCi0JCSAgICAgICAgICAgICAgaW5mby0+cHJlZml4KTsKKwkJICAgICAgICAgICAgICAiJXMiLCBpbmZvLT5wcmVmaXgpOwogCWVsc2UKIAkJZWJ0X2xvZ19wYWNrZXQoUEZfQlJJREdFLCBob29rbnIsIHNrYiwgaW4sIG91dCwgJmxpLAogCQkgICAgICAgICAgICAgICBpbmZvLT5wcmVmaXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggMDFlYWU5Ny4uM2ExM2VkNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC04MjQsMTQgKzgyNCwxNCBAQAogCWlmICh1ZGNfY250KSB7CiAJCS8qIHRoaXMgd2lsbCBnZXQgZnJlZSdkIGluIGRvX3JlcGxhY2UoKS9lYnRfcmVnaXN0ZXJfdGFibGUoKQogCQkgICBpZiBhbiBlcnJvciBvY2N1cnMgKi8KLQkJbmV3aW5mby0+Y2hhaW5zdGFjayA9IChzdHJ1Y3QgZWJ0X2NoYWluc3RhY2sgKiopCi0JCSAgIHZtYWxsb2MoKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSkgCi0JCQkJICAgCQkqIHNpemVvZihzdHJ1Y3QgZWJ0X2NoYWluc3RhY2spKTsKKwkJbmV3aW5mby0+Y2hhaW5zdGFjayA9CisJCQl2bWFsbG9jKChoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpCisJCQkJICAgCSogc2l6ZW9mKCoobmV3aW5mby0+Y2hhaW5zdGFjaykpKTsKIAkJaWYgKCFuZXdpbmZvLT5jaGFpbnN0YWNrKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWZvcl9lYWNoX2NwdShpKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCQluZXdpbmZvLT5jaGFpbnN0YWNrW2ldID0KLQkJCSAgIHZtYWxsb2ModWRjX2NudCAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NoYWluc3RhY2spKTsKKwkJCSAgdm1hbGxvYyh1ZGNfY250ICogc2l6ZW9mKCoobmV3aW5mby0+Y2hhaW5zdGFja1swXSkpKTsKIAkJCWlmICghbmV3aW5mby0+Y2hhaW5zdGFja1tpXSkgewogCQkJCXdoaWxlIChpKQogCQkJCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrWy0taV0pOwpAQCAtODQxLDggKzg0MSw3IEBACiAJCQl9CiAJCX0KIAotCQljbF9zID0gKHN0cnVjdCBlYnRfY2xfc3RhY2sgKikKLQkJICAgdm1hbGxvYyh1ZGNfY250ICogc2l6ZW9mKHN0cnVjdCBlYnRfY2xfc3RhY2spKTsKKwkJY2xfcyA9IHZtYWxsb2ModWRjX2NudCAqIHNpemVvZigqY2xfcykpOwogCQlpZiAoIWNsX3MpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJaSA9IDA7IC8qIHRoZSBpJ3RoIHVkYyAqLwpAQCAtOTAxLDcgKzkwMCw3IEBACiAJICAgICAgIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpICogbmVudHJpZXMpOwogCiAJLyogYWRkIG90aGVyIGNvdW50ZXJzIHRvIHRob3NlIG9mIGNwdSAwICovCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSAwKQogCQkJY29udGludWU7CiAJCWNvdW50ZXJfYmFzZSA9IENPVU5URVJfQkFTRShvbGRjb3VudGVycywgbmVudHJpZXMsIGNwdSk7CkBAIC05NDQsOCArOTQzLDcgQEAKIAogCWNvdW50ZXJzaXplID0gQ09VTlRFUl9PRkZTRVQodG1wLm5lbnRyaWVzKSAqIAogCQkJCQkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKTsKLQluZXdpbmZvID0gKHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqKQotCSAgIHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykgKyBjb3VudGVyc2l6ZSk7CisJbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKCpuZXdpbmZvKSArIGNvdW50ZXJzaXplKTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC05NjcsOCArOTY1LDcgQEAKIAkvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrCiAJICAgdGhlIGNoZWNrIG9uIHRoZSBzaXplIGlzIGRvbmUgbGF0ZXIsIHdoZW4gd2UgaGF2ZSB0aGUgbG9jayAqLwogCWlmICh0bXAubnVtX2NvdW50ZXJzKSB7Ci0JCWNvdW50ZXJzdG1wID0gKHN0cnVjdCBlYnRfY291bnRlciAqKQotCQkgICB2bWFsbG9jKHRtcC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSk7CisJCWNvdW50ZXJzdG1wID0gdm1hbGxvYyh0bXAubnVtX2NvdW50ZXJzICogc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwogCQlpZiAoIWNvdW50ZXJzdG1wKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlX2VudHJpZXM7CkBAIC0xMDM2LDcgKzEwMzMsNyBAQAogCiAJdmZyZWUodGFibGUtPmVudHJpZXMpOwogCWlmICh0YWJsZS0+Y2hhaW5zdGFjaykgewotCQlmb3JfZWFjaF9jcHUoaSkKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKHRhYmxlLT5jaGFpbnN0YWNrKTsKIAl9CkBAIC0xMDU0LDcgKzEwNTEsNyBAQAogCXZmcmVlKGNvdW50ZXJzdG1wKTsKIAkvKiBjYW4gYmUgaW5pdGlhbGl6ZWQgaW4gdHJhbnNsYXRlX3RhYmxlKCkgKi8KIAlpZiAobmV3aW5mby0+Y2hhaW5zdGFjaykgewotCQlmb3JfZWFjaF9jcHUoaSkKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrW2ldKTsKIAkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTE0OCw4ICsxMTQ1LDcgQEAKIAogCWNvdW50ZXJzaXplID0gQ09VTlRFUl9PRkZTRVQodGFibGUtPnRhYmxlLT5uZW50cmllcykgKgogCQkJCQkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKTsKLQluZXdpbmZvID0gKHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqKQotCSAgIHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykgKyBjb3VudGVyc2l6ZSk7CisJbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKCpuZXdpbmZvKSArIGNvdW50ZXJzaXplKTsKIAlyZXQgPSAtRU5PTUVNOwogCWlmICghbmV3aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjAxLDcgKzExOTcsNyBAQAogCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIGZyZWVfY2hhaW5zdGFjazoKIAlpZiAobmV3aW5mby0+Y2hhaW5zdGFjaykgewotCQlmb3JfZWFjaF9jcHUoaSkKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQl2ZnJlZShuZXdpbmZvLT5jaGFpbnN0YWNrW2ldKTsKIAkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFjayk7CiAJfQpAQCAtMTIyNCw3ICsxMjIwLDcgQEAKIAltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJdmZyZWUodGFibGUtPnByaXZhdGUtPmVudHJpZXMpOwogCWlmICh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFjaykgewotCQlmb3JfZWFjaF9jcHUoaSkKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQl2ZnJlZSh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFja1tpXSk7CiAJCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5jaGFpbnN0YWNrKTsKIAl9CkBAIC0xMjQ3LDggKzEyNDMsNyBAQAogCWlmIChobHAubnVtX2NvdW50ZXJzID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCAhKHRtcCA9IChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikKLQkgICB2bWFsbG9jKGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkpICl7CisJaWYgKCEodG1wID0gdm1hbGxvYyhobHAubnVtX2NvdW50ZXJzICogc2l6ZW9mKCp0bXApKSkpIHsKIAkJTUVNUFJJTlQoIlVwZGF0ZV9jb3VudGVycyAmJiBub21lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTEzNzcsOCArMTM3Miw3IEBACiAJCQlCVUdQUklOVCgiTnVtX2NvdW50ZXJzIHdyb25nXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWNvdW50ZXJzdG1wID0gKHN0cnVjdCBlYnRfY291bnRlciAqKQotCQkgICB2bWFsbG9jKG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpOworCQljb3VudGVyc3RtcCA9IHZtYWxsb2MobmVudHJpZXMgKiBzaXplb2YoKmNvdW50ZXJzdG1wKSk7CiAJCWlmICghY291bnRlcnN0bXApIHsKIAkJCU1FTVBSSU5UKCJDb3VsZG4ndCBjb3B5IGNvdW50ZXJzLCBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2NvbXBhdC5jIGIvbmV0L2NvbXBhdC5jCmluZGV4IDhmZDM3Y2QuLmQ1ZDY5ZmEgMTAwNjQ0Ci0tLSBhL25ldC9jb21wYXQuYworKysgYi9uZXQvY29tcGF0LmMKQEAgLTQ3Niw4ICs0NzYsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCS8qIFNPX1NFVF9SRVBMQUNFIHNlZW1zIHRvIGJlIHRoZSBzYW1lIGluIGFsbCBsZXZlbHMgKi8KLQlpZiAob3B0bmFtZSA9PSBJUFRfU09fU0VUX1JFUExBQ0UpCisJaWYgKGxldmVsID09IFNPTF9JUFY2ICYmIG9wdG5hbWUgPT0gSVBUX1NPX1NFVF9SRVBMQUNFKQogCQlyZXR1cm4gZG9fbmV0ZmlsdGVyX3JlcGxhY2UoZmQsIGxldmVsLCBvcHRuYW1lLAogCQkJCQkgICAgb3B0dmFsLCBvcHRsZW4pOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDQzNDIyMGQuLjRmYmE1NDkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMjcsNyArMTI3LDcgQEAKICAqICAgICAgICAgICAgIHN1cmUgd2hpY2ggc2hvdWxkIGdvIGZpcnN0LCBidXQgSSBiZXQgaXQgd29uJ3QgbWFrZSBtdWNoCiAgKiAgICAgICAgICAgICBkaWZmZXJlbmNlIGlmIHdlIGFyZSBydW5uaW5nIFZMQU5zLiAgVGhlIGdvb2QgbmV3cyBpcyB0aGF0CiAgKiAgICAgICAgICAgICB0aGlzIHByb3RvY29sIHdvbid0IGJlIGluIHRoZSBsaXN0IHVubGVzcyBjb21waWxlZCBpbiwgc28KLSAqICAgICAgICAgICAgIHRoZSBhdmVyYWdlIHVzZXIgKHcvb3V0IFZMQU5zKSB3aWxsIG5vdCBiZSBhZHZlcnNseSBhZmZlY3RlZC4KKyAqICAgICAgICAgICAgIHRoZSBhdmVyYWdlIHVzZXIgKHcvb3V0IFZMQU5zKSB3aWxsIG5vdCBiZSBhZHZlcnNlbHkgYWZmZWN0ZWQuCiAgKiAgICAgICAgICAgICAtLUJMRwogICoKICAqCQkwODAwCUlQCkBAIC0xNDksNyArMTQ5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHB0eXBlX2FsbDsJCS8qIFRhcHMgKi8KIAogLyoKLSAqIFRoZSBAZGV2X2Jhc2UgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgQGRldl9iYXNlX2xvY2sgYW5kIHRoZSBydGxuCisgKiBUaGUgQGRldl9iYXNlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IEBkZXZfYmFzZV9sb2NrIGFuZCB0aGUgcnRubAogICogc2VtYXBob3JlLgogICoKICAqIFB1cmUgcmVhZGVycyBob2xkIGRldl9iYXNlX2xvY2sgZm9yIHJlYWRpbmcuCkBAIC0xOTMsNyArMTkzLDcgQEAKICAqCU91ciBub3RpZmllciBsaXN0CiAgKi8KIAotc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQobmV0ZGV2X2NoYWluKTsKK3N0YXRpYyBSQVdfTk9USUZJRVJfSEVBRChuZXRkZXZfY2hhaW4pOwogCiAvKgogICoJRGV2aWNlIGRyaXZlcnMgY2FsbCBvdXIgcm91dGluZXMgdG8gcXVldWUgcGFja2V0cyBoZXJlLiBXZSBlbXB0eSB0aGUKQEAgLTY0MSwxMCArNjQxLDEyIEBACiAgKglAbmFtZTogbmFtZSBmb3JtYXQgc3RyaW5nCiAgKgogICoJUGFzc2VkIGEgZm9ybWF0IHN0cmluZyAtIGVnICJsdCVkIiBpdCB3aWxsIHRyeSBhbmQgZmluZCBhIHN1aXRhYmxlCi0gKglpZC4gTm90IGVmZmljaWVudCBmb3IgbWFueSBkZXZpY2VzLCBub3QgY2FsbGVkIGEgbG90LiBUaGUgY2FsbGVyCi0gKgltdXN0IGhvbGQgdGhlIGRldl9iYXNlIG9yIHJ0bmwgbG9jayB3aGlsZSBhbGxvY2F0aW5nIHRoZSBuYW1lIGFuZAotICoJYWRkaW5nIHRoZSBkZXZpY2UgaW4gb3JkZXIgdG8gYXZvaWQgZHVwbGljYXRlcy4gUmV0dXJucyB0aGUgbnVtYmVyCi0gKglvZiB0aGUgdW5pdCBhc3NpZ25lZCBvciBhIG5lZ2F0aXZlIGVycm5vIGNvZGUuCisgKglpZC4gSXQgc2NhbnMgbGlzdCBvZiBkZXZpY2VzIHRvIGJ1aWxkIHVwIGEgZnJlZSBtYXAsIHRoZW4gY2hvb3NlcworICoJdGhlIGZpcnN0IGVtcHR5IHNsb3QuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBkZXZfYmFzZSBvciBydG5sIGxvY2sKKyAqCXdoaWxlIGFsbG9jYXRpbmcgdGhlIG5hbWUgYW5kIGFkZGluZyB0aGUgZGV2aWNlIGluIG9yZGVyIHRvIGF2b2lkCisgKglkdXBsaWNhdGVzLgorICoJTGltaXRlZCB0byBiaXRzX3Blcl9ieXRlICogcGFnZSBzaXplIGRldmljZXMgKGllIDMySyBvbiBtb3N0IHBsYXRmb3JtcykuCisgKglSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHVuaXQgYXNzaWduZWQgb3IgYSBuZWdhdGl2ZSBlcnJubyBjb2RlLgogICovCiAKIGludCBkZXZfYWxsb2NfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtNzM2LDcgKzczOCw3IEBACiAJaWYgKCFlcnIpIHsKIAkJaGxpc3RfZGVsKCZkZXYtPm5hbWVfaGxpc3QpOwogCQlobGlzdF9hZGRfaGVhZCgmZGV2LT5uYW1lX2hsaXN0LCBkZXZfbmFtZV9oYXNoKGRldi0+bmFtZSkpOwotCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCiAJCQkJTkVUREVWX0NIQU5HRU5BTUUsIGRldik7CiAJfQogCkBAIC03NDQsMTQgKzc0NiwxNCBAQAogfQogCiAvKioKLSAqCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UgLSBkZXZpY2UgY2hhbmdlcyBmYXR1cmVzCisgKgluZXRkZXZfZmVhdHVyZXNfY2hhbmdlIC0gZGV2aWNlIGNoYW5nZXMgZmVhdHVyZXMKICAqCUBkZXY6IGRldmljZSB0byBjYXVzZSBub3RpZmljYXRpb24KICAqCiAgKglDYWxsZWQgdG8gaW5kaWNhdGUgYSBkZXZpY2UgaGFzIGNoYW5nZWQgZmVhdHVyZXMuCiAgKi8KIHZvaWQgbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX0ZFQVRfQ0hBTkdFLCBkZXYpOworCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9GRUFUX0NIQU5HRSwgZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0wobmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZSk7CiAKQEAgLTc2Niw3ICs3NjgsNyBAQAogdm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAorCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAogCQkJCU5FVERFVl9DSEFOR0UsIGRldik7CiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCAwKTsKIAl9CkBAIC04NjQsNyArODY2LDcgQEAKIAkJLyoKIAkJICoJLi4uIGFuZCBhbm5vdW5jZSBuZXcgaW50ZXJmYWNlLgogCQkgKi8KLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfVVAsIGRldik7CisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9VUCwgZGV2KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTg4Nyw3ICs4ODksNyBAQAogCSAqCVRlbGwgcGVvcGxlIHdlIGFyZSBnb2luZyBkb3duLCBzbyB0aGF0IHRoZXkgY2FuCiAJICoJcHJlcGFyZSB0byBkZWF0aCwgd2hlbiBkZXZpY2UgaXMgc3RpbGwgb3BlcmF0aW5nLgogCSAqLwotCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX0dPSU5HX0RPV04sIGRldik7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX0dPSU5HX0RPV04sIGRldik7CiAKIAlkZXZfZGVhY3RpdmF0ZShkZXYpOwogCkBAIC05MjQsNyArOTI2LDcgQEAKIAkvKgogCSAqIFRlbGwgcGVvcGxlIHdlIGFyZSBkb3duCiAJICovCi0JYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfRE9XTiwgZGV2KTsKKwlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfRE9XTiwgZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtOTU1LDcgKzk1Nyw3IEBACiAJaW50IGVycjsKIAogCXJ0bmxfbG9jaygpOwotCWVyciA9IGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuZXRkZXZfY2hhaW4sIG5iKTsKKwllcnIgPSByYXdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5ldGRldl9jaGFpbiwgbmIpOwogCWlmICghZXJyKSB7CiAJCWZvciAoZGV2ID0gZGV2X2Jhc2U7IGRldjsgZGV2ID0gZGV2LT5uZXh0KSB7CiAJCQluYi0+bm90aWZpZXJfY2FsbChuYiwgTkVUREVWX1JFR0lTVEVSLCBkZXYpOwpAQCAtOTgzLDcgKzk4NSw3IEBACiAJaW50IGVycjsKIAogCXJ0bmxfbG9jaygpOwotCWVyciA9IGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5ldGRldl9jaGFpbiwgbmIpOworCWVyciA9IHJhd19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZXRkZXZfY2hhaW4sIG5iKTsKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CkBAIC05OTQsMTIgKzk5NiwxMiBAQAogICogICAgICBAdjogICBwb2ludGVyIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCiAgKgogICoJQ2FsbCBhbGwgbmV0d29yayBub3RpZmllciBibG9ja3MuICBQYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWUKLSAqCWFyZSBhcyBmb3IgYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigpLgorICoJYXJlIGFzIGZvciByYXdfbm90aWZpZXJfY2FsbF9jaGFpbigpLgogICovCiAKIGludCBjYWxsX25ldGRldmljZV9ub3RpZmllcnModW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgdmFsLCB2KTsKKwlyZXR1cm4gcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgdmFsLCB2KTsKIH0KIAogLyogV2hlbiA+IDAgdGhlcmUgYXJlIGNvbnN1bWVycyBvZiByeCBza2IgdGltZSBzdGFtcHMgKi8KQEAgLTIxOTYsNyArMjE5OCw3IEBACiAgKglAZGV2OiBkZXZpY2UKICAqCUBpbmM6IG1vZGlmaWVyCiAgKgotICoJQWRkIG9yIHJlbW92ZSBwcm9tc2ljdWl0eSBmcm9tIGEgZGV2aWNlLiBXaGlsZSB0aGUgY291bnQgaW4gdGhlIGRldmljZQorICoJQWRkIG9yIHJlbW92ZSBwcm9taXNjdWl0eSBmcm9tIGEgZGV2aWNlLiBXaGlsZSB0aGUgY291bnQgaW4gdGhlIGRldmljZQogICoJcmVtYWlucyBhYm92ZSB6ZXJvIHRoZSBpbnRlcmZhY2UgcmVtYWlucyBwcm9taXNjdW91cy4gT25jZSBpdCBoaXRzIHplcm8KICAqCXRoZSBkZXZpY2UgcmV2ZXJ0cyBiYWNrIHRvIG5vcm1hbCBmaWx0ZXJpbmcgb3BlcmF0aW9uLiBBIG5lZ2F0aXZlIGluYwogICoJdmFsdWUgaXMgdXNlZCB0byBkcm9wIHByb21pc2N1aXR5IG9uIHRoZSBkZXZpY2UuCkBAIC0yMzA4LDcgKzIzMTAsNyBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQICYmCiAJICAgICgob2xkX2ZsYWdzIF4gZGV2LT5mbGFncykgJn4gKElGRl9VUCB8IElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJIHwKIAkJCQkJICBJRkZfVk9MQVRJTEUpKSkKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAorCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAogCQkJCU5FVERFVl9DSEFOR0UsIGRldik7CiAKIAlpZiAoKGZsYWdzIF4gZGV2LT5nZmxhZ3MpICYgSUZGX1BST01JU0MpIHsKQEAgLTIzNTMsNyArMjM1NSw3IEBACiAJZWxzZQogCQlkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKCFlcnIgJiYgZGV2LT5mbGFncyAmIElGRl9VUCkKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAorCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAogCQkJCU5FVERFVl9DSEFOR0VNVFUsIGRldik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIzNzAsNyArMjM3Miw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCWVyciA9IGRldi0+c2V0X21hY19hZGRyZXNzKGRldiwgc2EpOwogCWlmICghZXJyKQotCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCiAJCQkJTkVUREVWX0NIQU5HRUFERFIsIGRldik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0MjcsNyArMjQyOSw3IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQltZW1jcHkoZGV2LT5icm9hZGNhc3QsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAogCQkJICAgICAgIG1pbihzaXplb2YgaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsIChzaXplX3QpIGRldi0+YWRkcl9sZW4pKTsKLQkJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwKKwkJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCiAJCQkJCSAgICBORVRERVZfQ0hBTkdFQUREUiwgZGV2KTsKIAkJCXJldHVybiAwOwogCkBAIC0yNjk4LDcgKzI3MDAsOCBAQAogCQkJCS8qIElmIGNvbW1hbmQgaXMgYHNldCBhIHBhcmFtZXRlcicsIG9yCiAJCQkJICogYGdldCB0aGUgZW5jb2RpbmcgcGFyYW1ldGVycycsIGNoZWNrIGlmCiAJCQkJICogdGhlIHVzZXIgaGFzIHRoZSByaWdodCB0byBkbyBpdCAqLwotCQkJCWlmIChJV19JU19TRVQoY21kKSB8fCBjbWQgPT0gU0lPQ0dJV0VOQ09ERSkgeworCQkJCWlmIChJV19JU19TRVQoY21kKSB8fCBjbWQgPT0gU0lPQ0dJV0VOQ09ERQorCQkJCSAgICB8fCBjbWQgPT0gU0lPQ0dJV0VOQ09ERUVYVCkgewogCQkJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQkJCQlyZXR1cm4gLUVQRVJNOwogCQkJCX0KQEAgLTI3NzYsNiArMjc3OSw4IEBACiAJQlVHX09OKGRldl9ib290X3BoYXNlKTsKIAlBU1NFUlRfUlROTCgpOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCS8qIFdoZW4gbmV0X2RldmljZSdzIGFyZSBwZXJzaXN0ZW50LCB0aGlzIHdpbGwgYmUgZmF0YWwuICovCiAJQlVHX09OKGRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19VTklOSVRJQUxJWkVEKTsKIApAQCAtMjg2Miw2ICsyODY3LDExIEBACiAJaWYgKCFkZXYtPnJlYnVpbGRfaGVhZGVyKQogCQlkZXYtPnJlYnVpbGRfaGVhZGVyID0gZGVmYXVsdF9yZWJ1aWxkX2hlYWRlcjsKIAorCXJldCA9IG5ldGRldl9yZWdpc3Rlcl9zeXNmcyhkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2VycjsKKwlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19SRUdJU1RFUkVEOworCiAJLyoKIAkgKglEZWZhdWx0IGluaXRpYWwgc3RhdGUgYXQgcmVnaXN0cnkgaXMgdGhhdCB0aGUKIAkgKglkZXZpY2UgaXMgcHJlc2VudC4KQEAgLTI4NzcsMTQgKzI4ODcsMTEgQEAKIAlobGlzdF9hZGRfaGVhZCgmZGV2LT5uYW1lX2hsaXN0LCBoZWFkKTsKIAlobGlzdF9hZGRfaGVhZCgmZGV2LT5pbmRleF9obGlzdCwgZGV2X2luZGV4X2hhc2goZGV2LT5pZmluZGV4KSk7CiAJZGV2X2hvbGQoZGV2KTsKLQlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19SRUdJU1RFUklORzsKIAl3cml0ZV91bmxvY2tfYmgoJmRldl9iYXNlX2xvY2spOwogCiAJLyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovCi0JYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLCBORVRERVZfUkVHSVNURVIsIGRldik7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm5ldGRldl9jaGFpbiwgTkVUREVWX1JFR0lTVEVSLCBkZXYpOwogCi0JLyogRmluaXNoIHJlZ2lzdHJhdGlvbiBhZnRlciB1bmxvY2sgKi8KLQluZXRfc2V0X3RvZG8oZGV2KTsKIAlyZXQgPSAwOwogCiBvdXQ6CkBAIC0yOTYwLDcgKzI5NjcsNyBAQAogCQkJcnRubF9sb2NrKCk7CiAKIAkJCS8qIFJlYnJvYWRjYXN0IHVucmVnaXN0ZXIgbm90aWZpY2F0aW9uICovCi0JCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCisJCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbmV0ZGV2X2NoYWluLAogCQkJCQkgICAgTkVUREVWX1VOUkVHSVNURVIsIGRldik7CiAKIAkJCWlmICh0ZXN0X2JpdChfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsCkBAIC0zMDA3LDcgKzMwMTQsNyBAQAogICoKICAqIFdlIGFyZSBpbnZva2VkIGJ5IHJ0bmxfdW5sb2NrKCkgYWZ0ZXIgaXQgZHJvcHMgdGhlIHNlbWFwaG9yZS4KICAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlYWwgd2l0aCBwcm9ibGVtczoKLSAqIDEpIFdlIGNhbiBjcmVhdGUvZGVsZXRlIHN5c2ZzIG9iamVjdHMgd2hpY2ggaW52b2tlIGhvdHBsdWcKKyAqIDEpIFdlIGNhbiBkZWxldGUgc3lzZnMgb2JqZWN0cyB3aGljaCBpbnZva2UgaG90cGx1ZwogICogICAgd2l0aG91dCBkZWFkbG9ja2luZyB3aXRoIGxpbmt3YXRjaCB2aWEga2V2ZW50ZC4KICAqIDIpIFNpbmNlIHdlIHJ1biB3aXRoIHRoZSBSVE5MIHNlbWFwaG9yZSBub3QgaGVsZCwgd2UgY2FuIHNsZWVwCiAgKiAgICBzYWZlbHkgaW4gb3JkZXIgdG8gd2FpdCBmb3IgdGhlIG5ldGRldiByZWZjbnQgdG8gZHJvcCB0byB6ZXJvLgpAQCAtMzAxNiw4ICszMDIzLDYgQEAKIHZvaWQgbmV0ZGV2X3J1bl90b2RvKHZvaWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0ID0gTElTVF9IRUFEX0lOSVQobGlzdCk7Ci0JaW50IGVycjsKLQogCiAJLyogTmVlZCB0byBndWFyZCBhZ2FpbnN0IG11bHRpcGxlIGNwdSdzIGdldHRpbmcgb3V0IG9mIG9yZGVyLiAqLwogCW11dGV4X2xvY2soJm5ldF90b2RvX3J1bl9tdXRleCk7CkBAIC0zMDQwLDQwICszMDQ1LDI5IEBACiAJCQk9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgbmV0X2RldmljZSwgdG9kb19saXN0KTsKIAkJbGlzdF9kZWwoJmRldi0+dG9kb19saXN0KTsKIAotCQlzd2l0Y2goZGV2LT5yZWdfc3RhdGUpIHsKLQkJY2FzZSBORVRSRUdfUkVHSVNURVJJTkc6Ci0JCQllcnIgPSBuZXRkZXZfcmVnaXN0ZXJfc3lzZnMoZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHN5c2ZzIHJlZ2lzdHJhdGlvbiAoJWQpXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19SRUdJU1RFUkVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBORVRSRUdfVU5SRUdJU1RFUklORzoKLQkJCW5ldGRldl91bnJlZ2lzdGVyX3N5c2ZzKGRldik7Ci0JCQlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19VTlJFR0lTVEVSRUQ7Ci0KLQkJCW5ldGRldl93YWl0X2FsbHJlZnMoZGV2KTsKLQotCQkJLyogcGFyYW5vaWEgKi8KLQkJCUJVR19PTihhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpKTsKLQkJCUJVR19UUkFQKCFkZXYtPmlwX3B0cik7Ci0JCQlCVUdfVFJBUCghZGV2LT5pcDZfcHRyKTsKLQkJCUJVR19UUkFQKCFkZXYtPmRuX3B0cik7Ci0KLQotCQkJLyogSXQgbXVzdCBiZSB0aGUgdmVyeSBsYXN0IGFjdGlvbiwgCi0JCQkgKiBhZnRlciB0aGlzICdkZXYnIG1heSBwb2ludCB0byBmcmVlZCB1cCBtZW1vcnkuCi0JCQkgKi8KLQkJCWlmIChkZXYtPmRlc3RydWN0b3IpCi0JCQkJZGV2LT5kZXN0cnVjdG9yKGRldik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgorCQlpZiAodW5saWtlbHkoZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1VOUkVHSVNURVJJTkcpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIm5ldHdvcmsgdG9kbyAnJXMnIGJ1dCBzdGF0ZSAlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+cmVnX3N0YXRlKTsKLQkJCWJyZWFrOworCQkJZHVtcF9zdGFjaygpOworCQkJY29udGludWU7CiAJCX0KKworCQluZXRkZXZfdW5yZWdpc3Rlcl9zeXNmcyhkZXYpOworCQlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19VTlJFR0lTVEVSRUQ7CisKKwkJbmV0ZGV2X3dhaXRfYWxscmVmcyhkZXYpOworCisJCS8qIHBhcmFub2lhICovCisJCUJVR19PTihhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpKTsKKwkJQlVHX1RSQVAoIWRldi0+aXBfcHRyKTsKKwkJQlVHX1RSQVAoIWRldi0+aXA2X3B0cik7CisJCUJVR19UUkFQKCFkZXYtPmRuX3B0cik7CisKKwkJLyogSXQgbXVzdCBiZSB0aGUgdmVyeSBsYXN0IGFjdGlvbiwKKwkJICogYWZ0ZXIgdGhpcyAnZGV2JyBtYXkgcG9pbnQgdG8gZnJlZWQgdXAgbWVtb3J5LgorCQkgKi8KKwkJaWYgKGRldi0+ZGVzdHJ1Y3RvcikKKwkJCWRldi0+ZGVzdHJ1Y3RvcihkZXYpOwogCX0KIAogb3V0OgpAQCAtMzEwMCwxMiArMzA5NCwxMSBAQAogCWFsbG9jX3NpemUgPSAoc2l6ZW9mKCpkZXYpICsgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1Q7CiAJYWxsb2Nfc2l6ZSArPSBzaXplb2ZfcHJpdiArIE5FVERFVl9BTElHTl9DT05TVDsKIAotCXAgPSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworCXAgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghcCkgewogCQlwcmludGsoS0VSTl9FUlIgImFsbG9jX2RldjogVW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZS5cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KHAsIDAsIGFsbG9jX3NpemUpOwogCiAJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopCiAJCSgoKGxvbmcpcCArIE5FVERFVl9BTElHTl9DT05TVCkgJiB+TkVUREVWX0FMSUdOX0NPTlNUKTsKQEAgLTMxMzEsNyArMzEyNCw3IEBACiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCi0JLyogIENvbXBhdGlhYmxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovCisJLyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovCiAJaWYgKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEKSB7CiAJCWtmcmVlKChjaGFyICopZGV2IC0gZGV2LT5wYWRkZWQpOwogCQlyZXR1cm47CkBAIC0zMjE2LDcgKzMyMDksNyBAQAogCS8qIE5vdGlmeSBwcm90b2NvbHMsIHRoYXQgd2UgYXJlIGFib3V0IHRvIGRlc3Ryb3kKIAkgICB0aGlzIGRldmljZS4gVGhleSBzaG91bGQgY2xlYW4gYWxsIHRoZSB0aGluZ3MuCiAJKi8KLQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9VTlJFR0lTVEVSLCBkZXYpOworCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sIE5FVERFVl9VTlJFR0lTVEVSLCBkZXYpOwogCQogCS8qCiAJICoJRmx1c2ggdGhlIG11bHRpY2FzdCBjaGFpbgpAQCAtMzM0Nyw3ICszMzQwLDcgQEAKIAkgKglJbml0aWFsaXNlIHRoZSBwYWNrZXQgcmVjZWl2ZSBxdWV1ZXMuCiAJICovCiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBzb2Z0bmV0X2RhdGEgKnF1ZXVlOwogCiAJCXF1ZXVlID0gJnBlcl9jcHUoc29mdG5ldF9kYXRhLCBpKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2R2LmMgYi9uZXQvY29yZS9kdi5jCmluZGV4IGNmNTgxNDAuLjI5ZWU3N2YxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kdi5jCisrKyBiL25ldC9jb3JlL2R2LmMKQEAgLTU1LDE1ICs1NSwxMiBAQAogCiAJZGV2LT5kaXZlcnQgPSBOVUxMOwogCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7Ci0JCWRldi0+ZGl2ZXJ0ID0gKHN0cnVjdCBkaXZlcnRfYmxrICopCi0JCQlrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworCQlkZXYtPmRpdmVydCA9IGt6YWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChkZXYtPmRpdmVydCA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJkaXZlcnQ6IHVuYWJsZSB0byBhbGxvY2F0ZSBkaXZlcnRfYmxrIGZvciAlc1xuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQotCQltZW1zZXQoZGV2LT5kaXZlcnQsIDAsIHNpemVvZihzdHJ1Y3QgZGl2ZXJ0X2JsaykpOwogCQlkZXZfaG9sZChkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA5M2ZiZDAxLi41YjQ0ODZhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYworKysgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgogCiAvKiBObyBodXJyeSBpbiB0aGlzIGJyYW5jaCAqLwpAQCAtMTc3LDcgKzE3OCw3IEBACiBsb2FkX3c6CiAJCQlwdHIgPSBsb2FkX3BvaW50ZXIoc2tiLCBrLCA0LCAmdG1wKTsKIAkJCWlmIChwdHIgIT0gTlVMTCkgewotCQkJCUEgPSBudG9obCgqKHUzMiAqKXB0cik7CisJCQkJQSA9IG50b2hsKGdldF91bmFsaWduZWQoKHUzMiAqKXB0cikpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xODYsNyArMTg3LDcgQEAKIGxvYWRfaDoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDIsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7Ci0JCQkJQSA9IG50b2hzKCoodTE2ICopcHRyKTsKKwkJCQlBID0gbnRvaHMoZ2V0X3VuYWxpZ25lZCgodTE2ICopcHRyKSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Zsb3cuYyBiL25ldC9jb3JlL2Zsb3cuYwppbmRleCA1NTc4OWY4Li4yMTkxYWY1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9mbG93LmMKKysrIGIvbmV0L2NvcmUvZmxvdy5jCkBAIC03OSw3ICs3OSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJZmxvd19oYXNoX3JuZF9yZWNhbGMoaSkgPSAxOwogCiAJZmxvd19oYXNoX3JuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEZMT1dfSEFTSF9STkRfUEVSSU9EOwpAQCAtMzE4LDEyICszMTgsMTAgQEAKIAkJLyogTk9USElORyAqLzsKIAogCWZsb3dfdGFibGUoY3B1KSA9IChzdHJ1Y3QgZmxvd19jYWNoZV9lbnRyeSAqKikKLQkJX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBvcmRlcik7CisJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPLCBvcmRlcik7CiAJaWYgKCFmbG93X3RhYmxlKGNwdSkpCiAJCXBhbmljKCJORVQ6IGZhaWxlZCB0byBhbGxvY2F0ZSBmbG93IGNhY2hlIG9yZGVyICVsdVxuIiwgb3JkZXIpOwogCi0JbWVtc2V0KGZsb3dfdGFibGUoY3B1KSwgMCwgUEFHRV9TSVpFIDw8IG9yZGVyKTsKLQogCWZsb3dfaGFzaF9ybmRfcmVjYWxjKGNwdSkgPSAxOwogCWZsb3dfY291bnQoY3B1KSA9IDA7CiAKQEAgLTM2Myw3ICszNjEsNyBAQAogCWZsb3dfaGFzaF9ybmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBGTE9XX0hBU0hfUk5EX1BFUklPRDsKIAlhZGRfdGltZXIoJmZsb3dfaGFzaF9ybmRfdGltZXIpOwogCi0JZm9yX2VhY2hfY3B1KGkpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCWZsb3dfY2FjaGVfY3B1X3ByZXBhcmUoaSk7CiAKIAlob3RjcHVfbm90aWZpZXIoZmxvd19jYWNoZV9jcHUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jIGIvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCmluZGV4IGIwN2MwMjkuLjNjYWQwMjYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYworKysgYi9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKQEAgLTE1OSwxMSArMTU5LDEwIEBACiAJaWYgKHBhcm0tPmludGVydmFsIDwgLTIgfHwgcGFybS0+aW50ZXJ2YWwgPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVzdCA9IGttYWxsb2Moc2l6ZW9mKCplc3QpLCBHRlBfS0VSTkVMKTsKKwllc3QgPSBremFsbG9jKHNpemVvZigqZXN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVzdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQltZW1zZXQoZXN0LCAwLCBzaXplb2YoKmVzdCkpOwogCWVzdC0+aW50ZXJ2YWwgPSBwYXJtLT5pbnRlcnZhbCArIDI7CiAJZXN0LT5ic3RhdHMgPSBic3RhdHM7CiAJZXN0LT5yYXRlX2VzdCA9IHJhdGVfZXN0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbGlua193YXRjaC5jIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCmluZGV4IDM0MWRlNDQuLjY0NjkzN2MgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYworKysgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx3ZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTFdfUlVOTklORywgJmxpbmt3YXRjaF9mbGFncykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgdGhpc2V2ZW50ID0gamlmZmllczsKKwkJCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBsaW5rd2F0Y2hfbmV4dGV2ZW50IC0gamlmZmllczsKIAotCQkJaWYgKHRoaXNldmVudCA+PSBsaW5rd2F0Y2hfbmV4dGV2ZW50KSB7CisJCQkvKiBJZiB3ZSB3cmFwIGFyb3VuZCB3ZSdsbCBkZWxheSBpdCBieSBhdCBtb3N0IEhaLiAqLworCQkJaWYgKCFkZWxheSB8fCBkZWxheSA+IEhaKQogCQkJCXNjaGVkdWxlX3dvcmsoJmxpbmt3YXRjaF93b3JrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaywgbGlua3dhdGNoX25leHRldmVudCAtIHRoaXNldmVudCk7Ci0JCQl9CisJCQllbHNlCisJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaywgZGVsYXkpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAwYzg2NjY4Li41MGE4YzczIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjg0LDE0ICsyODQsMTEgQEAKIAlzdHJ1Y3QgbmVpZ2hib3VyICoqcmV0OwogCiAJaWYgKHNpemUgPD0gUEFHRV9TSVpFKSB7Ci0JCXJldCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJCXJldCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gKHN0cnVjdCBuZWlnaGJvdXIgKiopCi0JCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIGdldF9vcmRlcihzaXplKSk7CisJCSAgICAgIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQ3xfX0dGUF9aRVJPLCBnZXRfb3JkZXIoc2l6ZSkpOwogCX0KLQlpZiAocmV0KQotCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwODksOCArMTA4Niw3IEBACiAJCWlmIChoaC0+aGhfdHlwZSA9PSBwcm90b2NvbCkKIAkJCWJyZWFrOwogCi0JaWYgKCFoaCAmJiAoaGggPSBrbWFsbG9jKHNpemVvZigqaGgpLCBHRlBfQVRPTUlDKSkgIT0gTlVMTCkgewotCQltZW1zZXQoaGgsIDAsIHNpemVvZihzdHJ1Y3QgaGhfY2FjaGUpKTsKKwlpZiAoIWhoICYmIChoaCA9IGt6YWxsb2Moc2l6ZW9mKCpoaCksIEdGUF9BVE9NSUMpKSAhPSBOVUxMKSB7CiAJCXJ3bG9ja19pbml0KCZoaC0+aGhfbG9jayk7CiAJCWhoLT5oaF90eXBlID0gcHJvdG9jb2w7CiAJCWF0b21pY19zZXQoJmhoLT5oaF9yZWZjbnQsIDApOwpAQCAtMTMzMCw4ICsxMzI2LDcgQEAKIAlrZnJlZShwYXJtcyk7CiB9CiAKLQotdm9pZCBuZWlnaF90YWJsZV9pbml0KHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsKQordm9pZCBuZWlnaF90YWJsZV9pbml0X25vX25ldGxpbmsoc3RydWN0IG5laWdoX3RhYmxlICp0YmwpCiB7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgcGhzaXplOwpAQCAtMTM2NiwxMyArMTM2MSwxMSBAQAogCXRibC0+aGFzaF9idWNrZXRzID0gbmVpZ2hfaGFzaF9hbGxvYyh0YmwtPmhhc2hfbWFzayArIDEpOwogCiAJcGhzaXplID0gKFBORUlHSF9IQVNITUFTSyArIDEpICogc2l6ZW9mKHN0cnVjdCBwbmVpZ2hfZW50cnkgKik7Ci0JdGJsLT5waGFzaF9idWNrZXRzID0ga21hbGxvYyhwaHNpemUsIEdGUF9LRVJORUwpOworCXRibC0+cGhhc2hfYnVja2V0cyA9IGt6YWxsb2MocGhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghdGJsLT5oYXNoX2J1Y2tldHMgfHwgIXRibC0+cGhhc2hfYnVja2V0cykKIAkJcGFuaWMoImNhbm5vdCBhbGxvY2F0ZSBuZWlnaGJvdXIgY2FjaGUgaGFzaGVzIik7CiAKLQltZW1zZXQodGJsLT5waGFzaF9idWNrZXRzLCAwLCBwaHNpemUpOwotCiAJZ2V0X3JhbmRvbV9ieXRlcygmdGJsLT5oYXNoX3JuZCwgc2l6ZW9mKHRibC0+aGFzaF9ybmQpKTsKIAogCXJ3bG9ja19pbml0KCZ0YmwtPmxvY2spOwpAQCAtMTM4OSwxMCArMTM4MiwyNyBAQAogCiAJdGJsLT5sYXN0X2ZsdXNoID0gbm93OwogCXRibC0+bGFzdF9yYW5kCT0gbm93ICsgdGJsLT5wYXJtcy5yZWFjaGFibGVfdGltZSAqIDIwOworfQorCit2b2lkIG5laWdoX3RhYmxlX2luaXQoc3RydWN0IG5laWdoX3RhYmxlICp0YmwpCit7CisJc3RydWN0IG5laWdoX3RhYmxlICp0bXA7CisKKwluZWlnaF90YWJsZV9pbml0X25vX25ldGxpbmsodGJsKTsKIAl3cml0ZV9sb2NrKCZuZWlnaF90YmxfbG9jayk7CisJZm9yICh0bXAgPSBuZWlnaF90YWJsZXM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KSB7CisJCWlmICh0bXAtPmZhbWlseSA9PSB0YmwtPmZhbWlseSkKKwkJCWJyZWFrOworCX0KIAl0YmwtPm5leHQJPSBuZWlnaF90YWJsZXM7CiAJbmVpZ2hfdGFibGVzCT0gdGJsOwogCXdyaXRlX3VubG9jaygmbmVpZ2hfdGJsX2xvY2spOworCisJaWYgKHVubGlrZWx5KHRtcCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJORUlHSDogUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFibGVzIGZvciAiCisJCSAgICAgICAiZmFtaWx5ICVkXG4iLCB0YmwtPmZhbWlseSk7CisJCWR1bXBfc3RhY2soKTsKKwl9CiB9CiAKIGludCBuZWlnaF90YWJsZV9jbGVhcihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKQEAgLTE2MzMsNyArMTY0Myw3IEBACiAKIAkJbWVtc2V0KCZuZHN0LCAwLCBzaXplb2YobmRzdCkpOwogCi0JCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQkJc3RydWN0IG5laWdoX3N0YXRpc3RpY3MJKnN0OwogCiAJCQlzdCA9IHBlcl9jcHVfcHRyKHRibC0+c3RhdHMsIGNwdSk7CkBAIC0yNjYzLDYgKzI2NzMsNyBAQAogRVhQT1JUX1NZTUJPTChuZWlnaF9yZXNvbHZlX291dHB1dCk7CiBFWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2NsZWFyKTsKIEVYUE9SVF9TWU1CT0wobmVpZ2hfdGFibGVfaW5pdCk7CitFWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluayk7CiBFWFBPUlRfU1lNQk9MKG5laWdoX3VwZGF0ZSk7CiBFWFBPUlRfU1lNQk9MKG5laWdoX3VwZGF0ZV9oaHMpOwogRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDIxYjY4NDYuLjQ3YTZmY2UgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldl9pc2FsaXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAogewotCXJldHVybiBkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRDsKKwlyZXR1cm4gZGV2LT5yZWdfc3RhdGUgPD0gTkVUUkVHX1JFR0lTVEVSRUQ7CiB9CiAKIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJb3BlcnN0YXRlID0gSUZfT1BFUl9ET1dOOwogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAotCWlmIChvcGVyc3RhdGUgPj0gc2l6ZW9mKG9wZXJzdGF0ZXMpKQorCWlmIChvcGVyc3RhdGUgPj0gQVJSQVlfU0laRShvcGVyc3RhdGVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3BlcnN0YXRlc1tvcGVyc3RhdGVdKTsKQEAgLTQ0NSw1OCArNDQ1LDMzIEBACiAKIHZvaWQgbmV0ZGV2X3VucmVnaXN0ZXJfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKiBuZXQpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqIGNsYXNzX2RldiA9ICYobmV0LT5jbGFzc19kZXYpOwotCi0JaWYgKG5ldC0+Z2V0X3N0YXRzKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJm5ldHN0YXRfZ3JvdXApOwotCi0jaWZkZWYgV0lSRUxFU1NfRVhUCi0JaWYgKG5ldC0+Z2V0X3dpcmVsZXNzX3N0YXRzIHx8IChuZXQtPndpcmVsZXNzX2hhbmRsZXJzICYmCi0JCQluZXQtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMpKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJndpcmVsZXNzX2dyb3VwKTsKLSNlbmRpZgotCWNsYXNzX2RldmljZV9kZWwoY2xhc3NfZGV2KTsKLQorCWNsYXNzX2RldmljZV9kZWwoJihuZXQtPmNsYXNzX2RldikpOwogfQogCiAvKiBDcmVhdGUgc3lzZnMgZW50cmllcyBmb3IgbmV0d29yayBkZXZpY2UuICovCiBpbnQgbmV0ZGV2X3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gJihuZXQtPmNsYXNzX2Rldik7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzID0gbmV0LT5zeXNmc19ncm91cHM7CiAKKwljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZShjbGFzc19kZXYpOwogCWNsYXNzX2Rldi0+Y2xhc3MgPSAmbmV0X2NsYXNzOwogCWNsYXNzX2Rldi0+Y2xhc3NfZGF0YSA9IG5ldDsKKwljbGFzc19kZXYtPmdyb3VwcyA9IGdyb3VwczsKIAorCUJVSUxEX0JVR19PTihCVVNfSURfU0laRSA8IElGTkFNU0laKTsKIAlzdHJsY3B5KGNsYXNzX2Rldi0+Y2xhc3NfaWQsIG5ldC0+bmFtZSwgQlVTX0lEX1NJWkUpOwotCWlmICgocmV0ID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKGNsYXNzX2RldikpKQotCQlnb3RvIG91dDsKIAotCWlmIChuZXQtPmdldF9zdGF0cyAmJgotCSAgICAocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGFzc19kZXYtPmtvYmosICZuZXRzdGF0X2dyb3VwKSkpCi0JCWdvdG8gb3V0X3VucmVnOyAKKwlpZiAobmV0LT5nZXRfc3RhdHMpCisJCSpncm91cHMrKyA9ICZuZXRzdGF0X2dyb3VwOwogCiAjaWZkZWYgV0lSRUxFU1NfRVhUCi0JaWYgKG5ldC0+Z2V0X3dpcmVsZXNzX3N0YXRzIHx8IChuZXQtPndpcmVsZXNzX2hhbmRsZXJzICYmCi0JCQluZXQtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMpKSB7Ci0JCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xhc3NfZGV2LT5rb2JqLCAmd2lyZWxlc3NfZ3JvdXApOwotCQlpZiAocmV0KQotCQkJZ290byBvdXRfY2xlYW51cDsKLQl9Ci0JcmV0dXJuIDA7Ci1vdXRfY2xlYW51cDoKLQlpZiAobmV0LT5nZXRfc3RhdHMpCi0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xhc3NfZGV2LT5rb2JqLCAmbmV0c3RhdF9ncm91cCk7Ci0jZWxzZQotCXJldHVybiAwOworCWlmIChuZXQtPmdldF93aXJlbGVzc19zdGF0cworCSAgICB8fCAobmV0LT53aXJlbGVzc19oYW5kbGVycyAmJiBuZXQtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMpKQorCQkqZ3JvdXBzKysgPSAmd2lyZWxlc3NfZ3JvdXA7CiAjZW5kaWYKIAotb3V0X3VucmVnOgotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzeXNmcyBhdHRyaWJ1dGUgcmVnaXN0cmF0aW9uIGZhaWxlZCAlZFxuIiwKLQkgICAgICAgbmV0LT5uYW1lLCByZXQpOwotCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gY2xhc3NfZGV2aWNlX2FkZChjbGFzc19kZXYpOwogfQogCiBpbnQgbmV0ZGV2X3N5c2ZzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jIGIvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMKaW5kZXggMWU0NGVkYS4uNzllYmQ3NSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMKKysrIGIvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMKQEAgLTM4LDEzICszOCwxMSBAQAogewogCWNvbnN0IGludCBsb3B0X3NpemUgPSBzaXplb2Yoc3RydWN0IGxpc3Rlbl9zb2NrKSArCiAJCQkgICAgICBucl90YWJsZV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3NvY2sgKik7Ci0Jc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0ga21hbGxvYyhsb3B0X3NpemUsIEdGUF9LRVJORUwpOworCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IGt6YWxsb2MobG9wdF9zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmIChsb3B0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGxvcHQsIDAsIGxvcHRfc2l6ZSk7Ci0KIAlmb3IgKGxvcHQtPm1heF9xbGVuX2xvZyA9IDY7CiAJICAgICAoMSA8PCBsb3B0LT5tYXhfcWxlbl9sb2cpIDwgc3lzY3RsX21heF9zeW5fYmFja2xvZzsKIAkgICAgIGxvcHQtPm1heF9xbGVuX2xvZysrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMDk0NjRmYS4uZmIzNzcwZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTExMiw2ICsxMTIsMTQgQEAKIAlCVUcoKTsKIH0KIAordm9pZCBza2JfdHJ1ZXNpemVfYnVnKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcHJpbnRrKEtFUk5fRVJSICJTS0IgQlVHOiBJbnZhbGlkIHRydWVzaXplICgldSkgIgorCSAgICAgICAibGVuPSV1LCBzaXplb2Yoc2tfYnVmZik9JVpkXG4iLAorCSAgICAgICBza2ItPnRydWVzaXplLCBza2ItPmxlbiwgc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7Cit9CitFWFBPUlRfU1lNQk9MKHNrYl90cnVlc2l6ZV9idWcpOworCiAvKiAJQWxsb2NhdGUgYSBuZXcgc2tidWZmLiBXZSBkbyB0aGlzIG91cnNlbHZlcyBzbyB3ZSBjYW4gZmlsbCBpbiBhIGZldwogICoJJ3ByaXZhdGUnIGZpZWxkcyBhbmQgYWxzbyBkbyBtZW1vcnkgc3RhdGlzdGljcyB0byBmaW5kIGFsbCB0aGUKICAqCVtCRUVQXSBsZWFrcy4KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmMKaW5kZXggMzVlMjUyNS4uZTk0ODk2OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmMKKysrIGIvbmV0L2NvcmUvc3RyZWFtLmMKQEAgLTE3Niw2ICsxNzYsNyBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAKKwlza2JfdHJ1ZXNpemVfY2hlY2soc2tiKTsKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfcm1lbV9hbGxvYyk7CiAJc2stPnNrX2ZvcndhcmRfYWxsb2MgKz0gc2tiLT50cnVlc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IGZkYzRmMzguLjRmOTZmMzggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBucm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLGkpOwogCQlfX25ldF9zcmFuZG9tKHN0YXRlLCBpK2ppZmZpZXMpOwogCX0KQEAgLTEzMyw3ICsxMzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VlZFtOUl9DUFVTXTsKIAogCWdldF9yYW5kb21fYnl0ZXMoc2VlZCwgc2l6ZW9mKHNlZWQpKTsKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBucm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLGkpOwogCQlfX25ldF9zcmFuZG9tKHN0YXRlLCBzZWVkW2ldKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS93aXJlbGVzcy5jIGIvbmV0L2NvcmUvd2lyZWxlc3MuYwppbmRleCA4MWQ2OTk1Li5kMmJjNzJkIDEwMDY0NAotLS0gYS9uZXQvY29yZS93aXJlbGVzcy5jCisrKyBiL25ldC9jb3JlL3dpcmVsZXNzLmMKQEAgLTE3MjYsNiArMTcyNiwxNCBAQAogCWlmKCFJV19JU19HRVQocmVxdWVzdC0+Y21kKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJLyogSWYgY29tbWFuZCBpcyBgZ2V0IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzJywgY2hlY2sgaWYKKwkgKiB0aGUgdXNlciBoYXMgdGhlIHJpZ2h0IHRvIGRvIGl0ICovCisJaWYgKHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXRU5DT0RFIHx8CisJICAgIHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXRU5DT0RFRVhUKSB7CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJfQorCiAJLyogU3BlY2lhbCBjYXNlcyAqLwogCWlmKHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXU1RBVFMpCiAJCS8qIEdldCBXaXJlbGVzcyBTdGF0cyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwppbmRleCBiNTk4MWU1Li44YzIxMWM1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuYworKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJCSAgICAgIGF2ci0+ZGNjcGF2cl9hY2tfYWNrbm8pOwogCQkJCWRjY3BfYWNrdmVjX3Rocm93X3JlY29yZChhdiwgYXZyKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJCS8qCiAJCQkgKiBJZiBpdCB3YXNuJ3QgcmVjZWl2ZWQsIGNvbnRpbnVlIHNjYW5uaW5nLi4uIHdlIG1pZ2h0CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggMjkwNDc5OS4uZjJjMDExZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCWdvdG8gZHJvcDsKIAogCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIHNrYikpCi0JCWdvdG8gZHJvcDsKKwkJZ290byBkcm9wX2FuZF9mcmVlOwogCiAJZGNjcF9vcGVucmVxX2luaXQocmVxLCAmZHAsIHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDFmZjczMjguLjJlMGVlODMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtODQ4LDYgKzg0OCw3IEBACiB2b2lkIGRjY3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgc3RhdGU7CiAKIAlsb2NrX3NvY2soc2spOwogCkBAIC04ODIsNiArODgzLDExIEBACiAJc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc2ssIHRpbWVvdXQpOwogCiBhZGp1ZGdlX3RvX2RlYXRoOgorCXN0YXRlID0gc2stPnNrX3N0YXRlOworCXNvY2tfaG9sZChzayk7CisJc29ja19vcnBoYW4oc2spOworCWF0b21pY19pbmMoc2stPnNrX3Byb3QtPm9ycGhhbl9jb3VudCk7CisKIAkvKgogCSAqIEl0IGlzIHRoZSBsYXN0IHJlbGVhc2Vfc29jayBpbiBpdHMgbGlmZS4gSXQgd2lsbCByZW1vdmUgYmFja2xvZy4KIAkgKi8KQEAgLTg5NCw4ICs5MDAsOSBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJQlVHX1RSQVAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpOwogCi0Jc29ja19ob2xkKHNrKTsKLQlzb2NrX29ycGhhbihzayk7CisJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGEgc29mdGlycSBvciBiYWNrbG9nPyAqLworCWlmIChzdGF0ZSAhPSBEQ0NQX0NMT1NFRCAmJiBzay0+c2tfc3RhdGUgPT0gRENDUF9DTE9TRUQpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBUaGUgbGFzdCByZWxlYXNlX3NvY2sgbWF5IGhhdmUgcHJvY2Vzc2VkIHRoZSBDTE9TRSBvciBSRVNFVApAQCAtOTE1LDEyICs5MjIsMTIgQEAKICNlbmRpZgogCX0KIAotCWF0b21pY19pbmMoc2stPnNrX3Byb3QtPm9ycGhhbl9jb3VudCk7CiAJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0NMT1NFRCkKIAkJaW5ldF9jc2tfZGVzdHJveV9zb2NrKHNrKTsKIAogCS8qIE90aGVyd2lzZSwgc29ja2V0IGlzIHJlcHJpZXZlZCB1bnRpbCBwcm90b2NvbCBjbG9zZS4gKi8KIAorb3V0OgogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAlzb2NrX3B1dChzayk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25laWdoLmMgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKaW5kZXggN2M4NjkyYy4uNjZlMjMwYyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jCisrKyBiL25ldC9kZWNuZXQvZG5fbmVpZ2guYwpAQCAtNDkzLDcgKzQ5Myw2IEBACiBzdGF0aWMgdm9pZCBuZWlnaF9lbGlzdF9jYihzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgdm9pZCAqX2luZm8pCiB7CiAJc3RydWN0IGVsaXN0X2NiX3N0YXRlICpzID0gX2luZm87Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGI7CiAJc3RydWN0IGRuX25laWdoICpkbjsKIAogCWlmIChuZWlnaC0+ZGV2ICE9IHMtPmRldikKQEAgLTUwMywxMCArNTAyLDYgQEAKIAlpZiAoIShkbi0+ZmxhZ3MgJiAoRE5fTkRGTEFHX1IxfEROX05ERkxBR19SMikpKQogCQlyZXR1cm47CiAKLQlkbl9kYiA9IChzdHJ1Y3QgZG5fZGV2ICopIHMtPmRldi0+ZG5fcHRyOwotCWlmIChkbl9kYi0+cGFybXMuZm9yd2FyZGluZyA9PSAxICYmIChkbi0+ZmxhZ3MgJiBETl9OREZMQUdfUjIpKQotCQlyZXR1cm47Ci0KIAlpZiAocy0+dCA9PSBzLT5uKQogCQlzLT5ycyA9IGRuX2ZpbmRfc2xvdChzLT5wdHIsIHMtPm4sIGRuLT5wcmlvcml0eSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvbmV0L2V0aGVybmV0L01ha2VmaWxlCmluZGV4IDY5Yjc0YTkuLjdjZWYxZDggMTAwNjQ0Ci0tLSBhL25ldC9ldGhlcm5ldC9NYWtlZmlsZQorKysgYi9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKQEAgLTMsNiArMyw1IEBACiAjCiAKIG9iai15CQkJCQkrPSBldGgubwotb2JqLSQoQ09ORklHX1NZU0NUTCkJCQkrPSBzeXNjdGxfbmV0X2V0aGVyLm8KIG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19JUFgpKQkJKz0gcGUyLm8KIG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19BVEFMSykpCSs9IHBlMi5vCmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvc3lzY3RsX25ldF9ldGhlci5jIGIvbmV0L2V0aGVybmV0L3N5c2N0bF9uZXRfZXRoZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiMzlmYy4uMDAwMDAwMAotLS0gYS9uZXQvZXRoZXJuZXQvc3lzY3RsX25ldF9ldGhlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogLSotIGxpbnV4LWMgLSotCi0gKiBzeXNjdGxfbmV0X2V0aGVyLmM6IHN5c2N0bCBpbnRlcmZhY2UgdG8gbmV0IEV0aGVybmV0IHN1YnN5c3RlbS4KLSAqCi0gKiBCZWd1biBBcHJpbCAxLCAxOTk2LCBNaWtlIFNoYXZlci4KLSAqIEFkZGVkIC9wcm9jL3N5cy9uZXQvZXRoZXIgZGlyZWN0b3J5IGVudHJ5IChlbXB0eSA9KSApLiBbTVNdCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLQotY3RsX3RhYmxlIGV0aGVyX3RhYmxlW10gPSB7Ci0JezB9Ci19OwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZwppbmRleCA2Y2Q5ZjM0Li5mMmEyN2NjIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBJRUVFODAyMTFfU09GVE1BQwogCXRyaXN0YXRlICJTb2Z0d2FyZSBNQUMgYWRkLW9uIHRvIHRoZSBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIgogCWRlcGVuZHMgb24gSUVFRTgwMjExICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBXSVJFTEVTU19FWFQKIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgc29mdHdhcmUgTUFDIGFkZG9uCiAJZm9yIHRoZSBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrLgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKaW5kZXggYmU2MWRlNzguLjU3ZWE5ZjYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYwpAQCAtNTEsMTEgKzUxLDEyIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMTsKIAltYWMtPmFzc29jaWF0ZWQgPSAwOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZSAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCiAJLyogU2V0IGEgdGltZXIgZm9yIHRpbWVvdXQgKi8KIAkvKiBGSVhNRTogbWFrZSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSAqLwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWFjLT5hc3NvY2luZm8udGltZW91dCwgNSAqIEhaKTsKKwlpZiAobGlrZWx5KG1hYy0+cnVubmluZykpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWFjLT5hc3NvY2luZm8udGltZW91dCwgNSAqIEhaKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZApAQCAtMTAxLDYgKzEwMiw3IEBACiAJLyogRG8gTk9UIGNsZWFyIGJzc3ZhbGlkIGFzIHRoYXQgd2lsbCBicmVhayBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmshICovCiAJbWFjLT5hc3NvY2lhdGVkID0gMDsKIAltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7CisJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQsIE5VTEwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0xNDMsNiArMTQ1LDEyIEBACiAJaWYgKCF3ZV9zdXBwb3J0X2FsbF9iYXNpY19yYXRlcyhtYWMsIG5ldC0+cmF0ZXNfZXgsIG5ldC0+cmF0ZXNfZXhfbGVuKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBhc3N1bWUgdGhhdCB1c2VycyBrbm93IHdoYXQgdGhleSdyZSBkb2luZyAuLi4KKwkgKiAobm90ZSB3ZSBkb24ndCBsZXQgdGhlbSBzZWxlY3QgYSBuZXQgd2UncmUgaW5jb21wYXRpYmxlIHdpdGgpICovCisJaWYgKG1hYy0+YXNzb2NpbmZvLmJzc2ZpeGVkKSB7CisJCXJldHVybiAhbWVtY21wKG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBuZXQtPmJzc2lkLCBFVEhfQUxFTik7CisJfQorCiAJLyogaWYgJ0FOWScgbmV0d29yayByZXF1ZXN0ZWQsIHRha2UgYW55IHRoYXQgZG9lc24ndCBoYXZlIHByaXZhY3kgZW5hYmxlZCAqLwogCWlmIChtYWMtPmFzc29jaW5mby5yZXFfZXNzaWQubGVuID09IDAgCiAJICAgICYmICEobmV0LT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQpAQCAtMTc1LDcgKzE4Myw3IEBACiAJCWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2MobWFjLCBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpOwogCiAJLyogdHJ5IHRvIGZpbmQgdGhlIHJlcXVlc3RlZCBuZXR3b3JrIGluIG91ciBsaXN0LCBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeSAqLwotCWlmIChtYWMtPmFzc29jaW5mby5ic3N2YWxpZCkKKwlpZiAobWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgfHwgbWFjLT5hc3NvY2luZm8uYnNzZml4ZWQpCiAJCWZvdW5kID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsJCiAJCiAJLyogU2VhcmNoIHRoZSBpZWVlODAyMTEgbmV0d29ya3MgZm9yIHRoaXMgbmV0d29yayBpZiB3ZSBkaWRuJ3QgZmluZCBpdCBieSBic3NpZCwKQEAgLTI0MCwxOSArMjQ4LDI1IEBACiAJCQlpZiAoaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKG1hYykpCiAJCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJBc3NvY2lhdGU6IGZhaWxlZCB0byBpbml0aWF0ZSBzY2FuLiBJcyBkZXZpY2UgdXA/XG4iKTsKIAkJCXJldHVybjsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAkJCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKIAkJCW1hYy0+YXNzb2NpYXRlZCA9IDA7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAogCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJVbmFibGUgdG8gZmluZCBtYXRjaGluZyBuZXR3b3JrIGFmdGVyIHNjYW4hXG4iKTsKKwkJCS8qIHJlc2V0IHRoZSByZXRyeSBjb3VudGVyIGZvciB0aGUgbmV4dCB1c2VyIHJlcXVlc3Qgc2luY2Ugd2UKKwkJCSAqIGJyZWFrIG91dCBhbmQgZG9uJ3QgcmVzY2hlZHVsZSBvdXJzZWx2ZXMgYWZ0ZXIgdGhpcyBwb2ludC4gKi8KKwkJCW1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPSBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQ7CiAJCQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfTkVUX05PVF9GT1VORCwgTlVMTCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JCisKKwkvKiByZXNldCB0aGUgcmV0cnkgY291bnRlciBmb3IgdGhlIG5leHQgdXNlciByZXF1ZXN0IHNpbmNlIHdlCisJICogbm93IGZvdW5kIGEgbmV0IGFuZCB3aWxsIHRyeSB0byBhc3NvY2lhdGUgdG8gaXQsIGJ1dCBub3QKKwkgKiBzY2hlZHVsZSB0aGlzIGZ1bmN0aW9uIGFnYWluLiAqLworCW1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPSBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQ7CiAJbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAxOwogCW1lbWNweShtYWMtPmFzc29jaW5mby5ic3NpZCwgZm91bmQtPmJzc2lkLCBFVEhfQUxFTik7CiAJLyogY29weSB0aGUgRVNTSUQgZm9yIGRpc3BsYXlpbmcgaXQgKi8KQEAgLTMwNiw2ICszMjAsOSBAQAogCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdXAoJnJlc3AtPnN0YXR1cyk7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCkBAIC0zNjQsMTUgKzM4MSwyMiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChtZW1jbXAoZGlzYXNzb2MtPmhlYWRlci5hZGRyMiwgbWFjLT5hc3NvY2luZm8uYnNzaWQsIEVUSF9BTEVOKSkKIAkJcmV0dXJuIDA7CisKIAlpZiAobWVtY21wKGRpc2Fzc29jLT5oZWFkZXIuYWRkcjEsIG1hYy0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm4gMDsKKwogCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiZ290IGRpc2Fzc29jIGZyYW1lXG4iKTsKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDA7CiAJbWFjLT5hc3NvY2lhdGVkID0gMDsKKwlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRCwgTlVMTCk7CiAJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiAJCkBAIC0zODYsMTEgKzQxMCwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXR3b3JrOwogCisJaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCW5ldHdvcmsgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKG1hYywgcmVzcC0+aGVhZGVyLmFkZHIzKTsKIAlpZiAoIW5ldHdvcmspIHsKIAkJZHByaW50a2woS0VSTl9JTkZPIFBGWCAicmVhc3NvYyByZXF1ZXN0IGZyb20gdW5rbm93biBuZXR3b3JrXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWllZWU4MDIxMXNvZnRtYWNfYXNzb2MobWFjLCBuZXR3b3JrKTsKKwlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCmluZGV4IDlhMGVhYzYuLjA2ZTMzMjYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKQEAgLTg2LDYgKzg2LDExIEBACiAJCQogCQkvKiBMb2NrIGFuZCBzZXQgZmxhZ3MgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQlpZiAodW5saWtlbHkoIW1hYy0+cnVubmluZykpIHsKKwkJCS8qIFByZXZlbnQgcmVzY2hlZHVsZSBvbiB3b3JrcXVldWUgZmx1c2ggKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CiAJCW5ldC0+YXV0aGVudGljYXRlZCA9IDA7CiAJCW5ldC0+YXV0aGVudGljYXRpbmcgPSAxOwogCQkvKiBhZGQgYSB0aW1lb3V0IGNhbGwgc28gd2UgZXZlbnR1YWxseSBnaXZlIHVwIHdhaXRpbmcgZm9yIGFuIGF1dGggcmVwbHkgKi8KQEAgLTEyNCw2ICsxMjksOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggKiBkYXRhOwogCQorCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKiBGaW5kIGNvcnJlY3QgYXV0aCBxdWV1ZSBpdGVtICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2gobGlzdF9wdHIsICZtYWMtPmF1dGhfcXVldWUpIHsKQEAgLTI5OCw4ICszMDYsNiBAQAogCQogCS8qIGNhbid0IHRyYW5zbWl0IGRhdGEgcmlnaHQgbm93Li4uICovCiAJbmV0aWZfY2Fycmllcl9vZmYobWFjLT5kZXYpOwotCS8qIGxldCdzIHRyeSB0byByZS1hc3NvY2lhdGUgKi8KLQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMzM4LDYgKzM0NCw5IEBACiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0ID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJCisJaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghZGVhdXRoKSB7CiAJCWRwcmludGsoImRlYXV0aCB3aXRob3V0IGRlYXV0aCBwYWNrZXQuIGVlayFcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTM2MCw1ICszNjksOCBAQAogCX0KIAogCWllZWU4MDIxMXNvZnRtYWNfZGVhdXRoX2Zyb21fbmV0KG1hYywgbmV0KTsKKworCS8qIGxldCdzIHRyeSB0byByZS1hc3NvY2lhdGUgKi8KKwlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jCmluZGV4IDBhNTJiYmQuLjhjYzhmM2YgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYwpAQCAtNjcsNiArNjcsNyBAQAogCSJhdXRoZW50aWNhdGluZyBmYWlsZWQiLAogCSJhdXRoZW50aWNhdGluZyB0aW1lZCBvdXQiLAogCSJhc3NvY2lhdGluZyBmYWlsZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBuZXR3b3JrIHdhcyBmb3VuZCIsCisJImRpc2Fzc29jaWF0ZWQiLAogfTsKIAogCkBAIC0xMjgsMTMgKzEyOSw0MiBAQAogaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIGludCBldmVudCwgdm9pZCAqZXZlbnRfY3R4KQogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50ICpldmVudHB0ciwgKnRtcDsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JY2hhciAqbXNnOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldHdvcms7CiAJCiAJaWYgKGV2ZW50ID49IDApIHsKLQkJbXNnID0gZXZlbnRfZGVzY3JpcHRpb25zW2V2ZW50XTsKLQkJd3JxdS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KG1hYy0+ZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgbXNnKTsKKwkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCQlpbnQgd2VfZXZlbnQ7CisJCWNoYXIgKm1zZyA9IE5VTEw7CisKKwkJc3dpdGNoKGV2ZW50KSB7CisJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVEOgorCQkJbmV0d29yayA9IChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICopZXZlbnRfY3R4OworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCAmbmV0d29yay0+YnNzaWRbMF0sIEVUSF9BTEVOKTsKKwkJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQl3ZV9ldmVudCA9IFNJT0NHSVdBUDsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRDoKKwkJCXdycXUuZGF0YS5sZW5ndGggPSAwOworCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCW1lbXNldCgmd3JxdSwgJ1wwJywgc2l6ZW9mICh1bmlvbiBpd3JlcV9kYXRhKSk7CisJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJd2VfZXZlbnQgPSBTSU9DR0lXQVA7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQ6CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQltZW1zZXQoJndycXUsICdcMCcsIHNpemVvZiAodW5pb24gaXdyZXFfZGF0YSkpOworCQkJd2VfZXZlbnQgPSBTSU9DR0lXU0NBTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNnID0gZXZlbnRfZGVzY3JpcHRpb25zW2V2ZW50XTsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwkJCXdlX2V2ZW50ID0gSVdFVkNVU1RPTTsKKwkJCWJyZWFrOworCQl9CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQobWFjLT5kZXYsIHdlX2V2ZW50LCAmd3JxdSwgbXNnKTsKIAl9CiAKIAlpZiAoIWxpc3RfZW1wdHkoJm1hYy0+ZXZlbnRzKSkKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCmluZGV4IGZlYmM1MWQuLmNjNmNkNTYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYwpAQCAtMTgwLDkgKzE4MCwyMSBAQAogCWllZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKG1hYywgJigoKnBrdCktPmhlYWRlciksIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEsIG5ldC0+YnNzaWQsIG5ldC0+YnNzaWQpOwogCiAJLyogRmlsbCBpbiBjYXBhYmlsaXR5IEluZm8gKi8KLQkoKnBrdCktPmNhcGFiaWxpdHkgPSAobWFjLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSB8fCAobWFjLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpID8KLQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0VTUykgOgotCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisJc3dpdGNoIChtYWMtPmllZWUtPml3X21vZGUpIHsKKwljYXNlIElXX01PREVfSU5GUkE6CisJCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9FU1MpOworCQlicmVhazsKKwljYXNlIElXX01PREVfQURIT0M6CisJCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FVVE86CisJCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IG5ldC0+Y2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1N8V0xBTl9DQVBBQklMSVRZX0lCU1MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBibGVoLiB3ZSBkb24ndCBldmVyIGdvIHRvIHRoZXNlIG1vZGVzICovCisJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgaXdfbW9kZSFcbiIpOworCQlicmVhazsKKwl9CiAJLyogTmVlZCB0byBhZGQgdGhpcwogCSgqcGt0KS0+Y2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNob3J0X3Nsb3QgPyAKIAkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpIDogMDsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKaW5kZXggNjBmMDZhMzEuLjYyNTJiZTIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCkBAIC00NSw2ICs0NSw4IEBACiAJc29mdG1hYy0+aWVlZS0+aGFuZGxlX2Rpc2Fzc29jID0gaWVlZTgwMjExc29mdG1hY19oYW5kbGVfZGlzYXNzb2M7CiAJc29mdG1hYy0+c2NhbmluZm8gPSBOVUxMOwogCisJc29mdG1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPSBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQ7CisKIAkvKiBUT0RPOiBpbml0aWFsaXNlIGFsbCB0aGUgb3RoZXIgY2FsbGJhY2tzIGluIHRoZSBpZWVlIHN0cnVjdAogCSAqCSAob25jZSB0aGV5J3JlIHdyaXR0ZW4pCiAJICovCkBAIC04Nyw2ICs4OSw4IEBACiAJaWVlZTgwMjExc29mdG1hY193YWl0X2Zvcl9zY2FuKHNtKTsKIAkKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwlzbS0+cnVubmluZyA9IDA7CisKIAkvKiBGcmVlIGFsbCBwZW5kaW5nIGFzc29jIHdvcmsgaXRlbXMgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrKCZzbS0+YXNzb2NpbmZvLndvcmspOwogCQpAQCAtMjAyLDYgKzIwNiw4IEBACiAJCWFzc2VydCgwKTsKIAlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKIAkJbWFjLT50eHJhdGVzX2NoYW5nZShkZXYsIGNoYW5nZSwgJm9sZHJhdGVzKTsKKworCW1hYy0+cnVubmluZyA9IDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jCmluZGV4IGJiOWFiOGIuLmQzMWNmNzcgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlzbS0+c2Nhbm5pbmcgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CiAKKwluZXRpZl90eF9kaXNhYmxlKHNtLT5pZWVlLT5kZXYpOwogCXJldCA9IHNtLT5zdGFydF9zY2FuKHNtLT5kZXYpOwogCWlmIChyZXQpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CkBAIC0xMTQsNyArMTE1LDE1IEBACiAJCQkvLyBUT0RPOiBpcyB0aGlzIGlmIGNvcnJlY3QsIG9yIHNob3VsZCB3ZSBkbyB0aGlzIG9ubHkgaWYgc2Nhbm5pbmcgZnJvbSBhc3NvYyByZXF1ZXN0PwogCQkJaWYgKHNtLT5hc3NvY2luZm8ucmVxX2Vzc2lkLmxlbikKIAkJCQlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfbWd0X2ZyYW1lKHNtLCAmc20tPmFzc29jaW5mby5yZXFfZXNzaWQsIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEsIDApOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkJCWlmICh1bmxpa2VseSghc20tPnJ1bm5pbmcpKSB7CisJCQkJLyogUHJldmVudCByZXNjaGVkdWxlIG9uIHdvcmtxdWV1ZSBmbHVzaCAqLworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNpLT5zb2Z0bWFjX3NjYW4sIElFRUU4MDIxMVNPRlRNQUNfUFJPQkVfREVMQVkpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoUEZYICJOb3QgcHJvYmluZyBDaGFubmVsICVkIChub3QgYWxsb3dlZCBoZXJlKVxuIiwgc2ktPmNoYW5uZWxzW2N1cnJlbnRfY2hhbm5lbF9pZHhdLmNoYW5uZWwpOwpAQCAtMjM5LDYgKzI0OCw3IEBACiAJCWlmIChuZXQpCiAJCQlzbS0+c2V0X2NoYW5uZWwoc20tPmRldiwgbmV0LT5jaGFubmVsKTsKIAl9CisJbmV0aWZfd2FrZV9xdWV1ZShzbS0+aWVlZS0+ZGV2KTsKIAlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKHNtLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19zY2FuX2ZpbmlzaGVkKTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCmluZGV4IGI1NTlhYTkuLjI3ZWRiMmIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwpAQCAtMjcsNyArMjcsOCBAQAogI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgogCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQorLyogZm9yIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyIGFuZCBpc196ZXJvX2V0aGVyX2FkZHIgKi8KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiBpbnQKIGllZWU4MDIxMXNvZnRtYWNfd3hfdHJpZ2dlcl9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LApAQCAtNDEsMTMgKzQyLDIzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X3RyaWdnZXJfc2Nhbik7CiAKIAorLyogaWYgd2UncmUgc3RpbGwgc2Nhbm5pbmcsIHJldHVybiAtRUFHQUlOIHNvIHRoYXQgdXNlcnNwYWNlIHRvb2xzCisgKiBjYW4gZ2V0IHRoZSBjb21wbGV0ZSBzY2FuIHJlc3VsdHMsIG90aGVyd2lzZSByZXR1cm4gMC4gKi8KIGludAogaWVlZTgwMjExc29mdG1hY193eF9nZXRfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCiAJCQkJICAgICBjaGFyICpleHRyYSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOworCWlmIChzbS0+c2Nhbm5pbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfc2NhbihzbS0+aWVlZSwgaW5mbywgZGF0YSwgZXh0cmEpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9nZXRfc2Nhbl9yZXN1bHRzKTsKQEAgLTczLDcgKzg0LDYgQEAKIAkJCXNtLT5hc3NvY2luZm8uc3RhdGljX2Vzc2lkID0gMTsKIAkJfQogCX0KLQlzbS0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPSBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQ7CiAKIAkvKiBzZXQgb3VyIHJlcXVlc3RlZCBFU1NJRCBsZW5ndGguCiAJICogSWYgYXBwbGljYWJsZSwgd2UgaGF2ZSBhbHJlYWR5IGNvcGllZCB0aGUgZGF0YSBpbiAqLwpAQCAtMzAwLDggKzMxMCw2IEBACiAJCQkgICAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhbnlbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvZmZbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogc2FuaXR5IGNoZWNrICovCkBAIC0zMTAsMTAgKzMxOCwxNyBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIW1lbWNtcChhbnksIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pIHx8Ci0JICAgICFtZW1jbXAob2ZmLCBkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSkgewotCQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKLQkJZ290byBvdXQ7CisJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGRhdGEtPmFwX2FkZHIuc2FfZGF0YSkpIHsKKwkJLyogdGhlIGJzc2lkIHdlIGhhdmUgaXMgbm90IHRvIGJlIGZpeGVkIGFueSBsb25nZXIsCisJCSAqIGFuZCB3ZSBzaG91bGQgcmVhc3NvY2lhdGUgdG8gdGhlIGJlc3QgQVAuICovCisJCW1hYy0+YXNzb2NpbmZvLmJzc2ZpeGVkID0gMDsKKwkJLyogZm9yY2UgcmVhc3NvY2lhdGlvbiAqLworCQltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDA7CisJCWlmIChtYWMtPmFzc29jaWF0ZWQpCisJCQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKKwl9IGVsc2UgaWYgKGlzX3plcm9fZXRoZXJfYWRkcihkYXRhLT5hcF9hZGRyLnNhX2RhdGEpKSB7CisJCS8qIHRoZSBic3NpZCB3ZSBoYXZlIGlzIG5vIGxvbmdlciBmaXhlZCAqLworCQltYWMtPmFzc29jaW5mby5ic3NmaXhlZCA9IDA7CiAgICAgICAgIH0gZWxzZSB7CiAJCWlmICghbWVtY21wKG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSkgewogCQkJaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nIHx8IG1hYy0+YXNzb2NpYXRlZCkgewpAQCAtMzIzLDEyICszMzgsMTQgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIGNvcHkgbmV3IHZhbHVlIGluIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSB0byBic3NpZCAqLwogCQkJbWVtY3B5KG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKLQkJfQkKKwkJfQorCQkvKiB0ZWxsIHRoZSBvdGhlciBjb2RlIHRoYXQgdGhpcyBic3NpZCBzaG91bGQgYmUgdXNlZCBubyBtYXR0ZXIgd2hhdCAqLworCQltYWMtPmFzc29jaW5mby5ic3NmaXhlZCA9IDE7CiAJCS8qIHF1ZXVlIGFzc29jaWF0ZSBpZiBuZXcgYnNzaWQgb3IgKG9sZCBvbmUgYWdhaW4gYW5kIG5vdCBhc3NvY2lhdGVkKSAqLwogCQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKICAgICAgICAgfQogCi1vdXQ6Cisgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGRjMjA2ZjEuLjBhMjc3NDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTEyNTcsNyArMTI1Nyw3IEBACiAJZ290byBvdXQ7CiB9CiAKLW1vZHVsZV9pbml0KGluZXRfaW5pdCk7Citmc19pbml0Y2FsbChpbmV0X2luaXQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWg0LmMgYi9uZXQvaXB2NC9haDQuYwppbmRleCBlMTZkOGI0Li5lMmU0NzcxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9haDQuYworKysgYi9uZXQvaXB2NC9haDQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBhaF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKmRlY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBhaF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgYWhfaGxlbjsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggMDQxZGFkZC4uNDc0OWQ1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTkyOCw3ICs5MjgsOCBAQAogICoJUmVjZWl2ZSBhbiBhcnAgcmVxdWVzdCBmcm9tIHRoZSBkZXZpY2UgbGF5ZXIuCiAgKi8KIAotaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCBhcnBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKIAlzdHJ1Y3QgYXJwaGRyICphcnA7CiAKQEAgLTE0MTcsNyArMTQxOCw2IEBACiAKIEVYUE9SVF9TWU1CT0woYXJwX2Jyb2tlbl9vcHMpOwogRVhQT1JUX1NZTUJPTChhcnBfZmluZCk7Ci1FWFBPUlRfU1lNQk9MKGFycF9yY3YpOwogRVhQT1JUX1NZTUJPTChhcnBfY3JlYXRlKTsKIEVYUE9SVF9TWU1CT0woYXJwX3htaXQpOwogRVhQT1JUX1NZTUJPTChhcnBfc2VuZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggODFjMmY3OC4uNTQ0MTliMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTU1Niw3ICsxNTU2LDYgQEAKICNlbmRpZgogfQogCi1FWFBPUlRfU1lNQk9MKGRldmluZXRfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChpbl9kZXZfZmluaXNoX2Rlc3Ryb3kpOwogRVhQT1JUX1NZTUJPTChpbmV0X3NlbGVjdF9hZGRyKTsKIEVYUE9SVF9TWU1CT0woaW5ldGRldl9ieV9pbmRleCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggYmY4OGM2Mi4uOWQxODgxYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgKiBleHBlbnNpdmUsIHNvIHdlIG9ubHkgc3VwcG9ydCB0cnVuY2F0ZWQgZGF0YSwgd2hpY2ggaXMgdGhlIHJlY29tbWVuZGVkCiAgKiBhbmQgY29tbW9uIGNhc2UuCiAgKi8KLXN0YXRpYyBpbnQgZXNwX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9kZWNhcF9zdGF0ZSAqZGVjYXAsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGVzcF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwaDsKQEAgLTIwOCw5ICsyMDgsNiBAQAogCQlzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICplbmNhcCA9IHgtPmVuY2FwOwogCQlzdHJ1Y3QgdWRwaGRyICp1aDsKIAotCQlpZiAoZW5jYXAtPmVuY2FwX3R5cGUgIT0gZGVjYXAtPmRlY2FwX3R5cGUpCi0JCQlnb3RvIG91dDsKLQogCQl1aCA9IChzdHJ1Y3QgdWRwaGRyICopKGlwaCArIDEpOwogCQllbmNhcF9sZW4gPSAodm9pZCopZXNwaCAtICh2b2lkKil1aDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCA0ZTNkMzgxLi5jZGRlOTYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtNjY2LDQgKzY2NiwzIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woaW5ldF9hZGRyX3R5cGUpOwotRVhQT1JUX1NZTUJPTChpcF9ydF9pb2N0bCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBjY2QzZWZjLi45NWE2MzlmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqCQlQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KICAqLwogCi0jZGVmaW5lIFZFUlNJT04gIjAuNDA2IgorI2RlZmluZSBWRVJTSU9OICIwLjQwNyIKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zMTQsMTEgKzMxNCw2IEBACiAJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmLCByY3UpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfbGVhZihzdHJ1Y3QgbGVhZiAqbGVhZikKLXsKLQljYWxsX3JjdSgmbGVhZi0+cmN1LCBfX2xlYWZfZnJlZV9yY3UpOwotfQotCiBzdGF0aWMgdm9pZCBfX2xlYWZfaW5mb19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmX2luZm8sIHJjdSkpOwpAQCAtMzU3LDcgKzM1MiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQogewotCWNhbGxfcmN1KCZ0bi0+cmN1LCBfX3Rub2RlX2ZyZWVfcmN1KTsKKwlpZihJU19MRUFGKHRuKSkgeworCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKSB0bjsKKwkJY2FsbF9yY3VfYmgoJmwtPnJjdSwgX19sZWFmX2ZyZWVfcmN1KTsKKwl9CisgICAgICAgIGVsc2UKKwkJY2FsbF9yY3UoJnRuLT5yY3UsIF9fdG5vZGVfZnJlZV9yY3UpOwogfQogCiBzdGF0aWMgc3RydWN0IGxlYWYgKmxlYWZfbmV3KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggOTgzMWZkMi4uMmEwNDU1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpbnQgZXJyOwogCiAJCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKaW5kZXggZWY3MzY2Zi4uZWU5YjU1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKQEAgLTQzLDggKzQzLDYgQEAKIAlyZXR1cm4gdGI7CiB9CiAKLUVYUE9SVF9TWU1CT0woaW5ldF9iaW5kX2J1Y2tldF9jcmVhdGUpOwotCiAvKgogICogQ2FsbGVyIG11c3QgaG9sZCBoYXNoYnVja2V0IGxvY2sgZm9yIHRoaXMgdGIgd2l0aCBsb2NhbCBCSCBkaXNhYmxlZAogICovCkBAIC02NCw4ICs2Miw2IEBACiAJaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCA9IHRiOwogfQogCi1FWFBPUlRfU1lNQk9MKGluZXRfYmluZF9oYXNoKTsKLQogLyoKICAqIEdldCByaWQgb2YgYW55IHJlZmVyZW5jZXMgdG8gYSBsb2NhbCBwb3J0IGhlbGQgYnkgdGhlIGdpdmVuIHNvY2suCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwppbmRleCAwOTIzYWRkMS4uOWYwYmI1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtMTE2LDYgKzExNiw3IEBACiAKIHRvb19tYW55X2hvcHM6CiAgICAgICAgIC8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi8KKyAgICAgICAgSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKICAgICAgICAgaWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApOwogZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDJhOGFkZGEuLmRhNzM0YzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMzA0LDEzICszMDQsMTcgQEAKIAogLyogQ3JlYXRpb24gcHJpbWl0aXZlcy4gKi8KIAotc3RhdGljIHN0cnVjdCBpcHEgKmlwX2ZyYWdfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLCBzdHJ1Y3QgaXBxICpxcF9pbikKK3N0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2ludGVybihzdHJ1Y3QgaXBxICpxcF9pbikKIHsKIAlzdHJ1Y3QgaXBxICpxcDsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwogCXdyaXRlX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKHFwX2luLT5pZCwgcXBfaW4tPnNhZGRyLCBxcF9pbi0+ZGFkZHIsCisJCQkgcXBfaW4tPnByb3RvY29sKTsKICNpZmRlZiBDT05GSUdfU01QCiAJLyogV2l0aCBTTVAgcmFjZSB3ZSBoYXZlIHRvIHJlY2hlY2sgaGFzaCB0YWJsZSwgYmVjYXVzZQogCSAqIHN1Y2ggZW50cnkgY291bGQgYmUgY3JlYXRlZCBvbiBvdGhlciBjcHUsIHdoaWxlIHdlCkBAIC0zNDUsNyArMzQ5LDcgQEAKIH0KIAogLyogQWRkIGFuIGVudHJ5IHRvIHRoZSAnaXBxJyBxdWV1ZSBmb3IgYSBuZXdseSByZWNlaXZlZCBJUCBkYXRhZ3JhbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXBxICppcF9mcmFnX2NyZWF0ZSh1bnNpZ25lZCBoYXNoLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdTMyIHVzZXIpCitzdGF0aWMgc3RydWN0IGlwcSAqaXBfZnJhZ19jcmVhdGUoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQogewogCXN0cnVjdCBpcHEgKnFwOwogCkBAIC0zNzEsNyArMzc1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcXAtPmxvY2spOwogCWF0b21pY19zZXQoJnFwLT5yZWZjbnQsIDEpOwogCi0JcmV0dXJuIGlwX2ZyYWdfaW50ZXJuKGhhc2gsIHFwKTsKKwlyZXR1cm4gaXBfZnJhZ19pbnRlcm4ocXApOwogCiBvdXRfbm9tZW06CiAJTElNSVRfTkVUREVCVUcoS0VSTl9FUlIgImlwX2ZyYWdfY3JlYXRlOiBubyBtZW1vcnkgbGVmdCAhXG4iKTsKQEAgLTM4NywxMSArMzkxLDEyIEBACiAJX191MzIgc2FkZHIgPSBpcGgtPnNhZGRyOwogCV9fdTMyIGRhZGRyID0gaXBoLT5kYWRkcjsKIAlfX3U4IHByb3RvY29sID0gaXBoLT5wcm90b2NvbDsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGlwcWhhc2hmbihpZCwgc2FkZHIsIGRhZGRyLCBwcm90b2NvbCk7CisJdW5zaWduZWQgaW50IGhhc2g7CiAJc3RydWN0IGlwcSAqcXA7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAlyZWFkX2xvY2soJmlwZnJhZ19sb2NrKTsKKwloYXNoID0gaXBxaGFzaGZuKGlkLCBzYWRkciwgZGFkZHIsIHByb3RvY29sKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShxcCwgbiwgJmlwcV9oYXNoW2hhc2hdLCBsaXN0KSB7CiAJCWlmKHFwLT5pZCA9PSBpZAkJJiYKIAkJICAgcXAtPnNhZGRyID09IHNhZGRyCSYmCkBAIC00MDUsNyArNDEwLDcgQEAKIAl9CiAJcmVhZF91bmxvY2soJmlwZnJhZ19sb2NrKTsKIAotCXJldHVybiBpcF9mcmFnX2NyZWF0ZShoYXNoLCBpcGgsIHVzZXIpOworCXJldHVybiBpcF9mcmFnX2NyZWF0ZShpcGgsIHVzZXIpOwogfQogCiAvKiBJcyB0aGUgZnJhZ21lbnQgdG9vIGZhciBhaGVhZCB0byBiZSBwYXJ0IG9mIGlwcT8gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggOTk4MWRjZC4uYWI5OWJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQlyZWFkX3VubG9jaygmaXBncmVfbG9jayk7CiAJCXJldHVybigwKTsKIAl9Ci0JaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUFJPVF9VTlJFQUNILCAwKTsKKwlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApOwogCiBkcm9wOgogCXJlYWRfdW5sb2NrKCZpcGdyZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2lucHV0LmMgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCmluZGV4IDE4ZDdmYWQuLmM5MDI2ZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJICoJSW5pdGlhbGlzZSB0aGUgdmlydHVhbCBwYXRoIGNhY2hlIGZvciB0aGUgcGFja2V0LiBJdCBkZXNjcmliZXMKIAkgKglob3cgdGhlIHBhY2tldCB0cmF2ZWxzIGluc2lkZSBMaW51eCBuZXR3b3JraW5nLgogCSAqLyAKLQlpZiAobGlrZWx5KHNrYi0+ZHN0ID09IE5VTEwpKSB7CisJaWYgKHNrYi0+ZHN0ID09IE5VTEwpIHsKIAkJaW50IGVyciA9IGlwX3JvdXRlX2lucHV0KHNrYiwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwgaXBoLT50b3MsCiAJCQkJCSBza2ItPmRldik7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggOWJlYmFkMC4uY2JjYWU2NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIHZvaWQgaXBfb3B0aW9uc19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikgCiB7Ci0JdW5zaWduZWQgY2hhciAqIG9wdHB0ciA9IHNrYi0+bmgucmF3OworCXVuc2lnbmVkIGNoYXIgKiBvcHRwdHIgPSBza2ItPm5oLnJhdyArIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCXN0cnVjdCBpcF9vcHRpb25zICogb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CiAJaW50ICBsID0gb3B0LT5vcHRsZW47CiAJaW50ICBvcHRsZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGY3NWZmMWQuLmNmZjljM2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC04Niw4ICs4Niw2IEBACiAKIGludCBzeXNjdGxfaXBfZGVmYXVsdF90dGwgPSBJUERFRlRUTDsKIAotc3RhdGljIGludCBpcF9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmKikpOwotCiAvKiBHZW5lcmF0ZSBhIGNoZWNrc3VtIGZvciBhbiBvdXRnb2luZyBJUCBkYXRhZ3JhbS4gKi8KIF9faW5saW5lX18gdm9pZCBpcF9zZW5kX2NoZWNrKHN0cnVjdCBpcGhkciAqaXBoKQogewpAQCAtNDIxLDcgKzQxOSw3IEBACiAgKglzaW5nbGUgZGV2aWNlIGZyYW1lLCBhbmQgcXVldWUgc3VjaCBhIGZyYW1lIGZvciBzZW5kaW5nLgogICovCiAKLXN0YXRpYyBpbnQgaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopKQoraW50IGlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKSkKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgcmF3ID0gMDsKQEAgLTY3Myw2ICs2NzEsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK0VYUE9SVF9TWU1CT0woaXBfZnJhZ21lbnQpOworCiBpbnQKIGlwX2dlbmVyaWNfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTkwNCw3ICs5MDQsNyBAQAogCQkJICogYmVjYXVzZSB3ZSBoYXZlIG5vIGlkZWEgd2hhdCBmcmFnbWVudCB3aWxsIGJlCiAJCQkgKiB0aGUgbGFzdC4KIAkJCSAqLwotCQkJaWYgKGRhdGFsZW4gPT0gbGVuZ3RoKQorCQkJaWYgKGRhdGFsZW4gPT0gbGVuZ3RoICsgZnJhZ2dhcCkKIAkJCQlhbGxvY2xlbiArPSBydC0+dS5kc3QudHJhaWxlcl9sZW47CiAKIAkJCWlmICh0cmFuc2hkcmxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb21wLmMgYi9uZXQvaXB2NC9pcGNvbXAuYwppbmRleCBjOTUwMjBmLi45NTI3OGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbXAuYworKysgYi9uZXQvaXB2NC9pcGNvbXAuYwpAQCAtODEsOCArODEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaXBjb21wX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKmRlY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpcGNvbXBfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTggbmV4dGhkcjsKIAlpbnQgZXJyID0gMDsKQEAgLTIxMSw3ICsyMTAsNyBAQAogCSAgICBza2ItPmguaWNtcGgtPmNvZGUgIT0gSUNNUF9GUkFHX05FRURFRCkKIAkJcmV0dXJuOwogCi0Jc3BpID0gbnRvaGwobnRvaHMoaXBjaC0+Y3BpKSk7CisJc3BpID0gaHRvbmwobnRvaHMoaXBjaC0+Y3BpKSk7CiAJeCA9IHhmcm1fc3RhdGVfbG9va3VwKCh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLAogCSAgICAgICAgICAgICAgICAgICAgICBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVCk7CiAJaWYgKCF4KQpAQCAtMjkxLDExICsyOTAsOCBAQAogCWlmICghc2NyYXRjaGVzKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jcHUoaSkgewotCQl2b2lkICpzY3JhdGNoID0gKnBlcl9jcHVfcHRyKHNjcmF0Y2hlcywgaSk7Ci0JCWlmIChzY3JhdGNoKQotCQkJdmZyZWUoc2NyYXRjaCk7Ci0JfQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQl2ZnJlZSgqcGVyX2NwdV9wdHIoc2NyYXRjaGVzLCBpKSk7CiAKIAlmcmVlX3BlcmNwdShzY3JhdGNoZXMpOwogfQpAQCAtMzE0LDcgKzMxMCw3IEBACiAKIAlpcGNvbXBfc2NyYXRjaGVzID0gc2NyYXRjaGVzOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQl2b2lkICpzY3JhdGNoID0gdm1hbGxvYyhJUENPTVBfU0NSQVRDSF9TSVpFKTsKIAkJaWYgKCFzY3JhdGNoKQogCQkJcmV0dXJuIE5VTEw7CkBAIC0zNDUsNyArMzQxLDcgQEAKIAlpZiAoIXRmbXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAkJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CiAJfQpAQCAtMzg1LDcgKzM4MSw3IEBACiAJaWYgKCF0Zm1zKQogCQlnb3RvIGVycm9yOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsIDApOwogCQlpZiAoIXRmbSkKIAkJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWVmMDdiMC4uZWEzOThlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDc0LDkgKzQ3NCw2IEBACiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQlnb3RvIG91dDsKLQogCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJcmVhZF9sb2NrKCZpcGlwX2xvY2spOwpAQCAtNTA4LDcgKzUwNSw2IEBACiAJfQogCXJlYWRfdW5sb2NrKCZpcGlwX2xvY2spOwogCi1vdXQ6CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci5jCmluZGV4IGI1YWQ5YWMuLjZhOWUzNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1X2ludDhfdCB0b3M7CiB9OwogCi1zdGF0aWMgdm9pZCBxdWV1ZV9zYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXBfc2F2ZXJvdXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcF9ydF9pbmZvICpydF9pbmZvID0gbmZfaW5mb19yZXJvdXRlKGluZm8pOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcXVldWVfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcF9yZXJvdXRlKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5mX2luZm8gKmluZm8pCiB7CiAJY29uc3Qgc3RydWN0IGlwX3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTE2MSwyMCArMTYxLDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXBfcmVyb3V0ZSA9IHsKLQkucmVyX3NpemUJPSBzaXplb2Yoc3RydWN0IGlwX3J0X2luZm8pLAotCS5zYXZlCQk9IHF1ZXVlX3NhdmUsCi0JLnJlcm91dGUJPSBxdWV1ZV9yZXJvdXRlLAordW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUF9QUkVfUk9VVElORyAmJiBob29rICE9IE5GX0lQX0xPQ0FMX0lOKQorCQkJYnJlYWs7CisJCWlmICgocHJvdG9jb2wgPT0gMCAmJiAhKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgfHwKKwkJICAgICFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJICAgIAkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgICAgc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJaWYgKHByb3RvY29sID09IDApCisJCQlza2ItPmNzdW0gPSAwOworCQllbHNlCisJCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsCisJCQkJCQkgICAgICAgcHJvdG9jb2wsIDApOworCQljc3VtID0gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKK0VYUE9SVF9TWU1CT0wobmZfaXBfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcF9hZmluZm8gPSB7CisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5jaGVja3N1bQk9IG5mX2lwX2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcF9zYXZlcm91dGUsCisJLnJlcm91dGUJPSBuZl9pcF9yZXJvdXRlLAorCS5yb3V0ZV9rZXlfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfcnRfaW5mbyksCiB9OwogCiBzdGF0aWMgaW50IGlwdjRfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVCwgJmlwX3Jlcm91dGUpOworCXJldHVybiBuZl9yZWdpc3Rlcl9hZmluZm8oJm5mX2lwX2FmaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdjRfbmV0ZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKFBGX0lORVQpOworCW5mX3VucmVnaXN0ZXJfYWZpbmZvKCZuZl9pcF9hZmluZm8pOwogfQogCiBtb2R1bGVfaW5pdChpcHY0X25ldGZpbHRlcl9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggODgyYjg0Mi4uZDQwNzI1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTY5LDYgKzY5LDcgQEAKIAl0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSAoRVhQRVJJTUVOVEFMKScKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJUF9ORl9DT05OVFJBQ0sgJiYgTkVURklMVEVSX05FVExJTksKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyE9eSB8fCBORVRGSUxURVJfTkVUTElOSyE9bQorCWRlcGVuZHMgb24gSVBfTkZfTkFUPW4gfHwgSVBfTkZfTkFUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZQogCkBAIC0xNjksOCArMTcwLDggQEAKIAkgIERvY3VtZW50YXRpb24vbW9kdWxlcy50eHQuICBJZiB1bnN1cmUsIHNheSBgTicuCiAKIGNvbmZpZyBJUF9ORl9IMzIzCi0JdHJpc3RhdGUgICdILjMyMyBwcm90b2NvbCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLCisJdHJpc3RhdGUgICdILjMyMyBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpJworCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIEguMzIzIGlzIGEgVm9JUCBzaWduYWxsaW5nIHByb3RvY29sIGZyb20gSVRVLVQuIEFzIG9uZSBvZiB0aGUgbW9zdAogCSAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmQKQEAgLTIyMSwxNiArMjIyLDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUF9ORl9NQVRDSF9NVUxUSVBPUlQKLQl0cmlzdGF0ZSAiTXVsdGlwbGUgcG9ydCBtYXRjaCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKLQloZWxwCi0JICBNdWx0aXBvcnQgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBUQ1Agb3IgVURQIHBhY2tldHMgYmFzZWQgb24KLQkgIGEgc2VyaWVzIG9mIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwb3J0czogbm9ybWFsbHkgYSBydWxlIGNhbiBvbmx5Ci0JICBtYXRjaCBhIHNpbmdsZSByYW5nZSBvZiBwb3J0cy4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBJUF9ORl9NQVRDSF9UT1MKIAl0cmlzdGF0ZSAiVE9TIG1hdGNoIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUwpAQCAtMjcyLDEyICsyNjMsMTIgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUF9ORl9NQVRDSF9BSF9FU1AKLQl0cmlzdGF0ZSAiQUgvRVNQIG1hdGNoIHN1cHBvcnQiCitjb25maWcgSVBfTkZfTUFUQ0hfQUgKKwl0cmlzdGF0ZSAiQUggbWF0Y2ggc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTCiAJaGVscAotCSAgVGhlc2UgdHdvIG1hdGNoIGV4dGVuc2lvbnMgKGBhaCcgYW5kIGBlc3AnKSBhbGxvdyB5b3UgdG8gbWF0Y2ggYQotCSAgcmFuZ2Ugb2YgU1BJcyBpbnNpZGUgQUggb3IgRVNQIGhlYWRlcnMgb2YgSVBTZWMgcGFja2V0cy4KKwkgIFRoaXMgbWF0Y2ggZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8gbWF0Y2ggYSByYW5nZSBvZiBTUElzCisJICBpbnNpZGUgQUggaGVhZGVyIG9mIElQU2VjIHBhY2tldHMuCiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0zNTQsNyArMzQ1LDcgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSVBfTkZfVEFSR0VUX1VMT0cKLQl0cmlzdGF0ZSAiVUxPRyB0YXJnZXQgc3VwcG9ydCAoT0JTT0xFVEUpIgorCXRyaXN0YXRlICJVTE9HIHRhcmdldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKIAktLS1oZWxwLS0tCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCBmMmNkOWE2Li40NjFjYjFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC01MywxMyArNTMsMTIgQEAKICMgbWF0Y2hlcwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCkgKz0gaXB0X2hhc2hsaW1pdC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRSkgKz0gaXB0X2lwcmFuZ2Uubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVCkgKz0gaXB0X211bHRpcG9ydC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIpICs9IGlwdF9vd25lci5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfVE9TKSArPSBpcHRfdG9zLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQpICs9IGlwdF9yZWNlbnQubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0VDTikgKz0gaXB0X2Vjbi5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUCkgKz0gaXB0X2RzY3Aubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FIX0VTUCkgKz0gaXB0X2FoLm8gaXB0X2VzcC5vCitvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUgpICs9IGlwdF9haC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfVFRMKSArPSBpcHRfdHRsLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSkgKz0gaXB0X2FkZHJ0eXBlLm8KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggYTQ0YTVkNy4uZDBkMTkxOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC02NDYsNyArNjQ2LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC02OTYsNyArNjk2LDcgQEAKIAkJCSAgIGNvdW50ZXJzLAogCQkJICAgJmkpOwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CkBAIC05NDgsNyArOTQ4LDcgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwotCWlmIChwcml2YXRlLT5udW1iZXIgIT0gcGFkZGMtPm51bV9jb3VudGVycykgeworCWlmIChwcml2YXRlLT5udW1iZXIgIT0gdG1wLm51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCBkMGQzNzljLi5kN2M0NzJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC0xODEsMzMgKzE4MSwyNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhcnB0YWJsZV9maWx0ZXJfaW5pdCh2b2lkKQogewotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCS8qIFJlZ2lzdGVyIHRhYmxlICovCiAJcmV0ID0gYXJwdF9yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlciwgJmluaXRpYWxfdGFibGUucmVwbCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJaWYgKChyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSkpIDwgMCkKLQkJCWdvdG8gY2xlYW51cF9ob29rczsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhhcnB0X29wcywgQVJSQVlfU0laRShhcnB0X29wcykpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfdGFibGU7CiAJcmV0dXJuIHJldDsKIAotY2xlYW51cF9ob29rczoKLQl3aGlsZSAoLS1pID49IDApCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmYXJwdF9vcHNbaV0pOwotCitjbGVhbnVwX3RhYmxlOgogCWFycHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFycHRhYmxlX2ZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnB0X29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZhcnB0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGFycHRfb3BzLCBBUlJBWV9TSVpFKGFycHRfb3BzKSk7CiAJYXJwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjZWFhYmMxLi5hMjk3ZGE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZWNhY2hlID0gJnBlcl9jcHUoaXBfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKIAkJaWYgKGVjYWNoZS0+Y3QpCiAJCQlpcF9jb25udHJhY2tfcHV0KGVjYWNoZS0+Y3QpOwpAQCAtMTMxOCw2ICsxMzE4LDcgQEAKIAkJCS50dXBsZS5kc3QudS50Y3AucG9ydDsKIAkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQogCQkJLnR1cGxlLmRzdC5pcDsKKwkJbWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpOwogCiAJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiAldS4ldS4ldS4ldSAldVxuIiwKIAkJICAgICAgIE5JUFFVQUQoc2luLnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi5zaW5fcG9ydCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCmluZGV4IGRhZWIxMzkuLjUxOGY1ODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKQEAgLTksMzcgKzksNiBAQAogICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8KLSAqCi0gKiBDaGFuZ2VzOgotICogCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBdm9pZCBleGNlc3NpdmUgc3RhY2sgdXNhZ2UgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgMy4gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLWxpbmVhciBza2IgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQotICogCSAgNC4gRml4ZWQgbWlzc2luZyBILjI0NSBtb2R1bGUgb3duZXIgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDUuIEF2b2lkIGxvbmcgUkFTIGV4cGVjdGF0aW9uIGNoYWlucyAoUGF0cmljayBNY0hhcmR5KQotICogCSAgNi4gRml4ZWQgaW5jb3JyZWN0IF9fZXhpdCBhdHRyaWJ1dGUgKFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDcuIEVsaW1pbmF0ZWQgdW5uZWNlc3NhcnkgcmV0dXJuIGNvZGUKLSAqIAkgIDguIEZpeGVkIGluY29ycmVjdCB1c2Ugb2YgTkFUIGRhdGEgZnJvbSBjb25udHJhY2sgY29kZSAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA5LiBGaXhlZCBUVEwgY2FsY3VsYXRpb24gZXJyb3IgaW4gUkNGCi0gKiAJICAxMC4gQWRkZWQgVFRMIHN1cHBvcnQgaW4gUlJRCi0gKiAJICAxMS4gQmV0dGVyIHN1cHBvcnQgZm9yIHNlcGFyYXRlIFRQS1QgaGVhZGVyIGFuZCBkYXRhCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQotICogCSAgMy4gU3BsaXR0ZWQgQVNOLjEgY29kZSBhbmQgZGF0YSAoc3VnZ2VzdGVkIGJ5IFBhdHJpY2sgTWNIYXJkeSkKLSAqIAkgIDQuIFNvcnQgQVNOLjEgZGF0YSB0byBhdm9pZCBmb3J3YXJkaW5nIGRlY2xhcmF0aW9ucyAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICA1LiBSZXNldCBuZXh0IFRQS1QgZGF0YSBsZW5ndGggaW4gZ2V0X3Rwa3RfZGF0YSgpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNTQsOCArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIAotI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCi0KICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKICNlbHNlCkBAIC02Myw2ICszMCwxMCBAQAogI2VuZGlmCiAKIC8qIFBhcmFtZXRlcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9ycnFfdHRsID0gMzAwOworbW9kdWxlX3BhcmFtKGRlZmF1bHRfcnJxX3R0bCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfcnJxX3R0bCwgInVzZSB0aGlzIFRUTCBpZiBpdCdzIG1pc3NpbmcgaW4gUlJRIik7CisKIHN0YXRpYyBpbnQgZ2tyb3V0ZWRfb25seSA9IDE7CiBtb2R1bGVfcGFyYW0oZ2tyb3V0ZWRfb25seSwgaW50LCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZ2tyb3V0ZWRfb25seSwgIm9ubHkgYWNjZXB0IGNhbGxzIGZyb20gZ2F0ZWtlZXBlciIpOwpAQCAtMTkxLDYgKzE2Miw4IEBACiAKIAkvKiBWYWxpZGF0ZSBUUEtUIGxlbmd0aCAqLwogCXRwa3RsZW4gPSB0cGt0WzJdICogMjU2ICsgdHBrdFszXTsKKwlpZiAodHBrdGxlbiA8IDQpCisJCWdvdG8gY2xlYXJfb3V0OwogCWlmICh0cGt0bGVuID4gdGNwZGF0YWxlbikgewogCQlpZiAodGNwZGF0YWxlbiA9PSA0KSB7CS8qIFNlcGFyYXRlIFRQS1QgaGVhZGVyICovCiAJCQkvKiBOZXRtZWV0aW5nIHNlbmRzIFRQS1QgaGVhZGVyIGFuZCBkYXRhIHNlcGFyYXRlbHkgKi8KQEAgLTIyMiw4ICsxOTUsOCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBnZXRfaDI0NV9hZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCSAgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpCitzdGF0aWMgaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyICpwOwogCkBAIC0xMzAyLDcgKzEyNzUsNyBAQAogCQlERUJVR1AoImlwX2N0X3JhczogUlJRIFRUTCA9ICV1IHNlY29uZHNcbiIsIHJycS0+dGltZVRvTGl2ZSk7CiAJCWluZm8tPnRpbWVvdXQgPSBycnEtPnRpbWVUb0xpdmU7CiAJfSBlbHNlCi0JCWluZm8tPnRpbWVvdXQgPSAwOworCQlpbmZvLT50aW1lb3V0ID0gZGVmYXVsdF9ycnFfdHRsOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzEzLDE4ICsxNjg2LDE3IEBACiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwogCi1FWFBPUlRfU1lNQk9MKGdldF9oMjQ1X2FkZHIpOwotRVhQT1JUX1NZTUJPTChnZXRfaDIyNV9hZGRyKTsKLUVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KTsKLUVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KTsKLUVYUE9SVF9TWU1CT0woc2V0X2gyNDVfYWRkcl9ob29rKTsKLUVYUE9SVF9TWU1CT0woc2V0X2gyMjVfYWRkcl9ob29rKTsKLUVYUE9SVF9TWU1CT0woc2V0X3NpZ19hZGRyX2hvb2spOwotRVhQT1JUX1NZTUJPTChzZXRfcmFzX2FkZHJfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKG5hdF9ydHBfcnRjcF9ob29rKTsKLUVYUE9SVF9TWU1CT0wobmF0X3QxMjBfaG9vayk7Ci1FWFBPUlRfU1lNQk9MKG5hdF9oMjQ1X2hvb2spOwotRVhQT1JUX1NZTUJPTChuYXRfcTkzMV9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9oMjI1X2FkZHIpOworRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdCk7CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfaDI0NV9hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X2gyMjVfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9zaWdfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9yYXNfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF9ydHBfcnRjcF9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF90MTIwX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X2gyNDVfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChuYXRfcTkzMV9ob29rKTsKIAogTU9EVUxFX0FVVEhPUigiSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYwppbmRleCBhZmE1MjUxLi4yNmRmZWNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmMgLSBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMwogICogCQkJICAgICAgCSAgICAgY29ubnRyYWNrL05BVCBtb2R1bGUuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA2IGJ5IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQGhvdG1haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2IGJ5IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgogICoKQEAgLTE1LDcgKzE1LDcgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgotI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaD4KIAogLyogVHJhY2UgRmxhZyAqLwogI2lmbmRlZiBIMzIzX1RSQUNFCkBAIC01MjgsMTQgKzUyOCwxNSBAQAogCiAJCQkvKiBEZWNvZGUgKi8KIAkJCWlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLAotCQkJCQkJCSAgbGV2ZWwgKyAxKSkgPgotCQkJICAgIEgzMjNfRVJST1JfU1RPUCkKKwkJCQkJCQkgIGxldmVsICsgMSkpIDwKKwkJCSAgICBIMzIzX0VSUk9SX05PTkUpCiAJCQkJcmV0dXJuIGVycjsKIAogCQkJYnMtPmN1ciA9IGJlZyArIGxlbjsKIAkJCWJzLT5iaXQgPSAwOwogCQl9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsCi0JCQkJCQkJIGxldmVsICsgMSkpKQorCQkJCQkJCSBsZXZlbCArIDEpKSA8CisJCQkgICBIMzIzX0VSUk9SX05PTkUpCiAJCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTU0LDcgKzU1NSw3IEBACiAKIAkvKiBEZWNvZGUgdGhlIGV4dGVuc2lvbiBjb21wb25lbnRzICovCiAJZm9yIChvcHQgPSAwOyBvcHQgPCBibXAyX2xlbjsgb3B0KyssIGkrKywgc29uKyspIHsKLQkJaWYgKHNvbi0+YXR0ciAmIFNUT1ApIHsKKwkJaWYgKGkgPCBmLT51YiAmJiBzb24tPmF0dHIgJiBTVE9QKSB7CiAJCQlQUklOVCgiJSoucyVzXG4iLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLCAiICIsCiAJCQkgICAgICBzb24tPm5hbWUpOwogCQkJcmV0dXJuIEgzMjNfRVJST1JfU1RPUDsKQEAgLTU4NCw4ICs1ODUsOCBAQAogCQliZWcgPSBicy0+Y3VyOwogCiAJCWlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLAotCQkJCQkJICBsZXZlbCArIDEpKSA+Ci0JCSAgICBIMzIzX0VSUk9SX1NUT1ApCisJCQkJCQkgIGxldmVsICsgMSkpIDwKKwkJICAgIEgzMjNfRVJST1JfTk9ORSkKIAkJCXJldHVybiBlcnI7CiAKIAkJYnMtPmN1ciA9IGJlZyArIGxlbjsKQEAgLTY2MCwxOCArNjYxLDIwIEBACiAJCQkJCQkJICBpIDwKIAkJCQkJCQkgIGVmZmVjdGl2ZV9jb3VudCA/CiAJCQkJCQkJICBiYXNlIDogTlVMTCwKLQkJCQkJCQkgIGxldmVsICsgMSkpID4KLQkJCSAgICBIMzIzX0VSUk9SX1NUT1ApCisJCQkJCQkJICBsZXZlbCArIDEpKSA8CisJCQkgICAgSDMyM19FUlJPUl9OT05FKQogCQkJCXJldHVybiBlcnI7CiAKIAkJCWJzLT5jdXIgPSBiZWcgKyBsZW47CiAJCQlicy0+Yml0ID0gMDsKIAkJfSBlbHNlCi0JCSAgICBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tPnR5cGVdKSAoYnMsIHNvbiwKLQkJCQkJCSAgICAgIGkgPCBlZmZlY3RpdmVfY291bnQgPwotCQkJCQkJICAgICAgYmFzZSA6IE5VTEwsCi0JCQkJCQkgICAgICBsZXZlbCArIDEpKSkKLQkJCXJldHVybiBlcnI7CisJCQlpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tPnR5cGVdKSAoYnMsIHNvbiwKKwkJCQkJCQkgIGkgPAorCQkJCQkJCSAgZWZmZWN0aXZlX2NvdW50ID8KKwkJCQkJCQkgIGJhc2UgOiBOVUxMLAorCQkJCQkJCSAgbGV2ZWwgKyAxKSkgPAorCQkJICAgIEgzMjNfRVJST1JfTk9ORSkKKwkJCQlyZXR1cm4gZXJyOwogCiAJCWlmIChiYXNlKQogCQkJYmFzZSArPSBzb24tPm9mZnNldDsKQEAgLTcwMyw2ICs3MDYsMTAgQEAKIAkJdHlwZSA9IGdldF9iaXRzKGJzLCBmLT5zeik7CiAJfQogCisJLyogV3JpdGUgVHlwZSAqLworCWlmIChiYXNlKQorCQkqKHVuc2lnbmVkICopIGJhc2UgPSB0eXBlOworCiAJLyogQ2hlY2sgUmFuZ2UgKi8KIAlpZiAodHlwZSA+PSBmLT51YikgewkvKiBOZXdlciB2ZXJzaW9uPyAqLwogCQlCWVRFX0FMSUdOKGJzKTsKQEAgLTcxMiwxMCArNzE5LDYgQEAKIAkJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKIAl9CiAKLQkvKiBXcml0ZSBUeXBlICovCi0JaWYgKGJhc2UpCi0JCSoodW5zaWduZWQgKikgYmFzZSA9IHR5cGU7Ci0KIAkvKiBUcmFuc2ZlciB0byBzb24gbGV2ZWwgKi8KIAlzb24gPSAmZi0+ZmllbGRzW3R5cGVdOwogCWlmIChzb24tPmF0dHIgJiBTVE9QKSB7CkBAIC03MzUsMTMgKzczOCwxNCBAQAogCQl9CiAJCWJlZyA9IGJzLT5jdXI7CiAKLQkJaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpID4KLQkJICAgIEgzMjNfRVJST1JfU1RPUCkKKwkJaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIDwKKwkJICAgIEgzMjNfRVJST1JfTk9ORSkKIAkJCXJldHVybiBlcnI7CiAKIAkJYnMtPmN1ciA9IGJlZyArIGxlbjsKIAkJYnMtPmJpdCA9IDA7Ci0JfSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCArIDEpKSkKKwl9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIDwKKwkJICAgSDMyM19FUlJPUl9OT05FKQogCQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYwppbmRleCA3ZDNiYTQzLi44Y2NmZTE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCkBAIC00NjksOCArNDY5LDggQEAKIAkJCURFQlVHUCgiJXMgYnV0IG5vIHNlc3Npb25cbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKLQkJICAgICYmIGluZm8tPnNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgeworCQlpZiAoaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKKwkJICAgICYmIGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgewogCQkJREVCVUdQKCIlcyBidXQgbmV2ZXIgc2VudCBJTl9DQUxMX1JFUExZXG4iLAogCQkJCXBwdHBfbXNnX25hbWVbbXNnXSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggOWI2ZTE5Yi4uMDFiZDdjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTE2NTgsNyArMTY1OCw3IEBACiAJcHJpbnRrKCJjdG5ldGxpbms6IHVucmVnaXN0ZXJpbmcgZnJvbSBuZm5ldGxpbmsuXG4iKTsKIAogI2lmZGVmIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTCi0JaXBfY29ubnRyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoJmN0bmxfbm90aWZpZXJfZXhwKTsKKwlpcF9jb25udHJhY2tfZXhwZWN0X3VucmVnaXN0ZXJfbm90aWZpZXIoJmN0bmxfbm90aWZpZXJfZXhwKTsKIAlpcF9jb25udHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcigmY3RubF9ub3RpZmllcik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCAzMDIxYWYwLi5kOGIxNGE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjI0LDI1ICsyMjQsMTQgQEAKIAl9CiAKIAkvKiBTZWUgaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jICovCi0JaWYgKGhvb2tudW0gIT0gTkZfSVBfUFJFX1JPVVRJTkcpCi0JCWdvdG8gY2hlY2tzdW1fc2tpcHBlZDsKLQotCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX0hXOgotCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpIAotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLT5jc3VtID0gMDsKLQkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQotCQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIElDTVAgY2hlY2tzdW0gIik7Ci0JCQlyZXR1cm4gLU5GX0FDQ0VQVDsKLQkJfQorCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgc2tiLT5uaC5pcGgtPmlobCAqIDQsIDApKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLWNoZWNrc3VtX3NraXBwZWQ6CiAJLyoKIAkgKgkxOCBpcyB0aGUgaGlnaGVzdCAna25vd24nIElDTVAgdHlwZS4gQW55dGhpbmcgZWxzZSBpcyBhIG15c3RlcnkKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA1MjU5YWJkLi4wNDE2MDczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMjM1LDEyICsyMzUsMTUgQEAKIAkJCWZsYWcgPSAxOwogCQl9CiAKLQkJLyogQ29va2llIEFjay9FY2hvIGNodW5rcyBub3QgdGhlIGZpcnN0IE9SIAotCQkgICBJbml0IC8gSW5pdCBBY2sgLyBTaHV0ZG93biBjb21wbCBjaHVua3Mgbm90IHRoZSBvbmx5IGNodW5rcyAqLwotCQlpZiAoKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9DT09LSUVfQUNLIAorCQkvKgorCQkgKiBDb29raWUgQWNrL0VjaG8gY2h1bmtzIG5vdCB0aGUgZmlyc3QgT1IKKwkJICogSW5pdCAvIEluaXQgQWNrIC8gU2h1dGRvd24gY29tcGwgY2h1bmtzIG5vdCB0aGUgb25seSBjaHVua3MKKwkJICogT1IgemVyby1sZW5ndGguCisJCSAqLworCQlpZiAoKChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQ09PS0lFX0FDSwogCQkJfHwgc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9FQ0hPCiAJCQl8fCBmbGFnKQotCQkgICAgICYmIGNvdW50ICE9MCApIHsKKwkJICAgICAgJiYgY291bnQgIT0wKSB8fCAhc2NoLT5sZW5ndGgpIHsKIAkJCURFQlVHUCgiQmFzaWMgY2hlY2tzIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZTBkYzM3MC4uMDYyYjI1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC04NzAsMTEgKzg3MCw4IEBACiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORwotCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQotCSAgICAmJiBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAotCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KLQkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBpcGgtPmlobCo0LCB0Y3BsZW4sIDApKSkgeworCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgImlwX2N0X3RjcDogYmFkIFRDUCBjaGVja3N1bSAiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDU1YjdkMzIuLjcwODk5ODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMTIwLDExICsxMjAsOCBAQAogCSAqIGJlY2F1c2UgdGhlIHNlbWFudGljIG9mIENIRUNLU1VNX0hXIGlzIGRpZmZlcmVudCB0aGVyZSAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHVkcGxlbiwgSVBQUk9UT19VRFAsCi0JCQkgICAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJICAgICAgCSA6IHNrYl9jaGVja3N1bShza2IsIGlwaC0+aWhsKjQsIHVkcGxlbiwgMCkpKSB7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBpcGgtPmlobCAqIDQsIElQUFJPVE9fVURQKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJICAiaXBfY3RfdWRwOiBiYWQgVURQIGNoZWNrc3VtICIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA1MjA3NjAyLi45MjlkNjFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNDY5LDcwICs0NjksNjMgQEAKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCiAgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25udHJhY2tfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19pbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKLX07Ci0KLS8qIGhlbHBlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX2Nvbm50cmFja19oZWxwLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi0vKiBSZWZyYWdtZW50ZXI7IGxhc3QgY2hhbmNlLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwX2Nvbm50cmFja19kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorCX0sCisJeworCQkuaG9vawkJPSBpcF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCisJfSwKIH07CiAKIC8qIFN5c2N0bCBzdXBwb3J0ICovCkBAIC03ODMsMTIyICs3NzYsNiBAQAogRVhQT1JUX1NZTUJPTChpcF9jdF9sb2dfaW52YWxpZCk7CiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OwotI2VuZGlmCi0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQotCXJldCA9IGlwX2Nvbm50cmFja19pbml0KCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZXQgPSAtRU5PTUVNOwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKLQlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OwotCi0JcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCi0JCQkJCSZleHBfZmlsZV9vcHMpOwotCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOwotCWlmICghcHJvY19zdGF0KQotCQlnb3RvIGNsZWFudXBfcHJvY19leHA7Ci0KLQlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7Ci0JcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGRlZnJhZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsX291dCBkZWZyYWcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhlbHBlciBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOwotCX0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfaGVscGVyX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciBwb3N0cm91dGluZyBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaGVscGVyaW5vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcm91dG9wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM7Ci0JfQotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7Ci0JaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9sb2NhbGlub3BzOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLQotIGNsZWFudXA6Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcF9jdF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6Ci0jZW5kaWYKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOwotIGNsZWFudXBfaW5vdXRhbmRsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0gY2xlYW51cF9oZWxwZXJpbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19pbl9vcHMpOwotIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwotIGNsZWFudXBfcHJvY19zdGF0OgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOwotIGNsZWFudXBfcHJvY19leHA6Ci0JcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7Ci0gY2xlYW51cF9wcm9jOgotCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7Ci0gY2xlYW51cF9pbml0OgotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCi0JaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKLSBjbGVhbnVwX25vdGhpbmc6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogRklYTUU6IEFsbG93IE5VTEwgZnVuY3Rpb25zIGFuZCBzdWIgaW4gcG9pbnRlcnMgdG8gZ2VuZXJpYyBmb3IKICAgIHRoZW0uIC0tUlIgKi8KIGludCBpcF9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCkBAIC05MjEsNyArNzk4LDcgQEAKIAl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CiAJaXBfY3RfcHJvdG9zW3Byb3RvLT5wcm90b10gPSAmaXBfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CiAJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7Ci0JCisKIAkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIApAQCAtOTMxLDEyICs4MDgsNzcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKKyNlbmRpZgorCWludCByZXQgPSAwOworCisJcmV0ID0gaXBfY29ubnRyYWNrX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmV0ID0gLUVOT01FTTsKKwlwcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFjayIsIDA0NDAsICZjdF9maWxlX29wcyk7CisJaWYgKCFwcm9jKSBnb3RvIGNsZWFudXBfaW5pdDsKKworCXByb2NfZXhwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoImlwX2Nvbm50cmFja19leHBlY3QiLCAwNDQwLAorCQkJCQkmZXhwX2ZpbGVfb3BzKTsKKwlpZiAoIXByb2NfZXhwKSBnb3RvIGNsZWFudXBfcHJvYzsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpcF9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBjbGVhbnVwX3Byb2NfZXhwOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKyNlbmRpZgorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcF9jb25udHJhY2tfb3BzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7CisJCWdvdG8gY2xlYW51cF9wcm9jX3N0YXQ7CisJfQorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpcF9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKGlwX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9ob29rczsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorIGNsZWFudXBfaG9va3M6CisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcF9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwX2Nvbm50cmFja19vcHMpKTsKKyNlbmRpZgorIGNsZWFudXBfcHJvY19zdGF0OgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisJaXBfY29ubnRyYWNrX2NsZWFudXAoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBfY3Rfc3lzY3RsX2hlYWRlcik7CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwX2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXBfY29ubnRyYWNrX29wcykpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIpOworCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrIik7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwlpcF9jb25udHJhY2tfY2xlYW51cCgpOwogfQogCiBtb2R1bGVfaW5pdChpcF9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwppbmRleCBhMGJjODgzLi5kNDU2NjNkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCkBAIC03LDI0ICs3LDYgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgJ2JydXRlIGZvcmNlJyBILjMyMyBOQVQgbW9kdWxlIGJ5CiAgKiBKb3pzZWYgS2FkbGVjc2lrIDxrYWRsZWNAYmxhY2tob2xlLmtma2kuaHU+Ci0gKgotICogQ2hhbmdlczoKLSAqCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCi0gKgotICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCi0gKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCi0gKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCi0gKgkgIDMuIE1pbm9yIGZpeGVzCi0gKgotICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMwotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5Ci0gKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCi0gKiAJICAyLiBBZGRlZCBzdXBwb3J0IGZvciBub24tbGluZWFyIHNrYiAoYmFzZWQgb24gUGF0cmljayBNY0hhcmR5J3MgcGF0Y2gpCi0gKiAJICAzLiBFbGltaW5hdGVkIHVubmVjZXNzYXJ5IHJldHVybiBjb2RlCi0gKgotICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAotICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKLSAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQxLDY1ICsyMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgogCi0jaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCIKLQogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awogI2Vsc2UKICNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCi1leHRlcm4gaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7Ci1leHRlcm4gaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOwotZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKLQkJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKLWV4dGVybiB2b2lkIGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCi0JCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7Ci1leHRlcm4gaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKLQkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAotCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKLWV4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCi0JCQkJIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKLQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKLQkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCQkgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKLQkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAotCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKLWV4dGVybiBpbnQgKCpuYXRfdDEyMF9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAotCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCi0JCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKLQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwotZXh0ZXJuIGludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCi0JCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkgICAgIGludCBpZHgsIHVfaW50MTZfdCBwb3J0LAotCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNldF9hZGRyKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jCmluZGV4IDZjNDg5OWQuLjk2Y2VhYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYwpAQCAtNDksMTUgKzQ5LDE1IEBACiAJICAgICBjb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1pbiwKIAkgICAgIGNvbnN0IHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byAqbWF4KQogewotCXVfaW50MzJfdCBrZXk7CisJX19iZTE2IGtleTsKIAogCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKIAkJa2V5ID0gdHVwbGUtPnNyYy51LmdyZS5rZXk7CiAJZWxzZQogCQlrZXkgPSB0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKIAotCXJldHVybiBudG9obChrZXkpID49IG50b2hsKG1pbi0+Z3JlLmtleSkKLQkJJiYgbnRvaGwoa2V5KSA8PSBudG9obChtYXgtPmdyZS5rZXkpOworCXJldHVybiBudG9ocyhrZXkpID49IG50b2hzKG1pbi0+Z3JlLmtleSkKKwkJJiYgbnRvaHMoa2V5KSA8PSBudG9ocyhtYXgtPmdyZS5rZXkpOwogfQogCiAvKiBnZW5lcmF0ZSB1bmlxdWUgdHVwbGUgLi4uICovCkBAIC04MSwxNCArODEsMTQgQEAKIAkJbWluID0gMTsKIAkJcmFuZ2Vfc2l6ZSA9IDB4ZmZmZjsKIAl9IGVsc2UgewotCQltaW4gPSBudG9obChyYW5nZS0+bWluLmdyZS5rZXkpOwotCQlyYW5nZV9zaXplID0gbnRvaGwocmFuZ2UtPm1heC5ncmUua2V5KSAtIG1pbiArIDE7CisJCW1pbiA9IG50b2hzKHJhbmdlLT5taW4uZ3JlLmtleSk7CisJCXJhbmdlX3NpemUgPSBudG9ocyhyYW5nZS0+bWF4LmdyZS5rZXkpIC0gbWluICsgMTsKIAl9CiAKIAlERUJVR1AoIm1pbiA9ICV1LCByYW5nZV9zaXplID0gJXVcbiIsIG1pbiwgcmFuZ2Vfc2l6ZSk7IAogCiAJZm9yIChpID0gMDsgaSA8IHJhbmdlX3NpemU7IGkrKywga2V5KyspIHsKLQkJKmtleXB0ciA9IGh0b25sKG1pbiArIGtleSAlIHJhbmdlX3NpemUpOworCQkqa2V5cHRyID0gaHRvbnMobWluICsga2V5ICUgcmFuZ2Vfc2l6ZSk7CiAJCWlmICghaXBfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGNvbm50cmFjaykpCiAJCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jCmluZGV4IGVmYmE4YzQuLjFhYmE5MjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAkudGFyZ2V0CQk9IGlwdF9kbmF0X3RhcmdldCwKIAkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdCksCiAJLnRhYmxlCQk9ICJuYXQiLAotCS5ob29rcwkJPSAxIDw8IE5GX0lQX1BSRV9ST1VUSU5HLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9PVVQpLAogCS5jaGVja2VudHJ5CT0gaXB0X2RuYXRfY2hlY2tlbnRyeSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggYzYyMjUzOC4uYzMzMjQ0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTc2OCw2ICs3NjgsNyBAQAogCQkJbGVuICo9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKIAkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpICsgbGVuLCBHRlBfQVRPTUlDKTsKIAkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShscCk7CiAJCQkJa2ZyZWUoaWQpOwogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCXByaW50aygiT09NIGluIGJzYWxnICglZClcbiIsIF9fTElORV9fKTsKQEAgLTEwMDMsMTIgKzEwMDQsMTIgQEAKIAkJCiAJcmV0dXJuIDE7CiAKK2Vycl9hZGRyX2ZyZWU6CisJa2ZyZWUoKHVuc2lnbmVkIGxvbmcgKil0cmFwLT5pcF9hZGRyZXNzKTsKKwogZXJyX2lkX2ZyZWU6CiAJa2ZyZWUodHJhcC0+aWQpOwogCi1lcnJfYWRkcl9mcmVlOgotCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC0+aXBfYWRkcmVzcyk7Ci0JCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjYsMTEgKzExMjcsMTAgQEAKIAkJc3RydWN0IHNubXBfdjFfdHJhcCB0cmFwOwogCQl1bnNpZ25lZCBjaGFyIHJldCA9IHNubXBfdHJhcF9kZWNvZGUoJmN0eCwgJnRyYXAsIG1hcCwgY2hlY2spOwogCQkKLQkJLyogRGlzY2FyZCB0cmFwIGFsbG9jYXRpb25zIHJlZ2FyZGxlc3MgKi8KLQkJa2ZyZWUodHJhcC5pZCk7Ci0JCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC5pcF9hZGRyZXNzKTsKLQkJCi0JCWlmICghcmV0KQorCQlpZiAocmV0KSB7CisJCQlrZnJlZSh0cmFwLmlkKTsKKwkJCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC5pcF9hZGRyZXNzKTsKKwkJfSBlbHNlIAogCQkJcmV0dXJuIHJldDsKIAkJCiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKaW5kZXggMzUwNWIwZC4uNjdlNjc2NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKQEAgLTIxOSw4ICsyMTksMTAgQEAKIAkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogeworI2lmZGVmIENPTkZJR19YRlJNCiAJc3RydWN0IGlwX2Nvbm50cmFjayAqY3Q7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgcmV0OwogCiAJLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCkBAIC0yOTksNjkgKzMwMSw2MyBAQAogCiAvKiBXZSBtdXN0IGJlIGFmdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLiAqLwogCi0vKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfbmF0X2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfb3BzW10gPSB7CisJLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2luLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKKwl9LAorCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9vdXQsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKKwl9LAorCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKKwl9LAorCS8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi8KKwl7CisJCS5ob29rCQk9IGlwX25hdF9sb2NhbF9mbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAorCX0sCisJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2ZuLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKKwl9LAorCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworCXsKKwkJLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAorCX0sCiB9OwogCi0vKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9vdXQsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU1JDLAotfTsKLQotLyogQWZ0ZXIgY29ubnRyYWNrLCBhZGp1c3Qgc2VxdWVuY2UgbnVtYmVyICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9hZGp1c3Rfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcF9uYXRfYWRqdXN0LAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NFUV9BREpVU1QsCi19OwotCi0vKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9sb2NhbF9mbiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QsCi19OwotCi0vKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlIGZvciByZXBseSBwYWNrZXRzIG9mIExPQ0FMX09VVCBETkFUICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9sb2NhbF9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXBfbmF0X2ZuLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU1JDLAotfTsKLQotLyogQWZ0ZXIgY29ubnRyYWNrLCBhZGp1c3Qgc2VxdWVuY2UgbnVtYmVyICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX25hdF9hZGp1c3RfaW5fb3BzID0gewotCS5ob29rCQk9IGlwX25hdF9hZGp1c3QsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAotfTsKLQotCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwX25hdF9zdGFuZGFsb25lX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAogCW5lZWRfY29ubnRyYWNrKCk7CiAKLQlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKLQogI2lmZGVmIENPTkZJR19YRlJNCiAJQlVHX09OKGlwX25hdF9kZWNvZGVfc2Vzc2lvbiAhPSBOVUxMKTsKIAlpcF9uYXRfZGVjb2RlX3Nlc3Npb24gPSBuYXRfZGVjb2RlX3Nlc3Npb247CkBAIC0zNzEsNTAgKzM2NywxMyBAQAogCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCBzZXR1cCBydWxlcy5cbiIpOwogCQlnb3RvIGNsZWFudXBfZGVjb2RlX3Nlc3Npb247CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9pbl9vcHMpOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwX25hdF9vcHMsIEFSUkFZX1NJWkUoaXBfbmF0X29wcykpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGluIGhvb2suXG4iKTsKKwkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKIAkJZ290byBjbGVhbnVwX3J1bGVfaW5pdDsKIAl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGFkanVzdCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9vdXRvcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3Rfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgYWRqdXN0IG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9hZGp1c3Rpbl9vcHM7Ci0JfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfYWRqdXN0b3V0X29wczsKLQl9Ci0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX2luX29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgaW4gaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfbG9jYWxvdXRvcHM7Ci0JfQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX2luX29wcyk7Ci0gY2xlYW51cF9sb2NhbG91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2FkanVzdG91dF9vcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfYWRqdXN0X291dF9vcHMpOwotIGNsZWFudXBfYWRqdXN0aW5fb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9pbl9vcHMpOwotIGNsZWFudXBfb3V0b3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X291dF9vcHMpOwotIGNsZWFudXBfaW5vcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfaW5fb3BzKTsKICBjbGVhbnVwX3J1bGVfaW5pdDoKIAlpcF9uYXRfcnVsZV9jbGVhbnVwKCk7CiAgY2xlYW51cF9kZWNvZGVfc2Vzc2lvbjoKQEAgLTQyNSwxNCArMzg0LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXBfbmF0X3N0YW5kYWxvbmVfaW5pdCh2b2lkKQotewotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBpcF9uYXRfc3RhbmRhbG9uZV9maW5pKHZvaWQpCiB7Ci0JaW5pdF9vcl9jbGVhbnVwKDApOworCW5mX3VucmVnaXN0ZXJfaG9va3MoaXBfbmF0X29wcywgQVJSQVlfU0laRShpcF9uYXRfb3BzKSk7CisJaXBfbmF0X3J1bGVfY2xlYW51cCgpOworI2lmZGVmIENPTkZJR19YRlJNCisJaXBfbmF0X2RlY29kZV9zZXNzaW9uID0gTlVMTDsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNlbmRpZgogfQogCiBtb2R1bGVfaW5pdChpcF9uYXRfc3RhbmRhbG9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggODk2YTI0NC4uYjkzZjA0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTY2MiwxNSArNjYyLDExIEBACiAJLm91dGZuCT0gJmlwcV9lbnF1ZXVlX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwX3F1ZXVlX2luaXQodm9pZCkKIHsKIAlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CiAJCi0JaWYgKCFpbml0KQotCQlnb3RvIGNsZWFudXA7Ci0KIAluZXRsaW5rX3JlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogCWlwcW5sID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfRklSRVdBTEwsIDAsIGlwcV9yY3Zfc2ssCiAJCQkJICAgICAgVEhJU19NT0RVTEUpOwpAQCAtNjk3LDExICs2OTMsNiBAQAogCX0KIAlyZXR1cm4gc3RhdHVzOwogCi1jbGVhbnVwOgotCW5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcnMoJm5mcWgpOwotCXN5bmNocm9uaXplX25ldCgpOwotCWlwcV9mbHVzaChORl9EUk9QKTsKLQkKIGNsZWFudXBfc3lzY3RsOgogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlwcV9zeXNjdGxfaGVhZGVyKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBxX2Rldl9ub3RpZmllcik7CkBAIC03MTcsMTUgKzcwOCwyMSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlwX3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfcXVldWVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKwlpcHFfZmx1c2goTkZfRFJPUCk7CisKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcHFfc3lzY3RsX2hlYWRlcik7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwcV9kZXZfbm90aWZpZXIpOworCXByb2NfbmV0X3JlbW92ZShJUFFfUFJPQ19GU19OQU1FKTsKKworCXNvY2tfcmVsZWFzZShpcHFubC0+c2tfc29ja2V0KTsKKwltdXRleF9sb2NrKCZpcHFubF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpcHFubF9tdXRleCk7CisKKwluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJmlwcV9ubF9ub3RpZmllcik7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NCBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IDQ2MGZkOTAuLmNlZTMzOTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC03MzQsNyArNzM1LDcgQEAKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJaWYgKG5ld2luZm8tPmVudHJpZXNbaV0gJiYgbmV3aW5mby0+ZW50cmllc1tpXSAhPSBlbnRyeTApCiAJCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tpXSwgZW50cnkwLCBuZXdpbmZvLT5zaXplKTsKIAl9CkBAIC03ODcsNyArNzg4LDcgQEAKIAkJCSAgY291bnRlcnMsCiAJCQkgICZpKTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gY3VyY3B1KQogCQkJY29udGludWU7CiAJCWkgPSAwOwpAQCAtNzk5LDE3ICs4MDAsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLWNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAotCQkgICAgIHN0cnVjdCBpcHRfdGFibGUgKnRhYmxlLAotCQkgICAgIHZvaWQgX191c2VyICp1c2VycHRyKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgeHRfY291bnRlcnMgKiBhbGxvY19jb3VudGVycyhzdHJ1Y3QgaXB0X3RhYmxlICp0YWJsZSkKIHsKLQl1bnNpZ25lZCBpbnQgb2ZmLCBudW0sIGNvdW50ZXJzaXplOwotCXN0cnVjdCBpcHRfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQlpbnQgcmV0ID0gMDsKLQl2b2lkICpsb2NfY3B1X2VudHJ5OwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtODE4LDEzICs4MTMsMzIgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KIAl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJZ2V0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKIAorCXJldHVybiBjb3VudGVyczsKK30KKworc3RhdGljIGludAorY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCisJCSAgICAgc3RydWN0IGlwdF90YWJsZSAqdGFibGUsCisJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJwdHIpCit7CisJdW5zaWduZWQgaW50IG9mZiwgbnVtOworCXN0cnVjdCBpcHRfZW50cnkgKmU7CisJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCWludCByZXQgPSAwOworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKKwljb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTsKKwlpZiAoSVNfRVJSKGNvdW50ZXJzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY291bnRlcnMpOworCiAJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUvY3B1LCAuLi4KIAkgKiBUaGlzIGNob2ljZSBpcyBsYXp5IChiZWNhdXNlIGN1cnJlbnQgdGhyZWFkIGlzCiAJICogYWxsb3dlZCB0byBtaWdyYXRlIHRvIGFub3RoZXIgY3B1KQpAQCAtODg0LDI1ICs4OTgsMjczIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfZGVsdGEgeworCXN0cnVjdCBjb21wYXRfZGVsdGEgKm5leHQ7CisJdV9pbnQxNl90IG9mZnNldDsKKwlzaG9ydCBkZWx0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29tcGF0X2RlbHRhICpjb21wYXRfb2Zmc2V0cyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgY29tcGF0X2FkZF9vZmZzZXQodV9pbnQxNl90IG9mZnNldCwgc2hvcnQgZGVsdGEpCit7CisJc3RydWN0IGNvbXBhdF9kZWx0YSAqdG1wOworCisJdG1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbXBhdF9kZWx0YSksIEdGUF9LRVJORUwpOworCWlmICghdG1wKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0bXAtPm9mZnNldCA9IG9mZnNldDsKKwl0bXAtPmRlbHRhID0gZGVsdGE7CisJaWYgKGNvbXBhdF9vZmZzZXRzKSB7CisJCXRtcC0+bmV4dCA9IGNvbXBhdF9vZmZzZXRzLT5uZXh0OworCQljb21wYXRfb2Zmc2V0cy0+bmV4dCA9IHRtcDsKKwl9IGVsc2UgeworCQljb21wYXRfb2Zmc2V0cyA9IHRtcDsKKwkJdG1wLT5uZXh0ID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBhdF9mbHVzaF9vZmZzZXRzKHZvaWQpCit7CisJc3RydWN0IGNvbXBhdF9kZWx0YSAqdG1wLCAqbmV4dDsKKworCWlmIChjb21wYXRfb2Zmc2V0cykgeworCQlmb3IodG1wID0gY29tcGF0X29mZnNldHM7IHRtcDsgdG1wID0gbmV4dCkgeworCQkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJCWtmcmVlKHRtcCk7CisJCX0KKwkJY29tcGF0X29mZnNldHMgPSBOVUxMOworCX0KK30KKworc3RhdGljIHNob3J0IGNvbXBhdF9jYWxjX2p1bXAodV9pbnQxNl90IG9mZnNldCkKK3sKKwlzdHJ1Y3QgY29tcGF0X2RlbHRhICp0bXA7CisJc2hvcnQgZGVsdGE7CisKKwlmb3IodG1wID0gY29tcGF0X29mZnNldHMsIGRlbHRhID0gMDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJCWlmICh0bXAtPm9mZnNldCA8IG9mZnNldCkKKwkJCWRlbHRhICs9IHRtcC0+ZGVsdGE7CisJcmV0dXJuIGRlbHRhOworfQorCitzdHJ1Y3QgY29tcGF0X2lwdF9zdGFuZGFyZF90YXJnZXQKK3sKKwlzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCB0YXJnZXQ7CisJY29tcGF0X2ludF90IHZlcmRpY3Q7Cit9OworCitzdHJ1Y3QgY29tcGF0X2lwdF9zdGFuZGFyZAoreworCXN0cnVjdCBjb21wYXRfaXB0X2VudHJ5IGVudHJ5OworCXN0cnVjdCBjb21wYXRfaXB0X3N0YW5kYXJkX3RhcmdldCB0YXJnZXQ7Cit9OworCisjZGVmaW5lIElQVF9TVF9MRU4JCVhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpCisjZGVmaW5lIElQVF9TVF9DT01QQVRfTEVOCUNPTVBBVF9YVF9BTElHTihzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfc3RhbmRhcmRfdGFyZ2V0KSkKKyNkZWZpbmUgSVBUX1NUX09GRlNFVAkJKElQVF9TVF9MRU4gLSBJUFRfU1RfQ09NUEFUX0xFTikKKworc3RhdGljIGludCBjb21wYXRfaXB0X3N0YW5kYXJkX2ZuKHZvaWQgKnRhcmdldCwKKwkJdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLCBpbnQgY29udmVydCkKK3sKKwlzdHJ1Y3QgY29tcGF0X2lwdF9zdGFuZGFyZF90YXJnZXQgY29tcGF0X3N0LCAqcGNvbXBhdF9zdDsKKwlzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCBzdCwgKnBzdDsKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKKwlzd2l0Y2ggKGNvbnZlcnQpIHsKKwkJY2FzZSBDT01QQVRfVE9fVVNFUjoKKwkJCXBzdCA9IHRhcmdldDsKKwkJCW1lbWNweSgmY29tcGF0X3N0LnRhcmdldCwgJnBzdC0+dGFyZ2V0LAorCQkJCXNpemVvZihjb21wYXRfc3QudGFyZ2V0KSk7CisJCQljb21wYXRfc3QudmVyZGljdCA9IHBzdC0+dmVyZGljdDsKKwkJCWlmIChjb21wYXRfc3QudmVyZGljdCA+IDApCisJCQkJY29tcGF0X3N0LnZlcmRpY3QgLT0KKwkJCQkJY29tcGF0X2NhbGNfanVtcChjb21wYXRfc3QudmVyZGljdCk7CisJCQljb21wYXRfc3QudGFyZ2V0LnUudXNlci50YXJnZXRfc2l6ZSA9IElQVF9TVF9DT01QQVRfTEVOOworCQkJaWYgKGNvcHlfdG9fdXNlcigqZHN0cHRyLCAmY29tcGF0X3N0LCBJUFRfU1RfQ09NUEFUX0xFTikpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCSpzaXplIC09IElQVF9TVF9PRkZTRVQ7CisJCQkqZHN0cHRyICs9IElQVF9TVF9DT01QQVRfTEVOOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUEFUX0ZST01fVVNFUjoKKwkJCXBjb21wYXRfc3QgPSB0YXJnZXQ7CisJCQltZW1jcHkoJnN0LnRhcmdldCwgJnBjb21wYXRfc3QtPnRhcmdldCwgSVBUX1NUX0NPTVBBVF9MRU4pOworCQkJc3QudmVyZGljdCA9IHBjb21wYXRfc3QtPnZlcmRpY3Q7CisJCQlpZiAoc3QudmVyZGljdCA+IDApCisJCQkJc3QudmVyZGljdCArPSBjb21wYXRfY2FsY19qdW1wKHN0LnZlcmRpY3QpOworCQkJc3QudGFyZ2V0LnUudXNlci50YXJnZXRfc2l6ZSA9IElQVF9TVF9MRU47CisJCQltZW1jcHkoKmRzdHB0ciwgJnN0LCBJUFRfU1RfTEVOKTsKKwkJCSpzaXplICs9IElQVF9TVF9PRkZTRVQ7CisJCQkqZHN0cHRyICs9IElQVF9TVF9MRU47CisJCQlicmVhazsKKwkJY2FzZSBDT01QQVRfQ0FMQ19TSVpFOgorCQkJKnNpemUgKz0gSVBUX1NUX09GRlNFVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT1BST1RPT1BUOworCQkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfY2FsY19tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCBpbnQgKiBzaXplKQoreworCWlmIChtLT51Lmtlcm5lbC5tYXRjaC0+Y29tcGF0KQorCQltLT51Lmtlcm5lbC5tYXRjaC0+Y29tcGF0KG0sIE5VTEwsIHNpemUsIENPTVBBVF9DQUxDX1NJWkUpOworCWVsc2UKKwkJeHRfY29tcGF0X21hdGNoKG0sIE5VTEwsIHNpemUsIENPTVBBVF9DQUxDX1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAorCQl2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKKwl1X2ludDE2X3QgZW50cnlfb2Zmc2V0OworCWludCBvZmYsIGksIHJldDsKKworCW9mZiA9IDA7CisJZW50cnlfb2Zmc2V0ID0gKHZvaWQgKillIC0gYmFzZTsKKwlJUFRfTUFUQ0hfSVRFUkFURShlLCBjb21wYXRfY2FsY19tYXRjaCwgJm9mZik7CisJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCWlmICh0LT51Lmtlcm5lbC50YXJnZXQtPmNvbXBhdCkKKwkJdC0+dS5rZXJuZWwudGFyZ2V0LT5jb21wYXQodCwgTlVMTCwgJm9mZiwgQ09NUEFUX0NBTENfU0laRSk7CisJZWxzZQorCQl4dF9jb21wYXRfdGFyZ2V0KHQsIE5VTEwsICZvZmYsIENPTVBBVF9DQUxDX1NJWkUpOworCW5ld2luZm8tPnNpemUgLT0gb2ZmOworCXJldCA9IGNvbXBhdF9hZGRfb2Zmc2V0KGVudHJ5X29mZnNldCwgb2ZmKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaTwgTkZfSVBfTlVNSE9PS1M7IGkrKykgeworCQlpZiAoaW5mby0+aG9va19lbnRyeVtpXSAmJiAoZSA8IChzdHJ1Y3QgaXB0X2VudHJ5ICopCisJCQkJKGJhc2UgKyBpbmZvLT5ob29rX2VudHJ5W2ldKSkpCisJCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldIC09IG9mZjsKKwkJaWYgKGluZm8tPnVuZGVyZmxvd1tpXSAmJiAoZSA8IChzdHJ1Y3QgaXB0X2VudHJ5ICopCisJCQkJKGJhc2UgKyBpbmZvLT51bmRlcmZsb3dbaV0pKSkKKwkJCW5ld2luZm8tPnVuZGVyZmxvd1tpXSAtPSBvZmY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAorCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwl2b2lkICpsb2NfY3B1X2VudHJ5OworCWludCBpOworCisJaWYgKCFuZXdpbmZvIHx8ICFpbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChuZXdpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHh0X3RhYmxlX2luZm8pKTsKKwluZXdpbmZvLT5zaXplID0gaW5mby0+c2l6ZTsKKwluZXdpbmZvLT5udW1iZXIgPSBpbmZvLT5udW1iZXI7CisJZm9yIChpID0gMDsgaSA8IE5GX0lQX05VTUhPT0tTOyBpKyspIHsKKwkJbmV3aW5mby0+aG9va19lbnRyeVtpXSA9IGluZm8tPmhvb2tfZW50cnlbaV07CisJCW5ld2luZm8tPnVuZGVyZmxvd1tpXSA9IGluZm8tPnVuZGVyZmxvd1tpXTsKKwl9CisJbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJcmV0dXJuIElQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIGluZm8tPnNpemUsCisJCQljb21wYXRfY2FsY19lbnRyeSwgaW5mbywgbG9jX2NwdV9lbnRyeSwgbmV3aW5mbyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBnZXRfaW5mbyh2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4sIGludCBjb21wYXQpCit7CisJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwlzdHJ1Y3QgaXB0X3RhYmxlICp0OworCWludCByZXQ7CisKKwlpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdF9nZXRpbmZvKSkgeworCQlkdXByaW50ZigibGVuZ3RoICV1ICE9ICV1XG4iLCAqbGVuLAorCQkJKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IGlwdF9nZXRpbmZvKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCB1c2VyLCBzaXplb2YobmFtZSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOworCisJbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTi0xXSA9ICdcMCc7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWlmIChjb21wYXQpCisJCXh0X2NvbXBhdF9sb2NrKEFGX0lORVQpOworI2VuZGlmCisJdCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBuYW1lKSwKKwkJCSJpcHRhYmxlXyVzIiwgbmFtZSk7CisJaWYgKHQgJiYgIUlTX0VSUih0KSkgeworCQlzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbzsKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOworCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlpZiAoY29tcGF0KSB7CisJCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CisJCQlyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCAmdG1wKTsKKwkJCWNvbXBhdF9mbHVzaF9vZmZzZXRzKCk7CisJCQlwcml2YXRlID0gICZ0bXA7CisJCX0KKyNlbmRpZgorCQlpbmZvLnZhbGlkX2hvb2tzID0gdC0+dmFsaWRfaG9va3M7CisJCW1lbWNweShpbmZvLmhvb2tfZW50cnksIHByaXZhdGUtPmhvb2tfZW50cnksCisJCQkJc2l6ZW9mKGluZm8uaG9va19lbnRyeSkpOworCQltZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtPnVuZGVyZmxvdywKKwkJCQlzaXplb2YoaW5mby51bmRlcmZsb3cpKTsKKwkJaW5mby5udW1fZW50cmllcyA9IHByaXZhdGUtPm51bWJlcjsKKwkJaW5mby5zaXplID0gcHJpdmF0ZS0+c2l6ZTsKKwkJc3RyY3B5KGluZm8ubmFtZSwgbmFtZSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmaW5mbywgKmxlbikgIT0gMCkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IDA7CisKKwkJeHRfdGFibGVfdW5sb2NrKHQpOworCQltb2R1bGVfcHV0KHQtPm1lKTsKKwl9IGVsc2UKKwkJcmV0ID0gdCA/IFBUUl9FUlIodCkgOiAtRU5PRU5UOworI2lmZGVmIENPTkZJR19DT01QQVQKKwlpZiAoY29tcGF0KQorCQl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludAotZ2V0X2VudHJpZXMoY29uc3Qgc3RydWN0IGlwdF9nZXRfZW50cmllcyAqZW50cmllcywKLQkgICAgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIpCitnZXRfZW50cmllcyhzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIF9fdXNlciAqdXB0ciwgaW50ICpsZW4pCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKIAlzdHJ1Y3QgaXB0X3RhYmxlICp0OwogCi0JdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBlbnRyaWVzLT5uYW1lKTsKKwlpZiAoKmxlbiA8IHNpemVvZihnZXQpKSB7CisJCWR1cHJpbnRmKCJnZXRfZW50cmllczogJXUgPCAlZFxuIiwgKmxlbiwKKwkJCQkodW5zaWduZWQgaW50KXNpemVvZihnZXQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0LCB1cHRyLCBzaXplb2YoZ2V0KSkgIT0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMpICsgZ2V0LnNpemUpIHsKKwkJZHVwcmludGYoImdldF9lbnRyaWVzOiAldSAhPSAldVxuIiwgKmxlbiwKKwkJCQkodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IGlwdF9nZXRfZW50cmllcykgKworCQkJCWdldC5zaXplKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXQgPSB4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgZ2V0Lm5hbWUpOwogCWlmICh0ICYmICFJU19FUlIodCkpIHsKIAkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwogCQlkdXByaW50ZigidC0+cHJpdmF0ZS0+bnVtYmVyID0gJXVcbiIsCiAJCQkgcHJpdmF0ZS0+bnVtYmVyKTsKLQkJaWYgKGVudHJpZXMtPnNpemUgPT0gcHJpdmF0ZS0+c2l6ZSkKKwkJaWYgKGdldC5zaXplID09IHByaXZhdGUtPnNpemUpCiAJCQlyZXQgPSBjb3B5X2VudHJpZXNfdG9fdXNlcihwcml2YXRlLT5zaXplLAogCQkJCQkJICAgdCwgdXB0ci0+ZW50cnl0YWJsZSk7CiAJCWVsc2UgewogCQkJZHVwcmludGYoImdldF9lbnRyaWVzOiBJJ3ZlIGdvdCAldSBub3QgJXUhXG4iLAogCQkJCSBwcml2YXRlLT5zaXplLAotCQkJCSBlbnRyaWVzLT5zaXplKTsKKwkJCQkgZ2V0LnNpemUpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJfQogCQltb2R1bGVfcHV0KHQtPm1lKTsKQEAgLTkxNCwxNCArMTE3Niw4MSBAQAogfQogCiBzdGF0aWMgaW50CitfX2RvX3JlcGxhY2UoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAorCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywKKwkJdm9pZCBfX3VzZXIgKmNvdW50ZXJzX3B0cikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpcHRfdGFibGUgKnQ7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm87CisJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKKwl2b2lkICpsb2NfY3B1X29sZF9lbnRyeTsKKworCXJldCA9IDA7CisJY291bnRlcnMgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKKwlpZiAoIWNvdW50ZXJzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgbmFtZSksCisJCQkJICAgICJpcHRhYmxlXyVzIiwgbmFtZSk7CisJaWYgKCF0IHx8IElTX0VSUih0KSkgeworCQlyZXQgPSB0ID8gUFRSX0VSUih0KSA6IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9uZXdpbmZvX2NvdW50ZXJzX3VudHJhbnM7CisJfQorCisJLyogWW91IGxpZWQhICovCisJaWYgKHZhbGlkX2hvb2tzICE9IHQtPnZhbGlkX2hvb2tzKSB7CisJCWR1cHJpbnRmKCJWYWxpZCBob29rIGNyYXA6ICUwOFggdnMgJTA4WFxuIiwKKwkJCSB2YWxpZF9ob29rcywgdC0+dmFsaWRfaG9va3MpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHB1dF9tb2R1bGU7CisJfQorCisJb2xkaW5mbyA9IHh0X3JlcGxhY2VfdGFibGUodCwgbnVtX2NvdW50ZXJzLCBuZXdpbmZvLCAmcmV0KTsKKwlpZiAoIW9sZGluZm8pCisJCWdvdG8gcHV0X21vZHVsZTsKKworCS8qIFVwZGF0ZSBtb2R1bGUgdXNhZ2UgY291bnQgYmFzZWQgb24gbnVtYmVyIG9mIHJ1bGVzICovCisJZHVwcmludGYoImRvX3JlcGxhY2U6IG9sZG51bT0ldSwgaW5pdG51bT0ldSwgbmV3bnVtPSV1XG4iLAorCQlvbGRpbmZvLT5udW1iZXIsIG9sZGluZm8tPmluaXRpYWxfZW50cmllcywgbmV3aW5mby0+bnVtYmVyKTsKKwlpZiAoKG9sZGluZm8tPm51bWJlciA+IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykgfHwKKwkgICAgKG5ld2luZm8tPm51bWJlciA8PSBvbGRpbmZvLT5pbml0aWFsX2VudHJpZXMpKQorCQltb2R1bGVfcHV0KHQtPm1lKTsKKwlpZiAoKG9sZGluZm8tPm51bWJlciA+IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykgJiYKKwkgICAgKG5ld2luZm8tPm51bWJlciA8PSBvbGRpbmZvLT5pbml0aWFsX2VudHJpZXMpKQorCQltb2R1bGVfcHV0KHQtPm1lKTsKKworCS8qIEdldCB0aGUgb2xkIGNvdW50ZXJzLiAqLworCWdldF9jb3VudGVycyhvbGRpbmZvLCBjb3VudGVycyk7CisJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZSAqLworCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKKwl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CisJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLAorCQkJIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogbnVtX2NvdW50ZXJzKSAhPSAwKQorCQlyZXQgPSAtRUZBVUxUOworCXZmcmVlKGNvdW50ZXJzKTsKKwl4dF90YWJsZV91bmxvY2sodCk7CisJcmV0dXJuIHJldDsKKworIHB1dF9tb2R1bGU6CisJbW9kdWxlX3B1dCh0LT5tZSk7CisJeHRfdGFibGVfdW5sb2NrKHQpOworIGZyZWVfbmV3aW5mb19jb3VudGVyc191bnRyYW5zOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAogZG9fcmVwbGFjZSh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBpcHRfcmVwbGFjZSB0bXA7Ci0Jc3RydWN0IGlwdF90YWJsZSAqdDsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKm9sZGluZm87Ci0Jc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQl2b2lkICpsb2NfY3B1X2VudHJ5LCAqbG9jX2NwdV9vbGRfZW50cnk7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm87CisJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC05NDksNjkgKzEyNzgsMjMgQEAKIAkJZ290byBmcmVlX25ld2luZm87CiAJfQogCi0JY291bnRlcnMgPSB2bWFsbG9jKHRtcC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSk7Ci0JaWYgKCFjb3VudGVycykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbmV3aW5mbzsKLQl9Ci0KIAlyZXQgPSB0cmFuc2xhdGVfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKIAkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCiAJCQkgICAgICB0bXAuaG9va19lbnRyeSwgdG1wLnVuZGVyZmxvdyk7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGZyZWVfbmV3aW5mb19jb3VudGVyczsKKwkJZ290byBmcmVlX25ld2luZm87CiAKIAlkdXByaW50ZigiaXBfdGFibGVzOiBUcmFuc2xhdGVkIHRhYmxlXG4iKTsKIAotCXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgdG1wLm5hbWUpLAotCQkJCSAgICAiaXB0YWJsZV8lcyIsIHRtcC5uYW1lKTsKLQlpZiAoIXQgfHwgSVNfRVJSKHQpKSB7Ci0JCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKLQkJZ290byBmcmVlX25ld2luZm9fY291bnRlcnNfdW50cmFuczsKLQl9CisJcmV0ID0gX19kb19yZXBsYWNlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCisJCQkgICAgICBuZXdpbmZvLCB0bXAubnVtX2NvdW50ZXJzLAorCQkJICAgICAgdG1wLmNvdW50ZXJzKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfbmV3aW5mb191bnRyYW5zOworCXJldHVybiAwOwogCi0JLyogWW91IGxpZWQhICovCi0JaWYgKHRtcC52YWxpZF9ob29rcyAhPSB0LT52YWxpZF9ob29rcykgewotCQlkdXByaW50ZigiVmFsaWQgaG9vayBjcmFwOiAlMDhYIHZzICUwOFhcbiIsCi0JCQkgdG1wLnZhbGlkX2hvb2tzLCB0LT52YWxpZF9ob29rcyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gcHV0X21vZHVsZTsKLQl9Ci0KLQlvbGRpbmZvID0geHRfcmVwbGFjZV90YWJsZSh0LCB0bXAubnVtX2NvdW50ZXJzLCBuZXdpbmZvLCAmcmV0KTsKLQlpZiAoIW9sZGluZm8pCi0JCWdvdG8gcHV0X21vZHVsZTsKLQotCS8qIFVwZGF0ZSBtb2R1bGUgdXNhZ2UgY291bnQgYmFzZWQgb24gbnVtYmVyIG9mIHJ1bGVzICovCi0JZHVwcmludGYoImRvX3JlcGxhY2U6IG9sZG51bT0ldSwgaW5pdG51bT0ldSwgbmV3bnVtPSV1XG4iLAotCQlvbGRpbmZvLT5udW1iZXIsIG9sZGluZm8tPmluaXRpYWxfZW50cmllcywgbmV3aW5mby0+bnVtYmVyKTsKLQlpZiAoKG9sZGluZm8tPm51bWJlciA+IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykgfHwgCi0JICAgIChuZXdpbmZvLT5udW1iZXIgPD0gb2xkaW5mby0+aW5pdGlhbF9lbnRyaWVzKSkgCi0JCW1vZHVsZV9wdXQodC0+bWUpOwotCWlmICgob2xkaW5mby0+bnVtYmVyID4gb2xkaW5mby0+aW5pdGlhbF9lbnRyaWVzKSAmJgotCSAgICAobmV3aW5mby0+bnVtYmVyIDw9IG9sZGluZm8tPmluaXRpYWxfZW50cmllcykpCi0JCW1vZHVsZV9wdXQodC0+bWUpOwotCi0JLyogR2V0IHRoZSBvbGQgY291bnRlcnMuICovCi0JZ2V0X2NvdW50ZXJzKG9sZGluZm8sIGNvdW50ZXJzKTsKLQkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCi0JbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LE5VTEwpOwotCXh0X2ZyZWVfdGFibGVfaW5mbyhvbGRpbmZvKTsKLQlpZiAoY29weV90b191c2VyKHRtcC5jb3VudGVycywgY291bnRlcnMsCi0JCQkgc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykgKiB0bXAubnVtX2NvdW50ZXJzKSAhPSAwKQotCQlyZXQgPSAtRUZBVUxUOwotCXZmcmVlKGNvdW50ZXJzKTsKLQl4dF90YWJsZV91bmxvY2sodCk7Ci0JcmV0dXJuIHJldDsKLQotIHB1dF9tb2R1bGU6Ci0JbW9kdWxlX3B1dCh0LT5tZSk7Ci0JeHRfdGFibGVfdW5sb2NrKHQpOwotIGZyZWVfbmV3aW5mb19jb3VudGVyc191bnRyYW5zOgorIGZyZWVfbmV3aW5mb191bnRyYW5zOgogCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksTlVMTCk7Ci0gZnJlZV9uZXdpbmZvX2NvdW50ZXJzOgotCXZmcmVlKGNvdW50ZXJzKTsKICBmcmVlX25ld2luZm86CiAJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCXJldHVybiByZXQ7CkBAIC0xMDQwLDMxICsxMzIzLDU5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRvX2FkZF9jb3VudGVycyh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK2RvX2FkZF9jb3VudGVycyh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbyB0bXAsICpwYWRkYzsKKwlzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbyB0bXA7CisJc3RydWN0IHh0X2NvdW50ZXJzICpwYWRkYzsKKwl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOworCWNoYXIgKm5hbWU7CisJaW50IHNpemU7CisJdm9pZCAqcHRtcDsKIAlzdHJ1Y3QgaXB0X3RhYmxlICp0OwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCWludCByZXQgPSAwOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQorCWlmIChjb21wYXQpIHsKKwkJcHRtcCA9ICZjb21wYXRfdG1wOworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXB0bXAgPSAmdG1wOworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVyc19pbmZvKTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIocHRtcCwgdXNlciwgc2l6ZSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAobGVuICE9IHNpemVvZih0bXApICsgdG1wLm51bV9jb3VudGVycypzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSkKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJaWYgKGNvbXBhdCkgeworCQludW1fY291bnRlcnMgPSBjb21wYXRfdG1wLm51bV9jb3VudGVyczsKKwkJbmFtZSA9IGNvbXBhdF90bXAubmFtZTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJbnVtX2NvdW50ZXJzID0gdG1wLm51bV9jb3VudGVyczsKKwkJbmFtZSA9IHRtcC5uYW1lOworCX0KKworCWlmIChsZW4gIT0gc2l6ZSArIG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBhZGRjID0gdm1hbGxvY19ub2RlKGxlbiwgbnVtYV9ub2RlX2lkKCkpOworCXBhZGRjID0gdm1hbGxvY19ub2RlKGxlbiAtIHNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAlpZiAoIXBhZGRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihwYWRkYywgdXNlciwgbGVuKSAhPSAwKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKHBhZGRjLCB1c2VyICsgc2l6ZSwgbGVuIC0gc2l6ZSkgIT0gMCkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIGZyZWU7CiAJfQogCi0JdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCB0bXAubmFtZSk7CisJdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBuYW1lKTsKIAlpZiAoIXQgfHwgSVNfRVJSKHQpKSB7CiAJCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKIAkJZ290byBmcmVlOwpAQCAtMTA3Miw3ICsxMzgzLDcgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwotCWlmIChwcml2YXRlLT5udW1iZXIgIT0gcGFkZGMtPm51bV9jb3VudGVycykgeworCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQpAQCAtMTA4Myw3ICsxMzk0LDcgQEAKIAlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LAogCQkJICBwcml2YXRlLT5zaXplLAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKLQkJCSAgcGFkZGMtPmNvdW50ZXJzLAorCQkJICBwYWRkYywKIAkJCSAgJmkpOwogIHVubG9ja191cF9mcmVlOgogCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CkBAIC0xMDk1LDYgKzE0MDYsNjA5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfaXB0X3JlcGxhY2UgeworCWNoYXIJCQluYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwl1MzIJCQl2YWxpZF9ob29rczsKKwl1MzIJCQludW1fZW50cmllczsKKwl1MzIJCQlzaXplOworCXUzMgkJCWhvb2tfZW50cnlbTkZfSVBfTlVNSE9PS1NdOworCXUzMgkJCXVuZGVyZmxvd1tORl9JUF9OVU1IT09LU107CisJdTMyCQkJbnVtX2NvdW50ZXJzOworCWNvbXBhdF91cHRyX3QJCWNvdW50ZXJzOwkvKiBzdHJ1Y3QgaXB0X2NvdW50ZXJzICogKi8KKwlzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeQllbnRyaWVzWzBdOworfTsKKworc3RhdGljIGlubGluZSBpbnQgY29tcGF0X2NvcHlfbWF0Y2hfdG9fdXNlcihzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLAorCQl2b2lkIF9fdXNlciAqKmRzdHB0ciwgY29tcGF0X3VpbnRfdCAqc2l6ZSkKK3sKKwlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNvbXBhdCkKKwkJcmV0dXJuIG0tPnUua2VybmVsLm1hdGNoLT5jb21wYXQobSwgZHN0cHRyLCBzaXplLAorCQkJCUNPTVBBVF9UT19VU0VSKTsKKwllbHNlCisJCXJldHVybiB4dF9jb21wYXRfbWF0Y2gobSwgZHN0cHRyLCBzaXplLCBDT01QQVRfVE9fVVNFUik7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlcihzdHJ1Y3QgaXB0X2VudHJ5ICplLAorCQl2b2lkIF9fdXNlciAqKmRzdHB0ciwgY29tcGF0X3VpbnRfdCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCBfX3VzZXIgKnQ7CisJc3RydWN0IGNvbXBhdF9pcHRfZW50cnkgX191c2VyICpjZTsKKwl1X2ludDE2X3QgdGFyZ2V0X29mZnNldCwgbmV4dF9vZmZzZXQ7CisJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gLUVGQVVMVDsKKwlvcmlnc2l6ZSA9ICpzaXplOworCWNlID0gKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5IF9fdXNlciAqKSpkc3RwdHI7CisJaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSkKKwkJZ290byBvdXQ7CisKKwkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSk7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NvcHlfbWF0Y2hfdG9fdXNlciwgZHN0cHRyLCBzaXplKTsKKwl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwl0ID0gaXB0X2dldF90YXJnZXQoZSk7CisJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+Y29tcGF0KQorCQlyZXQgPSB0LT51Lmtlcm5lbC50YXJnZXQtPmNvbXBhdCh0LCBkc3RwdHIsIHNpemUsCisJCQkJQ09NUEFUX1RPX1VTRVIpOworCWVsc2UKKwkJcmV0ID0geHRfY29tcGF0X3RhcmdldCh0LCBkc3RwdHIsIHNpemUsIENPTVBBVF9UT19VU0VSKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSAtRUZBVUxUOworCW5leHRfb2Zmc2V0ID0gZS0+bmV4dF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CisJaWYgKHB1dF91c2VyKHRhcmdldF9vZmZzZXQsICZjZS0+dGFyZ2V0X29mZnNldCkpCisJCWdvdG8gb3V0OworCWlmIChwdXRfdXNlcihuZXh0X29mZnNldCwgJmNlLT5uZXh0X29mZnNldCkpCisJCWdvdG8gb3V0OworCXJldHVybiAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfY2hlY2tfY2FsY19tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLAorCSAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBjb25zdCBzdHJ1Y3QgaXB0X2lwICppcCwKKwkgICAgdW5zaWduZWQgaW50IGhvb2ttYXNrLAorCSAgICBpbnQgKnNpemUsIGludCAqaSkKK3sKKwlzdHJ1Y3QgaXB0X21hdGNoICptYXRjaDsKKworCW1hdGNoID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeHRfZmluZF9tYXRjaChBRl9JTkVULCBtLT51LnVzZXIubmFtZSwKKwkJCQkJCSAgIG0tPnUudXNlci5yZXZpc2lvbiksCisJCQkJCSJpcHRfJXMiLCBtLT51LnVzZXIubmFtZSk7CisJaWYgKElTX0VSUihtYXRjaCkgfHwgIW1hdGNoKSB7CisJCWR1cHJpbnRmKCJjb21wYXRfY2hlY2tfY2FsY19tYXRjaDogYCVzJyBub3QgZm91bmRcbiIsCisJCQkJbS0+dS51c2VyLm5hbWUpOworCQlyZXR1cm4gbWF0Y2ggPyBQVFJfRVJSKG1hdGNoKSA6IC1FTk9FTlQ7CisJfQorCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CisKKwlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNvbXBhdCkKKwkJbS0+dS5rZXJuZWwubWF0Y2gtPmNvbXBhdChtLCBOVUxMLCBzaXplLCBDT01QQVRfQ0FMQ19TSVpFKTsKKwllbHNlCisJCXh0X2NvbXBhdF9tYXRjaChtLCBOVUxMLCBzaXplLCBDT01QQVRfQ0FMQ19TSVpFKTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2NoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcyhzdHJ1Y3QgaXB0X2VudHJ5ICplLAorCQkJICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCisJCQkgICB1bnNpZ25lZCBpbnQgKnNpemUsCisJCQkgICB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJICAgdW5zaWduZWQgY2hhciAqbGltaXQsCisJCQkgICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKKwkJCSAgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKKwkJCSAgIHVuc2lnbmVkIGludCAqaSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKKwl1X2ludDE2X3QgZW50cnlfb2Zmc2V0OworCWludCByZXQsIG9mZiwgaCwgajsKKworCWR1cHJpbnRmKCJjaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3MgJXBcbiIsIGUpOworCWlmICgodW5zaWduZWQgbG9uZyllICUgX19hbGlnbm9mX18oc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpICE9IDAKKwkgICAgfHwgKHVuc2lnbmVkIGNoYXIgKillICsgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5KSA+PSBsaW1pdCkgeworCQlkdXByaW50ZigiQmFkIG9mZnNldCAlcCwgbGltaXQgPSAlcFxuIiwgZSwgbGltaXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZS0+bmV4dF9vZmZzZXQgPCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpICsKKwkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCkpIHsKKwkJZHVwcmludGYoImNoZWNraW5nOiBlbGVtZW50ICVwIHNpemUgJXVcbiIsCisJCQkgZSwgZS0+bmV4dF9vZmZzZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWlwX2NoZWNrZW50cnkoJmUtPmlwKSkgeworCQlkdXByaW50ZigiaXBfdGFibGVzOiBpcCBjaGVjayBmYWlsZWQgJXAgJXMuXG4iLCBlLCBuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb2ZmID0gMDsKKwllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSAodm9pZCAqKWJhc2U7CisJaiA9IDA7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NoZWNrX2NhbGNfbWF0Y2gsIG5hbWUsICZlLT5pcCwKKwkJCWUtPmNvbWVmcm9tLCAmb2ZmLCAmaik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKworCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULAorCQkJCQkJICAgICB0LT51LnVzZXIubmFtZSwKKwkJCQkJCSAgICAgdC0+dS51c2VyLnJldmlzaW9uKSwKKwkJCQkJICJpcHRfJXMiLCB0LT51LnVzZXIubmFtZSk7CisJaWYgKElTX0VSUih0YXJnZXQpIHx8ICF0YXJnZXQpIHsKKwkJZHVwcmludGYoImNoZWNrX2VudHJ5OiBgJXMnIG5vdCBmb3VuZFxuIiwgdC0+dS51c2VyLm5hbWUpOworCQlyZXQgPSB0YXJnZXQgPyBQVFJfRVJSKHRhcmdldCkgOiAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJdC0+dS5rZXJuZWwudGFyZ2V0ID0gdGFyZ2V0OworCisJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+Y29tcGF0KQorCQl0LT51Lmtlcm5lbC50YXJnZXQtPmNvbXBhdCh0LCBOVUxMLCAmb2ZmLCBDT01QQVRfQ0FMQ19TSVpFKTsKKwllbHNlCisJCXh0X2NvbXBhdF90YXJnZXQodCwgTlVMTCwgJm9mZiwgQ09NUEFUX0NBTENfU0laRSk7CisJKnNpemUgKz0gb2ZmOworCXJldCA9IGNvbXBhdF9hZGRfb2Zmc2V0KGVudHJ5X29mZnNldCwgb2ZmKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIENoZWNrIGhvb2tzICYgdW5kZXJmbG93cyAqLworCWZvciAoaCA9IDA7IGggPCBORl9JUF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IGhvb2tfZW50cmllc1toXSkKKwkJCW5ld2luZm8tPmhvb2tfZW50cnlbaF0gPSBob29rX2VudHJpZXNbaF07CisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pCisJCQluZXdpbmZvLT51bmRlcmZsb3dbaF0gPSB1bmRlcmZsb3dzW2hdOworCX0KKworCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLworCWUtPmNvdW50ZXJzID0gKChzdHJ1Y3QgaXB0X2NvdW50ZXJzKSB7IDAsIDAgfSk7CisJZS0+Y29tZWZyb20gPSAwOworCisJKCppKSsrOworCXJldHVybiAwOworb3V0OgorCUlQVF9NQVRDSF9JVEVSQVRFKGUsIGNsZWFudXBfbWF0Y2gsICZqKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBjb21wYXRfY29weV9tYXRjaF9mcm9tX3VzZXIoc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwKKwl2b2lkICoqZHN0cHRyLCBjb21wYXRfdWludF90ICpzaXplLCBjb25zdCBjaGFyICpuYW1lLAorCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLCB1bnNpZ25lZCBpbnQgaG9va21hc2spCit7CisJc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqZG07CisJc3RydWN0IGlwdF9tYXRjaCAqbWF0Y2g7CisJaW50IHJldDsKKworCWRtID0gKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKikqZHN0cHRyOworCW1hdGNoID0gbS0+dS5rZXJuZWwubWF0Y2g7CisJaWYgKG1hdGNoLT5jb21wYXQpCisJCW1hdGNoLT5jb21wYXQobSwgZHN0cHRyLCBzaXplLCBDT01QQVRfRlJPTV9VU0VSKTsKKwllbHNlCisJCXh0X2NvbXBhdF9tYXRjaChtLCBkc3RwdHIsIHNpemUsIENPTVBBVF9GUk9NX1VTRVIpOworCisJcmV0ID0geHRfY2hlY2tfbWF0Y2gobWF0Y2gsIEFGX0lORVQsIGRtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKmRtKSwKKwkJCSAgICAgbmFtZSwgaG9va21hc2ssIGlwLT5wcm90bywKKwkJCSAgICAgaXAtPmludmZsYWdzICYgSVBUX0lOVl9QUk9UTyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtLT51Lmtlcm5lbC5tYXRjaC0+Y2hlY2tlbnRyeQorCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXAsIG1hdGNoLCBkbS0+ZGF0YSwKKwkJCQkJICAgICAgZG0tPnUubWF0Y2hfc2l6ZSAtIHNpemVvZigqZG0pLAorCQkJCQkgICAgICBob29rbWFzaykpIHsKKwkJZHVwcmludGYoImlwX3RhYmxlczogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKKwkJCSBtLT51Lmtlcm5lbC5tYXRjaC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfY29weV9lbnRyeV9mcm9tX3VzZXIoc3RydWN0IGlwdF9lbnRyeSAqZSwgdm9pZCAqKmRzdHB0ciwKKwl1bnNpZ25lZCBpbnQgKnNpemUsIGNvbnN0IGNoYXIgKm5hbWUsCisJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHVuc2lnbmVkIGNoYXIgKmJhc2UpCit7CisJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICpkZTsKKwl1bnNpZ25lZCBpbnQgb3JpZ3NpemU7CisJaW50IHJldCwgaDsKKworCXJldCA9IDA7CisJb3JpZ3NpemUgPSAqc2l6ZTsKKwlkZSA9IChzdHJ1Y3QgaXB0X2VudHJ5ICopKmRzdHB0cjsKKwltZW1jcHkoZGUsIGUsIHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSk7CisKKwkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSk7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NvcHlfbWF0Y2hfZnJvbV91c2VyLCBkc3RwdHIsIHNpemUsCisJCQluYW1lLCAmZGUtPmlwLCBkZS0+Y29tZWZyb20pOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWRlLT50YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKwl0ID0gaXB0X2dldF90YXJnZXQoZSk7CisJdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OworCWlmICh0YXJnZXQtPmNvbXBhdCkKKwkJdGFyZ2V0LT5jb21wYXQodCwgZHN0cHRyLCBzaXplLCBDT01QQVRfRlJPTV9VU0VSKTsKKwllbHNlCisJCXh0X2NvbXBhdF90YXJnZXQodCwgZHN0cHRyLCBzaXplLCBDT01QQVRfRlJPTV9VU0VSKTsKKworCWRlLT5uZXh0X29mZnNldCA9IGUtPm5leHRfb2Zmc2V0IC0gKG9yaWdzaXplIC0gKnNpemUpOworCWZvciAoaCA9IDA7IGggPCBORl9JUF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICgodW5zaWduZWQgY2hhciAqKWRlIC0gYmFzZSA8IG5ld2luZm8tPmhvb2tfZW50cnlbaF0pCisJCQluZXdpbmZvLT5ob29rX2VudHJ5W2hdIC09IG9yaWdzaXplIC0gKnNpemU7CisJCWlmICgodW5zaWduZWQgY2hhciAqKWRlIC0gYmFzZSA8IG5ld2luZm8tPnVuZGVyZmxvd1toXSkKKwkJCW5ld2luZm8tPnVuZGVyZmxvd1toXSAtPSBvcmlnc2l6ZSAtICpzaXplOworCX0KKworCXQgPSBpcHRfZ2V0X3RhcmdldChkZSk7CisJdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OworCXJldCA9IHh0X2NoZWNrX3RhcmdldCh0YXJnZXQsIEFGX0lORVQsIHQtPnUudGFyZ2V0X3NpemUgLSBzaXplb2YoKnQpLAorCQkJICAgICAgbmFtZSwgZS0+Y29tZWZyb20sIGUtPmlwLnByb3RvLAorCQkJICAgICAgZS0+aXAuaW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJaWYgKHQtPnUua2VybmVsLnRhcmdldCA9PSAmaXB0X3N0YW5kYXJkX3RhcmdldCkgeworCQlpZiAoIXN0YW5kYXJkX2NoZWNrKHQsICpzaXplKSkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5CisJCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZGUsIHRhcmdldCwKKwkJCQl0LT5kYXRhLCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKKwkJCQlkZS0+Y29tZWZyb20pKSB7CisJCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNvbXBhdDogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKKwkJCSB0LT51Lmtlcm5lbC50YXJnZXQtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit0cmFuc2xhdGVfY29tcGF0X3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gKipwaW5mbywKKwkJdm9pZCAqKnBlbnRyeTAsCisJCXVuc2lnbmVkIGludCB0b3RhbF9zaXplLAorCQl1bnNpZ25lZCBpbnQgbnVtYmVyLAorCQl1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKKwkJdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCAqaW5mbzsKKwl2b2lkICpwb3MsICplbnRyeTAsICplbnRyeTE7CisJdW5zaWduZWQgaW50IHNpemU7CisJaW50IHJldDsKKworCWluZm8gPSAqcGluZm87CisJZW50cnkwID0gKnBlbnRyeTA7CisJc2l6ZSA9IHRvdGFsX3NpemU7CisJaW5mby0+bnVtYmVyID0gbnVtYmVyOworCisJLyogSW5pdCBhbGwgaG9va3MgdG8gaW1wb3NzaWJsZSB2YWx1ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTkZfSVBfTlVNSE9PS1M7IGkrKykgeworCQlpbmZvLT5ob29rX2VudHJ5W2ldID0gMHhGRkZGRkZGRjsKKwkJaW5mby0+dW5kZXJmbG93W2ldID0gMHhGRkZGRkZGRjsKKwl9CisKKwlkdXByaW50ZigidHJhbnNsYXRlX2NvbXBhdF90YWJsZTogc2l6ZSAldVxuIiwgaW5mby0+c2l6ZSk7CisJaSA9IDA7CisJeHRfY29tcGF0X2xvY2soQUZfSU5FVCk7CisJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCisJcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAorCQkJCWNoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcywKKwkJCQlpbmZvLCAmc2l6ZSwgZW50cnkwLAorCQkJCWVudHJ5MCArIHRvdGFsX3NpemUsCisJCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCAmaSwgbmFtZSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlyZXQgPSAtRUlOVkFMOworCWlmIChpICE9IG51bWJlcikgeworCQlkdXByaW50ZigidHJhbnNsYXRlX2NvbXBhdF90YWJsZTogJXUgbm90ICV1IGVudHJpZXNcbiIsCisJCQkgaSwgbnVtYmVyKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIENoZWNrIGhvb2tzIGFsbCBhc3NpZ25lZCAqLworCWZvciAoaSA9IDA7IGkgPCBORl9JUF9OVU1IT09LUzsgaSsrKSB7CisJCS8qIE9ubHkgaG9va3Mgd2hpY2ggYXJlIHZhbGlkICovCisJCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmIChpbmZvLT5ob29rX2VudHJ5W2ldID09IDB4RkZGRkZGRkYpIHsKKwkJCWR1cHJpbnRmKCJJbnZhbGlkIGhvb2sgZW50cnkgJXUgJXVcbiIsCisJCQkJIGksIGhvb2tfZW50cmllc1tpXSk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJaWYgKGluZm8tPnVuZGVyZmxvd1tpXSA9PSAweEZGRkZGRkZGKSB7CisJCQlkdXByaW50ZigiSW52YWxpZCB1bmRlcmZsb3cgJXUgJXVcbiIsCisJCQkJIGksIHVuZGVyZmxvd3NbaV0pOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwluZXdpbmZvID0geHRfYWxsb2NfdGFibGVfaW5mbyhzaXplKTsKKwlpZiAoIW5ld2luZm8pCisJCWdvdG8gb3V0X3VubG9jazsKKworCW5ld2luZm8tPm51bWJlciA9IG51bWJlcjsKKwlmb3IgKGkgPSAwOyBpIDwgTkZfSVBfTlVNSE9PS1M7IGkrKykgeworCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldID0gaW5mby0+aG9va19lbnRyeVtpXTsKKwkJbmV3aW5mby0+dW5kZXJmbG93W2ldID0gaW5mby0+dW5kZXJmbG93W2ldOworCX0KKwllbnRyeTEgPSBuZXdpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCXBvcyA9IGVudHJ5MTsKKwlzaXplID0gIHRvdGFsX3NpemU7CisJcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAorCQkJY29tcGF0X2NvcHlfZW50cnlfZnJvbV91c2VyLCAmcG9zLCAmc2l6ZSwKKwkJCW5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJY29tcGF0X2ZsdXNoX29mZnNldHMoKTsKKwl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9uZXdpbmZvOworCisJcmV0ID0gLUVMT09QOworCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHZhbGlkX2hvb2tzLCBlbnRyeTEpKQorCQlnb3RvIGZyZWVfbmV3aW5mbzsKKworCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCisJZm9yX2VhY2hfY3B1KGkpCisJCWlmIChuZXdpbmZvLT5lbnRyaWVzW2ldICYmIG5ld2luZm8tPmVudHJpZXNbaV0gIT0gZW50cnkxKQorCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MSwgbmV3aW5mby0+c2l6ZSk7CisKKwkqcGluZm8gPSBuZXdpbmZvOworCSpwZW50cnkwID0gZW50cnkxOworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKKwlyZXR1cm4gMDsKKworZnJlZV9uZXdpbmZvOgorCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKK291dDoKKwlyZXR1cm4gcmV0Oworb3V0X3VubG9jazoKKwl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgaW50Citjb21wYXRfZG9fcmVwbGFjZSh2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21wYXRfaXB0X3JlcGxhY2UgdG1wOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOworCisJLyogSGFjazogQ2F1c2VzIGlwY2hhaW5zIHRvIGdpdmUgY29ycmVjdCBlcnJvciBtc2cgLS1SUiAqLworCWlmIChsZW4gIT0gc2l6ZW9mKHRtcCkgKyB0bXAuc2l6ZSkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCS8qIG92ZXJmbG93IGNoZWNrICovCisJaWYgKHRtcC5zaXplID49IChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCB4dF90YWJsZV9pbmZvKSkgLyBOUl9DUFVTIC0KKwkJCVNNUF9DQUNIRV9CWVRFUykKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHRtcC5udW1fY291bnRlcnMgPj0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld2luZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHRtcC5zaXplKTsKKwlpZiAoIW5ld2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb3VyIG5vZGUvY3B1ICovCisJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKGNvcHlfZnJvbV91c2VyKGxvY19jcHVfZW50cnksIHVzZXIgKyBzaXplb2YodG1wKSwKKwkJCSAgIHRtcC5zaXplKSAhPSAwKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZV9uZXdpbmZvOworCX0KKworCXJldCA9IHRyYW5zbGF0ZV9jb21wYXRfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKKwkJCSAgICAgICZuZXdpbmZvLCAmbG9jX2NwdV9lbnRyeSwgdG1wLnNpemUsCisJCQkgICAgICB0bXAubnVtX2VudHJpZXMsIHRtcC5ob29rX2VudHJ5LCB0bXAudW5kZXJmbG93KTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZnJlZV9uZXdpbmZvOworCisJZHVwcmludGYoImNvbXBhdF9kb19yZXBsYWNlOiBUcmFuc2xhdGVkIHRhYmxlXG4iKTsKKworCXJldCA9IF9fZG9fcmVwbGFjZSh0bXAubmFtZSwgdG1wLnZhbGlkX2hvb2tzLAorCQkJICAgICAgbmV3aW5mbywgdG1wLm51bV9jb3VudGVycywKKwkJCSAgICAgIGNvbXBhdF9wdHIodG1wLmNvdW50ZXJzKSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX25ld2luZm9fdW50cmFuczsKKwlyZXR1cm4gMDsKKworIGZyZWVfbmV3aW5mb191bnRyYW5zOgorCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksTlVMTCk7CisgZnJlZV9uZXdpbmZvOgorCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citjb21wYXRfZG9faXB0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLAlpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwKKwkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElQVF9TT19TRVRfUkVQTEFDRToKKwkJcmV0ID0gY29tcGF0X2RvX3JlcGxhY2UodXNlciwgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIElQVF9TT19TRVRfQUREX0NPVU5URVJTOgorCQlyZXQgPSBkb19hZGRfY291bnRlcnModXNlciwgbGVuLCAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkdXByaW50ZigiZG9faXB0X3NldF9jdGw6ICB1bmtub3duIHJlcXVlc3QgJWlcbiIsIGNtZCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMKK3sKKwljaGFyIG5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU5dOworCWNvbXBhdF91aW50X3Qgc2l6ZTsKKwlzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworc3RhdGljIGludCBjb21wYXRfY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCisJCSAgICAgc3RydWN0IGlwdF90YWJsZSAqdGFibGUsIHZvaWQgX191c2VyICp1c2VycHRyKQoreworCXVuc2lnbmVkIGludCBvZmYsIG51bTsKKwlzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSBlOworCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwl2b2lkIF9fdXNlciAqcG9zOworCXVuc2lnbmVkIGludCBzaXplOworCWludCByZXQgPSAwOworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKKwljb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTsKKwlpZiAoSVNfRVJSKGNvdW50ZXJzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY291bnRlcnMpOworCisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUvY3B1LCAuLi4KKwkgKiBUaGlzIGNob2ljZSBpcyBsYXp5IChiZWNhdXNlIGN1cnJlbnQgdGhyZWFkIGlzCisJICogYWxsb3dlZCB0byBtaWdyYXRlIHRvIGFub3RoZXIgY3B1KQorCSAqLworCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCXBvcyA9IHVzZXJwdHI7CisJc2l6ZSA9IHRvdGFsX3NpemU7CisJcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSwKKwkJCWNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIsICZwb3MsICZzaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCisJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgPCBzaXplOyBvZmYgKz0gZS5uZXh0X29mZnNldCwgbnVtKyspIHsKKwkJdW5zaWduZWQgaW50IGk7CisJCXN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggbTsKKwkJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgdDsKKworCQlyZXQgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmUsIHVzZXJwdHIgKyBvZmYsCisJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSkpKQorCQkJZ290byBmcmVlX2NvdW50ZXJzOworCQlpZiAoY29weV90b191c2VyKHVzZXJwdHIgKyBvZmYgKworCQkJb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnksIGNvdW50ZXJzKSwKKwkJCSAmY291bnRlcnNbbnVtXSwgc2l6ZW9mKGNvdW50ZXJzW251bV0pKSkKKwkJCWdvdG8gZnJlZV9jb3VudGVyczsKKworCQlmb3IgKGkgPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOworCQkJCWkgPCBlLnRhcmdldF9vZmZzZXQ7IGkgKz0gbS51Lm1hdGNoX3NpemUpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmbSwgdXNlcnB0ciArIG9mZiArIGksCisJCQkJCXNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoKSkpCisJCQkJZ290byBmcmVlX2NvdW50ZXJzOworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgaSArCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGlwdF9lbnRyeV9tYXRjaCwgdS51c2VyLm5hbWUpLAorCQkJCW0udS5rZXJuZWwubWF0Y2gtPm5hbWUsCisJCQkJc3RybGVuKG0udS5rZXJuZWwubWF0Y2gtPm5hbWUpICsgMSkpCisJCQkJZ290byBmcmVlX2NvdW50ZXJzOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0LCB1c2VycHRyICsgb2ZmICsgZS50YXJnZXRfb2Zmc2V0LAorCQkJCQlzaXplb2Yoc3RydWN0IGlwdF9lbnRyeV90YXJnZXQpKSkKKwkJCWdvdG8gZnJlZV9jb3VudGVyczsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS50YXJnZXRfb2Zmc2V0ICsKKwkJCW9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0LCB1LnVzZXIubmFtZSksCisJCQl0LnUua2VybmVsLnRhcmdldC0+bmFtZSwKKwkJCXN0cmxlbih0LnUua2VybmVsLnRhcmdldC0+bmFtZSkgKyAxKSkKKwkJCWdvdG8gZnJlZV9jb3VudGVyczsKKwl9CisJcmV0ID0gMDsKK2ZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhdF9nZXRfZW50cmllcyhzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsIGludCAqbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IGNvbXBhdF9pcHRfZ2V0X2VudHJpZXMgZ2V0OworCXN0cnVjdCBpcHRfdGFibGUgKnQ7CisKKworCWlmICgqbGVuIDwgc2l6ZW9mKGdldCkpIHsKKwkJZHVwcmludGYoImNvbXBhdF9nZXRfZW50cmllczogJXUgPCAldVxuIiwKKwkJCQkqbGVuLCAodW5zaWduZWQgaW50KXNpemVvZihnZXQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXQsIHVwdHIsIHNpemVvZihnZXQpKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcykgKyBnZXQuc2l6ZSkgeworCQlkdXByaW50ZigiY29tcGF0X2dldF9lbnRyaWVzOiAldSAhPSAldVxuIiwgKmxlbiwKKwkJCSh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9nZXRfZW50cmllcykgKworCQkJZ2V0LnNpemUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJeHRfY29tcGF0X2xvY2soQUZfSU5FVCk7CisJdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhBRl9JTkVULCBnZXQubmFtZSk7CisJaWYgKHQgJiYgIUlTX0VSUih0KSkgeworCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CisJCXN0cnVjdCB4dF90YWJsZV9pbmZvIGluZm87CisJCWR1cHJpbnRmKCJ0LT5wcml2YXRlLT5udW1iZXIgPSAldVxuIiwKKwkJCSBwcml2YXRlLT5udW1iZXIpOworCQlyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCAmaW5mbyk7CisJCWlmICghcmV0ICYmIGdldC5zaXplID09IGluZm8uc2l6ZSkgeworCQkJcmV0ID0gY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHByaXZhdGUtPnNpemUsCisJCQkJCQkgICB0LCB1cHRyLT5lbnRyeXRhYmxlKTsKKwkJfSBlbHNlIGlmICghcmV0KSB7CisJCQlkdXByaW50ZigiY29tcGF0X2dldF9lbnRyaWVzOiBJJ3ZlIGdvdCAldSBub3QgJXUhXG4iLAorCQkJCSBwcml2YXRlLT5zaXplLAorCQkJCSBnZXQuc2l6ZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWNvbXBhdF9mbHVzaF9vZmZzZXRzKCk7CisJCW1vZHVsZV9wdXQodC0+bWUpOworCQl4dF90YWJsZV91bmxvY2sodCk7CisJfSBlbHNlCisJCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKKworCXh0X2NvbXBhdF91bmxvY2soQUZfSU5FVCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY29tcGF0X2RvX2lwdF9nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSVBUX1NPX0dFVF9JTkZPOgorCQlyZXQgPSBnZXRfaW5mbyh1c2VyLCBsZW4sIDEpOworCQlicmVhazsKKwljYXNlIElQVF9TT19HRVRfRU5UUklFUzoKKwkJcmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHVzZXIsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWR1cHJpbnRmKCJjb21wYXRfZG9faXB0X2dldF9jdGw6IHVua25vd24gcmVxdWVzdCAlaVxuIiwgY21kKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50CiBkb19pcHRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssCWludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtMTEwOSw3ICsyMDIzLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElQVF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnModXNlciwgbGVuKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHVzZXIsIGxlbiwgMCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTExMjksNjUgKzIwNDMsMTMgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBJUFRfU09fR0VUX0lORk86IHsKLQkJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQkJc3RydWN0IGlwdF90YWJsZSAqdDsKLQotCQlpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdF9nZXRpbmZvKSkgewotCQkJZHVwcmludGYoImxlbmd0aCAldSAhPSAldVxuIiwgKmxlbiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHRfZ2V0aW5mbykpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIHVzZXIsIHNpemVvZihuYW1lKSkgIT0gMCkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCW5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU4tMV0gPSAnXDAnOwotCi0JCXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhYmxlX2xvY2soQUZfSU5FVCwgbmFtZSksCi0JCQkJCSAgICAiaXB0YWJsZV8lcyIsIG5hbWUpOwotCQlpZiAodCAmJiAhSVNfRVJSKHQpKSB7Ci0JCQlzdHJ1Y3QgaXB0X2dldGluZm8gaW5mbzsKLQkJCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQotCQkJaW5mby52YWxpZF9ob29rcyA9IHQtPnZhbGlkX2hvb2tzOwotCQkJbWVtY3B5KGluZm8uaG9va19lbnRyeSwgcHJpdmF0ZS0+aG9va19lbnRyeSwKLQkJCSAgICAgICBzaXplb2YoaW5mby5ob29rX2VudHJ5KSk7Ci0JCQltZW1jcHkoaW5mby51bmRlcmZsb3csIHByaXZhdGUtPnVuZGVyZmxvdywKLQkJCSAgICAgICBzaXplb2YoaW5mby51bmRlcmZsb3cpKTsKLQkJCWluZm8ubnVtX2VudHJpZXMgPSBwcml2YXRlLT5udW1iZXI7Ci0JCQlpbmZvLnNpemUgPSBwcml2YXRlLT5zaXplOwotCQkJbWVtY3B5KGluZm8ubmFtZSwgbmFtZSwgc2l6ZW9mKGluZm8ubmFtZSkpOwotCi0JCQlpZiAoY29weV90b191c2VyKHVzZXIsICZpbmZvLCAqbGVuKSAhPSAwKQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQllbHNlCi0JCQkJcmV0ID0gMDsKLQkJCXh0X3RhYmxlX3VubG9jayh0KTsKLQkJCW1vZHVsZV9wdXQodC0+bWUpOwotCQl9IGVsc2UKLQkJCXJldCA9IHQgPyBQVFJfRVJSKHQpIDogLUVOT0VOVDsKLQl9Ci0JYnJlYWs7Ci0KLQljYXNlIElQVF9TT19HRVRfRU5UUklFUzogewotCQlzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzIGdldDsKLQotCQlpZiAoKmxlbiA8IHNpemVvZihnZXQpKSB7Ci0JCQlkdXByaW50ZigiZ2V0X2VudHJpZXM6ICV1IDwgJXVcbiIsICpsZW4sIHNpemVvZihnZXQpKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmdldCwgdXNlciwgc2l6ZW9mKGdldCkpICE9IDApIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSBpZiAoKmxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdF9nZXRfZW50cmllcykgKyBnZXQuc2l6ZSkgewotCQkJZHVwcmludGYoImdldF9lbnRyaWVzOiAldSAhPSAldVxuIiwgKmxlbiwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMpICsgZ2V0LnNpemUpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJfSBlbHNlCi0JCQlyZXQgPSBnZXRfZW50cmllcygmZ2V0LCB1c2VyKTsKKwljYXNlIElQVF9TT19HRVRfSU5GTzoKKwkJcmV0ID0gZ2V0X2luZm8odXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7Ci0JfQorCisJY2FzZSBJUFRfU09fR0VUX0VOVFJJRVM6CisJCXJldCA9IGdldF9lbnRyaWVzKHVzZXIsIGxlbik7CisJCWJyZWFrOwogCiAJY2FzZSBJUFRfU09fR0VUX1JFVklTSU9OX01BVENIOgogCWNhc2UgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQ6IHsKQEAgLTEzMzYsNiArMjE5OCw5IEBACiAJLm5hbWUJCT0gSVBUX1NUQU5EQVJEX1RBUkdFVCwKIAkudGFyZ2V0c2l6ZQk9IHNpemVvZihpbnQpLAogCS5mYW1pbHkJCT0gQUZfSU5FVCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdAkJPSAmY29tcGF0X2lwdF9zdGFuZGFyZF9mbiwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9lcnJvcl90YXJnZXQgPSB7CkBAIC0xMzUwLDkgKzIyMTUsMTUgQEAKIAkuc2V0X29wdG1pbgk9IElQVF9CQVNFX0NUTCwKIAkuc2V0X29wdG1heAk9IElQVF9TT19TRVRfTUFYKzEsCiAJLnNldAkJPSBkb19pcHRfc2V0X2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXQJPSBjb21wYXRfZG9faXB0X3NldF9jdGwsCisjZW5kaWYKIAkuZ2V0X29wdG1pbgk9IElQVF9CQVNFX0NUTCwKIAkuZ2V0X29wdG1heAk9IElQVF9TT19HRVRfTUFYKzEsCiAJLmdldAkJPSBkb19pcHRfZ2V0X2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9nZXQJPSBjb21wYXRfZG9faXB0X2dldF9jdGwsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGljbXBfbWF0Y2hzdHJ1Y3QgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBlNDc2OGEzLi5hYWQ5ZDI4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTcyNSwyMiArNzI1LDE3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCi1zdGF0aWMgaW50IGluaXRfb3JfY2xlYW51cChpbnQgZmluaSkKK3N0YXRpYyBpbnQgX19pbml0IGlwdF9jbHVzdGVyaXBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlpZiAoZmluaSkKLQkJZ290byBjbGVhbnVwOworCXJldCA9IGlwdF9yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKGlwdF9yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cF9ub25lOwotCX0KLQotCWlmIChuZl9yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcykgPCAwKSB7Ci0JCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmY2lwX2FycF9vcHMpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFyZ2V0OwotCX0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJY2x1c3RlcmlwX3Byb2NkaXIgPSBwcm9jX21rZGlyKCJpcHRfQ0xVU1RFUklQIiwgcHJvY19uZXQpOwpAQCAtNzUzLDMxICs3NDgsMjQgQEAKIAogCXByaW50ayhLRVJOX05PVElDRSAiQ2x1c3RlcklQIFZlcnNpb24gJXMgbG9hZGVkIHN1Y2Nlc3NmdWxseVxuIiwKIAkJQ0xVU1RFUklQX1ZFUlNJT04pOwotCiAJcmV0dXJuIDA7CiAKLWNsZWFudXA6CitjbGVhbnVwX2hvb2s6CisJbmZfdW5yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcyk7CitjbGVhbnVwX3RhcmdldDoKKwlpcHRfdW5yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHRfY2x1c3RlcmlwX2Zpbmkodm9pZCkKK3sKIAlwcmludGsoS0VSTl9OT1RJQ0UgIkNsdXN0ZXJJUCBWZXJzaW9uICVzIHVubG9hZGluZ1xuIiwKIAkJQ0xVU1RFUklQX1ZFUlNJT04pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcmVtb3ZlX3Byb2NfZW50cnkoY2x1c3RlcmlwX3Byb2NkaXItPm5hbWUsIGNsdXN0ZXJpcF9wcm9jZGlyLT5wYXJlbnQpOwogI2VuZGlmCi1jbGVhbnVwX2hvb2s6CiAJbmZfdW5yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcyk7Ci1jbGVhbnVwX3RhcmdldDoKIAlpcHRfdW5yZWdpc3Rlcl90YXJnZXQoJmNsdXN0ZXJpcF90Z3QpOwotY2xlYW51cF9ub25lOgotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpcHRfY2x1c3RlcmlwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXB0X2NsdXN0ZXJpcF9maW5pKHZvaWQpCi17Ci0JaW5pdF9vcl9jbGVhbnVwKDEpOwogfQogCiBtb2R1bGVfaW5pdChpcHRfY2x1c3RlcmlwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKaW5kZXggMzlmZDRjMi4uYjk4ZjdiMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAogCWlmIChsb2dpbmZvLT5sb2dmbGFncyAmIElQVF9MT0dfTkZMT0cpCiAJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgaG9va251bSwgKnBza2IsIGluLCBvdXQsICZsaSwKLQkJICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOworCQkgICAgICAgICAgICAgICIlcyIsIGxvZ2luZm8tPnByZWZpeCk7CiAJZWxzZQogCQlpcHRfbG9nX3BhY2tldChQRl9JTkVULCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAogCQkgICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggNDI2OWE1NC4uMGJiYTNjMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0xMDYsNyArMTA2LDYgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAl1X2ludDE2X3QgdG1wX3BvcnQ7CiAJdV9pbnQzMl90IHRtcF9hZGRyOwotCXVuc2lnbmVkIGludCB0Y3BsZW47CiAJaW50IG5lZWRzX2FjazsKIAlpbnQgaGhfbGVuOwogCkBAIC0xMjQsMTMgKzEyMyw3IEBACiAJCXJldHVybjsKIAogCS8qIENoZWNrIGNoZWNrc3VtICovCi0JdGNwbGVuID0gb2xkc2tiLT5sZW4gLSBpcGgtPmlobCAqIDQ7Ci0JaWYgKCgoaG9vayAhPSBORl9JUF9MT0NBTF9JTiAmJiBvbGRza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9IVykgfHwKLQkgICAgIChob29rID09IE5GX0lQX0xPQ0FMX0lOICYmCi0JICAgICAgb2xkc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpKSAmJgotCSAgICBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAotCSAgICAgICAgICAgICAgICAgICAgICBvbGRza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IG9sZHNrYi0+Y3N1bSA6Ci0JICAgICAgICAgICAgICAgICAgICAgIHNrYl9jaGVja3N1bShvbGRza2IsIGlwaC0+aWhsICogNCwgdGNwbGVuLCAwKSkpCisJaWYgKG5mX2lwX2NoZWNrc3VtKG9sZHNrYiwgaG9vaywgaXBoLT5paGwgKiA0LCBJUFBST1RPX1RDUCkpCiAJCXJldHVybjsKIAogCWlmICgocnQgPSByb3V0ZV9yZXZlcnNlKG9sZHNrYiwgb3RoLCBob29rKSkgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZXNwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2VzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQwYjQxLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZXNwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyogS2VybmVsIG1vZHVsZSB0byBtYXRjaCBFU1AgcGFyYW1ldGVycy4gKi8KLQotLyogKEMpIDE5OTktMjAwMCBZb24gVXJpYXJ0ZSA8eW9uQGFzdGFyby5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJZb24gVXJpYXJ0ZSA8eW9uQGFzdGFyby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiaXB0YWJsZXMgRVNQIFNQSSBtYXRjaCBtb2R1bGUiKTsKLQotI2lmZGVmIERFQlVHX0NPTk5UUkFDSwotI2RlZmluZSBkdXByaW50Zihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQgLCAjIyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKQotI2VuZGlmCi0KLS8qIFJldHVybnMgMSBpZiB0aGUgc3BpIGlzIG1hdGNoZWQgYnkgdGhlIHJhbmdlLCAwIG90aGVyd2lzZSAqLwotc3RhdGljIGlubGluZSBpbnQKLXNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBpbnQgaW52ZXJ0KQotewotCWludCByPTA7Ci0gICAgICAgIGR1cHJpbnRmKCJlc3Agc3BpX21hdGNoOiVjIDB4JXggPD0gMHgleCA8PSAweCV4IixpbnZlcnQ/ICchJzonICcsCi0gICAgICAgIAltaW4sc3BpLG1heCk7Ci0Jcj0oc3BpID49IG1pbiAmJiBzcGkgPD0gbWF4KSBeIGludmVydDsKLQlkdXByaW50ZigiIHJlc3VsdCAlc1xuIixyPyAiUEFTUyIgOiAiRkFJTEVEIik7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQKLW1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0gICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0gICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLSAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKLSAgICAgIGludCBvZmZzZXQsCi0gICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKLSAgICAgIGludCAqaG90ZHJvcCkKLXsKLQlzdHJ1Y3QgaXBfZXNwX2hkciBfZXNwLCAqZWg7Ci0JY29uc3Qgc3RydWN0IGlwdF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0KLQkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwotCWlmIChvZmZzZXQpCi0JCXJldHVybiAwOwotCi0JZWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLAotCQkJCXNpemVvZihfZXNwKSwgJl9lc3ApOwotCWlmIChlaCA9PSBOVUxMKSB7Ci0JCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCi0JCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KLQkJICovCi0JCWR1cHJpbnRmKCJEcm9wcGluZyBldmlsIEVTUCB0aW55Z3JhbS5cbiIpOwotCQkqaG90ZHJvcCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBzcGlfbWF0Y2goZXNwaW5mby0+c3Bpc1swXSwgZXNwaW5mby0+c3Bpc1sxXSwKLQkJCSBudG9obChlaC0+c3BpKSwKLQkJCSAhIShlc3BpbmZvLT5pbnZmbGFncyAmIElQVF9FU1BfSU5WX1NQSSkpOwotfQotCi0vKiBDYWxsZWQgd2hlbiB1c2VyIHRyaWVzIHRvIGluc2VydCBhbiBlbnRyeSBvZiB0aGlzIHR5cGUuICovCi1zdGF0aWMgaW50Ci1jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICBjb25zdCB2b2lkICppcF92b2lkLAotCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCi0JICAgdm9pZCAqbWF0Y2hpbmZvLAotCSAgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAotCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0KLQkvKiBNdXN0IHNwZWNpZnkgbm8gdW5rbm93biBpbnZmbGFncyAqLwotCWlmIChlc3BpbmZvLT5pbnZmbGFncyAmIH5JUFRfRVNQX0lOVl9NQVNLKSB7Ci0JCWR1cHJpbnRmKCJpcHRfZXNwOiB1bmtub3duIGZsYWdzICVYXG4iLCBlc3BpbmZvLT5pbnZmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggZXNwX21hdGNoID0gewotCS5uYW1lCQk9ICJlc3AiLAotCS5tYXRjaAkJPSBtYXRjaCwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfZXNwKSwKLQkucHJvdG8JCT0gSVBQUk9UT19FU1AsCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlwdF9lc3BfaW5pdCh2b2lkKQotewotCXJldHVybiBpcHRfcmVnaXN0ZXJfbWF0Y2goJmVzcF9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcHRfZXNwX2Zpbmkodm9pZCkKLXsKLQlpcHRfdW5yZWdpc3Rlcl9tYXRjaCgmZXNwX21hdGNoKTsKLX0KLQotbW9kdWxlX2luaXQoaXB0X2VzcF9pbml0KTsKLW1vZHVsZV9leGl0KGlwdF9lc3BfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X211bHRpcG9ydC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9tdWx0aXBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5NWQ4My4uMDAwMDAwMAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X211bHRpcG9ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggb25lIG9mIGEgbGlzdCBvZiBUQ1AvVURQIHBvcnRzOiBwb3J0cyBhcmUgaW4KLSAgIHRoZSBzYW1lIHBsYWNlIHNvIHdlIGNhbiB0cmVhdCB0aGVtIGFzIGVxdWFsLiAqLwotCi0vKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCi0gKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tdWx0aXBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiaXB0YWJsZXMgbXVsdGlwbGUgcG9ydCBtYXRjaCBtb2R1bGUiKTsKLQotI2lmIDAKLSNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0ICwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikKLSNlbmRpZgotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHBvcnQgaXMgbWF0Y2hlZCBieSB0aGUgdGVzdCwgMCBvdGhlcndpc2UuICovCi1zdGF0aWMgaW5saW5lIGludAotcG9ydHNfbWF0Y2goY29uc3QgdV9pbnQxNl90ICpwb3J0bGlzdCwgZW51bSBpcHRfbXVsdGlwb3J0X2ZsYWdzIGZsYWdzLAotCSAgICB1X2ludDhfdCBjb3VudCwgdV9pbnQxNl90IHNyYywgdV9pbnQxNl90IGRzdCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCWlmIChmbGFncyAhPSBJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0JCSAgICAmJiBwb3J0bGlzdFtpXSA9PSBzcmMpCi0JCQlyZXR1cm4gMTsKLQotCQlpZiAoZmxhZ3MgIT0gSVBUX01VTFRJUE9SVF9TT1VSQ0UKLQkJICAgICYmIHBvcnRsaXN0W2ldID09IGRzdCkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHBvcnQgaXMgbWF0Y2hlZCBieSB0aGUgdGVzdCwgMCBvdGhlcndpc2UuICovCi1zdGF0aWMgaW5saW5lIGludAotcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEgKm1pbmZvLAotCSAgICAgICB1X2ludDE2X3Qgc3JjLCB1X2ludDE2X3QgZHN0KQotewotCXVuc2lnbmVkIGludCBpOwotCXVfaW50MTZfdCBzLCBlOwotCi0JZm9yIChpPTA7IGkgPCBtaW5mby0+Y291bnQ7IGkrKykgewotCQlzID0gbWluZm8tPnBvcnRzW2ldOwotCi0JCWlmIChtaW5mby0+cGZsYWdzW2ldKSB7Ci0JCQkvKiByYW5nZSBwb3J0IG1hdGNoaW5nICovCi0JCQllID0gbWluZm8tPnBvcnRzWysraV07Ci0JCQlkdXByaW50Zigic3JjIG9yIGRzdCBtYXRjaGVzIHdpdGggJWQtJWQ/XG4iLCBzLCBlKTsKLQotCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBJUFRfTVVMVElQT1JUX1NPVVJDRQotCQkJICAgICYmIHNyYyA+PSBzICYmIHNyYyA8PSBlKQotCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKLQkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gSVBUX01VTFRJUE9SVF9ERVNUSU5BVElPTgotCQkJICAgICYmIGRzdCA+PSBzICYmIGRzdCA8PSBlKQotCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKLQkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gSVBUX01VTFRJUE9SVF9FSVRIRVIKLQkJCSAgICAmJiAoKGRzdCA+PSBzICYmIGRzdCA8PSBlKQotCQkJCXx8IChzcmMgPj0gcyAmJiBzcmMgPD0gZSkpKQotCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKLQkJfSBlbHNlIHsKLQkJCS8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi8KLQkJCWR1cHJpbnRmKCJzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZD9cbiIsIHMpOwotCi0JCQlpZiAobWluZm8tPmZsYWdzID09IElQVF9NVUxUSVBPUlRfU09VUkNFCi0JCQkgICAgJiYgc3JjID09IHMpCi0JCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OwotCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0JCQkgICAgJiYgZHN0ID09IHMpCi0JCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OwotCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBJUFRfTVVMVElQT1JUX0VJVEhFUgotCQkJICAgICYmIChzcmMgPT0gcyB8fCBkc3QgPT0gcykpCi0JCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OwotCQl9Ci0JfQotIAotIAlyZXR1cm4gbWluZm8tPmludmVydDsKLX0KLQotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCXUxNiBfcG9ydHNbMl0sICpwcHRyOwotCWNvbnN0IHN0cnVjdCBpcHRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87Ci0KLQlpZiAob2Zmc2V0KQotCQlyZXR1cm4gMDsKLQotCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLAotCQkJCSAgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7Ci0JaWYgKHBwdHIgPT0gTlVMTCkgewotCQkvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQotCQkgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCi0JCSAqLwotCQlkdXByaW50ZigiaXB0X211bHRpcG9ydDoiCi0JCQkgIiBEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuIik7Ci0JCSpob3Rkcm9wID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHBvcnRzX21hdGNoKG11bHRpaW5mby0+cG9ydHMsCi0JCQkgICBtdWx0aWluZm8tPmZsYWdzLCBtdWx0aWluZm8tPmNvdW50LAotCQkJICAgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKLX0KLQotc3RhdGljIGludAotbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotCSBjb25zdCB2b2lkICptYXRjaGluZm8sCi0JIGludCBvZmZzZXQsCi0JIHVuc2lnbmVkIGludCBwcm90b2ZmLAotCSBpbnQgKmhvdGRyb3ApCi17Ci0JdTE2IF9wb3J0c1syXSwgKnBwdHI7Ci0JY29uc3Qgc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEgKm11bHRpaW5mbyA9IG1hdGNoaW5mbzsKLQotCWlmIChvZmZzZXQpCi0JCXJldHVybiAwOwotCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvZmYsCi0JCQkJICBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKLQlpZiAocHB0ciA9PSBOVUxMKSB7Ci0JCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCi0JCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KLQkJICovCi0JCWR1cHJpbnRmKCJpcHRfbXVsdGlwb3J0OiIKLQkJCSAiIERyb3BwaW5nIGV2aWwgb2Zmc2V0PTAgdGlueWdyYW0uXG4iKTsKLQkJKmhvdGRyb3AgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gcG9ydHNfbWF0Y2hfdjEobXVsdGlpbmZvLCBudG9ocyhwcHRyWzBdKSwgbnRvaHMocHB0clsxXSkpOwotfQotCi1zdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBtdWx0aXBvcnRfbWF0Y2ggPSB7Ci0JLm5hbWUJCT0gIm11bHRpcG9ydCIsCi0JLnJldmlzaW9uCT0gMCwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X211bHRpcG9ydCksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggbXVsdGlwb3J0X21hdGNoX3YxID0gewotCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAotCS5yZXZpc2lvbgk9IDEsCi0JLm1hdGNoCQk9IG1hdGNoX3YxLAotCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEpLAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlwdF9tdWx0aXBvcnRfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBpcHRfcmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7Ci0JaWYgKCFlcnIpIHsKLQkJZXJyID0gaXB0X3JlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2hfdjEpOwotCQlpZiAoZXJyKQotCQkJaXB0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlwdF9tdWx0aXBvcnRfZmluaSh2b2lkKQotewotCWlwdF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2gpOwotCWlwdF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2hfdjEpOwotfQotCi1tb2R1bGVfaW5pdChpcHRfbXVsdGlwb3J0X2luaXQpOwotbW9kdWxlX2V4aXQoaXB0X211bHRpcG9ydF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCmluZGV4IDE0Mzg0MzIuLmI4NDdlZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYwpAQCAtODIxLDYgKzgyMSw3IEBACiAJLyogQ3JlYXRlIG91ciBwcm9jICdzdGF0dXMnIGVudHJ5LiAqLwogCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoY3Vycl90YWJsZS0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19uZXRfaXB0X3JlY2VudCk7CiAJaWYgKCFjdXJyX3RhYmxlLT5zdGF0dXNfcHJvYykgeworCQl2ZnJlZShob2xkKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB1bmFibGUgdG8gYWxsb2NhdGUgZm9yIC9wcm9jIGVudHJ5LlxuIik7CiAJCS8qIERlc3Ryb3kgdGhlIGNyZWF0ZWQgdGFibGUgKi8KIAkJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CkBAIC04NDUsNyArODQ2LDYgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKIAkJdmZyZWUoY3Vycl90YWJsZS0+dGltZV9pbmZvKTsKIAkJdmZyZWUoY3Vycl90YWJsZS0+aGFzaF90YWJsZSk7Ci0JCXZmcmVlKGhvbGQpOwogCQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZSk7CiAJCXZmcmVlKGN1cnJfdGFibGUpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKaW5kZXggM2Q4MGFlZi4uN2Y0MTc0OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTE1NywzNyArMTU3LDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMF0pOworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzFdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2swOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1syXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMTsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2sxOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMF0pOwogIGNsZWFudXBfdGFibGU6CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9maWx0ZXIpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXB0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzW2ldKTsKLQorCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CiAJaXB0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9maWx0ZXIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IDQxMmZjOTYuLjM5N2I5NWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC0yMTEsNDkgKzIxMSwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMl0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazE7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzNdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2syOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1s0XSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMzsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2szOgotICAgICAgICBuZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbM10pOwotIGNsZWFudXBfaG9vazI6Ci0gICAgICAgIG5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1syXSk7Ci0gY2xlYW51cF9ob29rMToKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfbWFuZ2xlcik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXB0YWJsZV9tYW5nbGVfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcHRfb3BzKS9zaXplb2Yoc3RydWN0IG5mX2hvb2tfb3BzKTsgaSsrKQotCQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X21hbmdsZXIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDAzY2M3OWEuLjc5MTJjY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0xMDEsMTggKzEwMSwxOCBAQAogLyogJ3JhdycgaXMgdGhlIHZlcnkgZmlyc3QgdGFibGUuICovCiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdF9vcHNbXSA9IHsKIAl7Ci0JICAuaG9vayA9IGlwdF9ob29rLCAKLQkgIC5wZiA9IFBGX0lORVQsIAotCSAgLmhvb2tudW0gPSBORl9JUF9QUkVfUk9VVElORywgCi0JICAucHJpb3JpdHkgPSBORl9JUF9QUklfUkFXLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5ob29rID0gaXB0X2hvb2ssCisJCS5wZiA9IFBGX0lORVQsCisJCS5ob29rbnVtID0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewotCSAgLmhvb2sgPSBpcHRfaG9vaywgCi0JICAucGYgPSBQRl9JTkVULCAKLQkgIC5ob29rbnVtID0gTkZfSVBfTE9DQUxfT1VULCAKLQkgIC5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLmhvb2sgPSBpcHRfaG9vaywKKwkJLnBmID0gUEZfSU5FVCwKKwkJLmhvb2tudW0gPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xMjYsMzEgKzEyNiwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwX2hvb2swOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXB0YWJsZV9yYXdfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcHRfb3BzKS9zaXplb2Yoc3RydWN0IG5mX2hvb2tfb3BzKTsgaSsrKQotCQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKIAlpcHRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IDRhZmJjNjkuLjc3ZDk3NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMjEwLDcxICsyMTAsNjMgQEAKIAogLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCiAgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLwotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19kZWZyYWdfb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVCwKLQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rICAgICAgICAgICA9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKLQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkucGYgICAgICAgICAgICAgPSBQRl9JTkVULAotCS5ob29rbnVtICAgICAgICA9IE5GX0lQX0xPQ0FMX09VVCwKLQkucHJpb3JpdHkgICAgICAgPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKLX07Ci0KLS8qIGhlbHBlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfaGVscGVyX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKLX07Ci0KLQotLyogUmVmcmFnbWVudGVyOyBsYXN0IGNoYW5jZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfb3V0X29wcyA9IHsKLQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVULAotCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjRfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQsCi0JLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKLQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX29wc1tdID0geworCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfZGVmcmFnLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rICAgICAgICAgICA9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJCS5wZiAgICAgICAgICAgICA9IFBGX0lORVQsCisJCS5ob29rbnVtICAgICAgICA9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5ICAgICAgID0gTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19oZWxwLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2NF9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorCX0sCisJeworCQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTM1Niw2ICszNDgsNyBAQAogCQkJLnR1cGxlLmRzdC51LnRjcC5wb3J0OwogCQlzaW4uc2luX2FkZHIuc19hZGRyID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCiAJCQkudHVwbGUuZHN0LnUzLmlwOworCQltZW1zZXQoc2luLnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLnNpbl96ZXJvKSk7CiAKIAkJREVCVUdQKCJTT19PUklHSU5BTF9EU1Q6ICV1LiV1LiV1LiV1ICV1XG4iLAogCQkgICAgICAgTklQUVVBRChzaW4uc2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLnNpbl9wb3J0KSk7CkBAIC00NDAsMTYgKzQzMywyMCBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQ7CiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNDsKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wOwotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCisKK01PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBuZXRmaWx0ZXIgc29ja2V0IG9wdGlvblxuIik7Ci0JCWdvdG8gY2xlYW51cF9ub3RoaW5nOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQpOwpAQCAtNDc2LDg0ICs0NzMsMjYgQEAKIAkJZ290byBjbGVhbnVwX2ljbXA7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2NF9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnIGhvb2suXG4iKTsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKIAkJZ290byBjbGVhbnVwX2lwdjQ7CiAJfQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ29wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19pbl9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBoZWxwZXIgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgcG9zdHJvdXRpbmcgaGVscGVyIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2hlbHBlcmlub3BzOwotCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX291dF9vcHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHBvc3Qtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9oZWxwZXJvdXRvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjRfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcm91dG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzKTsKLSBjbGVhbnVwX2hlbHBlcmlub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7Ci0gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7Ci0gY2xlYW51cF9pbm9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2luX29wcyk7Ci0gY2xlYW51cF9kZWZyYWdsb2NhbG9wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ29wczoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19vcHMpOwogIGNsZWFudXBfaXB2NDoKIAluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0KTsKICBjbGVhbnVwX2ljbXA6CkBAIC01NjQsMjIgKzUwMywyMSBAQAogCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CiAgY2xlYW51cF9zb2Nrb3B0OgogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmc29fZ2V0b3JpZ2RzdCk7Ci0gY2xlYW51cF9ub3RoaW5nOgogCXJldHVybiByZXQ7CiB9CiAKLU1PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY0X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNTJkYzE3NS4uNGIwZDM2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTIzNSwzMCArMjM1LDE0IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtICE9IE5GX0lQX1BSRV9ST1VUSU5HKQotCQlnb3RvIGNoZWNrc3VtX3NraXBwZWQ7Ci0KLQlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7Ci0JY2FzZSBDSEVDS1NVTV9IVzoKLQkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQotCQkJYnJlYWs7CisJaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCAwKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSFcgSUNNUCBjaGVja3N1bSAiKTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7Ci0JY2FzZSBDSEVDS1NVTV9OT05FOgotCQlpZiAoKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkgewotCQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCi0JCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsCi0JCQkJCSAgICAgIE5VTEwsCi0JCQkJCSAgICAgICJuZl9jdF9pY21wOiBiYWQgSUNNUCBjaGVja3N1bSAiKTsKLQkJCXJldHVybiAtTkZfQUNDRVBUOwotCQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCi1jaGVja3N1bV9za2lwcGVkOgogCS8qCiAJICoJMTggaXMgdGhlIGhpZ2hlc3QgJ2tub3duJyBJQ01QIHR5cGUuIEFueXRoaW5nIGVsc2UgaXMgYSBteXN0ZXJ5CiAJICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCAxYjE2N2M0Yi4uZDYxZTJhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvYy5jCisrKyBiL25ldC9pcHY0L3Byb2MuYwpAQCAtNDksNyArNDksNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC05MSw3ICs5MSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlyZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKikgcGVyX2NwdV9wdHIobWliWzBdLCBpKSkgKyBvZmZ0KTsKIAkJcmVzICs9ICooKCh1bnNpZ25lZCBsb25nICopIHBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTRmY2JjNS4uY2M5NDIzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yNzQxLDcgKzI3NDEsMTAgQEAKIAkvKiBSZXNlcnZlIHJvb20gZm9yIGR1bW15IGhlYWRlcnMsIHRoaXMgc2tiIGNhbiBwYXNzCiAJICAgdGhyb3VnaCBnb29kIGNodW5rIG9mIHJvdXRpbmcgZW5naW5lLgogCSAqLwotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPm1hYy5yYXcgPSBza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKKworCS8qIEJ1Z2ZpeDogbmVlZCB0byBnaXZlIGlwX3JvdXRlX2lucHV0IGVub3VnaCBvZiBhbiBJUCBoZWFkZXIgdG8gbm90IGdhZy4gKi8KKwlza2ItPm5oLmlwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7CiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCiAJaWYgKHJ0YVtSVEFfU1JDIC0gMV0pCkBAIC0zMDgzLDcgKzMwODYsNyBAQAogCQltZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCk7CiAKIAkJLyogQWRkIHRoZSBvdGhlciBjcHVzIGluLCBvbmUgaW50IGF0IGEgdGltZSAqLwotCQlmb3JfZWFjaF9jcHUoaSkgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQkJdW5zaWduZWQgaW50IGo7CiAKIAkJCXNyYyA9ICgodTMyICopIElQX1JUX0FDQ1RfQ1BVKGkpKSArIG9mZnNldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggODdmNjhlNy4uZTJiN2I4MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE0NjgsNiArMTQ2OCw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZGF0YV93YXNfdW5yZWFkID0gMDsKKwlpbnQgc3RhdGU7CiAKIAlsb2NrX3NvY2soc2spOwogCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CkBAIC0xNTQ0LDYgKzE1NDUsMTEgQEAKIAlza19zdHJlYW1fd2FpdF9jbG9zZShzaywgdGltZW91dCk7CiAKIGFkanVkZ2VfdG9fZGVhdGg6CisJc3RhdGUgPSBzay0+c2tfc3RhdGU7CisJc29ja19ob2xkKHNrKTsKKwlzb2NrX29ycGhhbihzayk7CisJYXRvbWljX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKKwogCS8qIEl0IGlzIHRoZSBsYXN0IHJlbGVhc2Vfc29jayBpbiBpdHMgbGlmZS4gSXQgd2lsbCByZW1vdmUgYmFja2xvZy4gKi8KIAlyZWxlYXNlX3NvY2soc2spOwogCkBAIC0xNTU1LDggKzE1NjEsOSBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJQlVHX1RSQVAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpOwogCi0Jc29ja19ob2xkKHNrKTsKLQlzb2NrX29ycGhhbihzayk7CisJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGEgc29mdGlycSBvciBiYWNrbG9nPyAqLworCWlmIChzdGF0ZSAhPSBUQ1BfQ0xPU0UgJiYgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKKwkJZ290byBvdXQ7CiAKIAkvKglUaGlzIGlzIGEgKHVzZWZ1bCkgQlNEIHZpb2xhdGluZyBvZiB0aGUgUkZDLiBUaGVyZSBpcyBhCiAJICoJcHJvYmxlbSB3aXRoIFRDUCBhcyBzcGVjaWZpZWQgaW4gdGhhdCB0aGUgb3RoZXIgZW5kIGNvdWxkCkBAIC0xNTg0LDcgKzE1OTEsNiBAQAogCQkJaWYgKHRtbyA+IFRDUF9USU1FV0FJVF9MRU4pIHsKIAkJCQlpbmV0X2Nza19yZXNldF9rZWVwYWxpdmVfdGltZXIoc2ssIHRjcF9maW5fdGltZShzaykpOwogCQkJfSBlbHNlIHsKLQkJCQlhdG9taWNfaW5jKHNrLT5za19wcm90LT5vcnBoYW5fY291bnQpOwogCQkJCXRjcF90aW1lX3dhaXQoc2ssIFRDUF9GSU5fV0FJVDIsIHRtbyk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0xNjAzLDcgKzE2MDksNiBAQAogCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7CiAJCX0KIAl9Ci0JYXRvbWljX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKIAogCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKQogCQlpbmV0X2Nza19kZXN0cm95X3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCmluZGV4IGUwZTlkMTMuLmJhN2M2M2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYworKysgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKQEAgLTEzNSwxMCArMTM1LDExIEBACiAKIAkJLyogRG8gYWRkaXRpdmUgaW5jcmVhc2UgKi8KIAkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkgewotCQkJdHAtPnNuZF9jd25kX2NudCArPSBjYS0+YWk7CisJCQkvKiBjd25kID0gY3duZCArIGEodykgLyBjd25kICovCisJCQl0cC0+c25kX2N3bmRfY250ICs9IGNhLT5haSArIDE7CiAJCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKLQkJCQl0cC0+c25kX2N3bmQrKzsKIAkJCQl0cC0+c25kX2N3bmRfY250IC09IHRwLT5zbmRfY3duZDsKKwkJCQl0cC0+c25kX2N3bmQrKzsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMTk1ZDgzNS4uYjU1MjFhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJICogSGVuY2UsIHdlIGNhbiBkZXRlY3QgdGltZWQgb3V0IHBhY2tldHMgZHVyaW5nIGZhc3QKIAkgKiByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgogCSAqLwotCWlmICh0Y3BfaGVhZF90aW1lZG91dChzaywgdHApKSB7CisJaWYgKCFJc1Jlbm8odHApICYmIHRjcF9oZWFkX3RpbWVkb3V0KHNrLCB0cCkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50CkBAIC00NTU5LDcgKzQ1NTksNiBAQAogCiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfZWNuKTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9yZW9yZGVyaW5nKTsKLUVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9hYmMpOwogRVhQT1JUX1NZTUJPTCh0Y3BfcGFyc2Vfb3B0aW9ucyk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3ZfZXN0YWJsaXNoZWQpOwogRVhQT1JUX1NZTUJPTCh0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggOWU4NWMwNC4uNjcyOTUwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xODU5LDUgKzE4NTksNCBAQAogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlKTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSk7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfdHdfcmV1c2UpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggOWQ3OTU0Ni4uZjMzYzlkZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNTksOSArNTksNiBAQAogaW50IHN5c2N0bF90Y3BfbXR1X3Byb2JpbmcgPSAwOwogaW50IHN5c2N0bF90Y3BfYmFzZV9tc3MgPSA1MTI7CiAKLUVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9tdHVfcHJvYmluZyk7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfYmFzZV9tc3MpOwotCiBzdGF0aWMgdm9pZCB1cGRhdGVfc2VuZF9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTQ2OCw3ICs0NjUsNyBAQAogCVRDUF9JTkNfU1RBVFMoVENQX01JQl9PVVRTRUdTKTsKIAogCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7Ci0JaWYgKHVubGlrZWx5KGVyciA8PSAwKSkKKwlpZiAobGlrZWx5KGVyciA8PSAwKSkKIAkJcmV0dXJuIGVycjsKIAogCXRjcF9lbnRlcl9jd3Ioc2spOwpAQCAtNTM2LDYgKzUzMyw3IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOworCWludCBubGVuOwogCXUxNiBmbGFnczsKIAogCUJVR19PTihsZW4gPiBza2ItPmxlbik7CkBAIC01NTQsNyArNTUyLDExIEBACiAJYnVmZiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssIG5zaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoYnVmZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsgLyogV2UnbGwganVzdCB0cnkgYWdhaW4gbGF0ZXIuICovCisKIAlza19jaGFyZ2Vfc2tiKHNrLCBidWZmKTsKKwlubGVuID0gc2tiLT5sZW4gLSBsZW4gLSBuc2l6ZTsKKwlidWZmLT50cnVlc2l6ZSArPSBubGVuOworCXNrYi0+dHJ1ZXNpemUgLT0gbmxlbjsKIAogCS8qIENvcnJlY3QgdGhlIHNlcXVlbmNlIG51bWJlcnMuICovCiAJVENQX1NLQl9DQihidWZmKS0+c2VxID0gVENQX1NLQl9DQihza2IpLT5zZXEgKyBsZW47CkBAIC02NDAsNyArNjQyLDcgQEAKICAqIGV2ZW50dWFsbHkpLiBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHB1bGxlZCBkYXRhIG5vdCBjb3BpZWQsIGJ1dAogICogaW1tZWRpYXRlbHkgZGlzY2FyZGVkLgogICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqX19wc2tiX3RyaW1faGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgX19wc2tiX3RyaW1faGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewogCWludCBpLCBrLCBlYXQ7CiAKQEAgLTY2NSw3ICs2NjcsNiBAQAogCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YTsKIAlza2ItPmRhdGFfbGVuIC09IGxlbjsKIAlza2ItPmxlbiA9IHNrYi0+ZGF0YV9sZW47Ci0JcmV0dXJuIHNrYi0+dGFpbDsKIH0KIAogaW50IHRjcF90cmltX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuKQpAQCAtNjc0LDEyICs2NzUsMTEgQEAKIAkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkgeworCS8qIElmIGxlbiA9PSBoZWFkbGVuLCB3ZSBhdm9pZCBfX3NrYl9wdWxsIHRvIHByZXNlcnZlIGFsaWdubWVudC4gKi8KKwlpZiAodW5saWtlbHkobGVuIDwgc2tiX2hlYWRsZW4oc2tiKSkpCiAJCV9fc2tiX3B1bGwoc2tiLCBsZW4pOwotCX0gZWxzZSB7Ci0JCWlmIChfX3Bza2JfdHJpbV9oZWFkKHNrYiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJZWxzZQorCQlfX3Bza2JfdHJpbV9oZWFkKHNrYiwgbGVuIC0gc2tiX2hlYWRsZW4oc2tiKSk7CiAKIAlUQ1BfU0tCX0NCKHNrYiktPnNlcSArPSBsZW47CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKQEAgLTEwNDAsNyArMTA0MCw4IEBACiAJaWYgKHVubGlrZWx5KGJ1ZmYgPT0gTlVMTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYnVmZi0+dHJ1ZXNpemUgPSBubGVuOworCXNrX2NoYXJnZV9za2Ioc2ssIGJ1ZmYpOworCWJ1ZmYtPnRydWVzaXplICs9IG5sZW47CiAJc2tiLT50cnVlc2l6ZSAtPSBubGVuOwogCiAJLyogQ29ycmVjdCB0aGUgc2VxdWVuY2UgbnVtYmVycy4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3R1bm5lbDQuYyBiL25ldC9pcHY0L3R1bm5lbDQuYwppbmRleCAwZDdkMzg2Li44ZDMwYzQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90dW5uZWw0LmMKKysrIGIvbmV0L2lwdjQvdHVubmVsNC5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bmV0L2ljbXAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCkBAIC03MCwxMCArNzIsMTYgQEAKIHsKIAlzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXI7CiAKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCWdvdG8gZHJvcDsKKwogCWZvciAoaGFuZGxlciA9IHR1bm5lbDRfaGFuZGxlcnM7IGhhbmRsZXI7IGhhbmRsZXIgPSBoYW5kbGVyLT5uZXh0KQogCQlpZiAoIWhhbmRsZXItPmhhbmRsZXIoc2tiKSkKIAkJCXJldHVybiAwOwogCisJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTsKKworZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IDg1MGQ5MTkuLjNlMTc0YzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMzcsOCArMzcsNiBAQAogewogCXN3aXRjaCAobmV4dGhkcikgewogCWNhc2UgSVBQUk9UT19JUElQOgotCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAkJKnNwaSA9IHNrYi0+bmguaXBoLT5zYWRkcjsKIAkJKnNlcSA9IDA7CiAJCXJldHVybiAwOwpAQCAtNjgsNyArNjYsNyBAQAogewogCWludCBlcnI7CiAJdTMyIHNwaSwgc2VxOwotCXN0cnVjdCBzZWNfZGVjYXBfc3RhdGUgeGZybV92ZWNbWEZSTV9NQVhfREVQVEhdOworCXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3ZlY1tYRlJNX01BWF9ERVBUSF07CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJaW50IHhmcm1fbnIgPSAwOwogCWludCBkZWNhcHMgPSAwOwpAQCAtOTAsMTQgKzg4LDE2IEBACiAJCWlmICh1bmxpa2VseSh4LT5rbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKKwkJaWYgKCh4LT5lbmNhcCA/IHgtPmVuY2FwLT5lbmNhcF90eXBlIDogMCkgIT0gZW5jYXBfdHlwZSkKKwkJCWdvdG8gZHJvcF91bmxvY2s7CisKIAkJaWYgKHgtPnByb3BzLnJlcGxheV93aW5kb3cgJiYgeGZybV9yZXBsYXlfY2hlY2soeCwgc2VxKSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKIAkJaWYgKHhmcm1fc3RhdGVfY2hlY2tfZXhwaXJlKHgpKQogCQkJZ290byBkcm9wX3VubG9jazsKIAotCQl4ZnJtX3ZlY1t4ZnJtX25yXS5kZWNhcC5kZWNhcF90eXBlID0gZW5jYXBfdHlwZTsKLQkJaWYgKHgtPnR5cGUtPmlucHV0KHgsICYoeGZybV92ZWNbeGZybV9ucl0uZGVjYXApLCBza2IpKQorCQlpZiAoeC0+dHlwZS0+aW5wdXQoeCwgc2tiKSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKIAkJLyogb25seSB0aGUgZmlyc3QgeGZybSBnZXRzIHRoZSBlbmNhcCB0eXBlICovCkBAIC0xMTEsNyArMTExLDcgQEAKIAogCQlzcGluX3VubG9jaygmeC0+bG9jayk7CiAKLQkJeGZybV92ZWNbeGZybV9ucisrXS54dmVjID0geDsKKwkJeGZybV92ZWNbeGZybV9ucisrXSA9IHg7CiAKIAkJaXBoID0gc2tiLT5uaC5pcGg7CiAKQEAgLTE1Myw3ICsxNTMsOCBAQAogCWlmICh4ZnJtX25yICsgc2tiLT5zcC0+bGVuID4gWEZSTV9NQVhfREVQVEgpCiAJCWdvdG8gZHJvcDsKIAotCW1lbWNweShza2ItPnNwLT54K3NrYi0+c3AtPmxlbiwgeGZybV92ZWMsIHhmcm1fbnIqc2l6ZW9mKHN0cnVjdCBzZWNfZGVjYXBfc3RhdGUpKTsKKwltZW1jcHkoc2tiLT5zcC0+eHZlYyArIHNrYi0+c3AtPmxlbiwgeGZybV92ZWMsCisJICAgICAgIHhmcm1fbnIgKiBzaXplb2YoeGZybV92ZWNbMF0pKTsKIAlza2ItPnNwLT5sZW4gKz0geGZybV9ucjsKIAogCW5mX3Jlc2V0KHNrYik7CkBAIC0xODQsNyArMTg1LDcgQEAKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIGRyb3A6CiAJd2hpbGUgKC0teGZybV9uciA+PSAwKQotCQl4ZnJtX3N0YXRlX3B1dCh4ZnJtX3ZlY1t4ZnJtX25yXS54dmVjKTsKKwkJeGZybV9zdGF0ZV9wdXQoeGZybV92ZWNbeGZybV9ucl0pOwogCiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYyBiL25ldC9pcHY0L3hmcm00X291dHB1dC5jCmluZGV4IDMyYWQyMjkuLjRlZjhlZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jCisrKyBiL25ldC9pcHY0L3hmcm00X291dHB1dC5jCkBAIC02Miw3ICs2Miw3IEBACiAJdG9wX2lwaC0+ZnJhZ19vZmYgPSAoZmxhZ3MgJiBYRlJNX1NUQVRFX05PUE1UVURJU0MpID8KIAkJMCA6IChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKTsKIAlpZiAoIXRvcF9pcGgtPmZyYWdfb2ZmKQotCQlfX2lwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QsIDApOworCQlfX2lwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QtPmNoaWxkLCAwKTsKIAogCXRvcF9pcGgtPnR0bCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggZjI4NWJiZi4uODYwNGM3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCB4cHJ0aCArIDQgLSBza2ItPmRhdGEpKSB7CiAJCQkJdTE2ICppcGNvbXBfaGRyID0gKHUxNiAqKXhwcnRoOwogCi0JCQkJZmwtPmZsX2lwc2VjX3NwaSA9IG50b2hsKG50b2hzKGlwY29tcF9oZHJbMV0pKTsKKwkJCQlmbC0+ZmxfaXBzZWNfc3BpID0gaHRvbmwobnRvaHMoaXBjb21wX2hkclsxXSkpOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF90dW5uZWwuYyBiL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCmluZGV4IDJkNjcwOTMuLmY4Y2VhYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCisrKyBiL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCkBAIC0yMSw3ICsyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXBpcF94ZnJtX3JjdihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKmRlY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpcGlwX3hmcm1fcmN2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCBjZjU4MjUxLi42Nzc4MTczIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYworKysgYi9uZXQvaXB2Ni9haDYuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBhaDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYWg2X2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCiAJICogQmVmb3JlIHByb2Nlc3MgQUgKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCAzZGNhYWM3Li4yMmYwNDYwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGVzcDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgZXNwNl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCXN0cnVjdCBpcHY2X2VzcF9oZHIgKmVzcGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggMmExZTdlNC4uYTE4ZDQyNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNDg1LDE1ICs0ODUsMjcgQEAKIAl7IC0xLCB9CiB9OwogCi1pbnQgaXB2Nl9wYXJzZV9ob3BvcHRzKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZikKK2ludCBpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7CiAKKwkvKgorCSAqIHNrYi0+bmgucmF3IGlzIGVxdWFsIHRvIHNrYi0+ZGF0YSwgYW5kCisJICogc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3IGlzIGFsd2F5cyBlcXVhbCB0bworCSAqIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgYnkgZGVmaW5pdGlvbiBvZgorCSAqIGhvcC1ieS1ob3Agb3B0aW9ucy4KKwkgKi8KKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgOCkgfHwKKwkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgKChza2ItPmgucmF3WzFdICsgMSkgPDwgMykpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLTE7CisJfQorCiAJb3B0LT5ob3AgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCWlmIChpcDZfcGFyc2VfdGx2KHRsdnByb2Nob3BvcHRfbHN0LCBza2IpKSB7CiAJCXNrYi0+aC5yYXcgKz0gKHNrYi0+aC5yYXdbMV0rMSk8PDM7CiAJCW9wdC0+bmhvZmYgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCAyMWViNzI1Li4xMDQ0YjZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC03MTcsNyArNzE3LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVyciwgaSwgajsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fSUNNUFY2LAogCQkJCSAgICAgICAmcGVyX2NwdShfX2ljbXB2Nl9zb2NrZXQsIGkpKTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTc2Myw3ICs3NjMsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzb2NrX3JlbGVhc2UocGVyX2NwdShfX2ljbXB2Nl9zb2NrZXQsIGkpKTsKIAl9CiAJaW5ldDZfZGVsX3Byb3RvY29sKCZpY21wdjZfcHJvdG9jb2wsIElQUFJPVE9fSUNNUFY2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggZjhmM2EzNy4uZWIyODY1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCiAJCWlmIChlcnIpIHsKIAkJCXNrLT5za19lcnJfc29mdCA9IC1lcnI7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtMTgxLDYgKzE4Miw3IEBACiAKIAkJaWYgKChlcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKSB7CiAJCQlzay0+c2tfcm91dGVfY2FwcyA9IDA7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCmluZGV4IGJiOGZmYjguLjJhZTg0YzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKQEAgLTIzLDYgKzIzLDg2IEBACiAjaW5jbHVkZSA8bmV0L2luZXQ2X2hhc2h0YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAordm9pZCBfX2luZXQ2X2hhc2goc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCXN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKKwlyd2xvY2tfdCAqbG9jazsKKworCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKKwkJbGlzdCA9ICZoYXNoaW5mby0+bGlzdGVuaW5nX2hhc2hbaW5ldF9za19saXN0ZW5faGFzaGZuKHNrKV07CisJCWxvY2sgPSAmaGFzaGluZm8tPmxoYXNoX2xvY2s7CisJCWluZXRfbGlzdGVuX3dsb2NrKGhhc2hpbmZvKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgaGFzaDsKKwkJc2stPnNrX2hhc2ggPSBoYXNoID0gaW5ldDZfc2tfZWhhc2hmbihzayk7CisJCWhhc2ggJj0gKGhhc2hpbmZvLT5laGFzaF9zaXplIC0gMSk7CisJCWxpc3QgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmNoYWluOworCQlsb2NrID0gJmhhc2hpbmZvLT5laGFzaFtoYXNoXS5sb2NrOworCQl3cml0ZV9sb2NrKGxvY2spOworCX0KKworCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOworCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKKwl3cml0ZV91bmxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW5ldDZfaGFzaCk7CisKKy8qCisgKiBTb2NrZXRzIGluIFRDUF9DTE9TRSBzdGF0ZSBhcmUgX2Fsd2F5c18gdGFrZW4gb3V0IG9mIHRoZSBoYXNoLCBzbworICogd2UgbmVlZCBub3QgY2hlY2sgaXQgZm9yIFRDUCBsb29rdXBzIGFueW1vcmUsIHRoYW5rcyBBbGV4ZXkuIC1EYXZlTQorICoKKyAqIFRoZSBzb2NraGFzaCBsb2NrIG11c3QgYmUgaGVsZCBhcyBhIHJlYWRlciBoZXJlLgorICovCitzdHJ1Y3Qgc29jayAqX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgICBjb25zdCB1MTYgc3BvcnQsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgIGNvbnN0IHUxNiBobnVtLAorCQkJCQkgICBjb25zdCBpbnQgZGlmKQoreworCXN0cnVjdCBzb2NrICpzazsKKwljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOworCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgorCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCisJICovCisJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBobnVtLCBzYWRkciwgc3BvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhhc2hpbmZvLCBoYXNoKTsKKworCXByZWZldGNoKGhlYWQtPmNoYWluLmZpcnN0KTsKKwlyZWFkX2xvY2soJmhlYWQtPmxvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKwkJLyogRm9yIElQVjYgZG8gdGhlIGNoZWFwZXIgcG9ydCBhbmQgZmFtaWx5IHRlc3RzIGZpcnN0LiAqLworCQlpZiAoSU5FVDZfTUFUQ0goc2ssIGhhc2gsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCisJCQlnb3RvIGhpdDsgLyogWW91IHN1bmsgbXkgYmF0dGxlc2hpcCEgKi8KKwl9CisJLyogTXVzdCBjaGVjayBmb3IgYSBUSU1FX1dBSVQnZXIgYmVmb3JlIGdvaW5nIHRvIGxpc3RlbmVyIGhhc2guICovCisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICYoaGVhZCArIGhhc2hpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKKwkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOworCisJCWlmKCooKF9fdTMyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgorCQkgICBzay0+c2tfZmFtaWx5CQk9PSBQRl9JTkVUNikgeworCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOworCisJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0dzYtPnR3X3Y2X2RhZGRyLCBzYWRkcikJJiYKKwkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikJJiYKKwkJCSAgICAoIXNrLT5za19ib3VuZF9kZXZfaWYgfHwgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkaWYpKQorCQkJCWdvdG8gaGl0OworCQl9CisJfQorCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwlyZXR1cm4gTlVMTDsKKworaGl0OgorCXNvY2tfaG9sZChzayk7CisJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOworCXJldHVybiBzazsKK30KK0VYUE9SVF9TWU1CT0woX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQpOworCiBzdHJ1Y3Qgc29jayAqaW5ldDZfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCSAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhudW0sIGNvbnN0IGludCBkaWYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDI5ZjczNTkuLmFjZWVlMjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC0xMTQsMTEgKzExNCwxMCBAQAogCX0KIAogCWlmIChoZHItPm5leHRoZHIgPT0gTkVYVEhEUl9IT1ApIHsKLQkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IsIElQNkNCKHNrYiktPm5ob2ZmKSA8IDApIHsKKwkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IpIDwgMCkgewogCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQloZHIgPSBza2ItPm5oLmlwdjZoOwogCX0KIAogCXJldHVybiBORl9IT09LKFBGX0lORVQ2LE5GX0lQNl9QUkVfUk9VVElORywgc2tiLCBkZXYsIE5VTEwsIGlwNl9yY3ZfZmluaXNoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBmZjkwNDBjLi5hOTk1Nzk2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC01MTksOSArNTE5LDYgQEAKIAlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAJc3RydWN0IGlwNl90bmwgKnQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YgKCppcHY2aCkpKQotCQlnb3RvIGRpc2NhcmQ7Ci0KIAlpcHY2aCA9IHNrYi0+bmguaXB2Nmg7CiAKIAlyZWFkX2xvY2soJmlwNmlwNl9sb2NrKTsKQEAgLTUyOSw4ICs1MjYsNyBAQAogCWlmICgodCA9IGlwNmlwNl90bmxfbG9va3VwKCZpcHY2aC0+c2FkZHIsICZpcHY2aC0+ZGFkZHIpKSAhPSBOVUxMKSB7CiAJCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7CiAJCQlyZWFkX3VubG9jaygmaXA2aXA2X2xvY2spOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gZGlzY2FyZDsKIAkJfQogCiAJCWlmICghKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX0NBUF9SQ1YpKSB7CkBAIC01NTcsOSArNTUzLDExIEBACiAJCXJldHVybiAwOwogCX0KIAlyZWFkX3VubG9jaygmaXA2aXA2X2xvY2spOwotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X0FERFJfVU5SRUFDSCwgMCwgc2tiLT5kZXYpOwotZGlzY2FyZDoKIAlyZXR1cm4gMTsKKworZGlzY2FyZDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKmNyZWF0ZV90ZWwoX191OCBlbmNhcF9saW1pdCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCBkNGNmZWMzLi40ODYzNjQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgaW50IGlwY29tcDZfc2NyYXRjaF91c2VyczsKIHN0YXRpYyBMSVNUX0hFQUQoaXBjb21wNl90Zm1zX2xpc3QpOwogCi1zdGF0aWMgaW50IGlwY29tcDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgaXBjb21wNl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyID0gMDsKIAl1OCBuZXh0aGRyID0gMDsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWlmICh0eXBlICE9IElDTVBWNl9ERVNUX1VOUkVBQ0ggJiYgdHlwZSAhPSBJQ01QVjZfUEtUX1RPT0JJRykKIAkJcmV0dXJuOwogCi0Jc3BpID0gbnRvaGwobnRvaHMoaXBjb21waC0+Y3BpKSk7CisJc3BpID0gaHRvbmwobnRvaHMoaXBjb21waC0+Y3BpKSk7CiAJeCA9IHhmcm1fc3RhdGVfbG9va3VwKCh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJaWYgKCFzY3JhdGNoZXMpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9ICpwZXJfY3B1X3B0cihzY3JhdGNoZXMsIGkpOwogCiAJCXZmcmVlKHNjcmF0Y2gpOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIAlpcGNvbXA2X3NjcmF0Y2hlcyA9IHNjcmF0Y2hlczsKIAotCWZvcl9lYWNoX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdm9pZCAqc2NyYXRjaCA9IHZtYWxsb2MoSVBDT01QX1NDUkFUQ0hfU0laRSk7CiAJCWlmICghc2NyYXRjaCkKIAkJCXJldHVybiBOVUxMOwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJaWYgKCF0Zm1zKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gKnBlcl9jcHVfcHRyKHRmbXMsIGNwdSk7CiAJCWNyeXB0b19mcmVlX3RmbSh0Zm0pOwogCX0KQEAgLTM4NCw3ICszODQsNyBAQAogCWlmICghdGZtcykKIAkJZ290byBlcnJvcjsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAwKTsKIAkJaWYgKCF0Zm0pCiAJCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwppbmRleCBkNzUwY2ZjLi4zOTVhNDE3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogaW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTU0LDcgKzU1LDcgQEAKIAlzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7CiB9OwogCi1zdGF0aWMgdm9pZCBzYXZlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgbmZfaXA2X3NhdmVyb3V0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaXA2X3J0X2luZm8gKnJ0X2luZm8gPSBuZl9pbmZvX3Jlcm91dGUoaW5mbyk7CiAKQEAgLTY2LDcgKzY3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQorc3RhdGljIGludCBuZl9pcDZfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpcDZfcnRfaW5mbyAqcnRfaW5mbyA9IG5mX2luZm9fcmVyb3V0ZShpbmZvKTsKIApAQCAtNzksMTUgKzgwLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgaXA2X3Jlcm91dGUgPSB7Ci0JLnJlcl9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZfcnRfaW5mbyksCi0JLnNhdmUgCQk9ICZzYXZlLAotCS5yZXJvdXRlCT0gJnJlcm91dGUsCit1bnNpZ25lZCBpbnQgbmZfaXA2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBza2ItPm5oLmlwdjZoOworCXVuc2lnbmVkIGludCBjc3VtID0gMDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoaG9vayAhPSBORl9JUDZfUFJFX1JPVVRJTkcgJiYgaG9vayAhPSBORl9JUDZfTE9DQUxfSU4pCisJCQlicmVhazsKKwkJaWYgKCFjc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkgICAgCSAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKKwkJCQkgICAgIGNzdW1fc3ViKHNrYi0+Y3N1bSwKKwkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKKwkJCQkJCQkgICBkYXRhb2ZmLCAwKSkpKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDSEVDS1NVTV9OT05FOgorCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQkJCQkgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwKKwkJCQkJICAgICBwcm90b2NvbCwKKwkJCQkJICAgICBjc3VtX3N1YigwLAorCQkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKKwkJCQkJCQkgICAgICAgICAgIGRhdGFvZmYsIDApKSk7CisJCWNzdW0gPSBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOworCX0KKwlyZXR1cm4gY3N1bTsKK30KKworRVhQT1JUX1NZTUJPTChuZl9pcDZfY2hlY2tzdW0pOworCitzdGF0aWMgc3RydWN0IG5mX2FmaW5mbyBuZl9pcDZfYWZpbmZvID0geworCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLmNoZWNrc3VtCT0gbmZfaXA2X2NoZWNrc3VtLAorCS5zYXZlcm91dGUJPSBuZl9pcDZfc2F2ZXJvdXRlLAorCS5yZXJvdXRlCT0gbmZfaXA2X3Jlcm91dGUsCisJLnJvdXRlX2tleV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZfcnRfaW5mbyksCiB9OwogCiBpbnQgX19pbml0IGlwdjZfbmV0ZmlsdGVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZfcmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIoUEZfSU5FVDYsICZpcDZfcmVyb3V0ZSk7CisJcmV0dXJuIG5mX3JlZ2lzdGVyX2FmaW5mbygmbmZfaXA2X2FmaW5mbyk7CiB9CiAKIC8qIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGluZXQ2X2luaXQoKSBvbiBlcnJvcnMsIHNvIGl0IGNhbm5vdApAQCAtOTUsNSArMTMxLDUgQEAKICAqLwogdm9pZCBpcHY2X25ldGZpbHRlcl9maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcihQRl9JTkVUNik7CisJbmZfdW5yZWdpc3Rlcl9hZmluZm8oJm5mX2lwNl9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA5OGY3ODc1Li40YmM0ZTViIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtODcsMTYgKzg3LDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUDZfTkZfTUFUQ0hfTVVMVElQT1JUCi0JdHJpc3RhdGUgIk11bHRpcGxlIHBvcnQgbWF0Y2ggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUwotCWhlbHAKLQkgIE11bHRpcG9ydCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIFRDUCBvciBVRFAgcGFja2V0cyBiYXNlZCBvbgotCSAgYSBzZXJpZXMgb2Ygc291cmNlIG9yIGRlc3RpbmF0aW9uIHBvcnRzOiBub3JtYWxseSBhIHJ1bGUgY2FuIG9ubHkKLQkgIG1hdGNoIGEgc2luZ2xlIHJhbmdlIG9mIHBvcnRzLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQNl9ORl9NQVRDSF9PV05FUgogCXRyaXN0YXRlICJPd25lciBtYXRjaCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVA2X05GX0lQVEFCTEVTCkBAIC0xMTUsMTEgKzEwNSwxMSBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIElQNl9ORl9NQVRDSF9BSEVTUAotCXRyaXN0YXRlICJBSC9FU1AgbWF0Y2ggc3VwcG9ydCIKK2NvbmZpZyBJUDZfTkZfTUFUQ0hfQUgKKwl0cmlzdGF0ZSAiQUggbWF0Y2ggc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUwogCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGFsbG93cyBvbmUgdG8gbWF0Y2ggQUggYW5kIEVTUCBwYWNrZXRzLgorCSAgVGhpcyBtb2R1bGUgYWxsb3dzIG9uZSB0byBtYXRjaCBBSCBwYWNrZXRzLgogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDg0MzZhMWEuLmVlZWI1N2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTgsOSArOCw4IEBACiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX09QVFMpICs9IGlwNnRfaGJoLm8gaXA2dF9kc3Qubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwotb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUCkgKz0gaXA2dF9lc3AubyBpcDZ0X2FoLm8KK29iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfQUgpICs9IGlwNnRfYWgubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCkgKz0gaXA2dF9ldWk2NC5vCi1vYmotJChDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVCkgKz0gaXA2dF9tdWx0aXBvcnQubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUikgKz0gaXA2dF9vd25lci5vCiBvYmotJChDT05GSUdfSVA2X05GX0ZJTFRFUikgKz0gaXA2dGFibGVfZmlsdGVyLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFOR0xFKSArPSBpcDZ0YWJsZV9tYW5nbGUubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IGU4MWM2YTkuLmI0YjdkNDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTY1OCwxNSArNjU4LDExIEBACiAJLm91dGZuCT0gJmlwcV9lbnF1ZXVlX3BhY2tldCwKIH07CiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IGlwNl9xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9NRU07CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJbmV0bGlua19yZWdpc3Rlcl9ub3RpZmllcigmaXBxX25sX25vdGlmaWVyKTsKIAlpcHFubCA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShORVRMSU5LX0lQNl9GVywgMCwgaXBxX3Jjdl9zaywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSElTX01PRFVMRSk7CkBAIC02OTMsMTEgKzY4OSw2IEBACiAJfQogCXJldHVybiBzdGF0dXM7CiAKLWNsZWFudXA6Ci0JbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0JaXBxX2ZsdXNoKE5GX0RST1ApOwotCQogY2xlYW51cF9zeXNjdGw6CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKQEAgLTcxMywxNSArNzA0LDIxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXA2X3F1ZXVlX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2X3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycygmbmZxaCk7CisJc3luY2hyb25pemVfbmV0KCk7CisJaXBxX2ZsdXNoKE5GX0RST1ApOworCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXBxX3N5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHFfZGV2X25vdGlmaWVyKTsKKwlwcm9jX25ldF9yZW1vdmUoSVBRX1BST0NfRlNfTkFNRSk7CisKKwlzb2NrX3JlbGVhc2UoaXBxbmwtPnNrX3NvY2tldCk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOworCisJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZpcHFfbmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjYgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDNlY2YyZGIuLjJlNzJmODkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjg4LDE5ICsyODgsNiBAQAogCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCS8qIENoZWNrIG5vb25lIGVsc2UgdXNpbmcgb3VyIHRhYmxlICovCi0JaWYgKCgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gIT0gMHhkZWFkNTdhYwotCSAgICAmJiAoKHN0cnVjdCBpcDZ0X2VudHJ5ICopdGFibGVfYmFzZSktPmNvbWVmcm9tICE9IDB4ZWVlZWVlZWMpIHsKLQkJcHJpbnRrKCJBU1NFUlQ6IENQVSAjJXUsICVzIGNvbWVmcm9tKCVwKSA9ICVYXG4iLAotCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLAotCQkgICAgICAgdGFibGUtPm5hbWUsCi0JCSAgICAgICAmKChzdHJ1Y3QgaXA2dF9lbnRyeSAqKXRhYmxlX2Jhc2UpLT5jb21lZnJvbSwKLQkJICAgICAgICgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20pOwotCX0KLQkoKHN0cnVjdCBpcDZ0X2VudHJ5ICopdGFibGVfYmFzZSktPmNvbWVmcm9tID0gMHg1N2FjYzAwMTsKLSNlbmRpZgotCiAJLyogRm9yIHJldHVybiBmcm9tIGJ1aWx0aW4gY2hhaW4gKi8KIAliYWNrID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPnVuZGVyZmxvd1tob29rXSk7CiAKQEAgLTc4OCw3ICs3NzUsNyBAQAogCX0KIAogCS8qIEFuZCBvbmUgY29weSBmb3IgZXZlcnkgb3RoZXIgQ1BVICovCi0JZm9yX2VhY2hfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlpZiAobmV3aW5mby0+ZW50cmllc1tpXSAmJiBuZXdpbmZvLT5lbnRyaWVzW2ldICE9IGVudHJ5MCkKIAkJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2ldLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpOwogCX0KQEAgLTg0MSw3ICs4MjgsNyBAQAogCQkJICAgY291bnRlcnMsCiAJCQkgICAmaSk7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGN1cmNwdSkKIAkJCWNvbnRpbnVlOwogCQlpID0gMDsKQEAgLTExMTYsNyArMTEwMyw3IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IHBhZGRjLT5udW1fY291bnRlcnMpIHsKKwlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IHRtcC5udW1fY291bnRlcnMpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2tfdXBfZnJlZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IGE5NmMwZGUuLjczYzYzMDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00MzksNyArNDM5LDcgQEAKIAogCWlmIChsb2dpbmZvLT5sb2dmbGFncyAmIElQNlRfTE9HX05GTE9HKQogCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAotCQkgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CisJCSAgICAgICAgICAgICAgIiVzIiwgbG9naW5mby0+cHJlZml4KTsKIAllbHNlCiAJCWlwNnRfbG9nX3BhY2tldChQRl9JTkVUNiwgaG9va251bSwgKnBza2IsIGluLCBvdXQsICZsaSwKIAkJICAgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmJlZGFkLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggRVNQIHBhcmFtZXRlcnMuICovCi0vKiAoQykgMjAwMS0yMDAyIEFuZHJhcyBLaXMtU3phYm8gPGtpc3phQHNjaC5ibWUuaHU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotI2luY2x1ZGUgPG5ldC9pcHY2Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaD4KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IEVTUCBtYXRjaCIpOwotTU9EVUxFX0FVVEhPUigiQW5kcmFzIEtpcy1TemFibyA8a2lzemFAc2NoLmJtZS5odT4iKTsKLQotI2lmIDAKLSNkZWZpbmUgREVCVUdQIHByaW50awotI2Vsc2UKLSNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKLSNlbmRpZgotCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHNwaSBpcyBtYXRjaGVkIGJ5IHRoZSByYW5nZSwgMCBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1zcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgaW50IGludmVydCkKLXsKLQlpbnQgcj0wOwotCURFQlVHUCgiZXNwIHNwaV9tYXRjaDolYyAweCV4IDw9IDB4JXggPD0gMHgleCIsaW52ZXJ0PyAnISc6JyAnLAotCSAgICAgICBtaW4sc3BpLG1heCk7Ci0Jcj0oc3BpID49IG1pbiAmJiBzcGkgPD0gbWF4KSBeIGludmVydDsKLQlERUJVR1AoIiByZXN1bHQgJXNcbiIscj8gIlBBU1NcbiIgOiAiRkFJTEVEXG4iKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCXN0cnVjdCBpcF9lc3BfaGRyIF9lc3AsICplaDsKLQljb25zdCBzdHJ1Y3QgaXA2dF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0JdW5zaWduZWQgaW50IHB0cjsKLQotCS8qIE1ha2Ugc3VyZSB0aGlzIGlzbid0IGFuIGV2aWwgcGFja2V0ICovCi0JLypERUJVR1AoImlwdjZfZXNwIGVudGVyZWQgXG4iKTsqLwotCi0JaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmcHRyLCBORVhUSERSX0VTUCwgTlVMTCkgPCAwKQotCQlyZXR1cm4gMDsKLQotCWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX2VzcCksICZfZXNwKTsKLQlpZiAoZWggPT0gTlVMTCkgewotCQkqaG90ZHJvcCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCURFQlVHUCgiSVB2NiBFU1AgU1BJICV1ICUwOFhcbiIsIG50b2hsKGVoLT5zcGkpLCBudG9obChlaC0+c3BpKSk7Ci0KLQlyZXR1cm4gKGVoICE9IE5VTEwpCi0JCSYmIHNwaV9tYXRjaChlc3BpbmZvLT5zcGlzWzBdLCBlc3BpbmZvLT5zcGlzWzFdLAotCQkJICAgICAgbnRvaGwoZWgtPnNwaSksCi0JCQkgICAgICAhIShlc3BpbmZvLT5pbnZmbGFncyAmIElQNlRfRVNQX0lOVl9TUEkpKTsKLX0KLQotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JICAgY29uc3Qgdm9pZCAqaXAsCi0JICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLQkgICB2b2lkICptYXRjaGluZm8sCi0JICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCi0JICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQljb25zdCBzdHJ1Y3QgaXA2dF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87Ci0KLQlpZiAoZXNwaW5mby0+aW52ZmxhZ3MgJiB+SVA2VF9FU1BfSU5WX01BU0spIHsKLQkJREVCVUdQKCJpcDZ0X2VzcDogdW5rbm93biBmbGFncyAlWFxuIiwKLQkJCSBlc3BpbmZvLT5pbnZmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIGVzcF9tYXRjaCA9IHsKLQkubmFtZQkJPSAiZXNwIiwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9lc3ApLAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcDZ0X2VzcF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlwNnRfcmVnaXN0ZXJfbWF0Y2goJmVzcF9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0X2VzcF9maW5pKHZvaWQpCi17Ci0JaXA2dF91bnJlZ2lzdGVyX21hdGNoKCZlc3BfbWF0Y2gpOwotfQotCi1tb2R1bGVfaW5pdChpcDZ0X2VzcF9pbml0KTsKLW1vZHVsZV9leGl0KGlwNnRfZXNwX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2V1aTY0LmMKaW5kZXggOTRkYmRiOC4uNGY2Yjg0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ldWk2NC5jCkBAIC00MCw3ICs0MCw3IEBACiAKIAltZW1zZXQoZXVpNjQsIDAsIHNpemVvZihldWk2NCkpOwogCi0JaWYgKGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBudG9ocyhFVEhfUF9JUFY2KSkgeworCWlmIChldGhfaGRyKHNrYiktPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKIAkJaWYgKHNrYi0+bmguaXB2NmgtPnZlcnNpb24gPT0gMHg2KSB7CiAJCQltZW1jcHkoZXVpNjQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIDMpOwogCQkJbWVtY3B5KGV1aTY0ICsgNSwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSArIDMsIDMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbXVsdGlwb3J0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjNDhiYS4uMDAwMDAwMAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKiBLZXJuZWwgbW9kdWxlIHRvIG1hdGNoIG9uZSBvZiBhIGxpc3Qgb2YgVENQL1VEUCBwb3J0czogcG9ydHMgYXJlIGluCi0gICB0aGUgc2FtZSBwbGFjZSBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBhcyBlcXVhbC4gKi8KLQotLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAotICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdWRwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpcDZ0YWJsZXMgbWF0Y2ggZm9yIG11bHRpcGxlIHBvcnRzIik7Ci0KLSNpZiAwCi0jZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBkdXByaW50Zihmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotLyogUmV0dXJucyAxIGlmIHRoZSBwb3J0IGlzIG1hdGNoZWQgYnkgdGhlIHRlc3QsIDAgb3RoZXJ3aXNlLiAqLwotc3RhdGljIGlubGluZSBpbnQKLXBvcnRzX21hdGNoKGNvbnN0IHVfaW50MTZfdCAqcG9ydGxpc3QsIGVudW0gaXA2dF9tdWx0aXBvcnRfZmxhZ3MgZmxhZ3MsCi0JICAgIHVfaW50OF90IGNvdW50LCB1X2ludDE2X3Qgc3JjLCB1X2ludDE2X3QgZHN0KQotewotCXVuc2lnbmVkIGludCBpOwotCWZvciAoaT0wOyBpPGNvdW50OyBpKyspIHsKLQkJaWYgKGZsYWdzICE9IElQNlRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0JCSAgICAmJiBwb3J0bGlzdFtpXSA9PSBzcmMpCi0JCQlyZXR1cm4gMTsKLQotCQlpZiAoZmxhZ3MgIT0gSVA2VF9NVUxUSVBPUlRfU09VUkNFCi0JCSAgICAmJiBwb3J0bGlzdFtpXSA9PSBkc3QpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKQotewotCXUxNiBfcG9ydHNbMl0sICpwcHRyOwotCWNvbnN0IHN0cnVjdCBpcDZ0X211bHRpcG9ydCAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOwotCi0JLyogTXVzdCBub3QgYmUgYSBmcmFnbWVudC4gKi8KLQlpZiAob2Zmc2V0KQotCQlyZXR1cm4gMDsKLQotCS8qIE11c3QgYmUgYmlnIGVub3VnaCB0byByZWFkIHBvcnRzIChib3RoIFVEUCBhbmQgVENQIGhhdmUKLQkgICB0aGVtIGF0IHRoZSBzdGFydCkuICovCi0JcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvZmYsIHNpemVvZihfcG9ydHMpLCAmX3BvcnRzWzBdKTsKLQlpZiAocHB0ciA9PSBOVUxMKSB7Ci0JCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCi0JCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KLQkJICovCi0JCWR1cHJpbnRmKCJpcDZ0X211bHRpcG9ydDoiCi0JCQkgIiBEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuIik7Ci0JCSpob3Rkcm9wID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHBvcnRzX21hdGNoKG11bHRpaW5mby0+cG9ydHMsCi0JCQkgICBtdWx0aWluZm8tPmZsYWdzLCBtdWx0aWluZm8tPmNvdW50LAotCQkJICAgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKLX0KLQotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JICAgY29uc3Qgdm9pZCAqaW5mbywKLQkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotCSAgIHZvaWQgKm1hdGNoaW5mbywKLQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcCA9IGluZm87Ci0JY29uc3Qgc3RydWN0IGlwNnRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87Ci0KLQkvKiBNdXN0IHNwZWNpZnkgcHJvdG8gPT0gVENQL1VEUCwgbm8gdW5rbm93biBmbGFncyBvciBiYWQgY291bnQgKi8KLQlyZXR1cm4gKGlwLT5wcm90byA9PSBJUFBST1RPX1RDUCB8fCBpcC0+cHJvdG8gPT0gSVBQUk9UT19VRFApCi0JCSYmICEoaXAtPmludmZsYWdzICYgSVA2VF9JTlZfUFJPVE8pCi0JCSYmIChtdWx0aWluZm8tPmZsYWdzID09IElQNlRfTVVMVElQT1JUX1NPVVJDRQotCQkgICAgfHwgbXVsdGlpbmZvLT5mbGFncyA9PSBJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTgotCQkgICAgfHwgbXVsdGlpbmZvLT5mbGFncyA9PSBJUDZUX01VTFRJUE9SVF9FSVRIRVIpCi0JCSYmIG11bHRpaW5mby0+Y291bnQgPD0gSVA2VF9NVUxUSV9QT1JUUzsKLX0KLQotc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIG11bHRpcG9ydF9tYXRjaCA9IHsKLQkubmFtZQkJPSAibXVsdGlwb3J0IiwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9tdWx0aXBvcnQpLAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcDZ0X211bHRpcG9ydF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlwNnRfcmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0X211bHRpcG9ydF9maW5pKHZvaWQpCi17Ci0JaXA2dF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2gpOwotfQotCi1tb2R1bGVfaW5pdChpcDZ0X211bHRpcG9ydF9pbml0KTsKLW1vZHVsZV9leGl0KGlwNnRfbXVsdGlwb3J0X2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCmluZGV4IGU1ZTcyNGQuLjYwOTc2YzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKQEAgLTE3NywzNyArMTc3LDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWdpc3RlciBob29rcyAqLwotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfdGFibGU7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMDsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2sxOwotCiAJcmV0dXJuIHJldDsKIAotIGNsZWFudXBfaG9vazE6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1sxXSk7Ci0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXA2dF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X2ZpbHRlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBlMWYwZjZhLi4wM2ExM2VhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC0yMzgsNDkgKzIzOCwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1syXSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gY2xlYW51cF9ob29rMTsKLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzNdKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBjbGVhbnVwX2hvb2syOwotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbNF0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazM7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMzoKLSAgICAgICAgbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1szXSk7Ci0gY2xlYW51cF9ob29rMjoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzJdKTsKLSBjbGVhbnVwX2hvb2sxOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotIGNsZWFudXBfaG9vazA6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CiAgY2xlYW51cF90YWJsZToKIAlpcDZ0X3VucmVnaXN0ZXJfdGFibGUoJnBhY2tldF9tYW5nbGVyKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0YWJsZV9tYW5nbGVfZmluaSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcDZ0X29wcykvc2l6ZW9mKHN0cnVjdCBuZl9ob29rX29wcyk7IGkrKykKLQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1tpXSk7Ci0KKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CiAJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKCZwYWNrZXRfbWFuZ2xlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCA1NGQxZmZmLi42MWE3YzU4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0xNTIsMzEgKzE1MiwyMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcDZ0X29wc1swXSk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbnVwX3RhYmxlOwogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbMV0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfaG9vazA7Ci0KIAlyZXR1cm4gcmV0OwogCi0gY2xlYW51cF9ob29rMDoKLQluZl91bnJlZ2lzdGVyX2hvb2soJmlwNnRfb3BzWzBdKTsKICBjbGVhbnVwX3RhYmxlOgogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfcmF3X2Zpbmkodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXA2dF9vcHMpL3NpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpOyBpKyspCi0JCW5mX3VucmVnaXN0ZXJfaG9vaygmaXA2dF9vcHNbaV0pOwotCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwogCWlwNnRfdW5yZWdpc3Rlcl90YWJsZSgmcGFja2V0X3Jhdyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IGM4YjVhOTYuLjkzYmFlMzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjg2LDU1ICsyODYsNDkgQEAKIAlyZXR1cm4gaXB2Nl9jb25udHJhY2tfaW4oaG9va251bSwgcHNrYiwgaW4sIG91dCwgb2tmbik7CiB9CiAKLS8qIENvbm5lY3Rpb24gdHJhY2tpbmcgbWF5IGRyb3AgcGFja2V0cywgYnV0IG5ldmVyIGFsdGVycyB0aGVtLCBzbwotICAgbWFrZSBpdCB0aGUgZmlyc3QgaG9vay4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyA9IHsKLQkuaG9vawkJPSBpcHY2X2RlZnJhZywKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X1BSRV9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2luLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX2xvY2FsX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfbG9jYWwsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5wZgkJPSBQRl9JTkVUNiwKLQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCi0JLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzID0gewotCS5ob29rCQk9IGlwdjZfZGVmcmFnLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfT1VULAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKLX07Ci0KLS8qIFJlZnJhZ21lbnRlcjsgbGFzdCBjaGFuY2UuICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX291dF9vcHMgPSB7Ci0JLmhvb2sJCT0gaXB2Nl9jb25maXJtLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucGYJCT0gUEZfSU5FVDYsCi0JLmhvb2tudW0JPSBORl9JUDZfUE9TVF9ST1VUSU5HLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzID0gewotCS5ob29rCQk9IGlwdjZfY29uZmlybSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnBmCQk9IFBGX0lORVQ2LAotCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX0lOLAotCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVC0xLAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19vcHNbXSA9IHsKKwl7CisJCS5ob29rCQk9IGlwdjZfZGVmcmFnLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfaW4sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0ssCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2xvY2FsLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQ2LAorCQkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKKwl9LAorCXsKKwkJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVUNiwKKwkJLmhvb2tudW0JPSBORl9JUDZfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rCQk9IGlwdjZfY29uZmlybSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVDYsCisJCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QtMSwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTQ3MCwxNiArNDY0LDIxIEBACiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2OwogZXh0ZXJuIGludCBuZl9jdF9mcmFnNl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZfY3RfZnJhZzZfY2xlYW51cCh2b2lkKTsKLXN0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQorCitNT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghaW5pdCkgZ290byBjbGVhbnVwOworCW5lZWRfY29ubnRyYWNrKCk7CiAKIAlyZXQgPSBuZl9jdF9mcmFnNl9pbml0KCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgaW5pdGlhbGl6ZSBmcmFnNi5cbiIpOwotCQlnb3RvIGNsZWFudXBfbm90aGluZzsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTUwNSw3MSArNTA0LDI3IEBACiAJCWdvdG8gY2xlYW51cF9pY21wdjY7CiAJfQogCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyk7CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB2Nl9jb25udHJhY2tfb3BzLAorCQkJCUFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgcHJlLXJvdXRpbmcgZGVmcmFnICIKIAkJICAgICAgICJob29rLlxuIik7CiAJCWdvdG8gY2xlYW51cF9pcHY2OwogCX0KLQotCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbF9vdXQgZGVmcmFnICIKLQkJICAgICAgICJob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9kZWZyYWdvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwcmUtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9kZWZyYWdsb2NhbG9wczsKLQl9Ci0KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbCBvdXQgaG9vay5cbiIpOwotCQlnb3RvIGNsZWFudXBfaW5vcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfb3V0X29wcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgcG9zdC1yb3V0aW5nIGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2luYW5kbG9jYWxvcHM7Ci0JfQotCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOwotCX0KLQogI2lmZGVmIENPTkZJR19TWVNDVEwKIAluZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKIAlpZiAobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfbG9jYWxpbm9wczsKKwkJZ290byBjbGVhbnVwX2hvb2tzOwogCX0KICNlbmRpZgogCXJldHVybiByZXQ7CiAKLSBjbGVhbnVwOgotCXN5bmNocm9uaXplX25ldCgpOwogI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX2xvY2FsaW5vcHM6CisgY2xlYW51cF9ob29rczoKKwluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjZfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKLSBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19vdXRfb3BzKTsKLSBjbGVhbnVwX2luYW5kbG9jYWxvcHM6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKLSBjbGVhbnVwX2lub3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfaW5fb3BzKTsKLSBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOwotIGNsZWFudXBfZGVmcmFnb3BzOgotCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX29wcyk7CiAgY2xlYW51cF9pcHY2OgogCW5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYpOwogIGNsZWFudXBfaWNtcHY2OgpAQCAtNTgwLDIzICs1MzUsMjEgQEAKIAluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOwogIGNsZWFudXBfZnJhZzY6CiAJbmZfY3RfZnJhZzZfY2xlYW51cCgpOwotIGNsZWFudXBfbm90aGluZzoKIAlyZXR1cm4gcmV0OwogfQogCi1NT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2luaXQodm9pZCkKLXsKLQluZWVkX2Nvbm50cmFjaygpOwotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2X2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisJc3luY2hyb25pemVfbmV0KCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIpOworI2VuZGlmCisJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY2X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Nik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjYpOworCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2KTsKKwluZl9jdF9mcmFnNl9jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCAwOTk0NWMzLi44NmM2NzAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTIzMywyMSArMjMzLDEzIEBACiAJCXJldHVybiAtTkZfQUNDRVBUOwogCX0KIAotCWlmIChob29rbnVtICE9IE5GX0lQNl9QUkVfUk9VVElORykKLQkJZ290byBza2lwcGVkOwotCi0JLyogSWdub3JlIGl0IGlmIHRoZSBjaGVja3N1bSdzIGJvZ3VzLiAqLwotCWlmIChjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCi0JCQkgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX0lDTVBWNiwKLQkJCSAgICBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAotCQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSkpIHsKKwlpZiAoaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcgJiYKKwkgICAgbmZfaXA2X2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19JQ01QVjYpKSB7CiAJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVDYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCSAgICAgICJuZl9jdF9pY21wdjY6IElDTVB2NiBjaGVja3N1bSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLXNraXBwZWQ6Ci0KIAkvKiBpcyBub3QgZXJyb3IgbWVzc2FnZSA/ICovCiAJaWYgKGljbXA2aC0+aWNtcDZfdHlwZSA+PSAxMjgpCiAJCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggNDIzOGIxZS4uNzc5ZGRmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtMzgsNyArMzgsNyBAQAogCWludCByZXMgPSAwOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXJlcyArPSBwcm90by0+c3RhdHNbY3B1XS5pbnVzZTsKIAogCXJldHVybiByZXM7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyByZXMgPSAwOwogICAgICAgICBpbnQgaTsKICAKLSAgICAgICAgZm9yX2VhY2hfY3B1KGkpIHsKKyAgICAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKICAgICAgICAgICAgICAgICByZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKilwZXJfY3B1X3B0cihtaWJbMF0sIGkpKSArIG9mZnQpOwogICAgICAgICAgICAgICAgIHJlcyArPSAqKCgodW5zaWduZWQgbG9uZyAqKXBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwppbmRleCBiNjdhNDVmLi5lZWY5ODVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJd3JpdGVfdW5sb2NrKCZpcDZfZnJhZ19sb2NrKTsKIH0KIAorLyoKKyAqIGNhbGxlcnMgc2hvdWxkIGJlIGNhcmVmdWwgbm90IHRvIHVzZSB0aGUgaGFzaCB2YWx1ZSBvdXRzaWRlIHRoZSBpcGZyYWdfbG9jaworICogYXMgZG9pbmcgc28gY291bGQgcmFjZSB3aXRoIGlwZnJhZ19oYXNoX3JuZCBiZWluZyByZWNhbGN1bGF0ZWQuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2cWhhc2hmbih1MzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkcikKIHsKQEAgLTMyNCwxNSArMzI4LDE2IEBACiAvKiBDcmVhdGlvbiBwcmltaXRpdmVzLiAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqaXA2X2ZyYWdfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLAotCQkJCQkgIHN0cnVjdCBmcmFnX3F1ZXVlICpmcV9pbikKK3N0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqaXA2X2ZyYWdfaW50ZXJuKHN0cnVjdCBmcmFnX3F1ZXVlICpmcV9pbikKIHsKIAlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CisJdW5zaWduZWQgaW50IGhhc2g7CiAjaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogI2VuZGlmCiAKIAl3cml0ZV9sb2NrKCZpcDZfZnJhZ19sb2NrKTsKKwloYXNoID0gaXA2cWhhc2hmbihmcV9pbi0+aWQsICZmcV9pbi0+c2FkZHIsICZmcV9pbi0+ZGFkZHIpOwogI2lmZGVmIENPTkZJR19TTVAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShmcSwgbiwgJmlwNl9mcmFnX2hhc2hbaGFzaF0sIGxpc3QpIHsKIAkJaWYgKGZxLT5pZCA9PSBmcV9pbi0+aWQgJiYgCkBAIC0zNjIsNyArMzY3LDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGZyYWdfcXVldWUgKgotaXA2X2ZyYWdfY3JlYXRlKHVuc2lnbmVkIGludCBoYXNoLCB1MzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKK2lwNl9mcmFnX2NyZWF0ZSh1MzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKIHsKIAlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CiAKQEAgLTM3OSw3ICszODQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZmcS0+bG9jayk7CiAJYXRvbWljX3NldCgmZnEtPnJlZmNudCwgMSk7CiAKLQlyZXR1cm4gaXA2X2ZyYWdfaW50ZXJuKGhhc2gsIGZxKTsKKwlyZXR1cm4gaXA2X2ZyYWdfaW50ZXJuKGZxKTsKIAogb29tOgogCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CkBAIC0zOTEsOSArMzk2LDEwIEBACiB7CiAJc3RydWN0IGZyYWdfcXVldWUgKmZxOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwotCXVuc2lnbmVkIGludCBoYXNoID0gaXA2cWhhc2hmbihpZCwgc3JjLCBkc3QpOworCXVuc2lnbmVkIGludCBoYXNoOwogCiAJcmVhZF9sb2NrKCZpcDZfZnJhZ19sb2NrKTsKKwloYXNoID0gaXA2cWhhc2hmbihpZCwgc3JjLCBkc3QpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZxLCBuLCAmaXA2X2ZyYWdfaGFzaFtoYXNoXSwgbGlzdCkgewogCQlpZiAoZnEtPmlkID09IGlkICYmIAogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKHNyYywgJmZxLT5zYWRkcikgJiYKQEAgLTQwNSw3ICs0MTEsNyBAQAogCX0KIAlyZWFkX3VubG9jaygmaXA2X2ZyYWdfbG9jayk7CiAKLQlyZXR1cm4gaXA2X2ZyYWdfY3JlYXRlKGhhc2gsIGlkLCBzcmMsIGRzdCk7CisJcmV0dXJuIGlwNl9mcmFnX2NyZWF0ZShpZCwgc3JjLCBkc3QpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDc5MDc4NzQuLjhhNzc3OTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMjgwLDEwICsyODAsMTMgQEAKIHsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IHJ0LT5ydDZpX25leHRob3A7CiAJaW50IG0gPSAwOwotCWlmIChuZWlnaCkgeworCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1AgfHwKKwkgICAgIShydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSkKKwkJbSA9IDE7CisJZWxzZSBpZiAobmVpZ2gpIHsKIAkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CiAJCWlmIChuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKQotCQkJbSA9IDE7CisJCQltID0gMjsKIAkJcmVhZF91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAl9CiAJcmV0dXJuIG07CkBAIC0yOTIsMTUgKzI5NSwxOCBAQAogc3RhdGljIGludCBydDZfc2NvcmVfcm91dGUoc3RydWN0IHJ0Nl9pbmZvICpydCwgaW50IG9pZiwKIAkJCSAgIGludCBzdHJpY3QpCiB7Ci0JaW50IG0gPSBydDZfY2hlY2tfZGV2KHJ0LCBvaWYpOworCWludCBtLCBuOworCQkKKwltID0gcnQ2X2NoZWNrX2RldihydCwgb2lmKTsKIAlpZiAoIW0gJiYgKHN0cmljdCAmIFJUNl9TRUxFQ1RfRl9JRkFDRSkpCiAJCXJldHVybiAtMTsKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRgogCW0gfD0gSVBWNl9ERUNPREVfUFJFRihJUFY2X0VYVFJBQ1RfUFJFRihydC0+cnQ2aV9mbGFncykpIDw8IDI7CiAjZW5kaWYKLQlpZiAocnQ2X2NoZWNrX25laWdoKHJ0KSkKKwluID0gcnQ2X2NoZWNrX25laWdoKHJ0KTsKKwlpZiAobiA+IDEpCiAJCW0gfD0gMTY7Ci0JZWxzZSBpZiAoc3RyaWN0ICYgUlQ2X1NFTEVDVF9GX1JFQUNIQUJMRSkKKwllbHNlIGlmICghbiAmJiBzdHJpY3QgJiBSVDZfU0VMRUNUX0ZfUkVBQ0hBQkxFKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIG07CiB9CkBAIC0zMTcsNyArMzIzLDcgQEAKIAkJICBfX0ZVTkNUSU9OX18sIGhlYWQsIGhlYWQgPyAqaGVhZCA6IE5VTEwsIG9pZik7CiAKIAlmb3IgKHJ0ID0gcnQwLCBtZXRyaWMgPSBydDAtPnJ0NmlfbWV0cmljOwotCSAgICAgcnQgJiYgcnQtPnJ0NmlfbWV0cmljID09IG1ldHJpYzsKKwkgICAgIHJ0ICYmIHJ0LT5ydDZpX21ldHJpYyA9PSBtZXRyaWMgJiYgKCFsYXN0IHx8IHJ0ICE9IHJ0MCk7CiAJICAgICBydCA9IHJ0LT51Lm5leHQpIHsKIAkJaW50IG07CiAKQEAgLTM0Myw5ICszNDksMTIgQEAKIAkgICAgKHN0cmljdCAmIFJUNl9TRUxFQ1RfRl9SRUFDSEFCTEUpICYmCiAJICAgIGxhc3QgJiYgbGFzdCAhPSBydDApIHsKIAkJLyogbm8gZW50cmllcyBtYXRjaGVkOyBkbyByb3VuZC1yb2JpbiAqLworCQlzdGF0aWMgc3BpbmxvY2tfdCBsb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCQlzcGluX2xvY2soJmxvY2spOwogCQkqaGVhZCA9IHJ0MC0+dS5uZXh0OwogCQlydDAtPnUubmV4dCA9IGxhc3QtPnUubmV4dDsKIAkJbGFzdC0+dS5uZXh0ID0gcnQwOworCQlzcGluX3VubG9jaygmbG9jayk7CiAJfQogCiAJUlQ2X1RSQUNFKCIlcygpID0+ICVwLCBzY29yZT0lZFxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggYzJkM2UxNy4uNjU3OGMzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QUk9UX1VOUkVBQ0gsIDApOworCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmVhZF91bmxvY2soJmlwaXA2X2xvY2spOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdHVubmVsNi5jIGIvbmV0L2lwdjYvdHVubmVsNi5jCmluZGV4IDU2NTliNTIyLi4wZWY5YTM1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90dW5uZWw2LmMKKysrIGIvbmV0L2lwdjYvdHVubmVsNi5jCkBAIC0xOSwxMSArMTksMTMgQEAKICAqIAkJWU9TSElGVUpJIEhpZGVha2kgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKQEAgLTg3LDEwICs4OSwxNiBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyOwogCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCisJCWdvdG8gZHJvcDsKKwogCWZvciAoaGFuZGxlciA9IHR1bm5lbDZfaGFuZGxlcnM7IGhhbmRsZXI7IGhhbmRsZXIgPSBoYW5kbGVyLT5uZXh0KQogCQlpZiAoIWhhbmRsZXItPmhhbmRsZXIoc2tiKSkKIAkJCXJldHVybiAwOwogCisJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwLCBza2ItPmRldik7CisKK2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwppbmRleCBjY2NmOGI3Li4wMGNmZGVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIHsKIAlpbnQgZXJyOwogCXUzMiBzZXE7Ci0Jc3RydWN0IHNlY19kZWNhcF9zdGF0ZSB4ZnJtX3ZlY1tYRlJNX01BWF9ERVBUSF07CisJc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdmVjW1hGUk1fTUFYX0RFUFRIXTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlpbnQgeGZybV9uciA9IDA7CiAJaW50IGRlY2FwcyA9IDA7CkBAIC02NSw3ICs2NSw3IEBACiAJCWlmICh4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSh4KSkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKLQkJbmV4dGhkciA9IHgtPnR5cGUtPmlucHV0KHgsICYoeGZybV92ZWNbeGZybV9ucl0uZGVjYXApLCBza2IpOworCQluZXh0aGRyID0geC0+dHlwZS0+aW5wdXQoeCwgc2tiKTsKIAkJaWYgKG5leHRoZHIgPD0gMCkKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiAKQEAgLTc5LDcgKzc5LDcgQEAKIAogCQlzcGluX3VubG9jaygmeC0+bG9jayk7CiAKLQkJeGZybV92ZWNbeGZybV9ucisrXS54dmVjID0geDsKKwkJeGZybV92ZWNbeGZybV9ucisrXSA9IHg7CiAKIAkJaWYgKHgtPnByb3BzLm1vZGUpIHsgLyogWFhYICovCiAJCQlpZiAobmV4dGhkciAhPSBJUFBST1RPX0lQVjYpCkBAIC0xMTgsNyArMTE4LDggQEAKIAlpZiAoeGZybV9uciArIHNrYi0+c3AtPmxlbiA+IFhGUk1fTUFYX0RFUFRIKQogCQlnb3RvIGRyb3A7CiAKLQltZW1jcHkoc2tiLT5zcC0+eCtza2ItPnNwLT5sZW4sIHhmcm1fdmVjLCB4ZnJtX25yKnNpemVvZihzdHJ1Y3Qgc2VjX2RlY2FwX3N0YXRlKSk7CisJbWVtY3B5KHNrYi0+c3AtPnh2ZWMgKyBza2ItPnNwLT5sZW4sIHhmcm1fdmVjLAorCSAgICAgICB4ZnJtX25yICogc2l6ZW9mKHhmcm1fdmVjWzBdKSk7CiAJc2tiLT5zcC0+bGVuICs9IHhmcm1fbnI7CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCkBAIC0xNDksNyArMTUwLDcgQEAKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIGRyb3A6CiAJd2hpbGUgKC0teGZybV9uciA+PSAwKQotCQl4ZnJtX3N0YXRlX3B1dCh4ZnJtX3ZlY1t4ZnJtX25yXS54dmVjKTsKKwkJeGZybV9zdGF0ZV9wdXQoeGZybV92ZWNbeGZybV9ucl0pOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggOTFjY2U4Yi4uODhjODQwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTE5MSwxNiArMTkxLDE4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9kZWNvZGVfc2Vzc2lvbjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCkKIHsKLQl1MTYgb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwl1MTYgb2Zmc2V0ID0gc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3OwogCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBza2ItPm5oLmlwdjZoOwotCXN0cnVjdCBpcHY2X29wdF9oZHIgKmV4dGhkciA9IChzdHJ1Y3QgaXB2Nl9vcHRfaGRyKikoc2tiLT5uaC5yYXcgKyBvZmZzZXQpOwotCXU4IG5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOworCXN0cnVjdCBpcHY2X29wdF9oZHIgKmV4dGhkcjsKKwl1OCBuZXh0aGRyID0gc2tiLT5uaC5yYXdbSVA2Q0Ioc2tiKS0+bmhvZmZdOwogCiAJbWVtc2V0KGZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7CiAJaXB2Nl9hZGRyX2NvcHkoJmZsLT5mbDZfZHN0LCAmaGRyLT5kYWRkcik7CiAJaXB2Nl9hZGRyX2NvcHkoJmZsLT5mbDZfc3JjLCAmaGRyLT5zYWRkcik7CiAKIAl3aGlsZSAocHNrYl9tYXlfcHVsbChza2IsIHNrYi0+bmgucmF3ICsgb2Zmc2V0ICsgMSAtIHNrYi0+ZGF0YSkpIHsKKwkJZXh0aGRyID0gKHN0cnVjdCBpcHY2X29wdF9oZHIqKShza2ItPm5oLnJhdyArIG9mZnNldCk7CisKIAkJc3dpdGNoIChuZXh0aGRyKSB7CiAJCWNhc2UgTkVYVEhEUl9ST1VUSU5HOgogCQljYXNlIE5FWFRIRFJfSE9QOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMgYi9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYwppbmRleCBhOGY2Nzc2Li5kMzc3NjhlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYworKysgYi9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGZybTZfdHVubmVsX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9kZWNhcF9zdGF0ZSAqZGVjYXAsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHgvYWZfaXB4LmMgYi9uZXQvaXB4L2FmX2lweC5jCmluZGV4IDJkYmYxMzQuLjgxMWQ5OTggMTAwNjQ0Ci0tLSBhL25ldC9pcHgvYWZfaXB4LmMKKysrIGIvbmV0L2lweC9hZl9pcHguYwpAQCAtOTQ0LDkgKzk0NCw5IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGlweF9tYXBfZnJhbWVfdHlwZSh1bnNpZ25lZCBjaGFyIHR5cGUpCitzdGF0aWMgX19iZTE2IGlweF9tYXBfZnJhbWVfdHlwZSh1bnNpZ25lZCBjaGFyIHR5cGUpCiB7Ci0JaW50IHJjID0gMDsKKwlfX2JlMTYgcmMgPSAwOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBJUFhfRlJBTUVfRVRIRVJJSToJcmMgPSBodG9ucyhFVEhfUF9JUFgpOwkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2lweF9yb3V0ZS5jIGIvbmV0L2lweC9pcHhfcm91dGUuYwppbmRleCA2Nzc3NDQ0Li5hMzk0YzZmIDEwMDY0NAotLS0gYS9uZXQvaXB4L2lweF9yb3V0ZS5jCisrKyBiL25ldC9pcHgvaXB4X3JvdXRlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBpcHhydHJfZGVsZXRlKGxvbmcgbmV0KQorc3RhdGljIGludCBpcHhydHJfZGVsZXRlKF9fdTMyIG5ldCkKIHsKIAlzdHJ1Y3QgaXB4X3JvdXRlICpyLCAqdG1wOwogCWludCByYzsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwLmMgYi9uZXQvaXJkYS9pcmlhcC5jCmluZGV4IDI1NGY5MDcuLjJkMmUyYjEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwLmMKKysrIGIvbmV0L2lyZGEvaXJpYXAuYwpAQCAtNTQ0LDcgKzU0NCw4IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKIAlpbnQgbjsKLQlfX3UzMiB0bXBfYmUzMiwgdG1wX2JlMTY7CisJX191MzIgdG1wX2JlMzI7CisJX19iZTE2IHRtcF9iZTE2OwogCV9fdTggKmZwOwogCiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFzX29iamVjdC5jIGIvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKaW5kZXggYzZkMTY5Zi4uODJlNjY1YyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKKysrIGIvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKQEAgLTI1Nyw3ICsyNTcsNiBAQAogCS8qIFVuc2FmZSAobG9ja2luZyksIGF0dHJpYiBtaWdodCBjaGFuZ2UgKi8KIAlyZXR1cm4gYXR0cmliOwogfQotRVhQT1JUX1NZTUJPTChpcmlhc19maW5kX2F0dHJpYik7CiAKIC8qCiAgKiBGdW5jdGlvbiBpcmlhc19hZGRfYXR0cmlidXRlIChvYmosIGF0dHJpYikKQEAgLTQ4NCw3ICs0ODMsNiBAQAogCiAJcmV0dXJuIHZhbHVlOwogfQotRVhQT1JUX1NZTUJPTChpcmlhc19uZXdfc3RyaW5nX3ZhbHVlKTsKIAogLyoKICAqIEZ1bmN0aW9uIGlyaWFzX25ld19vY3RzZXFfdmFsdWUgKG9jdGV0cywgbGVuKQpAQCAtNTE5LDcgKzUxNyw2IEBACiAJbWVtY3B5KHZhbHVlLT50Lm9jdF9zZXEsIG9jdHNlcSAsIGxlbik7CiAJcmV0dXJuIHZhbHVlOwogfQotRVhQT1JUX1NZTUJPTChpcmlhc19uZXdfb2N0c2VxX3ZhbHVlKTsKIAogc3RydWN0IGlhc192YWx1ZSAqaXJpYXNfbmV3X21pc3NpbmdfdmFsdWUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwLmMgYi9uZXQvaXJkYS9pcmxhcC5jCmluZGV4IDcwMjk2MTguLmExNjUyODYgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwLmMKKysrIGIvbmV0L2lyZGEvaXJsYXAuYwpAQCAtODg0LDcgKzg4NCw4IEBACiAJaWYgKG5vdykgewogCQkvKiBTZW5kIGRvd24gZW1wdHkgZnJhbWUgdG8gdHJpZ2dlciBzcGVlZCBjaGFuZ2UgKi8KIAkJc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKLQkJaXJsYXBfcXVldWVfeG1pdChzZWxmLCBza2IpOworCQlpZiAoc2tiKQorCQkJaXJsYXBfcXVldWVfeG1pdChzZWxmLCBza2IpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfaW5wdXQuYyBiL25ldC9sbGMvbGxjX2lucHV0LmMKaW5kZXggOGYzYWRkZjAuLmQ2MmUwZjkgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2lucHV0LmMKKysrIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwpAQCAtMTE4LDcgKzExOCw4IEBACiAJCXUxNiBwZHVsZW4gPSBldGhfaGRyKHNrYiktPmhfcHJvdG8sCiAJCSAgICBkYXRhX3NpemUgPSBudG9ocyhwZHVsZW4pIC0gbGxjX2xlbjsKIAotCQlza2JfdHJpbShza2IsIGRhdGFfc2l6ZSk7CisJCWlmICh1bmxpa2VseShwc2tiX3RyaW1fcmNzdW0oc2tiLCBkYXRhX3NpemUpKSkKKwkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzMzJhY2IzLi5lMjg5M2VmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC0yMzEsNiArMjMxLDE1IEBACiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0Pi4gIElmIHVuc3VyZSwgc2F5IGBOJy4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9FU1AKKwl0cmlzdGF0ZSAnIkVTUCIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCisJaGVscAorCSAgVGhpcyBtYXRjaCBleHRlbnNpb24gYWxsb3dzIHlvdSB0byBtYXRjaCBhIHJhbmdlIG9mIFNQSXMKKwkgIGluc2lkZSBFU1AgaGVhZGVyIG9mIElQU2VjIHBhY2tldHMuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hFTFBFUgogCXRyaXN0YXRlICciaGVscGVyIiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMKQEAgLTI4OSw2ICsyOTgsMTYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUCisJdHJpc3RhdGUgIk11bHRpcGxlIHBvcnQgbWF0Y2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCisJaGVscAorCSAgTXVsdGlwb3J0IG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggVENQIG9yIFVEUCBwYWNrZXRzIGJhc2VkIG9uCisJICBhIHNlcmllcyBvZiBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcG9ydHM6IG5vcm1hbGx5IGEgcnVsZSBjYW4gb25seQorCSAgbWF0Y2ggYSBzaW5nbGUgcmFuZ2Ugb2YgcG9ydHMuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYKIAl0cmlzdGF0ZSAnInBoeXNkZXYiIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUyAmJiBCUklER0VfTkVURklMVEVSCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA5NTU4NzI3Li45NWI3ZTQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTM1LDExICszNSwxMyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSykgKz0geHRfY29ubm1hcmsubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0spICs9IHh0X2Nvbm50cmFjay5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1ApICs9IHh0X2RjY3Aubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1ApICs9IHh0X2VzcC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUikgKz0geHRfaGVscGVyLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIKSArPSB4dF9sZW5ndGgubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCkgKz0geHRfbGltaXQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMpICs9IHh0X21hYy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUkspICs9IHh0X21hcmsubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQpICs9IHh0X211bHRpcG9ydC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSkgKz0geHRfcG9saWN5Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSkgKz0geHRfcGt0dHlwZS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNKSArPSB4dF9yZWFsbS5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDFjZWIxYTYuLjg0NTVhMzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0yNyw2ICsyNywyOSBAQAogCiAjaW5jbHVkZSAibmZfaW50ZXJuYWxzLmgiCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWZpbmZvX2xvY2spOworCitzdHJ1Y3QgbmZfYWZpbmZvICpuZl9hZmluZm9bTlBST1RPXTsKK0VYUE9SVF9TWU1CT0wobmZfYWZpbmZvKTsKKworaW50IG5mX3JlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm8pCit7CisJc3Bpbl9sb2NrKCZhZmluZm9fbG9jayk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2FmaW5mb1thZmluZm8tPmZhbWlseV0sIGFmaW5mbyk7CisJc3Bpbl91bmxvY2soJmFmaW5mb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX3JlZ2lzdGVyX2FmaW5mbyk7CisKK3ZvaWQgbmZfdW5yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKQoreworCXNwaW5fbG9jaygmYWZpbmZvX2xvY2spOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9hZmluZm9bYWZpbmZvLT5mYW1pbHldLCBOVUxMKTsKKwlzcGluX3VubG9jaygmYWZpbmZvX2xvY2spOworCXN5bmNocm9uaXplX3JjdSgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfdW5yZWdpc3Rlcl9hZmluZm8pOworCiAvKiBJbiB0aGlzIGNvZGUsIHdlIGNhbiBiZSB3YWl0aW5nIGluZGVmaW5pdGVseSBmb3IgdXNlcnNwYWNlIHRvCiAgKiBzZXJ2aWNlIGEgcGFja2V0IGlmIGEgaG9vayByZXR1cm5zIE5GX1FVRVVFLiAgV2UgY291bGQga2VlcCBhIGNvdW50CiAgKiBvZiBza2J1ZmZzIHF1ZXVlZCBmb3IgdXNlcnNwYWNlLCBhbmQgbm90IGRlcmVnaXN0ZXIgYSBob29rIHVubGVzcwpAQCAtNjMsNiArODYsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfdW5yZWdpc3Rlcl9ob29rKTsKIAoraW50IG5mX3JlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZXJyID0gbmZfcmVnaXN0ZXJfaG9vaygmcmVnW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gZXJyOworCitlcnI6CisJaWYgKGkgPiAwKQorCQluZl91bnJlZ2lzdGVyX2hvb2tzKHJlZywgaSk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wobmZfcmVnaXN0ZXJfaG9va3MpOworCit2b2lkIG5mX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIHVuc2lnbmVkIGludCBuKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJbmZfdW5yZWdpc3Rlcl9ob29rKCZyZWdbaV0pOworfQorRVhQT1JUX1NZTUJPTChuZl91bnJlZ2lzdGVyX2hvb2tzKTsKKwogdW5zaWduZWQgaW50IG5mX2l0ZXJhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCXN0cnVjdCBza19idWZmICoqc2tiLAogCQkJaW50IGhvb2ssCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggNTYzODljOC4uZjliODNmOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZWNhY2hlID0gJnBlcl9jcHUobmZfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKIAkJaWYgKGVjYWNoZS0+Y3QpCiAJCQluZl9jdF9wdXQoZWNhY2hlLT5jdCk7CkBAIC0xNzgsOSArMTc4LDYgQEAKIAkvKiBhbGxvY2F0ZWQgc2xhYiBjYWNoZSArIG1vZHVsZXMgd2hpY2ggdXNlcyB0aGlzIHNsYWIgY2FjaGUgKi8KIAlpbnQgdXNlOwogCi0JLyogSW5pdGlhbGl6YXRpb24gKi8KLQlpbnQgKCppbml0X2Nvbm50cmFjaykoc3RydWN0IG5mX2Nvbm4gKiwgdV9pbnQzMl90KTsKLQogfSBuZl9jdF9jYWNoZVtORl9DVF9GX05VTV07CiAKIC8qIHByb3RlY3QgbWVtYmVycyBvZiBuZl9jdF9jYWNoZSBleGNlcHQgb2YgInVzZSIgKi8KQEAgLTIwOCwxMCArMjA1LDggQEAKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXAgPSBfX25mX2N0X3Byb3RvX2ZpbmQobDNwcm90bywgcHJvdG9jb2wpOwotCWlmIChwKSB7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQocC0+bWUpKQotCQkJcCA9ICZuZl9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbDsKLQl9CisJaWYgKCF0cnlfbW9kdWxlX2dldChwLT5tZSkpCisJCXAgPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAkKIAlyZXR1cm4gcDsKQEAgLTIyOSwxMCArMjI0LDggQEAKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXAgPSBfX25mX2N0X2wzcHJvdG9fZmluZChsM3Byb3RvKTsKLQlpZiAocCkgewotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJCXAgPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfbDNwcm90bzsKLQl9CisJaWYgKCF0cnlfbW9kdWxlX2dldChwLT5tZSkpCisJCXAgPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfbDNwcm90bzsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCiAJcmV0dXJuIHA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCmluZGV4IDdkZTRmMDYuLjNmYzU4ZTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCkBAIC05NCw1ICs5NCw0IEBACiAJLnByaW50X2Nvbm50cmFjayA9IGdlbmVyaWNfcHJpbnRfY29ubnRyYWNrLAogCS5wcmVwYXJlCSA9IGdlbmVyaWNfcHJlcGFyZSwKIAkuZ2V0X2ZlYXR1cmVzCSA9IGdlbmVyaWNfZ2V0X2ZlYXR1cmVzLAotCS5tZQkJID0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDBlMGU5ZDcuLmJkMTBlYjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLKQorI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChjZGFbQ1RBX01BUkstMV0pCiAJCWN0LT5tYXJrID0gbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX01BUkstMV0pKTsKICNlbmRpZgpAQCAtMTA2Miw3ICsxMDYyLDcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUkspCisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspCiAJaWYgKGNkYVtDVEFfTUFSSy0xXSkKIAkJY3QtPm1hcmsgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOwogI2VuZGlmCkBAIC0xNjg3LDcgKzE2ODcsNyBAQAogCXByaW50aygiY3RuZXRsaW5rOiB1bnJlZ2lzdGVyaW5nIGZyb20gbmZuZXRsaW5rLlxuIik7CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUwotCW5mX2Nvbm50cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKCZjdG5sX25vdGlmaWVyX2V4cCk7CisJbmZfY29ubnRyYWNrX2V4cGVjdF91bnJlZ2lzdGVyX25vdGlmaWVyKCZjdG5sX25vdGlmaWVyX2V4cCk7CiAJbmZfY29ubnRyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoJmN0bmxfbm90aWZpZXIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA5Y2NjYzMyLi4wYzZkYTQ5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC0yNDAsMTIgKzI0MCwxNSBAQAogCQkJZmxhZyA9IDE7CiAJCX0KIAotCQkvKiBDb29raWUgQWNrL0VjaG8gY2h1bmtzIG5vdCB0aGUgZmlyc3QgT1IgCi0JCSAgIEluaXQgLyBJbml0IEFjayAvIFNodXRkb3duIGNvbXBsIGNodW5rcyBub3QgdGhlIG9ubHkgY2h1bmtzICovCi0JCWlmICgoc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9BQ0sgCisJCS8qCisJCSAqIENvb2tpZSBBY2svRWNobyBjaHVua3Mgbm90IHRoZSBmaXJzdCBPUgorCQkgKiBJbml0IC8gSW5pdCBBY2sgLyBTaHV0ZG93biBjb21wbCBjaHVua3Mgbm90IHRoZSBvbmx5IGNodW5rcworCQkgKiBPUiB6ZXJvLWxlbmd0aC4KKwkJICovCisJCWlmICgoKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9DT09LSUVfQUNLCiAJCQl8fCBzY2gtPnR5cGUgPT0gU0NUUF9DSURfQ09PS0lFX0VDSE8KIAkJCXx8IGZsYWcpCi0JCSAgICAgJiYgY291bnQgIT0wICkgeworCQkgICAgICAmJiBjb3VudCAhPTApIHx8ICFzY2gtPmxlbmd0aCkgewogCQkJREVCVUdQKCJCYXNpYyBjaGVja3MgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDY0OTJlZDYuLjY5ODk5ZjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC03OTksOCArNzk5LDcgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCiAJCSAgICAgaW50IHBmLAotCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAotCQkgICAgIGludCgqY3N1bSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKix1bnNpZ25lZCBpbnQpKQorCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKIAl1bnNpZ25lZCBpbnQgdGNwbGVuID0gc2tiLT5sZW4gLSBkYXRhb2ZmOwpAQCAtODMwLDkgKzgyOSw4IEBACiAJICovCiAJLyogRklYTUU6IFNvdXJjZSByb3V0ZSBJUCBvcHRpb24gcGFja2V0cyAtLVJSICovCiAJaWYgKCgocGYgPT0gUEZfSU5FVCAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HKSB8fAotCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gID09IE5GX0lQNl9QUkVfUk9VVElORykpCi0JICAgICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZCi0JICAgICYmIGNzdW0oc2tiLCBkYXRhb2ZmKSkgeworCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gID09IE5GX0lQNl9QUkVfUk9VVElORykpICYmCisJICAgIG5mX2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgSVBQUk9UT19UQ1AsIHBmKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQogCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSAgIm5mX2N0X3RjcDogYmFkIFRDUCBjaGVja3N1bSAiKTsKQEAgLTg1MSw0NCArODQ5LDYgQEAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdGF0aWMgaW50IGNzdW00KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmKQotewotCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYyhza2ItPm5oLmlwaC0+c2FkZHIsIHNrYi0+bmguaXBoLT5kYWRkciwKLQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX1RDUCwKLQkJCSAgICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gc2tiLT5jc3VtCi0JCQkgICAgICAJIDogc2tiX2NoZWNrc3VtKHNrYiwgZGF0YW9mZiwKLQkJCQkJCXNrYi0+bGVuIC0gZGF0YW9mZiwgMCkpOwotfQotCi1zdGF0aWMgaW50IGNzdW02KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmKQotewotCXJldHVybiBjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCi0JCQkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX1RDUCwKLQkJCSAgICAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVwotCQkJICAgICAgID8gY3N1bV9zdWIoc2tiLT5jc3VtLAotCQkJCQkgIHNrYl9jaGVja3N1bShza2IsIDAsIGRhdGFvZmYsIDApKQotCQkJICAgICAgIDogc2tiX2NoZWNrc3VtKHNrYiwgZGF0YW9mZiwgc2tiLT5sZW4gLSBkYXRhb2ZmLAotCQkJCQkgICAgICAwKSk7Ci19Ci0KLXN0YXRpYyBpbnQgdGNwX2Vycm9yNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAotCQkgICAgICBpbnQgcGYsCi0JCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQotewotCXJldHVybiB0Y3BfZXJyb3Ioc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtLCBjc3VtNCk7Ci19Ci0KLXN0YXRpYyBpbnQgdGNwX2Vycm9yNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAotCQkgICAgICBpbnQgcGYsCi0JCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQotewotCXJldHVybiB0Y3BfZXJyb3Ioc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtLCBjc3VtNik7Ci19Ci0KIC8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi8KIHN0YXRpYyBpbnQgdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLAogCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTIxOCw3ICsxMTc4LDcgQEAKIAkucHJpbnRfY29ubnRyYWNrIAk9IHRjcF9wcmludF9jb25udHJhY2ssCiAJLnBhY2tldCAJCT0gdGNwX3BhY2tldCwKIAkubmV3IAkJCT0gdGNwX25ldywKLQkuZXJyb3IJCQk9IHRjcF9lcnJvcjQsCisJLmVycm9yCQkJPSB0Y3BfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50b19uZmF0dHIJCT0gdGNwX3RvX25mYXR0ciwKQEAgLTEyMzksNyArMTE5OSw3IEBACiAJLnByaW50X2Nvbm50cmFjayAJPSB0Y3BfcHJpbnRfY29ubnRyYWNrLAogCS5wYWNrZXQgCQk9IHRjcF9wYWNrZXQsCiAJLm5ldyAJCQk9IHRjcF9uZXcsCi0JLmVycm9yCQkJPSB0Y3BfZXJyb3I2LAorCS5lcnJvcgkJCT0gdGNwX2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmZhdHRyCQk9IHRjcF90b19uZmF0dHIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDgzMWQyMDYuLmQ5M2VkYmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0xMDMsOCArMTAzLDcgQEAKIHN0YXRpYyBpbnQgdWRwX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKIAkJICAgICBpbnQgcGYsCi0JCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCi0JCSAgICAgaW50ICgqY3N1bSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKiwgdW5zaWduZWQgaW50KSkKKwkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAl1bnNpZ25lZCBpbnQgdWRwbGVuID0gc2tiLT5sZW4gLSBkYXRhb2ZmOwogCXN0cnVjdCB1ZHBoZHIgX2hkciwgKmhkcjsKQEAgLTEzNiw5ICsxMzUsOCBAQAogCSAqIGFuZCBtb3Jlb3ZlciByb290IG1pZ2h0IHNlbmQgcmF3IHBhY2tldHMuCiAJICogRklYTUU6IFNvdXJjZSByb3V0ZSBJUCBvcHRpb24gcGFja2V0cyAtLVJSICovCiAJaWYgKCgocGYgPT0gUEZfSU5FVCAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HKSB8fAotCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkKLQkgICAgJiYgc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkKLQkgICAgJiYgY3N1bShza2IsIGRhdGFvZmYpKSB7CisJICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKSAmJgorCSAgICBuZl9jaGVja3N1bShza2IsIGhvb2tudW0sIGRhdGFvZmYsIElQUFJPVE9fVURQLCBwZikpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVURQKSkKIAkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkibmZfY3RfdWRwOiBiYWQgVURQIGNoZWNrc3VtICIpOwpAQCAtMTQ4LDQ0ICsxNDYsNiBAQAogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKLXN0YXRpYyBpbnQgY3N1bTQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCi17Ci0JcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKHNrYi0+bmguaXBoLT5zYWRkciwgc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCSBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVURQLAotCQkJCSBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IHNrYi0+Y3N1bQotCQkJCSA6IHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsCi0JCQkJCQlza2ItPmxlbiAtIGRhdGFvZmYsIDApKTsKLX0KLQotc3RhdGljIGludCBjc3VtNihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKLXsKLQlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJICAgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwgSVBQUk9UT19VRFAsCi0JCQkgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcKLQkJCSAgICAgICA/IGNzdW1fc3ViKHNrYi0+Y3N1bSwKLQkJCQkJICBza2JfY2hlY2tzdW0oc2tiLCAwLCBkYXRhb2ZmLCAwKSkKLQkJCSAgICAgICA6IHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsIHNrYi0+bGVuIC0gZGF0YW9mZiwKLQkJCQkJICAgICAgMCkpOwotfQotCi1zdGF0aWMgaW50IHVkcF9lcnJvcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKLQkJICAgICAgaW50IHBmLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKLXsKLQlyZXR1cm4gdWRwX2Vycm9yKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSwgY3N1bTQpOwotfQotCi1zdGF0aWMgaW50IHVkcF9lcnJvcjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKLQkJICAgICAgaW50IHBmLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKLXsKLQlyZXR1cm4gdWRwX2Vycm9yKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSwgY3N1bTYpOwotfQotCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA0ID0KIHsKIAkubDNwcm90bwkJPSBQRl9JTkVULApAQCAtMTk3LDcgKzE1Nyw3IEBACiAJLnByaW50X2Nvbm50cmFjawk9IHVkcF9wcmludF9jb25udHJhY2ssCiAJLnBhY2tldAkJCT0gdWRwX3BhY2tldCwKIAkubmV3CQkJPSB1ZHBfbmV3LAotCS5lcnJvcgkJCT0gdWRwX2Vycm9yNCwKKwkuZXJyb3IJCQk9IHVkcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25mYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmZhdHRyLApAQCAtMjE2LDcgKzE3Niw3IEBACiAJLnByaW50X2Nvbm50cmFjawk9IHVkcF9wcmludF9jb25udHJhY2ssCiAJLnBhY2tldAkJCT0gdWRwX3BhY2tldCwKIAkubmV3CQkJPSB1ZHBfbmV3LAotCS5lcnJvcgkJCT0gdWRwX2Vycm9yNiwKKwkuZXJyb3IJCQk9IHVkcF9lcnJvciwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25mYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmZhdHRyLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IGM3MmFhM2MuLjQwODk2MGMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTY0OSw2MyArNjQ5LDYgQEAKIEVYUE9SVF9TWU1CT0wobmZfY3RfbG9nX2ludmFsaWQpOwogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAotc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKLSNlbmRpZgotCWludCByZXQgPSAwOwotCi0JaWYgKCFpbml0KSBnb3RvIGNsZWFudXA7Ci0KLQlyZXQgPSBuZl9jb25udHJhY2tfaW5pdCgpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGNsZWFudXBfbm90aGluZzsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcHJvYyA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJuZl9jb25udHJhY2siLCAwNDQwLCAmY3RfZmlsZV9vcHMpOwotCWlmICghcHJvYykgZ290byBjbGVhbnVwX2luaXQ7Ci0KLQlwcm9jX2V4cCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJuZl9jb25udHJhY2tfZXhwZWN0IiwgMDQ0MCwKLQkJCQkJJmV4cF9maWxlX29wcyk7Ci0JaWYgKCFwcm9jX2V4cCkgZ290byBjbGVhbnVwX3Byb2M7Ci0KLQlwcm9jX3N0YXQgPSBjcmVhdGVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgU19JUlVHTywgcHJvY19uZXRfc3RhdCk7Ci0JaWYgKCFwcm9jX3N0YXQpCi0JCWdvdG8gY2xlYW51cF9wcm9jX2V4cDsKLQotCXByb2Nfc3RhdC0+cHJvY19mb3BzID0gJmN0X2NwdV9zZXFfZm9wczsKLQlwcm9jX3N0YXQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JbmZfY3Rfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOwotCWlmIChuZl9jdF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfcHJvY19zdGF0OwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLQotIGNsZWFudXA6Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9zeXNjdGxfaGVhZGVyKTsKLSBjbGVhbnVwX3Byb2Nfc3RhdDoKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOwotIGNsZWFudXBfcHJvY19leHA6Ci0JcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2tfZXhwZWN0Iik7Ci0gY2xlYW51cF9wcm9jOgotCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrIik7Ci0gY2xlYW51cF9pbml0OgotI2VuZGlmIC8qIENORklHX1BST0NfRlMgKi8KLQluZl9jb25udHJhY2tfY2xlYW51cCgpOwotIGNsZWFudXBfbm90aGluZzoKLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgbmZfY29ubnRyYWNrX2wzcHJvdG9fcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90bykKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTgwOCwxMiArNzUxLDY2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jLCAqcHJvY19leHAsICpwcm9jX3N0YXQ7CisjZW5kaWYKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IG5mX2Nvbm50cmFja19pbml0KCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgibmZfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKKwlpZiAoIXByb2MpIGdvdG8gY2xlYW51cF9pbml0OworCisJcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCisJCQkJCSZleHBfZmlsZV9vcHMpOworCWlmICghcHJvY19leHApIGdvdG8gY2xlYW51cF9wcm9jOworCisJcHJvY19zdGF0ID0gY3JlYXRlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIFNfSVJVR08sIHByb2NfbmV0X3N0YXQpOworCWlmICghcHJvY19zdGF0KQorCQlnb3RvIGNsZWFudXBfcHJvY19leHA7CisKKwlwcm9jX3N0YXQtPnByb2NfZm9wcyA9ICZjdF9jcHVfc2VxX2ZvcHM7CisJcHJvY19zdGF0LT5vd25lciA9IFRISVNfTU9EVUxFOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCW5mX2N0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKKwlpZiAobmZfY3Rfc3lzY3RsX2hlYWRlciA9PSBOVUxMKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciB0byBzeXNjdGwuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwX3Byb2Nfc3RhdDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorIGNsZWFudXBfcHJvY19zdGF0OgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlyZW1vdmVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgcHJvY19uZXRfc3RhdCk7CisgY2xlYW51cF9wcm9jX2V4cDoKKwlwcm9jX25ldF9yZW1vdmUoIm5mX2Nvbm50cmFja19leHBlY3QiKTsKKyBjbGVhbnVwX3Byb2M6CisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2siKTsKKyBjbGVhbnVwX2luaXQ6CisjZW5kaWYgLyogQ05GSUdfUFJPQ19GUyAqLworCW5mX2Nvbm50cmFja19jbGVhbnVwKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmkodm9pZCkKIHsKLQlpbml0X29yX2NsZWFudXAoMCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9zeXNjdGxfaGVhZGVyKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoIm5mX2Nvbm50cmFjayIsIHByb2NfbmV0X3N0YXQpOworCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIpOworCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrIik7CisjZW5kaWYgLyogQ05GSUdfUFJPQ19GUyAqLworCW5mX2Nvbm50cmFja19jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCmluZGV4IGQ5ZjBkN2UuLmVlOGY3MDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGZvciBxdWV1ZWluZyBhbmQgbXVzdCByZWluamVjdCBhbGwgcGFja2V0cyBpdCByZWNlaXZlcywgbm8gbWF0dGVyIHdoYXQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciAqcXVldWVfaGFuZGxlcltOUFJPVE9dOwotc3RhdGljIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcXVldWVfcmVyb3V0ZXJbTlBST1RPXTsKIAogc3RhdGljIERFRklORV9SV0xPQ0socXVldWVfaGFuZGxlcl9sb2NrKTsKIApAQCAtNTksMzIgKzU4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVyKTsKIAotaW50IG5mX3JlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKGludCBwZiwgc3RydWN0IG5mX3F1ZXVlX3Jlcm91dGVyICpyZXIpCi17Ci0JaWYgKHBmID49IE5QUk9UTykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwotCXJjdV9hc3NpZ25fcG9pbnRlcihxdWV1ZV9yZXJvdXRlcltwZl0sIHJlcik7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcik7Ci0KLWludCBuZl91bnJlZ2lzdGVyX3F1ZXVlX3Jlcm91dGVyKGludCBwZikKLXsKLQlpZiAocGYgPj0gTlBST1RPKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX2xvY2tfYmgoJnF1ZXVlX2hhbmRsZXJfbG9jayk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKHF1ZXVlX3Jlcm91dGVyW3BmXSwgTlVMTCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwotCXN5bmNocm9uaXplX3JjdSgpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobmZfdW5yZWdpc3Rlcl9xdWV1ZV9yZXJvdXRlcik7Ci0KIHZvaWQgbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVycyhzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciAqcWgpCiB7CiAJaW50IHBmOwpAQCAtMTE2LDcgKzg5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c2luZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c291dGRldiA9IE5VTEw7CiAjZW5kaWYKLQlzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnJlcm91dGVyOworCXN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbzsKIAogCS8qIFFVRVVFID09IERST1AgaWYgbm9vbmUgaXMgd2FpdGluZywgdG8gYmUgc2FmZS4gKi8KIAlyZWFkX2xvY2soJnF1ZXVlX2hhbmRsZXJfbG9jayk7CkBAIC0xMjYsNyArOTksMTQgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKStxdWV1ZV9yZXJvdXRlcltwZl0tPnJlcl9zaXplLCBHRlBfQVRPTUlDKTsKKwlhZmluZm8gPSBuZl9nZXRfYWZpbmZvKHBmKTsKKwlpZiAoIWFmaW5mbykgeworCQlyZWFkX3VubG9jaygmcXVldWVfaGFuZGxlcl9sb2NrKTsKKwkJa2ZyZWVfc2tiKCpza2IpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pICsgYWZpbmZvLT5yb3V0ZV9rZXlfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFpbmZvKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIk9PTSBxdWV1ZWluZyBwYWNrZXQgJXBcbiIsCkBAIC0xNTgsMTAgKzEzOCw3IEBACiAJCWlmIChwaHlzb3V0ZGV2KSBkZXZfaG9sZChwaHlzb3V0ZGV2KTsKIAl9CiAjZW5kaWYKLQlyZXJvdXRlciA9IHJjdV9kZXJlZmVyZW5jZShxdWV1ZV9yZXJvdXRlcltwZl0pOwotCWlmIChyZXJvdXRlcikKLQkJcmVyb3V0ZXItPnNhdmUoKnNrYiwgaW5mbyk7Ci0KKwlhZmluZm8tPnNhdmVyb3V0ZSgqc2tiLCBpbmZvKTsKIAlzdGF0dXMgPSBxdWV1ZV9oYW5kbGVyW3BmXS0+b3V0Zm4oKnNrYiwgaW5mbywgcXVldWVudW0sCiAJCQkJCSAgcXVldWVfaGFuZGxlcltwZl0tPmRhdGEpOwogCkBAIC0xOTAsNyArMTY3LDcgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtID0gJmluZm8tPmVsZW0tPmxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAqaTsKLQlzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnJlcm91dGVyOworCXN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbzsKIAogCXJjdV9yZWFkX2xvY2soKTsKIApAQCAtMjI4LDggKzIwNSw4IEBACiAJfQogCiAJaWYgKHZlcmRpY3QgPT0gTkZfQUNDRVBUKSB7Ci0JCXJlcm91dGVyID0gcmN1X2RlcmVmZXJlbmNlKHF1ZXVlX3Jlcm91dGVyW2luZm8tPnBmXSk7Ci0JCWlmIChyZXJvdXRlciAmJiByZXJvdXRlci0+cmVyb3V0ZSgmc2tiLCBpbmZvKSA8IDApCisJCWFmaW5mbyA9IG5mX2dldF9hZmluZm8oaW5mby0+cGYpOworCQlpZiAoIWFmaW5mbyB8fCBhZmluZm8tPnJlcm91dGUoJnNrYiwgaW5mbykgPCAwKQogCQkJdmVyZGljdCA9IE5GX0RST1A7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IDNlM2Y1NDQuLjYxY2RkYTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIG5mdWxubF9zZXRfZmxhZ3Moc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdCwgdV9pbnQxNl90IGZsYWdzKQogewogCXNwaW5fbG9ja19iaCgmaW5zdC0+bG9jayk7Ci0JaW5zdC0+ZmxhZ3MgPSBudG9ocyhmbGFncyk7CisJaW5zdC0+ZmxhZ3MgPSBmbGFnczsKIAlzcGluX3VubG9ja19iaCgmaW5zdC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTkwMiw3ICs5MDIsNyBAQAogCWlmIChuZnVsYVtORlVMQV9DRkdfRkxBR1MtMV0pIHsKIAkJdV9pbnQxNl90IGZsYWdzID0KIAkJCSoodV9pbnQxNl90ICopTkZBX0RBVEEobmZ1bGFbTkZVTEFfQ0ZHX0ZMQUdTLTFdKTsKLQkJbmZ1bG5sX3NldF9mbGFncyhpbnN0LCBudG9obChmbGFncykpOworCQluZnVsbmxfc2V0X2ZsYWdzKGluc3QsIG50b2hzKGZsYWdzKSk7CiAJfQogCiBvdXRfcHV0OgpAQCAtMTAzMywxNyArMTAzMywxMyBAQAogCiAjZW5kaWYgLyogUFJPQ19GUyAqLwogCi1zdGF0aWMgaW50Ci1pbml0X29yX2NsZWFudXAoaW50IGluaXQpCitzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfbG9nX2luaXQodm9pZCkKIHsKIAlpbnQgaSwgc3RhdHVzID0gLUVOT01FTTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZnVsOwogI2VuZGlmCiAJCi0JaWYgKCFpbml0KQotCQlnb3RvIGNsZWFudXA7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgSU5TVEFOQ0VfQlVDS0VUUzsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJmluc3RhbmNlX3RhYmxlW2ldKTsKIAkKQEAgLTEwNjYsMzAgKzEwNjIsMjUgQEAKIAkJZ290byBjbGVhbnVwX3N1YnN5czsKIAlwcm9jX25mdWwtPnByb2NfZm9wcyA9ICZuZnVsX2ZpbGVfb3BzOwogI2VuZGlmCi0KIAlyZXR1cm4gc3RhdHVzOwogCi1jbGVhbnVwOgotCW5mX2xvZ191bnJlZ2lzdGVyX2xvZ2dlcigmbmZ1bG5sX2xvZ2dlcik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX2xvZyIsIHByb2NfbmV0X25ldGZpbHRlcik7CiBjbGVhbnVwX3N1YnN5czoKLSNlbmRpZgogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZ1bG5sX3N1YnN5cyk7CisjZW5kaWYKIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjoKIAluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfbG9nX2luaXQodm9pZCkKLXsKLQkKLQlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZuZXRsaW5rX2xvZ19maW5pKHZvaWQpCiB7Ci0JaW5pdF9vcl9jbGVhbnVwKDApOworCW5mX2xvZ191bnJlZ2lzdGVyX2xvZ2dlcigmbmZ1bG5sX2xvZ2dlcik7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlyZW1vdmVfcHJvY19lbnRyeSgibmZuZXRsaW5rX2xvZyIsIHByb2NfbmV0X25ldGZpbHRlcik7CisjZW5kaWYKKwluZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoJm5mdWxubF9zdWJzeXMpOworCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZ1bG5sX3J0bmxfbm90aWZpZXIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIm5ldGZpbHRlciB1c2Vyc3BhY2UgbG9nZ2luZyIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggZDBlNjJmNi4uODZhNGFjMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0xMDcxLDE3ICsxMDcxLDEzIEBACiAKICNlbmRpZiAvKiBQUk9DX0ZTICovCiAKLXN0YXRpYyBpbnQKLWluaXRfb3JfY2xlYW51cChpbnQgaW5pdCkKK3N0YXRpYyBpbnQgX19pbml0IG5mbmV0bGlua19xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IGksIHN0YXR1cyA9IC1FTk9NRU07CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmZxdWV1ZTsKICNlbmRpZgogCQotCWlmICghaW5pdCkKLQkJZ290byBjbGVhbnVwOwotCiAJZm9yIChpID0gMDsgaSA8IElOU1RBTkNFX0JVQ0tFVFM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZpbnN0YW5jZV90YWJsZVtpXSk7CiAKQEAgLTExMDEsMzEgKzEwOTcsMjYgQEAKICNlbmRpZgogCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZuZnFubF9kZXZfbm90aWZpZXIpOwotCiAJcmV0dXJuIHN0YXR1czsKIAotY2xlYW51cDoKLQluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZm5ldGxpbmtfcXVldWUiLCBwcm9jX25ldF9uZXRmaWx0ZXIpOwogY2xlYW51cF9zdWJzeXM6Ci0jZW5kaWYJCiAJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnFubF9zdWJzeXMpOworI2VuZGlmCiBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI6CiAJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZuZnFubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfcXVldWVfaW5pdCh2b2lkKQotewotCQotCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBuZm5ldGxpbmtfcXVldWVfZmluaSh2b2lkKQogewotCWluaXRfb3JfY2xlYW51cCgwKTsKKwluZl91bnJlZ2lzdGVyX3F1ZXVlX2hhbmRsZXJzKCZuZnFoKTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZm5ldGxpbmtfcXVldWUiLCBwcm9jX25ldF9uZXRmaWx0ZXIpOworI2VuZGlmCisJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZuZnFubF9zdWJzeXMpOworCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZxbmxfcnRubF9ub3RpZmllcik7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigibmV0ZmlsdGVyIHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggYTY1N2FiNS4uOTkyOTNjNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtMzgsNiArMzgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbWF0Y2g7CiAJc3RydWN0IGxpc3RfaGVhZCB0YXJnZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCB0YWJsZXM7CisJc3RydWN0IG11dGV4IGNvbXBhdF9tdXRleDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfYWYgKnh0OwpAQCAtMjcyLDYgKzI3Myw1NCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY2hlY2tfbWF0Y2gpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IHh0X2NvbXBhdF9tYXRjaCh2b2lkICptYXRjaCwgdm9pZCAqKmRzdHB0ciwgaW50ICpzaXplLCBpbnQgY29udmVydCkKK3sKKwlzdHJ1Y3QgeHRfbWF0Y2ggKm07CisJc3RydWN0IGNvbXBhdF94dF9lbnRyeV9tYXRjaCAqcGNvbXBhdF9tOworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqcG07CisJdV9pbnQxNl90IG1zaXplOworCWludCBvZmYsIHJldDsKKworCXJldCA9IDA7CisJbSA9ICgoc3RydWN0IHh0X2VudHJ5X21hdGNoICopbWF0Y2gpLT51Lmtlcm5lbC5tYXRjaDsKKwlvZmYgPSBYVF9BTElHTihtLT5tYXRjaHNpemUpIC0gQ09NUEFUX1hUX0FMSUdOKG0tPm1hdGNoc2l6ZSk7CisJc3dpdGNoIChjb252ZXJ0KSB7CisJCWNhc2UgQ09NUEFUX1RPX1VTRVI6CisJCQlwbSA9IChzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKiltYXRjaDsKKwkJCW1zaXplID0gcG0tPnUudXNlci5tYXRjaF9zaXplOworCQkJaWYgKGNvcHlfdG9fdXNlcigqZHN0cHRyLCBwbSwgbXNpemUpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zaXplIC09IG9mZjsKKwkJCWlmIChwdXRfdXNlcihtc2l6ZSwgKHVfaW50MTZfdCAqKSpkc3RwdHIpKQorCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkqc2l6ZSAtPSBvZmY7CisJCQkqZHN0cHRyICs9IG1zaXplOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUEFUX0ZST01fVVNFUjoKKwkJCXBjb21wYXRfbSA9IChzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X21hdGNoICopbWF0Y2g7CisJCQlwbSA9IChzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKikqZHN0cHRyOworCQkJbXNpemUgPSBwY29tcGF0X20tPnUudXNlci5tYXRjaF9zaXplOworCQkJbWVtY3B5KHBtLCBwY29tcGF0X20sIG1zaXplKTsKKwkJCW1zaXplICs9IG9mZjsKKwkJCXBtLT51LnVzZXIubWF0Y2hfc2l6ZSA9IG1zaXplOworCQkJKnNpemUgKz0gb2ZmOworCQkJKmRzdHB0ciArPSBtc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIENPTVBBVF9DQUxDX1NJWkU6CisJCQkqc2l6ZSArPSBvZmY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FTk9QUk9UT09QVDsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X21hdGNoKTsKKyNlbmRpZgorCiBpbnQgeHRfY2hlY2tfdGFyZ2V0KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5LAogCQkgICAgdW5zaWduZWQgaW50IHNpemUsIGNvbnN0IGNoYXIgKnRhYmxlLCB1bnNpZ25lZCBpbnQgaG9va19tYXNrLAogCQkgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIGludCBpbnZfcHJvdG8pCkBAIC0zMDEsNiArMzUwLDU0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9jaGVja190YXJnZXQpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IHh0X2NvbXBhdF90YXJnZXQodm9pZCAqdGFyZ2V0LCB2b2lkICoqZHN0cHRyLCBpbnQgKnNpemUsIGludCBjb252ZXJ0KQoreworCXN0cnVjdCB4dF90YXJnZXQgKnQ7CisJc3RydWN0IGNvbXBhdF94dF9lbnRyeV90YXJnZXQgKnBjb21wYXQ7CisJc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqcHQ7CisJdV9pbnQxNl90IHRzaXplOworCWludCBvZmYsIHJldDsKKworCXJldCA9IDA7CisJdCA9ICgoc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqKXRhcmdldCktPnUua2VybmVsLnRhcmdldDsKKwlvZmYgPSBYVF9BTElHTih0LT50YXJnZXRzaXplKSAtIENPTVBBVF9YVF9BTElHTih0LT50YXJnZXRzaXplKTsKKwlzd2l0Y2ggKGNvbnZlcnQpIHsKKwkJY2FzZSBDT01QQVRfVE9fVVNFUjoKKwkJCXB0ID0gKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKil0YXJnZXQ7CisJCQl0c2l6ZSA9IHB0LT51LnVzZXIudGFyZ2V0X3NpemU7CisJCQlpZiAoY29weV90b191c2VyKCpkc3RwdHIsIHB0LCB0c2l6ZSkpIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCQkJdHNpemUgLT0gb2ZmOworCQkJaWYgKHB1dF91c2VyKHRzaXplLCAodV9pbnQxNl90ICopKmRzdHB0cikpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCSpzaXplIC09IG9mZjsKKwkJCSpkc3RwdHIgKz0gdHNpemU7CisJCQlicmVhazsKKwkJY2FzZSBDT01QQVRfRlJPTV9VU0VSOgorCQkJcGNvbXBhdCA9IChzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCAqKXRhcmdldDsKKwkJCXB0ID0gKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKikqZHN0cHRyOworCQkJdHNpemUgPSBwY29tcGF0LT51LnVzZXIudGFyZ2V0X3NpemU7CisJCQltZW1jcHkocHQsIHBjb21wYXQsIHRzaXplKTsKKwkJCXRzaXplICs9IG9mZjsKKwkJCXB0LT51LnVzZXIudGFyZ2V0X3NpemUgPSB0c2l6ZTsKKwkJCSpzaXplICs9IG9mZjsKKwkJCSpkc3RwdHIgKz0gdHNpemU7CisJCQlicmVhazsKKwkJY2FzZSBDT01QQVRfQ0FMQ19TSVpFOgorCQkJKnNpemUgKz0gb2ZmOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF90YXJnZXQpOworI2VuZGlmCisKIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwpAQCAtMzE2LDcgKzQxMyw3IEBACiAKIAluZXdpbmZvLT5zaXplID0gc2l6ZTsKIAotCWZvcl9lYWNoX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChzaXplIDw9IFBBR0VfU0laRSkKIAkJCW5ld2luZm8tPmVudHJpZXNbY3B1XSA9IGttYWxsb2Nfbm9kZShzaXplLAogCQkJCQkJCUdGUF9LRVJORUwsCkBAIC0zMzksNyArNDM2LDcgQEAKIHsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGluZm8tPnNpemUgPD0gUEFHRV9TSVpFKQogCQkJa2ZyZWUoaW5mby0+ZW50cmllc1tjcHVdKTsKIAkJZWxzZQpAQCAtMzcxLDYgKzQ2OCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfdGFibGVfdW5sb2NrKTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3ZvaWQgeHRfY29tcGF0X2xvY2soaW50IGFmKQoreworCW11dGV4X2xvY2soJnh0W2FmXS5jb21wYXRfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2xvY2spOworCit2b2lkIHh0X2NvbXBhdF91bmxvY2soaW50IGFmKQoreworCW11dGV4X3VubG9jaygmeHRbYWZdLmNvbXBhdF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4dF9jb21wYXRfdW5sb2NrKTsKKyNlbmRpZgogCiBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqCiB4dF9yZXBsYWNlX3RhYmxlKHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCkBAIC00MTksNiArNTI5LDcgQEAKIAogCS8qIFNpbXBsaWZpZXMgcmVwbGFjZV90YWJsZSBjb2RlLiAqLwogCXRhYmxlLT5wcml2YXRlID0gYm9vdHN0cmFwOworCXJ3bG9ja19pbml0KCZ0YWJsZS0+bG9jayk7CiAJaWYgKCF4dF9yZXBsYWNlX3RhYmxlKHRhYmxlLCAwLCBuZXdpbmZvLCAmcmV0KSkKIAkJZ290byB1bmxvY2s7CiAKQEAgLTQyOCw3ICs1MzksNiBAQAogCS8qIHNhdmUgbnVtYmVyIG9mIGluaXRpYWwgZW50cmllcyAqLwogCXByaXZhdGUtPmluaXRpYWxfZW50cmllcyA9IHByaXZhdGUtPm51bWJlcjsKIAotCXJ3bG9ja19pbml0KCZ0YWJsZS0+bG9jayk7CiAJbGlzdF9wcmVwZW5kKCZ4dFt0YWJsZS0+YWZdLnRhYmxlcywgdGFibGUpOwogCiAJcmV0ID0gMDsKQEAgLTY3MSw2ICs3ODEsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IE5QUk9UTzsgaSsrKSB7CiAJCW11dGV4X2luaXQoJnh0W2ldLm11dGV4KTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCW11dGV4X2luaXQoJnh0W2ldLmNvbXBhdF9tdXRleCk7CisjZW5kaWYKIAkJSU5JVF9MSVNUX0hFQUQoJnh0W2ldLnRhcmdldCk7CiAJCUlOSVRfTElTVF9IRUFEKCZ4dFtpXS5tYXRjaCk7CiAJCUlOSVRfTElTVF9IRUFEKCZ4dFtpXS50YWJsZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZDYyOAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggRVNQIHBhcmFtZXRlcnMuICovCisKKy8qIChDKSAxOTk5LTIwMDAgWW9uIFVyaWFydGUgPHlvbkBhc3Rhcm8uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJZb24gVXJpYXJ0ZSA8eW9uQGFzdGFyby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigieF90YWJsZXMgRVNQIFNQSSBtYXRjaCBtb2R1bGUiKTsKK01PRFVMRV9BTElBUygiaXB0X2VzcCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X2VzcCIpOworCisjaWYgMAorI2RlZmluZSBkdXByaW50Zihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIFJldHVybnMgMSBpZiB0aGUgc3BpIGlzIG1hdGNoZWQgYnkgdGhlIHJhbmdlLCAwIG90aGVyd2lzZSAqLworc3RhdGljIGlubGluZSBpbnQKK3NwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBpbnQgaW52ZXJ0KQoreworCWludCByID0gMDsKKwlkdXByaW50ZigiZXNwIHNwaV9tYXRjaDolYyAweCV4IDw9IDB4JXggPD0gMHgleCIsIGludmVydCA/ICchJyA6ICcgJywKKwkJIG1pbiwgc3BpLCBtYXgpOworCXIgPSAoc3BpID49IG1pbiAmJiBzcGkgPD0gbWF4KSBeIGludmVydDsKKwlkdXByaW50ZigiIHJlc3VsdCAlc1xuIiwgciA/ICJQQVNTIiA6ICJGQUlMRUQiKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludAorbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKyAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorICAgICAgaW50IG9mZnNldCwKKyAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAorICAgICAgaW50ICpob3Rkcm9wKQoreworCXN0cnVjdCBpcF9lc3BfaGRyIF9lc3AsICplaDsKKwljb25zdCBzdHJ1Y3QgeHRfZXNwICplc3BpbmZvID0gbWF0Y2hpbmZvOworCisJLyogTXVzdCBub3QgYmUgYSBmcmFnbWVudC4gKi8KKwlpZiAob2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCWVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF9lc3ApLCAmX2VzcCk7CisJaWYgKGVoID09IE5VTEwpIHsKKwkJLyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKKwkJICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLgorCQkgKi8KKwkJZHVwcmludGYoIkRyb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxuIik7CisJCSpob3Rkcm9wID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHNwaV9tYXRjaChlc3BpbmZvLT5zcGlzWzBdLCBlc3BpbmZvLT5zcGlzWzFdLCBudG9obChlaC0+c3BpKSwKKwkJCSAhIShlc3BpbmZvLT5pbnZmbGFncyAmIFhUX0VTUF9JTlZfU1BJKSk7Cit9CisKKy8qIENhbGxlZCB3aGVuIHVzZXIgdHJpZXMgdG8gaW5zZXJ0IGFuIGVudHJ5IG9mIHRoaXMgdHlwZS4gKi8KK3N0YXRpYyBpbnQKK2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAorCSAgIGNvbnN0IHZvaWQgKmlwX3ZvaWQsCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKwkgICB2b2lkICptYXRjaGluZm8sCisJICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCisJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwljb25zdCBzdHJ1Y3QgeHRfZXNwICplc3BpbmZvID0gbWF0Y2hpbmZvOworCisJaWYgKGVzcGluZm8tPmludmZsYWdzICYgflhUX0VTUF9JTlZfTUFTSykgeworCQlkdXByaW50ZigieHRfZXNwOiB1bmtub3duIGZsYWdzICVYXG4iLCBlc3BpbmZvLT5pbnZmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIGVzcF9tYXRjaCA9IHsKKwkubmFtZQkJPSAiZXNwIiwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLnByb3RvCQk9IElQUFJPVE9fRVNQLAorCS5tYXRjaAkJPSAmbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfZXNwKSwKKwkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggZXNwNl9tYXRjaCA9IHsKKwkubmFtZQkJPSAiZXNwIiwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5wcm90bwkJPSBJUFBST1RPX0VTUCwKKwkubWF0Y2gJCT0gJm1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2VzcCksCisJLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9lc3BfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJmVzcF9tYXRjaCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZlc3A2X21hdGNoKTsKKwlpZiAocmV0KQorCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZlc3BfbWF0Y2gpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X2VzcF9jbGVhbnVwKHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmZXNwX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZlc3A2X21hdGNoKTsKK30KKworbW9kdWxlX2luaXQoeHRfZXNwX2luaXQpOworbW9kdWxlX2V4aXQoeHRfZXNwX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2Y2QyYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qIEtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggb25lIG9mIGEgbGlzdCBvZiBUQ1AvVURQIHBvcnRzOiBwb3J0cyBhcmUgaW4KKyAgIHRoZSBzYW1lIHBsYWNlIHNvIHdlIGNhbiB0cmVhdCB0aGVtIGFzIGVxdWFsLiAqLworCisvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigieF90YWJsZXMgbXVsdGlwbGUgcG9ydCBtYXRjaCBtb2R1bGUiKTsKK01PRFVMRV9BTElBUygiaXB0X211bHRpcG9ydCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X211bHRpcG9ydCIpOworCisjaWYgMAorI2RlZmluZSBkdXByaW50Zihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgZHVwcmludGYoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIFJldHVybnMgMSBpZiB0aGUgcG9ydCBpcyBtYXRjaGVkIGJ5IHRoZSB0ZXN0LCAwIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50Citwb3J0c19tYXRjaChjb25zdCB1X2ludDE2X3QgKnBvcnRsaXN0LCBlbnVtIHh0X211bHRpcG9ydF9mbGFncyBmbGFncywKKwkgICAgdV9pbnQ4X3QgY291bnQsIHVfaW50MTZfdCBzcmMsIHVfaW50MTZfdCBkc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGZsYWdzICE9IFhUX01VTFRJUE9SVF9ERVNUSU5BVElPTiAmJiBwb3J0bGlzdFtpXSA9PSBzcmMpCisJCQlyZXR1cm4gMTsKKworCQlpZiAoZmxhZ3MgIT0gWFRfTVVMVElQT1JUX1NPVVJDRSAmJiBwb3J0bGlzdFtpXSA9PSBkc3QpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyAxIGlmIHRoZSBwb3J0IGlzIG1hdGNoZWQgYnkgdGhlIHRlc3QsIDAgb3RoZXJ3aXNlLiAqLworc3RhdGljIGlubGluZSBpbnQKK3BvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLAorCSAgICAgICB1X2ludDE2X3Qgc3JjLCB1X2ludDE2X3QgZHN0KQoreworCXVuc2lnbmVkIGludCBpOworCXVfaW50MTZfdCBzLCBlOworCisJZm9yIChpID0gMDsgaSA8IG1pbmZvLT5jb3VudDsgaSsrKSB7CisJCXMgPSBtaW5mby0+cG9ydHNbaV07CisKKwkJaWYgKG1pbmZvLT5wZmxhZ3NbaV0pIHsKKwkJCS8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi8KKwkJCWUgPSBtaW5mby0+cG9ydHNbKytpXTsKKwkJCWR1cHJpbnRmKCJzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZC0lZD9cbiIsIHMsIGUpOworCisJCQlpZiAobWluZm8tPmZsYWdzID09IFhUX01VTFRJUE9SVF9TT1VSQ0UKKwkJCSAgICAmJiBzcmMgPj0gcyAmJiBzcmMgPD0gZSkKKwkJCQlyZXR1cm4gMSBeIG1pbmZvLT5pbnZlcnQ7CisJCQlpZiAobWluZm8tPmZsYWdzID09IFhUX01VTFRJUE9SVF9ERVNUSU5BVElPTgorCQkJICAgICYmIGRzdCA+PSBzICYmIGRzdCA8PSBlKQorCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKKwkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gWFRfTVVMVElQT1JUX0VJVEhFUgorCQkJICAgICYmICgoZHN0ID49IHMgJiYgZHN0IDw9IGUpCisJCQkJfHwgKHNyYyA+PSBzICYmIHNyYyA8PSBlKSkpCisJCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OworCQl9IGVsc2UgeworCQkJLyogZXhhY3QgcG9ydCBtYXRjaGluZyAqLworCQkJZHVwcmludGYoInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xuIiwgcyk7CisKKwkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gWFRfTVVMVElQT1JUX1NPVVJDRQorCQkJICAgICYmIHNyYyA9PSBzKQorCQkJCXJldHVybiAxIF4gbWluZm8tPmludmVydDsKKwkJCWlmIChtaW5mby0+ZmxhZ3MgPT0gWFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCisJCQkgICAgJiYgZHN0ID09IHMpCisJCQkJcmV0dXJuIDEgXiBtaW5mby0+aW52ZXJ0OworCQkJaWYgKG1pbmZvLT5mbGFncyA9PSBYVF9NVUxUSVBPUlRfRUlUSEVSCisJCQkgICAgJiYgKHNyYyA9PSBzIHx8IGRzdCA9PSBzKSkKKwkJCQlyZXR1cm4gMSBeIG1pbmZvLT5pbnZlcnQ7CisJCX0KKwl9CisKKyAJcmV0dXJuIG1pbmZvLT5pbnZlcnQ7Cit9CisKK3N0YXRpYyBpbnQKK21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKyAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKKyAgICAgIGludCBvZmZzZXQsCisgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKyAgICAgIGludCAqaG90ZHJvcCkKK3sKKwl1MTYgX3BvcnRzWzJdLCAqcHB0cjsKKwljb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87CisKKwlpZiAob2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLCBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKKwlpZiAocHB0ciA9PSBOVUxMKSB7CisJCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCisJCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KKwkJICovCisJCWR1cHJpbnRmKCJ4dF9tdWx0aXBvcnQ6IERyb3BwaW5nIGV2aWwgb2Zmc2V0PTAgdGlueWdyYW0uXG4iKTsKKwkJKmhvdGRyb3AgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcG9ydHNfbWF0Y2gobXVsdGlpbmZvLT5wb3J0cywKKwkJCSAgIG11bHRpaW5mby0+ZmxhZ3MsIG11bHRpaW5mby0+Y291bnQsCisJCQkgICBudG9ocyhwcHRyWzBdKSwgbnRvaHMocHB0clsxXSkpOworfQorCitzdGF0aWMgaW50CittYXRjaF92MShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKKwkgaW50IG9mZnNldCwKKwkgdW5zaWduZWQgaW50IHByb3RvZmYsCisJIGludCAqaG90ZHJvcCkKK3sKKwl1MTYgX3BvcnRzWzJdLCAqcHB0cjsKKwljb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptdWx0aWluZm8gPSBtYXRjaGluZm87CisKKwlpZiAob2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLCBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKKwlpZiAocHB0ciA9PSBOVUxMKSB7CisJCS8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCisJCSAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KKwkJICovCisJCWR1cHJpbnRmKCJ4dF9tdWx0aXBvcnQ6IERyb3BwaW5nIGV2aWwgb2Zmc2V0PTAgdGlueWdyYW0uXG4iKTsKKwkJKmhvdGRyb3AgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcG9ydHNfbWF0Y2hfdjEobXVsdGlpbmZvLCBudG9ocyhwcHRyWzBdKSwgbnRvaHMocHB0clsxXSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorY2hlY2sodV9pbnQxNl90IHByb3RvLAorICAgICAgdV9pbnQ4X3QgaXBfaW52ZmxhZ3MsCisgICAgICB1X2ludDhfdCBtYXRjaF9mbGFncywKKyAgICAgIHVfaW50OF90IGNvdW50KQoreworCS8qIE11c3Qgc3BlY2lmeSBwcm90byA9PSBUQ1AvVURQLCBubyB1bmtub3duIGZsYWdzIG9yIGJhZCBjb3VudCAqLworCXJldHVybiAocHJvdG8gPT0gSVBQUk9UT19UQ1AgfHwgcHJvdG8gPT0gSVBQUk9UT19VRFApCisJCSYmICEoaXBfaW52ZmxhZ3MgJiBYVF9JTlZfUFJPVE8pCisJCSYmIChtYXRjaF9mbGFncyA9PSBYVF9NVUxUSVBPUlRfU09VUkNFCisJCSAgICB8fCBtYXRjaF9mbGFncyA9PSBYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KKwkJICAgIHx8IG1hdGNoX2ZsYWdzID09IFhUX01VTFRJUE9SVF9FSVRIRVIpCisJCSYmIGNvdW50IDw9IFhUX01VTFRJX1BPUlRTOworfQorCisvKiBDYWxsZWQgd2hlbiB1c2VyIHRyaWVzIHRvIGluc2VydCBhbiBlbnRyeSBvZiB0aGlzIHR5cGUuICovCitzdGF0aWMgaW50CitjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKKwkgICBjb25zdCB2b2lkICppbmZvLAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJICAgdm9pZCAqbWF0Y2hpbmZvLAorCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCisJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGluZm87CisJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydCAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOworCisJcmV0dXJuIGNoZWNrKGlwLT5wcm90bywgaXAtPmludmZsYWdzLCBtdWx0aWluZm8tPmZsYWdzLAorCQkgICAgIG11bHRpaW5mby0+Y291bnQpOworfQorCitzdGF0aWMgaW50CitjaGVja2VudHJ5X3YxKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKKwkgICAgICBjb25zdCB2b2lkICppbmZvLAorCSAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJICAgICAgdm9pZCAqbWF0Y2hpbmZvLAorCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCisJICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGluZm87CisJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOworCisJcmV0dXJuIGNoZWNrKGlwLT5wcm90bywgaXAtPmludmZsYWdzLCBtdWx0aWluZm8tPmZsYWdzLAorCQkgICAgIG11bHRpaW5mby0+Y291bnQpOworfQorCitzdGF0aWMgaW50CitjaGVja2VudHJ5Nihjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJICAgIGNvbnN0IHZvaWQgKmluZm8sCisJICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJICAgIHZvaWQgKm1hdGNoaW5mbywKKwkgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKKwkgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9pcDYgKmlwID0gaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87CisKKwlyZXR1cm4gY2hlY2soaXAtPnByb3RvLCBpcC0+aW52ZmxhZ3MsIG11bHRpaW5mby0+ZmxhZ3MsCisJCSAgICAgbXVsdGlpbmZvLT5jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrZW50cnk2X3YxKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKKwkgICAgICAgY29uc3Qgdm9pZCAqaW5mbywKKwkgICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKwkgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAorCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQoreworCWNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXAgPSBpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm11bHRpaW5mbyA9IG1hdGNoaW5mbzsKKworCXJldHVybiBjaGVjayhpcC0+cHJvdG8sIGlwLT5pbnZmbGFncywgbXVsdGlpbmZvLT5mbGFncywKKwkJICAgICBtdWx0aWluZm8tPmNvdW50KTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtdWx0aXBvcnRfbWF0Y2ggPSB7CisJLm5hbWUJCT0gIm11bHRpcG9ydCIsCisJLnJldmlzaW9uCT0gMCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9tdWx0aXBvcnQpLAorCS5tYXRjaAkJPSAmbWF0Y2gsCisJLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtdWx0aXBvcnRfbWF0Y2hfdjEgPSB7CisJLm5hbWUJCT0gIm11bHRpcG9ydCIsCisJLnJldmlzaW9uCT0gMSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEpLAorCS5tYXRjaAkJPSAmbWF0Y2hfdjEsCisJLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeV92MSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtdWx0aXBvcnQ2X21hdGNoID0geworCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAorCS5yZXZpc2lvbgk9IDAsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbXVsdGlwb3J0KSwKKwkubWF0Y2gJCT0gJm1hdGNoLAorCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnk2LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtdWx0aXBvcnQ2X21hdGNoX3YxID0geworCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAorCS5yZXZpc2lvbgk9IDEsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxKSwKKwkubWF0Y2gJCT0gJm1hdGNoX3YxLAorCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnk2X3YxLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfbXVsdGlwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0X21hdGNoX3YxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ19tdWx0aV92MDsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnQ2X21hdGNoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ19tdWx0aV92MTsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnQ2X21hdGNoX3YxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ19tdWx0aTZfdjA7CisKKwlyZXR1cm4gcmV0OworCitvdXRfdW5yZWdfbXVsdGk2X3YwOgorCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydDZfbWF0Y2gpOworb3V0X3VucmVnX211bHRpX3YxOgorCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaF92MSk7CitvdXRfdW5yZWdfbXVsdGlfdjA6CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0X21hdGNoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfbXVsdGlwb3J0X2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZtdWx0aXBvcnRfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm11bHRpcG9ydF9tYXRjaF92MSk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0Nl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbXVsdGlwb3J0Nl9tYXRjaF92MSk7Cit9CisKK21vZHVsZV9pbml0KHh0X211bHRpcG9ydF9pbml0KTsKK21vZHVsZV9leGl0KHh0X211bHRpcG9ydF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3BvbGljeS5jCmluZGV4IDEwOTljYjAuLmEzYWE2MmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9wb2xpY3kuYwpAQCAtNzEsNyArNzEsNyBAQAogCQkJcmV0dXJuIDA7CiAJCWUgPSAmaW5mby0+cG9sW3Bvc107CiAKLQkJaWYgKG1hdGNoX3hmcm1fc3RhdGUoc3AtPnhbaV0ueHZlYywgZSwgZmFtaWx5KSkgeworCQlpZiAobWF0Y2hfeGZybV9zdGF0ZShzcC0+eHZlY1tpXSwgZSwgZmFtaWx5KSkgewogCQkJaWYgKCFzdHJpY3QpCiAJCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSBpZiAoc3RyaWN0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDJhMjMzZmYuLjM4NjJlNzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTU2LDEyICs1NiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3NjbS5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAKLSNkZWZpbmUgTnByaW50ayhhLi4uKQogI2RlZmluZSBOTEdSUFNaKHgpCShBTElHTih4LCBzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KSAvIDgpCiAKIHN0cnVjdCBuZXRsaW5rX3NvY2sgewpAQCAtMTE1Nyw2ICsxMTU3LDcgQEAKIAlORVRMSU5LX0NCKHNrYikuZHN0X3BpZCA9IGRzdF9waWQ7CiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IGRzdF9ncm91cDsKIAlORVRMSU5LX0NCKHNrYikubG9naW51aWQgPSBhdWRpdF9nZXRfbG9naW51aWQoY3VycmVudC0+YXVkaXRfY29udGV4dCk7CisJc2VsaW51eF9nZXRfdGFza19zaWQoY3VycmVudCwgJihORVRMSU5LX0NCKHNrYikuc2lkKSk7CiAJbWVtY3B5KE5FVExJTktfQ1JFRFMoc2tiKSwgJnNpb2NiLT5zY20tPmNyZWRzLCBzaXplb2Yoc3RydWN0IHVjcmVkKSk7CiAKIAkvKiBXaGF0IGNhbiBJIGRvPyBOZXRsaW5rIGlzIGFzeW5jaHJvbm91cywgc28gdGhhdApkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKaW5kZXggZDQ0OTgxZi4uMzY2OWNiOSAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC00MjUsMTEgKzQyNSwxNiBAQAogCiAJbnJfaW5pdF90aW1lcnMoc2spOwogCi0JbnItPnQxICAgICA9IHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X3RpbWVvdXQ7Ci0JbnItPnQyICAgICA9IHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X2Fja25vd2xlZGdlX2RlbGF5OwotCW5yLT5uMiAgICAgPSBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9tYXhpbXVtX3RyaWVzOwotCW5yLT50NCAgICAgPSBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9idXN5X2RlbGF5OwotCW5yLT5pZGxlICAgPSBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9ub19hY3Rpdml0eV90aW1lb3V0OworCW5yLT50MSAgICAgPQorCQltc2Vjc190b19qaWZmaWVzKHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X3RpbWVvdXQpOworCW5yLT50MiAgICAgPQorCQltc2Vjc190b19qaWZmaWVzKHN5c2N0bF9uZXRyb21fdHJhbnNwb3J0X2Fja25vd2xlZGdlX2RlbGF5KTsKKwluci0+bjIgICAgID0KKwkJbXNlY3NfdG9famlmZmllcyhzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9tYXhpbXVtX3RyaWVzKTsKKwluci0+dDQgICAgID0KKwkJbXNlY3NfdG9famlmZmllcyhzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9idXN5X2RlbGF5KTsKKwluci0+aWRsZSAgID0KKwkJbXNlY3NfdG9famlmZmllcyhzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9ub19hY3Rpdml0eV90aW1lb3V0KTsKIAluci0+d2luZG93ID0gc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfcmVxdWVzdGVkX3dpbmRvd19zaXplOwogCiAJbnItPmJwcWV4dCA9IDE7CkBAIC0xMzY1LDggKzEzNzAsNiBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfbnI7CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkc0S0xYIE5FVC9ST00gZm9yIExpbnV4LiBWZXJzaW9uIDAuNyBmb3IgQVgyNS4wMzcgTGludXggMi40XG4iOwotCiBzdGF0aWMgaW50IF9faW5pdCBucl9wcm90b19pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0xNDE0LDcgKzE0MTcsNiBAQAogCX0KIAkJCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZucl9kZXZfbm90aWZpZXIpOwotCXByaW50ayhiYW5uZXIpOwogCiAJYXgyNV9wcm90b2NvbF9yZWdpc3RlcihBWDI1X1BfTkVUUk9NLCBucl9yb3V0ZV9mcmFtZSk7CiAJYXgyNV9saW5rZmFpbF9yZWdpc3Rlcihucl9saW5rX2ZhaWxlZCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL25yX2Rldi5jIGIvbmV0L25ldHJvbS9ucl9kZXYuYwppbmRleCA1MDlhZmRkLi42MjFlNTU4IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL25yX2Rldi5jCisrKyBiL25ldC9uZXRyb20vbnJfZGV2LmMKQEAgLTE4NSw3ICsxODUsNiBAQAogCiB2b2lkIG5yX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JU0VUX01PRFVMRV9PV05FUihkZXYpOwogCWRldi0+bXR1CQk9IE5SX01BWF9QQUNLRVRfU0laRTsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG5yX3htaXQ7CiAJZGV2LT5vcGVuCQk9IG5yX29wZW47CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9hZl9yb3NlLmMgYi9uZXQvcm9zZS9hZl9yb3NlLmMKaW5kZXggZWE2NTM5Ni4uNTU1NjRlZiAxMDA2NDQKLS0tIGEvbmV0L3Jvc2UvYWZfcm9zZS5jCisrKyBiL25ldC9yb3NlL2FmX3Jvc2UuYwpAQCAtNTE4LDExICs1MTgsMTEgQEAKIAlpbml0X3RpbWVyKCZyb3NlLT50aW1lcik7CiAJaW5pdF90aW1lcigmcm9zZS0+aWRsZXRpbWVyKTsKIAotCXJvc2UtPnQxICAgPSBzeXNjdGxfcm9zZV9jYWxsX3JlcXVlc3RfdGltZW91dDsKLQlyb3NlLT50MiAgID0gc3lzY3RsX3Jvc2VfcmVzZXRfcmVxdWVzdF90aW1lb3V0OwotCXJvc2UtPnQzICAgPSBzeXNjdGxfcm9zZV9jbGVhcl9yZXF1ZXN0X3RpbWVvdXQ7Ci0Jcm9zZS0+aGIgICA9IHN5c2N0bF9yb3NlX2Fja19ob2xkX2JhY2tfdGltZW91dDsKLQlyb3NlLT5pZGxlID0gc3lzY3RsX3Jvc2Vfbm9fYWN0aXZpdHlfdGltZW91dDsKKwlyb3NlLT50MSAgID0gbXNlY3NfdG9famlmZmllcyhzeXNjdGxfcm9zZV9jYWxsX3JlcXVlc3RfdGltZW91dCk7CisJcm9zZS0+dDIgICA9IG1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX3Jvc2VfcmVzZXRfcmVxdWVzdF90aW1lb3V0KTsKKwlyb3NlLT50MyAgID0gbXNlY3NfdG9famlmZmllcyhzeXNjdGxfcm9zZV9jbGVhcl9yZXF1ZXN0X3RpbWVvdXQpOworCXJvc2UtPmhiICAgPSBtc2Vjc190b19qaWZmaWVzKHN5c2N0bF9yb3NlX2Fja19ob2xkX2JhY2tfdGltZW91dCk7CisJcm9zZS0+aWRsZSA9IG1zZWNzX3RvX2ppZmZpZXMoc3lzY3RsX3Jvc2Vfbm9fYWN0aXZpdHlfdGltZW91dCk7CiAKIAlyb3NlLT5zdGF0ZSA9IFJPU0VfU1RBVEVfMDsKIApAQCAtMTQ2OSw4ICsxNDY5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2X3Jvc2U7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdID0gS0VSTl9JTkZPICJGNkZCQi9HNEtMWCBST1NFIGZvciBMaW51eC4gVmVyc2lvbiAwLjYyIGZvciBBWDI1LjAzNyBMaW51eCAyLjRcbiI7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHJvc2VfcHJvdG9faW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMTUxOSw3ICsxNTE3LDYgQEAKIAogCXNvY2tfcmVnaXN0ZXIoJnJvc2VfZmFtaWx5X29wcyk7CiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZyb3NlX2Rldl9ub3RpZmllcik7Ci0JcHJpbnRrKGJhbm5lcik7CiAKIAlheDI1X3Byb3RvY29sX3JlZ2lzdGVyKEFYMjVfUF9ST1NFLCByb3NlX3JvdXRlX2ZyYW1lKTsKIAlheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKHJvc2VfbGlua19mYWlsZWQpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9kZXYuYyBiL25ldC9yb3NlL3Jvc2VfZGV2LmMKaW5kZXggZDI5N2FmNy4uMmExYmY4ZSAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9kZXYuYworKysgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCkBAIC0xMzUsNyArMTM1LDYgQEAKIAogdm9pZCByb3NlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JU0VUX01PRFVMRV9PV05FUihkZXYpOwogCWRldi0+bXR1CQk9IFJPU0VfTUFYX1BBQ0tFVF9TSVpFIC0gMjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHJvc2VfeG1pdDsKIAlkZXYtPm9wZW4JCT0gcm9zZV9vcGVuOwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9saW5rLmMgYi9uZXQvcm9zZS9yb3NlX2xpbmsuYwppbmRleCAwOWU5ZTlkLi5iZDg2YTYzIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX2xpbmsuYworKysgYi9uZXQvcm9zZS9yb3NlX2xpbmsuYwpAQCAtNDAsNyArNDAsOCBAQAogCiAJbmVpZ2gtPmZ0aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKW5laWdoOwogCW5laWdoLT5mdGltZXIuZnVuY3Rpb24gPSAmcm9zZV9mdGltZXJfZXhwaXJ5OwotCW5laWdoLT5mdGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgc3lzY3RsX3Jvc2VfbGlua19mYWlsX3RpbWVvdXQ7CisJbmVpZ2gtPmZ0aW1lci5leHBpcmVzICA9CisJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHN5c2N0bF9yb3NlX2xpbmtfZmFpbF90aW1lb3V0KTsKIAogCWFkZF90aW1lcigmbmVpZ2gtPmZ0aW1lcik7CiB9CkBAIC01MSw3ICs1Miw4IEBACiAKIAluZWlnaC0+dDB0aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKW5laWdoOwogCW5laWdoLT50MHRpbWVyLmZ1bmN0aW9uID0gJnJvc2VfdDB0aW1lcl9leHBpcnk7Ci0JbmVpZ2gtPnQwdGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgc3lzY3RsX3Jvc2VfcmVzdGFydF9yZXF1ZXN0X3RpbWVvdXQ7CisJbmVpZ2gtPnQwdGltZXIuZXhwaXJlcyAgPQorCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhzeXNjdGxfcm9zZV9yZXN0YXJ0X3JlcXVlc3RfdGltZW91dCk7CiAKIAlhZGRfdGltZXIoJm5laWdoLT50MHRpbWVyKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYyBiL25ldC9yb3NlL3Jvc2Vfcm91dGUuYwppbmRleCA4NjMxYjY1Li5hMjI1NDJmIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCkBAIC00OCw4ICs0OCw2IEBACiAKIHN0cnVjdCByb3NlX25laWdoICpyb3NlX2xvb3BiYWNrX25laWdoOwogCi1zdGF0aWMgdm9pZCByb3NlX3JlbW92ZV9uZWlnaChzdHJ1Y3Qgcm9zZV9uZWlnaCAqKTsKLQogLyoKICAqCUFkZCBhIG5ldyByb3V0ZSB0byBhIG5vZGUsIGFuZCBpbiB0aGUgcHJvY2VzcyBhZGQgdGhlIG5vZGUgYW5kIHRoZQogICoJbmVpZ2hib3VyIGlmIGl0IGlzIG5ldy4KQEAgLTIzNSwxMSArMjMzLDggQEAKIAogCXNrYl9xdWV1ZV9wdXJnZSgmcm9zZV9uZWlnaC0+cXVldWUpOwogCi0Jc3Bpbl9sb2NrX2JoKCZyb3NlX25laWdoX2xpc3RfbG9jayk7Ci0KIAlpZiAoKHMgPSByb3NlX25laWdoX2xpc3QpID09IHJvc2VfbmVpZ2gpIHsKIAkJcm9zZV9uZWlnaF9saXN0ID0gcm9zZV9uZWlnaC0+bmV4dDsKLQkJc3Bpbl91bmxvY2tfYmgoJnJvc2VfbmVpZ2hfbGlzdF9sb2NrKTsKIAkJa2ZyZWUocm9zZV9uZWlnaC0+ZGlnaXBlYXQpOwogCQlrZnJlZShyb3NlX25laWdoKTsKIAkJcmV0dXJuOwpAQCAtMjQ4LDcgKzI0Myw2IEBACiAJd2hpbGUgKHMgIT0gTlVMTCAmJiBzLT5uZXh0ICE9IE5VTEwpIHsKIAkJaWYgKHMtPm5leHQgPT0gcm9zZV9uZWlnaCkgewogCQkJcy0+bmV4dCA9IHJvc2VfbmVpZ2gtPm5leHQ7Ci0JCQlzcGluX3VubG9ja19iaCgmcm9zZV9uZWlnaF9saXN0X2xvY2spOwogCQkJa2ZyZWUocm9zZV9uZWlnaC0+ZGlnaXBlYXQpOwogCQkJa2ZyZWUocm9zZV9uZWlnaCk7CiAJCQlyZXR1cm47CkBAIC0yNTYsNyArMjUwLDYgQEAKIAogCQlzID0gcy0+bmV4dDsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnJvc2VfbmVpZ2hfbGlzdF9sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaXB0LmMgYi9uZXQvc2NoZWQvYWN0X2lwdC5jCmluZGV4IDYwNTZkMjAuLjM3NjQwYzYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaXB0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwpAQCAtNjksNiArNjksMTEgQEAKIAlEUFJJTlRLKCJpcHRfaW5pdF90YXJnZXQ6IGZvdW5kICVzXG4iLCB0YXJnZXQtPm5hbWUpOwogCXQtPnUua2VybmVsLnRhcmdldCA9IHRhcmdldDsKIAorCXJldCA9IHh0X2NoZWNrX3RhcmdldCh0YXJnZXQsIEFGX0lORVQsIHQtPnUudGFyZ2V0X3NpemUgLSBzaXplb2YoKnQpLAorCQkJICAgICAgdGFibGUsIGhvb2ssIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5CiAJICAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkodGFibGUsIE5VTEwsCiAJCSAgICAJCQkgICAgICAgdC0+dS5rZXJuZWwudGFyZ2V0LCB0LT5kYXRhLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggZmE4NzdmOC4uMjRjMzQ4ZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYworKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC02Niw3ICs2Niw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKLXN0YXRpYyBpbnQgdGNmX2dlbmVyaWNfd2Fsa2VyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKK3N0YXRpYyBpbnQgdGNmX2FjdF9wb2xpY2Vfd2Fsa2VyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBzdHJ1Y3QgdGNfYWN0aW9uICphKQogewogCXN0cnVjdCB0Y2ZfcG9saWNlICpwOwpAQCAtMTEzLDcgKzExMyw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci10Y2ZfaGFzaF9zZWFyY2goc3RydWN0IHRjX2FjdGlvbiAqYSwgdTMyIGluZGV4KQordGNmX2FjdF9wb2xpY2VfaGFzaF9zZWFyY2goc3RydWN0IHRjX2FjdGlvbiAqYSwgdTMyIGluZGV4KQogewogCXN0cnVjdCB0Y2ZfcG9saWNlICpwID0gdGNmX3BvbGljZV9sb29rdXAoaW5kZXgpOwogCkBAIC0zODcsOSArMzg3LDkgQEAKIAkuYWN0CQk9CXRjZl9hY3RfcG9saWNlLAogCS5kdW1wCQk9CXRjZl9hY3RfcG9saWNlX2R1bXAsCiAJLmNsZWFudXAJPQl0Y2ZfYWN0X3BvbGljZV9jbGVhbnVwLAotCS5sb29rdXAJCT0JdGNmX2hhc2hfc2VhcmNoLAorCS5sb29rdXAJCT0JdGNmX2FjdF9wb2xpY2VfaGFzaF9zZWFyY2gsCiAJLmluaXQJCT0JdGNmX2FjdF9wb2xpY2VfbG9jYXRlLAotCS53YWxrCQk9CXRjZl9nZW5lcmljX3dhbGtlcgorCS53YWxrCQk9CXRjZl9hY3RfcG9saWNlX3dhbGtlcgogfTsKIAogc3RhdGljIGludCBfX2luaXQKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggMzFlYjgzNy4uMTM4ZWE5MiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTE5Myw4ICsxOTMsMTAgQEAKIAkJICAgIG5ldGlmX3J1bm5pbmcoZGV2KSAmJgogCQkgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCi0JCQkgICAgKGppZmZpZXMgLSBkZXYtPnRyYW5zX3N0YXJ0KSA+IGRldi0+d2F0Y2hkb2dfdGltZW8pIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJORVRERVYgV0FUQ0hET0c6ICVzOiB0cmFuc21pdCB0aW1lZCBvdXRcbiIsIGRldi0+bmFtZSk7CisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBkZXYtPnRyYW5zX3N0YXJ0ICsgZGV2LT53YXRjaGRvZ190aW1lbykpIHsKKworCQkJCXByaW50ayhLRVJOX0lORk8gIk5FVERFViBXQVRDSERPRzogJXM6IHRyYW5zbWl0IHRpbWVkIG91dFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJCQlkZXYtPnR4X3RpbWVvdXQoZGV2KTsKIAkJCX0KIAkJCWlmICghbW9kX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgZGV2LT53YXRjaGRvZ190aW1lbykpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDkxMTMyZjYuLmYxYzdiZDIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC05NzQsMTAgKzk3NCwxMCBAQAogCWRvIHsKIAkJbGV2ZWwgPSAwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbC0+Y2hpbGRyZW4sIHNpYmxpbmdzKSB7Ci0JCQlpZiAocC0+bGV2ZWwgPiBsZXZlbCkKLQkJCQlsZXZlbCA9IHAtPmxldmVsOworCQkJaWYgKHAtPmxldmVsID49IGxldmVsKQorCQkJCWxldmVsID0gcC0+bGV2ZWwgKyAxOwogCQl9Ci0JCWNsLT5sZXZlbCA9IGxldmVsICsgMTsKKwkJY2wtPmxldmVsID0gbGV2ZWw7CiAJfSB3aGlsZSAoKGNsID0gY2wtPmNsX3BhcmVudCkgIT0gTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwppbmRleCA3MjI4ZDMwLi41YTRhNGQwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAlpZiAoY291bnQgPT0gMCkgewogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CisJCXJldHVybiBORVRfWE1JVF9CWVBBU1M7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IGQxMTdlYmMuLjE2NjJmOWMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtNzMsNiArNzMsOCBAQAogCQkJCQljb25zdCB1bmlvbiBzY3RwX2FkZHIgKnBlZXIsCiAJCQkJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKnB0KTsKIAorc3RhdGljIHZvaWQgc2N0cF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCiAKIC8qIENhbGN1bGF0ZSB0aGUgU0NUUCBjaGVja3N1bSBvZiBhbiBTQ1RQIHBhY2tldC4gICovCiBzdGF0aWMgaW5saW5lIGludCBzY3RwX3Jjdl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTg2LDcgKzE4OCw2IEBACiAJICovCiAJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYgJiYgKHNrLT5za19ib3VuZF9kZXZfaWYgIT0gYWYtPnNrYl9paWYoc2tiKSkpCiAJewotCQlzb2NrX3B1dChzayk7CiAJCWlmIChhc29jKSB7CiAJCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKIAkJCWFzb2MgPSBOVUxMOwpAQCAtMTk3LDcgKzE5OCw2IEBACiAJCXNrID0gc2N0cF9nZXRfY3RsX3NvY2soKTsKIAkJZXAgPSBzY3RwX3NrKHNrKS0+ZXA7CiAJCXNjdHBfZW5kcG9pbnRfaG9sZChlcCk7Ci0JCXNvY2tfaG9sZChzayk7CiAJCXJjdnIgPSAmZXAtPmJhc2U7CiAJfQogCkBAIC0yNTMsMjUgKzI1MywxOCBAQAogCSAqLwogCXNjdHBfYmhfbG9ja19zb2NrKHNrKTsKIAotCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGFzc29jaWF0aW9uIGNvdWxkIGhhdmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQKLQkgKiBzb2NrZXQgaWYgaXQgaXMgcGVlbGVkIG9mZi4gSWYgc28sIHVwZGF0ZSB0aGUgc2suCi0JICovIAotCWlmIChzayAhPSByY3ZyLT5zaykgewotCQlzY3RwX2JoX2xvY2tfc29jayhyY3ZyLT5zayk7Ci0JCXNjdHBfYmhfdW5sb2NrX3NvY2soc2spOwotCQlzayA9IHJjdnItPnNrOwotCX0KLQogCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spKQotCQlza19hZGRfYmFja2xvZyhzaywgc2tiKTsKKwkJc2N0cF9hZGRfYmFja2xvZyhzaywgc2tiKTsKIAllbHNlCi0JCXNjdHBfYmFja2xvZ19yY3Yoc2ssIHNrYik7CisJCXNjdHBfaW5xX3B1c2goJmNodW5rLT5yY3ZyLT5pbnF1ZXVlLCBjaHVuayk7CiAKLQkvKiBSZWxlYXNlIHRoZSBzb2NrIGFuZCB0aGUgc29jayByZWYgd2UgdG9vayBpbiB0aGUgbG9va3VwIGNhbGxzLgotCSAqIFRoZSBhc29jL2VwIHJlZiB3aWxsIGJlIHJlbGVhc2VkIGluIHNjdHBfYmFja2xvZ19yY3YuCi0JICovCiAJc2N0cF9iaF91bmxvY2tfc29jayhzayk7Ci0Jc29ja19wdXQoc2spOworCisJLyogUmVsZWFzZSB0aGUgYXNvYy9lcCByZWYgd2UgdG9vayBpbiB0aGUgbG9va3VwIGNhbGxzLiAqLworCWlmIChhc29jKQorCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKKwllbHNlCisJCXNjdHBfZW5kcG9pbnRfcHV0KGVwKTsKIAogCXJldHVybiAwOwogCkBAIC0yODAsOCArMjczLDcgQEAKIAlyZXR1cm4gMDsKIAogZGlzY2FyZF9yZWxlYXNlOgotCS8qIFJlbGVhc2UgYW55IHN0cnVjdHVyZXMgd2UgbWF5IGJlIGhvbGRpbmcuICovCi0Jc29ja19wdXQoc2spOworCS8qIFJlbGVhc2UgdGhlIGFzb2MvZXAgcmVmIHdlIHRvb2sgaW4gdGhlIGxvb2t1cCBjYWxscy4gKi8KIAlpZiAoYXNvYykKIAkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiAJZWxzZQpAQCAtMjkwLDU2ICsyODIsODcgQEAKIAlnb3RvIGRpc2NhcmRfaXQ7CiB9CiAKLS8qIEhhbmRsZSBzZWNvbmQgaGFsZiBvZiBpbmJvdW5kIHNrYiBwcm9jZXNzaW5nLiAgSWYgdGhlIHNvY2sgd2FzIGJ1c3ksCi0gKiB3ZSBtYXkgaGF2ZSBuZWVkIHRvIGRlbGF5IHByb2Nlc3NpbmcgdW50aWwgbGF0ZXIgd2hlbiB0aGUgc29jayBpcwotICogcmVsZWFzZWQgKG9uIHRoZSBiYWNrbG9nKS4gICBJZiBub3QgYnVzeSwgd2UgY2FsbCB0aGlzIHJvdXRpbmUKLSAqIGRpcmVjdGx5IGZyb20gdGhlIGJvdHRvbSBoYWxmLgorLyogUHJvY2VzcyB0aGUgYmFja2xvZyBxdWV1ZSBvZiB0aGUgc29ja2V0LiAgRXZlcnkgc2tiIG9uCisgKiB0aGUgYmFja2xvZyBob2xkcyBhIHJlZiBvbiBhbiBhc3NvY2lhdGlvbiBvciBlbmRwb2ludC4KKyAqIFdlIGhvbGQgdGhpcyByZWYgdGhyb3VnaG91dCB0aGUgc3RhdGUgbWFjaGluZSB0byBtYWtlCisgKiBzdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSB3ZSBuZWVkIGlzIHN0aWxsIGFyb3VuZC4KICAqLwogaW50IHNjdHBfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IFNDVFBfSU5QVVRfQ0Ioc2tiKS0+Y2h1bms7Ci0gCXN0cnVjdCBzY3RwX2lucSAqaW5xdWV1ZSA9IE5VTEw7CisgCXN0cnVjdCBzY3RwX2lucSAqaW5xdWV1ZSA9ICZjaHVuay0+cmN2ci0+aW5xdWV1ZTsKICAJc3RydWN0IHNjdHBfZXBfY29tbW9uICpyY3ZyID0gTlVMTDsKKwlpbnQgYmFja2xvZ2VkID0gMDsKIAogIAlyY3ZyID0gY2h1bmstPnJjdnI7CiAKLQlCVUdfVFJBUChyY3ZyLT5zayA9PSBzayk7CisJLyogSWYgdGhlIHJjdnIgaXMgZGVhZCB0aGVuIHRoZSBhc3NvY2lhdGlvbiBvciBlbmRwb2ludAorCSAqIGhhcyBiZWVuIGRlbGV0ZWQgYW5kIHdlIGNhbiBzYWZlbHkgZHJvcCB0aGUgY2h1bmsKKwkgKiBhbmQgcmVmcyB0aGF0IHdlIGFyZSBob2xkaW5nLgorCSAqLworCWlmIChyY3ZyLT5kZWFkKSB7CisJCXNjdHBfY2h1bmtfZnJlZShjaHVuayk7CisJCWdvdG8gZG9uZTsKKwl9CiAKLSAJaWYgKHJjdnItPmRlYWQpIHsKLSAJCXNjdHBfY2h1bmtfZnJlZShjaHVuayk7Ci0gCX0gZWxzZSB7Ci0gCQlpbnF1ZXVlID0gJmNodW5rLT5yY3ZyLT5pbnF1ZXVlOwotIAkJc2N0cF9pbnFfcHVzaChpbnF1ZXVlLCBjaHVuayk7Ci0gCX0KKwlpZiAodW5saWtlbHkocmN2ci0+c2sgIT0gc2spKSB7CisJCS8qIEluIHRoaXMgY2FzZSwgdGhlIGFzc29jaWF0aW9uIG1vdmVkIGZyb20gb25lIHNvY2tldCB0bworCQkgKiBhbm90aGVyLiAgV2UgYXJlIGN1cnJlbnRseSBzaXR0aW5nIG9uIHRoZSBiYWNrbG9nIG9mIHRoZQorCQkgKiBvbGQgc29ja2V0LCBzbyB3ZSBuZWVkIHRvIG1vdmUuCisJCSAqIEhvd2V2ZXIsIHNpbmNlIHdlIGFyZSBoZXJlIGluIHRoZSBwcm9jZXNzIGNvbnRleHQgd2UKKwkJICogbmVlZCB0byB0YWtlIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgb3duCisJCSAqIHRoZSBuZXcgc29ja2V0IHdoZW4gd2UgcHJvY2VzcyB0aGUgcGFja2V0LgorCQkgKiBJZiB0aGUgbmV3IHNvY2tldCBpcyB1c2VyLW93bmVkLCBxdWV1ZSB0aGUgY2h1bmsgdG8gdGhlCisJCSAqIGJhY2tsb2cgb2YgdGhlIG5ldyBzb2NrZXQgd2l0aG91dCBkcm9wcGluZyBhbnkgcmVmcy4KKwkJICogT3RoZXJ3aXNlLCB3ZSBjYW4gc2FmZWx5IHB1c2ggdGhlIGNodW5rIG9uIHRoZSBpbnF1ZXVlLgorCQkgKi8KIAotCS8qIFJlbGVhc2UgdGhlIGFzb2MvZXAgcmVmIHdlIHRvb2sgaW4gdGhlIGxvb2t1cCBjYWxscyBpbiBzY3RwX3Jjdi4gKi8gCi0gCWlmIChTQ1RQX0VQX1RZUEVfQVNTT0NJQVRJT04gPT0gcmN2ci0+dHlwZSkKLSAJCXNjdHBfYXNzb2NpYXRpb25fcHV0KHNjdHBfYXNzb2MocmN2cikpOwotIAllbHNlCi0gCQlzY3RwX2VuZHBvaW50X3B1dChzY3RwX2VwKHJjdnIpKTsKLSAgCisJCXNrID0gcmN2ci0+c2s7CisJCXNjdHBfYmhfbG9ja19zb2NrKHNrKTsKKworCQlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkgeworCQkJc2tfYWRkX2JhY2tsb2coc2ssIHNrYik7CisJCQliYWNrbG9nZWQgPSAxOworCQl9IGVsc2UKKwkJCXNjdHBfaW5xX3B1c2goaW5xdWV1ZSwgY2h1bmspOworCisJCXNjdHBfYmhfdW5sb2NrX3NvY2soc2spOworCisJCS8qIElmIHRoZSBjaHVuayB3YXMgYmFja2xvZ2VkIGFnYWluLCBkb24ndCBkcm9wIHJlZnMgKi8KKwkJaWYgKGJhY2tsb2dlZCkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXNjdHBfaW5xX3B1c2goaW5xdWV1ZSwgY2h1bmspOworCX0KKworZG9uZToKKwkvKiBSZWxlYXNlIHRoZSByZWZzIHdlIHRvb2sgaW4gc2N0cF9hZGRfYmFja2xvZyAqLworCWlmIChTQ1RQX0VQX1RZUEVfQVNTT0NJQVRJT04gPT0gcmN2ci0+dHlwZSkKKwkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoc2N0cF9hc3NvYyhyY3ZyKSk7CisJZWxzZSBpZiAoU0NUUF9FUF9UWVBFX1NPQ0tFVCA9PSByY3ZyLT50eXBlKQorCQlzY3RwX2VuZHBvaW50X3B1dChzY3RwX2VwKHJjdnIpKTsKKwllbHNlCisJCUJVRygpOworCiAgICAgICAgIHJldHVybiAwOwogfQogCi12b2lkIHNjdHBfYmFja2xvZ19taWdyYXRlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYywgCi0JCQkgIHN0cnVjdCBzb2NrICpvbGRzaywgc3RydWN0IHNvY2sgKm5ld3NrKQorc3RhdGljIHZvaWQgc2N0cF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CisJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gU0NUUF9JTlBVVF9DQihza2IpLT5jaHVuazsKKwlzdHJ1Y3Qgc2N0cF9lcF9jb21tb24gKnJjdnIgPSBjaHVuay0+cmN2cjsKIAotCXNrYiA9IG9sZHNrLT5za19iYWNrbG9nLmhlYWQ7Ci0Jb2xkc2stPnNrX2JhY2tsb2cuaGVhZCA9IG9sZHNrLT5za19iYWNrbG9nLnRhaWwgPSBOVUxMOwotCXdoaWxlIChza2IgIT0gTlVMTCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCA9IHNrYi0+bmV4dDsKKwkvKiBIb2xkIHRoZSBhc3NvYy9lcCB3aGlsZSBoYW5naW5nIG9uIHRoZSBiYWNrbG9nIHF1ZXVlLgorCSAqIFRoaXMgd2F5LCB3ZSBrbm93IHN0cnVjdHVyZXMgd2UgbmVlZCB3aWxsIG5vdCBkaXNhcHBlYXIgZnJvbSB1cworCSAqLworCWlmIChTQ1RQX0VQX1RZUEVfQVNTT0NJQVRJT04gPT0gcmN2ci0+dHlwZSkKKwkJc2N0cF9hc3NvY2lhdGlvbl9ob2xkKHNjdHBfYXNzb2MocmN2cikpOworCWVsc2UgaWYgKFNDVFBfRVBfVFlQRV9TT0NLRVQgPT0gcmN2ci0+dHlwZSkKKwkJc2N0cF9lbmRwb2ludF9ob2xkKHNjdHBfZXAocmN2cikpOworCWVsc2UKKwkJQlVHKCk7CiAKLQkJY2h1bmsgPSBTQ1RQX0lOUFVUX0NCKHNrYiktPmNodW5rOwotCQlza2ItPm5leHQgPSBOVUxMOwotCQlpZiAoJmFzc29jLT5iYXNlID09IGNodW5rLT5yY3ZyKQotCQkJc2tfYWRkX2JhY2tsb2cobmV3c2ssIHNrYik7Ci0JCWVsc2UKLQkJCXNrX2FkZF9iYWNrbG9nKG9sZHNrLCBza2IpOwotCQlza2IgPSBuZXh0OwotCX0KKwlza19hZGRfYmFja2xvZyhzaywgc2tiKTsKIH0KIAogLyogSGFuZGxlIGljbXAgZnJhZyBuZWVkZWQgZXJyb3IuICovCkBAIC00MTIsNyArNDM1LDcgQEAKIAl1bmlvbiBzY3RwX2FkZHIgZGFkZHI7CiAJc3RydWN0IHNjdHBfYWYgKmFmOwogCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSBOVUxMOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKIAogCSphcHAgPSBOVUxMOyAqdHBwID0gTlVMTDsKQEAgLTQ1Myw3ICs0NzYsNiBAQAogCXJldHVybiBzazsKIAogb3V0OgotCXNvY2tfcHV0KHNrKTsKIAlpZiAoYXNvYykKIAkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiAJcmV0dXJuIE5VTEw7CkBAIC00NjMsNyArNDg1LDYgQEAKIHZvaWQgc2N0cF9lcnJfZmluaXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7CiAJc2N0cF9iaF91bmxvY2tfc29jayhzayk7Ci0Jc29ja19wdXQoc2spOwogCWlmIChhc29jKQogCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKIH0KQEAgLTQ5MCw3ICs1MTEsNyBAQAogCWludCB0eXBlID0gc2tiLT5oLmljbXBoLT50eXBlOwogCWludCBjb2RlID0gc2tiLT5oLmljbXBoLT5jb2RlOwogCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IE5VTEw7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAljaGFyICpzYXZlaXAsICpzYXZlc2N0cDsKQEAgLTcxNiw3ICs3MzcsNiBAQAogCiBoaXQ6CiAJc2N0cF9lbmRwb2ludF9ob2xkKGVwKTsKLQlzb2NrX2hvbGQoZXBiLT5zayk7CiAJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOwogCXJldHVybiBlcDsKIH0KQEAgLTgxOCw3ICs4MzgsNiBAQAogaGl0OgogCSpwdCA9IHRyYW5zcG9ydDsKIAlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7Ci0Jc29ja19ob2xkKGVwYi0+c2spOwogCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKIAlyZXR1cm4gYXNvYzsKIH0KQEAgLTg0Niw3ICs4NjUsNiBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCiAJaWYgKChhc29jID0gc2N0cF9sb29rdXBfYXNzb2NpYXRpb24obGFkZHIsIHBhZGRyLCAmdHJhbnNwb3J0KSkpIHsKLQkJc29ja19wdXQoYXNvYy0+YmFzZS5zayk7CiAJCXNjdHBfYXNzb2NpYXRpb25fcHV0KGFzb2MpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnF1ZXVlLmMgYi9uZXQvc2N0cC9pbnF1ZXVlLmMKaW5kZXggMjk3Yjg5NS4uY2YwYzc2NyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5xdWV1ZS5jCisrKyBiL25ldC9zY3RwL2lucXVldWUuYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGNodW5rIGluIHRoZSBwYWNrZXQuICAqLwogCQljaHVuay0+c2luZ2xldG9uID0gMTsKIAkJY2ggPSAoc2N0cF9jaHVua2hkcl90ICopIGNodW5rLT5za2ItPmRhdGE7CisJCWNodW5rLT5kYXRhX2FjY2VwdGVkID0gMDsKIAl9CiAKICAgICAgICAgY2h1bmstPmNodW5rX2hkciA9IGNoOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvYy5jIGIvbmV0L3NjdHAvcHJvYy5jCmluZGV4IGQ0N2E1MmMuLjViM2IwZTAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb2MuYworKysgYi9uZXQvc2N0cC9wcm9jLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlcyA9IDA7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9jcHUoaSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXJlcyArPQogCQkgICAgKigodW5zaWduZWQgbG9uZyAqKSAoKCh2b2lkICopIHBlcl9jcHVfcHRyKG1pYlswXSwgaSkpICsKIAkJCQkJIHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBucikpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDhkMWRjMjQuLmM1YmViMmEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTQ5OCwxMCArNDk4LDYgQEAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSwKIAkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9DTE9TRUQpKTsKIAotCS8qIFNldCBza19lcnIgdG8gRUNPTk5SRVNFVCBvbiBhIDEtMSBzdHlsZSBzb2NrZXQuICovCi0JaWYgKCFzY3RwX3N0eWxlKGFzb2MtPmJhc2Uuc2ssIFVEUCkpCi0JCWFzb2MtPmJhc2Uuc2stPnNrX2VyciA9IEVDT05OUkVTRVQ7IAotCiAJLyogU0VORF9GQUlMRUQgc2VudCBsYXRlciB3aGVuIGNsZWFuaW5nIHVwIHRoZSBhc3NvY2lhdGlvbi4gKi8KIAlhc29jLT5vdXRxdWV1ZS5lcnJvciA9IGVycm9yOwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfREVMRVRFX1RDQiwgU0NUUF9OVUxMKCkpOwpAQCAtODM4LDYgKzgzNCwxNSBAQAogCXJldHVybjsKIH0KIAorLyogSGVscGVyIGZ1bmN0aW9uIHRvIHNldCBza19lcnIgb24gYSAxLTEgc3R5bGUgc29ja2V0LiAqLworc3RhdGljIHZvaWQgc2N0cF9jbWRfc2V0X3NrX2VycihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgaW50IGVycm9yKQoreworCXN0cnVjdCBzb2NrICpzayA9IGFzb2MtPmJhc2Uuc2s7CisKKwlpZiAoIXNjdHBfc3R5bGUoc2ssIFVEUCkpCisJCXNrLT5za19lcnIgPSBlcnJvcjsKK30KKwogLyogVGhlc2UgdGhyZWUgbWFjcm9zIGFsbG93IHVzIHRvIHB1bGwgdGhlIGRlYnVnZ2luZyBjb2RlIG91dCBvZiB0aGUKICAqIG1haW4gZmxvdyBvZiBzY3RwX2RvX3NtKCkgdG8ga2VlcCBhdHRlbnRpb24gZm9jdXNlZCBvbiB0aGUgcmVhbAogICogZnVuY3Rpb25hbGl0eSB0aGVyZS4KQEAgLTE0NTgsNiArMTQ2Myw5IEBACiAJCQlsb2NhbF9jb3JrID0gMDsKIAkJCWFzb2MtPnBlZXIucmV0cmFuX3BhdGggPSB0OwogCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DTURfU0VUX1NLX0VSUjoKKwkJCXNjdHBfY21kX3NldF9za19lcnIoYXNvYywgY21kLT5vYmouZXJyb3IpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbXBvc3NpYmxlIGNvbW1hbmQ6ICV1LCAlcFxuIiwKIAkJCSAgICAgICBjbWQtPnZlcmIsIGNtZC0+b2JqLnB0cik7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDJiOWE4MzIuLjhiYzI3OTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC05Myw3ICs5Myw3IEBACiBzdGF0aWMgc3RydWN0IHNjdHBfc2Fja2hkciAqc2N0cF9zbV9wdWxsX3NhY2soc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKTsKIAogc3RhdGljIHNjdHBfZGlzcG9zaXRpb25fdCBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KHNjdHBfY21kX3NlcV90ICpjb21tYW5kcywKLQkJCQkJICAgX191MTYgZXJyb3IsCisJCQkJCSAgIF9fdTE2IGVycm9yLCBpbnQgc2tfZXJyLAogCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogCkBAIC00NDgsNyArNDQ4LDcgQEAKIAlfX3UzMiBpbml0X3RhZzsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyX2NodW5rOwogCXN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0OwotCXNjdHBfZGlzcG9zaXRpb25fdCByZXQ7CisJX191MTYgZXJyb3I7CiAKIAlpZiAoIXNjdHBfdnRhZ192ZXJpZnkoY2h1bmssIGFzb2MpKQogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CkBAIC00ODAsMTEgKzQ4MCw5IEBACiAJCQlnb3RvIG5vbWVtOwogCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksocmVwbHkpKTsKLQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsCi0JCQkJU0NUUF9TVEFURShTQ1RQX1NUQVRFX0NMT1NFRCkpOwotCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7Ci0JCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfREVMRVRFX1RDQiwgU0NUUF9OVUxMKCkpOwotCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ERUxFVEVfVENCOworCQlyZXR1cm4gc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChjb21tYW5kcywgU0NUUF9FUlJPUl9JTlZfUEFSQU0sCisJCQkJCSAgICAgIEVDT05OUkVGVVNFRCwgYXNvYywKKwkJCQkJICAgICAgY2h1bmstPnRyYW5zcG9ydCk7CiAJfQogCiAJLyogVmVyaWZ5IHRoZSBJTklUIGNodW5rIGJlZm9yZSBwcm9jZXNzaW5nIGl0LiAqLwpAQCAtNTExLDI3ICs1MDksMTYgQEAKIAkJCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFTkRfUEtULAogCQkJCQkJU0NUUF9QQUNLRVQocGFja2V0KSk7CiAJCQkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfT1VUQ1RSTENIVU5LUyk7Ci0JCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsCi0JCQkJCQlTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfQ0xPU0VEKSk7Ci0JCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ERUxFVEVfVENCLAotCQkJCQkJU0NUUF9OVUxMKCkpOwotCQkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CisJCQkJZXJyb3IgPSBTQ1RQX0VSUk9SX0lOVl9QQVJBTTsKIAkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsCi0JCQkJCQlTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfQ0xPU0VEKSk7Ci0JCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ERUxFVEVfVENCLAotCQkJCQkJU0NUUF9OVUxMKCkpOwotCQkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOworCQkJCWVycm9yID0gU0NUUF9FUlJPUl9OT19SRVNPVVJDRTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXJldCA9IHNjdHBfc2ZfdGFib3J0XzhfNF84KGVwLCBhc29jLCB0eXBlLCBhcmcsCi0JCQkJCQkgICBjb21tYW5kcyk7Ci0JCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSwKLQkJCQkJU0NUUF9TVEFURShTQ1RQX1NUQVRFX0NMT1NFRCkpOwotCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ERUxFVEVfVENCLAotCQkJCQlTQ1RQX05VTEwoKSk7Ci0JCQlyZXR1cm4gcmV0OworCQkJc2N0cF9zZl90YWJvcnRfOF80XzgoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOworCQkJZXJyb3IgPSBTQ1RQX0VSUk9SX0lOVl9QQVJBTTsKIAkJfQorCQlyZXR1cm4gc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChjb21tYW5kcywgZXJyb3IsIEVDT05OUkVGVVNFRCwKKwkJCQkJCWFzb2MsIGNodW5rLT50cmFuc3BvcnQpOwogCX0KIAogCS8qIFRhZyB0aGUgdmFyaWFibGUgbGVuZ3RoIHBhcmFtZXRlcnMuICBOb3RlIHRoYXQgd2UgbmV2ZXIKQEAgLTYzNiw4ICs2MjMsOSBAQAogCSAqLwogICAgICAgICBjaHVuay0+c3ViaC5jb29raWVfaGRyID0KIAkJKHN0cnVjdCBzY3RwX3NpZ25lZF9jb29raWUgKiljaHVuay0+c2tiLT5kYXRhOwotCXNrYl9wdWxsKGNodW5rLT5za2IsCi0JCSBudG9ocyhjaHVuay0+Y2h1bmtfaGRyLT5sZW5ndGgpIC0gc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCkpOworCWlmICghcHNrYl9wdWxsKGNodW5rLT5za2IsIG50b2hzKGNodW5rLT5jaHVua19oZHItPmxlbmd0aCkgLQorCQkJCQkgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCkpKQorCQlnb3RvIG5vbWVtOwogCiAJLyogNS4xIEQpIFVwb24gcmVjZXB0aW9uIG9mIHRoZSBDT09LSUUgRUNITyBjaHVuaywgRW5kcG9pbnQKIAkgKiAiWiIgd2lsbCByZXBseSB3aXRoIGEgQ09PS0lFIEFDSyBjaHVuayBhZnRlciBidWlsZGluZyBhIFRDQgpAQCAtODg1LDYgKzg3Myw4IEBACiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSAoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopIGFyZzsKIAogCWlmIChhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID49IGFzb2MtPm1heF9yZXRyYW5zKSB7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQkvKiBDTURfQVNTT0NfRkFJTEVEIGNhbGxzIENNRF9ERUxFVEVfVENCLiAqLwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CkBAIC05NjUsNyArOTU1LDggQEAKIAkgKi8KIAljaHVuay0+c3ViaC5oYl9oZHIgPSAoc2N0cF9oZWFydGJlYXRoZHJfdCAqKSBjaHVuay0+c2tiLT5kYXRhOwogCXBheWxlbiA9IG50b2hzKGNodW5rLT5jaHVua19oZHItPmxlbmd0aCkgLSBzaXplb2Yoc2N0cF9jaHVua2hkcl90KTsKLQlza2JfcHVsbChjaHVuay0+c2tiLCBwYXlsZW4pOworCWlmICghcHNrYl9wdWxsKGNodW5rLT5za2IsIHBheWxlbikpCisJCWdvdG8gbm9tZW07CiAKIAlyZXBseSA9IHNjdHBfbWFrZV9oZWFydGJlYXRfYWNrKGFzb2MsIGNodW5rLAogCQkJCQljaHVuay0+c3ViaC5oYl9oZHIsIHBheWxlbik7CkBAIC0xMDI4LDYgKzEwMTksMTIgQEAKIAkJCQkJCSAgY29tbWFuZHMpOwogCiAJaGJpbmZvID0gKHNjdHBfc2VuZGVyX2hiX2luZm9fdCAqKSBjaHVuay0+c2tiLT5kYXRhOworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIHBhcmFtZXRlciBpcyB3aGF0IHdlIGV4cGVjdCAqLworCWlmIChudG9ocyhoYmluZm8tPnBhcmFtX2hkci5sZW5ndGgpICE9CisJCQkJICAgIHNpemVvZihzY3RwX3NlbmRlcl9oYl9pbmZvX3QpKSB7CisJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CisJfQorCiAJZnJvbV9hZGRyID0gaGJpbmZvLT5kYWRkcjsKIAlsaW5rID0gc2N0cF9hc3NvY19sb29rdXBfcGFkZHIoYXNvYywgJmZyb21fYWRkcik7CiAKQEAgLTE4NjAsOCArMTg1Nyw5IEBACiAJICogYXJlIGluIGdvb2Qgc2hhcGUuCiAJICovCiAgICAgICAgIGNodW5rLT5zdWJoLmNvb2tpZV9oZHIgPSAoc3RydWN0IHNjdHBfc2lnbmVkX2Nvb2tpZSAqKWNodW5rLT5za2ItPmRhdGE7Ci0Jc2tiX3B1bGwoY2h1bmstPnNrYiwgbnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSAtCi0JCSBzaXplb2Yoc2N0cF9jaHVua2hkcl90KSk7CisJaWYgKCFwc2tiX3B1bGwoY2h1bmstPnNrYiwgbnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSAtCisJCQkJCXNpemVvZihzY3RwX2NodW5raGRyX3QpKSkKKwkJZ290byBub21lbTsKIAogCS8qIEluIFJGQyAyOTYwIDUuMi40IDMsIGlmIGJvdGggVmVyaWZpY2F0aW9uIFRhZ3MgaW4gdGhlIFN0YXRlIENvb2tpZQogCSAqIG9mIGEgZHVwbGljYXRlIENPT0tJRSBFQ0hPIG1hdGNoIHRoZSBWZXJpZmljYXRpb24gVGFncyBvZiB0aGUKQEAgLTIxMjMsNiArMjEyMSw4IEBACiAJaW50IGF0dGVtcHRzID0gYXNvYy0+aW5pdF9lcnJfY291bnRlciArIDE7CiAKIAlpZiAoYXR0ZW1wdHMgPiBhc29jLT5tYXhfaW5pdF9hdHRlbXB0cykgeworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRSkpOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ERUxFVEVfVENCOwpAQCAtMjI1OSw2ICsyMjU5LDcgQEAKIAlpZiAobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfZXJyaGRyKSkKIAkJZXJyb3IgPSAoKHNjdHBfZXJyaGRyX3QgKiljaHVuay0+c2tiLT5kYXRhKS0+Y2F1c2U7CiAKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsIFNDVFBfRVJST1IoRUNPTk5SRVNFVCkpOwogIAkvKiBBU1NPQ19GQUlMRUQgd2lsbCBERUxFVEVfVENCLiAqLwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELCBTQ1RQX1UzMihlcnJvcikpOwogCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKQEAgLTIzMDMsNyArMjMwNCw4IEBACiAJaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2VycmhkcikpCiAJCWVycm9yID0gKChzY3RwX2Vycmhkcl90ICopY2h1bmstPnNrYi0+ZGF0YSktPmNhdXNlOwogCi0JcmV0dXJuIHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoY29tbWFuZHMsIGVycm9yLCBhc29jLCBjaHVuay0+dHJhbnNwb3J0KTsKKwlyZXR1cm4gc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChjb21tYW5kcywgZXJyb3IsIEVDT05OUkVGVVNFRCwgYXNvYywKKwkJCQkgICAgICBjaHVuay0+dHJhbnNwb3J0KTsKIH0KIAogLyoKQEAgLTIzMTUsNyArMjMxNyw4IEBACiAJCQkJCXZvaWQgKmFyZywKIAkJCQkJc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzKQogewotCXJldHVybiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KGNvbW1hbmRzLCBTQ1RQX0VSUk9SX05PX0VSUk9SLCBhc29jLAorCXJldHVybiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KGNvbW1hbmRzLCBTQ1RQX0VSUk9SX05PX0VSUk9SLAorCQkJCSAgICAgIEVOT1BST1RPT1BULCBhc29jLAogCQkJCSAgICAgIChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKilhcmcpOwogfQogCkBAIC0yMzQwLDcgKzIzNDMsNyBAQAogICogVGhpcyBpcyBjb21tb24gY29kZSBjYWxsZWQgYnkgc2V2ZXJhbCBzY3RwX3NmXypfYWJvcnQoKSBmdW5jdGlvbnMgYWJvdmUuCiAgKi8KIHN0YXRpYyBzY3RwX2Rpc3Bvc2l0aW9uX3Qgc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMsCi0JCQkJCSAgIF9fdTE2IGVycm9yLAorCQkJCQkgICBfX3UxNiBlcnJvciwgaW50IHNrX2VyciwKIAkJCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCSAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQogewpAQCAtMjM1MCw2ICsyMzUzLDcgQEAKIAlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAogCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfVDFfSU5JVCkpOworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwgU0NUUF9FUlJPUihza19lcnIpKTsKIAkvKiBDTURfSU5JVF9GQUlMRUQgd2lsbCBERUxFVEVfVENCLiAqLwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfSU5JVF9GQUlMRUQsCiAJCQlTQ1RQX1UzMihlcnJvcikpOwpAQCAtMzMzMyw2ICszMzM3LDggQEAKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAogCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1Q0X1JUTykpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0RJU0NBUkRfUEFDS0VULFNDVFBfTlVMTCgpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJICAgICAgICBTQ1RQX0VSUk9SKEVDT05OQUJPUlRFRCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX0FTQ09ORl9BQ0spKTsKIAkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwpAQCAtMzM1OSw2ICszMzY1LDggQEAKIAkJICogcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiB0aGUgY2h1bmtzIGluIHRoZSBwYWNrZXQuCiAJCSAqLwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0RJU0NBUkRfUEFDS0VULFNDVFBfTlVMTCgpKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJICAgICAgICBTQ1RQX0VSUk9SKEVDT05OQUJPUlRFRCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX0FTQ09ORl9BQ0spKTsKIAkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwpAQCAtMzcxMSw5ICszNzE5LDEzIEBACiAJaWYgKGFzb2MtPnN0YXRlIDw9IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgewogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RJTUVSX1NUT1AsCiAJCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfVDFfSU5JVCkpOworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFQ09OTlJFRlVTRUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTikpOwogCX0gZWxzZSB7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCSAgICAgICAgU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9QUk9UT19WSU9MQVRJT04pKTsKIAkJU0NUUF9ERUNfU1RBVFMoU0NUUF9NSUJfQ1VSUkVTVEFCKTsKQEAgLTQwMzEsNiArNDA0Myw4IEBACiAJICogVENCLiAgVGhpcyBpcyBhIGRlcGFydHVyZSBmcm9tIG91ciB0eXBpY2FsIE5PTUVNIGhhbmRsaW5nLgogCSAqLwogCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkvKiBEZWxldGUgdGhlIGVzdGFibGlzaGVkIGFzc29jaWF0aW9uLiAqLwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAogCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9VU0VSX0FCT1JUKSk7CkBAIC00MTcyLDYgKzQxODYsOCBAQAogCSAqIFRDQi4gIFRoaXMgaXMgYSBkZXBhcnR1cmUgZnJvbSBvdXIgdHlwaWNhbCBOT01FTSBoYW5kbGluZy4KIAkgKi8KIAorCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCVNDVFBfRVJST1IoRUNPTk5SRUZVU0VEKSk7CiAJLyogRGVsZXRlIHRoZSBlc3RhYmxpc2hlZCBhc3NvY2lhdGlvbi4gKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0lOSVRfRkFJTEVELAogCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9VU0VSX0FCT1JUKSk7CkBAIC00NTQwLDYgKzQ1NTYsOCBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gYXJnOwogCiAJaWYgKGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPj0gYXNvYy0+bWF4X3JldHJhbnMpIHsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJCS8qIENNRF9BU1NPQ19GQUlMRUQgY2FsbHMgQ01EX0RFTEVURV9UQ0IuICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAogCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKQEAgLTQ2NTksNiArNDY3Nyw4IEBACiAJCVNDVFBfREVCVUdfUFJJTlRLKCJHaXZpbmcgdXAgb24gSU5JVCwgYXR0ZW1wdHM6ICVkIgogCQkJCSAgIiBtYXhfaW5pdF9hdHRlbXB0czogJWRcbiIsCiAJCQkJICBhdHRlbXB0cywgYXNvYy0+bWF4X2luaXRfYXR0ZW1wdHMpOworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RFTEVURV9UQ0I7CkBAIC00NzA4LDYgKzQ3MjgsOCBAQAogCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksocmVwbCkpOwogCX0gZWxzZSB7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0lOSVRfRkFJTEVELAogCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fREVMRVRFX1RDQjsKQEAgLTQ3MzksNiArNDc2MSw4IEBACiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiVGltZXIgVDIgZXhwaXJlZC5cbiIpOwogCWlmIChhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID49IGFzb2MtPm1heF9yZXRyYW5zKSB7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQkvKiBOb3RlOiAgQ01EX0FTU09DX0ZBSUxFRCBjYWxscyBDTURfREVMRVRFX1RDQi4gKi8KIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwpAQCAtNDgxNCw2ICs0ODM4LDggQEAKIAlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA+PSBhc29jLT5tYXhfcmV0cmFucykgewogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RJTUVSX1NUT1AsCiAJCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfVDRfUlRPKSk7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKKwkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKQEAgLTQ4NjcsNiArNDg5Myw4IEBACiAJCWdvdG8gbm9tZW07CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKHJlcGx5KSk7CisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAorCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKIAkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKIApAQCAtNTE1MSw3ICs1MTc5LDkgQEAKIAlpbnQgdG1wOwogCV9fdTMyIHRzbjsKIAlpbnQgYWNjb3VudF92YWx1ZTsKKwlzdHJ1Y3Qgc2N0cF90c25tYXAgKm1hcCA9IChzdHJ1Y3Qgc2N0cF90c25tYXAgKikmYXNvYy0+cGVlci50c25fbWFwOwogCXN0cnVjdCBzb2NrICpzayA9IGFzb2MtPmJhc2Uuc2s7CisJaW50IHJjdmJ1Zl9vdmVyID0gMDsKIAogCWRhdGFfaGRyID0gY2h1bmstPnN1YmguZGF0YV9oZHIgPSAoc2N0cF9kYXRhaGRyX3QgKiljaHVuay0+c2tiLT5kYXRhOwogCXNrYl9wdWxsKGNodW5rLT5za2IsIHNpemVvZihzY3RwX2RhdGFoZHJfdCkpOwpAQCAtNTE2MiwxMCArNTE5MiwxNiBAQAogCS8qIEFTU0VSVDogIE5vdyBza2ItPmRhdGEgaXMgcmVhbGx5IHRoZSB1c2VyIGRhdGEuICAqLwogCiAJLyoKLQkgKiBpZiB3ZSBhcmUgZXN0YWJsaXNoZWQsIGFuZCB3ZSBoYXZlIHVzZWQgdXAgb3VyIHJlY2VpdmUKLQkgKiBidWZmZXIgbWVtb3J5LCBkcm9wIHRoZSBmcmFtZQorCSAqIElmIHdlIGFyZSBlc3RhYmxpc2hlZCwgYW5kIHdlIGhhdmUgdXNlZCB1cCBvdXIgcmVjZWl2ZSBidWZmZXIKKwkgKiBtZW1vcnksIHRoaW5rIGFib3V0IGRyb3BpbmcgdGhlIGZyYW1lLgorCSAqIE5vdGUgdGhhdCB3ZSBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgaGVyZS4KKwkgKiBJZiB3ZSBhY2NlcHQgb25lIGNodW5rIGZyb20gYW4gc2tidWZmLCB3ZSBoYXZlIHRvIGtlZXAgYWxsIHRoZQorCSAqIG1lbW9yeSBvZiB0aGF0IHNrYnVmZiBhcm91bmQgdW50aWwgdGhlIGNodW5rIGlzIHJlYWQgaW50byB1c2VyCisJICogc3BhY2UuIFRoZXJlZm9yZSwgb25jZSB3ZSBhY2NlcHQgMSBjaHVuayB3ZSBtYXkgYXMgd2VsbCBhY2NlcHQgYWxsCisJICogcmVtYWluaW5nIGNodW5rcyBpbiB0aGUgc2tidWZmLiBUaGUgZGF0YV9hY2NlcHRlZCBmbGFnIGhlbHBzIHVzIGRvCisJICogdGhhdC4KIAkgKi8KLQlpZiAoYXNvYy0+c3RhdGUgPT0gU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkgeworCWlmICgoYXNvYy0+c3RhdGUgPT0gU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkgJiYgKCFjaHVuay0+ZGF0YV9hY2NlcHRlZCkpIHsKIAkJLyoKIAkJICogSWYgdGhlIHJlY2VpdmUgYnVmZmVyIHBvbGljeSBpcyAxLCB0aGVuIGVhY2gKIAkJICogYXNzb2NpYXRpb24gY2FuIGFsbG9jYXRlIHVwIHRvIHNrX3JjdmJ1ZiBieXRlcwpAQCAtNTE3Niw5ICs1MjEyLDI1IEBACiAJCQlhY2NvdW50X3ZhbHVlID0gYXRvbWljX3JlYWQoJmFzb2MtPnJtZW1fYWxsb2MpOwogCQllbHNlCiAJCQlhY2NvdW50X3ZhbHVlID0gYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKTsKKwkJaWYgKGFjY291bnRfdmFsdWUgPiBzay0+c2tfcmN2YnVmKSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MsIGV2ZW4gd2hlbiB3ZSBhcmUKKwkJCSAqIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgc28gd2UgYWx3YXlzIGFsbG93IHRoZQorCQkJICogbmV4dCB0c24gYWZ0ZXIgdGhlIGN0c24gYWNrIHBvaW50IHRvIGJlIGFjY2VwdGVkLgorCQkJICogVGhpcyBsZXRzIHVzIGF2b2lkIGRlYWRsb2NrcyBpbiB3aGljaCB3ZSBoYXZlIHRvCisJCQkgKiBkcm9wIGZyYW1lcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBsZXQgdXMgZHJhaW4gdGhlCisJCQkgKiByZWNlaXZlIHF1ZXVlLgorCQkJICovCisJCQlpZiAoKHNjdHBfdHNubWFwX2dldF9jdHNuKG1hcCkgKyAxKSAhPSB0c24pCisJCQkJcmV0dXJuIFNDVFBfSUVSUk9SX0lHTk9SRV9UU047CiAKLQkJaWYgKGFjY291bnRfdmFsdWUgPiBzay0+c2tfcmN2YnVmKQotCQkJcmV0dXJuIFNDVFBfSUVSUk9SX0lHTk9SRV9UU047CisJCQkvKgorCQkJICogV2UncmUgZ29pbmcgdG8gYWNjZXB0IHRoZSBmcmFtZSBidXQgd2Ugc2hvdWxkIHJlbmVnZQorCQkJICogdG8gbWFrZSBzcGFjZSBmb3IgaXQuIFRoaXMgd2lsbCBzZW5kIHVzIGRvd24gdGhhdAorCQkJICogcGF0aCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLgorCQkJICovCisJCQlyY3ZidWZfb3ZlciA9IDE7CisJCX0KIAl9CiAKIAkvKiBQcm9jZXNzIEVDTiBiYXNlZCBjb25nZXN0aW9uLgpAQCAtNTIyNiw2ICs1Mjc4LDcgQEAKIAlkYXRhbGVuIC09IHNpemVvZihzY3RwX2RhdGFfY2h1bmtfdCk7CiAKIAlkZWxpdmVyID0gU0NUUF9DTURfQ0hVTktfVUxQOworCWNodW5rLT5kYXRhX2FjY2VwdGVkID0gMTsKIAogCS8qIFRoaW5rIGFib3V0IHBhcnRpYWwgZGVsaXZlcnkuICovCiAJaWYgKChkYXRhbGVuID49IGFzb2MtPnJ3bmQpICYmICghYXNvYy0+dWxwcS5wZF9tb2RlKSkgewpAQCAtNTI0Miw3ICs1Mjk1LDggQEAKIAkgKiBsYXJnZSBzcGlsbCBvdmVyLgogCSAqLwogCWlmICghYXNvYy0+cnduZCB8fCBhc29jLT5yd25kX292ZXIgfHwKLQkgICAgKGRhdGFsZW4gPiBhc29jLT5yd25kICsgYXNvYy0+ZnJhZ19wb2ludCkpIHsKKwkgICAgKGRhdGFsZW4gPiBhc29jLT5yd25kICsgYXNvYy0+ZnJhZ19wb2ludCkgfHwKKwkgICAgcmN2YnVmX292ZXIpIHsKIAogCQkvKiBJZiB0aGlzIGlzIHRoZSBuZXh0IFRTTiwgY29uc2lkZXIgcmVuZWdpbmcgdG8gbWFrZQogCQkgKiByb29tLiAgIE5vdGU6IFBsYXlpbmcgbmljZSB3aXRoIGEgY29uZnVzZWQgc2VuZGVyLiAgQQpAQCAtNTI1MCw4ICs1MzA0LDggQEAKIAkJICogc3BhY2UgYW5kIGluIHRoZSBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gZGV0ZWN0IGFuZAogCQkgKiBkbyBtb3JlIGRyYXN0aWMgcmVuZWdpbmcuCiAJCSAqLwotCQlpZiAoc2N0cF90c25tYXBfaGFzX2dhcCgmYXNvYy0+cGVlci50c25fbWFwKSAmJgotCQkgICAgKHNjdHBfdHNubWFwX2dldF9jdHNuKCZhc29jLT5wZWVyLnRzbl9tYXApICsgMSkgPT0gdHNuKSB7CisJCWlmIChzY3RwX3Rzbm1hcF9oYXNfZ2FwKG1hcCkgJiYKKwkJICAgIChzY3RwX3Rzbm1hcF9nZXRfY3RzbihtYXApICsgMSkgPT0gdHNuKSB7CiAJCQlTQ1RQX0RFQlVHX1BSSU5USygiUmVuZWdpbmcgZm9yIHRzbjoldVxuIiwgdHNuKTsKIAkJCWRlbGl2ZXIgPSBTQ1RQX0NNRF9SRU5FR0U7CiAJCX0gZWxzZSB7CkBAIC01MjgwLDYgKzUzMzQsOCBAQAogCQkgKiBwcm9jZXNzaW5nIHRoZSByZXN0IG9mIHRoZSBjaHVua3MgaW4gdGhlIHBhY2tldC4KIAkJICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfRElTQ0FSRF9QQUNLRVQsU0NUUF9OVUxMKCkpOworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCisJCQkJU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCiAJCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19EQVRBKSk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYyBiL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYwppbmRleCA3NWVmMTA0Li44YmNjYTU2IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCkBAIC0zNjYsOSArMzY2LDkgQEAKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKIAl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKIAl7LmZuID0gc2N0cF9zZl9kb19lY25lLCAubmFtZSA9ICJzY3RwX3NmX2RvX2VjbmUifSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXApAQCAtMzgwLDcgKzM4MCw3IEBACiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCiAJey5mbiA9IHNjdHBfc2ZfZG9fZWNuZSwgLm5hbWUgPSAic2N0cF9zZl9kb19lY25lIn0sIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAogfSAvKiBUWVBFX1NDVFBfRUNOX0VDTkUgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfRUNOX0NXUiB7IFwKQEAgLTQwMSw3ICs0MDEsNyBAQAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAogCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKIH0gLyogVFlQRV9TQ1RQX0VDTl9DV1IgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfU0hVVERPV05fQ09NUExFVEUgeyBcCkBAIC02NDcsNyArNjQ3LDcgQEAKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKIAl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJey5mbiA9IHNjdHBfc2ZfZXJyb3JfY2xvc2VkLCAubmFtZSA9ICJzY3RwX3NmX2Vycm9yX2Nsb3NlZCJ9LCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCiAJey5mbiA9IHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQsCQkgICAgICBcCiAJIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQifSwgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBiNmU0Yjg5Li4xNzRkNGQzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTA1Nyw2ICsxMDU3LDcgQEAKIAlpbmV0X3NrKHNrKS0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOwogCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModG8uc2Euc2FfZmFtaWx5KTsKIAlhZi0+dG9fc2tfZGFkZHIoJnRvLCBzayk7CisJc2stPnNrX2VyciA9IDA7CiAKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIHNrLT5za19zb2NrZXQtPmZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIAllcnIgPSBzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgJnRpbWVvKTsKQEAgLTEyMjgsNyArMTIyOSw3IEBACiAKIAllcCA9IHNjdHBfc2soc2spLT5lcDsKIAotCS8qIFdhbGsgYWxsIGFzc29jaWF0aW9ucyBvbiBhIHNvY2tldCwgbm90IG9uIGFuIGVuZHBvaW50LiAgKi8KKwkvKiBXYWxrIGFsbCBhc3NvY2lhdGlvbnMgb24gYW4gZW5kcG9pbnQuICAqLwogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRlbXAsICZlcC0+YXNvY3MpIHsKIAkJYXNvYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiwgYXNvY3MpOwogCkBAIC0xMjQxLDEzICsxMjQyLDEzIEBACiAJCQlpZiAoc2N0cF9zdGF0ZShhc29jLCBDTE9TRUQpKSB7CiAJCQkJc2N0cF91bmhhc2hfZXN0YWJsaXNoZWQoYXNvYyk7CiAJCQkJc2N0cF9hc3NvY2lhdGlvbl9mcmVlKGFzb2MpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CiAKLQkJCX0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgJiYKLQkJCQkgICAhc2stPnNrX2xpbmdlcnRpbWUpCi0JCQkJc2N0cF9wcmltaXRpdmVfQUJPUlQoYXNvYywgTlVMTCk7Ci0JCQllbHNlCi0JCQkJc2N0cF9wcmltaXRpdmVfU0hVVERPV04oYXNvYywgTlVMTCk7Ci0JCX0gZWxzZQorCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgJiYgIXNrLT5za19saW5nZXJ0aW1lKQorCQkJc2N0cF9wcmltaXRpdmVfQUJPUlQoYXNvYywgTlVMTCk7CisJCWVsc2UKIAkJCXNjdHBfcHJpbWl0aXZlX1NIVVRET1dOKGFzb2MsIE5VTEwpOwogCX0KIApAQCAtNTMxNyw2ICs1MzE4LDcgQEAKIAkJICovCiAJCXNjdHBfcmVsZWFzZV9zb2NrKHNrKTsKIAkJY3VycmVudF90aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQoY3VycmVudF90aW1lbyk7CisJCUJVR19PTihzayAhPSBhc29jLT5iYXNlLnNrKTsKIAkJc2N0cF9sb2NrX3NvY2soc2spOwogCiAJCSp0aW1lb19wID0gY3VycmVudF90aW1lbzsKQEAgLTU2MDQsMTIgKzU2MDYsMTQgQEAKIAkgKi8KIAluZXdzcC0+dHlwZSA9IHR5cGU7CiAKLQlzcGluX2xvY2tfYmgoJm9sZHNrLT5za19sb2NrLnNsb2NrKTsKLQkvKiBNaWdyYXRlIHRoZSBiYWNrbG9nIGZyb20gb2xkc2sgdG8gbmV3c2suICovCi0Jc2N0cF9iYWNrbG9nX21pZ3JhdGUoYXNzb2MsIG9sZHNrLCBuZXdzayk7Ci0JLyogTWlncmF0ZSB0aGUgYXNzb2NpYXRpb24gdG8gdGhlIG5ldyBzb2NrZXQuICovCisJLyogTWFyayB0aGUgbmV3IHNvY2tldCAiaW4tdXNlIiBieSB0aGUgdXNlciBzbyB0aGF0IGFueSBwYWNrZXRzCisJICogdGhhdCBtYXkgYXJyaXZlIG9uIHRoZSBhc3NvY2lhdGlvbiBhZnRlciB3ZSd2ZSBtb3ZlZCBpdCBhcmUKKwkgKiBxdWV1ZWQgdG8gdGhlIGJhY2tsb2cuICBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UgYmV0d2VlbgorCSAqIGJhY2tsb2cgcHJvY2Vzc2luZyBvbiB0aGUgb2xkIHNvY2tldCBhbmQgbmV3LXBhY2tldCBwcm9jZXNzaW5nCisJICogb24gdGhlIG5ldyBzb2NrZXQuCisJICovCisJc2N0cF9sb2NrX3NvY2sobmV3c2spOwogCXNjdHBfYXNzb2NfbWlncmF0ZShhc3NvYywgbmV3c2spOwotCXNwaW5fdW5sb2NrX2JoKCZvbGRzay0+c2tfbG9jay5zbG9jayk7CiAKIAkvKiBJZiB0aGUgYXNzb2NpYXRpb24gb24gdGhlIG5ld3NrIGlzIGFscmVhZHkgY2xvc2VkIGJlZm9yZSBhY2NlcHQoKQogCSAqIGlzIGNhbGxlZCwgc2V0IFJDVl9TSFVURE9XTiBmbGFnLgpAQCAtNTYxOCw2ICs1NjIyLDcgQEAKIAkJbmV3c2stPnNrX3NodXRkb3duIHw9IFJDVl9TSFVURE9XTjsKIAogCW5ld3NrLT5za19zdGF0ZSA9IFNDVFBfU1NfRVNUQUJMSVNIRUQ7CisJc2N0cF9yZWxlYXNlX3NvY2sobmV3c2spOwogfQogCiAvKiBUaGlzIHByb3RvIHN0cnVjdCBkZXNjcmliZXMgdGhlIFVMUCBpbnRlcmZhY2UgZm9yIFNDVFAuICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwcXVldWUuYyBiL25ldC9zY3RwL3VscHF1ZXVlLmMKaW5kZXggMjA4MGIyZC4uNTc1ZTU1NiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdWxwcXVldWUuYworKysgYi9uZXQvc2N0cC91bHBxdWV1ZS5jCkBAIC0yNzksNiArMjc5LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF9tYWtlX3JlYXNzZW1ibGVkX2V2ZW50KHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqZl9mcmFnLCBzdHJ1Y3Qgc2tfYnVmZiAqbF9mcmFnKQogewogCXN0cnVjdCBza19idWZmICpwb3M7CisJc3RydWN0IHNrX2J1ZmYgKm5ldyA9IE5VTEw7CiAJc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBza19idWZmICpwbmV4dCwgKmxhc3Q7CiAJc3RydWN0IHNrX2J1ZmYgKmxpc3QgPSBza2Jfc2hpbmZvKGZfZnJhZyktPmZyYWdfbGlzdDsKQEAgLTI5NywxMSArMjk4LDMzIEBACiAJICovCiAJaWYgKGxhc3QpCiAJCWxhc3QtPm5leHQgPSBwb3M7Ci0JZWxzZQotCQlza2Jfc2hpbmZvKGZfZnJhZyktPmZyYWdfbGlzdCA9IHBvczsKKyAJZWxzZSB7CisgCQlpZiAoc2tiX2Nsb25lZChmX2ZyYWcpKSB7CisgCQkJLyogVGhpcyBpcyBhIGNsb25lZCBza2IsIHdlIGNhbid0IGp1c3QgbW9kaWZ5CisgCQkJICogdGhlIGZyYWdfbGlzdC4gIFdlIG5lZWQgYSBuZXcgc2tiIHRvIGRvIHRoYXQuCisgCQkJICogSW5zdGVhZCBvZiBjYWxsaW5nIHNrYl91bnNoYXJlKCksIHdlJ2xsIGRvIGl0CisgCQkJICogb3Vyc2VsdmVzIHNpbmNlIHdlIG5lZWQgdG8gZGVsYXkgdGhlIGZyZWUuCisgCQkJICovCisgCQkJbmV3ID0gc2tiX2NvcHkoZl9mcmFnLCBHRlBfQVRPTUlDKTsKKyAJCQlpZiAoIW5ldykKKyAJCQkJcmV0dXJuIE5VTEw7CS8qIHRyeSBhZ2FpbiBsYXRlciAqLworCisgCQkJbmV3LT5zayA9IGZfZnJhZy0+c2s7CisKKyAJCQlza2Jfc2hpbmZvKG5ldyktPmZyYWdfbGlzdCA9IHBvczsKKyAJCX0gZWxzZQorIAkJCXNrYl9zaGluZm8oZl9mcmFnKS0+ZnJhZ19saXN0ID0gcG9zOworIAl9CiAKIAkvKiBSZW1vdmUgdGhlIGZpcnN0IGZyYWdtZW50IGZyb20gdGhlIHJlYXNzZW1ibHkgcXVldWUuICAqLwogCV9fc2tiX3VubGluayhmX2ZyYWcsIHF1ZXVlKTsKKworIAkvKiBpZiB3ZSBkaWQgdW5zaGFyZSwgdGhlbiBmcmVlIHRoZSBvbGQgc2tiIGFuZCByZS1hc3NpZ24gKi8KKyAJaWYgKG5ldykgeworIAkJa2ZyZWVfc2tiKGZfZnJhZyk7CisgCQlmX2ZyYWcgPSBuZXc7CisgCX0KKwogCXdoaWxlIChwb3MpIHsKIAogCQlwbmV4dCA9IHBvcy0+bmV4dDsKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCBiMTMwNDJmLi4wMjk0OGI2IDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0xMTksMTAgKzExOSw2IEBACiBzdGF0aWMgc3NpemVfdCBzb2NrX3NlbmRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCSAgICAgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGxvZmZfdCAqcHBvcywgaW50IG1vcmUpOwogCi1leHRlcm4gc3NpemVfdCBnZW5lcmljX3NwbGljZV9zZW5kcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqb3V0LAotCQkJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KLQogLyoKICAqCVNvY2tldCBmaWxlcyBoYXZlIGEgc2V0IG9mICdzcGVjaWFsJyBvcGVyYXRpb25zIGFzIHdlbGwgYXMgdGhlIGdlbmVyaWMgZmlsZSBvbmVzLiBUaGVzZSBkb24ndCBhcHBlYXIKICAqCWluIHRoZSBvcGVyYXRpb24gc3RydWN0dXJlcyBidXQgYXJlIGRvbmUgZGlyZWN0bHkgdmlhIHRoZSBzb2NrZXRjYWxsKCkgbXVsdGlwbGV4b3IuCkBAIC0yNzEsNiArMjY3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYobGVuKQogCXsKKwkJaWYgKGF1ZGl0X3NvY2thZGRyKGtsZW4sIGthZGRyKSkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlpZihjb3B5X3RvX3VzZXIodWFkZHIsa2FkZHIsbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTQ5NCw2ICs0OTIsNyBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAKKwkqZXJyID0gLUVCQURGOwogCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCBmcHV0X25lZWRlZCk7CiAJaWYgKGZpbGUpIHsKIAkJc29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUsIGVycik7CkBAIC0xNDE4LDcgKzE0MTcsOCBAQAogCW5ld2ZkID0gc29ja19hbGxvY19mZCgmbmV3ZmlsZSk7CiAJaWYgKHVubGlrZWx5KG5ld2ZkIDwgMCkpIHsKIAkJZXJyID0gbmV3ZmQ7Ci0JCWdvdG8gb3V0X3JlbGVhc2U7CisJCXNvY2tfcmVsZWFzZShuZXdzb2NrKTsKKwkJZ290byBvdXRfcHV0OwogCX0KIAogCWVyciA9IHNvY2tfYXR0YWNoX2ZkKG5ld3NvY2ssIG5ld2ZpbGUpOwpAQCAtMTQ1NSwxMCArMTQ1NSw4IEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIG91dF9mZDoKLQlwdXRfZmlscChuZXdmaWxlKTsKKwlmcHV0KG5ld2ZpbGUpOwogCXB1dF91bnVzZWRfZmQobmV3ZmQpOwotb3V0X3JlbGVhc2U6Ci0Jc29ja19yZWxlYXNlKG5ld3NvY2spOwogCWdvdG8gb3V0X3B1dDsKIH0KIApAQCAtMjEzNyw3ICsyMTM1LDcgQEAKIAlpbnQgY3B1OwogCWludCBjb3VudGVyID0gMDsKIAotCWZvcl9lYWNoX2NwdShjcHUpCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJY291bnRlciArPSBwZXJfY3B1KHNvY2tldHNfaW5fdXNlLCBjcHUpOwogCiAJLyogSXQgY2FuIGJlIG5lZ2F0aXZlLCBieSB0aGUgd2F5LiA4KSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IDkwMGVmMzEuLjUxOWViYzEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTc5NCw3ICs3OTQsNiBAQAogCiBvdXRfZXJyOgogCWRwcmludGsoIlJQQzogICAgICBnc3NfY3JlYXRlX2NyZWQgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIGVycik7Ci0JaWYgKGNyZWQpIGdzc19kZXN0cm95X2NyZWQoJmNyZWQtPmdjX2Jhc2UpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCmluZGV4IDk3Yzk4MWYuLjc2Yjk2OWUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYwpAQCAtMjEyLDcgKzIxMiw2IEBACiAJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2tzdW1uYW1lOwogCXN0cnVjdCBjcnlwdG9fdGZtICAgICAgICAgICAgICAgKnRmbSA9IE5VTEw7IC8qIFhYWCBhZGQgdG8gY3R4PyAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCAgICAgICAgICAgICAgc2dbMV07Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gR1NTX1NfRkFJTFVSRTsKIAogCXN3aXRjaCAoY2tzdW10eXBlKSB7CiAJCWNhc2UgQ0tTVU1UWVBFX1JTQV9NRDU6CkBAIC0yMjEsMTMgKzIyMCwxMSBAQAogCQlkZWZhdWx0OgogCQkJZHByaW50aygiUlBDOiAgICAgIGtyYjVfbWFrZV9jaGVja3N1bToiCiAJCQkJIiB1bnN1cHBvcnRlZCBjaGVja3N1bSAlZCIsIGNrc3VtdHlwZSk7Ci0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBHU1NfU19GQUlMVVJFOwogCX0KIAlpZiAoISh0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGNrc3VtbmFtZSwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKSkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAlja3N1bS0+bGVuID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pOwotCWlmICgoY2tzdW0tPmRhdGEgPSBrbWFsbG9jKGNrc3VtLT5sZW4sIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlnb3RvIG91dDsKIAogCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwogCXNnX3NldF9idWYoc2csIGhlYWRlciwgaGRybGVuKTsKQEAgLTIzNSwxMCArMjMyLDggQEAKIAlwcm9jZXNzX3hkcl9idWYoYm9keSwgYm9keV9vZmZzZXQsIGJvZHktPmxlbiAtIGJvZHlfb2Zmc2V0LAogCQkJY2hlY2tzdW1tZXIsIHRmbSk7CiAJY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIGNrc3VtLT5kYXRhKTsKLQljb2RlID0gMDsKLW91dDoKIAljcnlwdG9fZnJlZV90Zm0odGZtKTsKLQlyZXR1cm4gY29kZTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChtYWtlX2NoZWNrc3VtKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwppbmRleCA0ZDdlYjllLi5kNTFlMzE2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCkBAIC0xMTIyLDE4ICsxMTIyLDIwIEBACiAJCQkJCWludGVnX2xlbikpCiAJCQlCVUcoKTsKIAkJaWYgKHJlc2J1Zi0+cGFnZV9sZW4gPT0gMAotCQkJJiYgcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4gKyBSUENfTUFYX0FVVEhfU0laRQorCQkJJiYgcmVzYnVmLT5oZWFkWzBdLmlvdl9sZW4gKyBSUENfTUFYX0FVVEhfU0laRQogCQkJCTwgUEFHRV9TSVpFKSB7CiAJCQlCVUdfT04ocmVzYnVmLT50YWlsWzBdLmlvdl9sZW4pOwogCQkJLyogVXNlIGhlYWQgZm9yIGV2ZXJ5dGhpbmcgKi8KIAkJCXJlc3YgPSAmcmVzYnVmLT5oZWFkWzBdOwogCQl9IGVsc2UgaWYgKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9PSBOVUxMKSB7Ci0JCQkvKiBjb3BpZWQgZnJvbSBuZnNkNF9lbmNvZGVfcmVhZCAqLwotCQkJc3ZjX3Rha2VfcGFnZShycXN0cCk7Ci0JCQlyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAKLQkJCQkJLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZC0xXSk7Ci0JCQlycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSBycXN0cC0+cnFfcmVzdXNlZC0xOworCQkJaWYgKHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuICsgUlBDX01BWF9BVVRIX1NJWkUKKwkJCQkJPiBQQUdFX1NJWkUpCisJCQkJZ290byBvdXRfZXJyOworCQkJcmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID0KKwkJCQlyZXNidWYtPmhlYWRbMF0uaW92X2Jhc2UKKwkJCQkrIHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuOwogCQkJcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOworCQkJcnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKIAkJCXJlc3YgPSAmcmVzYnVmLT50YWlsWzBdOwogCQl9IGVsc2UgewogCQkJcmVzdiA9ICZyZXNidWYtPnRhaWxbMF07CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMKaW5kZXggM2FjNDE5My4uNzAyNmIwOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jYWNoZS5jCisrKyBiL25ldC9zdW5ycGMvY2FjaGUuYwpAQCAtMTU5LDYgKzE1OSw3IEBACiAJCWRldGFpbC0+dXBkYXRlKHRtcCwgbmV3KTsKIAl0bXAtPm5leHQgPSAqaGVhZDsKIAkqaGVhZCA9IHRtcDsKKwlkZXRhaWwtPmVudHJpZXMrKzsKIAljYWNoZV9nZXQodG1wKTsKIAlpc19uZXcgPSBjYWNoZV9mcmVzaF9sb2NrZWQodG1wLCBuZXctPmV4cGlyeV90aW1lKTsKIAljYWNoZV9mcmVzaF9sb2NrZWQob2xkLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3RhdHMuYyBiL25ldC9zdW5ycGMvc3RhdHMuYwppbmRleCBkZWE1Mjk2Li4xNWMyZGIyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N0YXRzLmMKKysrIGIvbmV0L3N1bnJwYy9zdGF0cy5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAlvcF9tZXRyaWNzLT5vbV9leGVjdXRlICs9IGV4ZWN1dGU7CiB9CiAKLXZvaWQgX3ByaW50X25hbWUoc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGludCBvcCwgc3RydWN0IHJwY19wcm9jaW5mbyAqcHJvY3MpCitzdGF0aWMgdm9pZCBfcHJpbnRfbmFtZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdW5zaWduZWQgaW50IG9wLAorCQkJc3RydWN0IHJwY19wcm9jaW5mbyAqcHJvY3MpCiB7CiAJaWYgKHByb2NzW29wXS5wX25hbWUpCiAJCXNlcV9wcmludGYoc2VxLCAiXHQlMTJzOiAiLCBwcm9jc1tvcF0ucF9uYW1lKTsKZGlmZiAtLWdpdCBhL25ldC9zeXNjdGxfbmV0LmMgYi9uZXQvc3lzY3RsX25ldC5jCmluZGV4IDU1NTM4ZjYuLjU4YTFiNmIgMTAwNjQ0Ci0tLSBhL25ldC9zeXNjdGxfbmV0LmMKKysrIGIvbmV0L3N5c2N0bF9uZXQuYwpAQCAtMzcsMTQgKzM3LDYgQEAKIAkJLm1vZGUJCT0gMDU1NSwKIAkJLmNoaWxkCQk9IGNvcmVfdGFibGUsCiAJfSwKLSNpZmRlZiBDT05GSUdfTkVUCi0JewotCQkuY3RsX25hbWUJPSBORVRfRVRIRVIsCi0JCS5wcm9jbmFtZQk9ICJldGhlcm5ldCIsCi0JCS5tb2RlCQk9IDA1NTUsCi0JCS5jaGlsZAkJPSBldGhlcl90YWJsZSwKLQl9LAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lORVQKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY0LApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCmluZGV4IDk1MzMwN2EuLmEzYmJjODkgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuYworKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKQEAgLTIyOSw4ICsyMjksNyBAQAogCQkJCSAgICAgcHVibC0+bm9kZSwgcHVibC0+cmVmLCBwdWJsLT5rZXkpOwogICAgICAgICBhc3NlcnQocCA9PSBwdWJsKTsKIAl3cml0ZV91bmxvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKLQlpZiAocHVibCkKLQkJa2ZyZWUocHVibCk7CisJa2ZyZWUocHVibCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMgYi9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYwppbmRleCA4YjliZjRhLi5iMTI2NTE4IDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYworKysgYi9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYwpAQCAtNTUsMTIgKzU1LDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FucGlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3dhbnBpcGUuaD4KICNpbmNsdWRlIDxsaW51eC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfd2FucGlwZV9jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zZGxhX3gyNS5oPgogCiAjaWZkZWYgQ09ORklHX0lORVQKICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X3RpbWVyLmMgYi9uZXQveDI1L3gyNV90aW1lci5jCmluZGV4IDBhOTJlMWQuLjcxZmYzMDggMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X3RpbWVyLmMKKysrIGIvbmV0L3gyNS94MjVfdGltZXIuYwpAQCAtMTE0LDggKzExNCw5IEBACiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFU1RST1kpIHx8CiAJCQkgICAgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOICYmCiAJCQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHsKKwkJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQkJeDI1X2Rlc3Ryb3lfc29ja2V0KHNrKTsKLQkJCQlnb3RvIHVubG9jazsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTI4LDcgKzEyOSw2IEBACiAJfQogcmVzdGFydF9oZWFydGJlYXQ6CiAJeDI1X3N0YXJ0X2hlYXJ0YmVhdChzayk7Ci11bmxvY2s6CiAJYmhfdW5sb2NrX3NvY2soc2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKaW5kZXggMjQwN2E3MC4uODkxYTYwOSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jCisrKyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwpAQCAtMTgsNyArMTgsNyBAQAogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBzcC0+bGVuOyBpKyspCi0JCXhmcm1fc3RhdGVfcHV0KHNwLT54W2ldLnh2ZWMpOworCQl4ZnJtX3N0YXRlX3B1dChzcC0+eHZlY1tpXSk7CiAJa21lbV9jYWNoZV9mcmVlKHNlY3BhdGhfY2FjaGVwLCBzcCk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fc2VjcGF0aF9kZXN0cm95KTsKQEAgLTM3LDcgKzM3LDcgQEAKIAogCQltZW1jcHkoc3AsIHNyYywgc2l6ZW9mKCpzcCkpOwogCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmxlbjsgaSsrKQotCQkJeGZybV9zdGF0ZV9ob2xkKHNwLT54W2ldLnh2ZWMpOworCQkJeGZybV9zdGF0ZV9ob2xkKHNwLT54dmVjW2ldKTsKIAl9CiAJYXRvbWljX3NldCgmc3AtPnJlZmNudCwgMSk7CiAJcmV0dXJuIHNwOwpAQCAtNjIsNyArNjIsNyBAQAogCWNhc2UgSVBQUk9UT19DT01QOgogCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwX2NvbXBfaGRyKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJKnNwaSA9IG50b2hsKG50b2hzKCoodTE2Kikoc2tiLT5oLnJhdyArIDIpKSk7CisJCSpzcGkgPSBodG9ubChudG9ocygqKHUxNiopKHNrYi0+aC5yYXcgKyAyKSkpOwogCQkqc2VxID0gMDsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGY1ZWFlOWYuLmI0NjljOGIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtNTcsMTIgKzU3LDEyIEBACiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCXR5cGVtYXAgPSBhZmluZm8tPnR5cGVfbWFwOwogCi0Jd3JpdGVfbG9jaygmdHlwZW1hcC0+bG9jayk7CisJd3JpdGVfbG9ja19iaCgmdHlwZW1hcC0+bG9jayk7CiAJaWYgKGxpa2VseSh0eXBlbWFwLT5tYXBbdHlwZS0+cHJvdG9dID09IE5VTEwpKQogCQl0eXBlbWFwLT5tYXBbdHlwZS0+cHJvdG9dID0gdHlwZTsKIAllbHNlCiAJCWVyciA9IC1FRVhJU1Q7Ci0Jd3JpdGVfdW5sb2NrKCZ0eXBlbWFwLT5sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwogCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzgsMTIgKzc4LDEyIEBACiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCXR5cGVtYXAgPSBhZmluZm8tPnR5cGVfbWFwOwogCi0Jd3JpdGVfbG9jaygmdHlwZW1hcC0+bG9jayk7CisJd3JpdGVfbG9ja19iaCgmdHlwZW1hcC0+bG9jayk7CiAJaWYgKHVubGlrZWx5KHR5cGVtYXAtPm1hcFt0eXBlLT5wcm90b10gIT0gdHlwZSkpCiAJCWVyciA9IC1FTk9FTlQ7CiAJZWxzZQogCQl0eXBlbWFwLT5tYXBbdHlwZS0+cHJvdG9dID0gTlVMTDsKLQl3cml0ZV91bmxvY2soJnR5cGVtYXAtPmxvY2spOworCXdyaXRlX3VubG9ja19iaCgmdHlwZW1hcC0+bG9jayk7CiAJeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhhZmluZm8pOwogCXJldHVybiBlcnI7CiB9CkBAIC05NDMsOSArOTQzLDkgQEAKIAl9IGVsc2UKIAkJc3RhcnQgPSAtMTsKIAlmb3IgKDsgaWR4IDwgc3AtPmxlbjsgaWR4KyspIHsKLQkJaWYgKHhmcm1fc3RhdGVfb2sodG1wbCwgc3AtPnhbaWR4XS54dmVjLCBmYW1pbHkpKQorCQlpZiAoeGZybV9zdGF0ZV9vayh0bXBsLCBzcC0+eHZlY1tpZHhdLCBmYW1pbHkpKQogCQkJcmV0dXJuICsraWR4OwotCQlpZiAoc3AtPnhbaWR4XS54dmVjLT5wcm9wcy5tb2RlKQorCQlpZiAoc3AtPnh2ZWNbaWR4XS0+cHJvcHMubW9kZSkKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gc3RhcnQ7CkBAIC05NjgsNyArOTY4LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3BhdGhfaGFzX3R1bm5lbChzdHJ1Y3Qgc2VjX3BhdGggKnNwLCBpbnQgaykKIHsKIAlmb3IgKDsgayA8IHNwLT5sZW47IGsrKykgewotCQlpZiAoc3AtPnhba10ueHZlYy0+cHJvcHMubW9kZSkKKwkJaWYgKHNwLT54dmVjW2tdLT5wcm9wcy5tb2RlKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC05OTQsOCArOTk0LDggQEAKIAkJaW50IGk7CiAKIAkJZm9yIChpPXNrYi0+c3AtPmxlbi0xOyBpPj0wOyBpLS0pIHsKLQkJCXN0cnVjdCBzZWNfZGVjYXBfc3RhdGUgKnh2ZWMgPSAmKHNrYi0+c3AtPnhbaV0pOwotCQkJaWYgKCF4ZnJtX3NlbGVjdG9yX21hdGNoKCZ4dmVjLT54dmVjLT5zZWwsICZmbCwgZmFtaWx5KSkKKwkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc2tiLT5zcC0+eHZlY1tpXTsKKwkJCWlmICgheGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCAmZmwsIGZhbWlseSkpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0xMjUxLDcgKzEyNTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodW5saWtlbHkoYWZpbmZvLT5mYW1pbHkgPj0gTlBST1RPKSkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7Ci0Jd3JpdGVfbG9jaygmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKIAlpZiAodW5saWtlbHkoeGZybV9wb2xpY3lfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSAhPSBOVUxMKSkKIAkJZXJyID0gLUVOT0JVRlM7CiAJZWxzZSB7CkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogCQkJYWZpbmZvLT5nYXJiYWdlX2NvbGxlY3QgPSBfX3hmcm1fZ2FyYmFnZV9jb2xsZWN0OwogCQl4ZnJtX3BvbGljeV9hZmluZm9bYWZpbmZvLT5mYW1pbHldID0gYWZpbmZvOwogCX0KLQl3cml0ZV91bmxvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9yZWdpc3Rlcl9hZmluZm8pOwpAQCAtMTI4MCw3ICsxMjgwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHVubGlrZWx5KGFmaW5mby0+ZmFtaWx5ID49IE5QUk9UTykpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCXdyaXRlX2xvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiAJaWYgKGxpa2VseSh4ZnJtX3BvbGljeV9hZmluZm9bYWZpbmZvLT5mYW1pbHldICE9IE5VTEwpKSB7CiAJCWlmICh1bmxpa2VseSh4ZnJtX3BvbGljeV9hZmluZm9bYWZpbmZvLT5mYW1pbHldICE9IGFmaW5mbykpCiAJCQllcnIgPSAtRUlOVkFMOwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKIAkJCWFmaW5mby0+Z2FyYmFnZV9jb2xsZWN0ID0gTlVMTDsKIAkJfQogCX0KLQl3cml0ZV91bmxvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggYThlMTRkYy4uOTNhMmYzNiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtODA1LDE2ICs4MDUsMjIgQEAKIAljYXNlIFhGUk1fUkVQTEFZX1VQREFURToKIAkJaWYgKHgtPnJlcGxheV9tYXhkaWZmICYmCiAJCSAgICAoeC0+cmVwbGF5LnNlcSAtIHgtPnByZXBsYXkuc2VxIDwgeC0+cmVwbGF5X21heGRpZmYpICYmCi0JCSAgICAoeC0+cmVwbGF5Lm9zZXEgLSB4LT5wcmVwbGF5Lm9zZXEgPCB4LT5yZXBsYXlfbWF4ZGlmZikpCi0JCQlyZXR1cm47CisJCSAgICAoeC0+cmVwbGF5Lm9zZXEgLSB4LT5wcmVwbGF5Lm9zZXEgPCB4LT5yZXBsYXlfbWF4ZGlmZikpIHsKKwkJCWlmICh4LT54ZmxhZ3MgJiBYRlJNX1RJTUVfREVGRVIpCisJCQkJZXZlbnQgPSBYRlJNX1JFUExBWV9USU1FT1VUOworCQkJZWxzZQorCQkJCXJldHVybjsKKwkJfQogCiAJCWJyZWFrOwogCiAJY2FzZSBYRlJNX1JFUExBWV9USU1FT1VUOgogCQlpZiAoKHgtPnJlcGxheS5zZXEgPT0geC0+cHJlcGxheS5zZXEpICYmCiAJCSAgICAoeC0+cmVwbGF5LmJpdG1hcCA9PSB4LT5wcmVwbGF5LmJpdG1hcCkgJiYKLQkJICAgICh4LT5yZXBsYXkub3NlcSA9PSB4LT5wcmVwbGF5Lm9zZXEpKQorCQkgICAgKHgtPnJlcGxheS5vc2VxID09IHgtPnByZXBsYXkub3NlcSkpIHsKKwkJCXgtPnhmbGFncyB8PSBYRlJNX1RJTUVfREVGRVI7CiAJCQlyZXR1cm47CisJCX0KIAogCQlicmVhazsKIAl9CkBAIC04MjUsOCArODMxLDEwIEBACiAJa21fc3RhdGVfbm90aWZ5KHgsICZjKTsKIAogCWlmICh4LT5yZXBsYXlfbWF4YWdlICYmCi0JICAgICFtb2RfdGltZXIoJngtPnJ0aW1lciwgamlmZmllcyArIHgtPnJlcGxheV9tYXhhZ2UpKQorCSAgICAhbW9kX3RpbWVyKCZ4LT5ydGltZXIsIGppZmZpZXMgKyB4LT5yZXBsYXlfbWF4YWdlKSkgewogCQl4ZnJtX3N0YXRlX2hvbGQoeCk7CisJCXgtPnhmbGFncyAmPSB+WEZSTV9USU1FX0RFRkVSOworCX0KIH0KIEVYUE9SVF9TWU1CT0woeGZybV9yZXBsYXlfbm90aWZ5KTsKIApAQCAtODM2LDEwICs4NDQsMTUgQEAKIAogCXNwaW5fbG9jaygmeC0+bG9jayk7CiAKLQlpZiAoeGZybV9hZXZlbnRfaXNfb24oKSAmJiB4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKQotCQl4ZnJtX3JlcGxheV9ub3RpZnkoeCwgWEZSTV9SRVBMQVlfVElNRU9VVCk7CisJaWYgKHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfVkFMSUQpIHsKKwkJaWYgKHhmcm1fYWV2ZW50X2lzX29uKCkpCisJCQl4ZnJtX3JlcGxheV9ub3RpZnkoeCwgWEZSTV9SRVBMQVlfVElNRU9VVCk7CisJCWVsc2UKKwkJCXgtPnhmbGFncyB8PSBYRlJNX1RJTUVfREVGRVI7CisJfQogCiAJc3Bpbl91bmxvY2soJngtPmxvY2spOworCXhmcm1fc3RhdGVfcHV0KHgpOwogfQogCiBpbnQgeGZybV9yZXBsYXlfY2hlY2soc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBzZXEpCkBAIC0xMDQ4LDcgKzEwNjEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodW5saWtlbHkoYWZpbmZvLT5mYW1pbHkgPj0gTlBST1RPKSkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7Ci0Jd3JpdGVfbG9jaygmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CisJd3JpdGVfbG9ja19iaCgmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CiAJaWYgKHVubGlrZWx5KHhmcm1fc3RhdGVfYWZpbmZvW2FmaW5mby0+ZmFtaWx5XSAhPSBOVUxMKSkKIAkJZXJyID0gLUVOT0JVRlM7CiAJZWxzZSB7CkBAIC0xMDU2LDcgKzEwNjksNyBAQAogCQlhZmluZm8tPnN0YXRlX2J5c3BpID0geGZybV9zdGF0ZV9ieXNwaTsKIAkJeGZybV9zdGF0ZV9hZmluZm9bYWZpbmZvLT5mYW1pbHldID0gYWZpbmZvOwogCX0KLQl3cml0ZV91bmxvY2soJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9yZWdpc3Rlcl9hZmluZm8pOwpAQCAtMTA2OCw3ICsxMDgxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHVubGlrZWx5KGFmaW5mby0+ZmFtaWx5ID49IE5QUk9UTykpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCXdyaXRlX2xvY2soJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOwogCWlmIChsaWtlbHkoeGZybV9zdGF0ZV9hZmluZm9bYWZpbmZvLT5mYW1pbHldICE9IE5VTEwpKSB7CiAJCWlmICh1bmxpa2VseSh4ZnJtX3N0YXRlX2FmaW5mb1thZmluZm8tPmZhbWlseV0gIT0gYWZpbmZvKSkKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC0xMDc4LDcgKzEwOTEsNyBAQAogCQkJYWZpbmZvLT5zdGF0ZV9ieWRzdCA9IE5VTEw7CiAJCX0KIAl9Ci0Jd3JpdGVfdW5sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfdW5yZWdpc3Rlcl9hZmluZm8pOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggNTk2MjBiMS4uYjBkMDY3YiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC04Nyw2ICs4NywxMSBAQAogIyAkKFEpJChNQUtFKSAkKGJ1aWxkKT1kaXIKIGJ1aWxkIDo9IC1mICQoaWYgJChLQlVJTERfU1JDKSwkKHNyY3RyZWUpLylzY3JpcHRzL01ha2VmaWxlLmJ1aWxkIG9iagogCisjIFByZWZpeCAtSSB3aXRoICQoc3JjdHJlZSkgaWYgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGgKK2FkZHRyZWUgPSAkKGlmICQoZmlsdGVyLW91dCAtSS8lLCQoMSkpLCQocGF0c3Vic3QgLUklLC1JJChzcmN0cmVlKS8lLCQoMSkpKSAkKDEpCisjIEZpbmQgYWxsIC1JIG9wdGlvbnMgYW5kIGNhbGwgYWRkdHJlZQorZmxhZ3MgPSAkKGZvcmVhY2ggbywkKCQoMSkpLCQoaWYgJChmaWx0ZXIgLUklLCQobykpLCQoY2FsbCBhZGR0cmVlLCQobykpLCQobykpKQorCiAjIElmIHF1aWV0IGlzIHNldCwgb25seSBwcmludCBzaG9ydCB2ZXJzaW9uIG9mIGNvbW1hbmQKIGNtZCA9IEAkKGVjaG8tY21kKSAkKGNtZF8kKDEpKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IDU1MDc5OGYuLjJjYjQ5MzUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC05OSwxMSArOTksNiBAQAogX19jcHBfZmxhZ3MgICAgID0gJChfY3BwX2ZsYWdzKQogZWxzZQogCi0jIFByZWZpeCAtSSB3aXRoICQoc3JjdHJlZSkgaWYgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGgKLWFkZHRyZWUgPSAkKGlmICQoZmlsdGVyLW91dCAtSS8lLCQoMSkpLCQocGF0c3Vic3QgLUklLC1JJChzcmN0cmVlKS8lLCQoMSkpKSAkKDEpCi0jIEZpbmQgYWxsIC1JIG9wdGlvbnMgYW5kIGNhbGwgYWRkdHJlZQotZmxhZ3MgPSAkKGZvcmVhY2ggbywkKCQoMSkpLCQoaWYgJChmaWx0ZXIgLUklLCQobykpLCQoY2FsbCBhZGR0cmVlLCQobykpLCQobykpKQotCiAjIC1JJChvYmopIGxvY2F0ZXMgZ2VuZXJhdGVkIC5oIGZpbGVzCiAjICQoY2FsbCBhZGR0cmVlLC1JJChvYmopKSBsb2NhdGVzIC5oIGZpbGVzIGluIHNyY3RyZWUsIGZyb20gZ2VuZXJhdGVkIC5jIGZpbGVzCiAjICAgYW5kIGxvY2F0ZXMgZ2VuZXJhdGVkIC5oIGZpbGVzCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jsb2F0LW8tbWV0ZXIgYi9zY3JpcHRzL2Jsb2F0LW8tbWV0ZXIKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3N0YWNrLnBsIGIvc2NyaXB0cy9jaGVja3N0YWNrLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKaW5kZXggNmQ0MTExNi4uMzMxYzA3OSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKKysrIGIvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2gKQEAgLTEsMjIgKzEsNTUgQEAKICMhL2Jpbi9iYXNoCiAjIENvcHlyaWdodCAoQykgTWFydGluIFNjaGxlbW1lciA8YXphcmFoQG5vc2ZlcmF0dS56YS5vcmc+CisjIENvcHlyaWdodCAoYykgMjAwNiAgICAgICAgICAgU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgorIwogIyBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwKICMKLSMgR2VuZXJhdGUgYSBuZXdsaW5lIHNlcGFyYXRlZCBsaXN0IG9mIGVudHJpZXMgZnJvbSB0aGUgZmlsZS9kaXJlY3RvcnkKLSMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQuCi0jCi0jIElmIGEgZmlsZS9kaXJlY3RvcnkgaXMgbm90IHN1cHBsaWVkIHRoZW4gZ2VuZXJhdGUgYSBzbWFsbCBkdW1teSBmaWxlLgotIwotIyBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBnZW5faW5pdF9jcGlvIGJ1aWx0IGZyb20gdXNyL2dlbl9pbml0X2NwaW8uYy4KLSMKKyMgR2VuZXJhdGUgYSBjcGlvIHBhY2tlZCBpbml0cmFtZnMuIEl0IHVzZXMgZ2VuX2luaXRfY3BpbyB0byBnZW5lcmF0ZQorIyB0aGUgY3BpbyBhcmNoaXZlLCBhbmQgZ3ppcCB0byBwYWNrIGl0LgorIyBUaGUgc2NyaXB0IG1heSBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGlucHV0ZmlsZSB1c2VkIGZvciBnZW5faW5pdF9jcGlvCisjIFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCBnZW5faW5pdF9jcGlvIGlzIGxvY2F0ZWQgaW4gdXNyLyBkaXJlY3RvcnkKKworIyBlcnJvciBvdXQgb24gZXJyb3JzCitzZXQgLWUKKwordXNhZ2UoKSB7CitjYXQgPDwgRU9GCitVc2FnZToKKyQwIFstbyA8ZmlsZT5dIFstdSA8dWlkPl0gWy1nIDxnaWQ+XSB7LWQgfCA8Y3Bpb19zb3VyY2U+fSAuLi4KKwktbyA8ZmlsZT4gICAgICBDcmVhdGUgZ3ppcHBlZCBpbml0cmFtZnMgZmlsZSBuYW1lZCA8ZmlsZT4gdXNpbmcKKwkgICAgICAgICAgICAgICBnZW5faW5pdF9jcGlvIGFuZCBnemlwCisJLXUgPHVpZD4gICAgICAgVXNlciBJRCB0byBtYXAgdG8gdXNlciBJRCAwIChyb290KS4KKwkgICAgICAgICAgICAgICA8dWlkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPgorCSAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5LgorCS1nIDxnaWQ+ICAgICAgIEdyb3VwIElEIHRvIG1hcCB0byBncm91cCBJRCAwIChyb290KS4KKwkgICAgICAgICAgICAgICA8Z2lkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPgorCSAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5LgorCTxjcGlvX3NvdXJjZT4gIEZpbGUgbGlzdCBvciBkaXJlY3RvcnkgZm9yIGNwaW8gYXJjaGl2ZS4KKwkgICAgICAgICAgICAgICBJZiA8Y3Bpb19zb3VyY2U+IGlzIGEgLmNwaW8gZmlsZSBpdCB3aWxsIGJlIHVzZWQKKwkJICAgICAgIGFzIGRpcmVjdCBpbnB1dCB0byBpbml0cmFtZnMuCisJLWQgICAgICAgICAgICAgT3V0cHV0IHRoZSBkZWZhdWx0IGNwaW8gbGlzdC4KKworQWxsIG9wdGlvbnMgZXhjZXB0IC1vIGFuZCAtbCBtYXkgYmUgcmVwZWF0ZWQgYW5kIGFyZSBpbnRlcnByZXRlZAorc2VxdWVudGlhbGx5IGFuZCBpbW1lZGlhdGVseS4gIC11IGFuZCAtZyBzdGF0ZXMgYXJlIHByZXNlcnZlZCBhY3Jvc3MKKzxjcGlvX3NvdXJjZT4gb3B0aW9ucyBzbyBhbiBleHBsaWNpdCAiLXUgMCAtZyAwIiBpcyByZXF1aXJlZAordG8gcmVzZXQgdGhlIHJvb3QvZ3JvdXAgbWFwcGluZy4KK0VPRgorfQorCitsaXN0X2RlZmF1bHRfaW5pdHJhbWZzKCkgeworCSMgZWNobyB1c3Iva2luaXQva2luaXQKKwk6Cit9CiAKIGRlZmF1bHRfaW5pdHJhbWZzKCkgewotCWNhdCA8PC1FT0YKKwljYXQgPDwtRU9GID4+ICR7b3V0cHV0fQogCQkjIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSwgZGVmYXVsdCBpbml0cmFtZnMKIAogCQlkaXIgL2RldiAwNzU1IDAgMAogCQlub2QgL2Rldi9jb25zb2xlIDA2MDAgMCAwIGMgNSAxCiAJCWRpciAvcm9vdCAwNzAwIDAgMAorCQkjIGZpbGUgL2tpbml0IHVzci9raW5pdC9raW5pdCAwNzU1IDAgMAorCQkjIHNsaW5rIC9pbml0IGtpbml0IDA3NTUgMCAwCiAJRU9GCiB9CiAKQEAgLTQyLDE4ICs3NSwyOCBAQAogCXJldHVybiAwCiB9CiAKLXByaW50X210aW1lKCkgewotCWxvY2FsIGFyZ3YxPSIkMSIKLQlsb2NhbCBteV9tdGltZT0iMCIKLQotCWlmIFsgLWUgIiR7YXJndjF9IiBdOyB0aGVuCi0JCW15X210aW1lPSQoZmluZCAiJHthcmd2MX0iIC1wcmludGYgIiVUQFxuIiB8IHNvcnQgLXIgfCBoZWFkIC1uIDEpCi0JZmkKLQkKLQllY2hvICIjIExhc3QgbW9kaWZpZWQ6ICR7bXlfbXRpbWV9IgotCWVjaG8KK2xpc3RfcHJpbnRfbXRpbWUoKSB7CisJOgogfQogCitwcmludF9tdGltZSgpIHsKKwlsb2NhbCBteV9tdGltZT0iMCIKKworCWlmIFsgLWUgIiQxIiBdOyB0aGVuCisJCW15X210aW1lPSQoZmluZCAiJDEiIC1wcmludGYgIiVUQFxuIiB8IHNvcnQgLXIgfCBoZWFkIC1uIDEpCisJZmkKKworCWVjaG8gIiMgTGFzdCBtb2RpZmllZDogJHtteV9tdGltZX0iID4+ICR7b3V0cHV0fQorCWVjaG8gIiIgPj4gJHtvdXRwdXR9Cit9CisKK2xpc3RfcGFyc2UoKSB7CisJZWNobyAiJDEgXFwiCit9CisKKyMgZm9yIGVhY2ggZmlsZSBwcmludCBhIGxpbmUgaW4gZm9sbG93aW5nIGZvcm1hdAorIyA8ZmlsZXR5cGU+IDxuYW1lPiA8cGF0aCB0byBmaWxlPiA8b2N0YWwgbW9kZT4gPHVpZD4gPGdpZD4KKyMgZm9yIGxpbmtzLCBkZXZpY2VzIGV0YyB0aGUgZm9ybWF0IGRpZmZlcnMuIFNlZSBnZW5faW5pdF9jcGlvIGZvciBkZXRhaWxzCiBwYXJzZSgpIHsKIAlsb2NhbCBsb2NhdGlvbj0iJDEiCiAJbG9jYWwgbmFtZT0iJHtsb2NhdGlvbi8ke3NyY2Rpcn0vL30iCkBAIC05OSw4MCArMTQyLDExNiBAQAogCQkJOzsKIAllc2FjCiAKLQllY2hvICIke3N0cn0iCisJZWNobyAiJHtzdHJ9IiA+PiAke291dHB1dH0KIAogCXJldHVybiAwCiB9CiAKLXVzYWdlKCkgewotCXByaW50ZiAgICAiVXNhZ2U6XG4iCi0JcHJpbnRmICAgICIkMCBbIFstdSA8cm9vdF91aWQ+XSBbLWcgPHJvb3RfZ2lkPl0gWy1kIHwgPGNwaW9fc291cmNlPl0gXSAuIC4gLlxuIgotCXByaW50ZiAgICAiXG4iCi0JcHJpbnRmIC0tICItdSA8cm9vdF91aWQ+ICBVc2VyIElEIHRvIG1hcCB0byB1c2VyIElEIDAgKHJvb3QpLlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgPHJvb3RfdWlkPiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgPGNwaW9fc291cmNlPlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgaXMgYSBkaXJlY3RvcnkuXG4iCi0JcHJpbnRmIC0tICItZyA8cm9vdF9naWQ+ICBHcm91cCBJRCB0byBtYXAgdG8gZ3JvdXAgSUQgMCAocm9vdCkuXG4iCi0JcHJpbnRmICAgICIgICAgICAgICAgICAgICA8cm9vdF9naWQ+IGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiA8Y3Bpb19zb3VyY2U+XG4iCi0JcHJpbnRmICAgICIgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeS5cbiIKLQlwcmludGYgICAgIjxjcGlvX3NvdXJjZT4gIEZpbGUgbGlzdCBvciBkaXJlY3RvcnkgZm9yIGNwaW8gYXJjaGl2ZS5cbiIKLQlwcmludGYgICAgIiAgICAgICAgICAgICAgIElmIDxjcGlvX3NvdXJjZT4gaXMgbm90IHByb3ZpZGVkIHRoZW4gYVxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgYSBkZWZhdWx0IGxpc3Qgd2lsbCBiZSBvdXRwdXQuXG4iCi0JcHJpbnRmIC0tICItZCAgICAgICAgICAgICBPdXRwdXQgdGhlIGRlZmF1bHQgY3BpbyBsaXN0LiAgSWYgbm8gPGNwaW9fc291cmNlPlxuIgotCXByaW50ZiAgICAiICAgICAgICAgICAgICAgaXMgZ2l2ZW4gdGhlbiB0aGUgZGVmYXVsdCBjcGlvIGxpc3Qgd2lsbCBiZSBvdXRwdXQuXG4iCi0JcHJpbnRmICAgICJcbiIKLQlwcmludGYgICAgIkFsbCBvcHRpb25zIG1heSBiZSByZXBlYXRlZCBhbmQgYXJlIGludGVycHJldGVkIHNlcXVlbnRpYWxseVxuIgotCXByaW50ZiAgICAiYW5kIGltbWVkaWF0ZWx5LiAgLXUgYW5kIC1nIHN0YXRlcyBhcmUgcHJlc2VydmVkIGFjcm9zc1xuIgotCXByaW50ZiAgICAiPGNwaW9fc291cmNlPiBvcHRpb25zIHNvIGFuIGV4cGxpY2l0IFwiLXUgMCAtZyAwXCIgaXMgcmVxdWlyZWRcbiIKLQlwcmludGYgICAgInRvIHJlc2V0IHRoZSByb290L2dyb3VwIG1hcHBpbmcuXG4iCit1bmtub3duX29wdGlvbigpIHsKKwlwcmludGYgIkVSUk9SOiB1bmtub3duIG9wdGlvbiBcIiRhcmdcIlxuIiA+JjIKKwlwcmludGYgIklmIHRoZSBmaWxlbmFtZSB2YWxpZGx5IGJlZ2lucyB3aXRoICctJywgIiA+JjIKKwlwcmludGYgInRoZW4gaXQgbXVzdCBiZSBwcmVmaXhlZFxuIiA+JjIKKwlwcmludGYgImJ5ICcuLycgc28gdGhhdCBpdCB3b24ndCBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcHRpb24uIiA+JjIKKwlwcmludGYgIlxuIiA+JjIKKwl1c2FnZSA+JjIKKwlleGl0IDEKIH0KIAotYnVpbGRfbGlzdCgpIHsKLQlwcmludGYgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4jICRjcGlvX3NvdXJjZVxuIgorbGlzdF9oZWFkZXIoKSB7CisJZWNobyAiZGVwc19pbml0cmFtZnMgOj0gXFwiCit9CiAKLQlpZiBbIC1mICIkY3Bpb19zb3VyY2UiIF07IHRoZW4KLQkJcHJpbnRfbXRpbWUgIiRjcGlvX3NvdXJjZSIKLQkJY2F0ICIkY3Bpb19zb3VyY2UiCi0JZWxpZiBbIC1kICIkY3Bpb19zb3VyY2UiIF07IHRoZW4KLQkJc3JjZGlyPSQoZWNobyAiJGNwaW9fc291cmNlIiB8IHNlZCAtZSAnczovLyo6LzpnJykKLQkJZGlybGlzdD0kKGZpbmQgIiR7c3JjZGlyfSIgLXByaW50ZiAiJXAgJW0gJVUgJUdcbiIgMj4vZGV2L251bGwpCitoZWFkZXIoKSB7CisJcHJpbnRmICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIyAkMVxuIiA+PiAke291dHB1dH0KK30KIAotCQkjIElmICRkaXJsaXN0IGlzIG9ubHkgb25lIGxpbmUsIHRoZW4gdGhlIGRpcmVjdG9yeSBpcyBlbXB0eQotCQlpZiBbICAiJChlY2hvICIke2Rpcmxpc3R9IiB8IHdjIC1sKSIgLWd0IDEgXTsgdGhlbgotCQkJcHJpbnRfbXRpbWUgIiRjcGlvX3NvdXJjZSIKLQkJCi0JCQllY2hvICIke2Rpcmxpc3R9IiB8IFwKLQkJCXdoaWxlIHJlYWQgeDsgZG8KLQkJCQlwYXJzZSAke3h9Ci0JCQlkb25lCi0JCWVsc2UKLQkJCSMgRmFpbHNhZmUgaW4gY2FzZSBkaXJlY3RvcnkgaXMgZW1wdHkKLQkJCWRlZmF1bHRfaW5pdHJhbWZzCisjIHByb2Nlc3Mgb25lIGRpcmVjdG9yeSAoaW5jbCBzdWItZGlyZWN0b3JpZXMpCitkaXJfZmlsZWxpc3QoKSB7CisJJHtkZXBfbGlzdH1oZWFkZXIgIiQxIgorCisJc3JjZGlyPSQoZWNobyAiJDEiIHwgc2VkIC1lICdzOi8vKjovOmcnKQorCWRpcmxpc3Q9JChmaW5kICIke3NyY2Rpcn0iIC1wcmludGYgIiVwICVtICVVICVHXG4iIDI+L2Rldi9udWxsKQorCisJIyBJZiAkZGlybGlzdCBpcyBvbmx5IG9uZSBsaW5lLCB0aGVuIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkKKwlpZiBbICAiJChlY2hvICIke2Rpcmxpc3R9IiB8IHdjIC1sKSIgLWd0IDEgXTsgdGhlbgorCQkke2RlcF9saXN0fXByaW50X210aW1lICIkMSIKKworCQllY2hvICIke2Rpcmxpc3R9IiB8IFwKKwkJd2hpbGUgcmVhZCB4OyBkbworCQkJJHtkZXBfbGlzdH1wYXJzZSAke3h9CisJCWRvbmUKKwlmaQorfQorCisjIGlmIG9ubHkgb25lIGZpbGUgaXMgc3BlY2lmaWVkIGFuZCBpdCBpcyAuY3BpbyBmaWxlIHRoZW4gdXNlIGl0IGRpcmVjdCBhcyBmcworIyBpZiBhIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgdGhlbiBhZGQgYWxsIGZpbGVzIGluIGdpdmVuIGRpcmVjb3RyeSB0byBmcworIyBpZiBhIHJlZ3VsYXIgZmlsZSBpcyBzcGVjaWZpZWQgYXNzdW1lIGl0IGlzIGluIGdlbl9pbml0cmFtZnMgZm9ybWF0CitpbnB1dF9maWxlKCkgeworCXNvdXJjZT0iJDEiCisJaWYgWyAtZiAiJDEiIF07IHRoZW4KKwkJJHtkZXBfbGlzdH1oZWFkZXIgIiQxIgorCQlpc19jcGlvPSIkKGVjaG8gIiQxIiB8IHNlZCAncy9eLipcLmNwaW8vY3Bpby8nKSIKKwkJaWYgWyAkMiAtZXEgMCAtYSAke2lzX2NwaW99ID09ICJjcGlvIiBdOyB0aGVuCisJCQljcGlvX2ZpbGU9JDEKKwkJCVsgISAteiAke2RlcF9saXN0fSBdICYmIGVjaG8gIiQxIgorCQkJcmV0dXJuIDAKIAkJZmkKKwkJaWYgWyAteiAke2RlcF9saXN0fSBdOyB0aGVuCisJCQlwcmludF9tdGltZSAiJDEiID4+ICR7b3V0cHV0fQorCQkJY2F0ICIkMSIgICAgICAgICA+PiAke291dHB1dH0KKwkJZWxzZQorCQkJY2F0ICIkMSIgfCB3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGUgcGVybSA7IGRvCisJCQkJaWYgWyAiJHR5cGUiID09ICJmaWxlIiBdOyB0aGVuCisJCQkJCWVjaG8gIiRmaWxlIFxcIjsKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCWVsaWYgWyAtZCAiJDEiIF07IHRoZW4KKwkJZGlyX2ZpbGVsaXN0ICIkMSIKIAllbHNlCi0JCWVjaG8gIiAgJDA6IENhbm5vdCBvcGVuICckY3Bpb19zb3VyY2UnIiA+JjIKKwkJZWNobyAiICAke3Byb2d9OiBDYW5ub3Qgb3BlbiAnJDEnIiA+JjIKIAkJZXhpdCAxCiAJZmkKIH0KIAotCitwcm9nPSQwCiByb290X3VpZD0wCiByb290X2dpZD0wCitkZXBfbGlzdD0KK2NwaW9fZmlsZT0KK2NwaW9fbGlzdD0KK291dHB1dD0iL2Rldi9zdGRvdXQiCitvdXRwdXRfZmlsZT0iIgogCithcmc9IiQxIgorY2FzZSAiJGFyZyIgaW4KKwkiLWwiKQkjIGZpbGVzIGluY2x1ZGVkIGluIGluaXRyYW1mcyAtIHVzZWQgYnkga2J1aWxkCisJCWRlcF9saXN0PSJsaXN0XyIKKwkJc2hpZnQKKwkJOzsKKwkiLW8iKQkjIGdlbmVyYXRlIGd6aXBwZWQgY3BpbyBpbWFnZSBuYW1lZCAkMQorCQlzaGlmdAorCQlvdXRwdXRfZmlsZT0iJDEiCisJCWNwaW9fbGlzdD0iJChta3RlbXAgJHtUTVBESVI6LS90bXB9L2NwaW9saXN0LlhYWFhYWCkiCisJCW91dHB1dD0ke2NwaW9fbGlzdH0KKwkJc2hpZnQKKwkJOzsKK2VzYWMKIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KIAlhcmc9IiQxIgogCXNoaWZ0CiAJY2FzZSAiJGFyZyIgaW4KLQkJIi11IikKKwkJIi11IikJIyBtYXAgJDEgdG8gdWlkPTAgKHJvb3QpCiAJCQlyb290X3VpZD0iJDEiCiAJCQlzaGlmdAogCQkJOzsKLQkJIi1nIikKKwkJIi1nIikJIyBtYXAgJDEgdG8gZ2lkPTAgKHJvb3QpCiAJCQlyb290X2dpZD0iJDEiCiAJCQlzaGlmdAogCQkJOzsKLQkJIi1kIikKKwkJIi1kIikJIyBkaXNwbGF5IGRlZmF1bHQgaW5pdHJhbWZzIGxpc3QKIAkJCWRlZmF1bHRfbGlzdD0iJGFyZyIKLQkJCWRlZmF1bHRfaW5pdHJhbWZzCisJCQkke2RlcF9saXN0fWRlZmF1bHRfaW5pdHJhbWZzCiAJCQk7OwogCQkiLWgiKQogCQkJdXNhZ2UKQEAgLTE4MSwyMyArMjYwLDI3IEBACiAJCSopCiAJCQljYXNlICIkYXJnIiBpbgogCQkJCSItIiopCi0JCQkJCXByaW50ZiAiRVJST1I6IHVua25vd24gb3B0aW9uIFwiJGFyZ1wiXG4iID4mMgotCQkJCQlwcmludGYgIklmIHRoZSBmaWxlbmFtZSB2YWxpZGx5IGJlZ2lucyB3aXRoICctJywgdGhlbiBpdCBtdXN0IGJlIHByZWZpeGVkXG4iID4mMgotCQkJCQlwcmludGYgImJ5ICcuLycgc28gdGhhdCBpdCB3b24ndCBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcHRpb24uIiA+JjIKLQkJCQkJcHJpbnRmICJcbiIgPiYyCi0JCQkJCXVzYWdlID4mMgotCQkJCQlleGl0IDEKKwkJCQkJdW5rbm93bl9vcHRpb24KIAkJCQkJOzsKLQkJCQkqKQotCQkJCQljcGlvX3NvdXJjZT0iJGFyZyIKLQkJCQkJYnVpbGRfbGlzdAorCQkJCSopCSMgaW5wdXQgZmlsZS9kaXIgLSBwcm9jZXNzIGl0CisJCQkJCWlucHV0X2ZpbGUgIiRhcmciICIkIyIKIAkJCQkJOzsKIAkJCWVzYWMKIAkJCTs7CiAJZXNhYwogZG9uZQogCi0jIHNwaXQgb3V0IHRoZSBkZWZhdWx0IGNwaW8gbGlzdCBpZiBhIHNvdXJjZSBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQKLVsgLXogIiRjcGlvX3NvdXJjZSIgLWEgLXogIiRkZWZhdWx0X2xpc3QiIF0gJiYgZGVmYXVsdF9pbml0cmFtZnMKLQorIyBJZiBvdXRwdXRfZmlsZSBpcyBzZXQgd2Ugd2lsbCBnZW5lcmF0ZSBjcGlvIGFyY2hpdmUgYW5kIGd6aXAgaXQKKyMgd2UgYXJlIGNhcmVmdWxsIHRvIGRlbGV0ZSB0bXAgZmlsZXMKK2lmIFsgISAteiAke291dHB1dF9maWxlfSBdOyB0aGVuCisJaWYgWyAteiAke2NwaW9fZmlsZX0gXTsgdGhlbgorCQljcGlvX3RmaWxlPSIkKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3Bpb2ZpbGUuWFhYWFhYKSIKKwkJdXNyL2dlbl9pbml0X2NwaW8gJHtjcGlvX2xpc3R9ID4gJHtjcGlvX3RmaWxlfQorCWVsc2UKKwkJY3Bpb190ZmlsZT0ke2NwaW9fZmlsZX0KKwlmaQorCXJtICR7Y3Bpb19saXN0fQorCWNhdCAke2NwaW9fdGZpbGV9IHwgZ3ppcCAtZiAtOSAtID4gJHtvdXRwdXRfZmlsZX0KKwlbIC16ICR7Y3Bpb19maWxlfSBdICYmIHJtICR7Y3Bpb190ZmlsZX0KK2ZpCiBleGl0IDAKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDEwZWVhZTUuLjgwMTJkMTAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC02MywyMCArNjQsNiBAQAogCX0KIH0KIAotc3RhdGljIGNoYXIgKmZnZXRzX2NoZWNrX3N0cmVhbShjaGFyICpzLCBpbnQgc2l6ZSwgRklMRSAqc3RyZWFtKQotewotCWNoYXIgKnJldCA9IGZnZXRzKHMsIHNpemUsIHN0cmVhbSk7Ci0KLQlpZiAocmV0ID09IE5VTEwgJiYgZmVvZihzdHJlYW0pKSB7Ci0JCXByaW50ZihfKCJhYm9ydGVkIVxuXG4iKSk7Ci0JCXByaW50ZihfKCJDb25zb2xlIGlucHV0IGlzIGNsb3NlZC4gIikpOwotCQlwcmludGYoXygiUnVuICdtYWtlIG9sZGNvbmZpZycgdG8gdXBkYXRlIGNvbmZpZ3VyYXRpb24uXG5cbiIpKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBjb25mX2Fza3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqZGVmKQogewogCWVudW0gc3ltYm9sX3R5cGUgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOwpAQCAtMTE0LDcgKzEwMSw3IEBACiAJCWNoZWNrX3N0ZGluKCk7CiAJY2FzZSBhc2tfYWxsOgogCQlmZmx1c2goc3Rkb3V0KTsKLQkJZmdldHNfY2hlY2tfc3RyZWFtKGxpbmUsIDEyOCwgc3RkaW4pOworCQlmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKIAkJcmV0dXJuOwogCWNhc2Ugc2V0X2RlZmF1bHQ6CiAJCXByaW50ZigiJXNcbiIsIGRlZik7CkBAIC0zMjgsOCArMzE1LDcgQEAKIAkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CiAJCWRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOwogCQljbnQgPSBkZWYgPSAwOwotCQlsaW5lWzBdID0gJzAnOwotCQlsaW5lWzFdID0gMDsKKwkJbGluZVswXSA9IDA7CiAJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewogCQkJaWYgKCFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzcwLDcgKzM1Niw3IEBACiAJCQljaGVja19zdGRpbigpOwogCQljYXNlIGFza19hbGw6CiAJCQlmZmx1c2goc3Rkb3V0KTsKLQkJCWZnZXRzX2NoZWNrX3N0cmVhbShsaW5lLCAxMjgsIHN0ZGluKTsKKwkJCWZnZXRzKGxpbmUsIDEyOCwgc3RkaW4pOwogCQkJc3RyaXAobGluZSk7CiAJCQlpZiAobGluZVswXSA9PSAnPycpIHsKIAkJCQlwcmludGYoIlxuJXNcbiIsIG1lbnUtPnN5bS0+aGVscCA/CkBAIC01NDYsNyArNTMyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlICdoJzoKIAkJY2FzZSAnPyc6Ci0JCQlwcmludGYoIiVzIFstb3wtc10gY29uZmlnXG4iLCBhdlswXSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlNlZSBSRUFETUUgZm9yIHVzYWdlIGluZm9cbiIpOwogCQkJZXhpdCgwKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggMWI4ODgyZC4uMWI1ZGY1OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCQkJCXN5bS0+ZmxhZ3MgfD0gZS0+cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9ORVc7CiAJfQogCi0Jc3ltX2NoYW5nZV9jb3VudCA9IGNvbmZfd2FybmluZ3MgJiYgY29uZl91bnNhdmVkOworCXN5bV9jaGFuZ2VfY291bnQgPSBjb25mX3dhcm5pbmdzIHx8IGNvbmZfdW5zYXZlZDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCmluZGV4IGRiMDdhZTcuLmJlMDIwMGUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYworKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKQEAgLTE5Niw4ICsxOTYsOCBAQAogCiAJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwogCi0Jd25vdXRyZWZyZXNoKGxpc3QpOwogCXdub3V0cmVmcmVzaChkaWFsb2cpOworCXdub3V0cmVmcmVzaChsaXN0KTsKIAlkb3VwZGF0ZSgpOwogCiAJd2hpbGUgKGtleSAhPSBFU0MpIHsKQEAgLTIyNSwxMiArMjI1LDExIEBACiAJCQkJCX0KIAkJCQkJc2Nyb2xsLS07CiAJCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbc2Nyb2xsICogMyArIDFdLCBzdGF0dXNbc2Nyb2xsXSwgMCwgVFJVRSk7Ci0JCQkJCXdub3V0cmVmcmVzaChsaXN0KTsKLQogCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fbm8sCiAJCQkJCQkgICAgIHNjcm9sbCwgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKIAotCQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCQkJd3JlZnJlc2gobGlzdCk7CiAKIAkJCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCiAJCQkJfSBlbHNlCkBAIC0yNTIsMTIgKzI1MSwxMiBAQAogCQkJCQlzY3JvbGwrKzsKIAkJCQkJcHJpbnRfaXRlbShsaXN0LCBpdGVtc1soc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpICogMyArIDFdLAogCQkJCQkJICAgc3RhdHVzW3Njcm9sbCArIG1heF9jaG9pY2UgLSAxXSwgbWF4X2Nob2ljZSAtIDEsIFRSVUUpOwotCQkJCQl3bm91dHJlZnJlc2gobGlzdCk7CiAKIAkJCQkJcHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBpdGVtX25vLAogCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7CiAKLQkJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJCXdyZWZyZXNoKGxpc3QpOwogCiAJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVzcyAqLwogCQkJCX0gZWxzZQpAQCAtMjcxLDggKzI3MCw4IEBACiAJCQkJY2hvaWNlID0gaTsKIAkJCQlwcmludF9pdGVtKGxpc3QsIGl0ZW1zWyhzY3JvbGwgKyBjaG9pY2UpICogMyArIDFdLAogCQkJCQkgICBzdGF0dXNbc2Nyb2xsICsgY2hvaWNlXSwgY2hvaWNlLCBUUlVFKTsKLQkJCQl3bm91dHJlZnJlc2gobGlzdCk7Ci0JCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCQl3cmVmcmVzaChsaXN0KTsKIAkJCX0KIAkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVzcyAqLwogCQl9CkBAIC0zMDYsOCArMzA1LDggQEAKIAkJCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIGkpICogMyArIDFdLAogCQkJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBpXSwgaSwgaSA9PSBjaG9pY2UpOwogCQkJCX0KLQkJCQl3bm91dHJlZnJlc2gobGlzdCk7Ci0JCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCQl3cmVmcmVzaChsaXN0KTsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBpdGVtX25vOyBpKyspCiAJCQkJCWlmIChzdGF0dXNbaV0pCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwppbmRleCAwOTUxMmI1Li5iZjgwNTJmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMKQEAgLTU4LDggKzU4LDcgQEAKIAogI2luY2x1ZGUgImRpYWxvZy5oIgogCi0jZGVmaW5lIElURU1fSURFTlQgMSAgIC8qIEluZGVudCBvZiBtZW51IGVudHJpZXMuIEZpeGVkIGZvciBhbGwgbWVudXMgKi8KLXN0YXRpYyBpbnQgbWVudV93aWR0aDsKK3N0YXRpYyBpbnQgbWVudV93aWR0aCwgaXRlbV94OwogCiAvKgogICogUHJpbnQgbWVudSBpdGVtCkBAIC03MCw3ICs2OSw3IEBACiAJaW50IGo7CiAJY2hhciAqbWVudV9pdGVtID0gbWFsbG9jKG1lbnVfd2lkdGggKyAxKTsKIAotCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0gSVRFTV9JREVOVCk7CisJc3RybmNweShtZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGggLSBpdGVtX3gpOwogCW1lbnVfaXRlbVttZW51X3dpZHRoXSA9IDA7CiAJaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5NbUhoIik7CiAKQEAgLTg3LDEzICs4NiwxMyBAQAogCXdjbHJ0b2VvbCh3aW4pOwogI2VuZGlmCiAJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGl0ZW1fc2VsZWN0ZWRfYXR0ciA6IGl0ZW1fYXR0cik7Ci0JbXZ3YWRkc3RyKHdpbiwgY2hvaWNlLCBJVEVNX0lERU5ULCBtZW51X2l0ZW0pOworCW12d2FkZHN0cih3aW4sIGNob2ljZSwgaXRlbV94LCBtZW51X2l0ZW0pOwogCWlmIChob3RrZXkpIHsKIAkJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IHRhZ19rZXlfc2VsZWN0ZWRfYXR0ciA6IHRhZ19rZXlfYXR0cik7Ci0JCW12d2FkZGNoKHdpbiwgY2hvaWNlLCBJVEVNX0lERU5UICsgaiwgbWVudV9pdGVtW2pdKTsKKwkJbXZ3YWRkY2god2luLCBjaG9pY2UsIGl0ZW1feCArIGosIG1lbnVfaXRlbVtqXSk7CiAJfQogCWlmIChzZWxlY3RlZCkgewotCQl3bW92ZSh3aW4sIGNob2ljZSwgSVRFTV9JREVOVCArIDEpOworCQl3bW92ZSh3aW4sIGNob2ljZSwgaXRlbV94ICsgMSk7CiAJfQogCWZyZWUobWVudV9pdGVtKTsKIAl3cmVmcmVzaCh3aW4pOwpAQCAtMjI3LDYgKzIyNiw4IEBACiAJZHJhd19ib3goZGlhbG9nLCBib3hfeSwgYm94X3gsIG1lbnVfaGVpZ2h0ICsgMiwgbWVudV93aWR0aCArIDIsCiAJCSBtZW51Ym94X2JvcmRlcl9hdHRyLCBtZW51Ym94X2F0dHIpOwogCisJaXRlbV94ID0gKG1lbnVfd2lkdGggLSA3MCkgLyAyOworCiAJLyogU2V0IGNob2ljZSB0byBkZWZhdWx0IGl0ZW0gKi8KIAlmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKQogCQlpZiAoc3RyY21wKGN1cnJlbnQsIGl0ZW1zW2kgKiAyXSkgPT0gMCkKQEAgLTI2MywxMCArMjY0LDEwIEBACiAJd25vdXRyZWZyZXNoKG1lbnUpOwogCiAJcHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9ubywgc2Nyb2xsLAotCQkgICAgIGJveF95LCBib3hfeCArIElURU1fSURFTlQgKyAxLCBtZW51X2hlaWdodCk7CisJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOwogCiAJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCXdtb3ZlKG1lbnUsIGNob2ljZSwgSVRFTV9JREVOVCArIDEpOworCXdtb3ZlKG1lbnUsIGNob2ljZSwgaXRlbV94ICsgMSk7CiAJd3JlZnJlc2gobWVudSk7CiAKIAl3aGlsZSAoa2V5ICE9IEVTQykgewpAQCAtMzQ5LDcgKzM1MCw3IEBACiAJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBUUlVFKTsKIAogCQkJcHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9ubywgc2Nyb2xsLAotCQkJCSAgICAgYm94X3ksIGJveF94ICsgSVRFTV9JREVOVCArIDEsIG1lbnVfaGVpZ2h0KTsKKwkJCQkgICAgIGJveF95LCBib3hfeCArIGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsKIAogCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CiAJCQl3cmVmcmVzaChtZW51KTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWttYWtlZmlsZSBiL3NjcmlwdHMvbWttYWtlZmlsZQppbmRleCBhMjJjYmVkLi43ZjlkNTQ0IDEwMDY0NAotLS0gYS9zY3JpcHRzL21rbWFrZWZpbGUKKysrIGIvc2NyaXB0cy9ta21ha2VmaWxlCkBAIC0xMCw3ICsxMCwxMCBAQAogIyAkNCAtIHBhdGNobGV2ZWwKIAogCi1jYXQgPDwgRU9GCit0ZXN0ICEgLXIgJDIvTWFrZWZpbGUgLW8gLU8gJDIvTWFrZWZpbGUgfHwgZXhpdCAwCitlY2hvICIgIEdFTiAgICAgJDIvTWFrZWZpbGUiCisKK2NhdCA8PCBFT0YgPiAkMi9NYWtlZmlsZQogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAkMDogZG9uJ3QgZWRpdAogCiBWRVJTSU9OID0gJDMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA4NGUyMTIwLi4zN2Y2N2MyIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC0zNzQsMTAgKzM3NCwxMCBAQAogCQkgICAgIGtlcm5lbF91bG9uZ190ICphcnIsIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspIHsKLQkJaWYgKGFycltpL0JJVFNfUEVSX0xPTkddICYgKDEgPDwgKGklQklUU19QRVJfTE9ORykpKQotCQkJc3ByaW50ZihhbGlhcytzdHJsZW4oYWxpYXMpLCAiJVgsKiIsIGkpOwotCX0KKworCWZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorCQlpZiAoYXJyW2kgLyBCSVRTX1BFUl9MT05HXSAmICgxIDw8IChpJUJJVFNfUEVSX0xPTkcpKSkKKwkJCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiJVgsKiIsIGkpOwogfQogCiAvKiBpbnB1dDpiMHYwcDBlMC1lWGtYclhhWG1YbFhzWGZYd1ggd2hlcmUgWCBpcyBjb21tYS1zZXBhcmF0ZWQgJTAyWC4gKi8KQEAgLTM4NiwzOSArMzg2LDM3IEBACiB7CiAJc3ByaW50ZihhbGlhcywgImlucHV0OiIpOwogCi0JQUREKGFsaWFzLCAiYiIsIGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQlVTLCBpZC0+aWQuYnVzdHlwZSk7Ci0JQUREKGFsaWFzLCAidiIsIGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SLCBpZC0+aWQudmVuZG9yKTsKLQlBREQoYWxpYXMsICJwIiwgaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNULAotCSAgICBpZC0+aWQucHJvZHVjdCk7Ci0JQUREKGFsaWFzLCAiZSIsIGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVSU0lPTiwKLQkgICAgaWQtPmlkLnZlcnNpb24pOworCUFERChhbGlhcywgImIiLCBpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQlVTLCBpZC0+YnVzdHlwZSk7CisJQUREKGFsaWFzLCAidiIsIGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IsIGlkLT52ZW5kb3IpOworCUFERChhbGlhcywgInAiLCBpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCwgaWQtPnByb2R1Y3QpOworCUFERChhbGlhcywgImUiLCBpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVSU0lPTiwgaWQtPnZlcnNpb24pOwogCiAJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICItZSoiKTsKLQlpZiAoaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCkKKwlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUKQogCQlkb19pbnB1dChhbGlhcywgaWQtPmV2Yml0LCAwLCBFVl9NQVgpOwogCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiayoiKTsKLQlpZiAoaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQpCiAJCWRvX2lucHV0KGFsaWFzLCBpZC0+a2V5Yml0LCBLRVlfTUlOX0lOVEVSRVNUSU5HLCBLRVlfTUFYKTsKIAlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgInIqIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUkVMQklUKQorCWlmIChpZC0+ZmxhZ3MgJiBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUkVMQklUKQogCQlkb19pbnB1dChhbGlhcywgaWQtPnJlbGJpdCwgMCwgUkVMX01BWCk7CiAJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICJhKiIpOwotCWlmIChpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX0FCU0JJVCkKKwlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX0FCU0JJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5hYnNiaXQsIDAsIEFCU19NQVgpOwogCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAibSoiKTsKLQlpZiAoaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9NU0NJVCkKKwlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX01TQ0lUKQogCQlkb19pbnB1dChhbGlhcywgaWQtPm1zY2JpdCwgMCwgTVNDX01BWCk7CiAJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICJsKiIpOwotCWlmIChpZC0+ZmxhZ3MmSU5QVVRfREVWSUNFX0lEX01BVENIX0xFREJJVCkKKwlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX0xFREJJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5sZWRiaXQsIDAsIExFRF9NQVgpOwogCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAicyoiKTsKLQlpZiAoaWQtPmZsYWdzJklOUFVUX0RFVklDRV9JRF9NQVRDSF9TTkRCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TTkRCSVQpCiAJCWRvX2lucHV0KGFsaWFzLCBpZC0+c25kYml0LCAwLCBTTkRfTUFYKTsKIAlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgImYqIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRkZCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9GRkJJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5mZmJpdCwgMCwgRkZfTUFYKTsKIAlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgIncqIik7Ci0JaWYgKGlkLT5mbGFncyZJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU1dCSVQpCisJaWYgKGlkLT5mbGFncyAmIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TV0JJVCkKIAkJZG9faW5wdXQoYWxpYXMsIGlkLT5zd2JpdCwgMCwgU1dfTUFYKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCAwYjkyZGRmLi5kMGY4NmVkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC00ODcsMjIgKzQ4NywyNCBAQAogICogICBhdHN5bSAgID1fX3BhcmFtKgogICoKICAqIFBhdHRlcm4gMjoKLSAqICAgTWFueSBkcml2ZXJzIHV0aWxpc2UgYSAqX2RyaXZlciBjb250YWluZXIgd2l0aCByZWZlcmVuY2VzIHRvCisgKiAgIE1hbnkgZHJpdmVycyB1dGlsaXNlIGEgKmRyaXZlciBjb250YWluZXIgd2l0aCByZWZlcmVuY2VzIHRvCiAgKiAgIGFkZCwgcmVtb3ZlLCBwcm9iZSBmdW5jdGlvbnMgZXRjLgogICogICBUaGVzZSBmdW5jdGlvbnMgbWF5IG9mdGVuIGJlIG1hcmtlZCBfX2luaXQgYW5kIHdlIGRvIG5vdCB3YW50IHRvCiAgKiAgIHdhcm4gaGVyZS4KICAqICAgdGhlIHBhdHRlcm4gaXMgaWRlbnRpZmllZCBieToKLSAqICAgdG9zZWMgICA9IC5pbml0LnRleHQgfCAuZXhpdC50ZXh0CisgKiAgIHRvc2VjICAgPSAuaW5pdC50ZXh0IHwgLmV4aXQudGV4dCB8IC5pbml0LmRhdGEKICAqICAgZnJvbXNlYyA9IC5kYXRhCi0gKiAgIGF0c3ltID0gKl9kcml2ZXIsICpfb3BzLCAqX3Byb2JlLCAqcHJvYmVfb25lCisgKiAgIGF0c3ltID0gKmRyaXZlciwgKl90ZW1wbGF0ZSwgKl9zaHQsICpfb3BzLCAqX3Byb2JlLCAqcHJvYmVfb25lCiAgKiovCiBzdGF0aWMgaW50IHNlY3JlZl93aGl0ZWxpc3QoY29uc3QgY2hhciAqdG9zZWMsIGNvbnN0IGNoYXIgKmZyb21zZWMsCi0JCQkgIGNvbnN0IGNoYXIgKmF0c3ltKQorCQkJICAgIGNvbnN0IGNoYXIgKmF0c3ltKQogewogCWludCBmMSA9IDEsIGYyID0gMTsKIAljb25zdCBjaGFyICoqczsKIAljb25zdCBjaGFyICpwYXQyc3ltW10gPSB7Ci0JCSJfZHJpdmVyIiwKKwkJImRyaXZlciIsCisJCSJfdGVtcGxhdGUiLCAvKiBzY3NpIHVzZXMgKl90ZW1wbGF0ZSBhIGxvdCAqLworCQkiX3NodCIsICAgICAgLyogc2NzaSBhbHNvIHVzZWQgKl9zaHQgdG8gc29tZSBleHRlbnQgKi8KIAkJIl9vcHMiLAogCQkiX3Byb2JlIiwKIAkJIl9wcm9iZV9vbmUiLApAQCAtNTIyLDcgKzUyNCw4IEBACiAKIAkvKiBDaGVjayBmb3IgcGF0dGVybiAyICovCiAJaWYgKChzdHJjbXAodG9zZWMsICIuaW5pdC50ZXh0IikgIT0gMCkgJiYKLQkgICAgKHN0cmNtcCh0b3NlYywgIi5leGl0LnRleHQiKSAhPSAwKSkKKwkgICAgKHN0cmNtcCh0b3NlYywgIi5leGl0LnRleHQiKSAhPSAwKSAmJgorCSAgICAoc3RyY21wKHRvc2VjLCAiLmluaXQuZGF0YSIpICE9IDApKQogCQlmMiA9IDA7CiAJaWYgKHN0cmNtcChmcm9tc2VjLCAiLmRhdGEiKSAhPSAwKQogCQlmMiA9IDA7CkBAIC02NTgsNyArNjYxLDcgQEAKIAkJd2FybigiJXMgLSBTZWN0aW9uIG1pc21hdGNoOiByZWZlcmVuY2UgdG8gJXM6JXMgZnJvbSAlcyAiCiAJCSAgICAgImJlZm9yZSAnJXMnIChhdCBvZmZzZXQgLTB4JWxseClcbiIsCiAJCSAgICAgbW9kbmFtZSwgc2VjbmFtZSwgcmVmc3ltbmFtZSwgZnJvbXNlYywKLQkJICAgICBlbGYtPnN0cnRhYiArIGJlZm9yZS0+c3RfbmFtZSwKKwkJICAgICBlbGYtPnN0cnRhYiArIGFmdGVyLT5zdF9uYW1lLAogCQkgICAgIChsb25nIGxvbmcpci5yX29mZnNldCk7CiAJfSBlbHNlIHsKIAkJd2FybigiJXMgLSBTZWN0aW9uIG1pc21hdGNoOiByZWZlcmVuY2UgdG8gJXM6JXMgZnJvbSAlcyAiCkBAIC02OTQsMjkgKzY5Nyw3OSBAQAogCiAJLyogV2FsayB0aHJvdWdoIGFsbCBzZWN0aW9ucyAqLwogCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewotCQlFbGZfUmVsYSAqcmVsYTsKLQkJRWxmX1JlbGEgKnN0YXJ0ID0gKHZvaWQgKiloZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKLQkJRWxmX1JlbGEgKnN0b3AgID0gKHZvaWQqKXN0YXJ0ICsgc2VjaGRyc1tpXS5zaF9zaXplOwotCQljb25zdCBjaGFyICpuYW1lID0gc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSArCi0JCQkJCQlzdHJsZW4oIi5yZWxhIik7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lOworCQljb25zdCBjaGFyICpzZWNuYW1lOworCQlFbGZfUmVsYSByOworCQl1bnNpZ25lZCBpbnQgcl9zeW07CiAJCS8qIFdlIHdhbnQgdG8gcHJvY2VzcyBvbmx5IHJlbG9jYXRpb24gc2VjdGlvbnMgYW5kIG5vdCAuaW5pdCAqLwotCQlpZiAoc2VjdGlvbl9yZWZfb2sobmFtZSkgfHwgKHNlY2hkcnNbaV0uc2hfdHlwZSAhPSBTSFRfUkVMQSkpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKHJlbGEgPSBzdGFydDsgcmVsYSA8IHN0b3A7IHJlbGErKykgewotCQkJRWxmX1JlbGEgcjsKLQkJCWNvbnN0IGNoYXIgKnNlY25hbWU7Ci0JCQlyLnJfb2Zmc2V0ID0gVE9fTkFUSVZFKHJlbGEtPnJfb2Zmc2V0KTsKLQkJCXIucl9pbmZvICAgPSBUT19OQVRJVkUocmVsYS0+cl9pbmZvKTsKLQkJCXIucl9hZGRlbmQgPSBUT19OQVRJVkUocmVsYS0+cl9hZGRlbmQpOwotCQkJc3ltID0gZWxmLT5zeW10YWJfc3RhcnQgKyBFTEZfUl9TWU0oci5yX2luZm8pOwotCQkJLyogU2tpcCBzcGVjaWFsIHNlY3Rpb25zICovCi0JCQlpZiAoc3ltLT5zdF9zaG5keCA+PSBTSE5fTE9SRVNFUlZFKQorCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKSB7CisJCQlFbGZfUmVsYSAqcmVsYTsKKwkJCUVsZl9SZWxhICpzdGFydCA9ICh2b2lkICopaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisJCQlFbGZfUmVsYSAqc3RvcCAgPSAodm9pZCopc3RhcnQgKyBzZWNoZHJzW2ldLnNoX3NpemU7CisJCQluYW1lICs9IHN0cmxlbigiLnJlbGEiKTsKKwkJCWlmIChzZWN0aW9uX3JlZl9vayhuYW1lKSkKIAkJCQljb250aW51ZTsKIAotCQkJc2VjbmFtZSA9IHNlY3N0cmluZ3MgKyBzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWU7Ci0JCQlpZiAoc2VjdGlvbihzZWNuYW1lKSkKLQkJCQl3YXJuX3NlY19taXNtYXRjaChtb2RuYW1lLCBuYW1lLCBlbGYsIHN5bSwgcik7CisJCQlmb3IgKHJlbGEgPSBzdGFydDsgcmVsYSA8IHN0b3A7IHJlbGErKykgeworCQkJCXIucl9vZmZzZXQgPSBUT19OQVRJVkUocmVsYS0+cl9vZmZzZXQpOworI2lmIEtFUk5FTF9FTEZDTEFTUyA9PSBFTEZDTEFTUzY0CisJCQkJaWYgKGhkci0+ZV9tYWNoaW5lID09IEVNX01JUFMpIHsKKwkJCQkJcl9zeW0gPSBFTEY2NF9NSVBTX1JfU1lNKHJlbGEtPnJfaW5mbyk7CisJCQkJCXJfc3ltID0gVE9fTkFUSVZFKHJfc3ltKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyLnJfaW5mbyA9IFRPX05BVElWRShyZWxhLT5yX2luZm8pOworCQkJCQlyX3N5bSA9IEVMRl9SX1NZTShyLnJfaW5mbyk7CisJCQkJfQorI2Vsc2UKKwkJCQlyLnJfaW5mbyA9IFRPX05BVElWRShyZWxhLT5yX2luZm8pOworCQkJCXJfc3ltID0gRUxGX1JfU1lNKHIucl9pbmZvKTsKKyNlbmRpZgorCQkJCXIucl9hZGRlbmQgPSBUT19OQVRJVkUocmVsYS0+cl9hZGRlbmQpOworCQkJCXN5bSA9IGVsZi0+c3ltdGFiX3N0YXJ0ICsgcl9zeW07CisJCQkJLyogU2tpcCBzcGVjaWFsIHNlY3Rpb25zICovCisJCQkJaWYgKHN5bS0+c3Rfc2huZHggPj0gU0hOX0xPUkVTRVJWRSkKKwkJCQkJY29udGludWU7CisKKwkJCQlzZWNuYW1lID0gc2Vjc3RyaW5ncyArCisJCQkJCXNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfbmFtZTsKKwkJCQlpZiAoc2VjdGlvbihzZWNuYW1lKSkKKwkJCQkJd2Fybl9zZWNfbWlzbWF0Y2gobW9kbmFtZSwgbmFtZSwKKwkJCQkJCQkgIGVsZiwgc3ltLCByKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1JFTCkgeworCQkJRWxmX1JlbCAqcmVsOworCQkJRWxmX1JlbCAqc3RhcnQgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OworCQkJRWxmX1JlbCAqc3RvcCAgPSAodm9pZCopc3RhcnQgKyBzZWNoZHJzW2ldLnNoX3NpemU7CisJCQluYW1lICs9IHN0cmxlbigiLnJlbCIpOworCQkJaWYgKHNlY3Rpb25fcmVmX29rKG5hbWUpKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3IgKHJlbCA9IHN0YXJ0OyByZWwgPCBzdG9wOyByZWwrKykgeworCQkJCXIucl9vZmZzZXQgPSBUT19OQVRJVkUocmVsLT5yX29mZnNldCk7CisjaWYgS0VSTkVMX0VMRkNMQVNTID09IEVMRkNMQVNTNjQKKwkJCQlpZiAoaGRyLT5lX21hY2hpbmUgPT0gRU1fTUlQUykgeworCQkJCQlyX3N5bSA9IEVMRjY0X01JUFNfUl9TWU0ocmVsLT5yX2luZm8pOworCQkJCQlyX3N5bSA9IFRPX05BVElWRShyX3N5bSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJci5yX2luZm8gPSBUT19OQVRJVkUocmVsLT5yX2luZm8pOworCQkJCQlyX3N5bSA9IEVMRl9SX1NZTShyLnJfaW5mbyk7CisJCQkJfQorI2Vsc2UKKwkJCQlyLnJfaW5mbyA9IFRPX05BVElWRShyZWwtPnJfaW5mbyk7CisJCQkJcl9zeW0gPSBFTEZfUl9TWU0oci5yX2luZm8pOworI2VuZGlmCisJCQkJci5yX2FkZGVuZCA9IDA7CisJCQkJc3ltID0gZWxmLT5zeW10YWJfc3RhcnQgKyByX3N5bTsKKwkJCQkvKiBTa2lwIHNwZWNpYWwgc2VjdGlvbnMgKi8KKwkJCQlpZiAoc3ltLT5zdF9zaG5keCA+PSBTSE5fTE9SRVNFUlZFKQorCQkJCQljb250aW51ZTsKKworCQkJCXNlY25hbWUgPSBzZWNzdHJpbmdzICsKKwkJCQkJc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lOworCQkJCWlmIChzZWN0aW9uKHNlY25hbWUpKQorCQkJCQl3YXJuX3NlY19taXNtYXRjaChtb2RuYW1lLCBuYW1lLAorCQkJCQkJCSAgZWxmLCBzeW0sIHIpOworCQkJfQogCQl9CiAJfQogfQpAQCAtODIwLDYgKzg3Myw3IEBACiAgKiBGb3Igb3VyIGZ1dHVyZSB7aW59c2FuaXR5LCBhZGQgYSBjb21tZW50IHRoYXQgdGhpcyBpcyB0aGUgcHBjIC5vcGQKICAqIHNlY3Rpb24sIG5vdCB0aGUgaWE2NCAub3BkIHNlY3Rpb24uCiAgKiBpYTY0IC5vcGQgc2hvdWxkIG5vdCBwb2ludCB0byBkaXNjYXJkZWQgc2VjdGlvbnMuCisgKiBbLnJvZGF0YV0gbGlrZSBmb3IgLmluaXQudGV4dCB3ZSBpZ25vcmUgLnJvZGF0YSByZWZlcmVuY2VzIC1zYW1lIHJlYXNvbgogICoqLwogc3RhdGljIGludCBleGl0X3NlY3Rpb25fcmVmX29rKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC04MjksNiArODgzLDcgQEAKIAkJIi5leGl0LnRleHQiLAogCQkiLmV4aXQuZGF0YSIsCiAJCSIuaW5pdC50ZXh0IiwKKwkJIi5yb2RhdGEiLAogCQkiLm9wZCIsIC8qIFNlZSBjb21tZW50IFtPUERdICovCiAJCSIudG9jMSIsICAvKiB1c2VkIGJ5IHBwYzY0ICovCiAJCSIuYWx0aW5zdHJ1Y3Rpb25zIiwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuaCBiL3NjcmlwdHMvbW9kL21vZHBvc3QuaAppbmRleCBiMTQyNTVjLi44NjFkODY2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIEVMRl9TVF9CSU5EIEVMRjMyX1NUX0JJTkQKICNkZWZpbmUgRUxGX1NUX1RZUEUgRUxGMzJfU1RfVFlQRQogCisjZGVmaW5lIEVsZl9SZWwgICAgIEVsZjMyX1JlbAogI2RlZmluZSBFbGZfUmVsYSAgICBFbGYzMl9SZWxhCiAjZGVmaW5lIEVMRl9SX1NZTSAgIEVMRjMyX1JfU1lNCiAjZGVmaW5lIEVMRl9SX1RZUEUgIEVMRjMyX1JfVFlQRQpAQCAtMzQsMTEgKzM1LDMxIEBACiAjZGVmaW5lIEVMRl9TVF9CSU5EIEVMRjY0X1NUX0JJTkQKICNkZWZpbmUgRUxGX1NUX1RZUEUgRUxGNjRfU1RfVFlQRQogCisjZGVmaW5lIEVsZl9SZWwgICAgIEVsZjY0X1JlbAogI2RlZmluZSBFbGZfUmVsYSAgICBFbGY2NF9SZWxhCiAjZGVmaW5lIEVMRl9SX1NZTSAgIEVMRjY0X1JfU1lNCiAjZGVmaW5lIEVMRl9SX1RZUEUgIEVMRjY0X1JfVFlQRQogI2VuZGlmCiAKKy8qIFRoZSA2NC1iaXQgTUlQUyBFTEYgQUJJIHVzZXMgYW4gdW51c3VhbCByZWxvYyBmb3JtYXQuICovCit0eXBlZGVmIHN0cnVjdAoreworCUVsZjMyX1dvcmQgICAgcl9zeW07CS8qIFN5bWJvbCBpbmRleCAqLworCXVuc2lnbmVkIGNoYXIgcl9zc3ltOwkvKiBTcGVjaWFsIHN5bWJvbCBmb3IgMm5kIHJlbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIHJfdHlwZTM7CS8qIDNyZCByZWxvY2F0aW9uIHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHJfdHlwZTI7CS8qIDJuZCByZWxvY2F0aW9uIHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHJfdHlwZTE7CS8qIDFzdCByZWxvY2F0aW9uIHR5cGUgKi8KK30gX0VsZjY0X01pcHNfUl9JbmZvOworCit0eXBlZGVmIHVuaW9uCit7CisJRWxmNjRfWHdvcmQJCXJfaW5mb19udW1iZXI7CisJX0VsZjY0X01pcHNfUl9JbmZvCXJfaW5mb19maWVsZHM7Cit9IF9FbGY2NF9NaXBzX1JfSW5mb191bmlvbjsKKworI2RlZmluZSBFTEY2NF9NSVBTX1JfU1lNKGkpIFwKKyAgKChfX2V4dGVuc2lvbl9fIChfRWxmNjRfTWlwc19SX0luZm9fdW5pb24pKGkpKS5yX2luZm9fZmllbGRzLnJfc3ltKQorCiAjaWYgS0VSTkVMX0VMRkRBVEEgIT0gSE9TVF9FTEZEQVRBCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2VuZGlhbihjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRlc3QsIHVuc2lnbmVkIGludCBzaXplKQpAQCAtNDgsOCArNjksNiBAQAogCQkoKHVuc2lnbmVkIGNoYXIqKWRlc3QpW2ldID0gKCh1bnNpZ25lZCBjaGFyKilzcmMpW3NpemUgLSBpLTFdOwogfQogCi0KLQogI2RlZmluZSBUT19OQVRJVkUoeCkJCQkJCQlcCiAoewkJCQkJCQkJXAogCXR5cGVvZih4KSBfX3g7CQkJCQkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9uYW1lc3BhY2UucGwgYi9zY3JpcHRzL25hbWVzcGFjZS5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9zY3JpcHRzL3Nob3dfZGVsdGEgYi9zY3JpcHRzL3Nob3dfZGVsdGEKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy92ZXJfbGludXggYi9zY3JpcHRzL3Zlcl9saW51eAppbmRleCBiZWI0M2VmNy4uODQ5OTlmNiAxMDA3NTUKLS0tIGEvc2NyaXB0cy92ZXJfbGludXgKKysrIGIvc2NyaXB0cy92ZXJfbGludXgKQEAgLTM5LDEwICszOSwxMCBAQAogZnNjay5qZnMgLVYgMj4mMSB8IGdyZXAgdmVyc2lvbiB8IHNlZCAncy8sLy8nIHwgIGF3ayBcCiAnTlI9PTEge3ByaW50ICJqZnN1dGlscyAgICAgICAgICAgICAgIiwgJDN9JwogCi1yZWlzZXJmc2NrIC1WIDI+JjEgfCBncmVwIHJlaXNlcmZzY2sgfCBhd2sgXAorcmVpc2VyZnNjayAtViAyPiYxIHwgZ3JlcCBecmVpc2VyZnNjayB8IGF3ayBcCiAnTlI9PTF7cHJpbnQgInJlaXNlcmZzcHJvZ3MgICAgICAgICAiLCAkMn0nCiAKLWZzY2sucmVpc2VyNCAtViAyPiYxIHwgZ3JlcCBmc2NrLnJlaXNlcjQgfCBhd2sgXAorZnNjay5yZWlzZXI0IC1WIDI+JjEgfCBncmVwIF5mc2NrLnJlaXNlcjQgfCBhd2sgXAogJ05SPT0xe3ByaW50ICJyZWlzZXI0cHJvZ3MgICAgICAgICAgIiwgJDJ9JwogCiB4ZnNfZGIgLVYgMj4mMSB8IGdyZXAgdmVyc2lvbiB8IGF3ayBcCmRpZmYgLS1naXQgYS9zZWN1cml0eS9kdW1teS5jIGIvc2VjdXJpdHkvZHVtbXkuYwppbmRleCBmZDk5NDI5Li44Y2NjY2NjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9kdW1teS5jCisrKyBiL3NlY3VyaXR5L2R1bW15LmMKQEAgLTU2MywxMSArNTYzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV9pcGNfZ2V0c2VjdXJpdHkoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCi17Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBzdGF0aWMgaW50IGR1bW15X21zZ19tc2dfYWxsb2Nfc2VjdXJpdHkgKHN0cnVjdCBtc2dfbXNnICptc2cpCiB7CiAJcmV0dXJuIDA7CkBAIC05NzYsNyArOTcxLDYgQEAKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfcmVwYXJlbnRfdG9faW5pdCk7CiAgCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgdGFza190b19pbm9kZSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpcGNfcGVybWlzc2lvbik7Ci0Jc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpcGNfZ2V0c2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgbXNnX21zZ19hbGxvY19zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBtc2dfbXNnX2ZyZWVfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgbXNnX3F1ZXVlX2FsbG9jX3NlY3VyaXR5KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGEwNTdlMzMuLmI2MDYxZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtNzg1LDYgKzc4NSwxMCBAQAogCiAJa2V5X2NoZWNrKGtleXJpbmcpOwogCisJa2V5X3JlZiA9IEVSUl9QVFIoLUVOT1RESVIpOworCWlmIChrZXlyaW5nLT50eXBlICE9ICZrZXlfdHlwZV9rZXlyaW5nKQorCQlnb3RvIGVycm9yXzI7CisKIAlkb3duX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogCiAJLyogaWYgd2UncmUgZ29pbmcgdG8gYWxsb2NhdGUgYSBuZXcga2V5LCB3ZSdyZSBnb2luZyB0byBoYXZlCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IGQ2NWExODAuLmJmZmE5MjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC00MzcsNiArNDM3LDcgQEAKIC8qCiAgKiBzZWFyY2ggdGhlIGdpdmVuIGtleXJpbmcgb25seSAobm8gcmVjdXJzaW9uKQogICogLSBrZXlyaW5nIG11c3QgYmUgbG9ja2VkIGJ5IGNhbGxlcgorICogLSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUga2V5cmluZyBpcyBhIGtleXJpbmcKICAqLwoga2V5X3JlZl90IF9fa2V5cmluZ19zZWFyY2hfb25lKGtleV9yZWZfdCBrZXlyaW5nX3JlZiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggZjY5NDA2MTguLjIxN2EwYmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMTY4LDExICsxNjgsMTIgQEAKICAqLwogaW50IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqa2V5cmluZzsKIAljaGFyIGJ1ZlsyMF07CiAJaW50IHJldDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAoIXRzay0+c2lnbmFsLT5wcm9jZXNzX2tleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfcGlkLiV1IiwgdHNrLT50Z2lkKTsKIApAQCAtMTgzLDEyICsxODQsMTIgQEAKIAkJfQogCiAJCS8qIGF0dGFjaCBrZXlyaW5nICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKCF0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nKSB7CiAJCQl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0ga2V5cmluZzsKIAkJCWtleXJpbmcgPSBOVUxMOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAkJa2V5X3B1dChrZXlyaW5nKTsKIAl9CkBAIC0yMDcsMzggKzIwOCwzNyBAQAogc3RhdGljIGludCBpbnN0YWxsX3Nlc3Npb25fa2V5cmluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkgICBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGtleSAqb2xkOwogCWNoYXIgYnVmWzIwXTsKLQlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKIAogCS8qIGNyZWF0ZSBhbiBlbXB0eSBzZXNzaW9uIGtleXJpbmcgKi8KIAlpZiAoIWtleXJpbmcpIHsKIAkJc3ByaW50ZihidWYsICJfc2VzLiV1IiwgdHNrLT50Z2lkKTsKIAogCQlrZXlyaW5nID0ga2V5cmluZ19hbGxvYyhidWYsIHRzay0+dWlkLCB0c2stPmdpZCwgMSwgTlVMTCk7Ci0JCWlmIChJU19FUlIoa2V5cmluZykpIHsKLQkJCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9CisJCWlmIChJU19FUlIoa2V5cmluZykpCisJCQlyZXR1cm4gUFRSX0VSUihrZXlyaW5nKTsKIAl9CiAJZWxzZSB7CiAJCWF0b21pY19pbmMoJmtleXJpbmctPnVzYWdlKTsKIAl9CiAKIAkvKiBpbnN0YWxsIHRoZSBrZXlyaW5nICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCW9sZCA9IHJjdV9kZXJlZmVyZW5jZSh0c2stPnNpZ25hbC0+c2Vzc2lvbl9rZXlyaW5nKTsKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCW9sZCA9IHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmc7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRzay0+c2lnbmFsLT5zZXNzaW9uX2tleXJpbmcsIGtleXJpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCXJldCA9IDA7CisJLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyLCBidXQgdGhlcmUncyBubyBwb2ludCBzeW5jaHJvbmlzaW5nCisJICogb24gaXQgaWYgaXQgZGlkbid0IHByZXZpb3VzbHkgcG9pbnQgdG8gYW55dGhpbmcgKi8KKwlpZiAob2xkKSB7CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlrZXlfcHV0KG9sZCk7CisJfQogCi0JLyogd2UncmUgdXNpbmcgUkNVIG9uIHRoZSBwb2ludGVyICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2V5X3B1dChvbGQpOwotZXJyb3I6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogfSAvKiBlbmQgaW5zdGFsbF9zZXNzaW9uX2tleXJpbmcoKSAqLwogCkBAIC0zMTEsNyArMzExLDYgQEAKICAqLwogaW50IGV4ZWNfa2V5cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBrZXkgKm9sZDsKIAogCS8qIG5ld2x5IGV4ZWMnZCB0YXNrcyBkb24ndCBnZXQgYSB0aHJlYWQga2V5cmluZyAqLwpAQCAtMzIzLDEwICszMjIsMTAgQEAKIAlrZXlfcHV0KG9sZCk7CiAKIAkvKiBkaXNjYXJkIHRoZSBwcm9jZXNzIGtleXJpbmcgZnJvbSBhIG5ld2x5IGV4ZWMnZCB0YXNrICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzay0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJb2xkID0gdHNrLT5zaWduYWwtPnByb2Nlc3Nfa2V5cmluZzsKIAl0c2stPnNpZ25hbC0+cHJvY2Vzc19rZXlyaW5nID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKIAlrZXlfcHV0KG9sZCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUgYi9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlCmluZGV4IDY4OGMwYTIuLmZhZjJlMDIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpIDo9IHNlbGludXgubyBzcy8KIAotc2VsaW51eC15IDo9IGF2Yy5vIGhvb2tzLm8gc2VsaW51eGZzLm8gbmV0bGluay5vIG5sbXNndGFiLm8gbmV0aWYubworc2VsaW51eC15IDo9IGF2Yy5vIGhvb2tzLm8gc2VsaW51eGZzLm8gbmV0bGluay5vIG5sbXNndGFiLm8gbmV0aWYubyBleHBvcnRzLm8KIAogc2VsaW51eC0kKENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0pICs9IHhmcm0ubwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCBhYzVkNjliLi5hMzAwNzAyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTgwMCw3ICs4MDAsNyBAQAogaW50IGF2Y19zc19yZXNldCh1MzIgc2Vxbm8pCiB7CiAJc3RydWN0IGF2Y19jYWxsYmFja19ub2RlICpjOwotCWludCBpLCByYyA9IDA7CisJaW50IGksIHJjID0gMCwgdG1wcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKIApAQCAtODEzLDE1ICs4MTMsMTYgQEAKIAogCWZvciAoYyA9IGF2Y19jYWxsYmFja3M7IGM7IGMgPSBjLT5uZXh0KSB7CiAJCWlmIChjLT5ldmVudHMgJiBBVkNfQ0FMTEJBQ0tfUkVTRVQpIHsKLQkJCXJjID0gYy0+Y2FsbGJhY2soQVZDX0NBTExCQUNLX1JFU0VULAotCQkJCQkgMCwgMCwgMCwgMCwgTlVMTCk7Ci0JCQlpZiAocmMpCi0JCQkJZ290byBvdXQ7CisJCQl0bXByYyA9IGMtPmNhbGxiYWNrKEFWQ19DQUxMQkFDS19SRVNFVCwKKwkJCSAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgTlVMTCk7CisJCQkvKiBzYXZlIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZCBmb3IgdGhlIHJldHVybgorCQkJICAgdmFsdWUgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGNhbGxiYWNrcyAqLworCQkJaWYgKCFyYykKKwkJCQlyYyA9IHRtcHJjOwogCQl9CiAJfQogCiAJYXZjX2xhdGVzdF9ub3RpZl91cGRhdGUoc2Vxbm8sIDApOwotb3V0OgogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2V4cG9ydHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRjNzNlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIFNFTGludXggc2VydmljZXMgZXhwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4KKyAqCisgKiBBdXRob3I6IEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJQk0gQ29ycG9yYXRpb24sIFRpbW90aHkgUi4gQ2hhdmV6IDx0aW55dGltQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorCisjaW5jbHVkZSAic2VjdXJpdHkuaCIKKyNpbmNsdWRlICJvYmpzZWMuaCIKKwordm9pZCBzZWxpbnV4X3Rhc2tfY3R4aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqY3R4aWQpCit7CisJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gdHNrLT5zZWN1cml0eTsKKwlpZiAoc2VsaW51eF9lbmFibGVkKQorCQkqY3R4aWQgPSB0c2VjLT5zaWQ7CisJZWxzZQorCQkqY3R4aWQgPSAwOworfQorCitpbnQgc2VsaW51eF9jdHhpZF90b19zdHJpbmcodTMyIGN0eGlkLCBjaGFyICoqY3R4LCB1MzIgKmN0eGxlbikKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKQorCQlyZXR1cm4gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQoY3R4aWQsIGN0eCwgY3R4bGVuKTsKKwllbHNlIHsKKwkJKmN0eCA9IE5VTEw7CisJCSpjdHhsZW4gPSAwOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHNlbGludXhfZ2V0X2lub2RlX3NpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKSB7CisJCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKKwkJKnNpZCA9IGlzZWMtPnNpZDsKKwkJcmV0dXJuOworCX0KKwkqc2lkID0gMDsKK30KKwordm9pZCBzZWxpbnV4X2dldF9pcGNfc2lkKGNvbnN0IHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB1MzIgKnNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKSB7CisJCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaXBjcC0+c2VjdXJpdHk7CisJCSpzaWQgPSBpc2VjLT5zaWQ7CisJCXJldHVybjsKKwl9CisJKnNpZCA9IDA7Cit9CisKK3ZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKQoreworCWlmIChzZWxpbnV4X2VuYWJsZWQpIHsKKwkJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gdHNrLT5zZWN1cml0eTsKKwkJKnNpZCA9IHRzZWMtPnNpZDsKKwkJcmV0dXJuOworCX0KKwkqc2lkID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGI2MWI5NTU0Li45MGI0Y2RjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xMDEsNiArMTAxLDggQEAKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoInNlbGludXg9Iiwgc2VsaW51eF9lbmFibGVkX3NldHVwKTsKKyNlbHNlCitpbnQgc2VsaW51eF9lbmFibGVkID0gMTsKICNlbmRpZgogCiAvKiBPcmlnaW5hbCAoZHVtbXkpIHNlY3VyaXR5IG1vZHVsZS4gKi8KQEAgLTMyMjksNyArMzIzMSw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogSGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLwotCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpCisJaWYgKGZhbWlseSA9PSBQRl9JTkVUNiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJZmFtaWx5ID0gUEZfSU5FVDsKIAogIAlyZWFkX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKQEAgLTQwNTIsMTMgKzQwNTQsNiBAQAogCXJldHVybiBpcGNfaGFzX3Blcm0oaXBjcCwgYXYpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaXBjX2dldHNlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaXBjcC0+c2VjdXJpdHk7Ci0KLQlyZXR1cm4gc2VsaW51eF9nZXRzZWN1cml0eShpc2VjLT5zaWQsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KIC8qIG1vZHVsZSBzdGFja2luZyBvcGVyYXRpb25zICovCiBzdGF0aWMgaW50IHNlbGludXhfcmVnaXN0ZXJfc2VjdXJpdHkgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpCiB7CkBAIC00MzIxLDcgKzQzMTYsNiBAQAogCS50YXNrX3RvX2lub2RlID0gICAgICAgICAgICAgICAgc2VsaW51eF90YXNrX3RvX2lub2RlLAogCiAJLmlwY19wZXJtaXNzaW9uID0JCXNlbGludXhfaXBjX3Blcm1pc3Npb24sCi0JLmlwY19nZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lwY19nZXRzZWN1cml0eSwKIAogCS5tc2dfbXNnX2FsbG9jX3NlY3VyaXR5ID0Jc2VsaW51eF9tc2dfbXNnX2FsbG9jX3NlY3VyaXR5LAogCS5tc2dfbXNnX2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X21zZ19tc2dfZnJlZV9zZWN1cml0eSwKQEAgLTQ0MjgsNiArNDQyMiw3IEBACiAKIAkvKiBTZXQgdXAgYW55IHN1cGVyYmxvY2tzIGluaXRpYWxpemVkIHByaW9yIHRvIHRoZSBwb2xpY3kgbG9hZC4gKi8KIAlwcmludGsoS0VSTl9JTkZPICJTRUxpbnV4OiAgU2V0dGluZyB1cCBleGlzdGluZyBzdXBlcmJsb2Nrcy5cbiIpOworCXNwaW5fbG9jaygmc2JfbG9jayk7CiAJc3Bpbl9sb2NrKCZzYl9zZWN1cml0eV9sb2NrKTsKIG5leHRfc2I6CiAJaWYgKCFsaXN0X2VtcHR5KCZzdXBlcmJsb2NrX3NlY3VyaXR5X2hlYWQpKSB7CkBAIC00NDM2LDE5ICs0NDMxLDIwIEBACiAJCQkJICAgICAgICAgICBzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QsCiAJCQkJICAgICAgICAgICBsaXN0KTsKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNic2VjLT5zYjsKLQkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAkJc2ItPnNfY291bnQrKzsKLQkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogCQlzcGluX3VubG9jaygmc2Jfc2VjdXJpdHlfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIAkJZG93bl9yZWFkKCZzYi0+c191bW91bnQpOwogCQlpZiAoc2ItPnNfcm9vdCkKIAkJCXN1cGVyYmxvY2tfZG9pbml0KHNiLCBOVUxMKTsKIAkJZHJvcF9zdXBlcihzYik7CisJCXNwaW5fbG9jaygmc2JfbG9jayk7CiAJCXNwaW5fbG9jaygmc2Jfc2VjdXJpdHlfbG9jayk7CiAJCWxpc3RfZGVsX2luaXQoJnNic2VjLT5saXN0KTsKIAkJZ290byBuZXh0X3NiOwogCX0KIAlzcGluX3VubG9jaygmc2Jfc2VjdXJpdHlfbG9jayk7CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogfQogCiAvKiBTRUxpbnV4IHJlcXVpcmVzIGVhcmx5IGluaXRpYWxpemF0aW9uIGluIG9yZGVyIHRvIGxhYmVsCkBAIC00NTQzLDYgKzQ1MzksNyBAQAogCXByaW50ayhLRVJOX0lORk8gIlNFTGludXg6ICBEaXNhYmxlZCBhdCBydW50aW1lLlxuIik7CiAKIAlzZWxpbnV4X2Rpc2FibGVkID0gMTsKKwlzZWxpbnV4X2VuYWJsZWQgPSAwOwogCiAJLyogUmVzZXQgc2VjdXJpdHlfb3BzIHRvIHRoZSBzZWNvbmRhcnkgbW9kdWxlLCBkdW1teSBvciBjYXBhYmlsaXR5LiAqLwogCXNlY3VyaXR5X29wcyA9IHNlY29uZGFyeV9vcHM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCmluZGV4IDVmMDE2YzkuLjA2M2FmNDcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCkBAIC0yOSwxMiArMjksNyBAQAogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01JTiAgIFBPTElDWURCX1ZFUlNJT05fQkFTRQogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01BWCAgIFBPTElDWURCX1ZFUlNJT05fQVZUQUIKIAotI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTQogZXh0ZXJuIGludCBzZWxpbnV4X2VuYWJsZWQ7Ci0jZWxzZQotI2RlZmluZSBzZWxpbnV4X2VuYWJsZWQgMQotI2VuZGlmCi0KIGV4dGVybiBpbnQgc2VsaW51eF9tbHNfZW5hYmxlZDsKIAogaW50IHNlY3VyaXR5X2xvYWRfcG9saWN5KHZvaWQgKiBkYXRhLCBzaXplX3QgbGVuKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCmluZGV4IDY0MGQwYmYuLjdiYzViNjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKglTdXBwb3J0IGZvciBlbmhhbmNlZCBNTFMgaW5mcmFzdHJ1Y3R1cmUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFRydXN0ZWQgQ29tcHV0ZXIgU29sdXRpb25zLCBJbmMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpIHsKIAkJaWYgKGRlZl9zaWQgIT0gU0VDU0lEX05VTEwgJiYgb2xkYykKLQkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KTsKKwkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KSsxOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM4NSw2ICszODUsMzQgQEAKIH0KIAogLyoKKyAqIFNldCB0aGUgTUxTIGZpZWxkcyBpbiB0aGUgc2VjdXJpdHkgY29udGV4dCBzdHJ1Y3R1cmUKKyAqIGBjb250ZXh0JyBiYXNlZCBvbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluCisgKiB0aGUgc3RyaW5nIGBzdHInLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRlbXBvcmFyeSBtZW1vcnkgd2l0aCB0aGUKKyAqIGdpdmVuIGNvbnN0cmFpbnRzIG9mIGdmcF9tYXNrLgorICovCitpbnQgbWxzX2Zyb21fc3RyaW5nKGNoYXIgKnN0ciwgc3RydWN0IGNvbnRleHQgKmNvbnRleHQsIGdmcF90IGdmcF9tYXNrKQoreworCWNoYXIgKnRtcHN0ciwgKmZyZWVzdHI7CisJaW50IHJjOworCisJaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHdlIG5lZWQgZnJlZXN0ciBiZWNhdXNlIG1sc19jb250ZXh0X3RvX3NpZCB3aWxsIGNoYW5nZQorCSAgIHRoZSB2YWx1ZSBvZiB0bXBzdHIgKi8KKwl0bXBzdHIgPSBmcmVlc3RyID0ga3N0cmR1cChzdHIsIGdmcF9tYXNrKTsKKwlpZiAoIXRtcHN0cikgeworCQlyYyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJcmMgPSBtbHNfY29udGV4dF90b19zaWQoJzonLCAmdG1wc3RyLCBjb250ZXh0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTRUNTSURfTlVMTCk7CisJCWtmcmVlKGZyZWVzdHIpOworCX0KKworCXJldHVybiByYzsKK30KKworLyoKICAqIENvcGllcyB0aGUgZWZmZWN0aXZlIE1MUyByYW5nZSBmcm9tIGBzcmMnIGludG8gYGRzdCcuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1sc19zY29weV9jb250ZXh0KHN0cnVjdCBjb250ZXh0ICpkc3QsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaAppbmRleCAwM2RlNjk3Li5mYmI0MmYwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKQEAgLTgsNyArOCw3IEBACiAgKgogICoJU3VwcG9ydCBmb3IgZW5oYW5jZWQgTUxTIGluZnJhc3RydWN0dXJlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFRydXN0ZWQgQ29tcHV0ZXIgU29sdXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgogICovCiAKICNpZm5kZWYgX1NTX01MU19IXwpAQCAtMjcsNiArMjcsOCBAQAogCQkgICAgICAgc3RydWN0IHNpZHRhYiAqcywKIAkJICAgICAgIHUzMiBkZWZfc2lkKTsKIAoraW50IG1sc19mcm9tX3N0cmluZyhjaGFyICpzdHIsIHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LCBnZnBfdCBnZnBfbWFzayk7CisKIGludCBtbHNfY29udmVydF9jb250ZXh0KHN0cnVjdCBwb2xpY3lkYiAqb2xkcCwKIAkJCXN0cnVjdCBwb2xpY3lkYiAqbmV3cCwKIAkJCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCA2MTQ5MjQ4Li5jMjg0ZGJiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC03LDEyICs3LDEzIEBACiAgKiBVcGRhdGVkOiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KICAqCiAgKglTdXBwb3J0IGZvciBlbmhhbmNlZCBNTFMgaW5mcmFzdHJ1Y3R1cmUuCisgKglTdXBwb3J0IGZvciBjb250ZXh0IGJhc2VkIGF1ZGl0IGZpbHRlcnMuCiAgKgogICogVXBkYXRlZDogRnJhbmsgTWF5ZXIgPG1heWVyZkB0cmVzeXMuY29tPiBhbmQgS2FybCBNYWNNaWxsYW4gPGttYWNtaWxsYW5AdHJlc3lzLmNvbT4KICAqCiAgKiAJQWRkZWQgY29uZGl0aW9uYWwgcG9saWN5IGxhbmd1YWdlIGV4dGVuc2lvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDQgVHJlc3lzIFRlY2hub2xvZ3ksIExMQwogICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTU5Myw2ICs1OTQsMTAgQEAKIAogCQkJKnNjb250ZXh0X2xlbiA9IHN0cmxlbihpbml0aWFsX3NpZF90b19zdHJpbmdbc2lkXSkgKyAxOwogCQkJc2NvbnRleHRwID0ga21hbGxvYygqc2NvbnRleHRfbGVuLEdGUF9BVE9NSUMpOworCQkJaWYgKCFzY29udGV4dHApIHsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlzdHJjcHkoc2NvbnRleHRwLCBpbml0aWFsX3NpZF90b19zdHJpbmdbc2lkXSk7CiAJCQkqc2NvbnRleHQgPSBzY29udGV4dHA7CiAJCQlnb3RvIG91dDsKQEAgLTE4MTEsMyArMTgxNiwyMzUgQEAKIAlQT0xJQ1lfUkRVTkxPQ0s7CiAJcmV0dXJuIHJjOwogfQorCitzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlIHsKKwl1MzIgYXVfc2Vxbm87CisJc3RydWN0IGNvbnRleHQgYXVfY3R4dDsKK307CisKK3ZvaWQgc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSkKK3sKKwlpZiAocnVsZSkgeworCQljb250ZXh0X2Rlc3Ryb3koJnJ1bGUtPmF1X2N0eHQpOworCQlrZnJlZShydWxlKTsKKwl9Cit9CisKK2ludCBzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICoqcnVsZSkKK3sKKwlzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICp0bXBydWxlOworCXN0cnVjdCByb2xlX2RhdHVtICpyb2xlZGF0dW07CisJc3RydWN0IHR5cGVfZGF0dW0gKnR5cGVkYXR1bTsKKwlzdHJ1Y3QgdXNlcl9kYXR1bSAqdXNlcmRhdHVtOworCWludCByYyA9IDA7CisKKwkqcnVsZSA9IE5VTEw7CisKKwlpZiAoIXNzX2luaXRpYWxpemVkKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgQVVESVRfU0VfVVNFUjoKKwljYXNlIEFVRElUX1NFX1JPTEU6CisJY2FzZSBBVURJVF9TRV9UWVBFOgorCQkvKiBvbmx5ICdlcXVhbHMnIGFuZCAnbm90IGVxdWFscycgZml0IHVzZXIsIHJvbGUsIGFuZCB0eXBlICovCisJCWlmIChvcCAhPSBBVURJVF9FUVVBTCAmJiBvcCAhPSBBVURJVF9OT1RfRVFVQUwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBBVURJVF9TRV9TRU46CisJY2FzZSBBVURJVF9TRV9DTFI6CisJCS8qIHdlIGRvIG5vdCBhbGxvdyBhIHJhbmdlLCBpbmRpY2F0ZWQgYnkgdGhlIHByZXNlbnNlIG9mICctJyAqLworCQlpZiAoc3RyY2hyKHJ1bGVzdHIsICctJykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogb25seSB0aGUgYWJvdmUgZmllbGRzIGFyZSB2YWxpZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl0bXBydWxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSksIEdGUF9LRVJORUwpOworCWlmICghdG1wcnVsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb250ZXh0X2luaXQoJnRtcHJ1bGUtPmF1X2N0eHQpOworCisJUE9MSUNZX1JETE9DSzsKKworCXRtcHJ1bGUtPmF1X3NlcW5vID0gbGF0ZXN0X2dyYW50aW5nOworCisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgQVVESVRfU0VfVVNFUjoKKwkJdXNlcmRhdHVtID0gaGFzaHRhYl9zZWFyY2gocG9saWN5ZGIucF91c2Vycy50YWJsZSwgcnVsZXN0cik7CisJCWlmICghdXNlcmRhdHVtKQorCQkJcmMgPSAtRUlOVkFMOworCQllbHNlCisJCQl0bXBydWxlLT5hdV9jdHh0LnVzZXIgPSB1c2VyZGF0dW0tPnZhbHVlOworCQlicmVhazsKKwljYXNlIEFVRElUX1NFX1JPTEU6CisJCXJvbGVkYXR1bSA9IGhhc2h0YWJfc2VhcmNoKHBvbGljeWRiLnBfcm9sZXMudGFibGUsIHJ1bGVzdHIpOworCQlpZiAoIXJvbGVkYXR1bSkKKwkJCXJjID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJdG1wcnVsZS0+YXVfY3R4dC5yb2xlID0gcm9sZWRhdHVtLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBBVURJVF9TRV9UWVBFOgorCQl0eXBlZGF0dW0gPSBoYXNodGFiX3NlYXJjaChwb2xpY3lkYi5wX3R5cGVzLnRhYmxlLCBydWxlc3RyKTsKKwkJaWYgKCF0eXBlZGF0dW0pCisJCQlyYyA9IC1FSU5WQUw7CisJCWVsc2UKKwkJCXRtcHJ1bGUtPmF1X2N0eHQudHlwZSA9IHR5cGVkYXR1bS0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgQVVESVRfU0VfU0VOOgorCWNhc2UgQVVESVRfU0VfQ0xSOgorCQlyYyA9IG1sc19mcm9tX3N0cmluZyhydWxlc3RyLCAmdG1wcnVsZS0+YXVfY3R4dCwgR0ZQX0FUT01JQyk7CisJCWJyZWFrOworCX0KKworCVBPTElDWV9SRFVOTE9DSzsKKworCWlmIChyYykgeworCQlzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZSh0bXBydWxlKTsKKwkJdG1wcnVsZSA9IE5VTEw7CisJfQorCisJKnJ1bGUgPSB0bXBydWxlOworCisJcmV0dXJuIHJjOworfQorCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKHUzMiBjdHhpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKnJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KQoreworCXN0cnVjdCBjb250ZXh0ICpjdHh0OworCXN0cnVjdCBtbHNfbGV2ZWwgKmxldmVsOworCWludCBtYXRjaCA9IDA7CisKKwlpZiAoIXJ1bGUpIHsKKwkJYXVkaXRfbG9nKGFjdHgsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAorCQkgICAgICAgICAgInNlbGludXhfYXVkaXRfcnVsZV9tYXRjaDogbWlzc2luZyBydWxlXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJUE9MSUNZX1JETE9DSzsKKworCWlmIChydWxlLT5hdV9zZXFubyA8IGxhdGVzdF9ncmFudGluZykgeworCQlhdWRpdF9sb2coYWN0eCwgR0ZQX0FUT01JQywgQVVESVRfU0VMSU5VWF9FUlIsCisJCSAgICAgICAgICAic2VsaW51eF9hdWRpdF9ydWxlX21hdGNoOiBzdGFsZSBydWxlXG4iKTsKKwkJbWF0Y2ggPSAtRVNUQUxFOworCQlnb3RvIG91dDsKKwl9CisKKwljdHh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBjdHhpZCk7CisJaWYgKCFjdHh0KSB7CisJCWF1ZGl0X2xvZyhhY3R4LCBHRlBfQVRPTUlDLCBBVURJVF9TRUxJTlVYX0VSUiwKKwkJICAgICAgICAgICJzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2g6IHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICAgICBjdHhpZCk7CisJCW1hdGNoID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogYSBmaWVsZC9vcCBwYWlyIHRoYXQgaXMgbm90IGNhdWdodCBoZXJlIHdpbGwgc2ltcGx5IGZhbGwgdGhyb3VnaAorCSAgIHdpdGhvdXQgYSBtYXRjaCAqLworCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIEFVRElUX1NFX1VTRVI6CisJCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBBVURJVF9FUVVBTDoKKwkJCW1hdGNoID0gKGN0eHQtPnVzZXIgPT0gcnVsZS0+YXVfY3R4dC51c2VyKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElUX05PVF9FUVVBTDoKKwkJCW1hdGNoID0gKGN0eHQtPnVzZXIgIT0gcnVsZS0+YXVfY3R4dC51c2VyKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgQVVESVRfU0VfUk9MRToKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJbWF0Y2ggPSAoY3R4dC0+cm9sZSA9PSBydWxlLT5hdV9jdHh0LnJvbGUpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTk9UX0VRVUFMOgorCQkJbWF0Y2ggPSAoY3R4dC0+cm9sZSAhPSBydWxlLT5hdV9jdHh0LnJvbGUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVURJVF9TRV9UWVBFOgorCQlzd2l0Y2ggKG9wKSB7CisJCWNhc2UgQVVESVRfRVFVQUw6CisJCQltYXRjaCA9IChjdHh0LT50eXBlID09IHJ1bGUtPmF1X2N0eHQudHlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9OT1RfRVFVQUw6CisJCQltYXRjaCA9IChjdHh0LT50eXBlICE9IHJ1bGUtPmF1X2N0eHQudHlwZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEFVRElUX1NFX1NFTjoKKwljYXNlIEFVRElUX1NFX0NMUjoKKwkJbGV2ZWwgPSAob3AgPT0gQVVESVRfU0VfU0VOID8KKwkJICAgICAgICAgJmN0eHQtPnJhbmdlLmxldmVsWzBdIDogJmN0eHQtPnJhbmdlLmxldmVsWzFdKTsKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZXEoJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCisJCQkgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9OT1RfRVFVQUw6CisJCQltYXRjaCA9ICFtbHNfbGV2ZWxfZXEoJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCisJCQkgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTEVTU19USEFOOgorCQkJbWF0Y2ggPSAobWxzX2xldmVsX2RvbSgmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpICYmCisJCQkgICAgICAgICAhbWxzX2xldmVsX2VxKCZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCkpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfTEVTU19USEFOX09SX0VRVUFMOgorCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZG9tKCZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdLAorCQkJICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElUX0dSRUFURVJfVEhBTjoKKwkJCW1hdGNoID0gKG1sc19sZXZlbF9kb20obGV2ZWwsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0pICYmCisJCQkgICAgICAgICAhbWxzX2xldmVsX2VxKGxldmVsLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSkpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfR1JFQVRFUl9USEFOX09SX0VRVUFMOgorCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZG9tKGxldmVsLAorCQkJICAgICAgICAgICAgICAgICAgICAgICZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdKTsKKwkJCWJyZWFrOworCQl9CisJfQorCitvdXQ6CisJUE9MSUNZX1JEVU5MT0NLOworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCAoKmF1cnVsZV9jYWxsYmFjaykodm9pZCkgPSBOVUxMOworCitzdGF0aWMgaW50IGF1cnVsZV9hdmNfY2FsbGJhY2sodTMyIGV2ZW50LCB1MzIgc3NpZCwgdTMyIHRzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNsYXNzLCB1MzIgcGVybXMsIHUzMiAqcmV0YWluZWQpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZXZlbnQgPT0gQVZDX0NBTExCQUNLX1JFU0VUICYmIGF1cnVsZV9jYWxsYmFjaykKKwkJZXJyID0gYXVydWxlX2NhbGxiYWNrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgYXVydWxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYXZjX2FkZF9jYWxsYmFjayhhdXJ1bGVfYXZjX2NhbGxiYWNrLCBBVkNfQ0FMTEJBQ0tfUkVTRVQsCisJICAgICAgICAgICAgICAgICAgICAgICBTRUNTSURfTlVMTCwgU0VDU0lEX05VTEwsIFNFQ0NMQVNTX05VTEwsIDApOworCWlmIChlcnIpCisJCXBhbmljKCJhdmNfYWRkX2NhbGxiYWNrKCkgZmFpbGVkLCBlcnJvciAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CitfX2luaXRjYWxsKGF1cnVsZV9pbml0KTsKKwordm9pZCBzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjayhpbnQgKCpjYWxsYmFjaykodm9pZCkpCit7CisJYXVydWxlX2NhbGxiYWNrID0gY2FsbGJhY2s7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IGRmYWI2YzguLmFiZTk5ZDggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAkJaW50IGk7CiAKIAkJZm9yIChpID0gc3AtPmxlbi0xOyBpID49IDA7IGktLSkgewotCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eFtpXS54dmVjOworCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBzcC0+eHZlY1tpXTsKIAkJCWlmIChzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHgpKSB7CiAJCQkJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geC0+c2VjdXJpdHk7CiAJCQkJcmV0dXJuIGN0eC0+Y3R4X3NpZDsKQEAgLTMxNCw3ICszMTQsNyBAQAogCQkgKiAgT25seSBuZWVkIHRvIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIGFuIGF1dGhvcml6YWJsZSBzcC4KIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBzcC0+bGVuOyBpKyspIHsKLQkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc3AtPnhbaV0ueHZlYzsKKwkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc3AtPnh2ZWNbaV07CiAKIAkJCWlmICh4ICYmIHNlbGludXhfYXV0aG9yaXphYmxlX3hmcm0oeCkpCiAJCQkJZ290byBhY2NlcHQ7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL0tjb25maWcgYi9zb3VuZC9jb3JlL0tjb25maWcKaW5kZXggOWRkMTIxYi4uNDI2MmExYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKyBiL3NvdW5kL2NvcmUvS2NvbmZpZwpAQCAtOTIsOCArOTIsOSBAQAogCiAJICBNYW55IHByb2dyYW1zIHN0aWxsIHVzZSB0aGUgT1NTIEFQSSwgc28gc2F5IFkuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zZXEtb3NzLgorCSAgSWYgeW91IGNob29zZSBNIGluICJTZXF1ZW5jZXIgc3VwcG9ydCIgKFNORF9TRVFVRU5DRVIpLAorCSAgdGhpcyB3aWxsIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICBzbmQtc2VxLW9zcy4KIAogY29uZmlnIFNORF9SVENUSU1FUgogCXRyaXN0YXRlICJSVEMgVGltZXIgc3VwcG9ydCIKQEAgLTE0MSw3ICsxNDIsNyBAQAogCiBjb25maWcgU05EX1ZFUkJPU0VfUFJPQ0ZTCiAJYm9vbCAiVmVyYm9zZSBwcm9jZnMgY29udGVudHMiCi0JZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIFNORCAmJiBQUk9DX0ZTCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGNvZGUgZm9yIHZlcmJvc2UgcHJvY2ZzIGNvbnRlbnRzIChwcm92aWRlcwpAQCAtMTcwLDMgKzE3MSwxMyBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGV4dHJhLXZlcmJvc2UgbG9nIG1lc3NhZ2VzIHByaW50ZWQgd2hlbgogCSAgZGV0ZWN0aW5nIGRldmljZXMuCisKK2NvbmZpZyBTTkRfUENNX1hSVU5fREVCVUcKKwlib29sICJFbmFibGUgUENNIHJpbmcgYnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZGVidWdnaW5nIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU05EX0RFQlVHICYmIFNORF9WRVJCT1NFX1BST0NGUworCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSB0aGUgUENNIHJpbmcgYnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZGVidWdnaW5nLgorCSAgSXQgaXMgdXN1YWxseSBub3QgcmVxdWlyZWQsIGJ1dCBpZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGgKKwkgIHNvdW5kIGNsaWNraW5nIHdoZW4gc3lzdGVtIGlzIGxvYWRlZCwgaXQgbWF5IGhlbHAgdG8gZGV0ZXJtaW5lCisJICB0aGUgcHJvY2VzcyBvciBkcml2ZXIgd2hpY2ggY2F1c2VzIHRoZSBzY2hlZHVsaW5nIGdhcHMuCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDU3NDc0NTMuLjIyNTY1YzliIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtNjY0LDcgKzY2NCw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCBfaW5mbywgc2l6ZW9mKGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJc25kX3Bvd2VyX2xvY2soY3RsLT5jYXJkKTsKLQlyZXN1bHQgPSBzbmRfcG93ZXJfd2FpdChjdGwtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY3RsLT5jYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwogCWlmIChyZXN1bHQgPj0gMCkKIAkJcmVzdWx0ID0gc25kX2N0bF9lbGVtX2luZm8oY3RsLCAmaW5mbyk7CiAJc25kX3Bvd2VyX3VubG9jayhjdGwtPmNhcmQpOwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAlzbmRfcG93ZXJfbG9jayhjYXJkKTsKLQlyZXN1bHQgPSBzbmRfcG93ZXJfd2FpdChjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDAsIE5VTEwpOworCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAJaWYgKHJlc3VsdCA+PSAwKQogCQlyZXN1bHQgPSBzbmRfY3RsX2VsZW1fcmVhZChjYXJkLCBjb250cm9sKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwpAQCAtNzgzLDcgKzc4Myw3IEBACiAJfQogCWNhcmQgPSBmaWxlLT5jYXJkOwogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlpZiAocmVzdWx0ID49IDApCiAJCXJlc3VsdCA9IHNuZF9jdGxfZWxlbV93cml0ZShjYXJkLCBmaWxlLCBjb250cm9sKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jIGIvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jCmluZGV4IDg0ZmVmNTAuLjNjMDE2MWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbF9jb21wYXQuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2xfY29tcGF0LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCQlnb3RvIGVycm9yOwogCiAJc25kX3Bvd2VyX2xvY2soY3RsLT5jYXJkKTsKLQllcnIgPSBzbmRfcG93ZXJfd2FpdChjdGwtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJZXJyID0gc25kX3Bvd2VyX3dhaXQoY3RsLT5jYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwogCWlmIChlcnIgPj0gMCkKIAkJZXJyID0gc25kX2N0bF9lbGVtX2luZm8oY3RsLCBkYXRhKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGN0bC0+Y2FyZCk7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAkJZ290byBlcnJvcjsKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCWVyciA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJZXJyID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlpZiAoZXJyID49IDApCiAJCWVyciA9IHNuZF9jdGxfZWxlbV9yZWFkKGNhcmQsIGRhdGEpOwogCXNuZF9wb3dlcl91bmxvY2soY2FyZCk7CkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJZ290byBlcnJvcjsKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCWVyciA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJZXJyID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlpZiAoZXJyID49IDApCiAJCWVyciA9IHNuZF9jdGxfZWxlbV93cml0ZShjYXJkLCBmaWxlLCBkYXRhKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCA1YmI4YThiLi4zOWVkMmU1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNzIyLDEzICs3MjIsMTIgQEAKICAqICBzbmRfcG93ZXJfd2FpdCAtIHdhaXQgdW50aWwgdGhlIHBvd2VyLXN0YXRlIGlzIGNoYW5nZWQuCiAgKiAgQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmUKICAqICBAcG93ZXJfc3RhdGU6IGV4cGVjdGVkIHBvd2VyIHN0YXRlCi0gKiAgQGZpbGU6IGZpbGUgc3RydWN0dXJlIGZvciB0aGUgT19OT05CTE9DSyBjaGVjayAob3B0aW9uYWwpCiAgKgogICogIFdhaXRzIHVudGlsIHRoZSBwb3dlci1zdGF0ZSBpcyBjaGFuZ2VkLgogICoKICAqICBOb3RlOiB0aGUgcG93ZXIgbG9jayBtdXN0IGJlIGFjdGl2ZSBiZWZvcmUgY2FsbC4KICAqLwotaW50IHNuZF9wb3dlcl93YWl0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK2ludCBzbmRfcG93ZXJfd2FpdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSkKIHsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTc0NSwxMiArNzQ0LDYgQEAKIAkJfQogCQlpZiAoc25kX3Bvd2VyX2dldF9zdGF0ZShjYXJkKSA9PSBwb3dlcl9zdGF0ZSkKIAkJCWJyZWFrOwotI2lmIDAgLyogYmxvY2sgYWxsIGRldmljZXMgKi8KLQkJaWYgKGZpbGUgJiYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewotCQkJcmVzdWx0ID0gLUVBR0FJTjsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCQlzY2hlZHVsZV90aW1lb3V0KDMwICogSFopOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IGY4MzAyYjcuLmFjOTkwYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTIwOCw5ICsyMDgsOCBAQAogCQkJb3NzX2J1ZmZlcl9zaXplID0gcnVudGltZS0+b3NzLm1tYXBfYnl0ZXM7CiAJfQogCi0JaWYgKHN1YnN0cmVhbS0+b3NzLnNldHVwICYmCi0JICAgIHN1YnN0cmVhbS0+b3NzLnNldHVwLT5wZXJpb2Rfc2l6ZSA+IDE2KQotCQlvc3NfcGVyaW9kX3NpemUgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cC0+cGVyaW9kX3NpemU7CisJaWYgKHN1YnN0cmVhbS0+b3NzLnNldHVwLnBlcmlvZF9zaXplID4gMTYpCisJCW9zc19wZXJpb2Rfc2l6ZSA9IHN1YnN0cmVhbS0+b3NzLnNldHVwLnBlcmlvZF9zaXplOwogCWVsc2UgaWYgKHJ1bnRpbWUtPm9zcy5mcmFnc2hpZnQpIHsKIAkJb3NzX3BlcmlvZF9zaXplID0gMSA8PCBydW50aW1lLT5vc3MuZnJhZ3NoaWZ0OwogCQlpZiAob3NzX3BlcmlvZF9zaXplID4gb3NzX2J1ZmZlcl9zaXplIC8gMikKQEAgLTI1MiwxMCArMjUxLDggQEAKIAogCW9zc19wZXJpb2RzID0gb3NzX2J1ZmZlcl9zaXplIC8gb3NzX3BlcmlvZF9zaXplOwogCi0JaWYgKHN1YnN0cmVhbS0+b3NzLnNldHVwKSB7Ci0JCWlmIChzdWJzdHJlYW0tPm9zcy5zZXR1cC0+cGVyaW9kcyA+IDEpCi0JCQlvc3NfcGVyaW9kcyA9IHN1YnN0cmVhbS0+b3NzLnNldHVwLT5wZXJpb2RzOwotCX0KKwlpZiAoc3Vic3RyZWFtLT5vc3Muc2V0dXAucGVyaW9kcyA+IDEpCisJCW9zc19wZXJpb2RzID0gc3Vic3RyZWFtLT5vc3Muc2V0dXAucGVyaW9kczsKIAogCXMgPSBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlX21heChzbGF2ZV9wYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTLCBOVUxMKTsKIAlpZiAocnVudGltZS0+b3NzLm1heGZyYWdzICYmIHMgPiBydW50aW1lLT5vc3MubWF4ZnJhZ3MpCkBAIC0zNDEsMTIgKzMzOCwxMCBAQAogCQlnb3RvIGZhaWx1cmU7CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZydW50aW1lLT5tbWFwX2NvdW50KSkgeworCWlmIChhdG9taWNfcmVhZCgmcnVudGltZS0+bW1hcF9jb3VudCkpCiAJCWRpcmVjdCA9IDE7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwOwotCQlkaXJlY3QgPSAoc2V0dXAgIT0gTlVMTCAmJiBzZXR1cC0+ZGlyZWN0KTsKLQl9CisJZWxzZQorCQlkaXJlY3QgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cC5kaXJlY3Q7CiAKIAlfc25kX3BjbV9od19wYXJhbXNfYW55KHNwYXJhbXMpOwogCV9zbmRfcGNtX2h3X3BhcmFtX3NldGludGVnZXIoc3BhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwpAQCAtNDgyLDcgKzQ3Nyw3IEBACiAJCTEgOiBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKIAlzd19wYXJhbXMtPnhmZXJfYWxpZ24gPSAxOwogCWlmIChhdG9taWNfcmVhZCgmcnVudGltZS0+bW1hcF9jb3VudCkgfHwKLQkgICAgKHN1YnN0cmVhbS0+b3NzLnNldHVwICYmIHN1YnN0cmVhbS0+b3NzLnNldHVwLT5ub3NpbGVuY2UpKSB7CisJICAgIHN1YnN0cmVhbS0+b3NzLnNldHVwLm5vc2lsZW5jZSkgewogCQlzd19wYXJhbXMtPnNpbGVuY2VfdGhyZXNob2xkID0gMDsKIAkJc3dfcGFyYW1zLT5zaWxlbmNlX3NpemUgPSAwOwogCX0gZWxzZSB7CkBAIC04NDMsNyArODM4LDcgQEAKIAkJCWJ1ZiArPSB0bXA7CiAJCQlieXRlcyAtPSB0bXA7CiAJCQl4ZmVyICs9IHRtcDsKLQkJCWlmICgoc3Vic3RyZWFtLT5vc3Muc2V0dXAgIT0gTlVMTCAmJiBzdWJzdHJlYW0tPm9zcy5zZXR1cC0+cGFydGlhbGZyYWcpIHx8CisJCQlpZiAoc3Vic3RyZWFtLT5vc3Muc2V0dXAucGFydGlhbGZyYWcgfHwKIAkJCSAgICBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgPT0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcykgewogCQkJCXRtcCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIgKyBydW50aW1lLT5vc3MucGVyaW9kX3B0ciwgCiAJCQkJCQkJIHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCAtIHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyLCAxKTsKQEAgLTk1OSwxMiArOTU0LDEyIEBACiAKIAlzdWJzdHJlYW0gPSBwY21fb3NzX2ZpbGUtPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CiAJaWYgKHN1YnN0cmVhbSAhPSBOVUxMKSB7Ci0JCXNuZF9wY21fa2VybmVsX3BsYXliYWNrX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RST1AsIE5VTEwpOworCQlzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUk9QLCBOVUxMKTsKIAkJc3Vic3RyZWFtLT5ydW50aW1lLT5vc3MucHJlcGFyZSA9IDE7CiAJfQogCXN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdOwogCWlmIChzdWJzdHJlYW0gIT0gTlVMTCkgewotCQlzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RST1AsIE5VTEwpOworCQlzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUk9QLCBOVUxMKTsKIAkJc3Vic3RyZWFtLT5ydW50aW1lLT5vc3MucHJlcGFyZSA9IDE7CiAJfQogCXJldHVybiAwOwpAQCAtOTc5LDcgKzk3NCw3IEBACiAJaWYgKHN1YnN0cmVhbSAhPSBOVUxMKSB7CiAJCWlmICgoZXJyID0gc25kX3BjbV9vc3NfbWFrZV9yZWFkeShzdWJzdHJlYW0pKSA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQlzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9TVEFSVCwgTlVMTCk7CisJCXNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX1NUQVJULCBOVUxMKTsKIAl9CiAJLyogbm90ZTogYWxsIGVycm9ycyBmcm9tIHRoZSBzdGFydCBhY3Rpb24gYXJlIGlnbm9yZWQgKi8KIAkvKiBPU1MgYXBwcyBkbyBub3Qga25vdywgaG93IHRvIGhhbmRsZSB0aGVtICovCkBAIC0xMTA4LDcgKzExMDMsNyBAQAogCSAgICAgIF9fZGlyZWN0OgogCQlzYXZlZF9mX2ZsYWdzID0gc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFnczsKIAkJc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFncyAmPSB+T19OT05CTE9DSzsKLQkJZXJyID0gc25kX3BjbV9rZXJuZWxfcGxheWJhY2tfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOworCQllcnIgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUkFJTiwgTlVMTCk7CiAJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgPSBzYXZlZF9mX2ZsYWdzOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC0xMTIwLDcgKzExMTUsNyBAQAogCQlpZiAoKGVyciA9IHNuZF9wY21fb3NzX21ha2VfcmVhZHkoc3Vic3RyZWFtKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQkJZXJyID0gc25kX3BjbV9rZXJuZWxfY2FwdHVyZV9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUk9QLCBOVUxMKTsKKwkJZXJyID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJPUCwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID0gMDsKQEAgLTEyMTQsMTIgKzEyMDksMTAgQEAKIAogCWlmICgoZXJyID0gc25kX3BjbV9vc3NfZ2V0X2FjdGl2ZV9zdWJzdHJlYW0ocGNtX29zc19maWxlLCAmc3Vic3RyZWFtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KSkgeworCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KSkKIAkJZGlyZWN0ID0gMTsKLQl9IGVsc2UgewotCQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gc3Vic3RyZWFtLT5vc3Muc2V0dXA7Ci0JCWRpcmVjdCA9IChzZXR1cCAhPSBOVUxMICYmIHNldHVwLT5kaXJlY3QpOwotCX0KKwllbHNlCisJCWRpcmVjdCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwLmRpcmVjdDsKIAlpZiAoIWRpcmVjdCkKIAkJcmV0dXJuIEFGTVRfTVVfTEFXIHwgQUZNVF9VOCB8CiAJCSAgICAgICBBRk1UX1MxNl9MRSB8IEFGTVRfUzE2X0JFIHwKQEAgLTEyNDksNiArMTI0Miw4IEBACiAJCiAJaWYgKGZvcm1hdCAhPSBBRk1UX1FVRVJZKSB7CiAJCWZvcm1hdHMgPSBzbmRfcGNtX29zc19nZXRfZm9ybWF0cyhwY21fb3NzX2ZpbGUpOworCQlpZiAoZm9ybWF0cyA8IDApCisJCQlyZXR1cm4gZm9ybWF0czsKIAkJaWYgKCEoZm9ybWF0cyAmIGZvcm1hdCkpCiAJCQlmb3JtYXQgPSBBRk1UX1U4OwogCQlmb3IgKGlkeCA9IDE7IGlkeCA+PSAwOyAtLWlkeCkgewpAQCAtMTQzNyw3ICsxNDMyLDcgQEAKIAkJCWNtZCA9IFNORFJWX1BDTV9JT0NUTF9EUk9QOwogCQkJcnVudGltZS0+b3NzLnByZXBhcmUgPSAxOwogCQl9Ci0JCWVyciA9IHNuZF9wY21fa2VybmVsX3BsYXliYWNrX2lvY3RsKHBzdWJzdHJlYW0sIGNtZCwgTlVMTCk7CisJCWVyciA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHBzdWJzdHJlYW0sIGNtZCwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNDU4LDcgKzE0NTMsNyBAQAogCQkJY21kID0gU05EUlZfUENNX0lPQ1RMX0RST1A7CiAJCQlydW50aW1lLT5vc3MucHJlcGFyZSA9IDE7CiAJCX0KLQkJZXJyID0gc25kX3BjbV9rZXJuZWxfY2FwdHVyZV9pb2N0bChjc3Vic3RyZWFtLCBjbWQsIE5VTEwpOworCQllcnIgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChjc3Vic3RyZWFtLCBjbWQsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTQ5NSw3ICsxNDkwLDcgQEAKIAlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWlmIChydW50aW1lLT5vc3MucGFyYW1zIHx8IHJ1bnRpbWUtPm9zcy5wcmVwYXJlKQogCQlyZXR1cm4gMDsKLQllcnIgPSBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9ERUxBWSwgJmRlbGF5KTsKKwllcnIgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9ERUxBWSwgJmRlbGF5KTsKIAlpZiAoZXJyID09IC1FUElQRSkKIAkJZGVsYXkgPSAwOwkvKiBoYWNrIGZvciBicm9rZW4gT1NTIGFwcGxpY2F0aW9ucyAqLwogCWVsc2UgaWYgKGVyciA8IDApCkBAIC0xNTU1LDggKzE1NTAsNyBAQAogCX0gZWxzZSB7CiAJCWRlbGF5ID0gc25kX3BjbV9vc3NfYnl0ZXMoc3Vic3RyZWFtLCBkZWxheSk7CiAJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwOwotCQkJaWYgKHNldHVwICYmIHNldHVwLT5idWdneXB0cikKKwkJCWlmIChzdWJzdHJlYW0tPm9zcy5zZXR1cC5idWdneXB0cikKIAkJCQlpbmZvLmJsb2NrcyA9IChydW50aW1lLT5vc3MuYnVmZmVyX2J5dGVzIC0gZGVsYXkgLSBmaXh1cCkgLyBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzOwogCQkJZWxzZQogCQkJCWluZm8uYmxvY2tzID0gKGRlbGF5ICsgZml4dXApIC8gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlczsKQEAgLTE2MzgsMzcgKzE2MzIsNDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc25kX3BjbV9vc3NfbG9va19mb3Jfc2V0dXAoc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwgY29uc3QgY2hhciAqdGFza19uYW1lKQorc3RhdGljIGNvbnN0IGNoYXIgKnN0cmlwX3Rhc2tfcGF0aChjb25zdCBjaGFyICpwYXRoKQogewotCWNvbnN0IGNoYXIgKnB0ciwgKnB0cmw7CisJY29uc3QgY2hhciAqcHRyLCAqcHRybCA9IE5VTEw7CisJZm9yIChwdHIgPSBwYXRoOyAqcHRyOyBwdHIrKykgeworCQlpZiAoKnB0ciA9PSAnLycpCisJCQlwdHJsID0gcHRyICsgMTsKKwl9CisJcmV0dXJuIHB0cmw7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9wY21fb3NzX2xvb2tfZm9yX3NldHVwKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sCisJCQkJICAgICAgY29uc3QgY2hhciAqdGFza19uYW1lLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqcnNldHVwKQorewogCXN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc2V0dXA7CiAKIAltdXRleF9sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwotCWZvciAoc2V0dXAgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbGlzdDsgc2V0dXA7IHNldHVwID0gc2V0dXAtPm5leHQpIHsKLQkJaWYgKCFzdHJjbXAoc2V0dXAtPnRhc2tfbmFtZSwgdGFza19uYW1lKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwotCQkJcmV0dXJuIHNldHVwOworCWRvIHsKKwkJZm9yIChzZXR1cCA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9saXN0OyBzZXR1cDsKKwkJICAgICBzZXR1cCA9IHNldHVwLT5uZXh0KSB7CisJCQlpZiAoIXN0cmNtcChzZXR1cC0+dGFza19uYW1lLCB0YXNrX25hbWUpKQorCQkJCWdvdG8gb3V0OwogCQl9Ci0JfQotCXB0ciA9IHB0cmwgPSB0YXNrX25hbWU7Ci0Jd2hpbGUgKCpwdHIpIHsKLQkJaWYgKCpwdHIgPT0gJy8nKQotCQkJcHRybCA9IHB0ciArIDE7Ci0JCXB0cisrOwotCX0KLQlpZiAocHRybCA9PSB0YXNrX25hbWUpIHsKLQkJZ290byBfX25vdF9mb3VuZDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWZvciAoc2V0dXAgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbGlzdDsgc2V0dXA7IHNldHVwID0gc2V0dXAtPm5leHQpIHsKLQkJaWYgKCFzdHJjbXAoc2V0dXAtPnRhc2tfbmFtZSwgcHRybCkpIHsKLQkJCW11dGV4X3VubG9jaygmcGNtLT5zdHJlYW1zW3N0cmVhbV0ub3NzLnNldHVwX211dGV4KTsKLQkJCXJldHVybiBzZXR1cDsKLQkJfQotCX0KLSAgICAgIF9fbm90X2ZvdW5kOgorCX0gd2hpbGUgKCh0YXNrX25hbWUgPSBzdHJpcF90YXNrX3BhdGgodGFza19uYW1lKSkgIT0gTlVMTCk7Cisgb3V0OgorCWlmIChzZXR1cCkKKwkJKnJzZXR1cCA9ICpzZXR1cDsKIAltdXRleF91bmxvY2soJnBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9tdXRleCk7Ci0JcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9wY21fb3NzX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl2ZnJlZShydW50aW1lLT5vc3MuYnVmZmVyKTsKKwlydW50aW1lLT5vc3MuYnVmZmVyID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUworCXNuZF9wY21fb3NzX3BsdWdpbl9jbGVhcihzdWJzdHJlYW0pOworI2VuZGlmCisJc3Vic3RyZWFtLT5vc3Mub3NzID0gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3BjbV9vc3NfaW5pdF9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC0xNjc4LDcgKzE2ODEsMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCiAJc3Vic3RyZWFtLT5vc3Mub3NzID0gMTsKLQlzdWJzdHJlYW0tPm9zcy5zZXR1cCA9IHNldHVwOworCXN1YnN0cmVhbS0+b3NzLnNldHVwID0gKnNldHVwOworCWlmIChzZXR1cC0+bm9uYmxvY2spCisJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwllbHNlIGlmIChzZXR1cC0+YmxvY2spCisJCXN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlydW50aW1lLT5vc3MucGFyYW1zID0gMTsKIAlydW50aW1lLT5vc3MudHJpZ2dlciA9IDE7CkBAIC0xNjk3LDE4ICsxNzA0LDcgQEAKIAlydW50aW1lLT5vc3MuZnJhZ3NoaWZ0ID0gMDsKIAlydW50aW1lLT5vc3MubWF4ZnJhZ3MgPSAwOwogCXJ1bnRpbWUtPm9zcy5zdWJkaXZpc2lvbiA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF9wY21fb3NzX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7Ci0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl2ZnJlZShydW50aW1lLT5vc3MuYnVmZmVyKTsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUwotCXNuZF9wY21fb3NzX3BsdWdpbl9jbGVhcihzdWJzdHJlYW0pOwotI2VuZGlmCi0Jc3Vic3RyZWFtLT5vc3MuZmlsZSA9IE5VTEw7Ci0Jc3Vic3RyZWFtLT5vc3Mub3NzID0gMDsKKwlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gc25kX3BjbV9vc3NfcmVsZWFzZV9zdWJzdHJlYW07CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHN0cnVjdCBzbmRfcGNtX29zc19maWxlICpwY21fb3NzX2ZpbGUpCkBAIC0xNzE3LDIzICsxNzEzLDggQEAKIAlzbmRfYXNzZXJ0KHBjbV9vc3NfZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlmb3IgKGNpZHggPSAwOyBjaWR4IDwgMjsgKytjaWR4KSB7CiAJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtX29zc19maWxlLT5zdHJlYW1zW2NpZHhdOwotCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCQlpZiAoc3Vic3RyZWFtID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQkJCi0JCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JCWlmIChzbmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSkKLQkJCXNuZF9wY21fc3RvcChzdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9TRVRVUCk7Ci0JCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKHN1YnN0cmVhbS0+ZmZpbGUgIT0gTlVMTCkgewotCQkJaWYgKHN1YnN0cmVhbS0+b3BzLT5od19mcmVlICE9IE5VTEwpCi0JCQkJc3Vic3RyZWFtLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQkJc3Vic3RyZWFtLT5mZmlsZSA9IE5VTEw7Ci0JCX0KLQkJc25kX3BjbV9vc3NfcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKLQkJc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzdWJzdHJlYW0pOworCQlpZiAoc3Vic3RyZWFtKQorCQkJc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzdWJzdHJlYW0pOwogCX0KIAlrZnJlZShwY21fb3NzX2ZpbGUpOwogCXJldHVybiAwOwpAQCAtMTc0MywxMiArMTcyNCwxMSBAQAogCQkJCSBzdHJ1Y3Qgc25kX3BjbSAqcGNtLAogCQkJCSBzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSAqKnJwY21fb3NzX2ZpbGUsCiAJCQkJIGludCBtaW5vciwKLQkJCQkgc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpwc2V0dXAsCi0JCQkJIHN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqY3NldHVwKQorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwKQogewotCWludCBlcnIgPSAwOworCWludCBpZHgsIGVycjsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSAqcGNtX29zc19maWxlOwotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcHN1YnN0cmVhbSA9IE5VTEwsICpjc3Vic3RyZWFtID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAl1bnNpZ25lZCBpbnQgZl9tb2RlID0gZmlsZS0+Zl9tb2RlOwogCiAJc25kX2Fzc2VydChycGNtX29zc19maWxlICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKQEAgLTE3NjEsNzMgKzE3NDEsMzIgQEAKIAlpZiAoKGZfbW9kZSAmIChGTU9ERV9XUklURXxGTU9ERV9SRUFEKSkgPT0gKEZNT0RFX1dSSVRFfEZNT0RFX1JFQUQpICYmCiAJICAgIChwY20tPmluZm9fZmxhZ3MgJiBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWCkpCiAJCWZfbW9kZSA9IEZNT0RFX1dSSVRFOwotCWlmICgoZl9tb2RlICYgRk1PREVfV1JJVEUpICYmICEocHNldHVwICYmIHBzZXR1cC0+ZGlzYWJsZSkpIHsKLQkJaWYgKChlcnIgPSBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKLQkJCQkJICAgICAgICZwc3Vic3RyZWFtKSkgPCAwKSB7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CisJCWlmIChzZXR1cFtpZHhdLmRpc2FibGUpCisJCQljb250aW51ZTsKKwkJaWYgKGlkeCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlpZiAoISAoZl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKCEgKGZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVyciA9IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0ocGNtLCBpZHgsIGZpbGUsICZzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHBzdWJzdHJlYW07Ci0JfQotCWlmICgoZl9tb2RlICYgRk1PREVfUkVBRCkgJiYgIShjc2V0dXAgJiYgY3NldHVwLT5kaXNhYmxlKSkgewotCQlpZiAoKGVyciA9IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0ocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsIAotCQkJCQkgICAgICAgJmNzdWJzdHJlYW0pKSA8IDApIHsKLQkJCWlmICghKGZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fCBlcnIgIT0gLUVOT0RFVikgewotCQkJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwotCQkJCXJldHVybiBlcnI7Ci0JCQl9IGVsc2UgewotCQkJCWNzdWJzdHJlYW0gPSBOVUxMOwotCQkJfQotCQl9Ci0JCXBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gY3N1YnN0cmVhbTsKKworCQlwY21fb3NzX2ZpbGUtPnN0cmVhbXNbaWR4XSA9IHN1YnN0cmVhbTsKKwkJc3Vic3RyZWFtLT5maWxlID0gcGNtX29zc19maWxlOworCQlzbmRfcGNtX29zc19pbml0X3N1YnN0cmVhbShzdWJzdHJlYW0sICZzZXR1cFtpZHhdLCBtaW5vcik7CiAJfQogCQotCWlmIChwc3Vic3RyZWFtID09IE5VTEwgJiYgY3N1YnN0cmVhbSA9PSBOVUxMKSB7CisJaWYgKCFwY21fb3NzX2ZpbGUtPnN0cmVhbXNbMF0gJiYgIXBjbV9vc3NfZmlsZS0+c3RyZWFtc1sxXSkgewogCQlzbmRfcGNtX29zc19yZWxlYXNlX2ZpbGUocGNtX29zc19maWxlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChwc3Vic3RyZWFtICE9IE5VTEwpIHsKLQkJcHN1YnN0cmVhbS0+b3NzLmZpbGUgPSBwY21fb3NzX2ZpbGU7Ci0JCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdChwc3Vic3RyZWFtKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludF9pbml0IGZhaWxlZFxuIik7Ci0JCQlzbmRfcGNtX29zc19yZWxlYXNlX2ZpbGUocGNtX29zc19maWxlKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJaWYgKChlcnIgPSBwc3Vic3RyZWFtLT5vcHMtPm9wZW4ocHN1YnN0cmVhbSkpIDwgMCkgewotCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCXBzdWJzdHJlYW0tPmZmaWxlID0gZmlsZTsKLQkJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50c19jb21wbGV0ZShwc3Vic3RyZWFtKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludF9jb21wbGV0ZSBmYWlsZWRcbiIpOwotCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCXNuZF9wY21fb3NzX2luaXRfc3Vic3RyZWFtKHBzdWJzdHJlYW0sIHBzZXR1cCwgbWlub3IpOwotCX0KLQlpZiAoY3N1YnN0cmVhbSAhPSBOVUxMKSB7Ci0JCWNzdWJzdHJlYW0tPm9zcy5maWxlID0gcGNtX29zc19maWxlOwotCQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRzX2luaXQoY3N1YnN0cmVhbSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRkKCJzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW5pdCBmYWlsZWRcbiIpOwotCQkJc25kX3BjbV9vc3NfcmVsZWFzZV9maWxlKHBjbV9vc3NfZmlsZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWlmICgoZXJyID0gY3N1YnN0cmVhbS0+b3BzLT5vcGVuKGNzdWJzdHJlYW0pKSA8IDApIHsKLQkJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQljc3Vic3RyZWFtLT5mZmlsZSA9IGZpbGU7Ci0JCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfY29tcGxldGUoY3N1YnN0cmVhbSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRkKCJzbmRfcGNtX2h3X2NvbnN0cmFpbnRfY29tcGxldGUgZmFpbGVkXG4iKTsKLQkJCXNuZF9wY21fb3NzX3JlbGVhc2VfZmlsZShwY21fb3NzX2ZpbGUpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQlzbmRfcGNtX29zc19pbml0X3N1YnN0cmVhbShjc3Vic3RyZWFtLCBjc2V0dXAsIG1pbm9yKTsKLQl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwY21fb3NzX2ZpbGU7CiAJKnJwY21fb3NzX2ZpbGUgPSBwY21fb3NzX2ZpbGU7CkBAIC0xODUyLDcgKzE3OTEsNyBAQAogCWNoYXIgdGFza19uYW1lWzMyXTsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcGNtX29zc19maWxlICpwY21fb3NzX2ZpbGU7Ci0Jc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpwc2V0dXAgPSBOVUxMLCAqY3NldHVwID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgc2V0dXBbMl07CiAJaW50IG5vbmJsb2NrOwogCXdhaXRfcXVldWVfdCB3YWl0OwogCkBAIC0xODczLDIzICsxODEyLDE1IEBACiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gX19lcnJvcjsKIAl9CisJbWVtc2V0KHNldHVwLCAwLCBzaXplb2Yoc2V0dXApKTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCXBzZXR1cCA9IHNuZF9wY21fb3NzX2xvb2tfZm9yX3NldHVwKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgdGFza19uYW1lKTsKKwkJc25kX3BjbV9vc3NfbG9va19mb3Jfc2V0dXAocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJCQkgICB0YXNrX25hbWUsICZzZXR1cFswXSk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCWNzZXR1cCA9IHNuZF9wY21fb3NzX2xvb2tfZm9yX3NldHVwKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCB0YXNrX25hbWUpOworCQlzbmRfcGNtX29zc19sb29rX2Zvcl9zZXR1cChwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCQkJICAgdGFza19uYW1lLCAmc2V0dXBbMV0pOwogCiAJbm9uYmxvY2sgPSAhIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JaWYgKHBzZXR1cCAmJiAhcHNldHVwLT5kaXNhYmxlKSB7Ci0JCWlmIChwc2V0dXAtPm5vbmJsb2NrKQotCQkJbm9uYmxvY2sgPSAxOwotCQllbHNlIGlmIChwc2V0dXAtPmJsb2NrKQotCQkJbm9uYmxvY2sgPSAwOwotCX0gZWxzZSBpZiAoY3NldHVwICYmICFjc2V0dXAtPmRpc2FibGUpIHsKLQkJaWYgKGNzZXR1cC0+bm9uYmxvY2spCi0JCQlub25ibG9jayA9IDE7Ci0JCWVsc2UgaWYgKGNzZXR1cC0+YmxvY2spCi0JCQlub25ibG9jayA9IDA7Ci0JfQogCWlmICghbm9uYmxvY2spCiAJCW5vbmJsb2NrID0gbm9uYmxvY2tfb3BlbjsKIApAQCAtMTg5OCw3ICsxODI5LDcgQEAKIAltdXRleF9sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCWVyciA9IHNuZF9wY21fb3NzX29wZW5fZmlsZShmaWxlLCBwY20sICZwY21fb3NzX2ZpbGUsCi0JCQkJCSAgICBpbWlub3IoaW5vZGUpLCBwc2V0dXAsIGNzZXR1cCk7CisJCQkJCSAgICBpbWlub3IoaW5vZGUpLCBzZXR1cCk7CiAJCWlmIChlcnIgPj0gMCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKQEAgLTIyODMsNyArMjIxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIC8qCiAgKiAgL3Byb2MgaW50ZXJmYWNlCiAgKi8KQEAgLTIzMTIsMTMgKzIyNDMsOCBAQAogCiBzdGF0aWMgdm9pZCBzbmRfcGNtX29zc19wcm9jX2ZyZWVfc2V0dXBfbGlzdChzdHJ1Y3Qgc25kX3BjbV9zdHIgKiBwc3RyKQogewotCXVuc2lnbmVkIGludCBpZHg7Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCwgKnNldHVwbjsKIAotCWZvciAoaWR4ID0gMCwgc3Vic3RyZWFtID0gcHN0ci0+c3Vic3RyZWFtOwotCSAgICAgaWR4IDwgcHN0ci0+c3Vic3RyZWFtX2NvdW50OyBpZHgrKywgc3Vic3RyZWFtID0gc3Vic3RyZWFtLT5uZXh0KQotCQlzdWJzdHJlYW0tPm9zcy5zZXR1cCA9IE5VTEw7CiAJZm9yIChzZXR1cCA9IHBzdHItPm9zcy5zZXR1cF9saXN0LCBwc3RyLT5vc3Muc2V0dXBfbGlzdCA9IE5VTEw7CiAJICAgICBzZXR1cDsgc2V0dXAgPSBzZXR1cG4pIHsKIAkJc2V0dXBuID0gc2V0dXAtPm5leHQ7CkBAIC0yMzc5LDIxICsyMzA1LDI4IEBACiAJCQl9CiAJCX0gd2hpbGUgKCpzdHIpOwogCQlpZiAoc2V0dXAgPT0gTlVMTCkgewotCQkJc2V0dXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXApLCBHRlBfS0VSTkVMKTsKLQkJCWlmIChzZXR1cCkgewotCQkJCWlmIChwc3RyLT5vc3Muc2V0dXBfbGlzdCA9PSBOVUxMKSB7Ci0JCQkJCXBzdHItPm9zcy5zZXR1cF9saXN0ID0gc2V0dXA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZm9yIChzZXR1cDEgPSBwc3RyLT5vc3Muc2V0dXBfbGlzdDsgc2V0dXAxLT5uZXh0OyBzZXR1cDEgPSBzZXR1cDEtPm5leHQpOwotCQkJCQlzZXR1cDEtPm5leHQgPSBzZXR1cDsKLQkJCQl9Ci0JCQkJdGVtcGxhdGUudGFza19uYW1lID0ga3N0cmR1cCh0YXNrX25hbWUsIEdGUF9LRVJORUwpOwotCQkJfSBlbHNlIHsKKwkJCXNldHVwID0ga21hbGxvYyhzaXplb2YoKnNldHVwKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoISBzZXR1cCkgewogCQkJCWJ1ZmZlci0+ZXJyb3IgPSAtRU5PTUVNOworCQkJCW11dGV4X2xvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKHBzdHItPm9zcy5zZXR1cF9saXN0ID09IE5VTEwpCisJCQkJcHN0ci0+b3NzLnNldHVwX2xpc3QgPSBzZXR1cDsKKwkJCWVsc2UgeworCQkJCWZvciAoc2V0dXAxID0gcHN0ci0+b3NzLnNldHVwX2xpc3Q7CisJCQkJICAgICBzZXR1cDEtPm5leHQ7IHNldHVwMSA9IHNldHVwMS0+bmV4dCk7CisJCQkJc2V0dXAxLT5uZXh0ID0gc2V0dXA7CisJCQl9CisJCQl0ZW1wbGF0ZS50YXNrX25hbWUgPSBrc3RyZHVwKHRhc2tfbmFtZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoISB0ZW1wbGF0ZS50YXNrX25hbWUpIHsKKwkJCQlrZnJlZShzZXR1cCk7CisJCQkJYnVmZmVyLT5lcnJvciA9IC1FTk9NRU07CisJCQkJbXV0ZXhfbG9jaygmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCX0KLQkJaWYgKHNldHVwKQotCQkJKnNldHVwID0gdGVtcGxhdGU7CisJCSpzZXR1cCA9IHRlbXBsYXRlOwogCQltdXRleF91bmxvY2soJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CiAJfQogfQpAQCAtMjQzNSwxMCArMjM2OCwxMCBAQAogCQl9CiAJfQogfQotI2Vsc2UgLyogIUNPTkZJR19QUk9DX0ZTICovCisjZWxzZSAvKiAhQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogI2RlZmluZSBzbmRfcGNtX29zc19wcm9jX2luaXQocGNtKQogI2RlZmluZSBzbmRfcGNtX29zc19wcm9jX2RvbmUocGNtKQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYgLyogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogCiAvKgogICogIEVOVFJZIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggM2RhNmEzOC4uODRiMDAwMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTKQorI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIAogI2RlZmluZSBTVEFURSh2KSBbU05EUlZfUENNX1NUQVRFXyMjdl0gPSAjdgogI2RlZmluZSBTVFJFQU0odikgW1NORFJWX1BDTV9TVFJFQU1fIyN2XSA9ICN2CkBAIC0xOTYsNyArMTk2LDcgQEAKIAlGT1JNQVQoVTE4XzNCRSksCiB9OwogCi1jb25zdCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9uYW1lKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQorc3RhdGljIGNvbnN0IGNoYXIgKnNuZF9wY21fZm9ybWF0X25hbWUoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpCiB7CiAJcmV0dXJuIHNuZF9wY21fZm9ybWF0X25hbWVzW2Zvcm1hdF07CiB9CkBAIC00MzYsNyArNDM2LDcgQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICJhcHBsX3B0ciAgICA6ICVsZFxuIiwgcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHIpOwogfQogCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVRworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKIHN0YXRpYyB2b2lkIHNuZF9wY21feHJ1bl9kZWJ1Z19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCiAJCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCX0KIAlwc3RyLT5wcm9jX2luZm9fZW50cnkgPSBlbnRyeTsKIAotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCiAJaWYgKChlbnRyeSA9IHNuZF9pbmZvX2NyZWF0ZV9jYXJkX2VudHJ5KHBjbS0+Y2FyZCwgInhydW5fZGVidWciLAogCQkJCQkJcHN0ci0+cHJvY19yb290KSkgIT0gTlVMTCkgewogCQllbnRyeS0+Yy50ZXh0LnJlYWRfc2l6ZSA9IDY0OwpAQCAtNTAxLDcgKzUwMSw3IEBACiAKIHN0YXRpYyBpbnQgc25kX3BjbV9zdHJlYW1fcHJvY19kb25lKHN0cnVjdCBzbmRfcGNtX3N0ciAqcHN0cikKIHsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwogCWlmIChwc3RyLT5wcm9jX3hydW5fZGVidWdfZW50cnkpIHsKIAkJc25kX2luZm9fdW5yZWdpc3Rlcihwc3RyLT5wcm9jX3hydW5fZGVidWdfZW50cnkpOwogCQlwc3RyLT5wcm9jX3hydW5fZGVidWdfZW50cnkgPSBOVUxMOwpAQCAtNTk5LDEyICs1OTksMTIgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZSAvKiAhQ09ORklHX1BST0NfRlMgKi8KKyNlbHNlIC8qICFDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTICovCiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3N0cmVhbV9wcm9jX2luaXQoc3RydWN0IHNuZF9wY21fc3RyICpwc3RyKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3N0cmVhbV9wcm9jX2RvbmUoc3RydWN0IHNuZF9wY21fc3RyICpwc3RyKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3N1YnN0cmVhbV9wcm9jX2luaXQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fc3Vic3RyZWFtX3Byb2NfZG9uZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkgeyByZXR1cm4gMDsgfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYgLyogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogCiAvKioKICAqIHNuZF9wY21fbmV3X3N0cmVhbSAtIGNyZWF0ZSBhIG5ldyBQQ00gc3RyZWFtCkBAIC03NzcsOCArNzc3LDkgQEAKIAlzbmRfcGNtX3RpY2tfZWxhcHNlZChzdWJzdHJlYW0pOwogfQogCi1pbnQgc25kX3BjbV9vcGVuX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtLAotCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICoqcnN1YnN0cmVhbSkKK2ludCBzbmRfcGNtX2F0dGFjaF9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwKKwkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKnJzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fc3RyICogcHN0cjsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKQEAgLTc5Myw3ICs3OTQsNyBAQAogCSpyc3Vic3RyZWFtID0gTlVMTDsKIAlzbmRfYXNzZXJ0KHBjbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlwc3RyID0gJnBjbS0+c3RyZWFtc1tzdHJlYW1dOwotCWlmIChwc3RyLT5zdWJzdHJlYW0gPT0gTlVMTCkKKwlpZiAocHN0ci0+c3Vic3RyZWFtID09IE5VTEwgfHwgcHN0ci0+c3Vic3RyZWFtX2NvdW50ID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZCA9IHBjbS0+Y2FyZDsKQEAgLTgwNyw4ICs4MDgsNiBAQAogCX0KIAl1cF9yZWFkKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CiAKLQlpZiAocHN0ci0+c3Vic3RyZWFtX2NvdW50ID09IDApCi0JCXJldHVybiAtRU5PREVWOwogCXN3aXRjaCAoc3RyZWFtKSB7CiAJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOgogCQlpZiAocGNtLT5pbmZvX2ZsYWdzICYgU05EUlZfUENNX0lORk9fSEFMRl9EVVBMRVgpIHsKQEAgLTg3NCwxMiArODczLDEzIEBACiAKIAlzdWJzdHJlYW0tPnJ1bnRpbWUgPSBydW50aW1lOwogCXN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcGNtLT5wcml2YXRlX2RhdGE7CisJc3Vic3RyZWFtLT5mZmlsZSA9IGZpbGU7CiAJcHN0ci0+c3Vic3RyZWFtX29wZW5lZCsrOwogCSpyc3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXJldHVybiAwOwogfQogCi12b2lkIHNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit2b2lkIHNuZF9wY21fZGV0YWNoX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCXN1YnN0cmVhbS0+ZmlsZSA9IE5VTEw7CkBAIC0xMTExLDggKzExMTEsNiBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N1c3BlbmQpOwogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N1c3BlbmRfYWxsKTsKICNlbmRpZgotRVhQT1JUX1NZTUJPTChzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bCk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9wY21fa2VybmVsX2NhcHR1cmVfaW9jdGwpOwogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2tlcm5lbF9pb2N0bCk7CiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbW1hcF9kYXRhKTsKICNpZiBTTkRSVl9QQ01fSU5GT19NTUFQX0lPTUVNCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IGVlYmEyZjAuLmVlZGM2Y2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIHN0YXRpYyB2b2lkIHhydW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCiAJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewogCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgIlhSVU46IHBjbUMlZEQlZCVjXG4iLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmNhcmQtPm51bWJlciwKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWRlbHRhID0gaHdfcHRyX2ludGVycnVwdCAtIG5ld19od19wdHI7CiAJaWYgKGRlbHRhID4gMCkgewogCQlpZiAoKHNuZF9wY21fdWZyYW1lc190KWRlbHRhIDwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKSB7Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVRworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKIAkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMSAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKIAkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzFdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwogCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJZGVsdGEgPSBvbGRfaHdfcHRyIC0gbmV3X2h3X3B0cjsKIAlpZiAoZGVsdGEgPiAwKSB7CiAJCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnBlcmlvZHMgPiAyICYmIHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewogCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMl0gKHN0cmVhbSA9ICVpLCBkZWx0YTogLSVsZCwgbWF4IGppdHRlciA9ICVsZCk6IHdyb25nIGludGVycnVwdCBhY2tub3dsZWRnZT9cbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZykgZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMik7CiAJCQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCkBAIC0yMjk5LDE5ICsyMjk5LDcgQEAKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTikKIAkJcmV0dXJuIC1FQkFERkQ7CiAKLQlzbmRfYXNzZXJ0KHN1YnN0cmVhbS0+ZmZpbGUgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJbm9uYmxvY2sgPSAhIShzdWJzdHJlYW0tPmZmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKLQlpZiAoc3Vic3RyZWFtLT5vc3Mub3NzKSB7Ci0JCXN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc2V0dXAgPSBzdWJzdHJlYW0tPm9zcy5zZXR1cDsKLQkJaWYgKHNldHVwICE9IE5VTEwpIHsKLQkJCWlmIChzZXR1cC0+bm9uYmxvY2spCi0JCQkJbm9uYmxvY2sgPSAxOwotCQkJZWxzZSBpZiAoc2V0dXAtPmJsb2NrKQotCQkJCW5vbmJsb2NrID0gMDsKLQkJfQotCX0KLSNlbmRpZgogCiAJaWYgKHJ1bnRpbWUtPmFjY2VzcyAhPSBTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEICYmCiAJICAgIHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkKQEAgLTIzNzQsMTkgKzIzNjIsNyBAQAogCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9PUEVOKQogCQlyZXR1cm4gLUVCQURGRDsKIAotCXNuZF9hc3NlcnQoc3Vic3RyZWFtLT5mZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlub25ibG9jayA9ICEhKHN1YnN0cmVhbS0+ZmZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQotCWlmIChzdWJzdHJlYW0tPm9zcy5vc3MpIHsKLQkJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCA9IHN1YnN0cmVhbS0+b3NzLnNldHVwOwotCQlpZiAoc2V0dXAgIT0gTlVMTCkgewotCQkJaWYgKHNldHVwLT5ub25ibG9jaykKLQkJCQlub25ibG9jayA9IDE7Ci0JCQllbHNlIGlmIChzZXR1cC0+YmxvY2spCi0JCQkJbm9uYmxvY2sgPSAwOwotCQl9Ci0JfQotI2VuZGlmCiAKIAlpZiAocnVudGltZS0+YWNjZXNzICE9IFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjU5NiwxOSArMjU3Miw3IEBACiAJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX09QRU4pCiAJCXJldHVybiAtRUJBREZEOwogCi0Jc25kX2Fzc2VydChzdWJzdHJlYW0tPmZmaWxlICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCW5vbmJsb2NrID0gISEoc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JaWYgKHN1YnN0cmVhbS0+b3NzLm9zcykgewotCQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gc3Vic3RyZWFtLT5vc3Muc2V0dXA7Ci0JCWlmIChzZXR1cCAhPSBOVUxMKSB7Ci0JCQlpZiAoc2V0dXAtPm5vbmJsb2NrKQotCQkJCW5vbmJsb2NrID0gMTsKLQkJCWVsc2UgaWYgKHNldHVwLT5ibG9jaykKLQkJCQlub25ibG9jayA9IDA7Ci0JCX0KLQl9Ci0jZW5kaWYKIAlpZiAocnVudGltZS0+YWNjZXNzICE9IFNORFJWX1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBzbmRfcGNtX2xpYl9yZWFkMShzdWJzdHJlYW0sICh1bnNpZ25lZCBsb25nKWJ1Ziwgc2l6ZSwgbm9uYmxvY2ssIHNuZF9wY21fbGliX3JlYWRfdHJhbnNmZXIpOwpAQCAtMjY2NSwyMCArMjYyOSw3IEBACiAJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX09QRU4pCiAJCXJldHVybiAtRUJBREZEOwogCi0Jc25kX2Fzc2VydChzdWJzdHJlYW0tPmZmaWxlICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCW5vbmJsb2NrID0gISEoc3Vic3RyZWFtLT5mZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JaWYgKHN1YnN0cmVhbS0+b3NzLm9zcykgewotCQlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gc3Vic3RyZWFtLT5vc3Muc2V0dXA7Ci0JCWlmIChzZXR1cCAhPSBOVUxMKSB7Ci0JCQlpZiAoc2V0dXAtPm5vbmJsb2NrKQotCQkJCW5vbmJsb2NrID0gMTsKLQkJCWVsc2UgaWYgKHNldHVwLT5ibG9jaykKLQkJCQlub25ibG9jayA9IDA7Ci0JCX0KLQl9Ci0jZW5kaWYKLQogCWlmIChydW50aW1lLT5hY2Nlc3MgIT0gU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIHNuZF9wY21fbGliX3JlYWQxKHN1YnN0cmVhbSwgKHVuc2lnbmVkIGxvbmcpYnVmcywgZnJhbWVzLCBub25ibG9jaywgc25kX3BjbV9saWJfcmVhZHZfdHJhbnNmZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwppbmRleCBhMDExOWFlLi40MjhmOGMxIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworKysgYi9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwpAQCAtMTAwLDggKzEwMCwxMCBAQAogaW50IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZG1hX2ZyZWUoc3Vic3RyZWFtKTsKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTCiAJc25kX2luZm9fdW5yZWdpc3RlcihzdWJzdHJlYW0tPnByb2NfcHJlYWxsb2NfZW50cnkpOwogCXN1YnN0cmVhbS0+cHJvY19wcmVhbGxvY19lbnRyeSA9IE5VTEw7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI0LDcgKzEyNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMKIC8qCiAgKiByZWFkIGNhbGxiYWNrIGZvciBwcmVhbGxvYyBwcm9jIGZpbGUKICAqCkBAIC0yMDMsOSArMjA1LDkgQEAKIAlzdWJzdHJlYW0tPnByb2NfcHJlYWxsb2NfZW50cnkgPSBlbnRyeTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19QUk9DX0ZTICovCisjZWxzZSAvKiAhQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyAqLwogI2RlZmluZSBwcmVhbGxvY2F0ZV9pbmZvX2luaXQocykKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgKi8KIAogLyoKICAqIHByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyIGFuZCBjcmVhdGUgYSBwcm9jIGZpbGUgZm9yIHRoZSBzdWJzdHJlYW0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggMDFmMTUwZi4uMDg2MGM1YSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTExNzAsNyArMTE3MCw3IEBACiAJaW50IHJlczsKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwotCWlmICgocmVzID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBzdWJzdHJlYW0tPmZmaWxlKSkgPj0gMCkKKwlpZiAoKHJlcyA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCkpID49IDApCiAJCXJlcyA9IHNuZF9wY21fYWN0aW9uX2xvY2tfaXJxKCZzbmRfcGNtX2FjdGlvbl9yZXN1bWUsIHN1YnN0cmVhbSwgMCk7CiAJc25kX3Bvd2VyX3VubG9jayhjYXJkKTsKIAlyZXR1cm4gcmVzOwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAogCXNuZF9wb3dlcl9sb2NrKGNhcmQpOwogCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKLQkJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBzdWJzdHJlYW0tPmZmaWxlKTsKKwkJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIF91bmxvY2s7CiAJfQpAQCAtMTMxMywxMyArMTMxMywxMyBAQAogICoKICAqIFByZXBhcmUgdGhlIFBDTSBzdWJzdHJlYW0gdG8gYmUgdHJpZ2dlcmFibGUuCiAgKi8KLWludCBzbmRfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IHNuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlpbnQgcmVzOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkOwogCiAJc25kX3Bvd2VyX2xvY2soY2FyZCk7Ci0JaWYgKChyZXMgPSBzbmRfcG93ZXJfd2FpdChjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDAsIHN1YnN0cmVhbS0+ZmZpbGUpKSA+PSAwKQorCWlmICgocmVzID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKSkgPj0gMCkKIAkJcmVzID0gc25kX3BjbV9hY3Rpb25fbm9uYXRvbWljKCZzbmRfcGNtX2FjdGlvbl9wcmVwYXJlLCBzdWJzdHJlYW0sIDApOwogCXNuZF9wb3dlcl91bmxvY2soY2FyZCk7CiAJcmV0dXJuIHJlczsKQEAgLTE0MTAsNyArMTQxMCw3IEBACiAKIAlzbmRfcG93ZXJfbG9jayhjYXJkKTsKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7Ci0JCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgc3Vic3RyZWFtLT5mZmlsZSk7CisJCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAJCWlmIChyZXN1bHQgPCAwKSB7CiAJCQlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCQkJcmV0dXJuIHJlc3VsdDsKQEAgLTE1MzMsNyArMTUzMyw3IEBACiAKIAlzbmRfcG93ZXJfbG9jayhjYXJkKTsKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7Ci0JCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgc3Vic3RyZWFtLT5mZmlsZSk7CisJCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZ290byBfdW5sb2NrOwogCX0KQEAgLTE5OTUsMjggKzE5OTUsNjUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc25kX3BjbV9yZWxlYXNlX2ZpbGUoc3RydWN0IHNuZF9wY21fZmlsZSAqIHBjbV9maWxlKQorc3RhdGljIHZvaWQgcGNtX3JlbGVhc2VfcHJpdmF0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNtX3N0ciAqIHN0cjsKKwlzdHJ1Y3Qgc25kX3BjbV9maWxlICpwY21fZmlsZSA9IHN1YnN0cmVhbS0+ZmlsZTsKIAotCXNuZF9hc3NlcnQocGNtX2ZpbGUgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7Ci0Jc3Vic3RyZWFtID0gcGNtX2ZpbGUtPnN1YnN0cmVhbTsKLQlzbmRfYXNzZXJ0KHN1YnN0cmVhbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0ciA9IHN1YnN0cmVhbS0+cHN0cjsKIAlzbmRfcGNtX3VubGluayhzdWJzdHJlYW0pOwotCWlmIChzdWJzdHJlYW0tPmZmaWxlICE9IE5VTEwpIHsKKwlzbmRfcGNtX3JlbW92ZV9maWxlKHN1YnN0cmVhbS0+cHN0ciwgcGNtX2ZpbGUpOworCWtmcmVlKHBjbV9maWxlKTsKK30KKwordm9pZCBzbmRfcGNtX3JlbGVhc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXNuZF9wY21fZHJvcChzdWJzdHJlYW0pOworCWlmIChzdWJzdHJlYW0tPmh3X29wZW5lZCkgewogCQlpZiAoc3Vic3RyZWFtLT5vcHMtPmh3X2ZyZWUgIT0gTlVMTCkKIAkJCXN1YnN0cmVhbS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSk7CiAJCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQlzdWJzdHJlYW0tPmZmaWxlID0gTlVMTDsKKwkJc3Vic3RyZWFtLT5od19vcGVuZWQgPSAwOwogCX0KLQlzbmRfcGNtX3JlbW92ZV9maWxlKHN0ciwgcGNtX2ZpbGUpOwotCXNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKLQlrZnJlZShwY21fZmlsZSk7CisJaWYgKHN1YnN0cmVhbS0+cGNtX3JlbGVhc2UpIHsKKwkJc3Vic3RyZWFtLT5wY21fcmVsZWFzZShzdWJzdHJlYW0pOworCQlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gTlVMTDsKKwl9CisJc25kX3BjbV9kZXRhY2hfc3Vic3RyZWFtKHN1YnN0cmVhbSk7Cit9CisKK2ludCBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKnJzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fYXR0YWNoX3N1YnN0cmVhbShwY20sIHN0cmVhbSwgZmlsZSwgJnN1YnN0cmVhbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5ub19tbWFwX2N0cmwgPSAwOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdChzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmICgoZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKSkgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3Vic3RyZWFtLT5od19vcGVuZWQgPSAxOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50c19jb21wbGV0ZShzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludHNfY29tcGxldGUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkqcnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAlyZXR1cm4gMDsKKworIGVycm9yOgorCXNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fb3Blbl9maWxlKHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMjAyNCw1MiArMjA2MSwyOSBAQAogCQkJICAgICBpbnQgc3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9maWxlICoqcnBjbV9maWxlKQogewotCWludCBlcnIgPSAwOwogCXN0cnVjdCBzbmRfcGNtX2ZpbGUgKnBjbV9maWxlOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX3N0ciAqc3RyOworCWludCBlcnI7CiAKIAlzbmRfYXNzZXJ0KHJwY21fZmlsZSAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAJKnJwY21fZmlsZSA9IE5VTEw7CiAKKwllcnIgPSBzbmRfcGNtX29wZW5fc3Vic3RyZWFtKHBjbSwgc3RyZWFtLCBmaWxlLCAmc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXBjbV9maWxlID0ga3phbGxvYyhzaXplb2YoKnBjbV9maWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBjbV9maWxlID09IE5VTEwpIHsKKwkJc25kX3BjbV9yZWxlYXNlX3N1YnN0cmVhbShzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KLQlpZiAoKGVyciA9IHNuZF9wY21fb3Blbl9zdWJzdHJlYW0ocGNtLCBzdHJlYW0sICZzdWJzdHJlYW0pKSA8IDApIHsKLQkJa2ZyZWUocGNtX2ZpbGUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQogCXN0ciA9IHN1YnN0cmVhbS0+cHN0cjsKIAlzdWJzdHJlYW0tPmZpbGUgPSBwY21fZmlsZTsKLQlzdWJzdHJlYW0tPm5vX21tYXBfY3RybCA9IDA7Ci0KKwlzdWJzdHJlYW0tPnBjbV9yZWxlYXNlID0gcGNtX3JlbGVhc2VfcHJpdmF0ZTsKIAlwY21fZmlsZS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCiAJc25kX3BjbV9hZGRfZmlsZShzdHIsIHBjbV9maWxlKTsKIAotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdChzdWJzdHJlYW0pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGQoInNuZF9wY21faHdfY29uc3RyYWludHNfaW5pdCBmYWlsZWRcbiIpOwotCQlzbmRfcGNtX3JlbGVhc2VfZmlsZShwY21fZmlsZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JaWYgKChlcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pKSA8IDApIHsKLQkJc25kX3BjbV9yZWxlYXNlX2ZpbGUocGNtX2ZpbGUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlzdWJzdHJlYW0tPmZmaWxlID0gZmlsZTsKLQotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludHNfY29tcGxldGUoc3Vic3RyZWFtKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRkKCJzbmRfcGNtX2h3X2NvbnN0cmFpbnRzX2NvbXBsZXRlIGZhaWxlZFxuIik7Ci0JCXNuZF9wY21fcmVsZWFzZV9maWxlKHBjbV9maWxlKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwY21fZmlsZTsKIAkqcnBjbV9maWxlID0gcGNtX2ZpbGU7CiAJcmV0dXJuIDA7CkBAIC0yMTU4LDEwICsyMTcyLDkgQEAKIAlzbmRfYXNzZXJ0KHN1YnN0cmVhbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKIAlzbmRfYXNzZXJ0KCFhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5ydW50aW1lLT5tbWFwX2NvdW50KSwgKTsKIAlwY20gPSBzdWJzdHJlYW0tPnBjbTsKLQlzbmRfcGNtX2Ryb3Aoc3Vic3RyZWFtKTsKIAlmYXN5bmNfaGVscGVyKC0xLCBmaWxlLCAwLCAmc3Vic3RyZWFtLT5ydW50aW1lLT5mYXN5bmMpOwogCW11dGV4X2xvY2soJnBjbS0+b3Blbl9tdXRleCk7Ci0Jc25kX3BjbV9yZWxlYXNlX2ZpbGUocGNtX2ZpbGUpOworCXNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0oc3Vic3RyZWFtKTsKIAltdXRleF91bmxvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcGNtLT5vcGVuX3dhaXQpOwogCW1vZHVsZV9wdXQocGNtLT5jYXJkLT5tb2R1bGUpOwpAQCAtMjQ4MCwxMSArMjQ5Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAJCQotc3RhdGljIGludCBzbmRfcGNtX3BsYXliYWNrX2lvY3RsMShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKLXN0YXRpYyBpbnQgc25kX3BjbV9jYXB0dXJlX2lvY3RsMShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotCiBzdGF0aWMgaW50IHNuZF9wY21fY29tbW9uX2lvY3RsMShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKQEAgLTI3MzYsNDEgKzI3NDQsMjggQEAKIAlyZXR1cm4gc25kX3BjbV9jYXB0dXJlX2lvY3RsMShwY21fZmlsZS0+c3Vic3RyZWFtLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiB9CiAKLWludCBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQltbV9zZWdtZW50X3QgZnM7Ci0JaW50IHJlc3VsdDsKLQkKLQlmcyA9IHNuZF9lbnRlcl91c2VyKCk7Ci0JcmVzdWx0ID0gc25kX3BjbV9wbGF5YmFja19pb2N0bDEoc3Vic3RyZWFtLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0Jc25kX2xlYXZlX3VzZXIoZnMpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JbW1fc2VnbWVudF90IGZzOwotCWludCByZXN1bHQ7Ci0JCi0JZnMgPSBzbmRfZW50ZXJfdXNlcigpOwotCXJlc3VsdCA9IHNuZF9wY21fY2FwdHVyZV9pb2N0bDEoc3Vic3RyZWFtLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0Jc25kX2xlYXZlX3VzZXIoZnMpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KIGludCBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CisJbW1fc2VnbWVudF90IGZzOworCWludCByZXN1bHQ7CisJCisJZnMgPSBzbmRfZW50ZXJfdXNlcigpOwogCXN3aXRjaCAoc3Vic3RyZWFtLT5zdHJlYW0pIHsKIAljYXNlIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s6Ci0JCXJldHVybiBzbmRfcGNtX2tlcm5lbF9wbGF5YmFja19pb2N0bChzdWJzdHJlYW0sIGNtZCwgYXJnKTsKKwkJcmVzdWx0ID0gc25kX3BjbV9wbGF5YmFja19pb2N0bDEoc3Vic3RyZWFtLAorCQkJCQkJIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU6Ci0JCXJldHVybiBzbmRfcGNtX2tlcm5lbF9jYXB0dXJlX2lvY3RsKHN1YnN0cmVhbSwgY21kLCBhcmcpOworCQlyZXN1bHQgPSBzbmRfcGNtX2NhcHR1cmVfaW9jdGwxKHN1YnN0cmVhbSwKKwkJCQkJCWNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCX0KKwlzbmRfbGVhdmVfdXNlcihmcyk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc25kX3BjbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggZTM1ZmQ1Ny4uYWUwZGY1NCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNjc1LDEwICs2NzUsOCBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0RVTU1ZX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7Ci0JCX0KKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CiAJfQpAQCAtNjg2LDE0ICs2ODQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJEdW1teSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2R1bW15X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZHVtbXlfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2R1bW15X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKaW5kZXggOWVhMzA1OS4uNzdiMDYwMCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX21wdTQwMV9wbnBpZHMpOwogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfbXB1NDAxX3BucChpbnQgZGV2LCBzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlLAorc3RhdGljIGludCBfX2RldmluaXQgc25kX21wdTQwMV9wbnAoaW50IGRldiwgc3RydWN0IHBucF9kZXYgKmRldmljZSwKIAkJCQkgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQogewogCWlmICghcG5wX3BvcnRfdmFsaWQoZGV2aWNlLCAwKSB8fApAQCAtMjUxLDEwICsyNTEsOCBAQAogI2VuZGlmCiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX01QVTQwMV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OwotCQl9CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOwogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQlzbmRfbXB1NDAxX2RldmljZXMrKzsKIAl9CkBAIC0yNjYsMTQgKzI2NCwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIk1QVS00MDEgZGV2aWNlIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9tcHU0MDFfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9tcHU0MDFfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX21wdTQwMV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYwppbmRleCA4Njg3YWUzLi5iNDlhNDVjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKQEAgLTE4Myw3ICsxODMsOCBAQAogCiAgKi8KIAotc3RhdGljIHZvaWQgc25kX21wdTQwMV91YXJ0X2NtZChzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSwgdW5zaWduZWQgY2hhciBjbWQsIGludCBhY2spCitzdGF0aWMgaW50IHNuZF9tcHU0MDFfdWFydF9jbWQoc3RydWN0IHNuZF9tcHU0MDEgKiBtcHUsIHVuc2lnbmVkIGNoYXIgY21kLAorCQlpbnQgYWNrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRpbWVvdXQsIG9rOwpAQCAtMjE4LDkgKzIxOSwxMSBAQAogCQlvayA9IDE7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCWlmICghIG9rKQorCWlmICghb2spIHsKIAkJc25kX3ByaW50aygiY21kOiAweCV4IGZhaWxlZCBhdCAweCVseCAoc3RhdHVzID0gMHgleCwgZGF0YSA9IDB4JXgpXG4iLCBjbWQsIG1wdS0+cG9ydCwgbXB1LT5yZWFkKG1wdSwgTVBVNDAxQyhtcHUpKSwgbXB1LT5yZWFkKG1wdSwgTVBVNDAxRChtcHUpKSk7Ci0JLy8gc25kX3ByaW50aygiY21kOiAweCV4IGF0IDB4JWx4IChzdGF0dXMgPSAweCV4LCBkYXRhID0gMHgleClcbiIsIGNtZCwgbXB1LT5wb3J0LCBtcHUtPnJlYWQobXB1LCBNUFU0MDFDKG1wdSkpLCBtcHUtPnJlYWQobXB1LCBNUFU0MDFEKG1wdSkpKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM1LDEyICsyMzgsMTkgQEAKIAlpZiAobXB1LT5vcGVuX2lucHV0ICYmIChlcnIgPSBtcHUtPm9wZW5faW5wdXQobXB1KSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWlmICghIHRlc3RfYml0KE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQsICZtcHUtPm1vZGUpKSB7Ci0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDEpOwotCQlzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX0VOVEVSX1VBUlQsIDEpOworCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSkpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfRU5URVJfVUFSVCwgMSkpCisJCQlnb3RvIGVycm9yX291dDsKIAl9CiAJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBzdWJzdHJlYW07CiAJc2V0X2JpdChNUFU0MDFfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOwogCXJldHVybiAwOworCitlcnJvcl9vdXQ6CisJaWYgKG1wdS0+b3Blbl9pbnB1dCAmJiBtcHUtPmNsb3NlX2lucHV0KQorCQltcHUtPmNsb3NlX2lucHV0KG1wdSk7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgc25kX21wdTQwMV91YXJ0X291dHB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTI1MiwzOSArMjYyLDUyIEBACiAJaWYgKG1wdS0+b3Blbl9vdXRwdXQgJiYgKGVyciA9IG1wdS0+b3Blbl9vdXRwdXQobXB1KSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWlmICghIHRlc3RfYml0KE1QVTQwMV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSkpIHsKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSk7Ci0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfRU5URVJfVUFSVCwgMSk7CisJCWlmIChzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAxKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9FTlRFUl9VQVJULCAxKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAltcHUtPnN1YnN0cmVhbV9vdXRwdXQgPSBzdWJzdHJlYW07CiAJc2V0X2JpdChNUFU0MDFfTU9ERV9CSVRfT1VUUFVULCAmbXB1LT5tb2RlKTsKIAlyZXR1cm4gMDsKKworZXJyb3Jfb3V0OgorCWlmIChtcHUtPm9wZW5fb3V0cHV0ICYmIG1wdS0+Y2xvc2Vfb3V0cHV0KQorCQltcHUtPmNsb3NlX291dHB1dChtcHUpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IHNuZF9tcHU0MDFfdWFydF9pbnB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9tcHU0MDEgKm1wdTsKKwlpbnQgZXJyID0gMDsKIAogCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKIAljbGVhcl9iaXQoTVBVNDAxX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKIAltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IE5VTEw7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX09VVFBVVCwgJm1wdS0+bW9kZSkpCi0JCXNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDApOworCQllcnIgPSBzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAwKTsKIAlpZiAobXB1LT5jbG9zZV9pbnB1dCkKIAkJbXB1LT5jbG9zZV9pbnB1dChtcHUpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9tcHU0MDFfdWFydF9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfbXB1NDAxICptcHU7CisJaW50IGVyciA9IDA7CiAKIAltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CiAJY2xlYXJfYml0KE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQsICZtcHUtPm1vZGUpOwogCW1wdS0+c3Vic3RyZWFtX291dHB1dCA9IE5VTEw7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKSkKLQkJc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMCk7CisJCWVyciA9IHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfUkVTRVQsIDApOwogCWlmIChtcHUtPmNsb3NlX291dHB1dCkKIAkJbXB1LT5jbG9zZV9vdXRwdXQobXB1KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE2LDYgKzMzOSw3IEBACiAJCQlzbmRfbXB1NDAxX3VhcnRfcmVtb3ZlX3RpbWVyKG1wdSwgMSk7CiAJCWNsZWFyX2JpdChNUFU0MDFfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwgJm1wdS0+bW9kZSk7CiAJfQorCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCmluZGV4IDFhN2ZiZWYuLmMwMWI0YzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCkBAIC05OTYsMTAgKzk5Niw4IEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0VSSUFMX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7Ci0JCX0KKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CiAJfQpAQCAtMTAwNywxNCArMTAwNSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgInNlcmlhbCBtaWRpIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfc2VyaWFsX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfc2VyaWFsX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9zZXJpYWxfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCBhM2VlMzA2Li4yNmViMjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtMTY5LDEwICsxNjksOCBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1ZJUk1JRElfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKLQkJfQorCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKIAl9CkBAIC0xODAsMTQgKzE3OCwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIkNhcmQtVmlyTUlESSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3Zpcm1pZGlfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF92aXJtaWRpX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF92aXJtaWRpX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9LY29uZmlnIGIvc291bmQvaXNhL0tjb25maWcKaW5kZXggZmY4ZmVmOS4uNTU3YzRkZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL0tjb25maWcKKysrIGIvc291bmQvaXNhL0tjb25maWcKQEAgLTExLDYgKzExLDE1IEBACiAgICAgICAgIHRyaXN0YXRlCiAgICAgICAgIHNlbGVjdCBTTkRfUENNCiAKK2NvbmZpZyBTTkRfQURMSUIKKwl0cmlzdGF0ZSAiQWRMaWIgRk0gY2FyZCIKKwlzZWxlY3QgU05EX09QTDNfTElCCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEFkTGliIEZNIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWRsaWIuCisKIGNvbmZpZyBTTkRfQUQxODE2QQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBTb3VuZFBvcnQgQUQxODE2QSIKIAlkZXBlbmRzIG9uIFNORCAmJiBQTlAgJiYgSVNBCkBAIC0yOTIsNiArMzAxLDIwIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtb3B0aTkzeC4KIAorY29uZmlnIFNORF9NSVJPCisJdHJpc3RhdGUgIk1pcm8gbWlyb1NPVU5EIFBDTTFwcm8vUENNMTIvUENNMjByYWRpbyBkcml2ZXIiCisJZGVwZW5kcyBvbiBTTkQKKwlzZWxlY3QgU05EX09QTDRfTElCCisJc2VsZWN0IFNORF9DUzQyMzFfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNaXJvIG1pcm9TT1VORCBQQ00xIHBybywgCisJICBtaXJvU09VTkQgUENNMTIgYW5kIG1pcm9TT1VORCBQQ00yMCBSYWRpbyBzb3VuZGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbWlyby4KKwogY29uZmlnIFNORF9TQjgKIAl0cmlzdGF0ZSAiU291bmQgQmxhc3RlciAxLjAvMi4wL1BybyAoOC1iaXQpIgogCWRlcGVuZHMgb24gU05ECmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvTWFrZWZpbGUgYi9zb3VuZC9pc2EvTWFrZWZpbGUKaW5kZXggMDU3MjRlYi4uYmIzMTdjYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KICMKIAorc25kLWFkbGliLW9ianMgOj0gYWRsaWIubwogc25kLWFsczEwMC1vYmpzIDo9IGFsczEwMC5vCiBzbmQtYXp0MjMyMC1vYmpzIDo9IGF6dDIzMjAubwogc25kLWNtaTgzMzAtb2JqcyA6PSBjbWk4MzMwLm8KQEAgLTEzLDYgKzE0LDcgQEAKIHNuZC1zc2NhcGUtb2JqcyA6PSBzc2NhcGUubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CitvYmotJChDT05GSUdfU05EX0FETElCKSArPSBzbmQtYWRsaWIubwogb2JqLSQoQ09ORklHX1NORF9BTFMxMDApICs9IHNuZC1hbHMxMDAubwogb2JqLSQoQ09ORklHX1NORF9BWlQyMzIwKSArPSBzbmQtYXp0MjMyMC5vCiBvYmotJChDT05GSUdfU05EX0NNSTgzMzApICs9IHNuZC1jbWk4MzMwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDMyNmEwNTcuLjk5OTA4ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtMTkzLDkgKzE5MywxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0FEMTg0OF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTIwNCwxNCArMjA2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiQUQxODQ4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9hZDE4NDhfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkbGliLmMgYi9zb3VuZC9pc2EvYWRsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTI0MzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL2FkbGliLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBBZExpYiBGTSBjYXJkIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisKKyNkZWZpbmUgQ1JEX05BTUUgIkFkTGliIEZNIgorI2RlZmluZSBEUlZfTkFNRSAic25kX2FkbGliIgorCitNT0RVTEVfREVTQ1JJUFRJT04oQ1JEX05BTUUpOworTU9EVUxFX0FVVEhPUigiUmVuZSBIZXJtYW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOworc3RhdGljIGxvbmcgcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOworCitzdGF0aWMgdm9pZCBzbmRfYWRsaWJfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjYXJkLT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWRsaWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisKKwlpbnQgZXJyb3IsIGkgPSBkZXZpY2UtPmlkOworCisJaWYgKHBvcnRbaV0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogcGxlYXNlIHNwZWNpZnkgcG9ydFxuIik7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBvdXQwOworCX0KKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCk7CisJaWYgKCFjYXJkKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGNyZWF0ZSBjYXJkXG4iKTsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIG91dDA7CisJfQorCisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gcmVxdWVzdF9yZWdpb24ocG9ydFtpXSwgNCwgQ1JEX05BTUUpOworCWlmICghY2FyZC0+cHJpdmF0ZV9kYXRhKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGdyYWIgcG9ydHNcbiIpOworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBvdXQxOworCX0KKwljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYWRsaWJfZnJlZTsKKworCWVycm9yID0gc25kX29wbDNfY3JlYXRlKGNhcmQsIHBvcnRbaV0sIHBvcnRbaV0gKyAyLCBPUEwzX0hXX0FVVE8sIDEsICZvcGwzKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGNyZWF0ZSBPUExcbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMCwgTlVMTCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNvdWxkIG5vdCBjcmVhdGUgRk1cbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJWX05BTUUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIENSRF9OQU1FKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCBDUkRfTkFNRSAiIGF0ICUjbHgiLCBwb3J0W2ldKTsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldmljZS0+ZGV2KTsKKworCWVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNvdWxkIG5vdCByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBvdXQxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldmljZSwgY2FyZCk7CisJcmV0dXJuIDA7CisKK291dDE6CXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitvdXQwOglyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9hZGxpYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2FkbGliX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc25kX2FkbGliX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2FkbGliX3JlbW92ZSksCisKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUlZfTkFNRQorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9hZGxpYl9pbml0KHZvaWQpCit7CisJaW50IGksIGNhcmRzOworCisJaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2FkbGliX2RyaXZlcikgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IHJlZ2lzdGVyIGRyaXZlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvciAoY2FyZHMgPSAwLCBpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCisJCWlmICghZW5hYmxlW2ldKQorCQkJY29udGludWU7CisKKwkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgaSwgTlVMTCwgMCk7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGV2aWNlc1tpXSA9IGRldmljZTsKKwkJY2FyZHMrKzsKKwl9CisKKwlpZiAoIWNhcmRzKSB7CisjaWZkZWYgTU9EVUxFCisJCXByaW50ayhLRVJOX0VSUiBDUkRfTkFNRSAiIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOworI2VuZGlmCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfYWRsaWJfZHJpdmVyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2FkbGliX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2VzW2ldKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2FkbGliX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9hZGxpYl9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9hZGxpYl9leGl0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzMwLmMgYi9zb3VuZC9pc2EvY21pODMzMC5jCmluZGV4IGZhNjMwNDhhLi4zYzFlOWZkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY21pODMzMC5jCisrKyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKQEAgLTY5MywxNSArNjkzLDE3IEBACiAJaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9jbWk4MzMwX2RyaXZlcikpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQkJaWYgKGlzX2lzYXBucF9zZWxlY3RlZChpKSkKKwkJaWYgKCEgZW5hYmxlW2ldIHx8IGlzX2lzYXBucF9zZWxlY3RlZChpKSkKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKENNSTgzMzBfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCXBsYXRmb3JtX2RldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC03MTksMTQgKzcyMSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9jbWk4MzMwX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfY21pODMzMF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfY21pODMzMF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCBhMzBkY2Q5Li4zOTczMTBmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTIwOSw5ICsyMDksMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNORF9DUzQyMzFfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0yMjAsMTQgKzIyMiwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIkNTNDIzMSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2NzNDIzMV91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2NzNDIzMV91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfY3M0MjMxX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCmluZGV4IDM4MmJiMTcuLmY3ZmE3NzkzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKQEAgLTc4MCw5ICs3ODAsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKENTNDIzWF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJc25kX2NzNDIzeF9kZXZpY2VzKys7CkBAIC04MDIsMTQgKzgwNCwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgSURFTlQgIiBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2NzNDIzeF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2NzNDIzeF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfY3M0MjN4X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IDJiNjlmYzguLmU5MDY4OWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtMjEzLDkgKzIxMywxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRVMxNjg4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjI0LDE0ICsyMjYsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrKEtFUk5fRVJSICJFU1MgQXVkaW9Ecml2ZSBFUzE2ODggc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9lczE2ODhfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9lczE2ODhfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2VzMTY4OF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggOWZiYzE4NS4uZTY5NDVkYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtODUsNiArODUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC0yMzkxLDkgKzIzOTMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTMThYWF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJICAgICAgIAkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCXBsYXRmb3JtX2RldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0yNDExLDE0ICsyNDE1LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkVTUyBBdWRpb0RyaXZlIEVTMTh4eCBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2VzMTh4eF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2VzMTh4eF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfZXMxOHh4X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggMjZkY2NmZS4uMzcwNTdhMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTI1Myw5ICsyNTMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEdVU0NMQVNTSUNfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0yNjQsMTQgKzI2NiwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlwcmludGsoS0VSTl9FUlIgIkdVUyBDbGFzc2ljIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfZ3VzY2xhc3NpY191bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2d1c2NsYXNzaWNfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2d1c2NsYXNzaWNfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCAzMWRjMjA1Li4wNTg1MmZjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMzYzLDkgKzM2MywxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoR1VTRVhUUkVNRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTM3NCwxNCArMzc2LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiR1VTIEV4dHJlbWUgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9ndXNleHRyZW1lX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfZ3VzZXh0cmVtZV91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfZ3VzZXh0cmVtZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwppbmRleCBjYWZiOWI2Li5mY2YyYzhmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKQEAgLTM5MCw5ICszOTAsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEdVU01BWF9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTQwMSwxNCArNDAzLDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiR1VTIE1BWCBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX2d1c21heF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX2d1c21heF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfZ3VzbWF4X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCmluZGV4IGRlNzFiN2E5Li40Mjk4ZDMzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTk0Nyw5ICs5NDcsMTEgQEAKICNlbmRpZgogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKElOVEVSV0FWRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTk2NiwxNCArOTY4LDEwIEBACiAjaWZkZWYgTU9EVUxFCiAJCXByaW50ayhLRVJOX0VSUiAiSW50ZXJXYXZlIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwogI2VuZGlmCi0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3V0OworCQlzbmRfaW50ZXJ3YXZlX3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfaW50ZXJ3YXZlX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9pbnRlcndhdmVfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggYzkwNmUyMC4uNmQ4ODkwNSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC05NjIsOSArOTYyLDExIEBACiAjZW5kaWYKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShPUEwzU0EyX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQlzbmRfb3BsM3NhMl9kZXZpY2VzKys7CkBAIC05ODMsMTQgKzk4NSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJZYW1haGEgT1BMMy1TQSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX29wbDNzYTJfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9vcGwzc2EyX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9vcGwzc2EyX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L01ha2VmaWxlIGIvc291bmQvaXNhL29wdGk5eHgvTWFrZWZpbGUKaW5kZXggMjhjNjQwNy4uMGU0MWJmZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL29wdGk5eHgvTWFrZWZpbGUKQEAgLTYsOCArNiwxMCBAQAogc25kLW9wdGk5MngtYWQxODQ4LW9ianMgOj0gb3B0aTkyeC1hZDE4NDgubwogc25kLW9wdGk5MngtY3M0MjMxLW9ianMgOj0gb3B0aTkyeC1jczQyMzEubwogc25kLW9wdGk5M3gtb2JqcyA6PSBvcHRpOTN4Lm8KK3NuZC1taXJvLW9ianMgOj0gbWlyby5vCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfT1BUSTkyWF9BRDE4NDgpICs9IHNuZC1vcHRpOTJ4LWFkMTg0OC5vCiBvYmotJChDT05GSUdfU05EX09QVEk5MlhfQ1M0MjMxKSArPSBzbmQtb3B0aTkyeC1jczQyMzEubwogb2JqLSQoQ09ORklHX1NORF9PUFRJOTNYKSArPSBzbmQtb3B0aTkzeC5vCitvYmotJChDT05GSUdfU05EX01JUk8pICs9IHNuZC1taXJvLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmJmY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCkBAIC0wLDAgKzEsMTQ1NSBAQAorLyoKKyAqICAgQUxTQSBzb3VuZGNhcmQgZHJpdmVyIGZvciBNaXJvIG1pcm9TT1VORCBQQ00xIHBybworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlyb1NPVU5EIFBDTTEyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXJvU09VTkQgUENNMjAgUmFkaW8KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPgorICoKKyAqICAgQmFzZWQgb24gT1NTIEFDSSBhbmQgQUxTQSBPUFRpOXh4IGRyaXZlcnMKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY3M0MjMxLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CisjaW5jbHVkZSA8c291bmQvb3BsNC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfSVJRCisjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfRE1BCisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgIm1pcm8uaCIKKworTU9EVUxFX0FVVEhPUigiTWFydGluIExhbmdlciA8bWFydGluLWxhbmdlckBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1pcm8gbWlyb1NPVU5EIFBDTTEgcHJvLCBQQ00xMiwgUENNMjAgUmFkaW8iKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e01pcm8sbWlyb1NPVU5EIFBDTTEgcHJvfSwgIgorCQkJIntNaXJvLG1pcm9TT1VORCBQQ00xMn0sICIKKwkJCSJ7TWlybyxtaXJvU09VTkQgUENNMjAgUmFkaW99fSIpOworCitzdGF0aWMgaW50IGluZGV4ID0gU05EUlZfREVGQVVMVF9JRFgxOwkJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZCA9IFNORFJWX0RFRkFVTFRfU1RSMTsJCS8qIElEIGZvciB0aGlzIGNhcmQgKi8KK3N0YXRpYyBsb25nIHBvcnQgPSBTTkRSVl9ERUZBVUxUX1BPUlQxOyAJLyogMHg1MzAsMHhlODAsMHhmNDAsMHg2MDQgKi8KK3N0YXRpYyBsb25nIG1wdV9wb3J0ID0gU05EUlZfREVGQVVMVF9QT1JUMTsJLyogMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzAgKi8KK3N0YXRpYyBsb25nIGZtX3BvcnQgPSBTTkRSVl9ERUZBVUxUX1BPUlQxOwkvKiAweDM4OCAqLworc3RhdGljIGludCBpcnEgPSBTTkRSVl9ERUZBVUxUX0lSUTE7CQkvKiA1LDcsOSwxMCwxMSAqLworc3RhdGljIGludCBtcHVfaXJxID0gU05EUlZfREVGQVVMVF9JUlExOwkvKiA1LDcsOSwxMCAqLworc3RhdGljIGludCBkbWExID0gU05EUlZfREVGQVVMVF9ETUExOwkJLyogMCwxLDMgKi8KK3N0YXRpYyBpbnQgZG1hMiA9IFNORFJWX0RFRkFVTFRfRE1BMTsJCS8qIDAsMSwzICovCitzdGF0aWMgaW50IHdzczsKK3N0YXRpYyBpbnQgaWRlOworCittb2R1bGVfcGFyYW0oaW5kZXgsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIG1pcm8gc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtKGlkLCBjaGFycCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBtaXJvIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbShwb3J0LCBsb25nLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIldTUyBwb3J0ICMgZm9yIG1pcm8gZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtKG1wdV9wb3J0LCBsb25nLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0oZm1fcG9ydCwgbG9uZywgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtX3BvcnQsICJGTSBQb3J0ICMgZm9yIG1pcm8gZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiV1NTIGlycSAjIGZvciBtaXJvIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbShtcHVfaXJxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfaXJxLCAiTVBVLTQwMSBpcnEgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0oZG1hMSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMSwgIjFzdCBkbWEgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0oZG1hMiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMiwgIjJuZCBkbWEgIyBmb3IgbWlybyBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW0od3NzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh3c3MsICJ3c3MgbW9kZSIpOworbW9kdWxlX3BhcmFtKGlkZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWRlLCAiZW5hYmxlIGlkZSBwb3J0Iik7CisKKyNkZWZpbmUgT1BUaTlYWF9IV19ERVRFQ1QJMAorI2RlZmluZSBPUFRpOVhYX0hXXzgyQzkyOAkxCisjZGVmaW5lIE9QVGk5WFhfSFdfODJDOTI5CTIKKyNkZWZpbmUgT1BUaTlYWF9IV184MkM5MjQJMworI2RlZmluZSBPUFRpOVhYX0hXXzgyQzkyNQk0CisjZGVmaW5lIE9QVGk5WFhfSFdfODJDOTMwCTUKKyNkZWZpbmUgT1BUaTlYWF9IV184MkM5MzEJNgorI2RlZmluZSBPUFRpOVhYX0hXXzgyQzkzMwk3CisjZGVmaW5lIE9QVGk5WFhfSFdfTEFTVAkJT1BUaTlYWF9IV184MkM5MzMKKworI2RlZmluZSBPUFRpOVhYX01DX1JFRyhuKQluCisKKworc3RydWN0IHNuZF9taXJvIHsKKwl1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZTsKKwl1bnNpZ25lZCBjaGFyIHBhc3N3b3JkOworCWNoYXIgbmFtZVs3XTsKKworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21jX2Jhc2U7CisJc3RydWN0IHJlc291cmNlICpyZXNfYWNpX3BvcnQ7CisKKwl1bnNpZ25lZCBsb25nIG1jX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBtY19iYXNlX3NpemU7CisJdW5zaWduZWQgbG9uZyBwd2RfcmVnOworCisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCisJbG9uZyB3c3NfYmFzZTsKKwlpbnQgaXJxOworCWludCBkbWExOworCWludCBkbWEyOworCisJbG9uZyBmbV9wb3J0OworCisJbG9uZyBtcHVfcG9ydDsKKwlpbnQgbXB1X2lycTsKKworCXVuc2lnbmVkIGxvbmcgYWNpX3BvcnQ7CisJaW50IGFjaV92ZW5kb3I7CisJaW50IGFjaV9wcm9kdWN0OworCWludCBhY2lfdmVyc2lvbjsKKwlpbnQgYWNpX2FtcDsKKwlpbnQgYWNpX3ByZWFtcDsKKwlpbnQgYWNpX3NvbG9tb2RlOworCisJc3RydWN0IG11dGV4IGFjaV9tdXRleDsKK307CisKK3N0YXRpYyB2b2lkIHNuZF9taXJvX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvKTsKKworI2RlZmluZSBEUklWRVJfTkFNRSAic25kLW1pcm8iCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7CisKK3N0YXRpYyBjaGFyICogc25kX29wdGk5eHhfbmFtZXNbXSA9IHsKKwkidW5rb3duIiwKKwkiODJDOTI4IiwgIjgyQzkyOSIsCisJIjgyQzkyNCIsICI4MkM5MjUiLAorCSI4MkM5MzAiLCAiODJDOTMxIiwgIjgyQzkzMyIKK307CisKKy8qIAorICogIEFDSSBjb250cm9sCisgKi8KKworc3RhdGljIGludCBhY2lfYnVzeV93YWl0KHN0cnVjdCBzbmRfbWlybyAqIG1pcm8pCit7CisJbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKKworCWZvciAodGltZW91dCA9IDE7IHRpbWVvdXQgPD0gQUNJX01JTlRJTUUrMzA7IHRpbWVvdXQrKykgeworCQlpZiAoKChieXRlPWluYihtaXJvLT5hY2lfcG9ydCArIEFDSV9SRUdfQlVTWSkpICYgMSkgPT0gMCkgeworCQkJaWYgKHRpbWVvdXQgPj0gQUNJX01JTlRJTUUpCisJCQkJc25kX3ByaW50ZCgiYWNpIHJlYWR5IGluIHJvdW5kICVsZC5cbiIsCisJCQkJCSAgIHRpbWVvdXQtQUNJX01JTlRJTUUpOworCQkJcmV0dXJuIGJ5dGU7CisJCX0KKwkJaWYgKHRpbWVvdXQgPj0gQUNJX01JTlRJTUUpIHsKKwkJCWxvbmcgb3V0PTEwKkhaOworCQkJc3dpdGNoICh0aW1lb3V0LUFDSV9NSU5USU1FKSB7CisJCQljYXNlIDAgLi4uIDk6CisJCQkJb3V0IC89IDEwOworCQkJY2FzZSAxMCAuLi4gMTk6CisJCQkJb3V0IC89IDEwOworCQkJY2FzZSAyMCAuLi4gMzA6CisJCQkJb3V0IC89IDEwOworCQkJZGVmYXVsdDoKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQkJc2NoZWR1bGVfdGltZW91dChvdXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgImFjaV9idXN5X3dhaXQoKSB0aW1lIG91dFxuIik7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWNpX3dyaXRlKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8sIHVuc2lnbmVkIGNoYXIgYnl0ZSkKK3sKKwlpZiAoYWNpX2J1c3lfd2FpdChtaXJvKSA+PSAwKSB7CisJCW91dGIoYnl0ZSwgbWlyby0+YWNpX3BvcnQgKyBBQ0lfUkVHX0NPTU1BTkQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2kgYnVzeSwgYWNpX3dyaXRlKDB4JXgpIHN0b3BwZWQuXG4iLCBieXRlKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjaV9yZWFkKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8pCit7CisJdW5zaWduZWQgY2hhciBieXRlOworCisJaWYgKGFjaV9idXN5X3dhaXQobWlybykgPj0gMCkgeworCQlieXRlPWluYihtaXJvLT5hY2lfcG9ydCArIEFDSV9SRUdfU1RBVFVTKTsKKwkJcmV0dXJuIGJ5dGU7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpIGJ1c3ksIGFjaV9yZWFkKCkgc3RvcHBlZC5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KK30KKworc3RhdGljIGludCBhY2lfY21kKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8sIGludCB3cml0ZTEsIGludCB3cml0ZTIsIGludCB3cml0ZTMpCit7CisJaW50IHdyaXRlW10gPSB7d3JpdGUxLCB3cml0ZTIsIHdyaXRlM307CisJaW50IHZhbHVlLCBpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbWlyby0+YWNpX211dGV4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWZvciAoaT0wOyBpPDM7IGkrKykgeworCQlpZiAod3JpdGVbaV08IDAgfHwgd3JpdGVbaV0gPiAyNTUpCisJCQlicmVhazsKKwkJZWxzZSB7CisJCQl2YWx1ZSA9IGFjaV93cml0ZShtaXJvLCB3cml0ZVtpXSk7CisJCQlpZiAodmFsdWUgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCisJdmFsdWUgPSBhY2lfcmVhZChtaXJvKTsKKworb3V0OgltdXRleF91bmxvY2soJm1pcm8tPmFjaV9tdXRleCk7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IGFjaV9nZXR2YWx1ZShzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvLCB1bnNpZ25lZCBjaGFyIGluZGV4KQoreworCXJldHVybiBhY2lfY21kKG1pcm8sIEFDSV9TVEFUVVMsIGluZGV4LCAtMSk7Cit9CisKK3N0YXRpYyBpbnQgYWNpX3NldHZhbHVlKHN0cnVjdCBzbmRfbWlybyAqIG1pcm8sIHVuc2lnbmVkIGNoYXIgaW5kZXgsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gYWNpX2NtZChtaXJvLCBpbmRleCwgdmFsdWUsIC0xKTsKK30KKworLyoKKyAqICBNSVhFUiBwYXJ0CisgKi8KKworc3RhdGljIGludCBzbmRfbWlyb19pbmZvX2NhcHR1cmUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9jYXB0dXJlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gYWNpX2dldHZhbHVlKG1pcm8sIEFDSV9TX0dFTkVSQUwpKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic25kX21pcm9fZ2V0X2NhcHR1cmUoKSBmYWlsZWQ6ICVkXG4iLCB2YWx1ZSk7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZhbHVlICYgMHgyMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX3B1dF9jYXB0dXJlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlLCB2YWx1ZSwgZXJyb3I7CisKKwl2YWx1ZSA9ICEodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCisJaWYgKChlcnJvciA9IGFjaV9zZXR2YWx1ZShtaXJvLCBBQ0lfU0VUX1NPTE9NT0RFLCB2YWx1ZSkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzbmRfbWlyb19wdXRfY2FwdHVyZSgpIGZhaWxlZDogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWNoYW5nZSA9ICh2YWx1ZSAhPSBtaXJvLT5hY2lfc29sb21vZGUpOworCW1pcm8tPmFjaV9zb2xvbW9kZSA9IHZhbHVlOworCQorCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX21pcm9faW5mb19wcmVhbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9wcmVhbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCB2YWx1ZTsKKworCWlmIChtaXJvLT5hY2lfdmVyc2lvbiA8PSAxNzYpIHsKKworCQkvKiAKKwkJICAgT1NTIHNheXMgaXQncyBub3QgcmVhZGFibGUgd2l0aCB2ZXJzaW9ucyA8IDE3Ni4KKwkJICAgQnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBteSBjYXJkLAorCQkgICB3aGljaCBpcyBhIFBDTTEyIHdpdGggYWNpX3ZlcnNpb24gPSAxNzYuCisJCSovCisKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtaXJvLT5hY2lfcHJlYW1wOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHZhbHVlID0gYWNpX2dldHZhbHVlKG1pcm8sIEFDSV9HRVRfUFJFQU1QKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNuZF9taXJvX2dldF9wcmVhbXAoKSBmYWlsZWQ6ICVkXG4iLCB2YWx1ZSk7CisJCXJldHVybiB2YWx1ZTsKKwl9CisJCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWx1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX3B1dF9wcmVhbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBlcnJvciwgdmFsdWUsIGNoYW5nZTsKKworCXZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIEFDSV9TRVRfUFJFQU1QLCB2YWx1ZSkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzbmRfbWlyb19wdXRfcHJlYW1wKCkgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJY2hhbmdlID0gKHZhbHVlICE9IG1pcm8tPmFjaV9wcmVhbXApOworCW1pcm8tPmFjaV9wcmVhbXAgPSB2YWx1ZTsKKworCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX21pcm9faW5mb19hbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9hbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWlyby0+YWNpX2FtcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX3B1dF9hbXAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBlcnJvciwgdmFsdWUsIGNoYW5nZTsKKworCXZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIEFDSV9TRVRfUE9XRVJBTVAsIHZhbHVlKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNuZF9taXJvX3B1dF9hbXAoKSB0byAlZCBmYWlsZWQ6ICVkXG4iLCB2YWx1ZSwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJY2hhbmdlID0gKHZhbHVlICE9IG1pcm8tPmFjaV9hbXApOworCW1pcm8tPmFjaV9hbXAgPSB2YWx1ZTsKKworCXJldHVybiBjaGFuZ2U7Cit9CisKKyNkZWZpbmUgTUlST19ET1VCTEUoY3RsX25hbWUsIGN0bF9pbmRleCwgZ2V0X3JpZ2h0X3JlZywgc2V0X3JpZ2h0X3JlZykgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorICAubmFtZSA9IGN0bF9uYW1lLCBcCisgIC5pbmRleCA9IGN0bF9pbmRleCwgXAorICAuaW5mbyA9IHNuZF9taXJvX2luZm9fZG91YmxlLCBcCisgIC5nZXQgPSBzbmRfbWlyb19nZXRfZG91YmxlLCBcCisgIC5wdXQgPSBzbmRfbWlyb19wdXRfZG91YmxlLCBcCisgIC5wcml2YXRlX3ZhbHVlID0gZ2V0X3JpZ2h0X3JlZyB8IChzZXRfcmlnaHRfcmVnIDw8IDgpIFwKK30KKworc3RhdGljIGludCBzbmRfbWlyb19pbmZvX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlpbnQgcmVnID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKworCWlmICgocmVnID49IEFDSV9HRVRfRVExKSAmJiAocmVnIDw9IEFDSV9HRVRfRVE3KSkgeworCisJCS8qIGVxdWFsaXplciBlbGVtZW50cyAqLworCisJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IC0gMHg3ZjsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMHg3ZjsKKwl9IGVsc2UgeworCisJCS8qIG5vbi1lcXVhbGl6ZXIgZWxlbWVudHMgKi8KKworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAweDIwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9taXJvX2dldF9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVpbmZvKQoreworCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgbGVmdF92YWwsIHJpZ2h0X3ZhbDsKKworCWludCByaWdodF9yZWcgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJaW50IGxlZnRfcmVnID0gcmlnaHRfcmVnICsgMTsKKworCWlmICgocmlnaHRfdmFsID0gYWNpX2dldHZhbHVlKG1pcm8sIHJpZ2h0X3JlZykpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfZ2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsIHJpZ2h0X3JlZywgcmlnaHRfdmFsKTsKKwkJcmV0dXJuIHJpZ2h0X3ZhbDsKKwl9CisKKwlpZiAoKGxlZnRfdmFsID0gYWNpX2dldHZhbHVlKG1pcm8sIGxlZnRfcmVnKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImFjaV9nZXR2YWx1ZSglZCkgZmFpbGVkOiAlZFxuIiwgbGVmdF9yZWcsIGxlZnRfdmFsKTsKKwkJcmV0dXJuIGxlZnRfdmFsOworCX0KKworCWlmICgocmlnaHRfcmVnID49IEFDSV9HRVRfRVExKSAmJiAocmlnaHRfcmVnIDw9IEFDSV9HRVRfRVE3KSkgeworCisJCS8qIGVxdWFsaXplciBlbGVtZW50cyAqLworCisJCWlmIChsZWZ0X3ZhbCA8IDB4ODApIHsKKwkJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbGVmdF92YWw7CisJCX0gZWxzZSB7CisJCQl1aW5mby0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IDB4ODAgLSBsZWZ0X3ZhbDsKKwkJfQorCisJCWlmIChyaWdodF92YWwgPCAweDgwKSB7CisJCQl1aW5mby0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHJpZ2h0X3ZhbDsKKwkJfSBlbHNlIHsKKwkJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gMHg4MCAtIHJpZ2h0X3ZhbDsKKwkJfQorCisJfSBlbHNlIHsKKworCQkvKiBub24tZXF1YWxpemVyIGVsZW1lbnRzICovCisKKwkJdWluZm8tPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAweDIwIC0gbGVmdF92YWw7CisJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gMHgyMCAtIHJpZ2h0X3ZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbWlyb19wdXRfZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCAKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21pcm8gKm1pcm8gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGxlZnQsIHJpZ2h0LCBsZWZ0X29sZCwgcmlnaHRfb2xkOworCWludCBzZXRyZWdfbGVmdCwgc2V0cmVnX3JpZ2h0LCBnZXRyZWdfbGVmdCwgZ2V0cmVnX3JpZ2h0OworCWludCBjaGFuZ2UsIGVycm9yOworCisJbGVmdCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCXJpZ2h0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CisKKwlzZXRyZWdfcmlnaHQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGZmOworCWlmIChzZXRyZWdfcmlnaHQgPT0gQUNJX1NFVF9NQVNURVIpIHsKKwkJc2V0cmVnX2xlZnQgPSBzZXRyZWdfcmlnaHQgKyAxOworCX0gZWxzZSB7CisJCXNldHJlZ19sZWZ0ID0gc2V0cmVnX3JpZ2h0ICsgODsKKwl9CisKKwlnZXRyZWdfcmlnaHQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJZ2V0cmVnX2xlZnQgPSBnZXRyZWdfcmlnaHQgKyAxOworCisJaWYgKChsZWZ0X29sZCA9IGFjaV9nZXR2YWx1ZShtaXJvLCBnZXRyZWdfbGVmdCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfZ2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsIGdldHJlZ19sZWZ0LCBsZWZ0X29sZCk7CisJCXJldHVybiBsZWZ0X29sZDsKKwl9CisKKwlpZiAoKHJpZ2h0X29sZCA9IGFjaV9nZXR2YWx1ZShtaXJvLCBnZXRyZWdfcmlnaHQpKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX2dldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLCBnZXRyZWdfcmlnaHQsIHJpZ2h0X29sZCk7CisJCXJldHVybiByaWdodF9vbGQ7CisJfQorCisJaWYgKChnZXRyZWdfcmlnaHQgPj0gQUNJX0dFVF9FUTEpICYmIChnZXRyZWdfcmlnaHQgPD0gQUNJX0dFVF9FUTcpKSB7CisKKwkJLyogZXF1YWxpemVyIGVsZW1lbnRzICovCisKKwkJaWYgKGxlZnRfb2xkID4gMHg4MCkgCisJCQlsZWZ0X29sZCA9IDB4ODAgLSBsZWZ0X29sZDsKKwkJaWYgKHJpZ2h0X29sZCA+IDB4ODApIAorCQkJcmlnaHRfb2xkID0gMHg4MCAtIHJpZ2h0X29sZDsKKworCQlpZiAobGVmdCA+PSAwKSB7CisJCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIHNldHJlZ19sZWZ0LCBsZWZ0KSkgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX3NldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICBsZWZ0LCBlcnJvcik7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChlcnJvciA9IGFjaV9zZXR2YWx1ZShtaXJvLCBzZXRyZWdfbGVmdCwgMHg4MCAtIGxlZnQpKSA8IDApIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfc2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsCisJCQkJCSAgIDB4ODAgLSBsZWZ0LCBlcnJvcik7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9CisKKwkJaWYgKHJpZ2h0ID49IDApIHsKKwkJCWlmICgoZXJyb3IgPSBhY2lfc2V0dmFsdWUobWlybywgc2V0cmVnX3JpZ2h0LCByaWdodCkpIDwgMCkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgImFjaV9zZXR2YWx1ZSglZCkgZmFpbGVkOiAlZFxuIiwKKwkJCQkJICAgcmlnaHQsIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIHNldHJlZ19yaWdodCwgMHg4MCAtIHJpZ2h0KSkgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX3NldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICAweDgwIC0gcmlnaHQsIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisKKwkJLyogbm9uLWVxdWFsaXplciBlbGVtZW50cyAqLworCisJCWxlZnRfb2xkID0gMHgyMCAtIGxlZnRfb2xkOworCQlyaWdodF9vbGQgPSAweDIwIC0gcmlnaHRfb2xkOworCisJCWlmICgoZXJyb3IgPSBhY2lfc2V0dmFsdWUobWlybywgc2V0cmVnX2xlZnQsIDB4MjAgLSBsZWZ0KSkgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfc2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsCisJCQkJICAgMHgyMCAtIGxlZnQsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIHNldHJlZ19yaWdodCwgMHgyMCAtIHJpZ2h0KSkgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhY2lfc2V0dmFsdWUoJWQpIGZhaWxlZDogJWRcbiIsCisJCQkJICAgMHgyMCAtIHJpZ2h0LCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwljaGFuZ2UgPSAobGVmdCAhPSBsZWZ0X29sZCkgfHwgKHJpZ2h0ICE9IHJpZ2h0X29sZCk7CisKKwlyZXR1cm4gY2hhbmdlOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fY29udHJvbHNbXSA9IHsKK01JUk9fRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMCwgQUNJX0dFVF9NQVNURVIsIEFDSV9TRVRfTUFTVEVSKSwKK01JUk9fRE9VQkxFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMSwgQUNJX0dFVF9NSUMsIEFDSV9TRVRfTUlDKSwKK01JUk9fRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDEsIEFDSV9HRVRfTElORSwgQUNJX1NFVF9MSU5FKSwKK01JUk9fRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAwLCBBQ0lfR0VUX0NELCBBQ0lfU0VUX0NEKSwKK01JUk9fRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCAwLCBBQ0lfR0VUX1NZTlRILCBBQ0lfU0VUX1NZTlRIKSwKK01JUk9fRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMSwgQUNJX0dFVF9QQ00sIEFDSV9TRVRfUENNKSwKK01JUk9fRE9VQkxFKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMiwgQUNJX0dFVF9MSU5FMiwgQUNJX1NFVF9MSU5FMiksCit9OworCisvKiBFcXVhbGl6ZXIgd2l0aCBzZXZlbiBiYW5kcyAob25seSBQQ00yMCkgCisgICBmcm9tIC0xMmRCIHVwIHRvICsxMmRCIG9uIGVhY2ggYmFuZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9taXJvX2VxX2NvbnRyb2xzW10gPSB7CitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMjggSHoiLCAwLCBBQ0lfR0VUX0VRMSwgQUNJX1NFVF9FUTEpLAorTUlST19ET1VCTEUoIlRvbmUgQ29udHJvbCAtIDE2MCBIeiIsIDAsIEFDSV9HRVRfRVEyLCBBQ0lfU0VUX0VRMiksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gNDAwIEh6IiwgMCwgQUNJX0dFVF9FUTMsIEFDSV9TRVRfRVEzKSwKK01JUk9fRE9VQkxFKCJUb25lIENvbnRyb2wgLSAxIGtIeiIsIDAsIEFDSV9HRVRfRVE0LCBBQ0lfU0VUX0VRNCksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMi41IGtIeiIsIDAsIEFDSV9HRVRfRVE1LCBBQ0lfU0VUX0VRNSksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gNi4zIGtIeiIsIDAsIEFDSV9HRVRfRVE2LCBBQ0lfU0VUX0VRNiksCitNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMTYga0h6IiwgMCwgQUNJX0dFVF9FUTcsIEFDSV9TRVRfRVE3KSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19yYWRpb19jb250cm9sW10gPSB7CitNSVJPX0RPVUJMRSgiUmFkaW8gUGxheWJhY2sgVm9sdW1lIiwgMCwgQUNJX0dFVF9MSU5FMSwgQUNJX1NFVF9MSU5FMSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fbGluZV9jb250cm9sW10gPSB7CitNSVJPX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAyLCBBQ0lfR0VUX0xJTkUxLCBBQ0lfU0VUX0xJTkUxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19wcmVhbXBfY29udHJvbFtdID0geworeworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIk1pYyBCb29zdCIsCisJLmluZGV4ID0gMSwKKwkuaW5mbyA9IHNuZF9taXJvX2luZm9fcHJlYW1wLAorCS5nZXQgPSBzbmRfbWlyb19nZXRfcHJlYW1wLAorCS5wdXQgPSBzbmRfbWlyb19wdXRfcHJlYW1wLAorfX07CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19hbXBfY29udHJvbFtdID0geworeworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkxpbmUgQm9vc3QiLAorCS5pbmRleCA9IDAsCisJLmluZm8gPSBzbmRfbWlyb19pbmZvX2FtcCwKKwkuZ2V0ID0gc25kX21pcm9fZ2V0X2FtcCwKKwkucHV0ID0gc25kX21pcm9fcHV0X2FtcCwKK319OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fY2FwdHVyZV9jb250cm9sW10gPSB7Cit7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiUENNIENhcHR1cmUgU3dpdGNoIiwKKwkuaW5kZXggPSAwLAorCS5pbmZvID0gc25kX21pcm9faW5mb19jYXB0dXJlLAorCS5nZXQgPSBzbmRfbWlyb19nZXRfY2FwdHVyZSwKKwkucHV0ID0gc25kX21pcm9fcHV0X2NhcHR1cmUsCit9fTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWNpX2luaXRfdmFsdWVzW11bMl0gX19pbml0ZGF0YSA9IHsKKwl7IEFDSV9TRVRfTVVURSwgMHgwMCB9LAorCXsgQUNJX1NFVF9QT1dFUkFNUCwgMHgwMCB9LAorCXsgQUNJX1NFVF9QUkVBTVAsIDB4MDAgfSwKKwl7IEFDSV9TRVRfU09MT01PREUsIDB4MDAgfSwKKwl7IEFDSV9TRVRfTUlDICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9NSUMgKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUgKyAwLCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUgKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX0NEICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9DRCArIDgsIDB4MjAgfSwKKwl7IEFDSV9TRVRfUENNICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9QQ00gKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUxICsgMCwgMHgyMCB9LAorCXsgQUNJX1NFVF9MSU5FMSArIDgsIDB4MjAgfSwKKwl7IEFDSV9TRVRfTElORTIgKyAwLCAweDIwIH0sCisJeyBBQ0lfU0VUX0xJTkUyICsgOCwgMHgyMCB9LAorCXsgQUNJX1NFVF9TWU5USCArIDAsIDB4MjAgfSwKKwl7IEFDSV9TRVRfU1lOVEggKyA4LCAweDIwIH0sCisJeyBBQ0lfU0VUX01BU1RFUiArIDAsIDB4MjAgfSwKKwl7IEFDSV9TRVRfTUFTVEVSICsgMSwgMHgyMCB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc25kX3NldF9hY2lfaW5pdF92YWx1ZXMoc3RydWN0IHNuZF9taXJvICptaXJvKQoreworCWludCBpZHgsIGVycm9yOworCisJLyogZW5hYmxlIFdTUyBvbiBQQ00xICovCisKKwlpZiAoKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdBJykgJiYgd3NzKSB7CisJCWlmICgoZXJyb3IgPSBhY2lfc2V0dmFsdWUobWlybywgQUNJX1NFVF9XU1MsIHdzcykpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZW5hYmxpbmcgV1NTIG1vZGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKworCS8qIGVuYWJsZSBJREUgcG9ydCAqLworCisJaWYgKGlkZSkgeworCQlpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIEFDSV9TRVRfSURFLCBpZGUpKSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVuYWJsaW5nIElERSBwb3J0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBzZXQgY29tbW9uIGFjaSB2YWx1ZXMgKi8KKworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShhY2lfaW5pdF92YWx1ZXMpOyBpZHgrKykKKyAgICAgICAgICAgICAgICBpZiAoKGVycm9yID0gYWNpX3NldHZhbHVlKG1pcm8sIGFjaV9pbml0X3ZhbHVlc1tpZHhdWzBdLCAKKwkJCQkJICBhY2lfaW5pdF92YWx1ZXNbaWR4XVsxXSkpIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpX3NldHZhbHVlKCVkKSBmYWlsZWQ6ICVkXG4iLCAKKwkJCQkgICBhY2lfaW5pdF92YWx1ZXNbaWR4XVswXSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICAgICAgICAgIH0KKworCW1pcm8tPmFjaV9hbXAgPSAwOworCW1pcm8tPmFjaV9wcmVhbXAgPSAwOworCW1pcm8tPmFjaV9zb2xvbW9kZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbWlyb19taXhlcihzdHJ1Y3Qgc25kX21pcm8gKm1pcm8pCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGVycjsKKworCXNuZF9hc3NlcnQobWlybyAhPSBOVUxMICYmIG1pcm8tPmNhcmQgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOworCisJY2FyZCA9IG1pcm8tPmNhcmQ7CisKKwlzd2l0Y2ggKG1pcm8tPmhhcmR3YXJlKSB7CisJY2FzZSBPUFRpOVhYX0hXXzgyQzkyNDoKKwkJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkFDSSAmIE9QVGk5MjQiKTsKKwkJYnJlYWs7CisJY2FzZSBPUFRpOVhYX0hXXzgyQzkyOToKKwkJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkFDSSAmIE9QVGk5MjkiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX0JVRygpOworCQlicmVhazsKKwl9CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX21pcm9fY29udHJvbHMpOyBpZHgrKykgeworCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX21pcm9fY29udHJvbHNbaWR4XSwgbWlybykpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0EnKSB8fCAobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0InKSkgeworCQkvKiBQQ00xL1BDTTEyIHdpdGggcG93ZXItYW1wIGFuZCBMaW5lIDIgKi8KKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9taXJvX2xpbmVfY29udHJvbFswXSwgbWlybykpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX21pcm9fYW1wX2NvbnRyb2xbMF0sIG1pcm8pKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdCJykgfHwgKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdDJykpIHsKKwkJLyogUENNMTIvUENNMjAgd2l0aCBtaWMtcHJlYW1wICovCisJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfbWlyb19wcmVhbXBfY29udHJvbFswXSwgbWlybykpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCQlpZiAobWlyby0+YWNpX3ZlcnNpb24gPj0gMTc2KQorCQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9taXJvX2NhcHR1cmVfY29udHJvbFswXSwgbWlybykpKSA8IDApCisJCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0MnKSB7CisJCS8qIFBDTTIwIHdpdGggcmFkaW8gYW5kIDcgYmFuZCBlcXVhbGl6ZXIgKi8KKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9taXJvX3JhZGlvX2NvbnRyb2xbMF0sIG1pcm8pKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9taXJvX2VxX2NvbnRyb2xzKTsgaWR4KyspIHsKKwkJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfbWlyb19lcV9jb250cm9sc1tpZHhdLCBtaXJvKSkpIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChsb25nICpwb3J0X3RhYmxlLCBsb25nIHNpemUpCit7CisJd2hpbGUgKCpwb3J0X3RhYmxlICE9IC0xKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCQlpZiAoKHJlcyA9IHJlcXVlc3RfcmVnaW9uKCpwb3J0X3RhYmxlLCBzaXplLCAKKwkJCQkJICAiQUxTQSB0ZXN0IikpICE9IE5VTEwpIHsKKwkJCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UocmVzKTsKKwkJCXJldHVybiAqcG9ydF90YWJsZTsKKwkJfQorCQlwb3J0X3RhYmxlKys7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX2luaXQgc25kX21pcm9faW5pdChzdHJ1Y3Qgc25kX21pcm8gKmNoaXAsIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlKQoreworCXN0YXRpYyBpbnQgb3B0aTl4eF9tY19zaXplW10gPSB7NywgNywgMTAsIDEwLCAyLCAyLCAyfTsKKworCWNoaXAtPmhhcmR3YXJlID0gaGFyZHdhcmU7CisJc3RyY3B5KGNoaXAtPm5hbWUsIHNuZF9vcHRpOXh4X25hbWVzW2hhcmR3YXJlXSk7CisKKwljaGlwLT5tY19iYXNlX3NpemUgPSBvcHRpOXh4X21jX3NpemVbaGFyZHdhcmVdOyAgCisKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisKKwljaGlwLT53c3NfYmFzZSA9IC0xOworCWNoaXAtPmlycSA9IC0xOworCWNoaXAtPmRtYTEgPSAtMTsKKwljaGlwLT5kbWEyID0gLTE7CisJY2hpcC0+Zm1fcG9ydCA9IC0xOworCWNoaXAtPm1wdV9wb3J0ID0gLTE7CisJY2hpcC0+bXB1X2lycSA9IC0xOworCisJc3dpdGNoIChoYXJkd2FyZSkgeworCWNhc2UgT1BUaTlYWF9IV184MkM5Mjk6CisJCWNoaXAtPm1jX2Jhc2UgPSAweGY4YzsKKwkJY2hpcC0+cGFzc3dvcmQgPSAweGUzOworCQljaGlwLT5wd2RfcmVnID0gMzsKKwkJYnJlYWs7CisKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI0OgorCQljaGlwLT5tY19iYXNlID0gMHhmOGM7CisJCWNoaXAtPnBhc3N3b3JkID0gMHhlNTsKKwkJY2hpcC0+cHdkX3JlZyA9IDM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic29ycnksIG5vIHN1cHBvcnQgZm9yICVkXG4iLCBoYXJkd2FyZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfbWlyb19yZWFkKHN0cnVjdCBzbmRfbWlybyAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgcmV0dmFsID0gMHhmZjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihjaGlwLT5wYXNzd29yZCwgY2hpcC0+bWNfYmFzZSArIGNoaXAtPnB3ZF9yZWcpOworCisJc3dpdGNoIChjaGlwLT5oYXJkd2FyZSkgeworCWNhc2UgT1BUaTlYWF9IV184MkM5MjQ6CisJCWlmIChyZWcgPiA3KSB7CisJCQlvdXRiKHJlZywgY2hpcC0+bWNfYmFzZSArIDgpOworCQkJb3V0YihjaGlwLT5wYXNzd29yZCwgY2hpcC0+bWNfYmFzZSArIGNoaXAtPnB3ZF9yZWcpOworCQkJcmV0dmFsID0gaW5iKGNoaXAtPm1jX2Jhc2UgKyA5KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI5OgorCQlyZXR2YWwgPSBpbmIoY2hpcC0+bWNfYmFzZSArIHJlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic29ycnksIG5vIHN1cHBvcnQgZm9yICVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9taXJvX3dyaXRlKHN0cnVjdCBzbmRfbWlybyAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCisJCQkgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoY2hpcC0+cGFzc3dvcmQsIGNoaXAtPm1jX2Jhc2UgKyBjaGlwLT5wd2RfcmVnKTsKKworCXN3aXRjaCAoY2hpcC0+aGFyZHdhcmUpIHsKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI0OgorCQlpZiAocmVnID4gNykgeworCQkJb3V0YihyZWcsIGNoaXAtPm1jX2Jhc2UgKyA4KTsKKwkJCW91dGIoY2hpcC0+cGFzc3dvcmQsIGNoaXAtPm1jX2Jhc2UgKyBjaGlwLT5wd2RfcmVnKTsKKwkJCW91dGIodmFsdWUsIGNoaXAtPm1jX2Jhc2UgKyA5KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIE9QVGk5WFhfSFdfODJDOTI5OgorCQlvdXRiKHZhbHVlLCBjaGlwLT5tY19iYXNlICsgcmVnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzb3JyeSwgbm8gc3VwcG9ydCBmb3IgJWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKKworI2RlZmluZSBzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIHJlZywgdmFsdWUsIG1hc2spCVwKKwlzbmRfbWlyb193cml0ZShjaGlwLCByZWcsCQkJXAorCQkoc25kX21pcm9fcmVhZChjaGlwLCByZWcpICYgfihtYXNrKSkgfCAoKHZhbHVlKSAmIChtYXNrKSkpCisKKy8qCisgKiAgUHJvYyBJbnRlcmZhY2UKKyAqLworCitzdGF0aWMgdm9pZCBzbmRfbWlyb19wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICogZW50cnksIAorCQkJICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX21pcm8gKm1pcm8gPSAoc3RydWN0IHNuZF9taXJvICopIGVudHJ5LT5wcml2YXRlX2RhdGE7CisJY2hhciogbW9kZWwgPSAidW5rbm93biI7CisKKwkvKiBtaXJvU09VTkQgUENNMSBwcm8sIGVhcmx5IFBDTTEyICovCisKKwlpZiAoKG1pcm8tPmhhcmR3YXJlID09IE9QVGk5WFhfSFdfODJDOTI5KSAmJgorCSAgICAobWlyby0+YWNpX3ZlbmRvciA9PSAnbScpICYmIAorCSAgICAobWlyby0+YWNpX3Byb2R1Y3QgPT0gJ0EnKSkgeworCQlzd2l0Y2gobWlyby0+YWNpX3ZlcnNpb24pIHsKKwkJY2FzZSAzOgorCQkJbW9kZWwgPSAibWlyb1NPVU5EIFBDTTEgcHJvIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbW9kZWwgPSAibWlyb1NPVU5EIFBDTTEgcHJvIC8gKGVhcmx5KSBQQ00xMiI7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG1pcm9TT1VORCBQQ00xMiwgUENNMTIgKFJldi4gRSksIFBDTTEyIHBucCAqLworCisJaWYgKChtaXJvLT5oYXJkd2FyZSA9PSBPUFRpOVhYX0hXXzgyQzkyNCkgJiYKKwkgICAgKG1pcm8tPmFjaV92ZW5kb3IgPT0gJ20nKSAmJiAKKwkgICAgKG1pcm8tPmFjaV9wcm9kdWN0ID09ICdCJykpIHsKKwkJc3dpdGNoKG1pcm8tPmFjaV92ZXJzaW9uKSB7CisJCWNhc2UgNDoKKwkJCW1vZGVsID0gIm1pcm9TT1VORCBQQ00xMiI7CisJCQlicmVhazsKKwkJY2FzZSAxNzY6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMTIgKFJldi4gRSkiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMTIgLyBQQ00xMiBwbnAiOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBtaXJvU09VTkQgUENNMjAgcmFkaW8gKi8KKworCWlmICgobWlyby0+aGFyZHdhcmUgPT0gT1BUaTlYWF9IV184MkM5MjQpICYmCisJICAgIChtaXJvLT5hY2lfdmVuZG9yID09ICdtJykgJiYgCisJICAgIChtaXJvLT5hY2lfcHJvZHVjdCA9PSAnQycpKSB7CisJCXN3aXRjaChtaXJvLT5hY2lfdmVyc2lvbikgeworCQljYXNlIDc6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMjAgcmFkaW8gKFJldi4gRSkiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltb2RlbCA9ICJtaXJvU09VTkQgUENNMjAgcmFkaW8iOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbkdlbmVyYWwgaW5mb3JtYXRpb246XG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIG1vZGVsICAgOiAlc1xuIiwgbW9kZWwpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgb3B0aSAgICA6ICVzXG4iLCBtaXJvLT5uYW1lKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIGNvZGVjICAgOiAlc1xuIiwgbWlyby0+cGNtLT5uYW1lKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHBvcnQgICAgOiAweCVseFxuIiwgbWlyby0+d3NzX2Jhc2UpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgaXJxICAgICA6ICVkXG4iLCBtaXJvLT5pcnEpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgZG1hICAgICA6ICVkLCVkXG5cbiIsIG1pcm8tPmRtYTEsIG1pcm8tPmRtYTIpOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiTVBVLTQwMTpcbiIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgcG9ydCAgICA6IDB4JWx4XG4iLCBtaXJvLT5tcHVfcG9ydCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBpcnEgICAgIDogJWRcblxuIiwgbWlyby0+bXB1X2lycSk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJBQ0kgaW5mb3JtYXRpb246XG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHZlbmRvciAgOiAiKTsKKwlzd2l0Y2gobWlyby0+YWNpX3ZlbmRvcikgeworCWNhc2UgJ20nOgorCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXJvXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAidW5rbm93biAoMHgleClcbiIsIG1pcm8tPmFjaV92ZW5kb3IpOworCQlicmVhazsKKwl9CisKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHByb2R1Y3QgOiAiKTsKKwlzd2l0Y2gobWlyby0+YWNpX3Byb2R1Y3QpIHsKKwljYXNlICdBJzoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibWlyb1NPVU5EIFBDTTEgcHJvIC8gKGVhcmx5KSBQQ00xMlxuIik7CisJCWJyZWFrOworCWNhc2UgJ0InOgorCQlzbmRfaXByaW50ZihidWZmZXIsICJtaXJvU09VTkQgUENNMTJcbiIpOworCQlicmVhazsKKwljYXNlICdDJzoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibWlyb1NPVU5EIFBDTTIwIHJhZGlvXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX2lwcmludGYoYnVmZmVyLCAidW5rbm93biAoMHgleClcbiIsIG1pcm8tPmFjaV9wcm9kdWN0KTsKKwkJYnJlYWs7CisJfQorCisJc25kX2lwcmludGYoYnVmZmVyLCAiICBmaXJtd2FyZTogJWQgKDB4JXgpXG4iLAorCQkgICAgbWlyby0+YWNpX3ZlcnNpb24sIG1pcm8tPmFjaV92ZXJzaW9uKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIHBvcnQgICAgOiAweCVseC0weCVseFxuIiwgCisJCSAgICBtaXJvLT5hY2lfcG9ydCwgbWlyby0+YWNpX3BvcnQrMik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICB3c3MgICAgIDogMHgleFxuIiwgd3NzKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIGlkZSAgICAgOiAweCV4XG4iLCBpZGUpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgc29sb21vZGU6IDB4JXhcbiIsIG1pcm8tPmFjaV9zb2xvbW9kZSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBhbXAgICAgIDogMHgleFxuIiwgbWlyby0+YWNpX2FtcCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBwcmVhbXAgIDogMHgleFxuIiwgbWlyby0+YWNpX3ByZWFtcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbmRfbWlyb19wcm9jX2luaXQoc3RydWN0IHNuZF9taXJvICogbWlybykKK3sKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OworCisJaWYgKCEgc25kX2NhcmRfcHJvY19uZXcobWlyby0+Y2FyZCwgIm1pcm8iLCAmZW50cnkpKQorCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIG1pcm8sIDEwMjQsIHNuZF9taXJvX3Byb2NfcmVhZCk7Cit9CisKKy8qCisgKiAgSW5pdAorICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9taXJvX2NvbmZpZ3VyZShzdHJ1Y3Qgc25kX21pcm8gKmNoaXApCit7CisJdW5zaWduZWQgY2hhciB3c3NfYmFzZV9iaXRzOworCXVuc2lnbmVkIGNoYXIgaXJxX2JpdHM7CisJdW5zaWduZWQgY2hhciBkbWFfYml0czsKKwl1bnNpZ25lZCBjaGFyIG1wdV9wb3J0X2JpdHMgPSAwOworCXVuc2lnbmVkIGNoYXIgbXB1X2lycV9iaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBPUFRpOVhYX0hXXzgyQzkyNDoKKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg2KSwgMHgwMiwgMHgwMik7CisJCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIDB4ODAsIDB4ODApOworCQlzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDIpLCAweDIwLCAweDIwKTsgLyogT1BMNCAqLworCQlzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDMpLCAweGYwLCAweGZmKTsKKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg1KSwgMHgwMiwgMHgwMik7CisJCWJyZWFrOworCWNhc2UgT1BUaTlYWF9IV184MkM5Mjk6CisJCS8qIHVudGVzdGVkIGluaXQgY29tbWFuZHMgZm9yIE9QVGk5MjkgKi8KKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygxKSwgMHg4MCwgMHg4MCk7CisJCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMiksIDB4MjAsIDB4MjApOyAvKiBPUEw0ICovCisJCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoNCksIDB4MDAsIDB4MGMpOworCQlzbmRfbWlyb193cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDUpLCAweDAyLCAweDAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY2hpcC0+d3NzX2Jhc2UpIHsKKwljYXNlIDB4NTMwOgorCQl3c3NfYmFzZV9iaXRzID0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSAweDYwNDoKKwkJd3NzX2Jhc2VfYml0cyA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgMHhlODA6CisJCXdzc19iYXNlX2JpdHMgPSAweDAxOworCQlicmVhazsKKwljYXNlIDB4ZjQwOgorCQl3c3NfYmFzZV9iaXRzID0gMHgwMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLCBjaGlwLT53c3NfYmFzZSk7CisJCWdvdG8gX19za2lwX2Jhc2U7CisJfQorCXNuZF9taXJvX3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIHdzc19iYXNlX2JpdHMgPDwgNCwgMHgzMCk7CisKK19fc2tpcF9iYXNlOgorCXN3aXRjaCAoY2hpcC0+aXJxKSB7CisJY2FzZSA1OgorCQlpcnFfYml0cyA9IDB4MDU7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJaXJxX2JpdHMgPSAweDAxOworCQlicmVhazsKKwljYXNlIDk6CisJCWlycV9iaXRzID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJaXJxX2JpdHMgPSAweDAzOworCQlicmVhazsKKwljYXNlIDExOgorCQlpcnFfYml0cyA9IDB4MDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIldTUyBpcnEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmlycSk7CisJCWdvdG8gX19za2lwX3Jlc291cmNlczsKKwl9CisKKwlzd2l0Y2ggKGNoaXAtPmRtYTEpIHsKKwljYXNlIDA6CisJCWRtYV9iaXRzID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkbWFfYml0cyA9IDB4MDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZG1hX2JpdHMgPSAweDAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJXU1MgZG1hMSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+ZG1hMSk7CisJCWdvdG8gX19za2lwX3Jlc291cmNlczsKKwl9CisKKwlpZiAoY2hpcC0+ZG1hMSA9PSBjaGlwLT5kbWEyKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvbid0IHdhbnQgdG8gc2hhcmUgZG1hc1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3dpdGNoIChjaGlwLT5kbWEyKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmRtYTIpOworCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CisJfQorCWRtYV9iaXRzIHw9IDB4MDQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoaXJxX2JpdHMgPDwgMyB8IGRtYV9iaXRzLCBjaGlwLT53c3NfYmFzZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCitfX3NraXBfcmVzb3VyY2VzOgorCWlmIChjaGlwLT5oYXJkd2FyZSA+IE9QVGk5WFhfSFdfODJDOTI4KSB7CisJCXN3aXRjaCAoY2hpcC0+bXB1X3BvcnQpIHsKKwkJY2FzZSAwOgorCQljYXNlIC0xOgorCQkJYnJlYWs7CisJCWNhc2UgMHgzMDA6CisJCQltcHVfcG9ydF9iaXRzID0gMHgwMzsKKwkJCWJyZWFrOworCQljYXNlIDB4MzEwOgorCQkJbXB1X3BvcnRfYml0cyA9IDB4MDI7CisJCQlicmVhazsKKwkJY2FzZSAweDMyMDoKKwkJCW1wdV9wb3J0X2JpdHMgPSAweDAxOworCQkJYnJlYWs7CisJCWNhc2UgMHgzMzA6CisJCQltcHVfcG9ydF9iaXRzID0gMHgwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVBVLTQwMSBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCQkgICBjaGlwLT5tcHVfcG9ydCk7CisJCQlnb3RvIF9fc2tpcF9tcHU7CisJCX0KKworCQlzd2l0Y2ggKGNoaXAtPm1wdV9pcnEpIHsKKwkJY2FzZSA1OgorCQkJbXB1X2lycV9iaXRzID0gMHgwMjsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQltcHVfaXJxX2JpdHMgPSAweDAzOworCQkJYnJlYWs7CisJCWNhc2UgOToKKwkJCW1wdV9pcnFfYml0cyA9IDB4MDA7CisJCQlicmVhazsKKwkJY2FzZSAxMDoKKwkJCW1wdV9pcnFfYml0cyA9IDB4MDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAorCQkJCSAgIGNoaXAtPm1wdV9pcnEpOworCQkJZ290byBfX3NraXBfbXB1OworCQl9CisKKwkJc25kX21pcm9fd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg2KSwKKwkJCShjaGlwLT5tcHVfcG9ydCA8PSAwKSA/IDB4MDAgOgorCQkJCTB4ODAgfCBtcHVfcG9ydF9iaXRzIDw8IDUgfCBtcHVfaXJxX2JpdHMgPDwgMywKKwkJCTB4ZjgpOworCX0KK19fc2tpcF9tcHU6CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc25kX2NhcmRfbWlyb19kZXRlY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX21pcm8gKmNoaXApCit7CisJaW50IGksIGVycjsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCisJZm9yIChpID0gT1BUaTlYWF9IV184MkM5Mjk7IGkgPD0gT1BUaTlYWF9IV184MkM5MjQ7IGkrKykgeworCisJCWlmICgoZXJyID0gc25kX21pcm9faW5pdChjaGlwLCBpKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoKGNoaXAtPnJlc19tY19iYXNlID0gcmVxdWVzdF9yZWdpb24oY2hpcC0+bWNfYmFzZSwgY2hpcC0+bWNfYmFzZV9zaXplLCAiT1BUaTl4eCBNQyIpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdmFsdWUgPSBzbmRfbWlyb19yZWFkKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDEpKTsKKwkJaWYgKCh2YWx1ZSAhPSAweGZmKSAmJiAodmFsdWUgIT0gaW5iKGNoaXAtPm1jX2Jhc2UgKyAxKSkpCisJCQlpZiAodmFsdWUgPT0gc25kX21pcm9fcmVhZChjaGlwLCBPUFRpOVhYX01DX1JFRygxKSkpCisJCQkJcmV0dXJuIDE7CisKKwkJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfbWNfYmFzZSk7CisJCWNoaXAtPnJlc19tY19iYXNlID0gTlVMTDsKKworCX0KKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9taXJvX2FjaV9kZXRlY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvKQoreworCXVuc2lnbmVkIGNoYXIgcmVndmFsOworCWludCBpOworCisJbXV0ZXhfaW5pdCgmbWlyby0+YWNpX211dGV4KTsKKworCS8qIGdldCBBQ0kgcG9ydCBmcm9tIE9QVGk5eHggTUMgNCAqLworCisJbWlyby0+bWNfYmFzZSA9IDB4ZjhjOworCXJlZ3ZhbD1pbmIobWlyby0+bWNfYmFzZSArIDQpOworCW1pcm8tPmFjaV9wb3J0ID0gKHJlZ3ZhbCAmIDB4MTApID8gMHgzNDQ6IDB4MzU0OworCisJaWYgKChtaXJvLT5yZXNfYWNpX3BvcnQgPSByZXF1ZXN0X3JlZ2lvbihtaXJvLT5hY2lfcG9ydCwgMywgIm1pcm8gYWNpIikpID09IE5VTEwpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWNpIGkvbyBhcmVhIDB4JWx4LTB4JWx4IGFscmVhZHkgdXNlZC5cbiIsIAorCQkJICAgbWlyby0+YWNpX3BvcnQsIG1pcm8tPmFjaV9wb3J0KzIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKyAgICAgICAgLyogZm9yY2UgQUNJIGludG8gYSBrbm93biBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWlmIChhY2lfY21kKG1pcm8sIEFDSV9FUlJPUl9PUCwgLTEsIC0xKSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IGZvcmNlIGFjaSBpbnRvIGtub3duIHN0YXRlLlxuIik7CisJCQlyZXR1cm4gLUVOWElPOworCQl9CisKKwlpZiAoKG1pcm8tPmFjaV92ZW5kb3I9YWNpX2NtZChtaXJvLCBBQ0lfUkVBRF9JRENPREUsIC0xLCAtMSkpIDwgMCB8fAorCSAgICAobWlyby0+YWNpX3Byb2R1Y3Q9YWNpX2NtZChtaXJvLCBBQ0lfUkVBRF9JRENPREUsIC0xLCAtMSkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWFkIGFjaSBpZCBvbiAweCVseC5cbiIsIG1pcm8tPmFjaV9wb3J0KTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoKG1pcm8tPmFjaV92ZXJzaW9uPWFjaV9jbWQobWlybywgQUNJX1JFQURfVkVSU0lPTiwgLTEsIC0xKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbid0IHJlYWQgYWNpIHZlcnNpb24gb24gMHglbHguXG4iLCAKKwkJCSAgIG1pcm8tPmFjaV9wb3J0KTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoYWNpX2NtZChtaXJvLCBBQ0lfSU5JVCwgLTEsIC0xKSA8IDAgfHwKKwkgICAgYWNpX2NtZChtaXJvLCBBQ0lfRVJST1JfT1AsIEFDSV9FUlJPUl9PUCwgQUNJX0VSUk9SX09QKSA8IDAgfHwKKwkgICAgYWNpX2NtZChtaXJvLCBBQ0lfRVJST1JfT1AsIEFDSV9FUlJPUl9PUCwgQUNJX0VSUk9SX09QKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgaW5pdGlhbGl6ZSBhY2kuXG4iKTsgCisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9jYXJkX21pcm9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9taXJvICptaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworICAgICAgICAKKwlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKG1pcm8tPnJlc19hY2lfcG9ydCk7CisJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShtaXJvLT5yZXNfbWNfYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9taXJvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3sKKwlzdGF0aWMgbG9uZyBwb3NzaWJsZV9wb3J0c1tdID0gezB4NTMwLCAweGU4MCwgMHhmNDAsIDB4NjA0LCAtMX07CisJc3RhdGljIGxvbmcgcG9zc2libGVfbXB1X3BvcnRzW10gPSB7MHgzMzAsIDB4MzAwLCAweDMxMCwgMHgzMjAsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHsxMSwgOSwgMTAsIDcsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX21wdV9pcnFzW10gPSB7MTAsIDUsIDksIDcsIC0xfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2RtYTFzW10gPSB7MywgMSwgMCwgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hMnNbXVsyXSA9IHt7MSwtMX0sIHswLC0xfSwgey0xLC0xfSwgezAsLTF9fTsKKworCWludCBlcnJvcjsKKwlzdHJ1Y3Qgc25kX21pcm8gKm1pcm87CisJc3RydWN0IHNuZF9jczQyMzEgKmNvZGVjOworCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCisJCQkJICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX21pcm9fZnJlZTsKKwltaXJvID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCW1pcm8tPmNhcmQgPSBjYXJkOworCisJaWYgKChlcnJvciA9IHNuZF9jYXJkX21pcm9fYWNpX2RldGVjdChjYXJkLCBtaXJvKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBkZXRlY3QgYWNpIGNoaXBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBpbml0IHByb2MgaW50ZXJmYWNlICovCisJc25kX21pcm9fcHJvY19pbml0KG1pcm8pOworCisJaWYgKChlcnJvciA9IHNuZF9jYXJkX21pcm9fZGV0ZWN0KGNhcmQsIG1pcm8pKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGRldGVjdCBPUFRpOXh4IGNoaXBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoISBtaXJvLT5yZXNfbWNfYmFzZSAmJgorCSAgICAobWlyby0+cmVzX21jX2Jhc2UgPSByZXF1ZXN0X3JlZ2lvbihtaXJvLT5tY19iYXNlLCBtaXJvLT5tY19iYXNlX3NpemUsCisJCQkJCQkibWlybyAoT1BUaTl4eCBNQykiKSkgPT0gTlVMTCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJyZXF1ZXN0IGZvciBPUFRJOXh4IE1DIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1pcm8tPndzc19iYXNlID0gcG9ydDsKKwltaXJvLT5mbV9wb3J0ID0gZm1fcG9ydDsKKwltaXJvLT5tcHVfcG9ydCA9IG1wdV9wb3J0OworCW1pcm8tPmlycSA9IGlycTsKKwltaXJvLT5tcHVfaXJxID0gbXB1X2lycTsKKwltaXJvLT5kbWExID0gZG1hMTsKKwltaXJvLT5kbWEyID0gZG1hMjsKKworCWlmIChtaXJvLT53c3NfYmFzZSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKChtaXJvLT53c3NfYmFzZSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChwb3NzaWJsZV9wb3J0cywgNCkpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKG1pcm8tPm1wdV9wb3J0ID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoKG1pcm8tPm1wdV9wb3J0ID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaW9wb3J0KHBvc3NpYmxlX21wdV9wb3J0cywgMikpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBNUFU0MDEgcG9ydFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWlmIChtaXJvLT5pcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKKwkJaWYgKChtaXJvLT5pcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcykpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwlpZiAobWlyby0+bXB1X2lycSA9PSBTTkRSVl9BVVRPX0lSUSkgeworCQlpZiAoKG1pcm8tPm1wdV9pcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfbXB1X2lycXMpKSA8IDApIHsKKwkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgTVBVNDAxIElSUVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWlmIChtaXJvLT5kbWExID09IFNORFJWX0FVVE9fRE1BKSB7CisJCWlmICgobWlyby0+ZG1hMSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWExcykpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUExXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaWYgKG1pcm8tPmRtYTIgPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJaWYgKChtaXJvLT5kbWEyID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYTJzW21pcm8tPmRtYTEgJSA0XSkpIDwgMCkgeworCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlpZiAoKGVycm9yID0gc25kX21pcm9fY29uZmlndXJlKG1pcm8pKSkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJaWYgKChlcnJvciA9IHNuZF9jczQyMzFfY3JlYXRlKGNhcmQsIG1pcm8tPndzc19iYXNlICsgNCwgLTEsCisJCQkJICAgICAgIG1pcm8tPmlycSwgbWlyby0+ZG1hMSwgbWlyby0+ZG1hMiwKKwkJCQkgICAgICAgQ1M0MjMxX0hXX0FEMTg0NSwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgJmNvZGVjKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAoKGVycm9yID0gc25kX2NzNDIzMV9wY20oY29kZWMsIDAsICZwY20pKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwlpZiAoKGVycm9yID0gc25kX2NzNDIzMV9taXhlcihjb2RlYykpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCWlmICgoZXJyb3IgPSBzbmRfY3M0MjMxX3RpbWVyKGNvZGVjLCAwLCAmdGltZXIpKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCW1pcm8tPnBjbSA9IHBjbTsKKworCWlmICgoZXJyb3IgPSBzbmRfbWlyb19taXhlcihtaXJvKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAobWlyby0+YWNpX3ZlbmRvciA9PSAnbScpIHsKKwkJLyogSXQgbG9va3MgbGlrZSBhIG1pcm8gc291bmQgY2FyZC4gKi8KKwkJc3dpdGNoIChtaXJvLT5hY2lfcHJvZHVjdCkgeworCQljYXNlICdBJzoKKwkJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAKKwkJCQkibWlyb1NPVU5EIFBDTTEgcHJvIC8gUENNMTIiKTsKKwkJCWJyZWFrOworCQljYXNlICdCJzoKKwkJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAKKwkJCQkibWlyb1NPVU5EIFBDTTEyIik7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgCisJCQkJIm1pcm9TT1VORCBQQ00yMCByYWRpbyIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgCisJCQkJInVua25vd24gbWlybyIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gInVua25vd24gbWlybyBhY2kgaWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZm91bmQgdW5zdXBwb3J0ZWQgYWNpIGNhcmRcbiIpOworCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgInVua25vd24gQ2FyZGluYWwgVGVjaG5vbG9naWVzIik7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIm1pcm8iKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXM6IE9QVGklcywgJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkJiVkIiwKKwkJY2FyZC0+c2hvcnRuYW1lLCBtaXJvLT5uYW1lLCBwY20tPm5hbWUsIG1pcm8tPndzc19iYXNlICsgNCwKKwkJbWlyby0+aXJxLCBtaXJvLT5kbWExLCBtaXJvLT5kbWEyKTsKKworCWlmIChtaXJvLT5tcHVfcG9ydCA8PSAwIHx8IG1pcm8tPm1wdV9wb3J0ID09IFNORFJWX0FVVE9fUE9SVCkKKwkJcm1pZGkgPSBOVUxMOworCWVsc2UKKwkJaWYgKChlcnJvciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKKwkJCQltaXJvLT5tcHVfcG9ydCwgMCwgbWlyby0+bXB1X2lycSwgU0FfSU5URVJSVVBULAorCQkJCSZybWlkaSkpKQorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4P1xuIiwgbWlyby0+bXB1X3BvcnQpOworCisJaWYgKG1pcm8tPmZtX3BvcnQgPiAwICYmIG1pcm8tPmZtX3BvcnQgIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXN0cnVjdCBzbmRfb3BsMyAqb3BsMyA9IE5VTEw7CisJCXN0cnVjdCBzbmRfb3BsNCAqb3BsNDsKKwkJaWYgKHNuZF9vcGw0X2NyZWF0ZShjYXJkLCBtaXJvLT5mbV9wb3J0LCBtaXJvLT5mbV9wb3J0IC0gOCwgCisJCQkJICAgIDIsICZvcGwzLCAmb3BsNCkgPCAwKQorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIm5vIE9QTDQgZGV2aWNlIGF0IDB4JWx4XG4iLCBtaXJvLT5mbV9wb3J0KTsKKwl9CisKKwlpZiAoKGVycm9yID0gc25kX3NldF9hY2lfaW5pdF92YWx1ZXMobWlybykpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZwdHItPmRldik7CisKKwlpZiAoKGVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfbWlyb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQoreworCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX21pcm9fZHJpdmVyID0geworCS5wcm9iZQkJPSBzbmRfbWlyb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9taXJvX3JlbW92ZSksCisJLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX21pcm9faW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9taXJvX2RyaXZlcikpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKKwlpZiAoISBJU19FUlIoZGV2aWNlKSkgeworCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkKKwkJCXJldHVybiAwOworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCX0KKyNpZmRlZiBNT0RVTEUKKwlwcmludGsoS0VSTl9FUlIgIm5vIG1pcm8gc291bmRjYXJkIGZvdW5kXG4iKTsKKyNlbmRpZgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfbWlyb19kcml2ZXIpOworCXJldHVybiBQVFJfRVJSKGRldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbWlyb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX21pcm9fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9jYXJkX21pcm9faW5pdCkKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9taXJvX2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmggYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxMzg1YgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9NSVJPX0hfCisjZGVmaW5lIF9NSVJPX0hfCisKKyNkZWZpbmUgQUNJX1JFR19DT01NQU5ECQkwCS8qIHdyaXRlIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBBQ0lfUkVHX1NUQVRVUwkJMQkvKiByZWFkIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBBQ0lfUkVHX0JVU1kJCTIJLyogYnVzeSByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQUNJX1JFR19SRFMJCTIJLyogUENNMjA6IFJEUyByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQUNJX01JTlRJTUUJCTUwMAkvKiBBQ0kgdGltZSBvdXQgbGltaXQgKi8KKworI2RlZmluZSBBQ0lfU0VUX01VVEUJCTB4MGQKKyNkZWZpbmUgQUNJX1NFVF9QT1dFUkFNUAkweDBmCisjZGVmaW5lIEFDSV9TRVRfVFVORVJNVVRFCTB4YTMKKyNkZWZpbmUgQUNJX1NFVF9UVU5FUk1PTk8JMHhhNAorI2RlZmluZSBBQ0lfU0VUX0lERQkJMHhkMAorI2RlZmluZSBBQ0lfU0VUX1dTUwkJMHhkMQorI2RlZmluZSBBQ0lfU0VUX1NPTE9NT0RFCTB4ZDIKKyNkZWZpbmUgQUNJX1NFVF9QUkVBTVAJCTB4MDMKKyNkZWZpbmUgQUNJX0dFVF9QUkVBTVAJCTB4MjEKKyNkZWZpbmUgQUNJX1dSSVRFX1RVTkUJCTB4YTcKKyNkZWZpbmUgQUNJX1JFQURfVFVORVJTVEVSRU8JMHhhOAorI2RlZmluZSBBQ0lfUkVBRF9UVU5FUlNUQVRJT04JMHhhOQorI2RlZmluZSBBQ0lfUkVBRF9WRVJTSU9OCTB4ZjEKKyNkZWZpbmUgQUNJX1JFQURfSURDT0RFCQkweGYyCisjZGVmaW5lIEFDSV9JTklUCQkweGZmCisjZGVmaW5lIEFDSV9TVEFUVVMJCTB4ZjAKKyNkZWZpbmUgQUNJX1NfR0VORVJBTAkJMHgwMAorI2RlZmluZSBBQ0lfRVJST1JfT1AJCTB4ZGYKKworLyogQUNJIE1peGVyICovCisKKy8qIFRoZXNlIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgcmlnaHQgY2hhbm5lbCBHRVQgcmVnaXN0ZXJzLgorICAgQWRkIGFuIG9mZnNldCBvZiAweDAxIGZvciB0aGUgbGVmdCBjaGFubmVsIHJlZ2lzdGVyLgorICAgKGxlZnQ9cmlnaHQrMHgwMSkgKi8KKworI2RlZmluZSBBQ0lfR0VUX01BU1RFUgkJMHgwMworI2RlZmluZSBBQ0lfR0VUX01JQwkJMHgwNQorI2RlZmluZSBBQ0lfR0VUX0xJTkUJCTB4MDcKKyNkZWZpbmUgQUNJX0dFVF9DRAkJMHgwOQorI2RlZmluZSBBQ0lfR0VUX1NZTlRICQkweDBiCisjZGVmaW5lIEFDSV9HRVRfUENNCQkweDBkCisjZGVmaW5lIEFDSV9HRVRfTElORTEJCTB4MTAJLyogUmFkaW8gb24gUENNMjAgKi8KKyNkZWZpbmUgQUNJX0dFVF9MSU5FMgkJMHgxMgorCisjZGVmaW5lIEFDSV9HRVRfRVExCQkweDIyCS8qIGZyb20gQmFzcyAuLi4gKi8KKyNkZWZpbmUgQUNJX0dFVF9FUTIJCTB4MjQKKyNkZWZpbmUgQUNJX0dFVF9FUTMJCTB4MjYKKyNkZWZpbmUgQUNJX0dFVF9FUTQJCTB4MjgKKyNkZWZpbmUgQUNJX0dFVF9FUTUJCTB4MmEKKyNkZWZpbmUgQUNJX0dFVF9FUTYJCTB4MmMKKyNkZWZpbmUgQUNJX0dFVF9FUTcJCTB4MmUJLyogLi4uIHRvIFRyZWJsZSAqLworCisvKiBBbmQgdGhlc2UgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSByaWdodCBjaGFubmVsIFNFVCByZWdpc3RlcnMuCisgICBGb3IgbGVmdCBjaGFubmVsIGFjY2VzcyB5b3UgaGF2ZSB0byBhZGQgYW4gb2Zmc2V0IG9mIDB4MDguCisgICBNQVNURVIgaXMgYW4gZXhjZXB0aW9uLCB3aGljaCBuZWVkcyBhbiBvZmZzZXQgb2YgMHgwMSAqLworCisjZGVmaW5lIEFDSV9TRVRfTUFTVEVSCQkweDAwCisjZGVmaW5lIEFDSV9TRVRfTUlDCQkweDMwCisjZGVmaW5lIEFDSV9TRVRfTElORQkJMHgzMQorI2RlZmluZSBBQ0lfU0VUX0NECQkweDM0CisjZGVmaW5lIEFDSV9TRVRfU1lOVEgJCTB4MzMKKyNkZWZpbmUgQUNJX1NFVF9QQ00JCTB4MzIKKyNkZWZpbmUgQUNJX1NFVF9MSU5FMQkJMHgzNQkvKiBSYWRpbyBvbiBQQ00yMCAqLworI2RlZmluZSBBQ0lfU0VUX0xJTkUyCQkweDM2CisKKyNkZWZpbmUgQUNJX1NFVF9FUTEJCTB4NDAJLyogZnJvbSBCYXNzIC4uLiAqLworI2RlZmluZSBBQ0lfU0VUX0VRMgkJMHg0MQorI2RlZmluZSBBQ0lfU0VUX0VRMwkJMHg0MgorI2RlZmluZSBBQ0lfU0VUX0VRNAkJMHg0MworI2RlZmluZSBBQ0lfU0VUX0VRNQkJMHg0NAorI2RlZmluZSBBQ0lfU0VUX0VRNgkJMHg0NQorI2RlZmluZSBBQ0lfU0VUX0VRNwkJMHg0NgkvKiAuLi4gdG8gVHJlYmxlICovCisKKyNlbmRpZiAgLyogX01JUk9fSF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IDY1YjI4Y2IuLjhlZTBkNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMjA5OSw4ICsyMDk5LDExIEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKIAkJaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQkJc25kX29wdGk5eHhfcGxhdGZvcm1fZGV2aWNlID0gZGV2aWNlOwotCQkJcmV0dXJuIDA7CisJCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJCXNuZF9vcHRpOXh4X3BsYXRmb3JtX2RldmljZSA9IGRldmljZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CiAJCX0KIAkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9vcHRpOXh4X2RyaXZlcik7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTYuYyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKaW5kZXggMjFlYTY1OS4uNjMzM2Y5MCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTYuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCkBAIC03MjAsOSArNzIwLDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0IxNl9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAkJY2FyZHMrKzsKQEAgLTc0NSwxNCArNzQ3LDEwIEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkluIGNhc2UsIGlmIHlvdSBoYXZlIEFXRSBjYXJkLCB0cnkgc25kLXNiYXdlIG1vZHVsZVxuIik7CiAjZW5kaWYKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3NiMTZfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF9zYjE2X3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9zYjE2X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCAzZWZhMjNkLi4xNDE0MDBjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0yNjQsOSArMjY0LDExIEBACiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0I4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlkZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtMjc1LDE0ICsyNzcsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiU291bmQgQmxhc3RlciBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKICNlbmRpZgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm91dDsKKwkJc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2I4X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IGE2MGU2NmEuLjA5YzhlOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMzY2LDkgKzM2NiwxMSBAQAogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1NHQUxBWFlfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JCQlnb3RvIGVycm91dDsKKwkJaWYgKElTX0VSUihkZXZpY2UpKQorCQkJY29udGludWU7CisJCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAJCWRldmljZXNbaV0gPSBkZXZpY2U7CiAJCWNhcmRzKys7CkBAIC0zNzcsMTQgKzM3OSwxMCBAQAogI2lmZGVmIE1PRFVMRQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJTb3VuZCBHYWxheHkgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF9zZ2FsYXh5X3VucmVnaXN0ZXJfYWxsKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKLQotIGVycm91dDoKLQlzbmRfc2dhbGF4eV91bnJlZ2lzdGVyX2FsbCgpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2dhbGF4eV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc3NjYXBlLmMgYi9zb3VuZC9pc2Evc3NjYXBlLmMKaW5kZXggNDhlNTU1Mi4uZDJhODU2ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NzY2FwZS5jCisrKyBiL3NvdW5kL2lzYS9zc2NhcGUuYwpAQCAtMTQyNyw4ICsxNDI3LDggQEAKIAkJICAgIGRtYVtpXSA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJzc2NhcGU6IGluc3VmZmljaWVudCBwYXJhbWV0ZXJzLCBuZWVkIElPLCBJUlEsIE1QVS1JUlEgYW5kIERNQVxuIik7Ci0JCQlyZXQgPSAtRU5YSU87Ci0JCQlnb3RvIGVycm91dDsKKwkJCXNzY2FwZV91bnJlZ2lzdGVyX2FsbCgpOworCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCiAJCS8qCkBAIC0xNDM2LDE3ICsxNDM2LDE1IEBACiAJCSAqLwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNTQ0FQRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKLQkJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsKLQkJCWdvdG8gZXJyb3V0OworCQlpZiAoSVNfRVJSKGRldmljZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCQkJY29udGludWU7CiAJCX0KIAkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnJvdXQ6Ci0Jc3NjYXBlX3VucmVnaXN0ZXJfYWxsKCk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc3NjYXBlX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCmluZGV4IDJmMTNjZDUuLjdhZTg2ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwpAQCAtNzIyLDkgKzcyMiwxMSBAQAogI2VuZGlmCiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoV0FWRUZST05UX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkgewotCQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCQkJZ290byBlcnJvdXQ7CisJCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJCQljb250aW51ZTsKIAkJfQogCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwogCQljYXJkcysrOwpAQCAtNzQyLDE0ICs3NDQsMTAgQEAKICNpZmRlZiBNT0RVTEUKIAkJcHJpbnRrIChLRVJOX0VSUiAiTm8gV2F2ZUZyb250IGNhcmRzIGZvdW5kIG9yIGRldmljZXMgYnVzeVxuIik7CiAjZW5kaWYKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotCi0gZXJyb3V0OgotCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3dhdmVmcm9udF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvS2NvbmZpZyBiL3NvdW5kL29zcy9LY29uZmlnCmluZGV4IDg4ZTUyZGMuLjU1OGM2ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9LY29uZmlnCisrKyBiL3NvdW5kL29zcy9LY29uZmlnCkBAIC01LDIzICs1LDkgQEAKICMKICMgUHJvbXB0IHVzZXIgZm9yIHByaW1hcnkgZHJpdmVycy4KIAotY29uZmlnIE9CU09MRVRFX09TU19EUklWRVIKLQlib29sICJPYnNvbGV0ZSBPU1MgZHJpdmVycyIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBvYnNvbGV0ZSBPU1MgZHJpdmVycyB0aGF0Ci0JICBhcmUgc2NoZWR1bGVkIGZvciByZW1vdmFsIGluIHRoZSBuZWFyIGZ1dHVyZSBzaW5jZSB0aGVyZQotCSAgYXJlIEFMU0EgZHJpdmVycyBmb3IgdGhlIHNhbWUgaGFyZHdhcmUuCi0KLQkgIFBsZWFzZSBjb250YWN0IEFkcmlhbiBCdW5rIDxidW5rQHN0dXN0YS5kZT4gaWYgeW91IGhhZCB0bwotCSAgc2F5IFkgaGVyZSBiZWNhdXNlIHlvdXIgc291bmRjYXJkIGlzIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQKLQkgIGJ5IEFMU0EuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBTT1VORF9CVDg3OAogCXRyaXN0YXRlICJCVDg3OCBhdWRpbyBkbWEiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCiAJLS0taGVscC0tLQogCSAgQXVkaW8gRE1BIHN1cHBvcnQgZm9yIGJ0ODc4IGJhc2VkIGdyYWJiZXIgYm9hcmRzLiAgQXMgeW91IG1pZ2h0IGhhdmUKIAkgIGFscmVhZHkgbm90aWNlZCwgYnQ4NzggaXMgbGlzdGVkIHdpdGggdHdvIGZ1bmN0aW9ucyBpbiAvcHJvYy9wY2kuCkBAIC0zNSw0OCArMjEsOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgYnRhdWRpby4KIAotY29uZmlnIFNPVU5EX0NNUENJCi0JdHJpc3RhdGUgIkMtTWVkaWEgUENJIChDTUk4MzM4Lzg3MzgpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIENNSTgzMzgKLQkgIG9yIHRoZSBDTUk4NzM4IGNoaXBzZXQuICBEYXRhIG9uIHRoZXNlIGNoaXBzIGFyZSBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vd3d3LmNtZWRpYS5jb20udHcvPi4KLQotCSAgQSB1c2Vyc3BhY2UgdXRpbGl0eSB0byBjb250cm9sIHNvbWUgaW50ZXJuYWwgcmVnaXN0ZXJzIG9mIHRoZXNlCi0JICBjaGlwcyBpcyBhdmFpbGFibGUgYXQKLQkgIDxodHRwOi8vbWVtYmVyLm5pZnR5Lm5lLmpwL0JyZWV6ZS9zb2Z0d2FyZXMvdW5peC9jbWljdGwtZS5odG1sPi4KLQotY29uZmlnIFNPVU5EX0NNUENJX0ZNCi0JYm9vbCAiRW5hYmxlIGxlZ2FjeSBGTSIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBsZWdhY3kgRk0gKGZyZXF1ZW5jeS1tb2R1bGF0aW9uKSBzeW50aGVzaXplcgotCSAgc3VwcG9ydCBvbiBhIGNhcmQgdXNpbmcgdGhlIENNSTgzMzggb3IgQ01JODM3OCBjaGlwc2V0LiBFdmVuIGl0IGlzCi0JICBlbmFibGVkLCB5b3UgbmVlZCB0byBzZXQgZm1pbyBhcyBwcm9wZXIgdmFsdWUgdG8gZW5hYmxlIGl0LgotCSAgU2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzLgotCi1jb25maWcgU09VTkRfQ01QQ0lfTUlESQotCWJvb2wgIkVuYWJsZSBsZWdhY3kgTVBVLTQwMSIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBsZWdhY3kgTVBVNDAxIE1JREkgc3ludGhlc2l6ZXIgc3VwcG9ydCBvbiBhCi0JICBjYXJkIHVzaW5nIHRoZSBDTUk4MzM4IG9yIENNSTgzNzggY2hpcHNldC4gRXZlbiBpdCBpcyBlbmFibGVkLAotCSAgeW91IG5lZWQgdG8gc2V0IG1wdWlvIGFzIHByb3BlciB2YWx1ZSB0byBlbmFibGUgaXQuCi0JICBTYXkgTiBoZXJlIGlmIHlvdSBkb24ndCBuZWVkIHRoaXMuCi0KLWNvbmZpZyBTT1VORF9DTVBDSV9KT1lTVElDSwotCWJvb2wgIkVuYWJsZSBqb3lzdGljayIKLQlkZXBlbmRzIG9uIFNPVU5EX0NNUENJICYmIFg4NiAmJiAoR0FNRVBPUlQ9eSB8fCBTT1VORF9DTVBDST1HQU1FUE9SVCkKLQloZWxwCi0JICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGVuYWJsZSB0aGUgam95c3RpY2sgcG9ydCBvbiBhIHNvdW5kIGNhcmQgdXNpbmcKLQkgIHRoZSBDTUk4MzM4IG9yIHRoZSBDTUk4NzM4IGNoaXBzZXQuICBZb3UgbmVlZCB0byBjb25maWcgdGhlCi0JICBnYW1lcG9ydCBzdXBwb3J0IGFuZCBzZXQgam95c3RpY2sgcGFyYW1ldGVyIGFzIDEgdG8gdXNlIGl0LgotCSAgU2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzLgotCiBjb25maWcgU09VTkRfRU1VMTBLMQogCXRyaXN0YXRlICJDcmVhdGl2ZSBTQkxpdmUhIChFTVUxMEsxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIEVNVTEwSzEgY2hpcHNldCwKIAkgIHN1Y2ggYXMgdGhlIENyZWF0aXZlIFNCTGl2ZSEsIFNCIFBDSTUxMiBvciBFbXUtQVBTLgpAQCAtMTA4LDEzICs1NSw2IEBACiAJICBzZXJpZXMpIHdoZW4gd2lyZWQgYXMgbmF0aXZlIHNvdW5kIGRyaXZlcnMgd2l0aCBBQzk3IGNvZGVjcy4gIElmCiAJICB0aGlzIGRyaXZlciBkb2VzIG5vdCB3b3JrIHRyeSB0aGUgQ1M0MjMyIGRyaXZlci4KIAotY29uZmlnIFNPVU5EX0NTNDI4MQotCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI4MSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgUGljdHVyZSBhbmQgZmVhdHVyZSBsaXN0IGF0Ci0JICA8aHR0cDovL3d3dy5wY2Jyb2tlci5jb20vY3J5c3RhbDQyODEuaHRtbD4uCi0KIGNvbmZpZyBTT1VORF9CQ01fQ1M0Mjk3QQogCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI5N2EgKGZvciBTd2FybSkiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBTSUJZVEVfU1dBUk0KQEAgLTEyNSwyMiArNjUsOSBAQAogCSAgbm90ZSB0aGF0IENPTkZJR19LR0RCIHNob3VsZCBub3QgYmUgZW5hYmxlZCBhdCB0aGUgc2FtZQogCSAgdGltZSwgc2luY2UgaXQgYWxzbyBhdHRlbXB0cyB0byB1c2UgdGhpcyBVQVJUIHBvcnQuCiAKLWNvbmZpZyBTT1VORF9FUzEzNzAKLQl0cmlzdGF0ZSAiRW5zb25pcSBBdWRpb1BDSSAoRVMxMzcwKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHV0aWxpemluZyB0aGUgRW5zb25pcQotCSAgRVMxMzcwIGNoaXBzZXQsIHN1Y2ggYXMgRW5zb25pcSdzIEF1ZGlvUENJIChub24tOTcpLiBUbyBmaW5kCi0JICBvdXQgaWYgeW91ciBzb3VuZCBjYXJkIHVzZXMgYW4gRVMxMzcwIHdpdGhvdXQgcmVtb3ZpbmcgeW91cgotCSAgY29tcHV0ZXIncyBjb3ZlciwgdXNlIGxzcGNpIC1uIGFuZCBsb29rIGZvciB0aGUgUENJIElECi0JICAxMjc0OjUwMDAuIFNpbmNlIEVuc29uaXEgd2FzIGJvdWdodCBieSBDcmVhdGl2ZSBMYWJzLAotCSAgU291bmQgQmxhc3RlciA2NC9QQ0kgbW9kZWxzIGFyZSBlaXRoZXIgRVMxMzcwIG9yIEVTMTM3MSBiYXNlZC4KLQkgIFRoaXMgZHJpdmVyIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MD4uCi0KIGNvbmZpZyBTT1VORF9FUzEzNzEKIAl0cmlzdGF0ZSAiQ3JlYXRpdmUgRW5zb25pcSBBdWRpb1BDSSA5NyAoRVMxMzcxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBFbnNvbmlxCiAJICBFUzEzNzEgY2hpcHNldCwgc3VjaCBhcyBFbnNvbmlxJ3MgQXVkaW9QQ0k5Ny4gVG8gZmluZCBvdXQgaWYKQEAgLTE1MSwzMyArNzgsNiBAQAogCSAgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MT4uCiAKLWNvbmZpZyBTT1VORF9FU1NTT0xPMQotCXRyaXN0YXRlICJFU1MgVGVjaG5vbG9neSBTb2xvMSIgCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1dGlsaXppbmcgdGhlIEVTUyBUZWNobm9sb2d5Ci0JICBTb2xvMSBjaGlwLiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCi0JICBTb2xvMSBjaGlwIHdpdGhvdXQgcmVtb3ZpbmcgeW91ciBjb21wdXRlcidzIGNvdmVyLCB1c2UKLQkgIGxzcGNpIC1uIGFuZCBsb29rIGZvciB0aGUgUENJIElEIDEyNUQ6MTk2OS4gVGhpcyBkcml2ZXIKLQkgIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBPU1MvRnJlZSwgc28gUExFQVNFIFJFQUQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbG8xPi4KLQotY29uZmlnIFNPVU5EX01BRVNUUk8KLQl0cmlzdGF0ZSAiRVNTIE1hZXN0cm8sIE1hZXN0cm8yLCBNYWVzdHJvMkUgZHJpdmVyIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIGxpbmUKLQkgIG9mIFBDSSBzb3VuZCBjaGlwcy4gIFRoZXNlIGluY2x1ZGUgdGhlIE1hZXN0cm8gMSwgTWFlc3RybyAyLCBhbmQKLQkgIE1hZXN0cm8gMkUuICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3Rybz4gZm9yIG1vcmUKLQkgIGRldGFpbHMuCi0KLWNvbmZpZyBTT1VORF9NQUVTVFJPMwotCXRyaXN0YXRlICJFU1MgTWFlc3RybzMvQWxsZWdybyBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgc291bmQgc3lzdGVtIGRyaXZlbiBieSBFU1MncyBNYWVzdHJvIDMKLQkgIFBDSSBzb3VuZCBjaGlwLgotCiBjb25maWcgU09VTkRfSUNICiAJdHJpc3RhdGUgIkludGVsIElDSCAoaTh4eCkgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQpAQCAtMTg1LDI0ICs4NSw2IEBACiAJICBTdXBwb3J0IGZvciBpbnRlZ3JhbCBhdWRpbyBpbiBJbnRlbCdzIEkvTyBDb250cm9sbGVyIEh1YiAoSUNIKQogCSAgY2hpcHNldCwgYXMgdXNlZCBvbiB0aGUgODEwLzgyMC84NDAgbW90aGVyYm9hcmRzLgogCi1jb25maWcgU09VTkRfSEFSTU9OWQotCXRyaXN0YXRlICJQQSBIYXJtb255IGF1ZGlvIGRyaXZlciIKLQlkZXBlbmRzIG9uIEdTQ19MQVNJICYmIFNPVU5EX1BSSU1FICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEhhcm1vbnkgc291bmRjaGlwCi0JICBvbiBIUCA3MTIsIDcxNS9uZXcgYW5kIG1hbnkgb3RoZXIgR1NDIGJhc2VkIG1hY2hpbmVzLgotCi1jb25maWcgU09VTkRfU09OSUNWSUJFUwotCXRyaXN0YXRlICJTMyBTb25pY1ZpYmVzIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBTMwotCSAgU29uaWNWaWJlcyBjaGlwc2V0LiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCi0JICBTb25pY1ZpYmVzIGNoaXAgd2l0aG91dCByZW1vdmluZyB5b3VyIGNvbXB1dGVyJ3MgY292ZXIsIHVzZQotCSAgbHNwY2kgLW4gYW5kIGxvb2sgZm9yIHRoZSBQQ0kgSUQgNTMzMzpDQTAwLiBUaGlzIGRyaXZlcgotCSAgZGlmZmVycyBzbGlnaHRseSBmcm9tIE9TUy9GcmVlLCBzbyBQTEVBU0UgUkVBRAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29uaWN2aWJlcz4uCi0KIGNvbmZpZyBTT1VORF9WV1NORAogCXRyaXN0YXRlICJTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIFNvdW5kIgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgWDg2X1ZJU1dTCkBAIC0yMzEsMTAgKzExMyw2IEBACiAJICBpbnRlZ3JhdGVkLCBtdWx0aS1mdW5jdGlvbiBjb250cm9sbGVyIGNoaXAgZm9yIE1JUFMgQ1BVcy4gIFdvcmtzCiAJICB3aXRoIHRoZSBBQzk3IGNvZGVjLgogCi1jb25maWcgU09VTkRfQVUxMDAwCi0JdHJpc3RhdGUgIkF1MTAwMCBTb3VuZCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIChTT0NfQVUxMDAwIHx8IFNPQ19BVTExMDAgfHwgU09DX0FVMTUwMCkgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCiBjb25maWcgU09VTkRfQVUxNTUwX0FDOTcKIAl0cmlzdGF0ZSAiQXUxNTUwIEFDOTcgU291bmQiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBTT0NfQVUxNTUwCkBAIC01MDcsNyArMzg1LDcgQEAKIAogY29uZmlnIFNPVU5EX1ZJQTgyQ1hYWAogCXRyaXN0YXRlICJWSUEgODJDNjg2IEF1ZGlvIENvZGVjIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgYXVkaW8gY29kZWMgZm91bmQgb24gVklBCiAJICA4MkN4eHgtYmFzZWQgY2hpcHMuIFR5cGljYWxseSB0aGVzZSBhcmUgYnVpbHQgaW50byBhIG1vdGhlcmJvYXJkLgpAQCAtNTc2LDE4ICs0NTQsNiBAQAogCSAgU2F5IE0gaGVyZSBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgYmFzZWQgb24gdGhlIEFuYWxvZyBEZXZpY2VzCiAJICBBRDE4ODkgY2hpcC4KIAotY29uZmlnIFNPVU5EX1NHQUxBWFkKLQl0cmlzdGF0ZSAiQXp0ZWNoIFNvdW5kIEdhbGF4eSAobm9uLVBuUCkgY2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIHRoZSBvbGRlciBub24gUGx1ZyBhbmQgUGxheSBzb3VuZCBnYWxheHkKLQkgIGNhcmRzIGZyb20gQXp0ZWNoLiBJdCBzdXBwb3J0cyB0aGUgV2F2ZXJpZGVyIFBybyAzMiAtIDNEIGFuZCB0aGUKLQkgIEdhbGF4eSBXYXNoaW5ndG9uIDE2LgotCi0JICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCi0JICAic2dhbGF4eT08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2diYXNlPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kCi0JICBsaW5lLgotCiBjb25maWcgU09VTkRfQURMSUIKIAl0cmlzdGF0ZSAiQWRsaWIgQ2FyZHMiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTYxNCw3ICs0ODAsNyBAQAogCiBjb25maWcgU09VTkRfQ1M0MjMyCiAJdHJpc3RhdGUgIkNyeXN0YWwgQ1M0MjMyIGJhc2VkIChQblApIGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX09TUwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBjYXJkIGJhc2VkIG9uIHRoZSBDcnlzdGFsIENTNDIzMiBjaGlwIHNldCwKIAkgIHdoaWNoIHVzZXMgaXRzIG93biBQbHVnIGFuZCBQbGF5IHByb3RvY29sLgpAQCAtNjI2LDQyICs0OTIsNiBAQAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KIAkgIGNvbmZpZ3VyaW5nIHRoaXMgY2FyZC4KIAotY29uZmlnIFNPVU5EX1NTQ0FQRQotCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgQW5zd2VyIFkgaWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGJhc2VkIG9uIHRoZSBFbnNvbmlxIFNvdW5kU2NhcGUKLQkgIGNoaXBzZXQuIFN1Y2ggY2FyZHMgYXJlIGJlaW5nIG1hbnVmYWN0dXJlZCBhdCBsZWFzdCBieSBFbnNvbmlxLCBTcGVhCi0JICBhbmQgUmV2ZWFsIChSZXZlYWwgbWFrZXMgYWxzbyBvdGhlciBjYXJkcykuCi0KLQkgIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCB5b3UgaGF2ZSB0byBhZGQKLQkgICJzc2NhcGU9PGlvPiw8aXJxPiw8ZG1hPiw8bXB1aW8+LDxtcHVpcnE+IiB0byB0aGUga2VybmVsIGNvbW1hbmQKLQkgIGxpbmUuCi0KLWNvbmZpZyBTT1VORF9HVVMKLQl0cmlzdGF0ZSAiR3JhdmlzIFVsdHJhc291bmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgaGVyZSBmb3IgYW55IHR5cGUgb2YgR3JhdmlzIFVsdHJhc291bmQgY2FyZCwgaW5jbHVkaW5nIHRoZSBHVVMKLQkgIG9yIEdVUyBNQVguICBTZWUgYWxzbyA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kPiBmb3IgbW9yZQotCSAgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBjYXJkIHdpdGggbW9kdWxlcy4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgImd1cz08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0KLWNvbmZpZyBTT1VORF9HVVMxNgotCWJvb2wgIjE2IGJpdCBzYW1wbGluZyBvcHRpb24gb2YgR1VTIChfTk9UXyBHVVMgTUFYKSIKLQlkZXBlbmRzIG9uIFNPVU5EX0dVUwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEdyYXZpcyBVbHN0cmFzb3VuZCAoR1VTKSBjYXJkcyAob3RoZXIgdGhhbiB0aGUgR1VTKSwKLQkgIHNhbXBsaW5nIGF0IDE2LWJpdCB3aWR0aC4KLQotY29uZmlnIFNPVU5EX0dVU01BWAotCWJvb2wgIkdVUyBNQVggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX0dVUwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEdyYXZpcyBVbHN0cmFzb3VuZCBNQVguCi0KIGNvbmZpZyBTT1VORF9WTUlESQogCXRyaXN0YXRlICJMb29wYmFjayBNSURJIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09VTkRfT1NTCkBAIC03NDIsNyArNTcyLDcgQEAKIAogY29uZmlnIFNPVU5EX05NMjU2CiAJdHJpc3RhdGUgIk5NMjU2QVYvTk0yNTZaWCBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKKwlkZXBlbmRzIG9uIFNPVU5EX09TUwogCWhlbHAKIAkgIFNheSBNIGhlcmUgdG8gaW5jbHVkZSBhdWRpbyBzdXBwb3J0IGZvciB0aGUgTmVvTWFnaWMgMjU2QVYvMjU2WlgKIAkgIGNoaXBzZXRzLiBUaGVzZSBhcmUgdGhlIGF1ZGlvIGNoaXBzZXRzIGZvdW5kIGluIHRoZSBTb255CkBAIC03NTIsMzUgKzU4Miw2IEBACiAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9OTTI1Nj4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAKLWNvbmZpZyBTT1VORF9NQUQxNgotCXRyaXN0YXRlICJPUFRpIE1BRDE2IGFuZC9vciBNb3phcnQgYmFzZWQgY2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCS0tLWhlbHAtLS0KLQkgIEFuc3dlciBZIGlmIHlvdXIgY2FyZCBoYXMgYSBNb3phcnQgKE9BSyBPVEktNjAxKSBvciBNQUQxNiAoT1BUaQotCSAgODJDOTI4IG9yIDgyQzkyOSBvciA4MkM5MzEpIGF1ZGlvIGludGVyZmFjZSBjaGlwLiBUaGVzZSBjaGlwcyBhcmUKLQkgIHF1aXRlIGNvbW1vbiBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgbWFueSBuby1uYW1lIGNhcmRzIGhhdmUgb25lIG9mCi0JICB0aGVtLiBJbiBhZGRpdGlvbiB0aGUgTUFEMTYgY2hpcCBpcyB1c2VkIGluIHNvbWUgY2FyZHMgbWFkZSBieSBrbm93bgotCSAgbWFudWZhY3R1cmVycyBzdWNoIGFzIFR1cnRsZSBCZWFjaCAoVHJvcGV6KSwgUmV2ZWFsIChzb21lIG1vZGVscykKLQkgIGFuZCBEaWFtb25kIChsYXRlc3Qgb25lcykuIE5vdGUgaG93ZXZlciB0aGF0IHRoZSBUcm9wZXogc291bmQgY2FyZHMKLQkgIGhhdmUgdGhlaXIgb3duIGRyaXZlcjsgaWYgeW91IGhhdmUgb25lIG9mIHRob3NlLCBzYXkgTiBoZXJlIGFuZCBZIG9yCi0JICBNIHRvICJGdWxsIHN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBXYXZlRnJvbnQiLCBiZWxvdy4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgIm1hZDE2PTxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxtcHVpbz4sPG1wdWlycT4iIHRvIHRoZQotCSAga2VybmVsIGNvbW1hbmQgbGluZS4KLQotCSAgU2VlIGFsc28gPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT3B0aT4gYW5kCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NQUQxNj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZwotCSAgdGhlc2UgY2FyZHMgdXAgYXMgbW9kdWxlcy4KLQotY29uZmlnIE1BRDE2X09MRENBUkQKLQlib29sICJTdXBwb3J0IE1JREkgaW4gb2xkZXIgTUFEMTYgYmFzZWQgY2FyZHMgKHJlcXVpcmVzIFNCKSIKLQlkZXBlbmRzIG9uIFNPVU5EX01BRDE2Ci0JaGVscAotCSAgQW5zd2VyIFkgKG9yIE0pIGlmIHlvdSBoYXZlIGFuIG9sZGVyIGNhcmQgYmFzZWQgb24gdGhlIEM5Mjggb3IKLQkgIE1vemFydCBjaGlwc2V0IGFuZCB5b3Ugd2FudCB0byBoYXZlIE1JREkgc3VwcG9ydC4gSWYgeW91IGVuYWJsZSB0aGlzCi0JICBvcHRpb24geW91IGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgU291bmQgQmxhc3Rlci4KLQogY29uZmlnIFNPVU5EX1BBUwogCXRyaXN0YXRlICJQcm9BdWRpb1NwZWN0cnVtIDE2IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT1VORF9PU1MKQEAgLTg3Myw1MyArNjc0LDkgQEAKIAkgIFlvdSBjYW4gc2F5IE0gaGVyZSB0byBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlOyB0aGUgbW9kdWxlIGlzCiAJICBjYWxsZWQgc2IuCiAKLWNvbmZpZyBTT1VORF9BV0UzMl9TWU5USAotCXRyaXN0YXRlICJBV0UzMiBzeW50aCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFNvdW5kIEJsYXN0ZXIgU0IzMiwgQVdFMzItUG5QLCBTQiBBV0U2NCBvcgotCSAgc2ltaWxhciBzb3VuZCBjYXJkLiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZT4sCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMj4gYW5kIHRoZSBTb3VuZGJsYXN0ZXItQVdFCi0JICBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbSA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+Ci0JICBmb3IgbW9yZSBpbmZvLgotCi1jb25maWcgU09VTkRfV0FWRUZST05UCi0JdHJpc3RhdGUgIkZ1bGwgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIFdhdmVGcm9udCAoVHJvcGV6IFBsdXMsIFRyb3BleiwgTWF1aSkgc3ludGgvc291bmRjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBtICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBBbnN3ZXIgWSBvciBNIGlmIHlvdSBoYXZlIGEgVHJvcGV6IFBsdXMsIFRyb3BleiBvciBNYXVpIHNvdW5kIGNhcmQKLQkgIGFuZCByZWFkIHRoZSBmaWxlcyA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9XYXZlZnJvbnQ+IGFuZAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvVHJvcGV6Kz4uCi0KLWNvbmZpZyBTT1VORF9NQVVJCi0JdHJpc3RhdGUgIkxpbWl0ZWQgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIFdhdmUgRnJvbnQgKE1hdWksIFRyb3Bleikgc3ludGhlc2l6ZXJzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVHVydGxlIEJlYWNoIFdhdmUgRnJvbnQsIE1hdWksIG9yIFRyb3BlegotCSAgc291bmQgY2FyZC4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgIm1hdWk9PGlvPiw8aXJxPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0KLWNvbmZpZyBNQVVJX0hBVkVfQk9PVAotCWJvb2wgIkhhdmUgT1NXRi5NT1QgZmlybXdhcmUgZmlsZSIKLQlkZXBlbmRzIG9uIFNPVU5EX01BVUk9eSAmJiAhU1RBTkRBTE9ORQotCWhlbHAKLQkgIFR1cnRsZSBCZWFjaCBNYXVpIGFuZCBUcm9wZXogc291bmQgY2FyZHMgaGF2ZSBhIG1pY3JvY29udHJvbGxlcgotCSAgd2hpY2ggbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdXNlLiBPU1dGLk1PVCBpcyBhIGZpbGUKLQkgIGRpc3RyaWJ1dGVkIHdpdGggdGhlIGNhcmQncyBET1MvV2luZG93cyBkcml2ZXJzLiBBbnN3ZXIgWSBpZiB5b3UKLQkgIGhhdmUgdGhpcyBmaWxlLgotCi1jb25maWcgTUFVSV9CT09UX0ZJTEUKLQlzdHJpbmcgIkZ1bGwgcGF0aG5hbWUgb2YgT1NXRi5NT1QgZmlybXdhcmUgZmlsZSIKLQlkZXBlbmRzIG9uIE1BVUlfSEFWRV9CT09UCi0JZGVmYXVsdCAiL2V0Yy9zb3VuZC9vc3dmLm1vdCIKLQloZWxwCi0JICBFbnRlciB0aGUgZnVsbCBwYXRobmFtZSBvZiB5b3VyIE9TV0YuTU9UIGZpbGUsIHN0YXJ0aW5nIGZyb20gLy4KLQogY29uZmlnIFNPVU5EX1lNMzgxMgogCXRyaXN0YXRlICJZYW1haGEgRk0gc3ludGhlc2l6ZXIgKFlNMzgxMi9PUEwtMykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCisJZGVwZW5kcyBvbiBTT1VORF9PU1MKIAktLS1oZWxwLS0tCiAJICBBbnN3ZXIgWSBpZiB5b3VyIGNhcmQgaGFzIGEgRk0gY2hpcCBtYWRlIGJ5IFlhbWFoYSAoT1BMMi9PUEwzL09QTDQpLgogCSAgQW5zd2VyaW5nIFkgaXMgdXN1YWxseSBhIHNhZmUgYW5kIHJlY29tbWVuZGVkIGNob2ljZSwgaG93ZXZlciBzb21lCkBAIC05MzMsMTggKzY5MCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKLWNvbmZpZyBTT1VORF9PUEwzU0ExCi0JdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMSBhdWRpbyBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgWWFtYWhhIE9QTDMtU0ExIHNvdW5kIGNoaXAsIHdoaWNoIGlzCi0JICB1c3VhbGx5IGJ1aWx0IGludG8gbW90aGVyYm9hcmRzLiBSZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBPiBmb3IgZGV0YWlscy4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAotCSAgIm9wbDNzYT08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8bXB1aW8+LDxtcHVpcnE+IiB0byB0aGUga2VybmVsCi0JICBjb21tYW5kIGxpbmUuCi0KIGNvbmZpZyBTT1VORF9PUEwzU0EyCiAJdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMiBhbmQgU0EzIGJhc2VkIFBuUCBjYXJkcyIKIAlkZXBlbmRzIG9uIFNPVU5EX09TUwpAQCAtOTU5LDE5ICs3MDQsNiBAQAogCSAgIm9wbDNzYTI9PGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc2lvPiw8bXB1aW8+IiB0byB0aGUga2VybmVsCiAJICBjb21tYW5kIGxpbmUuCiAKLWNvbmZpZyBTT1VORF9ZTUZQQ0kKLQl0cmlzdGF0ZSAiWWFtYWhhIFlNRjd4eCBQQ0kgYXVkaW8gKG5hdGl2ZSBtb2RlKSIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFlhbWFoYSBjYXJkcyBpbmNsdWRpbmcgdGhlIFlNRjcxMSwgWU1GNzE1LCBZTUY3MTgsCi0JICBZTUY3MTksIFlNRjcyNCwgV2F2ZWZvcmNlIDE5MlhHLCBhbmQgV2F2ZWZvcmNlIDE5MiBEaWdpdGFsLgotCi1jb25maWcgU09VTkRfWU1GUENJX0xFR0FDWQotCWJvb2wgIllhbWFoYSBQQ0kgbGVnYWN5IHBvcnRzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9ZTUZQQ0kKLQloZWxwCi0JICBTdXBwb3J0IGZvciBZTUY3eHggUENJIGNhcmRzIGVtdWxhdGluZyBhbiBNUDQwMS4KLQogY29uZmlnIFNPVU5EX1VBUlQ2ODUwCiAJdHJpc3RhdGUgIjY4NTAgVUFSVCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09VTkRfT1NTCkBAIC0xMTAxLDMwICs4MzMsNiBAQAogCXRyaXN0YXRlICJYcHJlc3NBdWRpbyBTb3VuZCBCbGFzdGVyIGVtdWxhdGlvbiIKIAlkZXBlbmRzIG9uIFNPVU5EX1NCCiAKLWNvbmZpZyBTT1VORF9BTEk1NDU1Ci0JdHJpc3RhdGUgIkFMaTU0NTUgYXVkaW8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0KLWNvbmZpZyBTT1VORF9GT1JURQotCXRyaXN0YXRlICJGb3J0ZU1lZGlhIEZNODAxIGRyaXZlciIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIEZvcnRlTWVkaWEgRk04MDEgUENJCi0JICBhdWRpbyBjb250cm9sbGVyIChBYml0IEFVMTAsIEdlbml1cyBTb3VuZCBNYWtlciwgSFAgV29ya3N0YXRpb24KLQkgIHp4MjAwMCwgYW5kIG90aGVycykuCi0KLWNvbmZpZyBTT1VORF9STUU5NlhYCi0JdHJpc3RhdGUgIlJNRSBIYW1tZXJmYWxsIChSTUU5NlhYKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgSGFtbWVyZmFsbCBvciBIYW1tZXJmYWxsIGxpZ2h0Ci0JICBtdWx0aWNoYW5uZWwgY2FyZCBmcm9tIFJNRS4gSWYgeW91IHdhbnQgdG8gYWNjZXNzIGFkdmFuY2VkCi0JICBmZWF0dXJlcyBvZiB0aGUgY2FyZCwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ybWU5Nnh4Pi4KLQotY29uZmlnIFNPVU5EX0FEMTk4MAotCXRyaXN0YXRlICJBRDE5ODAgZnJvbnQvYmFjayBzd2l0Y2ggcGx1Z2luIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgotCiBjb25maWcgU09VTkRfU0hfREFDX0FVRElPCiAJdHJpc3RhdGUgIlN1cGVySCBEQUMgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIENQVV9TSDMKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCA0OTc5NmJlLi5lMDRmYTQ5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC0yMDI2LDcgKzIwMjYsOCBAQAogCWlmIChpcnEgPiAwKQogCXsKIAkJZGV2Yy0+ZGV2X25vID0gbXlfZGV2OwotCQlpZiAocmVxdWVzdF9pcnEoZGV2Yy0+aXJxLCBhZGludHIsIDAsIGRldmMtPm5hbWUsICh2b2lkICopbXlfZGV2KSA8IDApCisJCWlmIChyZXF1ZXN0X2lycShkZXZjLT5pcnEsIGFkaW50ciwgMCwgZGV2Yy0+bmFtZSwKKwkJCQkodm9pZCAqKShsb25nKW15X2RldikgPCAwKQogCQl7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZDE4NDg6IFVuYWJsZSB0byBhbGxvY2F0ZSBJUlFcbiIpOwogCQkJLyogRG9uJ3QgZnJlZSBpdCBlaXRoZXIgdGhlbi4uICovCkBAIC0yMTc1LDcgKzIxNzYsNyBAQAogCQlpZiAoIXNoYXJlX2RtYSkKIAkJewogCQkJaWYgKGRldmMtPmlycSA+IDApIC8qIFRoZXJlIGlzIG5vIHBvaW50IGluIGZyZWVpbmcgaXJxLCBpZiBpdCB3YXNuJ3QgYWxsb2NhdGVkICovCi0JCQkJZnJlZV9pcnEoZGV2Yy0+aXJxLCAodm9pZCAqKWRldmMtPmRldl9ubyk7CisJCQkJZnJlZV9pcnEoZGV2Yy0+aXJxLCAodm9pZCAqKShsb25nKWRldmMtPmRldl9ubyk7CiAKIAkJCXNvdW5kX2ZyZWVfZG1hKGRtYV9wbGF5YmFjayk7CiAKQEAgLTIyMDQsNyArMjIwNSw3IEBACiAJdW5zaWduZWQgY2hhciBjOTMwX3N0YXQgPSAwOwogCWludCBjbnQgPSAwOwogCi0JZGV2ID0gKGludClkZXZfaWQ7CisJZGV2ID0gKGxvbmcpZGV2X2lkOwogCWRldmMgPSAoYWQxODQ4X2luZm8gKikgYXVkaW9fZGV2c1tkZXZdLT5kZXZjOwogCiBpbnRlcnJ1cHRfYWdhaW46CQkvKiBKdW1wIGJhY2sgaGVyZSBpZiBpbnQgc3RhdHVzIGRvZXNuJ3QgcmVzZXQgKi8KQEAgLTI5MDAsNyArMjkwMSw4IEBACiAJcmV0dXJuKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RldiAqYWQxODQ4X2luaXRfZ2VuZXJpYyhzdHJ1Y3QgcG5wX2NhcmQgKmJ1cywgc3RydWN0IGFkZHJlc3NfaW5mbyAqaHdfY29uZmlnLCBpbnQgc2xvdCkKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RldiBfX2luaXQgKmFkMTg0OF9pbml0X2dlbmVyaWMoc3RydWN0IHBucF9jYXJkICpidXMsCisJCQkJc3RydWN0IGFkZHJlc3NfaW5mbyAqaHdfY29uZmlnLCBpbnQgc2xvdCkKIHsKIAogCS8qIENvbmZpZ3VyZSBBdWRpbyBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4ODkuYyBiL3NvdW5kL29zcy9hZDE4ODkuYwppbmRleCA1NGRhYmY4Li5hNGNhNzU2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODg5LmMKKysrIGIvc291bmQvb3NzL2FkMTg4OS5jCkBAIC03NSw3ICs3NSw3IEBACiAKIAlEQkcoIlNldHRpbmcgV0FWIHJhdGUgdG8gJWRcbiIsIHJhdGUpOwogCWRldi0+c3RhdGVbQURfV0FWX1NUQVRFXS5kbWFidWYucmF0ZSA9IHJhdGU7Ci0JQUQxODg5X1dSSVRFVyhkZXYsIEFEX0RTV0FTLCByYXRlKTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfRFNfV0FTLCByYXRlKTsKIAogCS8qIEN5Y2xlIHRoZSBEQUMgdG8gZW5hYmxlIHRoZSBuZXcgcmF0ZSAqLwogCWFjOTdfY29kZWMtPmNvZGVjX3dyaXRlKGRldi0+YWM5N19jb2RlYywgQUM5N19QT1dFUl9DT05UUk9MLCAweDAyMDApOwpAQCAtODksMTQgKzg5LDE0IEBACiAKIAlEQkcoIlNldHRpbmcgV0FWIGZvcm1hdCB0byAweCV4XG4iLCBmbXQpOwogCi0JdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTV1NNQyk7CisJdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTX1dTTUMpOwogCWlmIChmbXQgJiBBRk1UX1MxNl9MRSkgewogCQkvL3RtcCB8PSAweDAxMDA7IC8qIHNldCBXQTE2ICovCiAJCXRtcCB8PSAweDAzMDA7IC8qIHNldCBXQTE2IHN0ZXJlbyAqLwogCX0gZWxzZSBpZiAoZm10ICYgQUZNVF9VOCkgewogCQl0bXAgJj0gfjB4MDEwMDsgLyogY2xlYXIgV0ExNiAqLwogCX0gCi0JQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMsIHRtcCk7CisJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DLCB0bXApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWQxODg5X3NldF9hZGNfZm10KGFkMTg4OV9kZXZfdCAqZGV2LCBpbnQgZm10KQpAQCAtMTA1LDEzICsxMDUsMTMgQEAKIAogCURCRygiU2V0dGluZyBBREMgZm9ybWF0IHRvIDB4JXhcbiIsIGZtdCk7CiAKLQl0bXAgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNSQU1DKTsKKwl0bXAgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfUkFNQyk7CiAJaWYgKGZtdCAmIEFGTVRfUzE2X0xFKSB7CiAJCXRtcCB8PSAweDAxMDA7IC8qIHNldCBXQTE2ICovCiAJfSBlbHNlIGlmIChmbXQgJiBBRk1UX1U4KSB7CiAJCXRtcCAmPSB+MHgwMTAwOyAvKiBjbGVhciBXQTE2ICovCiAJfSAKLQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQywgdG1wKTsKKwlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1JBTUMsIHRtcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkMTg4OV9zdGFydF93YXYoYWQxODg5X3N0YXRlX3QgKnN0YXRlKQpAQCAtMTQ1LDIxICsxNDUsMjEgQEAKIAkgICAgZG1hYnVmLT5yZF9wdHIsIGRtYWJ1Zi0+ZG1hX2xlbik7CiAKICAgICAgICAgLyogbG9hZCB1cCB0aGUgY3VycmVudCByZWdpc3RlciBzZXQgKi8KLQlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQVdBVkNDLCBjbnQpOwotCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BV0FWSUNDLCBjbnQpOwotCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BV0FWQ0EsIGRtYWJ1Zi0+ZG1hX2hhbmRsZSk7CisJQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFfV0FWQ0MsIGNudCk7CisJQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFfV0FWSUNDLCBjbnQpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX1dBVkNBLCBkbWFidWYtPmRtYV9oYW5kbGUpOwogCiAJLyogVE9ETzogZm9yIG5vdyB3ZSBsb2FkIHRoZSBiYXNlIHJlZ2lzdGVycyB3aXRoIHRoZSBzYW1lIHRoaW5nICovCi0JQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFXQVZCQywgY250KTsKLQlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQVdBVklCQywgY250KTsKLQlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQVdBVkJBLCBkbWFidWYtPmRtYV9oYW5kbGUpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX1dBVkJDLCBjbnQpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX1dBVklCQywgY250KTsKKwlBRDE4ODlfV1JJVEVMKGFkMTg4OV9kZXYsIEFEX0RNQV9XQVZCQSwgZG1hYnVmLT5kbWFfaGFuZGxlKTsKIAogCS8qIGFuZCB3ZSdyZSBvZmYgdG8gdGhlIHJhY2VzLi4uICovCi0JQUQxODg5X1dSSVRFTChhZDE4ODlfZGV2LCBBRF9ETUFDSFNTLCAweDgpOwotCXRtcCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMpOworCUFEMTg4OV9XUklURUwoYWQxODg5X2RldiwgQURfRE1BX0NIU1MsIDB4OCk7CisJdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTX1dTTUMpOwogCXRtcCB8PSAweDA0MDA7IC8qIHNldCBXQUVOICovCi0JQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMsIHRtcCk7Ci0JKHZvaWQpIEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMpOyAvKiBmbHVzaCBwb3N0ZWQgUENJIHdyaXRlICovCisJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DLCB0bXApOworCSh2b2lkKSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfV1NNQyk7IC8qIGZsdXNoIHBvc3RlZCBQQ0kgd3JpdGUgKi8KIAogCWRtYWJ1Zi0+ZW5hYmxlIHw9IERBQ19SVU5OSU5HOwogCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogCQl1MTYgdG1wOwogCQl1bnNpZ25lZCBsb25nIGNudCA9IGRtYWJ1Zi0+ZG1hX2xlbjsKIAotCQl0bXAgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNXU01DKTsKKwkJdG1wID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTX1dTTUMpOwogCQl0bXAgJj0gfjB4MDQwMDsgLyogY2xlYXIgV0FFTiAqLwotCQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTV1NNQywgdG1wKTsKLQkJKHZvaWQpIEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1dTTUMpOyAvKiBmbHVzaCBwb3N0ZWQgUENJIHdyaXRlICovCisJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNfV1NNQywgdG1wKTsKKwkJKHZvaWQpIEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DKTsgLyogZmx1c2ggcG9zdGVkIFBDSSB3cml0ZSAqLwogCQlwY2lfdW5tYXBfc2luZ2xlKGFkMTg4OV9kZXYtPnBjaSwgZG1hYnVmLT5kbWFfaGFuZGxlLCAKIAkJCQljbnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCkBAIC0yMTEsNyArMjExLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwogCQotCXRtcCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU1JBTUMpOworCXRtcCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU19SQU1DKTsKIAlpZiAoc3RhcnQpIHsKIAkJc3RhdGUtPmRtYWJ1Zi5lbmFibGUgfD0gQURDX1JVTk5JTkc7CiAJCXRtcCB8PSAweDAwMDQ7IC8qIHNldCBBREVOICovCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJc3RhdGUtPmRtYWJ1Zi5lbmFibGUgJj0gfkFEQ19SVU5OSU5HOwogCQl0bXAgJj0gfjB4MDAwNDsgLyogY2xlYXIgQURFTiAqLwogCX0KLQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQywgdG1wKTsKKwlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1JBTUMsIHRtcCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMzAxLDUzICszMDEsNTMgQEAKIAlpbnQgbGVuLCBpOwogCWFkMTg4OV9kZXZfdCAqZGV2ID0gZGF0YTsKIAlhZDE4ODlfcmVnX3QgcmVnc1tdID0gewotCQl7ICJXU01DIiwgQURfRFNXU01DLCAxNiB9LAotCQl7ICJSQU1DIiwgQURfRFNSQU1DLCAxNiB9LAotCQl7ICJXQURBIiwgQURfRFNXQURBLCAxNiB9LAotCQl7ICJTWURBIiwgQURfRFNTWURBLCAxNiB9LAotCQl7ICJXQVMiLCBBRF9EU1dBUywgMTYgfSwKLQkJeyAiUkVTIiwgQURfRFNSRVMsIDE2IH0sCi0JCXsgIkNDUyIsIEFEX0RTQ0NTLCAxNiB9LAotCQl7ICJBRENCQSIsIEFEX0RNQUFEQ0JBLCAzMiB9LAotCQl7ICJBRENDQSIsIEFEX0RNQUFEQ0NBLCAzMiB9LAotCQl7ICJBRENCQyIsIEFEX0RNQUFEQ0JDLCAzMiB9LAotCQl7ICJBRENDQyIsIEFEX0RNQUFEQ0NDLCAzMiB9LAotCQl7ICJBRENJQkMiLCBBRF9ETUFBRENJQkMsIDMyIH0sCi0JCXsgIkFEQ0lDQyIsIEFEX0RNQUFEQ0lDQywgMzIgfSwKLQkJeyAiQURDQ1RSTCIsIEFEX0RNQUFEQ0NUUkwsIDE2IH0sCi0JCXsgIldBVkJBIiwgQURfRE1BV0FWQkEsIDMyIH0sCi0JCXsgIldBVkNBIiwgQURfRE1BV0FWQ0EsIDMyIH0sCi0JCXsgIldBVkJDIiwgQURfRE1BV0FWQkMsIDMyIH0sCi0JCXsgIldBVkNDIiwgQURfRE1BV0FWQ0MsIDMyIH0sCi0JCXsgIldBVklCQyIsIEFEX0RNQVdBVklCQywgMzIgfSwKLQkJeyAiV0FWSUNDIiwgQURfRE1BV0FWSUNDLCAzMiB9LAotCQl7ICJXQVZDVFJMIiwgQURfRE1BV0FWQ1RSTCwgMTYgfSwKLQkJeyAiRElTUiIsIEFEX0RNQURJU1IsIDMyIH0sCi0JCXsgIkNIU1MiLCBBRF9ETUFDSFNTLCAzMiB9LAotCQl7ICJJUEMiLCBBRF9HUElPSVBDLCAxNiB9LAotCQl7ICJPUCIsIEFEX0dQSU9PUCwgMTYgfSwKLQkJeyAiSVAiLCBBRF9HUElPSVAsIDE2IH0sCi0JCXsgIkFDSUMiLCBBRF9BQ0lDLCAxNiB9LAotCQl7ICJBQzk3X1JFU0VUIiwgMHgxMDAgKyBBQzk3X1JFU0VULCAxNiB9LAotCQl7ICJBQzk3X01BU1RFUl9WT0xfU1RFUkVPIiwgMHgxMDAgKyBBQzk3X01BU1RFUl9WT0xfU1RFUkVPLCAxNiB9LAotCQl7ICJBQzk3X0hFQURQSE9ORV9WT0wiLCAweDEwMCArIEFDOTdfSEVBRFBIT05FX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19NQVNURVJfVk9MX01PTk8iLCAweDEwMCArIEFDOTdfTUFTVEVSX1ZPTF9NT05PLCAxNiB9LAotCQl7ICJBQzk3X01BU1RFUl9UT05FIiwgMHgxMDAgKyBBQzk3X01BU1RFUl9UT05FLCAxNiB9LAotCQl7ICJBQzk3X1BDQkVFUF9WT0wiLCAweDEwMCArIEFDOTdfUENCRUVQX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19QSE9ORV9WT0wiLCAweDEwMCArIEFDOTdfUEhPTkVfVk9MLCAxNiB9LAotCQl7ICJBQzk3X01JQ19WT0wiLCAweDEwMCArIEFDOTdfTUlDX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19MSU5FSU5fVk9MIiwgMHgxMDAgKyBBQzk3X0xJTkVJTl9WT0wsIDE2IH0sCi0JCXsgIkFDOTdfQ0RfVk9MIiwgMHgxMDAgKyBBQzk3X0NEX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19WSURFT19WT0wiLCAweDEwMCArIEFDOTdfVklERU9fVk9MLCAxNiB9LAotCQl7ICJBQzk3X0FVWF9WT0wiLCAweDEwMCArIEFDOTdfQVVYX1ZPTCwgMTYgfSwKLQkJeyAiQUM5N19QQ01PVVRfVk9MIiwgMHgxMDAgKyBBQzk3X1BDTU9VVF9WT0wsIDE2IH0sCi0JCXsgIkFDOTdfUkVDT1JEX1NFTEVDVCIsIDB4MTAwICsgQUM5N19SRUNPUkRfU0VMRUNULCAxNiB9LAotCQl7ICJBQzk3X1JFQ09SRF9HQUlOIiwgMHgxMDAgKyBBQzk3X1JFQ09SRF9HQUlOLCAxNiB9LAotCQl7ICJBQzk3X1JFQ09SRF9HQUlOX01JQyIsIDB4MTAwICsgQUM5N19SRUNPUkRfR0FJTl9NSUMsIDE2IH0sCi0JCXsgIkFDOTdfR0VORVJBTF9QVVJQT1NFIiwgMHgxMDAgKyBBQzk3X0dFTkVSQUxfUFVSUE9TRSwgMTYgfSwKLQkJeyAiQUM5N18zRF9DT05UUk9MIiwgMHgxMDAgKyBBQzk3XzNEX0NPTlRST0wsIDE2IH0sCi0JCXsgIkFDOTdfTU9ERU1fUkFURSIsIDB4MTAwICsgQUM5N19NT0RFTV9SQVRFLCAxNiB9LAotCQl7ICJBQzk3X1BPV0VSX0NPTlRST0wiLCAweDEwMCArIEFDOTdfUE9XRVJfQ09OVFJPTCwgMTYgfSwKKwkJeyAiV1NNQyIsIEFEX0RTX1dTTUMsIDE2IH0sCisJCXsgIlJBTUMiLCBBRF9EU19SQU1DLCAxNiB9LAorCQl7ICJXQURBIiwgQURfRFNfV0FEQSwgMTYgfSwKKwkJeyAiU1lEQSIsIEFEX0RTX1NZREEsIDE2IH0sCisJCXsgIldBUyIsIEFEX0RTX1dBUywgMTYgfSwKKwkJeyAiUkVTIiwgQURfRFNfUkVTLCAxNiB9LAorCQl7ICJDQ1MiLCBBRF9EU19DQ1MsIDE2IH0sCisJCXsgIkFEQ0JBIiwgQURfRE1BX0FEQ0JBLCAzMiB9LAorCQl7ICJBRENDQSIsIEFEX0RNQV9BRENDQSwgMzIgfSwKKwkJeyAiQURDQkMiLCBBRF9ETUFfQURDQkMsIDMyIH0sCisJCXsgIkFEQ0NDIiwgQURfRE1BX0FEQ0NDLCAzMiB9LAorCQl7ICJBRENJQkMiLCBBRF9ETUFfQURDSUJDLCAzMiB9LAorCQl7ICJBRENJQ0MiLCBBRF9ETUFfQURDSUNDLCAzMiB9LAorCQl7ICJBRENDVFJMIiwgQURfRE1BX0FEQ0NUUkwsIDE2IH0sCisJCXsgIldBVkJBIiwgQURfRE1BX1dBVkJBLCAzMiB9LAorCQl7ICJXQVZDQSIsIEFEX0RNQV9XQVZDQSwgMzIgfSwKKwkJeyAiV0FWQkMiLCBBRF9ETUFfV0FWQkMsIDMyIH0sCisJCXsgIldBVkNDIiwgQURfRE1BX1dBVkNDLCAzMiB9LAorCQl7ICJXQVZJQkMiLCBBRF9ETUFfV0FWSUJDLCAzMiB9LAorCQl7ICJXQVZJQ0MiLCBBRF9ETUFfV0FWSUNDLCAzMiB9LAorCQl7ICJXQVZDVFJMIiwgQURfRE1BX1dBVkNUUkwsIDE2IH0sCisJCXsgIkRJU1IiLCBBRF9ETUFfRElTUiwgMzIgfSwKKwkJeyAiQ0hTUyIsIEFEX0RNQV9DSFNTLCAzMiB9LAorCQl7ICJJUEMiLCBBRF9HUElPX0lQQywgMTYgfSwKKwkJeyAiT1AiLCBBRF9HUElPX09QLCAxNiB9LAorCQl7ICJJUCIsIEFEX0dQSU9fSVAsIDE2IH0sCisJCXsgIkFDSUMiLCBBRF9BQzk3X0FDSUMsIDE2IH0sCisJCXsgIkFDOTdfUkVTRVQiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1JFU0VULCAxNiB9LAorCQl7ICJBQzk3X01BU1RFUl9WT0xfU1RFUkVPIiwgQURfQUM5N19CQVNFICsgQUM5N19NQVNURVJfVk9MX1NURVJFTywgMTYgfSwKKwkJeyAiQUM5N19IRUFEUEhPTkVfVk9MIiwgQURfQUM5N19CQVNFICsgQUM5N19IRUFEUEhPTkVfVk9MLCAxNiB9LAorCQl7ICJBQzk3X01BU1RFUl9WT0xfTU9OTyIsIEFEX0FDOTdfQkFTRSArIEFDOTdfTUFTVEVSX1ZPTF9NT05PLCAxNiB9LAorCQl7ICJBQzk3X01BU1RFUl9UT05FIiwgQURfQUM5N19CQVNFICsgQUM5N19NQVNURVJfVE9ORSwgMTYgfSwKKwkJeyAiQUM5N19QQ0JFRVBfVk9MIiwgQURfQUM5N19CQVNFICsgQUM5N19QQ0JFRVBfVk9MLCAxNiB9LAorCQl7ICJBQzk3X1BIT05FX1ZPTCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfUEhPTkVfVk9MLCAxNiB9LAorCQl7ICJBQzk3X01JQ19WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X01JQ19WT0wsIDE2IH0sCisJCXsgIkFDOTdfTElORUlOX1ZPTCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfTElORUlOX1ZPTCwgMTYgfSwKKwkJeyAiQUM5N19DRF9WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X0NEX1ZPTCwgMTYgfSwKKwkJeyAiQUM5N19WSURFT19WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1ZJREVPX1ZPTCwgMTYgfSwKKwkJeyAiQUM5N19BVVhfVk9MIiwgQURfQUM5N19CQVNFICsgQUM5N19BVVhfVk9MLCAxNiB9LAorCQl7ICJBQzk3X1BDTU9VVF9WT0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1BDTU9VVF9WT0wsIDE2IH0sCisJCXsgIkFDOTdfUkVDT1JEX1NFTEVDVCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfUkVDT1JEX1NFTEVDVCwgMTYgfSwKKwkJeyAiQUM5N19SRUNPUkRfR0FJTiIsIEFEX0FDOTdfQkFTRSArIEFDOTdfUkVDT1JEX0dBSU4sIDE2IH0sCisJCXsgIkFDOTdfUkVDT1JEX0dBSU5fTUlDIiwgQURfQUM5N19CQVNFICsgQUM5N19SRUNPUkRfR0FJTl9NSUMsIDE2IH0sCisJCXsgIkFDOTdfR0VORVJBTF9QVVJQT1NFIiwgQURfQUM5N19CQVNFICsgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDE2IH0sCisJCXsgIkFDOTdfM0RfQ09OVFJPTCIsIEFEX0FDOTdfQkFTRSArIEFDOTdfM0RfQ09OVFJPTCwgMTYgfSwKKwkJeyAiQUM5N19NT0RFTV9SQVRFIiwgQURfQUM5N19CQVNFICsgQUM5N19NT0RFTV9SQVRFLCAxNiB9LAorCQl7ICJBQzk3X1BPV0VSX0NPTlRST0wiLCBBRF9BQzk3X0JBU0UgKyBBQzk3X1BPV0VSX0NPTlRST0wsIDE2IH0sCiAJCXsgTlVMTCB9CiAJfTsKIApAQCAtNDAwLDkgKzQwMCw5IEBACiAJfQogCQogCWlmIChkbWFidWYtPmVuYWJsZSAmIERBQ19SVU5OSU5HKQotCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShBRDE4ODlfUkVBREwoc3RhdGUtPmNhcmQsIEFEX0RNQVdBVkJBKSk7CisJCW9mZnNldCA9IGxlMzJfdG9fY3B1KEFEMTg4OV9SRUFETChzdGF0ZS0+Y2FyZCwgQURfRE1BX1dBVkJBKSk7CiAJZWxzZQotCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShBRDE4ODlfUkVBREwoc3RhdGUtPmNhcmQsIEFEX0RNQUFEQ0JBKSk7CisJCW9mZnNldCA9IGxlMzJfdG9fY3B1KEFEMTg4OV9SRUFETChzdGF0ZS0+Y2FyZCwgQURfRE1BX0FEQ0JBKSk7CiAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnVzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpb2Zmc2V0KSAtICh1bnNpZ25lZCBsb25nKWRtYWJ1Zi0+cmF3YnVmOwogfQpAQCAtNjM5LDkgKzYzOSw5IEBACiAJCWlmICh2YWwgPiA1NDAwICYmIHZhbCA8IDQ4MDAwKQogCQl7CiAJCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCQkJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU1dBUywgdmFsKTsKKwkJCQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1dBUywgdmFsKTsKIAkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQkJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNSRVMsIHZhbCk7CisJCQkJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19SRVMsIHZhbCk7CiAJCX0KIAkJcmV0dXJuIDA7CiAKQEAgLTY0OSwyMiArNjQ5LDIyIEBACiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQl2YWwgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNXU01DKTsKKwkJCXZhbCA9IEFEMTg4OV9SRUFEVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DKTsKIAkJCWlmICh2YWwpIHsKIAkJCQl2YWwgfD0gMHgwMjAwOyAgLyogc2V0IFdBU1QgKi8KIAkJCX0gZWxzZSB7CiAJCQkJdmFsICY9IH4weDAyMDA7IC8qIGNsZWFyIFdBU1QgKi8KIAkJCX0KLQkJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNXU01DLCB2YWwpOworCQkJQUQxODg5X1dSSVRFVyhhZDE4ODlfZGV2LCBBRF9EU19XU01DLCB2YWwpOwogCQl9CiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJdmFsID0gQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQyk7CisJCQl2YWwgPSBBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfUkFNQyk7CiAJCQlpZiAodmFsKSB7CiAJCQkJdmFsIHw9IDB4MDAwMjsgIC8qIHNldCBBRFNUICovCiAJCQl9IGVsc2UgewogCQkJCXZhbCAmPSB+MHgwMDAyOyAvKiBjbGVhciBBRFNUICovCiAJCQl9Ci0JCQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTUkFNQywgdmFsKTsKKwkJCUFEMTg4OV9XUklURVcoYWQxODg5X2RldiwgQURfRFNfUkFNQywgdmFsKTsKIAkJfQogCiAJCXJldHVybiAwOwpAQCAtNzM5LDcgKzczOSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTT1VORF9QQ01fUkVBRF9SQVRFOgotCQlyZXR1cm4gcHV0X3VzZXIoQUQxODg5X1JFQURXKGFkMTg4OV9kZXYsIEFEX0RTV0FTKSwgcCk7CisJCXJldHVybiBwdXRfdXNlcihBRDE4ODlfUkVBRFcoYWQxODg5X2RldiwgQURfRFNfV0FTKSwgcCk7CiAKIAljYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgogCWNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKQEAgLTc2OSw3ICs3NjksNyBAQAogCiAJYWQxODg5X3NldF93YXZfcmF0ZShhZDE4ODlfZGV2LCA0ODAwMCk7CiAJYWQxODg5X3NldF93YXZfZm10KGFkMTg4OV9kZXYsIEFGTVRfUzE2X0xFKTsKLQlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTV0FEQSwgMHgwNDA0KTsgLyogYXR0ZW51YXRpb24gKi8KKwlBRDE4ODlfV1JJVEVXKGFkMTg4OV9kZXYsIEFEX0RTX1dBREEsIDB4MDQwNCk7IC8qIGF0dGVudWF0aW9uICovCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCkBAIC04MjYsMTUgKzgyNiwxNSBAQAogewogCWFkMTg4OV9kZXZfdCAqZGV2ID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwogCi0JLy9EQkcoIldyaXRpbmcgMHgleCB0byAweCVseFxuIiwgdmFsLCBkZXYtPnJlZ2Jhc2UgKyAweDEwMCArIHJlZyk7Ci0JQUQxODg5X1dSSVRFVyhkZXYsIDB4MTAwICsgcmVnLCB2YWwpOworCS8vREJHKCJXcml0aW5nIDB4JXggdG8gMHglbHhcbiIsIHZhbCwgZGV2LT5yZWdiYXNlICsgQURfQUM5N19CQVNFICsgcmVnKTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfQUM5N19CQVNFICsgcmVnLCB2YWwpOwogfQogCiBzdGF0aWMgdTE2IGFkMTg4OV9jb2RlY19yZWFkKHN0cnVjdCBhYzk3X2NvZGVjICphYzk3LCB1OCByZWcpCiB7CiAJYWQxODg5X2Rldl90ICpkZXYgPSBhYzk3LT5wcml2YXRlX2RhdGE7Ci0JLy9EQkcoIlJlYWRpbmcgZnJvbSAweCVseFxuIiwgZGV2LT5yZWdiYXNlICsgMHgxMDAgKyByZWcpOwotCXJldHVybiBBRDE4ODlfUkVBRFcoZGV2LCAweDEwMCArIHJlZyk7CisJLy9EQkcoIlJlYWRpbmcgZnJvbSAweCVseFxuIiwgZGV2LT5yZWdiYXNlICsgQURfQUM5N19CQVNFICsgcmVnKTsKKwlyZXR1cm4gQUQxODg5X1JFQURXKGRldiwgQURfQUM5N19CQVNFICsgcmVnKTsKIH0JCiAKIHN0YXRpYyBpbnQgYWQxODg5X2FjOTdfaW5pdChhZDE4ODlfZGV2X3QgKmRldiwgaW50IGlkKQpAQCAtODgzLDI0ICs4ODMsMjQgQEAKIAlpbnQgcmV0cnkgPSAyMDA7CiAJYWQxODg5X2Rldl90ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKIAotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9EU0NDUywgMHg4MDAwKTsgLyogdHVybiBvbiBjbG9jayAqLwotCUFEMTg4OV9SRUFEVyhkZXYsIEFEX0RTQ0NTKTsgCisJQUQxODg5X1dSSVRFVyhkZXYsIEFEX0RTX0NDUywgMHg4MDAwKTsgLyogdHVybiBvbiBjbG9jayAqLworCUFEMTg4OV9SRUFEVyhkZXYsIEFEX0RTX0NDUyk7CiAKIAlXQUlUXzEwTVMoKTsKIAotCXN0YXQgPSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQ0lDKTsKKwlzdGF0ID0gQUQxODg5X1JFQURXKGRldiwgQURfQUM5N19BQ0lDKTsKIAlzdGF0IHw9IDB4MDAwMjsJCQkJLyogUmVzZXQgRGlzYWJsZSAqLwotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9BQ0lDLCBzdGF0KTsKLQkodm9pZCkgQUQxODg5X1JFQURXKGRldiwgQURfQUNJQyk7CS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworCUFEMTg4OV9XUklURVcoZGV2LCBBRF9BQzk3X0FDSUMsIHN0YXQpOworCSh2b2lkKSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQzk3X0FDSUMpOwkvKiBmbHVzaCBwb3N0ZWQgd3JpdGUgKi8KIAogCXVkZWxheSgxMCk7CiAKLQlzdGF0ID0gQUQxODg5X1JFQURXKGRldiwgQURfQUNJQyk7CisJc3RhdCA9IEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDOTdfQUNJQyk7CiAJc3RhdCB8PSAweDAwMDE7CQkJCS8qIEludGVyZmFjZSBFbmFibGUgKi8KLQlBRDE4ODlfV1JJVEVXKGRldiwgQURfQUNJQywgc3RhdCk7CisJQUQxODg5X1dSSVRFVyhkZXYsIEFEX0FDOTdfQUNJQywgc3RhdCk7CiAKIAlkbyB7Ci0JCWlmIChBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQ0lDKSAmIDB4ODAwMCkJLyogUmVhZHkgKi8KKwkJaWYgKEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDOTdfQUNJQykgJiAweDgwMDApCS8qIFJlYWR5ICovCiAJCQlicmVhazsKIAkJV0FJVF8xME1TKCk7CiAJCXJldHJ5LS07CkBAIC05MDgsMTYgKzkwOCwxNiBAQAogCiAJaWYgKCFyZXRyeSkgewogCQlwcmludGsoS0VSTl9FUlIgImFkMTg4OV9hY2xpbmtfcmVzZXQ6IGNvZGVjIGlzIG5vdCByZWFkeSBbMHgleF1cbiIsCi0JCQkgICAgQUQxODg5X1JFQURXKGRldiwgQURfQUNJQykpOworCQkJICAgIEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDOTdfQUNJQykpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qIFRPRE8gcmVzZXQgQUM5NyBjb2RlYyAqLwogCS8qIFRPRE8gc2V0IHdhdmUvYWRjIHBjaSBjdHJsIHN0YXR1cyAqLwogCi0Jc3RhdCA9IEFEMTg4OV9SRUFEVyhkZXYsIEFEX0FDSUMpOworCXN0YXQgPSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9BQzk3X0FDSUMpOwogCXN0YXQgfD0gMHgwMDA0OwkJCQkvKiBBdWRpbyBTdHJlYW0gT3V0cHV0IEVuYWJsZSAqLwotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9BQ0lDLCBzdGF0KTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfQUM5N19BQ0lDLCBzdGF0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTM1LDEwICs5MzUsMTAgQEAKIAl1MzIgc3RhdDsKIAlhZDE4ODlfZGV2X3QgKmRldiA9IChhZDE4ODlfZGV2X3QgKilkZXZfaWQ7CiAKLQlzdGF0ID0gQUQxODg5X1JFQURMKGRldiwgQURfRE1BRElTUik7CisJc3RhdCA9IEFEMTg4OV9SRUFETChkZXYsIEFEX0RNQV9ESVNSKTsKIAogCS8qIGNsZWFyIElTUiAqLwotCUFEMTg4OV9XUklURUwoZGV2LCBBRF9ETUFESVNSLCBzdGF0KTsKKwlBRDE4ODlfV1JJVEVMKGRldiwgQURfRE1BX0RJU1IsIHN0YXQpOwogCiAJaWYgKHN0YXQgJiAweDgpIHsJCS8qIFdBVkkgKi8KIAkJREJHKCJXQVYgaW50ZXJydXB0XG4iKTsKQEAgLTk2NCwxNSArOTY0LDE1IEBACiAJdTMyIHRtcDMyOwogCiAJLyogbWFrZSBzdXJlIHRoZSBpbnRlcnJ1cHQgYml0cyBhcmUgc2V0dXAgdGhlIHdheSB3ZSB3YW50ICovCi0JdG1wMzIgPSBBRDE4ODlfUkVBREwoZGV2LCBBRF9ETUFXQVZDVFJMKTsKKwl0bXAzMiA9IEFEMTg4OV9SRUFETChkZXYsIEFEX0RNQV9XQVZDVFJMKTsKIAl0bXAzMiAmPSB+MHhmZjsgLyogZmxhdCBkbWEsIG5vIHNnLCBtYXNrIG91dCB0aGUgaW50ciBiaXRzICovCiAJdG1wMzIgfD0gMHg2OyAgLyogaW50ciBvbiBjb3VudCwgbG9vcCAqLwotCUFEMTg4OV9XUklURUwoZGV2LCBBRF9ETUFXQVZDVFJMLCB0bXAzMik7CisJQUQxODg5X1dSSVRFTChkZXYsIEFEX0RNQV9XQVZDVFJMLCB0bXAzMik7CiAKIAkvKiB1bm11dGUuLi4gKi8KLQl0bXAxNiA9IEFEMTg4OV9SRUFEVyhkZXYsIEFEX0RTV0FEQSk7CisJdG1wMTYgPSBBRDE4ODlfUkVBRFcoZGV2LCBBRF9EU19XQURBKTsKIAl0bXAxNiAmPSB+MHg4MDgwOwotCUFEMTg4OV9XUklURVcoZGV2LCBBRF9EU1dBREEsIHRtcDE2KTsKKwlBRDE4ODlfV1JJVEVXKGRldiwgQURfRFNfV0FEQSwgdG1wMTYpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDE4ODlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLQlkZXYtPnJlZ2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoYmFyLCBBRF9EU0lPTUVNU0laRSk7CisJZGV2LT5yZWdiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGJhciwgQURfRFNfSU9NRU1TSVpFKTsKIAlpZiAoIWRldi0+cmVnYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgREVWTkFNRSAiOiB1bmFibGUgdG8gcmVtYXAgaW9tZW1cbiIpOwogCQlnb3RvIG91dDI7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODg5LmggYi9zb3VuZC9vc3MvYWQxODg5LmgKaW5kZXggODYxYjMyMS4uMDk5MTM3NiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTg4OS5oCisrKyBiL3NvdW5kL29zcy9hZDE4ODkuaApAQCAtMSw1NyArMSw1OCBAQAogI2lmbmRlZiBfQUQxODg5X0hfCiAjZGVmaW5lIF9BRDE4ODlfSF8KIAotI2RlZmluZSBBRF9EU1dTTUMJMHgwMAkvKiBETUEgaW5wdXQgd2F2ZS9zeW4gbWl4ZXIgY29udHJvbCAqLwotI2RlZmluZSBBRF9EU1JBTUMJMHgwMgkvKiBETUEgb3V0cHV0IHJlc2FtcC9BREMgbWl4ZXIgY29udHJvbCAqLwotI2RlZmluZSBBRF9EU1dBREEJMHgwNAkvKiBETUEgaW5wdXQgd2F2ZSBhdHRlbnVhdGlvbiAqLwotI2RlZmluZSBBRF9EU1NZREEJMHgwNgkvKiBETUEgaW5wdXQgc3luIGF0dGVudHVhdGlvbiAqLwotI2RlZmluZSBBRF9EU1dBUwkweDA4CS8qIHdhdmUgaW5wdXQgc2FtcGxlIHJhdGUgKi8KLSNkZWZpbmUgQURfRFNSRVMJMHgwYQkvKiByZXNhbXBsZXIgb3V0cHV0IHNhbXBsZSByYXRlICovCi0jZGVmaW5lIEFEX0RTQ0NTCTB4MGMJLyogY2hpcCBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBBRF9EU19XU01DCTB4MDAJLyogRE1BIGlucHV0IHdhdmUvc3luIG1peGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgQURfRFNfUkFNQwkweDAyCS8qIERNQSBvdXRwdXQgcmVzYW1wL0FEQyBtaXhlciBjb250cm9sICovCisjZGVmaW5lIEFEX0RTX1dBREEJMHgwNAkvKiBETUEgaW5wdXQgd2F2ZSBhdHRlbnVhdGlvbiAqLworI2RlZmluZSBBRF9EU19TWURBCTB4MDYJLyogRE1BIGlucHV0IHN5biBhdHRlbnR1YXRpb24gKi8KKyNkZWZpbmUgQURfRFNfV0FTCTB4MDgJLyogd2F2ZSBpbnB1dCBzYW1wbGUgcmF0ZSAqLworI2RlZmluZSBBRF9EU19SRVMJMHgwYQkvKiByZXNhbXBsZXIgb3V0cHV0IHNhbXBsZSByYXRlICovCisjZGVmaW5lIEFEX0RTX0NDUwkweDBjCS8qIGNoaXAgY29udHJvbC9zdGF0dXMgKi8KIAotI2RlZmluZSBBRF9ETUFSRVNCQQkweDQwCS8qIFJFUyBiYXNlIGFkZHIgKi8KLSNkZWZpbmUgQURfRE1BUkVTQ0EJMHg0NAkvKiBSRVMgY3VycmVudCBhZGRyICovCi0jZGVmaW5lIEFEX0RNQVJFU0JDCTB4NDgJLyogUkVTIGJhc2UgY250ICovCi0jZGVmaW5lIEFEX0RNQVJFU0NDCTB4NGMJLyogUkVTIGN1cnJlbnQgY291bnQgKi8KLSNkZWZpbmUgQURfRE1BQURDQkEJMHg1MAkvKiBBREMgKi8KLSNkZWZpbmUgQURfRE1BQURDQ0EJMHg1NAotI2RlZmluZSBBRF9ETUFBRENCQwkweDU4Ci0jZGVmaW5lIEFEX0RNQUFEQ0NDCTB4NWMKLSNkZWZpbmUgQURfRE1BU1lOQkEJMHg2MAkvKiBTWU4gKi8KLSNkZWZpbmUgQURfRE1BU1lOQ0EJMHg2NAotI2RlZmluZSBBRF9ETUFTWU5CQwkweDY4Ci0jZGVmaW5lIEFEX0RNQVNZTkNDCTB4NmMKLSNkZWZpbmUgQURfRE1BV0FWQkEJMHg3MAkvKiBXQVYgKi8KLSNkZWZpbmUgQURfRE1BV0FWQ0EJMHg3NAotI2RlZmluZSBBRF9ETUFXQVZCQwkweDc4Ci0jZGVmaW5lIEFEX0RNQVdBVkNDCTB4N2MKLSNkZWZpbmUgQURfRE1BUkVTSUNDCTB4ODAJLyogUkVTIGludGVycnVwdCBjdXJyZW50IGNvdW50ICovCi0jZGVmaW5lIEFEX0RNQVJFU0lCQwkweDg0CS8qIFJFUyBpbnRlcnJ1cHQgYmFzZSBjb3VudCAqLwotI2RlZmluZSBBRF9ETUFBRENJQ0MJMHg4OAkvKiBBREMgaW50ZXJydXB0IGN1cnJlbnQgY291bnQgKi8KLSNkZWZpbmUgQURfRE1BQURDSUJDCTB4OGMJLyogQURDIGludGVycnVwdCBiYXNlIGNvdW50ICovCi0jZGVmaW5lIEFEX0RNQVNZTklDQwkweDkwCS8qIFNZTiBpbnRlcnJ1cHQgY3VycmVudCBjb3VudCAqLwotI2RlZmluZSBBRF9ETUFTWU5JQkMJMHg5NAkvKiBTWU4gaW50ZXJydXB0IGJhc2UgY291bnQgKi8KLSNkZWZpbmUgQURfRE1BV0FWSUNDCTB4OTgJLyogV0FWIGludGVycnVwdCBjdXJyZW50IGNvdW50ICovCi0jZGVmaW5lIEFEX0RNQVdBVklCQwkweDljCS8qIFdBViBpbnRlcnJ1cHQgYmFzZSBjb3VudCAqLwotI2RlZmluZSBBRF9ETUFSRVNDVFJMCTB4YTAJLyogUkVTIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFBRENDVFJMCTB4YTgJLyogQURDIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFTWU5DVFJMCTB4YjAJLyogU1lOIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFXQVZDVFJMCTB4YjgJLyogV0FWIFBDSSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFESVNSCTB4YzAJLyogUENJIERNQSBpbnRyIHN0YXR1cyAqLwotI2RlZmluZSBBRF9ETUFDSFNTCTB4YzQJLyogUENJIERNQSBjaGFubmVsIHN0b3Agc3RhdHVzICovCisjZGVmaW5lIEFEX0RNQV9SRVNCQQkweDQwCS8qIFJFUyBiYXNlIGFkZHIgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0NBCTB4NDQJLyogUkVTIGN1cnJlbnQgYWRkciAqLworI2RlZmluZSBBRF9ETUFfUkVTQkMJMHg0OAkvKiBSRVMgYmFzZSBjbnQgKi8KKyNkZWZpbmUgQURfRE1BX1JFU0NDCTB4NGMJLyogUkVTIGN1cnJlbnQgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX0FEQ0JBCTB4NTAJLyogQURDICovCisjZGVmaW5lIEFEX0RNQV9BRENDQQkweDU0CisjZGVmaW5lIEFEX0RNQV9BRENCQwkweDU4CisjZGVmaW5lIEFEX0RNQV9BRENDQwkweDVjCisjZGVmaW5lIEFEX0RNQV9TWU5CQQkweDYwCS8qIFNZTiAqLworI2RlZmluZSBBRF9ETUFfU1lOQ0EJMHg2NAorI2RlZmluZSBBRF9ETUFfU1lOQkMJMHg2OAorI2RlZmluZSBBRF9ETUFfU1lOQ0MJMHg2YworI2RlZmluZSBBRF9ETUFfV0FWQkEJMHg3MAkvKiBXQVYgKi8KKyNkZWZpbmUgQURfRE1BX1dBVkNBCTB4NzQKKyNkZWZpbmUgQURfRE1BX1dBVkJDCTB4NzgKKyNkZWZpbmUgQURfRE1BX1dBVkNDCTB4N2MKKyNkZWZpbmUgQURfRE1BX1JFU0lDQwkweDgwCS8qIFJFUyBpbnRlcnJ1cHQgY3VycmVudCBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfUkVTSUJDCTB4ODQJLyogUkVTIGludGVycnVwdCBiYXNlIGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9BRENJQ0MJMHg4OAkvKiBBREMgaW50ZXJydXB0IGN1cnJlbnQgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX0FEQ0lCQwkweDhjCS8qIEFEQyBpbnRlcnJ1cHQgYmFzZSBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfU1lOSUNDCTB4OTAJLyogU1lOIGludGVycnVwdCBjdXJyZW50IGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9TWU5JQkMJMHg5NAkvKiBTWU4gaW50ZXJydXB0IGJhc2UgY291bnQgKi8KKyNkZWZpbmUgQURfRE1BX1dBVklDQwkweDk4CS8qIFdBViBpbnRlcnJ1cHQgY3VycmVudCBjb3VudCAqLworI2RlZmluZSBBRF9ETUFfV0FWSUJDCTB4OWMJLyogV0FWIGludGVycnVwdCBiYXNlIGNvdW50ICovCisjZGVmaW5lIEFEX0RNQV9SRVNDVFJMCTB4YTAJLyogUkVTIFBDSSBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBBRF9ETUFfQURDQ1RSTAkweGE4CS8qIEFEQyBQQ0kgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgQURfRE1BX1NZTkNUUkwJMHhiMAkvKiBTWU4gUENJIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIEFEX0RNQV9XQVZDVFJMCTB4YjgJLyogV0FWIFBDSSBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBBRF9ETUFfRElTUgkweGMwCS8qIFBDSSBETUEgaW50ciBzdGF0dXMgKi8KKyNkZWZpbmUgQURfRE1BX0NIU1MJMHhjNAkvKiBQQ0kgRE1BIGNoYW5uZWwgc3RvcCBzdGF0dXMgKi8KIAotI2RlZmluZSBBRF9HUElPSVBDCTB4YzgJLyogSU8gcG9ydCBjdHJsICovCi0jZGVmaW5lIEFEX0dQSU9PUAkweGNhCS8qIElPIG91dHB1dCBzdGF0dXMgKi8KLSNkZWZpbmUgQURfR1BJT0lQCTB4Y2MJLyogSU8gaW5wdXQgc3RhdHVzICovCisjZGVmaW5lIEFEX0dQSU9fSVBDCTB4YzgJLyogSU8gcG9ydCBjdHJsICovCisjZGVmaW5lIEFEX0dQSU9fT1AJMHhjYQkvKiBJTyBvdXRwdXQgc3RhdHVzICovCisjZGVmaW5lIEFEX0dQSU9fSVAJMHhjYwkvKiBJTyBpbnB1dCBzdGF0dXMgKi8KIAogLyogQUM5NyByZWdpc3RlcnMsIDB4MTAwIC0gMHgxN2Y7IHNlZSBhYzk3LmggKi8KLSNkZWZpbmUgQURfQUNJQwkJMHgxODAJLyogQUMgTGluayBpbnRlcmZhY2UgY3RybCAqLworI2RlZmluZSBBRF9BQzk3X0JBU0UgICAgMHgxMDAgICAvKiBhYzk3IGJhc2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURfQUM5N19BQ0lDCTB4MTgwCS8qIEFDIExpbmsgaW50ZXJmYWNlIGN0cmwgKi8KIAogLyogT1BMMzsgQkFSMSAqLwotI2RlZmluZSBBRF9PUExNMEFTCTB4MDAJLyogTXVzaWMwIGFkZHJlc3Mvc3RhdHVzICovCi0jZGVmaW5lIEFEX09QTE0wREFUQQkweDAxCS8qIE11c2ljMCBkYXRhICovCi0jZGVmaW5lIEFEX09QTE0xQQkweDAyCS8qIE11c2ljMSBhZGRyZXNzICovCi0jZGVmaW5lIEFEX09QTE0xREFUQQkweDAzCS8qIE11c2ljMSBkYXRhICovCisjZGVmaW5lIEFEX09QTF9NMEFTCTB4MDAJLyogTXVzaWMwIGFkZHJlc3Mvc3RhdHVzICovCisjZGVmaW5lIEFEX09QTF9NMERBVEEJMHgwMQkvKiBNdXNpYzAgZGF0YSAqLworI2RlZmluZSBBRF9PUExfTTFBCTB4MDIJLyogTXVzaWMxIGFkZHJlc3MgKi8KKyNkZWZpbmUgQURfT1BMX00xREFUQQkweDAzCS8qIE11c2ljMSBkYXRhICovCiAvKiAweDA0LTB4MGYgcmVzZXJ2ZWQgKi8KIAogLyogTUlESTsgQkFSMiAqLwpAQCAtNTksOSArNjAsOSBAQAogI2RlZmluZSBBRF9NSVNDCQkweDAxCS8qIE1JREkgc3RhdHVzL2NtZCAqLwogLyogMHgwMi0weGZmIHJlc2VydmVkICovCiAKLSNkZWZpbmUgQURfRFNJT01FTVNJWkUJNTEyCi0jZGVmaW5lIEFEX09QTE1FTVNJWkUJMTYKLSNkZWZpbmUgQURfTUlESU1FTVNJWkUJMTYKKyNkZWZpbmUgQURfRFNfSU9NRU1TSVpFCTUxMgorI2RlZmluZSBBRF9PUExfTUVNU0laRQkxNgorI2RlZmluZSBBRF9NSURJX01FTVNJWkUJMTYKIAogI2RlZmluZSBBRF9XQVZfU1RBVEUJMAogI2RlZmluZSBBRF9BRENfU1RBVEUJMQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfY29tbW9uLmMKaW5kZXggODEzMTU5OS4uODgyYWU5OCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvdGFzX2NvbW1vbi5jCkBAIC0xOTUsOCArMTk1LDggQEAKIAogCXByaW50ayhLRVJOX0lORk8gInRhcyBkcml2ZXIgWyVzXSlcbiIsIGRyaXZlcl9uYW1lKTsKIAotI2lmbmRlZiBDT05GSUdfSTJDX0tFWVdFU1QKLQlyZXF1ZXN0X21vZHVsZSgiaTJjLWtleXdlc3QiKTsKKyNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQworCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZgogCXRhc19ub2RlID0gZmluZF9kZXZpY2VzKCJkZXEiKTsKIAlpZiAodGFzX25vZGUgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYyBiL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYwppbmRleCAwY2Q0NGE2Li4zNzIxYzU4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMKKysrIGIvc291bmQvb3NzL2VtdTEwazEvbWFpbi5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJod2FjY2Vzcy5oIgogI2luY2x1ZGUgIjgwMTAuaCIKQEAgLTExOSw3ICsxMjAsNyBAQAogIAogCiAvKiB0aGUgZW11MTBrMSBfc2VlbXNfIHRvIG9ubHkgc3VwcG9ydHMgMjkgYml0ICg1MTJNaUIpIGJpdCBidXMgbWFzdGVyICovCi0jZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgICAgICAgICAgICAgICAgMHgxZmZmZmZmZgkvKiBETUEgYnVmZmVyIG1hc2sgZm9yIHBjaV9hbGxvY19jb25zaXN0ICovCisjZGVmaW5lIEVNVTEwSzFfRE1BX01BU0sgRE1BXzI5QklUX01BU0sJLyogRE1BIGJ1ZmZlciBtYXNrIGZvciBwY2lfYWxsb2NfY29uc2lzdCAqLwogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DUkVBVElWRSAweDExMDIKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9ubTI1Nl9hdWRpby5jIGIvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKaW5kZXggN2RlMDc5Yi4uNmU2NjJhYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKQEAgLTk2MCw3ICs5NjAsNyBAQAogCiAKIC8qIEluc3RhbGxzIHRoZSBBQzk3IG1peGVyIGludG8gQ0FSRC4gICovCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIG5tMjU2X2luc3RhbGxfbWl4ZXIgKHN0cnVjdCBubTI1Nl9pbmZvICpjYXJkKQogewogICAgIGludCBtaXhlcjsKQEAgLTk5NSw3ICs5OTUsNyBAQAogICogUkFNLgogICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19kZXZpbml0CiBubTI1Nl9wZWVrX2Zvcl9zaWcgKHN0cnVjdCBubTI1Nl9pbmZvICpjYXJkKQogewogICAgIHUzMiBwb3J0MW9mZnNldCAKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAgICAgY2FyZC0+cGxheWluZyAgPSAwOwogICAgIGNhcmQtPnJlY29yZGluZyA9IDA7CiAgICAgY2FyZC0+cmV2ID0gcmV2OwotCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKyAgICBzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CiAKICAgICAvKiBJbml0IHRoZSBtZW1vcnkgcG9ydCBpbmZvLiAgKi8KICAgICBmb3IgKHggPSAwOyB4IDwgMjsgeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDFlMmUxOTMuLmEyMDgxODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0xNSw2ICsxNSwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWQxODg5LgogCitjb25maWcgU05EX0FMUzMwMAorICAgICAgICB0cmlzdGF0ZSAiQXZhbmNlIExvZ2ljIEFMUzMwMC9BTFMzMDArIgorICAgICAgICBkZXBlbmRzIG9uIFNORAorICAgICAgICBzZWxlY3QgU05EX1BDTQorICAgICAgICBzZWxlY3QgU05EX0FDOTdfQ09ERUMKKyAgICAgICAgc2VsZWN0IFNORF9PUEwzX0xJQgorICAgICAgICBoZWxwCisgICAgICAgICAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBdmFuY2UgTG9naWMgQUxTMzAwL0FMUzMwMCsKKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKyAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxzMzAwCisKIGNvbmZpZyBTTkRfQUxTNDAwMAogCXRyaXN0YXRlICJBdmFuY2UgTG9naWMgQUxTNDAwMCIKIAlkZXBlbmRzIG9uIFNORCAmJiBJU0FfRE1BX0FQSQpAQCAtMTk1LDggKzIwNyw5IEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0Nnh4LgogCiBjb25maWcgU05EX0NTNDZYWF9ORVdfRFNQCi0JYm9vbCAiQ2lycnVzIExvZ2ljIChTb3VuZCBGdXNpb24pIE5ldyBEU1Agc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNORF9DUzQ2WFggJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiQ2lycnVzIExvZ2ljIChTb3VuZCBGdXNpb24pIE5ldyBEU1Agc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNORF9DUzQ2WFgKKyAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byB1c2UgYSBuZXcgRFNQIGltYWdlIGZvciBTUERJRiBhbmQgZHVhbCBjb2RlY3MuCiAKQEAgLTQ2Niw2ICs0NzksMTkgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1wY3hoci4KIAorY29uZmlnIFNORF9SSVBUSURFCisJdHJpc3RhdGUgIkNvbmV4YW50IFJpcHRpZGUiCisJZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIEZXX0xPQURFUgorCXNlbGVjdCBTTkRfT1BMM19MSUIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDb25leGFudCBSaXB0aWRlIGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1yaXB0aWRlCisKIGNvbmZpZyBTTkRfUk1FMzIKIAl0cmlzdGF0ZSAiUk1FIERpZ2kzMiwgMzIvOCwgMzIgUFJPIgogCWRlcGVuZHMgb24gU05ECmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvTWFrZWZpbGUgYi9zb3VuZC9wY2kvTWFrZWZpbGUKaW5kZXggYTZjM2NkNS4uY2JhNTEwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKICMKIAogc25kLWFkMTg4OS1vYmpzIDo9IGFkMTg4OS5vCitzbmQtYWxzMzAwLW9ianMgOj0gYWxzMzAwLm8KIHNuZC1hbHM0MDAwLW9ianMgOj0gYWxzNDAwMC5vCiBzbmQtYXRpaXhwLW9ianMgOj0gYXRpaXhwLm8KIHNuZC1hdGlpeHAtbW9kZW0tb2JqcyA6PSBhdGlpeHBfbW9kZW0ubwpAQCAtMjcsNiArMjgsNyBAQAogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX0FEMTg4OSkgKz0gc25kLWFkMTg4OS5vCitvYmotJChDT05GSUdfU05EX0FMUzMwMCkgKz0gc25kLWFsczMwMC5vCiBvYmotJChDT05GSUdfU05EX0FMUzQwMDApICs9IHNuZC1hbHM0MDAwLm8KIG9iai0kKENPTkZJR19TTkRfQVRJSVhQKSArPSBzbmQtYXRpaXhwLm8KIG9iai0kKENPTkZJR19TTkRfQVRJSVhQX01PREVNKSArPSBzbmQtYXRpaXhwLW1vZGVtLm8KQEAgLTYyLDYgKzY0LDcgQEAKIAltaXhhcnQvIFwKIAlubTI1Ni8gXAogCXBjeGhyLyBcCisJcmlwdGlkZS8gXAogCXJtZTk2NTIvIFwKIAl0cmlkZW50LyBcCiAJeW1mcGNpLyBcCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggMjc4MzE5Yi4uZDA1MjAwNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiB7IDB4NTQ1ODRlMjAsIDB4ZmZmZmZmZmYsICJUTEMzMjBBRDl4QyIsCU5VTEwsCQlOVUxMIH0sCiB7IDB4NTY0OTQxNjEsIDB4ZmZmZmZmZmYsICJWSUExNjEyQSIsCQlOVUxMLAkJTlVMTCB9LCAvLyBtb2RpZmllZCBJQ0UxMjMyIHdpdGggUy9QRElGCiB7IDB4NTY0OTQxNzAsIDB4ZmZmZmZmZmYsICJWSUExNjE3QSIsCQlwYXRjaF92dDE2MTdhLAlOVUxMIH0sIC8vIG1vZGlmaWVkIFZUMTYxNiB3aXRoIFMvUERJRgoreyAweDU2NDk0MTgyLCAweGZmZmZmZmZmLCAiVklBMTYxOCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDU3NDU0MzAxLCAweGZmZmZmZmZmLCAiVzgzOTcxRCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDU3NGQ0YzAwLCAweGZmZmZmZmZmLCAiV005NzAxQSIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDU3NGQ0QzAzLCAweGZmZmZmZmZmLCAiV005NzAzLFdNOTcwNyxXTTk3MDgsV005NzE3IiwgcGF0Y2hfd29sZnNvbjAzLCBOVUxMfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBjNmM4MzMzLi5lZWNlMWM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC0xMDUyLDcgKzEwNTEsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FkMTg4OV9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWQxODg5X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU5BTE9HX0RFVklDRVMsIFBDSV9ERVZJQ0VfSURfQUQxODg5SlMpIH0sCiAJeyAwLCB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBmYzkyYjY4Li5lMmRiYzIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yNzksNyArMjc5LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hbGlfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsaV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTU0NTEpLCAwLCAwLCAwfSwKIAl7MCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFiMDhhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC0wLDAgKzEsODY3IEBACisvKgorICogIGFsczMwMC5jIC0gZHJpdmVyIGZvciBBdmFuY2UgTG9naWMgQUxTMzAwL0FMUzMwMCsgc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgQXNoIFdpbGxpcyA8YXNod2lsbGlzQHByb2dyYW1tZXIubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIFRPRE8KKyAqICA0IGNoYW5uZWwgcGxheWJhY2sgZm9yIEFMUzMwMCsKKyAqICBnYW1lcG9ydAorICogIG1wdTQwMQorICogIG9wbDMKKyAqCisgKiAgTk9URVMKKyAqICBUaGUgQkxPQ0tfQ09VTlRFUiByZWdpc3RlcnMgZm9yIHRoZSBBTFMzMDAoKykgcmV0dXJuIGEgZmlndXJlIHJlbGF0ZWQgdG8KKyAqICB0aGUgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgcGVyaW9kLCBOT1QgdGhlIHdob2xlIGJ1ZmZlci4gSXQgaXMgaW1wb3J0YW50CisgKiAgdG8ga25vdyB3aGljaCBwZXJpb2Qgd2UgYXJlIGluIHNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgcG9pbnRlci4KKyAqICBUaGlzIGlzIHdoeSB3ZSBhbHdheXMgdXNlIDIgcGVyaW9kcy4gV2UgY2FuIHRoZW4gdXNlIGEgZmxpcC1mbG9wIHZhcmlhYmxlCisgKiAgdG8ga2VlcCB0cmFjayBvZiB3aGF0IHBlcmlvZCB3ZSBhcmUgaW4uCisgKi8KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8c291bmQvb3BsMy5oPgorCisvKiBzbmRfYWxzMzAwX3NldF9pcnFfZmxhZyAqLworI2RlZmluZSBJUlFfRElTQUJMRQkJMAorI2RlZmluZSBJUlFfRU5BQkxFCQkxCisKKy8qIEkvTyBwb3J0IGxheW91dCAqLworI2RlZmluZSBBQzk3X0FDQ0VTUwkJMHgwMAorI2RlZmluZSBBQzk3X1JFQUQJCTB4MDQKKyNkZWZpbmUgQUM5N19TVEFUVVMJCTB4MDYKKyNkZWZpbmUgICBBQzk3X0RBVEFfQVZBSUwJCSgxPDw2KQorI2RlZmluZSAgIEFDOTdfQlVTWQkJCSgxPDw3KQorI2RlZmluZSBBTFMzMDBfSVJRX1NUQVRVUwkweDA3CQkvKiBBTFMzMDAgT25seSAqLworI2RlZmluZSAgIElSUV9QTEFZQkFDSwkJCSgxPDwzKQorI2RlZmluZSAgIElSUV9DQVBUVVJFCQkJKDE8PDIpCisjZGVmaW5lIEdDUl9EQVRBCQkweDA4CisjZGVmaW5lIEdDUl9JTkRFWAkJMHgwQworI2RlZmluZSBBTFMzMDBQX0RSQU1fSVJRX1NUQVRVUwkweDBECQkvKiBBTFMzMDArIE9ubHkgKi8KKyNkZWZpbmUgTVBVX0lSUV9TVEFUVVMJCTB4MEUJCS8qIEFMUzMwMCBSZXYuIEUrLCBBTFMzMDArICovCisjZGVmaW5lIEFMUzMwMFBfSVJRX1NUQVRVUwkweDBGCQkvKiBBTFMzMDArIE9ubHkgKi8KKworLyogR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBQTEFZQkFDS19TVEFSVAkJMHg4MAorI2RlZmluZSBQTEFZQkFDS19FTkQJCTB4ODEKKyNkZWZpbmUgUExBWUJBQ0tfQ09OVFJPTAkweDgyCisjZGVmaW5lICAgVFJBTlNGRVJfU1RBUlQJCSgxPDwxNikKKyNkZWZpbmUgICBGSUZPX1BBVVNFCQkJKDE8PDE3KQorI2RlZmluZSBSRUNPUkRfU1RBUlQJCTB4ODMKKyNkZWZpbmUgUkVDT1JEX0VORAkJMHg4NAorI2RlZmluZSBSRUNPUkRfQ09OVFJPTAkJMHg4NQorI2RlZmluZSBEUkFNX1dSSVRFX0NPTlRST0wJMHg4QgorI2RlZmluZSAgIFdSSVRFX1RSQU5TX1NUQVJUCQkoMTw8MTYpCisjZGVmaW5lICAgRFJBTV9NT0RFXzIJCQkoMTw8MTcpCisjZGVmaW5lIE1JU0NfQ09OVFJPTAkJMHg4QworI2RlZmluZSAgIElSUV9TRVRfQklUCQkJKDE8PDE1KQorI2RlZmluZSAgIFZNVVRFX05PUk1BTAkJCSgxPDwyMCkKKyNkZWZpbmUgICBNTVVURV9OT1JNQUwJCQkoMTw8MjEpCisjZGVmaW5lIE1VU19WT0NfVk9MCQkweDhFCisjZGVmaW5lIFBMQVlCQUNLX0JMT0NLX0NPVU5URVIJMHg5QQorI2RlZmluZSBSRUNPUkRfQkxPQ0tfQ09VTlRFUgkweDlCCisKKyNkZWZpbmUgREVCVUdfQ0FMTFMJMQorI2RlZmluZSBERUJVR19QTEFZX1JFQwkxCisKKyNpZiBERUJVR19DQUxMUworI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxzKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpIHByaW50ayhLRVJOX0VSUiAiLS0+ICVzXG4iLCBfX0ZVTkNUSU9OX18pCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fRVJSICI8LS0gJXNcbiIsIF9fRlVOQ1RJT05fXykKKyNlbHNlCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKQorI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpCisjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCkKKyNlbmRpZgorCisjaWYgREVCVUdfUExBWV9SRUMKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgkJCisKK2VudW0ge0RFVklDRV9BTFMzMDAsIERFVklDRV9BTFMzMDBfUExVU307CisKK01PRFVMRV9BVVRIT1IoIkFzaCBXaWxsaXMgPGFzaHdpbGxpc0Bwcm9ncmFtbWVyLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXZhbmNlIExvZ2ljIEFMUzMwMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7QXZhbmNlIExvZ2ljLEFMUzMwMH0se0F2YW5jZSBMb2dpYyxBTFMzMDArfX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworc3RydWN0IHNuZF9hbHMzMDAgeworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKwlzcGlubG9ja190IHJlZ19sb2NrOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfc3Vic3RyZWFtOworCisJc3RydWN0IHNuZF9hYzk3ICphYzk3OworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKworCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQ7CisKKwlpbnQgaXJxOworCisJaW50IGNoaXBfdHlwZTsgLyogQUxTMzAwIG9yIEFMUzMwMCsgKi8KKworCWNoYXIgcmV2aXNpb247CQorfTsKKworc3RydWN0IHNuZF9hbHMzMDBfc3Vic3RyZWFtX2RhdGEgeworCWludCBwZXJpb2RfZmxpcGZsb3A7CisJaW50IGNvbnRyb2xfcmVnaXN0ZXI7CisJaW50IGJsb2NrX2NvdW50ZXJfcmVnaXN0ZXI7Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsczMwMF9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgMHg0MDA1LCAweDAzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9BTFMzMDAgfSwKKwl7IDB4NDAwNSwgMHgwMzA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfQUxTMzAwX1BMVVMgfSwKKwl7IDAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfYWxzMzAwX2lkcyk7CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNuZF9hbHMzMDBfZ2NyX3JlYWQodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBzaG9ydCByZWcpCit7CisJb3V0YihyZWcsIHBvcnQrR0NSX0lOREVYKTsKKwlyZXR1cm4gaW5sKHBvcnQrR0NSX0RBVEEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2FsczMwMF9nY3Jfd3JpdGUodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkJdW5zaWduZWQgc2hvcnQgcmVnLCB1MzIgdmFsKQoreworCW91dGIocmVnLCBwb3J0K0dDUl9JTkRFWCk7CisJb3V0bCh2YWwsIHBvcnQrR0NSX0RBVEEpOworfQorCisvKiBFbmFibGUvRGlzYWJsZSBJbnRlcnJ1cHRzICovCitzdGF0aWMgdm9pZCBzbmRfYWxzMzAwX3NldF9pcnFfZmxhZyhzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCwgaW50IGNtZCkKK3sKKwl1MzIgdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCBNSVNDX0NPTlRST0wpOworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisKKwkvKiBib29sZWFuIFhPUiBjaGVjaywgc2luY2Ugb2xkIHZzLiBuZXcgaGFyZHdhcmUgaGF2ZQorCSAgIGRpcmVjdGx5IHJldmVyc2VkIGJpdCBzZXR0aW5nIGZvciBFTkFCTEUgYW5kIERJU0FCTEUuCisJICAgQUxTMzAwKyBhY3RzIGxpa2UgbmV3ZXIgdmVyc2lvbnMgb2YgQUxTMzAwICovCisJaWYgKCgoY2hpcC0+cmV2aXNpb24gPiA1IHx8IGNoaXAtPmNoaXBfdHlwZSA9PSBERVZJQ0VfQUxTMzAwX1BMVVMpIF4KKwkJCQkJCShjbWQgPT0gSVJRX0VOQUJMRSkpID09IDApCisJCXRtcCB8PSBJUlFfU0VUX0JJVDsKKwllbHNlCisJCXRtcCAmPSB+SVJRX1NFVF9CSVQ7CisJc25kX2FsczMwMF9nY3Jfd3JpdGUoY2hpcC0+cG9ydCwgTUlTQ19DT05UUk9MLCB0bXApOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9mcmVlKHN0cnVjdCBzbmRfYWxzMzAwICpjaGlwKQoreworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJc25kX2FsczMwMF9zZXRfaXJxX2ZsYWcoY2hpcCwgSVJRX0RJU0FCTEUpOworCWlmIChjaGlwLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKwlrZnJlZShjaGlwKTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJcmV0dXJuIHNuZF9hbHMzMDBfZnJlZShjaGlwKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9hbHMzMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXU4IHN0YXR1czsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKworCXN0YXR1cyA9IGluYihjaGlwLT5wb3J0K0FMUzMwMF9JUlFfU1RBVFVTKTsKKwlpZiAoIXN0YXR1cykgLyogc2hhcmVkIElSUSwgZm9yIGRpZmZlcmVudCBkZXZpY2U/PyBFeGl0IEFTQVAhICovCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIEFDSyBldmVyeXRoaW5nIEFTQVAgKi8KKwlvdXRiKHN0YXR1cywgY2hpcC0+cG9ydCtBTFMzMDBfSVJRX1NUQVRVUyk7CisJaWYgKHN0YXR1cyAmIElSUV9QTEFZQkFDSykgeworCQlpZiAoY2hpcC0+cGNtICYmIGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSkgeworCQkJZGF0YSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YS0+cGVyaW9kX2ZsaXBmbG9wIF49IDE7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7CisJCQlzbmRfYWxzMzAwX2RiZ3BsYXkoIklSUV9QTEFZQkFDS1xuIik7CisJCX0KKwl9CisJaWYgKHN0YXR1cyAmIElSUV9DQVBUVVJFKSB7CisJCWlmIChjaGlwLT5wY20gJiYgY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pIHsKKwkJCWRhdGEgPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YS0+cGVyaW9kX2ZsaXBmbG9wIF49IDE7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwkJCXNuZF9hbHMzMDBfZGJncGxheSgiSVJRX0NBUFRVUkVcbiIpOworCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNuZF9hbHMzMDBwbHVzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1OCBnZW5lcmFsLCBtcHUsIGRyYW07CisJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBkZXZfaWQ7CisJc3RydWN0IHNuZF9hbHMzMDBfc3Vic3RyZWFtX2RhdGEgKmRhdGE7CisJCisJZ2VuZXJhbCA9IGluYihjaGlwLT5wb3J0K0FMUzMwMFBfSVJRX1NUQVRVUyk7CisJbXB1ID0gaW5iKGNoaXAtPnBvcnQrTVBVX0lSUV9TVEFUVVMpOworCWRyYW0gPSBpbmIoY2hpcC0+cG9ydCtBTFMzMDBQX0RSQU1fSVJRX1NUQVRVUyk7CisKKwkvKiBzaGFyZWQgSVJRLCBmb3IgZGlmZmVyZW50IGRldmljZT8/IEV4aXQgQVNBUCEgKi8KKwlpZiAoKGdlbmVyYWwgPT0gMCkgJiYgKChtcHUgJiAweDgwKSA9PSAwKSAmJiAoKGRyYW0gJiAweDAxKSA9PSAwKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKGdlbmVyYWwgJiBJUlFfUExBWUJBQ0spIHsKKwkJaWYgKGNoaXAtPnBjbSAmJiBjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pIHsKKwkJCW91dGIoSVJRX1BMQVlCQUNLLCBjaGlwLT5wb3J0K0FMUzMwMFBfSVJRX1NUQVRVUyk7CisJCQlkYXRhID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJCQlkYXRhLT5wZXJpb2RfZmxpcGZsb3AgXj0gMTsKKwkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKTsKKwkJCXNuZF9hbHMzMDBfZGJncGxheSgiSVJRX1BMQVlCQUNLXG4iKTsKKwkJfQorCX0KKwlpZiAoZ2VuZXJhbCAmIElSUV9DQVBUVVJFKSB7CisJCWlmIChjaGlwLT5wY20gJiYgY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pIHsKKwkJCW91dGIoSVJRX0NBUFRVUkUsIGNoaXAtPnBvcnQrQUxTMzAwUF9JUlFfU1RBVFVTKTsKKwkJCWRhdGEgPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YS0+cGVyaW9kX2ZsaXBmbG9wIF49IDE7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwkJCXNuZF9hbHMzMDBfZGJncGxheSgiSVJRX0NBUFRVUkVcbiIpOworCQl9CisJfQorCS8qIEZJWE1FOiBBY2sgb3RoZXIgaW50ZXJydXB0IHR5cGVzLiBOb3QgaW1wb3J0YW50IHJpZ2h0IG5vdyBhcworCSAqIHRob3NlIG90aGVyIGRldmljZXMgYXJlbid0IGVuYWJsZWQuICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2FsczMwMF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCXNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfYWxzMzAwX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJCQkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCWludCBpOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoKGluYihjaGlwLT5wb3J0K0FDOTdfU1RBVFVTKSAmIChBQzk3X0JVU1kpKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCW91dGwoKHJlZyA8PCAyNCkgfCAoMSA8PCAzMSksIGNoaXAtPnBvcnQrQUM5N19BQ0NFU1MpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoKGluYihjaGlwLT5wb3J0K0FDOTdfU1RBVFVTKSAmIChBQzk3X0RBVEFfQVZBSUwpKSAhPSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXJldHVybiBpbncoY2hpcC0+cG9ydCtBQzk3X1JFQUQpOworfQorCitzdGF0aWMgdm9pZCBzbmRfYWxzMzAwX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQkJCXVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCWludCBpOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoKGluYihjaGlwLT5wb3J0K0FDOTdfU1RBVFVTKSAmIChBQzk3X0JVU1kpKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCW91dGwoKHJlZyA8PCAyNCkgfCB2YWwsIGNoaXAtPnBvcnQrQUM5N19BQ0NFU1MpOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfYWM5NyhzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfYnVzICpidXM7CisJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTc7CisJaW50IGVycjsKKwlzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgb3BzID0geworCQkud3JpdGUgPSBzbmRfYWxzMzAwX2FjOTdfd3JpdGUsCisJCS5yZWFkID0gc25kX2FsczMwMF9hYzk3X3JlYWQsCisJfTsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cykpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCW1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKwlhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiBzbmRfYWM5N19taXhlcihidXMsICZhYzk3LCAmY2hpcC0+YWM5Nyk7Cit9CisKKy8qIGhhcmR3YXJlIGRlZmluaXRpb24KKyAqCisgKiBJbiBBQzk3IG1vZGUsIHdlIGFsd2F5cyB1c2UgNDhrLzE2Yml0L3N0ZXJlby4KKyAqIEFueSByZXF1ZXN0IHRvIGNoYW5nZSBkYXRhIHR5cGUgaXMgaWdub3JlZCBieQorICogdGhlIGNhcmQgd2hlbiBpdCBpcyBydW5uaW5nIG91dHNpZGUgb2YgbGVnYWN5CisgKiBtb2RlLgorICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2FsczMwMF9wbGF5YmFja19odyA9Cit7CisJLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzE2LAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPQkJNDgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMiwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQk2NCAqIDEwMjQsCisJLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKKwkucGVyaW9kX2J5dGVzX21heCA9CTMyICogMTAyNCwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfYWxzMzAwX2NhcHR1cmVfaHcgPQoreworCS5pbmZvID0JCQkoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1MxNiwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfNDgwMDAsCisJLnJhdGVfbWluID0JCTQ4MDAwLAorCS5yYXRlX21heCA9CQk0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0JCTIsCisJLmNoYW5uZWxzX21heCA9CQkyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0JNjQgKiAxMDI0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCisJLnBlcmlvZF9ieXRlc19tYXggPQkzMiAqIDEwMjQsCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTIsCit9OworCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfYWxzMzAwX3N1YnN0cmVhbV9kYXRhICpkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX2FsczMwMF9wbGF5YmFja19odzsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCWRhdGEtPmNvbnRyb2xfcmVnaXN0ZXIgPSBQTEFZQkFDS19DT05UUk9MOworCWRhdGEtPmJsb2NrX2NvdW50ZXJfcmVnaXN0ZXIgPSBQTEFZQkFDS19CTE9DS19DT1VOVEVSOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKworCWRhdGEgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCWtmcmVlKGRhdGEpOworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IE5VTEw7CisJc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPmh3ID0gc25kX2FsczMwMF9jYXB0dXJlX2h3OworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJZGF0YS0+Y29udHJvbF9yZWdpc3RlciA9IFJFQ09SRF9DT05UUk9MOworCWRhdGEtPmJsb2NrX2NvdW50ZXJfcmVnaXN0ZXIgPSBSRUNPUkRfQkxPQ0tfQ09VTlRFUjsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKworCWRhdGEgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCWtmcmVlKGRhdGEpOworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKKwlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisJc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWxzMzAwX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwl1MzIgdG1wOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgc2hvcnQgcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgc2hvcnQgYnVmZmVyX2J5dGVzID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJCisJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKKwlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCBQTEFZQkFDS19DT05UUk9MKTsKKwl0bXAgJj0gflRSQU5TRkVSX1NUQVJUOworCisJc25kX2FsczMwMF9kYmdwbGF5KCJQZXJpb2QgYnl0ZXM6ICVkIEJ1ZmZlciBieXRlcyAlZFxuIiwKKwkJCQkJCXBlcmlvZF9ieXRlcywgYnVmZmVyX2J5dGVzKTsKKwkKKwkvKiBzZXQgYmxvY2sgc2l6ZSAqLworCXRtcCAmPSAweGZmZmYwMDAwOworCXRtcCB8PSBwZXJpb2RfYnl0ZXMgLSAxOworCXNuZF9hbHMzMDBfZ2NyX3dyaXRlKGNoaXAtPnBvcnQsIFBMQVlCQUNLX0NPTlRST0wsIHRtcCk7CisKKwkvKiBzZXQgZG1hIGFyZWEgKi8KKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBQTEFZQkFDS19TVEFSVCwKKwkJCQkJcnVudGltZS0+ZG1hX2FkZHIpOworCXNuZF9hbHMzMDBfZ2NyX3dyaXRlKGNoaXAtPnBvcnQsIFBMQVlCQUNLX0VORCwKKwkJCQkJcnVudGltZS0+ZG1hX2FkZHIgKyBidWZmZXJfYnl0ZXMgLSAxKTsKKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHMzMDBfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXUzMiB0bXA7CisJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBzaG9ydCBwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBzaG9ydCBidWZmZXJfYnl0ZXMgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOworCXRtcCA9IHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwgUkVDT1JEX0NPTlRST0wpOworCXRtcCAmPSB+VFJBTlNGRVJfU1RBUlQ7CisKKwlzbmRfYWxzMzAwX2RiZ3BsYXkoIlBlcmlvZCBieXRlczogJWQgQnVmZmVyIGJ5dGVzICVkXG4iLCBwZXJpb2RfYnl0ZXMsCisJCQkJCQkJYnVmZmVyX2J5dGVzKTsKKworCS8qIHNldCBibG9jayBzaXplICovCisJdG1wICY9IDB4ZmZmZjAwMDA7CisJdG1wIHw9IHBlcmlvZF9ieXRlcyAtIDE7CisKKwkvKiBzZXQgZG1hIGFyZWEgKi8KKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBSRUNPUkRfQ09OVFJPTCwgdG1wKTsKKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBSRUNPUkRfU1RBUlQsCisJCQkJCXJ1bnRpbWUtPmRtYV9hZGRyKTsKKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBSRUNPUkRfRU5ELAorCQkJCQlydW50aW1lLT5kbWFfYWRkciArIGJ1ZmZlcl9ieXRlcyAtIDEpOworCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXUzMiB0bXA7CisJc3RydWN0IHNuZF9hbHMzMDBfc3Vic3RyZWFtX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgc2hvcnQgcmVnOworCWludCByZXQgPSAwOworCisJZGF0YSA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXJlZyA9IGRhdGEtPmNvbnRyb2xfcmVnaXN0ZXI7CisKKwlzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpOworCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCByZWcpOworCQlkYXRhLT5wZXJpb2RfZmxpcGZsb3AgPSAxOworCQlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCByZWcsIHRtcCB8IFRSQU5TRkVSX1NUQVJUKTsKKwkJc25kX2FsczMwMF9kYmdwbGF5KCJUUklHR0VSIFNUQVJUXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCByZWcpOworCQlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCByZWcsIHRtcCAmIH5UUkFOU0ZFUl9TVEFSVCk7CisJCXNuZF9hbHMzMDBfZGJncGxheSgiVFJJR0dFUiBTVE9QXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQl0bXAgPSBzbmRfYWxzMzAwX2djcl9yZWFkKGNoaXAtPnBvcnQsIHJlZyk7CisJCXNuZF9hbHMzMDBfZ2NyX3dyaXRlKGNoaXAtPnBvcnQsIHJlZywgdG1wIHwgRklGT19QQVVTRSk7CisJCXNuZF9hbHMzMDBfZGJncGxheSgiVFJJR0dFUiBQQVVTRVxuIik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJdG1wID0gc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCByZWcpOworCQlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCByZWcsIHRtcCAmIH5GSUZPX1BBVVNFKTsKKwkJc25kX2FsczMwMF9kYmdwbGF5KCJUUklHR0VSIFJFTEVBU0VcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfYWxzMzAwX2RiZ3BsYXkoIlRSSUdHRVIgSU5WQUxJRFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2FsczMwMF9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXUxNiBjdXJyZW50X3B0cjsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMF9zdWJzdHJlYW1fZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCBwZXJpb2RfYnl0ZXM7CisKKwlkYXRhID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJCisJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKKwlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKwljdXJyZW50X3B0ciA9ICh1MTYpIHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwKKwkJCQkJZGF0YS0+YmxvY2tfY291bnRlcl9yZWdpc3RlcikgKyA0OworCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJaWYgKGN1cnJlbnRfcHRyID4gcGVyaW9kX2J5dGVzKQorCQljdXJyZW50X3B0ciA9IDA7CisJZWxzZQorCQljdXJyZW50X3B0ciA9IHBlcmlvZF9ieXRlcyAtIGN1cnJlbnRfcHRyOworCisJaWYgKGRhdGEtPnBlcmlvZF9mbGlwZmxvcCA9PSAwKQorCQljdXJyZW50X3B0ciArPSBwZXJpb2RfYnl0ZXM7CisJc25kX2FsczMwMF9kYmdwbGF5KCJQb2ludGVyIChieXRlcyk6ICVkXG4iLCBjdXJyZW50X3B0cik7CisJc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKTsKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgY3VycmVudF9wdHIpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9hbHMzMDBfcGxheWJhY2tfb3BzID0geworCS5vcGVuID0JCXNuZF9hbHMzMDBfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPQlzbmRfYWxzMzAwX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlzbmRfYWxzMzAwX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPQlzbmRfYWxzMzAwX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0Jc25kX2FsczMwMF9wbGF5YmFja19wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX2FsczMwMF90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX2FsczMwMF9wb2ludGVyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfYWxzMzAwX2NhcHR1cmVfb3BzID0geworCS5vcGVuID0JCXNuZF9hbHMzMDBfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9CXNuZF9hbHMzMDBfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX2FsczMwMF9wY21faHdfcGFyYW1zLAorCS5od19mcmVlID0Jc25kX2FsczMwMF9wY21faHdfZnJlZSwKKwkucHJlcGFyZSA9CXNuZF9hbHMzMDBfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX2FsczMwMF90cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX2FsczMwMF9wb2ludGVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2FsczMwMF9uZXdfcGNtKHN0cnVjdCBzbmRfYWxzMzAwICpjaGlwKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkFMUzMwMCIsIDAsIDEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlzdHJjcHkocGNtLT5uYW1lLCAiQUxTMzAwIik7CisJY2hpcC0+cGNtID0gcGNtOworCisJLyogc2V0IG9wZXJhdG9ycyAqLworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisJCQkJJnNuZF9hbHMzMDBfcGxheWJhY2tfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkJJnNuZF9hbHMzMDBfY2FwdHVyZV9vcHMpOworCisJLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLCA2NCoxMDI0LCA2NCoxMDI0KTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfYWxzMzAwX2luaXQoc3RydWN0IHNuZF9hbHMzMDAgKmNoaXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCQorCXNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJY2hpcC0+cmV2aXNpb24gPSAoc25kX2FsczMwMF9nY3JfcmVhZChjaGlwLT5wb3J0LCBNSVNDX0NPTlRST0wpID4+IDE2KQorCQkJCQkJCQkmIDB4MDAwMDAwMEY7CisJLyogU2V0dXAgRFJBTSAqLworCXRtcCA9IHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwgRFJBTV9XUklURV9DT05UUk9MKTsKKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBEUkFNX1dSSVRFX0NPTlRST0wsCisJCQkJCQkodG1wIHwgRFJBTV9NT0RFXzIpCisJCQkJCQkmIH5XUklURV9UUkFOU19TVEFSVCk7CisKKwkvKiBFbmFibGUgSVJRIG91dHB1dCAqLworCXNuZF9hbHMzMDBfc2V0X2lycV9mbGFnKGNoaXAsIElSUV9FTkFCTEUpOworCisJLyogVW5tdXRlIGhhcmR3YXJlIGRldmljZXMgc28gdGhlaXIgb3V0cHV0cyBnZXQgcm91dGVkIHRvCisJICogdGhlIG9uYm9hcmQgbWl4ZXIgKi8KKwl0bXAgPSBzbmRfYWxzMzAwX2djcl9yZWFkKGNoaXAtPnBvcnQsIE1JU0NfQ09OVFJPTCk7CisJc25kX2FsczMwMF9nY3Jfd3JpdGUoY2hpcC0+cG9ydCwgTUlTQ19DT05UUk9MLAorCQkJdG1wIHwgVk1VVEVfTk9STUFMIHwgTU1VVEVfTk9STUFMKTsKKworCS8qIFJlc2V0IHZvbHVtZXMgKi8KKwlzbmRfYWxzMzAwX2djcl93cml0ZShjaGlwLT5wb3J0LCBNVVNfVk9DX1ZPTCwgMCk7CisKKwkvKiBNYWtlIHN1cmUgcGxheWJhY2sgdHJhbnNmZXIgaXMgc3RvcHBlZCAqLworCXRtcCA9IHNuZF9hbHMzMDBfZ2NyX3JlYWQoY2hpcC0+cG9ydCwgUExBWUJBQ0tfQ09OVFJPTCk7CisJc25kX2FsczMwMF9nY3Jfd3JpdGUoY2hpcC0+cG9ydCwgUExBWUJBQ0tfQ09OVFJPTCwKKwkJCXRtcCAmIH5UUkFOU0ZFUl9TVEFSVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwlzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxzMzAwX2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgY2hpcF90eXBlLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2FsczMwMCAqKnJjaGlwKQoreworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwOworCXZvaWQgKmlycV9oYW5kbGVyOworCWludCBlcnI7CisKKwlzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9hbHMzMDBfZGV2X2ZyZWUsCisJfTsKKwkqcmNoaXAgPSBOVUxMOworCisJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKKwlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAorCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyAyOGJpdCBETUEgbWFza1xuIik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2kpOworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJY2hpcC0+cGNpID0gcGNpOworCWNoaXAtPmlycSA9IC0xOworCWNoaXAtPmNoaXBfdHlwZSA9IGNoaXBfdHlwZTsKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOworCisJaWYgKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIkFMUzMwMCIpKSA8IDApIHsKKwkJa2ZyZWUoY2hpcCk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gZXJyOworCX0KKwljaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisKKwlpZiAoY2hpcC0+Y2hpcF90eXBlID09IERFVklDRV9BTFMzMDBfUExVUykKKwkJaXJxX2hhbmRsZXIgPSBzbmRfYWxzMzAwcGx1c19pbnRlcnJ1cHQ7CisJZWxzZQorCQlpcnFfaGFuZGxlciA9IHNuZF9hbHMzMDBfaW50ZXJydXB0OworCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBpcnFfaGFuZGxlciwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCQkJCQljYXJkLT5zaG9ydG5hbWUsICh2b2lkICopY2hpcCkpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CisJCXNuZF9hbHMzMDBfZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+aXJxID0gcGNpLT5pcnE7CisKKworCXNuZF9hbHMzMDBfaW5pdChjaGlwKTsKKworCWlmIChzbmRfYWxzMzAwX2FjOTcoY2hpcCkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgY3JlYXRlIGFjOTdcbiIpOworCQlzbmRfYWxzMzAwX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKChlcnIgPSBzbmRfYWxzMzAwX25ld19wY20oY2hpcCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGQgbm90IGNyZWF0ZSBQQ01cbiIpOworCQlzbmRfYWxzMzAwX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsCisJCQkJCQljaGlwLCAmb3BzKSkgPCAwKSB7CisJCXNuZF9hbHMzMDBfZnJlZShjaGlwKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKKwkqcmNoaXAgPSBjaGlwOworCXNuZF9hbHMzMDBfZGJnY2FsbGxlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc25kX2FsczMwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczMwMF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlzdHJ1Y3Qgc25kX2FsczMwMCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfc2V0X21hc3RlcihwY2kpOworCisJc25kX2FsczMwMF9pbml0KGNoaXApOworCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3KTsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxzMzAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJc3RhdGljIGludCBkZXY7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwOworCWludCBlcnIsIGNoaXBfdHlwZTsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOworCisJaWYgKChlcnIgPSBzbmRfYWxzMzAwX2NyZWF0ZShjYXJkLCBwY2ksIGNoaXBfdHlwZSwgJmNoaXApKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTFMzMDAiKTsKKwlpZiAoY2hpcC0+Y2hpcF90eXBlID09IERFVklDRV9BTFMzMDBfUExVUykKKwkJLyogZG9uJ3Qga25vdyBtdWNoIGFib3V0IEFMUzMwMCsgeWV0CisJCSAqIHByaW50IHJldmlzaW9uIG51bWJlciBmb3Igbm93ICovCisJCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAiQUxTMzAwKyAoUmV2LiAlZCkiLCBjaGlwLT5yZXZpc2lvbik7CisJZWxzZQorCQlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgIkFMUzMwMCAoUmV2LiAlYykiLCAnQScgKworCQkJCQkJCWNoaXAtPnJldmlzaW9uIC0gMSk7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisJCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIGNhcmQpOworCWRldisrOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gIkFMUzMwMCIsCisJLmlkX3RhYmxlID0gc25kX2FsczMwMF9pZHMsCisJLnByb2JlID0gc25kX2FsczMwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2FsczMwMF9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX2FsczMwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbmRfYWxzMzAwX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2FsczMwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfYWxzMzAwX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9hbHMzMDBfaW5pdCkKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9hbHMzMDBfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IDEwMGQ4MTIuLjYwNDIzYjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzNDAwMF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzNDAwMF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg0MDA1LCAweDQwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sICAgLyogQUxTNDAwMCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAxMmU2MTg4Li5kMGY3NTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdGlpeHBfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F0aWl4cF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMDAyLCAweDQzNDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgLyogU0IyMDAgKi8KIAl7IDB4MTAwMiwgMHg0MzYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sIC8qIFNCMzAwICovCiAJeyAweDEwMDIsIDB4NDM3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBTQjQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDFkMzc2NjAuLjEyYTM0YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiAvKgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F0aWl4cF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXRpaXhwX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDEwMDIsIDB4NDM0ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBTQjIwMCAqLwogCXsgMHgxMDAyLCAweDQzNzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgLyogU0I0MDAgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jCmluZGV4IGZjZTIyYzcuLmJkMzM1MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MTAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9BVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX0FEVkFOVEFHRSwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSx9LAogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jCmluZGV4IGQxZmJjY2UuLjdlM2ZkODMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MjAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9BVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8xLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLH0sCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMKaW5kZXggZDRmMjcxNy4uYjg0MGY2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5jCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImF1ODgzMC5oIgogI2luY2x1ZGUgImF1ODh4MC5oIgotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZvcnRleF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0FVUkVBTCwgUENJX0RFVklDRV9JRF9BVVJFQUxfVk9SVEVYXzIsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsfSwKIAl7MCx9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaAppbmRleCBkNjVjY2IxLi5mMDc4YjcxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKQEAgLTE5LDcgKzE5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMjc3LDE0ICsyNzYsMTQgQEAKICNlbmRpZgogCiAvKiBEcml2ZXIgc3R1ZmYuICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB2b3J0ZXhfZ2FtZXBvcnRfcmVnaXN0ZXIodm9ydGV4X3QgKiBjYXJkKTsKK3N0YXRpYyBpbnQgdm9ydGV4X2dhbWVwb3J0X3JlZ2lzdGVyKHZvcnRleF90ICogY2FyZCk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfZ2FtZXBvcnRfdW5yZWdpc3Rlcih2b3J0ZXhfdCAqIGNhcmQpOwogI2lmbmRlZiBDSElQX0FVODgyMAotc3RhdGljIGludCBfX2RldmluaXQgdm9ydGV4X2VxX2luaXQodm9ydGV4X3QgKiB2b3J0ZXgpOwotc3RhdGljIGludCBfX2RldmV4aXQgdm9ydGV4X2VxX2ZyZWUodm9ydGV4X3QgKiB2b3J0ZXgpOworc3RhdGljIGludCB2b3J0ZXhfZXFfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCk7CitzdGF0aWMgaW50IHZvcnRleF9lcV9mcmVlKHZvcnRleF90ICogdm9ydGV4KTsKICNlbmRpZgogLyogQUxTQSBzdHVmZi4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF92b3J0ZXhfbmV3X3BjbSh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGlkeCwgaW50IG5yKTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF92b3J0ZXhfbWl4ZXIodm9ydGV4X3QgKiB2b3J0ZXgpOwotc3RhdGljIGludCBfX2RldmluaXQgc25kX3ZvcnRleF9taWRpKHZvcnRleF90ICogdm9ydGV4KTsKK3N0YXRpYyBpbnQgc25kX3ZvcnRleF9uZXdfcGNtKHZvcnRleF90ICogdm9ydGV4LCBpbnQgaWR4LCBpbnQgbnIpOworc3RhdGljIGludCBzbmRfdm9ydGV4X21peGVyKHZvcnRleF90ICogdm9ydGV4KTsKK3N0YXRpYyBpbnQgc25kX3ZvcnRleF9taWRpKHZvcnRleF90ICogdm9ydGV4KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCmluZGV4IDljYWMwMmUuLjQzNDdlNmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKQEAgLTI2NTgsNyArMjY1OCw3IEBACiAKIC8qIEluaXRpYWxpemF0aW9uICovCiAKLXN0YXRpYyBpbnQgdm9ydGV4X2NvcmVfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9jb3JlX2luaXQodm9ydGV4X3QgKiB2b3J0ZXgpCiB7CiAKIAlwcmludGsoS0VSTl9JTkZPICJWb3J0ZXg6IGluaXQuLi4uICIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2VxLmMKaW5kZXggNjRmYmZiYi4uMGM4NmEzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jCkBAIC04ODUsNyArODg1LDcgQEAKIH07CiAKIC8qIEFMU0EgZHJpdmVyIGVudHJ5IHBvaW50cy4gSW5pdCBhbmQgZXhpdC4gKi8KLXN0YXRpYyBpbnQgdm9ydGV4X2VxX2luaXQodm9ydGV4X3QgKiB2b3J0ZXgpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2b3J0ZXhfZXFfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbDsKIAlpbnQgZXJyLCBpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwppbmRleCA2YTEzY2ExLi43YjViYWExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJaW50IGk7CiAJaW50IGVyciwgbnJfY2FwdDsKIAotCWlmICgoY2hpcCA9PSAwKSB8fCAoaWR4IDwgMCkgfHwgKGlkeCA+IFZPUlRFWF9QQ01fTEFTVCkpCisJaWYgKChjaGlwID09IDApIHx8IChpZHggPCAwKSB8fCAoaWR4ID49IFZPUlRFWF9QQ01fTEFTVCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogaWR4IGluZGljYXRlcyB3aGljaCBraW5kIG9mIFBDTSBkZXZpY2UuIEFEQiwgU1BESUYsIEkyUyBhbmQgQTNEIHNoYXJlIHRoZSAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDY4MDA3N2UuLjUyYTM2NDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJaW50IGlycTsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMjJELCAweDUwREMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBQQ0kxNjgvMzMyOCAqLwogCXsgMHgxMjJELCAweDgwREEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiAzMzI4ICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDdiNDRhOGQuLjllZTA3ZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC03NzQsNyArNzc0LDcgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IHJhdGUgfQogCiAvKiBkcml2ZXJfZGF0YSBpcyB0aGUgZGVmYXVsdCBkaWdpdGFsX3JhdGUgdmFsdWUgZm9yIHRoYXQgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2J0ODd4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCS8qIEhhdXBwYXVnZSBXaW5UViBzZXJpZXMgKi8KIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDAwNzAsIDB4MTNlYiwgMzIwMDApLAogCS8qIEhhdXBwYXVnZSBXaW5UViBzZXJpZXMgKi8KQEAgLTkxMSw3ICs5MTEsNyBAQAogCiAvKiBkZWZhdWx0IGVudHJpZXMgZm9yIGFsbCBCdDg3eCBjYXJkcyAtIGl0J3Mgbm90IGV4cG9ydGVkICovCiAvKiBkcml2ZXJfZGF0YSBpcyBzZXQgdG8gMCB0byBjYWxsIGRldGVjdGlvbiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCiAJeyB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggOTQ3NzgzOC4uZmQ4YmZlYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTU2MSw3ICsxNTYxLDcgQEAKIH0KIAogLy8gUENJIElEcwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jYTAxMDZfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NhMDEwNl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMTAyLCAweDAwMDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwJLyogQXVkaWd5IExTIG9yIExpdmUgMjRiaXQgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggMmVjYmRkYi4uZTVjZTJkYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMjYwOSw3ICsyNjA5LDcgQEAKICNlbmRpZgogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY21pcGNpX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jbWlwY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DTUVESUEsIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0NNRURJQSwgUENJX0RFVklDRV9JRF9DTUVESUFfQ004MzM4QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfQ01FRElBLCBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IDRmNjVlYzUuLmIzYzk0ZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2NzNDI4MV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M0MjgxX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQyODFfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTAxMywgMHg2MDA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAkvKiBDUzQyODEgKi8KIAl7IDAsIH0KIH07CkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogCQlzbmRfY3M0MjgxX3Bva2VCQTAoY2hpcCwgcmVnTCwgdm9sTCk7CiAJCWNoYW5nZSA9IDE7CiAJfQotCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAhPSB2b2xMKSB7CisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICE9IHZvbFIpIHsKIAkJdm9sUiA9IENTX1ZPTF9NQVNLIC0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgQ1NfVk9MX01BU0spOwogCQlzbmRfY3M0MjgxX3Bva2VCQTAoY2hpcCwgcmVnUiwgdm9sUik7CiAJCWNoYW5nZSA9IDE7CkBAIC0xNDE2LDcgKzE0MTYsNyBAQAogc3RhdGljIGludCBzbmRfY3M0MjgxX2NoaXBfaW5pdChzdHJ1Y3QgY3M0MjgxICpjaGlwKQogewogCXVuc2lnbmVkIGludCB0bXA7Ci0JaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKIAlpbnQgcmV0cnlfY291bnQgPSAyOwogCiAJLyogSGF2aW5nIEVQUE1DLkZQRE49MSBwcmV2ZW50IHByb3BlciBjaGlwIGluaXRpYWxpc2F0aW9uICovCkBAIC0xNDk2LDcgKzE0OTYsNyBAQAogCS8qCiAJICogV2FpdCBmb3IgdGhlIERMTCByZWFkeSBzaWduYWwgZnJvbSB0aGUgY2xvY2sgbG9naWMuCiAJICovCi0JdGltZW91dCA9IDEwMDsKKwllbmRfdGltZSA9IGppZmZpZXMgKyBIWjsKIAlkbyB7CiAJCS8qCiAJCSAqICBSZWFkIHRoZSBBQzk3IHN0YXR1cyByZWdpc3RlciB0byBzZWUgaWYgd2UndmUgc2VlbiBhIENPREVDCkBAIC0xNTA0LDggKzE1MDQsOCBAQAogCQkgKi8KIAkJaWYgKHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBCQTBfQ0xLQ1IxKSAmIEJBMF9DTEtDUjFfRExMUkRZKQogCQkJZ290byBfX29rMDsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVvdXQtLSA+IDApOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJETExSRFkgbm90IHNlZW5cbiIpOwogCXJldHVybiAtRUlPOwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBjb2RlYyByZWFkeSBzaWduYWwgZnJvbSB0aGUgQUM5NyBjb2RlYy4KIAkgKi8KLQl0aW1lb3V0ID0gMTAwOworCWVuZF90aW1lID0gamlmZmllcyArIEhaOwogCWRvIHsKIAkJLyoKIAkJICogIFJlYWQgdGhlIEFDOTcgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSBpZiB3ZSd2ZSBzZWVuIGEgQ09ERUMKQEAgLTE1MzAsMjAgKzE1MzAsMjAgQEAKIAkJICovCiAJCWlmIChzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgQkEwX0FDU1RTKSAmIEJBMF9BQ1NUU19DUkRZKQogCQkJZ290byBfX29rMTsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVvdXQtLSA+IDApOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyX2VxKGVuZF90aW1lLCBqaWZmaWVzKSk7CiAKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJuZXZlciByZWFkIGNvZGVjIHJlYWR5IGZyb20gQUMnOTcgKDB4JXgpXG4iLCBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgQkEwX0FDU1RTKSk7CiAJcmV0dXJuIC1FSU87CiAKICAgICAgIF9fb2sxOgogCWlmIChjaGlwLT5kdWFsX2NvZGVjKSB7Ci0JCXRpbWVvdXQgPSAxMDA7CisJCWVuZF90aW1lID0gamlmZmllcyArIEhaOwogCQlkbyB7CiAJCQlpZiAoc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIEJBMF9BQ1NUUzIpICYgQkEwX0FDU1RTX0NSRFkpCiAJCQkJZ290byBfX2NvZGVjMl9vazsKLQkJCW1zbGVlcCgxKTsKLQkJfSB3aGlsZSAodGltZW91dC0tID4gMCk7CisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJfSB3aGlsZSAodGltZV9hZnRlcl9lcShlbmRfdGltZSwgamlmZmllcykpOwogCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic2Vjb25kYXJ5IGNvZGVjIGRvZXNuJ3QgcmVzcG9uZC4gZGlzYWJsZSBpdC4uLlxuIik7CiAJCWNoaXAtPmR1YWxfY29kZWMgPSAwOwogCV9fY29kZWMyX29rOiA7CkBAIC0xNTYxLDcgKzE1NjEsNyBAQAogCSAqICB0aGUgY29kZWMgaXMgcHVtcGluZyBBREMgZGF0YSBhY3Jvc3MgdGhlIEFDLWxpbmsuCiAJICovCiAKLQl0aW1lb3V0ID0gMTAwOworCWVuZF90aW1lID0gamlmZmllcyArIEhaOwogCWRvIHsKIAkJLyoKIAkJICogIFJlYWQgdGhlIGlucHV0IHNsb3QgdmFsaWQgcmVnaXN0ZXIgYW5kIHNlZSBpZiBpbnB1dCBzbG90cyAzCkBAIC0xNTY5LDggKzE1NjksOCBAQAogCQkgKi8KICAgICAgICAgICAgICAgICBpZiAoKHNuZF9jczQyODFfcGVla0JBMChjaGlwLCBCQTBfQUNJU1YpICYgKEJBMF9BQ0lTVl9TTFYoMykgfCBCQTBfQUNJU1ZfU0xWKDQpKSkgPT0gKEJBMF9BQ0lTVl9TTFYoMykgfCBCQTBfQUNJU1ZfU0xWKDQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gX19vazI7Ci0JCW1zbGVlcCgxKTsKLQl9IHdoaWxlICh0aW1lb3V0LS0gPiAwKTsKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJfSB3aGlsZSAodGltZV9hZnRlcl9lcShlbmRfdGltZSwgamlmZmllcykpOwogCiAJaWYgKC0tcmV0cnlfY291bnQgPiAwKQogCQlnb3RvIF9fcmV0cnk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCBjNTkwNjAyLi44NDhkNzcyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTY1LDcgKzY1LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShtbWFwX3ZhbGlkLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobW1hcF92YWxpZCwgIlN1cHBvcnQgT1NTIG1tYXAuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M0Nnh4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQ2eHhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKICAgICAgICAgeyAweDEwMTMsIDB4NjAwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBDUzQyODAgKi8KICAgICAgICAgeyAweDEwMTMsIDB4NjAwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBDUzQ2MTIgKi8KICAgICAgICAgeyAweDEwMTMsIDB4NjAwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBDUzQ2MTUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggOWZjN2YzOC4uMmMxMjEzYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczU1MzVhdWRpb19pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTM1YXVkaW9faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0FVRElPLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfQVVESU8sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggMmRmYTkzMi4uNDJiMTFiYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtNzcsNyArNzcsNyBAQAogLyoKICAqIENsYXNzIDA0MDE6IDExMDI6MDAwOCAocmV2IDAwKSBTdWJzeXN0ZW06IDExMDI6MTAwMSAtPiBBdWRpZ3kyIFZhbHVlICBNb2RlbDpTQjA0MDAKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDExMDIsIDB4MDAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAkvKiBFTVUxMEsxICovCiAJeyAweDExMDIsIDB4MDAwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAkvKiBBdWRpZ3kgKi8KIAl7IDB4MTEwMiwgMHgwMDA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCS8qIEF1ZGlneSAyIFZhbHVlIFNCMDQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwppbmRleCAzMWNiOWI0Li42YmZhMDg0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYwpAQCAtODQzLDggKzg0MywxMSBAQAogCSAuc3BkaWZfYnVnID0gMSwKIAkgLmFjOTdfY2hpcCA9IDF9ICwKIAkvKiBUZXN0ZWQgYnkgc2hhbmUtYWxzYUBjbS5udSA1dGggTm92IDIwMDUgKi8KKwkvKiBUaGUgMHgyMDA2MTEwMiBkb2VzIGhhdmUgU0IwMzUwIHdyaXR0ZW4gb24gaXQKKwkgKiBKdXN0IGxpa2UgMHgyMDAyMTEwMgorCSAqLwogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA0LCAuc3Vic3lzdGVtID0gMHgyMDA2MTEwMiwKLQkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiQXVkaWd5IDIgWzIwMDZdIiwgCisJIC5kcml2ZXIgPSAiQXVkaWd5MiIsIC5uYW1lID0gIkF1ZGlneSAyIFtTQjAzNTBiXSIsIAogCSAuaWQgPSAiQXVkaWd5MiIsCiAJIC5lbXUxMGsyX2NoaXAgPSAxLAogCSAuY2EwMTAyX2NoaXAgPSAxLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggM2UzMzJmMy4uZDUxMjkwYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0xNTk2LDcgKzE1OTUsNyBAQAogfQogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VtdTEwazF4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxeF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMTAyLCAweDAwMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwJLyogRGVsbCBPRU0gdmVyc2lvbiAoRU1VMTBLMSkgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCBhNTUzM2M4Li5jYTllMzRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2F1ZGlvcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdWRpb3BjaV9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXVkaW9wY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKICNpZmRlZiBDSElQMTM3MAogCXsgMHgxMjc0LCAweDUwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCS8qIEVTMTM3MCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggNGQ2MmZlNC4uNmY5MDk0YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTkzOC5jCisrKyBiL3NvdW5kL3BjaS9lczE5MzguYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfZXMxOTM4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5MzhfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VzMTkzOF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogICAgICAgICB7IDB4MTI1ZCwgMHgxOTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIFNvbG8tMSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBlM2FkMTdmLi41ZmY0MTc1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0xMDQsNyArMTA0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTU5Myw3ICs1OTIsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2VzMTk2OF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZXMxOTY4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5NjhfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAkvKiBNYWVzdHJvIDEgKi8KICAgICAgICAgeyAweDEyODUsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIFRZUEVfTUFFU1RSTyB9LAogCS8qIE1hZXN0cm8gMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCA2YWI0YWVmLi5kNzJmYzI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZm04MDFfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ZtODAxX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDEzMTksIDB4MDgwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDAsIH0sICAgLyogRk04MDEgKi8KIAl7IDB4NTIxMywgMHgwNTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMCwgfSwgICAvKiBHYWxsYW50IE9keXNzZXkgU291bmQgNCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggYjQyZGZmNy4uNWJlZTNiNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW4ndCBhbGxvY2F0ZSB1bnNvbGljaXRlZCBxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQl1bnNvbC0+d29ya3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJoZGFfY29kZWMiKTsKKwl1bnNvbC0+d29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaGRhX2NvZGVjIik7CiAJaWYgKCEgdW5zb2wtPndvcmtxKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2FuJ3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCWtmcmVlKHVuc29sKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGMwOTY2MDYuLmU4MjFkNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtODEsNiArODEsNyBAQAogCQkJICJ7SW50ZWwsIEVTQjJ9LCIKIAkJCSAie0ludGVsLCBJQ0g4fSwiCiAJCQkgIntBVEksIFNCNDUwfSwiCisJCQkgIntBVEksIFNCNjAwfSwiCiAJCQkgIntWSUEsIFZUODI1MX0sIgogCQkJICJ7VklBLCBWVDgyMzdBfSwiCiAJCQkgIntTaVMsIFNJUzk2Nn0sIgpAQCAtMTYxMywxMiArMTYxNCwxMyBAQAogfQogCiAvKiBQQ0kgSURzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXp4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF6eF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg4MDg2LCAweDI2NjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfSUNIIH0sIC8qIElDSDYgKi8KIAl7IDB4ODA4NiwgMHgyN2Q4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0lDSCB9LCAvKiBJQ0g3ICovCiAJeyAweDgwODYsIDB4MjY5YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9JQ0ggfSwgLyogRVNCMiAqLwogCXsgMHg4MDg2LCAweDI4NGIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfSUNIIH0sIC8qIElDSDggKi8KIAl7IDB4MTAwMiwgMHg0MzdiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0FUSSB9LCAvKiBBVEkgU0I0NTAgKi8KKwl7IDB4MTAwMiwgMHg0MzgzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0FUSSB9LCAvKiBBVEkgU0I2MDAgKi8KIAl7IDB4MTEwNiwgMHgzMjg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX1ZJQSB9LCAvKiBWSUEgVlQ4MjUxL1ZUODIzN0EgKi8KIAl7IDB4MTAzOSwgMHg3NTAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX1NJUyB9LCAvKiBTSVM5NjYgKi8KIAl7IDB4MTBiOSwgMHg1NDYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX1VMSSB9LCAvKiBVTEkgTTU0NjEgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDMyNDAxYmQuLjQwZjAwMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtNDQsNiArNDQsNyBAQAogCQkJCQkgKiBkaWdfb3V0X25pZCBhbmQgaHBfbmlkIGFyZSBvcHRpb25hbAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CisJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwpAQCAtNzk4LDggKzc5OSwxNiBAQAogCXsgLm1vZGVsbmFtZSA9ICJsYXB0b3AtZWFwZCIsCS5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTQ0ZCwgLnBjaV9zdWJkZXZpY2UgPSAweGMwMjQsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBTYW1zdW5nIFI2NS1UMjMwMCBDaGFyaXMgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTE1MywKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgTTkgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTIxMywKIAkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgQTZKICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExZjcsCisJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBBU1VTIFU1QSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMjk3LAorCSAgLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QX0VBUEQgfSwgLyogQVNVUyBaNjJGICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwYWYsCisJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBIUCBDb21wYXEgUHJlc2FyaW8gQjI4MDAgKi8KIAl7fQogfTsKIApAQCAtODM2LDEwICs4NDUsMTQgQEAKIAljYXNlIEFEMTk4NkFfM1NUQUNLOgogCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKIAkJc3BlYy0+bWl4ZXJzWzFdID0gYWQxOTg2YV8zc3RfbWl4ZXJzOwotCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CisJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMzsKIAkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGFkMTk4NmFfM3N0X2luaXRfdmVyYnM7CisJCXNwZWMtPmluaXRfdmVyYnNbMl0gPSBhZDE5ODZhX2NoMl9pbml0OwogCQlzcGVjLT5jaGFubmVsX21vZGUgPSBhZDE5ODZhX21vZGVzOwogCQlzcGVjLT5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhZDE5ODZhX21vZGVzKTsKKwkJc3BlYy0+bmVlZF9kYWNfZml4ID0gMTsKKwkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwogCQlicmVhazsKIAljYXNlIEFEMTk4NkFfTEFQVE9QOgogCQlzcGVjLT5taXhlcnNbMF0gPSBhZDE5ODZhX2xhcHRvcF9taXhlcnM7CkBAIC0xMzIxLDEwICsxMzM0LDggQEAKIAogc3RhdGljIHN0cnVjdCBoZGFfYm9hcmRfY29uZmlnIGFkMTk4MV9jZmdfdGJsW10gPSB7CiAJeyAubW9kZWxuYW1lID0gImhwIiwgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LAotCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMGFhLAotCSAgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LCAvKiBIUCBueDYzMjAgKi8KLQl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzA5ZiwKLQkgIC5jb25maWcgPSBBRDE5ODFfSFAgfSwgLyogSFAgbng5NDIwIEFuZ2VsRmlyZSAqLworCS8qIEFsbCBIUCBtb2RlbHMgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAuY29uZmlnID0gQUQxOTgxX0hQIH0sCiAJeyAubW9kZWxuYW1lID0gImJhc2ljIiwgLmNvbmZpZyA9IEFEMTk4MV9CQVNJQyB9LAogCXt9CiB9OwpAQCAtMTU1NSw2ICsxNTY2LDggQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYy0+bmVlZF9kYWNfZml4KQorCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IHNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyAvIDI7CiAJcmV0dXJuIHNuZF9oZGFfY2hfbW9kZV9wdXQoY29kZWMsIHVjb250cm9sLCBzcGVjLT5jaGFubmVsX21vZGUsCiAJCQkJICAgc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSwgJnNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyk7CiB9CkBAIC0yNjEwLDUgKzI2MjMsNiBAQAogCXsgLmlkID0gMHgxMWQ0MTk4MywgLm5hbWUgPSAiQUQxOTgzIiwgLnBhdGNoID0gcGF0Y2hfYWQxOTgzIH0sCiAJeyAuaWQgPSAweDExZDQxOTg2LCAubmFtZSA9ICJBRDE5ODZBIiwgLnBhdGNoID0gcGF0Y2hfYWQxOTg2YSB9LAogCXsgLmlkID0gMHgxMWQ0MTk4OCwgLm5hbWUgPSAiQUQxOTg4IiwgLnBhdGNoID0gcGF0Y2hfYWQxOTg4IH0sCisJeyAuaWQgPSAweDExZDQxOThiLCAubmFtZSA9ICJBRDE5ODhCIiwgLnBhdGNoID0gcGF0Y2hfYWQxOTg4IH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggNGM2YzllYy4uZjBlOWE5YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAlBTEM4ODBfQ0xFVk8sCiAJQUxDODgwX1RDTF9TNzAwLAogCUFMQzg4MF9MRywKKwlBTEM4ODBfTEdfTFcsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCUFMQzg4MF9URVNULAogI2VuZGlmCkBAIC0xMzEsNiArMTMyLDcgQEAKIAloZGFfbmlkX3QgZGlnX2luX25pZDsJCS8qIGRpZ2l0YWwtaW4gTklEOyBvcHRpb25hbCAqLwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX211eF9kZWZzOwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbnB1dF9tdXg7CiAJdW5zaWduZWQgaW50IGN1cl9tdXhbM107CiAKQEAgLTE3Miw2ICsxNzQsNyBAQAogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwogCXVuc2lnbmVkIGludCBudW1fY2hhbm5lbF9tb2RlOwogCWNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlICpjaGFubmVsX21vZGU7CisJdW5zaWduZWQgaW50IG51bV9tdXhfZGVmczsKIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW5wdXRfbXV4OwogCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCppbml0X2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKik7CkBAIC0xODUsNyArMTg4LDEwIEBACiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X2luZm8oc3BlYy0+aW5wdXRfbXV4LCB1aW5mbyk7CisJdW5zaWduZWQgaW50IG11eF9pZHggPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWluZm8tPmlkKTsKKwlpZiAobXV4X2lkeCA+PSBzcGVjLT5udW1fbXV4X2RlZnMpCisJCW11eF9pZHggPSAwOworCXJldHVybiBzbmRfaGRhX2lucHV0X211eF9pbmZvKCZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF0sIHVpbmZvKTsKIH0KIAogc3RhdGljIGludCBhbGNfbXV4X2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKQEAgLTIwMyw3ICsyMDksOCBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBhZGNfaWR4ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCk7Ci0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgc3BlYy0+aW5wdXRfbXV4LCB1Y29udHJvbCwKKwl1bnNpZ25lZCBpbnQgbXV4X2lkeCA9IGFkY19pZHggPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGFkY19pZHg7CisJcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgJnNwZWMtPmlucHV0X211eFttdXhfaWR4XSwgdWNvbnRyb2wsCiAJCQkJICAgICBzcGVjLT5hZGNfbmlkc1thZGNfaWR4XSwgJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF0pOwogfQogCkBAIC0yNDUsNyArMjUyLDggQEAKICAqIHN0YXRlcyBvdGhlciB0aGFuIEhpWiAoZWc6IFBJTl9WUkVGeHgpIGFuZCByZXZlcnQgdG8gSGlaIGlmIGFueSBvZiB0aGVzZQogICogYXJlIHJlcXVlc3RlZC4gIFRoZXJlZm9yZSBvcmRlciB0aGlzIGxpc3Qgc28gdGhhdCB0aGlzIGJlaGF2aW91ciB3aWxsIG5vdAogICogY2F1c2UgcHJvYmxlbXMgd2hlbiBtaXhlciBjbGllbnRzIG1vdmUgdGhyb3VnaCB0aGUgZW51bSBzZXF1ZW50aWFsbHkuCi0gKiBOSURzIDB4MGYgYW5kIDB4MTAgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGhhdmUgdGhpcyBiZWhhdmlvdXIuCisgKiBOSURzIDB4MGYgYW5kIDB4MTAgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGhhdmUgdGhpcyBiZWhhdmlvdXIgYXMgb2YKKyAqIE1hcmNoIDIwMDYuCiAgKi8KIHN0YXRpYyBjaGFyICphbGNfcGluX21vZGVfbmFtZXNbXSA9IHsKIAkiTWljIDUwcGMgYmlhcyIsICJNaWMgODBwYyBiaWFzIiwKQEAgLTI1NSwxOSArMjYzLDI3IEBACiAJUElOX1ZSRUY1MCwgUElOX1ZSRUY4MCwgUElOX0lOLCBQSU5fT1VULCBQSU5fSFAsCiB9OwogLyogVGhlIGNvbnRyb2wgY2FuIHByZXNlbnQgYWxsIDUgb3B0aW9ucywgb3IgaXQgY2FuIGxpbWl0IHRoZSBvcHRpb25zIGJhc2VkCi0gKiBpbiB0aGUgcGluIGJlaW5nIGFzc3VtZWQgdG8gYmUgZXhjbHVzaXZlbHkgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IHBpbi4KKyAqIGluIHRoZSBwaW4gYmVpbmcgYXNzdW1lZCB0byBiZSBleGNsdXNpdmVseSBhbiBpbnB1dCBvciBhbiBvdXRwdXQgcGluLiAgSW4KKyAqIGFkZGl0aW9uLCAiaW5wdXQiIHBpbnMgbWF5IG9yIG1heSBub3QgcHJvY2VzcyB0aGUgbWljIGJpYXMgb3B0aW9uCisgKiBkZXBlbmRpbmcgb24gYWN0dWFsIHdpZGdldCBjYXBhYmlsaXR5IChOSURzIDB4MGYgYW5kIDB4MTAgZG9uJ3Qgc2VlbSB0bworICogYWNjZXB0IHJlcXVlc3RzIGZvciBiaWFzIGFzIG9mIGNoaXAgdmVyc2lvbnMgdXAgdG8gTWFyY2ggMjAwNikgYW5kL29yCisgKiB3aXJpbmcgaW4gdGhlIGNvbXB1dGVyLgogICovCi0jZGVmaW5lIEFMQ19QSU5fRElSX0lOICAgIDB4MDAKLSNkZWZpbmUgQUxDX1BJTl9ESVJfT1VUICAgMHgwMQotI2RlZmluZSBBTENfUElOX0RJUl9JTk9VVCAweDAyCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFMQ19QSU5fRElSX09VVCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOT1VUICAgICAgICAgICAweDAyCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOX05PTUlDQklBUyAgICAweDAzCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOT1VUX05PTUlDQklBUyAweDA0CiAKLS8qIEluZm8gYWJvdXQgdGhlIHBpbiBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHRocmVlIGRpZmZlcmVudCBwaW4gZGlyZWN0aW9ucy4gCisvKiBJbmZvIGFib3V0IHRoZSBwaW4gbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBkaWZmZXJlbnQgcGluIGRpcmVjdGlvbiBtb2Rlcy4gCiAgKiBGb3IgZWFjaCBkaXJlY3Rpb24gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGFyZSBnaXZlbi4KICAqLwotc3RhdGljIHNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV9kaXJfaW5mb1szXVsyXSA9IHsKK3N0YXRpYyBzaWduZWQgY2hhciBhbGNfcGluX21vZGVfZGlyX2luZm9bNV1bMl0gPSB7CiAJeyAwLCAyIH0sICAgIC8qIEFMQ19QSU5fRElSX0lOICovCiAJeyAzLCA0IH0sICAgIC8qIEFMQ19QSU5fRElSX09VVCAqLwogCXsgMCwgNCB9LCAgICAvKiBBTENfUElOX0RJUl9JTk9VVCAqLworCXsgMiwgMiB9LCAgICAvKiBBTENfUElOX0RJUl9JTl9OT01JQ0JJQVMgKi8KKwl7IDIsIDQgfSwgICAgLyogQUxDX1BJTl9ESVJfSU5PVVRfTk9NSUNCSUFTICovCiB9OwogI2RlZmluZSBhbGNfcGluX21vZGVfbWluKF9kaXIpIChhbGNfcGluX21vZGVfZGlyX2luZm9bX2Rpcl1bMF0pCiAjZGVmaW5lIGFsY19waW5fbW9kZV9tYXgoX2RpcikgKGFsY19waW5fbW9kZV9kaXJfaW5mb1tfZGlyXVsxXSkKQEAgLTMyOSw5ICszNDUsMTAgQEAKIAkJICogaW5wdXQgbW9kZXMuCiAJCSAqCiAJCSAqIER5bmFtaWNhbGx5IHN3aXRjaGluZyB0aGUgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgcHJvYmFibHkKLQkJICogcmVkdWNlcyBub2lzZSBzbGlnaHRseSwgcGFydGljdWxhcmx5IG9uIGlucHV0LiAgSG93ZXZlciwKLQkJICogaGF2aW5nYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgZW5hYmxlZAotCQkgKiBzaW11bHRhbmVvdXNseSBkb2Vzbid0IHNlZW0gdG8gYmUgcHJvYmxlbWF0aWMuCisJCSAqIHJlZHVjZXMgbm9pc2Ugc2xpZ2h0bHkgKHBhcnRpY3VsYXJseSBvbiBpbnB1dCkgc28gd2UnbGwKKwkJICogZG8gaXQuICBIb3dldmVyLCBoYXZpbmcgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMKKwkJICogZW5hYmxlZCBzaW11bHRhbmVvdXNseSBkb2Vzbid0IHNlZW0gdG8gYmUgcHJvYmxlbWF0aWMgaWYKKwkJICogdGhpcyB0dXJucyBvdXQgdG8gYmUgbmVjZXNzYXJ5IGluIHRoZSBmdXR1cmUuCiAJCSAqLwogCQlpZiAodmFsIDw9IDIpIHsKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTQ4Myw2ICs1MDAsOSBAQAogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gcHJlc2V0LT5kaWdfb3V0X25pZDsKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBwcmVzZXQtPmhwX25pZDsKIAkKKwlzcGVjLT5udW1fbXV4X2RlZnMgPSBwcmVzZXQtPm51bV9tdXhfZGVmczsKKwlpZiAoISBzcGVjLT5udW1fbXV4X2RlZnMpCisJCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gcHJlc2V0LT5pbnB1dF9tdXg7CiAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBwcmVzZXQtPm51bV9hZGNfbmlkczsKQEAgLTE0MjcsNiArMTQ0Nyw4MiBAQAogfQogCiAvKgorICogTEcgTFcyMAorICoKKyAqIFBpbiBhc3NpZ25tZW50OgorICogICBTcGVha2VyLW91dDogMHgxNAorICogICBNaWMtSW46IDB4MTgKKyAqICAgQnVpbHQtaW4gTWljLUluOiAweDE5ICg/KQorICogICBIUC1PdXQ6IDB4MWIKKyAqICAgU1BESUYtT3V0OiAweDFlCisgKi8KKworLyogc2VlbXMgYW5hbG9nIENEIGlzIG5vdCB3b3JraW5nICovCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX2xnX2x3X2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgwIH0sCisJCXsgIkludGVybmFsIE1pYyIsIDB4MSB9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX2xnX2x3X21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbGdfbHdfaW5pdF92ZXJic1tdID0geworCS8qIHNldCBjYXB0dXJlIHNvdXJjZSB0byBtaWMtaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg3KX0sCisJLyogc3BlYWtlci1vdXQgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogSFAtb3V0ICovCisJezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogbWljLWluIHRvIGlucHV0ICovCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBidWlsdC1pbiBtaWMgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIGphY2sgc2Vuc2UgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IDB4MX0sCisJeyB9Cit9OworCisvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCitzdGF0aWMgdm9pZCBhbGM4ODBfbGdfbHdfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE0LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKK30KKworc3RhdGljIHZvaWQgYWxjODgwX2xnX2x3X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQoreworCS8qIExvb2tzIGxpa2UgdGhlIHVuc29sIGV2ZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZAorCSAqIGRlZmluaXRpb24uICA0Yml0IHRhZyBpcyBwbGFjZWQgYXQgMjggYml0IQorCSAqLworCWlmICgocmVzID4+IDI4KSA9PSAweDAxKQorCQlhbGM4ODBfbGdfbHdfYXV0b211dGUoY29kZWMpOworfQorCisvKgogICogQ29tbW9uIGNhbGxiYWNrcwogICovCiAKQEAgLTIwNTIsNiArMjE0OCw3IEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAyNSwgLnBjaV9zdWJkZXZpY2UgPSAweDAwODcsIC5jb25maWcgPSBBTEM4ODBfNlNUX0RJRyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEyOTcsIC5wY2lfc3ViZGV2aWNlID0gMHhjNzkwLCAuY29uZmlnID0gQUxDODgwXzZTVF9ESUcgfSwgLyogU2h1dHRsZSBTVDIwRzUgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxNTA5LCAucGNpX3N1YmRldmljZSA9IDB4OTI1ZCwgLmNvbmZpZyA9IEFMQzg4MF82U1RfRElHIH0sIC8qIEZJQyBQNE0tOTE1R0QxICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTY5NSwgLnBjaV9zdWJkZXZpY2UgPSAweDQwMTIsIC5jb25maWcgPSBBTEM4ODBfNVNUX0RJRyB9LCAvKiBFcG94IEVQLTVMREErIEdMaSAqLwogCiAJeyAubW9kZWxuYW1lID0gImFzdXMiLCAuY29uZmlnID0gQUxDODgwX0FTVVMgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTk2NCwgLmNvbmZpZyA9IEFMQzg4MF9BU1VTX0RJRyB9LApAQCAtMjA3OCw2ICsyMTc1LDkgQEAKIAl7IC5tb2RlbG5hbWUgPSAibGciLCAuY29uZmlnID0gQUxDODgwX0xHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTg1NCwgLnBjaV9zdWJkZXZpY2UgPSAweDAwM2IsIC5jb25maWcgPSBBTEM4ODBfTEcgfSwKIAorCXsgLm1vZGVsbmFtZSA9ICJsZy1sdyIsIC5jb25maWcgPSBBTEM4ODBfTEdfTFcgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxODU0LCAucGNpX3N1YmRldmljZSA9IDB4MDAxOCwgLmNvbmZpZyA9IEFMQzg4MF9MR19MVyB9LAorCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCXsgLm1vZGVsbmFtZSA9ICJ0ZXN0IiwgLmNvbmZpZyA9IEFMQzg4MF9URVNUIH0sCiAjZW5kaWYKQEAgLTIyNjgsNiArMjM2OCwxOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfbGdfdW5zb2xfZXZlbnQsCiAJCS5pbml0X2hvb2sgPSBhbGM4ODBfbGdfYXV0b211dGUsCiAJfSwKKwlbQUxDODgwX0xHX0xXXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODgwX2xnX2x3X21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCisJCQkJYWxjODgwX2xnX2x3X2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gMSwgCisJCS5kYWNfbmlkcyA9IGFsYzg4MF9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfMl9qYWNrX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4MF8yX2phY2tfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjODgwX2xnX2x3X2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfbGdfbHdfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGM4ODBfbGdfbHdfYXV0b211dGUsCisJfSwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzg4MF9URVNUXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX3Rlc3RfbWl4ZXIgfSwKQEAgLTI1OTMsNiArMjcwNiw3IEBACiAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzOwogCisJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCiAJcmV0dXJuIDE7CkBAIC0yNzIyLDMwICsyODM2LDU2IEBACiB9OwogCiAvKiBPbiBGdWppdHN1IFM3MDJ4IGxhcHRvcHMgY2FwdHVyZSBvbmx5IG1ha2VzIHNlbnNlIGZyb20gTWljL0xpbmVJbiBqYWNrLAotICogaGVhZHBob25lIGphY2sgYW5kIHRoZSBpbnRlcm5hbCBDRCBsaW5lcy4KKyAqIGhlYWRwaG9uZSBqYWNrIGFuZCB0aGUgaW50ZXJuYWwgQ0QgbGluZXMgc2luY2UgdGhlc2UgYXJlIHRoZSBvbmx5IHBpbnMgYXQKKyAqIHdoaWNoIGF1ZGlvIGNhbiBhcHBlYXIuICBGb3IgZmxleGliaWxpdHksIGFsc28gYWxsb3cgdGhlIG9wdGlvbiBvZgorICogcmVjb3JkaW5nIHRoZSBtaXhlciBvdXRwdXQgb24gdGhlIHNlY29uZCBBREMgKEFEQzAgZG9lc24ndCBoYXZlIGEKKyAqIGNvbm5lY3Rpb24gdG8gdGhlIG1peGVyIG91dHB1dCkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMywKLQkuaXRlbXMgPSB7Ci0JCXsgIk1pYy9MaW5lIiwgMHgwIH0sCi0JCXsgIkNEIiwgMHg0IH0sCi0JCXsgIkhlYWRwaG9uZSIsIDB4MiB9LAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9mdWppdHN1X2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSAzLAorCQkuaXRlbXMgPSB7CisJCQl7ICJNaWMvTGluZSIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIkhlYWRwaG9uZSIsIDB4MiB9LAorCQl9LAogCX0sCisJeworCQkubnVtX2l0ZW1zID0gNCwKKwkJLml0ZW1zID0geworCQkJeyAiTWljL0xpbmUiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCQl7ICJIZWFkcGhvbmUiLCAweDIgfSwKKwkJCXsgIk1peGVyIiwgMHg1IH0sCisJCX0sCisJfSwKKwogfTsKIAotLyogQWNlciBUcmF2ZWxNYXRlKC9FeHRlbnNhL0FzcGlyZSkgbm90ZWJvb2tzIGhhdmUgc2ltaWxhciBjb25maWd1dGF0aW9uIHRvCi0gKiB0aGUgRnVqaXRzdSBTNzAyeCwgYnV0IGphY2tzIGFyZSBtYXJrZWQgZGlmZmVyZW50bHkuIFdlIHdvbid0IGFsbG93Ci0gKiByZXRhc2tpbmcgdGhlIEhlYWRwaG9uZSBqYWNrLCBzbyBpdCB3b24ndCBiZSBhdmFpbGFibGUgaGVyZS4KKy8qIEFjZXIgVHJhdmVsTWF0ZSgvRXh0ZW5zYS9Bc3BpcmUpIG5vdGVib29rcyBoYXZlIHNpbWlsYXIgY29uZmlndXJhdGlvbiB0bworICogdGhlIEZ1aml0c3UgUzcwMngsIGJ1dCBqYWNrcyBhcmUgbWFya2VkIGRpZmZlcmVudGx5LgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDMsCi0JLml0ZW1zID0gewotCQl7ICJNaWMiLCAweDAgfSwKLQkJeyAiTGluZSIsIDB4MiB9LAotCQl7ICJDRCIsIDB4NCB9LAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSA0LAorCQkuaXRlbXMgPSB7CisJCQl7ICJNaWMiLCAweDAgfSwKKwkJCXsgIkxpbmUiLCAweDIgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCQl7ICJIZWFkcGhvbmUiLCAweDUgfSwKKwkJfSwKKwl9LAorCXsKKwkJLm51bV9pdGVtcyA9IDUsCisJCS5pdGVtcyA9IHsKKwkJCXsgIk1pYyIsIDB4MCB9LAorCQkJeyAiTGluZSIsIDB4MiB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJCXsgIkhlYWRwaG9uZSIsIDB4NiB9LAorCQkJeyAiTWl4ZXIiLCAweDUgfSwKKwkJfSwKIAl9LAogfTsKLQogLyoKICAqIFRoaXMgaXMganVzdCBwbGFjZS1ob2xkZXIsIHNvIHRoZXJlJ3Mgc29tZXRoaW5nIGZvciBhbGNfYnVpbGRfcGNtcyB0byBsb29rCiAgKiBhdCB3aGVuIGl0IGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzLiBBTEMyNjAgaGFzIG5vIG1peGVyCkBAIC0yODA2LDYgKzI5NDYsOSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIEZ1aml0c3UgUzcwMnggc2VyaWVzIGxhcHRvcHMuICBBTEMyNjAgcGluIHVzYWdlOiBNaWMvTGluZSBqYWNrID0gMHgxMiwgCisgKiBIUCBqYWNrID0gMHgxNCwgQ0QgYXVkaW8gPSAgMHgxNiwgaW50ZXJuYWwgc3BlYWtlciA9IDB4MTAuCisgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZnVqaXRzdV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLApAQCAtMjgyMiw5ICsyOTY1LDI4IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorLyogTWl4ZXIgZm9yIEFjZXIgVHJhdmVsTWF0ZSgvRXh0ZW5zYS9Bc3BpcmUpIG5vdGVib29rcy4gIE5vdGUgdGhhdCBjdXJyZW50CisgKiB2ZXJzaW9ucyBvZiB0aGUgQUxDMjYwIGRvbid0IGFjdCBvbiByZXF1ZXN0cyB0byBlbmFibGUgbWljIGJpYXMgZnJvbSBOSUQKKyAqIDB4MGYgKHVzZWQgdG8gZHJpdmUgdGhlIGhlYWRwaG9uZSBqYWNrIGluIHRoZXNlIGxhcHRvcHMpLiAgVGhlIEFMQzI2MAorICogZGF0YXNoZWV0IGRvZXNuJ3QgbWVudGlvbiB0aGlzIHJlc3RyaWN0aW9uLiAgQXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBjbGVhcgorICogd2hldGhlciB0aGlzIGJlaGF2aW91ciBpcyBpbnRlbnRpb25hbCBvciBpcyBhIGhhcmR3YXJlIGJ1ZyBpbiBjaGlwCisgKiByZXZpc2lvbnMgYXZhaWxhYmxlIGluIGVhcmx5IDIwMDYuICBUaGVyZWZvcmUgZm9yIG5vdyBhbGxvdyB0aGUKKyAqICJIZWFkcGhvbmUgSmFjayBNb2RlIiBjb250cm9sIHRvIHNwYW4gYWxsIGNob2ljZXMsIGJ1dCBpZiBpdCB0dXJucyBvdXQKKyAqIHRoYXQgdGhlIGxhY2sgb2YgbWljIGJpYXMgZm9yIHRoaXMgTklEIGlzIGludGVudGlvbmFsIHdlIGNvdWxkIGNoYW5nZSB0aGUKKyAqIG1vZGUgZnJvbSBBTENfUElOX0RJUl9JTk9VVCB0byBBTENfUElOX0RJUl9JTk9VVF9OT01JQ0JJQVMuCisgKgorICogSW4gYWRkaXRpb24sIEFjZXIgVHJhdmVsTWF0ZSgvRXh0ZW5zYS9Bc3BpcmUpIG5vdGVib29rcyBpbiBlYXJseSAyMDA2CisgKiBkb24ndCBhcHBlYXIgdG8gbWFrZSB0aGUgbWljIGJpYXMgYXZhaWxhYmxlIGZyb20gdGhlICJsaW5lIiBqYWNrLCBldmVuCisgKiB0aG91Z2ggdGhlIE5JRCB1c2VkIGZvciB0aGlzIGphY2sgKDB4MTQpIGNhbiBzdXBwbHkgaXQuICBUaGUgdGhlb3J5IGlzCisgKiB0aGF0IHBlcmhhcHMgQWNlciBoYXZlIGluY2x1ZGVkIGJsb2NraW5nIGNhcGFjaXRvcnMgYmV0d2VlbiB0aGUgQUxDMjYwCisgKiBhbmQgdGhlIG91dHB1dCBqYWNrLiAgSWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgdGhlIGNhc2UgZm9yIGFsbCBzdWNoCisgKiBtb2RlbHMgdGhlICJMaW5lIEphY2sgTW9kZSIgbW9kZSBjb3VsZCBiZSBjaGFuZ2VkIGZyb20gQUxDX1BJTl9ESVJfSU5PVVQKKyAqIHRvIEFMQ19QSU5fRElSX0lOT1VUX05PTUlDQklBUy4KKyAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9hY2VyX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJIZWFkcGhvbmUgSmFjayBNb2RlIiwgMHgwZiwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTMwMzgsNyArMzIwMCw4IEBACiB9OwogCiAvKiBJbml0aWFsaXNhdGlvbiBzZXF1ZW5jZSBmb3IgQUxDMjYwIGFzIGNvbmZpZ3VyZWQgaW4gRnVqaXRzdSBTNzAyeAotICogbGFwdG9wcy4KKyAqIGxhcHRvcHMuICBBTEMyNjAgcGluIHVzYWdlOiBNaWMvTGluZSBqYWNrID0gMHgxMiwgSFAgamFjayA9IDB4MTQsIENECisgKiBhdWRpbyA9IDB4MTYsIGludGVybmFsIHNwZWFrZXIgPSAweDEwLgogICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9mdWppdHN1X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBEaXNhYmxlIGFsbCBHUElPcyAqLwpAQCAtMzE4NSwxMCArMzM0OCwxMCBAQAogCXsweDA0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAKIAkvKiBEbyBzaW1pbGFyIHdpdGggdGhlIHNlY29uZCBBREM6IG11dGUgY2FwdHVyZSBpbnB1dCBhbXAgYW5kCi0JICogc2V0IEFEQyBjb25uZWN0aW9uIHRvIGxpbmUgKG9uIGxpbmUxIHBpbikKKwkgKiBzZXQgQURDIGNvbm5lY3Rpb24gdG8gbWljIHRvIG1hdGNoIEFMU0EncyBkZWZhdWx0IHN0YXRlLgogCSAqLwogCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwKKwl7MHgwNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJLyogTXV0ZSBhbGwgaW5wdXRzIHRvIG1peGVyIHdpZGdldCAoZXZlbiB1bmNvbm5lY3RlZCBvbmVzKSAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIG1pYzEgcGluICovCkBAIC0zMjEzLDI2ICszMzc2LDM1IEBACiBzdGF0aWMgaGRhX25pZF90IGFsYzI2MF90ZXN0X2FkY19uaWRzWzJdID0gewogCTB4MDQsIDB4MDUsCiB9OwotLyogVGhpcyBpcyBhIGJpdCBtZXNzeSBzaW5jZSB0aGUgdHdvIGlucHV0IG11eGVzIGluIHRoZSBBTEMyNjAgaGF2ZSBzbGlnaHQKLSAqIHZhcmlhdGlvbnMgaW4gdGhlaXIgc2lnbmFsIGFzc2lnbm1lbnRzLiAgVGhlIGlkZWFsIHdheSB0byBkZWFsIHdpdGggdGhpcwotICogaXMgdG8gZXh0ZW5kIGFsY19zcGVjLmlucHV0X211eCB0byBhbGxvdyBhIGRpZmZlcmVudCBpbnB1dCBNVVggZm9yIGVhY2gKLSAqIEFEQy4gIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHRlc3QgbW9kZWwgaXQncyBzdWZmaWNpZW50IHRvIGp1c3QgbGlzdAotICogYm90aCBvcHRpb25zIGZvciBhZmZlY3RlZCBzaWduYWwgaW5kaWNlcy4gIFRoZSBzZXBhcmF0ZSBpbnB1dCBtdXgKLSAqIGZ1bmN0aW9uYWxpdHkgb25seSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGlmIGEgbW9kZWwgY29tZXMgYWxvbmcgd2hpY2gKLSAqIGFjdHVhbGx5IHVzZXMgc2lnbmFscyAweDUsIDB4NiBhbmQgMHg3IGZvciBzb21ldGhpbmcgd2hpY2ggbWFrZXMgc2Vuc2UgdG8KLSAqIHJlY29yZC4KKy8qIEZvciB0ZXN0aW5nIHRoZSBBTEMyNjAsIGVhY2ggaW5wdXQgTVVYIG5lZWRzIGl0cyBvd24gZGVmaW5pdGlvbiBzaW5jZQorICogdGhlIHNpZ25hbCBhc3NpZ25tZW50cyBhcmUgZGlmZmVyZW50LiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGZpcnN0IEFEQyAKKyAqIGlzIE5JRCAweDA0LgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX3Rlc3RfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDgsCi0JLml0ZW1zID0gewotCQl7ICJNSUMxIHBpbiIsIDB4MCB9LAotCQl7ICJNSUMyIHBpbiIsIDB4MSB9LAotCQl7ICJMSU5FMSBwaW4iLCAweDIgfSwKLQkJeyAiTElORTIgcGluIiwgMHgzIH0sCi0JCXsgIkNEIHBpbiIsIDB4NCB9LAotCQl7ICJMSU5FLU9VVCBwaW4gKGNhcDEpLCBNaXhlciAoY2FwMikiLCAweDUgfSwKLQkJeyAiSFAtT1VUIHBpbiAoY2FwMSksIExJTkUtT1VUIHBpbiAoY2FwMikiLCAweDYgfSwKLQkJeyAiSFAtT1VUIHBpbiAoY2FwMiBvbmx5KSIsIDB4NyB9LAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF90ZXN0X2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSA3LAorCQkuaXRlbXMgPSB7CisJCQl7ICJNSUMxIHBpbiIsIDB4MCB9LAorCQkJeyAiTUlDMiBwaW4iLCAweDEgfSwKKwkJCXsgIkxJTkUxIHBpbiIsIDB4MiB9LAorCQkJeyAiTElORTIgcGluIiwgMHgzIH0sCisJCQl7ICJDRCBwaW4iLCAweDQgfSwKKwkJCXsgIkxJTkUtT1VUIHBpbiIsIDB4NSB9LAorCQkJeyAiSFAtT1VUIHBpbiIsIDB4NiB9LAorCQl9LAorICAgICAgICB9LAorCXsKKwkJLm51bV9pdGVtcyA9IDgsCisJCS5pdGVtcyA9IHsKKwkJCXsgIk1JQzEgcGluIiwgMHgwIH0sCisJCQl7ICJNSUMyIHBpbiIsIDB4MSB9LAorCQkJeyAiTElORTEgcGluIiwgMHgyIH0sCisJCQl7ICJMSU5FMiBwaW4iLCAweDMgfSwKKwkJCXsgIkNEIHBpbiIsIDB4NCB9LAorCQkJeyAiTWl4ZXIiLCAweDUgfSwKKwkJCXsgIkxJTkUtT1VUIHBpbiIsIDB4NiB9LAorCQkJeyAiSFAtT1VUIHBpbiIsIDB4NyB9LAorCQl9LAogICAgICAgICB9LAogfTsKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfdGVzdF9taXhlcltdID0gewpAQCAtMzI0NCw3ICszNDE2LDE3IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTE9VVDEgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJMT1VUMSBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAogCi0JLyogTW9kZXMgZm9yIHJldGFza2luZyBwaW4gd2lkZ2V0cyAqLworCS8qIE1vZGVzIGZvciByZXRhc2tpbmcgcGluIHdpZGdldHMKKwkgKiBOb3RlOiB0aGUgQUxDMjYwIGRvZXNuJ3Qgc2VlbSB0byBhY3Qgb24gcmVxdWVzdHMgdG8gZW5hYmxlIG1pYworICAgICAgICAgKiBiaWFzIGZyb20gTklEcyAweDBmIGFuZCAweDEwLiAgVGhlIEFMQzI2MCBkYXRhc2hlZXQgZG9lc24ndAorICAgICAgICAgKiBtZW50aW9uIHRoaXMgcmVzdHJpY3Rpb24uICBBdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIKKyAgICAgICAgICogdGhpcyBiZWhhdmlvdXIgaXMgaW50ZW50aW9uYWwgb3IgaXMgYSBoYXJkd2FyZSBidWcgaW4gY2hpcAorICAgICAgICAgKiByZXZpc2lvbnMgYXZhaWxhYmxlIGF0IGxlYXN0IHVwIHVudGlsIGVhcmx5IDIwMDYuICBUaGVyZWZvcmUgZm9yCisgICAgICAgICAqIG5vdyBhbGxvdyB0aGUgIkhQLU9VVCIgYW5kICJMSU5FLU9VVCIgTW9kZSBjb250cm9scyB0byBzcGFuIGFsbAorICAgICAgICAgKiBjaG9pY2VzLCBidXQgaWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIGxhY2sgb2YgbWljIGJpYXMgZm9yIHRoZXNlCisgICAgICAgICAqIE5JRHMgaXMgaW50ZW50aW9uYWwgd2UgY291bGQgY2hhbmdlIHRoZWlyIG1vZGVzIGZyb20KKyAgICAgICAgICogQUxDX1BJTl9ESVJfSU5PVVQgdG8gQUxDX1BJTl9ESVJfSU5PVVRfTk9NSUNCSUFTLgorCSAqLwogCUFMQ19QSU5fTU9ERSgiSFAtT1VUIHBpbiBtb2RlIiwgMHgxMCwgQUxDX1BJTl9ESVJfSU5PVVQpLAogCUFMQ19QSU5fTU9ERSgiTElORS1PVVQgcGluIG1vZGUiLCAweDBmLCBBTENfUElOX0RJUl9JTk9VVCksCiAJQUxDX1BJTl9NT0RFKCJMSU5FMiBwaW4gbW9kZSIsIDB4MTUsIEFMQ19QSU5fRElSX0lOT1VUKSwKQEAgLTM2MDYsNiArMzc4OCw3IEBACiAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWxjMjYwX3ZvbHVtZV9pbml0X3ZlcmJzOwogCisJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCiAJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNCBpcyB2YWxpZCAqLwpAQCAtMzcxMSw3ICszODk0LDggQEAKIAkJLmFkY19uaWRzID0gYWxjMjYwX2R1YWxfYWRjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9mdWppdHN1X2NhcHR1cmVfc291cmNlLAorCQkubnVtX211eF9kZWZzID0gQVJSQVlfU0laRShhbGMyNjBfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZXMpLAorCQkuaW5wdXRfbXV4ID0gYWxjMjYwX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2VzLAogCX0sCiAJW0FMQzI2MF9BQ0VSXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX2FjZXJfbWl4ZXIsCkBAIC0zNzIzLDcgKzM5MDcsOCBAQAogCQkuYWRjX25pZHMgPSBhbGMyNjBfZHVhbF9hZGNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2MF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjBfbW9kZXMsCi0JCS5pbnB1dF9tdXggPSAmYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2UsCisJCS5udW1fbXV4X2RlZnMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcyksCisJCS5pbnB1dF9tdXggPSBhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMsCiAJfSwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2MF9URVNUXSA9IHsKQEAgLTM3MzYsNyArMzkyMSw4IEBACiAJCS5hZGNfbmlkcyA9IGFsYzI2MF90ZXN0X2FkY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYwX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2MF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGMyNjBfdGVzdF9jYXB0dXJlX3NvdXJjZSwKKwkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX3Rlc3RfY2FwdHVyZV9zb3VyY2VzKSwKKwkJLmlucHV0X211eCA9IGFsYzI2MF90ZXN0X2NhcHR1cmVfc291cmNlcywKIAl9LAogI2VuZGlmCiB9OwpAQCAtMzgyOCw3ICs0MDE0LDYgQEAKIAkJeyAiQ0QiLCAweDQgfSwKIAl9LAogfTsKLQogI2RlZmluZSBhbGM4ODJfbXV4X2VudW1faW5mbyBhbGNfbXV4X2VudW1faW5mbwogI2RlZmluZSBhbGM4ODJfbXV4X2VudW1fZ2V0IGFsY19tdXhfZW51bV9nZXQKIApAQCAtNDczMCw2ICs0OTE1LDcgQEAKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBzcGVjLT5rY3RsX2FsbG9jOwogCiAJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJicysrXSA9IGFsYzI2Ml92b2x1bWVfaW5pdF92ZXJiczsKKwlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CiAKIAlyZXR1cm4gMTsKQEAgLTU0MDYsNiArNTU5Miw3IEBACiAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWxjODYxX2F1dG9faW5pdF92ZXJiczsKIAorCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKIAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxX2FkY19uaWRzOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IGI1NmNhNDAuLjhjNDQwZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTMxMCw2ICszMTAsOSBAQAogCSAgLnBjaV9zdWJkZXZpY2UgPSAweDBiMGIsCiAJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQMyB9LAkvKiBJbnRlbCBEOTQ1UFNOIC0gMyBTdGFjaywgOTIyMSBBMSAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCSAgLnBjaV9zdWJkZXZpY2UgPSAweDA3MDcsCisJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQNSB9LAkvKiBJbnRlbCBEOTQ1UFNWIC0gNSBTdGFjayAqLworICAgICAgIHsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAogCSAgLnBjaV9zdWJkZXZpY2UgPSAweDA0MDQsCiAJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQNSB9LAkvKiBJbnRlbCBEOTQ1R1RQIC0gNSBTdGFjayAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLApAQCAtNTM0LDYgKzUzNywyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5Mnh4X2dldF92cmVmKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKKwkJCQkJCSBBQ19QQVJfUElOX0NBUCk7CisJcGluY2FwID0gKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGKSA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVDsKKwlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfMTAwKQorCQlyZXR1cm4gQUNfUElOQ1RMX1ZSRUZfMTAwOworCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl84MCkKKwkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzgwOworCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl81MCkKKwkJcmV0dXJuIEFDX1BJTkNUTF9WUkVGXzUwOworCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl9HUkQpCisJCXJldHVybiBBQ19QSU5DVExfVlJFRl9HUkQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IHBpbl90eXBlKQogCiB7CkBAIC01NzEsOSArNTkwLDEyIEBACiAKIAlpZiAodmFsKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIG5pZCwgQUNfUElOQ1RMX09VVF9FTik7Ci0JZWxzZQotCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIG5pZCwgQUNfUElOQ1RMX0lOX0VOKTsKLQorCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgcGluY3RsID0gQUNfUElOQ1RMX0lOX0VOOworCQlpZiAoaW9faWR4KSAvKiBzZXQgVlJFRiBmb3IgbWljICovCisJCQlwaW5jdGwgfD0gc3RhYzkyeHhfZ2V0X3ZyZWYoY29kZWMsIG5pZCk7CisJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgbmlkLCBwaW5jdGwpOworCX0KICAgICAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTc2NywxMyArNzg5LDggQEAKIAkJcmV0dXJuIDA7CiAKIAl3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgcGluKTsKLQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkgewotCQkvKiBFbmFibGUgdW5zb2xpY2l0ZWQgcmVzcG9uc2VzIG9uIHRoZSBIUCB3aWRnZXQgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluLCAwLAotCQkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKLQkJCQlTVEFDX1VOU09MX0VOQUJMRSk7CisJaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApCiAJCXNwZWMtPmhwX2RldGVjdCA9IDE7Ci0JfQogCiAJbmlkID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW4sIDAsIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfTElTVCwgMCkgJiAweGZmOwogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CkBAIC04OTYsMTMgKzkxMyw4IEBACiAJCXJldHVybiAwOwogCiAJd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbik7Ci0JaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApIHsKLQkJLyogRW5hYmxlIHVuc29saWNpdGVkIHJlc3BvbnNlcyBvbiB0aGUgSFAgd2lkZ2V0ICovCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbiwgMCwKLQkJCQlBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCi0JCQkJU1RBQ19VTlNPTF9FTkFCTEUpOworCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQogCQlzcGVjLT5ocF9kZXRlY3QgPSAxOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtOTQ0LDYgKzk1NiwxMCBAQAogCiAJLyogc2V0IHVwIHBpbnMgKi8KIAlpZiAoc3BlYy0+aHBfZGV0ZWN0KSB7CisJCS8qIEVuYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgb24gdGhlIEhQIHdpZGdldCAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPmhwX3BpbiwgMCwKKwkJCQlBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJCQkJU1RBQ19VTlNPTF9FTkFCTEUpOwogCQkvKiBmYWtlIGV2ZW50IHRvIHNldCB1cCBwaW5zICovCiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQoY29kZWMsIFNUQUNfSFBfRVZFTlQgPDwgMjYpOwogCX0gZWxzZSB7CkBAIC05NTEsOSArOTY3LDEzIEBACiAJCXN0YWM5Mnh4X2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChjZmctPmlucHV0X3BpbnNbaV0pCi0JCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJCSBBQ19QSU5DVExfSU5fRU4pOworCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW2ldOworCQlpZiAobmlkKSB7CisJCQl1bnNpZ25lZCBpbnQgcGluY3RsID0gQUNfUElOQ1RMX0lOX0VOOworCQkJaWYgKGkgPT0gQVVUT19QSU5fTUlDIHx8IGkgPT0gQVVUT19QSU5fRlJPTlRfTUlDKQorCQkJCXBpbmN0bCB8PSBzdGFjOTJ4eF9nZXRfdnJlZihjb2RlYywgbmlkKTsKKwkJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgbmlkLCBwaW5jdGwpOworCQl9CiAJfQogCWlmIChjZmctPmRpZ19vdXRfcGluKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW4sCkBAIC0xMTkyLDggKzEyMTIsOCBAQAogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHZhaW9fbXV4ID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKLQkJLyogeyAiSFAiLCAweDAgfSwKLQkJICAgeyAiVW5rbm93biIsIDB4MSB9LCAqLworCQkvKiB7ICJIUCIsIDB4MCB9LCAqLworCQl7ICJMaW5lIiwgMHgxIH0sCiAJCXsgIk1pYyIsIDB4MiB9LAogCQl7ICJQQ00iLCAweDMgfSwKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCmluZGV4IDdlNjYwOGIuLjMzNmRjNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCkBAIC04Nyw3ICs4NywxNTEgQEAKICNkZWZpbmUgQ1M4NDE1X0NfQlVGRkVSCTB4MjAKICNkZWZpbmUgQ1M4NDE1X0lECQkweDdGCiAKLXN0YXRpYyB2b2lkIGF1cmVvbl9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkgeworLyogUENBOTU1NCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENBOTU1NF9ERVYgICAgIDB4NDAgICAgICAgICAgICAvKiBJMkMgZGV2aWNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUENBOTU1NF9JTiAgICAgIDB4MDAgICAgICAgICAgICAvKiBpbnB1dCBwb3J0ICovCisjZGVmaW5lIFBDQTk1NTRfT1VUICAgICAweDAxICAgICAgICAgICAgLyogb3V0cHV0IHBvcnQgKi8KKyNkZWZpbmUgUENBOTU1NF9JTlZFUlQgIDB4MDIgICAgICAgICAgICAvKiBpbnB1dCBpbnZlcnQgKi8KKyNkZWZpbmUgUENBOTU1NF9ESVIgICAgIDB4MDMgICAgICAgICAgICAvKiBwb3J0IGRpcmVjdGlvbnMgKi8KKworLyoKKyAqIEF1cmVvbiBVbml2ZXJzZSBhZGRpdGlvbmFsIGNvbnRyb2xzIHVzaW5nIFBDQTk1NTQKKyAqLworCisvKgorICogU2VuZCBkYXRhIHRvIHBjYTk1NTQKKyAqLworc3RhdGljIHZvaWQgYXVyZW9uX3BjYTk1NTRfd3JpdGUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJCSB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBjaGFyIGRldiA9IFBDQTk1NTRfREVWOyAgLyogSUQgMDEwMDAwMCwgd3JpdGUgKi8KKwl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CisKKwl0bXAgPSBzbmRfaWNlMTcxMl9ncGlvX3JlYWQoaWNlKTsKKworCXNuZF9pY2UxNzEyX2dwaW9fc2V0X21hc2soaWNlLCB+KEFVUkVPTl9TUElfTU9TSXxBVVJFT05fU1BJX0NMS3wKKwkJCQkJIEFVUkVPTl9XTV9SV3xBVVJFT05fV01fQ1N8CisJCQkJCSBBVVJFT05fQ1M4NDE1X0NTKSk7CisJdG1wIHw9IEFVUkVPTl9XTV9SVzsKKwl0bXAgfD0gQVVSRU9OX0NTODQxNV9DUyB8IEFVUkVPTl9XTV9DUzsgLyogZGlzYWJsZSBTUEkgZGV2aWNlcyAqLworCisJdG1wICY9IH5BVVJFT05fU1BJX01PU0k7CisJdG1wICY9IH5BVVJFT05fU1BJX0NMSzsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoNTApOworCisJLyogCisJICogc2VuZCBpMmMgc3RvcCBjb25kaXRpb24gYW5kIHN0YXJ0IGNvbmRpdGlvbgorCSAqIHRvIG9idGFpbiBzYW5lIHN0YXRlCisJICovCisJdG1wIHw9IEFVUkVPTl9TUElfQ0xLOworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSg1MCk7CisJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoMTAwKTsKKwl0bXAgJj0gfkFVUkVPTl9TUElfTU9TSTsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoNTApOworCXRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJc25kX2ljZTE3MTJfZ3Bpb193cml0ZShpY2UsIHRtcCk7CisJdWRlbGF5KDEwMCk7CisJLyoKKwkgKiBzZW5kIGRldmljZSBhZGRyZXNzLCBjb21tYW5kIGFuZCB2YWx1ZSwKKwkgKiBza2lwcGluZyBhY2sgY3ljbGVzIGluYmV0d2VlbgorCSAqLworCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJc3dpdGNoKGopIHsKKwkJY2FzZSAwOiB2YWwgPSBkZXY7IGJyZWFrOworCQljYXNlIDE6IHZhbCA9IHJlZzsgYnJlYWs7CisJCWNhc2UgMjogdmFsID0gZGF0YTsgYnJlYWs7CisJCX0KKwkJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJCXRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwkJCXVkZWxheSg0MCk7CisJCQlpZiAodmFsICYgKDEgPDwgaSkpCisJCQkJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwkJCWVsc2UKKwkJCQl0bXAgJj0gfkFVUkVPTl9TUElfTU9TSTsKKwkJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQkJdWRlbGF5KDQwKTsKKwkJCXRtcCB8PSBBVVJFT05fU1BJX0NMSzsKKwkJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQkJdWRlbGF5KDQwKTsKKwkJfQorICAgICAgICAgICAgICAgIHRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQl1ZGVsYXkoNDApOworCQl0bXAgfD0gQVVSRU9OX1NQSV9DTEs7CisJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCQl1ZGVsYXkoNDApOworCQl0bXAgJj0gfkFVUkVPTl9TUElfQ0xLOworCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwkJdWRlbGF5KDQwKTsKKwl9CisJdG1wICY9IH5BVVJFT05fU1BJX0NMSzsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoNDApOworCXRtcCAmPSB+QVVSRU9OX1NQSV9NT1NJOworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSg0MCk7CisJdG1wIHw9IEFVUkVPTl9TUElfQ0xLOworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSg1MCk7CisJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKKwl1ZGVsYXkoMTAwKTsKK30KKworc3RhdGljIGludCBhdXJlb25fdW5pdmVyc2VfaW5tdXhfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCWNoYXIgKnRleHRzWzNdID0geyJJbnRlcm5hbCBBdXgiLCAiV2F2ZXRhYmxlIiwgIlJlYXIgTGluZS1JbiJ9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJaWYodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1cmVvbl91bml2ZXJzZV9pbm11eF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGljZS0+c3BlYy5hdXJlb24ucGNhOTU1NF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXVyZW9uX3VuaXZlcnNlX2lubXV4X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGNoYXIgb3ZhbCwgbnZhbDsKKwlpbnQgY2hhbmdlOworCisJc25kX2ljZTE3MTJfc2F2ZV9ncGlvX3N0YXR1cyhpY2UpOworCQorCW92YWwgPSBpY2UtPnNwZWMuYXVyZW9uLnBjYTk1NTRfb3V0OworCW52YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpZiAoKGNoYW5nZSA9IChvdmFsICE9IG52YWwpKSkgeworCQlhdXJlb25fcGNhOTU1NF93cml0ZShpY2UsIFBDQTk1NTRfT1VULCBudmFsKTsKKwkJaWNlLT5zcGVjLmF1cmVvbi5wY2E5NTU0X291dCA9IG52YWw7CisJfQorCXNuZF9pY2UxNzEyX3Jlc3RvcmVfZ3Bpb19zdGF0dXMoaWNlKTsKKwkKKwlyZXR1cm4gY2hhbmdlOworfQorCisKK3N0YXRpYyB2b2lkIGF1cmVvbl9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkgICAgICB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CiAJdW5zaWduZWQgaW50IHRtcDsKIAogCS8qIFNlbmQgYWRkcmVzcyB0byBYSUxJTlggY2hpcCAqLwpAQCAtMTQ2LDcgKzI5MCw4IEBACiAvKgogICogSW5pdGlhbGl6ZSBTVEFDOTc0NCBjaGlwCiAgKi8KLXN0YXRpYyBpbnQgYXVyZW9uX2FjOTdfaW5pdCAoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpIHsKK3N0YXRpYyBpbnQgYXVyZW9uX2FjOTdfaW5pdCAoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCit7CiAJaW50IGk7CiAJc3RhdGljIHVuc2lnbmVkIHNob3J0IGFjOTdfZGVmYXVsdHNbXSA9IHsKIAkJMHgwMCwgMHg5NjQwLApAQCAtMTU5OCw3ICsxNzQzLDE1IEBACiAgCQkuZ2V0ID0gYXVyZW9uX2FjOTdfdm9sX2dldCwKICAJCS5wdXQgPSBhdXJlb25fYWM5N192b2xfcHV0LAogIAkJLnByaXZhdGVfdmFsdWUgPSBBQzk3X1ZJREVPfEFVUkVPTl9BQzk3X1NURVJFTwotIAl9CisgCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQXV4IFNvdXJjZSIsCisJCS5pbmZvID0gYXVyZW9uX3VuaXZlcnNlX2lubXV4X2luZm8sCisJCS5nZXQgPSBhdXJlb25fdW5pdmVyc2VfaW5tdXhfZ2V0LAorCQkucHV0ID0gYXVyZW9uX3VuaXZlcnNlX2lubXV4X3B1dAorCX0KKwogfTsKIAogCQpAQCAtMTg1Niw2ICsyMDA5LDEwIEBACiAJfQogCiAJc25kX2ljZTE3MTJfcmVzdG9yZV9ncGlvX3N0YXR1cyhpY2UpOworCisgICAgICAgIC8qIGluaXRpYWxpemUgUENBOTU1NCBwaW4gZGlyZWN0aW9ucyAmIHNldCBkZWZhdWx0IGlucHV0Ki8KKwlhdXJlb25fcGNhOTU1NF93cml0ZShpY2UsIFBDQTk1NTRfRElSLCAweDAwKTsKKwlhdXJlb25fcGNhOTU1NF93cml0ZShpY2UsIFBDQTk1NTRfT1VULCAweDAwKTsgICAvKiBpbnRlcm5hbCBBVVggKi8KIAkKIAlpY2UtPnNwZWMuYXVyZW9uLm1hc3RlclswXSA9IFdNX1ZPTF9NVVRFOwogCWljZS0+c3BlYy5hdXJlb24ubWFzdGVyWzFdID0gV01fVk9MX01VVEU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggYjg4ZWViYS4uYzU2NzkzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMTA4LDcgKzEwNyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGR4cl9lbmFibGUsICJFbmFibGUgRFhSIHN1cHBvcnQgZm9yIFRlcnJhdGVjIERNWDZGSVJFLiIpOwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaWNlMTcxMl9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaWNlMTcxMl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9JQ0UsIFBDSV9ERVZJQ0VfSURfSUNFXzE3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBJQ0UxNzEyICovCiAJeyAwLCB9CiB9OwpAQCAtMjQwMiw3ICsyNDAxLDcgQEAKIAlpZiAoaWNlLT5lZXByb20uc3VidmVuZG9yID09IElDRTE3MTJfU1VCREVWSUNFX0RNWDZGSVJFICYmICFpY2UtPmR4cl9lbmFibGUpIHsKICAgICAgICAgICAgICAgICAvKiBMaW1pdCBhY3RpdmUgQURDcyBhbmQgREFDcyB0byA2OyAgKi8KICAgICAgICAgICAgICAgICAvKiBOb3RlOiBEWFIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGljZS0+cGNpLCAweDYwLCAweDBhKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGljZS0+cGNpLCAweDYwLCAweDJhKTsKIAl9IGVsc2UgewogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaWNlLT5wY2ksIDB4NjAsIGljZS0+ZWVwcm9tLmRhdGFbSUNFX0VFUDFfQ09ERUNdKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKaW5kZXggZjliMjJkNC4uMDUzZjhlNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaApAQCAtMzczLDYgKzM3Myw3IEBACiAJCQl1bnNpZ25lZCBpbnQgY3M4NDE1X211eDsKIAkJCXVuc2lnbmVkIHNob3J0IG1hc3RlclsyXTsKIAkJCXVuc2lnbmVkIHNob3J0IHZvbFs4XTsKKwkJCXVuc2lnbmVkIGNoYXIgcGNhOTU1NF9vdXQ7CiAJCX0gYXVyZW9uOwogCQkvKiBBQzk3IHJlZ2lzdGVyIGNhY2hlIGZvciBQaGFzZTI4ICovCiAJCXN0cnVjdCBwaGFzZTI4X3NwZWMgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGZjZTYxNmMuLmIxYzAwN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTg2LDcgKzg2LDcgQEAKIAogCiAvKiBCb3RoIFZUMTcyMCBhbmQgVlQxNzI0IGhhdmUgdGhlIHNhbWUgUENJIElEcyAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92dDE3MjRfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z0MTcyNF9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9JQ0UsIFBDSV9ERVZJQ0VfSURfVlQxNzI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCBlYmJmMmNmLi4wZGY3NjAyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJdTMyIGludF9zdGFfbWFzazsJCS8qIGludGVycnVwdCBzdGF0dXMgbWFzayAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pbnRlbDh4MF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaW50ZWw4eDBfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4ODA4NiwgMHgyNDE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfSU5URUwgfSwJLyogODI4MDFBQSAqLwogCXsgMHg4MDg2LCAweDI0MjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9JTlRFTCB9LAkvKiA4MjkwMUFCICovCiAJeyAweDgwODYsIDB4MjQ0NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQkEgKi8KQEAgLTEyOTMsNiArMTI5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiAwIC8vIE5ZSQogc3RhdGljIGludCBzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CkBAIC0xMzA4LDcgKzEzMDksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMCAvLyBOWUkKIHN0YXRpYyBpbnQgc25kX2ludGVsOHgwX2FsaV9zcGRpZm91dF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBpbnRlbDh4MCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKQEAgLTE0MzUsNiArMTQzNSw3IEBACiAJLnBvaW50ZXIgPQlzbmRfaW50ZWw4eDBfcGNtX3BvaW50ZXIsCiB9OwogCisjaWYgMCAvLyBOWUkKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2ludGVsOHgwX2FsaV9zcGRpZmluX29wcyA9IHsKIAkub3BlbiA9CQlzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fb3BlbiwKIAkuY2xvc2UgPQlzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fY2xvc2UsCkBAIC0xNDQ2LDcgKzE0NDcsNiBAQAogCS5wb2ludGVyID0Jc25kX2ludGVsOHgwX3BjbV9wb2ludGVyLAogfTsKIAotI2lmIDAgLy8gTllJCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9pbnRlbDh4MF9hbGlfc3BkaWZvdXRfb3BzID0gewogCS5vcGVuID0JCXNuZF9pbnRlbDh4MF9hbGlfc3BkaWZvdXRfb3BlbiwKIAkuY2xvc2UgPQlzbmRfaW50ZWw4eDBfYWxpX3NwZGlmb3V0X2Nsb3NlLApAQCAtMTU4Miw3ICsxNTgyLDcgQEAKIAl7CiAJCS5zdWZmaXggPSAiSUVDOTU4IiwKIAkJLnBsYXliYWNrX29wcyA9ICZzbmRfaW50ZWw4eDBfYWxpX2FjOTdzcGRpZm91dF9vcHMsCi0JCS5jYXB0dXJlX29wcyA9ICZzbmRfaW50ZWw4eDBfYWxpX3NwZGlmaW5fb3BzLAorCQkvKiAuY2FwdHVyZV9vcHMgPSAmc25kX2ludGVsOHgwX2FsaV9zcGRpZmluX29wcywgKi8KIAkJLnByZWFsbG9jX3NpemUgPSA2NCAqIDEwMjQsCiAJCS5wcmVhbGxvY19tYXhfc2l6ZSA9IDEyOCAqIDEwMjQsCiAJCS5hYzk3X2lkeCA9IEFMSURfQUM5N1NQRElGT1VULApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDQ3ZTI2YWEuLjcyMDYzNWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCXVuc2lnbmVkIGludCBwY21fcG9zX3NoaWZ0OwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pbnRlbDh4MG1faWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ludGVsOHgwbV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg4MDg2LCAweDI0MTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUFBICovCiAJeyAweDgwODYsIDB4MjQyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0lOVEVMIH0sCS8qIDgyOTAxQUIgKi8KIAl7IDB4ODA4NiwgMHgyNDQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfSU5URUwgfSwJLyogODI4MDFCQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA0NzIxYzA5Li5lMzlmYWQxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtNDI0LDcgKzQyNCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBLb3JnIDEyMTIgc291bmRjYXJkLiIpOwogTU9EVUxFX0FVVEhPUigiSGFyb2xkbyBHYW1hbCA8Z2FtYWxAYWx0ZXJuZXguY29tLmJyPiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2tvcmcxMjEyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9rb3JnMTIxMl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnZlbmRvcgkgICA9IDB4MTBiNSwKIAkJLmRldmljZQkgICA9IDB4OTA2ZCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNDQzOTNlMS4uMTkyOGUwNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTgzMSw4ICs4MzAsOCBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpOwotCXN0cnVjdCBtM19xdWlyayAqcXVpcms7Ci0Jc3RydWN0IG0zX2h2X3F1aXJrICpodl9xdWlyazsKKwljb25zdCBzdHJ1Y3QgbTNfcXVpcmsgKnF1aXJrOworCWNvbnN0IHN0cnVjdCBtM19odl9xdWlyayAqaHZfcXVpcms7CiAKIAlpbnQgZGFjc19hY3RpdmU7CiAJaW50IHRpbWVyX3VzZXJzOwpAQCAtODcwLDcgKzg2OSw3IEBACiAvKgogICogcGNpIGlkcwogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX20zX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9tM19pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdST18xLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtODkyLDcgKzg5MSw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfbTNfaWRzKTsKIAotc3RhdGljIHN0cnVjdCBtM19xdWlyayBtM19xdWlya19saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG0zX3F1aXJrIG0zX3F1aXJrX2xpc3RbXSA9IHsKIAkvKiBwYW5hc29uaWMgQ0YtMjggInRvdWdoYm9vayIgKi8KIAl7CiAJCS5uYW1lID0gIlBhbmFzb25pYyBDRi0yOCIsCkBAIC05NTAsNyArOTQ5LDcgQEAKIH07CiAKIC8qIFRoZXNlIHZhbHVlcyBjYW1lIGZyb20gdGhlIFdpbmRvd3MgZHJpdmVyLiAqLwotc3RhdGljIHN0cnVjdCBtM19odl9xdWlyayBtM19odl9xdWlya19saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG0zX2h2X3F1aXJrIG0zX2h2X3F1aXJrX2xpc3RbXSA9IHsKIAkvKiBBbGxlZ3JvIGNoaXBzICovCiAJeyAweDEyNUQsIDB4MTk4OCwgMHgwRTExLCAweDAwMkUsIEhWX0NUUkxfRU5BQkxFIHwgSFZfQlVUVE9OX0ZST01fR0QsIDAgfSwKIAl7IDB4MTI1RCwgMHgxOTg4LCAweDBFMTEsIDB4MDA5NCwgSFZfQ1RSTF9FTkFCTEUgfCBIVl9CVVRUT05fRlJPTV9HRCwgMCB9LApAQCAtMTM2MSw3ICsxMzYwLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBsYXlfdmFscyB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXlfdmFscyB7CiAJdTE2IGFkZHIsIHZhbDsKIH0gcHZbXSA9IHsKIAl7Q0RBVEFfTEVGVF9WT0xVTUUsIEFSQl9WT0xVTUV9LApAQCAtMTQyOCw3ICsxNDI3LDcgQEAKIC8qCiAgKiAgICBOYXRpdmUgcmVjb3JkIGRyaXZlciAKICAqLwotc3RhdGljIHN0cnVjdCByZWNfdmFscyB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlY192YWxzIHsKIAl1MTYgYWRkciwgdmFsOwogfSBydltdID0gewogCXtDREFUQV9MRUZUX1ZPTFVNRSwgQVJCX1ZPTFVNRX0sCkBAIC0xNTk4LDEyICsxNTk3LDI2IEBACiAJaWYgKCEgcy0+cnVubmluZykKIAkJcmV0dXJuOwogCi0JaHdwdHIgPSBzbmRfbTNfZ2V0X3BvaW50ZXIoY2hpcCwgcywgc3VicykgJSBzLT5kbWFfc2l6ZTsKLQlkaWZmID0gKHMtPmRtYV9zaXplICsgaHdwdHIgLSBzLT5od3B0cikgJSBzLT5kbWFfc2l6ZTsKKwlod3B0ciA9IHNuZF9tM19nZXRfcG9pbnRlcihjaGlwLCBzLCBzdWJzKTsKKworCS8qIHRyeSB0byBhdm9pZCBleHBlbnNpdmUgbW9kdWxvIGRpdmlzaW9ucyAqLworCWlmIChod3B0ciA+PSBzLT5kbWFfc2l6ZSkKKwkJaHdwdHIgJT0gcy0+ZG1hX3NpemU7CisKKwlkaWZmID0gcy0+ZG1hX3NpemUgKyBod3B0ciAtIHMtPmh3cHRyOworCWlmIChkaWZmID49IHMtPmRtYV9zaXplKQorCQlkaWZmICU9IHMtPmRtYV9zaXplOworCiAJcy0+aHdwdHIgPSBod3B0cjsKIAlzLT5jb3VudCArPSBkaWZmOworCiAJaWYgKHMtPmNvdW50ID49IChzaWduZWQpcy0+cGVyaW9kX3NpemUpIHsKLQkJcy0+Y291bnQgJT0gcy0+cGVyaW9kX3NpemU7CisKKwkJaWYgKHMtPmNvdW50IDwgMiAqIChzaWduZWQpcy0+cGVyaW9kX3NpemUpCisJCQlzLT5jb3VudCAtPSAoc2lnbmVkKXMtPnBlcmlvZF9zaXplOworCQllbHNlCisJCQlzLT5jb3VudCAlPSBzLT5wZXJpb2Rfc2l6ZTsKKwogCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnMpOwogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKQEAgLTE5NDIsNiArMTk1NSw3IEBACiAJZG8gewogCQlpZiAoISAoc25kX20zX2luYihjaGlwLCAweDMwKSAmIDEpKQogCQkJcmV0dXJuIDA7CisJCWNwdV9yZWxheCgpOwogCX0gd2hpbGUgKGktLSA+IDApOwogCiAJc25kX3ByaW50ayhLRVJOX0VSUiAiYWM5NyBzZXJpYWwgYnVzIGJ1c3lcbiIpOwpAQCAtMTk1MywxNiArMTk2NywxOCBAQAogewogCXN0cnVjdCBzbmRfbTMgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBkYXRhOworCXVuc2lnbmVkIHNob3J0IGRhdGEgPSAweGZmZmY7CiAKIAlpZiAoc25kX20zX2FjOTdfd2FpdChjaGlwKSkKLQkJcmV0dXJuIDB4ZmZmZjsKKwkJZ290byBmYWlsOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5hYzk3X2xvY2ssIGZsYWdzKTsKIAlzbmRfbTNfb3V0YihjaGlwLCAweDgwIHwgKHJlZyAmIDB4N2YpLCBDT0RFQ19DT01NQU5EKTsKIAlpZiAoc25kX20zX2FjOTdfd2FpdChjaGlwKSkKLQkJcmV0dXJuIDB4ZmZmZjsKKwkJZ290byBmYWlsX3VubG9jazsKIAlkYXRhID0gc25kX20zX2ludyhjaGlwLCBDT0RFQ19EQVRBKTsKK2ZhaWxfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmFjOTdfbG9jaywgZmxhZ3MpOworZmFpbDoKIAlyZXR1cm4gZGF0YTsKIH0KIApAQCAtMjEyMSw3ICsyMTM3LDcgQEAKICAqIERTUCBDb2RlIGltYWdlcwogICovCiAKLXN0YXRpYyB1MTYgYXNzcF9rZXJuZWxfaW1hZ2VbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHUxNiBhc3NwX2tlcm5lbF9pbWFnZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAgICAgMHg3OTgwLCAweDAwMzAsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDNCNCwgMHg3OTgwLCAweDAwRkIsIDB4Nzk4MCwgMHgwMERELCAweDc5ODAsIDB4MDNCNCwgCiAgICAgMHg3OTgwLCAweDAzMzIsIDB4Nzk4MCwgMHgwMjg3LCAweDc5ODAsIDB4MDNCNCwgMHg3OTgwLCAweDAzQjQsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDNCNCwgCiAgICAgMHg3OTgwLCAweDAzMUEsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDIyRiwgMHg3OTgwLCAweDAzQjQsIDB4Nzk4MCwgMHgwM0I0LCAweDc5ODAsIDB4MDNCNCwgCkBAIC0yMjA4LDcgKzIyMjQsNyBAQAogICogTWluaSBzYW1wbGUgcmF0ZSBjb252ZXJ0ZXIgY29kZSBpbWFnZQogICogdGhhdCBpcyB0byBiZSBsb2FkZWQgYXQgMHg0MDAgb24gdGhlIERTUC4KICAqLwotc3RhdGljIHUxNiBhc3NwX21pbmlzcmNfaW1hZ2VbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHUxNiBhc3NwX21pbmlzcmNfaW1hZ2VbXSBfX2RldmluaXRkYXRhID0gewogCiAgICAgMHhCRjgwLCAweDEwMUUsIDB4OTA2RSwgMHgwMDZFLCAweDhCODgsIDB4Njk4MCwgMHhFRjg4LCAweDkwNkYsIDB4MEQ2RiwgMHg2OTAwLCAweEVCMDgsIDB4MDQxMiwgCiAgICAgMHhCQzIwLCAweDY5NkUsIDB4QjgwMSwgMHg5MDZFLCAweDc5ODAsIDB4MDQwMywgMHhCOTBFLCAweDg4MDcsIDB4QkU0MywgMHhCRjAxLCAweEJFNDcsIDB4QkU0MSwgCkBAIC0yMjUxLDcgKzIyNjcsNyBAQAogICovCiAKICNkZWZpbmUgTUlOSVNSQ19MUEZfTEVOIDEwCi1zdGF0aWMgdTE2IG1pbmlzcmNfbHBmW01JTklTUkNfTFBGX0xFTl0gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgbWluaXNyY19scGZbTUlOSVNSQ19MUEZfTEVOXSBfX2RldmluaXRkYXRhID0gewogCTBYMDc0MywgMFgxMTA0LCAwWDBBNEMsIDBYRjg4RCwgMFgyNDJDLAogCTBYMTAyMywgMFgxQUE5LCAwWDBCNjAsIDBYRUZERCwgMFgxODZGCiB9OwpAQCAtMjM1OCw3ICsyMzc0LDcgQEAKIAkgKi8KIAogCS8qCi0JICogYWxpZ24gaW5zdGFuY2UgYWRkcmVzcyB0byAyNTYgYnl0ZXMgc28gdGhhdCBpdCdzCisJICogYWxpZ24gaW5zdGFuY2UgYWRkcmVzcyB0byAyNTYgYnl0ZXMgc28gdGhhdCBpdHMKIAkgKiBzaGlmdGVkIGxpc3QgYWRkcmVzcyBpcyBhbGlnbmVkLgogCSAqIGxpc3QgYWRkcmVzcyA9IChtZW0gYWRkcmVzcyA+PiAxKSA+PiA3OwogCSAqLwpAQCAtMjY0Nyw4ICsyNjYzLDggQEAKIHsKIAlzdHJ1Y3Qgc25kX20zICpjaGlwOwogCWludCBpLCBlcnI7Ci0Jc3RydWN0IG0zX3F1aXJrICpxdWlyazsKLQlzdHJ1Y3QgbTNfaHZfcXVpcmsgKmh2X3F1aXJrOworCWNvbnN0IHN0cnVjdCBtM19xdWlyayAqcXVpcms7CisJY29uc3Qgc3RydWN0IG0zX2h2X3F1aXJrICpodl9xdWlyazsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0Jc25kX20zX2Rldl9mcmVlLAogCX07CkBAIC0yODQzLDEyICsyODU5LDEyIEBACiAJfQogCiAjaWYgMCAvKiBUT0RPOiBub3Qgc3VwcG9ydGVkIHlldCAqLwotCS8qIFRPRE8gZW5hYmxlIG1pZGkgaXJxIGFuZCBpL28gKi8KKwkvKiBUT0RPIGVuYWJsZSBNSURJIElSUSBhbmQgSS9PICovCiAJZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjaGlwLT5jYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAogCQkJCSAgY2hpcC0+aW9iYXNlICsgTVBVNDAxX0RBVEFfUE9SVCwgMSwKIAkJCQkgIGNoaXAtPmlycSwgMCwgJmNoaXAtPnJtaWRpKTsKIAlpZiAoZXJyIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWFlc3RybzM6IG5vIG1pZGkgc3VwcG9ydC5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWVzdHJvMzogbm8gTUlESSBzdXBwb3J0LlxuIik7CiAjZW5kaWYKIAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYjVhMDk1MC4uMDljYzA3OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC02Miw3ICs2MSw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbWl4YXJ0X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9taXhhcnRfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTA1NywgMHgwMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBNQzgyNDAgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IGNjMjk3YWIuLmI5MmQ2NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIC8qCiAgKiBQQ0kgaWRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbm0yNTZfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX25tMjU2X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZYTF9QTFVTX0FVRElPLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggMzU4NzVjOC4uZGFmYTIyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTc0LDcgKzczLDcgQEAKIAlQQ0lfSURfTEFTVAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjeGhyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjeGhyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDEwYjUsIDB4OTY1NiwgMHgxMzY5LCAweGIwMDEsIDAsIDAsIFBDSV9JRF9WWDg4MkhSLCB9LCAgIC8qIFZYODgySFIgKi8KIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjEwMSwgMCwgMCwgUENJX0lEX1BDWDg4MkhSLCB9LCAgLyogUENYODgySFIgKi8KIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjIwMSwgMCwgMCwgUENJX0lEX1ZYODgxSFIsIH0sICAgLyogVlg4ODFIUiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMKaW5kZXggZmRjNjUyYy4uYzQwZjU5MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jCkBAIC0yNzQsMTIgKzI3NCw5IEBACiAKIAkvKiB0ZXN0IGZpcnN0IHhpbGlueCAqLwogCWNoaXBzYyA9IFBDWEhSX0lOUEwobWdyLCBQQ1hIUl9QTFhfQ0hJUFNDKTsKLQlpZiAoIXNlY29uZCkgewotCQlpZiAoY2hpcHNjICYgUENYSFJfQ0hJUFNDX0dQSV9VU0VSSSkgewotCQkJc25kX3ByaW50ZGQoIm5vIG5lZWQgdG8gbG9hZCBmaXJzdCB4aWxpbnhcbiIpOwotCQkJcmV0dXJuIDA7IC8qIGZpcnN0IHhpbGlueCBpcyBhbHJlYWR5IHByZXNlbnQgYW5kIGNhbm5vdCBiZSByZXNldCAqLwotCQl9Ci0JfSBlbHNlIHsKKwkvKiBSRVYwMSBjYXJkcyBkbyBub3Qgc3VwcG9ydCB0aGUgUENYSFJfQ0hJUFNDX0dQSV9VU0VSSSBiaXQgYW55bW9yZSAqLworCS8qIHRoaXMgYml0IHdpbGwgYWx3YXlzIGJlIDE7IG5vIHBvc3NpYmlsaXR5IHRvIHRlc3QgcHJlc2VuY2Ugb2YgZmlyc3QgeGlsaW54ICovCisJaWYoc2Vjb25kKSB7CiAJCWlmICgoY2hpcHNjICYgUENYSFJfQ0hJUFNDX0dQSV9VU0VSSSkgPT0gMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3IgbG9hZGluZyBmaXJzdCB4aWxpbnhcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCmluZGV4IDAzNTE3YzEuLjM2OWMxOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCkBAIC0zODUsOCArMzg1LDggQEAKIAlmdy5zaXplID0gZHNwLT5sZW5ndGg7CiAJZncuZGF0YSA9IHZtYWxsb2MoZncuc2l6ZSk7CiAJaWYgKCEgZncuZGF0YSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwY3hocjogY2Fubm90IGFsbG9jYXRlIGRzcCBpbWFnZSAoJWQgYnl0ZXMpXG4iLAotCQkJICAgZncuc2l6ZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBjeGhyOiBjYW5ub3QgYWxsb2NhdGUgZHNwIGltYWdlICglbHUgYnl0ZXMpXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZncuc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoZncuZGF0YSwgZHNwLT5pbWFnZSwgZHNwLT5sZW5ndGgpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9NYWtlZmlsZSBiL3NvdW5kL3BjaS9yaXB0aWRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZDJlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK3NuZC1yaXB0aWRlLW9ianMgOj0gcmlwdGlkZS5vCisKK29iai0kKENPTkZJR19TTkRfUklQVElERSkgKz0gc25kLXJpcHRpZGUubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2M5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKQEAgLTAsMCArMSwyMjIzIEBACisvKgorICogICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBSaXB0aWRlIFNvdW5kY2hpcAorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwNCBQZXRlciBHcnViZXIgPG5va29zQGdteC5uZXQ+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworLyoKKyAgSGlzdG9yeToKKyAgIC0gMDIvMTUvMjAwNCBmaXJzdCByZWxlYXNlCisgICAKKyAgVGhpcyBEcml2ZXIgaXMgYmFzZWQgb24gdGhlIE9TUyBEcml2ZXIgdmVyc2lvbiBmcm9tIExpbnV4YW50IChyaXB0aWRlLTAuNmxueHRiZXRhMDMxMTExMDApCisgIGNyZWRpdHMgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZXM6CisgIAorICBNT0RVTEUgTkFNRTogICAgICAgIGNueHRfcnQuaCAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgICAgSy4gTGF6YXJldiAgKFRyYW5zY3JpYmVkIGJ5IEtOTCkKKyAgSElTVE9SWTogICAgICAgICBNYWpvciBSZXZpc2lvbiAgICAgICAgICAgICAgIERhdGUgICAgICAgIEJ5CisgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0gICAgIC0tLS0tCisgICAgICAgICAgICBDcmVhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgMDIvMS8yMDAwICAgICBLTkwKKworICBNT0RVTEUgTkFNRTogICAgIGludF9tZGwuYyAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgS29uc3RhbnRpbiBMYXphcmV2ICAgIChUcmFuc2NyaWJlZCBieSBLTkwpCisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICBEYXRlICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tICAgICAtLS0tLQorICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLzAxLzk5ICAgICAgS05MCisJICAgIAorICBNT0RVTEUgTkFNRTogICAgICAgIHJpcHRpZGUuaCAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgICAgTy4gRHJ1emhpbmluICAoVHJhbnNjcmliZWQgYnkgT0xEKQorICBISVNUT1JZOiAgICAgICAgIE1ham9yIFJldmlzaW9uICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgQnkKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLSAgICAgLS0tLS0KKyAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC8xNi85NyAgICAgIE9MRAorCisgIE1PRFVMRSBOQU1FOiAgICAgICAgUnBfQ21kaWYuY3BwICAgICAgICAgICAgICAgICAgICAgICAKKyAgQVVUSE9SOiAgICAgICAgICAgICBPLiBEcnV6aGluaW4gIChUcmFuc2NyaWJlZCBieSBPTEQpCisgICAgICAgICAgICAgICAgICAgICAgSy4gTGF6YXJldiAgICAoVHJhbnNjcmliZWQgYnkgS05MKQorICBISVNUT1JZOiAgICAgICAgIE1ham9yIFJldmlzaW9uICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgQnkKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLSAgICAgLS0tLS0KKyAgICAgICAgICAgIEFkb3B0ZWQgZnJvbSBOVDQgZHJpdmVyICAgICAgICAgICAgNi8yMi85OSAgICAgIE9MRAorICAgICAgICAgICAgUG9ydGVkIHRvIExpbnV4ICAgICAgICAgICAgICAgICAgICA5LzAxLzk5ICAgICAgS05MCisKKyAgTU9EVUxFIE5BTUU6ICAgICAgICBydF9ody5jICAgICAgICAgICAgICAgICAgICAgICAKKyAgQVVUSE9SOiAgICAgICAgICAgICBPLiBEcnV6aGluaW4gIChUcmFuc2NyaWJlZCBieSBPTEQpCisgICAgICAgICAgICAgICAgICAgICAgQy4gTGF6YXJldiAgICAoVHJhbnNjcmliZWQgYnkgQ05MKQorICBISVNUT1JZOiAgICAgICAgIE1ham9yIFJldmlzaW9uICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgQnkKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLSAgICAgLS0tLS0KKyAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS8xOC85NyAgICAgIE9MRAorICAgICAgICAgICAgSGFyZHdhcmUgZnVuY3Rpb25zIGZvciBSaXBUaWRlICAgIDExLzI0Lzk3ICAgICAgQ05MCisgICAgICAgICAgICAoRVMxKSBhcmUgY29kZWQKKyAgICAgICAgICAgIEhhcmR3YXJlIGZ1bmN0aW9ucyBmb3IgUmlwVGlkZSAgICAxMi8yNC85NyAgICAgIENOTAorICAgICAgICAgICAgKEEwKSBhcmUgY29kZWQKKyAgICAgICAgICAgIEhhcmR3YXJlIGZ1bmN0aW9ucyBmb3IgUmlwVGlkZSAgICAwMy8yMC85OCAgICAgIENOTAorICAgICAgICAgICAgKEExKSBhcmUgY29kZWQKKyAgICAgICAgICAgIEJvb3QgbG9hZGVyIGlzIGluY2x1ZGVkICAgICAgICAgICAwNS8wNy85OCAgICAgIENOTAorICAgICAgICAgICAgUmVkZXNpZ25lZCBmb3IgV0RNICAgICAgICAgICAgICAgIDA3LzI3Lzk4ICAgICAgQ05MCisgICAgICAgICAgICBSZWRlc2lnbmVkIGZvciBMaW51eCAgICAgICAgICAgICAgMDkvMDEvOTkgICAgICBDTkwKKworICBNT0RVTEUgTkFNRTogICAgICAgIHJ0X2h3LmgKKyAgQVVUSE9SOiAgICAgICAgICAgICBDLiBMYXphcmV2ICAgIChUcmFuc2NyaWJlZCBieSBDTkwpCisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICBEYXRlICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tICAgICAtLS0tLQorICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLzE4Lzk3ICAgICAgQ05MCisKKyAgTU9EVUxFIE5BTUU6ICAgICBydF9tZGwuYyAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgS29uc3RhbnRpbiBMYXphcmV2ICAgIChUcmFuc2NyaWJlZCBieSBLTkwpCisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICBEYXRlICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tICAgICAtLS0tLQorICAgICAgICAgICAgQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLzAxLzk5ICAgICAgS05MCisKKyAgTU9EVUxFIE5BTUU6ICAgICAgICBtaXhlci5oICAgICAgICAgICAgICAgICAgICAgICAgCisgIEFVVEhPUjogICAgICAgICAgICAgSy4gS2VubmV5CisgIEhJU1RPUlk6ICAgICAgICAgTWFqb3IgUmV2aXNpb24gICAgICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgICBCeQorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgLS0tLS0tLS0gICAgIC0tLS0tCisgICAgICAgICAgICBDcmVhdGVkIGZyb20gTVMgVzk1IFNhbXBsZSAgICAgICAgICAgICAxMS8yOC85NSAgICAgIEtSUworICAgICAgICAgICAgUmlwVGlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAvMTUvOTcgICAgICBLUlMKKyAgICAgICAgICAgIEFkb3B0ZWQgZm9yIFdpbmRvd3MgTlQgZHJpdmVyICAgICAgICAgIDAxLzIwLzk4ICAgICAgQ05MCisqLworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfR0FNRVBPUlQpIHx8IChkZWZpbmVkKE1PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfR0FNRVBPUlRfTU9EVUxFKSkKKyNkZWZpbmUgU1VQUE9SVF9KT1lTVElDSyAxCisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiUGV0ZXIgR3J1YmVyIDxub2tvc0BnbXgubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJyaXB0aWRlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDb25leGFudCxSaXB0aWRlfX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOworCisjaWZkZWYgU1VQUE9SVF9KT1lTVElDSworc3RhdGljIGludCBqb3lzdGlja19wb3J0W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB4MjAwIH07CisjZW5kaWYKK3N0YXRpYyBpbnQgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0geyBbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMHgzMzAgfTsKK3N0YXRpYyBpbnQgb3BsM19wb3J0W1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB4Mzg4IH07CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgUmlwdGlkZSBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIFJpcHRpZGUgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBSaXB0aWRlIHNvdW5kY2FyZC4iKTsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCittb2R1bGVfcGFyYW1fYXJyYXkoam95c3RpY2tfcG9ydCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moam95c3RpY2tfcG9ydCwgIkpveXN0aWNrIHBvcnQgIyBmb3IgUmlwdGlkZSBzb3VuZGNhcmQuIik7CisjZW5kaWYKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfcG9ydCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFU0MDEgcG9ydCAjIGZvciBSaXB0aWRlIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShvcGwzX3BvcnQsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG9wbDNfcG9ydCwgIk9QTDMgcG9ydCAjIGZvciBSaXB0aWRlIGRyaXZlci4iKTsKKworLyoKKyAqLworCisjZGVmaW5lIE1QVTQwMV9IV19SSVBUSURFIE1QVTQwMV9IV19NUFU0MDEKKyNkZWZpbmUgT1BMM19IV19SSVBUSURFICAgT1BMM19IV19PUEwzCisKKyNkZWZpbmUgUENJX0VYVF9DYXBJZCAgICAgICAweDQwCisjZGVmaW5lIFBDSV9FWFRfTmV4dENhcFBydCAgMHg0MQorI2RlZmluZSBQQ0lfRVhUX1BXTUMgICAgICAgIDB4NDIKKyNkZWZpbmUgUENJX0VYVF9QV1NDUiAgICAgICAweDQ0CisjZGVmaW5lIFBDSV9FWFRfRGF0YTAwICAgICAgMHg0NgorI2RlZmluZSBQQ0lfRVhUX1BNU0NSX0JTRSAgIDB4NDcKKyNkZWZpbmUgUENJX0VYVF9TQl9CYXNlICAgICAweDQ4CisjZGVmaW5lIFBDSV9FWFRfRk1fQmFzZSAgICAgMHg0YQorI2RlZmluZSBQQ0lfRVhUX01QVV9CYXNlICAgIDB4NEMKKyNkZWZpbmUgUENJX0VYVF9HYW1lX0Jhc2UgICAweDRFCisjZGVmaW5lIFBDSV9FWFRfTGVnYWN5X01hc2sgMHg1MAorI2RlZmluZSBQQ0lfRVhUX0FzaWNSZXYgICAgIDB4NTIKKyNkZWZpbmUgUENJX0VYVF9SZXNlcnZlZDMgICAweDUzCisKKyNkZWZpbmUgTEVHQUNZX0VOQUJMRV9BTEwgICAgICAweDgwMDAJLyogbGVnYWN5IGRldmljZSBvcHRpb25zICovCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfU0IgICAgICAgMHg0MDAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfRk0gICAgICAgMHgyMDAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfTVBVX0lOVCAgMHgxMDAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfTVBVICAgICAgMHgwODAwCisjZGVmaW5lIExFR0FDWV9FTkFCTEVfR0FNRVBPUlQgMHgwNDAwCisKKyNkZWZpbmUgTUFYX1dSSVRFX1JFVFJZICAxMAkvKiBjbWQgaW50ZXJmYWNlIGxpbWl0cyAqLworI2RlZmluZSBNQVhfRVJST1JfQ09VTlQgIDEwCisjZGVmaW5lIENNRElGX1RJTUVPVVQgICAgNTAwMDAwCisjZGVmaW5lIFJFU0VUX1RSSUVTICAgICAgNQorCisjZGVmaW5lIFJFQURfUE9SVF9VTE9ORyhwKSAgICAgaW5sKCh1bnNpZ25lZCBsb25nKSYocCkpCisjZGVmaW5lIFdSSVRFX1BPUlRfVUxPTkcocCx4KSAgb3V0bCh4LCh1bnNpZ25lZCBsb25nKSYocCkpCisKKyNkZWZpbmUgUkVBRF9BVURJT19DT05UUk9MKHApICAgICBSRUFEX1BPUlRfVUxPTkcocC0+YXVkaW9fY29udHJvbCkKKyNkZWZpbmUgV1JJVEVfQVVESU9fQ09OVFJPTChwLHgpICBXUklURV9QT1JUX1VMT05HKHAtPmF1ZGlvX2NvbnRyb2wseCkKKyNkZWZpbmUgVU1BU0tfQVVESU9fQ09OVFJPTChwLHgpICBXUklURV9QT1JUX1VMT05HKHAtPmF1ZGlvX2NvbnRyb2wsUkVBRF9QT1JUX1VMT05HKHAtPmF1ZGlvX2NvbnRyb2wpfHgpCisjZGVmaW5lIE1BU0tfQVVESU9fQ09OVFJPTChwLHgpICAgV1JJVEVfUE9SVF9VTE9ORyhwLT5hdWRpb19jb250cm9sLFJFQURfUE9SVF9VTE9ORyhwLT5hdWRpb19jb250cm9sKSZ4KQorI2RlZmluZSBSRUFEX0FVRElPX1NUQVRVUyhwKSAgICAgIFJFQURfUE9SVF9VTE9ORyhwLT5hdWRpb19zdGF0dXMpCisKKyNkZWZpbmUgU0VUX0dSRVNFVChwKSAgICAgVU1BU0tfQVVESU9fQ09OVFJPTChwLDB4MDAwMSkJLyogZ2xvYmFsIHJlc2V0IHN3aXRjaCAqLworI2RlZmluZSBVTlNFVF9HUkVTRVQocCkgICBNQVNLX0FVRElPX0NPTlRST0wocCx+MHgwMDAxKQorI2RlZmluZSBTRVRfQUlFKHApICAgICAgICBVTUFTS19BVURJT19DT05UUk9MKHAsMHgwMDA0KQkvKiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFVOU0VUX0FJRShwKSAgICAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwMDQpCisjZGVmaW5lIFNFVF9BSUFDSyhwKSAgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwMDgpCS8qIGludGVycnVwdCBhY2tub3dsZWRnZSAqLworI2RlZmluZSBVTlNFVF9BSUFDS1QocCkgICBNQVNLQVVESU9fQ09OVFJPTChwLH4weDAwMDgpCisjZGVmaW5lIFNFVF9FQ01EQUUocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwMTApCisjZGVmaW5lIFVOU0VUX0VDTURBRShwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwMTApCisjZGVmaW5lIFNFVF9FQ01EQkUocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwMjApCisjZGVmaW5lIFVOU0VUX0VDTURCRShwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwMjApCisjZGVmaW5lIFNFVF9FREFUQUYocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwNDApCisjZGVmaW5lIFVOU0VUX0VEQVRBRihwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwNDApCisjZGVmaW5lIFNFVF9FREFUQkYocCkgICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAwODApCisjZGVmaW5lIFVOU0VUX0VEQVRCRihwKSAgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAwODApCisjZGVmaW5lIFNFVF9FU0JJUlFPTihwKSAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAxMDApCisjZGVmaW5lIFVOU0VUX0VTQklSUU9OKHApIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAxMDApCisjZGVmaW5lIFNFVF9FTVBVSVJRKHApICAgIFVNQVNLX0FVRElPX0NPTlRST0wocCwweDAyMDApCisjZGVmaW5lIFVOU0VUX0VNUFVJUlEocCkgIE1BU0tfQVVESU9fQ09OVFJPTChwLH4weDAyMDApCisjZGVmaW5lIElTX0NNREUoYSkgICAgICAgIChSRUFEX1BPUlRfVUxPTkcoYS0+c3RhdCkmMHgxKQkvKiBjbWQgZW1wdHkgKi8KKyNkZWZpbmUgSVNfREFURihhKSAgICAgICAgKFJFQURfUE9SVF9VTE9ORyhhLT5zdGF0KSYweDIpCS8qIGRhdGEgZmlsbGVkICovCisjZGVmaW5lIElTX1JFQURZKHApICAgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDEpCisjZGVmaW5lIElTX0RMUkVBRFkocCkgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDIpCisjZGVmaW5lIElTX0RMRVJSKHApICAgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDQpCisjZGVmaW5lIElTX0dFUlIocCkgICAgICAgIChSRUFEX0FVRElPX1NUQVRVUyhwKSYweDAwMDgpCS8qIGVycm9yICEgKi8KKyNkZWZpbmUgSVNfQ01EQUVJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDAxMCkKKyNkZWZpbmUgSVNfQ01EQkVJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDAyMCkKKyNkZWZpbmUgSVNfREFUQUZJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDA0MCkKKyNkZWZpbmUgSVNfREFUQkZJUlEocCkgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDA4MCkKKyNkZWZpbmUgSVNfRU9CSVJRKHApICAgICAgKFJFQURfQVVESU9fU1RBVFVTKHApJjB4MDEwMCkJLyogaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBJU19FT1NJUlEocCkgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgwMjAwKQorI2RlZmluZSBJU19FT0NJUlEocCkgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgwNDAwKQorI2RlZmluZSBJU19VTlNMSVJRKHApICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgwODAwKQorI2RlZmluZSBJU19TQklSUShwKSAgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgxMDAwKQorI2RlZmluZSBJU19NUFVJUlEocCkgICAgICAoUkVBRF9BVURJT19TVEFUVVMocCkmMHgyMDAwKQorCisjZGVmaW5lIFJFU1AgMHgwMDAwMDAwMQkJLyogY29tbWFuZCBmbGFncyAqLworI2RlZmluZSBQQVJNIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ01EQSAweDAwMDAwMDA0CisjZGVmaW5lIENNREIgMHgwMDAwMDAwOAorI2RlZmluZSBOSUxMIDB4MDAwMDAwMDAKKworI2RlZmluZSBMT05HMChhKSAgICgodTMyKWEpCS8qIHNoaWZ0cyBhbmQgbWFza3MgKi8KKyNkZWZpbmUgQllURTAoYSkgICAoTE9ORzAoYSkmMHhmZikKKyNkZWZpbmUgQllURTEoYSkgICAoQllURTAoYSk8PDgpCisjZGVmaW5lIEJZVEUyKGEpICAgKEJZVEUwKGEpPDwxNikKKyNkZWZpbmUgQllURTMoYSkgICAoQllURTAoYSk8PDI0KQorI2RlZmluZSBXT1JEMChhKSAgIChMT05HMChhKSYweGZmZmYpCisjZGVmaW5lIFdPUkQxKGEpICAgKFdPUkQwKGEpPDw4KQorI2RlZmluZSBXT1JEMihhKSAgIChXT1JEMChhKTw8MTYpCisjZGVmaW5lIFRSSU5JQjAoYSkgKExPTkcwKGEpJjB4ZmZmZmZmKQorI2RlZmluZSBUUklOSUIxKGEpIChUUklOSUIwKGEpPDw4KQorCisjZGVmaW5lIFJFVChhKSAgICAgKCh1bmlvbiBjbWRyZXQgKikoYSkpCisKKyNkZWZpbmUgU0VORF9HRVRWKHAsYikgICAgICAgICAgICAgc2VuZGNtZChwLFJFU1AsR0VUViwwLFJFVChiKSkJLyogZ2V0IHZlcnNpb24gKi8KKyNkZWZpbmUgU0VORF9HRVRDKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxHRVRDLGMsUkVUKGIpKQorI2RlZmluZSBTRU5EX0dVTlMocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUkVTUCxHVU5TLDAsUkVUKGIpKQorI2RlZmluZSBTRU5EX1NDSUQocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUkVTUCxTQ0lELDAsUkVUKGIpKQorI2RlZmluZSBTRU5EX1JNRU0ocCxiLGMsZCkgICAgICAgICBzZW5kY21kKHAsUEFSTXxSRVNQLFJNRU18QllURTEoYiksTE9ORzAoYyksUkVUKGQpKQkvKiBtZW1vcnkgYWNjZXNzIGZvciBmaXJtd2FyZSB3cml0ZSAqLworI2RlZmluZSBTRU5EX1NNRU0ocCxiLGMpICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxTTUVNfEJZVEUxKGIpLExPTkcwKGMpLFJFVCgwKSkJLyogbWVtb3J5IGFjY2VzcyBmb3IgZmlybXdhcmUgd3JpdGUgKi8KKyNkZWZpbmUgU0VORF9XTUVNKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sV01FTXxCWVRFMShiKSxMT05HMChjKSxSRVQoMCkpCS8qIG1lbW9yeSBhY2Nlc3MgZm9yIGZpcm13YXJlIHdyaXRlICovCisjZGVmaW5lIFNFTkRfU0RUTShwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNfFJFU1AsU0RUTXxUUklOSUIxKGIpLDAsUkVUKGMpKQkvKiBtZW1vcnkgYWNjZXNzIGZvciBmaXJtd2FyZSB3cml0ZSAqLworI2RlZmluZSBTRU5EX0dPVE8ocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxHT1RPLExPTkcwKGIpLFJFVCgwKSkJLyogbWVtb3J5IGFjY2VzcyBmb3IgZmlybXdhcmUgd3JpdGUgKi8KKyNkZWZpbmUgU0VORF9TRVREUExMKHApCSAgICAgICAgICAgc2VuZGNtZChwLDAsQVJNX1NFVERQTEwsMCxSRVQoMCkpCisjZGVmaW5lIFNFTkRfU1NUUihwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNTVFJ8QllURTMoYiksTE9ORzAoYyksUkVUKDApKQkvKiBzdGFydCBzdHJlYW0gKi8KKyNkZWZpbmUgU0VORF9QU1RSKHAsYikgICAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sUFNUUixCWVRFMyhiKSxSRVQoMCkpCS8qIHBhdXNlIHN0cmVhbSAqLworI2RlZmluZSBTRU5EX0tTVFIocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxLU1RSLEJZVEUzKGIpLFJFVCgwKSkJLyogc3RvcCBzdHJlYW0gKi8KKyNkZWZpbmUgU0VORF9LRE1BKHApICAgICAgICAgICAgICAgc2VuZGNtZChwLDAsS0RNQSwwLFJFVCgwKSkJLyogc3RvcCBhbGwgZG1hICovCisjZGVmaW5lIFNFTkRfR1BPUyhwLGIsYyxkKSAgICAgICAgIHNlbmRjbWQocCxQQVJNfFJFU1AsR1BPUyxCWVRFMyhjKXxCWVRFMihiKSxSRVQoZCkpCS8qIGdldCBwb3NpdGlvbiBpbiBkbWEgKi8KKyNkZWZpbmUgU0VORF9TRVRGKHAsYixjLGQsZSxmLGcpICAgc2VuZGNtZChwLFBBUk0sU0VURnxXT1JEMShiKXxCWVRFMyhjKSxkfEJZVEUxKGUpfEJZVEUyKGYpfEJZVEUzKGcpLFJFVCgwKSkJLyogc2V0IHNhbXBsZSBmb3JtYXQgYXQgbWl4ZXIgKi8KKyNkZWZpbmUgU0VORF9HU1RTKHAsYixjLGQpICAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxHU1RTLEJZVEUzKGMpfEJZVEUyKGIpLFJFVChkKSkKKyNkZWZpbmUgU0VORF9OR1BPUyhwLGIsYyxkKSAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxOR1BPUyxCWVRFMyhjKXxCWVRFMihiKSxSRVQoZCkpCisjZGVmaW5lIFNFTkRfUFNFTChwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFBTRUwsQllURTIoYil8QllURTMoYyksUkVUKDApKQkvKiBhY3RpdmF0ZSBsYnVzIHBhdGggKi8KKyNkZWZpbmUgU0VORF9QQ0xSKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sUENMUixCWVRFMihiKXxCWVRFMyhjKSxSRVQoMCkpCS8qIGRlYWN0aXZhdGUgbGJ1cyBwYXRoICovCisjZGVmaW5lIFNFTkRfUExTVChwLGIpICAgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFBMU1QsQllURTMoYiksUkVUKDApKQorI2RlZmluZSBTRU5EX1JTU1YocCxiLGMsZCkgICAgICAgICBzZW5kY21kKHAsUEFSTXxSRVNQLFJTU1YsQllURTIoYil8QllURTMoYyksUkVUKGQpKQorI2RlZmluZSBTRU5EX0xTRUwocCxiLGMsZCxlLGYsZyxoKSBzZW5kY21kKHAsUEFSTSxMU0VMfEJZVEUxKGIpfEJZVEUyKGMpfEJZVEUzKGQpLEJZVEUwKGUpfEJZVEUxKGYpfEJZVEUyKGcpfEJZVEUzKGgpLFJFVCgwKSkJLyogc2VsZWN0IHBhdGhzIGZvciBpbnRlcm5hbCBjb25uZWN0aW9ucyAqLworI2RlZmluZSBTRU5EX1NTUkMocCxiLGMsZCxlKSAgICAgICBzZW5kY21kKHAsUEFSTSxTU1JDfEJZVEUxKGIpfFdPUkQyKGMpLFdPUkQwKGQpfFdPUkQyKGUpLFJFVCgwKSkJLyogY29uZmlndXJlIHNvdXJjZSAqLworI2RlZmluZSBTRU5EX1NMU1QocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxTTFNULEJZVEUzKGIpLFJFVCgwKSkKKyNkZWZpbmUgU0VORF9SU1JDKHAsYixjKSAgICAgICAgICAgc2VuZGNtZChwLFJFU1AsUlNSQ3xCWVRFMShiKSwwLFJFVChjKSkJLyogcmVhZCBzb3VyY2UgY29uZmlnICovCisjZGVmaW5lIFNFTkRfU1NSQihwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNTUkJ8QllURTEoYiksV09SRDIoYyksUkVUKDApKQorI2RlZmluZSBTRU5EX1NER1YocCxiLGMsZCxlKSAgICAgICBzZW5kY21kKHAsUEFSTSxTREdWfEJZVEUyKGIpfEJZVEUzKGMpLFdPUkQwKGQpfFdPUkQyKGUpLFJFVCgwKSkJLyogc2V0IGRpZ2l0YWwgbWl4ZXIgKi8KKyNkZWZpbmUgU0VORF9SREdWKHAsYixjLGQpICAgICAgICAgc2VuZGNtZChwLFBBUk18UkVTUCxSREdWfEJZVEUyKGIpfEJZVEUzKGMpLDAsUkVUKGQpKQkvKiByZWFkIGRpZ2l0YWwgbWl4ZXIgKi8KKyNkZWZpbmUgU0VORF9ETFNUKHAsYikgICAgICAgICAgICAgc2VuZGNtZChwLFBBUk0sRExTVCxCWVRFMyhiKSxSRVQoMCkpCisjZGVmaW5lIFNFTkRfU0FDUihwLGIsYykgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNBQ1IsV09SRDAoYil8V09SRDIoYyksUkVUKDApKQkvKiBzZXQgQUM5NyByZWdpc3RlciAqLworI2RlZmluZSBTRU5EX1JBQ1IocCxiLGMpICAgICAgICAgICBzZW5kY21kKHAsUEFSTXxSRVNQLFJBQ1IsV09SRDIoYiksUkVUKGMpKQkvKiBnZXQgQUM5NyByZWdpc3RlciAqLworI2RlZmluZSBTRU5EX0FMU1QocCxiKSAgICAgICAgICAgICBzZW5kY21kKHAsUEFSTSxBTFNULEJZVEUzKGIpLFJFVCgwKSkKKyNkZWZpbmUgU0VORF9UWEFDKHAsYixjLGQsZSxmKSAgICAgc2VuZGNtZChwLFBBUk0sVFhBQ3xCWVRFMShiKXxXT1JEMihjKSxXT1JEMChkKXxCWVRFMihlKXxCWVRFMyhmKSxSRVQoMCkpCisjZGVmaW5lIFNFTkRfUlhBQyhwLGIsYyxkKSAgICAgICAgIHNlbmRjbWQocCxQQVJNfFJFU1AsUlhBQyxCWVRFMihiKXxCWVRFMyhjKSxSRVQoZCkpCisjZGVmaW5lIFNFTkRfU0kyUyhwLGIpICAgICAgICAgICAgIHNlbmRjbWQocCxQQVJNLFNJMlMsV09SRDIoYiksUkVUKDApKQorCisjZGVmaW5lIEVPQl9TVEFUVVMgICAgICAgICAweDgwMDAwMDAwCS8qIHN0YXR1cyBmbGFncyA6IGJsb2NrIGJvdW5kYXJ5ICovCisjZGVmaW5lIEVPU19TVEFUVVMgICAgICAgICAweDQwMDAwMDAwCS8qICAgICAgICAgICAgICA6IHN0b3BwcGVkICovCisjZGVmaW5lIEVPQ19TVEFUVVMgICAgICAgICAweDIwMDAwMDAwCS8qICAgICAgICAgICAgICA6IHN0cmVhbSBlbmQgKi8KKyNkZWZpbmUgRVJSX1NUQVRVUyAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRU1QVFlfU1RBVFVTICAgICAgIDB4MDgwMDAwMDAKKworI2RlZmluZSBJRU9CX0VOQUJMRSAgICAgICAgMHgxCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBzdGF0dXMgbm90aWZpY2F0aW9uIGFib3ZlICovCisjZGVmaW5lIElFT1NfRU5BQkxFICAgICAgICAweDIKKyNkZWZpbmUgSUVPQ19FTkFCTEUgICAgICAgIDB4NAorI2RlZmluZSBSRE9OQ0UgICAgICAgICAgICAgMHg4CisjZGVmaW5lIERFU0NfTUFYX01BU0sgICAgICAweGZmCisKKyNkZWZpbmUgU1RfUExBWSAgMHgxCQkvKiBzdHJlYW0gc3RhdGVzICovCisjZGVmaW5lIFNUX1NUT1AgIDB4MgorI2RlZmluZSBTVF9QQVVTRSAweDQKKworI2RlZmluZSBJMlNfSU5UREVDICAgICAzCS8qIGNvbmZpZyBmb3IgSTJTIGxpbmsgKi8KKyNkZWZpbmUgSTJTX01FUkdFUiAgICAgMAorI2RlZmluZSBJMlNfU1BMSVRURVIgICAwCisjZGVmaW5lIEkyU19NSVhFUiAgICAgIDcKKyNkZWZpbmUgSTJTX1JBVEUgICAgICAgNDQxMDAKKworI2RlZmluZSBNT0RFTV9JTlRERUMgICA0CS8qIGNvbmZpZyBmb3IgbW9kZW0gbGluayAqLworI2RlZmluZSBNT0RFTV9NRVJHRVIgICAzCisjZGVmaW5lIE1PREVNX1NQTElUVEVSIDAKKyNkZWZpbmUgTU9ERU1fTUlYRVIgICAgMTEKKworI2RlZmluZSBGTV9JTlRERUMgICAgICAzCS8qIGNvbmZpZyBmb3IgRk0vT1BMMyBsaW5rICovCisjZGVmaW5lIEZNX01FUkdFUiAgICAgIDAKKyNkZWZpbmUgRk1fU1BMSVRURVIgICAgMAorI2RlZmluZSBGTV9NSVhFUiAgICAgICA5CisKKyNkZWZpbmUgU1BMSVRfUEFUSCAgMHg4MAkvKiBwYXRoIHNwbGl0dGluZyBmbGFnICovCisKK2VudW0gRklSTVdBUkUgeworCURBVEFfUkVDID0gMCwgRVhUX0VORF9PRl9GSUxFLCBFWFRfU0VHX0FERFJfUkVDLCBFWFRfR09UT19DTURfUkVDLAorCUVYVF9MSU5fQUREUl9SRUMsCit9OworCitlbnVtIENNRFMgeworCUdFVFYgPSAweDAwLCBHRVRDLCBHVU5TLCBTQ0lELCBSTUVNID0KKwkgICAgMHgxMCwgU01FTSwgV01FTSwgU0RUTSwgR09UTywgU1NUUiA9CisJICAgIDB4MjAsIFBTVFIsIEtTVFIsIEtETUEsIEdQT1MsIFNFVEYsIEdTVFMsIE5HUE9TLCBQU0VMID0KKwkgICAgMHgzMCwgUENMUiwgUExTVCwgUlNTViwgTFNFTCwgU1NSQyA9IDB4NDAsIFNMU1QsIFJTUkMsIFNTUkIsIFNER1YgPQorCSAgICAweDUwLCBSREdWLCBETFNULCBTQUNSID0gMHg2MCwgUkFDUiwgQUxTVCwgVFhBQywgUlhBQywgU0kyUyA9CisJICAgIDB4NzAsIEFSTV9TRVREUExMID0gMHg3MiwKK307CisKK2VudW0gRTFTT1VSQ0UgeworCUFSTTJMQlVTX0ZJRk8wID0gMCwgQVJNMkxCVVNfRklGTzEsIEFSTTJMQlVTX0ZJRk8yLCBBUk0yTEJVU19GSUZPMywKKwlBUk0yTEJVU19GSUZPNCwgQVJNMkxCVVNfRklGTzUsIEFSTTJMQlVTX0ZJRk82LCBBUk0yTEJVU19GSUZPNywKKwlBUk0yTEJVU19GSUZPOCwgQVJNMkxCVVNfRklGTzksIEFSTTJMQlVTX0ZJRk8xMCwgQVJNMkxCVVNfRklGTzExLAorCUFSTTJMQlVTX0ZJRk8xMiwgQVJNMkxCVVNfRklGTzEzLCBBUk0yTEJVU19GSUZPMTQsIEFSTTJMQlVTX0ZJRk8xNSwKKwlJTlRFUjBfT1VULCBJTlRFUjFfT1VULCBJTlRFUjJfT1VULCBJTlRFUjNfT1VULCBJTlRFUjRfT1VULAorCUlOVEVSTTBfT1VULCBJTlRFUk0xX09VVCwgSU5URVJNMl9PVVQsIElOVEVSTTNfT1VULCBJTlRFUk00X09VVCwKKwlJTlRFUk01X09VVCwgSU5URVJNNl9PVVQsIERFQ0lNTTBfT1VULCBERUNJTU0xX09VVCwgREVDSU1NMl9PVVQsCisJREVDSU1NM19PVVQsIERFQ0lNMF9PVVQsIFNSM180X09VVCwgT1BMM19TQU1QTEUsIEFTUkMwLCBBU1JDMSwKKwlBQ0xOSzJQQURDLCBBQ0xOSzJNT0RFTTBSWCwgQUNMTksyTUlDLCBBQ0xOSzJNT0RFTTFSWCwgQUNMTksySE5ETUlDLAorCURJR0lUQUxfTUlYRVJfT1VUMCwgR0FJTkZVTkMwX09VVCwgR0FJTkZVTkMxX09VVCwgR0FJTkZVTkMyX09VVCwKKwlHQUlORlVOQzNfT1VULCBHQUlORlVOQzRfT1VULCBTT0ZUTU9ERU1UWCwgU1BMSVRURVIwX09VVEwsCisJU1BMSVRURVIwX09VVFIsIFNQTElUVEVSMV9PVVRMLCBTUExJVFRFUjFfT1VUUiwgU1BMSVRURVIyX09VVEwsCisJU1BMSVRURVIyX09VVFIsIFNQTElUVEVSM19PVVRMLCBTUExJVFRFUjNfT1VUUiwgTUVSR0VSMF9PVVQsCisJTUVSR0VSMV9PVVQsIE1FUkdFUjJfT1VULCBNRVJHRVIzX09VVCwgQVJNMkxCVVNfRklGT19ESVJFQ1QsIE5PX09VVAorfTsKKworZW51bSBFMlNJTksgeworCUxCVVMyQVJNX0ZJRk8wID0gMCwgTEJVUzJBUk1fRklGTzEsIExCVVMyQVJNX0ZJRk8yLCBMQlVTMkFSTV9GSUZPMywKKwlMQlVTMkFSTV9GSUZPNCwgTEJVUzJBUk1fRklGTzUsIExCVVMyQVJNX0ZJRk82LCBMQlVTMkFSTV9GSUZPNywKKwlJTlRFUjBfSU4sIElOVEVSMV9JTiwgSU5URVIyX0lOLCBJTlRFUjNfSU4sIElOVEVSNF9JTiwgSU5URVJNMF9JTiwKKwlJTlRFUk0xX0lOLCBJTlRFUk0yX0lOLCBJTlRFUk0zX0lOLCBJTlRFUk00X0lOLCBJTlRFUk01X0lOLCBJTlRFUk02X0lOLAorCURFQ0lNTTBfSU4sIERFQ0lNTTFfSU4sIERFQ0lNTTJfSU4sIERFQ0lNTTNfSU4sIERFQ0lNMF9JTiwgU1IzXzRfSU4sCisJUERBQzJBQ0xOSywgTU9ERU0wVFgyQUNMTkssIE1PREVNMVRYMkFDTE5LLCBITkRTUEsyQUNMTkssCisJRElHSVRBTF9NSVhFUl9JTjAsIERJR0lUQUxfTUlYRVJfSU4xLCBESUdJVEFMX01JWEVSX0lOMiwKKwlESUdJVEFMX01JWEVSX0lOMywgRElHSVRBTF9NSVhFUl9JTjQsIERJR0lUQUxfTUlYRVJfSU41LAorCURJR0lUQUxfTUlYRVJfSU42LCBESUdJVEFMX01JWEVSX0lONywgRElHSVRBTF9NSVhFUl9JTjgsCisJRElHSVRBTF9NSVhFUl9JTjksIERJR0lUQUxfTUlYRVJfSU4xMCwgRElHSVRBTF9NSVhFUl9JTjExLAorCUdBSU5GVU5DMF9JTiwgR0FJTkZVTkMxX0lOLCBHQUlORlVOQzJfSU4sIEdBSU5GVU5DM19JTiwgR0FJTkZVTkM0X0lOLAorCVNPRlRNT0RFTVJYLCBTUExJVFRFUjBfSU4sIFNQTElUVEVSMV9JTiwgU1BMSVRURVIyX0lOLCBTUExJVFRFUjNfSU4sCisJTUVSR0VSMF9JTkwsIE1FUkdFUjBfSU5SLCBNRVJHRVIxX0lOTCwgTUVSR0VSMV9JTlIsIE1FUkdFUjJfSU5MLAorCU1FUkdFUjJfSU5SLCBNRVJHRVIzX0lOTCwgTUVSR0VSM19JTlIsIEUyU0lOS19NQVgKK307CisKK2VudW0gTEJVU19TSU5LIHsKKwlMU19TUkNfSU5URVJQT0xBVE9SID0gMCwgTFNfU1JDX0lOVEVSUE9MQVRPUk0sIExTX1NSQ19ERUNJTUFUT1IsCisJTFNfU1JDX0RFQ0lNQVRPUk0sIExTX01JWEVSX0lOLCBMU19NSVhFUl9HQUlOX0ZVTkNUSU9OLAorCUxTX1NSQ19TUExJVFRFUiwgTFNfU1JDX01FUkdFUiwgTFNfTk9ORTEsIExTX05PTkUyLAorfTsKKworZW51bSBSVF9DSEFOTkVMX0lEUyB7CisJTTBUWCA9IDAsIE0xVFgsIFRBTVRYLCBIU1NQS1IsIFBEQUMsIERTTkRUWDAsIERTTkRUWDEsIERTTkRUWDIsCisJRFNORFRYMywgRFNORFRYNCwgRFNORFRYNSwgRFNORFRYNiwgRFNORFRYNywgV1ZTVFJUWCwgQ09QM0RUWCwgU1BBUkUsCisJTTBSWCwgSFNNSUMsIE0xUlgsIENMRUFOUlgsIE1JQ0FEQywgUEFEQywgQ09QUlgxLCBDT1BSWDIsCisJQ0hBTk5FTF9JRF9DT1VOVEVSCit9OworCitlbnVtIHsgU0JfQ01EID0gMCwgTU9ERU1fQ01ELCBJMlNfQ01EMCwgSTJTX0NNRDEsIEZNX0NNRCwgTUFYX0NNRCB9OworCitzdHJ1Y3QgbGJ1c3BhdGggeworCXVuc2lnbmVkIGNoYXIgKm5vY29udjsKKwl1bnNpZ25lZCBjaGFyICpzdGVyZW87CisJdW5zaWduZWQgY2hhciAqbW9ubzsKK307CisKK3N0cnVjdCBjbWRwb3J0IHsKKwl1MzIgZGF0YTE7CQkvKiBjbWQscGFyYW0gKi8KKwl1MzIgZGF0YTI7CQkvKiBwYXJhbSAqLworCXUzMiBzdGF0OwkJLyogc3RhdHVzICovCisJdTMyIHBhZFs1XTsKK307CisKK3N0cnVjdCByaXB0aWRlcG9ydCB7CisJdTMyIGF1ZGlvX2NvbnRyb2w7CS8qIHN0YXR1cyByZWdpc3RlcnMgKi8KKwl1MzIgYXVkaW9fc3RhdHVzOworCXUzMiBwYWRbMl07CisJc3RydWN0IGNtZHBvcnQgcG9ydFsyXTsJLyogY29tbWFuZCBwb3J0cyAqLworfTsKKworc3RydWN0IGNtZGlmIHsKKwlzdHJ1Y3QgcmlwdGlkZXBvcnQgKmh3cG9ydDsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IGNtZGNudDsJLyogY21kIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBpbnQgY21kdGltZTsKKwl1bnNpZ25lZCBpbnQgY21kdGltZW1heDsKKwl1bnNpZ25lZCBpbnQgY21kdGltZW1pbjsKKwl1bnNpZ25lZCBpbnQgZXJyY250OworCWludCBpc19yZXNldDsKK307CisKK3N0cnVjdCByaXB0aWRlX2Zpcm13YXJlIHsKKwl1MTYgQVNJQzsKKwl1MTYgQ09ERUM7CisJdTE2IEFVWERTUDsKKwl1MTYgUFJPRzsKK307CisKK3VuaW9uIGNtZHJldCB7CisJdTggcmV0Ynl0ZXNbOF07CisJdTE2IHJldHdvcmRzWzRdOworCXUzMiByZXRsb25nc1syXTsKK307CisKK3VuaW9uIGZpcm13YXJlX3ZlcnNpb24geworCXVuaW9uIGNtZHJldCByZXQ7CisJc3RydWN0IHJpcHRpZGVfZmlybXdhcmUgZmlybXdhcmU7Cit9OworCisjZGVmaW5lIGdldF9wY21od2RldihzdWJzdHJlYW0pIChzdHJ1Y3QgcGNtaHcgKikoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpCisKKyNkZWZpbmUgUExBWUJBQ0tfU1VCU1RSRUFNUyAzCitzdHJ1Y3Qgc25kX3JpcHRpZGUgeworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisKKwlzdHJ1Y3QgY21kaWYgKmNpZjsKKworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IHNuZF9wY20gKnBjbV9pMnM7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisJc3RydWN0IHNuZF9hYzk3ICphYzk3OworCXN0cnVjdCBzbmRfYWM5N19idXMgKmFjOTdfYnVzOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwbGF5YmFja19zdWJzdHJlYW1bUExBWUJBQ0tfU1VCU1RSRUFNU107CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3N1YnN0cmVhbTsKKworCWludCBvcGVuc3RyZWFtczsKKworCWludCBpcnE7CisJdW5zaWduZWQgbG9uZyBwb3J0OworCXVuc2lnbmVkIHNob3J0IG1wdWFkZHI7CisJdW5zaWduZWQgc2hvcnQgb3BsYWRkcjsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJdW5zaWduZWQgc2hvcnQgZ2FtZWFkZHI7CisjZW5kaWYKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19wb3J0OworCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOworCisJdW5pb24gZmlybXdhcmVfdmVyc2lvbiBmaXJtd2FyZTsKKworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcmlwdGlkZV90cTsKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CisKKwl1bnNpZ25lZCBsb25nIHJlY2VpdmVkX2lycXM7CisJdW5zaWduZWQgbG9uZyBoYW5kbGVkX2lycXM7CisjaWZkZWYgQ09ORklHX1BNCisJaW50IGluX3N1c3BlbmQ7CisjZW5kaWYKK307CisKK3N0cnVjdCBzZ2QgewkJCS8qIHNjYXR0ZXIgZ2F0aGVyIGRlc3JpcHRvciAqLworCXUzMiBkd05leHRMaW5rOworCXUzMiBkd1NlZ1B0clBoeXM7CisJdTMyIGR3U2VnTGVuOworCXUzMiBkd1N0YXRfQ3RsOworfTsKKworc3RydWN0IHBjbWh3IHsJCQkvKiBwY20gZGVzY3JpcHRvciAqLworCXN0cnVjdCBsYnVzcGF0aCBwYXRoczsKKwl1bnNpZ25lZCBjaGFyICpsYnVzcGF0aDsKKwl1bnNpZ25lZCBjaGFyIHNvdXJjZTsKKwl1bnNpZ25lZCBjaGFyIGludGRlY1syXTsKKwl1bnNpZ25lZCBjaGFyIG1peGVyOworCXVuc2lnbmVkIGNoYXIgaWQ7CisJdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIHNnZGxpc3Q7CisJc3RydWN0IHNnZCAqc2dkYnVmOworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBwYWdlczsKKwl1bnNpZ25lZCBpbnQgb2xkcG9zOworCXVuc2lnbmVkIGludCBwb2ludGVyOworfTsKKworI2RlZmluZSBDTURSRVRfWkVSTyAodW5pb24gY21kcmV0KXt7KHUzMikwLCAodTMyKSAwfX0KKworc3RhdGljIGludCBzZW5kY21kKHN0cnVjdCBjbWRpZiAqY2lmLCB1MzIgZmxhZ3MsIHUzMiBjbWQsIHUzMiBwYXJtLAorCQkgICB1bmlvbiBjbWRyZXQgKnJldCk7CitzdGF0aWMgaW50IGdldHNvdXJjZXNpbmsoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgc291cmNlLAorCQkJIHVuc2lnbmVkIGNoYXIgc2luaywgdW5zaWduZWQgY2hhciAqYSwKKwkJCSB1bnNpZ25lZCBjaGFyICpiKTsKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApOworc3RhdGljIGludCByaXB0aWRlX3Jlc2V0KHN0cnVjdCBjbWRpZiAqY2lmLCBzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApOworCisvKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkgLnZlbmRvciA9IDB4MTI3YSwuZGV2aWNlID0gMHg0MzEwLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDMyMCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJeworCSAudmVuZG9yID0gMHgxMjdhLC5kZXZpY2UgPSAweDQzMzAsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSB9LAorCXsKKwkgLnZlbmRvciA9IDB4MTI3YSwuZGV2aWNlID0gMHg0MzQwLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7MCx9LAorfTsKKworI2lmZGVmIFNVUFBPUlRfSk9ZU1RJQ0sKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9qb3lzdGlja19pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkgLnZlbmRvciA9IDB4MTI3YSwuZGV2aWNlID0gMHg0MzEyLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDMyMiwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJey52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDMzMiwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJey52ZW5kb3IgPSAweDEyN2EsLmRldmljZSA9IDB4NDM0MiwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJezAsfSwKK307CisjZW5kaWYKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9yaXB0aWRlX2lkcyk7CisKKy8qCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c2luMm91dFtFMlNJTktfTUFYICsgMV1bMl0gPSB7CisJe05PX09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULCBMU19OT05FMn0sIHtOT19PVVQsIExTX05PTkUxfSwge05PX09VVCwKKwkJCQkJCQkJICAgICBMU19OT05FMn0sCisJe05PX09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULCBMU19OT05FMn0sIHtOT19PVVQsIExTX05PTkUxfSwge05PX09VVCwKKwkJCQkJCQkJICAgICBMU19OT05FMn0sCisJe0lOVEVSMF9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1J9LCB7SU5URVIxX09VVCwgTFNfU1JDX0lOVEVSUE9MQVRPUn0sCisJe0lOVEVSMl9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1J9LCB7SU5URVIzX09VVCwgTFNfU1JDX0lOVEVSUE9MQVRPUn0sCisJe0lOVEVSNF9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1J9LCB7SU5URVJNMF9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1JNfSwKKwl7SU5URVJNMV9PVVQsIExTX1NSQ19JTlRFUlBPTEFUT1JNfSwge0lOVEVSTTJfT1VULAorCQkJCQkgICAgICBMU19TUkNfSU5URVJQT0xBVE9STX0sCisJe0lOVEVSTTNfT1VULCBMU19TUkNfSU5URVJQT0xBVE9STX0sIHtJTlRFUk00X09VVCwKKwkJCQkJICAgICAgTFNfU1JDX0lOVEVSUE9MQVRPUk19LAorCXtJTlRFUk01X09VVCwgTFNfU1JDX0lOVEVSUE9MQVRPUk19LCB7SU5URVJNNl9PVVQsCisJCQkJCSAgICAgIExTX1NSQ19JTlRFUlBPTEFUT1JNfSwKKwl7REVDSU1NMF9PVVQsIExTX1NSQ19ERUNJTUFUT1JNfSwge0RFQ0lNTTFfT1VULCBMU19TUkNfREVDSU1BVE9STX0sCisJe0RFQ0lNTTJfT1VULCBMU19TUkNfREVDSU1BVE9STX0sIHtERUNJTU0zX09VVCwgTFNfU1JDX0RFQ0lNQVRPUk19LAorCXtERUNJTTBfT1VULCBMU19TUkNfREVDSU1BVE9SfSwge1NSM180X09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULAorCQkJCQkJCQlMU19OT05FMn0sCisJe05PX09VVCwgTFNfTk9ORTF9LCB7Tk9fT1VULCBMU19OT05FMn0sIHtOT19PVVQsIExTX05PTkUxfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7RElHSVRBTF9NSVhFUl9PVVQwLCBMU19NSVhFUl9JTn0sIHtESUdJVEFMX01JWEVSX09VVDAsIExTX01JWEVSX0lOfSwKKwl7R0FJTkZVTkMwX09VVCwgTFNfTUlYRVJfR0FJTl9GVU5DVElPTn0sIHtHQUlORlVOQzFfT1VULAorCQkJCQkJICBMU19NSVhFUl9HQUlOX0ZVTkNUSU9OfSwKKwl7R0FJTkZVTkMyX09VVCwgTFNfTUlYRVJfR0FJTl9GVU5DVElPTn0sIHtHQUlORlVOQzNfT1VULAorCQkJCQkJICBMU19NSVhFUl9HQUlOX0ZVTkNUSU9OfSwKKwl7R0FJTkZVTkM0X09VVCwgTFNfTUlYRVJfR0FJTl9GVU5DVElPTn0sIHtTT0ZUTU9ERU1UWCwgTFNfTk9ORTF9LAorCXtTUExJVFRFUjBfT1VUTCwgTFNfU1JDX1NQTElUVEVSfSwge1NQTElUVEVSMV9PVVRMLCBMU19TUkNfU1BMSVRURVJ9LAorCXtTUExJVFRFUjJfT1VUTCwgTFNfU1JDX1NQTElUVEVSfSwge1NQTElUVEVSM19PVVRMLCBMU19TUkNfU1BMSVRURVJ9LAorCXtNRVJHRVIwX09VVCwgTFNfU1JDX01FUkdFUn0sIHtNRVJHRVIwX09VVCwgTFNfU1JDX01FUkdFUn0sCisJe01FUkdFUjFfT1VULCBMU19TUkNfTUVSR0VSfSwKKwl7TUVSR0VSMV9PVVQsIExTX1NSQ19NRVJHRVJ9LCB7TUVSR0VSMl9PVVQsIExTX1NSQ19NRVJHRVJ9LAorCXtNRVJHRVIyX09VVCwgTFNfU1JDX01FUkdFUn0sCisJe01FUkdFUjNfT1VULCBMU19TUkNfTUVSR0VSfSwge01FUkdFUjNfT1VULCBMU19TUkNfTUVSR0VSfSwge05PX09VVCwKKwkJCQkJCQkJICAgICBMU19OT05FMn0sCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfb3BsM1tdID0geworCURJR0lUQUxfTUlYRVJfSU4wICsgRk1fTUlYRVIsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbW9kZW1bXSA9IHsKKwlESUdJVEFMX01JWEVSX0lOMCArIE1PREVNX01JWEVSLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X2kyc1tdID0geworCUlOVEVSMF9JTiArIEkyU19JTlRERUMsIERJR0lUQUxfTUlYRVJfSU4wICsgSTJTX01JWEVSLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X291dFtdID0geworCVBEQUMyQUNMTkssIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfb3V0aHBbXSA9IHsKKwlITkRTUEsyQUNMTkssIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbm9jb252MVtdID0geworCURJR0lUQUxfTUlYRVJfSU4wLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X3N0ZXJlbzFbXSA9IHsKKwlJTlRFUjBfSU4sIERJR0lUQUxfTUlYRVJfSU4wLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X21vbm8xW10gPSB7CisJSU5URVJNMF9JTiwgRElHSVRBTF9NSVhFUl9JTjAsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbm9jb252MltdID0geworCURJR0lUQUxfTUlYRVJfSU4xLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X3N0ZXJlbzJbXSA9IHsKKwlJTlRFUjFfSU4sIERJR0lUQUxfTUlYRVJfSU4xLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X21vbm8yW10gPSB7CisJSU5URVJNMV9JTiwgRElHSVRBTF9NSVhFUl9JTjEsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3BsYXlfbm9jb252M1tdID0geworCURJR0lUQUxfTUlYRVJfSU4yLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X3N0ZXJlbzNbXSA9IHsKKwlJTlRFUjJfSU4sIERJR0lUQUxfTUlYRVJfSU4yLCAweGZmCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1c19wbGF5X21vbm8zW10gPSB7CisJSU5URVJNMl9JTiwgRElHSVRBTF9NSVhFUl9JTjIsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3JlY19ub2NvbnYxW10gPSB7CisJTEJVUzJBUk1fRklGTzUsIDB4ZmYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBsYnVzX3JlY19zdGVyZW8xW10gPSB7CisJREVDSU0wX0lOLCBMQlVTMkFSTV9GSUZPNSwgMHhmZgorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGxidXNfcmVjX21vbm8xW10gPSB7CisJREVDSU1NM19JTiwgTEJVUzJBUk1fRklGTzUsIDB4ZmYKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBsYXlfaWRzW10gPSB7IDQsIDEsIDIsIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBwbGF5X3NvdXJjZXNbXSA9IHsKKwlBUk0yTEJVU19GSUZPNCwgQVJNMkxCVVNfRklGTzEsIEFSTTJMQlVTX0ZJRk8yLAorfTsKK3N0YXRpYyBzdHJ1Y3QgbGJ1c3BhdGggbGJ1c19wbGF5X3BhdGhzW10gPSB7CisJeworCSAubm9jb252ID0gbGJ1c19wbGF5X25vY29udjEsCisJIC5zdGVyZW8gPSBsYnVzX3BsYXlfc3RlcmVvMSwKKwkgLm1vbm8gPSBsYnVzX3BsYXlfbW9ubzEsCisJIH0sCisJeworCSAubm9jb252ID0gbGJ1c19wbGF5X25vY29udjIsCisJIC5zdGVyZW8gPSBsYnVzX3BsYXlfc3RlcmVvMiwKKwkgLm1vbm8gPSBsYnVzX3BsYXlfbW9ubzIsCisJIH0sCisJeworCSAubm9jb252ID0gbGJ1c19wbGF5X25vY29udjMsCisJIC5zdGVyZW8gPSBsYnVzX3BsYXlfc3RlcmVvMywKKwkgLm1vbm8gPSBsYnVzX3BsYXlfbW9ubzMsCisJIH0sCit9Oworc3RhdGljIHN0cnVjdCBsYnVzcGF0aCBsYnVzX3JlY19wYXRoID0geworCS5ub2NvbnYgPSBsYnVzX3JlY19ub2NvbnYxLAorCS5zdGVyZW8gPSBsYnVzX3JlY19zdGVyZW8xLAorCS5tb25vID0gbGJ1c19yZWNfbW9ubzEsCit9OworCisjZGVmaW5lIEZJUk1XQVJFX1ZFUlNJT05TIDEKK3N0YXRpYyB1bmlvbiBmaXJtd2FyZV92ZXJzaW9uIGZpcm13YXJlX3ZlcnNpb25zW10gPSB7CisJeworCSAuZmlybXdhcmUuQVNJQyA9IDMsLmZpcm13YXJlLkNPREVDID0gMiwKKwkgLmZpcm13YXJlLkFVWERTUCA9IDMsLmZpcm13YXJlLlBST0cgPSA3NzMsCisJIH0sCit9OworCitzdGF0aWMgdTMyIGF0b2godW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBsZW4pCit7CisJdTMyIHN1bSA9IDA7CisJdW5zaWduZWQgaW50IG11bHQgPSAxOworCXVuc2lnbmVkIGNoYXIgYzsKKworCXdoaWxlIChsZW4pIHsKKwkJYyA9IGluW2xlbiAtIDFdOworCQlpZiAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKQorCQkJc3VtICs9IG11bHQgKiAoYyAtICcwJyk7CisJCWVsc2UgaWYgKChjID49ICdBJykgJiYgKGMgPD0gJ0YnKSkKKwkJCXN1bSArPSBtdWx0ICogKGMgLSAoJ0EnIC0gMTApKTsKKwkJZWxzZSBpZiAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKQorCQkJc3VtICs9IG11bHQgKiAoYyAtICgnYScgLSAxMCkpOworCQltdWx0ICo9IDE2OworCQktLWxlbjsKKwl9CisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGludCBzZW5kZGF0YShzdHJ1Y3QgY21kaWYgKmNpZiwgdW5zaWduZWQgY2hhciAqaW4sIHUzMiBvZmZzZXQpCit7CisJdTMyIGFkZHI7CisJdTMyIGRhdGE7CisJdTMyIGk7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWkgPSBhdG9oKCZpblsxXSwgMik7CisJYWRkciA9IG9mZnNldCArIGF0b2goJmluWzNdLCA0KTsKKwlpZiAoU0VORF9TTUVNKGNpZiwgMCwgYWRkcikgIT0gMCkKKwkJcmV0dXJuIC1FQUNDRVM7CisJcCA9IGluICsgOTsKKwl3aGlsZSAoaSkgeworCQlkYXRhID0gYXRvaChwLCA4KTsKKwkJaWYgKFNFTkRfV01FTShjaWYsIDIsCisJCQkgICAgICAoKGRhdGEgJiAweDBmMGYwZjBmKSA8PCA0KSB8ICgoZGF0YSAmIDB4ZjBmMGYwZjApCisJCQkJCQkJICAgID4+IDQpKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCQlpIC09IDQ7CisJCXAgKz0gODsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9hZGZpcm13YXJlKHN0cnVjdCBjbWRpZiAqY2lmLCB1bnNpZ25lZCBjaGFyICppbWcsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICppbjsKKwl1MzIgbGFkZHIsIHNhZGRyLCB0LCB2YWw7CisJaW50IGVyciA9IDA7CisKKwlsYWRkciA9IHNhZGRyID0gMDsKKwl3aGlsZSAoc2l6ZSA+IDAgJiYgZXJyID09IDApIHsKKwkJaW4gPSBpbWc7CisJCWlmIChpblswXSA9PSAnOicpIHsKKwkJCXQgPSBhdG9oKCZpbls3XSwgMik7CisJCQlzd2l0Y2ggKHQpIHsKKwkJCWNhc2UgREFUQV9SRUM6CisJCQkJZXJyID0gc2VuZGRhdGEoY2lmLCBpbiwgbGFkZHIgKyBzYWRkcik7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYVF9TRUdfQUREUl9SRUM6CisJCQkJc2FkZHIgPSBhdG9oKCZpbls5XSwgNCkgPDwgNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUX0xJTl9BRERSX1JFQzoKKwkJCQlsYWRkciA9IGF0b2goJmluWzldLCA0KSA8PCAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUX0dPVE9fQ01EX1JFQzoKKwkJCQl2YWwgPSBhdG9oKCZpbls5XSwgOCk7CisJCQkJaWYgKFNFTkRfR09UTyhjaWYsIHZhbCkgIT0gMCkKKwkJCQkJZXJyID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUX0VORF9PRl9GSUxFOgorCQkJCXNpemUgPSAwOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCXdoaWxlIChzaXplID4gMCkgeworCQkJCXNpemUtLTsKKwkJCQlpZiAoKmltZysrID09ICdcbicpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXNuZF9wcmludGRkKCJsb2FkIGZpcm13YXJlIHJldHVybiAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYWxsb2NsYnVzcGF0aChzdHJ1Y3QgY21kaWYgKmNpZiwgdW5zaWduZWQgY2hhciBzb3VyY2UsCisJICAgICAgdW5zaWduZWQgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqbWl4ZXIsIHVuc2lnbmVkIGNoYXIgKnMpCit7CisJd2hpbGUgKCpwYXRoICE9IDB4ZmYpIHsKKwkJdW5zaWduZWQgY2hhciBzaW5rLCB0eXBlOworCisJCXNpbmsgPSAqcGF0aCAmICh+U1BMSVRfUEFUSCk7CisJCWlmIChzaW5rICE9IEUyU0lOS19NQVgpIHsKKwkJCXNuZF9wcmludGRkKCJhbGxvYyBwYXRoIDB4JXgtPjB4JXhcbiIsIHNvdXJjZSwgc2luayk7CisJCQlTRU5EX1BTRUwoY2lmLCBzb3VyY2UsIHNpbmspOworCQkJc291cmNlID0gbGJ1c2luMm91dFtzaW5rXVswXTsKKwkJCXR5cGUgPSBsYnVzaW4yb3V0W3NpbmtdWzFdOworCQkJaWYgKHR5cGUgPT0gTFNfTUlYRVJfSU4pIHsKKwkJCQlpZiAobWl4ZXIpCisJCQkJCSptaXhlciA9IHNpbmsgLSBESUdJVEFMX01JWEVSX0lOMDsKKwkJCX0KKwkJCWlmICh0eXBlID09IExTX1NSQ19ERUNJTUFUT1JNIHx8CisJCQkgICAgdHlwZSA9PSBMU19TUkNfREVDSU1BVE9SIHx8CisJCQkgICAgdHlwZSA9PSBMU19TUkNfSU5URVJQT0xBVE9STSB8fAorCQkJICAgIHR5cGUgPT0gTFNfU1JDX0lOVEVSUE9MQVRPUikgeworCQkJCWlmIChzKSB7CisJCQkJCWlmIChzWzBdICE9IDB4ZmYpCisJCQkJCQlzWzFdID0gc2luazsKKwkJCQkJZWxzZQorCQkJCQkJc1swXSA9IHNpbms7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICgqcGF0aCsrICYgU1BMSVRfUEFUSCkgeworCQkJdW5zaWduZWQgY2hhciAqbnBhdGggPSBwYXRoOworCisJCQl3aGlsZSAoKm5wYXRoICE9IDB4ZmYpCisJCQkJbnBhdGgrKzsKKwkJCWFsbG9jbGJ1c3BhdGgoY2lmLCBzb3VyY2UgKyAxLCArK25wYXRoLCBtaXhlciwgcyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlbGJ1c3BhdGgoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgc291cmNlLCB1bnNpZ25lZCBjaGFyICpwYXRoKQoreworCXdoaWxlICgqcGF0aCAhPSAweGZmKSB7CisJCXVuc2lnbmVkIGNoYXIgc2luazsKKworCQlzaW5rID0gKnBhdGggJiAoflNQTElUX1BBVEgpOworCQlpZiAoc2luayAhPSBFMlNJTktfTUFYKSB7CisJCQlzbmRfcHJpbnRkZCgiZnJlZSBwYXRoIDB4JXgtPjB4JXhcbiIsIHNvdXJjZSwgc2luayk7CisJCQlTRU5EX1BDTFIoY2lmLCBzb3VyY2UsIHNpbmspOworCQkJc291cmNlID0gbGJ1c2luMm91dFtzaW5rXVswXTsKKwkJfQorCQlpZiAoKnBhdGgrKyAmIFNQTElUX1BBVEgpIHsKKwkJCXVuc2lnbmVkIGNoYXIgKm5wYXRoID0gcGF0aDsKKworCQkJd2hpbGUgKCpucGF0aCAhPSAweGZmKQorCQkJCW5wYXRoKys7CisJCQlmcmVlbGJ1c3BhdGgoY2lmLCBzb3VyY2UgKyAxLCArK25wYXRoKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCB3cml0ZWFybShzdHJ1Y3QgY21kaWYgKmNpZiwgdTMyIGFkZHIsIHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwl1bmlvbiBjbWRyZXQgcnB0ciA9IENNRFJFVF9aRVJPOworCXVuc2lnbmVkIGludCBpID0gTUFYX1dSSVRFX1JFVFJZOworCWludCBmbGFnID0gMTsKKworCVNFTkRfUk1FTShjaWYsIDB4MDIsIGFkZHIsICZycHRyKTsKKwlycHRyLnJldGxvbmdzWzBdICY9ICh+bWFzayk7CisKKwl3aGlsZSAoLS1pKSB7CisJCVNFTkRfU01FTShjaWYsIDB4MDEsIGFkZHIpOworCQlTRU5EX1dNRU0oY2lmLCAweDAyLCAocnB0ci5yZXRsb25nc1swXSB8IGRhdGEpKTsKKwkJU0VORF9STUVNKGNpZiwgMHgwMiwgYWRkciwgJnJwdHIpOworCQlpZiAoKHJwdHIucmV0bG9uZ3NbMF0gJiBkYXRhKSA9PSBkYXRhKSB7CisJCQlmbGFnID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXJwdHIucmV0bG9uZ3NbMF0gJj0gfm1hc2s7CisJfQorCXNuZF9wcmludGRkKCJzZW5kIGFybSAweCV4IDB4JXggMHgleCByZXR1cm4gJWRcbiIsIGFkZHIsIGRhdGEsIG1hc2ssCisJCSAgICBmbGFnKTsKKwlyZXR1cm4gZmxhZzsKK30KKworc3RhdGljIGludCBzZW5kY21kKHN0cnVjdCBjbWRpZiAqY2lmLCB1MzIgZmxhZ3MsIHUzMiBjbWQsIHUzMiBwYXJtLAorCQkgICB1bmlvbiBjbWRyZXQgKnJldCkKK3sKKwlpbnQgaSwgajsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCB0aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCByaXB0aWRlcG9ydCAqaHdwb3J0OworCXN0cnVjdCBjbWRwb3J0ICpjbWRwb3J0ID0gTlVMTDsKKworCXNuZF9hc3NlcnQoY2lmLCByZXR1cm4gLUVJTlZBTCk7CisKKwlod3BvcnQgPSBjaWYtPmh3cG9ydDsKKwlpZiAoY2lmLT5lcnJjbnQgPiBNQVhfRVJST1JfQ09VTlQpIHsKKwkJaWYgKGNpZi0+aXNfcmVzZXQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAiUmlwdGlkZTogVG9vIG1hbnkgZmFpbGVkIGNtZHMsIHJlaW5pdGlhbGl6aW5nXG4iKTsKKwkJCWlmIChyaXB0aWRlX3Jlc2V0KGNpZiwgTlVMTCkgPT0gMCkgeworCQkJCWNpZi0+ZXJyY250ID0gMDsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSaXB0aWRlOiBJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZXQpIHsKKwkJcmV0LT5yZXRsb25nc1swXSA9IDA7CisJCXJldC0+cmV0bG9uZ3NbMV0gPSAwOworCX0KKwlpID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2lmLT5sb2NrLCBpcnFmbGFncyk7CisJd2hpbGUgKGkrKyA8IENNRElGX1RJTUVPVVQgJiYgIUlTX1JFQURZKGNpZi0+aHdwb3J0KSkKKwkJdWRlbGF5KDEwKTsKKwlpZiAoaSA+PSBDTURJRl9USU1FT1VUKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJZXJyID0gMDsKKwlmb3IgKGogPSAwLCB0aW1lID0gMDsgdGltZSA8IENNRElGX1RJTUVPVVQ7IGorKywgdGltZSArPSAyKSB7CisJCWNtZHBvcnQgPSAmKGh3cG9ydC0+cG9ydFtqICUgMl0pOworCQlpZiAoSVNfREFURihjbWRwb3J0KSkgewkvKiBmcmVlIHBlbmRpbmcgZGF0YSAqLworCQkJUkVBRF9QT1JUX1VMT05HKGNtZHBvcnQtPmRhdGExKTsKKwkJCVJFQURfUE9SVF9VTE9ORyhjbWRwb3J0LT5kYXRhMik7CisJCX0KKwkJaWYgKElTX0NNREUoY21kcG9ydCkpIHsKKwkJCWlmIChmbGFncyAmIFBBUk0pCS8qIHB1dCBkYXRhICovCisJCQkJV1JJVEVfUE9SVF9VTE9ORyhjbWRwb3J0LT5kYXRhMiwgcGFybSk7CisJCQlXUklURV9QT1JUX1VMT05HKGNtZHBvcnQtPmRhdGExLCBjbWQpOwkvKiB3cml0ZSBjbWQgKi8KKwkJCWlmICgoZmxhZ3MgJiBSRVNQKSAmJiByZXQpIHsKKwkJCQl3aGlsZSAoIUlTX0RBVEYoY21kcG9ydCkgJiYKKwkJCQkgICAgICAgdGltZSsrIDwgQ01ESUZfVElNRU9VVCkKKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQlpZiAodGltZSA8IENNRElGX1RJTUVPVVQpIHsJLyogcmVhZCByZXNwb25zZSAqLworCQkJCQlyZXQtPnJldGxvbmdzWzBdID0KKwkJCQkJICAgIFJFQURfUE9SVF9VTE9ORyhjbWRwb3J0LT5kYXRhMSk7CisJCQkJCXJldC0+cmV0bG9uZ3NbMV0gPQorCQkJCQkgICAgUkVBRF9QT1JUX1VMT05HKGNtZHBvcnQtPmRhdGEyKTsKKwkJCQl9IGVsc2UgeworCQkJCQllcnIgPSAtRU5PU1lTOworCQkJCQlnb3RvIGVycm91dDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMjApOworCX0KKwlpZiAodGltZSA9PSBDTURJRl9USU1FT1VUKSB7CisJCWVyciA9IC1FTk9EQVRBOworCQlnb3RvIGVycm91dDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2lmLT5sb2NrLCBpcnFmbGFncyk7CisKKwljaWYtPmNtZGNudCsrOwkJLyogdXBkYXRlIGNvbW1hbmQgc3RhdGlzdGljcyAqLworCWNpZi0+Y21kdGltZSArPSB0aW1lOworCWlmICh0aW1lID4gY2lmLT5jbWR0aW1lbWF4KQorCQljaWYtPmNtZHRpbWVtYXggPSB0aW1lOworCWlmICh0aW1lIDwgY2lmLT5jbWR0aW1lbWluKQorCQljaWYtPmNtZHRpbWVtaW4gPSB0aW1lOworCWlmICgoY2lmLT5jbWRjbnQpICUgMTAwMCA9PSAwKQorCQlzbmRfcHJpbnRkZAorCQkgICAgKCJzZW5kIGNtZCAlZCB0aW1lOiAlZCBtaW50aW1lOiAlZCBtYXh0aW1lICVkIGVycjogJWRcbiIsCisJCSAgICAgY2lmLT5jbWRjbnQsIGNpZi0+Y21kdGltZSwgY2lmLT5jbWR0aW1lbWluLAorCQkgICAgIGNpZi0+Y21kdGltZW1heCwgY2lmLT5lcnJjbnQpOworCXJldHVybiAwOworCisgICAgICBlcnJvdXQ6CisJY2lmLT5lcnJjbnQrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaWYtPmxvY2ssIGlycWZsYWdzKTsKKwlzbmRfcHJpbnRkZAorCSAgICAoInNlbmQgY21kICVkIGh3OiAweCV4IGZsYWc6IDB4JXggY21kOiAweCV4IHBhcm06IDB4JXggcmV0OiAweCV4IDB4JXggQ01ERTogJWQgREFURjogJWQgZmFpbGVkICVkXG4iLAorCSAgICAgY2lmLT5jbWRjbnQsIChpbnQpKCh2b2lkICopJihjbWRwb3J0LT5zdGF0KSAtICh2b2lkICopaHdwb3J0KSwKKwkgICAgIGZsYWdzLCBjbWQsIHBhcm0sIHJldCA/IHJldC0+cmV0bG9uZ3NbMF0gOiAwLAorCSAgICAgcmV0ID8gcmV0LT5yZXRsb25nc1sxXSA6IDAsIElTX0NNREUoY21kcG9ydCksIElTX0RBVEYoY21kcG9ydCksCisJICAgICBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3NldG1peGVyKHN0cnVjdCBjbWRpZiAqY2lmLCBzaG9ydCBudW0sIHVuc2lnbmVkIHNob3J0IHJ2YWwsIHVuc2lnbmVkIHNob3J0IGx2YWwpCit7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwlpbnQgaSA9IDA7CisKKwlzbmRfcHJpbnRkZCgic2VudCBtaXhlciAlZDogMHglZCAweCVkXG4iLCBudW0sIHJ2YWwsIGx2YWwpOworCWRvIHsKKwkJU0VORF9TREdWKGNpZiwgbnVtLCBudW0sIHJ2YWwsIGx2YWwpOworCQlTRU5EX1JER1YoY2lmLCBudW0sIG51bSwgJnJwdHIpOworCQlpZiAocnB0ci5yZXR3b3Jkc1swXSA9PSBsdmFsICYmIHJwdHIucmV0d29yZHNbMV0gPT0gcnZhbCkKKwkJCXJldHVybiAwOworCX0gd2hpbGUgKGkrKyA8IE1BWF9XUklURV9SRVRSWSk7CisJc25kX3ByaW50ZGQoInNlbnQgbWl4ZXIgZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBnZXRwYXRocyhzdHJ1Y3QgY21kaWYgKmNpZiwgdW5zaWduZWQgY2hhciAqbykKK3sKKwl1bnNpZ25lZCBjaGFyIHNyY1tFMlNJTktfTUFYXTsKKwl1bnNpZ25lZCBjaGFyIHNpbmtbRTJTSU5LX01BWF07CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IEUyU0lOS19NQVg7IGkrKykgeworCQlnZXRzb3VyY2VzaW5rKGNpZiwgaSwgaSwgJnNyY1tpXSwgJnNpbmtbaV0pOworCQlpZiAoc2lua1tpXSA8IEUyU0lOS19NQVgpIHsKKwkJCW9baisrXSA9IHNpbmtbaV07CisJCQlvW2orK10gPSBpOworCQl9CisJfQorCXJldHVybiBqOworfQorCitzdGF0aWMgaW50CitnZXRzb3VyY2VzaW5rKHN0cnVjdCBjbWRpZiAqY2lmLCB1bnNpZ25lZCBjaGFyIHNvdXJjZSwgdW5zaWduZWQgY2hhciBzaW5rLAorCSAgICAgIHVuc2lnbmVkIGNoYXIgKmEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKworCWlmIChTRU5EX1JTU1YoY2lmLCBzb3VyY2UsIHNpbmssICZycHRyKSAmJgorCSAgICBTRU5EX1JTU1YoY2lmLCBzb3VyY2UsIHNpbmssICZycHRyKSkKKwkJcmV0dXJuIC1FSU87CisJKmEgPSBycHRyLnJldGJ5dGVzWzBdOworCSpiID0gcnB0ci5yZXRieXRlc1sxXTsKKwlzbmRfcHJpbnRkZCgiZ2V0c291cmNlc2luayAweCV4IDB4JXhcbiIsICphLCAqYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldHNhbXBsZXJhdGUoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgKmludGRlYywgdW5zaWduZWQgaW50ICpyYXRlKQoreworCXVuc2lnbmVkIGNoYXIgKnM7CisJdW5zaWduZWQgaW50IHBbMl0gPSB7IDAsIDAgfTsKKwlpbnQgaTsKKwl1bmlvbiBjbWRyZXQgcnB0ciA9IENNRFJFVF9aRVJPOworCisJcyA9IGludGRlYzsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgqcyAhPSAweGZmKSB7CisJCQlpZiAoU0VORF9SU1JDKGNpZiwgKnMsICZycHRyKSAmJgorCQkJICAgIFNFTkRfUlNSQyhjaWYsICpzLCAmcnB0cikpCisJCQkJcmV0dXJuIC1FSU87CisJCQlwW2ldICs9IHJwdHIucmV0d29yZHNbMV07CisJCQlwW2ldICo9IHJwdHIucmV0d29yZHNbMl07CisJCQlwW2ldICs9IHJwdHIucmV0d29yZHNbM107CisJCQlwW2ldIC89IDY1NTM2OworCQl9CisJCXMrKzsKKwl9CisJaWYgKHBbMF0pIHsKKwkJaWYgKHBbMV0gIT0gcFswXSkKKwkJCXNuZF9wcmludGRkKCJyYXRlcyBkaWZmZXIgJWQgJWRcbiIsIHBbMF0sIHBbMV0pOworCQkqcmF0ZSA9ICh1bnNpZ25lZCBpbnQpcFswXTsKKwl9IGVsc2UKKwkJKnJhdGUgPSAodW5zaWduZWQgaW50KXBbMV07CisJc25kX3ByaW50ZGQoImdldHNhbXBsZWZvcm1hdCAlZCAlZCAlZFxuIiwgaW50ZGVjWzBdLCBpbnRkZWNbMV0sICpyYXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2V0c2FtcGxlZm9ybWF0KHN0cnVjdCBjbWRpZiAqY2lmLAorCQl1bnNpZ25lZCBjaGFyIG1peGVyLCB1bnNpZ25lZCBjaGFyIGlkLAorCQl1bnNpZ25lZCBjaGFyIGNoYW5uZWxzLCB1bnNpZ25lZCBjaGFyIGZvcm1hdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHcsIGNoLCBzaWcsIG9yZGVyOworCisJc25kX3ByaW50ZGQKKwkgICAgKCJzZXRzYW1wbGVmb3JtYXQgbWl4ZXI6ICVkIGlkOiAlZCBjaGFubmVsczogJWQgZm9ybWF0OiAlZFxuIiwKKwkgICAgIG1peGVyLCBpZCwgY2hhbm5lbHMsIGZvcm1hdCk7CisJY2ggPSBjaGFubmVscyA9PSAxOworCXcgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChmb3JtYXQpID09IDg7CisJc2lnID0gc25kX3BjbV9mb3JtYXRfdW5zaWduZWQoZm9ybWF0KSAhPSAwOworCW9yZGVyID0gc25kX3BjbV9mb3JtYXRfYmlnX2VuZGlhbihmb3JtYXQpICE9IDA7CisKKwlpZiAoU0VORF9TRVRGKGNpZiwgbWl4ZXIsIHcsIGNoLCBvcmRlciwgc2lnLCBpZCkgJiYKKwkgICAgU0VORF9TRVRGKGNpZiwgbWl4ZXIsIHcsIGNoLCBvcmRlciwgc2lnLCBpZCkpIHsKKwkJc25kX3ByaW50ZGQoInNldHNhbXBsZWZvcm1hdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldHNhbXBsZXJhdGUoc3RydWN0IGNtZGlmICpjaWYsIHVuc2lnbmVkIGNoYXIgKmludGRlYywgdW5zaWduZWQgaW50IHJhdGUpCit7CisJdTMyIEQsIE0sIE47CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwlpbnQgaTsKKworCXNuZF9wcmludGRkKCJzZXRzYW1wbGVyYXRlIGludGRlYzogJWQsJWQgcmF0ZTogJWRcbiIsIGludGRlY1swXSwKKwkJICAgIGludGRlY1sxXSwgcmF0ZSk7CisJRCA9IDQ4MDAwOworCU0gPSAoKHJhdGUgPT0gNDgwMDApID8gNDc5OTkgOiByYXRlKSAqIDY1NTM2OworCU4gPSBNICUgRDsKKwlNIC89IEQ7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoKmludGRlYyAhPSAweGZmKSB7CisJCQlkbyB7CisJCQkJU0VORF9TU1JDKGNpZiwgKmludGRlYywgRCwgTSwgTik7CisJCQkJU0VORF9SU1JDKGNpZiwgKmludGRlYywgJnJwdHIpOworCQkJfSB3aGlsZSAocnB0ci5yZXR3b3Jkc1sxXSAhPSBEICYmCisJCQkJIHJwdHIucmV0d29yZHNbMl0gIT0gTSAmJgorCQkJCSBycHRyLnJldHdvcmRzWzNdICE9IE4gJiYKKwkJCQkgaSsrIDwgTUFYX1dSSVRFX1JFVFJZKTsKKwkJCWlmIChpID09IE1BWF9XUklURV9SRVRSWSkgeworCQkJCXNuZF9wcmludGRkKCJzZW50IHNhbXBsZXJhdGUgJWQ6ICVkIGZhaWxlZFxuIiwKKwkJCQkJICAgICppbnRkZWMsIHJhdGUpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJCWludGRlYysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0bWl4ZXIoc3RydWN0IGNtZGlmICpjaWYsIHNob3J0IG51bSwgdW5zaWduZWQgc2hvcnQgKnJ2YWwsCisJIHVuc2lnbmVkIHNob3J0ICpsdmFsKQoreworCXVuaW9uIGNtZHJldCBycHRyID0gQ01EUkVUX1pFUk87CisKKwlpZiAoU0VORF9SREdWKGNpZiwgbnVtLCBudW0sICZycHRyKSAmJiBTRU5EX1JER1YoY2lmLCBudW0sIG51bSwgJnJwdHIpKQorCQlyZXR1cm4gLUVJTzsKKwkqcnZhbCA9IHJwdHIucmV0d29yZHNbMF07CisJKmx2YWwgPSBycHRyLnJldHdvcmRzWzFdOworCXNuZF9wcmludGRkKCJnb3QgbWl4ZXIgJWQ6IDB4JWQgMHglZFxuIiwgbnVtLCAqcnZhbCwgKmx2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByaXB0aWRlX2hhbmRsZWlycSh1bnNpZ25lZCBsb25nIGRldl9pZCkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSAodm9pZCAqKWRldl9pZDsKKwlzdHJ1Y3QgY21kaWYgKmNpZiA9IGNoaXAtPmNpZjsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbVtQTEFZQkFDS19TVUJTVFJFQU1TICsgMV07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwlzdHJ1Y3QgcGNtaHcgKmRhdGEgPSBOVUxMOworCXVuc2lnbmVkIGludCBwb3MsIHBlcmlvZF9ieXRlczsKKwlzdHJ1Y3Qgc2dkICpjOworCWludCBpLCBqOworCXVuc2lnbmVkIGludCBmbGFnOworCisJaWYgKCFjaWYpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBQTEFZQkFDS19TVUJTVFJFQU1TOyBpKyspCisJCXN1YnN0cmVhbVtpXSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbVtpXTsKKwlzdWJzdHJlYW1baV0gPSBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbTsKKwlmb3IgKGkgPSAwOyBpIDwgUExBWUJBQ0tfU1VCU1RSRUFNUyArIDE7IGkrKykgeworCQlpZiAoc3Vic3RyZWFtW2ldICYmCisJCSAgICAocnVudGltZSA9IHN1YnN0cmVhbVtpXS0+cnVudGltZSkgJiYKKwkJICAgIChkYXRhID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhKSAmJiBkYXRhLT5zdGF0ZSAhPSBTVF9TVE9QKSB7CisJCQlwb3MgPSAwOworCQkJZm9yIChqID0gMDsgaiA8IGRhdGEtPnBhZ2VzOyBqKyspIHsKKwkJCQljID0gJmRhdGEtPnNnZGJ1ZltqXTsKKwkJCQlmbGFnID0gbGUzMl90b19jcHUoYy0+ZHdTdGF0X0N0bCk7CisJCQkJaWYgKGZsYWcgJiBFT0JfU1RBVFVTKQorCQkJCQlwb3MgKz0gbGUzMl90b19jcHUoYy0+ZHdTZWdMZW4pOworCQkJCWlmIChmbGFnICYgRU9DX1NUQVRVUykKKwkJCQkJcG9zICs9IGxlMzJfdG9fY3B1KGMtPmR3U2VnTGVuKTsKKwkJCQlpZiAoKGZsYWcgJiBFT1NfU1RBVFVTKQorCQkJCSAgICAmJiAoZGF0YS0+c3RhdGUgPT0gU1RfUExBWSkpIHsKKwkJCQkJZGF0YS0+c3RhdGUgPSBTVF9TVE9QOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkgICAiUmlwdGlkZTogRE1BIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4iKTsKKwkJCQl9CisJCQkJYy0+ZHdTdGF0X0N0bCA9CisJCQkJICAgIGNwdV90b19sZTMyKGZsYWcgJgorCQkJCQkJfihFT1NfU1RBVFVTIHwgRU9CX1NUQVRVUyB8CisJCQkJCQkgIEVPQ19TVEFUVVMpKTsKKwkJCX0KKwkJCWRhdGEtPnBvaW50ZXIgKz0gcG9zOworCQkJcG9zICs9IGRhdGEtPm9sZHBvczsKKwkJCWlmIChkYXRhLT5zdGF0ZSAhPSBTVF9TVE9QKSB7CisJCQkJcGVyaW9kX2J5dGVzID0KKwkJCQkgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsCisJCQkJCQkgICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQkJCXNuZF9wcmludGRkCisJCQkJICAgICgiaW50ZXJydXB0IDB4JXggYWZ0ZXIgMHglbHggb2YgMHglbHggZnJhbWVzIGluIHBlcmlvZFxuIiwKKwkJCQkgICAgIFJFQURfQVVESU9fU1RBVFVTKGNpZi0+aHdwb3J0KSwKKwkJCQkgICAgIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBwb3MpLAorCQkJCSAgICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQkJCWogPSAwOworCQkJCWlmIChwb3MgPj0gcGVyaW9kX2J5dGVzKSB7CisJCQkJCWorKzsKKwkJCQkJd2hpbGUgKHBvcyA+PSBwZXJpb2RfYnl0ZXMpCisJCQkJCQlwb3MgLT0gcGVyaW9kX2J5dGVzOworCQkJCX0KKwkJCQlkYXRhLT5vbGRwb3MgPSBwb3M7CisJCQkJaWYgKGogPiAwKQorCQkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbVtpXSk7CisJCQl9CisJCX0KKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcmlwdGlkZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljaGlwLT5pbl9zdXNwZW5kID0gMTsKKwlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOworCXNuZF9hYzk3X3N1c3BlbmQoY2hpcC0+YWM5Nyk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByaXB0aWRlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisJcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKKwlwY2lfc2V0X21hc3RlcihwY2kpOworCXNuZF9yaXB0aWRlX2luaXRpYWxpemUoY2hpcCk7CisJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTcpOworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKwljaGlwLT5pbl9zdXNwZW5kID0gMDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJpcHRpZGVfcmVzZXQoc3RydWN0IGNtZGlmICpjaWYsIHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCkKK3sKKwlpbnQgdGltZW91dCwgdHJpZXM7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwl1bmlvbiBmaXJtd2FyZV92ZXJzaW9uIGZpcm13YXJlOworCWludCBpLCBqLCBlcnIsIGhhc19maXJtd2FyZTsKKworCWlmICghY2lmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNpZi0+Y21kY250ID0gMDsKKwljaWYtPmNtZHRpbWUgPSAwOworCWNpZi0+Y21kdGltZW1heCA9IDA7CisJY2lmLT5jbWR0aW1lbWluID0gMHhmZmZmZmZmZjsKKwljaWYtPmVycmNudCA9IDA7CisJY2lmLT5pc19yZXNldCA9IDA7CisKKwl0cmllcyA9IFJFU0VUX1RSSUVTOworCWhhc19maXJtd2FyZSA9IDA7CisJd2hpbGUgKGhhc19maXJtd2FyZSA9PSAwICYmIHRyaWVzLS0gPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCVdSSVRFX1BPUlRfVUxPTkcoY2lmLT5od3BvcnQtPnBvcnRbaV0uZGF0YTEsIDApOworCQkJV1JJVEVfUE9SVF9VTE9ORyhjaWYtPmh3cG9ydC0+cG9ydFtpXS5kYXRhMiwgMCk7CisJCX0KKwkJU0VUX0dSRVNFVChjaWYtPmh3cG9ydCk7CisJCXVkZWxheSgxMDApOworCQlVTlNFVF9HUkVTRVQoY2lmLT5od3BvcnQpOworCQl1ZGVsYXkoMTAwKTsKKworCQlmb3IgKHRpbWVvdXQgPSAxMDAwMDA7IC0tdGltZW91dDsgdWRlbGF5KDEwKSkgeworCQkJaWYgKElTX1JFQURZKGNpZi0+aHdwb3J0KSAmJiAhSVNfR0VSUihjaWYtPmh3cG9ydCkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICJSaXB0aWRlOiBkZXZpY2Ugbm90IHJlYWR5LCBhdWRpbyBzdGF0dXM6IDB4JXggcmVhZHk6ICVkIGdlcnI6ICVkXG4iLAorCQkJCSAgIFJFQURfQVVESU9fU1RBVFVTKGNpZi0+aHdwb3J0KSwKKwkJCQkgICBJU19SRUFEWShjaWYtPmh3cG9ydCksIElTX0dFUlIoY2lmLT5od3BvcnQpKTsKKwkJCXJldHVybiAtRUlPOworCQl9IGVsc2UgeworCQkJc25kX3ByaW50ZGQKKwkJCSAgICAoIlJpcHRpZGU6IGF1ZGlvIHN0YXR1czogMHgleCByZWFkeTogJWQgZ2VycjogJWRcbiIsCisJCQkgICAgIFJFQURfQVVESU9fU1RBVFVTKGNpZi0+aHdwb3J0KSwKKwkJCSAgICAgSVNfUkVBRFkoY2lmLT5od3BvcnQpLCBJU19HRVJSKGNpZi0+aHdwb3J0KSk7CisJCX0KKworCQlTRU5EX0dFVFYoY2lmLCAmcnB0cik7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQlmaXJtd2FyZS5yZXQucmV0d29yZHNbaV0gPSBycHRyLnJldHdvcmRzW2ldOworCisJCXNuZF9wcmludGRkCisJCSAgICAoIkZpcm13YXJlIHZlcnNpb246IEFTSUM6ICVkIENPREVDICVkIEFVWERTUCAlZCBQUk9HICVkXG4iLAorCQkgICAgIGZpcm13YXJlLmZpcm13YXJlLkFTSUMsIGZpcm13YXJlLmZpcm13YXJlLkNPREVDLAorCQkgICAgIGZpcm13YXJlLmZpcm13YXJlLkFVWERTUCwgZmlybXdhcmUuZmlybXdhcmUuUFJPRyk7CisKKwkJZm9yIChqID0gMDsgaiA8IEZJUk1XQVJFX1ZFUlNJT05TOyBqKyspIHsKKwkJCWhhc19maXJtd2FyZSA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJaWYgKGZpcm13YXJlX3ZlcnNpb25zW2pdLnJldC5yZXR3b3Jkc1tpXSAhPQorCQkJCSAgICBmaXJtd2FyZS5yZXQucmV0d29yZHNbaV0pCisJCQkJCWhhc19maXJtd2FyZSA9IDA7CisJCQl9CisJCQlpZiAoaGFzX2Zpcm13YXJlKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNoaXAgIT0gTlVMTCAmJiBoYXNfZmlybXdhcmUgPT0gMCkgeworCQkJc25kX3ByaW50ZGQoIldyaXRpbmcgRmlybXdhcmVcbiIpOworCQkJaWYgKCFjaGlwLT5md19lbnRyeSkgeworCQkJCWlmICgoZXJyID0KKwkJCQkgICAgIHJlcXVlc3RfZmlybXdhcmUoJmNoaXAtPmZ3X2VudHJ5LAorCQkJCQkJICAgICAgInJpcHRpZGUuaGV4IiwKKwkJCQkJCSAgICAgICZjaGlwLT5wY2ktPmRldikpICE9IDApIHsKKwkJCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCQkJICAgIlJpcHRpZGU6IEZpcm13YXJlIG5vdCBhdmFpbGFibGUgJWRcbiIsCisJCQkJCQkgICBlcnIpOworCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl9CisJCQl9CisJCQllcnIgPSBsb2FkZmlybXdhcmUoY2lmLCBjaGlwLT5md19lbnRyeS0+ZGF0YSwKKwkJCQkJICAgY2hpcC0+ZndfZW50cnktPnNpemUpOworCQkJaWYgKGVycikKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICJSaXB0aWRlOiBDb3VsZCBub3QgbG9hZCBmaXJtd2FyZSAlZFxuIiwKKwkJCQkJICAgZXJyKTsKKwkJfQorCX0KKworCVNFTkRfU0FDUihjaWYsIDAsIEFDOTdfUkVTRVQpOworCVNFTkRfUkFDUihjaWYsIEFDOTdfUkVTRVQsICZycHRyKTsKKwlzbmRfcHJpbnRkZCgiQUM5NzogMHgleCAweCV4XG4iLCBycHRyLnJldGxvbmdzWzBdLCBycHRyLnJldGxvbmdzWzFdKTsKKworCVNFTkRfUExTVChjaWYsIDApOworCVNFTkRfU0xTVChjaWYsIDApOworCVNFTkRfRExTVChjaWYsIDApOworCVNFTkRfQUxTVChjaWYsIDApOworCVNFTkRfS0RNQShjaWYpOworCisJd3JpdGVhcm0oY2lmLCAweDMwMUY4LCAxLCAxKTsKKwl3cml0ZWFybShjaWYsIDB4MzAxRjQsIDEsIDEpOworCisJU0VORF9MU0VMKGNpZiwgTU9ERU1fQ01ELCAwLCAwLCBNT0RFTV9JTlRERUMsIE1PREVNX01FUkdFUiwKKwkJICBNT0RFTV9TUExJVFRFUiwgTU9ERU1fTUlYRVIpOworCXNldG1peGVyKGNpZiwgTU9ERU1fTUlYRVIsIDB4N2ZmZiwgMHg3ZmZmKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgQVJNMkxCVVNfRklGTzEzLCBsYnVzX3BsYXlfbW9kZW0sIE5VTEwsIE5VTEwpOworCisJU0VORF9MU0VMKGNpZiwgRk1fQ01ELCAwLCAwLCBGTV9JTlRERUMsIEZNX01FUkdFUiwgRk1fU1BMSVRURVIsCisJCSAgRk1fTUlYRVIpOworCXNldG1peGVyKGNpZiwgRk1fTUlYRVIsIDB4N2ZmZiwgMHg3ZmZmKTsKKwl3cml0ZWFybShjaWYsIDB4MzA2NDggKyBGTV9NSVhFUiAqIDQsIDB4MDEsIDB4MDAwMDAwMDUpOworCXdyaXRlYXJtKGNpZiwgMHgzMDFBOCwgMHgwMiwgMHgwMDAwMDAwMik7CisJd3JpdGVhcm0oY2lmLCAweDMwMjY0LCAweDA4LCAweGZmZmZmZmZmKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgT1BMM19TQU1QTEUsIGxidXNfcGxheV9vcGwzLCBOVUxMLCBOVUxMKTsKKworCVNFTkRfU1NSQyhjaWYsIEkyU19JTlRERUMsIDQ4MDAwLAorCQkgICgodTMyKSBJMlNfUkFURSAqIDY1NTM2KSAvIDQ4MDAwLAorCQkgICgodTMyKSBJMlNfUkFURSAqIDY1NTM2KSAlIDQ4MDAwKTsKKwlTRU5EX0xTRUwoY2lmLCBJMlNfQ01EMCwgMCwgMCwgSTJTX0lOVERFQywgSTJTX01FUkdFUiwgSTJTX1NQTElUVEVSLAorCQkgIEkyU19NSVhFUik7CisJU0VORF9TSTJTKGNpZiwgMSk7CisJYWxsb2NsYnVzcGF0aChjaWYsIEFSTTJMQlVTX0ZJRk8wLCBsYnVzX3BsYXlfaTJzLCBOVUxMLCBOVUxMKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgRElHSVRBTF9NSVhFUl9PVVQwLCBsYnVzX3BsYXlfb3V0LCBOVUxMLCBOVUxMKTsKKwlhbGxvY2xidXNwYXRoKGNpZiwgRElHSVRBTF9NSVhFUl9PVVQwLCBsYnVzX3BsYXlfb3V0aHAsIE5VTEwsIE5VTEwpOworCisJU0VUX0FJQUNLKGNpZi0+aHdwb3J0KTsKKwlTRVRfQUlFKGNpZi0+aHdwb3J0KTsKKwlTRVRfQUlBQ0soY2lmLT5od3BvcnQpOworCWNpZi0+aXNfcmVzZXQgPSAxOworCWlmIChjaGlwKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQljaGlwLT5maXJtd2FyZS5yZXQucmV0d29yZHNbaV0gPQorCQkJICAgIGZpcm13YXJlLnJldC5yZXR3b3Jkc1tpXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9yaXB0aWRlX3BsYXliYWNrID0geworCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorCS5mb3JtYXRzID0KKwkgICAgU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TOAorCSAgICB8IFNORFJWX1BDTV9GTVRCSVRfVTE2X0xFLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0tOT1QgfCBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9IDU1MDAsCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAoNjQgKiAxMDI0KSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IFBBR0VfU0laRSA+PiAxLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gUEFHRV9TSVpFIDw8IDgsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA2NCwKKwkuZmlmb19zaXplID0gMCwKK307CitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3JpcHRpZGVfY2FwdHVyZSA9IHsKKwkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cyA9CisJICAgIFNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzgKKwkgICAgfCBTTkRSVl9QQ01fRk1UQklUX1UxNl9MRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9UIHwgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPSA1NTAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gKDY0ICogMTAyNCksCisJLnBlcmlvZF9ieXRlc19taW4gPSBQQUdFX1NJWkUgPj4gMSwKKwkucGVyaW9kX2J5dGVzX21heCA9IFBBR0VfU0laRSA8PCAzLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gNjQsCisJLmZpZm9fc2l6ZSA9IDAsCit9OworCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3JpcHRpZGVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0KKwkJCQkJICAgICAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBwY21odyAqZGF0YSA9IGdldF9wY21od2RldihzdWJzdHJlYW0pOworCXN0cnVjdCBjbWRpZiAqY2lmID0gY2hpcC0+Y2lmOworCXVuaW9uIGNtZHJldCBycHRyID0gQ01EUkVUX1pFUk87CisJc25kX3BjbV91ZnJhbWVzX3QgcmV0OworCisJU0VORF9HUE9TKGNpZiwgMCwgZGF0YS0+aWQsICZycHRyKTsKKwlpZiAoZGF0YS0+c2l6ZSAmJiBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzbmRfcHJpbnRkZAorCQkgICAgKCJwb2ludGVyIHN0cmVhbSAlZCBwb3NpdGlvbiAweCV4KDB4JXggaW4gYnVmZmVyKSBieXRlcyAweCVseCgweCVseCBpbiBwZXJpb2QpIGZyYW1lc1xuIiwKKwkJICAgICBkYXRhLT5pZCwgcnB0ci5yZXRsb25nc1sxXSwgcnB0ci5yZXRsb25nc1sxXSAlIGRhdGEtPnNpemUsCisJCSAgICAgYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIHJwdHIucmV0bG9uZ3NbMV0pLAorCQkgICAgIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLAorCQkJCSAgICAgcnB0ci5yZXRsb25nc1sxXSkgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCWlmIChycHRyLnJldGxvbmdzWzFdID4gZGF0YS0+cG9pbnRlcikKKwkJCXJldCA9CisJCQkgICAgYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsCisJCQkJCSAgICBycHRyLnJldGxvbmdzWzFdICUgZGF0YS0+c2l6ZSk7CisJCWVsc2UKKwkJCXJldCA9CisJCQkgICAgYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsCisJCQkJCSAgICBkYXRhLT5wb2ludGVyICUgZGF0YS0+c2l6ZSk7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ZGQoInN0cmVhbSBub3Qgc3RhcnRlZCBvciBzdHJhbmdlIHBhcm1zICglZCAlbGQpXG4iLAorCQkJICAgIGRhdGEtPnNpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJcmV0ID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIDApOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJaW50IGksIGo7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwY21odyAqZGF0YSA9IGdldF9wY21od2RldihzdWJzdHJlYW0pOworCXN0cnVjdCBjbWRpZiAqY2lmID0gY2hpcC0+Y2lmOworCXVuaW9uIGNtZHJldCBycHRyID0gQ01EUkVUX1pFUk87CisKKwlzcGluX2xvY2soJmNoaXAtPmxvY2spOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJaWYgKCEoZGF0YS0+c3RhdGUgJiBTVF9QTEFZKSkgeworCQkJU0VORF9TU1RSKGNpZiwgZGF0YS0+aWQsIGRhdGEtPnNnZGxpc3QuYWRkcik7CisJCQlTRVRfQUlFKGNpZi0+aHdwb3J0KTsKKwkJCWRhdGEtPnN0YXRlID0gU1RfUExBWTsKKwkJCWlmIChkYXRhLT5taXhlciAhPSAweGZmKQorCQkJCXNldG1peGVyKGNpZiwgZGF0YS0+bWl4ZXIsIDB4N2ZmZiwgMHg3ZmZmKTsKKwkJCWNoaXAtPm9wZW5zdHJlYW1zKys7CisJCQlkYXRhLT5vbGRwb3MgPSAwOworCQkJZGF0YS0+cG9pbnRlciA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJaWYgKGRhdGEtPm1peGVyICE9IDB4ZmYpCisJCQlzZXRtaXhlcihjaWYsIGRhdGEtPm1peGVyLCAwLCAwKTsKKwkJc2V0bWl4ZXIoY2lmLCBkYXRhLT5taXhlciwgMCwgMCk7CisJCVNFTkRfS1NUUihjaWYsIGRhdGEtPmlkKTsKKwkJZGF0YS0+c3RhdGUgPSBTVF9TVE9QOworCQljaGlwLT5vcGVuc3RyZWFtcy0tOworCQlqID0gMDsKKwkJZG8geworCQkJaSA9IHJwdHIucmV0bG9uZ3NbMV07CisJCQlTRU5EX0dQT1MoY2lmLCAwLCBkYXRhLT5pZCwgJnJwdHIpOworCQkJdWRlbGF5KDEpOworCQl9IHdoaWxlIChpICE9IHJwdHIucmV0bG9uZ3NbMV0gJiYgaisrIDwgTUFYX1dSSVRFX1JFVFJZKTsKKwkJaWYgKGogPj0gTUFYX1dSSVRFX1JFVFJZKQorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiUmlwdGlkZTogQ291bGQgbm90IHN0b3Agc3RyZWFtISIpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlmICghKGRhdGEtPnN0YXRlICYgU1RfUEFVU0UpKSB7CisJCQlTRU5EX1BTVFIoY2lmLCBkYXRhLT5pZCk7CisJCQlkYXRhLT5zdGF0ZSB8PSBTVF9QQVVTRTsKKwkJCWNoaXAtPm9wZW5zdHJlYW1zLS07CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoZGF0YS0+c3RhdGUgJiBTVF9QQVVTRSkgeworCQkJU0VORF9TU1RSKGNpZiwgZGF0YS0+aWQsIGRhdGEtPnNnZGxpc3QuYWRkcik7CisJCQlkYXRhLT5zdGF0ZSAmPSB+U1RfUEFVU0U7CisJCQljaGlwLT5vcGVuc3RyZWFtcysrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc2dfYnVmICpzZ2J1ZiA9IHNuZF9wY21fc3Vic3RyZWFtX3NnYnVmKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisJc3RydWN0IGNtZGlmICpjaWYgPSBjaGlwLT5jaWY7CisJdW5zaWduZWQgY2hhciAqbGJ1c3BhdGggPSBOVUxMOworCXVuc2lnbmVkIGludCByYXRlLCBjaGFubmVsczsKKwlpbnQgZXJyID0gMDsKKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsKKworCXNuZF9hc3NlcnQoY2lmICYmIGRhdGEsIHJldHVybiAtRUlOVkFMKTsKKworCXNuZF9wcmludGRkKCJwcmVwYXJlIGlkICVkIGNoOiAlZCBmOjB4JXggcjolZFxuIiwgZGF0YS0+aWQsCisJCSAgICBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5yYXRlKTsKKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCWNoYW5uZWxzID0gcnVudGltZS0+Y2hhbm5lbHM7CisJZm9ybWF0ID0gcnVudGltZS0+Zm9ybWF0OworCXJhdGUgPSBydW50aW1lLT5yYXRlOworCXN3aXRjaCAoY2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCWlmIChyYXRlID09IDQ4MDAwICYmIGZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSkKKwkJCWxidXNwYXRoID0gZGF0YS0+cGF0aHMubm9jb252OworCQllbHNlCisJCQlsYnVzcGF0aCA9IGRhdGEtPnBhdGhzLm1vbm87CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKHJhdGUgPT0gNDgwMDAgJiYgZm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFKQorCQkJbGJ1c3BhdGggPSBkYXRhLT5wYXRocy5ub2NvbnY7CisJCWVsc2UKKwkJCWxidXNwYXRoID0gZGF0YS0+cGF0aHMuc3RlcmVvOworCQlicmVhazsKKwl9CisJc25kX3ByaW50ZGQoInVzZSBzZ2RsaXN0IGF0IDB4JXAgYW5kIGJ1ZmZlciBhdCAweCVwXG4iLAorCQkgICAgZGF0YS0+c2dkbGlzdC5hcmVhLCBzZ2J1Zik7CisJaWYgKGRhdGEtPnNnZGxpc3QuYXJlYSAmJiBzZ2J1ZikgeworCQl1bnNpZ25lZCBpbnQgaSwgaiwgc2l6ZSwgcGFnZXMsIGYsIHB0LCBwZXJpb2Q7CisJCXN0cnVjdCBzZ2QgKmMsICpwID0gTlVMTDsKKworCQlzaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKKwkJcGVyaW9kID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJZiA9IFBBR0VfU0laRTsKKwkJd2hpbGUgKChzaXplICsgKGYgPj4gMSkgLSAxKSA8PSAoZiA8PCA3KSAmJiAoZiA8PCAxKSA+IHBlcmlvZCkKKwkJCWYgPSBmID4+IDE7CisJCXBhZ2VzID0gKHNpemUgKyBmIC0gMSkgLyBmOworCQlkYXRhLT5zaXplID0gc2l6ZTsKKwkJZGF0YS0+cGFnZXMgPSBwYWdlczsKKwkJc25kX3ByaW50ZGQKKwkJICAgICgiY3JlYXRlIHNnZCBzaXplOiAweCV4IHBhZ2VzICVkIG9mIHNpemUgMHgleCBmb3IgcGVyaW9kIDB4JXhcbiIsCisJCSAgICAgc2l6ZSwgcGFnZXMsIGYsIHBlcmlvZCk7CisJCXB0ID0gMDsKKwkJaiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCQljID0gJmRhdGEtPnNnZGJ1ZltpXTsKKwkJCWlmIChwKQorCQkJCXAtPmR3TmV4dExpbmsgPSBjcHVfdG9fbGUzMihkYXRhLT5zZ2RsaXN0LmFkZHIgKworCQkJCQkJCSAgICAoaSAqCisJCQkJCQkJICAgICBzaXplb2Yoc3RydWN0CisJCQkJCQkJCSAgICBzZ2QpKSk7CisJCQljLT5kd05leHRMaW5rID0gY3B1X3RvX2xlMzIoZGF0YS0+c2dkbGlzdC5hZGRyKTsKKwkJCWMtPmR3U2VnUHRyUGh5cyA9CisJCQkgICAgY3B1X3RvX2xlMzIoc2didWYtPnRhYmxlW2pdLmFkZHIgKyBwdCk7CisJCQlwdCA9IChwdCArIGYpICUgUEFHRV9TSVpFOworCQkJaWYgKHB0ID09IDApCisJCQkJaisrOworCQkJYy0+ZHdTZWdMZW4gPSBjcHVfdG9fbGUzMihmKTsKKwkJCWMtPmR3U3RhdF9DdGwgPQorCQkJICAgIGNwdV90b19sZTMyKElFT0JfRU5BQkxFIHwgSUVPU19FTkFCTEUgfAorCQkJCQlJRU9DX0VOQUJMRSk7CisJCQlwID0gYzsKKwkJCXNpemUgLT0gZjsKKwkJfQorCQlkYXRhLT5zZ2RidWZbaV0uZHdTZWdMZW4gPSBjcHVfdG9fbGUzMihzaXplKTsKKwl9CisJaWYgKGxidXNwYXRoICYmIGxidXNwYXRoICE9IGRhdGEtPmxidXNwYXRoKSB7CisJCWlmIChkYXRhLT5sYnVzcGF0aCkKKwkJCWZyZWVsYnVzcGF0aChjaWYsIGRhdGEtPnNvdXJjZSwgZGF0YS0+bGJ1c3BhdGgpOworCQlhbGxvY2xidXNwYXRoKGNpZiwgZGF0YS0+c291cmNlLCBsYnVzcGF0aCwKKwkJCSAgICAgICZkYXRhLT5taXhlciwgZGF0YS0+aW50ZGVjKTsKKwkJZGF0YS0+bGJ1c3BhdGggPSBsYnVzcGF0aDsKKwkJZGF0YS0+cmF0ZSA9IDA7CisJfQorCWlmIChkYXRhLT5yYXRlICE9IHJhdGUgfHwgZGF0YS0+Zm9ybWF0ICE9IGZvcm1hdCB8fAorCSAgICBkYXRhLT5jaGFubmVscyAhPSBjaGFubmVscykgeworCQlkYXRhLT5yYXRlID0gcmF0ZTsKKwkJZGF0YS0+Zm9ybWF0ID0gZm9ybWF0OworCQlkYXRhLT5jaGFubmVscyA9IGNoYW5uZWxzOworCQlpZiAoc2V0c2FtcGxlZm9ybWF0CisJCSAgICAoY2lmLCBkYXRhLT5taXhlciwgZGF0YS0+aWQsIGNoYW5uZWxzLCBmb3JtYXQpCisJCSAgICB8fCBzZXRzYW1wbGVyYXRlKGNpZiwgZGF0YS0+aW50ZGVjLCByYXRlKSkKKwkJCWVyciA9IC1FSU87CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorc25kX3JpcHRpZGVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpzZ2RsaXN0ID0gJmRhdGEtPnNnZGxpc3Q7CisJaW50IGVycjsKKworCXNuZF9wcmludGRkKCJodyBwYXJhbXMgaWQgJWQgKHNnZGxpc3Q6IDB4JXAgMHglbHggJWQpXG4iLCBkYXRhLT5pZCwKKwkJICAgIHNnZGxpc3QtPmFyZWEsICh1bnNpZ25lZCBsb25nKXNnZGxpc3QtPmFkZHIsCisJCSAgICAoaW50KXNnZGxpc3QtPmJ5dGVzKTsKKwlpZiAoc2dkbGlzdC0+YXJlYSkKKwkJc25kX2RtYV9mcmVlX3BhZ2VzKHNnZGxpc3QpOworCWlmICgoZXJyID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzZ2QpICogKERFU0NfTUFYX01BU0sgKyAxKSwKKwkJCQkgICAgICAgc2dkbGlzdCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSaXB0aWRlOiBmYWlsZWQgdG8gYWxsb2MgJWQgZG1hIGJ5dGVzXG4iLAorCQkJICAgKGludClzaXplb2Yoc3RydWN0IHNnZCkgKiAoREVTQ19NQVhfTUFTSyArIDEpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGF0YS0+c2dkYnVmID0gKHN0cnVjdCBzZ2QgKilzZ2RsaXN0LT5hcmVhOworCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwY21odyAqZGF0YSA9IGdldF9wY21od2RldihzdWJzdHJlYW0pOworCXN0cnVjdCBjbWRpZiAqY2lmID0gY2hpcC0+Y2lmOworCisJaWYgKGNpZiAmJiBkYXRhKSB7CisJCWlmIChkYXRhLT5sYnVzcGF0aCkKKwkJCWZyZWVsYnVzcGF0aChjaWYsIGRhdGEtPnNvdXJjZSwgZGF0YS0+bGJ1c3BhdGgpOworCQlkYXRhLT5sYnVzcGF0aCA9IE5VTEw7CisJCWRhdGEtPnNvdXJjZSA9IDB4ZmY7CisJCWRhdGEtPmludGRlY1swXSA9IDB4ZmY7CisJCWRhdGEtPmludGRlY1sxXSA9IDB4ZmY7CisKKwkJaWYgKGRhdGEtPnNnZGxpc3QuYXJlYSkgeworCQkJc25kX2RtYV9mcmVlX3BhZ2VzKCZkYXRhLT5zZ2RsaXN0KTsKKwkJCWRhdGEtPnNnZGxpc3QuYXJlYSA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBwY21odyAqZGF0YTsKKwlpbnQgaW5kZXggPSBzdWJzdHJlYW0tPm51bWJlcjsKKworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbVtpbmRleF0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfcmlwdGlkZV9wbGF5YmFjazsKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWh3KSwgR0ZQX0tFUk5FTCk7CisJZGF0YS0+cGF0aHMgPSBsYnVzX3BsYXlfcGF0aHNbaW5kZXhdOworCWRhdGEtPmlkID0gcGxheV9pZHNbaW5kZXhdOworCWRhdGEtPnNvdXJjZSA9IHBsYXlfc291cmNlc1tpbmRleF07CisJZGF0YS0+aW50ZGVjWzBdID0gMHhmZjsKKwlkYXRhLT5pbnRkZWNbMV0gPSAweGZmOworCWRhdGEtPnN0YXRlID0gU1RfU1RPUDsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAorCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHBjbWh3ICpkYXRhOworCisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfcmlwdGlkZV9jYXB0dXJlOworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtaHcpLCBHRlBfS0VSTkVMKTsKKwlkYXRhLT5wYXRocyA9IGxidXNfcmVjX3BhdGg7CisJZGF0YS0+aWQgPSBQQURDOworCWRhdGEtPnNvdXJjZSA9IEFDTE5LMlBBREM7CisJZGF0YS0+aW50ZGVjWzBdID0gMHhmZjsKKwlkYXRhLT5pbnRkZWNbMV0gPSAweGZmOworCWRhdGEtPnN0YXRlID0gU1RfU1RPUDsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAorCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKK30KKworc3RhdGljIGludCBzbmRfcmlwdGlkZV9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisJaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtW2luZGV4XSA9IE5VTEw7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBjbWh3ICpkYXRhID0gZ2V0X3BjbWh3ZGV2KHN1YnN0cmVhbSk7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBOVUxMOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9yaXB0aWRlX3BsYXliYWNrX29wcyA9IHsKKwkub3BlbiA9IHNuZF9yaXB0aWRlX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0gc25kX3JpcHRpZGVfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9yaXB0aWRlX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNuZF9yaXB0aWRlX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBzbmRfcmlwdGlkZV9wcmVwYXJlLAorCS5wYWdlID0gc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSwKKwkudHJpZ2dlciA9IHNuZF9yaXB0aWRlX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBzbmRfcmlwdGlkZV9wb2ludGVyLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3JpcHRpZGVfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPSBzbmRfcmlwdGlkZV9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0gc25kX3JpcHRpZGVfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gc25kX3JpcHRpZGVfaHdfcGFyYW1zLAorCS5od19mcmVlID0gc25kX3JpcHRpZGVfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9yaXB0aWRlX3ByZXBhcmUsCisJLnBhZ2UgPSBzbmRfcGNtX3NnYnVmX29wc19wYWdlLAorCS50cmlnZ2VyID0gc25kX3JpcHRpZGVfdHJpZ2dlciwKKwkucG9pbnRlciA9IHNuZF9yaXB0aWRlX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX3JpcHRpZGVfcGNtKHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGVycjsKKworCWlmIChycGNtKQorCQkqcnBjbSA9IE5VTEw7CisJaWYgKChlcnIgPQorCSAgICAgc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIlJJUFRJREUiLCBkZXZpY2UsIFBMQVlCQUNLX1NVQlNUUkVBTVMsIDEsCisJCQkgJnBjbSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJJnNuZF9yaXB0aWRlX3BsYXliYWNrX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJJnNuZF9yaXB0aWRlX2NhcHR1cmVfb3BzKTsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCAiUklQVElERSIpOworCWNoaXAtPnBjbSA9IHBjbTsKKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWX1NHLAorCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJCSAgICAgIDY0ICogMTAyNCwgMTI4ICogMTAyNCk7CisJaWYgKHJwY20pCisJCSpycGNtID0gcGNtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3NuZF9yaXB0aWRlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3QgY21kaWYgKmNpZiA9IGNoaXAtPmNpZjsKKworCWlmIChjaWYpIHsKKwkJY2hpcC0+cmVjZWl2ZWRfaXJxcysrOworCQlpZiAoSVNfRU9CSVJRKGNpZi0+aHdwb3J0KSB8fCBJU19FT1NJUlEoY2lmLT5od3BvcnQpIHx8CisJCSAgICBJU19FT0NJUlEoY2lmLT5od3BvcnQpKSB7CisJCQljaGlwLT5oYW5kbGVkX2lycXMrKzsKKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmNoaXAtPnJpcHRpZGVfdHEpOworCQl9CisJCWlmIChjaGlwLT5ybWlkaSAmJiBJU19NUFVJUlEoY2lmLT5od3BvcnQpKSB7CisJCQljaGlwLT5oYW5kbGVkX2lycXMrKzsKKwkJCXNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoaXJxLAorCQkJCQkJICBjaGlwLT5ybWlkaS0+cHJpdmF0ZV9kYXRhLAorCQkJCQkJICByZWdzKTsKKwkJfQorCQlTRVRfQUlBQ0soY2lmLT5od3BvcnQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkCitzbmRfcmlwdGlkZV9jb2RlY193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNtZGlmICpjaWYgPSBjaGlwLT5jaWY7CisJdW5pb24gY21kcmV0IHJwdHIgPSBDTURSRVRfWkVSTzsKKwlpbnQgaSA9IDA7CisKKwlzbmRfYXNzZXJ0KGNpZiwgcmV0dXJuKTsKKworCXNuZF9wcmludGRkKCJXcml0ZSBBQzk3IHJlZyAweCV4IDB4JXhcbiIsIHJlZywgdmFsKTsKKwlkbyB7CisJCVNFTkRfU0FDUihjaWYsIHZhbCwgcmVnKTsKKwkJU0VORF9SQUNSKGNpZiwgcmVnLCAmcnB0cik7CisJfSB3aGlsZSAocnB0ci5yZXR3b3Jkc1sxXSAhPSB2YWwgJiYgaSsrIDwgTUFYX1dSSVRFX1JFVFJZKTsKKwlpZiAoaSA9PSBNQVhfV1JJVEVfUkVUUlkpCisJCXNuZF9wcmludGRkKCJXcml0ZSBBQzk3IHJlZyBmYWlsZWRcbiIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX3JpcHRpZGVfY29kZWNfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY21kaWYgKmNpZiA9IGNoaXAtPmNpZjsKKwl1bmlvbiBjbWRyZXQgcnB0ciA9IENNRFJFVF9aRVJPOworCisJc25kX2Fzc2VydChjaWYsIHJldHVybiAwKTsKKworCWlmIChTRU5EX1JBQ1IoY2lmLCByZWcsICZycHRyKSAhPSAwKQorCQlTRU5EX1JBQ1IoY2lmLCByZWcsICZycHRyKTsKKwlzbmRfcHJpbnRkZCgiUmVhZCBBQzk3IHJlZyAweCV4IGdvdCAweCV4XG4iLCByZWcsIHJwdHIucmV0d29yZHNbMV0pOworCXJldHVybiBycHRyLnJldHdvcmRzWzFdOworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX2luaXRpYWxpemUoc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwKQoreworCXN0cnVjdCBjbWRpZiAqY2lmOworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CisJaW50IGVycjsKKworCXNuZF9hc3NlcnQoY2hpcCwgcmV0dXJuIC1FSU5WQUwpOworCisJY2lmID0gY2hpcC0+Y2lmOworCWlmICghY2lmKSB7CisJCWlmICgoY2lmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtZGlmKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJY2lmLT5od3BvcnQgPSAoc3RydWN0IHJpcHRpZGVwb3J0ICopY2hpcC0+cG9ydDsKKwkJc3Bpbl9sb2NrX2luaXQoJmNpZi0+bG9jayk7CisJCWNoaXAtPmNpZiA9IGNpZjsKKwl9CisJY2lmLT5pc19yZXNldCA9IDA7CisJaWYgKChlcnIgPSByaXB0aWRlX3Jlc2V0KGNpZiwgY2hpcCkpICE9IDApCisJCXJldHVybiBlcnI7CisJZGV2aWNlX2lkID0gY2hpcC0+ZGV2aWNlX2lkOworCXN3aXRjaCAoZGV2aWNlX2lkKSB7CisJY2FzZSAweDQzMTA6CisJY2FzZSAweDQzMjA6CisJY2FzZSAweDQzMzA6CisJCXNuZF9wcmludGRkKCJNb2RlbSBlbmFibGU/XG4iKTsKKwkJU0VORF9TRVREUExMKGNpZik7CisJCWJyZWFrOworCX0KKwlzbmRfcHJpbnRkZCgiRW5hYmxpbmcgTVBVIElSUXNcbiIpOworCWlmIChjaGlwLT5ybWlkaSkKKwkJU0VUX0VNUFVJUlEoY2lmLT5od3BvcnQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfZnJlZShzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApCit7CisJc3RydWN0IGNtZGlmICpjaWY7CisKKwlzbmRfYXNzZXJ0KGNoaXAsIHJldHVybiAwKTsKKworCWlmICgoY2lmID0gY2hpcC0+Y2lmKSkgeworCQlTRVRfR1JFU0VUKGNpZi0+aHdwb3J0KTsKKwkJdWRlbGF5KDEwMCk7CisJCVVOU0VUX0dSRVNFVChjaWYtPmh3cG9ydCk7CisJCWtmcmVlKGNoaXAtPmNpZik7CisJfQorCWlmIChjaGlwLT5md19lbnRyeSkKKwkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5md19lbnRyeSk7CisJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CisJaWYgKGNoaXAtPmlycSA+PSAwKQorCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9yaXB0aWRlX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKworCXJldHVybiBzbmRfcmlwdGlkZV9mcmVlKGNoaXApOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX3JpcHRpZGVfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJICAgc3RydWN0IHNuZF9yaXB0aWRlICoqcmNoaXApCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwOworCXN0cnVjdCByaXB0aWRlcG9ydCAqaHdwb3J0OworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9yaXB0aWRlX2Rldl9mcmVlLAorCX07CisKKwkqcmNoaXAgPSBOVUxMOworCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICghKGNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3JpcHRpZGUpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCWNoaXAtPmNhcmQgPSBjYXJkOworCWNoaXAtPnBjaSA9IHBjaTsKKwljaGlwLT5pcnEgPSAtMTsKKwljaGlwLT5vcGVuc3RyZWFtcyA9IDA7CisJY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOworCWNoaXAtPnJlY2VpdmVkX2lycXMgPSAwOworCWNoaXAtPmhhbmRsZWRfaXJxcyA9IDA7CisJY2hpcC0+Y2lmID0gTlVMTDsKKwl0YXNrbGV0X2luaXQoJmNoaXAtPnJpcHRpZGVfdHEsIHJpcHRpZGVfaGFuZGxlaXJxLCAodW5zaWduZWQgbG9uZyljaGlwKTsKKworCWlmICgoY2hpcC0+cmVzX3BvcnQgPQorCSAgICAgcmVxdWVzdF9yZWdpb24oY2hpcC0+cG9ydCwgNjQsICJSSVBUSURFIikpID09IE5VTEwpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIlJpcHRpZGU6IHVuYWJsZSB0byBncmFiIHJlZ2lvbiAweCVseC0weCVseFxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyA2NCAtIDEpOworCQlzbmRfcmlwdGlkZV9mcmVlKGNoaXApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlod3BvcnQgPSAoc3RydWN0IHJpcHRpZGVwb3J0ICopY2hpcC0+cG9ydDsKKwlVTlNFVF9BSUUoaHdwb3J0KTsKKworCWlmIChyZXF1ZXN0X2lycQorCSAgICAocGNpLT5pcnEsIHNuZF9yaXB0aWRlX2ludGVycnVwdCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCisJICAgICAiUklQVElERSIsIGNoaXApKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlJpcHRpZGU6IHVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwKKwkJCSAgIHBjaS0+aXJxKTsKKwkJc25kX3JpcHRpZGVfZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+aXJxID0gcGNpLT5pcnE7CisJY2hpcC0+ZGV2aWNlX2lkID0gcGNpLT5kZXZpY2U7CisJcGNpX3NldF9tYXN0ZXIocGNpKTsKKwlpZiAoKGVyciA9IHNuZF9yaXB0aWRlX2luaXRpYWxpemUoY2hpcCkpIDwgMCkgeworCQlzbmRfcmlwdGlkZV9mcmVlKGNoaXApOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSkgPCAwKSB7CisJCXNuZF9yaXB0aWRlX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCisJKnJjaGlwID0gY2hpcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NuZF9yaXB0aWRlX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGNtaHcgKmRhdGE7CisJaW50IGk7CisJc3RydWN0IGNtZGlmICpjaWYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgcFsyNTZdOworCXVuc2lnbmVkIHNob3J0IHJ2YWwgPSAwLCBsdmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKworCWlmICghY2hpcCkKKwkJcmV0dXJuOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiJXNcblxuIiwgY2hpcC0+Y2FyZC0+bG9uZ25hbWUpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRldmljZSBJRDogMHgleFxuUmVjZWl2ZWQgSVJRczogKCVsZCklbGRcblBvcnRzOiIsCisJCSAgICBjaGlwLT5kZXZpY2VfaWQsIGNoaXAtPmhhbmRsZWRfaXJxcywgY2hpcC0+cmVjZWl2ZWRfaXJxcyk7CisJZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVjJTAyeDogJTA4eCIsCisJCQkgICAgKGkgJSAxNikgPyAnICcgOiAnXG4nLCBpLCBpbmwoY2hpcC0+cG9ydCArIGkpKTsKKwlpZiAoKGNpZiA9IGNoaXAtPmNpZikpIHsKKwkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJICAgICJcblZlcnNpb246IEFTSUM6ICVkIENPREVDOiAlZCBBVVhEU1A6ICVkIFBST0c6ICVkIiwKKwkJCSAgICBjaGlwLT5maXJtd2FyZS5maXJtd2FyZS5BU0lDLAorCQkJICAgIGNoaXAtPmZpcm13YXJlLmZpcm13YXJlLkNPREVDLAorCQkJICAgIGNoaXAtPmZpcm13YXJlLmZpcm13YXJlLkFVWERTUCwKKwkJCSAgICBjaGlwLT5maXJtd2FyZS5maXJtd2FyZS5QUk9HKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiXG5EaWdpdGFsIG1peGVyOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQkJZ2V0bWl4ZXIoY2lmLCBpLCAmcnZhbCwgJmx2YWwpOworCQkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4gJWQ6ICVkICVkIiwgaSwgcnZhbCwgbHZhbCk7CisJCX0KKwkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJICAgICJcbkFSTSBDb21tYW5kcyBudW06ICVkIGZhaWxlZDogJWQgdGltZTogJWQgbWF4OiAlZCBtaW46ICVkIiwKKwkJCSAgICBjaWYtPmNtZGNudCwgY2lmLT5lcnJjbnQsCisJCQkgICAgY2lmLT5jbWR0aW1lLCBjaWYtPmNtZHRpbWVtYXgsIGNpZi0+Y21kdGltZW1pbik7CisJfQorCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuT3BlbiBzdHJlYW1zICVkOlxuIiwgY2hpcC0+b3BlbnN0cmVhbXMpOworCWZvciAoaSA9IDA7IGkgPCBQTEFZQkFDS19TVUJTVFJFQU1TOyBpKyspIHsKKwkJaWYgKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbVtpXQorCQkgICAgJiYgY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtW2ldLT5ydW50aW1lCisJCSAgICAmJiAoZGF0YSA9CisJCQljaGlwLT5wbGF5YmFja19zdWJzdHJlYW1baV0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSkpIHsKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKKwkJCQkgICAgInN0cmVhbTogJWQgbWl4ZXI6ICVkIHNvdXJjZTogJWQgKCVkLCVkKVxuIiwKKwkJCQkgICAgZGF0YS0+aWQsIGRhdGEtPm1peGVyLCBkYXRhLT5zb3VyY2UsCisJCQkJICAgIGRhdGEtPmludGRlY1swXSwgZGF0YS0+aW50ZGVjWzFdKTsKKwkJCWlmICghKGdldHNhbXBsZXJhdGUoY2lmLCBkYXRhLT5pbnRkZWMsICZyYXRlKSkpCisJCQkJc25kX2lwcmludGYoYnVmZmVyLCAicmF0ZTogJWRcbiIsIHJhdGUpOworCQl9CisJfQorCWlmIChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbQorCSAgICAmJiBjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbS0+cnVudGltZQorCSAgICAmJiAoZGF0YSA9IGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKKwkJCSAgICAic3RyZWFtOiAlZCBtaXhlcjogJWQgc291cmNlOiAlZCAoJWQsJWQpXG4iLAorCQkJICAgIGRhdGEtPmlkLCBkYXRhLT5taXhlciwKKwkJCSAgICBkYXRhLT5zb3VyY2UsIGRhdGEtPmludGRlY1swXSwgZGF0YS0+aW50ZGVjWzFdKTsKKwkJaWYgKCEoZ2V0c2FtcGxlcmF0ZShjaWYsIGRhdGEtPmludGRlYywgJnJhdGUpKSkKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgInJhdGU6ICVkXG4iLCByYXRlKTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiUGF0aHM6XG4iKTsKKwlpID0gZ2V0cGF0aHMoY2lmLCBwKTsKKwl3aGlsZSAoaS0tKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiV4LT4leCAiLCBwW2kgLSAxXSwgcFtpXSk7CisJCWktLTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9yaXB0aWRlX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXApCit7CisJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKKworCWlmICghc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgInJpcHRpZGUiLCAmZW50cnkpKQorCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIDQwOTYsIHNuZF9yaXB0aWRlX3Byb2NfcmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9yaXB0aWRlX21peGVyKHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfYnVzICpwYnVzOworCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3OworCWludCBlcnIgPSAwOworCXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7CisJCS53cml0ZSA9IHNuZF9yaXB0aWRlX2NvZGVjX3dyaXRlLAorCQkucmVhZCA9IHNuZF9yaXB0aWRlX2NvZGVjX3JlYWQsCisJfTsKKworCW1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKwlhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisJYWM5Ny5zY2FwcyA9IEFDOTdfU0NBUF9TS0lQX01PREVNOworCisJaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgY2hpcCwgJnBidXMpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwljaGlwLT5hYzk3X2J1cyA9IHBidXM7CisJYWM5Ny5wY2kgPSBjaGlwLT5wY2k7CisJaWYgKChlcnIgPSBzbmRfYWM5N19taXhlcihwYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpKSA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIFNVUFBPUlRfSk9ZU1RJQ0sKK3N0YXRpYyBpbnQgaGF2ZV9qb3lzdGljazsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqcmlwdGlkZV9nYW1lcG9ydF9wY2k7CitzdGF0aWMgc3RydWN0IGdhbWVwb3J0ICpyaXB0aWRlX2dhbWVwb3J0OworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX3JpcHRpZGVfam95c3RpY2tfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0YXRpYyBpbnQgZGV2OworCisJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFlbmFibGVbZGV2XSkgeworCQlkZXYrKzsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGpveXN0aWNrX3BvcnRbZGV2XSkgeworCQlyaXB0aWRlX2dhbWVwb3J0ID0gZ2FtZXBvcnRfYWxsb2NhdGVfcG9ydCgpOworCQlpZiAocmlwdGlkZV9nYW1lcG9ydCkgeworCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbgorCQkJICAgIChqb3lzdGlja19wb3J0W2Rldl0sIDgsICJSaXB0aWRlIGdhbWVwb3J0IikpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiUmlwdGlkZTogY2Fubm90IGdyYWIgZ2FtZXBvcnQgMHgleFxuIiwKKwkJCQkJICAgam95c3RpY2tfcG9ydFtkZXZdKTsKKwkJCQlnYW1lcG9ydF9mcmVlX3BvcnQocmlwdGlkZV9nYW1lcG9ydCk7CisJCQkJcmlwdGlkZV9nYW1lcG9ydCA9IE5VTEw7CisJCQl9IGVsc2UgeworCQkJCXJpcHRpZGVfZ2FtZXBvcnRfcGNpID0gcGNpOworCQkJCXJpcHRpZGVfZ2FtZXBvcnQtPmlvID0gam95c3RpY2tfcG9ydFtkZXZdOworCQkJCWdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQocmlwdGlkZV9nYW1lcG9ydCk7CisJCQl9CisJCX0KKwl9CisJZGV2Kys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfcmlwdGlkZV9qb3lzdGlja19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlpZiAocmlwdGlkZV9nYW1lcG9ydCkgeworCQlpZiAocmlwdGlkZV9nYW1lcG9ydF9wY2kgPT0gcGNpKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihyaXB0aWRlX2dhbWVwb3J0LT5pbywgOCk7CisJCQlyaXB0aWRlX2dhbWVwb3J0X3BjaSA9IE5VTEw7CisJCQlnYW1lcG9ydF91bnJlZ2lzdGVyX3BvcnQocmlwdGlkZV9nYW1lcG9ydCk7CisJCQlyaXB0aWRlX2dhbWVwb3J0ID0gTlVMTDsKKwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc25kX2NhcmRfcmlwdGlkZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0YXRpYyBpbnQgZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXA7CisJdW5zaWduZWQgc2hvcnQgYWRkcjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWlmIChjYXJkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWlmICgoZXJyID0gc25kX3JpcHRpZGVfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlpZiAoKGVyciA9IHNuZF9yaXB0aWRlX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCWlmICgoZXJyID0gc25kX3JpcHRpZGVfbWl4ZXIoY2hpcCkpIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfRVhUX0xlZ2FjeV9NYXNrLCBMRUdBQ1lfRU5BQkxFX0FMTAorCQkJICAgICAgfCAob3BsM19wb3J0W2Rldl0gPyBMRUdBQ1lfRU5BQkxFX0ZNIDogMCkKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJCQkgICAgICB8IChqb3lzdGlja19wb3J0W2Rldl0gPyBMRUdBQ1lfRU5BQkxFX0dBTUVQT1JUIDoKKwkJCQkgMCkKKyNlbmRpZgorCQkJICAgICAgfCAobXB1X3BvcnRbZGV2XQorCQkJCSA/IChMRUdBQ1lfRU5BQkxFX01QVV9JTlQgfCBMRUdBQ1lfRU5BQkxFX01QVSkgOgorCQkJCSAwKQorCQkJICAgICAgfCAoKGNoaXAtPmlycSA8PCA0KSAmIDB4RjApKTsKKwlpZiAoKGFkZHIgPSBtcHVfcG9ydFtkZXZdKSAhPSAwKSB7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9FWFRfTVBVX0Jhc2UsIGFkZHIpOworCQlpZiAoKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX1JJUFRJREUsCisJCQkJCSAgICAgICBhZGRyLCAwLCBjaGlwLT5pcnEsIDAsCisJCQkJCSAgICAgICAmY2hpcC0+cm1pZGkpKSA8IDApCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJSaXB0aWRlOiBDYW4ndCBBbGxvY2F0ZSBNUFUgYXQgMHgleFxuIiwKKwkJCQkgICBhZGRyKTsKKwkJZWxzZQorCQkJY2hpcC0+bXB1YWRkciA9IGFkZHI7CisJfQorCWlmICgoYWRkciA9IG9wbDNfcG9ydFtkZXZdKSAhPSAwKSB7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9FWFRfRk1fQmFzZSwgYWRkcik7CisJCWlmICgoZXJyID0gc25kX29wbDNfY3JlYXRlKGNhcmQsIGFkZHIsIGFkZHIgKyAyLAorCQkJCQkgICBPUEwzX0hXX1JJUFRJREUsIDAsCisJCQkJCSAgICZjaGlwLT5vcGwzKSkgPCAwKQorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiUmlwdGlkZTogQ2FuJ3QgQWxsb2NhdGUgT1BMMyBhdCAweCV4XG4iLAorCQkJCSAgIGFkZHIpOworCQllbHNlIHsKKwkJCWNoaXAtPm9wbGFkZHIgPSBhZGRyOworCQkJaWYgKChlcnIgPQorCQkJICAgICBzbmRfb3BsM19od2RlcF9uZXcoY2hpcC0+b3BsMywgMCwgMSwgTlVMTCkpIDwgMCkKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiUmlwdGlkZTogQ2FuJ3QgQWxsb2NhdGUgT1BMMy1IV0RFUFxuIik7CisJCX0KKwl9CisjaWZkZWYgU1VQUE9SVF9KT1lTVElDSworCWlmICgoYWRkciA9IGpveXN0aWNrX3BvcnRbZGV2XSkgIT0gMCkgeworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfRVhUX0dhbWVfQmFzZSwgYWRkcik7CisJCWNoaXAtPmdhbWVhZGRyID0gYWRkcjsKKwl9CisjZW5kaWYKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJSSVBUSURFIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlJpcHRpZGUiKTsKKyNpZmRlZiBTVVBQT1JUX0pPWVNUSUNLCisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiJXMgYXQgMHglbHgsIGlycSAlaSBtcHUgMHgleCBvcGwzIDB4JXggZ2FtZXBvcnQgMHgleCIsCisJCSBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPnBvcnQsIGNoaXAtPmlycSwgY2hpcC0+bXB1YWRkciwKKwkJIGNoaXAtPm9wbGFkZHIsIGNoaXAtPmdhbWVhZGRyKTsKKyNlbHNlCisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiJXMgYXQgMHglbHgsIGlycSAlaSBtcHUgMHgleCBvcGwzIDB4JXgiLAorCQkgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEsIGNoaXAtPm1wdWFkZHIsCisJCSBjaGlwLT5vcGxhZGRyKTsKKyNlbmRpZgorCXNuZF9yaXB0aWRlX3Byb2NfaW5pdChjaGlwKTsKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisJZGV2Kys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY2FyZF9yaXB0aWRlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQoreworCXNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gIlJJUFRJREUiLAorCS5pZF90YWJsZSA9IHNuZF9yaXB0aWRlX2lkcywKKwkucHJvYmUgPSBzbmRfY2FyZF9yaXB0aWRlX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9yaXB0aWRlX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSByaXB0aWRlX3N1c3BlbmQsCisJLnJlc3VtZSA9IHJpcHRpZGVfcmVzdW1lLAorI2VuZGlmCit9OworCisjaWZkZWYgU1VQUE9SVF9KT1lTVElDSworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGpveXN0aWNrX2RyaXZlciA9IHsKKwkubmFtZSA9ICJSaXB0aWRlIEpveXN0aWNrIiwKKwkuaWRfdGFibGUgPSBzbmRfcmlwdGlkZV9qb3lzdGlja19pZHMsCisJLnByb2JlID0gc25kX3JpcHRpZGVfam95c3RpY2tfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9yaXB0aWRlX2pveXN0aWNrX3JlbW92ZSksCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9yaXB0aWRlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCWlmICgoZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKSkgPCAwKQorCQlyZXR1cm4gZXJyOworI2lmIGRlZmluZWQoU1VQUE9SVF9KT1lTVElDSykKKwlpZiAocGNpX3JlZ2lzdGVyX2RyaXZlcigmam95c3RpY2tfZHJpdmVyKSA8IDApIHsKKwkJaGF2ZV9qb3lzdGljayA9IDA7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJubyBqb3lzdGljayBmb3VuZFxuIik7CisJfSBlbHNlCisJCWhhdmVfam95c3RpY2sgPSAxOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfcmlwdGlkZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworI2lmIGRlZmluZWQoU1VQUE9SVF9KT1lTVElDSykKKwlpZiAoaGF2ZV9qb3lzdGljaykKKwkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZqb3lzdGlja19kcml2ZXIpOworI2VuZGlmCit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9yaXB0aWRlX2luaXQpOworbW9kdWxlX2V4aXQoYWxzYV9jYXJkX3JpcHRpZGVfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGFiNzg1NDQuLjU1YjFkNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpzcGRpZl9jdGw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTMyX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ybWUzMl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMiwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCx9LAogCXtQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2LmMgYi9zb3VuZC9wY2kvcm1lOTYuYwppbmRleCA2YzJhOWY0Li4zYzFiYzUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTYuYworKysgYi9zb3VuZC9wY2kvcm1lOTYuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAgICpzcGRpZl9jdGw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ybWU5Nl9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9YSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1hJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzgsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggZWJmN2EyYi4uNjFmODJmMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtNTY4LDcgKzU2OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9YSUxJTlgsCiAJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwgCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCBiNTUzOGVmLi43MjJiOWU2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BtX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwbV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWElMSU5YLAogCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1BfTUFESSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCBhNjg3ZWI2Li43NWQ2NDA2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS52ZW5kb3IJICAgPSAweDEwZWUsCiAJCS5kZXZpY2UJICAgPSAweDNmYzQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCAyZDY2YTA5Li45MWY4YmYzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3NvbmljX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9zb25pY19pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHg1MzMzLCAweGNhMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCiAgICAgICAgIHsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCBiNDUzODA0Li45NjI0YTVmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC02Myw3ICs2Myw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod2F2ZXRhYmxlX3NpemUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdhdmV0YWJsZV9zaXplLCAiTWF4aW11bSBtZW1vcnkgc2l6ZSBpbiBrQiBmb3Igd2F2ZXRhYmxlIHN5bnRoLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgpLCAKIAkJUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVFJJREVOVCwgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCksIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggMTk1N2QyOS4uMzlkYWY2MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0xMjMsNiArMTIzLDcgQEAKICNkZWZpbmUgVklBX1JFVl84MjMzQQkJMHg0MAkvKiAxIHJlYywgMSBtdWx0aS1wYiwgc3BkZiAqLwogI2RlZmluZSBWSUFfUkVWXzgyMzUJCTB4NTAJLyogMiByZWMsIDQgcGIsIDEgbXVsdGktcGIsIHNwZGlmICovCiAjZGVmaW5lIFZJQV9SRVZfODIzNwkJMHg2MAorI2RlZmluZSBWSUFfUkVWXzgyNTEJCTB4NzAKIAogLyoKICAqICBEaXJlY3QgcmVnaXN0ZXJzCkBAIC0zOTUsNyArMzk2LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJLyogMHgxMTA2LCAweDMwNTggKi8KIAl7IFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgVFlQRV9DQVJEX1ZJQTY4NiwgfSwJLyogNjg2QSAqLwogCS8qIDB4MTEwNiwgMHgzMDU5ICovCkBAIC04NjIsNiArODYzLDExIEBACiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IGluYihWSUFERVZfUkVHKHZpYWRldiwgT0ZGU0VUX1NUQVRVUykpOwogCisJLyogQW4gYXBwYXJlbnQgYnVnIGluIHRoZSA4MjUxIGlzIHdvcmtlZCBhcm91bmQgYnkgc2VuZGluZyBhIAorCSAqIFJFR19DVFJMX1NUQVJULiAqLworCWlmIChjaGlwLT5yZXZpc2lvbiA9PSBWSUFfUkVWXzgyNTEgJiYgKHN0YXR1cyAmIFZJQV9SRUdfU1RBVF9FT0wpKQorCQlzbmRfdmlhODJ4eF9wY21fdHJpZ2dlcihzdWJzdHJlYW0sIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKTsKKwogCWlmICghKHN0YXR1cyAmIFZJQV9SRUdfU1RBVF9BQ1RJVkUpKSB7CiAJCXJlcyA9IDA7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMjMxMyw2ICsyMzE5LDcgQEAKIAl7IFZJQV9SRVZfODIzM0EsICJWSUEgODIzM0EiLCBUWVBFX1ZJQTgyMzNBIH0sCiAJeyBWSUFfUkVWXzgyMzUsICJWSUEgODIzNSIsIFRZUEVfVklBODIzMyB9LAogCXsgVklBX1JFVl84MjM3LCAiVklBIDgyMzciLCBUWVBFX1ZJQTgyMzMgfSwKKwl7IFZJQV9SRVZfODI1MSwgIlZJQSA4MjUxIiwgVFlQRV9WSUE4MjMzIH0sCiB9OwogCiAvKgpAQCAtMjMyNSw3ICsyMzMyLDcgQEAKIAlzaG9ydCBhY3Rpb247CS8qIG5ldyBkeHNfc3VwcG9ydCB2YWx1ZSAqLwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgY2hlY2tfZHhzX2xpc3Qoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNoZWNrX2R4c19saXN0KHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCByZXZpc2lvbikKIHsKIAlzdGF0aWMgc3RydWN0IGR4c193aGl0ZWxpc3Qgd2hpdGVsaXN0W10gPSB7CiAJCXsgLnN1YnZlbmRvciA9IDB4MTAwNSwgLnN1YmRldmljZSA9IDB4NDcxMCwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEF2YW5jZSBMb2dpYyBNb2JvICovCkBAIC0yMzMzLDYgKzIzNDAsNyBAQAogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweDBhODEsIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBFQ1MgSzdWVEEzIHY4LjAgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDE5LCAuc3ViZGV2aWNlID0gMHgwYTg1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogRUNTIEw3Vk1NMiAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweGExMDEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LAorCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMTksIC5zdWJkZXZpY2UgPSAweGFhMDEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBFQ1MgSzhUODkwLUEgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDI1LCAuc3ViZGV2aWNlID0gMHgwMDMzLCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogQWNlciBJbnNwaXJlIDEzNTNMTSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwMjUsIC5zdWJkZXZpY2UgPSAweDAwNDYsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBBY2VyIEFzcGlyZSAxNTI0IFdMTWkgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MDk1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogQVNVUyBBN1Y4WCAoRklYTUU6IHBvc3NpYmx5IFZJQV9EWFNfRU5BQkxFPykqLwpAQCAtMjM0MSw2ICsyMzQ5LDcgQEAKIAkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MTBkLCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogQVNVUyAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDEwNDMsIC5zdWJkZXZpY2UgPSAweDgxMmEsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyAgICB9LCAvKiBBU1VTIEE4ViBEZWx1eGUgKi8gCiAJCXsgLnN1YnZlbmRvciA9IDB4MTA0MywgLnN1YmRldmljZSA9IDB4ODE3NCwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDICAgIH0sIC8qIEFTVVMgKi8KKwkJeyAuc3VidmVuZG9yID0gMHgxMDQzLCAuc3ViZGV2aWNlID0gMHg4MWI5LCAuYWN0aW9uID0gVklBX0RYU19TUkMgICAgfSwgLyogQVNVUyBBOFYtTVggKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDcxLCAuc3ViZGV2aWNlID0gMHg4Mzc1LCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogVm9iaXMvWWFrdW1vL01pdGFjIG5vdGVib29rICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTA3MSwgLnN1YmRldmljZSA9IDB4ODM5OSwgLmFjdGlvbiA9IFZJQV9EWFNfTk9fVlJBIH0sIC8qIFVtYXggQUIgNTk1VCAoVklBIEs4TjgwMEEgLSBWVDgyMzcpICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTBjZiwgLnN1YmRldmljZSA9IDB4MTE4ZSwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEZTQyBsYXB0b3AgKi8KQEAgLTIzNzMsNiArMjM4Miw3IEBACiAJCXsgLnN1YnZlbmRvciA9IDB4MTYxZiwgLnN1YmRldmljZSA9IDB4MjAzMiwgLmFjdGlvbiA9IFZJQV9EWFNfNDhLIH0sIC8qIG02ODB4IG1hY2hpbmVzICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTYzMSwgLnN1YmRldmljZSA9IDB4ZTAwNCwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEVhc3kgTm90ZSAzMTc0LCBQYWNrYXJkIEJlbGwgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxNjk1LCAuc3ViZGV2aWNlID0gMHgzMDA1LCAuYWN0aW9uID0gVklBX0RYU19FTkFCTEUgfSwgLyogRVBvWCBFUC04SzlBICovCisJCXsgLnN1YnZlbmRvciA9IDB4MTY5NSwgLnN1YmRldmljZSA9IDB4MzAwYywgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEVQb1ggRVAtOEtSQUkgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxNjk1LCAuc3ViZGV2aWNlID0gMHgzMDBlLCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogRVBvWCA5SEVBSSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDE2ZjMsIC5zdWJkZXZpY2UgPSAweDY0MDUsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBKZXR3YXkgSzhNOE1TICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTczNCwgLnN1YmRldmljZSA9IDB4MTA3OCwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEZTQyBBbWlsbyBMNzMwMCAqLwpAQCAtMjQwMyw2ICsyNDEzLDEwIEBACiAJCX0KIAl9CiAKKwkvKiBmb3IgbmV3ZXIgcmV2aXNpb24sIGRlZmF1bHQgdG8gRFhTX1NSQyAqLworCWlmIChyZXZpc2lvbiA+PSBWSUFfUkVWXzgyMzUpCisJCXJldHVybiBWSUFfRFhTX1NSQzsKKwogCS8qCiAJICogbm90IGRldGVjdGVkLCB0cnkgNDhrIHJhdGUgb25seSB0byBiZSBzdXJlLgogCSAqLwpAQCAtMjQ0Nyw3ICsyNDYxLDcgQEAKIAkJfQogCQlpZiAoY2hpcF90eXBlICE9IFRZUEVfVklBODIzM0EpIHsKIAkJCWlmIChkeHNfc3VwcG9ydCA9PSBWSUFfRFhTX0FVVE8pCi0JCQkJZHhzX3N1cHBvcnQgPSBjaGVja19keHNfbGlzdChwY2kpOworCQkJCWR4c19zdXBwb3J0ID0gY2hlY2tfZHhzX2xpc3QocGNpLCByZXZpc2lvbik7CiAJCQkvKiBmb3JjZSB0byB1c2UgVklBODIzMyBvciA4MjMzQSBtb2RlbCBhY2NvcmRpbmcgdG8KIAkJCSAqIGR4c19zdXBwb3J0IG1vZHVsZSBvcHRpb24KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKaW5kZXggMjJjZTRkMy4uZWY5N2U1MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTEwNiwgMHgzMDY4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBUWVBFX0NBUkRfVklBODJYWF9NT0RFTSwgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCmluZGV4IGM4MTZkZGYuLjBmMWViYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCkBAIC02MCw3ICs2MCw3IEBACiAJVlhfUENJX1ZYMjIyX05FVwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92eDIyMl9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdngyMjJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTBiNSwgMHg5MDUwLCAweDEzNjksIFBDSV9BTllfSUQsIDAsIDAsIFZYX1BDSV9WWDIyMl9PTEQsIH0sICAgLyogUExYICovCiAJeyAweDEwYjUsIDB4OTAzMCwgMHgxMzY5LCBQQ0lfQU5ZX0lELCAwLCAwLCBWWF9QQ0lfVlgyMjJfTkVXLCB9LCAgIC8qIFBMWCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKaW5kZXggZGI1N2NlOS4uNjVlYmY1ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCkBAIC03MCw3ICs3MCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocmVhcl9zd2FwLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2FwLCAiU3dhcCByZWFyIGNoYW5uZWxzIChtdXN0IGJlIGVuYWJsZWQgZm9yIGNvcnJlY3QgSUVDOTU4IChTL1BESUYpKSBvdXRwdXQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ltZnBjaV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogICAgICAgICB7IDB4MTA3MywgMHgwMDA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIFlNRjcyNCAqLwogICAgICAgICB7IDB4MTA3MywgMHgwMDBkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIFlNRjcyNEYgKi8KICAgICAgICAgeyAweDEwNzMsIDB4MDAwYSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgICAvKiBZTUY3NDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9LY29uZmlnIGIvc291bmQvcGNtY2lhL0tjb25maWcKaW5kZXggNWQxYjBiNy4uYzlmYTFhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL0tjb25maWcKKysrIGIvc291bmQvcGNtY2lhL0tjb25maWcKQEAgLTUsNyArNSw3IEBACiAKIGNvbmZpZyBTTkRfVlhQT0NLRVQKIAl0cmlzdGF0ZSAiRGlnaWdyYW0gVlhwb2NrZXQiCi0JZGVwZW5kcyBvbiBTTkQgJiYgUENNQ0lBICYmIElTQQorCWRlcGVuZHMgb24gU05EICYmIFBDTUNJQQogCXNlbGVjdCBTTkRfVlhfTElCCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIERpZ2lncmFtIFZYcG9ja2V0IGFuZApAQCAtMTYsNyArMTYsNyBAQAogCiBjb25maWcgU05EX1BEQVVESU9DRgogCXRyaXN0YXRlICJTb3VuZCBDb3JlIFBEQXVkaW9DRiIKLQlkZXBlbmRzIG9uIFNORCAmJiBQQ01DSUEgJiYgSVNBCisJZGVwZW5kcyBvbiBTTkQgJiYgUENNQ0lBCiAJc2VsZWN0IFNORF9QQ00KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgU291bmQgQ29yZSBQREF1ZGlvQ0YKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDc3Y2FmNDMuLmFkZmRjZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtNTcsMTggKzU3LDEyIEBACiAvKgogICogcHJvdG90eXBlcwogICovCi1zdGF0aWMgdm9pZCBwZGFjZl9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgaW50IHBkYWNmX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBzbmRfcGRhY2ZfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKLXN0YXRpYyB2b2lkIHBkYWNmX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluaykKK3N0YXRpYyB2b2lkIHBkYWNmX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQkvKiByZWxlYXNlIGNzIHJlc291cmNlcyAqLwotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7Ci0JCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOwotCX0KKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIC8qCkBAIC03Niw3ICs3MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3BkYWNmX2ZyZWUoc3RydWN0IHNuZF9wZGFjZiAqcGRhY2YpCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9ICZwZGFjZi0+bGluazsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHBkYWNmLT5wX2RldjsKIAogCXBkYWNmX3JlbGVhc2UobGluayk7CiAKQEAgLTk2LDEwICs5MCw5IEBACiAvKgogICogc25kX3BkYWNmX2F0dGFjaCAtIGF0dGFjaCBjYWxsYmFjayBmb3IgY3MKICAqLwotc3RhdGljIGludCBzbmRfcGRhY2ZfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgc25kX3BkYWNmX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWludCBpOwotCWRldl9saW5rX3QgKmxpbms7ICAgICAgICAgICAgICAgLyogSW5mbyBmb3IgY2FyZG1nciAqLwogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTEzOSw3ICsxMzIsNyBAQAogCXBkYWNmLT5pbmRleCA9IGk7CiAJY2FyZF9saXN0W2ldID0gY2FyZDsKIAotCWxpbmsgPSAmcGRhY2YtPmxpbms7CisJcGRhY2YtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gcGRhY2Y7CiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwpAQCAtMTU2LDEzICsxNDksNyBAQAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogCi0JLyogQ2hhaW4gZHJpdmVycyAqLwotCWxpbmstPm5leHQgPSBOVUxMOwotCi0JbGluay0+aGFuZGxlID0gcF9kZXY7Ci0JcGRhY2ZfY29uZmlnKGxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBkYWNmX2NvbmZpZyhsaW5rKTsKIH0KIAogCkBAIC0yMDksOSArMTk2LDggQEAKIC8qCiAgKiBzbmRfcGRhY2ZfZGV0YWNoIC0gZGV0YWNoIGNhbGxiYWNrIGZvciBjcwogICovCi1zdGF0aWMgdm9pZCBzbmRfcGRhY2ZfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0YXRpYyB2b2lkIHNuZF9wZGFjZl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IHNuZF9wZGFjZiAqY2hpcCA9IGxpbmstPnByaXY7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJwZGFjZl9kZXRhY2ggY2FsbGVkXG4iKTsKQEAgLTIzMCwxMyArMjE2LDExIEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHBkYWNmX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCBwZGFjZl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZiA9IGxpbmstPnByaXY7CiAJdHVwbGVfdCB0dXBsZTsKIAljaXNwYXJzZV90ICpwYXJzZSA9IE5VTEw7Ci0JY29uZmlnX2luZm9fdCBjb25mOwogCXVfc2hvcnQgYnVmWzMyXTsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CiAKQEAgLTI0NCw3ICsyMjgsNyBAQAogCXBhcnNlID0ga21hbGxvYyhzaXplb2YoKnBhcnNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgcGFyc2UpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGRhY2ZfY29uZmlnOiBjYW5ub3QgYWxsb2NhdGVcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKQEAgLTI1Miw3MSArMjM2LDUxIEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCBwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NTsKIAlrZnJlZShwYXJzZSk7CiAKLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCAmY29uZikpOwotCWxpbmstPmNvbmYuVmNjID0gY29uZi5WY2M7Ci0KLQkvKiBDb25maWd1cmUgY2FyZCAqLwotCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7Ci0KLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGhhbmRsZSwgJmxpbmstPmlvKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpKTsKKwlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCWlmIChzbmRfcGRhY2ZfYXNzaWduX3Jlc291cmNlcyhwZGFjZiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKLQlsaW5rLT5kZXYgPSAmcGRhY2YtPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKLQlyZXR1cm47CisJbGluay0+ZGV2X25vZGUgPSAmcGRhY2YtPm5vZGU7CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6Ci0JcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKLQlwY21jaWFfcmVsZWFzZV9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBwZGFjZl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHBkYWNmX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXN0cnVjdCBzbmRfcGRhY2YgKmNoaXAgPSBsaW5rLT5wcml2OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiU1VTUEVORFxuIik7Ci0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAJaWYgKGNoaXApIHsKIAkJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAic25kX3BkYWNmX3N1c3BlbmQgY2FsbGluZ1xuIik7CiAJCXNuZF9wZGFjZl9zdXNwZW5kKGNoaXAsIFBNU0dfU1VTUEVORCk7CiAJfQogCi0Jc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiUkVTRVRfUEhZU0lDQUxcbiIpOwotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpCi0JCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBkYWNmX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBwZGFjZl9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXN0cnVjdCBzbmRfcGRhY2YgKmNoaXAgPSBsaW5rLT5wcml2OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiUkVTVU1FXG4iKTsKLQlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7Ci0KLQlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJDQVJEX1JFU0VUXG4iKTsKLQlpZiAoREVWX09LKGxpbmspKSB7Ci0JCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInJlcXVlc3Rjb25maWcuLi5cbiIpOwotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCWlmIChwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKIAkJaWYgKGNoaXApIHsKIAkJCXNuZF9wcmludGRkKEtFUk5fREVCVUcgImNhbGxpbmcgc25kX3BkYWNmX3Jlc3VtZVxuIik7CiAJCQlzbmRfcGRhY2ZfcmVzdW1lKGNoaXApOwpAQCAtMzQzLDcgKzMwNyw3IEBACiAJLmRydgkJPSB7CiAJCS5uYW1lCT0gInNuZC1wZGF1ZGlvY2YiLAogCX0sCi0JLnByb2JlCQk9IHNuZF9wZGFjZl9hdHRhY2gsCisJLnByb2JlCQk9IHNuZF9wZGFjZl9wcm9iZSwKIAkucmVtb3ZlCQk9IHNuZF9wZGFjZl9kZXRhY2gsCiAJLmlkX3RhYmxlCT0gc25kX3BkYWNmX2lkcywKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmggYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCmluZGV4IDI3NDRmMTguLjlhMTRhNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaApAQCAtMTE2LDcgKzExNiw3IEBACiAJdm9pZCAqcGNtX2FyZWE7CiAJCiAJLyogcGNtY2lhIHN0dWZmICovCi0JZGV2X2xpbmtfdCBsaW5rOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlkZXZfbm9kZV90IG5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDY2OTAwZDIuLjdlMGNkYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC01OSwxNSArNTksOSBAQAogCiAvKgogICovCi1zdGF0aWMgdm9pZCB2eHBvY2tldF9yZWxlYXNlKGRldl9saW5rX3QgKmxpbmspCitzdGF0aWMgdm9pZCB2eHBvY2tldF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKLQkJLyogcmVsZWFzZSBjcyByZXNvdXJjZXMgKi8KLQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotCQlwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7Ci0JCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCQlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJRzsKLQl9CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCiAvKgpAQCAtMTMyLDkgKzEyNiw5IEBACiAvKgogICogY3JlYXRlIHZ4cG9ja2V0IGluc3RhbmNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICpzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCkKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICpzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCwKKwkJCQkJICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rOwkJLyogSW5mbyBmb3IgY2FyZG1nciAqLwogCXN0cnVjdCB2eF9jb3JlICpjaGlwOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKQEAgLTE1NCw3ICsxNDgsNyBAQAogCiAJdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwogCi0JbGluayA9ICZ2eHAtPmxpbms7CisJdnhwLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGNoaXA7CiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwpAQCAtMTY3LDcgKzE2MSw2IEBACiAJbGluay0+aXJxLkluc3RhbmNlID0gY2hpcDsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKLQlsaW5rLT5jb25mLlZjYyA9IDUwOwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwpAQCAtMjE1LDkgKzIwOCw4IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIHZ4cG9ja2V0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQorc3RhdGljIGludCB2eHBvY2tldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IGxpbmstPnByaXY7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwogCXR1cGxlX3QgdHVwbGU7CkBAIC0yMjksMjQgKzIyMSwyNCBAQAogCXBhcnNlID0ga21hbGxvYyhzaXplb2YoKnBhcnNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgcGFyc2UpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidng6IGNhbm5vdCBhbGxvY2F0ZVxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwogCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCBwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgcGFyc2UpKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UtPmNvbmZpZy5ybWFza1swXTsKIAogCS8qIHJlZGVmaW5lIGhhcmR3YXJlIHJlY29yZCBhY2NvcmRpbmcgdG8gdGhlIFZFUlNJT04xIHN0cmluZyAqLwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCBwYXJzZSkpOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgcGFyc2UpKTsKIAlpZiAoISBzdHJjbXAocGFyc2UtPnZlcnNpb25fMS5zdHIgKyBwYXJzZS0+dmVyc2lvbl8xLm9mc1sxXSwgIlZYLVBPQ0tFVCIpKSB7CiAJCXNuZF9wcmludGRkKCJWWC1wb2NrZXQgaXMgZGV0ZWN0ZWRcbiIpOwogCX0gZWxzZSB7CkBAIC0yNTcsNjcgKzI0OSw1MCBAQAogCQlzdHJjcHkoY2hpcC0+Y2FyZC0+ZHJpdmVyLCB2eHA0NDBfaHcubmFtZSk7CiAJfQogCi0JLyogQ29uZmlndXJlIGNhcmQgKi8KLQlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOworCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CisJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCi0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7Ci0KLQljaGlwLT5kZXYgPSAmaGFuZGxlX3RvX2RldihsaW5rLT5oYW5kbGUpOworCWNoaXAtPmRldiA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCXNuZF9jYXJkX3NldF9kZXYoY2hpcC0+Y2FyZCwgY2hpcC0+ZGV2KTsKIAogCWlmIChzbmRfdnhwb2NrZXRfYXNzaWduX3Jlc291cmNlcyhjaGlwLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgPCAwKQogCQlnb3RvIGZhaWxlZDsKIAotCWxpbmstPmRldiA9ICZ2eHAtPm5vZGU7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlsaW5rLT5kZXZfbm9kZSA9ICZ2eHAtPm5vZGU7CiAJa2ZyZWUocGFyc2UpOwotCXJldHVybjsKKwlyZXR1cm4gOTsKIAogY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKLQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7Ci0JcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOwotCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwotCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlrZnJlZShwYXJzZSk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCB2eHBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQorc3RhdGljIGludCB2eHBfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlkZXZfbGlua190ICpsaW5rID0gZGV2X3RvX2luc3RhbmNlKGRldik7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBsaW5rLT5wcml2OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiU1VTUEVORFxuIik7Ci0JbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CiAJaWYgKGNoaXApIHsKIAkJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAic25kX3Z4X3N1c3BlbmQgY2FsbGluZ1xuIik7CiAJCXNuZF92eF9zdXNwZW5kKGNoaXAsIFBNU0dfU1VTUEVORCk7CiAJfQotCXNuZF9wcmludGRkKEtFUk5fREVCVUcgIlJFU0VUX1BIWVNJQ0FMXG4iKTsKLQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQotCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2eHBfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHZ4cF9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShkZXYpOwogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gbGluay0+cHJpdjsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgIlJFU1VNRVxuIik7Ci0JbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOwotCi0Jc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiQ0FSRF9SRVNFVFxuIik7Ci0JaWYgKERFVl9PSyhsaW5rKSkgeworCWlmIChwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKIAkJLy9zdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHAgPSAoc3RydWN0IHNuZF92eHBvY2tldCAqKWNoaXA7Ci0JCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInJlcXVlc3Rjb25maWcuLi5cbiIpOwotCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwogCQlpZiAoY2hpcCkgewogCQkJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiY2FsbGluZyBzbmRfdnhfcmVzdW1lXG4iKTsKIAkJCXNuZF92eF9yZXN1bWUoY2hpcCk7CkBAIC0zMzMsNyArMzA4LDcgQEAKIAogLyoKICAqLwotc3RhdGljIGludCB2eHBvY2tldF9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCB2eHBvY2tldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cDsKQEAgLTM1OCw3ICszMzMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl2eHAgPSBzbmRfdnhwb2NrZXRfbmV3KGNhcmQsIGlibFtpXSk7CisJdnhwID0gc25kX3Z4cG9ja2V0X25ldyhjYXJkLCBpYmxbaV0sIHBfZGV2KTsKIAlpZiAoISB2eHApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNjgsMjAgKzM0MywxMyBAQAogCXZ4cC0+aW5kZXggPSBpOwogCWNhcmRfYWxsb2MgfD0gMSA8PCBpOwogCi0JLyogQ2hhaW4gZHJpdmVycyAqLwotCXZ4cC0+bGluay5uZXh0ID0gTlVMTDsKKwl2eHAtPnBfZGV2ID0gcF9kZXY7CiAKLQl2eHAtPmxpbmsuaGFuZGxlID0gcF9kZXY7Ci0JdnhwLT5saW5rLnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwotCXBfZGV2LT5pbnN0YW5jZSA9ICZ2eHAtPmxpbms7Ci0Jdnhwb2NrZXRfY29uZmlnKCZ2eHAtPmxpbmspOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHZ4cG9ja2V0X2NvbmZpZyhwX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHZ4cG9ja2V0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCB2eHBvY2tldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwX2Rldik7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwOwogCXN0cnVjdCB2eF9jb3JlICpjaGlwOwogCkBAIC00MTMsNyArMzgxLDcgQEAKIAkuZHJ2CQk9IHsKIAkJLm5hbWUJPSAic25kLXZ4cG9ja2V0IiwKIAl9LAotCS5wcm9iZQkJPSB2eHBvY2tldF9hdHRhY2gsCisJLnByb2JlCQk9IHZ4cG9ja2V0X3Byb2JlLAogCS5yZW1vdmUJCT0gdnhwb2NrZXRfZGV0YWNoLAogCS5pZF90YWJsZQk9IHZ4cF9pZHMsCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuaCBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oCmluZGV4IDY3ZWZhZTMuLjI3ZWEwMDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5oCkBAIC00Miw3ICs0Miw3IEBACiAJaW50IGluZGV4OwkvKiBjYXJkIGluZGV4ICovCiAKIAkvKiBwY21jaWEgc3R1ZmYgKi8KLQlkZXZfbGlua190IGxpbms7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCWRldl9ub2RlX3Qgbm9kZTsKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9kYWNhLmMgYi9zb3VuZC9wcGMvZGFjYS5jCmluZGV4IGFhMDllYmQuLjQ2ZWViZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9kYWNhLmMKKysrIGIvc291bmQvcHBjL2RhY2EuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAKICNpZmRlZiBDT05GSUdfS01PRAogCWlmIChjdXJyZW50LT5mcy0+cm9vdCkKLQkJcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisJCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwkKIAogCW1peCA9IGttYWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy90b29uaWUuYyBiL3NvdW5kL3BwYy90b29uaWUuYwppbmRleCA0ZTU5NTE3Li4xYWM3Yzg1IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdG9vbmllLmMKKysrIGIvc291bmQvcHBjL3Rvb25pZS5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAljaGlwLT5taXhlcl9kYXRhID0gTlVMTDsKIH0KIAotaW50IHNuZF9wbWFjX3Rvb25pZV9pbml0KHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKK2ludCBfX2luaXQgc25kX3BtYWNfdG9vbmllX2luaXQoc3RydWN0IHNuZF9wbWFjICpjaGlwKQogewogCXN0cnVjdCBwbWFjX3Rvb25pZSAqbWl4OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCAxMTQ2ZGQ4Li43MGU0ZWJjIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTEzMTMsNyArMTMxMyw3IEBACiAKICNpZmRlZiBDT05GSUdfS01PRAogCWlmIChjdXJyZW50LT5mcy0+cm9vdCkKLQkJcmVxdWVzdF9tb2R1bGUoImkyYy1rZXl3ZXN0Iik7CisJCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKICNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwkKIAogCW1peCA9IGttYWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggOGQwOGIzNC4uY2U4NjI4MyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTMwNiw4ICszMDYsOCBAQAogCQljdmFsLT5yZXMgPSAxOwogCWlmICh2YWwgPCBjdmFsLT5taW4pCiAJCXJldHVybiAwOwotCWVsc2UgaWYgKHZhbCA+IGN2YWwtPm1heCkKLQkJcmV0dXJuIChjdmFsLT5tYXggLSBjdmFsLT5taW4pIC8gY3ZhbC0+cmVzOworCWVsc2UgaWYgKHZhbCA+PSBjdmFsLT5tYXgpCisJCXJldHVybiAoY3ZhbC0+bWF4IC0gY3ZhbC0+bWluICsgY3ZhbC0+cmVzIC0gMSkgLyBjdmFsLT5yZXM7CiAJZWxzZQogCQlyZXR1cm4gKHZhbCAtIGN2YWwtPm1pbikgLyBjdmFsLT5yZXM7CiB9CkBAIC02NzAsNiArNjcwLDM2IEBACiAJCX0KIAkJaWYgKGN2YWwtPnJlcyA9PSAwKQogCQkJY3ZhbC0+cmVzID0gMTsKKworCQkvKiBBZGRpdGlvbmFsIGNoZWNrcyBmb3IgdGhlIHByb3BlciByZXNvbHV0aW9uCisJCSAqCisJCSAqIFNvbWUgZGV2aWNlcyByZXBvcnQgc21hbGxlciByZXNvbHV0aW9ucyB0aGFuIGFjdHVhbGx5CisJCSAqIHJlYWN0aW5nLiAgVGhleSBkb24ndCByZXR1cm4gZXJyb3JzIGJ1dCBzaW1wbHkgY2xpcAorCQkgKiB0byB0aGUgbG93ZXIgYWxpZ25lZCB2YWx1ZS4KKwkJICovCisJCWlmIChjdmFsLT5taW4gKyBjdmFsLT5yZXMgPCBjdmFsLT5tYXgpIHsKKwkJCWludCBsYXN0X3ZhbGlkX3JlcyA9IGN2YWwtPnJlczsKKwkJCWludCBzYXZlZCwgdGVzdCwgY2hlY2s7CisJCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZzYXZlZCk7CisJCQlmb3IgKDs7KSB7CisJCQkJdGVzdCA9IHNhdmVkOworCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWF4KQorCQkJCQl0ZXN0ICs9IGN2YWwtPnJlczsKKwkJCQllbHNlCisJCQkJCXRlc3QgLT0gY3ZhbC0+cmVzOworCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWluIHx8IHRlc3QgPiBjdmFsLT5tYXggfHwKKwkJCQkgICAgc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCB0ZXN0KSB8fAorCQkJCSAgICBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKKwkJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodGVzdCA9PSBjaGVjaykKKwkJCQkJYnJlYWs7CisJCQkJY3ZhbC0+cmVzICo9IDI7CisJCQl9CisJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHNhdmVkKTsKKwkJfQorCiAJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC02OTUsNyArNzI1LDggQEAKIAkJaWYgKCEgY3ZhbC0+aW5pdGlhbGl6ZWQpCiAJCQlnZXRfbWluX21heChjdmFsLCAgMCk7CiAJCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IChjdmFsLT5tYXggLSBjdmFsLT5taW4pIC8gY3ZhbC0+cmVzOworCQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPQorCQkJKGN2YWwtPm1heCAtIGN2YWwtPm1pbiArIGN2YWwtPnJlcyAtIDEpIC8gY3ZhbC0+cmVzOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JxdWlya3MuaCBiL3NvdW5kL3VzYi91c2JxdWlya3MuaAppbmRleCAwOTkyYTA5Li45MzUxODQ2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNicXVpcmtzLmgKKysrIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCkBAIC0xNTMxLDYgKzE1MzEsMTUgQEAKIAl9CiB9LAogeworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgwY2NkLCAweDAwMTQpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiVGVycmFUZWMiLAorCQkucHJvZHVjdF9uYW1lID0gIlBIQVNFIDI2IiwKKwkJLmlmbnVtID0gMywKKwkJLnR5cGUgPSBRVUlSS19NSURJX1NUQU5EQVJEX0lOVEVSRkFDRQorCX0KK30sCit7CiAJVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CiAJCS52ZW5kb3JfbmFtZSA9ICJNaWRpdGVjaCIsCmRpZmYgLS1naXQgYS91c3IvTWFrZWZpbGUgYi91c3IvTWFrZWZpbGUKaW5kZXggZTIxMjljYi4uMTlkNzRlNiAxMDA2NDQKLS0tIGEvdXNyL01ha2VmaWxlCisrKyBiL3Vzci9NYWtlZmlsZQpAQCAtMSw2NSArMSw0OCBAQAorIworIyBrYnVpbGQgZmlsZSBmb3IgdXNyLyAtIGluY2x1ZGluZyBpbml0cmFtZnMgaW1hZ2UKKyMKIAora2xpYmNkaXJzOjsKKworIyBHZW5lcmF0ZSBidWlsdGluLm8gYmFzZWQgb24gaW5pdHJhbWZzX2RhdGEubwogb2JqLXkgOj0gaW5pdHJhbWZzX2RhdGEubwogCi1ob3N0cHJvZ3MteSAgOj0gZ2VuX2luaXRfY3BpbwotCi1jbGVhbi1maWxlcyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6IGluaXRyYW1mc19saXN0Ci0KICMgaW5pdHJhbWZzX2RhdGEubyBjb250YWlucyB0aGUgaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpbWFnZS4KICMgVGhlIGltYWdlIGlzIGluY2x1ZGVkIHVzaW5nIC5pbmNiaW4sIGEgZGVwZW5kZW5jeSB3aGljaCBpcyBub3QKICMgdHJhY2tlZCBhdXRvbWF0aWNhbGx5LgogJChvYmopL2luaXRyYW1mc19kYXRhLm86ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvLmd6IEZPUkNFCiAKLWlmZGVmIENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQKLWdlbl9pbml0cmFtZnNfYXJncyArPSAtdSAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQpCisjIyMjIworIyBHZW5lcmF0ZSB0aGUgaW5pdHJhbWZzIGNwaW8gYXJjaGl2ZQorCitob3N0cHJvZ3MteSA6PSBnZW5faW5pdF9jcGlvCitpbml0cmFtZnMgICA6PSAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAorcmFtZnMtaW5wdXQgOj0gJChpZiAkKGZpbHRlci1vdXQgIiIsJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpLCBcCisgICAgICAgICAgICAgICAgICAgICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpLC1kKQorcmFtZnMtYXJncyAgOj0gXAorICAgICAgICAkKGlmICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCksIC11ICQoQ09ORklHX0lOSVRSQU1GU19ST09UX1VJRCkpIFwKKyAgICAgICAgJChpZiAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpLCAtZyAkKENPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQpKSBcCisgICAgICAgICQocmFtZnMtaW5wdXQpCisKKyMgLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFsbCBmaWxlcyBpbmNsdWRlZAorIyBpbiBpbml0cmFtZnMgYW5kIHRvIGRldGVjdCBpZiBhbnkgZmlsZXMgYXJlIGFkZGVkL3JlbW92ZWQuCisjIFJlbW92ZWQgZmlsZXMgYXJlIGlkZW50aWZpZWQgYnkgZGlyZWN0b3J5IHRpbWVzdGFtcCBiZWluZyB1cGRhdGVkCisjIFRoZSBkZXBlbmRlbmN5IGxpc3QgaXMgZ2VuZXJhdGVkIGJ5IGdlbl9pbml0cmFtZnMuc2ggLWwKK2lmbmVxICgkKHdpbGRjYXJkICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kKSwpCisJaW5jbHVkZSAkKG9iaikvLmluaXRyYW1mc19kYXRhLmNwaW8uZ3ouZAogZW5kaWYKIAotaWZkZWYgQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRAotZ2VuX2luaXRyYW1mc19hcmdzICs9IC1nICQoQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRCkKLWVuZGlmCitxdWlldF9jbWRfaW5pdGZzID0gR0VOICAgICAkQAorICAgICAgY21kX2luaXRmcyA9ICQoaW5pdHJhbWZzKSAtbyAkQCAkKHJhbWZzLWFyZ3MpICQocmFtZnMtaW5wdXQpCiAKLSMgVGhlICQoc2hlbGwgZWNobyAkKENPTkZJR19JTklUUkFNRlNfU09VUkNFKSkgaXMgdG8gcmVtb3ZlIHRoZQotIyBncmF0dWl0b3VzIGJlZ2luIGFuZCBlbmQgcXVvdGVzIGZyb20gdGhlIEtjb25maWcgc3RyaW5nIHR5cGUuCi0jIEludGVybmFsLCBlc2NhcGVkIHF1b3RlcyBpbiB0aGUgS2NvbmZpZyBzdHJpbmcgd2lsbCBsb29zZSB0aGUKLSMgZXNjYXBlIGFuZCBiZWNvbWUgYWN0aXZlIHF1b3Rlcy4KLXF1b3RlZml4ZWRfaW5pdHJhbWZzX3NvdXJjZSA6PSAkKHNoZWxsIGVjaG8gJChDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSkpCi0KLWZpbGVjaGtfaW5pdHJhbWZzX2xpc3QgPSAkKENPTkZJR19TSEVMTCkgXAotICQoc3JjdHJlZSkvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggJChnZW5faW5pdHJhbWZzX2FyZ3MpICQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKQotCi0kKG9iaikvaW5pdHJhbWZzX2xpc3Q6ICQob2JqKS9NYWtlZmlsZSBGT1JDRQotCSQoY2FsbCBmaWxlY2hrLGluaXRyYW1mc19saXN0KQotCi1xdWlldF9jbWRfY3BpbyA9IENQSU8gICAgJEAKLSAgICAgIGNtZF9jcGlvID0gLi8kPCAkKG9iaikvaW5pdHJhbWZzX2xpc3QgPiAkQAotCi0KLSMgQ2hlY2sgaWYgdGhlIElOSVRSQU1GU19TT1VSQ0UgaXMgYSBjcGlvIGFyY2hpdmUKLWlmbmVxICgsJChmaW5kc3RyaW5nIC5jcGlvLCQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKSkpCi0KLSMgSU5JVFJBTUZTX1NPVVJDRSBoYXMgYSBjcGlvIGFyY2hpdmUgLSB2ZXJpZnkgdGhhdCBpdCdzIGEgc2luZ2xlIGZpbGUKLWlmbmVxICgxLCQod29yZHMgJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpKSkKLSQoZXJyb3IgT25seSBhIHNpbmdsZSBmaWxlIG1heSBiZSBzcGVjaWZpZWQgaW4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UgKD0iJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpIikgd2hlbiBhIGNwaW8gYXJjaGl2ZSBpcyBkaXJlY3RseSBzcGVjaWZpZWQuKQotZW5kaWYKLSMgTm93IHVzZSB0aGUgY3BpbyBhcmNoaXZlIGRpcmVjdGx5Ci1pbml0cmFtZnNfZGF0YV9jcGlvID0gJChxdW90ZWZpeGVkX2luaXRyYW1mc19zb3VyY2UpCi10YXJnZXRzICs9ICQocXVvdGVmaXhlZF9pbml0cmFtZnNfc291cmNlKQotCi1lbHNlCi0KLSMgSU5JVFJBTUZTX1NPVVJDRSBpcyBub3QgYSBjcGlvIGFyY2hpdmUgLSBjcmVhdGUgb25lCi0kKG9iaikvaW5pdHJhbWZzX2RhdGEuY3BpbzogJChvYmopL2dlbl9pbml0X2NwaW8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5pdHJhbWZzLXkpICQob2JqKS9pbml0cmFtZnNfbGlzdCBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGNwaW8pCi0KLXRhcmdldHMgKz0gaW5pdHJhbWZzX2RhdGEuY3BpbwotaW5pdHJhbWZzX2RhdGFfY3BpbyA9ICQob2JqKS9pbml0cmFtZnNfZGF0YS5jcGlvCi0KLWVuZGlmCi0KLQotJChvYmopL2luaXRyYW1mc19kYXRhLmNwaW8uZ3o6ICQoaW5pdHJhbWZzX2RhdGFfY3BpbykgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQotCi10YXJnZXRzICs9IGluaXRyYW1mc19kYXRhLmNwaW8uZ3oKK3RhcmdldHMgOj0gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorJChkZXBzX2luaXRyYW1mcyk6IGtsaWJjZGlycworIyBXZSByZWJ1aWxkIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaWY6CisjIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoZW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyAyKSBUaGVyZSBhcmUgY2hhbmdlcyBpbiB3aGljaCBmaWxlcyBhcmUgaW5jbHVkZWQgKGFkZGVkIG9yIGRlbGV0ZWQpCisjIDMpIElmIGdlbl9pbml0X2NwaW8gYXJlIG5ld2VyIHRoYW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5negorIyA0KSBhcmd1bWVudHMgdG8gZ2VuX2luaXRyYW1mcy5zaCBjaGFuZ2VzCiskKG9iaikvaW5pdHJhbWZzX2RhdGEuY3Bpby5nejogJChvYmopL2dlbl9pbml0X2NwaW8gJChkZXBzX2luaXRyYW1mcykga2xpYmNkaXJzCisJJChRKSQoaW5pdHJhbWZzKSAtbCAkKHJhbWZzLWlucHV0KSA+ICQob2JqKS8uaW5pdHJhbWZzX2RhdGEuY3Bpby5nei5kCisJJChjYWxsIGlmX2NoYW5nZWQsaW5pdGZzKQogCmRpZmYgLS1naXQgYS91c3IvZ2VuX2luaXRfY3Bpby5jIGIvdXNyL2dlbl9pbml0X2NwaW8uYwppbmRleCAzM2RiY2JmLi44M2FjZDZjIDEwMDY0NAotLS0gYS91c3IvZ2VuX2luaXRfY3Bpby5jCisrKyBiL3Vzci9nZW5faW5pdF9jcGlvLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCQkJCSJFUlJPUjogaW5jb3JyZWN0IGZvcm1hdCwgY291bGQgbm90IGxvY2F0ZSBmaWxlIHR5cGUgbGluZSAlZDogJyVzJ1xuIiwKIAkJCQlsaW5lX25yLCBsaW5lKTsKIAkJCWVjID0gLTE7CisJCQlicmVhazsKIAkJfQogCiAJCWlmICgnXG4nID09ICp0eXBlKSB7CkBAIC01MDYsNyArNTA3LDggQEAKIAkJCQlsaW5lX25yLCBsaW5lKTsKIAkJfQogCX0KLQljcGlvX3RyYWlsZXIoKTsKKwlpZiAoZWMgPT0gMCkKKwkJY3Bpb190cmFpbGVyKCk7CiAKIAlleGl0KGVjKTsKIH0K